<?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>217916</bug_id>
          
          <creation_ts>2020-10-19 11:40:45 -0700</creation_ts>
          <short_desc>[JSC] OrdinarySet should invoke custom [[Set]] methods</short_desc>
          <delta_ts>2023-05-01 12:47:22 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=216533</see_also>
    
    <see_also>https://github.com/web-platform-tests/wpt/pull/28693</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=256172</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alexey Shvayka">ashvayka</reporter>
          <assigned_to name="Alexey Shvayka">ashvayka</assigned_to>
          <cc>annulen</cc>
    
    <cc>cdumez</cc>
    
    <cc>clopez</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>hi</cc>
    
    <cc>joepeck</cc>
    
    <cc>keith_miller</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>saam</cc>
    
    <cc>sergio</cc>
    
    <cc>smoley</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>youennf</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1699337</commentid>
    <comment_count>0</comment_count>
    <who name="Alexey Shvayka">ashvayka</who>
    <bug_when>2020-10-19 11:40:45 -0700</bug_when>
    <thetext>Introduce OverridesPut[ByIndex] type info flags</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1699387</commentid>
    <comment_count>1</comment_count>
      <attachid>411780</attachid>
    <who name="Alexey Shvayka">ashvayka</who>
    <bug_when>2020-10-19 12:58:29 -0700</bug_when>
    <thetext>Created attachment 411780
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1700775</commentid>
    <comment_count>2</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-10-22 12:15:49 -0700</bug_when>
    <thetext>&lt;rdar://problem/70583959&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1700791</commentid>
    <comment_count>3</comment_count>
      <attachid>411780</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-10-22 13:10:28 -0700</bug_when>
    <thetext>Comment on attachment 411780
Patch

Can we have a microbenchmark which illustrates the effect of this change for ClonedArguments? And can you measure the perf effect on that? ClonedArguments is used when `arguments` in strict mode, so, it is one of the frequently used critical object. We need to keep performance for this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1719288</commentid>
    <comment_count>4</comment_count>
      <attachid>417532</attachid>
    <who name="Alexey Shvayka">ashvayka</who>
    <bug_when>2021-01-13 08:04:08 -0800</bug_when>
    <thetext>Created attachment 417532
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1720391</commentid>
    <comment_count>5</comment_count>
      <attachid>417843</attachid>
    <who name="Alexey Shvayka">ashvayka</who>
    <bug_when>2021-01-18 12:40:09 -0800</bug_when>
    <thetext>Created attachment 417843
WIP

Switch back to OverridesPut approach.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1723376</commentid>
    <comment_count>6</comment_count>
      <attachid>418648</attachid>
    <who name="Alexey Shvayka">ashvayka</who>
    <bug_when>2021-01-28 08:45:37 -0800</bug_when>
    <thetext>Created attachment 418648
WIP

Combine OverridesPut with previous approach of calling [[GetOwnProperty]] overrides in putInlineSlot().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1723385</commentid>
    <comment_count>7</comment_count>
      <attachid>418650</attachid>
    <who name="Alexey Shvayka">ashvayka</who>
    <bug_when>2021-01-28 09:18:45 -0800</bug_when>
    <thetext>Created attachment 418650
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1748946</commentid>
    <comment_count>8</comment_count>
      <attachid>425673</attachid>
    <who name="Alexey Shvayka">ashvayka</who>
    <bug_when>2021-04-09 19:16:14 -0700</bug_when>
    <thetext>Created attachment 425673
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1748948</commentid>
    <comment_count>9</comment_count>
      <attachid>425674</attachid>
    <who name="Alexey Shvayka">ashvayka</who>
    <bug_when>2021-04-09 19:30:33 -0700</bug_when>
    <thetext>Created attachment 425674
WIP

Fix build.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1750347</commentid>
    <comment_count>10</comment_count>
      <attachid>426047</attachid>
    <who name="Alexey Shvayka">ashvayka</who>
    <bug_when>2021-04-14 14:47:30 -0700</bug_when>
    <thetext>Created attachment 426047
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1750349</commentid>
    <comment_count>11</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2021-04-14 14:48:23 -0700</bug_when>
    <thetext>This patch modifies the imported WPT tests. Please ensure that any changes on the tests (not coming from a WPT import) are exported to WPT. Please see https://trac.webkit.org/wiki/WPTExportProcess</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1750640</commentid>
    <comment_count>12</comment_count>
    <who name="Alexey Shvayka">ashvayka</who>
    <bug_when>2021-04-15 09:10:06 -0700</bug_when>
    <thetext>(In reply to Yusuke Suzuki from comment #3)
&gt; Comment on attachment 411780 [details]
&gt; Patch
&gt; 
&gt; Can we have a microbenchmark which illustrates the effect of this change for
&gt; ClonedArguments? And can you measure the perf effect on that?
&gt; ClonedArguments is used when `arguments` in strict mode, so, it is one of
&gt; the frequently used critical object. We need to keep performance for this.

I&apos;ve deferred fixing putByIndex() to a follow-up; new patch fixes only non-index put(), with following microbenchmark results:

                                                 trunk                      patch

put-slow-no-cache-function                   59.2466+-1.0115     ?     59.6670+-0.8626        ?
put-slow-no-cache-js-proxy                   59.0333+-0.7585     ^     50.2321+-0.9472        ^ definitely 1.1752x faster
put-slow-no-cache-long-prototype-chain       49.9765+-1.1316     ^     47.0827+-1.0213        ^ definitely 1.0615x faster
put-slow-no-cache                            51.4902+-0.7962     ^     49.5543+-0.9953        ^ definitely 1.0391x faster
put-slow-no-cache-array                      53.3368+-0.8638     ?     53.8900+-0.6450        ? might be 1.0104x slower
property-replace-and-setter-on-js-proxy     223.9187+-3.8382     ?    225.2152+-3.6012        ?
reflect-set-with-receiver                   131.7529+-1.5210     ^     56.4580+-1.2031        ^ definitely 2.3336x faster</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1751009</commentid>
    <comment_count>13</comment_count>
      <attachid>426047</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-04-16 03:28:49 -0700</bug_when>
    <thetext>Comment on attachment 426047
Patch

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

This is awesome. r=me

&gt; Source/JavaScriptCore/runtime/JSCJSValue.cpp:229
&gt; +    RELEASE_AND_RETURN(scope, obj-&gt;methodTable(vm)-&gt;put(obj, globalObject, propertyName, value, slot));

This is a bit incorrect, but the incorrectness is unobservable.

&quot;Hello&quot;.length = 42;

This should be an error when we are assigning this value to StringObject materialized from &quot;Hello&quot;. But we avoid materializing it (that&apos;s important optimization), and we are querying to StringPrototype first.
And since StringPrototype has the same &quot;length&quot; property, we are anyway throwing an error.

Can we have an explicit test for this? (&quot;Hello&quot;.length = 42 in sloppy and strict modes) And can we have FIXME comment about it here?

&gt; Source/JavaScriptCore/runtime/JSObject.cpp:823
&gt; +                customSetter(globalObject, JSValue::encode(slot.thisValue()), JSValue::encode(value), propertyName);
&gt;                  RETURN_IF_EXCEPTION(scope, false);
&gt; -                if (result != TriState::Indeterminate)
&gt; -                    return result == TriState::True;
&gt; +                return true;

Let&apos;s make it

scope.release();
customSetter(globalObject, JSValue::encode(slot.thisValue()), JSValue::encode(value), propertyName);
return true;

&gt; Source/JavaScriptCore/runtime/JSObject.cpp:831
&gt; +                    RELEASE_AND_RETURN(scope, customSetter(globalObject, JSValue::encode(obj), JSValue::encode(value), propertyName));

Should we return true too?

&gt; Source/JavaScriptCore/runtime/JSObject.h:-1441
&gt; -
&gt; -ALWAYS_INLINE void JSObject::doPutPropertySecurityCheck(JSObject*, JSGlobalObject*, PropertyName, PutPropertySlot&amp;)
&gt; -{
&gt; -}

This is awesome.

&gt; Source/JavaScriptCore/runtime/JSObjectInlines.h:70
&gt; +        if (structure-&gt;hasReadOnlyOrGetterSetterPropertiesExcludingProto() || structure-&gt;typeInfo().overridesPut() || structure-&gt;typeInfo().overridesGetPrototype())

One optimization idea I think. Should we check `structure-&gt;typeInfo().overridesPut()` even for the originating object?
Let&apos;s consider a case,

[A: object, which overrides put] -[[Prototype]]-&gt; [B: object, which does not override put]

In that case, when calling A::put, we are already in A::put. And then we can consider whether we can use fast-path put or not. At that point, I think we do not need to check OverridesPut for the initial object since we already called A::put, is my understanding correct?
RegExpObject, ErrorInstance, JSFunction, TypedArrays, and Arguments objects are the cases.

(If we do this optimization, we also need to take care for Object.assign case since that function directly calls it.)

&gt; Source/JavaScriptCore/runtime/PutPropertySlot.h:119
&gt; +    bool isTaintedByOpaqueObject() const { return m_isTaintedByOpaqueObject; }

Can we remove `Context context() const { return static_cast&lt;Context&gt;(m_context); }`&apos;s cast?

&gt; Source/JavaScriptCore/runtime/PutPropertySlot.h:140
&gt; +    bool m_isTaintedByOpaqueObject { false };

Can we make it a bit? (`bool m_isTaintedByOpaqueObject : 1`). And we need to put `false` initialization in the constructor.

&gt; Source/JavaScriptCore/runtime/PutPropertySlot.h:142
&gt;      uint8_t m_context;

Can we use Context instead of uint8_t?

&gt; Source/JavaScriptCore/runtime/StringPrototype.cpp:-168
&gt; -    putDirectWithoutTransition(vm, vm.propertyNames-&gt;length, jsNumber(0), PropertyAttribute::DontDelete | PropertyAttribute::ReadOnly | PropertyAttribute::DontEnum);

Nice</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1752696</commentid>
    <comment_count>14</comment_count>
      <attachid>426668</attachid>
    <who name="Alexey Shvayka">ashvayka</who>
    <bug_when>2021-04-21 04:04:16 -0700</bug_when>
    <thetext>Created attachment 426668
Patch

Add string &quot;length&quot; check &amp; test, implement canPerformFastPutInline() optimization, fix JSGlobalObject::put() to stop prototype chain traversal, introduce putInlineFastReplacingStaticPropertyIfNeeded(), and tweak PutPropertySlot.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1752697</commentid>
    <comment_count>15</comment_count>
    <who name="Alexey Shvayka">ashvayka</who>
    <bug_when>2021-04-21 04:04:41 -0700</bug_when>
    <thetext>(In reply to Yusuke Suzuki from comment #13)
&gt; This is awesome. r=me

Many thanks for reviewing this, Yusuke!
Your comments were extremely helpful and led me to discovering a several bugs.

&gt; &gt; Source/JavaScriptCore/runtime/JSCJSValue.cpp:229
&gt; &gt; +    RELEASE_AND_RETURN(scope, obj-&gt;methodTable(vm)-&gt;put(obj, globalObject, propertyName, value, slot));
&gt; 
&gt; Can we have an explicit test for this? (&quot;Hello&quot;.length = 42 in sloppy and strict modes)

Added JSTests/stress/put-to-primitive.js

&gt; And can we have FIXME comment about it here?

I&apos;ve added an inline check for string &amp; &quot;length&quot; instead, which is fine considering new primitive wrappers are unlikely to be exotic.

&gt; &gt; Source/JavaScriptCore/runtime/JSObject.cpp:823
&gt; &gt; +                customSetter(globalObject, JSValue::encode(slot.thisValue()), JSValue::encode(value), propertyName);
&gt; &gt;                  RETURN_IF_EXCEPTION(scope, false);
&gt; &gt; -                if (result != TriState::Indeterminate)
&gt; &gt; -                    return result == TriState::True;
&gt; &gt; +                return true;
&gt; 
&gt; Let&apos;s make it
&gt; 
&gt; scope.release();
&gt; customSetter(globalObject, JSValue::encode(slot.thisValue()), JSValue::encode(value), propertyName);
&gt; return true;

Fixed (and for JSRemoteDOMWindow::put() as well).
Nice, it&apos;s now aligned with userland Accessor.

&gt; &gt; Source/JavaScriptCore/runtime/JSObject.cpp:831
&gt; &gt; +                    RELEASE_AND_RETURN(scope, customSetter(globalObject, JSValue::encode(obj), JSValue::encode(value), propertyName));
&gt; 
&gt; Should we return true too?

I don&apos;t think so: a CustomValue handles writability on its own, without toggling PropertyAttribute::ReadOnly (for performance reasons),
so it may return `false` + throw an exception. A good example of that is RegExp&apos;s &quot;lastIndex&quot; setter.

&gt; &gt; Source/JavaScriptCore/runtime/JSObjectInlines.h:70
&gt; &gt; +        if (structure-&gt;hasReadOnlyOrGetterSetterPropertiesExcludingProto() || structure-&gt;typeInfo().overridesPut() || structure-&gt;typeInfo().overridesGetPrototype())
&gt; 
&gt; At that point, I think we do not need to check OverridesPut for the initial object since we already called A::put, is my understanding correct?

Yes, absolutely. putInlineSlow() has the same assumption: once ordinary put() is reached, all special properties were already handled.
This is a great suggestion that led me to discovering two flaws in handling of non-reified static properties:
  1. We can&apos;t handle them only in putInlineSlow() since an object may not have read-only properties / accessors / put() override.
  2. Reflect.set called on receiver should also correctly handle non-reified static functions (preserve attributes) / accessors (throw).

putInlineFastReplacingStaticPropertyIfNeeded() was introduced to fix those; test coverage was expanded.

&gt; RegExpObject, ErrorInstance, JSFunction, TypedArrays, and Arguments objects are the cases.

This will benefit pretty much all built-ins by using putInlineFast() at least for %BuiltIn%.prototype -&gt; Object.prototype segment of the [[Set]].
Most built-ins&apos; prototypes are exotic or have read-only symbols though.

&gt; (If we do this optimization, we also need to take care for Object.assign case since that function directly calls it.)

Object.assign calls canPerformFastPutInline() only on JSFinalObjects, so no tweaking required.

&gt; &gt; Source/JavaScriptCore/runtime/PutPropertySlot.h:119
&gt; &gt; +    bool isTaintedByOpaqueObject() const { return m_isTaintedByOpaqueObject; }
&gt; 
&gt; Can we remove `Context context() const { return static_cast&lt;Context&gt;(m_context); }`&apos;s cast?

Removed.

&gt; &gt; Source/JavaScriptCore/runtime/PutPropertySlot.h:140
&gt; &gt; +    bool m_isTaintedByOpaqueObject { false };
&gt; 
&gt; Can we make it a bit? (`bool m_isTaintedByOpaqueObject : 1`). And we need to
&gt; put `false` initialization in the constructor.

Fixed.

&gt; &gt; Source/JavaScriptCore/runtime/PutPropertySlot.h:142
&gt; &gt;      uint8_t m_context;
&gt; 
&gt; Can we use Context instead of uint8_t?

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1753603</commentid>
    <comment_count>16</comment_count>
      <attachid>426914</attachid>
    <who name="Alexey Shvayka">ashvayka</who>
    <bug_when>2021-04-23 09:10:07 -0700</bug_when>
    <thetext>Created attachment 426914
Patch

Fix, optimize, and expand test coverage for reified static properties.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1754152</commentid>
    <comment_count>17</comment_count>
      <attachid>427034</attachid>
    <who name="Alexey Shvayka">ashvayka</who>
    <bug_when>2021-04-26 04:05:42 -0700</bug_when>
    <thetext>Created attachment 427034
Patch

Adjust property attributes in JSDollarVM.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1754183</commentid>
    <comment_count>18</comment_count>
      <attachid>427034</attachid>
    <who name="Alexey Shvayka">ashvayka</who>
    <bug_when>2021-04-26 07:47:41 -0700</bug_when>
    <thetext>Comment on attachment 427034
Patch

run-layout-tests-in-guard-malloc-stress-mode failure doesn&apos;t reproduce locally; it&apos;s probably an issue similar to https://bugs.webkit.org/show_bug.cgi?id=224358.

Putting r+ on my own patch to make WPT export bot happy (it ignores reviewed patches that are obsolete).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1754193</commentid>
    <comment_count>19</comment_count>
    <who name="Alexey Shvayka">ashvayka</who>
    <bug_when>2021-04-26 08:21:14 -0700</bug_when>
    <thetext>Committed r276592 (237028@main): &lt;https://commits.webkit.org/237028@main&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>411780</attachid>
            <date>2020-10-19 12:58:29 -0700</date>
            <delta_ts>2021-01-13 08:04:03 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-217916-20201019225827.patch</filename>
            <type>text/plain</type>
            <size>82150</size>
            <attacher name="Alexey Shvayka">ashvayka</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyNjg2NzUpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDEyIEBACisyMDIwLTEwLTE5ICBBbGV4ZXkgU2h2YXlrYSAgPHNodmFpa2FsZXNo
QGdtYWlsLmNvbT4KKworICAgICAgICBJbnRyb2R1Y2UgT3ZlcnJpZGVzUHV0W0J5SW5kZXhdIHR5
cGUgaW5mbyBmbGFncworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjE3OTE2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiBzdHJlc3MvcHJvdG90eXBlLWNoYWluLXB1dC5qczogQWRkZWQuCisKIDIwMjAtMTAt
MTggIENhaW8gTGltYSAgPHRpY2Fpb2xpbWFAZ21haWwuY29tPgogCiAgICAgICAgIFtFU05leHRd
W0pJVF0gQWRkIHN1cHBvcnQgZm9yIFVudHlwZWRVc2Ugb24gUHV0UHJpdmF0ZU5hbWUncyBiYXNl
IG9wZXJhbmQKSW5kZXg6IEpTVGVzdHMvc3RyZXNzL3Byb3RvdHlwZS1jaGFpbi1wdXQuanMKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3MvcHJvdG90eXBlLWNoYWluLXB1dC5qcwkobm9uZXhp
c3RlbnQpCisrKyBKU1Rlc3RzL3N0cmVzcy9wcm90b3R5cGUtY2hhaW4tcHV0LmpzCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsMjU2IEBACisoYXN5bmMgZnVuY3Rpb24oKSB7CisKK2NvbnN0IGRl
c2NSZWFkT25seSA9IHt2YWx1ZTogMSwgd3JpdGFibGU6IGZhbHNlLCBlbnVtZXJhYmxlOiB0cnVl
LCBjb25maWd1cmFibGU6IHRydWV9OworY29uc3QgZGVzY1JlYWRXcml0ZSA9IHt2YWx1ZTogMiwg
d3JpdGFibGU6IHRydWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZX07Citj
b25zdCBtb2R1bGVOYW1lc3BhY2VPYmplY3QgPSBhd2FpdCBpbXBvcnQoIi4vcmVzb3VyY2VzL21v
ZHVsZS1uYW1lc3BhY2UtYWNjZXNzLmpzIik7Citjb25zdCByYW5kVmFsID0gMzk2NTYwNDkyNzsg
Ly8gPD0gMiAqKiAzMiAtIDEKKworY29uc3QgdGVzdENhc2VzT2JqZWN0cyA9IFsKKyAgeworICAg
IG5hbWU6ICJPYmplY3QiLAorICAgIGdldE9iamVjdDogKCkgPT4gT2JqZWN0LmNyZWF0ZShudWxs
LCB7MDogZGVzY1JlYWRPbmx5LCAxOiBkZXNjUmVhZFdyaXRlLCBuYW1lOiBkZXNjUmVhZE9ubHl9
KSwKKyAgICByZWFkT25seUtleXM6IFsiMCIsICJuYW1lIl0sCisgIH0sCisgIHsKKyAgICBuYW1l
OiAiQXJyYXkgKHNwYXJzZSBtYXApIiwKKyAgICBnZXRPYmplY3Q6ICgpID0+IE9iamVjdC5kZWZp
bmVQcm9wZXJ0aWVzKFswLCAxLCAyXSwgezE6IHt3cml0YWJsZTogZmFsc2V9LCAyOiB7d3JpdGFi
bGU6IGZhbHNlfX0pLAorICAgIHJlYWRPbmx5S2V5czogWyIxIiwgIjIiXSwKKyAgfSwKKyAgewor
ICAgIG5hbWU6ICJBcnJheSAobm9uLXdyaXRhYmxlIC5sZW5ndGgpIiwKKyAgICBnZXRPYmplY3Q6
ICgpID0+IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShbXSwgImxlbmd0aCIsIHt3cml0YWJsZTogZmFs
c2V9KSwKKyAgICByZWFkT25seUtleXM6IFsibGVuZ3RoIl0sCisgIH0sCisgIHsKKyAgICBuYW1l
OiAiRnVuY3Rpb24gKHN0cmljdCkiLAorICAgIGdldE9iamVjdDogKCkgPT4gZnVuY3Rpb24oKSB7
ICJ1c2Ugc3RyaWN0IjsgfSwKKyAgICByZWFkT25seUtleXM6IFsibGVuZ3RoIiwgIm5hbWUiXSwK
KyAgfSwKKyAgeworICAgIG5hbWU6ICJGdW5jdGlvbiAobm9uLXN0cmljdCkiLAorICAgIGdldE9i
amVjdDogKCkgPT4gZnVuY3Rpb24oKSB7fSwKKyAgICByZWFkT25seUtleXM6IFsiYXJndW1lbnRz
IiwgImNhbGxlciIsICJsZW5ndGgiLCAibmFtZSJdLAorICB9LAorICB7CisgICAgbmFtZTogIlJl
Z0V4cCAobm9uLXdyaXRhYmxlIC5sYXN0SW5kZXgpIiwKKyAgICBnZXRPYmplY3Q6ICgpID0+IE9i
amVjdC5kZWZpbmVQcm9wZXJ0eSgvKD86KS9nLCAibGFzdEluZGV4Iiwge3dyaXRhYmxlOiBmYWxz
ZX0pLAorICAgIHJlYWRPbmx5S2V5czogWyJsYXN0SW5kZXgiXSwKKyAgfSwKKyAgeworICAgIG5h
bWU6ICJTdHJpbmcgKG9iamVjdCkiLAorICAgIGdldE9iamVjdDogKCkgPT4gbmV3IFN0cmluZygi
MDEyIiksCisgICAgcmVhZE9ubHlLZXlzOiBbIjAiLCAiMSIsICIyIiwgImxlbmd0aCJdLAorICB9
LAorICB7CisgICAgbmFtZTogIlByb3h5T2JqZWN0ICh3aXRob3V0IFtbU2V0XV0gaGFuZGxlciki
LAorICAgIGdldE9iamVjdDogKCkgPT4gbmV3IFByb3h5KE9iamVjdC5jcmVhdGUobnVsbCwgezA6
IGRlc2NSZWFkT25seSwgbmFtZTogZGVzY1JlYWRPbmx5LCBsZW5ndGg6IGRlc2NSZWFkV3JpdGV9
KSwge30pLAorICAgIHJlYWRPbmx5S2V5czogWyIwIiwgIm5hbWUiXSwKKyAgfSwKKyAgeworICAg
IG5hbWU6ICJKU1Byb3h5IiwKKyAgICBnZXRPYmplY3Q6ICgpID0+ICR2bS5jcmVhdGVQcm94eShP
YmplY3QuY3JlYXRlKG51bGwsIHsxOiBkZXNjUmVhZFdyaXRlLCAyOiBkZXNjUmVhZE9ubHksIGxl
bmd0aDogZGVzY1JlYWRPbmx5fSkpLAorICAgIHJlYWRPbmx5S2V5czogWyIyIiwgImxlbmd0aCJd
LAorICB9LAorICB7CisgICAgbmFtZTogIk1vZHVsZSBOYW1lc3BhY2UgT2JqZWN0IiwKKyAgICBn
ZXRPYmplY3Q6ICgpID0+IG1vZHVsZU5hbWVzcGFjZU9iamVjdCwKKyAgICByZWFkT25seUtleXM6
IFsiMCIsICJjb2NvYSIsICJsYXN0SW5kZXgiXSwKKyAgICBpc0ltbXV0YWJsZVByb3RvdHlwZTog
dHJ1ZSwKKyAgfSwKKyAgeworICAgIG5hbWU6ICJHbG9iYWwgT2JqZWN0IiwKKyAgICBnZXRPYmpl
Y3Q6ICgpID0+IGdsb2JhbFRoaXMsCisgICAgcmVhZE9ubHlLZXlzOiBbInVuZGVmaW5lZCIsICJO
YU4iLCAiSW5maW5pdHkiXSwKKyAgICBpc0ltbXV0YWJsZVByb3RvdHlwZTogdHJ1ZSwKKyAgfSwK
K107CisKK2ZvciAobGV0IHQgb2YgdGVzdENhc2VzT2JqZWN0cykgeworICBhc3NlcnRTZXRGYWls
cygKKyAgICBPYmplY3QuY3JlYXRlKHQuZ2V0T2JqZWN0KCkpLAorICAgIHQucmVhZE9ubHlLZXlz
LAorICAgIGB7fSA8ICR7dC5uYW1lfWAsCisgICk7Cit9CisKK2ZvciAobGV0IHQgb2YgdGVzdENh
c2VzT2JqZWN0cykgeworICBhc3NlcnRTZXRGYWlscygKKyAgICBPYmplY3QuY3JlYXRlKE9iamVj
dC5jcmVhdGUodC5nZXRPYmplY3QoKSkpLAorICAgIHQucmVhZE9ubHlLZXlzLAorICAgIGB7fSA8
IHt9IDwgJHt0Lm5hbWV9YCwKKyAgKTsKK30KKworZm9yIChsZXQgdCBvZiB0ZXN0Q2FzZXNPYmpl
Y3RzKSB7CisgIGlmICh0LmlzSW1tdXRhYmxlUHJvdG90eXBlKSBjb250aW51ZTsKKworICBhc3Nl
cnRTZXRGYWlscygKKyAgICBPYmplY3QuY3JlYXRlKE9iamVjdC5zZXRQcm90b3R5cGVPZih0Lmdl
dE9iamVjdCgpLCBudWxsKSksCisgICAgdC5yZWFkT25seUtleXMsCisgICAgYHt9IDwgJHt0Lm5h
bWV9IDwgbnVsbGAsCisgICk7Cit9CisKK2ZvciAobGV0IHQgb2YgdGVzdENhc2VzT2JqZWN0cykg
eworICBpZiAodC5pc0ltbXV0YWJsZVByb3RvdHlwZSkgY29udGludWU7CisKKyAgYXNzZXJ0U2V0
RmFpbHMoCisgICAgT2JqZWN0LmNyZWF0ZShPYmplY3Quc2V0UHJvdG90eXBlT2YodC5nZXRPYmpl
Y3QoKSwgbWFrZVNldHRlcnNPYmplY3QodC5yZWFkT25seUtleXMpKSksCisgICAgdC5yZWFkT25s
eUtleXMsCisgICAgYHt9IDwgJHt0Lm5hbWV9IDwgey4uLnNldHRlcnN9YCwKKyAgKTsKK30KKwor
Zm9yIChsZXQgdDEgb2YgdGVzdENhc2VzT2JqZWN0cykgeworICBpZiAodDEuaXNJbW11dGFibGVQ
cm90b3R5cGUpIGNvbnRpbnVlOworCisgIGZvciAobGV0IHQyIG9mIHRlc3RDYXNlc09iamVjdHMp
IHsKKyAgICBhc3NlcnRTZXRGYWlscygKKyAgICAgIE9iamVjdC5jcmVhdGUoT2JqZWN0LnNldFBy
b3RvdHlwZU9mKHQxLmdldE9iamVjdCgpLCB0Mi5nZXRPYmplY3QoKSkpLAorICAgICAgdDEucmVh
ZE9ubHlLZXlzLAorICAgICAgYHt9IDwgJHt0MS5uYW1lfSA8ICR7dDIubmFtZX1gLAorICAgICk7
CisgIH0KK30KKworY29uc3QgdGVzdENhc2VzUHJpbWl0aXZlcyA9IFsKKyAgeworICAgIG5hbWU6
ICJCb29sZWFuIChwcmltaXRpdmUpIiwKKyAgICB2YWx1ZTogdHJ1ZSwKKyAgICByZWFkT25seUtl
eXM6IFtdLAorICB9LAorICB7CisgICAgbmFtZTogIk51bWJlciAocHJpbWl0aXZlKSIsCisgICAg
dmFsdWU6IDMuMTQsCisgICAgcmVhZE9ubHlLZXlzOiBbXSwKKyAgfSwKKyAgeworICAgIG5hbWU6
ICJTdHJpbmcgKHByaW1pdGl2ZSkiLAorICAgIHZhbHVlOiAiMCIsCisgICAgcmVhZE9ubHlLZXlz
OiBbIjAiLCAibGVuZ3RoIl0sCisgIH0sCisgIHsKKyAgICBuYW1lOiAiU3ltYm9sIChwcmltaXRp
dmUpIiwKKyAgICB2YWx1ZTogU3ltYm9sKCksCisgICAgcmVhZE9ubHlLZXlzOiBbImRlc2NyaXB0
aW9uIiwgU3ltYm9sLnRvU3RyaW5nVGFnLCBTeW1ib2wudG9QcmltaXRpdmVdLAorICB9LAorICB7
CisgICAgbmFtZTogIkJpZ0ludCAocHJpbWl0aXZlKSIsCisgICAgdmFsdWU6IDFuLAorICAgIHJl
YWRPbmx5S2V5czogW1N5bWJvbC50b1N0cmluZ1RhZ10sCisgIH0sCitdOworCitmb3IgKGxldCB0
UCBvZiB0ZXN0Q2FzZXNQcmltaXRpdmVzKSB7CisgIGxldCBwcm90bzEgPSBPYmplY3QuZ2V0UHJv
dG90eXBlT2YodFAudmFsdWUpOworCisgIGZvciAobGV0IHRPIG9mIHRlc3RDYXNlc09iamVjdHMp
IHsKKyAgICBpZiAodE8uaXNJbW11dGFibGVQcm90b3R5cGUpIGNvbnRpbnVlOworCisgICAgbGV0
IHByb3RvMyA9IG1ha2VTZXR0ZXJzT2JqZWN0KHRPLnJlYWRPbmx5S2V5cyk7CisgICAgbGV0IHBy
b3RvMiA9IHRPLmdldE9iamVjdCgpOworICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZihwcm90bzIs
IHByb3RvMyk7CisgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKHByb3RvMSwgcHJvdG8yKTsKKwor
ICAgIGFzc2VydFNldEZhaWxzKAorICAgICAgdFAudmFsdWUsCisgICAgICBbLi4udFAucmVhZE9u
bHlLZXlzLCAuLi50Ty5yZWFkT25seUtleXNdLAorICAgICAgYCR7dFAubmFtZX0gPCAke3RPLm5h
bWV9IDwgey4uLnNldHRlcnN9YCwKKyAgICApOworICB9Cit9CisKK3sKKyAgbGV0IHRBID0gbmV3
IEludDhBcnJheShbMCwgMSwgMl0pOworICBsZXQgYmFzZSA9IE9iamVjdC5jcmVhdGUodEEpOwor
ICB0cmFuc2ZlckFycmF5QnVmZmVyKHRBLmJ1ZmZlcik7CisKKyAgZm9yIChsZXQga2V5IG9mIFsi
LTEiLCAiMCIsICIxIiwgIjIiLCAiMyIsICIxMDAwIl0pIHsKKyAgICBzaG91bGRUaHJvdygKKyAg
ICAgICgpID0+IHsgYmFzZVtrZXldID0gcmFuZFZhbDsgfSwKKyAgICAgICJUeXBlRXJyb3I6IFVu
ZGVybHlpbmcgQXJyYXlCdWZmZXIgaGFzIGJlZW4gZGV0YWNoZWQgZnJvbSB0aGUgdmlldyIsCisg
ICAgKTsKKyAgfQorfQorCit7CisgIGxldCByZWFkT25seUtleXMgPSBbIi0xIiwgIjAiLCAiZm9v
IiwgImJhciJdOworICBsZXQgcHJveHkgPSBuZXcgUHJveHkoe30sIHtzZXQ6IChfdCwga2V5KSA9
PiAhcmVhZE9ubHlLZXlzLmluY2x1ZGVzKGtleSl9KTsKKyAgbGV0IGJhc2UgPSBPYmplY3QuY3Jl
YXRlKHByb3h5KTsKKworICBmb3IgKGxldCBrZXkgb2YgcmVhZE9ubHlLZXlzKSB7CisgICAgc2hv
dWxkVGhyb3coCisgICAgICAoKSA9PiB7ICJ1c2Ugc3RyaWN0IjsgYmFzZVtrZXldID0gcmFuZFZh
bDsgfSwKKyAgICAgIGBUeXBlRXJyb3I6IFByb3h5IG9iamVjdCdzICdzZXQnIHRyYXAgcmV0dXJu
ZWQgZmFsc3kgdmFsdWUgZm9yIHByb3BlcnR5ICcke2tleX0nYCwKKyAgICApOworCisgICAgc2hv
dWxkQmUoUmVmbGVjdC5zZXQoYmFzZSwga2V5LCByYW5kVmFsKSwgZmFsc2UpOworICAgIHNob3Vs
ZEJlKFJlZmxlY3Quc2V0KGJhc2UsIGtleSwgcmFuZFZhbCwge30pLCBmYWxzZSk7CisgIH0KK30K
KworeworICBsZXQgYmFzZSA9ICR2bS5jcmVhdGVQcm94eSh7fSk7CisgIE9iamVjdC5zZXRQcm90
b3R5cGVPZihiYXNlLCBiYXNlKTsKKworICBzaG91bGRUaHJvdygKKyAgICAoKSA9PiB7IGJhc2Uu
Zm9vID0gcmFuZFZhbDsgfSwKKyAgICAiUmFuZ2VFcnJvcjogTWF4aW11bSBjYWxsIHN0YWNrIHNp
emUgZXhjZWVkZWQuIiwKKyAgKTsKK30KKworZnVuY3Rpb24gYXNzZXJ0U2V0RmFpbHMoYmFzZSwg
cmVhZE9ubHlLZXlzLCB0ZXN0TmFtZSkgeworICBmb3IgKGxldCBrZXkgb2YgcmVhZE9ubHlLZXlz
KSB7CisgICAgbGV0IG1zZyA9IGBUZXN0OiAke3Rlc3ROYW1lfS4gS2V5OiAke1N0cmluZyhrZXkp
fS5gOworCisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxMDA7ICsraSkgeworICAgICAgc2hvdWxk
VGhyb3coCisgICAgICAgICgpID0+IHsgInVzZSBzdHJpY3QiOyBiYXNlW2tleV0gPSByYW5kVmFs
OyB9LAorICAgICAgICAiVHlwZUVycm9yOiBBdHRlbXB0ZWQgdG8gYXNzaWduIHRvIHJlYWRvbmx5
IHByb3BlcnR5LiIsCisgICAgICAgIG1zZywKKyAgICAgICk7CisKKyAgICAgIHNob3VsZEJlKFJl
ZmxlY3Quc2V0KE9iamVjdChiYXNlKSwga2V5LCByYW5kVmFsKSwgZmFsc2UsIG1zZyk7CisgICAg
ICBzaG91bGRCZShSZWZsZWN0LnNldChPYmplY3QoYmFzZSksIGtleSwgcmFuZFZhbCwge30pLCBm
YWxzZSwgbXNnKTsKKyAgICB9CisgIH0KK30KKworZnVuY3Rpb24gc2hvdWxkQmUoYWN0dWFsLCBl
eHBlY3RlZCwgbXNnID0gIiIpIHsKKyAgaWYgKGFjdHVhbCAhPT0gZXhwZWN0ZWQpCisgICAgdGhy
b3cgbmV3IEVycm9yKGBCYWQgdmFsdWU6ICR7YWN0dWFsfS4gJHttc2d9YCk7Cit9CisKK2Z1bmN0
aW9uIHNob3VsZFRocm93KGZ1bmMsIGVycm9yTWVzc2FnZSwgbXNnID0gIiIpIHsKKyAgbGV0IGVy
cm9yVGhyb3duID0gZmFsc2U7CisgIHRyeSB7CisgICAgZnVuYygpOworICB9IGNhdGNoIChlcnJv
cikgeworICAgIGVycm9yVGhyb3duID0gdHJ1ZTsKKyAgICBpZiAoU3RyaW5nKGVycm9yKSAhPT0g
ZXJyb3JNZXNzYWdlKQorICAgICAgdGhyb3cgbmV3IEVycm9yKGBCYWQgZXJyb3I6ICR7ZXJyb3J9
LiAke21zZ31gKTsKKyAgfQorICBpZiAoIWVycm9yVGhyb3duKQorICAgIHRocm93IG5ldyBFcnJv
cihgRGlkbid0IHRocm93ISAke21zZ31gKTsKK30KKworZnVuY3Rpb24gbWFrZVNldHRlcnNPYmpl
Y3Qoa2V5cykgeworICBsZXQgb2JqID0gT2JqZWN0LmNyZWF0ZShudWxsKTsKKworICBmb3IgKGxl
dCBrZXkgb2Yga2V5cykgeworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgewor
ICAgICAgZ2V0KCkgeyB0aHJvdyBuZXcgRXJyb3IoYCcke2tleX0nIGdldHRlciBzaG91bGQgYmUg
dW5yZWFjaGFibGUhYCk7IH0sCisgICAgICBzZXQoX3ZhbHVlKSB7IHRocm93IG5ldyBFcnJvcihg
JyR7a2V5fScgc2V0dGVyIHNob3VsZCBiZSB1bnJlYWNoYWJsZSFgKTsgfSwKKyAgICAgIGVudW1l
cmFibGU6IHRydWUsCisgICAgICBjb25maWd1cmFibGU6IHRydWUsCisgICAgfSk7CisgIH0KKwor
ICByZXR1cm4gb2JqOworfQorCit9KSgpLmNhdGNoKGVyciA9PiB7CisgIHByaW50KGAhISEgQVNZ
TkMgRVJST1I6ICR7ZXJyfSAoJHtlcnIubGluZX06JHtlcnIuY29sdW1ufSlgKTsKK30pOworCitk
cmFpbk1pY3JvdGFza3MoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24g
MjY4Njc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5
KQpAQCAtMSwzICsxLDgzIEBACisyMDIwLTEwLTE5ICBBbGV4ZXkgU2h2YXlrYSAgPHNodmFpa2Fs
ZXNoQGdtYWlsLmNvbT4KKworICAgICAgICBJbnRyb2R1Y2UgT3ZlcnJpZGVzUHV0W0J5SW5kZXhd
IHR5cGUgaW5mbyBmbGFncworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjE3OTE2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgQmVmb3JlIHRoaXMgcGF0Y2gsIHB1dHMgdG8gcmVhZC1vbmx5IG5vbi1tYXRlcmlh
bGl6ZWQgcHJvcGVydGllcyBpbiBwcm90b3R5cGUgY2hhaW4gd2VyZQorICAgICAgICBpbmNvcnJl
Y3RseSByZXBvcnRlZCBhcyBzdWNjZXNzIGluc3RlYWQgb2YgdGhyb3dpbmcgVHlwZUVycm9yIChp
biBzdHJpY3QgbW9kZSkuCisKKyAgICAgICAgVGhpcyBjaGFuZ2UgaW50cm9kdWNlcyBPdmVycmlk
ZXNQdXQgLyBPdmVycmlkZXNQdXRCeUluZGV4IG91dCBvZiBsaW5lIHR5cGUgaW5mbyBmbGFncywK
KyAgICAgICAgYW5kIHV0aWxpemVzIHRoZW0gaW4gcHV0SW5saW5lU2xvdygpIC8gcHV0VG9Qcmlt
aXRpdmUoKSB0byBpbnZva2Ugb3ZlcnJpZGVuIG1ldGhvZHMuCisgICAgICAgIE1vc3RseSwgdGhl
c2UgY2FsbHMgZW5kIHVwIGluIG9yZGluYXJ5U2V0U2xvdygpLCB3aGljaCBjYW4gYmUgb3B0aW1p
emVkIGluIGEgZm9sbG93LXVwLgorCisgICAgICAgIGRvUHV0UHJvcGVydHlTZWN1cml0eUNoZWNr
KCkgY2FuIGJlIHNhZmVseSByZW1vdmVkIGJlY2F1c2UgSlN7RE9NV2luZG93LExvY2F0aW9ufTo6
cHV0KCkKKyAgICAgICAgYWxzbyBwZXJmb3JtIHRoaXMgY2hlY2ssIGFuZCBhcmUgaW52b2tlZCBi
eSBhYm92ZS1tZW50aW9uZWQgbWV0aG9kcy4KKworICAgICAgICBUaGlzIHBhdGNoIGFsaWducyBK
U0Mgd2l0aCBWOCBhbmQgU3BpZGVyTW9ua2V5LCBhbmQgaXMgcGVyZm9ybWFuY2UtbmV1dHJhbCBv
biAvcHV0LworICAgICAgICBtaWNyb2JlbmNobWFya3MgYXMgaXQgYWZmZWN0cyBvbmx5IHNsb3cg
cGF0aHMuCisKKyAgICAgICAgKiBBUEkvSlNDYWxsYmFja09iamVjdC5oOgorICAgICAgICAqIGRl
YnVnZ2VyL0RlYnVnZ2VyU2NvcGUuaDoKKyAgICAgICAgKiBydW50aW1lL0NsYXNzSW5mby5oOgor
ICAgICAgICAqIHJ1bnRpbWUvQ2xvbmVkQXJndW1lbnRzLmg6CisgICAgICAgICogcnVudGltZS9F
cnJvckNvbnN0cnVjdG9yLmg6CisgICAgICAgICogcnVudGltZS9FcnJvckluc3RhbmNlLmg6Cisg
ICAgICAgICogcnVudGltZS9HZW5lcmljQXJndW1lbnRzLmg6CisgICAgICAgICogcnVudGltZS9H
ZXR0ZXJTZXR0ZXIuaDoKKyAgICAgICAgKiBydW50aW1lL0pTQXJyYXkuaDoKKyAgICAgICAgKiBy
dW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmNwcDoKKyAgICAgICAgKEpTQzo6SlNBcnJheUJ1ZmZl
clZpZXc6OnB1dCk6IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9KU0FycmF5QnVmZmVyVmll
dy5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNDSlNWYWx1ZS5jcHA6CisgICAgICAgIChKU0M6OkpT
VmFsdWU6OnB1dFRvUHJpbWl0aXZlKToKKyAgICAgICAgKiBydW50aW1lL0pTQ2VsbC5jcHA6Cisg
ICAgICAgIChKU0M6OkpTQ2VsbDo6ZG9QdXRQcm9wZXJ0eVNlY3VyaXR5Q2hlY2spOiBEZWxldGVk
LgorICAgICAgICAqIHJ1bnRpbWUvSlNDZWxsLmg6CisgICAgICAgICogcnVudGltZS9KU0Z1bmN0
aW9uLmg6CisgICAgICAgICogcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlldy5oOgorICAg
ICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQuaDoKKyAgICAgICAgKiBy
dW50aW1lL0pTR2xvYmFsT2JqZWN0Lmg6CisgICAgICAgICogcnVudGltZS9KU0xleGljYWxFbnZp
cm9ubWVudC5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNNb2R1bGVFbnZpcm9ubWVudC5oOgorICAg
ICAgICAqIHJ1bnRpbWUvSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QuaDoKKyAgICAgICAgKiBydW50
aW1lL0pTT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmdldE93blByb3BlcnR5
U2xvdCk6CisgICAgICAgIChKU0M6Om9yZGluYXJ5U2V0U2xvdyk6CisgICAgICAgIChKU0M6OkpT
T2JqZWN0OjpwdXRJbmxpbmVTbG93KToKKyAgICAgICAgV2UgY2FuJ3QgY2hlY2sgaWYgfHRoaXN8
IGl0c2VsZiBvdmVycmlkZXMgcHV0KCkgKHRoYXQgd291bGQgY2F1c2Ugc3RhY2sgb3ZlcmZsb3cp
LAorICAgICAgICBzbyBhZGQgYW4gaW52YXJpYW50IHRoYXQgfHRoaXN8IGlzIG5vdCBhIFByb3h5
T2JqZWN0LgorCisgICAgICAgIChKU0M6OkpTT2JqZWN0OjphdHRlbXB0VG9JbnRlcmNlcHRQdXRC
eUluZGV4T25Ib2xlRm9yUHJvdG90eXBlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1dEJ5
SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGgpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6YW55T2Jq
ZWN0SW5DaGFpbk1heUludGVyY2VwdEluZGV4ZWRBY2Nlc3NlcyBjb25zdCk6CisgICAgICAgIChK
U0M6OkpTT2JqZWN0Ojpkb1B1dFByb3BlcnR5U2VjdXJpdHlDaGVjayk6IERlbGV0ZWQuCisgICAg
ICAgICogcnVudGltZS9KU09iamVjdC5oOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cHV0QnlJ
bmRleElubGluZSk6CisgICAgICAgIEl0IGlzIGltcG9ydGFudCB0byBjYWxsIG92ZXJyaWRlbiBw
dXQoKSBtZXRob2QgaGVyZSBhcyB8dGhpc3wgY2FuIGJlIGEgUHJveHlPYmplY3QsCisgICAgICAg
IGJyZWFraW5nIHRoZSBpbnZhcmlhbnQgb2YgSlNPYmplY3Q6OnB1dElubGluZVNsb3coKSAoY292
ZXJlZCBieSB0ZXN0MjYyIHN1aXRlKS4gCisKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmdldE93
blByb3BlcnR5U2xvdCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpkb1B1dFByb3BlcnR5U2Vj
dXJpdHlDaGVjayk6IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9KU09iamVjdElubGluZXMu
aDoKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNhblBlcmZvcm1GYXN0UHV0SW5saW5lRXhjbHVk
aW5nUHJvdG8pOgorICAgICAgICAqIHJ1bnRpbWUvSlNQcm94eS5oOgorICAgICAgICAqIHJ1bnRp
bWUvSlNUeXBlSW5mby5oOgorICAgICAgICAoSlNDOjpUeXBlSW5mbzo6b3ZlcnJpZGVzUHV0IGNv
bnN0KToKKyAgICAgICAgKEpTQzo6VHlwZUluZm86Om92ZXJyaWRlc1B1dEJ5SW5kZXggY29uc3Qp
OgorICAgICAgICAoSlNDOjpUeXBlSW5mbzo6Z2V0T3duUHJvcGVydHlTbG90SXNJbXB1cmVGb3JQ
cm9wZXJ0eUFic2VuY2UgY29uc3QpOgorICAgICAgICAoSlNDOjpUeXBlSW5mbzo6aGFzUHV0UHJv
cGVydHlTZWN1cml0eUNoZWNrIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBydW50aW1lL1By
b3h5T2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6UHJveHlPYmplY3Q6OnB1dEJ5SW5kZXgpOgor
ICAgICAgICAoSlNDOjpQcm94eU9iamVjdDo6cHV0QnlJbmRleENvbW1vbik6IERlbGV0ZWQuCisg
ICAgICAgICogcnVudGltZS9Qcm94eU9iamVjdC5oOgorICAgICAgICAqIHJ1bnRpbWUvUmVnRXhw
T2JqZWN0Lmg6CisgICAgICAgICogcnVudGltZS9TdHJpbmdPYmplY3QuaDoKKyAgICAgICAgKiBy
dW50aW1lL1N0cnVjdHVyZS5jcHA6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6dmFsaWRhdGVG
bGFncyk6CisgICAgICAgICogdG9vbHMvSlNEb2xsYXJWTS5jcHA6CisKIDIwMjAtMTAtMTggIERh
dmlkIEtpbHplciAgPGRka2lsemVyQGFwcGxlLmNvbT4KIAogICAgICAgICBGaXggLVdkZXByZWNh
dGVkLWNvcHkgd2FybmluZ3MgaW4gV1RGIGFuZCBKYXZhU2NyaXB0Q29yZQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0LmgJKHJldmlzaW9uIDI2ODY3
NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMjUsNyArMTI1LDcgQEAgdGVtcGxhdGUgPGNsYXNzIFBhcmVudD4KIGNs
YXNzIEpTQ2FsbGJhY2tPYmplY3QgZmluYWwgOiBwdWJsaWMgUGFyZW50IHsKIHB1YmxpYzoKICAg
ICB1c2luZyBCYXNlID0gUGFyZW50OwotICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3Ry
dWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IFByb2hpYml0c1Byb3BlcnR5Q2Fj
aGluZyB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEludGVyY2VwdHNHZXRPd25Qcm9w
ZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8gfCBJbXBsZW1lbnRzSGFzSW5z
dGFuY2UgfCBPdmVycmlkZXNBbnlGb3JtT2ZHZXRQcm9wZXJ0eU5hbWVzIHwgT3ZlcnJpZGVzR2V0
Q2FsbERhdGE7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9
IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgUHJvaGliaXRzUHJvcGVydHlDYWNoaW5nIHwgT3ZlcnJp
ZGVzR2V0T3duUHJvcGVydHlTbG90IHwgSW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5k
ZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8IEltcGxlbWVudHNIYXNJbnN0YW5jZSB8IE92ZXJy
aWRlc0FueUZvcm1PZkdldFByb3BlcnR5TmFtZXMgfCBPdmVycmlkZXNQdXQgfCBPdmVycmlkZXNQ
dXRCeUluZGV4IHwgT3ZlcnJpZGVzR2V0Q2FsbERhdGE7CiAgICAgc3RhdGljX2Fzc2VydCghKFN0
cnVjdHVyZUZsYWdzICYgSW1wbGVtZW50c0RlZmF1bHRIYXNJbnN0YW5jZSksICJ1c2luZyBjdXN0
b21IYXNJbnN0YW5jZSIpOwogCiAgICAgfkpTQ2FsbGJhY2tPYmplY3QoKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlclNjb3BlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyU2NvcGUuaAkocmV2aXNpb24g
MjY4Njc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyU2NvcGUu
aAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNyBAQCBjbGFzcyBKU1Njb3BlOwogY2xhc3Mg
RGVidWdnZXJTY29wZSBmaW5hbCA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKIHB1YmxpYzoK
ICAgICB1c2luZyBCYXNlID0gSlNOb25GaW5hbE9iamVjdDsKLSAgICBzdGF0aWMgY29uc3RleHBy
IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBPdmVycmlk
ZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNBbnlGb3JtT2ZHZXRQcm9wZXJ0eU5hbWVz
OworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpT
dHJ1Y3R1cmVGbGFncyB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRlc0Fu
eUZvcm1PZkdldFByb3BlcnR5TmFtZXMgfCBPdmVycmlkZXNQdXQ7CiAKICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4KICAgICBzdGF0aWMgSXNvU3Vi
c3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0NsYXNzSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0NsYXNzSW5mby5oCShyZXZpc2lvbiAyNjg2NzQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9DbGFzc0luZm8uaAkod29ya2luZyBjb3B5KQpAQCAtNzEsOSArNzEsNiBA
QCBzdHJ1Y3QgTWV0aG9kVGFibGUgewogICAgIHVzaW5nIEdldE93blByb3BlcnR5U2xvdEJ5SW5k
ZXhGdW5jdGlvblB0ciA9IGJvb2wgKCopKEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCB1bnNp
Z25lZCwgUHJvcGVydHlTbG90Jik7CiAgICAgR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEZ1bmN0
aW9uUHRyIE1FVEhPRF9UQUJMRV9FTlRSWShnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KTsKIAot
ICAgIHVzaW5nIERvUHV0UHJvcGVydHlTZWN1cml0eUNoZWNrRnVuY3Rpb25QdHIgPSB2b2lkICgq
KShKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBQdXRQcm9wZXJ0eVNs
b3QmKTsKLSAgICBEb1B1dFByb3BlcnR5U2VjdXJpdHlDaGVja0Z1bmN0aW9uUHRyIE1FVEhPRF9U
QUJMRV9FTlRSWShkb1B1dFByb3BlcnR5U2VjdXJpdHlDaGVjayk7Ci0KICAgICB1c2luZyBUb1Ro
aXNGdW5jdGlvblB0ciA9IEpTVmFsdWUgKCopKEpTQ2VsbCosIEpTR2xvYmFsT2JqZWN0KiwgRUNN
QU1vZGUpOwogICAgIFRvVGhpc0Z1bmN0aW9uUHRyIE1FVEhPRF9UQUJMRV9FTlRSWSh0b1RoaXMp
OwogCkBAIC0xNjQsNyArMTYxLDYgQEAgc3RydWN0IE1ldGhvZFRhYmxlIHsKICAgICAgICAgJkNs
YXNzTmFtZTo6ZGVsZXRlUHJvcGVydHlCeUluZGV4LCBcCiAgICAgICAgICZDbGFzc05hbWU6Omdl
dE93blByb3BlcnR5U2xvdCwgXAogICAgICAgICAmQ2xhc3NOYW1lOjpnZXRPd25Qcm9wZXJ0eVNs
b3RCeUluZGV4LCBcCi0gICAgICAgICZDbGFzc05hbWU6OmRvUHV0UHJvcGVydHlTZWN1cml0eUNo
ZWNrLCBcCiAgICAgICAgICZDbGFzc05hbWU6OnRvVGhpcywgXAogICAgICAgICAmQ2xhc3NOYW1l
OjpkZWZhdWx0VmFsdWUsIFwKICAgICAgICAgJkNsYXNzTmFtZTo6Z2V0T3duUHJvcGVydHlOYW1l
cywgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xvbmVkQXJndW1lbnRz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xvbmVkQXJn
dW1lbnRzLmgJKHJldmlzaW9uIDI2ODY3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0Nsb25lZEFyZ3VtZW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw3IEBAIG5h
bWVzcGFjZSBKU0MgewogY2xhc3MgQ2xvbmVkQXJndW1lbnRzIGZpbmFsIDogcHVibGljIEpTTm9u
RmluYWxPYmplY3QgewogcHVibGljOgogICAgIHVzaW5nIEJhc2UgPSBKU05vbkZpbmFsT2JqZWN0
OwotICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpT
dHJ1Y3R1cmVGbGFncyB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRlc0Fu
eUZvcm1PZkdldFByb3BlcnR5TmFtZXM7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBT
dHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJv
cGVydHlTbG90IHwgT3ZlcnJpZGVzQW55Rm9ybU9mR2V0UHJvcGVydHlOYW1lcyB8IE92ZXJyaWRl
c1B1dDsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2VzcyBt
b2RlPgogICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JDb25zdHJ1Y3Rvci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9yQ29uc3RydWN0b3IuaAko
cmV2aXNpb24gMjY4Njc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JD
b25zdHJ1Y3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBAIGNsYXNzIEdldHRl
clNldHRlcjsKIGNsYXNzIEVycm9yQ29uc3RydWN0b3IgZmluYWwgOiBwdWJsaWMgSW50ZXJuYWxG
dW5jdGlvbiB7CiBwdWJsaWM6CiAgICAgdXNpbmcgQmFzZSA9IEludGVybmFsRnVuY3Rpb247Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVj
dHVyZUZsYWdzIHwgT3ZlcnJpZGVzUHV0OwogCiAgICAgc3RhdGljIEVycm9yQ29uc3RydWN0b3Iq
IGNyZWF0ZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBFcnJvclByb3RvdHlwZSogZXJy
b3JQcm90b3R5cGUsIEdldHRlclNldHRlciopCiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvRXJyb3JJbnN0YW5jZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0Vycm9ySW5zdGFuY2UuaAkocmV2aXNpb24gMjY4Njc0KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JJbnN0YW5jZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yOSw3ICsyOSw3IEBAIG5hbWVzcGFjZSBKU0MgewogY2xhc3MgRXJyb3JJbnN0YW5j
ZSA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKIHB1YmxpYzoKICAgICB1c2luZyBCYXNlID0g
SlNOb25GaW5hbE9iamVjdDsKLSAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVy
ZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNs
b3QgfCBPdmVycmlkZXNBbnlGb3JtT2ZHZXRQcm9wZXJ0eU5hbWVzOworICAgIHN0YXRpYyBjb25z
dGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IE92
ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRlc0FueUZvcm1PZkdldFByb3BlcnR5
TmFtZXMgfCBPdmVycmlkZXNQdXQ7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzRGVz
dHJ1Y3Rpb24gPSB0cnVlOwogCiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqIGNlbGwp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljQXJndW1lbnRzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3Vt
ZW50cy5oCShyZXZpc2lvbiAyNjg2NzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9HZW5lcmljQXJndW1lbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDcgKzM2LDcgQEAgdGVt
cGxhdGU8dHlwZW5hbWUgVHlwZT4KIGNsYXNzIEdlbmVyaWNBcmd1bWVudHMgOiBwdWJsaWMgSlNO
b25GaW5hbE9iamVjdCB7CiBwdWJsaWM6CiAgICAgdHlwZWRlZiBKU05vbkZpbmFsT2JqZWN0IEJh
c2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6
OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgSW50ZXJjZXB0
c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8IE92ZXJy
aWRlc0FueUZvcm1PZkdldFByb3BlcnR5TmFtZXM7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNp
Z25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJpZGVzR2V0
T3duUHJvcGVydHlTbG90IHwgSW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVu
V2hlbkxlbmd0aElzTm90WmVybyB8IE92ZXJyaWRlc0FueUZvcm1PZkdldFByb3BlcnR5TmFtZXMg
fCBPdmVycmlkZXNQdXQgfCBPdmVycmlkZXNQdXRCeUluZGV4OwogCiBwcm90ZWN0ZWQ6CiAgICAg
R2VuZXJpY0FyZ3VtZW50cyhWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2V0dGVyU2V0dGVyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2V0dGVyU2V0dGVyLmgJKHJldmlzaW9uIDI2
ODY3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dldHRlclNldHRlci5oCSh3
b3JraW5nIGNvcHkpCkBAIC01NCw3ICs1NCw3IEBAIHByaXZhdGU6CiAKIHB1YmxpYzoKIAotICAg
IHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1
cmVGbGFncyB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IFN0cnVjdHVyZUlzSW1tb3J0
YWw7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6
OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVz
UHV0IHwgT3ZlcnJpZGVzUHV0QnlJbmRleCB8IFN0cnVjdHVyZUlzSW1tb3J0YWw7CiAKICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+CiAgICAgc3RhdGljIElz
b1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0FycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNBcnJheS5oCShyZXZpc2lvbiAyNjg2NzQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0FycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDcgQEAg
Y2xhc3MgSlNBcnJheSA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IAogCiBwdWJsaWM6CiAgICAg
dHlwZWRlZiBKU05vbkZpbmFsT2JqZWN0IEJhc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB1bnNp
Z25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJpZGVzR2V0
T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzQW55Rm9ybU9mR2V0UHJvcGVydHlOYW1lczsKKyAg
ICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0
dXJlRmxhZ3MgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNBbnlGb3Jt
T2ZHZXRQcm9wZXJ0eU5hbWVzIHwgT3ZlcnJpZGVzUHV0OwogCiAgICAgc3RhdGljIHNpemVfdCBh
bGxvY2F0aW9uU2l6ZShDaGVja2VkPHNpemVfdD4gaW5saW5lQ2FwYWNpdHkpCiAgICAgewpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJW
aWV3LmNwcAkocmV2aXNpb24gMjY4Njc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNBcnJheUJ1ZmZlclZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjksMTggKzE2OSw2
IEBAIHZvaWQgSlNBcnJheUJ1ZmZlclZpZXc6OnZpc2l0Q2hpbGRyZW4oSlMKICAgICB9CiB9CiAK
LWJvb2wgSlNBcnJheUJ1ZmZlclZpZXc6OnB1dCgKLSAgICBKU0NlbGwqIGNlbGwsIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUg
dmFsdWUsCi0gICAgUHV0UHJvcGVydHlTbG90JiBzbG90KQotewotICAgIEpTQXJyYXlCdWZmZXJW
aWV3KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQXJyYXlCdWZmZXJWaWV3Kj4oY2VsbCk7Ci0KLSAg
ICBpZiAoVU5MSUtFTFkoaXNUaGlzVmFsdWVBbHRlcmVkKHNsb3QsIHRoaXNPYmplY3QpKSkKLSAg
ICAgICAgcmV0dXJuIG9yZGluYXJ5U2V0U2xvdyhnbG9iYWxPYmplY3QsIHRoaXNPYmplY3QsIHBy
b3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QudGhpc1ZhbHVlKCksIHNsb3QuaXNTdHJpY3RNb2RlKCkp
OwotICAgIAotICAgIHJldHVybiBCYXNlOjpwdXQodGhpc09iamVjdCwgZ2xvYmFsT2JqZWN0LCBw
cm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KTsKLX0KLQogQXJyYXlCdWZmZXIqIEpTQXJyYXlCdWZm
ZXJWaWV3Ojp1bnNoYXJlZEJ1ZmZlcigpCiB7CiAgICAgQXJyYXlCdWZmZXIqIHJlc3VsdCA9IHBv
c3NpYmx5U2hhcmVkQnVmZmVyKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0FycmF5QnVmZmVyVmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmgJKHJldmlzaW9uIDI2ODY3NCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTE2OSw4ICsxNjksNiBAQCBwcm90ZWN0ZWQ6CiAgICAgCiAgICAgSlNfRVhQT1JUX1BS
SVZBVEUgSlNBcnJheUJ1ZmZlclZpZXcoVk0mLCBDb25zdHJ1Y3Rpb25Db250ZXh0Jik7CiAgICAg
SlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOwotICAgIAotICAgIHN0
YXRpYyBib29sIHB1dChKU0NlbGwqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwgSlNW
YWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7CiAKICAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVu
KEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0NKU1ZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0NKU1ZhbHVlLmNwcAkocmV2aXNpb24gMjY4Njc0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE4MiwxMiArMTgyLDggQEAgYm9vbCBKU1ZhbHVlOjpwdXRUb1ByaW1pdGl2ZShKU0dsb2JhbE9i
agogICAgIGlmIChwcm9wZXJ0eU5hbWUgIT0gdm0ucHJvcGVydHlOYW1lcy0+dW5kZXJzY29yZVBy
b3RvKSB7CiAgICAgICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSA9IG9iai0+c3RydWN0dXJlKHZtKTsKLSAgICAgICAgICAgIGlmIChzdHJ1Y3R1cmUt
Pmhhc1JlYWRPbmx5T3JHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzRXhjbHVkaW5nUHJvdG8oKSB8fCBz
dHJ1Y3R1cmUtPnR5cGVJbmZvKCkuaGFzUHV0UHJvcGVydHlTZWN1cml0eUNoZWNrKCkpCisgICAg
ICAgICAgICBpZiAoc3RydWN0dXJlLT5oYXNSZWFkT25seU9yR2V0dGVyU2V0dGVyUHJvcGVydGll
c0V4Y2x1ZGluZ1Byb3RvKCkgfHwgc3RydWN0dXJlLT50eXBlSW5mbygpLm92ZXJyaWRlc1B1dCgp
KQogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgaWYgKG9iai0+dHlwZSgpID09
IFByb3h5T2JqZWN0VHlwZSkgewotICAgICAgICAgICAgICAgIGF1dG8qIHByb3h5ID0ganNDYXN0
PFByb3h5T2JqZWN0Kj4ob2JqKTsKLSAgICAgICAgICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4o
c2NvcGUsIHByb3h5LT5Qcm94eU9iamVjdDo6cHV0KHByb3h5LCBnbG9iYWxPYmplY3QsIHByb3Bl
cnR5TmFtZSwgdmFsdWUsIHNsb3QpKTsKLSAgICAgICAgICAgIH0KICAgICAgICAgICAgIHByb3Rv
dHlwZSA9IG9iai0+Z2V0UHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QpOwogICAgICAgICAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZmFsc2UpOwogCkBAIC0xOTksMTAgKzE5NSw4IEBA
IGJvb2wgSlNWYWx1ZTo6cHV0VG9QcmltaXRpdmUoSlNHbG9iYWxPYmoKIAogICAgIGZvciAoOyA7
IG9iaiA9IGFzT2JqZWN0KHByb3RvdHlwZSkpIHsKICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUgPSBvYmotPnN0cnVjdHVyZSh2bSk7Ci0gICAgICAgIGlmIChVTkxJS0VMWShzdHJ1Y3R1cmUt
PnR5cGVJbmZvKCkuaGFzUHV0UHJvcGVydHlTZWN1cml0eUNoZWNrKCkpKSB7Ci0gICAgICAgICAg
ICBvYmotPm1ldGhvZFRhYmxlKHZtKS0+ZG9QdXRQcm9wZXJ0eVNlY3VyaXR5Q2hlY2sob2JqLCBn
bG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgc2xvdCk7Ci0gICAgICAgICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCBmYWxzZSk7Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKHN0cnVjdHVy
ZS0+dHlwZUluZm8oKS5vdmVycmlkZXNQdXQoKSkKKyAgICAgICAgICAgIFJFTEVBU0VfQU5EX1JF
VFVSTihzY29wZSwgb2JqLT5tZXRob2RUYWJsZSh2bSktPnB1dChvYmosIGdsb2JhbE9iamVjdCwg
cHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCkpOwogICAgICAgICB1bnNpZ25lZCBhdHRyaWJ1dGVz
OwogICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldCh2bSwgcHJv
cGVydHlOYW1lLCBhdHRyaWJ1dGVzKTsKICAgICAgICAgaWYgKG9mZnNldCAhPSBpbnZhbGlkT2Zm
c2V0KSB7CkBAIC0yMjAsMTAgKzIxNCw2IEBAIGJvb2wgSlNWYWx1ZTo6cHV0VG9QcmltaXRpdmUo
SlNHbG9iYWxPYmoKICAgICAgICAgICAgIC8vIHByb3RvdHlwZXMgaXQgc2hvdWxkIGJlIHJlcGxh
Y2VkLCBzbyBicmVhayBoZXJlLgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAg
ICAgaWYgKG9iai0+dHlwZSgpID09IFByb3h5T2JqZWN0VHlwZSkgewotICAgICAgICAgICAgYXV0
byogcHJveHkgPSBqc0Nhc3Q8UHJveHlPYmplY3QqPihvYmopOwotICAgICAgICAgICAgUkVMRUFT
RV9BTkRfUkVUVVJOKHNjb3BlLCBwcm94eS0+UHJveHlPYmplY3Q6OnB1dChwcm94eSwgZ2xvYmFs
T2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KSk7Ci0gICAgICAgIH0KICAgICAgICAg
cHJvdG90eXBlID0gb2JqLT5nZXRQcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCk7CiAgICAgICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGZhbHNlKTsKICAgICAgICAgaWYgKHByb3RvdHlw
ZS5pc051bGwoKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmNw
cAkocmV2aXNpb24gMjY4Njc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlND
ZWxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjEyLDExICsyMTIsNiBAQCBib29sIEpTQ2VsbDo6
Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lk
IEpTQ2VsbDo6ZG9QdXRQcm9wZXJ0eVNlY3VyaXR5Q2hlY2soSlNPYmplY3QqLCBKU0dsb2JhbE9i
amVjdCosIFByb3BlcnR5TmFtZSwgUHV0UHJvcGVydHlTbG90JikKLXsKLSAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotfQotCiB2b2lkIEpTQ2VsbDo6Z2V0T3duUHJvcGVydHlOYW1l
cyhKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJh
dGlvbk1vZGUpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCShyZXZpc2lvbiAyNjg2NzQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAkod29ya2luZyBjb3B5KQpAQCAt
MjYzLDcgKzI2Myw2IEBAIHByb3RlY3RlZDoKICAgICBzdGF0aWMgYm9vbCBkZWZpbmVPd25Qcm9w
ZXJ0eShKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBjb25zdCBQcm9w
ZXJ0eURlc2NyaXB0b3ImLCBib29sIHNob3VsZFRocm93KTsKICAgICBzdGF0aWMgYm9vbCBnZXRP
d25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwg
UHJvcGVydHlTbG90Jik7CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90QnlJbmRl
eChKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBQcm9w
ZXJ0eVNsb3QmKTsKLSAgICBzdGF0aWMgTk9fUkVUVVJOX0RVRV9UT19DUkFTSCB2b2lkIGRvUHV0
UHJvcGVydHlTZWN1cml0eUNoZWNrKEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0
eU5hbWUsIFB1dFByb3BlcnR5U2xvdCYpOwogCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBM
TEludE9mZnNldHNFeHRyYWN0b3I7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0Z1bmN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNGdW5jdGlvbi5oCShyZXZpc2lvbiAyNjg2NzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0Z1bmN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTcwLDcgKzcwLDcgQEAg
cHVibGljOgogICAgIH0KICAgICAKICAgICB0eXBlZGVmIEpTQ2FsbGVlIEJhc2U7Ci0gICAgc3Rh
dGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZs
YWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzQW55Rm9ybU9mR2V0
UHJvcGVydHlOYW1lcyB8IE92ZXJyaWRlc0dldENhbGxEYXRhOworICAgIHN0YXRpYyBjb25zdGV4
cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IE92ZXJy
aWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRlc0FueUZvcm1PZkdldFByb3BlcnR5TmFt
ZXMgfCBPdmVycmlkZXNQdXQgfCBPdmVycmlkZXNHZXRDYWxsRGF0YTsKIAogICAgIHN0YXRpYyBz
aXplX3QgYWxsb2NhdGlvblNpemUoQ2hlY2tlZDxzaXplX3Q+IGlubGluZUNhcGFjaXR5KQogICAg
IHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJy
YXlWaWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNH
ZW5lcmljVHlwZWRBcnJheVZpZXcuaAkocmV2aXNpb24gMjY4Njc0KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXcuaAkod29ya2luZyBjb3B5
KQpAQCAtOTYsNyArOTYsNyBAQCBwdWJsaWM6CiAgICAgdXNpbmcgQmFzZSA9IEpTQXJyYXlCdWZm
ZXJWaWV3OwogICAgIHR5cGVkZWYgdHlwZW5hbWUgQWRhcHRvcjo6VHlwZSBFbGVtZW50VHlwZTsK
IAotICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpT
dHJ1Y3R1cmVGbGFncyB8IE92ZXJyaWRlc0FueUZvcm1PZkdldFByb3BlcnR5TmFtZXMgfCBPdmVy
cmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJ
bmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvOworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWdu
ZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IE92ZXJyaWRlc0FueUZv
cm1PZkdldFByb3BlcnR5TmFtZXMgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVy
cmlkZXNQdXQgfCBPdmVycmlkZXNQdXRCeUluZGV4IHwgSW50ZXJjZXB0c0dldE93blByb3BlcnR5
U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybzsKIAogICAgIHN0YXRpYyBjb25zdGV4
cHIgdW5zaWduZWQgZWxlbWVudFNpemUgPSBzaXplb2YodHlwZW5hbWUgQWRhcHRvcjo6VHlwZSk7
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsTGV4aWNhbEVu
dmlyb25tZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNHbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQuaAkocmV2aXNpb24gMjY4Njc0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQuaAkod29y
a2luZyBjb3B5KQpAQCAtMzMsNyArMzMsNyBAQCBjbGFzcyBKU0dsb2JhbExleGljYWxFbnZpcm9u
bWVudCBmaW5hbCA6CiBwdWJsaWM6CiAgICAgdXNpbmcgQmFzZSA9IEpTU2VnbWVudGVkVmFyaWFi
bGVPYmplY3Q7CiAKLSAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdz
ID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3Q7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVj
dHVyZUZsYWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzUHV0Owog
CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+CiAg
ICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgJKHJldmlzaW9uIDI2
ODY3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTU2MSw3ICs1NjEsNyBAQCBwdWJsaWM6CiAgICAgdXNpbmcgQmFz
ZSA9IEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3Q7CiAgICAgLy8gRG8gd2UgcmVhbHkgbmVlZCBP
dmVycmlkZXNBbnlGb3JtT2ZHZXRQcm9wZXJ0eU5hbWVzIGhlcmU/CiAgICAgLy8gRklYTUU6IGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTI5NTQKLSAgICBzdGF0aWMg
Y29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3Mg
fCBIYXNTdGF0aWNQcm9wZXJ0eVRhYmxlIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwg
T3ZlcnJpZGVzQW55Rm9ybU9mR2V0UHJvcGVydHlOYW1lcyB8IElzSW1tdXRhYmxlUHJvdG90eXBl
RXhvdGljT2JqZWN0OworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxh
Z3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEhhc1N0YXRpY1Byb3BlcnR5VGFibGUgfCBPdmVy
cmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNBbnlGb3JtT2ZHZXRQcm9wZXJ0eU5h
bWVzIHwgT3ZlcnJpZGVzUHV0IHwgSXNJbW11dGFibGVQcm90b3R5cGVFeG90aWNPYmplY3Q7CiAK
ICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7CiAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xleGljYWxFbnZpcm9ubWVudC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTGV4aWNhbEVudmlyb25t
ZW50LmgJKHJldmlzaW9uIDI2ODY3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTTGV4aWNhbEVudmlyb25tZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDcgKzQ4LDcgQEAg
cHVibGljOgogICAgIH0KIAogICAgIHVzaW5nIEJhc2UgPSBKU1N5bWJvbFRhYmxlT2JqZWN0Owot
ICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1
Y3R1cmVGbGFncyB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRlc0FueUZv
cm1PZkdldFByb3BlcnR5TmFtZXM7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1
Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVy
dHlTbG90IHwgT3ZlcnJpZGVzQW55Rm9ybU9mR2V0UHJvcGVydHlOYW1lcyB8IE92ZXJyaWRlc1B1
dDsKIAogICAgIFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qIHZhcmlhYmxlcygpCiAgICAgewpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVFbnZpcm9ubWVudC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlRW52
aXJvbm1lbnQuaAkocmV2aXNpb24gMjY4Njc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNNb2R1bGVFbnZpcm9ubWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw3
IEBAIGNsYXNzIEpTTW9kdWxlRW52aXJvbm1lbnQgZmluYWwgOiBwdWJsaWMKICAgICBmcmllbmQg
Y2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogcHVibGljOgogICAgIHVzaW5nIEJhc2UgPSBK
U0xleGljYWxFbnZpcm9ubWVudDsKLSAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVj
dHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0
eVNsb3QgfCBPdmVycmlkZXNBbnlGb3JtT2ZHZXRQcm9wZXJ0eU5hbWVzOworICAgIHN0YXRpYyBj
b25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8
IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRlc0FueUZvcm1PZkdldFByb3Bl
cnR5TmFtZXMgfCBPdmVycmlkZXNQdXQ7CiAKICAgICBzdGF0aWMgSlNNb2R1bGVFbnZpcm9ubWVu
dCogY3JlYXRlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNTY29wZSog
Y3VycmVudFNjb3BlLCBTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUsIEpTVmFsdWUgaW5pdGlhbFZh
bHVlLCBBYnN0cmFjdE1vZHVsZVJlY29yZCogbW9kdWxlUmVjb3JkKQogICAgIHsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlTmFtZXNwYWNlT2JqZWN0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVOYW1lc3Bh
Y2VPYmplY3QuaAkocmV2aXNpb24gMjY4Njc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsNyAr
MzMsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIGNsYXNzIEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0IGZp
bmFsIDogcHVibGljIEpTTm9uRmluYWxPYmplY3QgewogcHVibGljOgogICAgIHVzaW5nIEJhc2Ug
PSBKU05vbkZpbmFsT2JqZWN0OwotICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0
dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5
U2xvdCB8IEludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJ
c05vdFplcm8gfCBPdmVycmlkZXNBbnlGb3JtT2ZHZXRQcm9wZXJ0eU5hbWVzIHwgR2V0T3duUHJv
cGVydHlTbG90SXNJbXB1cmVGb3JQcm9wZXJ0eUFic2VuY2UgfCBJc0ltbXV0YWJsZVByb3RvdHlw
ZUV4b3RpY09iamVjdDsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZs
YWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3Qg
fCBJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3Ra
ZXJvIHwgT3ZlcnJpZGVzQW55Rm9ybU9mR2V0UHJvcGVydHlOYW1lcyB8IE92ZXJyaWRlc1B1dCB8
IE92ZXJyaWRlc1B1dEJ5SW5kZXggfCBHZXRPd25Qcm9wZXJ0eVNsb3RJc0ltcHVyZUZvclByb3Bl
cnR5QWJzZW5jZSB8IElzSW1tdXRhYmxlUHJvdG90eXBlRXhvdGljT2JqZWN0OwogCiAgICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOwogICAgIHN0YXRpYyB2
b2lkIGRlc3Ryb3koSlNDZWxsKik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU09iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNPYmplY3QuY3BwCShyZXZpc2lvbiAyNjg2NzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU09iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY5OCwzMCArNjk4LDMw
IEBAIGJvb2wgSlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdChKU09iamUKIHsKICAgICByZXR1
cm4gZ2V0T3duUHJvcGVydHlTbG90SW1wbChvYmplY3QsIGdsb2JhbE9iamVjdCwgcHJvcGVydHlO
YW1lLCBzbG90KTsKIH0KLQotdm9pZCBKU09iamVjdDo6ZG9QdXRQcm9wZXJ0eVNlY3VyaXR5Q2hl
Y2soSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwgUHV0UHJvcGVydHlT
bG90JikKLXsKLX0KICNlbmRpZiAvLyBBU1NFUlRfRU5BQkxFRAogCiAvLyBodHRwczovL3RjMzku
Z2l0aHViLmlvL2VjbWEyNjIvI3NlYy1vcmRpbmFyeXNldAorY29uc3RleHByIHVuc2lnbmVkIG1h
eGltdW1Qcm90b3R5cGVDaGFpbkRlcHRoID0gNDAwMDA7CiBib29sIG9yZGluYXJ5U2V0U2xvdyhK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU09iamVjdCogb2JqZWN0LCBQcm9wZXJ0eU5h
bWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBKU1ZhbHVlIHJlY2VpdmVyLCBib29sIHNo
b3VsZFRocm93KQogewogICAgIC8vIElmIHdlIGZpbmQgdGhlIHJlY2VpdmVyIGlzIG5vdCB0aGUg
c2FtZSB0byB0aGUgb2JqZWN0LCB3ZSBmYWxsIHRvIHRoaXMgc2xvdyBwYXRoLgotICAgIC8vIEN1
cnJlbnRseSwgdGhlcmUgYXJlIDMgY2FuZGlkYXRlcy4KKyAgICAvLyBDdXJyZW50bHksIHRoZXJl
IGFyZSA0IGNhbmRpZGF0ZXMuCiAgICAgLy8gMS4gUmVmbGVjdC5zZXQgY2FuIGFsdGVyIHRoZSBy
ZWNlaXZlciB3aXRoIGFuIGFyYml0cmFyeSB2YWx1ZS4KICAgICAvLyAyLiBXaW5kb3cgUHJveHku
CiAgICAgLy8gMy4gRVM2IFByb3h5LgorICAgIC8vIDQuIEFuIG9iamVjdCB0aGF0IG92ZXJyaWRl
cyBwdXQoKSBpbiBwcm90b3R5cGUgY2hhaW4uCiAKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3Qt
PnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIEpT
T2JqZWN0KiBjdXJyZW50ID0gb2JqZWN0OwogICAgIFByb3BlcnR5RGVzY3JpcHRvciBvd25EZXNj
cmlwdG9yOworICAgIHVuc2lnbmVkIHByb3RvdHlwZUNvdW50ID0gMDsKICAgICB3aGlsZSAodHJ1
ZSkgewotICAgICAgICBpZiAoY3VycmVudC0+dHlwZSgpID09IFByb3h5T2JqZWN0VHlwZSkgewot
ICAgICAgICAgICAgYXV0byogcHJveHkgPSBqc0Nhc3Q8UHJveHlPYmplY3QqPihjdXJyZW50KTsK
KyAgICAgICAgLy8gRklYTUU6IFRoaXMgaXMgc3Vib3B0aW1hbC4gQ2hlY2tpbmcgZm9yIG92ZXJy
aWRlc1B1dCgpIGhlcmUgd2lsbCBjYXVzZSBzdGFjayBvdmVyZmxvdy4KKyAgICAgICAgLy8gSW5z
dGVhZCwgd2Ugc2hvdWxkIGNvbnNpZGVyIHV0aWxpemluZyBzbG90LnRoaXNWYWx1ZSgpIGluIHB1
dCgpIG92ZXJyaWRlcyBhbmQgcmVtb3ZlIG9yZGluYXJ5U2V0U2xvdygpIC8gaXNUaGlzVmFsdWVB
bHRlcmVkKCkuCisgICAgICAgIGlmIChjdXJyZW50LT50eXBlKCkgPT0gUHJveHlPYmplY3RUeXBl
IHx8IGN1cnJlbnQtPnR5cGUoKSA9PSBNb2R1bGVOYW1lc3BhY2VPYmplY3RUeXBlKSB7CiAgICAg
ICAgICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChyZWNlaXZlciwgc2hvdWxkVGhyb3cpOwotICAg
ICAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBwcm94eS0+UHJveHlPYmplY3Q6OnB1
dChwcm94eSwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KSk7CisgICAg
ICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIGN1cnJlbnQtPm1ldGhvZFRhYmxlKHZt
KS0+cHV0KGN1cnJlbnQsIGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCkp
OwogICAgICAgICB9CiAKICAgICAgICAgLy8gOS4xLjkuMS0yIExldCBvd25EZXNjIGJlID8gTy5b
W0dldE93blByb3BlcnR5XV0oUCkuCkBAIC03MzMsNiArNzMzLDExIEBAIGJvb2wgb3JkaW5hcnlT
ZXRTbG93KEpTR2xvYmFsT2JqZWN0KiBnbG8KICAgICAgICAgICAgIEpTVmFsdWUgcHJvdG90eXBl
ID0gY3VycmVudC0+Z2V0UHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QpOwogICAgICAgICAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZmFsc2UpOwogCisgICAgICAgICAgICBpZiAoVU5M
SUtFTFkoKytwcm90b3R5cGVDb3VudCA+IG1heGltdW1Qcm90b3R5cGVDaGFpbkRlcHRoKSkgewor
ICAgICAgICAgICAgICAgIHRocm93U3RhY2tPdmVyZmxvd0Vycm9yKGdsb2JhbE9iamVjdCwgc2Nv
cGUpOworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKwogICAg
ICAgICAgICAgLy8gOS4xLjkuMS0zLWIgSWYgcGFyZW50IGlzIG5vdCBudWxsLCB0aGVuCiAgICAg
ICAgICAgICBpZiAoIXByb3RvdHlwZS5pc051bGwoKSkgewogICAgICAgICAgICAgICAgIC8vIDku
MS45LjEtMy1iLWkgUmV0dXJuID8gcGFyZW50LltbU2V0XV0oUCwgViwgUmVjZWl2ZXIpLgpAQCAt
ODE5LDE5ICs4MjQsMjAgQEAgYm9vbCBKU09iamVjdDo6cHV0KEpTQ2VsbCogY2VsbCwgSlNHbG9i
YQogYm9vbCBKU09iamVjdDo6cHV0SW5saW5lU2xvdyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBQdXRQcm9wZXJ0
eVNsb3QmIHNsb3QpCiB7CiAgICAgQVNTRVJUKCFpc1RoaXNWYWx1ZUFsdGVyZWQoc2xvdCwgdGhp
cykpOworICAgIEFTU0VSVCh0eXBlKCkgIT0gUHJveHlPYmplY3RUeXBlKTsKIAogICAgIFZNJiB2
bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CiAKKyAgICBpZiAoVU5MSUtFTFkoIXZtLmlzU2FmZVRvUmVjdXJzZVNvZnQoKSkp
IHsKKyAgICAgICAgdGhyb3dTdGFja092ZXJmbG93RXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSk7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKICAgICBKU09iamVjdCogb2JqID0gdGhp
czsKICAgICBmb3IgKDs7KSB7Ci0gICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gb2JqLT5z
dHJ1Y3R1cmUodm0pOwotICAgICAgICBpZiAoVU5MSUtFTFkoc3RydWN0dXJlLT50eXBlSW5mbygp
Lmhhc1B1dFByb3BlcnR5U2VjdXJpdHlDaGVjaygpKSkgewotICAgICAgICAgICAgb2JqLT5tZXRo
b2RUYWJsZSh2bSktPmRvUHV0UHJvcGVydHlTZWN1cml0eUNoZWNrKG9iaiwgZ2xvYmFsT2JqZWN0
LCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwotICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgZmFsc2UpOwotICAgICAgICB9CiAgICAgICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXM7Ci0g
ICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0KHZtLCBwcm9wZXJ0
eU5hbWUsIGF0dHJpYnV0ZXMpOworICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBvYmot
PnN0cnVjdHVyZSh2bSktPmdldCh2bSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzKTsKICAgICAg
ICAgaWYgKGlzVmFsaWRPZmZzZXQob2Zmc2V0KSkgewogICAgICAgICAgICAgaWYgKGF0dHJpYnV0
ZXMgJiBQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkpIHsKICAgICAgICAgICAgICAgICBBU1NF
UlQodGhpcy0+cHJvdG90eXBlQ2hhaW5NYXlJbnRlcmNlcHRTdG9yZVRvKHZtLCBwcm9wZXJ0eU5h
bWUpIHx8IG9iaiA9PSB0aGlzKTsKQEAgLTg3NCwxNSArODgwLDEzIEBAIGJvb2wgSlNPYmplY3Q6
OnB1dElubGluZVNsb3coSlNHbG9iYWxPYmoKICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9B
TkRfUkVUVVJOKHNjb3BlLCBwdXRFbnRyeShnbG9iYWxPYmplY3QsIGVudHJ5LT50YWJsZS0+Y2xh
c3NGb3JUaGlzLCBlbnRyeS0+dmFsdWUsIG9iaiwgdGhpcywgcHJvcGVydHlOYW1lLCB2YWx1ZSwg
c2xvdCkpOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIGlmIChvYmotPnR5cGUo
KSA9PSBQcm94eU9iamVjdFR5cGUpIHsKLSAgICAgICAgICAgIGF1dG8qIHByb3h5ID0ganNDYXN0
PFByb3h5T2JqZWN0Kj4ob2JqKTsKLSAgICAgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29w
ZSwgcHJveHktPlByb3h5T2JqZWN0OjpwdXQocHJveHksIGdsb2JhbE9iamVjdCwgcHJvcGVydHlO
YW1lLCB2YWx1ZSwgc2xvdCkpOwotICAgICAgICB9CiAgICAgICAgIEpTVmFsdWUgcHJvdG90eXBl
ID0gb2JqLT5nZXRQcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCk7CiAgICAgICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIGZhbHNlKTsKICAgICAgICAgaWYgKHByb3RvdHlwZS5pc051bGwo
KSkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBvYmogPSBhc09iamVjdChwcm90b3R5cGUp
OworICAgICAgICBpZiAob2JqLT5zdHJ1Y3R1cmUodm0pLT50eXBlSW5mbygpLm92ZXJyaWRlc1B1
dCgpKQorICAgICAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBvYmotPm1ldGhvZFRh
YmxlKHZtKS0+cHV0KG9iaiwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90
KSk7CiAgICAgfQogCiAgICAgaWYgKCFwdXREaXJlY3RJbnRlcm5hbDxQdXRNb2RlUHV0Pih2bSwg
cHJvcGVydHlOYW1lLCB2YWx1ZSwgMCwgc2xvdCkpCkBAIC0yODM2LDEwICsyODQwLDEzIEBAIGJv
b2wgSlNPYmplY3Q6OmF0dGVtcHRUb0ludGVyY2VwdFB1dEJ5SW4KICAgICAgICAgICAgIH0KICAg
ICAgICAgfQogCi0gICAgICAgIGlmIChjdXJyZW50LT50eXBlKCkgPT0gUHJveHlPYmplY3RUeXBl
KSB7CisgICAgICAgIGlmIChjdXJyZW50LT5zdHJ1Y3R1cmUodm0pLT50eXBlSW5mbygpLm92ZXJy
aWRlc1B1dEJ5SW5kZXgoKSkgeworICAgICAgICAgICAgSWRlbnRpZmllciBpZGVudCA9IElkZW50
aWZpZXI6OmZyb20odm0sIGkpOworICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgZmFsc2UpOwogICAgICAgICAgICAgc2NvcGUucmVsZWFzZSgpOwotICAgICAgICAgICAgYXV0
byogcHJveHkgPSBqc0Nhc3Q8UHJveHlPYmplY3QqPihjdXJyZW50KTsKLSAgICAgICAgICAgIHB1
dFJlc3VsdCA9IHByb3h5LT5wdXRCeUluZGV4Q29tbW9uKGdsb2JhbE9iamVjdCwgdGhpc1ZhbHVl
LCBpLCB2YWx1ZSwgc2hvdWxkVGhyb3cpOworICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgaXMg
c3Vib3B0aW1hbC4gV2UgY2FuJ3QgaW52b2tlIHB1dEJ5SW5kZXgoKSBoZXJlIGFzIGl0IGRvZXNu
J3QgYWNjZXB0IHxyZWNlaXZlcnwgcGFyYW1ldGVyLgorICAgICAgICAgICAgLy8gSW5zdGVhZCwg
d2Ugc2hvdWxkIGNvbnNpZGVyIG1ha2luZyBwdXRCeUluZGV4KCkgb3ZlcnJpZGVzIGF3YXJlIG9m
IHxyZWNlaXZlcnwgYW5kIHJlbW92ZSBvcmRpbmFyeVNldFNsb3coKSAvIGlzVGhpc1ZhbHVlQWx0
ZXJlZCgpLgorICAgICAgICAgICAgcHV0UmVzdWx0ID0gb3JkaW5hcnlTZXRTbG93KGdsb2JhbE9i
amVjdCwgY3VycmVudCwgaWRlbnQuaW1wbCgpLCB2YWx1ZSwgdGhpc1ZhbHVlLCBzaG91bGRUaHJv
dyk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgICAgICAKQEAgLTMw
MTMsNiArMzAyMCwxMSBAQCBib29sIEpTT2JqZWN0OjpwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVu
CiAgICAgCiAgICAgc3dpdGNoIChpbmRleGluZ1R5cGUoKSkgewogICAgIGNhc2UgQUxMX0JMQU5L
X0lOREVYSU5HX1RZUEVTOiB7CisgICAgICAgIGlmIChuZWVkc1Nsb3dQdXRJbmRleGluZyh2bSkp
IHsKKyAgICAgICAgICAgIC8vIENvbnZlcnQgdGhlIGluZGV4aW5nIHR5cGUgdG8gdGhlIFNsb3dQ
dXRBcnJheVN0b3JhZ2UgYW5kIHJldHJ5LgorICAgICAgICAgICAgY3JlYXRlQXJyYXlTdG9yYWdl
KHZtLCBpICsgMSwgZ2V0TmV3VmVjdG9yTGVuZ3RoKHZtLCAwLCAwLCAwLCBpICsgMSkpOworICAg
ICAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBwdXRCeUluZGV4KHRoaXMsIGdsb2Jh
bE9iamVjdCwgaSwgdmFsdWUsIHNob3VsZFRocm93KSk7CisgICAgICAgIH0KICAgICAgICAgaWYg
KGluZGV4aW5nU2hvdWxkQmVTcGFyc2Uodm0pKSB7CiAgICAgICAgICAgICBSRUxFQVNFX0FORF9S
RVRVUk4oc2NvcGUsIHB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdl
KAogICAgICAgICAgICAgICAgIGdsb2JhbE9iamVjdCwgaSwgdmFsdWUsIHNob3VsZFRocm93LApA
QCAtMzAyMSwxMSArMzAzMyw2IEBAIGJvb2wgSlNPYmplY3Q6OnB1dEJ5SW5kZXhCZXlvbmRWZWN0
b3JMZW4KICAgICAgICAgaWYgKGluZGV4SXNTdWZmaWNpZW50bHlCZXlvbmRMZW5ndGhGb3JTcGFy
c2VNYXAoaSwgMCkgfHwgaSA+PSBNSU5fU1BBUlNFX0FSUkFZX0lOREVYKSB7CiAgICAgICAgICAg
ICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIHB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhX
aXRoQXJyYXlTdG9yYWdlKGdsb2JhbE9iamVjdCwgaSwgdmFsdWUsIHNob3VsZFRocm93LCBjcmVh
dGVBcnJheVN0b3JhZ2Uodm0sIDAsIDApKSk7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKG5lZWRz
U2xvd1B1dEluZGV4aW5nKHZtKSkgewotICAgICAgICAgICAgLy8gQ29udmVydCB0aGUgaW5kZXhp
bmcgdHlwZSB0byB0aGUgU2xvd1B1dEFycmF5U3RvcmFnZSBhbmQgcmV0cnkuCi0gICAgICAgICAg
ICBjcmVhdGVBcnJheVN0b3JhZ2Uodm0sIGkgKyAxLCBnZXROZXdWZWN0b3JMZW5ndGgodm0sIDAs
IDAsIDAsIGkgKyAxKSk7Ci0gICAgICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIHB1
dEJ5SW5kZXgodGhpcywgZ2xvYmFsT2JqZWN0LCBpLCB2YWx1ZSwgc2hvdWxkVGhyb3cpKTsKLSAg
ICAgICAgfQogICAgICAgICAKICAgICAgICAgY3JlYXRlSW5pdGlhbEZvclZhbHVlQW5kU2V0KHZt
LCBpLCB2YWx1ZSk7CiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMzkwMCw3ICszOTA3LDggQEAg
SlNWYWx1ZSBKU09iamVjdDo6Z2V0TWV0aG9kKEpTR2xvYmFsT2JqZQogYm9vbCBKU09iamVjdDo6
YW55T2JqZWN0SW5DaGFpbk1heUludGVyY2VwdEluZGV4ZWRBY2Nlc3NlcyhWTSYgdm0pIGNvbnN0
CiB7CiAgICAgZm9yIChjb25zdCBKU09iamVjdCogY3VycmVudCA9IHRoaXM7IDspIHsKLSAgICAg
ICAgaWYgKGN1cnJlbnQtPnN0cnVjdHVyZSh2bSktPm1heUludGVyY2VwdEluZGV4ZWRBY2Nlc3Nl
cygpKQorICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGN1cnJlbnQtPnN0cnVjdHVyZSh2
bSk7CisgICAgICAgIGlmIChzdHJ1Y3R1cmUtPm1heUludGVyY2VwdEluZGV4ZWRBY2Nlc3Nlcygp
IHx8IHN0cnVjdHVyZS0+dHlwZUluZm8oKS5vdmVycmlkZXNQdXRCeUluZGV4KCkpCiAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgCiAgICAgICAgIEpTVmFsdWUgcHJvdG90eXBlID0g
Y3VycmVudC0+Z2V0UHJvdG90eXBlRGlyZWN0KHZtKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNPYmplY3QuaAkocmV2aXNpb24gMjY4Njc0KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMTczLDcgKzE3
Myw2IEBAIHB1YmxpYzoKIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBib29sIGdldE93
blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIHVuc2lnbmVk
IHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CiAgICAgYm9vbCBnZXRPd25Qcm9wZXJ0eVNs
b3RJbmxpbmUoSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwot
ICAgIEpTX0VYUE9SVF9QUklWQVRFX0lGX0FTU0VSVF9FTkFCTEVEIHN0YXRpYyB2b2lkIGRvUHV0
UHJvcGVydHlTZWN1cml0eUNoZWNrKEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0
eU5hbWUsIFB1dFByb3BlcnR5U2xvdCYpOwogCiAgICAgLy8gVGhlIGtleSBkaWZmZXJlbmNlIGJl
dHdlZW4gdGhpcyBhbmQgZ2V0T3duUHJvcGVydHlTbG90IGlzIHRoYXQgZ2V0T3duUHJvcGVydHlT
bG90CiAgICAgLy8gY3VycmVudGx5IHJldHVybnMgaW5jb3JyZWN0IHJlc3VsdHMgZm9yIHRoZSBE
T00gd2luZG93ICh3aXRoIG5vbi1vd24gcHJvcGVydGllcykKQEAgLTIxOCwxMiArMjE3LDEzIEBA
IHB1YmxpYzoKIAogICAgIEFMV0FZU19JTkxJTkUgYm9vbCBwdXRCeUluZGV4SW5saW5lKEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIHVpbnQ2NF90IHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2
YWx1ZSwgYm9vbCBzaG91bGRUaHJvdykKICAgICB7CisgICAgICAgIFZNJiB2bSA9IGdldFZNKGds
b2JhbE9iamVjdCk7CiAgICAgICAgIGlmIChMSUtFTFkocHJvcGVydHlOYW1lIDw9IE1BWF9BUlJB
WV9JTkRFWCkpCiAgICAgICAgICAgICByZXR1cm4gcHV0QnlJbmRleElubGluZShnbG9iYWxPYmpl
Y3QsIHN0YXRpY19jYXN0PHVpbnQzMl90Pihwcm9wZXJ0eU5hbWUpLCB2YWx1ZSwgc2hvdWxkVGhy
b3cpOwogCiAgICAgICAgIEFTU0VSVChwcm9wZXJ0eU5hbWUgPD0gbWF4U2FmZUludGVnZXIoKSk7
CiAgICAgICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KHRoaXMsIHNob3VsZFRocm93KTsKLSAgICAg
ICAgcmV0dXJuIHB1dElubGluZUZvckpTT2JqZWN0KHRoaXMsIGdsb2JhbE9iamVjdCwgSWRlbnRp
Zmllcjo6ZnJvbShnZXRWTShnbG9iYWxPYmplY3QpLCBwcm9wZXJ0eU5hbWUpLCB2YWx1ZSwgc2xv
dCk7CisgICAgICAgIHJldHVybiBtZXRob2RUYWJsZSh2bSktPnB1dCh0aGlzLCBnbG9iYWxPYmpl
Y3QsIElkZW50aWZpZXI6OmZyb20odm0sIHByb3BlcnR5TmFtZSksIHZhbHVlLCBzbG90KTsKICAg
ICB9CiAgICAgICAgIAogICAgIC8vIFRoaXMgaXMgc2ltaWxhciB0byB0aGUgcHV0RGlyZWN0KiBt
ZXRob2RzOgpAQCAtMTQ0MywxMCArMTQ0Myw2IEBAIEFMV0FZU19JTkxJTkUgYm9vbCBKU09iamVj
dDo6Z2V0T3duUHJvcGUKIHsKICAgICByZXR1cm4gZ2V0T3duUHJvcGVydHlTbG90SW1wbChvYmpl
Y3QsIGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCBzbG90KTsKIH0KLQotQUxXQVlTX0lOTElO
RSB2b2lkIEpTT2JqZWN0Ojpkb1B1dFByb3BlcnR5U2VjdXJpdHlDaGVjayhKU09iamVjdCosIEpT
R2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBQdXRQcm9wZXJ0eVNsb3QmKQotewotfQogI2Vu
ZGlmCiAKIC8vIEl0IG1heSBzZWVtIGNyYXp5IHRvIGlubGluZSBhIGZ1bmN0aW9uIHRoaXMgbGFy
Z2UgYnV0IGl0IG1ha2VzIGEgYmlnIGRpZmZlcmVuY2UKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTT2JqZWN0SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0SW5saW5lcy5oCShyZXZpc2lvbiAyNjg2NzQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdElubGluZXMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtODQsNyArODQsNyBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgSlNPYmplY3Q6OmNh
blBlcmZvcm1GCiAgICAgSlNPYmplY3QqIG9iaiA9IHRoaXM7CiAgICAgd2hpbGUgKHRydWUpIHsK
ICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBvYmotPnN0cnVjdHVyZSh2bSk7Ci0gICAg
ICAgIGlmIChzdHJ1Y3R1cmUtPmhhc1JlYWRPbmx5T3JHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzRXhj
bHVkaW5nUHJvdG8oKSB8fCBzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkub3ZlcnJpZGVzR2V0UHJvdG90
eXBlKCkpCisgICAgICAgIGlmIChzdHJ1Y3R1cmUtPmhhc1JlYWRPbmx5T3JHZXR0ZXJTZXR0ZXJQ
cm9wZXJ0aWVzRXhjbHVkaW5nUHJvdG8oKSB8fCBzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkub3ZlcnJp
ZGVzR2V0UHJvdG90eXBlKCkgfHwgc3RydWN0dXJlLT50eXBlSW5mbygpLm92ZXJyaWRlc1B1dCgp
KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgIHByb3RvdHlwZSA9IG9iai0+
Z2V0UHJvdG90eXBlRGlyZWN0KHZtKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTUHJveHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU1Byb3h5LmgJKHJldmlzaW9uIDI2ODY3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTUHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNyBAQCBuYW1lc3Bh
Y2UgSlNDIHsKIGNsYXNzIEpTUHJveHkgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7CiBwdWJs
aWM6CiAgICAgdXNpbmcgQmFzZSA9IEpTTm9uRmluYWxPYmplY3Q7Ci0gICAgc3RhdGljIGNvbnN0
ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgT3Zl
cnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzR2V0UHJvcGVydHlOYW1lcyB8IE92
ZXJyaWRlc0FueUZvcm1PZkdldFByb3BlcnR5TmFtZXMgfCBPdmVycmlkZXNHZXRQcm90b3R5cGUg
fCBJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3Ra
ZXJvOworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNl
OjpTdHJ1Y3R1cmVGbGFncyB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRl
c0dldFByb3BlcnR5TmFtZXMgfCBPdmVycmlkZXNBbnlGb3JtT2ZHZXRQcm9wZXJ0eU5hbWVzIHwg
T3ZlcnJpZGVzR2V0UHJvdG90eXBlIHwgT3ZlcnJpZGVzUHV0IHwgT3ZlcnJpZGVzUHV0QnlJbmRl
eCB8IEludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05v
dFplcm87CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+
CiAgICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGVJbmZvLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlSW5mby5oCShyZXZpc2lvbiAyNjg2NzQp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGVJbmZvLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTYyLDggKzYyLDkgQEAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBJc0ltbXV0
YWJsZVBybwogc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBHZXRPd25Qcm9wZXJ0eVNsb3RJc0lt
cHVyZUZvclByb3BlcnR5QWJzZW5jZSA9IDEgPDwgMTU7CiBzdGF0aWMgY29uc3RleHByIHVuc2ln
bmVkIEludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05v
dFplcm8gPSAxIDw8IDE2Owogc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVJc0lt
bW9ydGFsID0gMSA8PCAxNzsKLXN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgSGFzUHV0UHJvcGVy
dHlTZWN1cml0eUNoZWNrID0gMSA8PCAxODsKLXN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgT3Zl
cnJpZGVzR2V0UHJvdG90eXBlID0gMSA8PCAxOTsKK3N0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQg
T3ZlcnJpZGVzR2V0UHJvdG90eXBlID0gMSA8PCAxODsKK3N0YXRpYyBjb25zdGV4cHIgdW5zaWdu
ZWQgT3ZlcnJpZGVzUHV0ID0gMSA8PCAxOTsKK3N0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgT3Zl
cnJpZGVzUHV0QnlJbmRleCA9IDEgPDwgMjA7CiAKIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQg
bnVtYmVyT2ZJbmxpbmVCaXRzID0gODsKIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgT3ZlcnJp
ZGVzR2V0UHJvdG90eXBlT3V0T2ZMaW5lID0gT3ZlcnJpZGVzR2V0UHJvdG90eXBlID4+IG51bWJl
ck9mSW5saW5lQml0czsKQEAgLTEwNiwxMCArMTA3LDExIEBAIHB1YmxpYzoKICAgICBib29sIG92
ZXJyaWRlc0dldFByb3BlcnR5TmFtZXMoKSBjb25zdCB7IHJldHVybiBpc1NldE9uRmxhZ3MyPE92
ZXJyaWRlc0dldFByb3BlcnR5TmFtZXM+KCk7IH0KICAgICBib29sIG92ZXJyaWRlc0FueUZvcm1P
ZkdldFByb3BlcnR5TmFtZXMoKSBjb25zdCB7IHJldHVybiBpc1NldE9uRmxhZ3MyPE92ZXJyaWRl
c0FueUZvcm1PZkdldFByb3BlcnR5TmFtZXM+KCk7IH0KICAgICBib29sIG92ZXJyaWRlc0dldFBy
b3RvdHlwZSgpIGNvbnN0IHsgcmV0dXJuIGlzU2V0T25GbGFnczI8T3ZlcnJpZGVzR2V0UHJvdG90
eXBlPigpOyB9CisgICAgYm9vbCBvdmVycmlkZXNQdXQoKSBjb25zdCB7IHJldHVybiBpc1NldE9u
RmxhZ3MyPE92ZXJyaWRlc1B1dD4oKTsgfQorICAgIGJvb2wgb3ZlcnJpZGVzUHV0QnlJbmRleCgp
IGNvbnN0IHsgcmV0dXJuIGlzU2V0T25GbGFnczI8T3ZlcnJpZGVzUHV0QnlJbmRleD4oKTsgfQog
ICAgIGJvb2wgcHJvaGliaXRzUHJvcGVydHlDYWNoaW5nKCkgY29uc3QgeyByZXR1cm4gaXNTZXRP
bkZsYWdzMjxQcm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmc+KCk7IH0KICAgICBib29sIGdldE93blBy
b3BlcnR5U2xvdElzSW1wdXJlKCkgY29uc3QgeyByZXR1cm4gaXNTZXRPbkZsYWdzMjxHZXRPd25Q
cm9wZXJ0eVNsb3RJc0ltcHVyZT4oKTsgfQogICAgIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90SXNJ
bXB1cmVGb3JQcm9wZXJ0eUFic2VuY2UoKSBjb25zdCB7IHJldHVybiBpc1NldE9uRmxhZ3MyPEdl
dE93blByb3BlcnR5U2xvdElzSW1wdXJlRm9yUHJvcGVydHlBYnNlbmNlPigpOyB9Ci0gICAgYm9v
bCBoYXNQdXRQcm9wZXJ0eVNlY3VyaXR5Q2hlY2soKSBjb25zdCB7IHJldHVybiBpc1NldE9uRmxh
Z3MyPEhhc1B1dFByb3BlcnR5U2VjdXJpdHlDaGVjaz4oKTsgfQogICAgIGJvb2wgbmV3SW1wdXJl
UHJvcGVydHlGaXJlc1dhdGNocG9pbnRzKCkgY29uc3QgeyByZXR1cm4gaXNTZXRPbkZsYWdzMjxO
ZXdJbXB1cmVQcm9wZXJ0eUZpcmVzV2F0Y2hwb2ludHM+KCk7IH0KICAgICBib29sIGlzSW1tdXRh
YmxlUHJvdG90eXBlRXhvdGljT2JqZWN0KCkgY29uc3QgeyByZXR1cm4gaXNTZXRPbkZsYWdzMjxJ
c0ltbXV0YWJsZVByb3RvdHlwZUV4b3RpY09iamVjdD4oKTsgfQogICAgIGJvb2wgaW50ZXJjZXB0
c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybygpIGNvbnN0
IHsgcmV0dXJuIGlzU2V0T25GbGFnczI8SW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5k
ZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybz4oKTsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvUHJveHlPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1Byb3h5T2JqZWN0LmNwcAkocmV2aXNpb24gMjY4Njc0KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJveHlPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00NTIsMjUgKzQ1MiwxOSBAQCBib29sIFByb3h5T2JqZWN0OjpwdXQoSlNDZWxsKiBjZWxs
LCBKU0dsCiAgICAgcmV0dXJuIHRoaXNPYmplY3QtPnBlcmZvcm1QdXQoZ2xvYmFsT2JqZWN0LCB2
YWx1ZSwgc2xvdC50aGlzVmFsdWUoKSwgcHJvcGVydHlOYW1lLCBwZXJmb3JtRGVmYXVsdFB1dCwg
c2xvdC5pc1N0cmljdE1vZGUoKSk7CiB9CiAKLWJvb2wgUHJveHlPYmplY3Q6OnB1dEJ5SW5kZXhD
b21tb24oSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSB0aGlzVmFsdWUsIHVu
c2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSBwdXRWYWx1ZSwgYm9vbCBzaG91bGRUaHJvdykK
K2Jvb2wgUHJveHlPYmplY3Q6OnB1dEJ5SW5kZXgoSlNDZWxsKiBjZWxsLCBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIGJv
b2wgc2hvdWxkVGhyb3cpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBJZGVudGlmaWVyIGlk
ZW50ID0gSWRlbnRpZmllcjo6ZnJvbSh2bSwgcHJvcGVydHlOYW1lKTsKICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCBmYWxzZSk7CisgICAgUHJveHlPYmplY3QqIHRoaXNPYmplY3QgPSBq
c0Nhc3Q8UHJveHlPYmplY3QqPihjZWxsKTsKICAgICBhdXRvIHBlcmZvcm1EZWZhdWx0UHV0ID0g
WyZdICgpIHsKLSAgICAgICAgSlNPYmplY3QqIHRhcmdldCA9IHRoaXMtPnRhcmdldCgpOwotICAg
ICAgICBib29sIGlzU3RyaWN0TW9kZSA9IHNob3VsZFRocm93OwotICAgICAgICBQdXRQcm9wZXJ0
eVNsb3Qgc2xvdCh0aGlzVmFsdWUsIGlzU3RyaWN0TW9kZSk7IC8vIFdlIG11c3QgcHJlc2VydmUg
dGhlICJ0aGlzIiB0YXJnZXQgb2YgdGhlIHB1dEJ5SW5kZXguCi0gICAgICAgIHJldHVybiB0YXJn
ZXQtPm1ldGhvZFRhYmxlKHZtKS0+cHV0KHRhcmdldCwgZ2xvYmFsT2JqZWN0LCBpZGVudC5pbXBs
KCksIHB1dFZhbHVlLCBzbG90KTsKKyAgICAgICAgSlNPYmplY3QqIHRhcmdldCA9IHRoaXNPYmpl
Y3QtPnRhcmdldCgpOworICAgICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdCh0aGlzT2JqZWN0LCBz
aG91bGRUaHJvdyk7CisgICAgICAgIHJldHVybiB0YXJnZXQtPm1ldGhvZFRhYmxlKHZtKS0+cHV0
KHRhcmdldCwgZ2xvYmFsT2JqZWN0LCBpZGVudC5pbXBsKCksIHZhbHVlLCBzbG90KTsKICAgICB9
OwotICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgcGVyZm9ybVB1dChnbG9iYWxPYmplY3Qs
IHB1dFZhbHVlLCB0aGlzVmFsdWUsIGlkZW50LmltcGwoKSwgcGVyZm9ybURlZmF1bHRQdXQsIHNo
b3VsZFRocm93KSk7Ci19Ci0KLWJvb2wgUHJveHlPYmplY3Q6OnB1dEJ5SW5kZXgoSlNDZWxsKiBj
ZWxsLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUs
IEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpCi17Ci0gICAgUHJveHlPYmplY3QqIHRo
aXNPYmplY3QgPSBqc0Nhc3Q8UHJveHlPYmplY3QqPihjZWxsKTsKLSAgICByZXR1cm4gdGhpc09i
amVjdC0+cHV0QnlJbmRleENvbW1vbihnbG9iYWxPYmplY3QsIHRoaXNPYmplY3QsIHByb3BlcnR5
TmFtZSwgdmFsdWUsIHNob3VsZFRocm93KTsKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUs
IHRoaXNPYmplY3QtPnBlcmZvcm1QdXQoZ2xvYmFsT2JqZWN0LCB2YWx1ZSwgdGhpc09iamVjdCwg
aWRlbnQuaW1wbCgpLCBwZXJmb3JtRGVmYXVsdFB1dCwgc2hvdWxkVGhyb3cpKTsKIH0KIAogSlND
X0RFRklORV9IT1NUX0ZVTkNUSU9OKHBlcmZvcm1Qcm94eUNhbGwsIChKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9Qcm94eU9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1Byb3h5T2JqZWN0LmgJKHJldmlzaW9uIDI2ODY3NCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3h5T2JqZWN0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTM0LDcgKzM0LDcgQEAgY2xhc3MgUHJveHlPYmplY3QgZmluYWwgOiBwdWJsaWMgSlNOb25G
aQogcHVibGljOgogICAgIHR5cGVkZWYgSlNOb25GaW5hbE9iamVjdCBCYXNlOwogCi0gICAgc3Rh
dGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZs
YWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzR2V0Q2FsbERhdGEg
fCBJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3Ra
ZXJvIHwgT3ZlcnJpZGVzR2V0UHJvcGVydHlOYW1lcyB8IE92ZXJyaWRlc0FueUZvcm1PZkdldFBy
b3BlcnR5TmFtZXMgfCBPdmVycmlkZXNHZXRQcm90b3R5cGUgfCBQcm9oaWJpdHNQcm9wZXJ0eUNh
Y2hpbmc7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJh
c2U6OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJp
ZGVzR2V0Q2FsbERhdGEgfCBJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5X
aGVuTGVuZ3RoSXNOb3RaZXJvIHwgT3ZlcnJpZGVzR2V0UHJvcGVydHlOYW1lcyB8IE92ZXJyaWRl
c0FueUZvcm1PZkdldFByb3BlcnR5TmFtZXMgfCBPdmVycmlkZXNHZXRQcm90b3R5cGUgfCBPdmVy
cmlkZXNQdXQgfCBPdmVycmlkZXNQdXRCeUluZGV4IHwgUHJvaGliaXRzUHJvcGVydHlDYWNoaW5n
OwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+
CiAgICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCkBAIC03MCw3ICs3
MCw2IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBib29sIHB1dChKU0NlbGwqLCBKU0dsb2JhbE9i
amVjdCosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7CiAgICAgc3Rh
dGljIGJvb2wgcHV0QnlJbmRleChKU0NlbGwqLCBKU0dsb2JhbE9iamVjdCosIHVuc2lnbmVkIHBy
b3BlcnR5TmFtZSwgSlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJvdyk7Ci0gICAgYm9vbCBwdXRCeUlu
ZGV4Q29tbW9uKEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSB0aGlzVmFsdWUsIHVuc2lnbmVkIHBy
b3BlcnR5TmFtZSwgSlNWYWx1ZSBwdXRWYWx1ZSwgYm9vbCBzaG91bGRUaHJvdyk7CiAgICAgSlNW
YWx1ZSBwZXJmb3JtR2V0UHJvdG90eXBlKEpTR2xvYmFsT2JqZWN0Kik7CiAgICAgdm9pZCByZXZv
a2UoVk0mKTsKICAgICBib29sIGlzUmV2b2tlZCgpIGNvbnN0OwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0LmgJKHJldmlzaW9uIDI2ODY3NCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zMCw3ICszMCw3IEBAIG5hbWVzcGFjZSBKU0MgewogY2xhc3MgUmVnRXhwT2JqZWN0
IGZpbmFsIDogcHVibGljIEpTTm9uRmluYWxPYmplY3QgewogcHVibGljOgogICAgIHVzaW5nIEJh
c2UgPSBKU05vbkZpbmFsT2JqZWN0OwotICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3Ry
dWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IE92ZXJyaWRlc0dldE93blByb3Bl
cnR5U2xvdCB8IE92ZXJyaWRlc0dldFByb3BlcnR5TmFtZXMgfCBPdmVycmlkZXNBbnlGb3JtT2ZH
ZXRQcm9wZXJ0eU5hbWVzOworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJl
RmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xv
dCB8IE92ZXJyaWRlc0dldFByb3BlcnR5TmFtZXMgfCBPdmVycmlkZXNBbnlGb3JtT2ZHZXRQcm9w
ZXJ0eU5hbWVzIHwgT3ZlcnJpZGVzUHV0OwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5
cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+CiAgICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFj
ZUZvcihWTSYgdm0pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdP
YmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJp
bmdPYmplY3QuaAkocmV2aXNpb24gMjY4Njc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU3RyaW5nT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDcgQEAgbmFt
ZXNwYWNlIEpTQyB7CiBjbGFzcyBTdHJpbmdPYmplY3QgOiBwdWJsaWMgSlNXcmFwcGVyT2JqZWN0
IHsKIHB1YmxpYzoKICAgICB1c2luZyBCYXNlID0gSlNXcmFwcGVyT2JqZWN0OwotICAgIHN0YXRp
YyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFn
cyB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEludGVyY2VwdHNHZXRPd25Qcm9wZXJ0
eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8gfCBPdmVycmlkZXNBbnlGb3JtT2ZH
ZXRQcm9wZXJ0eU5hbWVzOworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJl
RmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xv
dCB8IEludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05v
dFplcm8gfCBPdmVycmlkZXNBbnlGb3JtT2ZHZXRQcm9wZXJ0eU5hbWVzIHwgT3ZlcnJpZGVzUHV0
IHwgT3ZlcnJpZGVzUHV0QnlJbmRleDsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lLCBTdWJzcGFj
ZUFjY2VzcyBtb2RlPgogICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZt
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCShy
ZXZpc2lvbiAyNjg2NzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1
cmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODksMTAgKzE4OSwxNSBAQCB2b2lkIFN0cnVjdHVy
ZTo6dmFsaWRhdGVGbGFncygpCiAgICAgaWYgKG92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdEJ5
SW5kZXgpCiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHR5cGVJbmZvKCkuaW50ZXJjZXB0c0dldE93
blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybygpKTsKIAotICAgIGJv
b2wgb3ZlcnJpZGVzUHV0UHJvcGVydHlTZWN1cml0eUNoZWNrID0KLSAgICAgICAgbWV0aG9kVGFi
bGUuZG9QdXRQcm9wZXJ0eVNlY3VyaXR5Q2hlY2sgIT0gSlNPYmplY3Q6OmRvUHV0UHJvcGVydHlT
ZWN1cml0eUNoZWNrCi0gICAgICAgICYmIG1ldGhvZFRhYmxlLmRvUHV0UHJvcGVydHlTZWN1cml0
eUNoZWNrICE9IEpTQ2VsbDo6ZG9QdXRQcm9wZXJ0eVNlY3VyaXR5Q2hlY2s7Ci0gICAgUkVMRUFT
RV9BU1NFUlQob3ZlcnJpZGVzUHV0UHJvcGVydHlTZWN1cml0eUNoZWNrID09IHR5cGVJbmZvKCku
aGFzUHV0UHJvcGVydHlTZWN1cml0eUNoZWNrKCkpOworICAgIGJvb2wgb3ZlcnJpZGVzUHV0ID0K
KyAgICAgICAgbWV0aG9kVGFibGUucHV0ICE9IEpTT2JqZWN0OjpwdXQKKyAgICAgICAgJiYgbWV0
aG9kVGFibGUucHV0ICE9IEpTQ2VsbDo6cHV0OworICAgIFJFTEVBU0VfQVNTRVJUKG92ZXJyaWRl
c1B1dCA9PSB0eXBlSW5mbygpLm92ZXJyaWRlc1B1dCgpKTsKKworICAgIGJvb2wgb3ZlcnJpZGVz
UHV0QnlJbmRleCA9CisgICAgICAgIG1ldGhvZFRhYmxlLnB1dEJ5SW5kZXggIT0gSlNPYmplY3Q6
OnB1dEJ5SW5kZXgKKyAgICAgICAgJiYgbWV0aG9kVGFibGUucHV0QnlJbmRleCAhPSBKU0NlbGw6
OnB1dEJ5SW5kZXg7CisgICAgUkVMRUFTRV9BU1NFUlQob3ZlcnJpZGVzUHV0QnlJbmRleCA9PSB0
eXBlSW5mbygpLm92ZXJyaWRlc1B1dEJ5SW5kZXgoKSk7CiAKICAgICBib29sIG92ZXJyaWRlc0dl
dFByb3BlcnR5TmFtZXMgPQogICAgICAgICBtZXRob2RUYWJsZS5nZXRQcm9wZXJ0eU5hbWVzICE9
IEpTT2JqZWN0OjpnZXRQcm9wZXJ0eU5hbWVzCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
dG9vbHMvSlNEb2xsYXJWTS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3Rvb2xzL0pTRG9sbGFyVk0uY3BwCShyZXZpc2lvbiAyNjg2NzQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvdG9vbHMvSlNEb2xsYXJWTS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgxNSw2ICs4
MTUsNyBAQCBwdWJsaWM6CiAKIGNsYXNzIE9iamVjdERvaW5nU2lkZUVmZmVjdFB1dFdpdGhvdXRD
b3JyZWN0U2xvdFN0YXR1cyA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKICAgICB1c2luZyBC
YXNlID0gSlNOb25GaW5hbE9iamVjdDsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0
cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBPdmVycmlkZXNQdXQ7CiBwdWJs
aWM6CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzPgogICAg
IHN0YXRpYyBDb21wbGV0ZVN1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCShyZXZpc2lvbiAyNjg2NzQpCisrKyBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtp
bmcgY29weSkKQEAgLTEsMyArMSwyNyBAQAorMjAyMC0xMC0xOSAgQWxleGV5IFNodmF5a2EgIDxz
aHZhaWthbGVzaEBnbWFpbC5jb20+CisKKyAgICAgICAgSW50cm9kdWNlIE92ZXJyaWRlc1B1dFtC
eUluZGV4XSB0eXBlIGluZm8gZmxhZ3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIxNzkxNgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIGRvUHV0UHJvcGVydHlTZWN1cml0eUNoZWNrKCkgY2FuIGJlIHNhZmVs
eSByZW1vdmVkIGJlY2F1c2UgSlN7RE9NV2luZG93LExvY2F0aW9ufTo6cHV0KCkKKyAgICAgICAg
YWxzbyBwZXJmb3JtIHRoaXMgY2hlY2ssIGFuZCBhcmUgaW52b2tlZCBieSBwdXRJbmxpbmVTbG93
KCkgLyBwdXRUb1ByaW1pdGl2ZSgpIG1ldGhvZHMuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBu
byBiZWhhdmlvciBjaGFuZ2UuCisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0N1
c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTVdpbmRvdzo6ZG9QdXRQcm9wZXJ0eVNl
Y3VyaXR5Q2hlY2spOiBEZWxldGVkLgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTTG9jYXRpb25D
dXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNMb2NhdGlvbjo6ZG9QdXRQcm9wZXJ0eVNl
Y3VyaXR5Q2hlY2spOiBEZWxldGVkLgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdl
bmVyYXRvckpTLnBtOgorICAgICAgICAoR2VuZXJhdGVIZWFkZXIpOgorICAgICAgICAoR2VuZXJh
dGVQcm90b3R5cGVEZWNsYXJhdGlvbik6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTLyo6IFVwZGF0ZWQuCisgICAgICAgICogYnJpZGdlL29iamMvb2JqY19ydW50aW1lLmg6Cisg
ICAgICAgICogYnJpZGdlL3J1bnRpbWVfYXJyYXkuaDoKKyAgICAgICAgKiBicmlkZ2UvcnVudGlt
ZV9vYmplY3QuaDoKKwogMjAyMC0xMC0xOSAgU2FpZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxh
d2FAYXBwbGUuY29tPgogCiAgICAgICAgIFtHUFUgUHJvY2Vzc10gQ2xlYW4gdGhlIERpc3BsYXlM
aXN0IHJlY29yZGluZyBvZiB0aGUgTmF0aXZlSW1hZ2UKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0N1c3RvbS5jcHAJKHJldmlzaW9uIDI2ODY3NCkK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzEyLDI1ICszMTIsNiBAQCBib29sIEpTRE9NV2luZG93OjpnZXRPd25Q
cm9wZXJ0eVNsb3RCeUluCiAgICAgcmV0dXJuIEJhc2U6OmdldE93blByb3BlcnR5U2xvdEJ5SW5k
ZXgodGhpc09iamVjdCwgbGV4aWNhbEdsb2JhbE9iamVjdCwgaW5kZXgsIHNsb3QpOwogfQogCi12
b2lkIEpTRE9NV2luZG93Ojpkb1B1dFByb3BlcnR5U2VjdXJpdHlDaGVjayhKU09iamVjdCogY2Vs
bCwgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZSBwcm9w
ZXJ0eU5hbWUsIFB1dFByb3BlcnR5U2xvdCYpCi17Ci0gICAgVk0mIHZtID0gbGV4aWNhbEdsb2Jh
bE9iamVjdC0+dm0oKTsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
Ci0KLSAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTRE9NV2luZG93Kj4oY2VsbCk7Ci0g
ICAgaWYgKCF0aGlzT2JqZWN0LT53cmFwcGVkKCkuZnJhbWUoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgU3RyaW5nIGVycm9yTWVzc2FnZTsKLSAgICBpZiAoIUJpbmRpbmdTZWN1cml0eTo6c2hv
dWxkQWxsb3dBY2Nlc3NUb0RPTVdpbmRvdygqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc09iamVj
dC0+d3JhcHBlZCgpLCBlcnJvck1lc3NhZ2UpKSB7Ci0gICAgICAgIC8vIFdlIG9ubHkgYWxsb3cg
c2V0dGluZyAibG9jYXRpb24iIGF0dHJpYnV0ZSBjcm9zcy1vcmlnaW4uCi0gICAgICAgIGlmIChw
cm9wZXJ0eU5hbWUgPT0gc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRh
KS0+YnVpbHRpbk5hbWVzKCkubG9jYXRpb25QdWJsaWNOYW1lKCkpCi0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIHRocm93U2VjdXJpdHlFcnJvcigqbGV4aWNhbEdsb2JhbE9iamVjdCwgc2Nv
cGUsIGVycm9yTWVzc2FnZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci19Ci0KIGJvb2wgSlNE
T01XaW5kb3c6OnB1dChKU0NlbGwqIGNlbGwsIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFs
T2JqZWN0LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBQdXRQcm9w
ZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgVk0mIHZtID0gbGV4aWNhbEdsb2JhbE9iamVjdC0+dm0o
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTG9jYXRpb25DdXN0b20uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTG9jYXRpb25DdXN0
b20uY3BwCShyZXZpc2lvbiAyNjg2NzQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0xvY2F0aW9uQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMwLDIzICsxMzAsNiBAQCBz
dGF0aWMgYm9vbCBwdXRDb21tb24oSlNMb2NhdGlvbiYgdGhpc09iCiAgICAgcmV0dXJuIGZhbHNl
OwogfQogCi12b2lkIEpTTG9jYXRpb246OmRvUHV0UHJvcGVydHlTZWN1cml0eUNoZWNrKEpTT2Jq
ZWN0KiBvYmplY3QsIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBQcm9wZXJ0
eU5hbWUgcHJvcGVydHlOYW1lLCBQdXRQcm9wZXJ0eVNsb3QmKQotewotICAgIGF1dG8qIHRoaXNP
YmplY3QgPSBqc0Nhc3Q8SlNMb2NhdGlvbio+KG9iamVjdCk7Ci0gICAgQVNTRVJUX0dDX09CSkVD
VF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwotCi0gICAgVk0mIHZtID0gbGV4aWNhbEds
b2JhbE9iamVjdC0+dm0oKTsKLQotICAgIC8vIEFsd2F5cyBhbGxvdyBhc3NpZ25pbmcgdG8gdGhl
IHdob2xlIGxvY2F0aW9uLgotICAgIC8vIEhvd2V2ZXIsIGFsbGxvd2luZyBhc3NpZ25pbmcgb2Yg
cGllY2VzIG1pZ2h0IGluYWR2ZXJ0ZW50bHkgZGlzY2xvc2UgcGFydHMgb2YgdGhlIG9yaWdpbmFs
IGxvY2F0aW9uLgotICAgIC8vIFNvIGZhbGwgdGhyb3VnaCB0byB0aGUgYWNjZXNzIGNoZWNrIGZv
ciB0aG9zZS4KLSAgICBpZiAocHJvcGVydHlOYW1lID09IHN0YXRpY19jYXN0PEpTVk1DbGllbnRE
YXRhKj4odm0uY2xpZW50RGF0YSktPmJ1aWx0aW5OYW1lcygpLmhyZWZQdWJsaWNOYW1lKCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIC8vIEJsb2NrIGFjY2VzcyBhbmQgdGhyb3cgaWYgdGhlcmUg
aXMgYSBzZWN1cml0eSBlcnJvci4KLSAgICBCaW5kaW5nU2VjdXJpdHk6OnNob3VsZEFsbG93QWNj
ZXNzVG9ET01XaW5kb3cobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc09iamVjdC0+d3JhcHBlZCgp
LndpbmRvdygpLCBUaHJvd1NlY3VyaXR5RXJyb3IpOwotfQotCiBib29sIEpTTG9jYXRpb246OnB1
dChKU0NlbGwqIGNlbGwsIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBQcm9w
ZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmIHB1
dFByb3BlcnR5U2xvdCkKIHsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTTG9jYXRp
b24qPihjZWxsKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdl
bmVyYXRvckpTLnBtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvQ29kZUdlbmVyYXRvckpTLnBtCShyZXZpc2lvbiAyNjg2NzQpCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQkod29ya2luZyBjb3B5KQpAQCAt
Mjk0OSwxMSArMjk0OSw2IEBAIHN1YiBHZW5lcmF0ZUhlYWRlcgogICAgICAgICAkc3RydWN0dXJl
RmxhZ3N7IkpTQzo6SW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxl
bmd0aElzTm90WmVybyJ9ID0gMTsKICAgICB9CiAKLSAgICBpZiAoJGludGVyZmFjZS0+ZXh0ZW5k
ZWRBdHRyaWJ1dGVzLT57Q2hlY2tTZWN1cml0eX0pIHsKLSAgICAgICAgcHVzaChAaGVhZGVyQ29u
dGVudCwgIiAgICBzdGF0aWMgdm9pZCBkb1B1dFByb3BlcnR5U2VjdXJpdHlDaGVjayhKU0M6OkpT
T2JqZWN0KiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OlB1
dFByb3BlcnR5U2xvdCYpO1xuIik7Ci0gICAgICAgICRzdHJ1Y3R1cmVGbGFnc3siSlNDOjpIYXNQ
dXRQcm9wZXJ0eVNlY3VyaXR5Q2hlY2sifSA9IDE7Ci0gICAgfQotCiAgICAgaWYgKCRpbnRlcmZh
Y2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+e1BsdWdpbn0gfHwgR2V0TmFtZWRTZXR0ZXJPcGVyYXRp
b24oJGludGVyZmFjZSkpIHsKICAgICAgICAgJHN0cnVjdHVyZUZsYWdzeyJKU0M6OlByb2hpYml0
c1Byb3BlcnR5Q2FjaGluZyJ9ID0gMTsKICAgICB9CkBAIC0yOTY2LDYgKzI5NjEsOCBAQCBzdWIg
R2VuZXJhdGVIZWFkZXIKICAgICBpZiAoSW5zdGFuY2VPdmVycmlkZXNQdXQoJGludGVyZmFjZSkp
IHsKICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBzdGF0aWMgYm9vbCBwdXQoSlND
OjpKU0NlbGwqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6
SlNWYWx1ZSwgSlNDOjpQdXRQcm9wZXJ0eVNsb3QmKTtcbiIpOwogICAgICAgICBwdXNoKEBoZWFk
ZXJDb250ZW50LCAiICAgIHN0YXRpYyBib29sIHB1dEJ5SW5kZXgoSlNDOjpKU0NlbGwqLCBKU0M6
OkpTR2xvYmFsT2JqZWN0KiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU0M6OkpTVmFsdWUsIGJv
b2wgc2hvdWxkVGhyb3cpO1xuIik7CisgICAgICAgICRzdHJ1Y3R1cmVGbGFnc3siSlNDOjpPdmVy
cmlkZXNQdXQifSA9IDE7CisgICAgICAgICRzdHJ1Y3R1cmVGbGFnc3siSlNDOjpPdmVycmlkZXNQ
dXRCeUluZGV4In0gPSAxOwogICAgIH0KICAgICAKICAgICBpZiAoSW5zdGFuY2VPdmVycmlkZXNE
ZWZpbmVPd25Qcm9wZXJ0eSgkaW50ZXJmYWNlKSkgewpAQCAtNzY5MCw2ICs3Njg3LDcgQEAgc3Vi
IEdlbmVyYXRlUHJvdG90eXBlRGVjbGFyYXRpb24KICAgICBpZiAoJGludGVyZmFjZS0+ZXh0ZW5k
ZWRBdHRyaWJ1dGVzLT57Q3VzdG9tUHV0T25Qcm90b3R5cGV9KSB7CiAgICAgICAgIHB1c2goQCRv
dXRwdXRBcnJheSwgIlxuIik7CiAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBzdGF0
aWMgYm9vbCBwdXQoSlNDOjpKU0NlbGwqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpQcm9w
ZXJ0eU5hbWUsIEpTQzo6SlNWYWx1ZSwgSlNDOjpQdXRQcm9wZXJ0eVNsb3QmKTtcbiIpOworICAg
ICAgICAkc3RydWN0dXJlRmxhZ3N7IkpTQzo6T3ZlcnJpZGVzUHV0In0gPSAxOwogICAgIH0KIAog
ICAgIGlmICgkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntDdXN0b21EZWZpbmVPd25Q
cm9wZXJ0eU9uUHJvdG90eXBlfSkgewpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdERvbWFpblNlY3VyaXR5LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdERvbWFpblNlY3VyaXR5LmgJ
KHJldmlzaW9uIDI2ODY3NCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3REb21haW5TZWN1cml0eS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw3ICszOSw2
IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgSlNDOjpKU09iamVjdCogY3JlYXRlUHJvdG90eXBlKEpT
Qzo6Vk0mLCBKU0RPTUdsb2JhbE9iamVjdCYpOwogICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBw
cm90b3R5cGUoSlNDOjpWTSYsIEpTRE9NR2xvYmFsT2JqZWN0Jik7CiAgICAgc3RhdGljIFRlc3RE
b21haW5TZWN1cml0eSogdG9XcmFwcGVkKEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOwotICAgIHN0
YXRpYyB2b2lkIGRvUHV0UHJvcGVydHlTZWN1cml0eUNoZWNrKEpTQzo6SlNPYmplY3QqLCBKU0M6
OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6UHV0UHJvcGVydHlTbG90
Jik7CiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0M6OkpTQ2VsbCopOwogCiAgICAgREVDTEFS
RV9JTkZPOwpAQCAtNTksNyArNTgsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIEpTQzo6SXNvU3Vi
c3BhY2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSk7CiAgICAgc3RhdGljIHZvaWQgYW5h
bHl6ZUhlYXAoSlNDZWxsKiwgSlNDOjpIZWFwQW5hbHl6ZXImKTsKIHB1YmxpYzoKLSAgICBzdGF0
aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxh
Z3MgfCBKU0M6Okhhc1B1dFByb3BlcnR5U2VjdXJpdHlDaGVjayB8IEpTQzo6SGFzU3RhdGljUHJv
cGVydHlUYWJsZTsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdz
ID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBKU0M6Okhhc1N0YXRpY1Byb3BlcnR5VGFibGU7CiBw
cm90ZWN0ZWQ6CiAgICAgSlNUZXN0RG9tYWluU2VjdXJpdHkoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RP
TUdsb2JhbE9iamVjdCYsIFJlZjxUZXN0RG9tYWluU2VjdXJpdHk+JiYpOwogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW5kZXhlZFNldHRlck5v
SWRlbnRpZmllci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyLmgJKHJldmlzaW9uIDI2
ODY3NCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJ
bmRleGVkU2V0dGVyTm9JZGVudGlmaWVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTY0LDcgKzY0LDcg
QEAgcHVibGljOgogICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvckltcGwo
SlNDOjpWTSYgdm0pOwogICAgIHN0YXRpYyB2b2lkIGFuYWx5emVIZWFwKEpTQ2VsbCosIEpTQzo6
SGVhcEFuYWx5emVyJik7CiBwdWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBT
dHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSlNDOjpJbnRlcmNlcHRzR2V0
T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgSlNDOjpPdmVy
cmlkZXNBbnlGb3JtT2ZHZXRQcm9wZXJ0eU5hbWVzIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9w
ZXJ0eVNsb3Q7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9
IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSlNDOjpJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90
QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgSlNDOjpPdmVycmlkZXNBbnlGb3JtT2ZH
ZXRQcm9wZXJ0eU5hbWVzIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBKU0M6
Ok92ZXJyaWRlc1B1dCB8IEpTQzo6T3ZlcnJpZGVzUHV0QnlJbmRleDsKIHByb3RlY3RlZDoKICAg
ICBKU1Rlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyKEpTQzo6U3RydWN0dXJlKiwgSlNET01H
bG9iYWxPYmplY3QmLCBSZWY8VGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXI+JiYpOwogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW5kZXhl
ZFNldHRlclRocm93aW5nRXhjZXB0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2Vw
dGlvbi5oCShyZXZpc2lvbiAyNjg2NzQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uLmgJKHdvcmtp
bmcgY29weSkKQEAgLTY0LDcgKzY0LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBKU0M6Oklzb1N1
YnNwYWNlKiBzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pOwogICAgIHN0YXRpYyB2b2lkIGFu
YWx5emVIZWFwKEpTQ2VsbCosIEpTQzo6SGVhcEFuYWx5emVyJik7CiBwdWJsaWM6Ci0gICAgc3Rh
dGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZs
YWdzIHwgSlNDOjpJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVu
Z3RoSXNOb3RaZXJvIHwgSlNDOjpPdmVycmlkZXNBbnlGb3JtT2ZHZXRQcm9wZXJ0eU5hbWVzIHwg
SlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3Q7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1
bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSlNDOjpJbnRl
cmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwg
SlNDOjpPdmVycmlkZXNBbnlGb3JtT2ZHZXRQcm9wZXJ0eU5hbWVzIHwgSlNDOjpPdmVycmlkZXNH
ZXRPd25Qcm9wZXJ0eVNsb3QgfCBKU0M6Ok92ZXJyaWRlc1B1dCB8IEpTQzo6T3ZlcnJpZGVzUHV0
QnlJbmRleDsKIHByb3RlY3RlZDoKICAgICBKU1Rlc3RJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNl
cHRpb24oSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCYsIFJlZjxUZXN0SW5kZXhl
ZFNldHRlclRocm93aW5nRXhjZXB0aW9uPiYmKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIuaAkocmV2aXNpb24gMjY4Njc0KQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEluZGV4ZWRTZXR0
ZXJXaXRoSWRlbnRpZmllci5oCSh3b3JraW5nIGNvcHkpCkBAIC02NCw3ICs2NCw3IEBAIHB1Ymxp
YzoKICAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0m
IHZtKTsKICAgICBzdGF0aWMgdm9pZCBhbmFseXplSGVhcChKU0NlbGwqLCBKU0M6OkhlYXBBbmFs
eXplciYpOwogcHVibGljOgotICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJl
RmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEpTQzo6SW50ZXJjZXB0c0dldE93blByb3Bl
cnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8IEpTQzo6T3ZlcnJpZGVzQW55
Rm9ybU9mR2V0UHJvcGVydHlOYW1lcyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90
OworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpT
dHJ1Y3R1cmVGbGFncyB8IEpTQzo6SW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhF
dmVuV2hlbkxlbmd0aElzTm90WmVybyB8IEpTQzo6T3ZlcnJpZGVzQW55Rm9ybU9mR2V0UHJvcGVy
dHlOYW1lcyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgSlNDOjpPdmVycmlk
ZXNQdXQgfCBKU0M6Ok92ZXJyaWRlc1B1dEJ5SW5kZXg7CiBwcm90ZWN0ZWQ6CiAgICAgSlNUZXN0
SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyKEpTQzo6U3RydWN0dXJlKiwgSlNET01HbG9iYWxP
YmplY3QmLCBSZWY8VGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcj4mJik7CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbnRlcmZhY2Uu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0SW50ZXJmYWNlLmgJKHJldmlzaW9uIDI2ODY3NCkKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbnRlcmZhY2UuaAkod29ya2luZyBjb3B5KQpA
QCAtODMsNiArODMsOCBAQCBwdWJsaWM6CiAjaWYgRU5BQkxFKENvbmRpdGlvbjExKSB8fCBFTkFC
TEUoQ29uZGl0aW9uMTIpCiAgICAgSlNDOjpKU1ZhbHVlIHN1cHBsZW1lbnRhbE1ldGhvZDMoSlND
OjpKU0dsb2JhbE9iamVjdCYsIEpTQzo6Q2FsbEZyYW1lJik7CiAjZW5kaWYKK3B1YmxpYzoKKyAg
ICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0
dXJlRmxhZ3MgfCBKU0M6Ok92ZXJyaWRlc1B1dCB8IEpTQzo6T3ZlcnJpZGVzUHV0QnlJbmRleDsK
IHByb3RlY3RlZDoKICAgICBKU1Rlc3RJbnRlcmZhY2UoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUds
b2JhbE9iamVjdCYsIFJlZjxUZXN0SW50ZXJmYWNlPiYmKTsKIApJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5v
SWRlbnRpZmllci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIuaAkocmV2
aXNpb24gMjY4Njc0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllci5oCSh3b3JraW5nIGNvcHkp
CkBAIC02NCw3ICs2NCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSog
c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKTsKICAgICBzdGF0aWMgdm9pZCBhbmFseXplSGVh
cChKU0NlbGwqLCBKU0M6OkhlYXBBbmFseXplciYpOwogcHVibGljOgotICAgIHN0YXRpYyBjb25z
dGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEpT
Qzo6R2V0T3duUHJvcGVydHlTbG90SXNJbXB1cmVGb3JQcm9wZXJ0eUFic2VuY2UgfCBKU0M6Oklu
dGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8g
fCBKU0M6Ok92ZXJyaWRlc0FueUZvcm1PZkdldFByb3BlcnR5TmFtZXMgfCBKU0M6Ok92ZXJyaWRl
c0dldE93blByb3BlcnR5U2xvdCB8IEpTQzo6UHJvaGliaXRzUHJvcGVydHlDYWNoaW5nOworICAg
IHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1
cmVGbGFncyB8IEpTQzo6R2V0T3duUHJvcGVydHlTbG90SXNJbXB1cmVGb3JQcm9wZXJ0eUFic2Vu
Y2UgfCBKU0M6OkludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5n
dGhJc05vdFplcm8gfCBKU0M6Ok92ZXJyaWRlc0FueUZvcm1PZkdldFByb3BlcnR5TmFtZXMgfCBK
U0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEpTQzo6T3ZlcnJpZGVzUHV0IHwgSlND
OjpPdmVycmlkZXNQdXRCeUluZGV4IHwgSlNDOjpQcm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmc7CiBw
cm90ZWN0ZWQ6CiAgICAgSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyKEpT
Qzo6U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3QmLCBSZWY8VGVzdE5hbWVkQW5kSW5kZXhl
ZFNldHRlck5vSWRlbnRpZmllcj4mJik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2Vw
dGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5oCShyZXZp
c2lvbiAyNjg2NzQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24uaAkod29ya2luZyBj
b3B5KQpAQCAtNjQsNyArNjQsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIEpTQzo6SXNvU3Vic3Bh
Y2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSk7CiAgICAgc3RhdGljIHZvaWQgYW5hbHl6
ZUhlYXAoSlNDZWxsKiwgSlNDOjpIZWFwQW5hbHl6ZXImKTsKIHB1YmxpYzoKLSAgICBzdGF0aWMg
Y29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3Mg
fCBKU0M6OkdldE93blByb3BlcnR5U2xvdElzSW1wdXJlRm9yUHJvcGVydHlBYnNlbmNlIHwgSlND
OjpJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3Ra
ZXJvIHwgSlNDOjpPdmVycmlkZXNBbnlGb3JtT2ZHZXRQcm9wZXJ0eU5hbWVzIHwgSlNDOjpPdmVy
cmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBKU0M6OlByb2hpYml0c1Byb3BlcnR5Q2FjaGluZzsK
KyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3Ry
dWN0dXJlRmxhZ3MgfCBKU0M6OkdldE93blByb3BlcnR5U2xvdElzSW1wdXJlRm9yUHJvcGVydHlB
YnNlbmNlIHwgSlNDOjpJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVu
TGVuZ3RoSXNOb3RaZXJvIHwgSlNDOjpPdmVycmlkZXNBbnlGb3JtT2ZHZXRQcm9wZXJ0eU5hbWVz
IHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBKU0M6Ok92ZXJyaWRlc1B1dCB8
IEpTQzo6T3ZlcnJpZGVzUHV0QnlJbmRleCB8IEpTQzo6UHJvaGliaXRzUHJvcGVydHlDYWNoaW5n
OwogcHJvdGVjdGVkOgogICAgIEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhj
ZXB0aW9uKEpTQzo6U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3QmLCBSZWY8VGVzdE5hbWVk
QW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uPiYmKTsKIApJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRl
cldpdGhJZGVudGlmaWVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVy
LmgJKHJldmlzaW9uIDI2ODY3NCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC02NCw3ICs2NCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgSlNDOjpJc29T
dWJzcGFjZSogc3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKTsKICAgICBzdGF0aWMgdm9pZCBh
bmFseXplSGVhcChKU0NlbGwqLCBKU0M6OkhlYXBBbmFseXplciYpOwogcHVibGljOgotICAgIHN0
YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVG
bGFncyB8IEpTQzo6R2V0T3duUHJvcGVydHlTbG90SXNJbXB1cmVGb3JQcm9wZXJ0eUFic2VuY2Ug
fCBKU0M6OkludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJ
c05vdFplcm8gfCBKU0M6Ok92ZXJyaWRlc0FueUZvcm1PZkdldFByb3BlcnR5TmFtZXMgfCBKU0M6
Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEpTQzo6UHJvaGliaXRzUHJvcGVydHlDYWNo
aW5nOworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNl
OjpTdHJ1Y3R1cmVGbGFncyB8IEpTQzo6R2V0T3duUHJvcGVydHlTbG90SXNJbXB1cmVGb3JQcm9w
ZXJ0eUFic2VuY2UgfCBKU0M6OkludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZl
bldoZW5MZW5ndGhJc05vdFplcm8gfCBKU0M6Ok92ZXJyaWRlc0FueUZvcm1PZkdldFByb3BlcnR5
TmFtZXMgfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEpTQzo6T3ZlcnJpZGVz
UHV0IHwgSlNDOjpPdmVycmlkZXNQdXRCeUluZGV4IHwgSlNDOjpQcm9oaWJpdHNQcm9wZXJ0eUNh
Y2hpbmc7CiBwcm90ZWN0ZWQ6CiAgICAgSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElk
ZW50aWZpZXIoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCYsIFJlZjxUZXN0TmFt
ZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXI+JiYpOwogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZp
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXIuaAkocmV2aXNpb24gMjY4Njc0KQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVy
Tm9JZGVudGlmaWVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTY0LDcgKzY0LDcgQEAgcHVibGljOgog
ICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0p
OwogICAgIHN0YXRpYyB2b2lkIGFuYWx5emVIZWFwKEpTQ2VsbCosIEpTQzo6SGVhcEFuYWx5emVy
Jik7CiBwdWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFn
cyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSlNDOjpHZXRPd25Qcm9wZXJ0eVNsb3RJc0ltcHVy
ZUZvclByb3BlcnR5QWJzZW5jZSB8IEpTQzo6SW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5
SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8IEpTQzo6T3ZlcnJpZGVzQW55Rm9ybU9mR2V0
UHJvcGVydHlOYW1lcyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgSlNDOjpQ
cm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmc7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBT
dHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSlNDOjpHZXRPd25Qcm9wZXJ0
eVNsb3RJc0ltcHVyZUZvclByb3BlcnR5QWJzZW5jZSB8IEpTQzo6SW50ZXJjZXB0c0dldE93blBy
b3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8IEpTQzo6T3ZlcnJpZGVz
QW55Rm9ybU9mR2V0UHJvcGVydHlOYW1lcyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlT
bG90IHwgSlNDOjpPdmVycmlkZXNQdXQgfCBKU0M6Ok92ZXJyaWRlc1B1dEJ5SW5kZXggfCBKU0M6
OlByb2hpYml0c1Byb3BlcnR5Q2FjaGluZzsKIHByb3RlY3RlZDoKICAgICBKU1Rlc3ROYW1lZFNl
dHRlck5vSWRlbnRpZmllcihKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0JiwgUmVm
PFRlc3ROYW1lZFNldHRlck5vSWRlbnRpZmllcj4mJik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0
aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24uaAkocmV2aXNpb24gMjY4Njc0
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVk
U2V0dGVyVGhyb3dpbmdFeGNlcHRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNjQsNyArNjQsNyBA
QCBwdWJsaWM6CiAgICAgc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1wbChK
U0M6OlZNJiB2bSk7CiAgICAgc3RhdGljIHZvaWQgYW5hbHl6ZUhlYXAoSlNDZWxsKiwgSlNDOjpI
ZWFwQW5hbHl6ZXImKTsKIHB1YmxpYzoKLSAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0
cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBKU0M6OkdldE93blByb3BlcnR5
U2xvdElzSW1wdXJlRm9yUHJvcGVydHlBYnNlbmNlIHwgSlNDOjpJbnRlcmNlcHRzR2V0T3duUHJv
cGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgSlNDOjpPdmVycmlkZXNB
bnlGb3JtT2ZHZXRQcm9wZXJ0eU5hbWVzIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNs
b3QgfCBKU0M6OlByb2hpYml0c1Byb3BlcnR5Q2FjaGluZzsKKyAgICBzdGF0aWMgY29uc3RleHBy
IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBKU0M6Okdl
dE93blByb3BlcnR5U2xvdElzSW1wdXJlRm9yUHJvcGVydHlBYnNlbmNlIHwgSlNDOjpJbnRlcmNl
cHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgSlND
OjpPdmVycmlkZXNBbnlGb3JtT2ZHZXRQcm9wZXJ0eU5hbWVzIHwgSlNDOjpPdmVycmlkZXNHZXRP
d25Qcm9wZXJ0eVNsb3QgfCBKU0M6Ok92ZXJyaWRlc1B1dCB8IEpTQzo6T3ZlcnJpZGVzUHV0QnlJ
bmRleCB8IEpTQzo6UHJvaGliaXRzUHJvcGVydHlDYWNoaW5nOwogcHJvdGVjdGVkOgogICAgIEpT
VGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24oSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUds
b2JhbE9iamVjdCYsIFJlZjxUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbj4mJik7CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1l
ZFNldHRlcldpdGhJZGVudGlmaWVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXIuaAko
cmV2aXNpb24gMjY4Njc0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXIuaAkod29ya2luZyBjb3B5KQpAQCAt
NjQsNyArNjQsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNw
YWNlRm9ySW1wbChKU0M6OlZNJiB2bSk7CiAgICAgc3RhdGljIHZvaWQgYW5hbHl6ZUhlYXAoSlND
ZWxsKiwgSlNDOjpIZWFwQW5hbHl6ZXImKTsKIHB1YmxpYzoKLSAgICBzdGF0aWMgY29uc3RleHBy
IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBKU0M6Okdl
dE93blByb3BlcnR5U2xvdElzSW1wdXJlRm9yUHJvcGVydHlBYnNlbmNlIHwgSlNDOjpJbnRlcmNl
cHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgSlND
OjpPdmVycmlkZXNBbnlGb3JtT2ZHZXRQcm9wZXJ0eU5hbWVzIHwgSlNDOjpPdmVycmlkZXNHZXRP
d25Qcm9wZXJ0eVNsb3QgfCBKU0M6OlByb2hpYml0c1Byb3BlcnR5Q2FjaGluZzsKKyAgICBzdGF0
aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxh
Z3MgfCBKU0M6OkdldE93blByb3BlcnR5U2xvdElzSW1wdXJlRm9yUHJvcGVydHlBYnNlbmNlIHwg
SlNDOjpJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNO
b3RaZXJvIHwgSlNDOjpPdmVycmlkZXNBbnlGb3JtT2ZHZXRQcm9wZXJ0eU5hbWVzIHwgSlNDOjpP
dmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBKU0M6Ok92ZXJyaWRlc1B1dCB8IEpTQzo6T3Zl
cnJpZGVzUHV0QnlJbmRleCB8IEpTQzo6UHJvaGliaXRzUHJvcGVydHlDYWNoaW5nOwogcHJvdGVj
dGVkOgogICAgIEpTVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXIoSlNDOjpTdHJ1Y3R1cmUq
LCBKU0RPTUdsb2JhbE9iamVjdCYsIFJlZjxUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllcj4m
Jik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4
ZWRHZXR0ZXIuaAkocmV2aXNpb24gMjY4Njc0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtNjQsNyArNjQsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIEpTQzo6SXNv
U3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSk7CiAgICAgc3RhdGljIHZvaWQg
YW5hbHl6ZUhlYXAoSlNDZWxsKiwgSlNDOjpIZWFwQW5hbHl6ZXImKTsKIHB1YmxpYzoKLSAgICBz
dGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJl
RmxhZ3MgfCBKU0M6OkdldE93blByb3BlcnR5U2xvdElzSW1wdXJlRm9yUHJvcGVydHlBYnNlbmNl
IHwgSlNDOjpJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3Ro
SXNOb3RaZXJvIHwgSlNDOjpPdmVycmlkZXNBbnlGb3JtT2ZHZXRQcm9wZXJ0eU5hbWVzIHwgSlND
OjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBKU0M6OlByb2hpYml0c1Byb3BlcnR5Q2Fj
aGluZzsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFz
ZTo6U3RydWN0dXJlRmxhZ3MgfCBKU0M6OkdldE93blByb3BlcnR5U2xvdElzSW1wdXJlRm9yUHJv
cGVydHlBYnNlbmNlIHwgSlNDOjpJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2
ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgSlNDOjpPdmVycmlkZXNBbnlGb3JtT2ZHZXRQcm9wZXJ0
eU5hbWVzIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBKU0M6Ok92ZXJyaWRl
c1B1dCB8IEpTQzo6T3ZlcnJpZGVzUHV0QnlJbmRleCB8IEpTQzo6UHJvaGliaXRzUHJvcGVydHlD
YWNoaW5nOwogcHJvdGVjdGVkOgogICAgIEpTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0
ZXIoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCYsIFJlZjxUZXN0TmFtZWRTZXR0
ZXJXaXRoSW5kZXhlZEdldHRlcj4mJik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5kU2V0
dGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXIuaAkocmV2aXNp
b24gMjY4Njc0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtNjQsNyArNjQsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIEpTQzo6SXNvU3Vic3BhY2Uq
IHN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSk7CiAgICAgc3RhdGljIHZvaWQgYW5hbHl6ZUhl
YXAoSlNDZWxsKiwgSlNDOjpIZWFwQW5hbHl6ZXImKTsKIHB1YmxpYzoKLSAgICBzdGF0aWMgY29u
c3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBK
U0M6OkdldE93blByb3BlcnR5U2xvdElzSW1wdXJlRm9yUHJvcGVydHlBYnNlbmNlIHwgSlNDOjpJ
bnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJv
IHwgSlNDOjpPdmVycmlkZXNBbnlGb3JtT2ZHZXRQcm9wZXJ0eU5hbWVzIHwgSlNDOjpPdmVycmlk
ZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBKU0M6OlByb2hpYml0c1Byb3BlcnR5Q2FjaGluZzsKKyAg
ICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0
dXJlRmxhZ3MgfCBKU0M6OkdldE93blByb3BlcnR5U2xvdElzSW1wdXJlRm9yUHJvcGVydHlBYnNl
bmNlIHwgSlNDOjpJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVu
Z3RoSXNOb3RaZXJvIHwgSlNDOjpPdmVycmlkZXNBbnlGb3JtT2ZHZXRQcm9wZXJ0eU5hbWVzIHwg
SlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBKU0M6Ok92ZXJyaWRlc1B1dCB8IEpT
Qzo6T3ZlcnJpZGVzUHV0QnlJbmRleCB8IEpTQzo6UHJvaGliaXRzUHJvcGVydHlDYWNoaW5nOwog
cHJvdGVjdGVkOgogICAgIEpTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0
ZXIoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCYsIFJlZjxUZXN0TmFtZWRTZXR0
ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRlcj4mJik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lPdmVy
cmlkZUJ1aWx0SW5zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMu
aAkocmV2aXNpb24gMjY4Njc0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMuaAkod29y
a2luZyBjb3B5KQpAQCAtNjQsNyArNjQsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIEpTQzo6SXNv
U3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSk7CiAgICAgc3RhdGljIHZvaWQg
YW5hbHl6ZUhlYXAoSlNDZWxsKiwgSlNDOjpIZWFwQW5hbHl6ZXImKTsKIHB1YmxpYzoKLSAgICBz
dGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJl
RmxhZ3MgfCBKU0M6OkdldE93blByb3BlcnR5U2xvdElzSW1wdXJlIHwgSlNDOjpJbnRlcmNlcHRz
R2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgSlNDOjpP
dmVycmlkZXNBbnlGb3JtT2ZHZXRQcm9wZXJ0eU5hbWVzIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Q
cm9wZXJ0eVNsb3QgfCBKU0M6OlByb2hpYml0c1Byb3BlcnR5Q2FjaGluZzsKKyAgICBzdGF0aWMg
Y29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3Mg
fCBKU0M6OkdldE93blByb3BlcnR5U2xvdElzSW1wdXJlIHwgSlNDOjpJbnRlcmNlcHRzR2V0T3du
UHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgSlNDOjpPdmVycmlk
ZXNBbnlGb3JtT2ZHZXRQcm9wZXJ0eU5hbWVzIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0
eVNsb3QgfCBKU0M6Ok92ZXJyaWRlc1B1dCB8IEpTQzo6T3ZlcnJpZGVzUHV0QnlJbmRleCB8IEpT
Qzo6UHJvaGliaXRzUHJvcGVydHlDYWNoaW5nOwogcHJvdGVjdGVkOgogICAgIEpTVGVzdE5hbWVk
U2V0dGVyV2l0aExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUds
b2JhbE9iamVjdCYsIFJlZjxUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5T3ZlcnJpZGVCdWlsdElu
cz4mJik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lVbmZvcmdlYWJsZVByb3BlcnRpZXMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFt
ZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVzLmgJKHJldmlzaW9uIDI2ODY3
NCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1l
ZFNldHRlcldpdGhMZWdhY3lVbmZvcmdlYWJsZVByb3BlcnRpZXMuaAkod29ya2luZyBjb3B5KQpA
QCAtNjQsNyArNjQsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1
YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSk7CiAgICAgc3RhdGljIHZvaWQgYW5hbHl6ZUhlYXAo
SlNDZWxsKiwgSlNDOjpIZWFwQW5hbHl6ZXImKTsKIHB1YmxpYzoKLSAgICBzdGF0aWMgY29uc3Rl
eHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBKU0M6
OkdldE93blByb3BlcnR5U2xvdElzSW1wdXJlRm9yUHJvcGVydHlBYnNlbmNlIHwgSlNDOjpIYXNT
dGF0aWNQcm9wZXJ0eVRhYmxlIHwgSlNDOjpJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJ
bmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgSlNDOjpPdmVycmlkZXNBbnlGb3JtT2ZHZXRQ
cm9wZXJ0eU5hbWVzIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBKU0M6OlBy
b2hpYml0c1Byb3BlcnR5Q2FjaGluZzsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0
cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBKU0M6OkdldE93blByb3BlcnR5
U2xvdElzSW1wdXJlRm9yUHJvcGVydHlBYnNlbmNlIHwgSlNDOjpIYXNTdGF0aWNQcm9wZXJ0eVRh
YmxlIHwgSlNDOjpJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVu
Z3RoSXNOb3RaZXJvIHwgSlNDOjpPdmVycmlkZXNBbnlGb3JtT2ZHZXRQcm9wZXJ0eU5hbWVzIHwg
SlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBKU0M6Ok92ZXJyaWRlc1B1dCB8IEpT
Qzo6T3ZlcnJpZGVzUHV0QnlJbmRleCB8IEpTQzo6UHJvaGliaXRzUHJvcGVydHlDYWNoaW5nOwog
cHJvdGVjdGVkOgogICAgIEpTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJv
cGVydGllcyhKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0JiwgUmVmPFRlc3ROYW1l
ZFNldHRlcldpdGhMZWdhY3lVbmZvcmdlYWJsZVByb3BlcnRpZXM+JiYpOwogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRo
TGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVzQW5kTGVnYWN5T3ZlcnJpZGVCdWlsdElucy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3ROYW1lZFNldHRlcldpdGhMZWdhY3lVbmZvcmdlYWJsZVByb3BlcnRpZXNBbmRMZWdhY3lPdmVy
cmlkZUJ1aWx0SW5zLmgJKHJldmlzaW9uIDI2ODY3NCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lVbmZvcmdlYWJs
ZVByb3BlcnRpZXNBbmRMZWdhY3lPdmVycmlkZUJ1aWx0SW5zLmgJKHdvcmtpbmcgY29weSkKQEAg
LTY0LDcgKzY0LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJz
cGFjZUZvckltcGwoSlNDOjpWTSYgdm0pOwogICAgIHN0YXRpYyB2b2lkIGFuYWx5emVIZWFwKEpT
Q2VsbCosIEpTQzo6SGVhcEFuYWx5emVyJik7CiBwdWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0ZXhw
ciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSlNDOjpH
ZXRPd25Qcm9wZXJ0eVNsb3RJc0ltcHVyZSB8IEpTQzo6SGFzU3RhdGljUHJvcGVydHlUYWJsZSB8
IEpTQzo6SW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElz
Tm90WmVybyB8IEpTQzo6T3ZlcnJpZGVzQW55Rm9ybU9mR2V0UHJvcGVydHlOYW1lcyB8IEpTQzo6
T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgSlNDOjpQcm9oaWJpdHNQcm9wZXJ0eUNhY2hp
bmc7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6
OlN0cnVjdHVyZUZsYWdzIHwgSlNDOjpHZXRPd25Qcm9wZXJ0eVNsb3RJc0ltcHVyZSB8IEpTQzo6
SGFzU3RhdGljUHJvcGVydHlUYWJsZSB8IEpTQzo6SW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xv
dEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8IEpTQzo6T3ZlcnJpZGVzQW55Rm9ybU9m
R2V0UHJvcGVydHlOYW1lcyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgSlND
OjpPdmVycmlkZXNQdXQgfCBKU0M6Ok92ZXJyaWRlc1B1dEJ5SW5kZXggfCBKU0M6OlByb2hpYml0
c1Byb3BlcnR5Q2FjaGluZzsKIHByb3RlY3RlZDoKICAgICBKU1Rlc3ROYW1lZFNldHRlcldpdGhM
ZWdhY3lVbmZvcmdlYWJsZVByb3BlcnRpZXNBbmRMZWdhY3lPdmVycmlkZUJ1aWx0SW5zKEpTQzo6
U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3QmLCBSZWY8VGVzdE5hbWVkU2V0dGVyV2l0aExl
Z2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllc0FuZExlZ2FjeU92ZXJyaWRlQnVpbHRJbnM+JiYpOwog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0UGx1
Z2luSW50ZXJmYWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdFBsdWdpbkludGVyZmFjZS5oCShyZXZpc2lvbiAyNjg2NzQpCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0UGx1Z2luSW50
ZXJmYWNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTY1LDcgKzY1LDcgQEAgcHVibGljOgogICAgIHN0
YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pOwogICAg
IHN0YXRpYyB2b2lkIGFuYWx5emVIZWFwKEpTQ2VsbCosIEpTQzo6SGVhcEFuYWx5emVyJik7CiBw
dWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJh
c2U6OlN0cnVjdHVyZUZsYWdzIHwgSlNDOjpJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJ
bmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgSlNDOjpPdmVycmlkZXNHZXRDYWxsRGF0YSB8
IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgSlNDOjpQcm9oaWJpdHNQcm9wZXJ0
eUNhY2hpbmc7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9
IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSlNDOjpJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90
QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgSlNDOjpPdmVycmlkZXNHZXRDYWxsRGF0
YSB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgSlNDOjpPdmVycmlkZXNQdXQg
fCBKU0M6Ok92ZXJyaWRlc1B1dEJ5SW5kZXggfCBKU0M6OlByb2hpYml0c1Byb3BlcnR5Q2FjaGlu
ZzsKIHByb3RlY3RlZDoKICAgICBKU1Rlc3RQbHVnaW5JbnRlcmZhY2UoSlNDOjpTdHJ1Y3R1cmUq
LCBKU0RPTUdsb2JhbE9iamVjdCYsIFJlZjxUZXN0UGx1Z2luSW50ZXJmYWNlPiYmKTsKIApJbmRl
eDogU291cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRpbWVfYXJyYXkuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9icmlkZ2UvcnVudGltZV9hcnJheS5oCShyZXZpc2lvbiAyNjg2NzQpCisr
KyBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcnVudGltZV9hcnJheS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zNSw3ICszNSw3IEBAIG5hbWVzcGFjZSBKU0MgewogY2xhc3MgUnVudGltZUFycmF5IGZpbmFs
IDogcHVibGljIEpTQXJyYXkgewogcHVibGljOgogICAgIHVzaW5nIEJhc2UgPSBKU0FycmF5Owot
ICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1
Y3R1cmVGbGFncyB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEludGVyY2VwdHNHZXRP
d25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8gfCBPdmVycmlkZXNB
bnlGb3JtT2ZHZXRQcm9wZXJ0eU5hbWVzOworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQg
U3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IE92ZXJyaWRlc0dldE93blBy
b3BlcnR5U2xvdCB8IEludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5M
ZW5ndGhJc05vdFplcm8gfCBPdmVycmlkZXNBbnlGb3JtT2ZHZXRQcm9wZXJ0eU5hbWVzIHwgT3Zl
cnJpZGVzUHV0IHwgT3ZlcnJpZGVzUHV0QnlJbmRleDsKICAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgbmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxs
VHlwZSwgSlNDOjpTdWJzcGFjZUFjY2Vzcz4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9y
dW50aW1lX29iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50
aW1lX29iamVjdC5oCShyZXZpc2lvbiAyNjg2NzQpCisrKyBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uv
cnVudGltZV9vYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsNyArMzcsNyBAQCBFeGNlcHRp
b24qIHRocm93UnVudGltZU9iamVjdEludmFsaWRBY2NlCiBjbGFzcyBXRUJDT1JFX0VYUE9SVCBS
dW50aW1lT2JqZWN0IDogcHVibGljIEpTTm9uRmluYWxPYmplY3QgewogcHVibGljOgogICAgIHVz
aW5nIEJhc2UgPSBKU05vbkZpbmFsT2JqZWN0OwotICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWdu
ZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IE92ZXJyaWRlc0dldE93
blByb3BlcnR5U2xvdCB8IE92ZXJyaWRlc0FueUZvcm1PZkdldFByb3BlcnR5TmFtZXMgfCBPdmVy
cmlkZXNHZXRDYWxsRGF0YTsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVy
ZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNs
b3QgfCBPdmVycmlkZXNBbnlGb3JtT2ZHZXRQcm9wZXJ0eU5hbWVzIHwgT3ZlcnJpZGVzUHV0IHwg
T3ZlcnJpZGVzR2V0Q2FsbERhdGE7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzRGVz
dHJ1Y3Rpb24gPSB0cnVlOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIEpTQzo6
U3Vic3BhY2VBY2Nlc3M+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvb2JqYy9vYmpjX3J1
bnRpbWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvb2JqYy9vYmpjX3J1
bnRpbWUuaAkocmV2aXNpb24gMjY4Njc0KQorKysgU291cmNlL1dlYkNvcmUvYnJpZGdlL29iamMv
b2JqY19ydW50aW1lLmgJKHdvcmtpbmcgY29weSkKQEAgLTkxLDcgKzkxLDcgQEAgcHJpdmF0ZToK
IGNsYXNzIE9iamNGYWxsYmFja09iamVjdEltcCBmaW5hbCA6IHB1YmxpYyBKU0Rlc3RydWN0aWJs
ZU9iamVjdCB7CiBwdWJsaWM6CiAgICAgdXNpbmcgQmFzZSA9IEpTRGVzdHJ1Y3RpYmxlT2JqZWN0
OwotICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpT
dHJ1Y3R1cmVGbGFncyB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRlc0dl
dENhbGxEYXRhOworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3Mg
PSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92
ZXJyaWRlc1B1dCB8IE92ZXJyaWRlc0dldENhbGxEYXRhOwogICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBuZWVkc0Rlc3RydWN0aW9uID0gdHJ1ZTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENl
bGxUeXBlLCBKU0M6OlN1YnNwYWNlQWNjZXNzPgpJbmRleDogU291cmNlL1dlYktpdC9DaGFuZ2VM
b2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2ODY3
NCkKKysrIFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEs
MTIgQEAKKzIwMjAtMTAtMTkgIEFsZXhleSBTaHZheWthICA8c2h2YWlrYWxlc2hAZ21haWwuY29t
PgorCisgICAgICAgIEludHJvZHVjZSBPdmVycmlkZXNQdXRbQnlJbmRleF0gdHlwZSBpbmZvIGZs
YWdzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTc5
MTYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdl
YlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9KU05QT2JqZWN0Lmg6CisKIDIwMjAtMTAtMTkgIFNh
aWQgQWJvdS1IYWxsYXdhICA8c2Fib3VoYWxsYXdhQGFwcGxlLmNvbT4KIAogICAgICAgICBbR1BV
IFByb2Nlc3NdIENsZWFuIHRoZSBEaXNwbGF5TGlzdCByZWNvcmRpbmcgb2YgdGhlIE5hdGl2ZUlt
YWdlCkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9KU05Q
T2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMv
TmV0c2NhcGUvSlNOUE9iamVjdC5oCShyZXZpc2lvbiAyNjg2NzQpCisrKyBTb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9KU05QT2JqZWN0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTQ0LDcgKzQ0LDcgQEAgY2xhc3MgTlBSdW50aW1lT2JqZWN0TWFwOwogY2xhc3MgSlNOUE9i
amVjdCBmaW5hbCA6IHB1YmxpYyBKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0IHsKIHB1YmxpYzoK
ICAgICB1c2luZyBCYXNlID0gSlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdDsKLSAgICBzdGF0aWMg
Y29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3Mg
fCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEpTQzo6T3ZlcnJpZGVzQW55Rm9y
bU9mR2V0UHJvcGVydHlOYW1lcyB8IEpTQzo6T3ZlcnJpZGVzR2V0Q2FsbERhdGE7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZs
YWdzIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBKU0M6Ok92ZXJyaWRlc0Fu
eUZvcm1PZkdldFByb3BlcnR5TmFtZXMgfCBKU0M6Ok92ZXJyaWRlc1B1dCB8IEpTQzo6T3ZlcnJp
ZGVzR2V0Q2FsbERhdGE7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgSlNDOjpT
dWJzcGFjZUFjY2Vzcz4KICAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3Io
SlNDOjpWTSYgdm0pCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>417532</attachid>
            <date>2021-01-13 08:04:08 -0800</date>
            <delta_ts>2021-01-18 12:40:04 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>bug-217916-20210113180406.patch</filename>
            <type>text/plain</type>
            <size>84121</size>
            <attacher name="Alexey Shvayka">ashvayka</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyNzE0NDApCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDE0IEBACisyMDIxLTAxLTEzICBBbGV4ZXkgU2h2YXlrYSAgPHNodmFpa2FsZXNo
QGdtYWlsLmNvbT4KKworICAgICAgICBJbnRyb2R1Y2UgT3ZlcnJpZGVzUHV0W0J5SW5kZXhdIHR5
cGUgaW5mbyBmbGFncworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjE3OTE2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiBzdHJlc3MvY3VzdG9tLWdldC1zZXQtcHJvdG8tY2hhaW4tcHV0LmpzOgorICAgICAg
ICAqIHN0cmVzcy9wcm90b3R5cGUtY2hhaW4tcHV0LmpzOiBBZGRlZC4KKyAgICAgICAgKiBzdHJl
c3MvcmVmbGVjdC1zZXQuanM6CisKIDIwMjEtMDEtMTIgIFJvc3MgS2lyc2xpbmcgIDxyb3NzLmtp
cnNsaW5nQHNvbnkuY29tPgogCiAgICAgICAgIFtKU0NdIENsYXNzIG5hbWUgJ2F3YWl0JyBpcyB2
YWxpZCBpbiBzeW5jIGNvbnRleHQKSW5kZXg6IEpTVGVzdHMvc3RyZXNzL2N1c3RvbS1nZXQtc2V0
LXByb3RvLWNoYWluLXB1dC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0cmVzcy9jdXN0b20t
Z2V0LXNldC1wcm90by1jaGFpbi1wdXQuanMJKHJldmlzaW9uIDI3MTM0MikKKysrIEpTVGVzdHMv
c3RyZXNzL2N1c3RvbS1nZXQtc2V0LXByb3RvLWNoYWluLXB1dC5qcwkod29ya2luZyBjb3B5KQpA
QCAtMTEsNyArMTEsNyBAQCBmdW5jdGlvbiBzaG91bGRUaHJvdyhmdW5jLCBleHBlY3RlZEVycm9y
CiAgICAgICAgIGZ1bmMoKTsKICAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgICBlcnJvclRo
cm93biA9IHRydWU7Ci0gICAgICAgIGlmIChTdHJpbmcoZXJyb3IpICE9PSBleHBlY3RlZEVycm9y
KQorICAgICAgICBpZiAoIVN0cmluZyhlcnJvcikuc3RhcnRzV2l0aChleHBlY3RlZEVycm9yKSkK
ICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQmFkIGVycm9yOiAke2Vycm9yfWApOwogICAg
IH0KICAgICBpZiAoIWVycm9yVGhyb3duKQpAQCAtMzcsOCArMzcsOCBAQCBmdW5jdGlvbiBnZXRP
YmplY3RzKCkgewogICAgICAgICAuLi5wcmltaXRpdmVzLm1hcChPYmplY3QpLAogICAgICAgICBP
YmplY3QuY3JlYXRlKGN1c3RvbVRlc3RHZXR0ZXJTZXR0ZXIpLAogICAgICAgICBPYmplY3QuY3Jl
YXRlKE9iamVjdC5jcmVhdGUoY3VzdG9tVGVzdEdldHRlclNldHRlcikpLAotICAgICAgICAvLyBG
SVhNRTogb3JkaW5hcnlTZXRTbG93KCkgc2hvdWxkIGhhbmRsZSBDdXN0b217QWNjZXNzb3IsVmFs
dWV9IGRlc2NyaXB0b3JzLgotICAgICAgICAvLyBuZXcgUHJveHkoY3VzdG9tVGVzdEdldHRlclNl
dHRlciwge30pLAorICAgICAgICBPYmplY3QuY3JlYXRlKG5ldyBQcm94eShjdXN0b21UZXN0R2V0
dGVyU2V0dGVyLCB7fSkpLAorICAgICAgICBPYmplY3QuY3JlYXRlKCR2bS5jcmVhdGVQcm94eShj
dXN0b21UZXN0R2V0dGVyU2V0dGVyKSksCiAgICAgXTsKIH0KIApAQCAtMTIxLDcgKzEyMSw3IEBA
IGZ1bmN0aW9uIGdldEJhc2VzKCkgewogICAgIGZvciAobGV0IG9iamVjdCBvZiBnZXRPYmplY3Rz
KCkpIHsKICAgICAgICAgT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zKG9iamVjdCk7CiAgICAgICAg
IGZvciAobGV0IGkgPSAwOyBpIDwgMTAwOyArK2kpIHsKLSAgICAgICAgICAgIHNob3VsZFRocm93
KCgpID0+IHsgb2JqZWN0LmN1c3RvbVZhbHVlR2xvYmFsT2JqZWN0ID0ge307IH0sICJUeXBlRXJy
b3I6IEF0dGVtcHRlZCB0byBhc3NpZ24gdG8gcmVhZG9ubHkgcHJvcGVydHkuIik7CisgICAgICAg
ICAgICBzaG91bGRUaHJvdygoKSA9PiB7IG9iamVjdC5jdXN0b21WYWx1ZUdsb2JhbE9iamVjdCA9
IHt9OyB9LCAiVHlwZUVycm9yIik7CiAgICAgICAgICAgICBhc3NlcnQoIVJlZmxlY3Quc2V0KG9i
amVjdCwgImN1c3RvbVZhbHVlR2xvYmFsT2JqZWN0Iiwge30pKTsKICAgICAgICAgfQogICAgIH0K
SW5kZXg6IEpTVGVzdHMvc3RyZXNzL3Byb3RvdHlwZS1jaGFpbi1wdXQuanMKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gSlNUZXN0cy9zdHJlc3MvcHJvdG90eXBlLWNoYWluLXB1dC5qcwkobm9uZXhpc3RlbnQpCisr
KyBKU1Rlc3RzL3N0cmVzcy9wcm90b3R5cGUtY2hhaW4tcHV0LmpzCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMjMzIEBACisoYXN5bmMgZnVuY3Rpb24oKSB7CisKK2NvbnN0IGRlc2NSZWFkT25s
eSA9IHt2YWx1ZTogMSwgd3JpdGFibGU6IGZhbHNlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1
cmFibGU6IHRydWV9OworY29uc3QgZGVzY1JlYWRXcml0ZSA9IHt2YWx1ZTogMiwgd3JpdGFibGU6
IHRydWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZX07Citjb25zdCBtb2R1
bGVOYW1lc3BhY2VPYmplY3QgPSBhd2FpdCBpbXBvcnQoIi4vcmVzb3VyY2VzL21vZHVsZS1uYW1l
c3BhY2UtYWNjZXNzLmpzIik7Citjb25zdCByYW5kVmFsID0gMzk2NTYwNDkyNzsgLy8gPD0gMiAq
KiAzMiAtIDEKKworY29uc3QgdGVzdENhc2VzT2JqZWN0cyA9IFsKKyAgeworICAgIG5hbWU6ICJP
YmplY3QiLAorICAgIGdldE9iamVjdDogKCkgPT4gT2JqZWN0LmNyZWF0ZShudWxsLCB7bmFtZTog
ZGVzY1JlYWRPbmx5fSksCisgICAgcmVhZE9ubHlLZXlzOiBbIm5hbWUiXSwKKyAgfSwKKyAgewor
ICAgIG5hbWU6ICJBcnJheSAobm9uLXdyaXRhYmxlIC5sZW5ndGgpIiwKKyAgICBnZXRPYmplY3Q6
ICgpID0+IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShbXSwgImxlbmd0aCIsIHt3cml0YWJsZTogZmFs
c2V9KSwKKyAgICByZWFkT25seUtleXM6IFsibGVuZ3RoIl0sCisgIH0sCisgIHsKKyAgICBuYW1l
OiAiRnVuY3Rpb24gKHN0cmljdCkiLAorICAgIGdldE9iamVjdDogKCkgPT4gZnVuY3Rpb24oKSB7
ICJ1c2Ugc3RyaWN0IjsgfSwKKyAgICByZWFkT25seUtleXM6IFsibGVuZ3RoIiwgIm5hbWUiXSwK
KyAgfSwKKyAgeworICAgIG5hbWU6ICJGdW5jdGlvbiAobm9uLXN0cmljdCkiLAorICAgIGdldE9i
amVjdDogKCkgPT4gZnVuY3Rpb24oKSB7fSwKKyAgICByZWFkT25seUtleXM6IFsiYXJndW1lbnRz
IiwgImNhbGxlciIsICJsZW5ndGgiLCAibmFtZSJdLAorICB9LAorICB7CisgICAgbmFtZTogIlJl
Z0V4cCAobm9uLXdyaXRhYmxlIC5sYXN0SW5kZXgpIiwKKyAgICBnZXRPYmplY3Q6ICgpID0+IE9i
amVjdC5kZWZpbmVQcm9wZXJ0eSgvKD86KS9nLCAibGFzdEluZGV4Iiwge3dyaXRhYmxlOiBmYWxz
ZX0pLAorICAgIHJlYWRPbmx5S2V5czogWyJsYXN0SW5kZXgiXSwKKyAgfSwKKyAgeworICAgIG5h
bWU6ICJTdHJpbmcgKG9iamVjdCkiLAorICAgIGdldE9iamVjdDogKCkgPT4gbmV3IFN0cmluZygi
IiksCisgICAgcmVhZE9ubHlLZXlzOiBbImxlbmd0aCJdLAorICB9LAorICB7CisgICAgbmFtZTog
IlByb3h5T2JqZWN0ICh3aXRob3V0IFtbU2V0XV0gaGFuZGxlcikiLAorICAgIGdldE9iamVjdDog
KCkgPT4gbmV3IFByb3h5KE9iamVjdC5jcmVhdGUobnVsbCwge25hbWU6IGRlc2NSZWFkT25seSwg
bGVuZ3RoOiBkZXNjUmVhZFdyaXRlfSksIHt9KSwKKyAgICByZWFkT25seUtleXM6IFsibmFtZSJd
LAorICB9LAorICB7CisgICAgbmFtZTogIlByb3h5T2JqZWN0ICh3aXRoIFtbU2V0XV0gaGFuZGxl
cikiLAorICAgIGdldE9iamVjdDogKCkgPT4gbmV3IFByb3h5KE9iamVjdC5jcmVhdGUobnVsbCwg
e25hbWU6IGRlc2NSZWFkT25seSwgbGVuZ3RoOiBkZXNjUmVhZFdyaXRlfSksIHt9KSwKKyAgICBy
ZWFkT25seUtleXM6IFsibmFtZSJdLAorICB9LAorICB7CisgICAgbmFtZTogIkpTUHJveHkiLAor
ICAgIGdldE9iamVjdDogKCkgPT4gJHZtLmNyZWF0ZVByb3h5KE9iamVjdC5jcmVhdGUobnVsbCwg
e25hbWU6IGRlc2NSZWFkV3JpdGUsIGxlbmd0aDogZGVzY1JlYWRPbmx5fSkpLAorICAgIHJlYWRP
bmx5S2V5czogWyJsZW5ndGgiXSwKKyAgfSwKKyAgeworICAgIG5hbWU6ICJNb2R1bGUgTmFtZXNw
YWNlIE9iamVjdCIsCisgICAgZ2V0T2JqZWN0OiAoKSA9PiBtb2R1bGVOYW1lc3BhY2VPYmplY3Qs
CisgICAgcmVhZE9ubHlLZXlzOiBbImNvY29hIiwgImxhc3RJbmRleCJdLAorICAgIGlzSW1tdXRh
YmxlUHJvdG90eXBlOiB0cnVlLAorICB9LAorICB7CisgICAgbmFtZTogIkdsb2JhbCBPYmplY3Qi
LAorICAgIGdldE9iamVjdDogKCkgPT4gZ2xvYmFsVGhpcywKKyAgICByZWFkT25seUtleXM6IFsi
dW5kZWZpbmVkIiwgIk5hTiIsICJJbmZpbml0eSJdLAorICAgIGlzSW1tdXRhYmxlUHJvdG90eXBl
OiB0cnVlLAorICB9LAorXTsKKworZm9yIChsZXQgdCBvZiB0ZXN0Q2FzZXNPYmplY3RzKSB7Cisg
IGFzc2VydFNldEZhaWxzKAorICAgIE9iamVjdC5jcmVhdGUodC5nZXRPYmplY3QoKSksCisgICAg
dC5yZWFkT25seUtleXMsCisgICAgYHt9IDwgJHt0Lm5hbWV9YCwKKyAgKTsKK30KKworZm9yIChs
ZXQgdCBvZiB0ZXN0Q2FzZXNPYmplY3RzKSB7CisgIGFzc2VydFNldEZhaWxzKAorICAgIE9iamVj
dC5jcmVhdGUoT2JqZWN0LmNyZWF0ZSh0LmdldE9iamVjdCgpKSksCisgICAgdC5yZWFkT25seUtl
eXMsCisgICAgYHt9IDwge30gPCAke3QubmFtZX1gLAorICApOworfQorCitmb3IgKGxldCB0IG9m
IHRlc3RDYXNlc09iamVjdHMpIHsKKyAgaWYgKHQuaXNJbW11dGFibGVQcm90b3R5cGUpIGNvbnRp
bnVlOworCisgIGFzc2VydFNldEZhaWxzKAorICAgIE9iamVjdC5jcmVhdGUoT2JqZWN0LnNldFBy
b3RvdHlwZU9mKHQuZ2V0T2JqZWN0KCksIG51bGwpKSwKKyAgICB0LnJlYWRPbmx5S2V5cywKKyAg
ICBge30gPCAke3QubmFtZX0gPCBudWxsYCwKKyAgKTsKK30KKworZm9yIChsZXQgdCBvZiB0ZXN0
Q2FzZXNPYmplY3RzKSB7CisgIGlmICh0LmlzSW1tdXRhYmxlUHJvdG90eXBlKSBjb250aW51ZTsK
KworICBhc3NlcnRTZXRGYWlscygKKyAgICBPYmplY3QuY3JlYXRlKE9iamVjdC5zZXRQcm90b3R5
cGVPZih0LmdldE9iamVjdCgpLCBtYWtlU2V0dGVyc09iamVjdCh0LnJlYWRPbmx5S2V5cykpKSwK
KyAgICB0LnJlYWRPbmx5S2V5cywKKyAgICBge30gPCAke3QubmFtZX0gPCB7Li4uc2V0dGVyc31g
LAorICApOworfQorCitmb3IgKGxldCB0MSBvZiB0ZXN0Q2FzZXNPYmplY3RzKSB7CisgIGlmICh0
MS5pc0ltbXV0YWJsZVByb3RvdHlwZSkgY29udGludWU7CisKKyAgZm9yIChsZXQgdDIgb2YgdGVz
dENhc2VzT2JqZWN0cykgeworICAgIGFzc2VydFNldEZhaWxzKAorICAgICAgT2JqZWN0LmNyZWF0
ZShPYmplY3Quc2V0UHJvdG90eXBlT2YodDEuZ2V0T2JqZWN0KCksIHQyLmdldE9iamVjdCgpKSks
CisgICAgICB0MS5yZWFkT25seUtleXMsCisgICAgICBge30gPCAke3QxLm5hbWV9IDwgJHt0Mi5u
YW1lfWAsCisgICAgKTsKKyAgfQorfQorCitjb25zdCB0ZXN0Q2FzZXNQcmltaXRpdmVzID0gWwor
ICB7CisgICAgbmFtZTogIkJvb2xlYW4gKHByaW1pdGl2ZSkiLAorICAgIHZhbHVlOiB0cnVlLAor
ICAgIHJlYWRPbmx5S2V5czogW10sCisgIH0sCisgIHsKKyAgICBuYW1lOiAiTnVtYmVyIChwcmlt
aXRpdmUpIiwKKyAgICB2YWx1ZTogMy4xNCwKKyAgICByZWFkT25seUtleXM6IFtdLAorICB9LAor
ICB7CisgICAgbmFtZTogIlN0cmluZyAocHJpbWl0aXZlKSIsCisgICAgdmFsdWU6ICIiLAorICAg
IHJlYWRPbmx5S2V5czogWyJsZW5ndGgiXSwKKyAgfSwKKyAgeworICAgIG5hbWU6ICJTeW1ib2wg
KHByaW1pdGl2ZSkiLAorICAgIHZhbHVlOiBTeW1ib2woKSwKKyAgICByZWFkT25seUtleXM6IFsi
ZGVzY3JpcHRpb24iLCBTeW1ib2wudG9TdHJpbmdUYWcsIFN5bWJvbC50b1ByaW1pdGl2ZV0sCisg
IH0sCisgIHsKKyAgICBuYW1lOiAiQmlnSW50IChwcmltaXRpdmUpIiwKKyAgICB2YWx1ZTogMW4s
CisgICAgcmVhZE9ubHlLZXlzOiBbU3ltYm9sLnRvU3RyaW5nVGFnXSwKKyAgfSwKK107CisKK2Zv
ciAobGV0IHRQIG9mIHRlc3RDYXNlc1ByaW1pdGl2ZXMpIHsKKyAgbGV0IHByb3RvMSA9IE9iamVj
dC5nZXRQcm90b3R5cGVPZih0UC52YWx1ZSk7CisKKyAgZm9yIChsZXQgdE8gb2YgdGVzdENhc2Vz
T2JqZWN0cykgeworICAgIGlmICh0Ty5pc0ltbXV0YWJsZVByb3RvdHlwZSkgY29udGludWU7CisK
KyAgICBsZXQgcHJvdG8zID0gbWFrZVNldHRlcnNPYmplY3QodE8ucmVhZE9ubHlLZXlzKTsKKyAg
ICBsZXQgcHJvdG8yID0gdE8uZ2V0T2JqZWN0KCk7CisgICAgT2JqZWN0LnNldFByb3RvdHlwZU9m
KHByb3RvMiwgcHJvdG8zKTsKKyAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YocHJvdG8xLCBwcm90
bzIpOworCisgICAgYXNzZXJ0U2V0RmFpbHMoCisgICAgICB0UC52YWx1ZSwKKyAgICAgIFsuLi50
UC5yZWFkT25seUtleXMsIC4uLnRPLnJlYWRPbmx5S2V5c10sCisgICAgICBgJHt0UC5uYW1lfSA8
ICR7dE8ubmFtZX0gPCB7Li4uc2V0dGVyc31gLAorICAgICk7CisgIH0KK30KKworeworICBsZXQg
cmVhZE9ubHlLZXlzID0gWyJmb28iLCAiYmFyIl07CisgIGxldCBwcm94eSA9IG5ldyBQcm94eSh7
fSwge3NldDogKF90LCBrZXkpID0+ICFyZWFkT25seUtleXMuaW5jbHVkZXMoa2V5KX0pOworICBs
ZXQgYmFzZSA9IE9iamVjdC5jcmVhdGUocHJveHkpOworCisgIGZvciAobGV0IGtleSBvZiByZWFk
T25seUtleXMpIHsKKyAgICBzaG91bGRUaHJvdygKKyAgICAgICgpID0+IHsgInVzZSBzdHJpY3Qi
OyBiYXNlW2tleV0gPSByYW5kVmFsOyB9LAorICAgICAgYFR5cGVFcnJvcjogUHJveHkgb2JqZWN0
J3MgJ3NldCcgdHJhcCByZXR1cm5lZCBmYWxzeSB2YWx1ZSBmb3IgcHJvcGVydHkgJyR7a2V5fSdg
LAorICAgICk7CisKKyAgICBzaG91bGRCZShSZWZsZWN0LnNldChiYXNlLCBrZXksIHJhbmRWYWwp
LCBmYWxzZSk7CisgICAgc2hvdWxkQmUoUmVmbGVjdC5zZXQoYmFzZSwga2V5LCByYW5kVmFsLCB7
fSksIGZhbHNlKTsKKyAgfQorfQorCitmdW5jdGlvbiBhc3NlcnRTZXRGYWlscyhiYXNlLCByZWFk
T25seUtleXMsIHRlc3ROYW1lKSB7CisgIGZvciAobGV0IGtleSBvZiByZWFkT25seUtleXMpIHsK
KyAgICBsZXQgbXNnID0gYFRlc3Q6ICR7dGVzdE5hbWV9LiBLZXk6ICR7U3RyaW5nKGtleSl9LmA7
CisKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IDEwMDsgKytpKSB7CisgICAgICBzaG91bGRUaHJv
dygKKyAgICAgICAgKCkgPT4geyAidXNlIHN0cmljdCI7IGJhc2Vba2V5XSA9IHJhbmRWYWw7IH0s
CisgICAgICAgICJUeXBlRXJyb3I6IEF0dGVtcHRlZCB0byBhc3NpZ24gdG8gcmVhZG9ubHkgcHJv
cGVydHkuIiwKKyAgICAgICAgbXNnLAorICAgICAgKTsKKworICAgICAgc2hvdWxkQmUoUmVmbGVj
dC5zZXQoT2JqZWN0KGJhc2UpLCBrZXksIHJhbmRWYWwpLCBmYWxzZSwgbXNnKTsKKyAgICAgIHNo
b3VsZEJlKFJlZmxlY3Quc2V0KE9iamVjdChiYXNlKSwga2V5LCByYW5kVmFsLCB7fSksIGZhbHNl
LCBtc2cpOworICAgIH0KKyAgfQorfQorCitmdW5jdGlvbiBzaG91bGRCZShhY3R1YWwsIGV4cGVj
dGVkLCBtc2cgPSAiIikgeworICBpZiAoYWN0dWFsICE9PSBleHBlY3RlZCkKKyAgICB0aHJvdyBu
ZXcgRXJyb3IoYEJhZCB2YWx1ZTogJHthY3R1YWx9LiAke21zZ31gKTsKK30KKworZnVuY3Rpb24g
c2hvdWxkVGhyb3coZnVuYywgZXJyb3JNZXNzYWdlLCBtc2cgPSAiIikgeworICBsZXQgZXJyb3JU
aHJvd24gPSBmYWxzZTsKKyAgdHJ5IHsKKyAgICBmdW5jKCk7CisgIH0gY2F0Y2ggKGVycm9yKSB7
CisgICAgZXJyb3JUaHJvd24gPSB0cnVlOworICAgIGlmIChTdHJpbmcoZXJyb3IpICE9PSBlcnJv
ck1lc3NhZ2UpCisgICAgICB0aHJvdyBuZXcgRXJyb3IoYEJhZCBlcnJvcjogJHtlcnJvcn0uICR7
bXNnfWApOworICB9CisgIGlmICghZXJyb3JUaHJvd24pCisgICAgdGhyb3cgbmV3IEVycm9yKGBE
aWRuJ3QgdGhyb3chICR7bXNnfWApOworfQorCitmdW5jdGlvbiBtYWtlU2V0dGVyc09iamVjdChr
ZXlzKSB7CisgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKG51bGwpOworCisgIGZvciAobGV0IGtl
eSBvZiBrZXlzKSB7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7CisgICAg
ICBnZXQoKSB7IHRocm93IG5ldyBFcnJvcihgJyR7a2V5fScgZ2V0dGVyIHNob3VsZCBiZSB1bnJl
YWNoYWJsZSFgKTsgfSwKKyAgICAgIHNldChfdmFsdWUpIHsgdGhyb3cgbmV3IEVycm9yKGAnJHtr
ZXl9JyBzZXR0ZXIgc2hvdWxkIGJlIHVucmVhY2hhYmxlIWApOyB9LAorICAgICAgZW51bWVyYWJs
ZTogdHJ1ZSwKKyAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKKyAgICB9KTsKKyAgfQorCisgIHJl
dHVybiBvYmo7Cit9CisKK30pKCkuY2F0Y2goZXJyID0+IHsKKyAgcHJpbnQoYCEhISBFUlJPUjog
JHtlcnJ9XG4ke2Vyci5zdGFja31gKTsKK30pOworCitkcmFpbk1pY3JvdGFza3MoKTsKSW5kZXg6
IEpTVGVzdHMvc3RyZXNzL3JlZmxlY3Qtc2V0LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvc3Ry
ZXNzL3JlZmxlY3Qtc2V0LmpzCShyZXZpc2lvbiAyNzEzNDIpCisrKyBKU1Rlc3RzL3N0cmVzcy9y
ZWZsZWN0LXNldC5qcwkod29ya2luZyBjb3B5KQpAQCAtMTEyNiwxMSArMTEyNiw2IEBAIHZhciBz
eW1ib2wgPSBTeW1ib2woKTsKICAgICAgICAgc2hvdWxkQmUoUmVmbGVjdC5nZXQoUmVnRXhwLCAn
bXVsdGlsaW5lJyksIHRydWUpOwogICAgICAgICBzaG91bGRCZShSZWZsZWN0LnNldChSZWdFeHAs
ICdtdWx0aWxpbmUnLCAwKSwgdHJ1ZSk7CiAgICAgICAgIHNob3VsZEJlKFJlZmxlY3QuZ2V0KFJl
Z0V4cCwgJ211bHRpbGluZScpLCBmYWxzZSk7Ci0KLSAgICAgICAgdmFyIHJlY2VpdmVyID0ge307
Ci0gICAgICAgIHNob3VsZEJlKFJlZmxlY3Quc2V0KFJlZ0V4cCwgJ211bHRpbGluZScsICdDYXBw
dWNjaW5vJywgcmVjZWl2ZXIpLCB0cnVlKTsKLSAgICAgICAgc2hvdWxkQmUoUmVmbGVjdC5nZXQo
cmVjZWl2ZXIsICdtdWx0aWxpbmUnKSwgJ0NhcHB1Y2Npbm8nKTsKLSAgICAgICAgc2hvdWxkQmUo
UmVmbGVjdC5nZXQoUmVnRXhwLCAnbXVsdGlsaW5lJyksIGZhbHNlKTsKICAgICB9CiAKICAgICBm
dW5jdGlvbiB0ZXN0MigpIHsKQEAgLTExMzksMTEgKzExMzQsNiBAQCB2YXIgc3ltYm9sID0gU3lt
Ym9sKCk7CiAgICAgICAgIHNob3VsZEJlKFJlZmxlY3QuZ2V0KFJlZ0V4cCwgJ211bHRpbGluZScp
LCB0cnVlKTsKICAgICAgICAgc2hvdWxkQmUoUmVmbGVjdC5zZXQoUmVnRXhwLCAnbXVsdGlsaW5l
JywgMCksIHRydWUpOwogICAgICAgICBzaG91bGRCZShSZWZsZWN0LmdldChSZWdFeHAsICdtdWx0
aWxpbmUnKSwgZmFsc2UpOwotCi0gICAgICAgIHZhciByZWNlaXZlciA9IHt9OwotICAgICAgICBz
aG91bGRCZShSZWZsZWN0LnNldChSZWdFeHAsICdtdWx0aWxpbmUnLCAnQ2FwcHVjY2lubycsIHJl
Y2VpdmVyKSwgdHJ1ZSk7Ci0gICAgICAgIHNob3VsZEJlKFJlZmxlY3QuZ2V0KHJlY2VpdmVyLCAn
bXVsdGlsaW5lJyksICdDYXBwdWNjaW5vJyk7Ci0gICAgICAgIHNob3VsZEJlKFJlZmxlY3QuZ2V0
KFJlZ0V4cCwgJ211bHRpbGluZScpLCBmYWxzZSk7CiAgICAgfQogCiAgICAgZnVuY3Rpb24gdGVz
dDMoKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI3MTM0MykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyAr
MSw4MiBAQAorMjAyMS0wMS0xMyAgQWxleGV5IFNodmF5a2EgIDxzaHZhaWthbGVzaEBnbWFpbC5j
b20+CisKKyAgICAgICAgSW50cm9kdWNlIE92ZXJyaWRlc1B1dFtCeUluZGV4XSB0eXBlIGluZm8g
ZmxhZ3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIx
NzkxNgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
Q01ha2VMaXN0cy50eHQ6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvajoKKyAgICAgICAgKiBqaXQvUmVwYXRjaC5jcHA6CisgICAgICAgICogcnVudGlt
ZS9DbGFzc0luZm8uaDoKKyAgICAgICAgKiBydW50aW1lL0N1c3RvbUdldHRlclNldHRlci5jcHA6
CisgICAgICAgIChKU0M6OmNhbGxDdXN0b21TZXR0ZXIpOiBEZWxldGVkLgorICAgICAgICAqIHJ1
bnRpbWUvQ3VzdG9tR2V0dGVyU2V0dGVyLmg6CisgICAgICAgICogcnVudGltZS9HZW5lcmljQXJn
dW1lbnRzSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpHZW5lcmljQXJndW1lbnRzPFR5cGU+Ojpw
dXQpOgorICAgICAgICAqIHJ1bnRpbWUvSlNBcnJheS5jcHA6CisgICAgICAgIChKU0M6OkpTQXJy
YXk6OnB1dCk6CisgICAgICAgICogcnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5jcHA6CisgICAg
ICAgIChKU0M6OkpTQXJyYXlCdWZmZXJWaWV3OjpwdXQpOiBEZWxldGVkLgorICAgICAgICAqIHJ1
bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuaDoKKyAgICAgICAgKiBydW50aW1lL0pTQ0pTVmFsdWUu
Y3BwOgorICAgICAgICAoSlNDOjpKU1ZhbHVlOjpwdXRUb1ByaW1pdGl2ZSk6CisgICAgICAgICog
cnVudGltZS9KU0NlbGwuY3BwOgorICAgICAgICAoSlNDOjpKU0NlbGw6OmRvUHV0UHJvcGVydHlT
ZWN1cml0eUNoZWNrKTogRGVsZXRlZC4KKyAgICAgICAgKiBydW50aW1lL0pTQ2VsbC5oOgorICAg
ICAgICAqIHJ1bnRpbWUvSlNGdW5jdGlvbi5jcHA6CisgICAgICAgIChKU0M6OkpTRnVuY3Rpb246
OnB1dCk6CisgICAgICAgICogcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlldy5oOgorICAg
ICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpKU0dsb2Jh
bE9iamVjdDo6cHV0KToKKyAgICAgICAgKiBydW50aW1lL0pTTW9kdWxlTmFtZXNwYWNlT2JqZWN0
Lmg6CisgICAgICAgICogcnVudGltZS9KU09iamVjdC5jcHA6CisgICAgICAgIChKU0M6OkpTT2Jq
ZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3QpOgorICAgICAgICAoSlNDOjpvcmRpbmFyeVNldFNsb3cp
OgorICAgICAgICAoSlNDOjpvcmRpbmFyeVNldERlZmluZVByb3BlcnR5T25SZWNlaXZlclNsb3cp
OgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cHV0SW5saW5lTm9uSW5kZXhTbG93KToKKyAgICAg
ICAgKEpTQzo6SlNPYmplY3Q6OmRvUHV0UHJvcGVydHlTZWN1cml0eUNoZWNrKTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1dElubGluZVNsb3cpOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpKU09iamVjdDo6cHJvdG90eXBlQ2hhaW5NYXlJbnRlcmNlcHRTdG9yZVRvKTogRGVs
ZXRlZC4KKyAgICAgICAgKiBydW50aW1lL0pTT2JqZWN0Lmg6CisgICAgICAgIChKU0M6OkpTT2Jq
ZWN0OjpwdXRCeUluZGV4SW5saW5lKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmZpbGxDdXN0
b21HZXR0ZXJQcm9wZXJ0eVNsb3QpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Z2V0T3duUHJv
cGVydHlTbG90KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmRvUHV0UHJvcGVydHlTZWN1cml0
eUNoZWNrKTogRGVsZXRlZC4KKyAgICAgICAgKiBydW50aW1lL0pTT2JqZWN0SW5saW5lcy5oOgor
ICAgICAgICAoSlNDOjpKU09iamVjdDo6Y2FuUGVyZm9ybUZhc3RQdXRJbmxpbmVFeGNsdWRpbmdQ
cm90byk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpwdXRJbmxpbmVGb3JKU09iamVjdCk6Cisg
ICAgICAgICogcnVudGltZS9KU1Byb3h5Lmg6CisgICAgICAgICogcnVudGltZS9KU1R5cGVJbmZv
Lmg6CisgICAgICAgIChKU0M6OlR5cGVJbmZvOjpnZXRPd25Qcm9wZXJ0eVNsb3RJc0ltcHVyZUZv
clByb3BlcnR5QWJzZW5jZSBjb25zdCk6CisgICAgICAgIChKU0M6OlR5cGVJbmZvOjppbnRlcmNl
cHRzUHV0RXZlbldoZW5SZWNlaXZlcklzQWx0ZXJlZCBjb25zdCk6CisgICAgICAgIChKU0M6OlR5
cGVJbmZvOjpoYXNQdXRQcm9wZXJ0eVNlY3VyaXR5Q2hlY2sgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAqIHJ1bnRpbWUvTG9va3VwLmNwcDoKKyAgICAgICAgKEpTQzo6c2V0VXBTdGF0aWNGdW5j
dGlvblNsb3QpOgorICAgICAgICAqIHJ1bnRpbWUvTG9va3VwLmg6CisgICAgICAgIChKU0M6OmZp
bmRTdGF0aWNQcm9wZXJ0eUZvclB1dCk6CisgICAgICAgIChKU0M6OnB1dEVudHJ5KTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6bG9va3VwUHV0KTogRGVsZXRlZC4KKyAgICAgICAgKiBydW50aW1l
L1Byb3BlcnR5U2xvdC5jcHA6CisgICAgICAgIChKU0M6OlByb3BlcnR5U2xvdDo6Y3VzdG9tQWNj
ZXNzb3JHZXR0ZXIgY29uc3QpOgorICAgICAgICAqIHJ1bnRpbWUvUHJvcGVydHlTbG90Lmg6Cisg
ICAgICAgIChKU0M6OlByb3BlcnR5U2xvdDo6aXNDdXN0b20gY29uc3QpOgorICAgICAgICAoSlND
OjpQcm9wZXJ0eVNsb3Q6OnNldEN1c3RvbUdldHRlclNldHRlcik6CisgICAgICAgIChKU0M6OlBy
b3BlcnR5U2xvdDo6c2V0Q2FjaGVhYmxlQ3VzdG9tR2V0dGVyU2V0dGVyKToKKyAgICAgICAgKEpT
Qzo6UHJvcGVydHlTbG90OjpjdXN0b21HZXR0ZXIgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAq
IHJ1bnRpbWUvUHJvcGVydHlTbG90SW5saW5lcy5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6UHJv
cGVydHlTbG90OjpjdXN0b21HZXR0ZXIgY29uc3QpOgorICAgICAgICAqIHJ1bnRpbWUvUHJveHlP
YmplY3QuaDoKKyAgICAgICAgKiBydW50aW1lL1JlZ0V4cE9iamVjdC5jcHA6CisgICAgICAgIChK
U0M6OlJlZ0V4cE9iamVjdDo6cHV0KToKKyAgICAgICAgKiBydW50aW1lL1N0cmluZ09iamVjdC5j
cHA6CisgICAgICAgIChKU0M6OlN0cmluZ09iamVjdDo6cHV0KToKKyAgICAgICAgKiBydW50aW1l
L1N0cnVjdHVyZS5jcHA6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6dmFsaWRhdGVGbGFncyk6
CisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmUuaDoKKyAgICAgICAgKiBydW50aW1lL1N0cnVj
dHVyZUlubGluZXMuaDoKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjptYXlJbnRlcmNlcHROb25J
bmRleFB1dEV4Y2x1ZGluZ1Byb3RvIGNvbnN0KToKKwogMjAyMS0wMS0wOCAgQWxleGV5IFNodmF5
a2EgIDxzaHZhaWthbGVzaEBnbWFpbC5jb20+CiAKICAgICAgICAgSW1wbGVtZW50IEBjb3B5RGF0
YVByb3BlcnRpZXMgaW4gQysrIHRvIG9wdGltaXplIG9iamVjdCByZXN0IC8gc3ByZWFkCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAyNzEzNDIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTEw
MDksNiArMTAwOSw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUEK
ICAgICBydW50aW1lL1Byb3BlcnR5TmFtZUFycmF5LmgKICAgICBydW50aW1lL1Byb3BlcnR5T2Zm
c2V0LmgKICAgICBydW50aW1lL1Byb3BlcnR5U2xvdC5oCisgICAgcnVudGltZS9Qcm9wZXJ0eVNs
b3RJbmxpbmVzLmgKICAgICBydW50aW1lL1Byb3BlcnR5U3RvcmFnZS5oCiAgICAgcnVudGltZS9Q
cm90ZWN0LmgKICAgICBydW50aW1lL1Byb3RvdHlwZUtleS5oCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagkocmV2aXNpb24gMjcxMzQyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkK
QEAgLTEyMzYsNiArMTIzNiw3IEBACiAJCTdDMTg0RTIzMTdCRUUyNDAwMDdDQjYzQSAvKiBKU1By
b21pc2VDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gN0MxODRFMjExN0JFRTI0MDAwN0NCNjNBIC8qIEpTUHJvbWlzZUNvbnN0cnVjdG9y
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJN0U0
RUU3MDkwRUJCNzk2MzAwNTkzNEFBIC8qIFN0cnVjdHVyZUNoYWluLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3RTRFRTcwODBFQkI3OTYzMDA1OTM0QUEg
LyogU3RydWN0dXJlQ2hhaW4uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQk4NDA0ODAxMzEwMjFBMUQ5MDA4RTdGMDEgLyogSlNBUElWYWx1ZVdyYXBw
ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDMDg5
NEQ2MEZBRkJBMkQwMDAwMTg2NSAvKiBKU0FQSVZhbHVlV3JhcHBlci5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTg0OTVCOUE2MjVBREQzOEEwMEE0
NEIzMCAvKiBQcm9wZXJ0eVNsb3RJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA4NDk1QjlBNTI1QUREMzhBMDBBNDRCMzAgLyogUHJvcGVydHlT
bG90SW5saW5lcy5oICovOyB9OwogCQk4NjAxNjFFMzBGM0E4M0MxMDBGODQ3MTAgLyogQWJzdHJh
Y3RNYWNyb0Fzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gODYwMTYxREYwRjNBODNDMTAwRjg0NzEwIC8qIEFic3RyYWN0TWFjcm9Bc3NlbWJs
ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk4
NjAxNjFFNDBGM0E4M0MxMDBGODQ3MTAgLyogTWFjcm9Bc3NlbWJsZXJYODYuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2MDE2MUUwMEYzQTgzQzEwMEY4
NDcxMCAvKiBNYWNyb0Fzc2VtYmxlclg4Ni5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTg2MDE2MUU1MEYzQTgzQzEwMEY4NDcxMCAvKiBNYWNyb0Fz
c2VtYmxlclg4Nl82NC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gODYwMTYxRTEwRjNBODNDMTAwRjg0NzEwIC8qIE1hY3JvQXNzZW1ibGVyWDg2XzY0Lmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTQxMzIs
NiArNDEzMyw3IEBACiAJCTg0OTI1QTlBMjJCMzBDQkEwMEQxREZGRiAvKiBSZWdFeHBTdHJpbmdJ
dGVyYXRvclByb3RvdHlwZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBSZWdFeHBTdHJpbmdJdGVyYXRvclByb3RvdHlwZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTg0OTI1QTlCMjJCMzBDQkEwMEQxREZGRiAvKiBSZWdFeHBTdHJpbmdJdGVyYXRv
clByb3RvdHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZWdFeHBTdHJp
bmdJdGVyYXRvclByb3RvdHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NDky
NUE5QzIyQjMwQ0M4MDBEMURGRkYgLyogUmVnRXhwU3RyaW5nSXRlcmF0b3JQcm90b3R5cGUuanMg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmphdmFzY3JpcHQ7IHBhdGggPSBSZWdFeHBTdHJpbmdJdGVy
YXRvclByb3RvdHlwZS5qczsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJODQ5NUI5QTUy
NUFERDM4QTAwQTQ0QjMwIC8qIFByb3BlcnR5U2xvdElubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gUHJvcGVydHlTbG90SW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk4NjAxNjFERjBGM0E4M0MxMDBGODQ3MTAgLyogQWJzdHJhY3RNYWNyb0Fz
c2VtYmxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBYnN0cmFjdE1hY3Jv
QXNzZW1ibGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2MDE2MUUwMEYzQTgz
QzEwMEY4NDcxMCAvKiBNYWNyb0Fzc2VtYmxlclg4Ni5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBNYWNyb0Fzc2VtYmxlclg4Ni5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk4NjAxNjFFMTBGM0E4M0MxMDBGODQ3MTAgLyogTWFjcm9Bc3NlbWJsZXJYODZfNjQuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWFjcm9Bc3NlbWJsZXJYODZfNjQuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTc2NzAsNiArNzY3Miw3IEBACiAJCQkJMEZG
NzE2OEExNUEzQjIzMTAwOEY1REFBIC8qIFByb3BlcnR5T2Zmc2V0LmggKi8sCiAJCQkJNjU2MjFF
NkIwODlFODU5NzAwNzYwRjM1IC8qIFByb3BlcnR5U2xvdC5jcHAgKi8sCiAJCQkJNjU2MjFFNkMw
ODlFODU5NzAwNzYwRjM1IC8qIFByb3BlcnR5U2xvdC5oICovLAorCQkJCTg0OTVCOUE1MjVBREQz
OEEwMEE0NEIzMCAvKiBQcm9wZXJ0eVNsb3RJbmxpbmVzLmggKi8sCiAJCQkJMEZCN0YzOTAxNUVE
OEUzODAwRjE2N0IyIC8qIFByb3BlcnR5U3RvcmFnZS5oICovLAogCQkJCUFEMUNGMDY4MTZEQ0FC
MkQwMEI5NzEyMyAvKiBQcm9wZXJ0eVRhYmxlLmNwcCAqLywKIAkJCQk2NUMwMkZCQjA2Mzc0NjJB
MDAzRTdFRTYgLyogUHJvdGVjdC5oICovLApAQCAtMTAzMDMsNiArMTAzMDYsNyBAQAogCQkJCUJD
MThDNDU0MEUxNkY1Q0QwMEIzNDQ2MCAvKiBQcm9wZXJ0eU5hbWVBcnJheS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEZGNzE2OEMxNUEzQjIzNTAwOEY1REFBIC8qIFByb3BlcnR5T2Zmc2V0LmggaW4g
SGVhZGVycyAqLywKIAkJCQlCQzE4QzQ1NTBFMTZGNUNEMDBCMzQ0NjAgLyogUHJvcGVydHlTbG90
LmggaW4gSGVhZGVycyAqLywKKwkJCQk4NDk1QjlBNjI1QUREMzhBMDBBNDRCMzAgLyogUHJvcGVy
dHlTbG90SW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCN0YzOUMxNUVEOEU0NjAwRjE2
N0IyIC8qIFByb3BlcnR5U3RvcmFnZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NTYwRTE2
RjVDRDAwQjM0NDYwIC8qIFByb3RlY3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFMUQ2RDc1MjM2
MjY0OUYwMDdBNUMyNiAvKiBQcm90b0NhbGxGcmFtZUlubGluZXMuaCBpbiBIZWFkZXJzICovLApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCShyZXZpc2lvbiAyNzEzNDIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC01Niw2ICs1Niw3IEBACiAjaW5jbHVkZSAiTGlua0J1ZmZlci5oIgogI2luY2x1ZGUgIk1v
ZHVsZU5hbWVzcGFjZUFjY2Vzc0Nhc2UuaCIKICNpbmNsdWRlICJQb2x5bW9ycGhpY0FjY2Vzcy5o
IgorI2luY2x1ZGUgIlByb3BlcnR5U2xvdElubGluZXMuaCIKICNpbmNsdWRlICJTY29wZWRBcmd1
bWVudHMuaCIKICNpbmNsdWRlICJTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuaCIKICNpbmNsdWRl
ICJTdGFja0FsaWdubWVudC5oIgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Q2xhc3NJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Q2xhc3NJbmZvLmgJKHJldmlzaW9uIDI3MTM0MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0NsYXNzSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC03MSw5ICs3MSw2IEBAIHN0cnVj
dCBNZXRob2RUYWJsZSB7CiAgICAgdXNpbmcgR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEZ1bmN0
aW9uUHRyID0gYm9vbCAoKikoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIHVuc2lnbmVkLCBQ
cm9wZXJ0eVNsb3QmKTsKICAgICBHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RnVuY3Rpb25QdHIg
TUVUSE9EX1RBQkxFX0VOVFJZKGdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgpOwogCi0gICAgdXNp
bmcgRG9QdXRQcm9wZXJ0eVNlY3VyaXR5Q2hlY2tGdW5jdGlvblB0ciA9IHZvaWQgKCopKEpTT2Jq
ZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIFB1dFByb3BlcnR5U2xvdCYpOwot
ICAgIERvUHV0UHJvcGVydHlTZWN1cml0eUNoZWNrRnVuY3Rpb25QdHIgTUVUSE9EX1RBQkxFX0VO
VFJZKGRvUHV0UHJvcGVydHlTZWN1cml0eUNoZWNrKTsKLQogICAgIHVzaW5nIFRvVGhpc0Z1bmN0
aW9uUHRyID0gSlNWYWx1ZSAoKikoSlNDZWxsKiwgSlNHbG9iYWxPYmplY3QqLCBFQ01BTW9kZSk7
CiAgICAgVG9UaGlzRnVuY3Rpb25QdHIgTUVUSE9EX1RBQkxFX0VOVFJZKHRvVGhpcyk7CiAKQEAg
LTE1Niw3ICsxNTMsNiBAQCBzdHJ1Y3QgTWV0aG9kVGFibGUgewogICAgICAgICAmQ2xhc3NOYW1l
OjpkZWxldGVQcm9wZXJ0eUJ5SW5kZXgsIFwKICAgICAgICAgJkNsYXNzTmFtZTo6Z2V0T3duUHJv
cGVydHlTbG90LCBcCiAgICAgICAgICZDbGFzc05hbWU6OmdldE93blByb3BlcnR5U2xvdEJ5SW5k
ZXgsIFwKLSAgICAgICAgJkNsYXNzTmFtZTo6ZG9QdXRQcm9wZXJ0eVNlY3VyaXR5Q2hlY2ssIFwK
ICAgICAgICAgJkNsYXNzTmFtZTo6dG9UaGlzLCBcCiAgICAgICAgICZDbGFzc05hbWU6OmRlZmF1
bHRWYWx1ZSwgXAogICAgICAgICAmQ2xhc3NOYW1lOjpnZXRPd25Qcm9wZXJ0eU5hbWVzLCBcCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DdXN0b21HZXR0ZXJTZXR0ZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0N1c3RvbUdldHRl
clNldHRlci5jcHAJKHJldmlzaW9uIDI3MTM0MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0N1c3RvbUdldHRlclNldHRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDI4ICsy
NiwxMCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkN1c3RvbUdldHRlclNldHRl
ci5oIgogCi0jaW5jbHVkZSAiSlNDSlNWYWx1ZUlubGluZXMuaCIKLSNpbmNsdWRlIDx3dGYvQXNz
ZXJ0aW9ucy5oPgotCiBuYW1lc3BhY2UgSlNDIHsKIAogU1RBVElDX0FTU0VSVF9JU19UUklWSUFM
TFlfREVTVFJVQ1RJQkxFKEN1c3RvbUdldHRlclNldHRlcik7CiAKIGNvbnN0IENsYXNzSW5mbyBD
dXN0b21HZXR0ZXJTZXR0ZXI6OnNfaW5mbyA9IHsgIkN1c3RvbUdldHRlclNldHRlciIsIG51bGxw
dHIsIG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoQ3VzdG9tR2V0dGVyU2V0
dGVyKSB9OwogCi1UcmlTdGF0ZSBjYWxsQ3VzdG9tU2V0dGVyKEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEN1c3RvbUdldHRlclNldHRlcjo6Q3VzdG9tU2V0dGVyIHNldHRlciwgYm9vbCBp
c0FjY2Vzc29yLCBKU09iamVjdCogc2xvdEJhc2UsIEpTVmFsdWUgdGhpc1ZhbHVlLCBKU1ZhbHVl
IHZhbHVlKQotewotICAgIGlmIChpc0FjY2Vzc29yKSB7Ci0gICAgICAgIGlmICghc2V0dGVyKQot
ICAgICAgICAgICAgcmV0dXJuIFRyaVN0YXRlOjpGYWxzZTsKLSAgICAgICAgc2V0dGVyKGdsb2Jh
bE9iamVjdCwgSlNWYWx1ZTo6ZW5jb2RlKHRoaXNWYWx1ZSksIEpTVmFsdWU6OmVuY29kZSh2YWx1
ZSkpOwotICAgICAgICAvLyBBbHdheXMgcmV0dXJuIHRydWUgaWYgdGhlcmUgaXMgYSBzZXR0ZXIg
YW5kIGl0IGlzIG9ic2VydmVkIGFzIGFuIGFjY2Vzc29yIHRvIHVzZXJzLgotICAgICAgICByZXR1
cm4gVHJpU3RhdGU6OlRydWU7Ci0gICAgfQotCi0gICAgaWYgKCFzZXR0ZXIpCi0gICAgICAgIHJl
dHVybiBUcmlTdGF0ZTo6SW5kZXRlcm1pbmF0ZTsKLSAgICByZXR1cm4gdHJpU3RhdGUoc2V0dGVy
KGdsb2JhbE9iamVjdCwgSlNWYWx1ZTo6ZW5jb2RlKHNsb3RCYXNlKSwgSlNWYWx1ZTo6ZW5jb2Rl
KHZhbHVlKSkpOwotfQotCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0N1c3RvbUdldHRlclNldHRlci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0N1c3RvbUdldHRlclNldHRlci5oCShyZXZpc2lvbiAy
NzEzNDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DdXN0b21HZXR0ZXJTZXR0
ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNzYsNiArNzYsNCBAQCBwcml2YXRlOgogICAgIEN1c3Rv
bVNldHRlciBtX3NldHRlcjsKIH07CiAKLUpTX0VYUE9SVF9QUklWQVRFIFRyaVN0YXRlIGNhbGxD
dXN0b21TZXR0ZXIoSlNHbG9iYWxPYmplY3QqLCBDdXN0b21HZXR0ZXJTZXR0ZXI6OkN1c3RvbVNl
dHRlciwgYm9vbCBpc0FjY2Vzc29yLCBKU09iamVjdCogc2xvdEJhc2UsIEpTVmFsdWUgdGhpc1Zh
bHVlLCBKU1ZhbHVlKTsKLQogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9HZW5lcmljQXJndW1lbnRzSW5saW5lcy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNBcmd1bWVudHNJbmxpbmVzLmgJ
KHJldmlzaW9uIDI3MTM0MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVy
aWNBcmd1bWVudHNJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEzMiw3ICsxMzIsNyBAQCBi
b29sIEdlbmVyaWNBcmd1bWVudHM8VHlwZT46OnB1dChKU0NlbGwqCiAgICAgLy8gaHR0cHM6Ly90
YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtYXJndW1lbnRzLWV4b3RpYy1vYmplY3RzLXNldC1w
LXYtcmVjZWl2ZXIKICAgICAvLyBGYWxsIGJhY2sgdG8gdGhlIE9yZGluYXJ5U2V0IHdoZW4gdGhl
IHJlY2VpdmVyIGlzIGFsdGVyZWQgZnJvbSB0aGUgdGhpc09iamVjdC4KICAgICBpZiAoVU5MSUtF
TFkoaXNUaGlzVmFsdWVBbHRlcmVkKHNsb3QsIHRoaXNPYmplY3QpKSkKLSAgICAgICAgUkVMRUFT
RV9BTkRfUkVUVVJOKHNjb3BlLCBvcmRpbmFyeVNldFNsb3coZ2xvYmFsT2JqZWN0LCB0aGlzT2Jq
ZWN0LCBpZGVudCwgdmFsdWUsIHNsb3QudGhpc1ZhbHVlKCksIHNsb3QuaXNTdHJpY3RNb2RlKCkp
KTsKKyAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBCYXNlOjpwdXQodGhpc09iamVj
dCwgZ2xvYmFsT2JqZWN0LCBpZGVudCwgdmFsdWUsIHNsb3QpKTsKICAgICAKICAgICBPcHRpb25h
bDx1aW50MzJfdD4gaW5kZXggPSBwYXJzZUluZGV4KGlkZW50KTsKICAgICBpZiAoaW5kZXggJiYg
dGhpc09iamVjdC0+aXNNYXBwZWRBcmd1bWVudChpbmRleC52YWx1ZSgpKSkgewpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAJKHJldmlzaW9uIDI3MTM0MikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yNDAsNyArMjQwLDcgQEAgYm9vbCBKU0FycmF5OjpwdXQoSlNDZWxsKiBjZWxsLCBK
U0dsb2JhbAogICAgIEpTQXJyYXkqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNBcnJheSo+KGNlbGwp
OwogCiAgICAgaWYgKFVOTElLRUxZKGlzVGhpc1ZhbHVlQWx0ZXJlZChzbG90LCB0aGlzT2JqZWN0
KSkpCi0gICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgb3JkaW5hcnlTZXRTbG93KGds
b2JhbE9iamVjdCwgdGhpc09iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdC50aGlzVmFs
dWUoKSwgc2xvdC5pc1N0cmljdE1vZGUoKSkpOworICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4o
c2NvcGUsIEpTT2JqZWN0OjpwdXQodGhpc09iamVjdCwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5h
bWUsIHZhbHVlLCBzbG90KSk7CiAKICAgICB0aGlzT2JqZWN0LT5lbnN1cmVXcml0YWJsZSh2bSk7
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5
QnVmZmVyVmlldy5jcHAJKHJldmlzaW9uIDI3MTM0MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY5LDE4
ICsxNjksNiBAQCB2b2lkIEpTQXJyYXlCdWZmZXJWaWV3Ojp2aXNpdENoaWxkcmVuKEpTCiAgICAg
fQogfQogCi1ib29sIEpTQXJyYXlCdWZmZXJWaWV3OjpwdXQoCi0gICAgSlNDZWxsKiBjZWxsLCBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBK
U1ZhbHVlIHZhbHVlLAotICAgIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKLXsKLSAgICBKU0FycmF5
QnVmZmVyVmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0FycmF5QnVmZmVyVmlldyo+KGNlbGwp
OwotCi0gICAgaWYgKFVOTElLRUxZKGlzVGhpc1ZhbHVlQWx0ZXJlZChzbG90LCB0aGlzT2JqZWN0
KSkpCi0gICAgICAgIHJldHVybiBvcmRpbmFyeVNldFNsb3coZ2xvYmFsT2JqZWN0LCB0aGlzT2Jq
ZWN0LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90LnRoaXNWYWx1ZSgpLCBzbG90LmlzU3RyaWN0
TW9kZSgpKTsKLSAgICAKLSAgICByZXR1cm4gQmFzZTo6cHV0KHRoaXNPYmplY3QsIGdsb2JhbE9i
amVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCk7Ci19Ci0KIEFycmF5QnVmZmVyKiBKU0Fy
cmF5QnVmZmVyVmlldzo6dW5zaGFyZWRCdWZmZXIoKQogewogICAgIEFycmF5QnVmZmVyKiByZXN1
bHQgPSBwb3NzaWJseVNoYXJlZEJ1ZmZlcigpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5oCShyZXZpc2lvbiAyNzEzNDIpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNjksOCArMTY5LDYgQEAgcHJvdGVjdGVkOgogICAgIAogICAgIEpTX0VY
UE9SVF9QUklWQVRFIEpTQXJyYXlCdWZmZXJWaWV3KFZNJiwgQ29uc3RydWN0aW9uQ29udGV4dCYp
OwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKLSAgICAK
LSAgICBzdGF0aWMgYm9vbCBwdXQoSlNDZWxsKiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5h
bWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOwogCiAgICAgc3RhdGljIHZvaWQgdmlzaXRD
aGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwogICAgIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNWYWx1ZS5jcHAJKHJldmlzaW9uIDI3MTM0MikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0pTVmFsdWUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yMTgsNyArMjE4LDcgQEAgSlNPYmplY3QqIEpTVmFsdWU6OnN5bnRoZXNpemVQcm90
b3R5cGUoSgogICAgIHJldHVybiBudWxscHRyOwogfQogCi0vLyBFQ01BIDguNy4yCisvLyBodHRw
czovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9yZGluYXJ5c2V0CiBib29sIEpTVmFsdWU6OnB1dFRv
UHJpbWl0aXZlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZSBwcm9w
ZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBW
TSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CkBAIC0yMzIsNjMgKzIzMiwxNSBAQCBib29sIEpT
VmFsdWU6OnB1dFRvUHJpbWl0aXZlKEpTR2xvYmFsT2JqCiAgICAgRVhDRVBUSU9OX0FTU0VSVCgh
IXNjb3BlLmV4Y2VwdGlvbigpID09ICFvYmopOwogICAgIGlmIChVTkxJS0VMWSghb2JqKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIEpTVmFsdWUgcHJvdG90eXBlOwotICAgIGlmIChwcm9w
ZXJ0eU5hbWUgIT0gdm0ucHJvcGVydHlOYW1lcy0+dW5kZXJzY29yZVByb3RvKSB7Ci0gICAgICAg
IHdoaWxlICh0cnVlKSB7Ci0gICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG9iai0+
c3RydWN0dXJlKHZtKTsKLSAgICAgICAgICAgIGlmIChzdHJ1Y3R1cmUtPmhhc1JlYWRPbmx5T3JH
ZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzRXhjbHVkaW5nUHJvdG8oKSB8fCBzdHJ1Y3R1cmUtPnR5cGVJ
bmZvKCkuaGFzUHV0UHJvcGVydHlTZWN1cml0eUNoZWNrKCkpCi0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICBpZiAob2JqLT50eXBlKCkgPT0gUHJveHlPYmplY3RUeXBlKSB7Ci0g
ICAgICAgICAgICAgICAgYXV0byogcHJveHkgPSBqc0Nhc3Q8UHJveHlPYmplY3QqPihvYmopOwot
ICAgICAgICAgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgcHJveHktPlByb3h5T2Jq
ZWN0OjpwdXQocHJveHksIGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCkp
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcHJvdG90eXBlID0gb2JqLT5nZXRQcm90b3R5
cGUodm0sIGdsb2JhbE9iamVjdCk7Ci0gICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCBmYWxzZSk7Ci0KLSAgICAgICAgICAgIGlmIChwcm90b3R5cGUuaXNOdWxsKCkpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIHR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCBzbG90Lmlz
U3RyaWN0TW9kZSgpLCBSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcik7Ci0gICAgICAgICAgICBv
YmogPSBhc09iamVjdChwcm90b3R5cGUpOwotICAgICAgICB9Ci0gICAgfQogCi0gICAgZm9yICg7
IDsgb2JqID0gYXNPYmplY3QocHJvdG90eXBlKSkgewotICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSA9IG9iai0+c3RydWN0dXJlKHZtKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKHN0cnVjdHVy
ZS0+dHlwZUluZm8oKS5oYXNQdXRQcm9wZXJ0eVNlY3VyaXR5Q2hlY2soKSkpIHsKLSAgICAgICAg
ICAgIG9iai0+bWV0aG9kVGFibGUodm0pLT5kb1B1dFByb3BlcnR5U2VjdXJpdHlDaGVjayhvYmos
IGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCBzbG90KTsKLSAgICAgICAgICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIGZhbHNlKTsKLSAgICAgICAgfQotICAgICAgICB1bnNpZ25lZCBh
dHRyaWJ1dGVzOwotICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdl
dCh2bSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzKTsKLSAgICAgICAgaWYgKG9mZnNldCAhPSBp
bnZhbGlkT2Zmc2V0KSB7Ci0gICAgICAgICAgICBpZiAoYXR0cmlidXRlcyAmIFByb3BlcnR5QXR0
cmlidXRlOjpSZWFkT25seSkKLSAgICAgICAgICAgICAgICByZXR1cm4gdHlwZUVycm9yKGdsb2Jh
bE9iamVjdCwgc2NvcGUsIHNsb3QuaXNTdHJpY3RNb2RlKCksIFJlYWRvbmx5UHJvcGVydHlXcml0
ZUVycm9yKTsKLQotICAgICAgICAgICAgSlNWYWx1ZSBncyA9IG9iai0+Z2V0RGlyZWN0KG9mZnNl
dCk7Ci0gICAgICAgICAgICBpZiAoZ3MuaXNHZXR0ZXJTZXR0ZXIoKSkKLSAgICAgICAgICAgICAg
ICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIGNhbGxTZXR0ZXIoZ2xvYmFsT2JqZWN0LCAqdGhp
cywgZ3MsIHZhbHVlLCBzbG90LmlzU3RyaWN0TW9kZSgpID8gRUNNQU1vZGU6OnN0cmljdCgpIDog
RUNNQU1vZGU6OnNsb3BweSgpKSk7Ci0KLSAgICAgICAgICAgIGlmIChncy5pc0N1c3RvbUdldHRl
clNldHRlcigpKSB7Ci0gICAgICAgICAgICAgICAgYXV0byBzZXR0ZXIgPSBqc0Nhc3Q8Q3VzdG9t
R2V0dGVyU2V0dGVyKj4oZ3MuYXNDZWxsKCkpLT5zZXR0ZXIoKTsKLSAgICAgICAgICAgICAgICBi
b29sIGlzQWNjZXNzb3IgPSBhdHRyaWJ1dGVzICYgUHJvcGVydHlBdHRyaWJ1dGU6OkN1c3RvbUFj
Y2Vzc29yOwotICAgICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gY2FsbEN1c3RvbVNldHRlcihn
bG9iYWxPYmplY3QsIHNldHRlciwgaXNBY2Nlc3Nvciwgb2JqLCBzbG90LnRoaXNWYWx1ZSgpLCB2
YWx1ZSk7Ci0gICAgICAgICAgICAgICAgaWYgKHJlc3VsdCAhPSBUcmlTdGF0ZTo6SW5kZXRlcm1p
bmF0ZSkKLSAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCByZXN1
bHQgPT0gVHJpU3RhdGU6OlRydWUpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBJ
ZiB0aGVyZSdzIGFuIGV4aXN0aW5nIHByb3BlcnR5IG9uIHRoZSBvYmplY3Qgb3Igb25lIG9mIGl0
cyAKLSAgICAgICAgICAgIC8vIHByb3RvdHlwZXMgaXQgc2hvdWxkIGJlIHJlcGxhY2VkLCBzbyBi
cmVhayBoZXJlLgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKG9i
ai0+dHlwZSgpID09IFByb3h5T2JqZWN0VHlwZSkgewotICAgICAgICAgICAgYXV0byogcHJveHkg
PSBqc0Nhc3Q8UHJveHlPYmplY3QqPihvYmopOwotICAgICAgICAgICAgUkVMRUFTRV9BTkRfUkVU
VVJOKHNjb3BlLCBwcm94eS0+UHJveHlPYmplY3Q6OnB1dChwcm94eSwgZ2xvYmFsT2JqZWN0LCBw
cm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KSk7Ci0gICAgICAgIH0KLSAgICAgICAgcHJvdG90eXBl
ID0gb2JqLT5nZXRQcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCk7CisgICAgaWYgKCFvYmotPmNh
blBlcmZvcm1GYXN0UHV0SW5saW5lKHZtLCBwcm9wZXJ0eU5hbWUpKSB7CisgICAgICAgIFRyaVN0
YXRlIHN0YXR1cyA9IG9iai0+cHV0SW5saW5lTm9uSW5kZXhTbG93KGdsb2JhbE9iamVjdCwgcHJv
cGVydHlOYW1lLCB2YWx1ZSwgc2xvdCk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIGZhbHNlKTsKLSAgICAgICAgaWYgKHByb3RvdHlwZS5pc051bGwoKSkKLSAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBpZiAoc3RhdHVzICE9IFRyaVN0YXRlOjpJbmRldGVybWluYXRlKQor
ICAgICAgICAgICAgcmV0dXJuIHN0YXR1cyA9PSBUcmlTdGF0ZTo6VHJ1ZTsKICAgICB9CiAgICAg
CisgICAgLy8gRklYTUU6IEZvciBhbiBhdHRlbXB0IHRvIGNyZWF0ZSBhIHByb3BlcnR5IG9uIGEg
cHJpbWl0aXZlLCB0aGUgZXJyb3IgbWVzc2FnZSBpcyBtaXNsZWFkaW5nLgogICAgIHJldHVybiB0
eXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgc2xvdC5pc1N0cmljdE1vZGUoKSwgUmVhZG9u
bHlQcm9wZXJ0eVdyaXRlRXJyb3IpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0NlbGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTQ2VsbC5jcHAJKHJldmlzaW9uIDI3MTM0MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTQ2VsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwMSwxMSArMjAxLDYg
QEAgYm9vbCBKU0NlbGw6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSgogICAgIHJldHVybiBm
YWxzZTsKIH0KIAotdm9pZCBKU0NlbGw6OmRvUHV0UHJvcGVydHlTZWN1cml0eUNoZWNrKEpTT2Jq
ZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIFB1dFByb3BlcnR5U2xvdCYpCi17
Ci0gICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLX0KLQogdm9pZCBKU0NlbGw6Omdl
dE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFt
ZUFycmF5JiwgRG9udEVudW1Qcm9wZXJ0aWVzTW9kZSkKIHsKICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxs
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgJ
KHJldmlzaW9uIDI3MTM0MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2Vs
bC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNTksNyArMjU5LDYgQEAgcHJvdGVjdGVkOgogICAgIHN0
YXRpYyBib29sIGRlZmluZU93blByb3BlcnR5KEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQ
cm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5RGVzY3JpcHRvciYsIGJvb2wgc2hvdWxkVGhyb3cp
OwogICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU09iamVjdCosIEpTR2xvYmFs
T2JqZWN0KiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKICAgICBzdGF0aWMgYm9vbCBn
ZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCB1bnNp
Z25lZCBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwotICAgIHN0YXRpYyBOT19SRVRVUk5f
RFVFX1RPX0NSQVNIIHZvaWQgZG9QdXRQcm9wZXJ0eVNlY3VyaXR5Q2hlY2soSlNPYmplY3QqLCBK
U0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwgUHV0UHJvcGVydHlTbG90Jik7CiAKIHByaXZh
dGU6CiAgICAgZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uY3BwCShyZXZpc2lvbiAyNzEz
NDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNTE3LDcgKzUxNyw3IEBAIGJvb2wgSlNGdW5jdGlvbjo6cHV0KEpTQ2Vs
bCogY2VsbCwgSlNHbG8KICAgICB9CiAKICAgICBpZiAoVU5MSUtFTFkoaXNUaGlzVmFsdWVBbHRl
cmVkKHNsb3QsIHRoaXNPYmplY3QpKSkKLSAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3Bl
LCBvcmRpbmFyeVNldFNsb3coZ2xvYmFsT2JqZWN0LCB0aGlzT2JqZWN0LCBwcm9wZXJ0eU5hbWUs
IHZhbHVlLCBzbG90LnRoaXNWYWx1ZSgpLCBzbG90LmlzU3RyaWN0TW9kZSgpKSk7CisgICAgICAg
IFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgQmFzZTo6cHV0KHRoaXNPYmplY3QsIGdsb2JhbE9i
amVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCkpOwogCiAKICAgICBpZiAodGhpc09iamVj
dC0+aXNIb3N0T3JCdWlsdGluRnVuY3Rpb24oKSkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXcuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlldy5oCShyZXZp
c2lvbiAyNzEzNDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNU
eXBlZEFycmF5Vmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC05Niw3ICs5Niw3IEBAIHB1YmxpYzoK
ICAgICB1c2luZyBCYXNlID0gSlNBcnJheUJ1ZmZlclZpZXc7CiAgICAgdHlwZWRlZiB0eXBlbmFt
ZSBBZGFwdG9yOjpUeXBlIEVsZW1lbnRUeXBlOwogCi0gICAgc3RhdGljIGNvbnN0ZXhwciB1bnNp
Z25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJpZGVzR2V0
T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlOYW1lcyB8IEludGVyY2Vw
dHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm87CisgICAg
c3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVy
ZUZsYWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzR2V0T3duUHJv
cGVydHlOYW1lcyB8IEludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5M
ZW5ndGhJc05vdFplcm8gfCBJbnRlcmNlcHRzUHV0RXZlbldoZW5SZWNlaXZlcklzQWx0ZXJlZDsK
IAogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgZWxlbWVudFNpemUgPSBzaXplb2YodHlw
ZW5hbWUgQWRhcHRvcjo6VHlwZSk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAJKHJldmlzaW9uIDI3MTM0MykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTQ1OCw3ICsxNDU4LDcgQEAgYm9vbCBKU0dsb2JhbE9iamVjdDo6cHV0KEpTQ2VsbCog
Y2VsbCwgSgogICAgIEFTU0VSVCghSGVhcDo6aGVhcCh2YWx1ZSkgfHwgSGVhcDo6aGVhcCh2YWx1
ZSkgPT0gSGVhcDo6aGVhcCh0aGlzT2JqZWN0KSk7CiAKICAgICBpZiAoVU5MSUtFTFkoaXNUaGlz
VmFsdWVBbHRlcmVkKHNsb3QsIHRoaXNPYmplY3QpKSkKLSAgICAgICAgUkVMRUFTRV9BTkRfUkVU
VVJOKHNjb3BlLCBvcmRpbmFyeVNldFNsb3coZ2xvYmFsT2JqZWN0LCB0aGlzT2JqZWN0LCBwcm9w
ZXJ0eU5hbWUsIHZhbHVlLCBzbG90LnRoaXNWYWx1ZSgpLCBzbG90LmlzU3RyaWN0TW9kZSgpKSk7
CisgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgQmFzZTo6cHV0KHRoaXNPYmplY3Qs
IGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCkpOwogCiAgICAgYm9vbCBz
aG91bGRUaHJvd1JlYWRPbmx5RXJyb3IgPSBzbG90LmlzU3RyaWN0TW9kZSgpOwogICAgIGJvb2wg
aWdub3JlUmVhZE9ubHlFcnJvcnMgPSBmYWxzZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTTW9kdWxlTmFtZXNwYWNlT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QuaAkocmV2aXNp
b24gMjcxMzQyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVOYW1l
c3BhY2VPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsNyArMzMsNyBAQCBuYW1lc3BhY2Ug
SlNDIHsKIGNsYXNzIEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0IGZpbmFsIDogcHVibGljIEpTTm9u
RmluYWxPYmplY3QgewogcHVibGljOgogICAgIHVzaW5nIEJhc2UgPSBKU05vbkZpbmFsT2JqZWN0
OwotICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpT
dHJ1Y3R1cmVGbGFncyB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRlc0dl
dE93blByb3BlcnR5TmFtZXMgfCBJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2
ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgR2V0T3duUHJvcGVydHlTbG90SXNJbXB1cmVGb3JQcm9w
ZXJ0eUFic2VuY2UgfCBJc0ltbXV0YWJsZVByb3RvdHlwZUV4b3RpY09iamVjdDsKKyAgICBzdGF0
aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxh
Z3MgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0
eU5hbWVzIHwgSW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0
aElzTm90WmVybyB8IEludGVyY2VwdHNQdXRFdmVuV2hlblJlY2VpdmVySXNBbHRlcmVkIHwgR2V0
T3duUHJvcGVydHlTbG90SXNJbXB1cmVGb3JQcm9wZXJ0eUFic2VuY2UgfCBJc0ltbXV0YWJsZVBy
b3RvdHlwZUV4b3RpY09iamVjdDsKIAogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0Rl
c3RydWN0aW9uID0gdHJ1ZTsKICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAkocmV2aXNpb24g
MjcxMzQyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC02OTksMTAgKzY5OSw2IEBAIGJvb2wgSlNPYmplY3Q6OmdldE93blBy
b3BlcnR5U2xvdChKU09iamUKIHsKICAgICByZXR1cm4gZ2V0T3duUHJvcGVydHlTbG90SW1wbChv
YmplY3QsIGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCBzbG90KTsKIH0KLQotdm9pZCBKU09i
amVjdDo6ZG9QdXRQcm9wZXJ0eVNlY3VyaXR5Q2hlY2soSlNPYmplY3QqLCBKU0dsb2JhbE9iamVj
dCosIFByb3BlcnR5TmFtZSwgUHV0UHJvcGVydHlTbG90JikKLXsKLX0KICNlbmRpZiAvLyBBU1NF
UlRfRU5BQkxFRAogCiAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1vcmRp
bmFyeXNldApAQCAtNzUyLDQwICs3NDgsMTAgQEAgYm9vbCBvcmRpbmFyeVNldFNsb3coSlNHbG9i
YWxPYmplY3QqIGdsbwogICAgICAgICBpZiAoIW93bkRlc2NyaXB0b3Iud3JpdGFibGUoKSkKICAg
ICAgICAgICAgIHJldHVybiB0eXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgc2hvdWxkVGhy
b3csIFJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9yKTsKIAotICAgICAgICAvLyA5LjEuOS4xLTQt
YiBJZiBUeXBlKFJlY2VpdmVyKSBpcyBub3QgT2JqZWN0LCByZXR1cm4gZmFsc2UuCi0gICAgICAg
IGlmICghcmVjZWl2ZXIuaXNPYmplY3QoKSkKLSAgICAgICAgICAgIHJldHVybiB0eXBlRXJyb3Io
Z2xvYmFsT2JqZWN0LCBzY29wZSwgc2hvdWxkVGhyb3csIFJlYWRvbmx5UHJvcGVydHlXcml0ZUVy
cm9yKTsKLQogICAgICAgICAvLyBJbiBPcmRpbmFyeVNldCwgdGhlIHJlY2VpdmVyIG1heSBub3Qg
YmUgdGhlIHNhbWUgdG8gdGhlIG9iamVjdC4KICAgICAgICAgLy8gU28sIHdlIHBlcmZvcm0gW1tH
ZXRPd25Qcm9wZXJ0eV1dIG9udG8gdGhlIHJlY2VpdmVyIHdoaWxlIHdlIGFscmVhZHkgcGVyZm9y
bSBbW0dldE93blByb3BlcnR5XV0gb250byB0aGUgb2JqZWN0LgogCi0gICAgICAgIC8vIDkuMS45
LjEtNC1jIExldCBleGlzdGluZ0Rlc2NyaXB0b3IgYmUgPyBSZWNlaXZlci5bW0dldE93blByb3Bl
cnR5XV0oUCkuCi0gICAgICAgIEpTT2JqZWN0KiByZWNlaXZlck9iamVjdCA9IGFzT2JqZWN0KHJl
Y2VpdmVyKTsKLSAgICAgICAgUHJvcGVydHlEZXNjcmlwdG9yIGV4aXN0aW5nRGVzY3JpcHRvcjsK
LSAgICAgICAgYm9vbCBleGlzdGluZ0Rlc2NyaXB0b3JGb3VuZCA9IHJlY2VpdmVyT2JqZWN0LT5n
ZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIGV4aXN0
aW5nRGVzY3JpcHRvcik7Ci0gICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGZhbHNl
KTsKLQotICAgICAgICAvLyA5LjEuOS4xLTQtZCBJZiBleGlzdGluZ0Rlc2NyaXB0b3IgaXMgbm90
IHVuZGVmaW5lZCwgdGhlbgotICAgICAgICBpZiAoZXhpc3RpbmdEZXNjcmlwdG9yRm91bmQpIHsK
LSAgICAgICAgICAgIC8vIDkuMS45LjEtNC1kLWkgSWYgSXNBY2Nlc3NvckRlc2NyaXB0b3IoZXhp
c3RpbmdEZXNjcmlwdG9yKSBpcyB0cnVlLCByZXR1cm4gZmFsc2UuCi0gICAgICAgICAgICBpZiAo
ZXhpc3RpbmdEZXNjcmlwdG9yLmlzQWNjZXNzb3JEZXNjcmlwdG9yKCkpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIHR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCBzaG91bGRUaHJvdywgUmVh
ZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpOwotCi0gICAgICAgICAgICAvLyA5LjEuOS4xLTQtZC1p
aSBJZiBleGlzdGluZ0Rlc2NyaXB0b3IuW1tXcml0YWJsZV1dIGlzIGZhbHNlLCByZXR1cm4gZmFs
c2UuCi0gICAgICAgICAgICBpZiAoIWV4aXN0aW5nRGVzY3JpcHRvci53cml0YWJsZSgpKQotICAg
ICAgICAgICAgICAgIHJldHVybiB0eXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgc2hvdWxk
VGhyb3csIFJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9yKTsKLQotICAgICAgICAgICAgLy8gOS4x
LjkuMS00LWQtaWlpIExldCB2YWx1ZURlc2MgYmUgdGhlIFByb3BlcnR5RGVzY3JpcHRvcntbW1Zh
bHVlXV06IFZ9LgotICAgICAgICAgICAgUHJvcGVydHlEZXNjcmlwdG9yIHZhbHVlRGVzY3JpcHRv
cjsKLSAgICAgICAgICAgIHZhbHVlRGVzY3JpcHRvci5zZXRWYWx1ZSh2YWx1ZSk7Ci0KLSAgICAg
ICAgICAgIC8vIDkuMS45LjEtNC1kLWl2IFJldHVybiA/IFJlY2VpdmVyLltbRGVmaW5lT3duUHJv
cGVydHldXShQLCB2YWx1ZURlc2MpLgotICAgICAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNj
b3BlLCByZWNlaXZlck9iamVjdC0+bWV0aG9kVGFibGUodm0pLT5kZWZpbmVPd25Qcm9wZXJ0eShy
ZWNlaXZlck9iamVjdCwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHZhbHVlRGVzY3JpcHRv
ciwgc2hvdWxkVGhyb3cpKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIDkuMS45LjEtNC1lIEVs
c2UgUmVjZWl2ZXIgZG9lcyBub3QgY3VycmVudGx5IGhhdmUgYSBwcm9wZXJ0eSBQLAotICAgICAg
ICAvLyA5LjEuOS4xLTQtZS1pIFJldHVybiA/IENyZWF0ZURhdGFQcm9wZXJ0eShSZWNlaXZlciwg
UCwgVikuCi0gICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgcmVjZWl2ZXJPYmplY3Qt
Pm1ldGhvZFRhYmxlKHZtKS0+ZGVmaW5lT3duUHJvcGVydHkocmVjZWl2ZXJPYmplY3QsIGdsb2Jh
bE9iamVjdCwgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3IodmFsdWUsIHN0YXRpY19j
YXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6Tm9uZSkpLCBzaG91bGRUaHJvdykpOwor
ICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIG9yZGluYXJ5U2V0RGVmaW5lUHJvcGVy
dHlPblJlY2VpdmVyU2xvdyhnbG9iYWxPYmplY3QsIHJlY2VpdmVyLCBwcm9wZXJ0eU5hbWUsIHZh
bHVlLCBzaG91bGRUaHJvdykpOwogICAgIH0KIAogICAgIC8vIDkuMS45LjEtNSBBc3NlcnQ6IElz
QWNjZXNzb3JEZXNjcmlwdG9yKG93bkRlc2MpIGlzIHRydWUuCkBAIC04MTEsODcgKzc3NywxMzMg
QEAgYm9vbCBvcmRpbmFyeVNldFNsb3coSlNHbG9iYWxPYmplY3QqIGdsbwogICAgIHJldHVybiB0
cnVlOwogfQogCi0vLyBFQ01BIDguNi4yLjIKKy8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNt
YTI2Mi8jc2VjLW9yZGluYXJ5c2V0IChzdGVwcyAzLmItZSkKK2Jvb2wgb3JkaW5hcnlTZXREZWZp
bmVQcm9wZXJ0eU9uUmVjZWl2ZXJTbG93KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpT
VmFsdWUgcmVjZWl2ZXJWYWx1ZSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2
YWx1ZSwgYm9vbCBzaG91bGRUaHJvdykKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZt
KCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgSlNP
YmplY3QqIHJlY2VpdmVyID0gcmVjZWl2ZXJWYWx1ZS5nZXRPYmplY3QoKTsKKyAgICAvLyBGSVhN
RTogRm9yIGFuIGF0dGVtcHQgdG8gY3JlYXRlIGEgcHJvcGVydHkgb24gYSBwcmltaXRpdmUsIHRo
ZSBlcnJvciBtZXNzYWdlIGlzIG1pc2xlYWRpbmcuCisgICAgaWYgKCFyZWNlaXZlcikKKyAgICAg
ICAgcmV0dXJuIHR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCBzaG91bGRUaHJvdywgUmVh
ZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpOworCisgICAgUHJvcGVydHlTbG90IHNsb3QocmVjZWl2
ZXJWYWx1ZSwgUHJvcGVydHlTbG90OjpJbnRlcm5hbE1ldGhvZFR5cGU6OkdldE93blByb3BlcnR5
KTsKKyAgICBib29sIGhhc1Byb3BlcnR5ID0gcmVjZWl2ZXItPm1ldGhvZFRhYmxlKHZtKS0+Z2V0
T3duUHJvcGVydHlTbG90KHJlY2VpdmVyLCBnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgc2xv
dCk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZmFsc2UpOworICAgIGlmIChoYXNQ
cm9wZXJ0eSkgeworICAgICAgICBpZiAoc2xvdC5hdHRyaWJ1dGVzKCkgJiBQcm9wZXJ0eUF0dHJp
YnV0ZTo6UmVhZE9ubHkpCisgICAgICAgICAgICByZXR1cm4gdHlwZUVycm9yKGdsb2JhbE9iamVj
dCwgc2NvcGUsIHNob3VsZFRocm93LCBSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcik7CisKKyAg
ICAgICAgLy8gRklYTUU6IEZvciBhbiBhY2Nlc3NvciB3aXRoIHNldHRlciwgdGhlIGVycm9yIG1l
c3NhZ2UgaXMgbWlzbGVhZGluZy4KKyAgICAgICAgaWYgKHNsb3QuYXR0cmlidXRlcygpICYgKFBy
b3BlcnR5QXR0cmlidXRlOjpBY2Nlc3NvciB8IFByb3BlcnR5QXR0cmlidXRlOjpDdXN0b21BY2Nl
c3NvcikpCisgICAgICAgICAgICByZXR1cm4gdHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUs
IHNob3VsZFRocm93LCBSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcik7CisKKyAgICAgICAgUHJv
cGVydHlEZXNjcmlwdG9yIHZhbHVlRGVzY3JpcHRvcjsKKyAgICAgICAgdmFsdWVEZXNjcmlwdG9y
LnNldFZhbHVlKHZhbHVlKTsKKworICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIHJl
Y2VpdmVyLT5tZXRob2RUYWJsZSh2bSktPmRlZmluZU93blByb3BlcnR5KHJlY2VpdmVyLCBnbG9i
YWxPYmplY3QsIHByb3BlcnR5TmFtZSwgdmFsdWVEZXNjcmlwdG9yLCBzaG91bGRUaHJvdykpOwor
ICAgIH0KKworICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgcmVjZWl2ZXItPm1ldGhvZFRh
YmxlKHZtKS0+ZGVmaW5lT3duUHJvcGVydHkocmVjZWl2ZXIsIGdsb2JhbE9iamVjdCwgcHJvcGVy
dHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3IodmFsdWUsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQ
cm9wZXJ0eUF0dHJpYnV0ZTo6Tm9uZSkpLCBzaG91bGRUaHJvdykpOworfQorCiBib29sIEpTT2Jq
ZWN0OjpwdXQoSlNDZWxsKiBjZWxsLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9w
ZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmIHNs
b3QpCiB7CiAgICAgcmV0dXJuIHB1dElubGluZUZvckpTT2JqZWN0KGNlbGwsIGdsb2JhbE9iamVj
dCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCk7CiB9CiAKLWJvb2wgSlNPYmplY3Q6OnB1dElu
bGluZVNsb3coSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIHByb3Bl
cnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBzbG90KQorVHJpU3RhdGUg
SlNPYmplY3Q6OnB1dElubGluZU5vbkluZGV4U2xvdyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBQdXRQcm9wZXJ0
eVNsb3QmIHB1dFNsb3QpCiB7Ci0gICAgQVNTRVJUKCFpc1RoaXNWYWx1ZUFsdGVyZWQoc2xvdCwg
dGhpcykpOworICAgIEFTU0VSVCghcGFyc2VJbmRleChwcm9wZXJ0eU5hbWUpKTsKIAogICAgIFZN
JiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CiAKKyAgICBpZiAoVU5MSUtFTFkoIXZtLmlzU2FmZVRvUmVjdXJzZVNvZnQo
KSkpIHsKKyAgICAgICAgdGhyb3dTdGFja092ZXJmbG93RXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29w
ZSk7CisgICAgICAgIHJldHVybiBUcmlTdGF0ZTo6RmFsc2U7CisgICAgfQorCiAgICAgSlNPYmpl
Y3QqIG9iaiA9IHRoaXM7CiAgICAgZm9yICg7OykgewogICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSA9IG9iai0+c3RydWN0dXJlKHZtKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKHN0cnVjdHVy
ZS0+dHlwZUluZm8oKS5oYXNQdXRQcm9wZXJ0eVNlY3VyaXR5Q2hlY2soKSkpIHsKLSAgICAgICAg
ICAgIG9iai0+bWV0aG9kVGFibGUodm0pLT5kb1B1dFByb3BlcnR5U2VjdXJpdHlDaGVjayhvYmos
IGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCBzbG90KTsKLSAgICAgICAgICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIGZhbHNlKTsKKyAgICAgICAgaWYgKG9iaiAhPSB0aGlzICYmIHN0
cnVjdHVyZS0+dHlwZUluZm8oKS5pbnRlcmNlcHRzUHV0RXZlbldoZW5SZWNlaXZlcklzQWx0ZXJl
ZCgpKQorICAgICAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCB0cmlTdGF0ZShvYmot
Pm1ldGhvZFRhYmxlKHZtKS0+cHV0KG9iaiwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHZh
bHVlLCBwdXRTbG90KSkpOworCisgICAgICAgIGJvb2wgaGFzUHJvcGVydHkgPSBmYWxzZTsKKyAg
ICAgICAgdW5zaWduZWQgYXR0cmlidXRlcyA9IDA7CisgICAgICAgIEpTVmFsdWUgZ3MgPSBqc1Vu
ZGVmaW5lZCgpOworICAgICAgICBQcm9wZXJ0eU9mZnNldCBnc0NhY2hlYWJsZU9mZnNldCA9IGlu
dmFsaWRPZmZzZXQ7CisKKyAgICAgICAgaWYgKHN0cnVjdHVyZS0+dHlwZUluZm8oKS5vdmVycmlk
ZXNHZXRPd25Qcm9wZXJ0eVNsb3QoKSkgeworICAgICAgICAgICAgUHJvcGVydHlTbG90IGdldFNs
b3Qob2JqLCBQcm9wZXJ0eVNsb3Q6OkludGVybmFsTWV0aG9kVHlwZTo6R2V0T3duUHJvcGVydHkp
OworICAgICAgICAgICAgaGFzUHJvcGVydHkgPSBvYmotPm1ldGhvZFRhYmxlKHZtKS0+Z2V0T3du
UHJvcGVydHlTbG90KG9iaiwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIGdldFNsb3QpOwor
ICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgVHJpU3RhdGU6OkZhbHNlKTsK
KyAgICAgICAgICAgIGlmIChoYXNQcm9wZXJ0eSkgeworICAgICAgICAgICAgICAgIGF0dHJpYnV0
ZXMgPSBnZXRTbG90LmF0dHJpYnV0ZXMoKTsKKworICAgICAgICAgICAgICAgIC8vIFN0cnVjdHVy
ZSBlcXVhbGl0eSBjaGVjayBpcyBuZWNlc3NhcnkgdG8gc2F0aXNmeSB0aGUgaW52YXJpYW50IG9m
IHNsb3dfcGF0aF9wdXRfYnlfaWQuCisgICAgICAgICAgICAgICAgaWYgKGdldFNsb3QuaXNDYWNo
ZWFibGUoKSAmJiBvYmotPnN0cnVjdHVyZSh2bSkgPT0gc3RydWN0dXJlKQorICAgICAgICAgICAg
ICAgICAgICBnc0NhY2hlYWJsZU9mZnNldCA9IGdldFNsb3QuY2FjaGVkT2Zmc2V0KCk7CisgICAg
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBwdXRTbG90LmRpc2FibGVDYWNo
aW5nKCk7CisKKyAgICAgICAgICAgICAgICBpZiAoZ2V0U2xvdC5pc0FjY2Vzc29yKCkpCisgICAg
ICAgICAgICAgICAgICAgIGdzID0gZ2V0U2xvdC5nZXR0ZXJTZXR0ZXIoKTsKKyAgICAgICAgICAg
ICAgICBlbHNlIGlmIChnZXRTbG90LmlzQ3VzdG9tQWNjZXNzb3IoKSkKKyAgICAgICAgICAgICAg
ICAgICAgZ3MgPSBnZXRTbG90LmN1c3RvbUdldHRlclNldHRlcigpOworICAgICAgICAgICAgfQor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZ3NDYWNoZWFibGVPZmZzZXQgPSBzdHJ1Y3R1
cmUtPmdldCh2bSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzKTsKKyAgICAgICAgICAgIGhhc1By
b3BlcnR5ID0gaXNWYWxpZE9mZnNldChnc0NhY2hlYWJsZU9mZnNldCk7CisgICAgICAgICAgICBp
ZiAoaGFzUHJvcGVydHkpCisgICAgICAgICAgICAgICAgZ3MgPSBvYmotPmdldERpcmVjdChnc0Nh
Y2hlYWJsZU9mZnNldCk7CisgICAgICAgICAgICBlbHNlIGlmICghc3RydWN0dXJlLT5zdGF0aWNQ
cm9wZXJ0aWVzUmVpZmllZCgpICYmIHN0cnVjdHVyZS0+Y2xhc3NJbmZvKCktPmhhc1N0YXRpY1Nl
dHRlck9yUmVhZG9ubHlQcm9wZXJ0aWVzKCkpCisgICAgICAgICAgICAgICAgaGFzUHJvcGVydHkg
PSBmaW5kU3RhdGljUHJvcGVydHlGb3JQdXQodm0sIHN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLCBh
dHRyaWJ1dGVzLCBncyk7CiAgICAgICAgIH0KLSAgICAgICAgdW5zaWduZWQgYXR0cmlidXRlczsK
LSAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0dXJlLT5nZXQodm0sIHByb3Bl
cnR5TmFtZSwgYXR0cmlidXRlcyk7Ci0gICAgICAgIGlmIChpc1ZhbGlkT2Zmc2V0KG9mZnNldCkp
IHsKKworICAgICAgICBpZiAoaGFzUHJvcGVydHkpIHsKICAgICAgICAgICAgIGlmIChhdHRyaWJ1
dGVzICYgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5KSB7Ci0gICAgICAgICAgICAgICAgQVNT
RVJUKHRoaXMtPnByb3RvdHlwZUNoYWluTWF5SW50ZXJjZXB0U3RvcmVUbyh2bSwgcHJvcGVydHlO
YW1lKSB8fCBvYmogPT0gdGhpcyk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHR5cGVFcnJvcihn
bG9iYWxPYmplY3QsIHNjb3BlLCBzbG90LmlzU3RyaWN0TW9kZSgpLCBSZWFkb25seVByb3BlcnR5
V3JpdGVFcnJvcik7CisgICAgICAgICAgICAgICAgaWYgKHB1dFNsb3QuaXNTdHJpY3RNb2RlKCkp
CisgICAgICAgICAgICAgICAgICAgIHRocm93VHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUs
IFJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9yKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gVHJp
U3RhdGU6OkZhbHNlOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBKU1ZhbHVlIGdzID0g
b2JqLT5nZXREaXJlY3Qob2Zmc2V0KTsKKyAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gbWFrZSBz
dXJlIHRoYXQgd2UgZGVjaWRlIHRvIGNhY2hlIHRoaXMgcHJvcGVydHkgYmVmb3JlIHdlIHBvdGVu
dGlhbGx5IGV4ZWN1dGUgYXJpYml0cmFyeSBKUy4KICAgICAgICAgICAgIGlmIChncy5pc0dldHRl
clNldHRlcigpKSB7Ci0gICAgICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBtYWtlIHN1cmUgdGhh
dCB3ZSBkZWNpZGUgdG8gY2FjaGUgdGhpcyBwcm9wZXJ0eSBiZWZvcmUgd2UgcG90ZW50aWFsbHkg
ZXhlY3V0ZSBhcmliaXRyYXJ5IEpTLgotICAgICAgICAgICAgICAgIGlmICghdGhpcy0+c3RydWN0
dXJlKHZtKS0+aXNVbmNhY2hlYWJsZURpY3Rpb25hcnkoKSkKLSAgICAgICAgICAgICAgICAgICAg
c2xvdC5zZXRDYWNoZWFibGVTZXR0ZXIob2JqLCBvZmZzZXQpOwotCi0gICAgICAgICAgICAgICAg
Ym9vbCByZXN1bHQgPSBjYWxsU2V0dGVyKGdsb2JhbE9iamVjdCwgc2xvdC50aGlzVmFsdWUoKSwg
Z3MsIHZhbHVlLCBzbG90LmlzU3RyaWN0TW9kZSgpID8gRUNNQU1vZGU6OnN0cmljdCgpIDogRUNN
QU1vZGU6OnNsb3BweSgpKTsKLSAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCBmYWxzZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAg
ICAgICBpZiAoaXNWYWxpZE9mZnNldChnc0NhY2hlYWJsZU9mZnNldCkgJiYgIXRoaXMtPnN0cnVj
dHVyZSh2bSktPmlzVW5jYWNoZWFibGVEaWN0aW9uYXJ5KCkpCisgICAgICAgICAgICAgICAgICAg
IHB1dFNsb3Quc2V0Q2FjaGVhYmxlU2V0dGVyKG9iaiwgZ3NDYWNoZWFibGVPZmZzZXQpOworICAg
ICAgICAgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgdHJpU3RhdGUoY2FsbFNldHRl
cihnbG9iYWxPYmplY3QsIHB1dFNsb3QudGhpc1ZhbHVlKCksIGdzLCB2YWx1ZSwgcHV0U2xvdC5p
c1N0cmljdE1vZGUoKSA/IEVDTUFNb2RlOjpzdHJpY3QoKSA6IEVDTUFNb2RlOjpzbG9wcHkoKSkp
KTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChncy5pc0N1c3RvbUdldHRlclNldHRl
cigpKSB7Ci0gICAgICAgICAgICAgICAgYm9vbCBpc0FjY2Vzc29yID0gYXR0cmlidXRlcyAmIFBy
b3BlcnR5QXR0cmlidXRlOjpDdXN0b21BY2Nlc3NvcjsKICAgICAgICAgICAgICAgICBhdXRvIHNl
dHRlciA9IGpzQ2FzdDxDdXN0b21HZXR0ZXJTZXR0ZXIqPihncy5hc0NlbGwoKSktPnNldHRlcigp
OwotICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgb25seSBiZSBjYWNoaW5nIHRo
ZXNlIGlmIHdlJ3JlIG5vdCBhbiB1bmNhY2hlYWJsZSBkaWN0aW9uYXJ5OgotICAgICAgICAgICAg
ICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTUzNDcKLQot
ICAgICAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgd2UgZGVjaWRlIHRv
IGNhY2hlIHRoaXMgcHJvcGVydHkgYmVmb3JlIHdlIHBvdGVudGlhbGx5IGV4ZWN1dGUgYXJpYml0
cmFyeSBKUy4KLSAgICAgICAgICAgICAgICBpZiAoaXNBY2Nlc3NvcikKLSAgICAgICAgICAgICAg
ICAgICAgc2xvdC5zZXRDdXN0b21BY2Nlc3NvcihvYmosIHNldHRlcik7Ci0gICAgICAgICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBzbG90LnNldEN1c3RvbVZhbHVlKG9iaiwgc2V0
dGVyKTsKLQotICAgICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gY2FsbEN1c3RvbVNldHRlcihn
bG9iYWxPYmplY3QsIHNldHRlciwgaXNBY2Nlc3Nvciwgb2JqLCBzbG90LnRoaXNWYWx1ZSgpLCB2
YWx1ZSk7Ci0gICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZmFsc2Up
OwotICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgIT0gVHJpU3RhdGU6OkluZGV0ZXJtaW5hdGUp
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgPT0gVHJpU3RhdGU6OlRydWU7Cisg
ICAgICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZXMgJiBQcm9wZXJ0eUF0dHJpYnV0ZTo6Q3VzdG9t
QWNjZXNzb3IpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHNldHRlcikgeworICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCF0aGlzLT5zdHJ1Y3R1cmUodm0pLT5pc1VuY2FjaGVhYmxlRGlj
dGlvbmFyeSgpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1dFNsb3Quc2V0Q3VzdG9t
QWNjZXNzb3Iob2JqLCBzZXR0ZXIpOyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgICAgICAgICBzZXR0ZXIoZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlOjplbmNvZGUocHV0U2xvdC50
aGlzVmFsdWUoKSksIEpTVmFsdWU6OmVuY29kZSh2YWx1ZSkpOworICAgICAgICAgICAgICAgICAg
ICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgVHJpU3RhdGU6OkZhbHNlKTsKKyAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gVHJpU3RhdGU6OlRy
dWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChzZXR0ZXIpIHsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLT5zdHJ1Y3R1cmUodm0pLT5pc1VuY2FjaGVhYmxl
RGljdGlvbmFyeSgpKQorICAgICAgICAgICAgICAgICAgICAgICAgcHV0U2xvdC5zZXRDdXN0b21W
YWx1ZShvYmosIHNldHRlcik7CisgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVS
TihzY29wZSwgdHJpU3RhdGUoc2V0dGVyKGdsb2JhbE9iamVjdCwgSlNWYWx1ZTo6ZW5jb2RlKG9i
aiksIEpTVmFsdWU6OmVuY29kZSh2YWx1ZSkpKSk7CisgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgfQotICAgICAgICAgICAgQVNTRVJUKCEoYXR0cmlidXRlcyAmIFByb3BlcnR5QXR0cmli
dXRlOjpBY2Nlc3NvcikpOwotCi0gICAgICAgICAgICAvLyBJZiB0aGVyZSdzIGFuIGV4aXN0aW5n
IHByb3BlcnR5IG9uIHRoZSBiYXNlIG9iamVjdCwgb3Igb24gb25lIG9mIGl0cyAKLSAgICAgICAg
ICAgIC8vIHByb3RvdHlwZXMsIHdlIHNob3VsZCBzdG9yZSB0aGUgcHJvcGVydHkgb24gdGhlICpi
YXNlKiBvYmplY3QuCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBpZiAo
IW9iai0+c3RhdGljUHJvcGVydGllc1JlaWZpZWQodm0pKSB7Ci0gICAgICAgICAgICBpZiAob2Jq
LT5jbGFzc0luZm8odm0pLT5oYXNTdGF0aWNTZXR0ZXJPclJlYWRvbmx5UHJvcGVydGllcygpKSB7
Ci0gICAgICAgICAgICAgICAgaWYgKGF1dG8gZW50cnkgPSBvYmotPmZpbmRQcm9wZXJ0eUhhc2hF
bnRyeSh2bSwgcHJvcGVydHlOYW1lKSkKLSAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BTkRf
UkVUVVJOKHNjb3BlLCBwdXRFbnRyeShnbG9iYWxPYmplY3QsIGVudHJ5LT50YWJsZS0+Y2xhc3NG
b3JUaGlzLCBlbnRyeS0+dmFsdWUsIG9iaiwgdGhpcywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xv
dCkpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGlmIChvYmotPnR5cGUoKSA9
PSBQcm94eU9iamVjdFR5cGUpIHsKLSAgICAgICAgICAgIGF1dG8qIHByb3h5ID0ganNDYXN0PFBy
b3h5T2JqZWN0Kj4ob2JqKTsKLSAgICAgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwg
cHJveHktPlByb3h5T2JqZWN0OjpwdXQocHJveHksIGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1l
LCB2YWx1ZSwgc2xvdCkpOwotICAgICAgICB9CisKICAgICAgICAgSlNWYWx1ZSBwcm90b3R5cGUg
PSBvYmotPmdldFByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0KTsKLSAgICAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgZmFsc2UpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCBUcmlTdGF0ZTo6RmFsc2UpOwogICAgICAgICBpZiAocHJvdG90eXBlLmlzTnVsbCgpKQog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIG9iaiA9IGFzT2JqZWN0KHByb3RvdHlwZSk7CiAg
ICAgfQogCi0gICAgaWYgKCFwdXREaXJlY3RJbnRlcm5hbDxQdXRNb2RlUHV0Pih2bSwgcHJvcGVy
dHlOYW1lLCB2YWx1ZSwgMCwgc2xvdCkpCi0gICAgICAgIHJldHVybiB0eXBlRXJyb3IoZ2xvYmFs
T2JqZWN0LCBzY29wZSwgc2xvdC5pc1N0cmljdE1vZGUoKSwgUmVhZG9ubHlQcm9wZXJ0eVdyaXRl
RXJyb3IpOwotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBUcmlTdGF0ZTo6SW5kZXRlcm1p
bmF0ZTsKIH0KIAogYm9vbCBKU09iamVjdDo6cHV0QnlJbmRleChKU0NlbGwqIGNlbGwsIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2
YWx1ZSwgYm9vbCBzaG91bGRUaHJvdykKQEAgLTM4NzMsMzAgKzM4ODUsNiBAQCBib29sIEpTT2Jq
ZWN0OjphbnlPYmplY3RJbkNoYWluTWF5SW50ZXJjCiAgICAgfQogfQogCi1ib29sIEpTT2JqZWN0
Ojpwcm90b3R5cGVDaGFpbk1heUludGVyY2VwdFN0b3JlVG8oVk0mIHZtLCBQcm9wZXJ0eU5hbWUg
cHJvcGVydHlOYW1lKQotewotICAgIGlmIChwYXJzZUluZGV4KHByb3BlcnR5TmFtZSkpCi0gICAg
ICAgIHJldHVybiBhbnlPYmplY3RJbkNoYWluTWF5SW50ZXJjZXB0SW5kZXhlZEFjY2Vzc2VzKHZt
KTsKLSAgICAKLSAgICBmb3IgKEpTT2JqZWN0KiBjdXJyZW50ID0gdGhpczsgOykgewotICAgICAg
ICBKU1ZhbHVlIHByb3RvdHlwZSA9IGN1cnJlbnQtPmdldFByb3RvdHlwZURpcmVjdCh2bSk7Ci0g
ICAgICAgIGlmIChwcm90b3R5cGUuaXNOdWxsKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgIAotICAgICAgICBjdXJyZW50ID0gYXNPYmplY3QocHJvdG90eXBlKTsKLSAgICAg
ICAgCi0gICAgICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXM7Ci0gICAgICAgIFByb3BlcnR5T2Zmc2V0
IG9mZnNldCA9IGN1cnJlbnQtPnN0cnVjdHVyZSh2bSktPmdldCh2bSwgcHJvcGVydHlOYW1lLCBh
dHRyaWJ1dGVzKTsKLSAgICAgICAgaWYgKCFKU0M6OmlzVmFsaWRPZmZzZXQob2Zmc2V0KSkKLSAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAKLSAgICAgICAgaWYgKGF0dHJpYnV0ZXMgJiAo
UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgUHJvcGVydHlBdHRyaWJ1dGU6OkFjY2Vzc29y
KSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIH0KLX0KLQogYm9vbCBKU09iamVjdDo6bmVlZHNTbG93UHV0SW5kZXhpbmcoVk0m
IHZtKSBjb25zdAogewogICAgIHJldHVybiBhbnlPYmplY3RJbkNoYWluTWF5SW50ZXJjZXB0SW5k
ZXhlZEFjY2Vzc2VzKHZtKSB8fCBnbG9iYWxPYmplY3Qodm0pLT5pc0hhdmluZ0FCYWRUaW1lKCk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHJldmlzaW9u
IDI3MTM0MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHdv
cmtpbmcgY29weSkKQEAgLTE3Myw3ICsxNzMsNiBAQCBwdWJsaWM6CiAKICAgICBKU19FWFBPUlRf
UFJJVkFURSBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTT2JqZWN0Kiwg
SlNHbG9iYWxPYmplY3QqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwog
ICAgIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90SW5saW5lKEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVy
dHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKLSAgICBKU19FWFBPUlRfUFJJVkFURV9JRl9BU1NFUlRf
RU5BQkxFRCBzdGF0aWMgdm9pZCBkb1B1dFByb3BlcnR5U2VjdXJpdHlDaGVjayhKU09iamVjdCos
IEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBQdXRQcm9wZXJ0eVNsb3QmKTsKIAogICAg
IC8vIFRoZSBrZXkgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoaXMgYW5kIGdldE93blByb3BlcnR5U2xv
dCBpcyB0aGF0IGdldE93blByb3BlcnR5U2xvdAogICAgIC8vIGN1cnJlbnRseSByZXR1cm5zIGlu
Y29ycmVjdCByZXN1bHRzIGZvciB0aGUgRE9NIHdpbmRvdyAod2l0aCBub24tb3duIHByb3BlcnRp
ZXMpCkBAIC0yMTgsMTIgKzIxNywxMyBAQCBwdWJsaWM6CiAKICAgICBBTFdBWVNfSU5MSU5FIGJv
b2wgcHV0QnlJbmRleElubGluZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCB1aW50NjRf
dCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpCiAgICAgewor
ICAgICAgICBWTSYgdm0gPSBnZXRWTShnbG9iYWxPYmplY3QpOwogICAgICAgICBpZiAoTElLRUxZ
KHByb3BlcnR5TmFtZSA8PSBNQVhfQVJSQVlfSU5ERVgpKQogICAgICAgICAgICAgcmV0dXJuIHB1
dEJ5SW5kZXhJbmxpbmUoZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDx1aW50MzJfdD4ocHJvcGVy
dHlOYW1lKSwgdmFsdWUsIHNob3VsZFRocm93KTsKIAogICAgICAgICBBU1NFUlQocHJvcGVydHlO
YW1lIDw9IG1heFNhZmVJbnRlZ2VyKCkpOwogICAgICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdCh0
aGlzLCBzaG91bGRUaHJvdyk7Ci0gICAgICAgIHJldHVybiBwdXRJbmxpbmVGb3JKU09iamVjdCh0
aGlzLCBnbG9iYWxPYmplY3QsIElkZW50aWZpZXI6OmZyb20oZ2V0Vk0oZ2xvYmFsT2JqZWN0KSwg
cHJvcGVydHlOYW1lKSwgdmFsdWUsIHNsb3QpOworICAgICAgICByZXR1cm4gbWV0aG9kVGFibGUo
dm0pLT5wdXQodGhpcywgZ2xvYmFsT2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tKHZtLCBwcm9wZXJ0
eU5hbWUpLCB2YWx1ZSwgc2xvdCk7CiAgICAgfQogICAgICAgICAKICAgICAvLyBUaGlzIGlzIHNp
bWlsYXIgdG8gdGhlIHB1dERpcmVjdCogbWV0aG9kczoKQEAgLTgxNSw3ICs4MTUsNiBAQCBwdWJs
aWM6CiAgICAgYm9vbCBpc0Zyb3plbihWTSYgdm0pIHsgcmV0dXJuIHN0cnVjdHVyZSh2bSktPmlz
RnJvemVuKHZtKTsgfQogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBhbnlPYmplY3RJbkNo
YWluTWF5SW50ZXJjZXB0SW5kZXhlZEFjY2Vzc2VzKFZNJikgY29uc3Q7Ci0gICAgSlNfRVhQT1JU
X1BSSVZBVEUgYm9vbCBwcm90b3R5cGVDaGFpbk1heUludGVyY2VwdFN0b3JlVG8oVk0mLCBQcm9w
ZXJ0eU5hbWUpOwogICAgIGJvb2wgbmVlZHNTbG93UHV0SW5kZXhpbmcoVk0mKSBjb25zdDsKIAog
cHJpdmF0ZToKQEAgLTk1Miw2ICs5NTEsNyBAQCBwdWJsaWM6CiAKICAgICBib29sIGNhblBlcmZv
cm1GYXN0UHV0SW5saW5lKFZNJiwgUHJvcGVydHlOYW1lKTsKICAgICBib29sIGNhblBlcmZvcm1G
YXN0UHV0SW5saW5lRXhjbHVkaW5nUHJvdG8oVk0mKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBO
RVZFUl9JTkxJTkUgVHJpU3RhdGUgcHV0SW5saW5lTm9uSW5kZXhTbG93KEpTR2xvYmFsT2JqZWN0
KiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmKTsKIAogICAgIGJvb2wg
bWF5QmVQcm90b3R5cGUoKSBjb25zdDsKICAgICB2b2lkIGRpZEJlY29tZVByb3RvdHlwZSgpOwpA
QCAtMTEwNyw4ICsxMTA3LDYgQEAgcHJpdmF0ZToKICAgICB0ZW1wbGF0ZTxQdXRNb2RlPgogICAg
IGJvb2wgcHV0RGlyZWN0SW50ZXJuYWwoVk0mLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIHVuc2ln
bmVkIGF0dHIsIFB1dFByb3BlcnR5U2xvdCYpOwogCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgTkVW
RVJfSU5MSU5FIGJvb2wgcHV0SW5saW5lU2xvdyhKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFt
ZSwgSlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7Ci0KICAgICBib29sIGdldE5vbkluZGV4UHJv
cGVydHlTbG90KEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsK
ICAgICBib29sIGdldE93bk5vbkluZGV4UHJvcGVydHlTbG90KFZNJiwgU3RydWN0dXJlKiwgUHJv
cGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGZp
bGxHZXR0ZXJQcm9wZXJ0eVNsb3QoVk0mLCBQcm9wZXJ0eVNsb3QmLCBKU0NlbGwqLCB1bnNpZ25l
ZCwgUHJvcGVydHlPZmZzZXQpOwpAQCAtMTQyMCw5ICsxNDE4LDkgQEAgQUxXQVlTX0lOTElORSB2
b2lkIEpTT2JqZWN0OjpmaWxsQ3VzdG9tRwogICAgIH0KIAogICAgIGlmIChzdHJ1Y3R1cmUtPmlz
VW5jYWNoZWFibGVEaWN0aW9uYXJ5KCkpCi0gICAgICAgIHNsb3Quc2V0Q3VzdG9tKHRoaXMsIGF0
dHJpYnV0ZXMsIGN1c3RvbUdldHRlclNldHRlci0+Z2V0dGVyKCkpOworICAgICAgICBzbG90LnNl
dEN1c3RvbUdldHRlclNldHRlcih0aGlzLCBhdHRyaWJ1dGVzLCBjdXN0b21HZXR0ZXJTZXR0ZXIp
OwogICAgIGVsc2UKLSAgICAgICAgc2xvdC5zZXRDYWNoZWFibGVDdXN0b20odGhpcywgYXR0cmli
dXRlcywgY3VzdG9tR2V0dGVyU2V0dGVyLT5nZXR0ZXIoKSk7CisgICAgICAgIHNsb3Quc2V0Q2Fj
aGVhYmxlQ3VzdG9tR2V0dGVyU2V0dGVyKHRoaXMsIGF0dHJpYnV0ZXMsIGN1c3RvbUdldHRlclNl
dHRlcik7CiB9CiAKIC8vIEl0IG1heSBzZWVtIGNyYXp5IHRvIGlubGluZSBhIGZ1bmN0aW9uIHRo
aXMgbGFyZ2UsIGVzcGVjaWFsbHkgYSB2aXJ0dWFsIGZ1bmN0aW9uLApAQCAtMTQ0NCwxMCArMTQ0
Miw2IEBAIEFMV0FZU19JTkxJTkUgYm9vbCBKU09iamVjdDo6Z2V0T3duUHJvcGUKIHsKICAgICBy
ZXR1cm4gZ2V0T3duUHJvcGVydHlTbG90SW1wbChvYmplY3QsIGdsb2JhbE9iamVjdCwgcHJvcGVy
dHlOYW1lLCBzbG90KTsKIH0KLQotQUxXQVlTX0lOTElORSB2b2lkIEpTT2JqZWN0Ojpkb1B1dFBy
b3BlcnR5U2VjdXJpdHlDaGVjayhKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlO
YW1lLCBQdXRQcm9wZXJ0eVNsb3QmKQotewotfQogI2VuZGlmCiAKIC8vIEl0IG1heSBzZWVtIGNy
YXp5IHRvIGlubGluZSBhIGZ1bmN0aW9uIHRoaXMgbGFyZ2UgYnV0IGl0IG1ha2VzIGEgYmlnIGRp
ZmZlcmVuY2UKQEAgLTE2MTksNiArMTYxMyw3IEBAIGJvb2wgdmFsaWRhdGVBbmRBcHBseVByb3Bl
cnR5RGVzY3JpcHRvcigKICAgICBjb25zdCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3Is
IGJvb2wgaXNDdXJyZW50RGVmaW5lZCwgY29uc3QgUHJvcGVydHlEZXNjcmlwdG9yJiBjdXJyZW50
LCBib29sIHRocm93RXhjZXB0aW9uKTsKIAogSlNfRVhQT1JUX1BSSVZBVEUgTkVWRVJfSU5MSU5F
IGJvb2wgb3JkaW5hcnlTZXRTbG93KEpTR2xvYmFsT2JqZWN0KiwgSlNPYmplY3QqLCBQcm9wZXJ0
eU5hbWUsIEpTVmFsdWUsIEpTVmFsdWUgcmVjZWl2ZXIsIGJvb2wgc2hvdWxkVGhyb3cpOworSlNf
RVhQT1JUX1BSSVZBVEUgTkVWRVJfSU5MSU5FIGJvb2wgb3JkaW5hcnlTZXREZWZpbmVQcm9wZXJ0
eU9uUmVjZWl2ZXJTbG93KEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSByZWNlaXZlciwgUHJvcGVy
dHlOYW1lLCBKU1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsKIAogLy8gSGVscGVyIGZvciBkZWZp
bmluZyBuYXRpdmUgZnVuY3Rpb25zLCBpZiB5b3UncmUgbm90IHVzaW5nIGEgc3RhdGljIGhhc2gg
dGFibGUuCiAvLyBVc2UgdGhpcyBtYWNybyBmcm9tIHdpdGhpbiBmaW5pc2hDcmVhdGlvbigpIG1l
dGhvZHMgaW4gcHJvdG90eXBlcy4gVGhpcyBhc3N1bWVzCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU09iamVjdElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdElubGluZXMuaAkocmV2aXNpb24gMjcxMzQyKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3RJbmxpbmVzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTgzLDggKzgzLDcgQEAgQUxXQVlTX0lOTElORSBib29sIEpTT2JqZWN0Ojpj
YW5QZXJmb3JtRgogICAgIEpTVmFsdWUgcHJvdG90eXBlOwogICAgIEpTT2JqZWN0KiBvYmogPSB0
aGlzOwogICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0g
b2JqLT5zdHJ1Y3R1cmUodm0pOwotICAgICAgICBpZiAoc3RydWN0dXJlLT5oYXNSZWFkT25seU9y
R2V0dGVyU2V0dGVyUHJvcGVydGllc0V4Y2x1ZGluZ1Byb3RvKCkgfHwgc3RydWN0dXJlLT50eXBl
SW5mbygpLm92ZXJyaWRlc0dldFByb3RvdHlwZSgpKQorICAgICAgICBpZiAob2JqLT5zdHJ1Y3R1
cmUodm0pLT5tYXlJbnRlcmNlcHROb25JbmRleFB1dEV4Y2x1ZGluZ1Byb3RvKCkpCiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgcHJvdG90eXBlID0gb2JqLT5nZXRQcm90b3R5
cGVEaXJlY3Qodm0pOwpAQCAtMjQ4LDcgKzI0Nyw3IEBAIEFMV0FZU19JTkxJTkUgUHJvcGVydHlP
ZmZzZXQgSlNPYmplY3Q6OnAKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi0vLyBFQ01BIDguNi4y
LjIKKy8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb3JkaW5hcnlzZXQKIEFMV0FZU19J
TkxJTkUgYm9vbCBKU09iamVjdDo6cHV0SW5saW5lRm9ySlNPYmplY3QoSlNDZWxsKiBjZWxsLCBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBK
U1ZhbHVlIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgVk0mIHZtID0gZ2V0
Vk0oZ2xvYmFsT2JqZWN0KTsKQEAgLTI1OCwyMiArMjU3LDI4IEBAIEFMV0FZU19JTkxJTkUgYm9v
bCBKU09iamVjdDo6cHV0SW5saW5lRm8KICAgICBBU1NFUlQodmFsdWUpOwogICAgIEFTU0VSVCgh
SGVhcDo6aGVhcCh2YWx1ZSkgfHwgSGVhcDo6aGVhcCh2YWx1ZSkgPT0gSGVhcDo6aGVhcCh0aGlz
T2JqZWN0KSk7CiAKLSAgICBpZiAoVU5MSUtFTFkoaXNUaGlzVmFsdWVBbHRlcmVkKHNsb3QsIHRo
aXNPYmplY3QpKSkKLSAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBvcmRpbmFyeVNl
dFNsb3coZ2xvYmFsT2JqZWN0LCB0aGlzT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90
LnRoaXNWYWx1ZSgpLCBzbG90LmlzU3RyaWN0TW9kZSgpKSk7Ci0KICAgICAvLyBUcnkgaW5kZXhl
ZCBwdXQgZmlyc3QuIFRoaXMgaXMgcmVxdWlyZWQgZm9yIGNvcnJlY3RuZXNzLCBzaW5jZSBsb2Fk
cyBvbiBwcm9wZXJ0eSBuYW1lcyB0aGF0IGFwcGVhciBsaWtlCiAgICAgLy8gdmFsaWQgaW5kaWNl
cyB3aWxsIG5ldmVyIGxvb2sgaW4gdGhlIG5hbWVkIHByb3BlcnR5IHN0b3JhZ2UuCi0gICAgaWYg
KE9wdGlvbmFsPHVpbnQzMl90PiBpbmRleCA9IHBhcnNlSW5kZXgocHJvcGVydHlOYW1lKSkKKyAg
ICBpZiAoT3B0aW9uYWw8dWludDMyX3Q+IGluZGV4ID0gcGFyc2VJbmRleChwcm9wZXJ0eU5hbWUp
KSB7CisgICAgICAgIGlmIChVTkxJS0VMWShpc1RoaXNWYWx1ZUFsdGVyZWQoc2xvdCwgdGhpc09i
amVjdCkpKQorICAgICAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBvcmRpbmFyeVNl
dFNsb3coZ2xvYmFsT2JqZWN0LCB0aGlzT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90
LnRoaXNWYWx1ZSgpLCBzbG90LmlzU3RyaWN0TW9kZSgpKSk7CiAgICAgICAgIFJFTEVBU0VfQU5E
X1JFVFVSTihzY29wZSwgcHV0QnlJbmRleCh0aGlzT2JqZWN0LCBnbG9iYWxPYmplY3QsIGluZGV4
LnZhbHVlKCksIHZhbHVlLCBzbG90LmlzU3RyaWN0TW9kZSgpKSk7CisgICAgfQogCi0gICAgaWYg
KHRoaXNPYmplY3QtPmNhblBlcmZvcm1GYXN0UHV0SW5saW5lKHZtLCBwcm9wZXJ0eU5hbWUpKSB7
Ci0gICAgICAgIEFTU0VSVCghdGhpc09iamVjdC0+cHJvdG90eXBlQ2hhaW5NYXlJbnRlcmNlcHRT
dG9yZVRvKHZtLCBwcm9wZXJ0eU5hbWUpKTsKLSAgICAgICAgaWYgKCF0aGlzT2JqZWN0LT5wdXRE
aXJlY3RJbnRlcm5hbDxQdXRNb2RlUHV0Pih2bSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgMCwgc2xv
dCkpCi0gICAgICAgICAgICByZXR1cm4gdHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsIHNs
b3QuaXNTdHJpY3RNb2RlKCksIFJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9yKTsKLSAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgaWYgKCF0aGlzT2JqZWN0LT5jYW5QZXJmb3JtRmFzdFB1dElubGlu
ZSh2bSwgcHJvcGVydHlOYW1lKSkgeworICAgICAgICBUcmlTdGF0ZSBzdGF0dXMgPSB0aGlzT2Jq
ZWN0LT5wdXRJbmxpbmVOb25JbmRleFNsb3coZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHZh
bHVlLCBzbG90KTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZmFsc2UpOwor
ICAgICAgICBpZiAoc3RhdHVzICE9IFRyaVN0YXRlOjpJbmRldGVybWluYXRlKQorICAgICAgICAg
ICAgcmV0dXJuIHN0YXR1cyA9PSBUcmlTdGF0ZTo6VHJ1ZTsKICAgICB9CiAKLSAgICBSRUxFQVNF
X0FORF9SRVRVUk4oc2NvcGUsIHRoaXNPYmplY3QtPnB1dElubGluZVNsb3coZ2xvYmFsT2JqZWN0
LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KSk7CisgICAgaWYgKFVOTElLRUxZKGlzVGhpc1Zh
bHVlQWx0ZXJlZChzbG90LCB0aGlzT2JqZWN0KSkpCisgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVS
TihzY29wZSwgb3JkaW5hcnlTZXREZWZpbmVQcm9wZXJ0eU9uUmVjZWl2ZXJTbG93KGdsb2JhbE9i
amVjdCwgc2xvdC50aGlzVmFsdWUoKSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdC5pc1N0cmlj
dE1vZGUoKSkpOworCisgICAgLy8gRklYTUU6IEZvciBhIGZhaWx1cmUgZHVlIHRvIG5vbi1leHRl
bnNpYmxlIHN0cnVjdHVyZSwgdGhlIGVycm9yIG1lc3NhZ2UgaXMgbWlzbGVhZGluZy4KKyAgICBp
ZiAoIXRoaXNPYmplY3QtPnB1dERpcmVjdEludGVybmFsPFB1dE1vZGVQdXQ+KHZtLCBwcm9wZXJ0
eU5hbWUsIHZhbHVlLCAwLCBzbG90KSkKKyAgICAgICAgcmV0dXJuIHR5cGVFcnJvcihnbG9iYWxP
YmplY3QsIHNjb3BlLCBzbG90LmlzU3RyaWN0TW9kZSgpLCBSZWFkb25seVByb3BlcnR5V3JpdGVF
cnJvcik7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIC8vIEhhc093blByb3BlcnR5KE8sIFApIGZy
b20gc2VjdGlvbiA3LjMuMTEgaW4gdGhlIHNwZWMuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1Byb3h5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNQcm94eS5oCShyZXZpc2lvbiAyNzEzNDIpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU1Byb3h5LmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDcgQEAg
bmFtZXNwYWNlIEpTQyB7CiBjbGFzcyBKU1Byb3h5IDogcHVibGljIEpTTm9uRmluYWxPYmplY3Qg
ewogcHVibGljOgogICAgIHVzaW5nIEJhc2UgPSBKU05vbkZpbmFsT2JqZWN0OwotICAgIHN0YXRp
YyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFn
cyB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5
TmFtZXMgfCBPdmVycmlkZXNHZXRQcm90b3R5cGUgfCBJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlT
bG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvOworICAgIHN0YXRpYyBjb25zdGV4cHIg
dW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IE92ZXJyaWRl
c0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5TmFtZXMgfCBPdmVy
cmlkZXNHZXRQcm90b3R5cGUgfCBJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2
ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgSW50ZXJjZXB0c1B1dEV2ZW5XaGVuUmVjZWl2ZXJJc0Fs
dGVyZWQ7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+
CiAgICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGVJbmZvLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlSW5mby5oCShyZXZpc2lvbiAyNzEzNDIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGVJbmZvLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTU3LDcgKzU3LDcgQEAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBJc0ltbXV0
YWJsZVBybwogc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBHZXRPd25Qcm9wZXJ0eVNsb3RJc0lt
cHVyZUZvclByb3BlcnR5QWJzZW5jZSA9IDEgPDwgMTU7CiBzdGF0aWMgY29uc3RleHByIHVuc2ln
bmVkIEludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05v
dFplcm8gPSAxIDw8IDE2Owogc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVJc0lt
bW9ydGFsID0gMSA8PCAxNzsKLXN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgSGFzUHV0UHJvcGVy
dHlTZWN1cml0eUNoZWNrID0gMSA8PCAxODsKK3N0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgSW50
ZXJjZXB0c1B1dEV2ZW5XaGVuUmVjZWl2ZXJJc0FsdGVyZWQgPSAxIDw8IDE4Owogc3RhdGljIGNv
bnN0ZXhwciB1bnNpZ25lZCBPdmVycmlkZXNHZXRQcm90b3R5cGUgPSAxIDw8IDE5OwogCiBzdGF0
aWMgY29uc3RleHByIHVuc2lnbmVkIG51bWJlck9mSW5saW5lQml0cyA9IDg7CkBAIC0xMDUsMTAg
KzEwNSwxMCBAQCBwdWJsaWM6CiAgICAgYm9vbCBwcm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmcoKSBj
b25zdCB7IHJldHVybiBpc1NldE9uRmxhZ3MyPFByb2hpYml0c1Byb3BlcnR5Q2FjaGluZz4oKTsg
fQogICAgIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90SXNJbXB1cmUoKSBjb25zdCB7IHJldHVybiBp
c1NldE9uRmxhZ3MyPEdldE93blByb3BlcnR5U2xvdElzSW1wdXJlPigpOyB9CiAgICAgYm9vbCBn
ZXRPd25Qcm9wZXJ0eVNsb3RJc0ltcHVyZUZvclByb3BlcnR5QWJzZW5jZSgpIGNvbnN0IHsgcmV0
dXJuIGlzU2V0T25GbGFnczI8R2V0T3duUHJvcGVydHlTbG90SXNJbXB1cmVGb3JQcm9wZXJ0eUFi
c2VuY2U+KCk7IH0KLSAgICBib29sIGhhc1B1dFByb3BlcnR5U2VjdXJpdHlDaGVjaygpIGNvbnN0
IHsgcmV0dXJuIGlzU2V0T25GbGFnczI8SGFzUHV0UHJvcGVydHlTZWN1cml0eUNoZWNrPigpOyB9
CiAgICAgYm9vbCBuZXdJbXB1cmVQcm9wZXJ0eUZpcmVzV2F0Y2hwb2ludHMoKSBjb25zdCB7IHJl
dHVybiBpc1NldE9uRmxhZ3MyPE5ld0ltcHVyZVByb3BlcnR5RmlyZXNXYXRjaHBvaW50cz4oKTsg
fQogICAgIGJvb2wgaXNJbW11dGFibGVQcm90b3R5cGVFeG90aWNPYmplY3QoKSBjb25zdCB7IHJl
dHVybiBpc1NldE9uRmxhZ3MyPElzSW1tdXRhYmxlUHJvdG90eXBlRXhvdGljT2JqZWN0PigpOyB9
CiAgICAgYm9vbCBpbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVu
Z3RoSXNOb3RaZXJvKCkgY29uc3QgeyByZXR1cm4gaXNTZXRPbkZsYWdzMjxJbnRlcmNlcHRzR2V0
T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvPigpOyB9CisgICAg
Ym9vbCBpbnRlcmNlcHRzUHV0RXZlbldoZW5SZWNlaXZlcklzQWx0ZXJlZCgpIGNvbnN0IHsgcmV0
dXJuIGlzU2V0T25GbGFnczI8SW50ZXJjZXB0c1B1dEV2ZW5XaGVuUmVjZWl2ZXJJc0FsdGVyZWQ+
KCk7IH0KIAogICAgIHN0YXRpYyBib29sIGlzQXJndW1lbnRzVHlwZShKU1R5cGUgdHlwZSkKICAg
ICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Mb29rdXAuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xvb2t1cC5jcHAJKHJldmlz
aW9uIDI3MTM0MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xvb2t1cC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTY2LDggKzY2LDEzIEBAIGJvb2wgc2V0VXBTdGF0aWNGdW5jdGlv
blNsb3QoVk0mIHZtLCBjb24KICAgICAgICAgfQogICAgIH0KIAorICAgIEpTVmFsdWUgdmFsdWUg
PSB0aGlzT2JqZWN0LT5nZXREaXJlY3Qob2Zmc2V0KTsKKyAgICAvLyBGSVhNRTogV2Ugc2hvdWxk
IG9ubHkgYmUgY2FjaGluZyB0aGVzZSBpZiB3ZSdyZSBub3QgYW4gdW5jYWNoZWFibGUgZGljdGlv
bmFyeToKKyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE1
MzQ3CiAgICAgaWYgKGlzQWNjZXNzb3IpCi0gICAgICAgIHNsb3Quc2V0Q2FjaGVhYmxlR2V0dGVy
U2xvdCh0aGlzT2JqZWN0LCBhdHRyaWJ1dGVzLCBqc0Nhc3Q8R2V0dGVyU2V0dGVyKj4odGhpc09i
amVjdC0+Z2V0RGlyZWN0KG9mZnNldCkpLCBvZmZzZXQpOworICAgICAgICBzbG90LnNldENhY2hl
YWJsZUdldHRlclNsb3QodGhpc09iamVjdCwgYXR0cmlidXRlcywganNDYXN0PEdldHRlclNldHRl
cio+KHZhbHVlKSwgb2Zmc2V0KTsKKyAgICBlbHNlIGlmICh2YWx1ZS5pc0N1c3RvbUdldHRlclNl
dHRlcigpKQorICAgICAgICBzbG90LnNldENhY2hlYWJsZUN1c3RvbUdldHRlclNldHRlcih0aGlz
T2JqZWN0LCBhdHRyaWJ1dGVzLCBqc0Nhc3Q8Q3VzdG9tR2V0dGVyU2V0dGVyKj4odmFsdWUpKTsK
ICAgICBlbHNlCiAgICAgICAgIHNsb3Quc2V0VmFsdWUodGhpc09iamVjdCwgYXR0cmlidXRlcywg
dGhpc09iamVjdC0+Z2V0RGlyZWN0KG9mZnNldCksIG9mZnNldCk7CiAgICAgcmV0dXJuIHRydWU7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Mb29rdXAuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Mb29rdXAuaAkocmV2aXNpb24gMjcx
MzQyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTG9va3VwLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI2Myw2OCArMjYzLDI4IEBAIGlubGluZSBib29sIHJlcGxhY2VTdGF0aWNQcm9w
ZXJ0eVNsb3QoVk0KICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotLy8gJ2Jhc2UnIG1lYW5zIHRoZSBv
YmplY3QgaG9sZGluZyB0aGUgcHJvcGVydHkgKHBvc3NpYmx5IGluIHRoZSBwcm90b3R5cGUgY2hh
aW4gb2YgdGhlIG9iamVjdCBwdXQgd2FzIGNhbGxlZCBvbikuCi0vLyAndGhpc1ZhbHVlJyBpcyB0
aGUgb2JqZWN0IHRoYXQgcHV0IGlzIGJlaW5nIGFwcGxpZWQgdG8gKGluIHRoZSBjYXNlIG9mIGEg
cHJveHksIHRoZSBwcm94eSB0YXJnZXQpLgotLy8gJ3Nsb3QudGhpc1ZhbHVlKCknIGlzIHRoZSBv
YmplY3QgdGhlIHB1dCB3YXMgb3JpZ2luYWxseSBwZXJmb3JtZWQgb24gKGluIHRoZSBjYXNlIG9m
IGEgcHJveHksIHRoZSBwcm94eSBpdHNlbGYpLgotaW5saW5lIGJvb2wgcHV0RW50cnkoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgQ2xhc3NJbmZvKiwgY29uc3QgSGFzaFRhYmxl
VmFsdWUqIGVudHJ5LCBKU09iamVjdCogYmFzZSwgSlNPYmplY3QqIHRoaXNWYWx1ZSwgUHJvcGVy
dHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBzbG90
KQoraW5saW5lIGJvb2wgZmluZFN0YXRpY1Byb3BlcnR5Rm9yUHV0KFZNJiB2bSwgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIHVuc2lnbmVkJiBhdHRyaWJ1
dGVzLCBKU1ZhbHVlJiBnZXR0ZXJTZXR0ZXIpCiB7Ci0gICAgVk0mIHZtID0gZ2V0Vk0oZ2xvYmFs
T2JqZWN0KTsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAg
QVNTRVJUKCFzdHJ1Y3R1cmUtPnN0YXRpY1Byb3BlcnRpZXNSZWlmaWVkKCkpOwogCi0gICAgaWYg
KGVudHJ5LT5hdHRyaWJ1dGVzKCkgJiBQcm9wZXJ0eUF0dHJpYnV0ZTo6QnVpbHRpbk9yRnVuY3Rp
b25PckxhenlQcm9wZXJ0eSkgewotICAgICAgICBpZiAoIShlbnRyeS0+YXR0cmlidXRlcygpICYg
UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5KSkgewotICAgICAgICAgICAgLy8gSWYgdGhpcyBp
cyBhIGZ1bmN0aW9uIG9yIGxhenkgcHJvcGVydHkgcHV0IHRoZW4gd2UganVzdCBkbyB0aGUgcHV0
IGJlY2F1c2UKLSAgICAgICAgICAgIC8vIGxvZ2ljYWxseSB0aGUgb2JqZWN0IGFscmVhZHkgaGFk
IHRoZSBwcm9wZXJ0eSwgc28gdGhpcyBpcyBqdXN0IGEgcmVwbGFjZS4KLSAgICAgICAgICAgIC8v
IEZJWE1FOiB0aGlzVmFsdWUgbWF5IGJlIGFuIG9iamVjdCB3aXRoIG5vbi1leHRlbnNpYmxlIHN0
cnVjdHVyZSB3ZSBtdXN0IHRocm93IGZvci4KLSAgICAgICAgICAgIGlmIChKU09iamVjdCogdGhp
c09iamVjdCA9IGpzRHluYW1pY0Nhc3Q8SlNPYmplY3QqPih2bSwgdGhpc1ZhbHVlKSkKLSAgICAg
ICAgICAgICAgICB0aGlzT2JqZWN0LT5wdXREaXJlY3Qodm0sIHByb3BlcnR5TmFtZSwgdmFsdWUp
OworICAgIGlmIChhdXRvIGVudHJ5ID0gc3RydWN0dXJlLT5maW5kUHJvcGVydHlIYXNoRW50cnko
cHJvcGVydHlOYW1lKSkgeworICAgICAgICBjb25zdCBIYXNoVGFibGVWYWx1ZSogdmFsdWUgPSBl
bnRyeS0+dmFsdWU7CisgICAgICAgIGF0dHJpYnV0ZXMgPSB2YWx1ZS0+YXR0cmlidXRlcygpOwor
ICAgICAgICBpZiAoYXR0cmlidXRlcyAmIFByb3BlcnR5QXR0cmlidXRlOjpCdWlsdGluT3JGdW5j
dGlvbk9yTGF6eVByb3BlcnR5KQogICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0K
LSAgICAgICAgcmV0dXJuIHR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCBzbG90LmlzU3Ry
aWN0TW9kZSgpLCBSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcik7Ci0gICAgfQogCi0gICAgaWYg
KGVudHJ5LT5hdHRyaWJ1dGVzKCkgJiBQcm9wZXJ0eUF0dHJpYnV0ZTo6QWNjZXNzb3IpCi0gICAg
ICAgIHJldHVybiB0eXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgc2xvdC5pc1N0cmljdE1v
ZGUoKSwgUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpOworICAgICAgICBpZiAoYXR0cmlidXRl
cyAmIFByb3BlcnR5QXR0cmlidXRlOjpBY2Nlc3NvcikKKyAgICAgICAgICAgIGF0dHJpYnV0ZXMg
fD0gUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5OwogCi0gICAgaWYgKCEoZW50cnktPmF0dHJp
YnV0ZXMoKSAmIFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSkpIHsKLSAgICAgICAgQVNTRVJU
X1dJVEhfTUVTU0FHRSghKGVudHJ5LT5hdHRyaWJ1dGVzKCkgJiBQcm9wZXJ0eUF0dHJpYnV0ZTo6
RE9NSklUQXR0cmlidXRlKSwgIkRPTUpJVEF0dHJpYnV0ZSBzdXBwb3J0cyByZWFkb25seSBhdHRy
aWJ1dGVzIGN1cnJlbnRseS4iKTsKLSAgICAgICAgYm9vbCBpc0FjY2Vzc29yID0gZW50cnktPmF0
dHJpYnV0ZXMoKSAmIFByb3BlcnR5QXR0cmlidXRlOjpDdXN0b21BY2Nlc3NvcjsKLSAgICAgICAg
Ly8gRklYTUU6IFdlIHNob3VsZCBvbmx5IGJlIGNhY2hpbmcgdGhlc2UgaWYgd2UncmUgbm90IGFu
IHVuY2FjaGVhYmxlIGRpY3Rpb25hcnk6Ci0gICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMTUzNDcKLSAgICAgICAgLy8gV2UgbmVlZCB0byBtYWtlIHN1
cmUgdGhhdCB3ZSBkZWNpZGUgdG8gY2FjaGUgdGhpcyBwcm9wZXJ0eSBiZWZvcmUgd2UgcG90ZW50
aWFsbHkgZXhlY3V0ZSBhcmliaXRyYXJ5IEpTLgotICAgICAgICBpZiAoaXNBY2Nlc3NvcikKLSAg
ICAgICAgICAgIHNsb3Quc2V0Q3VzdG9tQWNjZXNzb3IoYmFzZSwgZW50cnktPnByb3BlcnR5UHV0
dGVyKCkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzbG90LnNldEN1c3RvbVZhbHVlKGJh
c2UsIGVudHJ5LT5wcm9wZXJ0eVB1dHRlcigpKTsKKyAgICAgICAgaWYgKGF0dHJpYnV0ZXMgJiBQ
cm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKIAot
ICAgICAgICBhdXRvIHJlc3VsdCA9IGNhbGxDdXN0b21TZXR0ZXIoZ2xvYmFsT2JqZWN0LCBlbnRy
eS0+cHJvcGVydHlQdXR0ZXIoKSwgaXNBY2Nlc3NvciwgYmFzZSwgc2xvdC50aGlzVmFsdWUoKSwg
dmFsdWUpOwotICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBmYWxzZSk7Ci0gICAg
ICAgIGlmIChyZXN1bHQgIT0gVHJpU3RhdGU6OkluZGV0ZXJtaW5hdGUpCi0gICAgICAgICAgICBy
ZXR1cm4gcmVzdWx0ID09IFRyaVN0YXRlOjpUcnVlOwotCi0gICAgICAgIC8vIEZJWE1FOiB0aGlz
VmFsdWUgbWF5IGJlIGFuIG9iamVjdCB3aXRoIG5vbi1leHRlbnNpYmxlIHN0cnVjdHVyZSB3ZSBt
dXN0IHRocm93IGZvci4KLSAgICAgICAgaWYgKEpTT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNEeW5h
bWljQ2FzdDxKU09iamVjdCo+KHZtLCB0aGlzVmFsdWUpKQotICAgICAgICAgICAgdGhpc09iamVj
dC0+cHV0RGlyZWN0KHZtLCBwcm9wZXJ0eU5hbWUsIHZhbHVlKTsKKyAgICAgICAgQVNTRVJUX1dJ
VEhfTUVTU0FHRSghKGF0dHJpYnV0ZXMgJiBQcm9wZXJ0eUF0dHJpYnV0ZTo6RE9NSklUQXR0cmli
dXRlKSwgIkRPTUpJVEF0dHJpYnV0ZSBzdXBwb3J0cyByZWFkb25seSBhdHRyaWJ1dGVzIGN1cnJl
bnRseS4iKTsKKyAgICAgICAgZ2V0dGVyU2V0dGVyID0gQ3VzdG9tR2V0dGVyU2V0dGVyOjpjcmVh
dGUodm0sIHZhbHVlLT5wcm9wZXJ0eUdldHRlcigpLCB2YWx1ZS0+cHJvcGVydHlQdXR0ZXIoKSk7
CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIHJldHVybiB0eXBlRXJyb3IoZ2xv
YmFsT2JqZWN0LCBzY29wZSwgc2xvdC5pc1N0cmljdE1vZGUoKSwgUmVhZG9ubHlQcm9wZXJ0eVdy
aXRlRXJyb3IpOwotfQotCi0vKioKLSAqIFRoaXMgb25lIGlzIGZvciAicHV0Ii4KLSAqIEl0IGxv
b2tzIHVwIGEgaGFzaCBlbnRyeSBmb3IgdGhlIHByb3BlcnR5IHRvIGJlIHNldC4gIElmIGFuIGVu
dHJ5Ci0gKiBpcyBmb3VuZCBpdCBzZXRzIHRoZSB2YWx1ZSBhbmQgcmV0dXJucyB0cnVlLCBlbHNl
IGl0IHJldHVybnMgZmFsc2UuCi0gKi8KLWlubGluZSBib29sIGxvb2t1cFB1dChKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU09iamVjdCog
YmFzZSwgSlNWYWx1ZSB2YWx1ZSwgY29uc3QgSGFzaFRhYmxlJiB0YWJsZSwgUHV0UHJvcGVydHlT
bG90JiBzbG90LCBib29sJiBwdXRSZXN1bHQpCi17Ci0gICAgY29uc3QgSGFzaFRhYmxlVmFsdWUq
IGVudHJ5ID0gdGFibGUuZW50cnkocHJvcGVydHlOYW1lKTsKLQotICAgIGlmICghZW50cnkpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHB1dFJlc3VsdCA9IHB1dEVudHJ5KGdsb2JhbE9i
amVjdCwgdGFibGUuY2xhc3NGb3JUaGlzLCBlbnRyeSwgYmFzZSwgYmFzZSwgcHJvcGVydHlOYW1l
LCB2YWx1ZSwgc2xvdCk7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIGZhbHNlOwogfQog
CiBpbmxpbmUgdm9pZCByZWlmeVN0YXRpY1Byb3BlcnR5KFZNJiB2bSwgY29uc3QgQ2xhc3NJbmZv
KiBjbGFzc0luZm8sIGNvbnN0IFByb3BlcnR5TmFtZSYgcHJvcGVydHlOYW1lLCBjb25zdCBIYXNo
VGFibGVWYWx1ZSYgdmFsdWUsIEpTT2JqZWN0JiB0aGlzT2JqKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlTbG90LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eVNsb3QuY3BwCShyZXZpc2lvbiAyNzEzNDIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eVNsb3QuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC01MSwxNCArNTEsMTUgQEAgSlNWYWx1ZSBQcm9wZXJ0eVNsb3Q6OmN1c3Rv
bUFjY2Vzc29yR2V0dAogICAgIGlmICghbV9kYXRhLmN1c3RvbUFjY2Vzc29yLmdldHRlclNldHRl
ci0+Z2V0dGVyKCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCisgICAgSlNWYWx1
ZSB0aGlzVmFsdWUgPSBtX2F0dHJpYnV0ZXMgJiBQcm9wZXJ0eUF0dHJpYnV0ZTo6Q3VzdG9tQWNj
ZXNzb3IgPyBtX3RoaXNWYWx1ZSA6IEpTVmFsdWUoc2xvdEJhc2UoKSk7CiAgICAgaWYgKGF1dG8g
ZG9tQXR0cmlidXRlID0gdGhpcy0+ZG9tQXR0cmlidXRlKCkpIHsKICAgICAgICAgVk0mIHZtID0g
Z2xvYmFsT2JqZWN0LT52bSgpOwotICAgICAgICBpZiAoIW1fdGhpc1ZhbHVlLmluaGVyaXRzKHZt
LCBkb21BdHRyaWJ1dGUtPmNsYXNzSW5mbykpIHsKKyAgICAgICAgaWYgKCF0aGlzVmFsdWUuaW5o
ZXJpdHModm0sIGRvbUF0dHJpYnV0ZS0+Y2xhc3NJbmZvKSkgewogICAgICAgICAgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgICAgICAgICAgcmV0dXJuIHRocm93
RE9NQXR0cmlidXRlR2V0dGVyVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsIGRvbUF0dHJp
YnV0ZS0+Y2xhc3NJbmZvLCBwcm9wZXJ0eU5hbWUpOwogICAgICAgICB9CiAgICAgfQotICAgIHJl
dHVybiBKU1ZhbHVlOjpkZWNvZGUobV9kYXRhLmN1c3RvbUFjY2Vzc29yLmdldHRlclNldHRlci0+
Z2V0dGVyKCkoZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlOjplbmNvZGUobV90aGlzVmFsdWUpLCBwcm9w
ZXJ0eU5hbWUpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZGVjb2RlKG1fZGF0YS5jdXN0b21BY2Nl
c3Nvci5nZXR0ZXJTZXR0ZXItPmdldHRlcigpKGdsb2JhbE9iamVjdCwgSlNWYWx1ZTo6ZW5jb2Rl
KHRoaXNWYWx1ZSksIHByb3BlcnR5TmFtZSkpOwogfQogCiBKU1ZhbHVlIFByb3BlcnR5U2xvdDo6
Z2V0UHVyZVJlc3VsdCgpIGNvbnN0CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9Qcm9wZXJ0eVNsb3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Qcm9wZXJ0eVNsb3QuaAkocmV2aXNpb24gMjcxMzQyKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvUHJvcGVydHlTbG90LmgJKHdvcmtpbmcgY29weSkKQEAgLTEzMiw3ICsx
MzIsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc1Vuc2V0KCkgY29uc3QgeyByZXR1cm4gbV9wcm9w
ZXJ0eVR5cGUgPT0gVHlwZVVuc2V0OyB9CiAgICAgYm9vbCBpc1ZhbHVlKCkgY29uc3QgeyByZXR1
cm4gbV9wcm9wZXJ0eVR5cGUgPT0gVHlwZVZhbHVlOyB9CiAgICAgYm9vbCBpc0FjY2Vzc29yKCkg
Y29uc3QgeyByZXR1cm4gbV9wcm9wZXJ0eVR5cGUgPT0gVHlwZUdldHRlcjsgfQotICAgIGJvb2wg
aXNDdXN0b20oKSBjb25zdCB7IHJldHVybiBtX3Byb3BlcnR5VHlwZSA9PSBUeXBlQ3VzdG9tOyB9
CisgICAgYm9vbCBpc0N1c3RvbSgpIGNvbnN0IHsgcmV0dXJuIG1fcHJvcGVydHlUeXBlID09IFR5
cGVDdXN0b20gfHwgbV9wcm9wZXJ0eVR5cGUgPT0gVHlwZUN1c3RvbUFjY2Vzc29yOyB9CiAgICAg
Ym9vbCBpc0N1c3RvbUFjY2Vzc29yKCkgY29uc3QgeyByZXR1cm4gbV9wcm9wZXJ0eVR5cGUgPT0g
VHlwZUN1c3RvbUFjY2Vzc29yOyB9CiAgICAgYm9vbCBpc0NhY2hlYWJsZVZhbHVlKCkgY29uc3Qg
eyByZXR1cm4gaXNDYWNoZWFibGUoKSAmJiBpc1ZhbHVlKCk7IH0KICAgICBib29sIGlzQ2FjaGVh
YmxlR2V0dGVyKCkgY29uc3QgeyByZXR1cm4gaXNDYWNoZWFibGUoKSAmJiBpc0FjY2Vzc29yKCk7
IH0KQEAgLTE2MiwxMSArMTYyLDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9kYXRhLmdl
dHRlci5nZXR0ZXJTZXR0ZXI7CiAgICAgfQogCi0gICAgR2V0VmFsdWVGdW5jIGN1c3RvbUdldHRl
cigpIGNvbnN0Ci0gICAgewotICAgICAgICBBU1NFUlQoaXNDYWNoZWFibGVDdXN0b20oKSk7Ci0g
ICAgICAgIHJldHVybiBtX2RhdGEuY3VzdG9tLmdldFZhbHVlOwotICAgIH0KKyAgICBHZXRWYWx1
ZUZ1bmMgY3VzdG9tR2V0dGVyKCkgY29uc3Q7CiAKICAgICBDdXN0b21HZXR0ZXJTZXR0ZXIqIGN1
c3RvbUdldHRlclNldHRlcigpIGNvbnN0CiAgICAgewpAQCAtMzAzLDcgKzI5OSw3IEBAIHB1Ymxp
YzoKICAgICB2b2lkIHNldEN1c3RvbUdldHRlclNldHRlcihKU09iamVjdCogc2xvdEJhc2UsIHVu
c2lnbmVkIGF0dHJpYnV0ZXMsIEN1c3RvbUdldHRlclNldHRlciogZ2V0dGVyU2V0dGVyKQogICAg
IHsKICAgICAgICAgQVNTRVJUKGF0dHJpYnV0ZXMgPT0gYXR0cmlidXRlc0ZvclN0cnVjdHVyZShh
dHRyaWJ1dGVzKSk7Ci0gICAgICAgIEFTU0VSVChhdHRyaWJ1dGVzICYgUHJvcGVydHlBdHRyaWJ1
dGU6OkN1c3RvbUFjY2Vzc29yKTsKKyAgICAgICAgQVNTRVJUKGF0dHJpYnV0ZXMgJiBQcm9wZXJ0
eUF0dHJpYnV0ZTo6Q3VzdG9tQWNjZXNzb3JPclZhbHVlKTsKIAogICAgICAgICBkaXNhYmxlQ2Fj
aGluZygpOwogCkBAIC0zMTgsNiArMzE0LDIyIEBAIHB1YmxpYzoKICAgICAgICAgQVNTRVJUKG1f
Y2FjaGVhYmlsaXR5ID09IENhY2hpbmdEaXNhbGxvd2VkKTsKICAgICB9CiAKKyAgICB2b2lkIHNl
dENhY2hlYWJsZUN1c3RvbUdldHRlclNldHRlcihKU09iamVjdCogc2xvdEJhc2UsIHVuc2lnbmVk
IGF0dHJpYnV0ZXMsIEN1c3RvbUdldHRlclNldHRlciogZ2V0dGVyU2V0dGVyKQorICAgIHsKKyAg
ICAgICAgQVNTRVJUKGF0dHJpYnV0ZXMgPT0gYXR0cmlidXRlc0ZvclN0cnVjdHVyZShhdHRyaWJ1
dGVzKSk7CisgICAgICAgIEFTU0VSVChhdHRyaWJ1dGVzICYgUHJvcGVydHlBdHRyaWJ1dGU6OkN1
c3RvbUFjY2Vzc29yT3JWYWx1ZSk7CisgICAgICAgIAorICAgICAgICBBU1NFUlQoZ2V0dGVyU2V0
dGVyKTsKKyAgICAgICAgbV9kYXRhLmN1c3RvbUFjY2Vzc29yLmdldHRlclNldHRlciA9IGdldHRl
clNldHRlcjsKKyAgICAgICAgbV9hdHRyaWJ1dGVzID0gYXR0cmlidXRlczsKKworICAgICAgICBB
U1NFUlQoc2xvdEJhc2UpOworICAgICAgICBtX3Nsb3RCYXNlID0gc2xvdEJhc2U7CisgICAgICAg
IG1fcHJvcGVydHlUeXBlID0gVHlwZUN1c3RvbUFjY2Vzc29yOworCisgICAgICAgIG1fY2FjaGVh
YmlsaXR5ID0gQ2FjaGluZ0FsbG93ZWQ7CisgICAgfQorCiAgICAgdm9pZCBzZXRHZXR0ZXJTbG90
KEpTT2JqZWN0KiBzbG90QmFzZSwgdW5zaWduZWQgYXR0cmlidXRlcywgR2V0dGVyU2V0dGVyKiBn
ZXR0ZXJTZXR0ZXIpCiAgICAgewogICAgICAgICBBU1NFUlQoYXR0cmlidXRlcyA9PSBhdHRyaWJ1
dGVzRm9yU3RydWN0dXJlKGF0dHJpYnV0ZXMpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1Byb3BlcnR5U2xvdElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eVNsb3RJbmxpbmVzLmgJKG5vbmV4aXN0ZW50KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlTbG90SW5saW5lcy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUt
MjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkN1c3Rv
bUdldHRlclNldHRlci5oIgorI2luY2x1ZGUgIlByb3BlcnR5U2xvdC5oIgorCituYW1lc3BhY2Ug
SlNDIHsKKworQUxXQVlTX0lOTElORSBQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYyBQcm9wZXJ0
eVNsb3Q6OmN1c3RvbUdldHRlcigpIGNvbnN0Cit7CisgICAgQVNTRVJUKGlzQ2FjaGVhYmxlQ3Vz
dG9tKCkpOworICAgIHJldHVybiBpc0N1c3RvbUFjY2Vzc29yKCkgPyBtX2RhdGEuY3VzdG9tQWNj
ZXNzb3IuZ2V0dGVyU2V0dGVyLT5nZXR0ZXIoKSA6IG1fZGF0YS5jdXN0b20uZ2V0VmFsdWU7Cit9
CisKK30gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvUHJveHlPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Qcm94eU9iamVjdC5oCShyZXZpc2lvbiAyNzEzNDIpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9Qcm94eU9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw3
IEBAIGNsYXNzIFByb3h5T2JqZWN0IGZpbmFsIDogcHVibGljIEpTTm9uRmkKIHB1YmxpYzoKICAg
ICB0eXBlZGVmIEpTTm9uRmluYWxPYmplY3QgQmFzZTsKIAotICAgIHN0YXRpYyBjb25zdGV4cHIg
dW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IE92ZXJyaWRl
c0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5TmFtZXMgfCBPdmVy
cmlkZXNHZXRQcm90b3R5cGUgfCBPdmVycmlkZXNHZXRDYWxsRGF0YSB8IEludGVyY2VwdHNHZXRP
d25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8gfCBQcm9oaWJpdHNQ
cm9wZXJ0eUNhY2hpbmc7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVG
bGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90
IHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlOYW1lcyB8IE92ZXJyaWRlc0dldFByb3RvdHlwZSB8
IE92ZXJyaWRlc0dldENhbGxEYXRhIHwgSW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5k
ZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8IEludGVyY2VwdHNQdXRFdmVuV2hlblJlY2VpdmVy
SXNBbHRlcmVkIHwgUHJvaGliaXRzUHJvcGVydHlDYWNoaW5nOwogCiAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+CiAgICAgc3RhdGljIElzb1N1YnNw
YWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9SZWdFeHBPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5jcHAJKHJldmlzaW9uIDI3MTM0MikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEzNCw3ICsxMzQsNyBAQCBib29sIFJlZ0V4cE9iamVjdDo6cHV0KEpTQ2VsbCogY2VsbCwgSlNH
CiAgICAgUmVnRXhwT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PFJlZ0V4cE9iamVjdCo+KGNl
bGwpOwogCiAgICAgaWYgKFVOTElLRUxZKGlzVGhpc1ZhbHVlQWx0ZXJlZChzbG90LCB0aGlzT2Jq
ZWN0KSkpCi0gICAgICAgIHJldHVybiBvcmRpbmFyeVNldFNsb3coZ2xvYmFsT2JqZWN0LCB0aGlz
T2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90LnRoaXNWYWx1ZSgpLCBzbG90LmlzU3Ry
aWN0TW9kZSgpKTsKKyAgICAgICAgcmV0dXJuIEJhc2U6OnB1dChjZWxsLCBnbG9iYWxPYmplY3Qs
IHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpOwogCiAgICAgaWYgKHByb3BlcnR5TmFtZSA9PSB2
bS5wcm9wZXJ0eU5hbWVzLT5sYXN0SW5kZXgpIHsKICAgICAgICAgYm9vbCByZXN1bHQgPSB0aGlz
T2JqZWN0LT5zZXRMYXN0SW5kZXgoZ2xvYmFsT2JqZWN0LCB2YWx1ZSwgc2xvdC5pc1N0cmljdE1v
ZGUoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdPYmplY3Qu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ09i
amVjdC5jcHAJKHJldmlzaW9uIDI3MTM0MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1N0cmluZ09iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY5LDcgKzY5LDcgQEAgYm9v
bCBTdHJpbmdPYmplY3Q6OnB1dChKU0NlbGwqIGNlbGwsIEpTRwogICAgIFN0cmluZ09iamVjdCog
dGhpc09iamVjdCA9IGpzQ2FzdDxTdHJpbmdPYmplY3QqPihjZWxsKTsKIAogICAgIGlmIChVTkxJ
S0VMWShpc1RoaXNWYWx1ZUFsdGVyZWQoc2xvdCwgdGhpc09iamVjdCkpKSAKLSAgICAgICAgUkVM
RUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBvcmRpbmFyeVNldFNsb3coZ2xvYmFsT2JqZWN0LCB0aGlz
T2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90LnRoaXNWYWx1ZSgpLCBzbG90LmlzU3Ry
aWN0TW9kZSgpKSk7CisgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgSlNPYmplY3Q6
OnB1dChjZWxsLCBnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpKTsKIAog
ICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoKQogICAgICAg
ICByZXR1cm4gdHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsIHNsb3QuaXNTdHJpY3RNb2Rl
KCksIFJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9yKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAkocmV2aXNpb24gMjcxMzQyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTg5LDExICsxODksNiBAQCB2b2lkIFN0cnVjdHVyZTo6dmFsaWRhdGVGbGFncygpCiAgICAgaWYg
KG92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXgpCiAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKHR5cGVJbmZvKCkuaW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hl
bkxlbmd0aElzTm90WmVybygpKTsKIAotICAgIGJvb2wgb3ZlcnJpZGVzUHV0UHJvcGVydHlTZWN1
cml0eUNoZWNrID0KLSAgICAgICAgbWV0aG9kVGFibGUuZG9QdXRQcm9wZXJ0eVNlY3VyaXR5Q2hl
Y2sgIT0gSlNPYmplY3Q6OmRvUHV0UHJvcGVydHlTZWN1cml0eUNoZWNrCi0gICAgICAgICYmIG1l
dGhvZFRhYmxlLmRvUHV0UHJvcGVydHlTZWN1cml0eUNoZWNrICE9IEpTQ2VsbDo6ZG9QdXRQcm9w
ZXJ0eVNlY3VyaXR5Q2hlY2s7Ci0gICAgUkVMRUFTRV9BU1NFUlQob3ZlcnJpZGVzUHV0UHJvcGVy
dHlTZWN1cml0eUNoZWNrID09IHR5cGVJbmZvKCkuaGFzUHV0UHJvcGVydHlTZWN1cml0eUNoZWNr
KCkpOwotCiAgICAgYm9vbCBvdmVycmlkZXNHZXRPd25Qcm9wZXJ0eU5hbWVzID0KICAgICAgICAg
bWV0aG9kVGFibGUuZ2V0T3duUHJvcGVydHlOYW1lcyAhPSBKU09iamVjdDo6Z2V0T3duUHJvcGVy
dHlOYW1lcwogICAgICAgICAmJiBtZXRob2RUYWJsZS5nZXRPd25Qcm9wZXJ0eU5hbWVzICE9IEpT
Q2VsbDo6Z2V0T3duUHJvcGVydHlOYW1lczsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1N0cnVjdHVyZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1N0cnVjdHVyZS5oCShyZXZpc2lvbiAyNzEzNDIpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAkod29ya2luZyBjb3B5KQpAQCAtMjc1LDYgKzI3NSw3
IEBAIHB1YmxpYzoKICAgICBJbmRleGluZ1R5cGUgaW5kZXhpbmdNb2RlSW5jbHVkaW5nSGlzdG9y
eSgpIGNvbnN0IHsgcmV0dXJuIG1fYmxvYi5pbmRleGluZ01vZGVJbmNsdWRpbmdIaXN0b3J5KCk7
IH0KICAgICAgICAgCiAgICAgaW5saW5lIGJvb2wgbWF5SW50ZXJjZXB0SW5kZXhlZEFjY2Vzc2Vz
KCkgY29uc3Q7CisgICAgaW5saW5lIGJvb2wgbWF5SW50ZXJjZXB0Tm9uSW5kZXhQdXRFeGNsdWRp
bmdQcm90bygpIGNvbnN0OwogICAgIAogICAgIGJvb2wgaG9sZXNNdXN0Rm9yd2FyZFRvUHJvdG90
eXBlKFZNJiwgSlNPYmplY3QqKSBjb25zdDsKICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oCShyZXZpc2lvbiAyNzEz
NDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTg5LDYgKzg5LDE3IEBAIGlubGluZSBib29sIFN0cnVjdHVyZTo6
bWF5SW50ZXJjZXB0SW5kZXgKICAgICByZXR1cm4gZ2xvYmFsT2JqZWN0LT5pc0hhdmluZ0FCYWRU
aW1lKCk7CiB9CiAKK2lubGluZSBib29sIFN0cnVjdHVyZTo6bWF5SW50ZXJjZXB0Tm9uSW5kZXhQ
dXRFeGNsdWRpbmdQcm90bygpIGNvbnN0Cit7CisgICAgaWYgKGhhc1JlYWRPbmx5T3JHZXR0ZXJT
ZXR0ZXJQcm9wZXJ0aWVzRXhjbHVkaW5nUHJvdG8oKSB8fCBoYXNDdXN0b21HZXR0ZXJTZXR0ZXJQ
cm9wZXJ0aWVzKCkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIGlmICh0eXBlSW5mbygpLm92
ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCgpIHx8IHR5cGVJbmZvKCkub3ZlcnJpZGVzR2V0UHJv
dG90eXBlKCkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIGlmICh0eXBlSW5mbygpLmludGVy
Y2VwdHNQdXRFdmVuV2hlblJlY2VpdmVySXNBbHRlcmVkKCkpCisgICAgICAgIHJldHVybiB0cnVl
OworICAgIHJldHVybiBmYWxzZTsKK30KKwogaW5saW5lIEpTT2JqZWN0KiBTdHJ1Y3R1cmU6OnN0
b3JlZFByb3RvdHlwZU9iamVjdCgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGhhc01vbm9Qcm90bygp
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI3MTM0MikKKysrIFNvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIzIEBACisyMDIxLTAxLTEzICBBbGV4
ZXkgU2h2YXlrYSAgPHNodmFpa2FsZXNoQGdtYWlsLmNvbT4KKworICAgICAgICBJbnRyb2R1Y2Ug
T3ZlcnJpZGVzUHV0W0J5SW5kZXhdIHR5cGUgaW5mbyBmbGFncworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE3OTE2CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0N1
c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTVdpbmRvdzo6cHV0KToKKyAgICAgICAg
KFdlYkNvcmU6OkpTRE9NV2luZG93Ojpkb1B1dFByb3BlcnR5U2VjdXJpdHlDaGVjayk6IERlbGV0
ZWQuCisgICAgICAgICogYmluZGluZ3MvanMvSlNMb2NhdGlvbkN1c3RvbS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpKU0xvY2F0aW9uOjpkb1B1dFByb3BlcnR5U2VjdXJpdHlDaGVjayk6IERlbGV0
ZWQuCisgICAgICAgICogYmluZGluZ3MvanMvSlNSZW1vdGVET01XaW5kb3dDdXN0b20uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SlNSZW1vdGVET01XaW5kb3c6OnB1dCk6CisgICAgICAgICogYmlu
ZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG06CisgICAgICAgIChHZW5lcmF0ZUhlYWRl
cik6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdERvbWFpblNlY3Vy
aXR5Lmg6CisgICAgICAgICogcGFnZS9ET01XaW5kb3cuaWRsOgorICAgICAgICAqIHBhZ2UvUmVt
b3RlRE9NV2luZG93LmlkbDoKKwogMjAyMS0wMS0wOCAgUGVuZyBMaXUgIDxwZW5nLmxpdTZAYXBw
bGUuY29tPgogCiAgICAgICAgIEEgdmlkZW8gZWxlbWVudCBuZWVkcyB0byBpZ25vcmUgdGhlIHJl
cXVlc3QgdG8gZW50ZXIvZXhpdCBmdWxsc2NyZWVuIGJlZm9yZSB0aGUgY3VycmVudCBmdWxsc2Ny
ZWVuIG1vZGUgY2hhbmdlIGlzIGNvbXBsZXRlZApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNET01XaW5kb3dDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmNwcAkocmV2aXNpb24gMjcxMzQyKQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zMTEsMjUgKzMxMSw2IEBAIGJvb2wgSlNET01XaW5kb3c6OmdldE93blByb3Bl
cnR5U2xvdEJ5SW4KICAgICByZXR1cm4gQmFzZTo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleCh0
aGlzT2JqZWN0LCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBpbmRleCwgc2xvdCk7CiB9CiAKLXZvaWQg
SlNET01XaW5kb3c6OmRvUHV0UHJvcGVydHlTZWN1cml0eUNoZWNrKEpTT2JqZWN0KiBjZWxsLCBK
U0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5
TmFtZSwgUHV0UHJvcGVydHlTbG90JikKLXsKLSAgICBWTSYgdm0gPSBsZXhpY2FsR2xvYmFsT2Jq
ZWN0LT52bSgpOwotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQot
ICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNET01XaW5kb3cqPihjZWxsKTsKLSAgICBp
ZiAoIXRoaXNPYmplY3QtPndyYXBwZWQoKS5mcmFtZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBTdHJpbmcgZXJyb3JNZXNzYWdlOwotICAgIGlmICghQmluZGluZ1NlY3VyaXR5OjpzaG91bGRB
bGxvd0FjY2Vzc1RvRE9NV2luZG93KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzT2JqZWN0LT53
cmFwcGVkKCksIGVycm9yTWVzc2FnZSkpIHsKLSAgICAgICAgLy8gV2Ugb25seSBhbGxvdyBzZXR0
aW5nICJsb2NhdGlvbiIgYXR0cmlidXRlIGNyb3NzLW9yaWdpbi4KLSAgICAgICAgaWYgKHByb3Bl
cnR5TmFtZSA9PSBzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpLT5i
dWlsdGluTmFtZXMoKS5sb2NhdGlvblB1YmxpY05hbWUoKSkKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgdGhyb3dTZWN1cml0eUVycm9yKCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSwg
ZXJyb3JNZXNzYWdlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLX0KLQogYm9vbCBKU0RPTVdp
bmRvdzo6cHV0KEpTQ2VsbCogY2VsbCwgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmpl
Y3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFB1dFByb3BlcnR5
U2xvdCYgc2xvdCkKIHsKICAgICBWTSYgdm0gPSBsZXhpY2FsR2xvYmFsT2JqZWN0LT52bSgpOwpA
QCAtMzQzLDEwICszMjQsOSBAQCBib29sIEpTRE9NV2luZG93OjpwdXQoSlNDZWxsKiBjZWxsLCBK
U0dsCiAgICAgaWYgKCFCaW5kaW5nU2VjdXJpdHk6OnNob3VsZEFsbG93QWNjZXNzVG9ET01XaW5k
b3coKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNPYmplY3QtPndyYXBwZWQoKSwgZXJyb3JNZXNz
YWdlKSkgewogICAgICAgICAvLyBXZSBvbmx5IGFsbG93IHNldHRpbmcgImxvY2F0aW9uIiBhdHRy
aWJ1dGUgY3Jvc3Mtb3JpZ2luLgogICAgICAgICBpZiAocHJvcGVydHlOYW1lID09IHN0YXRpY19j
YXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSktPmJ1aWx0aW5OYW1lcygpLmxvY2F0
aW9uUHVibGljTmFtZSgpKSB7Ci0gICAgICAgICAgICBib29sIHB1dFJlc3VsdCA9IGZhbHNlOwot
ICAgICAgICAgICAgaWYgKGxvb2t1cFB1dChsZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5h
bWUsIHRoaXNPYmplY3QsIHZhbHVlLCAqc19pbmZvLnN0YXRpY1Byb3BIYXNoVGFibGUsIHNsb3Qs
IHB1dFJlc3VsdCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHB1dFJlc3VsdDsKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIHNldEpTRE9NV2luZG93X2xvY2F0aW9uKGxl
eGljYWxHbG9iYWxPYmplY3QsIEpTVmFsdWU6OmVuY29kZShzbG90LnRoaXNWYWx1ZSgpKSwgSlNW
YWx1ZTo6ZW5jb2RlKHZhbHVlKSk7CisgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCBmYWxzZSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgICAg
ICB0aHJvd1NlY3VyaXR5RXJyb3IoKmxleGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLCBlcnJvck1l
c3NhZ2UpOwogICAgICAgICByZXR1cm4gZmFsc2U7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0xvY2F0aW9uQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0xvY2F0aW9uQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcxMzQyKQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNMb2NhdGlvbkN1c3RvbS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTExMywyMyArMTEzLDYgQEAgYm9vbCBKU0xvY2F0aW9uOjpnZXRPd25Qcm9wZXJ0
eVNsb3RCeUluZAogICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgSlNPYmplY3Q6OmdldE93
blByb3BlcnR5U2xvdEJ5SW5kZXgob2JqZWN0LCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBpbmRleCwg
c2xvdCkpOwogfQogCi12b2lkIEpTTG9jYXRpb246OmRvUHV0UHJvcGVydHlTZWN1cml0eUNoZWNr
KEpTT2JqZWN0KiBvYmplY3QsIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBQ
cm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQdXRQcm9wZXJ0eVNsb3QmKQotewotICAgIGF1dG8q
IHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNMb2NhdGlvbio+KG9iamVjdCk7Ci0gICAgQVNTRVJUX0dD
X09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwotCi0gICAgVk0mIHZtID0gbGV4
aWNhbEdsb2JhbE9iamVjdC0+dm0oKTsKLQotICAgIC8vIEFsd2F5cyBhbGxvdyBhc3NpZ25pbmcg
dG8gdGhlIHdob2xlIGxvY2F0aW9uLgotICAgIC8vIEhvd2V2ZXIsIGFsbGxvd2luZyBhc3NpZ25p
bmcgb2YgcGllY2VzIG1pZ2h0IGluYWR2ZXJ0ZW50bHkgZGlzY2xvc2UgcGFydHMgb2YgdGhlIG9y
aWdpbmFsIGxvY2F0aW9uLgotICAgIC8vIFNvIGZhbGwgdGhyb3VnaCB0byB0aGUgYWNjZXNzIGNo
ZWNrIGZvciB0aG9zZS4KLSAgICBpZiAocHJvcGVydHlOYW1lID09IHN0YXRpY19jYXN0PEpTVk1D
bGllbnREYXRhKj4odm0uY2xpZW50RGF0YSktPmJ1aWx0aW5OYW1lcygpLmhyZWZQdWJsaWNOYW1l
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIEJsb2NrIGFjY2VzcyBhbmQgdGhyb3cgaWYg
dGhlcmUgaXMgYSBzZWN1cml0eSBlcnJvci4KLSAgICBCaW5kaW5nU2VjdXJpdHk6OnNob3VsZEFs
bG93QWNjZXNzVG9ET01XaW5kb3cobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc09iamVjdC0+d3Jh
cHBlZCgpLndpbmRvdygpLCBUaHJvd1NlY3VyaXR5RXJyb3IpOwotfQotCiBib29sIEpTTG9jYXRp
b246OnB1dChKU0NlbGwqIGNlbGwsIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0
LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBQdXRQcm9wZXJ0eVNs
b3QmIHB1dFByb3BlcnR5U2xvdCkKIHsKICAgICBWTSYgdm0gPSBsZXhpY2FsR2xvYmFsT2JqZWN0
LT52bSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNSZW1vdGVET01XaW5k
b3dDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
UmVtb3RlRE9NV2luZG93Q3VzdG9tLmNwcAkocmV2aXNpb24gMjcxMzQyKQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNSZW1vdGVET01XaW5kb3dDdXN0b20uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC02OCwxMCArNjgsOSBAQCBib29sIEpTUmVtb3RlRE9NV2luZG93OjpwdXQoSlNDZWxs
KiBjZWxsCiAKICAgICAvLyBXZSBvbmx5IGFsbG93IHNldHRpbmcgImxvY2F0aW9uIiBhdHRyaWJ1
dGUgY3Jvc3Mtb3JpZ2luLgogICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gc3RhdGljX2Nhc3Q8SlNW
TUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKS0+YnVpbHRpbk5hbWVzKCkubG9jYXRpb25QdWJs
aWNOYW1lKCkpIHsKLSAgICAgICAgYm9vbCBwdXRSZXN1bHQgPSBmYWxzZTsKLSAgICAgICAgaWYg
KGxvb2t1cFB1dChsZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHRoaXNPYmplY3Qs
IHZhbHVlLCAqc19pbmZvLnN0YXRpY1Byb3BIYXNoVGFibGUsIHNsb3QsIHB1dFJlc3VsdCkpCi0g
ICAgICAgICAgICByZXR1cm4gcHV0UmVzdWx0OwotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIHNldEpTUmVtb3RlRE9NV2luZG93X2xvY2F0aW9uKGxleGljYWxHbG9iYWxPYmplY3QsIEpT
VmFsdWU6OmVuY29kZShzbG90LnRoaXNWYWx1ZSgpKSwgSlNWYWx1ZTo6ZW5jb2RlKHZhbHVlKSk7
CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGZhbHNlKTsKKyAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgfQogICAgIHRocm93U2VjdXJpdHlFcnJvcigqbGV4aWNhbEdsb2JhbE9i
amVjdCwgc2NvcGUsIGVycm9yTWVzc2FnZSk7CiAgICAgcmV0dXJuIGZhbHNlOwpJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0J
KHJldmlzaW9uIDI3MTM0MikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29k
ZUdlbmVyYXRvckpTLnBtCSh3b3JraW5nIGNvcHkpCkBAIC0yOTUzLDggKzI5NTMsNyBAQCBzdWIg
R2VuZXJhdGVIZWFkZXIKICAgICB9CiAKICAgICBpZiAoJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRy
aWJ1dGVzLT57Q2hlY2tTZWN1cml0eX0pIHsKLSAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwg
IiAgICBzdGF0aWMgdm9pZCBkb1B1dFByb3BlcnR5U2VjdXJpdHlDaGVjayhKU0M6OkpTT2JqZWN0
KiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OlB1dFByb3Bl
cnR5U2xvdCYpO1xuIik7Ci0gICAgICAgICRzdHJ1Y3R1cmVGbGFnc3siSlNDOjpIYXNQdXRQcm9w
ZXJ0eVNlY3VyaXR5Q2hlY2sifSA9IDE7CisgICAgICAgICRzdHJ1Y3R1cmVGbGFnc3siSlNDOjpJ
bnRlcmNlcHRzUHV0RXZlbldoZW5SZWNlaXZlcklzQWx0ZXJlZCJ9ID0gMTsKICAgICB9CiAKICAg
ICBpZiAoJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57UGx1Z2lufSB8fCBHZXROYW1l
ZFNldHRlck9wZXJhdGlvbigkaW50ZXJmYWNlKSkgewpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdERvbWFpblNlY3VyaXR5LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdERvbWFpblNl
Y3VyaXR5LmgJKHJldmlzaW9uIDI3MTM0MikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3REb21haW5TZWN1cml0eS5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
OSw3ICszOSw2IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgSlNDOjpKU09iamVjdCogY3JlYXRlUHJv
dG90eXBlKEpTQzo6Vk0mLCBKU0RPTUdsb2JhbE9iamVjdCYpOwogICAgIHN0YXRpYyBKU0M6OkpT
T2JqZWN0KiBwcm90b3R5cGUoSlNDOjpWTSYsIEpTRE9NR2xvYmFsT2JqZWN0Jik7CiAgICAgc3Rh
dGljIFRlc3REb21haW5TZWN1cml0eSogdG9XcmFwcGVkKEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUp
OwotICAgIHN0YXRpYyB2b2lkIGRvUHV0UHJvcGVydHlTZWN1cml0eUNoZWNrKEpTQzo6SlNPYmpl
Y3QqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6UHV0UHJv
cGVydHlTbG90Jik7CiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0M6OkpTQ2VsbCopOwogCiAg
ICAgREVDTEFSRV9JTkZPOwpAQCAtNTksNyArNTgsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIEpT
Qzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSk7CiAgICAgc3RhdGlj
IHZvaWQgYW5hbHl6ZUhlYXAoSlNDZWxsKiwgSlNDOjpIZWFwQW5hbHl6ZXImKTsKIHB1YmxpYzoK
LSAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3Ry
dWN0dXJlRmxhZ3MgfCBKU0M6Okhhc1B1dFByb3BlcnR5U2VjdXJpdHlDaGVjayB8IEpTQzo6SGFz
U3RhdGljUHJvcGVydHlUYWJsZTsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVj
dHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBKU0M6Okhhc1N0YXRpY1Byb3BlcnR5
VGFibGU7CiBwcm90ZWN0ZWQ6CiAgICAgSlNUZXN0RG9tYWluU2VjdXJpdHkoSlNDOjpTdHJ1Y3R1
cmUqLCBKU0RPTUdsb2JhbE9iamVjdCYsIFJlZjxUZXN0RG9tYWluU2VjdXJpdHk+JiYpOwogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5pZGwKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuaWRsCShyZXZpc2lvbiAyNzEzNDIpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTUyLDcgKzUy
LDcgQEAKICAgICBbUmVwbGFjZWFibGUsIERvTm90Q2hlY2tTZWN1cml0eU9uR2V0dGVyLCBDdXN0
b21HZXR0ZXJdIHJlYWRvbmx5IGF0dHJpYnV0ZSBXaW5kb3dQcm94eSBzZWxmOwogICAgIFtMZWdh
Y3lVbmZvcmdlYWJsZV0gcmVhZG9ubHkgYXR0cmlidXRlIERvY3VtZW50IGRvY3VtZW50OwogICAg
IGF0dHJpYnV0ZSBET01TdHJpbmcgbmFtZTsKLSAgICBbRG9Ob3RDaGVja1NlY3VyaXR5LCBQdXRG
b3J3YXJkcz1ocmVmLCBMZWdhY3lVbmZvcmdlYWJsZV0gcmVhZG9ubHkgYXR0cmlidXRlIExvY2F0
aW9uIGxvY2F0aW9uOworICAgIFtEb05vdENoZWNrU2VjdXJpdHksIFB1dEZvcndhcmRzPWhyZWYs
IExlZ2FjeVVuZm9yZ2VhYmxlLCBGb3J3YXJkRGVjbGFyZUluSGVhZGVyXSByZWFkb25seSBhdHRy
aWJ1dGUgTG9jYXRpb24gbG9jYXRpb247CiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIEhpc3Rvcnkg
aGlzdG9yeTsKICAgICBbSW1wbGVtZW50ZWRBcz1lbnN1cmVDdXN0b21FbGVtZW50UmVnaXN0cnld
IHJlYWRvbmx5IGF0dHJpYnV0ZSBDdXN0b21FbGVtZW50UmVnaXN0cnkgY3VzdG9tRWxlbWVudHM7
CiAgICAgW1JlcGxhY2VhYmxlXSByZWFkb25seSBhdHRyaWJ1dGUgQmFyUHJvcCBsb2NhdGlvbmJh
cjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvUmVtb3RlRE9NV2luZG93LmlkbAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL1JlbW90ZURPTVdpbmRvdy5pZGwJKHJldmlzaW9u
IDI3MTM0MikKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvUmVtb3RlRE9NV2luZG93LmlkbAkod29y
a2luZyBjb3B5KQpAQCAtNDUsNyArNDUsNyBAQAogXSBpbnRlcmZhY2UgUmVtb3RlRE9NV2luZG93
IHsKICAgICBbTGVnYWN5VW5mb3JnZWFibGUsIEltcGxlbWVudGVkQXM9c2VsZl0gcmVhZG9ubHkg
YXR0cmlidXRlIFdpbmRvd1Byb3h5IHdpbmRvdzsKICAgICBbUmVwbGFjZWFibGVdIHJlYWRvbmx5
IGF0dHJpYnV0ZSBXaW5kb3dQcm94eSBzZWxmOwotICAgIFtQdXRGb3J3YXJkcz1ocmVmLCBMZWdh
Y3lVbmZvcmdlYWJsZV0gcmVhZG9ubHkgYXR0cmlidXRlIExvY2F0aW9uPyBsb2NhdGlvbjsgLy8g
RklYTUU6IFNob3VsZCBub3QgYmUgbnVsbGFibGUuCisgICAgW1B1dEZvcndhcmRzPWhyZWYsIExl
Z2FjeVVuZm9yZ2VhYmxlLCBGb3J3YXJkRGVjbGFyZUluSGVhZGVyXSByZWFkb25seSBhdHRyaWJ1
dGUgTG9jYXRpb24/IGxvY2F0aW9uOyAvLyBGSVhNRTogU2hvdWxkIG5vdCBiZSBudWxsYWJsZS4K
ICAgICBbQ2FsbFdpdGg9SW5jdW1iZW50RG9jdW1lbnQsIEZvcndhcmREZWNsYXJlSW5IZWFkZXJd
IHVuZGVmaW5lZCBjbG9zZSgpOwogICAgIFtGb3J3YXJkRGVjbGFyZUluSGVhZGVyXSByZWFkb25s
eSBhdHRyaWJ1dGUgYm9vbGVhbiBjbG9zZWQ7CiAgICAgW0NhbGxXaXRoPUluY3VtYmVudFdpbmRv
dywgRm9yd2FyZERlY2xhcmVJbkhlYWRlcl0gdW5kZWZpbmVkIGZvY3VzKCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>417843</attachid>
            <date>2021-01-18 12:40:09 -0800</date>
            <delta_ts>2021-01-28 08:45:32 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>bug-217916-20210118224007.patch</filename>
            <type>text/plain</type>
            <size>95254</size>
            <attacher name="Alexey Shvayka">ashvayka</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyNzE1ODQpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDE0IEBACisyMDIxLTAxLTE4ICBBbGV4ZXkgU2h2YXlrYSAgPHNodmFpa2FsZXNo
QGdtYWlsLmNvbT4KKworICAgICAgICBJbnRyb2R1Y2UgT3ZlcnJpZGVzUHV0W0J5SW5kZXhdIHR5
cGUgaW5mbyBmbGFncworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjE3OTE2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiBzdHJlc3MvY3VzdG9tLWdldC1zZXQtcHJvdG8tY2hhaW4tcHV0LmpzOgorICAgICAg
ICAoZ2V0T2JqZWN0cyk6CisgICAgICAgICogc3RyZXNzL3JlZmxlY3Qtc2V0LmpzOgorCiAyMDIx
LTAxLTE4ICBZdXN1a2UgU3V6dWtpICA8eXN1enVraUBhcHBsZS5jb20+CiAKICAgICAgICAgW0pT
Q10gY2FsbGVySXNPTUdDb21waWxlZCBzaG91bGQgYmUgcm9idXN0CkluZGV4OiBKU1Rlc3RzL3N0
cmVzcy9jdXN0b20tZ2V0LXNldC1wcm90by1jaGFpbi1wdXQuanMKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNU
ZXN0cy9zdHJlc3MvY3VzdG9tLWdldC1zZXQtcHJvdG8tY2hhaW4tcHV0LmpzCShyZXZpc2lvbiAy
NzE1ODApCisrKyBKU1Rlc3RzL3N0cmVzcy9jdXN0b20tZ2V0LXNldC1wcm90by1jaGFpbi1wdXQu
anMJKHdvcmtpbmcgY29weSkKQEAgLTM3LDggKzM3LDggQEAgZnVuY3Rpb24gZ2V0T2JqZWN0cygp
IHsKICAgICAgICAgLi4ucHJpbWl0aXZlcy5tYXAoT2JqZWN0KSwKICAgICAgICAgT2JqZWN0LmNy
ZWF0ZShjdXN0b21UZXN0R2V0dGVyU2V0dGVyKSwKICAgICAgICAgT2JqZWN0LmNyZWF0ZShPYmpl
Y3QuY3JlYXRlKGN1c3RvbVRlc3RHZXR0ZXJTZXR0ZXIpKSwKLSAgICAgICAgLy8gRklYTUU6IG9y
ZGluYXJ5U2V0U2xvdygpIHNob3VsZCBoYW5kbGUgQ3VzdG9te0FjY2Vzc29yLFZhbHVlfSBkZXNj
cmlwdG9ycy4KLSAgICAgICAgLy8gbmV3IFByb3h5KGN1c3RvbVRlc3RHZXR0ZXJTZXR0ZXIsIHt9
KSwKKyAgICAgICAgT2JqZWN0LmNyZWF0ZShuZXcgUHJveHkoY3VzdG9tVGVzdEdldHRlclNldHRl
ciwge30pKSwKKyAgICAgICAgT2JqZWN0LmNyZWF0ZSgkdm0uY3JlYXRlUHJveHkoY3VzdG9tVGVz
dEdldHRlclNldHRlcikpLAogICAgIF07CiB9CiAKSW5kZXg6IEpTVGVzdHMvc3RyZXNzL3JlZmxl
Y3Qtc2V0LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvc3RyZXNzL3JlZmxlY3Qtc2V0LmpzCShy
ZXZpc2lvbiAyNzE1ODApCisrKyBKU1Rlc3RzL3N0cmVzcy9yZWZsZWN0LXNldC5qcwkod29ya2lu
ZyBjb3B5KQpAQCAtMTEyOSw4ICsxMTI5LDggQEAgdmFyIHN5bWJvbCA9IFN5bWJvbCgpOwogCiAg
ICAgICAgIHZhciByZWNlaXZlciA9IHt9OwogICAgICAgICBzaG91bGRCZShSZWZsZWN0LnNldChS
ZWdFeHAsICdtdWx0aWxpbmUnLCAnQ2FwcHVjY2lubycsIHJlY2VpdmVyKSwgdHJ1ZSk7Ci0gICAg
ICAgIHNob3VsZEJlKFJlZmxlY3QuZ2V0KHJlY2VpdmVyLCAnbXVsdGlsaW5lJyksICdDYXBwdWNj
aW5vJyk7Ci0gICAgICAgIHNob3VsZEJlKFJlZmxlY3QuZ2V0KFJlZ0V4cCwgJ211bHRpbGluZScp
LCBmYWxzZSk7CisgICAgICAgIHNob3VsZEJlKFJlZmxlY3QuZ2V0KHJlY2VpdmVyLCAnbXVsdGls
aW5lJyksIHVuZGVmaW5lZCk7CisgICAgICAgIHNob3VsZEJlKFJlZmxlY3QuZ2V0KFJlZ0V4cCwg
J211bHRpbGluZScpLCB0cnVlKTsKICAgICB9CiAKICAgICBmdW5jdGlvbiB0ZXN0MigpIHsKQEAg
LTExMzksMTEgKzExMzksNiBAQCB2YXIgc3ltYm9sID0gU3ltYm9sKCk7CiAgICAgICAgIHNob3Vs
ZEJlKFJlZmxlY3QuZ2V0KFJlZ0V4cCwgJ211bHRpbGluZScpLCB0cnVlKTsKICAgICAgICAgc2hv
dWxkQmUoUmVmbGVjdC5zZXQoUmVnRXhwLCAnbXVsdGlsaW5lJywgMCksIHRydWUpOwogICAgICAg
ICBzaG91bGRCZShSZWZsZWN0LmdldChSZWdFeHAsICdtdWx0aWxpbmUnKSwgZmFsc2UpOwotCi0g
ICAgICAgIHZhciByZWNlaXZlciA9IHt9OwotICAgICAgICBzaG91bGRCZShSZWZsZWN0LnNldChS
ZWdFeHAsICdtdWx0aWxpbmUnLCAnQ2FwcHVjY2lubycsIHJlY2VpdmVyKSwgdHJ1ZSk7Ci0gICAg
ICAgIHNob3VsZEJlKFJlZmxlY3QuZ2V0KHJlY2VpdmVyLCAnbXVsdGlsaW5lJyksICdDYXBwdWNj
aW5vJyk7Ci0gICAgICAgIHNob3VsZEJlKFJlZmxlY3QuZ2V0KFJlZ0V4cCwgJ211bHRpbGluZScp
LCBmYWxzZSk7CiAgICAgfQogCiAgICAgZnVuY3Rpb24gdGVzdDMoKSB7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI3MTU4MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw5MyBAQAorMjAyMS0wMS0xOCAg
QWxleGV5IFNodmF5a2EgIDxzaHZhaWthbGVzaEBnbWFpbC5jb20+CisKKyAgICAgICAgSW50cm9k
dWNlIE92ZXJyaWRlc1B1dFtCeUluZGV4XSB0eXBlIGluZm8gZmxhZ3MKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNzkxNgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogQVBJL0pTQ2FsbGJhY2tPYmplY3Qu
aDoKKyAgICAgICAgKiBkZWJ1Z2dlci9EZWJ1Z2dlclNjb3BlLmg6CisgICAgICAgICogcnVudGlt
ZS9DbGFzc0luZm8uaDoKKyAgICAgICAgKiBydW50aW1lL0Nsb25lZEFyZ3VtZW50cy5oOgorICAg
ICAgICAqIHJ1bnRpbWUvQ3VzdG9tR2V0dGVyU2V0dGVyLmNwcDoKKyAgICAgICAgKEpTQzo6Y2Fs
bEN1c3RvbVNldHRlcik6IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9DdXN0b21HZXR0ZXJT
ZXR0ZXIuaDoKKyAgICAgICAgKiBydW50aW1lL0Vycm9yQ29uc3RydWN0b3IuaDoKKyAgICAgICAg
KiBydW50aW1lL0Vycm9ySW5zdGFuY2UuaDoKKyAgICAgICAgKiBydW50aW1lL0dlbmVyaWNBcmd1
bWVudHMuaDoKKyAgICAgICAgKiBydW50aW1lL0dlbmVyaWNBcmd1bWVudHNJbmxpbmVzLmg6Cisg
ICAgICAgIChKU0M6OkdlbmVyaWNBcmd1bWVudHM8VHlwZT46OnB1dCk6CisgICAgICAgICogcnVu
dGltZS9HZXR0ZXJTZXR0ZXIuY3BwOgorICAgICAgICAoSlNDOjpjYWxsU2V0dGVyKToKKyAgICAg
ICAgKiBydW50aW1lL0dldHRlclNldHRlci5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNBcnJheS5j
cHA6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OnB1dCk6CisgICAgICAgICogcnVudGltZS9KU0Fy
cmF5Lmg6CisgICAgICAgICogcnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5jcHA6CisgICAgICAg
IChKU0M6OkpTQXJyYXlCdWZmZXJWaWV3OjpwdXQpOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRp
bWUvSlNBcnJheUJ1ZmZlclZpZXcuaDoKKyAgICAgICAgKiBydW50aW1lL0pTQ0pTVmFsdWUuY3Bw
OgorICAgICAgICAoSlNDOjpKU1ZhbHVlOjpwdXRUb1ByaW1pdGl2ZSk6CisgICAgICAgICogcnVu
dGltZS9KU0NlbGwuY3BwOgorICAgICAgICAoSlNDOjpKU0NlbGw6OmRvUHV0UHJvcGVydHlTZWN1
cml0eUNoZWNrKTogRGVsZXRlZC4KKyAgICAgICAgKiBydW50aW1lL0pTQ2VsbC5oOgorICAgICAg
ICAqIHJ1bnRpbWUvSlNGdW5jdGlvbi5jcHA6CisgICAgICAgIChKU0M6OkpTRnVuY3Rpb246OnB1
dCk6CisgICAgICAgICogcnVudGltZS9KU0Z1bmN0aW9uLmg6CisgICAgICAgICogcnVudGltZS9K
U0dlbmVyaWNUeXBlZEFycmF5Vmlldy5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxMZXhp
Y2FsRW52aXJvbm1lbnQuaDoKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcDoK
KyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6OnB1dCk6CisgICAgICAgICogcnVudGltZS9K
U0dsb2JhbE9iamVjdC5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNMZXhpY2FsRW52aXJvbm1lbnQu
aDoKKyAgICAgICAgKiBydW50aW1lL0pTTW9kdWxlRW52aXJvbm1lbnQuaDoKKyAgICAgICAgKiBy
dW50aW1lL0pTTW9kdWxlTmFtZXNwYWNlT2JqZWN0Lmg6CisgICAgICAgICogcnVudGltZS9KU09i
amVjdC5jcHA6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3QpOgor
ICAgICAgICAoSlNDOjpvcmRpbmFyeVNldFNsb3cpOgorICAgICAgICAoSlNDOjpvcmRpbmFyeVNl
dFNsb3dEZWZpbmVQcm9wZXJ0eU9uUmVjZWl2ZXIpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6
cHV0SW5saW5lRmFzdFdpdGhSZWNlaXZlckNoZWNrKToKKyAgICAgICAgKEpTQzo6ZmluZFByb3Bl
cnR5Rm9yUHV0KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1dElubGluZVNsb3cpOgorICAg
ICAgICAoSlNDOjpKU09iamVjdDo6ZG9QdXRQcm9wZXJ0eVNlY3VyaXR5Q2hlY2spOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cHJvdG90eXBlQ2hhaW5NYXlJbnRlcmNlcHRTdG9y
ZVRvKTogRGVsZXRlZC4KKyAgICAgICAgKiBydW50aW1lL0pTT2JqZWN0Lmg6CisgICAgICAgIChK
U0M6OkpTT2JqZWN0OjpwdXRCeUluZGV4SW5saW5lKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6
OmdldE93blByb3BlcnR5U2xvdCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpwdXREaXJlY3Qp
OgorICAgICAgICAoSlNDOjpKU09iamVjdDo6ZG9QdXRQcm9wZXJ0eVNlY3VyaXR5Q2hlY2spOiBE
ZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNPYmplY3RJbmxpbmVzLmg6CisgICAgICAgIChK
U0M6OkpTT2JqZWN0OjpjYW5QZXJmb3JtRmFzdFB1dElubGluZUV4Y2x1ZGluZ1Byb3RvKToKKyAg
ICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1dElubGluZUZvckpTT2JqZWN0KToKKyAgICAgICAgKiBy
dW50aW1lL0pTUHJveHkuaDoKKyAgICAgICAgKiBydW50aW1lL0pTVHlwZUluZm8uaDoKKyAgICAg
ICAgKEpTQzo6VHlwZUluZm86Om92ZXJyaWRlc1B1dCBjb25zdCk6CisgICAgICAgIChKU0M6OlR5
cGVJbmZvOjpnZXRPd25Qcm9wZXJ0eVNsb3RJc0ltcHVyZUZvclByb3BlcnR5QWJzZW5jZSBjb25z
dCk6CisgICAgICAgIChKU0M6OlR5cGVJbmZvOjpoYXNQdXRQcm9wZXJ0eVNlY3VyaXR5Q2hlY2sg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvTG9va3VwLmg6CisgICAgICAgIChK
U0M6OnB1dEVudHJ5KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6bG9va3VwUHV0KTogRGVsZXRl
ZC4KKyAgICAgICAgKiBydW50aW1lL1Byb3BlcnR5U2xvdC5oOgorICAgICAgICAqIHJ1bnRpbWUv
UHJveHlPYmplY3QuaDoKKyAgICAgICAgKiBydW50aW1lL1B1dFByb3BlcnR5U2xvdC5oOgorICAg
ICAgICAqIHJ1bnRpbWUvUmVmbGVjdE9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OkpTQ19ERUZJ
TkVfSE9TVF9GVU5DVElPTik6CisgICAgICAgICogcnVudGltZS9SZWdFeHBPYmplY3QuY3BwOgor
ICAgICAgICAoSlNDOjpSZWdFeHBPYmplY3Q6OnB1dCk6CisgICAgICAgICogcnVudGltZS9SZWdF
eHBPYmplY3QuaDoKKyAgICAgICAgKiBydW50aW1lL1NwYXJzZUFycmF5VmFsdWVNYXAuY3BwOgor
ICAgICAgICAoSlNDOjpTcGFyc2VBcnJheUVudHJ5OjpwdXQpOgorICAgICAgICAqIHJ1bnRpbWUv
U3RyaW5nT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6U3RyaW5nT2JqZWN0OjpwdXQpOgorICAg
ICAgICAqIHJ1bnRpbWUvU3RyaW5nT2JqZWN0Lmg6CisgICAgICAgICogcnVudGltZS9TdHJpbmdQ
cm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpTdHJpbmdQcm90b3R5cGU6OmZpbmlzaENyZWF0
aW9uKToKKyAgICAgICAgKEpTQzo6U3RyaW5nUHJvdG90eXBlOjpjcmVhdGUpOgorICAgICAgICAq
IHJ1bnRpbWUvU3RyaW5nUHJvdG90eXBlLmg6CisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmUu
Y3BwOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnZhbGlkYXRlRmxhZ3MpOgorICAgICAgICAq
IHRvb2xzL0pTRG9sbGFyVk0uY3BwOgorCiAyMDIxLTAxLTE4ICBNaWNoYWVsIENhdGFuemFybyAg
PG1jYXRhbnphcm9AZ25vbWUub3JnPgogCiAgICAgICAgIFtHVEtdIE11bHRpbGliIGNvbmZsaWN0
cyBpbiBnaXIgZmlsZXMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFj
a09iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxs
YmFja09iamVjdC5oCShyZXZpc2lvbiAyNzE1ODApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
QVBJL0pTQ2FsbGJhY2tPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMTI1LDcgKzEyNSw3IEBA
IHRlbXBsYXRlIDxjbGFzcyBQYXJlbnQ+CiBjbGFzcyBKU0NhbGxiYWNrT2JqZWN0IGZpbmFsIDog
cHVibGljIFBhcmVudCB7CiBwdWJsaWM6CiAgICAgdXNpbmcgQmFzZSA9IFBhcmVudDsKLSAgICBz
dGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJl
RmxhZ3MgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNHZXRPd25TcGVj
aWFsUHJvcGVydHlOYW1lcyB8IE92ZXJyaWRlc0dldENhbGxEYXRhIHwgSW50ZXJjZXB0c0dldE93
blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8IEltcGxlbWVudHNI
YXNJbnN0YW5jZSB8IFByb2hpYml0c1Byb3BlcnR5Q2FjaGluZzsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBPdmVy
cmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNHZXRPd25TcGVjaWFsUHJvcGVydHlO
YW1lcyB8IE92ZXJyaWRlc0dldENhbGxEYXRhIHwgT3ZlcnJpZGVzUHV0IHwgSW50ZXJjZXB0c0dl
dE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8IEltcGxlbWVu
dHNIYXNJbnN0YW5jZSB8IFByb2hpYml0c1Byb3BlcnR5Q2FjaGluZzsKICAgICBzdGF0aWNfYXNz
ZXJ0KCEoU3RydWN0dXJlRmxhZ3MgJiBJbXBsZW1lbnRzRGVmYXVsdEhhc0luc3RhbmNlKSwgInVz
aW5nIGN1c3RvbUhhc0luc3RhbmNlIik7CiAKICAgICB+SlNDYWxsYmFja09iamVjdCgpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyU2NvcGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXJTY29wZS5oCShy
ZXZpc2lvbiAyNzE1ODApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdn
ZXJTY29wZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw3IEBAIGNsYXNzIEpTU2NvcGU7
CiBjbGFzcyBEZWJ1Z2dlclNjb3BlIGZpbmFsIDogcHVibGljIEpTTm9uRmluYWxPYmplY3Qgewog
cHVibGljOgogICAgIHVzaW5nIEJhc2UgPSBKU05vbkZpbmFsT2JqZWN0OwotICAgIHN0YXRpYyBj
b25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8
IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5TmFt
ZXM7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6
OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVz
R2V0T3duUHJvcGVydHlOYW1lcyB8IE92ZXJyaWRlc1B1dDsKIAogICAgIHRlbXBsYXRlPHR5cGVu
YW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2VzcyBtb2RlPgogICAgIHN0YXRpYyBJc29TdWJzcGFj
ZSogc3Vic3BhY2VGb3IoVk0mIHZtKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQ2xhc3NJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQ2xhc3NJbmZvLmgJKHJldmlzaW9uIDI3MTU4MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0NsYXNzSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC03MSw5ICs3MSw2IEBAIHN0
cnVjdCBNZXRob2RUYWJsZSB7CiAgICAgdXNpbmcgR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEZ1
bmN0aW9uUHRyID0gYm9vbCAoKikoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIHVuc2lnbmVk
LCBQcm9wZXJ0eVNsb3QmKTsKICAgICBHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RnVuY3Rpb25Q
dHIgTUVUSE9EX1RBQkxFX0VOVFJZKGdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgpOwogCi0gICAg
dXNpbmcgRG9QdXRQcm9wZXJ0eVNlY3VyaXR5Q2hlY2tGdW5jdGlvblB0ciA9IHZvaWQgKCopKEpT
T2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIFB1dFByb3BlcnR5U2xvdCYp
OwotICAgIERvUHV0UHJvcGVydHlTZWN1cml0eUNoZWNrRnVuY3Rpb25QdHIgTUVUSE9EX1RBQkxF
X0VOVFJZKGRvUHV0UHJvcGVydHlTZWN1cml0eUNoZWNrKTsKLQogICAgIHVzaW5nIFRvVGhpc0Z1
bmN0aW9uUHRyID0gSlNWYWx1ZSAoKikoSlNDZWxsKiwgSlNHbG9iYWxPYmplY3QqLCBFQ01BTW9k
ZSk7CiAgICAgVG9UaGlzRnVuY3Rpb25QdHIgTUVUSE9EX1RBQkxFX0VOVFJZKHRvVGhpcyk7CiAK
QEAgLTE1Niw3ICsxNTMsNiBAQCBzdHJ1Y3QgTWV0aG9kVGFibGUgewogICAgICAgICAmQ2xhc3NO
YW1lOjpkZWxldGVQcm9wZXJ0eUJ5SW5kZXgsIFwKICAgICAgICAgJkNsYXNzTmFtZTo6Z2V0T3du
UHJvcGVydHlTbG90LCBcCiAgICAgICAgICZDbGFzc05hbWU6OmdldE93blByb3BlcnR5U2xvdEJ5
SW5kZXgsIFwKLSAgICAgICAgJkNsYXNzTmFtZTo6ZG9QdXRQcm9wZXJ0eVNlY3VyaXR5Q2hlY2ss
IFwKICAgICAgICAgJkNsYXNzTmFtZTo6dG9UaGlzLCBcCiAgICAgICAgICZDbGFzc05hbWU6OmRl
ZmF1bHRWYWx1ZSwgXAogICAgICAgICAmQ2xhc3NOYW1lOjpnZXRPd25Qcm9wZXJ0eU5hbWVzLCBc
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbG9uZWRBcmd1bWVudHMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbG9uZWRBcmd1bWVu
dHMuaAkocmV2aXNpb24gMjcxNTgwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Q2xvbmVkQXJndW1lbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDcgQEAgbmFtZXNw
YWNlIEpTQyB7CiBjbGFzcyBDbG9uZWRBcmd1bWVudHMgZmluYWwgOiBwdWJsaWMgSlNOb25GaW5h
bE9iamVjdCB7CiBwdWJsaWM6CiAgICAgdXNpbmcgQmFzZSA9IEpTTm9uRmluYWxPYmplY3Q7Ci0g
ICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVj
dHVyZUZsYWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzR2V0T3du
U3BlY2lhbFByb3BlcnR5TmFtZXM7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1
Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVy
dHlTbG90IHwgT3ZlcnJpZGVzR2V0T3duU3BlY2lhbFByb3BlcnR5TmFtZXMgfCBPdmVycmlkZXNQ
dXQ7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3MgbW9k
ZT4KICAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0N1c3RvbUdldHRlclNldHRlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ3VzdG9tR2V0dGVyU2V0dGVy
LmNwcAkocmV2aXNpb24gMjcxNTgwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Q3VzdG9tR2V0dGVyU2V0dGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsMjggKzI2LDEwIEBA
CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiQ3VzdG9tR2V0dGVyU2V0dGVyLmgiCiAK
LSNpbmNsdWRlICJKU0NKU1ZhbHVlSW5saW5lcy5oIgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25z
Lmg+Ci0KIG5hbWVzcGFjZSBKU0MgewogCiBTVEFUSUNfQVNTRVJUX0lTX1RSSVZJQUxMWV9ERVNU
UlVDVElCTEUoQ3VzdG9tR2V0dGVyU2V0dGVyKTsKIAogY29uc3QgQ2xhc3NJbmZvIEN1c3RvbUdl
dHRlclNldHRlcjo6c19pbmZvID0geyAiQ3VzdG9tR2V0dGVyU2V0dGVyIiwgbnVsbHB0ciwgbnVs
bHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShDdXN0b21HZXR0ZXJTZXR0ZXIpIH07
CiAKLVRyaVN0YXRlIGNhbGxDdXN0b21TZXR0ZXIoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgQ3VzdG9tR2V0dGVyU2V0dGVyOjpDdXN0b21TZXR0ZXIgc2V0dGVyLCBib29sIGlzQWNjZXNz
b3IsIEpTT2JqZWN0KiBzbG90QmFzZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIEpTVmFsdWUgdmFsdWUp
Ci17Ci0gICAgaWYgKGlzQWNjZXNzb3IpIHsKLSAgICAgICAgaWYgKCFzZXR0ZXIpCi0gICAgICAg
ICAgICByZXR1cm4gVHJpU3RhdGU6OkZhbHNlOwotICAgICAgICBzZXR0ZXIoZ2xvYmFsT2JqZWN0
LCBKU1ZhbHVlOjplbmNvZGUodGhpc1ZhbHVlKSwgSlNWYWx1ZTo6ZW5jb2RlKHZhbHVlKSk7Ci0g
ICAgICAgIC8vIEFsd2F5cyByZXR1cm4gdHJ1ZSBpZiB0aGVyZSBpcyBhIHNldHRlciBhbmQgaXQg
aXMgb2JzZXJ2ZWQgYXMgYW4gYWNjZXNzb3IgdG8gdXNlcnMuCi0gICAgICAgIHJldHVybiBUcmlT
dGF0ZTo6VHJ1ZTsKLSAgICB9Ci0KLSAgICBpZiAoIXNldHRlcikKLSAgICAgICAgcmV0dXJuIFRy
aVN0YXRlOjpJbmRldGVybWluYXRlOwotICAgIHJldHVybiB0cmlTdGF0ZShzZXR0ZXIoZ2xvYmFs
T2JqZWN0LCBKU1ZhbHVlOjplbmNvZGUoc2xvdEJhc2UpLCBKU1ZhbHVlOjplbmNvZGUodmFsdWUp
KSk7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQ3VzdG9tR2V0dGVyU2V0dGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQ3VzdG9tR2V0dGVyU2V0dGVyLmgJKHJldmlzaW9uIDI3MTU4MCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0N1c3RvbUdldHRlclNldHRlci5oCSh3
b3JraW5nIGNvcHkpCkBAIC03Niw2ICs3Niw0IEBAIHByaXZhdGU6CiAgICAgQ3VzdG9tU2V0dGVy
IG1fc2V0dGVyOwogfTsKIAotSlNfRVhQT1JUX1BSSVZBVEUgVHJpU3RhdGUgY2FsbEN1c3RvbVNl
dHRlcihKU0dsb2JhbE9iamVjdCosIEN1c3RvbUdldHRlclNldHRlcjo6Q3VzdG9tU2V0dGVyLCBi
b29sIGlzQWNjZXNzb3IsIEpTT2JqZWN0KiBzbG90QmFzZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIEpT
VmFsdWUpOwotCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0Vycm9yQ29uc3RydWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9FcnJvckNvbnN0cnVjdG9yLmgJKHJldmlzaW9uIDI3MTU4MCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9yQ29uc3RydWN0b3IuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQCBjbGFzcyBHZXR0ZXJTZXR0ZXI7CiBjbGFzcyBFcnJv
ckNvbnN0cnVjdG9yIGZpbmFsIDogcHVibGljIEludGVybmFsRnVuY3Rpb24gewogcHVibGljOgog
ICAgIHVzaW5nIEJhc2UgPSBJbnRlcm5hbEZ1bmN0aW9uOworICAgIHN0YXRpYyBjb25zdGV4cHIg
dW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IE92ZXJyaWRl
c1B1dDsKIAogICAgIHN0YXRpYyBFcnJvckNvbnN0cnVjdG9yKiBjcmVhdGUoVk0mIHZtLCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSwgRXJyb3JQcm90b3R5cGUqIGVycm9yUHJvdG90eXBlLCBHZXR0ZXJT
ZXR0ZXIqKQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9y
SW5zdGFuY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9F
cnJvckluc3RhbmNlLmgJKHJldmlzaW9uIDI3MTU4MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0Vycm9ySW5zdGFuY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMjksNyArMjksNyBA
QCBuYW1lc3BhY2UgSlNDIHsKIGNsYXNzIEVycm9ySW5zdGFuY2UgOiBwdWJsaWMgSlNOb25GaW5h
bE9iamVjdCB7CiBwdWJsaWM6CiAgICAgdXNpbmcgQmFzZSA9IEpTTm9uRmluYWxPYmplY3Q7Ci0g
ICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVj
dHVyZUZsYWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzR2V0T3du
U3BlY2lhbFByb3BlcnR5TmFtZXM7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1
Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVy
dHlTbG90IHwgT3ZlcnJpZGVzR2V0T3duU3BlY2lhbFByb3BlcnR5TmFtZXMgfCBPdmVycmlkZXNQ
dXQ7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOwog
CiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqIGNlbGwpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljQXJndW1lbnRzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50cy5oCShyZXZpc2lvbiAy
NzE1ODApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljQXJndW1lbnRz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDcgKzM2LDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVHlw
ZT4KIGNsYXNzIEdlbmVyaWNBcmd1bWVudHMgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7CiBw
dWJsaWM6CiAgICAgdHlwZWRlZiBKU05vbkZpbmFsT2JqZWN0IEJhc2U7Ci0gICAgc3RhdGljIGNv
bnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwg
T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlOYW1l
cyB8IEludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05v
dFplcm87CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJh
c2U6OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJp
ZGVzR2V0T3duUHJvcGVydHlOYW1lcyB8IE92ZXJyaWRlc1B1dCB8IEludGVyY2VwdHNHZXRPd25Q
cm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm87CiAKIHByb3RlY3RlZDoK
ICAgICBHZW5lcmljQXJndW1lbnRzKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljQXJndW1lbnRzSW5saW5lcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNBcmd1
bWVudHNJbmxpbmVzLmgJKHJldmlzaW9uIDI3MTU4MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0dlbmVyaWNBcmd1bWVudHNJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEx
MiwxMiArMTEyLDE3IEBAIHZvaWQgR2VuZXJpY0FyZ3VtZW50czxUeXBlPjo6Z2V0T3duUHJvcGUK
ICAgICB0aGlzT2JqZWN0LT5nZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoZ2xvYmFsT2JqZWN0
LCBhcnJheSwgbW9kZSk7CiB9CiAKKy8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8j
c2VjLWFyZ3VtZW50cy1leG90aWMtb2JqZWN0cy1zZXQtcC12LXJlY2VpdmVyCiB0ZW1wbGF0ZTx0
eXBlbmFtZSBUeXBlPgogYm9vbCBHZW5lcmljQXJndW1lbnRzPFR5cGU+OjpwdXQoSlNDZWxsKiBj
ZWxsLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWUgaWRlbnQsIEpT
VmFsdWUgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBUeXBlKiB0aGlzT2Jq
ZWN0ID0ganNDYXN0PFR5cGUqPihjZWxsKTsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZt
KCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgLy8g
RmFsbCBiYWNrIHRvIHRoZSBPcmRpbmFyeVNldCB3aGVuIHRoZSByZWNlaXZlciBpcyBhbHRlcmVk
IGZyb20gdGhlIHRoaXNPYmplY3QuCisgICAgaWYgKFVOTElLRUxZKHNsb3QudGhpc1ZhbHVlKCkg
IT0gdGhpc09iamVjdCkpCisgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgQmFzZTo6
cHV0KHRoaXNPYmplY3QsIGdsb2JhbE9iamVjdCwgaWRlbnQsIHZhbHVlLCBzbG90KSk7CiAgICAg
CiAgICAgaWYgKCF0aGlzT2JqZWN0LT5vdmVycm9kZVRoaW5ncygpCiAgICAgICAgICYmIChpZGVu
dCA9PSB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgKQEAgLTEyOCwxMSArMTMzLDYgQEAgYm9vbCBH
ZW5lcmljQXJndW1lbnRzPFR5cGU+OjpwdXQoSlNDZWxsKgogICAgICAgICBQdXRQcm9wZXJ0eVNs
b3QgZHVtbXkgPSBzbG90OyAvLyBUaGlzIHB1dCBpcyBub3QgY2FjaGVhYmxlLCBzbyB3ZSBzaGFk
b3cgdGhlIHNsb3QgdGhhdCB3YXMgZ2l2ZW4gdG8gdXMuCiAgICAgICAgIFJFTEVBU0VfQU5EX1JF
VFVSTihzY29wZSwgQmFzZTo6cHV0KHRoaXNPYmplY3QsIGdsb2JhbE9iamVjdCwgaWRlbnQsIHZh
bHVlLCBkdW1teSkpOwogICAgIH0KLQotICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNt
YTI2Mi8jc2VjLWFyZ3VtZW50cy1leG90aWMtb2JqZWN0cy1zZXQtcC12LXJlY2VpdmVyCi0gICAg
Ly8gRmFsbCBiYWNrIHRvIHRoZSBPcmRpbmFyeVNldCB3aGVuIHRoZSByZWNlaXZlciBpcyBhbHRl
cmVkIGZyb20gdGhlIHRoaXNPYmplY3QuCi0gICAgaWYgKFVOTElLRUxZKGlzVGhpc1ZhbHVlQWx0
ZXJlZChzbG90LCB0aGlzT2JqZWN0KSkpCi0gICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29w
ZSwgb3JkaW5hcnlTZXRTbG93KGdsb2JhbE9iamVjdCwgdGhpc09iamVjdCwgaWRlbnQsIHZhbHVl
LCBzbG90LnRoaXNWYWx1ZSgpLCBzbG90LmlzU3RyaWN0TW9kZSgpKSk7CiAgICAgCiAgICAgT3B0
aW9uYWw8dWludDMyX3Q+IGluZGV4ID0gcGFyc2VJbmRleChpZGVudCk7CiAgICAgaWYgKGluZGV4
ICYmIHRoaXNPYmplY3QtPmlzTWFwcGVkQXJndW1lbnQoaW5kZXgudmFsdWUoKSkpIHsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dldHRlclNldHRlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2V0dGVyU2V0dGVyLmNwcAkocmV2
aXNpb24gMjcxNTgwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2V0dGVyU2V0
dGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTcsNyArNTcsNyBAQCBKU1ZhbHVlIGNhbGxHZXR0
ZXIoSlNHbG9iYWxPYmplY3QqIGdsb2JhCiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBj
YWxsKGdsb2JhbE9iamVjdCwgZ2V0dGVyLCBjYWxsRGF0YSwgYmFzZSwgQXJnTGlzdCgpKSk7CiB9
CiAKLWJvb2wgY2FsbFNldHRlcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVl
IGJhc2UsIEpTVmFsdWUgZ2V0dGVyU2V0dGVyLCBKU1ZhbHVlIHZhbHVlLCBFQ01BTW9kZSBlY21h
TW9kZSkKK2Jvb2wgY2FsbFNldHRlcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1Zh
bHVlIGJhc2UsIEpTVmFsdWUgZ2V0dGVyU2V0dGVyLCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3Vs
ZFRocm93KQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CkBAIC02NSw3ICs2NSw3IEBAIGJvb2wgY2Fs
bFNldHRlcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2IKICAgICBHZXR0ZXJTZXR0ZXIqIGdldHRl
clNldHRlck9iaiA9IGpzQ2FzdDxHZXR0ZXJTZXR0ZXIqPihnZXR0ZXJTZXR0ZXIpOwogCiAgICAg
aWYgKGdldHRlclNldHRlck9iai0+aXNTZXR0ZXJOdWxsKCkpCi0gICAgICAgIHJldHVybiB0eXBl
RXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgZWNtYU1vZGUuaXNTdHJpY3QoKSwgUmVhZG9ubHlQ
cm9wZXJ0eVdyaXRlRXJyb3IpOworICAgICAgICByZXR1cm4gdHlwZUVycm9yKGdsb2JhbE9iamVj
dCwgc2NvcGUsIHNob3VsZFRocm93LCBSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcik7CiAKICAg
ICBKU09iamVjdCogc2V0dGVyID0gZ2V0dGVyU2V0dGVyT2JqLT5zZXR0ZXIoKTsKIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2V0dGVyU2V0dGVyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2V0dGVyU2V0dGVyLmgJKHJldmlzaW9u
IDI3MTU4MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dldHRlclNldHRlci5o
CSh3b3JraW5nIGNvcHkpCkBAIC01NCw3ICs1NCw3IEBAIHByaXZhdGU6CiAKIHB1YmxpYzoKIAot
ICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1
Y3R1cmVGbGFncyB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IFN0cnVjdHVyZUlzSW1t
b3J0YWw7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJh
c2U6OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJp
ZGVzUHV0IHwgU3RydWN0dXJlSXNJbW1vcnRhbDsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENl
bGxUeXBlLCBTdWJzcGFjZUFjY2Vzcz4KICAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNl
Rm9yKFZNJiB2bSkKQEAgLTEzNSw2ICsxMzUsNiBAQCBwcml2YXRlOgogfTsKIAogSlNWYWx1ZSBj
YWxsR2V0dGVyKEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBiYXNlLCBKU1ZhbHVlIGdldHRlclNl
dHRlcik7Ci1KU19FWFBPUlRfUFJJVkFURSBib29sIGNhbGxTZXR0ZXIoSlNHbG9iYWxPYmplY3Qq
LCBKU1ZhbHVlIGJhc2UsIEpTVmFsdWUgZ2V0dGVyU2V0dGVyLCBKU1ZhbHVlLCBFQ01BTW9kZSk7
CitKU19FWFBPUlRfUFJJVkFURSBib29sIGNhbGxTZXR0ZXIoSlNHbG9iYWxPYmplY3QqLCBKU1Zh
bHVlIGJhc2UsIEpTVmFsdWUgZ2V0dGVyU2V0dGVyLCBKU1ZhbHVlLCBib29sIHNob3VsZFRocm93
KTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0FycmF5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0FycmF5LmNwcAkocmV2aXNpb24gMjcxNTgwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNBcnJheS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzOCwxMCArMjM4LDYg
QEAgYm9vbCBKU0FycmF5OjpwdXQoSlNDZWxsKiBjZWxsLCBKU0dsb2JhbAogICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIEpTQXJyYXkqIHRoaXNPYmplY3Qg
PSBqc0Nhc3Q8SlNBcnJheSo+KGNlbGwpOwotCi0gICAgaWYgKFVOTElLRUxZKGlzVGhpc1ZhbHVl
QWx0ZXJlZChzbG90LCB0aGlzT2JqZWN0KSkpCi0gICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihz
Y29wZSwgb3JkaW5hcnlTZXRTbG93KGdsb2JhbE9iamVjdCwgdGhpc09iamVjdCwgcHJvcGVydHlO
YW1lLCB2YWx1ZSwgc2xvdC50aGlzVmFsdWUoKSwgc2xvdC5pc1N0cmljdE1vZGUoKSkpOwotCiAg
ICAgdGhpc09iamVjdC0+ZW5zdXJlV3JpdGFibGUodm0pOwogCiAgICAgaWYgKHByb3BlcnR5TmFt
ZSA9PSB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgpIHsKQEAgLTI1MSw2ICsyNDcsOSBAQCBib29s
IEpTQXJyYXk6OnB1dChKU0NlbGwqIGNlbGwsIEpTR2xvYmFsCiAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgICAgIH0KIAorICAgICAgICBpZiAoVU5MSUtFTFkoc2xvdC50aGlzVmFsdWUo
KSAhPSB0aGlzT2JqZWN0KSkKKyAgICAgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwg
SlNPYmplY3Q6OnB1dCh0aGlzT2JqZWN0LCBnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgdmFs
dWUsIHNsb3QpKTsKKwogICAgICAgICB1bnNpZ25lZCBuZXdMZW5ndGggPSB2YWx1ZS50b1VJbnQz
MihnbG9iYWxPYmplY3QpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBmYWxz
ZSk7CiAgICAgICAgIGRvdWJsZSB2YWx1ZUFzTnVtYmVyID0gdmFsdWUudG9OdW1iZXIoZ2xvYmFs
T2JqZWN0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmgJKHJl
dmlzaW9uIDI3MTU4MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXku
aAkod29ya2luZyBjb3B5KQpAQCAtNDAsNyArNDAsNyBAQCBjbGFzcyBKU0FycmF5IDogcHVibGlj
IEpTTm9uRmluYWxPYmplY3QgCiAKIHB1YmxpYzoKICAgICB0eXBlZGVmIEpTTm9uRmluYWxPYmpl
Y3QgQmFzZTsKLSAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0g
QmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVy
cmlkZXNHZXRPd25TcGVjaWFsUHJvcGVydHlOYW1lczsKKyAgICBzdGF0aWMgY29uc3RleHByIHVu
c2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBPdmVycmlkZXNH
ZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNHZXRPd25TcGVjaWFsUHJvcGVydHlOYW1lcyB8
IE92ZXJyaWRlc1B1dDsKIAogICAgIHN0YXRpYyBzaXplX3QgYWxsb2NhdGlvblNpemUoQ2hlY2tl
ZDxzaXplX3Q+IGlubGluZUNhcGFjaXR5KQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5jcHAJKHJldmlzaW9uIDI3
MTU4MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY5LDE4ICsxNjksNiBAQCB2b2lkIEpTQXJyYXlCdWZm
ZXJWaWV3Ojp2aXNpdENoaWxkcmVuKEpTCiAgICAgfQogfQogCi1ib29sIEpTQXJyYXlCdWZmZXJW
aWV3OjpwdXQoCi0gICAgSlNDZWxsKiBjZWxsLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLAotICAgIFB1dFByb3Bl
cnR5U2xvdCYgc2xvdCkKLXsKLSAgICBKU0FycmF5QnVmZmVyVmlldyogdGhpc09iamVjdCA9IGpz
Q2FzdDxKU0FycmF5QnVmZmVyVmlldyo+KGNlbGwpOwotCi0gICAgaWYgKFVOTElLRUxZKGlzVGhp
c1ZhbHVlQWx0ZXJlZChzbG90LCB0aGlzT2JqZWN0KSkpCi0gICAgICAgIHJldHVybiBvcmRpbmFy
eVNldFNsb3coZ2xvYmFsT2JqZWN0LCB0aGlzT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBz
bG90LnRoaXNWYWx1ZSgpLCBzbG90LmlzU3RyaWN0TW9kZSgpKTsKLSAgICAKLSAgICByZXR1cm4g
QmFzZTo6cHV0KHRoaXNPYmplY3QsIGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwg
c2xvdCk7Ci19Ci0KIEFycmF5QnVmZmVyKiBKU0FycmF5QnVmZmVyVmlldzo6dW5zaGFyZWRCdWZm
ZXIoKQogewogICAgIEFycmF5QnVmZmVyKiByZXN1bHQgPSBwb3NzaWJseVNoYXJlZEJ1ZmZlcigp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVm
ZmVyVmlldy5oCShyZXZpc2lvbiAyNzE1ODApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0FycmF5QnVmZmVyVmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNjksOCArMTY5LDYg
QEAgcHJvdGVjdGVkOgogICAgIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIEpTQXJyYXlCdWZmZXJW
aWV3KFZNJiwgQ29uc3RydWN0aW9uQ29udGV4dCYpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZv
aWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKLSAgICAKLSAgICBzdGF0aWMgYm9vbCBwdXQoSlNDZWxs
KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xv
dCYpOwogCiAgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRv
ciYpOwogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNWYWx1
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNW
YWx1ZS5jcHAJKHJldmlzaW9uIDI3MTU4MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTQ0pTVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTksNyArMjE5LDcgQEAgSlNP
YmplY3QqIEpTVmFsdWU6OnN5bnRoZXNpemVQcm90b3R5cGUoSgogICAgIHJldHVybiBudWxscHRy
OwogfQogCi0vLyBFQ01BIDguNy4yCisvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9y
ZGluYXJ5c2V0CiBib29sIEpTVmFsdWU6OnB1dFRvUHJpbWl0aXZlKEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFB1
dFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7
CkBAIC0yMzMsNjMgKzIzMywxMSBAQCBib29sIEpTVmFsdWU6OnB1dFRvUHJpbWl0aXZlKEpTR2xv
YmFsT2JqCiAgICAgRVhDRVBUSU9OX0FTU0VSVCghIXNjb3BlLmV4Y2VwdGlvbigpID09ICFvYmop
OwogICAgIGlmIChVTkxJS0VMWSghb2JqKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIEpT
VmFsdWUgcHJvdG90eXBlOwotICAgIGlmIChwcm9wZXJ0eU5hbWUgIT0gdm0ucHJvcGVydHlOYW1l
cy0+dW5kZXJzY29yZVByb3RvKSB7Ci0gICAgICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICAgICAg
ICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG9iai0+c3RydWN0dXJlKHZtKTsKLSAgICAgICAgICAg
IGlmIChzdHJ1Y3R1cmUtPmhhc1JlYWRPbmx5T3JHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzRXhjbHVk
aW5nUHJvdG8oKSB8fCBzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkuaGFzUHV0UHJvcGVydHlTZWN1cml0
eUNoZWNrKCkpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBpZiAob2JqLT50
eXBlKCkgPT0gUHJveHlPYmplY3RUeXBlKSB7Ci0gICAgICAgICAgICAgICAgYXV0byogcHJveHkg
PSBqc0Nhc3Q8UHJveHlPYmplY3QqPihvYmopOwotICAgICAgICAgICAgICAgIFJFTEVBU0VfQU5E
X1JFVFVSTihzY29wZSwgcHJveHktPlByb3h5T2JqZWN0OjpwdXQocHJveHksIGdsb2JhbE9iamVj
dCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCkpOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgcHJvdG90eXBlID0gb2JqLT5nZXRQcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCk7Ci0gICAg
ICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBmYWxzZSk7Ci0KLSAgICAgICAgICAg
IGlmIChwcm90b3R5cGUuaXNOdWxsKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHR5cGVFcnJv
cihnbG9iYWxPYmplY3QsIHNjb3BlLCBzbG90LmlzU3RyaWN0TW9kZSgpLCBSZWFkb25seVByb3Bl
cnR5V3JpdGVFcnJvcik7Ci0gICAgICAgICAgICBvYmogPSBhc09iamVjdChwcm90b3R5cGUpOwot
ICAgICAgICB9Ci0gICAgfQogCi0gICAgZm9yICg7IDsgb2JqID0gYXNPYmplY3QocHJvdG90eXBl
KSkgewotICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG9iai0+c3RydWN0dXJlKHZtKTsK
LSAgICAgICAgaWYgKFVOTElLRUxZKHN0cnVjdHVyZS0+dHlwZUluZm8oKS5oYXNQdXRQcm9wZXJ0
eVNlY3VyaXR5Q2hlY2soKSkpIHsKLSAgICAgICAgICAgIG9iai0+bWV0aG9kVGFibGUodm0pLT5k
b1B1dFByb3BlcnR5U2VjdXJpdHlDaGVjayhvYmosIGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1l
LCBzbG90KTsKLSAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGZhbHNlKTsK
LSAgICAgICAgfQotICAgICAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzOwotICAgICAgICBQcm9wZXJ0
eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldCh2bSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1
dGVzKTsKLSAgICAgICAgaWYgKG9mZnNldCAhPSBpbnZhbGlkT2Zmc2V0KSB7Ci0gICAgICAgICAg
ICBpZiAoYXR0cmlidXRlcyAmIFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSkKLSAgICAgICAg
ICAgICAgICByZXR1cm4gdHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsIHNsb3QuaXNTdHJp
Y3RNb2RlKCksIFJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9yKTsKLQotICAgICAgICAgICAgSlNW
YWx1ZSBncyA9IG9iai0+Z2V0RGlyZWN0KG9mZnNldCk7Ci0gICAgICAgICAgICBpZiAoZ3MuaXNH
ZXR0ZXJTZXR0ZXIoKSkKLSAgICAgICAgICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUs
IGNhbGxTZXR0ZXIoZ2xvYmFsT2JqZWN0LCAqdGhpcywgZ3MsIHZhbHVlLCBzbG90LmlzU3RyaWN0
TW9kZSgpID8gRUNNQU1vZGU6OnN0cmljdCgpIDogRUNNQU1vZGU6OnNsb3BweSgpKSk7Ci0KLSAg
ICAgICAgICAgIGlmIChncy5pc0N1c3RvbUdldHRlclNldHRlcigpKSB7Ci0gICAgICAgICAgICAg
ICAgYXV0byBzZXR0ZXIgPSBqc0Nhc3Q8Q3VzdG9tR2V0dGVyU2V0dGVyKj4oZ3MuYXNDZWxsKCkp
LT5zZXR0ZXIoKTsKLSAgICAgICAgICAgICAgICBib29sIGlzQWNjZXNzb3IgPSBhdHRyaWJ1dGVz
ICYgUHJvcGVydHlBdHRyaWJ1dGU6OkN1c3RvbUFjY2Vzc29yOwotICAgICAgICAgICAgICAgIGF1
dG8gcmVzdWx0ID0gY2FsbEN1c3RvbVNldHRlcihnbG9iYWxPYmplY3QsIHNldHRlciwgaXNBY2Nl
c3Nvciwgb2JqLCBzbG90LnRoaXNWYWx1ZSgpLCB2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgaWYg
KHJlc3VsdCAhPSBUcmlTdGF0ZTo6SW5kZXRlcm1pbmF0ZSkKLSAgICAgICAgICAgICAgICAgICAg
UkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCByZXN1bHQgPT0gVHJpU3RhdGU6OlRydWUpOwotICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBJZiB0aGVyZSdzIGFuIGV4aXN0aW5nIHByb3Bl
cnR5IG9uIHRoZSBvYmplY3Qgb3Igb25lIG9mIGl0cyAKLSAgICAgICAgICAgIC8vIHByb3RvdHlw
ZXMgaXQgc2hvdWxkIGJlIHJlcGxhY2VkLCBzbyBicmVhayBoZXJlLgotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKG9iai0+dHlwZSgpID09IFByb3h5T2JqZWN0VHlw
ZSkgewotICAgICAgICAgICAgYXV0byogcHJveHkgPSBqc0Nhc3Q8UHJveHlPYmplY3QqPihvYmop
OwotICAgICAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBwcm94eS0+UHJveHlPYmpl
Y3Q6OnB1dChwcm94eSwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KSk7
Ci0gICAgICAgIH0KLSAgICAgICAgcHJvdG90eXBlID0gb2JqLT5nZXRQcm90b3R5cGUodm0sIGds
b2JhbE9iamVjdCk7Ci0gICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGZhbHNlKTsK
LSAgICAgICAgaWYgKHByb3RvdHlwZS5pc051bGwoKSkKLSAgICAgICAgICAgIGJyZWFrOwotICAg
IH0KLSAgICAKKyAgICBpZiAoIW9iai0+Y2FuUGVyZm9ybUZhc3RQdXRJbmxpbmUodm0sIHByb3Bl
cnR5TmFtZSkpCisgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgb2JqLT5wdXRJbmxp
bmVTbG93KGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCkpOworCisgICAg
Ly8gRklYTUU6IEZvciBhbiBhdHRlbXB0IHRvIGNyZWF0ZSBhIHByb3BlcnR5IG9uIGEgcHJpbWl0
aXZlLCB0aGUgZXJyb3IgbWVzc2FnZSBpcyBtaXNsZWFkaW5nLgogICAgIHJldHVybiB0eXBlRXJy
b3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgc2xvdC5pc1N0cmljdE1vZGUoKSwgUmVhZG9ubHlQcm9w
ZXJ0eVdyaXRlRXJyb3IpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0NlbGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTQ2VsbC5jcHAJKHJldmlzaW9uIDI3MTU4MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTQ2VsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwMSwxMSArMjAxLDYgQEAgYm9v
bCBKU0NlbGw6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSgogICAgIHJldHVybiBmYWxzZTsK
IH0KIAotdm9pZCBKU0NlbGw6OmRvUHV0UHJvcGVydHlTZWN1cml0eUNoZWNrKEpTT2JqZWN0Kiwg
SlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIFB1dFByb3BlcnR5U2xvdCYpCi17Ci0gICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLX0KLQogdm9pZCBKU0NlbGw6OmdldE93blBy
b3BlcnR5TmFtZXMoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZUFycmF5
JiwgRG9udEVudW1Qcm9wZXJ0aWVzTW9kZSkKIHsKICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgJKHJldmlz
aW9uIDI3MTU4MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yNTksNyArMjU5LDYgQEAgcHJvdGVjdGVkOgogICAgIHN0YXRpYyBi
b29sIGRlZmluZU93blByb3BlcnR5KEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0
eU5hbWUsIGNvbnN0IFByb3BlcnR5RGVzY3JpcHRvciYsIGJvb2wgc2hvdWxkVGhyb3cpOwogICAg
IHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0
KiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Q
cm9wZXJ0eVNsb3RCeUluZGV4KEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCB1bnNpZ25lZCBw
cm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwotICAgIHN0YXRpYyBOT19SRVRVUk5fRFVFX1RP
X0NSQVNIIHZvaWQgZG9QdXRQcm9wZXJ0eVNlY3VyaXR5Q2hlY2soSlNPYmplY3QqLCBKU0dsb2Jh
bE9iamVjdCosIFByb3BlcnR5TmFtZSwgUHV0UHJvcGVydHlTbG90Jik7CiAKIHByaXZhdGU6CiAg
ICAgZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uY3BwCShyZXZpc2lvbiAyNzE1ODApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNTE2LDEwICs1MTYsNiBAQCBib29sIEpTRnVuY3Rpb246OnB1dChKU0NlbGwqIGNl
bGwsIEpTR2xvCiAgICAgICAgICAgICByYXJlRGF0YS0+c2V0SGFzTW9kaWZpZWROYW1lRm9yTm9u
SG9zdEZ1bmN0aW9uKCk7CiAgICAgfQogCi0gICAgaWYgKFVOTElLRUxZKGlzVGhpc1ZhbHVlQWx0
ZXJlZChzbG90LCB0aGlzT2JqZWN0KSkpCi0gICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29w
ZSwgb3JkaW5hcnlTZXRTbG93KGdsb2JhbE9iamVjdCwgdGhpc09iamVjdCwgcHJvcGVydHlOYW1l
LCB2YWx1ZSwgc2xvdC50aGlzVmFsdWUoKSwgc2xvdC5pc1N0cmljdE1vZGUoKSkpOwotCi0KICAg
ICBpZiAodGhpc09iamVjdC0+aXNIb3N0T3JCdWlsdGluRnVuY3Rpb24oKSkgewogICAgICAgICBQ
cm9wZXJ0eVN0YXR1cyBwcm9wZXJ0eVR5cGUgPSB0aGlzT2JqZWN0LT5yZWlmeUxhenlQcm9wZXJ0
eUZvckhvc3RPckJ1aWx0aW5JZk5lZWRlZCh2bSwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUp
OwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBmYWxzZSk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5oCShyZXZpc2lvbiAyNzE1ODAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTcwLDcgKzcwLDcgQEAgcHVibGljOgogICAgIH0KICAgICAKICAgICB0eXBlZGVm
IEpTQ2FsbGVlIEJhc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVG
bGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90
IHwgT3ZlcnJpZGVzR2V0T3duU3BlY2lhbFByb3BlcnR5TmFtZXMgfCBPdmVycmlkZXNHZXRDYWxs
RGF0YTsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFz
ZTo6U3RydWN0dXJlRmxhZ3MgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlk
ZXNHZXRPd25TcGVjaWFsUHJvcGVydHlOYW1lcyB8IE92ZXJyaWRlc0dldENhbGxEYXRhIHwgT3Zl
cnJpZGVzUHV0OwogCiAgICAgc3RhdGljIHNpemVfdCBhbGxvY2F0aW9uU2l6ZShDaGVja2VkPHNp
emVfdD4gaW5saW5lQ2FwYWNpdHkpCiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXcuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlldy5oCShyZXZpc2lv
biAyNzE1ODApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBl
ZEFycmF5Vmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC05Niw3ICs5Niw3IEBAIHB1YmxpYzoKICAg
ICB1c2luZyBCYXNlID0gSlNBcnJheUJ1ZmZlclZpZXc7CiAgICAgdHlwZWRlZiB0eXBlbmFtZSBB
ZGFwdG9yOjpUeXBlIEVsZW1lbnRUeXBlOwogCi0gICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25l
ZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJpZGVzR2V0T3du
UHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlOYW1lcyB8IEludGVyY2VwdHNH
ZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm87CisgICAgc3Rh
dGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZs
YWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVy
dHlOYW1lcyB8IE92ZXJyaWRlc1B1dCB8IEludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUlu
ZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm87CiAKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2ln
bmVkIGVsZW1lbnRTaXplID0gc2l6ZW9mKHR5cGVuYW1lIEFkYXB0b3I6OlR5cGUpOwogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbExleGljYWxFbnZpcm9ubWVu
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFs
TGV4aWNhbEVudmlyb25tZW50LmgJKHJldmlzaW9uIDI3MTU4MCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsTGV4aWNhbEVudmlyb25tZW50LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTMzLDcgKzMzLDcgQEAgY2xhc3MgSlNHbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQgZmlu
YWwgOgogcHVibGljOgogICAgIHVzaW5nIEJhc2UgPSBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0
OwogCi0gICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6
OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90OworICAgIHN0YXRp
YyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFn
cyB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRlc1B1dDsKIAogICAgIHRl
bXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2VzcyBtb2RlPgogICAgIHN0YXRp
YyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAkocmV2aXNpb24gMjcxNTgw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xNDU3LDggKzE0NTcsMTIgQEAgYm9vbCBKU0dsb2JhbE9iamVjdDo6
cHV0KEpTQ2VsbCogY2VsbCwgSgogICAgIEpTR2xvYmFsT2JqZWN0KiB0aGlzT2JqZWN0ID0ganND
YXN0PEpTR2xvYmFsT2JqZWN0Kj4oY2VsbCk7CiAgICAgQVNTRVJUKCFIZWFwOjpoZWFwKHZhbHVl
KSB8fCBIZWFwOjpoZWFwKHZhbHVlKSA9PSBIZWFwOjpoZWFwKHRoaXNPYmplY3QpKTsKIAotICAg
IGlmIChVTkxJS0VMWShpc1RoaXNWYWx1ZUFsdGVyZWQoc2xvdCwgdGhpc09iamVjdCkpKQotICAg
ICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIG9yZGluYXJ5U2V0U2xvdyhnbG9iYWxPYmpl
Y3QsIHRoaXNPYmplY3QsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QudGhpc1ZhbHVlKCksIHNs
b3QuaXNTdHJpY3RNb2RlKCkpKTsKKyAgICBpZiAoVU5MSUtFTFkoaXNUaGlzVmFsdWVBbHRlcmVk
KHNsb3QsIHRoaXNPYmplY3QpKSkgeworICAgICAgICBTeW1ib2xUYWJsZUVudHJ5OjpGYXN0IGVu
dHJ5ID0gdGhpc09iamVjdC0+c3ltYm9sVGFibGUoKS0+Z2V0KHByb3BlcnR5TmFtZS51aWQoKSk7
CisgICAgICAgIGlmICghZW50cnkuaXNOdWxsKCkgJiYgZW50cnkuaXNSZWFkT25seSgpKQorICAg
ICAgICAgICAgcmV0dXJuIHR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCBzbG90LmlzU3Ry
aWN0TW9kZSgpLCBSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcik7CisgICAgICAgIFJFTEVBU0Vf
QU5EX1JFVFVSTihzY29wZSwgQmFzZTo6cHV0KHRoaXNPYmplY3QsIGdsb2JhbE9iamVjdCwgcHJv
cGVydHlOYW1lLCB2YWx1ZSwgc2xvdCkpOworICAgIH0KIAogICAgIGJvb2wgc2hvdWxkVGhyb3dS
ZWFkT25seUVycm9yID0gc2xvdC5pc1N0cmljdE1vZGUoKTsKICAgICBib29sIGlnbm9yZVJlYWRP
bmx5RXJyb3JzID0gZmFsc2U7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0dsb2JhbE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTR2xvYmFsT2JqZWN0LmgJKHJldmlzaW9uIDI3MTU4MCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTU3MSw3
ICs1NzEsNyBAQCBwdWJsaWM6CiAgICAgICAgIAogcHVibGljOgogICAgIHVzaW5nIEJhc2UgPSBK
U1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0OwotICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQg
U3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEhhc1N0YXRpY1Byb3BlcnR5
VGFibGUgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBJc0ltbXV0YWJsZVByb3RvdHlw
ZUV4b3RpY09iamVjdDsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZs
YWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBIYXNTdGF0aWNQcm9wZXJ0eVRhYmxlIHwgT3Zl
cnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzUHV0IHwgSXNJbW11dGFibGVQcm90
b3R5cGVFeG90aWNPYmplY3Q7CiAKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNEZXN0
cnVjdGlvbiA9IHRydWU7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNl
QWNjZXNzIG1vZGU+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xleGlj
YWxFbnZpcm9ubWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTTGV4aWNhbEVudmlyb25tZW50LmgJKHJldmlzaW9uIDI3MTU4MCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTGV4aWNhbEVudmlyb25tZW50LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQ4LDcgKzQ4LDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIHVzaW5nIEJhc2UgPSBK
U1N5bWJvbFRhYmxlT2JqZWN0OwotICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0
dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5
U2xvdCB8IE92ZXJyaWRlc0dldE93blNwZWNpYWxQcm9wZXJ0eU5hbWVzOworICAgIHN0YXRpYyBj
b25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8
IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRlc0dldE93blNwZWNpYWxQcm9w
ZXJ0eU5hbWVzIHwgT3ZlcnJpZGVzUHV0OwogCiAgICAgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3du
PiogdmFyaWFibGVzKCkKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU01vZHVsZUVudmlyb25tZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNNb2R1bGVFbnZpcm9ubWVudC5oCShyZXZpc2lvbiAyNzE1ODApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZUVudmlyb25tZW50LmgJKHdvcmtp
bmcgY29weSkKQEAgLTQwLDcgKzQwLDcgQEAgY2xhc3MgSlNNb2R1bGVFbnZpcm9ubWVudCBmaW5h
bCA6IHB1YmxpYwogICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CiBwdWJs
aWM6CiAgICAgdXNpbmcgQmFzZSA9IEpTTGV4aWNhbEVudmlyb25tZW50OwotICAgIHN0YXRpYyBj
b25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8
IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRlc0dldE93blNwZWNpYWxQcm9w
ZXJ0eU5hbWVzOworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3Mg
PSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92
ZXJyaWRlc0dldE93blNwZWNpYWxQcm9wZXJ0eU5hbWVzIHwgT3ZlcnJpZGVzUHV0OwogCiAgICAg
c3RhdGljIEpTTW9kdWxlRW52aXJvbm1lbnQqIGNyZWF0ZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEpTU2NvcGUqIGN1cnJlbnRTY29wZSwgU3ltYm9sVGFibGUqIHN5bWJv
bFRhYmxlLCBKU1ZhbHVlIGluaXRpYWxWYWx1ZSwgQWJzdHJhY3RNb2R1bGVSZWNvcmQqIG1vZHVs
ZVJlY29yZCkKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01v
ZHVsZU5hbWVzcGFjZU9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTTW9kdWxlTmFtZXNwYWNlT2JqZWN0LmgJKHJldmlzaW9uIDI3MTU4MCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlTmFtZXNwYWNlT2JqZWN0LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTMzLDcgKzMzLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiBjbGFzcyBK
U01vZHVsZU5hbWVzcGFjZU9iamVjdCBmaW5hbCA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsK
IHB1YmxpYzoKICAgICB1c2luZyBCYXNlID0gSlNOb25GaW5hbE9iamVjdDsKLSAgICBzdGF0aWMg
Y29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3Mg
fCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eU5h
bWVzIHwgSW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElz
Tm90WmVybyB8IEdldE93blByb3BlcnR5U2xvdElzSW1wdXJlRm9yUHJvcGVydHlBYnNlbmNlIHwg
SXNJbW11dGFibGVQcm90b3R5cGVFeG90aWNPYmplY3Q7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1
bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJpZGVz
R2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlOYW1lcyB8IE92ZXJy
aWRlc1B1dCB8IEludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5n
dGhJc05vdFplcm8gfCBHZXRPd25Qcm9wZXJ0eVNsb3RJc0ltcHVyZUZvclByb3BlcnR5QWJzZW5j
ZSB8IElzSW1tdXRhYmxlUHJvdG90eXBlRXhvdGljT2JqZWN0OwogCiAgICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOwogICAgIHN0YXRpYyB2b2lkIGRlc3Ry
b3koSlNDZWxsKik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVj
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmpl
Y3QuY3BwCShyZXZpc2lvbiAyNzE1ODApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU09iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY5OSwxMCArNjk5LDYgQEAgYm9vbCBK
U09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90KEpTT2JqZQogewogICAgIHJldHVybiBnZXRPd25Q
cm9wZXJ0eVNsb3RJbXBsKG9iamVjdCwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHNsb3Qp
OwogfQotCi12b2lkIEpTT2JqZWN0Ojpkb1B1dFByb3BlcnR5U2VjdXJpdHlDaGVjayhKU09iamVj
dCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBQdXRQcm9wZXJ0eVNsb3QmKQotewot
fQogI2VuZGlmIC8vIEFTU0VSVF9FTkFCTEVECiAKIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8v
ZWNtYTI2Mi8jc2VjLW9yZGluYXJ5c2V0CkBAIC03NTksMzMgKzc1NSw3IEBAIGJvb2wgb3JkaW5h
cnlTZXRTbG93KEpTR2xvYmFsT2JqZWN0KiBnbG8KICAgICAgICAgLy8gSW4gT3JkaW5hcnlTZXQs
IHRoZSByZWNlaXZlciBtYXkgbm90IGJlIHRoZSBzYW1lIHRvIHRoZSBvYmplY3QuCiAgICAgICAg
IC8vIFNvLCB3ZSBwZXJmb3JtIFtbR2V0T3duUHJvcGVydHldXSBvbnRvIHRoZSByZWNlaXZlciB3
aGlsZSB3ZSBhbHJlYWR5IHBlcmZvcm0gW1tHZXRPd25Qcm9wZXJ0eV1dIG9udG8gdGhlIG9iamVj
dC4KIAotICAgICAgICAvLyA5LjEuOS4xLTQtYyBMZXQgZXhpc3RpbmdEZXNjcmlwdG9yIGJlID8g
UmVjZWl2ZXIuW1tHZXRPd25Qcm9wZXJ0eV1dKFApLgotICAgICAgICBKU09iamVjdCogcmVjZWl2
ZXJPYmplY3QgPSBhc09iamVjdChyZWNlaXZlcik7Ci0gICAgICAgIFByb3BlcnR5RGVzY3JpcHRv
ciBleGlzdGluZ0Rlc2NyaXB0b3I7Ci0gICAgICAgIGJvb2wgZXhpc3RpbmdEZXNjcmlwdG9yRm91
bmQgPSByZWNlaXZlck9iamVjdC0+Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbE9iamVj
dCwgcHJvcGVydHlOYW1lLCBleGlzdGluZ0Rlc2NyaXB0b3IpOwotICAgICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCBmYWxzZSk7Ci0KLSAgICAgICAgLy8gOS4xLjkuMS00LWQgSWYgZXhp
c3RpbmdEZXNjcmlwdG9yIGlzIG5vdCB1bmRlZmluZWQsIHRoZW4KLSAgICAgICAgaWYgKGV4aXN0
aW5nRGVzY3JpcHRvckZvdW5kKSB7Ci0gICAgICAgICAgICAvLyA5LjEuOS4xLTQtZC1pIElmIElz
QWNjZXNzb3JEZXNjcmlwdG9yKGV4aXN0aW5nRGVzY3JpcHRvcikgaXMgdHJ1ZSwgcmV0dXJuIGZh
bHNlLgotICAgICAgICAgICAgaWYgKGV4aXN0aW5nRGVzY3JpcHRvci5pc0FjY2Vzc29yRGVzY3Jp
cHRvcigpKQotICAgICAgICAgICAgICAgIHJldHVybiB0eXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBz
Y29wZSwgc2hvdWxkVGhyb3csIFJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9yKTsKLQotICAgICAg
ICAgICAgLy8gOS4xLjkuMS00LWQtaWkgSWYgZXhpc3RpbmdEZXNjcmlwdG9yLltbV3JpdGFibGVd
XSBpcyBmYWxzZSwgcmV0dXJuIGZhbHNlLgotICAgICAgICAgICAgaWYgKCFleGlzdGluZ0Rlc2Ny
aXB0b3Iud3JpdGFibGUoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gdHlwZUVycm9yKGdsb2Jh
bE9iamVjdCwgc2NvcGUsIHNob3VsZFRocm93LCBSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcik7
Ci0KLSAgICAgICAgICAgIC8vIDkuMS45LjEtNC1kLWlpaSBMZXQgdmFsdWVEZXNjIGJlIHRoZSBQ
cm9wZXJ0eURlc2NyaXB0b3J7W1tWYWx1ZV1dOiBWfS4KLSAgICAgICAgICAgIFByb3BlcnR5RGVz
Y3JpcHRvciB2YWx1ZURlc2NyaXB0b3I7Ci0gICAgICAgICAgICB2YWx1ZURlc2NyaXB0b3Iuc2V0
VmFsdWUodmFsdWUpOwotCi0gICAgICAgICAgICAvLyA5LjEuOS4xLTQtZC1pdiBSZXR1cm4gPyBS
ZWNlaXZlci5bW0RlZmluZU93blByb3BlcnR5XV0oUCwgdmFsdWVEZXNjKS4KLSAgICAgICAgICAg
IFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgcmVjZWl2ZXJPYmplY3QtPm1ldGhvZFRhYmxlKHZt
KS0+ZGVmaW5lT3duUHJvcGVydHkocmVjZWl2ZXJPYmplY3QsIGdsb2JhbE9iamVjdCwgcHJvcGVy
dHlOYW1lLCB2YWx1ZURlc2NyaXB0b3IsIHNob3VsZFRocm93KSk7Ci0gICAgICAgIH0KLQotICAg
ICAgICAvLyA5LjEuOS4xLTQtZSBFbHNlIFJlY2VpdmVyIGRvZXMgbm90IGN1cnJlbnRseSBoYXZl
IGEgcHJvcGVydHkgUCwKLSAgICAgICAgLy8gOS4xLjkuMS00LWUtaSBSZXR1cm4gPyBDcmVhdGVE
YXRhUHJvcGVydHkoUmVjZWl2ZXIsIFAsIFYpLgotICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4o
c2NvcGUsIHJlY2VpdmVyT2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPmRlZmluZU93blByb3BlcnR5
KHJlY2VpdmVyT2JqZWN0LCBnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNj
cmlwdG9yKHZhbHVlLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6Ok5v
bmUpKSwgc2hvdWxkVGhyb3cpKTsKKyAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBv
cmRpbmFyeVNldFNsb3dEZWZpbmVQcm9wZXJ0eU9uUmVjZWl2ZXIoZ2xvYmFsT2JqZWN0LCBhc09i
amVjdChyZWNlaXZlciksIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNob3VsZFRocm93KSk7CiAgICAg
fQogCiAgICAgLy8gOS4xLjkuMS01IEFzc2VydDogSXNBY2Nlc3NvckRlc2NyaXB0b3Iob3duRGVz
YykgaXMgdHJ1ZS4KQEAgLTgxMSw4NyArNzgxLDE1OSBAQCBib29sIG9yZGluYXJ5U2V0U2xvdyhK
U0dsb2JhbE9iamVjdCogZ2xvCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLS8vIEVDTUEgOC42LjIu
MgorLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtb3JkaW5hcnlzZXQgKHN0
ZXBzIDMuYy1lKQorYm9vbCBvcmRpbmFyeVNldFNsb3dEZWZpbmVQcm9wZXJ0eU9uUmVjZWl2ZXIo
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNPYmplY3QqIHJlY2VpdmVyLCBQcm9wZXJ0
eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZFRocm93KQorewor
ICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBQcm9wZXJ0eVNsb3Qgc2xvdChyZWNlaXZlciwgUHJv
cGVydHlTbG90OjpJbnRlcm5hbE1ldGhvZFR5cGU6OkdldE93blByb3BlcnR5KTsKKyAgICBib29s
IGhhc1Byb3BlcnR5ID0gcmVjZWl2ZXItPm1ldGhvZFRhYmxlKHZtKS0+Z2V0T3duUHJvcGVydHlT
bG90KHJlY2VpdmVyLCBnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgc2xvdCk7CisgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZmFsc2UpOworICAgIGlmIChoYXNQcm9wZXJ0eSkgewor
ICAgICAgICBpZiAoc2xvdC5hdHRyaWJ1dGVzKCkgJiBQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9u
bHkpCisgICAgICAgICAgICByZXR1cm4gdHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsIHNo
b3VsZFRocm93LCBSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcik7CisKKyAgICAgICAgLy8gRklY
TUU6IEZvciBhbiBhY2Nlc3NvciB3aXRoIHNldHRlciwgdGhlIGVycm9yIG1lc3NhZ2UgaXMgbWlz
bGVhZGluZy4KKyAgICAgICAgaWYgKHNsb3QuYXR0cmlidXRlcygpICYgUHJvcGVydHlBdHRyaWJ1
dGU6OkFjY2Vzc29yT3JDdXN0b21BY2Nlc3NvcikKKyAgICAgICAgICAgIHJldHVybiB0eXBlRXJy
b3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgc2hvdWxkVGhyb3csIFJlYWRvbmx5UHJvcGVydHlXcml0
ZUVycm9yKTsKKworICAgICAgICBQcm9wZXJ0eURlc2NyaXB0b3IgdmFsdWVEZXNjcmlwdG9yOwor
ICAgICAgICB2YWx1ZURlc2NyaXB0b3Iuc2V0VmFsdWUodmFsdWUpOworCisgICAgICAgIFJFTEVB
U0VfQU5EX1JFVFVSTihzY29wZSwgcmVjZWl2ZXItPm1ldGhvZFRhYmxlKHZtKS0+ZGVmaW5lT3du
UHJvcGVydHkocmVjZWl2ZXIsIGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZURlc2Ny
aXB0b3IsIHNob3VsZFRocm93KSk7CisgICAgfQorCisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNj
b3BlLCByZWNlaXZlci0+bWV0aG9kVGFibGUodm0pLT5kZWZpbmVPd25Qcm9wZXJ0eShyZWNlaXZl
ciwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvcih2YWx1ZSwg
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpOb25lKSksIHNob3VsZFRo
cm93KSk7Cit9CisKKy8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb3JkaW5hcnlzZXQK
IGJvb2wgSlNPYmplY3Q6OnB1dChKU0NlbGwqIGNlbGwsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFB1dFByb3Bl
cnR5U2xvdCYgc2xvdCkKIHsKICAgICByZXR1cm4gcHV0SW5saW5lRm9ySlNPYmplY3QoY2VsbCwg
Z2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KTsKIH0KIAorYm9vbCBKU09i
amVjdDo6cHV0SW5saW5lRmFzdFdpdGhSZWNlaXZlckNoZWNrKEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFB1dFBy
b3BlcnR5U2xvdCYgc2xvdCkKK3sKKyAgICBBU1NFUlQoIXBhcnNlSW5kZXgocHJvcGVydHlOYW1l
KSk7CisKKyAgICBWTSYgdm0gPSBnZXRWTShnbG9iYWxPYmplY3QpOworICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIGlmIChKU09iamVjdCogcmVjZWl2ZXIg
PSBzbG90LnRoaXNWYWx1ZSgpLmdldE9iamVjdCgpKSB7CisgICAgICAgIGlmIChyZWNlaXZlciAh
PSB0aGlzKSB7CisgICAgICAgICAgICBpZiAocmVjZWl2ZXItPnR5cGUoKSA9PSBJbXB1cmVQcm94
eVR5cGUgfHwgcmVjZWl2ZXItPnR5cGUoKSA9PSBQcm94eU9iamVjdFR5cGUgfHwgc2xvdC5jb250
ZXh0KCkgPT0gUHV0UHJvcGVydHlTbG90OjpSZWZsZWN0U2V0KQorICAgICAgICAgICAgICAgIFJF
TEVBU0VfQU5EX1JFVFVSTihzY29wZSwgb3JkaW5hcnlTZXRTbG93RGVmaW5lUHJvcGVydHlPblJl
Y2VpdmVyKGdsb2JhbE9iamVjdCwgcmVjZWl2ZXIsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3Qu
aXNTdHJpY3RNb2RlKCkpKTsKKyAgICAgICAgICAgIGlmIChyZWNlaXZlci0+dHlwZSgpID09IFB1
cmVGb3J3YXJkaW5nUHJveHlUeXBlICYmIGpzQ2FzdDxKU1Byb3h5Kj4ocmVjZWl2ZXIpLT50YXJn
ZXQoKSA9PSB0aGlzKQorICAgICAgICAgICAgICAgIHJlY2VpdmVyID0gdGhpczsKKyAgICAgICAg
fQorICAgICAgICBpZiAocmVjZWl2ZXItPnB1dERpcmVjdEludGVybmFsPFB1dE1vZGVQdXQ+KHZt
LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCAwLCBzbG90KSkKKyAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0KKyAgICAvLyBGSVhNRTogRm9yIGZhaWx1cmVzIGR1ZSB0byBub24tZXh0ZW5zaWJs
ZSBzdHJ1Y3R1cmUgb3IgcHJpbWl0aXZlIHJlY2VpdmVyLCB0aGUgZXJyb3IgbWVzc2FnZSBpcyBt
aXNsZWFkaW5nLgorICAgIHJldHVybiB0eXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgc2xv
dC5pc1N0cmljdE1vZGUoKSwgUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpOworfQorCitBTFdB
WVNfSU5MSU5FIHN0YXRpYyBib29sIGZpbmRQcm9wZXJ0eUZvclB1dChWTSYgdm0sIEpTT2JqZWN0
KiBvYmplY3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIHVuc2lnbmVkJiBhdHRyaWJ1dGVz
LCBQcm9wZXJ0eU9mZnNldCYgb2Zmc2V0LCBQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYyYg
Y3VzdG9tU2V0dGVyKQoreworICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gb2JqZWN0LT5zdHJ1
Y3R1cmUodm0pOworICAgIG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0KHZtLCBwcm9wZXJ0eU5hbWUs
IGF0dHJpYnV0ZXMpOworICAgIGlmIChpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpIHsKKyAgICAgICAg
aWYgKGF0dHJpYnV0ZXMgJiBQcm9wZXJ0eUF0dHJpYnV0ZTo6Q3VzdG9tQWNjZXNzb3JPclZhbHVl
KSB7CisgICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gb2JqZWN0LT5nZXREaXJlY3Qob2Zmc2V0
KTsKKyAgICAgICAgICAgIGN1c3RvbVNldHRlciA9IGpzQ2FzdDxDdXN0b21HZXR0ZXJTZXR0ZXIq
Pih2YWx1ZS5hc0NlbGwoKSktPnNldHRlcigpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0
cnVlOworICAgIH0KKworICAgIGlmICghc3RydWN0dXJlLT5zdGF0aWNQcm9wZXJ0aWVzUmVpZmll
ZCgpICYmIHN0cnVjdHVyZS0+Y2xhc3NJbmZvKCktPmhhc1N0YXRpY1NldHRlck9yUmVhZG9ubHlQ
cm9wZXJ0aWVzKCkpIHsKKyAgICAgICAgaWYgKGF1dG8gZW50cnkgPSBzdHJ1Y3R1cmUtPmZpbmRQ
cm9wZXJ0eUhhc2hFbnRyeShwcm9wZXJ0eU5hbWUpKSB7CisgICAgICAgICAgICBjb25zdCBIYXNo
VGFibGVWYWx1ZSogdmFsdWUgPSBlbnRyeS0+dmFsdWU7CisgICAgICAgICAgICBhdHRyaWJ1dGVz
ID0gdmFsdWUtPmF0dHJpYnV0ZXMoKTsKKyAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVzICYgUHJv
cGVydHlBdHRyaWJ1dGU6OkFjY2Vzc29yKQorICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXMgfD0g
UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5OworICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZXMg
JiBQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKCEoYXR0cmlidXRlcyAmIFByb3Bl
cnR5QXR0cmlidXRlOjpET01KSVRBdHRyaWJ1dGUpLCAiRE9NSklUQXR0cmlidXRlIHN1cHBvcnRz
IHJlYWRvbmx5IGF0dHJpYnV0ZXMgY3VycmVudGx5LiIpOworICAgICAgICAgICAgaWYgKGF0dHJp
YnV0ZXMgJiBQcm9wZXJ0eUF0dHJpYnV0ZTo6QnVpbHRpbk9yRnVuY3Rpb25PckFjY2Vzc29yT3JM
YXp5UHJvcGVydHlPckNvbnN0YW50KQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICAgICAgaWYgKCEoYXR0cmlidXRlcyAmIFByb3BlcnR5QXR0cmlidXRlOjpDdXN0b21BY2Nl
c3NvcikpCisgICAgICAgICAgICAgICAgYXR0cmlidXRlcyB8PSBQcm9wZXJ0eUF0dHJpYnV0ZTo6
Q3VzdG9tVmFsdWU7CisgICAgICAgICAgICBjdXN0b21TZXR0ZXIgPSB2YWx1ZS0+cHJvcGVydHlQ
dXR0ZXIoKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorCisg
ICAgcmV0dXJuIGZhbHNlOworfQorCiBib29sIEpTT2JqZWN0OjpwdXRJbmxpbmVTbG93KEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFs
dWUgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKLSAgICBBU1NFUlQoIWlzVGhpc1Zh
bHVlQWx0ZXJlZChzbG90LCB0aGlzKSk7CisgICAgQVNTRVJUKCFwYXJzZUluZGV4KHByb3BlcnR5
TmFtZSkpOwogCiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAorICAgIGlmIChVTkxJS0VMWSghdm0uaXNT
YWZlVG9SZWN1cnNlU29mdCgpKSkgeworICAgICAgICB0aHJvd1N0YWNrT3ZlcmZsb3dFcnJvcihn
bG9iYWxPYmplY3QsIHNjb3BlKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAg
IC8vIFdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgd2UgZGVjaWRlIHRvIGNhY2hlIHRoaXMgcHJv
cGVydHkgYmVmb3JlIHdlIHBvdGVudGlhbGx5IGV4ZWN1dGUgYXJpYml0cmFyeSBKUy4KKyAgICBh
dXRvIGlzQ2FjaGVhYmxlID0gWyZdKCkgLT4gYm9vbCB7CisgICAgICAgIEpTT2JqZWN0KiByZWNl
aXZlciA9IHNsb3QudGhpc1ZhbHVlKCkuZ2V0T2JqZWN0KCk7CisgICAgICAgIHJldHVybiByZWNl
aXZlciAmJiAhcmVjZWl2ZXItPnN0cnVjdHVyZSh2bSktPmlzVW5jYWNoZWFibGVEaWN0aW9uYXJ5
KCk7CisgICAgfTsKKwogICAgIEpTT2JqZWN0KiBvYmogPSB0aGlzOwogICAgIGZvciAoOzspIHsK
LSAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBvYmotPnN0cnVjdHVyZSh2bSk7Ci0gICAg
ICAgIGlmIChVTkxJS0VMWShzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkuaGFzUHV0UHJvcGVydHlTZWN1
cml0eUNoZWNrKCkpKSB7Ci0gICAgICAgICAgICBvYmotPm1ldGhvZFRhYmxlKHZtKS0+ZG9QdXRQ
cm9wZXJ0eVNlY3VyaXR5Q2hlY2sob2JqLCBnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgc2xv
dCk7Ci0gICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBmYWxzZSk7Ci0gICAg
ICAgIH0KLSAgICAgICAgdW5zaWduZWQgYXR0cmlidXRlczsKLSAgICAgICAgUHJvcGVydHlPZmZz
ZXQgb2Zmc2V0ID0gc3RydWN0dXJlLT5nZXQodm0sIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcyk7
Ci0gICAgICAgIGlmIChpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpIHsKLSAgICAgICAgICAgIGlmIChh
dHRyaWJ1dGVzICYgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5KSB7Ci0gICAgICAgICAgICAg
ICAgQVNTRVJUKHRoaXMtPnByb3RvdHlwZUNoYWluTWF5SW50ZXJjZXB0U3RvcmVUbyh2bSwgcHJv
cGVydHlOYW1lKSB8fCBvYmogPT0gdGhpcyk7CisgICAgICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXMg
PSAwOworICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBpbnZhbGlkT2Zmc2V0OworICAg
ICAgICBQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYyBjdXN0b21TZXR0ZXIgPSBudWxscHRy
OworICAgICAgICBpZiAoZmluZFByb3BlcnR5Rm9yUHV0KHZtLCBvYmosIHByb3BlcnR5TmFtZSwg
YXR0cmlidXRlcywgb2Zmc2V0LCBjdXN0b21TZXR0ZXIpKSB7CisgICAgICAgICAgICBpZiAoYXR0
cmlidXRlcyAmIFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSkKICAgICAgICAgICAgICAgICBy
ZXR1cm4gdHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsIHNsb3QuaXNTdHJpY3RNb2RlKCks
IFJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9yKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgSlNWYWx1ZSBncyA9IG9iai0+Z2V0RGlyZWN0KG9mZnNldCk7Ci0gICAgICAgICAgICBpZiAo
Z3MuaXNHZXR0ZXJTZXR0ZXIoKSkgewotICAgICAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gbWFr
ZSBzdXJlIHRoYXQgd2UgZGVjaWRlIHRvIGNhY2hlIHRoaXMgcHJvcGVydHkgYmVmb3JlIHdlIHBv
dGVudGlhbGx5IGV4ZWN1dGUgYXJpYml0cmFyeSBKUy4KLSAgICAgICAgICAgICAgICBpZiAoIXRo
aXMtPnN0cnVjdHVyZSh2bSktPmlzVW5jYWNoZWFibGVEaWN0aW9uYXJ5KCkpCisgICAgICAgICAg
ICBpZiAoYXR0cmlidXRlcyAmIFByb3BlcnR5QXR0cmlidXRlOjpBY2Nlc3NvcikgeworICAgICAg
ICAgICAgICAgIEFTU0VSVChpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpOworICAgICAgICAgICAgICAg
IGlmIChpc0NhY2hlYWJsZSgpKQogICAgICAgICAgICAgICAgICAgICBzbG90LnNldENhY2hlYWJs
ZVNldHRlcihvYmosIG9mZnNldCk7Ci0KLSAgICAgICAgICAgICAgICBib29sIHJlc3VsdCA9IGNh
bGxTZXR0ZXIoZ2xvYmFsT2JqZWN0LCBzbG90LnRoaXNWYWx1ZSgpLCBncywgdmFsdWUsIHNsb3Qu
aXNTdHJpY3RNb2RlKCkgPyBFQ01BTW9kZTo6c3RyaWN0KCkgOiBFQ01BTW9kZTo6c2xvcHB5KCkp
OwotICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGZhbHNlKTsKLSAg
ICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgICAgIEpTVmFsdWUgZ3Mg
PSBvYmotPmdldERpcmVjdChvZmZzZXQpOworICAgICAgICAgICAgICAgIFJFTEVBU0VfQU5EX1JF
VFVSTihzY29wZSwgY2FsbFNldHRlcihnbG9iYWxPYmplY3QsIHNsb3QudGhpc1ZhbHVlKCksIGdz
LCB2YWx1ZSwgc2xvdC5pc1N0cmljdE1vZGUoKSkpOwogICAgICAgICAgICAgfQotICAgICAgICAg
ICAgaWYgKGdzLmlzQ3VzdG9tR2V0dGVyU2V0dGVyKCkpIHsKLSAgICAgICAgICAgICAgICBib29s
IGlzQWNjZXNzb3IgPSBhdHRyaWJ1dGVzICYgUHJvcGVydHlBdHRyaWJ1dGU6OkN1c3RvbUFjY2Vz
c29yOwotICAgICAgICAgICAgICAgIGF1dG8gc2V0dGVyID0ganNDYXN0PEN1c3RvbUdldHRlclNl
dHRlcio+KGdzLmFzQ2VsbCgpKS0+c2V0dGVyKCk7Ci0gICAgICAgICAgICAgICAgLy8gRklYTUU6
IFdlIHNob3VsZCBvbmx5IGJlIGNhY2hpbmcgdGhlc2UgaWYgd2UncmUgbm90IGFuIHVuY2FjaGVh
YmxlIGRpY3Rpb25hcnk6Ci0gICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTIxNTM0NwotCi0gICAgICAgICAgICAgICAgLy8gV2UgbmVlZCB0
byBtYWtlIHN1cmUgdGhhdCB3ZSBkZWNpZGUgdG8gY2FjaGUgdGhpcyBwcm9wZXJ0eSBiZWZvcmUg
d2UgcG90ZW50aWFsbHkgZXhlY3V0ZSBhcmliaXRyYXJ5IEpTLgotICAgICAgICAgICAgICAgIGlm
IChpc0FjY2Vzc29yKQotICAgICAgICAgICAgICAgICAgICBzbG90LnNldEN1c3RvbUFjY2Vzc29y
KG9iaiwgc2V0dGVyKTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAg
IHNsb3Quc2V0Q3VzdG9tVmFsdWUob2JqLCBzZXR0ZXIpOwotCi0gICAgICAgICAgICAgICAgYXV0
byByZXN1bHQgPSBjYWxsQ3VzdG9tU2V0dGVyKGdsb2JhbE9iamVjdCwgc2V0dGVyLCBpc0FjY2Vz
c29yLCBvYmosIHNsb3QudGhpc1ZhbHVlKCksIHZhbHVlKTsKKyAgICAgICAgICAgIGlmIChhdHRy
aWJ1dGVzICYgUHJvcGVydHlBdHRyaWJ1dGU6OkN1c3RvbUFjY2Vzc29yKSB7CisgICAgICAgICAg
ICAgICAgQVNTRVJUKGN1c3RvbVNldHRlcik7CisgICAgICAgICAgICAgICAgaWYgKGlzQ2FjaGVh
YmxlKCkpCisgICAgICAgICAgICAgICAgICAgIHNsb3Quc2V0Q3VzdG9tQWNjZXNzb3Iob2JqLCBj
dXN0b21TZXR0ZXIpOyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgY3VzdG9t
U2V0dGVyKGdsb2JhbE9iamVjdCwgSlNWYWx1ZTo6ZW5jb2RlKHNsb3QudGhpc1ZhbHVlKCkpLCBK
U1ZhbHVlOjplbmNvZGUodmFsdWUpKTsKICAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCBmYWxzZSk7Ci0gICAgICAgICAgICAgICAgaWYgKHJlc3VsdCAhPSBUcmlTdGF0
ZTo6SW5kZXRlcm1pbmF0ZSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCA9PSBU
cmlTdGF0ZTo6VHJ1ZTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVzICYgUHJvcGVydHlBdHRyaWJ1dGU6OkN1c3Rv
bVZhbHVlKSB7CisgICAgICAgICAgICAgICAgaWYgKGN1c3RvbVNldHRlcikgeworICAgICAgICAg
ICAgICAgICAgICBpZiAoaXNDYWNoZWFibGUoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNs
b3Quc2V0Q3VzdG9tVmFsdWUob2JqLCBjdXN0b21TZXR0ZXIpOworICAgICAgICAgICAgICAgICAg
ICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIGN1c3RvbVNldHRlcihnbG9iYWxPYmplY3QsIEpT
VmFsdWU6OmVuY29kZShvYmopLCBKU1ZhbHVlOjplbmNvZGUodmFsdWUpKSk7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChzbG90LnRoaXNWYWx1ZSgpID09IG9iaikgewor
ICAgICAgICAgICAgICAgICAgICBvYmotPnB1dERpcmVjdCh2bSwgcHJvcGVydHlOYW1lLCB2YWx1
ZSwgYXR0cmlidXRlcyAmIH5Qcm9wZXJ0eUF0dHJpYnV0ZTo6Q3VzdG9tVmFsdWUsIHNsb3QpOwor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBBU1NFUlQoIShhdHRyaWJ1dGVzICYgUHJvcGVydHlBdHRy
aWJ1dGU6OkFjY2Vzc29yKSk7Ci0KICAgICAgICAgICAgIC8vIElmIHRoZXJlJ3MgYW4gZXhpc3Rp
bmcgcHJvcGVydHkgb24gdGhlIGJhc2Ugb2JqZWN0LCBvciBvbiBvbmUgb2YgaXRzIAotICAgICAg
ICAgICAgLy8gcHJvdG90eXBlcywgd2Ugc2hvdWxkIHN0b3JlIHRoZSBwcm9wZXJ0eSBvbiB0aGUg
KmJhc2UqIG9iamVjdC4KKyAgICAgICAgICAgIC8vIHByb3RvdHlwZXMsIHdlIHNob3VsZCBzdG9y
ZSB0aGUgcHJvcGVydHkgb24gdGhlIHJlY2VpdmVyIG9iamVjdC4KICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9Ci0gICAgICAgIGlmICghb2JqLT5zdGF0aWNQcm9wZXJ0aWVzUmVpZmllZCh2
bSkpIHsKLSAgICAgICAgICAgIGlmIChvYmotPmNsYXNzSW5mbyh2bSktPmhhc1N0YXRpY1NldHRl
ck9yUmVhZG9ubHlQcm9wZXJ0aWVzKCkpIHsKLSAgICAgICAgICAgICAgICBpZiAoYXV0byBlbnRy
eSA9IG9iai0+ZmluZFByb3BlcnR5SGFzaEVudHJ5KHZtLCBwcm9wZXJ0eU5hbWUpKQotICAgICAg
ICAgICAgICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIHB1dEVudHJ5KGdsb2JhbE9i
amVjdCwgZW50cnktPnRhYmxlLT5jbGFzc0ZvclRoaXMsIGVudHJ5LT52YWx1ZSwgb2JqLCB0aGlz
LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LSAgICAgICAgaWYgKG9iai0+dHlwZSgpID09IFByb3h5T2JqZWN0VHlwZSkgewotICAgICAgICAg
ICAgYXV0byogcHJveHkgPSBqc0Nhc3Q8UHJveHlPYmplY3QqPihvYmopOwotICAgICAgICAgICAg
UkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBwcm94eS0+UHJveHlPYmplY3Q6OnB1dChwcm94eSwg
Z2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KSk7Ci0gICAgICAgIH0KKwog
ICAgICAgICBKU1ZhbHVlIHByb3RvdHlwZSA9IG9iai0+Z2V0UHJvdG90eXBlKHZtLCBnbG9iYWxP
YmplY3QpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBmYWxzZSk7CiAgICAg
ICAgIGlmIChwcm90b3R5cGUuaXNOdWxsKCkpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
b2JqID0gYXNPYmplY3QocHJvdG90eXBlKTsKKyAgICAgICAgaWYgKG9iai0+c3RydWN0dXJlKHZt
KS0+dHlwZUluZm8oKS5vdmVycmlkZXNQdXQoKSkKKyAgICAgICAgICAgIFJFTEVBU0VfQU5EX1JF
VFVSTihzY29wZSwgb2JqLT5tZXRob2RUYWJsZSh2bSktPnB1dChvYmosIGdsb2JhbE9iamVjdCwg
cHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCkpOwogICAgIH0KIAotICAgIGlmICghcHV0RGlyZWN0
SW50ZXJuYWw8UHV0TW9kZVB1dD4odm0sIHByb3BlcnR5TmFtZSwgdmFsdWUsIDAsIHNsb3QpKQot
ICAgICAgICByZXR1cm4gdHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsIHNsb3QuaXNTdHJp
Y3RNb2RlKCksIFJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9yKTsKLSAgICByZXR1cm4gdHJ1ZTsK
KyAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIHB1dElubGluZUZhc3RXaXRoUmVjZWl2ZXJD
aGVjayhnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpKTsKIH0KIAogYm9v
bCBKU09iamVjdDo6cHV0QnlJbmRleChKU0NlbGwqIGNlbGwsIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91
bGRUaHJvdykKQEAgLTM4NzMsMzAgKzM5MTUsNiBAQCBib29sIEpTT2JqZWN0OjphbnlPYmplY3RJ
bkNoYWluTWF5SW50ZXJjCiAgICAgfQogfQogCi1ib29sIEpTT2JqZWN0Ojpwcm90b3R5cGVDaGFp
bk1heUludGVyY2VwdFN0b3JlVG8oVk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQot
ewotICAgIGlmIChwYXJzZUluZGV4KHByb3BlcnR5TmFtZSkpCi0gICAgICAgIHJldHVybiBhbnlP
YmplY3RJbkNoYWluTWF5SW50ZXJjZXB0SW5kZXhlZEFjY2Vzc2VzKHZtKTsKLSAgICAKLSAgICBm
b3IgKEpTT2JqZWN0KiBjdXJyZW50ID0gdGhpczsgOykgewotICAgICAgICBKU1ZhbHVlIHByb3Rv
dHlwZSA9IGN1cnJlbnQtPmdldFByb3RvdHlwZURpcmVjdCh2bSk7Ci0gICAgICAgIGlmIChwcm90
b3R5cGUuaXNOdWxsKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIAotICAg
ICAgICBjdXJyZW50ID0gYXNPYmplY3QocHJvdG90eXBlKTsKLSAgICAgICAgCi0gICAgICAgIHVu
c2lnbmVkIGF0dHJpYnV0ZXM7Ci0gICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IGN1cnJl
bnQtPnN0cnVjdHVyZSh2bSktPmdldCh2bSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzKTsKLSAg
ICAgICAgaWYgKCFKU0M6OmlzVmFsaWRPZmZzZXQob2Zmc2V0KSkKLSAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICAKLSAgICAgICAgaWYgKGF0dHJpYnV0ZXMgJiAoUHJvcGVydHlBdHRyaWJ1
dGU6OlJlYWRPbmx5IHwgUHJvcGVydHlBdHRyaWJ1dGU6OkFjY2Vzc29yKSkKLSAgICAgICAgICAg
IHJldHVybiB0cnVlOwotICAgICAgICAKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLX0K
LQogYm9vbCBKU09iamVjdDo6bmVlZHNTbG93UHV0SW5kZXhpbmcoVk0mIHZtKSBjb25zdAogewog
ICAgIHJldHVybiBhbnlPYmplY3RJbkNoYWluTWF5SW50ZXJjZXB0SW5kZXhlZEFjY2Vzc2VzKHZt
KSB8fCBnbG9iYWxPYmplY3Qodm0pLT5pc0hhdmluZ0FCYWRUaW1lKCk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHJldmlzaW9uIDI3MTU4MCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAg
LTE3Myw3ICsxNzMsNiBAQCBwdWJsaWM6CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMg
Ym9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3Qq
LCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwogICAgIGJvb2wgZ2V0T3du
UHJvcGVydHlTbG90SW5saW5lKEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0
eVNsb3QmKTsKLSAgICBKU19FWFBPUlRfUFJJVkFURV9JRl9BU1NFUlRfRU5BQkxFRCBzdGF0aWMg
dm9pZCBkb1B1dFByb3BlcnR5U2VjdXJpdHlDaGVjayhKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0
KiwgUHJvcGVydHlOYW1lLCBQdXRQcm9wZXJ0eVNsb3QmKTsKIAogICAgIC8vIFRoZSBrZXkgZGlm
ZmVyZW5jZSBiZXR3ZWVuIHRoaXMgYW5kIGdldE93blByb3BlcnR5U2xvdCBpcyB0aGF0IGdldE93
blByb3BlcnR5U2xvdAogICAgIC8vIGN1cnJlbnRseSByZXR1cm5zIGluY29ycmVjdCByZXN1bHRz
IGZvciB0aGUgRE9NIHdpbmRvdyAod2l0aCBub24tb3duIHByb3BlcnRpZXMpCkBAIC0yMTgsMTIg
KzIxNywxMyBAQCBwdWJsaWM6CiAKICAgICBBTFdBWVNfSU5MSU5FIGJvb2wgcHV0QnlJbmRleElu
bGluZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCB1aW50NjRfdCBwcm9wZXJ0eU5hbWUs
IEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpCiAgICAgeworICAgICAgICBWTSYgdm0g
PSBnZXRWTShnbG9iYWxPYmplY3QpOwogICAgICAgICBpZiAoTElLRUxZKHByb3BlcnR5TmFtZSA8
PSBNQVhfQVJSQVlfSU5ERVgpKQogICAgICAgICAgICAgcmV0dXJuIHB1dEJ5SW5kZXhJbmxpbmUo
Z2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDx1aW50MzJfdD4ocHJvcGVydHlOYW1lKSwgdmFsdWUs
IHNob3VsZFRocm93KTsKIAogICAgICAgICBBU1NFUlQocHJvcGVydHlOYW1lIDw9IG1heFNhZmVJ
bnRlZ2VyKCkpOwogICAgICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdCh0aGlzLCBzaG91bGRUaHJv
dyk7Ci0gICAgICAgIHJldHVybiBwdXRJbmxpbmVGb3JKU09iamVjdCh0aGlzLCBnbG9iYWxPYmpl
Y3QsIElkZW50aWZpZXI6OmZyb20oZ2V0Vk0oZ2xvYmFsT2JqZWN0KSwgcHJvcGVydHlOYW1lKSwg
dmFsdWUsIHNsb3QpOworICAgICAgICByZXR1cm4gbWV0aG9kVGFibGUodm0pLT5wdXQodGhpcywg
Z2xvYmFsT2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tKHZtLCBwcm9wZXJ0eU5hbWUpLCB2YWx1ZSwg
c2xvdCk7CiAgICAgfQogICAgICAgICAKICAgICAvLyBUaGlzIGlzIHNpbWlsYXIgdG8gdGhlIHB1
dERpcmVjdCogbWV0aG9kczoKQEAgLTY0Miw2ICs2NDIsNyBAQCBwdWJsaWM6CiAgICAgLy8gIC0g
YXR0cmlidXRlcyB3aWxsIGJlIHJlc3BlY3RlZCAoYWZ0ZXIgdGhlIGNhbGwgdGhlIHByb3BlcnR5
IHdpbGwgZXhpc3Qgd2l0aCB0aGUgZ2l2ZW4gYXR0cmlidXRlcykKICAgICAvLyAgLSB0aGUgcHJv
cGVydHkgbmFtZSBpcyBhc3N1bWVkIHRvIG5vdCBiZSBhbiBpbmRleC4KICAgICBib29sIHB1dERp
cmVjdChWTSYsIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcyA9IDAp
OworICAgIGJvb2wgcHV0RGlyZWN0KFZNJiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCB1bnNpZ25l
ZCBhdHRyaWJ1dGVzLCBQdXRQcm9wZXJ0eVNsb3QmKTsKICAgICBib29sIHB1dERpcmVjdChWTSYs
IFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7CiAgICAgdm9pZCBwdXRE
aXJlY3RXaXRob3V0VHJhbnNpdGlvbihWTSYsIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgdW5zaWdu
ZWQgYXR0cmlidXRlcyA9IDApOwogICAgIGJvb2wgcHV0RGlyZWN0Tm9uSW5kZXhBY2Nlc3NvcihW
TSYsIFByb3BlcnR5TmFtZSwgR2V0dGVyU2V0dGVyKiwgdW5zaWduZWQgYXR0cmlidXRlcyk7CkBA
IC04MTUsNyArODE2LDYgQEAgcHVibGljOgogICAgIGJvb2wgaXNGcm96ZW4oVk0mIHZtKSB7IHJl
dHVybiBzdHJ1Y3R1cmUodm0pLT5pc0Zyb3plbih2bSk7IH0KIAogICAgIEpTX0VYUE9SVF9QUklW
QVRFIGJvb2wgYW55T2JqZWN0SW5DaGFpbk1heUludGVyY2VwdEluZGV4ZWRBY2Nlc3NlcyhWTSYp
IGNvbnN0OwotICAgIEpTX0VYUE9SVF9QUklWQVRFIGJvb2wgcHJvdG90eXBlQ2hhaW5NYXlJbnRl
cmNlcHRTdG9yZVRvKFZNJiwgUHJvcGVydHlOYW1lKTsKICAgICBib29sIG5lZWRzU2xvd1B1dElu
ZGV4aW5nKFZNJikgY29uc3Q7CiAKIHByaXZhdGU6CkBAIC05NTMsNiArOTUzLDkgQEAgcHVibGlj
OgogICAgIGJvb2wgY2FuUGVyZm9ybUZhc3RQdXRJbmxpbmUoVk0mLCBQcm9wZXJ0eU5hbWUpOwog
ICAgIGJvb2wgY2FuUGVyZm9ybUZhc3RQdXRJbmxpbmVFeGNsdWRpbmdQcm90byhWTSYpOwogCisg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBwdXRJbmxpbmVGYXN0V2l0aFJlY2VpdmVyQ2hlY2so
SlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYp
OworICAgIEpTX0VYUE9SVF9QUklWQVRFIE5FVkVSX0lOTElORSBib29sIHB1dElubGluZVNsb3co
SlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYp
OworCiAgICAgYm9vbCBtYXlCZVByb3RvdHlwZSgpIGNvbnN0OwogICAgIHZvaWQgZGlkQmVjb21l
UHJvdG90eXBlKCk7CiAKQEAgLTExMDcsOCArMTExMCw2IEBAIHByaXZhdGU6CiAgICAgdGVtcGxh
dGU8UHV0TW9kZT4KICAgICBib29sIHB1dERpcmVjdEludGVybmFsKFZNJiwgUHJvcGVydHlOYW1l
LCBKU1ZhbHVlLCB1bnNpZ25lZCBhdHRyLCBQdXRQcm9wZXJ0eVNsb3QmKTsKIAotICAgIEpTX0VY
UE9SVF9QUklWQVRFIE5FVkVSX0lOTElORSBib29sIHB1dElubGluZVNsb3coSlNHbG9iYWxPYmpl
Y3QqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOwotCiAgICAgYm9v
bCBnZXROb25JbmRleFByb3BlcnR5U2xvdChKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwg
UHJvcGVydHlTbG90Jik7CiAgICAgYm9vbCBnZXRPd25Ob25JbmRleFByb3BlcnR5U2xvdChWTSYs
IFN0cnVjdHVyZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CiAgICAgSlNfRVhQT1JU
X1BSSVZBVEUgdm9pZCBmaWxsR2V0dGVyUHJvcGVydHlTbG90KFZNJiwgUHJvcGVydHlTbG90Jiwg
SlNDZWxsKiwgdW5zaWduZWQsIFByb3BlcnR5T2Zmc2V0KTsKQEAgLTE0NDQsMTAgKzE0NDUsNiBA
QCBBTFdBWVNfSU5MSU5FIGJvb2wgSlNPYmplY3Q6OmdldE93blByb3BlCiB7CiAgICAgcmV0dXJu
IGdldE93blByb3BlcnR5U2xvdEltcGwob2JqZWN0LCBnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFt
ZSwgc2xvdCk7CiB9Ci0KLUFMV0FZU19JTkxJTkUgdm9pZCBKU09iamVjdDo6ZG9QdXRQcm9wZXJ0
eVNlY3VyaXR5Q2hlY2soSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwg
UHV0UHJvcGVydHlTbG90JikKLXsKLX0KICNlbmRpZgogCiAvLyBJdCBtYXkgc2VlbSBjcmF6eSB0
byBpbmxpbmUgYSBmdW5jdGlvbiB0aGlzIGxhcmdlIGJ1dCBpdCBtYWtlcyBhIGJpZyBkaWZmZXJl
bmNlCkBAIC0xNTMxLDYgKzE1MjgsMTMgQEAgaW5saW5lIGJvb2wgSlNPYmplY3Q6OnB1dERpcmVj
dChWTSYgdm0sIAogICAgIHJldHVybiBwdXREaXJlY3RJbnRlcm5hbDxQdXRNb2RlRGVmaW5lT3du
UHJvcGVydHk+KHZtLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBhdHRyaWJ1dGVzLCBzbG90KTsKIH0K
IAoraW5saW5lIGJvb2wgSlNPYmplY3Q6OnB1dERpcmVjdChWTSYgdm0sIFByb3BlcnR5TmFtZSBw
cm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMsIFB1dFByb3Bl
cnR5U2xvdCYgc2xvdCkKK3sKKyAgICBBU1NFUlQoIXZhbHVlLmlzR2V0dGVyU2V0dGVyKCkpOwor
ICAgIEFTU0VSVCghdmFsdWUuaXNDdXN0b21HZXR0ZXJTZXR0ZXIoKSk7CisgICAgcmV0dXJuIHB1
dERpcmVjdEludGVybmFsPFB1dE1vZGVEZWZpbmVPd25Qcm9wZXJ0eT4odm0sIHByb3BlcnR5TmFt
ZSwgdmFsdWUsIGF0dHJpYnV0ZXMsIHNsb3QpOworfQorCiBpbmxpbmUgYm9vbCBKU09iamVjdDo6
cHV0RGlyZWN0KFZNJiB2bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1
ZSwgUHV0UHJvcGVydHlTbG90JiBzbG90KQogewogICAgIEFTU0VSVCghdmFsdWUuaXNHZXR0ZXJT
ZXR0ZXIoKSk7CkBAIC0xNjE5LDYgKzE2MjMsNyBAQCBib29sIHZhbGlkYXRlQW5kQXBwbHlQcm9w
ZXJ0eURlc2NyaXB0b3IoCiAgICAgY29uc3QgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9y
LCBib29sIGlzQ3VycmVudERlZmluZWQsIGNvbnN0IFByb3BlcnR5RGVzY3JpcHRvciYgY3VycmVu
dCwgYm9vbCB0aHJvd0V4Y2VwdGlvbik7CiAKIEpTX0VYUE9SVF9QUklWQVRFIE5FVkVSX0lOTElO
RSBib29sIG9yZGluYXJ5U2V0U2xvdyhKU0dsb2JhbE9iamVjdCosIEpTT2JqZWN0KiwgUHJvcGVy
dHlOYW1lLCBKU1ZhbHVlLCBKU1ZhbHVlIHJlY2VpdmVyLCBib29sIHNob3VsZFRocm93KTsKK0pT
X0VYUE9SVF9QUklWQVRFIE5FVkVSX0lOTElORSBib29sIG9yZGluYXJ5U2V0U2xvd0RlZmluZVBy
b3BlcnR5T25SZWNlaXZlcihKU0dsb2JhbE9iamVjdCosIEpTT2JqZWN0KiByZWNlaXZlciwgUHJv
cGVydHlOYW1lLCBKU1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsKIAogLy8gSGVscGVyIGZvciBk
ZWZpbmluZyBuYXRpdmUgZnVuY3Rpb25zLCBpZiB5b3UncmUgbm90IHVzaW5nIGEgc3RhdGljIGhh
c2ggdGFibGUuCiAvLyBVc2UgdGhpcyBtYWNybyBmcm9tIHdpdGhpbiBmaW5pc2hDcmVhdGlvbigp
IG1ldGhvZHMgaW4gcHJvdG90eXBlcy4gVGhpcyBhc3N1bWVzCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU09iamVjdElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdElubGluZXMuaAkocmV2aXNpb24gMjcxNTgw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3RJbmxpbmVzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTg0LDcgKzg0LDcgQEAgQUxXQVlTX0lOTElORSBib29sIEpTT2JqZWN0
OjpjYW5QZXJmb3JtRgogICAgIEpTT2JqZWN0KiBvYmogPSB0aGlzOwogICAgIHdoaWxlICh0cnVl
KSB7CiAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gb2JqLT5zdHJ1Y3R1cmUodm0pOwot
ICAgICAgICBpZiAoc3RydWN0dXJlLT5oYXNSZWFkT25seU9yR2V0dGVyU2V0dGVyUHJvcGVydGll
c0V4Y2x1ZGluZ1Byb3RvKCkgfHwgc3RydWN0dXJlLT50eXBlSW5mbygpLm92ZXJyaWRlc0dldFBy
b3RvdHlwZSgpKQorICAgICAgICBpZiAoc3RydWN0dXJlLT5oYXNSZWFkT25seU9yR2V0dGVyU2V0
dGVyUHJvcGVydGllc0V4Y2x1ZGluZ1Byb3RvKCkgfHwgc3RydWN0dXJlLT50eXBlSW5mbygpLm92
ZXJyaWRlc1B1dCgpIHx8IHN0cnVjdHVyZS0+dHlwZUluZm8oKS5vdmVycmlkZXNHZXRQcm90b3R5
cGUoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICBwcm90b3R5cGUgPSBv
YmotPmdldFByb3RvdHlwZURpcmVjdCh2bSk7CkBAIC0yNDgsMzIgKzI0OCwzMyBAQCBBTFdBWVNf
SU5MSU5FIFByb3BlcnR5T2Zmc2V0IEpTT2JqZWN0OjpwCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0K
IAotLy8gRUNNQSA4LjYuMi4yCisvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9yZGlu
YXJ5c2V0CiBBTFdBWVNfSU5MSU5FIGJvb2wgSlNPYmplY3Q6OnB1dElubGluZUZvckpTT2JqZWN0
KEpTQ2VsbCogY2VsbCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1l
IHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBzbG90KQogewog
ICAgIFZNJiB2bSA9IGdldFZNKGdsb2JhbE9iamVjdCk7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgSlNPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8
SlNPYmplY3QqPihjZWxsKTsKICAgICBBU1NFUlQodmFsdWUpOwogICAgIEFTU0VSVCghSGVhcDo6
aGVhcCh2YWx1ZSkgfHwgSGVhcDo6aGVhcCh2YWx1ZSkgPT0gSGVhcDo6aGVhcCh0aGlzT2JqZWN0
KSk7CiAKLSAgICBpZiAoVU5MSUtFTFkoaXNUaGlzVmFsdWVBbHRlcmVkKHNsb3QsIHRoaXNPYmpl
Y3QpKSkKLSAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBvcmRpbmFyeVNldFNsb3co
Z2xvYmFsT2JqZWN0LCB0aGlzT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90LnRoaXNW
YWx1ZSgpLCBzbG90LmlzU3RyaWN0TW9kZSgpKSk7Ci0KICAgICAvLyBUcnkgaW5kZXhlZCBwdXQg
Zmlyc3QuIFRoaXMgaXMgcmVxdWlyZWQgZm9yIGNvcnJlY3RuZXNzLCBzaW5jZSBsb2FkcyBvbiBw
cm9wZXJ0eSBuYW1lcyB0aGF0IGFwcGVhciBsaWtlCiAgICAgLy8gdmFsaWQgaW5kaWNlcyB3aWxs
IG5ldmVyIGxvb2sgaW4gdGhlIG5hbWVkIHByb3BlcnR5IHN0b3JhZ2UuCi0gICAgaWYgKE9wdGlv
bmFsPHVpbnQzMl90PiBpbmRleCA9IHBhcnNlSW5kZXgocHJvcGVydHlOYW1lKSkKLSAgICAgICAg
UkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBwdXRCeUluZGV4KHRoaXNPYmplY3QsIGdsb2JhbE9i
amVjdCwgaW5kZXgudmFsdWUoKSwgdmFsdWUsIHNsb3QuaXNTdHJpY3RNb2RlKCkpKTsKKyAgICBp
ZiAoT3B0aW9uYWw8dWludDMyX3Q+IGluZGV4ID0gcGFyc2VJbmRleChwcm9wZXJ0eU5hbWUpKSB7
CisgICAgICAgIGlmIChVTkxJS0VMWShpc1RoaXNWYWx1ZUFsdGVyZWQoc2xvdCwgdGhpc09iamVj
dCkpKQorICAgICAgICAgICAgcmV0dXJuIG9yZGluYXJ5U2V0U2xvdyhnbG9iYWxPYmplY3QsIHRo
aXNPYmplY3QsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QudGhpc1ZhbHVlKCksIHNsb3QuaXNT
dHJpY3RNb2RlKCkpOworICAgICAgICByZXR1cm4gcHV0QnlJbmRleCh0aGlzT2JqZWN0LCBnbG9i
YWxPYmplY3QsIGluZGV4LnZhbHVlKCksIHZhbHVlLCBzbG90LmlzU3RyaWN0TW9kZSgpKTsKKyAg
ICB9CiAKLSAgICBpZiAodGhpc09iamVjdC0+Y2FuUGVyZm9ybUZhc3RQdXRJbmxpbmUodm0sIHBy
b3BlcnR5TmFtZSkpIHsKLSAgICAgICAgQVNTRVJUKCF0aGlzT2JqZWN0LT5wcm90b3R5cGVDaGFp
bk1heUludGVyY2VwdFN0b3JlVG8odm0sIHByb3BlcnR5TmFtZSkpOwotICAgICAgICBpZiAoIXRo
aXNPYmplY3QtPnB1dERpcmVjdEludGVybmFsPFB1dE1vZGVQdXQ+KHZtLCBwcm9wZXJ0eU5hbWUs
IHZhbHVlLCAwLCBzbG90KSkKLSAgICAgICAgICAgIHJldHVybiB0eXBlRXJyb3IoZ2xvYmFsT2Jq
ZWN0LCBzY29wZSwgc2xvdC5pc1N0cmljdE1vZGUoKSwgUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJy
b3IpOworICAgIGlmICghdGhpc09iamVjdC0+Y2FuUGVyZm9ybUZhc3RQdXRJbmxpbmUodm0sIHBy
b3BlcnR5TmFtZSkpCisgICAgICAgIHJldHVybiB0aGlzT2JqZWN0LT5wdXRJbmxpbmVTbG93KGds
b2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCk7CisgICAgaWYgKFVOTElLRUxZ
KHNsb3QudGhpc1ZhbHVlKCkgIT0gdGhpc09iamVjdCkpCisgICAgICAgIHJldHVybiB0aGlzT2Jq
ZWN0LT5wdXRJbmxpbmVGYXN0V2l0aFJlY2VpdmVyQ2hlY2soZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0
eU5hbWUsIHZhbHVlLCBzbG90KTsKKyAgICBpZiAodGhpc09iamVjdC0+cHV0RGlyZWN0SW50ZXJu
YWw8UHV0TW9kZVB1dD4odm0sIHByb3BlcnR5TmFtZSwgdmFsdWUsIDAsIHNsb3QpKQogICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICB9CiAKLSAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIHRo
aXNPYmplY3QtPnB1dElubGluZVNsb3coZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHZhbHVl
LCBzbG90KSk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAg
IC8vIEZJWE1FOiBGb3IgZmFpbHVyZXMgZHVlIHRvIG5vbi1leHRlbnNpYmxlIHN0cnVjdHVyZSBv
ciBwcmltaXRpdmUgcmVjZWl2ZXIsIHRoZSBlcnJvciBtZXNzYWdlIGlzIG1pc2xlYWRpbmcuCisg
ICAgcmV0dXJuIHR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCBzbG90LmlzU3RyaWN0TW9k
ZSgpLCBSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcik7CiB9CiAKIC8vIEhhc093blByb3BlcnR5
KE8sIFApIGZyb20gc2VjdGlvbiA3LjMuMTEgaW4gdGhlIHNwZWMuCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3h5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNQcm94eS5oCShyZXZpc2lvbiAyNzE1ODApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3h5LmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcg
KzMyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiBjbGFzcyBKU1Byb3h5IDogcHVibGljIEpTTm9uRmlu
YWxPYmplY3QgewogcHVibGljOgogICAgIHVzaW5nIEJhc2UgPSBKU05vbkZpbmFsT2JqZWN0Owot
ICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1
Y3R1cmVGbGFncyB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRlc0dldE93
blByb3BlcnR5TmFtZXMgfCBPdmVycmlkZXNHZXRQcm90b3R5cGUgfCBJbnRlcmNlcHRzR2V0T3du
UHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvOworICAgIHN0YXRpYyBj
b25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8
IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5TmFt
ZXMgfCBPdmVycmlkZXNHZXRQcm90b3R5cGUgfCBPdmVycmlkZXNQdXQgfCBJbnRlcmNlcHRzR2V0
T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvOwogCiAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzPgogICAgIHN0YXRpYyBJc29T
dWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNUeXBlSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTVHlwZUluZm8uaAkocmV2aXNpb24gMjcxNTgwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw4ICs1
Nyw4IEBAIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgSXNJbW11dGFibGVQcm8KIHN0YXRpYyBj
b25zdGV4cHIgdW5zaWduZWQgR2V0T3duUHJvcGVydHlTbG90SXNJbXB1cmVGb3JQcm9wZXJ0eUFi
c2VuY2UgPSAxIDw8IDE1Owogc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBJbnRlcmNlcHRzR2V0
T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvID0gMSA8PCAxNjsK
IHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlSXNJbW1vcnRhbCA9IDEgPDwgMTc7
Ci1zdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIEhhc1B1dFByb3BlcnR5U2VjdXJpdHlDaGVjayA9
IDEgPDwgMTg7Ci1zdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIE92ZXJyaWRlc0dldFByb3RvdHlw
ZSA9IDEgPDwgMTk7CitzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIE92ZXJyaWRlc0dldFByb3Rv
dHlwZSA9IDEgPDwgMTg7CitzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIE92ZXJyaWRlc1B1dCA9
IDEgPDwgMTk7CiAKIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbnVtYmVyT2ZJbmxpbmVCaXRz
ID0gODsKIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgT3ZlcnJpZGVzR2V0UHJvdG90eXBlT3V0
T2ZMaW5lID0gT3ZlcnJpZGVzR2V0UHJvdG90eXBlID4+IG51bWJlck9mSW5saW5lQml0czsKQEAg
LTEwMSwxMSArMTAxLDExIEBAIHB1YmxpYzoKICAgICBib29sIG92ZXJyaWRlc0dldE93blByb3Bl
cnR5TmFtZXMoKSBjb25zdCB7IHJldHVybiBpc1NldE9uRmxhZ3MyPE92ZXJyaWRlc0dldE93blBy
b3BlcnR5TmFtZXM+KCk7IH0KICAgICBib29sIG92ZXJyaWRlc0dldE93blNwZWNpYWxQcm9wZXJ0
eU5hbWVzKCkgY29uc3QgeyByZXR1cm4gaXNTZXRPbkZsYWdzMjxPdmVycmlkZXNHZXRPd25TcGVj
aWFsUHJvcGVydHlOYW1lcz4oKTsgfQogICAgIGJvb2wgb3ZlcnJpZGVzQW55Rm9ybU9mR2V0T3du
UHJvcGVydHlOYW1lcygpIGNvbnN0IHsgcmV0dXJuIG92ZXJyaWRlc0dldE93blByb3BlcnR5TmFt
ZXMoKSB8fCBvdmVycmlkZXNHZXRPd25TcGVjaWFsUHJvcGVydHlOYW1lcygpOyB9CisgICAgYm9v
bCBvdmVycmlkZXNQdXQoKSBjb25zdCB7IHJldHVybiBpc1NldE9uRmxhZ3MyPE92ZXJyaWRlc1B1
dD4oKTsgfQogICAgIGJvb2wgb3ZlcnJpZGVzR2V0UHJvdG90eXBlKCkgY29uc3QgeyByZXR1cm4g
aXNTZXRPbkZsYWdzMjxPdmVycmlkZXNHZXRQcm90b3R5cGU+KCk7IH0KICAgICBib29sIHByb2hp
Yml0c1Byb3BlcnR5Q2FjaGluZygpIGNvbnN0IHsgcmV0dXJuIGlzU2V0T25GbGFnczI8UHJvaGli
aXRzUHJvcGVydHlDYWNoaW5nPigpOyB9CiAgICAgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RJc0lt
cHVyZSgpIGNvbnN0IHsgcmV0dXJuIGlzU2V0T25GbGFnczI8R2V0T3duUHJvcGVydHlTbG90SXNJ
bXB1cmU+KCk7IH0KICAgICBib29sIGdldE93blByb3BlcnR5U2xvdElzSW1wdXJlRm9yUHJvcGVy
dHlBYnNlbmNlKCkgY29uc3QgeyByZXR1cm4gaXNTZXRPbkZsYWdzMjxHZXRPd25Qcm9wZXJ0eVNs
b3RJc0ltcHVyZUZvclByb3BlcnR5QWJzZW5jZT4oKTsgfQotICAgIGJvb2wgaGFzUHV0UHJvcGVy
dHlTZWN1cml0eUNoZWNrKCkgY29uc3QgeyByZXR1cm4gaXNTZXRPbkZsYWdzMjxIYXNQdXRQcm9w
ZXJ0eVNlY3VyaXR5Q2hlY2s+KCk7IH0KICAgICBib29sIG5ld0ltcHVyZVByb3BlcnR5RmlyZXNX
YXRjaHBvaW50cygpIGNvbnN0IHsgcmV0dXJuIGlzU2V0T25GbGFnczI8TmV3SW1wdXJlUHJvcGVy
dHlGaXJlc1dhdGNocG9pbnRzPigpOyB9CiAgICAgYm9vbCBpc0ltbXV0YWJsZVByb3RvdHlwZUV4
b3RpY09iamVjdCgpIGNvbnN0IHsgcmV0dXJuIGlzU2V0T25GbGFnczI8SXNJbW11dGFibGVQcm90
b3R5cGVFeG90aWNPYmplY3Q+KCk7IH0KICAgICBib29sIGludGVyY2VwdHNHZXRPd25Qcm9wZXJ0
eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8oKSBjb25zdCB7IHJldHVybiBpc1Nl
dE9uRmxhZ3MyPEludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5n
dGhJc05vdFplcm8+KCk7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xv
b2t1cC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xvb2t1
cC5oCShyZXZpc2lvbiAyNzE1ODApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9M
b29rdXAuaAkod29ya2luZyBjb3B5KQpAQCAtMjYzLDcwICsyNjMsNiBAQCBpbmxpbmUgYm9vbCBy
ZXBsYWNlU3RhdGljUHJvcGVydHlTbG90KFZNCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLS8vICdi
YXNlJyBtZWFucyB0aGUgb2JqZWN0IGhvbGRpbmcgdGhlIHByb3BlcnR5IChwb3NzaWJseSBpbiB0
aGUgcHJvdG90eXBlIGNoYWluIG9mIHRoZSBvYmplY3QgcHV0IHdhcyBjYWxsZWQgb24pLgotLy8g
J3RoaXNWYWx1ZScgaXMgdGhlIG9iamVjdCB0aGF0IHB1dCBpcyBiZWluZyBhcHBsaWVkIHRvIChp
biB0aGUgY2FzZSBvZiBhIHByb3h5LCB0aGUgcHJveHkgdGFyZ2V0KS4KLS8vICdzbG90LnRoaXNW
YWx1ZSgpJyBpcyB0aGUgb2JqZWN0IHRoZSBwdXQgd2FzIG9yaWdpbmFsbHkgcGVyZm9ybWVkIG9u
IChpbiB0aGUgY2FzZSBvZiBhIHByb3h5LCB0aGUgcHJveHkgaXRzZWxmKS4KLWlubGluZSBib29s
IHB1dEVudHJ5KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IENsYXNzSW5mbyos
IGNvbnN0IEhhc2hUYWJsZVZhbHVlKiBlbnRyeSwgSlNPYmplY3QqIGJhc2UsIEpTT2JqZWN0KiB0
aGlzVmFsdWUsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFB1dFBy
b3BlcnR5U2xvdCYgc2xvdCkKLXsKLSAgICBWTSYgdm0gPSBnZXRWTShnbG9iYWxPYmplY3QpOwot
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAgIGlmIChlbnRy
eS0+YXR0cmlidXRlcygpICYgUHJvcGVydHlBdHRyaWJ1dGU6OkJ1aWx0aW5PckZ1bmN0aW9uT3JM
YXp5UHJvcGVydHkpIHsKLSAgICAgICAgaWYgKCEoZW50cnktPmF0dHJpYnV0ZXMoKSAmIFByb3Bl
cnR5QXR0cmlidXRlOjpSZWFkT25seSkpIHsKLSAgICAgICAgICAgIC8vIElmIHRoaXMgaXMgYSBm
dW5jdGlvbiBvciBsYXp5IHByb3BlcnR5IHB1dCB0aGVuIHdlIGp1c3QgZG8gdGhlIHB1dCBiZWNh
dXNlCi0gICAgICAgICAgICAvLyBsb2dpY2FsbHkgdGhlIG9iamVjdCBhbHJlYWR5IGhhZCB0aGUg
cHJvcGVydHksIHNvIHRoaXMgaXMganVzdCBhIHJlcGxhY2UuCi0gICAgICAgICAgICAvLyBGSVhN
RTogdGhpc1ZhbHVlIG1heSBiZSBhbiBvYmplY3Qgd2l0aCBub24tZXh0ZW5zaWJsZSBzdHJ1Y3R1
cmUgd2UgbXVzdCB0aHJvdyBmb3IuCi0gICAgICAgICAgICBpZiAoSlNPYmplY3QqIHRoaXNPYmpl
Y3QgPSBqc0R5bmFtaWNDYXN0PEpTT2JqZWN0Kj4odm0sIHRoaXNWYWx1ZSkpCi0gICAgICAgICAg
ICAgICAgdGhpc09iamVjdC0+cHV0RGlyZWN0KHZtLCBwcm9wZXJ0eU5hbWUsIHZhbHVlKTsKLSAg
ICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0eXBlRXJy
b3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgc2xvdC5pc1N0cmljdE1vZGUoKSwgUmVhZG9ubHlQcm9w
ZXJ0eVdyaXRlRXJyb3IpOwotICAgIH0KLQotICAgIGlmIChlbnRyeS0+YXR0cmlidXRlcygpICYg
UHJvcGVydHlBdHRyaWJ1dGU6OkFjY2Vzc29yKQotICAgICAgICByZXR1cm4gdHlwZUVycm9yKGds
b2JhbE9iamVjdCwgc2NvcGUsIHNsb3QuaXNTdHJpY3RNb2RlKCksIFJlYWRvbmx5UHJvcGVydHlX
cml0ZUVycm9yKTsKLQotICAgIGlmICghKGVudHJ5LT5hdHRyaWJ1dGVzKCkgJiBQcm9wZXJ0eUF0
dHJpYnV0ZTo6UmVhZE9ubHkpKSB7Ci0gICAgICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoIShlbnRy
eS0+YXR0cmlidXRlcygpICYgUHJvcGVydHlBdHRyaWJ1dGU6OkRPTUpJVEF0dHJpYnV0ZSksICJE
T01KSVRBdHRyaWJ1dGUgc3VwcG9ydHMgcmVhZG9ubHkgYXR0cmlidXRlcyBjdXJyZW50bHkuIik7
Ci0gICAgICAgIGJvb2wgaXNBY2Nlc3NvciA9IGVudHJ5LT5hdHRyaWJ1dGVzKCkgJiBQcm9wZXJ0
eUF0dHJpYnV0ZTo6Q3VzdG9tQWNjZXNzb3I7Ci0gICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQg
b25seSBiZSBjYWNoaW5nIHRoZXNlIGlmIHdlJ3JlIG5vdCBhbiB1bmNhY2hlYWJsZSBkaWN0aW9u
YXJ5OgotICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjE1MzQ3Ci0gICAgICAgIC8vIFdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgd2UgZGVjaWRlIHRv
IGNhY2hlIHRoaXMgcHJvcGVydHkgYmVmb3JlIHdlIHBvdGVudGlhbGx5IGV4ZWN1dGUgYXJpYml0
cmFyeSBKUy4KLSAgICAgICAgaWYgKGlzQWNjZXNzb3IpCi0gICAgICAgICAgICBzbG90LnNldEN1
c3RvbUFjY2Vzc29yKGJhc2UsIGVudHJ5LT5wcm9wZXJ0eVB1dHRlcigpKTsKLSAgICAgICAgZWxz
ZQotICAgICAgICAgICAgc2xvdC5zZXRDdXN0b21WYWx1ZShiYXNlLCBlbnRyeS0+cHJvcGVydHlQ
dXR0ZXIoKSk7Ci0KLSAgICAgICAgYXV0byByZXN1bHQgPSBjYWxsQ3VzdG9tU2V0dGVyKGdsb2Jh
bE9iamVjdCwgZW50cnktPnByb3BlcnR5UHV0dGVyKCksIGlzQWNjZXNzb3IsIGJhc2UsIHNsb3Qu
dGhpc1ZhbHVlKCksIHZhbHVlKTsKLSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
ZmFsc2UpOwotICAgICAgICBpZiAocmVzdWx0ICE9IFRyaVN0YXRlOjpJbmRldGVybWluYXRlKQot
ICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCA9PSBUcmlTdGF0ZTo6VHJ1ZTsKLQotICAgICAgICAv
LyBGSVhNRTogdGhpc1ZhbHVlIG1heSBiZSBhbiBvYmplY3Qgd2l0aCBub24tZXh0ZW5zaWJsZSBz
dHJ1Y3R1cmUgd2UgbXVzdCB0aHJvdyBmb3IuCi0gICAgICAgIGlmIChKU09iamVjdCogdGhpc09i
amVjdCA9IGpzRHluYW1pY0Nhc3Q8SlNPYmplY3QqPih2bSwgdGhpc1ZhbHVlKSkKLSAgICAgICAg
ICAgIHRoaXNPYmplY3QtPnB1dERpcmVjdCh2bSwgcHJvcGVydHlOYW1lLCB2YWx1ZSk7Ci0gICAg
ICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHJldHVybiB0eXBlRXJyb3IoZ2xvYmFsT2Jq
ZWN0LCBzY29wZSwgc2xvdC5pc1N0cmljdE1vZGUoKSwgUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJy
b3IpOwotfQotCi0vKioKLSAqIFRoaXMgb25lIGlzIGZvciAicHV0Ii4KLSAqIEl0IGxvb2tzIHVw
IGEgaGFzaCBlbnRyeSBmb3IgdGhlIHByb3BlcnR5IHRvIGJlIHNldC4gIElmIGFuIGVudHJ5Ci0g
KiBpcyBmb3VuZCBpdCBzZXRzIHRoZSB2YWx1ZSBhbmQgcmV0dXJucyB0cnVlLCBlbHNlIGl0IHJl
dHVybnMgZmFsc2UuCi0gKi8KLWlubGluZSBib29sIGxvb2t1cFB1dChKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU09iamVjdCogYmFzZSwg
SlNWYWx1ZSB2YWx1ZSwgY29uc3QgSGFzaFRhYmxlJiB0YWJsZSwgUHV0UHJvcGVydHlTbG90JiBz
bG90LCBib29sJiBwdXRSZXN1bHQpCi17Ci0gICAgY29uc3QgSGFzaFRhYmxlVmFsdWUqIGVudHJ5
ID0gdGFibGUuZW50cnkocHJvcGVydHlOYW1lKTsKLQotICAgIGlmICghZW50cnkpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIHB1dFJlc3VsdCA9IHB1dEVudHJ5KGdsb2JhbE9iamVjdCwg
dGFibGUuY2xhc3NGb3JUaGlzLCBlbnRyeSwgYmFzZSwgYmFzZSwgcHJvcGVydHlOYW1lLCB2YWx1
ZSwgc2xvdCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KIGlubGluZSB2b2lkIHJlaWZ5U3RhdGlj
UHJvcGVydHkoVk0mIHZtLCBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbywgY29uc3QgUHJvcGVy
dHlOYW1lJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IEhhc2hUYWJsZVZhbHVlJiB2YWx1ZSwgSlNPYmpl
Y3QmIHRoaXNPYmopCiB7CiAgICAgaWYgKHZhbHVlLmF0dHJpYnV0ZXMoKSAmIFByb3BlcnR5QXR0
cmlidXRlOjpCdWlsdGluKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Q
cm9wZXJ0eVNsb3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9Qcm9wZXJ0eVNsb3QuaAkocmV2aXNpb24gMjcxNTgwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvUHJvcGVydHlTbG90LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDYgKzQ2LDcg
QEAgZW51bSBjbGFzcyBQcm9wZXJ0eUF0dHJpYnV0ZSA6IHVuc2lnbmVkIAogICAgIEN1c3RvbUFj
Y2Vzc29yICAgID0gMSA8PCA1LAogICAgIEN1c3RvbVZhbHVlICAgICAgID0gMSA8PCA2LAogICAg
IEN1c3RvbUFjY2Vzc29yT3JWYWx1ZSA9IEN1c3RvbUFjY2Vzc29yIHwgQ3VzdG9tVmFsdWUsCisg
ICAgQWNjZXNzb3JPckN1c3RvbUFjY2Vzc29yID0gQWNjZXNzb3IgfCBDdXN0b21BY2Nlc3NvciwK
ICAgICBBY2Nlc3Nvck9yQ3VzdG9tQWNjZXNzb3JPclZhbHVlID0gQWNjZXNzb3IgfCBDdXN0b21B
Y2Nlc3NvciB8IEN1c3RvbVZhbHVlLAogCiAgICAgLy8gVGhpbmdzIHRoYXQgYXJlIHVzZWQgYnkg
c3RhdGljIGhhc2h0YWJsZXMgYXJlIG5vdCBpbiB0aGUgYXR0cmlidXRlcyBieXRlIGluIFByb3Bl
cnR5TWFwRW50cnkuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm94eU9i
amVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3h5
T2JqZWN0LmgJKHJldmlzaW9uIDI3MTU4MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1Byb3h5T2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAgY2xhc3Mg
UHJveHlPYmplY3QgZmluYWwgOiBwdWJsaWMgSlNOb25GaQogcHVibGljOgogICAgIHR5cGVkZWYg
SlNOb25GaW5hbE9iamVjdCBCYXNlOwogCi0gICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBT
dHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJv
cGVydHlTbG90IHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlOYW1lcyB8IE92ZXJyaWRlc0dldFBy
b3RvdHlwZSB8IE92ZXJyaWRlc0dldENhbGxEYXRhIHwgSW50ZXJjZXB0c0dldE93blByb3BlcnR5
U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8IFByb2hpYml0c1Byb3BlcnR5Q2Fj
aGluZzsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFz
ZTo6U3RydWN0dXJlRmxhZ3MgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlk
ZXNHZXRPd25Qcm9wZXJ0eU5hbWVzIHwgT3ZlcnJpZGVzR2V0UHJvdG90eXBlIHwgT3ZlcnJpZGVz
UHV0IHwgT3ZlcnJpZGVzR2V0Q2FsbERhdGEgfCBJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90
QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgUHJvaGliaXRzUHJvcGVydHlDYWNoaW5n
OwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+
CiAgICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9QdXRQcm9wZXJ0eVNsb3QuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9QdXRQcm9wZXJ0eVNsb3QuaAkocmV2aXNp
b24gMjcxNTgwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHV0UHJvcGVydHlT
bG90LmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDcgKzM3LDcgQEAgY2xhc3MgSlNGdW5jdGlvbjsK
IGNsYXNzIFB1dFByb3BlcnR5U2xvdCB7CiBwdWJsaWM6CiAgICAgZW51bSBUeXBlIDogdWludDhf
dCB7IFVuY2FjaGFibGUsIEV4aXN0aW5nUHJvcGVydHksIE5ld1Byb3BlcnR5LCBTZXR0ZXJQcm9w
ZXJ0eSwgQ3VzdG9tVmFsdWUsIEN1c3RvbUFjY2Vzc29yIH07Ci0gICAgZW51bSBDb250ZXh0IHsg
VW5rbm93bkNvbnRleHQsIFB1dEJ5SWQsIFB1dEJ5SWRFdmFsIH07CisgICAgZW51bSBDb250ZXh0
IDogdWludDhfdCB7IFVua25vd25Db250ZXh0LCBQdXRCeUlkLCBQdXRCeUlkRXZhbCwgUmVmbGVj
dFNldCB9OwogICAgIHVzaW5nIFB1dFZhbHVlRnVuYyA9IGJvb2wgKCopKEpTR2xvYmFsT2JqZWN0
KiwgRW5jb2RlZEpTVmFsdWUgdGhpc09iamVjdCwgRW5jb2RlZEpTVmFsdWUgdmFsdWUpOwogICAg
IHVzaW5nIFB1dFZhbHVlRnVuY1dpdGhQdHIgPSBib29sICgqKShKU0dsb2JhbE9iamVjdCosIEVu
Y29kZWRKU1ZhbHVlIHRoaXNPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHZhbHVlLCB2b2lkKik7CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZmxlY3RPYmplY3QuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZmxlY3RPYmplY3Qu
Y3BwCShyZXZpc2lvbiAyNzE1ODApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9S
ZWZsZWN0T2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYwLDcgKzI2MCw3IEBAIEpTQ19E
RUZJTkVfSE9TVF9GVU5DVElPTihyZWZsZWN0T2JqZWN0U2UKIAogICAgIC8vIERvIG5vdCByYWlz
ZSBhbnkgcmVhZG9ubHkgZXJyb3JzIHRoYXQgaGFwcGVuIGluIHN0cmljdCBtb2RlLgogICAgIGJv
b2wgc2hvdWxkVGhyb3dJZkNhbnRTZXQgPSBmYWxzZTsKLSAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xv
dChyZWNlaXZlciwgc2hvdWxkVGhyb3dJZkNhbnRTZXQpOworICAgIFB1dFByb3BlcnR5U2xvdCBz
bG90KHJlY2VpdmVyLCBzaG91bGRUaHJvd0lmQ2FudFNldCwgUHV0UHJvcGVydHlTbG90OjpSZWZs
ZWN0U2V0KTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTVmFsdWU6OmVuY29kZShq
c0Jvb2xlYW4odGFyZ2V0T2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPnB1dCh0YXJnZXRPYmplY3Qs
IGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCBjYWxsRnJhbWUtPmFyZ3VtZW50KDIpLCBzbG90
KSkpKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2Jq
ZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdF
eHBPYmplY3QuY3BwCShyZXZpc2lvbiAyNzE1ODApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9SZWdFeHBPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzEsMTkgKzEzMSwy
NCBAQCBKU0NfREVGSU5FX0NVU1RPTV9TRVRURVIocmVnRXhwT2JqZWN0U2V0CiBib29sIFJlZ0V4
cE9iamVjdDo6cHV0KEpTQ2VsbCogY2VsbCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
UHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgUHV0UHJvcGVydHlTbG90
JiBzbG90KQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgUmVnRXhwT2JqZWN0KiB0aGlzT2Jq
ZWN0ID0ganNDYXN0PFJlZ0V4cE9iamVjdCo+KGNlbGwpOwogCi0gICAgaWYgKFVOTElLRUxZKGlz
VGhpc1ZhbHVlQWx0ZXJlZChzbG90LCB0aGlzT2JqZWN0KSkpCi0gICAgICAgIHJldHVybiBvcmRp
bmFyeVNldFNsb3coZ2xvYmFsT2JqZWN0LCB0aGlzT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHZhbHVl
LCBzbG90LnRoaXNWYWx1ZSgpLCBzbG90LmlzU3RyaWN0TW9kZSgpKTsKLQogICAgIGlmIChwcm9w
ZXJ0eU5hbWUgPT0gdm0ucHJvcGVydHlOYW1lcy0+bGFzdEluZGV4KSB7CisgICAgICAgIGlmICgh
dGhpc09iamVjdC0+bGFzdEluZGV4SXNXcml0YWJsZSgpKQorICAgICAgICAgICAgcmV0dXJuIHR5
cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCBzbG90LmlzU3RyaWN0TW9kZSgpLCBSZWFkb25s
eVByb3BlcnR5V3JpdGVFcnJvcik7CisKKyAgICAgICAgaWYgKFVOTElLRUxZKHNsb3QudGhpc1Zh
bHVlKCkgIT0gdGhpc09iamVjdCkpCisgICAgICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2Nv
cGUsIHRoaXNPYmplY3QtPnB1dElubGluZUZhc3RXaXRoUmVjZWl2ZXJDaGVjayhnbG9iYWxPYmpl
Y3QsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpKTsKKwogICAgICAgICBib29sIHJlc3VsdCA9
IHRoaXNPYmplY3QtPnNldExhc3RJbmRleChnbG9iYWxPYmplY3QsIHZhbHVlLCBzbG90LmlzU3Ry
aWN0TW9kZSgpKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZmFsc2UpOwog
ICAgICAgICBzbG90LnNldEN1c3RvbVZhbHVlKHRoaXNPYmplY3QsIHNsb3QuaXNTdHJpY3RNb2Rl
KCkKICAgICAgICAgICAgID8gcmVnRXhwT2JqZWN0U2V0TGFzdEluZGV4U3RyaWN0CiAgICAgICAg
ICAgICA6IHJlZ0V4cE9iamVjdFNldExhc3RJbmRleE5vblN0cmljdCk7CiAgICAgICAgIHJldHVy
biByZXN1bHQ7CiAgICAgfQotICAgIHJldHVybiBCYXNlOjpwdXQoY2VsbCwgZ2xvYmFsT2JqZWN0
LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KTsKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2Nv
cGUsIEJhc2U6OnB1dChjZWxsLCBnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNs
b3QpKTsKIH0KIAogU3RyaW5nIFJlZ0V4cE9iamVjdDo6dG9TdHJpbmdOYW1lKGNvbnN0IEpTT2Jq
ZWN0KiwgSlNHbG9iYWxPYmplY3QqKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvUmVnRXhwT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvUmVnRXhwT2JqZWN0LmgJKHJldmlzaW9uIDI3MTU4MCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICsz
MCw3IEBAIG5hbWVzcGFjZSBKU0MgewogY2xhc3MgUmVnRXhwT2JqZWN0IGZpbmFsIDogcHVibGlj
IEpTTm9uRmluYWxPYmplY3QgewogcHVibGljOgogICAgIHVzaW5nIEJhc2UgPSBKU05vbkZpbmFs
T2JqZWN0OwotICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBC
YXNlOjpTdHJ1Y3R1cmVGbGFncyB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJy
aWRlc0dldE93blNwZWNpYWxQcm9wZXJ0eU5hbWVzOworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5z
aWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IE92ZXJyaWRlc0dl
dE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRlc0dldE93blNwZWNpYWxQcm9wZXJ0eU5hbWVzIHwg
T3ZlcnJpZGVzUHV0OwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNl
QWNjZXNzIG1vZGU+CiAgICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0p
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TcGFyc2VBcnJheVZhbHVlTWFw
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TcGFyc2VB
cnJheVZhbHVlTWFwLmNwcAkocmV2aXNpb24gMjcxNTgwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvU3BhcnNlQXJyYXlWYWx1ZU1hcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIw
MSw3ICsyMDEsNyBAQCBib29sIFNwYXJzZUFycmF5RW50cnk6OnB1dChKU0dsb2JhbE9iamVjCiAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29w
ZSwgY2FsbFNldHRlcihnbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgQmFzZTo6Z2V0KCksIHZhbHVl
LCBzaG91bGRUaHJvdyA/IEVDTUFNb2RlOjpzdHJpY3QoKSA6IEVDTUFNb2RlOjpzbG9wcHkoKSkp
OworICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgY2FsbFNldHRlcihnbG9iYWxPYmplY3Qs
IHRoaXNWYWx1ZSwgQmFzZTo6Z2V0KCksIHZhbHVlLCBzaG91bGRUaHJvdykpOwogfQogCiBKU1Zh
bHVlIFNwYXJzZUFycmF5RW50cnk6OmdldE5vblNwYXJzZU1vZGUoKSBjb25zdApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nT2JqZWN0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdPYmplY3QuY3BwCShyZXZpc2lv
biAyNzE1ODApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdPYmplY3Qu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OCwxMSArNjgsMTAgQEAgYm9vbCBTdHJpbmdPYmplY3Q6
OnB1dChKU0NlbGwqIGNlbGwsIEpTRwogCiAgICAgU3RyaW5nT2JqZWN0KiB0aGlzT2JqZWN0ID0g
anNDYXN0PFN0cmluZ09iamVjdCo+KGNlbGwpOwogCi0gICAgaWYgKFVOTElLRUxZKGlzVGhpc1Zh
bHVlQWx0ZXJlZChzbG90LCB0aGlzT2JqZWN0KSkpIAotICAgICAgICBSRUxFQVNFX0FORF9SRVRV
Uk4oc2NvcGUsIG9yZGluYXJ5U2V0U2xvdyhnbG9iYWxPYmplY3QsIHRoaXNPYmplY3QsIHByb3Bl
cnR5TmFtZSwgdmFsdWUsIHNsb3QudGhpc1ZhbHVlKCksIHNsb3QuaXNTdHJpY3RNb2RlKCkpKTsK
LQogICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoKQogICAg
ICAgICByZXR1cm4gdHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsIHNsb3QuaXNTdHJpY3RN
b2RlKCksIFJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9yKTsKKyAgICBpZiAoVU5MSUtFTFkoc2xv
dC50aGlzVmFsdWUoKSAhPSB0aGlzT2JqZWN0KSkKKyAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJO
KHNjb3BlLCBKU09iamVjdDo6cHV0KGNlbGwsIGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCB2
YWx1ZSwgc2xvdCkpOwogICAgIGlmIChPcHRpb25hbDx1aW50MzJfdD4gaW5kZXggPSBwYXJzZUlu
ZGV4KHByb3BlcnR5TmFtZSkpIAogICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIHB1
dEJ5SW5kZXgoY2VsbCwgZ2xvYmFsT2JqZWN0LCBpbmRleC52YWx1ZSgpLCB2YWx1ZSwgc2xvdC5p
c1N0cmljdE1vZGUoKSkpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgSlNPYmplY3Q6
OnB1dChjZWxsLCBnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ09iamVjdC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ09iamVjdC5oCShyZXZp
c2lvbiAyNzE1ODApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdPYmpl
Y3QuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNyArMjgsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIGNs
YXNzIFN0cmluZ09iamVjdCA6IHB1YmxpYyBKU1dyYXBwZXJPYmplY3QgewogcHVibGljOgogICAg
IHVzaW5nIEJhc2UgPSBKU1dyYXBwZXJPYmplY3Q7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB1bnNp
Z25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJpZGVzR2V0
T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlOYW1lcyB8IEludGVyY2Vw
dHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm87CisgICAg
c3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVy
ZUZsYWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzR2V0T3duUHJv
cGVydHlOYW1lcyB8IE92ZXJyaWRlc1B1dCB8IEludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RC
eUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm87CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSwg
U3Vic3BhY2VBY2Nlc3MgbW9kZT4KICAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9y
KFZNJiB2bSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ1Byb3Rv
dHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3Ry
aW5nUHJvdG90eXBlLmNwcAkocmV2aXNpb24gMjcxNTgwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvU3RyaW5nUHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIxLDkg
KzEyMSw5IEBAIFN0cmluZ1Byb3RvdHlwZTo6U3RyaW5nUHJvdG90eXBlKFZNJiB2bSwKIHsKIH0K
IAotdm9pZCBTdHJpbmdQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgSlNTdHJpbmcqIG5hbWVBbmRNZXNzYWdlKQordm9pZCBTdHJp
bmdQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCkKIHsKLSAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSwgbmFtZUFuZE1lc3NhZ2Up
OworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtLCBqc0VtcHR5U3RyaW5nKHZtKSk7CiAgICAg
QVNTRVJUKGluaGVyaXRzKHZtLCBpbmZvKCkpKTsKIAogICAgIEpTQ19OQVRJVkVfSU5UUklOU0lD
X0ZVTkNUSU9OX1dJVEhPVVRfVFJBTlNJVElPTih2bS5wcm9wZXJ0eU5hbWVzLT50b1N0cmluZywg
c3RyaW5nUHJvdG9GdW5jVG9TdHJpbmcsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0
dHJpYnV0ZTo6RG9udEVudW0pLCAwLCBTdHJpbmdQcm90b3R5cGVWYWx1ZU9mSW50cmluc2ljKTsK
QEAgLTE2NSwxNCArMTY1LDEyIEBAIHZvaWQgU3RyaW5nUHJvdG90eXBlOjpmaW5pc2hDcmVhdGlv
bihWTSYKICAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVydHlOYW1l
cy0+aXRlcmF0b3JTeW1ib2wsIGl0ZXJhdG9yRnVuY3Rpb24sIHN0YXRpY19jYXN0PHVuc2lnbmVk
PihQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pKTsKIAogICAgIC8vIFRoZSBjb25zdHJ1Y3Rv
ciB3aWxsIGJlIGFkZGVkIGxhdGVyLCBhZnRlciBTdHJpbmdDb25zdHJ1Y3RvciBoYXMgYmVlbiBi
dWlsdAotICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5hbWVz
LT5sZW5ndGgsIGpzTnVtYmVyKDApLCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSB8IFBy
b3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7
CiB9CiAKIFN0cmluZ1Byb3RvdHlwZSogU3RyaW5nUHJvdG90eXBlOjpjcmVhdGUoVk0mIHZtLCBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKIHsKLSAg
ICBKU1N0cmluZyogZW1wdHkgPSBqc0VtcHR5U3RyaW5nKHZtKTsKICAgICBTdHJpbmdQcm90b3R5
cGUqIHByb3RvdHlwZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFN0cmluZ1Byb3RvdHlw
ZT4odm0uaGVhcCkpIFN0cmluZ1Byb3RvdHlwZSh2bSwgc3RydWN0dXJlKTsKLSAgICBwcm90b3R5
cGUtPmZpbmlzaENyZWF0aW9uKHZtLCBnbG9iYWxPYmplY3QsIGVtcHR5KTsKKyAgICBwcm90b3R5
cGUtPmZpbmlzaENyZWF0aW9uKHZtLCBnbG9iYWxPYmplY3QpOwogICAgIHJldHVybiBwcm90b3R5
cGU7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ1Byb3Rv
dHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmlu
Z1Byb3RvdHlwZS5oCShyZXZpc2lvbiAyNzE1ODApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TdHJpbmdQcm90b3R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDUsNyArNDUsNyBA
QCBwdWJsaWM6CiAKIHByaXZhdGU6CiAgICAgU3RyaW5nUHJvdG90eXBlKFZNJiwgU3RydWN0dXJl
Kik7Ci0gICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNTdHJp
bmcqKTsKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgSlNHbG9iYWxPYmplY3QqKTsKIH07
CiBTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShTdHJpbmdQcm90b3R5cGUsIFN0
cmluZ09iamVjdCk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVj
dHVyZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3Ry
dWN0dXJlLmNwcAkocmV2aXNpb24gMjcxNTgwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU3RydWN0dXJlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg5LDExICsxODksNiBAQCB2
b2lkIFN0cnVjdHVyZTo6dmFsaWRhdGVGbGFncygpCiAgICAgaWYgKG92ZXJyaWRlc0dldE93blBy
b3BlcnR5U2xvdEJ5SW5kZXgpCiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHR5cGVJbmZvKCkuaW50
ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybygp
KTsKIAotICAgIGJvb2wgb3ZlcnJpZGVzUHV0UHJvcGVydHlTZWN1cml0eUNoZWNrID0KLSAgICAg
ICAgbWV0aG9kVGFibGUuZG9QdXRQcm9wZXJ0eVNlY3VyaXR5Q2hlY2sgIT0gSlNPYmplY3Q6OmRv
UHV0UHJvcGVydHlTZWN1cml0eUNoZWNrCi0gICAgICAgICYmIG1ldGhvZFRhYmxlLmRvUHV0UHJv
cGVydHlTZWN1cml0eUNoZWNrICE9IEpTQ2VsbDo6ZG9QdXRQcm9wZXJ0eVNlY3VyaXR5Q2hlY2s7
Ci0gICAgUkVMRUFTRV9BU1NFUlQob3ZlcnJpZGVzUHV0UHJvcGVydHlTZWN1cml0eUNoZWNrID09
IHR5cGVJbmZvKCkuaGFzUHV0UHJvcGVydHlTZWN1cml0eUNoZWNrKCkpOwotCiAgICAgYm9vbCBv
dmVycmlkZXNHZXRPd25Qcm9wZXJ0eU5hbWVzID0KICAgICAgICAgbWV0aG9kVGFibGUuZ2V0T3du
UHJvcGVydHlOYW1lcyAhPSBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcwogICAgICAgICAm
JiBtZXRob2RUYWJsZS5nZXRPd25Qcm9wZXJ0eU5hbWVzICE9IEpTQ2VsbDo6Z2V0T3duUHJvcGVy
dHlOYW1lczsKQEAgLTIwOCw2ICsyMDMsMTEgQEAgdm9pZCBTdHJ1Y3R1cmU6OnZhbGlkYXRlRmxh
Z3MoKQogICAgICAgICBtZXRob2RUYWJsZS5nZXRQcm90b3R5cGUgIT0gc3RhdGljX2Nhc3Q8TWV0
aG9kVGFibGU6OkdldFByb3RvdHlwZUZ1bmN0aW9uUHRyPihKU09iamVjdDo6Z2V0UHJvdG90eXBl
KQogICAgICAgICAmJiBtZXRob2RUYWJsZS5nZXRQcm90b3R5cGUgIT0gSlNDZWxsOjpnZXRQcm90
b3R5cGU7CiAgICAgUkVMRUFTRV9BU1NFUlQob3ZlcnJpZGVzR2V0UHJvdG90eXBlID09IHR5cGVJ
bmZvKCkub3ZlcnJpZGVzR2V0UHJvdG90eXBlKCkpOworCisgICAgYm9vbCBvdmVycmlkZXNQdXQg
PQorICAgICAgICBtZXRob2RUYWJsZS5wdXQgIT0gSlNPYmplY3Q6OnB1dAorICAgICAgICAmJiBt
ZXRob2RUYWJsZS5wdXQgIT0gSlNDZWxsOjpwdXQ7CisgICAgUkVMRUFTRV9BU1NFUlQob3ZlcnJp
ZGVzUHV0ID09IHR5cGVJbmZvKCkub3ZlcnJpZGVzUHV0KCkpOwogfQogI2Vsc2UKIGlubGluZSB2
b2lkIFN0cnVjdHVyZTo6dmFsaWRhdGVGbGFncygpIHsgfQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3Rvb2xzL0pTRG9sbGFyVk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS90b29scy9KU0RvbGxhclZNLmNwcAkocmV2aXNpb24gMjcxNTgwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3Rvb2xzL0pTRG9sbGFyVk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02
NjUsOSArNjY1LDExIEBAIEpTQ19ERUZJTkVfQ1VTVE9NX0dFVFRFUihydW50aW1lQXJyYXlMZW4K
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKHRoaXNPYmplY3QtPmdldExlbmd0
aCgpKSk7CiB9CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgQ29tcGFjdEhhc2hJbmRleCBzdGF0aWND
dXN0b21BY2Nlc3NvclRhYmxlSW5kZXhbMl0gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IENvbXBh
Y3RIYXNoSW5kZXggc3RhdGljQ3VzdG9tQWNjZXNzb3JUYWJsZUluZGV4WzRdID0gewogICAgIHsg
MCwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAorICAgIHsgMSwgLTEgfSwKKyAgICB7IC0xLCAtMSB9
LAogfTsKIAogc3RhdGljIEpTQ19ERUNMQVJFX0NVU1RPTV9HRVRURVIodGVzdFN0YXRpY0FjY2Vz
c29yR2V0dGVyKTsKQEAgLTY5MCwxOSArNjkyLDIzIEBAIEpTQ19ERUZJTkVfQ1VTVE9NX1NFVFRF
Uih0ZXN0U3RhdGljQWNjZXMKIHsKICAgICBEb2xsYXJWTUFzc2VydFNjb3BlIGFzc2VydFNjb3Bl
OwogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHRocm93U2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICAKLSAgICBKU09iamVjdCogdGhpc09iamVj
dCA9IGpzRHluYW1pY0Nhc3Q8SlNPYmplY3QqPih2bSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1
ZSkpOworICAgIEpTVmFsdWUgcmVjZWl2ZXIgPSBKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKTsK
KyAgICBKU09iamVjdCogdGhpc09iamVjdCA9IHJlY2VpdmVyLmlzT2JqZWN0KCkgPyBhc09iamVj
dChyZWNlaXZlcikgOiByZWNlaXZlci5zeW50aGVzaXplUHJvdG90eXBlKGdsb2JhbE9iamVjdCk7
CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CiAgICAgUkVMRUFT
RV9BU1NFUlQodGhpc09iamVjdCk7CiAKICAgICByZXR1cm4gdGhpc09iamVjdC0+cHV0RGlyZWN0
KHZtLCBQcm9wZXJ0eU5hbWUoSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInRlc3RGaWVsZCIp
KSwgSlNWYWx1ZTo6ZGVjb2RlKHZhbHVlKSk7CiB9CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgSGFz
aFRhYmxlVmFsdWUgc3RhdGljQ3VzdG9tQWNjZXNzb3JUYWJsZVZhbHVlc1sxXSA9IHsKK3N0YXRp
YyBjb25zdCBzdHJ1Y3QgSGFzaFRhYmxlVmFsdWUgc3RhdGljQ3VzdG9tQWNjZXNzb3JUYWJsZVZh
bHVlc1syXSA9IHsKICAgICB7ICJ0ZXN0U3RhdGljQWNjZXNzb3IiLCBzdGF0aWNfY2FzdDx1bnNp
Z25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkN1c3RvbUFjY2Vzc29yKSwgTm9JbnRyaW5zaWMsIHsg
KGludHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPih0ZXN0U3Rh
dGljQWNjZXNzb3JHZXR0ZXIpLCAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHV0UHJvcGVydHlTbG90
OjpQdXRWYWx1ZUZ1bmM+KHRlc3RTdGF0aWNBY2Nlc3NvclB1dHRlcikgfSB9LAorICAgIHsgInRl
c3RTdGF0aWNBY2Nlc3NvclJlYWRPbmx5IiwgUHJvcGVydHlBdHRyaWJ1dGU6OkN1c3RvbUFjY2Vz
c29yIHwgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5LCBOb0ludHJpbnNpYywgeyAoaW50cHRy
X3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KHRlc3RTdGF0aWNBY2Nl
c3NvckdldHRlciksIChpbnRwdHJfdClzdGF0aWNfY2FzdDxQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZh
bHVlRnVuYz4oMCkgfSB9LAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBIYXNoVGFibGUgc3Rh
dGljQ3VzdG9tQWNjZXNzb3JUYWJsZSA9Ci0gICAgeyAxLCAxLCB0cnVlLCBudWxscHRyLCBzdGF0
aWNDdXN0b21BY2Nlc3NvclRhYmxlVmFsdWVzLCBzdGF0aWNDdXN0b21BY2Nlc3NvclRhYmxlSW5k
ZXggfTsKKyAgICB7IDIsIDMsIHRydWUsIG51bGxwdHIsIHN0YXRpY0N1c3RvbUFjY2Vzc29yVGFi
bGVWYWx1ZXMsIHN0YXRpY0N1c3RvbUFjY2Vzc29yVGFibGVJbmRleCB9OwogCiBjbGFzcyBTdGF0
aWNDdXN0b21BY2Nlc3NvciA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKICAgICB1c2luZyBC
YXNlID0gSlNOb25GaW5hbE9iamVjdDsKQEAgLTc2NywxNyArNzczLDI1IEBAIEpTQ19ERUZJTkVf
Q1VTVE9NX1NFVFRFUih0ZXN0U3RhdGljVmFsdWUKICAgICByZXR1cm4gdGhpc09iamVjdC0+cHV0
RGlyZWN0KHZtLCBQcm9wZXJ0eU5hbWUoSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInRlc3RT
dGF0aWNWYWx1ZSIpKSwgSlNWYWx1ZTo6ZGVjb2RlKHZhbHVlKSk7CiB9CiAKLXN0YXRpYyBjb25z
dCBzdHJ1Y3QgQ29tcGFjdEhhc2hJbmRleCBzdGF0aWNDdXN0b21WYWx1ZVRhYmxlSW5kZXhbMl0g
PSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IENvbXBhY3RIYXNoSW5kZXggc3RhdGljQ3VzdG9tVmFs
dWVUYWJsZUluZGV4WzhdID0geworICAgIHsgMSwgLTEgfSwKKyAgICB7IC0xLCAtMSB9LAorICAg
IHsgLTEsIC0xIH0sCisgICAgeyAtMSwgLTEgfSwKKyAgICB7IC0xLCAtMSB9LAorICAgIHsgMiwg
LTEgfSwKICAgICB7IDAsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKIH07CiAKLXN0YXRpYyBjb25z
dCBzdHJ1Y3QgSGFzaFRhYmxlVmFsdWUgc3RhdGljQ3VzdG9tVmFsdWVUYWJsZVZhbHVlc1sxXSA9
IHsKLSAgICB7ICJ0ZXN0U3RhdGljVmFsdWUiLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVy
dHlBdHRyaWJ1dGU6OkN1c3RvbUFjY2Vzc29yKSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0
YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPih0ZXN0U3RhdGljVmFsdWVHZXR0
ZXIpLCAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmM+
KHRlc3RTdGF0aWNWYWx1ZVB1dHRlcikgfSB9LAorc3RhdGljIGNvbnN0IHN0cnVjdCBIYXNoVGFi
bGVWYWx1ZSBzdGF0aWNDdXN0b21WYWx1ZVRhYmxlVmFsdWVzWzNdID0geworICAgIHsgInRlc3RT
dGF0aWNWYWx1ZSIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6Tm9u
ZSksIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6Okdl
dFZhbHVlRnVuYz4odGVzdFN0YXRpY1ZhbHVlR2V0dGVyKSwgKGludHB0cl90KXN0YXRpY19jYXN0
PFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jPih0ZXN0U3RhdGljVmFsdWVQdXR0ZXIpIH0g
fSwKKyAgICB7ICJ0ZXN0U3RhdGljVmFsdWVOb1NldHRlciIsIHN0YXRpY19jYXN0PHVuc2lnbmVk
PihQcm9wZXJ0eUF0dHJpYnV0ZTo6Tm9uZSksIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0
aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4odGVzdFN0YXRpY1ZhbHVlR2V0dGVy
KSwgKGludHB0cl90KXN0YXRpY19jYXN0PFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jPigw
KSB9IH0sCisgICAgeyAidGVzdFN0YXRpY1ZhbHVlUmVhZE9ubHkiLCBzdGF0aWNfY2FzdDx1bnNp
Z25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5KSwgTm9JbnRyaW5zaWMsIHsgKGludHB0
cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPih0ZXN0U3RhdGljVmFs
dWVHZXR0ZXIpLCAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHV0UHJvcGVydHlTbG90OjpQdXRWYWx1
ZUZ1bmM+KDApIH0gfSwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgSGFzaFRhYmxlIHN0YXRp
Y0N1c3RvbVZhbHVlVGFibGUgPQotICAgIHsgMSwgMSwgdHJ1ZSwgbnVsbHB0ciwgc3RhdGljQ3Vz
dG9tVmFsdWVUYWJsZVZhbHVlcywgc3RhdGljQ3VzdG9tVmFsdWVUYWJsZUluZGV4IH07CisgICAg
eyAzLCA3LCB0cnVlLCBudWxscHRyLCBzdGF0aWNDdXN0b21WYWx1ZVRhYmxlVmFsdWVzLCBzdGF0
aWNDdXN0b21WYWx1ZVRhYmxlSW5kZXggfTsKIAogY2xhc3MgU3RhdGljQ3VzdG9tVmFsdWUgOiBw
dWJsaWMgSlNOb25GaW5hbE9iamVjdCB7CiAgICAgdXNpbmcgQmFzZSA9IEpTTm9uRmluYWxPYmpl
Y3Q7CkBAIC04MTUsNiArODI5LDcgQEAgcHVibGljOgogCiBjbGFzcyBPYmplY3REb2luZ1NpZGVF
ZmZlY3RQdXRXaXRob3V0Q29ycmVjdFNsb3RTdGF0dXMgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVj
dCB7CiAgICAgdXNpbmcgQmFzZSA9IEpTTm9uRmluYWxPYmplY3Q7CisgICAgc3RhdGljIGNvbnN0
ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgT3Zl
cnJpZGVzUHV0OwogcHVibGljOgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJz
cGFjZUFjY2Vzcz4KICAgICBzdGF0aWMgQ29tcGxldGVTdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0m
IHZtKQpJbmRleDogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjcxNTgwKQorKysgU291cmNlL1dlYkNvcmUv
Q2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjMgQEAKKzIwMjEtMDEtMTggIEFs
ZXhleSBTaHZheWthICA8c2h2YWlrYWxlc2hAZ21haWwuY29tPgorCisgICAgICAgIEludHJvZHVj
ZSBPdmVycmlkZXNQdXRbQnlJbmRleF0gdHlwZSBpbmZvIGZsYWdzCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTc5MTYKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NV2luZG93
Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NV2luZG93OjpwdXQpOgorICAgICAg
ICAoV2ViQ29yZTo6SlNET01XaW5kb3c6OmRvUHV0UHJvcGVydHlTZWN1cml0eUNoZWNrKTogRGVs
ZXRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0xvY2F0aW9uQ3VzdG9tLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkpTTG9jYXRpb246OmRvUHV0UHJvcGVydHlTZWN1cml0eUNoZWNrKTogRGVs
ZXRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1JlbW90ZURPTVdpbmRvd0N1c3RvbS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpKU1JlbW90ZURPTVdpbmRvdzo6cHV0KToKKyAgICAgICAgKiBi
aW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbToKKyAgICAgICAgKEdlbmVyYXRlSGVh
ZGVyKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RG9tYWluU2Vj
dXJpdHkuaDoKKyAgICAgICAgKiBwYWdlL0RPTVdpbmRvdy5pZGw6CisgICAgICAgICogcGFnZS9S
ZW1vdGVET01XaW5kb3cuaWRsOgorCiAyMDIxLTAxLTE4ICBOaWtvbGFzIFppbW1lcm1hbm4gIDxu
emltbWVybWFubkBpZ2FsaWEuY29tPgogCiAgICAgICAgIFJlbW92ZSByZWNlbnRseSBhZGRlZCBn
bHVlIGNvZGU6IFJlbmRlckxheWVyOjooc2Nyb2xsVG9PZmZzZXQgLyBzY3JvbGxUb1hPZmZzZXQg
LyBzY3JvbGxUb1lPZmZzZXQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RP
TVdpbmRvd0N1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNET01XaW5kb3dDdXN0b20uY3BwCShyZXZpc2lvbiAyNzE1ODApCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0N1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMxMSwyNSArMzExLDYgQEAgYm9vbCBKU0RPTVdpbmRvdzo6Z2V0T3duUHJvcGVydHlTbG90QnlJ
bgogICAgIHJldHVybiBCYXNlOjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KHRoaXNPYmplY3Qs
IGxleGljYWxHbG9iYWxPYmplY3QsIGluZGV4LCBzbG90KTsKIH0KIAotdm9pZCBKU0RPTVdpbmRv
dzo6ZG9QdXRQcm9wZXJ0eVNlY3VyaXR5Q2hlY2soSlNPYmplY3QqIGNlbGwsIEpTR2xvYmFsT2Jq
ZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQdXRQ
cm9wZXJ0eVNsb3QmKQotewotICAgIFZNJiB2bSA9IGxleGljYWxHbG9iYWxPYmplY3QtPnZtKCk7
Ci0gICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgYXV0byog
dGhpc09iamVjdCA9IGpzQ2FzdDxKU0RPTVdpbmRvdyo+KGNlbGwpOwotICAgIGlmICghdGhpc09i
amVjdC0+d3JhcHBlZCgpLmZyYW1lKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFN0cmluZyBl
cnJvck1lc3NhZ2U7Ci0gICAgaWYgKCFCaW5kaW5nU2VjdXJpdHk6OnNob3VsZEFsbG93QWNjZXNz
VG9ET01XaW5kb3coKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNPYmplY3QtPndyYXBwZWQoKSwg
ZXJyb3JNZXNzYWdlKSkgewotICAgICAgICAvLyBXZSBvbmx5IGFsbG93IHNldHRpbmcgImxvY2F0
aW9uIiBhdHRyaWJ1dGUgY3Jvc3Mtb3JpZ2luLgotICAgICAgICBpZiAocHJvcGVydHlOYW1lID09
IHN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSktPmJ1aWx0aW5OYW1l
cygpLmxvY2F0aW9uUHVibGljTmFtZSgpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB0
aHJvd1NlY3VyaXR5RXJyb3IoKmxleGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLCBlcnJvck1lc3Nh
Z2UpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotfQotCiBib29sIEpTRE9NV2luZG93OjpwdXQo
SlNDZWxsKiBjZWxsLCBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgUHJvcGVy
dHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBzbG90
KQogewogICAgIFZNJiB2bSA9IGxleGljYWxHbG9iYWxPYmplY3QtPnZtKCk7CkBAIC0zNDMsMTAg
KzMyNCw5IEBAIGJvb2wgSlNET01XaW5kb3c6OnB1dChKU0NlbGwqIGNlbGwsIEpTR2wKICAgICBp
ZiAoIUJpbmRpbmdTZWN1cml0eTo6c2hvdWxkQWxsb3dBY2Nlc3NUb0RPTVdpbmRvdygqbGV4aWNh
bEdsb2JhbE9iamVjdCwgdGhpc09iamVjdC0+d3JhcHBlZCgpLCBlcnJvck1lc3NhZ2UpKSB7CiAg
ICAgICAgIC8vIFdlIG9ubHkgYWxsb3cgc2V0dGluZyAibG9jYXRpb24iIGF0dHJpYnV0ZSBjcm9z
cy1vcmlnaW4uCiAgICAgICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gc3RhdGljX2Nhc3Q8SlNWTUNs
aWVudERhdGEqPih2bS5jbGllbnREYXRhKS0+YnVpbHRpbk5hbWVzKCkubG9jYXRpb25QdWJsaWNO
YW1lKCkpIHsKLSAgICAgICAgICAgIGJvb2wgcHV0UmVzdWx0ID0gZmFsc2U7Ci0gICAgICAgICAg
ICBpZiAobG9va3VwUHV0KGxleGljYWxHbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgdGhpc09i
amVjdCwgdmFsdWUsICpzX2luZm8uc3RhdGljUHJvcEhhc2hUYWJsZSwgc2xvdCwgcHV0UmVzdWx0
KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gcHV0UmVzdWx0OwotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICAgICAgc2V0SlNET01XaW5kb3dfbG9jYXRpb24obGV4aWNhbEdsb2Jh
bE9iamVjdCwgSlNWYWx1ZTo6ZW5jb2RlKHNsb3QudGhpc1ZhbHVlKCkpLCBKU1ZhbHVlOjplbmNv
ZGUodmFsdWUpKTsKKyAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGZhbHNl
KTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgICAgIHRocm93U2Vj
dXJpdHlFcnJvcigqbGV4aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUsIGVycm9yTWVzc2FnZSk7CiAg
ICAgICAgIHJldHVybiBmYWxzZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
TG9jYXRpb25DdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTTG9jYXRpb25DdXN0b20uY3BwCShyZXZpc2lvbiAyNzE1ODApCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0xvY2F0aW9uQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTEzLDIzICsxMTMsNiBAQCBib29sIEpTTG9jYXRpb246OmdldE93blByb3BlcnR5U2xvdEJ5SW5k
CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlT
bG90QnlJbmRleChvYmplY3QsIGxleGljYWxHbG9iYWxPYmplY3QsIGluZGV4LCBzbG90KSk7CiB9
CiAKLXZvaWQgSlNMb2NhdGlvbjo6ZG9QdXRQcm9wZXJ0eVNlY3VyaXR5Q2hlY2soSlNPYmplY3Qq
IG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIFByb3BlcnR5TmFt
ZSBwcm9wZXJ0eU5hbWUsIFB1dFByb3BlcnR5U2xvdCYpCi17Ci0gICAgYXV0byogdGhpc09iamVj
dCA9IGpzQ2FzdDxKU0xvY2F0aW9uKj4ob2JqZWN0KTsKLSAgICBBU1NFUlRfR0NfT0JKRUNUX0lO
SEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7Ci0KLSAgICBWTSYgdm0gPSBsZXhpY2FsR2xvYmFs
T2JqZWN0LT52bSgpOwotCi0gICAgLy8gQWx3YXlzIGFsbG93IGFzc2lnbmluZyB0byB0aGUgd2hv
bGUgbG9jYXRpb24uCi0gICAgLy8gSG93ZXZlciwgYWxsbG93aW5nIGFzc2lnbmluZyBvZiBwaWVj
ZXMgbWlnaHQgaW5hZHZlcnRlbnRseSBkaXNjbG9zZSBwYXJ0cyBvZiB0aGUgb3JpZ2luYWwgbG9j
YXRpb24uCi0gICAgLy8gU28gZmFsbCB0aHJvdWdoIHRvIHRoZSBhY2Nlc3MgY2hlY2sgZm9yIHRo
b3NlLgotICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEq
Pih2bS5jbGllbnREYXRhKS0+YnVpbHRpbk5hbWVzKCkuaHJlZlB1YmxpY05hbWUoKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgLy8gQmxvY2sgYWNjZXNzIGFuZCB0aHJvdyBpZiB0aGVyZSBpcyBh
IHNlY3VyaXR5IGVycm9yLgotICAgIEJpbmRpbmdTZWN1cml0eTo6c2hvdWxkQWxsb3dBY2Nlc3NU
b0RPTVdpbmRvdyhsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzT2JqZWN0LT53cmFwcGVkKCkud2lu
ZG93KCksIFRocm93U2VjdXJpdHlFcnJvcik7Ci19Ci0KIGJvb2wgSlNMb2NhdGlvbjo6cHV0KEpT
Q2VsbCogY2VsbCwgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIFByb3BlcnR5
TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgcHV0UHJv
cGVydHlTbG90KQogewogICAgIFZNJiB2bSA9IGxleGljYWxHbG9iYWxPYmplY3QtPnZtKCk7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1JlbW90ZURPTVdpbmRvd0N1c3RvbS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNSZW1vdGVET01X
aW5kb3dDdXN0b20uY3BwCShyZXZpc2lvbiAyNzE1ODApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU1JlbW90ZURPTVdpbmRvd0N1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY4
LDEwICs2OCw5IEBAIGJvb2wgSlNSZW1vdGVET01XaW5kb3c6OnB1dChKU0NlbGwqIGNlbGwKIAog
ICAgIC8vIFdlIG9ubHkgYWxsb3cgc2V0dGluZyAibG9jYXRpb24iIGF0dHJpYnV0ZSBjcm9zcy1v
cmlnaW4uCiAgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0
YSo+KHZtLmNsaWVudERhdGEpLT5idWlsdGluTmFtZXMoKS5sb2NhdGlvblB1YmxpY05hbWUoKSkg
ewotICAgICAgICBib29sIHB1dFJlc3VsdCA9IGZhbHNlOwotICAgICAgICBpZiAobG9va3VwUHV0
KGxleGljYWxHbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgdGhpc09iamVjdCwgdmFsdWUsICpz
X2luZm8uc3RhdGljUHJvcEhhc2hUYWJsZSwgc2xvdCwgcHV0UmVzdWx0KSkKLSAgICAgICAgICAg
IHJldHVybiBwdXRSZXN1bHQ7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgc2V0SlNS
ZW1vdGVET01XaW5kb3dfbG9jYXRpb24obGV4aWNhbEdsb2JhbE9iamVjdCwgSlNWYWx1ZTo6ZW5j
b2RlKHNsb3QudGhpc1ZhbHVlKCkpLCBKU1ZhbHVlOjplbmNvZGUodmFsdWUpKTsKKyAgICAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZmFsc2UpOworICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICB9CiAgICAgdGhyb3dTZWN1cml0eUVycm9yKCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29w
ZSwgZXJyb3JNZXNzYWdlKTsKICAgICByZXR1cm4gZmFsc2U7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQkocmV2aXNpb24g
MjcxNTgwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9y
SlMucG0JKHdvcmtpbmcgY29weSkKQEAgLTI5NTIsMTEgKzI5NTIsNiBAQCBzdWIgR2VuZXJhdGVI
ZWFkZXIKICAgICAgICAgJHN0cnVjdHVyZUZsYWdzeyJKU0M6OkludGVyY2VwdHNHZXRPd25Qcm9w
ZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8ifSA9IDE7CiAgICAgfQogCi0g
ICAgaWYgKCRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+e0NoZWNrU2VjdXJpdHl9KSB7
Ci0gICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgc3RhdGljIHZvaWQgZG9QdXRQcm9w
ZXJ0eVNlY3VyaXR5Q2hlY2soSlNDOjpKU09iamVjdCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBK
U0M6OlByb3BlcnR5TmFtZSwgSlNDOjpQdXRQcm9wZXJ0eVNsb3QmKTtcbiIpOwotICAgICAgICAk
c3RydWN0dXJlRmxhZ3N7IkpTQzo6SGFzUHV0UHJvcGVydHlTZWN1cml0eUNoZWNrIn0gPSAxOwot
ICAgIH0KLQogICAgIGlmICgkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntQbHVnaW59
IHx8IEdldE5hbWVkU2V0dGVyT3BlcmF0aW9uKCRpbnRlcmZhY2UpKSB7CiAgICAgICAgICRzdHJ1
Y3R1cmVGbGFnc3siSlNDOjpQcm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmcifSA9IDE7CiAgICAgfQpA
QCAtMjk2OSw2ICsyOTY0LDcgQEAgc3ViIEdlbmVyYXRlSGVhZGVyCiAgICAgaWYgKEluc3RhbmNl
T3ZlcnJpZGVzUHV0KCRpbnRlcmZhY2UpKSB7CiAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQs
ICIgICAgc3RhdGljIGJvb2wgcHV0KEpTQzo6SlNDZWxsKiwgSlNDOjpKU0dsb2JhbE9iamVjdCos
IEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OkpTVmFsdWUsIEpTQzo6UHV0UHJvcGVydHlTbG90Jik7
XG4iKTsKICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBzdGF0aWMgYm9vbCBwdXRC
eUluZGV4KEpTQzo6SlNDZWxsKiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIHVuc2lnbmVkIHByb3Bl
cnR5TmFtZSwgSlNDOjpKU1ZhbHVlLCBib29sIHNob3VsZFRocm93KTtcbiIpOworICAgICAgICAk
c3RydWN0dXJlRmxhZ3N7IkpTQzo6T3ZlcnJpZGVzUHV0In0gPSAxOwogICAgIH0KICAgICAKICAg
ICBpZiAoSW5zdGFuY2VPdmVycmlkZXNEZWZpbmVPd25Qcm9wZXJ0eSgkaW50ZXJmYWNlKSkgewpJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdERvbWFp
blNlY3VyaXR5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdERvbWFpblNlY3VyaXR5LmgJKHJldmlzaW9uIDI3MTU4MCkKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3REb21haW5TZWN1cml0
eS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw3ICszOSw2IEBAIHB1YmxpYzoKICAgICBzdGF0aWMg
SlNDOjpKU09iamVjdCogY3JlYXRlUHJvdG90eXBlKEpTQzo6Vk0mLCBKU0RPTUdsb2JhbE9iamVj
dCYpOwogICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBwcm90b3R5cGUoSlNDOjpWTSYsIEpTRE9N
R2xvYmFsT2JqZWN0Jik7CiAgICAgc3RhdGljIFRlc3REb21haW5TZWN1cml0eSogdG9XcmFwcGVk
KEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOwotICAgIHN0YXRpYyB2b2lkIGRvUHV0UHJvcGVydHlT
ZWN1cml0eUNoZWNrKEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpQ
cm9wZXJ0eU5hbWUsIEpTQzo6UHV0UHJvcGVydHlTbG90Jik7CiAgICAgc3RhdGljIHZvaWQgZGVz
dHJveShKU0M6OkpTQ2VsbCopOwogCiAgICAgREVDTEFSRV9JTkZPOwpAQCAtNTksNyArNTgsNyBA
QCBwdWJsaWM6CiAgICAgc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1wbChK
U0M6OlZNJiB2bSk7CiAgICAgc3RhdGljIHZvaWQgYW5hbHl6ZUhlYXAoSlNDZWxsKiwgSlNDOjpI
ZWFwQW5hbHl6ZXImKTsKIHB1YmxpYzoKLSAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0
cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBKU0M6Okhhc1B1dFByb3BlcnR5
U2VjdXJpdHlDaGVjayB8IEpTQzo6SGFzU3RhdGljUHJvcGVydHlUYWJsZTsKKyAgICBzdGF0aWMg
Y29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3Mg
fCBKU0M6Okhhc1N0YXRpY1Byb3BlcnR5VGFibGU7CiBwcm90ZWN0ZWQ6CiAgICAgSlNUZXN0RG9t
YWluU2VjdXJpdHkoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCYsIFJlZjxUZXN0
RG9tYWluU2VjdXJpdHk+JiYpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRv
dy5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuaWRsCShy
ZXZpc2lvbiAyNzE1ODApCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5pZGwJKHdv
cmtpbmcgY29weSkKQEAgLTUyLDcgKzUyLDcgQEAKICAgICBbUmVwbGFjZWFibGUsIERvTm90Q2hl
Y2tTZWN1cml0eU9uR2V0dGVyLCBDdXN0b21HZXR0ZXJdIHJlYWRvbmx5IGF0dHJpYnV0ZSBXaW5k
b3dQcm94eSBzZWxmOwogICAgIFtMZWdhY3lVbmZvcmdlYWJsZV0gcmVhZG9ubHkgYXR0cmlidXRl
IERvY3VtZW50IGRvY3VtZW50OwogICAgIGF0dHJpYnV0ZSBET01TdHJpbmcgbmFtZTsKLSAgICBb
RG9Ob3RDaGVja1NlY3VyaXR5LCBQdXRGb3J3YXJkcz1ocmVmLCBMZWdhY3lVbmZvcmdlYWJsZV0g
cmVhZG9ubHkgYXR0cmlidXRlIExvY2F0aW9uIGxvY2F0aW9uOworICAgIFtEb05vdENoZWNrU2Vj
dXJpdHksIFB1dEZvcndhcmRzPWhyZWYsIExlZ2FjeVVuZm9yZ2VhYmxlLCBGb3J3YXJkRGVjbGFy
ZUluSGVhZGVyXSByZWFkb25seSBhdHRyaWJ1dGUgTG9jYXRpb24gbG9jYXRpb247CiAgICAgcmVh
ZG9ubHkgYXR0cmlidXRlIEhpc3RvcnkgaGlzdG9yeTsKICAgICBbSW1wbGVtZW50ZWRBcz1lbnN1
cmVDdXN0b21FbGVtZW50UmVnaXN0cnldIHJlYWRvbmx5IGF0dHJpYnV0ZSBDdXN0b21FbGVtZW50
UmVnaXN0cnkgY3VzdG9tRWxlbWVudHM7CiAgICAgW1JlcGxhY2VhYmxlXSByZWFkb25seSBhdHRy
aWJ1dGUgQmFyUHJvcCBsb2NhdGlvbmJhcjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvUmVt
b3RlRE9NV2luZG93LmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL1JlbW90
ZURPTVdpbmRvdy5pZGwJKHJldmlzaW9uIDI3MTU4MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
UmVtb3RlRE9NV2luZG93LmlkbAkod29ya2luZyBjb3B5KQpAQCAtNDUsNyArNDUsNyBAQAogXSBp
bnRlcmZhY2UgUmVtb3RlRE9NV2luZG93IHsKICAgICBbTGVnYWN5VW5mb3JnZWFibGUsIEltcGxl
bWVudGVkQXM9c2VsZl0gcmVhZG9ubHkgYXR0cmlidXRlIFdpbmRvd1Byb3h5IHdpbmRvdzsKICAg
ICBbUmVwbGFjZWFibGVdIHJlYWRvbmx5IGF0dHJpYnV0ZSBXaW5kb3dQcm94eSBzZWxmOwotICAg
IFtQdXRGb3J3YXJkcz1ocmVmLCBMZWdhY3lVbmZvcmdlYWJsZV0gcmVhZG9ubHkgYXR0cmlidXRl
IExvY2F0aW9uPyBsb2NhdGlvbjsgLy8gRklYTUU6IFNob3VsZCBub3QgYmUgbnVsbGFibGUuCisg
ICAgW1B1dEZvcndhcmRzPWhyZWYsIExlZ2FjeVVuZm9yZ2VhYmxlLCBGb3J3YXJkRGVjbGFyZUlu
SGVhZGVyXSByZWFkb25seSBhdHRyaWJ1dGUgTG9jYXRpb24/IGxvY2F0aW9uOyAvLyBGSVhNRTog
U2hvdWxkIG5vdCBiZSBudWxsYWJsZS4KICAgICBbQ2FsbFdpdGg9SW5jdW1iZW50RG9jdW1lbnQs
IEZvcndhcmREZWNsYXJlSW5IZWFkZXJdIHVuZGVmaW5lZCBjbG9zZSgpOwogICAgIFtGb3J3YXJk
RGVjbGFyZUluSGVhZGVyXSByZWFkb25seSBhdHRyaWJ1dGUgYm9vbGVhbiBjbG9zZWQ7CiAgICAg
W0NhbGxXaXRoPUluY3VtYmVudFdpbmRvdywgRm9yd2FyZERlY2xhcmVJbkhlYWRlcl0gdW5kZWZp
bmVkIGZvY3VzKCk7CkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNzE1ODApCisrKyBMYXlvdXRUZXN0cy9D
aGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMyBAQAorMjAyMS0wMS0xOCAgQWxl
eGV5IFNodmF5a2EgIDxzaHZhaWthbGVzaEBnbWFpbC5jb20+CisKKyAgICAgICAgSW50cm9kdWNl
IE92ZXJyaWRlc1B1dFtCeUluZGV4XSB0eXBlIGluZm8gZmxhZ3MKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNzkxNgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogaHR0cC90ZXN0cy9zZWN1cml0eS9jcm9z
cy1mcmFtZS1hY2Nlc3Mtb2JqZWN0LWdldFByb3RvdHlwZU9mLWluLXB1dC1leHBlY3RlZC50eHQ6
CisgICAgICAgICogaHR0cC90ZXN0cy9zZWN1cml0eS9jcm9zcy1mcmFtZS1hY2Nlc3Mtb2JqZWN0
LWdldFByb3RvdHlwZU9mLWluLXB1dC5odG1sOgorCiAyMDIxLTAxLTE4ICBZb3Vlbm4gRmFibGV0
ICA8eW91ZW5uQGFwcGxlLmNvbT4KIAogICAgICAgICBbIE1hYyBXSzEgXSBSRUdSRVNTSU9OIChy
MjM5MTQ1KSBMYXlvdXQgVGVzdCBodHRwL3dwdC9tZWRpYXJlY29yZGVyL01lZGlhUmVjb3JkZXIt
ZGF0YWF2YWlsYWJsZS5odG1sIGlzIGZsYWt5IHRleHQgZGlmZiBmYWlsdXJlCkluZGV4OiBMYXlv
dXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L2Nyb3NzLWZyYW1lLWFjY2Vzcy1vYmplY3QtZ2V0
UHJvdG90eXBlT2YtaW4tcHV0LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9odHRwL3Rlc3RzL3NlY3VyaXR5L2Nyb3NzLWZyYW1lLWFjY2Vzcy1vYmplY3QtZ2V0UHJvdG90
eXBlT2YtaW4tcHV0LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMjcxNTgwKQorKysgTGF5b3V0VGVz
dHMvaHR0cC90ZXN0cy9zZWN1cml0eS9jcm9zcy1mcmFtZS1hY2Nlc3Mtb2JqZWN0LWdldFByb3Rv
dHlwZU9mLWluLXB1dC1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw3IEBA
CiBUaGlzIHRlc3RzIHRoYXQgeW91IGNhbid0IGdldCB0aGUgcHJvdG90eXBlIG9mIHRoZSB3aW5k
b3cgZHVyaW5nIFtbUHV0XV0gb3BlcmF0aW9uLgogCitQQVNTIGFycmF5LmNvY29hID0gY29jb2FW
YWx1ZSB0aHJldyBleGNlcHRpb24gU2VjdXJpdHlFcnJvcjogQmxvY2tlZCBhIGZyYW1lIHdpdGgg
b3JpZ2luICJodHRwOi8vMTI3LjAuMC4xOjgwMDAiIGZyb20gYWNjZXNzaW5nIGEgY3Jvc3Mtb3Jp
Z2luIGZyYW1lLiBQcm90b2NvbHMsIGRvbWFpbnMsIGFuZCBwb3J0cyBtdXN0IG1hdGNoLi4KK1BB
U1MgJ3N0cicuY29jb2EgPSBjb2NvYVZhbHVlIHRocmV3IGV4Y2VwdGlvbiBTZWN1cml0eUVycm9y
OiBCbG9ja2VkIGEgZnJhbWUgd2l0aCBvcmlnaW4gImh0dHA6Ly8xMjcuMC4wLjE6ODAwMCIgZnJv
bSBhY2Nlc3NpbmcgYSBjcm9zcy1vcmlnaW4gZnJhbWUuIFByb3RvY29scywgZG9tYWlucywgYW5k
IHBvcnRzIG11c3QgbWF0Y2guLgogUEFTUzogc3VjY2Vzc2Z1bGx5UGFyc2VkIHNob3VsZCBiZSAn
dHJ1ZScgYW5kIGlzLgogCiBURVNUIENPTVBMRVRFCkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rl
c3RzL3NlY3VyaXR5L2Nyb3NzLWZyYW1lLWFjY2Vzcy1vYmplY3QtZ2V0UHJvdG90eXBlT2YtaW4t
cHV0Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS9j
cm9zcy1mcmFtZS1hY2Nlc3Mtb2JqZWN0LWdldFByb3RvdHlwZU9mLWluLXB1dC5odG1sCShyZXZp
c2lvbiAyNzE1ODApCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L2Nyb3NzLWZy
YW1lLWFjY2Vzcy1vYmplY3QtZ2V0UHJvdG90eXBlT2YtaW4tcHV0Lmh0bWwJKHdvcmtpbmcgY29w
eSkKQEAgLTE1LDcgKzE1LDcgQEAKICAgICAgICAgZG9UZXN0ID0gZnVuY3Rpb24oKQogICAgICAg
ICB7CiAgICAgICAgICAgICB0YXJnZXRXaW5kb3cgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgi
dGFyZ2V0IikuY29udGVudFdpbmRvdzsKLSAgICAgICAgICAgIHZhciBhcnJheSA9IFtdOworICAg
ICAgICAgICAgYXJyYXkgPSBbXTsKICAgICAgICAgICAgIGFycmF5Ll9fcHJvdG9fXy5fX3Byb3Rv
X18gPSB0YXJnZXRXaW5kb3c7CiAgICAgICAgICAgICBhcnJheVswXSA9IDExLjExOwogICAgICAg
ICAgICAgYXJyYXlbMl0gPSAyMi4yMjsKQEAgLTI0LDExICsyNCwxNSBAQAogICAgICAgICAgICAg
ICAgICAgICB0ZXN0RmFpbGVkKCJ0b1N0cmluZyBpcyBjYWxsZWQgYnkgMTAxMDEwMTAgc2V0dGVy
Iik7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfTsKLSAgICAgICAgICAgIGFycmF5
WyJjb2NvYSJdID0geworICAgICAgICAgICAgY29jb2FWYWx1ZSA9IHsKICAgICAgICAgICAgICAg
ICB0b1N0cmluZygpIHsKICAgICAgICAgICAgICAgICAgICAgdGVzdEZhaWxlZCgidG9TdHJpbmcg
aXMgY2FsbGVkIGJ5IGNvY29hIHNldHRlciIpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIH07CisgICAgICAgICAgICBzaG91bGRUaHJvd0Vycm9yTmFtZSgiYXJyYXkuY29jb2EgPSBj
b2NvYVZhbHVlIiwgIlNlY3VyaXR5RXJyb3IiKTsKKworICAgICAgICAgICAgT2JqZWN0LnNldFBy
b3RvdHlwZU9mKFN0cmluZy5wcm90b3R5cGUsIHRhcmdldFdpbmRvdyk7CisgICAgICAgICAgICBz
aG91bGRUaHJvd0Vycm9yTmFtZSgiJ3N0cicuY29jb2EgPSBjb2NvYVZhbHVlIiwgIlNlY3VyaXR5
RXJyb3IiKTsKICAgICAgICAgICAgIGZpbmlzaEpTVGVzdCgpOwogICAgICAgICB9CiAgICAgPC9z
Y3JpcHQ+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>418648</attachid>
            <date>2021-01-28 08:45:37 -0800</date>
            <delta_ts>2021-01-28 09:40:06 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>bug-217916-20210128184535.patch</filename>
            <type>text/plain</type>
            <size>203667</size>
            <attacher name="Alexey Shvayka">ashvayka</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyNzIwMTQpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDM5IEBACisyMDIxLTAxLTI4ICBBbGV4ZXkgU2h2YXlrYSAgPHNodmFpa2FsZXNo
QGdtYWlsLmNvbT4KKworICAgICAgICBJbnRyb2R1Y2UgT3ZlcnJpZGVzUHV0W0J5SW5kZXhdIHR5
cGUgaW5mbyBmbGFncworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjE3OTE2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiBtaWNyb2JlbmNobWFya3MvcHV0LXNsb3ctbm8tY2FjaGUtYXJyYXkuanM6IEFkZGVk
LgorICAgICAgICAqIG1pY3JvYmVuY2htYXJrcy9wdXQtc2xvdy1uby1jYWNoZS1mdW5jdGlvbi5q
czogQWRkZWQuCisgICAgICAgIChmbik6CisgICAgICAgICogbWljcm9iZW5jaG1hcmtzL3B1dC1z
bG93LW5vLWNhY2hlLWpzLXByb3h5LmpzOiBBZGRlZC4KKyAgICAgICAgKHByb3h5LnZtLmNyZWF0
ZVByb3h5LnNldCBmb28pOgorICAgICAgICAqIG1pY3JvYmVuY2htYXJrcy9wdXQtc2xvdy1uby1j
YWNoZS1sb25nLXByb3RvdHlwZS1jaGFpbi5qczogQWRkZWQuCisgICAgICAgIChiYXNlLnNldCBm
b28pOgorICAgICAgICAqIG1pY3JvYmVuY2htYXJrcy9wdXQtc2xvdy1uby1jYWNoZS5qczogQWRk
ZWQuCisgICAgICAgIChiYXNlLnNldCBmb28pOgorICAgICAgICAqIG1pY3JvYmVuY2htYXJrcy9y
ZWZsZWN0LXNldC13aXRoLXJlY2VpdmVyLmpzOiBBZGRlZC4KKyAgICAgICAgKHRhcmdldC5uZXcp
OgorICAgICAgICAqIHN0cmVzcy9jdXN0b20tZ2V0LXNldC1wcm90by1jaGFpbi1wdXQuanM6Cisg
ICAgICAgIChnZXRPYmplY3RzKToKKyAgICAgICAgKGxldC5iYXNlLm9mLmdldEJhc2VzKToKKyAg
ICAgICAgKiBzdHJlc3MvbW9kdWxlLW5hbWVzcGFjZS1hY2Nlc3Mtc2V0LWZhaWxzLmpzOiBBZGRl
ZC4KKyAgICAgICAgKGFzc2VydCk6CisgICAgICAgICh0ZXN0RGlyZWN0U2V0KToKKyAgICAgICAg
KiBzdHJlc3MvcmVmbGVjdC1zZXQuanM6CisgICAgICAgIChzZXQgZ2V0IFVpbnQ4QXJyYXkpOgor
ICAgICAgICAqIHN0cmVzcy9yZWdyZXNzLTIxNzkxNi5qczogQWRkZWQuCisgICAgICAgIChzaG91
bGRCZSk6CisgICAgICAgIChzaG91bGRUaHJvdyk6CisgICAgICAgIChPYmplY3QucHJldmVudEV4
dGVuc2lvbnMpOgorICAgICAgICAodGVzdFN0YXRpY0N1c3RvbUFjY2Vzc29yKToKKyAgICAgICAg
KHRlc3RTdGF0aWNDdXN0b21WYWx1ZSk6CisgICAgICAgICogc3RyZXNzL3R5cGVkLWFycmF5LWNh
bm9uaWNhbC1udW1lcmljLWluZGV4LXN0cmluZy1zZXQuanM6IEFkZGVkLgorICAgICAgICAoYXNz
ZXJ0KToKKyAgICAgICAgKGNvbnN0LlR5cGVkQXJyYXkub2YuVHlwZWRBcnJheXMuY29uc3Qua2V5
Lm9mLmNhbm9uaWNhbE51bWVyaWNJbmRleFN0cmluZ3Muc2V0IHRocm93KToKKwogMjAyMS0wMS0y
NyAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29tPgogCiAgICAgICAgIFtKU0NdIFVw
ZGF0ZSB0ZXN0MjYyCkluZGV4OiBKU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9wdXQtc2xvdy1uby1j
YWNoZS1hcnJheS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9wdXQt
c2xvdy1uby1jYWNoZS1hcnJheS5qcwkobm9uZXhpc3RlbnQpCisrKyBKU1Rlc3RzL21pY3JvYmVu
Y2htYXJrcy9wdXQtc2xvdy1uby1jYWNoZS1hcnJheS5qcwkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDYgQEAKKyhmdW5jdGlvbigpIHsKKyAgICB2YXIgYXJyYXkgPSBbXTsKKworICAgIGZvciAo
dmFyIGogPSAwOyBqIDwgMWU1OyBqKyspCisgICAgICAgIGFycmF5WyJmb28iICsgal0gPSBqOwor
fSkoKTsKSW5kZXg6IEpTVGVzdHMvbWljcm9iZW5jaG1hcmtzL3B1dC1zbG93LW5vLWNhY2hlLWZ1
bmN0aW9uLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvbWljcm9iZW5jaG1hcmtzL3B1dC1zbG93
LW5vLWNhY2hlLWZ1bmN0aW9uLmpzCShub25leGlzdGVudCkKKysrIEpTVGVzdHMvbWljcm9iZW5j
aG1hcmtzL3B1dC1zbG93LW5vLWNhY2hlLWZ1bmN0aW9uLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNiBAQAorKGZ1bmN0aW9uKCkgeworICAgIHZhciBmbiA9IGZ1bmN0aW9uKCkge307CisK
KyAgICBmb3IgKHZhciBqID0gMDsgaiA8IDFlNTsgaisrKQorICAgICAgICBmblsiZm9vIiArIGpd
ID0gajsKK30pKCk7CkluZGV4OiBKU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9wdXQtc2xvdy1uby1j
YWNoZS1qcy1wcm94eS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9w
dXQtc2xvdy1uby1jYWNoZS1qcy1wcm94eS5qcwkobm9uZXhpc3RlbnQpCisrKyBKU1Rlc3RzL21p
Y3JvYmVuY2htYXJrcy9wdXQtc2xvdy1uby1jYWNoZS1qcy1wcm94eS5qcwkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDYgQEAKKyhmdW5jdGlvbigpIHsKKyAgICB2YXIgcHJveHkgPSAkdm0uY3Jl
YXRlUHJveHkoeyBzZXQgZm9vKF92KSB7fSB9KTsKKworICAgIGZvciAodmFyIGogPSAwOyBqIDwg
MWU1OyBqKyspCisgICAgICAgIHByb3h5WyJmb28iICsgal0gPSBqOworfSkoKTsKSW5kZXg6IEpT
VGVzdHMvbWljcm9iZW5jaG1hcmtzL3B1dC1zbG93LW5vLWNhY2hlLWxvbmctcHJvdG90eXBlLWNo
YWluLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvbWljcm9iZW5jaG1hcmtzL3B1dC1zbG93LW5v
LWNhY2hlLWxvbmctcHJvdG90eXBlLWNoYWluLmpzCShub25leGlzdGVudCkKKysrIEpTVGVzdHMv
bWljcm9iZW5jaG1hcmtzL3B1dC1zbG93LW5vLWNhY2hlLWxvbmctcHJvdG90eXBlLWNoYWluLmpz
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOCBAQAorKGZ1bmN0aW9uKCkgeworICAgIHZhciBi
YXNlID0geyBzZXQgZm9vKF92KSB7fSB9OworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMWUzOyBp
KyspCisgICAgICAgIGJhc2UgPSBPYmplY3QuY3JlYXRlKGJhc2UpOworCisgICAgZm9yICh2YXIg
aiA9IDA7IGogPCAzZTM7IGorKykKKyAgICAgICAgYmFzZVsiZm9vIiArIGpdID0gajsKK30pKCk7
CkluZGV4OiBKU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9wdXQtc2xvdy1uby1jYWNoZS5qcwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBKU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9wdXQtc2xvdy1uby1jYWNoZS5qcwko
bm9uZXhpc3RlbnQpCisrKyBKU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9wdXQtc2xvdy1uby1jYWNo
ZS5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYgQEAKKyhmdW5jdGlvbigpIHsKKyAgICB2
YXIgYmFzZSA9IHsgc2V0IGZvbyhfdikge30gfTsKKworICAgIGZvciAodmFyIGogPSAwOyBqIDwg
MWU1OyBqKyspCisgICAgICAgIGJhc2VbImZvbyIgKyBqXSA9IGo7Cit9KSgpOwpJbmRleDogSlNU
ZXN0cy9taWNyb2JlbmNobWFya3MvcmVmbGVjdC1zZXQtd2l0aC1yZWNlaXZlci5qcwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBKU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9yZWZsZWN0LXNldC13aXRoLXJlY2VpdmVy
LmpzCShub25leGlzdGVudCkKKysrIEpTVGVzdHMvbWljcm9iZW5jaG1hcmtzL3JlZmxlY3Qtc2V0
LXdpdGgtcmVjZWl2ZXIuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2IEBACisoZnVuY3Rp
b24oKSB7CisgICAgdmFyIHRhcmdldCA9IG5ldyBmdW5jdGlvbigpIHt9OworCisgICAgZm9yICh2
YXIgaSA9IDA7IGkgPCAxZTY7IGkrKykKKyAgICAgICAgUmVmbGVjdC5zZXQodGFyZ2V0LCAiZm9v
IiwgMSwge30pOworfSkoKTsKSW5kZXg6IEpTVGVzdHMvc3RyZXNzL2N1c3RvbS1nZXQtc2V0LXBy
b3RvLWNoYWluLXB1dC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0cmVzcy9jdXN0b20tZ2V0
LXNldC1wcm90by1jaGFpbi1wdXQuanMJKHJldmlzaW9uIDI3MTk3NSkKKysrIEpTVGVzdHMvc3Ry
ZXNzL2N1c3RvbS1nZXQtc2V0LXByb3RvLWNoYWluLXB1dC5qcwkod29ya2luZyBjb3B5KQpAQCAt
MzcsOCArMzcsOCBAQCBmdW5jdGlvbiBnZXRPYmplY3RzKCkgewogICAgICAgICAuLi5wcmltaXRp
dmVzLm1hcChPYmplY3QpLAogICAgICAgICBPYmplY3QuY3JlYXRlKGN1c3RvbVRlc3RHZXR0ZXJT
ZXR0ZXIpLAogICAgICAgICBPYmplY3QuY3JlYXRlKE9iamVjdC5jcmVhdGUoY3VzdG9tVGVzdEdl
dHRlclNldHRlcikpLAotICAgICAgICAvLyBGSVhNRTogb3JkaW5hcnlTZXRTbG93KCkgc2hvdWxk
IGhhbmRsZSBDdXN0b217QWNjZXNzb3IsVmFsdWV9IGRlc2NyaXB0b3JzLgotICAgICAgICAvLyBu
ZXcgUHJveHkoY3VzdG9tVGVzdEdldHRlclNldHRlciwge30pLAorICAgICAgICBPYmplY3QuY3Jl
YXRlKG5ldyBQcm94eShjdXN0b21UZXN0R2V0dGVyU2V0dGVyLCB7fSkpLAorICAgICAgICBPYmpl
Y3QuY3JlYXRlKCR2bS5jcmVhdGVQcm94eShjdXN0b21UZXN0R2V0dGVyU2V0dGVyKSksCiAgICAg
XTsKIH0KIApAQCAtOTEsNyArOTEsNyBAQCBmdW5jdGlvbiBnZXRCYXNlcygpIHsKICAgICAgICAg
ICAgIGJhc2UuY3VzdG9tVmFsdWUgPSAxOwogICAgICAgICAvLyBUaGlzIGlzIHdlaXJkLCBidXQg
aXQgaXNuJ3QgZXhwb3NlZCB0byB1c2VybGFuZCBjb2RlOgogICAgICAgICBhc3NlcnQoIWJhc2Uu
aGFzT3duUHJvcGVydHkoImN1c3RvbVZhbHVlIikpOwotICAgICAgICBhc3NlcnQoIVJlZmxlY3Qu
c2V0KE9iamVjdChiYXNlKSwgImN1c3RvbVZhbHVlIiwgMSkpOworICAgICAgICBhc3NlcnQoUmVm
bGVjdC5zZXQoT2JqZWN0KGJhc2UpLCAiY3VzdG9tVmFsdWUiLCAxKSk7CiAgICAgfQogfSkoKTsK
IApJbmRleDogSlNUZXN0cy9zdHJlc3MvbW9kdWxlLW5hbWVzcGFjZS1hY2Nlc3Mtc2V0LWZhaWxz
LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvc3RyZXNzL21vZHVsZS1uYW1lc3BhY2UtYWNjZXNz
LXNldC1mYWlscy5qcwkobm9uZXhpc3RlbnQpCisrKyBKU1Rlc3RzL3N0cmVzcy9tb2R1bGUtbmFt
ZXNwYWNlLWFjY2Vzcy1zZXQtZmFpbHMuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4MyBA
QAorY29uc3QgZXhpc3RpbmdLZXlzID0gWyJjb2NvYSIsICJ0ZXN0IiwgU3ltYm9sLnRvU3RyaW5n
VGFnXTsKK2NvbnN0IG5vbkV4aXN0aW5nS2V5cyA9IFsiZm9vIiwgU3ltYm9sKCJmb28iKV07Citj
b25zdCBhbGxLZXlzID0gWy4uLmV4aXN0aW5nS2V5cywgLi4ubm9uRXhpc3RpbmdLZXlzXTsKKwor
ZnVuY3Rpb24gYXNzZXJ0KHgsIGtleSkgeworICAgIGlmICgheCkKKyAgICAgICAgdGhyb3cgbmV3
IEVycm9yKGBCYWQgYXNzZXJ0aW9uISBLZXk6ICR7U3RyaW5nKGtleSl9YCk7Cit9CisKK2Z1bmN0
aW9uIHNob3VsZFRocm93KGZ1bmMsIGVycm9yTWVzc2FnZSkgeworICAgIHZhciBlcnJvclRocm93
biA9IGZhbHNlOworICAgIHRyeSB7CisgICAgICAgIGZ1bmMoKTsKKyAgICB9IGNhdGNoIChlcnJv
cikgeworICAgICAgICBlcnJvclRocm93biA9IHRydWU7CisgICAgICAgIGlmIChTdHJpbmcoZXJy
b3IpICE9PSBlcnJvck1lc3NhZ2UpCisgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEJhZCBl
cnJvcjogJHtlcnJvcn1gKTsKKyAgICB9CisgICAgaWYgKCFlcnJvclRocm93bikKKyAgICAgICAg
dGhyb3cgbmV3IEVycm9yKCJEaWRuJ3QgdGhyb3chIik7Cit9CisKK2Z1bmN0aW9uIHRlc3REaXJl
Y3RTZXQobnMpIHsKKyAgICBmb3IgKGNvbnN0IGtleSBvZiBhbGxLZXlzKSB7CisgICAgICAgIGNv
bnN0IG5ld1ZhbHVlID0ge307CisKKyAgICAgICAgbnNba2V5XSA9IG5ld1ZhbHVlOworICAgICAg
ICBhc3NlcnQobnNba2V5XSAhPT0gbmV3VmFsdWUsIGtleSk7CisKKyAgICAgICAgc2hvdWxkVGhy
b3coKCkgPT4geyAidXNlIHN0cmljdCI7IG5zW2tleV0gPSBuZXdWYWx1ZTsgfSwgIlR5cGVFcnJv
cjogQXR0ZW1wdGVkIHRvIGFzc2lnbiB0byByZWFkb25seSBwcm9wZXJ0eS4iKTsKKyAgICAgICAg
YXNzZXJ0KG5zW2tleV0gIT09IG5ld1ZhbHVlLCBrZXkpOworICAgIH0KK30KKworZnVuY3Rpb24g
dGVzdFByb3RvdHlwZUNoYWluU2V0KG5zKSB7CisgICAgZm9yIChjb25zdCBrZXkgb2YgYWxsS2V5
cykgeworICAgICAgICBjb25zdCBoZWlyID0gT2JqZWN0LmNyZWF0ZShucyk7CisKKyAgICAgICAg
aGVpcltrZXldID0ge307CisgICAgICAgIGFzc2VydChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNj
cmlwdG9yKGhlaXIsIGtleSkgPT09IHVuZGVmaW5lZCwga2V5KTsKKworICAgICAgICBzaG91bGRU
aHJvdygoKSA9PiB7ICJ1c2Ugc3RyaWN0IjsgaGVpcltrZXldID0ge307IH0sICJUeXBlRXJyb3I6
IEF0dGVtcHRlZCB0byBhc3NpZ24gdG8gcmVhZG9ubHkgcHJvcGVydHkuIik7CisgICAgICAgIGFz
c2VydChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGhlaXIsIGtleSkgPT09IHVuZGVm
aW5lZCwga2V5KTsKKyAgICB9Cit9CisKK2Z1bmN0aW9uIHRlc3RSZWZsZWN0U2V0KG5zKSB7Cisg
ICAgInVzZSBzdHJpY3QiOworCisgICAgZm9yIChjb25zdCBleGlzdGluZ0tleSBvZiBleGlzdGlu
Z0tleXMpIHsKKyAgICAgICAgY29uc3Qgb2JqID0ge307CisgICAgICAgIGNvbnN0IG5ld1ZhbHVl
ID0ge307CisKKyAgICAgICAgYXNzZXJ0KFJlZmxlY3Quc2V0KG5zLCBleGlzdGluZ0tleSwgbmV3
VmFsdWUpID09PSBmYWxzZSwgZXhpc3RpbmdLZXkpOworICAgICAgICBhc3NlcnQoUmVmbGVjdC5z
ZXQob2JqLCBleGlzdGluZ0tleSwgbmV3VmFsdWUsIG5zKSA9PT0gZmFsc2UsIGV4aXN0aW5nS2V5
KTsKKworICAgICAgICBjb25zdCBpc1dyaXRhYmxlID0gZXhpc3RpbmdLZXkgIT09IFN5bWJvbC50
b1N0cmluZ1RhZzsKKyAgICAgICAgYXNzZXJ0KFJlZmxlY3Quc2V0KG9iaiwgZXhpc3RpbmdLZXks
IG5zW2V4aXN0aW5nS2V5XSwgbnMpID09PSBpc1dyaXRhYmxlLCBleGlzdGluZ0tleSk7CisKKyAg
ICAgICAgYXNzZXJ0KG5zW2V4aXN0aW5nS2V5XSAhPT0gbmV3VmFsdWUsIGV4aXN0aW5nS2V5KTsK
KyAgICAgICAgYXNzZXJ0KG9ialtleGlzdGluZ0tleV0gPT09IHVuZGVmaW5lZCwgZXhpc3RpbmdL
ZXkpOworICAgIH0KKworICAgIGZvciAoY29uc3Qgbm9uRXhpc3RpbmdLZXkgb2Ygbm9uRXhpc3Rp
bmdLZXlzKSB7CisgICAgICAgIGFzc2VydChSZWZsZWN0LnNldChucywgbm9uRXhpc3RpbmdLZXks
IHt9KSA9PT0gZmFsc2UsIG5vbkV4aXN0aW5nS2V5KTsKKyAgICAgICAgYXNzZXJ0KG5zW25vbkV4
aXN0aW5nS2V5XSA9PT0gdW5kZWZpbmVkLCBub25FeGlzdGluZ0tleSk7CisKKyAgICAgICAgY29u
c3Qgb2JqID0ge307CisgICAgICAgIGFzc2VydChSZWZsZWN0LnNldChvYmosIG5vbkV4aXN0aW5n
S2V5LCB7fSwgbnMpID09PSBmYWxzZSwgbm9uRXhpc3RpbmdLZXkpOworICAgICAgICBhc3NlcnQo
b2JqW25vbkV4aXN0aW5nS2V5XSA9PT0gdW5kZWZpbmVkLCBub25FeGlzdGluZ0tleSk7CisgICAg
fQorfQorCitpbXBvcnQoIi4vcmVzb3VyY2VzL21vZHVsZS1uYW1lc3BhY2UtYWNjZXNzLmpzIiku
dGhlbihucyA9PiB7CisgICAgdGVzdERpcmVjdFNldChucyk7CisgICAgdGVzdFByb3RvdHlwZUNo
YWluU2V0KG5zKTsKKyAgICB0ZXN0UmVmbGVjdFNldChucyk7Cit9KS5jYXRjaChlcnIgPT4gewor
ICAgIHByaW50KGAhISEgJHtlcnJ9XG4ke2Vyci5zdGFja31gKTsKKyAgICAkdm0uYWJvcnQoKTsK
K30pOworCitkcmFpbk1pY3JvdGFza3MoKTsKSW5kZXg6IEpTVGVzdHMvc3RyZXNzL3JlZmxlY3Qt
c2V0LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvc3RyZXNzL3JlZmxlY3Qtc2V0LmpzCShyZXZp
c2lvbiAyNzE5NzUpCisrKyBKU1Rlc3RzL3N0cmVzcy9yZWZsZWN0LXNldC5qcwkod29ya2luZyBj
b3B5KQpAQCAtNjk2LDYgKzY5NiwxMiBAQCB2YXIgc3ltYm9sID0gU3ltYm9sKCk7CiAgICAgICAg
IHRyYW5zZmVyQXJyYXlCdWZmZXIob2JqZWN0LmJ1ZmZlcik7CiAgICAgICAgIHNob3VsZEJlKFJl
ZmxlY3Quc2V0KG9iamVjdCwgMCwgNDIpLCB0cnVlKTsKICAgICAgICAgc2hvdWxkQmUoUmVmbGVj
dC5nZXQob2JqZWN0LCAwKSwgdW5kZWZpbmVkKTsKKworICAgICAgICB2YXIgcmVjZWl2ZXIgPSBu
ZXcgVHlwZWRBcnJheSg0KTsKKyAgICAgICAgdmFyIHRhcmdldCA9IHt9OworICAgICAgICBzaG91
bGRCZShSZWZsZWN0LnNldCh0YXJnZXQsICIwLjUiLCA0MiwgcmVjZWl2ZXIpLCBmYWxzZSk7Cisg
ICAgICAgIHNob3VsZEJlKFJlZmxlY3QuZ2V0KHRhcmdldCwgIjAuNSIpLCB1bmRlZmluZWQpOwor
ICAgICAgICBzaG91bGRCZShSZWZsZWN0LmdldChyZWNlaXZlciwgIjAuNSIpLCB1bmRlZmluZWQp
OwogICAgIH07CiB9KSgpKTsKIApJbmRleDogSlNUZXN0cy9zdHJlc3MvcmVncmVzcy0yMTc5MTYu
anMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3MvcmVncmVzcy0yMTc5MTYuanMJKG5vbmV4
aXN0ZW50KQorKysgSlNUZXN0cy9zdHJlc3MvcmVncmVzcy0yMTc5MTYuanMJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw3MCBAQAorInVzZSBzdHJpY3QiOworCitmdW5jdGlvbiBzaG91bGRCZShh
Y3R1YWwsIGV4cGVjdGVkKSB7CisgICAgaWYgKGFjdHVhbCAhPT0gZXhwZWN0ZWQpCisgICAgICAg
IHRocm93IG5ldyBFcnJvcihgQmFkIHZhbHVlOiAke2FjdHVhbH0hYCk7Cit9CisKK2Z1bmN0aW9u
IHNob3VsZFRocm93KGZ1bmMsIGVycm9yTWVzc2FnZSkgeworICAgIHZhciBlcnJvclRocm93biA9
IGZhbHNlOworICAgIHRyeSB7CisgICAgICAgIGZ1bmMoKTsKKyAgICB9IGNhdGNoIChlcnJvcikg
eworICAgICAgICBlcnJvclRocm93biA9IHRydWU7CisgICAgICAgIGlmIChTdHJpbmcoZXJyb3Ip
ICE9PSBlcnJvck1lc3NhZ2UpCisgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEJhZCBlcnJv
cjogJHtlcnJvcn1gKTsKKyAgICB9CisgICAgaWYgKCFlcnJvclRocm93bikKKyAgICAgICAgdGhy
b3cgbmV3IEVycm9yKCJEaWRuJ3QgdGhyb3chIik7Cit9CisKK3Nob3VsZFRocm93KCgpID0+IHsg
T2JqZWN0LnByZXZlbnRFeHRlbnNpb25zKE9iamVjdC5jcmVhdGUoUHJvbWlzZSkpLnJlc29sdmUg
PSAxOyB9LCAiVHlwZUVycm9yOiBBdHRlbXB0ZWQgdG8gYXNzaWduIHRvIHJlYWRvbmx5IHByb3Bl
cnR5LiIpOworc2hvdWxkVGhyb3coKCkgPT4geyBPYmplY3Quc2VhbChuZXcgSW50bC5OdW1iZXJG
b3JtYXQoKSkuZm9ybWF0VG9QYXJ0cyA9IDE7IH0sICJUeXBlRXJyb3I6IEF0dGVtcHRlZCB0byBh
c3NpZ24gdG8gcmVhZG9ubHkgcHJvcGVydHkuIik7CitzaG91bGRUaHJvdygoKSA9PiB7IE9iamVj
dC5mcmVlemUobmV3IFN0cmluZygpKS5ib2xkID0gMTsgfSwgIlR5cGVFcnJvcjogQXR0ZW1wdGVk
IHRvIGFzc2lnbiB0byByZWFkb25seSBwcm9wZXJ0eS4iKTsKK3Nob3VsZFRocm93KCgpID0+IHsg
T2JqZWN0LnByZXZlbnRFeHRlbnNpb25zKG5ldyBEYXRlKCkpLmdldFVUQ0RheSA9IDE7IH0sICJU
eXBlRXJyb3I6IEF0dGVtcHRlZCB0byBhc3NpZ24gdG8gcmVhZG9ubHkgcHJvcGVydHkuIik7CisK
K3Nob3VsZFRocm93KCgpID0+IHsgT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zKE9iamVjdC5jcmVh
dGUoJHZtLmNyZWF0ZVN0YXRpY0N1c3RvbVZhbHVlKCkpKS50ZXN0U3RhdGljVmFsdWVOb1NldHRl
ciA9IDEgfSwgIlR5cGVFcnJvcjogQXR0ZW1wdGVkIHRvIGFzc2lnbiB0byByZWFkb25seSBwcm9w
ZXJ0eS4iKTsKKworeworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPYmplY3QucHJvdG90eXBl
LCAiZ2V0RGF5Iiwge3dyaXRhYmxlOiBmYWxzZSwgdmFsdWU6IDF9KTsKKyAgICB2YXIgZCA9IG5l
dyBEYXRlOworICAgIGQuZ2V0RGF5ID0gNTU1OworICAgIHNob3VsZEJlKGQuZ2V0RGF5LCA1NTUp
OworfQorCitjb25zdCBwcmltaXRpdmVzID0gW3RydWUsIDEsICIiLCBTeW1ib2woKSwgMW5dOwor
CisoZnVuY3Rpb24gdGVzdFN0YXRpY0N1c3RvbUFjY2Vzc29yKCkgeworICAgIGZvciAoY29uc3Qg
cHJpbWl0aXZlIG9mIHByaW1pdGl2ZXMpIHsKKyAgICAgICAgY29uc3QgcHJpbWl0aXZlUHJvdG90
eXBlID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHByaW1pdGl2ZSk7CisgICAgICAgIGNvbnN0IHN0
YXRpY0N1c3RvbUFjY2Vzc29yID0gJHZtLmNyZWF0ZVN0YXRpY0N1c3RvbUFjY2Vzc29yKCk7Cisg
ICAgICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZihwcmltaXRpdmVQcm90b3R5cGUsIHN0YXRpY0N1
c3RvbUFjY2Vzc29yKTsKKworICAgICAgICBzaG91bGRUaHJvdygoKSA9PiB7IHByaW1pdGl2ZS50
ZXN0U3RhdGljQWNjZXNzb3JSZWFkT25seSA9IDE7IH0sICJUeXBlRXJyb3I6IEF0dGVtcHRlZCB0
byBhc3NpZ24gdG8gcmVhZG9ubHkgcHJvcGVydHkuIik7CisKKyAgICAgICAgZm9yIChsZXQgaSA9
IDA7IGkgPCAxMDAwOyBpKyspIHsKKyAgICAgICAgICAgIHByaW1pdGl2ZS50ZXN0U3RhdGljQWNj
ZXNzb3IgPSBpOworICAgICAgICAgICAgc2hvdWxkQmUocHJpbWl0aXZlUHJvdG90eXBlLnRlc3RG
aWVsZCwgaSk7CisgICAgICAgIH0KKworICAgICAgICBkZWxldGUgcHJpbWl0aXZlUHJvdG90eXBl
LnRlc3RGaWVsZDsKKyAgICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKHByaW1pdGl2ZVByb3Rv
dHlwZSwgT2JqZWN0LnByb3RvdHlwZSk7CisgICAgfQorfSkoKTsKKworKGZ1bmN0aW9uIHRlc3RT
dGF0aWNDdXN0b21WYWx1ZSgpIHsKKyAgICBmb3IgKGNvbnN0IHByaW1pdGl2ZSBvZiBwcmltaXRp
dmVzKSB7CisgICAgICAgIGNvbnN0IHByaW1pdGl2ZVByb3RvdHlwZSA9IE9iamVjdC5nZXRQcm90
b3R5cGVPZihwcmltaXRpdmUpOworICAgICAgICBjb25zdCBzdGF0aWNDdXN0b21WYWx1ZSA9ICR2
bS5jcmVhdGVTdGF0aWNDdXN0b21WYWx1ZSgpOworICAgICAgICBPYmplY3Quc2V0UHJvdG90eXBl
T2YocHJpbWl0aXZlUHJvdG90eXBlLCBzdGF0aWNDdXN0b21WYWx1ZSk7CisKKyAgICAgICAgc2hv
dWxkVGhyb3coKCkgPT4geyBwcmltaXRpdmUudGVzdFN0YXRpY1ZhbHVlTm9TZXR0ZXIgPSAxOyB9
LCAiVHlwZUVycm9yOiBBdHRlbXB0ZWQgdG8gYXNzaWduIHRvIHJlYWRvbmx5IHByb3BlcnR5LiIp
OworICAgICAgICBzaG91bGRUaHJvdygoKSA9PiB7IHByaW1pdGl2ZS50ZXN0U3RhdGljVmFsdWVS
ZWFkT25seSA9IDE7IH0sICJUeXBlRXJyb3I6IEF0dGVtcHRlZCB0byBhc3NpZ24gdG8gcmVhZG9u
bHkgcHJvcGVydHkuIik7CisKKyAgICAgICAgcHJpbWl0aXZlLnRlc3RTdGF0aWNWYWx1ZSA9IDE7
CisgICAgICAgIHNob3VsZEJlKHN0YXRpY0N1c3RvbVZhbHVlLnRlc3RTdGF0aWNWYWx1ZSwgMSk7
CisgICAgICAgIHNob3VsZFRocm93KCgpID0+IHsgcHJpbWl0aXZlLnRlc3RTdGF0aWNWYWx1ZSA9
IDE7IH0sICJUeXBlRXJyb3I6IEF0dGVtcHRlZCB0byBhc3NpZ24gdG8gcmVhZG9ubHkgcHJvcGVy
dHkuIik7CisKKyAgICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKHByaW1pdGl2ZVByb3RvdHlw
ZSwgT2JqZWN0LnByb3RvdHlwZSk7CisgICAgfQorfSkoKTsKSW5kZXg6IEpTVGVzdHMvc3RyZXNz
L3R5cGVkLWFycmF5LWNhbm9uaWNhbC1udW1lcmljLWluZGV4LXN0cmluZy1zZXQuanMKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gSlNUZXN0cy9zdHJlc3MvdHlwZWQtYXJyYXktY2Fub25pY2FsLW51bWVyaWMtaW5k
ZXgtc3RyaW5nLXNldC5qcwkobm9uZXhpc3RlbnQpCisrKyBKU1Rlc3RzL3N0cmVzcy90eXBlZC1h
cnJheS1jYW5vbmljYWwtbnVtZXJpYy1pbmRleC1zdHJpbmctc2V0LmpzCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMzUgQEAKKyJ1c2Ugc3RyaWN0IjsKK2NvbnN0IFR5cGVkQXJyYXlzID0gW1Vp
bnQ4Q2xhbXBlZEFycmF5LCBVaW50OEFycmF5LCBVaW50MTZBcnJheSwgVWludDMyQXJyYXksIElu
dDhBcnJheSwgSW50MTZBcnJheSwgSW50MzJBcnJheSwgRmxvYXQzMkFycmF5LCBGbG9hdDY0QXJy
YXldOworY29uc3QgY2Fub25pY2FsTnVtZXJpY0luZGV4U3RyaW5ncyA9IFsnLTAnLCAnLTEnLCAn
LTMuMTQnLCAnSW5maW5pdHknLCAnLUluZmluaXR5JywgJ05hTicsICcwLjEnLCAnNDI5NDk2NzI5
NScsICc0Mjk0OTY3Mjk2J107CisKK2Z1bmN0aW9uIGFzc2VydCh4LCBrZXkpIHsKKyAgICBpZiAo
IXgpCisgICAgICAgIHRocm93IG5ldyBFcnJvcihgQmFkIGFzc2VydGlvbiEgS2V5OiAke1N0cmlu
ZyhrZXkpfWApOworfQorCitmb3IgKGNvbnN0IFR5cGVkQXJyYXkgb2YgVHlwZWRBcnJheXMpIHsK
KyAgICBmb3IgKGNvbnN0IGtleSBvZiBjYW5vbmljYWxOdW1lcmljSW5kZXhTdHJpbmdzKSB7Cisg
ICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUeXBlZEFycmF5LnByb3RvdHlwZSwga2V5LCB7
CisgICAgICAgICAgICBzZXQoKSB7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAk
e1R5cGVkQXJyYXkubmFtZX0ucHJvdG90eXBlWyR7a2V5fV0gc2V0dGVyIHNob3VsZCBiZSB1bnJl
YWNoYWJsZSFgKTsKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICBjb25maWd1cmFibGU6IHRy
dWUsCisgICAgICAgIH0pOworCisgICAgICAgIGNvbnN0IGFzc2VydFByb3RvdHlwZUtleUlzSWdu
b3JlZCA9ICgpID0+IHsKKyAgICAgICAgICAgIGNvbnN0IHRBID0gbmV3IFR5cGVkQXJyYXk7Cisg
ICAgICAgICAgICB0QVtrZXldID0gMTsKKyAgICAgICAgICAgIGFzc2VydCghdEEuaGFzT3duUHJv
cGVydHkoa2V5KSwga2V5KTsKKworICAgICAgICAgICAgY29uc3QgaGVpciA9IE9iamVjdC5jcmVh
dGUobmV3IFR5cGVkQXJyYXkpOworICAgICAgICAgICAgaGVpcltrZXldID0gMjsKKyAgICAgICAg
ICAgIGFzc2VydCghaGVpci5oYXNPd25Qcm9wZXJ0eShrZXkpLCBrZXkpOworICAgICAgICB9Owor
ICAgICAgICBhc3NlcnRQcm90b3R5cGVLZXlJc0lnbm9yZWQoKTsKKworICAgICAgICBPYmplY3Qu
ZGVmaW5lUHJvcGVydHkoVHlwZWRBcnJheS5wcm90b3R5cGUsIGtleSwge3dyaXRhYmxlOiBmYWxz
ZX0pOworICAgICAgICBhc3NlcnRQcm90b3R5cGVLZXlJc0lnbm9yZWQoKTsKKworICAgICAgICBh
c3NlcnQoZGVsZXRlIFR5cGVkQXJyYXkucHJvdG90eXBlW2tleV0sIGtleSk7CisgICAgfQorfQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNzE5NzUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTUzIEBA
CisyMDIxLTAxLTI4ICBBbGV4ZXkgU2h2YXlrYSAgPHNodmFpa2FsZXNoQGdtYWlsLmNvbT4KKwor
ICAgICAgICBJbnRyb2R1Y2UgT3ZlcnJpZGVzUHV0W0J5SW5kZXhdIHR5cGUgaW5mbyBmbGFncwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE3OTE2CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBBUEkvSlND
YWxsYmFja09iamVjdC5oOgorICAgICAgICAqIEFQSS9KU0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25z
Lmg6CisgICAgICAgIChKU0M6OkpTQ2FsbGJhY2tPYmplY3Q8UGFyZW50Pjo6cHV0KToKKyAgICAg
ICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGRlYnVnZ2VyL0RlYnVnZ2VyU2NvcGUuY3BwOgor
ICAgICAgICAoSlNDOjpEZWJ1Z2dlclNjb3BlOjpkZWZpbmVPd25Qcm9wZXJ0eVZpYVB1dCk6Cisg
ICAgICAgIChKU0M6OkRlYnVnZ2VyU2NvcGU6OnB1dCk6IERlbGV0ZWQuCisgICAgICAgICogZGVi
dWdnZXIvRGVidWdnZXJTY29wZS5oOgorICAgICAgICAqIHJ1bnRpbWUvQ2xhc3NJbmZvLmg6Cisg
ICAgICAgICogcnVudGltZS9DbG9uZWRBcmd1bWVudHMuY3BwOgorICAgICAgICAoSlNDOjpDbG9u
ZWRBcmd1bWVudHM6OmRlZmluZU93blByb3BlcnR5VmlhUHV0KToKKyAgICAgICAgKEpTQzo6Q2xv
bmVkQXJndW1lbnRzOjpwdXQpOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvQ2xvbmVkQXJn
dW1lbnRzLmg6CisgICAgICAgICogcnVudGltZS9DdXN0b21HZXR0ZXJTZXR0ZXIuY3BwOgorICAg
ICAgICAoSlNDOjpjYWxsQ3VzdG9tU2V0dGVyKTogRGVsZXRlZC4KKyAgICAgICAgKiBydW50aW1l
L0N1c3RvbUdldHRlclNldHRlci5oOgorICAgICAgICAqIHJ1bnRpbWUvRXJyb3JDb25zdHJ1Y3Rv
ci5jcHA6CisgICAgICAgIChKU0M6OkVycm9yQ29uc3RydWN0b3I6OmRlZmluZU93blByb3BlcnR5
VmlhUHV0KToKKyAgICAgICAgKEpTQzo6RXJyb3JDb25zdHJ1Y3Rvcjo6cHV0KTogRGVsZXRlZC4K
KyAgICAgICAgKiBydW50aW1lL0Vycm9yQ29uc3RydWN0b3IuaDoKKyAgICAgICAgKiBydW50aW1l
L0Vycm9ySW5zdGFuY2UuY3BwOgorICAgICAgICAoSlNDOjpFcnJvckluc3RhbmNlOjpkZWZpbmVP
d25Qcm9wZXJ0eVZpYVB1dCk6CisgICAgICAgIChKU0M6OkVycm9ySW5zdGFuY2U6OnB1dCk6IERl
bGV0ZWQuCisgICAgICAgICogcnVudGltZS9FcnJvckluc3RhbmNlLmg6CisgICAgICAgICogcnVu
dGltZS9HZW5lcmljQXJndW1lbnRzLmg6CisgICAgICAgICogcnVudGltZS9HZW5lcmljQXJndW1l
bnRzSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpHZW5lcmljQXJndW1lbnRzPFR5cGU+OjpkZWZp
bmVPd25Qcm9wZXJ0eVZpYVB1dCk6CisgICAgICAgIChKU0M6OkdlbmVyaWNBcmd1bWVudHM8VHlw
ZT46OnB1dCk6IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9HZXR0ZXJTZXR0ZXIuaDoKKyAg
ICAgICAgKiBydW50aW1lL0pTQXJyYXkuY3BwOgorICAgICAgICAoSlNDOjpKU0FycmF5OjpkZWZp
bmVPd25Qcm9wZXJ0eVZpYVB1dCk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OnB1dCk6IERlbGV0
ZWQuCisgICAgICAgICogcnVudGltZS9KU0FycmF5Lmg6CisgICAgICAgICogcnVudGltZS9KU0Fy
cmF5QnVmZmVyVmlldy5jcHA6CisgICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXJWaWV3OjpwdXQp
OiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuaDoKKyAgICAg
ICAgKiBydW50aW1lL0pTQ0pTVmFsdWUuY3BwOgorICAgICAgICAoSlNDOjpKU1ZhbHVlOjpwdXRU
b1ByaW1pdGl2ZSk6CisgICAgICAgICogcnVudGltZS9KU0NlbGwuY3BwOgorICAgICAgICAoSlND
OjpKU0NlbGw6OmRlZmluZU93blByb3BlcnR5VmlhUHV0KToKKyAgICAgICAgKEpTQzo6SlNDZWxs
Ojpkb1B1dFByb3BlcnR5U2VjdXJpdHlDaGVjayk6IERlbGV0ZWQuCisgICAgICAgICogcnVudGlt
ZS9KU0NlbGwuaDoKKyAgICAgICAgKiBydW50aW1lL0pTQ3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rp
b24uY3BwOgorICAgICAgICAoSlNDOjpKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04pOgorICAgICAg
ICAoSlNDOjpKU0N1c3RvbUdldHRlckZ1bmN0aW9uOjpKU0N1c3RvbUdldHRlckZ1bmN0aW9uKToK
KyAgICAgICAgKEpTQzo6SlNDdXN0b21HZXR0ZXJGdW5jdGlvbjo6Y3JlYXRlKToKKyAgICAgICAg
KEpTQzo6SlNDdXN0b21TZXR0ZXJGdW5jdGlvbjo6SlNDdXN0b21TZXR0ZXJGdW5jdGlvbik6Cisg
ICAgICAgIChKU0M6OkpTQ3VzdG9tU2V0dGVyRnVuY3Rpb246OmNyZWF0ZSk6CisgICAgICAgIChK
U0M6OkpTQ3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rpb246OkpTQ3VzdG9tR2V0dGVyU2V0dGVyRnVu
Y3Rpb24pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpKU0N1c3RvbUdldHRlclNldHRlckZ1bmN0
aW9uOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpKU0N1c3RvbUdldHRlclNldHRl
ckZ1bmN0aW9uOjp2aXNpdENoaWxkcmVuKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SlNDdXN0
b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbjo6ZmluaXNoQ3JlYXRpb24pOiBEZWxldGVkLgorICAgICAg
ICAqIHJ1bnRpbWUvSlNDdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbi5oOgorICAgICAgICAqIHJ1
bnRpbWUvSlNGdW5jdGlvbi5jcHA6CisgICAgICAgIChKU0M6OkpTRnVuY3Rpb246OmRlZmluZU93
blByb3BlcnR5VmlhUHV0KToKKyAgICAgICAgKEpTQzo6SlNGdW5jdGlvbjo6cHV0KTogRGVsZXRl
ZC4KKyAgICAgICAgKiBydW50aW1lL0pTRnVuY3Rpb24uaDoKKyAgICAgICAgKiBydW50aW1lL0pT
R2VuZXJpY1R5cGVkQXJyYXlWaWV3Lmg6CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbExleGlj
YWxFbnZpcm9ubWVudC5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwOgor
ICAgICAgICAoSlNDOjpKU0dsb2JhbE9iamVjdDo6SlNHbG9iYWxPYmplY3QpOgorICAgICAgICAo
SlNDOjpKU0dsb2JhbE9iamVjdDo6aW5pdCk6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0
OjpkZWZpbmVPd25Qcm9wZXJ0eVZpYVB1dCk6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0
Ojp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6OnB1dCk6IERl
bGV0ZWQuCisgICAgICAgICogcnVudGltZS9KU0dsb2JhbE9iamVjdC5oOgorICAgICAgICAoSlND
OjpKU0dsb2JhbE9iamVjdDo6Y3VzdG9tR2V0dGVyRnVuY3Rpb25NYXApOgorICAgICAgICAoSlND
OjpKU0dsb2JhbE9iamVjdDo6Y3VzdG9tU2V0dGVyRnVuY3Rpb25NYXApOgorICAgICAgICAoSlND
OjpKU0dsb2JhbE9iamVjdDo6Y3VzdG9tR2V0dGVyRnVuY3Rpb25TdHJ1Y3R1cmUgY29uc3QpOgor
ICAgICAgICAoSlNDOjpKU0dsb2JhbE9iamVjdDo6Y3VzdG9tU2V0dGVyRnVuY3Rpb25TdHJ1Y3R1
cmUgY29uc3QpOgorICAgICAgICAoSlNDOjpKU0dsb2JhbE9iamVjdDo6Y3VzdG9tR2V0dGVyU2V0
dGVyRnVuY3Rpb25TdHJ1Y3R1cmUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUv
SlNMZXhpY2FsRW52aXJvbm1lbnQuaDoKKyAgICAgICAgKiBydW50aW1lL0pTTW9kdWxlRW52aXJv
bm1lbnQuaDoKKyAgICAgICAgKiBydW50aW1lL0pTTW9kdWxlTmFtZXNwYWNlT2JqZWN0Lmg6Cisg
ICAgICAgICogcnVudGltZS9KU09iamVjdC5jcHA6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpn
ZXRPd25Qcm9wZXJ0eVNsb3QpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cHV0KToKKyAgICAg
ICAgKEpTQzo6SlNPYmplY3Q6OnB1dElubGluZVNsb3cpOgorICAgICAgICAoSlNDOjpKU09iamVj
dDo6cHV0SW5saW5lV2l0aFJlY2VpdmVyQ2hlY2spOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6
ZGVmaW5lT3duUHJvcGVydHlWaWFQdXQpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6ZGVmaW5l
T3duUHJvcGVydHlWaWFQdXRTbG93KToKKyAgICAgICAgKEpTQzo6Z2V0Q3VzdG9tR2V0dGVyRnVu
Y3Rpb24pOgorICAgICAgICAoSlNDOjpnZXRDdXN0b21TZXR0ZXJGdW5jdGlvbik6CisgICAgICAg
IChKU0M6OkpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IpOgorICAgICAgICAoSlND
OjpKU09iamVjdDo6ZG9QdXRQcm9wZXJ0eVNlY3VyaXR5Q2hlY2spOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpnZXRDdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbkZvckdldHRlclNldHRlcik6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpwcm90b3R5cGVDaGFpbk1heUludGVyY2Vw
dFN0b3JlVG8pOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNPYmplY3QuaDoKKyAgICAg
ICAgKEpTQzo6SlNPYmplY3Q6OnB1dEJ5SW5kZXhJbmxpbmUpOgorICAgICAgICAoSlNDOjpKU09i
amVjdDo6ZmlsbEN1c3RvbUdldHRlclByb3BlcnR5U2xvdCk6CisgICAgICAgIChKU0M6OkpTT2Jq
ZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3QpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cHV0RGly
ZWN0KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmRvUHV0UHJvcGVydHlTZWN1cml0eUNoZWNr
KTogRGVsZXRlZC4KKyAgICAgICAgKiBydW50aW1lL0pTT2JqZWN0SW5saW5lcy5oOgorICAgICAg
ICAoSlNDOjpKU09iamVjdDo6Y2FuUGVyZm9ybUZhc3RQdXRJbmxpbmVFeGNsdWRpbmdQcm90byk6
CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpwdXRJbmxpbmVGb3JKU09iamVjdCk6CisgICAgICAg
IChKU0M6OkpTT2JqZWN0OjpkZWZpbmVPd25Qcm9wZXJ0eVZpYVB1dEZhc3QpOgorICAgICAgICAo
SlNDOjpKU09iamVjdDo6cHV0RGlyZWN0SW50ZXJuYWwpOgorICAgICAgICAqIHJ1bnRpbWUvSlNQ
cm94eS5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNUeXBlSW5mby5oOgorICAgICAgICAoSlNDOjpU
eXBlSW5mbzo6b3ZlcnJpZGVzUHV0IGNvbnN0KToKKyAgICAgICAgKEpTQzo6VHlwZUluZm86Omdl
dE93blByb3BlcnR5U2xvdE1heUJlV3JvbmdBYm91dERvbnRFbnVtIGNvbnN0KToKKyAgICAgICAg
KEpTQzo6VHlwZUluZm86Omhhc1B1dFByb3BlcnR5U2VjdXJpdHlDaGVjayBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgICogcnVudGltZS9Mb29rdXAuaDoKKyAgICAgICAgKEpTQzo6Z2V0U3RhdGlj
UHJvcGVydHlTbG90RnJvbVRhYmxlKToKKyAgICAgICAgKEpTQzo6cHV0RW50cnkpOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpsb29rdXBQdXQpOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUv
UHJvcGVydHlTbG90LmNwcDoKKyAgICAgICAgKEpTQzo6UHJvcGVydHlTbG90OjpjdXN0b21BY2Nl
c3NvckdldHRlciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9Qcm9wZXJ0eVNs
b3QuaDoKKyAgICAgICAgKEpTQzo6UHJvcGVydHlTbG90Ojppc0N1c3RvbSBjb25zdCk6CisgICAg
ICAgIChKU0M6OlByb3BlcnR5U2xvdDo6Y3VzdG9tR2V0dGVyIGNvbnN0KToKKyAgICAgICAgKEpT
Qzo6UHJvcGVydHlTbG90OjpjdXN0b21TZXR0ZXIgY29uc3QpOgorICAgICAgICAoSlNDOjpQcm9w
ZXJ0eVNsb3Q6OnNldEN1c3RvbSk6CisgICAgICAgIChKU0M6OlByb3BlcnR5U2xvdDo6c2V0Q2Fj
aGVhYmxlQ3VzdG9tKToKKyAgICAgICAgKEpTQzo6UHJvcGVydHlTbG90OjpnZXRWYWx1ZSBjb25z
dCk6CisgICAgICAgIChKU0M6OlByb3BlcnR5U2xvdDo6aXNDdXN0b21BY2Nlc3NvciBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlByb3BlcnR5U2xvdDo6Y3VzdG9tR2V0dGVyU2V0dGVy
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6UHJvcGVydHlTbG90OjpzZXRDdXN0b21H
ZXR0ZXJTZXR0ZXIpOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvUHJveHlPYmplY3QuaDoK
KyAgICAgICAgKiBydW50aW1lL1B1dFByb3BlcnR5U2xvdC5oOgorICAgICAgICAqIHJ1bnRpbWUv
UmVmbGVjdE9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OkpTQ19ERUZJTkVfSE9TVF9GVU5DVElP
Tik6CisgICAgICAgICogcnVudGltZS9SZWdFeHBPYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpS
ZWdFeHBPYmplY3Q6OmRlZmluZU93blByb3BlcnR5VmlhUHV0KToKKyAgICAgICAgKEpTQzo6UmVn
RXhwT2JqZWN0OjpwdXQpOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvUmVnRXhwT2JqZWN0
Lmg6CisgICAgICAgICogcnVudGltZS9TdHJpbmdPYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpT
dHJpbmdPYmplY3Q6OmRlZmluZU93blByb3BlcnR5VmlhUHV0KToKKyAgICAgICAgKEpTQzo6U3Ry
aW5nT2JqZWN0OjpwdXQpOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvU3RyaW5nT2JqZWN0
Lmg6CisgICAgICAgICogcnVudGltZS9TdHJpbmdQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlND
OjpTdHJpbmdQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6U3RyaW5n
UHJvdG90eXBlOjpjcmVhdGUpOgorICAgICAgICAqIHJ1bnRpbWUvU3RyaW5nUHJvdG90eXBlLmg6
CisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmUuY3BwOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1
cmU6OnZhbGlkYXRlRmxhZ3MpOgorICAgICAgICAqIHJ1bnRpbWUvVk0uY3BwOgorICAgICAgICAo
SlNDOjpWTTo6Vk0pOgorICAgICAgICAqIHJ1bnRpbWUvVk0uaDoKKyAgICAgICAgKiB0b29scy9K
U0RvbGxhclZNLmNwcDoKKwogMjAyMS0wMS0yNyAgQ29tbWl0IFF1ZXVlICA8Y29tbWl0LXF1ZXVl
QHdlYmtpdC5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcmV2ZXJ0aW5nIHIyNzExODYuCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAyNzE5NzUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAg
LTg5Niw2ICs4OTYsNyBAQCBzZXQoSmF2YVNjcmlwdENvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVB
CiAgICAgcnVudGltZS9HZW5lcmljVHlwZWRBcnJheVZpZXcuaAogICAgIHJ1bnRpbWUvR2VuZXJp
Y1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oCiAgICAgcnVudGltZS9HZXRQdXRJbmZvLmgKKyAgICBy
dW50aW1lL0dldHRlclNldHRlci5oCiAgICAgcnVudGltZS9HZXRWTS5oCiAgICAgcnVudGltZS9H
bG9iYWxFeGVjdXRhYmxlLmgKICAgICBydW50aW1lL0hhc2hNYXBJbXBsLmgKQEAgLTkzMCw2ICs5
MzEsNyBAQCBzZXQoSmF2YVNjcmlwdENvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBCiAgICAgcnVu
dGltZS9KU0Nhc3QuaAogICAgIHJ1bnRpbWUvSlNDZWxsLmgKICAgICBydW50aW1lL0pTQ2VsbElu
bGluZXMuaAorICAgIHJ1bnRpbWUvSlNDdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbi5oCiAgICAg
cnVudGltZS9KU0RhdGFWaWV3LmgKICAgICBydW50aW1lL0pTRGF0ZU1hdGguaAogICAgIHJ1bnRp
bWUvSlNEZXN0cnVjdGlibGVPYmplY3QuaApAQCAtOTg5LDYgKzk5MSw4IEBAIHNldChKYXZhU2Ny
aXB0Q29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUEKICAgICBydW50aW1lL01vZHVsZVByb2dyYW1F
eGVjdXRhYmxlLmgKICAgICBydW50aW1lL05hdGl2ZUV4ZWN1dGFibGUuaAogICAgIHJ1bnRpbWUv
TmF0aXZlRnVuY3Rpb24uaAorICAgIHJ1bnRpbWUvTnVsbEdldHRlckZ1bmN0aW9uLmgKKyAgICBy
dW50aW1lL051bGxTZXR0ZXJGdW5jdGlvbi5oCiAgICAgcnVudGltZS9OdW1iZXJPYmplY3QuaAog
ICAgIHJ1bnRpbWUvTnVtYmVyUHJvdG90eXBlLmgKICAgICBydW50aW1lL051bWVyaWNTdHJpbmdz
LmgKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdC5o
CShyZXZpc2lvbiAyNzE5NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJh
Y2tPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMTI1LDcgKzEyNSw3IEBAIHRlbXBsYXRlIDxj
bGFzcyBQYXJlbnQ+CiBjbGFzcyBKU0NhbGxiYWNrT2JqZWN0IGZpbmFsIDogcHVibGljIFBhcmVu
dCB7CiBwdWJsaWM6CiAgICAgdXNpbmcgQmFzZSA9IFBhcmVudDsKLSAgICBzdGF0aWMgY29uc3Rl
eHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBPdmVy
cmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNHZXRPd25TcGVjaWFsUHJvcGVydHlO
YW1lcyB8IE92ZXJyaWRlc0dldENhbGxEYXRhIHwgSW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xv
dEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8IEltcGxlbWVudHNIYXNJbnN0YW5jZSB8
IFByb2hpYml0c1Byb3BlcnR5Q2FjaGluZyB8IEdldE93blByb3BlcnR5U2xvdE1heUJlV3JvbmdB
Ym91dERvbnRFbnVtOworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxh
Z3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8
IE92ZXJyaWRlc0dldE93blNwZWNpYWxQcm9wZXJ0eU5hbWVzIHwgT3ZlcnJpZGVzR2V0Q2FsbERh
dGEgfCBPdmVycmlkZXNQdXQgfCBJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2
ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgSW1wbGVtZW50c0hhc0luc3RhbmNlIHwgUHJvaGliaXRz
UHJvcGVydHlDYWNoaW5nIHwgR2V0T3duUHJvcGVydHlTbG90TWF5QmVXcm9uZ0Fib3V0RG9udEVu
dW07CiAgICAgc3RhdGljX2Fzc2VydCghKFN0cnVjdHVyZUZsYWdzICYgSW1wbGVtZW50c0RlZmF1
bHRIYXNJbnN0YW5jZSksICJ1c2luZyBjdXN0b21IYXNJbnN0YW5jZSIpOwogCiAgICAgfkpTQ2Fs
bGJhY2tPYmplY3QoKTsKQEAgLTIzNCw4ICsyMzQsNiBAQCBwcml2YXRlOgogICAgIHN0YXRpYyBS
YXdOYXRpdmVGdW5jdGlvbiBnZXRDYWxsRnVuY3Rpb24oKTsKICAgICBzdGF0aWMgUmF3TmF0aXZl
RnVuY3Rpb24gZ2V0Q29uc3RydWN0RnVuY3Rpb24oKTsKIAotICAgIHVzaW5nIEdldFZhbHVlRnVu
YyA9IEVuY29kZWRKU1ZhbHVlKEpJVF9PUEVSQVRJT05fQVRUUklCVVRFUyopKEpTR2xvYmFsT2Jq
ZWN0KiwgRW5jb2RlZEpTVmFsdWUsIFByb3BlcnR5TmFtZSk7Ci0KICAgICBzdGF0aWMgR2V0VmFs
dWVGdW5jIGdldFN0YXRpY0Z1bmN0aW9uR2V0dGVyKCk7CiAgICAgc3RhdGljIEdldFZhbHVlRnVu
YyBnZXRDYWxsYmFja0dldHRlcigpOwogIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQ
SS9KU0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25zLmgJKHJldmlzaW9uIDI3MTk3
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdEZ1bmN0aW9u
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNTYsNiArMjU2LDkgQEAgYm9vbCBKU0NhbGxiYWNrT2Jq
ZWN0PFBhcmVudD46OnB1dChKU0NlbAogICAgIFZNJiB2bSA9IGdldFZNKGdsb2JhbE9iamVjdCk7
CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCisgICAgaWYgKFVO
TElLRUxZKGNlbGwgIT0gc2xvdC50aGlzVmFsdWUoKSkpCisgICAgICAgIFJFTEVBU0VfQU5EX1JF
VFVSTihzY29wZSwgYXNPYmplY3QoY2VsbCktPnB1dElubGluZVNsb3coZ2xvYmFsT2JqZWN0LCBw
cm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90LCBKU09iamVjdDo6UHV0SW5saW5lU2xvd01vZGU6Okln
bm9yZU93blNwZWNpYWxQcm9wZXJ0aWVzKSk7CisKICAgICBKU0NhbGxiYWNrT2JqZWN0KiB0aGlz
T2JqZWN0ID0ganNDYXN0PEpTQ2FsbGJhY2tPYmplY3QqPihjZWxsKTsKICAgICBKU0NvbnRleHRS
ZWYgY3R4ID0gdG9SZWYoZ2xvYmFsT2JqZWN0KTsKICAgICBKU09iamVjdFJlZiB0aGlzUmVmID0g
dG9SZWYoanNDYXN0PEpTT2JqZWN0Kj4odGhpc09iamVjdCkpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDI3MTk3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkp
CkBAIC0xMTgyLDcgKzExODIsNyBAQAogCQk3MEVDMEVDNzFBQTBEN0RBMDBCNkFBRkEgLyogU3Ry
aW5nSXRlcmF0b3JQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDcwRUMwRUMxMUFBMEQ3REEwMEI2QUFGQSAvKiBTdHJpbmdJdGVyYXRvclBy
b3RvdHlwZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTcwRUNBNjA2MUFGREJFQTIwMDQ0OTczOSAvKiBKU1RlbXBsYXRlT2JqZWN0RGVzY3JpcHRv
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzBFQ0E2
MDExQUZEQkVBMjAwNDQ5NzM5IC8qIEpTVGVtcGxhdGVPYmplY3REZXNjcmlwdG9yLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzBFQ0E2MDkxQUZE
QkVBMjAwNDQ5NzM5IC8qIFRlbXBsYXRlT2JqZWN0RGVzY3JpcHRvci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzBFQ0E2MDQxQUZEQkVBMjAwNDQ5NzM5
IC8qIFRlbXBsYXRlT2JqZWN0RGVzY3JpcHRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTcyQUFGN0NFMUQwRDMxQjMwMDVFNjBCRSAvKiBKU0N1
c3RvbUdldHRlclNldHRlckZ1bmN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA3MkFBRjdDQzFEMEQzMThCMDA1RTYwQkUgLyogSlNDdXN0b21HZXR0
ZXJTZXR0ZXJGdW5jdGlvbi5oICovOyB9OworCQk3MkFBRjdDRTFEMEQzMUIzMDA1RTYwQkUgLyog
SlNDdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNzJBQUY3Q0MxRDBEMzE4QjAwNUU2MEJFIC8qIEpTQ3VzdG9t
R2V0dGVyU2V0dGVyRnVuY3Rpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQk3MzExRkEzMjI0MERCMUQzMDAzRDQ4REIgLyogRGVsZXRlQnlJZFZh
cmlhbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcz
MTFGQTMxMjQwREIxRDMwMDNENDhEQiAvKiBEZWxldGVCeUlkVmFyaWFudC5oICovOyB9OwogCQk3
MzRCNjU1NTIzRjVDMTA0MDBBMDY5RDEgLyogRGVsZXRlUHJvcGVydHlTbG90LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MzRCNjU1NDIzRjRBMzMxMDBB
MDY5RDEgLyogRGVsZXRlUHJvcGVydHlTbG90LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzNBRDA2MjkyM0ZGNjYyNjAwRjUzNTkzIC8qIERlbGV0
ZUJ5U3RhdHVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA3M0FEMDYyODIzRkY2NjI2MDBGNTM1OTMgLyogRGVsZXRlQnlTdGF0dXMuaCAqLzsgfTsKQEAg
LTEyMzMsNiArMTIzMyw5IEBACiAJCTdDMTg0RTIzMTdCRUUyNDAwMDdDQjYzQSAvKiBKU1Byb21p
c2VDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gN0MxODRFMjExN0JFRTI0MDAwN0NCNjNBIC8qIEpTUHJvbWlzZUNvbnN0cnVjdG9yLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJN0U0RUU3
MDkwRUJCNzk2MzAwNTkzNEFBIC8qIFN0cnVjdHVyZUNoYWluLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3RTRFRTcwODBFQkI3OTYzMDA1OTM0QUEgLyog
U3RydWN0dXJlQ2hhaW4uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQk4NDA0ODAxMzEwMjFBMUQ5MDA4RTdGMDEgLyogSlNBUElWYWx1ZVdyYXBwZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDMDg5NEQ2
MEZBRkJBMkQwMDAwMTg2NSAvKiBKU0FQSVZhbHVlV3JhcHBlci5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTg0MEMwQ0ZBMjVDMjYxNDMwMEE3NTBB
MiAvKiBHZXR0ZXJTZXR0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEJDMzM3QkRFMEUxQUYwQjgwMDc2OTE4QSAvKiBHZXR0ZXJTZXR0ZXIuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk4NDU4NEFEMzI1
QzI2OUJEMDBGRDQyN0EgLyogTnVsbEdldHRlckZ1bmN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NTQ2RjUyMDFBMzJBNTlDMDA2RjA3RDUgLyog
TnVsbEdldHRlckZ1bmN0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKKwkJODQ1ODRBRDQyNUMyNjlEMzAwRkQ0MjdBIC8qIE51bGxTZXR0ZXJGdW5j
dGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjU1
MjVGQzQxQTZERDNCMzAwN0I1NDk1IC8qIE51bGxTZXR0ZXJGdW5jdGlvbi5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTg2MDE2MUUzMEYzQTgzQzEw
MEY4NDcxMCAvKiBBYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NjAxNjFERjBGM0E4M0MxMDBGODQ3MTAgLyogQWJz
dHJhY3RNYWNyb0Fzc2VtYmxlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTg2MDE2MUU0MEYzQTgzQzEwMEY4NDcxMCAvKiBNYWNyb0Fzc2VtYmxl
clg4Ni5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODYw
MTYxRTAwRjNBODNDMTAwRjg0NzEwIC8qIE1hY3JvQXNzZW1ibGVyWDg2LmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJODYwMTYxRTUwRjNBODNDMTAw
Rjg0NzEwIC8qIE1hY3JvQXNzZW1ibGVyWDg2XzY0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NjAxNjFFMTBGM0E4M0MxMDBGODQ3MTAgLyogTWFjcm9B
c3NlbWJsZXJYODZfNjQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwpAQCAtOTc2MCw2ICs5NzYzLDcgQEAKIAkJCQkwRjkzMzJBMDE0Q0E3RENEMDA4NUYz
QzYgLyogR2V0QnlTdGF0dXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTUyMEQ5OUYxMjM4OENDODEw
MDA1MDlBMyAvKiBHZXRCeVZhbEhpc3RvcnkuaCBpbiBIZWFkZXJzICovLAogCQkJCTc5NjQ2NTZB
MUI5NTJGRjAwMDMwNTlFRSAvKiBHZXRQdXRJbmZvLmggaW4gSGVhZGVycyAqLywKKwkJCQk4NDBD
MENGQTI1QzI2MTQzMDBBNzUwQTIgLyogR2V0dGVyU2V0dGVyLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk1MzRFMDM1ODFFNTNCRjJGMDAyMTNGNjQgLyogR2V0dGVyU2V0dGVyQWNjZXNzQ2FzZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJRkUxRDZENkYyMzYyNThGRTAwN0E1QzI2IC8qIEdldFZNLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRkVDM0M1QjFGMzNBNDg5MDBGNTlCNkMgLyogR2lnYWNhZ2VBbGln
bmVkTWVtb3J5QWxsb2NhdG9yLmggaW4gSGVhZGVycyAqLywKQEAgLTEwMjE5LDYgKzEwMjIzLDgg
QEAKIAkJCQlGRTE0MDkwNzIwNTZGM0ZGMDBDRkUzMTggLyogTmF0aXZlRnVuY3Rpb24uaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGRkI5MjIwMTZEMDMzQjcwMDU1QTVEQiAvKiBOb2RlQ29uc3RydWN0
b3JzLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQzRjBFMTZGNUNEMDBCMzQ0NjAgLyogTm9k
ZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTg0NTg0QUQzMjVDMjY5QkQwMEZENDI3QSAvKiBOdWxs
R2V0dGVyRnVuY3Rpb24uaCBpbiBIZWFkZXJzICovLAorCQkJCTg0NTg0QUQ0MjVDMjY5RDMwMEZE
NDI3QSAvKiBOdWxsU2V0dGVyRnVuY3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDQx
MEUxNkY1Q0QwMEIzNDQ2MCAvKiBOdW1iZXJDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQkMxOEM0NDIwRTE2RjVDRDAwQjM0NDYwIC8qIE51bWJlckNvbnN0cnVjdG9yLmx1dC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NDMwRTE2RjVDRDAwQjM0NDYwIC8qIE51bWJlck9iamVj
dC5oIGluIEhlYWRlcnMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIv
RGVidWdnZXJTY29wZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rl
YnVnZ2VyL0RlYnVnZ2VyU2NvcGUuY3BwCShyZXZpc2lvbiAyNzE5NzUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXJTY29wZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTExNywxNSArMTE3LDE1IEBAIGJvb2wgRGVidWdnZXJTY29wZTo6Z2V0T3duUHJvcGVydHlTbG90
KEoKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1ib29sIERlYnVnZ2VyU2NvcGU6OnB1dChKU0Nl
bGwqIGNlbGwsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZSBwcm9w
ZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKK2Jvb2wgRGVi
dWdnZXJTY29wZTo6ZGVmaW5lT3duUHJvcGVydHlWaWFQdXQoSlNPYmplY3QqIG9iamVjdCwgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNW
YWx1ZSB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBzbG90KQogewotICAgIERlYnVnZ2VyU2NvcGUq
IHNjb3BlID0ganNDYXN0PERlYnVnZ2VyU2NvcGUqPihjZWxsKTsKKyAgICBEZWJ1Z2dlclNjb3Bl
KiBzY29wZSA9IGpzQ2FzdDxEZWJ1Z2dlclNjb3BlKj4ob2JqZWN0KTsKICAgICBBU1NFUlQoc2Nv
cGUtPmlzVmFsaWQoKSk7CiAgICAgaWYgKCFzY29wZS0+aXNWYWxpZCgpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgSlNPYmplY3QqIHRoaXNPYmplY3QgPSBKU1Njb3BlOjpvYmplY3RBdFNj
b3BlKHNjb3BlLT5qc1Njb3BlKCkpOwogICAgIHNsb3Quc2V0VGhpc1ZhbHVlKEpTVmFsdWUodGhp
c09iamVjdCkpOwotICAgIHJldHVybiB0aGlzT2JqZWN0LT5tZXRob2RUYWJsZShnbG9iYWxPYmpl
Y3QtPnZtKCkpLT5wdXQodGhpc09iamVjdCwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHZh
bHVlLCBzbG90KTsKKyAgICByZXR1cm4gdGhpc09iamVjdC0+bWV0aG9kVGFibGUoZ2xvYmFsT2Jq
ZWN0LT52bSgpKS0+ZGVmaW5lT3duUHJvcGVydHlWaWFQdXQodGhpc09iamVjdCwgZ2xvYmFsT2Jq
ZWN0LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KTsKIH0KIAogYm9vbCBEZWJ1Z2dlclNjb3Bl
OjpkZWxldGVQcm9wZXJ0eShKU0NlbGwqIGNlbGwsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIERlbGV0ZVByb3BlcnR5U2xvdCYgc2xvdCkK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlclNjb3BlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyU2NvcGUu
aAkocmV2aXNpb24gMjcxOTc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0Rl
YnVnZ2VyU2NvcGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTAsOSArNTAsOSBAQCBwdWJsaWM6CiAg
ICAgc3RhdGljIFN0cmluZyBjbGFzc05hbWUoY29uc3QgSlNPYmplY3QqLCBWTSYpOwogICAgIHN0
YXRpYyBTdHJpbmcgdG9TdHJpbmdOYW1lKGNvbnN0IEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3Qq
KTsKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqLCBKU0dsb2Jh
bE9iamVjdCosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7Ci0gICAgc3RhdGljIGJvb2wg
cHV0KEpTQ2VsbCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQ
cm9wZXJ0eVNsb3QmKTsKICAgICBzdGF0aWMgYm9vbCBkZWxldGVQcm9wZXJ0eShKU0NlbGwqLCBK
U0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwgRGVsZXRlUHJvcGVydHlTbG90Jik7CiAgICAg
c3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0
KiwgUHJvcGVydHlOYW1lQXJyYXkmLCBEb250RW51bVByb3BlcnRpZXNNb2RlKTsKKyAgICBzdGF0
aWMgYm9vbCBkZWZpbmVPd25Qcm9wZXJ0eVZpYVB1dChKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0
KiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmKTsKICAgICBzdGF0aWMg
Ym9vbCBkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVy
dHlOYW1lLCBjb25zdCBQcm9wZXJ0eURlc2NyaXB0b3ImLCBib29sIHNob3VsZFRocm93KTsKIAog
ICAgIERFQ0xBUkVfRVhQT1JUX0lORk87CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9DbGFzc0luZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9DbGFzc0luZm8uaAkocmV2aXNpb24gMjcxOTc1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQ2xhc3NJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTcxLDkgKzcxLDYgQEAg
c3RydWN0IE1ldGhvZFRhYmxlIHsKICAgICB1c2luZyBHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4
RnVuY3Rpb25QdHIgPSBib29sICgqKShKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgdW5zaWdu
ZWQsIFByb3BlcnR5U2xvdCYpOwogICAgIEdldE93blByb3BlcnR5U2xvdEJ5SW5kZXhGdW5jdGlv
blB0ciBNRVRIT0RfVEFCTEVfRU5UUlkoZ2V0T3duUHJvcGVydHlTbG90QnlJbmRleCk7CiAKLSAg
ICB1c2luZyBEb1B1dFByb3BlcnR5U2VjdXJpdHlDaGVja0Z1bmN0aW9uUHRyID0gdm9pZCAoKiko
SlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwgUHV0UHJvcGVydHlTbG90
Jik7Ci0gICAgRG9QdXRQcm9wZXJ0eVNlY3VyaXR5Q2hlY2tGdW5jdGlvblB0ciBNRVRIT0RfVEFC
TEVfRU5UUlkoZG9QdXRQcm9wZXJ0eVNlY3VyaXR5Q2hlY2spOwotCiAgICAgdXNpbmcgVG9UaGlz
RnVuY3Rpb25QdHIgPSBKU1ZhbHVlICgqKShKU0NlbGwqLCBKU0dsb2JhbE9iamVjdCosIEVDTUFN
b2RlKTsKICAgICBUb1RoaXNGdW5jdGlvblB0ciBNRVRIT0RfVEFCTEVfRU5UUlkodG9UaGlzKTsK
IApAQCAtOTYsNiArOTMsOSBAQCBzdHJ1Y3QgTWV0aG9kVGFibGUgewogICAgIHVzaW5nIEN1c3Rv
bUhhc0luc3RhbmNlRnVuY3Rpb25QdHIgPSBib29sICgqKShKU09iamVjdCosIEpTR2xvYmFsT2Jq
ZWN0KiwgSlNWYWx1ZSk7CiAgICAgQ3VzdG9tSGFzSW5zdGFuY2VGdW5jdGlvblB0ciBNRVRIT0Rf
VEFCTEVfRU5UUlkoY3VzdG9tSGFzSW5zdGFuY2UpOwogCisgICAgdXNpbmcgRGVmaW5lT3duUHJv
cGVydHlGdW5jdGlvblZpYVB1dFB0ciA9IGJvb2wgKCopKEpTT2JqZWN0KiwgSlNHbG9iYWxPYmpl
Y3QqLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQcm9wZXJ0eVNsb3Qm
KTsKKyAgICBEZWZpbmVPd25Qcm9wZXJ0eUZ1bmN0aW9uVmlhUHV0UHRyIE1FVEhPRF9UQUJMRV9F
TlRSWShkZWZpbmVPd25Qcm9wZXJ0eVZpYVB1dCk7CisKICAgICB1c2luZyBEZWZpbmVPd25Qcm9w
ZXJ0eUZ1bmN0aW9uUHRyID0gYm9vbCAoKikoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFBy
b3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlEZXNjcmlwdG9yJiwgYm9vbCk7CiAgICAgRGVmaW5l
T3duUHJvcGVydHlGdW5jdGlvblB0ciBNRVRIT0RfVEFCTEVfRU5UUlkoZGVmaW5lT3duUHJvcGVy
dHkpOwogCkBAIC0xNTYsNyArMTU2LDYgQEAgc3RydWN0IE1ldGhvZFRhYmxlIHsKICAgICAgICAg
JkNsYXNzTmFtZTo6ZGVsZXRlUHJvcGVydHlCeUluZGV4LCBcCiAgICAgICAgICZDbGFzc05hbWU6
OmdldE93blByb3BlcnR5U2xvdCwgXAogICAgICAgICAmQ2xhc3NOYW1lOjpnZXRPd25Qcm9wZXJ0
eVNsb3RCeUluZGV4LCBcCi0gICAgICAgICZDbGFzc05hbWU6OmRvUHV0UHJvcGVydHlTZWN1cml0
eUNoZWNrLCBcCiAgICAgICAgICZDbGFzc05hbWU6OnRvVGhpcywgXAogICAgICAgICAmQ2xhc3NO
YW1lOjpkZWZhdWx0VmFsdWUsIFwKICAgICAgICAgJkNsYXNzTmFtZTo6Z2V0T3duUHJvcGVydHlO
YW1lcywgXApAQCAtMTY1LDYgKzE2NCw3IEBAIHN0cnVjdCBNZXRob2RUYWJsZSB7CiAgICAgICAg
ICZDbGFzc05hbWU6OmNsYXNzTmFtZSwgXAogICAgICAgICAmQ2xhc3NOYW1lOjp0b1N0cmluZ05h
bWUsIFwKICAgICAgICAgJkNsYXNzTmFtZTo6Y3VzdG9tSGFzSW5zdGFuY2UsIFwKKyAgICAgICAg
JkNsYXNzTmFtZTo6ZGVmaW5lT3duUHJvcGVydHlWaWFQdXQsIFwKICAgICAgICAgJkNsYXNzTmFt
ZTo6ZGVmaW5lT3duUHJvcGVydHksIFwKICAgICAgICAgJkNsYXNzTmFtZTo6cHJldmVudEV4dGVu
c2lvbnMsIFwKICAgICAgICAgJkNsYXNzTmFtZTo6aXNFeHRlbnNpYmxlLCBcCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbG9uZWRBcmd1bWVudHMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Nsb25lZEFyZ3VtZW50cy5jcHAJKHJl
dmlzaW9uIDI3MTk3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Nsb25lZEFy
Z3VtZW50cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwNCwxOSArMjA0LDE5IEBAIHZvaWQgQ2xv
bmVkQXJndW1lbnRzOjpnZXRPd25TcGVjaWFsUHJvcGUKICAgICAgICAgdGhpc09iamVjdC0+bWF0
ZXJpYWxpemVTcGVjaWFsc0lmTmVjZXNzYXJ5KGdsb2JhbE9iamVjdCk7CiB9CiAKLWJvb2wgQ2xv
bmVkQXJndW1lbnRzOjpwdXQoSlNDZWxsKiBjZWxsLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBQcm9wZXJ0eU5hbWUgaWRlbnQsIEpTVmFsdWUgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYg
c2xvdCkKK2Jvb2wgQ2xvbmVkQXJndW1lbnRzOjpkZWZpbmVPd25Qcm9wZXJ0eVZpYVB1dChKU09i
amVjdCogb2JqZWN0LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWUg
aWRlbnQsIEpTVmFsdWUgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKLSAgICBDbG9u
ZWRBcmd1bWVudHMqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8Q2xvbmVkQXJndW1lbnRzKj4oY2VsbCk7
CisgICAgQ2xvbmVkQXJndW1lbnRzKiB0aGlzT2JqZWN0ID0ganNDYXN0PENsb25lZEFyZ3VtZW50
cyo+KG9iamVjdCk7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIAogICAg
IGlmIChpZGVudCA9PSB2bS5wcm9wZXJ0eU5hbWVzLT5jYWxsZWUKICAgICAgICAgfHwgaWRlbnQg
PT0gdm0ucHJvcGVydHlOYW1lcy0+aXRlcmF0b3JTeW1ib2wpIHsKICAgICAgICAgdGhpc09iamVj
dC0+bWF0ZXJpYWxpemVTcGVjaWFsc0lmTmVjZXNzYXJ5KGdsb2JhbE9iamVjdCk7CiAgICAgICAg
IFB1dFByb3BlcnR5U2xvdCBkdW1teSA9IHNsb3Q7IC8vIFNoYWRvdyB0aGUgZ2l2ZW4gUHV0UHJv
cGVydHlTbG90IHRvIHByZXZlbnQgY2FjaGluZy4KLSAgICAgICAgcmV0dXJuIEJhc2U6OnB1dCh0
aGlzT2JqZWN0LCBnbG9iYWxPYmplY3QsIGlkZW50LCB2YWx1ZSwgZHVtbXkpOworICAgICAgICBy
ZXR1cm4gQmFzZTo6ZGVmaW5lT3duUHJvcGVydHlWaWFQdXQodGhpc09iamVjdCwgZ2xvYmFsT2Jq
ZWN0LCBpZGVudCwgdmFsdWUsIGR1bW15KTsKICAgICB9CiAgICAgCi0gICAgcmV0dXJuIEJhc2U6
OnB1dCh0aGlzT2JqZWN0LCBnbG9iYWxPYmplY3QsIGlkZW50LCB2YWx1ZSwgc2xvdCk7CisgICAg
cmV0dXJuIEJhc2U6OmRlZmluZU93blByb3BlcnR5VmlhUHV0KHRoaXNPYmplY3QsIGdsb2JhbE9i
amVjdCwgaWRlbnQsIHZhbHVlLCBzbG90KTsKIH0KIAogYm9vbCBDbG9uZWRBcmd1bWVudHM6OmRl
bGV0ZVByb3BlcnR5KEpTQ2VsbCogY2VsbCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
UHJvcGVydHlOYW1lIGlkZW50LCBEZWxldGVQcm9wZXJ0eVNsb3QmIHNsb3QpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbG9uZWRBcmd1bWVudHMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbG9uZWRBcmd1bWVudHMuaAkocmV2aXNp
b24gMjcxOTc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xvbmVkQXJndW1l
bnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTcxLDggKzcxLDggQEAgcHJpdmF0ZToKIAogICAgIHN0
YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0Kiwg
UHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKICAgICBzdGF0aWMgdm9pZCBnZXRPd25TcGVj
aWFsUHJvcGVydHlOYW1lcyhKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1l
QXJyYXkmLCBEb250RW51bVByb3BlcnRpZXNNb2RlKTsKLSAgICBzdGF0aWMgYm9vbCBwdXQoSlND
ZWxsKiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5
U2xvdCYpOwogICAgIHN0YXRpYyBib29sIGRlbGV0ZVByb3BlcnR5KEpTQ2VsbCosIEpTR2xvYmFs
T2JqZWN0KiwgUHJvcGVydHlOYW1lLCBEZWxldGVQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMg
Ym9vbCBkZWZpbmVPd25Qcm9wZXJ0eVZpYVB1dChKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0Kiwg
UHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmKTsKICAgICBzdGF0aWMgYm9v
bCBkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlO
YW1lLCBjb25zdCBQcm9wZXJ0eURlc2NyaXB0b3ImLCBib29sIHNob3VsZFRocm93KTsKICAgICAK
ICAgICBib29sIHNwZWNpYWxzTWF0ZXJpYWxpemVkKCkgY29uc3QgeyByZXR1cm4gIW1fY2FsbGVl
OyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DdXN0b21HZXR0ZXJTZXR0
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0N1c3Rv
bUdldHRlclNldHRlci5jcHAJKHJldmlzaW9uIDI3MTk3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0N1c3RvbUdldHRlclNldHRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2
LDI4ICsyNiwxMCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkN1c3RvbUdldHRl
clNldHRlci5oIgogCi0jaW5jbHVkZSAiSlNDSlNWYWx1ZUlubGluZXMuaCIKLSNpbmNsdWRlIDx3
dGYvQXNzZXJ0aW9ucy5oPgotCiBuYW1lc3BhY2UgSlNDIHsKIAogU1RBVElDX0FTU0VSVF9JU19U
UklWSUFMTFlfREVTVFJVQ1RJQkxFKEN1c3RvbUdldHRlclNldHRlcik7CiAKIGNvbnN0IENsYXNz
SW5mbyBDdXN0b21HZXR0ZXJTZXR0ZXI6OnNfaW5mbyA9IHsgIkN1c3RvbUdldHRlclNldHRlciIs
IG51bGxwdHIsIG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoQ3VzdG9tR2V0
dGVyU2V0dGVyKSB9OwogCi1UcmlTdGF0ZSBjYWxsQ3VzdG9tU2V0dGVyKEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEN1c3RvbUdldHRlclNldHRlcjo6Q3VzdG9tU2V0dGVyIHNldHRlciwg
Ym9vbCBpc0FjY2Vzc29yLCBKU09iamVjdCogc2xvdEJhc2UsIEpTVmFsdWUgdGhpc1ZhbHVlLCBK
U1ZhbHVlIHZhbHVlKQotewotICAgIGlmIChpc0FjY2Vzc29yKSB7Ci0gICAgICAgIGlmICghc2V0
dGVyKQotICAgICAgICAgICAgcmV0dXJuIFRyaVN0YXRlOjpGYWxzZTsKLSAgICAgICAgc2V0dGVy
KGdsb2JhbE9iamVjdCwgSlNWYWx1ZTo6ZW5jb2RlKHRoaXNWYWx1ZSksIEpTVmFsdWU6OmVuY29k
ZSh2YWx1ZSkpOwotICAgICAgICAvLyBBbHdheXMgcmV0dXJuIHRydWUgaWYgdGhlcmUgaXMgYSBz
ZXR0ZXIgYW5kIGl0IGlzIG9ic2VydmVkIGFzIGFuIGFjY2Vzc29yIHRvIHVzZXJzLgotICAgICAg
ICByZXR1cm4gVHJpU3RhdGU6OlRydWU7Ci0gICAgfQotCi0gICAgaWYgKCFzZXR0ZXIpCi0gICAg
ICAgIHJldHVybiBUcmlTdGF0ZTo6SW5kZXRlcm1pbmF0ZTsKLSAgICByZXR1cm4gdHJpU3RhdGUo
c2V0dGVyKGdsb2JhbE9iamVjdCwgSlNWYWx1ZTo6ZW5jb2RlKHNsb3RCYXNlKSwgSlNWYWx1ZTo6
ZW5jb2RlKHZhbHVlKSkpOwotfQotCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0N1c3RvbUdldHRlclNldHRlci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0N1c3RvbUdldHRlclNldHRlci5oCShyZXZp
c2lvbiAyNzE5NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DdXN0b21HZXR0
ZXJTZXR0ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNzYsNiArNzYsNCBAQCBwcml2YXRlOgogICAg
IEN1c3RvbVNldHRlciBtX3NldHRlcjsKIH07CiAKLUpTX0VYUE9SVF9QUklWQVRFIFRyaVN0YXRl
IGNhbGxDdXN0b21TZXR0ZXIoSlNHbG9iYWxPYmplY3QqLCBDdXN0b21HZXR0ZXJTZXR0ZXI6OkN1
c3RvbVNldHRlciwgYm9vbCBpc0FjY2Vzc29yLCBKU09iamVjdCogc2xvdEJhc2UsIEpTVmFsdWUg
dGhpc1ZhbHVlLCBKU1ZhbHVlKTsKLQogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvckNvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvckNvbnN0cnVjdG9yLmNwcAkocmV2
aXNpb24gMjcxOTc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JDb25z
dHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcwLDEwICs3MCwxMCBAQCBKU0NfREVGSU5F
X0hPU1RfRlVOQ1RJT04oY2FsbEVycm9yQ29uc3RyCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShFcnJvckluc3RhbmNlOjpjcmVhdGUoZ2xvYmFsT2JqZWN0LCBlcnJvclN0cnVjdHVyZSwgbWVz
c2FnZSwgbnVsbHB0ciwgVHlwZU5vdGhpbmcsIGZhbHNlKSk7CiB9CiAKLWJvb2wgRXJyb3JDb25z
dHJ1Y3Rvcjo6cHV0KEpTQ2VsbCogY2VsbCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
UHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgUHV0UHJvcGVydHlTbG90
JiBzbG90KQorYm9vbCBFcnJvckNvbnN0cnVjdG9yOjpkZWZpbmVPd25Qcm9wZXJ0eVZpYVB1dChK
U09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5h
bWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7
CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwotICAgIEVycm9yQ29uc3RydWN0b3Iq
IHRoaXNPYmplY3QgPSBqc0Nhc3Q8RXJyb3JDb25zdHJ1Y3Rvcio+KGNlbGwpOworICAgIEVycm9y
Q29uc3RydWN0b3IqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8RXJyb3JDb25zdHJ1Y3Rvcio+KG9iamVj
dCk7CiAKICAgICBpZiAocHJvcGVydHlOYW1lID09IHZtLnByb3BlcnR5TmFtZXMtPnN0YWNrVHJh
Y2VMaW1pdCkgewogICAgICAgICBpZiAodmFsdWUuaXNOdW1iZXIoKSkgewpAQCAtODUsNyArODUs
NyBAQCBib29sIEVycm9yQ29uc3RydWN0b3I6OnB1dChKU0NlbGwqIGNlbGwsCiAgICAgICAgICAg
ICB0aGlzT2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+c2V0U3RhY2tUcmFjZUxpbWl0KFdURjo6bnVs
bG9wdCk7CiAgICAgfQogCi0gICAgcmV0dXJuIEJhc2U6OnB1dCh0aGlzT2JqZWN0LCBnbG9iYWxP
YmplY3QsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpOworICAgIHJldHVybiBCYXNlOjpkZWZp
bmVPd25Qcm9wZXJ0eVZpYVB1dCh0aGlzT2JqZWN0LCBnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFt
ZSwgdmFsdWUsIHNsb3QpOwogfQogCiBib29sIEVycm9yQ29uc3RydWN0b3I6OmRlbGV0ZVByb3Bl
cnR5KEpTQ2VsbCogY2VsbCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlO
YW1lIHByb3BlcnR5TmFtZSwgRGVsZXRlUHJvcGVydHlTbG90JiBzbG90KQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JDb25zdHJ1Y3Rvci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9yQ29uc3RydWN0b3IuaAkocmV2aXNp
b24gMjcxOTc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JDb25zdHJ1
Y3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC00OSw3ICs0OSw3IEBAIHByaXZhdGU6CiAgICAgRXJy
b3JDb25zdHJ1Y3RvcihWTSYsIFN0cnVjdHVyZSopOwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24o
Vk0mLCBFcnJvclByb3RvdHlwZSopOwogCi0gICAgc3RhdGljIGJvb2wgcHV0KEpTQ2VsbCosIEpT
R2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmKTsK
KyAgICBzdGF0aWMgYm9vbCBkZWZpbmVPd25Qcm9wZXJ0eVZpYVB1dChKU09iamVjdCosIEpTR2xv
YmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmKTsKICAg
ICBzdGF0aWMgYm9vbCBkZWxldGVQcm9wZXJ0eShKU0NlbGwqLCBKU0dsb2JhbE9iamVjdCosIFBy
b3BlcnR5TmFtZSwgRGVsZXRlUHJvcGVydHlTbG90Jik7CiB9OwogU1RBVElDX0FTU0VSVF9JU09f
U1VCU1BBQ0VfU0hBUkFCTEUoRXJyb3JDb25zdHJ1Y3RvciwgSW50ZXJuYWxGdW5jdGlvbik7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvckluc3RhbmNlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvckluc3RhbmNlLmNw
cAkocmV2aXNpb24gMjcxOTc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJy
b3JJbnN0YW5jZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3NiwxNCArMjc2LDE0IEBAIGJvb2wg
RXJyb3JJbnN0YW5jZTo6ZGVmaW5lT3duUHJvcGVydHkoSlMKICAgICByZXR1cm4gQmFzZTo6ZGVm
aW5lT3duUHJvcGVydHkodGhpc09iamVjdCwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIGRl
c2NyaXB0b3IsIHNob3VsZFRocm93KTsKIH0KIAotYm9vbCBFcnJvckluc3RhbmNlOjpwdXQoSlND
ZWxsKiBjZWxsLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWUgcHJv
cGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCitib29sIEVy
cm9ySW5zdGFuY2U6OmRlZmluZU93blByb3BlcnR5VmlhUHV0KEpTT2JqZWN0KiBvYmplY3QsIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpT
VmFsdWUgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBWTSYgdm0gPSBnbG9i
YWxPYmplY3QtPnZtKCk7Ci0gICAgRXJyb3JJbnN0YW5jZSogdGhpc09iamVjdCA9IGpzQ2FzdDxF
cnJvckluc3RhbmNlKj4oY2VsbCk7CisgICAgRXJyb3JJbnN0YW5jZSogdGhpc09iamVjdCA9IGpz
Q2FzdDxFcnJvckluc3RhbmNlKj4ob2JqZWN0KTsKICAgICBib29sIG1hdGVyaWFsaXplZFByb3Bl
cnRpZXMgPSB0aGlzT2JqZWN0LT5tYXRlcmlhbGl6ZUVycm9ySW5mb0lmTmVlZGVkKHZtLCBwcm9w
ZXJ0eU5hbWUpOwogICAgIGlmIChtYXRlcmlhbGl6ZWRQcm9wZXJ0aWVzKQogICAgICAgICBzbG90
LmRpc2FibGVDYWNoaW5nKCk7Ci0gICAgcmV0dXJuIEJhc2U6OnB1dCh0aGlzT2JqZWN0LCBnbG9i
YWxPYmplY3QsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpOworICAgIHJldHVybiBCYXNlOjpk
ZWZpbmVPd25Qcm9wZXJ0eVZpYVB1dCh0aGlzT2JqZWN0LCBnbG9iYWxPYmplY3QsIHByb3BlcnR5
TmFtZSwgdmFsdWUsIHNsb3QpOwogfQogCiBib29sIEVycm9ySW5zdGFuY2U6OmRlbGV0ZVByb3Bl
cnR5KEpTQ2VsbCogY2VsbCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlO
YW1lIHByb3BlcnR5TmFtZSwgRGVsZXRlUHJvcGVydHlTbG90JiBzbG90KQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JJbnN0YW5jZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9ySW5zdGFuY2UuaAkocmV2aXNpb24gMjcx
OTc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JJbnN0YW5jZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC05NCw4ICs5NCw4IEBAIHByb3RlY3RlZDoKIAogICAgIHN0YXRpYyBi
b29sIGdldE93blByb3BlcnR5U2xvdChKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVy
dHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKICAgICBzdGF0aWMgdm9pZCBnZXRPd25TcGVjaWFsUHJv
cGVydHlOYW1lcyhKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lQXJyYXkm
LCBEb250RW51bVByb3BlcnRpZXNNb2RlKTsKKyAgICBzdGF0aWMgYm9vbCBkZWZpbmVPd25Qcm9w
ZXJ0eVZpYVB1dChKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBKU1Zh
bHVlLCBQdXRQcm9wZXJ0eVNsb3QmKTsKICAgICBzdGF0aWMgYm9vbCBkZWZpbmVPd25Qcm9wZXJ0
eShKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0
eURlc2NyaXB0b3ImLCBib29sIHNob3VsZFRocm93KTsKLSAgICBzdGF0aWMgYm9vbCBwdXQoSlND
ZWxsKiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5
U2xvdCYpOwogICAgIHN0YXRpYyBib29sIGRlbGV0ZVByb3BlcnR5KEpTQ2VsbCosIEpTR2xvYmFs
T2JqZWN0KiwgUHJvcGVydHlOYW1lLCBEZWxldGVQcm9wZXJ0eVNsb3QmKTsKICAgICBzdGF0aWMg
U3RyaW5nIHRvU3RyaW5nTmFtZShjb25zdCBKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0Kik7CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNBcmd1bWVudHMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljQXJndW1l
bnRzLmgJKHJldmlzaW9uIDI3MTk3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0dlbmVyaWNBcmd1bWVudHMuaAkod29ya2luZyBjb3B5KQpAQCAtNDgsMTAgKzQ4LDEwIEBAIHBy
b3RlY3RlZDoKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqLCBK
U0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CiAgICAgc3RhdGlj
IGJvb2wgZ2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0
KiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKICAgICBzdGF0aWMgdm9p
ZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0
eU5hbWVBcnJheSYsIERvbnRFbnVtUHJvcGVydGllc01vZGUpOwotICAgIHN0YXRpYyBib29sIHB1
dChKU0NlbGwqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0UHJv
cGVydHlTbG90Jik7CiAgICAgc3RhdGljIGJvb2wgcHV0QnlJbmRleChKU0NlbGwqLCBKU0dsb2Jh
bE9iamVjdCosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJv
dyk7CiAgICAgc3RhdGljIGJvb2wgZGVsZXRlUHJvcGVydHkoSlNDZWxsKiwgSlNHbG9iYWxPYmpl
Y3QqLCBQcm9wZXJ0eU5hbWUsIERlbGV0ZVByb3BlcnR5U2xvdCYpOwogICAgIHN0YXRpYyBib29s
IGRlbGV0ZVByb3BlcnR5QnlJbmRleChKU0NlbGwqLCBKU0dsb2JhbE9iamVjdCosIHVuc2lnbmVk
IHByb3BlcnR5TmFtZSk7CisgICAgc3RhdGljIGJvb2wgZGVmaW5lT3duUHJvcGVydHlWaWFQdXQo
SlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0UHJv
cGVydHlTbG90Jik7CiAgICAgc3RhdGljIGJvb2wgZGVmaW5lT3duUHJvcGVydHkoSlNPYmplY3Qq
LCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlEZXNjcmlwdG9y
JiwgYm9vbCBzaG91bGRUaHJvdyk7CiAgICAgCiAgICAgdm9pZCBpbml0TW9kaWZpZWRBcmd1bWVu
dHNEZXNjcmlwdG9yKEpTR2xvYmFsT2JqZWN0KiwgdW5zaWduZWQgbGVuZ3RoKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNBcmd1bWVudHNJbmxpbmVzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50
c0lubGluZXMuaAkocmV2aXNpb24gMjcxOTc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvR2VuZXJpY0FyZ3VtZW50c0lubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMTEyLDEw
ICsxMTIsMTMgQEAgdm9pZCBHZW5lcmljQXJndW1lbnRzPFR5cGU+OjpnZXRPd25Qcm9wZQogICAg
IHRoaXNPYmplY3QtPmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhnbG9iYWxPYmplY3QsIGFy
cmF5LCBtb2RlKTsKIH0KIAorLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMt
YXJndW1lbnRzLWV4b3RpYy1vYmplY3RzLXNldC1wLXYtcmVjZWl2ZXIKIHRlbXBsYXRlPHR5cGVu
YW1lIFR5cGU+Ci1ib29sIEdlbmVyaWNBcmd1bWVudHM8VHlwZT46OnB1dChKU0NlbGwqIGNlbGws
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZSBpZGVudCwgSlNWYWx1
ZSB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBzbG90KQorYm9vbCBHZW5lcmljQXJndW1lbnRzPFR5
cGU+OjpkZWZpbmVPd25Qcm9wZXJ0eVZpYVB1dChKU09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWUgaWRlbnQsIEpTVmFsdWUgdmFsdWUsIFB1
dFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKLSAgICBUeXBlKiB0aGlzT2JqZWN0ID0ganNDYXN0PFR5
cGUqPihjZWxsKTsKKyAgICBBU1NFUlQoIXBhcnNlSW5kZXgoaWRlbnQpKTsKKworICAgIFR5cGUq
IHRoaXNPYmplY3QgPSBqc0Nhc3Q8VHlwZSo+KG9iamVjdCk7CiAgICAgVk0mIHZtID0gZ2xvYmFs
T2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
ICAgICAKQEAgLTEyNiwyMyArMTI5LDEwIEBAIGJvb2wgR2VuZXJpY0FyZ3VtZW50czxUeXBlPjo6
cHV0KEpTQ2VsbCoKICAgICAgICAgdGhpc09iamVjdC0+b3ZlcnJpZGVUaGluZ3MoZ2xvYmFsT2Jq
ZWN0KTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZmFsc2UpOwogICAgICAg
ICBQdXRQcm9wZXJ0eVNsb3QgZHVtbXkgPSBzbG90OyAvLyBUaGlzIHB1dCBpcyBub3QgY2FjaGVh
YmxlLCBzbyB3ZSBzaGFkb3cgdGhlIHNsb3QgdGhhdCB3YXMgZ2l2ZW4gdG8gdXMuCi0gICAgICAg
IFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgQmFzZTo6cHV0KHRoaXNPYmplY3QsIGdsb2JhbE9i
amVjdCwgaWRlbnQsIHZhbHVlLCBkdW1teSkpOwotICAgIH0KLQotICAgIC8vIGh0dHBzOi8vdGMz
OS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWFyZ3VtZW50cy1leG90aWMtb2JqZWN0cy1zZXQtcC12
LXJlY2VpdmVyCi0gICAgLy8gRmFsbCBiYWNrIHRvIHRoZSBPcmRpbmFyeVNldCB3aGVuIHRoZSBy
ZWNlaXZlciBpcyBhbHRlcmVkIGZyb20gdGhlIHRoaXNPYmplY3QuCi0gICAgaWYgKFVOTElLRUxZ
KGlzVGhpc1ZhbHVlQWx0ZXJlZChzbG90LCB0aGlzT2JqZWN0KSkpCi0gICAgICAgIFJFTEVBU0Vf
QU5EX1JFVFVSTihzY29wZSwgb3JkaW5hcnlTZXRTbG93KGdsb2JhbE9iamVjdCwgdGhpc09iamVj
dCwgaWRlbnQsIHZhbHVlLCBzbG90LnRoaXNWYWx1ZSgpLCBzbG90LmlzU3RyaWN0TW9kZSgpKSk7
Ci0gICAgCi0gICAgT3B0aW9uYWw8dWludDMyX3Q+IGluZGV4ID0gcGFyc2VJbmRleChpZGVudCk7
Ci0gICAgaWYgKGluZGV4ICYmIHRoaXNPYmplY3QtPmlzTWFwcGVkQXJndW1lbnQoaW5kZXgudmFs
dWUoKSkpIHsKLSAgICAgICAgdGhpc09iamVjdC0+c2V0SW5kZXhRdWlja2x5KHZtLCBpbmRleC52
YWx1ZSgpLCB2YWx1ZSk7Ci0gICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBSRUxFQVNFX0FO
RF9SRVRVUk4oc2NvcGUsIEJhc2U6OmRlZmluZU93blByb3BlcnR5VmlhUHV0KHRoaXNPYmplY3Qs
IGdsb2JhbE9iamVjdCwgaWRlbnQsIHZhbHVlLCBkdW1teSkpOwogICAgIH0KIAotICAgIGF1dG8g
cmVzdWx0ID0gQmFzZTo6cHV0KHRoaXNPYmplY3QsIGdsb2JhbE9iamVjdCwgaWRlbnQsIHZhbHVl
LCBzbG90KTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBmYWxzZSk7Ci0gICAgUkVM
RUFTRV9BTkRfUkVUVVJOKHNjb3BlLCByZXN1bHQpOworICAgIFJFTEVBU0VfQU5EX1JFVFVSTihz
Y29wZSwgQmFzZTo6ZGVmaW5lT3duUHJvcGVydHlWaWFQdXQodGhpc09iamVjdCwgZ2xvYmFsT2Jq
ZWN0LCBpZGVudCwgdmFsdWUsIHNsb3QpKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVHlwZT4K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dldHRlclNldHRlci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dldHRlclNldHRlci5oCShy
ZXZpc2lvbiAyNzE5NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZXR0ZXJT
ZXR0ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNTQsNyArNTQsNyBAQCBwcml2YXRlOgogCiBwdWJs
aWM6CiAKLSAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFz
ZTo6U3RydWN0dXJlRmxhZ3MgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBTdHJ1Y3R1
cmVJc0ltbW9ydGFsOworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxh
Z3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8
IE92ZXJyaWRlc1B1dCB8IFN0cnVjdHVyZUlzSW1tb3J0YWw7CiAKICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+CiAgICAgc3RhdGljIElzb1N1YnNwYWNlKiBz
dWJzcGFjZUZvcihWTSYgdm0pCkBAIC02MiwxNCArNjIsMTQgQEAgcHVibGljOgogICAgICAgICBy
ZXR1cm4gJnZtLmdldHRlclNldHRlclNwYWNlOwogICAgIH0KIAotICAgIHN0YXRpYyBHZXR0ZXJT
ZXR0ZXIqIGNyZWF0ZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTT2Jq
ZWN0KiBnZXR0ZXIsIEpTT2JqZWN0KiBzZXR0ZXIpCisgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3Rh
dGljIEdldHRlclNldHRlciogY3JlYXRlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgSlNPYmplY3QqIGdldHRlciwgSlNPYmplY3QqIHNldHRlcikKICAgICB7CiAgICAgICAg
IEdldHRlclNldHRlciogZ2V0dGVyU2V0dGVyID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8
R2V0dGVyU2V0dGVyPih2bS5oZWFwKSkgR2V0dGVyU2V0dGVyKHZtLCBnbG9iYWxPYmplY3QsIGdl
dHRlciwgc2V0dGVyKTsKICAgICAgICAgZ2V0dGVyU2V0dGVyLT5maW5pc2hDcmVhdGlvbih2bSk7
CiAgICAgICAgIHJldHVybiBnZXR0ZXJTZXR0ZXI7CiAgICAgfQogCi0gICAgc3RhdGljIEdldHRl
clNldHRlciogY3JlYXRlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNW
YWx1ZSBnZXR0ZXIsIEpTVmFsdWUgc2V0dGVyKQorICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRp
YyBHZXR0ZXJTZXR0ZXIqIGNyZWF0ZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEpTVmFsdWUgZ2V0dGVyLCBKU1ZhbHVlIHNldHRlcikKICAgICB7CiAgICAgICAgIEFTU0VS
VChnZXR0ZXIuaXNVbmRlZmluZWQoKSB8fCBnZXR0ZXIuaXNPYmplY3QoKSk7CiAgICAgICAgIEFT
U0VSVChzZXR0ZXIuaXNVbmRlZmluZWQoKSB8fCBzZXR0ZXIuaXNPYmplY3QoKSk7CkBAIC0xMjYs
NiArMTI2LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBib29sIHB1dChKU0NlbGwqLCBKU0dsb2Jh
bE9iamVjdCosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90JikgeyBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyByZXR1cm4gZmFsc2U7IH0KICAgICBzdGF0aWMgYm9v
bCBwdXRCeUluZGV4KEpTQ2VsbCosIEpTR2xvYmFsT2JqZWN0KiwgdW5zaWduZWQsIEpTVmFsdWUs
IGJvb2wpIHsgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0dXJuIGZhbHNlOyB9CiAg
ICAgc3RhdGljIGJvb2wgc2V0UHJvdG90eXBlKEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBK
U1ZhbHVlLCBib29sKSB7IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7IHJldHVybiBmYWxz
ZTsgfQorICAgIHN0YXRpYyBib29sIGRlZmluZU93blByb3BlcnR5VmlhUHV0KEpTT2JqZWN0Kiwg
SlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYp
IHsgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0dXJuIGZhbHNlOyB9CiAgICAgc3Rh
dGljIGJvb2wgZGVmaW5lT3duUHJvcGVydHkoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFBy
b3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlEZXNjcmlwdG9yJiwgYm9vbCkgeyBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOyByZXR1cm4gZmFsc2U7IH0KICAgICBzdGF0aWMgYm9vbCBkZWxl
dGVQcm9wZXJ0eShKU0NlbGwqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwgRGVsZXRl
UHJvcGVydHlTbG90JikgeyBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyByZXR1cm4gZmFs
c2U7IH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAJ
KHJldmlzaW9uIDI3MTk3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJy
YXkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzIsMTYgKzIzMiwxMiBAQCBib29sIEpTQXJyYXk6
OmdldE93blByb3BlcnR5U2xvdChKU09iamVjCiB9CiAKIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21h
MjYyLyNzZWMtYXJyYXktZXhvdGljLW9iamVjdHMtZGVmaW5lb3ducHJvcGVydHktcC1kZXNjCi1i
b29sIEpTQXJyYXk6OnB1dChKU0NlbGwqIGNlbGwsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFB1dFByb3BlcnR5
U2xvdCYgc2xvdCkKK2Jvb2wgSlNBcnJheTo6ZGVmaW5lT3duUHJvcGVydHlWaWFQdXQoSlNPYmpl
Y3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIHBy
b3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBzbG90KQogewogICAg
IFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CiAKLSAgICBKU0FycmF5KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQXJy
YXkqPihjZWxsKTsKLQotICAgIGlmIChVTkxJS0VMWShpc1RoaXNWYWx1ZUFsdGVyZWQoc2xvdCwg
dGhpc09iamVjdCkpKQotICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIG9yZGluYXJ5
U2V0U2xvdyhnbG9iYWxPYmplY3QsIHRoaXNPYmplY3QsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNs
b3QudGhpc1ZhbHVlKCksIHNsb3QuaXNTdHJpY3RNb2RlKCkpKTsKLQorICAgIEpTQXJyYXkqIHRo
aXNPYmplY3QgPSBqc0Nhc3Q8SlNBcnJheSo+KG9iamVjdCk7CiAgICAgdGhpc09iamVjdC0+ZW5z
dXJlV3JpdGFibGUodm0pOwogCiAgICAgaWYgKHByb3BlcnR5TmFtZSA9PSB2bS5wcm9wZXJ0eU5h
bWVzLT5sZW5ndGgpIHsKQEAgLTI2Miw3ICsyNTgsNyBAQCBib29sIEpTQXJyYXk6OnB1dChKU0Nl
bGwqIGNlbGwsIEpTR2xvYmFsCiAgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgdGhp
c09iamVjdC0+c2V0TGVuZ3RoKGdsb2JhbE9iamVjdCwgbmV3TGVuZ3RoLCBzbG90LmlzU3RyaWN0
TW9kZSgpKSk7CiAgICAgfQogCi0gICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU09iamVj
dDo6cHV0KHRoaXNPYmplY3QsIGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xv
dCkpOworICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgSlNPYmplY3Q6OmRlZmluZU93blBy
b3BlcnR5VmlhUHV0KHRoaXNPYmplY3QsIGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1
ZSwgc2xvdCkpOwogfQogCiBib29sIEpTQXJyYXk6OmRlbGV0ZVByb3BlcnR5KEpTQ2VsbCogY2Vs
bCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFt
ZSwgRGVsZXRlUHJvcGVydHlTbG90JiBzbG90KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNBcnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTQXJyYXkuaAkocmV2aXNpb24gMjcxOTc1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNBcnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC04OCw2ICs4OCw3IEBAIHB1
YmxpYzoKIAogICAgIHN0YXRpYyB2b2lkIGVhZ2VybHlJbml0aWFsaXplQnV0dGVyZmx5KE9iamVj
dEluaXRpYWxpemF0aW9uU2NvcGUmLCBKU0FycmF5KiwgdW5zaWduZWQgaW5pdGlhbExlbmd0aCk7
CiAKKyAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9vbCBkZWZpbmVPd25Qcm9wZXJ0eVZp
YVB1dChKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQ
dXRQcm9wZXJ0eVNsb3QmKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9vbCBkZWZp
bmVPd25Qcm9wZXJ0eShKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBj
b25zdCBQcm9wZXJ0eURlc2NyaXB0b3ImLCBib29sIHRocm93RXhjZXB0aW9uKTsKIAogICAgIEpT
X0VYUE9SVF9QUklWQVRFIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU09iamVjdCos
IEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKQEAgLTE4Niw4
ICsxODcsNiBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIEFTU0VSVF9XSVRIX01FU1NBR0UodHlwZSgp
ID09IEFycmF5VHlwZSB8fCB0eXBlKCkgPT0gRGVyaXZlZEFycmF5VHlwZSwgIkluc3RhbmNlIGlu
aGVyaXRpbmcgSlNBcnJheSBzaG91bGQgaGF2ZSBlaXRoZXIgQXJyYXlUeXBlIG9yIERlcml2ZWRB
cnJheVR5cGUiKTsKICAgICB9CiAKLSAgICBzdGF0aWMgYm9vbCBwdXQoSlNDZWxsKiwgSlNHbG9i
YWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOwotCiAg
ICAgc3RhdGljIGJvb2wgZGVsZXRlUHJvcGVydHkoSlNDZWxsKiwgSlNHbG9iYWxPYmplY3QqLCBQ
cm9wZXJ0eU5hbWUsIERlbGV0ZVByb3BlcnR5U2xvdCYpOwogICAgIEpTX0VYUE9SVF9QUklWQVRF
IHN0YXRpYyB2b2lkIGdldE93blNwZWNpYWxQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgSlNHbG9i
YWxPYmplY3QqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIERvbnRFbnVtUHJvcGVydGllc01vZGUpOwog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1
ZmZlclZpZXcuY3BwCShyZXZpc2lvbiAyNzE5NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2OSwxOCAr
MTY5LDYgQEAgdm9pZCBKU0FycmF5QnVmZmVyVmlldzo6dmlzaXRDaGlsZHJlbihKUwogICAgIH0K
IH0KIAotYm9vbCBKU0FycmF5QnVmZmVyVmlldzo6cHV0KAotICAgIEpTQ2VsbCogY2VsbCwgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNW
YWx1ZSB2YWx1ZSwKLSAgICBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCi17Ci0gICAgSlNBcnJheUJ1
ZmZlclZpZXcqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNBcnJheUJ1ZmZlclZpZXcqPihjZWxsKTsK
LQotICAgIGlmIChVTkxJS0VMWShpc1RoaXNWYWx1ZUFsdGVyZWQoc2xvdCwgdGhpc09iamVjdCkp
KQotICAgICAgICByZXR1cm4gb3JkaW5hcnlTZXRTbG93KGdsb2JhbE9iamVjdCwgdGhpc09iamVj
dCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdC50aGlzVmFsdWUoKSwgc2xvdC5pc1N0cmljdE1v
ZGUoKSk7Ci0gICAgCi0gICAgcmV0dXJuIEJhc2U6OnB1dCh0aGlzT2JqZWN0LCBnbG9iYWxPYmpl
Y3QsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpOwotfQotCiBBcnJheUJ1ZmZlciogSlNBcnJh
eUJ1ZmZlclZpZXc6OnVuc2hhcmVkQnVmZmVyKCkKIHsKICAgICBBcnJheUJ1ZmZlciogcmVzdWx0
ID0gcG9zc2libHlTaGFyZWRCdWZmZXIoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuaAkocmV2aXNpb24gMjcxOTc1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTY5LDggKzE2OSw2IEBAIHByb3RlY3RlZDoKICAgICAKICAgICBKU19FWFBP
UlRfUFJJVkFURSBKU0FycmF5QnVmZmVyVmlldyhWTSYsIENvbnN0cnVjdGlvbkNvbnRleHQmKTsK
ICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7Ci0gICAgCi0g
ICAgc3RhdGljIGJvb2wgcHV0KEpTQ2VsbCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1l
LCBKU1ZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmKTsKIAogICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQ0pTVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTQ0pTVmFsdWUuY3BwCShyZXZpc2lvbiAyNzE5NzUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NKU1ZhbHVlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjE5LDcgKzIxOSw3IEBAIEpTT2JqZWN0KiBKU1ZhbHVlOjpzeW50aGVzaXplUHJvdG90
eXBlKEoKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotLy8gRUNNQSA4LjcuMgorLy8gaHR0cHM6
Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vcmRpbmFyeXNldAogYm9vbCBKU1ZhbHVlOjpwdXRUb1By
aW1pdGl2ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWUgcHJvcGVy
dHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgVk0m
IHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwpAQCAtMjMzLDYzICsyMzMsMTEgQEAgYm9vbCBKU1Zh
bHVlOjpwdXRUb1ByaW1pdGl2ZShKU0dsb2JhbE9iagogICAgIEVYQ0VQVElPTl9BU1NFUlQoISFz
Y29wZS5leGNlcHRpb24oKSA9PSAhb2JqKTsKICAgICBpZiAoVU5MSUtFTFkoIW9iaikpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICBKU1ZhbHVlIHByb3RvdHlwZTsKLSAgICBpZiAocHJvcGVy
dHlOYW1lICE9IHZtLnByb3BlcnR5TmFtZXMtPnVuZGVyc2NvcmVQcm90bykgewotICAgICAgICB3
aGlsZSAodHJ1ZSkgewotICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBvYmotPnN0
cnVjdHVyZSh2bSk7Ci0gICAgICAgICAgICBpZiAoc3RydWN0dXJlLT5oYXNSZWFkT25seU9yR2V0
dGVyU2V0dGVyUHJvcGVydGllc0V4Y2x1ZGluZ1Byb3RvKCkgfHwgc3RydWN0dXJlLT50eXBlSW5m
bygpLmhhc1B1dFByb3BlcnR5U2VjdXJpdHlDaGVjaygpKQotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgaWYgKG9iai0+dHlwZSgpID09IFByb3h5T2JqZWN0VHlwZSkgewotICAg
ICAgICAgICAgICAgIGF1dG8qIHByb3h5ID0ganNDYXN0PFByb3h5T2JqZWN0Kj4ob2JqKTsKLSAg
ICAgICAgICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIHByb3h5LT5Qcm94eU9iamVj
dDo6cHV0KHByb3h5LCBnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpKTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHByb3RvdHlwZSA9IG9iai0+Z2V0UHJvdG90eXBl
KHZtLCBnbG9iYWxPYmplY3QpOwotICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgZmFsc2UpOwotCi0gICAgICAgICAgICBpZiAocHJvdG90eXBlLmlzTnVsbCgpKQotICAgICAg
ICAgICAgICAgIHJldHVybiB0eXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgc2xvdC5pc1N0
cmljdE1vZGUoKSwgUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpOwotICAgICAgICAgICAgb2Jq
ID0gYXNPYmplY3QocHJvdG90eXBlKTsKLSAgICAgICAgfQotICAgIH0KIAotICAgIGZvciAoOyA7
IG9iaiA9IGFzT2JqZWN0KHByb3RvdHlwZSkpIHsKLSAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUgPSBvYmotPnN0cnVjdHVyZSh2bSk7Ci0gICAgICAgIGlmIChVTkxJS0VMWShzdHJ1Y3R1cmUt
PnR5cGVJbmZvKCkuaGFzUHV0UHJvcGVydHlTZWN1cml0eUNoZWNrKCkpKSB7Ci0gICAgICAgICAg
ICBvYmotPm1ldGhvZFRhYmxlKHZtKS0+ZG9QdXRQcm9wZXJ0eVNlY3VyaXR5Q2hlY2sob2JqLCBn
bG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgc2xvdCk7Ci0gICAgICAgICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCBmYWxzZSk7Ci0gICAgICAgIH0KLSAgICAgICAgdW5zaWduZWQgYXR0
cmlidXRlczsKLSAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0dXJlLT5nZXQo
dm0sIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcyk7Ci0gICAgICAgIGlmIChvZmZzZXQgIT0gaW52
YWxpZE9mZnNldCkgewotICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZXMgJiBQcm9wZXJ0eUF0dHJp
YnV0ZTo6UmVhZE9ubHkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHR5cGVFcnJvcihnbG9iYWxP
YmplY3QsIHNjb3BlLCBzbG90LmlzU3RyaWN0TW9kZSgpLCBSZWFkb25seVByb3BlcnR5V3JpdGVF
cnJvcik7Ci0KLSAgICAgICAgICAgIEpTVmFsdWUgZ3MgPSBvYmotPmdldERpcmVjdChvZmZzZXQp
OwotICAgICAgICAgICAgaWYgKGdzLmlzR2V0dGVyU2V0dGVyKCkpCi0gICAgICAgICAgICAgICAg
UkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBjYWxsU2V0dGVyKGdsb2JhbE9iamVjdCwgKnRoaXMs
IGdzLCB2YWx1ZSwgc2xvdC5pc1N0cmljdE1vZGUoKSA/IEVDTUFNb2RlOjpzdHJpY3QoKSA6IEVD
TUFNb2RlOjpzbG9wcHkoKSkpOwotCi0gICAgICAgICAgICBpZiAoZ3MuaXNDdXN0b21HZXR0ZXJT
ZXR0ZXIoKSkgewotICAgICAgICAgICAgICAgIGF1dG8gc2V0dGVyID0ganNDYXN0PEN1c3RvbUdl
dHRlclNldHRlcio+KGdzLmFzQ2VsbCgpKS0+c2V0dGVyKCk7Ci0gICAgICAgICAgICAgICAgYm9v
bCBpc0FjY2Vzc29yID0gYXR0cmlidXRlcyAmIFByb3BlcnR5QXR0cmlidXRlOjpDdXN0b21BY2Nl
c3NvcjsKLSAgICAgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IGNhbGxDdXN0b21TZXR0ZXIoZ2xv
YmFsT2JqZWN0LCBzZXR0ZXIsIGlzQWNjZXNzb3IsIG9iaiwgc2xvdC50aGlzVmFsdWUoKSwgdmFs
dWUpOwotICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgIT0gVHJpU3RhdGU6OkluZGV0ZXJtaW5h
dGUpCi0gICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgcmVzdWx0
ID09IFRyaVN0YXRlOjpUcnVlKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gSWYg
dGhlcmUncyBhbiBleGlzdGluZyBwcm9wZXJ0eSBvbiB0aGUgb2JqZWN0IG9yIG9uZSBvZiBpdHMg
Ci0gICAgICAgICAgICAvLyBwcm90b3R5cGVzIGl0IHNob3VsZCBiZSByZXBsYWNlZCwgc28gYnJl
YWsgaGVyZS4KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGlmIChvYmot
PnR5cGUoKSA9PSBQcm94eU9iamVjdFR5cGUpIHsKLSAgICAgICAgICAgIGF1dG8qIHByb3h5ID0g
anNDYXN0PFByb3h5T2JqZWN0Kj4ob2JqKTsKLSAgICAgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVS
TihzY29wZSwgcHJveHktPlByb3h5T2JqZWN0OjpwdXQocHJveHksIGdsb2JhbE9iamVjdCwgcHJv
cGVydHlOYW1lLCB2YWx1ZSwgc2xvdCkpOwotICAgICAgICB9Ci0gICAgICAgIHByb3RvdHlwZSA9
IG9iai0+Z2V0UHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QpOwotICAgICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCBmYWxzZSk7Ci0gICAgICAgIGlmIChwcm90b3R5cGUuaXNOdWxsKCkp
Ci0gICAgICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgCisgICAgaWYgKCFvYmotPmNhblBlcmZv
cm1GYXN0UHV0SW5saW5lKHZtLCBwcm9wZXJ0eU5hbWUpKQorICAgICAgICBSRUxFQVNFX0FORF9S
RVRVUk4oc2NvcGUsIG9iai0+cHV0SW5saW5lU2xvdyhnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFt
ZSwgdmFsdWUsIHNsb3QpKTsKKworICAgIC8vIEZJWE1FOiBGb3IgYW4gYXR0ZW1wdCB0byBjcmVh
dGUgYSBwcm9wZXJ0eSBvbiBhIHByaW1pdGl2ZSwgdGhlIGVycm9yIG1lc3NhZ2UgaXMgbWlzbGVh
ZGluZy4KICAgICByZXR1cm4gdHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsIHNsb3QuaXNT
dHJpY3RNb2RlKCksIFJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9yKTsKIH0KIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuY3BwCShyZXZpc2lvbiAyNzE5NzUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yMDEsMTEgKzIwMSw2IEBAIGJvb2wgSlNDZWxsOjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUlu
ZGV4KEoKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgSlNDZWxsOjpkb1B1dFByb3BlcnR5
U2VjdXJpdHlDaGVjayhKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBQ
dXRQcm9wZXJ0eVNsb3QmKQotewotICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci19
Ci0KIHZvaWQgSlNDZWxsOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgSlNHbG9iYWxP
YmplY3QqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIERvbnRFbnVtUHJvcGVydGllc01vZGUpCiB7CiAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTIzOSw2ICsyMzQsMTIgQEAgYm9v
bCBKU0NlbGw6OmN1c3RvbUhhc0luc3RhbmNlKEpTT2JqZWN0KgogICAgIHJldHVybiBmYWxzZTsK
IH0KIAorYm9vbCBKU0NlbGw6OmRlZmluZU93blByb3BlcnR5VmlhUHV0KEpTT2JqZWN0KiwgSlNH
bG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpCit7
CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKIGJvb2wgSlNDZWxsOjpkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCosIEpTR2xvYmFsT2Jq
ZWN0KiwgUHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eURlc2NyaXB0b3ImLCBib29sKQogewog
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0NlbGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0NlbGwuaAkocmV2aXNpb24gMjcxOTc1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1NiwxMCArMjU2LDEw
IEBAIHByb3RlY3RlZDoKICAgICBzdGF0aWMgU3RyaW5nIGNsYXNzTmFtZShjb25zdCBKU09iamVj
dCosIFZNJik7CiAgICAgc3RhdGljIFN0cmluZyB0b1N0cmluZ05hbWUoY29uc3QgSlNPYmplY3Qq
LCBKU0dsb2JhbE9iamVjdCopOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBib29sIGN1
c3RvbUhhc0luc3RhbmNlKEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlKTsKKyAg
ICBzdGF0aWMgYm9vbCBkZWZpbmVPd25Qcm9wZXJ0eVZpYVB1dChKU09iamVjdCosIEpTR2xvYmFs
T2JqZWN0KiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmKTsKICAgICBz
dGF0aWMgYm9vbCBkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0Kiwg
UHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eURlc2NyaXB0b3ImLCBib29sIHNob3VsZFRocm93
KTsKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqLCBKU0dsb2Jh
bE9iamVjdCosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CiAgICAgc3RhdGljIGJvb2wg
Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgdW5z
aWduZWQgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKLSAgICBzdGF0aWMgTk9fUkVUVVJO
X0RVRV9UT19DUkFTSCB2b2lkIGRvUHV0UHJvcGVydHlTZWN1cml0eUNoZWNrKEpTT2JqZWN0Kiwg
SlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIFB1dFByb3BlcnR5U2xvdCYpOwogCiBwcml2
YXRlOgogICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0N1c3RvbUdldHRlclNldHRlckZ1bmN0aW9uLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0N1c3RvbUdl
dHRlclNldHRlckZ1bmN0aW9uLmNwcAkocmV2aXNpb24gMjcxOTc1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNDdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbi5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI2LDgwICsyNiw4MyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1
ZGUgIkpTQ3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rpb24uaCIKIAotI2luY2x1ZGUgIkN1c3RvbUdl
dHRlclNldHRlci5oIgogI2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgiCiAKIG5hbWVzcGFj
ZSBKU0MgewogCi1jb25zdCBDbGFzc0luZm8gSlNDdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbjo6
c19pbmZvID0geyAiRnVuY3Rpb24iLCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBD
UkVBVEVfTUVUSE9EX1RBQkxFKEpTQ3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rpb24pIH07Citjb25z
dCBDbGFzc0luZm8gSlNDdXN0b21HZXR0ZXJGdW5jdGlvbjo6c19pbmZvID0geyAiRnVuY3Rpb24i
LCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpT
Q3VzdG9tR2V0dGVyRnVuY3Rpb24pIH07CitzdGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElP
TihjdXN0b21HZXR0ZXJGdW5jdGlvbkNhbGwpOwogCi1zdGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9G
VU5DVElPTihjdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbkNhbGwpOwotCi1KU0NfREVGSU5FX0hP
U1RfRlVOQ1RJT04oY3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rpb25DYWxsLCAoSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpKQorSlNDX0RFRklORV9IT1NU
X0ZVTkNUSU9OKGN1c3RvbUdldHRlckZ1bmN0aW9uQ2FsbCwgKEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKSkKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxP
YmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwog
Ci0gICAgSlNDdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbiogY3VzdG9tR2V0dGVyU2V0dGVyRnVu
Y3Rpb24gPSBqc0Nhc3Q8SlNDdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbio+KGNhbGxGcmFtZS0+
anNDYWxsZWUoKSk7Ci0gICAgQ3VzdG9tR2V0dGVyU2V0dGVyKiBjdXN0b21HZXR0ZXJTZXR0ZXIg
PSBjdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbi0+Y3VzdG9tR2V0dGVyU2V0dGVyKCk7CisgICAg
SlNDdXN0b21HZXR0ZXJGdW5jdGlvbiogY3VzdG9tR2V0dGVyRnVuY3Rpb24gPSBqc0Nhc3Q8SlND
dXN0b21HZXR0ZXJGdW5jdGlvbio+KGNhbGxGcmFtZS0+anNDYWxsZWUoKSk7CiAgICAgSlNWYWx1
ZSB0aGlzVmFsdWUgPSBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpOwogCi0gICAgaWYgKGN1c3RvbUdl
dHRlclNldHRlckZ1bmN0aW9uLT5pc1NldHRlcigpKSB7Ci0gICAgICAgIEN1c3RvbUdldHRlclNl
dHRlcjo6Q3VzdG9tU2V0dGVyIHNldHRlciA9IGN1c3RvbUdldHRlclNldHRlci0+c2V0dGVyKCk7
Ci0gICAgICAgIEFTU0VSVChzZXR0ZXIpOwotICAgICAgICBzY29wZS5yZWxlYXNlKCk7Ci0gICAg
ICAgIHNldHRlcihnbG9iYWxPYmplY3QsIEpTVmFsdWU6OmVuY29kZSh0aGlzVmFsdWUpLCBKU1Zh
bHVlOjplbmNvZGUoY2FsbEZyYW1lLT5hcmd1bWVudCgwKSkpOwotICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotICAgIH0KKyAgICBHZXRWYWx1ZUZ1bmMgZ2V0
dGVyID0gY3VzdG9tR2V0dGVyRnVuY3Rpb24tPmdldHRlcigpOworICAgIEFTU0VSVChnZXR0ZXIp
OwogCi0gICAgaWYgKGN1c3RvbUdldHRlclNldHRlci0+aW5oZXJpdHM8RE9NQXR0cmlidXRlR2V0
dGVyU2V0dGVyPih2bSkpIHsKLSAgICAgICAgYXV0byBkb21BdHRyaWJ1dGUgPSBqc0Nhc3Q8RE9N
QXR0cmlidXRlR2V0dGVyU2V0dGVyKj4oY3VzdG9tR2V0dGVyU2V0dGVyKS0+ZG9tQXR0cmlidXRl
KCk7Ci0gICAgICAgIGlmICghdGhpc1ZhbHVlLmluaGVyaXRzKHZtLCBkb21BdHRyaWJ1dGUuY2xh
c3NJbmZvKSkKLSAgICAgICAgICAgIHJldHVybiB0aHJvd1ZNRE9NQXR0cmlidXRlR2V0dGVyVHlw
ZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsIGRvbUF0dHJpYnV0ZS5jbGFzc0luZm8sIGN1c3Rv
bUdldHRlclNldHRlckZ1bmN0aW9uLT5wcm9wZXJ0eU5hbWUoKSk7CisgICAgaWYgKGF1dG8gZG9t
QXR0cmlidXRlID0gY3VzdG9tR2V0dGVyRnVuY3Rpb24tPmRvbUF0dHJpYnV0ZSgpKSB7CisgICAg
ICAgIGlmICghdGhpc1ZhbHVlLmluaGVyaXRzKHZtLCBkb21BdHRyaWJ1dGUtPmNsYXNzSW5mbykp
CisgICAgICAgICAgICByZXR1cm4gdGhyb3dWTURPTUF0dHJpYnV0ZUdldHRlclR5cGVFcnJvcihn
bG9iYWxPYmplY3QsIHNjb3BlLCBkb21BdHRyaWJ1dGUtPmNsYXNzSW5mbywgY3VzdG9tR2V0dGVy
RnVuY3Rpb24tPnByb3BlcnR5TmFtZSgpKTsKICAgICB9CiAKLSAgICBSRUxFQVNFX0FORF9SRVRV
Uk4oc2NvcGUsIGN1c3RvbUdldHRlclNldHRlci0+Z2V0dGVyKCkoZ2xvYmFsT2JqZWN0LCBKU1Zh
bHVlOjplbmNvZGUodGhpc1ZhbHVlKSwgY3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rpb24tPnByb3Bl
cnR5TmFtZSgpKSk7CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBnZXR0ZXIoZ2xvYmFs
T2JqZWN0LCBKU1ZhbHVlOjplbmNvZGUodGhpc1ZhbHVlKSwgY3VzdG9tR2V0dGVyRnVuY3Rpb24t
PnByb3BlcnR5TmFtZSgpKSk7CiB9CiAKLUpTQ3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rpb246OkpT
Q3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rpb24oVk0mIHZtLCBOYXRpdmVFeGVjdXRhYmxlKiBleGVj
dXRhYmxlLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSwgY29uc3QgVHlwZSB0eXBlLCBjb25zdCBQcm9wZXJ0eU5hbWUmIHByb3BlcnR5TmFtZSkKK0pT
Q3VzdG9tR2V0dGVyRnVuY3Rpb246OkpTQ3VzdG9tR2V0dGVyRnVuY3Rpb24oVk0mIHZtLCBOYXRp
dmVFeGVjdXRhYmxlKiBleGVjdXRhYmxlLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSwgR2V0VmFsdWVGdW5jIGdldHRlciwgT3B0aW9uYWw8RE9NQXR0
cmlidXRlQW5ub3RhdGlvbj4gZG9tQXR0cmlidXRlLCBjb25zdCBQcm9wZXJ0eU5hbWUmIHByb3Bl
cnR5TmFtZSkKICAgICA6IEJhc2Uodm0sIGV4ZWN1dGFibGUsIGdsb2JhbE9iamVjdCwgc3RydWN0
dXJlKQotICAgICwgbV90eXBlKHR5cGUpCisgICAgLCBtX2dldHRlcihnZXR0ZXIpCisgICAgLCBt
X2RvbUF0dHJpYnV0ZShkb21BdHRyaWJ1dGUpCiAgICAgLCBtX3Byb3BlcnR5TmFtZShwcm9wZXJ0
eU5hbWUpCiB7CiB9CiAKLUpTQ3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rpb24qIEpTQ3VzdG9tR2V0
dGVyU2V0dGVyRnVuY3Rpb246OmNyZWF0ZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEN1c3RvbUdldHRlclNldHRlciogZ2V0dGVyU2V0dGVyLCBjb25zdCBUeXBlIHR5cGUs
IGNvbnN0IFByb3BlcnR5TmFtZSYgcHJvcGVydHlOYW1lKQorSlNDdXN0b21HZXR0ZXJGdW5jdGlv
biogSlNDdXN0b21HZXR0ZXJGdW5jdGlvbjo6Y3JlYXRlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgR2V0VmFsdWVGdW5jIGdldHRlciwgT3B0aW9uYWw8RE9NQXR0cmlidXRl
QW5ub3RhdGlvbj4gZG9tQXR0cmlidXRlLCBjb25zdCBQcm9wZXJ0eU5hbWUmIHByb3BlcnR5TmFt
ZSkKIHsKLSAgICBBU1NFUlQodHlwZSA9PSBUeXBlOjpHZXR0ZXIgPyAhIWdldHRlclNldHRlci0+
Z2V0dGVyKCkgOiAhIWdldHRlclNldHRlci0+c2V0dGVyKCkpOwotCi0gICAgY29uc3QgY2hhciog
cHJlZml4ID0gKHR5cGUgPT0gVHlwZTo6R2V0dGVyKSA/ICJnZXQgIiA6ICJzZXQgIjsKLSAgICBT
dHJpbmcgbmFtZSA9IG1ha2VTdHJpbmcocHJlZml4LCBTdHJpbmcocHJvcGVydHlOYW1lLnB1Ymxp
Y05hbWUoKSkpOwotCi0gICAgTmF0aXZlRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IHZtLmdldEhv
c3RGdW5jdGlvbihjdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbkNhbGwsIGNhbGxIb3N0RnVuY3Rp
b25Bc0NvbnN0cnVjdG9yLCBTdHJpbmcocHJvcGVydHlOYW1lLnB1YmxpY05hbWUoKSkpOwotCi0g
ICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBnbG9iYWxPYmplY3QtPmN1c3RvbUdldHRlclNldHRl
ckZ1bmN0aW9uU3RydWN0dXJlKCk7Ci0gICAgSlNDdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbiog
ZnVuY3Rpb24gPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU0N1c3RvbUdldHRlclNldHRl
ckZ1bmN0aW9uPih2bS5oZWFwKSkgSlNDdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbih2bSwgZXhl
Y3V0YWJsZSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUsIHR5cGUsIHByb3BlcnR5TmFtZSk7Cisg
ICAgTmF0aXZlRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IHZtLmdldEhvc3RGdW5jdGlvbihjdXN0
b21HZXR0ZXJGdW5jdGlvbkNhbGwsIGNhbGxIb3N0RnVuY3Rpb25Bc0NvbnN0cnVjdG9yLCBTdHJp
bmcocHJvcGVydHlOYW1lLnB1YmxpY05hbWUoKSkpOworICAgIFN0cnVjdHVyZSogc3RydWN0dXJl
ID0gZ2xvYmFsT2JqZWN0LT5jdXN0b21HZXR0ZXJGdW5jdGlvblN0cnVjdHVyZSgpOworICAgIEpT
Q3VzdG9tR2V0dGVyRnVuY3Rpb24qIGZ1bmN0aW9uID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNl
bGw8SlNDdXN0b21HZXR0ZXJGdW5jdGlvbj4odm0uaGVhcCkpIEpTQ3VzdG9tR2V0dGVyRnVuY3Rp
b24odm0sIGV4ZWN1dGFibGUsIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlLCBnZXR0ZXIsIGRvbUF0
dHJpYnV0ZSwgcHJvcGVydHlOYW1lKTsKIAogICAgIC8vIENhbid0IGRvIHRoaXMgZHVyaW5nIGlu
aXRpYWxpemF0aW9uIGJlY2F1c2UgZ2V0SG9zdEZ1bmN0aW9uIG1pZ2h0IGRvIGEgR0MgYWxsb2Nh
dGlvbi4KLSAgICBmdW5jdGlvbi0+ZmluaXNoQ3JlYXRpb24odm0sIGV4ZWN1dGFibGUsIGdldHRl
clNldHRlciwgbmFtZSk7CisgICAgU3RyaW5nIG5hbWUgPSBtYWtlU3RyaW5nKCJnZXQgIiwgU3Ry
aW5nKHByb3BlcnR5TmFtZS5wdWJsaWNOYW1lKCkpKTsKKyAgICBmdW5jdGlvbi0+ZmluaXNoQ3Jl
YXRpb24odm0sIGV4ZWN1dGFibGUsIDAsIG5hbWUpOwogICAgIHJldHVybiBmdW5jdGlvbjsKIH0K
IAotdm9pZCBKU0N1c3RvbUdldHRlclNldHRlckZ1bmN0aW9uOjp2aXNpdENoaWxkcmVuKEpTQ2Vs
bCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCitjb25zdCBDbGFzc0luZm8gSlNDdXN0b21T
ZXR0ZXJGdW5jdGlvbjo6c19pbmZvID0geyAiRnVuY3Rpb24iLCAmQmFzZTo6c19pbmZvLCBudWxs
cHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTQ3VzdG9tU2V0dGVyRnVuY3Rpb24p
IH07CitzdGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElPTihjdXN0b21TZXR0ZXJGdW5jdGlv
bkNhbGwpOworCitKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oY3VzdG9tU2V0dGVyRnVuY3Rpb25D
YWxsLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUp
KQogewotICAgIEpTQ3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rpb24qIHRoaXNPYmplY3QgPSBqc0Nh
c3Q8SlNDdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbio+KGNlbGwpOwotICAgIEFTU0VSVF9HQ19P
QkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKLSAgICBCYXNlOjp2aXNpdENoaWxk
cmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOworICAgIEpTQ3VzdG9tU2V0dGVyRnVuY3Rpb24qIGN1
c3RvbVNldHRlckZ1bmN0aW9uID0ganNDYXN0PEpTQ3VzdG9tU2V0dGVyRnVuY3Rpb24qPihjYWxs
RnJhbWUtPmpzQ2FsbGVlKCkpOworICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gY2FsbEZyYW1lLT50
aGlzVmFsdWUoKTsKKworICAgIFB1dFZhbHVlRnVuYyBzZXR0ZXIgPSBjdXN0b21TZXR0ZXJGdW5j
dGlvbi0+c2V0dGVyKCk7CisgICAgQVNTRVJUKHNldHRlcik7CiAKLSAgICB2aXNpdG9yLmFwcGVu
ZCh0aGlzT2JqZWN0LT5tX2dldHRlclNldHRlcik7CisgICAgc2V0dGVyKGdsb2JhbE9iamVjdCwg
SlNWYWx1ZTo6ZW5jb2RlKHRoaXNWYWx1ZSksIEpTVmFsdWU6OmVuY29kZShjYWxsRnJhbWUtPmFy
Z3VtZW50KDApKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
IH0KIAotdm9pZCBKU0N1c3RvbUdldHRlclNldHRlckZ1bmN0aW9uOjpmaW5pc2hDcmVhdGlvbihW
TSYgdm0sIE5hdGl2ZUV4ZWN1dGFibGUqIGV4ZWN1dGFibGUsIEN1c3RvbUdldHRlclNldHRlciog
Z2V0dGVyU2V0dGVyLCBjb25zdCBTdHJpbmcmIG5hbWUpCitKU0N1c3RvbVNldHRlckZ1bmN0aW9u
OjpKU0N1c3RvbVNldHRlckZ1bmN0aW9uKFZNJiB2bSwgTmF0aXZlRXhlY3V0YWJsZSogZXhlY3V0
YWJsZSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUs
IFB1dFZhbHVlRnVuYyBzZXR0ZXIpCisgICAgOiBCYXNlKHZtLCBleGVjdXRhYmxlLCBnbG9iYWxP
YmplY3QsIHN0cnVjdHVyZSkKKyAgICAsIG1fc2V0dGVyKHNldHRlcikKK3sKK30KKworSlNDdXN0
b21TZXR0ZXJGdW5jdGlvbiogSlNDdXN0b21TZXR0ZXJGdW5jdGlvbjo6Y3JlYXRlKFZNJiB2bSwg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHV0VmFsdWVGdW5jIHNldHRlciwgY29uc3Qg
UHJvcGVydHlOYW1lJiBwcm9wZXJ0eU5hbWUpCiB7Ci0gICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24o
dm0sIGV4ZWN1dGFibGUsIGlzU2V0dGVyKCksIG5hbWUpOwotICAgIEFTU0VSVChpbmhlcml0cyh2
bSwgaW5mbygpKSk7Ci0gICAgQVNTRVJUKGdldHRlclNldHRlcik7Ci0gICAgbV9nZXR0ZXJTZXR0
ZXIuc2V0KHZtLCB0aGlzLCBnZXR0ZXJTZXR0ZXIpOworICAgIE5hdGl2ZUV4ZWN1dGFibGUqIGV4
ZWN1dGFibGUgPSB2bS5nZXRIb3N0RnVuY3Rpb24oY3VzdG9tU2V0dGVyRnVuY3Rpb25DYWxsLCBj
YWxsSG9zdEZ1bmN0aW9uQXNDb25zdHJ1Y3RvciwgU3RyaW5nKHByb3BlcnR5TmFtZS5wdWJsaWNO
YW1lKCkpKTsKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGdsb2JhbE9iamVjdC0+Y3VzdG9t
U2V0dGVyRnVuY3Rpb25TdHJ1Y3R1cmUoKTsKKyAgICBKU0N1c3RvbVNldHRlckZ1bmN0aW9uKiBm
dW5jdGlvbiA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTQ3VzdG9tU2V0dGVyRnVuY3Rp
b24+KHZtLmhlYXApKSBKU0N1c3RvbVNldHRlckZ1bmN0aW9uKHZtLCBleGVjdXRhYmxlLCBnbG9i
YWxPYmplY3QsIHN0cnVjdHVyZSwgc2V0dGVyKTsKKworICAgIC8vIENhbid0IGRvIHRoaXMgZHVy
aW5nIGluaXRpYWxpemF0aW9uIGJlY2F1c2UgZ2V0SG9zdEZ1bmN0aW9uIG1pZ2h0IGRvIGEgR0Mg
YWxsb2NhdGlvbi4KKyAgICBTdHJpbmcgbmFtZSA9IG1ha2VTdHJpbmcoInNldCAiLCBTdHJpbmco
cHJvcGVydHlOYW1lLnB1YmxpY05hbWUoKSkpOworICAgIGZ1bmN0aW9uLT5maW5pc2hDcmVhdGlv
bih2bSwgZXhlY3V0YWJsZSwgMSwgbmFtZSk7CisgICAgcmV0dXJuIGZ1bmN0aW9uOwogfQogCiB9
IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
Q3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0N1c3RvbUdldHRlclNldHRlckZ1bmN0aW9uLmgJKHJldmlzaW9u
IDI3MTk3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ3VzdG9tR2V0dGVy
U2V0dGVyRnVuY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMjksMjEgKzI5LDE1IEBACiAKIG5h
bWVzcGFjZSBKU0MgewogCi1jbGFzcyBDdXN0b21HZXR0ZXJTZXR0ZXI7Ci0KLWNsYXNzIEpTQ3Vz
dG9tR2V0dGVyU2V0dGVyRnVuY3Rpb24gZmluYWwgOiBwdWJsaWMgSlNGdW5jdGlvbiB7CitjbGFz
cyBKU0N1c3RvbUdldHRlckZ1bmN0aW9uIGZpbmFsIDogcHVibGljIEpTRnVuY3Rpb24gewogcHVi
bGljOgogICAgIHR5cGVkZWYgSlNGdW5jdGlvbiBCYXNlOwotCi0gICAgLy8gVGhlIFR5cGUgaXMg
c2V0IHRvIHRoZSBudW1iZXIgb2YgYXJndW1lbnRzIHRoZSByZXN1bHRhbnQgZnVuY3Rpb24gd2ls
bCBoYXZlLgotICAgIGVudW0gY2xhc3MgVHlwZSB7IEdldHRlciA9IDAsIFNldHRlciA9IDEgfTsK
LQogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpT
dHJ1Y3R1cmVGbGFnczsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFj
ZUFjY2VzcyBtb2RlPgogICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZt
KQogICAgIHsKLSAgICAgICAgcmV0dXJuIHZtLmN1c3RvbUdldHRlclNldHRlckZ1bmN0aW9uU3Bh
Y2U8bW9kZT4oKTsKKyAgICAgICAgcmV0dXJuIHZtLmN1c3RvbUdldHRlckZ1bmN0aW9uU3BhY2U8
bW9kZT4oKTsKICAgICB9CiAKICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUo
Vk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkK
QEAgLTUyLDIyICs0Niw0OSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNy
ZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKEpTRnVuY3Rpb25UeXBl
LCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CiAgICAgfQogCi0gICAgc3RhdGljIEpTQ3VzdG9t
R2V0dGVyU2V0dGVyRnVuY3Rpb24qIGNyZWF0ZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgQ3VzdG9t
R2V0dGVyU2V0dGVyKiwgY29uc3QgVHlwZSwgY29uc3QgUHJvcGVydHlOYW1lJik7CisgICAgSlNf
RVhQT1JUX1BSSVZBVEUgc3RhdGljIEpTQ3VzdG9tR2V0dGVyRnVuY3Rpb24qIGNyZWF0ZShWTSYs
IEpTR2xvYmFsT2JqZWN0KiwgR2V0VmFsdWVGdW5jLCBPcHRpb25hbDxET01BdHRyaWJ1dGVBbm5v
dGF0aW9uPiwgY29uc3QgUHJvcGVydHlOYW1lJik7CiAKICAgICBERUNMQVJFX0VYUE9SVF9JTkZP
OwogCi0gICAgQ3VzdG9tR2V0dGVyU2V0dGVyKiBjdXN0b21HZXR0ZXJTZXR0ZXIoKSBjb25zdCB7
IHJldHVybiBtX2dldHRlclNldHRlci5nZXQoKTsgfQotICAgIGJvb2wgaXNTZXR0ZXIoKSBjb25z
dCB7IHJldHVybiBtX3R5cGUgPT0gVHlwZTo6U2V0dGVyOyB9CisgICAgR2V0VmFsdWVGdW5jIGdl
dHRlcigpIGNvbnN0IHsgcmV0dXJuIG1fZ2V0dGVyOyB9OworICAgIE9wdGlvbmFsPERPTUF0dHJp
YnV0ZUFubm90YXRpb24+IGRvbUF0dHJpYnV0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZG9tQXR0cmli
dXRlOyB9OwogICAgIGNvbnN0IFByb3BlcnR5TmFtZSYgcHJvcGVydHlOYW1lKCkgY29uc3QgeyBy
ZXR1cm4gbV9wcm9wZXJ0eU5hbWU7IH0KIAogcHJpdmF0ZToKLSAgICBKU0N1c3RvbUdldHRlclNl
dHRlckZ1bmN0aW9uKFZNJiwgTmF0aXZlRXhlY3V0YWJsZSosIEpTR2xvYmFsT2JqZWN0KiwgU3Ry
dWN0dXJlKiwgVHlwZSwgY29uc3QgUHJvcGVydHlOYW1lJik7Ci0gICAgdm9pZCBmaW5pc2hDcmVh
dGlvbihWTSYsIE5hdGl2ZUV4ZWN1dGFibGUqLCBDdXN0b21HZXR0ZXJTZXR0ZXIqLCBjb25zdCBT
dHJpbmcmKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNp
dG9yJik7CisgICAgSlNDdXN0b21HZXR0ZXJGdW5jdGlvbihWTSYsIE5hdGl2ZUV4ZWN1dGFibGUq
LCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSosIEdldFZhbHVlRnVuYywgT3B0aW9uYWw8RE9N
QXR0cmlidXRlQW5ub3RhdGlvbj4sIGNvbnN0IFByb3BlcnR5TmFtZSYpOwogCi0gICAgV3JpdGVC
YXJyaWVyPEN1c3RvbUdldHRlclNldHRlcj4gbV9nZXR0ZXJTZXR0ZXI7Ci0gICAgVHlwZSBtX3R5
cGU7CisgICAgR2V0VmFsdWVGdW5jIG1fZ2V0dGVyOworICAgIE9wdGlvbmFsPERPTUF0dHJpYnV0
ZUFubm90YXRpb24+IG1fZG9tQXR0cmlidXRlOwogICAgIFByb3BlcnR5TmFtZSBtX3Byb3BlcnR5
TmFtZTsKIH07CiAKK2NsYXNzIEpTQ3VzdG9tU2V0dGVyRnVuY3Rpb24gZmluYWwgOiBwdWJsaWMg
SlNGdW5jdGlvbiB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBKU0Z1bmN0aW9uIEJhc2U7CisgICAg
c3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVy
ZUZsYWdzOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNz
IG1vZGU+CisgICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAg
eworICAgICAgICByZXR1cm4gdm0uY3VzdG9tU2V0dGVyRnVuY3Rpb25TcGFjZTxtb2RlPigpOwor
ICAgIH0KKworICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQorICAgIHsKKyAg
ICAgICAgQVNTRVJUKGdsb2JhbE9iamVjdCk7CisgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNy
ZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKEpTRnVuY3Rpb25UeXBl
LCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CisgICAgfQorCisgICAgSlNfRVhQT1JUX1BSSVZB
VEUgc3RhdGljIEpTQ3VzdG9tU2V0dGVyRnVuY3Rpb24qIGNyZWF0ZShWTSYsIEpTR2xvYmFsT2Jq
ZWN0KiwgUHV0VmFsdWVGdW5jLCBjb25zdCBQcm9wZXJ0eU5hbWUmKTsKKworICAgIERFQ0xBUkVf
RVhQT1JUX0lORk87CisKKyAgICBQdXRWYWx1ZUZ1bmMgc2V0dGVyKCkgY29uc3QgeyByZXR1cm4g
bV9zZXR0ZXI7IH07CisKK3ByaXZhdGU6CisgICAgSlNDdXN0b21TZXR0ZXJGdW5jdGlvbihWTSYs
IE5hdGl2ZUV4ZWN1dGFibGUqLCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSosIFB1dFZhbHVl
RnVuYyk7CisKKyAgICBQdXRWYWx1ZUZ1bmMgbV9zZXR0ZXI7Cit9OworCiB9IC8vIG5hbWVzcGFj
ZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24u
Y3BwCShyZXZpc2lvbiAyNzE5NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0Z1bmN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTAxLDEyICs1MDEsMTIgQEAgdm9pZCBK
U0Z1bmN0aW9uOjpnZXRPd25TcGVjaWFsUHJvcGVydHlOYQogICAgIH0KIH0KIAotYm9vbCBKU0Z1
bmN0aW9uOjpwdXQoSlNDZWxsKiBjZWxsLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQ
cm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3Qm
IHNsb3QpCitib29sIEpTRnVuY3Rpb246OmRlZmluZU93blByb3BlcnR5VmlhUHV0KEpTT2JqZWN0
KiBvYmplY3QsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZSBwcm9w
ZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBW
TSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwogCi0gICAgSlNGdW5jdGlvbiogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0Z1
bmN0aW9uKj4oY2VsbCk7CisgICAgSlNGdW5jdGlvbiogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0Z1
bmN0aW9uKj4ob2JqZWN0KTsKIAogICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gdm0ucHJvcGVydHlO
YW1lcy0+bGVuZ3RoIHx8IHByb3BlcnR5TmFtZSA9PSB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lKSB7
CiAgICAgICAgIEZ1bmN0aW9uUmFyZURhdGEqIHJhcmVEYXRhID0gdGhpc09iamVjdC0+ZW5zdXJl
UmFyZURhdGEodm0pOwpAQCAtNTE2LDE2ICs1MTYsMTIgQEAgYm9vbCBKU0Z1bmN0aW9uOjpwdXQo
SlNDZWxsKiBjZWxsLCBKU0dsbwogICAgICAgICAgICAgcmFyZURhdGEtPnNldEhhc01vZGlmaWVk
TmFtZUZvck5vbkhvc3RGdW5jdGlvbigpOwogICAgIH0KIAotICAgIGlmIChVTkxJS0VMWShpc1Ro
aXNWYWx1ZUFsdGVyZWQoc2xvdCwgdGhpc09iamVjdCkpKQotICAgICAgICBSRUxFQVNFX0FORF9S
RVRVUk4oc2NvcGUsIG9yZGluYXJ5U2V0U2xvdyhnbG9iYWxPYmplY3QsIHRoaXNPYmplY3QsIHBy
b3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QudGhpc1ZhbHVlKCksIHNsb3QuaXNTdHJpY3RNb2RlKCkp
KTsKLQotCiAgICAgaWYgKHRoaXNPYmplY3QtPmlzSG9zdE9yQnVpbHRpbkZ1bmN0aW9uKCkpIHsK
ICAgICAgICAgUHJvcGVydHlTdGF0dXMgcHJvcGVydHlUeXBlID0gdGhpc09iamVjdC0+cmVpZnlM
YXp5UHJvcGVydHlGb3JIb3N0T3JCdWlsdGluSWZOZWVkZWQodm0sIGdsb2JhbE9iamVjdCwgcHJv
cGVydHlOYW1lKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZmFsc2UpOwog
ICAgICAgICBpZiAoaXNMYXp5KHByb3BlcnR5VHlwZSkpCiAgICAgICAgICAgICBzbG90LmRpc2Fi
bGVDYWNoaW5nKCk7Ci0gICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgQmFzZTo6cHV0
KHRoaXNPYmplY3QsIGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCkpOwor
ICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEJhc2U6OmRlZmluZU93blByb3BlcnR5
VmlhUHV0KHRoaXNPYmplY3QsIGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xv
dCkpOwogICAgIH0KIAogICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gdm0ucHJvcGVydHlOYW1lcy0+
cHJvdG90eXBlKSB7CkBAIC01MzgsMTIgKzUzNCwxMiBAQCBib29sIEpTRnVuY3Rpb246OnB1dChK
U0NlbGwqIGNlbGwsIEpTR2xvCiAgICAgICAgIGlmIChGdW5jdGlvblJhcmVEYXRhKiByYXJlRGF0
YSA9IHRoaXNPYmplY3QtPnJhcmVEYXRhKCkpCiAgICAgICAgICAgICByYXJlRGF0YS0+Y2xlYXIo
IlN0b3JlIHRvIHByb3RvdHlwZSBwcm9wZXJ0eSBvZiBhIGZ1bmN0aW9uIik7CiAgICAgICAgIGdl
dFNsb3QuZGlzYWxsb3dWTUVudHJ5LnJlc2V0KCk7Ci0gICAgICAgIFJFTEVBU0VfQU5EX1JFVFVS
TihzY29wZSwgQmFzZTo6cHV0KHRoaXNPYmplY3QsIGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1l
LCB2YWx1ZSwgc2xvdCkpOworICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEJhc2U6
OmRlZmluZU93blByb3BlcnR5VmlhUHV0KHRoaXNPYmplY3QsIGdsb2JhbE9iamVjdCwgcHJvcGVy
dHlOYW1lLCB2YWx1ZSwgc2xvdCkpOwogICAgIH0KIAogICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0g
dm0ucHJvcGVydHlOYW1lcy0+YXJndW1lbnRzIHx8IHByb3BlcnR5TmFtZSA9PSB2bS5wcm9wZXJ0
eU5hbWVzLT5jYWxsZXIpIHsKICAgICAgICAgaWYgKCF0aGlzT2JqZWN0LT5qc0V4ZWN1dGFibGUo
KS0+aGFzQ2FsbGVyQW5kQXJndW1lbnRzUHJvcGVydGllcygpKQotICAgICAgICAgICAgUkVMRUFT
RV9BTkRfUkVUVVJOKHNjb3BlLCBCYXNlOjpwdXQodGhpc09iamVjdCwgZ2xvYmFsT2JqZWN0LCBw
cm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KSk7CisgICAgICAgICAgICBSRUxFQVNFX0FORF9SRVRV
Uk4oc2NvcGUsIEJhc2U6OmRlZmluZU93blByb3BlcnR5VmlhUHV0KHRoaXNPYmplY3QsIGdsb2Jh
bE9iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCkpOwogCiAgICAgICAgIHNsb3QuZGlz
YWJsZUNhY2hpbmcoKTsKICAgICAgICAgcmV0dXJuIHR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNj
b3BlLCBzbG90LmlzU3RyaWN0TW9kZSgpLCBSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcik7CkBA
IC01NTEsNyArNTQ3LDcgQEAgYm9vbCBKU0Z1bmN0aW9uOjpwdXQoSlNDZWxsKiBjZWxsLCBKU0ds
bwogICAgIFByb3BlcnR5U3RhdHVzIHByb3BlcnR5VHlwZSA9IHRoaXNPYmplY3QtPnJlaWZ5TGF6
eVByb3BlcnR5SWZOZWVkZWQodm0sIGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lKTsKICAgICBp
ZiAoaXNMYXp5KHByb3BlcnR5VHlwZSkpCiAgICAgICAgIHNsb3QuZGlzYWJsZUNhY2hpbmcoKTsK
LSAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEJhc2U6OnB1dCh0aGlzT2JqZWN0LCBnbG9i
YWxPYmplY3QsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpKTsKKyAgICBSRUxFQVNFX0FORF9S
RVRVUk4oc2NvcGUsIEJhc2U6OmRlZmluZU93blByb3BlcnR5VmlhUHV0KHRoaXNPYmplY3QsIGds
b2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCkpOwogfQogCiBib29sIEpTRnVu
Y3Rpb246OmRlbGV0ZVByb3BlcnR5KEpTQ2VsbCogY2VsbCwgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgRGVsZXRlUHJvcGVydHlTbG90JiBz
bG90KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uaAko
cmV2aXNpb24gMjcxOTc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5j
dGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNzQsOSArMTc0LDkgQEAgcHJvdGVjdGVkOgogCiAg
ICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiwgSlNHbG9iYWxPYmpl
Y3QqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwogICAgIHN0YXRpYyB2b2lkIGdldE93
blNwZWNpYWxQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0
eU5hbWVBcnJheSYsIERvbnRFbnVtUHJvcGVydGllc01vZGUpOwotICAgIHN0YXRpYyBib29sIGRl
ZmluZU93blByb3BlcnR5KEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUs
IGNvbnN0IFByb3BlcnR5RGVzY3JpcHRvciYsIGJvb2wgc2hvdWxkVGhyb3cpOwogCi0gICAgc3Rh
dGljIGJvb2wgcHV0KEpTQ2VsbCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBKU1Zh
bHVlLCBQdXRQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMgYm9vbCBkZWZpbmVPd25Qcm9wZXJ0
eVZpYVB1dChKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVl
LCBQdXRQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMgYm9vbCBkZWZpbmVPd25Qcm9wZXJ0eShK
U09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eURl
c2NyaXB0b3ImLCBib29sIHNob3VsZFRocm93KTsKIAogICAgIHN0YXRpYyBib29sIGRlbGV0ZVBy
b3BlcnR5KEpTQ2VsbCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBEZWxldGVQcm9w
ZXJ0eVNsb3QmKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5l
cmljVHlwZWRBcnJheVZpZXcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlldy5oCShyZXZpc2lvbiAyNzE5NzUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlldy5oCSh3
b3JraW5nIGNvcHkpCkBAIC05Niw3ICs5Niw3IEBAIHB1YmxpYzoKICAgICB1c2luZyBCYXNlID0g
SlNBcnJheUJ1ZmZlclZpZXc7CiAgICAgdHlwZWRlZiB0eXBlbmFtZSBBZGFwdG9yOjpUeXBlIEVs
ZW1lbnRUeXBlOwogCi0gICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFn
cyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwg
T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlOYW1lcyB8IEludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNs
b3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm87CisgICAgc3RhdGljIGNvbnN0ZXhwciB1
bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJpZGVz
R2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlOYW1lcyB8IE92ZXJy
aWRlc1B1dCB8IEludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5n
dGhJc05vdFplcm87CiAKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIGVsZW1lbnRTaXpl
ID0gc2l6ZW9mKHR5cGVuYW1lIEFkYXB0b3I6OlR5cGUpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0dsb2JhbExleGljYWxFbnZpcm9ubWVudC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsTGV4aWNhbEVudmlyb25t
ZW50LmgJKHJldmlzaW9uIDI3MTk3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTR2xvYmFsTGV4aWNhbEVudmlyb25tZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDcgKzMz
LDcgQEAgY2xhc3MgSlNHbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQgZmluYWwgOgogcHVibGljOgog
ICAgIHVzaW5nIEJhc2UgPSBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0OwogCi0gICAgc3RhdGlj
IGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdz
IHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90OworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5z
aWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IE92ZXJyaWRlc0dl
dE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRlc1B1dDsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1l
IENlbGxUeXBlLCBTdWJzcGFjZUFjY2VzcyBtb2RlPgogICAgIHN0YXRpYyBJc29TdWJzcGFjZSog
c3Vic3BhY2VGb3IoVk0mIHZtKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNHbG9iYWxPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAkocmV2aXNpb24gMjcxOTc1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01MDIsNiArNTAyLDggQEAgSlNHbG9iYWxPYmplY3Q6OkpTR2xvYmFsT2JqZWN0KFZNJiB2bSwg
UwogICAgICwgbV9udW1iZXJUb1N0cmluZ1dhdGNocG9pbnRTZXQoSXNXYXRjaGVkKQogICAgICwg
bV9ydW50aW1lRmxhZ3MoKQogICAgICwgbV9zdGFja1RyYWNlTGltaXQoT3B0aW9uczo6ZGVmYXVs
dEVycm9yU3RhY2tUcmFjZUxpbWl0KCkpCisgICAgLCBtX2N1c3RvbUdldHRlckZ1bmN0aW9uTWFw
KHZtKQorICAgICwgbV9jdXN0b21TZXR0ZXJGdW5jdGlvbk1hcCh2bSkKICAgICAsIG1fZ2xvYmFs
T2JqZWN0TWV0aG9kVGFibGUoZ2xvYmFsT2JqZWN0TWV0aG9kVGFibGUgPyBnbG9iYWxPYmplY3RN
ZXRob2RUYWJsZSA6ICZzX2dsb2JhbE9iamVjdE1ldGhvZFRhYmxlKQogewogfQpAQCAtNjEzLDkg
KzYxNSwxMyBAQCB2b2lkIEpTR2xvYmFsT2JqZWN0Ojppbml0KFZNJiB2bSkKICAgICBpbml0RnVu
Y3Rpb25TdHJ1Y3R1cmVzKG1fYnVpbHRpbkZ1bmN0aW9ucyk7CiAgICAgaW5pdEZ1bmN0aW9uU3Ry
dWN0dXJlcyhtX29yZGluYXJ5RnVuY3Rpb25zKTsKIAotICAgIG1fY3VzdG9tR2V0dGVyU2V0dGVy
RnVuY3Rpb25TdHJ1Y3R1cmUuaW5pdExhdGVyKAorICAgIG1fY3VzdG9tR2V0dGVyRnVuY3Rpb25T
dHJ1Y3R1cmUuaW5pdExhdGVyKAogICAgICAgICBbXSAoY29uc3QgSW5pdGlhbGl6ZXI8U3RydWN0
dXJlPiYgaW5pdCkgewotICAgICAgICAgICAgaW5pdC5zZXQoSlNDdXN0b21HZXR0ZXJTZXR0ZXJG
dW5jdGlvbjo6Y3JlYXRlU3RydWN0dXJlKGluaXQudm0sIGluaXQub3duZXIsIGluaXQub3duZXIt
Pm1fZnVuY3Rpb25Qcm90b3R5cGUuZ2V0KCkpKTsKKyAgICAgICAgICAgIGluaXQuc2V0KEpTQ3Vz
dG9tR2V0dGVyRnVuY3Rpb246OmNyZWF0ZVN0cnVjdHVyZShpbml0LnZtLCBpbml0Lm93bmVyLCBp
bml0Lm93bmVyLT5tX2Z1bmN0aW9uUHJvdG90eXBlLmdldCgpKSk7CisgICAgICAgIH0pOworICAg
IG1fY3VzdG9tU2V0dGVyRnVuY3Rpb25TdHJ1Y3R1cmUuaW5pdExhdGVyKAorICAgICAgICBbXSAo
Y29uc3QgSW5pdGlhbGl6ZXI8U3RydWN0dXJlPiYgaW5pdCkgeworICAgICAgICAgICAgaW5pdC5z
ZXQoSlNDdXN0b21TZXR0ZXJGdW5jdGlvbjo6Y3JlYXRlU3RydWN0dXJlKGluaXQudm0sIGluaXQu
b3duZXIsIGluaXQub3duZXItPm1fZnVuY3Rpb25Qcm90b3R5cGUuZ2V0KCkpKTsKICAgICAgICAg
fSk7CiAgICAgbV9ib3VuZEZ1bmN0aW9uU3RydWN0dXJlLmluaXRMYXRlcigKICAgICAgICAgW10g
KGNvbnN0IEluaXRpYWxpemVyPFN0cnVjdHVyZT4mIGluaXQpIHsKQEAgLTE0NDUsMTYgKzE0NTEs
MTMgQEAgY2FwaXRhbE5hbWUgIyMgQ29uc3RydWN0b3IqIGxvd2VyTmFtZSAjIwogICAgIGZpeHVw
UHJvdG90eXBlQ2hhaW5XaXRoT2JqZWN0UHJvdG90eXBlKHZtKTsKIH0KIAotYm9vbCBKU0dsb2Jh
bE9iamVjdDo6cHV0KEpTQ2VsbCogY2VsbCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
UHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgUHV0UHJvcGVydHlTbG90
JiBzbG90KQorYm9vbCBKU0dsb2JhbE9iamVjdDo6ZGVmaW5lT3duUHJvcGVydHlWaWFQdXQoSlNP
YmplY3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1l
IHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBzbG90KQogewog
ICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7Ci0gICAgSlNHbG9iYWxPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nh
c3Q8SlNHbG9iYWxPYmplY3QqPihjZWxsKTsKKyAgICBKU0dsb2JhbE9iamVjdCogdGhpc09iamVj
dCA9IGpzQ2FzdDxKU0dsb2JhbE9iamVjdCo+KG9iamVjdCk7CiAgICAgQVNTRVJUKCFIZWFwOjpo
ZWFwKHZhbHVlKSB8fCBIZWFwOjpoZWFwKHZhbHVlKSA9PSBIZWFwOjpoZWFwKHRoaXNPYmplY3Qp
KTsKIAotICAgIGlmIChVTkxJS0VMWShpc1RoaXNWYWx1ZUFsdGVyZWQoc2xvdCwgdGhpc09iamVj
dCkpKQotICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIG9yZGluYXJ5U2V0U2xvdyhn
bG9iYWxPYmplY3QsIHRoaXNPYmplY3QsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QudGhpc1Zh
bHVlKCksIHNsb3QuaXNTdHJpY3RNb2RlKCkpKTsKLQogICAgIGJvb2wgc2hvdWxkVGhyb3dSZWFk
T25seUVycm9yID0gc2xvdC5pc1N0cmljdE1vZGUoKTsKICAgICBib29sIGlnbm9yZVJlYWRPbmx5
RXJyb3JzID0gZmFsc2U7CiAgICAgYm9vbCBwdXRSZXN1bHQgPSBmYWxzZTsKQEAgLTE0NjIsNyAr
MTQ2NSw3IEBAIGJvb2wgSlNHbG9iYWxPYmplY3Q6OnB1dChKU0NlbGwqIGNlbGwsIEoKICAgICBF
WENFUFRJT05fQVNTRVJUKCghIXNjb3BlLmV4Y2VwdGlvbigpID09IChkb25lICYmICFwdXRSZXN1
bHQpKSB8fCAhc2hvdWxkVGhyb3dSZWFkT25seUVycm9yKTsKICAgICBpZiAoZG9uZSkKICAgICAg
ICAgcmV0dXJuIHB1dFJlc3VsdDsKLSAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEJhc2U6
OnB1dCh0aGlzT2JqZWN0LCBnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3Qp
KTsKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEJhc2U6OmRlZmluZU93blByb3BlcnR5
VmlhUHV0KHRoaXNPYmplY3QsIGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xv
dCkpOwogfQogCiBib29sIEpTR2xvYmFsT2JqZWN0OjpkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVj
dCogb2JqZWN0LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWUgcHJv
cGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IsIGJvb2wgc2hv
dWxkVGhyb3cpCkBAIC0xOTk5LDcgKzIwMDIsOCBAQCB2b2lkIEpTR2xvYmFsT2JqZWN0Ojp2aXNp
dENoaWxkcmVuKEpTQ2VsCiAgICAgdmlzaXRGdW5jdGlvblN0cnVjdHVyZXModGhpc09iamVjdC0+
bV9idWlsdGluRnVuY3Rpb25zKTsKICAgICB2aXNpdEZ1bmN0aW9uU3RydWN0dXJlcyh0aGlzT2Jq
ZWN0LT5tX29yZGluYXJ5RnVuY3Rpb25zKTsKIAotICAgIHRoaXNPYmplY3QtPm1fY3VzdG9tR2V0
dGVyU2V0dGVyRnVuY3Rpb25TdHJ1Y3R1cmUudmlzaXQodmlzaXRvcik7CisgICAgdGhpc09iamVj
dC0+bV9jdXN0b21HZXR0ZXJGdW5jdGlvblN0cnVjdHVyZS52aXNpdCh2aXNpdG9yKTsKKyAgICB0
aGlzT2JqZWN0LT5tX2N1c3RvbVNldHRlckZ1bmN0aW9uU3RydWN0dXJlLnZpc2l0KHZpc2l0b3Ip
OwogICAgIHRoaXNPYmplY3QtPm1fYm91bmRGdW5jdGlvblN0cnVjdHVyZS52aXNpdCh2aXNpdG9y
KTsKICAgICB0aGlzT2JqZWN0LT5tX25hdGl2ZVN0ZEZ1bmN0aW9uU3RydWN0dXJlLnZpc2l0KHZp
c2l0b3IpOwogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fcmVnRXhwU3RydWN0dXJl
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmpl
Y3QuaAkocmV2aXNpb24gMjcxOTc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNHbG9iYWxPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtODYsNiArODYsOCBAQCBjbGFzcyBJ
bnRsQ29sbGF0b3I7CiBjbGFzcyBKU0FycmF5QnVmZmVyOwogY2xhc3MgSlNBcnJheUJ1ZmZlclBy
b3RvdHlwZTsKIGNsYXNzIEpTQ2FsbGVlOworY2xhc3MgSlNDdXN0b21HZXR0ZXJGdW5jdGlvbjsK
K2NsYXNzIEpTQ3VzdG9tU2V0dGVyRnVuY3Rpb247CiBjbGFzcyBKU0dsb2JhbE9iamVjdERlYnVn
Z2FibGU7CiBjbGFzcyBKU0ludGVybmFsUHJvbWlzZTsKIGNsYXNzIEpTTW9kdWxlTG9hZGVyOwpA
QCAtMzk2LDcgKzM5OCw4IEBAIHB1YmxpYzoKICAgICBGdW5jdGlvblN0cnVjdHVyZXMgbV9vcmRp
bmFyeUZ1bmN0aW9uczsKIAogICAgIExhenlQcm9wZXJ0eTxKU0dsb2JhbE9iamVjdCwgU3RydWN0
dXJlPiBtX2JvdW5kRnVuY3Rpb25TdHJ1Y3R1cmU7Ci0gICAgTGF6eVByb3BlcnR5PEpTR2xvYmFs
T2JqZWN0LCBTdHJ1Y3R1cmU+IG1fY3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rpb25TdHJ1Y3R1cmU7
CisgICAgTGF6eVByb3BlcnR5PEpTR2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmU+IG1fY3VzdG9tR2V0
dGVyRnVuY3Rpb25TdHJ1Y3R1cmU7CisgICAgTGF6eVByb3BlcnR5PEpTR2xvYmFsT2JqZWN0LCBT
dHJ1Y3R1cmU+IG1fY3VzdG9tU2V0dGVyRnVuY3Rpb25TdHJ1Y3R1cmU7CiAgICAgTGF6eVByb3Bl
cnR5PEpTR2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmU+IG1fbmF0aXZlU3RkRnVuY3Rpb25TdHJ1Y3R1
cmU7CiAgICAgUHJvcGVydHlPZmZzZXQgbV9mdW5jdGlvbk5hbWVPZmZzZXQ7CiAgICAgV3JpdGVC
YXJyaWVyPFN0cnVjdHVyZT4gbV9yZWdFeHBTdHJ1Y3R1cmU7CkBAIC01NDAsNiArNTQzLDkgQEAg
cHVibGljOgogICAgIGJvb2wgaXNNYXBQcm90b3R5cGVTZXRGYXN0QW5kTm9uT2JzZXJ2YWJsZSgp
OwogICAgIGJvb2wgaXNTZXRQcm90b3R5cGVBZGRGYXN0QW5kTm9uT2JzZXJ2YWJsZSgpOwogCisg
ICAgV2Vha0dDTWFwPEdldFZhbHVlRnVuYywgSlNDdXN0b21HZXR0ZXJGdW5jdGlvbj4mIGN1c3Rv
bUdldHRlckZ1bmN0aW9uTWFwKCkgeyByZXR1cm4gbV9jdXN0b21HZXR0ZXJGdW5jdGlvbk1hcDsg
fQorICAgIFdlYWtHQ01hcDxQdXRWYWx1ZUZ1bmMsIEpTQ3VzdG9tU2V0dGVyRnVuY3Rpb24+JiBj
dXN0b21TZXR0ZXJGdW5jdGlvbk1hcCgpIHsgcmV0dXJuIG1fY3VzdG9tU2V0dGVyRnVuY3Rpb25N
YXA7IH0KKwogI2lmIEVOQUJMRShERkdfSklUKQogICAgIHVzaW5nIFJlZmVyZW5jZWRHbG9iYWxQ
cm9wZXJ0eVdhdGNocG9pbnRTZXRzID0gSGFzaE1hcDxSZWZQdHI8VW5pcXVlZFN0cmluZ0ltcGw+
LCBSZWY8V2F0Y2hwb2ludFNldD4sIElkZW50aWZpZXJSZXBIYXNoPjsKICAgICBSZWZlcmVuY2Vk
R2xvYmFsUHJvcGVydHlXYXRjaHBvaW50U2V0cyBtX3JlZmVyZW5jZWRHbG9iYWxQcm9wZXJ0eVdh
dGNocG9pbnRTZXRzOwpAQCAtNTU0LDYgKzU2MCw4IEBAIHB1YmxpYzoKICAgICBSdW50aW1lRmxh
Z3MgbV9ydW50aW1lRmxhZ3M7CiAgICAgQ29uc29sZUNsaWVudCogbV9jb25zb2xlQ2xpZW50IHsg
bnVsbHB0ciB9OwogICAgIE9wdGlvbmFsPHVuc2lnbmVkPiBtX3N0YWNrVHJhY2VMaW1pdDsKKyAg
ICBXZWFrR0NNYXA8R2V0VmFsdWVGdW5jLCBKU0N1c3RvbUdldHRlckZ1bmN0aW9uPiBtX2N1c3Rv
bUdldHRlckZ1bmN0aW9uTWFwOworICAgIFdlYWtHQ01hcDxQdXRWYWx1ZUZ1bmMsIEpTQ3VzdG9t
U2V0dGVyRnVuY3Rpb24+IG1fY3VzdG9tU2V0dGVyRnVuY3Rpb25NYXA7CiAKICNpZiBBU1NFUlRf
RU5BQkxFRAogICAgIGNvbnN0IEpTR2xvYmFsT2JqZWN0KiBtX2dsb2JhbE9iamVjdEF0RGVidWdn
ZXJFbnRyeSB7IG51bGxwdHIgfTsKQEAgLTYxMiwxMCArNjIwLDcgQEAgcHVibGljOgogICAgIEpT
X0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZp
c2l0b3ImKTsKIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBib29sIGdldE93blByb3Bl
cnR5U2xvdChKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0
eVNsb3QmKTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9vbCBwdXQoSlNDZWxsKiwg
SlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYp
OwotCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgZGVmaW5lR2V0dGVyKEpTT2Jq
ZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIEpTT2JqZWN0KiBnZXR0ZXJGdW5j
LCB1bnNpZ25lZCBhdHRyaWJ1dGVzKTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9p
ZCBkZWZpbmVTZXR0ZXIoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwg
SlNPYmplY3QqIHNldHRlckZ1bmMsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpOworICAgIEpTX0VYUE9S
VF9QUklWQVRFIHN0YXRpYyBib29sIGRlZmluZU93blByb3BlcnR5VmlhUHV0KEpTT2JqZWN0Kiwg
SlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYp
OwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBib29sIGRlZmluZU93blByb3BlcnR5KEpT
T2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5RGVz
Y3JpcHRvciYsIGJvb2wgc2hvdWxkVGhyb3cpOwogCiAgICAgdm9pZCBhZGRWYXIoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lKQpAQCAt
Nzk5LDcgKzgwNCw4IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBTdHJ1Y3R1cmUqIGJvdW5kRnVu
Y3Rpb25TdHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVybiBtX2JvdW5kRnVuY3Rpb25TdHJ1Y3R1cmUu
Z2V0KHRoaXMpOyB9Ci0gICAgU3RydWN0dXJlKiBjdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvblN0
cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fY3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rpb25TdHJ1
Y3R1cmUuZ2V0KHRoaXMpOyB9CisgICAgU3RydWN0dXJlKiBjdXN0b21HZXR0ZXJGdW5jdGlvblN0
cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fY3VzdG9tR2V0dGVyRnVuY3Rpb25TdHJ1Y3R1cmUu
Z2V0KHRoaXMpOyB9CisgICAgU3RydWN0dXJlKiBjdXN0b21TZXR0ZXJGdW5jdGlvblN0cnVjdHVy
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY3VzdG9tU2V0dGVyRnVuY3Rpb25TdHJ1Y3R1cmUuZ2V0KHRo
aXMpOyB9CiAgICAgU3RydWN0dXJlKiBuYXRpdmVTdGRGdW5jdGlvblN0cnVjdHVyZSgpIGNvbnN0
IHsgcmV0dXJuIG1fbmF0aXZlU3RkRnVuY3Rpb25TdHJ1Y3R1cmUuZ2V0KHRoaXMpOyB9CiAgICAg
UHJvcGVydHlPZmZzZXQgZnVuY3Rpb25OYW1lT2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9mdW5j
dGlvbk5hbWVPZmZzZXQ7IH0KICAgICBTdHJ1Y3R1cmUqIG51bWJlck9iamVjdFN0cnVjdHVyZSgp
IGNvbnN0IHsgcmV0dXJuIG1fbnVtYmVyT2JqZWN0U3RydWN0dXJlLmdldCh0aGlzKTsgfQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMZXhpY2FsRW52aXJvbm1lbnQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xleGljYWxFbnZp
cm9ubWVudC5oCShyZXZpc2lvbiAyNzE5NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0xleGljYWxFbnZpcm9ubWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCw3ICs0OCw3
IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICB1c2luZyBCYXNlID0gSlNTeW1ib2xUYWJsZU9iamVj
dDsKLSAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6
U3RydWN0dXJlRmxhZ3MgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNH
ZXRPd25TcGVjaWFsUHJvcGVydHlOYW1lczsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVk
IFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBPdmVycmlkZXNHZXRPd25Q
cm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNHZXRPd25TcGVjaWFsUHJvcGVydHlOYW1lcyB8IE92ZXJy
aWRlc1B1dDsKIAogICAgIFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qIHZhcmlhYmxlcygpCiAg
ICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVFbnZpcm9u
bWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9k
dWxlRW52aXJvbm1lbnQuaAkocmV2aXNpb24gMjcxOTc1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNNb2R1bGVFbnZpcm9ubWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3
ICs0MCw3IEBAIGNsYXNzIEpTTW9kdWxlRW52aXJvbm1lbnQgZmluYWwgOiBwdWJsaWMKICAgICBm
cmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogcHVibGljOgogICAgIHVzaW5nIEJh
c2UgPSBKU0xleGljYWxFbnZpcm9ubWVudDsKLSAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVk
IFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBPdmVycmlkZXNHZXRPd25Q
cm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNHZXRPd25TcGVjaWFsUHJvcGVydHlOYW1lczsKKyAgICBz
dGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJl
RmxhZ3MgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNHZXRPd25TcGVj
aWFsUHJvcGVydHlOYW1lcyB8IE92ZXJyaWRlc1B1dDsKIAogICAgIHN0YXRpYyBKU01vZHVsZUVu
dmlyb25tZW50KiBjcmVhdGUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBK
U1Njb3BlKiBjdXJyZW50U2NvcGUsIFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSwgSlNWYWx1ZSBp
bml0aWFsVmFsdWUsIEFic3RyYWN0TW9kdWxlUmVjb3JkKiBtb2R1bGVSZWNvcmQpCiAgICAgewpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVOYW1lc3BhY2VPYmpl
Y3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVs
ZU5hbWVzcGFjZU9iamVjdC5oCShyZXZpc2lvbiAyNzE5NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU01vZHVsZU5hbWVzcGFjZU9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zMyw3ICszMyw3IEBAIG5hbWVzcGFjZSBKU0MgewogY2xhc3MgSlNNb2R1bGVOYW1lc3BhY2VP
YmplY3QgZmluYWwgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7CiBwdWJsaWM6CiAgICAgdXNp
bmcgQmFzZSA9IEpTTm9uRmluYWxPYmplY3Q7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25l
ZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJpZGVzR2V0T3du
UHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlOYW1lcyB8IEludGVyY2VwdHNH
ZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8gfCBHZXRPd25Q
cm9wZXJ0eVNsb3RJc0ltcHVyZUZvclByb3BlcnR5QWJzZW5jZSB8IElzSW1tdXRhYmxlUHJvdG90
eXBlRXhvdGljT2JqZWN0OworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJl
RmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xv
dCB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5TmFtZXMgfCBPdmVycmlkZXNQdXQgfCBJbnRlcmNl
cHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgR2V0
T3duUHJvcGVydHlTbG90SXNJbXB1cmVGb3JQcm9wZXJ0eUFic2VuY2UgfCBJc0ltbXV0YWJsZVBy
b3RvdHlwZUV4b3RpY09iamVjdDsKIAogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0Rl
c3RydWN0aW9uID0gdHJ1ZTsKICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAkocmV2aXNpb24g
MjcxOTc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC02ODEsMTAgKzY4MSw2IEBAIGJvb2wgSlNPYmplY3Q6OmdldE93blBy
b3BlcnR5U2xvdChKU09iamUKIHsKICAgICByZXR1cm4gZ2V0T3duUHJvcGVydHlTbG90SW1wbChv
YmplY3QsIGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCBzbG90KTsKIH0KLQotdm9pZCBKU09i
amVjdDo6ZG9QdXRQcm9wZXJ0eVNlY3VyaXR5Q2hlY2soSlNPYmplY3QqLCBKU0dsb2JhbE9iamVj
dCosIFByb3BlcnR5TmFtZSwgUHV0UHJvcGVydHlTbG90JikKLXsKLX0KICNlbmRpZiAvLyBBU1NF
UlRfRU5BQkxFRAogCiAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1vcmRp
bmFyeXNldApAQCAtNzkzLDc3ICs3ODksNzkgQEAgYm9vbCBvcmRpbmFyeVNldFNsb3coSlNHbG9i
YWxPYmplY3QqIGdsbwogICAgIHJldHVybiB0cnVlOwogfQogCi0vLyBFQ01BIDguNi4yLjIKKy8v
IGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb3JkaW5hcnlzZXQKIGJvb2wgSlNPYmplY3Q6
OnB1dChKU0NlbGwqIGNlbGwsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5
TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkK
IHsKLSAgICByZXR1cm4gcHV0SW5saW5lRm9ySlNPYmplY3QoY2VsbCwgZ2xvYmFsT2JqZWN0LCBw
cm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KTsKKyAgICByZXR1cm4gcHV0SW5saW5lRm9ySlNPYmpl
Y3QoYXNPYmplY3QoY2VsbCksIGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xv
dCk7CiB9CiAKLWJvb2wgSlNPYmplY3Q6OnB1dElubGluZVNsb3coSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgUHV0
UHJvcGVydHlTbG90JiBzbG90KQorYm9vbCBKU09iamVjdDo6cHV0SW5saW5lU2xvdyhKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVl
IHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmIHB1dFNsb3QsIFB1dElubGluZVNsb3dNb2RlIG1vZGUp
CiB7Ci0gICAgQVNTRVJUKCFpc1RoaXNWYWx1ZUFsdGVyZWQoc2xvdCwgdGhpcykpOworICAgIC8v
IEFTU0VSVCghcGFyc2VJbmRleChwcm9wZXJ0eU5hbWUpKTsKIAogICAgIFZNJiB2bSA9IGdsb2Jh
bE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CiAKKyAgICBpZiAoVU5MSUtFTFkoIXZtLmlzU2FmZVRvUmVjdXJzZVNvZnQoKSkpIHsKKyAgICAg
ICAgdGhyb3dTdGFja092ZXJmbG93RXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSk7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisKICAgICBKU09iamVjdCogb2JqID0gdGhpczsKICAgICBm
b3IgKDs7KSB7CiAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gb2JqLT5zdHJ1Y3R1cmUo
dm0pOwotICAgICAgICBpZiAoVU5MSUtFTFkoc3RydWN0dXJlLT50eXBlSW5mbygpLmhhc1B1dFBy
b3BlcnR5U2VjdXJpdHlDaGVjaygpKSkgewotICAgICAgICAgICAgb2JqLT5tZXRob2RUYWJsZSh2
bSktPmRvUHV0UHJvcGVydHlTZWN1cml0eUNoZWNrKG9iaiwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0
eU5hbWUsIHNsb3QpOwotICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZmFs
c2UpOwotICAgICAgICB9Ci0gICAgICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXM7Ci0gICAgICAgIFBy
b3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0KHZtLCBwcm9wZXJ0eU5hbWUsIGF0
dHJpYnV0ZXMpOwotICAgICAgICBpZiAoaXNWYWxpZE9mZnNldChvZmZzZXQpKSB7Ci0gICAgICAg
ICAgICBpZiAoYXR0cmlidXRlcyAmIFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSkgewotICAg
ICAgICAgICAgICAgIEFTU0VSVCh0aGlzLT5wcm90b3R5cGVDaGFpbk1heUludGVyY2VwdFN0b3Jl
VG8odm0sIHByb3BlcnR5TmFtZSkgfHwgb2JqID09IHRoaXMpOwotICAgICAgICAgICAgICAgIHJl
dHVybiB0eXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgc2xvdC5pc1N0cmljdE1vZGUoKSwg
UmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpOwotICAgICAgICAgICAgfQorICAgICAgICBpZiAo
b2JqICE9IHRoaXMgJiYgc3RydWN0dXJlLT50eXBlSW5mbygpLm92ZXJyaWRlc1B1dCgpKQorICAg
ICAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBvYmotPm1ldGhvZFRhYmxlKHZtKS0+
cHV0KG9iaiwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBwdXRTbG90KSk7CiAK
LSAgICAgICAgICAgIEpTVmFsdWUgZ3MgPSBvYmotPmdldERpcmVjdChvZmZzZXQpOwotICAgICAg
ICAgICAgaWYgKGdzLmlzR2V0dGVyU2V0dGVyKCkpIHsKLSAgICAgICAgICAgICAgICAvLyBXZSBu
ZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHdlIGRlY2lkZSB0byBjYWNoZSB0aGlzIHByb3BlcnR5IGJl
Zm9yZSB3ZSBwb3RlbnRpYWxseSBleGVjdXRlIGFyaWJpdHJhcnkgSlMuCi0gICAgICAgICAgICAg
ICAgaWYgKCF0aGlzLT5zdHJ1Y3R1cmUodm0pLT5pc1VuY2FjaGVhYmxlRGljdGlvbmFyeSgpKQot
ICAgICAgICAgICAgICAgICAgICBzbG90LnNldENhY2hlYWJsZVNldHRlcihvYmosIG9mZnNldCk7
CisgICAgICAgIGJvb2wgb3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90ID0gbW9kZSA9PSBQdXRJ
bmxpbmVTbG93TW9kZTo6SWdub3JlT3duU3BlY2lhbFByb3BlcnRpZXMgJiYgb2JqID09IHRoaXMK
KyAgICAgICAgICAgID8gZmFsc2UKKyAgICAgICAgICAgIDogc3RydWN0dXJlLT50eXBlSW5mbygp
Lm92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCgpOworICAgICAgICBQcm9wZXJ0eVNsb3QgZ2V0
U2xvdChvYmosIFByb3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBlOjpHZXRPd25Qcm9wZXJ0
eSk7CisgICAgICAgIGJvb2wgaGFzUHJvcGVydHkgPSBvdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNs
b3QKKyAgICAgICAgICAgID8gb2JqLT5tZXRob2RUYWJsZSh2bSktPmdldE93blByb3BlcnR5U2xv
dChvYmosIGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCBnZXRTbG90KQorICAgICAgICAgICAg
OiBvYmotPkpTT2JqZWN0OjpnZXRPd25Ob25JbmRleFByb3BlcnR5U2xvdCh2bSwgc3RydWN0dXJl
LCBwcm9wZXJ0eU5hbWUsIGdldFNsb3QpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCBmYWxzZSk7CiAKLSAgICAgICAgICAgICAgICBib29sIHJlc3VsdCA9IGNhbGxTZXR0ZXIo
Z2xvYmFsT2JqZWN0LCBzbG90LnRoaXNWYWx1ZSgpLCBncywgdmFsdWUsIHNsb3QuaXNTdHJpY3RN
b2RlKCkgPyBFQ01BTW9kZTo6c3RyaWN0KCkgOiBFQ01BTW9kZTo6c2xvcHB5KCkpOwotICAgICAg
ICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGZhbHNlKTsKLSAgICAgICAgICAg
ICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAvLyBXZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0
IHdlIGRlY2lkZSB0byBjYWNoZSB0aGlzIHByb3BlcnR5IGJlZm9yZSB3ZSBwb3RlbnRpYWxseSBl
eGVjdXRlIGFyaWJpdHJhcnkgSlMuCisgICAgICAgIGJvb2wgaXNDYWNoZWFibGUgPSBnZXRTbG90
LmlzQ2FjaGVhYmxlKCkgJiYgb2JqLT5zdHJ1Y3R1cmUodm0pID09IHN0cnVjdHVyZTsKKyAgICAg
ICAgaWYgKCFpc0NhY2hlYWJsZSkKKyAgICAgICAgICAgIHB1dFNsb3QuZGlzYWJsZUNhY2hpbmco
KTsKKworICAgICAgICBpZiAoaGFzUHJvcGVydHkpIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGF0
dHJpYnV0ZXMgPSBnZXRTbG90LmF0dHJpYnV0ZXMoKTsKKyAgICAgICAgICAgIGlmIChhdHRyaWJ1
dGVzICYgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5KQorICAgICAgICAgICAgICAgIHJldHVy
biB0eXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgcHV0U2xvdC5pc1N0cmljdE1vZGUoKSwg
UmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpOworICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZXMg
JiBQcm9wZXJ0eUF0dHJpYnV0ZTo6QWNjZXNzb3IpIHsKKyAgICAgICAgICAgICAgICBpZiAoaXND
YWNoZWFibGUpCisgICAgICAgICAgICAgICAgICAgIHB1dFNsb3Quc2V0Q2FjaGVhYmxlU2V0dGVy
KG9iaiwgZ2V0U2xvdC5jYWNoZWRPZmZzZXQoKSk7CisgICAgICAgICAgICAgICAgUkVMRUFTRV9B
TkRfUkVUVVJOKHNjb3BlLCBjYWxsU2V0dGVyKGdsb2JhbE9iamVjdCwgcHV0U2xvdC50aGlzVmFs
dWUoKSwgZ2V0U2xvdC5nZXR0ZXJTZXR0ZXIoKSwgdmFsdWUsIHB1dFNsb3QuaXNTdHJpY3RNb2Rl
KCkgPyBFQ01BTW9kZTo6c3RyaWN0KCkgOiBFQ01BTW9kZTo6c2xvcHB5KCkpKTsKICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIGlmIChncy5pc0N1c3RvbUdldHRlclNldHRlcigpKSB7Ci0gICAg
ICAgICAgICAgICAgYm9vbCBpc0FjY2Vzc29yID0gYXR0cmlidXRlcyAmIFByb3BlcnR5QXR0cmli
dXRlOjpDdXN0b21BY2Nlc3NvcjsKLSAgICAgICAgICAgICAgICBhdXRvIHNldHRlciA9IGpzQ2Fz
dDxDdXN0b21HZXR0ZXJTZXR0ZXIqPihncy5hc0NlbGwoKSktPnNldHRlcigpOwotICAgICAgICAg
ICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgb25seSBiZSBjYWNoaW5nIHRoZXNlIGlmIHdlJ3Jl
IG5vdCBhbiB1bmNhY2hlYWJsZSBkaWN0aW9uYXJ5OgotICAgICAgICAgICAgICAgIC8vIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTUzNDcKLQotICAgICAgICAgICAg
ICAgIC8vIFdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgd2UgZGVjaWRlIHRvIGNhY2hlIHRoaXMg
cHJvcGVydHkgYmVmb3JlIHdlIHBvdGVudGlhbGx5IGV4ZWN1dGUgYXJpYml0cmFyeSBKUy4KLSAg
ICAgICAgICAgICAgICBpZiAoaXNBY2Nlc3NvcikKLSAgICAgICAgICAgICAgICAgICAgc2xvdC5z
ZXRDdXN0b21BY2Nlc3NvcihvYmosIHNldHRlcik7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgICAgICAgICBzbG90LnNldEN1c3RvbVZhbHVlKG9iaiwgc2V0dGVyKTsKLQotICAg
ICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gY2FsbEN1c3RvbVNldHRlcihnbG9iYWxPYmplY3Qs
IHNldHRlciwgaXNBY2Nlc3Nvciwgb2JqLCBzbG90LnRoaXNWYWx1ZSgpLCB2YWx1ZSk7CisgICAg
ICAgICAgICBpZiAoYXR0cmlidXRlcyAmIFByb3BlcnR5QXR0cmlidXRlOjpDdXN0b21BY2Nlc3Nv
cikgeworICAgICAgICAgICAgICAgIFB1dFZhbHVlRnVuYyBjdXN0b21TZXR0ZXIgPSBnZXRTbG90
LmN1c3RvbVNldHRlcigpOworICAgICAgICAgICAgICAgIEFTU0VSVChjdXN0b21TZXR0ZXIpOwor
ICAgICAgICAgICAgICAgIGlmIChpc0NhY2hlYWJsZSkKKyAgICAgICAgICAgICAgICAgICAgcHV0
U2xvdC5zZXRDdXN0b21BY2Nlc3NvcihvYmosIGN1c3RvbVNldHRlcik7CisgICAgICAgICAgICAg
ICAgY3VzdG9tU2V0dGVyKGdsb2JhbE9iamVjdCwgSlNWYWx1ZTo6ZW5jb2RlKHB1dFNsb3QudGhp
c1ZhbHVlKCkpLCBKU1ZhbHVlOjplbmNvZGUodmFsdWUpKTsKICAgICAgICAgICAgICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBmYWxzZSk7Ci0gICAgICAgICAgICAgICAgaWYgKHJlc3Vs
dCAhPSBUcmlTdGF0ZTo6SW5kZXRlcm1pbmF0ZSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IHJlc3VsdCA9PSBUcmlTdGF0ZTo6VHJ1ZTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVzICYgUHJvcGVydHlBdHRy
aWJ1dGU6OkN1c3RvbVZhbHVlKSB7CisgICAgICAgICAgICAgICAgUHV0VmFsdWVGdW5jIGN1c3Rv
bVNldHRlciA9IGdldFNsb3QuY3VzdG9tU2V0dGVyKCk7CisgICAgICAgICAgICAgICAgaWYgKGN1
c3RvbVNldHRlciAmJiAhKGlzVGhpc1ZhbHVlQWx0ZXJlZChwdXRTbG90LCBvYmopICYmIHB1dFNs
b3QuY29udGV4dCgpID09IFB1dFByb3BlcnR5U2xvdDo6UmVmbGVjdFNldCkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKGlzQ2FjaGVhYmxlKQorICAgICAgICAgICAgICAgICAgICAgICAgcHV0
U2xvdC5zZXRDdXN0b21WYWx1ZShvYmosIGN1c3RvbVNldHRlcik7CisgICAgICAgICAgICAgICAg
ICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgY3VzdG9tU2V0dGVyKGdsb2JhbE9iamVjdCwg
SlNWYWx1ZTo6ZW5jb2RlKG9iaiksIEpTVmFsdWU6OmVuY29kZSh2YWx1ZSkpKTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKCFpc1RoaXNWYWx1ZUFsdGVyZWQocHV0U2xv
dCwgb2JqKSkgeworICAgICAgICAgICAgICAgICAgICBvYmotPnB1dERpcmVjdCh2bSwgcHJvcGVy
dHlOYW1lLCB2YWx1ZSwgYXR0cmlidXRlcyAmIH5Qcm9wZXJ0eUF0dHJpYnV0ZTo6Q3VzdG9tVmFs
dWUsIHB1dFNsb3QpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBBU1NFUlQoIShhdHRyaWJ1dGVz
ICYgUHJvcGVydHlBdHRyaWJ1dGU6OkFjY2Vzc29yKSk7Ci0KICAgICAgICAgICAgIC8vIElmIHRo
ZXJlJ3MgYW4gZXhpc3RpbmcgcHJvcGVydHkgb24gdGhlIGJhc2Ugb2JqZWN0LCBvciBvbiBvbmUg
b2YgaXRzIAotICAgICAgICAgICAgLy8gcHJvdG90eXBlcywgd2Ugc2hvdWxkIHN0b3JlIHRoZSBw
cm9wZXJ0eSBvbiB0aGUgKmJhc2UqIG9iamVjdC4KKyAgICAgICAgICAgIC8vIHByb3RvdHlwZXMs
IHdlIHNob3VsZCBzdG9yZSB0aGUgcHJvcGVydHkgb24gdGhlIHJlY2VpdmVyIG9iamVjdC4KICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGlmICghb2JqLT5zdGF0aWNQcm9w
ZXJ0aWVzUmVpZmllZCh2bSkpIHsKLSAgICAgICAgICAgIGlmIChvYmotPmNsYXNzSW5mbyh2bSkt
Pmhhc1N0YXRpY1NldHRlck9yUmVhZG9ubHlQcm9wZXJ0aWVzKCkpIHsKLSAgICAgICAgICAgICAg
ICBpZiAoYXV0byBlbnRyeSA9IG9iai0+ZmluZFByb3BlcnR5SGFzaEVudHJ5KHZtLCBwcm9wZXJ0
eU5hbWUpKQotICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIHB1
dEVudHJ5KGdsb2JhbE9iamVjdCwgZW50cnktPnRhYmxlLT5jbGFzc0ZvclRoaXMsIGVudHJ5LT52
YWx1ZSwgb2JqLCB0aGlzLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KSk7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKG9iai0+dHlwZSgpID09IFByb3h5T2JqZWN0VHlw
ZSkgewotICAgICAgICAgICAgYXV0byogcHJveHkgPSBqc0Nhc3Q8UHJveHlPYmplY3QqPihvYmop
OwotICAgICAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBwcm94eS0+UHJveHlPYmpl
Y3Q6OnB1dChwcm94eSwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KSk7
Ci0gICAgICAgIH0KKwogICAgICAgICBKU1ZhbHVlIHByb3RvdHlwZSA9IG9iai0+Z2V0UHJvdG90
eXBlKHZtLCBnbG9iYWxPYmplY3QpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCBmYWxzZSk7CiAgICAgICAgIGlmIChwcm90b3R5cGUuaXNOdWxsKCkpCkBAIC04NzEsOSArODY5
LDU5IEBAIGJvb2wgSlNPYmplY3Q6OnB1dElubGluZVNsb3coSlNHbG9iYWxPYmoKICAgICAgICAg
b2JqID0gYXNPYmplY3QocHJvdG90eXBlKTsKICAgICB9CiAKLSAgICBpZiAoIXB1dERpcmVjdElu
dGVybmFsPFB1dE1vZGVQdXQ+KHZtLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCAwLCBzbG90KSkKLSAg
ICAgICAgcmV0dXJuIHR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCBzbG90LmlzU3RyaWN0
TW9kZSgpLCBSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcik7Ci0gICAgcmV0dXJuIHRydWU7Cisg
ICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBwdXRJbmxpbmVXaXRoUmVjZWl2ZXJDaGVjayhn
bG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHB1dFNsb3QpKTsKK30KKworYm9vbCBK
U09iamVjdDo6cHV0SW5saW5lV2l0aFJlY2VpdmVyQ2hlY2soSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgUHV0UHJv
cGVydHlTbG90JiBzbG90KQoreworICAgIFZNJiB2bSA9IGdldFZNKGdsb2JhbE9iamVjdCk7Cisg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgaWYgKEpTT2Jq
ZWN0KiByZWNlaXZlciA9IHNsb3QudGhpc1ZhbHVlKCkuZ2V0T2JqZWN0KCkpIHsKKyAgICAgICAg
aWYgKHJlY2VpdmVyLT50eXBlKCkgPT0gUHVyZUZvcndhcmRpbmdQcm94eVR5cGUgJiYganNDYXN0
PEpTUHJveHkqPihyZWNlaXZlciktPnRhcmdldCgpID09IHRoaXMpCisgICAgICAgICAgICByZWNl
aXZlciA9IHRoaXM7CisKKyAgICAgICAgY29uc3QgTWV0aG9kVGFibGUqIG1ldGhvZFRhYmxlID0g
cmVjZWl2ZXItPm1ldGhvZFRhYmxlKHZtKTsKKyAgICAgICAgYXV0byBkZWZpbmVPd25Qcm9wZXJ0
eVZpYVB1dE1ldGhvZCA9IG1ldGhvZFRhYmxlLT5kZWZpbmVPd25Qcm9wZXJ0eVZpYVB1dDsKKyAg
ICAgICAgaWYgKGRlZmluZU93blByb3BlcnR5VmlhUHV0TWV0aG9kICE9IEpTT2JqZWN0OjpkZWZp
bmVPd25Qcm9wZXJ0eVZpYVB1dCkKKyAgICAgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29w
ZSwgZGVmaW5lT3duUHJvcGVydHlWaWFQdXRNZXRob2QocmVjZWl2ZXIsIGdsb2JhbE9iamVjdCwg
cHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCkpOworICAgICAgICBhdXRvIGRlZmluZVByb3BlcnR5
TWV0aG9kID0gbWV0aG9kVGFibGUtPmRlZmluZU93blByb3BlcnR5OworICAgICAgICBpZiAoZGVm
aW5lUHJvcGVydHlNZXRob2QgIT0gSlNPYmplY3Q6OmRlZmluZU93blByb3BlcnR5KQorICAgICAg
ICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCByZWNlaXZlci0+ZGVmaW5lT3duUHJvcGVy
dHlWaWFQdXRTbG93KGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdC5pc1N0
cmljdE1vZGUoKSkpOworCisgICAgICAgIGlmIChyZWNlaXZlci0+cHV0RGlyZWN0SW50ZXJuYWw8
UHV0TW9kZVB1dD4odm0sIHByb3BlcnR5TmFtZSwgdmFsdWUsIDAsIHNsb3QpKQorICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgLy8gRklYTUU6IEZvciBhIGZhaWx1cmUgZHVl
IHRvIHByaW1pdGl2ZSBvciBub24tZXh0ZW5zaWJsZSByZWNlaXZlciwgdGhlIGVycm9yIG1lc3Nh
Z2UgaXMgbWlzbGVhZGluZy4KKyAgICByZXR1cm4gdHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2Nv
cGUsIHNsb3QuaXNTdHJpY3RNb2RlKCksIFJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9yKTsKK30K
KworYm9vbCBKU09iamVjdDo6ZGVmaW5lT3duUHJvcGVydHlWaWFQdXQoSlNPYmplY3QqIG9iamVj
dCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFt
ZSwgSlNWYWx1ZSB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBzbG90KQoreworICAgIHJldHVybiBv
YmplY3QtPmRlZmluZU93blByb3BlcnR5VmlhUHV0RmFzdChnbG9iYWxPYmplY3QsIHByb3BlcnR5
TmFtZSwgdmFsdWUsIHNsb3QpOworfQorCitib29sIEpTT2JqZWN0OjpkZWZpbmVPd25Qcm9wZXJ0
eVZpYVB1dFNsb3coSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIHBy
b3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJvdykKK3sKKyAgICBWTSYg
dm0gPSBnZXRWTShnbG9iYWxPYmplY3QpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKKworICAgIFByb3BlcnR5U2xvdCBzbG90KHRoaXMsIFByb3BlcnR5U2xvdDo6
SW50ZXJuYWxNZXRob2RUeXBlOjpHZXRPd25Qcm9wZXJ0eSk7CisgICAgYm9vbCBoYXNQcm9wZXJ0
eSA9IG1ldGhvZFRhYmxlKHZtKS0+Z2V0T3duUHJvcGVydHlTbG90KHRoaXMsIGdsb2JhbE9iamVj
dCwgcHJvcGVydHlOYW1lLCBzbG90KTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBm
YWxzZSk7CisgICAgaWYgKGhhc1Byb3BlcnR5KSB7CisgICAgICAgIC8vIEZJWE1FOiBGb3IgYW4g
YWNjZXNzb3Igd2l0aCBzZXR0ZXIsIHRoZSBlcnJvciBtZXNzYWdlIGlzIG1pc2xlYWRpbmcuCisg
ICAgICAgIGlmIChzbG90LmF0dHJpYnV0ZXMoKSAmIFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25s
eU9yQWNjZXNzb3JPckN1c3RvbUFjY2Vzc29yKQorICAgICAgICAgICAgcmV0dXJuIHR5cGVFcnJv
cihnbG9iYWxPYmplY3QsIHNjb3BlLCBzaG91bGRUaHJvdywgUmVhZG9ubHlQcm9wZXJ0eVdyaXRl
RXJyb3IpOworCisgICAgICAgIFByb3BlcnR5RGVzY3JpcHRvciB2YWx1ZURlc2NyaXB0b3I7Cisg
ICAgICAgIHZhbHVlRGVzY3JpcHRvci5zZXRWYWx1ZSh2YWx1ZSk7CisKKyAgICAgICAgUkVMRUFT
RV9BTkRfUkVUVVJOKHNjb3BlLCBtZXRob2RUYWJsZSh2bSktPmRlZmluZU93blByb3BlcnR5KHRo
aXMsIGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZURlc2NyaXB0b3IsIHNob3VsZFRo
cm93KSk7CisgICAgfQorCisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBtZXRob2RUYWJs
ZSh2bSktPmRlZmluZU93blByb3BlcnR5KHRoaXMsIGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1l
LCBQcm9wZXJ0eURlc2NyaXB0b3IodmFsdWUsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0
eUF0dHJpYnV0ZTo6Tm9uZSkpLCBzaG91bGRUaHJvdykpOwogfQogCiBib29sIEpTT2JqZWN0Ojpw
dXRCeUluZGV4KEpTQ2VsbCogY2VsbCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgdW5z
aWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZFRocm93KQpAQCAt
MzUyNSwxNiArMzU3MywyNiBAQCBCdXR0ZXJmbHkqIEpTT2JqZWN0OjphbGxvY2F0ZU1vcmVPdXRP
ZkxpCiAgICAgcmV0dXJuIEJ1dHRlcmZseTo6Y3JlYXRlT3JHcm93UHJvcGVydHlTdG9yYWdlKGJ1
dHRlcmZseSgpLCB2bSwgdGhpcywgc3RydWN0dXJlKHZtKSwgb2xkU2l6ZSwgbmV3U2l6ZSk7CiB9
CiAKLXN0YXRpYyBKU0N1c3RvbUdldHRlclNldHRlckZ1bmN0aW9uKiBnZXRDdXN0b21HZXR0ZXJT
ZXR0ZXJGdW5jdGlvbkZvckdldHRlclNldHRlcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBDdXN0b21HZXR0ZXJTZXR0ZXIqIGdldHRlclNl
dHRlciwgSlNDdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbjo6VHlwZSB0eXBlKQorc3RhdGljIEpT
Q3VzdG9tR2V0dGVyRnVuY3Rpb24qIGdldEN1c3RvbUdldHRlckZ1bmN0aW9uKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEdldFZhbHVlRnVuYyBnZXRWYWx1ZUZ1bmMsIE9wdGlvbmFsPERP
TUF0dHJpYnV0ZUFubm90YXRpb24+IGRvbUF0dHJpYnV0ZSwgUHJvcGVydHlOYW1lIHByb3BlcnR5
TmFtZSkKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7Ci0gICAgYXV0byBrZXkg
PSBzdGQ6Om1ha2VfcGFpcihnZXR0ZXJTZXR0ZXIsIChpbnQpdHlwZSk7Ci0gICAgSlNDdXN0b21H
ZXR0ZXJTZXR0ZXJGdW5jdGlvbiogY3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rpb24gPSB2bS5jdXN0
b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbk1hcC5nZXQoa2V5KTsKLSAgICBpZiAoIWN1c3RvbUdldHRl
clNldHRlckZ1bmN0aW9uKSB7Ci0gICAgICAgIGN1c3RvbUdldHRlclNldHRlckZ1bmN0aW9uID0g
SlNDdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbjo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIGdl
dHRlclNldHRlciwgdHlwZSwgcHJvcGVydHlOYW1lLnB1YmxpY05hbWUoKSk7Ci0gICAgICAgIHZt
LmN1c3RvbUdldHRlclNldHRlckZ1bmN0aW9uTWFwLnNldChrZXksIGN1c3RvbUdldHRlclNldHRl
ckZ1bmN0aW9uKTsKKyAgICBKU0N1c3RvbUdldHRlckZ1bmN0aW9uKiBjdXN0b21HZXR0ZXJGdW5j
dGlvbiA9IGdsb2JhbE9iamVjdC0+Y3VzdG9tR2V0dGVyRnVuY3Rpb25NYXAoKS5nZXQoZ2V0VmFs
dWVGdW5jKTsKKyAgICBpZiAoIWN1c3RvbUdldHRlckZ1bmN0aW9uKSB7CisgICAgICAgIGN1c3Rv
bUdldHRlckZ1bmN0aW9uID0gSlNDdXN0b21HZXR0ZXJGdW5jdGlvbjo6Y3JlYXRlKHZtLCBnbG9i
YWxPYmplY3QsIGdldFZhbHVlRnVuYywgZG9tQXR0cmlidXRlLCBwcm9wZXJ0eU5hbWUucHVibGlj
TmFtZSgpKTsKKyAgICAgICAgZ2xvYmFsT2JqZWN0LT5jdXN0b21HZXR0ZXJGdW5jdGlvbk1hcCgp
LnNldChnZXRWYWx1ZUZ1bmMsIGN1c3RvbUdldHRlckZ1bmN0aW9uKTsKICAgICB9Ci0gICAgcmV0
dXJuIGN1c3RvbUdldHRlclNldHRlckZ1bmN0aW9uOworICAgIHJldHVybiBjdXN0b21HZXR0ZXJG
dW5jdGlvbjsKK30KKworc3RhdGljIEpTQ3VzdG9tU2V0dGVyRnVuY3Rpb24qIGdldEN1c3RvbVNl
dHRlckZ1bmN0aW9uKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFB1dFZhbHVlRnVuYyBw
dXRWYWx1ZUZ1bmMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCit7CisgICAgVk0mIHZtID0g
Z2xvYmFsT2JqZWN0LT52bSgpOworICAgIEpTQ3VzdG9tU2V0dGVyRnVuY3Rpb24qIGN1c3RvbVNl
dHRlckZ1bmN0aW9uID0gZ2xvYmFsT2JqZWN0LT5jdXN0b21TZXR0ZXJGdW5jdGlvbk1hcCgpLmdl
dChwdXRWYWx1ZUZ1bmMpOworICAgIGlmICghY3VzdG9tU2V0dGVyRnVuY3Rpb24pIHsKKyAgICAg
ICAgY3VzdG9tU2V0dGVyRnVuY3Rpb24gPSBKU0N1c3RvbVNldHRlckZ1bmN0aW9uOjpjcmVhdGUo
dm0sIGdsb2JhbE9iamVjdCwgcHV0VmFsdWVGdW5jLCBwcm9wZXJ0eU5hbWUpOworICAgICAgICBn
bG9iYWxPYmplY3QtPmN1c3RvbVNldHRlckZ1bmN0aW9uTWFwKCkuc2V0KHB1dFZhbHVlRnVuYywg
Y3VzdG9tU2V0dGVyRnVuY3Rpb24pOworICAgIH0KKyAgICByZXR1cm4gY3VzdG9tU2V0dGVyRnVu
Y3Rpb247CiB9CiAKIGJvb2wgSlNPYmplY3Q6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9w
ZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IpCkBAIC0zNTUxLDMxICszNjA5LDEzIEBAIGJvb2wg
SlNPYmplY3Q6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcigKICAgICBpZiAoc2xvdC5pc0FjY2Vz
c29yKCkpCiAgICAgICAgIGRlc2NyaXB0b3Iuc2V0QWNjZXNzb3JEZXNjcmlwdG9yKHNsb3QuZ2V0
dGVyU2V0dGVyKCksIHNsb3QuYXR0cmlidXRlcygpKTsKICAgICBlbHNlIGlmIChzbG90LmF0dHJp
YnV0ZXMoKSAmIFByb3BlcnR5QXR0cmlidXRlOjpDdXN0b21BY2Nlc3NvcikgewotICAgICAgICBD
dXN0b21HZXR0ZXJTZXR0ZXIqIGdldHRlclNldHRlcjsKLSAgICAgICAgaWYgKHNsb3QuaXNDdXN0
b21BY2Nlc3NvcigpKQotICAgICAgICAgICAgZ2V0dGVyU2V0dGVyID0gc2xvdC5jdXN0b21HZXR0
ZXJTZXR0ZXIoKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBBU1NFUlQoc2xvdC5zbG90
QmFzZSgpKTsKLSAgICAgICAgICAgIEpTT2JqZWN0KiB0aGlzT2JqZWN0ID0gc2xvdC5zbG90QmFz
ZSgpOwotCi0gICAgICAgICAgICBKU1ZhbHVlIG1heWJlR2V0dGVyU2V0dGVyID0gdGhpc09iamVj
dC0+Z2V0RGlyZWN0KHZtLCBwcm9wZXJ0eU5hbWUpOwotICAgICAgICAgICAgaWYgKCFtYXliZUdl
dHRlclNldHRlcikgewotICAgICAgICAgICAgICAgIHRoaXNPYmplY3QtPnJlaWZ5QWxsU3RhdGlj
UHJvcGVydGllcyhnbG9iYWxPYmplY3QpOwotICAgICAgICAgICAgICAgIG1heWJlR2V0dGVyU2V0
dGVyID0gdGhpc09iamVjdC0+Z2V0RGlyZWN0KHZtLCBwcm9wZXJ0eU5hbWUpOwotICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICBBU1NFUlQobWF5YmVHZXR0ZXJTZXR0ZXIpOwotICAgICAgICAg
ICAgZ2V0dGVyU2V0dGVyID0ganNEeW5hbWljQ2FzdDxDdXN0b21HZXR0ZXJTZXR0ZXIqPih2bSwg
bWF5YmVHZXR0ZXJTZXR0ZXIpOwotICAgICAgICB9Ci0gICAgICAgIEFTU0VSVChnZXR0ZXJTZXR0
ZXIpOwotICAgICAgICBpZiAoIWdldHRlclNldHRlcikKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLQorICAgICAgICBSRUxFQVNFX0FTU0VSVF9XSVRIX01FU1NBR0Uoc2xvdC5pc0N1c3RvbSgp
LCAiUHJvcGVydHlTbG90OjpUeXBlQ3VzdG9tIGlzIHJlcXVpcmVkIGluIGNhc2Ugb2YgUHJvcGVy
dHlBdHRyaWJ1dGU6OkN1c3RvbUFjY2Vzc29yIik7CisgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBz
bG90QmFzZUdsb2JhbE9iamVjdCA9IHNsb3Quc2xvdEJhc2UoKS0+Z2xvYmFsT2JqZWN0KHZtKTsK
ICAgICAgICAgZGVzY3JpcHRvci5zZXRDdXN0b21EZXNjcmlwdG9yKHNsb3QuYXR0cmlidXRlcygp
KTsKLSAgICAgICAgaWYgKGdldHRlclNldHRlci0+Z2V0dGVyKCkpCi0gICAgICAgICAgICBkZXNj
cmlwdG9yLnNldEdldHRlcihnZXRDdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbkZvckdldHRlclNl
dHRlcihnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgZ2V0dGVyU2V0dGVyLCBKU0N1c3RvbUdl
dHRlclNldHRlckZ1bmN0aW9uOjpUeXBlOjpHZXR0ZXIpKTsKLSAgICAgICAgaWYgKGdldHRlclNl
dHRlci0+c2V0dGVyKCkpCi0gICAgICAgICAgICBkZXNjcmlwdG9yLnNldFNldHRlcihnZXRDdXN0
b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbkZvckdldHRlclNldHRlcihnbG9iYWxPYmplY3QsIHByb3Bl
cnR5TmFtZSwgZ2V0dGVyU2V0dGVyLCBKU0N1c3RvbUdldHRlclNldHRlckZ1bmN0aW9uOjpUeXBl
OjpTZXR0ZXIpKTsKKyAgICAgICAgaWYgKHNsb3QuY3VzdG9tR2V0dGVyKCkpCisgICAgICAgICAg
ICBkZXNjcmlwdG9yLnNldEdldHRlcihnZXRDdXN0b21HZXR0ZXJGdW5jdGlvbihzbG90QmFzZUds
b2JhbE9iamVjdCwgc2xvdC5jdXN0b21HZXR0ZXIoKSwgc2xvdC5kb21BdHRyaWJ1dGUoKSwgcHJv
cGVydHlOYW1lKSk7CisgICAgICAgIGlmIChzbG90LmN1c3RvbVNldHRlcigpKQorICAgICAgICAg
ICAgZGVzY3JpcHRvci5zZXRTZXR0ZXIoZ2V0Q3VzdG9tU2V0dGVyRnVuY3Rpb24oc2xvdEJhc2VH
bG9iYWxPYmplY3QsIHNsb3QuY3VzdG9tU2V0dGVyKCksIHByb3BlcnR5TmFtZSkpOwogICAgIH0g
ZWxzZSB7CiAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBzbG90LmdldFZhbHVlKGdsb2JhbE9iamVj
dCwgcHJvcGVydHlOYW1lKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZmFs
c2UpOwpAQCAtMzg1OSwzMCArMzg5OSw2IEBAIGJvb2wgSlNPYmplY3Q6OmFueU9iamVjdEluQ2hh
aW5NYXlJbnRlcmMKICAgICB9CiB9CiAKLWJvb2wgSlNPYmplY3Q6OnByb3RvdHlwZUNoYWluTWF5
SW50ZXJjZXB0U3RvcmVUbyhWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCi17Ci0g
ICAgaWYgKHBhcnNlSW5kZXgocHJvcGVydHlOYW1lKSkKLSAgICAgICAgcmV0dXJuIGFueU9iamVj
dEluQ2hhaW5NYXlJbnRlcmNlcHRJbmRleGVkQWNjZXNzZXModm0pOwotICAgIAotICAgIGZvciAo
SlNPYmplY3QqIGN1cnJlbnQgPSB0aGlzOyA7KSB7Ci0gICAgICAgIEpTVmFsdWUgcHJvdG90eXBl
ID0gY3VycmVudC0+Z2V0UHJvdG90eXBlRGlyZWN0KHZtKTsKLSAgICAgICAgaWYgKHByb3RvdHlw
ZS5pc051bGwoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgCi0gICAgICAg
IGN1cnJlbnQgPSBhc09iamVjdChwcm90b3R5cGUpOwotICAgICAgICAKLSAgICAgICAgdW5zaWdu
ZWQgYXR0cmlidXRlczsKLSAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gY3VycmVudC0+
c3RydWN0dXJlKHZtKS0+Z2V0KHZtLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMpOwotICAgICAg
ICBpZiAoIUpTQzo6aXNWYWxpZE9mZnNldChvZmZzZXQpKQotICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgIAotICAgICAgICBpZiAoYXR0cmlidXRlcyAmIChQcm9wZXJ0eUF0dHJpYnV0ZTo6
UmVhZE9ubHkgfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6QWNjZXNzb3IpKQotICAgICAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgICAgIAotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotfQotCiBi
b29sIEpTT2JqZWN0OjpuZWVkc1Nsb3dQdXRJbmRleGluZyhWTSYgdm0pIGNvbnN0CiB7CiAgICAg
cmV0dXJuIGFueU9iamVjdEluQ2hhaW5NYXlJbnRlcmNlcHRJbmRleGVkQWNjZXNzZXModm0pIHx8
IGdsb2JhbE9iamVjdCh2bSktPmlzSGF2aW5nQUJhZFRpbWUoKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAkocmV2aXNpb24gMjcxOTc1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMTcz
LDcgKzE3Myw2IEBAIHB1YmxpYzoKIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBib29s
IGdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIHVu
c2lnbmVkIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CiAgICAgYm9vbCBnZXRPd25Qcm9w
ZXJ0eVNsb3RJbmxpbmUoSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xv
dCYpOwotICAgIEpTX0VYUE9SVF9QUklWQVRFX0lGX0FTU0VSVF9FTkFCTEVEIHN0YXRpYyB2b2lk
IGRvUHV0UHJvcGVydHlTZWN1cml0eUNoZWNrKEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQ
cm9wZXJ0eU5hbWUsIFB1dFByb3BlcnR5U2xvdCYpOwogCiAgICAgLy8gVGhlIGtleSBkaWZmZXJl
bmNlIGJldHdlZW4gdGhpcyBhbmQgZ2V0T3duUHJvcGVydHlTbG90IGlzIHRoYXQgZ2V0T3duUHJv
cGVydHlTbG90CiAgICAgLy8gY3VycmVudGx5IHJldHVybnMgaW5jb3JyZWN0IHJlc3VsdHMgZm9y
IHRoZSBET00gd2luZG93ICh3aXRoIG5vbi1vd24gcHJvcGVydGllcykKQEAgLTE5OSw3ICsxOTgs
NyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCk7
CiAgICAgfQogICAgIAotICAgIHN0YXRpYyBib29sIHB1dElubGluZUZvckpTT2JqZWN0KEpTQ2Vs
bCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQcm9wZXJ0eVNs
b3QmKTsKKyAgICBzdGF0aWMgYm9vbCBwdXRJbmxpbmVGb3JKU09iamVjdChKU09iamVjdCosIEpT
R2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmKTsK
ICAgICAKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9vbCBwdXQoSlNDZWxsKiwgSlNH
bG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOwog
ICAgIC8vIHB1dEJ5SW5kZXggYXNzdW1lcyB0aGF0IHRoZSByZWNlaXZlciBpcyB0aGlzIEpTQ2Vs
bCBvYmplY3QuCkBAIC0yMTgsMTIgKzIxNywxMyBAQCBwdWJsaWM6CiAKICAgICBBTFdBWVNfSU5M
SU5FIGJvb2wgcHV0QnlJbmRleElubGluZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCB1
aW50NjRfdCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpCiAg
ICAgeworICAgICAgICBWTSYgdm0gPSBnZXRWTShnbG9iYWxPYmplY3QpOwogICAgICAgICBpZiAo
TElLRUxZKHByb3BlcnR5TmFtZSA8PSBNQVhfQVJSQVlfSU5ERVgpKQogICAgICAgICAgICAgcmV0
dXJuIHB1dEJ5SW5kZXhJbmxpbmUoZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDx1aW50MzJfdD4o
cHJvcGVydHlOYW1lKSwgdmFsdWUsIHNob3VsZFRocm93KTsKIAogICAgICAgICBBU1NFUlQocHJv
cGVydHlOYW1lIDw9IG1heFNhZmVJbnRlZ2VyKCkpOwogICAgICAgICBQdXRQcm9wZXJ0eVNsb3Qg
c2xvdCh0aGlzLCBzaG91bGRUaHJvdyk7Ci0gICAgICAgIHJldHVybiBwdXRJbmxpbmVGb3JKU09i
amVjdCh0aGlzLCBnbG9iYWxPYmplY3QsIElkZW50aWZpZXI6OmZyb20oZ2V0Vk0oZ2xvYmFsT2Jq
ZWN0KSwgcHJvcGVydHlOYW1lKSwgdmFsdWUsIHNsb3QpOworICAgICAgICByZXR1cm4gbWV0aG9k
VGFibGUodm0pLT5wdXQodGhpcywgZ2xvYmFsT2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tKHZtLCBw
cm9wZXJ0eU5hbWUpLCB2YWx1ZSwgc2xvdCk7CiAgICAgfQogICAgICAgICAKICAgICAvLyBUaGlz
IGlzIHNpbWlsYXIgdG8gdGhlIHB1dERpcmVjdCogbWV0aG9kczoKQEAgLTY0Miw2ICs2NDIsNyBA
QCBwdWJsaWM6CiAgICAgLy8gIC0gYXR0cmlidXRlcyB3aWxsIGJlIHJlc3BlY3RlZCAoYWZ0ZXIg
dGhlIGNhbGwgdGhlIHByb3BlcnR5IHdpbGwgZXhpc3Qgd2l0aCB0aGUgZ2l2ZW4gYXR0cmlidXRl
cykKICAgICAvLyAgLSB0aGUgcHJvcGVydHkgbmFtZSBpcyBhc3N1bWVkIHRvIG5vdCBiZSBhbiBp
bmRleC4KICAgICBib29sIHB1dERpcmVjdChWTSYsIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgdW5z
aWduZWQgYXR0cmlidXRlcyA9IDApOworICAgIGJvb2wgcHV0RGlyZWN0KFZNJiwgUHJvcGVydHlO
YW1lLCBKU1ZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBQdXRQcm9wZXJ0eVNsb3QmKTsKICAg
ICBib29sIHB1dERpcmVjdChWTSYsIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0UHJvcGVydHlT
bG90Jik7CiAgICAgdm9pZCBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbihWTSYsIFByb3BlcnR5
TmFtZSwgSlNWYWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcyA9IDApOwogICAgIGJvb2wgcHV0RGly
ZWN0Tm9uSW5kZXhBY2Nlc3NvcihWTSYsIFByb3BlcnR5TmFtZSwgR2V0dGVyU2V0dGVyKiwgdW5z
aWduZWQgYXR0cmlidXRlcyk7CkBAIC03OTYsNiArNzk3LDcgQEAgcHVibGljOgogICAgIEpTX0VY
UE9SVF9QUklWQVRFIEpTRnVuY3Rpb24qIHB1dERpcmVjdEJ1aWx0aW5GdW5jdGlvbihWTSYsIEpT
R2xvYmFsT2JqZWN0KiwgY29uc3QgUHJvcGVydHlOYW1lJiwgRnVuY3Rpb25FeGVjdXRhYmxlKiwg
dW5zaWduZWQgYXR0cmlidXRlcyk7CiAgICAgSlNGdW5jdGlvbiogcHV0RGlyZWN0QnVpbHRpbkZ1
bmN0aW9uV2l0aG91dFRyYW5zaXRpb24oVk0mLCBKU0dsb2JhbE9iamVjdCosIGNvbnN0IFByb3Bl
cnR5TmFtZSYsIEZ1bmN0aW9uRXhlY3V0YWJsZSosIHVuc2lnbmVkIGF0dHJpYnV0ZXMpOwogCisg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGJvb2wgZGVmaW5lT3duUHJvcGVydHlWaWFQdXQo
SlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0UHJv
cGVydHlTbG90Jik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGJvb2wgZGVmaW5lT3du
UHJvcGVydHkoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwgY29uc3Qg
UHJvcGVydHlEZXNjcmlwdG9yJiwgYm9vbCBzaG91bGRUaHJvdyk7CiAKICAgICBib29sIGlzRW52
aXJvbm1lbnQoKSBjb25zdDsKQEAgLTgxNSw3ICs4MTcsNiBAQCBwdWJsaWM6CiAgICAgYm9vbCBp
c0Zyb3plbihWTSYgdm0pIHsgcmV0dXJuIHN0cnVjdHVyZSh2bSktPmlzRnJvemVuKHZtKTsgfQog
CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBhbnlPYmplY3RJbkNoYWluTWF5SW50ZXJjZXB0
SW5kZXhlZEFjY2Vzc2VzKFZNJikgY29uc3Q7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBw
cm90b3R5cGVDaGFpbk1heUludGVyY2VwdFN0b3JlVG8oVk0mLCBQcm9wZXJ0eU5hbWUpOwogICAg
IGJvb2wgbmVlZHNTbG93UHV0SW5kZXhpbmcoVk0mKSBjb25zdDsKIAogcHJpdmF0ZToKQEAgLTk1
Myw2ICs5NTQsMTMgQEAgcHVibGljOgogICAgIGJvb2wgY2FuUGVyZm9ybUZhc3RQdXRJbmxpbmUo
Vk0mLCBQcm9wZXJ0eU5hbWUpOwogICAgIGJvb2wgY2FuUGVyZm9ybUZhc3RQdXRJbmxpbmVFeGNs
dWRpbmdQcm90byhWTSYpOwogCisgICAgZW51bSBjbGFzcyBQdXRJbmxpbmVTbG93TW9kZSA6IHVp
bnQ4X3QgeyBPcmRpbmFyeVNldCwgSWdub3JlT3duU3BlY2lhbFByb3BlcnRpZXMgfTsKKyAgICBK
U19FWFBPUlRfUFJJVkFURSBORVZFUl9JTkxJTkUgYm9vbCBwdXRJbmxpbmVTbG93KEpTR2xvYmFs
T2JqZWN0KiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmLCBQdXRJbmxp
bmVTbG93TW9kZSA9IFB1dElubGluZVNsb3dNb2RlOjpPcmRpbmFyeVNldCk7CisgICAgSlNfRVhQ
T1JUX1BSSVZBVEUgTkVWRVJfSU5MSU5FIGJvb2wgcHV0SW5saW5lV2l0aFJlY2VpdmVyQ2hlY2so
SlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYp
OworCisgICAgYm9vbCBkZWZpbmVPd25Qcm9wZXJ0eVZpYVB1dEZhc3QoSlNHbG9iYWxPYmplY3Qq
LCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOworICAgIGJvb2wgZGVm
aW5lT3duUHJvcGVydHlWaWFQdXRTbG93KEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBK
U1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsKKwogICAgIGJvb2wgbWF5QmVQcm90b3R5cGUoKSBj
b25zdDsKICAgICB2b2lkIGRpZEJlY29tZVByb3RvdHlwZSgpOwogCkBAIC0xMTA3LDggKzExMTUs
NiBAQCBwcml2YXRlOgogICAgIHRlbXBsYXRlPFB1dE1vZGU+CiAgICAgYm9vbCBwdXREaXJlY3RJ
bnRlcm5hbChWTSYsIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgdW5zaWduZWQgYXR0ciwgUHV0UHJv
cGVydHlTbG90Jik7CiAKLSAgICBKU19FWFBPUlRfUFJJVkFURSBORVZFUl9JTkxJTkUgYm9vbCBw
dXRJbmxpbmVTbG93KEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQ
cm9wZXJ0eVNsb3QmKTsKLQogICAgIGJvb2wgZ2V0Tm9uSW5kZXhQcm9wZXJ0eVNsb3QoSlNHbG9i
YWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwogICAgIGJvb2wgZ2V0T3du
Tm9uSW5kZXhQcm9wZXJ0eVNsb3QoVk0mLCBTdHJ1Y3R1cmUqLCBQcm9wZXJ0eU5hbWUsIFByb3Bl
cnR5U2xvdCYpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZmlsbEdldHRlclByb3BlcnR5
U2xvdChWTSYsIFByb3BlcnR5U2xvdCYsIEpTQ2VsbCosIHVuc2lnbmVkLCBQcm9wZXJ0eU9mZnNl
dCk7CkBAIC0xNDEzLDE2ICsxNDE5LDE2IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKU09iamVjdDo6
ZmlsbEN1c3RvbUcKICAgICBpZiAoY3VzdG9tR2V0dGVyU2V0dGVyLT5pbmhlcml0czxET01BdHRy
aWJ1dGVHZXR0ZXJTZXR0ZXI+KHZtKSkgewogICAgICAgICBhdXRvKiBkb21BdHRyaWJ1dGUgPSBq
c0Nhc3Q8RE9NQXR0cmlidXRlR2V0dGVyU2V0dGVyKj4oY3VzdG9tR2V0dGVyU2V0dGVyKTsKICAg
ICAgICAgaWYgKHN0cnVjdHVyZS0+aXNVbmNhY2hlYWJsZURpY3Rpb25hcnkoKSkKLSAgICAgICAg
ICAgIHNsb3Quc2V0Q3VzdG9tKHRoaXMsIGF0dHJpYnV0ZXMsIGRvbUF0dHJpYnV0ZS0+Z2V0dGVy
KCksIGRvbUF0dHJpYnV0ZS0+ZG9tQXR0cmlidXRlKCkpOworICAgICAgICAgICAgc2xvdC5zZXRD
dXN0b20odGhpcywgYXR0cmlidXRlcywgZG9tQXR0cmlidXRlLT5nZXR0ZXIoKSwgZG9tQXR0cmli
dXRlLT5zZXR0ZXIoKSwgZG9tQXR0cmlidXRlLT5kb21BdHRyaWJ1dGUoKSk7CiAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgIHNsb3Quc2V0Q2FjaGVhYmxlQ3VzdG9tKHRoaXMsIGF0dHJpYnV0ZXMs
IGRvbUF0dHJpYnV0ZS0+Z2V0dGVyKCksIGRvbUF0dHJpYnV0ZS0+ZG9tQXR0cmlidXRlKCkpOwor
ICAgICAgICAgICAgc2xvdC5zZXRDYWNoZWFibGVDdXN0b20odGhpcywgYXR0cmlidXRlcywgZG9t
QXR0cmlidXRlLT5nZXR0ZXIoKSwgZG9tQXR0cmlidXRlLT5zZXR0ZXIoKSwgZG9tQXR0cmlidXRl
LT5kb21BdHRyaWJ1dGUoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAoc3Ry
dWN0dXJlLT5pc1VuY2FjaGVhYmxlRGljdGlvbmFyeSgpKQotICAgICAgICBzbG90LnNldEN1c3Rv
bSh0aGlzLCBhdHRyaWJ1dGVzLCBjdXN0b21HZXR0ZXJTZXR0ZXItPmdldHRlcigpKTsKKyAgICAg
ICAgc2xvdC5zZXRDdXN0b20odGhpcywgYXR0cmlidXRlcywgY3VzdG9tR2V0dGVyU2V0dGVyLT5n
ZXR0ZXIoKSwgY3VzdG9tR2V0dGVyU2V0dGVyLT5zZXR0ZXIoKSk7CiAgICAgZWxzZQotICAgICAg
ICBzbG90LnNldENhY2hlYWJsZUN1c3RvbSh0aGlzLCBhdHRyaWJ1dGVzLCBjdXN0b21HZXR0ZXJT
ZXR0ZXItPmdldHRlcigpKTsKKyAgICAgICAgc2xvdC5zZXRDYWNoZWFibGVDdXN0b20odGhpcywg
YXR0cmlidXRlcywgY3VzdG9tR2V0dGVyU2V0dGVyLT5nZXR0ZXIoKSwgY3VzdG9tR2V0dGVyU2V0
dGVyLT5zZXR0ZXIoKSk7CiB9CiAKIC8vIEl0IG1heSBzZWVtIGNyYXp5IHRvIGlubGluZSBhIGZ1
bmN0aW9uIHRoaXMgbGFyZ2UsIGVzcGVjaWFsbHkgYSB2aXJ0dWFsIGZ1bmN0aW9uLApAQCAtMTQ0
NCwxMCArMTQ1MCw2IEBAIEFMV0FZU19JTkxJTkUgYm9vbCBKU09iamVjdDo6Z2V0T3duUHJvcGUK
IHsKICAgICByZXR1cm4gZ2V0T3duUHJvcGVydHlTbG90SW1wbChvYmplY3QsIGdsb2JhbE9iamVj
dCwgcHJvcGVydHlOYW1lLCBzbG90KTsKIH0KLQotQUxXQVlTX0lOTElORSB2b2lkIEpTT2JqZWN0
Ojpkb1B1dFByb3BlcnR5U2VjdXJpdHlDaGVjayhKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0Kiwg
UHJvcGVydHlOYW1lLCBQdXRQcm9wZXJ0eVNsb3QmKQotewotfQogI2VuZGlmCiAKIC8vIEl0IG1h
eSBzZWVtIGNyYXp5IHRvIGlubGluZSBhIGZ1bmN0aW9uIHRoaXMgbGFyZ2UgYnV0IGl0IG1ha2Vz
IGEgYmlnIGRpZmZlcmVuY2UKQEAgLTE1MzEsNiArMTUzMywxMyBAQCBpbmxpbmUgYm9vbCBKU09i
amVjdDo6cHV0RGlyZWN0KFZNJiB2bSwgCiAgICAgcmV0dXJuIHB1dERpcmVjdEludGVybmFsPFB1
dE1vZGVEZWZpbmVPd25Qcm9wZXJ0eT4odm0sIHByb3BlcnR5TmFtZSwgdmFsdWUsIGF0dHJpYnV0
ZXMsIHNsb3QpOwogfQogCitpbmxpbmUgYm9vbCBKU09iamVjdDo6cHV0RGlyZWN0KFZNJiB2bSwg
UHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgdW5zaWduZWQgYXR0cmli
dXRlcywgUHV0UHJvcGVydHlTbG90JiBzbG90KQoreworICAgIEFTU0VSVCghdmFsdWUuaXNHZXR0
ZXJTZXR0ZXIoKSk7CisgICAgQVNTRVJUKCF2YWx1ZS5pc0N1c3RvbUdldHRlclNldHRlcigpKTsK
KyAgICByZXR1cm4gcHV0RGlyZWN0SW50ZXJuYWw8UHV0TW9kZURlZmluZU93blByb3BlcnR5Pih2
bSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgYXR0cmlidXRlcywgc2xvdCk7Cit9CisKIGlubGluZSBi
b29sIEpTT2JqZWN0OjpwdXREaXJlY3QoVk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1l
LCBKU1ZhbHVlIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgQVNTRVJUKCF2
YWx1ZS5pc0dldHRlclNldHRlcigpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTT2JqZWN0SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTT2JqZWN0SW5saW5lcy5oCShyZXZpc2lvbiAyNzE5NzUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdElubGluZXMuaAkod29ya2luZyBjb3B5KQpA
QCAtODQsNyArODQsNyBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgSlNPYmplY3Q6OmNhblBlcmZvcm1G
CiAgICAgSlNPYmplY3QqIG9iaiA9IHRoaXM7CiAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBvYmotPnN0cnVjdHVyZSh2bSk7Ci0gICAgICAgIGlmIChz
dHJ1Y3R1cmUtPmhhc1JlYWRPbmx5T3JHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzRXhjbHVkaW5nUHJv
dG8oKSB8fCBzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkub3ZlcnJpZGVzR2V0UHJvdG90eXBlKCkpCisg
ICAgICAgIGlmIChzdHJ1Y3R1cmUtPmhhc1JlYWRPbmx5T3JHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVz
RXhjbHVkaW5nUHJvdG8oKSB8fCBzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkub3ZlcnJpZGVzUHV0KCkg
fHwgc3RydWN0dXJlLT50eXBlSW5mbygpLm92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCgpIHx8
IHN0cnVjdHVyZS0+dHlwZUluZm8oKS5vdmVycmlkZXNHZXRQcm90b3R5cGUoKSkKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICBwcm90b3R5cGUgPSBvYmotPmdldFByb3RvdHlw
ZURpcmVjdCh2bSk7CkBAIC0yNDgsMzIgKzI0OCwzOSBAQCBBTFdBWVNfSU5MSU5FIFByb3BlcnR5
T2Zmc2V0IEpTT2JqZWN0OjpwCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotLy8gRUNNQSA4LjYu
Mi4yCi1BTFdBWVNfSU5MSU5FIGJvb2wgSlNPYmplY3Q6OnB1dElubGluZUZvckpTT2JqZWN0KEpT
Q2VsbCogY2VsbCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIHBy
b3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBzbG90KQorLy8gaHR0
cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vcmRpbmFyeXNldAorQUxXQVlTX0lOTElORSBib29s
IEpTT2JqZWN0OjpwdXRJbmxpbmVGb3JKU09iamVjdChKU09iamVjdCogdGhpc09iamVjdCwgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNW
YWx1ZSB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBzbG90KQogewogICAgIFZNJiB2bSA9IGdldFZN
KGdsb2JhbE9iamVjdCk7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwotCi0gICAgSlNPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNPYmplY3QqPihjZWxsKTsK
ICAgICBBU1NFUlQodmFsdWUpOwogICAgIEFTU0VSVCghSGVhcDo6aGVhcCh2YWx1ZSkgfHwgSGVh
cDo6aGVhcCh2YWx1ZSkgPT0gSGVhcDo6aGVhcCh0aGlzT2JqZWN0KSk7CiAKLSAgICBpZiAoVU5M
SUtFTFkoaXNUaGlzVmFsdWVBbHRlcmVkKHNsb3QsIHRoaXNPYmplY3QpKSkKLSAgICAgICAgUkVM
RUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBvcmRpbmFyeVNldFNsb3coZ2xvYmFsT2JqZWN0LCB0aGlz
T2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90LnRoaXNWYWx1ZSgpLCBzbG90LmlzU3Ry
aWN0TW9kZSgpKSk7Ci0KICAgICAvLyBUcnkgaW5kZXhlZCBwdXQgZmlyc3QuIFRoaXMgaXMgcmVx
dWlyZWQgZm9yIGNvcnJlY3RuZXNzLCBzaW5jZSBsb2FkcyBvbiBwcm9wZXJ0eSBuYW1lcyB0aGF0
IGFwcGVhciBsaWtlCiAgICAgLy8gdmFsaWQgaW5kaWNlcyB3aWxsIG5ldmVyIGxvb2sgaW4gdGhl
IG5hbWVkIHByb3BlcnR5IHN0b3JhZ2UuCi0gICAgaWYgKE9wdGlvbmFsPHVpbnQzMl90PiBpbmRl
eCA9IHBhcnNlSW5kZXgocHJvcGVydHlOYW1lKSkKLSAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJO
KHNjb3BlLCBwdXRCeUluZGV4KHRoaXNPYmplY3QsIGdsb2JhbE9iamVjdCwgaW5kZXgudmFsdWUo
KSwgdmFsdWUsIHNsb3QuaXNTdHJpY3RNb2RlKCkpKTsKLQotICAgIGlmICh0aGlzT2JqZWN0LT5j
YW5QZXJmb3JtRmFzdFB1dElubGluZSh2bSwgcHJvcGVydHlOYW1lKSkgewotICAgICAgICBBU1NF
UlQoIXRoaXNPYmplY3QtPnByb3RvdHlwZUNoYWluTWF5SW50ZXJjZXB0U3RvcmVUbyh2bSwgcHJv
cGVydHlOYW1lKSk7Ci0gICAgICAgIGlmICghdGhpc09iamVjdC0+cHV0RGlyZWN0SW50ZXJuYWw8
UHV0TW9kZVB1dD4odm0sIHByb3BlcnR5TmFtZSwgdmFsdWUsIDAsIHNsb3QpKQotICAgICAgICAg
ICAgcmV0dXJuIHR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCBzbG90LmlzU3RyaWN0TW9k
ZSgpLCBSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcik7Ci0gICAgICAgIHJldHVybiB0cnVlOwor
ICAgIGlmIChPcHRpb25hbDx1aW50MzJfdD4gaW5kZXggPSBwYXJzZUluZGV4KHByb3BlcnR5TmFt
ZSkpIHsKKyAgICAgICAgaWYgKFVOTElLRUxZKGlzVGhpc1ZhbHVlQWx0ZXJlZChzbG90LCB0aGlz
T2JqZWN0KSkpCisgICAgICAgICAgICByZXR1cm4gb3JkaW5hcnlTZXRTbG93KGdsb2JhbE9iamVj
dCwgdGhpc09iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdC50aGlzVmFsdWUoKSwgc2xv
dC5pc1N0cmljdE1vZGUoKSk7CisgICAgICAgIHJldHVybiB0aGlzT2JqZWN0LT5tZXRob2RUYWJs
ZSh2bSktPnB1dEJ5SW5kZXgodGhpc09iamVjdCwgZ2xvYmFsT2JqZWN0LCBpbmRleC52YWx1ZSgp
LCB2YWx1ZSwgc2xvdC5pc1N0cmljdE1vZGUoKSk7CiAgICAgfQogCi0gICAgUkVMRUFTRV9BTkRf
UkVUVVJOKHNjb3BlLCB0aGlzT2JqZWN0LT5wdXRJbmxpbmVTbG93KGdsb2JhbE9iamVjdCwgcHJv
cGVydHlOYW1lLCB2YWx1ZSwgc2xvdCkpOworICAgIGlmICghdGhpc09iamVjdC0+Y2FuUGVyZm9y
bUZhc3RQdXRJbmxpbmUodm0sIHByb3BlcnR5TmFtZSkpCisgICAgICAgIHJldHVybiB0aGlzT2Jq
ZWN0LT5wdXRJbmxpbmVTbG93KGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xv
dCk7CisgICAgaWYgKFVOTElLRUxZKGlzVGhpc1ZhbHVlQWx0ZXJlZChzbG90LCB0aGlzT2JqZWN0
KSkpCisgICAgICAgIHJldHVybiB0aGlzT2JqZWN0LT5wdXRJbmxpbmVXaXRoUmVjZWl2ZXJDaGVj
ayhnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpOworICAgIHJldHVybiB0
aGlzT2JqZWN0LT5kZWZpbmVPd25Qcm9wZXJ0eVZpYVB1dEZhc3QoZ2xvYmFsT2JqZWN0LCBwcm9w
ZXJ0eU5hbWUsIHZhbHVlLCBzbG90KTsKK30KKworQUxXQVlTX0lOTElORSBib29sIEpTT2JqZWN0
OjpkZWZpbmVPd25Qcm9wZXJ0eVZpYVB1dEZhc3QoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgUHV0UHJvcGVydHlT
bG90JiBzbG90KQoreworICAgIEFTU0VSVCghcGFyc2VJbmRleChwcm9wZXJ0eU5hbWUpKTsKKwor
ICAgIFZNJiB2bSA9IGdldFZNKGdsb2JhbE9iamVjdCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOworCisgICAgaWYgKHB1dERpcmVjdEludGVybmFsPFB1dE1vZGVQ
dXQ+KHZtLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCAwLCBzbG90KSkKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgLy8gRklYTUU6IEZvciBhIGZhaWx1cmUgZHVlIHRvIG5vbi1leHRlbnNpYmxlIHN0
cnVjdHVyZSwgdGhlIGVycm9yIG1lc3NhZ2UgaXMgbWlzbGVhZGluZy4KKyAgICByZXR1cm4gdHlw
ZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsIHNsb3QuaXNTdHJpY3RNb2RlKCksIFJlYWRvbmx5
UHJvcGVydHlXcml0ZUVycm9yKTsKIH0KIAogLy8gSGFzT3duUHJvcGVydHkoTywgUCkgZnJvbSBz
ZWN0aW9uIDcuMy4xMSBpbiB0aGUgc3BlYy4KQEAgLTMxNiw3ICszMjMsNyBAQCBBTFdBWVNfSU5M
SU5FIGJvb2wgSlNPYmplY3Q6OnB1dERpcmVjdEluCiAgICAgICAgIHVuc2lnbmVkIGN1cnJlbnRB
dHRyaWJ1dGVzOwogICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdl
dCh2bSwgcHJvcGVydHlOYW1lLCBjdXJyZW50QXR0cmlidXRlcyk7CiAgICAgICAgIGlmIChvZmZz
ZXQgIT0gaW52YWxpZE9mZnNldCkgewotICAgICAgICAgICAgaWYgKChtb2RlID09IFB1dE1vZGVQ
dXQpICYmIGN1cnJlbnRBdHRyaWJ1dGVzICYgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5KQor
ICAgICAgICAgICAgaWYgKChtb2RlID09IFB1dE1vZGVQdXQpICYmIGN1cnJlbnRBdHRyaWJ1dGVz
ICYgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5T3JBY2Nlc3Nvck9yQ3VzdG9tQWNjZXNzb3Ip
CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgICAgICBwdXREaXJlY3Qo
dm0sIG9mZnNldCwgdmFsdWUpOwpAQCAtMzc1LDcgKzM4Miw3IEBAIEFMV0FZU19JTkxJTkUgYm9v
bCBKU09iamVjdDo6cHV0RGlyZWN0SW4KICAgICB1bnNpZ25lZCBjdXJyZW50QXR0cmlidXRlczsK
ICAgICBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldCh2bSwgcHJvcGVydHlOYW1lLCBjdXJyZW50QXR0
cmlidXRlcyk7CiAgICAgaWYgKG9mZnNldCAhPSBpbnZhbGlkT2Zmc2V0KSB7Ci0gICAgICAgIGlm
ICgobW9kZSA9PSBQdXRNb2RlUHV0KSAmJiBjdXJyZW50QXR0cmlidXRlcyAmIFByb3BlcnR5QXR0
cmlidXRlOjpSZWFkT25seSkKKyAgICAgICAgaWYgKChtb2RlID09IFB1dE1vZGVQdXQpICYmIGN1
cnJlbnRBdHRyaWJ1dGVzICYgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5T3JBY2Nlc3Nvck9y
Q3VzdG9tQWNjZXNzb3IpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgc3Ry
dWN0dXJlLT5kaWRSZXBsYWNlUHJvcGVydHkob2Zmc2V0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTUHJveHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU1Byb3h5LmgJKHJldmlzaW9uIDI3MTk3NSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTUHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIs
NyBAQCBuYW1lc3BhY2UgSlNDIHsKIGNsYXNzIEpTUHJveHkgOiBwdWJsaWMgSlNOb25GaW5hbE9i
amVjdCB7CiBwdWJsaWM6CiAgICAgdXNpbmcgQmFzZSA9IEpTTm9uRmluYWxPYmplY3Q7Ci0gICAg
c3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVy
ZUZsYWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzR2V0T3duUHJv
cGVydHlOYW1lcyB8IE92ZXJyaWRlc0dldFByb3RvdHlwZSB8IEludGVyY2VwdHNHZXRPd25Qcm9w
ZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm87CisgICAgc3RhdGljIGNvbnN0
ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgT3Zl
cnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlOYW1lcyB8
IE92ZXJyaWRlc1B1dCB8IE92ZXJyaWRlc0dldFByb3RvdHlwZSB8IEludGVyY2VwdHNHZXRPd25Q
cm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm87CiAKICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+CiAgICAgc3RhdGljIElzb1N1YnNw
YWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1R5cGVJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNUeXBlSW5mby5oCShyZXZpc2lvbiAyNzE5NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU1R5cGVJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDcgKzU3LDcg
QEAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBJc0ltbXV0YWJsZVBybwogc3RhdGljIGNvbnN0
ZXhwciB1bnNpZ25lZCBHZXRPd25Qcm9wZXJ0eVNsb3RJc0ltcHVyZUZvclByb3BlcnR5QWJzZW5j
ZSA9IDEgPDwgMTU7CiBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIEludGVyY2VwdHNHZXRPd25Q
cm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8gPSAxIDw8IDE2Owogc3Rh
dGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVJc0ltbW9ydGFsID0gMSA8PCAxNzsKLXN0
YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgSGFzUHV0UHJvcGVydHlTZWN1cml0eUNoZWNrID0gMSA8
PCAxODsKK3N0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgT3ZlcnJpZGVzUHV0ID0gMSA8PCAxODsK
IHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgT3ZlcnJpZGVzR2V0UHJvdG90eXBlID0gMSA8PCAx
OTsKIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgR2V0T3duUHJvcGVydHlTbG90TWF5QmVXcm9u
Z0Fib3V0RG9udEVudW0gPSAxIDw8IDIwOwogCkBAIC0xMDIsMTIgKzEwMiwxMiBAQCBwdWJsaWM6
CiAgICAgYm9vbCBvdmVycmlkZXNHZXRPd25Qcm9wZXJ0eU5hbWVzKCkgY29uc3QgeyByZXR1cm4g
aXNTZXRPbkZsYWdzMjxPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eU5hbWVzPigpOyB9CiAgICAgYm9v
bCBvdmVycmlkZXNHZXRPd25TcGVjaWFsUHJvcGVydHlOYW1lcygpIGNvbnN0IHsgcmV0dXJuIGlz
U2V0T25GbGFnczI8T3ZlcnJpZGVzR2V0T3duU3BlY2lhbFByb3BlcnR5TmFtZXM+KCk7IH0KICAg
ICBib29sIG92ZXJyaWRlc0FueUZvcm1PZkdldE93blByb3BlcnR5TmFtZXMoKSBjb25zdCB7IHJl
dHVybiBvdmVycmlkZXNHZXRPd25Qcm9wZXJ0eU5hbWVzKCkgfHwgb3ZlcnJpZGVzR2V0T3duU3Bl
Y2lhbFByb3BlcnR5TmFtZXMoKTsgfQorICAgIGJvb2wgb3ZlcnJpZGVzUHV0KCkgY29uc3QgeyBy
ZXR1cm4gaXNTZXRPbkZsYWdzMjxPdmVycmlkZXNQdXQ+KCk7IH0KICAgICBib29sIG92ZXJyaWRl
c0dldFByb3RvdHlwZSgpIGNvbnN0IHsgcmV0dXJuIGlzU2V0T25GbGFnczI8T3ZlcnJpZGVzR2V0
UHJvdG90eXBlPigpOyB9CiAgICAgYm9vbCBwcm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmcoKSBjb25z
dCB7IHJldHVybiBpc1NldE9uRmxhZ3MyPFByb2hpYml0c1Byb3BlcnR5Q2FjaGluZz4oKTsgfQog
ICAgIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90SXNJbXB1cmUoKSBjb25zdCB7IHJldHVybiBpc1Nl
dE9uRmxhZ3MyPEdldE93blByb3BlcnR5U2xvdElzSW1wdXJlPigpOyB9CiAgICAgYm9vbCBnZXRP
d25Qcm9wZXJ0eVNsb3RJc0ltcHVyZUZvclByb3BlcnR5QWJzZW5jZSgpIGNvbnN0IHsgcmV0dXJu
IGlzU2V0T25GbGFnczI8R2V0T3duUHJvcGVydHlTbG90SXNJbXB1cmVGb3JQcm9wZXJ0eUFic2Vu
Y2U+KCk7IH0KICAgICBib29sIGdldE93blByb3BlcnR5U2xvdE1heUJlV3JvbmdBYm91dERvbnRF
bnVtKCkgY29uc3QgeyByZXR1cm4gaXNTZXRPbkZsYWdzMjxHZXRPd25Qcm9wZXJ0eVNsb3RNYXlC
ZVdyb25nQWJvdXREb250RW51bT4oKTsgfQotICAgIGJvb2wgaGFzUHV0UHJvcGVydHlTZWN1cml0
eUNoZWNrKCkgY29uc3QgeyByZXR1cm4gaXNTZXRPbkZsYWdzMjxIYXNQdXRQcm9wZXJ0eVNlY3Vy
aXR5Q2hlY2s+KCk7IH0KICAgICBib29sIG5ld0ltcHVyZVByb3BlcnR5RmlyZXNXYXRjaHBvaW50
cygpIGNvbnN0IHsgcmV0dXJuIGlzU2V0T25GbGFnczI8TmV3SW1wdXJlUHJvcGVydHlGaXJlc1dh
dGNocG9pbnRzPigpOyB9CiAgICAgYm9vbCBpc0ltbXV0YWJsZVByb3RvdHlwZUV4b3RpY09iamVj
dCgpIGNvbnN0IHsgcmV0dXJuIGlzU2V0T25GbGFnczI8SXNJbW11dGFibGVQcm90b3R5cGVFeG90
aWNPYmplY3Q+KCk7IH0KICAgICBib29sIGludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUlu
ZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8oKSBjb25zdCB7IHJldHVybiBpc1NldE9uRmxhZ3My
PEludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFpl
cm8+KCk7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xvb2t1cC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xvb2t1cC5oCShyZXZp
c2lvbiAyNzE5NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Mb29rdXAuaAko
d29ya2luZyBjb3B5KQpAQCAtMjM4LDE3ICsyMzgsMjIgQEAgaW5saW5lIGJvb2wgZ2V0U3RhdGlj
UHJvcGVydHlTbG90RnJvbVRhYgogICAgIH0KIAogICAgIGlmIChlbnRyeS0+YXR0cmlidXRlcygp
ICYgUHJvcGVydHlBdHRyaWJ1dGU6OkRPTUpJVEF0dHJpYnV0ZSkgeworICAgICAgICBBU1NFUlRf
V0lUSF9NRVNTQUdFKGVudHJ5LT5hdHRyaWJ1dGVzKCkgJiBQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVh
ZE9ubHksICJET01KSVRBdHRyaWJ1dGUgc3VwcG9ydHMgcmVhZG9ubHkgYXR0cmlidXRlcyBjdXJy
ZW50bHkuIik7CiAgICAgICAgIGNvbnN0IERPTUpJVDo6R2V0dGVyU2V0dGVyKiBkb21KSVQgPSBl
bnRyeS0+ZG9tSklUKCk7Ci0gICAgICAgIHNsb3Quc2V0Q2FjaGVhYmxlQ3VzdG9tKHRoaXNPYmpl
Y3QsIGF0dHJpYnV0ZXNGb3JTdHJ1Y3R1cmUoZW50cnktPmF0dHJpYnV0ZXMoKSksIGRvbUpJVC0+
Z2V0dGVyKCksIERPTUF0dHJpYnV0ZUFubm90YXRpb24geyBjbGFzc0luZm8sIGRvbUpJVCB9KTsK
KyAgICAgICAgc2xvdC5zZXRDYWNoZWFibGVDdXN0b20odGhpc09iamVjdCwgYXR0cmlidXRlc0Zv
clN0cnVjdHVyZShlbnRyeS0+YXR0cmlidXRlcygpKSwgZG9tSklULT5nZXR0ZXIoKSwgbnVsbHB0
ciwgRE9NQXR0cmlidXRlQW5ub3RhdGlvbiB7IGNsYXNzSW5mbywgZG9tSklUIH0pOwogICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKICAgICBpZiAoZW50cnktPmF0dHJpYnV0ZXMoKSAmIFBy
b3BlcnR5QXR0cmlidXRlOjpET01BdHRyaWJ1dGUpIHsKLSAgICAgICAgc2xvdC5zZXRDYWNoZWFi
bGVDdXN0b20odGhpc09iamVjdCwgYXR0cmlidXRlc0ZvclN0cnVjdHVyZShlbnRyeS0+YXR0cmli
dXRlcygpKSwgZW50cnktPnByb3BlcnR5R2V0dGVyKCksIERPTUF0dHJpYnV0ZUFubm90YXRpb24g
eyBjbGFzc0luZm8sIG51bGxwdHIgfSk7CisgICAgICAgIHNsb3Quc2V0Q2FjaGVhYmxlQ3VzdG9t
KHRoaXNPYmplY3QsIGF0dHJpYnV0ZXNGb3JTdHJ1Y3R1cmUoZW50cnktPmF0dHJpYnV0ZXMoKSks
IGVudHJ5LT5wcm9wZXJ0eUdldHRlcigpLCBlbnRyeS0+cHJvcGVydHlQdXR0ZXIoKSwgRE9NQXR0
cmlidXRlQW5ub3RhdGlvbiB7IGNsYXNzSW5mbywgbnVsbHB0ciB9KTsKICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgfQogCi0gICAgc2xvdC5zZXRDYWNoZWFibGVDdXN0b20odGhpc09iamVjdCwg
YXR0cmlidXRlc0ZvclN0cnVjdHVyZShlbnRyeS0+YXR0cmlidXRlcygpKSwgZW50cnktPnByb3Bl
cnR5R2V0dGVyKCkpOworICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXMgPSBhdHRyaWJ1dGVzRm9yU3Ry
dWN0dXJlKGVudHJ5LT5hdHRyaWJ1dGVzKCkpOworICAgIGlmICghKGF0dHJpYnV0ZXMgJiBQcm9w
ZXJ0eUF0dHJpYnV0ZTo6Q3VzdG9tQWNjZXNzb3IpKQorICAgICAgICBhdHRyaWJ1dGVzIHw9IFBy
b3BlcnR5QXR0cmlidXRlOjpDdXN0b21WYWx1ZTsKKworICAgIHNsb3Quc2V0Q2FjaGVhYmxlQ3Vz
dG9tKHRoaXNPYmplY3QsIGF0dHJpYnV0ZXMsIGVudHJ5LT5wcm9wZXJ0eUdldHRlcigpLCBlbnRy
eS0+cHJvcGVydHlQdXR0ZXIoKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTI2Myw3MCAr
MjY4LDYgQEAgaW5saW5lIGJvb2wgcmVwbGFjZVN0YXRpY1Byb3BlcnR5U2xvdChWTQogICAgIHJl
dHVybiB0cnVlOwogfQogCi0vLyAnYmFzZScgbWVhbnMgdGhlIG9iamVjdCBob2xkaW5nIHRoZSBw
cm9wZXJ0eSAocG9zc2libHkgaW4gdGhlIHByb3RvdHlwZSBjaGFpbiBvZiB0aGUgb2JqZWN0IHB1
dCB3YXMgY2FsbGVkIG9uKS4KLS8vICd0aGlzVmFsdWUnIGlzIHRoZSBvYmplY3QgdGhhdCBwdXQg
aXMgYmVpbmcgYXBwbGllZCB0byAoaW4gdGhlIGNhc2Ugb2YgYSBwcm94eSwgdGhlIHByb3h5IHRh
cmdldCkuCi0vLyAnc2xvdC50aGlzVmFsdWUoKScgaXMgdGhlIG9iamVjdCB0aGUgcHV0IHdhcyBv
cmlnaW5hbGx5IHBlcmZvcm1lZCBvbiAoaW4gdGhlIGNhc2Ugb2YgYSBwcm94eSwgdGhlIHByb3h5
IGl0c2VsZikuCi1pbmxpbmUgYm9vbCBwdXRFbnRyeShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBjb25zdCBDbGFzc0luZm8qLCBjb25zdCBIYXNoVGFibGVWYWx1ZSogZW50cnksIEpTT2Jq
ZWN0KiBiYXNlLCBKU09iamVjdCogdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1l
LCBKU1ZhbHVlIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCi17Ci0gICAgVk0mIHZtID0g
Z2V0Vk0oZ2xvYmFsT2JqZWN0KTsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7Ci0KLSAgICBpZiAoZW50cnktPmF0dHJpYnV0ZXMoKSAmIFByb3BlcnR5QXR0cmlidXRl
OjpCdWlsdGluT3JGdW5jdGlvbk9yTGF6eVByb3BlcnR5KSB7Ci0gICAgICAgIGlmICghKGVudHJ5
LT5hdHRyaWJ1dGVzKCkgJiBQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkpKSB7Ci0gICAgICAg
ICAgICAvLyBJZiB0aGlzIGlzIGEgZnVuY3Rpb24gb3IgbGF6eSBwcm9wZXJ0eSBwdXQgdGhlbiB3
ZSBqdXN0IGRvIHRoZSBwdXQgYmVjYXVzZQotICAgICAgICAgICAgLy8gbG9naWNhbGx5IHRoZSBv
YmplY3QgYWxyZWFkeSBoYWQgdGhlIHByb3BlcnR5LCBzbyB0aGlzIGlzIGp1c3QgYSByZXBsYWNl
LgotICAgICAgICAgICAgLy8gRklYTUU6IHRoaXNWYWx1ZSBtYXkgYmUgYW4gb2JqZWN0IHdpdGgg
bm9uLWV4dGVuc2libGUgc3RydWN0dXJlIHdlIG11c3QgdGhyb3cgZm9yLgotICAgICAgICAgICAg
aWYgKEpTT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNEeW5hbWljQ2FzdDxKU09iamVjdCo+KHZtLCB0
aGlzVmFsdWUpKQotICAgICAgICAgICAgICAgIHRoaXNPYmplY3QtPnB1dERpcmVjdCh2bSwgcHJv
cGVydHlOYW1lLCB2YWx1ZSk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQot
ICAgICAgICByZXR1cm4gdHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsIHNsb3QuaXNTdHJp
Y3RNb2RlKCksIFJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9yKTsKLSAgICB9Ci0KLSAgICBpZiAo
ZW50cnktPmF0dHJpYnV0ZXMoKSAmIFByb3BlcnR5QXR0cmlidXRlOjpBY2Nlc3NvcikKLSAgICAg
ICAgcmV0dXJuIHR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCBzbG90LmlzU3RyaWN0TW9k
ZSgpLCBSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcik7Ci0KLSAgICBpZiAoIShlbnRyeS0+YXR0
cmlidXRlcygpICYgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5KSkgewotICAgICAgICBBU1NF
UlRfV0lUSF9NRVNTQUdFKCEoZW50cnktPmF0dHJpYnV0ZXMoKSAmIFByb3BlcnR5QXR0cmlidXRl
OjpET01KSVRBdHRyaWJ1dGUpLCAiRE9NSklUQXR0cmlidXRlIHN1cHBvcnRzIHJlYWRvbmx5IGF0
dHJpYnV0ZXMgY3VycmVudGx5LiIpOwotICAgICAgICBib29sIGlzQWNjZXNzb3IgPSBlbnRyeS0+
YXR0cmlidXRlcygpICYgUHJvcGVydHlBdHRyaWJ1dGU6OkN1c3RvbUFjY2Vzc29yOwotICAgICAg
ICAvLyBGSVhNRTogV2Ugc2hvdWxkIG9ubHkgYmUgY2FjaGluZyB0aGVzZSBpZiB3ZSdyZSBub3Qg
YW4gdW5jYWNoZWFibGUgZGljdGlvbmFyeToKLSAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNTM0NwotICAgICAgICAvLyBXZSBuZWVkIHRvIG1ha2Ug
c3VyZSB0aGF0IHdlIGRlY2lkZSB0byBjYWNoZSB0aGlzIHByb3BlcnR5IGJlZm9yZSB3ZSBwb3Rl
bnRpYWxseSBleGVjdXRlIGFyaWJpdHJhcnkgSlMuCi0gICAgICAgIGlmIChpc0FjY2Vzc29yKQot
ICAgICAgICAgICAgc2xvdC5zZXRDdXN0b21BY2Nlc3NvcihiYXNlLCBlbnRyeS0+cHJvcGVydHlQ
dXR0ZXIoKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNsb3Quc2V0Q3VzdG9tVmFsdWUo
YmFzZSwgZW50cnktPnByb3BlcnR5UHV0dGVyKCkpOwotCi0gICAgICAgIGF1dG8gcmVzdWx0ID0g
Y2FsbEN1c3RvbVNldHRlcihnbG9iYWxPYmplY3QsIGVudHJ5LT5wcm9wZXJ0eVB1dHRlcigpLCBp
c0FjY2Vzc29yLCBiYXNlLCBzbG90LnRoaXNWYWx1ZSgpLCB2YWx1ZSk7Ci0gICAgICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIGZhbHNlKTsKLSAgICAgICAgaWYgKHJlc3VsdCAhPSBUcmlT
dGF0ZTo6SW5kZXRlcm1pbmF0ZSkKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQgPT0gVHJpU3Rh
dGU6OlRydWU7Ci0KLSAgICAgICAgLy8gRklYTUU6IHRoaXNWYWx1ZSBtYXkgYmUgYW4gb2JqZWN0
IHdpdGggbm9uLWV4dGVuc2libGUgc3RydWN0dXJlIHdlIG11c3QgdGhyb3cgZm9yLgotICAgICAg
ICBpZiAoSlNPYmplY3QqIHRoaXNPYmplY3QgPSBqc0R5bmFtaWNDYXN0PEpTT2JqZWN0Kj4odm0s
IHRoaXNWYWx1ZSkpCi0gICAgICAgICAgICB0aGlzT2JqZWN0LT5wdXREaXJlY3Qodm0sIHByb3Bl
cnR5TmFtZSwgdmFsdWUpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1
cm4gdHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsIHNsb3QuaXNTdHJpY3RNb2RlKCksIFJl
YWRvbmx5UHJvcGVydHlXcml0ZUVycm9yKTsKLX0KLQotLyoqCi0gKiBUaGlzIG9uZSBpcyBmb3Ig
InB1dCIuCi0gKiBJdCBsb29rcyB1cCBhIGhhc2ggZW50cnkgZm9yIHRoZSBwcm9wZXJ0eSB0byBi
ZSBzZXQuICBJZiBhbiBlbnRyeQotICogaXMgZm91bmQgaXQgc2V0cyB0aGUgdmFsdWUgYW5kIHJl
dHVybnMgdHJ1ZSwgZWxzZSBpdCByZXR1cm5zIGZhbHNlLgotICovCi1pbmxpbmUgYm9vbCBsb29r
dXBQdXQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5
TmFtZSwgSlNPYmplY3QqIGJhc2UsIEpTVmFsdWUgdmFsdWUsIGNvbnN0IEhhc2hUYWJsZSYgdGFi
bGUsIFB1dFByb3BlcnR5U2xvdCYgc2xvdCwgYm9vbCYgcHV0UmVzdWx0KQotewotICAgIGNvbnN0
IEhhc2hUYWJsZVZhbHVlKiBlbnRyeSA9IHRhYmxlLmVudHJ5KHByb3BlcnR5TmFtZSk7Ci0KLSAg
ICBpZiAoIWVudHJ5KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBwdXRSZXN1bHQgPSBw
dXRFbnRyeShnbG9iYWxPYmplY3QsIHRhYmxlLmNsYXNzRm9yVGhpcywgZW50cnksIGJhc2UsIGJh
c2UsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpOwotICAgIHJldHVybiB0cnVlOwotfQotCiBp
bmxpbmUgdm9pZCByZWlmeVN0YXRpY1Byb3BlcnR5KFZNJiB2bSwgY29uc3QgQ2xhc3NJbmZvKiBj
bGFzc0luZm8sIGNvbnN0IFByb3BlcnR5TmFtZSYgcHJvcGVydHlOYW1lLCBjb25zdCBIYXNoVGFi
bGVWYWx1ZSYgdmFsdWUsIEpTT2JqZWN0JiB0aGlzT2JqKQogewogICAgIGlmICh2YWx1ZS5hdHRy
aWJ1dGVzKCkgJiBQcm9wZXJ0eUF0dHJpYnV0ZTo6QnVpbHRpbikgewpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlTbG90LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eVNsb3QuY3BwCShyZXZpc2lvbiAyNzE5
NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eVNsb3QuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00NiwyMSArNDYsNiBAQCBKU1ZhbHVlIFByb3BlcnR5U2xvdDo6Y3Vz
dG9tR2V0dGVyKEpTR2xvCiAgICAgcmV0dXJuIEpTVmFsdWU6OmRlY29kZShtX2RhdGEuY3VzdG9t
LmdldFZhbHVlKGdsb2JhbE9iamVjdCwgSlNWYWx1ZTo6ZW5jb2RlKHRoaXNWYWx1ZSksIHByb3Bl
cnR5TmFtZSkpOwogfQogCi1KU1ZhbHVlIFByb3BlcnR5U2xvdDo6Y3VzdG9tQWNjZXNzb3JHZXR0
ZXIoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFt
ZSkgY29uc3QKLXsKLSAgICBpZiAoIW1fZGF0YS5jdXN0b21BY2Nlc3Nvci5nZXR0ZXJTZXR0ZXIt
PmdldHRlcigpKQotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLQotICAgIGlmIChhdXRv
IGRvbUF0dHJpYnV0ZSA9IHRoaXMtPmRvbUF0dHJpYnV0ZSgpKSB7Ci0gICAgICAgIFZNJiB2bSA9
IGdsb2JhbE9iamVjdC0+dm0oKTsKLSAgICAgICAgaWYgKCFtX3RoaXNWYWx1ZS5pbmhlcml0cyh2
bSwgZG9tQXR0cmlidXRlLT5jbGFzc0luZm8pKSB7Ci0gICAgICAgICAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgICAgICAgICByZXR1cm4gdGhyb3dET01BdHRy
aWJ1dGVHZXR0ZXJUeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgZG9tQXR0cmlidXRlLT5j
bGFzc0luZm8sIHByb3BlcnR5TmFtZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIEpT
VmFsdWU6OmRlY29kZShtX2RhdGEuY3VzdG9tQWNjZXNzb3IuZ2V0dGVyU2V0dGVyLT5nZXR0ZXIo
KShnbG9iYWxPYmplY3QsIEpTVmFsdWU6OmVuY29kZShtX3RoaXNWYWx1ZSksIHByb3BlcnR5TmFt
ZSkpOwotfQotCiBKU1ZhbHVlIFByb3BlcnR5U2xvdDo6Z2V0UHVyZVJlc3VsdCgpIGNvbnN0CiB7
CiAgICAgSlNWYWx1ZSByZXN1bHQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9Qcm9wZXJ0eVNsb3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Qcm9wZXJ0eVNsb3QuaAkocmV2aXNpb24gMjcxOTc1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvUHJvcGVydHlTbG90LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDYgKzQ3
LDcgQEAgZW51bSBjbGFzcyBQcm9wZXJ0eUF0dHJpYnV0ZSA6IHVuc2lnbmVkIAogICAgIEN1c3Rv
bVZhbHVlICAgICAgID0gMSA8PCA2LAogICAgIEN1c3RvbUFjY2Vzc29yT3JWYWx1ZSA9IEN1c3Rv
bUFjY2Vzc29yIHwgQ3VzdG9tVmFsdWUsCiAgICAgQWNjZXNzb3JPckN1c3RvbUFjY2Vzc29yT3JW
YWx1ZSA9IEFjY2Vzc29yIHwgQ3VzdG9tQWNjZXNzb3IgfCBDdXN0b21WYWx1ZSwKKyAgICBSZWFk
T25seU9yQWNjZXNzb3JPckN1c3RvbUFjY2Vzc29yID0gUmVhZE9ubHkgfCBBY2Nlc3NvciB8IEN1
c3RvbUFjY2Vzc29yLAogCiAgICAgLy8gVGhpbmdzIHRoYXQgYXJlIHVzZWQgYnkgc3RhdGljIGhh
c2h0YWJsZXMgYXJlIG5vdCBpbiB0aGUgYXR0cmlidXRlcyBieXRlIGluIFByb3BlcnR5TWFwRW50
cnkuCiAgICAgRnVuY3Rpb24gICAgICAgICAgPSAxIDw8IDgsICAvLyBwcm9wZXJ0eSBpcyBhIGZ1
bmN0aW9uIC0gb25seSB1c2VkIGJ5IHN0YXRpYyBoYXNodGFibGVzCkBAIC04NCwxMSArODUsMTcg
QEAgaW5saW5lIHVuc2lnbmVkIGF0dHJpYnV0ZXNGb3JTdHJ1Y3R1cmUodQogICAgIHJldHVybiBz
dGF0aWNfY2FzdDx1aW50OF90PihhdHRyaWJ1dGVzKTsKIH0KIAordXNpbmcgR2V0VmFsdWVGdW5j
ID0gRW5jb2RlZEpTVmFsdWUoSklUX09QRVJBVElPTl9BVFRSSUJVVEVTKikoSlNHbG9iYWxPYmpl
Y3QqLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSk7Cit1c2luZyBHZXRW
YWx1ZUZ1bmNXaXRoUHRyID0gRW5jb2RlZEpTVmFsdWUoSklUX09QRVJBVElPTl9BVFRSSUJVVEVT
KikoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFt
ZSwgdm9pZCopOworCit1c2luZyBQdXRWYWx1ZUZ1bmMgPSBib29sICgqKShKU0dsb2JhbE9iamVj
dCosIEVuY29kZWRKU1ZhbHVlIGJhc2VPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHZhbHVlKTsKK3Vz
aW5nIFB1dFZhbHVlRnVuY1dpdGhQdHIgPSBib29sICgqKShKU0dsb2JhbE9iamVjdCosIEVuY29k
ZWRKU1ZhbHVlIGJhc2VPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHZhbHVlLCB2b2lkKik7CisKIGNs
YXNzIFByb3BlcnR5U2xvdCB7CiAKICAgICAvLyBXZSByZWx5IG9uIFByb3BlcnR5U2xvdCBiZWlu
ZyBzdGFjayBhbGxvY2F0ZWQgd2hlbiB1c2VkLiBUaGlzIGlzIG5lZWRlZAogICAgIC8vIGJlY2F1
c2Ugd2UgcmVseSBvbiBzb21lIG9mIGl0cyBmaWVsZHMgYmVpbmcgYSBHQyByb290LiBGb3IgZXhh
bXBsZSwgaXQKLSAgICAvLyBtYXkgYmUgdGhlIG9ubHkgdGhpbmcgdGhhdCBwb2ludHMgdG8gdGhl
IEN1c3RvbUdldHRlclNldHRlciBwcm9wZXJ0eSBpdCBoYXMuCisgICAgLy8gbWF5IGJlIHRoZSBv
bmx5IHRoaW5nIHRoYXQgcG9pbnRzIHRvIHRoZSBHZXR0ZXJTZXR0ZXIgcHJvcGVydHkgaXQgaGFz
LgogICAgIFdURl9GT1JCSURfSEVBUF9BTExPQ0FUSU9OOwogCiAgICAgZW51bSBQcm9wZXJ0eVR5
cGUgOiB1aW50OF90IHsKQEAgLTk2LDcgKzEwMyw2IEBAIGNsYXNzIFByb3BlcnR5U2xvdCB7CiAg
ICAgICAgIFR5cGVWYWx1ZSwKICAgICAgICAgVHlwZUdldHRlciwKICAgICAgICAgVHlwZUN1c3Rv
bSwKLSAgICAgICAgVHlwZUN1c3RvbUFjY2Vzc29yLAogICAgIH07CiAKIHB1YmxpYzoKQEAgLTEy
MSw4ICsxMjcsOCBAQCBwdWJsaWM6CiAgICAgICAgICAgICBkaXNhbGxvd1ZNRW50cnkuZW1wbGFj
ZSgqdm1Gb3JJbnF1aXJ5KTsKICAgICB9CiAKLSAgICB1c2luZyBHZXRWYWx1ZUZ1bmMgPSBFbmNv
ZGVkSlNWYWx1ZShKSVRfT1BFUkFUSU9OX0FUVFJJQlVURVMqKShKU0dsb2JhbE9iamVjdCosIEVu
Y29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKTsKLSAgICB1c2luZyBHZXRWYWx1
ZUZ1bmNXaXRoUHRyID0gRW5jb2RlZEpTVmFsdWUoSklUX09QRVJBVElPTl9BVFRSSUJVVEVTKiko
SlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSwg
dm9pZCopOworICAgIHVzaW5nIEdldFZhbHVlRnVuYyA9IEpTQzo6R2V0VmFsdWVGdW5jOworICAg
IHVzaW5nIEdldFZhbHVlRnVuY1dpdGhQdHIgPSBKU0M6OkdldFZhbHVlRnVuY1dpdGhQdHI7CiAK
ICAgICBKU1ZhbHVlIGdldFZhbHVlKEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lKSBjb25z
dDsKICAgICBKU1ZhbHVlIGdldFZhbHVlKEpTR2xvYmFsT2JqZWN0KiwgdWludDY0X3QgcHJvcGVy
dHlOYW1lKSBjb25zdDsKQEAgLTEzMyw3ICsxMzksNiBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc1Zh
bHVlKCkgY29uc3QgeyByZXR1cm4gbV9wcm9wZXJ0eVR5cGUgPT0gVHlwZVZhbHVlOyB9CiAgICAg
Ym9vbCBpc0FjY2Vzc29yKCkgY29uc3QgeyByZXR1cm4gbV9wcm9wZXJ0eVR5cGUgPT0gVHlwZUdl
dHRlcjsgfQogICAgIGJvb2wgaXNDdXN0b20oKSBjb25zdCB7IHJldHVybiBtX3Byb3BlcnR5VHlw
ZSA9PSBUeXBlQ3VzdG9tOyB9Ci0gICAgYm9vbCBpc0N1c3RvbUFjY2Vzc29yKCkgY29uc3QgeyBy
ZXR1cm4gbV9wcm9wZXJ0eVR5cGUgPT0gVHlwZUN1c3RvbUFjY2Vzc29yOyB9CiAgICAgYm9vbCBp
c0NhY2hlYWJsZVZhbHVlKCkgY29uc3QgeyByZXR1cm4gaXNDYWNoZWFibGUoKSAmJiBpc1ZhbHVl
KCk7IH0KICAgICBib29sIGlzQ2FjaGVhYmxlR2V0dGVyKCkgY29uc3QgeyByZXR1cm4gaXNDYWNo
ZWFibGUoKSAmJiBpc0FjY2Vzc29yKCk7IH0KICAgICBib29sIGlzQ2FjaGVhYmxlQ3VzdG9tKCkg
Y29uc3QgeyByZXR1cm4gaXNDYWNoZWFibGUoKSAmJiBpc0N1c3RvbSgpOyB9CkBAIC0xNjQsMTQg
KzE2OSwxNCBAQCBwdWJsaWM6CiAKICAgICBHZXRWYWx1ZUZ1bmMgY3VzdG9tR2V0dGVyKCkgY29u
c3QKICAgICB7Ci0gICAgICAgIEFTU0VSVChpc0NhY2hlYWJsZUN1c3RvbSgpKTsKKyAgICAgICAg
QVNTRVJUKGlzQ3VzdG9tKCkpOwogICAgICAgICByZXR1cm4gbV9kYXRhLmN1c3RvbS5nZXRWYWx1
ZTsKICAgICB9CiAKLSAgICBDdXN0b21HZXR0ZXJTZXR0ZXIqIGN1c3RvbUdldHRlclNldHRlcigp
IGNvbnN0CisgICAgUHV0VmFsdWVGdW5jIGN1c3RvbVNldHRlcigpIGNvbnN0CiAgICAgewotICAg
ICAgICBBU1NFUlQoaXNDdXN0b21BY2Nlc3NvcigpKTsKLSAgICAgICAgcmV0dXJuIG1fZGF0YS5j
dXN0b21BY2Nlc3Nvci5nZXR0ZXJTZXR0ZXI7CisgICAgICAgIEFTU0VSVChpc0N1c3RvbSgpKTsK
KyAgICAgICAgcmV0dXJuIG1fZGF0YS5jdXN0b20ucHV0VmFsdWU7CiAgICAgfQogCiAgICAgSlNP
YmplY3QqIHNsb3RCYXNlKCkgY29uc3QKQEAgLTI1NSwxMyArMjYwLDE1IEBAIHB1YmxpYzoKICAg
ICAgICAgbV9hZGRpdGlvbmFsRGF0YS5tb2R1bGVOYW1lc3BhY2VTbG90LnNjb3BlT2Zmc2V0ID0g
c2NvcGVPZmZzZXQub2Zmc2V0KCk7CiAgICAgfQogCi0gICAgdm9pZCBzZXRDdXN0b20oSlNPYmpl
Y3QqIHNsb3RCYXNlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBHZXRWYWx1ZUZ1bmMgZ2V0VmFsdWUp
CisgICAgdm9pZCBzZXRDdXN0b20oSlNPYmplY3QqIHNsb3RCYXNlLCB1bnNpZ25lZCBhdHRyaWJ1
dGVzLCBHZXRWYWx1ZUZ1bmMgZ2V0VmFsdWUsIFB1dFZhbHVlRnVuYyBwdXRWYWx1ZSA9IG51bGxw
dHIpCiAgICAgewogICAgICAgICBBU1NFUlQoYXR0cmlidXRlcyA9PSBhdHRyaWJ1dGVzRm9yU3Ry
dWN0dXJlKGF0dHJpYnV0ZXMpKTsKICAgICAgICAgCiAgICAgICAgIEFTU0VSVChnZXRWYWx1ZSk7
CiAgICAgICAgIGFzc2VydElzQ0Z1bmN0aW9uUHRyKGdldFZhbHVlKTsKICAgICAgICAgbV9kYXRh
LmN1c3RvbS5nZXRWYWx1ZSA9IGdldFZhbHVlOworICAgICAgICBhc3NlcnRJc051bGxPckNGdW5j
dGlvblB0cihwdXRWYWx1ZSk7CisgICAgICAgIG1fZGF0YS5jdXN0b20ucHV0VmFsdWUgPSBwdXRW
YWx1ZTsKICAgICAgICAgbV9hdHRyaWJ1dGVzID0gYXR0cmlidXRlczsKIAogICAgICAgICBBU1NF
UlQoc2xvdEJhc2UpOwpAQCAtMjcwLDIwICsyNzcsMjIgQEAgcHVibGljOgogICAgICAgICBBU1NF
UlQobV9jYWNoZWFiaWxpdHkgPT0gQ2FjaGluZ0Rpc2FsbG93ZWQpOwogICAgIH0KIAotICAgIHZv
aWQgc2V0Q3VzdG9tKEpTT2JqZWN0KiBzbG90QmFzZSwgdW5zaWduZWQgYXR0cmlidXRlcywgR2V0
VmFsdWVGdW5jIGdldFZhbHVlLCBET01BdHRyaWJ1dGVBbm5vdGF0aW9uIGRvbUF0dHJpYnV0ZSkK
KyAgICB2b2lkIHNldEN1c3RvbShKU09iamVjdCogc2xvdEJhc2UsIHVuc2lnbmVkIGF0dHJpYnV0
ZXMsIEdldFZhbHVlRnVuYyBnZXRWYWx1ZSwgUHV0VmFsdWVGdW5jIHB1dFZhbHVlLCBET01BdHRy
aWJ1dGVBbm5vdGF0aW9uIGRvbUF0dHJpYnV0ZSkKICAgICB7Ci0gICAgICAgIHNldEN1c3RvbShz
bG90QmFzZSwgYXR0cmlidXRlcywgZ2V0VmFsdWUpOworICAgICAgICBzZXRDdXN0b20oc2xvdEJh
c2UsIGF0dHJpYnV0ZXMsIGdldFZhbHVlLCBwdXRWYWx1ZSk7CiAgICAgICAgIG1fYWRkaXRpb25h
bERhdGFUeXBlID0gQWRkaXRpb25hbERhdGFUeXBlOjpET01BdHRyaWJ1dGU7CiAgICAgICAgIG1f
YWRkaXRpb25hbERhdGEuZG9tQXR0cmlidXRlID0gZG9tQXR0cmlidXRlOwogICAgIH0KICAgICAK
LSAgICB2b2lkIHNldENhY2hlYWJsZUN1c3RvbShKU09iamVjdCogc2xvdEJhc2UsIHVuc2lnbmVk
IGF0dHJpYnV0ZXMsIEdldFZhbHVlRnVuYyBnZXRWYWx1ZSkKKyAgICB2b2lkIHNldENhY2hlYWJs
ZUN1c3RvbShKU09iamVjdCogc2xvdEJhc2UsIHVuc2lnbmVkIGF0dHJpYnV0ZXMsIEdldFZhbHVl
RnVuYyBnZXRWYWx1ZSwgUHV0VmFsdWVGdW5jIHB1dFZhbHVlID0gbnVsbHB0cikKICAgICB7CiAg
ICAgICAgIEFTU0VSVChhdHRyaWJ1dGVzID09IGF0dHJpYnV0ZXNGb3JTdHJ1Y3R1cmUoYXR0cmli
dXRlcykpOwogICAgICAgICAKICAgICAgICAgQVNTRVJUKGdldFZhbHVlKTsKICAgICAgICAgYXNz
ZXJ0SXNDRnVuY3Rpb25QdHIoZ2V0VmFsdWUpOwogICAgICAgICBtX2RhdGEuY3VzdG9tLmdldFZh
bHVlID0gZ2V0VmFsdWU7CisgICAgICAgIGFzc2VydElzTnVsbE9yQ0Z1bmN0aW9uUHRyKHB1dFZh
bHVlKTsKKyAgICAgICAgbV9kYXRhLmN1c3RvbS5wdXRWYWx1ZSA9IHB1dFZhbHVlOwogICAgICAg
ICBtX2F0dHJpYnV0ZXMgPSBhdHRyaWJ1dGVzOwogCiAgICAgICAgIEFTU0VSVChzbG90QmFzZSk7
CkBAIC0yOTMsMzEgKzMwMiwxMyBAQCBwdWJsaWM6CiAgICAgICAgIG1fY2FjaGVhYmlsaXR5ID0g
Q2FjaGluZ0FsbG93ZWQ7CiAgICAgfQogCi0gICAgdm9pZCBzZXRDYWNoZWFibGVDdXN0b20oSlNP
YmplY3QqIHNsb3RCYXNlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBHZXRWYWx1ZUZ1bmMgZ2V0VmFs
dWUsIERPTUF0dHJpYnV0ZUFubm90YXRpb24gZG9tQXR0cmlidXRlKQorICAgIHZvaWQgc2V0Q2Fj
aGVhYmxlQ3VzdG9tKEpTT2JqZWN0KiBzbG90QmFzZSwgdW5zaWduZWQgYXR0cmlidXRlcywgR2V0
VmFsdWVGdW5jIGdldFZhbHVlLCBQdXRWYWx1ZUZ1bmMgcHV0VmFsdWUsIERPTUF0dHJpYnV0ZUFu
bm90YXRpb24gZG9tQXR0cmlidXRlKQogICAgIHsKLSAgICAgICAgc2V0Q2FjaGVhYmxlQ3VzdG9t
KHNsb3RCYXNlLCBhdHRyaWJ1dGVzLCBnZXRWYWx1ZSk7CisgICAgICAgIHNldENhY2hlYWJsZUN1
c3RvbShzbG90QmFzZSwgYXR0cmlidXRlcywgZ2V0VmFsdWUsIHB1dFZhbHVlKTsKICAgICAgICAg
bV9hZGRpdGlvbmFsRGF0YVR5cGUgPSBBZGRpdGlvbmFsRGF0YVR5cGU6OkRPTUF0dHJpYnV0ZTsK
ICAgICAgICAgbV9hZGRpdGlvbmFsRGF0YS5kb21BdHRyaWJ1dGUgPSBkb21BdHRyaWJ1dGU7CiAg
ICAgfQogCi0gICAgdm9pZCBzZXRDdXN0b21HZXR0ZXJTZXR0ZXIoSlNPYmplY3QqIHNsb3RCYXNl
LCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBDdXN0b21HZXR0ZXJTZXR0ZXIqIGdldHRlclNldHRlcikK
LSAgICB7Ci0gICAgICAgIEFTU0VSVChhdHRyaWJ1dGVzID09IGF0dHJpYnV0ZXNGb3JTdHJ1Y3R1
cmUoYXR0cmlidXRlcykpOwotICAgICAgICBBU1NFUlQoYXR0cmlidXRlcyAmIFByb3BlcnR5QXR0
cmlidXRlOjpDdXN0b21BY2Nlc3Nvcik7Ci0KLSAgICAgICAgZGlzYWJsZUNhY2hpbmcoKTsKLQot
ICAgICAgICBBU1NFUlQoZ2V0dGVyU2V0dGVyKTsKLSAgICAgICAgbV9kYXRhLmN1c3RvbUFjY2Vz
c29yLmdldHRlclNldHRlciA9IGdldHRlclNldHRlcjsKLSAgICAgICAgbV9hdHRyaWJ1dGVzID0g
YXR0cmlidXRlczsKLQotICAgICAgICBBU1NFUlQoc2xvdEJhc2UpOwotICAgICAgICBtX3Nsb3RC
YXNlID0gc2xvdEJhc2U7Ci0gICAgICAgIG1fcHJvcGVydHlUeXBlID0gVHlwZUN1c3RvbUFjY2Vz
c29yOwotCi0gICAgICAgIEFTU0VSVChtX2NhY2hlYWJpbGl0eSA9PSBDYWNoaW5nRGlzYWxsb3dl
ZCk7Ci0gICAgfQotCiAgICAgdm9pZCBzZXRHZXR0ZXJTbG90KEpTT2JqZWN0KiBzbG90QmFzZSwg
dW5zaWduZWQgYXR0cmlidXRlcywgR2V0dGVyU2V0dGVyKiBnZXR0ZXJTZXR0ZXIpCiAgICAgewog
ICAgICAgICBBU1NFUlQoYXR0cmlidXRlcyA9PSBhdHRyaWJ1dGVzRm9yU3RydWN0dXJlKGF0dHJp
YnV0ZXMpKTsKQEAgLTM3Niw3ICszNjcsNiBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIEpTX0VY
UE9SVF9QUklWQVRFIEpTVmFsdWUgZnVuY3Rpb25HZXR0ZXIoSlNHbG9iYWxPYmplY3QqKSBjb25z
dDsKICAgICBKU19FWFBPUlRfUFJJVkFURSBKU1ZhbHVlIGN1c3RvbUdldHRlcihKU0dsb2JhbE9i
amVjdCosIFByb3BlcnR5TmFtZSkgY29uc3Q7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgSlNWYWx1
ZSBjdXN0b21BY2Nlc3NvckdldHRlcihKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSkgY29u
c3Q7CiAKICAgICB1bmlvbiB7CiAgICAgICAgIEVuY29kZWRKU1ZhbHVlIHZhbHVlOwpAQCAtMzg1
LDEwICszNzUsOCBAQCBwcml2YXRlOgogICAgICAgICB9IGdldHRlcjsKICAgICAgICAgc3RydWN0
IHsKICAgICAgICAgICAgIEdldFZhbHVlRnVuYyBnZXRWYWx1ZTsKKyAgICAgICAgICAgIFB1dFZh
bHVlRnVuYyBwdXRWYWx1ZTsKICAgICAgICAgfSBjdXN0b207Ci0gICAgICAgIHN0cnVjdCB7Ci0g
ICAgICAgICAgICBDdXN0b21HZXR0ZXJTZXR0ZXIqIGdldHRlclNldHRlcjsKLSAgICAgICAgfSBj
dXN0b21BY2Nlc3NvcjsKICAgICB9IG1fZGF0YTsKIAogICAgIHVuc2lnbmVkIG1fYXR0cmlidXRl
cyB7IDAgfTsKQEAgLTQxNiw4ICs0MDQsNiBAQCBBTFdBWVNfSU5MSU5FIEpTVmFsdWUgUHJvcGVy
dHlTbG90OjpnZXRWCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpkZWNvZGUobV9kYXRhLnZhbHVl
KTsKICAgICBpZiAobV9wcm9wZXJ0eVR5cGUgPT0gVHlwZUdldHRlcikKICAgICAgICAgcmV0dXJu
IGZ1bmN0aW9uR2V0dGVyKGdsb2JhbE9iamVjdCk7Ci0gICAgaWYgKG1fcHJvcGVydHlUeXBlID09
IFR5cGVDdXN0b21BY2Nlc3NvcikKLSAgICAgICAgcmV0dXJuIGN1c3RvbUFjY2Vzc29yR2V0dGVy
KGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lKTsKICAgICByZXR1cm4gY3VzdG9tR2V0dGVyKGds
b2JhbE9iamVjdCwgcHJvcGVydHlOYW1lKTsKIH0KIApAQCAtNDI4LDggKzQxNCw2IEBAIEFMV0FZ
U19JTkxJTkUgSlNWYWx1ZSBQcm9wZXJ0eVNsb3Q6OmdldFYKICAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmRlY29kZShtX2RhdGEudmFsdWUpOwogICAgIGlmIChtX3Byb3BlcnR5VHlwZSA9PSBUeXBl
R2V0dGVyKQogICAgICAgICByZXR1cm4gZnVuY3Rpb25HZXR0ZXIoZ2xvYmFsT2JqZWN0KTsKLSAg
ICBpZiAobV9wcm9wZXJ0eVR5cGUgPT0gVHlwZUN1c3RvbUFjY2Vzc29yKQotICAgICAgICByZXR1
cm4gY3VzdG9tQWNjZXNzb3JHZXR0ZXIoZ2xvYmFsT2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tKHZt
LCBwcm9wZXJ0eU5hbWUpKTsKICAgICByZXR1cm4gY3VzdG9tR2V0dGVyKGdsb2JhbE9iamVjdCwg
SWRlbnRpZmllcjo6ZnJvbSh2bSwgcHJvcGVydHlOYW1lKSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3h5T2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJveHlPYmplY3QuaAkocmV2aXNpb24gMjcxOTc1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJveHlPYmplY3QuaAkod29ya2luZyBj
b3B5KQpAQCAtMzQsNyArMzQsNyBAQCBjbGFzcyBQcm94eU9iamVjdCBmaW5hbCA6IHB1YmxpYyBK
U05vbkZpCiBwdWJsaWM6CiAgICAgdHlwZWRlZiBKU05vbkZpbmFsT2JqZWN0IEJhc2U7CiAKLSAg
ICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0
dXJlRmxhZ3MgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNHZXRPd25Q
cm9wZXJ0eU5hbWVzIHwgT3ZlcnJpZGVzR2V0UHJvdG90eXBlIHwgT3ZlcnJpZGVzR2V0Q2FsbERh
dGEgfCBJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNO
b3RaZXJvIHwgUHJvaGliaXRzUHJvcGVydHlDYWNoaW5nOworICAgIHN0YXRpYyBjb25zdGV4cHIg
dW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IE92ZXJyaWRl
c0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5TmFtZXMgfCBPdmVy
cmlkZXNHZXRQcm90b3R5cGUgfCBPdmVycmlkZXNHZXRDYWxsRGF0YSB8IE92ZXJyaWRlc1B1dCB8
IEludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFpl
cm8gfCBQcm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmc7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBD
ZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4KICAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1
YnNwYWNlRm9yKFZNJiB2bSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1B1
dFByb3BlcnR5U2xvdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1B1dFByb3BlcnR5U2xvdC5oCShyZXZpc2lvbiAyNzE5NzUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9QdXRQcm9wZXJ0eVNsb3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzcs
OSArMzcsOSBAQCBjbGFzcyBKU0Z1bmN0aW9uOwogY2xhc3MgUHV0UHJvcGVydHlTbG90IHsKIHB1
YmxpYzoKICAgICBlbnVtIFR5cGUgOiB1aW50OF90IHsgVW5jYWNoYWJsZSwgRXhpc3RpbmdQcm9w
ZXJ0eSwgTmV3UHJvcGVydHksIFNldHRlclByb3BlcnR5LCBDdXN0b21WYWx1ZSwgQ3VzdG9tQWNj
ZXNzb3IgfTsKLSAgICBlbnVtIENvbnRleHQgeyBVbmtub3duQ29udGV4dCwgUHV0QnlJZCwgUHV0
QnlJZEV2YWwgfTsKLSAgICB1c2luZyBQdXRWYWx1ZUZ1bmMgPSBib29sICgqKShKU0dsb2JhbE9i
amVjdCosIEVuY29kZWRKU1ZhbHVlIHRoaXNPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHZhbHVlKTsK
LSAgICB1c2luZyBQdXRWYWx1ZUZ1bmNXaXRoUHRyID0gYm9vbCAoKikoSlNHbG9iYWxPYmplY3Qq
LCBFbmNvZGVkSlNWYWx1ZSB0aGlzT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB2YWx1ZSwgdm9pZCop
OworICAgIGVudW0gQ29udGV4dCA6IHVpbnQ4X3QgeyBVbmtub3duQ29udGV4dCwgUHV0QnlJZCwg
UHV0QnlJZEV2YWwsIFJlZmxlY3RTZXQgfTsKKyAgICB1c2luZyBQdXRWYWx1ZUZ1bmMgPSBKU0M6
OlB1dFZhbHVlRnVuYzsKKyAgICB1c2luZyBQdXRWYWx1ZUZ1bmNXaXRoUHRyID0gSlNDOjpQdXRW
YWx1ZUZ1bmNXaXRoUHRyOwogCiAgICAgUHV0UHJvcGVydHlTbG90KEpTVmFsdWUgdGhpc1ZhbHVl
LCBib29sIGlzU3RyaWN0TW9kZSA9IGZhbHNlLCBDb250ZXh0IGNvbnRleHQgPSBVbmtub3duQ29u
dGV4dCwgYm9vbCBpc0luaXRpYWxpemF0aW9uID0gZmFsc2UpCiAgICAgICAgIDogbV9iYXNlKG51
bGxwdHIpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWZsZWN0T2JqZWN0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWZsZWN0
T2JqZWN0LmNwcAkocmV2aXNpb24gMjcxOTc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvUmVmbGVjdE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2MCw3ICsyNjAsNyBA
QCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04ocmVmbGVjdE9iamVjdFNlCiAKICAgICAvLyBEbyBu
b3QgcmFpc2UgYW55IHJlYWRvbmx5IGVycm9ycyB0aGF0IGhhcHBlbiBpbiBzdHJpY3QgbW9kZS4K
ICAgICBib29sIHNob3VsZFRocm93SWZDYW50U2V0ID0gZmFsc2U7Ci0gICAgUHV0UHJvcGVydHlT
bG90IHNsb3QocmVjZWl2ZXIsIHNob3VsZFRocm93SWZDYW50U2V0KTsKKyAgICBQdXRQcm9wZXJ0
eVNsb3Qgc2xvdChyZWNlaXZlciwgc2hvdWxkVGhyb3dJZkNhbnRTZXQsIFB1dFByb3BlcnR5U2xv
dDo6UmVmbGVjdFNldCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU1ZhbHVlOjpl
bmNvZGUoanNCb29sZWFuKHRhcmdldE9iamVjdC0+bWV0aG9kVGFibGUodm0pLT5wdXQodGFyZ2V0
T2JqZWN0LCBnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgY2FsbEZyYW1lLT5hcmd1bWVudCgy
KSwgc2xvdCkpKSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Jl
Z0V4cE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvUmVnRXhwT2JqZWN0LmNwcAkocmV2aXNpb24gMjcxOTc1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI4LDEz
ICsxMjgsMTAgQEAgSlNDX0RFRklORV9DVVNUT01fU0VUVEVSKHJlZ0V4cE9iamVjdFNldAogICAg
IHJldHVybiBqc0Nhc3Q8UmVnRXhwT2JqZWN0Kj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkp
LT5zZXRMYXN0SW5kZXgoZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlOjpkZWNvZGUodmFsdWUpLCBmYWxz
ZSk7CiB9CiAKLWJvb2wgUmVnRXhwT2JqZWN0OjpwdXQoSlNDZWxsKiBjZWxsLCBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZh
bHVlLCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCitib29sIFJlZ0V4cE9iamVjdDo6ZGVmaW5lT3du
UHJvcGVydHlWaWFQdXQoSlNPYmplY3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgUHV0UHJvcGVy
dHlTbG90JiBzbG90KQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKLSAgICBS
ZWdFeHBPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8UmVnRXhwT2JqZWN0Kj4oY2VsbCk7Ci0K
LSAgICBpZiAoVU5MSUtFTFkoaXNUaGlzVmFsdWVBbHRlcmVkKHNsb3QsIHRoaXNPYmplY3QpKSkK
LSAgICAgICAgcmV0dXJuIG9yZGluYXJ5U2V0U2xvdyhnbG9iYWxPYmplY3QsIHRoaXNPYmplY3Qs
IHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QudGhpc1ZhbHVlKCksIHNsb3QuaXNTdHJpY3RNb2Rl
KCkpOworICAgIFJlZ0V4cE9iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxSZWdFeHBPYmplY3Qq
PihvYmplY3QpOwogCiAgICAgaWYgKHByb3BlcnR5TmFtZSA9PSB2bS5wcm9wZXJ0eU5hbWVzLT5s
YXN0SW5kZXgpIHsKICAgICAgICAgYm9vbCByZXN1bHQgPSB0aGlzT2JqZWN0LT5zZXRMYXN0SW5k
ZXgoZ2xvYmFsT2JqZWN0LCB2YWx1ZSwgc2xvdC5pc1N0cmljdE1vZGUoKSk7CkBAIC0xNDMsNyAr
MTQwLDcgQEAgYm9vbCBSZWdFeHBPYmplY3Q6OnB1dChKU0NlbGwqIGNlbGwsIEpTRwogICAgICAg
ICAgICAgOiByZWdFeHBPYmplY3RTZXRMYXN0SW5kZXhOb25TdHJpY3QpOwogICAgICAgICByZXR1
cm4gcmVzdWx0OwogICAgIH0KLSAgICByZXR1cm4gQmFzZTo6cHV0KGNlbGwsIGdsb2JhbE9iamVj
dCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCk7CisgICAgcmV0dXJuIEJhc2U6OmRlZmluZU93
blByb3BlcnR5VmlhUHV0KHRoaXNPYmplY3QsIGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCB2
YWx1ZSwgc2xvdCk7CiB9CiAKIFN0cmluZyBSZWdFeHBPYmplY3Q6OnRvU3RyaW5nTmFtZShjb25z
dCBKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5oCShyZXZpc2lvbiAyNzE5NzUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAt
MTAzLDcgKzEwMyw2IEBAIHB1YmxpYzoKICAgICBKU1ZhbHVlIG1hdGNoR2xvYmFsKEpTR2xvYmFs
T2JqZWN0KiwgSlNTdHJpbmcqKTsKIAogICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xv
dChKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3Qm
KTsKLSAgICBzdGF0aWMgYm9vbCBwdXQoSlNDZWxsKiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0
eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOwogICAgIHN0YXRpYyBTdHJpbmcgdG9T
dHJpbmdOYW1lKGNvbnN0IEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqKTsKIAogICAgIERFQ0xB
UkVfRVhQT1JUX0lORk87CkBAIC0xNDcsNiArMTQ2LDcgQEAgcHJpdmF0ZToKIAogICAgIEpTX0VY
UE9SVF9QUklWQVRFIHN0YXRpYyBib29sIGRlbGV0ZVByb3BlcnR5KEpTQ2VsbCosIEpTR2xvYmFs
T2JqZWN0KiwgUHJvcGVydHlOYW1lLCBEZWxldGVQcm9wZXJ0eVNsb3QmKTsKICAgICBKU19FWFBP
UlRfUFJJVkFURSBzdGF0aWMgdm9pZCBnZXRPd25TcGVjaWFsUHJvcGVydHlOYW1lcyhKU09iamVj
dCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lQXJyYXkmLCBEb250RW51bVByb3BlcnRp
ZXNNb2RlKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9vbCBkZWZpbmVPd25Qcm9w
ZXJ0eVZpYVB1dChKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBKU1Zh
bHVlLCBQdXRQcm9wZXJ0eVNsb3QmKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9v
bCBkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlO
YW1lLCBjb25zdCBQcm9wZXJ0eURlc2NyaXB0b3ImLCBib29sIHNob3VsZFRocm93KTsKIAogICAg
IE1hdGNoUmVzdWx0IG1hdGNoSW5saW5lKEpTR2xvYmFsT2JqZWN0KiwgSlNTdHJpbmcqKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ09iamVjdC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nT2JqZWN0LmNwcAko
cmV2aXNpb24gMjcxOTc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5n
T2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjEsMjEgKzYxLDE1IEBAIGJvb2wgU3RyaW5n
T2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUkKICAgICByZXR1cm4gSlNPYmplY3Q6OmdldE93
blByb3BlcnR5U2xvdCh0aGlzT2JqZWN0LCBnbG9iYWxPYmplY3QsIElkZW50aWZpZXI6OmZyb20o
dm0sIHByb3BlcnR5TmFtZSksIHNsb3QpOwogfQogCi1ib29sIFN0cmluZ09iamVjdDo6cHV0KEpT
Q2VsbCogY2VsbCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIHBy
b3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBzbG90KQorYm9vbCBT
dHJpbmdPYmplY3Q6OmRlZmluZU93blByb3BlcnR5VmlhUHV0KEpTT2JqZWN0KiBvYmplY3QsIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpT
VmFsdWUgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKKyAgICBBU1NFUlQoIXBhcnNl
SW5kZXgocHJvcGVydHlOYW1lKSk7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwog
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAotICAgIFN0cmluZ09i
amVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxTdHJpbmdPYmplY3QqPihjZWxsKTsKLQotICAgIGlm
IChVTkxJS0VMWShpc1RoaXNWYWx1ZUFsdGVyZWQoc2xvdCwgdGhpc09iamVjdCkpKSAKLSAgICAg
ICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBvcmRpbmFyeVNldFNsb3coZ2xvYmFsT2JqZWN0
LCB0aGlzT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90LnRoaXNWYWx1ZSgpLCBzbG90
LmlzU3RyaWN0TW9kZSgpKSk7Ci0KICAgICBpZiAocHJvcGVydHlOYW1lID09IHZtLnByb3BlcnR5
TmFtZXMtPmxlbmd0aCkKICAgICAgICAgcmV0dXJuIHR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNj
b3BlLCBzbG90LmlzU3RyaWN0TW9kZSgpLCBSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcik7Ci0g
ICAgaWYgKE9wdGlvbmFsPHVpbnQzMl90PiBpbmRleCA9IHBhcnNlSW5kZXgocHJvcGVydHlOYW1l
KSkgCi0gICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgcHV0QnlJbmRleChjZWxsLCBn
bG9iYWxPYmplY3QsIGluZGV4LnZhbHVlKCksIHZhbHVlLCBzbG90LmlzU3RyaWN0TW9kZSgpKSk7
Ci0gICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU09iamVjdDo6cHV0KGNlbGwsIGdsb2Jh
bE9iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCkpOworICAgIFJFTEVBU0VfQU5EX1JF
VFVSTihzY29wZSwgSlNPYmplY3Q6OmRlZmluZU93blByb3BlcnR5VmlhUHV0KG9iamVjdCwgZ2xv
YmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KSk7CiB9CiAKIGJvb2wgU3RyaW5n
T2JqZWN0OjpwdXRCeUluZGV4KEpTQ2VsbCogY2VsbCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZFRo
cm93KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nT2JqZWN0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nT2JqZWN0
LmgJKHJldmlzaW9uIDI3MTk3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0
cmluZ09iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC01MywxMyArNTMsMTEgQEAgcHVibGljOgog
CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpT
T2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwog
ICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdEJ5SW5k
ZXgoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgUHJv
cGVydHlTbG90Jik7Ci0KLSAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9vbCBwdXQoSlND
ZWxsKiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5
U2xvdCYpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBib29sIHB1dEJ5SW5kZXgoSlND
ZWxsKiwgSlNHbG9iYWxPYmplY3QqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIGJv
b2wgc2hvdWxkVGhyb3cpOwotCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGJvb2wgZGVs
ZXRlUHJvcGVydHkoSlNDZWxsKiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIERlbGV0
ZVByb3BlcnR5U2xvdCYpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBib29sIGRlbGV0
ZVByb3BlcnR5QnlJbmRleChKU0NlbGwqLCBKU0dsb2JhbE9iamVjdCosIHVuc2lnbmVkIHByb3Bl
cnR5TmFtZSk7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVy
dHlOYW1lcyhKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lQXJyYXkmLCBE
b250RW51bVByb3BlcnRpZXNNb2RlKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9v
bCBkZWZpbmVPd25Qcm9wZXJ0eVZpYVB1dChKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJv
cGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmKTsKICAgICBKU19FWFBPUlRfUFJJ
VkFURSBzdGF0aWMgYm9vbCBkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCosIEpTR2xvYmFsT2Jq
ZWN0KiwgUHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eURlc2NyaXB0b3ImLCBib29sIHNob3Vs
ZFRocm93KTsKICAgICBzdGF0aWMgU3RyaW5nIHRvU3RyaW5nTmFtZShjb25zdCBKU09iamVjdCos
IEpTR2xvYmFsT2JqZWN0Kik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1N0cmluZ1Byb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU3RyaW5nUHJvdG90eXBlLmNwcAkocmV2aXNpb24gMjcxOTc1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nUHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTIxLDkgKzEyMSw5IEBAIFN0cmluZ1Byb3RvdHlwZTo6U3RyaW5nUHJvdG90eXBlKFZN
JiB2bSwKIHsKIH0KIAotdm9pZCBTdHJpbmdQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2
bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNTdHJpbmcqIG5hbWVBbmRNZXNzYWdl
KQordm9pZCBTdHJpbmdQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCkKIHsKLSAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSwgbmFt
ZUFuZE1lc3NhZ2UpOworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtLCBqc0VtcHR5U3RyaW5n
KHZtKSk7CiAgICAgQVNTRVJUKGluaGVyaXRzKHZtLCBpbmZvKCkpKTsKIAogICAgIEpTQ19OQVRJ
VkVfSU5UUklOU0lDX0ZVTkNUSU9OX1dJVEhPVVRfVFJBTlNJVElPTih2bS5wcm9wZXJ0eU5hbWVz
LT50b1N0cmluZywgc3RyaW5nUHJvdG9GdW5jVG9TdHJpbmcsIHN0YXRpY19jYXN0PHVuc2lnbmVk
PihQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pLCAwLCBTdHJpbmdQcm90b3R5cGVWYWx1ZU9m
SW50cmluc2ljKTsKQEAgLTE2NSwxNCArMTY1LDEyIEBAIHZvaWQgU3RyaW5nUHJvdG90eXBlOjpm
aW5pc2hDcmVhdGlvbihWTSYKICAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0u
cHJvcGVydHlOYW1lcy0+aXRlcmF0b3JTeW1ib2wsIGl0ZXJhdG9yRnVuY3Rpb24sIHN0YXRpY19j
YXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pKTsKIAogICAgIC8vIFRo
ZSBjb25zdHJ1Y3RvciB3aWxsIGJlIGFkZGVkIGxhdGVyLCBhZnRlciBTdHJpbmdDb25zdHJ1Y3Rv
ciBoYXMgYmVlbiBidWlsdAotICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5w
cm9wZXJ0eU5hbWVzLT5sZW5ndGgsIGpzTnVtYmVyKDApLCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9u
dERlbGV0ZSB8IFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IFByb3BlcnR5QXR0cmlidXRl
OjpEb250RW51bSk7CiB9CiAKIFN0cmluZ1Byb3RvdHlwZSogU3RyaW5nUHJvdG90eXBlOjpjcmVh
dGUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSkKIHsKLSAgICBKU1N0cmluZyogZW1wdHkgPSBqc0VtcHR5U3RyaW5nKHZtKTsKICAgICBT
dHJpbmdQcm90b3R5cGUqIHByb3RvdHlwZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFN0
cmluZ1Byb3RvdHlwZT4odm0uaGVhcCkpIFN0cmluZ1Byb3RvdHlwZSh2bSwgc3RydWN0dXJlKTsK
LSAgICBwcm90b3R5cGUtPmZpbmlzaENyZWF0aW9uKHZtLCBnbG9iYWxPYmplY3QsIGVtcHR5KTsK
KyAgICBwcm90b3R5cGUtPmZpbmlzaENyZWF0aW9uKHZtLCBnbG9iYWxPYmplY3QpOwogICAgIHJl
dHVybiBwcm90b3R5cGU7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1N0cmluZ1Byb3RvdHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1N0cmluZ1Byb3RvdHlwZS5oCShyZXZpc2lvbiAyNzE5NzUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdQcm90b3R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAt
NDUsNyArNDUsNyBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAgICAgU3RyaW5nUHJvdG90eXBlKFZN
JiwgU3RydWN0dXJlKik7Ci0gICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIEpTR2xvYmFsT2Jq
ZWN0KiwgSlNTdHJpbmcqKTsKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgSlNHbG9iYWxP
YmplY3QqKTsKIH07CiBTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShTdHJpbmdQ
cm90b3R5cGUsIFN0cmluZ09iamVjdCk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1N0cnVjdHVyZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU3RydWN0dXJlLmNwcAkocmV2aXNpb24gMjcxOTc1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg5LDEx
ICsxODksNiBAQCB2b2lkIFN0cnVjdHVyZTo6dmFsaWRhdGVGbGFncygpCiAgICAgaWYgKG92ZXJy
aWRlc0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXgpCiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHR5
cGVJbmZvKCkuaW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0
aElzTm90WmVybygpKTsKIAotICAgIGJvb2wgb3ZlcnJpZGVzUHV0UHJvcGVydHlTZWN1cml0eUNo
ZWNrID0KLSAgICAgICAgbWV0aG9kVGFibGUuZG9QdXRQcm9wZXJ0eVNlY3VyaXR5Q2hlY2sgIT0g
SlNPYmplY3Q6OmRvUHV0UHJvcGVydHlTZWN1cml0eUNoZWNrCi0gICAgICAgICYmIG1ldGhvZFRh
YmxlLmRvUHV0UHJvcGVydHlTZWN1cml0eUNoZWNrICE9IEpTQ2VsbDo6ZG9QdXRQcm9wZXJ0eVNl
Y3VyaXR5Q2hlY2s7Ci0gICAgUkVMRUFTRV9BU1NFUlQob3ZlcnJpZGVzUHV0UHJvcGVydHlTZWN1
cml0eUNoZWNrID09IHR5cGVJbmZvKCkuaGFzUHV0UHJvcGVydHlTZWN1cml0eUNoZWNrKCkpOwot
CiAgICAgYm9vbCBvdmVycmlkZXNHZXRPd25Qcm9wZXJ0eU5hbWVzID0KICAgICAgICAgbWV0aG9k
VGFibGUuZ2V0T3duUHJvcGVydHlOYW1lcyAhPSBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1l
cwogICAgICAgICAmJiBtZXRob2RUYWJsZS5nZXRPd25Qcm9wZXJ0eU5hbWVzICE9IEpTQ2VsbDo6
Z2V0T3duUHJvcGVydHlOYW1lczsKQEAgLTIwOCw2ICsyMDMsMTEgQEAgdm9pZCBTdHJ1Y3R1cmU6
OnZhbGlkYXRlRmxhZ3MoKQogICAgICAgICBtZXRob2RUYWJsZS5nZXRQcm90b3R5cGUgIT0gc3Rh
dGljX2Nhc3Q8TWV0aG9kVGFibGU6OkdldFByb3RvdHlwZUZ1bmN0aW9uUHRyPihKU09iamVjdDo6
Z2V0UHJvdG90eXBlKQogICAgICAgICAmJiBtZXRob2RUYWJsZS5nZXRQcm90b3R5cGUgIT0gSlND
ZWxsOjpnZXRQcm90b3R5cGU7CiAgICAgUkVMRUFTRV9BU1NFUlQob3ZlcnJpZGVzR2V0UHJvdG90
eXBlID09IHR5cGVJbmZvKCkub3ZlcnJpZGVzR2V0UHJvdG90eXBlKCkpOworCisgICAgYm9vbCBv
dmVycmlkZXNQdXQgPQorICAgICAgICBtZXRob2RUYWJsZS5wdXQgIT0gSlNPYmplY3Q6OnB1dAor
ICAgICAgICAmJiBtZXRob2RUYWJsZS5wdXQgIT0gSlNDZWxsOjpwdXQ7CisgICAgUkVMRUFTRV9B
U1NFUlQob3ZlcnJpZGVzUHV0ID09IHR5cGVJbmZvKCkub3ZlcnJpZGVzUHV0KCkpOwogfQogI2Vs
c2UKIGlubGluZSB2b2lkIFN0cnVjdHVyZTo6dmFsaWRhdGVGbGFncygpIHsgfQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAkocmV2aXNpb24gMjcxOTc1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zODYsNyAr
Mzg2LDYgQEAgVk06OlZNKFZNVHlwZSB2bVR5cGUsIEhlYXBUeXBlIGhlYXBUeXBlLAogICAgICwg
cHJvcGVydHlOYW1lcyhudWxscHRyKQogICAgICwgZW1wdHlMaXN0KG5ldyBBcmdMaXN0KQogICAg
ICwgbWFjaGluZUNvZGVCeXRlc1BlckJ5dGVjb2RlV29yZEZvckJhc2VsaW5lSklUKG1ha2VVbmlx
dWU8U2ltcGxlU3RhdHM+KCkpCi0gICAgLCBjdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbk1hcCgq
dGhpcykKICAgICAsIHN0cmluZ0NhY2hlKCp0aGlzKQogICAgICwgc3ltYm9sSW1wbFRvU3ltYm9s
TWFwKCp0aGlzKQogICAgICwgc3RydWN0dXJlQ2FjaGUoKnRoaXMpCkBAIC0xNDc4LDcgKzE0Nzcs
OCBAQCBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1coCiBEWU5BTUlDX0lT
T19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1coY2FsbGJhY2tHbG9iYWxPYmplY3RTcGFjZSwg
Y2FsbGJhY2tHbG9iYWxPYmplY3RIZWFwQ2VsbFR5cGUuZ2V0KCksIEpTQ2FsbGJhY2tPYmplY3Q8
SlNHbG9iYWxPYmplY3Q+KQogRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9X
KGNhbGxiYWNrRnVuY3Rpb25TcGFjZSwgY2VsbEhlYXBDZWxsVHlwZS5nZXQoKSwgSlNDYWxsYmFj
a0Z1bmN0aW9uKSAvLyBIYXNoOjB4ZTc2NDhlYmMKIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklO
RV9NRU1CRVJfU0xPVyhjYWxsYmFja09iamVjdFNwYWNlLCBjYWxsYmFja09iamVjdEhlYXBDZWxs
VHlwZS5nZXQoKSwgSlNDYWxsYmFja09iamVjdDxKU05vbkZpbmFsT2JqZWN0PikKLURZTkFNSUNf
SVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyhjdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlv
blNwYWNlLCBjZWxsSGVhcENlbGxUeXBlLmdldCgpLCBKU0N1c3RvbUdldHRlclNldHRlckZ1bmN0
aW9uKSAvLyBIYXNoOjB4MTgwOTEwMDAKK0RZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1C
RVJfU0xPVyhjdXN0b21HZXR0ZXJGdW5jdGlvblNwYWNlLCBjZWxsSGVhcENlbGxUeXBlLmdldCgp
LCBKU0N1c3RvbUdldHRlckZ1bmN0aW9uKSAvLyBIYXNoOjB4MTgwOTEwMDAKK0RZTkFNSUNfSVNP
X1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyhjdXN0b21TZXR0ZXJGdW5jdGlvblNwYWNlLCBj
ZWxsSGVhcENlbGxUeXBlLmdldCgpLCBKU0N1c3RvbVNldHRlckZ1bmN0aW9uKQogRFlOQU1JQ19J
U09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKGRhdGFWaWV3U3BhY2UsIGNlbGxIZWFwQ2Vs
bFR5cGUuZ2V0KCksIEpTRGF0YVZpZXcpCiBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVN
QkVSX1NMT1coZGVidWdnZXJTY29wZVNwYWNlLCBjZWxsSGVhcENlbGxUeXBlLmdldCgpLCBEZWJ1
Z2dlclNjb3BlKQogRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKGVycm9y
SW5zdGFuY2VTcGFjZSwgZXJyb3JJbnN0YW5jZUhlYXBDZWxsVHlwZS5nZXQoKSwgRXJyb3JJbnN0
YW5jZSkgLy8gSGFzaDoweDNmNDBkNGEKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1ZNLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0u
aAkocmV2aXNpb24gMjcxOTc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0u
aAkod29ya2luZyBjb3B5KQpAQCAtMTQxLDcgKzE0MSw2IEBAIGNsYXNzIEpTQVBJV3JhcHBlckds
b2JhbE9iamVjdDsKIGNsYXNzIEpTQVBJV3JhcHBlck9iamVjdDsKIGNsYXNzIEpTQ0NhbGxiYWNr
RnVuY3Rpb247CiBjbGFzcyBKU0NhbGxiYWNrQ29uc3RydWN0b3I7Ci1jbGFzcyBKU0N1c3RvbUdl
dHRlclNldHRlckZ1bmN0aW9uOwogY2xhc3MgSlNEZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5
cGU7CiBjbGFzcyBKU0dsb2JhbE9iamVjdDsKIGNsYXNzIEpTR2xvYmFsTGV4aWNhbEVudmlyb25t
ZW50OwpAQCAtNTAwLDcgKzQ5OSw4IEBAIHB1YmxpYzoKICAgICBEWU5BTUlDX0lTT19TVUJTUEFD
RV9ERUZJTkVfTUVNQkVSKGNhbGxiYWNrR2xvYmFsT2JqZWN0U3BhY2UpCiAgICAgRFlOQU1JQ19J
U09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihjYWxsYmFja0Z1bmN0aW9uU3BhY2UpCiAgICAgRFlO
QU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihjYWxsYmFja09iamVjdFNwYWNlKQotICAg
IERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIoY3VzdG9tR2V0dGVyU2V0dGVyRnVu
Y3Rpb25TcGFjZSkKKyAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKGN1c3Rv
bUdldHRlckZ1bmN0aW9uU3BhY2UpCisgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01F
TUJFUihjdXN0b21TZXR0ZXJGdW5jdGlvblNwYWNlKQogICAgIERZTkFNSUNfSVNPX1NVQlNQQUNF
X0RFRklORV9NRU1CRVIoZGF0YVZpZXdTcGFjZSkKICAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9E
RUZJTkVfTUVNQkVSKGRlYnVnZ2VyU2NvcGVTcGFjZSkKICAgICBEWU5BTUlDX0lTT19TVUJTUEFD
RV9ERUZJTkVfTUVNQkVSKGVycm9ySW5zdGFuY2VTcGFjZSkKQEAgLTcyMCw3ICs3MjAsNiBAQCBw
dWJsaWM6CiAgICAgU21hbGxTdHJpbmdzIHNtYWxsU3RyaW5nczsKICAgICBOdW1lcmljU3RyaW5n
cyBudW1lcmljU3RyaW5nczsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8U2ltcGxlU3RhdHM+IG1hY2hp
bmVDb2RlQnl0ZXNQZXJCeXRlY29kZVdvcmRGb3JCYXNlbGluZUpJVDsKLSAgICBXZWFrR0NNYXA8
c3RkOjpwYWlyPEN1c3RvbUdldHRlclNldHRlciosIGludD4sIEpTQ3VzdG9tR2V0dGVyU2V0dGVy
RnVuY3Rpb24+IGN1c3RvbUdldHRlclNldHRlckZ1bmN0aW9uTWFwOwogICAgIFdlYWtHQ01hcDxT
dHJpbmdJbXBsKiwgSlNTdHJpbmcsIFB0ckhhc2g8U3RyaW5nSW1wbCo+PiBzdHJpbmdDYWNoZTsK
ICAgICBTdHJvbmc8SlNTdHJpbmc+IGxhc3RDYWNoZWRTdHJpbmc7CiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS90b29scy9KU0RvbGxhclZNLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvdG9vbHMvSlNEb2xsYXJWTS5jcHAJKHJldmlzaW9uIDI3MTk3NSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9KU0RvbGxhclZNLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNTQzLDcgKzU0Myw3IEBAIHN0YXRpYyBKU0NfREVDTEFSRV9DVVNUT01fR0VUVEVSKHJ1
bnRpbWUKIGNsYXNzIFJ1bnRpbWVBcnJheSA6IHB1YmxpYyBKU0FycmF5IHsKIHB1YmxpYzoKICAg
ICB0eXBlZGVmIEpTQXJyYXkgQmFzZTsKLSAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0
cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBPdmVycmlkZXNHZXRPd25Qcm9w
ZXJ0eVNsb3QgfCBJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVu
Z3RoSXNOb3RaZXJvOworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxh
Z3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8
IE92ZXJyaWRlc1B1dCB8IEludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldo
ZW5MZW5ndGhJc05vdFplcm87CiAKIElHTk9SRV9XQVJOSU5HU19CRUdJTigidW51c2VkLWNvbnN0
LXZhcmlhYmxlIikKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9
IGZhbHNlOwpAQCAtNjY1LDkgKzY2NSwxMSBAQCBKU0NfREVGSU5FX0NVU1RPTV9HRVRURVIocnVu
dGltZUFycmF5TGVuCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcih0aGlzT2Jq
ZWN0LT5nZXRMZW5ndGgoKSkpOwogfQogCi1zdGF0aWMgY29uc3Qgc3RydWN0IENvbXBhY3RIYXNo
SW5kZXggc3RhdGljQ3VzdG9tQWNjZXNzb3JUYWJsZUluZGV4WzJdID0geworc3RhdGljIGNvbnN0
IHN0cnVjdCBDb21wYWN0SGFzaEluZGV4IHN0YXRpY0N1c3RvbUFjY2Vzc29yVGFibGVJbmRleFs0
XSA9IHsKICAgICB7IDAsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKKyAgICB7IDEsIC0xIH0sCisg
ICAgeyAtMSwgLTEgfSwKIH07CiAKIHN0YXRpYyBKU0NfREVDTEFSRV9DVVNUT01fR0VUVEVSKHRl
c3RTdGF0aWNBY2Nlc3NvckdldHRlcik7CkBAIC02OTAsMTkgKzY5MiwyMyBAQCBKU0NfREVGSU5F
X0NVU1RPTV9TRVRURVIodGVzdFN0YXRpY0FjY2VzCiB7CiAgICAgRG9sbGFyVk1Bc3NlcnRTY29w
ZSBhc3NlcnRTY29wZTsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0
byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgCi0gICAgSlNPYmpl
Y3QqIHRoaXNPYmplY3QgPSBqc0R5bmFtaWNDYXN0PEpTT2JqZWN0Kj4odm0sIEpTVmFsdWU6OmRl
Y29kZSh0aGlzVmFsdWUpKTsKKyAgICBKU1ZhbHVlIHJlY2VpdmVyID0gSlNWYWx1ZTo6ZGVjb2Rl
KHRoaXNWYWx1ZSk7CisgICAgSlNPYmplY3QqIHRoaXNPYmplY3QgPSByZWNlaXZlci5pc09iamVj
dCgpID8gYXNPYmplY3QocmVjZWl2ZXIpIDogcmVjZWl2ZXIuc3ludGhlc2l6ZVByb3RvdHlwZShn
bG9iYWxPYmplY3QpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2Up
OwogICAgIFJFTEVBU0VfQVNTRVJUKHRoaXNPYmplY3QpOwogCiAgICAgcmV0dXJuIHRoaXNPYmpl
Y3QtPnB1dERpcmVjdCh2bSwgUHJvcGVydHlOYW1lKElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0s
ICJ0ZXN0RmllbGQiKSksIEpTVmFsdWU6OmRlY29kZSh2YWx1ZSkpOwogfQogCi1zdGF0aWMgY29u
c3Qgc3RydWN0IEhhc2hUYWJsZVZhbHVlIHN0YXRpY0N1c3RvbUFjY2Vzc29yVGFibGVWYWx1ZXNb
MV0gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IEhhc2hUYWJsZVZhbHVlIHN0YXRpY0N1c3RvbUFj
Y2Vzc29yVGFibGVWYWx1ZXNbMl0gPSB7CiAgICAgeyAidGVzdFN0YXRpY0FjY2Vzc29yIiwgc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpDdXN0b21BY2Nlc3NvciksIE5v
SW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVl
RnVuYz4odGVzdFN0YXRpY0FjY2Vzc29yR2V0dGVyKSwgKGludHB0cl90KXN0YXRpY19jYXN0PFB1
dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jPih0ZXN0U3RhdGljQWNjZXNzb3JQdXR0ZXIpIH0g
fSwKKyAgICB7ICJ0ZXN0U3RhdGljQWNjZXNzb3JSZWFkT25seSIsIFByb3BlcnR5QXR0cmlidXRl
OjpDdXN0b21BY2Nlc3NvciB8IFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSwgTm9JbnRyaW5z
aWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPih0
ZXN0U3RhdGljQWNjZXNzb3JHZXR0ZXIpLCAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHV0UHJvcGVy
dHlTbG90OjpQdXRWYWx1ZUZ1bmM+KDApIH0gfSwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qg
SGFzaFRhYmxlIHN0YXRpY0N1c3RvbUFjY2Vzc29yVGFibGUgPQotICAgIHsgMSwgMSwgdHJ1ZSwg
bnVsbHB0ciwgc3RhdGljQ3VzdG9tQWNjZXNzb3JUYWJsZVZhbHVlcywgc3RhdGljQ3VzdG9tQWNj
ZXNzb3JUYWJsZUluZGV4IH07CisgICAgeyAyLCAzLCB0cnVlLCBudWxscHRyLCBzdGF0aWNDdXN0
b21BY2Nlc3NvclRhYmxlVmFsdWVzLCBzdGF0aWNDdXN0b21BY2Nlc3NvclRhYmxlSW5kZXggfTsK
IAogY2xhc3MgU3RhdGljQ3VzdG9tQWNjZXNzb3IgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7
CiAgICAgdXNpbmcgQmFzZSA9IEpTTm9uRmluYWxPYmplY3Q7CkBAIC03NjcsMTcgKzc3MywyNSBA
QCBKU0NfREVGSU5FX0NVU1RPTV9TRVRURVIodGVzdFN0YXRpY1ZhbHVlCiAgICAgcmV0dXJuIHRo
aXNPYmplY3QtPnB1dERpcmVjdCh2bSwgUHJvcGVydHlOYW1lKElkZW50aWZpZXI6OmZyb21TdHJp
bmcodm0sICJ0ZXN0U3RhdGljVmFsdWUiKSksIEpTVmFsdWU6OmRlY29kZSh2YWx1ZSkpOwogfQog
Ci1zdGF0aWMgY29uc3Qgc3RydWN0IENvbXBhY3RIYXNoSW5kZXggc3RhdGljQ3VzdG9tVmFsdWVU
YWJsZUluZGV4WzJdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBDb21wYWN0SGFzaEluZGV4IHN0
YXRpY0N1c3RvbVZhbHVlVGFibGVJbmRleFs4XSA9IHsKKyAgICB7IDEsIC0xIH0sCisgICAgeyAt
MSwgLTEgfSwKKyAgICB7IC0xLCAtMSB9LAorICAgIHsgLTEsIC0xIH0sCisgICAgeyAtMSwgLTEg
fSwKKyAgICB7IDIsIC0xIH0sCiAgICAgeyAwLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiB9Owog
Ci1zdGF0aWMgY29uc3Qgc3RydWN0IEhhc2hUYWJsZVZhbHVlIHN0YXRpY0N1c3RvbVZhbHVlVGFi
bGVWYWx1ZXNbMV0gPSB7Ci0gICAgeyAidGVzdFN0YXRpY1ZhbHVlIiwgc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpDdXN0b21BY2Nlc3NvciksIE5vSW50cmluc2ljLCB7
IChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4odGVzdFN0
YXRpY1ZhbHVlR2V0dGVyKSwgKGludHB0cl90KXN0YXRpY19jYXN0PFB1dFByb3BlcnR5U2xvdDo6
UHV0VmFsdWVGdW5jPih0ZXN0U3RhdGljVmFsdWVQdXR0ZXIpIH0gfSwKK3N0YXRpYyBjb25zdCBz
dHJ1Y3QgSGFzaFRhYmxlVmFsdWUgc3RhdGljQ3VzdG9tVmFsdWVUYWJsZVZhbHVlc1szXSA9IHsK
KyAgICB7ICJ0ZXN0U3RhdGljVmFsdWUiLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlB
dHRyaWJ1dGU6Ok5vbmUpLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJv
cGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KHRlc3RTdGF0aWNWYWx1ZUdldHRlciksIChpbnRwdHJf
dClzdGF0aWNfY2FzdDxQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYz4odGVzdFN0YXRpY1Zh
bHVlUHV0dGVyKSB9IH0sCisgICAgeyAidGVzdFN0YXRpY1ZhbHVlTm9TZXR0ZXIiLCBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6Ok5vbmUpLCBOb0ludHJpbnNpYywgeyAo
aW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KHRlc3RTdGF0
aWNWYWx1ZUdldHRlciksIChpbnRwdHJfdClzdGF0aWNfY2FzdDxQdXRQcm9wZXJ0eVNsb3Q6OlB1
dFZhbHVlRnVuYz4oMCkgfSB9LAorICAgIHsgInRlc3RTdGF0aWNWYWx1ZVJlYWRPbmx5Iiwgc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSksIE5vSW50cmlu
c2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4o
dGVzdFN0YXRpY1ZhbHVlR2V0dGVyKSwgKGludHB0cl90KXN0YXRpY19jYXN0PFB1dFByb3BlcnR5
U2xvdDo6UHV0VmFsdWVGdW5jPigwKSB9IH0sCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IEhh
c2hUYWJsZSBzdGF0aWNDdXN0b21WYWx1ZVRhYmxlID0KLSAgICB7IDEsIDEsIHRydWUsIG51bGxw
dHIsIHN0YXRpY0N1c3RvbVZhbHVlVGFibGVWYWx1ZXMsIHN0YXRpY0N1c3RvbVZhbHVlVGFibGVJ
bmRleCB9OworICAgIHsgMywgNywgdHJ1ZSwgbnVsbHB0ciwgc3RhdGljQ3VzdG9tVmFsdWVUYWJs
ZVZhbHVlcywgc3RhdGljQ3VzdG9tVmFsdWVUYWJsZUluZGV4IH07CiAKIGNsYXNzIFN0YXRpY0N1
c3RvbVZhbHVlIDogcHVibGljIEpTTm9uRmluYWxPYmplY3QgewogICAgIHVzaW5nIEJhc2UgPSBK
U05vbkZpbmFsT2JqZWN0OwpAQCAtODE1LDYgKzgyOSw3IEBAIHB1YmxpYzoKIAogY2xhc3MgT2Jq
ZWN0RG9pbmdTaWRlRWZmZWN0UHV0V2l0aG91dENvcnJlY3RTbG90U3RhdHVzIDogcHVibGljIEpT
Tm9uRmluYWxPYmplY3QgewogICAgIHVzaW5nIEJhc2UgPSBKU05vbkZpbmFsT2JqZWN0OworICAg
IHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1
cmVGbGFncyB8IE92ZXJyaWRlc1B1dDsKIHB1YmxpYzoKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBD
ZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+CiAgICAgc3RhdGljIENvbXBsZXRlU3Vic3BhY2UqIHN1
YnNwYWNlRm9yKFZNJiB2bSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI3MTk3NSkKKysrIFNv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM2IEBACisy
MDIxLTAxLTI4ICBBbGV4ZXkgU2h2YXlrYSAgPHNodmFpa2FsZXNoQGdtYWlsLmNvbT4KKworICAg
ICAgICBJbnRyb2R1Y2UgT3ZlcnJpZGVzUHV0W0J5SW5kZXhdIHR5cGUgaW5mbyBmbGFncworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE3OTE2CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBiaW5kaW5ncy9q
cy9KU0RPTVdpbmRvd0N1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpqc0RPTVdpbmRvd0dl
dE93blByb3BlcnR5U2xvdFJlc3RyaWN0ZWRBY2Nlc3MpOgorICAgICAgICAoV2ViQ29yZTo6SlNE
T01XaW5kb3c6OnB1dCk6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTVdpbmRvdzo6ZG9QdXRQcm9w
ZXJ0eVNlY3VyaXR5Q2hlY2spOiBEZWxldGVkLgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9N
V2luZG93UHJvcGVydGllcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTVdpbmRvd1Byb3Bl
cnRpZXM6OnB1dCk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01XaW5kb3dQcm9wZXJ0aWVz
Lmg6CisgICAgICAgICogYmluZGluZ3MvanMvSlNMb2NhdGlvbkN1c3RvbS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpnZXRPd25Qcm9wZXJ0eVNsb3RDb21tb24pOgorICAgICAgICAoV2ViQ29yZTo6
SlNMb2NhdGlvbjo6ZG9QdXRQcm9wZXJ0eVNlY3VyaXR5Q2hlY2spOiBEZWxldGVkLgorICAgICAg
ICAqIGJpbmRpbmdzL2pzL0pTUmVtb3RlRE9NV2luZG93Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkpTUmVtb3RlRE9NV2luZG93OjpwdXQpOgorICAgICAgICAqIGJpbmRpbmdzL3Njcmlw
dHMvQ29kZUdlbmVyYXRvckpTLnBtOgorICAgICAgICAoR2VuZXJhdGVQdXQpOgorICAgICAgICAo
R2VuZXJhdGVIZWFkZXIpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3REb21haW5TZWN1cml0eS5oOgorICAgICAgICAqIGJyaWRnZS9vYmpjL29iamNfcnVudGltZS5o
OgorICAgICAgICAqIGJyaWRnZS9ydW50aW1lX2FycmF5LmNwcDoKKyAgICAgICAgKEpTQzo6UnVu
dGltZUFycmF5OjpwdXQpOgorICAgICAgICAqIGJyaWRnZS9ydW50aW1lX2FycmF5Lmg6CisgICAg
ICAgICogYnJpZGdlL3J1bnRpbWVfb2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6
OlJ1bnRpbWVPYmplY3Q6OnB1dCk6CisgICAgICAgICogYnJpZGdlL3J1bnRpbWVfb2JqZWN0Lmg6
CisgICAgICAgICogcGFnZS9ET01XaW5kb3cuaWRsOgorICAgICAgICAqIHBhZ2UvUmVtb3RlRE9N
V2luZG93LmlkbDoKKwogMjAyMS0wMS0yNyAgTmlrb2xhcyBaaW1tZXJtYW5uICA8bnppbW1lcm1h
bm5AaWdhbGlhLmNvbT4KIAogICAgICAgICBSRUdSRVNTSU9OIChyMjQzMjY2KTogU1ZHU3RvcEVs
ZW1lbnQgZG9lcyBub3QgcmVhY3QgdXBvbiAnb2Zmc2V0JyBhdHRyaWJ1dGUgY2hhbmdlcwpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmNw
cAkocmV2aXNpb24gMjcxOTc1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01X
aW5kb3dDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OCw5ICs0OCwxMSBAQAogI2luY2x1
ZGUgIlNldHRpbmdzLmgiCiAjaW5jbHVkZSAiV2ViQ29yZUpTQ2xpZW50RGF0YS5oIgogI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL0J1aWx0aW5OYW1lcy5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL0dldHRlclNldHRlci5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0hlYXBBbmFseXpl
ci5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0ludGVybmFsRnVuY3Rpb24uaD4KICNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9KU0NJbmxpbmVzLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvSlNDdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbi5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL0pTRnVuY3Rpb24uaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU01pY3JvdGFzay5o
PgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0xvb2t1cC5oPgpAQCAtMTg0LDkgKzE4Niw5IEBA
IGJvb2wganNET01XaW5kb3dHZXRPd25Qcm9wZXJ0eVNsb3RSZXN0cmkKICAgICAgICAgICAgIHx8
IHByb3BlcnR5TmFtZSA9PSBidWlsdGluTmFtZXMub3BlbmVyUHVibGljTmFtZSgpCiAgICAgICAg
ICAgICB8fCBwcm9wZXJ0eU5hbWUgPT0gYnVpbHRpbk5hbWVzLnBhcmVudFB1YmxpY05hbWUoKQog
ICAgICAgICAgICAgfHwgcHJvcGVydHlOYW1lID09IGJ1aWx0aW5OYW1lcy50b3BQdWJsaWNOYW1l
KCkpIHsKLSAgICAgICAgICAgIGJvb2wgc2hvdWxkRXhwb3NlU2V0dGVyID0gcHJvcGVydHlOYW1l
ID09IGJ1aWx0aW5OYW1lcy5sb2NhdGlvblB1YmxpY05hbWUoKTsKLSAgICAgICAgICAgIEN1c3Rv
bUdldHRlclNldHRlciogY3VzdG9tR2V0dGVyU2V0dGVyID0gQ3VzdG9tR2V0dGVyU2V0dGVyOjpj
cmVhdGUodm0sIGVudHJ5LT5wcm9wZXJ0eUdldHRlcigpLCBzaG91bGRFeHBvc2VTZXR0ZXIgPyBl
bnRyeS0+cHJvcGVydHlQdXR0ZXIoKSA6IG51bGxwdHIpOwotICAgICAgICAgICAgc2xvdC5zZXRD
dXN0b21HZXR0ZXJTZXR0ZXIodGhpc09iamVjdCwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTQzo6
UHJvcGVydHlBdHRyaWJ1dGU6OkN1c3RvbUFjY2Vzc29yIHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0
ZTo6RG9udEVudW0pLCBjdXN0b21HZXR0ZXJTZXR0ZXIpOworICAgICAgICAgICAgYXV0byogZ2V0
dGVyID0gSlNDdXN0b21HZXR0ZXJGdW5jdGlvbjo6Y3JlYXRlKHZtLCAmbGV4aWNhbEdsb2JhbE9i
amVjdCwgZW50cnktPnByb3BlcnR5R2V0dGVyKCksIFdURjo6bnVsbG9wdCwgcHJvcGVydHlOYW1l
KTsKKyAgICAgICAgICAgIGF1dG8qIHNldHRlciA9IHByb3BlcnR5TmFtZSA9PSBidWlsdGluTmFt
ZXMubG9jYXRpb25QdWJsaWNOYW1lKCkgPyBKU0N1c3RvbVNldHRlckZ1bmN0aW9uOjpjcmVhdGUo
dm0sICZsZXhpY2FsR2xvYmFsT2JqZWN0LCBlbnRyeS0+cHJvcGVydHlQdXR0ZXIoKSwgcHJvcGVy
dHlOYW1lKSA6IG51bGxwdHI7CisgICAgICAgICAgICBzbG90LnNldEdldHRlclNsb3QodGhpc09i
amVjdCwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6QWNjZXNzb3IgfCBKU0M6OlByb3BlcnR5QXR0
cmlidXRlOjpEb250RW51bSwgR2V0dGVyU2V0dGVyOjpjcmVhdGUodm0sICZsZXhpY2FsR2xvYmFs
T2JqZWN0LCBnZXR0ZXIsIHNldHRlcikpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
ICAgIH0KICAgICB9CkBAIC0zMTEsMjUgKzMxMyw2IEBAIGJvb2wgSlNET01XaW5kb3c6OmdldE93
blByb3BlcnR5U2xvdEJ5SW4KICAgICByZXR1cm4gQmFzZTo6Z2V0T3duUHJvcGVydHlTbG90QnlJ
bmRleCh0aGlzT2JqZWN0LCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBpbmRleCwgc2xvdCk7CiB9CiAK
LXZvaWQgSlNET01XaW5kb3c6OmRvUHV0UHJvcGVydHlTZWN1cml0eUNoZWNrKEpTT2JqZWN0KiBj
ZWxsLCBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIHBy
b3BlcnR5TmFtZSwgUHV0UHJvcGVydHlTbG90JikKLXsKLSAgICBWTSYgdm0gPSBsZXhpY2FsR2xv
YmFsT2JqZWN0LT52bSgpOwotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKLQotICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNET01XaW5kb3cqPihjZWxsKTsK
LSAgICBpZiAoIXRoaXNPYmplY3QtPndyYXBwZWQoKS5mcmFtZSgpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBTdHJpbmcgZXJyb3JNZXNzYWdlOwotICAgIGlmICghQmluZGluZ1NlY3VyaXR5Ojpz
aG91bGRBbGxvd0FjY2Vzc1RvRE9NV2luZG93KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzT2Jq
ZWN0LT53cmFwcGVkKCksIGVycm9yTWVzc2FnZSkpIHsKLSAgICAgICAgLy8gV2Ugb25seSBhbGxv
dyBzZXR0aW5nICJsb2NhdGlvbiIgYXR0cmlidXRlIGNyb3NzLW9yaWdpbi4KLSAgICAgICAgaWYg
KHByb3BlcnR5TmFtZSA9PSBzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERh
dGEpLT5idWlsdGluTmFtZXMoKS5sb2NhdGlvblB1YmxpY05hbWUoKSkKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgdGhyb3dTZWN1cml0eUVycm9yKCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBz
Y29wZSwgZXJyb3JNZXNzYWdlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLX0KLQogYm9vbCBK
U0RPTVdpbmRvdzo6cHV0KEpTQ2VsbCogY2VsbCwgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9i
YWxPYmplY3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFB1dFBy
b3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBWTSYgdm0gPSBsZXhpY2FsR2xvYmFsT2JqZWN0LT52
bSgpOwpAQCAtMzQzLDEwICszMjYsOSBAQCBib29sIEpTRE9NV2luZG93OjpwdXQoSlNDZWxsKiBj
ZWxsLCBKU0dsCiAgICAgaWYgKCFCaW5kaW5nU2VjdXJpdHk6OnNob3VsZEFsbG93QWNjZXNzVG9E
T01XaW5kb3coKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNPYmplY3QtPndyYXBwZWQoKSwgZXJy
b3JNZXNzYWdlKSkgewogICAgICAgICAvLyBXZSBvbmx5IGFsbG93IHNldHRpbmcgImxvY2F0aW9u
IiBhdHRyaWJ1dGUgY3Jvc3Mtb3JpZ2luLgogICAgICAgICBpZiAocHJvcGVydHlOYW1lID09IHN0
YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSktPmJ1aWx0aW5OYW1lcygp
LmxvY2F0aW9uUHVibGljTmFtZSgpKSB7Ci0gICAgICAgICAgICBib29sIHB1dFJlc3VsdCA9IGZh
bHNlOwotICAgICAgICAgICAgaWYgKGxvb2t1cFB1dChsZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9w
ZXJ0eU5hbWUsIHRoaXNPYmplY3QsIHZhbHVlLCAqc19pbmZvLnN0YXRpY1Byb3BIYXNoVGFibGUs
IHNsb3QsIHB1dFJlc3VsdCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHB1dFJlc3VsdDsKLSAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIHNldEpTRE9NV2luZG93X2xvY2F0
aW9uKGxleGljYWxHbG9iYWxPYmplY3QsIEpTVmFsdWU6OmVuY29kZShzbG90LnRoaXNWYWx1ZSgp
KSwgSlNWYWx1ZTo6ZW5jb2RlKHZhbHVlKSk7CisgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCBmYWxzZSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQog
ICAgICAgICB0aHJvd1NlY3VyaXR5RXJyb3IoKmxleGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLCBl
cnJvck1lc3NhZ2UpOwogICAgICAgICByZXR1cm4gZmFsc2U7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd1Byb3BlcnRpZXMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93UHJvcGVydGllcy5jcHAJKHJldmlz
aW9uIDI3MTk3NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93UHJv
cGVydGllcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNiw2ICsxMTYsMTkgQEAgYm9vbCBKU0RP
TVdpbmRvd1Byb3BlcnRpZXM6OmdldE93blByb3BlcgogICAgIHJldHVybiBnZXRPd25Qcm9wZXJ0
eVNsb3Qob2JqZWN0LCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tKHZtLCBp
bmRleCksIHNsb3QpOwogfQogCisvLyBUaGlzIG92ZXJyaWRlIGlzIG5lY2Vzc2FyeSB0byBwcmV2
ZW50IEpTT2JqZWN0OjpwdXRJbmxpbmVTbG93KCkgZnJvbSBwZXJmb3JtaW5nIGV4cGVuc2l2ZSBE
T00gbG9va3Vwcy4KKy8vIEZvcmRpbmcgW1tTZXRdXSByaWdodCB0byBbW1Byb3RvdHlwZV1dLCBz
a2lwcGluZyB0aGUgbmFtZWQgcHJvcGVydGllcyBvYmplY3QgaXRzZWxmLCBpcyBjb25mb3JtYW50
IGJlY2F1c2U6IAorLy8gKiBbW0RlZmluZU93blByb3BlcnR5XV0gYWx3YXlzIGZhaWxzLCBoZW5j
ZSBbW0dldE93blByb3BlcnR5XV0gY2FuJ3QgcmV0dXJuIG5vbi13cml0YWJsZSBvciBhY2Nlc3Nv
ciBwcm9wZXJ0eTsKKy8vICogW1tQcm90b3R5cGVdXSBpcyBpbW11dGFibGUgYW5kIGtub3duIHRv
IGJlIGFuIG9yZGluYXJ5IG9iamVjdC4KKy8vIGh0dHBzOi8vaGV5Y2FtLmdpdGh1Yi5pby93ZWJp
ZGwvI25hbWVkLXByb3BlcnRpZXMtb2JqZWN0Citib29sIEpTRE9NV2luZG93UHJvcGVydGllczo6
cHV0KEpTQ2VsbCogY2VsbCwgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIFBy
b3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYg
c2xvdCkKK3sKKyAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTRE9NV2luZG93UHJvcGVy
dGllcyo+KGNlbGwpOworICAgIEpTT2JqZWN0KiBwcm90byA9IGFzT2JqZWN0KHRoaXNPYmplY3Qt
PmdldFByb3RvdHlwZURpcmVjdChsZXhpY2FsR2xvYmFsT2JqZWN0LT52bSgpKSk7CisgICAgQVNT
RVJUKHByb3RvLT5tZXRob2RUYWJsZShsZXhpY2FsR2xvYmFsT2JqZWN0LT52bSgpKS0+cHV0ID09
IEpTT2JqZWN0OjpwdXQpOworICAgIHJldHVybiBKU09iamVjdDo6cHV0SW5saW5lRm9ySlNPYmpl
Y3QocHJvdG8sIGxleGljYWxHbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3Qp
OworfQorCiBKU0M6Oklzb1N1YnNwYWNlKiBKU0RPTVdpbmRvd1Byb3BlcnRpZXM6OnN1YnNwYWNl
Rm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKICAgICByZXR1cm4gJnN0YXRpY19jYXN0PEpTVk1DbGll
bnREYXRhKj4odm0uY2xpZW50RGF0YSktPmRvbVdpbmRvd1Byb3BlcnRpZXNTcGFjZSgpOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dQcm9wZXJ0aWVzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dQcm9wZXJ0
aWVzLmgJKHJldmlzaW9uIDI3MTk3NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
RE9NV2luZG93UHJvcGVydGllcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3ICszMyw3IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIEpTRE9NV2luZG93UHJvcGVydGllcyBmaW5hbCA6IHB1
YmxpYyBKU0RPTU9iamVjdCB7CiBwdWJsaWM6CiAgICAgdXNpbmcgQmFzZSA9IEpTRE9NT2JqZWN0
OwotICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpT
dHJ1Y3R1cmVGbGFncyB8IEpTQzo6R2V0T3duUHJvcGVydHlTbG90SXNJbXB1cmVGb3JQcm9wZXJ0
eUFic2VuY2UgfCBKU0M6OkludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldo
ZW5MZW5ndGhJc05vdFplcm8gfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEpT
Qzo6SXNJbW11dGFibGVQcm90b3R5cGVFeG90aWNPYmplY3Q7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSlNDOjpH
ZXRPd25Qcm9wZXJ0eVNsb3RJc0ltcHVyZUZvclByb3BlcnR5QWJzZW5jZSB8IEpTQzo6SW50ZXJj
ZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8IEpT
Qzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgSlNDOjpPdmVycmlkZXNQdXQgfCBKU0M6
OklzSW1tdXRhYmxlUHJvdG90eXBlRXhvdGljT2JqZWN0OwogCiAgICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSBmYWxzZTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBD
ZWxsVHlwZSwgSlNDOjpTdWJzcGFjZUFjY2Vzcz4KQEAgLTU5LDYgKzU5LDcgQEAgcHVibGljOgog
CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQzo6SlNPYmplY3QqLCBKU0M6
OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90Jik7
CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU0M6OkpTT2JqZWN0
KiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNDOjpQcm9w
ZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMgYm9vbCBwdXQoSlNDOjpKU0NlbGwqLCBKU0M6OkpTR2xv
YmFsT2JqZWN0KiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6SlNWYWx1ZSwgSlNDOjpQdXRQcm9w
ZXJ0eVNsb3QmKTsKIAogcHJpdmF0ZToKICAgICBKU0RPTVdpbmRvd1Byb3BlcnRpZXMoSlNDOjpT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNDOjpKU0dsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQpJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNMb2NhdGlvbkN1c3RvbS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNMb2NhdGlvbkN1c3RvbS5j
cHAJKHJldmlzaW9uIDI3MTk3NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTG9j
YXRpb25DdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw4IEBACiAjaW5jbHVk
ZSAiSlNET01XaW5kb3dDdXN0b20uaCIKICNpbmNsdWRlICJSdW50aW1lQXBwbGljYXRpb25DaGVj
a3MuaCIKICNpbmNsdWRlICJXZWJDb3JlSlNDbGllbnREYXRhLmgiCisjaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvR2V0dGVyU2V0dGVyLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNDdXN0
b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbi5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTRnVu
Y3Rpb24uaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9Mb29rdXAuaD4KIApAQCAtNzAsOCAr
NzIsOCBAQCBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RDb21tb24oSlNMCiAgICAgLy8g
YSBkZXNjcmlwdG9yIHRoYXQgaGFzIGEgc2V0dGVyIGJ1dCBubyBnZXR0ZXIuCiAgICAgaWYgKHNs
b3QuaW50ZXJuYWxNZXRob2RUeXBlKCkgPT0gUHJvcGVydHlTbG90OjpJbnRlcm5hbE1ldGhvZFR5
cGU6OkdldE93blByb3BlcnR5ICYmIHByb3BlcnR5TmFtZSA9PSBzdGF0aWNfY2FzdDxKU1ZNQ2xp
ZW50RGF0YSo+KHZtLmNsaWVudERhdGEpLT5idWlsdGluTmFtZXMoKS5ocmVmUHVibGljTmFtZSgp
KSB7CiAgICAgICAgIGF1dG8qIGVudHJ5ID0gSlNMb2NhdGlvbjo6aW5mbygpLT5zdGF0aWNQcm9w
SGFzaFRhYmxlLT5lbnRyeShwcm9wZXJ0eU5hbWUpOwotICAgICAgICBDdXN0b21HZXR0ZXJTZXR0
ZXIqIGN1c3RvbUdldHRlclNldHRlciA9IEN1c3RvbUdldHRlclNldHRlcjo6Y3JlYXRlKHZtLCBu
dWxscHRyLCBlbnRyeS0+cHJvcGVydHlQdXR0ZXIoKSk7Ci0gICAgICAgIHNsb3Quc2V0Q3VzdG9t
R2V0dGVyU2V0dGVyKCZ0aGlzT2JqZWN0LCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNDOjpQcm9w
ZXJ0eUF0dHJpYnV0ZTo6Q3VzdG9tQWNjZXNzb3IgfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVu
dW0pLCBjdXN0b21HZXR0ZXJTZXR0ZXIpOworICAgICAgICBhdXRvKiBzZXR0ZXIgPSBKU0N1c3Rv
bVNldHRlckZ1bmN0aW9uOjpjcmVhdGUodm0sICZsZXhpY2FsR2xvYmFsT2JqZWN0LCBlbnRyeS0+
cHJvcGVydHlQdXR0ZXIoKSwgcHJvcGVydHlOYW1lKTsKKyAgICAgICAgc2xvdC5zZXRHZXR0ZXJT
bG90KCZ0aGlzT2JqZWN0LCBQcm9wZXJ0eUF0dHJpYnV0ZTo6QWNjZXNzb3IgfCBQcm9wZXJ0eUF0
dHJpYnV0ZTo6RG9udEVudW0sIEdldHRlclNldHRlcjo6Y3JlYXRlKHZtLCAmbGV4aWNhbEdsb2Jh
bE9iamVjdCwgbnVsbHB0ciwgc2V0dGVyKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0K
IApAQCAtMTEzLDIzICsxMTUsNiBAQCBib29sIEpTTG9jYXRpb246OmdldE93blByb3BlcnR5U2xv
dEJ5SW5kCiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU09iamVjdDo6Z2V0T3duUHJv
cGVydHlTbG90QnlJbmRleChvYmplY3QsIGxleGljYWxHbG9iYWxPYmplY3QsIGluZGV4LCBzbG90
KSk7CiB9CiAKLXZvaWQgSlNMb2NhdGlvbjo6ZG9QdXRQcm9wZXJ0eVNlY3VyaXR5Q2hlY2soSlNP
YmplY3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIFByb3Bl
cnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFB1dFByb3BlcnR5U2xvdCYpCi17Ci0gICAgYXV0byogdGhp
c09iamVjdCA9IGpzQ2FzdDxKU0xvY2F0aW9uKj4ob2JqZWN0KTsKLSAgICBBU1NFUlRfR0NfT0JK
RUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7Ci0KLSAgICBWTSYgdm0gPSBsZXhpY2Fs
R2xvYmFsT2JqZWN0LT52bSgpOwotCi0gICAgLy8gQWx3YXlzIGFsbG93IGFzc2lnbmluZyB0byB0
aGUgd2hvbGUgbG9jYXRpb24uCi0gICAgLy8gSG93ZXZlciwgYWxsbG93aW5nIGFzc2lnbmluZyBv
ZiBwaWVjZXMgbWlnaHQgaW5hZHZlcnRlbnRseSBkaXNjbG9zZSBwYXJ0cyBvZiB0aGUgb3JpZ2lu
YWwgbG9jYXRpb24uCi0gICAgLy8gU28gZmFsbCB0aHJvdWdoIHRvIHRoZSBhY2Nlc3MgY2hlY2sg
Zm9yIHRob3NlLgotICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gc3RhdGljX2Nhc3Q8SlNWTUNsaWVu
dERhdGEqPih2bS5jbGllbnREYXRhKS0+YnVpbHRpbk5hbWVzKCkuaHJlZlB1YmxpY05hbWUoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gQmxvY2sgYWNjZXNzIGFuZCB0aHJvdyBpZiB0aGVy
ZSBpcyBhIHNlY3VyaXR5IGVycm9yLgotICAgIEJpbmRpbmdTZWN1cml0eTo6c2hvdWxkQWxsb3dB
Y2Nlc3NUb0RPTVdpbmRvdyhsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzT2JqZWN0LT53cmFwcGVk
KCkud2luZG93KCksIFRocm93U2VjdXJpdHlFcnJvcik7Ci19Ci0KIGJvb2wgSlNMb2NhdGlvbjo6
cHV0KEpTQ2VsbCogY2VsbCwgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIFBy
b3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYg
cHV0UHJvcGVydHlTbG90KQogewogICAgIFZNJiB2bSA9IGxleGljYWxHbG9iYWxPYmplY3QtPnZt
KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1JlbW90ZURPTVdpbmRvd0N1
c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNSZW1v
dGVET01XaW5kb3dDdXN0b20uY3BwCShyZXZpc2lvbiAyNzE5NzUpCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU1JlbW90ZURPTVdpbmRvd0N1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTY4LDEwICs2OCw5IEBAIGJvb2wgSlNSZW1vdGVET01XaW5kb3c6OnB1dChKU0NlbGwqIGNl
bGwKIAogICAgIC8vIFdlIG9ubHkgYWxsb3cgc2V0dGluZyAibG9jYXRpb24iIGF0dHJpYnV0ZSBj
cm9zcy1vcmlnaW4uCiAgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBzdGF0aWNfY2FzdDxKU1ZNQ2xp
ZW50RGF0YSo+KHZtLmNsaWVudERhdGEpLT5idWlsdGluTmFtZXMoKS5sb2NhdGlvblB1YmxpY05h
bWUoKSkgewotICAgICAgICBib29sIHB1dFJlc3VsdCA9IGZhbHNlOwotICAgICAgICBpZiAobG9v
a3VwUHV0KGxleGljYWxHbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgdGhpc09iamVjdCwgdmFs
dWUsICpzX2luZm8uc3RhdGljUHJvcEhhc2hUYWJsZSwgc2xvdCwgcHV0UmVzdWx0KSkKLSAgICAg
ICAgICAgIHJldHVybiBwdXRSZXN1bHQ7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
c2V0SlNSZW1vdGVET01XaW5kb3dfbG9jYXRpb24obGV4aWNhbEdsb2JhbE9iamVjdCwgSlNWYWx1
ZTo6ZW5jb2RlKHNsb3QudGhpc1ZhbHVlKCkpLCBKU1ZhbHVlOjplbmNvZGUodmFsdWUpKTsKKyAg
ICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZmFsc2UpOworICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICB9CiAgICAgdGhyb3dTZWN1cml0eUVycm9yKCpsZXhpY2FsR2xvYmFsT2JqZWN0
LCBzY29wZSwgZXJyb3JNZXNzYWdlKTsKICAgICByZXR1cm4gZmFsc2U7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQkocmV2
aXNpb24gMjcxOTc1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2Vu
ZXJhdG9ySlMucG0JKHdvcmtpbmcgY29weSkKQEAgLTExOTksNiArMTE5OSw4IEBAIHN1YiBHZW5l
cmF0ZVB1dAogICAgIAogICAgIHB1c2goQCRvdXRwdXRBcnJheSwgImJvb2wgJHtjbGFzc05hbWV9
OjpwdXQoSlNDZWxsKiBjZWxsLCBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwg
UHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgUHV0UHJvcGVydHlTbG90
JiBwdXRQcm9wZXJ0eVNsb3QpXG4iKTsKICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICJ7XG4iKTsK
KyAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgaWYgKFVOTElLRUxZKGNlbGwgIT0gcHV0UHJv
cGVydHlTbG90LnRoaXNWYWx1ZSgpKSlcbiIpOworICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAg
ICAgICAgcmV0dXJuIGFzT2JqZWN0KGNlbGwpLT5wdXRJbmxpbmVTbG93KGxleGljYWxHbG9iYWxP
YmplY3QsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHB1dFByb3BlcnR5U2xvdCwgSlNPYmplY3Q6OlB1
dElubGluZVNsb3dNb2RlOjpJZ25vcmVPd25TcGVjaWFsUHJvcGVydGllcyk7XG4iKTsKICAgICBw
dXNoKEAkb3V0cHV0QXJyYXksICIgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDwke2NsYXNz
TmFtZX0qPihjZWxsKTtcbiIpOwogICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBBU1NFUlRf
R0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7XG5cbiIpOwogCkBAIC0yOTUy
LDExICsyOTU0LDYgQEAgc3ViIEdlbmVyYXRlSGVhZGVyCiAgICAgICAgICRzdHJ1Y3R1cmVGbGFn
c3siSlNDOjpJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3Ro
SXNOb3RaZXJvIn0gPSAxOwogICAgIH0KIAotICAgIGlmICgkaW50ZXJmYWNlLT5leHRlbmRlZEF0
dHJpYnV0ZXMtPntDaGVja1NlY3VyaXR5fSkgewotICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50
LCAiICAgIHN0YXRpYyB2b2lkIGRvUHV0UHJvcGVydHlTZWN1cml0eUNoZWNrKEpTQzo6SlNPYmpl
Y3QqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6UHV0UHJv
cGVydHlTbG90Jik7XG4iKTsKLSAgICAgICAgJHN0cnVjdHVyZUZsYWdzeyJKU0M6Okhhc1B1dFBy
b3BlcnR5U2VjdXJpdHlDaGVjayJ9ID0gMTsKLSAgICB9Ci0KICAgICBpZiAoJGludGVyZmFjZS0+
ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57UGx1Z2lufSB8fCBHZXROYW1lZFNldHRlck9wZXJhdGlvbigk
aW50ZXJmYWNlKSkgewogICAgICAgICAkc3RydWN0dXJlRmxhZ3N7IkpTQzo6UHJvaGliaXRzUHJv
cGVydHlDYWNoaW5nIn0gPSAxOwogICAgIH0KQEAgLTI5NjksNiArMjk2Niw3IEBAIHN1YiBHZW5l
cmF0ZUhlYWRlcgogICAgIGlmIChJbnN0YW5jZU92ZXJyaWRlc1B1dCgkaW50ZXJmYWNlKSkgewog
ICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHN0YXRpYyBib29sIHB1dChKU0M6OkpT
Q2VsbCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpKU1Zh
bHVlLCBKU0M6OlB1dFByb3BlcnR5U2xvdCYpO1xuIik7CiAgICAgICAgIHB1c2goQGhlYWRlckNv
bnRlbnQsICIgICAgc3RhdGljIGJvb2wgcHV0QnlJbmRleChKU0M6OkpTQ2VsbCosIEpTQzo6SlNH
bG9iYWxPYmplY3QqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTQzo6SlNWYWx1ZSwgYm9vbCBz
aG91bGRUaHJvdyk7XG4iKTsKKyAgICAgICAgJHN0cnVjdHVyZUZsYWdzeyJKU0M6Ok92ZXJyaWRl
c1B1dCJ9ID0gMTsKICAgICB9CiAgICAgCiAgICAgaWYgKEluc3RhbmNlT3ZlcnJpZGVzRGVmaW5l
T3duUHJvcGVydHkoJGludGVyZmFjZSkpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3REb21haW5TZWN1cml0eS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3REb21haW5TZWN1cml0
eS5oCShyZXZpc2lvbiAyNzE5NzUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0RG9tYWluU2VjdXJpdHkuaAkod29ya2luZyBjb3B5KQpAQCAtMzksNyAr
MzksNiBAQCBwdWJsaWM6CiAgICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIGNyZWF0ZVByb3RvdHlw
ZShKU0M6OlZNJiwgSlNET01HbG9iYWxPYmplY3QmKTsKICAgICBzdGF0aWMgSlNDOjpKU09iamVj
dCogcHJvdG90eXBlKEpTQzo6Vk0mLCBKU0RPTUdsb2JhbE9iamVjdCYpOwogICAgIHN0YXRpYyBU
ZXN0RG9tYWluU2VjdXJpdHkqIHRvV3JhcHBlZChKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKLSAg
ICBzdGF0aWMgdm9pZCBkb1B1dFByb3BlcnR5U2VjdXJpdHlDaGVjayhKU0M6OkpTT2JqZWN0Kiwg
SlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OlB1dFByb3BlcnR5
U2xvdCYpOwogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDOjpKU0NlbGwqKTsKIAogICAgIERF
Q0xBUkVfSU5GTzsKQEAgLTU5LDcgKzU4LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBKU0M6Oklz
b1N1YnNwYWNlKiBzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pOwogICAgIHN0YXRpYyB2b2lk
IGFuYWx5emVIZWFwKEpTQ2VsbCosIEpTQzo6SGVhcEFuYWx5emVyJik7CiBwdWJsaWM6Ci0gICAg
c3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVy
ZUZsYWdzIHwgSlNDOjpIYXNQdXRQcm9wZXJ0eVNlY3VyaXR5Q2hlY2sgfCBKU0M6Okhhc1N0YXRp
Y1Byb3BlcnR5VGFibGU7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVG
bGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSlNDOjpIYXNTdGF0aWNQcm9wZXJ0eVRhYmxl
OwogcHJvdGVjdGVkOgogICAgIEpTVGVzdERvbWFpblNlY3VyaXR5KEpTQzo6U3RydWN0dXJlKiwg
SlNET01HbG9iYWxPYmplY3QmLCBSZWY8VGVzdERvbWFpblNlY3VyaXR5PiYmKTsKIApJbmRleDog
U291cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRpbWVfYXJyYXkuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX2FycmF5LmNwcAkocmV2aXNpb24gMjcxOTc1KQor
KysgU291cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRpbWVfYXJyYXkuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMjUsNiArMTI1LDkgQEAgYm9vbCBSdW50aW1lQXJyYXk6OnB1dChKU0NlbGwqIGNlbGws
IEpTRwogICAgIFZNJiB2bSA9IGxleGljYWxHbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCisgICAgaWYgKFVOTElLRUxZKGNlbGwg
IT0gc2xvdC50aGlzVmFsdWUoKSkpCisgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwg
YXNPYmplY3QoY2VsbCktPnB1dElubGluZVNsb3cobGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVy
dHlOYW1lLCB2YWx1ZSwgc2xvdCwgSlNPYmplY3Q6OlB1dElubGluZVNsb3dNb2RlOjpJZ25vcmVP
d25TcGVjaWFsUHJvcGVydGllcykpOworCiAgICAgUnVudGltZUFycmF5KiB0aGlzT2JqZWN0ID0g
anNDYXN0PFJ1bnRpbWVBcnJheSo+KGNlbGwpOwogICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gdm0u
cHJvcGVydHlOYW1lcy0+bGVuZ3RoKSB7CiAgICAgICAgIHRocm93RXhjZXB0aW9uKGxleGljYWxH
bG9iYWxPYmplY3QsIHNjb3BlLCBjcmVhdGVSYW5nZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3Qs
ICJSYW5nZSBlcnJvciIpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX2Fy
cmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRpbWVfYXJyYXku
aAkocmV2aXNpb24gMjcxOTc1KQorKysgU291cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRpbWVfYXJy
YXkuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsNyArMzUsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIGNs
YXNzIFJ1bnRpbWVBcnJheSBmaW5hbCA6IHB1YmxpYyBKU0FycmF5IHsKIHB1YmxpYzoKICAgICB1
c2luZyBCYXNlID0gSlNBcnJheTsKLSAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVj
dHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0
eVNsb3QgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eU5hbWVzIHwgSW50ZXJjZXB0c0dldE93blBy
b3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybzsKKyAgICBzdGF0aWMgY29u
c3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBP
dmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eU5hbWVz
IHwgT3ZlcnJpZGVzUHV0IHwgSW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVu
V2hlbkxlbmd0aElzTm90WmVybzsKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNEZXN0
cnVjdGlvbiA9IHRydWU7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgSlNDOjpT
dWJzcGFjZUFjY2Vzcz4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX29iamVj
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRpbWVfb2JqZWN0
LmNwcAkocmV2aXNpb24gMjcxOTc1KQorKysgU291cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRpbWVf
b2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg2LDYgKzE4Niw5IEBAIGJvb2wgUnVudGlt
ZU9iamVjdDo6cHV0KEpTQ2VsbCogY2VsbCwgSlMKICAgICBWTSYgdm0gPSBsZXhpY2FsR2xvYmFs
T2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
IAorICAgIGlmIChVTkxJS0VMWShjZWxsICE9IHNsb3QudGhpc1ZhbHVlKCkpKQorICAgICAgICBS
RUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIGFzT2JqZWN0KGNlbGwpLT5wdXRJbmxpbmVTbG93KGxl
eGljYWxHbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QsIEpTT2JqZWN0OjpQ
dXRJbmxpbmVTbG93TW9kZTo6SWdub3JlT3duU3BlY2lhbFByb3BlcnRpZXMpKTsKKwogICAgIFJ1
bnRpbWVPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8UnVudGltZU9iamVjdCo+KGNlbGwpOwog
ICAgIGlmICghdGhpc09iamVjdC0+bV9pbnN0YW5jZSkgewogICAgICAgICB0aHJvd1J1bnRpbWVP
YmplY3RJbnZhbGlkQWNjZXNzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUpOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRpbWVfb2JqZWN0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRpbWVfb2JqZWN0LmgJKHJldmlzaW9uIDI3MTk3NSkK
KysrIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX29iamVjdC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zNyw3ICszNyw3IEBAIEV4Y2VwdGlvbiogdGhyb3dSdW50aW1lT2JqZWN0SW52YWxpZEFj
Y2UKIGNsYXNzIFdFQkNPUkVfRVhQT1JUIFJ1bnRpbWVPYmplY3QgOiBwdWJsaWMgSlNOb25GaW5h
bE9iamVjdCB7CiBwdWJsaWM6CiAgICAgdXNpbmcgQmFzZSA9IEpTTm9uRmluYWxPYmplY3Q7Ci0g
ICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVj
dHVyZUZsYWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzR2V0T3du
UHJvcGVydHlOYW1lcyB8IE92ZXJyaWRlc0dldENhbGxEYXRhIHwgR2V0T3duUHJvcGVydHlTbG90
TWF5QmVXcm9uZ0Fib3V0RG9udEVudW07CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBT
dHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJv
cGVydHlTbG90IHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlOYW1lcyB8IE92ZXJyaWRlc0dldENh
bGxEYXRhIHwgT3ZlcnJpZGVzUHV0IHwgR2V0T3duUHJvcGVydHlTbG90TWF5QmVXcm9uZ0Fib3V0
RG9udEVudW07CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0
cnVlOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIEpTQzo6U3Vic3BhY2VBY2Nl
c3M+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvb2JqYy9vYmpjX3J1bnRpbWUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvb2JqYy9vYmpjX3J1bnRpbWUuaAkocmV2
aXNpb24gMjcxOTc1KQorKysgU291cmNlL1dlYkNvcmUvYnJpZGdlL29iamMvb2JqY19ydW50aW1l
LmgJKHdvcmtpbmcgY29weSkKQEAgLTkxLDcgKzkxLDcgQEAgcHJpdmF0ZToKIGNsYXNzIE9iamNG
YWxsYmFja09iamVjdEltcCBmaW5hbCA6IHB1YmxpYyBKU0Rlc3RydWN0aWJsZU9iamVjdCB7CiBw
dWJsaWM6CiAgICAgdXNpbmcgQmFzZSA9IEpTRGVzdHJ1Y3RpYmxlT2JqZWN0OwotICAgIHN0YXRp
YyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFn
cyB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRlc0dldENhbGxEYXRhOwor
ICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1
Y3R1cmVGbGFncyB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRlc0dldENh
bGxEYXRhIHwgT3ZlcnJpZGVzUHV0OwogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0Rl
c3RydWN0aW9uID0gdHJ1ZTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBKU0M6
OlN1YnNwYWNlQWNjZXNzPgpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuaWRs
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmlkbAkocmV2aXNp
b24gMjcxOTc1KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuaWRsCSh3b3JraW5n
IGNvcHkpCkBAIC01Miw3ICs1Miw3IEBACiAgICAgW1JlcGxhY2VhYmxlLCBEb05vdENoZWNrU2Vj
dXJpdHlPbkdldHRlciwgQ3VzdG9tR2V0dGVyXSByZWFkb25seSBhdHRyaWJ1dGUgV2luZG93UHJv
eHkgc2VsZjsKICAgICBbTGVnYWN5VW5mb3JnZWFibGVdIHJlYWRvbmx5IGF0dHJpYnV0ZSBEb2N1
bWVudCBkb2N1bWVudDsKICAgICBhdHRyaWJ1dGUgRE9NU3RyaW5nIG5hbWU7Ci0gICAgW0RvTm90
Q2hlY2tTZWN1cml0eSwgUHV0Rm9yd2FyZHM9aHJlZiwgTGVnYWN5VW5mb3JnZWFibGVdIHJlYWRv
bmx5IGF0dHJpYnV0ZSBMb2NhdGlvbiBsb2NhdGlvbjsKKyAgICBbRG9Ob3RDaGVja1NlY3VyaXR5
LCBQdXRGb3J3YXJkcz1ocmVmLCBMZWdhY3lVbmZvcmdlYWJsZSwgRm9yd2FyZERlY2xhcmVJbkhl
YWRlcl0gcmVhZG9ubHkgYXR0cmlidXRlIExvY2F0aW9uIGxvY2F0aW9uOwogICAgIHJlYWRvbmx5
IGF0dHJpYnV0ZSBIaXN0b3J5IGhpc3Rvcnk7CiAgICAgW0ltcGxlbWVudGVkQXM9ZW5zdXJlQ3Vz
dG9tRWxlbWVudFJlZ2lzdHJ5XSByZWFkb25seSBhdHRyaWJ1dGUgQ3VzdG9tRWxlbWVudFJlZ2lz
dHJ5IGN1c3RvbUVsZW1lbnRzOwogICAgIFtSZXBsYWNlYWJsZV0gcmVhZG9ubHkgYXR0cmlidXRl
IEJhclByb3AgbG9jYXRpb25iYXI7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1JlbW90ZURP
TVdpbmRvdy5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9SZW1vdGVET01X
aW5kb3cuaWRsCShyZXZpc2lvbiAyNzE5NzUpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL1JlbW90
ZURPTVdpbmRvdy5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDcgKzQ1LDcgQEAKIF0gaW50ZXJm
YWNlIFJlbW90ZURPTVdpbmRvdyB7CiAgICAgW0xlZ2FjeVVuZm9yZ2VhYmxlLCBJbXBsZW1lbnRl
ZEFzPXNlbGZdIHJlYWRvbmx5IGF0dHJpYnV0ZSBXaW5kb3dQcm94eSB3aW5kb3c7CiAgICAgW1Jl
cGxhY2VhYmxlXSByZWFkb25seSBhdHRyaWJ1dGUgV2luZG93UHJveHkgc2VsZjsKLSAgICBbUHV0
Rm9yd2FyZHM9aHJlZiwgTGVnYWN5VW5mb3JnZWFibGVdIHJlYWRvbmx5IGF0dHJpYnV0ZSBMb2Nh
dGlvbj8gbG9jYXRpb247IC8vIEZJWE1FOiBTaG91bGQgbm90IGJlIG51bGxhYmxlLgorICAgIFtQ
dXRGb3J3YXJkcz1ocmVmLCBMZWdhY3lVbmZvcmdlYWJsZSwgRm9yd2FyZERlY2xhcmVJbkhlYWRl
cl0gcmVhZG9ubHkgYXR0cmlidXRlIExvY2F0aW9uPyBsb2NhdGlvbjsgLy8gRklYTUU6IFNob3Vs
ZCBub3QgYmUgbnVsbGFibGUuCiAgICAgW0NhbGxXaXRoPUluY3VtYmVudERvY3VtZW50LCBGb3J3
YXJkRGVjbGFyZUluSGVhZGVyXSB1bmRlZmluZWQgY2xvc2UoKTsKICAgICBbRm9yd2FyZERlY2xh
cmVJbkhlYWRlcl0gcmVhZG9ubHkgYXR0cmlidXRlIGJvb2xlYW4gY2xvc2VkOwogICAgIFtDYWxs
V2l0aD1JbmN1bWJlbnRXaW5kb3csIEZvcndhcmREZWNsYXJlSW5IZWFkZXJdIHVuZGVmaW5lZCBm
b2N1cygpOwpJbmRleDogU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdC9DaGFuZ2VMb2cJKHJldmlzaW9uIDI3MTk3NSkKKysrIFNvdXJjZS9XZWJLaXQv
Q2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIwMjEtMDEtMjggIEFs
ZXhleSBTaHZheWthICA8c2h2YWlrYWxlc2hAZ21haWwuY29tPgorCisgICAgICAgIEludHJvZHVj
ZSBPdmVycmlkZXNQdXRbQnlJbmRleF0gdHlwZSBpbmZvIGZsYWdzCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTc5MTYKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9OZXRz
Y2FwZS9KU05QT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6SlNOUE9iamVjdDo6cHV0KToK
KyAgICAgICAgKiBXZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvSlNOUE9iamVjdC5oOgorCiAy
MDIxLTAxLTI3ICBLYXRlIENoZW5leSAgPGthdGhlcmluZV9jaGVuZXlAYXBwbGUuY29tPgogCiAg
ICAgICAgIFdLV2ViVmlldyBjbG9zZUFsbE1lZGlhUHJlc2VudGF0aW9ucyBBUEkgZG9lcyBub3Qg
aGF2ZSBhIGNvbXBsZXRpb24gaGFuZGxlcgpJbmRleDogU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1BsdWdpbnMvTmV0c2NhcGUvSlNOUE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvSlNOUE9iamVjdC5jcHAJKHJldmlzaW9u
IDI3MTk3NSkKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL0pT
TlBPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMjksMTEgKzMyOSwxNCBAQCBib29sIEpT
TlBPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdChKU09iCiAgICAgcmV0dXJuIGZhbHNlOwogfQog
Ci1ib29sIEpTTlBPYmplY3Q6OnB1dChKU0NlbGwqIGNlbGwsIEpTR2xvYmFsT2JqZWN0KiBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVl
LCBQdXRQcm9wZXJ0eVNsb3QmKQorYm9vbCBKU05QT2JqZWN0OjpwdXQoSlNDZWxsKiBjZWxsLCBK
U0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5
TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBzbG90KQogewogICAgIFZNJiB2
bSA9IGxleGljYWxHbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOwogCisgICAgaWYgKFVOTElLRUxZKGNlbGwgIT0gc2xvdC50aGlzVmFs
dWUoKSkpCisgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgYXNPYmplY3QoY2VsbCkt
PnB1dElubGluZVNsb3cobGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwg
c2xvdCwgSlNPYmplY3Q6OlB1dElubGluZVNsb3dNb2RlOjpJZ25vcmVPd25TcGVjaWFsUHJvcGVy
dGllcykpOworCiAgICAgSlNOUE9iamVjdCogdGhpc09iamVjdCA9IEpTQzo6anNDYXN0PEpTTlBP
YmplY3QqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3Qs
IGluZm8oKSk7CiAgICAgaWYgKCF0aGlzT2JqZWN0LT5tX25wT2JqZWN0KSB7CkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9KU05QT2JqZWN0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvSlNOUE9i
amVjdC5oCShyZXZpc2lvbiAyNzE5NzUpCisrKyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1
Z2lucy9OZXRzY2FwZS9KU05QT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0LDcg
QEAgY2xhc3MgTlBSdW50aW1lT2JqZWN0TWFwOwogY2xhc3MgSlNOUE9iamVjdCBmaW5hbCA6IHB1
YmxpYyBKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0IHsKIHB1YmxpYzoKICAgICB1c2luZyBCYXNl
ID0gSlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdDsKLSAgICBzdGF0aWMgY29uc3RleHByIHVuc2ln
bmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBKU0M6Ok92ZXJyaWRl
c0dldE93blByb3BlcnR5U2xvdCB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlOYW1lcyB8
IEpTQzo6T3ZlcnJpZGVzR2V0Q2FsbERhdGEgfCBKU0M6OkdldE93blByb3BlcnR5U2xvdE1heUJl
V3JvbmdBYm91dERvbnRFbnVtOworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0
dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJv
cGVydHlTbG90IHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eU5hbWVzIHwgSlNDOjpPdmVy
cmlkZXNHZXRDYWxsRGF0YSB8IEpTQzo6T3ZlcnJpZGVzUHV0IHwgSlNDOjpHZXRPd25Qcm9wZXJ0
eVNsb3RNYXlCZVdyb25nQWJvdXREb250RW51bTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENl
bGxUeXBlLCBKU0M6OlN1YnNwYWNlQWNjZXNzPgogICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNl
KiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDI3MTk3NSkKKysr
IExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIxIEBACisy
MDIxLTAxLTI4ICBBbGV4ZXkgU2h2YXlrYSAgPHNodmFpa2FsZXNoQGdtYWlsLmNvbT4KKworICAg
ICAgICBJbnRyb2R1Y2UgT3ZlcnJpZGVzUHV0W0J5SW5kZXhdIHR5cGUgaW5mbyBmbGFncworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE3OTE2CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBmYXN0L2RvbS9X
aW5kb3cvZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLW90aGVyLXdpbmRvdy1leHBlY3RlZC50eHQ6
CisgICAgICAgICogZmFzdC9kb20vV2luZG93L2dldE93blByb3BlcnR5RGVzY3JpcHRvci1vdGhl
ci13aW5kb3cuaHRtbDoKKyAgICAgICAgKiBmYXN0L2RvbS9odG1sY29sbGVjdGlvbi1nZXRvd25w
cm9wZXJ0eS1leHBlY3RlZC50eHQ6CisgICAgICAgICogZmFzdC9kb20vaHRtbGNvbGxlY3Rpb24t
Z2V0b3ducHJvcGVydHkuaHRtbDoKKyAgICAgICAgKiBodHRwL3Rlc3RzL3NlY3VyaXR5L2Nyb3Nz
LWZyYW1lLWFjY2Vzcy1vYmplY3QtZ2V0UHJvdG90eXBlT2YtaW4tcHV0LWV4cGVjdGVkLnR4dDoK
KyAgICAgICAgKiBodHRwL3Rlc3RzL3NlY3VyaXR5L2Nyb3NzLWZyYW1lLWFjY2Vzcy1vYmplY3Qt
Z2V0UHJvdG90eXBlT2YtaW4tcHV0Lmh0bWw6CisgICAgICAgICoganMvZG9tL3JlZmxlY3Qtc2V0
LW9udG8tZG9tLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBqcy9kb20vc2NyaXB0LXRlc3RzL3Jl
ZmxlY3Qtc2V0LW9udG8tZG9tLmpzOgorICAgICAgICAqIGpzL2luc3RhbmNlLXByb3BlcnR5LWdl
dHRlci1vdGhlci1pbnN0YW5jZS1leHBlY3RlZC50eHQ6CisgICAgICAgICoganMvaW5zdGFuY2Ut
cHJvcGVydHktZ2V0dGVyLW90aGVyLWluc3RhbmNlLmh0bWw6CisKIDIwMjEtMDEtMjcgIE5pa29s
YXMgWmltbWVybWFubiAgPG56aW1tZXJtYW5uQGlnYWxpYS5jb20+CiAKICAgICAgICAgUkVHUkVT
U0lPTiAocjI0MzI2Nik6IFNWR1N0b3BFbGVtZW50IGRvZXMgbm90IHJlYWN0IHVwb24gJ29mZnNl
dCcgYXR0cmlidXRlIGNoYW5nZXMKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZG9tL2h0bWxjb2xs
ZWN0aW9uLWdldG93bnByb3BlcnR5LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9mYXN0L2RvbS9odG1sY29sbGVjdGlvbi1nZXRvd25wcm9wZXJ0eS1leHBlY3RlZC50eHQJ
KHJldmlzaW9uIDI3MTk3NSkKKysrIExheW91dFRlc3RzL2Zhc3QvZG9tL2h0bWxjb2xsZWN0aW9u
LWdldG93bnByb3BlcnR5LWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMTQsNyArMTQs
NyBAQCBQQVNTIGh0bWxDb2xsZWN0aW9uLmxlbmd0aCBpcyA0CiAqIE5hbWVkIHByb3BlcnRpZXMg
c2hvdWxkIG5vdCBtYXNrIG93biBwcm9wZXJ0aWVzIG9uIEhUTUxDb2xsZWN0aW9uCiBodG1sQ29s
bGVjdGlvbi5mb28gPSAnZm9vJwogUEFTUyBodG1sQ29sbGVjdGlvbi5uYW1lZEl0ZW0oJ2Zvbycp
IGlzIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmb29QJykKLVBBU1MgaHRtbENvbGxlY3Rpb24u
Zm9vIGlzICJmb28iCitQQVNTIGh0bWxDb2xsZWN0aW9uLmZvbyBpcyBkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgnZm9vUCcpCiAKICogTmFtZWQgcHJvcGVydGllcyBzaG91bGQgbm90IG1hc2sgaW5k
ZXhlZCBwcm9wZXJ0aWVzCiBQQVNTIGh0bWxDb2xsZWN0aW9uLml0ZW0oMCkgaXMgdGVzdERpdi5m
aXJzdEVsZW1lbnRDaGlsZApJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9kb20vaHRtbGNvbGxlY3Rp
b24tZ2V0b3ducHJvcGVydHkuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2Rv
bS9odG1sY29sbGVjdGlvbi1nZXRvd25wcm9wZXJ0eS5odG1sCShyZXZpc2lvbiAyNzE5NzUpCisr
KyBMYXlvdXRUZXN0cy9mYXN0L2RvbS9odG1sY29sbGVjdGlvbi1nZXRvd25wcm9wZXJ0eS5odG1s
CSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsyNyw3IEBAIGRlYnVnKCIiKTsKIGRlYnVnKCIqIE5h
bWVkIHByb3BlcnRpZXMgc2hvdWxkIG5vdCBtYXNrIG93biBwcm9wZXJ0aWVzIG9uIEhUTUxDb2xs
ZWN0aW9uIik7CiBldmFsQW5kTG9nKCJodG1sQ29sbGVjdGlvbi5mb28gPSAnZm9vJyIpOwogc2hv
dWxkQmUoImh0bWxDb2xsZWN0aW9uLm5hbWVkSXRlbSgnZm9vJykiLCAiZG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoJ2Zvb1AnKSIpCi1zaG91bGRCZUVxdWFsVG9TdHJpbmcoImh0bWxDb2xsZWN0aW9u
LmZvbyIsICJmb28iKTsKK3Nob3VsZEJlKCJodG1sQ29sbGVjdGlvbi5mb28iLCAiZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoJ2Zvb1AnKSIpOwogCiBkZWJ1ZygiIik7CiBkZWJ1ZygiKiBOYW1lZCBw
cm9wZXJ0aWVzIHNob3VsZCBub3QgbWFzayBpbmRleGVkIHByb3BlcnRpZXMiKTsKSW5kZXg6IExh
eW91dFRlc3RzL2Zhc3QvZG9tL1dpbmRvdy9nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Itb3RoZXIt
d2luZG93LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2RvbS9X
aW5kb3cvZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLW90aGVyLXdpbmRvdy1leHBlY3RlZC50eHQJ
KHJldmlzaW9uIDI3MTk3NSkKKysrIExheW91dFRlc3RzL2Zhc3QvZG9tL1dpbmRvdy9nZXRPd25Q
cm9wZXJ0eURlc2NyaXB0b3Itb3RoZXItd2luZG93LWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5
KQpAQCAtNSwxMiArNSwxMiBAQCBPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2Yg
IlBBCiAKIGRlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG90aGVy
V2luZG93LCAnbG9jYXRpb24nKQogUEFTUyBkZXNjcmlwdG9yIGlzIG5vdCB1bmRlZmluZWQKLVBB
U1MgZGVzY3JpcHRvci5nZXQgaXMgYW4gaW5zdGFuY2Ugb2YgRnVuY3Rpb24KLVBBU1MgZGVzY3Jp
cHRvci5zZXQgaXMgYW4gaW5zdGFuY2Ugb2YgRnVuY3Rpb24KK1BBU1MgZGVzY3JpcHRvci5nZXQg
aW5zdGFuY2VvZiBvdGhlcldpbmRvdy5GdW5jdGlvbiBpcyB0cnVlCitQQVNTIGRlc2NyaXB0b3Iu
c2V0IGluc3RhbmNlb2Ygb3RoZXJXaW5kb3cuRnVuY3Rpb24gaXMgdHJ1ZQogUEFTUyBkZXNjcmlw
dG9yLmVudW1lcmFibGUgaXMgdHJ1ZQogUEFTUyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSBpcyBm
YWxzZQogUEFTUyBkZXNjcmlwdG9yLmdldC5jYWxsKG90aGVyV2luZG93KS50b1N0cmluZygpIGlz
ICJhYm91dDpibGFuayIKLVBBU1MgZGVzY3JpcHRvci5nZXQuY2FsbCgpIGlzIGRlc2NyaXB0b3Iu
Z2V0LmNhbGwod2luZG93KQorUEFTUyBkZXNjcmlwdG9yLmdldC5jYWxsKCkgaXMgZGVzY3JpcHRv
ci5nZXQuY2FsbChvdGhlcldpbmRvdykKIFBBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUK
IAogVEVTVCBDT01QTEVURQpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9kb20vV2luZG93L2dldE93
blByb3BlcnR5RGVzY3JpcHRvci1vdGhlci13aW5kb3cuaHRtbAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9mYXN0L2RvbS9XaW5kb3cvZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLW90aGVyLXdp
bmRvdy5odG1sCShyZXZpc2lvbiAyNzE5NzUpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2RvbS9XaW5k
b3cvZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLW90aGVyLXdpbmRvdy5odG1sCSh3b3JraW5nIGNv
cHkpCkBAIC0xMCwxMiArMTAsMTIgQEAgb3RoZXJXaW5kb3cgPSBmcmFtZXNbMF07CiAKIGV2YWxB
bmRMb2coImRlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG90aGVy
V2luZG93LCAnbG9jYXRpb24nKSIpOwogc2hvdWxkTm90QmUoImRlc2NyaXB0b3IiLCAidW5kZWZp
bmVkIik7Ci1zaG91bGRCZVR5cGUoImRlc2NyaXB0b3IuZ2V0IiwgIkZ1bmN0aW9uIik7Ci1zaG91
bGRCZVR5cGUoImRlc2NyaXB0b3Iuc2V0IiwgIkZ1bmN0aW9uIik7CitzaG91bGRCZVRydWUoImRl
c2NyaXB0b3IuZ2V0IGluc3RhbmNlb2Ygb3RoZXJXaW5kb3cuRnVuY3Rpb24iKTsKK3Nob3VsZEJl
VHJ1ZSgiZGVzY3JpcHRvci5zZXQgaW5zdGFuY2VvZiBvdGhlcldpbmRvdy5GdW5jdGlvbiIpOwog
c2hvdWxkQmVUcnVlKCJkZXNjcmlwdG9yLmVudW1lcmFibGUiKTsKIHNob3VsZEJlRmFsc2UoImRl
c2NyaXB0b3IuY29uZmlndXJhYmxlIik7CiBzaG91bGRCZUVxdWFsVG9TdHJpbmcoImRlc2NyaXB0
b3IuZ2V0LmNhbGwob3RoZXJXaW5kb3cpLnRvU3RyaW5nKCkiLCAiYWJvdXQ6YmxhbmsiKTsKLXNo
b3VsZEJlKCJkZXNjcmlwdG9yLmdldC5jYWxsKCkiLCAiZGVzY3JpcHRvci5nZXQuY2FsbCh3aW5k
b3cpIik7CitzaG91bGRCZSgiZGVzY3JpcHRvci5nZXQuY2FsbCgpIiwgImRlc2NyaXB0b3IuZ2V0
LmNhbGwob3RoZXJXaW5kb3cpIik7CiA8L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSIuLi8uLi8uLi9y
ZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KIDwvYm9keT4KSW5kZXg6IExheW91
dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkvY3Jvc3MtZnJhbWUtYWNjZXNzLW9iamVjdC1nZXRQ
cm90b3R5cGVPZi1pbi1wdXQtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L2h0dHAvdGVzdHMvc2VjdXJpdHkvY3Jvc3MtZnJhbWUtYWNjZXNzLW9iamVjdC1nZXRQcm90b3R5
cGVPZi1pbi1wdXQtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAyNzE5NzUpCisrKyBMYXlvdXRUZXN0
cy9odHRwL3Rlc3RzL3NlY3VyaXR5L2Nyb3NzLWZyYW1lLWFjY2Vzcy1vYmplY3QtZ2V0UHJvdG90
eXBlT2YtaW4tcHV0LWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDcgQEAK
IFRoaXMgdGVzdHMgdGhhdCB5b3UgY2FuJ3QgZ2V0IHRoZSBwcm90b3R5cGUgb2YgdGhlIHdpbmRv
dyBkdXJpbmcgW1tQdXRdXSBvcGVyYXRpb24uCiAKK1BBU1MgYXJyYXkuY29jb2EgPSBjb2NvYVZh
bHVlIHRocmV3IGV4Y2VwdGlvbiBTZWN1cml0eUVycm9yOiBCbG9ja2VkIGEgZnJhbWUgd2l0aCBv
cmlnaW4gImh0dHA6Ly8xMjcuMC4wLjE6ODAwMCIgZnJvbSBhY2Nlc3NpbmcgYSBjcm9zcy1vcmln
aW4gZnJhbWUuIFByb3RvY29scywgZG9tYWlucywgYW5kIHBvcnRzIG11c3QgbWF0Y2guLgorUEFT
UyAnc3RyJy5jb2NvYSA9IGNvY29hVmFsdWUgdGhyZXcgZXhjZXB0aW9uIFNlY3VyaXR5RXJyb3I6
IEJsb2NrZWQgYSBmcmFtZSB3aXRoIG9yaWdpbiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiBmcm9t
IGFjY2Vzc2luZyBhIGNyb3NzLW9yaWdpbiBmcmFtZS4gUHJvdG9jb2xzLCBkb21haW5zLCBhbmQg
cG9ydHMgbXVzdCBtYXRjaC4uCiBQQVNTOiBzdWNjZXNzZnVsbHlQYXJzZWQgc2hvdWxkIGJlICd0
cnVlJyBhbmQgaXMuCiAKIFRFU1QgQ09NUExFVEUKSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVz
dHMvc2VjdXJpdHkvY3Jvc3MtZnJhbWUtYWNjZXNzLW9iamVjdC1nZXRQcm90b3R5cGVPZi1pbi1w
dXQuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L2Ny
b3NzLWZyYW1lLWFjY2Vzcy1vYmplY3QtZ2V0UHJvdG90eXBlT2YtaW4tcHV0Lmh0bWwJKHJldmlz
aW9uIDI3MTk3NSkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkvY3Jvc3MtZnJh
bWUtYWNjZXNzLW9iamVjdC1nZXRQcm90b3R5cGVPZi1pbi1wdXQuaHRtbAkod29ya2luZyBjb3B5
KQpAQCAtMTUsNyArMTUsNyBAQAogICAgICAgICBkb1Rlc3QgPSBmdW5jdGlvbigpCiAgICAgICAg
IHsKICAgICAgICAgICAgIHRhcmdldFdpbmRvdyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0
YXJnZXQiKS5jb250ZW50V2luZG93OwotICAgICAgICAgICAgdmFyIGFycmF5ID0gW107CisgICAg
ICAgICAgICBhcnJheSA9IFtdOwogICAgICAgICAgICAgYXJyYXkuX19wcm90b19fLl9fcHJvdG9f
XyA9IHRhcmdldFdpbmRvdzsKICAgICAgICAgICAgIGFycmF5WzBdID0gMTEuMTE7CiAgICAgICAg
ICAgICBhcnJheVsyXSA9IDIyLjIyOwpAQCAtMjQsMTEgKzI0LDE1IEBACiAgICAgICAgICAgICAg
ICAgICAgIHRlc3RGYWlsZWQoInRvU3RyaW5nIGlzIGNhbGxlZCBieSAxMDEwMTAxMCBzZXR0ZXIi
KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9OwotICAgICAgICAgICAgYXJyYXlb
ImNvY29hIl0gPSB7CisgICAgICAgICAgICBjb2NvYVZhbHVlID0gewogICAgICAgICAgICAgICAg
IHRvU3RyaW5nKCkgewogICAgICAgICAgICAgICAgICAgICB0ZXN0RmFpbGVkKCJ0b1N0cmluZyBp
cyBjYWxsZWQgYnkgY29jb2Egc2V0dGVyIik7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgfTsKKyAgICAgICAgICAgIHNob3VsZFRocm93RXJyb3JOYW1lKCJhcnJheS5jb2NvYSA9IGNv
Y29hVmFsdWUiLCAiU2VjdXJpdHlFcnJvciIpOworCisgICAgICAgICAgICBPYmplY3Quc2V0UHJv
dG90eXBlT2YoU3RyaW5nLnByb3RvdHlwZSwgdGFyZ2V0V2luZG93KTsKKyAgICAgICAgICAgIHNo
b3VsZFRocm93RXJyb3JOYW1lKCInc3RyJy5jb2NvYSA9IGNvY29hVmFsdWUiLCAiU2VjdXJpdHlF
cnJvciIpOwogICAgICAgICAgICAgZmluaXNoSlNUZXN0KCk7CiAgICAgICAgIH0KICAgICA8L3Nj
cmlwdD4KSW5kZXg6IExheW91dFRlc3RzL2ltcG9ydGVkL3czYy9DaGFuZ2VMb2cKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL0NoYW5nZUxvZwkocmV2aXNpb24gMjcxOTc1
KQorKysgTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDIwIEBACisyMDIxLTAxLTI4ICBBbGV4ZXkgU2h2YXlrYSAgPHNodmFpa2FsZXNo
QGdtYWlsLmNvbT4KKworICAgICAgICBJbnRyb2R1Y2UgT3ZlcnJpZGVzUHV0W0J5SW5kZXhdIHR5
cGUgaW5mbyBmbGFncworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjE3OTE2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvZG9tL2NvbGxlY3Rpb25zL0hUTUxDb2xsZWN0aW9u
LWFzLXByb3RvdHlwZS1leHBlY3RlZC50eHQ6CisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3Rz
L2RvbS9jb2xsZWN0aW9ucy9IVE1MQ29sbGVjdGlvbi1vd24tcHJvcHMtZXhwZWN0ZWQudHh0Ogor
ICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9kb20vY29sbGVjdGlvbnMvSFRNTENvbGxlY3Rp
b24tc3VwcG9ydGVkLXByb3BlcnR5LW5hbWVzLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiB3ZWIt
cGxhdGZvcm0tdGVzdHMvZG9tL2V2ZW50cy9FdmVudC1pc1RydXN0ZWQuYW55LWV4cGVjdGVkLnR4
dDoKKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvZG9tL2V2ZW50cy9FdmVudC1pc1RydXN0
ZWQuYW55Lndvcmtlci1leHBlY3RlZC50eHQ6CisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3Rz
L2h0bWwvYnJvd3NlcnMvaGlzdG9yeS90aGUtbG9jYXRpb24taW50ZXJmYWNlL2RvY3VtZW50X2xv
Y2F0aW9uLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvaHRtbC9i
cm93c2Vycy93aW5kb3dzL2F1eGlsaWFyeS1icm93c2luZy1jb250ZXh0cy9vcGVuZXItc2V0dGVy
LndpbmRvdy1leHBlY3RlZC50eHQ6CisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL2h0bWwv
YnJvd3NlcnMvd2luZG93cy9lbWJlZGRlZC1vcGVuZXItZXhwZWN0ZWQudHh0OgorICAgICAgICAq
IHdlYi1wbGF0Zm9ybS10ZXN0cy9odG1sL3NlbWFudGljcy9mb3Jtcy90aGUtZm9ybS1lbGVtZW50
L2Zvcm0tbmFtZWRpdGVtLWV4cGVjdGVkLnR4dDoKKwogMjAyMS0wMS0yNyAgTWFudWVsIFJlZ28g
Q2FzYXNub3ZhcyAgPHJlZ29AaWdhbGlhLmNvbT4KIAogICAgICAgICBVcHN0cmVhbSB0byBXUFQg
U2hhZG93IERPTSB0ZXN0cyByZWxhdGVkIHRvIDpmb2N1cyBwc2V1ZG8tY2xhc3MKSW5kZXg6IExh
eW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvZG9tL2NvbGxlY3Rpb25z
L0hUTUxDb2xsZWN0aW9uLWFzLXByb3RvdHlwZS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9kb20vY29sbGVjdGlv
bnMvSFRNTENvbGxlY3Rpb24tYXMtcHJvdG90eXBlLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMjcx
OTc1KQorKysgTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9kb20v
Y29sbGVjdGlvbnMvSFRNTENvbGxlY3Rpb24tYXMtcHJvdG90eXBlLWV4cGVjdGVkLnR4dAkod29y
a2luZyBjb3B5KQpAQCAtMSw0ICsxLDQgQEAKIAogUEFTUyBIVE1MQ29sbGVjdGlvbiBhcyBhIHBy
b3RvdHlwZSBzaG91bGQgbm90IGFsbG93IGdldHRpbmcgLmxlbmd0aCBvbiB0aGUgYmFzZSBvYmpl
Y3QKLVBBU1MgSFRNTENvbGxlY3Rpb24gYXMgYSBwcm90b3R5cGUgYW5kIHNldHRpbmcgb3duIHBy
b3BlcnRpZXMKK0ZBSUwgSFRNTENvbGxlY3Rpb24gYXMgYSBwcm90b3R5cGUgYW5kIHNldHRpbmcg
b3duIHByb3BlcnRpZXMgYXNzZXJ0X2VxdWFsczogZXhwZWN0ZWQgKHN0cmluZykgImZvbyIgYnV0
IGdvdCAob2JqZWN0KSBFbGVtZW50IG5vZGUgPHAgaWQ9Im5hbWVkIj48L3A+CiAKSW5kZXg6IExh
eW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvZG9tL2NvbGxlY3Rpb25z
L0hUTUxDb2xsZWN0aW9uLW93bi1wcm9wcy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9kb20vY29sbGVjdGlvbnMv
SFRNTENvbGxlY3Rpb24tb3duLXByb3BzLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMjcxOTc1KQor
KysgTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9kb20vY29sbGVj
dGlvbnMvSFRNTENvbGxlY3Rpb24tb3duLXByb3BzLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5
KQpAQCAtMSw4ICsxLDYgQEAKIAotRkFJTCBTZXR0aW5nIG5vbi1hcnJheSBpbmRleCB3aGlsZSBu
YW1lZCBwcm9wZXJ0eSBleGlzdHMgKGxvb3NlKSBhc3NlcnRfZXF1YWxzOiBleHBlY3RlZCAob2Jq
ZWN0KSBFbGVtZW50IG5vZGUgPGEgaWQ9Im5hbWVkIj48L2E+IGJ1dCBnb3QgKHN0cmluZykgImZv
byIKLUZBSUwgU2V0dGluZyBub24tYXJyYXkgaW5kZXggd2hpbGUgbmFtZWQgcHJvcGVydHkgZXhp
c3RzIChzdHJpY3QpIGFzc2VydF90aHJvd3NfanM6IGZ1bmN0aW9uICJmdW5jdGlvbiAoKSB7Ci0g
ICAgY1tuYW1lXSA9ICJmb28iOwotICB9IiBkaWQgbm90IHRocm93CitQQVNTIFNldHRpbmcgbm9u
LWFycmF5IGluZGV4IHdoaWxlIG5hbWVkIHByb3BlcnR5IGV4aXN0cyAobG9vc2UpCitQQVNTIFNl
dHRpbmcgbm9uLWFycmF5IGluZGV4IHdoaWxlIG5hbWVkIHByb3BlcnR5IGV4aXN0cyAoc3RyaWN0
KQogUEFTUyBTZXR0aW5nIG5vbi1hcnJheSBpbmRleCB3aGlsZSBuYW1lZCBwcm9wZXJ0eSBkb2Vz
bid0IGV4aXN0IChsb29zZSkKIFBBU1MgU2V0dGluZyBub24tYXJyYXkgaW5kZXggd2hpbGUgbmFt
ZWQgcHJvcGVydHkgZG9lc24ndCBleGlzdCAoc3RyaWN0KQogUEFTUyBTZXR0aW5nIGFycmF5IGlu
ZGV4IHdoaWxlIGluZGV4ZWQgcHJvcGVydHkgZXhpc3RzIChsb29zZSkKSW5kZXg6IExheW91dFRl
c3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvZG9tL2NvbGxlY3Rpb25zL0hUTUxD
b2xsZWN0aW9uLXN1cHBvcnRlZC1wcm9wZXJ0eS1uYW1lcy1leHBlY3RlZC50eHQKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9kb20vY29s
bGVjdGlvbnMvSFRNTENvbGxlY3Rpb24tc3VwcG9ydGVkLXByb3BlcnR5LW5hbWVzLWV4cGVjdGVk
LnR4dAkocmV2aXNpb24gMjcxOTc1KQorKysgTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1w
bGF0Zm9ybS10ZXN0cy9kb20vY29sbGVjdGlvbnMvSFRNTENvbGxlY3Rpb24tc3VwcG9ydGVkLXBy
b3BlcnR5LW5hbWVzLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMiw3ICsyLDkgQEAK
IFBBU1MgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMgb24gSFRNTENvbGxlY3Rpb24KIFBBU1Mg
T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMgb24gSFRNTENvbGxlY3Rpb24gd2l0aCBub24tSFRN
TCBuYW1lc3BhY2UKIFBBU1MgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMgb24gSFRNTENvbGxl
Y3Rpb24gd2l0aCBleHBhbmRvIG9iamVjdAotRkFJTCBUcnlpbmcgdG8gc2V0IGFuIGV4cGFuZG8g
dGhhdCB3b3VsZCBzaGFkb3cgYW4gYWxyZWFkeS1leGlzdGluZyBuYW1lZCBwcm9wZXJ0eSBhc3Nl
cnRfZXF1YWxzOiBleHBlY3RlZCAob2JqZWN0KSBFbGVtZW50IG5vZGUgPHNwYW4gaWQ9InNvbWUt
aWQiPjwvc3Bhbj4gYnV0IGdvdCAobnVtYmVyKSA1CitGQUlMIFRyeWluZyB0byBzZXQgYW4gZXhw
YW5kbyB0aGF0IHdvdWxkIHNoYWRvdyBhbiBhbHJlYWR5LWV4aXN0aW5nIG5hbWVkIHByb3BlcnR5
IGFzc2VydF90aHJvd3NfanM6IGZ1bmN0aW9uICJmdW5jdGlvbiAoKSB7CisgICAgT2JqZWN0LmRl
ZmluZVByb3BlcnR5KGVsZW1lbnRzLCAic29tZS1pZCIsIHsgdmFsdWU6IDUgfSk7CisgIH0iIGRp
ZCBub3QgdGhyb3cKIFBBU1MgVHJ5aW5nIHRvIHNldCBhbiBleHBhbmRvIHRoYXQgc2hhZG93cyBh
IG5hbWVkIHByb3BlcnR5IHRoYXQgZ2V0cyBhZGRlZCBsYXRlcgogUEFTUyBUcnlpbmcgdG8gc2V0
IGEgbm9uLWNvbmZpZ3VyYWJsZSBleHBhbmRvIHRoYXQgc2hhZG93cyBhIG5hbWVkIHByb3BlcnR5
IHRoYXQgZ2V0cyBhZGRlZCBsYXRlcgogCkluZGV4OiBMYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mv
d2ViLXBsYXRmb3JtLXRlc3RzL2RvbS9ldmVudHMvRXZlbnQtaXNUcnVzdGVkLmFueS1leHBlY3Rl
ZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9y
bS10ZXN0cy9kb20vZXZlbnRzL0V2ZW50LWlzVHJ1c3RlZC5hbnktZXhwZWN0ZWQudHh0CShyZXZp
c2lvbiAyNzE5NzUpCisrKyBMYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRl
c3RzL2RvbS9ldmVudHMvRXZlbnQtaXNUcnVzdGVkLmFueS1leHBlY3RlZC50eHQJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNyArMSwzIEBACiAKLUZBSUwgRXZlbnQtaXNUcnVzdGVkIGFzc2VydF9lcXVh
bHM6IGV4cGVjdGVkIGZ1bmN0aW9uICJmdW5jdGlvbiBpc1RydXN0ZWQoKSB7Ci0gICAgW25hdGl2
ZSBjb2RlXQotfSIgYnV0IGdvdCBmdW5jdGlvbiAiZnVuY3Rpb24gaXNUcnVzdGVkKCkgewotICAg
IFtuYXRpdmUgY29kZV0KLX0iCitQQVNTIEV2ZW50LWlzVHJ1c3RlZAogCkluZGV4OiBMYXlvdXRU
ZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2RvbS9ldmVudHMvRXZlbnQtaXNU
cnVzdGVkLmFueS53b3JrZXItZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvZG9tL2V2ZW50cy9FdmVudC1pc1RydXN0
ZWQuYW55Lndvcmtlci1leHBlY3RlZC50eHQJKHJldmlzaW9uIDI3MTk3NSkKKysrIExheW91dFRl
c3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvZG9tL2V2ZW50cy9FdmVudC1pc1Ry
dXN0ZWQuYW55Lndvcmtlci1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSwz
IEBACiAKLUZBSUwgRXZlbnQtaXNUcnVzdGVkIGFzc2VydF9lcXVhbHM6IGV4cGVjdGVkIGZ1bmN0
aW9uICJmdW5jdGlvbiBpc1RydXN0ZWQoKSB7Ci0gICAgW25hdGl2ZSBjb2RlXQotfSIgYnV0IGdv
dCBmdW5jdGlvbiAiZnVuY3Rpb24gaXNUcnVzdGVkKCkgewotICAgIFtuYXRpdmUgY29kZV0KLX0i
CitQQVNTIEV2ZW50LWlzVHJ1c3RlZAogCkluZGV4OiBMYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mv
d2ViLXBsYXRmb3JtLXRlc3RzL2h0bWwvYnJvd3NlcnMvaGlzdG9yeS90aGUtbG9jYXRpb24taW50
ZXJmYWNlL2RvY3VtZW50X2xvY2F0aW9uLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2h0bWwvYnJvd3NlcnMvaGlz
dG9yeS90aGUtbG9jYXRpb24taW50ZXJmYWNlL2RvY3VtZW50X2xvY2F0aW9uLWV4cGVjdGVkLnR4
dAkocmV2aXNpb24gMjcxOTc1KQorKysgTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0
Zm9ybS10ZXN0cy9odG1sL2Jyb3dzZXJzL2hpc3RvcnkvdGhlLWxvY2F0aW9uLWludGVyZmFjZS9k
b2N1bWVudF9sb2NhdGlvbi1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTEsMTQgKzEs
NiBAQAogCiBQQVNTIGRvY3VtZW50IG5vdCBpbiBhIGJyb3dzaW5nIGNvbnRleHQKIFBBU1MgZG9j
dW1lbnQubG9jYXRpb24gZXF1YWxzIHdpbmRvdy5sb2NhdGlvbgotRkFJTCBBdHRyaWJ1dGUgZ2V0
dGVyIGRlZHVwbGljYXRpb24gYXNzZXJ0X2VxdWFsczogZXhwZWN0ZWQgZnVuY3Rpb24gImZ1bmN0
aW9uIGxvY2F0aW9uKCkgewotICAgIFtuYXRpdmUgY29kZV0KLX0iIGJ1dCBnb3QgZnVuY3Rpb24g
ImZ1bmN0aW9uIGxvY2F0aW9uKCkgewotICAgIFtuYXRpdmUgY29kZV0KLX0iCi1GQUlMIEF0dHJp
YnV0ZSBzZXR0ZXIgZGVkdXBsaWNhdGlvbiBhc3NlcnRfZXF1YWxzOiBleHBlY3RlZCBmdW5jdGlv
biAiZnVuY3Rpb24gbG9jYXRpb24oKSB7Ci0gICAgW25hdGl2ZSBjb2RlXQotfSIgYnV0IGdvdCBm
dW5jdGlvbiAiZnVuY3Rpb24gbG9jYXRpb24oKSB7Ci0gICAgW25hdGl2ZSBjb2RlXQotfSIKK1BB
U1MgQXR0cmlidXRlIGdldHRlciBkZWR1cGxpY2F0aW9uCitQQVNTIEF0dHJpYnV0ZSBzZXR0ZXIg
ZGVkdXBsaWNhdGlvbgogCkluZGV4OiBMYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRm
b3JtLXRlc3RzL2h0bWwvYnJvd3NlcnMvd2luZG93cy9lbWJlZGRlZC1vcGVuZXItZXhwZWN0ZWQu
dHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0t
dGVzdHMvaHRtbC9icm93c2Vycy93aW5kb3dzL2VtYmVkZGVkLW9wZW5lci1leHBlY3RlZC50eHQJ
KHJldmlzaW9uIDI3MTk3NSkKKysrIExheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZv
cm0tdGVzdHMvaHRtbC9icm93c2Vycy93aW5kb3dzL2VtYmVkZGVkLW9wZW5lci1leHBlY3RlZC50
eHQJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwzIEBACiAKLUZBSUwgb3BlbmVyIGFuZCBlbWJl
ZGRlZCBkb2N1bWVudHM7IHVzaW5nIHdpbmRvdy5vcGVuKCkgYXNzZXJ0X2VxdWFsczogb3BlbmVy
IGJlZm9yZSBzZXR0aW5nIGl0IHRvIG51bGwgdmlhIGRpcmVjdGx5IGludm9raW5nIHRoZSBnZXR0
ZXIgZXhwZWN0ZWQgb2JqZWN0ICJbb2JqZWN0IFdpbmRvd10iIGJ1dCBnb3QgbnVsbAorUEFTUyBv
cGVuZXIgYW5kIGVtYmVkZGVkIGRvY3VtZW50czsgdXNpbmcgd2luZG93Lm9wZW4oKQogCkluZGV4
OiBMYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2h0bWwvYnJvd3Nl
cnMvd2luZG93cy9hdXhpbGlhcnktYnJvd3NpbmctY29udGV4dHMvb3BlbmVyLXNldHRlci53aW5k
b3ctZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2ltcG9ydGVkL3czYy93
ZWItcGxhdGZvcm0tdGVzdHMvaHRtbC9icm93c2Vycy93aW5kb3dzL2F1eGlsaWFyeS1icm93c2lu
Zy1jb250ZXh0cy9vcGVuZXItc2V0dGVyLndpbmRvdy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDI3
MTk3NSkKKysrIExheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvaHRt
bC9icm93c2Vycy93aW5kb3dzL2F1eGlsaWFyeS1icm93c2luZy1jb250ZXh0cy9vcGVuZXItc2V0
dGVyLndpbmRvdy1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTEsOSArMSw5IEBACiAK
LUZBSUwgU2V0dGluZyB3aW5kb3cub3BlbmVyIHRvIHVuZGVmaW5lZCBhc3NlcnRfZXF1YWxzOiBl
eHBlY3RlZCAoc3RyaW5nKSAieCIgYnV0IGdvdCAodW5kZWZpbmVkKSB1bmRlZmluZWQKLUZBSUwg
U2V0dGluZyB3aW5kb3cub3BlbmVyIHRvIDQyIGFzc2VydF9lcXVhbHM6IGV4cGVjdGVkIChzdHJp
bmcpICJ4IiBidXQgZ290IChudW1iZXIpIDQyCi1GQUlMIFNldHRpbmcgd2luZG93Lm9wZW5lciB0
byBmdW5jdGlvbiAoKSB7IHJldHVybiAiaGkiIH0gYXNzZXJ0X2VxdWFsczogZXhwZWN0ZWQgKHN0
cmluZykgIngiIGJ1dCBnb3QgKGZ1bmN0aW9uKSBmdW5jdGlvbiAiZnVuY3Rpb24gKCkgeyByZXR1
cm4gImhpIiB9IgotRkFJTCBTZXR0aW5nIHdpbmRvdy5vcGVuZXIgdG8gaGkgYXNzZXJ0X2VxdWFs
czogZXhwZWN0ZWQgIngiIGJ1dCBnb3QgImhpIgotRkFJTCBTZXR0aW5nIHdpbmRvdy5vcGVuZXIg
dG8gW29iamVjdCBPYmplY3RdIGFzc2VydF9lcXVhbHM6IGV4cGVjdGVkIChzdHJpbmcpICJ4IiBi
dXQgZ290IChvYmplY3QpIG9iamVjdCAiW29iamVjdCBPYmplY3RdIgotRkFJTCBTZXR0aW5nIHdp
bmRvdy5vcGVuZXIgdG8gIGFzc2VydF9lcXVhbHM6IGV4cGVjdGVkIChzdHJpbmcpICJ4IiBidXQg
Z290IChvYmplY3QpIFtdCi1GQUlMIFNldHRpbmcgd2luZG93Lm9wZW5lciB0byBTeW1ib2woKSBh
c3NlcnRfZXF1YWxzOiBleHBlY3RlZCAoc3RyaW5nKSAieCIgYnV0IGdvdCAoc3ltYm9sKSBzeW1i
b2wgIlN5bWJvbCgpIgorUEFTUyBTZXR0aW5nIHdpbmRvdy5vcGVuZXIgdG8gdW5kZWZpbmVkCitQ
QVNTIFNldHRpbmcgd2luZG93Lm9wZW5lciB0byA0MgorUEFTUyBTZXR0aW5nIHdpbmRvdy5vcGVu
ZXIgdG8gZnVuY3Rpb24gKCkgeyByZXR1cm4gImhpIiB9CitQQVNTIFNldHRpbmcgd2luZG93Lm9w
ZW5lciB0byBoaQorUEFTUyBTZXR0aW5nIHdpbmRvdy5vcGVuZXIgdG8gW29iamVjdCBPYmplY3Rd
CitQQVNTIFNldHRpbmcgd2luZG93Lm9wZW5lciB0bworUEFTUyBTZXR0aW5nIHdpbmRvdy5vcGVu
ZXIgdG8gU3ltYm9sKCkKIApJbmRleDogTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0
Zm9ybS10ZXN0cy9odG1sL3NlbWFudGljcy9mb3Jtcy90aGUtZm9ybS1lbGVtZW50L2Zvcm0tbmFt
ZWRpdGVtLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9pbXBvcnRlZC93
M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2h0bWwvc2VtYW50aWNzL2Zvcm1zL3RoZS1mb3JtLWVsZW1l
bnQvZm9ybS1uYW1lZGl0ZW0tZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAyNzE5NzUpCisrKyBMYXlv
dXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2h0bWwvc2VtYW50aWNzL2Zv
cm1zL3RoZS1mb3JtLWVsZW1lbnQvZm9ybS1uYW1lZGl0ZW0tZXhwZWN0ZWQudHh0CSh3b3JraW5n
IGNvcHkpCkBAIC0xMiw3ICsxMiw5IEBAIFBBU1MgTmFtZWQgaXRlbXMgb3V0c2lkZSB0aGUgZm9y
bSBzaG91bGQKIFBBU1MgVGhlIGZvcm0gYXR0cmlidXRlIHNob3VsZCBiZSB0YWtlbiBpbnRvIGFj
Y291bnQgZm9yIG5hbWVkIGdldHRlcnMgKHNpbmdsZSBlbGVtZW50KQogUEFTUyBUaGUgZm9ybSBh
dHRyaWJ1dGUgc2hvdWxkIGJlIHRha2VuIGludG8gYWNjb3VudCBmb3IgbmFtZWQgZ2V0dGVycyAo
bXVsdGlwbGUgZWxlbWVudHMpCiBQQVNTIElucHV0IHNob3VsZCBvbmx5IGJlIGEgbmFtZWQgcHJv
cGVydHkgb24gdGhlIGlubmVybW9zdCBmb3JtIHRoYXQgY29udGFpbnMgaXQKLUZBSUwgVHJ5aW5n
IHRvIHNldCBhbiBleHBhbmRvIHRoYXQgd291bGQgc2hhZG93IGFuIGFscmVhZHktZXhpc3Rpbmcg
bmFtZWQgcHJvcGVydHkgYXNzZXJ0X2VxdWFsczogZXhwZWN0ZWQgKG9iamVjdCkgRWxlbWVudCBu
b2RlIDxidXR0b24gbmFtZT0ibDEiPjwvYnV0dG9uPiBidXQgZ290IChudW1iZXIpIDUKK0ZBSUwg
VHJ5aW5nIHRvIHNldCBhbiBleHBhbmRvIHRoYXQgd291bGQgc2hhZG93IGFuIGFscmVhZHktZXhp
c3RpbmcgbmFtZWQgcHJvcGVydHkgYXNzZXJ0X3Rocm93c19qczogZnVuY3Rpb24gImZ1bmN0aW9u
ICgpIHsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZm9ybSwgImwxIiwgeyB2YWx1ZTogNSB9
KTsKKyAgfSIgZGlkIG5vdCB0aHJvdwogUEFTUyBUcnlpbmcgdG8gc2V0IGFuIGV4cGFuZG8gdGhh
dCBzaGFkb3dzIGEgbmFtZWQgcHJvcGVydHkgdGhhdCBnZXRzIGFkZGVkIGxhdGVyCiBQQVNTIFRy
eWluZyB0byBzZXQgYSBub24tY29uZmlndXJhYmxlIGV4cGFuZG8gdGhhdCBzaGFkb3dzIGEgbmFt
ZWQgcHJvcGVydHkgdGhhdCBnZXRzIGFkZGVkIGxhdGVyCiBQQVNTIFBhc3QgbmFtZXMgbWFwIHNo
b3VsZCB3b3JrIGNvcnJlY3RseQpJbmRleDogTGF5b3V0VGVzdHMvanMvaW5zdGFuY2UtcHJvcGVy
dHktZ2V0dGVyLW90aGVyLWluc3RhbmNlLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9qcy9pbnN0YW5jZS1wcm9wZXJ0eS1nZXR0ZXItb3RoZXItaW5zdGFuY2UtZXhwZWN0
ZWQudHh0CShyZXZpc2lvbiAyNzE5NzUpCisrKyBMYXlvdXRUZXN0cy9qcy9pbnN0YW5jZS1wcm9w
ZXJ0eS1nZXR0ZXItb3RoZXItaW5zdGFuY2UtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBA
IC0zLDkgKzMsNyBAQCBUZXN0cyB0aGF0IGNhbGxpbmcgYW4gaW5zdGFuY2UgcHJvcGVydHkgCiBP
biBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xs
b3dlZCBieSAiVEVTVCBDT01QTEVURSIuCiAKIAotUEFTUyBsb2NhdGlvbkdldHRlciBpcyBhbiBp
bnN0YW5jZSBvZiBmdW5jdGlvbiBGdW5jdGlvbigpIHsKLSAgICBbbmF0aXZlIGNvZGVdCi19CitQ
QVNTIGxvY2F0aW9uR2V0dGVyIGluc3RhbmNlb2Ygb3RoZXJXaW5kb3cuRnVuY3Rpb24gaXMgdHJ1
ZQogUEFTUyBsb2NhdGlvbkdldHRlci5jYWxsKG90aGVyV2luZG93LmRvY3VtZW50KS50b1N0cmlu
ZygpIGlzICJhYm91dDpibGFuayIKIFBBU1MgbG9jYXRpb25HZXR0ZXIuY2FsbCh3aW5kb3cuZG9j
dW1lbnQpID09PSB3aW5kb3cuZG9jdW1lbnQubG9jYXRpb24gaXMgdHJ1ZQogUEFTUyBzdWNjZXNz
ZnVsbHlQYXJzZWQgaXMgdHJ1ZQpJbmRleDogTGF5b3V0VGVzdHMvanMvaW5zdGFuY2UtcHJvcGVy
dHktZ2V0dGVyLW90aGVyLWluc3RhbmNlLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
anMvaW5zdGFuY2UtcHJvcGVydHktZ2V0dGVyLW90aGVyLWluc3RhbmNlLmh0bWwJKHJldmlzaW9u
IDI3MTk3NSkKKysrIExheW91dFRlc3RzL2pzL2luc3RhbmNlLXByb3BlcnR5LWdldHRlci1vdGhl
ci1pbnN0YW5jZS5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0xMiw3ICsxMiw3IEBAIGZ1bmN0aW9u
IHJ1blRlc3QoKQogewogICAgIG90aGVyV2luZG93ID0gd2luZG93Lm9wZW4oImFib3V0OmJsYW5r
Iik7CiAgICAgICAgIGxvY2F0aW9uR2V0dGVyID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3Jp
cHRvcihvdGhlcldpbmRvdy5kb2N1bWVudCwgImxvY2F0aW9uIikuZ2V0OwotICAgICAgICBzaG91
bGRCZVR5cGUoImxvY2F0aW9uR2V0dGVyIiwgRnVuY3Rpb24pOworICAgICAgICBzaG91bGRCZVRy
dWUoImxvY2F0aW9uR2V0dGVyIGluc3RhbmNlb2Ygb3RoZXJXaW5kb3cuRnVuY3Rpb24iKTsKICAg
ICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJsb2NhdGlvbkdldHRlci5jYWxsKG90aGVyV2lu
ZG93LmRvY3VtZW50KS50b1N0cmluZygpIiwgImFib3V0OmJsYW5rIik7CiAgICAgICAgIC8vIFNo
b3VsZCByZXR1cm4gdGhlIGN1cnJlbnQgZG9jdW1lbnQncyBsb2NhdGlvbi4KICAgICAgICAgc2hv
dWxkQmVUcnVlKCJsb2NhdGlvbkdldHRlci5jYWxsKHdpbmRvdy5kb2N1bWVudCkgPT09IHdpbmRv
dy5kb2N1bWVudC5sb2NhdGlvbiIpOwpJbmRleDogTGF5b3V0VGVzdHMvanMvZG9tL3JlZmxlY3Qt
c2V0LW9udG8tZG9tLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9k
b20vcmVmbGVjdC1zZXQtb250by1kb20tZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAyNzE5NzUpCisr
KyBMYXlvdXRUZXN0cy9qcy9kb20vcmVmbGVjdC1zZXQtb250by1kb20tZXhwZWN0ZWQudHh0CSh3
b3JraW5nIGNvcHkpCkBAIC04Myw5ICs4Myw5IEBAIFBBU1MgUmVmbGVjdC5kZWZpbmVQcm9wZXJ0
eShucG9iamVjdCwgMCwKIH0pIGlzIHRydWUKIFBBU1MgUmVmbGVjdC5zZXQobnBvYmplY3QsIDAs
ICJIZWxsbyIpIGlzIGZhbHNlCiBQQVNTIFJlZmxlY3QuZ2V0KG5wb2JqZWN0LCAwKSBpcyAiU3dl
ZXQiCi1QQVNTIFJlZmxlY3Quc2V0KG5wb2JqZWN0LCAwLCAiT0siLCByZWNlaXZlcikgaXMgZmFs
c2UKK1BBU1MgUmVmbGVjdC5zZXQobnBvYmplY3QsIDAsICJPSyIsIHJlY2VpdmVyKSBpcyB0cnVl
CiBQQVNTIFJlZmxlY3QuZ2V0KG5wb2JqZWN0LCAwKSBpcyAiU3dlZXQiCi1QQVNTIFJlZmxlY3Qu
Z2V0KHJlY2VpdmVyLCAwKSBpcyB1bmRlZmluZWQKK1BBU1MgUmVmbGVjdC5nZXQocmVjZWl2ZXIs
IDApIGlzICJPSyIKIERPTVN0cmluZ01hcAogUEFTUyBSZWZsZWN0LmdldChkb2N1bWVudC5ib2R5
LmRhdGFzZXQsICJjb2NvYSIpIGlzICJjYXBwdWNjaW5vIgogUEFTUyBSZWZsZWN0LnNldChkb2N1
bWVudC5ib2R5LmRhdGFzZXQsICJjb2NvYSIsICJzd2VldCIpIGlzIHRydWUKQEAgLTkzLDEzICs5
MywxMyBAQCBQQVNTIFJlZmxlY3QuZ2V0KGRvY3VtZW50LmJvZHkuZGF0YXNldCwgCiBQQVNTIFJl
ZmxlY3Quc2V0KGRvY3VtZW50LmJvZHkuZGF0YXNldCwgImNvY29hLWNhcHB1Y2Npbm8iLCAic3dl
ZXQiKSB0aHJldyBleGNlcHRpb24gU3ludGF4RXJyb3I6IFRoZSBzdHJpbmcgZGlkIG5vdCBtYXRj
aCB0aGUgZXhwZWN0ZWQgcGF0dGVybi4uCiBQQVNTIFJlZmxlY3Quc2V0KGRvY3VtZW50LmJvZHku
ZGF0YXNldCwgMCwgInN3ZWV0IikgaXMgdHJ1ZQogUEFTUyBSZWZsZWN0LmdldChkb2N1bWVudC5i
b2R5LmRhdGFzZXQsIDApIGlzICJzd2VldCIKLURPTVN0cmluZ01hcCBpZ25vcmVzIHRoZSByZWNl
aXZlci4gVGhlc2UgcHV0RGVsZWdhdGUgb25seSB3b3JrIHdpdGggOjpwdXQgKG5vdCA6OmRlZmlu
ZU93blByb3BlcnR5KS4gU28gdGhleSBiZWhhdmUgYXMgdGhlIHNwZWNpYWwgc2V0dGVyLCB3ZSBz
aG91bGQgbm90IGZhbGxiYWNrIHRvIHRoZSBPcmRpbmFyeVNldC4KK0RPTVN0cmluZ01hcCBmYWxs
cyBiYWNrIHRvIE9yZGluYXJ5U2V0IGlmIHJlY2VpdmVyIGlzIGFsdGVyZWQuCiBQQVNTIFJlZmxl
Y3Quc2V0KGRvY3VtZW50LmJvZHkuZGF0YXNldCwgImNvY29hIiwgIm9rIiwgcmVjZWl2ZXIpIGlz
IHRydWUKLVBBU1MgUmVmbGVjdC5nZXQoZG9jdW1lbnQuYm9keS5kYXRhc2V0LCAiY29jb2EiKSBp
cyAib2siCi1QQVNTIFJlZmxlY3QuZ2V0KHJlY2VpdmVyLCAiY29jb2EiKSBpcyB1bmRlZmluZWQK
K1BBU1MgUmVmbGVjdC5nZXQoZG9jdW1lbnQuYm9keS5kYXRhc2V0LCAiY29jb2EiKSBpcyAic3dl
ZXQiCitQQVNTIFJlZmxlY3QuZ2V0KHJlY2VpdmVyLCAiY29jb2EiKSBpcyAib2siCiBQQVNTIFJl
ZmxlY3Quc2V0KGRvY3VtZW50LmJvZHkuZGF0YXNldCwgMCwgIm9rIiwgcmVjZWl2ZXIpIGlzIHRy
dWUKLVBBU1MgUmVmbGVjdC5nZXQoZG9jdW1lbnQuYm9keS5kYXRhc2V0LCAwKSBpcyAib2siCi1Q
QVNTIFJlZmxlY3QuZ2V0KHJlY2VpdmVyLCAwKSBpcyB1bmRlZmluZWQKK1BBU1MgUmVmbGVjdC5n
ZXQoZG9jdW1lbnQuYm9keS5kYXRhc2V0LCAwKSBpcyAic3dlZXQiCitQQVNTIFJlZmxlY3QuZ2V0
KHJlY2VpdmVyLCAwKSBpcyAib2siCiBDdXN0b21JbmRleGVkU2V0dGVyCiBQQVNTIFJlZmxlY3Qu
Z2V0KHNlbGVjdCwgMCkudmFsdWUgaXMgImNvY29hIgogUEFTUyBSZWZsZWN0LmdldChzZWxlY3Qs
ICJsZW5ndGgiKSBpcyAzCkBAIC0xMTEsMTAgKzExMSwxMCBAQCBQQVNTIFJlZmxlY3QuZ2V0KHNl
bGVjdCwgImxlbmd0aCIpIGlzIDQyCiBQQVNTIFJlZmxlY3Quc2V0KHNlbGVjdCwgNDQsIG9wdGlv
bjIpIGlzIHRydWUKIFBBU1MgUmVmbGVjdC5nZXQoc2VsZWN0LCA0NCkudmFsdWUgaXMgImtpbGlt
YW5qYXJvIgogUEFTUyBSZWZsZWN0LnNldChzZWxlY3QsIDIwLCAiS2lsaW1hbmphcm8iKSB0aHJl
dyBleGNlcHRpb24gVHlwZUVycm9yOiBUeXBlIGVycm9yLgotQ3VzdG9tSW5kZXhlZFNldHRlciBp
Z25vcmVzIHRoZSByZWNlaXZlci4gVGhlc2UgbWV0aG9kcyBvbmx5IHdvcmsgd2l0aCA6OnB1dCAo
bm90IDo6ZGVmaW5lT3duUHJvcGVydHkpLiBTbyB0aGV5IGJlaGF2ZSBhcyB0aGUgc3BlY2lhbCBz
ZXR0ZXIsIHdlIHNob3VsZCBub3QgZmFsbGJhY2sgdG8gdGhlIE9yZGluYXJ5U2V0LgorQ3VzdG9t
SW5kZXhlZFNldHRlciBmYWxscyBiYWNrIHRvIE9yZGluYXJ5U2V0IGlmIHJlY2VpdmVyIGlzIGFs
dGVyZWQuCiBQQVNTIFJlZmxlY3Quc2V0KHNlbGVjdCwgMCwgb3B0aW9uMywgcmVjZWl2ZXIpIGlz
IHRydWUKLVBBU1MgUmVmbGVjdC5nZXQocmVjZWl2ZXIsIDApIGlzIHVuZGVmaW5lZAotUEFTUyBS
ZWZsZWN0LmdldChzZWxlY3QsIDApIGlzIG9wdGlvbjMKK1BBU1MgUmVmbGVjdC5nZXQocmVjZWl2
ZXIsIDApIGlzIG9wdGlvbjMKK1BBU1MgUmVmbGVjdC5nZXQoc2VsZWN0LCAwKSBpcyBzZWxlY3Qu
Y2hpbGRyZW5bMF0KIFBBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKIAogVEVTVCBDT01Q
TEVURQpJbmRleDogTGF5b3V0VGVzdHMvanMvZG9tL3NjcmlwdC10ZXN0cy9yZWZsZWN0LXNldC1v
bnRvLWRvbS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9kb20vc2NyaXB0LXRlc3Rz
L3JlZmxlY3Qtc2V0LW9udG8tZG9tLmpzCShyZXZpc2lvbiAyNzE5NzUpCisrKyBMYXlvdXRUZXN0
cy9qcy9kb20vc2NyaXB0LXRlc3RzL3JlZmxlY3Qtc2V0LW9udG8tZG9tLmpzCSh3b3JraW5nIGNv
cHkpCkBAIC0xMDMsOSArMTAzLDkgQEAgc2hvdWxkQmUoYFJlZmxlY3QuZGVmaW5lUHJvcGVydHko
bnBvYmplYwogc2hvdWxkQmUoYFJlZmxlY3Quc2V0KG5wb2JqZWN0LCAwLCAiSGVsbG8iKWAsIGBm
YWxzZWApOwogc2hvdWxkQmUoYFJlZmxlY3QuZ2V0KG5wb2JqZWN0LCAwKWAsIGAiU3dlZXQiYCk7
CiB2YXIgcmVjZWl2ZXIgPSB7fTsKLXNob3VsZEJlKGBSZWZsZWN0LnNldChucG9iamVjdCwgMCwg
Ik9LIiwgcmVjZWl2ZXIpYCwgYGZhbHNlYCk7CitzaG91bGRCZShgUmVmbGVjdC5zZXQobnBvYmpl
Y3QsIDAsICJPSyIsIHJlY2VpdmVyKWAsIGB0cnVlYCk7CiBzaG91bGRCZShgUmVmbGVjdC5nZXQo
bnBvYmplY3QsIDApYCwgYCJTd2VldCJgKTsKLXNob3VsZEJlKGBSZWZsZWN0LmdldChyZWNlaXZl
ciwgMClgLCBgdW5kZWZpbmVkYCk7CitzaG91bGRCZShgUmVmbGVjdC5nZXQocmVjZWl2ZXIsIDAp
YCwgYCJPSyJgKTsKIAogZGVidWcoIkRPTVN0cmluZ01hcCIpOwogZG9jdW1lbnQuYm9keS5zZXRB
dHRyaWJ1dGUoImRhdGEtY29jb2EiLCAiY2FwcHVjY2lubyIpOwpAQCAtMTE2LDE1ICsxMTYsMTUg
QEAgc2hvdWxkVGhyb3coYFJlZmxlY3Quc2V0KGRvY3VtZW50LmJvZHkuZAogc2hvdWxkQmUoYFJl
ZmxlY3Quc2V0KGRvY3VtZW50LmJvZHkuZGF0YXNldCwgMCwgInN3ZWV0IilgLCBgdHJ1ZWApOwog
c2hvdWxkQmUoYFJlZmxlY3QuZ2V0KGRvY3VtZW50LmJvZHkuZGF0YXNldCwgMClgLCBgInN3ZWV0
ImApOwogCi1kZWJ1ZygiRE9NU3RyaW5nTWFwIGlnbm9yZXMgdGhlIHJlY2VpdmVyLiBUaGVzZSBw
dXREZWxlZ2F0ZSBvbmx5IHdvcmsgd2l0aCA6OnB1dCAobm90IDo6ZGVmaW5lT3duUHJvcGVydHkp
LiBTbyB0aGV5IGJlaGF2ZSBhcyB0aGUgc3BlY2lhbCBzZXR0ZXIsIHdlIHNob3VsZCBub3QgZmFs
bGJhY2sgdG8gdGhlIE9yZGluYXJ5U2V0LiIpOworZGVidWcoIkRPTVN0cmluZ01hcCBmYWxscyBi
YWNrIHRvIE9yZGluYXJ5U2V0IGlmIHJlY2VpdmVyIGlzIGFsdGVyZWQuIik7CiB2YXIgcmVjZWl2
ZXIgPSB7fTsKIHNob3VsZEJlKGBSZWZsZWN0LnNldChkb2N1bWVudC5ib2R5LmRhdGFzZXQsICJj
b2NvYSIsICJvayIsIHJlY2VpdmVyKWAsIGB0cnVlYCk7Ci1zaG91bGRCZShgUmVmbGVjdC5nZXQo
ZG9jdW1lbnQuYm9keS5kYXRhc2V0LCAiY29jb2EiKWAsIGAib2siYCk7Ci1zaG91bGRCZShgUmVm
bGVjdC5nZXQocmVjZWl2ZXIsICJjb2NvYSIpYCwgYHVuZGVmaW5lZGApOworc2hvdWxkQmUoYFJl
ZmxlY3QuZ2V0KGRvY3VtZW50LmJvZHkuZGF0YXNldCwgImNvY29hIilgLCBgInN3ZWV0ImApOwor
c2hvdWxkQmUoYFJlZmxlY3QuZ2V0KHJlY2VpdmVyLCAiY29jb2EiKWAsIGAib2siYCk7CiB2YXIg
cmVjZWl2ZXIgPSB7fTsKIHNob3VsZEJlKGBSZWZsZWN0LnNldChkb2N1bWVudC5ib2R5LmRhdGFz
ZXQsIDAsICJvayIsIHJlY2VpdmVyKWAsIGB0cnVlYCk7Ci1zaG91bGRCZShgUmVmbGVjdC5nZXQo
ZG9jdW1lbnQuYm9keS5kYXRhc2V0LCAwKWAsIGAib2siYCk7Ci1zaG91bGRCZShgUmVmbGVjdC5n
ZXQocmVjZWl2ZXIsIDApYCwgYHVuZGVmaW5lZGApOworc2hvdWxkQmUoYFJlZmxlY3QuZ2V0KGRv
Y3VtZW50LmJvZHkuZGF0YXNldCwgMClgLCBgInN3ZWV0ImApOworc2hvdWxkQmUoYFJlZmxlY3Qu
Z2V0KHJlY2VpdmVyLCAwKWAsIGAib2siYCk7CiAKIGRlYnVnKCJDdXN0b21JbmRleGVkU2V0dGVy
Iik7CiB2YXIgc2VsZWN0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRlc3RTZWxlY3QiKTsK
QEAgLTE0NiwxMSArMTQ2LDExIEBAIHNob3VsZEJlKGBSZWZsZWN0LnNldChzZWxlY3QsIDQ0LCBv
cHRpb24KIHNob3VsZEJlKGBSZWZsZWN0LmdldChzZWxlY3QsIDQ0KS52YWx1ZWAsIGAia2lsaW1h
bmphcm8iYCk7CiBzaG91bGRUaHJvdyhgUmVmbGVjdC5zZXQoc2VsZWN0LCAyMCwgIktpbGltYW5q
YXJvIilgKTsKIAotZGVidWcoIkN1c3RvbUluZGV4ZWRTZXR0ZXIgaWdub3JlcyB0aGUgcmVjZWl2
ZXIuIFRoZXNlIG1ldGhvZHMgb25seSB3b3JrIHdpdGggOjpwdXQgKG5vdCA6OmRlZmluZU93blBy
b3BlcnR5KS4gU28gdGhleSBiZWhhdmUgYXMgdGhlIHNwZWNpYWwgc2V0dGVyLCB3ZSBzaG91bGQg
bm90IGZhbGxiYWNrIHRvIHRoZSBPcmRpbmFyeVNldC4iKTsKK2RlYnVnKCJDdXN0b21JbmRleGVk
U2V0dGVyIGZhbGxzIGJhY2sgdG8gT3JkaW5hcnlTZXQgaWYgcmVjZWl2ZXIgaXMgYWx0ZXJlZC4i
KTsKIHZhciBvcHRpb24zID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgib3B0aW9uIik7CiBvcHRp
b24zLnZhbHVlID0gInJhYmJpdCI7CiBvcHRpb24zLnRleHRDb250ZW50ID0gIlJhYmJpdCI7CiB2
YXIgcmVjZWl2ZXIgPSB7fTsKIHNob3VsZEJlKGBSZWZsZWN0LnNldChzZWxlY3QsIDAsIG9wdGlv
bjMsIHJlY2VpdmVyKWAsIGB0cnVlYCk7Ci1zaG91bGRCZShgUmVmbGVjdC5nZXQocmVjZWl2ZXIs
IDApYCwgYHVuZGVmaW5lZGApOwotc2hvdWxkQmUoYFJlZmxlY3QuZ2V0KHNlbGVjdCwgMClgLCBg
b3B0aW9uM2ApOworc2hvdWxkQmUoYFJlZmxlY3QuZ2V0KHJlY2VpdmVyLCAwKWAsIGBvcHRpb24z
YCk7CitzaG91bGRCZShgUmVmbGVjdC5nZXQoc2VsZWN0LCAwKWAsIGBzZWxlY3QuY2hpbGRyZW5b
MF1gKTsK
</data>
<flag name="commit-queue"
          id="436675"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>418650</attachid>
            <date>2021-01-28 09:18:45 -0800</date>
            <delta_ts>2021-04-09 19:16:09 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>bug-217916-20210128191842.patch</filename>
            <type>text/plain</type>
            <size>202782</size>
            <attacher name="Alexey Shvayka">ashvayka</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyNzIwMTQpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDM5IEBACisyMDIxLTAxLTI4ICBBbGV4ZXkgU2h2YXlrYSAgPHNodmFpa2FsZXNo
QGdtYWlsLmNvbT4KKworICAgICAgICBJbnRyb2R1Y2UgT3ZlcnJpZGVzUHV0W0J5SW5kZXhdIHR5
cGUgaW5mbyBmbGFncworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjE3OTE2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiBtaWNyb2JlbmNobWFya3MvcHV0LXNsb3ctbm8tY2FjaGUtYXJyYXkuanM6IEFkZGVk
LgorICAgICAgICAqIG1pY3JvYmVuY2htYXJrcy9wdXQtc2xvdy1uby1jYWNoZS1mdW5jdGlvbi5q
czogQWRkZWQuCisgICAgICAgIChmbik6CisgICAgICAgICogbWljcm9iZW5jaG1hcmtzL3B1dC1z
bG93LW5vLWNhY2hlLWpzLXByb3h5LmpzOiBBZGRlZC4KKyAgICAgICAgKHByb3h5LnZtLmNyZWF0
ZVByb3h5LnNldCBmb28pOgorICAgICAgICAqIG1pY3JvYmVuY2htYXJrcy9wdXQtc2xvdy1uby1j
YWNoZS1sb25nLXByb3RvdHlwZS1jaGFpbi5qczogQWRkZWQuCisgICAgICAgIChiYXNlLnNldCBm
b28pOgorICAgICAgICAqIG1pY3JvYmVuY2htYXJrcy9wdXQtc2xvdy1uby1jYWNoZS5qczogQWRk
ZWQuCisgICAgICAgIChiYXNlLnNldCBmb28pOgorICAgICAgICAqIG1pY3JvYmVuY2htYXJrcy9y
ZWZsZWN0LXNldC13aXRoLXJlY2VpdmVyLmpzOiBBZGRlZC4KKyAgICAgICAgKHRhcmdldC5uZXcp
OgorICAgICAgICAqIHN0cmVzcy9jdXN0b20tZ2V0LXNldC1wcm90by1jaGFpbi1wdXQuanM6Cisg
ICAgICAgIChnZXRPYmplY3RzKToKKyAgICAgICAgKGxldC5iYXNlLm9mLmdldEJhc2VzKToKKyAg
ICAgICAgKiBzdHJlc3MvbW9kdWxlLW5hbWVzcGFjZS1hY2Nlc3Mtc2V0LWZhaWxzLmpzOiBBZGRl
ZC4KKyAgICAgICAgKGFzc2VydCk6CisgICAgICAgICh0ZXN0RGlyZWN0U2V0KToKKyAgICAgICAg
KiBzdHJlc3MvcmVmbGVjdC1zZXQuanM6CisgICAgICAgIChzZXQgZ2V0IFVpbnQ4QXJyYXkpOgor
ICAgICAgICAqIHN0cmVzcy9yZWdyZXNzLTIxNzkxNi5qczogQWRkZWQuCisgICAgICAgIChzaG91
bGRCZSk6CisgICAgICAgIChzaG91bGRUaHJvdyk6CisgICAgICAgIChPYmplY3QucHJldmVudEV4
dGVuc2lvbnMpOgorICAgICAgICAodGVzdFN0YXRpY0N1c3RvbUFjY2Vzc29yKToKKyAgICAgICAg
KHRlc3RTdGF0aWNDdXN0b21WYWx1ZSk6CisgICAgICAgICogc3RyZXNzL3R5cGVkLWFycmF5LWNh
bm9uaWNhbC1udW1lcmljLWluZGV4LXN0cmluZy1zZXQuanM6IEFkZGVkLgorICAgICAgICAoYXNz
ZXJ0KToKKyAgICAgICAgKGNvbnN0LlR5cGVkQXJyYXkub2YuVHlwZWRBcnJheXMuY29uc3Qua2V5
Lm9mLmNhbm9uaWNhbE51bWVyaWNJbmRleFN0cmluZ3Muc2V0IHRocm93KToKKwogMjAyMS0wMS0y
NyAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29tPgogCiAgICAgICAgIFtKU0NdIFVw
ZGF0ZSB0ZXN0MjYyCkluZGV4OiBKU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9wdXQtc2xvdy1uby1j
YWNoZS1hcnJheS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9wdXQt
c2xvdy1uby1jYWNoZS1hcnJheS5qcwkobm9uZXhpc3RlbnQpCisrKyBKU1Rlc3RzL21pY3JvYmVu
Y2htYXJrcy9wdXQtc2xvdy1uby1jYWNoZS1hcnJheS5qcwkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDYgQEAKKyhmdW5jdGlvbigpIHsKKyAgICB2YXIgYXJyYXkgPSBbXTsKKworICAgIGZvciAo
dmFyIGogPSAwOyBqIDwgMWU1OyBqKyspCisgICAgICAgIGFycmF5WyJmb28iICsgal0gPSBqOwor
fSkoKTsKSW5kZXg6IEpTVGVzdHMvbWljcm9iZW5jaG1hcmtzL3B1dC1zbG93LW5vLWNhY2hlLWZ1
bmN0aW9uLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvbWljcm9iZW5jaG1hcmtzL3B1dC1zbG93
LW5vLWNhY2hlLWZ1bmN0aW9uLmpzCShub25leGlzdGVudCkKKysrIEpTVGVzdHMvbWljcm9iZW5j
aG1hcmtzL3B1dC1zbG93LW5vLWNhY2hlLWZ1bmN0aW9uLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNiBAQAorKGZ1bmN0aW9uKCkgeworICAgIHZhciBmbiA9IGZ1bmN0aW9uKCkge307CisK
KyAgICBmb3IgKHZhciBqID0gMDsgaiA8IDFlNTsgaisrKQorICAgICAgICBmblsiZm9vIiArIGpd
ID0gajsKK30pKCk7CkluZGV4OiBKU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9wdXQtc2xvdy1uby1j
YWNoZS1qcy1wcm94eS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9w
dXQtc2xvdy1uby1jYWNoZS1qcy1wcm94eS5qcwkobm9uZXhpc3RlbnQpCisrKyBKU1Rlc3RzL21p
Y3JvYmVuY2htYXJrcy9wdXQtc2xvdy1uby1jYWNoZS1qcy1wcm94eS5qcwkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDYgQEAKKyhmdW5jdGlvbigpIHsKKyAgICB2YXIgcHJveHkgPSAkdm0uY3Jl
YXRlUHJveHkoeyBzZXQgZm9vKF92KSB7fSB9KTsKKworICAgIGZvciAodmFyIGogPSAwOyBqIDwg
MWU1OyBqKyspCisgICAgICAgIHByb3h5WyJmb28iICsgal0gPSBqOworfSkoKTsKSW5kZXg6IEpT
VGVzdHMvbWljcm9iZW5jaG1hcmtzL3B1dC1zbG93LW5vLWNhY2hlLWxvbmctcHJvdG90eXBlLWNo
YWluLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvbWljcm9iZW5jaG1hcmtzL3B1dC1zbG93LW5v
LWNhY2hlLWxvbmctcHJvdG90eXBlLWNoYWluLmpzCShub25leGlzdGVudCkKKysrIEpTVGVzdHMv
bWljcm9iZW5jaG1hcmtzL3B1dC1zbG93LW5vLWNhY2hlLWxvbmctcHJvdG90eXBlLWNoYWluLmpz
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOCBAQAorKGZ1bmN0aW9uKCkgeworICAgIHZhciBi
YXNlID0geyBzZXQgZm9vKF92KSB7fSB9OworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMWUzOyBp
KyspCisgICAgICAgIGJhc2UgPSBPYmplY3QuY3JlYXRlKGJhc2UpOworCisgICAgZm9yICh2YXIg
aiA9IDA7IGogPCAzZTM7IGorKykKKyAgICAgICAgYmFzZVsiZm9vIiArIGpdID0gajsKK30pKCk7
CkluZGV4OiBKU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9wdXQtc2xvdy1uby1jYWNoZS5qcwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBKU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9wdXQtc2xvdy1uby1jYWNoZS5qcwko
bm9uZXhpc3RlbnQpCisrKyBKU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9wdXQtc2xvdy1uby1jYWNo
ZS5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYgQEAKKyhmdW5jdGlvbigpIHsKKyAgICB2
YXIgYmFzZSA9IHsgc2V0IGZvbyhfdikge30gfTsKKworICAgIGZvciAodmFyIGogPSAwOyBqIDwg
MWU1OyBqKyspCisgICAgICAgIGJhc2VbImZvbyIgKyBqXSA9IGo7Cit9KSgpOwpJbmRleDogSlNU
ZXN0cy9taWNyb2JlbmNobWFya3MvcmVmbGVjdC1zZXQtd2l0aC1yZWNlaXZlci5qcwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBKU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9yZWZsZWN0LXNldC13aXRoLXJlY2VpdmVy
LmpzCShub25leGlzdGVudCkKKysrIEpTVGVzdHMvbWljcm9iZW5jaG1hcmtzL3JlZmxlY3Qtc2V0
LXdpdGgtcmVjZWl2ZXIuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2IEBACisoZnVuY3Rp
b24oKSB7CisgICAgdmFyIHRhcmdldCA9IG5ldyBmdW5jdGlvbigpIHt9OworCisgICAgZm9yICh2
YXIgaSA9IDA7IGkgPCAxZTY7IGkrKykKKyAgICAgICAgUmVmbGVjdC5zZXQodGFyZ2V0LCAiZm9v
IiwgMSwge30pOworfSkoKTsKSW5kZXg6IEpTVGVzdHMvc3RyZXNzL2N1c3RvbS1nZXQtc2V0LXBy
b3RvLWNoYWluLXB1dC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0cmVzcy9jdXN0b20tZ2V0
LXNldC1wcm90by1jaGFpbi1wdXQuanMJKHJldmlzaW9uIDI3MTk3NSkKKysrIEpTVGVzdHMvc3Ry
ZXNzL2N1c3RvbS1nZXQtc2V0LXByb3RvLWNoYWluLXB1dC5qcwkod29ya2luZyBjb3B5KQpAQCAt
MzcsOCArMzcsOCBAQCBmdW5jdGlvbiBnZXRPYmplY3RzKCkgewogICAgICAgICAuLi5wcmltaXRp
dmVzLm1hcChPYmplY3QpLAogICAgICAgICBPYmplY3QuY3JlYXRlKGN1c3RvbVRlc3RHZXR0ZXJT
ZXR0ZXIpLAogICAgICAgICBPYmplY3QuY3JlYXRlKE9iamVjdC5jcmVhdGUoY3VzdG9tVGVzdEdl
dHRlclNldHRlcikpLAotICAgICAgICAvLyBGSVhNRTogb3JkaW5hcnlTZXRTbG93KCkgc2hvdWxk
IGhhbmRsZSBDdXN0b217QWNjZXNzb3IsVmFsdWV9IGRlc2NyaXB0b3JzLgotICAgICAgICAvLyBu
ZXcgUHJveHkoY3VzdG9tVGVzdEdldHRlclNldHRlciwge30pLAorICAgICAgICBPYmplY3QuY3Jl
YXRlKG5ldyBQcm94eShjdXN0b21UZXN0R2V0dGVyU2V0dGVyLCB7fSkpLAorICAgICAgICBPYmpl
Y3QuY3JlYXRlKCR2bS5jcmVhdGVQcm94eShjdXN0b21UZXN0R2V0dGVyU2V0dGVyKSksCiAgICAg
XTsKIH0KIApAQCAtOTEsNyArOTEsNyBAQCBmdW5jdGlvbiBnZXRCYXNlcygpIHsKICAgICAgICAg
ICAgIGJhc2UuY3VzdG9tVmFsdWUgPSAxOwogICAgICAgICAvLyBUaGlzIGlzIHdlaXJkLCBidXQg
aXQgaXNuJ3QgZXhwb3NlZCB0byB1c2VybGFuZCBjb2RlOgogICAgICAgICBhc3NlcnQoIWJhc2Uu
aGFzT3duUHJvcGVydHkoImN1c3RvbVZhbHVlIikpOwotICAgICAgICBhc3NlcnQoIVJlZmxlY3Qu
c2V0KE9iamVjdChiYXNlKSwgImN1c3RvbVZhbHVlIiwgMSkpOworICAgICAgICBhc3NlcnQoUmVm
bGVjdC5zZXQoT2JqZWN0KGJhc2UpLCAiY3VzdG9tVmFsdWUiLCAxKSk7CiAgICAgfQogfSkoKTsK
IApJbmRleDogSlNUZXN0cy9zdHJlc3MvbW9kdWxlLW5hbWVzcGFjZS1hY2Nlc3Mtc2V0LWZhaWxz
LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvc3RyZXNzL21vZHVsZS1uYW1lc3BhY2UtYWNjZXNz
LXNldC1mYWlscy5qcwkobm9uZXhpc3RlbnQpCisrKyBKU1Rlc3RzL3N0cmVzcy9tb2R1bGUtbmFt
ZXNwYWNlLWFjY2Vzcy1zZXQtZmFpbHMuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4MyBA
QAorY29uc3QgZXhpc3RpbmdLZXlzID0gWyJjb2NvYSIsICJ0ZXN0IiwgU3ltYm9sLnRvU3RyaW5n
VGFnXTsKK2NvbnN0IG5vbkV4aXN0aW5nS2V5cyA9IFsiZm9vIiwgU3ltYm9sKCJmb28iKV07Citj
b25zdCBhbGxLZXlzID0gWy4uLmV4aXN0aW5nS2V5cywgLi4ubm9uRXhpc3RpbmdLZXlzXTsKKwor
ZnVuY3Rpb24gYXNzZXJ0KHgsIGtleSkgeworICAgIGlmICgheCkKKyAgICAgICAgdGhyb3cgbmV3
IEVycm9yKGBCYWQgYXNzZXJ0aW9uISBLZXk6ICR7U3RyaW5nKGtleSl9YCk7Cit9CisKK2Z1bmN0
aW9uIHNob3VsZFRocm93KGZ1bmMsIGVycm9yTWVzc2FnZSkgeworICAgIHZhciBlcnJvclRocm93
biA9IGZhbHNlOworICAgIHRyeSB7CisgICAgICAgIGZ1bmMoKTsKKyAgICB9IGNhdGNoIChlcnJv
cikgeworICAgICAgICBlcnJvclRocm93biA9IHRydWU7CisgICAgICAgIGlmIChTdHJpbmcoZXJy
b3IpICE9PSBlcnJvck1lc3NhZ2UpCisgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEJhZCBl
cnJvcjogJHtlcnJvcn1gKTsKKyAgICB9CisgICAgaWYgKCFlcnJvclRocm93bikKKyAgICAgICAg
dGhyb3cgbmV3IEVycm9yKCJEaWRuJ3QgdGhyb3chIik7Cit9CisKK2Z1bmN0aW9uIHRlc3REaXJl
Y3RTZXQobnMpIHsKKyAgICBmb3IgKGNvbnN0IGtleSBvZiBhbGxLZXlzKSB7CisgICAgICAgIGNv
bnN0IG5ld1ZhbHVlID0ge307CisKKyAgICAgICAgbnNba2V5XSA9IG5ld1ZhbHVlOworICAgICAg
ICBhc3NlcnQobnNba2V5XSAhPT0gbmV3VmFsdWUsIGtleSk7CisKKyAgICAgICAgc2hvdWxkVGhy
b3coKCkgPT4geyAidXNlIHN0cmljdCI7IG5zW2tleV0gPSBuZXdWYWx1ZTsgfSwgIlR5cGVFcnJv
cjogQXR0ZW1wdGVkIHRvIGFzc2lnbiB0byByZWFkb25seSBwcm9wZXJ0eS4iKTsKKyAgICAgICAg
YXNzZXJ0KG5zW2tleV0gIT09IG5ld1ZhbHVlLCBrZXkpOworICAgIH0KK30KKworZnVuY3Rpb24g
dGVzdFByb3RvdHlwZUNoYWluU2V0KG5zKSB7CisgICAgZm9yIChjb25zdCBrZXkgb2YgYWxsS2V5
cykgeworICAgICAgICBjb25zdCBoZWlyID0gT2JqZWN0LmNyZWF0ZShucyk7CisKKyAgICAgICAg
aGVpcltrZXldID0ge307CisgICAgICAgIGFzc2VydChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNj
cmlwdG9yKGhlaXIsIGtleSkgPT09IHVuZGVmaW5lZCwga2V5KTsKKworICAgICAgICBzaG91bGRU
aHJvdygoKSA9PiB7ICJ1c2Ugc3RyaWN0IjsgaGVpcltrZXldID0ge307IH0sICJUeXBlRXJyb3I6
IEF0dGVtcHRlZCB0byBhc3NpZ24gdG8gcmVhZG9ubHkgcHJvcGVydHkuIik7CisgICAgICAgIGFz
c2VydChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGhlaXIsIGtleSkgPT09IHVuZGVm
aW5lZCwga2V5KTsKKyAgICB9Cit9CisKK2Z1bmN0aW9uIHRlc3RSZWZsZWN0U2V0KG5zKSB7Cisg
ICAgInVzZSBzdHJpY3QiOworCisgICAgZm9yIChjb25zdCBleGlzdGluZ0tleSBvZiBleGlzdGlu
Z0tleXMpIHsKKyAgICAgICAgY29uc3Qgb2JqID0ge307CisgICAgICAgIGNvbnN0IG5ld1ZhbHVl
ID0ge307CisKKyAgICAgICAgYXNzZXJ0KFJlZmxlY3Quc2V0KG5zLCBleGlzdGluZ0tleSwgbmV3
VmFsdWUpID09PSBmYWxzZSwgZXhpc3RpbmdLZXkpOworICAgICAgICBhc3NlcnQoUmVmbGVjdC5z
ZXQob2JqLCBleGlzdGluZ0tleSwgbmV3VmFsdWUsIG5zKSA9PT0gZmFsc2UsIGV4aXN0aW5nS2V5
KTsKKworICAgICAgICBjb25zdCBpc1dyaXRhYmxlID0gZXhpc3RpbmdLZXkgIT09IFN5bWJvbC50
b1N0cmluZ1RhZzsKKyAgICAgICAgYXNzZXJ0KFJlZmxlY3Quc2V0KG9iaiwgZXhpc3RpbmdLZXks
IG5zW2V4aXN0aW5nS2V5XSwgbnMpID09PSBpc1dyaXRhYmxlLCBleGlzdGluZ0tleSk7CisKKyAg
ICAgICAgYXNzZXJ0KG5zW2V4aXN0aW5nS2V5XSAhPT0gbmV3VmFsdWUsIGV4aXN0aW5nS2V5KTsK
KyAgICAgICAgYXNzZXJ0KG9ialtleGlzdGluZ0tleV0gPT09IHVuZGVmaW5lZCwgZXhpc3RpbmdL
ZXkpOworICAgIH0KKworICAgIGZvciAoY29uc3Qgbm9uRXhpc3RpbmdLZXkgb2Ygbm9uRXhpc3Rp
bmdLZXlzKSB7CisgICAgICAgIGFzc2VydChSZWZsZWN0LnNldChucywgbm9uRXhpc3RpbmdLZXks
IHt9KSA9PT0gZmFsc2UsIG5vbkV4aXN0aW5nS2V5KTsKKyAgICAgICAgYXNzZXJ0KG5zW25vbkV4
aXN0aW5nS2V5XSA9PT0gdW5kZWZpbmVkLCBub25FeGlzdGluZ0tleSk7CisKKyAgICAgICAgY29u
c3Qgb2JqID0ge307CisgICAgICAgIGFzc2VydChSZWZsZWN0LnNldChvYmosIG5vbkV4aXN0aW5n
S2V5LCB7fSwgbnMpID09PSBmYWxzZSwgbm9uRXhpc3RpbmdLZXkpOworICAgICAgICBhc3NlcnQo
b2JqW25vbkV4aXN0aW5nS2V5XSA9PT0gdW5kZWZpbmVkLCBub25FeGlzdGluZ0tleSk7CisgICAg
fQorfQorCitpbXBvcnQoIi4vcmVzb3VyY2VzL21vZHVsZS1uYW1lc3BhY2UtYWNjZXNzLmpzIiku
dGhlbihucyA9PiB7CisgICAgdGVzdERpcmVjdFNldChucyk7CisgICAgdGVzdFByb3RvdHlwZUNo
YWluU2V0KG5zKTsKKyAgICB0ZXN0UmVmbGVjdFNldChucyk7Cit9KS5jYXRjaChlcnIgPT4gewor
ICAgIHByaW50KGAhISEgJHtlcnJ9XG4ke2Vyci5zdGFja31gKTsKKyAgICAkdm0uYWJvcnQoKTsK
K30pOworCitkcmFpbk1pY3JvdGFza3MoKTsKSW5kZXg6IEpTVGVzdHMvc3RyZXNzL3JlZmxlY3Qt
c2V0LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvc3RyZXNzL3JlZmxlY3Qtc2V0LmpzCShyZXZp
c2lvbiAyNzE5NzUpCisrKyBKU1Rlc3RzL3N0cmVzcy9yZWZsZWN0LXNldC5qcwkod29ya2luZyBj
b3B5KQpAQCAtNjk2LDYgKzY5NiwxMiBAQCB2YXIgc3ltYm9sID0gU3ltYm9sKCk7CiAgICAgICAg
IHRyYW5zZmVyQXJyYXlCdWZmZXIob2JqZWN0LmJ1ZmZlcik7CiAgICAgICAgIHNob3VsZEJlKFJl
ZmxlY3Quc2V0KG9iamVjdCwgMCwgNDIpLCB0cnVlKTsKICAgICAgICAgc2hvdWxkQmUoUmVmbGVj
dC5nZXQob2JqZWN0LCAwKSwgdW5kZWZpbmVkKTsKKworICAgICAgICB2YXIgcmVjZWl2ZXIgPSBu
ZXcgVHlwZWRBcnJheSg0KTsKKyAgICAgICAgdmFyIHRhcmdldCA9IHt9OworICAgICAgICBzaG91
bGRCZShSZWZsZWN0LnNldCh0YXJnZXQsICIwLjUiLCA0MiwgcmVjZWl2ZXIpLCBmYWxzZSk7Cisg
ICAgICAgIHNob3VsZEJlKFJlZmxlY3QuZ2V0KHRhcmdldCwgIjAuNSIpLCB1bmRlZmluZWQpOwor
ICAgICAgICBzaG91bGRCZShSZWZsZWN0LmdldChyZWNlaXZlciwgIjAuNSIpLCB1bmRlZmluZWQp
OwogICAgIH07CiB9KSgpKTsKIApJbmRleDogSlNUZXN0cy9zdHJlc3MvcmVncmVzcy0yMTc5MTYu
anMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3MvcmVncmVzcy0yMTc5MTYuanMJKG5vbmV4
aXN0ZW50KQorKysgSlNUZXN0cy9zdHJlc3MvcmVncmVzcy0yMTc5MTYuanMJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw3MCBAQAorInVzZSBzdHJpY3QiOworCitmdW5jdGlvbiBzaG91bGRCZShh
Y3R1YWwsIGV4cGVjdGVkKSB7CisgICAgaWYgKGFjdHVhbCAhPT0gZXhwZWN0ZWQpCisgICAgICAg
IHRocm93IG5ldyBFcnJvcihgQmFkIHZhbHVlOiAke2FjdHVhbH0hYCk7Cit9CisKK2Z1bmN0aW9u
IHNob3VsZFRocm93KGZ1bmMsIGVycm9yTWVzc2FnZSkgeworICAgIHZhciBlcnJvclRocm93biA9
IGZhbHNlOworICAgIHRyeSB7CisgICAgICAgIGZ1bmMoKTsKKyAgICB9IGNhdGNoIChlcnJvcikg
eworICAgICAgICBlcnJvclRocm93biA9IHRydWU7CisgICAgICAgIGlmIChTdHJpbmcoZXJyb3Ip
ICE9PSBlcnJvck1lc3NhZ2UpCisgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEJhZCBlcnJv
cjogJHtlcnJvcn1gKTsKKyAgICB9CisgICAgaWYgKCFlcnJvclRocm93bikKKyAgICAgICAgdGhy
b3cgbmV3IEVycm9yKCJEaWRuJ3QgdGhyb3chIik7Cit9CisKK3Nob3VsZFRocm93KCgpID0+IHsg
T2JqZWN0LnByZXZlbnRFeHRlbnNpb25zKE9iamVjdC5jcmVhdGUoUHJvbWlzZSkpLnJlc29sdmUg
PSAxOyB9LCAiVHlwZUVycm9yOiBBdHRlbXB0ZWQgdG8gYXNzaWduIHRvIHJlYWRvbmx5IHByb3Bl
cnR5LiIpOworc2hvdWxkVGhyb3coKCkgPT4geyBPYmplY3Quc2VhbChuZXcgSW50bC5OdW1iZXJG
b3JtYXQoKSkuZm9ybWF0VG9QYXJ0cyA9IDE7IH0sICJUeXBlRXJyb3I6IEF0dGVtcHRlZCB0byBh
c3NpZ24gdG8gcmVhZG9ubHkgcHJvcGVydHkuIik7CitzaG91bGRUaHJvdygoKSA9PiB7IE9iamVj
dC5mcmVlemUobmV3IFN0cmluZygpKS5ib2xkID0gMTsgfSwgIlR5cGVFcnJvcjogQXR0ZW1wdGVk
IHRvIGFzc2lnbiB0byByZWFkb25seSBwcm9wZXJ0eS4iKTsKK3Nob3VsZFRocm93KCgpID0+IHsg
T2JqZWN0LnByZXZlbnRFeHRlbnNpb25zKG5ldyBEYXRlKCkpLmdldFVUQ0RheSA9IDE7IH0sICJU
eXBlRXJyb3I6IEF0dGVtcHRlZCB0byBhc3NpZ24gdG8gcmVhZG9ubHkgcHJvcGVydHkuIik7CisK
K3Nob3VsZFRocm93KCgpID0+IHsgT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zKE9iamVjdC5jcmVh
dGUoJHZtLmNyZWF0ZVN0YXRpY0N1c3RvbVZhbHVlKCkpKS50ZXN0U3RhdGljVmFsdWVOb1NldHRl
ciA9IDEgfSwgIlR5cGVFcnJvcjogQXR0ZW1wdGVkIHRvIGFzc2lnbiB0byByZWFkb25seSBwcm9w
ZXJ0eS4iKTsKKworeworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPYmplY3QucHJvdG90eXBl
LCAiZ2V0RGF5Iiwge3dyaXRhYmxlOiBmYWxzZSwgdmFsdWU6IDF9KTsKKyAgICB2YXIgZCA9IG5l
dyBEYXRlOworICAgIGQuZ2V0RGF5ID0gNTU1OworICAgIHNob3VsZEJlKGQuZ2V0RGF5LCA1NTUp
OworfQorCitjb25zdCBwcmltaXRpdmVzID0gW3RydWUsIDEsICIiLCBTeW1ib2woKSwgMW5dOwor
CisoZnVuY3Rpb24gdGVzdFN0YXRpY0N1c3RvbUFjY2Vzc29yKCkgeworICAgIGZvciAoY29uc3Qg
cHJpbWl0aXZlIG9mIHByaW1pdGl2ZXMpIHsKKyAgICAgICAgY29uc3QgcHJpbWl0aXZlUHJvdG90
eXBlID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHByaW1pdGl2ZSk7CisgICAgICAgIGNvbnN0IHN0
YXRpY0N1c3RvbUFjY2Vzc29yID0gJHZtLmNyZWF0ZVN0YXRpY0N1c3RvbUFjY2Vzc29yKCk7Cisg
ICAgICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZihwcmltaXRpdmVQcm90b3R5cGUsIHN0YXRpY0N1
c3RvbUFjY2Vzc29yKTsKKworICAgICAgICBzaG91bGRUaHJvdygoKSA9PiB7IHByaW1pdGl2ZS50
ZXN0U3RhdGljQWNjZXNzb3JSZWFkT25seSA9IDE7IH0sICJUeXBlRXJyb3I6IEF0dGVtcHRlZCB0
byBhc3NpZ24gdG8gcmVhZG9ubHkgcHJvcGVydHkuIik7CisKKyAgICAgICAgZm9yIChsZXQgaSA9
IDA7IGkgPCAxMDAwOyBpKyspIHsKKyAgICAgICAgICAgIHByaW1pdGl2ZS50ZXN0U3RhdGljQWNj
ZXNzb3IgPSBpOworICAgICAgICAgICAgc2hvdWxkQmUocHJpbWl0aXZlUHJvdG90eXBlLnRlc3RG
aWVsZCwgaSk7CisgICAgICAgIH0KKworICAgICAgICBkZWxldGUgcHJpbWl0aXZlUHJvdG90eXBl
LnRlc3RGaWVsZDsKKyAgICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKHByaW1pdGl2ZVByb3Rv
dHlwZSwgT2JqZWN0LnByb3RvdHlwZSk7CisgICAgfQorfSkoKTsKKworKGZ1bmN0aW9uIHRlc3RT
dGF0aWNDdXN0b21WYWx1ZSgpIHsKKyAgICBmb3IgKGNvbnN0IHByaW1pdGl2ZSBvZiBwcmltaXRp
dmVzKSB7CisgICAgICAgIGNvbnN0IHByaW1pdGl2ZVByb3RvdHlwZSA9IE9iamVjdC5nZXRQcm90
b3R5cGVPZihwcmltaXRpdmUpOworICAgICAgICBjb25zdCBzdGF0aWNDdXN0b21WYWx1ZSA9ICR2
bS5jcmVhdGVTdGF0aWNDdXN0b21WYWx1ZSgpOworICAgICAgICBPYmplY3Quc2V0UHJvdG90eXBl
T2YocHJpbWl0aXZlUHJvdG90eXBlLCBzdGF0aWNDdXN0b21WYWx1ZSk7CisKKyAgICAgICAgc2hv
dWxkVGhyb3coKCkgPT4geyBwcmltaXRpdmUudGVzdFN0YXRpY1ZhbHVlTm9TZXR0ZXIgPSAxOyB9
LCAiVHlwZUVycm9yOiBBdHRlbXB0ZWQgdG8gYXNzaWduIHRvIHJlYWRvbmx5IHByb3BlcnR5LiIp
OworICAgICAgICBzaG91bGRUaHJvdygoKSA9PiB7IHByaW1pdGl2ZS50ZXN0U3RhdGljVmFsdWVS
ZWFkT25seSA9IDE7IH0sICJUeXBlRXJyb3I6IEF0dGVtcHRlZCB0byBhc3NpZ24gdG8gcmVhZG9u
bHkgcHJvcGVydHkuIik7CisKKyAgICAgICAgcHJpbWl0aXZlLnRlc3RTdGF0aWNWYWx1ZSA9IDE7
CisgICAgICAgIHNob3VsZEJlKHN0YXRpY0N1c3RvbVZhbHVlLnRlc3RTdGF0aWNWYWx1ZSwgMSk7
CisgICAgICAgIHNob3VsZFRocm93KCgpID0+IHsgcHJpbWl0aXZlLnRlc3RTdGF0aWNWYWx1ZSA9
IDE7IH0sICJUeXBlRXJyb3I6IEF0dGVtcHRlZCB0byBhc3NpZ24gdG8gcmVhZG9ubHkgcHJvcGVy
dHkuIik7CisKKyAgICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKHByaW1pdGl2ZVByb3RvdHlw
ZSwgT2JqZWN0LnByb3RvdHlwZSk7CisgICAgfQorfSkoKTsKSW5kZXg6IEpTVGVzdHMvc3RyZXNz
L3R5cGVkLWFycmF5LWNhbm9uaWNhbC1udW1lcmljLWluZGV4LXN0cmluZy1zZXQuanMKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gSlNUZXN0cy9zdHJlc3MvdHlwZWQtYXJyYXktY2Fub25pY2FsLW51bWVyaWMtaW5k
ZXgtc3RyaW5nLXNldC5qcwkobm9uZXhpc3RlbnQpCisrKyBKU1Rlc3RzL3N0cmVzcy90eXBlZC1h
cnJheS1jYW5vbmljYWwtbnVtZXJpYy1pbmRleC1zdHJpbmctc2V0LmpzCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMzUgQEAKKyJ1c2Ugc3RyaWN0IjsKK2NvbnN0IFR5cGVkQXJyYXlzID0gW1Vp
bnQ4Q2xhbXBlZEFycmF5LCBVaW50OEFycmF5LCBVaW50MTZBcnJheSwgVWludDMyQXJyYXksIElu
dDhBcnJheSwgSW50MTZBcnJheSwgSW50MzJBcnJheSwgRmxvYXQzMkFycmF5LCBGbG9hdDY0QXJy
YXldOworY29uc3QgY2Fub25pY2FsTnVtZXJpY0luZGV4U3RyaW5ncyA9IFsnLTAnLCAnLTEnLCAn
LTMuMTQnLCAnSW5maW5pdHknLCAnLUluZmluaXR5JywgJ05hTicsICcwLjEnLCAnNDI5NDk2NzI5
NScsICc0Mjk0OTY3Mjk2J107CisKK2Z1bmN0aW9uIGFzc2VydCh4LCBrZXkpIHsKKyAgICBpZiAo
IXgpCisgICAgICAgIHRocm93IG5ldyBFcnJvcihgQmFkIGFzc2VydGlvbiEgS2V5OiAke1N0cmlu
ZyhrZXkpfWApOworfQorCitmb3IgKGNvbnN0IFR5cGVkQXJyYXkgb2YgVHlwZWRBcnJheXMpIHsK
KyAgICBmb3IgKGNvbnN0IGtleSBvZiBjYW5vbmljYWxOdW1lcmljSW5kZXhTdHJpbmdzKSB7Cisg
ICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUeXBlZEFycmF5LnByb3RvdHlwZSwga2V5LCB7
CisgICAgICAgICAgICBzZXQoKSB7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAk
e1R5cGVkQXJyYXkubmFtZX0ucHJvdG90eXBlWyR7a2V5fV0gc2V0dGVyIHNob3VsZCBiZSB1bnJl
YWNoYWJsZSFgKTsKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICBjb25maWd1cmFibGU6IHRy
dWUsCisgICAgICAgIH0pOworCisgICAgICAgIGNvbnN0IGFzc2VydFByb3RvdHlwZUtleUlzSWdu
b3JlZCA9ICgpID0+IHsKKyAgICAgICAgICAgIGNvbnN0IHRBID0gbmV3IFR5cGVkQXJyYXk7Cisg
ICAgICAgICAgICB0QVtrZXldID0gMTsKKyAgICAgICAgICAgIGFzc2VydCghdEEuaGFzT3duUHJv
cGVydHkoa2V5KSwga2V5KTsKKworICAgICAgICAgICAgY29uc3QgaGVpciA9IE9iamVjdC5jcmVh
dGUobmV3IFR5cGVkQXJyYXkpOworICAgICAgICAgICAgaGVpcltrZXldID0gMjsKKyAgICAgICAg
ICAgIGFzc2VydCghaGVpci5oYXNPd25Qcm9wZXJ0eShrZXkpLCBrZXkpOworICAgICAgICB9Owor
ICAgICAgICBhc3NlcnRQcm90b3R5cGVLZXlJc0lnbm9yZWQoKTsKKworICAgICAgICBPYmplY3Qu
ZGVmaW5lUHJvcGVydHkoVHlwZWRBcnJheS5wcm90b3R5cGUsIGtleSwge3dyaXRhYmxlOiBmYWxz
ZX0pOworICAgICAgICBhc3NlcnRQcm90b3R5cGVLZXlJc0lnbm9yZWQoKTsKKworICAgICAgICBh
c3NlcnQoZGVsZXRlIFR5cGVkQXJyYXkucHJvdG90eXBlW2tleV0sIGtleSk7CisgICAgfQorfQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNzE5NzUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTUzIEBA
CisyMDIxLTAxLTI4ICBBbGV4ZXkgU2h2YXlrYSAgPHNodmFpa2FsZXNoQGdtYWlsLmNvbT4KKwor
ICAgICAgICBJbnRyb2R1Y2UgT3ZlcnJpZGVzUHV0W0J5SW5kZXhdIHR5cGUgaW5mbyBmbGFncwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE3OTE2CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBBUEkvSlND
YWxsYmFja09iamVjdC5oOgorICAgICAgICAqIEFQSS9KU0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25z
Lmg6CisgICAgICAgIChKU0M6OkpTQ2FsbGJhY2tPYmplY3Q8UGFyZW50Pjo6cHV0KToKKyAgICAg
ICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGRlYnVnZ2VyL0RlYnVnZ2VyU2NvcGUuY3BwOgor
ICAgICAgICAoSlNDOjpEZWJ1Z2dlclNjb3BlOjpkZWZpbmVPd25Qcm9wZXJ0eVZpYVB1dCk6Cisg
ICAgICAgIChKU0M6OkRlYnVnZ2VyU2NvcGU6OnB1dCk6IERlbGV0ZWQuCisgICAgICAgICogZGVi
dWdnZXIvRGVidWdnZXJTY29wZS5oOgorICAgICAgICAqIHJ1bnRpbWUvQ2xhc3NJbmZvLmg6Cisg
ICAgICAgICogcnVudGltZS9DbG9uZWRBcmd1bWVudHMuY3BwOgorICAgICAgICAoSlNDOjpDbG9u
ZWRBcmd1bWVudHM6OmRlZmluZU93blByb3BlcnR5VmlhUHV0KToKKyAgICAgICAgKEpTQzo6Q2xv
bmVkQXJndW1lbnRzOjpwdXQpOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvQ2xvbmVkQXJn
dW1lbnRzLmg6CisgICAgICAgICogcnVudGltZS9DdXN0b21HZXR0ZXJTZXR0ZXIuY3BwOgorICAg
ICAgICAoSlNDOjpjYWxsQ3VzdG9tU2V0dGVyKTogRGVsZXRlZC4KKyAgICAgICAgKiBydW50aW1l
L0N1c3RvbUdldHRlclNldHRlci5oOgorICAgICAgICAqIHJ1bnRpbWUvRXJyb3JDb25zdHJ1Y3Rv
ci5jcHA6CisgICAgICAgIChKU0M6OkVycm9yQ29uc3RydWN0b3I6OmRlZmluZU93blByb3BlcnR5
VmlhUHV0KToKKyAgICAgICAgKEpTQzo6RXJyb3JDb25zdHJ1Y3Rvcjo6cHV0KTogRGVsZXRlZC4K
KyAgICAgICAgKiBydW50aW1lL0Vycm9yQ29uc3RydWN0b3IuaDoKKyAgICAgICAgKiBydW50aW1l
L0Vycm9ySW5zdGFuY2UuY3BwOgorICAgICAgICAoSlNDOjpFcnJvckluc3RhbmNlOjpkZWZpbmVP
d25Qcm9wZXJ0eVZpYVB1dCk6CisgICAgICAgIChKU0M6OkVycm9ySW5zdGFuY2U6OnB1dCk6IERl
bGV0ZWQuCisgICAgICAgICogcnVudGltZS9FcnJvckluc3RhbmNlLmg6CisgICAgICAgICogcnVu
dGltZS9HZW5lcmljQXJndW1lbnRzLmg6CisgICAgICAgICogcnVudGltZS9HZW5lcmljQXJndW1l
bnRzSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpHZW5lcmljQXJndW1lbnRzPFR5cGU+OjpkZWZp
bmVPd25Qcm9wZXJ0eVZpYVB1dCk6CisgICAgICAgIChKU0M6OkdlbmVyaWNBcmd1bWVudHM8VHlw
ZT46OnB1dCk6IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9HZXR0ZXJTZXR0ZXIuaDoKKyAg
ICAgICAgKiBydW50aW1lL0pTQXJyYXkuY3BwOgorICAgICAgICAoSlNDOjpKU0FycmF5OjpkZWZp
bmVPd25Qcm9wZXJ0eVZpYVB1dCk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OnB1dCk6IERlbGV0
ZWQuCisgICAgICAgICogcnVudGltZS9KU0FycmF5Lmg6CisgICAgICAgICogcnVudGltZS9KU0Fy
cmF5QnVmZmVyVmlldy5jcHA6CisgICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXJWaWV3OjpwdXQp
OiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuaDoKKyAgICAg
ICAgKiBydW50aW1lL0pTQ0pTVmFsdWUuY3BwOgorICAgICAgICAoSlNDOjpKU1ZhbHVlOjpwdXRU
b1ByaW1pdGl2ZSk6CisgICAgICAgICogcnVudGltZS9KU0NlbGwuY3BwOgorICAgICAgICAoSlND
OjpKU0NlbGw6OmRlZmluZU93blByb3BlcnR5VmlhUHV0KToKKyAgICAgICAgKEpTQzo6SlNDZWxs
Ojpkb1B1dFByb3BlcnR5U2VjdXJpdHlDaGVjayk6IERlbGV0ZWQuCisgICAgICAgICogcnVudGlt
ZS9KU0NlbGwuaDoKKyAgICAgICAgKiBydW50aW1lL0pTQ3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rp
b24uY3BwOgorICAgICAgICAoSlNDOjpKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04pOgorICAgICAg
ICAoSlNDOjpKU0N1c3RvbUdldHRlckZ1bmN0aW9uOjpKU0N1c3RvbUdldHRlckZ1bmN0aW9uKToK
KyAgICAgICAgKEpTQzo6SlNDdXN0b21HZXR0ZXJGdW5jdGlvbjo6Y3JlYXRlKToKKyAgICAgICAg
KEpTQzo6SlNDdXN0b21TZXR0ZXJGdW5jdGlvbjo6SlNDdXN0b21TZXR0ZXJGdW5jdGlvbik6Cisg
ICAgICAgIChKU0M6OkpTQ3VzdG9tU2V0dGVyRnVuY3Rpb246OmNyZWF0ZSk6CisgICAgICAgIChK
U0M6OkpTQ3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rpb246OkpTQ3VzdG9tR2V0dGVyU2V0dGVyRnVu
Y3Rpb24pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpKU0N1c3RvbUdldHRlclNldHRlckZ1bmN0
aW9uOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpKU0N1c3RvbUdldHRlclNldHRl
ckZ1bmN0aW9uOjp2aXNpdENoaWxkcmVuKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SlNDdXN0
b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbjo6ZmluaXNoQ3JlYXRpb24pOiBEZWxldGVkLgorICAgICAg
ICAqIHJ1bnRpbWUvSlNDdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbi5oOgorICAgICAgICAqIHJ1
bnRpbWUvSlNGdW5jdGlvbi5jcHA6CisgICAgICAgIChKU0M6OkpTRnVuY3Rpb246OmRlZmluZU93
blByb3BlcnR5VmlhUHV0KToKKyAgICAgICAgKEpTQzo6SlNGdW5jdGlvbjo6cHV0KTogRGVsZXRl
ZC4KKyAgICAgICAgKiBydW50aW1lL0pTRnVuY3Rpb24uaDoKKyAgICAgICAgKiBydW50aW1lL0pT
R2VuZXJpY1R5cGVkQXJyYXlWaWV3Lmg6CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbExleGlj
YWxFbnZpcm9ubWVudC5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwOgor
ICAgICAgICAoSlNDOjpKU0dsb2JhbE9iamVjdDo6SlNHbG9iYWxPYmplY3QpOgorICAgICAgICAo
SlNDOjpKU0dsb2JhbE9iamVjdDo6aW5pdCk6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0
OjpkZWZpbmVPd25Qcm9wZXJ0eVZpYVB1dCk6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0
Ojp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6OnB1dCk6IERl
bGV0ZWQuCisgICAgICAgICogcnVudGltZS9KU0dsb2JhbE9iamVjdC5oOgorICAgICAgICAoSlND
OjpKU0dsb2JhbE9iamVjdDo6Y3VzdG9tR2V0dGVyRnVuY3Rpb25NYXApOgorICAgICAgICAoSlND
OjpKU0dsb2JhbE9iamVjdDo6Y3VzdG9tU2V0dGVyRnVuY3Rpb25NYXApOgorICAgICAgICAoSlND
OjpKU0dsb2JhbE9iamVjdDo6Y3VzdG9tR2V0dGVyRnVuY3Rpb25TdHJ1Y3R1cmUgY29uc3QpOgor
ICAgICAgICAoSlNDOjpKU0dsb2JhbE9iamVjdDo6Y3VzdG9tU2V0dGVyRnVuY3Rpb25TdHJ1Y3R1
cmUgY29uc3QpOgorICAgICAgICAoSlNDOjpKU0dsb2JhbE9iamVjdDo6Y3VzdG9tR2V0dGVyU2V0
dGVyRnVuY3Rpb25TdHJ1Y3R1cmUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUv
SlNMZXhpY2FsRW52aXJvbm1lbnQuaDoKKyAgICAgICAgKiBydW50aW1lL0pTTW9kdWxlRW52aXJv
bm1lbnQuaDoKKyAgICAgICAgKiBydW50aW1lL0pTTW9kdWxlTmFtZXNwYWNlT2JqZWN0Lmg6Cisg
ICAgICAgICogcnVudGltZS9KU09iamVjdC5jcHA6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpn
ZXRPd25Qcm9wZXJ0eVNsb3QpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cHV0KToKKyAgICAg
ICAgKEpTQzo6SlNPYmplY3Q6OnB1dElubGluZVNsb3cpOgorICAgICAgICAoSlNDOjpKU09iamVj
dDo6cHV0SW5saW5lV2l0aFJlY2VpdmVyQ2hlY2spOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6
ZGVmaW5lT3duUHJvcGVydHlWaWFQdXQpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6ZGVmaW5l
T3duUHJvcGVydHlWaWFQdXRTbG93KToKKyAgICAgICAgKEpTQzo6Z2V0Q3VzdG9tR2V0dGVyRnVu
Y3Rpb24pOgorICAgICAgICAoSlNDOjpnZXRDdXN0b21TZXR0ZXJGdW5jdGlvbik6CisgICAgICAg
IChKU0M6OkpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IpOgorICAgICAgICAoSlND
OjpKU09iamVjdDo6ZG9QdXRQcm9wZXJ0eVNlY3VyaXR5Q2hlY2spOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpnZXRDdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbkZvckdldHRlclNldHRlcik6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpwcm90b3R5cGVDaGFpbk1heUludGVyY2Vw
dFN0b3JlVG8pOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNPYmplY3QuaDoKKyAgICAg
ICAgKEpTQzo6SlNPYmplY3Q6OnB1dEJ5SW5kZXhJbmxpbmUpOgorICAgICAgICAoSlNDOjpKU09i
amVjdDo6ZmlsbEN1c3RvbUdldHRlclByb3BlcnR5U2xvdCk6CisgICAgICAgIChKU0M6OkpTT2Jq
ZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3QpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cHV0RGly
ZWN0KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmRvUHV0UHJvcGVydHlTZWN1cml0eUNoZWNr
KTogRGVsZXRlZC4KKyAgICAgICAgKiBydW50aW1lL0pTT2JqZWN0SW5saW5lcy5oOgorICAgICAg
ICAoSlNDOjpKU09iamVjdDo6Y2FuUGVyZm9ybUZhc3RQdXRJbmxpbmVFeGNsdWRpbmdQcm90byk6
CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpwdXRJbmxpbmVGb3JKU09iamVjdCk6CisgICAgICAg
IChKU0M6OkpTT2JqZWN0OjpkZWZpbmVPd25Qcm9wZXJ0eVZpYVB1dEZhc3QpOgorICAgICAgICAo
SlNDOjpKU09iamVjdDo6cHV0RGlyZWN0SW50ZXJuYWwpOgorICAgICAgICAqIHJ1bnRpbWUvSlNQ
cm94eS5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNUeXBlSW5mby5oOgorICAgICAgICAoSlNDOjpU
eXBlSW5mbzo6b3ZlcnJpZGVzUHV0IGNvbnN0KToKKyAgICAgICAgKEpTQzo6VHlwZUluZm86Omdl
dE93blByb3BlcnR5U2xvdE1heUJlV3JvbmdBYm91dERvbnRFbnVtIGNvbnN0KToKKyAgICAgICAg
KEpTQzo6VHlwZUluZm86Omhhc1B1dFByb3BlcnR5U2VjdXJpdHlDaGVjayBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgICogcnVudGltZS9Mb29rdXAuaDoKKyAgICAgICAgKEpTQzo6Z2V0U3RhdGlj
UHJvcGVydHlTbG90RnJvbVRhYmxlKToKKyAgICAgICAgKEpTQzo6cHV0RW50cnkpOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpsb29rdXBQdXQpOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUv
UHJvcGVydHlTbG90LmNwcDoKKyAgICAgICAgKEpTQzo6UHJvcGVydHlTbG90OjpjdXN0b21BY2Nl
c3NvckdldHRlciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9Qcm9wZXJ0eVNs
b3QuaDoKKyAgICAgICAgKEpTQzo6UHJvcGVydHlTbG90Ojppc0N1c3RvbSBjb25zdCk6CisgICAg
ICAgIChKU0M6OlByb3BlcnR5U2xvdDo6Y3VzdG9tR2V0dGVyIGNvbnN0KToKKyAgICAgICAgKEpT
Qzo6UHJvcGVydHlTbG90OjpjdXN0b21TZXR0ZXIgY29uc3QpOgorICAgICAgICAoSlNDOjpQcm9w
ZXJ0eVNsb3Q6OnNldEN1c3RvbSk6CisgICAgICAgIChKU0M6OlByb3BlcnR5U2xvdDo6c2V0Q2Fj
aGVhYmxlQ3VzdG9tKToKKyAgICAgICAgKEpTQzo6UHJvcGVydHlTbG90OjpnZXRWYWx1ZSBjb25z
dCk6CisgICAgICAgIChKU0M6OlByb3BlcnR5U2xvdDo6aXNDdXN0b21BY2Nlc3NvciBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlByb3BlcnR5U2xvdDo6Y3VzdG9tR2V0dGVyU2V0dGVy
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6UHJvcGVydHlTbG90OjpzZXRDdXN0b21H
ZXR0ZXJTZXR0ZXIpOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvUHJveHlPYmplY3QuaDoK
KyAgICAgICAgKiBydW50aW1lL1B1dFByb3BlcnR5U2xvdC5oOgorICAgICAgICAqIHJ1bnRpbWUv
UmVmbGVjdE9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OkpTQ19ERUZJTkVfSE9TVF9GVU5DVElP
Tik6CisgICAgICAgICogcnVudGltZS9SZWdFeHBPYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpS
ZWdFeHBPYmplY3Q6OmRlZmluZU93blByb3BlcnR5VmlhUHV0KToKKyAgICAgICAgKEpTQzo6UmVn
RXhwT2JqZWN0OjpwdXQpOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvUmVnRXhwT2JqZWN0
Lmg6CisgICAgICAgICogcnVudGltZS9TdHJpbmdPYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpT
dHJpbmdPYmplY3Q6OmRlZmluZU93blByb3BlcnR5VmlhUHV0KToKKyAgICAgICAgKEpTQzo6U3Ry
aW5nT2JqZWN0OjpwdXQpOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvU3RyaW5nT2JqZWN0
Lmg6CisgICAgICAgICogcnVudGltZS9TdHJpbmdQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlND
OjpTdHJpbmdQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6U3RyaW5n
UHJvdG90eXBlOjpjcmVhdGUpOgorICAgICAgICAqIHJ1bnRpbWUvU3RyaW5nUHJvdG90eXBlLmg6
CisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmUuY3BwOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1
cmU6OnZhbGlkYXRlRmxhZ3MpOgorICAgICAgICAqIHJ1bnRpbWUvVk0uY3BwOgorICAgICAgICAo
SlNDOjpWTTo6Vk0pOgorICAgICAgICAqIHJ1bnRpbWUvVk0uaDoKKyAgICAgICAgKiB0b29scy9K
U0RvbGxhclZNLmNwcDoKKwogMjAyMS0wMS0yNyAgQ29tbWl0IFF1ZXVlICA8Y29tbWl0LXF1ZXVl
QHdlYmtpdC5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcmV2ZXJ0aW5nIHIyNzExODYuCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAyNzE5NzUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAg
LTg5Niw2ICs4OTYsNyBAQCBzZXQoSmF2YVNjcmlwdENvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVB
CiAgICAgcnVudGltZS9HZW5lcmljVHlwZWRBcnJheVZpZXcuaAogICAgIHJ1bnRpbWUvR2VuZXJp
Y1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oCiAgICAgcnVudGltZS9HZXRQdXRJbmZvLmgKKyAgICBy
dW50aW1lL0dldHRlclNldHRlci5oCiAgICAgcnVudGltZS9HZXRWTS5oCiAgICAgcnVudGltZS9H
bG9iYWxFeGVjdXRhYmxlLmgKICAgICBydW50aW1lL0hhc2hNYXBJbXBsLmgKQEAgLTkzMCw2ICs5
MzEsNyBAQCBzZXQoSmF2YVNjcmlwdENvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBCiAgICAgcnVu
dGltZS9KU0Nhc3QuaAogICAgIHJ1bnRpbWUvSlNDZWxsLmgKICAgICBydW50aW1lL0pTQ2VsbElu
bGluZXMuaAorICAgIHJ1bnRpbWUvSlNDdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbi5oCiAgICAg
cnVudGltZS9KU0RhdGFWaWV3LmgKICAgICBydW50aW1lL0pTRGF0ZU1hdGguaAogICAgIHJ1bnRp
bWUvSlNEZXN0cnVjdGlibGVPYmplY3QuaApAQCAtOTg5LDYgKzk5MSw4IEBAIHNldChKYXZhU2Ny
aXB0Q29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUEKICAgICBydW50aW1lL01vZHVsZVByb2dyYW1F
eGVjdXRhYmxlLmgKICAgICBydW50aW1lL05hdGl2ZUV4ZWN1dGFibGUuaAogICAgIHJ1bnRpbWUv
TmF0aXZlRnVuY3Rpb24uaAorICAgIHJ1bnRpbWUvTnVsbEdldHRlckZ1bmN0aW9uLmgKKyAgICBy
dW50aW1lL051bGxTZXR0ZXJGdW5jdGlvbi5oCiAgICAgcnVudGltZS9OdW1iZXJPYmplY3QuaAog
ICAgIHJ1bnRpbWUvTnVtYmVyUHJvdG90eXBlLmgKICAgICBydW50aW1lL051bWVyaWNTdHJpbmdz
LmgKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdC5o
CShyZXZpc2lvbiAyNzE5NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJh
Y2tPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMTI1LDcgKzEyNSw3IEBAIHRlbXBsYXRlIDxj
bGFzcyBQYXJlbnQ+CiBjbGFzcyBKU0NhbGxiYWNrT2JqZWN0IGZpbmFsIDogcHVibGljIFBhcmVu
dCB7CiBwdWJsaWM6CiAgICAgdXNpbmcgQmFzZSA9IFBhcmVudDsKLSAgICBzdGF0aWMgY29uc3Rl
eHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBPdmVy
cmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNHZXRPd25TcGVjaWFsUHJvcGVydHlO
YW1lcyB8IE92ZXJyaWRlc0dldENhbGxEYXRhIHwgSW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xv
dEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8IEltcGxlbWVudHNIYXNJbnN0YW5jZSB8
IFByb2hpYml0c1Byb3BlcnR5Q2FjaGluZyB8IEdldE93blByb3BlcnR5U2xvdE1heUJlV3JvbmdB
Ym91dERvbnRFbnVtOworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxh
Z3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8
IE92ZXJyaWRlc0dldE93blNwZWNpYWxQcm9wZXJ0eU5hbWVzIHwgT3ZlcnJpZGVzR2V0Q2FsbERh
dGEgfCBPdmVycmlkZXNQdXQgfCBJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2
ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgSW1wbGVtZW50c0hhc0luc3RhbmNlIHwgUHJvaGliaXRz
UHJvcGVydHlDYWNoaW5nIHwgR2V0T3duUHJvcGVydHlTbG90TWF5QmVXcm9uZ0Fib3V0RG9udEVu
dW07CiAgICAgc3RhdGljX2Fzc2VydCghKFN0cnVjdHVyZUZsYWdzICYgSW1wbGVtZW50c0RlZmF1
bHRIYXNJbnN0YW5jZSksICJ1c2luZyBjdXN0b21IYXNJbnN0YW5jZSIpOwogCiAgICAgfkpTQ2Fs
bGJhY2tPYmplY3QoKTsKQEAgLTIzNCw4ICsyMzQsNiBAQCBwcml2YXRlOgogICAgIHN0YXRpYyBS
YXdOYXRpdmVGdW5jdGlvbiBnZXRDYWxsRnVuY3Rpb24oKTsKICAgICBzdGF0aWMgUmF3TmF0aXZl
RnVuY3Rpb24gZ2V0Q29uc3RydWN0RnVuY3Rpb24oKTsKIAotICAgIHVzaW5nIEdldFZhbHVlRnVu
YyA9IEVuY29kZWRKU1ZhbHVlKEpJVF9PUEVSQVRJT05fQVRUUklCVVRFUyopKEpTR2xvYmFsT2Jq
ZWN0KiwgRW5jb2RlZEpTVmFsdWUsIFByb3BlcnR5TmFtZSk7Ci0KICAgICBzdGF0aWMgR2V0VmFs
dWVGdW5jIGdldFN0YXRpY0Z1bmN0aW9uR2V0dGVyKCk7CiAgICAgc3RhdGljIEdldFZhbHVlRnVu
YyBnZXRDYWxsYmFja0dldHRlcigpOwogIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQ
SS9KU0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25zLmgJKHJldmlzaW9uIDI3MTk3
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdEZ1bmN0aW9u
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNTYsNiArMjU2LDkgQEAgYm9vbCBKU0NhbGxiYWNrT2Jq
ZWN0PFBhcmVudD46OnB1dChKU0NlbAogICAgIFZNJiB2bSA9IGdldFZNKGdsb2JhbE9iamVjdCk7
CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCisgICAgaWYgKFVO
TElLRUxZKGNlbGwgIT0gc2xvdC50aGlzVmFsdWUoKSkpCisgICAgICAgIFJFTEVBU0VfQU5EX1JF
VFVSTihzY29wZSwgYXNPYmplY3QoY2VsbCktPnB1dElubGluZVNsb3coZ2xvYmFsT2JqZWN0LCBw
cm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90LCBKU09iamVjdDo6UHV0SW5saW5lU2xvd01vZGU6Okln
bm9yZU93blNwZWNpYWxQcm9wZXJ0aWVzKSk7CisKICAgICBKU0NhbGxiYWNrT2JqZWN0KiB0aGlz
T2JqZWN0ID0ganNDYXN0PEpTQ2FsbGJhY2tPYmplY3QqPihjZWxsKTsKICAgICBKU0NvbnRleHRS
ZWYgY3R4ID0gdG9SZWYoZ2xvYmFsT2JqZWN0KTsKICAgICBKU09iamVjdFJlZiB0aGlzUmVmID0g
dG9SZWYoanNDYXN0PEpTT2JqZWN0Kj4odGhpc09iamVjdCkpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDI3MTk3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkp
CkBAIC0xMTgyLDcgKzExODIsNyBAQAogCQk3MEVDMEVDNzFBQTBEN0RBMDBCNkFBRkEgLyogU3Ry
aW5nSXRlcmF0b3JQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDcwRUMwRUMxMUFBMEQ3REEwMEI2QUFGQSAvKiBTdHJpbmdJdGVyYXRvclBy
b3RvdHlwZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTcwRUNBNjA2MUFGREJFQTIwMDQ0OTczOSAvKiBKU1RlbXBsYXRlT2JqZWN0RGVzY3JpcHRv
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzBFQ0E2
MDExQUZEQkVBMjAwNDQ5NzM5IC8qIEpTVGVtcGxhdGVPYmplY3REZXNjcmlwdG9yLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzBFQ0E2MDkxQUZE
QkVBMjAwNDQ5NzM5IC8qIFRlbXBsYXRlT2JqZWN0RGVzY3JpcHRvci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzBFQ0E2MDQxQUZEQkVBMjAwNDQ5NzM5
IC8qIFRlbXBsYXRlT2JqZWN0RGVzY3JpcHRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTcyQUFGN0NFMUQwRDMxQjMwMDVFNjBCRSAvKiBKU0N1
c3RvbUdldHRlclNldHRlckZ1bmN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA3MkFBRjdDQzFEMEQzMThCMDA1RTYwQkUgLyogSlNDdXN0b21HZXR0
ZXJTZXR0ZXJGdW5jdGlvbi5oICovOyB9OworCQk3MkFBRjdDRTFEMEQzMUIzMDA1RTYwQkUgLyog
SlNDdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNzJBQUY3Q0MxRDBEMzE4QjAwNUU2MEJFIC8qIEpTQ3VzdG9t
R2V0dGVyU2V0dGVyRnVuY3Rpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQk3MzExRkEzMjI0MERCMUQzMDAzRDQ4REIgLyogRGVsZXRlQnlJZFZh
cmlhbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcz
MTFGQTMxMjQwREIxRDMwMDNENDhEQiAvKiBEZWxldGVCeUlkVmFyaWFudC5oICovOyB9OwogCQk3
MzRCNjU1NTIzRjVDMTA0MDBBMDY5RDEgLyogRGVsZXRlUHJvcGVydHlTbG90LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MzRCNjU1NDIzRjRBMzMxMDBB
MDY5RDEgLyogRGVsZXRlUHJvcGVydHlTbG90LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzNBRDA2MjkyM0ZGNjYyNjAwRjUzNTkzIC8qIERlbGV0
ZUJ5U3RhdHVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA3M0FEMDYyODIzRkY2NjI2MDBGNTM1OTMgLyogRGVsZXRlQnlTdGF0dXMuaCAqLzsgfTsKQEAg
LTEyMzMsNiArMTIzMyw5IEBACiAJCTdDMTg0RTIzMTdCRUUyNDAwMDdDQjYzQSAvKiBKU1Byb21p
c2VDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gN0MxODRFMjExN0JFRTI0MDAwN0NCNjNBIC8qIEpTUHJvbWlzZUNvbnN0cnVjdG9yLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJN0U0RUU3
MDkwRUJCNzk2MzAwNTkzNEFBIC8qIFN0cnVjdHVyZUNoYWluLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3RTRFRTcwODBFQkI3OTYzMDA1OTM0QUEgLyog
U3RydWN0dXJlQ2hhaW4uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQk4NDA0ODAxMzEwMjFBMUQ5MDA4RTdGMDEgLyogSlNBUElWYWx1ZVdyYXBwZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDMDg5NEQ2
MEZBRkJBMkQwMDAwMTg2NSAvKiBKU0FQSVZhbHVlV3JhcHBlci5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTg0MEMwQ0ZBMjVDMjYxNDMwMEE3NTBB
MiAvKiBHZXR0ZXJTZXR0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEJDMzM3QkRFMEUxQUYwQjgwMDc2OTE4QSAvKiBHZXR0ZXJTZXR0ZXIuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk4NDU4NEFEMzI1
QzI2OUJEMDBGRDQyN0EgLyogTnVsbEdldHRlckZ1bmN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NTQ2RjUyMDFBMzJBNTlDMDA2RjA3RDUgLyog
TnVsbEdldHRlckZ1bmN0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKKwkJODQ1ODRBRDQyNUMyNjlEMzAwRkQ0MjdBIC8qIE51bGxTZXR0ZXJGdW5j
dGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjU1
MjVGQzQxQTZERDNCMzAwN0I1NDk1IC8qIE51bGxTZXR0ZXJGdW5jdGlvbi5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTg2MDE2MUUzMEYzQTgzQzEw
MEY4NDcxMCAvKiBBYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NjAxNjFERjBGM0E4M0MxMDBGODQ3MTAgLyogQWJz
dHJhY3RNYWNyb0Fzc2VtYmxlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTg2MDE2MUU0MEYzQTgzQzEwMEY4NDcxMCAvKiBNYWNyb0Fzc2VtYmxl
clg4Ni5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODYw
MTYxRTAwRjNBODNDMTAwRjg0NzEwIC8qIE1hY3JvQXNzZW1ibGVyWDg2LmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJODYwMTYxRTUwRjNBODNDMTAw
Rjg0NzEwIC8qIE1hY3JvQXNzZW1ibGVyWDg2XzY0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NjAxNjFFMTBGM0E4M0MxMDBGODQ3MTAgLyogTWFjcm9B
c3NlbWJsZXJYODZfNjQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwpAQCAtOTc2MCw2ICs5NzYzLDcgQEAKIAkJCQkwRjkzMzJBMDE0Q0E3RENEMDA4NUYz
QzYgLyogR2V0QnlTdGF0dXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTUyMEQ5OUYxMjM4OENDODEw
MDA1MDlBMyAvKiBHZXRCeVZhbEhpc3RvcnkuaCBpbiBIZWFkZXJzICovLAogCQkJCTc5NjQ2NTZB
MUI5NTJGRjAwMDMwNTlFRSAvKiBHZXRQdXRJbmZvLmggaW4gSGVhZGVycyAqLywKKwkJCQk4NDBD
MENGQTI1QzI2MTQzMDBBNzUwQTIgLyogR2V0dGVyU2V0dGVyLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk1MzRFMDM1ODFFNTNCRjJGMDAyMTNGNjQgLyogR2V0dGVyU2V0dGVyQWNjZXNzQ2FzZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJRkUxRDZENkYyMzYyNThGRTAwN0E1QzI2IC8qIEdldFZNLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRkVDM0M1QjFGMzNBNDg5MDBGNTlCNkMgLyogR2lnYWNhZ2VBbGln
bmVkTWVtb3J5QWxsb2NhdG9yLmggaW4gSGVhZGVycyAqLywKQEAgLTEwMjE5LDYgKzEwMjIzLDgg
QEAKIAkJCQlGRTE0MDkwNzIwNTZGM0ZGMDBDRkUzMTggLyogTmF0aXZlRnVuY3Rpb24uaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGRkI5MjIwMTZEMDMzQjcwMDU1QTVEQiAvKiBOb2RlQ29uc3RydWN0
b3JzLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQzRjBFMTZGNUNEMDBCMzQ0NjAgLyogTm9k
ZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTg0NTg0QUQzMjVDMjY5QkQwMEZENDI3QSAvKiBOdWxs
R2V0dGVyRnVuY3Rpb24uaCBpbiBIZWFkZXJzICovLAorCQkJCTg0NTg0QUQ0MjVDMjY5RDMwMEZE
NDI3QSAvKiBOdWxsU2V0dGVyRnVuY3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDQx
MEUxNkY1Q0QwMEIzNDQ2MCAvKiBOdW1iZXJDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQkMxOEM0NDIwRTE2RjVDRDAwQjM0NDYwIC8qIE51bWJlckNvbnN0cnVjdG9yLmx1dC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NDMwRTE2RjVDRDAwQjM0NDYwIC8qIE51bWJlck9iamVj
dC5oIGluIEhlYWRlcnMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIv
RGVidWdnZXJTY29wZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rl
YnVnZ2VyL0RlYnVnZ2VyU2NvcGUuY3BwCShyZXZpc2lvbiAyNzE5NzUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXJTY29wZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTExNywxNSArMTE3LDE1IEBAIGJvb2wgRGVidWdnZXJTY29wZTo6Z2V0T3duUHJvcGVydHlTbG90
KEoKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1ib29sIERlYnVnZ2VyU2NvcGU6OnB1dChKU0Nl
bGwqIGNlbGwsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZSBwcm9w
ZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKK2Jvb2wgRGVi
dWdnZXJTY29wZTo6ZGVmaW5lT3duUHJvcGVydHlWaWFQdXQoSlNPYmplY3QqIG9iamVjdCwgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNW
YWx1ZSB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBzbG90KQogewotICAgIERlYnVnZ2VyU2NvcGUq
IHNjb3BlID0ganNDYXN0PERlYnVnZ2VyU2NvcGUqPihjZWxsKTsKKyAgICBEZWJ1Z2dlclNjb3Bl
KiBzY29wZSA9IGpzQ2FzdDxEZWJ1Z2dlclNjb3BlKj4ob2JqZWN0KTsKICAgICBBU1NFUlQoc2Nv
cGUtPmlzVmFsaWQoKSk7CiAgICAgaWYgKCFzY29wZS0+aXNWYWxpZCgpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgSlNPYmplY3QqIHRoaXNPYmplY3QgPSBKU1Njb3BlOjpvYmplY3RBdFNj
b3BlKHNjb3BlLT5qc1Njb3BlKCkpOwogICAgIHNsb3Quc2V0VGhpc1ZhbHVlKEpTVmFsdWUodGhp
c09iamVjdCkpOwotICAgIHJldHVybiB0aGlzT2JqZWN0LT5tZXRob2RUYWJsZShnbG9iYWxPYmpl
Y3QtPnZtKCkpLT5wdXQodGhpc09iamVjdCwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHZh
bHVlLCBzbG90KTsKKyAgICByZXR1cm4gdGhpc09iamVjdC0+bWV0aG9kVGFibGUoZ2xvYmFsT2Jq
ZWN0LT52bSgpKS0+ZGVmaW5lT3duUHJvcGVydHlWaWFQdXQodGhpc09iamVjdCwgZ2xvYmFsT2Jq
ZWN0LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KTsKIH0KIAogYm9vbCBEZWJ1Z2dlclNjb3Bl
OjpkZWxldGVQcm9wZXJ0eShKU0NlbGwqIGNlbGwsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIERlbGV0ZVByb3BlcnR5U2xvdCYgc2xvdCkK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlclNjb3BlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyU2NvcGUu
aAkocmV2aXNpb24gMjcxOTc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0Rl
YnVnZ2VyU2NvcGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTAsOSArNTAsOSBAQCBwdWJsaWM6CiAg
ICAgc3RhdGljIFN0cmluZyBjbGFzc05hbWUoY29uc3QgSlNPYmplY3QqLCBWTSYpOwogICAgIHN0
YXRpYyBTdHJpbmcgdG9TdHJpbmdOYW1lKGNvbnN0IEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3Qq
KTsKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqLCBKU0dsb2Jh
bE9iamVjdCosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7Ci0gICAgc3RhdGljIGJvb2wg
cHV0KEpTQ2VsbCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQ
cm9wZXJ0eVNsb3QmKTsKICAgICBzdGF0aWMgYm9vbCBkZWxldGVQcm9wZXJ0eShKU0NlbGwqLCBK
U0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwgRGVsZXRlUHJvcGVydHlTbG90Jik7CiAgICAg
c3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0
KiwgUHJvcGVydHlOYW1lQXJyYXkmLCBEb250RW51bVByb3BlcnRpZXNNb2RlKTsKKyAgICBzdGF0
aWMgYm9vbCBkZWZpbmVPd25Qcm9wZXJ0eVZpYVB1dChKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0
KiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmKTsKICAgICBzdGF0aWMg
Ym9vbCBkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVy
dHlOYW1lLCBjb25zdCBQcm9wZXJ0eURlc2NyaXB0b3ImLCBib29sIHNob3VsZFRocm93KTsKIAog
ICAgIERFQ0xBUkVfRVhQT1JUX0lORk87CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9DbGFzc0luZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9DbGFzc0luZm8uaAkocmV2aXNpb24gMjcxOTc1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQ2xhc3NJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTcxLDkgKzcxLDYgQEAg
c3RydWN0IE1ldGhvZFRhYmxlIHsKICAgICB1c2luZyBHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4
RnVuY3Rpb25QdHIgPSBib29sICgqKShKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgdW5zaWdu
ZWQsIFByb3BlcnR5U2xvdCYpOwogICAgIEdldE93blByb3BlcnR5U2xvdEJ5SW5kZXhGdW5jdGlv
blB0ciBNRVRIT0RfVEFCTEVfRU5UUlkoZ2V0T3duUHJvcGVydHlTbG90QnlJbmRleCk7CiAKLSAg
ICB1c2luZyBEb1B1dFByb3BlcnR5U2VjdXJpdHlDaGVja0Z1bmN0aW9uUHRyID0gdm9pZCAoKiko
SlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwgUHV0UHJvcGVydHlTbG90
Jik7Ci0gICAgRG9QdXRQcm9wZXJ0eVNlY3VyaXR5Q2hlY2tGdW5jdGlvblB0ciBNRVRIT0RfVEFC
TEVfRU5UUlkoZG9QdXRQcm9wZXJ0eVNlY3VyaXR5Q2hlY2spOwotCiAgICAgdXNpbmcgVG9UaGlz
RnVuY3Rpb25QdHIgPSBKU1ZhbHVlICgqKShKU0NlbGwqLCBKU0dsb2JhbE9iamVjdCosIEVDTUFN
b2RlKTsKICAgICBUb1RoaXNGdW5jdGlvblB0ciBNRVRIT0RfVEFCTEVfRU5UUlkodG9UaGlzKTsK
IApAQCAtOTYsNiArOTMsOSBAQCBzdHJ1Y3QgTWV0aG9kVGFibGUgewogICAgIHVzaW5nIEN1c3Rv
bUhhc0luc3RhbmNlRnVuY3Rpb25QdHIgPSBib29sICgqKShKU09iamVjdCosIEpTR2xvYmFsT2Jq
ZWN0KiwgSlNWYWx1ZSk7CiAgICAgQ3VzdG9tSGFzSW5zdGFuY2VGdW5jdGlvblB0ciBNRVRIT0Rf
VEFCTEVfRU5UUlkoY3VzdG9tSGFzSW5zdGFuY2UpOwogCisgICAgdXNpbmcgRGVmaW5lT3duUHJv
cGVydHlGdW5jdGlvblZpYVB1dFB0ciA9IGJvb2wgKCopKEpTT2JqZWN0KiwgSlNHbG9iYWxPYmpl
Y3QqLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQcm9wZXJ0eVNsb3Qm
KTsKKyAgICBEZWZpbmVPd25Qcm9wZXJ0eUZ1bmN0aW9uVmlhUHV0UHRyIE1FVEhPRF9UQUJMRV9F
TlRSWShkZWZpbmVPd25Qcm9wZXJ0eVZpYVB1dCk7CisKICAgICB1c2luZyBEZWZpbmVPd25Qcm9w
ZXJ0eUZ1bmN0aW9uUHRyID0gYm9vbCAoKikoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFBy
b3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlEZXNjcmlwdG9yJiwgYm9vbCk7CiAgICAgRGVmaW5l
T3duUHJvcGVydHlGdW5jdGlvblB0ciBNRVRIT0RfVEFCTEVfRU5UUlkoZGVmaW5lT3duUHJvcGVy
dHkpOwogCkBAIC0xNTYsNyArMTU2LDYgQEAgc3RydWN0IE1ldGhvZFRhYmxlIHsKICAgICAgICAg
JkNsYXNzTmFtZTo6ZGVsZXRlUHJvcGVydHlCeUluZGV4LCBcCiAgICAgICAgICZDbGFzc05hbWU6
OmdldE93blByb3BlcnR5U2xvdCwgXAogICAgICAgICAmQ2xhc3NOYW1lOjpnZXRPd25Qcm9wZXJ0
eVNsb3RCeUluZGV4LCBcCi0gICAgICAgICZDbGFzc05hbWU6OmRvUHV0UHJvcGVydHlTZWN1cml0
eUNoZWNrLCBcCiAgICAgICAgICZDbGFzc05hbWU6OnRvVGhpcywgXAogICAgICAgICAmQ2xhc3NO
YW1lOjpkZWZhdWx0VmFsdWUsIFwKICAgICAgICAgJkNsYXNzTmFtZTo6Z2V0T3duUHJvcGVydHlO
YW1lcywgXApAQCAtMTY1LDYgKzE2NCw3IEBAIHN0cnVjdCBNZXRob2RUYWJsZSB7CiAgICAgICAg
ICZDbGFzc05hbWU6OmNsYXNzTmFtZSwgXAogICAgICAgICAmQ2xhc3NOYW1lOjp0b1N0cmluZ05h
bWUsIFwKICAgICAgICAgJkNsYXNzTmFtZTo6Y3VzdG9tSGFzSW5zdGFuY2UsIFwKKyAgICAgICAg
JkNsYXNzTmFtZTo6ZGVmaW5lT3duUHJvcGVydHlWaWFQdXQsIFwKICAgICAgICAgJkNsYXNzTmFt
ZTo6ZGVmaW5lT3duUHJvcGVydHksIFwKICAgICAgICAgJkNsYXNzTmFtZTo6cHJldmVudEV4dGVu
c2lvbnMsIFwKICAgICAgICAgJkNsYXNzTmFtZTo6aXNFeHRlbnNpYmxlLCBcCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbG9uZWRBcmd1bWVudHMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Nsb25lZEFyZ3VtZW50cy5jcHAJKHJl
dmlzaW9uIDI3MTk3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Nsb25lZEFy
Z3VtZW50cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwNCwxOSArMjA0LDE5IEBAIHZvaWQgQ2xv
bmVkQXJndW1lbnRzOjpnZXRPd25TcGVjaWFsUHJvcGUKICAgICAgICAgdGhpc09iamVjdC0+bWF0
ZXJpYWxpemVTcGVjaWFsc0lmTmVjZXNzYXJ5KGdsb2JhbE9iamVjdCk7CiB9CiAKLWJvb2wgQ2xv
bmVkQXJndW1lbnRzOjpwdXQoSlNDZWxsKiBjZWxsLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBQcm9wZXJ0eU5hbWUgaWRlbnQsIEpTVmFsdWUgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYg
c2xvdCkKK2Jvb2wgQ2xvbmVkQXJndW1lbnRzOjpkZWZpbmVPd25Qcm9wZXJ0eVZpYVB1dChKU09i
amVjdCogb2JqZWN0LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWUg
aWRlbnQsIEpTVmFsdWUgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKLSAgICBDbG9u
ZWRBcmd1bWVudHMqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8Q2xvbmVkQXJndW1lbnRzKj4oY2VsbCk7
CisgICAgQ2xvbmVkQXJndW1lbnRzKiB0aGlzT2JqZWN0ID0ganNDYXN0PENsb25lZEFyZ3VtZW50
cyo+KG9iamVjdCk7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIAogICAg
IGlmIChpZGVudCA9PSB2bS5wcm9wZXJ0eU5hbWVzLT5jYWxsZWUKICAgICAgICAgfHwgaWRlbnQg
PT0gdm0ucHJvcGVydHlOYW1lcy0+aXRlcmF0b3JTeW1ib2wpIHsKICAgICAgICAgdGhpc09iamVj
dC0+bWF0ZXJpYWxpemVTcGVjaWFsc0lmTmVjZXNzYXJ5KGdsb2JhbE9iamVjdCk7CiAgICAgICAg
IFB1dFByb3BlcnR5U2xvdCBkdW1teSA9IHNsb3Q7IC8vIFNoYWRvdyB0aGUgZ2l2ZW4gUHV0UHJv
cGVydHlTbG90IHRvIHByZXZlbnQgY2FjaGluZy4KLSAgICAgICAgcmV0dXJuIEJhc2U6OnB1dCh0
aGlzT2JqZWN0LCBnbG9iYWxPYmplY3QsIGlkZW50LCB2YWx1ZSwgZHVtbXkpOworICAgICAgICBy
ZXR1cm4gQmFzZTo6ZGVmaW5lT3duUHJvcGVydHlWaWFQdXQodGhpc09iamVjdCwgZ2xvYmFsT2Jq
ZWN0LCBpZGVudCwgdmFsdWUsIGR1bW15KTsKICAgICB9CiAgICAgCi0gICAgcmV0dXJuIEJhc2U6
OnB1dCh0aGlzT2JqZWN0LCBnbG9iYWxPYmplY3QsIGlkZW50LCB2YWx1ZSwgc2xvdCk7CisgICAg
cmV0dXJuIEJhc2U6OmRlZmluZU93blByb3BlcnR5VmlhUHV0KHRoaXNPYmplY3QsIGdsb2JhbE9i
amVjdCwgaWRlbnQsIHZhbHVlLCBzbG90KTsKIH0KIAogYm9vbCBDbG9uZWRBcmd1bWVudHM6OmRl
bGV0ZVByb3BlcnR5KEpTQ2VsbCogY2VsbCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
UHJvcGVydHlOYW1lIGlkZW50LCBEZWxldGVQcm9wZXJ0eVNsb3QmIHNsb3QpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbG9uZWRBcmd1bWVudHMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbG9uZWRBcmd1bWVudHMuaAkocmV2aXNp
b24gMjcxOTc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xvbmVkQXJndW1l
bnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTcxLDggKzcxLDggQEAgcHJpdmF0ZToKIAogICAgIHN0
YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0Kiwg
UHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKICAgICBzdGF0aWMgdm9pZCBnZXRPd25TcGVj
aWFsUHJvcGVydHlOYW1lcyhKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1l
QXJyYXkmLCBEb250RW51bVByb3BlcnRpZXNNb2RlKTsKLSAgICBzdGF0aWMgYm9vbCBwdXQoSlND
ZWxsKiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5
U2xvdCYpOwogICAgIHN0YXRpYyBib29sIGRlbGV0ZVByb3BlcnR5KEpTQ2VsbCosIEpTR2xvYmFs
T2JqZWN0KiwgUHJvcGVydHlOYW1lLCBEZWxldGVQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMg
Ym9vbCBkZWZpbmVPd25Qcm9wZXJ0eVZpYVB1dChKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0Kiwg
UHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmKTsKICAgICBzdGF0aWMgYm9v
bCBkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlO
YW1lLCBjb25zdCBQcm9wZXJ0eURlc2NyaXB0b3ImLCBib29sIHNob3VsZFRocm93KTsKICAgICAK
ICAgICBib29sIHNwZWNpYWxzTWF0ZXJpYWxpemVkKCkgY29uc3QgeyByZXR1cm4gIW1fY2FsbGVl
OyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DdXN0b21HZXR0ZXJTZXR0
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0N1c3Rv
bUdldHRlclNldHRlci5jcHAJKHJldmlzaW9uIDI3MTk3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0N1c3RvbUdldHRlclNldHRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2
LDI4ICsyNiwxMCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkN1c3RvbUdldHRl
clNldHRlci5oIgogCi0jaW5jbHVkZSAiSlNDSlNWYWx1ZUlubGluZXMuaCIKLSNpbmNsdWRlIDx3
dGYvQXNzZXJ0aW9ucy5oPgotCiBuYW1lc3BhY2UgSlNDIHsKIAogU1RBVElDX0FTU0VSVF9JU19U
UklWSUFMTFlfREVTVFJVQ1RJQkxFKEN1c3RvbUdldHRlclNldHRlcik7CiAKIGNvbnN0IENsYXNz
SW5mbyBDdXN0b21HZXR0ZXJTZXR0ZXI6OnNfaW5mbyA9IHsgIkN1c3RvbUdldHRlclNldHRlciIs
IG51bGxwdHIsIG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoQ3VzdG9tR2V0
dGVyU2V0dGVyKSB9OwogCi1UcmlTdGF0ZSBjYWxsQ3VzdG9tU2V0dGVyKEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEN1c3RvbUdldHRlclNldHRlcjo6Q3VzdG9tU2V0dGVyIHNldHRlciwg
Ym9vbCBpc0FjY2Vzc29yLCBKU09iamVjdCogc2xvdEJhc2UsIEpTVmFsdWUgdGhpc1ZhbHVlLCBK
U1ZhbHVlIHZhbHVlKQotewotICAgIGlmIChpc0FjY2Vzc29yKSB7Ci0gICAgICAgIGlmICghc2V0
dGVyKQotICAgICAgICAgICAgcmV0dXJuIFRyaVN0YXRlOjpGYWxzZTsKLSAgICAgICAgc2V0dGVy
KGdsb2JhbE9iamVjdCwgSlNWYWx1ZTo6ZW5jb2RlKHRoaXNWYWx1ZSksIEpTVmFsdWU6OmVuY29k
ZSh2YWx1ZSkpOwotICAgICAgICAvLyBBbHdheXMgcmV0dXJuIHRydWUgaWYgdGhlcmUgaXMgYSBz
ZXR0ZXIgYW5kIGl0IGlzIG9ic2VydmVkIGFzIGFuIGFjY2Vzc29yIHRvIHVzZXJzLgotICAgICAg
ICByZXR1cm4gVHJpU3RhdGU6OlRydWU7Ci0gICAgfQotCi0gICAgaWYgKCFzZXR0ZXIpCi0gICAg
ICAgIHJldHVybiBUcmlTdGF0ZTo6SW5kZXRlcm1pbmF0ZTsKLSAgICByZXR1cm4gdHJpU3RhdGUo
c2V0dGVyKGdsb2JhbE9iamVjdCwgSlNWYWx1ZTo6ZW5jb2RlKHNsb3RCYXNlKSwgSlNWYWx1ZTo6
ZW5jb2RlKHZhbHVlKSkpOwotfQotCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0N1c3RvbUdldHRlclNldHRlci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0N1c3RvbUdldHRlclNldHRlci5oCShyZXZp
c2lvbiAyNzE5NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DdXN0b21HZXR0
ZXJTZXR0ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNzYsNiArNzYsNCBAQCBwcml2YXRlOgogICAg
IEN1c3RvbVNldHRlciBtX3NldHRlcjsKIH07CiAKLUpTX0VYUE9SVF9QUklWQVRFIFRyaVN0YXRl
IGNhbGxDdXN0b21TZXR0ZXIoSlNHbG9iYWxPYmplY3QqLCBDdXN0b21HZXR0ZXJTZXR0ZXI6OkN1
c3RvbVNldHRlciwgYm9vbCBpc0FjY2Vzc29yLCBKU09iamVjdCogc2xvdEJhc2UsIEpTVmFsdWUg
dGhpc1ZhbHVlLCBKU1ZhbHVlKTsKLQogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvckNvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvckNvbnN0cnVjdG9yLmNwcAkocmV2
aXNpb24gMjcxOTc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JDb25z
dHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcwLDEwICs3MCwxMCBAQCBKU0NfREVGSU5F
X0hPU1RfRlVOQ1RJT04oY2FsbEVycm9yQ29uc3RyCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShFcnJvckluc3RhbmNlOjpjcmVhdGUoZ2xvYmFsT2JqZWN0LCBlcnJvclN0cnVjdHVyZSwgbWVz
c2FnZSwgbnVsbHB0ciwgVHlwZU5vdGhpbmcsIGZhbHNlKSk7CiB9CiAKLWJvb2wgRXJyb3JDb25z
dHJ1Y3Rvcjo6cHV0KEpTQ2VsbCogY2VsbCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
UHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgUHV0UHJvcGVydHlTbG90
JiBzbG90KQorYm9vbCBFcnJvckNvbnN0cnVjdG9yOjpkZWZpbmVPd25Qcm9wZXJ0eVZpYVB1dChK
U09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5h
bWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7
CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwotICAgIEVycm9yQ29uc3RydWN0b3Iq
IHRoaXNPYmplY3QgPSBqc0Nhc3Q8RXJyb3JDb25zdHJ1Y3Rvcio+KGNlbGwpOworICAgIEVycm9y
Q29uc3RydWN0b3IqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8RXJyb3JDb25zdHJ1Y3Rvcio+KG9iamVj
dCk7CiAKICAgICBpZiAocHJvcGVydHlOYW1lID09IHZtLnByb3BlcnR5TmFtZXMtPnN0YWNrVHJh
Y2VMaW1pdCkgewogICAgICAgICBpZiAodmFsdWUuaXNOdW1iZXIoKSkgewpAQCAtODUsNyArODUs
NyBAQCBib29sIEVycm9yQ29uc3RydWN0b3I6OnB1dChKU0NlbGwqIGNlbGwsCiAgICAgICAgICAg
ICB0aGlzT2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+c2V0U3RhY2tUcmFjZUxpbWl0KFdURjo6bnVs
bG9wdCk7CiAgICAgfQogCi0gICAgcmV0dXJuIEJhc2U6OnB1dCh0aGlzT2JqZWN0LCBnbG9iYWxP
YmplY3QsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpOworICAgIHJldHVybiBCYXNlOjpkZWZp
bmVPd25Qcm9wZXJ0eVZpYVB1dCh0aGlzT2JqZWN0LCBnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFt
ZSwgdmFsdWUsIHNsb3QpOwogfQogCiBib29sIEVycm9yQ29uc3RydWN0b3I6OmRlbGV0ZVByb3Bl
cnR5KEpTQ2VsbCogY2VsbCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlO
YW1lIHByb3BlcnR5TmFtZSwgRGVsZXRlUHJvcGVydHlTbG90JiBzbG90KQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JDb25zdHJ1Y3Rvci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9yQ29uc3RydWN0b3IuaAkocmV2aXNp
b24gMjcxOTc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JDb25zdHJ1
Y3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC00OSw3ICs0OSw3IEBAIHByaXZhdGU6CiAgICAgRXJy
b3JDb25zdHJ1Y3RvcihWTSYsIFN0cnVjdHVyZSopOwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24o
Vk0mLCBFcnJvclByb3RvdHlwZSopOwogCi0gICAgc3RhdGljIGJvb2wgcHV0KEpTQ2VsbCosIEpT
R2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmKTsK
KyAgICBzdGF0aWMgYm9vbCBkZWZpbmVPd25Qcm9wZXJ0eVZpYVB1dChKU09iamVjdCosIEpTR2xv
YmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmKTsKICAg
ICBzdGF0aWMgYm9vbCBkZWxldGVQcm9wZXJ0eShKU0NlbGwqLCBKU0dsb2JhbE9iamVjdCosIFBy
b3BlcnR5TmFtZSwgRGVsZXRlUHJvcGVydHlTbG90Jik7CiB9OwogU1RBVElDX0FTU0VSVF9JU09f
U1VCU1BBQ0VfU0hBUkFCTEUoRXJyb3JDb25zdHJ1Y3RvciwgSW50ZXJuYWxGdW5jdGlvbik7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvckluc3RhbmNlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvckluc3RhbmNlLmNw
cAkocmV2aXNpb24gMjcxOTc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJy
b3JJbnN0YW5jZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3NiwxNCArMjc2LDE0IEBAIGJvb2wg
RXJyb3JJbnN0YW5jZTo6ZGVmaW5lT3duUHJvcGVydHkoSlMKICAgICByZXR1cm4gQmFzZTo6ZGVm
aW5lT3duUHJvcGVydHkodGhpc09iamVjdCwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIGRl
c2NyaXB0b3IsIHNob3VsZFRocm93KTsKIH0KIAotYm9vbCBFcnJvckluc3RhbmNlOjpwdXQoSlND
ZWxsKiBjZWxsLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWUgcHJv
cGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCitib29sIEVy
cm9ySW5zdGFuY2U6OmRlZmluZU93blByb3BlcnR5VmlhUHV0KEpTT2JqZWN0KiBvYmplY3QsIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpT
VmFsdWUgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBWTSYgdm0gPSBnbG9i
YWxPYmplY3QtPnZtKCk7Ci0gICAgRXJyb3JJbnN0YW5jZSogdGhpc09iamVjdCA9IGpzQ2FzdDxF
cnJvckluc3RhbmNlKj4oY2VsbCk7CisgICAgRXJyb3JJbnN0YW5jZSogdGhpc09iamVjdCA9IGpz
Q2FzdDxFcnJvckluc3RhbmNlKj4ob2JqZWN0KTsKICAgICBib29sIG1hdGVyaWFsaXplZFByb3Bl
cnRpZXMgPSB0aGlzT2JqZWN0LT5tYXRlcmlhbGl6ZUVycm9ySW5mb0lmTmVlZGVkKHZtLCBwcm9w
ZXJ0eU5hbWUpOwogICAgIGlmIChtYXRlcmlhbGl6ZWRQcm9wZXJ0aWVzKQogICAgICAgICBzbG90
LmRpc2FibGVDYWNoaW5nKCk7Ci0gICAgcmV0dXJuIEJhc2U6OnB1dCh0aGlzT2JqZWN0LCBnbG9i
YWxPYmplY3QsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpOworICAgIHJldHVybiBCYXNlOjpk
ZWZpbmVPd25Qcm9wZXJ0eVZpYVB1dCh0aGlzT2JqZWN0LCBnbG9iYWxPYmplY3QsIHByb3BlcnR5
TmFtZSwgdmFsdWUsIHNsb3QpOwogfQogCiBib29sIEVycm9ySW5zdGFuY2U6OmRlbGV0ZVByb3Bl
cnR5KEpTQ2VsbCogY2VsbCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlO
YW1lIHByb3BlcnR5TmFtZSwgRGVsZXRlUHJvcGVydHlTbG90JiBzbG90KQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JJbnN0YW5jZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9ySW5zdGFuY2UuaAkocmV2aXNpb24gMjcx
OTc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JJbnN0YW5jZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC05NCw4ICs5NCw4IEBAIHByb3RlY3RlZDoKIAogICAgIHN0YXRpYyBi
b29sIGdldE93blByb3BlcnR5U2xvdChKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVy
dHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKICAgICBzdGF0aWMgdm9pZCBnZXRPd25TcGVjaWFsUHJv
cGVydHlOYW1lcyhKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lQXJyYXkm
LCBEb250RW51bVByb3BlcnRpZXNNb2RlKTsKKyAgICBzdGF0aWMgYm9vbCBkZWZpbmVPd25Qcm9w
ZXJ0eVZpYVB1dChKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBKU1Zh
bHVlLCBQdXRQcm9wZXJ0eVNsb3QmKTsKICAgICBzdGF0aWMgYm9vbCBkZWZpbmVPd25Qcm9wZXJ0
eShKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0
eURlc2NyaXB0b3ImLCBib29sIHNob3VsZFRocm93KTsKLSAgICBzdGF0aWMgYm9vbCBwdXQoSlND
ZWxsKiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5
U2xvdCYpOwogICAgIHN0YXRpYyBib29sIGRlbGV0ZVByb3BlcnR5KEpTQ2VsbCosIEpTR2xvYmFs
T2JqZWN0KiwgUHJvcGVydHlOYW1lLCBEZWxldGVQcm9wZXJ0eVNsb3QmKTsKICAgICBzdGF0aWMg
U3RyaW5nIHRvU3RyaW5nTmFtZShjb25zdCBKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0Kik7CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNBcmd1bWVudHMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljQXJndW1l
bnRzLmgJKHJldmlzaW9uIDI3MTk3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0dlbmVyaWNBcmd1bWVudHMuaAkod29ya2luZyBjb3B5KQpAQCAtNDgsMTAgKzQ4LDEwIEBAIHBy
b3RlY3RlZDoKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqLCBK
U0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CiAgICAgc3RhdGlj
IGJvb2wgZ2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0
KiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKICAgICBzdGF0aWMgdm9p
ZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0
eU5hbWVBcnJheSYsIERvbnRFbnVtUHJvcGVydGllc01vZGUpOwotICAgIHN0YXRpYyBib29sIHB1
dChKU0NlbGwqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0UHJv
cGVydHlTbG90Jik7CiAgICAgc3RhdGljIGJvb2wgcHV0QnlJbmRleChKU0NlbGwqLCBKU0dsb2Jh
bE9iamVjdCosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJv
dyk7CiAgICAgc3RhdGljIGJvb2wgZGVsZXRlUHJvcGVydHkoSlNDZWxsKiwgSlNHbG9iYWxPYmpl
Y3QqLCBQcm9wZXJ0eU5hbWUsIERlbGV0ZVByb3BlcnR5U2xvdCYpOwogICAgIHN0YXRpYyBib29s
IGRlbGV0ZVByb3BlcnR5QnlJbmRleChKU0NlbGwqLCBKU0dsb2JhbE9iamVjdCosIHVuc2lnbmVk
IHByb3BlcnR5TmFtZSk7CisgICAgc3RhdGljIGJvb2wgZGVmaW5lT3duUHJvcGVydHlWaWFQdXQo
SlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0UHJv
cGVydHlTbG90Jik7CiAgICAgc3RhdGljIGJvb2wgZGVmaW5lT3duUHJvcGVydHkoSlNPYmplY3Qq
LCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlEZXNjcmlwdG9y
JiwgYm9vbCBzaG91bGRUaHJvdyk7CiAgICAgCiAgICAgdm9pZCBpbml0TW9kaWZpZWRBcmd1bWVu
dHNEZXNjcmlwdG9yKEpTR2xvYmFsT2JqZWN0KiwgdW5zaWduZWQgbGVuZ3RoKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNBcmd1bWVudHNJbmxpbmVzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50
c0lubGluZXMuaAkocmV2aXNpb24gMjcxOTc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvR2VuZXJpY0FyZ3VtZW50c0lubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMTEyLDEw
ICsxMTIsMTMgQEAgdm9pZCBHZW5lcmljQXJndW1lbnRzPFR5cGU+OjpnZXRPd25Qcm9wZQogICAg
IHRoaXNPYmplY3QtPmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhnbG9iYWxPYmplY3QsIGFy
cmF5LCBtb2RlKTsKIH0KIAorLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMt
YXJndW1lbnRzLWV4b3RpYy1vYmplY3RzLXNldC1wLXYtcmVjZWl2ZXIKIHRlbXBsYXRlPHR5cGVu
YW1lIFR5cGU+Ci1ib29sIEdlbmVyaWNBcmd1bWVudHM8VHlwZT46OnB1dChKU0NlbGwqIGNlbGws
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZSBpZGVudCwgSlNWYWx1
ZSB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBzbG90KQorYm9vbCBHZW5lcmljQXJndW1lbnRzPFR5
cGU+OjpkZWZpbmVPd25Qcm9wZXJ0eVZpYVB1dChKU09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWUgaWRlbnQsIEpTVmFsdWUgdmFsdWUsIFB1
dFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKLSAgICBUeXBlKiB0aGlzT2JqZWN0ID0ganNDYXN0PFR5
cGUqPihjZWxsKTsKKyAgICBBU1NFUlQoIXBhcnNlSW5kZXgoaWRlbnQpKTsKKworICAgIFR5cGUq
IHRoaXNPYmplY3QgPSBqc0Nhc3Q8VHlwZSo+KG9iamVjdCk7CiAgICAgVk0mIHZtID0gZ2xvYmFs
T2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
ICAgICAKQEAgLTEyNiwyMyArMTI5LDEwIEBAIGJvb2wgR2VuZXJpY0FyZ3VtZW50czxUeXBlPjo6
cHV0KEpTQ2VsbCoKICAgICAgICAgdGhpc09iamVjdC0+b3ZlcnJpZGVUaGluZ3MoZ2xvYmFsT2Jq
ZWN0KTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZmFsc2UpOwogICAgICAg
ICBQdXRQcm9wZXJ0eVNsb3QgZHVtbXkgPSBzbG90OyAvLyBUaGlzIHB1dCBpcyBub3QgY2FjaGVh
YmxlLCBzbyB3ZSBzaGFkb3cgdGhlIHNsb3QgdGhhdCB3YXMgZ2l2ZW4gdG8gdXMuCi0gICAgICAg
IFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgQmFzZTo6cHV0KHRoaXNPYmplY3QsIGdsb2JhbE9i
amVjdCwgaWRlbnQsIHZhbHVlLCBkdW1teSkpOwotICAgIH0KLQotICAgIC8vIGh0dHBzOi8vdGMz
OS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWFyZ3VtZW50cy1leG90aWMtb2JqZWN0cy1zZXQtcC12
LXJlY2VpdmVyCi0gICAgLy8gRmFsbCBiYWNrIHRvIHRoZSBPcmRpbmFyeVNldCB3aGVuIHRoZSBy
ZWNlaXZlciBpcyBhbHRlcmVkIGZyb20gdGhlIHRoaXNPYmplY3QuCi0gICAgaWYgKFVOTElLRUxZ
KGlzVGhpc1ZhbHVlQWx0ZXJlZChzbG90LCB0aGlzT2JqZWN0KSkpCi0gICAgICAgIFJFTEVBU0Vf
QU5EX1JFVFVSTihzY29wZSwgb3JkaW5hcnlTZXRTbG93KGdsb2JhbE9iamVjdCwgdGhpc09iamVj
dCwgaWRlbnQsIHZhbHVlLCBzbG90LnRoaXNWYWx1ZSgpLCBzbG90LmlzU3RyaWN0TW9kZSgpKSk7
Ci0gICAgCi0gICAgT3B0aW9uYWw8dWludDMyX3Q+IGluZGV4ID0gcGFyc2VJbmRleChpZGVudCk7
Ci0gICAgaWYgKGluZGV4ICYmIHRoaXNPYmplY3QtPmlzTWFwcGVkQXJndW1lbnQoaW5kZXgudmFs
dWUoKSkpIHsKLSAgICAgICAgdGhpc09iamVjdC0+c2V0SW5kZXhRdWlja2x5KHZtLCBpbmRleC52
YWx1ZSgpLCB2YWx1ZSk7Ci0gICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBSRUxFQVNFX0FO
RF9SRVRVUk4oc2NvcGUsIEJhc2U6OmRlZmluZU93blByb3BlcnR5VmlhUHV0KHRoaXNPYmplY3Qs
IGdsb2JhbE9iamVjdCwgaWRlbnQsIHZhbHVlLCBkdW1teSkpOwogICAgIH0KIAotICAgIGF1dG8g
cmVzdWx0ID0gQmFzZTo6cHV0KHRoaXNPYmplY3QsIGdsb2JhbE9iamVjdCwgaWRlbnQsIHZhbHVl
LCBzbG90KTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBmYWxzZSk7Ci0gICAgUkVM
RUFTRV9BTkRfUkVUVVJOKHNjb3BlLCByZXN1bHQpOworICAgIFJFTEVBU0VfQU5EX1JFVFVSTihz
Y29wZSwgQmFzZTo6ZGVmaW5lT3duUHJvcGVydHlWaWFQdXQodGhpc09iamVjdCwgZ2xvYmFsT2Jq
ZWN0LCBpZGVudCwgdmFsdWUsIHNsb3QpKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVHlwZT4K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dldHRlclNldHRlci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dldHRlclNldHRlci5oCShy
ZXZpc2lvbiAyNzE5NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZXR0ZXJT
ZXR0ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNTQsNyArNTQsNyBAQCBwcml2YXRlOgogCiBwdWJs
aWM6CiAKLSAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFz
ZTo6U3RydWN0dXJlRmxhZ3MgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBTdHJ1Y3R1
cmVJc0ltbW9ydGFsOworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxh
Z3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8
IE92ZXJyaWRlc1B1dCB8IFN0cnVjdHVyZUlzSW1tb3J0YWw7CiAKICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+CiAgICAgc3RhdGljIElzb1N1YnNwYWNlKiBz
dWJzcGFjZUZvcihWTSYgdm0pCkBAIC0xMjYsNiArMTI2LDcgQEAgcHVibGljOgogICAgIHN0YXRp
YyBib29sIHB1dChKU0NlbGwqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwgSlNWYWx1
ZSwgUHV0UHJvcGVydHlTbG90JikgeyBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyByZXR1
cm4gZmFsc2U7IH0KICAgICBzdGF0aWMgYm9vbCBwdXRCeUluZGV4KEpTQ2VsbCosIEpTR2xvYmFs
T2JqZWN0KiwgdW5zaWduZWQsIEpTVmFsdWUsIGJvb2wpIHsgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsgcmV0dXJuIGZhbHNlOyB9CiAgICAgc3RhdGljIGJvb2wgc2V0UHJvdG90eXBlKEpT
T2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlLCBib29sKSB7IFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7IHJldHVybiBmYWxzZTsgfQorICAgIHN0YXRpYyBib29sIGRlZmluZU93
blByb3BlcnR5VmlhUHV0KEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUs
IEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpIHsgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsgcmV0dXJuIGZhbHNlOyB9CiAgICAgc3RhdGljIGJvb2wgZGVmaW5lT3duUHJvcGVydHkoSlNP
YmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlEZXNj
cmlwdG9yJiwgYm9vbCkgeyBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyByZXR1cm4gZmFs
c2U7IH0KICAgICBzdGF0aWMgYm9vbCBkZWxldGVQcm9wZXJ0eShKU0NlbGwqLCBKU0dsb2JhbE9i
amVjdCosIFByb3BlcnR5TmFtZSwgRGVsZXRlUHJvcGVydHlTbG90JikgeyBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOyByZXR1cm4gZmFsc2U7IH0KIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAJKHJldmlzaW9uIDI3MTk3NSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzIs
MTYgKzIzMiwxMiBAQCBib29sIEpTQXJyYXk6OmdldE93blByb3BlcnR5U2xvdChKU09iamVjCiB9
CiAKIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXktZXhvdGljLW9iamVjdHMt
ZGVmaW5lb3ducHJvcGVydHktcC1kZXNjCi1ib29sIEpTQXJyYXk6OnB1dChKU0NlbGwqIGNlbGws
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUs
IEpTVmFsdWUgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKK2Jvb2wgSlNBcnJheTo6ZGVm
aW5lT3duUHJvcGVydHlWaWFQdXQoSlNPYmplY3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgUHV0
UHJvcGVydHlTbG90JiBzbG90KQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsK
ICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKLSAgICBKU0FycmF5
KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQXJyYXkqPihjZWxsKTsKLQotICAgIGlmIChVTkxJS0VM
WShpc1RoaXNWYWx1ZUFsdGVyZWQoc2xvdCwgdGhpc09iamVjdCkpKQotICAgICAgICBSRUxFQVNF
X0FORF9SRVRVUk4oc2NvcGUsIG9yZGluYXJ5U2V0U2xvdyhnbG9iYWxPYmplY3QsIHRoaXNPYmpl
Y3QsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QudGhpc1ZhbHVlKCksIHNsb3QuaXNTdHJpY3RN
b2RlKCkpKTsKLQorICAgIEpTQXJyYXkqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNBcnJheSo+KG9i
amVjdCk7CiAgICAgdGhpc09iamVjdC0+ZW5zdXJlV3JpdGFibGUodm0pOwogCiAgICAgaWYgKHBy
b3BlcnR5TmFtZSA9PSB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgpIHsKQEAgLTI2Miw3ICsyNTgs
NyBAQCBib29sIEpTQXJyYXk6OnB1dChKU0NlbGwqIGNlbGwsIEpTR2xvYmFsCiAgICAgICAgIFJF
TEVBU0VfQU5EX1JFVFVSTihzY29wZSwgdGhpc09iamVjdC0+c2V0TGVuZ3RoKGdsb2JhbE9iamVj
dCwgbmV3TGVuZ3RoLCBzbG90LmlzU3RyaWN0TW9kZSgpKSk7CiAgICAgfQogCi0gICAgUkVMRUFT
RV9BTkRfUkVUVVJOKHNjb3BlLCBKU09iamVjdDo6cHV0KHRoaXNPYmplY3QsIGdsb2JhbE9iamVj
dCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCkpOworICAgIFJFTEVBU0VfQU5EX1JFVFVSTihz
Y29wZSwgSlNPYmplY3Q6OmRlZmluZU93blByb3BlcnR5VmlhUHV0KHRoaXNPYmplY3QsIGdsb2Jh
bE9iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCkpOwogfQogCiBib29sIEpTQXJyYXk6
OmRlbGV0ZVByb3BlcnR5KEpTQ2VsbCogY2VsbCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgRGVsZXRlUHJvcGVydHlTbG90JiBzbG90KQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaAkocmV2aXNpb24gMjcx
OTc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5oCSh3b3JraW5n
IGNvcHkpCkBAIC04OCw2ICs4OCw3IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyB2b2lkIGVhZ2Vy
bHlJbml0aWFsaXplQnV0dGVyZmx5KE9iamVjdEluaXRpYWxpemF0aW9uU2NvcGUmLCBKU0FycmF5
KiwgdW5zaWduZWQgaW5pdGlhbExlbmd0aCk7CiAKKyAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0
aWMgYm9vbCBkZWZpbmVPd25Qcm9wZXJ0eVZpYVB1dChKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0
KiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmKTsKICAgICBKU19FWFBP
UlRfUFJJVkFURSBzdGF0aWMgYm9vbCBkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCosIEpTR2xv
YmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eURlc2NyaXB0b3ImLCBib29s
IHRocm93RXhjZXB0aW9uKTsKIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBib29sIGdl
dE93blByb3BlcnR5U2xvdChKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1l
LCBQcm9wZXJ0eVNsb3QmKTsKQEAgLTE4Niw4ICsxODcsNiBAQCBwcm90ZWN0ZWQ6CiAgICAgICAg
IEFTU0VSVF9XSVRIX01FU1NBR0UodHlwZSgpID09IEFycmF5VHlwZSB8fCB0eXBlKCkgPT0gRGVy
aXZlZEFycmF5VHlwZSwgIkluc3RhbmNlIGluaGVyaXRpbmcgSlNBcnJheSBzaG91bGQgaGF2ZSBl
aXRoZXIgQXJyYXlUeXBlIG9yIERlcml2ZWRBcnJheVR5cGUiKTsKICAgICB9CiAKLSAgICBzdGF0
aWMgYm9vbCBwdXQoSlNDZWxsKiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIEpTVmFs
dWUsIFB1dFByb3BlcnR5U2xvdCYpOwotCiAgICAgc3RhdGljIGJvb2wgZGVsZXRlUHJvcGVydHko
SlNDZWxsKiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIERlbGV0ZVByb3BlcnR5U2xv
dCYpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGdldE93blNwZWNpYWxQcm9w
ZXJ0eU5hbWVzKEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWVBcnJheSYs
IERvbnRFbnVtUHJvcGVydGllc01vZGUpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuY3BwCShyZXZpc2lvbiAyNzE5NzUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTE2OSwxOCArMTY5LDYgQEAgdm9pZCBKU0FycmF5QnVmZmVyVmll
dzo6dmlzaXRDaGlsZHJlbihKUwogICAgIH0KIH0KIAotYm9vbCBKU0FycmF5QnVmZmVyVmlldzo6
cHV0KAotICAgIEpTQ2VsbCogY2VsbCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHJv
cGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwKLSAgICBQdXRQcm9wZXJ0eVNs
b3QmIHNsb3QpCi17Ci0gICAgSlNBcnJheUJ1ZmZlclZpZXcqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8
SlNBcnJheUJ1ZmZlclZpZXcqPihjZWxsKTsKLQotICAgIGlmIChVTkxJS0VMWShpc1RoaXNWYWx1
ZUFsdGVyZWQoc2xvdCwgdGhpc09iamVjdCkpKQotICAgICAgICByZXR1cm4gb3JkaW5hcnlTZXRT
bG93KGdsb2JhbE9iamVjdCwgdGhpc09iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdC50
aGlzVmFsdWUoKSwgc2xvdC5pc1N0cmljdE1vZGUoKSk7Ci0gICAgCi0gICAgcmV0dXJuIEJhc2U6
OnB1dCh0aGlzT2JqZWN0LCBnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3Qp
OwotfQotCiBBcnJheUJ1ZmZlciogSlNBcnJheUJ1ZmZlclZpZXc6OnVuc2hhcmVkQnVmZmVyKCkK
IHsKICAgICBBcnJheUJ1ZmZlciogcmVzdWx0ID0gcG9zc2libHlTaGFyZWRCdWZmZXIoKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZp
ZXcuaAkocmV2aXNpb24gMjcxOTc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNBcnJheUJ1ZmZlclZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAtMTY5LDggKzE2OSw2IEBAIHBy
b3RlY3RlZDoKICAgICAKICAgICBKU19FWFBPUlRfUFJJVkFURSBKU0FycmF5QnVmZmVyVmlldyhW
TSYsIENvbnN0cnVjdGlvbkNvbnRleHQmKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGZp
bmlzaENyZWF0aW9uKFZNJik7Ci0gICAgCi0gICAgc3RhdGljIGJvb2wgcHV0KEpTQ2VsbCosIEpT
R2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmKTsK
IAogICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsK
ICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0pTVmFsdWUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0pTVmFsdWUu
Y3BwCShyZXZpc2lvbiAyNzE5NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0NKU1ZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjE5LDcgKzIxOSw3IEBAIEpTT2JqZWN0
KiBKU1ZhbHVlOjpzeW50aGVzaXplUHJvdG90eXBlKEoKICAgICByZXR1cm4gbnVsbHB0cjsKIH0K
IAotLy8gRUNNQSA4LjcuMgorLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vcmRpbmFy
eXNldAogYm9vbCBKU1ZhbHVlOjpwdXRUb1ByaW1pdGl2ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBQdXRQcm9w
ZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwpAQCAt
MjMzLDYzICsyMzMsMTEgQEAgYm9vbCBKU1ZhbHVlOjpwdXRUb1ByaW1pdGl2ZShKU0dsb2JhbE9i
agogICAgIEVYQ0VQVElPTl9BU1NFUlQoISFzY29wZS5leGNlcHRpb24oKSA9PSAhb2JqKTsKICAg
ICBpZiAoVU5MSUtFTFkoIW9iaikpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBKU1ZhbHVl
IHByb3RvdHlwZTsKLSAgICBpZiAocHJvcGVydHlOYW1lICE9IHZtLnByb3BlcnR5TmFtZXMtPnVu
ZGVyc2NvcmVQcm90bykgewotICAgICAgICB3aGlsZSAodHJ1ZSkgewotICAgICAgICAgICAgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUgPSBvYmotPnN0cnVjdHVyZSh2bSk7Ci0gICAgICAgICAgICBpZiAo
c3RydWN0dXJlLT5oYXNSZWFkT25seU9yR2V0dGVyU2V0dGVyUHJvcGVydGllc0V4Y2x1ZGluZ1By
b3RvKCkgfHwgc3RydWN0dXJlLT50eXBlSW5mbygpLmhhc1B1dFByb3BlcnR5U2VjdXJpdHlDaGVj
aygpKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgaWYgKG9iai0+dHlwZSgp
ID09IFByb3h5T2JqZWN0VHlwZSkgewotICAgICAgICAgICAgICAgIGF1dG8qIHByb3h5ID0ganND
YXN0PFByb3h5T2JqZWN0Kj4ob2JqKTsKLSAgICAgICAgICAgICAgICBSRUxFQVNFX0FORF9SRVRV
Uk4oc2NvcGUsIHByb3h5LT5Qcm94eU9iamVjdDo6cHV0KHByb3h5LCBnbG9iYWxPYmplY3QsIHBy
b3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHBy
b3RvdHlwZSA9IG9iai0+Z2V0UHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QpOwotICAgICAgICAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZmFsc2UpOwotCi0gICAgICAgICAgICBpZiAo
cHJvdG90eXBlLmlzTnVsbCgpKQotICAgICAgICAgICAgICAgIHJldHVybiB0eXBlRXJyb3IoZ2xv
YmFsT2JqZWN0LCBzY29wZSwgc2xvdC5pc1N0cmljdE1vZGUoKSwgUmVhZG9ubHlQcm9wZXJ0eVdy
aXRlRXJyb3IpOwotICAgICAgICAgICAgb2JqID0gYXNPYmplY3QocHJvdG90eXBlKTsKLSAgICAg
ICAgfQotICAgIH0KIAotICAgIGZvciAoOyA7IG9iaiA9IGFzT2JqZWN0KHByb3RvdHlwZSkpIHsK
LSAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBvYmotPnN0cnVjdHVyZSh2bSk7Ci0gICAg
ICAgIGlmIChVTkxJS0VMWShzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkuaGFzUHV0UHJvcGVydHlTZWN1
cml0eUNoZWNrKCkpKSB7Ci0gICAgICAgICAgICBvYmotPm1ldGhvZFRhYmxlKHZtKS0+ZG9QdXRQ
cm9wZXJ0eVNlY3VyaXR5Q2hlY2sob2JqLCBnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgc2xv
dCk7Ci0gICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBmYWxzZSk7Ci0gICAg
ICAgIH0KLSAgICAgICAgdW5zaWduZWQgYXR0cmlidXRlczsKLSAgICAgICAgUHJvcGVydHlPZmZz
ZXQgb2Zmc2V0ID0gc3RydWN0dXJlLT5nZXQodm0sIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcyk7
Ci0gICAgICAgIGlmIChvZmZzZXQgIT0gaW52YWxpZE9mZnNldCkgewotICAgICAgICAgICAgaWYg
KGF0dHJpYnV0ZXMgJiBQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIHR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCBzbG90LmlzU3RyaWN0TW9k
ZSgpLCBSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcik7Ci0KLSAgICAgICAgICAgIEpTVmFsdWUg
Z3MgPSBvYmotPmdldERpcmVjdChvZmZzZXQpOwotICAgICAgICAgICAgaWYgKGdzLmlzR2V0dGVy
U2V0dGVyKCkpCi0gICAgICAgICAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBjYWxs
U2V0dGVyKGdsb2JhbE9iamVjdCwgKnRoaXMsIGdzLCB2YWx1ZSwgc2xvdC5pc1N0cmljdE1vZGUo
KSA/IEVDTUFNb2RlOjpzdHJpY3QoKSA6IEVDTUFNb2RlOjpzbG9wcHkoKSkpOwotCi0gICAgICAg
ICAgICBpZiAoZ3MuaXNDdXN0b21HZXR0ZXJTZXR0ZXIoKSkgewotICAgICAgICAgICAgICAgIGF1
dG8gc2V0dGVyID0ganNDYXN0PEN1c3RvbUdldHRlclNldHRlcio+KGdzLmFzQ2VsbCgpKS0+c2V0
dGVyKCk7Ci0gICAgICAgICAgICAgICAgYm9vbCBpc0FjY2Vzc29yID0gYXR0cmlidXRlcyAmIFBy
b3BlcnR5QXR0cmlidXRlOjpDdXN0b21BY2Nlc3NvcjsKLSAgICAgICAgICAgICAgICBhdXRvIHJl
c3VsdCA9IGNhbGxDdXN0b21TZXR0ZXIoZ2xvYmFsT2JqZWN0LCBzZXR0ZXIsIGlzQWNjZXNzb3Is
IG9iaiwgc2xvdC50aGlzVmFsdWUoKSwgdmFsdWUpOwotICAgICAgICAgICAgICAgIGlmIChyZXN1
bHQgIT0gVHJpU3RhdGU6OkluZGV0ZXJtaW5hdGUpCi0gICAgICAgICAgICAgICAgICAgIFJFTEVB
U0VfQU5EX1JFVFVSTihzY29wZSwgcmVzdWx0ID09IFRyaVN0YXRlOjpUcnVlKTsKLSAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgLy8gSWYgdGhlcmUncyBhbiBleGlzdGluZyBwcm9wZXJ0eSBv
biB0aGUgb2JqZWN0IG9yIG9uZSBvZiBpdHMgCi0gICAgICAgICAgICAvLyBwcm90b3R5cGVzIGl0
IHNob3VsZCBiZSByZXBsYWNlZCwgc28gYnJlYWsgaGVyZS4KLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICB9Ci0gICAgICAgIGlmIChvYmotPnR5cGUoKSA9PSBQcm94eU9iamVjdFR5cGUpIHsK
LSAgICAgICAgICAgIGF1dG8qIHByb3h5ID0ganNDYXN0PFByb3h5T2JqZWN0Kj4ob2JqKTsKLSAg
ICAgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgcHJveHktPlByb3h5T2JqZWN0Ojpw
dXQocHJveHksIGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCkpOwotICAg
ICAgICB9Ci0gICAgICAgIHByb3RvdHlwZSA9IG9iai0+Z2V0UHJvdG90eXBlKHZtLCBnbG9iYWxP
YmplY3QpOwotICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBmYWxzZSk7Ci0gICAg
ICAgIGlmIChwcm90b3R5cGUuaXNOdWxsKCkpCi0gICAgICAgICAgICBicmVhazsKLSAgICB9Ci0g
ICAgCisgICAgaWYgKCFvYmotPmNhblBlcmZvcm1GYXN0UHV0SW5saW5lKHZtLCBwcm9wZXJ0eU5h
bWUpKQorICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIG9iai0+cHV0SW5saW5lU2xv
dyhnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpKTsKKworICAgIC8vIEZJ
WE1FOiBGb3IgYW4gYXR0ZW1wdCB0byBjcmVhdGUgYSBwcm9wZXJ0eSBvbiBhIHByaW1pdGl2ZSwg
dGhlIGVycm9yIG1lc3NhZ2UgaXMgbWlzbGVhZGluZy4KICAgICByZXR1cm4gdHlwZUVycm9yKGds
b2JhbE9iamVjdCwgc2NvcGUsIHNsb3QuaXNTdHJpY3RNb2RlKCksIFJlYWRvbmx5UHJvcGVydHlX
cml0ZUVycm9yKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlND
ZWxsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Nl
bGwuY3BwCShyZXZpc2lvbiAyNzE5NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0NlbGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDEsMTEgKzIwMSw2IEBAIGJvb2wgSlND
ZWxsOjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEoKICAgICByZXR1cm4gZmFsc2U7CiB9CiAK
LXZvaWQgSlNDZWxsOjpkb1B1dFByb3BlcnR5U2VjdXJpdHlDaGVjayhKU09iamVjdCosIEpTR2xv
YmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBQdXRQcm9wZXJ0eVNsb3QmKQotewotICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci19Ci0KIHZvaWQgSlNDZWxsOjpnZXRPd25Qcm9wZXJ0
eU5hbWVzKEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIERv
bnRFbnVtUHJvcGVydGllc01vZGUpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKQEAgLTIzOSw2ICsyMzQsMTIgQEAgYm9vbCBKU0NlbGw6OmN1c3RvbUhhc0luc3RhbmNlKEpT
T2JqZWN0KgogICAgIHJldHVybiBmYWxzZTsKIH0KIAorYm9vbCBKU0NlbGw6OmRlZmluZU93blBy
b3BlcnR5VmlhUHV0KEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIEpT
VmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpCit7CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKIGJvb2wgSlNDZWxsOjpkZWZpbmVPd25Qcm9w
ZXJ0eShKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBjb25zdCBQcm9w
ZXJ0eURlc2NyaXB0b3ImLCBib29sKQogewogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAkocmV2aXNpb24g
MjcxOTc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgJKHdvcmtp
bmcgY29weSkKQEAgLTI1NiwxMCArMjU2LDEwIEBAIHByb3RlY3RlZDoKICAgICBzdGF0aWMgU3Ry
aW5nIGNsYXNzTmFtZShjb25zdCBKU09iamVjdCosIFZNJik7CiAgICAgc3RhdGljIFN0cmluZyB0
b1N0cmluZ05hbWUoY29uc3QgSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCopOwogICAgIEpTX0VY
UE9SVF9QUklWQVRFIHN0YXRpYyBib29sIGN1c3RvbUhhc0luc3RhbmNlKEpTT2JqZWN0KiwgSlNH
bG9iYWxPYmplY3QqLCBKU1ZhbHVlKTsKKyAgICBzdGF0aWMgYm9vbCBkZWZpbmVPd25Qcm9wZXJ0
eVZpYVB1dChKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVl
LCBQdXRQcm9wZXJ0eVNsb3QmKTsKICAgICBzdGF0aWMgYm9vbCBkZWZpbmVPd25Qcm9wZXJ0eShK
U09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eURl
c2NyaXB0b3ImLCBib29sIHNob3VsZFRocm93KTsKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9w
ZXJ0eVNsb3QoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwgUHJvcGVy
dHlTbG90Jik7CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU09i
amVjdCosIEpTR2xvYmFsT2JqZWN0KiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNs
b3QmKTsKLSAgICBzdGF0aWMgTk9fUkVUVVJOX0RVRV9UT19DUkFTSCB2b2lkIGRvUHV0UHJvcGVy
dHlTZWN1cml0eUNoZWNrKEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUs
IFB1dFByb3BlcnR5U2xvdCYpOwogCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBMTEludE9m
ZnNldHNFeHRyYWN0b3I7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0N1
c3RvbUdldHRlclNldHRlckZ1bmN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0N1c3RvbUdldHRlclNldHRlckZ1bmN0aW9uLmNwcAkocmV2aXNp
b24gMjcxOTc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDdXN0b21HZXR0
ZXJTZXR0ZXJGdW5jdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDgwICsyNiw4MyBAQAog
I2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkpTQ3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rp
b24uaCIKIAotI2luY2x1ZGUgIkN1c3RvbUdldHRlclNldHRlci5oIgogI2luY2x1ZGUgIkpTQ0pT
VmFsdWVJbmxpbmVzLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCi1jb25zdCBDbGFzc0luZm8gSlND
dXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbjo6c19pbmZvID0geyAiRnVuY3Rpb24iLCAmQmFzZTo6
c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTQ3VzdG9tR2V0
dGVyU2V0dGVyRnVuY3Rpb24pIH07Citjb25zdCBDbGFzc0luZm8gSlNDdXN0b21HZXR0ZXJGdW5j
dGlvbjo6c19pbmZvID0geyAiRnVuY3Rpb24iLCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxs
cHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTQ3VzdG9tR2V0dGVyRnVuY3Rpb24pIH07CitzdGF0
aWMgSlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElPTihjdXN0b21HZXR0ZXJGdW5jdGlvbkNhbGwpOwog
Ci1zdGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElPTihjdXN0b21HZXR0ZXJTZXR0ZXJGdW5j
dGlvbkNhbGwpOwotCi1KU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oY3VzdG9tR2V0dGVyU2V0dGVy
RnVuY3Rpb25DYWxsLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBj
YWxsRnJhbWUpKQorSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGN1c3RvbUdldHRlckZ1bmN0aW9u
Q2FsbCwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1l
KSkKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCi0gICAgSlNDdXN0b21HZXR0ZXJTZXR0ZXJGdW5j
dGlvbiogY3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rpb24gPSBqc0Nhc3Q8SlNDdXN0b21HZXR0ZXJT
ZXR0ZXJGdW5jdGlvbio+KGNhbGxGcmFtZS0+anNDYWxsZWUoKSk7Ci0gICAgQ3VzdG9tR2V0dGVy
U2V0dGVyKiBjdXN0b21HZXR0ZXJTZXR0ZXIgPSBjdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbi0+
Y3VzdG9tR2V0dGVyU2V0dGVyKCk7CisgICAgSlNDdXN0b21HZXR0ZXJGdW5jdGlvbiogY3VzdG9t
R2V0dGVyRnVuY3Rpb24gPSBqc0Nhc3Q8SlNDdXN0b21HZXR0ZXJGdW5jdGlvbio+KGNhbGxGcmFt
ZS0+anNDYWxsZWUoKSk7CiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBjYWxsRnJhbWUtPnRoaXNW
YWx1ZSgpOwogCi0gICAgaWYgKGN1c3RvbUdldHRlclNldHRlckZ1bmN0aW9uLT5pc1NldHRlcigp
KSB7Ci0gICAgICAgIEN1c3RvbUdldHRlclNldHRlcjo6Q3VzdG9tU2V0dGVyIHNldHRlciA9IGN1
c3RvbUdldHRlclNldHRlci0+c2V0dGVyKCk7Ci0gICAgICAgIEFTU0VSVChzZXR0ZXIpOwotICAg
ICAgICBzY29wZS5yZWxlYXNlKCk7Ci0gICAgICAgIHNldHRlcihnbG9iYWxPYmplY3QsIEpTVmFs
dWU6OmVuY29kZSh0aGlzVmFsdWUpLCBKU1ZhbHVlOjplbmNvZGUoY2FsbEZyYW1lLT5hcmd1bWVu
dCgwKSkpOwotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwot
ICAgIH0KKyAgICBHZXRWYWx1ZUZ1bmMgZ2V0dGVyID0gY3VzdG9tR2V0dGVyRnVuY3Rpb24tPmdl
dHRlcigpOworICAgIEFTU0VSVChnZXR0ZXIpOwogCi0gICAgaWYgKGN1c3RvbUdldHRlclNldHRl
ci0+aW5oZXJpdHM8RE9NQXR0cmlidXRlR2V0dGVyU2V0dGVyPih2bSkpIHsKLSAgICAgICAgYXV0
byBkb21BdHRyaWJ1dGUgPSBqc0Nhc3Q8RE9NQXR0cmlidXRlR2V0dGVyU2V0dGVyKj4oY3VzdG9t
R2V0dGVyU2V0dGVyKS0+ZG9tQXR0cmlidXRlKCk7Ci0gICAgICAgIGlmICghdGhpc1ZhbHVlLmlu
aGVyaXRzKHZtLCBkb21BdHRyaWJ1dGUuY2xhc3NJbmZvKSkKLSAgICAgICAgICAgIHJldHVybiB0
aHJvd1ZNRE9NQXR0cmlidXRlR2V0dGVyVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsIGRv
bUF0dHJpYnV0ZS5jbGFzc0luZm8sIGN1c3RvbUdldHRlclNldHRlckZ1bmN0aW9uLT5wcm9wZXJ0
eU5hbWUoKSk7CisgICAgaWYgKGF1dG8gZG9tQXR0cmlidXRlID0gY3VzdG9tR2V0dGVyRnVuY3Rp
b24tPmRvbUF0dHJpYnV0ZSgpKSB7CisgICAgICAgIGlmICghdGhpc1ZhbHVlLmluaGVyaXRzKHZt
LCBkb21BdHRyaWJ1dGUtPmNsYXNzSW5mbykpCisgICAgICAgICAgICByZXR1cm4gdGhyb3dWTURP
TUF0dHJpYnV0ZUdldHRlclR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCBkb21BdHRyaWJ1
dGUtPmNsYXNzSW5mbywgY3VzdG9tR2V0dGVyRnVuY3Rpb24tPnByb3BlcnR5TmFtZSgpKTsKICAg
ICB9CiAKLSAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIGN1c3RvbUdldHRlclNldHRlci0+
Z2V0dGVyKCkoZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlOjplbmNvZGUodGhpc1ZhbHVlKSwgY3VzdG9t
R2V0dGVyU2V0dGVyRnVuY3Rpb24tPnByb3BlcnR5TmFtZSgpKSk7CisgICAgUkVMRUFTRV9BTkRf
UkVUVVJOKHNjb3BlLCBnZXR0ZXIoZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlOjplbmNvZGUodGhpc1Zh
bHVlKSwgY3VzdG9tR2V0dGVyRnVuY3Rpb24tPnByb3BlcnR5TmFtZSgpKSk7CiB9CiAKLUpTQ3Vz
dG9tR2V0dGVyU2V0dGVyRnVuY3Rpb246OkpTQ3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rpb24oVk0m
IHZtLCBOYXRpdmVFeGVjdXRhYmxlKiBleGVjdXRhYmxlLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgVHlwZSB0eXBlLCBjb25zdCBQcm9w
ZXJ0eU5hbWUmIHByb3BlcnR5TmFtZSkKK0pTQ3VzdG9tR2V0dGVyRnVuY3Rpb246OkpTQ3VzdG9t
R2V0dGVyRnVuY3Rpb24oVk0mIHZtLCBOYXRpdmVFeGVjdXRhYmxlKiBleGVjdXRhYmxlLCBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgR2V0VmFsdWVG
dW5jIGdldHRlciwgT3B0aW9uYWw8RE9NQXR0cmlidXRlQW5ub3RhdGlvbj4gZG9tQXR0cmlidXRl
LCBjb25zdCBQcm9wZXJ0eU5hbWUmIHByb3BlcnR5TmFtZSkKICAgICA6IEJhc2Uodm0sIGV4ZWN1
dGFibGUsIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKQotICAgICwgbV90eXBlKHR5cGUpCisgICAg
LCBtX2dldHRlcihnZXR0ZXIpCisgICAgLCBtX2RvbUF0dHJpYnV0ZShkb21BdHRyaWJ1dGUpCiAg
ICAgLCBtX3Byb3BlcnR5TmFtZShwcm9wZXJ0eU5hbWUpCiB7CiB9CiAKLUpTQ3VzdG9tR2V0dGVy
U2V0dGVyRnVuY3Rpb24qIEpTQ3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rpb246OmNyZWF0ZShWTSYg
dm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEN1c3RvbUdldHRlclNldHRlciogZ2V0
dGVyU2V0dGVyLCBjb25zdCBUeXBlIHR5cGUsIGNvbnN0IFByb3BlcnR5TmFtZSYgcHJvcGVydHlO
YW1lKQorSlNDdXN0b21HZXR0ZXJGdW5jdGlvbiogSlNDdXN0b21HZXR0ZXJGdW5jdGlvbjo6Y3Jl
YXRlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgR2V0VmFsdWVGdW5jIGdl
dHRlciwgT3B0aW9uYWw8RE9NQXR0cmlidXRlQW5ub3RhdGlvbj4gZG9tQXR0cmlidXRlLCBjb25z
dCBQcm9wZXJ0eU5hbWUmIHByb3BlcnR5TmFtZSkKIHsKLSAgICBBU1NFUlQodHlwZSA9PSBUeXBl
OjpHZXR0ZXIgPyAhIWdldHRlclNldHRlci0+Z2V0dGVyKCkgOiAhIWdldHRlclNldHRlci0+c2V0
dGVyKCkpOwotCi0gICAgY29uc3QgY2hhciogcHJlZml4ID0gKHR5cGUgPT0gVHlwZTo6R2V0dGVy
KSA/ICJnZXQgIiA6ICJzZXQgIjsKLSAgICBTdHJpbmcgbmFtZSA9IG1ha2VTdHJpbmcocHJlZml4
LCBTdHJpbmcocHJvcGVydHlOYW1lLnB1YmxpY05hbWUoKSkpOwotCi0gICAgTmF0aXZlRXhlY3V0
YWJsZSogZXhlY3V0YWJsZSA9IHZtLmdldEhvc3RGdW5jdGlvbihjdXN0b21HZXR0ZXJTZXR0ZXJG
dW5jdGlvbkNhbGwsIGNhbGxIb3N0RnVuY3Rpb25Bc0NvbnN0cnVjdG9yLCBTdHJpbmcocHJvcGVy
dHlOYW1lLnB1YmxpY05hbWUoKSkpOwotCi0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBnbG9i
YWxPYmplY3QtPmN1c3RvbUdldHRlclNldHRlckZ1bmN0aW9uU3RydWN0dXJlKCk7Ci0gICAgSlND
dXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbiogZnVuY3Rpb24gPSBuZXcgKE5vdE51bGwsIGFsbG9j
YXRlQ2VsbDxKU0N1c3RvbUdldHRlclNldHRlckZ1bmN0aW9uPih2bS5oZWFwKSkgSlNDdXN0b21H
ZXR0ZXJTZXR0ZXJGdW5jdGlvbih2bSwgZXhlY3V0YWJsZSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1
cmUsIHR5cGUsIHByb3BlcnR5TmFtZSk7CisgICAgTmF0aXZlRXhlY3V0YWJsZSogZXhlY3V0YWJs
ZSA9IHZtLmdldEhvc3RGdW5jdGlvbihjdXN0b21HZXR0ZXJGdW5jdGlvbkNhbGwsIGNhbGxIb3N0
RnVuY3Rpb25Bc0NvbnN0cnVjdG9yLCBTdHJpbmcocHJvcGVydHlOYW1lLnB1YmxpY05hbWUoKSkp
OworICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gZ2xvYmFsT2JqZWN0LT5jdXN0b21HZXR0ZXJG
dW5jdGlvblN0cnVjdHVyZSgpOworICAgIEpTQ3VzdG9tR2V0dGVyRnVuY3Rpb24qIGZ1bmN0aW9u
ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNDdXN0b21HZXR0ZXJGdW5jdGlvbj4odm0u
aGVhcCkpIEpTQ3VzdG9tR2V0dGVyRnVuY3Rpb24odm0sIGV4ZWN1dGFibGUsIGdsb2JhbE9iamVj
dCwgc3RydWN0dXJlLCBnZXR0ZXIsIGRvbUF0dHJpYnV0ZSwgcHJvcGVydHlOYW1lKTsKIAogICAg
IC8vIENhbid0IGRvIHRoaXMgZHVyaW5nIGluaXRpYWxpemF0aW9uIGJlY2F1c2UgZ2V0SG9zdEZ1
bmN0aW9uIG1pZ2h0IGRvIGEgR0MgYWxsb2NhdGlvbi4KLSAgICBmdW5jdGlvbi0+ZmluaXNoQ3Jl
YXRpb24odm0sIGV4ZWN1dGFibGUsIGdldHRlclNldHRlciwgbmFtZSk7CisgICAgU3RyaW5nIG5h
bWUgPSBtYWtlU3RyaW5nKCJnZXQgIiwgU3RyaW5nKHByb3BlcnR5TmFtZS5wdWJsaWNOYW1lKCkp
KTsKKyAgICBmdW5jdGlvbi0+ZmluaXNoQ3JlYXRpb24odm0sIGV4ZWN1dGFibGUsIDAsIG5hbWUp
OwogICAgIHJldHVybiBmdW5jdGlvbjsKIH0KIAotdm9pZCBKU0N1c3RvbUdldHRlclNldHRlckZ1
bmN0aW9uOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
Citjb25zdCBDbGFzc0luZm8gSlNDdXN0b21TZXR0ZXJGdW5jdGlvbjo6c19pbmZvID0geyAiRnVu
Y3Rpb24iLCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RB
QkxFKEpTQ3VzdG9tU2V0dGVyRnVuY3Rpb24pIH07CitzdGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9G
VU5DVElPTihjdXN0b21TZXR0ZXJGdW5jdGlvbkNhbGwpOworCitKU0NfREVGSU5FX0hPU1RfRlVO
Q1RJT04oY3VzdG9tU2V0dGVyRnVuY3Rpb25DYWxsLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpKQogewotICAgIEpTQ3VzdG9tR2V0dGVyU2V0dGVy
RnVuY3Rpb24qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNDdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlv
bio+KGNlbGwpOwotICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5m
bygpKTsKLSAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOworICAg
IEpTQ3VzdG9tU2V0dGVyRnVuY3Rpb24qIGN1c3RvbVNldHRlckZ1bmN0aW9uID0ganNDYXN0PEpT
Q3VzdG9tU2V0dGVyRnVuY3Rpb24qPihjYWxsRnJhbWUtPmpzQ2FsbGVlKCkpOworICAgIEpTVmFs
dWUgdGhpc1ZhbHVlID0gY2FsbEZyYW1lLT50aGlzVmFsdWUoKTsKKworICAgIFB1dFZhbHVlRnVu
YyBzZXR0ZXIgPSBjdXN0b21TZXR0ZXJGdW5jdGlvbi0+c2V0dGVyKCk7CisgICAgQVNTRVJUKHNl
dHRlcik7CiAKLSAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2dldHRlclNldHRlcik7
CisgICAgc2V0dGVyKGdsb2JhbE9iamVjdCwgSlNWYWx1ZTo6ZW5jb2RlKHRoaXNWYWx1ZSksIEpT
VmFsdWU6OmVuY29kZShjYWxsRnJhbWUtPmFyZ3VtZW50KDApKSk7CisgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIAotdm9pZCBKU0N1c3RvbUdldHRlclNldHRl
ckZ1bmN0aW9uOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIE5hdGl2ZUV4ZWN1dGFibGUqIGV4ZWN1
dGFibGUsIEN1c3RvbUdldHRlclNldHRlciogZ2V0dGVyU2V0dGVyLCBjb25zdCBTdHJpbmcmIG5h
bWUpCitKU0N1c3RvbVNldHRlckZ1bmN0aW9uOjpKU0N1c3RvbVNldHRlckZ1bmN0aW9uKFZNJiB2
bSwgTmF0aXZlRXhlY3V0YWJsZSogZXhlY3V0YWJsZSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFB1dFZhbHVlRnVuYyBzZXR0ZXIpCisgICAgOiBC
YXNlKHZtLCBleGVjdXRhYmxlLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSkKKyAgICAsIG1fc2V0
dGVyKHNldHRlcikKK3sKK30KKworSlNDdXN0b21TZXR0ZXJGdW5jdGlvbiogSlNDdXN0b21TZXR0
ZXJGdW5jdGlvbjo6Y3JlYXRlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
UHV0VmFsdWVGdW5jIHNldHRlciwgY29uc3QgUHJvcGVydHlOYW1lJiBwcm9wZXJ0eU5hbWUpCiB7
Ci0gICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0sIGV4ZWN1dGFibGUsIGlzU2V0dGVyKCksIG5h
bWUpOwotICAgIEFTU0VSVChpbmhlcml0cyh2bSwgaW5mbygpKSk7Ci0gICAgQVNTRVJUKGdldHRl
clNldHRlcik7Ci0gICAgbV9nZXR0ZXJTZXR0ZXIuc2V0KHZtLCB0aGlzLCBnZXR0ZXJTZXR0ZXIp
OworICAgIE5hdGl2ZUV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSB2bS5nZXRIb3N0RnVuY3Rpb24o
Y3VzdG9tU2V0dGVyRnVuY3Rpb25DYWxsLCBjYWxsSG9zdEZ1bmN0aW9uQXNDb25zdHJ1Y3Rvciwg
U3RyaW5nKHByb3BlcnR5TmFtZS5wdWJsaWNOYW1lKCkpKTsKKyAgICBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSA9IGdsb2JhbE9iamVjdC0+Y3VzdG9tU2V0dGVyRnVuY3Rpb25TdHJ1Y3R1cmUoKTsKKyAg
ICBKU0N1c3RvbVNldHRlckZ1bmN0aW9uKiBmdW5jdGlvbiA9IG5ldyAoTm90TnVsbCwgYWxsb2Nh
dGVDZWxsPEpTQ3VzdG9tU2V0dGVyRnVuY3Rpb24+KHZtLmhlYXApKSBKU0N1c3RvbVNldHRlckZ1
bmN0aW9uKHZtLCBleGVjdXRhYmxlLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwgc2V0dGVyKTsK
KworICAgIC8vIENhbid0IGRvIHRoaXMgZHVyaW5nIGluaXRpYWxpemF0aW9uIGJlY2F1c2UgZ2V0
SG9zdEZ1bmN0aW9uIG1pZ2h0IGRvIGEgR0MgYWxsb2NhdGlvbi4KKyAgICBTdHJpbmcgbmFtZSA9
IG1ha2VTdHJpbmcoInNldCAiLCBTdHJpbmcocHJvcGVydHlOYW1lLnB1YmxpY05hbWUoKSkpOwor
ICAgIGZ1bmN0aW9uLT5maW5pc2hDcmVhdGlvbih2bSwgZXhlY3V0YWJsZSwgMSwgbmFtZSk7Cisg
ICAgcmV0dXJuIGZ1bmN0aW9uOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rpb24uaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0N1c3RvbUdldHRl
clNldHRlckZ1bmN0aW9uLmgJKHJldmlzaW9uIDI3MTk3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTQ3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rpb24uaAkod29ya2luZyBjb3B5
KQpAQCAtMjksMjEgKzI5LDE1IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1jbGFzcyBDdXN0b21H
ZXR0ZXJTZXR0ZXI7Ci0KLWNsYXNzIEpTQ3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rpb24gZmluYWwg
OiBwdWJsaWMgSlNGdW5jdGlvbiB7CitjbGFzcyBKU0N1c3RvbUdldHRlckZ1bmN0aW9uIGZpbmFs
IDogcHVibGljIEpTRnVuY3Rpb24gewogcHVibGljOgogICAgIHR5cGVkZWYgSlNGdW5jdGlvbiBC
YXNlOwotCi0gICAgLy8gVGhlIFR5cGUgaXMgc2V0IHRvIHRoZSBudW1iZXIgb2YgYXJndW1lbnRz
IHRoZSByZXN1bHRhbnQgZnVuY3Rpb24gd2lsbCBoYXZlLgotICAgIGVudW0gY2xhc3MgVHlwZSB7
IEdldHRlciA9IDAsIFNldHRlciA9IDEgfTsKLQogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWdu
ZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFnczsKIAogICAgIHRlbXBsYXRl
PHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2VzcyBtb2RlPgogICAgIHN0YXRpYyBJc29T
dWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKLSAgICAgICAgcmV0dXJuIHZtLmN1
c3RvbUdldHRlclNldHRlckZ1bmN0aW9uU3BhY2U8bW9kZT4oKTsKKyAgICAgICAgcmV0dXJuIHZt
LmN1c3RvbUdldHRlckZ1bmN0aW9uU3BhY2U8bW9kZT4oKTsKICAgICB9CiAKICAgICBzdGF0aWMg
U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKQEAgLTUyLDIyICs0Niw0OSBAQCBwdWJsaWM6CiAg
ICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5
cGUsIFR5cGVJbmZvKEpTRnVuY3Rpb25UeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CiAg
ICAgfQogCi0gICAgc3RhdGljIEpTQ3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rpb24qIGNyZWF0ZShW
TSYsIEpTR2xvYmFsT2JqZWN0KiwgQ3VzdG9tR2V0dGVyU2V0dGVyKiwgY29uc3QgVHlwZSwgY29u
c3QgUHJvcGVydHlOYW1lJik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIEpTQ3VzdG9t
R2V0dGVyRnVuY3Rpb24qIGNyZWF0ZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgR2V0VmFsdWVGdW5j
LCBPcHRpb25hbDxET01BdHRyaWJ1dGVBbm5vdGF0aW9uPiwgY29uc3QgUHJvcGVydHlOYW1lJik7
CiAKICAgICBERUNMQVJFX0VYUE9SVF9JTkZPOwogCi0gICAgQ3VzdG9tR2V0dGVyU2V0dGVyKiBj
dXN0b21HZXR0ZXJTZXR0ZXIoKSBjb25zdCB7IHJldHVybiBtX2dldHRlclNldHRlci5nZXQoKTsg
fQotICAgIGJvb2wgaXNTZXR0ZXIoKSBjb25zdCB7IHJldHVybiBtX3R5cGUgPT0gVHlwZTo6U2V0
dGVyOyB9CisgICAgR2V0VmFsdWVGdW5jIGdldHRlcigpIGNvbnN0IHsgcmV0dXJuIG1fZ2V0dGVy
OyB9OworICAgIE9wdGlvbmFsPERPTUF0dHJpYnV0ZUFubm90YXRpb24+IGRvbUF0dHJpYnV0ZSgp
IGNvbnN0IHsgcmV0dXJuIG1fZG9tQXR0cmlidXRlOyB9OwogICAgIGNvbnN0IFByb3BlcnR5TmFt
ZSYgcHJvcGVydHlOYW1lKCkgY29uc3QgeyByZXR1cm4gbV9wcm9wZXJ0eU5hbWU7IH0KIAogcHJp
dmF0ZToKLSAgICBKU0N1c3RvbUdldHRlclNldHRlckZ1bmN0aW9uKFZNJiwgTmF0aXZlRXhlY3V0
YWJsZSosIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKiwgVHlwZSwgY29uc3QgUHJvcGVydHlO
YW1lJik7Ci0gICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIE5hdGl2ZUV4ZWN1dGFibGUqLCBD
dXN0b21HZXR0ZXJTZXR0ZXIqLCBjb25zdCBTdHJpbmcmKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNp
dENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgSlNDdXN0b21HZXR0ZXJGdW5j
dGlvbihWTSYsIE5hdGl2ZUV4ZWN1dGFibGUqLCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSos
IEdldFZhbHVlRnVuYywgT3B0aW9uYWw8RE9NQXR0cmlidXRlQW5ub3RhdGlvbj4sIGNvbnN0IFBy
b3BlcnR5TmFtZSYpOwogCi0gICAgV3JpdGVCYXJyaWVyPEN1c3RvbUdldHRlclNldHRlcj4gbV9n
ZXR0ZXJTZXR0ZXI7Ci0gICAgVHlwZSBtX3R5cGU7CisgICAgR2V0VmFsdWVGdW5jIG1fZ2V0dGVy
OworICAgIE9wdGlvbmFsPERPTUF0dHJpYnV0ZUFubm90YXRpb24+IG1fZG9tQXR0cmlidXRlOwog
ICAgIFByb3BlcnR5TmFtZSBtX3Byb3BlcnR5TmFtZTsKIH07CiAKK2NsYXNzIEpTQ3VzdG9tU2V0
dGVyRnVuY3Rpb24gZmluYWwgOiBwdWJsaWMgSlNGdW5jdGlvbiB7CitwdWJsaWM6CisgICAgdHlw
ZWRlZiBKU0Z1bmN0aW9uIEJhc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1
Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzOworCisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+CisgICAgc3RhdGljIElzb1N1YnNwYWNl
KiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgeworICAgICAgICByZXR1cm4gdm0uY3VzdG9tU2V0
dGVyRnVuY3Rpb25TcGFjZTxtb2RlPigpOworICAgIH0KKworICAgIHN0YXRpYyBTdHJ1Y3R1cmUq
IGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpT
VmFsdWUgcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGdsb2JhbE9iamVjdCk7Cisg
ICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5
cGUsIFR5cGVJbmZvKEpTRnVuY3Rpb25UeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7Cisg
ICAgfQorCisgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIEpTQ3VzdG9tU2V0dGVyRnVuY3Rp
b24qIGNyZWF0ZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgUHV0VmFsdWVGdW5jLCBjb25zdCBQcm9w
ZXJ0eU5hbWUmKTsKKworICAgIERFQ0xBUkVfRVhQT1JUX0lORk87CisKKyAgICBQdXRWYWx1ZUZ1
bmMgc2V0dGVyKCkgY29uc3QgeyByZXR1cm4gbV9zZXR0ZXI7IH07CisKK3ByaXZhdGU6CisgICAg
SlNDdXN0b21TZXR0ZXJGdW5jdGlvbihWTSYsIE5hdGl2ZUV4ZWN1dGFibGUqLCBKU0dsb2JhbE9i
amVjdCosIFN0cnVjdHVyZSosIFB1dFZhbHVlRnVuYyk7CisKKyAgICBQdXRWYWx1ZUZ1bmMgbV9z
ZXR0ZXI7Cit9OworCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uY3BwCShyZXZpc2lvbiAyNzE5NzUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNTAxLDEyICs1MDEsMTIgQEAgdm9pZCBKU0Z1bmN0aW9uOjpnZXRPd25TcGVjaWFsUHJvcGVy
dHlOYQogICAgIH0KIH0KIAotYm9vbCBKU0Z1bmN0aW9uOjpwdXQoSlNDZWxsKiBjZWxsLCBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1Zh
bHVlIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCitib29sIEpTRnVuY3Rpb246OmRlZmlu
ZU93blByb3BlcnR5VmlhUHV0KEpTT2JqZWN0KiBvYmplY3QsIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFB1dFBy
b3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCi0gICAgSlNGdW5jdGlv
biogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0Z1bmN0aW9uKj4oY2VsbCk7CisgICAgSlNGdW5jdGlv
biogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0Z1bmN0aW9uKj4ob2JqZWN0KTsKIAogICAgIGlmIChw
cm9wZXJ0eU5hbWUgPT0gdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoIHx8IHByb3BlcnR5TmFtZSA9
PSB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lKSB7CiAgICAgICAgIEZ1bmN0aW9uUmFyZURhdGEqIHJh
cmVEYXRhID0gdGhpc09iamVjdC0+ZW5zdXJlUmFyZURhdGEodm0pOwpAQCAtNTE2LDE2ICs1MTYs
MTIgQEAgYm9vbCBKU0Z1bmN0aW9uOjpwdXQoSlNDZWxsKiBjZWxsLCBKU0dsbwogICAgICAgICAg
ICAgcmFyZURhdGEtPnNldEhhc01vZGlmaWVkTmFtZUZvck5vbkhvc3RGdW5jdGlvbigpOwogICAg
IH0KIAotICAgIGlmIChVTkxJS0VMWShpc1RoaXNWYWx1ZUFsdGVyZWQoc2xvdCwgdGhpc09iamVj
dCkpKQotICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIG9yZGluYXJ5U2V0U2xvdyhn
bG9iYWxPYmplY3QsIHRoaXNPYmplY3QsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QudGhpc1Zh
bHVlKCksIHNsb3QuaXNTdHJpY3RNb2RlKCkpKTsKLQotCiAgICAgaWYgKHRoaXNPYmplY3QtPmlz
SG9zdE9yQnVpbHRpbkZ1bmN0aW9uKCkpIHsKICAgICAgICAgUHJvcGVydHlTdGF0dXMgcHJvcGVy
dHlUeXBlID0gdGhpc09iamVjdC0+cmVpZnlMYXp5UHJvcGVydHlGb3JIb3N0T3JCdWlsdGluSWZO
ZWVkZWQodm0sIGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lKTsKICAgICAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgZmFsc2UpOwogICAgICAgICBpZiAoaXNMYXp5KHByb3BlcnR5VHlw
ZSkpCiAgICAgICAgICAgICBzbG90LmRpc2FibGVDYWNoaW5nKCk7Ci0gICAgICAgIFJFTEVBU0Vf
QU5EX1JFVFVSTihzY29wZSwgQmFzZTo6cHV0KHRoaXNPYmplY3QsIGdsb2JhbE9iamVjdCwgcHJv
cGVydHlOYW1lLCB2YWx1ZSwgc2xvdCkpOworICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2Nv
cGUsIEJhc2U6OmRlZmluZU93blByb3BlcnR5VmlhUHV0KHRoaXNPYmplY3QsIGdsb2JhbE9iamVj
dCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCkpOwogICAgIH0KIAogICAgIGlmIChwcm9wZXJ0
eU5hbWUgPT0gdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBlKSB7CkBAIC01MzgsMTIgKzUzNCwx
MiBAQCBib29sIEpTRnVuY3Rpb246OnB1dChKU0NlbGwqIGNlbGwsIEpTR2xvCiAgICAgICAgIGlm
IChGdW5jdGlvblJhcmVEYXRhKiByYXJlRGF0YSA9IHRoaXNPYmplY3QtPnJhcmVEYXRhKCkpCiAg
ICAgICAgICAgICByYXJlRGF0YS0+Y2xlYXIoIlN0b3JlIHRvIHByb3RvdHlwZSBwcm9wZXJ0eSBv
ZiBhIGZ1bmN0aW9uIik7CiAgICAgICAgIGdldFNsb3QuZGlzYWxsb3dWTUVudHJ5LnJlc2V0KCk7
Ci0gICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgQmFzZTo6cHV0KHRoaXNPYmplY3Qs
IGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCkpOworICAgICAgICBSRUxF
QVNFX0FORF9SRVRVUk4oc2NvcGUsIEJhc2U6OmRlZmluZU93blByb3BlcnR5VmlhUHV0KHRoaXNP
YmplY3QsIGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCkpOwogICAgIH0K
IAogICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gdm0ucHJvcGVydHlOYW1lcy0+YXJndW1lbnRzIHx8
IHByb3BlcnR5TmFtZSA9PSB2bS5wcm9wZXJ0eU5hbWVzLT5jYWxsZXIpIHsKICAgICAgICAgaWYg
KCF0aGlzT2JqZWN0LT5qc0V4ZWN1dGFibGUoKS0+aGFzQ2FsbGVyQW5kQXJndW1lbnRzUHJvcGVy
dGllcygpKQotICAgICAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBCYXNlOjpwdXQo
dGhpc09iamVjdCwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KSk7Cisg
ICAgICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEJhc2U6OmRlZmluZU93blByb3Bl
cnR5VmlhUHV0KHRoaXNPYmplY3QsIGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwg
c2xvdCkpOwogCiAgICAgICAgIHNsb3QuZGlzYWJsZUNhY2hpbmcoKTsKICAgICAgICAgcmV0dXJu
IHR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCBzbG90LmlzU3RyaWN0TW9kZSgpLCBSZWFk
b25seVByb3BlcnR5V3JpdGVFcnJvcik7CkBAIC01NTEsNyArNTQ3LDcgQEAgYm9vbCBKU0Z1bmN0
aW9uOjpwdXQoSlNDZWxsKiBjZWxsLCBKU0dsbwogICAgIFByb3BlcnR5U3RhdHVzIHByb3BlcnR5
VHlwZSA9IHRoaXNPYmplY3QtPnJlaWZ5TGF6eVByb3BlcnR5SWZOZWVkZWQodm0sIGdsb2JhbE9i
amVjdCwgcHJvcGVydHlOYW1lKTsKICAgICBpZiAoaXNMYXp5KHByb3BlcnR5VHlwZSkpCiAgICAg
ICAgIHNsb3QuZGlzYWJsZUNhY2hpbmcoKTsKLSAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUs
IEJhc2U6OnB1dCh0aGlzT2JqZWN0LCBnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgdmFsdWUs
IHNsb3QpKTsKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEJhc2U6OmRlZmluZU93blBy
b3BlcnR5VmlhUHV0KHRoaXNPYmplY3QsIGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1
ZSwgc2xvdCkpOwogfQogCiBib29sIEpTRnVuY3Rpb246OmRlbGV0ZVByb3BlcnR5KEpTQ2VsbCog
Y2VsbCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5
TmFtZSwgRGVsZXRlUHJvcGVydHlTbG90JiBzbG90KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uaAkocmV2aXNpb24gMjcxOTc1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNzQs
OSArMTc0LDkgQEAgcHJvdGVjdGVkOgogCiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlT
bG90KEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xv
dCYpOwogICAgIHN0YXRpYyB2b2lkIGdldE93blNwZWNpYWxQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0
KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIERvbnRFbnVtUHJvcGVydGll
c01vZGUpOwotICAgIHN0YXRpYyBib29sIGRlZmluZU93blByb3BlcnR5KEpTT2JqZWN0KiwgSlNH
bG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5RGVzY3JpcHRvciYsIGJv
b2wgc2hvdWxkVGhyb3cpOwogCi0gICAgc3RhdGljIGJvb2wgcHV0KEpTQ2VsbCosIEpTR2xvYmFs
T2JqZWN0KiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmKTsKKyAgICBz
dGF0aWMgYm9vbCBkZWZpbmVPd25Qcm9wZXJ0eVZpYVB1dChKU09iamVjdCosIEpTR2xvYmFsT2Jq
ZWN0KiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0
aWMgYm9vbCBkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJv
cGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eURlc2NyaXB0b3ImLCBib29sIHNob3VsZFRocm93KTsK
IAogICAgIHN0YXRpYyBib29sIGRlbGV0ZVByb3BlcnR5KEpTQ2VsbCosIEpTR2xvYmFsT2JqZWN0
KiwgUHJvcGVydHlOYW1lLCBEZWxldGVQcm9wZXJ0eVNsb3QmKTsKIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXcuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmll
dy5oCShyZXZpc2lvbiAyNzE5NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0dlbmVyaWNUeXBlZEFycmF5Vmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC05Niw3ICs5Niw3IEBA
IHB1YmxpYzoKICAgICB1c2luZyBCYXNlID0gSlNBcnJheUJ1ZmZlclZpZXc7CiAgICAgdHlwZWRl
ZiB0eXBlbmFtZSBBZGFwdG9yOjpUeXBlIEVsZW1lbnRUeXBlOwogCi0gICAgc3RhdGljIGNvbnN0
ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgT3Zl
cnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlOYW1lcyB8
IEludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFpl
cm87CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6
OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVz
R2V0T3duUHJvcGVydHlOYW1lcyB8IE92ZXJyaWRlc1B1dCB8IEludGVyY2VwdHNHZXRPd25Qcm9w
ZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm87CiAKICAgICBzdGF0aWMgY29u
c3RleHByIHVuc2lnbmVkIGVsZW1lbnRTaXplID0gc2l6ZW9mKHR5cGVuYW1lIEFkYXB0b3I6OlR5
cGUpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbExleGlj
YWxFbnZpcm9ubWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTR2xvYmFsTGV4aWNhbEVudmlyb25tZW50LmgJKHJldmlzaW9uIDI3MTk3NSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsTGV4aWNhbEVudmlyb25tZW50LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTMzLDcgKzMzLDcgQEAgY2xhc3MgSlNHbG9iYWxMZXhpY2FsRW52
aXJvbm1lbnQgZmluYWwgOgogcHVibGljOgogICAgIHVzaW5nIEJhc2UgPSBKU1NlZ21lbnRlZFZh
cmlhYmxlT2JqZWN0OwogCi0gICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVG
bGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90
OworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpT
dHJ1Y3R1cmVGbGFncyB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRlc1B1
dDsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2VzcyBtb2Rl
PgogICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAkocmV2
aXNpb24gMjcxOTc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxP
YmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MDIsNiArNTAyLDggQEAgSlNHbG9iYWxPYmpl
Y3Q6OkpTR2xvYmFsT2JqZWN0KFZNJiB2bSwgUwogICAgICwgbV9udW1iZXJUb1N0cmluZ1dhdGNo
cG9pbnRTZXQoSXNXYXRjaGVkKQogICAgICwgbV9ydW50aW1lRmxhZ3MoKQogICAgICwgbV9zdGFj
a1RyYWNlTGltaXQoT3B0aW9uczo6ZGVmYXVsdEVycm9yU3RhY2tUcmFjZUxpbWl0KCkpCisgICAg
LCBtX2N1c3RvbUdldHRlckZ1bmN0aW9uTWFwKHZtKQorICAgICwgbV9jdXN0b21TZXR0ZXJGdW5j
dGlvbk1hcCh2bSkKICAgICAsIG1fZ2xvYmFsT2JqZWN0TWV0aG9kVGFibGUoZ2xvYmFsT2JqZWN0
TWV0aG9kVGFibGUgPyBnbG9iYWxPYmplY3RNZXRob2RUYWJsZSA6ICZzX2dsb2JhbE9iamVjdE1l
dGhvZFRhYmxlKQogewogfQpAQCAtNjEzLDkgKzYxNSwxMyBAQCB2b2lkIEpTR2xvYmFsT2JqZWN0
Ojppbml0KFZNJiB2bSkKICAgICBpbml0RnVuY3Rpb25TdHJ1Y3R1cmVzKG1fYnVpbHRpbkZ1bmN0
aW9ucyk7CiAgICAgaW5pdEZ1bmN0aW9uU3RydWN0dXJlcyhtX29yZGluYXJ5RnVuY3Rpb25zKTsK
IAotICAgIG1fY3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rpb25TdHJ1Y3R1cmUuaW5pdExhdGVyKAor
ICAgIG1fY3VzdG9tR2V0dGVyRnVuY3Rpb25TdHJ1Y3R1cmUuaW5pdExhdGVyKAogICAgICAgICBb
XSAoY29uc3QgSW5pdGlhbGl6ZXI8U3RydWN0dXJlPiYgaW5pdCkgewotICAgICAgICAgICAgaW5p
dC5zZXQoSlNDdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbjo6Y3JlYXRlU3RydWN0dXJlKGluaXQu
dm0sIGluaXQub3duZXIsIGluaXQub3duZXItPm1fZnVuY3Rpb25Qcm90b3R5cGUuZ2V0KCkpKTsK
KyAgICAgICAgICAgIGluaXQuc2V0KEpTQ3VzdG9tR2V0dGVyRnVuY3Rpb246OmNyZWF0ZVN0cnVj
dHVyZShpbml0LnZtLCBpbml0Lm93bmVyLCBpbml0Lm93bmVyLT5tX2Z1bmN0aW9uUHJvdG90eXBl
LmdldCgpKSk7CisgICAgICAgIH0pOworICAgIG1fY3VzdG9tU2V0dGVyRnVuY3Rpb25TdHJ1Y3R1
cmUuaW5pdExhdGVyKAorICAgICAgICBbXSAoY29uc3QgSW5pdGlhbGl6ZXI8U3RydWN0dXJlPiYg
aW5pdCkgeworICAgICAgICAgICAgaW5pdC5zZXQoSlNDdXN0b21TZXR0ZXJGdW5jdGlvbjo6Y3Jl
YXRlU3RydWN0dXJlKGluaXQudm0sIGluaXQub3duZXIsIGluaXQub3duZXItPm1fZnVuY3Rpb25Q
cm90b3R5cGUuZ2V0KCkpKTsKICAgICAgICAgfSk7CiAgICAgbV9ib3VuZEZ1bmN0aW9uU3RydWN0
dXJlLmluaXRMYXRlcigKICAgICAgICAgW10gKGNvbnN0IEluaXRpYWxpemVyPFN0cnVjdHVyZT4m
IGluaXQpIHsKQEAgLTE0NDUsMTYgKzE0NTEsMTMgQEAgY2FwaXRhbE5hbWUgIyMgQ29uc3RydWN0
b3IqIGxvd2VyTmFtZSAjIwogICAgIGZpeHVwUHJvdG90eXBlQ2hhaW5XaXRoT2JqZWN0UHJvdG90
eXBlKHZtKTsKIH0KIAotYm9vbCBKU0dsb2JhbE9iamVjdDo6cHV0KEpTQ2VsbCogY2VsbCwgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNW
YWx1ZSB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBzbG90KQorYm9vbCBKU0dsb2JhbE9iamVjdDo6
ZGVmaW5lT3duUHJvcGVydHlWaWFQdXQoSlNPYmplY3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwg
UHV0UHJvcGVydHlTbG90JiBzbG90KQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0o
KTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgSlNHbG9i
YWxPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNHbG9iYWxPYmplY3QqPihjZWxsKTsKKyAg
ICBKU0dsb2JhbE9iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0dsb2JhbE9iamVjdCo+KG9i
amVjdCk7CiAgICAgQVNTRVJUKCFIZWFwOjpoZWFwKHZhbHVlKSB8fCBIZWFwOjpoZWFwKHZhbHVl
KSA9PSBIZWFwOjpoZWFwKHRoaXNPYmplY3QpKTsKIAotICAgIGlmIChVTkxJS0VMWShpc1RoaXNW
YWx1ZUFsdGVyZWQoc2xvdCwgdGhpc09iamVjdCkpKQotICAgICAgICBSRUxFQVNFX0FORF9SRVRV
Uk4oc2NvcGUsIG9yZGluYXJ5U2V0U2xvdyhnbG9iYWxPYmplY3QsIHRoaXNPYmplY3QsIHByb3Bl
cnR5TmFtZSwgdmFsdWUsIHNsb3QudGhpc1ZhbHVlKCksIHNsb3QuaXNTdHJpY3RNb2RlKCkpKTsK
LQogICAgIGJvb2wgc2hvdWxkVGhyb3dSZWFkT25seUVycm9yID0gc2xvdC5pc1N0cmljdE1vZGUo
KTsKICAgICBib29sIGlnbm9yZVJlYWRPbmx5RXJyb3JzID0gZmFsc2U7CiAgICAgYm9vbCBwdXRS
ZXN1bHQgPSBmYWxzZTsKQEAgLTE0NjIsNyArMTQ2NSw3IEBAIGJvb2wgSlNHbG9iYWxPYmplY3Q6
OnB1dChKU0NlbGwqIGNlbGwsIEoKICAgICBFWENFUFRJT05fQVNTRVJUKCghIXNjb3BlLmV4Y2Vw
dGlvbigpID09IChkb25lICYmICFwdXRSZXN1bHQpKSB8fCAhc2hvdWxkVGhyb3dSZWFkT25seUVy
cm9yKTsKICAgICBpZiAoZG9uZSkKICAgICAgICAgcmV0dXJuIHB1dFJlc3VsdDsKLSAgICBSRUxF
QVNFX0FORF9SRVRVUk4oc2NvcGUsIEJhc2U6OnB1dCh0aGlzT2JqZWN0LCBnbG9iYWxPYmplY3Qs
IHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpKTsKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2Nv
cGUsIEJhc2U6OmRlZmluZU93blByb3BlcnR5VmlhUHV0KHRoaXNPYmplY3QsIGdsb2JhbE9iamVj
dCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCkpOwogfQogCiBib29sIEpTR2xvYmFsT2JqZWN0
OjpkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eURlc2Ny
aXB0b3ImIGRlc2NyaXB0b3IsIGJvb2wgc2hvdWxkVGhyb3cpCkBAIC0xOTk5LDcgKzIwMDIsOCBA
QCB2b2lkIEpTR2xvYmFsT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsCiAgICAgdmlzaXRGdW5j
dGlvblN0cnVjdHVyZXModGhpc09iamVjdC0+bV9idWlsdGluRnVuY3Rpb25zKTsKICAgICB2aXNp
dEZ1bmN0aW9uU3RydWN0dXJlcyh0aGlzT2JqZWN0LT5tX29yZGluYXJ5RnVuY3Rpb25zKTsKIAot
ICAgIHRoaXNPYmplY3QtPm1fY3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rpb25TdHJ1Y3R1cmUudmlz
aXQodmlzaXRvcik7CisgICAgdGhpc09iamVjdC0+bV9jdXN0b21HZXR0ZXJGdW5jdGlvblN0cnVj
dHVyZS52aXNpdCh2aXNpdG9yKTsKKyAgICB0aGlzT2JqZWN0LT5tX2N1c3RvbVNldHRlckZ1bmN0
aW9uU3RydWN0dXJlLnZpc2l0KHZpc2l0b3IpOwogICAgIHRoaXNPYmplY3QtPm1fYm91bmRGdW5j
dGlvblN0cnVjdHVyZS52aXNpdCh2aXNpdG9yKTsKICAgICB0aGlzT2JqZWN0LT5tX25hdGl2ZVN0
ZEZ1bmN0aW9uU3RydWN0dXJlLnZpc2l0KHZpc2l0b3IpOwogICAgIHZpc2l0b3IuYXBwZW5kKHRo
aXNPYmplY3QtPm1fcmVnRXhwU3RydWN0dXJlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAkocmV2aXNpb24gMjcxOTc1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAkod29ya2luZyBjb3B5
KQpAQCAtODYsNiArODYsOCBAQCBjbGFzcyBJbnRsQ29sbGF0b3I7CiBjbGFzcyBKU0FycmF5QnVm
ZmVyOwogY2xhc3MgSlNBcnJheUJ1ZmZlclByb3RvdHlwZTsKIGNsYXNzIEpTQ2FsbGVlOworY2xh
c3MgSlNDdXN0b21HZXR0ZXJGdW5jdGlvbjsKK2NsYXNzIEpTQ3VzdG9tU2V0dGVyRnVuY3Rpb247
CiBjbGFzcyBKU0dsb2JhbE9iamVjdERlYnVnZ2FibGU7CiBjbGFzcyBKU0ludGVybmFsUHJvbWlz
ZTsKIGNsYXNzIEpTTW9kdWxlTG9hZGVyOwpAQCAtMzk2LDcgKzM5OCw4IEBAIHB1YmxpYzoKICAg
ICBGdW5jdGlvblN0cnVjdHVyZXMgbV9vcmRpbmFyeUZ1bmN0aW9uczsKIAogICAgIExhenlQcm9w
ZXJ0eTxKU0dsb2JhbE9iamVjdCwgU3RydWN0dXJlPiBtX2JvdW5kRnVuY3Rpb25TdHJ1Y3R1cmU7
Ci0gICAgTGF6eVByb3BlcnR5PEpTR2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmU+IG1fY3VzdG9tR2V0
dGVyU2V0dGVyRnVuY3Rpb25TdHJ1Y3R1cmU7CisgICAgTGF6eVByb3BlcnR5PEpTR2xvYmFsT2Jq
ZWN0LCBTdHJ1Y3R1cmU+IG1fY3VzdG9tR2V0dGVyRnVuY3Rpb25TdHJ1Y3R1cmU7CisgICAgTGF6
eVByb3BlcnR5PEpTR2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmU+IG1fY3VzdG9tU2V0dGVyRnVuY3Rp
b25TdHJ1Y3R1cmU7CiAgICAgTGF6eVByb3BlcnR5PEpTR2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmU+
IG1fbmF0aXZlU3RkRnVuY3Rpb25TdHJ1Y3R1cmU7CiAgICAgUHJvcGVydHlPZmZzZXQgbV9mdW5j
dGlvbk5hbWVPZmZzZXQ7CiAgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9yZWdFeHBTdHJ1
Y3R1cmU7CkBAIC01NDAsNiArNTQzLDkgQEAgcHVibGljOgogICAgIGJvb2wgaXNNYXBQcm90b3R5
cGVTZXRGYXN0QW5kTm9uT2JzZXJ2YWJsZSgpOwogICAgIGJvb2wgaXNTZXRQcm90b3R5cGVBZGRG
YXN0QW5kTm9uT2JzZXJ2YWJsZSgpOwogCisgICAgV2Vha0dDTWFwPEdldFZhbHVlRnVuYywgSlND
dXN0b21HZXR0ZXJGdW5jdGlvbj4mIGN1c3RvbUdldHRlckZ1bmN0aW9uTWFwKCkgeyByZXR1cm4g
bV9jdXN0b21HZXR0ZXJGdW5jdGlvbk1hcDsgfQorICAgIFdlYWtHQ01hcDxQdXRWYWx1ZUZ1bmMs
IEpTQ3VzdG9tU2V0dGVyRnVuY3Rpb24+JiBjdXN0b21TZXR0ZXJGdW5jdGlvbk1hcCgpIHsgcmV0
dXJuIG1fY3VzdG9tU2V0dGVyRnVuY3Rpb25NYXA7IH0KKwogI2lmIEVOQUJMRShERkdfSklUKQog
ICAgIHVzaW5nIFJlZmVyZW5jZWRHbG9iYWxQcm9wZXJ0eVdhdGNocG9pbnRTZXRzID0gSGFzaE1h
cDxSZWZQdHI8VW5pcXVlZFN0cmluZ0ltcGw+LCBSZWY8V2F0Y2hwb2ludFNldD4sIElkZW50aWZp
ZXJSZXBIYXNoPjsKICAgICBSZWZlcmVuY2VkR2xvYmFsUHJvcGVydHlXYXRjaHBvaW50U2V0cyBt
X3JlZmVyZW5jZWRHbG9iYWxQcm9wZXJ0eVdhdGNocG9pbnRTZXRzOwpAQCAtNTU0LDYgKzU2MCw4
IEBAIHB1YmxpYzoKICAgICBSdW50aW1lRmxhZ3MgbV9ydW50aW1lRmxhZ3M7CiAgICAgQ29uc29s
ZUNsaWVudCogbV9jb25zb2xlQ2xpZW50IHsgbnVsbHB0ciB9OwogICAgIE9wdGlvbmFsPHVuc2ln
bmVkPiBtX3N0YWNrVHJhY2VMaW1pdDsKKyAgICBXZWFrR0NNYXA8R2V0VmFsdWVGdW5jLCBKU0N1
c3RvbUdldHRlckZ1bmN0aW9uPiBtX2N1c3RvbUdldHRlckZ1bmN0aW9uTWFwOworICAgIFdlYWtH
Q01hcDxQdXRWYWx1ZUZ1bmMsIEpTQ3VzdG9tU2V0dGVyRnVuY3Rpb24+IG1fY3VzdG9tU2V0dGVy
RnVuY3Rpb25NYXA7CiAKICNpZiBBU1NFUlRfRU5BQkxFRAogICAgIGNvbnN0IEpTR2xvYmFsT2Jq
ZWN0KiBtX2dsb2JhbE9iamVjdEF0RGVidWdnZXJFbnRyeSB7IG51bGxwdHIgfTsKQEAgLTYxMiwx
MCArNjIwLDcgQEAgcHVibGljOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIHZp
c2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKIAogICAgIEpTX0VYUE9SVF9QUklW
QVRFIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU09iamVjdCosIEpTR2xvYmFsT2Jq
ZWN0KiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKLSAgICBKU19FWFBPUlRfUFJJVkFU
RSBzdGF0aWMgYm9vbCBwdXQoSlNDZWxsKiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUs
IEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOwotCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgc3Rh
dGljIHZvaWQgZGVmaW5lR2V0dGVyKEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0
eU5hbWUsIEpTT2JqZWN0KiBnZXR0ZXJGdW5jLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKTsKLSAgICBK
U19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBkZWZpbmVTZXR0ZXIoSlNPYmplY3QqLCBKU0ds
b2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwgSlNPYmplY3QqIHNldHRlckZ1bmMsIHVuc2lnbmVk
IGF0dHJpYnV0ZXMpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBib29sIGRlZmluZU93
blByb3BlcnR5VmlhUHV0KEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUs
IEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRp
YyBib29sIGRlZmluZU93blByb3BlcnR5KEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9w
ZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5RGVzY3JpcHRvciYsIGJvb2wgc2hvdWxkVGhyb3cpOwog
CiAgICAgdm9pZCBhZGRWYXIoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgSWRl
bnRpZmllciYgcHJvcGVydHlOYW1lKQpAQCAtNzk5LDcgKzgwNCw4IEBAIHB1YmxpYzoKICAgICB9
CiAKICAgICBTdHJ1Y3R1cmUqIGJvdW5kRnVuY3Rpb25TdHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVy
biBtX2JvdW5kRnVuY3Rpb25TdHJ1Y3R1cmUuZ2V0KHRoaXMpOyB9Ci0gICAgU3RydWN0dXJlKiBj
dXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvblN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fY3Vz
dG9tR2V0dGVyU2V0dGVyRnVuY3Rpb25TdHJ1Y3R1cmUuZ2V0KHRoaXMpOyB9CisgICAgU3RydWN0
dXJlKiBjdXN0b21HZXR0ZXJGdW5jdGlvblN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fY3Vz
dG9tR2V0dGVyRnVuY3Rpb25TdHJ1Y3R1cmUuZ2V0KHRoaXMpOyB9CisgICAgU3RydWN0dXJlKiBj
dXN0b21TZXR0ZXJGdW5jdGlvblN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fY3VzdG9tU2V0
dGVyRnVuY3Rpb25TdHJ1Y3R1cmUuZ2V0KHRoaXMpOyB9CiAgICAgU3RydWN0dXJlKiBuYXRpdmVT
dGRGdW5jdGlvblN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmF0aXZlU3RkRnVuY3Rpb25T
dHJ1Y3R1cmUuZ2V0KHRoaXMpOyB9CiAgICAgUHJvcGVydHlPZmZzZXQgZnVuY3Rpb25OYW1lT2Zm
c2V0KCkgY29uc3QgeyByZXR1cm4gbV9mdW5jdGlvbk5hbWVPZmZzZXQ7IH0KICAgICBTdHJ1Y3R1
cmUqIG51bWJlck9iamVjdFN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fbnVtYmVyT2JqZWN0
U3RydWN0dXJlLmdldCh0aGlzKTsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNMZXhpY2FsRW52aXJvbm1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0xleGljYWxFbnZpcm9ubWVudC5oCShyZXZpc2lvbiAyNzE5NzUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xleGljYWxFbnZpcm9ubWVudC5oCSh3
b3JraW5nIGNvcHkpCkBAIC00OCw3ICs0OCw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICB1c2lu
ZyBCYXNlID0gSlNTeW1ib2xUYWJsZU9iamVjdDsKLSAgICBzdGF0aWMgY29uc3RleHByIHVuc2ln
bmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBPdmVycmlkZXNHZXRP
d25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNHZXRPd25TcGVjaWFsUHJvcGVydHlOYW1lczsKKyAg
ICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0
dXJlRmxhZ3MgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNHZXRPd25T
cGVjaWFsUHJvcGVydHlOYW1lcyB8IE92ZXJyaWRlc1B1dDsKIAogICAgIFdyaXRlQmFycmllckJh
c2U8VW5rbm93bj4qIHZhcmlhYmxlcygpCiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNNb2R1bGVFbnZpcm9ubWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlRW52aXJvbm1lbnQuaAkocmV2aXNpb24gMjcx
OTc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVFbnZpcm9ubWVu
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw3IEBAIGNsYXNzIEpTTW9kdWxlRW52aXJv
bm1lbnQgZmluYWwgOiBwdWJsaWMKICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFj
dG9yOwogcHVibGljOgogICAgIHVzaW5nIEJhc2UgPSBKU0xleGljYWxFbnZpcm9ubWVudDsKLSAg
ICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0
dXJlRmxhZ3MgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNHZXRPd25T
cGVjaWFsUHJvcGVydHlOYW1lczsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVj
dHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0
eVNsb3QgfCBPdmVycmlkZXNHZXRPd25TcGVjaWFsUHJvcGVydHlOYW1lcyB8IE92ZXJyaWRlc1B1
dDsKIAogICAgIHN0YXRpYyBKU01vZHVsZUVudmlyb25tZW50KiBjcmVhdGUoVk0mIHZtLCBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1Njb3BlKiBjdXJyZW50U2NvcGUsIFN5bWJvbFRh
YmxlKiBzeW1ib2xUYWJsZSwgSlNWYWx1ZSBpbml0aWFsVmFsdWUsIEFic3RyYWN0TW9kdWxlUmVj
b3JkKiBtb2R1bGVSZWNvcmQpCiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZU5hbWVzcGFjZU9iamVjdC5oCShyZXZpc2lvbiAy
NzE5NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZU5hbWVzcGFj
ZU9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3ICszMyw3IEBAIG5hbWVzcGFjZSBKU0Mg
ewogY2xhc3MgSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QgZmluYWwgOiBwdWJsaWMgSlNOb25GaW5h
bE9iamVjdCB7CiBwdWJsaWM6CiAgICAgdXNpbmcgQmFzZSA9IEpTTm9uRmluYWxPYmplY3Q7Ci0g
ICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVj
dHVyZUZsYWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzR2V0T3du
UHJvcGVydHlOYW1lcyB8IEludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldo
ZW5MZW5ndGhJc05vdFplcm8gfCBHZXRPd25Qcm9wZXJ0eVNsb3RJc0ltcHVyZUZvclByb3BlcnR5
QWJzZW5jZSB8IElzSW1tdXRhYmxlUHJvdG90eXBlRXhvdGljT2JqZWN0OworICAgIHN0YXRpYyBj
b25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8
IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5TmFt
ZXMgfCBPdmVycmlkZXNQdXQgfCBJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2
ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgR2V0T3duUHJvcGVydHlTbG90SXNJbXB1cmVGb3JQcm9w
ZXJ0eUFic2VuY2UgfCBJc0ltbXV0YWJsZVByb3RvdHlwZUV4b3RpY09iamVjdDsKIAogICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0Rlc3RydWN0aW9uID0gdHJ1ZTsKICAgICBzdGF0aWMg
dm9pZCBkZXN0cm95KEpTQ2VsbCopOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTT2JqZWN0LmNwcAkocmV2aXNpb24gMjcxOTc1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02ODEsMTAgKzY4MSw2
IEBAIGJvb2wgSlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdChKU09iamUKIHsKICAgICByZXR1
cm4gZ2V0T3duUHJvcGVydHlTbG90SW1wbChvYmplY3QsIGdsb2JhbE9iamVjdCwgcHJvcGVydHlO
YW1lLCBzbG90KTsKIH0KLQotdm9pZCBKU09iamVjdDo6ZG9QdXRQcm9wZXJ0eVNlY3VyaXR5Q2hl
Y2soSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwgUHV0UHJvcGVydHlT
bG90JikKLXsKLX0KICNlbmRpZiAvLyBBU1NFUlRfRU5BQkxFRAogCiAvLyBodHRwczovL3RjMzku
Z2l0aHViLmlvL2VjbWEyNjIvI3NlYy1vcmRpbmFyeXNldApAQCAtNzkzLDc3ICs3ODksNzkgQEAg
Ym9vbCBvcmRpbmFyeVNldFNsb3coSlNHbG9iYWxPYmplY3QqIGdsbwogICAgIHJldHVybiB0cnVl
OwogfQogCi0vLyBFQ01BIDguNi4yLjIKKy8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMt
b3JkaW5hcnlzZXQKIGJvb2wgSlNPYmplY3Q6OnB1dChKU0NlbGwqIGNlbGwsIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFs
dWUsIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKLSAgICByZXR1cm4gcHV0SW5saW5lRm9ySlNP
YmplY3QoY2VsbCwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KTsKKyAg
ICByZXR1cm4gcHV0SW5saW5lRm9ySlNPYmplY3QoYXNPYmplY3QoY2VsbCksIGdsb2JhbE9iamVj
dCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCk7CiB9CiAKLWJvb2wgSlNPYmplY3Q6OnB1dElu
bGluZVNsb3coSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIHByb3Bl
cnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBzbG90KQorYm9vbCBKU09i
amVjdDo6cHV0SW5saW5lU2xvdyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0
eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmIHB1dFNs
b3QsIFB1dElubGluZVNsb3dNb2RlIG1vZGUpCiB7Ci0gICAgQVNTRVJUKCFpc1RoaXNWYWx1ZUFs
dGVyZWQoc2xvdCwgdGhpcykpOworICAgIC8vIEFTU0VSVCghcGFyc2VJbmRleChwcm9wZXJ0eU5h
bWUpKTsKIAogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKKyAgICBpZiAoVU5MSUtFTFkoIXZtLmlzU2Fm
ZVRvUmVjdXJzZVNvZnQoKSkpIHsKKyAgICAgICAgdGhyb3dTdGFja092ZXJmbG93RXJyb3IoZ2xv
YmFsT2JqZWN0LCBzY29wZSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKICAgICBK
U09iamVjdCogb2JqID0gdGhpczsKICAgICBmb3IgKDs7KSB7CiAgICAgICAgIFN0cnVjdHVyZSog
c3RydWN0dXJlID0gb2JqLT5zdHJ1Y3R1cmUodm0pOwotICAgICAgICBpZiAoVU5MSUtFTFkoc3Ry
dWN0dXJlLT50eXBlSW5mbygpLmhhc1B1dFByb3BlcnR5U2VjdXJpdHlDaGVjaygpKSkgewotICAg
ICAgICAgICAgb2JqLT5tZXRob2RUYWJsZSh2bSktPmRvUHV0UHJvcGVydHlTZWN1cml0eUNoZWNr
KG9iaiwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwotICAgICAgICAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZmFsc2UpOwotICAgICAgICB9Ci0gICAgICAgIHVuc2ln
bmVkIGF0dHJpYnV0ZXM7Ci0gICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVy
ZS0+Z2V0KHZtLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMpOwotICAgICAgICBpZiAoaXNWYWxp
ZE9mZnNldChvZmZzZXQpKSB7Ci0gICAgICAgICAgICBpZiAoYXR0cmlidXRlcyAmIFByb3BlcnR5
QXR0cmlidXRlOjpSZWFkT25seSkgewotICAgICAgICAgICAgICAgIEFTU0VSVCh0aGlzLT5wcm90
b3R5cGVDaGFpbk1heUludGVyY2VwdFN0b3JlVG8odm0sIHByb3BlcnR5TmFtZSkgfHwgb2JqID09
IHRoaXMpOwotICAgICAgICAgICAgICAgIHJldHVybiB0eXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBz
Y29wZSwgc2xvdC5pc1N0cmljdE1vZGUoKSwgUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpOwot
ICAgICAgICAgICAgfQorICAgICAgICBpZiAob2JqICE9IHRoaXMgJiYgc3RydWN0dXJlLT50eXBl
SW5mbygpLm92ZXJyaWRlc1B1dCgpKQorICAgICAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNj
b3BlLCBvYmotPm1ldGhvZFRhYmxlKHZtKS0+cHV0KG9iaiwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0
eU5hbWUsIHZhbHVlLCBwdXRTbG90KSk7CiAKLSAgICAgICAgICAgIEpTVmFsdWUgZ3MgPSBvYmot
PmdldERpcmVjdChvZmZzZXQpOwotICAgICAgICAgICAgaWYgKGdzLmlzR2V0dGVyU2V0dGVyKCkp
IHsKLSAgICAgICAgICAgICAgICAvLyBXZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHdlIGRlY2lk
ZSB0byBjYWNoZSB0aGlzIHByb3BlcnR5IGJlZm9yZSB3ZSBwb3RlbnRpYWxseSBleGVjdXRlIGFy
aWJpdHJhcnkgSlMuCi0gICAgICAgICAgICAgICAgaWYgKCF0aGlzLT5zdHJ1Y3R1cmUodm0pLT5p
c1VuY2FjaGVhYmxlRGljdGlvbmFyeSgpKQotICAgICAgICAgICAgICAgICAgICBzbG90LnNldENh
Y2hlYWJsZVNldHRlcihvYmosIG9mZnNldCk7CisgICAgICAgIGJvb2wgb3ZlcnJpZGVzR2V0T3du
UHJvcGVydHlTbG90ID0gbW9kZSA9PSBQdXRJbmxpbmVTbG93TW9kZTo6SWdub3JlT3duU3BlY2lh
bFByb3BlcnRpZXMgJiYgb2JqID09IHRoaXMKKyAgICAgICAgICAgID8gZmFsc2UKKyAgICAgICAg
ICAgIDogc3RydWN0dXJlLT50eXBlSW5mbygpLm92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCgp
OworICAgICAgICBQcm9wZXJ0eVNsb3QgZ2V0U2xvdChvYmosIFByb3BlcnR5U2xvdDo6SW50ZXJu
YWxNZXRob2RUeXBlOjpHZXRPd25Qcm9wZXJ0eSk7CisgICAgICAgIGJvb2wgaGFzUHJvcGVydHkg
PSBvdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QKKyAgICAgICAgICAgID8gb2JqLT5tZXRob2RU
YWJsZSh2bSktPmdldE93blByb3BlcnR5U2xvdChvYmosIGdsb2JhbE9iamVjdCwgcHJvcGVydHlO
YW1lLCBnZXRTbG90KQorICAgICAgICAgICAgOiBvYmotPkpTT2JqZWN0OjpnZXRPd25Ob25JbmRl
eFByb3BlcnR5U2xvdCh2bSwgc3RydWN0dXJlLCBwcm9wZXJ0eU5hbWUsIGdldFNsb3QpOworICAg
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBmYWxzZSk7CiAKLSAgICAgICAgICAgICAg
ICBib29sIHJlc3VsdCA9IGNhbGxTZXR0ZXIoZ2xvYmFsT2JqZWN0LCBzbG90LnRoaXNWYWx1ZSgp
LCBncywgdmFsdWUsIHNsb3QuaXNTdHJpY3RNb2RlKCkgPyBFQ01BTW9kZTo6c3RyaWN0KCkgOiBF
Q01BTW9kZTo6c2xvcHB5KCkpOwotICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIGZhbHNlKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAv
LyBXZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHdlIGRlY2lkZSB0byBjYWNoZSB0aGlzIHByb3Bl
cnR5IGJlZm9yZSB3ZSBwb3RlbnRpYWxseSBleGVjdXRlIGFyaWJpdHJhcnkgSlMuCisgICAgICAg
IGJvb2wgaXNDYWNoZWFibGUgPSBnZXRTbG90LmlzQ2FjaGVhYmxlKCkgJiYgb2JqLT5zdHJ1Y3R1
cmUodm0pID09IHN0cnVjdHVyZTsKKyAgICAgICAgaWYgKCFpc0NhY2hlYWJsZSkKKyAgICAgICAg
ICAgIHB1dFNsb3QuZGlzYWJsZUNhY2hpbmcoKTsKKworICAgICAgICBpZiAoaGFzUHJvcGVydHkp
IHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXMgPSBnZXRTbG90LmF0dHJpYnV0ZXMo
KTsKKyAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVzICYgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRP
bmx5KQorICAgICAgICAgICAgICAgIHJldHVybiB0eXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29w
ZSwgcHV0U2xvdC5pc1N0cmljdE1vZGUoKSwgUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpOwor
ICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZXMgJiBQcm9wZXJ0eUF0dHJpYnV0ZTo6QWNjZXNzb3Ip
IHsKKyAgICAgICAgICAgICAgICBpZiAoaXNDYWNoZWFibGUpCisgICAgICAgICAgICAgICAgICAg
IHB1dFNsb3Quc2V0Q2FjaGVhYmxlU2V0dGVyKG9iaiwgZ2V0U2xvdC5jYWNoZWRPZmZzZXQoKSk7
CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBjYWxsU2V0dGVyKGds
b2JhbE9iamVjdCwgcHV0U2xvdC50aGlzVmFsdWUoKSwgZ2V0U2xvdC5nZXR0ZXJTZXR0ZXIoKSwg
dmFsdWUsIHB1dFNsb3QuaXNTdHJpY3RNb2RlKCkgPyBFQ01BTW9kZTo6c3RyaWN0KCkgOiBFQ01B
TW9kZTo6c2xvcHB5KCkpKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChncy5pc0N1
c3RvbUdldHRlclNldHRlcigpKSB7Ci0gICAgICAgICAgICAgICAgYm9vbCBpc0FjY2Vzc29yID0g
YXR0cmlidXRlcyAmIFByb3BlcnR5QXR0cmlidXRlOjpDdXN0b21BY2Nlc3NvcjsKLSAgICAgICAg
ICAgICAgICBhdXRvIHNldHRlciA9IGpzQ2FzdDxDdXN0b21HZXR0ZXJTZXR0ZXIqPihncy5hc0Nl
bGwoKSktPnNldHRlcigpOwotICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgb25s
eSBiZSBjYWNoaW5nIHRoZXNlIGlmIHdlJ3JlIG5vdCBhbiB1bmNhY2hlYWJsZSBkaWN0aW9uYXJ5
OgotICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yMTUzNDcKLQotICAgICAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gbWFrZSBzdXJlIHRo
YXQgd2UgZGVjaWRlIHRvIGNhY2hlIHRoaXMgcHJvcGVydHkgYmVmb3JlIHdlIHBvdGVudGlhbGx5
IGV4ZWN1dGUgYXJpYml0cmFyeSBKUy4KLSAgICAgICAgICAgICAgICBpZiAoaXNBY2Nlc3NvcikK
LSAgICAgICAgICAgICAgICAgICAgc2xvdC5zZXRDdXN0b21BY2Nlc3NvcihvYmosIHNldHRlcik7
Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBzbG90LnNldEN1c3Rv
bVZhbHVlKG9iaiwgc2V0dGVyKTsKLQotICAgICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gY2Fs
bEN1c3RvbVNldHRlcihnbG9iYWxPYmplY3QsIHNldHRlciwgaXNBY2Nlc3Nvciwgb2JqLCBzbG90
LnRoaXNWYWx1ZSgpLCB2YWx1ZSk7CisgICAgICAgICAgICBpZiAoYXR0cmlidXRlcyAmIFByb3Bl
cnR5QXR0cmlidXRlOjpDdXN0b21BY2Nlc3NvcikgeworICAgICAgICAgICAgICAgIFB1dFZhbHVl
RnVuYyBjdXN0b21TZXR0ZXIgPSBnZXRTbG90LmN1c3RvbVNldHRlcigpOworICAgICAgICAgICAg
ICAgIEFTU0VSVChjdXN0b21TZXR0ZXIpOworICAgICAgICAgICAgICAgIGlmIChpc0NhY2hlYWJs
ZSkKKyAgICAgICAgICAgICAgICAgICAgcHV0U2xvdC5zZXRDdXN0b21BY2Nlc3NvcihvYmosIGN1
c3RvbVNldHRlcik7CisgICAgICAgICAgICAgICAgY3VzdG9tU2V0dGVyKGdsb2JhbE9iamVjdCwg
SlNWYWx1ZTo6ZW5jb2RlKHB1dFNsb3QudGhpc1ZhbHVlKCkpLCBKU1ZhbHVlOjplbmNvZGUodmFs
dWUpKTsKICAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBmYWxzZSk7
Ci0gICAgICAgICAgICAgICAgaWYgKHJlc3VsdCAhPSBUcmlTdGF0ZTo6SW5kZXRlcm1pbmF0ZSkK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCA9PSBUcmlTdGF0ZTo6VHJ1ZTsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlm
IChhdHRyaWJ1dGVzICYgUHJvcGVydHlBdHRyaWJ1dGU6OkN1c3RvbVZhbHVlKSB7CisgICAgICAg
ICAgICAgICAgUHV0VmFsdWVGdW5jIGN1c3RvbVNldHRlciA9IGdldFNsb3QuY3VzdG9tU2V0dGVy
KCk7CisgICAgICAgICAgICAgICAgaWYgKGN1c3RvbVNldHRlciAmJiAhKGlzVGhpc1ZhbHVlQWx0
ZXJlZChwdXRTbG90LCBvYmopICYmIHB1dFNsb3QuY29udGV4dCgpID09IFB1dFByb3BlcnR5U2xv
dDo6UmVmbGVjdFNldCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGlzQ2FjaGVhYmxlKQor
ICAgICAgICAgICAgICAgICAgICAgICAgcHV0U2xvdC5zZXRDdXN0b21WYWx1ZShvYmosIGN1c3Rv
bVNldHRlcik7CisgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwg
Y3VzdG9tU2V0dGVyKGdsb2JhbE9iamVjdCwgSlNWYWx1ZTo6ZW5jb2RlKG9iaiksIEpTVmFsdWU6
OmVuY29kZSh2YWx1ZSkpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYg
KCFpc1RoaXNWYWx1ZUFsdGVyZWQocHV0U2xvdCwgb2JqKSkgeworICAgICAgICAgICAgICAgICAg
ICBvYmotPnB1dERpcmVjdCh2bSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgYXR0cmlidXRlcyAmIH5Q
cm9wZXJ0eUF0dHJpYnV0ZTo6Q3VzdG9tVmFsdWUsIHB1dFNsb3QpOworICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBBU1NFUlQoIShhdHRyaWJ1dGVzICYgUHJvcGVydHlBdHRyaWJ1dGU6OkFjY2Vzc29y
KSk7Ci0KICAgICAgICAgICAgIC8vIElmIHRoZXJlJ3MgYW4gZXhpc3RpbmcgcHJvcGVydHkgb24g
dGhlIGJhc2Ugb2JqZWN0LCBvciBvbiBvbmUgb2YgaXRzIAotICAgICAgICAgICAgLy8gcHJvdG90
eXBlcywgd2Ugc2hvdWxkIHN0b3JlIHRoZSBwcm9wZXJ0eSBvbiB0aGUgKmJhc2UqIG9iamVjdC4K
KyAgICAgICAgICAgIC8vIHByb3RvdHlwZXMsIHdlIHNob3VsZCBzdG9yZSB0aGUgcHJvcGVydHkg
b24gdGhlIHJlY2VpdmVyIG9iamVjdC4KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0g
ICAgICAgIGlmICghb2JqLT5zdGF0aWNQcm9wZXJ0aWVzUmVpZmllZCh2bSkpIHsKLSAgICAgICAg
ICAgIGlmIChvYmotPmNsYXNzSW5mbyh2bSktPmhhc1N0YXRpY1NldHRlck9yUmVhZG9ubHlQcm9w
ZXJ0aWVzKCkpIHsKLSAgICAgICAgICAgICAgICBpZiAoYXV0byBlbnRyeSA9IG9iai0+ZmluZFBy
b3BlcnR5SGFzaEVudHJ5KHZtLCBwcm9wZXJ0eU5hbWUpKQotICAgICAgICAgICAgICAgICAgICBS
RUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIHB1dEVudHJ5KGdsb2JhbE9iamVjdCwgZW50cnktPnRh
YmxlLT5jbGFzc0ZvclRoaXMsIGVudHJ5LT52YWx1ZSwgb2JqLCB0aGlzLCBwcm9wZXJ0eU5hbWUs
IHZhbHVlLCBzbG90KSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKG9i
ai0+dHlwZSgpID09IFByb3h5T2JqZWN0VHlwZSkgewotICAgICAgICAgICAgYXV0byogcHJveHkg
PSBqc0Nhc3Q8UHJveHlPYmplY3QqPihvYmopOwotICAgICAgICAgICAgUkVMRUFTRV9BTkRfUkVU
VVJOKHNjb3BlLCBwcm94eS0+UHJveHlPYmplY3Q6OnB1dChwcm94eSwgZ2xvYmFsT2JqZWN0LCBw
cm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KSk7Ci0gICAgICAgIH0KKwogICAgICAgICBKU1ZhbHVl
IHByb3RvdHlwZSA9IG9iai0+Z2V0UHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QpOwogICAgICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBmYWxzZSk7CiAgICAgICAgIGlmIChwcm90b3R5
cGUuaXNOdWxsKCkpCkBAIC04NzEsOSArODY5LDU5IEBAIGJvb2wgSlNPYmplY3Q6OnB1dElubGlu
ZVNsb3coSlNHbG9iYWxPYmoKICAgICAgICAgb2JqID0gYXNPYmplY3QocHJvdG90eXBlKTsKICAg
ICB9CiAKLSAgICBpZiAoIXB1dERpcmVjdEludGVybmFsPFB1dE1vZGVQdXQ+KHZtLCBwcm9wZXJ0
eU5hbWUsIHZhbHVlLCAwLCBzbG90KSkKLSAgICAgICAgcmV0dXJuIHR5cGVFcnJvcihnbG9iYWxP
YmplY3QsIHNjb3BlLCBzbG90LmlzU3RyaWN0TW9kZSgpLCBSZWFkb25seVByb3BlcnR5V3JpdGVF
cnJvcik7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBw
dXRJbmxpbmVXaXRoUmVjZWl2ZXJDaGVjayhnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgdmFs
dWUsIHB1dFNsb3QpKTsKK30KKworYm9vbCBKU09iamVjdDo6cHV0SW5saW5lV2l0aFJlY2VpdmVy
Q2hlY2soSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5
TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBzbG90KQoreworICAgIFZNJiB2
bSA9IGdldFZNKGdsb2JhbE9iamVjdCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOworCisgICAgaWYgKEpTT2JqZWN0KiByZWNlaXZlciA9IHNsb3QudGhpc1ZhbHVl
KCkuZ2V0T2JqZWN0KCkpIHsKKyAgICAgICAgaWYgKHJlY2VpdmVyLT50eXBlKCkgPT0gUHVyZUZv
cndhcmRpbmdQcm94eVR5cGUgJiYganNDYXN0PEpTUHJveHkqPihyZWNlaXZlciktPnRhcmdldCgp
ID09IHRoaXMpCisgICAgICAgICAgICByZWNlaXZlciA9IHRoaXM7CisKKyAgICAgICAgY29uc3Qg
TWV0aG9kVGFibGUqIG1ldGhvZFRhYmxlID0gcmVjZWl2ZXItPm1ldGhvZFRhYmxlKHZtKTsKKyAg
ICAgICAgYXV0byBkZWZpbmVPd25Qcm9wZXJ0eVZpYVB1dE1ldGhvZCA9IG1ldGhvZFRhYmxlLT5k
ZWZpbmVPd25Qcm9wZXJ0eVZpYVB1dDsKKyAgICAgICAgaWYgKGRlZmluZU93blByb3BlcnR5Vmlh
UHV0TWV0aG9kICE9IEpTT2JqZWN0OjpkZWZpbmVPd25Qcm9wZXJ0eVZpYVB1dCkKKyAgICAgICAg
ICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgZGVmaW5lT3duUHJvcGVydHlWaWFQdXRNZXRo
b2QocmVjZWl2ZXIsIGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCkpOwor
ICAgICAgICBhdXRvIGRlZmluZVByb3BlcnR5TWV0aG9kID0gbWV0aG9kVGFibGUtPmRlZmluZU93
blByb3BlcnR5OworICAgICAgICBpZiAoZGVmaW5lUHJvcGVydHlNZXRob2QgIT0gSlNPYmplY3Q6
OmRlZmluZU93blByb3BlcnR5KQorICAgICAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3Bl
LCByZWNlaXZlci0+ZGVmaW5lT3duUHJvcGVydHlWaWFQdXRTbG93KGdsb2JhbE9iamVjdCwgcHJv
cGVydHlOYW1lLCB2YWx1ZSwgc2xvdC5pc1N0cmljdE1vZGUoKSkpOworCisgICAgICAgIGlmIChy
ZWNlaXZlci0+cHV0RGlyZWN0SW50ZXJuYWw8UHV0TW9kZVB1dD4odm0sIHByb3BlcnR5TmFtZSwg
dmFsdWUsIDAsIHNsb3QpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAg
Ly8gRklYTUU6IEZvciBhIGZhaWx1cmUgZHVlIHRvIHByaW1pdGl2ZSBvciBub24tZXh0ZW5zaWJs
ZSByZWNlaXZlciwgdGhlIGVycm9yIG1lc3NhZ2UgaXMgbWlzbGVhZGluZy4KKyAgICByZXR1cm4g
dHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsIHNsb3QuaXNTdHJpY3RNb2RlKCksIFJlYWRv
bmx5UHJvcGVydHlXcml0ZUVycm9yKTsKK30KKworYm9vbCBKU09iamVjdDo6ZGVmaW5lT3duUHJv
cGVydHlWaWFQdXQoSlNPYmplY3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgUHV0UHJvcGVydHlT
bG90JiBzbG90KQoreworICAgIHJldHVybiBvYmplY3QtPmRlZmluZU93blByb3BlcnR5VmlhUHV0
RmFzdChnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpOworfQorCitib29s
IEpTT2JqZWN0OjpkZWZpbmVPd25Qcm9wZXJ0eVZpYVB1dFNsb3coSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgYm9v
bCBzaG91bGRUaHJvdykKK3sKKyAgICBWTSYgdm0gPSBnZXRWTShnbG9iYWxPYmplY3QpOworICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIFByb3BlcnR5U2xv
dCBzbG90KHRoaXMsIFByb3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBlOjpHZXRPd25Qcm9w
ZXJ0eSk7CisgICAgYm9vbCBoYXNQcm9wZXJ0eSA9IG1ldGhvZFRhYmxlKHZtKS0+Z2V0T3duUHJv
cGVydHlTbG90KHRoaXMsIGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCBzbG90KTsKKyAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBmYWxzZSk7CisgICAgaWYgKGhhc1Byb3BlcnR5KSB7
CisgICAgICAgIC8vIEZJWE1FOiBGb3IgYW4gYWNjZXNzb3Igd2l0aCBzZXR0ZXIsIHRoZSBlcnJv
ciBtZXNzYWdlIGlzIG1pc2xlYWRpbmcuCisgICAgICAgIGlmIChzbG90LmF0dHJpYnV0ZXMoKSAm
IFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seU9yQWNjZXNzb3JPckN1c3RvbUFjY2Vzc29yKQor
ICAgICAgICAgICAgcmV0dXJuIHR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCBzaG91bGRU
aHJvdywgUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpOworCisgICAgICAgIFByb3BlcnR5RGVz
Y3JpcHRvciB2YWx1ZURlc2NyaXB0b3I7CisgICAgICAgIHZhbHVlRGVzY3JpcHRvci5zZXRWYWx1
ZSh2YWx1ZSk7CisKKyAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBtZXRob2RUYWJs
ZSh2bSktPmRlZmluZU93blByb3BlcnR5KHRoaXMsIGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1l
LCB2YWx1ZURlc2NyaXB0b3IsIHNob3VsZFRocm93KSk7CisgICAgfQorCisgICAgUkVMRUFTRV9B
TkRfUkVUVVJOKHNjb3BlLCBtZXRob2RUYWJsZSh2bSktPmRlZmluZU93blByb3BlcnR5KHRoaXMs
IGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3IodmFsdWUsIHN0
YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6Tm9uZSkpLCBzaG91bGRUaHJv
dykpOwogfQogCiBib29sIEpTT2JqZWN0OjpwdXRCeUluZGV4KEpTQ2VsbCogY2VsbCwgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZh
bHVlLCBib29sIHNob3VsZFRocm93KQpAQCAtMzUyNSwxNiArMzU3MywyNiBAQCBCdXR0ZXJmbHkq
IEpTT2JqZWN0OjphbGxvY2F0ZU1vcmVPdXRPZkxpCiAgICAgcmV0dXJuIEJ1dHRlcmZseTo6Y3Jl
YXRlT3JHcm93UHJvcGVydHlTdG9yYWdlKGJ1dHRlcmZseSgpLCB2bSwgdGhpcywgc3RydWN0dXJl
KHZtKSwgb2xkU2l6ZSwgbmV3U2l6ZSk7CiB9CiAKLXN0YXRpYyBKU0N1c3RvbUdldHRlclNldHRl
ckZ1bmN0aW9uKiBnZXRDdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbkZvckdldHRlclNldHRlcihK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBD
dXN0b21HZXR0ZXJTZXR0ZXIqIGdldHRlclNldHRlciwgSlNDdXN0b21HZXR0ZXJTZXR0ZXJGdW5j
dGlvbjo6VHlwZSB0eXBlKQorc3RhdGljIEpTQ3VzdG9tR2V0dGVyRnVuY3Rpb24qIGdldEN1c3Rv
bUdldHRlckZ1bmN0aW9uKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEdldFZhbHVlRnVu
YyBnZXRWYWx1ZUZ1bmMsIE9wdGlvbmFsPERPTUF0dHJpYnV0ZUFubm90YXRpb24+IGRvbUF0dHJp
YnV0ZSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxP
YmplY3QtPnZtKCk7Ci0gICAgYXV0byBrZXkgPSBzdGQ6Om1ha2VfcGFpcihnZXR0ZXJTZXR0ZXIs
IChpbnQpdHlwZSk7Ci0gICAgSlNDdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbiogY3VzdG9tR2V0
dGVyU2V0dGVyRnVuY3Rpb24gPSB2bS5jdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbk1hcC5nZXQo
a2V5KTsKLSAgICBpZiAoIWN1c3RvbUdldHRlclNldHRlckZ1bmN0aW9uKSB7Ci0gICAgICAgIGN1
c3RvbUdldHRlclNldHRlckZ1bmN0aW9uID0gSlNDdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbjo6
Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIGdldHRlclNldHRlciwgdHlwZSwgcHJvcGVydHlOYW1l
LnB1YmxpY05hbWUoKSk7Ci0gICAgICAgIHZtLmN1c3RvbUdldHRlclNldHRlckZ1bmN0aW9uTWFw
LnNldChrZXksIGN1c3RvbUdldHRlclNldHRlckZ1bmN0aW9uKTsKKyAgICBKU0N1c3RvbUdldHRl
ckZ1bmN0aW9uKiBjdXN0b21HZXR0ZXJGdW5jdGlvbiA9IGdsb2JhbE9iamVjdC0+Y3VzdG9tR2V0
dGVyRnVuY3Rpb25NYXAoKS5nZXQoZ2V0VmFsdWVGdW5jKTsKKyAgICBpZiAoIWN1c3RvbUdldHRl
ckZ1bmN0aW9uKSB7CisgICAgICAgIGN1c3RvbUdldHRlckZ1bmN0aW9uID0gSlNDdXN0b21HZXR0
ZXJGdW5jdGlvbjo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIGdldFZhbHVlRnVuYywgZG9tQXR0
cmlidXRlLCBwcm9wZXJ0eU5hbWUucHVibGljTmFtZSgpKTsKKyAgICAgICAgZ2xvYmFsT2JqZWN0
LT5jdXN0b21HZXR0ZXJGdW5jdGlvbk1hcCgpLnNldChnZXRWYWx1ZUZ1bmMsIGN1c3RvbUdldHRl
ckZ1bmN0aW9uKTsKICAgICB9Ci0gICAgcmV0dXJuIGN1c3RvbUdldHRlclNldHRlckZ1bmN0aW9u
OworICAgIHJldHVybiBjdXN0b21HZXR0ZXJGdW5jdGlvbjsKK30KKworc3RhdGljIEpTQ3VzdG9t
U2V0dGVyRnVuY3Rpb24qIGdldEN1c3RvbVNldHRlckZ1bmN0aW9uKEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIFB1dFZhbHVlRnVuYyBwdXRWYWx1ZUZ1bmMsIFByb3BlcnR5TmFtZSBwcm9w
ZXJ0eU5hbWUpCit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIEpTQ3Vz
dG9tU2V0dGVyRnVuY3Rpb24qIGN1c3RvbVNldHRlckZ1bmN0aW9uID0gZ2xvYmFsT2JqZWN0LT5j
dXN0b21TZXR0ZXJGdW5jdGlvbk1hcCgpLmdldChwdXRWYWx1ZUZ1bmMpOworICAgIGlmICghY3Vz
dG9tU2V0dGVyRnVuY3Rpb24pIHsKKyAgICAgICAgY3VzdG9tU2V0dGVyRnVuY3Rpb24gPSBKU0N1
c3RvbVNldHRlckZ1bmN0aW9uOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHV0VmFsdWVGdW5j
LCBwcm9wZXJ0eU5hbWUpOworICAgICAgICBnbG9iYWxPYmplY3QtPmN1c3RvbVNldHRlckZ1bmN0
aW9uTWFwKCkuc2V0KHB1dFZhbHVlRnVuYywgY3VzdG9tU2V0dGVyRnVuY3Rpb24pOworICAgIH0K
KyAgICByZXR1cm4gY3VzdG9tU2V0dGVyRnVuY3Rpb247CiB9CiAKIGJvb2wgSlNPYmplY3Q6Omdl
dE93blByb3BlcnR5RGVzY3JpcHRvcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9w
ZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IpCkBA
IC0zNTUxLDMxICszNjA5LDEzIEBAIGJvb2wgSlNPYmplY3Q6OmdldE93blByb3BlcnR5RGVzY3Jp
cHRvcigKICAgICBpZiAoc2xvdC5pc0FjY2Vzc29yKCkpCiAgICAgICAgIGRlc2NyaXB0b3Iuc2V0
QWNjZXNzb3JEZXNjcmlwdG9yKHNsb3QuZ2V0dGVyU2V0dGVyKCksIHNsb3QuYXR0cmlidXRlcygp
KTsKICAgICBlbHNlIGlmIChzbG90LmF0dHJpYnV0ZXMoKSAmIFByb3BlcnR5QXR0cmlidXRlOjpD
dXN0b21BY2Nlc3NvcikgewotICAgICAgICBDdXN0b21HZXR0ZXJTZXR0ZXIqIGdldHRlclNldHRl
cjsKLSAgICAgICAgaWYgKHNsb3QuaXNDdXN0b21BY2Nlc3NvcigpKQotICAgICAgICAgICAgZ2V0
dGVyU2V0dGVyID0gc2xvdC5jdXN0b21HZXR0ZXJTZXR0ZXIoKTsKLSAgICAgICAgZWxzZSB7Ci0g
ICAgICAgICAgICBBU1NFUlQoc2xvdC5zbG90QmFzZSgpKTsKLSAgICAgICAgICAgIEpTT2JqZWN0
KiB0aGlzT2JqZWN0ID0gc2xvdC5zbG90QmFzZSgpOwotCi0gICAgICAgICAgICBKU1ZhbHVlIG1h
eWJlR2V0dGVyU2V0dGVyID0gdGhpc09iamVjdC0+Z2V0RGlyZWN0KHZtLCBwcm9wZXJ0eU5hbWUp
OwotICAgICAgICAgICAgaWYgKCFtYXliZUdldHRlclNldHRlcikgewotICAgICAgICAgICAgICAg
IHRoaXNPYmplY3QtPnJlaWZ5QWxsU3RhdGljUHJvcGVydGllcyhnbG9iYWxPYmplY3QpOwotICAg
ICAgICAgICAgICAgIG1heWJlR2V0dGVyU2V0dGVyID0gdGhpc09iamVjdC0+Z2V0RGlyZWN0KHZt
LCBwcm9wZXJ0eU5hbWUpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBBU1NFUlQobWF5
YmVHZXR0ZXJTZXR0ZXIpOwotICAgICAgICAgICAgZ2V0dGVyU2V0dGVyID0ganNEeW5hbWljQ2Fz
dDxDdXN0b21HZXR0ZXJTZXR0ZXIqPih2bSwgbWF5YmVHZXR0ZXJTZXR0ZXIpOwotICAgICAgICB9
Ci0gICAgICAgIEFTU0VSVChnZXR0ZXJTZXR0ZXIpOwotICAgICAgICBpZiAoIWdldHRlclNldHRl
cikKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQorICAgICAgICBSRUxFQVNFX0FTU0VSVF9X
SVRIX01FU1NBR0Uoc2xvdC5pc0N1c3RvbSgpLCAiUHJvcGVydHlTbG90OjpUeXBlQ3VzdG9tIGlz
IHJlcXVpcmVkIGluIGNhc2Ugb2YgUHJvcGVydHlBdHRyaWJ1dGU6OkN1c3RvbUFjY2Vzc29yIik7
CisgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBzbG90QmFzZUdsb2JhbE9iamVjdCA9IHNsb3Quc2xv
dEJhc2UoKS0+Z2xvYmFsT2JqZWN0KHZtKTsKICAgICAgICAgZGVzY3JpcHRvci5zZXRDdXN0b21E
ZXNjcmlwdG9yKHNsb3QuYXR0cmlidXRlcygpKTsKLSAgICAgICAgaWYgKGdldHRlclNldHRlci0+
Z2V0dGVyKCkpCi0gICAgICAgICAgICBkZXNjcmlwdG9yLnNldEdldHRlcihnZXRDdXN0b21HZXR0
ZXJTZXR0ZXJGdW5jdGlvbkZvckdldHRlclNldHRlcihnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFt
ZSwgZ2V0dGVyU2V0dGVyLCBKU0N1c3RvbUdldHRlclNldHRlckZ1bmN0aW9uOjpUeXBlOjpHZXR0
ZXIpKTsKLSAgICAgICAgaWYgKGdldHRlclNldHRlci0+c2V0dGVyKCkpCi0gICAgICAgICAgICBk
ZXNjcmlwdG9yLnNldFNldHRlcihnZXRDdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbkZvckdldHRl
clNldHRlcihnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgZ2V0dGVyU2V0dGVyLCBKU0N1c3Rv
bUdldHRlclNldHRlckZ1bmN0aW9uOjpUeXBlOjpTZXR0ZXIpKTsKKyAgICAgICAgaWYgKHNsb3Qu
Y3VzdG9tR2V0dGVyKCkpCisgICAgICAgICAgICBkZXNjcmlwdG9yLnNldEdldHRlcihnZXRDdXN0
b21HZXR0ZXJGdW5jdGlvbihzbG90QmFzZUdsb2JhbE9iamVjdCwgc2xvdC5jdXN0b21HZXR0ZXIo
KSwgc2xvdC5kb21BdHRyaWJ1dGUoKSwgcHJvcGVydHlOYW1lKSk7CisgICAgICAgIGlmIChzbG90
LmN1c3RvbVNldHRlcigpKQorICAgICAgICAgICAgZGVzY3JpcHRvci5zZXRTZXR0ZXIoZ2V0Q3Vz
dG9tU2V0dGVyRnVuY3Rpb24oc2xvdEJhc2VHbG9iYWxPYmplY3QsIHNsb3QuY3VzdG9tU2V0dGVy
KCksIHByb3BlcnR5TmFtZSkpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIEpTVmFsdWUgdmFsdWUg
PSBzbG90LmdldFZhbHVlKGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lKTsKICAgICAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZmFsc2UpOwpAQCAtMzg1OSwzMCArMzg5OSw2IEBAIGJv
b2wgSlNPYmplY3Q6OmFueU9iamVjdEluQ2hhaW5NYXlJbnRlcmMKICAgICB9CiB9CiAKLWJvb2wg
SlNPYmplY3Q6OnByb3RvdHlwZUNoYWluTWF5SW50ZXJjZXB0U3RvcmVUbyhWTSYgdm0sIFByb3Bl
cnR5TmFtZSBwcm9wZXJ0eU5hbWUpCi17Ci0gICAgaWYgKHBhcnNlSW5kZXgocHJvcGVydHlOYW1l
KSkKLSAgICAgICAgcmV0dXJuIGFueU9iamVjdEluQ2hhaW5NYXlJbnRlcmNlcHRJbmRleGVkQWNj
ZXNzZXModm0pOwotICAgIAotICAgIGZvciAoSlNPYmplY3QqIGN1cnJlbnQgPSB0aGlzOyA7KSB7
Ci0gICAgICAgIEpTVmFsdWUgcHJvdG90eXBlID0gY3VycmVudC0+Z2V0UHJvdG90eXBlRGlyZWN0
KHZtKTsKLSAgICAgICAgaWYgKHByb3RvdHlwZS5pc051bGwoKSkKLSAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgCi0gICAgICAgIGN1cnJlbnQgPSBhc09iamVjdChwcm90b3R5cGUp
OwotICAgICAgICAKLSAgICAgICAgdW5zaWduZWQgYXR0cmlidXRlczsKLSAgICAgICAgUHJvcGVy
dHlPZmZzZXQgb2Zmc2V0ID0gY3VycmVudC0+c3RydWN0dXJlKHZtKS0+Z2V0KHZtLCBwcm9wZXJ0
eU5hbWUsIGF0dHJpYnV0ZXMpOwotICAgICAgICBpZiAoIUpTQzo6aXNWYWxpZE9mZnNldChvZmZz
ZXQpKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIAotICAgICAgICBpZiAoYXR0cmli
dXRlcyAmIChQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6
QWNjZXNzb3IpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIAotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfQotfQotCiBib29sIEpTT2JqZWN0OjpuZWVkc1Nsb3dQdXRJbmRl
eGluZyhWTSYgdm0pIGNvbnN0CiB7CiAgICAgcmV0dXJuIGFueU9iamVjdEluQ2hhaW5NYXlJbnRl
cmNlcHRJbmRleGVkQWNjZXNzZXModm0pIHx8IGdsb2JhbE9iamVjdCh2bSktPmlzSGF2aW5nQUJh
ZFRpbWUoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAko
cmV2aXNpb24gMjcxOTc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmpl
Y3QuaAkod29ya2luZyBjb3B5KQpAQCAtMTczLDcgKzE3Myw2IEBAIHB1YmxpYzoKIAogICAgIEpT
X0VYUE9SVF9QUklWQVRFIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNP
YmplY3QqLCBKU0dsb2JhbE9iamVjdCosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgUHJvcGVydHlT
bG90Jik7CiAgICAgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RJbmxpbmUoSlNHbG9iYWxPYmplY3Qq
LCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwotICAgIEpTX0VYUE9SVF9QUklWQVRFX0lG
X0FTU0VSVF9FTkFCTEVEIHN0YXRpYyB2b2lkIGRvUHV0UHJvcGVydHlTZWN1cml0eUNoZWNrKEpT
T2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIFB1dFByb3BlcnR5U2xvdCYp
OwogCiAgICAgLy8gVGhlIGtleSBkaWZmZXJlbmNlIGJldHdlZW4gdGhpcyBhbmQgZ2V0T3duUHJv
cGVydHlTbG90IGlzIHRoYXQgZ2V0T3duUHJvcGVydHlTbG90CiAgICAgLy8gY3VycmVudGx5IHJl
dHVybnMgaW5jb3JyZWN0IHJlc3VsdHMgZm9yIHRoZSBET00gd2luZG93ICh3aXRoIG5vbi1vd24g
cHJvcGVydGllcykKQEAgLTE5OSw3ICsxOTgsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBt
X2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCk7CiAgICAgfQogICAgIAotICAgIHN0YXRpYyBib29s
IHB1dElubGluZUZvckpTT2JqZWN0KEpTQ2VsbCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlO
YW1lLCBKU1ZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMgYm9vbCBwdXRJbmxp
bmVGb3JKU09iamVjdChKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBK
U1ZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmKTsKICAgICAKICAgICBKU19FWFBPUlRfUFJJVkFURSBz
dGF0aWMgYm9vbCBwdXQoSlNDZWxsKiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIEpT
VmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOwogICAgIC8vIHB1dEJ5SW5kZXggYXNzdW1lcyB0aGF0
IHRoZSByZWNlaXZlciBpcyB0aGlzIEpTQ2VsbCBvYmplY3QuCkBAIC0yMTgsMTIgKzIxNywxMyBA
QCBwdWJsaWM6CiAKICAgICBBTFdBWVNfSU5MSU5FIGJvb2wgcHV0QnlJbmRleElubGluZShKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCB1aW50NjRfdCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUg
dmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpCiAgICAgeworICAgICAgICBWTSYgdm0gPSBnZXRWTShn
bG9iYWxPYmplY3QpOwogICAgICAgICBpZiAoTElLRUxZKHByb3BlcnR5TmFtZSA8PSBNQVhfQVJS
QVlfSU5ERVgpKQogICAgICAgICAgICAgcmV0dXJuIHB1dEJ5SW5kZXhJbmxpbmUoZ2xvYmFsT2Jq
ZWN0LCBzdGF0aWNfY2FzdDx1aW50MzJfdD4ocHJvcGVydHlOYW1lKSwgdmFsdWUsIHNob3VsZFRo
cm93KTsKIAogICAgICAgICBBU1NFUlQocHJvcGVydHlOYW1lIDw9IG1heFNhZmVJbnRlZ2VyKCkp
OwogICAgICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdCh0aGlzLCBzaG91bGRUaHJvdyk7Ci0gICAg
ICAgIHJldHVybiBwdXRJbmxpbmVGb3JKU09iamVjdCh0aGlzLCBnbG9iYWxPYmplY3QsIElkZW50
aWZpZXI6OmZyb20oZ2V0Vk0oZ2xvYmFsT2JqZWN0KSwgcHJvcGVydHlOYW1lKSwgdmFsdWUsIHNs
b3QpOworICAgICAgICByZXR1cm4gbWV0aG9kVGFibGUodm0pLT5wdXQodGhpcywgZ2xvYmFsT2Jq
ZWN0LCBJZGVudGlmaWVyOjpmcm9tKHZtLCBwcm9wZXJ0eU5hbWUpLCB2YWx1ZSwgc2xvdCk7CiAg
ICAgfQogICAgICAgICAKICAgICAvLyBUaGlzIGlzIHNpbWlsYXIgdG8gdGhlIHB1dERpcmVjdCog
bWV0aG9kczoKQEAgLTY0Miw2ICs2NDIsNyBAQCBwdWJsaWM6CiAgICAgLy8gIC0gYXR0cmlidXRl
cyB3aWxsIGJlIHJlc3BlY3RlZCAoYWZ0ZXIgdGhlIGNhbGwgdGhlIHByb3BlcnR5IHdpbGwgZXhp
c3Qgd2l0aCB0aGUgZ2l2ZW4gYXR0cmlidXRlcykKICAgICAvLyAgLSB0aGUgcHJvcGVydHkgbmFt
ZSBpcyBhc3N1bWVkIHRvIG5vdCBiZSBhbiBpbmRleC4KICAgICBib29sIHB1dERpcmVjdChWTSYs
IFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcyA9IDApOworICAgIGJv
b2wgcHV0RGlyZWN0KFZNJiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1
dGVzLCBQdXRQcm9wZXJ0eVNsb3QmKTsKICAgICBib29sIHB1dERpcmVjdChWTSYsIFByb3BlcnR5
TmFtZSwgSlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7CiAgICAgdm9pZCBwdXREaXJlY3RXaXRo
b3V0VHJhbnNpdGlvbihWTSYsIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgdW5zaWduZWQgYXR0cmli
dXRlcyA9IDApOwogICAgIGJvb2wgcHV0RGlyZWN0Tm9uSW5kZXhBY2Nlc3NvcihWTSYsIFByb3Bl
cnR5TmFtZSwgR2V0dGVyU2V0dGVyKiwgdW5zaWduZWQgYXR0cmlidXRlcyk7CkBAIC03OTYsNiAr
Nzk3LDcgQEAgcHVibGljOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIEpTRnVuY3Rpb24qIHB1dERp
cmVjdEJ1aWx0aW5GdW5jdGlvbihWTSYsIEpTR2xvYmFsT2JqZWN0KiwgY29uc3QgUHJvcGVydHlO
YW1lJiwgRnVuY3Rpb25FeGVjdXRhYmxlKiwgdW5zaWduZWQgYXR0cmlidXRlcyk7CiAgICAgSlNG
dW5jdGlvbiogcHV0RGlyZWN0QnVpbHRpbkZ1bmN0aW9uV2l0aG91dFRyYW5zaXRpb24oVk0mLCBK
U0dsb2JhbE9iamVjdCosIGNvbnN0IFByb3BlcnR5TmFtZSYsIEZ1bmN0aW9uRXhlY3V0YWJsZSos
IHVuc2lnbmVkIGF0dHJpYnV0ZXMpOwogCisgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGJv
b2wgZGVmaW5lT3duUHJvcGVydHlWaWFQdXQoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFBy
b3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7CiAgICAgSlNfRVhQT1JUX1BS
SVZBVEUgc3RhdGljIGJvb2wgZGVmaW5lT3duUHJvcGVydHkoSlNPYmplY3QqLCBKU0dsb2JhbE9i
amVjdCosIFByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlEZXNjcmlwdG9yJiwgYm9vbCBzaG91
bGRUaHJvdyk7CiAKICAgICBib29sIGlzRW52aXJvbm1lbnQoKSBjb25zdDsKQEAgLTgxNSw3ICs4
MTcsNiBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc0Zyb3plbihWTSYgdm0pIHsgcmV0dXJuIHN0cnVj
dHVyZSh2bSktPmlzRnJvemVuKHZtKTsgfQogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBh
bnlPYmplY3RJbkNoYWluTWF5SW50ZXJjZXB0SW5kZXhlZEFjY2Vzc2VzKFZNJikgY29uc3Q7Ci0g
ICAgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBwcm90b3R5cGVDaGFpbk1heUludGVyY2VwdFN0b3Jl
VG8oVk0mLCBQcm9wZXJ0eU5hbWUpOwogICAgIGJvb2wgbmVlZHNTbG93UHV0SW5kZXhpbmcoVk0m
KSBjb25zdDsKIAogcHJpdmF0ZToKQEAgLTk1Myw2ICs5NTQsMTMgQEAgcHVibGljOgogICAgIGJv
b2wgY2FuUGVyZm9ybUZhc3RQdXRJbmxpbmUoVk0mLCBQcm9wZXJ0eU5hbWUpOwogICAgIGJvb2wg
Y2FuUGVyZm9ybUZhc3RQdXRJbmxpbmVFeGNsdWRpbmdQcm90byhWTSYpOwogCisgICAgZW51bSBj
bGFzcyBQdXRJbmxpbmVTbG93TW9kZSA6IHVpbnQ4X3QgeyBPcmRpbmFyeVNldCwgSWdub3JlT3du
U3BlY2lhbFByb3BlcnRpZXMgfTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBORVZFUl9JTkxJTkUg
Ym9vbCBwdXRJbmxpbmVTbG93KEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVl
LCBQdXRQcm9wZXJ0eVNsb3QmLCBQdXRJbmxpbmVTbG93TW9kZSA9IFB1dElubGluZVNsb3dNb2Rl
OjpPcmRpbmFyeVNldCk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgTkVWRVJfSU5MSU5FIGJvb2wg
cHV0SW5saW5lV2l0aFJlY2VpdmVyQ2hlY2soSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUs
IEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOworCisgICAgYm9vbCBkZWZpbmVPd25Qcm9wZXJ0
eVZpYVB1dEZhc3QoSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFBy
b3BlcnR5U2xvdCYpOworICAgIGJvb2wgZGVmaW5lT3duUHJvcGVydHlWaWFQdXRTbG93KEpTR2xv
YmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsKKwog
ICAgIGJvb2wgbWF5QmVQcm90b3R5cGUoKSBjb25zdDsKICAgICB2b2lkIGRpZEJlY29tZVByb3Rv
dHlwZSgpOwogCkBAIC0xMTA3LDggKzExMTUsNiBAQCBwcml2YXRlOgogICAgIHRlbXBsYXRlPFB1
dE1vZGU+CiAgICAgYm9vbCBwdXREaXJlY3RJbnRlcm5hbChWTSYsIFByb3BlcnR5TmFtZSwgSlNW
YWx1ZSwgdW5zaWduZWQgYXR0ciwgUHV0UHJvcGVydHlTbG90Jik7CiAKLSAgICBKU19FWFBPUlRf
UFJJVkFURSBORVZFUl9JTkxJTkUgYm9vbCBwdXRJbmxpbmVTbG93KEpTR2xvYmFsT2JqZWN0Kiwg
UHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmKTsKLQogICAgIGJvb2wgZ2V0
Tm9uSW5kZXhQcm9wZXJ0eVNsb3QoSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIFByb3Bl
cnR5U2xvdCYpOwogICAgIGJvb2wgZ2V0T3duTm9uSW5kZXhQcm9wZXJ0eVNsb3QoVk0mLCBTdHJ1
Y3R1cmUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwogICAgIEpTX0VYUE9SVF9QUklW
QVRFIHZvaWQgZmlsbEdldHRlclByb3BlcnR5U2xvdChWTSYsIFByb3BlcnR5U2xvdCYsIEpTQ2Vs
bCosIHVuc2lnbmVkLCBQcm9wZXJ0eU9mZnNldCk7CkBAIC0xNDEzLDE2ICsxNDE5LDE2IEBAIEFM
V0FZU19JTkxJTkUgdm9pZCBKU09iamVjdDo6ZmlsbEN1c3RvbUcKICAgICBpZiAoY3VzdG9tR2V0
dGVyU2V0dGVyLT5pbmhlcml0czxET01BdHRyaWJ1dGVHZXR0ZXJTZXR0ZXI+KHZtKSkgewogICAg
ICAgICBhdXRvKiBkb21BdHRyaWJ1dGUgPSBqc0Nhc3Q8RE9NQXR0cmlidXRlR2V0dGVyU2V0dGVy
Kj4oY3VzdG9tR2V0dGVyU2V0dGVyKTsKICAgICAgICAgaWYgKHN0cnVjdHVyZS0+aXNVbmNhY2hl
YWJsZURpY3Rpb25hcnkoKSkKLSAgICAgICAgICAgIHNsb3Quc2V0Q3VzdG9tKHRoaXMsIGF0dHJp
YnV0ZXMsIGRvbUF0dHJpYnV0ZS0+Z2V0dGVyKCksIGRvbUF0dHJpYnV0ZS0+ZG9tQXR0cmlidXRl
KCkpOworICAgICAgICAgICAgc2xvdC5zZXRDdXN0b20odGhpcywgYXR0cmlidXRlcywgZG9tQXR0
cmlidXRlLT5nZXR0ZXIoKSwgZG9tQXR0cmlidXRlLT5zZXR0ZXIoKSwgZG9tQXR0cmlidXRlLT5k
b21BdHRyaWJ1dGUoKSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNsb3Quc2V0Q2FjaGVh
YmxlQ3VzdG9tKHRoaXMsIGF0dHJpYnV0ZXMsIGRvbUF0dHJpYnV0ZS0+Z2V0dGVyKCksIGRvbUF0
dHJpYnV0ZS0+ZG9tQXR0cmlidXRlKCkpOworICAgICAgICAgICAgc2xvdC5zZXRDYWNoZWFibGVD
dXN0b20odGhpcywgYXR0cmlidXRlcywgZG9tQXR0cmlidXRlLT5nZXR0ZXIoKSwgZG9tQXR0cmli
dXRlLT5zZXR0ZXIoKSwgZG9tQXR0cmlidXRlLT5kb21BdHRyaWJ1dGUoKSk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKICAgICBpZiAoc3RydWN0dXJlLT5pc1VuY2FjaGVhYmxlRGljdGlvbmFy
eSgpKQotICAgICAgICBzbG90LnNldEN1c3RvbSh0aGlzLCBhdHRyaWJ1dGVzLCBjdXN0b21HZXR0
ZXJTZXR0ZXItPmdldHRlcigpKTsKKyAgICAgICAgc2xvdC5zZXRDdXN0b20odGhpcywgYXR0cmli
dXRlcywgY3VzdG9tR2V0dGVyU2V0dGVyLT5nZXR0ZXIoKSwgY3VzdG9tR2V0dGVyU2V0dGVyLT5z
ZXR0ZXIoKSk7CiAgICAgZWxzZQotICAgICAgICBzbG90LnNldENhY2hlYWJsZUN1c3RvbSh0aGlz
LCBhdHRyaWJ1dGVzLCBjdXN0b21HZXR0ZXJTZXR0ZXItPmdldHRlcigpKTsKKyAgICAgICAgc2xv
dC5zZXRDYWNoZWFibGVDdXN0b20odGhpcywgYXR0cmlidXRlcywgY3VzdG9tR2V0dGVyU2V0dGVy
LT5nZXR0ZXIoKSwgY3VzdG9tR2V0dGVyU2V0dGVyLT5zZXR0ZXIoKSk7CiB9CiAKIC8vIEl0IG1h
eSBzZWVtIGNyYXp5IHRvIGlubGluZSBhIGZ1bmN0aW9uIHRoaXMgbGFyZ2UsIGVzcGVjaWFsbHkg
YSB2aXJ0dWFsIGZ1bmN0aW9uLApAQCAtMTQ0NCwxMCArMTQ1MCw2IEBAIEFMV0FZU19JTkxJTkUg
Ym9vbCBKU09iamVjdDo6Z2V0T3duUHJvcGUKIHsKICAgICByZXR1cm4gZ2V0T3duUHJvcGVydHlT
bG90SW1wbChvYmplY3QsIGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCBzbG90KTsKIH0KLQot
QUxXQVlTX0lOTElORSB2b2lkIEpTT2JqZWN0Ojpkb1B1dFByb3BlcnR5U2VjdXJpdHlDaGVjayhK
U09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBQdXRQcm9wZXJ0eVNsb3Qm
KQotewotfQogI2VuZGlmCiAKIC8vIEl0IG1heSBzZWVtIGNyYXp5IHRvIGlubGluZSBhIGZ1bmN0
aW9uIHRoaXMgbGFyZ2UgYnV0IGl0IG1ha2VzIGEgYmlnIGRpZmZlcmVuY2UKQEAgLTE1MzEsNiAr
MTUzMywxMyBAQCBpbmxpbmUgYm9vbCBKU09iamVjdDo6cHV0RGlyZWN0KFZNJiB2bSwgCiAgICAg
cmV0dXJuIHB1dERpcmVjdEludGVybmFsPFB1dE1vZGVEZWZpbmVPd25Qcm9wZXJ0eT4odm0sIHBy
b3BlcnR5TmFtZSwgdmFsdWUsIGF0dHJpYnV0ZXMsIHNsb3QpOwogfQogCitpbmxpbmUgYm9vbCBK
U09iamVjdDo6cHV0RGlyZWN0KFZNJiB2bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNW
YWx1ZSB2YWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcywgUHV0UHJvcGVydHlTbG90JiBzbG90KQor
eworICAgIEFTU0VSVCghdmFsdWUuaXNHZXR0ZXJTZXR0ZXIoKSk7CisgICAgQVNTRVJUKCF2YWx1
ZS5pc0N1c3RvbUdldHRlclNldHRlcigpKTsKKyAgICByZXR1cm4gcHV0RGlyZWN0SW50ZXJuYWw8
UHV0TW9kZURlZmluZU93blByb3BlcnR5Pih2bSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgYXR0cmli
dXRlcywgc2xvdCk7Cit9CisKIGlubGluZSBib29sIEpTT2JqZWN0OjpwdXREaXJlY3QoVk0mIHZt
LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBQdXRQcm9wZXJ0eVNs
b3QmIHNsb3QpCiB7CiAgICAgQVNTRVJUKCF2YWx1ZS5pc0dldHRlclNldHRlcigpKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0SW5saW5lcy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0SW5saW5lcy5oCShy
ZXZpc2lvbiAyNzE5NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVj
dElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtODQsNyArODQsNyBAQCBBTFdBWVNfSU5MSU5F
IGJvb2wgSlNPYmplY3Q6OmNhblBlcmZvcm1GCiAgICAgSlNPYmplY3QqIG9iaiA9IHRoaXM7CiAg
ICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBvYmotPnN0
cnVjdHVyZSh2bSk7Ci0gICAgICAgIGlmIChzdHJ1Y3R1cmUtPmhhc1JlYWRPbmx5T3JHZXR0ZXJT
ZXR0ZXJQcm9wZXJ0aWVzRXhjbHVkaW5nUHJvdG8oKSB8fCBzdHJ1Y3R1cmUtPnR5cGVJbmZvKCku
b3ZlcnJpZGVzR2V0UHJvdG90eXBlKCkpCisgICAgICAgIGlmIChzdHJ1Y3R1cmUtPmhhc1JlYWRP
bmx5T3JHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzRXhjbHVkaW5nUHJvdG8oKSB8fCBzdHJ1Y3R1cmUt
PnR5cGVJbmZvKCkub3ZlcnJpZGVzUHV0KCkgfHwgc3RydWN0dXJlLT50eXBlSW5mbygpLm92ZXJy
aWRlc0dldE93blByb3BlcnR5U2xvdCgpIHx8IHN0cnVjdHVyZS0+dHlwZUluZm8oKS5vdmVycmlk
ZXNHZXRQcm90b3R5cGUoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICBw
cm90b3R5cGUgPSBvYmotPmdldFByb3RvdHlwZURpcmVjdCh2bSk7CkBAIC0yNDgsMzIgKzI0OCwz
OSBAQCBBTFdBWVNfSU5MSU5FIFByb3BlcnR5T2Zmc2V0IEpTT2JqZWN0OjpwCiAgICAgcmV0dXJu
IHJlc3VsdDsKIH0KIAotLy8gRUNNQSA4LjYuMi4yCi1BTFdBWVNfSU5MSU5FIGJvb2wgSlNPYmpl
Y3Q6OnB1dElubGluZUZvckpTT2JqZWN0KEpTQ2VsbCogY2VsbCwgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgUHV0
UHJvcGVydHlTbG90JiBzbG90KQorLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vcmRp
bmFyeXNldAorQUxXQVlTX0lOTElORSBib29sIEpTT2JqZWN0OjpwdXRJbmxpbmVGb3JKU09iamVj
dChKU09iamVjdCogdGhpc09iamVjdCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHJv
cGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBz
bG90KQogewogICAgIFZNJiB2bSA9IGdldFZNKGdsb2JhbE9iamVjdCk7Ci0gICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgSlNPYmplY3QqIHRoaXNPYmplY3Qg
PSBqc0Nhc3Q8SlNPYmplY3QqPihjZWxsKTsKICAgICBBU1NFUlQodmFsdWUpOwogICAgIEFTU0VS
VCghSGVhcDo6aGVhcCh2YWx1ZSkgfHwgSGVhcDo6aGVhcCh2YWx1ZSkgPT0gSGVhcDo6aGVhcCh0
aGlzT2JqZWN0KSk7CiAKLSAgICBpZiAoVU5MSUtFTFkoaXNUaGlzVmFsdWVBbHRlcmVkKHNsb3Qs
IHRoaXNPYmplY3QpKSkKLSAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBvcmRpbmFy
eVNldFNsb3coZ2xvYmFsT2JqZWN0LCB0aGlzT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBz
bG90LnRoaXNWYWx1ZSgpLCBzbG90LmlzU3RyaWN0TW9kZSgpKSk7Ci0KICAgICAvLyBUcnkgaW5k
ZXhlZCBwdXQgZmlyc3QuIFRoaXMgaXMgcmVxdWlyZWQgZm9yIGNvcnJlY3RuZXNzLCBzaW5jZSBs
b2FkcyBvbiBwcm9wZXJ0eSBuYW1lcyB0aGF0IGFwcGVhciBsaWtlCiAgICAgLy8gdmFsaWQgaW5k
aWNlcyB3aWxsIG5ldmVyIGxvb2sgaW4gdGhlIG5hbWVkIHByb3BlcnR5IHN0b3JhZ2UuCi0gICAg
aWYgKE9wdGlvbmFsPHVpbnQzMl90PiBpbmRleCA9IHBhcnNlSW5kZXgocHJvcGVydHlOYW1lKSkK
LSAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBwdXRCeUluZGV4KHRoaXNPYmplY3Qs
IGdsb2JhbE9iamVjdCwgaW5kZXgudmFsdWUoKSwgdmFsdWUsIHNsb3QuaXNTdHJpY3RNb2RlKCkp
KTsKLQotICAgIGlmICh0aGlzT2JqZWN0LT5jYW5QZXJmb3JtRmFzdFB1dElubGluZSh2bSwgcHJv
cGVydHlOYW1lKSkgewotICAgICAgICBBU1NFUlQoIXRoaXNPYmplY3QtPnByb3RvdHlwZUNoYWlu
TWF5SW50ZXJjZXB0U3RvcmVUbyh2bSwgcHJvcGVydHlOYW1lKSk7Ci0gICAgICAgIGlmICghdGhp
c09iamVjdC0+cHV0RGlyZWN0SW50ZXJuYWw8UHV0TW9kZVB1dD4odm0sIHByb3BlcnR5TmFtZSwg
dmFsdWUsIDAsIHNsb3QpKQotICAgICAgICAgICAgcmV0dXJuIHR5cGVFcnJvcihnbG9iYWxPYmpl
Y3QsIHNjb3BlLCBzbG90LmlzU3RyaWN0TW9kZSgpLCBSZWFkb25seVByb3BlcnR5V3JpdGVFcnJv
cik7Ci0gICAgICAgIHJldHVybiB0cnVlOworICAgIGlmIChPcHRpb25hbDx1aW50MzJfdD4gaW5k
ZXggPSBwYXJzZUluZGV4KHByb3BlcnR5TmFtZSkpIHsKKyAgICAgICAgaWYgKFVOTElLRUxZKGlz
VGhpc1ZhbHVlQWx0ZXJlZChzbG90LCB0aGlzT2JqZWN0KSkpCisgICAgICAgICAgICByZXR1cm4g
b3JkaW5hcnlTZXRTbG93KGdsb2JhbE9iamVjdCwgdGhpc09iamVjdCwgcHJvcGVydHlOYW1lLCB2
YWx1ZSwgc2xvdC50aGlzVmFsdWUoKSwgc2xvdC5pc1N0cmljdE1vZGUoKSk7CisgICAgICAgIHJl
dHVybiB0aGlzT2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPnB1dEJ5SW5kZXgodGhpc09iamVjdCwg
Z2xvYmFsT2JqZWN0LCBpbmRleC52YWx1ZSgpLCB2YWx1ZSwgc2xvdC5pc1N0cmljdE1vZGUoKSk7
CiAgICAgfQogCi0gICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCB0aGlzT2JqZWN0LT5wdXRJ
bmxpbmVTbG93KGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCkpOworICAg
IGlmICghdGhpc09iamVjdC0+Y2FuUGVyZm9ybUZhc3RQdXRJbmxpbmUodm0sIHByb3BlcnR5TmFt
ZSkpCisgICAgICAgIHJldHVybiB0aGlzT2JqZWN0LT5wdXRJbmxpbmVTbG93KGdsb2JhbE9iamVj
dCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCk7CisgICAgaWYgKFVOTElLRUxZKGlzVGhpc1Zh
bHVlQWx0ZXJlZChzbG90LCB0aGlzT2JqZWN0KSkpCisgICAgICAgIHJldHVybiB0aGlzT2JqZWN0
LT5wdXRJbmxpbmVXaXRoUmVjZWl2ZXJDaGVjayhnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwg
dmFsdWUsIHNsb3QpOworICAgIHJldHVybiB0aGlzT2JqZWN0LT5kZWZpbmVPd25Qcm9wZXJ0eVZp
YVB1dEZhc3QoZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KTsKK30KKwor
QUxXQVlTX0lOTElORSBib29sIEpTT2JqZWN0OjpkZWZpbmVPd25Qcm9wZXJ0eVZpYVB1dEZhc3Qo
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwg
SlNWYWx1ZSB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBzbG90KQoreworICAgIEFTU0VSVCghcGFy
c2VJbmRleChwcm9wZXJ0eU5hbWUpKTsKKworICAgIFZNJiB2bSA9IGdldFZNKGdsb2JhbE9iamVj
dCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgaWYg
KHB1dERpcmVjdEludGVybmFsPFB1dE1vZGVQdXQ+KHZtLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCAw
LCBzbG90KSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgLy8gRklYTUU6IEZvciBhIGZhaWx1
cmUgZHVlIHRvIG5vbi1leHRlbnNpYmxlIHN0cnVjdHVyZSwgdGhlIGVycm9yIG1lc3NhZ2UgaXMg
bWlzbGVhZGluZy4KKyAgICByZXR1cm4gdHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsIHNs
b3QuaXNTdHJpY3RNb2RlKCksIFJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9yKTsKIH0KIAogLy8g
SGFzT3duUHJvcGVydHkoTywgUCkgZnJvbSBzZWN0aW9uIDcuMy4xMSBpbiB0aGUgc3BlYy4KQEAg
LTMxNiw3ICszMjMsNyBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgSlNPYmplY3Q6OnB1dERpcmVjdElu
CiAgICAgICAgIHVuc2lnbmVkIGN1cnJlbnRBdHRyaWJ1dGVzOwogICAgICAgICBQcm9wZXJ0eU9m
ZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldCh2bSwgcHJvcGVydHlOYW1lLCBjdXJyZW50QXR0
cmlidXRlcyk7CiAgICAgICAgIGlmIChvZmZzZXQgIT0gaW52YWxpZE9mZnNldCkgewotICAgICAg
ICAgICAgaWYgKChtb2RlID09IFB1dE1vZGVQdXQpICYmIGN1cnJlbnRBdHRyaWJ1dGVzICYgUHJv
cGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5KQorICAgICAgICAgICAgaWYgKChtb2RlID09IFB1dE1v
ZGVQdXQpICYmIGN1cnJlbnRBdHRyaWJ1dGVzICYgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5
T3JBY2Nlc3Nvck9yQ3VzdG9tQWNjZXNzb3IpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCiAgICAgICAgICAgICBwdXREaXJlY3Qodm0sIG9mZnNldCwgdmFsdWUpOwpAQCAtMzc1LDcg
KzM4Miw3IEBAIEFMV0FZU19JTkxJTkUgYm9vbCBKU09iamVjdDo6cHV0RGlyZWN0SW4KICAgICB1
bnNpZ25lZCBjdXJyZW50QXR0cmlidXRlczsKICAgICBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldCh2
bSwgcHJvcGVydHlOYW1lLCBjdXJyZW50QXR0cmlidXRlcyk7CiAgICAgaWYgKG9mZnNldCAhPSBp
bnZhbGlkT2Zmc2V0KSB7Ci0gICAgICAgIGlmICgobW9kZSA9PSBQdXRNb2RlUHV0KSAmJiBjdXJy
ZW50QXR0cmlidXRlcyAmIFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSkKKyAgICAgICAgaWYg
KChtb2RlID09IFB1dE1vZGVQdXQpICYmIGN1cnJlbnRBdHRyaWJ1dGVzICYgUHJvcGVydHlBdHRy
aWJ1dGU6OlJlYWRPbmx5T3JBY2Nlc3Nvck9yQ3VzdG9tQWNjZXNzb3IpCiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKICAgICAgICAgc3RydWN0dXJlLT5kaWRSZXBsYWNlUHJvcGVydHkob2Zm
c2V0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJveHkuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3h5LmgJKHJldmlz
aW9uIDI3MTk3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJveHkuaAko
d29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIGNsYXNzIEpT
UHJveHkgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7CiBwdWJsaWM6CiAgICAgdXNpbmcgQmFz
ZSA9IEpTTm9uRmluYWxPYmplY3Q7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1
Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVy
dHlTbG90IHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlOYW1lcyB8IE92ZXJyaWRlc0dldFByb3Rv
dHlwZSB8IEludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJ
c05vdFplcm87CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9
IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3Zl
cnJpZGVzR2V0T3duUHJvcGVydHlOYW1lcyB8IE92ZXJyaWRlc1B1dCB8IE92ZXJyaWRlc0dldFBy
b3RvdHlwZSB8IEludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5n
dGhJc05vdFplcm87CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VB
Y2Nlc3M+CiAgICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGVJbmZvLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlSW5mby5oCShyZXZpc2lvbiAy
NzE5NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGVJbmZvLmgJKHdv
cmtpbmcgY29weSkKQEAgLTU3LDcgKzU3LDcgQEAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBJ
c0ltbXV0YWJsZVBybwogc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBHZXRPd25Qcm9wZXJ0eVNs
b3RJc0ltcHVyZUZvclByb3BlcnR5QWJzZW5jZSA9IDEgPDwgMTU7CiBzdGF0aWMgY29uc3RleHBy
IHVuc2lnbmVkIEludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5n
dGhJc05vdFplcm8gPSAxIDw8IDE2Owogc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1
cmVJc0ltbW9ydGFsID0gMSA8PCAxNzsKLXN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgSGFzUHV0
UHJvcGVydHlTZWN1cml0eUNoZWNrID0gMSA8PCAxODsKK3N0YXRpYyBjb25zdGV4cHIgdW5zaWdu
ZWQgT3ZlcnJpZGVzUHV0ID0gMSA8PCAxODsKIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgT3Zl
cnJpZGVzR2V0UHJvdG90eXBlID0gMSA8PCAxOTsKIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQg
R2V0T3duUHJvcGVydHlTbG90TWF5QmVXcm9uZ0Fib3V0RG9udEVudW0gPSAxIDw8IDIwOwogCkBA
IC0xMDIsMTIgKzEwMiwxMiBAQCBwdWJsaWM6CiAgICAgYm9vbCBvdmVycmlkZXNHZXRPd25Qcm9w
ZXJ0eU5hbWVzKCkgY29uc3QgeyByZXR1cm4gaXNTZXRPbkZsYWdzMjxPdmVycmlkZXNHZXRPd25Q
cm9wZXJ0eU5hbWVzPigpOyB9CiAgICAgYm9vbCBvdmVycmlkZXNHZXRPd25TcGVjaWFsUHJvcGVy
dHlOYW1lcygpIGNvbnN0IHsgcmV0dXJuIGlzU2V0T25GbGFnczI8T3ZlcnJpZGVzR2V0T3duU3Bl
Y2lhbFByb3BlcnR5TmFtZXM+KCk7IH0KICAgICBib29sIG92ZXJyaWRlc0FueUZvcm1PZkdldE93
blByb3BlcnR5TmFtZXMoKSBjb25zdCB7IHJldHVybiBvdmVycmlkZXNHZXRPd25Qcm9wZXJ0eU5h
bWVzKCkgfHwgb3ZlcnJpZGVzR2V0T3duU3BlY2lhbFByb3BlcnR5TmFtZXMoKTsgfQorICAgIGJv
b2wgb3ZlcnJpZGVzUHV0KCkgY29uc3QgeyByZXR1cm4gaXNTZXRPbkZsYWdzMjxPdmVycmlkZXNQ
dXQ+KCk7IH0KICAgICBib29sIG92ZXJyaWRlc0dldFByb3RvdHlwZSgpIGNvbnN0IHsgcmV0dXJu
IGlzU2V0T25GbGFnczI8T3ZlcnJpZGVzR2V0UHJvdG90eXBlPigpOyB9CiAgICAgYm9vbCBwcm9o
aWJpdHNQcm9wZXJ0eUNhY2hpbmcoKSBjb25zdCB7IHJldHVybiBpc1NldE9uRmxhZ3MyPFByb2hp
Yml0c1Byb3BlcnR5Q2FjaGluZz4oKTsgfQogICAgIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90SXNJ
bXB1cmUoKSBjb25zdCB7IHJldHVybiBpc1NldE9uRmxhZ3MyPEdldE93blByb3BlcnR5U2xvdElz
SW1wdXJlPigpOyB9CiAgICAgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RJc0ltcHVyZUZvclByb3Bl
cnR5QWJzZW5jZSgpIGNvbnN0IHsgcmV0dXJuIGlzU2V0T25GbGFnczI8R2V0T3duUHJvcGVydHlT
bG90SXNJbXB1cmVGb3JQcm9wZXJ0eUFic2VuY2U+KCk7IH0KICAgICBib29sIGdldE93blByb3Bl
cnR5U2xvdE1heUJlV3JvbmdBYm91dERvbnRFbnVtKCkgY29uc3QgeyByZXR1cm4gaXNTZXRPbkZs
YWdzMjxHZXRPd25Qcm9wZXJ0eVNsb3RNYXlCZVdyb25nQWJvdXREb250RW51bT4oKTsgfQotICAg
IGJvb2wgaGFzUHV0UHJvcGVydHlTZWN1cml0eUNoZWNrKCkgY29uc3QgeyByZXR1cm4gaXNTZXRP
bkZsYWdzMjxIYXNQdXRQcm9wZXJ0eVNlY3VyaXR5Q2hlY2s+KCk7IH0KICAgICBib29sIG5ld0lt
cHVyZVByb3BlcnR5RmlyZXNXYXRjaHBvaW50cygpIGNvbnN0IHsgcmV0dXJuIGlzU2V0T25GbGFn
czI8TmV3SW1wdXJlUHJvcGVydHlGaXJlc1dhdGNocG9pbnRzPigpOyB9CiAgICAgYm9vbCBpc0lt
bXV0YWJsZVByb3RvdHlwZUV4b3RpY09iamVjdCgpIGNvbnN0IHsgcmV0dXJuIGlzU2V0T25GbGFn
czI8SXNJbW11dGFibGVQcm90b3R5cGVFeG90aWNPYmplY3Q+KCk7IH0KICAgICBib29sIGludGVy
Y2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8oKSBj
b25zdCB7IHJldHVybiBpc1NldE9uRmxhZ3MyPEludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RC
eUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8+KCk7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0xvb2t1cC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0xvb2t1cC5oCShyZXZpc2lvbiAyNzE5NzUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9Mb29rdXAuaAkod29ya2luZyBjb3B5KQpAQCAtMjM4LDE3ICsyMzgs
MjIgQEAgaW5saW5lIGJvb2wgZ2V0U3RhdGljUHJvcGVydHlTbG90RnJvbVRhYgogICAgIH0KIAog
ICAgIGlmIChlbnRyeS0+YXR0cmlidXRlcygpICYgUHJvcGVydHlBdHRyaWJ1dGU6OkRPTUpJVEF0
dHJpYnV0ZSkgeworICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKGVudHJ5LT5hdHRyaWJ1dGVz
KCkgJiBQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHksICJET01KSVRBdHRyaWJ1dGUgc3VwcG9y
dHMgcmVhZG9ubHkgYXR0cmlidXRlcyBjdXJyZW50bHkuIik7CiAgICAgICAgIGNvbnN0IERPTUpJ
VDo6R2V0dGVyU2V0dGVyKiBkb21KSVQgPSBlbnRyeS0+ZG9tSklUKCk7Ci0gICAgICAgIHNsb3Qu
c2V0Q2FjaGVhYmxlQ3VzdG9tKHRoaXNPYmplY3QsIGF0dHJpYnV0ZXNGb3JTdHJ1Y3R1cmUoZW50
cnktPmF0dHJpYnV0ZXMoKSksIGRvbUpJVC0+Z2V0dGVyKCksIERPTUF0dHJpYnV0ZUFubm90YXRp
b24geyBjbGFzc0luZm8sIGRvbUpJVCB9KTsKKyAgICAgICAgc2xvdC5zZXRDYWNoZWFibGVDdXN0
b20odGhpc09iamVjdCwgYXR0cmlidXRlc0ZvclN0cnVjdHVyZShlbnRyeS0+YXR0cmlidXRlcygp
KSwgZG9tSklULT5nZXR0ZXIoKSwgbnVsbHB0ciwgRE9NQXR0cmlidXRlQW5ub3RhdGlvbiB7IGNs
YXNzSW5mbywgZG9tSklUIH0pOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKICAgICBp
ZiAoZW50cnktPmF0dHJpYnV0ZXMoKSAmIFByb3BlcnR5QXR0cmlidXRlOjpET01BdHRyaWJ1dGUp
IHsKLSAgICAgICAgc2xvdC5zZXRDYWNoZWFibGVDdXN0b20odGhpc09iamVjdCwgYXR0cmlidXRl
c0ZvclN0cnVjdHVyZShlbnRyeS0+YXR0cmlidXRlcygpKSwgZW50cnktPnByb3BlcnR5R2V0dGVy
KCksIERPTUF0dHJpYnV0ZUFubm90YXRpb24geyBjbGFzc0luZm8sIG51bGxwdHIgfSk7CisgICAg
ICAgIHNsb3Quc2V0Q2FjaGVhYmxlQ3VzdG9tKHRoaXNPYmplY3QsIGF0dHJpYnV0ZXNGb3JTdHJ1
Y3R1cmUoZW50cnktPmF0dHJpYnV0ZXMoKSksIGVudHJ5LT5wcm9wZXJ0eUdldHRlcigpLCBlbnRy
eS0+cHJvcGVydHlQdXR0ZXIoKSwgRE9NQXR0cmlidXRlQW5ub3RhdGlvbiB7IGNsYXNzSW5mbywg
bnVsbHB0ciB9KTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgc2xvdC5zZXRD
YWNoZWFibGVDdXN0b20odGhpc09iamVjdCwgYXR0cmlidXRlc0ZvclN0cnVjdHVyZShlbnRyeS0+
YXR0cmlidXRlcygpKSwgZW50cnktPnByb3BlcnR5R2V0dGVyKCkpOworICAgIHVuc2lnbmVkIGF0
dHJpYnV0ZXMgPSBhdHRyaWJ1dGVzRm9yU3RydWN0dXJlKGVudHJ5LT5hdHRyaWJ1dGVzKCkpOwor
ICAgIGlmICghKGF0dHJpYnV0ZXMgJiBQcm9wZXJ0eUF0dHJpYnV0ZTo6Q3VzdG9tQWNjZXNzb3Ip
KQorICAgICAgICBhdHRyaWJ1dGVzIHw9IFByb3BlcnR5QXR0cmlidXRlOjpDdXN0b21WYWx1ZTsK
KworICAgIHNsb3Quc2V0Q2FjaGVhYmxlQ3VzdG9tKHRoaXNPYmplY3QsIGF0dHJpYnV0ZXMsIGVu
dHJ5LT5wcm9wZXJ0eUdldHRlcigpLCBlbnRyeS0+cHJvcGVydHlQdXR0ZXIoKSk7CiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKQEAgLTI2Myw3MCArMjY4LDYgQEAgaW5saW5lIGJvb2wgcmVwbGFjZVN0
YXRpY1Byb3BlcnR5U2xvdChWTQogICAgIHJldHVybiB0cnVlOwogfQogCi0vLyAnYmFzZScgbWVh
bnMgdGhlIG9iamVjdCBob2xkaW5nIHRoZSBwcm9wZXJ0eSAocG9zc2libHkgaW4gdGhlIHByb3Rv
dHlwZSBjaGFpbiBvZiB0aGUgb2JqZWN0IHB1dCB3YXMgY2FsbGVkIG9uKS4KLS8vICd0aGlzVmFs
dWUnIGlzIHRoZSBvYmplY3QgdGhhdCBwdXQgaXMgYmVpbmcgYXBwbGllZCB0byAoaW4gdGhlIGNh
c2Ugb2YgYSBwcm94eSwgdGhlIHByb3h5IHRhcmdldCkuCi0vLyAnc2xvdC50aGlzVmFsdWUoKScg
aXMgdGhlIG9iamVjdCB0aGUgcHV0IHdhcyBvcmlnaW5hbGx5IHBlcmZvcm1lZCBvbiAoaW4gdGhl
IGNhc2Ugb2YgYSBwcm94eSwgdGhlIHByb3h5IGl0c2VsZikuCi1pbmxpbmUgYm9vbCBwdXRFbnRy
eShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBDbGFzc0luZm8qLCBjb25zdCBI
YXNoVGFibGVWYWx1ZSogZW50cnksIEpTT2JqZWN0KiBiYXNlLCBKU09iamVjdCogdGhpc1ZhbHVl
LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBQdXRQcm9wZXJ0eVNs
b3QmIHNsb3QpCi17Ci0gICAgVk0mIHZtID0gZ2V0Vk0oZ2xvYmFsT2JqZWN0KTsKLSAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICBpZiAoZW50cnktPmF0dHJp
YnV0ZXMoKSAmIFByb3BlcnR5QXR0cmlidXRlOjpCdWlsdGluT3JGdW5jdGlvbk9yTGF6eVByb3Bl
cnR5KSB7Ci0gICAgICAgIGlmICghKGVudHJ5LT5hdHRyaWJ1dGVzKCkgJiBQcm9wZXJ0eUF0dHJp
YnV0ZTo6UmVhZE9ubHkpKSB7Ci0gICAgICAgICAgICAvLyBJZiB0aGlzIGlzIGEgZnVuY3Rpb24g
b3IgbGF6eSBwcm9wZXJ0eSBwdXQgdGhlbiB3ZSBqdXN0IGRvIHRoZSBwdXQgYmVjYXVzZQotICAg
ICAgICAgICAgLy8gbG9naWNhbGx5IHRoZSBvYmplY3QgYWxyZWFkeSBoYWQgdGhlIHByb3BlcnR5
LCBzbyB0aGlzIGlzIGp1c3QgYSByZXBsYWNlLgotICAgICAgICAgICAgLy8gRklYTUU6IHRoaXNW
YWx1ZSBtYXkgYmUgYW4gb2JqZWN0IHdpdGggbm9uLWV4dGVuc2libGUgc3RydWN0dXJlIHdlIG11
c3QgdGhyb3cgZm9yLgotICAgICAgICAgICAgaWYgKEpTT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNE
eW5hbWljQ2FzdDxKU09iamVjdCo+KHZtLCB0aGlzVmFsdWUpKQotICAgICAgICAgICAgICAgIHRo
aXNPYmplY3QtPnB1dERpcmVjdCh2bSwgcHJvcGVydHlOYW1lLCB2YWx1ZSk7Ci0gICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdHlwZUVycm9yKGdsb2Jh
bE9iamVjdCwgc2NvcGUsIHNsb3QuaXNTdHJpY3RNb2RlKCksIFJlYWRvbmx5UHJvcGVydHlXcml0
ZUVycm9yKTsKLSAgICB9Ci0KLSAgICBpZiAoZW50cnktPmF0dHJpYnV0ZXMoKSAmIFByb3BlcnR5
QXR0cmlidXRlOjpBY2Nlc3NvcikKLSAgICAgICAgcmV0dXJuIHR5cGVFcnJvcihnbG9iYWxPYmpl
Y3QsIHNjb3BlLCBzbG90LmlzU3RyaWN0TW9kZSgpLCBSZWFkb25seVByb3BlcnR5V3JpdGVFcnJv
cik7Ci0KLSAgICBpZiAoIShlbnRyeS0+YXR0cmlidXRlcygpICYgUHJvcGVydHlBdHRyaWJ1dGU6
OlJlYWRPbmx5KSkgewotICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKCEoZW50cnktPmF0dHJp
YnV0ZXMoKSAmIFByb3BlcnR5QXR0cmlidXRlOjpET01KSVRBdHRyaWJ1dGUpLCAiRE9NSklUQXR0
cmlidXRlIHN1cHBvcnRzIHJlYWRvbmx5IGF0dHJpYnV0ZXMgY3VycmVudGx5LiIpOwotICAgICAg
ICBib29sIGlzQWNjZXNzb3IgPSBlbnRyeS0+YXR0cmlidXRlcygpICYgUHJvcGVydHlBdHRyaWJ1
dGU6OkN1c3RvbUFjY2Vzc29yOwotICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIG9ubHkgYmUg
Y2FjaGluZyB0aGVzZSBpZiB3ZSdyZSBub3QgYW4gdW5jYWNoZWFibGUgZGljdGlvbmFyeToKLSAg
ICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNTM0Nwot
ICAgICAgICAvLyBXZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHdlIGRlY2lkZSB0byBjYWNoZSB0
aGlzIHByb3BlcnR5IGJlZm9yZSB3ZSBwb3RlbnRpYWxseSBleGVjdXRlIGFyaWJpdHJhcnkgSlMu
Ci0gICAgICAgIGlmIChpc0FjY2Vzc29yKQotICAgICAgICAgICAgc2xvdC5zZXRDdXN0b21BY2Nl
c3NvcihiYXNlLCBlbnRyeS0+cHJvcGVydHlQdXR0ZXIoKSk7Ci0gICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIHNsb3Quc2V0Q3VzdG9tVmFsdWUoYmFzZSwgZW50cnktPnByb3BlcnR5UHV0dGVyKCkp
OwotCi0gICAgICAgIGF1dG8gcmVzdWx0ID0gY2FsbEN1c3RvbVNldHRlcihnbG9iYWxPYmplY3Qs
IGVudHJ5LT5wcm9wZXJ0eVB1dHRlcigpLCBpc0FjY2Vzc29yLCBiYXNlLCBzbG90LnRoaXNWYWx1
ZSgpLCB2YWx1ZSk7Ci0gICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGZhbHNlKTsK
LSAgICAgICAgaWYgKHJlc3VsdCAhPSBUcmlTdGF0ZTo6SW5kZXRlcm1pbmF0ZSkKLSAgICAgICAg
ICAgIHJldHVybiByZXN1bHQgPT0gVHJpU3RhdGU6OlRydWU7Ci0KLSAgICAgICAgLy8gRklYTUU6
IHRoaXNWYWx1ZSBtYXkgYmUgYW4gb2JqZWN0IHdpdGggbm9uLWV4dGVuc2libGUgc3RydWN0dXJl
IHdlIG11c3QgdGhyb3cgZm9yLgotICAgICAgICBpZiAoSlNPYmplY3QqIHRoaXNPYmplY3QgPSBq
c0R5bmFtaWNDYXN0PEpTT2JqZWN0Kj4odm0sIHRoaXNWYWx1ZSkpCi0gICAgICAgICAgICB0aGlz
T2JqZWN0LT5wdXREaXJlY3Qodm0sIHByb3BlcnR5TmFtZSwgdmFsdWUpOwotICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2Nv
cGUsIHNsb3QuaXNTdHJpY3RNb2RlKCksIFJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9yKTsKLX0K
LQotLyoqCi0gKiBUaGlzIG9uZSBpcyBmb3IgInB1dCIuCi0gKiBJdCBsb29rcyB1cCBhIGhhc2gg
ZW50cnkgZm9yIHRoZSBwcm9wZXJ0eSB0byBiZSBzZXQuICBJZiBhbiBlbnRyeQotICogaXMgZm91
bmQgaXQgc2V0cyB0aGUgdmFsdWUgYW5kIHJldHVybnMgdHJ1ZSwgZWxzZSBpdCByZXR1cm5zIGZh
bHNlLgotICovCi1pbmxpbmUgYm9vbCBsb29rdXBQdXQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNPYmplY3QqIGJhc2UsIEpTVmFsdWUg
dmFsdWUsIGNvbnN0IEhhc2hUYWJsZSYgdGFibGUsIFB1dFByb3BlcnR5U2xvdCYgc2xvdCwgYm9v
bCYgcHV0UmVzdWx0KQotewotICAgIGNvbnN0IEhhc2hUYWJsZVZhbHVlKiBlbnRyeSA9IHRhYmxl
LmVudHJ5KHByb3BlcnR5TmFtZSk7Ci0KLSAgICBpZiAoIWVudHJ5KQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICBwdXRSZXN1bHQgPSBwdXRFbnRyeShnbG9iYWxPYmplY3QsIHRhYmxlLmNs
YXNzRm9yVGhpcywgZW50cnksIGJhc2UsIGJhc2UsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3Qp
OwotICAgIHJldHVybiB0cnVlOwotfQotCiBpbmxpbmUgdm9pZCByZWlmeVN0YXRpY1Byb3BlcnR5
KFZNJiB2bSwgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8sIGNvbnN0IFByb3BlcnR5TmFtZSYg
cHJvcGVydHlOYW1lLCBjb25zdCBIYXNoVGFibGVWYWx1ZSYgdmFsdWUsIEpTT2JqZWN0JiB0aGlz
T2JqKQogewogICAgIGlmICh2YWx1ZS5hdHRyaWJ1dGVzKCkgJiBQcm9wZXJ0eUF0dHJpYnV0ZTo6
QnVpbHRpbikgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlT
bG90LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9w
ZXJ0eVNsb3QuY3BwCShyZXZpc2lvbiAyNzE5NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Qcm9wZXJ0eVNsb3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NiwyMSArNDYsNiBA
QCBKU1ZhbHVlIFByb3BlcnR5U2xvdDo6Y3VzdG9tR2V0dGVyKEpTR2xvCiAgICAgcmV0dXJuIEpT
VmFsdWU6OmRlY29kZShtX2RhdGEuY3VzdG9tLmdldFZhbHVlKGdsb2JhbE9iamVjdCwgSlNWYWx1
ZTo6ZW5jb2RlKHRoaXNWYWx1ZSksIHByb3BlcnR5TmFtZSkpOwogfQogCi1KU1ZhbHVlIFByb3Bl
cnR5U2xvdDo6Y3VzdG9tQWNjZXNzb3JHZXR0ZXIoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkgY29uc3QKLXsKLSAgICBpZiAoIW1fZGF0YS5j
dXN0b21BY2Nlc3Nvci5nZXR0ZXJTZXR0ZXItPmdldHRlcigpKQotICAgICAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKLQotICAgIGlmIChhdXRvIGRvbUF0dHJpYnV0ZSA9IHRoaXMtPmRvbUF0dHJp
YnV0ZSgpKSB7Ci0gICAgICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKLSAgICAgICAg
aWYgKCFtX3RoaXNWYWx1ZS5pbmhlcml0cyh2bSwgZG9tQXR0cmlidXRlLT5jbGFzc0luZm8pKSB7
Ci0gICAgICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAg
ICAgICAgICByZXR1cm4gdGhyb3dET01BdHRyaWJ1dGVHZXR0ZXJUeXBlRXJyb3IoZ2xvYmFsT2Jq
ZWN0LCBzY29wZSwgZG9tQXR0cmlidXRlLT5jbGFzc0luZm8sIHByb3BlcnR5TmFtZSk7Ci0gICAg
ICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmRlY29kZShtX2RhdGEuY3VzdG9tQWNj
ZXNzb3IuZ2V0dGVyU2V0dGVyLT5nZXR0ZXIoKShnbG9iYWxPYmplY3QsIEpTVmFsdWU6OmVuY29k
ZShtX3RoaXNWYWx1ZSksIHByb3BlcnR5TmFtZSkpOwotfQotCiBKU1ZhbHVlIFByb3BlcnR5U2xv
dDo6Z2V0UHVyZVJlc3VsdCgpIGNvbnN0CiB7CiAgICAgSlNWYWx1ZSByZXN1bHQ7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eVNsb3QuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eVNsb3QuaAkocmV2aXNpb24g
MjcxOTc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlTbG90LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQ3LDYgKzQ3LDcgQEAgZW51bSBjbGFzcyBQcm9wZXJ0eUF0dHJp
YnV0ZSA6IHVuc2lnbmVkIAogICAgIEN1c3RvbVZhbHVlICAgICAgID0gMSA8PCA2LAogICAgIEN1
c3RvbUFjY2Vzc29yT3JWYWx1ZSA9IEN1c3RvbUFjY2Vzc29yIHwgQ3VzdG9tVmFsdWUsCiAgICAg
QWNjZXNzb3JPckN1c3RvbUFjY2Vzc29yT3JWYWx1ZSA9IEFjY2Vzc29yIHwgQ3VzdG9tQWNjZXNz
b3IgfCBDdXN0b21WYWx1ZSwKKyAgICBSZWFkT25seU9yQWNjZXNzb3JPckN1c3RvbUFjY2Vzc29y
ID0gUmVhZE9ubHkgfCBBY2Nlc3NvciB8IEN1c3RvbUFjY2Vzc29yLAogCiAgICAgLy8gVGhpbmdz
IHRoYXQgYXJlIHVzZWQgYnkgc3RhdGljIGhhc2h0YWJsZXMgYXJlIG5vdCBpbiB0aGUgYXR0cmli
dXRlcyBieXRlIGluIFByb3BlcnR5TWFwRW50cnkuCiAgICAgRnVuY3Rpb24gICAgICAgICAgPSAx
IDw8IDgsICAvLyBwcm9wZXJ0eSBpcyBhIGZ1bmN0aW9uIC0gb25seSB1c2VkIGJ5IHN0YXRpYyBo
YXNodGFibGVzCkBAIC04NCwxMSArODUsMTcgQEAgaW5saW5lIHVuc2lnbmVkIGF0dHJpYnV0ZXNG
b3JTdHJ1Y3R1cmUodQogICAgIHJldHVybiBzdGF0aWNfY2FzdDx1aW50OF90PihhdHRyaWJ1dGVz
KTsKIH0KIAordXNpbmcgR2V0VmFsdWVGdW5jID0gRW5jb2RlZEpTVmFsdWUoSklUX09QRVJBVElP
Tl9BVFRSSUJVVEVTKikoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUs
IFByb3BlcnR5TmFtZSk7Cit1c2luZyBHZXRWYWx1ZUZ1bmNXaXRoUHRyID0gRW5jb2RlZEpTVmFs
dWUoSklUX09QRVJBVElPTl9BVFRSSUJVVEVTKikoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNW
YWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSwgdm9pZCopOworCit1c2luZyBQdXRWYWx1ZUZ1
bmMgPSBib29sICgqKShKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlIGJhc2VPYmplY3Qs
IEVuY29kZWRKU1ZhbHVlIHZhbHVlKTsKK3VzaW5nIFB1dFZhbHVlRnVuY1dpdGhQdHIgPSBib29s
ICgqKShKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlIGJhc2VPYmplY3QsIEVuY29kZWRK
U1ZhbHVlIHZhbHVlLCB2b2lkKik7CisKIGNsYXNzIFByb3BlcnR5U2xvdCB7CiAKICAgICAvLyBX
ZSByZWx5IG9uIFByb3BlcnR5U2xvdCBiZWluZyBzdGFjayBhbGxvY2F0ZWQgd2hlbiB1c2VkLiBU
aGlzIGlzIG5lZWRlZAogICAgIC8vIGJlY2F1c2Ugd2UgcmVseSBvbiBzb21lIG9mIGl0cyBmaWVs
ZHMgYmVpbmcgYSBHQyByb290LiBGb3IgZXhhbXBsZSwgaXQKLSAgICAvLyBtYXkgYmUgdGhlIG9u
bHkgdGhpbmcgdGhhdCBwb2ludHMgdG8gdGhlIEN1c3RvbUdldHRlclNldHRlciBwcm9wZXJ0eSBp
dCBoYXMuCisgICAgLy8gbWF5IGJlIHRoZSBvbmx5IHRoaW5nIHRoYXQgcG9pbnRzIHRvIHRoZSBH
ZXR0ZXJTZXR0ZXIgcHJvcGVydHkgaXQgaGFzLgogICAgIFdURl9GT1JCSURfSEVBUF9BTExPQ0FU
SU9OOwogCiAgICAgZW51bSBQcm9wZXJ0eVR5cGUgOiB1aW50OF90IHsKQEAgLTk2LDcgKzEwMyw2
IEBAIGNsYXNzIFByb3BlcnR5U2xvdCB7CiAgICAgICAgIFR5cGVWYWx1ZSwKICAgICAgICAgVHlw
ZUdldHRlciwKICAgICAgICAgVHlwZUN1c3RvbSwKLSAgICAgICAgVHlwZUN1c3RvbUFjY2Vzc29y
LAogICAgIH07CiAKIHB1YmxpYzoKQEAgLTEyMSw4ICsxMjcsOCBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICBkaXNhbGxvd1ZNRW50cnkuZW1wbGFjZSgqdm1Gb3JJbnF1aXJ5KTsKICAgICB9CiAKLSAg
ICB1c2luZyBHZXRWYWx1ZUZ1bmMgPSBFbmNvZGVkSlNWYWx1ZShKSVRfT1BFUkFUSU9OX0FUVFJJ
QlVURVMqKShKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVy
dHlOYW1lKTsKLSAgICB1c2luZyBHZXRWYWx1ZUZ1bmNXaXRoUHRyID0gRW5jb2RlZEpTVmFsdWUo
SklUX09QRVJBVElPTl9BVFRSSUJVVEVTKikoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1
ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSwgdm9pZCopOworICAgIHVzaW5nIEdldFZhbHVlRnVu
YyA9IEpTQzo6R2V0VmFsdWVGdW5jOworICAgIHVzaW5nIEdldFZhbHVlRnVuY1dpdGhQdHIgPSBK
U0M6OkdldFZhbHVlRnVuY1dpdGhQdHI7CiAKICAgICBKU1ZhbHVlIGdldFZhbHVlKEpTR2xvYmFs
T2JqZWN0KiwgUHJvcGVydHlOYW1lKSBjb25zdDsKICAgICBKU1ZhbHVlIGdldFZhbHVlKEpTR2xv
YmFsT2JqZWN0KiwgdWludDY0X3QgcHJvcGVydHlOYW1lKSBjb25zdDsKQEAgLTEzMyw3ICsxMzks
NiBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc1ZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV9wcm9wZXJ0
eVR5cGUgPT0gVHlwZVZhbHVlOyB9CiAgICAgYm9vbCBpc0FjY2Vzc29yKCkgY29uc3QgeyByZXR1
cm4gbV9wcm9wZXJ0eVR5cGUgPT0gVHlwZUdldHRlcjsgfQogICAgIGJvb2wgaXNDdXN0b20oKSBj
b25zdCB7IHJldHVybiBtX3Byb3BlcnR5VHlwZSA9PSBUeXBlQ3VzdG9tOyB9Ci0gICAgYm9vbCBp
c0N1c3RvbUFjY2Vzc29yKCkgY29uc3QgeyByZXR1cm4gbV9wcm9wZXJ0eVR5cGUgPT0gVHlwZUN1
c3RvbUFjY2Vzc29yOyB9CiAgICAgYm9vbCBpc0NhY2hlYWJsZVZhbHVlKCkgY29uc3QgeyByZXR1
cm4gaXNDYWNoZWFibGUoKSAmJiBpc1ZhbHVlKCk7IH0KICAgICBib29sIGlzQ2FjaGVhYmxlR2V0
dGVyKCkgY29uc3QgeyByZXR1cm4gaXNDYWNoZWFibGUoKSAmJiBpc0FjY2Vzc29yKCk7IH0KICAg
ICBib29sIGlzQ2FjaGVhYmxlQ3VzdG9tKCkgY29uc3QgeyByZXR1cm4gaXNDYWNoZWFibGUoKSAm
JiBpc0N1c3RvbSgpOyB9CkBAIC0xNjQsMTQgKzE2OSwxNCBAQCBwdWJsaWM6CiAKICAgICBHZXRW
YWx1ZUZ1bmMgY3VzdG9tR2V0dGVyKCkgY29uc3QKICAgICB7Ci0gICAgICAgIEFTU0VSVChpc0Nh
Y2hlYWJsZUN1c3RvbSgpKTsKKyAgICAgICAgQVNTRVJUKGlzQ3VzdG9tKCkpOwogICAgICAgICBy
ZXR1cm4gbV9kYXRhLmN1c3RvbS5nZXRWYWx1ZTsKICAgICB9CiAKLSAgICBDdXN0b21HZXR0ZXJT
ZXR0ZXIqIGN1c3RvbUdldHRlclNldHRlcigpIGNvbnN0CisgICAgUHV0VmFsdWVGdW5jIGN1c3Rv
bVNldHRlcigpIGNvbnN0CiAgICAgewotICAgICAgICBBU1NFUlQoaXNDdXN0b21BY2Nlc3Nvcigp
KTsKLSAgICAgICAgcmV0dXJuIG1fZGF0YS5jdXN0b21BY2Nlc3Nvci5nZXR0ZXJTZXR0ZXI7Cisg
ICAgICAgIEFTU0VSVChpc0N1c3RvbSgpKTsKKyAgICAgICAgcmV0dXJuIG1fZGF0YS5jdXN0b20u
cHV0VmFsdWU7CiAgICAgfQogCiAgICAgSlNPYmplY3QqIHNsb3RCYXNlKCkgY29uc3QKQEAgLTI1
NSwxMyArMjYwLDE1IEBAIHB1YmxpYzoKICAgICAgICAgbV9hZGRpdGlvbmFsRGF0YS5tb2R1bGVO
YW1lc3BhY2VTbG90LnNjb3BlT2Zmc2V0ID0gc2NvcGVPZmZzZXQub2Zmc2V0KCk7CiAgICAgfQog
Ci0gICAgdm9pZCBzZXRDdXN0b20oSlNPYmplY3QqIHNsb3RCYXNlLCB1bnNpZ25lZCBhdHRyaWJ1
dGVzLCBHZXRWYWx1ZUZ1bmMgZ2V0VmFsdWUpCisgICAgdm9pZCBzZXRDdXN0b20oSlNPYmplY3Qq
IHNsb3RCYXNlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBHZXRWYWx1ZUZ1bmMgZ2V0VmFsdWUsIFB1
dFZhbHVlRnVuYyBwdXRWYWx1ZSA9IG51bGxwdHIpCiAgICAgewogICAgICAgICBBU1NFUlQoYXR0
cmlidXRlcyA9PSBhdHRyaWJ1dGVzRm9yU3RydWN0dXJlKGF0dHJpYnV0ZXMpKTsKICAgICAgICAg
CiAgICAgICAgIEFTU0VSVChnZXRWYWx1ZSk7CiAgICAgICAgIGFzc2VydElzQ0Z1bmN0aW9uUHRy
KGdldFZhbHVlKTsKICAgICAgICAgbV9kYXRhLmN1c3RvbS5nZXRWYWx1ZSA9IGdldFZhbHVlOwor
ICAgICAgICBhc3NlcnRJc051bGxPckNGdW5jdGlvblB0cihwdXRWYWx1ZSk7CisgICAgICAgIG1f
ZGF0YS5jdXN0b20ucHV0VmFsdWUgPSBwdXRWYWx1ZTsKICAgICAgICAgbV9hdHRyaWJ1dGVzID0g
YXR0cmlidXRlczsKIAogICAgICAgICBBU1NFUlQoc2xvdEJhc2UpOwpAQCAtMjcwLDIwICsyNzcs
MjIgQEAgcHVibGljOgogICAgICAgICBBU1NFUlQobV9jYWNoZWFiaWxpdHkgPT0gQ2FjaGluZ0Rp
c2FsbG93ZWQpOwogICAgIH0KIAotICAgIHZvaWQgc2V0Q3VzdG9tKEpTT2JqZWN0KiBzbG90QmFz
ZSwgdW5zaWduZWQgYXR0cmlidXRlcywgR2V0VmFsdWVGdW5jIGdldFZhbHVlLCBET01BdHRyaWJ1
dGVBbm5vdGF0aW9uIGRvbUF0dHJpYnV0ZSkKKyAgICB2b2lkIHNldEN1c3RvbShKU09iamVjdCog
c2xvdEJhc2UsIHVuc2lnbmVkIGF0dHJpYnV0ZXMsIEdldFZhbHVlRnVuYyBnZXRWYWx1ZSwgUHV0
VmFsdWVGdW5jIHB1dFZhbHVlLCBET01BdHRyaWJ1dGVBbm5vdGF0aW9uIGRvbUF0dHJpYnV0ZSkK
ICAgICB7Ci0gICAgICAgIHNldEN1c3RvbShzbG90QmFzZSwgYXR0cmlidXRlcywgZ2V0VmFsdWUp
OworICAgICAgICBzZXRDdXN0b20oc2xvdEJhc2UsIGF0dHJpYnV0ZXMsIGdldFZhbHVlLCBwdXRW
YWx1ZSk7CiAgICAgICAgIG1fYWRkaXRpb25hbERhdGFUeXBlID0gQWRkaXRpb25hbERhdGFUeXBl
OjpET01BdHRyaWJ1dGU7CiAgICAgICAgIG1fYWRkaXRpb25hbERhdGEuZG9tQXR0cmlidXRlID0g
ZG9tQXR0cmlidXRlOwogICAgIH0KICAgICAKLSAgICB2b2lkIHNldENhY2hlYWJsZUN1c3RvbShK
U09iamVjdCogc2xvdEJhc2UsIHVuc2lnbmVkIGF0dHJpYnV0ZXMsIEdldFZhbHVlRnVuYyBnZXRW
YWx1ZSkKKyAgICB2b2lkIHNldENhY2hlYWJsZUN1c3RvbShKU09iamVjdCogc2xvdEJhc2UsIHVu
c2lnbmVkIGF0dHJpYnV0ZXMsIEdldFZhbHVlRnVuYyBnZXRWYWx1ZSwgUHV0VmFsdWVGdW5jIHB1
dFZhbHVlID0gbnVsbHB0cikKICAgICB7CiAgICAgICAgIEFTU0VSVChhdHRyaWJ1dGVzID09IGF0
dHJpYnV0ZXNGb3JTdHJ1Y3R1cmUoYXR0cmlidXRlcykpOwogICAgICAgICAKICAgICAgICAgQVNT
RVJUKGdldFZhbHVlKTsKICAgICAgICAgYXNzZXJ0SXNDRnVuY3Rpb25QdHIoZ2V0VmFsdWUpOwog
ICAgICAgICBtX2RhdGEuY3VzdG9tLmdldFZhbHVlID0gZ2V0VmFsdWU7CisgICAgICAgIGFzc2Vy
dElzTnVsbE9yQ0Z1bmN0aW9uUHRyKHB1dFZhbHVlKTsKKyAgICAgICAgbV9kYXRhLmN1c3RvbS5w
dXRWYWx1ZSA9IHB1dFZhbHVlOwogICAgICAgICBtX2F0dHJpYnV0ZXMgPSBhdHRyaWJ1dGVzOwog
CiAgICAgICAgIEFTU0VSVChzbG90QmFzZSk7CkBAIC0yOTMsMzEgKzMwMiwxMyBAQCBwdWJsaWM6
CiAgICAgICAgIG1fY2FjaGVhYmlsaXR5ID0gQ2FjaGluZ0FsbG93ZWQ7CiAgICAgfQogCi0gICAg
dm9pZCBzZXRDYWNoZWFibGVDdXN0b20oSlNPYmplY3QqIHNsb3RCYXNlLCB1bnNpZ25lZCBhdHRy
aWJ1dGVzLCBHZXRWYWx1ZUZ1bmMgZ2V0VmFsdWUsIERPTUF0dHJpYnV0ZUFubm90YXRpb24gZG9t
QXR0cmlidXRlKQorICAgIHZvaWQgc2V0Q2FjaGVhYmxlQ3VzdG9tKEpTT2JqZWN0KiBzbG90QmFz
ZSwgdW5zaWduZWQgYXR0cmlidXRlcywgR2V0VmFsdWVGdW5jIGdldFZhbHVlLCBQdXRWYWx1ZUZ1
bmMgcHV0VmFsdWUsIERPTUF0dHJpYnV0ZUFubm90YXRpb24gZG9tQXR0cmlidXRlKQogICAgIHsK
LSAgICAgICAgc2V0Q2FjaGVhYmxlQ3VzdG9tKHNsb3RCYXNlLCBhdHRyaWJ1dGVzLCBnZXRWYWx1
ZSk7CisgICAgICAgIHNldENhY2hlYWJsZUN1c3RvbShzbG90QmFzZSwgYXR0cmlidXRlcywgZ2V0
VmFsdWUsIHB1dFZhbHVlKTsKICAgICAgICAgbV9hZGRpdGlvbmFsRGF0YVR5cGUgPSBBZGRpdGlv
bmFsRGF0YVR5cGU6OkRPTUF0dHJpYnV0ZTsKICAgICAgICAgbV9hZGRpdGlvbmFsRGF0YS5kb21B
dHRyaWJ1dGUgPSBkb21BdHRyaWJ1dGU7CiAgICAgfQogCi0gICAgdm9pZCBzZXRDdXN0b21HZXR0
ZXJTZXR0ZXIoSlNPYmplY3QqIHNsb3RCYXNlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBDdXN0b21H
ZXR0ZXJTZXR0ZXIqIGdldHRlclNldHRlcikKLSAgICB7Ci0gICAgICAgIEFTU0VSVChhdHRyaWJ1
dGVzID09IGF0dHJpYnV0ZXNGb3JTdHJ1Y3R1cmUoYXR0cmlidXRlcykpOwotICAgICAgICBBU1NF
UlQoYXR0cmlidXRlcyAmIFByb3BlcnR5QXR0cmlidXRlOjpDdXN0b21BY2Nlc3Nvcik7Ci0KLSAg
ICAgICAgZGlzYWJsZUNhY2hpbmcoKTsKLQotICAgICAgICBBU1NFUlQoZ2V0dGVyU2V0dGVyKTsK
LSAgICAgICAgbV9kYXRhLmN1c3RvbUFjY2Vzc29yLmdldHRlclNldHRlciA9IGdldHRlclNldHRl
cjsKLSAgICAgICAgbV9hdHRyaWJ1dGVzID0gYXR0cmlidXRlczsKLQotICAgICAgICBBU1NFUlQo
c2xvdEJhc2UpOwotICAgICAgICBtX3Nsb3RCYXNlID0gc2xvdEJhc2U7Ci0gICAgICAgIG1fcHJv
cGVydHlUeXBlID0gVHlwZUN1c3RvbUFjY2Vzc29yOwotCi0gICAgICAgIEFTU0VSVChtX2NhY2hl
YWJpbGl0eSA9PSBDYWNoaW5nRGlzYWxsb3dlZCk7Ci0gICAgfQotCiAgICAgdm9pZCBzZXRHZXR0
ZXJTbG90KEpTT2JqZWN0KiBzbG90QmFzZSwgdW5zaWduZWQgYXR0cmlidXRlcywgR2V0dGVyU2V0
dGVyKiBnZXR0ZXJTZXR0ZXIpCiAgICAgewogICAgICAgICBBU1NFUlQoYXR0cmlidXRlcyA9PSBh
dHRyaWJ1dGVzRm9yU3RydWN0dXJlKGF0dHJpYnV0ZXMpKTsKQEAgLTM3Niw3ICszNjcsNiBAQCBw
dWJsaWM6CiBwcml2YXRlOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIEpTVmFsdWUgZnVuY3Rpb25H
ZXR0ZXIoSlNHbG9iYWxPYmplY3QqKSBjb25zdDsKICAgICBKU19FWFBPUlRfUFJJVkFURSBKU1Zh
bHVlIGN1c3RvbUdldHRlcihKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSkgY29uc3Q7Ci0g
ICAgSlNfRVhQT1JUX1BSSVZBVEUgSlNWYWx1ZSBjdXN0b21BY2Nlc3NvckdldHRlcihKU0dsb2Jh
bE9iamVjdCosIFByb3BlcnR5TmFtZSkgY29uc3Q7CiAKICAgICB1bmlvbiB7CiAgICAgICAgIEVu
Y29kZWRKU1ZhbHVlIHZhbHVlOwpAQCAtMzg1LDEwICszNzUsOCBAQCBwcml2YXRlOgogICAgICAg
ICB9IGdldHRlcjsKICAgICAgICAgc3RydWN0IHsKICAgICAgICAgICAgIEdldFZhbHVlRnVuYyBn
ZXRWYWx1ZTsKKyAgICAgICAgICAgIFB1dFZhbHVlRnVuYyBwdXRWYWx1ZTsKICAgICAgICAgfSBj
dXN0b207Ci0gICAgICAgIHN0cnVjdCB7Ci0gICAgICAgICAgICBDdXN0b21HZXR0ZXJTZXR0ZXIq
IGdldHRlclNldHRlcjsKLSAgICAgICAgfSBjdXN0b21BY2Nlc3NvcjsKICAgICB9IG1fZGF0YTsK
IAogICAgIHVuc2lnbmVkIG1fYXR0cmlidXRlcyB7IDAgfTsKQEAgLTQxNiw4ICs0MDQsNiBAQCBB
TFdBWVNfSU5MSU5FIEpTVmFsdWUgUHJvcGVydHlTbG90OjpnZXRWCiAgICAgICAgIHJldHVybiBK
U1ZhbHVlOjpkZWNvZGUobV9kYXRhLnZhbHVlKTsKICAgICBpZiAobV9wcm9wZXJ0eVR5cGUgPT0g
VHlwZUdldHRlcikKICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uR2V0dGVyKGdsb2JhbE9iamVjdCk7
Ci0gICAgaWYgKG1fcHJvcGVydHlUeXBlID09IFR5cGVDdXN0b21BY2Nlc3NvcikKLSAgICAgICAg
cmV0dXJuIGN1c3RvbUFjY2Vzc29yR2V0dGVyKGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lKTsK
ICAgICByZXR1cm4gY3VzdG9tR2V0dGVyKGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lKTsKIH0K
IApAQCAtNDI4LDggKzQxNCw2IEBAIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBQcm9wZXJ0eVNsb3Q6
OmdldFYKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmRlY29kZShtX2RhdGEudmFsdWUpOwogICAg
IGlmIChtX3Byb3BlcnR5VHlwZSA9PSBUeXBlR2V0dGVyKQogICAgICAgICByZXR1cm4gZnVuY3Rp
b25HZXR0ZXIoZ2xvYmFsT2JqZWN0KTsKLSAgICBpZiAobV9wcm9wZXJ0eVR5cGUgPT0gVHlwZUN1
c3RvbUFjY2Vzc29yKQotICAgICAgICByZXR1cm4gY3VzdG9tQWNjZXNzb3JHZXR0ZXIoZ2xvYmFs
T2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tKHZtLCBwcm9wZXJ0eU5hbWUpKTsKICAgICByZXR1cm4g
Y3VzdG9tR2V0dGVyKGdsb2JhbE9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbSh2bSwgcHJvcGVydHlO
YW1lKSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3h5T2Jq
ZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJveHlP
YmplY3QuaAkocmV2aXNpb24gMjcxOTc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvUHJveHlPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsNyBAQCBjbGFzcyBQ
cm94eU9iamVjdCBmaW5hbCA6IHB1YmxpYyBKU05vbkZpCiBwdWJsaWM6CiAgICAgdHlwZWRlZiBK
U05vbkZpbmFsT2JqZWN0IEJhc2U7CiAKLSAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0
cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBPdmVycmlkZXNHZXRPd25Qcm9w
ZXJ0eVNsb3QgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eU5hbWVzIHwgT3ZlcnJpZGVzR2V0UHJv
dG90eXBlIHwgT3ZlcnJpZGVzR2V0Q2FsbERhdGEgfCBJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlT
bG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgUHJvaGliaXRzUHJvcGVydHlDYWNo
aW5nOworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNl
OjpTdHJ1Y3R1cmVGbGFncyB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRl
c0dldE93blByb3BlcnR5TmFtZXMgfCBPdmVycmlkZXNHZXRQcm90b3R5cGUgfCBPdmVycmlkZXNH
ZXRDYWxsRGF0YSB8IE92ZXJyaWRlc1B1dCB8IEludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RC
eUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8gfCBQcm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmc7
CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4K
ICAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1B1dFByb3BlcnR5U2xvdC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1B1dFByb3BlcnR5U2xvdC5oCShyZXZpc2lv
biAyNzE5NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9QdXRQcm9wZXJ0eVNs
b3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsOSArMzcsOSBAQCBjbGFzcyBKU0Z1bmN0aW9uOwog
Y2xhc3MgUHV0UHJvcGVydHlTbG90IHsKIHB1YmxpYzoKICAgICBlbnVtIFR5cGUgOiB1aW50OF90
IHsgVW5jYWNoYWJsZSwgRXhpc3RpbmdQcm9wZXJ0eSwgTmV3UHJvcGVydHksIFNldHRlclByb3Bl
cnR5LCBDdXN0b21WYWx1ZSwgQ3VzdG9tQWNjZXNzb3IgfTsKLSAgICBlbnVtIENvbnRleHQgeyBV
bmtub3duQ29udGV4dCwgUHV0QnlJZCwgUHV0QnlJZEV2YWwgfTsKLSAgICB1c2luZyBQdXRWYWx1
ZUZ1bmMgPSBib29sICgqKShKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlIHRoaXNPYmpl
Y3QsIEVuY29kZWRKU1ZhbHVlIHZhbHVlKTsKLSAgICB1c2luZyBQdXRWYWx1ZUZ1bmNXaXRoUHRy
ID0gYm9vbCAoKikoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSB0aGlzT2JqZWN0LCBF
bmNvZGVkSlNWYWx1ZSB2YWx1ZSwgdm9pZCopOworICAgIGVudW0gQ29udGV4dCA6IHVpbnQ4X3Qg
eyBVbmtub3duQ29udGV4dCwgUHV0QnlJZCwgUHV0QnlJZEV2YWwsIFJlZmxlY3RTZXQgfTsKKyAg
ICB1c2luZyBQdXRWYWx1ZUZ1bmMgPSBKU0M6OlB1dFZhbHVlRnVuYzsKKyAgICB1c2luZyBQdXRW
YWx1ZUZ1bmNXaXRoUHRyID0gSlNDOjpQdXRWYWx1ZUZ1bmNXaXRoUHRyOwogCiAgICAgUHV0UHJv
cGVydHlTbG90KEpTVmFsdWUgdGhpc1ZhbHVlLCBib29sIGlzU3RyaWN0TW9kZSA9IGZhbHNlLCBD
b250ZXh0IGNvbnRleHQgPSBVbmtub3duQ29udGV4dCwgYm9vbCBpc0luaXRpYWxpemF0aW9uID0g
ZmFsc2UpCiAgICAgICAgIDogbV9iYXNlKG51bGxwdHIpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9SZWZsZWN0T2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9SZWZsZWN0T2JqZWN0LmNwcAkocmV2aXNpb24gMjcxOTc1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVmbGVjdE9iamVjdC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI2MCw3ICsyNjAsNyBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04ocmVm
bGVjdE9iamVjdFNlCiAKICAgICAvLyBEbyBub3QgcmFpc2UgYW55IHJlYWRvbmx5IGVycm9ycyB0
aGF0IGhhcHBlbiBpbiBzdHJpY3QgbW9kZS4KICAgICBib29sIHNob3VsZFRocm93SWZDYW50U2V0
ID0gZmFsc2U7Ci0gICAgUHV0UHJvcGVydHlTbG90IHNsb3QocmVjZWl2ZXIsIHNob3VsZFRocm93
SWZDYW50U2V0KTsKKyAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChyZWNlaXZlciwgc2hvdWxkVGhy
b3dJZkNhbnRTZXQsIFB1dFByb3BlcnR5U2xvdDo6UmVmbGVjdFNldCk7CiAgICAgUkVMRUFTRV9B
TkRfUkVUVVJOKHNjb3BlLCBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHRhcmdldE9iamVjdC0+
bWV0aG9kVGFibGUodm0pLT5wdXQodGFyZ2V0T2JqZWN0LCBnbG9iYWxPYmplY3QsIHByb3BlcnR5
TmFtZSwgY2FsbEZyYW1lLT5hcmd1bWVudCgyKSwgc2xvdCkpKSk7CiB9CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0LmNwcAkocmV2aXNpb24g
MjcxOTc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTI4LDEzICsxMjgsMTAgQEAgSlNDX0RFRklORV9DVVNUT01f
U0VUVEVSKHJlZ0V4cE9iamVjdFNldAogICAgIHJldHVybiBqc0Nhc3Q8UmVnRXhwT2JqZWN0Kj4o
SlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpLT5zZXRMYXN0SW5kZXgoZ2xvYmFsT2JqZWN0LCBK
U1ZhbHVlOjpkZWNvZGUodmFsdWUpLCBmYWxzZSk7CiB9CiAKLWJvb2wgUmVnRXhwT2JqZWN0Ojpw
dXQoSlNDZWxsKiBjZWxsLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5h
bWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCiti
b29sIFJlZ0V4cE9iamVjdDo6ZGVmaW5lT3duUHJvcGVydHlWaWFQdXQoSlNPYmplY3QqIG9iamVj
dCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFt
ZSwgSlNWYWx1ZSB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBzbG90KQogewogICAgIFZNJiB2bSA9
IGdsb2JhbE9iamVjdC0+dm0oKTsKLSAgICBSZWdFeHBPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nh
c3Q8UmVnRXhwT2JqZWN0Kj4oY2VsbCk7Ci0KLSAgICBpZiAoVU5MSUtFTFkoaXNUaGlzVmFsdWVB
bHRlcmVkKHNsb3QsIHRoaXNPYmplY3QpKSkKLSAgICAgICAgcmV0dXJuIG9yZGluYXJ5U2V0U2xv
dyhnbG9iYWxPYmplY3QsIHRoaXNPYmplY3QsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QudGhp
c1ZhbHVlKCksIHNsb3QuaXNTdHJpY3RNb2RlKCkpOworICAgIFJlZ0V4cE9iamVjdCogdGhpc09i
amVjdCA9IGpzQ2FzdDxSZWdFeHBPYmplY3QqPihvYmplY3QpOwogCiAgICAgaWYgKHByb3BlcnR5
TmFtZSA9PSB2bS5wcm9wZXJ0eU5hbWVzLT5sYXN0SW5kZXgpIHsKICAgICAgICAgYm9vbCByZXN1
bHQgPSB0aGlzT2JqZWN0LT5zZXRMYXN0SW5kZXgoZ2xvYmFsT2JqZWN0LCB2YWx1ZSwgc2xvdC5p
c1N0cmljdE1vZGUoKSk7CkBAIC0xNDMsNyArMTQwLDcgQEAgYm9vbCBSZWdFeHBPYmplY3Q6OnB1
dChKU0NlbGwqIGNlbGwsIEpTRwogICAgICAgICAgICAgOiByZWdFeHBPYmplY3RTZXRMYXN0SW5k
ZXhOb25TdHJpY3QpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KLSAgICByZXR1cm4g
QmFzZTo6cHV0KGNlbGwsIGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCk7
CisgICAgcmV0dXJuIEJhc2U6OmRlZmluZU93blByb3BlcnR5VmlhUHV0KHRoaXNPYmplY3QsIGds
b2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCk7CiB9CiAKIFN0cmluZyBSZWdF
eHBPYmplY3Q6OnRvU3RyaW5nTmFtZShjb25zdCBKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KikK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5oCShy
ZXZpc2lvbiAyNzE5NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBP
YmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMTAzLDcgKzEwMyw2IEBAIHB1YmxpYzoKICAgICBK
U1ZhbHVlIG1hdGNoR2xvYmFsKEpTR2xvYmFsT2JqZWN0KiwgSlNTdHJpbmcqKTsKIAogICAgIHN0
YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0Kiwg
UHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKLSAgICBzdGF0aWMgYm9vbCBwdXQoSlNDZWxs
KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xv
dCYpOwogICAgIHN0YXRpYyBTdHJpbmcgdG9TdHJpbmdOYW1lKGNvbnN0IEpTT2JqZWN0KiwgSlNH
bG9iYWxPYmplY3QqKTsKIAogICAgIERFQ0xBUkVfRVhQT1JUX0lORk87CkBAIC0xNDcsNiArMTQ2
LDcgQEAgcHJpdmF0ZToKIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBib29sIGRlbGV0
ZVByb3BlcnR5KEpTQ2VsbCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBEZWxldGVQ
cm9wZXJ0eVNsb3QmKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBnZXRPd25T
cGVjaWFsUHJvcGVydHlOYW1lcyhKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlO
YW1lQXJyYXkmLCBEb250RW51bVByb3BlcnRpZXNNb2RlKTsKKyAgICBKU19FWFBPUlRfUFJJVkFU
RSBzdGF0aWMgYm9vbCBkZWZpbmVPd25Qcm9wZXJ0eVZpYVB1dChKU09iamVjdCosIEpTR2xvYmFs
T2JqZWN0KiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmKTsKICAgICBK
U19FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9vbCBkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCos
IEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eURlc2NyaXB0b3Im
LCBib29sIHNob3VsZFRocm93KTsKIAogICAgIE1hdGNoUmVzdWx0IG1hdGNoSW5saW5lKEpTR2xv
YmFsT2JqZWN0KiwgSlNTdHJpbmcqKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1N0cmluZ09iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU3RyaW5nT2JqZWN0LmNwcAkocmV2aXNpb24gMjcxOTc1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NjEsMjEgKzYxLDE1IEBAIGJvb2wgU3RyaW5nT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUkK
ICAgICByZXR1cm4gSlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdCh0aGlzT2JqZWN0LCBnbG9i
YWxPYmplY3QsIElkZW50aWZpZXI6OmZyb20odm0sIHByb3BlcnR5TmFtZSksIHNsb3QpOwogfQog
Ci1ib29sIFN0cmluZ09iamVjdDo6cHV0KEpTQ2VsbCogY2VsbCwgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgUHV0
UHJvcGVydHlTbG90JiBzbG90KQorYm9vbCBTdHJpbmdPYmplY3Q6OmRlZmluZU93blByb3BlcnR5
VmlhUHV0KEpTT2JqZWN0KiBvYmplY3QsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFBy
b3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYg
c2xvdCkKIHsKKyAgICBBU1NFUlQoIXBhcnNlSW5kZXgocHJvcGVydHlOYW1lKSk7CiAgICAgVk0m
IHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKIAotICAgIFN0cmluZ09iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxTdHJp
bmdPYmplY3QqPihjZWxsKTsKLQotICAgIGlmIChVTkxJS0VMWShpc1RoaXNWYWx1ZUFsdGVyZWQo
c2xvdCwgdGhpc09iamVjdCkpKSAKLSAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBv
cmRpbmFyeVNldFNsb3coZ2xvYmFsT2JqZWN0LCB0aGlzT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHZh
bHVlLCBzbG90LnRoaXNWYWx1ZSgpLCBzbG90LmlzU3RyaWN0TW9kZSgpKSk7Ci0KICAgICBpZiAo
cHJvcGVydHlOYW1lID09IHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCkKICAgICAgICAgcmV0dXJu
IHR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCBzbG90LmlzU3RyaWN0TW9kZSgpLCBSZWFk
b25seVByb3BlcnR5V3JpdGVFcnJvcik7Ci0gICAgaWYgKE9wdGlvbmFsPHVpbnQzMl90PiBpbmRl
eCA9IHBhcnNlSW5kZXgocHJvcGVydHlOYW1lKSkgCi0gICAgICAgIFJFTEVBU0VfQU5EX1JFVFVS
TihzY29wZSwgcHV0QnlJbmRleChjZWxsLCBnbG9iYWxPYmplY3QsIGluZGV4LnZhbHVlKCksIHZh
bHVlLCBzbG90LmlzU3RyaWN0TW9kZSgpKSk7Ci0gICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3Bl
LCBKU09iamVjdDo6cHV0KGNlbGwsIGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwg
c2xvdCkpOworICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgSlNPYmplY3Q6OmRlZmluZU93
blByb3BlcnR5VmlhUHV0KG9iamVjdCwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHZhbHVl
LCBzbG90KSk7CiB9CiAKIGJvb2wgU3RyaW5nT2JqZWN0OjpwdXRCeUluZGV4KEpTQ2VsbCogY2Vs
bCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBK
U1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZFRocm93KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvU3RyaW5nT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU3RyaW5nT2JqZWN0LmgJKHJldmlzaW9uIDI3MTk3NSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ09iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBA
IC01MywxMyArNTMsMTEgQEAgcHVibGljOgogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGlj
IGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9w
ZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBi
b29sIGdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCos
IHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7Ci0KLSAgICBKU19FWFBPUlRf
UFJJVkFURSBzdGF0aWMgYm9vbCBwdXQoSlNDZWxsKiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0
eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOwogICAgIEpTX0VYUE9SVF9QUklWQVRF
IHN0YXRpYyBib29sIHB1dEJ5SW5kZXgoSlNDZWxsKiwgSlNHbG9iYWxPYmplY3QqLCB1bnNpZ25l
ZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpOwotCiAgICAgSlNfRVhQ
T1JUX1BSSVZBVEUgc3RhdGljIGJvb2wgZGVsZXRlUHJvcGVydHkoSlNDZWxsKiwgSlNHbG9iYWxP
YmplY3QqLCBQcm9wZXJ0eU5hbWUsIERlbGV0ZVByb3BlcnR5U2xvdCYpOwogICAgIEpTX0VYUE9S
VF9QUklWQVRFIHN0YXRpYyBib29sIGRlbGV0ZVByb3BlcnR5QnlJbmRleChKU0NlbGwqLCBKU0ds
b2JhbE9iamVjdCosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSk7CiAgICAgSlNfRVhQT1JUX1BSSVZB
VEUgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCosIEpTR2xvYmFsT2Jq
ZWN0KiwgUHJvcGVydHlOYW1lQXJyYXkmLCBEb250RW51bVByb3BlcnRpZXNNb2RlKTsKKyAgICBK
U19FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9vbCBkZWZpbmVPd25Qcm9wZXJ0eVZpYVB1dChKU09i
amVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQcm9wZXJ0
eVNsb3QmKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9vbCBkZWZpbmVPd25Qcm9w
ZXJ0eShKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBjb25zdCBQcm9w
ZXJ0eURlc2NyaXB0b3ImLCBib29sIHNob3VsZFRocm93KTsKICAgICBzdGF0aWMgU3RyaW5nIHRv
U3RyaW5nTmFtZShjb25zdCBKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0Kik7CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ1Byb3RvdHlwZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nUHJvdG90eXBlLmNwcAko
cmV2aXNpb24gMjcxOTc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5n
UHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIxLDkgKzEyMSw5IEBAIFN0cmluZ1By
b3RvdHlwZTo6U3RyaW5nUHJvdG90eXBlKFZNJiB2bSwKIHsKIH0KIAotdm9pZCBTdHJpbmdQcm90
b3R5cGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgSlNTdHJpbmcqIG5hbWVBbmRNZXNzYWdlKQordm9pZCBTdHJpbmdQcm90b3R5cGU6OmZpbmlz
aENyZWF0aW9uKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKIHsKLSAgICBC
YXNlOjpmaW5pc2hDcmVhdGlvbih2bSwgbmFtZUFuZE1lc3NhZ2UpOworICAgIEJhc2U6OmZpbmlz
aENyZWF0aW9uKHZtLCBqc0VtcHR5U3RyaW5nKHZtKSk7CiAgICAgQVNTRVJUKGluaGVyaXRzKHZt
LCBpbmZvKCkpKTsKIAogICAgIEpTQ19OQVRJVkVfSU5UUklOU0lDX0ZVTkNUSU9OX1dJVEhPVVRf
VFJBTlNJVElPTih2bS5wcm9wZXJ0eU5hbWVzLT50b1N0cmluZywgc3RyaW5nUHJvdG9GdW5jVG9T
dHJpbmcsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0p
LCAwLCBTdHJpbmdQcm90b3R5cGVWYWx1ZU9mSW50cmluc2ljKTsKQEAgLTE2NSwxNCArMTY1LDEy
IEBAIHZvaWQgU3RyaW5nUHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbihWTSYKICAgICBwdXREaXJl
Y3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVydHlOYW1lcy0+aXRlcmF0b3JTeW1ib2ws
IGl0ZXJhdG9yRnVuY3Rpb24sIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0
ZTo6RG9udEVudW0pKTsKIAogICAgIC8vIFRoZSBjb25zdHJ1Y3RvciB3aWxsIGJlIGFkZGVkIGxh
dGVyLCBhZnRlciBTdHJpbmdDb25zdHJ1Y3RvciBoYXMgYmVlbiBidWlsdAotICAgIHB1dERpcmVj
dFdpdGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgsIGpzTnVtYmVy
KDApLCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSB8IFByb3BlcnR5QXR0cmlidXRlOjpS
ZWFkT25seSB8IFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7CiB9CiAKIFN0cmluZ1Byb3Rv
dHlwZSogU3RyaW5nUHJvdG90eXBlOjpjcmVhdGUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKIHsKLSAgICBKU1N0cmluZyogZW1wdHkg
PSBqc0VtcHR5U3RyaW5nKHZtKTsKICAgICBTdHJpbmdQcm90b3R5cGUqIHByb3RvdHlwZSA9IG5l
dyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFN0cmluZ1Byb3RvdHlwZT4odm0uaGVhcCkpIFN0cmlu
Z1Byb3RvdHlwZSh2bSwgc3RydWN0dXJlKTsKLSAgICBwcm90b3R5cGUtPmZpbmlzaENyZWF0aW9u
KHZtLCBnbG9iYWxPYmplY3QsIGVtcHR5KTsKKyAgICBwcm90b3R5cGUtPmZpbmlzaENyZWF0aW9u
KHZtLCBnbG9iYWxPYmplY3QpOwogICAgIHJldHVybiBwcm90b3R5cGU7CiB9CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ1Byb3RvdHlwZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ1Byb3RvdHlwZS5oCShyZXZp
c2lvbiAyNzE5NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdQcm90
b3R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDUsNyArNDUsNyBAQCBwdWJsaWM6CiAKIHByaXZh
dGU6CiAgICAgU3RyaW5nUHJvdG90eXBlKFZNJiwgU3RydWN0dXJlKik7Ci0gICAgdm9pZCBmaW5p
c2hDcmVhdGlvbihWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNTdHJpbmcqKTsKKyAgICB2b2lkIGZp
bmlzaENyZWF0aW9uKFZNJiwgSlNHbG9iYWxPYmplY3QqKTsKIH07CiBTVEFUSUNfQVNTRVJUX0lT
T19TVUJTUEFDRV9TSEFSQUJMRShTdHJpbmdQcm90b3R5cGUsIFN0cmluZ09iamVjdCk7CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAkocmV2aXNp
b24gMjcxOTc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTg5LDExICsxODksNiBAQCB2b2lkIFN0cnVjdHVyZTo6dmFs
aWRhdGVGbGFncygpCiAgICAgaWYgKG92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXgp
CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHR5cGVJbmZvKCkuaW50ZXJjZXB0c0dldE93blByb3Bl
cnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybygpKTsKIAotICAgIGJvb2wgb3Zl
cnJpZGVzUHV0UHJvcGVydHlTZWN1cml0eUNoZWNrID0KLSAgICAgICAgbWV0aG9kVGFibGUuZG9Q
dXRQcm9wZXJ0eVNlY3VyaXR5Q2hlY2sgIT0gSlNPYmplY3Q6OmRvUHV0UHJvcGVydHlTZWN1cml0
eUNoZWNrCi0gICAgICAgICYmIG1ldGhvZFRhYmxlLmRvUHV0UHJvcGVydHlTZWN1cml0eUNoZWNr
ICE9IEpTQ2VsbDo6ZG9QdXRQcm9wZXJ0eVNlY3VyaXR5Q2hlY2s7Ci0gICAgUkVMRUFTRV9BU1NF
UlQob3ZlcnJpZGVzUHV0UHJvcGVydHlTZWN1cml0eUNoZWNrID09IHR5cGVJbmZvKCkuaGFzUHV0
UHJvcGVydHlTZWN1cml0eUNoZWNrKCkpOwotCiAgICAgYm9vbCBvdmVycmlkZXNHZXRPd25Qcm9w
ZXJ0eU5hbWVzID0KICAgICAgICAgbWV0aG9kVGFibGUuZ2V0T3duUHJvcGVydHlOYW1lcyAhPSBK
U09iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcwogICAgICAgICAmJiBtZXRob2RUYWJsZS5nZXRP
d25Qcm9wZXJ0eU5hbWVzICE9IEpTQ2VsbDo6Z2V0T3duUHJvcGVydHlOYW1lczsKQEAgLTIwOCw2
ICsyMDMsMTEgQEAgdm9pZCBTdHJ1Y3R1cmU6OnZhbGlkYXRlRmxhZ3MoKQogICAgICAgICBtZXRo
b2RUYWJsZS5nZXRQcm90b3R5cGUgIT0gc3RhdGljX2Nhc3Q8TWV0aG9kVGFibGU6OkdldFByb3Rv
dHlwZUZ1bmN0aW9uUHRyPihKU09iamVjdDo6Z2V0UHJvdG90eXBlKQogICAgICAgICAmJiBtZXRo
b2RUYWJsZS5nZXRQcm90b3R5cGUgIT0gSlNDZWxsOjpnZXRQcm90b3R5cGU7CiAgICAgUkVMRUFT
RV9BU1NFUlQob3ZlcnJpZGVzR2V0UHJvdG90eXBlID09IHR5cGVJbmZvKCkub3ZlcnJpZGVzR2V0
UHJvdG90eXBlKCkpOworCisgICAgYm9vbCBvdmVycmlkZXNQdXQgPQorICAgICAgICBtZXRob2RU
YWJsZS5wdXQgIT0gSlNPYmplY3Q6OnB1dAorICAgICAgICAmJiBtZXRob2RUYWJsZS5wdXQgIT0g
SlNDZWxsOjpwdXQ7CisgICAgUkVMRUFTRV9BU1NFUlQob3ZlcnJpZGVzUHV0ID09IHR5cGVJbmZv
KCkub3ZlcnJpZGVzUHV0KCkpOwogfQogI2Vsc2UKIGlubGluZSB2b2lkIFN0cnVjdHVyZTo6dmFs
aWRhdGVGbGFncygpIHsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAko
cmV2aXNpb24gMjcxOTc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zODYsNyArMzg2LDYgQEAgVk06OlZNKFZNVHlwZSB2bVR5cGUs
IEhlYXBUeXBlIGhlYXBUeXBlLAogICAgICwgcHJvcGVydHlOYW1lcyhudWxscHRyKQogICAgICwg
ZW1wdHlMaXN0KG5ldyBBcmdMaXN0KQogICAgICwgbWFjaGluZUNvZGVCeXRlc1BlckJ5dGVjb2Rl
V29yZEZvckJhc2VsaW5lSklUKG1ha2VVbmlxdWU8U2ltcGxlU3RhdHM+KCkpCi0gICAgLCBjdXN0
b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbk1hcCgqdGhpcykKICAgICAsIHN0cmluZ0NhY2hlKCp0aGlz
KQogICAgICwgc3ltYm9sSW1wbFRvU3ltYm9sTWFwKCp0aGlzKQogICAgICwgc3RydWN0dXJlQ2Fj
aGUoKnRoaXMpCkBAIC0xNDc4LDcgKzE0NzcsOCBAQCBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJ
TkVfTUVNQkVSX1NMT1coCiBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1co
Y2FsbGJhY2tHbG9iYWxPYmplY3RTcGFjZSwgY2FsbGJhY2tHbG9iYWxPYmplY3RIZWFwQ2VsbFR5
cGUuZ2V0KCksIEpTQ2FsbGJhY2tPYmplY3Q8SlNHbG9iYWxPYmplY3Q+KQogRFlOQU1JQ19JU09f
U1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKGNhbGxiYWNrRnVuY3Rpb25TcGFjZSwgY2VsbEhl
YXBDZWxsVHlwZS5nZXQoKSwgSlNDYWxsYmFja0Z1bmN0aW9uKSAvLyBIYXNoOjB4ZTc2NDhlYmMK
IERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyhjYWxsYmFja09iamVjdFNw
YWNlLCBjYWxsYmFja09iamVjdEhlYXBDZWxsVHlwZS5nZXQoKSwgSlNDYWxsYmFja09iamVjdDxK
U05vbkZpbmFsT2JqZWN0PikKLURZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xP
VyhjdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvblNwYWNlLCBjZWxsSGVhcENlbGxUeXBlLmdldCgp
LCBKU0N1c3RvbUdldHRlclNldHRlckZ1bmN0aW9uKSAvLyBIYXNoOjB4MTgwOTEwMDAKK0RZTkFN
SUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyhjdXN0b21HZXR0ZXJGdW5jdGlvblNw
YWNlLCBjZWxsSGVhcENlbGxUeXBlLmdldCgpLCBKU0N1c3RvbUdldHRlckZ1bmN0aW9uKSAvLyBI
YXNoOjB4MTgwOTEwMDAKK0RZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyhj
dXN0b21TZXR0ZXJGdW5jdGlvblNwYWNlLCBjZWxsSGVhcENlbGxUeXBlLmdldCgpLCBKU0N1c3Rv
bVNldHRlckZ1bmN0aW9uKQogRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9X
KGRhdGFWaWV3U3BhY2UsIGNlbGxIZWFwQ2VsbFR5cGUuZ2V0KCksIEpTRGF0YVZpZXcpCiBEWU5B
TUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1coZGVidWdnZXJTY29wZVNwYWNlLCBj
ZWxsSGVhcENlbGxUeXBlLmdldCgpLCBEZWJ1Z2dlclNjb3BlKQogRFlOQU1JQ19JU09fU1VCU1BB
Q0VfREVGSU5FX01FTUJFUl9TTE9XKGVycm9ySW5zdGFuY2VTcGFjZSwgZXJyb3JJbnN0YW5jZUhl
YXBDZWxsVHlwZS5nZXQoKSwgRXJyb3JJbnN0YW5jZSkgLy8gSGFzaDoweDNmNDBkNGEKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkocmV2aXNpb24gMjcxOTc1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkod29ya2luZyBjb3B5KQpAQCAtMTQxLDcgKzE0
MSw2IEBAIGNsYXNzIEpTQVBJV3JhcHBlckdsb2JhbE9iamVjdDsKIGNsYXNzIEpTQVBJV3JhcHBl
ck9iamVjdDsKIGNsYXNzIEpTQ0NhbGxiYWNrRnVuY3Rpb247CiBjbGFzcyBKU0NhbGxiYWNrQ29u
c3RydWN0b3I7Ci1jbGFzcyBKU0N1c3RvbUdldHRlclNldHRlckZ1bmN0aW9uOwogY2xhc3MgSlNE
ZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGU7CiBjbGFzcyBKU0dsb2JhbE9iamVjdDsKIGNs
YXNzIEpTR2xvYmFsTGV4aWNhbEVudmlyb25tZW50OwpAQCAtNTAwLDcgKzQ5OSw4IEBAIHB1Ymxp
YzoKICAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKGNhbGxiYWNrR2xvYmFs
T2JqZWN0U3BhY2UpCiAgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihjYWxs
YmFja0Z1bmN0aW9uU3BhY2UpCiAgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJF
UihjYWxsYmFja09iamVjdFNwYWNlKQotICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9N
RU1CRVIoY3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rpb25TcGFjZSkKKyAgICBEWU5BTUlDX0lTT19T
VUJTUEFDRV9ERUZJTkVfTUVNQkVSKGN1c3RvbUdldHRlckZ1bmN0aW9uU3BhY2UpCisgICAgRFlO
QU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihjdXN0b21TZXR0ZXJGdW5jdGlvblNwYWNl
KQogICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIoZGF0YVZpZXdTcGFjZSkK
ICAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKGRlYnVnZ2VyU2NvcGVTcGFj
ZSkKICAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKGVycm9ySW5zdGFuY2VT
cGFjZSkKQEAgLTcyMCw3ICs3MjAsNiBAQCBwdWJsaWM6CiAgICAgU21hbGxTdHJpbmdzIHNtYWxs
U3RyaW5nczsKICAgICBOdW1lcmljU3RyaW5ncyBudW1lcmljU3RyaW5nczsKICAgICBzdGQ6OnVu
aXF1ZV9wdHI8U2ltcGxlU3RhdHM+IG1hY2hpbmVDb2RlQnl0ZXNQZXJCeXRlY29kZVdvcmRGb3JC
YXNlbGluZUpJVDsKLSAgICBXZWFrR0NNYXA8c3RkOjpwYWlyPEN1c3RvbUdldHRlclNldHRlcios
IGludD4sIEpTQ3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rpb24+IGN1c3RvbUdldHRlclNldHRlckZ1
bmN0aW9uTWFwOwogICAgIFdlYWtHQ01hcDxTdHJpbmdJbXBsKiwgSlNTdHJpbmcsIFB0ckhhc2g8
U3RyaW5nSW1wbCo+PiBzdHJpbmdDYWNoZTsKICAgICBTdHJvbmc8SlNTdHJpbmc+IGxhc3RDYWNo
ZWRTdHJpbmc7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9KU0RvbGxhclZN
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvSlNEb2xsYXJW
TS5jcHAJKHJldmlzaW9uIDI3MTk3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9K
U0RvbGxhclZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQzLDcgKzU0Myw3IEBAIHN0YXRpYyBK
U0NfREVDTEFSRV9DVVNUT01fR0VUVEVSKHJ1bnRpbWUKIGNsYXNzIFJ1bnRpbWVBcnJheSA6IHB1
YmxpYyBKU0FycmF5IHsKIHB1YmxpYzoKICAgICB0eXBlZGVmIEpTQXJyYXkgQmFzZTsKLSAgICBz
dGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJl
RmxhZ3MgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBJbnRlcmNlcHRzR2V0T3duUHJv
cGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvOworICAgIHN0YXRpYyBjb25z
dGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IE92
ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRlc1B1dCB8IEludGVyY2VwdHNHZXRP
d25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm87CiAKIElHTk9SRV9X
QVJOSU5HU19CRUdJTigidW51c2VkLWNvbnN0LXZhcmlhYmxlIikKICAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9IGZhbHNlOwpAQCAtNjY1LDkgKzY2NSwxMSBAQCBK
U0NfREVGSU5FX0NVU1RPTV9HRVRURVIocnVudGltZUFycmF5TGVuCiAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc051bWJlcih0aGlzT2JqZWN0LT5nZXRMZW5ndGgoKSkpOwogfQogCi1zdGF0
aWMgY29uc3Qgc3RydWN0IENvbXBhY3RIYXNoSW5kZXggc3RhdGljQ3VzdG9tQWNjZXNzb3JUYWJs
ZUluZGV4WzJdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBDb21wYWN0SGFzaEluZGV4IHN0YXRp
Y0N1c3RvbUFjY2Vzc29yVGFibGVJbmRleFs0XSA9IHsKICAgICB7IDAsIC0xIH0sCiAgICAgeyAt
MSwgLTEgfSwKKyAgICB7IDEsIC0xIH0sCisgICAgeyAtMSwgLTEgfSwKIH07CiAKIHN0YXRpYyBK
U0NfREVDTEFSRV9DVVNUT01fR0VUVEVSKHRlc3RTdGF0aWNBY2Nlc3NvckdldHRlcik7CkBAIC02
OTAsMTkgKzY5MiwyMyBAQCBKU0NfREVGSU5FX0NVU1RPTV9TRVRURVIodGVzdFN0YXRpY0FjY2Vz
CiB7CiAgICAgRG9sbGFyVk1Bc3NlcnRTY29wZSBhc3NlcnRTY29wZTsKICAgICBWTSYgdm0gPSBn
bG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CiAgICAgCi0gICAgSlNPYmplY3QqIHRoaXNPYmplY3QgPSBqc0R5bmFtaWNDYXN0
PEpTT2JqZWN0Kj4odm0sIEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKKyAgICBKU1ZhbHVl
IHJlY2VpdmVyID0gSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSk7CisgICAgSlNPYmplY3QqIHRo
aXNPYmplY3QgPSByZWNlaXZlci5pc09iamVjdCgpID8gYXNPYmplY3QocmVjZWl2ZXIpIDogcmVj
ZWl2ZXIuc3ludGhlc2l6ZVByb3RvdHlwZShnbG9iYWxPYmplY3QpOworICAgIFJFVFVSTl9JRl9F
WENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwogICAgIFJFTEVBU0VfQVNTRVJUKHRoaXNPYmpl
Y3QpOwogCiAgICAgcmV0dXJuIHRoaXNPYmplY3QtPnB1dERpcmVjdCh2bSwgUHJvcGVydHlOYW1l
KElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJ0ZXN0RmllbGQiKSksIEpTVmFsdWU6OmRlY29k
ZSh2YWx1ZSkpOwogfQogCi1zdGF0aWMgY29uc3Qgc3RydWN0IEhhc2hUYWJsZVZhbHVlIHN0YXRp
Y0N1c3RvbUFjY2Vzc29yVGFibGVWYWx1ZXNbMV0gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IEhh
c2hUYWJsZVZhbHVlIHN0YXRpY0N1c3RvbUFjY2Vzc29yVGFibGVWYWx1ZXNbMl0gPSB7CiAgICAg
eyAidGVzdFN0YXRpY0FjY2Vzc29yIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0
cmlidXRlOjpDdXN0b21BY2Nlc3NvciksIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNf
Y2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4odGVzdFN0YXRpY0FjY2Vzc29yR2V0dGVy
KSwgKGludHB0cl90KXN0YXRpY19jYXN0PFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jPih0
ZXN0U3RhdGljQWNjZXNzb3JQdXR0ZXIpIH0gfSwKKyAgICB7ICJ0ZXN0U3RhdGljQWNjZXNzb3JS
ZWFkT25seSIsIFByb3BlcnR5QXR0cmlidXRlOjpDdXN0b21BY2Nlc3NvciB8IFByb3BlcnR5QXR0
cmlidXRlOjpSZWFkT25seSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PFBy
b3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPih0ZXN0U3RhdGljQWNjZXNzb3JHZXR0ZXIpLCAoaW50
cHRyX3Qpc3RhdGljX2Nhc3Q8UHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmM+KDApIH0gfSwK
IH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgSGFzaFRhYmxlIHN0YXRpY0N1c3RvbUFjY2Vzc29y
VGFibGUgPQotICAgIHsgMSwgMSwgdHJ1ZSwgbnVsbHB0ciwgc3RhdGljQ3VzdG9tQWNjZXNzb3JU
YWJsZVZhbHVlcywgc3RhdGljQ3VzdG9tQWNjZXNzb3JUYWJsZUluZGV4IH07CisgICAgeyAyLCAz
LCB0cnVlLCBudWxscHRyLCBzdGF0aWNDdXN0b21BY2Nlc3NvclRhYmxlVmFsdWVzLCBzdGF0aWND
dXN0b21BY2Nlc3NvclRhYmxlSW5kZXggfTsKIAogY2xhc3MgU3RhdGljQ3VzdG9tQWNjZXNzb3Ig
OiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7CiAgICAgdXNpbmcgQmFzZSA9IEpTTm9uRmluYWxP
YmplY3Q7CkBAIC03NjcsMTcgKzc3MywyNSBAQCBKU0NfREVGSU5FX0NVU1RPTV9TRVRURVIodGVz
dFN0YXRpY1ZhbHVlCiAgICAgcmV0dXJuIHRoaXNPYmplY3QtPnB1dERpcmVjdCh2bSwgUHJvcGVy
dHlOYW1lKElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJ0ZXN0U3RhdGljVmFsdWUiKSksIEpT
VmFsdWU6OmRlY29kZSh2YWx1ZSkpOwogfQogCi1zdGF0aWMgY29uc3Qgc3RydWN0IENvbXBhY3RI
YXNoSW5kZXggc3RhdGljQ3VzdG9tVmFsdWVUYWJsZUluZGV4WzJdID0geworc3RhdGljIGNvbnN0
IHN0cnVjdCBDb21wYWN0SGFzaEluZGV4IHN0YXRpY0N1c3RvbVZhbHVlVGFibGVJbmRleFs4XSA9
IHsKKyAgICB7IDEsIC0xIH0sCisgICAgeyAtMSwgLTEgfSwKKyAgICB7IC0xLCAtMSB9LAorICAg
IHsgLTEsIC0xIH0sCisgICAgeyAtMSwgLTEgfSwKKyAgICB7IDIsIC0xIH0sCiAgICAgeyAwLCAt
MSB9LAogICAgIHsgLTEsIC0xIH0sCiB9OwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IEhhc2hUYWJs
ZVZhbHVlIHN0YXRpY0N1c3RvbVZhbHVlVGFibGVWYWx1ZXNbMV0gPSB7Ci0gICAgeyAidGVzdFN0
YXRpY1ZhbHVlIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpDdXN0
b21BY2Nlc3NvciksIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0
eVNsb3Q6OkdldFZhbHVlRnVuYz4odGVzdFN0YXRpY1ZhbHVlR2V0dGVyKSwgKGludHB0cl90KXN0
YXRpY19jYXN0PFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jPih0ZXN0U3RhdGljVmFsdWVQ
dXR0ZXIpIH0gfSwKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgSGFzaFRhYmxlVmFsdWUgc3RhdGljQ3Vz
dG9tVmFsdWVUYWJsZVZhbHVlc1szXSA9IHsKKyAgICB7ICJ0ZXN0U3RhdGljVmFsdWUiLCBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6Ok5vbmUpLCBOb0ludHJpbnNpYywg
eyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KHRlc3RT
dGF0aWNWYWx1ZUdldHRlciksIChpbnRwdHJfdClzdGF0aWNfY2FzdDxQdXRQcm9wZXJ0eVNsb3Q6
OlB1dFZhbHVlRnVuYz4odGVzdFN0YXRpY1ZhbHVlUHV0dGVyKSB9IH0sCisgICAgeyAidGVzdFN0
YXRpY1ZhbHVlTm9TZXR0ZXIiLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1
dGU6Ok5vbmUpLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlT
bG90OjpHZXRWYWx1ZUZ1bmM+KHRlc3RTdGF0aWNWYWx1ZUdldHRlciksIChpbnRwdHJfdClzdGF0
aWNfY2FzdDxQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYz4oMCkgfSB9LAorICAgIHsgInRl
c3RTdGF0aWNWYWx1ZVJlYWRPbmx5Iiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0
cmlidXRlOjpSZWFkT25seSksIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxQ
cm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4odGVzdFN0YXRpY1ZhbHVlR2V0dGVyKSwgKGludHB0
cl90KXN0YXRpY19jYXN0PFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jPigwKSB9IH0sCiB9
OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IEhhc2hUYWJsZSBzdGF0aWNDdXN0b21WYWx1ZVRhYmxl
ID0KLSAgICB7IDEsIDEsIHRydWUsIG51bGxwdHIsIHN0YXRpY0N1c3RvbVZhbHVlVGFibGVWYWx1
ZXMsIHN0YXRpY0N1c3RvbVZhbHVlVGFibGVJbmRleCB9OworICAgIHsgMywgNywgdHJ1ZSwgbnVs
bHB0ciwgc3RhdGljQ3VzdG9tVmFsdWVUYWJsZVZhbHVlcywgc3RhdGljQ3VzdG9tVmFsdWVUYWJs
ZUluZGV4IH07CiAKIGNsYXNzIFN0YXRpY0N1c3RvbVZhbHVlIDogcHVibGljIEpTTm9uRmluYWxP
YmplY3QgewogICAgIHVzaW5nIEJhc2UgPSBKU05vbkZpbmFsT2JqZWN0OwpAQCAtODE1LDYgKzgy
OSw3IEBAIHB1YmxpYzoKIAogY2xhc3MgT2JqZWN0RG9pbmdTaWRlRWZmZWN0UHV0V2l0aG91dENv
cnJlY3RTbG90U3RhdHVzIDogcHVibGljIEpTTm9uRmluYWxPYmplY3QgewogICAgIHVzaW5nIEJh
c2UgPSBKU05vbkZpbmFsT2JqZWN0OworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3Ry
dWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IE92ZXJyaWRlc1B1dDsKIHB1Ymxp
YzoKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+CiAgICAg
c3RhdGljIENvbXBsZXRlU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VM
b2cJKHJldmlzaW9uIDI3MTk3NSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDM2IEBACisyMDIxLTAxLTI4ICBBbGV4ZXkgU2h2YXlrYSAgPHNo
dmFpa2FsZXNoQGdtYWlsLmNvbT4KKworICAgICAgICBJbnRyb2R1Y2UgT3ZlcnJpZGVzUHV0W0J5
SW5kZXhdIHR5cGUgaW5mbyBmbGFncworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjE3OTE2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0N1c3RvbS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpqc0RPTVdpbmRvd0dldE93blByb3BlcnR5U2xvdFJlc3RyaWN0ZWRBY2Nl
c3MpOgorICAgICAgICAoV2ViQ29yZTo6SlNET01XaW5kb3c6OnB1dCk6CisgICAgICAgIChXZWJD
b3JlOjpKU0RPTVdpbmRvdzo6ZG9QdXRQcm9wZXJ0eVNlY3VyaXR5Q2hlY2spOiBEZWxldGVkLgor
ICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NV2luZG93UHJvcGVydGllcy5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpKU0RPTVdpbmRvd1Byb3BlcnRpZXM6OnB1dCk6CisgICAgICAgICogYmluZGlu
Z3MvanMvSlNET01XaW5kb3dQcm9wZXJ0aWVzLmg6CisgICAgICAgICogYmluZGluZ3MvanMvSlNM
b2NhdGlvbkN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpnZXRPd25Qcm9wZXJ0eVNsb3RD
b21tb24pOgorICAgICAgICAoV2ViQ29yZTo6SlNMb2NhdGlvbjo6ZG9QdXRQcm9wZXJ0eVNlY3Vy
aXR5Q2hlY2spOiBEZWxldGVkLgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTUmVtb3RlRE9NV2lu
ZG93Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTUmVtb3RlRE9NV2luZG93OjpwdXQp
OgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtOgorICAgICAg
ICAoR2VuZXJhdGVQdXQpOgorICAgICAgICAoR2VuZXJhdGVIZWFkZXIpOgorICAgICAgICAqIGJp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3REb21haW5TZWN1cml0eS5oOgorICAgICAgICAq
IGJyaWRnZS9vYmpjL29iamNfcnVudGltZS5oOgorICAgICAgICAqIGJyaWRnZS9ydW50aW1lX2Fy
cmF5LmNwcDoKKyAgICAgICAgKEpTQzo6UnVudGltZUFycmF5OjpwdXQpOgorICAgICAgICAqIGJy
aWRnZS9ydW50aW1lX2FycmF5Lmg6CisgICAgICAgICogYnJpZGdlL3J1bnRpbWVfb2JqZWN0LmNw
cDoKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OlJ1bnRpbWVPYmplY3Q6OnB1dCk6CisgICAgICAg
ICogYnJpZGdlL3J1bnRpbWVfb2JqZWN0Lmg6CisgICAgICAgICogcGFnZS9ET01XaW5kb3cuaWRs
OgorICAgICAgICAqIHBhZ2UvUmVtb3RlRE9NV2luZG93LmlkbDoKKwogMjAyMS0wMS0yNyAgTmlr
b2xhcyBaaW1tZXJtYW5uICA8bnppbW1lcm1hbm5AaWdhbGlhLmNvbT4KIAogICAgICAgICBSRUdS
RVNTSU9OIChyMjQzMjY2KTogU1ZHU3RvcEVsZW1lbnQgZG9lcyBub3QgcmVhY3QgdXBvbiAnb2Zm
c2V0JyBhdHRyaWJ1dGUgY2hhbmdlcwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNET01XaW5kb3dDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmNwcAkocmV2aXNpb24gMjcxOTc1KQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00OCw5ICs0OCwxMSBAQAogI2luY2x1ZGUgIlNldHRpbmdzLmgiCiAjaW5jbHVkZSAiV2Vi
Q29yZUpTQ2xpZW50RGF0YS5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0J1aWx0aW5OYW1l
cy5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0dldHRlclNldHRlci5oPgogI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL0hlYXBBbmFseXplci5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0ludGVybmFsRnVuY3Rpb24uaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0NJbmxpbmVz
Lmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNDdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlv
bi5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTRnVuY3Rpb24uaD4KICNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9KU01pY3JvdGFzay5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0xv
b2t1cC5oPgpAQCAtMTg0LDkgKzE4Niw5IEBAIGJvb2wganNET01XaW5kb3dHZXRPd25Qcm9wZXJ0
eVNsb3RSZXN0cmkKICAgICAgICAgICAgIHx8IHByb3BlcnR5TmFtZSA9PSBidWlsdGluTmFtZXMu
b3BlbmVyUHVibGljTmFtZSgpCiAgICAgICAgICAgICB8fCBwcm9wZXJ0eU5hbWUgPT0gYnVpbHRp
bk5hbWVzLnBhcmVudFB1YmxpY05hbWUoKQogICAgICAgICAgICAgfHwgcHJvcGVydHlOYW1lID09
IGJ1aWx0aW5OYW1lcy50b3BQdWJsaWNOYW1lKCkpIHsKLSAgICAgICAgICAgIGJvb2wgc2hvdWxk
RXhwb3NlU2V0dGVyID0gcHJvcGVydHlOYW1lID09IGJ1aWx0aW5OYW1lcy5sb2NhdGlvblB1Ymxp
Y05hbWUoKTsKLSAgICAgICAgICAgIEN1c3RvbUdldHRlclNldHRlciogY3VzdG9tR2V0dGVyU2V0
dGVyID0gQ3VzdG9tR2V0dGVyU2V0dGVyOjpjcmVhdGUodm0sIGVudHJ5LT5wcm9wZXJ0eUdldHRl
cigpLCBzaG91bGRFeHBvc2VTZXR0ZXIgPyBlbnRyeS0+cHJvcGVydHlQdXR0ZXIoKSA6IG51bGxw
dHIpOwotICAgICAgICAgICAgc2xvdC5zZXRDdXN0b21HZXR0ZXJTZXR0ZXIodGhpc09iamVjdCwg
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkN1c3RvbUFjY2Vz
c29yIHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pLCBjdXN0b21HZXR0ZXJTZXR0
ZXIpOworICAgICAgICAgICAgYXV0byogZ2V0dGVyID0gSlNDdXN0b21HZXR0ZXJGdW5jdGlvbjo6
Y3JlYXRlKHZtLCAmbGV4aWNhbEdsb2JhbE9iamVjdCwgZW50cnktPnByb3BlcnR5R2V0dGVyKCks
IFdURjo6bnVsbG9wdCwgcHJvcGVydHlOYW1lKTsKKyAgICAgICAgICAgIGF1dG8qIHNldHRlciA9
IHByb3BlcnR5TmFtZSA9PSBidWlsdGluTmFtZXMubG9jYXRpb25QdWJsaWNOYW1lKCkgPyBKU0N1
c3RvbVNldHRlckZ1bmN0aW9uOjpjcmVhdGUodm0sICZsZXhpY2FsR2xvYmFsT2JqZWN0LCBlbnRy
eS0+cHJvcGVydHlQdXR0ZXIoKSwgcHJvcGVydHlOYW1lKSA6IG51bGxwdHI7CisgICAgICAgICAg
ICBzbG90LnNldEdldHRlclNsb3QodGhpc09iamVjdCwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6
QWNjZXNzb3IgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSwgR2V0dGVyU2V0dGVy
OjpjcmVhdGUodm0sICZsZXhpY2FsR2xvYmFsT2JqZWN0LCBnZXR0ZXIsIHNldHRlcikpOwogICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICB9CkBAIC0zMTEsMjUgKzMxMyw2
IEBAIGJvb2wgSlNET01XaW5kb3c6OmdldE93blByb3BlcnR5U2xvdEJ5SW4KICAgICByZXR1cm4g
QmFzZTo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleCh0aGlzT2JqZWN0LCBsZXhpY2FsR2xvYmFs
T2JqZWN0LCBpbmRleCwgc2xvdCk7CiB9CiAKLXZvaWQgSlNET01XaW5kb3c6OmRvUHV0UHJvcGVy
dHlTZWN1cml0eUNoZWNrKEpTT2JqZWN0KiBjZWxsLCBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEds
b2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHV0UHJvcGVydHlTbG90JikK
LXsKLSAgICBWTSYgdm0gPSBsZXhpY2FsR2xvYmFsT2JqZWN0LT52bSgpOwotICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAgIGF1dG8qIHRoaXNPYmplY3QgPSBq
c0Nhc3Q8SlNET01XaW5kb3cqPihjZWxsKTsKLSAgICBpZiAoIXRoaXNPYmplY3QtPndyYXBwZWQo
KS5mcmFtZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBTdHJpbmcgZXJyb3JNZXNzYWdlOwot
ICAgIGlmICghQmluZGluZ1NlY3VyaXR5OjpzaG91bGRBbGxvd0FjY2Vzc1RvRE9NV2luZG93KCps
ZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzT2JqZWN0LT53cmFwcGVkKCksIGVycm9yTWVzc2FnZSkp
IHsKLSAgICAgICAgLy8gV2Ugb25seSBhbGxvdyBzZXR0aW5nICJsb2NhdGlvbiIgYXR0cmlidXRl
IGNyb3NzLW9yaWdpbi4KLSAgICAgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBzdGF0aWNfY2FzdDxK
U1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpLT5idWlsdGluTmFtZXMoKS5sb2NhdGlvblB1
YmxpY05hbWUoKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgdGhyb3dTZWN1cml0eUVy
cm9yKCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSwgZXJyb3JNZXNzYWdlKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLX0KLQogYm9vbCBKU0RPTVdpbmRvdzo6cHV0KEpTQ2VsbCogY2VsbCwg
SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0
eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBWTSYg
dm0gPSBsZXhpY2FsR2xvYmFsT2JqZWN0LT52bSgpOwpAQCAtMzQzLDEwICszMjYsOSBAQCBib29s
IEpTRE9NV2luZG93OjpwdXQoSlNDZWxsKiBjZWxsLCBKU0dsCiAgICAgaWYgKCFCaW5kaW5nU2Vj
dXJpdHk6OnNob3VsZEFsbG93QWNjZXNzVG9ET01XaW5kb3coKmxleGljYWxHbG9iYWxPYmplY3Qs
IHRoaXNPYmplY3QtPndyYXBwZWQoKSwgZXJyb3JNZXNzYWdlKSkgewogICAgICAgICAvLyBXZSBv
bmx5IGFsbG93IHNldHRpbmcgImxvY2F0aW9uIiBhdHRyaWJ1dGUgY3Jvc3Mtb3JpZ2luLgogICAg
ICAgICBpZiAocHJvcGVydHlOYW1lID09IHN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0u
Y2xpZW50RGF0YSktPmJ1aWx0aW5OYW1lcygpLmxvY2F0aW9uUHVibGljTmFtZSgpKSB7Ci0gICAg
ICAgICAgICBib29sIHB1dFJlc3VsdCA9IGZhbHNlOwotICAgICAgICAgICAgaWYgKGxvb2t1cFB1
dChsZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHRoaXNPYmplY3QsIHZhbHVlLCAq
c19pbmZvLnN0YXRpY1Byb3BIYXNoVGFibGUsIHNsb3QsIHB1dFJlc3VsdCkpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIHB1dFJlc3VsdDsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgICAgIHNldEpTRE9NV2luZG93X2xvY2F0aW9uKGxleGljYWxHbG9iYWxPYmplY3QsIEpTVmFs
dWU6OmVuY29kZShzbG90LnRoaXNWYWx1ZSgpKSwgSlNWYWx1ZTo6ZW5jb2RlKHZhbHVlKSk7Cisg
ICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBmYWxzZSk7CisgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgICAgICB0aHJvd1NlY3VyaXR5RXJyb3IoKmxl
eGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLCBlcnJvck1lc3NhZ2UpOwogICAgICAgICByZXR1cm4g
ZmFsc2U7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd1Byb3Bl
cnRpZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9N
V2luZG93UHJvcGVydGllcy5jcHAJKHJldmlzaW9uIDI3MTk3NSkKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTRE9NV2luZG93UHJvcGVydGllcy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTExNiw2ICsxMTYsMTkgQEAgYm9vbCBKU0RPTVdpbmRvd1Byb3BlcnRpZXM6OmdldE93blByb3Bl
cgogICAgIHJldHVybiBnZXRPd25Qcm9wZXJ0eVNsb3Qob2JqZWN0LCBsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBJZGVudGlmaWVyOjpmcm9tKHZtLCBpbmRleCksIHNsb3QpOwogfQogCisvLyBUaGlzIG92
ZXJyaWRlIGlzIG5lY2Vzc2FyeSB0byBwcmV2ZW50IEpTT2JqZWN0OjpwdXRJbmxpbmVTbG93KCkg
ZnJvbSBwZXJmb3JtaW5nIGV4cGVuc2l2ZSBET00gbG9va3Vwcy4KKy8vIEZvcmRpbmcgW1tTZXRd
XSByaWdodCB0byBbW1Byb3RvdHlwZV1dLCBza2lwcGluZyB0aGUgbmFtZWQgcHJvcGVydGllcyBv
YmplY3QgaXRzZWxmLCBpcyBjb25mb3JtYW50IGJlY2F1c2U6IAorLy8gKiBbW0RlZmluZU93blBy
b3BlcnR5XV0gYWx3YXlzIGZhaWxzLCBoZW5jZSBbW0dldE93blByb3BlcnR5XV0gY2FuJ3QgcmV0
dXJuIG5vbi13cml0YWJsZSBvciBhY2Nlc3NvciBwcm9wZXJ0eTsKKy8vICogW1tQcm90b3R5cGVd
XSBpcyBpbW11dGFibGUgYW5kIGtub3duIHRvIGJlIGFuIG9yZGluYXJ5IG9iamVjdC4KKy8vIGh0
dHBzOi8vaGV5Y2FtLmdpdGh1Yi5pby93ZWJpZGwvI25hbWVkLXByb3BlcnRpZXMtb2JqZWN0Citi
b29sIEpTRE9NV2luZG93UHJvcGVydGllczo6cHV0KEpTQ2VsbCogY2VsbCwgSlNHbG9iYWxPYmpl
Y3QqIGxleGljYWxHbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFs
dWUgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKK3sKKyAgICBhdXRvKiB0aGlzT2JqZWN0
ID0ganNDYXN0PEpTRE9NV2luZG93UHJvcGVydGllcyo+KGNlbGwpOworICAgIEpTT2JqZWN0KiBw
cm90byA9IGFzT2JqZWN0KHRoaXNPYmplY3QtPmdldFByb3RvdHlwZURpcmVjdChsZXhpY2FsR2xv
YmFsT2JqZWN0LT52bSgpKSk7CisgICAgQVNTRVJUKHByb3RvLT5tZXRob2RUYWJsZShsZXhpY2Fs
R2xvYmFsT2JqZWN0LT52bSgpKS0+cHV0ID09IEpTT2JqZWN0OjpwdXQpOworICAgIHJldHVybiBK
U09iamVjdDo6cHV0SW5saW5lRm9ySlNPYmplY3QocHJvdG8sIGxleGljYWxHbG9iYWxPYmplY3Qs
IHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpOworfQorCiBKU0M6Oklzb1N1YnNwYWNlKiBKU0RP
TVdpbmRvd1Byb3BlcnRpZXM6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKICAgICBy
ZXR1cm4gJnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSktPmRvbVdp
bmRvd1Byb3BlcnRpZXNTcGFjZSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNET01XaW5kb3dQcm9wZXJ0aWVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNET01XaW5kb3dQcm9wZXJ0aWVzLmgJKHJldmlzaW9uIDI3MTk3NSkKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93UHJvcGVydGllcy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zMyw3ICszMyw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIEpTRE9N
V2luZG93UHJvcGVydGllcyBmaW5hbCA6IHB1YmxpYyBKU0RPTU9iamVjdCB7CiBwdWJsaWM6CiAg
ICAgdXNpbmcgQmFzZSA9IEpTRE9NT2JqZWN0OwotICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWdu
ZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEpTQzo6R2V0T3duUHJv
cGVydHlTbG90SXNJbXB1cmVGb3JQcm9wZXJ0eUFic2VuY2UgfCBKU0M6OkludGVyY2VwdHNHZXRP
d25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8gfCBKU0M6Ok92ZXJy
aWRlc0dldE93blByb3BlcnR5U2xvdCB8IEpTQzo6SXNJbW11dGFibGVQcm90b3R5cGVFeG90aWNP
YmplY3Q7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJh
c2U6OlN0cnVjdHVyZUZsYWdzIHwgSlNDOjpHZXRPd25Qcm9wZXJ0eVNsb3RJc0ltcHVyZUZvclBy
b3BlcnR5QWJzZW5jZSB8IEpTQzo6SW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhF
dmVuV2hlbkxlbmd0aElzTm90WmVybyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90
IHwgSlNDOjpPdmVycmlkZXNQdXQgfCBKU0M6OklzSW1tdXRhYmxlUHJvdG90eXBlRXhvdGljT2Jq
ZWN0OwogCiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSBmYWxz
ZTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgSlNDOjpTdWJzcGFjZUFjY2Vzcz4K
QEAgLTU5LDYgKzU5LDcgQEAgcHVibGljOgogCiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVy
dHlTbG90KEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpQcm9wZXJ0
eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90Jik7CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVy
dHlTbG90QnlJbmRleChKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIHVuc2ln
bmVkIHByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMgYm9vbCBw
dXQoSlNDOjpKU0NlbGwqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpQcm9wZXJ0eU5hbWUs
IEpTQzo6SlNWYWx1ZSwgSlNDOjpQdXRQcm9wZXJ0eVNsb3QmKTsKIAogcHJpdmF0ZToKICAgICBK
U0RPTVdpbmRvd1Byb3BlcnRpZXMoSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNDOjpKU0ds
b2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNMb2NhdGlvbkN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNMb2NhdGlvbkN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MTk3NSkKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTG9jYXRpb25DdXN0b20uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yOSw2ICsyOSw4IEBACiAjaW5jbHVkZSAiSlNET01XaW5kb3dDdXN0b20uaCIKICNpbmNs
dWRlICJSdW50aW1lQXBwbGljYXRpb25DaGVja3MuaCIKICNpbmNsdWRlICJXZWJDb3JlSlNDbGll
bnREYXRhLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvR2V0dGVyU2V0dGVyLmg+CisjaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvSlNDdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbi5oPgogI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTRnVuY3Rpb24uaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9Mb29rdXAuaD4KIApAQCAtNzAsOCArNzIsOCBAQCBzdGF0aWMgYm9vbCBnZXRPd25Qcm9w
ZXJ0eVNsb3RDb21tb24oSlNMCiAgICAgLy8gYSBkZXNjcmlwdG9yIHRoYXQgaGFzIGEgc2V0dGVy
IGJ1dCBubyBnZXR0ZXIuCiAgICAgaWYgKHNsb3QuaW50ZXJuYWxNZXRob2RUeXBlKCkgPT0gUHJv
cGVydHlTbG90OjpJbnRlcm5hbE1ldGhvZFR5cGU6OkdldE93blByb3BlcnR5ICYmIHByb3BlcnR5
TmFtZSA9PSBzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpLT5idWls
dGluTmFtZXMoKS5ocmVmUHVibGljTmFtZSgpKSB7CiAgICAgICAgIGF1dG8qIGVudHJ5ID0gSlNM
b2NhdGlvbjo6aW5mbygpLT5zdGF0aWNQcm9wSGFzaFRhYmxlLT5lbnRyeShwcm9wZXJ0eU5hbWUp
OwotICAgICAgICBDdXN0b21HZXR0ZXJTZXR0ZXIqIGN1c3RvbUdldHRlclNldHRlciA9IEN1c3Rv
bUdldHRlclNldHRlcjo6Y3JlYXRlKHZtLCBudWxscHRyLCBlbnRyeS0+cHJvcGVydHlQdXR0ZXIo
KSk7Ci0gICAgICAgIHNsb3Quc2V0Q3VzdG9tR2V0dGVyU2V0dGVyKCZ0aGlzT2JqZWN0LCBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4oSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6Q3VzdG9tQWNjZXNzb3Ig
fCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pLCBjdXN0b21HZXR0ZXJTZXR0ZXIpOworICAg
ICAgICBhdXRvKiBzZXR0ZXIgPSBKU0N1c3RvbVNldHRlckZ1bmN0aW9uOjpjcmVhdGUodm0sICZs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBlbnRyeS0+cHJvcGVydHlQdXR0ZXIoKSwgcHJvcGVydHlOYW1l
KTsKKyAgICAgICAgc2xvdC5zZXRHZXR0ZXJTbG90KCZ0aGlzT2JqZWN0LCBQcm9wZXJ0eUF0dHJp
YnV0ZTo6QWNjZXNzb3IgfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0sIEdldHRlclNldHRl
cjo6Y3JlYXRlKHZtLCAmbGV4aWNhbEdsb2JhbE9iamVjdCwgbnVsbHB0ciwgc2V0dGVyKSk7CiAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIApAQCAtMTEzLDIzICsxMTUsNiBAQCBib29sIEpT
TG9jYXRpb246OmdldE93blByb3BlcnR5U2xvdEJ5SW5kCiAgICAgUkVMRUFTRV9BTkRfUkVUVVJO
KHNjb3BlLCBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChvYmplY3QsIGxleGlj
YWxHbG9iYWxPYmplY3QsIGluZGV4LCBzbG90KSk7CiB9CiAKLXZvaWQgSlNMb2NhdGlvbjo6ZG9Q
dXRQcm9wZXJ0eVNlY3VyaXR5Q2hlY2soSlNPYmplY3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3Qq
IGxleGljYWxHbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFB1dFByb3Bl
cnR5U2xvdCYpCi17Ci0gICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0xvY2F0aW9uKj4o
b2JqZWN0KTsKLSAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8o
KSk7Ci0KLSAgICBWTSYgdm0gPSBsZXhpY2FsR2xvYmFsT2JqZWN0LT52bSgpOwotCi0gICAgLy8g
QWx3YXlzIGFsbG93IGFzc2lnbmluZyB0byB0aGUgd2hvbGUgbG9jYXRpb24uCi0gICAgLy8gSG93
ZXZlciwgYWxsbG93aW5nIGFzc2lnbmluZyBvZiBwaWVjZXMgbWlnaHQgaW5hZHZlcnRlbnRseSBk
aXNjbG9zZSBwYXJ0cyBvZiB0aGUgb3JpZ2luYWwgbG9jYXRpb24uCi0gICAgLy8gU28gZmFsbCB0
aHJvdWdoIHRvIHRoZSBhY2Nlc3MgY2hlY2sgZm9yIHRob3NlLgotICAgIGlmIChwcm9wZXJ0eU5h
bWUgPT0gc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKS0+YnVpbHRp
bk5hbWVzKCkuaHJlZlB1YmxpY05hbWUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gQmxv
Y2sgYWNjZXNzIGFuZCB0aHJvdyBpZiB0aGVyZSBpcyBhIHNlY3VyaXR5IGVycm9yLgotICAgIEJp
bmRpbmdTZWN1cml0eTo6c2hvdWxkQWxsb3dBY2Nlc3NUb0RPTVdpbmRvdyhsZXhpY2FsR2xvYmFs
T2JqZWN0LCB0aGlzT2JqZWN0LT53cmFwcGVkKCkud2luZG93KCksIFRocm93U2VjdXJpdHlFcnJv
cik7Ci19Ci0KIGJvb2wgSlNMb2NhdGlvbjo6cHV0KEpTQ2VsbCogY2VsbCwgSlNHbG9iYWxPYmpl
Y3QqIGxleGljYWxHbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFs
dWUgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgcHV0UHJvcGVydHlTbG90KQogewogICAgIFZNJiB2
bSA9IGxleGljYWxHbG9iYWxPYmplY3QtPnZtKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU1JlbW90ZURPTVdpbmRvd0N1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNSZW1vdGVET01XaW5kb3dDdXN0b20uY3BwCShyZXZpc2lv
biAyNzE5NzUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1JlbW90ZURPTVdpbmRv
d0N1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY4LDEwICs2OCw5IEBAIGJvb2wgSlNSZW1v
dGVET01XaW5kb3c6OnB1dChKU0NlbGwqIGNlbGwKIAogICAgIC8vIFdlIG9ubHkgYWxsb3cgc2V0
dGluZyAibG9jYXRpb24iIGF0dHJpYnV0ZSBjcm9zcy1vcmlnaW4uCiAgICAgaWYgKHByb3BlcnR5
TmFtZSA9PSBzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpLT5idWls
dGluTmFtZXMoKS5sb2NhdGlvblB1YmxpY05hbWUoKSkgewotICAgICAgICBib29sIHB1dFJlc3Vs
dCA9IGZhbHNlOwotICAgICAgICBpZiAobG9va3VwUHV0KGxleGljYWxHbG9iYWxPYmplY3QsIHBy
b3BlcnR5TmFtZSwgdGhpc09iamVjdCwgdmFsdWUsICpzX2luZm8uc3RhdGljUHJvcEhhc2hUYWJs
ZSwgc2xvdCwgcHV0UmVzdWx0KSkKLSAgICAgICAgICAgIHJldHVybiBwdXRSZXN1bHQ7Ci0gICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgc2V0SlNSZW1vdGVET01XaW5kb3dfbG9jYXRpb24o
bGV4aWNhbEdsb2JhbE9iamVjdCwgSlNWYWx1ZTo6ZW5jb2RlKHNsb3QudGhpc1ZhbHVlKCkpLCBK
U1ZhbHVlOjplbmNvZGUodmFsdWUpKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgZmFsc2UpOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgdGhyb3dTZWN1cml0
eUVycm9yKCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSwgZXJyb3JNZXNzYWdlKTsKICAgICBy
ZXR1cm4gZmFsc2U7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVH
ZW5lcmF0b3JKUy5wbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL0NvZGVHZW5lcmF0b3JKUy5wbQkocmV2aXNpb24gMjcxOTc1KQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0JKHdvcmtpbmcgY29weSkKQEAg
LTExOTksNiArMTE5OSw4IEBAIHN1YiBHZW5lcmF0ZVB1dAogICAgIAogICAgIHB1c2goQCRvdXRw
dXRBcnJheSwgImJvb2wgJHtjbGFzc05hbWV9OjpwdXQoSlNDZWxsKiBjZWxsLCBKU0dsb2JhbE9i
amVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNW
YWx1ZSB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBwdXRQcm9wZXJ0eVNsb3QpXG4iKTsKICAgICBw
dXNoKEAkb3V0cHV0QXJyYXksICJ7XG4iKTsKKyAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAg
aWYgKFVOTElLRUxZKGNlbGwgIT0gcHV0UHJvcGVydHlTbG90LnRoaXNWYWx1ZSgpKSlcbiIpOwor
ICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAgICAgcmV0dXJuIGFzT2JqZWN0KGNlbGwpLT5w
dXRJbmxpbmVTbG93KGxleGljYWxHbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHB1
dFByb3BlcnR5U2xvdCwgSlNPYmplY3Q6OlB1dElubGluZVNsb3dNb2RlOjpJZ25vcmVPd25TcGVj
aWFsUHJvcGVydGllcyk7XG4iKTsKICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgYXV0byog
dGhpc09iamVjdCA9IGpzQ2FzdDwke2NsYXNzTmFtZX0qPihjZWxsKTtcbiIpOwogICAgIHB1c2go
QCRvdXRwdXRBcnJheSwgIiAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3Qs
IGluZm8oKSk7XG5cbiIpOwogCkBAIC0yOTUyLDExICsyOTU0LDYgQEAgc3ViIEdlbmVyYXRlSGVh
ZGVyCiAgICAgICAgICRzdHJ1Y3R1cmVGbGFnc3siSlNDOjpJbnRlcmNlcHRzR2V0T3duUHJvcGVy
dHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIn0gPSAxOwogICAgIH0KIAotICAg
IGlmICgkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntDaGVja1NlY3VyaXR5fSkgewot
ICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHN0YXRpYyB2b2lkIGRvUHV0UHJvcGVy
dHlTZWN1cml0eUNoZWNrKEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlND
OjpQcm9wZXJ0eU5hbWUsIEpTQzo6UHV0UHJvcGVydHlTbG90Jik7XG4iKTsKLSAgICAgICAgJHN0
cnVjdHVyZUZsYWdzeyJKU0M6Okhhc1B1dFByb3BlcnR5U2VjdXJpdHlDaGVjayJ9ID0gMTsKLSAg
ICB9Ci0KICAgICBpZiAoJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57UGx1Z2lufSB8
fCBHZXROYW1lZFNldHRlck9wZXJhdGlvbigkaW50ZXJmYWNlKSkgewogICAgICAgICAkc3RydWN0
dXJlRmxhZ3N7IkpTQzo6UHJvaGliaXRzUHJvcGVydHlDYWNoaW5nIn0gPSAxOwogICAgIH0KQEAg
LTI5NjksNiArMjk2Niw3IEBAIHN1YiBHZW5lcmF0ZUhlYWRlcgogICAgIGlmIChJbnN0YW5jZU92
ZXJyaWRlc1B1dCgkaW50ZXJmYWNlKSkgewogICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAi
ICAgIHN0YXRpYyBib29sIHB1dChKU0M6OkpTQ2VsbCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBK
U0M6OlByb3BlcnR5TmFtZSwgSlNDOjpKU1ZhbHVlLCBKU0M6OlB1dFByb3BlcnR5U2xvdCYpO1xu
Iik7CiAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgc3RhdGljIGJvb2wgcHV0QnlJ
bmRleChKU0M6OkpTQ2VsbCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCB1bnNpZ25lZCBwcm9wZXJ0
eU5hbWUsIEpTQzo6SlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJvdyk7XG4iKTsKKyAgICAgICAgJHN0
cnVjdHVyZUZsYWdzeyJKU0M6Ok92ZXJyaWRlc1B1dCJ9ID0gMTsKICAgICB9CiAgICAgCiAgICAg
aWYgKEluc3RhbmNlT3ZlcnJpZGVzRGVmaW5lT3duUHJvcGVydHkoJGludGVyZmFjZSkpIHsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3REb21haW5T
ZWN1cml0eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3REb21haW5TZWN1cml0eS5oCShyZXZpc2lvbiAyNzE5NzUpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RG9tYWluU2VjdXJpdHku
aAkod29ya2luZyBjb3B5KQpAQCAtMzksNyArMzksNiBAQCBwdWJsaWM6CiAgICAgc3RhdGljIEpT
Qzo6SlNPYmplY3QqIGNyZWF0ZVByb3RvdHlwZShKU0M6OlZNJiwgSlNET01HbG9iYWxPYmplY3Qm
KTsKICAgICBzdGF0aWMgSlNDOjpKU09iamVjdCogcHJvdG90eXBlKEpTQzo6Vk0mLCBKU0RPTUds
b2JhbE9iamVjdCYpOwogICAgIHN0YXRpYyBUZXN0RG9tYWluU2VjdXJpdHkqIHRvV3JhcHBlZChK
U0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKLSAgICBzdGF0aWMgdm9pZCBkb1B1dFByb3BlcnR5U2Vj
dXJpdHlDaGVjayhKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6UHJv
cGVydHlOYW1lLCBKU0M6OlB1dFByb3BlcnR5U2xvdCYpOwogICAgIHN0YXRpYyB2b2lkIGRlc3Ry
b3koSlNDOjpKU0NlbGwqKTsKIAogICAgIERFQ0xBUkVfSU5GTzsKQEAgLTU5LDcgKzU4LDcgQEAg
cHVibGljOgogICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvckltcGwoSlND
OjpWTSYgdm0pOwogICAgIHN0YXRpYyB2b2lkIGFuYWx5emVIZWFwKEpTQ2VsbCosIEpTQzo6SGVh
cEFuYWx5emVyJik7CiBwdWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1
Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSlNDOjpIYXNQdXRQcm9wZXJ0eVNl
Y3VyaXR5Q2hlY2sgfCBKU0M6Okhhc1N0YXRpY1Byb3BlcnR5VGFibGU7CisgICAgc3RhdGljIGNv
bnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwg
SlNDOjpIYXNTdGF0aWNQcm9wZXJ0eVRhYmxlOwogcHJvdGVjdGVkOgogICAgIEpTVGVzdERvbWFp
blNlY3VyaXR5KEpTQzo6U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3QmLCBSZWY8VGVzdERv
bWFpblNlY3VyaXR5PiYmKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRpbWVf
YXJyYXkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX2Fy
cmF5LmNwcAkocmV2aXNpb24gMjcxOTc1KQorKysgU291cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRp
bWVfYXJyYXkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjUsNiArMTI1LDkgQEAgYm9vbCBSdW50
aW1lQXJyYXk6OnB1dChKU0NlbGwqIGNlbGwsIEpTRwogICAgIFZNJiB2bSA9IGxleGljYWxHbG9i
YWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwogCisgICAgaWYgKFVOTElLRUxZKGNlbGwgIT0gc2xvdC50aGlzVmFsdWUoKSkpCisgICAgICAg
IFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgYXNPYmplY3QoY2VsbCktPnB1dElubGluZVNsb3co
bGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCwgSlNPYmplY3Q6
OlB1dElubGluZVNsb3dNb2RlOjpJZ25vcmVPd25TcGVjaWFsUHJvcGVydGllcykpOworCiAgICAg
UnVudGltZUFycmF5KiB0aGlzT2JqZWN0ID0ganNDYXN0PFJ1bnRpbWVBcnJheSo+KGNlbGwpOwog
ICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoKSB7CiAgICAg
ICAgIHRocm93RXhjZXB0aW9uKGxleGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLCBjcmVhdGVSYW5n
ZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsICJSYW5nZSBlcnJvciIpKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX2FycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYnJpZGdlL3J1bnRpbWVfYXJyYXkuaAkocmV2aXNpb24gMjcxOTc1KQorKysgU291cmNl
L1dlYkNvcmUvYnJpZGdlL3J1bnRpbWVfYXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsNyAr
MzUsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIGNsYXNzIFJ1bnRpbWVBcnJheSBmaW5hbCA6IHB1Ymxp
YyBKU0FycmF5IHsKIHB1YmxpYzoKICAgICB1c2luZyBCYXNlID0gSlNBcnJheTsKLSAgICBzdGF0
aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxh
Z3MgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0
eU5hbWVzIHwgSW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0
aElzTm90WmVybzsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdz
ID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBP
dmVycmlkZXNHZXRPd25Qcm9wZXJ0eU5hbWVzIHwgT3ZlcnJpZGVzUHV0IHwgSW50ZXJjZXB0c0dl
dE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybzsKICAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7CiAKICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBDZWxsVHlwZSwgSlNDOjpTdWJzcGFjZUFjY2Vzcz4KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JyaWRnZS9ydW50aW1lX29iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYnJpZGdlL3J1bnRpbWVfb2JqZWN0LmNwcAkocmV2aXNpb24gMjcxOTc1KQorKysgU291
cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRpbWVfb2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTg2LDYgKzE4Niw5IEBAIGJvb2wgUnVudGltZU9iamVjdDo6cHV0KEpTQ2VsbCogY2VsbCwgSlMK
ICAgICBWTSYgdm0gPSBsZXhpY2FsR2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAorICAgIGlmIChVTkxJS0VMWShjZWxsICE9IHNs
b3QudGhpc1ZhbHVlKCkpKQorICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIGFzT2Jq
ZWN0KGNlbGwpLT5wdXRJbmxpbmVTbG93KGxleGljYWxHbG9iYWxPYmplY3QsIHByb3BlcnR5TmFt
ZSwgdmFsdWUsIHNsb3QsIEpTT2JqZWN0OjpQdXRJbmxpbmVTbG93TW9kZTo6SWdub3JlT3duU3Bl
Y2lhbFByb3BlcnRpZXMpKTsKKwogICAgIFJ1bnRpbWVPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nh
c3Q8UnVudGltZU9iamVjdCo+KGNlbGwpOwogICAgIGlmICghdGhpc09iamVjdC0+bV9pbnN0YW5j
ZSkgewogICAgICAgICB0aHJvd1J1bnRpbWVPYmplY3RJbnZhbGlkQWNjZXNzRXJyb3IobGV4aWNh
bEdsb2JhbE9iamVjdCwgc2NvcGUpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRp
bWVfb2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRpbWVf
b2JqZWN0LmgJKHJldmlzaW9uIDI3MTk3NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50
aW1lX29iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw3ICszNyw3IEBAIEV4Y2VwdGlvbiog
dGhyb3dSdW50aW1lT2JqZWN0SW52YWxpZEFjY2UKIGNsYXNzIFdFQkNPUkVfRVhQT1JUIFJ1bnRp
bWVPYmplY3QgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7CiBwdWJsaWM6CiAgICAgdXNpbmcg
QmFzZSA9IEpTTm9uRmluYWxPYmplY3Q7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBT
dHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJv
cGVydHlTbG90IHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlOYW1lcyB8IE92ZXJyaWRlc0dldENh
bGxEYXRhIHwgR2V0T3duUHJvcGVydHlTbG90TWF5QmVXcm9uZ0Fib3V0RG9udEVudW07CisgICAg
c3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVy
ZUZsYWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzR2V0T3duUHJv
cGVydHlOYW1lcyB8IE92ZXJyaWRlc0dldENhbGxEYXRhIHwgT3ZlcnJpZGVzUHV0IHwgR2V0T3du
UHJvcGVydHlTbG90TWF5QmVXcm9uZ0Fib3V0RG9udEVudW07CiAgICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
Q2VsbFR5cGUsIEpTQzo6U3Vic3BhY2VBY2Nlc3M+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlk
Z2Uvb2JqYy9vYmpjX3J1bnRpbWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlk
Z2Uvb2JqYy9vYmpjX3J1bnRpbWUuaAkocmV2aXNpb24gMjcxOTc1KQorKysgU291cmNlL1dlYkNv
cmUvYnJpZGdlL29iamMvb2JqY19ydW50aW1lLmgJKHdvcmtpbmcgY29weSkKQEAgLTkxLDcgKzkx
LDcgQEAgcHJpdmF0ZToKIGNsYXNzIE9iamNGYWxsYmFja09iamVjdEltcCBmaW5hbCA6IHB1Ymxp
YyBKU0Rlc3RydWN0aWJsZU9iamVjdCB7CiBwdWJsaWM6CiAgICAgdXNpbmcgQmFzZSA9IEpTRGVz
dHJ1Y3RpYmxlT2JqZWN0OwotICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJl
RmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xv
dCB8IE92ZXJyaWRlc0dldENhbGxEYXRhOworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQg
U3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IE92ZXJyaWRlc0dldE93blBy
b3BlcnR5U2xvdCB8IE92ZXJyaWRlc0dldENhbGxEYXRhIHwgT3ZlcnJpZGVzUHV0OwogICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0Rlc3RydWN0aW9uID0gdHJ1ZTsKIAogICAgIHRlbXBs
YXRlPHR5cGVuYW1lIENlbGxUeXBlLCBKU0M6OlN1YnNwYWNlQWNjZXNzPgpJbmRleDogU291cmNl
L1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BhZ2UvRE9NV2luZG93LmlkbAkocmV2aXNpb24gMjcxOTc1KQorKysgU291cmNlL1dlYkNvcmUv
cGFnZS9ET01XaW5kb3cuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC01Miw3ICs1Miw3IEBACiAgICAg
W1JlcGxhY2VhYmxlLCBEb05vdENoZWNrU2VjdXJpdHlPbkdldHRlciwgQ3VzdG9tR2V0dGVyXSBy
ZWFkb25seSBhdHRyaWJ1dGUgV2luZG93UHJveHkgc2VsZjsKICAgICBbTGVnYWN5VW5mb3JnZWFi
bGVdIHJlYWRvbmx5IGF0dHJpYnV0ZSBEb2N1bWVudCBkb2N1bWVudDsKICAgICBhdHRyaWJ1dGUg
RE9NU3RyaW5nIG5hbWU7Ci0gICAgW0RvTm90Q2hlY2tTZWN1cml0eSwgUHV0Rm9yd2FyZHM9aHJl
ZiwgTGVnYWN5VW5mb3JnZWFibGVdIHJlYWRvbmx5IGF0dHJpYnV0ZSBMb2NhdGlvbiBsb2NhdGlv
bjsKKyAgICBbRG9Ob3RDaGVja1NlY3VyaXR5LCBQdXRGb3J3YXJkcz1ocmVmLCBMZWdhY3lVbmZv
cmdlYWJsZSwgRm9yd2FyZERlY2xhcmVJbkhlYWRlcl0gcmVhZG9ubHkgYXR0cmlidXRlIExvY2F0
aW9uIGxvY2F0aW9uOwogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBIaXN0b3J5IGhpc3Rvcnk7CiAg
ICAgW0ltcGxlbWVudGVkQXM9ZW5zdXJlQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5XSByZWFkb25seSBh
dHRyaWJ1dGUgQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5IGN1c3RvbUVsZW1lbnRzOwogICAgIFtSZXBs
YWNlYWJsZV0gcmVhZG9ubHkgYXR0cmlidXRlIEJhclByb3AgbG9jYXRpb25iYXI7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wYWdlL1JlbW90ZURPTVdpbmRvdy5pZGwKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGFnZS9SZW1vdGVET01XaW5kb3cuaWRsCShyZXZpc2lvbiAyNzE5NzUpCisr
KyBTb3VyY2UvV2ViQ29yZS9wYWdlL1JlbW90ZURPTVdpbmRvdy5pZGwJKHdvcmtpbmcgY29weSkK
QEAgLTQ1LDcgKzQ1LDcgQEAKIF0gaW50ZXJmYWNlIFJlbW90ZURPTVdpbmRvdyB7CiAgICAgW0xl
Z2FjeVVuZm9yZ2VhYmxlLCBJbXBsZW1lbnRlZEFzPXNlbGZdIHJlYWRvbmx5IGF0dHJpYnV0ZSBX
aW5kb3dQcm94eSB3aW5kb3c7CiAgICAgW1JlcGxhY2VhYmxlXSByZWFkb25seSBhdHRyaWJ1dGUg
V2luZG93UHJveHkgc2VsZjsKLSAgICBbUHV0Rm9yd2FyZHM9aHJlZiwgTGVnYWN5VW5mb3JnZWFi
bGVdIHJlYWRvbmx5IGF0dHJpYnV0ZSBMb2NhdGlvbj8gbG9jYXRpb247IC8vIEZJWE1FOiBTaG91
bGQgbm90IGJlIG51bGxhYmxlLgorICAgIFtQdXRGb3J3YXJkcz1ocmVmLCBMZWdhY3lVbmZvcmdl
YWJsZSwgRm9yd2FyZERlY2xhcmVJbkhlYWRlcl0gcmVhZG9ubHkgYXR0cmlidXRlIExvY2F0aW9u
PyBsb2NhdGlvbjsgLy8gRklYTUU6IFNob3VsZCBub3QgYmUgbnVsbGFibGUuCiAgICAgW0NhbGxX
aXRoPUluY3VtYmVudERvY3VtZW50LCBGb3J3YXJkRGVjbGFyZUluSGVhZGVyXSB1bmRlZmluZWQg
Y2xvc2UoKTsKICAgICBbRm9yd2FyZERlY2xhcmVJbkhlYWRlcl0gcmVhZG9ubHkgYXR0cmlidXRl
IGJvb2xlYW4gY2xvc2VkOwogICAgIFtDYWxsV2l0aD1JbmN1bWJlbnRXaW5kb3csIEZvcndhcmRE
ZWNsYXJlSW5IZWFkZXJdIHVuZGVmaW5lZCBmb2N1cygpOwpJbmRleDogU291cmNlL1dlYktpdC9D
aGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9DaGFuZ2VMb2cJKHJldmlzaW9u
IDI3MTk3NSkKKysrIFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDMgKzEsMTQgQEAKKzIwMjEtMDEtMjggIEFsZXhleSBTaHZheWthICA8c2h2YWlrYWxlc2hAZ21h
aWwuY29tPgorCisgICAgICAgIEludHJvZHVjZSBPdmVycmlkZXNQdXRbQnlJbmRleF0gdHlwZSBp
bmZvIGZsYWdzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yMTc5MTYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9KU05QT2JqZWN0LmNwcDoKKyAgICAgICAg
KFdlYktpdDo6SlNOUE9iamVjdDo6cHV0KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1BsdWdpbnMv
TmV0c2NhcGUvSlNOUE9iamVjdC5oOgorCiAyMDIxLTAxLTI3ICBLYXRlIENoZW5leSAgPGthdGhl
cmluZV9jaGVuZXlAYXBwbGUuY29tPgogCiAgICAgICAgIFdLV2ViVmlldyBjbG9zZUFsbE1lZGlh
UHJlc2VudGF0aW9ucyBBUEkgZG9lcyBub3QgaGF2ZSBhIGNvbXBsZXRpb24gaGFuZGxlcgpJbmRl
eDogU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvSlNOUE9iamVjdC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2Nh
cGUvSlNOUE9iamVjdC5jcHAJKHJldmlzaW9uIDI3MTk3NSkKKysrIFNvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL0pTTlBPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zMjksMTEgKzMyOSwxNCBAQCBib29sIEpTTlBPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdChK
U09iCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIEpTTlBPYmplY3Q6OnB1dChKU0NlbGwq
IGNlbGwsIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWUg
cHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmKQorYm9vbCBKU05Q
T2JqZWN0OjpwdXQoSlNDZWxsKiBjZWxsLCBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9i
amVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgUHV0UHJvcGVy
dHlTbG90JiBzbG90KQogewogICAgIFZNJiB2bSA9IGxleGljYWxHbG9iYWxPYmplY3QtPnZtKCk7
CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCisgICAgaWYgKFVO
TElLRUxZKGNlbGwgIT0gc2xvdC50aGlzVmFsdWUoKSkpCisgICAgICAgIFJFTEVBU0VfQU5EX1JF
VFVSTihzY29wZSwgYXNPYmplY3QoY2VsbCktPnB1dElubGluZVNsb3cobGV4aWNhbEdsb2JhbE9i
amVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCwgSlNPYmplY3Q6OlB1dElubGluZVNsb3dN
b2RlOjpJZ25vcmVPd25TcGVjaWFsUHJvcGVydGllcykpOworCiAgICAgSlNOUE9iamVjdCogdGhp
c09iamVjdCA9IEpTQzo6anNDYXN0PEpTTlBPYmplY3QqPihjZWxsKTsKICAgICBBU1NFUlRfR0Nf
T0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAgICAgaWYgKCF0aGlzT2JqZWN0
LT5tX25wT2JqZWN0KSB7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9O
ZXRzY2FwZS9KU05QT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1BsdWdpbnMvTmV0c2NhcGUvSlNOUE9iamVjdC5oCShyZXZpc2lvbiAyNzE5NzUpCisrKyBT
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9KU05QT2JqZWN0LmgJKHdv
cmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0LDcgQEAgY2xhc3MgTlBSdW50aW1lT2JqZWN0TWFwOwog
Y2xhc3MgSlNOUE9iamVjdCBmaW5hbCA6IHB1YmxpYyBKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0
IHsKIHB1YmxpYzoKICAgICB1c2luZyBCYXNlID0gSlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdDsK
LSAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3Ry
dWN0dXJlRmxhZ3MgfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEpTQzo6T3Zl
cnJpZGVzR2V0T3duUHJvcGVydHlOYW1lcyB8IEpTQzo6T3ZlcnJpZGVzR2V0Q2FsbERhdGEgfCBK
U0M6OkdldE93blByb3BlcnR5U2xvdE1heUJlV3JvbmdBYm91dERvbnRFbnVtOworICAgIHN0YXRp
YyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFn
cyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgSlNDOjpPdmVycmlkZXNHZXRP
d25Qcm9wZXJ0eU5hbWVzIHwgSlNDOjpPdmVycmlkZXNHZXRDYWxsRGF0YSB8IEpTQzo6T3ZlcnJp
ZGVzUHV0IHwgSlNDOjpHZXRPd25Qcm9wZXJ0eVNsb3RNYXlCZVdyb25nQWJvdXREb250RW51bTsK
IAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBKU0M6OlN1YnNwYWNlQWNjZXNzPgog
ICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKSW5k
ZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFu
Z2VMb2cJKHJldmlzaW9uIDI3MTk3NSkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDIxIEBACisyMDIxLTAxLTI4ICBBbGV4ZXkgU2h2YXlrYSAgPHNo
dmFpa2FsZXNoQGdtYWlsLmNvbT4KKworICAgICAgICBJbnRyb2R1Y2UgT3ZlcnJpZGVzUHV0W0J5
SW5kZXhdIHR5cGUgaW5mbyBmbGFncworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjE3OTE2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgKiBmYXN0L2RvbS9XaW5kb3cvZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9y
LW90aGVyLXdpbmRvdy1leHBlY3RlZC50eHQ6CisgICAgICAgICogZmFzdC9kb20vV2luZG93L2dl
dE93blByb3BlcnR5RGVzY3JpcHRvci1vdGhlci13aW5kb3cuaHRtbDoKKyAgICAgICAgKiBmYXN0
L2RvbS9odG1sY29sbGVjdGlvbi1nZXRvd25wcm9wZXJ0eS1leHBlY3RlZC50eHQ6CisgICAgICAg
ICogZmFzdC9kb20vaHRtbGNvbGxlY3Rpb24tZ2V0b3ducHJvcGVydHkuaHRtbDoKKyAgICAgICAg
KiBodHRwL3Rlc3RzL3NlY3VyaXR5L2Nyb3NzLWZyYW1lLWFjY2Vzcy1vYmplY3QtZ2V0UHJvdG90
eXBlT2YtaW4tcHV0LWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBodHRwL3Rlc3RzL3NlY3VyaXR5
L2Nyb3NzLWZyYW1lLWFjY2Vzcy1vYmplY3QtZ2V0UHJvdG90eXBlT2YtaW4tcHV0Lmh0bWw6Cisg
ICAgICAgICoganMvZG9tL3JlZmxlY3Qtc2V0LW9udG8tZG9tLWV4cGVjdGVkLnR4dDoKKyAgICAg
ICAgKiBqcy9kb20vc2NyaXB0LXRlc3RzL3JlZmxlY3Qtc2V0LW9udG8tZG9tLmpzOgorICAgICAg
ICAqIGpzL2luc3RhbmNlLXByb3BlcnR5LWdldHRlci1vdGhlci1pbnN0YW5jZS1leHBlY3RlZC50
eHQ6CisgICAgICAgICoganMvaW5zdGFuY2UtcHJvcGVydHktZ2V0dGVyLW90aGVyLWluc3RhbmNl
Lmh0bWw6CisKIDIwMjEtMDEtMjcgIE5pa29sYXMgWmltbWVybWFubiAgPG56aW1tZXJtYW5uQGln
YWxpYS5jb20+CiAKICAgICAgICAgUkVHUkVTU0lPTiAocjI0MzI2Nik6IFNWR1N0b3BFbGVtZW50
IGRvZXMgbm90IHJlYWN0IHVwb24gJ29mZnNldCcgYXR0cmlidXRlIGNoYW5nZXMKSW5kZXg6IExh
eW91dFRlc3RzL2Zhc3QvZG9tL2h0bWxjb2xsZWN0aW9uLWdldG93bnByb3BlcnR5LWV4cGVjdGVk
LnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2RvbS9odG1sY29sbGVjdGlvbi1n
ZXRvd25wcm9wZXJ0eS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDI3MTk3NSkKKysrIExheW91dFRl
c3RzL2Zhc3QvZG9tL2h0bWxjb2xsZWN0aW9uLWdldG93bnByb3BlcnR5LWV4cGVjdGVkLnR4dAko
d29ya2luZyBjb3B5KQpAQCAtMTQsNyArMTQsNyBAQCBQQVNTIGh0bWxDb2xsZWN0aW9uLmxlbmd0
aCBpcyA0CiAqIE5hbWVkIHByb3BlcnRpZXMgc2hvdWxkIG5vdCBtYXNrIG93biBwcm9wZXJ0aWVz
IG9uIEhUTUxDb2xsZWN0aW9uCiBodG1sQ29sbGVjdGlvbi5mb28gPSAnZm9vJwogUEFTUyBodG1s
Q29sbGVjdGlvbi5uYW1lZEl0ZW0oJ2ZvbycpIGlzIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdm
b29QJykKLVBBU1MgaHRtbENvbGxlY3Rpb24uZm9vIGlzICJmb28iCitQQVNTIGh0bWxDb2xsZWN0
aW9uLmZvbyBpcyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZm9vUCcpCiAKICogTmFtZWQgcHJv
cGVydGllcyBzaG91bGQgbm90IG1hc2sgaW5kZXhlZCBwcm9wZXJ0aWVzCiBQQVNTIGh0bWxDb2xs
ZWN0aW9uLml0ZW0oMCkgaXMgdGVzdERpdi5maXJzdEVsZW1lbnRDaGlsZApJbmRleDogTGF5b3V0
VGVzdHMvZmFzdC9kb20vaHRtbGNvbGxlY3Rpb24tZ2V0b3ducHJvcGVydHkuaHRtbAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2RvbS9odG1sY29sbGVjdGlvbi1nZXRvd25wcm9wZXJ0
eS5odG1sCShyZXZpc2lvbiAyNzE5NzUpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2RvbS9odG1sY29s
bGVjdGlvbi1nZXRvd25wcm9wZXJ0eS5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsyNyw3
IEBAIGRlYnVnKCIiKTsKIGRlYnVnKCIqIE5hbWVkIHByb3BlcnRpZXMgc2hvdWxkIG5vdCBtYXNr
IG93biBwcm9wZXJ0aWVzIG9uIEhUTUxDb2xsZWN0aW9uIik7CiBldmFsQW5kTG9nKCJodG1sQ29s
bGVjdGlvbi5mb28gPSAnZm9vJyIpOwogc2hvdWxkQmUoImh0bWxDb2xsZWN0aW9uLm5hbWVkSXRl
bSgnZm9vJykiLCAiZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2Zvb1AnKSIpCi1zaG91bGRCZUVx
dWFsVG9TdHJpbmcoImh0bWxDb2xsZWN0aW9uLmZvbyIsICJmb28iKTsKK3Nob3VsZEJlKCJodG1s
Q29sbGVjdGlvbi5mb28iLCAiZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2Zvb1AnKSIpOwogCiBk
ZWJ1ZygiIik7CiBkZWJ1ZygiKiBOYW1lZCBwcm9wZXJ0aWVzIHNob3VsZCBub3QgbWFzayBpbmRl
eGVkIHByb3BlcnRpZXMiKTsKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZG9tL1dpbmRvdy9nZXRP
d25Qcm9wZXJ0eURlc2NyaXB0b3Itb3RoZXItd2luZG93LWV4cGVjdGVkLnR4dAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2RvbS9XaW5kb3cvZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9y
LW90aGVyLXdpbmRvdy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDI3MTk3NSkKKysrIExheW91dFRl
c3RzL2Zhc3QvZG9tL1dpbmRvdy9nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Itb3RoZXItd2luZG93
LWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtNSwxMiArNSwxMiBAQCBPbiBzdWNjZXNz
LCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBCiAKIGRlc2NyaXB0b3IgPSBPYmplY3QuZ2V0
T3duUHJvcGVydHlEZXNjcmlwdG9yKG90aGVyV2luZG93LCAnbG9jYXRpb24nKQogUEFTUyBkZXNj
cmlwdG9yIGlzIG5vdCB1bmRlZmluZWQKLVBBU1MgZGVzY3JpcHRvci5nZXQgaXMgYW4gaW5zdGFu
Y2Ugb2YgRnVuY3Rpb24KLVBBU1MgZGVzY3JpcHRvci5zZXQgaXMgYW4gaW5zdGFuY2Ugb2YgRnVu
Y3Rpb24KK1BBU1MgZGVzY3JpcHRvci5nZXQgaW5zdGFuY2VvZiBvdGhlcldpbmRvdy5GdW5jdGlv
biBpcyB0cnVlCitQQVNTIGRlc2NyaXB0b3Iuc2V0IGluc3RhbmNlb2Ygb3RoZXJXaW5kb3cuRnVu
Y3Rpb24gaXMgdHJ1ZQogUEFTUyBkZXNjcmlwdG9yLmVudW1lcmFibGUgaXMgdHJ1ZQogUEFTUyBk
ZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSBpcyBmYWxzZQogUEFTUyBkZXNjcmlwdG9yLmdldC5jYWxs
KG90aGVyV2luZG93KS50b1N0cmluZygpIGlzICJhYm91dDpibGFuayIKLVBBU1MgZGVzY3JpcHRv
ci5nZXQuY2FsbCgpIGlzIGRlc2NyaXB0b3IuZ2V0LmNhbGwod2luZG93KQorUEFTUyBkZXNjcmlw
dG9yLmdldC5jYWxsKCkgaXMgZGVzY3JpcHRvci5nZXQuY2FsbChvdGhlcldpbmRvdykKIFBBU1Mg
c3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKIAogVEVTVCBDT01QTEVURQpJbmRleDogTGF5b3V0
VGVzdHMvZmFzdC9kb20vV2luZG93L2dldE93blByb3BlcnR5RGVzY3JpcHRvci1vdGhlci13aW5k
b3cuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2RvbS9XaW5kb3cvZ2V0T3du
UHJvcGVydHlEZXNjcmlwdG9yLW90aGVyLXdpbmRvdy5odG1sCShyZXZpc2lvbiAyNzE5NzUpCisr
KyBMYXlvdXRUZXN0cy9mYXN0L2RvbS9XaW5kb3cvZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLW90
aGVyLXdpbmRvdy5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0xMCwxMiArMTAsMTIgQEAgb3RoZXJX
aW5kb3cgPSBmcmFtZXNbMF07CiAKIGV2YWxBbmRMb2coImRlc2NyaXB0b3IgPSBPYmplY3QuZ2V0
T3duUHJvcGVydHlEZXNjcmlwdG9yKG90aGVyV2luZG93LCAnbG9jYXRpb24nKSIpOwogc2hvdWxk
Tm90QmUoImRlc2NyaXB0b3IiLCAidW5kZWZpbmVkIik7Ci1zaG91bGRCZVR5cGUoImRlc2NyaXB0
b3IuZ2V0IiwgIkZ1bmN0aW9uIik7Ci1zaG91bGRCZVR5cGUoImRlc2NyaXB0b3Iuc2V0IiwgIkZ1
bmN0aW9uIik7CitzaG91bGRCZVRydWUoImRlc2NyaXB0b3IuZ2V0IGluc3RhbmNlb2Ygb3RoZXJX
aW5kb3cuRnVuY3Rpb24iKTsKK3Nob3VsZEJlVHJ1ZSgiZGVzY3JpcHRvci5zZXQgaW5zdGFuY2Vv
ZiBvdGhlcldpbmRvdy5GdW5jdGlvbiIpOwogc2hvdWxkQmVUcnVlKCJkZXNjcmlwdG9yLmVudW1l
cmFibGUiKTsKIHNob3VsZEJlRmFsc2UoImRlc2NyaXB0b3IuY29uZmlndXJhYmxlIik7CiBzaG91
bGRCZUVxdWFsVG9TdHJpbmcoImRlc2NyaXB0b3IuZ2V0LmNhbGwob3RoZXJXaW5kb3cpLnRvU3Ry
aW5nKCkiLCAiYWJvdXQ6YmxhbmsiKTsKLXNob3VsZEJlKCJkZXNjcmlwdG9yLmdldC5jYWxsKCki
LCAiZGVzY3JpcHRvci5nZXQuY2FsbCh3aW5kb3cpIik7CitzaG91bGRCZSgiZGVzY3JpcHRvci5n
ZXQuY2FsbCgpIiwgImRlc2NyaXB0b3IuZ2V0LmNhbGwob3RoZXJXaW5kb3cpIik7CiA8L3Njcmlw
dD4KIDxzY3JpcHQgc3JjPSIuLi8uLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3Nj
cmlwdD4KIDwvYm9keT4KSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkvY3Jv
c3MtZnJhbWUtYWNjZXNzLW9iamVjdC1nZXRQcm90b3R5cGVPZi1pbi1wdXQtZXhwZWN0ZWQudHh0
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkvY3Jvc3MtZnJh
bWUtYWNjZXNzLW9iamVjdC1nZXRQcm90b3R5cGVPZi1pbi1wdXQtZXhwZWN0ZWQudHh0CShyZXZp
c2lvbiAyNzE5NzUpCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L2Nyb3NzLWZy
YW1lLWFjY2Vzcy1vYmplY3QtZ2V0UHJvdG90eXBlT2YtaW4tcHV0LWV4cGVjdGVkLnR4dAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDcgQEAKIFRoaXMgdGVzdHMgdGhhdCB5b3UgY2FuJ3QgZ2V0
IHRoZSBwcm90b3R5cGUgb2YgdGhlIHdpbmRvdyBkdXJpbmcgW1tQdXRdXSBvcGVyYXRpb24uCiAK
K1BBU1MgYXJyYXkuY29jb2EgPSBjb2NvYVZhbHVlIHRocmV3IGV4Y2VwdGlvbiBTZWN1cml0eUVy
cm9yOiBCbG9ja2VkIGEgZnJhbWUgd2l0aCBvcmlnaW4gImh0dHA6Ly8xMjcuMC4wLjE6ODAwMCIg
ZnJvbSBhY2Nlc3NpbmcgYSBjcm9zcy1vcmlnaW4gZnJhbWUuIFByb3RvY29scywgZG9tYWlucywg
YW5kIHBvcnRzIG11c3QgbWF0Y2guLgorUEFTUyAnc3RyJy5jb2NvYSA9IGNvY29hVmFsdWUgdGhy
ZXcgZXhjZXB0aW9uIFNlY3VyaXR5RXJyb3I6IEJsb2NrZWQgYSBmcmFtZSB3aXRoIG9yaWdpbiAi
aHR0cDovLzEyNy4wLjAuMTo4MDAwIiBmcm9tIGFjY2Vzc2luZyBhIGNyb3NzLW9yaWdpbiBmcmFt
ZS4gUHJvdG9jb2xzLCBkb21haW5zLCBhbmQgcG9ydHMgbXVzdCBtYXRjaC4uCiBQQVNTOiBzdWNj
ZXNzZnVsbHlQYXJzZWQgc2hvdWxkIGJlICd0cnVlJyBhbmQgaXMuCiAKIFRFU1QgQ09NUExFVEUK
SW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkvY3Jvc3MtZnJhbWUtYWNjZXNz
LW9iamVjdC1nZXRQcm90b3R5cGVPZi1pbi1wdXQuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L2Nyb3NzLWZyYW1lLWFjY2Vzcy1vYmplY3QtZ2V0UHJv
dG90eXBlT2YtaW4tcHV0Lmh0bWwJKHJldmlzaW9uIDI3MTk3NSkKKysrIExheW91dFRlc3RzL2h0
dHAvdGVzdHMvc2VjdXJpdHkvY3Jvc3MtZnJhbWUtYWNjZXNzLW9iamVjdC1nZXRQcm90b3R5cGVP
Zi1pbi1wdXQuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMTUsNyArMTUsNyBAQAogICAgICAgICBk
b1Rlc3QgPSBmdW5jdGlvbigpCiAgICAgICAgIHsKICAgICAgICAgICAgIHRhcmdldFdpbmRvdyA9
IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0YXJnZXQiKS5jb250ZW50V2luZG93OwotICAgICAg
ICAgICAgdmFyIGFycmF5ID0gW107CisgICAgICAgICAgICBhcnJheSA9IFtdOwogICAgICAgICAg
ICAgYXJyYXkuX19wcm90b19fLl9fcHJvdG9fXyA9IHRhcmdldFdpbmRvdzsKICAgICAgICAgICAg
IGFycmF5WzBdID0gMTEuMTE7CiAgICAgICAgICAgICBhcnJheVsyXSA9IDIyLjIyOwpAQCAtMjQs
MTEgKzI0LDE1IEBACiAgICAgICAgICAgICAgICAgICAgIHRlc3RGYWlsZWQoInRvU3RyaW5nIGlz
IGNhbGxlZCBieSAxMDEwMTAxMCBzZXR0ZXIiKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICB9OwotICAgICAgICAgICAgYXJyYXlbImNvY29hIl0gPSB7CisgICAgICAgICAgICBjb2Nv
YVZhbHVlID0gewogICAgICAgICAgICAgICAgIHRvU3RyaW5nKCkgewogICAgICAgICAgICAgICAg
ICAgICB0ZXN0RmFpbGVkKCJ0b1N0cmluZyBpcyBjYWxsZWQgYnkgY29jb2Egc2V0dGVyIik7CiAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIHNob3VsZFRocm93
RXJyb3JOYW1lKCJhcnJheS5jb2NvYSA9IGNvY29hVmFsdWUiLCAiU2VjdXJpdHlFcnJvciIpOwor
CisgICAgICAgICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YoU3RyaW5nLnByb3RvdHlwZSwgdGFy
Z2V0V2luZG93KTsKKyAgICAgICAgICAgIHNob3VsZFRocm93RXJyb3JOYW1lKCInc3RyJy5jb2Nv
YSA9IGNvY29hVmFsdWUiLCAiU2VjdXJpdHlFcnJvciIpOwogICAgICAgICAgICAgZmluaXNoSlNU
ZXN0KCk7CiAgICAgICAgIH0KICAgICA8L3NjcmlwdD4KSW5kZXg6IExheW91dFRlc3RzL2ltcG9y
dGVkL3czYy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNj
L0NoYW5nZUxvZwkocmV2aXNpb24gMjcxOTc1KQorKysgTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNj
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIwIEBACisyMDIxLTAxLTI4ICBB
bGV4ZXkgU2h2YXlrYSAgPHNodmFpa2FsZXNoQGdtYWlsLmNvbT4KKworICAgICAgICBJbnRyb2R1
Y2UgT3ZlcnJpZGVzUHV0W0J5SW5kZXhdIHR5cGUgaW5mbyBmbGFncworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE3OTE2CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvZG9t
L2NvbGxlY3Rpb25zL0hUTUxDb2xsZWN0aW9uLWFzLXByb3RvdHlwZS1leHBlY3RlZC50eHQ6Cisg
ICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL2RvbS9jb2xsZWN0aW9ucy9IVE1MQ29sbGVjdGlv
bi1vd24tcHJvcHMtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9k
b20vY29sbGVjdGlvbnMvSFRNTENvbGxlY3Rpb24tc3VwcG9ydGVkLXByb3BlcnR5LW5hbWVzLWV4
cGVjdGVkLnR4dDoKKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvZG9tL2V2ZW50cy9FdmVu
dC1pc1RydXN0ZWQuYW55LWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVz
dHMvZG9tL2V2ZW50cy9FdmVudC1pc1RydXN0ZWQuYW55Lndvcmtlci1leHBlY3RlZC50eHQ6Cisg
ICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL2h0bWwvYnJvd3NlcnMvaGlzdG9yeS90aGUtbG9j
YXRpb24taW50ZXJmYWNlL2RvY3VtZW50X2xvY2F0aW9uLWV4cGVjdGVkLnR4dDoKKyAgICAgICAg
KiB3ZWItcGxhdGZvcm0tdGVzdHMvaHRtbC9icm93c2Vycy93aW5kb3dzL2F1eGlsaWFyeS1icm93
c2luZy1jb250ZXh0cy9vcGVuZXItc2V0dGVyLndpbmRvdy1leHBlY3RlZC50eHQ6CisgICAgICAg
ICogd2ViLXBsYXRmb3JtLXRlc3RzL2h0bWwvYnJvd3NlcnMvd2luZG93cy9lbWJlZGRlZC1vcGVu
ZXItZXhwZWN0ZWQudHh0OgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9odG1sL3NlbWFu
dGljcy9mb3Jtcy90aGUtZm9ybS1lbGVtZW50L2Zvcm0tbmFtZWRpdGVtLWV4cGVjdGVkLnR4dDoK
KwogMjAyMS0wMS0yNyAgTWFudWVsIFJlZ28gQ2FzYXNub3ZhcyAgPHJlZ29AaWdhbGlhLmNvbT4K
IAogICAgICAgICBVcHN0cmVhbSB0byBXUFQgU2hhZG93IERPTSB0ZXN0cyByZWxhdGVkIHRvIDpm
b2N1cyBwc2V1ZG8tY2xhc3MKSW5kZXg6IExheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxh
dGZvcm0tdGVzdHMvZG9tL2NvbGxlY3Rpb25zL0hUTUxDb2xsZWN0aW9uLWFzLXByb3RvdHlwZS1l
eHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1w
bGF0Zm9ybS10ZXN0cy9kb20vY29sbGVjdGlvbnMvSFRNTENvbGxlY3Rpb24tYXMtcHJvdG90eXBl
LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMjcxOTc1KQorKysgTGF5b3V0VGVzdHMvaW1wb3J0ZWQv
dzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9kb20vY29sbGVjdGlvbnMvSFRNTENvbGxlY3Rpb24tYXMt
cHJvdG90eXBlLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMSw0ICsxLDQgQEAKIAog
UEFTUyBIVE1MQ29sbGVjdGlvbiBhcyBhIHByb3RvdHlwZSBzaG91bGQgbm90IGFsbG93IGdldHRp
bmcgLmxlbmd0aCBvbiB0aGUgYmFzZSBvYmplY3QKLVBBU1MgSFRNTENvbGxlY3Rpb24gYXMgYSBw
cm90b3R5cGUgYW5kIHNldHRpbmcgb3duIHByb3BlcnRpZXMKK0ZBSUwgSFRNTENvbGxlY3Rpb24g
YXMgYSBwcm90b3R5cGUgYW5kIHNldHRpbmcgb3duIHByb3BlcnRpZXMgYXNzZXJ0X2VxdWFsczog
ZXhwZWN0ZWQgKHN0cmluZykgImZvbyIgYnV0IGdvdCAob2JqZWN0KSBFbGVtZW50IG5vZGUgPHAg
aWQ9Im5hbWVkIj48L3A+CiAKSW5kZXg6IExheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxh
dGZvcm0tdGVzdHMvZG9tL2NvbGxlY3Rpb25zL0hUTUxDb2xsZWN0aW9uLW93bi1wcm9wcy1leHBl
Y3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0
Zm9ybS10ZXN0cy9kb20vY29sbGVjdGlvbnMvSFRNTENvbGxlY3Rpb24tb3duLXByb3BzLWV4cGVj
dGVkLnR4dAkocmV2aXNpb24gMjcxOTc1KQorKysgTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dl
Yi1wbGF0Zm9ybS10ZXN0cy9kb20vY29sbGVjdGlvbnMvSFRNTENvbGxlY3Rpb24tb3duLXByb3Bz
LWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMSw4ICsxLDYgQEAKIAotRkFJTCBTZXR0
aW5nIG5vbi1hcnJheSBpbmRleCB3aGlsZSBuYW1lZCBwcm9wZXJ0eSBleGlzdHMgKGxvb3NlKSBh
c3NlcnRfZXF1YWxzOiBleHBlY3RlZCAob2JqZWN0KSBFbGVtZW50IG5vZGUgPGEgaWQ9Im5hbWVk
Ij48L2E+IGJ1dCBnb3QgKHN0cmluZykgImZvbyIKLUZBSUwgU2V0dGluZyBub24tYXJyYXkgaW5k
ZXggd2hpbGUgbmFtZWQgcHJvcGVydHkgZXhpc3RzIChzdHJpY3QpIGFzc2VydF90aHJvd3NfanM6
IGZ1bmN0aW9uICJmdW5jdGlvbiAoKSB7Ci0gICAgY1tuYW1lXSA9ICJmb28iOwotICB9IiBkaWQg
bm90IHRocm93CitQQVNTIFNldHRpbmcgbm9uLWFycmF5IGluZGV4IHdoaWxlIG5hbWVkIHByb3Bl
cnR5IGV4aXN0cyAobG9vc2UpCitQQVNTIFNldHRpbmcgbm9uLWFycmF5IGluZGV4IHdoaWxlIG5h
bWVkIHByb3BlcnR5IGV4aXN0cyAoc3RyaWN0KQogUEFTUyBTZXR0aW5nIG5vbi1hcnJheSBpbmRl
eCB3aGlsZSBuYW1lZCBwcm9wZXJ0eSBkb2Vzbid0IGV4aXN0IChsb29zZSkKIFBBU1MgU2V0dGlu
ZyBub24tYXJyYXkgaW5kZXggd2hpbGUgbmFtZWQgcHJvcGVydHkgZG9lc24ndCBleGlzdCAoc3Ry
aWN0KQogUEFTUyBTZXR0aW5nIGFycmF5IGluZGV4IHdoaWxlIGluZGV4ZWQgcHJvcGVydHkgZXhp
c3RzIChsb29zZSkKSW5kZXg6IExheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0t
dGVzdHMvZG9tL2NvbGxlY3Rpb25zL0hUTUxDb2xsZWN0aW9uLXN1cHBvcnRlZC1wcm9wZXJ0eS1u
YW1lcy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNj
L3dlYi1wbGF0Zm9ybS10ZXN0cy9kb20vY29sbGVjdGlvbnMvSFRNTENvbGxlY3Rpb24tc3VwcG9y
dGVkLXByb3BlcnR5LW5hbWVzLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMjcxOTc1KQorKysgTGF5
b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9kb20vY29sbGVjdGlvbnMv
SFRNTENvbGxlY3Rpb24tc3VwcG9ydGVkLXByb3BlcnR5LW5hbWVzLWV4cGVjdGVkLnR4dAkod29y
a2luZyBjb3B5KQpAQCAtMiw3ICsyLDkgQEAKIFBBU1MgT2JqZWN0LmdldE93blByb3BlcnR5TmFt
ZXMgb24gSFRNTENvbGxlY3Rpb24KIFBBU1MgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMgb24g
SFRNTENvbGxlY3Rpb24gd2l0aCBub24tSFRNTCBuYW1lc3BhY2UKIFBBU1MgT2JqZWN0LmdldE93
blByb3BlcnR5TmFtZXMgb24gSFRNTENvbGxlY3Rpb24gd2l0aCBleHBhbmRvIG9iamVjdAotRkFJ
TCBUcnlpbmcgdG8gc2V0IGFuIGV4cGFuZG8gdGhhdCB3b3VsZCBzaGFkb3cgYW4gYWxyZWFkeS1l
eGlzdGluZyBuYW1lZCBwcm9wZXJ0eSBhc3NlcnRfZXF1YWxzOiBleHBlY3RlZCAob2JqZWN0KSBF
bGVtZW50IG5vZGUgPHNwYW4gaWQ9InNvbWUtaWQiPjwvc3Bhbj4gYnV0IGdvdCAobnVtYmVyKSA1
CitGQUlMIFRyeWluZyB0byBzZXQgYW4gZXhwYW5kbyB0aGF0IHdvdWxkIHNoYWRvdyBhbiBhbHJl
YWR5LWV4aXN0aW5nIG5hbWVkIHByb3BlcnR5IGFzc2VydF90aHJvd3NfanM6IGZ1bmN0aW9uICJm
dW5jdGlvbiAoKSB7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGVsZW1lbnRzLCAic29tZS1p
ZCIsIHsgdmFsdWU6IDUgfSk7CisgIH0iIGRpZCBub3QgdGhyb3cKIFBBU1MgVHJ5aW5nIHRvIHNl
dCBhbiBleHBhbmRvIHRoYXQgc2hhZG93cyBhIG5hbWVkIHByb3BlcnR5IHRoYXQgZ2V0cyBhZGRl
ZCBsYXRlcgogUEFTUyBUcnlpbmcgdG8gc2V0IGEgbm9uLWNvbmZpZ3VyYWJsZSBleHBhbmRvIHRo
YXQgc2hhZG93cyBhIG5hbWVkIHByb3BlcnR5IHRoYXQgZ2V0cyBhZGRlZCBsYXRlcgogCkluZGV4
OiBMYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2RvbS9ldmVudHMv
RXZlbnQtaXNUcnVzdGVkLmFueS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9kb20vZXZlbnRzL0V2ZW50LWlzVHJ1
c3RlZC5hbnktZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAyNzE5NzUpCisrKyBMYXlvdXRUZXN0cy9p
bXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2RvbS9ldmVudHMvRXZlbnQtaXNUcnVzdGVk
LmFueS1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSwzIEBACiAKLUZBSUwg
RXZlbnQtaXNUcnVzdGVkIGFzc2VydF9lcXVhbHM6IGV4cGVjdGVkIGZ1bmN0aW9uICJmdW5jdGlv
biBpc1RydXN0ZWQoKSB7Ci0gICAgW25hdGl2ZSBjb2RlXQotfSIgYnV0IGdvdCBmdW5jdGlvbiAi
ZnVuY3Rpb24gaXNUcnVzdGVkKCkgewotICAgIFtuYXRpdmUgY29kZV0KLX0iCitQQVNTIEV2ZW50
LWlzVHJ1c3RlZAogCkluZGV4OiBMYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3Jt
LXRlc3RzL2RvbS9ldmVudHMvRXZlbnQtaXNUcnVzdGVkLmFueS53b3JrZXItZXhwZWN0ZWQudHh0
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVz
dHMvZG9tL2V2ZW50cy9FdmVudC1pc1RydXN0ZWQuYW55Lndvcmtlci1leHBlY3RlZC50eHQJKHJl
dmlzaW9uIDI3MTk3NSkKKysrIExheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0t
dGVzdHMvZG9tL2V2ZW50cy9FdmVudC1pc1RydXN0ZWQuYW55Lndvcmtlci1leHBlY3RlZC50eHQJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSwzIEBACiAKLUZBSUwgRXZlbnQtaXNUcnVzdGVkIGFz
c2VydF9lcXVhbHM6IGV4cGVjdGVkIGZ1bmN0aW9uICJmdW5jdGlvbiBpc1RydXN0ZWQoKSB7Ci0g
ICAgW25hdGl2ZSBjb2RlXQotfSIgYnV0IGdvdCBmdW5jdGlvbiAiZnVuY3Rpb24gaXNUcnVzdGVk
KCkgewotICAgIFtuYXRpdmUgY29kZV0KLX0iCitQQVNTIEV2ZW50LWlzVHJ1c3RlZAogCkluZGV4
OiBMYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2h0bWwvYnJvd3Nl
cnMvaGlzdG9yeS90aGUtbG9jYXRpb24taW50ZXJmYWNlL2RvY3VtZW50X2xvY2F0aW9uLWV4cGVj
dGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRm
b3JtLXRlc3RzL2h0bWwvYnJvd3NlcnMvaGlzdG9yeS90aGUtbG9jYXRpb24taW50ZXJmYWNlL2Rv
Y3VtZW50X2xvY2F0aW9uLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMjcxOTc1KQorKysgTGF5b3V0
VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9odG1sL2Jyb3dzZXJzL2hpc3Rv
cnkvdGhlLWxvY2F0aW9uLWludGVyZmFjZS9kb2N1bWVudF9sb2NhdGlvbi1leHBlY3RlZC50eHQJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMTQgKzEsNiBAQAogCiBQQVNTIGRvY3VtZW50IG5vdCBpbiBh
IGJyb3dzaW5nIGNvbnRleHQKIFBBU1MgZG9jdW1lbnQubG9jYXRpb24gZXF1YWxzIHdpbmRvdy5s
b2NhdGlvbgotRkFJTCBBdHRyaWJ1dGUgZ2V0dGVyIGRlZHVwbGljYXRpb24gYXNzZXJ0X2VxdWFs
czogZXhwZWN0ZWQgZnVuY3Rpb24gImZ1bmN0aW9uIGxvY2F0aW9uKCkgewotICAgIFtuYXRpdmUg
Y29kZV0KLX0iIGJ1dCBnb3QgZnVuY3Rpb24gImZ1bmN0aW9uIGxvY2F0aW9uKCkgewotICAgIFtu
YXRpdmUgY29kZV0KLX0iCi1GQUlMIEF0dHJpYnV0ZSBzZXR0ZXIgZGVkdXBsaWNhdGlvbiBhc3Nl
cnRfZXF1YWxzOiBleHBlY3RlZCBmdW5jdGlvbiAiZnVuY3Rpb24gbG9jYXRpb24oKSB7Ci0gICAg
W25hdGl2ZSBjb2RlXQotfSIgYnV0IGdvdCBmdW5jdGlvbiAiZnVuY3Rpb24gbG9jYXRpb24oKSB7
Ci0gICAgW25hdGl2ZSBjb2RlXQotfSIKK1BBU1MgQXR0cmlidXRlIGdldHRlciBkZWR1cGxpY2F0
aW9uCitQQVNTIEF0dHJpYnV0ZSBzZXR0ZXIgZGVkdXBsaWNhdGlvbgogCkluZGV4OiBMYXlvdXRU
ZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2h0bWwvYnJvd3NlcnMvd2luZG93
cy9lbWJlZGRlZC1vcGVuZXItZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvaHRtbC9icm93c2Vycy93aW5kb3dzL2Vt
YmVkZGVkLW9wZW5lci1leHBlY3RlZC50eHQJKHJldmlzaW9uIDI3MTk3NSkKKysrIExheW91dFRl
c3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvaHRtbC9icm93c2Vycy93aW5kb3dz
L2VtYmVkZGVkLW9wZW5lci1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwz
IEBACiAKLUZBSUwgb3BlbmVyIGFuZCBlbWJlZGRlZCBkb2N1bWVudHM7IHVzaW5nIHdpbmRvdy5v
cGVuKCkgYXNzZXJ0X2VxdWFsczogb3BlbmVyIGJlZm9yZSBzZXR0aW5nIGl0IHRvIG51bGwgdmlh
IGRpcmVjdGx5IGludm9raW5nIHRoZSBnZXR0ZXIgZXhwZWN0ZWQgb2JqZWN0ICJbb2JqZWN0IFdp
bmRvd10iIGJ1dCBnb3QgbnVsbAorUEFTUyBvcGVuZXIgYW5kIGVtYmVkZGVkIGRvY3VtZW50czsg
dXNpbmcgd2luZG93Lm9wZW4oKQogCkluZGV4OiBMYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2Vi
LXBsYXRmb3JtLXRlc3RzL2h0bWwvYnJvd3NlcnMvd2luZG93cy9hdXhpbGlhcnktYnJvd3Npbmct
Y29udGV4dHMvb3BlbmVyLXNldHRlci53aW5kb3ctZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvaHRtbC9icm93c2Vy
cy93aW5kb3dzL2F1eGlsaWFyeS1icm93c2luZy1jb250ZXh0cy9vcGVuZXItc2V0dGVyLndpbmRv
dy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDI3MTk3NSkKKysrIExheW91dFRlc3RzL2ltcG9ydGVk
L3czYy93ZWItcGxhdGZvcm0tdGVzdHMvaHRtbC9icm93c2Vycy93aW5kb3dzL2F1eGlsaWFyeS1i
cm93c2luZy1jb250ZXh0cy9vcGVuZXItc2V0dGVyLndpbmRvdy1leHBlY3RlZC50eHQJKHdvcmtp
bmcgY29weSkKQEAgLTEsOSArMSw5IEBACiAKLUZBSUwgU2V0dGluZyB3aW5kb3cub3BlbmVyIHRv
IHVuZGVmaW5lZCBhc3NlcnRfZXF1YWxzOiBleHBlY3RlZCAoc3RyaW5nKSAieCIgYnV0IGdvdCAo
dW5kZWZpbmVkKSB1bmRlZmluZWQKLUZBSUwgU2V0dGluZyB3aW5kb3cub3BlbmVyIHRvIDQyIGFz
c2VydF9lcXVhbHM6IGV4cGVjdGVkIChzdHJpbmcpICJ4IiBidXQgZ290IChudW1iZXIpIDQyCi1G
QUlMIFNldHRpbmcgd2luZG93Lm9wZW5lciB0byBmdW5jdGlvbiAoKSB7IHJldHVybiAiaGkiIH0g
YXNzZXJ0X2VxdWFsczogZXhwZWN0ZWQgKHN0cmluZykgIngiIGJ1dCBnb3QgKGZ1bmN0aW9uKSBm
dW5jdGlvbiAiZnVuY3Rpb24gKCkgeyByZXR1cm4gImhpIiB9IgotRkFJTCBTZXR0aW5nIHdpbmRv
dy5vcGVuZXIgdG8gaGkgYXNzZXJ0X2VxdWFsczogZXhwZWN0ZWQgIngiIGJ1dCBnb3QgImhpIgot
RkFJTCBTZXR0aW5nIHdpbmRvdy5vcGVuZXIgdG8gW29iamVjdCBPYmplY3RdIGFzc2VydF9lcXVh
bHM6IGV4cGVjdGVkIChzdHJpbmcpICJ4IiBidXQgZ290IChvYmplY3QpIG9iamVjdCAiW29iamVj
dCBPYmplY3RdIgotRkFJTCBTZXR0aW5nIHdpbmRvdy5vcGVuZXIgdG8gIGFzc2VydF9lcXVhbHM6
IGV4cGVjdGVkIChzdHJpbmcpICJ4IiBidXQgZ290IChvYmplY3QpIFtdCi1GQUlMIFNldHRpbmcg
d2luZG93Lm9wZW5lciB0byBTeW1ib2woKSBhc3NlcnRfZXF1YWxzOiBleHBlY3RlZCAoc3RyaW5n
KSAieCIgYnV0IGdvdCAoc3ltYm9sKSBzeW1ib2wgIlN5bWJvbCgpIgorUEFTUyBTZXR0aW5nIHdp
bmRvdy5vcGVuZXIgdG8gdW5kZWZpbmVkCitQQVNTIFNldHRpbmcgd2luZG93Lm9wZW5lciB0byA0
MgorUEFTUyBTZXR0aW5nIHdpbmRvdy5vcGVuZXIgdG8gZnVuY3Rpb24gKCkgeyByZXR1cm4gImhp
IiB9CitQQVNTIFNldHRpbmcgd2luZG93Lm9wZW5lciB0byBoaQorUEFTUyBTZXR0aW5nIHdpbmRv
dy5vcGVuZXIgdG8gW29iamVjdCBPYmplY3RdCitQQVNTIFNldHRpbmcgd2luZG93Lm9wZW5lciB0
bworUEFTUyBTZXR0aW5nIHdpbmRvdy5vcGVuZXIgdG8gU3ltYm9sKCkKIApJbmRleDogTGF5b3V0
VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9odG1sL3NlbWFudGljcy9mb3Jt
cy90aGUtZm9ybS1lbGVtZW50L2Zvcm0tbmFtZWRpdGVtLWV4cGVjdGVkLnR4dAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2h0bWwvc2Vt
YW50aWNzL2Zvcm1zL3RoZS1mb3JtLWVsZW1lbnQvZm9ybS1uYW1lZGl0ZW0tZXhwZWN0ZWQudHh0
CShyZXZpc2lvbiAyNzE5NzUpCisrKyBMYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRm
b3JtLXRlc3RzL2h0bWwvc2VtYW50aWNzL2Zvcm1zL3RoZS1mb3JtLWVsZW1lbnQvZm9ybS1uYW1l
ZGl0ZW0tZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xMiw3ICsxMiw5IEBAIFBBU1Mg
TmFtZWQgaXRlbXMgb3V0c2lkZSB0aGUgZm9ybSBzaG91bGQKIFBBU1MgVGhlIGZvcm0gYXR0cmli
dXRlIHNob3VsZCBiZSB0YWtlbiBpbnRvIGFjY291bnQgZm9yIG5hbWVkIGdldHRlcnMgKHNpbmds
ZSBlbGVtZW50KQogUEFTUyBUaGUgZm9ybSBhdHRyaWJ1dGUgc2hvdWxkIGJlIHRha2VuIGludG8g
YWNjb3VudCBmb3IgbmFtZWQgZ2V0dGVycyAobXVsdGlwbGUgZWxlbWVudHMpCiBQQVNTIElucHV0
IHNob3VsZCBvbmx5IGJlIGEgbmFtZWQgcHJvcGVydHkgb24gdGhlIGlubmVybW9zdCBmb3JtIHRo
YXQgY29udGFpbnMgaXQKLUZBSUwgVHJ5aW5nIHRvIHNldCBhbiBleHBhbmRvIHRoYXQgd291bGQg
c2hhZG93IGFuIGFscmVhZHktZXhpc3RpbmcgbmFtZWQgcHJvcGVydHkgYXNzZXJ0X2VxdWFsczog
ZXhwZWN0ZWQgKG9iamVjdCkgRWxlbWVudCBub2RlIDxidXR0b24gbmFtZT0ibDEiPjwvYnV0dG9u
PiBidXQgZ290IChudW1iZXIpIDUKK0ZBSUwgVHJ5aW5nIHRvIHNldCBhbiBleHBhbmRvIHRoYXQg
d291bGQgc2hhZG93IGFuIGFscmVhZHktZXhpc3RpbmcgbmFtZWQgcHJvcGVydHkgYXNzZXJ0X3Ro
cm93c19qczogZnVuY3Rpb24gImZ1bmN0aW9uICgpIHsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVy
dHkoZm9ybSwgImwxIiwgeyB2YWx1ZTogNSB9KTsKKyAgfSIgZGlkIG5vdCB0aHJvdwogUEFTUyBU
cnlpbmcgdG8gc2V0IGFuIGV4cGFuZG8gdGhhdCBzaGFkb3dzIGEgbmFtZWQgcHJvcGVydHkgdGhh
dCBnZXRzIGFkZGVkIGxhdGVyCiBQQVNTIFRyeWluZyB0byBzZXQgYSBub24tY29uZmlndXJhYmxl
IGV4cGFuZG8gdGhhdCBzaGFkb3dzIGEgbmFtZWQgcHJvcGVydHkgdGhhdCBnZXRzIGFkZGVkIGxh
dGVyCiBQQVNTIFBhc3QgbmFtZXMgbWFwIHNob3VsZCB3b3JrIGNvcnJlY3RseQpJbmRleDogTGF5
b3V0VGVzdHMvanMvaW5zdGFuY2UtcHJvcGVydHktZ2V0dGVyLW90aGVyLWluc3RhbmNlLWV4cGVj
dGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9pbnN0YW5jZS1wcm9wZXJ0eS1n
ZXR0ZXItb3RoZXItaW5zdGFuY2UtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAyNzE5NzUpCisrKyBM
YXlvdXRUZXN0cy9qcy9pbnN0YW5jZS1wcm9wZXJ0eS1nZXR0ZXItb3RoZXItaW5zdGFuY2UtZXhw
ZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0zLDkgKzMsNyBAQCBUZXN0cyB0aGF0IGNhbGxp
bmcgYW4gaW5zdGFuY2UgcHJvcGVydHkgCiBPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJp
ZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCiAKIAot
UEFTUyBsb2NhdGlvbkdldHRlciBpcyBhbiBpbnN0YW5jZSBvZiBmdW5jdGlvbiBGdW5jdGlvbigp
IHsKLSAgICBbbmF0aXZlIGNvZGVdCi19CitQQVNTIGxvY2F0aW9uR2V0dGVyIGluc3RhbmNlb2Yg
b3RoZXJXaW5kb3cuRnVuY3Rpb24gaXMgdHJ1ZQogUEFTUyBsb2NhdGlvbkdldHRlci5jYWxsKG90
aGVyV2luZG93LmRvY3VtZW50KS50b1N0cmluZygpIGlzICJhYm91dDpibGFuayIKIFBBU1MgbG9j
YXRpb25HZXR0ZXIuY2FsbCh3aW5kb3cuZG9jdW1lbnQpID09PSB3aW5kb3cuZG9jdW1lbnQubG9j
YXRpb24gaXMgdHJ1ZQogUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQpJbmRleDogTGF5
b3V0VGVzdHMvanMvaW5zdGFuY2UtcHJvcGVydHktZ2V0dGVyLW90aGVyLWluc3RhbmNlLmh0bWwK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvaW5zdGFuY2UtcHJvcGVydHktZ2V0dGVyLW90
aGVyLWluc3RhbmNlLmh0bWwJKHJldmlzaW9uIDI3MTk3NSkKKysrIExheW91dFRlc3RzL2pzL2lu
c3RhbmNlLXByb3BlcnR5LWdldHRlci1vdGhlci1pbnN0YW5jZS5odG1sCSh3b3JraW5nIGNvcHkp
CkBAIC0xMiw3ICsxMiw3IEBAIGZ1bmN0aW9uIHJ1blRlc3QoKQogewogICAgIG90aGVyV2luZG93
ID0gd2luZG93Lm9wZW4oImFib3V0OmJsYW5rIik7CiAgICAgICAgIGxvY2F0aW9uR2V0dGVyID0g
T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvdGhlcldpbmRvdy5kb2N1bWVudCwgImxv
Y2F0aW9uIikuZ2V0OwotICAgICAgICBzaG91bGRCZVR5cGUoImxvY2F0aW9uR2V0dGVyIiwgRnVu
Y3Rpb24pOworICAgICAgICBzaG91bGRCZVRydWUoImxvY2F0aW9uR2V0dGVyIGluc3RhbmNlb2Yg
b3RoZXJXaW5kb3cuRnVuY3Rpb24iKTsKICAgICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJs
b2NhdGlvbkdldHRlci5jYWxsKG90aGVyV2luZG93LmRvY3VtZW50KS50b1N0cmluZygpIiwgImFi
b3V0OmJsYW5rIik7CiAgICAgICAgIC8vIFNob3VsZCByZXR1cm4gdGhlIGN1cnJlbnQgZG9jdW1l
bnQncyBsb2NhdGlvbi4KICAgICAgICAgc2hvdWxkQmVUcnVlKCJsb2NhdGlvbkdldHRlci5jYWxs
KHdpbmRvdy5kb2N1bWVudCkgPT09IHdpbmRvdy5kb2N1bWVudC5sb2NhdGlvbiIpOwpJbmRleDog
TGF5b3V0VGVzdHMvanMvZG9tL3JlZmxlY3Qtc2V0LW9udG8tZG9tLWV4cGVjdGVkLnR4dAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9kb20vcmVmbGVjdC1zZXQtb250by1kb20tZXhwZWN0
ZWQudHh0CShyZXZpc2lvbiAyNzE5NzUpCisrKyBMYXlvdXRUZXN0cy9qcy9kb20vcmVmbGVjdC1z
ZXQtb250by1kb20tZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC04Myw5ICs4Myw5IEBA
IFBBU1MgUmVmbGVjdC5kZWZpbmVQcm9wZXJ0eShucG9iamVjdCwgMCwKIH0pIGlzIHRydWUKIFBB
U1MgUmVmbGVjdC5zZXQobnBvYmplY3QsIDAsICJIZWxsbyIpIGlzIGZhbHNlCiBQQVNTIFJlZmxl
Y3QuZ2V0KG5wb2JqZWN0LCAwKSBpcyAiU3dlZXQiCi1QQVNTIFJlZmxlY3Quc2V0KG5wb2JqZWN0
LCAwLCAiT0siLCByZWNlaXZlcikgaXMgZmFsc2UKK1BBU1MgUmVmbGVjdC5zZXQobnBvYmplY3Qs
IDAsICJPSyIsIHJlY2VpdmVyKSBpcyB0cnVlCiBQQVNTIFJlZmxlY3QuZ2V0KG5wb2JqZWN0LCAw
KSBpcyAiU3dlZXQiCi1QQVNTIFJlZmxlY3QuZ2V0KHJlY2VpdmVyLCAwKSBpcyB1bmRlZmluZWQK
K1BBU1MgUmVmbGVjdC5nZXQocmVjZWl2ZXIsIDApIGlzICJPSyIKIERPTVN0cmluZ01hcAogUEFT
UyBSZWZsZWN0LmdldChkb2N1bWVudC5ib2R5LmRhdGFzZXQsICJjb2NvYSIpIGlzICJjYXBwdWNj
aW5vIgogUEFTUyBSZWZsZWN0LnNldChkb2N1bWVudC5ib2R5LmRhdGFzZXQsICJjb2NvYSIsICJz
d2VldCIpIGlzIHRydWUKQEAgLTkzLDEzICs5MywxMyBAQCBQQVNTIFJlZmxlY3QuZ2V0KGRvY3Vt
ZW50LmJvZHkuZGF0YXNldCwgCiBQQVNTIFJlZmxlY3Quc2V0KGRvY3VtZW50LmJvZHkuZGF0YXNl
dCwgImNvY29hLWNhcHB1Y2Npbm8iLCAic3dlZXQiKSB0aHJldyBleGNlcHRpb24gU3ludGF4RXJy
b3I6IFRoZSBzdHJpbmcgZGlkIG5vdCBtYXRjaCB0aGUgZXhwZWN0ZWQgcGF0dGVybi4uCiBQQVNT
IFJlZmxlY3Quc2V0KGRvY3VtZW50LmJvZHkuZGF0YXNldCwgMCwgInN3ZWV0IikgaXMgdHJ1ZQog
UEFTUyBSZWZsZWN0LmdldChkb2N1bWVudC5ib2R5LmRhdGFzZXQsIDApIGlzICJzd2VldCIKLURP
TVN0cmluZ01hcCBpZ25vcmVzIHRoZSByZWNlaXZlci4gVGhlc2UgcHV0RGVsZWdhdGUgb25seSB3
b3JrIHdpdGggOjpwdXQgKG5vdCA6OmRlZmluZU93blByb3BlcnR5KS4gU28gdGhleSBiZWhhdmUg
YXMgdGhlIHNwZWNpYWwgc2V0dGVyLCB3ZSBzaG91bGQgbm90IGZhbGxiYWNrIHRvIHRoZSBPcmRp
bmFyeVNldC4KK0RPTVN0cmluZ01hcCBmYWxscyBiYWNrIHRvIE9yZGluYXJ5U2V0IGlmIHJlY2Vp
dmVyIGlzIGFsdGVyZWQuCiBQQVNTIFJlZmxlY3Quc2V0KGRvY3VtZW50LmJvZHkuZGF0YXNldCwg
ImNvY29hIiwgIm9rIiwgcmVjZWl2ZXIpIGlzIHRydWUKLVBBU1MgUmVmbGVjdC5nZXQoZG9jdW1l
bnQuYm9keS5kYXRhc2V0LCAiY29jb2EiKSBpcyAib2siCi1QQVNTIFJlZmxlY3QuZ2V0KHJlY2Vp
dmVyLCAiY29jb2EiKSBpcyB1bmRlZmluZWQKK1BBU1MgUmVmbGVjdC5nZXQoZG9jdW1lbnQuYm9k
eS5kYXRhc2V0LCAiY29jb2EiKSBpcyAic3dlZXQiCitQQVNTIFJlZmxlY3QuZ2V0KHJlY2VpdmVy
LCAiY29jb2EiKSBpcyAib2siCiBQQVNTIFJlZmxlY3Quc2V0KGRvY3VtZW50LmJvZHkuZGF0YXNl
dCwgMCwgIm9rIiwgcmVjZWl2ZXIpIGlzIHRydWUKLVBBU1MgUmVmbGVjdC5nZXQoZG9jdW1lbnQu
Ym9keS5kYXRhc2V0LCAwKSBpcyAib2siCi1QQVNTIFJlZmxlY3QuZ2V0KHJlY2VpdmVyLCAwKSBp
cyB1bmRlZmluZWQKK1BBU1MgUmVmbGVjdC5nZXQoZG9jdW1lbnQuYm9keS5kYXRhc2V0LCAwKSBp
cyAic3dlZXQiCitQQVNTIFJlZmxlY3QuZ2V0KHJlY2VpdmVyLCAwKSBpcyAib2siCiBDdXN0b21J
bmRleGVkU2V0dGVyCiBQQVNTIFJlZmxlY3QuZ2V0KHNlbGVjdCwgMCkudmFsdWUgaXMgImNvY29h
IgogUEFTUyBSZWZsZWN0LmdldChzZWxlY3QsICJsZW5ndGgiKSBpcyAzCkBAIC0xMTEsMTAgKzEx
MSwxMCBAQCBQQVNTIFJlZmxlY3QuZ2V0KHNlbGVjdCwgImxlbmd0aCIpIGlzIDQyCiBQQVNTIFJl
ZmxlY3Quc2V0KHNlbGVjdCwgNDQsIG9wdGlvbjIpIGlzIHRydWUKIFBBU1MgUmVmbGVjdC5nZXQo
c2VsZWN0LCA0NCkudmFsdWUgaXMgImtpbGltYW5qYXJvIgogUEFTUyBSZWZsZWN0LnNldChzZWxl
Y3QsIDIwLCAiS2lsaW1hbmphcm8iKSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBUeXBlIGVy
cm9yLgotQ3VzdG9tSW5kZXhlZFNldHRlciBpZ25vcmVzIHRoZSByZWNlaXZlci4gVGhlc2UgbWV0
aG9kcyBvbmx5IHdvcmsgd2l0aCA6OnB1dCAobm90IDo6ZGVmaW5lT3duUHJvcGVydHkpLiBTbyB0
aGV5IGJlaGF2ZSBhcyB0aGUgc3BlY2lhbCBzZXR0ZXIsIHdlIHNob3VsZCBub3QgZmFsbGJhY2sg
dG8gdGhlIE9yZGluYXJ5U2V0LgorQ3VzdG9tSW5kZXhlZFNldHRlciBmYWxscyBiYWNrIHRvIE9y
ZGluYXJ5U2V0IGlmIHJlY2VpdmVyIGlzIGFsdGVyZWQuCiBQQVNTIFJlZmxlY3Quc2V0KHNlbGVj
dCwgMCwgb3B0aW9uMywgcmVjZWl2ZXIpIGlzIHRydWUKLVBBU1MgUmVmbGVjdC5nZXQocmVjZWl2
ZXIsIDApIGlzIHVuZGVmaW5lZAotUEFTUyBSZWZsZWN0LmdldChzZWxlY3QsIDApIGlzIG9wdGlv
bjMKK1BBU1MgUmVmbGVjdC5nZXQocmVjZWl2ZXIsIDApIGlzIG9wdGlvbjMKK1BBU1MgUmVmbGVj
dC5nZXQoc2VsZWN0LCAwKSBpcyBzZWxlY3QuY2hpbGRyZW5bMF0KIFBBU1Mgc3VjY2Vzc2Z1bGx5
UGFyc2VkIGlzIHRydWUKIAogVEVTVCBDT01QTEVURQpJbmRleDogTGF5b3V0VGVzdHMvanMvZG9t
L3NjcmlwdC10ZXN0cy9yZWZsZWN0LXNldC1vbnRvLWRvbS5qcwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9qcy9kb20vc2NyaXB0LXRlc3RzL3JlZmxlY3Qtc2V0LW9udG8tZG9tLmpzCShyZXZp
c2lvbiAyNzE5NzUpCisrKyBMYXlvdXRUZXN0cy9qcy9kb20vc2NyaXB0LXRlc3RzL3JlZmxlY3Qt
c2V0LW9udG8tZG9tLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0xMDMsOSArMTAzLDkgQEAgc2hvdWxk
QmUoYFJlZmxlY3QuZGVmaW5lUHJvcGVydHkobnBvYmplYwogc2hvdWxkQmUoYFJlZmxlY3Quc2V0
KG5wb2JqZWN0LCAwLCAiSGVsbG8iKWAsIGBmYWxzZWApOwogc2hvdWxkQmUoYFJlZmxlY3QuZ2V0
KG5wb2JqZWN0LCAwKWAsIGAiU3dlZXQiYCk7CiB2YXIgcmVjZWl2ZXIgPSB7fTsKLXNob3VsZEJl
KGBSZWZsZWN0LnNldChucG9iamVjdCwgMCwgIk9LIiwgcmVjZWl2ZXIpYCwgYGZhbHNlYCk7Citz
aG91bGRCZShgUmVmbGVjdC5zZXQobnBvYmplY3QsIDAsICJPSyIsIHJlY2VpdmVyKWAsIGB0cnVl
YCk7CiBzaG91bGRCZShgUmVmbGVjdC5nZXQobnBvYmplY3QsIDApYCwgYCJTd2VldCJgKTsKLXNo
b3VsZEJlKGBSZWZsZWN0LmdldChyZWNlaXZlciwgMClgLCBgdW5kZWZpbmVkYCk7CitzaG91bGRC
ZShgUmVmbGVjdC5nZXQocmVjZWl2ZXIsIDApYCwgYCJPSyJgKTsKIAogZGVidWcoIkRPTVN0cmlu
Z01hcCIpOwogZG9jdW1lbnQuYm9keS5zZXRBdHRyaWJ1dGUoImRhdGEtY29jb2EiLCAiY2FwcHVj
Y2lubyIpOwpAQCAtMTE2LDE1ICsxMTYsMTUgQEAgc2hvdWxkVGhyb3coYFJlZmxlY3Quc2V0KGRv
Y3VtZW50LmJvZHkuZAogc2hvdWxkQmUoYFJlZmxlY3Quc2V0KGRvY3VtZW50LmJvZHkuZGF0YXNl
dCwgMCwgInN3ZWV0IilgLCBgdHJ1ZWApOwogc2hvdWxkQmUoYFJlZmxlY3QuZ2V0KGRvY3VtZW50
LmJvZHkuZGF0YXNldCwgMClgLCBgInN3ZWV0ImApOwogCi1kZWJ1ZygiRE9NU3RyaW5nTWFwIGln
bm9yZXMgdGhlIHJlY2VpdmVyLiBUaGVzZSBwdXREZWxlZ2F0ZSBvbmx5IHdvcmsgd2l0aCA6OnB1
dCAobm90IDo6ZGVmaW5lT3duUHJvcGVydHkpLiBTbyB0aGV5IGJlaGF2ZSBhcyB0aGUgc3BlY2lh
bCBzZXR0ZXIsIHdlIHNob3VsZCBub3QgZmFsbGJhY2sgdG8gdGhlIE9yZGluYXJ5U2V0LiIpOwor
ZGVidWcoIkRPTVN0cmluZ01hcCBmYWxscyBiYWNrIHRvIE9yZGluYXJ5U2V0IGlmIHJlY2VpdmVy
IGlzIGFsdGVyZWQuIik7CiB2YXIgcmVjZWl2ZXIgPSB7fTsKIHNob3VsZEJlKGBSZWZsZWN0LnNl
dChkb2N1bWVudC5ib2R5LmRhdGFzZXQsICJjb2NvYSIsICJvayIsIHJlY2VpdmVyKWAsIGB0cnVl
YCk7Ci1zaG91bGRCZShgUmVmbGVjdC5nZXQoZG9jdW1lbnQuYm9keS5kYXRhc2V0LCAiY29jb2Ei
KWAsIGAib2siYCk7Ci1zaG91bGRCZShgUmVmbGVjdC5nZXQocmVjZWl2ZXIsICJjb2NvYSIpYCwg
YHVuZGVmaW5lZGApOworc2hvdWxkQmUoYFJlZmxlY3QuZ2V0KGRvY3VtZW50LmJvZHkuZGF0YXNl
dCwgImNvY29hIilgLCBgInN3ZWV0ImApOworc2hvdWxkQmUoYFJlZmxlY3QuZ2V0KHJlY2VpdmVy
LCAiY29jb2EiKWAsIGAib2siYCk7CiB2YXIgcmVjZWl2ZXIgPSB7fTsKIHNob3VsZEJlKGBSZWZs
ZWN0LnNldChkb2N1bWVudC5ib2R5LmRhdGFzZXQsIDAsICJvayIsIHJlY2VpdmVyKWAsIGB0cnVl
YCk7Ci1zaG91bGRCZShgUmVmbGVjdC5nZXQoZG9jdW1lbnQuYm9keS5kYXRhc2V0LCAwKWAsIGAi
b2siYCk7Ci1zaG91bGRCZShgUmVmbGVjdC5nZXQocmVjZWl2ZXIsIDApYCwgYHVuZGVmaW5lZGAp
Oworc2hvdWxkQmUoYFJlZmxlY3QuZ2V0KGRvY3VtZW50LmJvZHkuZGF0YXNldCwgMClgLCBgInN3
ZWV0ImApOworc2hvdWxkQmUoYFJlZmxlY3QuZ2V0KHJlY2VpdmVyLCAwKWAsIGAib2siYCk7CiAK
IGRlYnVnKCJDdXN0b21JbmRleGVkU2V0dGVyIik7CiB2YXIgc2VsZWN0ID0gZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoInRlc3RTZWxlY3QiKTsKQEAgLTE0NiwxMSArMTQ2LDExIEBAIHNob3VsZEJl
KGBSZWZsZWN0LnNldChzZWxlY3QsIDQ0LCBvcHRpb24KIHNob3VsZEJlKGBSZWZsZWN0LmdldChz
ZWxlY3QsIDQ0KS52YWx1ZWAsIGAia2lsaW1hbmphcm8iYCk7CiBzaG91bGRUaHJvdyhgUmVmbGVj
dC5zZXQoc2VsZWN0LCAyMCwgIktpbGltYW5qYXJvIilgKTsKIAotZGVidWcoIkN1c3RvbUluZGV4
ZWRTZXR0ZXIgaWdub3JlcyB0aGUgcmVjZWl2ZXIuIFRoZXNlIG1ldGhvZHMgb25seSB3b3JrIHdp
dGggOjpwdXQgKG5vdCA6OmRlZmluZU93blByb3BlcnR5KS4gU28gdGhleSBiZWhhdmUgYXMgdGhl
IHNwZWNpYWwgc2V0dGVyLCB3ZSBzaG91bGQgbm90IGZhbGxiYWNrIHRvIHRoZSBPcmRpbmFyeVNl
dC4iKTsKK2RlYnVnKCJDdXN0b21JbmRleGVkU2V0dGVyIGZhbGxzIGJhY2sgdG8gT3JkaW5hcnlT
ZXQgaWYgcmVjZWl2ZXIgaXMgYWx0ZXJlZC4iKTsKIHZhciBvcHRpb24zID0gZG9jdW1lbnQuY3Jl
YXRlRWxlbWVudCgib3B0aW9uIik7CiBvcHRpb24zLnZhbHVlID0gInJhYmJpdCI7CiBvcHRpb24z
LnRleHRDb250ZW50ID0gIlJhYmJpdCI7CiB2YXIgcmVjZWl2ZXIgPSB7fTsKIHNob3VsZEJlKGBS
ZWZsZWN0LnNldChzZWxlY3QsIDAsIG9wdGlvbjMsIHJlY2VpdmVyKWAsIGB0cnVlYCk7Ci1zaG91
bGRCZShgUmVmbGVjdC5nZXQocmVjZWl2ZXIsIDApYCwgYHVuZGVmaW5lZGApOwotc2hvdWxkQmUo
YFJlZmxlY3QuZ2V0KHNlbGVjdCwgMClgLCBgb3B0aW9uM2ApOworc2hvdWxkQmUoYFJlZmxlY3Qu
Z2V0KHJlY2VpdmVyLCAwKWAsIGBvcHRpb24zYCk7CitzaG91bGRCZShgUmVmbGVjdC5nZXQoc2Vs
ZWN0LCAwKWAsIGBzZWxlY3QuY2hpbGRyZW5bMF1gKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>425673</attachid>
            <date>2021-04-09 19:16:14 -0700</date>
            <delta_ts>2021-04-09 19:32:42 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>bug-217916-20210410051612.patch</filename>
            <type>text/plain</type>
            <size>121400</size>
            <attacher name="Alexey Shvayka">ashvayka</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyNzU3OTApCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDQzIEBACisyMDIxLTA0LTA5ICBBbGV4ZXkgU2h2YXlrYSAgPHNodmFpa2FsZXNo
QGdtYWlsLmNvbT4KKworICAgICAgICBJbnRyb2R1Y2UgT3ZlcnJpZGVzUHV0W0J5SW5kZXhdIHR5
cGUgaW5mbyBmbGFncworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjE3OTE2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiBtaWNyb2JlbmNobWFya3MvcHV0LXNsb3ctbm8tY2FjaGUtYXJyYXkuanM6IEFkZGVk
LgorICAgICAgICAqIG1pY3JvYmVuY2htYXJrcy9wdXQtc2xvdy1uby1jYWNoZS1mdW5jdGlvbi5q
czogQWRkZWQuCisgICAgICAgIChBKToKKyAgICAgICAgKEIpOgorICAgICAgICAoQyk6CisgICAg
ICAgICogbWljcm9iZW5jaG1hcmtzL3B1dC1zbG93LW5vLWNhY2hlLWpzLXByb3h5LmpzOiBBZGRl
ZC4KKyAgICAgICAgKHByb3h5LnZtLmNyZWF0ZVByb3h5LnNldCBmb28pOgorICAgICAgICAqIG1p
Y3JvYmVuY2htYXJrcy9wdXQtc2xvdy1uby1jYWNoZS1sb25nLXByb3RvdHlwZS1jaGFpbi5qczog
QWRkZWQuCisgICAgICAgIChiYXNlLnNldCBmb28pOgorICAgICAgICAqIG1pY3JvYmVuY2htYXJr
cy9wdXQtc2xvdy1uby1jYWNoZS5qczogQWRkZWQuCisgICAgICAgIChiYXNlLnNldCBmb28pOgor
ICAgICAgICAqIG1pY3JvYmVuY2htYXJrcy9yZWZsZWN0LXNldC13aXRoLXJlY2VpdmVyLmpzOiBB
ZGRlZC4KKyAgICAgICAgKHRhcmdldC5uZXcpOgorICAgICAgICAqIHN0cmVzcy9jdXN0b20tZ2V0
LXNldC1wcm90by1jaGFpbi1wdXQuanM6CisgICAgICAgIChnZXRPYmplY3RzKToKKyAgICAgICAg
KGxldC5iYXNlLm9mLmdldEJhc2VzKToKKyAgICAgICAgKiBzdHJlc3MvbW9kdWxlLW5hbWVzcGFj
ZS1hY2Nlc3Mtc2V0LWZhaWxzLmpzOiBBZGRlZC4KKyAgICAgICAgKGFzc2VydCk6CisgICAgICAg
ICh0ZXN0RGlyZWN0U2V0KToKKyAgICAgICAgKiBzdHJlc3MvcHV0LXNsb3ctbm9uLXJlaWZpZWQt
c3RhdGljLW5vbi1leHRlbnNpYmxlLmpzOiBBZGRlZC4KKyAgICAgICAgKHNob3VsZEJlKToKKyAg
ICAgICAgKG9mLnRlc3RDYXNlcy5jb25zdC5rZXkub2YudGVzdEtleXMuc2hvdWxkVGhyb3cpOgor
ICAgICAgICAqIHN0cmVzcy9yZWZsZWN0LXNldC5qczoKKyAgICAgICAgKHNldCBnZXQgVWludDhB
cnJheSk6CisgICAgICAgICogc3RyZXNzL3JlZ3Jlc3MtMjE3OTE2LmpzOiBBZGRlZC4KKyAgICAg
ICAgKHNob3VsZEJlKToKKyAgICAgICAgKHRocm93Lm5ldy5FcnJvcik6CisgICAgICAgICh0ZXN0
U3RhdGljQ3VzdG9tQWNjZXNzb3IpOgorICAgICAgICAodGVzdFN0YXRpY0N1c3RvbVZhbHVlKToK
KyAgICAgICAgKiBzdHJlc3MvdHlwZWQtYXJyYXktY2Fub25pY2FsLW51bWVyaWMtaW5kZXgtc3Ry
aW5nLXNldC5qczogQWRkZWQuCisgICAgICAgIChhc3NlcnQpOgorICAgICAgICAoY29uc3QuVHlw
ZWRBcnJheS5vZi5UeXBlZEFycmF5cy5jb25zdC5rZXkub2YuY2Fub25pY2FsTnVtZXJpY0luZGV4
U3RyaW5ncy5zZXQgdGhyb3cpOgorCiAyMDIxLTA0LTA3ICBZdXN1a2UgU3V6dWtpICA8eXN1enVr
aUBhcHBsZS5jb20+CiAKICAgICAgICAgW0pTQ10gRFVDRVQgbGV2ZWwtMSB3ZWlnaHMgYXJlIGVx
dWFsIGlmIGNoYXJhY3RlcnMgYXJlIGFscGhhYmV0cwpJbmRleDogSlNUZXN0cy9taWNyb2JlbmNo
bWFya3MvcHV0LXNsb3ctbm8tY2FjaGUtYXJyYXkuanMKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9t
aWNyb2JlbmNobWFya3MvcHV0LXNsb3ctbm8tY2FjaGUtYXJyYXkuanMJKG5vbmV4aXN0ZW50KQor
KysgSlNUZXN0cy9taWNyb2JlbmNobWFya3MvcHV0LXNsb3ctbm8tY2FjaGUtYXJyYXkuanMJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw2IEBACisoZnVuY3Rpb24oKSB7CisgICAgdmFyIGFycmF5
ID0gW107CisKKyAgICBmb3IgKHZhciBqID0gMDsgaiA8IDFlNTsgaisrKQorICAgICAgICBhcnJh
eVsiZm9vIiArIGpdID0gajsKK30pKCk7CkluZGV4OiBKU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9w
dXQtc2xvdy1uby1jYWNoZS1mdW5jdGlvbi5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL21pY3Jv
YmVuY2htYXJrcy9wdXQtc2xvdy1uby1jYWNoZS1mdW5jdGlvbi5qcwkobm9uZXhpc3RlbnQpCisr
KyBKU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9wdXQtc2xvdy1uby1jYWNoZS1mdW5jdGlvbi5qcwko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDggQEAKKyhmdW5jdGlvbigpIHsKKyAgICBjbGFzcyBB
IHt9CisgICAgY2xhc3MgQiBleHRlbmRzIEEge30KKyAgICBjbGFzcyBDIGV4dGVuZHMgQiB7fQor
CisgICAgZm9yICh2YXIgaiA9IDA7IGogPCAxZTU7IGorKykKKyAgICAgICAgQ1siZm9vIiArIGpd
ID0gajsKK30pKCk7CkluZGV4OiBKU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9wdXQtc2xvdy1uby1j
YWNoZS1qcy1wcm94eS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9w
dXQtc2xvdy1uby1jYWNoZS1qcy1wcm94eS5qcwkobm9uZXhpc3RlbnQpCisrKyBKU1Rlc3RzL21p
Y3JvYmVuY2htYXJrcy9wdXQtc2xvdy1uby1jYWNoZS1qcy1wcm94eS5qcwkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDYgQEAKKyhmdW5jdGlvbigpIHsKKyAgICB2YXIgcHJveHkgPSAkdm0uY3Jl
YXRlUHJveHkoeyBzZXQgZm9vKF92KSB7fSB9KTsKKworICAgIGZvciAodmFyIGogPSAwOyBqIDwg
MWU1OyBqKyspCisgICAgICAgIHByb3h5WyJmb28iICsgal0gPSBqOworfSkoKTsKSW5kZXg6IEpT
VGVzdHMvbWljcm9iZW5jaG1hcmtzL3B1dC1zbG93LW5vLWNhY2hlLWxvbmctcHJvdG90eXBlLWNo
YWluLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvbWljcm9iZW5jaG1hcmtzL3B1dC1zbG93LW5v
LWNhY2hlLWxvbmctcHJvdG90eXBlLWNoYWluLmpzCShub25leGlzdGVudCkKKysrIEpTVGVzdHMv
bWljcm9iZW5jaG1hcmtzL3B1dC1zbG93LW5vLWNhY2hlLWxvbmctcHJvdG90eXBlLWNoYWluLmpz
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOCBAQAorKGZ1bmN0aW9uKCkgeworICAgIHZhciBi
YXNlID0geyBzZXQgZm9vKF92KSB7fSB9OworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMWUzOyBp
KyspCisgICAgICAgIGJhc2UgPSBPYmplY3QuY3JlYXRlKGJhc2UpOworCisgICAgZm9yICh2YXIg
aiA9IDA7IGogPCAzZTM7IGorKykKKyAgICAgICAgYmFzZVsiZm9vIiArIGpdID0gajsKK30pKCk7
CkluZGV4OiBKU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9wdXQtc2xvdy1uby1jYWNoZS5qcwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBKU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9wdXQtc2xvdy1uby1jYWNoZS5qcwko
bm9uZXhpc3RlbnQpCisrKyBKU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9wdXQtc2xvdy1uby1jYWNo
ZS5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYgQEAKKyhmdW5jdGlvbigpIHsKKyAgICB2
YXIgYmFzZSA9IHsgc2V0IGZvbyhfdikge30gfTsKKworICAgIGZvciAodmFyIGogPSAwOyBqIDwg
MWU1OyBqKyspCisgICAgICAgIGJhc2VbImZvbyIgKyBqXSA9IGo7Cit9KSgpOwpJbmRleDogSlNU
ZXN0cy9taWNyb2JlbmNobWFya3MvcmVmbGVjdC1zZXQtd2l0aC1yZWNlaXZlci5qcwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBKU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9yZWZsZWN0LXNldC13aXRoLXJlY2VpdmVy
LmpzCShub25leGlzdGVudCkKKysrIEpTVGVzdHMvbWljcm9iZW5jaG1hcmtzL3JlZmxlY3Qtc2V0
LXdpdGgtcmVjZWl2ZXIuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2IEBACisoZnVuY3Rp
b24oKSB7CisgICAgdmFyIHRhcmdldCA9IG5ldyBmdW5jdGlvbigpIHt9OworCisgICAgZm9yICh2
YXIgaSA9IDA7IGkgPCAxZTY7IGkrKykKKyAgICAgICAgUmVmbGVjdC5zZXQodGFyZ2V0LCAiZm9v
IiwgMSwge30pOworfSkoKTsKSW5kZXg6IEpTVGVzdHMvc3RyZXNzL2N1c3RvbS1nZXQtc2V0LXBy
b3RvLWNoYWluLXB1dC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0cmVzcy9jdXN0b20tZ2V0
LXNldC1wcm90by1jaGFpbi1wdXQuanMJKHJldmlzaW9uIDI3NTc4NykKKysrIEpTVGVzdHMvc3Ry
ZXNzL2N1c3RvbS1nZXQtc2V0LXByb3RvLWNoYWluLXB1dC5qcwkod29ya2luZyBjb3B5KQpAQCAt
MzcsOCArMzcsOCBAQCBmdW5jdGlvbiBnZXRPYmplY3RzKCkgewogICAgICAgICAuLi5wcmltaXRp
dmVzLm1hcChPYmplY3QpLAogICAgICAgICBPYmplY3QuY3JlYXRlKGN1c3RvbVRlc3RHZXR0ZXJT
ZXR0ZXIpLAogICAgICAgICBPYmplY3QuY3JlYXRlKE9iamVjdC5jcmVhdGUoY3VzdG9tVGVzdEdl
dHRlclNldHRlcikpLAotICAgICAgICAvLyBGSVhNRTogb3JkaW5hcnlTZXRTbG93KCkgc2hvdWxk
IGhhbmRsZSBDdXN0b217QWNjZXNzb3IsVmFsdWV9IGRlc2NyaXB0b3JzLgotICAgICAgICAvLyBu
ZXcgUHJveHkoY3VzdG9tVGVzdEdldHRlclNldHRlciwge30pLAorICAgICAgICBPYmplY3QuY3Jl
YXRlKG5ldyBQcm94eShjdXN0b21UZXN0R2V0dGVyU2V0dGVyLCB7fSkpLAorICAgICAgICBPYmpl
Y3QuY3JlYXRlKCR2bS5jcmVhdGVQcm94eShjdXN0b21UZXN0R2V0dGVyU2V0dGVyKSksCiAgICAg
XTsKIH0KIApAQCAtOTEsNyArOTEsNyBAQCBmdW5jdGlvbiBnZXRCYXNlcygpIHsKICAgICAgICAg
ICAgIGJhc2UuY3VzdG9tVmFsdWUgPSAxOwogICAgICAgICAvLyBUaGlzIGlzIHdlaXJkLCBidXQg
aXQgaXNuJ3QgZXhwb3NlZCB0byB1c2VybGFuZCBjb2RlOgogICAgICAgICBhc3NlcnQoIWJhc2Uu
aGFzT3duUHJvcGVydHkoImN1c3RvbVZhbHVlIikpOwotICAgICAgICBhc3NlcnQoIVJlZmxlY3Qu
c2V0KE9iamVjdChiYXNlKSwgImN1c3RvbVZhbHVlIiwgMSkpOworICAgICAgICBhc3NlcnQoUmVm
bGVjdC5zZXQoT2JqZWN0KGJhc2UpLCAiY3VzdG9tVmFsdWUiLCAxKSk7CiAgICAgfQogfSkoKTsK
IApJbmRleDogSlNUZXN0cy9zdHJlc3MvbW9kdWxlLW5hbWVzcGFjZS1hY2Nlc3Mtc2V0LWZhaWxz
LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvc3RyZXNzL21vZHVsZS1uYW1lc3BhY2UtYWNjZXNz
LXNldC1mYWlscy5qcwkobm9uZXhpc3RlbnQpCisrKyBKU1Rlc3RzL3N0cmVzcy9tb2R1bGUtbmFt
ZXNwYWNlLWFjY2Vzcy1zZXQtZmFpbHMuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4MyBA
QAorY29uc3QgZXhpc3RpbmdLZXlzID0gWyJjb2NvYSIsICJ0ZXN0IiwgU3ltYm9sLnRvU3RyaW5n
VGFnXTsKK2NvbnN0IG5vbkV4aXN0aW5nS2V5cyA9IFsiZm9vIiwgU3ltYm9sKCJmb28iKV07Citj
b25zdCBhbGxLZXlzID0gWy4uLmV4aXN0aW5nS2V5cywgLi4ubm9uRXhpc3RpbmdLZXlzXTsKKwor
ZnVuY3Rpb24gYXNzZXJ0KHgsIGtleSkgeworICAgIGlmICgheCkKKyAgICAgICAgdGhyb3cgbmV3
IEVycm9yKGBCYWQgYXNzZXJ0aW9uISBLZXk6ICR7U3RyaW5nKGtleSl9YCk7Cit9CisKK2Z1bmN0
aW9uIHNob3VsZFRocm93KGZ1bmMsIGVycm9yTWVzc2FnZSkgeworICAgIHZhciBlcnJvclRocm93
biA9IGZhbHNlOworICAgIHRyeSB7CisgICAgICAgIGZ1bmMoKTsKKyAgICB9IGNhdGNoIChlcnJv
cikgeworICAgICAgICBlcnJvclRocm93biA9IHRydWU7CisgICAgICAgIGlmIChTdHJpbmcoZXJy
b3IpICE9PSBlcnJvck1lc3NhZ2UpCisgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEJhZCBl
cnJvcjogJHtlcnJvcn1gKTsKKyAgICB9CisgICAgaWYgKCFlcnJvclRocm93bikKKyAgICAgICAg
dGhyb3cgbmV3IEVycm9yKCJEaWRuJ3QgdGhyb3chIik7Cit9CisKK2Z1bmN0aW9uIHRlc3REaXJl
Y3RTZXQobnMpIHsKKyAgICBmb3IgKGNvbnN0IGtleSBvZiBhbGxLZXlzKSB7CisgICAgICAgIGNv
bnN0IG5ld1ZhbHVlID0ge307CisKKyAgICAgICAgbnNba2V5XSA9IG5ld1ZhbHVlOworICAgICAg
ICBhc3NlcnQobnNba2V5XSAhPT0gbmV3VmFsdWUsIGtleSk7CisKKyAgICAgICAgc2hvdWxkVGhy
b3coKCkgPT4geyAidXNlIHN0cmljdCI7IG5zW2tleV0gPSBuZXdWYWx1ZTsgfSwgIlR5cGVFcnJv
cjogQXR0ZW1wdGVkIHRvIGFzc2lnbiB0byByZWFkb25seSBwcm9wZXJ0eS4iKTsKKyAgICAgICAg
YXNzZXJ0KG5zW2tleV0gIT09IG5ld1ZhbHVlLCBrZXkpOworICAgIH0KK30KKworZnVuY3Rpb24g
dGVzdFByb3RvdHlwZUNoYWluU2V0KG5zKSB7CisgICAgZm9yIChjb25zdCBrZXkgb2YgYWxsS2V5
cykgeworICAgICAgICBjb25zdCBoZWlyID0gT2JqZWN0LmNyZWF0ZShucyk7CisKKyAgICAgICAg
aGVpcltrZXldID0ge307CisgICAgICAgIGFzc2VydChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNj
cmlwdG9yKGhlaXIsIGtleSkgPT09IHVuZGVmaW5lZCwga2V5KTsKKworICAgICAgICBzaG91bGRU
aHJvdygoKSA9PiB7ICJ1c2Ugc3RyaWN0IjsgaGVpcltrZXldID0ge307IH0sICJUeXBlRXJyb3I6
IEF0dGVtcHRlZCB0byBhc3NpZ24gdG8gcmVhZG9ubHkgcHJvcGVydHkuIik7CisgICAgICAgIGFz
c2VydChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGhlaXIsIGtleSkgPT09IHVuZGVm
aW5lZCwga2V5KTsKKyAgICB9Cit9CisKK2Z1bmN0aW9uIHRlc3RSZWZsZWN0U2V0KG5zKSB7Cisg
ICAgInVzZSBzdHJpY3QiOworCisgICAgZm9yIChjb25zdCBleGlzdGluZ0tleSBvZiBleGlzdGlu
Z0tleXMpIHsKKyAgICAgICAgY29uc3Qgb2JqID0ge307CisgICAgICAgIGNvbnN0IG5ld1ZhbHVl
ID0ge307CisKKyAgICAgICAgYXNzZXJ0KFJlZmxlY3Quc2V0KG5zLCBleGlzdGluZ0tleSwgbmV3
VmFsdWUpID09PSBmYWxzZSwgZXhpc3RpbmdLZXkpOworICAgICAgICBhc3NlcnQoUmVmbGVjdC5z
ZXQob2JqLCBleGlzdGluZ0tleSwgbmV3VmFsdWUsIG5zKSA9PT0gZmFsc2UsIGV4aXN0aW5nS2V5
KTsKKworICAgICAgICBjb25zdCBpc1dyaXRhYmxlID0gZXhpc3RpbmdLZXkgIT09IFN5bWJvbC50
b1N0cmluZ1RhZzsKKyAgICAgICAgYXNzZXJ0KFJlZmxlY3Quc2V0KG9iaiwgZXhpc3RpbmdLZXks
IG5zW2V4aXN0aW5nS2V5XSwgbnMpID09PSBpc1dyaXRhYmxlLCBleGlzdGluZ0tleSk7CisKKyAg
ICAgICAgYXNzZXJ0KG5zW2V4aXN0aW5nS2V5XSAhPT0gbmV3VmFsdWUsIGV4aXN0aW5nS2V5KTsK
KyAgICAgICAgYXNzZXJ0KG9ialtleGlzdGluZ0tleV0gPT09IHVuZGVmaW5lZCwgZXhpc3RpbmdL
ZXkpOworICAgIH0KKworICAgIGZvciAoY29uc3Qgbm9uRXhpc3RpbmdLZXkgb2Ygbm9uRXhpc3Rp
bmdLZXlzKSB7CisgICAgICAgIGFzc2VydChSZWZsZWN0LnNldChucywgbm9uRXhpc3RpbmdLZXks
IHt9KSA9PT0gZmFsc2UsIG5vbkV4aXN0aW5nS2V5KTsKKyAgICAgICAgYXNzZXJ0KG5zW25vbkV4
aXN0aW5nS2V5XSA9PT0gdW5kZWZpbmVkLCBub25FeGlzdGluZ0tleSk7CisKKyAgICAgICAgY29u
c3Qgb2JqID0ge307CisgICAgICAgIGFzc2VydChSZWZsZWN0LnNldChvYmosIG5vbkV4aXN0aW5n
S2V5LCB7fSwgbnMpID09PSBmYWxzZSwgbm9uRXhpc3RpbmdLZXkpOworICAgICAgICBhc3NlcnQo
b2JqW25vbkV4aXN0aW5nS2V5XSA9PT0gdW5kZWZpbmVkLCBub25FeGlzdGluZ0tleSk7CisgICAg
fQorfQorCitpbXBvcnQoIi4vcmVzb3VyY2VzL21vZHVsZS1uYW1lc3BhY2UtYWNjZXNzLmpzIiku
dGhlbihucyA9PiB7CisgICAgdGVzdERpcmVjdFNldChucyk7CisgICAgdGVzdFByb3RvdHlwZUNo
YWluU2V0KG5zKTsKKyAgICB0ZXN0UmVmbGVjdFNldChucyk7Cit9KS5jYXRjaChlcnIgPT4gewor
ICAgIHByaW50KGAhISEgJHtlcnJ9XG4ke2Vyci5zdGFja31gKTsKKyAgICAkdm0uYWJvcnQoKTsK
K30pOworCitkcmFpbk1pY3JvdGFza3MoKTsKSW5kZXg6IEpTVGVzdHMvc3RyZXNzL3B1dC1zbG93
LW5vbi1yZWlmaWVkLXN0YXRpYy1ub24tZXh0ZW5zaWJsZS5qcwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rl
c3RzL3N0cmVzcy9wdXQtc2xvdy1ub24tcmVpZmllZC1zdGF0aWMtbm9uLWV4dGVuc2libGUuanMJ
KG5vbmV4aXN0ZW50KQorKysgSlNUZXN0cy9zdHJlc3MvcHV0LXNsb3ctbm9uLXJlaWZpZWQtc3Rh
dGljLW5vbi1leHRlbnNpYmxlLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjYgQEAKKyJ1
c2Ugc3RyaWN0IjsKKworZnVuY3Rpb24gc2hvdWxkQmUoYWN0dWFsLCBleHBlY3RlZCkgeworICAg
IGlmIChhY3R1YWwgIT09IGV4cGVjdGVkKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEJhZCB2
YWx1ZTogJHthY3R1YWx9IWApOworfQorCitmdW5jdGlvbiBzaG91bGRUaHJvdyhmdW5jLCBlcnJv
ck1lc3NhZ2UpIHsKKyAgICB2YXIgZXJyb3JUaHJvd24gPSBmYWxzZTsKKyAgICB0cnkgeworICAg
ICAgICBmdW5jKCk7CisgICAgfSBjYXRjaCAoZXJyb3IpIHsKKyAgICAgICAgZXJyb3JUaHJvd24g
PSB0cnVlOworICAgICAgICBpZiAoU3RyaW5nKGVycm9yKSAhPT0gZXJyb3JNZXNzYWdlKQorICAg
ICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBCYWQgZXJyb3I6ICR7ZXJyb3J9YCk7CisgICAgfQor
ICAgIGlmICghZXJyb3JUaHJvd24pCisgICAgICAgIHRocm93IG5ldyBFcnJvcigiRGlkbid0IHRo
cm93ISIpOworfQorCisvLyBbKCkgPT4gJHZtLmNyZWF0ZUdsb2JhbE9iamVjdCgpLCBbImV2YWwi
LCAicGFyc2VJbnQiLCAiRXZhbEVycm9yIiwgIlVSSUVycm9yIiwgIlByb3h5IiwgIlJlZmxlY3Qi
XV0sCitjb25zdCB0ZXN0Q2FzZXMgPSBbCisgICAgeyBnZXRPYmplY3Q6ICgpID0+ICR2bS5jcmVh
dGVHbG9iYWxPYmplY3QoKS5Qcm9taXNlLCB0ZXN0S2V5czogWyJyYWNlIiwgImFsbFNldHRsZWQi
LCAiYW55Il0gfSwKKyAgICB7IGdldE9iamVjdDogKCkgPT4gJHZtLmNyZWF0ZUdsb2JhbE9iamVj
dCgpLlN0cmluZy5wcm90b3R5cGUsIHRlc3RLZXlzOiBbImJpZyIsICJib2xkIiwgInN1cCIsICJz
dWIiXSB9LAorICAgIHsgZ2V0T2JqZWN0OiAoKSA9PiAkdm0uY3JlYXRlR2xvYmFsT2JqZWN0KCku
RGF0YVZpZXcucHJvdG90eXBlLCB0ZXN0S2V5czogWyJnZXRJbnQxNiIsICJnZXRGbG9hdDMyIiwg
InNldEludDgiXSB9LAorICAgIHsgZ2V0T2JqZWN0OiAoKSA9PiAkdm0uY3JlYXRlR2xvYmFsT2Jq
ZWN0KCkuSW50bCwgdGVzdEtleXM6IFsiQ29sbGF0b3IiLCAiTG9jYWxlIiwgIk51bWJlckZvcm1h
dCJdIH0sCisgICAgeyBnZXRPYmplY3Q6ICgpID0+ICR2bS5jcmVhdGVHbG9iYWxPYmplY3QoKS5J
bnRsLkxvY2FsZS5wcm90b3R5cGUsIHRlc3RLZXlzOiBbIm1heGltaXplIiwgIm1pbmltaXplIiwg
InRvU3RyaW5nIl0gfSwKK107CisKKy8vIHsgZ2V0T2JqZWN0OiAoKSA9PiAkdm0uY3JlYXRlU3Rh
dGljQ3VzdG9tVmFsdWUoKSwgdGVzdEtleXM6IFsidGVzdFN0YXRpY1ZhbHVlTm9TZXR0ZXIiXSB9
LAorCitmb3IgKGNvbnN0IHsgZ2V0T2JqZWN0LCB0ZXN0S2V5cyB9IG9mIHRlc3RDYXNlcykgewor
ICAgIGZvciAoY29uc3Qga2V5IG9mIHRlc3RLZXlzKSB7CisgICAgICAgIHByaW50KGtleSk7Cisg
ICAgICAgIGNvbnN0IG9iamVjdCA9IGdldE9iamVjdCgpOworICAgICAgICBjb25zdCBwcmV2RGVz
YyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBrZXkpOworICAgICAg
ICBPYmplY3QucHJldmVudEV4dGVuc2lvbnMob2JqZWN0KTsKKworICAgICAgICBjb25zdCB2YWx1
ZSA9IHt9OworICAgICAgICBvYmplY3Rba2V5XSA9IHZhbHVlOworCisgICAgICAgIGNvbnN0IGRl
c2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwga2V5KTsKKyAgICAg
ICAgc2hvdWxkQmUoZGVzYy52YWx1ZSwgdmFsdWUpOworICAgICAgICBzaG91bGRCZShkZXNjLndy
aXRhYmxlLCBwcmV2RGVzYy53cml0YWJsZSk7CisgICAgICAgIHNob3VsZEJlKGRlc2MuZW51bWVy
YWJsZSwgcHJldkRlc2MuZW51bWVyYWJsZSk7CisgICAgICAgIHNob3VsZEJlKGRlc2MuY29uZmln
dXJhYmxlLCBwcmV2RGVzYy5jb25maWd1cmFibGUpOworICAgICAgICBzaG91bGRCZShkZXNjLmdl
dCwgcHJldkRlc2MuZ2V0KTsKKyAgICAgICAgc2hvdWxkQmUoZGVzYy5zZXQsIHByZXZEZXNjLnNl
dCk7CisgICAgfQorfQorCitmb3IgKGNvbnN0IHsgZ2V0T2JqZWN0LCB0ZXN0S2V5cyB9IG9mIHRl
c3RDYXNlcykgeworICAgIGZvciAoY29uc3Qga2V5IG9mIHRlc3RLZXlzKSB7CisgICAgICAgIHBy
aW50KGtleSk7CisgICAgICAgIGNvbnN0IG9iamVjdCA9IGdldE9iamVjdCgpOworICAgICAgICBj
b25zdCBwcmV2VmFsID0gb2JqZWN0W2tleV07CisKKyAgICAgICAgY29uc3QgaGVpciA9IE9iamVj
dC5jcmVhdGUob2JqZWN0KTsKKyAgICAgICAgT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zKGhlaXIp
OworCisgICAgICAgIHNob3VsZFRocm93KCgpID0+IHsgaGVpcltrZXldID0ge307IH0sICJUeXBl
RXJyb3I6IEF0dGVtcHRlZCB0byBhc3NpZ24gdG8gcmVhZG9ubHkgcHJvcGVydHkuIik7CisgICAg
ICAgIHNob3VsZEJlKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoaGVpciwga2V5KSwg
dW5kZWZpbmVkKTsKKworICAgICAgICBzaG91bGRCZShvYmplY3Rba2V5XSwgcHJldlZhbCk7Cisg
ICAgfQorfQpJbmRleDogSlNUZXN0cy9zdHJlc3MvcmVmbGVjdC1zZXQuanMKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gSlNUZXN0cy9zdHJlc3MvcmVmbGVjdC1zZXQuanMJKHJldmlzaW9uIDI3NTc4NykKKysrIEpT
VGVzdHMvc3RyZXNzL3JlZmxlY3Qtc2V0LmpzCSh3b3JraW5nIGNvcHkpCkBAIC02OTYsNiArNjk2
LDEyIEBAIHZhciBzeW1ib2wgPSBTeW1ib2woKTsKICAgICAgICAgdHJhbnNmZXJBcnJheUJ1ZmZl
cihvYmplY3QuYnVmZmVyKTsKICAgICAgICAgc2hvdWxkQmUoUmVmbGVjdC5zZXQob2JqZWN0LCAw
LCA0MiksIHRydWUpOwogICAgICAgICBzaG91bGRCZShSZWZsZWN0LmdldChvYmplY3QsIDApLCB1
bmRlZmluZWQpOworCisgICAgICAgIHZhciByZWNlaXZlciA9IG5ldyBUeXBlZEFycmF5KDQpOwor
ICAgICAgICB2YXIgdGFyZ2V0ID0ge307CisgICAgICAgIHNob3VsZEJlKFJlZmxlY3Quc2V0KHRh
cmdldCwgIjAuNSIsIDQyLCByZWNlaXZlciksIGZhbHNlKTsKKyAgICAgICAgc2hvdWxkQmUoUmVm
bGVjdC5nZXQodGFyZ2V0LCAiMC41IiksIHVuZGVmaW5lZCk7CisgICAgICAgIHNob3VsZEJlKFJl
ZmxlY3QuZ2V0KHJlY2VpdmVyLCAiMC41IiksIHVuZGVmaW5lZCk7CiAgICAgfTsKIH0pKCkpOwog
CkluZGV4OiBKU1Rlc3RzL3N0cmVzcy9yZWdyZXNzLTIxNzkxNi5qcwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBK
U1Rlc3RzL3N0cmVzcy9yZWdyZXNzLTIxNzkxNi5qcwkobm9uZXhpc3RlbnQpCisrKyBKU1Rlc3Rz
L3N0cmVzcy9yZWdyZXNzLTIxNzkxNi5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY2IEBA
CisidXNlIHN0cmljdCI7CisKK2Z1bmN0aW9uIHNob3VsZEJlKGFjdHVhbCwgZXhwZWN0ZWQpIHsK
KyAgICBpZiAoYWN0dWFsICE9PSBleHBlY3RlZCkKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBC
YWQgdmFsdWU6ICR7YWN0dWFsfSFgKTsKK30KKworZnVuY3Rpb24gc2hvdWxkVGhyb3coZnVuYywg
ZXJyb3JNZXNzYWdlKSB7CisgICAgdmFyIGVycm9yVGhyb3duID0gZmFsc2U7CisgICAgdHJ5IHsK
KyAgICAgICAgZnVuYygpOworICAgIH0gY2F0Y2ggKGVycm9yKSB7CisgICAgICAgIGVycm9yVGhy
b3duID0gdHJ1ZTsKKyAgICAgICAgaWYgKFN0cmluZyhlcnJvcikgIT09IGVycm9yTWVzc2FnZSkK
KyAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQmFkIGVycm9yOiAke2Vycm9yfWApOworICAg
IH0KKyAgICBpZiAoIWVycm9yVGhyb3duKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkRpZG4n
dCB0aHJvdyEiKTsKK30KKworeworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPYmplY3QucHJv
dG90eXBlLCAiZ2V0RGF5Iiwge3ZhbHVlOiAxLCB3cml0YWJsZTogZmFsc2UsIGNvbmZpZ3VyYWJs
ZTogdHJ1ZX0pOworICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSgpOworICAgIGRhdGUuZ2V0RGF5
ID0gMjsKKyAgICBzaG91bGRCZShkYXRlLmdldERheSwgMik7CisgICAgc2hvdWxkQmUodHlwZW9m
IERhdGUucHJvdG90eXBlLmdldERheSwgImZ1bmN0aW9uIik7CisgICAgZGVsZXRlIE9iamVjdC5w
cm90b3R5cGUuZ2V0RGF5OworfQorCisKK2NvbnN0IHByaW1pdGl2ZXMgPSBbdHJ1ZSwgMSwgIiIs
IFN5bWJvbCgpLCAxbl07CisKKyhmdW5jdGlvbiB0ZXN0U3RhdGljQ3VzdG9tQWNjZXNzb3IoKSB7
CisgICAgZm9yIChjb25zdCBwcmltaXRpdmUgb2YgcHJpbWl0aXZlcykgeworICAgICAgICBjb25z
dCBwcmltaXRpdmVQcm90b3R5cGUgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YocHJpbWl0aXZlKTsK
KyAgICAgICAgY29uc3Qgc3RhdGljQ3VzdG9tQWNjZXNzb3IgPSAkdm0uY3JlYXRlU3RhdGljQ3Vz
dG9tQWNjZXNzb3IoKTsKKyAgICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKHByaW1pdGl2ZVBy
b3RvdHlwZSwgc3RhdGljQ3VzdG9tQWNjZXNzb3IpOworCisgICAgICAgIHNob3VsZFRocm93KCgp
ID0+IHsgcHJpbWl0aXZlLnRlc3RTdGF0aWNBY2Nlc3NvclJlYWRPbmx5ID0gMTsgfSwgIlR5cGVF
cnJvcjogQXR0ZW1wdGVkIHRvIGFzc2lnbiB0byByZWFkb25seSBwcm9wZXJ0eS4iKTsKKworICAg
ICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDEwMDA7IGkrKykgeworICAgICAgICAgICAgcHJpbWl0
aXZlLnRlc3RTdGF0aWNBY2Nlc3NvciA9IGk7CisgICAgICAgICAgICBzaG91bGRCZShwcmltaXRp
dmVQcm90b3R5cGUudGVzdEZpZWxkLCBpKTsKKyAgICAgICAgfQorCisgICAgICAgIGRlbGV0ZSBw
cmltaXRpdmVQcm90b3R5cGUudGVzdEZpZWxkOworICAgICAgICBPYmplY3Quc2V0UHJvdG90eXBl
T2YocHJpbWl0aXZlUHJvdG90eXBlLCBPYmplY3QucHJvdG90eXBlKTsKKyAgICB9Cit9KSgpOwor
CisoZnVuY3Rpb24gdGVzdFN0YXRpY0N1c3RvbVZhbHVlKCkgeworICAgIGZvciAoY29uc3QgcHJp
bWl0aXZlIG9mIHByaW1pdGl2ZXMpIHsKKyAgICAgICAgY29uc3QgcHJpbWl0aXZlUHJvdG90eXBl
ID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHByaW1pdGl2ZSk7CisgICAgICAgIGNvbnN0IHN0YXRp
Y0N1c3RvbVZhbHVlID0gJHZtLmNyZWF0ZVN0YXRpY0N1c3RvbVZhbHVlKCk7CisgICAgICAgIE9i
amVjdC5zZXRQcm90b3R5cGVPZihwcmltaXRpdmVQcm90b3R5cGUsIHN0YXRpY0N1c3RvbVZhbHVl
KTsKKworICAgICAgICBzaG91bGRUaHJvdygoKSA9PiB7IHByaW1pdGl2ZS50ZXN0U3RhdGljVmFs
dWVOb1NldHRlciA9IDE7IH0sICJUeXBlRXJyb3I6IEF0dGVtcHRlZCB0byBhc3NpZ24gdG8gcmVh
ZG9ubHkgcHJvcGVydHkuIik7CisgICAgICAgIHNob3VsZFRocm93KCgpID0+IHsgcHJpbWl0aXZl
LnRlc3RTdGF0aWNWYWx1ZVJlYWRPbmx5ID0gMTsgfSwgIlR5cGVFcnJvcjogQXR0ZW1wdGVkIHRv
IGFzc2lnbiB0byByZWFkb25seSBwcm9wZXJ0eS4iKTsKKworICAgICAgICBwcmltaXRpdmUudGVz
dFN0YXRpY1ZhbHVlID0gMTsKKyAgICAgICAgc2hvdWxkQmUoc3RhdGljQ3VzdG9tVmFsdWUudGVz
dFN0YXRpY1ZhbHVlLCAxKTsKKyAgICAgICAgc2hvdWxkVGhyb3coKCkgPT4geyBwcmltaXRpdmUu
dGVzdFN0YXRpY1ZhbHVlID0gMTsgfSwgIlR5cGVFcnJvcjogQXR0ZW1wdGVkIHRvIGFzc2lnbiB0
byByZWFkb25seSBwcm9wZXJ0eS4iKTsKKworICAgICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2Yo
cHJpbWl0aXZlUHJvdG90eXBlLCBPYmplY3QucHJvdG90eXBlKTsKKyAgICB9Cit9KSgpOwpJbmRl
eDogSlNUZXN0cy9zdHJlc3MvdHlwZWQtYXJyYXktY2Fub25pY2FsLW51bWVyaWMtaW5kZXgtc3Ry
aW5nLXNldC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0cmVzcy90eXBlZC1hcnJheS1jYW5v
bmljYWwtbnVtZXJpYy1pbmRleC1zdHJpbmctc2V0LmpzCShub25leGlzdGVudCkKKysrIEpTVGVz
dHMvc3RyZXNzL3R5cGVkLWFycmF5LWNhbm9uaWNhbC1udW1lcmljLWluZGV4LXN0cmluZy1zZXQu
anMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzNSBAQAorJ3VzZSBzdHJpY3QnOworY29uc3Qg
VHlwZWRBcnJheXMgPSBbVWludDhDbGFtcGVkQXJyYXksIFVpbnQ4QXJyYXksIFVpbnQxNkFycmF5
LCBVaW50MzJBcnJheSwgSW50OEFycmF5LCBJbnQxNkFycmF5LCBJbnQzMkFycmF5LCBGbG9hdDMy
QXJyYXksIEZsb2F0NjRBcnJheV07Citjb25zdCBjYW5vbmljYWxOdW1lcmljSW5kZXhTdHJpbmdz
ID0gWyctMCcsICctMScsICctMy4xNCcsICdJbmZpbml0eScsICctSW5maW5pdHknLCAnTmFOJywg
JzAuMScsICc0Mjk0OTY3Mjk1JywgJzQyOTQ5NjcyOTYnXTsKKworZnVuY3Rpb24gYXNzZXJ0KHgs
IGtleSkgeworICAgIGlmICgheCkKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBCYWQgYXNzZXJ0
aW9uISBLZXk6ICcke2tleX0nYCk7Cit9CisKK2ZvciAoY29uc3QgVHlwZWRBcnJheSBvZiBUeXBl
ZEFycmF5cykgeworICAgIGZvciAoY29uc3Qga2V5IG9mIGNhbm9uaWNhbE51bWVyaWNJbmRleFN0
cmluZ3MpIHsKKyAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFR5cGVkQXJyYXkucHJvdG90
eXBlLCBrZXksIHsKKyAgICAgICAgICAgIHNldCgpIHsKKyAgICAgICAgICAgICAgICB0aHJvdyBu
ZXcgRXJyb3IoYCR7VHlwZWRBcnJheS5uYW1lfS5wcm90b3R5cGVbJyR7a2V5fSddIHNldHRlciBz
aG91bGQgYmUgdW5yZWFjaGFibGUhYCk7CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgY29u
ZmlndXJhYmxlOiB0cnVlLAorICAgICAgICB9KTsKKworICAgICAgICBjb25zdCBhc3NlcnRQcm90
b3R5cGVLZXlJc0lnbm9yZWQgPSAoKSA9PiB7CisgICAgICAgICAgICBjb25zdCB0QSA9IG5ldyBU
eXBlZEFycmF5OworICAgICAgICAgICAgdEFba2V5XSA9IDE7CisgICAgICAgICAgICBhc3NlcnQo
IXRBLmhhc093blByb3BlcnR5KGtleSksIGtleSk7CisKKyAgICAgICAgICAgIGNvbnN0IGhlaXIg
PSBPYmplY3QuY3JlYXRlKG5ldyBUeXBlZEFycmF5KTsKKyAgICAgICAgICAgIGhlaXJba2V5XSA9
IDI7CisgICAgICAgICAgICBhc3NlcnQoIWhlaXIuaGFzT3duUHJvcGVydHkoa2V5KSwga2V5KTsK
KyAgICAgICAgfTsKKworICAgICAgICBhc3NlcnRQcm90b3R5cGVLZXlJc0lnbm9yZWQoKTsKKyAg
ICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFR5cGVkQXJyYXkucHJvdG90eXBlLCBrZXksIHt3
cml0YWJsZTogZmFsc2V9KTsKKyAgICAgICAgYXNzZXJ0UHJvdG90eXBlS2V5SXNJZ25vcmVkKCk7
CisKKyAgICAgICAgYXNzZXJ0KGRlbGV0ZSBUeXBlZEFycmF5LnByb3RvdHlwZVtrZXldLCBrZXkp
OworICAgIH0KK30KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjc1Nzg3
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAt
MSwzICsxLDk5IEBACisyMDIxLTA0LTA5ICBBbGV4ZXkgU2h2YXlrYSAgPHNodmFpa2FsZXNoQGdt
YWlsLmNvbT4KKworICAgICAgICBJbnRyb2R1Y2UgT3ZlcnJpZGVzUHV0W0J5SW5kZXhdIHR5cGUg
aW5mbyBmbGFncworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjE3OTE2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgKiBBUEkvSlNDYWxsYmFja09iamVjdC5oOgorICAgICAgICAqIEFQSS9KU0NhbGxiYWNrT2Jq
ZWN0RnVuY3Rpb25zLmg6CisgICAgICAgIChKU0M6OkpTQ2FsbGJhY2tPYmplY3Q8UGFyZW50Pjo6
cHV0KToKKyAgICAgICAgKiBBUEkvdGVzdHMvdGVzdGFwaVNjcmlwdHMvdGVzdGFwaS5qczoKKyAg
ICAgICAgKiBkZWJ1Z2dlci9EZWJ1Z2dlclNjb3BlLmg6CisgICAgICAgICogcnVudGltZS9DbGFz
c0luZm8uaDoKKyAgICAgICAgKiBydW50aW1lL0Nsb25lZEFyZ3VtZW50cy5oOgorICAgICAgICAq
IHJ1bnRpbWUvQ3VzdG9tR2V0dGVyU2V0dGVyLmNwcDoKKyAgICAgICAgKEpTQzo6Y2FsbEN1c3Rv
bVNldHRlcik6IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9DdXN0b21HZXR0ZXJTZXR0ZXIu
aDoKKyAgICAgICAgKiBydW50aW1lL0Vycm9yQ29uc3RydWN0b3IuaDoKKyAgICAgICAgKiBydW50
aW1lL0Vycm9ySW5zdGFuY2UuaDoKKyAgICAgICAgKiBydW50aW1lL0dlbmVyaWNBcmd1bWVudHMu
aDoKKyAgICAgICAgKiBydW50aW1lL0dlbmVyaWNBcmd1bWVudHNJbmxpbmVzLmg6CisgICAgICAg
IChKU0M6OkdlbmVyaWNBcmd1bWVudHM8VHlwZT46OnB1dCk6CisgICAgICAgICogcnVudGltZS9H
ZXR0ZXJTZXR0ZXIuaDoKKyAgICAgICAgKiBydW50aW1lL0pTQXJyYXkuY3BwOgorICAgICAgICAo
SlNDOjpKU0FycmF5OjpwdXQpOgorICAgICAgICAqIHJ1bnRpbWUvSlNBcnJheS5oOgorICAgICAg
ICAqIHJ1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuY3BwOgorICAgICAgICAoSlNDOjpKU0FycmF5
QnVmZmVyVmlldzo6cHV0KTogRGVsZXRlZC4KKyAgICAgICAgKiBydW50aW1lL0pTQXJyYXlCdWZm
ZXJWaWV3Lmg6CisgICAgICAgICogcnVudGltZS9KU0NKU1ZhbHVlLmNwcDoKKyAgICAgICAgKEpT
Qzo6SlNWYWx1ZTo6cHV0VG9QcmltaXRpdmUpOgorICAgICAgICAqIHJ1bnRpbWUvSlNDZWxsLmNw
cDoKKyAgICAgICAgKEpTQzo6SlNDZWxsOjpkb1B1dFByb3BlcnR5U2VjdXJpdHlDaGVjayk6IERl
bGV0ZWQuCisgICAgICAgICogcnVudGltZS9KU0NlbGwuaDoKKyAgICAgICAgKiBydW50aW1lL0pT
RnVuY3Rpb24uY3BwOgorICAgICAgICAoSlNDOjpKU0Z1bmN0aW9uOjpwdXQpOgorICAgICAgICAq
IHJ1bnRpbWUvSlNGdW5jdGlvbi5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNHZW5lcmljVHlwZWRB
cnJheVZpZXcuaDoKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsTGV4aWNhbEVudmlyb25tZW50
Lmg6CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHA6CisgICAgICAgIChKU0M6
OkpTR2xvYmFsT2JqZWN0OjpwdXQpOgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3Qu
aDoKKyAgICAgICAgKiBydW50aW1lL0pTTGV4aWNhbEVudmlyb25tZW50Lmg6CisgICAgICAgICog
cnVudGltZS9KU01vZHVsZUVudmlyb25tZW50Lmg6CisgICAgICAgICogcnVudGltZS9KU01vZHVs
ZU5hbWVzcGFjZU9iamVjdC5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNPYmplY3QuY3BwOgorICAg
ICAgICAoSlNDOjpKU09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90KToKKyAgICAgICAgKEpTQzo6
b3JkaW5hcnlTZXRTbG93KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1dCk6CisgICAgICAg
IChKU0M6OkpTT2JqZWN0OjpwdXRJbmxpbmVTbG93KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6
OmRlZmluZVByb3BlcnR5T25SZWNlaXZlcik6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpkZWZp
bmVQcm9wZXJ0eU9uUmVjZWl2ZXJTbG93KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmRvUHV0
UHJvcGVydHlTZWN1cml0eUNoZWNrKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6
OnByb3RvdHlwZUNoYWluTWF5SW50ZXJjZXB0U3RvcmVUbyk6IERlbGV0ZWQuCisgICAgICAgICog
cnVudGltZS9KU09iamVjdC5oOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cHV0QnlJbmRleElu
bGluZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3QpOgorICAg
ICAgICAoSlNDOjpKU09iamVjdDo6cHV0RGlyZWN0KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6
OmRvUHV0UHJvcGVydHlTZWN1cml0eUNoZWNrKTogRGVsZXRlZC4KKyAgICAgICAgKiBydW50aW1l
L0pTT2JqZWN0SW5saW5lcy5oOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Y2FuUGVyZm9ybUZh
c3RQdXRJbmxpbmVFeGNsdWRpbmdQcm90byk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpwdXRJ
bmxpbmVGb3JKU09iamVjdCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpwdXRJbmxpbmVGYXN0
KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1dERpcmVjdEludGVybmFsKToKKyAgICAgICAg
KiBydW50aW1lL0pTUHJveHkuaDoKKyAgICAgICAgKiBydW50aW1lL0pTVHlwZUluZm8uaDoKKyAg
ICAgICAgKEpTQzo6VHlwZUluZm86Omhhc1N0YXRpY1Byb3BlcnR5VGFibGUgY29uc3QpOgorICAg
ICAgICAoSlNDOjpUeXBlSW5mbzo6b3ZlcnJpZGVzUHV0IGNvbnN0KToKKyAgICAgICAgKEpTQzo6
VHlwZUluZm86OmdldE93blByb3BlcnR5U2xvdE1heUJlV3JvbmdBYm91dERvbnRFbnVtIGNvbnN0
KToKKyAgICAgICAgKEpTQzo6VHlwZUluZm86Omhhc1B1dFByb3BlcnR5U2VjdXJpdHlDaGVjayBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9Mb29rdXAuaDoKKyAgICAgICAgKEpT
Qzo6cHV0RW50cnkpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpsb29rdXBQdXQpOiBEZWxldGVk
LgorICAgICAgICAqIHJ1bnRpbWUvUHJvcGVydHlTbG90Lmg6CisgICAgICAgICogcnVudGltZS9Q
cm94eU9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OlByb3h5T2JqZWN0OjpwdXQpOgorICAgICAg
ICAqIHJ1bnRpbWUvUHJveHlPYmplY3QuaDoKKyAgICAgICAgKiBydW50aW1lL1B1dFByb3BlcnR5
U2xvdC5oOgorICAgICAgICAoSlNDOjpQdXRQcm9wZXJ0eVNsb3Q6OmlzVGFpbnRlZEJ5T3BhcXVl
T2JqZWN0IGNvbnN0KToKKyAgICAgICAgKEpTQzo6UHV0UHJvcGVydHlTbG90OjpzZXRJc1RhaW50
ZWRCeU9wYXF1ZU9iamVjdCk6CisgICAgICAgICogcnVudGltZS9SZWZsZWN0T2JqZWN0LmNwcDoK
KyAgICAgICAgKEpTQzo6SlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKToKKyAgICAgICAgKiBydW50
aW1lL1JlZ0V4cE9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OlJlZ0V4cE9iamVjdDo6cHV0KToK
KyAgICAgICAgKiBydW50aW1lL1JlZ0V4cE9iamVjdC5oOgorICAgICAgICAqIHJ1bnRpbWUvU3Ry
aW5nT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6U3RyaW5nT2JqZWN0OjpwdXQpOgorICAgICAg
ICAqIHJ1bnRpbWUvU3RyaW5nT2JqZWN0Lmg6CisgICAgICAgICogcnVudGltZS9TdHJpbmdQcm90
b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpTdHJpbmdQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9u
KToKKyAgICAgICAgKEpTQzo6U3RyaW5nUHJvdG90eXBlOjpjcmVhdGUpOgorICAgICAgICAqIHJ1
bnRpbWUvU3RyaW5nUHJvdG90eXBlLmg6CisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmUuY3Bw
OgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnZhbGlkYXRlRmxhZ3MpOgorICAgICAgICAqIHRv
b2xzL0pTRG9sbGFyVk0uY3BwOgorCiAyMDIxLTA0LTA4ICBLaGVtIFJhaiAgPHJhai5raGVtQGdt
YWlsLmNvbT4KIAogICAgICAgICBbV1BFXSBCdWlsZCBmaXhlcyBmb3IgbXVzbCBDIGxpYnJhcnkg
b24gTGludXgKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVj
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09i
amVjdC5oCShyZXZpc2lvbiAyNzU3ODcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pT
Q2FsbGJhY2tPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMTI5LDcgKzEyOSw3IEBAIHRlbXBs
YXRlIDxjbGFzcyBQYXJlbnQ+CiBjbGFzcyBKU0NhbGxiYWNrT2JqZWN0IGZpbmFsIDogcHVibGlj
IFBhcmVudCB7CiBwdWJsaWM6CiAgICAgdXNpbmcgQmFzZSA9IFBhcmVudDsKLSAgICBzdGF0aWMg
Y29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3Mg
fCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNHZXRPd25TcGVjaWFsUHJv
cGVydHlOYW1lcyB8IE92ZXJyaWRlc0dldENhbGxEYXRhIHwgSW50ZXJjZXB0c0dldE93blByb3Bl
cnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8IEltcGxlbWVudHNIYXNJbnN0
YW5jZSB8IFByb2hpYml0c1Byb3BlcnR5Q2FjaGluZyB8IEdldE93blByb3BlcnR5U2xvdE1heUJl
V3JvbmdBYm91dERvbnRFbnVtOworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0
dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5
U2xvdCB8IE92ZXJyaWRlc0dldE93blNwZWNpYWxQcm9wZXJ0eU5hbWVzIHwgT3ZlcnJpZGVzR2V0
Q2FsbERhdGEgfCBPdmVycmlkZXNQdXQgfCBJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJ
bmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgSW1wbGVtZW50c0hhc0luc3RhbmNlIHwgUHJv
aGliaXRzUHJvcGVydHlDYWNoaW5nIHwgR2V0T3duUHJvcGVydHlTbG90TWF5QmVXcm9uZ0Fib3V0
RG9udEVudW07CiAgICAgc3RhdGljX2Fzc2VydCghKFN0cnVjdHVyZUZsYWdzICYgSW1wbGVtZW50
c0RlZmF1bHRIYXNJbnN0YW5jZSksICJ1c2luZyBjdXN0b21IYXNJbnN0YW5jZSIpOwogCiAgICAg
fkpTQ2FsbGJhY2tPYmplY3QoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlND
YWxsYmFja09iamVjdEZ1bmN0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdEZ1bmN0aW9ucy5oCShyZXZpc2lvbiAyNzU3ODcpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3RGdW5jdGlvbnMuaAko
d29ya2luZyBjb3B5KQpAQCAtMjYxLDYgKzI2MSw5IEBAIGJvb2wgSlNDYWxsYmFja09iamVjdDxQ
YXJlbnQ+OjpwdXQoSlNDZWwKICAgICBKU09iamVjdFJlZiB0aGlzUmVmID0gdG9SZWYoanNDYXN0
PEpTT2JqZWN0Kj4odGhpc09iamVjdCkpOwogICAgIFJlZlB0cjxPcGFxdWVKU1N0cmluZz4gcHJv
cGVydHlOYW1lUmVmOwogICAgIEpTVmFsdWVSZWYgdmFsdWVSZWYgPSB0b1JlZihnbG9iYWxPYmpl
Y3QsIHZhbHVlKTsKKworICAgIGlmIChVTkxJS0VMWShpc1RoaXNWYWx1ZUFsdGVyZWQoc2xvdCwg
dGhpc09iamVjdCkpKQorICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIFBhcmVudDo6
cHV0KHRoaXNPYmplY3QsIGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCkp
OwogICAgIAogICAgIGlmIChTdHJpbmdJbXBsKiBuYW1lID0gcHJvcGVydHlOYW1lLnVpZCgpKSB7
CiAgICAgICAgIGZvciAoSlNDbGFzc1JlZiBqc0NsYXNzID0gdGhpc09iamVjdC0+Y2xhc3NSZWYo
KTsganNDbGFzczsganNDbGFzcyA9IGpzQ2xhc3MtPnBhcmVudENsYXNzKSB7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL3Rlc3RhcGlTY3JpcHRzL3Rlc3RhcGkuanMKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy90ZXN0YXBpU2NyaXB0
cy90ZXN0YXBpLmpzCShyZXZpc2lvbiAyNzU3ODcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
QVBJL3Rlc3RzL3Rlc3RhcGlTY3JpcHRzL3Rlc3RhcGkuanMJKHdvcmtpbmcgY29weSkKQEAgLTE5
OCw2ICsxOTgsMjYgQEAgc2hvdWxkQmUoIk15T2JqZWN0Lm51bGxHZXRTZXQiLCAxKTsKIHNob3Vs
ZFRocm93KCJNeU9iamVjdC5udWxsQ2FsbCgpIik7CiBzaG91bGRUaHJvdygiTXlPYmplY3QuaGFz
UHJvcGVydHlMaWUiKTsKIAordmFyIE15T2JqZWN0SGVpciA9IE9iamVjdC5jcmVhdGUoTXlPYmpl
Y3QpOworTXlPYmplY3RIZWlyLnRocm93T25TZXQgPSAyMjsKK3ZhciBNeU9iamVjdEhlaXJUaHJv
d09uU2V0RGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTXlPYmpl
Y3RIZWlyLCAidGhyb3dPblNldCIpOworc2hvdWxkQmUoInR5cGVvZiBNeU9iamVjdEhlaXJUaHJv
d09uU2V0RGVzY3JpcHRvciIsICJvYmplY3QiKTsKK3Nob3VsZEJlKCJNeU9iamVjdEhlaXJUaHJv
d09uU2V0RGVzY3JpcHRvci52YWx1ZSIsIDIyKTsKK3Nob3VsZEJlKCJNeU9iamVjdEhlaXJUaHJv
d09uU2V0RGVzY3JpcHRvci53cml0YWJsZSIsIHRydWUpOworc2hvdWxkQmUoIk15T2JqZWN0SGVp
clRocm93T25TZXREZXNjcmlwdG9yLmVudW1lcmFibGUiLCB0cnVlKTsKK3Nob3VsZEJlKCJNeU9i
amVjdEhlaXJUaHJvd09uU2V0RGVzY3JpcHRvci5jb25maWd1cmFibGUiLCB0cnVlKTsKK3Nob3Vs
ZFRocm93KCJNeU9iamVjdC50aHJvd09uU2V0ID0gMjIiKTsKKwordmFyIGdsb2JhbE9iamVjdEhl
aXIgPSBPYmplY3QuY3JlYXRlKHRoaXMpOworZ2xvYmFsT2JqZWN0SGVpci5nbG9iYWxTdGF0aWNW
YWx1ZTIgPSAzMzsKK3ZhciBnbG9iYWxPYmplY3RIZWlyR2xvYmFsU3RhdGljVmFsdWUyRGVzY3Jp
cHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsT2JqZWN0SGVpciwg
Imdsb2JhbFN0YXRpY1ZhbHVlMiIpOworc2hvdWxkQmUoInR5cGVvZiBnbG9iYWxPYmplY3RIZWly
R2xvYmFsU3RhdGljVmFsdWUyRGVzY3JpcHRvciIsICJvYmplY3QiKTsKK3Nob3VsZEJlKCJnbG9i
YWxPYmplY3RIZWlyR2xvYmFsU3RhdGljVmFsdWUyRGVzY3JpcHRvci52YWx1ZSIsIDMzKTsKK3No
b3VsZEJlKCJnbG9iYWxPYmplY3RIZWlyR2xvYmFsU3RhdGljVmFsdWUyRGVzY3JpcHRvci53cml0
YWJsZSIsIHRydWUpOworc2hvdWxkQmUoImdsb2JhbE9iamVjdEhlaXJHbG9iYWxTdGF0aWNWYWx1
ZTJEZXNjcmlwdG9yLmVudW1lcmFibGUiLCB0cnVlKTsKK3Nob3VsZEJlKCJnbG9iYWxPYmplY3RI
ZWlyR2xvYmFsU3RhdGljVmFsdWUyRGVzY3JpcHRvci5jb25maWd1cmFibGUiLCB0cnVlKTsKK3No
b3VsZEJlKCJ0aGlzLmdsb2JhbFN0YXRpY1ZhbHVlMiIsIDMpOworCiBkZXJpdmVkID0gbmV3IERl
cml2ZWQoKTsKIAogc2hvdWxkQmUoImRlcml2ZWQgaW5zdGFuY2VvZiBEZXJpdmVkIiwgdHJ1ZSk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXJTY29wZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlclNjb3Bl
LmgJKHJldmlzaW9uIDI3NTc4NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9E
ZWJ1Z2dlclNjb3BlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDcgKzM2LDcgQEAgY2xhc3MgSlNT
Y29wZTsKIGNsYXNzIERlYnVnZ2VyU2NvcGUgZmluYWwgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVj
dCB7CiBwdWJsaWM6CiAgICAgdXNpbmcgQmFzZSA9IEpTTm9uRmluYWxPYmplY3Q7Ci0gICAgc3Rh
dGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZs
YWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVy
dHlOYW1lczsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0g
QmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVy
cmlkZXNHZXRPd25Qcm9wZXJ0eU5hbWVzIHwgT3ZlcnJpZGVzUHV0OwogCiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+CiAgICAgc3RhdGljIElzb1N1
YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9DbGFzc0luZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9DbGFzc0luZm8uaAkocmV2aXNpb24gMjc1Nzg3KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQ2xhc3NJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTY4LDkgKzY4LDYg
QEAgc3RydWN0IE1ldGhvZFRhYmxlIHsKICAgICB1c2luZyBHZXRPd25Qcm9wZXJ0eVNsb3RCeUlu
ZGV4RnVuY3Rpb25QdHIgPSBib29sICgqKShKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgdW5z
aWduZWQsIFByb3BlcnR5U2xvdCYpOwogICAgIEdldE93blByb3BlcnR5U2xvdEJ5SW5kZXhGdW5j
dGlvblB0ciBNRVRIT0RfVEFCTEVfRU5UUlkoZ2V0T3duUHJvcGVydHlTbG90QnlJbmRleCk7CiAK
LSAgICB1c2luZyBEb1B1dFByb3BlcnR5U2VjdXJpdHlDaGVja0Z1bmN0aW9uUHRyID0gdm9pZCAo
KikoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwgUHV0UHJvcGVydHlT
bG90Jik7Ci0gICAgRG9QdXRQcm9wZXJ0eVNlY3VyaXR5Q2hlY2tGdW5jdGlvblB0ciBNRVRIT0Rf
VEFCTEVfRU5UUlkoZG9QdXRQcm9wZXJ0eVNlY3VyaXR5Q2hlY2spOwotCiAgICAgdXNpbmcgVG9U
aGlzRnVuY3Rpb25QdHIgPSBKU1ZhbHVlICgqKShKU0NlbGwqLCBKU0dsb2JhbE9iamVjdCosIEVD
TUFNb2RlKTsKICAgICBUb1RoaXNGdW5jdGlvblB0ciBNRVRIT0RfVEFCTEVfRU5UUlkodG9UaGlz
KTsKIApAQCAtMTY0LDcgKzE2MSw2IEBAIHN0cnVjdCBNZXRob2RUYWJsZSB7CiAgICAgICAgICZD
bGFzc05hbWU6OmRlbGV0ZVByb3BlcnR5QnlJbmRleCwgXAogICAgICAgICAmQ2xhc3NOYW1lOjpn
ZXRPd25Qcm9wZXJ0eVNsb3QsIFwKICAgICAgICAgJkNsYXNzTmFtZTo6Z2V0T3duUHJvcGVydHlT
bG90QnlJbmRleCwgXAotICAgICAgICAmQ2xhc3NOYW1lOjpkb1B1dFByb3BlcnR5U2VjdXJpdHlD
aGVjaywgXAogICAgICAgICAmQ2xhc3NOYW1lOjp0b1RoaXMsIFwKICAgICAgICAgJkNsYXNzTmFt
ZTo6ZGVmYXVsdFZhbHVlLCBcCiAgICAgICAgICZDbGFzc05hbWU6OmdldE93blByb3BlcnR5TmFt
ZXMsIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Nsb25lZEFyZ3VtZW50
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Nsb25lZEFy
Z3VtZW50cy5oCShyZXZpc2lvbiAyNzU3ODcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9DbG9uZWRBcmd1bWVudHMuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsNyArNDAsNyBAQCBu
YW1lc3BhY2UgSlNDIHsKIGNsYXNzIENsb25lZEFyZ3VtZW50cyBmaW5hbCA6IHB1YmxpYyBKU05v
bkZpbmFsT2JqZWN0IHsKIHB1YmxpYzoKICAgICB1c2luZyBCYXNlID0gSlNOb25GaW5hbE9iamVj
dDsKLSAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6
U3RydWN0dXJlRmxhZ3MgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNH
ZXRPd25TcGVjaWFsUHJvcGVydHlOYW1lczsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVk
IFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBPdmVycmlkZXNHZXRPd25Q
cm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNHZXRPd25TcGVjaWFsUHJvcGVydHlOYW1lcyB8IE92ZXJy
aWRlc1B1dDsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2Vz
cyBtb2RlPgogICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ3VzdG9tR2V0dGVyU2V0dGVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DdXN0b21HZXR0ZXJT
ZXR0ZXIuY3BwCShyZXZpc2lvbiAyNzU3ODcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9DdXN0b21HZXR0ZXJTZXR0ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwyOCArMjYs
MTAgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJDdXN0b21HZXR0ZXJTZXR0ZXIu
aCIKIAotI2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgiCi0jaW5jbHVkZSA8d3RmL0Fzc2Vy
dGlvbnMuaD4KLQogbmFtZXNwYWNlIEpTQyB7CiAKIFNUQVRJQ19BU1NFUlRfSVNfVFJJVklBTExZ
X0RFU1RSVUNUSUJMRShDdXN0b21HZXR0ZXJTZXR0ZXIpOwogCiBjb25zdCBDbGFzc0luZm8gQ3Vz
dG9tR2V0dGVyU2V0dGVyOjpzX2luZm8gPSB7ICJDdXN0b21HZXR0ZXJTZXR0ZXIiLCBudWxscHRy
LCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEN1c3RvbUdldHRlclNldHRl
cikgfTsKIAotVHJpU3RhdGUgY2FsbEN1c3RvbVNldHRlcihKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBDdXN0b21HZXR0ZXJTZXR0ZXI6OkN1c3RvbVNldHRlciBzZXR0ZXIsIGJvb2wgaXNB
Y2Nlc3NvciwgSlNPYmplY3QqIHNsb3RCYXNlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgSlNWYWx1ZSB2
YWx1ZSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKLXsKLSAgICBpZiAoaXNBY2Nlc3Nvcikg
ewotICAgICAgICBpZiAoIXNldHRlcikKLSAgICAgICAgICAgIHJldHVybiBUcmlTdGF0ZTo6RmFs
c2U7Ci0gICAgICAgIHNldHRlcihnbG9iYWxPYmplY3QsIEpTVmFsdWU6OmVuY29kZSh0aGlzVmFs
dWUpLCBKU1ZhbHVlOjplbmNvZGUodmFsdWUpLCBwcm9wZXJ0eU5hbWUpOwotICAgICAgICAvLyBB
bHdheXMgcmV0dXJuIHRydWUgaWYgdGhlcmUgaXMgYSBzZXR0ZXIgYW5kIGl0IGlzIG9ic2VydmVk
IGFzIGFuIGFjY2Vzc29yIHRvIHVzZXJzLgotICAgICAgICByZXR1cm4gVHJpU3RhdGU6OlRydWU7
Ci0gICAgfQotCi0gICAgaWYgKCFzZXR0ZXIpCi0gICAgICAgIHJldHVybiBUcmlTdGF0ZTo6SW5k
ZXRlcm1pbmF0ZTsKLSAgICByZXR1cm4gdHJpU3RhdGUoc2V0dGVyKGdsb2JhbE9iamVjdCwgSlNW
YWx1ZTo6ZW5jb2RlKHNsb3RCYXNlKSwgSlNWYWx1ZTo6ZW5jb2RlKHZhbHVlKSwgcHJvcGVydHlO
YW1lKSk7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQ3VzdG9tR2V0dGVyU2V0dGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQ3VzdG9tR2V0dGVyU2V0dGVyLmgJKHJldmlzaW9uIDI3NTc4
NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0N1c3RvbUdldHRlclNldHRlci5o
CSh3b3JraW5nIGNvcHkpCkBAIC03Niw2ICs3Niw0IEBAIHByaXZhdGU6CiAgICAgQ3VzdG9tU2V0
dGVyIG1fc2V0dGVyOwogfTsKIAotSlNfRVhQT1JUX1BSSVZBVEUgVHJpU3RhdGUgY2FsbEN1c3Rv
bVNldHRlcihKU0dsb2JhbE9iamVjdCosIEN1c3RvbUdldHRlclNldHRlcjo6Q3VzdG9tU2V0dGVy
LCBib29sIGlzQWNjZXNzb3IsIEpTT2JqZWN0KiBzbG90QmFzZSwgSlNWYWx1ZSB0aGlzVmFsdWUs
IEpTVmFsdWUsIFByb3BlcnR5TmFtZSk7Ci0KIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JDb25zdHJ1Y3Rvci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9yQ29uc3RydWN0b3IuaAkocmV2
aXNpb24gMjc1Nzg3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JDb25z
dHJ1Y3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBAIGNsYXNzIEdldHRlclNl
dHRlcjsKIGNsYXNzIEVycm9yQ29uc3RydWN0b3IgZmluYWwgOiBwdWJsaWMgSW50ZXJuYWxGdW5j
dGlvbiB7CiBwdWJsaWM6CiAgICAgdXNpbmcgQmFzZSA9IEludGVybmFsRnVuY3Rpb247CisgICAg
c3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVy
ZUZsYWdzIHwgT3ZlcnJpZGVzUHV0OwogCiAgICAgc3RhdGljIEVycm9yQ29uc3RydWN0b3IqIGNy
ZWF0ZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBFcnJvclByb3RvdHlwZSogZXJyb3JQ
cm90b3R5cGUsIEdldHRlclNldHRlciopCiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvRXJyb3JJbnN0YW5jZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0Vycm9ySW5zdGFuY2UuaAkocmV2aXNpb24gMjc1Nzg3KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JJbnN0YW5jZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zMCw3ICszMCw3IEBAIG5hbWVzcGFjZSBKU0MgewogY2xhc3MgRXJyb3JJbnN0YW5jZSA6
IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKIHB1YmxpYzoKICAgICB1c2luZyBCYXNlID0gSlNO
b25GaW5hbE9iamVjdDsKLSAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZs
YWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3Qg
fCBPdmVycmlkZXNHZXRPd25TcGVjaWFsUHJvcGVydHlOYW1lczsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBPdmVy
cmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNHZXRPd25TcGVjaWFsUHJvcGVydHlO
YW1lcyB8IE92ZXJyaWRlc1B1dDsKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNEZXN0
cnVjdGlvbiA9IHRydWU7CiAKICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCogY2VsbCkK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNBcmd1bWVudHMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljQXJndW1l
bnRzLmgJKHJldmlzaW9uIDI3NTc4NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0dlbmVyaWNBcmd1bWVudHMuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNyBAQCB0ZW1w
bGF0ZTx0eXBlbmFtZSBUeXBlPgogY2xhc3MgR2VuZXJpY0FyZ3VtZW50cyA6IHB1YmxpYyBKU05v
bkZpbmFsT2JqZWN0IHsKIHB1YmxpYzoKICAgICB0eXBlZGVmIEpTTm9uRmluYWxPYmplY3QgQmFz
ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6
U3RydWN0dXJlRmxhZ3MgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNH
ZXRPd25Qcm9wZXJ0eU5hbWVzIHwgSW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhF
dmVuV2hlbkxlbmd0aElzTm90WmVybzsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0
cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBPdmVycmlkZXNHZXRPd25Qcm9w
ZXJ0eVNsb3QgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eU5hbWVzIHwgT3ZlcnJpZGVzUHV0IHwg
SW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVy
bzsKIAogcHJvdGVjdGVkOgogICAgIEdlbmVyaWNBcmd1bWVudHMoVk0mIHZtLCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNB
cmd1bWVudHNJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvR2VuZXJpY0FyZ3VtZW50c0lubGluZXMuaAkocmV2aXNpb24gMjc1Nzg3KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50c0lubGluZXMuaAkod29y
a2luZyBjb3B5KQpAQCAtMTM0LDggKzEzNCw4IEBAIGJvb2wgR2VuZXJpY0FyZ3VtZW50czxUeXBl
Pjo6cHV0KEpTQ2VsbCoKIAogICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8j
c2VjLWFyZ3VtZW50cy1leG90aWMtb2JqZWN0cy1zZXQtcC12LXJlY2VpdmVyCiAgICAgLy8gRmFs
bCBiYWNrIHRvIHRoZSBPcmRpbmFyeVNldCB3aGVuIHRoZSByZWNlaXZlciBpcyBhbHRlcmVkIGZy
b20gdGhlIHRoaXNPYmplY3QuCi0gICAgaWYgKFVOTElLRUxZKGlzVGhpc1ZhbHVlQWx0ZXJlZChz
bG90LCB0aGlzT2JqZWN0KSkpCi0gICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgb3Jk
aW5hcnlTZXRTbG93KGdsb2JhbE9iamVjdCwgdGhpc09iamVjdCwgaWRlbnQsIHZhbHVlLCBzbG90
LnRoaXNWYWx1ZSgpLCBzbG90LmlzU3RyaWN0TW9kZSgpKSk7CisgICAgaWYgKFVOTElLRUxZKHNs
b3QudGhpc1ZhbHVlKCkgIT0gdGhpc09iamVjdCkpCisgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVS
TihzY29wZSwgQmFzZTo6cHV0KHRoaXNPYmplY3QsIGdsb2JhbE9iamVjdCwgaWRlbnQsIHZhbHVl
LCBzbG90KSk7CiAgICAgCiAgICAgT3B0aW9uYWw8dWludDMyX3Q+IGluZGV4ID0gcGFyc2VJbmRl
eChpZGVudCk7CiAgICAgaWYgKGluZGV4ICYmIHRoaXNPYmplY3QtPmlzTWFwcGVkQXJndW1lbnQo
aW5kZXgudmFsdWUoKSkpIHsKQEAgLTE0Myw5ICsxNDMsNyBAQCBib29sIEdlbmVyaWNBcmd1bWVu
dHM8VHlwZT46OnB1dChKU0NlbGwqCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAg
IGF1dG8gcmVzdWx0ID0gQmFzZTo6cHV0KHRoaXNPYmplY3QsIGdsb2JhbE9iamVjdCwgaWRlbnQs
IHZhbHVlLCBzbG90KTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBmYWxzZSk7Ci0g
ICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCByZXN1bHQpOworICAgIFJFTEVBU0VfQU5EX1JF
VFVSTihzY29wZSwgQmFzZTo6cHV0KHRoaXNPYmplY3QsIGdsb2JhbE9iamVjdCwgaWRlbnQsIHZh
bHVlLCBzbG90KSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFR5cGU+CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9HZXR0ZXJTZXR0ZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZXR0ZXJTZXR0ZXIuaAkocmV2aXNpb24gMjc1Nzg3
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2V0dGVyU2V0dGVyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTU0LDcgKzU0LDcgQEAgcHJpdmF0ZToKIAogcHVibGljOgogCi0gICAgc3Rh
dGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZs
YWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgU3RydWN0dXJlSXNJbW1vcnRhbDsK
KyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3Ry
dWN0dXJlRmxhZ3MgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNQdXQg
fCBTdHJ1Y3R1cmVJc0ltbW9ydGFsOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUs
IFN1YnNwYWNlQWNjZXNzPgogICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0m
IHZtKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAJKHJl
dmlzaW9uIDI3NTc4NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXku
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzgsMTAgKzIzOCw2IEBAIGJvb2wgSlNBcnJheTo6cHV0
KEpTQ2VsbCogY2VsbCwgSlNHbG9iYWwKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CiAKICAgICBKU0FycmF5KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQXJyYXkqPihj
ZWxsKTsKLQotICAgIGlmIChVTkxJS0VMWShpc1RoaXNWYWx1ZUFsdGVyZWQoc2xvdCwgdGhpc09i
amVjdCkpKQotICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIG9yZGluYXJ5U2V0U2xv
dyhnbG9iYWxPYmplY3QsIHRoaXNPYmplY3QsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QudGhp
c1ZhbHVlKCksIHNsb3QuaXNTdHJpY3RNb2RlKCkpKTsKLQogICAgIHRoaXNPYmplY3QtPmVuc3Vy
ZVdyaXRhYmxlKHZtKTsKIAogICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gdm0ucHJvcGVydHlOYW1l
cy0+bGVuZ3RoKSB7CkBAIC0yNTEsNiArMjQ3LDkgQEAgYm9vbCBKU0FycmF5OjpwdXQoSlNDZWxs
KiBjZWxsLCBKU0dsb2JhbAogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAK
KyAgICAgICAgaWYgKFVOTElLRUxZKHNsb3QudGhpc1ZhbHVlKCkgIT0gdGhpc09iamVjdCkpCisg
ICAgICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTT2JqZWN0OjpkZWZpbmVQcm9w
ZXJ0eU9uUmVjZWl2ZXIoZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KSk7
CisKICAgICAgICAgdW5zaWduZWQgbmV3TGVuZ3RoID0gdmFsdWUudG9VSW50MzIoZ2xvYmFsT2Jq
ZWN0KTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZmFsc2UpOwogICAgICAg
ICBkb3VibGUgdmFsdWVBc051bWJlciA9IHZhbHVlLnRvTnVtYmVyKGdsb2JhbE9iamVjdCk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5oCShyZXZpc2lvbiAyNzU3
ODcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQwLDcgKzQwLDcgQEAgY2xhc3MgSlNBcnJheSA6IHB1YmxpYyBKU05vbkZpbmFs
T2JqZWN0IAogCiBwdWJsaWM6CiAgICAgdHlwZWRlZiBKU05vbkZpbmFsT2JqZWN0IEJhc2U7Ci0g
ICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVj
dHVyZUZsYWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzR2V0T3du
U3BlY2lhbFByb3BlcnR5TmFtZXM7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1
Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVy
dHlTbG90IHwgT3ZlcnJpZGVzR2V0T3duU3BlY2lhbFByb3BlcnR5TmFtZXMgfCBPdmVycmlkZXNQ
dXQ7CiAKICAgICBzdGF0aWMgc2l6ZV90IGFsbG9jYXRpb25TaXplKENoZWNrZWQ8c2l6ZV90PiBp
bmxpbmVDYXBhY2l0eSkKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0FycmF5QnVmZmVyVmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuY3BwCShyZXZpc2lvbiAyNzU3ODcpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE3MiwxOCArMTcyLDYgQEAgdm9pZCBKU0FycmF5QnVmZmVyVmlldzo6dmlz
aXRDaGlsZHJlbkltcAogCiBERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNBcnJheUJ1ZmZlclZpZXcp
OwogCi1ib29sIEpTQXJyYXlCdWZmZXJWaWV3OjpwdXQoCi0gICAgSlNDZWxsKiBjZWxsLCBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1Zh
bHVlIHZhbHVlLAotICAgIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKLXsKLSAgICBKU0FycmF5QnVm
ZmVyVmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0FycmF5QnVmZmVyVmlldyo+KGNlbGwpOwot
Ci0gICAgaWYgKFVOTElLRUxZKGlzVGhpc1ZhbHVlQWx0ZXJlZChzbG90LCB0aGlzT2JqZWN0KSkp
Ci0gICAgICAgIHJldHVybiBvcmRpbmFyeVNldFNsb3coZ2xvYmFsT2JqZWN0LCB0aGlzT2JqZWN0
LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90LnRoaXNWYWx1ZSgpLCBzbG90LmlzU3RyaWN0TW9k
ZSgpKTsKLSAgICAKLSAgICByZXR1cm4gQmFzZTo6cHV0KHRoaXNPYmplY3QsIGdsb2JhbE9iamVj
dCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCk7Ci19Ci0KIEFycmF5QnVmZmVyKiBKU0FycmF5
QnVmZmVyVmlldzo6dW5zaGFyZWRCdWZmZXIoKQogewogICAgIEFycmF5QnVmZmVyKiByZXN1bHQg
PSBwb3NzaWJseVNoYXJlZEJ1ZmZlcigpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5oCShyZXZpc2lvbiAyNzU3ODcpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xNjksOCArMTY5LDYgQEAgcHJvdGVjdGVkOgogICAgIAogICAgIEpTX0VYUE9S
VF9QUklWQVRFIEpTQXJyYXlCdWZmZXJWaWV3KFZNJiwgQ29uc3RydWN0aW9uQ29udGV4dCYpOwog
ICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKLSAgICAKLSAg
ICBzdGF0aWMgYm9vbCBwdXQoSlNDZWxsKiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUs
IEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOwogCiAgICAgREVDTEFSRV9WSVNJVF9DSElMRFJF
TjsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0pTVmFsdWUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0pTVmFs
dWUuY3BwCShyZXZpc2lvbiAyNzU3ODcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0NKU1ZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjEyLDcgKzIxMiw3IEBAIEpTT2Jq
ZWN0KiBKU1ZhbHVlOjpzeW50aGVzaXplUHJvdG90eXBlKEoKICAgICByZXR1cm4gbnVsbHB0cjsK
IH0KIAotLy8gRUNNQSA4LjcuMgorLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vcmRp
bmFyeXNldAogYm9vbCBKU1ZhbHVlOjpwdXRUb1ByaW1pdGl2ZShKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBQdXRQ
cm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwpA
QCAtMjI2LDY0ICsyMjYsNyBAQCBib29sIEpTVmFsdWU6OnB1dFRvUHJpbWl0aXZlKEpTR2xvYmFs
T2JqCiAgICAgRVhDRVBUSU9OX0FTU0VSVCghIXNjb3BlLmV4Y2VwdGlvbigpID09ICFvYmopOwog
ICAgIGlmIChVTkxJS0VMWSghb2JqKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIEpTVmFs
dWUgcHJvdG90eXBlOwotICAgIGlmIChwcm9wZXJ0eU5hbWUgIT0gdm0ucHJvcGVydHlOYW1lcy0+
dW5kZXJzY29yZVByb3RvKSB7Ci0gICAgICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICAgICAgICBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG9iai0+c3RydWN0dXJlKHZtKTsKLSAgICAgICAgICAgIGlm
IChzdHJ1Y3R1cmUtPmhhc1JlYWRPbmx5T3JHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzRXhjbHVkaW5n
UHJvdG8oKSB8fCBzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkuaGFzUHV0UHJvcGVydHlTZWN1cml0eUNo
ZWNrKCkpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBpZiAob2JqLT50eXBl
KCkgPT0gUHJveHlPYmplY3RUeXBlKSB7Ci0gICAgICAgICAgICAgICAgYXV0byogcHJveHkgPSBq
c0Nhc3Q8UHJveHlPYmplY3QqPihvYmopOwotICAgICAgICAgICAgICAgIFJFTEVBU0VfQU5EX1JF
VFVSTihzY29wZSwgcHJveHktPlByb3h5T2JqZWN0OjpwdXQocHJveHksIGdsb2JhbE9iamVjdCwg
cHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
cHJvdG90eXBlID0gb2JqLT5nZXRQcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCk7Ci0gICAgICAg
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBmYWxzZSk7Ci0KLSAgICAgICAgICAgIGlm
IChwcm90b3R5cGUuaXNOdWxsKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHR5cGVFcnJvcihn
bG9iYWxPYmplY3QsIHNjb3BlLCBzbG90LmlzU3RyaWN0TW9kZSgpLCBSZWFkb25seVByb3BlcnR5
V3JpdGVFcnJvcik7Ci0gICAgICAgICAgICBvYmogPSBhc09iamVjdChwcm90b3R5cGUpOwotICAg
ICAgICB9Ci0gICAgfQotCi0gICAgZm9yICg7IDsgb2JqID0gYXNPYmplY3QocHJvdG90eXBlKSkg
ewotICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG9iai0+c3RydWN0dXJlKHZtKTsKLSAg
ICAgICAgaWYgKFVOTElLRUxZKHN0cnVjdHVyZS0+dHlwZUluZm8oKS5oYXNQdXRQcm9wZXJ0eVNl
Y3VyaXR5Q2hlY2soKSkpIHsKLSAgICAgICAgICAgIG9iai0+bWV0aG9kVGFibGUodm0pLT5kb1B1
dFByb3BlcnR5U2VjdXJpdHlDaGVjayhvYmosIGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCBz
bG90KTsKLSAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGZhbHNlKTsKLSAg
ICAgICAgfQotICAgICAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzOwotICAgICAgICBQcm9wZXJ0eU9m
ZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldCh2bSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVz
KTsKLSAgICAgICAgaWYgKG9mZnNldCAhPSBpbnZhbGlkT2Zmc2V0KSB7Ci0gICAgICAgICAgICBp
ZiAoYXR0cmlidXRlcyAmIFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSkKLSAgICAgICAgICAg
ICAgICByZXR1cm4gdHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsIHNsb3QuaXNTdHJpY3RN
b2RlKCksIFJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9yKTsKLQotICAgICAgICAgICAgSlNWYWx1
ZSBncyA9IG9iai0+Z2V0RGlyZWN0KG9mZnNldCk7Ci0gICAgICAgICAgICBpZiAoZ3MuaXNHZXR0
ZXJTZXR0ZXIoKSkKLSAgICAgICAgICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIGNh
bGxTZXR0ZXIoZ2xvYmFsT2JqZWN0LCAqdGhpcywgZ3MsIHZhbHVlLCBzbG90LmlzU3RyaWN0TW9k
ZSgpID8gRUNNQU1vZGU6OnN0cmljdCgpIDogRUNNQU1vZGU6OnNsb3BweSgpKSk7Ci0KLSAgICAg
ICAgICAgIGlmIChncy5pc0N1c3RvbUdldHRlclNldHRlcigpKSB7Ci0gICAgICAgICAgICAgICAg
YXV0byBzZXR0ZXIgPSBqc0Nhc3Q8Q3VzdG9tR2V0dGVyU2V0dGVyKj4oZ3MuYXNDZWxsKCkpLT5z
ZXR0ZXIoKTsKLSAgICAgICAgICAgICAgICBib29sIGlzQWNjZXNzb3IgPSBhdHRyaWJ1dGVzICYg
UHJvcGVydHlBdHRyaWJ1dGU6OkN1c3RvbUFjY2Vzc29yOwotICAgICAgICAgICAgICAgIGF1dG8g
cmVzdWx0ID0gY2FsbEN1c3RvbVNldHRlcihnbG9iYWxPYmplY3QsIHNldHRlciwgaXNBY2Nlc3Nv
ciwgb2JqLCBzbG90LnRoaXNWYWx1ZSgpLCB2YWx1ZSwgcHJvcGVydHlOYW1lKTsKLSAgICAgICAg
ICAgICAgICBpZiAocmVzdWx0ICE9IFRyaVN0YXRlOjpJbmRldGVybWluYXRlKQotICAgICAgICAg
ICAgICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIHJlc3VsdCA9PSBUcmlTdGF0ZTo6
VHJ1ZSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIElmIHRoZXJlJ3MgYW4gZXhp
c3RpbmcgcHJvcGVydHkgb24gdGhlIG9iamVjdCBvciBvbmUgb2YgaXRzIAotICAgICAgICAgICAg
Ly8gcHJvdG90eXBlcyBpdCBzaG91bGQgYmUgcmVwbGFjZWQsIHNvIGJyZWFrIGhlcmUuCi0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBpZiAob2JqLT50eXBlKCkgPT0gUHJv
eHlPYmplY3RUeXBlKSB7Ci0gICAgICAgICAgICBhdXRvKiBwcm94eSA9IGpzQ2FzdDxQcm94eU9i
amVjdCo+KG9iaik7Ci0gICAgICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIHByb3h5
LT5Qcm94eU9iamVjdDo6cHV0KHByb3h5LCBnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgdmFs
dWUsIHNsb3QpKTsKLSAgICAgICAgfQotICAgICAgICBwcm90b3R5cGUgPSBvYmotPmdldFByb3Rv
dHlwZSh2bSwgZ2xvYmFsT2JqZWN0KTsKLSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgZmFsc2UpOwotICAgICAgICBpZiAocHJvdG90eXBlLmlzTnVsbCgpKQotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgfQotICAgIAotICAgIHJldHVybiB0eXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBz
Y29wZSwgc2xvdC5pc1N0cmljdE1vZGUoKSwgUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpOwor
ICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgb2JqLT5tZXRob2RUYWJsZSh2bSktPnB1dChv
YmosIGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCkpOwogfQogCiBib29s
IEpTVmFsdWU6OnB1dFRvUHJpbWl0aXZlQnlJbmRleChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxkVGhy
b3cpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5jcHAJKHJldmlz
aW9uIDI3NTc4NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTIwMSwxMSArMjAxLDYgQEAgYm9vbCBKU0NlbGw6OmdldE93blBy
b3BlcnR5U2xvdEJ5SW5kZXgoSgogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBKU0NlbGw6
OmRvUHV0UHJvcGVydHlTZWN1cml0eUNoZWNrKEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQ
cm9wZXJ0eU5hbWUsIFB1dFByb3BlcnR5U2xvdCYpCi17Ci0gICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKLX0KLQogdm9pZCBKU0NlbGw6OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmpl
Y3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZUFycmF5JiwgRG9udEVudW1Qcm9wZXJ0
aWVzTW9kZSkKIHsKICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgJKHJldmlzaW9uIDI3NTc4NykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
NTksNyArMjU5LDYgQEAgcHJvdGVjdGVkOgogICAgIHN0YXRpYyBib29sIGRlZmluZU93blByb3Bl
cnR5KEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3Bl
cnR5RGVzY3JpcHRvciYsIGJvb2wgc2hvdWxkVGhyb3cpOwogICAgIHN0YXRpYyBib29sIGdldE93
blByb3BlcnR5U2xvdChKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBQ
cm9wZXJ0eVNsb3QmKTsKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4
KEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIFByb3Bl
cnR5U2xvdCYpOwotICAgIHN0YXRpYyBOT19SRVRVUk5fRFVFX1RPX0NSQVNIIHZvaWQgZG9QdXRQ
cm9wZXJ0eVNlY3VyaXR5Q2hlY2soSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5
TmFtZSwgUHV0UHJvcGVydHlTbG90Jik7CiAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIExM
SW50T2Zmc2V0c0V4dHJhY3RvcjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTRnVuY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTRnVuY3Rpb24uY3BwCShyZXZpc2lvbiAyNzU3ODcpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTE5LDEwICs1
MTksNiBAQCBib29sIEpTRnVuY3Rpb246OnB1dChKU0NlbGwqIGNlbGwsIEpTR2xvCiAgICAgICAg
ICAgICByYXJlRGF0YS0+c2V0SGFzTW9kaWZpZWROYW1lRm9yTm9uSG9zdEZ1bmN0aW9uKCk7CiAg
ICAgfQogCi0gICAgaWYgKFVOTElLRUxZKGlzVGhpc1ZhbHVlQWx0ZXJlZChzbG90LCB0aGlzT2Jq
ZWN0KSkpCi0gICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgb3JkaW5hcnlTZXRTbG93
KGdsb2JhbE9iamVjdCwgdGhpc09iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdC50aGlz
VmFsdWUoKSwgc2xvdC5pc1N0cmljdE1vZGUoKSkpOwotCi0KICAgICBpZiAodGhpc09iamVjdC0+
aXNIb3N0T3JCdWlsdGluRnVuY3Rpb24oKSkgewogICAgICAgICBQcm9wZXJ0eVN0YXR1cyBwcm9w
ZXJ0eVR5cGUgPSB0aGlzT2JqZWN0LT5yZWlmeUxhenlQcm9wZXJ0eUZvckhvc3RPckJ1aWx0aW5J
Zk5lZWRlZCh2bSwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUpOwogICAgICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCBmYWxzZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0Z1bmN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNGdW5jdGlvbi5oCShyZXZpc2lvbiAyNzU3ODcpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTcwLDcgKzcw
LDcgQEAgcHVibGljOgogICAgIH0KICAgICAKICAgICB0eXBlZGVmIEpTQ2FsbGVlIEJhc2U7Ci0g
ICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVj
dHVyZUZsYWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzR2V0T3du
U3BlY2lhbFByb3BlcnR5TmFtZXMgfCBPdmVycmlkZXNHZXRDYWxsRGF0YTsKKyAgICBzdGF0aWMg
Y29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3Mg
fCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNHZXRPd25TcGVjaWFsUHJv
cGVydHlOYW1lcyB8IE92ZXJyaWRlc0dldENhbGxEYXRhIHwgT3ZlcnJpZGVzUHV0OwogCiAgICAg
c3RhdGljIHNpemVfdCBhbGxvY2F0aW9uU2l6ZShDaGVja2VkPHNpemVfdD4gaW5saW5lQ2FwYWNp
dHkpCiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmlj
VHlwZWRBcnJheVZpZXcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlldy5oCShyZXZpc2lvbiAyNzU3ODcpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlldy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC05OSw3ICs5OSw3IEBAIHB1YmxpYzoKICAgICB1c2luZyBFbGVtZW50VHlw
ZSA9IHR5cGVuYW1lIEFkYXB0b3I6OlR5cGU7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBUeXBlZEFy
cmF5Q29udGVudFR5cGUgY29udGVudFR5cGUgPSBBZGFwdG9yOjpjb250ZW50VHlwZTsKIAotICAg
IHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1
cmVGbGFncyB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRlc0dldE93blBy
b3BlcnR5TmFtZXMgfCBJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVu
TGVuZ3RoSXNOb3RaZXJvOworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJl
RmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xv
dCB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5TmFtZXMgfCBPdmVycmlkZXNQdXQgfCBJbnRlcmNl
cHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvOwogCiAg
ICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBlbGVtZW50U2l6ZSA9IHNpemVvZih0eXBlbmFt
ZSBBZGFwdG9yOjpUeXBlKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNHbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0dsb2JhbExleGljYWxFbnZpcm9ubWVudC5oCShyZXZpc2lvbiAy
NzU3ODcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbExleGljYWxF
bnZpcm9ubWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3ICszMyw3IEBAIGNsYXNzIEpTR2xv
YmFsTGV4aWNhbEVudmlyb25tZW50IGZpbmFsIDoKIHB1YmxpYzoKICAgICB1c2luZyBCYXNlID0g
SlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdDsKIAotICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWdu
ZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IE92ZXJyaWRlc0dldE93
blByb3BlcnR5U2xvdDsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZs
YWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3Qg
fCBPdmVycmlkZXNQdXQ7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3Bh
Y2VBY2Nlc3MgbW9kZT4KICAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2
bSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9i
amVjdC5jcHAJKHJldmlzaW9uIDI3NTc4NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ3Myw4ICsxNDczLDEy
IEBAIGJvb2wgSlNHbG9iYWxPYmplY3Q6OnB1dChKU0NlbGwqIGNlbGwsIEoKICAgICBKU0dsb2Jh
bE9iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0dsb2JhbE9iamVjdCo+KGNlbGwpOwogICAg
IEFTU0VSVCghSGVhcDo6aGVhcCh2YWx1ZSkgfHwgSGVhcDo6aGVhcCh2YWx1ZSkgPT0gSGVhcDo6
aGVhcCh0aGlzT2JqZWN0KSk7CiAKLSAgICBpZiAoVU5MSUtFTFkoaXNUaGlzVmFsdWVBbHRlcmVk
KHNsb3QsIHRoaXNPYmplY3QpKSkKLSAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBv
cmRpbmFyeVNldFNsb3coZ2xvYmFsT2JqZWN0LCB0aGlzT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHZh
bHVlLCBzbG90LnRoaXNWYWx1ZSgpLCBzbG90LmlzU3RyaWN0TW9kZSgpKSk7CisgICAgaWYgKFVO
TElLRUxZKGlzVGhpc1ZhbHVlQWx0ZXJlZChzbG90LCB0aGlzT2JqZWN0KSkpIHsKKyAgICAgICAg
U3ltYm9sVGFibGVFbnRyeTo6RmFzdCBlbnRyeSA9IHRoaXNPYmplY3QtPnN5bWJvbFRhYmxlKCkt
PmdldChwcm9wZXJ0eU5hbWUudWlkKCkpOworICAgICAgICBpZiAoIWVudHJ5LmlzTnVsbCgpICYm
IGVudHJ5LmlzUmVhZE9ubHkoKSkKKyAgICAgICAgICAgIHJldHVybiB0eXBlRXJyb3IoZ2xvYmFs
T2JqZWN0LCBzY29wZSwgc2xvdC5pc1N0cmljdE1vZGUoKSwgUmVhZG9ubHlQcm9wZXJ0eVdyaXRl
RXJyb3IpOworICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEJhc2U6OnB1dCh0aGlz
T2JqZWN0LCBnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpKTsKKyAgICB9
CiAKICAgICBib29sIHNob3VsZFRocm93UmVhZE9ubHlFcnJvciA9IHNsb3QuaXNTdHJpY3RNb2Rl
KCk7CiAgICAgYm9vbCBpZ25vcmVSZWFkT25seUVycm9ycyA9IGZhbHNlOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCShyZXZpc2lvbiAy
NzU3ODcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5o
CSh3b3JraW5nIGNvcHkpCkBAIC01OTUsNyArNTk1LDcgQEAgcHVibGljOgogICAgICAgICAKIHB1
YmxpYzoKICAgICB1c2luZyBCYXNlID0gSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdDsKLSAgICBz
dGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJl
RmxhZ3MgfCBIYXNTdGF0aWNQcm9wZXJ0eVRhYmxlIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlT
bG90IHwgSXNJbW11dGFibGVQcm90b3R5cGVFeG90aWNPYmplY3Q7CisgICAgc3RhdGljIGNvbnN0
ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSGFz
U3RhdGljUHJvcGVydHlUYWJsZSB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJy
aWRlc1B1dCB8IElzSW1tdXRhYmxlUHJvdG90eXBlRXhvdGljT2JqZWN0OwogCiAgICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOwogICAgIHRlbXBsYXRlPHR5
cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2VzcyBtb2RlPgpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNMZXhpY2FsRW52aXJvbm1lbnQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xleGljYWxFbnZpcm9ubWVudC5oCShyZXZp
c2lvbiAyNzU3ODcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xleGljYWxF
bnZpcm9ubWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCw3ICs0OCw3IEBAIHB1YmxpYzoKICAg
ICB9CiAKICAgICB1c2luZyBCYXNlID0gSlNTeW1ib2xUYWJsZU9iamVjdDsKLSAgICBzdGF0aWMg
Y29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3Mg
fCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNHZXRPd25TcGVjaWFsUHJv
cGVydHlOYW1lczsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdz
ID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBP
dmVycmlkZXNHZXRPd25TcGVjaWFsUHJvcGVydHlOYW1lcyB8IE92ZXJyaWRlc1B1dDsKIAogICAg
IFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qIHZhcmlhYmxlcygpCiAgICAgewpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVFbnZpcm9ubWVudC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlRW52aXJvbm1lbnQu
aAkocmV2aXNpb24gMjc1Nzg3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNN
b2R1bGVFbnZpcm9ubWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw3IEBAIGNsYXNz
IEpTTW9kdWxlRW52aXJvbm1lbnQgZmluYWwgOiBwdWJsaWMKICAgICBmcmllbmQgY2xhc3MgTExJ
bnRPZmZzZXRzRXh0cmFjdG9yOwogcHVibGljOgogICAgIHVzaW5nIEJhc2UgPSBKU0xleGljYWxF
bnZpcm9ubWVudDsKLSAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdz
ID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBP
dmVycmlkZXNHZXRPd25TcGVjaWFsUHJvcGVydHlOYW1lczsKKyAgICBzdGF0aWMgY29uc3RleHBy
IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBPdmVycmlk
ZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNHZXRPd25TcGVjaWFsUHJvcGVydHlOYW1l
cyB8IE92ZXJyaWRlc1B1dDsKIAogICAgIHN0YXRpYyBKU01vZHVsZUVudmlyb25tZW50KiBjcmVh
dGUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1Njb3BlKiBjdXJyZW50
U2NvcGUsIFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSwgSlNWYWx1ZSBpbml0aWFsVmFsdWUsIEFi
c3RyYWN0TW9kdWxlUmVjb3JkKiBtb2R1bGVSZWNvcmQpCiAgICAgewpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZU5hbWVzcGFjZU9iamVj
dC5oCShyZXZpc2lvbiAyNzU3ODcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U01vZHVsZU5hbWVzcGFjZU9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw3IEBA
IG5hbWVzcGFjZSBKU0MgewogY2xhc3MgSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QgZmluYWwgOiBw
dWJsaWMgSlNOb25GaW5hbE9iamVjdCB7CiBwdWJsaWM6CiAgICAgdXNpbmcgQmFzZSA9IEpTTm9u
RmluYWxPYmplY3Q7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFn
cyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwg
T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlOYW1lcyB8IEludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNs
b3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8gfCBHZXRPd25Qcm9wZXJ0eVNsb3RJc0lt
cHVyZUZvclByb3BlcnR5QWJzZW5jZSB8IElzSW1tdXRhYmxlUHJvdG90eXBlRXhvdGljT2JqZWN0
OworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpT
dHJ1Y3R1cmVGbGFncyB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRlc0dl
dE93blByb3BlcnR5TmFtZXMgfCBPdmVycmlkZXNQdXQgfCBJbnRlcmNlcHRzR2V0T3duUHJvcGVy
dHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgR2V0T3duUHJvcGVydHlTbG90
SXNJbXB1cmVGb3JQcm9wZXJ0eUFic2VuY2UgfCBJc0ltbXV0YWJsZVByb3RvdHlwZUV4b3RpY09i
amVjdDsKIAogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0Rlc3RydWN0aW9uID0gdHJ1
ZTsKICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAkocmV2aXNpb24gMjc1Nzg3KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC02NzcsMTAgKzY3Nyw2IEBAIGJvb2wgSlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdChKU09i
amUKIHsKICAgICByZXR1cm4gZ2V0T3duUHJvcGVydHlTbG90SW1wbChvYmplY3QsIGdsb2JhbE9i
amVjdCwgcHJvcGVydHlOYW1lLCBzbG90KTsKIH0KLQotdm9pZCBKU09iamVjdDo6ZG9QdXRQcm9w
ZXJ0eVNlY3VyaXR5Q2hlY2soSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFt
ZSwgUHV0UHJvcGVydHlTbG90JikKLXsKLX0KICNlbmRpZiAvLyBBU1NFUlRfRU5BQkxFRAogCiAv
LyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1vcmRpbmFyeXNldApAQCAtNzM3
LDMzICs3MzMsNyBAQCBib29sIG9yZGluYXJ5U2V0U2xvdyhKU0dsb2JhbE9iamVjdCogZ2xvCiAg
ICAgICAgIC8vIEluIE9yZGluYXJ5U2V0LCB0aGUgcmVjZWl2ZXIgbWF5IG5vdCBiZSB0aGUgc2Ft
ZSB0byB0aGUgb2JqZWN0LgogICAgICAgICAvLyBTbywgd2UgcGVyZm9ybSBbW0dldE93blByb3Bl
cnR5XV0gb250byB0aGUgcmVjZWl2ZXIgd2hpbGUgd2UgYWxyZWFkeSBwZXJmb3JtIFtbR2V0T3du
UHJvcGVydHldXSBvbnRvIHRoZSBvYmplY3QuCiAKLSAgICAgICAgLy8gOS4xLjkuMS00LWMgTGV0
IGV4aXN0aW5nRGVzY3JpcHRvciBiZSA/IFJlY2VpdmVyLltbR2V0T3duUHJvcGVydHldXShQKS4K
LSAgICAgICAgSlNPYmplY3QqIHJlY2VpdmVyT2JqZWN0ID0gYXNPYmplY3QocmVjZWl2ZXIpOwot
ICAgICAgICBQcm9wZXJ0eURlc2NyaXB0b3IgZXhpc3RpbmdEZXNjcmlwdG9yOwotICAgICAgICBi
b29sIGV4aXN0aW5nRGVzY3JpcHRvckZvdW5kID0gcmVjZWl2ZXJPYmplY3QtPmdldE93blByb3Bl
cnR5RGVzY3JpcHRvcihnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgZXhpc3RpbmdEZXNjcmlw
dG9yKTsKLSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZmFsc2UpOwotCi0gICAg
ICAgIC8vIDkuMS45LjEtNC1kIElmIGV4aXN0aW5nRGVzY3JpcHRvciBpcyBub3QgdW5kZWZpbmVk
LCB0aGVuCi0gICAgICAgIGlmIChleGlzdGluZ0Rlc2NyaXB0b3JGb3VuZCkgewotICAgICAgICAg
ICAgLy8gOS4xLjkuMS00LWQtaSBJZiBJc0FjY2Vzc29yRGVzY3JpcHRvcihleGlzdGluZ0Rlc2Ny
aXB0b3IpIGlzIHRydWUsIHJldHVybiBmYWxzZS4KLSAgICAgICAgICAgIGlmIChleGlzdGluZ0Rl
c2NyaXB0b3IuaXNBY2Nlc3NvckRlc2NyaXB0b3IoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4g
dHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsIHNob3VsZFRocm93LCBSZWFkb25seVByb3Bl
cnR5V3JpdGVFcnJvcik7Ci0KLSAgICAgICAgICAgIC8vIDkuMS45LjEtNC1kLWlpIElmIGV4aXN0
aW5nRGVzY3JpcHRvci5bW1dyaXRhYmxlXV0gaXMgZmFsc2UsIHJldHVybiBmYWxzZS4KLSAgICAg
ICAgICAgIGlmICghZXhpc3RpbmdEZXNjcmlwdG9yLndyaXRhYmxlKCkpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIHR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCBzaG91bGRUaHJvdywgUmVh
ZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpOwotCi0gICAgICAgICAgICAvLyA5LjEuOS4xLTQtZC1p
aWkgTGV0IHZhbHVlRGVzYyBiZSB0aGUgUHJvcGVydHlEZXNjcmlwdG9ye1tbVmFsdWVdXTogVn0u
Ci0gICAgICAgICAgICBQcm9wZXJ0eURlc2NyaXB0b3IgdmFsdWVEZXNjcmlwdG9yOwotICAgICAg
ICAgICAgdmFsdWVEZXNjcmlwdG9yLnNldFZhbHVlKHZhbHVlKTsKLQotICAgICAgICAgICAgLy8g
OS4xLjkuMS00LWQtaXYgUmV0dXJuID8gUmVjZWl2ZXIuW1tEZWZpbmVPd25Qcm9wZXJ0eV1dKFAs
IHZhbHVlRGVzYykuCi0gICAgICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIHJlY2Vp
dmVyT2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPmRlZmluZU93blByb3BlcnR5KHJlY2VpdmVyT2Jq
ZWN0LCBnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgdmFsdWVEZXNjcmlwdG9yLCBzaG91bGRU
aHJvdykpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gOS4xLjkuMS00LWUgRWxzZSBSZWNlaXZl
ciBkb2VzIG5vdCBjdXJyZW50bHkgaGF2ZSBhIHByb3BlcnR5IFAsCi0gICAgICAgIC8vIDkuMS45
LjEtNC1lLWkgUmV0dXJuID8gQ3JlYXRlRGF0YVByb3BlcnR5KFJlY2VpdmVyLCBQLCBWKS4KLSAg
ICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCByZWNlaXZlck9iamVjdC0+bWV0aG9kVGFi
bGUodm0pLT5kZWZpbmVPd25Qcm9wZXJ0eShyZWNlaXZlck9iamVjdCwgZ2xvYmFsT2JqZWN0LCBw
cm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvcih2YWx1ZSwgc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpOb25lKSksIHNob3VsZFRocm93KSk7CisgICAgICAgIFJF
TEVBU0VfQU5EX1JFVFVSTihzY29wZSwgSlNPYmplY3Q6OmRlZmluZVByb3BlcnR5T25SZWNlaXZl
clNsb3coZ2xvYmFsT2JqZWN0LCBhc09iamVjdChyZWNlaXZlciksIHByb3BlcnR5TmFtZSwgdmFs
dWUsIHNob3VsZFRocm93KSk7CiAgICAgfQogCiAgICAgLy8gOS4xLjkuMS01IEFzc2VydDogSXNB
Y2Nlc3NvckRlc2NyaXB0b3Iob3duRGVzYykgaXMgdHJ1ZS4KQEAgLTc4OSw3NyArNzU5LDEwMiBA
QCBib29sIG9yZGluYXJ5U2V0U2xvdyhKU0dsb2JhbE9iamVjdCogZ2xvCiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKLS8vIEVDTUEgOC42LjIuMgorLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3Nl
Yy1vcmRpbmFyeXNldAogYm9vbCBKU09iamVjdDo6cHV0KEpTQ2VsbCogY2VsbCwgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2
YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBzbG90KQogewotICAgIHJldHVybiBwdXRJbmxpbmVGb3JK
U09iamVjdChjZWxsLCBnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpOwor
ICAgIHJldHVybiBwdXRJbmxpbmVGb3JKU09iamVjdChhc09iamVjdChjZWxsKSwgZ2xvYmFsT2Jq
ZWN0LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KTsKIH0KIAogYm9vbCBKU09iamVjdDo6cHV0
SW5saW5lU2xvdyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWUgcHJv
cGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7Ci0gICAg
QVNTRVJUKCFpc1RoaXNWYWx1ZUFsdGVyZWQoc2xvdCwgdGhpcykpOworICAgIEFTU0VSVCghcGFy
c2VJbmRleChwcm9wZXJ0eU5hbWUpKTsKIAogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0o
KTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKKyAgICBpZiAo
VU5MSUtFTFkoIXZtLmlzU2FmZVRvUmVjdXJzZVNvZnQoKSkpIHsKKyAgICAgICAgdGhyb3dTdGFj
a092ZXJmbG93RXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSk7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisKICAgICBKU09iamVjdCogb2JqID0gdGhpczsKICAgICBmb3IgKDs7KSB7CiAg
ICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gb2JqLT5zdHJ1Y3R1cmUodm0pOwotICAgICAg
ICBpZiAoVU5MSUtFTFkoc3RydWN0dXJlLT50eXBlSW5mbygpLmhhc1B1dFByb3BlcnR5U2VjdXJp
dHlDaGVjaygpKSkgewotICAgICAgICAgICAgb2JqLT5tZXRob2RUYWJsZSh2bSktPmRvUHV0UHJv
cGVydHlTZWN1cml0eUNoZWNrKG9iaiwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHNsb3Qp
OwotICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZmFsc2UpOwotICAgICAg
ICB9Ci0gICAgICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXM7CisgICAgICAgIGlmIChvYmogIT0gdGhp
cyAmJiBzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkub3ZlcnJpZGVzUHV0KCkpCisgICAgICAgICAgICBS
RUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIG9iai0+bWV0aG9kVGFibGUodm0pLT5wdXQob2JqLCBn
bG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpKTsKKworICAgICAgICBib29s
IGhhc1Byb3BlcnR5ID0gZmFsc2U7CisgICAgICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXMgPSAwOwor
ICAgICAgICBQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYyBjdXN0b21TZXR0ZXIgPSBudWxs
cHRyOwogICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldCh2bSwg
cHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzKTsKICAgICAgICAgaWYgKGlzVmFsaWRPZmZzZXQob2Zm
c2V0KSkgewotICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZXMgJiBQcm9wZXJ0eUF0dHJpYnV0ZTo6
UmVhZE9ubHkpIHsKLSAgICAgICAgICAgICAgICBBU1NFUlQodGhpcy0+cHJvdG90eXBlQ2hhaW5N
YXlJbnRlcmNlcHRTdG9yZVRvKHZtLCBwcm9wZXJ0eU5hbWUpIHx8IG9iaiA9PSB0aGlzKTsKLSAg
ICAgICAgICAgICAgICByZXR1cm4gdHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsIHNsb3Qu
aXNTdHJpY3RNb2RlKCksIFJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9yKTsKKyAgICAgICAgICAg
IGhhc1Byb3BlcnR5ID0gdHJ1ZTsKKyAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVzICYgUHJvcGVy
dHlBdHRyaWJ1dGU6OkN1c3RvbUFjY2Vzc29yT3JWYWx1ZSkgeworICAgICAgICAgICAgICAgIEpT
VmFsdWUgdmFsdWUgPSBvYmotPmdldERpcmVjdChvZmZzZXQpOworICAgICAgICAgICAgICAgIGN1
c3RvbVNldHRlciA9IGpzQ2FzdDxDdXN0b21HZXR0ZXJTZXR0ZXIqPih2YWx1ZS5hc0NlbGwoKSkt
PnNldHRlcigpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKHN0cnVjdHVyZS0+
dHlwZUluZm8oKS5oYXNTdGF0aWNQcm9wZXJ0eVRhYmxlKCkgJiYgIXN0cnVjdHVyZS0+c3RhdGlj
UHJvcGVydGllc1JlaWZpZWQoKSkgeworICAgICAgICAgICAgaWYgKGF1dG8gZW50cnkgPSBzdHJ1
Y3R1cmUtPmZpbmRQcm9wZXJ0eUhhc2hFbnRyeShwcm9wZXJ0eU5hbWUpKSB7CisgICAgICAgICAg
ICAgICAgaGFzUHJvcGVydHkgPSB0cnVlOworICAgICAgICAgICAgICAgIHVuc2lnbmVkIHN0YXRp
Y0F0dHJpYnV0ZXMgPSBlbnRyeS0+dmFsdWUtPmF0dHJpYnV0ZXMoKTsKKyAgICAgICAgICAgICAg
ICBhdHRyaWJ1dGVzID0gYXR0cmlidXRlc0ZvclN0cnVjdHVyZShzdGF0aWNBdHRyaWJ1dGVzKTsK
KworICAgICAgICAgICAgICAgIGlmIChzdGF0aWNBdHRyaWJ1dGVzICYgUHJvcGVydHlBdHRyaWJ1
dGU6OkFjY2Vzc29yKQorICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzIHw9IFByb3BlcnR5
QXR0cmlidXRlOjpSZWFkT25seTsKKyAgICAgICAgICAgICAgICBpZiAoIShzdGF0aWNBdHRyaWJ1
dGVzICYgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5KSkgeworICAgICAgICAgICAgICAgICAg
ICBpZiAoc3RhdGljQXR0cmlidXRlcyAmIFByb3BlcnR5QXR0cmlidXRlOjpCdWlsdGluT3JGdW5j
dGlvbk9yTGF6eVByb3BlcnR5KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlzVGhp
c1ZhbHVlQWx0ZXJlZChzbG90LCBvYmopKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gQXZvaWQgUHV0TW9kZVB1dCBiZWNhdXNlIGl0IHRocm93cyBmb3Igbm9uLWV4dGVuc2libGUg
c3RydWN0dXJlcy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmotPnB1dERpcmVjdCh2
bSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgYXR0cmlidXRlcywgc2xvdCk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
IShzdGF0aWNBdHRyaWJ1dGVzICYgUHJvcGVydHlBdHRyaWJ1dGU6OkN1c3RvbUFjY2Vzc29yKSkK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzIHw9IFByb3BlcnR5QXR0cmli
dXRlOjpDdXN0b21WYWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGN1c3RvbVNldHRlciA9
IGVudHJ5LT52YWx1ZS0+cHJvcGVydHlQdXR0ZXIoKTsKKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KKyAgICAgICAgfQogCi0gICAgICAgICAg
ICBKU1ZhbHVlIGdzID0gb2JqLT5nZXREaXJlY3Qob2Zmc2V0KTsKLSAgICAgICAgICAgIGlmIChn
cy5pc0dldHRlclNldHRlcigpKSB7CisgICAgICAgIGlmIChoYXNQcm9wZXJ0eSkgeworICAgICAg
ICAgICAgaWYgKGF0dHJpYnV0ZXMgJiBQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIHR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCBzbG90Lmlz
U3RyaWN0TW9kZSgpLCBSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcik7CisgICAgICAgICAgICBp
ZiAoYXR0cmlidXRlcyAmIFByb3BlcnR5QXR0cmlidXRlOjpBY2Nlc3NvcikgeworICAgICAgICAg
ICAgICAgIEFTU0VSVChpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpOwogICAgICAgICAgICAgICAgIC8v
IFdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgd2UgZGVjaWRlIHRvIGNhY2hlIHRoaXMgcHJvcGVy
dHkgYmVmb3JlIHdlIHBvdGVudGlhbGx5IGV4ZWN1dGUgYXJpYml0cmFyeSBKUy4KICAgICAgICAg
ICAgICAgICBpZiAoIXRoaXMtPnN0cnVjdHVyZSh2bSktPmlzVW5jYWNoZWFibGVEaWN0aW9uYXJ5
KCkpCiAgICAgICAgICAgICAgICAgICAgIHNsb3Quc2V0Q2FjaGVhYmxlU2V0dGVyKG9iaiwgb2Zm
c2V0KTsKLQotICAgICAgICAgICAgICAgIGJvb2wgcmVzdWx0ID0gY2FsbFNldHRlcihnbG9iYWxP
YmplY3QsIHNsb3QudGhpc1ZhbHVlKCksIGdzLCB2YWx1ZSwgc2xvdC5pc1N0cmljdE1vZGUoKSA/
IEVDTUFNb2RlOjpzdHJpY3QoKSA6IEVDTUFNb2RlOjpzbG9wcHkoKSk7Ci0gICAgICAgICAgICAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZmFsc2UpOwotICAgICAgICAgICAgICAgIHJl
dHVybiByZXN1bHQ7CisgICAgICAgICAgICAgICAgSlNWYWx1ZSBncyA9IG9iai0+Z2V0RGlyZWN0
KG9mZnNldCk7CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBjYWxs
U2V0dGVyKGdsb2JhbE9iamVjdCwgc2xvdC50aGlzVmFsdWUoKSwgZ3MsIHZhbHVlLCBzbG90Lmlz
U3RyaWN0TW9kZSgpID8gRUNNQU1vZGU6OnN0cmljdCgpIDogRUNNQU1vZGU6OnNsb3BweSgpKSk7
CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoZ3MuaXNDdXN0b21HZXR0ZXJTZXR0ZXIo
KSkgewotICAgICAgICAgICAgICAgIGJvb2wgaXNBY2Nlc3NvciA9IGF0dHJpYnV0ZXMgJiBQcm9w
ZXJ0eUF0dHJpYnV0ZTo6Q3VzdG9tQWNjZXNzb3I7Ci0gICAgICAgICAgICAgICAgYXV0byBzZXR0
ZXIgPSBqc0Nhc3Q8Q3VzdG9tR2V0dGVyU2V0dGVyKj4oZ3MuYXNDZWxsKCkpLT5zZXR0ZXIoKTsK
KyAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVzICYgUHJvcGVydHlBdHRyaWJ1dGU6OkN1c3RvbUFj
Y2Vzc29yKSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKGN1c3RvbVNldHRlcik7CiAgICAgICAg
ICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBvbmx5IGJlIGNhY2hpbmcgdGhlc2UgaWYgd2Un
cmUgbm90IGFuIHVuY2FjaGVhYmxlIGRpY3Rpb25hcnk6CiAgICAgICAgICAgICAgICAgLy8gaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNTM0NwotCi0gICAgICAgICAg
ICAgICAgLy8gV2UgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCB3ZSBkZWNpZGUgdG8gY2FjaGUgdGhp
cyBwcm9wZXJ0eSBiZWZvcmUgd2UgcG90ZW50aWFsbHkgZXhlY3V0ZSBhcmliaXRyYXJ5IEpTLgot
ICAgICAgICAgICAgICAgIGlmIChpc0FjY2Vzc29yKQotICAgICAgICAgICAgICAgICAgICBzbG90
LnNldEN1c3RvbUFjY2Vzc29yKG9iaiwgc2V0dGVyKTsKLSAgICAgICAgICAgICAgICBlbHNlCi0g
ICAgICAgICAgICAgICAgICAgIHNsb3Quc2V0Q3VzdG9tVmFsdWUob2JqLCBzZXR0ZXIpOwotCi0g
ICAgICAgICAgICAgICAgYXV0byByZXN1bHQgPSBjYWxsQ3VzdG9tU2V0dGVyKGdsb2JhbE9iamVj
dCwgc2V0dGVyLCBpc0FjY2Vzc29yLCBvYmosIHNsb3QudGhpc1ZhbHVlKCksIHZhbHVlLCBwcm9w
ZXJ0eU5hbWUpOworICAgICAgICAgICAgICAgIHNsb3Quc2V0Q3VzdG9tQWNjZXNzb3Iob2JqLCBj
dXN0b21TZXR0ZXIpOyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgY3VzdG9t
U2V0dGVyKGdsb2JhbE9iamVjdCwgSlNWYWx1ZTo6ZW5jb2RlKHNsb3QudGhpc1ZhbHVlKCkpLCBK
U1ZhbHVlOjplbmNvZGUodmFsdWUpLCBwcm9wZXJ0eU5hbWUpOwogICAgICAgICAgICAgICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGZhbHNlKTsKLSAgICAgICAgICAgICAgICBpZiAocmVz
dWx0ICE9IFRyaVN0YXRlOjpJbmRldGVybWluYXRlKQotICAgICAgICAgICAgICAgICAgICByZXR1
cm4gcmVzdWx0ID09IFRyaVN0YXRlOjpUcnVlOworICAgICAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZXMgJiBQcm9wZXJ0eUF0
dHJpYnV0ZTo6Q3VzdG9tVmFsdWUpIHsKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogT25jZSBs
ZWdhY3kgUmVnRXhwIGZlYXR1cmVzIGFyZSBpbXBsZW1lbnRlZCwgdGhlcmUgd291bGQgYmUgbm8g
dXNlIGNhc2UgZm9yIGNhbGxpbmcgQ3VzdG9tVmFsdWUgc2V0dGVycyBpZiByZWNlaXZlciBpcyBh
bHRlcmVkLgorICAgICAgICAgICAgICAgIGlmIChjdXN0b21TZXR0ZXIgJiYgIShpc1RoaXNWYWx1
ZUFsdGVyZWQoc2xvdCwgb2JqKSAmJiBzbG90LmNvbnRleHQoKSA9PSBQdXRQcm9wZXJ0eVNsb3Q6
OlJlZmxlY3RTZXQpKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQg
b25seSBiZSBjYWNoaW5nIHRoZXNlIGlmIHdlJ3JlIG5vdCBhbiB1bmNhY2hlYWJsZSBkaWN0aW9u
YXJ5OgorICAgICAgICAgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjE1MzQ3CisgICAgICAgICAgICAgICAgICAgIHNsb3Quc2V0Q3VzdG9tVmFs
dWUob2JqLCBjdXN0b21TZXR0ZXIpOworICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FORF9S
RVRVUk4oc2NvcGUsIGN1c3RvbVNldHRlcihnbG9iYWxPYmplY3QsIEpTVmFsdWU6OmVuY29kZShv
YmopLCBKU1ZhbHVlOjplbmNvZGUodmFsdWUpLCBwcm9wZXJ0eU5hbWUpKTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgaWYgKCFpc1RoaXNWYWx1ZUFsdGVyZWQoc2xvdCwgb2Jq
KSkgeworICAgICAgICAgICAgICAgICAgICBvYmotPnB1dERpcmVjdCh2bSwgcHJvcGVydHlOYW1l
LCB2YWx1ZSwgYXR0cmlidXRlcyAmIH5Qcm9wZXJ0eUF0dHJpYnV0ZTo6Q3VzdG9tVmFsdWUsIHNs
b3QpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBBU1NFUlQoIShhdHRyaWJ1dGVzICYgUHJvcGVy
dHlBdHRyaWJ1dGU6OkFjY2Vzc29yKSk7Ci0KICAgICAgICAgICAgIC8vIElmIHRoZXJlJ3MgYW4g
ZXhpc3RpbmcgcHJvcGVydHkgb24gdGhlIGJhc2Ugb2JqZWN0LCBvciBvbiBvbmUgb2YgaXRzIAot
ICAgICAgICAgICAgLy8gcHJvdG90eXBlcywgd2Ugc2hvdWxkIHN0b3JlIHRoZSBwcm9wZXJ0eSBv
biB0aGUgKmJhc2UqIG9iamVjdC4KKyAgICAgICAgICAgIC8vIHByb3RvdHlwZXMsIHdlIHNob3Vs
ZCBzdG9yZSB0aGUgcHJvcGVydHkgb24gdGhlIHJlY2VpdmVyIG9iamVjdC4KICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGlmICghb2JqLT5zdGF0aWNQcm9wZXJ0aWVzUmVp
ZmllZCh2bSkpIHsKLSAgICAgICAgICAgIGlmIChvYmotPmNsYXNzSW5mbyh2bSktPmhhc1N0YXRp
Y1NldHRlck9yUmVhZG9ubHlQcm9wZXJ0aWVzKCkpIHsKLSAgICAgICAgICAgICAgICBpZiAoYXV0
byBlbnRyeSA9IG9iai0+ZmluZFByb3BlcnR5SGFzaEVudHJ5KHZtLCBwcm9wZXJ0eU5hbWUpKQot
ICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIHB1dEVudHJ5KGds
b2JhbE9iamVjdCwgZW50cnktPnRhYmxlLT5jbGFzc0ZvclRoaXMsIGVudHJ5LT52YWx1ZSwgb2Jq
LCB0aGlzLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KSk7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLSAgICAgICAgaWYgKG9iai0+dHlwZSgpID09IFByb3h5T2JqZWN0VHlwZSkgewotICAg
ICAgICAgICAgYXV0byogcHJveHkgPSBqc0Nhc3Q8UHJveHlPYmplY3QqPihvYmopOwotICAgICAg
ICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBwcm94eS0+UHJveHlPYmplY3Q6OnB1dChw
cm94eSwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KSk7Ci0gICAgICAg
IH0KKwogICAgICAgICBKU1ZhbHVlIHByb3RvdHlwZSA9IG9iai0+Z2V0UHJvdG90eXBlKHZtLCBn
bG9iYWxPYmplY3QpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBmYWxzZSk7
CiAgICAgICAgIGlmIChwcm90b3R5cGUuaXNOdWxsKCkpCkBAIC04NjcsMTEgKzg2Miw2MCBAQCBi
b29sIEpTT2JqZWN0OjpwdXRJbmxpbmVTbG93KEpTR2xvYmFsT2JqCiAgICAgICAgIG9iaiA9IGFz
T2JqZWN0KHByb3RvdHlwZSk7CiAgICAgfQogCi0gICAgaWYgKCFwdXREaXJlY3RJbnRlcm5hbDxQ
dXRNb2RlUHV0Pih2bSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgMCwgc2xvdCkpCisgICAgaWYgKFVO
TElLRUxZKGlzVGhpc1ZhbHVlQWx0ZXJlZChzbG90LCB0aGlzKSkpCisgICAgICAgIFJFTEVBU0Vf
QU5EX1JFVFVSTihzY29wZSwgZGVmaW5lUHJvcGVydHlPblJlY2VpdmVyKGdsb2JhbE9iamVjdCwg
cHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCkpOworICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29w
ZSwgcHV0SW5saW5lRmFzdChnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3Qp
KTsKK30KKworLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vcmRpbmFyeXNldCAoc3Rl
cHMgMy5jLWUpCitib29sIEpTT2JqZWN0OjpkZWZpbmVQcm9wZXJ0eU9uUmVjZWl2ZXIoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1
ZSB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBzbG90KQoreworICAgIEFTU0VSVCghcGFyc2VJbmRl
eChwcm9wZXJ0eU5hbWUpKTsKKworICAgIFZNJiB2bSA9IGdldFZNKGdsb2JhbE9iamVjdCk7Cisg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgSlNPYmplY3Qq
IHJlY2VpdmVyID0gc2xvdC50aGlzVmFsdWUoKS5nZXRPYmplY3QoKTsKKyAgICBpZiAoIXJlY2Vp
dmVyKSB7CisgICAgICAgIC8vIEZJWE1FOiBGb3IgYSBmYWlsdXJlIGR1ZSB0byBwcmltaXRpdmUg
cmVjZWl2ZXIsIHRoZSBlcnJvciBtZXNzYWdlIGlzIG1pc2xlYWRpbmcuCisgICAgICAgIHJldHVy
biB0eXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgc2xvdC5pc1N0cmljdE1vZGUoKSwgUmVh
ZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpOworICAgIH0KKworICAgIGlmIChzbG90LmlzVGFpbnRl
ZEJ5T3BhcXVlT2JqZWN0KCkgfHwgc2xvdC5jb250ZXh0KCkgPT0gUHV0UHJvcGVydHlTbG90OjpS
ZWZsZWN0U2V0KSB7CisgICAgICAgIGlmIChyZWNlaXZlci0+bWV0aG9kVGFibGUodm0pLT5kZWZp
bmVPd25Qcm9wZXJ0eSAhPSBKU09iamVjdDo6ZGVmaW5lT3duUHJvcGVydHkpCisgICAgICAgICAg
ICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIGRlZmluZVByb3BlcnR5T25SZWNlaXZlclNsb3co
Z2xvYmFsT2JqZWN0LCByZWNlaXZlciwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdC5pc1N0cmlj
dE1vZGUoKSkpOworICAgIH0KKworICAgIGlmICghcmVjZWl2ZXItPnB1dERpcmVjdEludGVybmFs
PFB1dE1vZGVQdXQ+KHZtLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCAwLCBzbG90KSkgeworICAgICAg
ICAvLyBGSVhNRTogRm9yIGEgZmFpbHVyZSBkdWUgdG8gbm9uLWV4dGVuc2libGUgc3RydWN0dXJl
LCB0aGUgZXJyb3IgbWVzc2FnZSBpcyBtaXNsZWFkaW5nLgogICAgICAgICByZXR1cm4gdHlwZUVy
cm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsIHNsb3QuaXNTdHJpY3RNb2RlKCksIFJlYWRvbmx5UHJv
cGVydHlXcml0ZUVycm9yKTsKKyAgICB9CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK2Jvb2wgSlNP
YmplY3Q6OmRlZmluZVByb3BlcnR5T25SZWNlaXZlclNsb3coSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgSlNPYmplY3QqIHJlY2VpdmVyLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBK
U1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZFRocm93KQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9i
amVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisK
KyAgICBQcm9wZXJ0eVNsb3Qgc2xvdChyZWNlaXZlciwgUHJvcGVydHlTbG90OjpJbnRlcm5hbE1l
dGhvZFR5cGU6OkdldE93blByb3BlcnR5KTsKKyAgICBib29sIGhhc1Byb3BlcnR5ID0gcmVjZWl2
ZXItPm1ldGhvZFRhYmxlKHZtKS0+Z2V0T3duUHJvcGVydHlTbG90KHJlY2VpdmVyLCBnbG9iYWxP
YmplY3QsIHByb3BlcnR5TmFtZSwgc2xvdCk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgZmFsc2UpOworICAgIGlmIChoYXNQcm9wZXJ0eSkgeworICAgICAgICBpZiAoc2xvdC5hdHRy
aWJ1dGVzKCkgJiBQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHlPckFjY2Vzc29yT3JDdXN0b21B
Y2Nlc3NvcikgeworICAgICAgICAgICAgLy8gRklYTUU6IEZvciBhbiBhY2Nlc3NvciB3aXRoIHNl
dHRlciwgdGhlIGVycm9yIG1lc3NhZ2UgaXMgbWlzbGVhZGluZy4KKyAgICAgICAgICAgIHJldHVy
biB0eXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgc2hvdWxkVGhyb3csIFJlYWRvbmx5UHJv
cGVydHlXcml0ZUVycm9yKTsKKyAgICAgICAgfQorCisgICAgICAgIFByb3BlcnR5RGVzY3JpcHRv
ciB2YWx1ZURlc2NyaXB0b3I7CisgICAgICAgIHZhbHVlRGVzY3JpcHRvci5zZXRWYWx1ZSh2YWx1
ZSk7CisKKyAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCByZWNlaXZlci0+bWV0aG9k
VGFibGUodm0pLT5kZWZpbmVPd25Qcm9wZXJ0eShyZWNlaXZlciwgZ2xvYmFsT2JqZWN0LCBwcm9w
ZXJ0eU5hbWUsIHZhbHVlRGVzY3JpcHRvciwgc2hvdWxkVGhyb3cpKTsKKyAgICB9CisKKyAgICBS
RUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIHJlY2VpdmVyLT5tZXRob2RUYWJsZSh2bSktPmRlZmlu
ZU93blByb3BlcnR5KHJlY2VpdmVyLCBnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgUHJvcGVy
dHlEZXNjcmlwdG9yKHZhbHVlLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1
dGU6Ok5vbmUpKSwgc2hvdWxkVGhyb3cpKTsKK30KKwogYm9vbCBKU09iamVjdDo6cHV0QnlJbmRl
eChKU0NlbGwqIGNlbGwsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIHVuc2lnbmVkIHBy
b3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJvdykKIHsKICAgICBWTSYg
dm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CkBAIC0zODgyLDMwICszOTI2LDYgQEAgYm9vbCBKU09i
amVjdDo6YW55T2JqZWN0SW5DaGFpbk1heUludGVyYwogICAgIH0KIH0KIAotYm9vbCBKU09iamVj
dDo6cHJvdG90eXBlQ2hhaW5NYXlJbnRlcmNlcHRTdG9yZVRvKFZNJiB2bSwgUHJvcGVydHlOYW1l
IHByb3BlcnR5TmFtZSkKLXsKLSAgICBpZiAocGFyc2VJbmRleChwcm9wZXJ0eU5hbWUpKQotICAg
ICAgICByZXR1cm4gYW55T2JqZWN0SW5DaGFpbk1heUludGVyY2VwdEluZGV4ZWRBY2Nlc3Nlcyh2
bSk7Ci0gICAgCi0gICAgZm9yIChKU09iamVjdCogY3VycmVudCA9IHRoaXM7IDspIHsKLSAgICAg
ICAgSlNWYWx1ZSBwcm90b3R5cGUgPSBjdXJyZW50LT5nZXRQcm90b3R5cGVEaXJlY3Qodm0pOwot
ICAgICAgICBpZiAocHJvdG90eXBlLmlzTnVsbCgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICAKLSAgICAgICAgY3VycmVudCA9IGFzT2JqZWN0KHByb3RvdHlwZSk7Ci0gICAg
ICAgIAotICAgICAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzOwotICAgICAgICBQcm9wZXJ0eU9mZnNl
dCBvZmZzZXQgPSBjdXJyZW50LT5zdHJ1Y3R1cmUodm0pLT5nZXQodm0sIHByb3BlcnR5TmFtZSwg
YXR0cmlidXRlcyk7Ci0gICAgICAgIGlmICghSlNDOjppc1ZhbGlkT2Zmc2V0KG9mZnNldCkpCi0g
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgCi0gICAgICAgIGlmIChhdHRyaWJ1dGVzICYg
KFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IFByb3BlcnR5QXR0cmlidXRlOjpBY2Nlc3Nv
cikpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICB9Ci19Ci0KIGJvb2wgSlNPYmplY3Q6Om5lZWRzU2xvd1B1dEluZGV4aW5nKFZN
JiB2bSkgY29uc3QKIHsKICAgICByZXR1cm4gYW55T2JqZWN0SW5DaGFpbk1heUludGVyY2VwdElu
ZGV4ZWRBY2Nlc3Nlcyh2bSkgfHwgZ2xvYmFsT2JqZWN0KHZtKS0+aXNIYXZpbmdBQmFkVGltZSgp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCShyZXZpc2lv
biAyNzU3ODcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xNzMsNyArMTczLDYgQEAgcHVibGljOgogCiAgICAgSlNfRVhQT1JU
X1BSSVZBVEUgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU09iamVjdCos
IEpTR2xvYmFsT2JqZWN0KiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsK
ICAgICBib29sIGdldE93blByb3BlcnR5U2xvdElubGluZShKU0dsb2JhbE9iamVjdCosIFByb3Bl
cnR5TmFtZSwgUHJvcGVydHlTbG90Jik7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEVfSUZfQVNTRVJU
X0VOQUJMRUQgc3RhdGljIHZvaWQgZG9QdXRQcm9wZXJ0eVNlY3VyaXR5Q2hlY2soSlNPYmplY3Qq
LCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwgUHV0UHJvcGVydHlTbG90Jik7CiAKICAg
ICAvLyBUaGUga2V5IGRpZmZlcmVuY2UgYmV0d2VlbiB0aGlzIGFuZCBnZXRPd25Qcm9wZXJ0eVNs
b3QgaXMgdGhhdCBnZXRPd25Qcm9wZXJ0eVNsb3QKICAgICAvLyBjdXJyZW50bHkgcmV0dXJucyBp
bmNvcnJlY3QgcmVzdWx0cyBmb3IgdGhlIERPTSB3aW5kb3cgKHdpdGggbm9uLW93biBwcm9wZXJ0
aWVzKQpAQCAtMjAxLDcgKzIwMCwxMCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX2J1dHRl
cmZseS0+dmVjdG9yTGVuZ3RoKCk7CiAgICAgfQogICAgIAotICAgIHN0YXRpYyBib29sIHB1dElu
bGluZUZvckpTT2JqZWN0KEpTQ2VsbCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBK
U1ZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMgYm9vbCBwdXRJbmxpbmVGb3JK
U09iamVjdChKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVl
LCBQdXRQcm9wZXJ0eVNsb3QmKTsKKworICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBib29s
IGRlZmluZVByb3BlcnR5T25SZWNlaXZlcihKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwg
SlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgTkVWRVJf
SU5MSU5FIHN0YXRpYyBib29sIGRlZmluZVByb3BlcnR5T25SZWNlaXZlclNsb3coSlNHbG9iYWxP
YmplY3QqLCBKU09iamVjdCosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJv
dyk7CiAgICAgCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGJvb2wgcHV0KEpTQ2VsbCos
IEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQcm9wZXJ0eVNsb3Qm
KTsKICAgICAvLyBwdXRCeUluZGV4IGFzc3VtZXMgdGhhdCB0aGUgcmVjZWl2ZXIgaXMgdGhpcyBK
U0NlbGwgb2JqZWN0LgpAQCAtMjIwLDEyICsyMjIsMTMgQEAgcHVibGljOgogCiAgICAgQUxXQVlT
X0lOTElORSBib29sIHB1dEJ5SW5kZXhJbmxpbmUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgdWludDY0X3QgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZFRocm93
KQogICAgIHsKKyAgICAgICAgVk0mIHZtID0gZ2V0Vk0oZ2xvYmFsT2JqZWN0KTsKICAgICAgICAg
aWYgKExJS0VMWShwcm9wZXJ0eU5hbWUgPD0gTUFYX0FSUkFZX0lOREVYKSkKICAgICAgICAgICAg
IHJldHVybiBwdXRCeUluZGV4SW5saW5lKGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8dWludDMy
X3Q+KHByb3BlcnR5TmFtZSksIHZhbHVlLCBzaG91bGRUaHJvdyk7CiAKICAgICAgICAgQVNTRVJU
KHByb3BlcnR5TmFtZSA8PSBtYXhTYWZlSW50ZWdlcigpKTsKICAgICAgICAgUHV0UHJvcGVydHlT
bG90IHNsb3QodGhpcywgc2hvdWxkVGhyb3cpOwotICAgICAgICByZXR1cm4gcHV0SW5saW5lRm9y
SlNPYmplY3QodGhpcywgZ2xvYmFsT2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tKGdldFZNKGdsb2Jh
bE9iamVjdCksIHByb3BlcnR5TmFtZSksIHZhbHVlLCBzbG90KTsKKyAgICAgICAgcmV0dXJuIG1l
dGhvZFRhYmxlKHZtKS0+cHV0KHRoaXMsIGdsb2JhbE9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbSh2
bSwgcHJvcGVydHlOYW1lKSwgdmFsdWUsIHNsb3QpOwogICAgIH0KICAgICAgICAgCiAgICAgLy8g
VGhpcyBpcyBzaW1pbGFyIHRvIHRoZSBwdXREaXJlY3QqIG1ldGhvZHM6CkBAIC02NDQsNiArNjQ3
LDcgQEAgcHVibGljOgogICAgIC8vICAtIGF0dHJpYnV0ZXMgd2lsbCBiZSByZXNwZWN0ZWQgKGFm
dGVyIHRoZSBjYWxsIHRoZSBwcm9wZXJ0eSB3aWxsIGV4aXN0IHdpdGggdGhlIGdpdmVuIGF0dHJp
YnV0ZXMpCiAgICAgLy8gIC0gdGhlIHByb3BlcnR5IG5hbWUgaXMgYXNzdW1lZCB0byBub3QgYmUg
YW4gaW5kZXguCiAgICAgYm9vbCBwdXREaXJlY3QoVk0mLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUs
IHVuc2lnbmVkIGF0dHJpYnV0ZXMgPSAwKTsKKyAgICBib29sIHB1dERpcmVjdChWTSYsIFByb3Bl
cnR5TmFtZSwgSlNWYWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcywgUHV0UHJvcGVydHlTbG90Jik7
CiAgICAgYm9vbCBwdXREaXJlY3QoVk0mLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3Bl
cnR5U2xvdCYpOwogICAgIHZvaWQgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24oVk0mLCBQcm9w
ZXJ0eU5hbWUsIEpTVmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMgPSAwKTsKICAgICBib29sIHB1
dERpcmVjdE5vbkluZGV4QWNjZXNzb3IoVk0mLCBQcm9wZXJ0eU5hbWUsIEdldHRlclNldHRlcios
IHVuc2lnbmVkIGF0dHJpYnV0ZXMpOwpAQCAtODE3LDcgKzgyMSw2IEBAIHB1YmxpYzoKICAgICBi
b29sIGlzRnJvemVuKFZNJiB2bSkgeyByZXR1cm4gc3RydWN0dXJlKHZtKS0+aXNGcm96ZW4odm0p
OyB9CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSBib29sIGFueU9iamVjdEluQ2hhaW5NYXlJbnRl
cmNlcHRJbmRleGVkQWNjZXNzZXMoVk0mKSBjb25zdDsKLSAgICBKU19FWFBPUlRfUFJJVkFURSBi
b29sIHByb3RvdHlwZUNoYWluTWF5SW50ZXJjZXB0U3RvcmVUbyhWTSYsIFByb3BlcnR5TmFtZSk7
CiAgICAgYm9vbCBuZWVkc1Nsb3dQdXRJbmRleGluZyhWTSYpIGNvbnN0OwogCiBwcml2YXRlOgpA
QCAtOTU0LDYgKzk1Nyw3IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgY2FuUGVyZm9ybUZhc3RQdXRJ
bmxpbmUoVk0mLCBQcm9wZXJ0eU5hbWUpOwogICAgIGJvb2wgY2FuUGVyZm9ybUZhc3RQdXRJbmxp
bmVFeGNsdWRpbmdQcm90byhWTSYpOworICAgIGJvb2wgcHV0SW5saW5lRmFzdChKU0dsb2JhbE9i
amVjdCosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7CiAKICAgICBi
b29sIG1heUJlUHJvdG90eXBlKCkgY29uc3Q7CiAgICAgdm9pZCBkaWRCZWNvbWVQcm90b3R5cGUo
KTsKQEAgLTE0NDIsMTAgKzE0NDYsNiBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgSlNPYmplY3Q6Omdl
dE93blByb3BlCiB7CiAgICAgcmV0dXJuIGdldE93blByb3BlcnR5U2xvdEltcGwob2JqZWN0LCBn
bG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgc2xvdCk7CiB9Ci0KLUFMV0FZU19JTkxJTkUgdm9p
ZCBKU09iamVjdDo6ZG9QdXRQcm9wZXJ0eVNlY3VyaXR5Q2hlY2soSlNPYmplY3QqLCBKU0dsb2Jh
bE9iamVjdCosIFByb3BlcnR5TmFtZSwgUHV0UHJvcGVydHlTbG90JikKLXsKLX0KICNlbmRpZgog
CiAvLyBJdCBtYXkgc2VlbSBjcmF6eSB0byBpbmxpbmUgYSBmdW5jdGlvbiB0aGlzIGxhcmdlIGJ1
dCBpdCBtYWtlcyBhIGJpZyBkaWZmZXJlbmNlCkBAIC0xNTI5LDYgKzE1MjksMTMgQEAgaW5saW5l
IGJvb2wgSlNPYmplY3Q6OnB1dERpcmVjdChWTSYgdm0sIAogICAgIHJldHVybiBwdXREaXJlY3RJ
bnRlcm5hbDxQdXRNb2RlRGVmaW5lT3duUHJvcGVydHk+KHZtLCBwcm9wZXJ0eU5hbWUsIHZhbHVl
LCBhdHRyaWJ1dGVzLCBzbG90KTsKIH0KIAoraW5saW5lIGJvb2wgSlNPYmplY3Q6OnB1dERpcmVj
dChWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIHVuc2ln
bmVkIGF0dHJpYnV0ZXMsIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKK3sKKyAgICBBU1NFUlQoIXZh
bHVlLmlzR2V0dGVyU2V0dGVyKCkpOworICAgIEFTU0VSVCghdmFsdWUuaXNDdXN0b21HZXR0ZXJT
ZXR0ZXIoKSk7CisgICAgcmV0dXJuIHB1dERpcmVjdEludGVybmFsPFB1dE1vZGVEZWZpbmVPd25Q
cm9wZXJ0eT4odm0sIHByb3BlcnR5TmFtZSwgdmFsdWUsIGF0dHJpYnV0ZXMsIHNsb3QpOworfQor
CiBpbmxpbmUgYm9vbCBKU09iamVjdDo6cHV0RGlyZWN0KFZNJiB2bSwgUHJvcGVydHlOYW1lIHBy
b3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBzbG90KQogewogICAg
IEFTU0VSVCghdmFsdWUuaXNHZXR0ZXJTZXR0ZXIoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU09iamVjdElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdElubGluZXMuaAkocmV2aXNpb24gMjc1Nzg3KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3RJbmxpbmVzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTY3LDcgKzY3LDcgQEAgQUxXQVlTX0lOTElORSBib29sIEpTT2JqZWN0Ojpj
YW5QZXJmb3JtRgogICAgIEpTT2JqZWN0KiBvYmogPSB0aGlzOwogICAgIHdoaWxlICh0cnVlKSB7
CiAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gb2JqLT5zdHJ1Y3R1cmUodm0pOwotICAg
ICAgICBpZiAoc3RydWN0dXJlLT5oYXNSZWFkT25seU9yR2V0dGVyU2V0dGVyUHJvcGVydGllc0V4
Y2x1ZGluZ1Byb3RvKCkgfHwgc3RydWN0dXJlLT50eXBlSW5mbygpLm92ZXJyaWRlc0dldFByb3Rv
dHlwZSgpKQorICAgICAgICBpZiAoc3RydWN0dXJlLT5oYXNSZWFkT25seU9yR2V0dGVyU2V0dGVy
UHJvcGVydGllc0V4Y2x1ZGluZ1Byb3RvKCkgfHwgc3RydWN0dXJlLT50eXBlSW5mbygpLm92ZXJy
aWRlc1B1dCgpIHx8IHN0cnVjdHVyZS0+dHlwZUluZm8oKS5vdmVycmlkZXNHZXRQcm90b3R5cGUo
KSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICBwcm90b3R5cGUgPSBvYmot
PmdldFByb3RvdHlwZURpcmVjdCh2bSk7CkBAIC0yMzEsMzIgKzIzMSw0MiBAQCBBTFdBWVNfSU5M
SU5FIFByb3BlcnR5T2Zmc2V0IEpTT2JqZWN0OjpwCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAot
Ly8gRUNNQSA4LjYuMi4yCi1BTFdBWVNfSU5MSU5FIGJvb2wgSlNPYmplY3Q6OnB1dElubGluZUZv
ckpTT2JqZWN0KEpTQ2VsbCogY2VsbCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHJv
cGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBz
bG90KQorLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vcmRpbmFyeXNldAorQUxXQVlT
X0lOTElORSBib29sIEpTT2JqZWN0OjpwdXRJbmxpbmVGb3JKU09iamVjdChKU09iamVjdCogdGhp
c09iamVjdCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIHByb3Bl
cnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBzbG90KQogewogICAgIFZN
JiB2bSA9IGdldFZNKGdsb2JhbE9iamVjdCk7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwotCi0gICAgSlNPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNPYmpl
Y3QqPihjZWxsKTsKICAgICBBU1NFUlQodmFsdWUpOwogICAgIEFTU0VSVCghSGVhcDo6aGVhcCh2
YWx1ZSkgfHwgSGVhcDo6aGVhcCh2YWx1ZSkgPT0gSGVhcDo6aGVhcCh0aGlzT2JqZWN0KSk7CiAK
LSAgICBpZiAoVU5MSUtFTFkoaXNUaGlzVmFsdWVBbHRlcmVkKHNsb3QsIHRoaXNPYmplY3QpKSkK
LSAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBvcmRpbmFyeVNldFNsb3coZ2xvYmFs
T2JqZWN0LCB0aGlzT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90LnRoaXNWYWx1ZSgp
LCBzbG90LmlzU3RyaWN0TW9kZSgpKSk7Ci0KICAgICAvLyBUcnkgaW5kZXhlZCBwdXQgZmlyc3Qu
IFRoaXMgaXMgcmVxdWlyZWQgZm9yIGNvcnJlY3RuZXNzLCBzaW5jZSBsb2FkcyBvbiBwcm9wZXJ0
eSBuYW1lcyB0aGF0IGFwcGVhciBsaWtlCiAgICAgLy8gdmFsaWQgaW5kaWNlcyB3aWxsIG5ldmVy
IGxvb2sgaW4gdGhlIG5hbWVkIHByb3BlcnR5IHN0b3JhZ2UuCi0gICAgaWYgKE9wdGlvbmFsPHVp
bnQzMl90PiBpbmRleCA9IHBhcnNlSW5kZXgocHJvcGVydHlOYW1lKSkKLSAgICAgICAgUkVMRUFT
RV9BTkRfUkVUVVJOKHNjb3BlLCBwdXRCeUluZGV4KHRoaXNPYmplY3QsIGdsb2JhbE9iamVjdCwg
aW5kZXgudmFsdWUoKSwgdmFsdWUsIHNsb3QuaXNTdHJpY3RNb2RlKCkpKTsKLQotICAgIGlmICh0
aGlzT2JqZWN0LT5jYW5QZXJmb3JtRmFzdFB1dElubGluZSh2bSwgcHJvcGVydHlOYW1lKSkgewot
ICAgICAgICBBU1NFUlQoIXRoaXNPYmplY3QtPnByb3RvdHlwZUNoYWluTWF5SW50ZXJjZXB0U3Rv
cmVUbyh2bSwgcHJvcGVydHlOYW1lKSk7Ci0gICAgICAgIGlmICghdGhpc09iamVjdC0+cHV0RGly
ZWN0SW50ZXJuYWw8UHV0TW9kZVB1dD4odm0sIHByb3BlcnR5TmFtZSwgdmFsdWUsIDAsIHNsb3Qp
KQotICAgICAgICAgICAgcmV0dXJuIHR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCBzbG90
LmlzU3RyaWN0TW9kZSgpLCBSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcik7Ci0gICAgICAgIHJl
dHVybiB0cnVlOworICAgIGlmIChPcHRpb25hbDx1aW50MzJfdD4gaW5kZXggPSBwYXJzZUluZGV4
KHByb3BlcnR5TmFtZSkpIHsKKyAgICAgICAgaWYgKFVOTElLRUxZKGlzVGhpc1ZhbHVlQWx0ZXJl
ZChzbG90LCB0aGlzT2JqZWN0KSkpCisgICAgICAgICAgICByZXR1cm4gb3JkaW5hcnlTZXRTbG93
KGdsb2JhbE9iamVjdCwgdGhpc09iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdC50aGlz
VmFsdWUoKSwgc2xvdC5pc1N0cmljdE1vZGUoKSk7CisgICAgICAgIHJldHVybiB0aGlzT2JqZWN0
LT5tZXRob2RUYWJsZSh2bSktPnB1dEJ5SW5kZXgodGhpc09iamVjdCwgZ2xvYmFsT2JqZWN0LCBp
bmRleC52YWx1ZSgpLCB2YWx1ZSwgc2xvdC5pc1N0cmljdE1vZGUoKSk7CiAgICAgfQogCi0gICAg
UkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCB0aGlzT2JqZWN0LT5wdXRJbmxpbmVTbG93KGdsb2Jh
bE9iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCkpOworICAgIGlmICghdGhpc09iamVj
dC0+Y2FuUGVyZm9ybUZhc3RQdXRJbmxpbmUodm0sIHByb3BlcnR5TmFtZSkpCisgICAgICAgIHJl
dHVybiB0aGlzT2JqZWN0LT5wdXRJbmxpbmVTbG93KGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1l
LCB2YWx1ZSwgc2xvdCk7CisgICAgaWYgKFVOTElLRUxZKGlzVGhpc1ZhbHVlQWx0ZXJlZChzbG90
LCB0aGlzT2JqZWN0KSkpCisgICAgICAgIHJldHVybiBkZWZpbmVQcm9wZXJ0eU9uUmVjZWl2ZXIo
Z2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KTsKKyAgICByZXR1cm4gdGhp
c09iamVjdC0+cHV0SW5saW5lRmFzdChnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgdmFsdWUs
IHNsb3QpOworfQorCitBTFdBWVNfSU5MSU5FIGJvb2wgSlNPYmplY3Q6OnB1dElubGluZUZhc3Qo
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwg
SlNWYWx1ZSB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBzbG90KQoreworICAgIEFTU0VSVCghcGFy
c2VJbmRleChwcm9wZXJ0eU5hbWUpKTsKKyAgICBBU1NFUlQoY2FuUGVyZm9ybUZhc3RQdXRJbmxp
bmUodm0sIHByb3BlcnR5TmFtZSkpOworICAgIEFTU0VSVCghaXNUaGlzVmFsdWVBbHRlcmVkKHNs
b3QsIHRoaXMpKTsKKworICAgIFZNJiB2bSA9IGdldFZNKGdsb2JhbE9iamVjdCk7CisgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgaWYgKCFwdXREaXJlY3RJ
bnRlcm5hbDxQdXRNb2RlUHV0Pih2bSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgMCwgc2xvdCkpIHsK
KyAgICAgICAgLy8gRklYTUU6IEZvciBhIGZhaWx1cmUgZHVlIHRvIG5vbi1leHRlbnNpYmxlIHN0
cnVjdHVyZSwgdGhlIGVycm9yIG1lc3NhZ2UgaXMgbWlzbGVhZGluZy4KKyAgICAgICAgcmV0dXJu
IHR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCBzbG90LmlzU3RyaWN0TW9kZSgpLCBSZWFk
b25seVByb3BlcnR5V3JpdGVFcnJvcik7CisgICAgfQorICAgIHJldHVybiB0cnVlOwogfQogCiAv
LyBIYXNPd25Qcm9wZXJ0eShPLCBQKSBmcm9tIHNlY3Rpb24gNy4zLjExIGluIHRoZSBzcGVjLgpA
QCAtMjk5LDcgKzMwOSw3IEBAIEFMV0FZU19JTkxJTkUgYm9vbCBKU09iamVjdDo6cHV0RGlyZWN0
SW4KICAgICAgICAgdW5zaWduZWQgY3VycmVudEF0dHJpYnV0ZXM7CiAgICAgICAgIFByb3BlcnR5
T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0KHZtLCBwcm9wZXJ0eU5hbWUsIGN1cnJlbnRB
dHRyaWJ1dGVzKTsKICAgICAgICAgaWYgKG9mZnNldCAhPSBpbnZhbGlkT2Zmc2V0KSB7Ci0gICAg
ICAgICAgICBpZiAoKG1vZGUgPT0gUHV0TW9kZVB1dCkgJiYgY3VycmVudEF0dHJpYnV0ZXMgJiBQ
cm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkpCisgICAgICAgICAgICBpZiAoKG1vZGUgPT0gUHV0
TW9kZVB1dCkgJiYgY3VycmVudEF0dHJpYnV0ZXMgJiBQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9u
bHlPckFjY2Vzc29yT3JDdXN0b21BY2Nlc3NvcikKICAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAKICAgICAgICAgICAgIHB1dERpcmVjdCh2bSwgb2Zmc2V0LCB2YWx1ZSk7CkBAIC0zNTgs
NyArMzY4LDcgQEAgQUxXQVlTX0lOTElORSBib29sIEpTT2JqZWN0OjpwdXREaXJlY3RJbgogICAg
IHVuc2lnbmVkIGN1cnJlbnRBdHRyaWJ1dGVzOwogICAgIG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0
KHZtLCBwcm9wZXJ0eU5hbWUsIGN1cnJlbnRBdHRyaWJ1dGVzKTsKICAgICBpZiAob2Zmc2V0ICE9
IGludmFsaWRPZmZzZXQpIHsKLSAgICAgICAgaWYgKChtb2RlID09IFB1dE1vZGVQdXQpICYmIGN1
cnJlbnRBdHRyaWJ1dGVzICYgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5KQorICAgICAgICBp
ZiAoKG1vZGUgPT0gUHV0TW9kZVB1dCkgJiYgY3VycmVudEF0dHJpYnV0ZXMgJiBQcm9wZXJ0eUF0
dHJpYnV0ZTo6UmVhZE9ubHlPckFjY2Vzc29yT3JDdXN0b21BY2Nlc3NvcikKICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKIAogICAgICAgICBzdHJ1Y3R1cmUtPmRpZFJlcGxhY2VQcm9wZXJ0eShv
ZmZzZXQpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm94eS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJveHkuaAkocmV2
aXNpb24gMjc1Nzg3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm94eS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw3IEBAIG5hbWVzcGFjZSBKU0MgewogY2xhc3Mg
SlNQcm94eSA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKIHB1YmxpYzoKICAgICB1c2luZyBC
YXNlID0gSlNOb25GaW5hbE9iamVjdDsKLSAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0
cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBPdmVycmlkZXNHZXRPd25Qcm9w
ZXJ0eVNsb3QgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eU5hbWVzIHwgT3ZlcnJpZGVzR2V0UHJv
dG90eXBlIHwgSW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0
aElzTm90WmVybzsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdz
ID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBP
dmVycmlkZXNHZXRPd25Qcm9wZXJ0eU5hbWVzIHwgT3ZlcnJpZGVzUHV0IHwgT3ZlcnJpZGVzR2V0
UHJvdG90eXBlIHwgSW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxl
bmd0aElzTm90WmVybzsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFj
ZUFjY2Vzcz4KICAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVHlwZUluZm8uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGVJbmZvLmgJKHJldmlzaW9u
IDI3NTc4NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVHlwZUluZm8uaAko
d29ya2luZyBjb3B5KQpAQCAtNTcsNyArNTcsNyBAQCBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVk
IElzSW1tdXRhYmxlUHJvCiBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIEdldE93blByb3BlcnR5
U2xvdElzSW1wdXJlRm9yUHJvcGVydHlBYnNlbmNlID0gMSA8PCAxNTsKIHN0YXRpYyBjb25zdGV4
cHIgdW5zaWduZWQgSW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxl
bmd0aElzTm90WmVybyA9IDEgPDwgMTY7CiBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVj
dHVyZUlzSW1tb3J0YWwgPSAxIDw8IDE3Owotc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBIYXNQ
dXRQcm9wZXJ0eVNlY3VyaXR5Q2hlY2sgPSAxIDw8IDE4Oworc3RhdGljIGNvbnN0ZXhwciB1bnNp
Z25lZCBPdmVycmlkZXNQdXQgPSAxIDw8IDE4Owogc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBP
dmVycmlkZXNHZXRQcm90b3R5cGUgPSAxIDw8IDE5Owogc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25l
ZCBHZXRPd25Qcm9wZXJ0eVNsb3RNYXlCZVdyb25nQWJvdXREb250RW51bSA9IDEgPDwgMjA7CiAK
QEAgLTk0LDYgKzk0LDcgQEAgcHVibGljOgogICAgIGJvb2wgaW1wbGVtZW50c0RlZmF1bHRIYXNJ
bnN0YW5jZSgpIGNvbnN0IHsgcmV0dXJuIGlzU2V0T25GbGFnczE8SW1wbGVtZW50c0RlZmF1bHRI
YXNJbnN0YW5jZT4oKTsgfQogICAgIGJvb2wgb3ZlcnJpZGVzR2V0Q2FsbERhdGEoKSBjb25zdCB7
IHJldHVybiBpc1NldE9uRmxhZ3MxPE92ZXJyaWRlc0dldENhbGxEYXRhPigpOyB9CiAgICAgYm9v
bCBvdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QoKSBjb25zdCB7IHJldHVybiBvdmVycmlkZXNH
ZXRPd25Qcm9wZXJ0eVNsb3QoaW5saW5lVHlwZUZsYWdzKCkpOyB9CisgICAgYm9vbCBoYXNTdGF0
aWNQcm9wZXJ0eVRhYmxlKCkgY29uc3QgeyByZXR1cm4gaGFzU3RhdGljUHJvcGVydHlUYWJsZShp
bmxpbmVUeXBlRmxhZ3MoKSk7IH0KICAgICBzdGF0aWMgYm9vbCBvdmVycmlkZXNHZXRPd25Qcm9w
ZXJ0eVNsb3QoSW5saW5lVHlwZUZsYWdzIGZsYWdzKSB7IHJldHVybiBmbGFncyAmIE92ZXJyaWRl
c0dldE93blByb3BlcnR5U2xvdDsgfQogICAgIHN0YXRpYyBib29sIGhhc1N0YXRpY1Byb3BlcnR5
VGFibGUoSW5saW5lVHlwZUZsYWdzIGZsYWdzKSB7IHJldHVybiBmbGFncyAmIEhhc1N0YXRpY1By
b3BlcnR5VGFibGU7IH0KICAgICBzdGF0aWMgYm9vbCBwZXJDZWxsQml0KElubGluZVR5cGVGbGFn
cyBmbGFncykgeyByZXR1cm4gZmxhZ3MgJiBUeXBlSW5mb1BlckNlbGxCaXQ7IH0KQEAgLTEwMiwx
MiArMTAzLDEyIEBAIHB1YmxpYzoKICAgICBib29sIG92ZXJyaWRlc0dldE93blByb3BlcnR5TmFt
ZXMoKSBjb25zdCB7IHJldHVybiBpc1NldE9uRmxhZ3MyPE92ZXJyaWRlc0dldE93blByb3BlcnR5
TmFtZXM+KCk7IH0KICAgICBib29sIG92ZXJyaWRlc0dldE93blNwZWNpYWxQcm9wZXJ0eU5hbWVz
KCkgY29uc3QgeyByZXR1cm4gaXNTZXRPbkZsYWdzMjxPdmVycmlkZXNHZXRPd25TcGVjaWFsUHJv
cGVydHlOYW1lcz4oKTsgfQogICAgIGJvb2wgb3ZlcnJpZGVzQW55Rm9ybU9mR2V0T3duUHJvcGVy
dHlOYW1lcygpIGNvbnN0IHsgcmV0dXJuIG92ZXJyaWRlc0dldE93blByb3BlcnR5TmFtZXMoKSB8
fCBvdmVycmlkZXNHZXRPd25TcGVjaWFsUHJvcGVydHlOYW1lcygpOyB9CisgICAgYm9vbCBvdmVy
cmlkZXNQdXQoKSBjb25zdCB7IHJldHVybiBpc1NldE9uRmxhZ3MyPE92ZXJyaWRlc1B1dD4oKTsg
fQogICAgIGJvb2wgb3ZlcnJpZGVzR2V0UHJvdG90eXBlKCkgY29uc3QgeyByZXR1cm4gaXNTZXRP
bkZsYWdzMjxPdmVycmlkZXNHZXRQcm90b3R5cGU+KCk7IH0KICAgICBib29sIHByb2hpYml0c1By
b3BlcnR5Q2FjaGluZygpIGNvbnN0IHsgcmV0dXJuIGlzU2V0T25GbGFnczI8UHJvaGliaXRzUHJv
cGVydHlDYWNoaW5nPigpOyB9CiAgICAgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RJc0ltcHVyZSgp
IGNvbnN0IHsgcmV0dXJuIGlzU2V0T25GbGFnczI8R2V0T3duUHJvcGVydHlTbG90SXNJbXB1cmU+
KCk7IH0KICAgICBib29sIGdldE93blByb3BlcnR5U2xvdElzSW1wdXJlRm9yUHJvcGVydHlBYnNl
bmNlKCkgY29uc3QgeyByZXR1cm4gaXNTZXRPbkZsYWdzMjxHZXRPd25Qcm9wZXJ0eVNsb3RJc0lt
cHVyZUZvclByb3BlcnR5QWJzZW5jZT4oKTsgfQogICAgIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90
TWF5QmVXcm9uZ0Fib3V0RG9udEVudW0oKSBjb25zdCB7IHJldHVybiBpc1NldE9uRmxhZ3MyPEdl
dE93blByb3BlcnR5U2xvdE1heUJlV3JvbmdBYm91dERvbnRFbnVtPigpOyB9Ci0gICAgYm9vbCBo
YXNQdXRQcm9wZXJ0eVNlY3VyaXR5Q2hlY2soKSBjb25zdCB7IHJldHVybiBpc1NldE9uRmxhZ3My
PEhhc1B1dFByb3BlcnR5U2VjdXJpdHlDaGVjaz4oKTsgfQogICAgIGJvb2wgbmV3SW1wdXJlUHJv
cGVydHlGaXJlc1dhdGNocG9pbnRzKCkgY29uc3QgeyByZXR1cm4gaXNTZXRPbkZsYWdzMjxOZXdJ
bXB1cmVQcm9wZXJ0eUZpcmVzV2F0Y2hwb2ludHM+KCk7IH0KICAgICBib29sIGlzSW1tdXRhYmxl
UHJvdG90eXBlRXhvdGljT2JqZWN0KCkgY29uc3QgeyByZXR1cm4gaXNTZXRPbkZsYWdzMjxJc0lt
bXV0YWJsZVByb3RvdHlwZUV4b3RpY09iamVjdD4oKTsgfQogICAgIGJvb2wgaW50ZXJjZXB0c0dl
dE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybygpIGNvbnN0IHsg
cmV0dXJuIGlzU2V0T25GbGFnczI8SW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhF
dmVuV2hlbkxlbmd0aElzTm90WmVybz4oKTsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvTG9va3VwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvTG9va3VwLmgJKHJldmlzaW9uIDI3NTc4NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0xvb2t1cC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNjIsNzAgKzI2Miw2IEBAIGlu
bGluZSBib29sIHJlcGxhY2VTdGF0aWNQcm9wZXJ0eVNsb3QoVk0KICAgICByZXR1cm4gdHJ1ZTsK
IH0KIAotLy8gJ2Jhc2UnIG1lYW5zIHRoZSBvYmplY3QgaG9sZGluZyB0aGUgcHJvcGVydHkgKHBv
c3NpYmx5IGluIHRoZSBwcm90b3R5cGUgY2hhaW4gb2YgdGhlIG9iamVjdCBwdXQgd2FzIGNhbGxl
ZCBvbikuCi0vLyAndGhpc1ZhbHVlJyBpcyB0aGUgb2JqZWN0IHRoYXQgcHV0IGlzIGJlaW5nIGFw
cGxpZWQgdG8gKGluIHRoZSBjYXNlIG9mIGEgcHJveHksIHRoZSBwcm94eSB0YXJnZXQpLgotLy8g
J3Nsb3QudGhpc1ZhbHVlKCknIGlzIHRoZSBvYmplY3QgdGhlIHB1dCB3YXMgb3JpZ2luYWxseSBw
ZXJmb3JtZWQgb24gKGluIHRoZSBjYXNlIG9mIGEgcHJveHksIHRoZSBwcm94eSBpdHNlbGYpLgot
aW5saW5lIGJvb2wgcHV0RW50cnkoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3Qg
Q2xhc3NJbmZvKiwgY29uc3QgSGFzaFRhYmxlVmFsdWUqIGVudHJ5LCBKU09iamVjdCogYmFzZSwg
SlNPYmplY3QqIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2
YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBzbG90KQotewotICAgIFZNJiB2bSA9IGdldFZNKGdsb2Jh
bE9iamVjdCk7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0g
ICAgaWYgKGVudHJ5LT5hdHRyaWJ1dGVzKCkgJiBQcm9wZXJ0eUF0dHJpYnV0ZTo6QnVpbHRpbk9y
RnVuY3Rpb25PckxhenlQcm9wZXJ0eSkgewotICAgICAgICBpZiAoIShlbnRyeS0+YXR0cmlidXRl
cygpICYgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5KSkgewotICAgICAgICAgICAgLy8gSWYg
dGhpcyBpcyBhIGZ1bmN0aW9uIG9yIGxhenkgcHJvcGVydHkgcHV0IHRoZW4gd2UganVzdCBkbyB0
aGUgcHV0IGJlY2F1c2UKLSAgICAgICAgICAgIC8vIGxvZ2ljYWxseSB0aGUgb2JqZWN0IGFscmVh
ZHkgaGFkIHRoZSBwcm9wZXJ0eSwgc28gdGhpcyBpcyBqdXN0IGEgcmVwbGFjZS4KLSAgICAgICAg
ICAgIC8vIEZJWE1FOiB0aGlzVmFsdWUgbWF5IGJlIGFuIG9iamVjdCB3aXRoIG5vbi1leHRlbnNp
YmxlIHN0cnVjdHVyZSB3ZSBtdXN0IHRocm93IGZvci4KLSAgICAgICAgICAgIGlmIChKU09iamVj
dCogdGhpc09iamVjdCA9IGpzRHluYW1pY0Nhc3Q8SlNPYmplY3QqPih2bSwgdGhpc1ZhbHVlKSkK
LSAgICAgICAgICAgICAgICB0aGlzT2JqZWN0LT5wdXREaXJlY3Qodm0sIHByb3BlcnR5TmFtZSwg
dmFsdWUpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0
dXJuIHR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCBzbG90LmlzU3RyaWN0TW9kZSgpLCBS
ZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcik7Ci0gICAgfQotCi0gICAgaWYgKGVudHJ5LT5hdHRy
aWJ1dGVzKCkgJiBQcm9wZXJ0eUF0dHJpYnV0ZTo6QWNjZXNzb3IpCi0gICAgICAgIHJldHVybiB0
eXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgc2xvdC5pc1N0cmljdE1vZGUoKSwgUmVhZG9u
bHlQcm9wZXJ0eVdyaXRlRXJyb3IpOwotCi0gICAgaWYgKCEoZW50cnktPmF0dHJpYnV0ZXMoKSAm
IFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSkpIHsKLSAgICAgICAgQVNTRVJUX1dJVEhfTUVT
U0FHRSghKGVudHJ5LT5hdHRyaWJ1dGVzKCkgJiBQcm9wZXJ0eUF0dHJpYnV0ZTo6RE9NSklUQXR0
cmlidXRlKSwgIkRPTUpJVEF0dHJpYnV0ZSBzdXBwb3J0cyByZWFkb25seSBhdHRyaWJ1dGVzIGN1
cnJlbnRseS4iKTsKLSAgICAgICAgYm9vbCBpc0FjY2Vzc29yID0gZW50cnktPmF0dHJpYnV0ZXMo
KSAmIFByb3BlcnR5QXR0cmlidXRlOjpDdXN0b21BY2Nlc3NvcjsKLSAgICAgICAgLy8gRklYTUU6
IFdlIHNob3VsZCBvbmx5IGJlIGNhY2hpbmcgdGhlc2UgaWYgd2UncmUgbm90IGFuIHVuY2FjaGVh
YmxlIGRpY3Rpb25hcnk6Ci0gICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0yMTUzNDcKLSAgICAgICAgLy8gV2UgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCB3
ZSBkZWNpZGUgdG8gY2FjaGUgdGhpcyBwcm9wZXJ0eSBiZWZvcmUgd2UgcG90ZW50aWFsbHkgZXhl
Y3V0ZSBhcmliaXRyYXJ5IEpTLgotICAgICAgICBpZiAoaXNBY2Nlc3NvcikKLSAgICAgICAgICAg
IHNsb3Quc2V0Q3VzdG9tQWNjZXNzb3IoYmFzZSwgZW50cnktPnByb3BlcnR5UHV0dGVyKCkpOwot
ICAgICAgICBlbHNlCi0gICAgICAgICAgICBzbG90LnNldEN1c3RvbVZhbHVlKGJhc2UsIGVudHJ5
LT5wcm9wZXJ0eVB1dHRlcigpKTsKLQotICAgICAgICBhdXRvIHJlc3VsdCA9IGNhbGxDdXN0b21T
ZXR0ZXIoZ2xvYmFsT2JqZWN0LCBlbnRyeS0+cHJvcGVydHlQdXR0ZXIoKSwgaXNBY2Nlc3Nvciwg
YmFzZSwgc2xvdC50aGlzVmFsdWUoKSwgdmFsdWUsIHByb3BlcnR5TmFtZSk7Ci0gICAgICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGZhbHNlKTsKLSAgICAgICAgaWYgKHJlc3VsdCAhPSBU
cmlTdGF0ZTo6SW5kZXRlcm1pbmF0ZSkKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQgPT0gVHJp
U3RhdGU6OlRydWU7Ci0KLSAgICAgICAgLy8gRklYTUU6IHRoaXNWYWx1ZSBtYXkgYmUgYW4gb2Jq
ZWN0IHdpdGggbm9uLWV4dGVuc2libGUgc3RydWN0dXJlIHdlIG11c3QgdGhyb3cgZm9yLgotICAg
ICAgICBpZiAoSlNPYmplY3QqIHRoaXNPYmplY3QgPSBqc0R5bmFtaWNDYXN0PEpTT2JqZWN0Kj4o
dm0sIHRoaXNWYWx1ZSkpCi0gICAgICAgICAgICB0aGlzT2JqZWN0LT5wdXREaXJlY3Qodm0sIHBy
b3BlcnR5TmFtZSwgdmFsdWUpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBy
ZXR1cm4gdHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsIHNsb3QuaXNTdHJpY3RNb2RlKCks
IFJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9yKTsKLX0KLQotLyoqCi0gKiBUaGlzIG9uZSBpcyBm
b3IgInB1dCIuCi0gKiBJdCBsb29rcyB1cCBhIGhhc2ggZW50cnkgZm9yIHRoZSBwcm9wZXJ0eSB0
byBiZSBzZXQuICBJZiBhbiBlbnRyeQotICogaXMgZm91bmQgaXQgc2V0cyB0aGUgdmFsdWUgYW5k
IHJldHVybnMgdHJ1ZSwgZWxzZSBpdCByZXR1cm5zIGZhbHNlLgotICovCi1pbmxpbmUgYm9vbCBs
b29rdXBQdXQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIHByb3Bl
cnR5TmFtZSwgSlNPYmplY3QqIGJhc2UsIEpTVmFsdWUgdmFsdWUsIGNvbnN0IEhhc2hUYWJsZSYg
dGFibGUsIFB1dFByb3BlcnR5U2xvdCYgc2xvdCwgYm9vbCYgcHV0UmVzdWx0KQotewotICAgIGNv
bnN0IEhhc2hUYWJsZVZhbHVlKiBlbnRyeSA9IHRhYmxlLmVudHJ5KHByb3BlcnR5TmFtZSk7Ci0K
LSAgICBpZiAoIWVudHJ5KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBwdXRSZXN1bHQg
PSBwdXRFbnRyeShnbG9iYWxPYmplY3QsIHRhYmxlLmNsYXNzRm9yVGhpcywgZW50cnksIGJhc2Us
IGJhc2UsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpOwotICAgIHJldHVybiB0cnVlOwotfQot
CiBpbmxpbmUgdm9pZCByZWlmeVN0YXRpY1Byb3BlcnR5KFZNJiB2bSwgY29uc3QgQ2xhc3NJbmZv
KiBjbGFzc0luZm8sIGNvbnN0IFByb3BlcnR5TmFtZSYgcHJvcGVydHlOYW1lLCBjb25zdCBIYXNo
VGFibGVWYWx1ZSYgdmFsdWUsIEpTT2JqZWN0JiB0aGlzT2JqKQogewogICAgIGlmICh2YWx1ZS5h
dHRyaWJ1dGVzKCkgJiBQcm9wZXJ0eUF0dHJpYnV0ZTo6QnVpbHRpbikgewpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlTbG90LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlTbG90LmgJKHJldmlzaW9uIDI3NTc4
NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5U2xvdC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00Nyw2ICs0Nyw3IEBAIGVudW0gY2xhc3MgUHJvcGVydHlBdHRyaWJ1dGUg
OiB1bnNpZ25lZCAKICAgICBDdXN0b21WYWx1ZSAgICAgICA9IDEgPDwgNiwKICAgICBDdXN0b21B
Y2Nlc3Nvck9yVmFsdWUgPSBDdXN0b21BY2Nlc3NvciB8IEN1c3RvbVZhbHVlLAogICAgIEFjY2Vz
c29yT3JDdXN0b21BY2Nlc3Nvck9yVmFsdWUgPSBBY2Nlc3NvciB8IEN1c3RvbUFjY2Vzc29yIHwg
Q3VzdG9tVmFsdWUsCisgICAgUmVhZE9ubHlPckFjY2Vzc29yT3JDdXN0b21BY2Nlc3NvciA9IFJl
YWRPbmx5IHwgQWNjZXNzb3IgfCBDdXN0b21BY2Nlc3NvciwKIAogICAgIC8vIFRoaW5ncyB0aGF0
IGFyZSB1c2VkIGJ5IHN0YXRpYyBoYXNodGFibGVzIGFyZSBub3QgaW4gdGhlIGF0dHJpYnV0ZXMg
Ynl0ZSBpbiBQcm9wZXJ0eU1hcEVudHJ5LgogICAgIEZ1bmN0aW9uICAgICAgICAgID0gMSA8PCA4
LCAgLy8gcHJvcGVydHkgaXMgYSBmdW5jdGlvbiAtIG9ubHkgdXNlZCBieSBzdGF0aWMgaGFzaHRh
YmxlcwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJveHlPYmplY3QuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3h5T2JqZWN0
LmNwcAkocmV2aXNpb24gMjc1Nzg3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
UHJveHlPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NjQsNiArNDY0LDcgQEAgYm9vbCBQ
cm94eU9iamVjdDo6cHV0KEpTQ2VsbCogY2VsbCwgSlNHbAogewogICAgIFZNJiB2bSA9IGdsb2Jh
bE9iamVjdC0+dm0oKTsKICAgICBzbG90LmRpc2FibGVDYWNoaW5nKCk7CisgICAgc2xvdC5zZXRJ
c1RhaW50ZWRCeU9wYXF1ZU9iamVjdCgpOwogCiAgICAgUHJveHlPYmplY3QqIHRoaXNPYmplY3Qg
PSBqc0Nhc3Q8UHJveHlPYmplY3QqPihjZWxsKTsKICAgICBhdXRvIHBlcmZvcm1EZWZhdWx0UHV0
ID0gWyZdICgpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3h5T2Jq
ZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJveHlP
YmplY3QuaAkocmV2aXNpb24gMjc1Nzg3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvUHJveHlPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsNyBAQCBjbGFzcyBQ
cm94eU9iamVjdCBmaW5hbCA6IHB1YmxpYyBKU05vbkZpCiBwdWJsaWM6CiAgICAgdHlwZWRlZiBK
U05vbkZpbmFsT2JqZWN0IEJhc2U7CiAKLSAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0
cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBPdmVycmlkZXNHZXRPd25Qcm9w
ZXJ0eVNsb3QgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eU5hbWVzIHwgT3ZlcnJpZGVzR2V0UHJv
dG90eXBlIHwgT3ZlcnJpZGVzR2V0Q2FsbERhdGEgfCBJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlT
bG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgUHJvaGliaXRzUHJvcGVydHlDYWNo
aW5nOworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNl
OjpTdHJ1Y3R1cmVGbGFncyB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRl
c0dldE93blByb3BlcnR5TmFtZXMgfCBPdmVycmlkZXNHZXRQcm90b3R5cGUgfCBPdmVycmlkZXNH
ZXRDYWxsRGF0YSB8IE92ZXJyaWRlc1B1dCB8IEludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RC
eUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8gfCBQcm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmc7
CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4K
ICAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1B1dFByb3BlcnR5U2xvdC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1B1dFByb3BlcnR5U2xvdC5oCShyZXZpc2lv
biAyNzU3ODcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9QdXRQcm9wZXJ0eVNs
b3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsNyArMzcsNyBAQCBjbGFzcyBKU0Z1bmN0aW9uOwog
Y2xhc3MgUHV0UHJvcGVydHlTbG90IHsKIHB1YmxpYzoKICAgICBlbnVtIFR5cGUgOiB1aW50OF90
IHsgVW5jYWNoYWJsZSwgRXhpc3RpbmdQcm9wZXJ0eSwgTmV3UHJvcGVydHksIFNldHRlclByb3Bl
cnR5LCBDdXN0b21WYWx1ZSwgQ3VzdG9tQWNjZXNzb3IgfTsKLSAgICBlbnVtIENvbnRleHQgeyBV
bmtub3duQ29udGV4dCwgUHV0QnlJZCwgUHV0QnlJZEV2YWwgfTsKKyAgICBlbnVtIENvbnRleHQg
eyBVbmtub3duQ29udGV4dCwgUHV0QnlJZCwgUHV0QnlJZEV2YWwsIFJlZmxlY3RTZXQgfTsKICAg
ICB1c2luZyBQdXRWYWx1ZUZ1bmMgPSBKU0M6OlB1dFZhbHVlRnVuYzsKICAgICB1c2luZyBQdXRW
YWx1ZUZ1bmNXaXRoUHRyID0gSlNDOjpQdXRWYWx1ZUZ1bmNXaXRoUHRyOwogCkBAIC0xMTYsNiAr
MTE2LDggQEAgcHVibGljOgogICAgIGJvb2wgaXNDYWNoZWFibGVDdXN0b20oKSBjb25zdCB7IHJl
dHVybiBpc0NhY2hlYWJsZSgpICYmIChtX3R5cGUgPT0gQ3VzdG9tVmFsdWUgfHwgbV90eXBlID09
IEN1c3RvbUFjY2Vzc29yKSAmJiAhIW1fcHV0RnVuY3Rpb247IH0KICAgICBib29sIGlzQ3VzdG9t
QWNjZXNzb3IoKSBjb25zdCB7IHJldHVybiBpc0NhY2hlYWJsZSgpICYmIG1fdHlwZSA9PSBDdXN0
b21BY2Nlc3NvcjsgfQogICAgIGJvb2wgaXNJbml0aWFsaXphdGlvbigpIGNvbnN0IHsgcmV0dXJu
IG1faXNJbml0aWFsaXphdGlvbjsgfQorICAgIGJvb2wgaXNUYWludGVkQnlPcGFxdWVPYmplY3Qo
KSBjb25zdCB7IHJldHVybiBtX2lzVGFpbnRlZEJ5T3BhcXVlT2JqZWN0OyB9CisgICAgdm9pZCBz
ZXRJc1RhaW50ZWRCeU9wYXF1ZU9iamVjdCgpIHsgbV9pc1RhaW50ZWRCeU9wYXF1ZU9iamVjdCA9
IHRydWU7IH0KIAogICAgIFByb3BlcnR5T2Zmc2V0IGNhY2hlZE9mZnNldCgpIGNvbnN0CiAgICAg
ewpAQCAtMTM1LDYgKzEzNyw3IEBAIHByaXZhdGU6CiAgICAgUHJvcGVydHlPZmZzZXQgbV9vZmZz
ZXQ7CiAgICAgYm9vbCBtX2lzU3RyaWN0TW9kZSA6IDE7CiAgICAgYm9vbCBtX2lzSW5pdGlhbGl6
YXRpb24gOiAxOworICAgIGJvb2wgbV9pc1RhaW50ZWRCeU9wYXF1ZU9iamVjdCB7IGZhbHNlIH07
CiAgICAgVHlwZSBtX3R5cGU7CiAgICAgdWludDhfdCBtX2NvbnRleHQ7CiAgICAgQ2FjaGVhYmls
aXR5VHlwZSBtX2NhY2hlYWJpbGl0eTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1JlZmxlY3RPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1JlZmxlY3RPYmplY3QuY3BwCShyZXZpc2lvbiAyNzU3ODcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWZsZWN0T2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjYwLDcgKzI2MCw3IEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihyZWZsZWN0T2JqZWN0
U2UKIAogICAgIC8vIERvIG5vdCByYWlzZSBhbnkgcmVhZG9ubHkgZXJyb3JzIHRoYXQgaGFwcGVu
IGluIHN0cmljdCBtb2RlLgogICAgIGJvb2wgc2hvdWxkVGhyb3dJZkNhbnRTZXQgPSBmYWxzZTsK
LSAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChyZWNlaXZlciwgc2hvdWxkVGhyb3dJZkNhbnRTZXQp
OworICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KHJlY2VpdmVyLCBzaG91bGRUaHJvd0lmQ2FudFNl
dCwgUHV0UHJvcGVydHlTbG90OjpSZWZsZWN0U2V0KTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4o
c2NvcGUsIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4odGFyZ2V0T2JqZWN0LT5tZXRob2RUYWJs
ZSh2bSktPnB1dCh0YXJnZXRPYmplY3QsIGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCBjYWxs
RnJhbWUtPmFyZ3VtZW50KDIpLCBzbG90KSkpKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBPYmplY3QuY3BwCShyZXZpc2lvbiAyNzU3ODcpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBPYmplY3QuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMzQsMTkgKzEzNCwyNCBAQCBKU0NfREVGSU5FX0NVU1RPTV9TRVRURVIocmVn
RXhwT2JqZWN0U2V0CiBib29sIFJlZ0V4cE9iamVjdDo6cHV0KEpTQ2VsbCogY2VsbCwgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1
ZSB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBzbG90KQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9i
amVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAg
ICAgUmVnRXhwT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PFJlZ0V4cE9iamVjdCo+KGNlbGwp
OwogCi0gICAgaWYgKFVOTElLRUxZKGlzVGhpc1ZhbHVlQWx0ZXJlZChzbG90LCB0aGlzT2JqZWN0
KSkpCi0gICAgICAgIHJldHVybiBvcmRpbmFyeVNldFNsb3coZ2xvYmFsT2JqZWN0LCB0aGlzT2Jq
ZWN0LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90LnRoaXNWYWx1ZSgpLCBzbG90LmlzU3RyaWN0
TW9kZSgpKTsKLQogICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gdm0ucHJvcGVydHlOYW1lcy0+bGFz
dEluZGV4KSB7CisgICAgICAgIGlmICghdGhpc09iamVjdC0+bGFzdEluZGV4SXNXcml0YWJsZSgp
KQorICAgICAgICAgICAgcmV0dXJuIHR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCBzbG90
LmlzU3RyaWN0TW9kZSgpLCBSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcik7CisKKyAgICAgICAg
aWYgKFVOTElLRUxZKHNsb3QudGhpc1ZhbHVlKCkgIT0gdGhpc09iamVjdCkpCisgICAgICAgICAg
ICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTT2JqZWN0OjpkZWZpbmVQcm9wZXJ0eU9uUmVj
ZWl2ZXIoZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KSk7CisKICAgICAg
ICAgYm9vbCByZXN1bHQgPSB0aGlzT2JqZWN0LT5zZXRMYXN0SW5kZXgoZ2xvYmFsT2JqZWN0LCB2
YWx1ZSwgc2xvdC5pc1N0cmljdE1vZGUoKSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIGZhbHNlKTsKICAgICAgICAgc2xvdC5zZXRDdXN0b21WYWx1ZSh0aGlzT2JqZWN0LCBz
bG90LmlzU3RyaWN0TW9kZSgpCiAgICAgICAgICAgICA/IHJlZ0V4cE9iamVjdFNldExhc3RJbmRl
eFN0cmljdAogICAgICAgICAgICAgOiByZWdFeHBPYmplY3RTZXRMYXN0SW5kZXhOb25TdHJpY3Qp
OwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KLSAgICByZXR1cm4gQmFzZTo6cHV0KGNl
bGwsIGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCk7CisgICAgUkVMRUFT
RV9BTkRfUkVUVVJOKHNjb3BlLCBCYXNlOjpwdXQoY2VsbCwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0
eU5hbWUsIHZhbHVlLCBzbG90KSk7CiB9CiAKIFN0cmluZyBSZWdFeHBPYmplY3Q6OnRvU3RyaW5n
TmFtZShjb25zdCBKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KikKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5oCShyZXZpc2lvbiAyNzU3ODcpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBPYmplY3QuaAkod29ya2luZyBj
b3B5KQpAQCAtMzAsNyArMzAsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIGNsYXNzIFJlZ0V4cE9iamVj
dCBmaW5hbCA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKIHB1YmxpYzoKICAgICB1c2luZyBC
YXNlID0gSlNOb25GaW5hbE9iamVjdDsKLSAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0
cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBPdmVycmlkZXNHZXRPd25Qcm9w
ZXJ0eVNsb3QgfCBPdmVycmlkZXNHZXRPd25TcGVjaWFsUHJvcGVydHlOYW1lczsKKyAgICBzdGF0
aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxh
Z3MgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNHZXRPd25TcGVjaWFs
UHJvcGVydHlOYW1lcyB8IE92ZXJyaWRlc1B1dDsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENl
bGxUeXBlLCBTdWJzcGFjZUFjY2VzcyBtb2RlPgogICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vi
c3BhY2VGb3IoVk0mIHZtKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3Ry
aW5nT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TdHJpbmdPYmplY3QuY3BwCShyZXZpc2lvbiAyNzU3ODcpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TdHJpbmdPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OCwxMSAr
NjgsMTAgQEAgYm9vbCBTdHJpbmdPYmplY3Q6OnB1dChKU0NlbGwqIGNlbGwsIEpTRwogCiAgICAg
U3RyaW5nT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PFN0cmluZ09iamVjdCo+KGNlbGwpOwog
Ci0gICAgaWYgKFVOTElLRUxZKGlzVGhpc1ZhbHVlQWx0ZXJlZChzbG90LCB0aGlzT2JqZWN0KSkp
IAotICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIG9yZGluYXJ5U2V0U2xvdyhnbG9i
YWxPYmplY3QsIHRoaXNPYmplY3QsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QudGhpc1ZhbHVl
KCksIHNsb3QuaXNTdHJpY3RNb2RlKCkpKTsKLQogICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gdm0u
cHJvcGVydHlOYW1lcy0+bGVuZ3RoKQogICAgICAgICByZXR1cm4gdHlwZUVycm9yKGdsb2JhbE9i
amVjdCwgc2NvcGUsIHNsb3QuaXNTdHJpY3RNb2RlKCksIFJlYWRvbmx5UHJvcGVydHlXcml0ZUVy
cm9yKTsKKyAgICBpZiAoVU5MSUtFTFkoc2xvdC50aGlzVmFsdWUoKSAhPSB0aGlzT2JqZWN0KSkK
KyAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU09iamVjdDo6cHV0KGNlbGwsIGds
b2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCkpOwogICAgIGlmIChPcHRpb25h
bDx1aW50MzJfdD4gaW5kZXggPSBwYXJzZUluZGV4KHByb3BlcnR5TmFtZSkpIAogICAgICAgICBS
RUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIHB1dEJ5SW5kZXgoY2VsbCwgZ2xvYmFsT2JqZWN0LCBp
bmRleC52YWx1ZSgpLCB2YWx1ZSwgc2xvdC5pc1N0cmljdE1vZGUoKSkpOwogICAgIFJFTEVBU0Vf
QU5EX1JFVFVSTihzY29wZSwgSlNPYmplY3Q6OnB1dChjZWxsLCBnbG9iYWxPYmplY3QsIHByb3Bl
cnR5TmFtZSwgdmFsdWUsIHNsb3QpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1N0cmluZ09iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1N0cmluZ09iamVjdC5oCShyZXZpc2lvbiAyNzU3ODcpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TdHJpbmdPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNyAr
MjgsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIGNsYXNzIFN0cmluZ09iamVjdCA6IHB1YmxpYyBKU1dy
YXBwZXJPYmplY3QgewogcHVibGljOgogICAgIHVzaW5nIEJhc2UgPSBKU1dyYXBwZXJPYmplY3Q7
Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0
cnVjdHVyZUZsYWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzR2V0
T3duUHJvcGVydHlOYW1lcyB8IEludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZl
bldoZW5MZW5ndGhJc05vdFplcm87CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1
Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVy
dHlTbG90IHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlOYW1lcyB8IE92ZXJyaWRlc1B1dCB8IElu
dGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm87
CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4KICAgICBzdGF0
aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1N0cmluZ1Byb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nUHJvdG90eXBlLmNwcAkocmV2aXNpb24gMjc1
Nzg3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nUHJvdG90eXBlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTIxLDkgKzEyMSw5IEBAIFN0cmluZ1Byb3RvdHlwZTo6U3Ry
aW5nUHJvdG90eXBlKFZNJiB2bSwKIHsKIH0KIAotdm9pZCBTdHJpbmdQcm90b3R5cGU6OmZpbmlz
aENyZWF0aW9uKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNTdHJpbmcq
IG5hbWVBbmRNZXNzYWdlKQordm9pZCBTdHJpbmdQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKFZN
JiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKIHsKLSAgICBCYXNlOjpmaW5pc2hD
cmVhdGlvbih2bSwgbmFtZUFuZE1lc3NhZ2UpOworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZt
LCBqc0VtcHR5U3RyaW5nKHZtKSk7CiAgICAgQVNTRVJUKGluaGVyaXRzKHZtLCBpbmZvKCkpKTsK
IAogICAgIEpTQ19OQVRJVkVfSU5UUklOU0lDX0ZVTkNUSU9OX1dJVEhPVVRfVFJBTlNJVElPTih2
bS5wcm9wZXJ0eU5hbWVzLT50b1N0cmluZywgc3RyaW5nUHJvdG9GdW5jVG9TdHJpbmcsIHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pLCAwLCBTdHJpbmdQ
cm90b3R5cGVWYWx1ZU9mSW50cmluc2ljKTsKQEAgLTE2NSwxNCArMTY1LDEyIEBAIHZvaWQgU3Ry
aW5nUHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbihWTSYKICAgICBwdXREaXJlY3RXaXRob3V0VHJh
bnNpdGlvbih2bSwgdm0ucHJvcGVydHlOYW1lcy0+aXRlcmF0b3JTeW1ib2wsIGl0ZXJhdG9yRnVu
Y3Rpb24sIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0p
KTsKIAogICAgIC8vIFRoZSBjb25zdHJ1Y3RvciB3aWxsIGJlIGFkZGVkIGxhdGVyLCBhZnRlciBT
dHJpbmdDb25zdHJ1Y3RvciBoYXMgYmVlbiBidWlsdAotICAgIHB1dERpcmVjdFdpdGhvdXRUcmFu
c2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgsIGpzTnVtYmVyKDApLCBQcm9wZXJ0
eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSB8IFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IFBy
b3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7CiB9CiAKIFN0cmluZ1Byb3RvdHlwZSogU3RyaW5n
UHJvdG90eXBlOjpjcmVhdGUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSkKIHsKLSAgICBKU1N0cmluZyogZW1wdHkgPSBqc0VtcHR5U3Ry
aW5nKHZtKTsKICAgICBTdHJpbmdQcm90b3R5cGUqIHByb3RvdHlwZSA9IG5ldyAoTm90TnVsbCwg
YWxsb2NhdGVDZWxsPFN0cmluZ1Byb3RvdHlwZT4odm0uaGVhcCkpIFN0cmluZ1Byb3RvdHlwZSh2
bSwgc3RydWN0dXJlKTsKLSAgICBwcm90b3R5cGUtPmZpbmlzaENyZWF0aW9uKHZtLCBnbG9iYWxP
YmplY3QsIGVtcHR5KTsKKyAgICBwcm90b3R5cGUtPmZpbmlzaENyZWF0aW9uKHZtLCBnbG9iYWxP
YmplY3QpOwogICAgIHJldHVybiBwcm90b3R5cGU7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1N0cmluZ1Byb3RvdHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ1Byb3RvdHlwZS5oCShyZXZpc2lvbiAyNzU3ODcp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdQcm90b3R5cGUuaAkod29y
a2luZyBjb3B5KQpAQCAtNDUsNyArNDUsNyBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAgICAgU3Ry
aW5nUHJvdG90eXBlKFZNJiwgU3RydWN0dXJlKik7Ci0gICAgdm9pZCBmaW5pc2hDcmVhdGlvbihW
TSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNTdHJpbmcqKTsKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9u
KFZNJiwgSlNHbG9iYWxPYmplY3QqKTsKIH07CiBTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9T
SEFSQUJMRShTdHJpbmdQcm90b3R5cGUsIFN0cmluZ09iamVjdCk7CiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAkocmV2aXNpb24gMjc1Nzg3KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTkwLDExICsxOTAsNiBAQCB2b2lkIFN0cnVjdHVyZTo6dmFsaWRhdGVGbGFncygp
CiAgICAgaWYgKG92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXgpCiAgICAgICAgIFJF
TEVBU0VfQVNTRVJUKHR5cGVJbmZvKCkuaW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5k
ZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybygpKTsKIAotICAgIGJvb2wgb3ZlcnJpZGVzUHV0UHJv
cGVydHlTZWN1cml0eUNoZWNrID0KLSAgICAgICAgbWV0aG9kVGFibGUuZG9QdXRQcm9wZXJ0eVNl
Y3VyaXR5Q2hlY2sgIT0gSlNPYmplY3Q6OmRvUHV0UHJvcGVydHlTZWN1cml0eUNoZWNrCi0gICAg
ICAgICYmIG1ldGhvZFRhYmxlLmRvUHV0UHJvcGVydHlTZWN1cml0eUNoZWNrICE9IEpTQ2VsbDo6
ZG9QdXRQcm9wZXJ0eVNlY3VyaXR5Q2hlY2s7Ci0gICAgUkVMRUFTRV9BU1NFUlQob3ZlcnJpZGVz
UHV0UHJvcGVydHlTZWN1cml0eUNoZWNrID09IHR5cGVJbmZvKCkuaGFzUHV0UHJvcGVydHlTZWN1
cml0eUNoZWNrKCkpOwotCiAgICAgYm9vbCBvdmVycmlkZXNHZXRPd25Qcm9wZXJ0eU5hbWVzID0K
ICAgICAgICAgbWV0aG9kVGFibGUuZ2V0T3duUHJvcGVydHlOYW1lcyAhPSBKU09iamVjdDo6Z2V0
T3duUHJvcGVydHlOYW1lcwogICAgICAgICAmJiBtZXRob2RUYWJsZS5nZXRPd25Qcm9wZXJ0eU5h
bWVzICE9IEpTQ2VsbDo6Z2V0T3duUHJvcGVydHlOYW1lczsKQEAgLTIwOSw2ICsyMDQsMTggQEAg
dm9pZCBTdHJ1Y3R1cmU6OnZhbGlkYXRlRmxhZ3MoKQogICAgICAgICBtZXRob2RUYWJsZS5nZXRQ
cm90b3R5cGUgIT0gc3RhdGljX2Nhc3Q8TWV0aG9kVGFibGU6OkdldFByb3RvdHlwZUZ1bmN0aW9u
UHRyPihKU09iamVjdDo6Z2V0UHJvdG90eXBlKQogICAgICAgICAmJiBtZXRob2RUYWJsZS5nZXRQ
cm90b3R5cGUgIT0gSlNDZWxsOjpnZXRQcm90b3R5cGU7CiAgICAgUkVMRUFTRV9BU1NFUlQob3Zl
cnJpZGVzR2V0UHJvdG90eXBlID09IHR5cGVJbmZvKCkub3ZlcnJpZGVzR2V0UHJvdG90eXBlKCkp
OworCisgICAgYm9vbCBvdmVycmlkZXNQdXQgPQorICAgICAgICBtZXRob2RUYWJsZS5wdXQgIT0g
SlNPYmplY3Q6OnB1dAorICAgICAgICAmJiBtZXRob2RUYWJsZS5wdXQgIT0gSlNDZWxsOjpwdXQ7
CisgICAgUkVMRUFTRV9BU1NFUlQob3ZlcnJpZGVzUHV0ID09IHR5cGVJbmZvKCkub3ZlcnJpZGVz
UHV0KCkpOworCisgICAgYm9vbCBvdmVycmlkZXNEZWZpbmVPd25Qcm9wZXJ0eSA9CisgICAgICAg
IG1ldGhvZFRhYmxlLmRlZmluZU93blByb3BlcnR5ICE9IEpTT2JqZWN0OjpkZWZpbmVPd25Qcm9w
ZXJ0eQorICAgICAgICAmJiBtZXRob2RUYWJsZS5kZWZpbmVPd25Qcm9wZXJ0eSAhPSBKU0NlbGw6
OmRlZmluZU93blByb3BlcnR5OworCisgICAgaWYgKG92ZXJyaWRlc0RlZmluZU93blByb3BlcnR5
KQorICAgICAgICBSRUxFQVNFX0FTU0VSVChvdmVycmlkZXNQdXQpOwogfQogI2Vsc2UKIGlubGlu
ZSB2b2lkIFN0cnVjdHVyZTo6dmFsaWRhdGVGbGFncygpIHsgfQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3Rvb2xzL0pTRG9sbGFyVk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS90b29scy9KU0RvbGxhclZNLmNwcAkocmV2aXNpb24gMjc1Nzg3KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0pTRG9sbGFyVk0uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC02ODcsOSArNjg3LDExIEBAIEpTQ19ERUZJTkVfQ1VTVE9NX0dFVFRFUihydW50aW1lQXJyYXlM
ZW4KICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKHRoaXNPYmplY3QtPmdldExl
bmd0aCgpKSk7CiB9CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgQ29tcGFjdEhhc2hJbmRleCBzdGF0
aWNDdXN0b21BY2Nlc3NvclRhYmxlSW5kZXhbMl0gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IENv
bXBhY3RIYXNoSW5kZXggc3RhdGljQ3VzdG9tQWNjZXNzb3JUYWJsZUluZGV4WzRdID0gewogICAg
IHsgMCwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAorICAgIHsgMSwgLTEgfSwKKyAgICB7IC0xLCAt
MSB9LAogfTsKIAogc3RhdGljIEpTQ19ERUNMQVJFX0NVU1RPTV9HRVRURVIodGVzdFN0YXRpY0Fj
Y2Vzc29yR2V0dGVyKTsKQEAgLTcxMiwxOSArNzE0LDIzIEBAIEpTQ19ERUZJTkVfQ1VTVE9NX1NF
VFRFUih0ZXN0U3RhdGljQWNjZXMKIHsKICAgICBEb2xsYXJWTUFzc2VydFNjb3BlIGFzc2VydFNj
b3BlOwogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHRocm93U2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICAKLSAgICBKU09iamVjdCogdGhpc09i
amVjdCA9IGpzRHluYW1pY0Nhc3Q8SlNPYmplY3QqPih2bSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNW
YWx1ZSkpOworICAgIEpTVmFsdWUgcmVjZWl2ZXIgPSBKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVl
KTsKKyAgICBKU09iamVjdCogdGhpc09iamVjdCA9IHJlY2VpdmVyLmlzT2JqZWN0KCkgPyBhc09i
amVjdChyZWNlaXZlcikgOiByZWNlaXZlci5zeW50aGVzaXplUHJvdG90eXBlKGdsb2JhbE9iamVj
dCk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CiAgICAgUkVM
RUFTRV9BU1NFUlQodGhpc09iamVjdCk7CiAKICAgICByZXR1cm4gdGhpc09iamVjdC0+cHV0RGly
ZWN0KHZtLCBQcm9wZXJ0eU5hbWUoSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInRlc3RGaWVs
ZCIpKSwgSlNWYWx1ZTo6ZGVjb2RlKHZhbHVlKSk7CiB9CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3Qg
SGFzaFRhYmxlVmFsdWUgc3RhdGljQ3VzdG9tQWNjZXNzb3JUYWJsZVZhbHVlc1sxXSA9IHsKK3N0
YXRpYyBjb25zdCBzdHJ1Y3QgSGFzaFRhYmxlVmFsdWUgc3RhdGljQ3VzdG9tQWNjZXNzb3JUYWJs
ZVZhbHVlc1syXSA9IHsKICAgICB7ICJ0ZXN0U3RhdGljQWNjZXNzb3IiLCBzdGF0aWNfY2FzdDx1
bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkN1c3RvbUFjY2Vzc29yKSwgTm9JbnRyaW5zaWMs
IHsgKGludHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPih0ZXN0
U3RhdGljQWNjZXNzb3JHZXR0ZXIpLCAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHV0UHJvcGVydHlT
bG90OjpQdXRWYWx1ZUZ1bmM+KHRlc3RTdGF0aWNBY2Nlc3NvclB1dHRlcikgfSB9LAorICAgIHsg
InRlc3RTdGF0aWNBY2Nlc3NvclJlYWRPbmx5IiwgUHJvcGVydHlBdHRyaWJ1dGU6OkN1c3RvbUFj
Y2Vzc29yIHwgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5LCBOb0ludHJpbnNpYywgeyAoaW50
cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KHRlc3RTdGF0aWNB
Y2Nlc3NvckdldHRlciksIChpbnRwdHJfdClzdGF0aWNfY2FzdDxQdXRQcm9wZXJ0eVNsb3Q6OlB1
dFZhbHVlRnVuYz4oMCkgfSB9LAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBIYXNoVGFibGUg
c3RhdGljQ3VzdG9tQWNjZXNzb3JUYWJsZSA9Ci0gICAgeyAxLCAxLCB0cnVlLCBudWxscHRyLCBz
dGF0aWNDdXN0b21BY2Nlc3NvclRhYmxlVmFsdWVzLCBzdGF0aWNDdXN0b21BY2Nlc3NvclRhYmxl
SW5kZXggfTsKKyAgICB7IDIsIDMsIHRydWUsIG51bGxwdHIsIHN0YXRpY0N1c3RvbUFjY2Vzc29y
VGFibGVWYWx1ZXMsIHN0YXRpY0N1c3RvbUFjY2Vzc29yVGFibGVJbmRleCB9OwogCiBjbGFzcyBT
dGF0aWNDdXN0b21BY2Nlc3NvciA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKICAgICB1c2lu
ZyBCYXNlID0gSlNOb25GaW5hbE9iamVjdDsKQEAgLTc4OSwxNyArNzk1LDI1IEBAIEpTQ19ERUZJ
TkVfQ1VTVE9NX1NFVFRFUih0ZXN0U3RhdGljVmFsdWUKICAgICByZXR1cm4gdGhpc09iamVjdC0+
cHV0RGlyZWN0KHZtLCBQcm9wZXJ0eU5hbWUoSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInRl
c3RTdGF0aWNWYWx1ZSIpKSwgSlNWYWx1ZTo6ZGVjb2RlKHZhbHVlKSk7CiB9CiAKLXN0YXRpYyBj
b25zdCBzdHJ1Y3QgQ29tcGFjdEhhc2hJbmRleCBzdGF0aWNDdXN0b21WYWx1ZVRhYmxlSW5kZXhb
Ml0gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IENvbXBhY3RIYXNoSW5kZXggc3RhdGljQ3VzdG9t
VmFsdWVUYWJsZUluZGV4WzhdID0geworICAgIHsgMSwgLTEgfSwKKyAgICB7IC0xLCAtMSB9LAor
ICAgIHsgLTEsIC0xIH0sCisgICAgeyAtMSwgLTEgfSwKKyAgICB7IC0xLCAtMSB9LAorICAgIHsg
MiwgLTEgfSwKICAgICB7IDAsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKIH07CiAKLXN0YXRpYyBj
b25zdCBzdHJ1Y3QgSGFzaFRhYmxlVmFsdWUgc3RhdGljQ3VzdG9tVmFsdWVUYWJsZVZhbHVlc1sx
XSA9IHsKLSAgICB7ICJ0ZXN0U3RhdGljVmFsdWUiLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJv
cGVydHlBdHRyaWJ1dGU6OkN1c3RvbUFjY2Vzc29yKSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90
KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPih0ZXN0U3RhdGljVmFsdWVH
ZXR0ZXIpLCAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1
bmM+KHRlc3RTdGF0aWNWYWx1ZVB1dHRlcikgfSB9LAorc3RhdGljIGNvbnN0IHN0cnVjdCBIYXNo
VGFibGVWYWx1ZSBzdGF0aWNDdXN0b21WYWx1ZVRhYmxlVmFsdWVzWzNdID0geworICAgIHsgInRl
c3RTdGF0aWNWYWx1ZSIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6
Tm9uZSksIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6
OkdldFZhbHVlRnVuYz4odGVzdFN0YXRpY1ZhbHVlR2V0dGVyKSwgKGludHB0cl90KXN0YXRpY19j
YXN0PFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jPih0ZXN0U3RhdGljVmFsdWVQdXR0ZXIp
IH0gfSwKKyAgICB7ICJ0ZXN0U3RhdGljVmFsdWVOb1NldHRlciIsIHN0YXRpY19jYXN0PHVuc2ln
bmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6Tm9uZSksIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClz
dGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4odGVzdFN0YXRpY1ZhbHVlR2V0
dGVyKSwgKGludHB0cl90KXN0YXRpY19jYXN0PFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5j
PigwKSB9IH0sCisgICAgeyAidGVzdFN0YXRpY1ZhbHVlUmVhZE9ubHkiLCBzdGF0aWNfY2FzdDx1
bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5KSwgTm9JbnRyaW5zaWMsIHsgKGlu
dHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPih0ZXN0U3RhdGlj
VmFsdWVHZXR0ZXIpLCAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHV0UHJvcGVydHlTbG90OjpQdXRW
YWx1ZUZ1bmM+KDApIH0gfSwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgSGFzaFRhYmxlIHN0
YXRpY0N1c3RvbVZhbHVlVGFibGUgPQotICAgIHsgMSwgMSwgdHJ1ZSwgbnVsbHB0ciwgc3RhdGlj
Q3VzdG9tVmFsdWVUYWJsZVZhbHVlcywgc3RhdGljQ3VzdG9tVmFsdWVUYWJsZUluZGV4IH07Cisg
ICAgeyAzLCA3LCB0cnVlLCBudWxscHRyLCBzdGF0aWNDdXN0b21WYWx1ZVRhYmxlVmFsdWVzLCBz
dGF0aWNDdXN0b21WYWx1ZVRhYmxlSW5kZXggfTsKIAogY2xhc3MgU3RhdGljQ3VzdG9tVmFsdWUg
OiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7CiAgICAgdXNpbmcgQmFzZSA9IEpTTm9uRmluYWxP
YmplY3Q7CkBAIC04MzcsNiArODUxLDcgQEAgcHVibGljOgogCiBjbGFzcyBPYmplY3REb2luZ1Np
ZGVFZmZlY3RQdXRXaXRob3V0Q29ycmVjdFNsb3RTdGF0dXMgOiBwdWJsaWMgSlNOb25GaW5hbE9i
amVjdCB7CiAgICAgdXNpbmcgQmFzZSA9IEpTTm9uRmluYWxPYmplY3Q7CisgICAgc3RhdGljIGNv
bnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwg
T3ZlcnJpZGVzUHV0OwogcHVibGljOgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBT
dWJzcGFjZUFjY2Vzcz4KICAgICBzdGF0aWMgQ29tcGxldGVTdWJzcGFjZSogc3Vic3BhY2VGb3Io
Vk0mIHZtKQpJbmRleDogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjc1Nzg3KQorKysgU291cmNlL1dlYkNv
cmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjcgQEAKKzIwMjEtMDQtMDkg
IEFsZXhleSBTaHZheWthICA8c2h2YWlrYWxlc2hAZ21haWwuY29tPgorCisgICAgICAgIEludHJv
ZHVjZSBPdmVycmlkZXNQdXRbQnlJbmRleF0gdHlwZSBpbmZvIGZsYWdzCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTc5MTYKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NV2lu
ZG93Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NV2luZG93OjpwdXQpOgorICAg
ICAgICAoV2ViQ29yZTo6SlNET01XaW5kb3c6OmRvUHV0UHJvcGVydHlTZWN1cml0eUNoZWNrKTog
RGVsZXRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0xvY2F0aW9uQ3VzdG9tLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkpTTG9jYXRpb246OmRvUHV0UHJvcGVydHlTZWN1cml0eUNoZWNrKTog
RGVsZXRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1JlbW90ZURPTVdpbmRvd0N1c3RvbS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpKU1JlbW90ZURPTVdpbmRvdzo6cHV0KToKKyAgICAgICAg
KiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbToKKyAgICAgICAgKEdlbmVyYXRl
UHV0KToKKyAgICAgICAgKEdlbmVyYXRlSGVhZGVyKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0RG9tYWluU2VjdXJpdHkuaDoKKyAgICAgICAgKiBicmlkZ2Uvb2Jq
Yy9vYmpjX3J1bnRpbWUuaDoKKyAgICAgICAgKiBicmlkZ2UvcnVudGltZV9hcnJheS5oOgorICAg
ICAgICAqIGJyaWRnZS9ydW50aW1lX29iamVjdC5jcHA6CisgICAgICAgIChKU0M6OkJpbmRpbmdz
OjpSdW50aW1lT2JqZWN0OjpwdXQpOgorICAgICAgICAqIGJyaWRnZS9ydW50aW1lX29iamVjdC5o
OgorCiAyMDIxLTA0LTA5ICBKZWFuLVl2ZXMgQXZlbmFyZCAgPGp5YUBhcHBsZS5jb20+CiAKICAg
ICAgICAgTWVkaWEgU2Vzc2lvbiBhY3Rpb24gc2hvdWxkIGRlZmF1bHQgdG8gdGhlIE1lZGlhRWxl
bWVudCdzIGRlZmF1bHQgd2hlbiBubyBNZWRpYVNlc3Npb24gaGFuZGxlciBhcmUgc2V0CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0N1c3RvbS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20uY3Bw
CShyZXZpc2lvbiAyNzU3ODcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdp
bmRvd0N1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0OCwyMyArMjQ4LDYgQEAgYm9vbCBK
U0RPTVdpbmRvdzo6Z2V0T3duUHJvcGVydHlTbG90QnlJbgogICAgIHJldHVybiBCYXNlOjpnZXRP
d25Qcm9wZXJ0eVNsb3RCeUluZGV4KHRoaXNPYmplY3QsIGxleGljYWxHbG9iYWxPYmplY3QsIGlu
ZGV4LCBzbG90KTsKIH0KIAotdm9pZCBKU0RPTVdpbmRvdzo6ZG9QdXRQcm9wZXJ0eVNlY3VyaXR5
Q2hlY2soSlNPYmplY3QqIGNlbGwsIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0
LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQdXRQcm9wZXJ0eVNsb3QmKQotewotICAgIFZN
JiB2bSA9IGxleGljYWxHbG9iYWxPYmplY3QtPnZtKCk7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0RP
TVdpbmRvdyo+KGNlbGwpOwotCi0gICAgU3RyaW5nIGVycm9yTWVzc2FnZTsKLSAgICBpZiAoIUJp
bmRpbmdTZWN1cml0eTo6c2hvdWxkQWxsb3dBY2Nlc3NUb0RPTVdpbmRvdygqbGV4aWNhbEdsb2Jh
bE9iamVjdCwgdGhpc09iamVjdC0+d3JhcHBlZCgpLCBlcnJvck1lc3NhZ2UpKSB7Ci0gICAgICAg
IC8vIFdlIG9ubHkgYWxsb3cgc2V0dGluZyAibG9jYXRpb24iIGF0dHJpYnV0ZSBjcm9zcy1vcmln
aW4uCi0gICAgICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERh
dGEqPih2bS5jbGllbnREYXRhKS0+YnVpbHRpbk5hbWVzKCkubG9jYXRpb25QdWJsaWNOYW1lKCkp
Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHRocm93U2VjdXJpdHlFcnJvcigqbGV4aWNh
bEdsb2JhbE9iamVjdCwgc2NvcGUsIGVycm9yTWVzc2FnZSk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci19Ci0KIGJvb2wgSlNET01XaW5kb3c6OnB1dChKU0NlbGwqIGNlbGwsIEpTR2xvYmFsT2Jq
ZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1Zh
bHVlIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgVk0mIHZtID0gbGV4aWNh
bEdsb2JhbE9iamVjdC0+dm0oKTsKQEAgLTI3MiwxNyArMjU1LDEwIEBAIGJvb2wgSlNET01XaW5k
b3c6OnB1dChKU0NlbGwqIGNlbGwsIEpTR2wKIAogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nh
c3Q8SlNET01XaW5kb3cqPihjZWxsKTsKIAotICAgIFN0cmluZyBlcnJvck1lc3NhZ2U7Ci0gICAg
aWYgKCFCaW5kaW5nU2VjdXJpdHk6OnNob3VsZEFsbG93QWNjZXNzVG9ET01XaW5kb3coKmxleGlj
YWxHbG9iYWxPYmplY3QsIHRoaXNPYmplY3QtPndyYXBwZWQoKSwgZXJyb3JNZXNzYWdlKSkgewor
ICAgIGlmIChwcm9wZXJ0eU5hbWUgIT0gc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5j
bGllbnREYXRhKS0+YnVpbHRpbk5hbWVzKCkubG9jYXRpb25QdWJsaWNOYW1lKCkpIHsKICAgICAg
ICAgLy8gV2Ugb25seSBhbGxvdyBzZXR0aW5nICJsb2NhdGlvbiIgYXR0cmlidXRlIGNyb3NzLW9y
aWdpbi4KLSAgICAgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50
RGF0YSo+KHZtLmNsaWVudERhdGEpLT5idWlsdGluTmFtZXMoKS5sb2NhdGlvblB1YmxpY05hbWUo
KSkgewotICAgICAgICAgICAgYm9vbCBwdXRSZXN1bHQgPSBmYWxzZTsKLSAgICAgICAgICAgIGlm
IChsb29rdXBQdXQobGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCB0aGlzT2JqZWN0
LCB2YWx1ZSwgKnNfaW5mby5zdGF0aWNQcm9wSGFzaFRhYmxlLCBzbG90LCBwdXRSZXN1bHQpKQot
ICAgICAgICAgICAgICAgIHJldHVybiBwdXRSZXN1bHQ7CisgICAgICAgIGlmICghQmluZGluZ1Nl
Y3VyaXR5OjpzaG91bGRBbGxvd0FjY2Vzc1RvRE9NV2luZG93KGxleGljYWxHbG9iYWxPYmplY3Qs
IHRoaXNPYmplY3QtPndyYXBwZWQoKSwgVGhyb3dTZWN1cml0eUVycm9yKSkKICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICB0aHJvd1NlY3VyaXR5RXJyb3IoKmxl
eGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLCBlcnJvck1lc3NhZ2UpOwotICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgfQogCiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBCYXNlOjpwdXQo
dGhpc09iamVjdCwgbGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xv
dCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNMb2NhdGlvbkN1c3RvbS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNMb2NhdGlvbkN1
c3RvbS5jcHAJKHJldmlzaW9uIDI3NTc4NykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTTG9jYXRpb25DdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDgsMjMgKzEwOCw2IEBA
IGJvb2wgSlNMb2NhdGlvbjo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmQKICAgICBSRUxFQVNFX0FO
RF9SRVRVUk4oc2NvcGUsIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KG9iamVj
dCwgbGV4aWNhbEdsb2JhbE9iamVjdCwgaW5kZXgsIHNsb3QpKTsKIH0KIAotdm9pZCBKU0xvY2F0
aW9uOjpkb1B1dFByb3BlcnR5U2VjdXJpdHlDaGVjayhKU09iamVjdCogb2JqZWN0LCBKU0dsb2Jh
bE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwg
UHV0UHJvcGVydHlTbG90JikKLXsKLSAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTTG9j
YXRpb24qPihvYmplY3QpOwotICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVj
dCwgaW5mbygpKTsKLQotICAgIFZNJiB2bSA9IGxleGljYWxHbG9iYWxPYmplY3QtPnZtKCk7Ci0K
LSAgICAvLyBBbHdheXMgYWxsb3cgYXNzaWduaW5nIHRvIHRoZSB3aG9sZSBsb2NhdGlvbi4KLSAg
ICAvLyBIb3dldmVyLCBhbGxsb3dpbmcgYXNzaWduaW5nIG9mIHBpZWNlcyBtaWdodCBpbmFkdmVy
dGVudGx5IGRpc2Nsb3NlIHBhcnRzIG9mIHRoZSBvcmlnaW5hbCBsb2NhdGlvbi4KLSAgICAvLyBT
byBmYWxsIHRocm91Z2ggdG8gdGhlIGFjY2VzcyBjaGVjayBmb3IgdGhvc2UuCi0gICAgaWYgKHBy
b3BlcnR5TmFtZSA9PSBzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEp
LT5idWlsdGluTmFtZXMoKS5ocmVmUHVibGljTmFtZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICAvLyBCbG9jayBhY2Nlc3MgYW5kIHRocm93IGlmIHRoZXJlIGlzIGEgc2VjdXJpdHkgZXJyb3Iu
Ci0gICAgQmluZGluZ1NlY3VyaXR5OjpzaG91bGRBbGxvd0FjY2Vzc1RvRE9NV2luZG93KGxleGlj
YWxHbG9iYWxPYmplY3QsIHRoaXNPYmplY3QtPndyYXBwZWQoKS53aW5kb3coKSwgVGhyb3dTZWN1
cml0eUVycm9yKTsKLX0KLQogYm9vbCBKU0xvY2F0aW9uOjpwdXQoSlNDZWxsKiBjZWxsLCBKU0ds
b2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFt
ZSwgSlNWYWx1ZSB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBwdXRQcm9wZXJ0eVNsb3QpCiB7CiAg
ICAgVk0mIHZtID0gbGV4aWNhbEdsb2JhbE9iamVjdC0+dm0oKTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTUmVtb3RlRE9NV2luZG93Q3VzdG9tLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1JlbW90ZURPTVdpbmRvd0N1c3RvbS5jcHAJ
KHJldmlzaW9uIDI3NTc4NykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUmVtb3Rl
RE9NV2luZG93Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjgsMTEgKzY4LDEyIEBAIGJv
b2wgSlNSZW1vdGVET01XaW5kb3c6OnB1dChKU0NlbGwqIGNlbGwKIAogICAgIC8vIFdlIG9ubHkg
YWxsb3cgc2V0dGluZyAibG9jYXRpb24iIGF0dHJpYnV0ZSBjcm9zcy1vcmlnaW4uCiAgICAgaWYg
KHByb3BlcnR5TmFtZSA9PSBzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERh
dGEpLT5idWlsdGluTmFtZXMoKS5sb2NhdGlvblB1YmxpY05hbWUoKSkgewotICAgICAgICBib29s
IHB1dFJlc3VsdCA9IGZhbHNlOwotICAgICAgICBpZiAobG9va3VwUHV0KGxleGljYWxHbG9iYWxP
YmplY3QsIHByb3BlcnR5TmFtZSwgdGhpc09iamVjdCwgdmFsdWUsICpzX2luZm8uc3RhdGljUHJv
cEhhc2hUYWJsZSwgc2xvdCwgcHV0UmVzdWx0KSkKLSAgICAgICAgICAgIHJldHVybiBwdXRSZXN1
bHQ7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgYXV0byogc2V0dGVyID0gc19pbmZv
LnN0YXRpY1Byb3BIYXNoVGFibGUtPmVudHJ5KHByb3BlcnR5TmFtZSktPnByb3BlcnR5UHV0dGVy
KCk7CisgICAgICAgIHNldHRlcihsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1ZhbHVlOjplbmNvZGUo
c2xvdC50aGlzVmFsdWUoKSksIEpTVmFsdWU6OmVuY29kZSh2YWx1ZSkpOworICAgICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBmYWxzZSk7CisgICAgICAgIHJldHVybiB0cnVlOwogICAg
IH0KKwogICAgIHRocm93U2VjdXJpdHlFcnJvcigqbGV4aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUs
IGVycm9yTWVzc2FnZSk7CiAgICAgcmV0dXJuIGZhbHNlOwogfQpJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0JKHJldmlzaW9u
IDI3NTc4NykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRv
ckpTLnBtCSh3b3JraW5nIGNvcHkpCkBAIC0xMTgwLDYgKzExODAsOCBAQCBzdWIgR2VuZXJhdGVQ
dXQKICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICJ7XG4iKTsKICAgICBwdXNoKEAkb3V0cHV0QXJy
YXksICIgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDwke2NsYXNzTmFtZX0qPihjZWxsKTtc
biIpOwogICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVS
SVRTKHRoaXNPYmplY3QsIGluZm8oKSk7XG5cbiIpOworICAgIHB1c2goQCRvdXRwdXRBcnJheSwg
IiAgICBpZiAoVU5MSUtFTFkodGhpc09iamVjdCAhPSBwdXRQcm9wZXJ0eVNsb3QudGhpc1ZhbHVl
KCkpKVxuIik7CisgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgICAgICByZXR1cm4gSlNPYmpl
Y3Q6OnB1dCh0aGlzT2JqZWN0LCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHZh
bHVlLCBwdXRQcm9wZXJ0eVNsb3QpO1xuIik7CiAKICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIg
ICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShsZXhpY2FsR2xvYmFsT2Jq
ZWN0LT52bSgpKTtcblxuIik7CiAKQEAgLTI5NTQsMTEgKzI5NTYsNiBAQCBzdWIgR2VuZXJhdGVI
ZWFkZXIKICAgICAgICAgJHN0cnVjdHVyZUZsYWdzeyJKU0M6OkludGVyY2VwdHNHZXRPd25Qcm9w
ZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8ifSA9IDE7CiAgICAgfQogCi0g
ICAgaWYgKCRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+e0NoZWNrU2VjdXJpdHl9KSB7
Ci0gICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgc3RhdGljIHZvaWQgZG9QdXRQcm9w
ZXJ0eVNlY3VyaXR5Q2hlY2soSlNDOjpKU09iamVjdCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBK
U0M6OlByb3BlcnR5TmFtZSwgSlNDOjpQdXRQcm9wZXJ0eVNsb3QmKTtcbiIpOwotICAgICAgICAk
c3RydWN0dXJlRmxhZ3N7IkpTQzo6SGFzUHV0UHJvcGVydHlTZWN1cml0eUNoZWNrIn0gPSAxOwot
ICAgIH0KLQogICAgIGlmICgkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntQbHVnaW59
IHx8IEdldE5hbWVkU2V0dGVyT3BlcmF0aW9uKCRpbnRlcmZhY2UpKSB7CiAgICAgICAgICRzdHJ1
Y3R1cmVGbGFnc3siSlNDOjpQcm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmcifSA9IDE7CiAgICAgfQpA
QCAtMjk3MSw2ICsyOTY4LDcgQEAgc3ViIEdlbmVyYXRlSGVhZGVyCiAgICAgaWYgKEluc3RhbmNl
T3ZlcnJpZGVzUHV0KCRpbnRlcmZhY2UpKSB7CiAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQs
ICIgICAgc3RhdGljIGJvb2wgcHV0KEpTQzo6SlNDZWxsKiwgSlNDOjpKU0dsb2JhbE9iamVjdCos
IEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OkpTVmFsdWUsIEpTQzo6UHV0UHJvcGVydHlTbG90Jik7
XG4iKTsKICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBzdGF0aWMgYm9vbCBwdXRC
eUluZGV4KEpTQzo6SlNDZWxsKiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIHVuc2lnbmVkIHByb3Bl
cnR5TmFtZSwgSlNDOjpKU1ZhbHVlLCBib29sIHNob3VsZFRocm93KTtcbiIpOworICAgICAgICAk
c3RydWN0dXJlRmxhZ3N7IkpTQzo6T3ZlcnJpZGVzUHV0In0gPSAxOwogICAgIH0KICAgICAKICAg
ICBpZiAoSW5zdGFuY2VPdmVycmlkZXNEZWZpbmVPd25Qcm9wZXJ0eSgkaW50ZXJmYWNlKSkgewpJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdERvbWFp
blNlY3VyaXR5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdERvbWFpblNlY3VyaXR5LmgJKHJldmlzaW9uIDI3NTc4NykKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3REb21haW5TZWN1cml0
eS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw3ICszOSw2IEBAIHB1YmxpYzoKICAgICBzdGF0aWMg
SlNDOjpKU09iamVjdCogY3JlYXRlUHJvdG90eXBlKEpTQzo6Vk0mLCBKU0RPTUdsb2JhbE9iamVj
dCYpOwogICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBwcm90b3R5cGUoSlNDOjpWTSYsIEpTRE9N
R2xvYmFsT2JqZWN0Jik7CiAgICAgc3RhdGljIFRlc3REb21haW5TZWN1cml0eSogdG9XcmFwcGVk
KEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOwotICAgIHN0YXRpYyB2b2lkIGRvUHV0UHJvcGVydHlT
ZWN1cml0eUNoZWNrKEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpQ
cm9wZXJ0eU5hbWUsIEpTQzo6UHV0UHJvcGVydHlTbG90Jik7CiAgICAgc3RhdGljIHZvaWQgZGVz
dHJveShKU0M6OkpTQ2VsbCopOwogCiAgICAgREVDTEFSRV9JTkZPOwpAQCAtNTksNyArNTgsNyBA
QCBwdWJsaWM6CiAgICAgc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1wbChK
U0M6OlZNJiB2bSk7CiAgICAgc3RhdGljIHZvaWQgYW5hbHl6ZUhlYXAoSlNDZWxsKiwgSlNDOjpI
ZWFwQW5hbHl6ZXImKTsKIHB1YmxpYzoKLSAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0
cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBKU0M6Okhhc1B1dFByb3BlcnR5
U2VjdXJpdHlDaGVjayB8IEpTQzo6SGFzU3RhdGljUHJvcGVydHlUYWJsZTsKKyAgICBzdGF0aWMg
Y29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3Mg
fCBKU0M6Okhhc1N0YXRpY1Byb3BlcnR5VGFibGU7CiBwcm90ZWN0ZWQ6CiAgICAgSlNUZXN0RG9t
YWluU2VjdXJpdHkoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCYsIFJlZjxUZXN0
RG9tYWluU2VjdXJpdHk+JiYpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcnVudGlt
ZV9hcnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX2Fy
cmF5LmgJKHJldmlzaW9uIDI3NTc4NykKKysrIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1l
X2FycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDcgKzM1LDcgQEAgbmFtZXNwYWNlIEpTQyB7
CiBjbGFzcyBSdW50aW1lQXJyYXkgZmluYWwgOiBwdWJsaWMgSlNBcnJheSB7CiBwdWJsaWM6CiAg
ICAgdXNpbmcgQmFzZSA9IEpTQXJyYXk7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBT
dHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJv
cGVydHlTbG90IHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlOYW1lcyB8IEludGVyY2VwdHNHZXRP
d25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm87CisgICAgc3RhdGlj
IGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdz
IHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlO
YW1lcyB8IE92ZXJyaWRlc1B1dCB8IEludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4
RXZlbldoZW5MZW5ndGhJc05vdFplcm87CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRz
RGVzdHJ1Y3Rpb24gPSB0cnVlOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIEpT
Qzo6U3Vic3BhY2VBY2Nlc3M+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcnVudGltZV9v
YmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX29i
amVjdC5jcHAJKHJldmlzaW9uIDI3NTc4NykKKysrIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50
aW1lX29iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4Niw2ICsxODYsOSBAQCBib29sIFJ1
bnRpbWVPYmplY3Q6OnB1dChKU0NlbGwqIGNlbGwsIEpTCiAgICAgVk0mIHZtID0gbGV4aWNhbEds
b2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CiAKKyAgICBpZiAoVU5MSUtFTFkoY2VsbCAhPSBzbG90LnRoaXNWYWx1ZSgpKSkKKyAgICAg
ICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBCYXNlOjpwdXQoY2VsbCwgbGV4aWNhbEdsb2Jh
bE9iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCkpOworCiAgICAgUnVudGltZU9iamVj
dCogdGhpc09iamVjdCA9IGpzQ2FzdDxSdW50aW1lT2JqZWN0Kj4oY2VsbCk7CiAgICAgaWYgKCF0
aGlzT2JqZWN0LT5tX2luc3RhbmNlKSB7CiAgICAgICAgIHRocm93UnVudGltZU9iamVjdEludmFs
aWRBY2Nlc3NFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSk7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9icmlkZ2UvcnVudGltZV9vYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9icmlkZ2UvcnVudGltZV9vYmplY3QuaAkocmV2aXNpb24gMjc1Nzg3KQorKysgU291cmNl
L1dlYkNvcmUvYnJpZGdlL3J1bnRpbWVfb2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDcg
KzM3LDcgQEAgRXhjZXB0aW9uKiB0aHJvd1J1bnRpbWVPYmplY3RJbnZhbGlkQWNjZQogY2xhc3Mg
V0VCQ09SRV9FWFBPUlQgUnVudGltZU9iamVjdCA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsK
IHB1YmxpYzoKICAgICB1c2luZyBCYXNlID0gSlNOb25GaW5hbE9iamVjdDsKLSAgICBzdGF0aWMg
Y29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3Mg
fCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eU5h
bWVzIHwgT3ZlcnJpZGVzR2V0Q2FsbERhdGEgfCBHZXRPd25Qcm9wZXJ0eVNsb3RNYXlCZVdyb25n
QWJvdXREb250RW51bTsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZs
YWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3Qg
fCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eU5hbWVzIHwgT3ZlcnJpZGVzR2V0Q2FsbERhdGEgfCBP
dmVycmlkZXNQdXQgfCBHZXRPd25Qcm9wZXJ0eVNsb3RNYXlCZVdyb25nQWJvdXREb250RW51bTsK
ICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7CiAKICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgSlNDOjpTdWJzcGFjZUFjY2Vzcz4KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9vYmpjL29iamNfcnVudGltZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9vYmpjL29iamNfcnVudGltZS5oCShyZXZpc2lvbiAyNzU3
ODcpCisrKyBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvb2JqYy9vYmpjX3J1bnRpbWUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtOTEsNyArOTEsNyBAQCBwcml2YXRlOgogY2xhc3MgT2JqY0ZhbGxiYWNrT2Jq
ZWN0SW1wIGZpbmFsIDogcHVibGljIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0IHsKIHB1YmxpYzoKICAg
ICB1c2luZyBCYXNlID0gSlNEZXN0cnVjdGlibGVPYmplY3Q7Ci0gICAgc3RhdGljIGNvbnN0ZXhw
ciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJp
ZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzR2V0Q2FsbERhdGE7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdz
IHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzR2V0Q2FsbERhdGEgfCBP
dmVycmlkZXNQdXQ7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzRGVzdHJ1Y3Rpb24g
PSB0cnVlOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIEpTQzo6U3Vic3BhY2VB
Y2Nlc3M+CkluZGV4OiBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L0NoYW5nZUxvZwkocmV2aXNpb24gMjc1Nzg3KQorKysgU291cmNlL1dlYktpdC9D
aGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMiBAQAorMjAyMS0wNC0wOSAgQWxl
eGV5IFNodmF5a2EgIDxzaHZhaWthbGVzaEBnbWFpbC5jb20+CisKKyAgICAgICAgSW50cm9kdWNl
IE92ZXJyaWRlc1B1dFtCeUluZGV4XSB0eXBlIGluZm8gZmxhZ3MKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNzkxNgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNj
YXBlL0pTTlBPYmplY3QuaDoKKwogMjAyMS0wNC0wOSAgV2Vuc29uIEhzaWVoICA8d2Vuc29uX2hz
aWVoQGFwcGxlLmNvbT4KIAogICAgICAgICBXZWIgcHJvY2VzcyBjcmFzaGVzIGlmIGltYWdlIGV4
dHJhY3Rpb24gaXMgcmVxdWVzdGVkIGZvciBhbiBlbGVtZW50IHRoYXQgaXMgcGVuZGluZyBpbWFn
ZSBleHRyYWN0aW9uCkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRz
Y2FwZS9KU05QT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1BsdWdpbnMvTmV0c2NhcGUvSlNOUE9iamVjdC5oCShyZXZpc2lvbiAyNzU3ODcpCisrKyBTb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9KU05QT2JqZWN0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTQ0LDcgKzQ0LDcgQEAgY2xhc3MgTlBSdW50aW1lT2JqZWN0TWFwOwogY2xh
c3MgSlNOUE9iamVjdCBmaW5hbCA6IHB1YmxpYyBKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0IHsK
IHB1YmxpYzoKICAgICB1c2luZyBCYXNlID0gSlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdDsKLSAg
ICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0
dXJlRmxhZ3MgfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEpTQzo6T3ZlcnJp
ZGVzR2V0T3duUHJvcGVydHlOYW1lcyB8IEpTQzo6T3ZlcnJpZGVzR2V0Q2FsbERhdGEgfCBKU0M6
OkdldE93blByb3BlcnR5U2xvdE1heUJlV3JvbmdBYm91dERvbnRFbnVtOworICAgIHN0YXRpYyBj
b25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8
IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgSlNDOjpPdmVycmlkZXNHZXRPd25Q
cm9wZXJ0eU5hbWVzIHwgSlNDOjpPdmVycmlkZXNHZXRDYWxsRGF0YSB8IEpTQzo6T3ZlcnJpZGVz
UHV0IHwgSlNDOjpHZXRPd25Qcm9wZXJ0eVNsb3RNYXlCZVdyb25nQWJvdXREb250RW51bTsKIAog
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBKU0M6OlN1YnNwYWNlQWNjZXNzPgogICAg
IHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKSW5kZXg6
IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VM
b2cJKHJldmlzaW9uIDI3NTc4NykKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBj
b3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDIxLTA0LTA5ICBBbGV4ZXkgU2h2YXlrYSAgPHNodmFp
a2FsZXNoQGdtYWlsLmNvbT4KKworICAgICAgICBJbnRyb2R1Y2UgT3ZlcnJpZGVzUHV0W0J5SW5k
ZXhdIHR5cGUgaW5mbyBmbGFncworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjE3OTE2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiBodHRwL3Rlc3RzL3NlY3VyaXR5L2Nyb3NzLWZyYW1lLWFjY2Vzcy1vYmpl
Y3QtZ2V0UHJvdG90eXBlT2YtaW4tcHV0LWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBodHRwL3Rl
c3RzL3NlY3VyaXR5L2Nyb3NzLWZyYW1lLWFjY2Vzcy1vYmplY3QtZ2V0UHJvdG90eXBlT2YtaW4t
cHV0Lmh0bWw6CisgICAgICAgICoganMvZG9tL3JlZmxlY3Qtc2V0LW9udG8tZG9tLWV4cGVjdGVk
LnR4dDoKKyAgICAgICAgKiBqcy9kb20vc2NyaXB0LXRlc3RzL3JlZmxlY3Qtc2V0LW9udG8tZG9t
LmpzOgorCiAyMDIxLTA0LTA5ICBKZWFuLVl2ZXMgQXZlbmFyZCAgPGp5YUBhcHBsZS5jb20+CiAK
ICAgICAgICAgTWVkaWEgU2Vzc2lvbiBhY3Rpb24gc2hvdWxkIGRlZmF1bHQgdG8gdGhlIE1lZGlh
RWxlbWVudCdzIGRlZmF1bHQgd2hlbiBubyBNZWRpYVNlc3Npb24gaGFuZGxlciBhcmUgc2V0Cklu
ZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L2Nyb3NzLWZyYW1lLWFjY2Vzcy1v
YmplY3QtZ2V0UHJvdG90eXBlT2YtaW4tcHV0LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L2Nyb3NzLWZyYW1lLWFjY2Vzcy1vYmplY3Qt
Z2V0UHJvdG90eXBlT2YtaW4tcHV0LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMjc1Nzg3KQorKysg
TGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS9jcm9zcy1mcmFtZS1hY2Nlc3Mtb2JqZWN0
LWdldFByb3RvdHlwZU9mLWluLXB1dC1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw3IEBACiBUaGlzIHRlc3RzIHRoYXQgeW91IGNhbid0IGdldCB0aGUgcHJvdG90eXBlIG9m
IHRoZSB3aW5kb3cgZHVyaW5nIFtbUHV0XV0gb3BlcmF0aW9uLgogCitQQVNTIGFycmF5LmNvY29h
ID0gY29jb2FWYWx1ZSB0aHJldyBleGNlcHRpb24gU2VjdXJpdHlFcnJvcjogQmxvY2tlZCBhIGZy
YW1lIHdpdGggb3JpZ2luICJodHRwOi8vMTI3LjAuMC4xOjgwMDAiIGZyb20gYWNjZXNzaW5nIGEg
Y3Jvc3Mtb3JpZ2luIGZyYW1lLiBQcm90b2NvbHMsIGRvbWFpbnMsIGFuZCBwb3J0cyBtdXN0IG1h
dGNoLi4KK1BBU1MgJ3N0cicuY29jb2EgPSBjb2NvYVZhbHVlIHRocmV3IGV4Y2VwdGlvbiBTZWN1
cml0eUVycm9yOiBCbG9ja2VkIGEgZnJhbWUgd2l0aCBvcmlnaW4gImh0dHA6Ly8xMjcuMC4wLjE6
ODAwMCIgZnJvbSBhY2Nlc3NpbmcgYSBjcm9zcy1vcmlnaW4gZnJhbWUuIFByb3RvY29scywgZG9t
YWlucywgYW5kIHBvcnRzIG11c3QgbWF0Y2guLgogUEFTUzogc3VjY2Vzc2Z1bGx5UGFyc2VkIHNo
b3VsZCBiZSAndHJ1ZScgYW5kIGlzLgogCiBURVNUIENPTVBMRVRFCkluZGV4OiBMYXlvdXRUZXN0
cy9odHRwL3Rlc3RzL3NlY3VyaXR5L2Nyb3NzLWZyYW1lLWFjY2Vzcy1vYmplY3QtZ2V0UHJvdG90
eXBlT2YtaW4tcHV0Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9z
ZWN1cml0eS9jcm9zcy1mcmFtZS1hY2Nlc3Mtb2JqZWN0LWdldFByb3RvdHlwZU9mLWluLXB1dC5o
dG1sCShyZXZpc2lvbiAyNzU3ODcpCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5
L2Nyb3NzLWZyYW1lLWFjY2Vzcy1vYmplY3QtZ2V0UHJvdG90eXBlT2YtaW4tcHV0Lmh0bWwJKHdv
cmtpbmcgY29weSkKQEAgLTE1LDcgKzE1LDcgQEAKICAgICAgICAgZG9UZXN0ID0gZnVuY3Rpb24o
KQogICAgICAgICB7CiAgICAgICAgICAgICB0YXJnZXRXaW5kb3cgPSBkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgidGFyZ2V0IikuY29udGVudFdpbmRvdzsKLSAgICAgICAgICAgIHZhciBhcnJheSA9
IFtdOworICAgICAgICAgICAgYXJyYXkgPSBbXTsKICAgICAgICAgICAgIGFycmF5Ll9fcHJvdG9f
Xy5fX3Byb3RvX18gPSB0YXJnZXRXaW5kb3c7CiAgICAgICAgICAgICBhcnJheVswXSA9IDExLjEx
OwogICAgICAgICAgICAgYXJyYXlbMl0gPSAyMi4yMjsKQEAgLTI0LDExICsyNCwxNSBAQAogICAg
ICAgICAgICAgICAgICAgICB0ZXN0RmFpbGVkKCJ0b1N0cmluZyBpcyBjYWxsZWQgYnkgMTAxMDEw
MTAgc2V0dGVyIik7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfTsKLSAgICAgICAg
ICAgIGFycmF5WyJjb2NvYSJdID0geworICAgICAgICAgICAgY29jb2FWYWx1ZSA9IHsKICAgICAg
ICAgICAgICAgICB0b1N0cmluZygpIHsKICAgICAgICAgICAgICAgICAgICAgdGVzdEZhaWxlZCgi
dG9TdHJpbmcgaXMgY2FsbGVkIGJ5IGNvY29hIHNldHRlciIpOwogICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIH07CisgICAgICAgICAgICBzaG91bGRUaHJvd0Vycm9yTmFtZSgiYXJyYXku
Y29jb2EgPSBjb2NvYVZhbHVlIiwgIlNlY3VyaXR5RXJyb3IiKTsKKworICAgICAgICAgICAgT2Jq
ZWN0LnNldFByb3RvdHlwZU9mKFN0cmluZy5wcm90b3R5cGUsIHRhcmdldFdpbmRvdyk7CisgICAg
ICAgICAgICBzaG91bGRUaHJvd0Vycm9yTmFtZSgiJ3N0cicuY29jb2EgPSBjb2NvYVZhbHVlIiwg
IlNlY3VyaXR5RXJyb3IiKTsKICAgICAgICAgICAgIGZpbmlzaEpTVGVzdCgpOwogICAgICAgICB9
CiAgICAgPC9zY3JpcHQ+CkluZGV4OiBMYXlvdXRUZXN0cy9qcy9kb20vcmVmbGVjdC1zZXQtb250
by1kb20tZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL2RvbS9yZWZs
ZWN0LXNldC1vbnRvLWRvbS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDI3NTc4NykKKysrIExheW91
dFRlc3RzL2pzL2RvbS9yZWZsZWN0LXNldC1vbnRvLWRvbS1leHBlY3RlZC50eHQJKHdvcmtpbmcg
Y29weSkKQEAgLTkzLDEzICs5MywxMyBAQCBQQVNTIFJlZmxlY3QuZ2V0KGRvY3VtZW50LmJvZHku
ZGF0YXNldCwgCiBQQVNTIFJlZmxlY3Quc2V0KGRvY3VtZW50LmJvZHkuZGF0YXNldCwgImNvY29h
LWNhcHB1Y2Npbm8iLCAic3dlZXQiKSB0aHJldyBleGNlcHRpb24gU3ludGF4RXJyb3I6IFRoZSBz
dHJpbmcgZGlkIG5vdCBtYXRjaCB0aGUgZXhwZWN0ZWQgcGF0dGVybi4uCiBQQVNTIFJlZmxlY3Qu
c2V0KGRvY3VtZW50LmJvZHkuZGF0YXNldCwgMCwgInN3ZWV0IikgaXMgdHJ1ZQogUEFTUyBSZWZs
ZWN0LmdldChkb2N1bWVudC5ib2R5LmRhdGFzZXQsIDApIGlzICJzd2VldCIKLURPTVN0cmluZ01h
cCBpZ25vcmVzIHRoZSByZWNlaXZlci4gVGhlc2UgcHV0RGVsZWdhdGUgb25seSB3b3JrIHdpdGgg
OjpwdXQgKG5vdCA6OmRlZmluZU93blByb3BlcnR5KS4gU28gdGhleSBiZWhhdmUgYXMgdGhlIHNw
ZWNpYWwgc2V0dGVyLCB3ZSBzaG91bGQgbm90IGZhbGxiYWNrIHRvIHRoZSBPcmRpbmFyeVNldC4K
K0RPTVN0cmluZ01hcCBmYWxscyBiYWNrIHRvIE9yZGluYXJ5U2V0IGlmIHJlY2VpdmVyIGlzIGFs
dGVyZWQuCiBQQVNTIFJlZmxlY3Quc2V0KGRvY3VtZW50LmJvZHkuZGF0YXNldCwgImNvY29hIiwg
Im9rIiwgcmVjZWl2ZXIpIGlzIHRydWUKLVBBU1MgUmVmbGVjdC5nZXQoZG9jdW1lbnQuYm9keS5k
YXRhc2V0LCAiY29jb2EiKSBpcyAib2siCi1QQVNTIFJlZmxlY3QuZ2V0KHJlY2VpdmVyLCAiY29j
b2EiKSBpcyB1bmRlZmluZWQKK1BBU1MgUmVmbGVjdC5nZXQoZG9jdW1lbnQuYm9keS5kYXRhc2V0
LCAiY29jb2EiKSBpcyAic3dlZXQiCitQQVNTIFJlZmxlY3QuZ2V0KHJlY2VpdmVyLCAiY29jb2Ei
KSBpcyAib2siCiBQQVNTIFJlZmxlY3Quc2V0KGRvY3VtZW50LmJvZHkuZGF0YXNldCwgMCwgIm9r
IiwgcmVjZWl2ZXIpIGlzIHRydWUKLVBBU1MgUmVmbGVjdC5nZXQoZG9jdW1lbnQuYm9keS5kYXRh
c2V0LCAwKSBpcyAib2siCi1QQVNTIFJlZmxlY3QuZ2V0KHJlY2VpdmVyLCAwKSBpcyB1bmRlZmlu
ZWQKK1BBU1MgUmVmbGVjdC5nZXQoZG9jdW1lbnQuYm9keS5kYXRhc2V0LCAwKSBpcyAic3dlZXQi
CitQQVNTIFJlZmxlY3QuZ2V0KHJlY2VpdmVyLCAwKSBpcyAib2siCiBDdXN0b21JbmRleGVkU2V0
dGVyCiBQQVNTIFJlZmxlY3QuZ2V0KHNlbGVjdCwgMCkudmFsdWUgaXMgImNvY29hIgogUEFTUyBS
ZWZsZWN0LmdldChzZWxlY3QsICJsZW5ndGgiKSBpcyAzCkBAIC0xMTEsMTAgKzExMSwxMCBAQCBQ
QVNTIFJlZmxlY3QuZ2V0KHNlbGVjdCwgImxlbmd0aCIpIGlzIDQyCiBQQVNTIFJlZmxlY3Quc2V0
KHNlbGVjdCwgNDQsIG9wdGlvbjIpIGlzIHRydWUKIFBBU1MgUmVmbGVjdC5nZXQoc2VsZWN0LCA0
NCkudmFsdWUgaXMgImtpbGltYW5qYXJvIgogUEFTUyBSZWZsZWN0LnNldChzZWxlY3QsIDIwLCAi
S2lsaW1hbmphcm8iKSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBUeXBlIGVycm9yLgotQ3Vz
dG9tSW5kZXhlZFNldHRlciBpZ25vcmVzIHRoZSByZWNlaXZlci4gVGhlc2UgbWV0aG9kcyBvbmx5
IHdvcmsgd2l0aCA6OnB1dCAobm90IDo6ZGVmaW5lT3duUHJvcGVydHkpLiBTbyB0aGV5IGJlaGF2
ZSBhcyB0aGUgc3BlY2lhbCBzZXR0ZXIsIHdlIHNob3VsZCBub3QgZmFsbGJhY2sgdG8gdGhlIE9y
ZGluYXJ5U2V0LgorQ3VzdG9tSW5kZXhlZFNldHRlciBmYWxscyBiYWNrIHRvIE9yZGluYXJ5U2V0
IGlmIHJlY2VpdmVyIGlzIGFsdGVyZWQuCiBQQVNTIFJlZmxlY3Quc2V0KHNlbGVjdCwgMCwgb3B0
aW9uMywgcmVjZWl2ZXIpIGlzIHRydWUKLVBBU1MgUmVmbGVjdC5nZXQocmVjZWl2ZXIsIDApIGlz
IHVuZGVmaW5lZAotUEFTUyBSZWZsZWN0LmdldChzZWxlY3QsIDApIGlzIG9wdGlvbjMKK1BBU1Mg
UmVmbGVjdC5nZXQocmVjZWl2ZXIsIDApIGlzIG9wdGlvbjMKK1BBU1MgUmVmbGVjdC5nZXQoc2Vs
ZWN0LCAwKSBpcyBzZWxlY3QuY2hpbGRyZW5bMF0KIFBBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlz
IHRydWUKIAogVEVTVCBDT01QTEVURQpJbmRleDogTGF5b3V0VGVzdHMvanMvZG9tL3NjcmlwdC10
ZXN0cy9yZWZsZWN0LXNldC1vbnRvLWRvbS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9q
cy9kb20vc2NyaXB0LXRlc3RzL3JlZmxlY3Qtc2V0LW9udG8tZG9tLmpzCShyZXZpc2lvbiAyNzU3
ODcpCisrKyBMYXlvdXRUZXN0cy9qcy9kb20vc2NyaXB0LXRlc3RzL3JlZmxlY3Qtc2V0LW9udG8t
ZG9tLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0xMTYsMTUgKzExNiwxNSBAQCBzaG91bGRUaHJvdyhg
UmVmbGVjdC5zZXQoZG9jdW1lbnQuYm9keS5kCiBzaG91bGRCZShgUmVmbGVjdC5zZXQoZG9jdW1l
bnQuYm9keS5kYXRhc2V0LCAwLCAic3dlZXQiKWAsIGB0cnVlYCk7CiBzaG91bGRCZShgUmVmbGVj
dC5nZXQoZG9jdW1lbnQuYm9keS5kYXRhc2V0LCAwKWAsIGAic3dlZXQiYCk7CiAKLWRlYnVnKCJE
T01TdHJpbmdNYXAgaWdub3JlcyB0aGUgcmVjZWl2ZXIuIFRoZXNlIHB1dERlbGVnYXRlIG9ubHkg
d29yayB3aXRoIDo6cHV0IChub3QgOjpkZWZpbmVPd25Qcm9wZXJ0eSkuIFNvIHRoZXkgYmVoYXZl
IGFzIHRoZSBzcGVjaWFsIHNldHRlciwgd2Ugc2hvdWxkIG5vdCBmYWxsYmFjayB0byB0aGUgT3Jk
aW5hcnlTZXQuIik7CitkZWJ1ZygiRE9NU3RyaW5nTWFwIGZhbGxzIGJhY2sgdG8gT3JkaW5hcnlT
ZXQgaWYgcmVjZWl2ZXIgaXMgYWx0ZXJlZC4iKTsKIHZhciByZWNlaXZlciA9IHt9Owogc2hvdWxk
QmUoYFJlZmxlY3Quc2V0KGRvY3VtZW50LmJvZHkuZGF0YXNldCwgImNvY29hIiwgIm9rIiwgcmVj
ZWl2ZXIpYCwgYHRydWVgKTsKLXNob3VsZEJlKGBSZWZsZWN0LmdldChkb2N1bWVudC5ib2R5LmRh
dGFzZXQsICJjb2NvYSIpYCwgYCJvayJgKTsKLXNob3VsZEJlKGBSZWZsZWN0LmdldChyZWNlaXZl
ciwgImNvY29hIilgLCBgdW5kZWZpbmVkYCk7CitzaG91bGRCZShgUmVmbGVjdC5nZXQoZG9jdW1l
bnQuYm9keS5kYXRhc2V0LCAiY29jb2EiKWAsIGAic3dlZXQiYCk7CitzaG91bGRCZShgUmVmbGVj
dC5nZXQocmVjZWl2ZXIsICJjb2NvYSIpYCwgYCJvayJgKTsKIHZhciByZWNlaXZlciA9IHt9Owog
c2hvdWxkQmUoYFJlZmxlY3Quc2V0KGRvY3VtZW50LmJvZHkuZGF0YXNldCwgMCwgIm9rIiwgcmVj
ZWl2ZXIpYCwgYHRydWVgKTsKLXNob3VsZEJlKGBSZWZsZWN0LmdldChkb2N1bWVudC5ib2R5LmRh
dGFzZXQsIDApYCwgYCJvayJgKTsKLXNob3VsZEJlKGBSZWZsZWN0LmdldChyZWNlaXZlciwgMClg
LCBgdW5kZWZpbmVkYCk7CitzaG91bGRCZShgUmVmbGVjdC5nZXQoZG9jdW1lbnQuYm9keS5kYXRh
c2V0LCAwKWAsIGAic3dlZXQiYCk7CitzaG91bGRCZShgUmVmbGVjdC5nZXQocmVjZWl2ZXIsIDAp
YCwgYCJvayJgKTsKIAogZGVidWcoIkN1c3RvbUluZGV4ZWRTZXR0ZXIiKTsKIHZhciBzZWxlY3Qg
PSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidGVzdFNlbGVjdCIpOwpAQCAtMTQ2LDExICsxNDYs
MTEgQEAgc2hvdWxkQmUoYFJlZmxlY3Quc2V0KHNlbGVjdCwgNDQsIG9wdGlvbgogc2hvdWxkQmUo
YFJlZmxlY3QuZ2V0KHNlbGVjdCwgNDQpLnZhbHVlYCwgYCJraWxpbWFuamFybyJgKTsKIHNob3Vs
ZFRocm93KGBSZWZsZWN0LnNldChzZWxlY3QsIDIwLCAiS2lsaW1hbmphcm8iKWApOwogCi1kZWJ1
ZygiQ3VzdG9tSW5kZXhlZFNldHRlciBpZ25vcmVzIHRoZSByZWNlaXZlci4gVGhlc2UgbWV0aG9k
cyBvbmx5IHdvcmsgd2l0aCA6OnB1dCAobm90IDo6ZGVmaW5lT3duUHJvcGVydHkpLiBTbyB0aGV5
IGJlaGF2ZSBhcyB0aGUgc3BlY2lhbCBzZXR0ZXIsIHdlIHNob3VsZCBub3QgZmFsbGJhY2sgdG8g
dGhlIE9yZGluYXJ5U2V0LiIpOworZGVidWcoIkN1c3RvbUluZGV4ZWRTZXR0ZXIgZmFsbHMgYmFj
ayB0byBPcmRpbmFyeVNldCBpZiByZWNlaXZlciBpcyBhbHRlcmVkLiIpOwogdmFyIG9wdGlvbjMg
PSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJvcHRpb24iKTsKIG9wdGlvbjMudmFsdWUgPSAicmFi
Yml0IjsKIG9wdGlvbjMudGV4dENvbnRlbnQgPSAiUmFiYml0IjsKIHZhciByZWNlaXZlciA9IHt9
Owogc2hvdWxkQmUoYFJlZmxlY3Quc2V0KHNlbGVjdCwgMCwgb3B0aW9uMywgcmVjZWl2ZXIpYCwg
YHRydWVgKTsKLXNob3VsZEJlKGBSZWZsZWN0LmdldChyZWNlaXZlciwgMClgLCBgdW5kZWZpbmVk
YCk7Ci1zaG91bGRCZShgUmVmbGVjdC5nZXQoc2VsZWN0LCAwKWAsIGBvcHRpb24zYCk7CitzaG91
bGRCZShgUmVmbGVjdC5nZXQocmVjZWl2ZXIsIDApYCwgYG9wdGlvbjNgKTsKK3Nob3VsZEJlKGBS
ZWZsZWN0LmdldChzZWxlY3QsIDApYCwgYHNlbGVjdC5jaGlsZHJlblswXWApOwo=
</data>
<flag name="commit-queue"
          id="445696"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>425674</attachid>
            <date>2021-04-09 19:30:33 -0700</date>
            <delta_ts>2021-04-14 14:47:25 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>bug-217916-20210410053029.patch</filename>
            <type>text/plain</type>
            <size>121414</size>
            <attacher name="Alexey Shvayka">ashvayka</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyNzU3OTApCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDQzIEBACisyMDIxLTA0LTA5ICBBbGV4ZXkgU2h2YXlrYSAgPHNodmFpa2FsZXNo
QGdtYWlsLmNvbT4KKworICAgICAgICBJbnRyb2R1Y2UgT3ZlcnJpZGVzUHV0W0J5SW5kZXhdIHR5
cGUgaW5mbyBmbGFncworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjE3OTE2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiBtaWNyb2JlbmNobWFya3MvcHV0LXNsb3ctbm8tY2FjaGUtYXJyYXkuanM6IEFkZGVk
LgorICAgICAgICAqIG1pY3JvYmVuY2htYXJrcy9wdXQtc2xvdy1uby1jYWNoZS1mdW5jdGlvbi5q
czogQWRkZWQuCisgICAgICAgIChBKToKKyAgICAgICAgKEIpOgorICAgICAgICAoQyk6CisgICAg
ICAgICogbWljcm9iZW5jaG1hcmtzL3B1dC1zbG93LW5vLWNhY2hlLWpzLXByb3h5LmpzOiBBZGRl
ZC4KKyAgICAgICAgKHByb3h5LnZtLmNyZWF0ZVByb3h5LnNldCBmb28pOgorICAgICAgICAqIG1p
Y3JvYmVuY2htYXJrcy9wdXQtc2xvdy1uby1jYWNoZS1sb25nLXByb3RvdHlwZS1jaGFpbi5qczog
QWRkZWQuCisgICAgICAgIChiYXNlLnNldCBmb28pOgorICAgICAgICAqIG1pY3JvYmVuY2htYXJr
cy9wdXQtc2xvdy1uby1jYWNoZS5qczogQWRkZWQuCisgICAgICAgIChiYXNlLnNldCBmb28pOgor
ICAgICAgICAqIG1pY3JvYmVuY2htYXJrcy9yZWZsZWN0LXNldC13aXRoLXJlY2VpdmVyLmpzOiBB
ZGRlZC4KKyAgICAgICAgKHRhcmdldC5uZXcpOgorICAgICAgICAqIHN0cmVzcy9jdXN0b20tZ2V0
LXNldC1wcm90by1jaGFpbi1wdXQuanM6CisgICAgICAgIChnZXRPYmplY3RzKToKKyAgICAgICAg
KGxldC5iYXNlLm9mLmdldEJhc2VzKToKKyAgICAgICAgKiBzdHJlc3MvbW9kdWxlLW5hbWVzcGFj
ZS1hY2Nlc3Mtc2V0LWZhaWxzLmpzOiBBZGRlZC4KKyAgICAgICAgKGFzc2VydCk6CisgICAgICAg
ICh0ZXN0RGlyZWN0U2V0KToKKyAgICAgICAgKiBzdHJlc3MvcHV0LXNsb3ctbm9uLXJlaWZpZWQt
c3RhdGljLW5vbi1leHRlbnNpYmxlLmpzOiBBZGRlZC4KKyAgICAgICAgKHNob3VsZEJlKToKKyAg
ICAgICAgKG9mLnRlc3RDYXNlcy5jb25zdC5rZXkub2YudGVzdEtleXMuc2hvdWxkVGhyb3cpOgor
ICAgICAgICAqIHN0cmVzcy9yZWZsZWN0LXNldC5qczoKKyAgICAgICAgKHNldCBnZXQgVWludDhB
cnJheSk6CisgICAgICAgICogc3RyZXNzL3JlZ3Jlc3MtMjE3OTE2LmpzOiBBZGRlZC4KKyAgICAg
ICAgKHNob3VsZEJlKToKKyAgICAgICAgKHRocm93Lm5ldy5FcnJvcik6CisgICAgICAgICh0ZXN0
U3RhdGljQ3VzdG9tQWNjZXNzb3IpOgorICAgICAgICAodGVzdFN0YXRpY0N1c3RvbVZhbHVlKToK
KyAgICAgICAgKiBzdHJlc3MvdHlwZWQtYXJyYXktY2Fub25pY2FsLW51bWVyaWMtaW5kZXgtc3Ry
aW5nLXNldC5qczogQWRkZWQuCisgICAgICAgIChhc3NlcnQpOgorICAgICAgICAoY29uc3QuVHlw
ZWRBcnJheS5vZi5UeXBlZEFycmF5cy5jb25zdC5rZXkub2YuY2Fub25pY2FsTnVtZXJpY0luZGV4
U3RyaW5ncy5zZXQgdGhyb3cpOgorCiAyMDIxLTA0LTA3ICBZdXN1a2UgU3V6dWtpICA8eXN1enVr
aUBhcHBsZS5jb20+CiAKICAgICAgICAgW0pTQ10gRFVDRVQgbGV2ZWwtMSB3ZWlnaHMgYXJlIGVx
dWFsIGlmIGNoYXJhY3RlcnMgYXJlIGFscGhhYmV0cwpJbmRleDogSlNUZXN0cy9taWNyb2JlbmNo
bWFya3MvcHV0LXNsb3ctbm8tY2FjaGUtYXJyYXkuanMKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9t
aWNyb2JlbmNobWFya3MvcHV0LXNsb3ctbm8tY2FjaGUtYXJyYXkuanMJKG5vbmV4aXN0ZW50KQor
KysgSlNUZXN0cy9taWNyb2JlbmNobWFya3MvcHV0LXNsb3ctbm8tY2FjaGUtYXJyYXkuanMJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw2IEBACisoZnVuY3Rpb24oKSB7CisgICAgdmFyIGFycmF5
ID0gW107CisKKyAgICBmb3IgKHZhciBqID0gMDsgaiA8IDFlNTsgaisrKQorICAgICAgICBhcnJh
eVsiZm9vIiArIGpdID0gajsKK30pKCk7CkluZGV4OiBKU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9w
dXQtc2xvdy1uby1jYWNoZS1mdW5jdGlvbi5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL21pY3Jv
YmVuY2htYXJrcy9wdXQtc2xvdy1uby1jYWNoZS1mdW5jdGlvbi5qcwkobm9uZXhpc3RlbnQpCisr
KyBKU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9wdXQtc2xvdy1uby1jYWNoZS1mdW5jdGlvbi5qcwko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDggQEAKKyhmdW5jdGlvbigpIHsKKyAgICBjbGFzcyBB
IHt9CisgICAgY2xhc3MgQiBleHRlbmRzIEEge30KKyAgICBjbGFzcyBDIGV4dGVuZHMgQiB7fQor
CisgICAgZm9yICh2YXIgaiA9IDA7IGogPCAxZTU7IGorKykKKyAgICAgICAgQ1siZm9vIiArIGpd
ID0gajsKK30pKCk7CkluZGV4OiBKU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9wdXQtc2xvdy1uby1j
YWNoZS1qcy1wcm94eS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9w
dXQtc2xvdy1uby1jYWNoZS1qcy1wcm94eS5qcwkobm9uZXhpc3RlbnQpCisrKyBKU1Rlc3RzL21p
Y3JvYmVuY2htYXJrcy9wdXQtc2xvdy1uby1jYWNoZS1qcy1wcm94eS5qcwkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDYgQEAKKyhmdW5jdGlvbigpIHsKKyAgICB2YXIgcHJveHkgPSAkdm0uY3Jl
YXRlUHJveHkoeyBzZXQgZm9vKF92KSB7fSB9KTsKKworICAgIGZvciAodmFyIGogPSAwOyBqIDwg
MWU1OyBqKyspCisgICAgICAgIHByb3h5WyJmb28iICsgal0gPSBqOworfSkoKTsKSW5kZXg6IEpT
VGVzdHMvbWljcm9iZW5jaG1hcmtzL3B1dC1zbG93LW5vLWNhY2hlLWxvbmctcHJvdG90eXBlLWNo
YWluLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvbWljcm9iZW5jaG1hcmtzL3B1dC1zbG93LW5v
LWNhY2hlLWxvbmctcHJvdG90eXBlLWNoYWluLmpzCShub25leGlzdGVudCkKKysrIEpTVGVzdHMv
bWljcm9iZW5jaG1hcmtzL3B1dC1zbG93LW5vLWNhY2hlLWxvbmctcHJvdG90eXBlLWNoYWluLmpz
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOCBAQAorKGZ1bmN0aW9uKCkgeworICAgIHZhciBi
YXNlID0geyBzZXQgZm9vKF92KSB7fSB9OworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMWUzOyBp
KyspCisgICAgICAgIGJhc2UgPSBPYmplY3QuY3JlYXRlKGJhc2UpOworCisgICAgZm9yICh2YXIg
aiA9IDA7IGogPCAzZTM7IGorKykKKyAgICAgICAgYmFzZVsiZm9vIiArIGpdID0gajsKK30pKCk7
CkluZGV4OiBKU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9wdXQtc2xvdy1uby1jYWNoZS5qcwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBKU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9wdXQtc2xvdy1uby1jYWNoZS5qcwko
bm9uZXhpc3RlbnQpCisrKyBKU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9wdXQtc2xvdy1uby1jYWNo
ZS5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYgQEAKKyhmdW5jdGlvbigpIHsKKyAgICB2
YXIgYmFzZSA9IHsgc2V0IGZvbyhfdikge30gfTsKKworICAgIGZvciAodmFyIGogPSAwOyBqIDwg
MWU1OyBqKyspCisgICAgICAgIGJhc2VbImZvbyIgKyBqXSA9IGo7Cit9KSgpOwpJbmRleDogSlNU
ZXN0cy9taWNyb2JlbmNobWFya3MvcmVmbGVjdC1zZXQtd2l0aC1yZWNlaXZlci5qcwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBKU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9yZWZsZWN0LXNldC13aXRoLXJlY2VpdmVy
LmpzCShub25leGlzdGVudCkKKysrIEpTVGVzdHMvbWljcm9iZW5jaG1hcmtzL3JlZmxlY3Qtc2V0
LXdpdGgtcmVjZWl2ZXIuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2IEBACisoZnVuY3Rp
b24oKSB7CisgICAgdmFyIHRhcmdldCA9IG5ldyBmdW5jdGlvbigpIHt9OworCisgICAgZm9yICh2
YXIgaSA9IDA7IGkgPCAxZTY7IGkrKykKKyAgICAgICAgUmVmbGVjdC5zZXQodGFyZ2V0LCAiZm9v
IiwgMSwge30pOworfSkoKTsKSW5kZXg6IEpTVGVzdHMvc3RyZXNzL2N1c3RvbS1nZXQtc2V0LXBy
b3RvLWNoYWluLXB1dC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0cmVzcy9jdXN0b20tZ2V0
LXNldC1wcm90by1jaGFpbi1wdXQuanMJKHJldmlzaW9uIDI3NTc4NykKKysrIEpTVGVzdHMvc3Ry
ZXNzL2N1c3RvbS1nZXQtc2V0LXByb3RvLWNoYWluLXB1dC5qcwkod29ya2luZyBjb3B5KQpAQCAt
MzcsOCArMzcsOCBAQCBmdW5jdGlvbiBnZXRPYmplY3RzKCkgewogICAgICAgICAuLi5wcmltaXRp
dmVzLm1hcChPYmplY3QpLAogICAgICAgICBPYmplY3QuY3JlYXRlKGN1c3RvbVRlc3RHZXR0ZXJT
ZXR0ZXIpLAogICAgICAgICBPYmplY3QuY3JlYXRlKE9iamVjdC5jcmVhdGUoY3VzdG9tVGVzdEdl
dHRlclNldHRlcikpLAotICAgICAgICAvLyBGSVhNRTogb3JkaW5hcnlTZXRTbG93KCkgc2hvdWxk
IGhhbmRsZSBDdXN0b217QWNjZXNzb3IsVmFsdWV9IGRlc2NyaXB0b3JzLgotICAgICAgICAvLyBu
ZXcgUHJveHkoY3VzdG9tVGVzdEdldHRlclNldHRlciwge30pLAorICAgICAgICBPYmplY3QuY3Jl
YXRlKG5ldyBQcm94eShjdXN0b21UZXN0R2V0dGVyU2V0dGVyLCB7fSkpLAorICAgICAgICBPYmpl
Y3QuY3JlYXRlKCR2bS5jcmVhdGVQcm94eShjdXN0b21UZXN0R2V0dGVyU2V0dGVyKSksCiAgICAg
XTsKIH0KIApAQCAtOTEsNyArOTEsNyBAQCBmdW5jdGlvbiBnZXRCYXNlcygpIHsKICAgICAgICAg
ICAgIGJhc2UuY3VzdG9tVmFsdWUgPSAxOwogICAgICAgICAvLyBUaGlzIGlzIHdlaXJkLCBidXQg
aXQgaXNuJ3QgZXhwb3NlZCB0byB1c2VybGFuZCBjb2RlOgogICAgICAgICBhc3NlcnQoIWJhc2Uu
aGFzT3duUHJvcGVydHkoImN1c3RvbVZhbHVlIikpOwotICAgICAgICBhc3NlcnQoIVJlZmxlY3Qu
c2V0KE9iamVjdChiYXNlKSwgImN1c3RvbVZhbHVlIiwgMSkpOworICAgICAgICBhc3NlcnQoUmVm
bGVjdC5zZXQoT2JqZWN0KGJhc2UpLCAiY3VzdG9tVmFsdWUiLCAxKSk7CiAgICAgfQogfSkoKTsK
IApJbmRleDogSlNUZXN0cy9zdHJlc3MvbW9kdWxlLW5hbWVzcGFjZS1hY2Nlc3Mtc2V0LWZhaWxz
LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvc3RyZXNzL21vZHVsZS1uYW1lc3BhY2UtYWNjZXNz
LXNldC1mYWlscy5qcwkobm9uZXhpc3RlbnQpCisrKyBKU1Rlc3RzL3N0cmVzcy9tb2R1bGUtbmFt
ZXNwYWNlLWFjY2Vzcy1zZXQtZmFpbHMuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4MyBA
QAorY29uc3QgZXhpc3RpbmdLZXlzID0gWyJjb2NvYSIsICJ0ZXN0IiwgU3ltYm9sLnRvU3RyaW5n
VGFnXTsKK2NvbnN0IG5vbkV4aXN0aW5nS2V5cyA9IFsiZm9vIiwgU3ltYm9sKCJmb28iKV07Citj
b25zdCBhbGxLZXlzID0gWy4uLmV4aXN0aW5nS2V5cywgLi4ubm9uRXhpc3RpbmdLZXlzXTsKKwor
ZnVuY3Rpb24gYXNzZXJ0KHgsIGtleSkgeworICAgIGlmICgheCkKKyAgICAgICAgdGhyb3cgbmV3
IEVycm9yKGBCYWQgYXNzZXJ0aW9uISBLZXk6ICR7U3RyaW5nKGtleSl9YCk7Cit9CisKK2Z1bmN0
aW9uIHNob3VsZFRocm93KGZ1bmMsIGVycm9yTWVzc2FnZSkgeworICAgIHZhciBlcnJvclRocm93
biA9IGZhbHNlOworICAgIHRyeSB7CisgICAgICAgIGZ1bmMoKTsKKyAgICB9IGNhdGNoIChlcnJv
cikgeworICAgICAgICBlcnJvclRocm93biA9IHRydWU7CisgICAgICAgIGlmIChTdHJpbmcoZXJy
b3IpICE9PSBlcnJvck1lc3NhZ2UpCisgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEJhZCBl
cnJvcjogJHtlcnJvcn1gKTsKKyAgICB9CisgICAgaWYgKCFlcnJvclRocm93bikKKyAgICAgICAg
dGhyb3cgbmV3IEVycm9yKCJEaWRuJ3QgdGhyb3chIik7Cit9CisKK2Z1bmN0aW9uIHRlc3REaXJl
Y3RTZXQobnMpIHsKKyAgICBmb3IgKGNvbnN0IGtleSBvZiBhbGxLZXlzKSB7CisgICAgICAgIGNv
bnN0IG5ld1ZhbHVlID0ge307CisKKyAgICAgICAgbnNba2V5XSA9IG5ld1ZhbHVlOworICAgICAg
ICBhc3NlcnQobnNba2V5XSAhPT0gbmV3VmFsdWUsIGtleSk7CisKKyAgICAgICAgc2hvdWxkVGhy
b3coKCkgPT4geyAidXNlIHN0cmljdCI7IG5zW2tleV0gPSBuZXdWYWx1ZTsgfSwgIlR5cGVFcnJv
cjogQXR0ZW1wdGVkIHRvIGFzc2lnbiB0byByZWFkb25seSBwcm9wZXJ0eS4iKTsKKyAgICAgICAg
YXNzZXJ0KG5zW2tleV0gIT09IG5ld1ZhbHVlLCBrZXkpOworICAgIH0KK30KKworZnVuY3Rpb24g
dGVzdFByb3RvdHlwZUNoYWluU2V0KG5zKSB7CisgICAgZm9yIChjb25zdCBrZXkgb2YgYWxsS2V5
cykgeworICAgICAgICBjb25zdCBoZWlyID0gT2JqZWN0LmNyZWF0ZShucyk7CisKKyAgICAgICAg
aGVpcltrZXldID0ge307CisgICAgICAgIGFzc2VydChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNj
cmlwdG9yKGhlaXIsIGtleSkgPT09IHVuZGVmaW5lZCwga2V5KTsKKworICAgICAgICBzaG91bGRU
aHJvdygoKSA9PiB7ICJ1c2Ugc3RyaWN0IjsgaGVpcltrZXldID0ge307IH0sICJUeXBlRXJyb3I6
IEF0dGVtcHRlZCB0byBhc3NpZ24gdG8gcmVhZG9ubHkgcHJvcGVydHkuIik7CisgICAgICAgIGFz
c2VydChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGhlaXIsIGtleSkgPT09IHVuZGVm
aW5lZCwga2V5KTsKKyAgICB9Cit9CisKK2Z1bmN0aW9uIHRlc3RSZWZsZWN0U2V0KG5zKSB7Cisg
ICAgInVzZSBzdHJpY3QiOworCisgICAgZm9yIChjb25zdCBleGlzdGluZ0tleSBvZiBleGlzdGlu
Z0tleXMpIHsKKyAgICAgICAgY29uc3Qgb2JqID0ge307CisgICAgICAgIGNvbnN0IG5ld1ZhbHVl
ID0ge307CisKKyAgICAgICAgYXNzZXJ0KFJlZmxlY3Quc2V0KG5zLCBleGlzdGluZ0tleSwgbmV3
VmFsdWUpID09PSBmYWxzZSwgZXhpc3RpbmdLZXkpOworICAgICAgICBhc3NlcnQoUmVmbGVjdC5z
ZXQob2JqLCBleGlzdGluZ0tleSwgbmV3VmFsdWUsIG5zKSA9PT0gZmFsc2UsIGV4aXN0aW5nS2V5
KTsKKworICAgICAgICBjb25zdCBpc1dyaXRhYmxlID0gZXhpc3RpbmdLZXkgIT09IFN5bWJvbC50
b1N0cmluZ1RhZzsKKyAgICAgICAgYXNzZXJ0KFJlZmxlY3Quc2V0KG9iaiwgZXhpc3RpbmdLZXks
IG5zW2V4aXN0aW5nS2V5XSwgbnMpID09PSBpc1dyaXRhYmxlLCBleGlzdGluZ0tleSk7CisKKyAg
ICAgICAgYXNzZXJ0KG5zW2V4aXN0aW5nS2V5XSAhPT0gbmV3VmFsdWUsIGV4aXN0aW5nS2V5KTsK
KyAgICAgICAgYXNzZXJ0KG9ialtleGlzdGluZ0tleV0gPT09IHVuZGVmaW5lZCwgZXhpc3RpbmdL
ZXkpOworICAgIH0KKworICAgIGZvciAoY29uc3Qgbm9uRXhpc3RpbmdLZXkgb2Ygbm9uRXhpc3Rp
bmdLZXlzKSB7CisgICAgICAgIGFzc2VydChSZWZsZWN0LnNldChucywgbm9uRXhpc3RpbmdLZXks
IHt9KSA9PT0gZmFsc2UsIG5vbkV4aXN0aW5nS2V5KTsKKyAgICAgICAgYXNzZXJ0KG5zW25vbkV4
aXN0aW5nS2V5XSA9PT0gdW5kZWZpbmVkLCBub25FeGlzdGluZ0tleSk7CisKKyAgICAgICAgY29u
c3Qgb2JqID0ge307CisgICAgICAgIGFzc2VydChSZWZsZWN0LnNldChvYmosIG5vbkV4aXN0aW5n
S2V5LCB7fSwgbnMpID09PSBmYWxzZSwgbm9uRXhpc3RpbmdLZXkpOworICAgICAgICBhc3NlcnQo
b2JqW25vbkV4aXN0aW5nS2V5XSA9PT0gdW5kZWZpbmVkLCBub25FeGlzdGluZ0tleSk7CisgICAg
fQorfQorCitpbXBvcnQoIi4vcmVzb3VyY2VzL21vZHVsZS1uYW1lc3BhY2UtYWNjZXNzLmpzIiku
dGhlbihucyA9PiB7CisgICAgdGVzdERpcmVjdFNldChucyk7CisgICAgdGVzdFByb3RvdHlwZUNo
YWluU2V0KG5zKTsKKyAgICB0ZXN0UmVmbGVjdFNldChucyk7Cit9KS5jYXRjaChlcnIgPT4gewor
ICAgIHByaW50KGAhISEgJHtlcnJ9XG4ke2Vyci5zdGFja31gKTsKKyAgICAkdm0uYWJvcnQoKTsK
K30pOworCitkcmFpbk1pY3JvdGFza3MoKTsKSW5kZXg6IEpTVGVzdHMvc3RyZXNzL3B1dC1zbG93
LW5vbi1yZWlmaWVkLXN0YXRpYy1ub24tZXh0ZW5zaWJsZS5qcwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rl
c3RzL3N0cmVzcy9wdXQtc2xvdy1ub24tcmVpZmllZC1zdGF0aWMtbm9uLWV4dGVuc2libGUuanMJ
KG5vbmV4aXN0ZW50KQorKysgSlNUZXN0cy9zdHJlc3MvcHV0LXNsb3ctbm9uLXJlaWZpZWQtc3Rh
dGljLW5vbi1leHRlbnNpYmxlLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjYgQEAKKyJ1
c2Ugc3RyaWN0IjsKKworZnVuY3Rpb24gc2hvdWxkQmUoYWN0dWFsLCBleHBlY3RlZCkgeworICAg
IGlmIChhY3R1YWwgIT09IGV4cGVjdGVkKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEJhZCB2
YWx1ZTogJHthY3R1YWx9IWApOworfQorCitmdW5jdGlvbiBzaG91bGRUaHJvdyhmdW5jLCBlcnJv
ck1lc3NhZ2UpIHsKKyAgICB2YXIgZXJyb3JUaHJvd24gPSBmYWxzZTsKKyAgICB0cnkgeworICAg
ICAgICBmdW5jKCk7CisgICAgfSBjYXRjaCAoZXJyb3IpIHsKKyAgICAgICAgZXJyb3JUaHJvd24g
PSB0cnVlOworICAgICAgICBpZiAoU3RyaW5nKGVycm9yKSAhPT0gZXJyb3JNZXNzYWdlKQorICAg
ICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBCYWQgZXJyb3I6ICR7ZXJyb3J9YCk7CisgICAgfQor
ICAgIGlmICghZXJyb3JUaHJvd24pCisgICAgICAgIHRocm93IG5ldyBFcnJvcigiRGlkbid0IHRo
cm93ISIpOworfQorCisvLyBbKCkgPT4gJHZtLmNyZWF0ZUdsb2JhbE9iamVjdCgpLCBbImV2YWwi
LCAicGFyc2VJbnQiLCAiRXZhbEVycm9yIiwgIlVSSUVycm9yIiwgIlByb3h5IiwgIlJlZmxlY3Qi
XV0sCitjb25zdCB0ZXN0Q2FzZXMgPSBbCisgICAgeyBnZXRPYmplY3Q6ICgpID0+ICR2bS5jcmVh
dGVHbG9iYWxPYmplY3QoKS5Qcm9taXNlLCB0ZXN0S2V5czogWyJyYWNlIiwgImFsbFNldHRsZWQi
LCAiYW55Il0gfSwKKyAgICB7IGdldE9iamVjdDogKCkgPT4gJHZtLmNyZWF0ZUdsb2JhbE9iamVj
dCgpLlN0cmluZy5wcm90b3R5cGUsIHRlc3RLZXlzOiBbImJpZyIsICJib2xkIiwgInN1cCIsICJz
dWIiXSB9LAorICAgIHsgZ2V0T2JqZWN0OiAoKSA9PiAkdm0uY3JlYXRlR2xvYmFsT2JqZWN0KCku
RGF0YVZpZXcucHJvdG90eXBlLCB0ZXN0S2V5czogWyJnZXRJbnQxNiIsICJnZXRGbG9hdDMyIiwg
InNldEludDgiXSB9LAorICAgIHsgZ2V0T2JqZWN0OiAoKSA9PiAkdm0uY3JlYXRlR2xvYmFsT2Jq
ZWN0KCkuSW50bCwgdGVzdEtleXM6IFsiQ29sbGF0b3IiLCAiTG9jYWxlIiwgIk51bWJlckZvcm1h
dCJdIH0sCisgICAgeyBnZXRPYmplY3Q6ICgpID0+ICR2bS5jcmVhdGVHbG9iYWxPYmplY3QoKS5J
bnRsLkxvY2FsZS5wcm90b3R5cGUsIHRlc3RLZXlzOiBbIm1heGltaXplIiwgIm1pbmltaXplIiwg
InRvU3RyaW5nIl0gfSwKK107CisKKy8vIHsgZ2V0T2JqZWN0OiAoKSA9PiAkdm0uY3JlYXRlU3Rh
dGljQ3VzdG9tVmFsdWUoKSwgdGVzdEtleXM6IFsidGVzdFN0YXRpY1ZhbHVlTm9TZXR0ZXIiXSB9
LAorCitmb3IgKGNvbnN0IHsgZ2V0T2JqZWN0LCB0ZXN0S2V5cyB9IG9mIHRlc3RDYXNlcykgewor
ICAgIGZvciAoY29uc3Qga2V5IG9mIHRlc3RLZXlzKSB7CisgICAgICAgIHByaW50KGtleSk7Cisg
ICAgICAgIGNvbnN0IG9iamVjdCA9IGdldE9iamVjdCgpOworICAgICAgICBjb25zdCBwcmV2RGVz
YyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBrZXkpOworICAgICAg
ICBPYmplY3QucHJldmVudEV4dGVuc2lvbnMob2JqZWN0KTsKKworICAgICAgICBjb25zdCB2YWx1
ZSA9IHt9OworICAgICAgICBvYmplY3Rba2V5XSA9IHZhbHVlOworCisgICAgICAgIGNvbnN0IGRl
c2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwga2V5KTsKKyAgICAg
ICAgc2hvdWxkQmUoZGVzYy52YWx1ZSwgdmFsdWUpOworICAgICAgICBzaG91bGRCZShkZXNjLndy
aXRhYmxlLCBwcmV2RGVzYy53cml0YWJsZSk7CisgICAgICAgIHNob3VsZEJlKGRlc2MuZW51bWVy
YWJsZSwgcHJldkRlc2MuZW51bWVyYWJsZSk7CisgICAgICAgIHNob3VsZEJlKGRlc2MuY29uZmln
dXJhYmxlLCBwcmV2RGVzYy5jb25maWd1cmFibGUpOworICAgICAgICBzaG91bGRCZShkZXNjLmdl
dCwgcHJldkRlc2MuZ2V0KTsKKyAgICAgICAgc2hvdWxkQmUoZGVzYy5zZXQsIHByZXZEZXNjLnNl
dCk7CisgICAgfQorfQorCitmb3IgKGNvbnN0IHsgZ2V0T2JqZWN0LCB0ZXN0S2V5cyB9IG9mIHRl
c3RDYXNlcykgeworICAgIGZvciAoY29uc3Qga2V5IG9mIHRlc3RLZXlzKSB7CisgICAgICAgIHBy
aW50KGtleSk7CisgICAgICAgIGNvbnN0IG9iamVjdCA9IGdldE9iamVjdCgpOworICAgICAgICBj
b25zdCBwcmV2VmFsID0gb2JqZWN0W2tleV07CisKKyAgICAgICAgY29uc3QgaGVpciA9IE9iamVj
dC5jcmVhdGUob2JqZWN0KTsKKyAgICAgICAgT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zKGhlaXIp
OworCisgICAgICAgIHNob3VsZFRocm93KCgpID0+IHsgaGVpcltrZXldID0ge307IH0sICJUeXBl
RXJyb3I6IEF0dGVtcHRlZCB0byBhc3NpZ24gdG8gcmVhZG9ubHkgcHJvcGVydHkuIik7CisgICAg
ICAgIHNob3VsZEJlKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoaGVpciwga2V5KSwg
dW5kZWZpbmVkKTsKKworICAgICAgICBzaG91bGRCZShvYmplY3Rba2V5XSwgcHJldlZhbCk7Cisg
ICAgfQorfQpJbmRleDogSlNUZXN0cy9zdHJlc3MvcmVmbGVjdC1zZXQuanMKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gSlNUZXN0cy9zdHJlc3MvcmVmbGVjdC1zZXQuanMJKHJldmlzaW9uIDI3NTc4NykKKysrIEpT
VGVzdHMvc3RyZXNzL3JlZmxlY3Qtc2V0LmpzCSh3b3JraW5nIGNvcHkpCkBAIC02OTYsNiArNjk2
LDEyIEBAIHZhciBzeW1ib2wgPSBTeW1ib2woKTsKICAgICAgICAgdHJhbnNmZXJBcnJheUJ1ZmZl
cihvYmplY3QuYnVmZmVyKTsKICAgICAgICAgc2hvdWxkQmUoUmVmbGVjdC5zZXQob2JqZWN0LCAw
LCA0MiksIHRydWUpOwogICAgICAgICBzaG91bGRCZShSZWZsZWN0LmdldChvYmplY3QsIDApLCB1
bmRlZmluZWQpOworCisgICAgICAgIHZhciByZWNlaXZlciA9IG5ldyBUeXBlZEFycmF5KDQpOwor
ICAgICAgICB2YXIgdGFyZ2V0ID0ge307CisgICAgICAgIHNob3VsZEJlKFJlZmxlY3Quc2V0KHRh
cmdldCwgIjAuNSIsIDQyLCByZWNlaXZlciksIGZhbHNlKTsKKyAgICAgICAgc2hvdWxkQmUoUmVm
bGVjdC5nZXQodGFyZ2V0LCAiMC41IiksIHVuZGVmaW5lZCk7CisgICAgICAgIHNob3VsZEJlKFJl
ZmxlY3QuZ2V0KHJlY2VpdmVyLCAiMC41IiksIHVuZGVmaW5lZCk7CiAgICAgfTsKIH0pKCkpOwog
CkluZGV4OiBKU1Rlc3RzL3N0cmVzcy9yZWdyZXNzLTIxNzkxNi5qcwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBK
U1Rlc3RzL3N0cmVzcy9yZWdyZXNzLTIxNzkxNi5qcwkobm9uZXhpc3RlbnQpCisrKyBKU1Rlc3Rz
L3N0cmVzcy9yZWdyZXNzLTIxNzkxNi5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY2IEBA
CisidXNlIHN0cmljdCI7CisKK2Z1bmN0aW9uIHNob3VsZEJlKGFjdHVhbCwgZXhwZWN0ZWQpIHsK
KyAgICBpZiAoYWN0dWFsICE9PSBleHBlY3RlZCkKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBC
YWQgdmFsdWU6ICR7YWN0dWFsfSFgKTsKK30KKworZnVuY3Rpb24gc2hvdWxkVGhyb3coZnVuYywg
ZXJyb3JNZXNzYWdlKSB7CisgICAgdmFyIGVycm9yVGhyb3duID0gZmFsc2U7CisgICAgdHJ5IHsK
KyAgICAgICAgZnVuYygpOworICAgIH0gY2F0Y2ggKGVycm9yKSB7CisgICAgICAgIGVycm9yVGhy
b3duID0gdHJ1ZTsKKyAgICAgICAgaWYgKFN0cmluZyhlcnJvcikgIT09IGVycm9yTWVzc2FnZSkK
KyAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQmFkIGVycm9yOiAke2Vycm9yfWApOworICAg
IH0KKyAgICBpZiAoIWVycm9yVGhyb3duKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkRpZG4n
dCB0aHJvdyEiKTsKK30KKworeworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPYmplY3QucHJv
dG90eXBlLCAiZ2V0RGF5Iiwge3ZhbHVlOiAxLCB3cml0YWJsZTogZmFsc2UsIGNvbmZpZ3VyYWJs
ZTogdHJ1ZX0pOworICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSgpOworICAgIGRhdGUuZ2V0RGF5
ID0gMjsKKyAgICBzaG91bGRCZShkYXRlLmdldERheSwgMik7CisgICAgc2hvdWxkQmUodHlwZW9m
IERhdGUucHJvdG90eXBlLmdldERheSwgImZ1bmN0aW9uIik7CisgICAgZGVsZXRlIE9iamVjdC5w
cm90b3R5cGUuZ2V0RGF5OworfQorCisKK2NvbnN0IHByaW1pdGl2ZXMgPSBbdHJ1ZSwgMSwgIiIs
IFN5bWJvbCgpLCAxbl07CisKKyhmdW5jdGlvbiB0ZXN0U3RhdGljQ3VzdG9tQWNjZXNzb3IoKSB7
CisgICAgZm9yIChjb25zdCBwcmltaXRpdmUgb2YgcHJpbWl0aXZlcykgeworICAgICAgICBjb25z
dCBwcmltaXRpdmVQcm90b3R5cGUgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YocHJpbWl0aXZlKTsK
KyAgICAgICAgY29uc3Qgc3RhdGljQ3VzdG9tQWNjZXNzb3IgPSAkdm0uY3JlYXRlU3RhdGljQ3Vz
dG9tQWNjZXNzb3IoKTsKKyAgICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKHByaW1pdGl2ZVBy
b3RvdHlwZSwgc3RhdGljQ3VzdG9tQWNjZXNzb3IpOworCisgICAgICAgIHNob3VsZFRocm93KCgp
ID0+IHsgcHJpbWl0aXZlLnRlc3RTdGF0aWNBY2Nlc3NvclJlYWRPbmx5ID0gMTsgfSwgIlR5cGVF
cnJvcjogQXR0ZW1wdGVkIHRvIGFzc2lnbiB0byByZWFkb25seSBwcm9wZXJ0eS4iKTsKKworICAg
ICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDEwMDA7IGkrKykgeworICAgICAgICAgICAgcHJpbWl0
aXZlLnRlc3RTdGF0aWNBY2Nlc3NvciA9IGk7CisgICAgICAgICAgICBzaG91bGRCZShwcmltaXRp
dmVQcm90b3R5cGUudGVzdEZpZWxkLCBpKTsKKyAgICAgICAgfQorCisgICAgICAgIGRlbGV0ZSBw
cmltaXRpdmVQcm90b3R5cGUudGVzdEZpZWxkOworICAgICAgICBPYmplY3Quc2V0UHJvdG90eXBl
T2YocHJpbWl0aXZlUHJvdG90eXBlLCBPYmplY3QucHJvdG90eXBlKTsKKyAgICB9Cit9KSgpOwor
CisoZnVuY3Rpb24gdGVzdFN0YXRpY0N1c3RvbVZhbHVlKCkgeworICAgIGZvciAoY29uc3QgcHJp
bWl0aXZlIG9mIHByaW1pdGl2ZXMpIHsKKyAgICAgICAgY29uc3QgcHJpbWl0aXZlUHJvdG90eXBl
ID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHByaW1pdGl2ZSk7CisgICAgICAgIGNvbnN0IHN0YXRp
Y0N1c3RvbVZhbHVlID0gJHZtLmNyZWF0ZVN0YXRpY0N1c3RvbVZhbHVlKCk7CisgICAgICAgIE9i
amVjdC5zZXRQcm90b3R5cGVPZihwcmltaXRpdmVQcm90b3R5cGUsIHN0YXRpY0N1c3RvbVZhbHVl
KTsKKworICAgICAgICBzaG91bGRUaHJvdygoKSA9PiB7IHByaW1pdGl2ZS50ZXN0U3RhdGljVmFs
dWVOb1NldHRlciA9IDE7IH0sICJUeXBlRXJyb3I6IEF0dGVtcHRlZCB0byBhc3NpZ24gdG8gcmVh
ZG9ubHkgcHJvcGVydHkuIik7CisgICAgICAgIHNob3VsZFRocm93KCgpID0+IHsgcHJpbWl0aXZl
LnRlc3RTdGF0aWNWYWx1ZVJlYWRPbmx5ID0gMTsgfSwgIlR5cGVFcnJvcjogQXR0ZW1wdGVkIHRv
IGFzc2lnbiB0byByZWFkb25seSBwcm9wZXJ0eS4iKTsKKworICAgICAgICBwcmltaXRpdmUudGVz
dFN0YXRpY1ZhbHVlID0gMTsKKyAgICAgICAgc2hvdWxkQmUoc3RhdGljQ3VzdG9tVmFsdWUudGVz
dFN0YXRpY1ZhbHVlLCAxKTsKKyAgICAgICAgc2hvdWxkVGhyb3coKCkgPT4geyBwcmltaXRpdmUu
dGVzdFN0YXRpY1ZhbHVlID0gMTsgfSwgIlR5cGVFcnJvcjogQXR0ZW1wdGVkIHRvIGFzc2lnbiB0
byByZWFkb25seSBwcm9wZXJ0eS4iKTsKKworICAgICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2Yo
cHJpbWl0aXZlUHJvdG90eXBlLCBPYmplY3QucHJvdG90eXBlKTsKKyAgICB9Cit9KSgpOwpJbmRl
eDogSlNUZXN0cy9zdHJlc3MvdHlwZWQtYXJyYXktY2Fub25pY2FsLW51bWVyaWMtaW5kZXgtc3Ry
aW5nLXNldC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0cmVzcy90eXBlZC1hcnJheS1jYW5v
bmljYWwtbnVtZXJpYy1pbmRleC1zdHJpbmctc2V0LmpzCShub25leGlzdGVudCkKKysrIEpTVGVz
dHMvc3RyZXNzL3R5cGVkLWFycmF5LWNhbm9uaWNhbC1udW1lcmljLWluZGV4LXN0cmluZy1zZXQu
anMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzNSBAQAorJ3VzZSBzdHJpY3QnOworY29uc3Qg
VHlwZWRBcnJheXMgPSBbVWludDhDbGFtcGVkQXJyYXksIFVpbnQ4QXJyYXksIFVpbnQxNkFycmF5
LCBVaW50MzJBcnJheSwgSW50OEFycmF5LCBJbnQxNkFycmF5LCBJbnQzMkFycmF5LCBGbG9hdDMy
QXJyYXksIEZsb2F0NjRBcnJheV07Citjb25zdCBjYW5vbmljYWxOdW1lcmljSW5kZXhTdHJpbmdz
ID0gWyctMCcsICctMScsICctMy4xNCcsICdJbmZpbml0eScsICctSW5maW5pdHknLCAnTmFOJywg
JzAuMScsICc0Mjk0OTY3Mjk1JywgJzQyOTQ5NjcyOTYnXTsKKworZnVuY3Rpb24gYXNzZXJ0KHgs
IGtleSkgeworICAgIGlmICgheCkKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBCYWQgYXNzZXJ0
aW9uISBLZXk6ICcke2tleX0nYCk7Cit9CisKK2ZvciAoY29uc3QgVHlwZWRBcnJheSBvZiBUeXBl
ZEFycmF5cykgeworICAgIGZvciAoY29uc3Qga2V5IG9mIGNhbm9uaWNhbE51bWVyaWNJbmRleFN0
cmluZ3MpIHsKKyAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFR5cGVkQXJyYXkucHJvdG90
eXBlLCBrZXksIHsKKyAgICAgICAgICAgIHNldCgpIHsKKyAgICAgICAgICAgICAgICB0aHJvdyBu
ZXcgRXJyb3IoYCR7VHlwZWRBcnJheS5uYW1lfS5wcm90b3R5cGVbJyR7a2V5fSddIHNldHRlciBz
aG91bGQgYmUgdW5yZWFjaGFibGUhYCk7CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgY29u
ZmlndXJhYmxlOiB0cnVlLAorICAgICAgICB9KTsKKworICAgICAgICBjb25zdCBhc3NlcnRQcm90
b3R5cGVLZXlJc0lnbm9yZWQgPSAoKSA9PiB7CisgICAgICAgICAgICBjb25zdCB0QSA9IG5ldyBU
eXBlZEFycmF5OworICAgICAgICAgICAgdEFba2V5XSA9IDE7CisgICAgICAgICAgICBhc3NlcnQo
IXRBLmhhc093blByb3BlcnR5KGtleSksIGtleSk7CisKKyAgICAgICAgICAgIGNvbnN0IGhlaXIg
PSBPYmplY3QuY3JlYXRlKG5ldyBUeXBlZEFycmF5KTsKKyAgICAgICAgICAgIGhlaXJba2V5XSA9
IDI7CisgICAgICAgICAgICBhc3NlcnQoIWhlaXIuaGFzT3duUHJvcGVydHkoa2V5KSwga2V5KTsK
KyAgICAgICAgfTsKKworICAgICAgICBhc3NlcnRQcm90b3R5cGVLZXlJc0lnbm9yZWQoKTsKKyAg
ICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFR5cGVkQXJyYXkucHJvdG90eXBlLCBrZXksIHt3
cml0YWJsZTogZmFsc2V9KTsKKyAgICAgICAgYXNzZXJ0UHJvdG90eXBlS2V5SXNJZ25vcmVkKCk7
CisKKyAgICAgICAgYXNzZXJ0KGRlbGV0ZSBUeXBlZEFycmF5LnByb3RvdHlwZVtrZXldLCBrZXkp
OworICAgIH0KK30KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjc1Nzg3
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAt
MSwzICsxLDk5IEBACisyMDIxLTA0LTA5ICBBbGV4ZXkgU2h2YXlrYSAgPHNodmFpa2FsZXNoQGdt
YWlsLmNvbT4KKworICAgICAgICBJbnRyb2R1Y2UgT3ZlcnJpZGVzUHV0W0J5SW5kZXhdIHR5cGUg
aW5mbyBmbGFncworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjE3OTE2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgKiBBUEkvSlNDYWxsYmFja09iamVjdC5oOgorICAgICAgICAqIEFQSS9KU0NhbGxiYWNrT2Jq
ZWN0RnVuY3Rpb25zLmg6CisgICAgICAgIChKU0M6OkpTQ2FsbGJhY2tPYmplY3Q8UGFyZW50Pjo6
cHV0KToKKyAgICAgICAgKiBBUEkvdGVzdHMvdGVzdGFwaVNjcmlwdHMvdGVzdGFwaS5qczoKKyAg
ICAgICAgKiBkZWJ1Z2dlci9EZWJ1Z2dlclNjb3BlLmg6CisgICAgICAgICogcnVudGltZS9DbGFz
c0luZm8uaDoKKyAgICAgICAgKiBydW50aW1lL0Nsb25lZEFyZ3VtZW50cy5oOgorICAgICAgICAq
IHJ1bnRpbWUvQ3VzdG9tR2V0dGVyU2V0dGVyLmNwcDoKKyAgICAgICAgKEpTQzo6Y2FsbEN1c3Rv
bVNldHRlcik6IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9DdXN0b21HZXR0ZXJTZXR0ZXIu
aDoKKyAgICAgICAgKiBydW50aW1lL0Vycm9yQ29uc3RydWN0b3IuaDoKKyAgICAgICAgKiBydW50
aW1lL0Vycm9ySW5zdGFuY2UuaDoKKyAgICAgICAgKiBydW50aW1lL0dlbmVyaWNBcmd1bWVudHMu
aDoKKyAgICAgICAgKiBydW50aW1lL0dlbmVyaWNBcmd1bWVudHNJbmxpbmVzLmg6CisgICAgICAg
IChKU0M6OkdlbmVyaWNBcmd1bWVudHM8VHlwZT46OnB1dCk6CisgICAgICAgICogcnVudGltZS9H
ZXR0ZXJTZXR0ZXIuaDoKKyAgICAgICAgKiBydW50aW1lL0pTQXJyYXkuY3BwOgorICAgICAgICAo
SlNDOjpKU0FycmF5OjpwdXQpOgorICAgICAgICAqIHJ1bnRpbWUvSlNBcnJheS5oOgorICAgICAg
ICAqIHJ1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuY3BwOgorICAgICAgICAoSlNDOjpKU0FycmF5
QnVmZmVyVmlldzo6cHV0KTogRGVsZXRlZC4KKyAgICAgICAgKiBydW50aW1lL0pTQXJyYXlCdWZm
ZXJWaWV3Lmg6CisgICAgICAgICogcnVudGltZS9KU0NKU1ZhbHVlLmNwcDoKKyAgICAgICAgKEpT
Qzo6SlNWYWx1ZTo6cHV0VG9QcmltaXRpdmUpOgorICAgICAgICAqIHJ1bnRpbWUvSlNDZWxsLmNw
cDoKKyAgICAgICAgKEpTQzo6SlNDZWxsOjpkb1B1dFByb3BlcnR5U2VjdXJpdHlDaGVjayk6IERl
bGV0ZWQuCisgICAgICAgICogcnVudGltZS9KU0NlbGwuaDoKKyAgICAgICAgKiBydW50aW1lL0pT
RnVuY3Rpb24uY3BwOgorICAgICAgICAoSlNDOjpKU0Z1bmN0aW9uOjpwdXQpOgorICAgICAgICAq
IHJ1bnRpbWUvSlNGdW5jdGlvbi5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNHZW5lcmljVHlwZWRB
cnJheVZpZXcuaDoKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsTGV4aWNhbEVudmlyb25tZW50
Lmg6CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHA6CisgICAgICAgIChKU0M6
OkpTR2xvYmFsT2JqZWN0OjpwdXQpOgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3Qu
aDoKKyAgICAgICAgKiBydW50aW1lL0pTTGV4aWNhbEVudmlyb25tZW50Lmg6CisgICAgICAgICog
cnVudGltZS9KU01vZHVsZUVudmlyb25tZW50Lmg6CisgICAgICAgICogcnVudGltZS9KU01vZHVs
ZU5hbWVzcGFjZU9iamVjdC5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNPYmplY3QuY3BwOgorICAg
ICAgICAoSlNDOjpKU09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90KToKKyAgICAgICAgKEpTQzo6
b3JkaW5hcnlTZXRTbG93KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1dCk6CisgICAgICAg
IChKU0M6OkpTT2JqZWN0OjpwdXRJbmxpbmVTbG93KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6
OmRlZmluZVByb3BlcnR5T25SZWNlaXZlcik6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpkZWZp
bmVQcm9wZXJ0eU9uUmVjZWl2ZXJTbG93KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmRvUHV0
UHJvcGVydHlTZWN1cml0eUNoZWNrKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6
OnByb3RvdHlwZUNoYWluTWF5SW50ZXJjZXB0U3RvcmVUbyk6IERlbGV0ZWQuCisgICAgICAgICog
cnVudGltZS9KU09iamVjdC5oOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cHV0QnlJbmRleElu
bGluZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3QpOgorICAg
ICAgICAoSlNDOjpKU09iamVjdDo6cHV0RGlyZWN0KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6
OmRvUHV0UHJvcGVydHlTZWN1cml0eUNoZWNrKTogRGVsZXRlZC4KKyAgICAgICAgKiBydW50aW1l
L0pTT2JqZWN0SW5saW5lcy5oOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Y2FuUGVyZm9ybUZh
c3RQdXRJbmxpbmVFeGNsdWRpbmdQcm90byk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpwdXRJ
bmxpbmVGb3JKU09iamVjdCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpwdXRJbmxpbmVGYXN0
KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1dERpcmVjdEludGVybmFsKToKKyAgICAgICAg
KiBydW50aW1lL0pTUHJveHkuaDoKKyAgICAgICAgKiBydW50aW1lL0pTVHlwZUluZm8uaDoKKyAg
ICAgICAgKEpTQzo6VHlwZUluZm86Omhhc1N0YXRpY1Byb3BlcnR5VGFibGUgY29uc3QpOgorICAg
ICAgICAoSlNDOjpUeXBlSW5mbzo6b3ZlcnJpZGVzUHV0IGNvbnN0KToKKyAgICAgICAgKEpTQzo6
VHlwZUluZm86OmdldE93blByb3BlcnR5U2xvdE1heUJlV3JvbmdBYm91dERvbnRFbnVtIGNvbnN0
KToKKyAgICAgICAgKEpTQzo6VHlwZUluZm86Omhhc1B1dFByb3BlcnR5U2VjdXJpdHlDaGVjayBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9Mb29rdXAuaDoKKyAgICAgICAgKEpT
Qzo6cHV0RW50cnkpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpsb29rdXBQdXQpOiBEZWxldGVk
LgorICAgICAgICAqIHJ1bnRpbWUvUHJvcGVydHlTbG90Lmg6CisgICAgICAgICogcnVudGltZS9Q
cm94eU9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OlByb3h5T2JqZWN0OjpwdXQpOgorICAgICAg
ICAqIHJ1bnRpbWUvUHJveHlPYmplY3QuaDoKKyAgICAgICAgKiBydW50aW1lL1B1dFByb3BlcnR5
U2xvdC5oOgorICAgICAgICAoSlNDOjpQdXRQcm9wZXJ0eVNsb3Q6OmlzVGFpbnRlZEJ5T3BhcXVl
T2JqZWN0IGNvbnN0KToKKyAgICAgICAgKEpTQzo6UHV0UHJvcGVydHlTbG90OjpzZXRJc1RhaW50
ZWRCeU9wYXF1ZU9iamVjdCk6CisgICAgICAgICogcnVudGltZS9SZWZsZWN0T2JqZWN0LmNwcDoK
KyAgICAgICAgKEpTQzo6SlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKToKKyAgICAgICAgKiBydW50
aW1lL1JlZ0V4cE9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OlJlZ0V4cE9iamVjdDo6cHV0KToK
KyAgICAgICAgKiBydW50aW1lL1JlZ0V4cE9iamVjdC5oOgorICAgICAgICAqIHJ1bnRpbWUvU3Ry
aW5nT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6U3RyaW5nT2JqZWN0OjpwdXQpOgorICAgICAg
ICAqIHJ1bnRpbWUvU3RyaW5nT2JqZWN0Lmg6CisgICAgICAgICogcnVudGltZS9TdHJpbmdQcm90
b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpTdHJpbmdQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9u
KToKKyAgICAgICAgKEpTQzo6U3RyaW5nUHJvdG90eXBlOjpjcmVhdGUpOgorICAgICAgICAqIHJ1
bnRpbWUvU3RyaW5nUHJvdG90eXBlLmg6CisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmUuY3Bw
OgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnZhbGlkYXRlRmxhZ3MpOgorICAgICAgICAqIHRv
b2xzL0pTRG9sbGFyVk0uY3BwOgorCiAyMDIxLTA0LTA4ICBLaGVtIFJhaiAgPHJhai5raGVtQGdt
YWlsLmNvbT4KIAogICAgICAgICBbV1BFXSBCdWlsZCBmaXhlcyBmb3IgbXVzbCBDIGxpYnJhcnkg
b24gTGludXgKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVj
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09i
amVjdC5oCShyZXZpc2lvbiAyNzU3ODcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pT
Q2FsbGJhY2tPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMTI5LDcgKzEyOSw3IEBAIHRlbXBs
YXRlIDxjbGFzcyBQYXJlbnQ+CiBjbGFzcyBKU0NhbGxiYWNrT2JqZWN0IGZpbmFsIDogcHVibGlj
IFBhcmVudCB7CiBwdWJsaWM6CiAgICAgdXNpbmcgQmFzZSA9IFBhcmVudDsKLSAgICBzdGF0aWMg
Y29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3Mg
fCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNHZXRPd25TcGVjaWFsUHJv
cGVydHlOYW1lcyB8IE92ZXJyaWRlc0dldENhbGxEYXRhIHwgSW50ZXJjZXB0c0dldE93blByb3Bl
cnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8IEltcGxlbWVudHNIYXNJbnN0
YW5jZSB8IFByb2hpYml0c1Byb3BlcnR5Q2FjaGluZyB8IEdldE93blByb3BlcnR5U2xvdE1heUJl
V3JvbmdBYm91dERvbnRFbnVtOworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0
dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5
U2xvdCB8IE92ZXJyaWRlc0dldE93blNwZWNpYWxQcm9wZXJ0eU5hbWVzIHwgT3ZlcnJpZGVzR2V0
Q2FsbERhdGEgfCBPdmVycmlkZXNQdXQgfCBJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJ
bmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgSW1wbGVtZW50c0hhc0luc3RhbmNlIHwgUHJv
aGliaXRzUHJvcGVydHlDYWNoaW5nIHwgR2V0T3duUHJvcGVydHlTbG90TWF5QmVXcm9uZ0Fib3V0
RG9udEVudW07CiAgICAgc3RhdGljX2Fzc2VydCghKFN0cnVjdHVyZUZsYWdzICYgSW1wbGVtZW50
c0RlZmF1bHRIYXNJbnN0YW5jZSksICJ1c2luZyBjdXN0b21IYXNJbnN0YW5jZSIpOwogCiAgICAg
fkpTQ2FsbGJhY2tPYmplY3QoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlND
YWxsYmFja09iamVjdEZ1bmN0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdEZ1bmN0aW9ucy5oCShyZXZpc2lvbiAyNzU3ODcpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3RGdW5jdGlvbnMuaAko
d29ya2luZyBjb3B5KQpAQCAtMjYxLDYgKzI2MSw5IEBAIGJvb2wgSlNDYWxsYmFja09iamVjdDxQ
YXJlbnQ+OjpwdXQoSlNDZWwKICAgICBKU09iamVjdFJlZiB0aGlzUmVmID0gdG9SZWYoanNDYXN0
PEpTT2JqZWN0Kj4odGhpc09iamVjdCkpOwogICAgIFJlZlB0cjxPcGFxdWVKU1N0cmluZz4gcHJv
cGVydHlOYW1lUmVmOwogICAgIEpTVmFsdWVSZWYgdmFsdWVSZWYgPSB0b1JlZihnbG9iYWxPYmpl
Y3QsIHZhbHVlKTsKKworICAgIGlmIChVTkxJS0VMWShpc1RoaXNWYWx1ZUFsdGVyZWQoc2xvdCwg
dGhpc09iamVjdCkpKQorICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIFBhcmVudDo6
cHV0KHRoaXNPYmplY3QsIGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCkp
OwogICAgIAogICAgIGlmIChTdHJpbmdJbXBsKiBuYW1lID0gcHJvcGVydHlOYW1lLnVpZCgpKSB7
CiAgICAgICAgIGZvciAoSlNDbGFzc1JlZiBqc0NsYXNzID0gdGhpc09iamVjdC0+Y2xhc3NSZWYo
KTsganNDbGFzczsganNDbGFzcyA9IGpzQ2xhc3MtPnBhcmVudENsYXNzKSB7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL3Rlc3RhcGlTY3JpcHRzL3Rlc3RhcGkuanMKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy90ZXN0YXBpU2NyaXB0
cy90ZXN0YXBpLmpzCShyZXZpc2lvbiAyNzU3ODcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
QVBJL3Rlc3RzL3Rlc3RhcGlTY3JpcHRzL3Rlc3RhcGkuanMJKHdvcmtpbmcgY29weSkKQEAgLTE5
OCw2ICsxOTgsMjYgQEAgc2hvdWxkQmUoIk15T2JqZWN0Lm51bGxHZXRTZXQiLCAxKTsKIHNob3Vs
ZFRocm93KCJNeU9iamVjdC5udWxsQ2FsbCgpIik7CiBzaG91bGRUaHJvdygiTXlPYmplY3QuaGFz
UHJvcGVydHlMaWUiKTsKIAordmFyIE15T2JqZWN0SGVpciA9IE9iamVjdC5jcmVhdGUoTXlPYmpl
Y3QpOworTXlPYmplY3RIZWlyLnRocm93T25TZXQgPSAyMjsKK3ZhciBNeU9iamVjdEhlaXJUaHJv
d09uU2V0RGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTXlPYmpl
Y3RIZWlyLCAidGhyb3dPblNldCIpOworc2hvdWxkQmUoInR5cGVvZiBNeU9iamVjdEhlaXJUaHJv
d09uU2V0RGVzY3JpcHRvciIsICJvYmplY3QiKTsKK3Nob3VsZEJlKCJNeU9iamVjdEhlaXJUaHJv
d09uU2V0RGVzY3JpcHRvci52YWx1ZSIsIDIyKTsKK3Nob3VsZEJlKCJNeU9iamVjdEhlaXJUaHJv
d09uU2V0RGVzY3JpcHRvci53cml0YWJsZSIsIHRydWUpOworc2hvdWxkQmUoIk15T2JqZWN0SGVp
clRocm93T25TZXREZXNjcmlwdG9yLmVudW1lcmFibGUiLCB0cnVlKTsKK3Nob3VsZEJlKCJNeU9i
amVjdEhlaXJUaHJvd09uU2V0RGVzY3JpcHRvci5jb25maWd1cmFibGUiLCB0cnVlKTsKK3Nob3Vs
ZFRocm93KCJNeU9iamVjdC50aHJvd09uU2V0ID0gMjIiKTsKKwordmFyIGdsb2JhbE9iamVjdEhl
aXIgPSBPYmplY3QuY3JlYXRlKHRoaXMpOworZ2xvYmFsT2JqZWN0SGVpci5nbG9iYWxTdGF0aWNW
YWx1ZTIgPSAzMzsKK3ZhciBnbG9iYWxPYmplY3RIZWlyR2xvYmFsU3RhdGljVmFsdWUyRGVzY3Jp
cHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsT2JqZWN0SGVpciwg
Imdsb2JhbFN0YXRpY1ZhbHVlMiIpOworc2hvdWxkQmUoInR5cGVvZiBnbG9iYWxPYmplY3RIZWly
R2xvYmFsU3RhdGljVmFsdWUyRGVzY3JpcHRvciIsICJvYmplY3QiKTsKK3Nob3VsZEJlKCJnbG9i
YWxPYmplY3RIZWlyR2xvYmFsU3RhdGljVmFsdWUyRGVzY3JpcHRvci52YWx1ZSIsIDMzKTsKK3No
b3VsZEJlKCJnbG9iYWxPYmplY3RIZWlyR2xvYmFsU3RhdGljVmFsdWUyRGVzY3JpcHRvci53cml0
YWJsZSIsIHRydWUpOworc2hvdWxkQmUoImdsb2JhbE9iamVjdEhlaXJHbG9iYWxTdGF0aWNWYWx1
ZTJEZXNjcmlwdG9yLmVudW1lcmFibGUiLCB0cnVlKTsKK3Nob3VsZEJlKCJnbG9iYWxPYmplY3RI
ZWlyR2xvYmFsU3RhdGljVmFsdWUyRGVzY3JpcHRvci5jb25maWd1cmFibGUiLCB0cnVlKTsKK3No
b3VsZEJlKCJ0aGlzLmdsb2JhbFN0YXRpY1ZhbHVlMiIsIDMpOworCiBkZXJpdmVkID0gbmV3IERl
cml2ZWQoKTsKIAogc2hvdWxkQmUoImRlcml2ZWQgaW5zdGFuY2VvZiBEZXJpdmVkIiwgdHJ1ZSk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXJTY29wZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlclNjb3Bl
LmgJKHJldmlzaW9uIDI3NTc4NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9E
ZWJ1Z2dlclNjb3BlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDcgKzM2LDcgQEAgY2xhc3MgSlNT
Y29wZTsKIGNsYXNzIERlYnVnZ2VyU2NvcGUgZmluYWwgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVj
dCB7CiBwdWJsaWM6CiAgICAgdXNpbmcgQmFzZSA9IEpTTm9uRmluYWxPYmplY3Q7Ci0gICAgc3Rh
dGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZs
YWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVy
dHlOYW1lczsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0g
QmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVy
cmlkZXNHZXRPd25Qcm9wZXJ0eU5hbWVzIHwgT3ZlcnJpZGVzUHV0OwogCiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+CiAgICAgc3RhdGljIElzb1N1
YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9DbGFzc0luZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9DbGFzc0luZm8uaAkocmV2aXNpb24gMjc1Nzg3KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQ2xhc3NJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTY4LDkgKzY4LDYg
QEAgc3RydWN0IE1ldGhvZFRhYmxlIHsKICAgICB1c2luZyBHZXRPd25Qcm9wZXJ0eVNsb3RCeUlu
ZGV4RnVuY3Rpb25QdHIgPSBib29sICgqKShKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgdW5z
aWduZWQsIFByb3BlcnR5U2xvdCYpOwogICAgIEdldE93blByb3BlcnR5U2xvdEJ5SW5kZXhGdW5j
dGlvblB0ciBNRVRIT0RfVEFCTEVfRU5UUlkoZ2V0T3duUHJvcGVydHlTbG90QnlJbmRleCk7CiAK
LSAgICB1c2luZyBEb1B1dFByb3BlcnR5U2VjdXJpdHlDaGVja0Z1bmN0aW9uUHRyID0gdm9pZCAo
KikoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwgUHV0UHJvcGVydHlT
bG90Jik7Ci0gICAgRG9QdXRQcm9wZXJ0eVNlY3VyaXR5Q2hlY2tGdW5jdGlvblB0ciBNRVRIT0Rf
VEFCTEVfRU5UUlkoZG9QdXRQcm9wZXJ0eVNlY3VyaXR5Q2hlY2spOwotCiAgICAgdXNpbmcgVG9U
aGlzRnVuY3Rpb25QdHIgPSBKU1ZhbHVlICgqKShKU0NlbGwqLCBKU0dsb2JhbE9iamVjdCosIEVD
TUFNb2RlKTsKICAgICBUb1RoaXNGdW5jdGlvblB0ciBNRVRIT0RfVEFCTEVfRU5UUlkodG9UaGlz
KTsKIApAQCAtMTY0LDcgKzE2MSw2IEBAIHN0cnVjdCBNZXRob2RUYWJsZSB7CiAgICAgICAgICZD
bGFzc05hbWU6OmRlbGV0ZVByb3BlcnR5QnlJbmRleCwgXAogICAgICAgICAmQ2xhc3NOYW1lOjpn
ZXRPd25Qcm9wZXJ0eVNsb3QsIFwKICAgICAgICAgJkNsYXNzTmFtZTo6Z2V0T3duUHJvcGVydHlT
bG90QnlJbmRleCwgXAotICAgICAgICAmQ2xhc3NOYW1lOjpkb1B1dFByb3BlcnR5U2VjdXJpdHlD
aGVjaywgXAogICAgICAgICAmQ2xhc3NOYW1lOjp0b1RoaXMsIFwKICAgICAgICAgJkNsYXNzTmFt
ZTo6ZGVmYXVsdFZhbHVlLCBcCiAgICAgICAgICZDbGFzc05hbWU6OmdldE93blByb3BlcnR5TmFt
ZXMsIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Nsb25lZEFyZ3VtZW50
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Nsb25lZEFy
Z3VtZW50cy5oCShyZXZpc2lvbiAyNzU3ODcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9DbG9uZWRBcmd1bWVudHMuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsNyArNDAsNyBAQCBu
YW1lc3BhY2UgSlNDIHsKIGNsYXNzIENsb25lZEFyZ3VtZW50cyBmaW5hbCA6IHB1YmxpYyBKU05v
bkZpbmFsT2JqZWN0IHsKIHB1YmxpYzoKICAgICB1c2luZyBCYXNlID0gSlNOb25GaW5hbE9iamVj
dDsKLSAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6
U3RydWN0dXJlRmxhZ3MgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNH
ZXRPd25TcGVjaWFsUHJvcGVydHlOYW1lczsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVk
IFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBPdmVycmlkZXNHZXRPd25Q
cm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNHZXRPd25TcGVjaWFsUHJvcGVydHlOYW1lcyB8IE92ZXJy
aWRlc1B1dDsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2Vz
cyBtb2RlPgogICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ3VzdG9tR2V0dGVyU2V0dGVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DdXN0b21HZXR0ZXJT
ZXR0ZXIuY3BwCShyZXZpc2lvbiAyNzU3ODcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9DdXN0b21HZXR0ZXJTZXR0ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwyOCArMjYs
MTAgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJDdXN0b21HZXR0ZXJTZXR0ZXIu
aCIKIAotI2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgiCi0jaW5jbHVkZSA8d3RmL0Fzc2Vy
dGlvbnMuaD4KLQogbmFtZXNwYWNlIEpTQyB7CiAKIFNUQVRJQ19BU1NFUlRfSVNfVFJJVklBTExZ
X0RFU1RSVUNUSUJMRShDdXN0b21HZXR0ZXJTZXR0ZXIpOwogCiBjb25zdCBDbGFzc0luZm8gQ3Vz
dG9tR2V0dGVyU2V0dGVyOjpzX2luZm8gPSB7ICJDdXN0b21HZXR0ZXJTZXR0ZXIiLCBudWxscHRy
LCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEN1c3RvbUdldHRlclNldHRl
cikgfTsKIAotVHJpU3RhdGUgY2FsbEN1c3RvbVNldHRlcihKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBDdXN0b21HZXR0ZXJTZXR0ZXI6OkN1c3RvbVNldHRlciBzZXR0ZXIsIGJvb2wgaXNB
Y2Nlc3NvciwgSlNPYmplY3QqIHNsb3RCYXNlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgSlNWYWx1ZSB2
YWx1ZSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKLXsKLSAgICBpZiAoaXNBY2Nlc3Nvcikg
ewotICAgICAgICBpZiAoIXNldHRlcikKLSAgICAgICAgICAgIHJldHVybiBUcmlTdGF0ZTo6RmFs
c2U7Ci0gICAgICAgIHNldHRlcihnbG9iYWxPYmplY3QsIEpTVmFsdWU6OmVuY29kZSh0aGlzVmFs
dWUpLCBKU1ZhbHVlOjplbmNvZGUodmFsdWUpLCBwcm9wZXJ0eU5hbWUpOwotICAgICAgICAvLyBB
bHdheXMgcmV0dXJuIHRydWUgaWYgdGhlcmUgaXMgYSBzZXR0ZXIgYW5kIGl0IGlzIG9ic2VydmVk
IGFzIGFuIGFjY2Vzc29yIHRvIHVzZXJzLgotICAgICAgICByZXR1cm4gVHJpU3RhdGU6OlRydWU7
Ci0gICAgfQotCi0gICAgaWYgKCFzZXR0ZXIpCi0gICAgICAgIHJldHVybiBUcmlTdGF0ZTo6SW5k
ZXRlcm1pbmF0ZTsKLSAgICByZXR1cm4gdHJpU3RhdGUoc2V0dGVyKGdsb2JhbE9iamVjdCwgSlNW
YWx1ZTo6ZW5jb2RlKHNsb3RCYXNlKSwgSlNWYWx1ZTo6ZW5jb2RlKHZhbHVlKSwgcHJvcGVydHlO
YW1lKSk7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQ3VzdG9tR2V0dGVyU2V0dGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQ3VzdG9tR2V0dGVyU2V0dGVyLmgJKHJldmlzaW9uIDI3NTc4
NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0N1c3RvbUdldHRlclNldHRlci5o
CSh3b3JraW5nIGNvcHkpCkBAIC03Niw2ICs3Niw0IEBAIHByaXZhdGU6CiAgICAgQ3VzdG9tU2V0
dGVyIG1fc2V0dGVyOwogfTsKIAotSlNfRVhQT1JUX1BSSVZBVEUgVHJpU3RhdGUgY2FsbEN1c3Rv
bVNldHRlcihKU0dsb2JhbE9iamVjdCosIEN1c3RvbUdldHRlclNldHRlcjo6Q3VzdG9tU2V0dGVy
LCBib29sIGlzQWNjZXNzb3IsIEpTT2JqZWN0KiBzbG90QmFzZSwgSlNWYWx1ZSB0aGlzVmFsdWUs
IEpTVmFsdWUsIFByb3BlcnR5TmFtZSk7Ci0KIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JDb25zdHJ1Y3Rvci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9yQ29uc3RydWN0b3IuaAkocmV2
aXNpb24gMjc1Nzg3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JDb25z
dHJ1Y3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBAIGNsYXNzIEdldHRlclNl
dHRlcjsKIGNsYXNzIEVycm9yQ29uc3RydWN0b3IgZmluYWwgOiBwdWJsaWMgSW50ZXJuYWxGdW5j
dGlvbiB7CiBwdWJsaWM6CiAgICAgdXNpbmcgQmFzZSA9IEludGVybmFsRnVuY3Rpb247CisgICAg
c3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVy
ZUZsYWdzIHwgT3ZlcnJpZGVzUHV0OwogCiAgICAgc3RhdGljIEVycm9yQ29uc3RydWN0b3IqIGNy
ZWF0ZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBFcnJvclByb3RvdHlwZSogZXJyb3JQ
cm90b3R5cGUsIEdldHRlclNldHRlciopCiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvRXJyb3JJbnN0YW5jZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0Vycm9ySW5zdGFuY2UuaAkocmV2aXNpb24gMjc1Nzg3KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JJbnN0YW5jZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zMCw3ICszMCw3IEBAIG5hbWVzcGFjZSBKU0MgewogY2xhc3MgRXJyb3JJbnN0YW5jZSA6
IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKIHB1YmxpYzoKICAgICB1c2luZyBCYXNlID0gSlNO
b25GaW5hbE9iamVjdDsKLSAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZs
YWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3Qg
fCBPdmVycmlkZXNHZXRPd25TcGVjaWFsUHJvcGVydHlOYW1lczsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBPdmVy
cmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNHZXRPd25TcGVjaWFsUHJvcGVydHlO
YW1lcyB8IE92ZXJyaWRlc1B1dDsKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNEZXN0
cnVjdGlvbiA9IHRydWU7CiAKICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCogY2VsbCkK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNBcmd1bWVudHMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljQXJndW1l
bnRzLmgJKHJldmlzaW9uIDI3NTc4NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0dlbmVyaWNBcmd1bWVudHMuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNyBAQCB0ZW1w
bGF0ZTx0eXBlbmFtZSBUeXBlPgogY2xhc3MgR2VuZXJpY0FyZ3VtZW50cyA6IHB1YmxpYyBKU05v
bkZpbmFsT2JqZWN0IHsKIHB1YmxpYzoKICAgICB0eXBlZGVmIEpTTm9uRmluYWxPYmplY3QgQmFz
ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6
U3RydWN0dXJlRmxhZ3MgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNH
ZXRPd25Qcm9wZXJ0eU5hbWVzIHwgSW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhF
dmVuV2hlbkxlbmd0aElzTm90WmVybzsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0
cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBPdmVycmlkZXNHZXRPd25Qcm9w
ZXJ0eVNsb3QgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eU5hbWVzIHwgT3ZlcnJpZGVzUHV0IHwg
SW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVy
bzsKIAogcHJvdGVjdGVkOgogICAgIEdlbmVyaWNBcmd1bWVudHMoVk0mIHZtLCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNB
cmd1bWVudHNJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvR2VuZXJpY0FyZ3VtZW50c0lubGluZXMuaAkocmV2aXNpb24gMjc1Nzg3KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50c0lubGluZXMuaAkod29y
a2luZyBjb3B5KQpAQCAtMTM0LDggKzEzNCw4IEBAIGJvb2wgR2VuZXJpY0FyZ3VtZW50czxUeXBl
Pjo6cHV0KEpTQ2VsbCoKIAogICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8j
c2VjLWFyZ3VtZW50cy1leG90aWMtb2JqZWN0cy1zZXQtcC12LXJlY2VpdmVyCiAgICAgLy8gRmFs
bCBiYWNrIHRvIHRoZSBPcmRpbmFyeVNldCB3aGVuIHRoZSByZWNlaXZlciBpcyBhbHRlcmVkIGZy
b20gdGhlIHRoaXNPYmplY3QuCi0gICAgaWYgKFVOTElLRUxZKGlzVGhpc1ZhbHVlQWx0ZXJlZChz
bG90LCB0aGlzT2JqZWN0KSkpCi0gICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgb3Jk
aW5hcnlTZXRTbG93KGdsb2JhbE9iamVjdCwgdGhpc09iamVjdCwgaWRlbnQsIHZhbHVlLCBzbG90
LnRoaXNWYWx1ZSgpLCBzbG90LmlzU3RyaWN0TW9kZSgpKSk7CisgICAgaWYgKFVOTElLRUxZKHNs
b3QudGhpc1ZhbHVlKCkgIT0gdGhpc09iamVjdCkpCisgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVS
TihzY29wZSwgQmFzZTo6cHV0KHRoaXNPYmplY3QsIGdsb2JhbE9iamVjdCwgaWRlbnQsIHZhbHVl
LCBzbG90KSk7CiAgICAgCiAgICAgT3B0aW9uYWw8dWludDMyX3Q+IGluZGV4ID0gcGFyc2VJbmRl
eChpZGVudCk7CiAgICAgaWYgKGluZGV4ICYmIHRoaXNPYmplY3QtPmlzTWFwcGVkQXJndW1lbnQo
aW5kZXgudmFsdWUoKSkpIHsKQEAgLTE0Myw5ICsxNDMsNyBAQCBib29sIEdlbmVyaWNBcmd1bWVu
dHM8VHlwZT46OnB1dChKU0NlbGwqCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAg
IGF1dG8gcmVzdWx0ID0gQmFzZTo6cHV0KHRoaXNPYmplY3QsIGdsb2JhbE9iamVjdCwgaWRlbnQs
IHZhbHVlLCBzbG90KTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBmYWxzZSk7Ci0g
ICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCByZXN1bHQpOworICAgIFJFTEVBU0VfQU5EX1JF
VFVSTihzY29wZSwgQmFzZTo6cHV0KHRoaXNPYmplY3QsIGdsb2JhbE9iamVjdCwgaWRlbnQsIHZh
bHVlLCBzbG90KSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFR5cGU+CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9HZXR0ZXJTZXR0ZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZXR0ZXJTZXR0ZXIuaAkocmV2aXNpb24gMjc1Nzg3
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2V0dGVyU2V0dGVyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTU0LDcgKzU0LDcgQEAgcHJpdmF0ZToKIAogcHVibGljOgogCi0gICAgc3Rh
dGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZs
YWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgU3RydWN0dXJlSXNJbW1vcnRhbDsK
KyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3Ry
dWN0dXJlRmxhZ3MgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNQdXQg
fCBTdHJ1Y3R1cmVJc0ltbW9ydGFsOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUs
IFN1YnNwYWNlQWNjZXNzPgogICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0m
IHZtKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAJKHJl
dmlzaW9uIDI3NTc4NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXku
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzgsMTAgKzIzOCw2IEBAIGJvb2wgSlNBcnJheTo6cHV0
KEpTQ2VsbCogY2VsbCwgSlNHbG9iYWwKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CiAKICAgICBKU0FycmF5KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQXJyYXkqPihj
ZWxsKTsKLQotICAgIGlmIChVTkxJS0VMWShpc1RoaXNWYWx1ZUFsdGVyZWQoc2xvdCwgdGhpc09i
amVjdCkpKQotICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIG9yZGluYXJ5U2V0U2xv
dyhnbG9iYWxPYmplY3QsIHRoaXNPYmplY3QsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QudGhp
c1ZhbHVlKCksIHNsb3QuaXNTdHJpY3RNb2RlKCkpKTsKLQogICAgIHRoaXNPYmplY3QtPmVuc3Vy
ZVdyaXRhYmxlKHZtKTsKIAogICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gdm0ucHJvcGVydHlOYW1l
cy0+bGVuZ3RoKSB7CkBAIC0yNTEsNiArMjQ3LDkgQEAgYm9vbCBKU0FycmF5OjpwdXQoSlNDZWxs
KiBjZWxsLCBKU0dsb2JhbAogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAK
KyAgICAgICAgaWYgKFVOTElLRUxZKHNsb3QudGhpc1ZhbHVlKCkgIT0gdGhpc09iamVjdCkpCisg
ICAgICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTT2JqZWN0OjpkZWZpbmVQcm9w
ZXJ0eU9uUmVjZWl2ZXIoZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KSk7
CisKICAgICAgICAgdW5zaWduZWQgbmV3TGVuZ3RoID0gdmFsdWUudG9VSW50MzIoZ2xvYmFsT2Jq
ZWN0KTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZmFsc2UpOwogICAgICAg
ICBkb3VibGUgdmFsdWVBc051bWJlciA9IHZhbHVlLnRvTnVtYmVyKGdsb2JhbE9iamVjdCk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5oCShyZXZpc2lvbiAyNzU3
ODcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQwLDcgKzQwLDcgQEAgY2xhc3MgSlNBcnJheSA6IHB1YmxpYyBKU05vbkZpbmFs
T2JqZWN0IAogCiBwdWJsaWM6CiAgICAgdHlwZWRlZiBKU05vbkZpbmFsT2JqZWN0IEJhc2U7Ci0g
ICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVj
dHVyZUZsYWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzR2V0T3du
U3BlY2lhbFByb3BlcnR5TmFtZXM7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1
Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVy
dHlTbG90IHwgT3ZlcnJpZGVzR2V0T3duU3BlY2lhbFByb3BlcnR5TmFtZXMgfCBPdmVycmlkZXNQ
dXQ7CiAKICAgICBzdGF0aWMgc2l6ZV90IGFsbG9jYXRpb25TaXplKENoZWNrZWQ8c2l6ZV90PiBp
bmxpbmVDYXBhY2l0eSkKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0FycmF5QnVmZmVyVmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuY3BwCShyZXZpc2lvbiAyNzU3ODcpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE3MiwxOCArMTcyLDYgQEAgdm9pZCBKU0FycmF5QnVmZmVyVmlldzo6dmlz
aXRDaGlsZHJlbkltcAogCiBERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNBcnJheUJ1ZmZlclZpZXcp
OwogCi1ib29sIEpTQXJyYXlCdWZmZXJWaWV3OjpwdXQoCi0gICAgSlNDZWxsKiBjZWxsLCBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1Zh
bHVlIHZhbHVlLAotICAgIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKLXsKLSAgICBKU0FycmF5QnVm
ZmVyVmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0FycmF5QnVmZmVyVmlldyo+KGNlbGwpOwot
Ci0gICAgaWYgKFVOTElLRUxZKGlzVGhpc1ZhbHVlQWx0ZXJlZChzbG90LCB0aGlzT2JqZWN0KSkp
Ci0gICAgICAgIHJldHVybiBvcmRpbmFyeVNldFNsb3coZ2xvYmFsT2JqZWN0LCB0aGlzT2JqZWN0
LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90LnRoaXNWYWx1ZSgpLCBzbG90LmlzU3RyaWN0TW9k
ZSgpKTsKLSAgICAKLSAgICByZXR1cm4gQmFzZTo6cHV0KHRoaXNPYmplY3QsIGdsb2JhbE9iamVj
dCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCk7Ci19Ci0KIEFycmF5QnVmZmVyKiBKU0FycmF5
QnVmZmVyVmlldzo6dW5zaGFyZWRCdWZmZXIoKQogewogICAgIEFycmF5QnVmZmVyKiByZXN1bHQg
PSBwb3NzaWJseVNoYXJlZEJ1ZmZlcigpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5oCShyZXZpc2lvbiAyNzU3ODcpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xNjksOCArMTY5LDYgQEAgcHJvdGVjdGVkOgogICAgIAogICAgIEpTX0VYUE9S
VF9QUklWQVRFIEpTQXJyYXlCdWZmZXJWaWV3KFZNJiwgQ29uc3RydWN0aW9uQ29udGV4dCYpOwog
ICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKLSAgICAKLSAg
ICBzdGF0aWMgYm9vbCBwdXQoSlNDZWxsKiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUs
IEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOwogCiAgICAgREVDTEFSRV9WSVNJVF9DSElMRFJF
TjsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0pTVmFsdWUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0pTVmFs
dWUuY3BwCShyZXZpc2lvbiAyNzU3ODcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0NKU1ZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjEyLDcgKzIxMiw3IEBAIEpTT2Jq
ZWN0KiBKU1ZhbHVlOjpzeW50aGVzaXplUHJvdG90eXBlKEoKICAgICByZXR1cm4gbnVsbHB0cjsK
IH0KIAotLy8gRUNNQSA4LjcuMgorLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vcmRp
bmFyeXNldAogYm9vbCBKU1ZhbHVlOjpwdXRUb1ByaW1pdGl2ZShKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBQdXRQ
cm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwpA
QCAtMjI2LDY0ICsyMjYsNyBAQCBib29sIEpTVmFsdWU6OnB1dFRvUHJpbWl0aXZlKEpTR2xvYmFs
T2JqCiAgICAgRVhDRVBUSU9OX0FTU0VSVCghIXNjb3BlLmV4Y2VwdGlvbigpID09ICFvYmopOwog
ICAgIGlmIChVTkxJS0VMWSghb2JqKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIEpTVmFs
dWUgcHJvdG90eXBlOwotICAgIGlmIChwcm9wZXJ0eU5hbWUgIT0gdm0ucHJvcGVydHlOYW1lcy0+
dW5kZXJzY29yZVByb3RvKSB7Ci0gICAgICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICAgICAgICBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG9iai0+c3RydWN0dXJlKHZtKTsKLSAgICAgICAgICAgIGlm
IChzdHJ1Y3R1cmUtPmhhc1JlYWRPbmx5T3JHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzRXhjbHVkaW5n
UHJvdG8oKSB8fCBzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkuaGFzUHV0UHJvcGVydHlTZWN1cml0eUNo
ZWNrKCkpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBpZiAob2JqLT50eXBl
KCkgPT0gUHJveHlPYmplY3RUeXBlKSB7Ci0gICAgICAgICAgICAgICAgYXV0byogcHJveHkgPSBq
c0Nhc3Q8UHJveHlPYmplY3QqPihvYmopOwotICAgICAgICAgICAgICAgIFJFTEVBU0VfQU5EX1JF
VFVSTihzY29wZSwgcHJveHktPlByb3h5T2JqZWN0OjpwdXQocHJveHksIGdsb2JhbE9iamVjdCwg
cHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
cHJvdG90eXBlID0gb2JqLT5nZXRQcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCk7Ci0gICAgICAg
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBmYWxzZSk7Ci0KLSAgICAgICAgICAgIGlm
IChwcm90b3R5cGUuaXNOdWxsKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHR5cGVFcnJvcihn
bG9iYWxPYmplY3QsIHNjb3BlLCBzbG90LmlzU3RyaWN0TW9kZSgpLCBSZWFkb25seVByb3BlcnR5
V3JpdGVFcnJvcik7Ci0gICAgICAgICAgICBvYmogPSBhc09iamVjdChwcm90b3R5cGUpOwotICAg
ICAgICB9Ci0gICAgfQotCi0gICAgZm9yICg7IDsgb2JqID0gYXNPYmplY3QocHJvdG90eXBlKSkg
ewotICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG9iai0+c3RydWN0dXJlKHZtKTsKLSAg
ICAgICAgaWYgKFVOTElLRUxZKHN0cnVjdHVyZS0+dHlwZUluZm8oKS5oYXNQdXRQcm9wZXJ0eVNl
Y3VyaXR5Q2hlY2soKSkpIHsKLSAgICAgICAgICAgIG9iai0+bWV0aG9kVGFibGUodm0pLT5kb1B1
dFByb3BlcnR5U2VjdXJpdHlDaGVjayhvYmosIGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCBz
bG90KTsKLSAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGZhbHNlKTsKLSAg
ICAgICAgfQotICAgICAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzOwotICAgICAgICBQcm9wZXJ0eU9m
ZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldCh2bSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVz
KTsKLSAgICAgICAgaWYgKG9mZnNldCAhPSBpbnZhbGlkT2Zmc2V0KSB7Ci0gICAgICAgICAgICBp
ZiAoYXR0cmlidXRlcyAmIFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSkKLSAgICAgICAgICAg
ICAgICByZXR1cm4gdHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsIHNsb3QuaXNTdHJpY3RN
b2RlKCksIFJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9yKTsKLQotICAgICAgICAgICAgSlNWYWx1
ZSBncyA9IG9iai0+Z2V0RGlyZWN0KG9mZnNldCk7Ci0gICAgICAgICAgICBpZiAoZ3MuaXNHZXR0
ZXJTZXR0ZXIoKSkKLSAgICAgICAgICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIGNh
bGxTZXR0ZXIoZ2xvYmFsT2JqZWN0LCAqdGhpcywgZ3MsIHZhbHVlLCBzbG90LmlzU3RyaWN0TW9k
ZSgpID8gRUNNQU1vZGU6OnN0cmljdCgpIDogRUNNQU1vZGU6OnNsb3BweSgpKSk7Ci0KLSAgICAg
ICAgICAgIGlmIChncy5pc0N1c3RvbUdldHRlclNldHRlcigpKSB7Ci0gICAgICAgICAgICAgICAg
YXV0byBzZXR0ZXIgPSBqc0Nhc3Q8Q3VzdG9tR2V0dGVyU2V0dGVyKj4oZ3MuYXNDZWxsKCkpLT5z
ZXR0ZXIoKTsKLSAgICAgICAgICAgICAgICBib29sIGlzQWNjZXNzb3IgPSBhdHRyaWJ1dGVzICYg
UHJvcGVydHlBdHRyaWJ1dGU6OkN1c3RvbUFjY2Vzc29yOwotICAgICAgICAgICAgICAgIGF1dG8g
cmVzdWx0ID0gY2FsbEN1c3RvbVNldHRlcihnbG9iYWxPYmplY3QsIHNldHRlciwgaXNBY2Nlc3Nv
ciwgb2JqLCBzbG90LnRoaXNWYWx1ZSgpLCB2YWx1ZSwgcHJvcGVydHlOYW1lKTsKLSAgICAgICAg
ICAgICAgICBpZiAocmVzdWx0ICE9IFRyaVN0YXRlOjpJbmRldGVybWluYXRlKQotICAgICAgICAg
ICAgICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIHJlc3VsdCA9PSBUcmlTdGF0ZTo6
VHJ1ZSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIElmIHRoZXJlJ3MgYW4gZXhp
c3RpbmcgcHJvcGVydHkgb24gdGhlIG9iamVjdCBvciBvbmUgb2YgaXRzIAotICAgICAgICAgICAg
Ly8gcHJvdG90eXBlcyBpdCBzaG91bGQgYmUgcmVwbGFjZWQsIHNvIGJyZWFrIGhlcmUuCi0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBpZiAob2JqLT50eXBlKCkgPT0gUHJv
eHlPYmplY3RUeXBlKSB7Ci0gICAgICAgICAgICBhdXRvKiBwcm94eSA9IGpzQ2FzdDxQcm94eU9i
amVjdCo+KG9iaik7Ci0gICAgICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIHByb3h5
LT5Qcm94eU9iamVjdDo6cHV0KHByb3h5LCBnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgdmFs
dWUsIHNsb3QpKTsKLSAgICAgICAgfQotICAgICAgICBwcm90b3R5cGUgPSBvYmotPmdldFByb3Rv
dHlwZSh2bSwgZ2xvYmFsT2JqZWN0KTsKLSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgZmFsc2UpOwotICAgICAgICBpZiAocHJvdG90eXBlLmlzTnVsbCgpKQotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgfQotICAgIAotICAgIHJldHVybiB0eXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBz
Y29wZSwgc2xvdC5pc1N0cmljdE1vZGUoKSwgUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpOwor
ICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgb2JqLT5tZXRob2RUYWJsZSh2bSktPnB1dChv
YmosIGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCkpOwogfQogCiBib29s
IEpTVmFsdWU6OnB1dFRvUHJpbWl0aXZlQnlJbmRleChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxkVGhy
b3cpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5jcHAJKHJldmlz
aW9uIDI3NTc4NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTIwMSwxMSArMjAxLDYgQEAgYm9vbCBKU0NlbGw6OmdldE93blBy
b3BlcnR5U2xvdEJ5SW5kZXgoSgogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBKU0NlbGw6
OmRvUHV0UHJvcGVydHlTZWN1cml0eUNoZWNrKEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQ
cm9wZXJ0eU5hbWUsIFB1dFByb3BlcnR5U2xvdCYpCi17Ci0gICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKLX0KLQogdm9pZCBKU0NlbGw6OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmpl
Y3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZUFycmF5JiwgRG9udEVudW1Qcm9wZXJ0
aWVzTW9kZSkKIHsKICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgJKHJldmlzaW9uIDI3NTc4NykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
NTksNyArMjU5LDYgQEAgcHJvdGVjdGVkOgogICAgIHN0YXRpYyBib29sIGRlZmluZU93blByb3Bl
cnR5KEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3Bl
cnR5RGVzY3JpcHRvciYsIGJvb2wgc2hvdWxkVGhyb3cpOwogICAgIHN0YXRpYyBib29sIGdldE93
blByb3BlcnR5U2xvdChKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBQ
cm9wZXJ0eVNsb3QmKTsKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4
KEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIFByb3Bl
cnR5U2xvdCYpOwotICAgIHN0YXRpYyBOT19SRVRVUk5fRFVFX1RPX0NSQVNIIHZvaWQgZG9QdXRQ
cm9wZXJ0eVNlY3VyaXR5Q2hlY2soSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5
TmFtZSwgUHV0UHJvcGVydHlTbG90Jik7CiAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIExM
SW50T2Zmc2V0c0V4dHJhY3RvcjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTRnVuY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTRnVuY3Rpb24uY3BwCShyZXZpc2lvbiAyNzU3ODcpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTE5LDEwICs1
MTksNiBAQCBib29sIEpTRnVuY3Rpb246OnB1dChKU0NlbGwqIGNlbGwsIEpTR2xvCiAgICAgICAg
ICAgICByYXJlRGF0YS0+c2V0SGFzTW9kaWZpZWROYW1lRm9yTm9uSG9zdEZ1bmN0aW9uKCk7CiAg
ICAgfQogCi0gICAgaWYgKFVOTElLRUxZKGlzVGhpc1ZhbHVlQWx0ZXJlZChzbG90LCB0aGlzT2Jq
ZWN0KSkpCi0gICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgb3JkaW5hcnlTZXRTbG93
KGdsb2JhbE9iamVjdCwgdGhpc09iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdC50aGlz
VmFsdWUoKSwgc2xvdC5pc1N0cmljdE1vZGUoKSkpOwotCi0KICAgICBpZiAodGhpc09iamVjdC0+
aXNIb3N0T3JCdWlsdGluRnVuY3Rpb24oKSkgewogICAgICAgICBQcm9wZXJ0eVN0YXR1cyBwcm9w
ZXJ0eVR5cGUgPSB0aGlzT2JqZWN0LT5yZWlmeUxhenlQcm9wZXJ0eUZvckhvc3RPckJ1aWx0aW5J
Zk5lZWRlZCh2bSwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUpOwogICAgICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCBmYWxzZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0Z1bmN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNGdW5jdGlvbi5oCShyZXZpc2lvbiAyNzU3ODcpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTcwLDcgKzcw
LDcgQEAgcHVibGljOgogICAgIH0KICAgICAKICAgICB0eXBlZGVmIEpTQ2FsbGVlIEJhc2U7Ci0g
ICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVj
dHVyZUZsYWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzR2V0T3du
U3BlY2lhbFByb3BlcnR5TmFtZXMgfCBPdmVycmlkZXNHZXRDYWxsRGF0YTsKKyAgICBzdGF0aWMg
Y29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3Mg
fCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNHZXRPd25TcGVjaWFsUHJv
cGVydHlOYW1lcyB8IE92ZXJyaWRlc0dldENhbGxEYXRhIHwgT3ZlcnJpZGVzUHV0OwogCiAgICAg
c3RhdGljIHNpemVfdCBhbGxvY2F0aW9uU2l6ZShDaGVja2VkPHNpemVfdD4gaW5saW5lQ2FwYWNp
dHkpCiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmlj
VHlwZWRBcnJheVZpZXcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlldy5oCShyZXZpc2lvbiAyNzU3ODcpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlldy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC05OSw3ICs5OSw3IEBAIHB1YmxpYzoKICAgICB1c2luZyBFbGVtZW50VHlw
ZSA9IHR5cGVuYW1lIEFkYXB0b3I6OlR5cGU7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBUeXBlZEFy
cmF5Q29udGVudFR5cGUgY29udGVudFR5cGUgPSBBZGFwdG9yOjpjb250ZW50VHlwZTsKIAotICAg
IHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1
cmVGbGFncyB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRlc0dldE93blBy
b3BlcnR5TmFtZXMgfCBJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVu
TGVuZ3RoSXNOb3RaZXJvOworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJl
RmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xv
dCB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5TmFtZXMgfCBPdmVycmlkZXNQdXQgfCBJbnRlcmNl
cHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvOwogCiAg
ICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBlbGVtZW50U2l6ZSA9IHNpemVvZih0eXBlbmFt
ZSBBZGFwdG9yOjpUeXBlKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNHbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0dsb2JhbExleGljYWxFbnZpcm9ubWVudC5oCShyZXZpc2lvbiAy
NzU3ODcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbExleGljYWxF
bnZpcm9ubWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3ICszMyw3IEBAIGNsYXNzIEpTR2xv
YmFsTGV4aWNhbEVudmlyb25tZW50IGZpbmFsIDoKIHB1YmxpYzoKICAgICB1c2luZyBCYXNlID0g
SlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdDsKIAotICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWdu
ZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IE92ZXJyaWRlc0dldE93
blByb3BlcnR5U2xvdDsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZs
YWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3Qg
fCBPdmVycmlkZXNQdXQ7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3Bh
Y2VBY2Nlc3MgbW9kZT4KICAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2
bSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9i
amVjdC5jcHAJKHJldmlzaW9uIDI3NTc4NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ3Myw4ICsxNDczLDEy
IEBAIGJvb2wgSlNHbG9iYWxPYmplY3Q6OnB1dChKU0NlbGwqIGNlbGwsIEoKICAgICBKU0dsb2Jh
bE9iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0dsb2JhbE9iamVjdCo+KGNlbGwpOwogICAg
IEFTU0VSVCghSGVhcDo6aGVhcCh2YWx1ZSkgfHwgSGVhcDo6aGVhcCh2YWx1ZSkgPT0gSGVhcDo6
aGVhcCh0aGlzT2JqZWN0KSk7CiAKLSAgICBpZiAoVU5MSUtFTFkoaXNUaGlzVmFsdWVBbHRlcmVk
KHNsb3QsIHRoaXNPYmplY3QpKSkKLSAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBv
cmRpbmFyeVNldFNsb3coZ2xvYmFsT2JqZWN0LCB0aGlzT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHZh
bHVlLCBzbG90LnRoaXNWYWx1ZSgpLCBzbG90LmlzU3RyaWN0TW9kZSgpKSk7CisgICAgaWYgKFVO
TElLRUxZKGlzVGhpc1ZhbHVlQWx0ZXJlZChzbG90LCB0aGlzT2JqZWN0KSkpIHsKKyAgICAgICAg
U3ltYm9sVGFibGVFbnRyeTo6RmFzdCBlbnRyeSA9IHRoaXNPYmplY3QtPnN5bWJvbFRhYmxlKCkt
PmdldChwcm9wZXJ0eU5hbWUudWlkKCkpOworICAgICAgICBpZiAoIWVudHJ5LmlzTnVsbCgpICYm
IGVudHJ5LmlzUmVhZE9ubHkoKSkKKyAgICAgICAgICAgIHJldHVybiB0eXBlRXJyb3IoZ2xvYmFs
T2JqZWN0LCBzY29wZSwgc2xvdC5pc1N0cmljdE1vZGUoKSwgUmVhZG9ubHlQcm9wZXJ0eVdyaXRl
RXJyb3IpOworICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEJhc2U6OnB1dCh0aGlz
T2JqZWN0LCBnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpKTsKKyAgICB9
CiAKICAgICBib29sIHNob3VsZFRocm93UmVhZE9ubHlFcnJvciA9IHNsb3QuaXNTdHJpY3RNb2Rl
KCk7CiAgICAgYm9vbCBpZ25vcmVSZWFkT25seUVycm9ycyA9IGZhbHNlOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCShyZXZpc2lvbiAy
NzU3ODcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5o
CSh3b3JraW5nIGNvcHkpCkBAIC01OTUsNyArNTk1LDcgQEAgcHVibGljOgogICAgICAgICAKIHB1
YmxpYzoKICAgICB1c2luZyBCYXNlID0gSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdDsKLSAgICBz
dGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJl
RmxhZ3MgfCBIYXNTdGF0aWNQcm9wZXJ0eVRhYmxlIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlT
bG90IHwgSXNJbW11dGFibGVQcm90b3R5cGVFeG90aWNPYmplY3Q7CisgICAgc3RhdGljIGNvbnN0
ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSGFz
U3RhdGljUHJvcGVydHlUYWJsZSB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJy
aWRlc1B1dCB8IElzSW1tdXRhYmxlUHJvdG90eXBlRXhvdGljT2JqZWN0OwogCiAgICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOwogICAgIHRlbXBsYXRlPHR5
cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2VzcyBtb2RlPgpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNMZXhpY2FsRW52aXJvbm1lbnQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xleGljYWxFbnZpcm9ubWVudC5oCShyZXZp
c2lvbiAyNzU3ODcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xleGljYWxF
bnZpcm9ubWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCw3ICs0OCw3IEBAIHB1YmxpYzoKICAg
ICB9CiAKICAgICB1c2luZyBCYXNlID0gSlNTeW1ib2xUYWJsZU9iamVjdDsKLSAgICBzdGF0aWMg
Y29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3Mg
fCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNHZXRPd25TcGVjaWFsUHJv
cGVydHlOYW1lczsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdz
ID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBP
dmVycmlkZXNHZXRPd25TcGVjaWFsUHJvcGVydHlOYW1lcyB8IE92ZXJyaWRlc1B1dDsKIAogICAg
IFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qIHZhcmlhYmxlcygpCiAgICAgewpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVFbnZpcm9ubWVudC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlRW52aXJvbm1lbnQu
aAkocmV2aXNpb24gMjc1Nzg3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNN
b2R1bGVFbnZpcm9ubWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw3IEBAIGNsYXNz
IEpTTW9kdWxlRW52aXJvbm1lbnQgZmluYWwgOiBwdWJsaWMKICAgICBmcmllbmQgY2xhc3MgTExJ
bnRPZmZzZXRzRXh0cmFjdG9yOwogcHVibGljOgogICAgIHVzaW5nIEJhc2UgPSBKU0xleGljYWxF
bnZpcm9ubWVudDsKLSAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdz
ID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBP
dmVycmlkZXNHZXRPd25TcGVjaWFsUHJvcGVydHlOYW1lczsKKyAgICBzdGF0aWMgY29uc3RleHBy
IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBPdmVycmlk
ZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNHZXRPd25TcGVjaWFsUHJvcGVydHlOYW1l
cyB8IE92ZXJyaWRlc1B1dDsKIAogICAgIHN0YXRpYyBKU01vZHVsZUVudmlyb25tZW50KiBjcmVh
dGUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1Njb3BlKiBjdXJyZW50
U2NvcGUsIFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSwgSlNWYWx1ZSBpbml0aWFsVmFsdWUsIEFi
c3RyYWN0TW9kdWxlUmVjb3JkKiBtb2R1bGVSZWNvcmQpCiAgICAgewpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZU5hbWVzcGFjZU9iamVj
dC5oCShyZXZpc2lvbiAyNzU3ODcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U01vZHVsZU5hbWVzcGFjZU9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw3IEBA
IG5hbWVzcGFjZSBKU0MgewogY2xhc3MgSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QgZmluYWwgOiBw
dWJsaWMgSlNOb25GaW5hbE9iamVjdCB7CiBwdWJsaWM6CiAgICAgdXNpbmcgQmFzZSA9IEpTTm9u
RmluYWxPYmplY3Q7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFn
cyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwg
T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlOYW1lcyB8IEludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNs
b3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8gfCBHZXRPd25Qcm9wZXJ0eVNsb3RJc0lt
cHVyZUZvclByb3BlcnR5QWJzZW5jZSB8IElzSW1tdXRhYmxlUHJvdG90eXBlRXhvdGljT2JqZWN0
OworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpT
dHJ1Y3R1cmVGbGFncyB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRlc0dl
dE93blByb3BlcnR5TmFtZXMgfCBPdmVycmlkZXNQdXQgfCBJbnRlcmNlcHRzR2V0T3duUHJvcGVy
dHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgR2V0T3duUHJvcGVydHlTbG90
SXNJbXB1cmVGb3JQcm9wZXJ0eUFic2VuY2UgfCBJc0ltbXV0YWJsZVByb3RvdHlwZUV4b3RpY09i
amVjdDsKIAogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0Rlc3RydWN0aW9uID0gdHJ1
ZTsKICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAkocmV2aXNpb24gMjc1Nzg3KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC02NzcsMTAgKzY3Nyw2IEBAIGJvb2wgSlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdChKU09i
amUKIHsKICAgICByZXR1cm4gZ2V0T3duUHJvcGVydHlTbG90SW1wbChvYmplY3QsIGdsb2JhbE9i
amVjdCwgcHJvcGVydHlOYW1lLCBzbG90KTsKIH0KLQotdm9pZCBKU09iamVjdDo6ZG9QdXRQcm9w
ZXJ0eVNlY3VyaXR5Q2hlY2soSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFt
ZSwgUHV0UHJvcGVydHlTbG90JikKLXsKLX0KICNlbmRpZiAvLyBBU1NFUlRfRU5BQkxFRAogCiAv
LyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1vcmRpbmFyeXNldApAQCAtNzM3
LDMzICs3MzMsNyBAQCBib29sIG9yZGluYXJ5U2V0U2xvdyhKU0dsb2JhbE9iamVjdCogZ2xvCiAg
ICAgICAgIC8vIEluIE9yZGluYXJ5U2V0LCB0aGUgcmVjZWl2ZXIgbWF5IG5vdCBiZSB0aGUgc2Ft
ZSB0byB0aGUgb2JqZWN0LgogICAgICAgICAvLyBTbywgd2UgcGVyZm9ybSBbW0dldE93blByb3Bl
cnR5XV0gb250byB0aGUgcmVjZWl2ZXIgd2hpbGUgd2UgYWxyZWFkeSBwZXJmb3JtIFtbR2V0T3du
UHJvcGVydHldXSBvbnRvIHRoZSBvYmplY3QuCiAKLSAgICAgICAgLy8gOS4xLjkuMS00LWMgTGV0
IGV4aXN0aW5nRGVzY3JpcHRvciBiZSA/IFJlY2VpdmVyLltbR2V0T3duUHJvcGVydHldXShQKS4K
LSAgICAgICAgSlNPYmplY3QqIHJlY2VpdmVyT2JqZWN0ID0gYXNPYmplY3QocmVjZWl2ZXIpOwot
ICAgICAgICBQcm9wZXJ0eURlc2NyaXB0b3IgZXhpc3RpbmdEZXNjcmlwdG9yOwotICAgICAgICBi
b29sIGV4aXN0aW5nRGVzY3JpcHRvckZvdW5kID0gcmVjZWl2ZXJPYmplY3QtPmdldE93blByb3Bl
cnR5RGVzY3JpcHRvcihnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgZXhpc3RpbmdEZXNjcmlw
dG9yKTsKLSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZmFsc2UpOwotCi0gICAg
ICAgIC8vIDkuMS45LjEtNC1kIElmIGV4aXN0aW5nRGVzY3JpcHRvciBpcyBub3QgdW5kZWZpbmVk
LCB0aGVuCi0gICAgICAgIGlmIChleGlzdGluZ0Rlc2NyaXB0b3JGb3VuZCkgewotICAgICAgICAg
ICAgLy8gOS4xLjkuMS00LWQtaSBJZiBJc0FjY2Vzc29yRGVzY3JpcHRvcihleGlzdGluZ0Rlc2Ny
aXB0b3IpIGlzIHRydWUsIHJldHVybiBmYWxzZS4KLSAgICAgICAgICAgIGlmIChleGlzdGluZ0Rl
c2NyaXB0b3IuaXNBY2Nlc3NvckRlc2NyaXB0b3IoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4g
dHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsIHNob3VsZFRocm93LCBSZWFkb25seVByb3Bl
cnR5V3JpdGVFcnJvcik7Ci0KLSAgICAgICAgICAgIC8vIDkuMS45LjEtNC1kLWlpIElmIGV4aXN0
aW5nRGVzY3JpcHRvci5bW1dyaXRhYmxlXV0gaXMgZmFsc2UsIHJldHVybiBmYWxzZS4KLSAgICAg
ICAgICAgIGlmICghZXhpc3RpbmdEZXNjcmlwdG9yLndyaXRhYmxlKCkpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIHR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCBzaG91bGRUaHJvdywgUmVh
ZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpOwotCi0gICAgICAgICAgICAvLyA5LjEuOS4xLTQtZC1p
aWkgTGV0IHZhbHVlRGVzYyBiZSB0aGUgUHJvcGVydHlEZXNjcmlwdG9ye1tbVmFsdWVdXTogVn0u
Ci0gICAgICAgICAgICBQcm9wZXJ0eURlc2NyaXB0b3IgdmFsdWVEZXNjcmlwdG9yOwotICAgICAg
ICAgICAgdmFsdWVEZXNjcmlwdG9yLnNldFZhbHVlKHZhbHVlKTsKLQotICAgICAgICAgICAgLy8g
OS4xLjkuMS00LWQtaXYgUmV0dXJuID8gUmVjZWl2ZXIuW1tEZWZpbmVPd25Qcm9wZXJ0eV1dKFAs
IHZhbHVlRGVzYykuCi0gICAgICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIHJlY2Vp
dmVyT2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPmRlZmluZU93blByb3BlcnR5KHJlY2VpdmVyT2Jq
ZWN0LCBnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgdmFsdWVEZXNjcmlwdG9yLCBzaG91bGRU
aHJvdykpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gOS4xLjkuMS00LWUgRWxzZSBSZWNlaXZl
ciBkb2VzIG5vdCBjdXJyZW50bHkgaGF2ZSBhIHByb3BlcnR5IFAsCi0gICAgICAgIC8vIDkuMS45
LjEtNC1lLWkgUmV0dXJuID8gQ3JlYXRlRGF0YVByb3BlcnR5KFJlY2VpdmVyLCBQLCBWKS4KLSAg
ICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCByZWNlaXZlck9iamVjdC0+bWV0aG9kVGFi
bGUodm0pLT5kZWZpbmVPd25Qcm9wZXJ0eShyZWNlaXZlck9iamVjdCwgZ2xvYmFsT2JqZWN0LCBw
cm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvcih2YWx1ZSwgc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpOb25lKSksIHNob3VsZFRocm93KSk7CisgICAgICAgIFJF
TEVBU0VfQU5EX1JFVFVSTihzY29wZSwgSlNPYmplY3Q6OmRlZmluZVByb3BlcnR5T25SZWNlaXZl
clNsb3coZ2xvYmFsT2JqZWN0LCBhc09iamVjdChyZWNlaXZlciksIHByb3BlcnR5TmFtZSwgdmFs
dWUsIHNob3VsZFRocm93KSk7CiAgICAgfQogCiAgICAgLy8gOS4xLjkuMS01IEFzc2VydDogSXNB
Y2Nlc3NvckRlc2NyaXB0b3Iob3duRGVzYykgaXMgdHJ1ZS4KQEAgLTc4OSw3NyArNzU5LDEwMiBA
QCBib29sIG9yZGluYXJ5U2V0U2xvdyhKU0dsb2JhbE9iamVjdCogZ2xvCiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKLS8vIEVDTUEgOC42LjIuMgorLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3Nl
Yy1vcmRpbmFyeXNldAogYm9vbCBKU09iamVjdDo6cHV0KEpTQ2VsbCogY2VsbCwgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2
YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBzbG90KQogewotICAgIHJldHVybiBwdXRJbmxpbmVGb3JK
U09iamVjdChjZWxsLCBnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpOwor
ICAgIHJldHVybiBwdXRJbmxpbmVGb3JKU09iamVjdChhc09iamVjdChjZWxsKSwgZ2xvYmFsT2Jq
ZWN0LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KTsKIH0KIAogYm9vbCBKU09iamVjdDo6cHV0
SW5saW5lU2xvdyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWUgcHJv
cGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7Ci0gICAg
QVNTRVJUKCFpc1RoaXNWYWx1ZUFsdGVyZWQoc2xvdCwgdGhpcykpOworICAgIEFTU0VSVCghcGFy
c2VJbmRleChwcm9wZXJ0eU5hbWUpKTsKIAogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0o
KTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKKyAgICBpZiAo
VU5MSUtFTFkoIXZtLmlzU2FmZVRvUmVjdXJzZVNvZnQoKSkpIHsKKyAgICAgICAgdGhyb3dTdGFj
a092ZXJmbG93RXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSk7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisKICAgICBKU09iamVjdCogb2JqID0gdGhpczsKICAgICBmb3IgKDs7KSB7CiAg
ICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gb2JqLT5zdHJ1Y3R1cmUodm0pOwotICAgICAg
ICBpZiAoVU5MSUtFTFkoc3RydWN0dXJlLT50eXBlSW5mbygpLmhhc1B1dFByb3BlcnR5U2VjdXJp
dHlDaGVjaygpKSkgewotICAgICAgICAgICAgb2JqLT5tZXRob2RUYWJsZSh2bSktPmRvUHV0UHJv
cGVydHlTZWN1cml0eUNoZWNrKG9iaiwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHNsb3Qp
OwotICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZmFsc2UpOwotICAgICAg
ICB9Ci0gICAgICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXM7CisgICAgICAgIGlmIChvYmogIT0gdGhp
cyAmJiBzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkub3ZlcnJpZGVzUHV0KCkpCisgICAgICAgICAgICBS
RUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIG9iai0+bWV0aG9kVGFibGUodm0pLT5wdXQob2JqLCBn
bG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpKTsKKworICAgICAgICBib29s
IGhhc1Byb3BlcnR5ID0gZmFsc2U7CisgICAgICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXMgPSAwOwor
ICAgICAgICBQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYyBjdXN0b21TZXR0ZXIgPSBudWxs
cHRyOwogICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldCh2bSwg
cHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzKTsKICAgICAgICAgaWYgKGlzVmFsaWRPZmZzZXQob2Zm
c2V0KSkgewotICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZXMgJiBQcm9wZXJ0eUF0dHJpYnV0ZTo6
UmVhZE9ubHkpIHsKLSAgICAgICAgICAgICAgICBBU1NFUlQodGhpcy0+cHJvdG90eXBlQ2hhaW5N
YXlJbnRlcmNlcHRTdG9yZVRvKHZtLCBwcm9wZXJ0eU5hbWUpIHx8IG9iaiA9PSB0aGlzKTsKLSAg
ICAgICAgICAgICAgICByZXR1cm4gdHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsIHNsb3Qu
aXNTdHJpY3RNb2RlKCksIFJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9yKTsKKyAgICAgICAgICAg
IGhhc1Byb3BlcnR5ID0gdHJ1ZTsKKyAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVzICYgUHJvcGVy
dHlBdHRyaWJ1dGU6OkN1c3RvbUFjY2Vzc29yT3JWYWx1ZSkgeworICAgICAgICAgICAgICAgIEpT
VmFsdWUgdmFsdWUgPSBvYmotPmdldERpcmVjdChvZmZzZXQpOworICAgICAgICAgICAgICAgIGN1
c3RvbVNldHRlciA9IGpzQ2FzdDxDdXN0b21HZXR0ZXJTZXR0ZXIqPih2YWx1ZS5hc0NlbGwoKSkt
PnNldHRlcigpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKHN0cnVjdHVyZS0+
dHlwZUluZm8oKS5oYXNTdGF0aWNQcm9wZXJ0eVRhYmxlKCkgJiYgIXN0cnVjdHVyZS0+c3RhdGlj
UHJvcGVydGllc1JlaWZpZWQoKSkgeworICAgICAgICAgICAgaWYgKGF1dG8gZW50cnkgPSBzdHJ1
Y3R1cmUtPmZpbmRQcm9wZXJ0eUhhc2hFbnRyeShwcm9wZXJ0eU5hbWUpKSB7CisgICAgICAgICAg
ICAgICAgaGFzUHJvcGVydHkgPSB0cnVlOworICAgICAgICAgICAgICAgIHVuc2lnbmVkIHN0YXRp
Y0F0dHJpYnV0ZXMgPSBlbnRyeS0+dmFsdWUtPmF0dHJpYnV0ZXMoKTsKKyAgICAgICAgICAgICAg
ICBhdHRyaWJ1dGVzID0gYXR0cmlidXRlc0ZvclN0cnVjdHVyZShzdGF0aWNBdHRyaWJ1dGVzKTsK
KworICAgICAgICAgICAgICAgIGlmIChzdGF0aWNBdHRyaWJ1dGVzICYgUHJvcGVydHlBdHRyaWJ1
dGU6OkFjY2Vzc29yKQorICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzIHw9IFByb3BlcnR5
QXR0cmlidXRlOjpSZWFkT25seTsKKyAgICAgICAgICAgICAgICBpZiAoIShzdGF0aWNBdHRyaWJ1
dGVzICYgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5KSkgeworICAgICAgICAgICAgICAgICAg
ICBpZiAoc3RhdGljQXR0cmlidXRlcyAmIFByb3BlcnR5QXR0cmlidXRlOjpCdWlsdGluT3JGdW5j
dGlvbk9yTGF6eVByb3BlcnR5KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlzVGhp
c1ZhbHVlQWx0ZXJlZChzbG90LCBvYmopKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gQXZvaWQgUHV0TW9kZVB1dCBiZWNhdXNlIGl0IHRocm93cyBmb3Igbm9uLWV4dGVuc2libGUg
c3RydWN0dXJlcy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmotPnB1dERpcmVjdCh2
bSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgYXR0cmlidXRlcywgc2xvdCk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
IShzdGF0aWNBdHRyaWJ1dGVzICYgUHJvcGVydHlBdHRyaWJ1dGU6OkN1c3RvbUFjY2Vzc29yKSkK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzIHw9IFByb3BlcnR5QXR0cmli
dXRlOjpDdXN0b21WYWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGN1c3RvbVNldHRlciA9
IGVudHJ5LT52YWx1ZS0+cHJvcGVydHlQdXR0ZXIoKTsKKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KKyAgICAgICAgfQogCi0gICAgICAgICAg
ICBKU1ZhbHVlIGdzID0gb2JqLT5nZXREaXJlY3Qob2Zmc2V0KTsKLSAgICAgICAgICAgIGlmIChn
cy5pc0dldHRlclNldHRlcigpKSB7CisgICAgICAgIGlmIChoYXNQcm9wZXJ0eSkgeworICAgICAg
ICAgICAgaWYgKGF0dHJpYnV0ZXMgJiBQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIHR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCBzbG90Lmlz
U3RyaWN0TW9kZSgpLCBSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcik7CisgICAgICAgICAgICBp
ZiAoYXR0cmlidXRlcyAmIFByb3BlcnR5QXR0cmlidXRlOjpBY2Nlc3NvcikgeworICAgICAgICAg
ICAgICAgIEFTU0VSVChpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpOwogICAgICAgICAgICAgICAgIC8v
IFdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgd2UgZGVjaWRlIHRvIGNhY2hlIHRoaXMgcHJvcGVy
dHkgYmVmb3JlIHdlIHBvdGVudGlhbGx5IGV4ZWN1dGUgYXJpYml0cmFyeSBKUy4KICAgICAgICAg
ICAgICAgICBpZiAoIXRoaXMtPnN0cnVjdHVyZSh2bSktPmlzVW5jYWNoZWFibGVEaWN0aW9uYXJ5
KCkpCiAgICAgICAgICAgICAgICAgICAgIHNsb3Quc2V0Q2FjaGVhYmxlU2V0dGVyKG9iaiwgb2Zm
c2V0KTsKLQotICAgICAgICAgICAgICAgIGJvb2wgcmVzdWx0ID0gY2FsbFNldHRlcihnbG9iYWxP
YmplY3QsIHNsb3QudGhpc1ZhbHVlKCksIGdzLCB2YWx1ZSwgc2xvdC5pc1N0cmljdE1vZGUoKSA/
IEVDTUFNb2RlOjpzdHJpY3QoKSA6IEVDTUFNb2RlOjpzbG9wcHkoKSk7Ci0gICAgICAgICAgICAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZmFsc2UpOwotICAgICAgICAgICAgICAgIHJl
dHVybiByZXN1bHQ7CisgICAgICAgICAgICAgICAgSlNWYWx1ZSBncyA9IG9iai0+Z2V0RGlyZWN0
KG9mZnNldCk7CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBjYWxs
U2V0dGVyKGdsb2JhbE9iamVjdCwgc2xvdC50aGlzVmFsdWUoKSwgZ3MsIHZhbHVlLCBzbG90Lmlz
U3RyaWN0TW9kZSgpID8gRUNNQU1vZGU6OnN0cmljdCgpIDogRUNNQU1vZGU6OnNsb3BweSgpKSk7
CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoZ3MuaXNDdXN0b21HZXR0ZXJTZXR0ZXIo
KSkgewotICAgICAgICAgICAgICAgIGJvb2wgaXNBY2Nlc3NvciA9IGF0dHJpYnV0ZXMgJiBQcm9w
ZXJ0eUF0dHJpYnV0ZTo6Q3VzdG9tQWNjZXNzb3I7Ci0gICAgICAgICAgICAgICAgYXV0byBzZXR0
ZXIgPSBqc0Nhc3Q8Q3VzdG9tR2V0dGVyU2V0dGVyKj4oZ3MuYXNDZWxsKCkpLT5zZXR0ZXIoKTsK
KyAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVzICYgUHJvcGVydHlBdHRyaWJ1dGU6OkN1c3RvbUFj
Y2Vzc29yKSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKGN1c3RvbVNldHRlcik7CiAgICAgICAg
ICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBvbmx5IGJlIGNhY2hpbmcgdGhlc2UgaWYgd2Un
cmUgbm90IGFuIHVuY2FjaGVhYmxlIGRpY3Rpb25hcnk6CiAgICAgICAgICAgICAgICAgLy8gaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNTM0NwotCi0gICAgICAgICAg
ICAgICAgLy8gV2UgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCB3ZSBkZWNpZGUgdG8gY2FjaGUgdGhp
cyBwcm9wZXJ0eSBiZWZvcmUgd2UgcG90ZW50aWFsbHkgZXhlY3V0ZSBhcmliaXRyYXJ5IEpTLgot
ICAgICAgICAgICAgICAgIGlmIChpc0FjY2Vzc29yKQotICAgICAgICAgICAgICAgICAgICBzbG90
LnNldEN1c3RvbUFjY2Vzc29yKG9iaiwgc2V0dGVyKTsKLSAgICAgICAgICAgICAgICBlbHNlCi0g
ICAgICAgICAgICAgICAgICAgIHNsb3Quc2V0Q3VzdG9tVmFsdWUob2JqLCBzZXR0ZXIpOwotCi0g
ICAgICAgICAgICAgICAgYXV0byByZXN1bHQgPSBjYWxsQ3VzdG9tU2V0dGVyKGdsb2JhbE9iamVj
dCwgc2V0dGVyLCBpc0FjY2Vzc29yLCBvYmosIHNsb3QudGhpc1ZhbHVlKCksIHZhbHVlLCBwcm9w
ZXJ0eU5hbWUpOworICAgICAgICAgICAgICAgIHNsb3Quc2V0Q3VzdG9tQWNjZXNzb3Iob2JqLCBj
dXN0b21TZXR0ZXIpOyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgY3VzdG9t
U2V0dGVyKGdsb2JhbE9iamVjdCwgSlNWYWx1ZTo6ZW5jb2RlKHNsb3QudGhpc1ZhbHVlKCkpLCBK
U1ZhbHVlOjplbmNvZGUodmFsdWUpLCBwcm9wZXJ0eU5hbWUpOwogICAgICAgICAgICAgICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGZhbHNlKTsKLSAgICAgICAgICAgICAgICBpZiAocmVz
dWx0ICE9IFRyaVN0YXRlOjpJbmRldGVybWluYXRlKQotICAgICAgICAgICAgICAgICAgICByZXR1
cm4gcmVzdWx0ID09IFRyaVN0YXRlOjpUcnVlOworICAgICAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZXMgJiBQcm9wZXJ0eUF0
dHJpYnV0ZTo6Q3VzdG9tVmFsdWUpIHsKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogT25jZSBs
ZWdhY3kgUmVnRXhwIGZlYXR1cmVzIGFyZSBpbXBsZW1lbnRlZCwgdGhlcmUgd291bGQgYmUgbm8g
dXNlIGNhc2UgZm9yIGNhbGxpbmcgQ3VzdG9tVmFsdWUgc2V0dGVycyBpZiByZWNlaXZlciBpcyBh
bHRlcmVkLgorICAgICAgICAgICAgICAgIGlmIChjdXN0b21TZXR0ZXIgJiYgIShpc1RoaXNWYWx1
ZUFsdGVyZWQoc2xvdCwgb2JqKSAmJiBzbG90LmNvbnRleHQoKSA9PSBQdXRQcm9wZXJ0eVNsb3Q6
OlJlZmxlY3RTZXQpKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQg
b25seSBiZSBjYWNoaW5nIHRoZXNlIGlmIHdlJ3JlIG5vdCBhbiB1bmNhY2hlYWJsZSBkaWN0aW9u
YXJ5OgorICAgICAgICAgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjE1MzQ3CisgICAgICAgICAgICAgICAgICAgIHNsb3Quc2V0Q3VzdG9tVmFs
dWUob2JqLCBjdXN0b21TZXR0ZXIpOworICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FORF9S
RVRVUk4oc2NvcGUsIGN1c3RvbVNldHRlcihnbG9iYWxPYmplY3QsIEpTVmFsdWU6OmVuY29kZShv
YmopLCBKU1ZhbHVlOjplbmNvZGUodmFsdWUpLCBwcm9wZXJ0eU5hbWUpKTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgaWYgKCFpc1RoaXNWYWx1ZUFsdGVyZWQoc2xvdCwgb2Jq
KSkgeworICAgICAgICAgICAgICAgICAgICBvYmotPnB1dERpcmVjdCh2bSwgcHJvcGVydHlOYW1l
LCB2YWx1ZSwgYXR0cmlidXRlcyAmIH5Qcm9wZXJ0eUF0dHJpYnV0ZTo6Q3VzdG9tVmFsdWUsIHNs
b3QpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBBU1NFUlQoIShhdHRyaWJ1dGVzICYgUHJvcGVy
dHlBdHRyaWJ1dGU6OkFjY2Vzc29yKSk7Ci0KICAgICAgICAgICAgIC8vIElmIHRoZXJlJ3MgYW4g
ZXhpc3RpbmcgcHJvcGVydHkgb24gdGhlIGJhc2Ugb2JqZWN0LCBvciBvbiBvbmUgb2YgaXRzIAot
ICAgICAgICAgICAgLy8gcHJvdG90eXBlcywgd2Ugc2hvdWxkIHN0b3JlIHRoZSBwcm9wZXJ0eSBv
biB0aGUgKmJhc2UqIG9iamVjdC4KKyAgICAgICAgICAgIC8vIHByb3RvdHlwZXMsIHdlIHNob3Vs
ZCBzdG9yZSB0aGUgcHJvcGVydHkgb24gdGhlIHJlY2VpdmVyIG9iamVjdC4KICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGlmICghb2JqLT5zdGF0aWNQcm9wZXJ0aWVzUmVp
ZmllZCh2bSkpIHsKLSAgICAgICAgICAgIGlmIChvYmotPmNsYXNzSW5mbyh2bSktPmhhc1N0YXRp
Y1NldHRlck9yUmVhZG9ubHlQcm9wZXJ0aWVzKCkpIHsKLSAgICAgICAgICAgICAgICBpZiAoYXV0
byBlbnRyeSA9IG9iai0+ZmluZFByb3BlcnR5SGFzaEVudHJ5KHZtLCBwcm9wZXJ0eU5hbWUpKQot
ICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIHB1dEVudHJ5KGds
b2JhbE9iamVjdCwgZW50cnktPnRhYmxlLT5jbGFzc0ZvclRoaXMsIGVudHJ5LT52YWx1ZSwgb2Jq
LCB0aGlzLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KSk7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLSAgICAgICAgaWYgKG9iai0+dHlwZSgpID09IFByb3h5T2JqZWN0VHlwZSkgewotICAg
ICAgICAgICAgYXV0byogcHJveHkgPSBqc0Nhc3Q8UHJveHlPYmplY3QqPihvYmopOwotICAgICAg
ICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBwcm94eS0+UHJveHlPYmplY3Q6OnB1dChw
cm94eSwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KSk7Ci0gICAgICAg
IH0KKwogICAgICAgICBKU1ZhbHVlIHByb3RvdHlwZSA9IG9iai0+Z2V0UHJvdG90eXBlKHZtLCBn
bG9iYWxPYmplY3QpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBmYWxzZSk7
CiAgICAgICAgIGlmIChwcm90b3R5cGUuaXNOdWxsKCkpCkBAIC04NjcsMTEgKzg2Miw2MCBAQCBi
b29sIEpTT2JqZWN0OjpwdXRJbmxpbmVTbG93KEpTR2xvYmFsT2JqCiAgICAgICAgIG9iaiA9IGFz
T2JqZWN0KHByb3RvdHlwZSk7CiAgICAgfQogCi0gICAgaWYgKCFwdXREaXJlY3RJbnRlcm5hbDxQ
dXRNb2RlUHV0Pih2bSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgMCwgc2xvdCkpCisgICAgaWYgKFVO
TElLRUxZKGlzVGhpc1ZhbHVlQWx0ZXJlZChzbG90LCB0aGlzKSkpCisgICAgICAgIFJFTEVBU0Vf
QU5EX1JFVFVSTihzY29wZSwgZGVmaW5lUHJvcGVydHlPblJlY2VpdmVyKGdsb2JhbE9iamVjdCwg
cHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCkpOworICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29w
ZSwgcHV0SW5saW5lRmFzdChnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3Qp
KTsKK30KKworLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vcmRpbmFyeXNldCAoc3Rl
cHMgMy5jLWUpCitib29sIEpTT2JqZWN0OjpkZWZpbmVQcm9wZXJ0eU9uUmVjZWl2ZXIoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1
ZSB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBzbG90KQoreworICAgIEFTU0VSVCghcGFyc2VJbmRl
eChwcm9wZXJ0eU5hbWUpKTsKKworICAgIFZNJiB2bSA9IGdldFZNKGdsb2JhbE9iamVjdCk7Cisg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgSlNPYmplY3Qq
IHJlY2VpdmVyID0gc2xvdC50aGlzVmFsdWUoKS5nZXRPYmplY3QoKTsKKyAgICBpZiAoIXJlY2Vp
dmVyKSB7CisgICAgICAgIC8vIEZJWE1FOiBGb3IgYSBmYWlsdXJlIGR1ZSB0byBwcmltaXRpdmUg
cmVjZWl2ZXIsIHRoZSBlcnJvciBtZXNzYWdlIGlzIG1pc2xlYWRpbmcuCisgICAgICAgIHJldHVy
biB0eXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgc2xvdC5pc1N0cmljdE1vZGUoKSwgUmVh
ZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpOworICAgIH0KKworICAgIGlmIChzbG90LmlzVGFpbnRl
ZEJ5T3BhcXVlT2JqZWN0KCkgfHwgc2xvdC5jb250ZXh0KCkgPT0gUHV0UHJvcGVydHlTbG90OjpS
ZWZsZWN0U2V0KSB7CisgICAgICAgIGlmIChyZWNlaXZlci0+bWV0aG9kVGFibGUodm0pLT5kZWZp
bmVPd25Qcm9wZXJ0eSAhPSBKU09iamVjdDo6ZGVmaW5lT3duUHJvcGVydHkpCisgICAgICAgICAg
ICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIGRlZmluZVByb3BlcnR5T25SZWNlaXZlclNsb3co
Z2xvYmFsT2JqZWN0LCByZWNlaXZlciwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdC5pc1N0cmlj
dE1vZGUoKSkpOworICAgIH0KKworICAgIGlmICghcmVjZWl2ZXItPnB1dERpcmVjdEludGVybmFs
PFB1dE1vZGVQdXQ+KHZtLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCAwLCBzbG90KSkgeworICAgICAg
ICAvLyBGSVhNRTogRm9yIGEgZmFpbHVyZSBkdWUgdG8gbm9uLWV4dGVuc2libGUgc3RydWN0dXJl
LCB0aGUgZXJyb3IgbWVzc2FnZSBpcyBtaXNsZWFkaW5nLgogICAgICAgICByZXR1cm4gdHlwZUVy
cm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsIHNsb3QuaXNTdHJpY3RNb2RlKCksIFJlYWRvbmx5UHJv
cGVydHlXcml0ZUVycm9yKTsKKyAgICB9CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK2Jvb2wgSlNP
YmplY3Q6OmRlZmluZVByb3BlcnR5T25SZWNlaXZlclNsb3coSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgSlNPYmplY3QqIHJlY2VpdmVyLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBK
U1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZFRocm93KQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9i
amVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisK
KyAgICBQcm9wZXJ0eVNsb3Qgc2xvdChyZWNlaXZlciwgUHJvcGVydHlTbG90OjpJbnRlcm5hbE1l
dGhvZFR5cGU6OkdldE93blByb3BlcnR5KTsKKyAgICBib29sIGhhc1Byb3BlcnR5ID0gcmVjZWl2
ZXItPm1ldGhvZFRhYmxlKHZtKS0+Z2V0T3duUHJvcGVydHlTbG90KHJlY2VpdmVyLCBnbG9iYWxP
YmplY3QsIHByb3BlcnR5TmFtZSwgc2xvdCk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgZmFsc2UpOworICAgIGlmIChoYXNQcm9wZXJ0eSkgeworICAgICAgICBpZiAoc2xvdC5hdHRy
aWJ1dGVzKCkgJiBQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHlPckFjY2Vzc29yT3JDdXN0b21B
Y2Nlc3NvcikgeworICAgICAgICAgICAgLy8gRklYTUU6IEZvciBhbiBhY2Nlc3NvciB3aXRoIHNl
dHRlciwgdGhlIGVycm9yIG1lc3NhZ2UgaXMgbWlzbGVhZGluZy4KKyAgICAgICAgICAgIHJldHVy
biB0eXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgc2hvdWxkVGhyb3csIFJlYWRvbmx5UHJv
cGVydHlXcml0ZUVycm9yKTsKKyAgICAgICAgfQorCisgICAgICAgIFByb3BlcnR5RGVzY3JpcHRv
ciB2YWx1ZURlc2NyaXB0b3I7CisgICAgICAgIHZhbHVlRGVzY3JpcHRvci5zZXRWYWx1ZSh2YWx1
ZSk7CisKKyAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCByZWNlaXZlci0+bWV0aG9k
VGFibGUodm0pLT5kZWZpbmVPd25Qcm9wZXJ0eShyZWNlaXZlciwgZ2xvYmFsT2JqZWN0LCBwcm9w
ZXJ0eU5hbWUsIHZhbHVlRGVzY3JpcHRvciwgc2hvdWxkVGhyb3cpKTsKKyAgICB9CisKKyAgICBS
RUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIHJlY2VpdmVyLT5tZXRob2RUYWJsZSh2bSktPmRlZmlu
ZU93blByb3BlcnR5KHJlY2VpdmVyLCBnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgUHJvcGVy
dHlEZXNjcmlwdG9yKHZhbHVlLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1
dGU6Ok5vbmUpKSwgc2hvdWxkVGhyb3cpKTsKK30KKwogYm9vbCBKU09iamVjdDo6cHV0QnlJbmRl
eChKU0NlbGwqIGNlbGwsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIHVuc2lnbmVkIHBy
b3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJvdykKIHsKICAgICBWTSYg
dm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CkBAIC0zODgyLDMwICszOTI2LDYgQEAgYm9vbCBKU09i
amVjdDo6YW55T2JqZWN0SW5DaGFpbk1heUludGVyYwogICAgIH0KIH0KIAotYm9vbCBKU09iamVj
dDo6cHJvdG90eXBlQ2hhaW5NYXlJbnRlcmNlcHRTdG9yZVRvKFZNJiB2bSwgUHJvcGVydHlOYW1l
IHByb3BlcnR5TmFtZSkKLXsKLSAgICBpZiAocGFyc2VJbmRleChwcm9wZXJ0eU5hbWUpKQotICAg
ICAgICByZXR1cm4gYW55T2JqZWN0SW5DaGFpbk1heUludGVyY2VwdEluZGV4ZWRBY2Nlc3Nlcyh2
bSk7Ci0gICAgCi0gICAgZm9yIChKU09iamVjdCogY3VycmVudCA9IHRoaXM7IDspIHsKLSAgICAg
ICAgSlNWYWx1ZSBwcm90b3R5cGUgPSBjdXJyZW50LT5nZXRQcm90b3R5cGVEaXJlY3Qodm0pOwot
ICAgICAgICBpZiAocHJvdG90eXBlLmlzTnVsbCgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICAKLSAgICAgICAgY3VycmVudCA9IGFzT2JqZWN0KHByb3RvdHlwZSk7Ci0gICAg
ICAgIAotICAgICAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzOwotICAgICAgICBQcm9wZXJ0eU9mZnNl
dCBvZmZzZXQgPSBjdXJyZW50LT5zdHJ1Y3R1cmUodm0pLT5nZXQodm0sIHByb3BlcnR5TmFtZSwg
YXR0cmlidXRlcyk7Ci0gICAgICAgIGlmICghSlNDOjppc1ZhbGlkT2Zmc2V0KG9mZnNldCkpCi0g
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgCi0gICAgICAgIGlmIChhdHRyaWJ1dGVzICYg
KFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IFByb3BlcnR5QXR0cmlidXRlOjpBY2Nlc3Nv
cikpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICB9Ci19Ci0KIGJvb2wgSlNPYmplY3Q6Om5lZWRzU2xvd1B1dEluZGV4aW5nKFZN
JiB2bSkgY29uc3QKIHsKICAgICByZXR1cm4gYW55T2JqZWN0SW5DaGFpbk1heUludGVyY2VwdElu
ZGV4ZWRBY2Nlc3Nlcyh2bSkgfHwgZ2xvYmFsT2JqZWN0KHZtKS0+aXNIYXZpbmdBQmFkVGltZSgp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCShyZXZpc2lv
biAyNzU3ODcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xNzMsNyArMTczLDYgQEAgcHVibGljOgogCiAgICAgSlNfRVhQT1JU
X1BSSVZBVEUgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU09iamVjdCos
IEpTR2xvYmFsT2JqZWN0KiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsK
ICAgICBib29sIGdldE93blByb3BlcnR5U2xvdElubGluZShKU0dsb2JhbE9iamVjdCosIFByb3Bl
cnR5TmFtZSwgUHJvcGVydHlTbG90Jik7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEVfSUZfQVNTRVJU
X0VOQUJMRUQgc3RhdGljIHZvaWQgZG9QdXRQcm9wZXJ0eVNlY3VyaXR5Q2hlY2soSlNPYmplY3Qq
LCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwgUHV0UHJvcGVydHlTbG90Jik7CiAKICAg
ICAvLyBUaGUga2V5IGRpZmZlcmVuY2UgYmV0d2VlbiB0aGlzIGFuZCBnZXRPd25Qcm9wZXJ0eVNs
b3QgaXMgdGhhdCBnZXRPd25Qcm9wZXJ0eVNsb3QKICAgICAvLyBjdXJyZW50bHkgcmV0dXJucyBp
bmNvcnJlY3QgcmVzdWx0cyBmb3IgdGhlIERPTSB3aW5kb3cgKHdpdGggbm9uLW93biBwcm9wZXJ0
aWVzKQpAQCAtMjAxLDcgKzIwMCwxMCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX2J1dHRl
cmZseS0+dmVjdG9yTGVuZ3RoKCk7CiAgICAgfQogICAgIAotICAgIHN0YXRpYyBib29sIHB1dElu
bGluZUZvckpTT2JqZWN0KEpTQ2VsbCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBK
U1ZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMgYm9vbCBwdXRJbmxpbmVGb3JK
U09iamVjdChKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVl
LCBQdXRQcm9wZXJ0eVNsb3QmKTsKKworICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBib29s
IGRlZmluZVByb3BlcnR5T25SZWNlaXZlcihKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwg
SlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgTkVWRVJf
SU5MSU5FIHN0YXRpYyBib29sIGRlZmluZVByb3BlcnR5T25SZWNlaXZlclNsb3coSlNHbG9iYWxP
YmplY3QqLCBKU09iamVjdCosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJv
dyk7CiAgICAgCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGJvb2wgcHV0KEpTQ2VsbCos
IEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQcm9wZXJ0eVNsb3Qm
KTsKICAgICAvLyBwdXRCeUluZGV4IGFzc3VtZXMgdGhhdCB0aGUgcmVjZWl2ZXIgaXMgdGhpcyBK
U0NlbGwgb2JqZWN0LgpAQCAtMjIwLDEyICsyMjIsMTMgQEAgcHVibGljOgogCiAgICAgQUxXQVlT
X0lOTElORSBib29sIHB1dEJ5SW5kZXhJbmxpbmUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgdWludDY0X3QgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZFRocm93
KQogICAgIHsKKyAgICAgICAgVk0mIHZtID0gZ2V0Vk0oZ2xvYmFsT2JqZWN0KTsKICAgICAgICAg
aWYgKExJS0VMWShwcm9wZXJ0eU5hbWUgPD0gTUFYX0FSUkFZX0lOREVYKSkKICAgICAgICAgICAg
IHJldHVybiBwdXRCeUluZGV4SW5saW5lKGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8dWludDMy
X3Q+KHByb3BlcnR5TmFtZSksIHZhbHVlLCBzaG91bGRUaHJvdyk7CiAKICAgICAgICAgQVNTRVJU
KHByb3BlcnR5TmFtZSA8PSBtYXhTYWZlSW50ZWdlcigpKTsKICAgICAgICAgUHV0UHJvcGVydHlT
bG90IHNsb3QodGhpcywgc2hvdWxkVGhyb3cpOwotICAgICAgICByZXR1cm4gcHV0SW5saW5lRm9y
SlNPYmplY3QodGhpcywgZ2xvYmFsT2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tKGdldFZNKGdsb2Jh
bE9iamVjdCksIHByb3BlcnR5TmFtZSksIHZhbHVlLCBzbG90KTsKKyAgICAgICAgcmV0dXJuIG1l
dGhvZFRhYmxlKHZtKS0+cHV0KHRoaXMsIGdsb2JhbE9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbSh2
bSwgcHJvcGVydHlOYW1lKSwgdmFsdWUsIHNsb3QpOwogICAgIH0KICAgICAgICAgCiAgICAgLy8g
VGhpcyBpcyBzaW1pbGFyIHRvIHRoZSBwdXREaXJlY3QqIG1ldGhvZHM6CkBAIC02NDQsNiArNjQ3
LDcgQEAgcHVibGljOgogICAgIC8vICAtIGF0dHJpYnV0ZXMgd2lsbCBiZSByZXNwZWN0ZWQgKGFm
dGVyIHRoZSBjYWxsIHRoZSBwcm9wZXJ0eSB3aWxsIGV4aXN0IHdpdGggdGhlIGdpdmVuIGF0dHJp
YnV0ZXMpCiAgICAgLy8gIC0gdGhlIHByb3BlcnR5IG5hbWUgaXMgYXNzdW1lZCB0byBub3QgYmUg
YW4gaW5kZXguCiAgICAgYm9vbCBwdXREaXJlY3QoVk0mLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUs
IHVuc2lnbmVkIGF0dHJpYnV0ZXMgPSAwKTsKKyAgICBib29sIHB1dERpcmVjdChWTSYsIFByb3Bl
cnR5TmFtZSwgSlNWYWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcywgUHV0UHJvcGVydHlTbG90Jik7
CiAgICAgYm9vbCBwdXREaXJlY3QoVk0mLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3Bl
cnR5U2xvdCYpOwogICAgIHZvaWQgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24oVk0mLCBQcm9w
ZXJ0eU5hbWUsIEpTVmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMgPSAwKTsKICAgICBib29sIHB1
dERpcmVjdE5vbkluZGV4QWNjZXNzb3IoVk0mLCBQcm9wZXJ0eU5hbWUsIEdldHRlclNldHRlcios
IHVuc2lnbmVkIGF0dHJpYnV0ZXMpOwpAQCAtODE3LDcgKzgyMSw2IEBAIHB1YmxpYzoKICAgICBi
b29sIGlzRnJvemVuKFZNJiB2bSkgeyByZXR1cm4gc3RydWN0dXJlKHZtKS0+aXNGcm96ZW4odm0p
OyB9CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSBib29sIGFueU9iamVjdEluQ2hhaW5NYXlJbnRl
cmNlcHRJbmRleGVkQWNjZXNzZXMoVk0mKSBjb25zdDsKLSAgICBKU19FWFBPUlRfUFJJVkFURSBi
b29sIHByb3RvdHlwZUNoYWluTWF5SW50ZXJjZXB0U3RvcmVUbyhWTSYsIFByb3BlcnR5TmFtZSk7
CiAgICAgYm9vbCBuZWVkc1Nsb3dQdXRJbmRleGluZyhWTSYpIGNvbnN0OwogCiBwcml2YXRlOgpA
QCAtOTU0LDYgKzk1Nyw3IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgY2FuUGVyZm9ybUZhc3RQdXRJ
bmxpbmUoVk0mLCBQcm9wZXJ0eU5hbWUpOwogICAgIGJvb2wgY2FuUGVyZm9ybUZhc3RQdXRJbmxp
bmVFeGNsdWRpbmdQcm90byhWTSYpOworICAgIGJvb2wgcHV0SW5saW5lRmFzdChKU0dsb2JhbE9i
amVjdCosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7CiAKICAgICBi
b29sIG1heUJlUHJvdG90eXBlKCkgY29uc3Q7CiAgICAgdm9pZCBkaWRCZWNvbWVQcm90b3R5cGUo
KTsKQEAgLTE0NDIsMTAgKzE0NDYsNiBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgSlNPYmplY3Q6Omdl
dE93blByb3BlCiB7CiAgICAgcmV0dXJuIGdldE93blByb3BlcnR5U2xvdEltcGwob2JqZWN0LCBn
bG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgc2xvdCk7CiB9Ci0KLUFMV0FZU19JTkxJTkUgdm9p
ZCBKU09iamVjdDo6ZG9QdXRQcm9wZXJ0eVNlY3VyaXR5Q2hlY2soSlNPYmplY3QqLCBKU0dsb2Jh
bE9iamVjdCosIFByb3BlcnR5TmFtZSwgUHV0UHJvcGVydHlTbG90JikKLXsKLX0KICNlbmRpZgog
CiAvLyBJdCBtYXkgc2VlbSBjcmF6eSB0byBpbmxpbmUgYSBmdW5jdGlvbiB0aGlzIGxhcmdlIGJ1
dCBpdCBtYWtlcyBhIGJpZyBkaWZmZXJlbmNlCkBAIC0xNTI5LDYgKzE1MjksMTMgQEAgaW5saW5l
IGJvb2wgSlNPYmplY3Q6OnB1dERpcmVjdChWTSYgdm0sIAogICAgIHJldHVybiBwdXREaXJlY3RJ
bnRlcm5hbDxQdXRNb2RlRGVmaW5lT3duUHJvcGVydHk+KHZtLCBwcm9wZXJ0eU5hbWUsIHZhbHVl
LCBhdHRyaWJ1dGVzLCBzbG90KTsKIH0KIAoraW5saW5lIGJvb2wgSlNPYmplY3Q6OnB1dERpcmVj
dChWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIHVuc2ln
bmVkIGF0dHJpYnV0ZXMsIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKK3sKKyAgICBBU1NFUlQoIXZh
bHVlLmlzR2V0dGVyU2V0dGVyKCkpOworICAgIEFTU0VSVCghdmFsdWUuaXNDdXN0b21HZXR0ZXJT
ZXR0ZXIoKSk7CisgICAgcmV0dXJuIHB1dERpcmVjdEludGVybmFsPFB1dE1vZGVEZWZpbmVPd25Q
cm9wZXJ0eT4odm0sIHByb3BlcnR5TmFtZSwgdmFsdWUsIGF0dHJpYnV0ZXMsIHNsb3QpOworfQor
CiBpbmxpbmUgYm9vbCBKU09iamVjdDo6cHV0RGlyZWN0KFZNJiB2bSwgUHJvcGVydHlOYW1lIHBy
b3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBzbG90KQogewogICAg
IEFTU0VSVCghdmFsdWUuaXNHZXR0ZXJTZXR0ZXIoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU09iamVjdElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdElubGluZXMuaAkocmV2aXNpb24gMjc1Nzg3KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3RJbmxpbmVzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTY3LDcgKzY3LDcgQEAgQUxXQVlTX0lOTElORSBib29sIEpTT2JqZWN0Ojpj
YW5QZXJmb3JtRgogICAgIEpTT2JqZWN0KiBvYmogPSB0aGlzOwogICAgIHdoaWxlICh0cnVlKSB7
CiAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gb2JqLT5zdHJ1Y3R1cmUodm0pOwotICAg
ICAgICBpZiAoc3RydWN0dXJlLT5oYXNSZWFkT25seU9yR2V0dGVyU2V0dGVyUHJvcGVydGllc0V4
Y2x1ZGluZ1Byb3RvKCkgfHwgc3RydWN0dXJlLT50eXBlSW5mbygpLm92ZXJyaWRlc0dldFByb3Rv
dHlwZSgpKQorICAgICAgICBpZiAoc3RydWN0dXJlLT5oYXNSZWFkT25seU9yR2V0dGVyU2V0dGVy
UHJvcGVydGllc0V4Y2x1ZGluZ1Byb3RvKCkgfHwgc3RydWN0dXJlLT50eXBlSW5mbygpLm92ZXJy
aWRlc1B1dCgpIHx8IHN0cnVjdHVyZS0+dHlwZUluZm8oKS5vdmVycmlkZXNHZXRQcm90b3R5cGUo
KSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICBwcm90b3R5cGUgPSBvYmot
PmdldFByb3RvdHlwZURpcmVjdCh2bSk7CkBAIC0yMzEsMzIgKzIzMSw0MiBAQCBBTFdBWVNfSU5M
SU5FIFByb3BlcnR5T2Zmc2V0IEpTT2JqZWN0OjpwCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAot
Ly8gRUNNQSA4LjYuMi4yCi1BTFdBWVNfSU5MSU5FIGJvb2wgSlNPYmplY3Q6OnB1dElubGluZUZv
ckpTT2JqZWN0KEpTQ2VsbCogY2VsbCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHJv
cGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBz
bG90KQorLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vcmRpbmFyeXNldAorQUxXQVlT
X0lOTElORSBib29sIEpTT2JqZWN0OjpwdXRJbmxpbmVGb3JKU09iamVjdChKU09iamVjdCogdGhp
c09iamVjdCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIHByb3Bl
cnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBzbG90KQogewogICAgIFZN
JiB2bSA9IGdldFZNKGdsb2JhbE9iamVjdCk7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwotCi0gICAgSlNPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNPYmpl
Y3QqPihjZWxsKTsKICAgICBBU1NFUlQodmFsdWUpOwogICAgIEFTU0VSVCghSGVhcDo6aGVhcCh2
YWx1ZSkgfHwgSGVhcDo6aGVhcCh2YWx1ZSkgPT0gSGVhcDo6aGVhcCh0aGlzT2JqZWN0KSk7CiAK
LSAgICBpZiAoVU5MSUtFTFkoaXNUaGlzVmFsdWVBbHRlcmVkKHNsb3QsIHRoaXNPYmplY3QpKSkK
LSAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBvcmRpbmFyeVNldFNsb3coZ2xvYmFs
T2JqZWN0LCB0aGlzT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90LnRoaXNWYWx1ZSgp
LCBzbG90LmlzU3RyaWN0TW9kZSgpKSk7Ci0KICAgICAvLyBUcnkgaW5kZXhlZCBwdXQgZmlyc3Qu
IFRoaXMgaXMgcmVxdWlyZWQgZm9yIGNvcnJlY3RuZXNzLCBzaW5jZSBsb2FkcyBvbiBwcm9wZXJ0
eSBuYW1lcyB0aGF0IGFwcGVhciBsaWtlCiAgICAgLy8gdmFsaWQgaW5kaWNlcyB3aWxsIG5ldmVy
IGxvb2sgaW4gdGhlIG5hbWVkIHByb3BlcnR5IHN0b3JhZ2UuCi0gICAgaWYgKE9wdGlvbmFsPHVp
bnQzMl90PiBpbmRleCA9IHBhcnNlSW5kZXgocHJvcGVydHlOYW1lKSkKLSAgICAgICAgUkVMRUFT
RV9BTkRfUkVUVVJOKHNjb3BlLCBwdXRCeUluZGV4KHRoaXNPYmplY3QsIGdsb2JhbE9iamVjdCwg
aW5kZXgudmFsdWUoKSwgdmFsdWUsIHNsb3QuaXNTdHJpY3RNb2RlKCkpKTsKLQotICAgIGlmICh0
aGlzT2JqZWN0LT5jYW5QZXJmb3JtRmFzdFB1dElubGluZSh2bSwgcHJvcGVydHlOYW1lKSkgewot
ICAgICAgICBBU1NFUlQoIXRoaXNPYmplY3QtPnByb3RvdHlwZUNoYWluTWF5SW50ZXJjZXB0U3Rv
cmVUbyh2bSwgcHJvcGVydHlOYW1lKSk7Ci0gICAgICAgIGlmICghdGhpc09iamVjdC0+cHV0RGly
ZWN0SW50ZXJuYWw8UHV0TW9kZVB1dD4odm0sIHByb3BlcnR5TmFtZSwgdmFsdWUsIDAsIHNsb3Qp
KQotICAgICAgICAgICAgcmV0dXJuIHR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCBzbG90
LmlzU3RyaWN0TW9kZSgpLCBSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcik7Ci0gICAgICAgIHJl
dHVybiB0cnVlOworICAgIGlmIChPcHRpb25hbDx1aW50MzJfdD4gaW5kZXggPSBwYXJzZUluZGV4
KHByb3BlcnR5TmFtZSkpIHsKKyAgICAgICAgaWYgKFVOTElLRUxZKGlzVGhpc1ZhbHVlQWx0ZXJl
ZChzbG90LCB0aGlzT2JqZWN0KSkpCisgICAgICAgICAgICByZXR1cm4gb3JkaW5hcnlTZXRTbG93
KGdsb2JhbE9iamVjdCwgdGhpc09iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdC50aGlz
VmFsdWUoKSwgc2xvdC5pc1N0cmljdE1vZGUoKSk7CisgICAgICAgIHJldHVybiB0aGlzT2JqZWN0
LT5tZXRob2RUYWJsZSh2bSktPnB1dEJ5SW5kZXgodGhpc09iamVjdCwgZ2xvYmFsT2JqZWN0LCBp
bmRleC52YWx1ZSgpLCB2YWx1ZSwgc2xvdC5pc1N0cmljdE1vZGUoKSk7CiAgICAgfQogCi0gICAg
UkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCB0aGlzT2JqZWN0LT5wdXRJbmxpbmVTbG93KGdsb2Jh
bE9iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCkpOworICAgIGlmICghdGhpc09iamVj
dC0+Y2FuUGVyZm9ybUZhc3RQdXRJbmxpbmUodm0sIHByb3BlcnR5TmFtZSkpCisgICAgICAgIHJl
dHVybiB0aGlzT2JqZWN0LT5wdXRJbmxpbmVTbG93KGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1l
LCB2YWx1ZSwgc2xvdCk7CisgICAgaWYgKFVOTElLRUxZKGlzVGhpc1ZhbHVlQWx0ZXJlZChzbG90
LCB0aGlzT2JqZWN0KSkpCisgICAgICAgIHJldHVybiBkZWZpbmVQcm9wZXJ0eU9uUmVjZWl2ZXIo
Z2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KTsKKyAgICByZXR1cm4gdGhp
c09iamVjdC0+cHV0SW5saW5lRmFzdChnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgdmFsdWUs
IHNsb3QpOworfQorCitBTFdBWVNfSU5MSU5FIGJvb2wgSlNPYmplY3Q6OnB1dElubGluZUZhc3Qo
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwg
SlNWYWx1ZSB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBzbG90KQoreworICAgIEFTU0VSVCghcGFy
c2VJbmRleChwcm9wZXJ0eU5hbWUpKTsKKyAgICBBU1NFUlQoIWlzVGhpc1ZhbHVlQWx0ZXJlZChz
bG90LCB0aGlzKSk7CisKKyAgICBWTSYgdm0gPSBnZXRWTShnbG9iYWxPYmplY3QpOworICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIEFTU0VSVChjYW5QZXJm
b3JtRmFzdFB1dElubGluZSh2bSwgcHJvcGVydHlOYW1lKSk7CisgICAgaWYgKCFwdXREaXJlY3RJ
bnRlcm5hbDxQdXRNb2RlUHV0Pih2bSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgMCwgc2xvdCkpIHsK
KyAgICAgICAgLy8gRklYTUU6IEZvciBhIGZhaWx1cmUgZHVlIHRvIG5vbi1leHRlbnNpYmxlIHN0
cnVjdHVyZSwgdGhlIGVycm9yIG1lc3NhZ2UgaXMgbWlzbGVhZGluZy4KKyAgICAgICAgcmV0dXJu
IHR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCBzbG90LmlzU3RyaWN0TW9kZSgpLCBSZWFk
b25seVByb3BlcnR5V3JpdGVFcnJvcik7CisgICAgfQorICAgIHJldHVybiB0cnVlOwogfQogCiAv
LyBIYXNPd25Qcm9wZXJ0eShPLCBQKSBmcm9tIHNlY3Rpb24gNy4zLjExIGluIHRoZSBzcGVjLgpA
QCAtMjk5LDcgKzMwOSw3IEBAIEFMV0FZU19JTkxJTkUgYm9vbCBKU09iamVjdDo6cHV0RGlyZWN0
SW4KICAgICAgICAgdW5zaWduZWQgY3VycmVudEF0dHJpYnV0ZXM7CiAgICAgICAgIFByb3BlcnR5
T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0KHZtLCBwcm9wZXJ0eU5hbWUsIGN1cnJlbnRB
dHRyaWJ1dGVzKTsKICAgICAgICAgaWYgKG9mZnNldCAhPSBpbnZhbGlkT2Zmc2V0KSB7Ci0gICAg
ICAgICAgICBpZiAoKG1vZGUgPT0gUHV0TW9kZVB1dCkgJiYgY3VycmVudEF0dHJpYnV0ZXMgJiBQ
cm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkpCisgICAgICAgICAgICBpZiAoKG1vZGUgPT0gUHV0
TW9kZVB1dCkgJiYgY3VycmVudEF0dHJpYnV0ZXMgJiBQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9u
bHlPckFjY2Vzc29yT3JDdXN0b21BY2Nlc3NvcikKICAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAKICAgICAgICAgICAgIHB1dERpcmVjdCh2bSwgb2Zmc2V0LCB2YWx1ZSk7CkBAIC0zNTgs
NyArMzY4LDcgQEAgQUxXQVlTX0lOTElORSBib29sIEpTT2JqZWN0OjpwdXREaXJlY3RJbgogICAg
IHVuc2lnbmVkIGN1cnJlbnRBdHRyaWJ1dGVzOwogICAgIG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0
KHZtLCBwcm9wZXJ0eU5hbWUsIGN1cnJlbnRBdHRyaWJ1dGVzKTsKICAgICBpZiAob2Zmc2V0ICE9
IGludmFsaWRPZmZzZXQpIHsKLSAgICAgICAgaWYgKChtb2RlID09IFB1dE1vZGVQdXQpICYmIGN1
cnJlbnRBdHRyaWJ1dGVzICYgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5KQorICAgICAgICBp
ZiAoKG1vZGUgPT0gUHV0TW9kZVB1dCkgJiYgY3VycmVudEF0dHJpYnV0ZXMgJiBQcm9wZXJ0eUF0
dHJpYnV0ZTo6UmVhZE9ubHlPckFjY2Vzc29yT3JDdXN0b21BY2Nlc3NvcikKICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKIAogICAgICAgICBzdHJ1Y3R1cmUtPmRpZFJlcGxhY2VQcm9wZXJ0eShv
ZmZzZXQpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm94eS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJveHkuaAkocmV2
aXNpb24gMjc1Nzg3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm94eS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw3IEBAIG5hbWVzcGFjZSBKU0MgewogY2xhc3Mg
SlNQcm94eSA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKIHB1YmxpYzoKICAgICB1c2luZyBC
YXNlID0gSlNOb25GaW5hbE9iamVjdDsKLSAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0
cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBPdmVycmlkZXNHZXRPd25Qcm9w
ZXJ0eVNsb3QgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eU5hbWVzIHwgT3ZlcnJpZGVzR2V0UHJv
dG90eXBlIHwgSW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0
aElzTm90WmVybzsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdz
ID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBP
dmVycmlkZXNHZXRPd25Qcm9wZXJ0eU5hbWVzIHwgT3ZlcnJpZGVzUHV0IHwgT3ZlcnJpZGVzR2V0
UHJvdG90eXBlIHwgSW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxl
bmd0aElzTm90WmVybzsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFj
ZUFjY2Vzcz4KICAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVHlwZUluZm8uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGVJbmZvLmgJKHJldmlzaW9u
IDI3NTc4NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVHlwZUluZm8uaAko
d29ya2luZyBjb3B5KQpAQCAtNTcsNyArNTcsNyBAQCBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVk
IElzSW1tdXRhYmxlUHJvCiBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIEdldE93blByb3BlcnR5
U2xvdElzSW1wdXJlRm9yUHJvcGVydHlBYnNlbmNlID0gMSA8PCAxNTsKIHN0YXRpYyBjb25zdGV4
cHIgdW5zaWduZWQgSW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxl
bmd0aElzTm90WmVybyA9IDEgPDwgMTY7CiBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVj
dHVyZUlzSW1tb3J0YWwgPSAxIDw8IDE3Owotc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBIYXNQ
dXRQcm9wZXJ0eVNlY3VyaXR5Q2hlY2sgPSAxIDw8IDE4Oworc3RhdGljIGNvbnN0ZXhwciB1bnNp
Z25lZCBPdmVycmlkZXNQdXQgPSAxIDw8IDE4Owogc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBP
dmVycmlkZXNHZXRQcm90b3R5cGUgPSAxIDw8IDE5Owogc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25l
ZCBHZXRPd25Qcm9wZXJ0eVNsb3RNYXlCZVdyb25nQWJvdXREb250RW51bSA9IDEgPDwgMjA7CiAK
QEAgLTk0LDYgKzk0LDcgQEAgcHVibGljOgogICAgIGJvb2wgaW1wbGVtZW50c0RlZmF1bHRIYXNJ
bnN0YW5jZSgpIGNvbnN0IHsgcmV0dXJuIGlzU2V0T25GbGFnczE8SW1wbGVtZW50c0RlZmF1bHRI
YXNJbnN0YW5jZT4oKTsgfQogICAgIGJvb2wgb3ZlcnJpZGVzR2V0Q2FsbERhdGEoKSBjb25zdCB7
IHJldHVybiBpc1NldE9uRmxhZ3MxPE92ZXJyaWRlc0dldENhbGxEYXRhPigpOyB9CiAgICAgYm9v
bCBvdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QoKSBjb25zdCB7IHJldHVybiBvdmVycmlkZXNH
ZXRPd25Qcm9wZXJ0eVNsb3QoaW5saW5lVHlwZUZsYWdzKCkpOyB9CisgICAgYm9vbCBoYXNTdGF0
aWNQcm9wZXJ0eVRhYmxlKCkgY29uc3QgeyByZXR1cm4gaGFzU3RhdGljUHJvcGVydHlUYWJsZShp
bmxpbmVUeXBlRmxhZ3MoKSk7IH0KICAgICBzdGF0aWMgYm9vbCBvdmVycmlkZXNHZXRPd25Qcm9w
ZXJ0eVNsb3QoSW5saW5lVHlwZUZsYWdzIGZsYWdzKSB7IHJldHVybiBmbGFncyAmIE92ZXJyaWRl
c0dldE93blByb3BlcnR5U2xvdDsgfQogICAgIHN0YXRpYyBib29sIGhhc1N0YXRpY1Byb3BlcnR5
VGFibGUoSW5saW5lVHlwZUZsYWdzIGZsYWdzKSB7IHJldHVybiBmbGFncyAmIEhhc1N0YXRpY1By
b3BlcnR5VGFibGU7IH0KICAgICBzdGF0aWMgYm9vbCBwZXJDZWxsQml0KElubGluZVR5cGVGbGFn
cyBmbGFncykgeyByZXR1cm4gZmxhZ3MgJiBUeXBlSW5mb1BlckNlbGxCaXQ7IH0KQEAgLTEwMiwx
MiArMTAzLDEyIEBAIHB1YmxpYzoKICAgICBib29sIG92ZXJyaWRlc0dldE93blByb3BlcnR5TmFt
ZXMoKSBjb25zdCB7IHJldHVybiBpc1NldE9uRmxhZ3MyPE92ZXJyaWRlc0dldE93blByb3BlcnR5
TmFtZXM+KCk7IH0KICAgICBib29sIG92ZXJyaWRlc0dldE93blNwZWNpYWxQcm9wZXJ0eU5hbWVz
KCkgY29uc3QgeyByZXR1cm4gaXNTZXRPbkZsYWdzMjxPdmVycmlkZXNHZXRPd25TcGVjaWFsUHJv
cGVydHlOYW1lcz4oKTsgfQogICAgIGJvb2wgb3ZlcnJpZGVzQW55Rm9ybU9mR2V0T3duUHJvcGVy
dHlOYW1lcygpIGNvbnN0IHsgcmV0dXJuIG92ZXJyaWRlc0dldE93blByb3BlcnR5TmFtZXMoKSB8
fCBvdmVycmlkZXNHZXRPd25TcGVjaWFsUHJvcGVydHlOYW1lcygpOyB9CisgICAgYm9vbCBvdmVy
cmlkZXNQdXQoKSBjb25zdCB7IHJldHVybiBpc1NldE9uRmxhZ3MyPE92ZXJyaWRlc1B1dD4oKTsg
fQogICAgIGJvb2wgb3ZlcnJpZGVzR2V0UHJvdG90eXBlKCkgY29uc3QgeyByZXR1cm4gaXNTZXRP
bkZsYWdzMjxPdmVycmlkZXNHZXRQcm90b3R5cGU+KCk7IH0KICAgICBib29sIHByb2hpYml0c1By
b3BlcnR5Q2FjaGluZygpIGNvbnN0IHsgcmV0dXJuIGlzU2V0T25GbGFnczI8UHJvaGliaXRzUHJv
cGVydHlDYWNoaW5nPigpOyB9CiAgICAgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RJc0ltcHVyZSgp
IGNvbnN0IHsgcmV0dXJuIGlzU2V0T25GbGFnczI8R2V0T3duUHJvcGVydHlTbG90SXNJbXB1cmU+
KCk7IH0KICAgICBib29sIGdldE93blByb3BlcnR5U2xvdElzSW1wdXJlRm9yUHJvcGVydHlBYnNl
bmNlKCkgY29uc3QgeyByZXR1cm4gaXNTZXRPbkZsYWdzMjxHZXRPd25Qcm9wZXJ0eVNsb3RJc0lt
cHVyZUZvclByb3BlcnR5QWJzZW5jZT4oKTsgfQogICAgIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90
TWF5QmVXcm9uZ0Fib3V0RG9udEVudW0oKSBjb25zdCB7IHJldHVybiBpc1NldE9uRmxhZ3MyPEdl
dE93blByb3BlcnR5U2xvdE1heUJlV3JvbmdBYm91dERvbnRFbnVtPigpOyB9Ci0gICAgYm9vbCBo
YXNQdXRQcm9wZXJ0eVNlY3VyaXR5Q2hlY2soKSBjb25zdCB7IHJldHVybiBpc1NldE9uRmxhZ3My
PEhhc1B1dFByb3BlcnR5U2VjdXJpdHlDaGVjaz4oKTsgfQogICAgIGJvb2wgbmV3SW1wdXJlUHJv
cGVydHlGaXJlc1dhdGNocG9pbnRzKCkgY29uc3QgeyByZXR1cm4gaXNTZXRPbkZsYWdzMjxOZXdJ
bXB1cmVQcm9wZXJ0eUZpcmVzV2F0Y2hwb2ludHM+KCk7IH0KICAgICBib29sIGlzSW1tdXRhYmxl
UHJvdG90eXBlRXhvdGljT2JqZWN0KCkgY29uc3QgeyByZXR1cm4gaXNTZXRPbkZsYWdzMjxJc0lt
bXV0YWJsZVByb3RvdHlwZUV4b3RpY09iamVjdD4oKTsgfQogICAgIGJvb2wgaW50ZXJjZXB0c0dl
dE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybygpIGNvbnN0IHsg
cmV0dXJuIGlzU2V0T25GbGFnczI8SW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhF
dmVuV2hlbkxlbmd0aElzTm90WmVybz4oKTsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvTG9va3VwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvTG9va3VwLmgJKHJldmlzaW9uIDI3NTc4NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0xvb2t1cC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNjIsNzAgKzI2Miw2IEBAIGlu
bGluZSBib29sIHJlcGxhY2VTdGF0aWNQcm9wZXJ0eVNsb3QoVk0KICAgICByZXR1cm4gdHJ1ZTsK
IH0KIAotLy8gJ2Jhc2UnIG1lYW5zIHRoZSBvYmplY3QgaG9sZGluZyB0aGUgcHJvcGVydHkgKHBv
c3NpYmx5IGluIHRoZSBwcm90b3R5cGUgY2hhaW4gb2YgdGhlIG9iamVjdCBwdXQgd2FzIGNhbGxl
ZCBvbikuCi0vLyAndGhpc1ZhbHVlJyBpcyB0aGUgb2JqZWN0IHRoYXQgcHV0IGlzIGJlaW5nIGFw
cGxpZWQgdG8gKGluIHRoZSBjYXNlIG9mIGEgcHJveHksIHRoZSBwcm94eSB0YXJnZXQpLgotLy8g
J3Nsb3QudGhpc1ZhbHVlKCknIGlzIHRoZSBvYmplY3QgdGhlIHB1dCB3YXMgb3JpZ2luYWxseSBw
ZXJmb3JtZWQgb24gKGluIHRoZSBjYXNlIG9mIGEgcHJveHksIHRoZSBwcm94eSBpdHNlbGYpLgot
aW5saW5lIGJvb2wgcHV0RW50cnkoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3Qg
Q2xhc3NJbmZvKiwgY29uc3QgSGFzaFRhYmxlVmFsdWUqIGVudHJ5LCBKU09iamVjdCogYmFzZSwg
SlNPYmplY3QqIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2
YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBzbG90KQotewotICAgIFZNJiB2bSA9IGdldFZNKGdsb2Jh
bE9iamVjdCk7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0g
ICAgaWYgKGVudHJ5LT5hdHRyaWJ1dGVzKCkgJiBQcm9wZXJ0eUF0dHJpYnV0ZTo6QnVpbHRpbk9y
RnVuY3Rpb25PckxhenlQcm9wZXJ0eSkgewotICAgICAgICBpZiAoIShlbnRyeS0+YXR0cmlidXRl
cygpICYgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5KSkgewotICAgICAgICAgICAgLy8gSWYg
dGhpcyBpcyBhIGZ1bmN0aW9uIG9yIGxhenkgcHJvcGVydHkgcHV0IHRoZW4gd2UganVzdCBkbyB0
aGUgcHV0IGJlY2F1c2UKLSAgICAgICAgICAgIC8vIGxvZ2ljYWxseSB0aGUgb2JqZWN0IGFscmVh
ZHkgaGFkIHRoZSBwcm9wZXJ0eSwgc28gdGhpcyBpcyBqdXN0IGEgcmVwbGFjZS4KLSAgICAgICAg
ICAgIC8vIEZJWE1FOiB0aGlzVmFsdWUgbWF5IGJlIGFuIG9iamVjdCB3aXRoIG5vbi1leHRlbnNp
YmxlIHN0cnVjdHVyZSB3ZSBtdXN0IHRocm93IGZvci4KLSAgICAgICAgICAgIGlmIChKU09iamVj
dCogdGhpc09iamVjdCA9IGpzRHluYW1pY0Nhc3Q8SlNPYmplY3QqPih2bSwgdGhpc1ZhbHVlKSkK
LSAgICAgICAgICAgICAgICB0aGlzT2JqZWN0LT5wdXREaXJlY3Qodm0sIHByb3BlcnR5TmFtZSwg
dmFsdWUpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0
dXJuIHR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCBzbG90LmlzU3RyaWN0TW9kZSgpLCBS
ZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcik7Ci0gICAgfQotCi0gICAgaWYgKGVudHJ5LT5hdHRy
aWJ1dGVzKCkgJiBQcm9wZXJ0eUF0dHJpYnV0ZTo6QWNjZXNzb3IpCi0gICAgICAgIHJldHVybiB0
eXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgc2xvdC5pc1N0cmljdE1vZGUoKSwgUmVhZG9u
bHlQcm9wZXJ0eVdyaXRlRXJyb3IpOwotCi0gICAgaWYgKCEoZW50cnktPmF0dHJpYnV0ZXMoKSAm
IFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSkpIHsKLSAgICAgICAgQVNTRVJUX1dJVEhfTUVT
U0FHRSghKGVudHJ5LT5hdHRyaWJ1dGVzKCkgJiBQcm9wZXJ0eUF0dHJpYnV0ZTo6RE9NSklUQXR0
cmlidXRlKSwgIkRPTUpJVEF0dHJpYnV0ZSBzdXBwb3J0cyByZWFkb25seSBhdHRyaWJ1dGVzIGN1
cnJlbnRseS4iKTsKLSAgICAgICAgYm9vbCBpc0FjY2Vzc29yID0gZW50cnktPmF0dHJpYnV0ZXMo
KSAmIFByb3BlcnR5QXR0cmlidXRlOjpDdXN0b21BY2Nlc3NvcjsKLSAgICAgICAgLy8gRklYTUU6
IFdlIHNob3VsZCBvbmx5IGJlIGNhY2hpbmcgdGhlc2UgaWYgd2UncmUgbm90IGFuIHVuY2FjaGVh
YmxlIGRpY3Rpb25hcnk6Ci0gICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0yMTUzNDcKLSAgICAgICAgLy8gV2UgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCB3
ZSBkZWNpZGUgdG8gY2FjaGUgdGhpcyBwcm9wZXJ0eSBiZWZvcmUgd2UgcG90ZW50aWFsbHkgZXhl
Y3V0ZSBhcmliaXRyYXJ5IEpTLgotICAgICAgICBpZiAoaXNBY2Nlc3NvcikKLSAgICAgICAgICAg
IHNsb3Quc2V0Q3VzdG9tQWNjZXNzb3IoYmFzZSwgZW50cnktPnByb3BlcnR5UHV0dGVyKCkpOwot
ICAgICAgICBlbHNlCi0gICAgICAgICAgICBzbG90LnNldEN1c3RvbVZhbHVlKGJhc2UsIGVudHJ5
LT5wcm9wZXJ0eVB1dHRlcigpKTsKLQotICAgICAgICBhdXRvIHJlc3VsdCA9IGNhbGxDdXN0b21T
ZXR0ZXIoZ2xvYmFsT2JqZWN0LCBlbnRyeS0+cHJvcGVydHlQdXR0ZXIoKSwgaXNBY2Nlc3Nvciwg
YmFzZSwgc2xvdC50aGlzVmFsdWUoKSwgdmFsdWUsIHByb3BlcnR5TmFtZSk7Ci0gICAgICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGZhbHNlKTsKLSAgICAgICAgaWYgKHJlc3VsdCAhPSBU
cmlTdGF0ZTo6SW5kZXRlcm1pbmF0ZSkKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQgPT0gVHJp
U3RhdGU6OlRydWU7Ci0KLSAgICAgICAgLy8gRklYTUU6IHRoaXNWYWx1ZSBtYXkgYmUgYW4gb2Jq
ZWN0IHdpdGggbm9uLWV4dGVuc2libGUgc3RydWN0dXJlIHdlIG11c3QgdGhyb3cgZm9yLgotICAg
ICAgICBpZiAoSlNPYmplY3QqIHRoaXNPYmplY3QgPSBqc0R5bmFtaWNDYXN0PEpTT2JqZWN0Kj4o
dm0sIHRoaXNWYWx1ZSkpCi0gICAgICAgICAgICB0aGlzT2JqZWN0LT5wdXREaXJlY3Qodm0sIHBy
b3BlcnR5TmFtZSwgdmFsdWUpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBy
ZXR1cm4gdHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsIHNsb3QuaXNTdHJpY3RNb2RlKCks
IFJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9yKTsKLX0KLQotLyoqCi0gKiBUaGlzIG9uZSBpcyBm
b3IgInB1dCIuCi0gKiBJdCBsb29rcyB1cCBhIGhhc2ggZW50cnkgZm9yIHRoZSBwcm9wZXJ0eSB0
byBiZSBzZXQuICBJZiBhbiBlbnRyeQotICogaXMgZm91bmQgaXQgc2V0cyB0aGUgdmFsdWUgYW5k
IHJldHVybnMgdHJ1ZSwgZWxzZSBpdCByZXR1cm5zIGZhbHNlLgotICovCi1pbmxpbmUgYm9vbCBs
b29rdXBQdXQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIHByb3Bl
cnR5TmFtZSwgSlNPYmplY3QqIGJhc2UsIEpTVmFsdWUgdmFsdWUsIGNvbnN0IEhhc2hUYWJsZSYg
dGFibGUsIFB1dFByb3BlcnR5U2xvdCYgc2xvdCwgYm9vbCYgcHV0UmVzdWx0KQotewotICAgIGNv
bnN0IEhhc2hUYWJsZVZhbHVlKiBlbnRyeSA9IHRhYmxlLmVudHJ5KHByb3BlcnR5TmFtZSk7Ci0K
LSAgICBpZiAoIWVudHJ5KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBwdXRSZXN1bHQg
PSBwdXRFbnRyeShnbG9iYWxPYmplY3QsIHRhYmxlLmNsYXNzRm9yVGhpcywgZW50cnksIGJhc2Us
IGJhc2UsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpOwotICAgIHJldHVybiB0cnVlOwotfQot
CiBpbmxpbmUgdm9pZCByZWlmeVN0YXRpY1Byb3BlcnR5KFZNJiB2bSwgY29uc3QgQ2xhc3NJbmZv
KiBjbGFzc0luZm8sIGNvbnN0IFByb3BlcnR5TmFtZSYgcHJvcGVydHlOYW1lLCBjb25zdCBIYXNo
VGFibGVWYWx1ZSYgdmFsdWUsIEpTT2JqZWN0JiB0aGlzT2JqKQogewogICAgIGlmICh2YWx1ZS5h
dHRyaWJ1dGVzKCkgJiBQcm9wZXJ0eUF0dHJpYnV0ZTo6QnVpbHRpbikgewpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlTbG90LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlTbG90LmgJKHJldmlzaW9uIDI3NTc4
NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5U2xvdC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00Nyw2ICs0Nyw3IEBAIGVudW0gY2xhc3MgUHJvcGVydHlBdHRyaWJ1dGUg
OiB1bnNpZ25lZCAKICAgICBDdXN0b21WYWx1ZSAgICAgICA9IDEgPDwgNiwKICAgICBDdXN0b21B
Y2Nlc3Nvck9yVmFsdWUgPSBDdXN0b21BY2Nlc3NvciB8IEN1c3RvbVZhbHVlLAogICAgIEFjY2Vz
c29yT3JDdXN0b21BY2Nlc3Nvck9yVmFsdWUgPSBBY2Nlc3NvciB8IEN1c3RvbUFjY2Vzc29yIHwg
Q3VzdG9tVmFsdWUsCisgICAgUmVhZE9ubHlPckFjY2Vzc29yT3JDdXN0b21BY2Nlc3NvciA9IFJl
YWRPbmx5IHwgQWNjZXNzb3IgfCBDdXN0b21BY2Nlc3NvciwKIAogICAgIC8vIFRoaW5ncyB0aGF0
IGFyZSB1c2VkIGJ5IHN0YXRpYyBoYXNodGFibGVzIGFyZSBub3QgaW4gdGhlIGF0dHJpYnV0ZXMg
Ynl0ZSBpbiBQcm9wZXJ0eU1hcEVudHJ5LgogICAgIEZ1bmN0aW9uICAgICAgICAgID0gMSA8PCA4
LCAgLy8gcHJvcGVydHkgaXMgYSBmdW5jdGlvbiAtIG9ubHkgdXNlZCBieSBzdGF0aWMgaGFzaHRh
YmxlcwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJveHlPYmplY3QuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3h5T2JqZWN0
LmNwcAkocmV2aXNpb24gMjc1Nzg3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
UHJveHlPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NjQsNiArNDY0LDcgQEAgYm9vbCBQ
cm94eU9iamVjdDo6cHV0KEpTQ2VsbCogY2VsbCwgSlNHbAogewogICAgIFZNJiB2bSA9IGdsb2Jh
bE9iamVjdC0+dm0oKTsKICAgICBzbG90LmRpc2FibGVDYWNoaW5nKCk7CisgICAgc2xvdC5zZXRJ
c1RhaW50ZWRCeU9wYXF1ZU9iamVjdCgpOwogCiAgICAgUHJveHlPYmplY3QqIHRoaXNPYmplY3Qg
PSBqc0Nhc3Q8UHJveHlPYmplY3QqPihjZWxsKTsKICAgICBhdXRvIHBlcmZvcm1EZWZhdWx0UHV0
ID0gWyZdICgpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3h5T2Jq
ZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJveHlP
YmplY3QuaAkocmV2aXNpb24gMjc1Nzg3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvUHJveHlPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsNyBAQCBjbGFzcyBQ
cm94eU9iamVjdCBmaW5hbCA6IHB1YmxpYyBKU05vbkZpCiBwdWJsaWM6CiAgICAgdHlwZWRlZiBK
U05vbkZpbmFsT2JqZWN0IEJhc2U7CiAKLSAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0
cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBPdmVycmlkZXNHZXRPd25Qcm9w
ZXJ0eVNsb3QgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eU5hbWVzIHwgT3ZlcnJpZGVzR2V0UHJv
dG90eXBlIHwgT3ZlcnJpZGVzR2V0Q2FsbERhdGEgfCBJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlT
bG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgUHJvaGliaXRzUHJvcGVydHlDYWNo
aW5nOworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNl
OjpTdHJ1Y3R1cmVGbGFncyB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRl
c0dldE93blByb3BlcnR5TmFtZXMgfCBPdmVycmlkZXNHZXRQcm90b3R5cGUgfCBPdmVycmlkZXNH
ZXRDYWxsRGF0YSB8IE92ZXJyaWRlc1B1dCB8IEludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RC
eUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8gfCBQcm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmc7
CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4K
ICAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1B1dFByb3BlcnR5U2xvdC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1B1dFByb3BlcnR5U2xvdC5oCShyZXZpc2lv
biAyNzU3ODcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9QdXRQcm9wZXJ0eVNs
b3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsNyArMzcsNyBAQCBjbGFzcyBKU0Z1bmN0aW9uOwog
Y2xhc3MgUHV0UHJvcGVydHlTbG90IHsKIHB1YmxpYzoKICAgICBlbnVtIFR5cGUgOiB1aW50OF90
IHsgVW5jYWNoYWJsZSwgRXhpc3RpbmdQcm9wZXJ0eSwgTmV3UHJvcGVydHksIFNldHRlclByb3Bl
cnR5LCBDdXN0b21WYWx1ZSwgQ3VzdG9tQWNjZXNzb3IgfTsKLSAgICBlbnVtIENvbnRleHQgeyBV
bmtub3duQ29udGV4dCwgUHV0QnlJZCwgUHV0QnlJZEV2YWwgfTsKKyAgICBlbnVtIENvbnRleHQg
eyBVbmtub3duQ29udGV4dCwgUHV0QnlJZCwgUHV0QnlJZEV2YWwsIFJlZmxlY3RTZXQgfTsKICAg
ICB1c2luZyBQdXRWYWx1ZUZ1bmMgPSBKU0M6OlB1dFZhbHVlRnVuYzsKICAgICB1c2luZyBQdXRW
YWx1ZUZ1bmNXaXRoUHRyID0gSlNDOjpQdXRWYWx1ZUZ1bmNXaXRoUHRyOwogCkBAIC0xMTYsNiAr
MTE2LDggQEAgcHVibGljOgogICAgIGJvb2wgaXNDYWNoZWFibGVDdXN0b20oKSBjb25zdCB7IHJl
dHVybiBpc0NhY2hlYWJsZSgpICYmIChtX3R5cGUgPT0gQ3VzdG9tVmFsdWUgfHwgbV90eXBlID09
IEN1c3RvbUFjY2Vzc29yKSAmJiAhIW1fcHV0RnVuY3Rpb247IH0KICAgICBib29sIGlzQ3VzdG9t
QWNjZXNzb3IoKSBjb25zdCB7IHJldHVybiBpc0NhY2hlYWJsZSgpICYmIG1fdHlwZSA9PSBDdXN0
b21BY2Nlc3NvcjsgfQogICAgIGJvb2wgaXNJbml0aWFsaXphdGlvbigpIGNvbnN0IHsgcmV0dXJu
IG1faXNJbml0aWFsaXphdGlvbjsgfQorICAgIGJvb2wgaXNUYWludGVkQnlPcGFxdWVPYmplY3Qo
KSBjb25zdCB7IHJldHVybiBtX2lzVGFpbnRlZEJ5T3BhcXVlT2JqZWN0OyB9CisgICAgdm9pZCBz
ZXRJc1RhaW50ZWRCeU9wYXF1ZU9iamVjdCgpIHsgbV9pc1RhaW50ZWRCeU9wYXF1ZU9iamVjdCA9
IHRydWU7IH0KIAogICAgIFByb3BlcnR5T2Zmc2V0IGNhY2hlZE9mZnNldCgpIGNvbnN0CiAgICAg
ewpAQCAtMTM1LDYgKzEzNyw3IEBAIHByaXZhdGU6CiAgICAgUHJvcGVydHlPZmZzZXQgbV9vZmZz
ZXQ7CiAgICAgYm9vbCBtX2lzU3RyaWN0TW9kZSA6IDE7CiAgICAgYm9vbCBtX2lzSW5pdGlhbGl6
YXRpb24gOiAxOworICAgIGJvb2wgbV9pc1RhaW50ZWRCeU9wYXF1ZU9iamVjdCB7IGZhbHNlIH07
CiAgICAgVHlwZSBtX3R5cGU7CiAgICAgdWludDhfdCBtX2NvbnRleHQ7CiAgICAgQ2FjaGVhYmls
aXR5VHlwZSBtX2NhY2hlYWJpbGl0eTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1JlZmxlY3RPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1JlZmxlY3RPYmplY3QuY3BwCShyZXZpc2lvbiAyNzU3ODcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWZsZWN0T2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjYwLDcgKzI2MCw3IEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihyZWZsZWN0T2JqZWN0
U2UKIAogICAgIC8vIERvIG5vdCByYWlzZSBhbnkgcmVhZG9ubHkgZXJyb3JzIHRoYXQgaGFwcGVu
IGluIHN0cmljdCBtb2RlLgogICAgIGJvb2wgc2hvdWxkVGhyb3dJZkNhbnRTZXQgPSBmYWxzZTsK
LSAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChyZWNlaXZlciwgc2hvdWxkVGhyb3dJZkNhbnRTZXQp
OworICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KHJlY2VpdmVyLCBzaG91bGRUaHJvd0lmQ2FudFNl
dCwgUHV0UHJvcGVydHlTbG90OjpSZWZsZWN0U2V0KTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4o
c2NvcGUsIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4odGFyZ2V0T2JqZWN0LT5tZXRob2RUYWJs
ZSh2bSktPnB1dCh0YXJnZXRPYmplY3QsIGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCBjYWxs
RnJhbWUtPmFyZ3VtZW50KDIpLCBzbG90KSkpKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBPYmplY3QuY3BwCShyZXZpc2lvbiAyNzU3ODcpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBPYmplY3QuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMzQsMTkgKzEzNCwyNCBAQCBKU0NfREVGSU5FX0NVU1RPTV9TRVRURVIocmVn
RXhwT2JqZWN0U2V0CiBib29sIFJlZ0V4cE9iamVjdDo6cHV0KEpTQ2VsbCogY2VsbCwgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1
ZSB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBzbG90KQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9i
amVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAg
ICAgUmVnRXhwT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PFJlZ0V4cE9iamVjdCo+KGNlbGwp
OwogCi0gICAgaWYgKFVOTElLRUxZKGlzVGhpc1ZhbHVlQWx0ZXJlZChzbG90LCB0aGlzT2JqZWN0
KSkpCi0gICAgICAgIHJldHVybiBvcmRpbmFyeVNldFNsb3coZ2xvYmFsT2JqZWN0LCB0aGlzT2Jq
ZWN0LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90LnRoaXNWYWx1ZSgpLCBzbG90LmlzU3RyaWN0
TW9kZSgpKTsKLQogICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gdm0ucHJvcGVydHlOYW1lcy0+bGFz
dEluZGV4KSB7CisgICAgICAgIGlmICghdGhpc09iamVjdC0+bGFzdEluZGV4SXNXcml0YWJsZSgp
KQorICAgICAgICAgICAgcmV0dXJuIHR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCBzbG90
LmlzU3RyaWN0TW9kZSgpLCBSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcik7CisKKyAgICAgICAg
aWYgKFVOTElLRUxZKHNsb3QudGhpc1ZhbHVlKCkgIT0gdGhpc09iamVjdCkpCisgICAgICAgICAg
ICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTT2JqZWN0OjpkZWZpbmVQcm9wZXJ0eU9uUmVj
ZWl2ZXIoZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KSk7CisKICAgICAg
ICAgYm9vbCByZXN1bHQgPSB0aGlzT2JqZWN0LT5zZXRMYXN0SW5kZXgoZ2xvYmFsT2JqZWN0LCB2
YWx1ZSwgc2xvdC5pc1N0cmljdE1vZGUoKSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIGZhbHNlKTsKICAgICAgICAgc2xvdC5zZXRDdXN0b21WYWx1ZSh0aGlzT2JqZWN0LCBz
bG90LmlzU3RyaWN0TW9kZSgpCiAgICAgICAgICAgICA/IHJlZ0V4cE9iamVjdFNldExhc3RJbmRl
eFN0cmljdAogICAgICAgICAgICAgOiByZWdFeHBPYmplY3RTZXRMYXN0SW5kZXhOb25TdHJpY3Qp
OwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KLSAgICByZXR1cm4gQmFzZTo6cHV0KGNl
bGwsIGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCk7CisgICAgUkVMRUFT
RV9BTkRfUkVUVVJOKHNjb3BlLCBCYXNlOjpwdXQoY2VsbCwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0
eU5hbWUsIHZhbHVlLCBzbG90KSk7CiB9CiAKIFN0cmluZyBSZWdFeHBPYmplY3Q6OnRvU3RyaW5n
TmFtZShjb25zdCBKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KikKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5oCShyZXZpc2lvbiAyNzU3ODcpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBPYmplY3QuaAkod29ya2luZyBj
b3B5KQpAQCAtMzAsNyArMzAsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIGNsYXNzIFJlZ0V4cE9iamVj
dCBmaW5hbCA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKIHB1YmxpYzoKICAgICB1c2luZyBC
YXNlID0gSlNOb25GaW5hbE9iamVjdDsKLSAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0
cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBPdmVycmlkZXNHZXRPd25Qcm9w
ZXJ0eVNsb3QgfCBPdmVycmlkZXNHZXRPd25TcGVjaWFsUHJvcGVydHlOYW1lczsKKyAgICBzdGF0
aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxh
Z3MgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNHZXRPd25TcGVjaWFs
UHJvcGVydHlOYW1lcyB8IE92ZXJyaWRlc1B1dDsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENl
bGxUeXBlLCBTdWJzcGFjZUFjY2VzcyBtb2RlPgogICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vi
c3BhY2VGb3IoVk0mIHZtKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3Ry
aW5nT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TdHJpbmdPYmplY3QuY3BwCShyZXZpc2lvbiAyNzU3ODcpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TdHJpbmdPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OCwxMSAr
NjgsMTAgQEAgYm9vbCBTdHJpbmdPYmplY3Q6OnB1dChKU0NlbGwqIGNlbGwsIEpTRwogCiAgICAg
U3RyaW5nT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PFN0cmluZ09iamVjdCo+KGNlbGwpOwog
Ci0gICAgaWYgKFVOTElLRUxZKGlzVGhpc1ZhbHVlQWx0ZXJlZChzbG90LCB0aGlzT2JqZWN0KSkp
IAotICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIG9yZGluYXJ5U2V0U2xvdyhnbG9i
YWxPYmplY3QsIHRoaXNPYmplY3QsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QudGhpc1ZhbHVl
KCksIHNsb3QuaXNTdHJpY3RNb2RlKCkpKTsKLQogICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gdm0u
cHJvcGVydHlOYW1lcy0+bGVuZ3RoKQogICAgICAgICByZXR1cm4gdHlwZUVycm9yKGdsb2JhbE9i
amVjdCwgc2NvcGUsIHNsb3QuaXNTdHJpY3RNb2RlKCksIFJlYWRvbmx5UHJvcGVydHlXcml0ZUVy
cm9yKTsKKyAgICBpZiAoVU5MSUtFTFkoc2xvdC50aGlzVmFsdWUoKSAhPSB0aGlzT2JqZWN0KSkK
KyAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU09iamVjdDo6cHV0KGNlbGwsIGds
b2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCkpOwogICAgIGlmIChPcHRpb25h
bDx1aW50MzJfdD4gaW5kZXggPSBwYXJzZUluZGV4KHByb3BlcnR5TmFtZSkpIAogICAgICAgICBS
RUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIHB1dEJ5SW5kZXgoY2VsbCwgZ2xvYmFsT2JqZWN0LCBp
bmRleC52YWx1ZSgpLCB2YWx1ZSwgc2xvdC5pc1N0cmljdE1vZGUoKSkpOwogICAgIFJFTEVBU0Vf
QU5EX1JFVFVSTihzY29wZSwgSlNPYmplY3Q6OnB1dChjZWxsLCBnbG9iYWxPYmplY3QsIHByb3Bl
cnR5TmFtZSwgdmFsdWUsIHNsb3QpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1N0cmluZ09iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1N0cmluZ09iamVjdC5oCShyZXZpc2lvbiAyNzU3ODcpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TdHJpbmdPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNyAr
MjgsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIGNsYXNzIFN0cmluZ09iamVjdCA6IHB1YmxpYyBKU1dy
YXBwZXJPYmplY3QgewogcHVibGljOgogICAgIHVzaW5nIEJhc2UgPSBKU1dyYXBwZXJPYmplY3Q7
Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0
cnVjdHVyZUZsYWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzR2V0
T3duUHJvcGVydHlOYW1lcyB8IEludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZl
bldoZW5MZW5ndGhJc05vdFplcm87CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1
Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVy
dHlTbG90IHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlOYW1lcyB8IE92ZXJyaWRlc1B1dCB8IElu
dGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm87
CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4KICAgICBzdGF0
aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1N0cmluZ1Byb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nUHJvdG90eXBlLmNwcAkocmV2aXNpb24gMjc1
Nzg3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nUHJvdG90eXBlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTIxLDkgKzEyMSw5IEBAIFN0cmluZ1Byb3RvdHlwZTo6U3Ry
aW5nUHJvdG90eXBlKFZNJiB2bSwKIHsKIH0KIAotdm9pZCBTdHJpbmdQcm90b3R5cGU6OmZpbmlz
aENyZWF0aW9uKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNTdHJpbmcq
IG5hbWVBbmRNZXNzYWdlKQordm9pZCBTdHJpbmdQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKFZN
JiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKIHsKLSAgICBCYXNlOjpmaW5pc2hD
cmVhdGlvbih2bSwgbmFtZUFuZE1lc3NhZ2UpOworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZt
LCBqc0VtcHR5U3RyaW5nKHZtKSk7CiAgICAgQVNTRVJUKGluaGVyaXRzKHZtLCBpbmZvKCkpKTsK
IAogICAgIEpTQ19OQVRJVkVfSU5UUklOU0lDX0ZVTkNUSU9OX1dJVEhPVVRfVFJBTlNJVElPTih2
bS5wcm9wZXJ0eU5hbWVzLT50b1N0cmluZywgc3RyaW5nUHJvdG9GdW5jVG9TdHJpbmcsIHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pLCAwLCBTdHJpbmdQ
cm90b3R5cGVWYWx1ZU9mSW50cmluc2ljKTsKQEAgLTE2NSwxNCArMTY1LDEyIEBAIHZvaWQgU3Ry
aW5nUHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbihWTSYKICAgICBwdXREaXJlY3RXaXRob3V0VHJh
bnNpdGlvbih2bSwgdm0ucHJvcGVydHlOYW1lcy0+aXRlcmF0b3JTeW1ib2wsIGl0ZXJhdG9yRnVu
Y3Rpb24sIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0p
KTsKIAogICAgIC8vIFRoZSBjb25zdHJ1Y3RvciB3aWxsIGJlIGFkZGVkIGxhdGVyLCBhZnRlciBT
dHJpbmdDb25zdHJ1Y3RvciBoYXMgYmVlbiBidWlsdAotICAgIHB1dERpcmVjdFdpdGhvdXRUcmFu
c2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgsIGpzTnVtYmVyKDApLCBQcm9wZXJ0
eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSB8IFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IFBy
b3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7CiB9CiAKIFN0cmluZ1Byb3RvdHlwZSogU3RyaW5n
UHJvdG90eXBlOjpjcmVhdGUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSkKIHsKLSAgICBKU1N0cmluZyogZW1wdHkgPSBqc0VtcHR5U3Ry
aW5nKHZtKTsKICAgICBTdHJpbmdQcm90b3R5cGUqIHByb3RvdHlwZSA9IG5ldyAoTm90TnVsbCwg
YWxsb2NhdGVDZWxsPFN0cmluZ1Byb3RvdHlwZT4odm0uaGVhcCkpIFN0cmluZ1Byb3RvdHlwZSh2
bSwgc3RydWN0dXJlKTsKLSAgICBwcm90b3R5cGUtPmZpbmlzaENyZWF0aW9uKHZtLCBnbG9iYWxP
YmplY3QsIGVtcHR5KTsKKyAgICBwcm90b3R5cGUtPmZpbmlzaENyZWF0aW9uKHZtLCBnbG9iYWxP
YmplY3QpOwogICAgIHJldHVybiBwcm90b3R5cGU7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1N0cmluZ1Byb3RvdHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ1Byb3RvdHlwZS5oCShyZXZpc2lvbiAyNzU3ODcp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdQcm90b3R5cGUuaAkod29y
a2luZyBjb3B5KQpAQCAtNDUsNyArNDUsNyBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAgICAgU3Ry
aW5nUHJvdG90eXBlKFZNJiwgU3RydWN0dXJlKik7Ci0gICAgdm9pZCBmaW5pc2hDcmVhdGlvbihW
TSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNTdHJpbmcqKTsKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9u
KFZNJiwgSlNHbG9iYWxPYmplY3QqKTsKIH07CiBTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9T
SEFSQUJMRShTdHJpbmdQcm90b3R5cGUsIFN0cmluZ09iamVjdCk7CiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAkocmV2aXNpb24gMjc1Nzg3KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTkwLDExICsxOTAsNiBAQCB2b2lkIFN0cnVjdHVyZTo6dmFsaWRhdGVGbGFncygp
CiAgICAgaWYgKG92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXgpCiAgICAgICAgIFJF
TEVBU0VfQVNTRVJUKHR5cGVJbmZvKCkuaW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5k
ZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybygpKTsKIAotICAgIGJvb2wgb3ZlcnJpZGVzUHV0UHJv
cGVydHlTZWN1cml0eUNoZWNrID0KLSAgICAgICAgbWV0aG9kVGFibGUuZG9QdXRQcm9wZXJ0eVNl
Y3VyaXR5Q2hlY2sgIT0gSlNPYmplY3Q6OmRvUHV0UHJvcGVydHlTZWN1cml0eUNoZWNrCi0gICAg
ICAgICYmIG1ldGhvZFRhYmxlLmRvUHV0UHJvcGVydHlTZWN1cml0eUNoZWNrICE9IEpTQ2VsbDo6
ZG9QdXRQcm9wZXJ0eVNlY3VyaXR5Q2hlY2s7Ci0gICAgUkVMRUFTRV9BU1NFUlQob3ZlcnJpZGVz
UHV0UHJvcGVydHlTZWN1cml0eUNoZWNrID09IHR5cGVJbmZvKCkuaGFzUHV0UHJvcGVydHlTZWN1
cml0eUNoZWNrKCkpOwotCiAgICAgYm9vbCBvdmVycmlkZXNHZXRPd25Qcm9wZXJ0eU5hbWVzID0K
ICAgICAgICAgbWV0aG9kVGFibGUuZ2V0T3duUHJvcGVydHlOYW1lcyAhPSBKU09iamVjdDo6Z2V0
T3duUHJvcGVydHlOYW1lcwogICAgICAgICAmJiBtZXRob2RUYWJsZS5nZXRPd25Qcm9wZXJ0eU5h
bWVzICE9IEpTQ2VsbDo6Z2V0T3duUHJvcGVydHlOYW1lczsKQEAgLTIwOSw2ICsyMDQsMTggQEAg
dm9pZCBTdHJ1Y3R1cmU6OnZhbGlkYXRlRmxhZ3MoKQogICAgICAgICBtZXRob2RUYWJsZS5nZXRQ
cm90b3R5cGUgIT0gc3RhdGljX2Nhc3Q8TWV0aG9kVGFibGU6OkdldFByb3RvdHlwZUZ1bmN0aW9u
UHRyPihKU09iamVjdDo6Z2V0UHJvdG90eXBlKQogICAgICAgICAmJiBtZXRob2RUYWJsZS5nZXRQ
cm90b3R5cGUgIT0gSlNDZWxsOjpnZXRQcm90b3R5cGU7CiAgICAgUkVMRUFTRV9BU1NFUlQob3Zl
cnJpZGVzR2V0UHJvdG90eXBlID09IHR5cGVJbmZvKCkub3ZlcnJpZGVzR2V0UHJvdG90eXBlKCkp
OworCisgICAgYm9vbCBvdmVycmlkZXNQdXQgPQorICAgICAgICBtZXRob2RUYWJsZS5wdXQgIT0g
SlNPYmplY3Q6OnB1dAorICAgICAgICAmJiBtZXRob2RUYWJsZS5wdXQgIT0gSlNDZWxsOjpwdXQ7
CisgICAgUkVMRUFTRV9BU1NFUlQob3ZlcnJpZGVzUHV0ID09IHR5cGVJbmZvKCkub3ZlcnJpZGVz
UHV0KCkpOworCisgICAgYm9vbCBvdmVycmlkZXNEZWZpbmVPd25Qcm9wZXJ0eSA9CisgICAgICAg
IG1ldGhvZFRhYmxlLmRlZmluZU93blByb3BlcnR5ICE9IEpTT2JqZWN0OjpkZWZpbmVPd25Qcm9w
ZXJ0eQorICAgICAgICAmJiBtZXRob2RUYWJsZS5kZWZpbmVPd25Qcm9wZXJ0eSAhPSBKU0NlbGw6
OmRlZmluZU93blByb3BlcnR5OworCisgICAgaWYgKG92ZXJyaWRlc0RlZmluZU93blByb3BlcnR5
KQorICAgICAgICBSRUxFQVNFX0FTU0VSVChvdmVycmlkZXNQdXQpOwogfQogI2Vsc2UKIGlubGlu
ZSB2b2lkIFN0cnVjdHVyZTo6dmFsaWRhdGVGbGFncygpIHsgfQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3Rvb2xzL0pTRG9sbGFyVk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS90b29scy9KU0RvbGxhclZNLmNwcAkocmV2aXNpb24gMjc1Nzg3KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0pTRG9sbGFyVk0uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC02ODcsOSArNjg3LDExIEBAIEpTQ19ERUZJTkVfQ1VTVE9NX0dFVFRFUihydW50aW1lQXJyYXlM
ZW4KICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKHRoaXNPYmplY3QtPmdldExl
bmd0aCgpKSk7CiB9CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgQ29tcGFjdEhhc2hJbmRleCBzdGF0
aWNDdXN0b21BY2Nlc3NvclRhYmxlSW5kZXhbMl0gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IENv
bXBhY3RIYXNoSW5kZXggc3RhdGljQ3VzdG9tQWNjZXNzb3JUYWJsZUluZGV4WzRdID0gewogICAg
IHsgMCwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAorICAgIHsgMSwgLTEgfSwKKyAgICB7IC0xLCAt
MSB9LAogfTsKIAogc3RhdGljIEpTQ19ERUNMQVJFX0NVU1RPTV9HRVRURVIodGVzdFN0YXRpY0Fj
Y2Vzc29yR2V0dGVyKTsKQEAgLTcxMiwxOSArNzE0LDIzIEBAIEpTQ19ERUZJTkVfQ1VTVE9NX1NF
VFRFUih0ZXN0U3RhdGljQWNjZXMKIHsKICAgICBEb2xsYXJWTUFzc2VydFNjb3BlIGFzc2VydFNj
b3BlOwogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHRocm93U2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICAKLSAgICBKU09iamVjdCogdGhpc09i
amVjdCA9IGpzRHluYW1pY0Nhc3Q8SlNPYmplY3QqPih2bSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNW
YWx1ZSkpOworICAgIEpTVmFsdWUgcmVjZWl2ZXIgPSBKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVl
KTsKKyAgICBKU09iamVjdCogdGhpc09iamVjdCA9IHJlY2VpdmVyLmlzT2JqZWN0KCkgPyBhc09i
amVjdChyZWNlaXZlcikgOiByZWNlaXZlci5zeW50aGVzaXplUHJvdG90eXBlKGdsb2JhbE9iamVj
dCk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CiAgICAgUkVM
RUFTRV9BU1NFUlQodGhpc09iamVjdCk7CiAKICAgICByZXR1cm4gdGhpc09iamVjdC0+cHV0RGly
ZWN0KHZtLCBQcm9wZXJ0eU5hbWUoSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInRlc3RGaWVs
ZCIpKSwgSlNWYWx1ZTo6ZGVjb2RlKHZhbHVlKSk7CiB9CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3Qg
SGFzaFRhYmxlVmFsdWUgc3RhdGljQ3VzdG9tQWNjZXNzb3JUYWJsZVZhbHVlc1sxXSA9IHsKK3N0
YXRpYyBjb25zdCBzdHJ1Y3QgSGFzaFRhYmxlVmFsdWUgc3RhdGljQ3VzdG9tQWNjZXNzb3JUYWJs
ZVZhbHVlc1syXSA9IHsKICAgICB7ICJ0ZXN0U3RhdGljQWNjZXNzb3IiLCBzdGF0aWNfY2FzdDx1
bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkN1c3RvbUFjY2Vzc29yKSwgTm9JbnRyaW5zaWMs
IHsgKGludHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPih0ZXN0
U3RhdGljQWNjZXNzb3JHZXR0ZXIpLCAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHV0UHJvcGVydHlT
bG90OjpQdXRWYWx1ZUZ1bmM+KHRlc3RTdGF0aWNBY2Nlc3NvclB1dHRlcikgfSB9LAorICAgIHsg
InRlc3RTdGF0aWNBY2Nlc3NvclJlYWRPbmx5IiwgUHJvcGVydHlBdHRyaWJ1dGU6OkN1c3RvbUFj
Y2Vzc29yIHwgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5LCBOb0ludHJpbnNpYywgeyAoaW50
cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KHRlc3RTdGF0aWNB
Y2Nlc3NvckdldHRlciksIChpbnRwdHJfdClzdGF0aWNfY2FzdDxQdXRQcm9wZXJ0eVNsb3Q6OlB1
dFZhbHVlRnVuYz4oMCkgfSB9LAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBIYXNoVGFibGUg
c3RhdGljQ3VzdG9tQWNjZXNzb3JUYWJsZSA9Ci0gICAgeyAxLCAxLCB0cnVlLCBudWxscHRyLCBz
dGF0aWNDdXN0b21BY2Nlc3NvclRhYmxlVmFsdWVzLCBzdGF0aWNDdXN0b21BY2Nlc3NvclRhYmxl
SW5kZXggfTsKKyAgICB7IDIsIDMsIHRydWUsIG51bGxwdHIsIHN0YXRpY0N1c3RvbUFjY2Vzc29y
VGFibGVWYWx1ZXMsIHN0YXRpY0N1c3RvbUFjY2Vzc29yVGFibGVJbmRleCB9OwogCiBjbGFzcyBT
dGF0aWNDdXN0b21BY2Nlc3NvciA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKICAgICB1c2lu
ZyBCYXNlID0gSlNOb25GaW5hbE9iamVjdDsKQEAgLTc4OSwxNyArNzk1LDI1IEBAIEpTQ19ERUZJ
TkVfQ1VTVE9NX1NFVFRFUih0ZXN0U3RhdGljVmFsdWUKICAgICByZXR1cm4gdGhpc09iamVjdC0+
cHV0RGlyZWN0KHZtLCBQcm9wZXJ0eU5hbWUoSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInRl
c3RTdGF0aWNWYWx1ZSIpKSwgSlNWYWx1ZTo6ZGVjb2RlKHZhbHVlKSk7CiB9CiAKLXN0YXRpYyBj
b25zdCBzdHJ1Y3QgQ29tcGFjdEhhc2hJbmRleCBzdGF0aWNDdXN0b21WYWx1ZVRhYmxlSW5kZXhb
Ml0gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IENvbXBhY3RIYXNoSW5kZXggc3RhdGljQ3VzdG9t
VmFsdWVUYWJsZUluZGV4WzhdID0geworICAgIHsgMSwgLTEgfSwKKyAgICB7IC0xLCAtMSB9LAor
ICAgIHsgLTEsIC0xIH0sCisgICAgeyAtMSwgLTEgfSwKKyAgICB7IC0xLCAtMSB9LAorICAgIHsg
MiwgLTEgfSwKICAgICB7IDAsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKIH07CiAKLXN0YXRpYyBj
b25zdCBzdHJ1Y3QgSGFzaFRhYmxlVmFsdWUgc3RhdGljQ3VzdG9tVmFsdWVUYWJsZVZhbHVlc1sx
XSA9IHsKLSAgICB7ICJ0ZXN0U3RhdGljVmFsdWUiLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJv
cGVydHlBdHRyaWJ1dGU6OkN1c3RvbUFjY2Vzc29yKSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90
KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPih0ZXN0U3RhdGljVmFsdWVH
ZXR0ZXIpLCAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1
bmM+KHRlc3RTdGF0aWNWYWx1ZVB1dHRlcikgfSB9LAorc3RhdGljIGNvbnN0IHN0cnVjdCBIYXNo
VGFibGVWYWx1ZSBzdGF0aWNDdXN0b21WYWx1ZVRhYmxlVmFsdWVzWzNdID0geworICAgIHsgInRl
c3RTdGF0aWNWYWx1ZSIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6
Tm9uZSksIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6
OkdldFZhbHVlRnVuYz4odGVzdFN0YXRpY1ZhbHVlR2V0dGVyKSwgKGludHB0cl90KXN0YXRpY19j
YXN0PFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jPih0ZXN0U3RhdGljVmFsdWVQdXR0ZXIp
IH0gfSwKKyAgICB7ICJ0ZXN0U3RhdGljVmFsdWVOb1NldHRlciIsIHN0YXRpY19jYXN0PHVuc2ln
bmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6Tm9uZSksIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClz
dGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4odGVzdFN0YXRpY1ZhbHVlR2V0
dGVyKSwgKGludHB0cl90KXN0YXRpY19jYXN0PFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5j
PigwKSB9IH0sCisgICAgeyAidGVzdFN0YXRpY1ZhbHVlUmVhZE9ubHkiLCBzdGF0aWNfY2FzdDx1
bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5KSwgTm9JbnRyaW5zaWMsIHsgKGlu
dHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPih0ZXN0U3RhdGlj
VmFsdWVHZXR0ZXIpLCAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHV0UHJvcGVydHlTbG90OjpQdXRW
YWx1ZUZ1bmM+KDApIH0gfSwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgSGFzaFRhYmxlIHN0
YXRpY0N1c3RvbVZhbHVlVGFibGUgPQotICAgIHsgMSwgMSwgdHJ1ZSwgbnVsbHB0ciwgc3RhdGlj
Q3VzdG9tVmFsdWVUYWJsZVZhbHVlcywgc3RhdGljQ3VzdG9tVmFsdWVUYWJsZUluZGV4IH07Cisg
ICAgeyAzLCA3LCB0cnVlLCBudWxscHRyLCBzdGF0aWNDdXN0b21WYWx1ZVRhYmxlVmFsdWVzLCBz
dGF0aWNDdXN0b21WYWx1ZVRhYmxlSW5kZXggfTsKIAogY2xhc3MgU3RhdGljQ3VzdG9tVmFsdWUg
OiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7CiAgICAgdXNpbmcgQmFzZSA9IEpTTm9uRmluYWxP
YmplY3Q7CkBAIC04MzcsNiArODUxLDcgQEAgcHVibGljOgogCiBjbGFzcyBPYmplY3REb2luZ1Np
ZGVFZmZlY3RQdXRXaXRob3V0Q29ycmVjdFNsb3RTdGF0dXMgOiBwdWJsaWMgSlNOb25GaW5hbE9i
amVjdCB7CiAgICAgdXNpbmcgQmFzZSA9IEpTTm9uRmluYWxPYmplY3Q7CisgICAgc3RhdGljIGNv
bnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwg
T3ZlcnJpZGVzUHV0OwogcHVibGljOgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBT
dWJzcGFjZUFjY2Vzcz4KICAgICBzdGF0aWMgQ29tcGxldGVTdWJzcGFjZSogc3Vic3BhY2VGb3Io
Vk0mIHZtKQpJbmRleDogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjc1Nzg3KQorKysgU291cmNlL1dlYkNv
cmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjcgQEAKKzIwMjEtMDQtMDkg
IEFsZXhleSBTaHZheWthICA8c2h2YWlrYWxlc2hAZ21haWwuY29tPgorCisgICAgICAgIEludHJv
ZHVjZSBPdmVycmlkZXNQdXRbQnlJbmRleF0gdHlwZSBpbmZvIGZsYWdzCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTc5MTYKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NV2lu
ZG93Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NV2luZG93OjpwdXQpOgorICAg
ICAgICAoV2ViQ29yZTo6SlNET01XaW5kb3c6OmRvUHV0UHJvcGVydHlTZWN1cml0eUNoZWNrKTog
RGVsZXRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0xvY2F0aW9uQ3VzdG9tLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkpTTG9jYXRpb246OmRvUHV0UHJvcGVydHlTZWN1cml0eUNoZWNrKTog
RGVsZXRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1JlbW90ZURPTVdpbmRvd0N1c3RvbS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpKU1JlbW90ZURPTVdpbmRvdzo6cHV0KToKKyAgICAgICAg
KiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbToKKyAgICAgICAgKEdlbmVyYXRl
UHV0KToKKyAgICAgICAgKEdlbmVyYXRlSGVhZGVyKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0RG9tYWluU2VjdXJpdHkuaDoKKyAgICAgICAgKiBicmlkZ2Uvb2Jq
Yy9vYmpjX3J1bnRpbWUuaDoKKyAgICAgICAgKiBicmlkZ2UvcnVudGltZV9hcnJheS5oOgorICAg
ICAgICAqIGJyaWRnZS9ydW50aW1lX29iamVjdC5jcHA6CisgICAgICAgIChKU0M6OkJpbmRpbmdz
OjpSdW50aW1lT2JqZWN0OjpwdXQpOgorICAgICAgICAqIGJyaWRnZS9ydW50aW1lX29iamVjdC5o
OgorCiAyMDIxLTA0LTA5ICBKZWFuLVl2ZXMgQXZlbmFyZCAgPGp5YUBhcHBsZS5jb20+CiAKICAg
ICAgICAgTWVkaWEgU2Vzc2lvbiBhY3Rpb24gc2hvdWxkIGRlZmF1bHQgdG8gdGhlIE1lZGlhRWxl
bWVudCdzIGRlZmF1bHQgd2hlbiBubyBNZWRpYVNlc3Npb24gaGFuZGxlciBhcmUgc2V0CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0N1c3RvbS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20uY3Bw
CShyZXZpc2lvbiAyNzU3ODcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdp
bmRvd0N1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0OCwyMyArMjQ4LDYgQEAgYm9vbCBK
U0RPTVdpbmRvdzo6Z2V0T3duUHJvcGVydHlTbG90QnlJbgogICAgIHJldHVybiBCYXNlOjpnZXRP
d25Qcm9wZXJ0eVNsb3RCeUluZGV4KHRoaXNPYmplY3QsIGxleGljYWxHbG9iYWxPYmplY3QsIGlu
ZGV4LCBzbG90KTsKIH0KIAotdm9pZCBKU0RPTVdpbmRvdzo6ZG9QdXRQcm9wZXJ0eVNlY3VyaXR5
Q2hlY2soSlNPYmplY3QqIGNlbGwsIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0
LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQdXRQcm9wZXJ0eVNsb3QmKQotewotICAgIFZN
JiB2bSA9IGxleGljYWxHbG9iYWxPYmplY3QtPnZtKCk7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0RP
TVdpbmRvdyo+KGNlbGwpOwotCi0gICAgU3RyaW5nIGVycm9yTWVzc2FnZTsKLSAgICBpZiAoIUJp
bmRpbmdTZWN1cml0eTo6c2hvdWxkQWxsb3dBY2Nlc3NUb0RPTVdpbmRvdygqbGV4aWNhbEdsb2Jh
bE9iamVjdCwgdGhpc09iamVjdC0+d3JhcHBlZCgpLCBlcnJvck1lc3NhZ2UpKSB7Ci0gICAgICAg
IC8vIFdlIG9ubHkgYWxsb3cgc2V0dGluZyAibG9jYXRpb24iIGF0dHJpYnV0ZSBjcm9zcy1vcmln
aW4uCi0gICAgICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERh
dGEqPih2bS5jbGllbnREYXRhKS0+YnVpbHRpbk5hbWVzKCkubG9jYXRpb25QdWJsaWNOYW1lKCkp
Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHRocm93U2VjdXJpdHlFcnJvcigqbGV4aWNh
bEdsb2JhbE9iamVjdCwgc2NvcGUsIGVycm9yTWVzc2FnZSk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci19Ci0KIGJvb2wgSlNET01XaW5kb3c6OnB1dChKU0NlbGwqIGNlbGwsIEpTR2xvYmFsT2Jq
ZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1Zh
bHVlIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgVk0mIHZtID0gbGV4aWNh
bEdsb2JhbE9iamVjdC0+dm0oKTsKQEAgLTI3MiwxNyArMjU1LDEwIEBAIGJvb2wgSlNET01XaW5k
b3c6OnB1dChKU0NlbGwqIGNlbGwsIEpTR2wKIAogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nh
c3Q8SlNET01XaW5kb3cqPihjZWxsKTsKIAotICAgIFN0cmluZyBlcnJvck1lc3NhZ2U7Ci0gICAg
aWYgKCFCaW5kaW5nU2VjdXJpdHk6OnNob3VsZEFsbG93QWNjZXNzVG9ET01XaW5kb3coKmxleGlj
YWxHbG9iYWxPYmplY3QsIHRoaXNPYmplY3QtPndyYXBwZWQoKSwgZXJyb3JNZXNzYWdlKSkgewor
ICAgIGlmIChwcm9wZXJ0eU5hbWUgIT0gc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5j
bGllbnREYXRhKS0+YnVpbHRpbk5hbWVzKCkubG9jYXRpb25QdWJsaWNOYW1lKCkpIHsKICAgICAg
ICAgLy8gV2Ugb25seSBhbGxvdyBzZXR0aW5nICJsb2NhdGlvbiIgYXR0cmlidXRlIGNyb3NzLW9y
aWdpbi4KLSAgICAgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50
RGF0YSo+KHZtLmNsaWVudERhdGEpLT5idWlsdGluTmFtZXMoKS5sb2NhdGlvblB1YmxpY05hbWUo
KSkgewotICAgICAgICAgICAgYm9vbCBwdXRSZXN1bHQgPSBmYWxzZTsKLSAgICAgICAgICAgIGlm
IChsb29rdXBQdXQobGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCB0aGlzT2JqZWN0
LCB2YWx1ZSwgKnNfaW5mby5zdGF0aWNQcm9wSGFzaFRhYmxlLCBzbG90LCBwdXRSZXN1bHQpKQot
ICAgICAgICAgICAgICAgIHJldHVybiBwdXRSZXN1bHQ7CisgICAgICAgIGlmICghQmluZGluZ1Nl
Y3VyaXR5OjpzaG91bGRBbGxvd0FjY2Vzc1RvRE9NV2luZG93KGxleGljYWxHbG9iYWxPYmplY3Qs
IHRoaXNPYmplY3QtPndyYXBwZWQoKSwgVGhyb3dTZWN1cml0eUVycm9yKSkKICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICB0aHJvd1NlY3VyaXR5RXJyb3IoKmxl
eGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLCBlcnJvck1lc3NhZ2UpOwotICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgfQogCiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBCYXNlOjpwdXQo
dGhpc09iamVjdCwgbGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xv
dCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNMb2NhdGlvbkN1c3RvbS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNMb2NhdGlvbkN1
c3RvbS5jcHAJKHJldmlzaW9uIDI3NTc4NykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTTG9jYXRpb25DdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDgsMjMgKzEwOCw2IEBA
IGJvb2wgSlNMb2NhdGlvbjo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmQKICAgICBSRUxFQVNFX0FO
RF9SRVRVUk4oc2NvcGUsIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KG9iamVj
dCwgbGV4aWNhbEdsb2JhbE9iamVjdCwgaW5kZXgsIHNsb3QpKTsKIH0KIAotdm9pZCBKU0xvY2F0
aW9uOjpkb1B1dFByb3BlcnR5U2VjdXJpdHlDaGVjayhKU09iamVjdCogb2JqZWN0LCBKU0dsb2Jh
bE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwg
UHV0UHJvcGVydHlTbG90JikKLXsKLSAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTTG9j
YXRpb24qPihvYmplY3QpOwotICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVj
dCwgaW5mbygpKTsKLQotICAgIFZNJiB2bSA9IGxleGljYWxHbG9iYWxPYmplY3QtPnZtKCk7Ci0K
LSAgICAvLyBBbHdheXMgYWxsb3cgYXNzaWduaW5nIHRvIHRoZSB3aG9sZSBsb2NhdGlvbi4KLSAg
ICAvLyBIb3dldmVyLCBhbGxsb3dpbmcgYXNzaWduaW5nIG9mIHBpZWNlcyBtaWdodCBpbmFkdmVy
dGVudGx5IGRpc2Nsb3NlIHBhcnRzIG9mIHRoZSBvcmlnaW5hbCBsb2NhdGlvbi4KLSAgICAvLyBT
byBmYWxsIHRocm91Z2ggdG8gdGhlIGFjY2VzcyBjaGVjayBmb3IgdGhvc2UuCi0gICAgaWYgKHBy
b3BlcnR5TmFtZSA9PSBzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEp
LT5idWlsdGluTmFtZXMoKS5ocmVmUHVibGljTmFtZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICAvLyBCbG9jayBhY2Nlc3MgYW5kIHRocm93IGlmIHRoZXJlIGlzIGEgc2VjdXJpdHkgZXJyb3Iu
Ci0gICAgQmluZGluZ1NlY3VyaXR5OjpzaG91bGRBbGxvd0FjY2Vzc1RvRE9NV2luZG93KGxleGlj
YWxHbG9iYWxPYmplY3QsIHRoaXNPYmplY3QtPndyYXBwZWQoKS53aW5kb3coKSwgVGhyb3dTZWN1
cml0eUVycm9yKTsKLX0KLQogYm9vbCBKU0xvY2F0aW9uOjpwdXQoSlNDZWxsKiBjZWxsLCBKU0ds
b2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFt
ZSwgSlNWYWx1ZSB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBwdXRQcm9wZXJ0eVNsb3QpCiB7CiAg
ICAgVk0mIHZtID0gbGV4aWNhbEdsb2JhbE9iamVjdC0+dm0oKTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTUmVtb3RlRE9NV2luZG93Q3VzdG9tLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1JlbW90ZURPTVdpbmRvd0N1c3RvbS5jcHAJ
KHJldmlzaW9uIDI3NTc4NykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUmVtb3Rl
RE9NV2luZG93Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjgsMTEgKzY4LDEyIEBAIGJv
b2wgSlNSZW1vdGVET01XaW5kb3c6OnB1dChKU0NlbGwqIGNlbGwKIAogICAgIC8vIFdlIG9ubHkg
YWxsb3cgc2V0dGluZyAibG9jYXRpb24iIGF0dHJpYnV0ZSBjcm9zcy1vcmlnaW4uCiAgICAgaWYg
KHByb3BlcnR5TmFtZSA9PSBzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERh
dGEpLT5idWlsdGluTmFtZXMoKS5sb2NhdGlvblB1YmxpY05hbWUoKSkgewotICAgICAgICBib29s
IHB1dFJlc3VsdCA9IGZhbHNlOwotICAgICAgICBpZiAobG9va3VwUHV0KGxleGljYWxHbG9iYWxP
YmplY3QsIHByb3BlcnR5TmFtZSwgdGhpc09iamVjdCwgdmFsdWUsICpzX2luZm8uc3RhdGljUHJv
cEhhc2hUYWJsZSwgc2xvdCwgcHV0UmVzdWx0KSkKLSAgICAgICAgICAgIHJldHVybiBwdXRSZXN1
bHQ7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgYXV0byogc2V0dGVyID0gc19pbmZv
LnN0YXRpY1Byb3BIYXNoVGFibGUtPmVudHJ5KHByb3BlcnR5TmFtZSktPnByb3BlcnR5UHV0dGVy
KCk7CisgICAgICAgIHNldHRlcihsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1ZhbHVlOjplbmNvZGUo
c2xvdC50aGlzVmFsdWUoKSksIEpTVmFsdWU6OmVuY29kZSh2YWx1ZSksIHByb3BlcnR5TmFtZSk7
CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGZhbHNlKTsKKyAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgfQorCiAgICAgdGhyb3dTZWN1cml0eUVycm9yKCpsZXhpY2FsR2xvYmFs
T2JqZWN0LCBzY29wZSwgZXJyb3JNZXNzYWdlKTsKICAgICByZXR1cm4gZmFsc2U7CiB9CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JK
Uy5wbQkocmV2aXNpb24gMjc1Nzg3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy9Db2RlR2VuZXJhdG9ySlMucG0JKHdvcmtpbmcgY29weSkKQEAgLTExODAsNiArMTE4MCw4IEBA
IHN1YiBHZW5lcmF0ZVB1dAogICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIntcbiIpOwogICAgIHB1
c2goQCRvdXRwdXRBcnJheSwgIiAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PCR7Y2xhc3NO
YW1lfSo+KGNlbGwpO1xuIik7CiAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIEFTU0VSVF9H
Q19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTtcblxuIik7CisgICAgcHVzaChA
JG91dHB1dEFycmF5LCAiICAgIGlmIChVTkxJS0VMWSh0aGlzT2JqZWN0ICE9IHB1dFByb3BlcnR5
U2xvdC50aGlzVmFsdWUoKSkpXG4iKTsKKyAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgICAg
IHJldHVybiBKU09iamVjdDo6cHV0KHRoaXNPYmplY3QsIGxleGljYWxHbG9iYWxPYmplY3QsIHBy
b3BlcnR5TmFtZSwgdmFsdWUsIHB1dFByb3BlcnR5U2xvdCk7XG4iKTsKIAogICAgIHB1c2goQCRv
dXRwdXRBcnJheSwgIiAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKGxl
eGljYWxHbG9iYWxPYmplY3QtPnZtKCkpO1xuXG4iKTsKIApAQCAtMjk1NCwxMSArMjk1Niw2IEBA
IHN1YiBHZW5lcmF0ZUhlYWRlcgogICAgICAgICAkc3RydWN0dXJlRmxhZ3N7IkpTQzo6SW50ZXJj
ZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyJ9ID0g
MTsKICAgICB9CiAKLSAgICBpZiAoJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Q2hl
Y2tTZWN1cml0eX0pIHsKLSAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBzdGF0aWMg
dm9pZCBkb1B1dFByb3BlcnR5U2VjdXJpdHlDaGVjayhKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU0ds
b2JhbE9iamVjdCosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OlB1dFByb3BlcnR5U2xvdCYpO1xu
Iik7Ci0gICAgICAgICRzdHJ1Y3R1cmVGbGFnc3siSlNDOjpIYXNQdXRQcm9wZXJ0eVNlY3VyaXR5
Q2hlY2sifSA9IDE7Ci0gICAgfQotCiAgICAgaWYgKCRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmli
dXRlcy0+e1BsdWdpbn0gfHwgR2V0TmFtZWRTZXR0ZXJPcGVyYXRpb24oJGludGVyZmFjZSkpIHsK
ICAgICAgICAgJHN0cnVjdHVyZUZsYWdzeyJKU0M6OlByb2hpYml0c1Byb3BlcnR5Q2FjaGluZyJ9
ID0gMTsKICAgICB9CkBAIC0yOTcxLDYgKzI5NjgsNyBAQCBzdWIgR2VuZXJhdGVIZWFkZXIKICAg
ICBpZiAoSW5zdGFuY2VPdmVycmlkZXNQdXQoJGludGVyZmFjZSkpIHsKICAgICAgICAgcHVzaChA
aGVhZGVyQ29udGVudCwgIiAgICBzdGF0aWMgYm9vbCBwdXQoSlNDOjpKU0NlbGwqLCBKU0M6OkpT
R2xvYmFsT2JqZWN0KiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6SlNWYWx1ZSwgSlNDOjpQdXRQ
cm9wZXJ0eVNsb3QmKTtcbiIpOwogICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHN0
YXRpYyBib29sIHB1dEJ5SW5kZXgoSlNDOjpKU0NlbGwqLCBKU0M6OkpTR2xvYmFsT2JqZWN0Kiwg
dW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU0M6OkpTVmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpO1xu
Iik7CisgICAgICAgICRzdHJ1Y3R1cmVGbGFnc3siSlNDOjpPdmVycmlkZXNQdXQifSA9IDE7CiAg
ICAgfQogICAgIAogICAgIGlmIChJbnN0YW5jZU92ZXJyaWRlc0RlZmluZU93blByb3BlcnR5KCRp
bnRlcmZhY2UpKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0RG9tYWluU2VjdXJpdHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RG9tYWluU2VjdXJpdHkuaAkocmV2aXNpb24g
Mjc1Nzg3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dERvbWFpblNlY3VyaXR5LmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDcgKzM5LDYgQEAgcHVibGlj
OgogICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBjcmVhdGVQcm90b3R5cGUoSlNDOjpWTSYsIEpT
RE9NR2xvYmFsT2JqZWN0Jik7CiAgICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIHByb3RvdHlwZShK
U0M6OlZNJiwgSlNET01HbG9iYWxPYmplY3QmKTsKICAgICBzdGF0aWMgVGVzdERvbWFpblNlY3Vy
aXR5KiB0b1dyYXBwZWQoSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7Ci0gICAgc3RhdGljIHZvaWQg
ZG9QdXRQcm9wZXJ0eVNlY3VyaXR5Q2hlY2soSlNDOjpKU09iamVjdCosIEpTQzo6SlNHbG9iYWxP
YmplY3QqLCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpQdXRQcm9wZXJ0eVNsb3QmKTsKICAgICBz
dGF0aWMgdm9pZCBkZXN0cm95KEpTQzo6SlNDZWxsKik7CiAKICAgICBERUNMQVJFX0lORk87CkBA
IC01OSw3ICs1OCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vi
c3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKTsKICAgICBzdGF0aWMgdm9pZCBhbmFseXplSGVhcChK
U0NlbGwqLCBKU0M6OkhlYXBBbmFseXplciYpOwogcHVibGljOgotICAgIHN0YXRpYyBjb25zdGV4
cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEpTQzo6
SGFzUHV0UHJvcGVydHlTZWN1cml0eUNoZWNrIHwgSlNDOjpIYXNTdGF0aWNQcm9wZXJ0eVRhYmxl
OworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpT
dHJ1Y3R1cmVGbGFncyB8IEpTQzo6SGFzU3RhdGljUHJvcGVydHlUYWJsZTsKIHByb3RlY3RlZDoK
ICAgICBKU1Rlc3REb21haW5TZWN1cml0eShKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2Jq
ZWN0JiwgUmVmPFRlc3REb21haW5TZWN1cml0eT4mJik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JyaWRnZS9ydW50aW1lX2FycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYnJp
ZGdlL3J1bnRpbWVfYXJyYXkuaAkocmV2aXNpb24gMjc1Nzg3KQorKysgU291cmNlL1dlYkNvcmUv
YnJpZGdlL3J1bnRpbWVfYXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsNyArMzUsNyBAQCBu
YW1lc3BhY2UgSlNDIHsKIGNsYXNzIFJ1bnRpbWVBcnJheSBmaW5hbCA6IHB1YmxpYyBKU0FycmF5
IHsKIHB1YmxpYzoKICAgICB1c2luZyBCYXNlID0gSlNBcnJheTsKLSAgICBzdGF0aWMgY29uc3Rl
eHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBPdmVy
cmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eU5hbWVzIHwg
SW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVy
bzsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6
U3RydWN0dXJlRmxhZ3MgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNH
ZXRPd25Qcm9wZXJ0eU5hbWVzIHwgT3ZlcnJpZGVzUHV0IHwgSW50ZXJjZXB0c0dldE93blByb3Bl
cnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybzsKICAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBDZWxsVHlwZSwgSlNDOjpTdWJzcGFjZUFjY2Vzcz4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jy
aWRnZS9ydW50aW1lX29iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYnJp
ZGdlL3J1bnRpbWVfb2JqZWN0LmNwcAkocmV2aXNpb24gMjc1Nzg3KQorKysgU291cmNlL1dlYkNv
cmUvYnJpZGdlL3J1bnRpbWVfb2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg2LDYgKzE4
Niw5IEBAIGJvb2wgUnVudGltZU9iamVjdDo6cHV0KEpTQ2VsbCogY2VsbCwgSlMKICAgICBWTSYg
dm0gPSBsZXhpY2FsR2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKIAorICAgIGlmIChVTkxJS0VMWShjZWxsICE9IHNsb3QudGhpc1Zh
bHVlKCkpKQorICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEJhc2U6OnB1dChjZWxs
LCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KSk7CisKICAg
ICBSdW50aW1lT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PFJ1bnRpbWVPYmplY3QqPihjZWxs
KTsKICAgICBpZiAoIXRoaXNPYmplY3QtPm1faW5zdGFuY2UpIHsKICAgICAgICAgdGhyb3dSdW50
aW1lT2JqZWN0SW52YWxpZEFjY2Vzc0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHNjb3BlKTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX29iamVjdC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX29iamVjdC5oCShyZXZpc2lvbiAyNzU3
ODcpCisrKyBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcnVudGltZV9vYmplY3QuaAkod29ya2luZyBj
b3B5KQpAQCAtMzcsNyArMzcsNyBAQCBFeGNlcHRpb24qIHRocm93UnVudGltZU9iamVjdEludmFs
aWRBY2NlCiBjbGFzcyBXRUJDT1JFX0VYUE9SVCBSdW50aW1lT2JqZWN0IDogcHVibGljIEpTTm9u
RmluYWxPYmplY3QgewogcHVibGljOgogICAgIHVzaW5nIEJhc2UgPSBKU05vbkZpbmFsT2JqZWN0
OwotICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpT
dHJ1Y3R1cmVGbGFncyB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRlc0dl
dE93blByb3BlcnR5TmFtZXMgfCBPdmVycmlkZXNHZXRDYWxsRGF0YSB8IEdldE93blByb3BlcnR5
U2xvdE1heUJlV3JvbmdBYm91dERvbnRFbnVtOworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWdu
ZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IE92ZXJyaWRlc0dldE93
blByb3BlcnR5U2xvdCB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5TmFtZXMgfCBPdmVycmlkZXNH
ZXRDYWxsRGF0YSB8IE92ZXJyaWRlc1B1dCB8IEdldE93blByb3BlcnR5U2xvdE1heUJlV3JvbmdB
Ym91dERvbnRFbnVtOwogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0Rlc3RydWN0aW9u
ID0gdHJ1ZTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBKU0M6OlN1YnNwYWNl
QWNjZXNzPgpJbmRleDogU291cmNlL1dlYkNvcmUvYnJpZGdlL29iamMvb2JqY19ydW50aW1lLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYnJpZGdlL29iamMvb2JqY19ydW50aW1lLmgJ
KHJldmlzaW9uIDI3NTc4NykKKysrIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9vYmpjL29iamNfcnVu
dGltZS5oCSh3b3JraW5nIGNvcHkpCkBAIC05MSw3ICs5MSw3IEBAIHByaXZhdGU6CiBjbGFzcyBP
YmpjRmFsbGJhY2tPYmplY3RJbXAgZmluYWwgOiBwdWJsaWMgSlNEZXN0cnVjdGlibGVPYmplY3Qg
ewogcHVibGljOgogICAgIHVzaW5nIEJhc2UgPSBKU0Rlc3RydWN0aWJsZU9iamVjdDsKLSAgICBz
dGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJl
RmxhZ3MgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNHZXRDYWxsRGF0
YTsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6
U3RydWN0dXJlRmxhZ3MgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNH
ZXRDYWxsRGF0YSB8IE92ZXJyaWRlc1B1dDsKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVl
ZHNEZXN0cnVjdGlvbiA9IHRydWU7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwg
SlNDOjpTdWJzcGFjZUFjY2Vzcz4KSW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNzU3ODcpCisrKyBT
b3VyY2UvV2ViS2l0L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyIEBACisy
MDIxLTA0LTA5ICBBbGV4ZXkgU2h2YXlrYSAgPHNodmFpa2FsZXNoQGdtYWlsLmNvbT4KKworICAg
ICAgICBJbnRyb2R1Y2UgT3ZlcnJpZGVzUHV0W0J5SW5kZXhdIHR5cGUgaW5mbyBmbGFncworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE3OTE2CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJQcm9jZXNz
L1BsdWdpbnMvTmV0c2NhcGUvSlNOUE9iamVjdC5oOgorCiAyMDIxLTA0LTA5ICBXZW5zb24gSHNp
ZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgogCiAgICAgICAgIFdlYiBwcm9jZXNzIGNyYXNo
ZXMgaWYgaW1hZ2UgZXh0cmFjdGlvbiBpcyByZXF1ZXN0ZWQgZm9yIGFuIGVsZW1lbnQgdGhhdCBp
cyBwZW5kaW5nIGltYWdlIGV4dHJhY3Rpb24KSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9QbHVnaW5zL05ldHNjYXBlL0pTTlBPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9KU05QT2JqZWN0LmgJKHJldmlzaW9uIDI3
NTc4NykKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL0pTTlBP
YmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtNDQsNyArNDQsNyBAQCBjbGFzcyBOUFJ1bnRpbWVP
YmplY3RNYXA7CiBjbGFzcyBKU05QT2JqZWN0IGZpbmFsIDogcHVibGljIEpTQzo6SlNEZXN0cnVj
dGlibGVPYmplY3QgewogcHVibGljOgogICAgIHVzaW5nIEJhc2UgPSBKU0M6OkpTRGVzdHJ1Y3Rp
YmxlT2JqZWN0OwotICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3Mg
PSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90
IHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eU5hbWVzIHwgSlNDOjpPdmVycmlkZXNHZXRD
YWxsRGF0YSB8IEpTQzo6R2V0T3duUHJvcGVydHlTbG90TWF5QmVXcm9uZ0Fib3V0RG9udEVudW07
CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0
cnVjdHVyZUZsYWdzIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBKU0M6Ok92
ZXJyaWRlc0dldE93blByb3BlcnR5TmFtZXMgfCBKU0M6Ok92ZXJyaWRlc0dldENhbGxEYXRhIHwg
SlNDOjpPdmVycmlkZXNQdXQgfCBKU0M6OkdldE93blByb3BlcnR5U2xvdE1heUJlV3JvbmdBYm91
dERvbnRFbnVtOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIEpTQzo6U3Vic3Bh
Y2VBY2Nlc3M+CiAgICAgc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6
Vk0mIHZtKQpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gMjc1Nzg3KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTUgQEAKKzIwMjEtMDQtMDkgIEFsZXhleSBT
aHZheWthICA8c2h2YWlrYWxlc2hAZ21haWwuY29tPgorCisgICAgICAgIEludHJvZHVjZSBPdmVy
cmlkZXNQdXRbQnlJbmRleF0gdHlwZSBpbmZvIGZsYWdzCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTc5MTYKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGh0dHAvdGVzdHMvc2VjdXJpdHkvY3Jvc3MtZnJh
bWUtYWNjZXNzLW9iamVjdC1nZXRQcm90b3R5cGVPZi1pbi1wdXQtZXhwZWN0ZWQudHh0OgorICAg
ICAgICAqIGh0dHAvdGVzdHMvc2VjdXJpdHkvY3Jvc3MtZnJhbWUtYWNjZXNzLW9iamVjdC1nZXRQ
cm90b3R5cGVPZi1pbi1wdXQuaHRtbDoKKyAgICAgICAgKiBqcy9kb20vcmVmbGVjdC1zZXQtb250
by1kb20tZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGpzL2RvbS9zY3JpcHQtdGVzdHMvcmVmbGVj
dC1zZXQtb250by1kb20uanM6CisKIDIwMjEtMDQtMDkgIEplYW4tWXZlcyBBdmVuYXJkICA8anlh
QGFwcGxlLmNvbT4KIAogICAgICAgICBNZWRpYSBTZXNzaW9uIGFjdGlvbiBzaG91bGQgZGVmYXVs
dCB0byB0aGUgTWVkaWFFbGVtZW50J3MgZGVmYXVsdCB3aGVuIG5vIE1lZGlhU2Vzc2lvbiBoYW5k
bGVyIGFyZSBzZXQKSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkvY3Jvc3Mt
ZnJhbWUtYWNjZXNzLW9iamVjdC1nZXRQcm90b3R5cGVPZi1pbi1wdXQtZXhwZWN0ZWQudHh0Cj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkvY3Jvc3MtZnJhbWUt
YWNjZXNzLW9iamVjdC1nZXRQcm90b3R5cGVPZi1pbi1wdXQtZXhwZWN0ZWQudHh0CShyZXZpc2lv
biAyNzU3ODcpCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L2Nyb3NzLWZyYW1l
LWFjY2Vzcy1vYmplY3QtZ2V0UHJvdG90eXBlT2YtaW4tcHV0LWV4cGVjdGVkLnR4dAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDcgQEAKIFRoaXMgdGVzdHMgdGhhdCB5b3UgY2FuJ3QgZ2V0IHRo
ZSBwcm90b3R5cGUgb2YgdGhlIHdpbmRvdyBkdXJpbmcgW1tQdXRdXSBvcGVyYXRpb24uCiAKK1BB
U1MgYXJyYXkuY29jb2EgPSBjb2NvYVZhbHVlIHRocmV3IGV4Y2VwdGlvbiBTZWN1cml0eUVycm9y
OiBCbG9ja2VkIGEgZnJhbWUgd2l0aCBvcmlnaW4gImh0dHA6Ly8xMjcuMC4wLjE6ODAwMCIgZnJv
bSBhY2Nlc3NpbmcgYSBjcm9zcy1vcmlnaW4gZnJhbWUuIFByb3RvY29scywgZG9tYWlucywgYW5k
IHBvcnRzIG11c3QgbWF0Y2guLgorUEFTUyAnc3RyJy5jb2NvYSA9IGNvY29hVmFsdWUgdGhyZXcg
ZXhjZXB0aW9uIFNlY3VyaXR5RXJyb3I6IEJsb2NrZWQgYSBmcmFtZSB3aXRoIG9yaWdpbiAiaHR0
cDovLzEyNy4wLjAuMTo4MDAwIiBmcm9tIGFjY2Vzc2luZyBhIGNyb3NzLW9yaWdpbiBmcmFtZS4g
UHJvdG9jb2xzLCBkb21haW5zLCBhbmQgcG9ydHMgbXVzdCBtYXRjaC4uCiBQQVNTOiBzdWNjZXNz
ZnVsbHlQYXJzZWQgc2hvdWxkIGJlICd0cnVlJyBhbmQgaXMuCiAKIFRFU1QgQ09NUExFVEUKSW5k
ZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkvY3Jvc3MtZnJhbWUtYWNjZXNzLW9i
amVjdC1nZXRQcm90b3R5cGVPZi1pbi1wdXQuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9odHRwL3Rlc3RzL3NlY3VyaXR5L2Nyb3NzLWZyYW1lLWFjY2Vzcy1vYmplY3QtZ2V0UHJvdG90
eXBlT2YtaW4tcHV0Lmh0bWwJKHJldmlzaW9uIDI3NTc4NykKKysrIExheW91dFRlc3RzL2h0dHAv
dGVzdHMvc2VjdXJpdHkvY3Jvc3MtZnJhbWUtYWNjZXNzLW9iamVjdC1nZXRQcm90b3R5cGVPZi1p
bi1wdXQuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMTUsNyArMTUsNyBAQAogICAgICAgICBkb1Rl
c3QgPSBmdW5jdGlvbigpCiAgICAgICAgIHsKICAgICAgICAgICAgIHRhcmdldFdpbmRvdyA9IGRv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0YXJnZXQiKS5jb250ZW50V2luZG93OwotICAgICAgICAg
ICAgdmFyIGFycmF5ID0gW107CisgICAgICAgICAgICBhcnJheSA9IFtdOwogICAgICAgICAgICAg
YXJyYXkuX19wcm90b19fLl9fcHJvdG9fXyA9IHRhcmdldFdpbmRvdzsKICAgICAgICAgICAgIGFy
cmF5WzBdID0gMTEuMTE7CiAgICAgICAgICAgICBhcnJheVsyXSA9IDIyLjIyOwpAQCAtMjQsMTEg
KzI0LDE1IEBACiAgICAgICAgICAgICAgICAgICAgIHRlc3RGYWlsZWQoInRvU3RyaW5nIGlzIGNh
bGxlZCBieSAxMDEwMTAxMCBzZXR0ZXIiKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICB9OwotICAgICAgICAgICAgYXJyYXlbImNvY29hIl0gPSB7CisgICAgICAgICAgICBjb2NvYVZh
bHVlID0gewogICAgICAgICAgICAgICAgIHRvU3RyaW5nKCkgewogICAgICAgICAgICAgICAgICAg
ICB0ZXN0RmFpbGVkKCJ0b1N0cmluZyBpcyBjYWxsZWQgYnkgY29jb2Egc2V0dGVyIik7CiAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIHNob3VsZFRocm93RXJy
b3JOYW1lKCJhcnJheS5jb2NvYSA9IGNvY29hVmFsdWUiLCAiU2VjdXJpdHlFcnJvciIpOworCisg
ICAgICAgICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YoU3RyaW5nLnByb3RvdHlwZSwgdGFyZ2V0
V2luZG93KTsKKyAgICAgICAgICAgIHNob3VsZFRocm93RXJyb3JOYW1lKCInc3RyJy5jb2NvYSA9
IGNvY29hVmFsdWUiLCAiU2VjdXJpdHlFcnJvciIpOwogICAgICAgICAgICAgZmluaXNoSlNUZXN0
KCk7CiAgICAgICAgIH0KICAgICA8L3NjcmlwdD4KSW5kZXg6IExheW91dFRlc3RzL2pzL2RvbS9y
ZWZsZWN0LXNldC1vbnRvLWRvbS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvanMvZG9tL3JlZmxlY3Qtc2V0LW9udG8tZG9tLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMjc1
Nzg3KQorKysgTGF5b3V0VGVzdHMvanMvZG9tL3JlZmxlY3Qtc2V0LW9udG8tZG9tLWV4cGVjdGVk
LnR4dAkod29ya2luZyBjb3B5KQpAQCAtOTMsMTMgKzkzLDEzIEBAIFBBU1MgUmVmbGVjdC5nZXQo
ZG9jdW1lbnQuYm9keS5kYXRhc2V0LCAKIFBBU1MgUmVmbGVjdC5zZXQoZG9jdW1lbnQuYm9keS5k
YXRhc2V0LCAiY29jb2EtY2FwcHVjY2lubyIsICJzd2VldCIpIHRocmV3IGV4Y2VwdGlvbiBTeW50
YXhFcnJvcjogVGhlIHN0cmluZyBkaWQgbm90IG1hdGNoIHRoZSBleHBlY3RlZCBwYXR0ZXJuLi4K
IFBBU1MgUmVmbGVjdC5zZXQoZG9jdW1lbnQuYm9keS5kYXRhc2V0LCAwLCAic3dlZXQiKSBpcyB0
cnVlCiBQQVNTIFJlZmxlY3QuZ2V0KGRvY3VtZW50LmJvZHkuZGF0YXNldCwgMCkgaXMgInN3ZWV0
IgotRE9NU3RyaW5nTWFwIGlnbm9yZXMgdGhlIHJlY2VpdmVyLiBUaGVzZSBwdXREZWxlZ2F0ZSBv
bmx5IHdvcmsgd2l0aCA6OnB1dCAobm90IDo6ZGVmaW5lT3duUHJvcGVydHkpLiBTbyB0aGV5IGJl
aGF2ZSBhcyB0aGUgc3BlY2lhbCBzZXR0ZXIsIHdlIHNob3VsZCBub3QgZmFsbGJhY2sgdG8gdGhl
IE9yZGluYXJ5U2V0LgorRE9NU3RyaW5nTWFwIGZhbGxzIGJhY2sgdG8gT3JkaW5hcnlTZXQgaWYg
cmVjZWl2ZXIgaXMgYWx0ZXJlZC4KIFBBU1MgUmVmbGVjdC5zZXQoZG9jdW1lbnQuYm9keS5kYXRh
c2V0LCAiY29jb2EiLCAib2siLCByZWNlaXZlcikgaXMgdHJ1ZQotUEFTUyBSZWZsZWN0LmdldChk
b2N1bWVudC5ib2R5LmRhdGFzZXQsICJjb2NvYSIpIGlzICJvayIKLVBBU1MgUmVmbGVjdC5nZXQo
cmVjZWl2ZXIsICJjb2NvYSIpIGlzIHVuZGVmaW5lZAorUEFTUyBSZWZsZWN0LmdldChkb2N1bWVu
dC5ib2R5LmRhdGFzZXQsICJjb2NvYSIpIGlzICJzd2VldCIKK1BBU1MgUmVmbGVjdC5nZXQocmVj
ZWl2ZXIsICJjb2NvYSIpIGlzICJvayIKIFBBU1MgUmVmbGVjdC5zZXQoZG9jdW1lbnQuYm9keS5k
YXRhc2V0LCAwLCAib2siLCByZWNlaXZlcikgaXMgdHJ1ZQotUEFTUyBSZWZsZWN0LmdldChkb2N1
bWVudC5ib2R5LmRhdGFzZXQsIDApIGlzICJvayIKLVBBU1MgUmVmbGVjdC5nZXQocmVjZWl2ZXIs
IDApIGlzIHVuZGVmaW5lZAorUEFTUyBSZWZsZWN0LmdldChkb2N1bWVudC5ib2R5LmRhdGFzZXQs
IDApIGlzICJzd2VldCIKK1BBU1MgUmVmbGVjdC5nZXQocmVjZWl2ZXIsIDApIGlzICJvayIKIEN1
c3RvbUluZGV4ZWRTZXR0ZXIKIFBBU1MgUmVmbGVjdC5nZXQoc2VsZWN0LCAwKS52YWx1ZSBpcyAi
Y29jb2EiCiBQQVNTIFJlZmxlY3QuZ2V0KHNlbGVjdCwgImxlbmd0aCIpIGlzIDMKQEAgLTExMSwx
MCArMTExLDEwIEBAIFBBU1MgUmVmbGVjdC5nZXQoc2VsZWN0LCAibGVuZ3RoIikgaXMgNDIKIFBB
U1MgUmVmbGVjdC5zZXQoc2VsZWN0LCA0NCwgb3B0aW9uMikgaXMgdHJ1ZQogUEFTUyBSZWZsZWN0
LmdldChzZWxlY3QsIDQ0KS52YWx1ZSBpcyAia2lsaW1hbmphcm8iCiBQQVNTIFJlZmxlY3Quc2V0
KHNlbGVjdCwgMjAsICJLaWxpbWFuamFybyIpIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IFR5
cGUgZXJyb3IuCi1DdXN0b21JbmRleGVkU2V0dGVyIGlnbm9yZXMgdGhlIHJlY2VpdmVyLiBUaGVz
ZSBtZXRob2RzIG9ubHkgd29yayB3aXRoIDo6cHV0IChub3QgOjpkZWZpbmVPd25Qcm9wZXJ0eSku
IFNvIHRoZXkgYmVoYXZlIGFzIHRoZSBzcGVjaWFsIHNldHRlciwgd2Ugc2hvdWxkIG5vdCBmYWxs
YmFjayB0byB0aGUgT3JkaW5hcnlTZXQuCitDdXN0b21JbmRleGVkU2V0dGVyIGZhbGxzIGJhY2sg
dG8gT3JkaW5hcnlTZXQgaWYgcmVjZWl2ZXIgaXMgYWx0ZXJlZC4KIFBBU1MgUmVmbGVjdC5zZXQo
c2VsZWN0LCAwLCBvcHRpb24zLCByZWNlaXZlcikgaXMgdHJ1ZQotUEFTUyBSZWZsZWN0LmdldChy
ZWNlaXZlciwgMCkgaXMgdW5kZWZpbmVkCi1QQVNTIFJlZmxlY3QuZ2V0KHNlbGVjdCwgMCkgaXMg
b3B0aW9uMworUEFTUyBSZWZsZWN0LmdldChyZWNlaXZlciwgMCkgaXMgb3B0aW9uMworUEFTUyBS
ZWZsZWN0LmdldChzZWxlY3QsIDApIGlzIHNlbGVjdC5jaGlsZHJlblswXQogUEFTUyBzdWNjZXNz
ZnVsbHlQYXJzZWQgaXMgdHJ1ZQogCiBURVNUIENPTVBMRVRFCkluZGV4OiBMYXlvdXRUZXN0cy9q
cy9kb20vc2NyaXB0LXRlc3RzL3JlZmxlY3Qtc2V0LW9udG8tZG9tLmpzCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL2pzL2RvbS9zY3JpcHQtdGVzdHMvcmVmbGVjdC1zZXQtb250by1kb20uanMJ
KHJldmlzaW9uIDI3NTc4NykKKysrIExheW91dFRlc3RzL2pzL2RvbS9zY3JpcHQtdGVzdHMvcmVm
bGVjdC1zZXQtb250by1kb20uanMJKHdvcmtpbmcgY29weSkKQEAgLTExNiwxNSArMTE2LDE1IEBA
IHNob3VsZFRocm93KGBSZWZsZWN0LnNldChkb2N1bWVudC5ib2R5LmQKIHNob3VsZEJlKGBSZWZs
ZWN0LnNldChkb2N1bWVudC5ib2R5LmRhdGFzZXQsIDAsICJzd2VldCIpYCwgYHRydWVgKTsKIHNo
b3VsZEJlKGBSZWZsZWN0LmdldChkb2N1bWVudC5ib2R5LmRhdGFzZXQsIDApYCwgYCJzd2VldCJg
KTsKIAotZGVidWcoIkRPTVN0cmluZ01hcCBpZ25vcmVzIHRoZSByZWNlaXZlci4gVGhlc2UgcHV0
RGVsZWdhdGUgb25seSB3b3JrIHdpdGggOjpwdXQgKG5vdCA6OmRlZmluZU93blByb3BlcnR5KS4g
U28gdGhleSBiZWhhdmUgYXMgdGhlIHNwZWNpYWwgc2V0dGVyLCB3ZSBzaG91bGQgbm90IGZhbGxi
YWNrIHRvIHRoZSBPcmRpbmFyeVNldC4iKTsKK2RlYnVnKCJET01TdHJpbmdNYXAgZmFsbHMgYmFj
ayB0byBPcmRpbmFyeVNldCBpZiByZWNlaXZlciBpcyBhbHRlcmVkLiIpOwogdmFyIHJlY2VpdmVy
ID0ge307CiBzaG91bGRCZShgUmVmbGVjdC5zZXQoZG9jdW1lbnQuYm9keS5kYXRhc2V0LCAiY29j
b2EiLCAib2siLCByZWNlaXZlcilgLCBgdHJ1ZWApOwotc2hvdWxkQmUoYFJlZmxlY3QuZ2V0KGRv
Y3VtZW50LmJvZHkuZGF0YXNldCwgImNvY29hIilgLCBgIm9rImApOwotc2hvdWxkQmUoYFJlZmxl
Y3QuZ2V0KHJlY2VpdmVyLCAiY29jb2EiKWAsIGB1bmRlZmluZWRgKTsKK3Nob3VsZEJlKGBSZWZs
ZWN0LmdldChkb2N1bWVudC5ib2R5LmRhdGFzZXQsICJjb2NvYSIpYCwgYCJzd2VldCJgKTsKK3No
b3VsZEJlKGBSZWZsZWN0LmdldChyZWNlaXZlciwgImNvY29hIilgLCBgIm9rImApOwogdmFyIHJl
Y2VpdmVyID0ge307CiBzaG91bGRCZShgUmVmbGVjdC5zZXQoZG9jdW1lbnQuYm9keS5kYXRhc2V0
LCAwLCAib2siLCByZWNlaXZlcilgLCBgdHJ1ZWApOwotc2hvdWxkQmUoYFJlZmxlY3QuZ2V0KGRv
Y3VtZW50LmJvZHkuZGF0YXNldCwgMClgLCBgIm9rImApOwotc2hvdWxkQmUoYFJlZmxlY3QuZ2V0
KHJlY2VpdmVyLCAwKWAsIGB1bmRlZmluZWRgKTsKK3Nob3VsZEJlKGBSZWZsZWN0LmdldChkb2N1
bWVudC5ib2R5LmRhdGFzZXQsIDApYCwgYCJzd2VldCJgKTsKK3Nob3VsZEJlKGBSZWZsZWN0Lmdl
dChyZWNlaXZlciwgMClgLCBgIm9rImApOwogCiBkZWJ1ZygiQ3VzdG9tSW5kZXhlZFNldHRlciIp
OwogdmFyIHNlbGVjdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0ZXN0U2VsZWN0Iik7CkBA
IC0xNDYsMTEgKzE0NiwxMSBAQCBzaG91bGRCZShgUmVmbGVjdC5zZXQoc2VsZWN0LCA0NCwgb3B0
aW9uCiBzaG91bGRCZShgUmVmbGVjdC5nZXQoc2VsZWN0LCA0NCkudmFsdWVgLCBgImtpbGltYW5q
YXJvImApOwogc2hvdWxkVGhyb3coYFJlZmxlY3Quc2V0KHNlbGVjdCwgMjAsICJLaWxpbWFuamFy
byIpYCk7CiAKLWRlYnVnKCJDdXN0b21JbmRleGVkU2V0dGVyIGlnbm9yZXMgdGhlIHJlY2VpdmVy
LiBUaGVzZSBtZXRob2RzIG9ubHkgd29yayB3aXRoIDo6cHV0IChub3QgOjpkZWZpbmVPd25Qcm9w
ZXJ0eSkuIFNvIHRoZXkgYmVoYXZlIGFzIHRoZSBzcGVjaWFsIHNldHRlciwgd2Ugc2hvdWxkIG5v
dCBmYWxsYmFjayB0byB0aGUgT3JkaW5hcnlTZXQuIik7CitkZWJ1ZygiQ3VzdG9tSW5kZXhlZFNl
dHRlciBmYWxscyBiYWNrIHRvIE9yZGluYXJ5U2V0IGlmIHJlY2VpdmVyIGlzIGFsdGVyZWQuIik7
CiB2YXIgb3B0aW9uMyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIm9wdGlvbiIpOwogb3B0aW9u
My52YWx1ZSA9ICJyYWJiaXQiOwogb3B0aW9uMy50ZXh0Q29udGVudCA9ICJSYWJiaXQiOwogdmFy
IHJlY2VpdmVyID0ge307CiBzaG91bGRCZShgUmVmbGVjdC5zZXQoc2VsZWN0LCAwLCBvcHRpb24z
LCByZWNlaXZlcilgLCBgdHJ1ZWApOwotc2hvdWxkQmUoYFJlZmxlY3QuZ2V0KHJlY2VpdmVyLCAw
KWAsIGB1bmRlZmluZWRgKTsKLXNob3VsZEJlKGBSZWZsZWN0LmdldChzZWxlY3QsIDApYCwgYG9w
dGlvbjNgKTsKK3Nob3VsZEJlKGBSZWZsZWN0LmdldChyZWNlaXZlciwgMClgLCBgb3B0aW9uM2Ap
Oworc2hvdWxkQmUoYFJlZmxlY3QuZ2V0KHNlbGVjdCwgMClgLCBgc2VsZWN0LmNoaWxkcmVuWzBd
YCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>426047</attachid>
            <date>2021-04-14 14:47:30 -0700</date>
            <delta_ts>2021-04-21 04:04:10 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-217916-20210415004728.patch</filename>
            <type>text/plain</type>
            <size>168228</size>
            <attacher name="Alexey Shvayka">ashvayka</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyNzU5NjcpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDIzIEBACisyMDIxLTA0LTE0ICBBbGV4ZXkgU2h2YXlrYSAgPHNodmFpa2FsZXNo
QGdtYWlsLmNvbT4KKworICAgICAgICBbSlNDXSBPcmRpbmFyeVNldCBzaG91bGQgaW52b2tlIGN1
c3RvbSBbW1NldF1dIG1ldGhvZHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIxNzkxNgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgICogbWljcm9iZW5jaG1hcmtzL3B1dC1zbG93LW5vLWNhY2hlLWFycmF5Lmpz
OiBBZGRlZC4KKyAgICAgICAgKiBtaWNyb2JlbmNobWFya3MvcHV0LXNsb3ctbm8tY2FjaGUtZnVu
Y3Rpb24uanM6IEFkZGVkLgorICAgICAgICAqIG1pY3JvYmVuY2htYXJrcy9wdXQtc2xvdy1uby1j
YWNoZS1qcy1wcm94eS5qczogQWRkZWQuCisgICAgICAgICogbWljcm9iZW5jaG1hcmtzL3B1dC1z
bG93LW5vLWNhY2hlLWxvbmctcHJvdG90eXBlLWNoYWluLmpzOiBBZGRlZC4KKyAgICAgICAgKiBt
aWNyb2JlbmNobWFya3MvcHV0LXNsb3ctbm8tY2FjaGUuanM6IEFkZGVkLgorICAgICAgICAqIG1p
Y3JvYmVuY2htYXJrcy9yZWZsZWN0LXNldC13aXRoLXJlY2VpdmVyLmpzOiBBZGRlZC4KKyAgICAg
ICAgKiBzdHJlc3MvY3VzdG9tLWdldC1zZXQtcHJvdG8tY2hhaW4tcHV0LmpzOgorICAgICAgICAq
IHN0cmVzcy9tb2R1bGUtbmFtZXNwYWNlLWFjY2Vzcy1zZXQtZmFpbHMuanM6IEFkZGVkLgorICAg
ICAgICAqIHN0cmVzcy9ub24tcmVpZmllZC1zdGF0aWMtY3VzdG9tLW9yLWZ1bmN0aW9uLXB1dC5q
czogQWRkZWQuCisgICAgICAgICogc3RyZXNzL25vbi1yZWlmaWVkLXN0YXRpYy1jdXN0b20tcHV0
LXRvLXByaW1pdGl2ZS5qczogQWRkZWQuCisgICAgICAgICogc3RyZXNzL3Byb3RvLWNoYWluLXB1
dC1vdmVycmlkZS5qczogQWRkZWQuCisgICAgICAgICogc3RyZXNzL3R5cGVkLWFycmF5LWNhbm9u
aWNhbC1udW1lcmljLWluZGV4LXN0cmluZy1zZXQuanM6IEFkZGVkLgorCiAyMDIxLTA0LTE0ICBH
dWlsbGF1bWUgRW1vbnQgIDxndWlqZW1vbnRAaWdhbGlhLmNvbT4KIAogICAgICAgICBbSlNDXSBV
bnNraXAgc3RyZXNzL2ludGwtc2VnbWVudGVyLmpzCkluZGV4OiBKU1Rlc3RzL21pY3JvYmVuY2ht
YXJrcy9wdXQtc2xvdy1uby1jYWNoZS1hcnJheS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL21p
Y3JvYmVuY2htYXJrcy9wdXQtc2xvdy1uby1jYWNoZS1hcnJheS5qcwkobm9uZXhpc3RlbnQpCisr
KyBKU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9wdXQtc2xvdy1uby1jYWNoZS1hcnJheS5qcwkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDYgQEAKKyhmdW5jdGlvbigpIHsKKyAgICB2YXIgYXJyYXkg
PSBbXTsKKworICAgIGZvciAodmFyIGogPSAwOyBqIDwgMWU1OyBqKyspCisgICAgICAgIGFycmF5
WyJmb28iICsgal0gPSBqOworfSkoKTsKSW5kZXg6IEpTVGVzdHMvbWljcm9iZW5jaG1hcmtzL3B1
dC1zbG93LW5vLWNhY2hlLWZ1bmN0aW9uLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvbWljcm9i
ZW5jaG1hcmtzL3B1dC1zbG93LW5vLWNhY2hlLWZ1bmN0aW9uLmpzCShub25leGlzdGVudCkKKysr
IEpTVGVzdHMvbWljcm9iZW5jaG1hcmtzL3B1dC1zbG93LW5vLWNhY2hlLWZ1bmN0aW9uLmpzCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOCBAQAorKGZ1bmN0aW9uKCkgeworICAgIGNsYXNzIEEg
e30KKyAgICBjbGFzcyBCIGV4dGVuZHMgQSB7fQorICAgIGNsYXNzIEMgZXh0ZW5kcyBCIHt9CisK
KyAgICBmb3IgKHZhciBqID0gMDsgaiA8IDFlNTsgaisrKQorICAgICAgICBDWyJmb28iICsgal0g
PSBqOworfSkoKTsKSW5kZXg6IEpTVGVzdHMvbWljcm9iZW5jaG1hcmtzL3B1dC1zbG93LW5vLWNh
Y2hlLWpzLXByb3h5LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvbWljcm9iZW5jaG1hcmtzL3B1
dC1zbG93LW5vLWNhY2hlLWpzLXByb3h5LmpzCShub25leGlzdGVudCkKKysrIEpTVGVzdHMvbWlj
cm9iZW5jaG1hcmtzL3B1dC1zbG93LW5vLWNhY2hlLWpzLXByb3h5LmpzCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsNiBAQAorKGZ1bmN0aW9uKCkgeworICAgIHZhciBwcm94eSA9ICR2bS5jcmVh
dGVQcm94eSh7IHNldCBmb28oX3YpIHt9IH0pOworCisgICAgZm9yICh2YXIgaiA9IDA7IGogPCAx
ZTU7IGorKykKKyAgICAgICAgcHJveHlbImZvbyIgKyBqXSA9IGo7Cit9KSgpOwpJbmRleDogSlNU
ZXN0cy9taWNyb2JlbmNobWFya3MvcHV0LXNsb3ctbm8tY2FjaGUtbG9uZy1wcm90b3R5cGUtY2hh
aW4uanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9taWNyb2JlbmNobWFya3MvcHV0LXNsb3ctbm8t
Y2FjaGUtbG9uZy1wcm90b3R5cGUtY2hhaW4uanMJKG5vbmV4aXN0ZW50KQorKysgSlNUZXN0cy9t
aWNyb2JlbmNobWFya3MvcHV0LXNsb3ctbm8tY2FjaGUtbG9uZy1wcm90b3R5cGUtY2hhaW4uanMJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4IEBACisoZnVuY3Rpb24oKSB7CisgICAgdmFyIGJh
c2UgPSB7IHNldCBmb28oX3YpIHt9IH07CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxZTM7IGkr
KykKKyAgICAgICAgYmFzZSA9IE9iamVjdC5jcmVhdGUoYmFzZSk7CisKKyAgICBmb3IgKHZhciBq
ID0gMDsgaiA8IDNlMzsgaisrKQorICAgICAgICBiYXNlWyJmb28iICsgal0gPSBqOworfSkoKTsK
SW5kZXg6IEpTVGVzdHMvbWljcm9iZW5jaG1hcmtzL3B1dC1zbG93LW5vLWNhY2hlLmpzCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIEpTVGVzdHMvbWljcm9iZW5jaG1hcmtzL3B1dC1zbG93LW5vLWNhY2hlLmpzCShu
b25leGlzdGVudCkKKysrIEpTVGVzdHMvbWljcm9iZW5jaG1hcmtzL3B1dC1zbG93LW5vLWNhY2hl
LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNiBAQAorKGZ1bmN0aW9uKCkgeworICAgIHZh
ciBiYXNlID0geyBzZXQgZm9vKF92KSB7fSB9OworCisgICAgZm9yICh2YXIgaiA9IDA7IGogPCAx
ZTU7IGorKykKKyAgICAgICAgYmFzZVsiZm9vIiArIGpdID0gajsKK30pKCk7CkluZGV4OiBKU1Rl
c3RzL21pY3JvYmVuY2htYXJrcy9yZWZsZWN0LXNldC13aXRoLXJlY2VpdmVyLmpzCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIEpTVGVzdHMvbWljcm9iZW5jaG1hcmtzL3JlZmxlY3Qtc2V0LXdpdGgtcmVjZWl2ZXIu
anMJKG5vbmV4aXN0ZW50KQorKysgSlNUZXN0cy9taWNyb2JlbmNobWFya3MvcmVmbGVjdC1zZXQt
d2l0aC1yZWNlaXZlci5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYgQEAKKyhmdW5jdGlv
bigpIHsKKyAgICB2YXIgdGFyZ2V0ID0gbmV3IChjbGFzcyB7fSk7CisKKyAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IDFlNjsgaSsrKQorICAgICAgICBSZWZsZWN0LnNldCh0YXJnZXQsICJmb28iLCAx
LCB7fSk7Cit9KSgpOwpJbmRleDogSlNUZXN0cy9zdHJlc3MvY3VzdG9tLWdldC1zZXQtcHJvdG8t
Y2hhaW4tcHV0LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvc3RyZXNzL2N1c3RvbS1nZXQtc2V0
LXByb3RvLWNoYWluLXB1dC5qcwkocmV2aXNpb24gMjc1OTY1KQorKysgSlNUZXN0cy9zdHJlc3Mv
Y3VzdG9tLWdldC1zZXQtcHJvdG8tY2hhaW4tcHV0LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw4
ICszNyw4IEBAIGZ1bmN0aW9uIGdldE9iamVjdHMoKSB7CiAgICAgICAgIC4uLnByaW1pdGl2ZXMu
bWFwKE9iamVjdCksCiAgICAgICAgIE9iamVjdC5jcmVhdGUoY3VzdG9tVGVzdEdldHRlclNldHRl
ciksCiAgICAgICAgIE9iamVjdC5jcmVhdGUoT2JqZWN0LmNyZWF0ZShjdXN0b21UZXN0R2V0dGVy
U2V0dGVyKSksCi0gICAgICAgIC8vIEZJWE1FOiBvcmRpbmFyeVNldFNsb3coKSBzaG91bGQgaGFu
ZGxlIEN1c3RvbXtBY2Nlc3NvcixWYWx1ZX0gZGVzY3JpcHRvcnMuCi0gICAgICAgIC8vIG5ldyBQ
cm94eShjdXN0b21UZXN0R2V0dGVyU2V0dGVyLCB7fSksCisgICAgICAgIE9iamVjdC5jcmVhdGUo
bmV3IFByb3h5KGN1c3RvbVRlc3RHZXR0ZXJTZXR0ZXIsIHt9KSksCisgICAgICAgIE9iamVjdC5j
cmVhdGUoJHZtLmNyZWF0ZVByb3h5KGN1c3RvbVRlc3RHZXR0ZXJTZXR0ZXIpKSwKICAgICBdOwog
fQogCkBAIC04NSwxMyArODUsMTMgQEAgZnVuY3Rpb24gZ2V0QmFzZXMoKSB7CiB9KSgpOwogCiAv
LyBDdXN0b21WYWx1ZTogc2V0dGVyIHJldHVybnMgfGZhbHNlfAorLy8gRklYTUU6IE9uY2UgbGVn
YWN5IFJlZ0V4cCBmZWF0dXJlcyBhcmUgaW1wbGVtZW50ZWQsIHRoZXJlIHdvdWxkIGJlIG5vIHVz
ZSBjYXNlIGZvciBjYWxsaW5nIEN1c3RvbVZhbHVlIHNldHRlciBpZiByZWNlaXZlciBpcyBhbHRl
cmVkLgogKCgpID0+IHsKICAgICBmb3IgKGxldCBiYXNlIG9mIGdldEJhc2VzKCkpIHsKICAgICAg
ICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxMDA7ICsraSkKICAgICAgICAgICAgIGJhc2UuY3VzdG9t
VmFsdWUgPSAxOwotICAgICAgICAvLyBUaGlzIGlzIHdlaXJkLCBidXQgaXQgaXNuJ3QgZXhwb3Nl
ZCB0byB1c2VybGFuZCBjb2RlOgogICAgICAgICBhc3NlcnQoIWJhc2UuaGFzT3duUHJvcGVydHko
ImN1c3RvbVZhbHVlIikpOwotICAgICAgICBhc3NlcnQoIVJlZmxlY3Quc2V0KE9iamVjdChiYXNl
KSwgImN1c3RvbVZhbHVlIiwgMSkpOworICAgICAgICBhc3NlcnQoUmVmbGVjdC5zZXQoT2JqZWN0
KGJhc2UpLCAiY3VzdG9tVmFsdWUiLCAxKSk7CiAgICAgfQogfSkoKTsKIApJbmRleDogSlNUZXN0
cy9zdHJlc3MvbW9kdWxlLW5hbWVzcGFjZS1hY2Nlc3Mtc2V0LWZhaWxzLmpzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIEpTVGVzdHMvc3RyZXNzL21vZHVsZS1uYW1lc3BhY2UtYWNjZXNzLXNldC1mYWlscy5qcwko
bm9uZXhpc3RlbnQpCisrKyBKU1Rlc3RzL3N0cmVzcy9tb2R1bGUtbmFtZXNwYWNlLWFjY2Vzcy1z
ZXQtZmFpbHMuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5MCBAQAorY29uc3QgZXhpc3Rp
bmdLZXlzID0gWyJjb2NvYSIsICJ0ZXN0IiwgU3ltYm9sLnRvU3RyaW5nVGFnXTsKK2NvbnN0IG5v
bkV4aXN0aW5nS2V5cyA9IFsiZm9vIiwgU3ltYm9sKCJmb28iKV07Citjb25zdCBhbGxLZXlzID0g
Wy4uLmV4aXN0aW5nS2V5cywgLi4ubm9uRXhpc3RpbmdLZXlzXTsKK2NvbnN0IHRlc3RWYWx1ZSA9
IE9iamVjdC5mcmVlemUoe30pOworCitmdW5jdGlvbiBhc3NlcnQoeCwga2V5KSB7CisgICAgaWYg
KCF4KQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEJhZCBhc3NlcnRpb24hIEtleTogJHtTdHJp
bmcoa2V5KX1gKTsKK30KKworZnVuY3Rpb24gc2hvdWxkVGhyb3coZnVuYywgZXJyb3JNZXNzYWdl
KSB7CisgICAgbGV0IGVycm9yVGhyb3duID0gZmFsc2U7CisgICAgdHJ5IHsKKyAgICAgICAgZnVu
YygpOworICAgIH0gY2F0Y2ggKGVycm9yKSB7CisgICAgICAgIGVycm9yVGhyb3duID0gdHJ1ZTsK
KyAgICAgICAgaWYgKFN0cmluZyhlcnJvcikgIT09IGVycm9yTWVzc2FnZSkKKyAgICAgICAgICAg
IHRocm93IG5ldyBFcnJvcihgQmFkIGVycm9yOiAke2Vycm9yfWApOworICAgIH0KKyAgICBpZiAo
IWVycm9yVGhyb3duKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkRpZG4ndCB0aHJvdyEiKTsK
K30KKworZnVuY3Rpb24gdGVzdERpcmVjdFNldChucykgeworICAgIGZvciAoY29uc3Qga2V5IG9m
IGFsbEtleXMpIHsKKyAgICAgICAgbnNba2V5XSA9IHRlc3RWYWx1ZTsKKyAgICAgICAgYXNzZXJ0
KG5zW2tleV0gIT09IHRlc3RWYWx1ZSwga2V5KTsKKworICAgICAgICBzaG91bGRUaHJvdygoKSA9
PiB7ICJ1c2Ugc3RyaWN0IjsgbnNba2V5XSA9IHRlc3RWYWx1ZTsgfSwgIlR5cGVFcnJvcjogQXR0
ZW1wdGVkIHRvIGFzc2lnbiB0byByZWFkb25seSBwcm9wZXJ0eS4iKTsKKyAgICAgICAgYXNzZXJ0
KG5zW2tleV0gIT09IHRlc3RWYWx1ZSwga2V5KTsKKyAgICB9Cit9CisKK2Z1bmN0aW9uIHRlc3RQ
cm90b3R5cGVDaGFpblNldChucykgeworICAgIGZvciAoY29uc3Qga2V5IG9mIGFsbEtleXMpIHsK
KyAgICAgICAgY29uc3QgaGVpciA9IE9iamVjdC5jcmVhdGUobnMpOworCisgICAgICAgIGhlaXJb
a2V5XSA9IHRlc3RWYWx1ZTsKKyAgICAgICAgYXNzZXJ0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eURl
c2NyaXB0b3IoaGVpciwga2V5KSA9PT0gdW5kZWZpbmVkLCBrZXkpOworCisgICAgICAgIHNob3Vs
ZFRocm93KCgpID0+IHsgInVzZSBzdHJpY3QiOyBoZWlyW2tleV0gPSB0ZXN0VmFsdWU7IH0sICJU
eXBlRXJyb3I6IEF0dGVtcHRlZCB0byBhc3NpZ24gdG8gcmVhZG9ubHkgcHJvcGVydHkuIik7Cisg
ICAgICAgIGFzc2VydChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGhlaXIsIGtleSkg
PT09IHVuZGVmaW5lZCwga2V5KTsKKyAgICB9Cit9CisKK2Z1bmN0aW9uIHRlc3RSZWZsZWN0U2V0
KG5zKSB7CisgICAgInVzZSBzdHJpY3QiOworCisgICAgZm9yIChjb25zdCBleGlzdGluZ0tleSBv
ZiBleGlzdGluZ0tleXMpIHsKKyAgICAgICAgYXNzZXJ0KCFSZWZsZWN0LnNldChucywgZXhpc3Rp
bmdLZXksIHRlc3RWYWx1ZSksIGV4aXN0aW5nS2V5KTsKKworICAgICAgICBjb25zdCB0YXJnZXQg
PSB7fTsKKyAgICAgICAgYXNzZXJ0KCFSZWZsZWN0LnNldCh0YXJnZXQsIGV4aXN0aW5nS2V5LCB0
ZXN0VmFsdWUsIG5zKSwgZXhpc3RpbmdLZXkpOworCisgICAgICAgIGNvbnN0IGlzV3JpdGFibGUg
PSBleGlzdGluZ0tleSAhPT0gU3ltYm9sLnRvU3RyaW5nVGFnOworICAgICAgICBhc3NlcnQoUmVm
bGVjdC5zZXQodGFyZ2V0LCBleGlzdGluZ0tleSwgbnNbZXhpc3RpbmdLZXldLCBucykgPT09IGlz
V3JpdGFibGUsIGV4aXN0aW5nS2V5KTsKKworICAgICAgICBhc3NlcnQobnNbZXhpc3RpbmdLZXld
ICE9PSB0ZXN0VmFsdWUsIGV4aXN0aW5nS2V5KTsKKyAgICAgICAgYXNzZXJ0KHRhcmdldFtleGlz
dGluZ0tleV0gPT09IHVuZGVmaW5lZCwgZXhpc3RpbmdLZXkpOworICAgIH0KKworICAgIGZvciAo
Y29uc3Qgbm9uRXhpc3RpbmdLZXkgb2Ygbm9uRXhpc3RpbmdLZXlzKSB7CisgICAgICAgIGFzc2Vy
dCghUmVmbGVjdC5zZXQobnMsIG5vbkV4aXN0aW5nS2V5LCB0ZXN0VmFsdWUpLCBub25FeGlzdGlu
Z0tleSk7CisgICAgICAgIGFzc2VydChuc1tub25FeGlzdGluZ0tleV0gPT09IHVuZGVmaW5lZCwg
bm9uRXhpc3RpbmdLZXkpOworCisgICAgICAgIGNvbnN0IHRhcmdldCA9IHt9OworICAgICAgICBh
c3NlcnQoIVJlZmxlY3Quc2V0KHRhcmdldCwgbm9uRXhpc3RpbmdLZXksIHRlc3RWYWx1ZSwgbnMp
LCBub25FeGlzdGluZ0tleSk7CisgICAgICAgIGFzc2VydCh0YXJnZXRbbm9uRXhpc3RpbmdLZXld
ID09PSB1bmRlZmluZWQsIG5vbkV4aXN0aW5nS2V5KTsKKyAgICB9CisKKyAgICBmb3IgKGNvbnN0
IGtleSBvZiBhbGxLZXlzKSB7CisgICAgICAgIGNvbnN0IHRhcmdldCA9IE9iamVjdC5jcmVhdGUo
bnMpOworICAgICAgICBjb25zdCByZWNlaXZlciA9IHt9OworCisgICAgICAgIGFzc2VydCghUmVm
bGVjdC5zZXQodGFyZ2V0LCBrZXksIHRlc3RWYWx1ZSwgcmVjZWl2ZXIpLCBrZXkpOworICAgICAg
ICBhc3NlcnQoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkgPT09
IHVuZGVmaW5lZCwga2V5KTsKKyAgICAgICAgYXNzZXJ0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eURl
c2NyaXB0b3IocmVjZWl2ZXIsIGtleSkgPT09IHVuZGVmaW5lZCwga2V5KTsKKyAgICB9Cit9CisK
K2ltcG9ydCgiLi9yZXNvdXJjZXMvbW9kdWxlLW5hbWVzcGFjZS1hY2Nlc3MuanMiKS50aGVuKG5z
ID0+IHsKKyAgICB0ZXN0RGlyZWN0U2V0KG5zKTsKKyAgICB0ZXN0UHJvdG90eXBlQ2hhaW5TZXQo
bnMpOworICAgIHRlc3RSZWZsZWN0U2V0KG5zKTsKK30pLmNhdGNoKGVyciA9PiB7CisgICAgcHJp
bnQoYCEhISAke2Vycn1cbiR7ZXJyLnN0YWNrfWApOworICAgICR2bS5hYm9ydCgpOworfSk7CisK
K2RyYWluTWljcm90YXNrcygpOwpJbmRleDogSlNUZXN0cy9zdHJlc3Mvbm9uLXJlaWZpZWQtc3Rh
dGljLWN1c3RvbS1vci1mdW5jdGlvbi1wdXQuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJl
c3Mvbm9uLXJlaWZpZWQtc3RhdGljLWN1c3RvbS1vci1mdW5jdGlvbi1wdXQuanMJKG5vbmV4aXN0
ZW50KQorKysgSlNUZXN0cy9zdHJlc3Mvbm9uLXJlaWZpZWQtc3RhdGljLWN1c3RvbS1vci1mdW5j
dGlvbi1wdXQuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMDkgQEAKKyJ1c2Ugc3RyaWN0
IjsKK2NvbnN0IHRlc3RWYWx1ZSA9IE9iamVjdC5mcmVlemUoe30pOworCitmdW5jdGlvbiBhc3Nl
cnQoeCwga2V5KSB7CisgICAgaWYgKCF4KQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEJhZCBh
c3NlcnRpb24hIEtleTogJyR7a2V5fSdgKTsKK30KKworZnVuY3Rpb24gc2hvdWxkVGhyb3coZnVu
YywgZXJyb3JNZXNzYWdlKSB7CisgICAgbGV0IGVycm9yVGhyb3duID0gZmFsc2U7CisgICAgdHJ5
IHsKKyAgICAgICAgZnVuYygpOworICAgIH0gY2F0Y2ggKGVycm9yKSB7CisgICAgICAgIGVycm9y
VGhyb3duID0gdHJ1ZTsKKyAgICAgICAgaWYgKFN0cmluZyhlcnJvcikgIT09IGVycm9yTWVzc2Fn
ZSkKKyAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQmFkIGVycm9yOiAke2Vycm9yfWApOwor
ICAgIH0KKyAgICBpZiAoIWVycm9yVGhyb3duKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkRp
ZG4ndCB0aHJvdyEiKTsKK30KKworZnVuY3Rpb24qIHRlc3RDYXNlcygpIHsKKyAgICB5aWVsZCBb
JHZtLmNyZWF0ZVN0YXRpY0N1c3RvbVZhbHVlKCksICJ0ZXN0U3RhdGljVmFsdWVOb1NldHRlciJd
OworCisgICAgLy8gaGFzU2V0dGVyT3JSZWFkb25seVByb3BlcnRpZXM6IGZhbHNlCisgICAgZm9y
IChjb25zdCBrZXkgb2YgWyJpc0Zpbml0ZSIsICJldmFsIiwgImdsb2JhbFRoaXMiLCAicGFyc2VJ
bnQiLCAiRXZhbEVycm9yIiwgIkpTT04iLCAiVWludDhDbGFtcGVkQXJyYXkiLCAiV2Vha01hcCJd
KQorICAgICAgICB5aWVsZCBbJHZtLmNyZWF0ZUdsb2JhbE9iamVjdCgpLCBrZXldOworICAgIGZv
ciAoY29uc3Qga2V5IG9mIFsic2VhbCIsICJpcyIsICJ2YWx1ZXMiLCAiZnJvbUVudHJpZXMiLCAi
ZGVmaW5lUHJvcGVydHkiLCAic2V0UHJvdG90eXBlT2YiXSkKKyAgICAgICAgeWllbGQgWyR2bS5j
cmVhdGVHbG9iYWxPYmplY3QoKS5PYmplY3QsIGtleV07CisgICAgZm9yIChjb25zdCBrZXkgb2Yg
WyJhcHBseSIsICJjb25zdHJ1Y3QiLCAiaGFzIiwgInByZXZlbnRFeHRlbnNpb25zIiwgImdldFBy
b3RvdHlwZU9mIl0pCisgICAgICAgIHlpZWxkIFskdm0uY3JlYXRlR2xvYmFsT2JqZWN0KCkuUmVm
bGVjdCwga2V5XTsKKyAgICBmb3IgKGNvbnN0IGtleSBvZiBbInRvRGF0ZVN0cmluZyIsICJ0b0xv
Y2FsZVN0cmluZyIsICJnZXRVVENNb250aCIsICJnZXREYXkiLCAic2V0VVRDTWludXRlcyIsICJz
ZXRNb250aCJdKQorICAgICAgICB5aWVsZCBbJHZtLmNyZWF0ZUdsb2JhbE9iamVjdCgpLkRhdGUu
cHJvdG90eXBlLCBrZXldOworICAgIGZvciAoY29uc3Qga2V5IG9mIFsiY29uY2F0IiwgIm1hdGNo
IiwgInBhZFN0YXJ0IiwgImJvbGQiLCAiZml4ZWQiLCAic21hbGwiLCAic3ViIl0pCisgICAgICAg
IHlpZWxkIFskdm0uY3JlYXRlR2xvYmFsT2JqZWN0KCkuU3RyaW5nLnByb3RvdHlwZSwga2V5XTsK
KworICAgIC8vIGhhc1NldHRlck9yUmVhZG9ubHlQcm9wZXJ0aWVzOiB0cnVlCisgICAgZm9yIChj
b25zdCBrZXkgb2YgWyJnZXRVaW50MTYiLCAic2V0SW50OCIsICJnZXRGbG9hdDMyIiwgInNldEJp
Z1VpbnQ2NCJdKQorICAgICAgICB5aWVsZCBbJHZtLmNyZWF0ZUdsb2JhbE9iamVjdCgpLkRhdGFW
aWV3LnByb3RvdHlwZSwga2V5XTsKKyAgICBmb3IgKGNvbnN0IGtleSBvZiBbInRvU3RyaW5nIiwg
InZhbHVlT2YiXSkKKyAgICAgICAgeWllbGQgWyR2bS5jcmVhdGVHbG9iYWxPYmplY3QoKS5TeW1i
b2wucHJvdG90eXBlLCBrZXldOworICAgIGZvciAoY29uc3Qga2V5IG9mIFsiZm9ybWF0UmFuZ2Ui
LCAiZm9ybWF0VG9QYXJ0cyIsICJyZXNvbHZlZE9wdGlvbnMiXSkKKyAgICAgICAgeWllbGQgWyR2
bS5jcmVhdGVHbG9iYWxPYmplY3QoKS5JbnRsLkRhdGVUaW1lRm9ybWF0LnByb3RvdHlwZSwga2V5
XTsKKyAgICBmb3IgKGNvbnN0IGtleSBvZiBbImZvcm1hdFRvUGFydHMiLCAicmVzb2x2ZWRPcHRp
b25zIl0pCisgICAgICAgIHlpZWxkIFskdm0uY3JlYXRlR2xvYmFsT2JqZWN0KCkuSW50bC5OdW1i
ZXJGb3JtYXQucHJvdG90eXBlLCBrZXldOworICAgIGZvciAoY29uc3Qga2V5IG9mIFsibWF4aW1p
emUiLCAibWluaW1pemUiLCAidG9TdHJpbmciXSkKKyAgICAgICAgeWllbGQgWyR2bS5jcmVhdGVH
bG9iYWxPYmplY3QoKS5JbnRsLkxvY2FsZS5wcm90b3R5cGUsIGtleV07Cit9CisKK2ZvciAoY29u
c3QgW29iamVjdCwga2V5XSBvZiB0ZXN0Q2FzZXMoKSkgeworICAgIG9iamVjdFtrZXldID0gdGVz
dFZhbHVlOworCisgICAgY29uc3QgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0
b3Iob2JqZWN0LCBrZXkpOworICAgIGFzc2VydChkZXNjLnZhbHVlID09PSB0ZXN0VmFsdWUsIGtl
eSk7CisgICAgYXNzZXJ0KGRlc2Mud3JpdGFibGUsIGtleSk7CisgICAgYXNzZXJ0KCFkZXNjLmVu
dW1lcmFibGUsIGtleSk7CisgICAgYXNzZXJ0KGRlc2MuY29uZmlndXJhYmxlLCBrZXkpOworfQor
Citmb3IgKGNvbnN0IFtvYmplY3QsIGtleV0gb2YgdGVzdENhc2VzKCkpIHsKKyAgICBPYmplY3Qu
cHJldmVudEV4dGVuc2lvbnMob2JqZWN0KTsKKyAgICBvYmplY3Rba2V5XSA9IHRlc3RWYWx1ZTsK
KworICAgIGNvbnN0IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVj
dCwga2V5KTsKKyAgICBhc3NlcnQoZGVzYy52YWx1ZSA9PT0gdGVzdFZhbHVlLCBrZXkpOworICAg
IGFzc2VydChkZXNjLndyaXRhYmxlLCBrZXkpOworICAgIGFzc2VydCghZGVzYy5lbnVtZXJhYmxl
LCBrZXkpOworICAgIGFzc2VydChkZXNjLmNvbmZpZ3VyYWJsZSwga2V5KTsKK30KKworZm9yIChj
b25zdCBbb2JqZWN0LCBrZXldIG9mIHRlc3RDYXNlcygpKSB7CisgICAgY29uc3QgaGVpciA9IE9i
amVjdC5jcmVhdGUob2JqZWN0KTsKKyAgICBoZWlyW2tleV0gPSB0ZXN0VmFsdWU7CisKKyAgICBj
b25zdCBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihoZWlyLCBrZXkpOwor
ICAgIGFzc2VydChkZXNjLnZhbHVlID09PSB0ZXN0VmFsdWUsIGtleSk7CisgICAgYXNzZXJ0KGRl
c2Mud3JpdGFibGUsIGtleSk7CisgICAgYXNzZXJ0KGRlc2MuZW51bWVyYWJsZSwga2V5KTsKKyAg
ICBhc3NlcnQoZGVzYy5jb25maWd1cmFibGUsIGtleSk7CisgICAgYXNzZXJ0KG9iamVjdFtrZXld
ICE9PSB0ZXN0VmFsdWUsIGtleSk7Cit9CisKK2ZvciAoY29uc3QgW29iamVjdCwga2V5XSBvZiB0
ZXN0Q2FzZXMoKSkgeworICAgIGNvbnN0IHByb3RvdHlwZSA9IE9iamVjdC5nZXRQcm90b3R5cGVP
ZihvYmplY3QpOworICAgIGlmIChwcm90b3R5cGUgIT09IG51bGwpIHsKKyAgICAgICAgT2JqZWN0
LmRlZmluZVByb3BlcnR5KHByb3RvdHlwZSwga2V5LCB7CisgICAgICAgICAgICBzZXQoKSB7IHRo
cm93IG5ldyBFcnJvcihgJyR7a2V5fScgc2V0dGVyIHNob3VsZCBiZSB1bnJlYWNoYWJsZSFgKTsg
fSwKKyAgICAgICAgfSk7CisgICAgfQorCisgICAgY29uc3QgaGVpciA9IE9iamVjdC5jcmVhdGUo
b2JqZWN0KTsKKyAgICBoZWlyW2tleV0gPSB0ZXN0VmFsdWU7CisKKyAgICBjb25zdCBkZXNjID0g
T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihoZWlyLCBrZXkpOworICAgIGFzc2VydChk
ZXNjLnZhbHVlID09PSB0ZXN0VmFsdWUsIGtleSk7CisgICAgYXNzZXJ0KGRlc2Mud3JpdGFibGUs
IGtleSk7CisgICAgYXNzZXJ0KGRlc2MuZW51bWVyYWJsZSwga2V5KTsKKyAgICBhc3NlcnQoZGVz
Yy5jb25maWd1cmFibGUsIGtleSk7CisgICAgYXNzZXJ0KG9iamVjdFtrZXldICE9PSB0ZXN0VmFs
dWUsIGtleSk7Cit9CisKK2ZvciAoY29uc3QgW29iamVjdCwga2V5XSBvZiB0ZXN0Q2FzZXMoKSkg
eworICAgIGNvbnN0IGhlaXIgPSBPYmplY3QuY3JlYXRlKG9iamVjdCk7CisgICAgT2JqZWN0LnBy
ZXZlbnRFeHRlbnNpb25zKGhlaXIpOworCisgICAgc2hvdWxkVGhyb3coKCkgPT4geyBoZWlyW2tl
eV0gPSB0ZXN0VmFsdWU7IH0sICJUeXBlRXJyb3I6IEF0dGVtcHRlZCB0byBhc3NpZ24gdG8gcmVh
ZG9ubHkgcHJvcGVydHkuIik7CisgICAgYXNzZXJ0KGhlaXJba2V5XSAhPT0gdGVzdFZhbHVlLCBr
ZXkpOworICAgIGFzc2VydChvYmplY3Rba2V5XSAhPT0gdGVzdFZhbHVlLCBrZXkpOworfQpJbmRl
eDogSlNUZXN0cy9zdHJlc3Mvbm9uLXJlaWZpZWQtc3RhdGljLWN1c3RvbS1wdXQtdG8tcHJpbWl0
aXZlLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvc3RyZXNzL25vbi1yZWlmaWVkLXN0YXRpYy1j
dXN0b20tcHV0LXRvLXByaW1pdGl2ZS5qcwkobm9uZXhpc3RlbnQpCisrKyBKU1Rlc3RzL3N0cmVz
cy9ub24tcmVpZmllZC1zdGF0aWMtY3VzdG9tLXB1dC10by1wcmltaXRpdmUuanMJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw2NCBAQAorInVzZSBzdHJpY3QiOworCitmdW5jdGlvbiBzaG91bGRC
ZShhY3R1YWwsIGV4cGVjdGVkKSB7CisgICAgaWYgKGFjdHVhbCAhPT0gZXhwZWN0ZWQpCisgICAg
ICAgIHRocm93IG5ldyBFcnJvcihgQmFkIHZhbHVlOiAke2FjdHVhbH0hYCk7Cit9CisKK2Z1bmN0
aW9uIHNob3VsZFRocm93KGZ1bmMsIGVycm9yTWVzc2FnZSkgeworICAgIGxldCBlcnJvclRocm93
biA9IGZhbHNlOworICAgIHRyeSB7CisgICAgICAgIGZ1bmMoKTsKKyAgICB9IGNhdGNoIChlcnJv
cikgeworICAgICAgICBlcnJvclRocm93biA9IHRydWU7CisgICAgICAgIGlmIChTdHJpbmcoZXJy
b3IpICE9PSBlcnJvck1lc3NhZ2UpCisgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEJhZCBl
cnJvcjogJHtlcnJvcn1gKTsKKyAgICB9CisgICAgaWYgKCFlcnJvclRocm93bikKKyAgICAgICAg
dGhyb3cgbmV3IEVycm9yKCJEaWRuJ3QgdGhyb3chIik7Cit9CisKK2NvbnN0IHBvaXNvbmVkU2V0
dGVyID0geyBzZXQoKSB7IHRocm93IG5ldyBFcnJvcigiT2JqZWN0LnByb3RvdHlwZSBzZXR0ZXIg
c2hvdWxkIGJlIHVucmVhY2hhYmxlISIpOyB9IH07Citjb25zdCBwcmltaXRpdmVzID0gW3RydWUs
IDEsICIiLCBTeW1ib2woKSwgMG5dOworCisoZnVuY3Rpb24gdGVzdFN0YXRpY0N1c3RvbVZhbHVl
KCkgeworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKE9iamVjdC5wcm90b3R5cGUsIHsKKyAg
ICAgICAgdGVzdFN0YXRpY1ZhbHVlOiBwb2lzb25lZFNldHRlciwKKyAgICAgICAgdGVzdFN0YXRp
Y1ZhbHVlTm9TZXR0ZXI6IHBvaXNvbmVkU2V0dGVyLAorICAgICAgICB0ZXN0U3RhdGljVmFsdWVS
ZWFkT25seTogcG9pc29uZWRTZXR0ZXIsCisgICAgfSk7CisKKyAgICBmb3IgKGNvbnN0IHByaW1p
dGl2ZSBvZiBwcmltaXRpdmVzKSB7CisgICAgICAgIGNvbnN0IHByaW1pdGl2ZVByb3RvdHlwZSA9
IE9iamVjdC5nZXRQcm90b3R5cGVPZihwcmltaXRpdmUpOworICAgICAgICBjb25zdCBzdGF0aWND
dXN0b21WYWx1ZSA9ICR2bS5jcmVhdGVTdGF0aWNDdXN0b21WYWx1ZSgpOworICAgICAgICBPYmpl
Y3Quc2V0UHJvdG90eXBlT2YocHJpbWl0aXZlUHJvdG90eXBlLCBzdGF0aWNDdXN0b21WYWx1ZSk7
CisKKyAgICAgICAgcHJpbWl0aXZlLnRlc3RTdGF0aWNWYWx1ZSA9IDE7CisgICAgICAgIHNob3Vs
ZEJlKHN0YXRpY0N1c3RvbVZhbHVlLnRlc3RTdGF0aWNWYWx1ZSwgMSk7CisgICAgICAgIHNob3Vs
ZFRocm93KCgpID0+IHsgcHJpbWl0aXZlLnRlc3RTdGF0aWNWYWx1ZSA9IDE7IH0sICJUeXBlRXJy
b3I6IEF0dGVtcHRlZCB0byBhc3NpZ24gdG8gcmVhZG9ubHkgcHJvcGVydHkuIik7CisKKyAgICAg
ICAgc2hvdWxkVGhyb3coKCkgPT4geyBwcmltaXRpdmUudGVzdFN0YXRpY1ZhbHVlTm9TZXR0ZXIg
PSAxOyB9LCAiVHlwZUVycm9yOiBBdHRlbXB0ZWQgdG8gYXNzaWduIHRvIHJlYWRvbmx5IHByb3Bl
cnR5LiIpOworICAgICAgICBzaG91bGRUaHJvdygoKSA9PiB7IHByaW1pdGl2ZS50ZXN0U3RhdGlj
VmFsdWVSZWFkT25seSA9IDE7IH0sICJUeXBlRXJyb3I6IEF0dGVtcHRlZCB0byBhc3NpZ24gdG8g
cmVhZG9ubHkgcHJvcGVydHkuIik7CisgICAgICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZihwcmlt
aXRpdmVQcm90b3R5cGUsIE9iamVjdC5wcm90b3R5cGUpOworICAgIH0KK30pKCk7CisKKyhmdW5j
dGlvbiB0ZXN0U3RhdGljQ3VzdG9tQWNjZXNzb3IoKSB7CisgICAgT2JqZWN0LmRlZmluZVByb3Bl
cnRpZXMoT2JqZWN0LnByb3RvdHlwZSwgeworICAgICAgICB0ZXN0U3RhdGljQWNjZXNzb3I6IHBv
aXNvbmVkU2V0dGVyLAorICAgICAgICB0ZXN0U3RhdGljQWNjZXNzb3JSZWFkT25seTogcG9pc29u
ZWRTZXR0ZXIsCisgICAgfSk7CisKKyAgICBmb3IgKGNvbnN0IHByaW1pdGl2ZSBvZiBwcmltaXRp
dmVzKSB7CisgICAgICAgIGNvbnN0IHByaW1pdGl2ZVByb3RvdHlwZSA9IE9iamVjdC5nZXRQcm90
b3R5cGVPZihwcmltaXRpdmUpOworICAgICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YocHJpbWl0
aXZlUHJvdG90eXBlLCAkdm0uY3JlYXRlU3RhdGljQ3VzdG9tQWNjZXNzb3IoKSk7CisKKyAgICAg
ICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxMDAwOyBpKyspIHsKKyAgICAgICAgICAgIHByaW1pdGl2
ZS50ZXN0U3RhdGljQWNjZXNzb3IgPSBpOworICAgICAgICAgICAgc2hvdWxkQmUocHJpbWl0aXZl
UHJvdG90eXBlLnRlc3RGaWVsZCwgaSk7CisgICAgICAgIH0KKworICAgICAgICBzaG91bGRUaHJv
dygoKSA9PiB7IHByaW1pdGl2ZS50ZXN0U3RhdGljQWNjZXNzb3JSZWFkT25seSA9IDE7IH0sICJU
eXBlRXJyb3I6IEF0dGVtcHRlZCB0byBhc3NpZ24gdG8gcmVhZG9ubHkgcHJvcGVydHkuIik7Cisg
ICAgICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZihwcmltaXRpdmVQcm90b3R5cGUsIE9iamVjdC5w
cm90b3R5cGUpOworICAgIH0KK30pKCk7CkluZGV4OiBKU1Rlc3RzL3N0cmVzcy9wcm90by1jaGFp
bi1wdXQtb3ZlcnJpZGUuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3MvcHJvdG8tY2hh
aW4tcHV0LW92ZXJyaWRlLmpzCShub25leGlzdGVudCkKKysrIEpTVGVzdHMvc3RyZXNzL3Byb3Rv
LWNoYWluLXB1dC1vdmVycmlkZS5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEzOCBAQAor
Y29uc3QgVEVTVF9WQUxVRSA9IDEwNjI2MzA3MTM7IC8vIEFycmF5J3MgImxlbmd0aCIgaXMgcmVx
dWlyZWQgdG8gYmUgaW50MzIKKwordGVzdFNldFJlc3VsdChbMSwgMl0sICJsZW5ndGgiLCB0cnVl
KTsKK3Rlc3RTZXRSZXN1bHQoCisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG5ldyBBcnJheSwg
Imxlbmd0aCIsIHsgd3JpdGFibGU6IGZhbHNlIH0pLAorICAgICJsZW5ndGgiLAorICAgIGZhbHNl
LAorKTsKKwordGVzdFNldFJlc3VsdChuZXcgU3RyaW5nLCAibGVuZ3RoIiwgZmFsc2UpOwordGVz
dFNldFJlc3VsdChuZXcgUmVnRXhwLCAibGFzdEluZGV4IiwgdHJ1ZSk7Cit0ZXN0U2V0UmVzdWx0
KAorICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSgvKD86KS9nLCAibGFzdEluZGV4IiwgeyB3cml0
YWJsZTogZmFsc2UgfSksCisgICAgImxhc3RJbmRleCIsCisgICAgZmFsc2UsCispOworCitmb3Ig
KGNvbnN0IGtleSBvZiBbImxpbmUiLCAiY29sdW1uIiwgInNvdXJjZVVSTCIsICJzdGFjayJdKQor
ICAgIHRlc3RTZXRSZXN1bHQobmV3IEVycm9yLCBrZXksIHRydWUpOworCitjb25zdCBtYXBwZWRB
cmd1bWVudHMgPSAoZnVuY3Rpb24oYSwgYikgeyByZXR1cm4gYXJndW1lbnRzOyB9KSgxLCAyKTsK
K3Rlc3RTZXRSZXN1bHQobWFwcGVkQXJndW1lbnRzLCAiY2FsbGVlIiwgdHJ1ZSk7Cit0ZXN0U2V0
UmVzdWx0KG1hcHBlZEFyZ3VtZW50cywgImxlbmd0aCIsIHRydWUpOwordGVzdFNldFJlc3VsdCht
YXBwZWRBcmd1bWVudHMsIFN5bWJvbC5pdGVyYXRvciwgdHJ1ZSk7CisKK2NvbnN0IHVubWFwcGVk
QXJndW1lbnRzID0gKGZ1bmN0aW9uKCkgeyAidXNlIHN0cmljdCI7IHJldHVybiBhcmd1bWVudHM7
IH0pKCk7Cit0ZXN0U2V0UmVzdWx0KHVubWFwcGVkQXJndW1lbnRzLCAibGVuZ3RoIiwgdHJ1ZSk7
Cit0ZXN0U2V0UmVzdWx0KHVubWFwcGVkQXJndW1lbnRzLCBTeW1ib2wuaXRlcmF0b3IsIHRydWUp
OworCit2YXIgZm9vOworZnVuY3Rpb24gYmFyKCkge30KK2ZvciAoY29uc3Qga2V5IG9mIFsiZm9v
IiwgImJhciIsICJwYXJzZUludCJdKQorICAgIHRlc3RTZXRSZXN1bHQoZ2xvYmFsVGhpcywga2V5
LCB0cnVlKTsKKworZm9yIChjb25zdCBrZXkgb2YgWyJJbmZpbml0eSIsICJOYU4iLCAidW5kZWZp
bmVkIl0pCisgICAgdGVzdFNldFJlc3VsdChnbG9iYWxUaGlzLCBrZXksIGZhbHNlKTsKKworZm9y
IChjb25zdCBrZXkgb2YgWyJuYW1lIiwgImxlbmd0aCJdKSB7CisgICAgdGVzdFNldFJlc3VsdChm
dW5jdGlvbigpIHt9LmJpbmQoKSwga2V5LCBmYWxzZSk7CisgICAgdGVzdFNldFJlc3VsdCgKKyAg
ICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGZ1bmN0aW9uKCkge30sIGtleSwgeyB3cml0YWJs
ZTogdHJ1ZSB9KSwKKyAgICAgICAga2V5LAorICAgICAgICB0cnVlLAorICAgICk7CisKKyAgICB0
ZXN0U2V0UmVzdWx0KCgpID0+IHsgInVzZSBzdHJpY3QiOyB9LCBrZXksIGZhbHNlKTsKKyAgICB0
ZXN0U2V0UmVzdWx0KAorICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocGFyc2VGbG9hdCwg
a2V5LCB7IHdyaXRhYmxlOiB0cnVlIH0pLAorICAgICAgICBrZXksCisgICAgICAgIHRydWUsCisg
ICAgKTsKK30KKwordGVzdFNldFJlc3VsdChmdW5jdGlvbigpIHsgInVzZSBzdHJpY3QiOyB9LCAi
cHJvdG90eXBlIiwgdHJ1ZSk7Cit0ZXN0U2V0UmVzdWx0KAorICAgIE9iamVjdC5kZWZpbmVQcm9w
ZXJ0eShmdW5jdGlvbigpIHt9LCAicHJvdG90eXBlIiwgeyB3cml0YWJsZTogZmFsc2UgfSksCisg
ICAgInByb3RvdHlwZSIsCisgICAgZmFsc2UsCispOworCit0ZXN0U2V0UmVzdWx0KGZ1bmN0aW9u
KCkge30sICJhcmd1bWVudHMiLCBmYWxzZSk7Cit0ZXN0U2V0UmVzdWx0KGZ1bmN0aW9uKCkge30s
ICJjYWxsZXIiLCBmYWxzZSk7CisKKy8vID09PSBoYXJuZXNzID09PQorCitmdW5jdGlvbiB0ZXN0
U2V0UmVzdWx0KHRhcmdldCwga2V5LCBleHBlY3RlZFJlc3VsdCkgeworICAgIFJlZmxlY3Quc2V0
UHJvdG90eXBlT2YodGFyZ2V0LCBtYWtlT2JqZWN0V2l0aEVtcHR5U2V0dGVyKGtleSkpOyAvLyBn
bG9iYWwgb2JqZWN0IGhhcyBpbW11dGFibGUgW1tQcm90b3R5cGVdXQorCisgICAgZm9yIChjb25z
dCBwcmltaXRpdmUgb2YgW3RydWUsIDEsICJmb28iLCBTeW1ib2woKSwgMG5dKSB7CisgICAgICAg
IGNvbnN0IHByaW1pdGl2ZVByb3RvdHlwZSA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihwcmltaXRp
dmUpOworICAgICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YocHJpbWl0aXZlUHJvdG90eXBlLCB0
YXJnZXQpOworICAgICAgICB0ZXN0U2V0UmVzdWx0SW50ZXJuYWwodGFyZ2V0LCBrZXksIHByaW1p
dGl2ZSwgZmFsc2UpOworICAgICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YocHJpbWl0aXZlUHJv
dG90eXBlLCBPYmplY3QucHJvdG90eXBlKTsKKyAgICB9CisKKyAgICBSZWZsZWN0LnNldFByb3Rv
dHlwZU9mKHRhcmdldCwgbWFrZU9iamVjdFdpdGhQb2lzb25lZFNldHRlcihrZXkpKTsgLy8gZ2xv
YmFsIG9iamVjdCBoYXMgaW1tdXRhYmxlIFtbUHJvdG90eXBlXV0KKworICAgIGZvciAoY29uc3Qg
cmVjZWl2ZXIgb2YgWworICAgICAgICBPYmplY3QuY3JlYXRlKHRhcmdldCksCisgICAgICAgIE9i
amVjdC5jcmVhdGUoT2JqZWN0LmNyZWF0ZSh0YXJnZXQpKSwKKyAgICAgICAgbmV3IFByb3h5KHRh
cmdldCwge30pLAorICAgICAgICBuZXcgUHJveHkodGFyZ2V0LCBSZWZsZWN0KSwKKyAgICBdKSB7
CisgICAgICAgIHRlc3RTZXRSZXN1bHRJbnRlcm5hbCh0YXJnZXQsIGtleSwgcmVjZWl2ZXIsIGV4
cGVjdGVkUmVzdWx0KTsKKyAgICB9Cit9CisKK2Z1bmN0aW9uIG1ha2VPYmplY3RXaXRoRW1wdHlT
ZXR0ZXIoa2V5KSB7CisgICAgcmV0dXJuIE9iamVjdC5jcmVhdGUobnVsbCwgeworICAgICAgICBb
a2V5XTogeyBzZXQoKSB7fSB9LAorICAgIH0pOworfQorCitmdW5jdGlvbiBtYWtlT2JqZWN0V2l0
aFBvaXNvbmVkU2V0dGVyKGtleSkgeworICAgIHJldHVybiBPYmplY3QuY3JlYXRlKG51bGwsIHsK
KyAgICAgICAgW2tleV06IHsKKyAgICAgICAgICAgIHNldCgpIHsgdGhyb3cgbmV3IEVycm9yKGAk
e1N0cmluZyhrZXkpfSBzZXR0ZXIgc2hvdWxkIGJlIHVucmVhY2hhYmxlIWApOyB9LAorICAgICAg
ICB9LAorICAgIH0pOworfQorCitmdW5jdGlvbiB0ZXN0U2V0UmVzdWx0SW50ZXJuYWwodGFyZ2V0
LCBrZXksIHJlY2VpdmVyLCBleHBlY3RlZFJlc3VsdCkgeworICAgIHJlY2VpdmVyW2tleV0gPSBU
RVNUX1ZBTFVFOworICAgIHNob3VsZEJlKHJlY2VpdmVyW2tleV0gPT09IFRFU1RfVkFMVUUsIGV4
cGVjdGVkUmVzdWx0LCBrZXkpOworCisgICAgdGVzdFNldFJlc3VsdFN0cmljdChyZWNlaXZlciwg
a2V5LCBleHBlY3RlZFJlc3VsdCk7CisKKyAgICBpZiAocmVjZWl2ZXIgPT09IE9iamVjdChyZWNl
aXZlcikpCisgICAgICAgIHNob3VsZEJlKFJlZmxlY3Quc2V0KHJlY2VpdmVyLCBrZXksIFRFU1Rf
VkFMVUUpLCBleHBlY3RlZFJlc3VsdCwga2V5KTsKKyAgICBzaG91bGRCZShSZWZsZWN0LnNldCh0
YXJnZXQsIGtleSwgVEVTVF9WQUxVRSwgcmVjZWl2ZXIpLCBleHBlY3RlZFJlc3VsdCwga2V5KTsK
K30KKworZnVuY3Rpb24gdGVzdFNldFJlc3VsdFN0cmljdChyZWNlaXZlciwga2V5LCBleHBlY3Rl
ZFJlc3VsdCkgeworICAgICJ1c2Ugc3RyaWN0IjsKKyAgICBpZiAoZXhwZWN0ZWRSZXN1bHQpIHsK
KyAgICAgICAgcmVjZWl2ZXJba2V5XSA9IFRFU1RfVkFMVUU7CisgICAgICAgIHNob3VsZEJlKHJl
Y2VpdmVyW2tleV0sIFRFU1RfVkFMVUUsIGtleSk7CisgICAgfSBlbHNlCisgICAgICAgIHNob3Vs
ZFRocm93VHlwZUVycm9yKCgpID0+IHsgcmVjZWl2ZXJba2V5XSA9IFRFU1RfVkFMVUU7IH0pOwor
fQorCitmdW5jdGlvbiBzaG91bGRCZShhY3R1YWwsIGV4cGVjdGVkLCBrZXkpIHsKKyAgICBpZiAo
YWN0dWFsICE9PSBleHBlY3RlZCkKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke2FjdHVhbH0g
IT09ICR7ZXhwZWN0ZWR9LiBLZXk6ICR7U3RyaW5nKGtleSl9YCk7Cit9CisKK2Z1bmN0aW9uIHNo
b3VsZFRocm93VHlwZUVycm9yKGZ1bmMpIHsKKyAgICBsZXQgZXJyb3JUaHJvd24gPSBmYWxzZTsK
KyAgICB0cnkgeworICAgICAgICBmdW5jKCk7CisgICAgfSBjYXRjaCAoZXJyb3IpIHsKKyAgICAg
ICAgZXJyb3JUaHJvd24gPSB0cnVlOworICAgICAgICBpZiAoZXJyb3IuY29uc3RydWN0b3IgIT09
IFR5cGVFcnJvcikKKyAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQmFkIGVycm9yOiAke2Vy
cm9yfWApOworICAgIH0KKyAgICBpZiAoIWVycm9yVGhyb3duKQorICAgICAgICB0aHJvdyBuZXcg
RXJyb3IoIkRpZG4ndCB0aHJvdyEiKTsKK30KSW5kZXg6IEpTVGVzdHMvc3RyZXNzL3R5cGVkLWFy
cmF5LWNhbm9uaWNhbC1udW1lcmljLWluZGV4LXN0cmluZy1zZXQuanMKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
SlNUZXN0cy9zdHJlc3MvdHlwZWQtYXJyYXktY2Fub25pY2FsLW51bWVyaWMtaW5kZXgtc3RyaW5n
LXNldC5qcwkobm9uZXhpc3RlbnQpCisrKyBKU1Rlc3RzL3N0cmVzcy90eXBlZC1hcnJheS1jYW5v
bmljYWwtbnVtZXJpYy1pbmRleC1zdHJpbmctc2V0LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNTggQEAKKyd1c2Ugc3RyaWN0JzsKK2NvbnN0IFR5cGVkQXJyYXlzID0gW1VpbnQ4Q2xhbXBl
ZEFycmF5LCBVaW50OEFycmF5LCBVaW50MTZBcnJheSwgVWludDMyQXJyYXksIEludDhBcnJheSwg
SW50MTZBcnJheSwgSW50MzJBcnJheSwgRmxvYXQzMkFycmF5LCBGbG9hdDY0QXJyYXldOworY29u
c3QgY2Fub25pY2FsTnVtZXJpY0luZGV4U3RyaW5ncyA9IFsnLTAnLCAnLTEnLCAnLTMuMTQnLCAn
SW5maW5pdHknLCAnLUluZmluaXR5JywgJ05hTicsICcwLjUnLCAnNDI5NDk2NzI5NScsICc0Mjk0
OTY3Mjk2J107CisKK2Z1bmN0aW9uIGFzc2VydCh4LCBrZXkpIHsKKyAgICBpZiAoIXgpCisgICAg
ICAgIHRocm93IG5ldyBFcnJvcihgQmFkIGFzc2VydGlvbiEgS2V5OiAnJHtrZXl9J2ApOworfQor
Citmb3IgKGNvbnN0IFR5cGVkQXJyYXkgb2YgVHlwZWRBcnJheXMpIHsKKyAgICBmb3IgKGNvbnN0
IGtleSBvZiBjYW5vbmljYWxOdW1lcmljSW5kZXhTdHJpbmdzKSB7CisgICAgICAgIGNvbnN0IGFz
c2VydFByb3RvdHlwZVByb3BlcnR5SXNVbnJlYWNoYWJsZSA9ICgpID0+IHsKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBjb25zdCB0QSA9IG5ldyBUeXBlZEFycmF5OworICAgICAgICAg
ICAgICAgIHRBW2tleV0gPSAxOworICAgICAgICAgICAgICAgIGFzc2VydCghdEEuaGFzT3duUHJv
cGVydHkoa2V5KSwga2V5KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIGNvbnN0IHRBID0gbmV3IFR5cGVkQXJyYXk7CisgICAgICAgICAgICAgICAgY29u
c3QgaGVpciA9IE9iamVjdC5jcmVhdGUodEEpOworICAgICAgICAgICAgICAgIGhlaXJba2V5XSA9
IDI7CisKKyAgICAgICAgICAgICAgICBhc3NlcnQoIXRBLmhhc093blByb3BlcnR5KGtleSksIGtl
eSk7CisgICAgICAgICAgICAgICAgYXNzZXJ0KCFoZWlyLmhhc093blByb3BlcnR5KGtleSksIGtl
eSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb25z
dCB0YXJnZXQgPSB7fTsKKyAgICAgICAgICAgICAgICBjb25zdCByZWNlaXZlciA9IG5ldyBUeXBl
ZEFycmF5OworCisgICAgICAgICAgICAgICAgYXNzZXJ0KCFSZWZsZWN0LnNldCh0YXJnZXQsIGtl
eSwgMywgcmVjZWl2ZXIpLCBrZXkpOworICAgICAgICAgICAgICAgIGFzc2VydCghdGFyZ2V0Lmhh
c093blByb3BlcnR5KGtleSksIGtleSk7CisgICAgICAgICAgICAgICAgYXNzZXJ0KCFyZWNlaXZl
ci5oYXNPd25Qcm9wZXJ0eShrZXkpLCBrZXkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgY29uc3QgdEEgPSBuZXcgVHlwZWRBcnJheTsKKyAgICAgICAg
ICAgICAgICBjb25zdCB0YXJnZXQgPSBPYmplY3QuY3JlYXRlKHRBKTsKKyAgICAgICAgICAgICAg
ICBjb25zdCByZWNlaXZlciA9IHt9OworCisgICAgICAgICAgICAgICAgYXNzZXJ0KFJlZmxlY3Qu
c2V0KHRhcmdldCwga2V5LCA0LCByZWNlaXZlciksIGtleSk7CisgICAgICAgICAgICAgICAgYXNz
ZXJ0KCF0QS5oYXNPd25Qcm9wZXJ0eShrZXkpLCBrZXkpOworICAgICAgICAgICAgICAgIGFzc2Vy
dCghdGFyZ2V0Lmhhc093blByb3BlcnR5KGtleSksIGtleSk7CisgICAgICAgICAgICAgICAgYXNz
ZXJ0KCFyZWNlaXZlci5oYXNPd25Qcm9wZXJ0eShrZXkpLCBrZXkpOworICAgICAgICAgICAgfQor
ICAgICAgICB9OworCisgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUeXBlZEFycmF5LnBy
b3RvdHlwZSwga2V5LCB7CisgICAgICAgICAgICBzZXQoKSB7IHRocm93IG5ldyBFcnJvcihgJHtU
eXBlZEFycmF5Lm5hbWV9LnByb3RvdHlwZVsnJHtrZXl9J10gc2V0dGVyIHNob3VsZCBiZSB1bnJl
YWNoYWJsZSFgKTsgfSwKKyAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKKyAgICAgICAg
fSk7CisgICAgICAgIGFzc2VydFByb3RvdHlwZVByb3BlcnR5SXNVbnJlYWNoYWJsZSgpOworCisg
ICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUeXBlZEFycmF5LnByb3RvdHlwZSwga2V5LCB7
IHdyaXRhYmxlOiBmYWxzZSB9KTsKKyAgICAgICAgYXNzZXJ0UHJvdG90eXBlUHJvcGVydHlJc1Vu
cmVhY2hhYmxlKCk7CisgICAgfQorfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5n
ZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCShyZXZp
c2lvbiAyNzU5NjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDMgKzEsMTUyIEBACisyMDIxLTA0LTE0ICBBbGV4ZXkgU2h2YXlrYSAgPHNo
dmFpa2FsZXNoQGdtYWlsLmNvbT4KKworICAgICAgICBbSlNDXSBPcmRpbmFyeVNldCBzaG91bGQg
aW52b2tlIGN1c3RvbSBbW1NldF1dIG1ldGhvZHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNzkxNgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggZml4ZXMgcHV0SW5saW5lU2xvdygpIHRv
IGhhbmRsZSBzcGVjaWFsIHByb3BlcnRpZXMgKGxpa2UgSlNGdW5jdGlvbidzICJuYW1lIgorICAg
ICAgICBhbmQgSlNBcnJheSdzICJsZW5ndGgiKSBpbiBwcm90b3R5cGUgY2hhaW4uIFdoZW4gc3Vj
aCBwcm9wZXJ0eSBpcyBlbmNvdW50ZXJlZCwgcHJvdG90eXBlCisgICAgICAgIGNoYWluIHRyYXZl
cnNhbCBpcyBzdG9wcGVkOyBpZiBpdCdzIHJlYWQtb25seSwgYSBUeXBlRXJyb3IgaXMgdGhyb3du
IGluIHN0cmljdCBtb2RlLgorCisgICAgICAgIFRoaXMgY2hhbmdlIGludHJvZHVjZXMgT3ZlcnJp
ZGVzUHV0IG91dCBvZiBsaW5lIHR5cGUgaW5mbyBmbGFnLCBhbmQgdXRpbGl6ZXMgaXQgaW4KKyAg
ICAgICAgcHV0SW5saW5lU2xvdygpIHRvIGludm9rZSBvdmVycmlkZW4gbWV0aG9kcy4gV2hpbGUg
dGhpcyBhcHByb2FjaCByZXF1aXJlcyBwdXQoKSBtZXRob2RzCisgICAgICAgIHRvIGJlIGF3YXJl
IG9mIGFsdGVyZWQgcmVjZWl2ZXJzLCBpdCByZW5kZXJzIHNldmVyYWwgYmVuZWZpdHM6CisgICAg
ICAgICAgMS4gcHV0KCkgbWV0aG9kIGNhbiBiZSB1c2VkIGZvciBib3RoICJyZWFsIiBbW1NldF1d
IG92ZXJyaWRlcyBhbmQgc3BlY2lhbCBwcm9wZXJ0aWVzLAorICAgICAgICAgICAgIHdpdGggaXRz
IHJldHVybiB2YWx1ZSByZW1haW5pbmcgYGJvb2xgOworICAgICAgICAgIDIuIGl0IGlzIHNpbXBs
ZXIsIGZhc3RlciwgYW5kIG1vcmUgcHJlZGljdGFibGUgdGhhbiBjYWxsaW5nIFtbR2V0T3duUHJv
cGVydHldXSBpbgorICAgICAgICAgICAgIHB1dElubGluZVNsb3coKSBvciBhZGRpbmcgZGVmaW5l
T3duUHJvcGVydHlWaWFQdXQoKSB0byB0aGUgbWV0aG9kIHRhYmxlLgorCisgICAgICAgIFJlbW92
ZXMgb3JkaW5hcnlTZXRTbG93KCkgZm9yIG5vbi1pbmRleCBwcm9wZXJ0aWVzLCB3aGljaCBkaWRu
J3QgaW52b2tlIHNvbWUgW1tTZXRdXQorICAgICAgICBtZXRob2RzIGFzIHdlbGwuIEluc3RlYWQs
IGRlZmluZVByb3BlcnR5T25SZWNlaXZlcigpIGlzIGludHJvZHVjZWQgZm9yIGFsdGVyZWQgcmVj
ZWl2ZXJzLgorICAgICAgICBJdCBwZXJmb3JtcyBjb3JyZWN0bHkgd2hlbiByZWFjaGVkIGJlY2F1
c2U6CisgICAgICAgICAgMS4gYWxsIHNwZWNpYWwgcHJvcGVydGllcyB3ZXJlIGFscmVhZHkgaGFu
ZGxlZCAodW5sZXNzIGl0J3MgUmVmbGVjdC5zZXQpOworICAgICAgICAgIDIuIHBlcmZvcm1pbmcg
cHV0RGlyZWN0SW50ZXJuYWwoKSBpcyB1bm9ic2VydmFibGUgKHVubGVzcyBQcm94eU9iamVjdCB3
YXMgc2Vlbik7CisgICAgICAgICAgMy4gcHV0RGlyZWN0SW50ZXJuYWwoKSBub3cgZnVsbHkgaW1w
bGVtZW50cyBwcm9wZXJ0eSBkZWZpbml0aW9uIG9mIE9yZGluYXJ5U2V0IFsxXTsKKyAgICAgICAg
ICA0LiBwdXQoKSBvdmVycmlkZSBpcyByZXF1aXJlZCBpZiBhIHNwZWMgZGVmaW5lcyBjdXN0b20g
W1tEZWZpbmVPd25Qcm9wZXJ0eV1dLgorCisgICAgICAgIFNpbmNlIGluZGV4ZWQgcHV0cyBoYW5k
bGUgb3ZlcnJpZGVzIC8gYWx0ZXJlZCByZWNlaXZlcnMgcXVpdGUgZGlmZmVyZW50bHksIHRoZXkg
d2lsbAorICAgICAgICBiZSBmaXhlZCBpbiBhIGZvbGxvdy11cCwgY29tcGxldGVseSByZW1vdmlu
ZyBvcmRpbmFyeVNldFNsb3coKS4KKworICAgICAgICBUaGlzIHBhdGNoIG5pY2VseSBpbmxpbmVz
IHB1dEVudHJ5KCkgaW50byBwdXRJbmxpbmVTbG93KCksIGZpeGluZyBhIGZldyBidWdzOgorICAg
ICAgICAgIDEuIERpcmVjdCBbW1NldF1dIHRvIG5vbi1yZWlmaWVkIHN0YXRpYyBwcm9wZXJ0eSBu
b3cgcHJlc2VydmVzIGl0cyBhdHRyaWJ1dGVzIHdoZW4gcmVwbGFjaW5nIFtbVmFsdWVdXS4KKyAg
ICAgICAgICAyLiBQcm90b3R5cGUgY2hhaW4gW1tTZXRdXSB0byBub24tcmVpZmllZCBzdGF0aWMg
cHJvcGVydHkgbm93IHRocm93cyBpZiByZWNlaXZlciBpcyBub24tZXh0ZW5zaWJsZS4KKyAgICAg
ICAgICAzLiBOb24tcmVpZmllZCBzdGF0aWMgd3JpdGFibGUgcHJvcGVydHkgbm93IHNoYWRvd3Mg
cmVhZC1vbmx5IG9uZSB0aGF0IGlzIGZ1cnRoZXIgaW4gcHJvdG90eXBlIGNoYWluLgorCisgICAg
ICAgIEFsc28sIG1lcmdlcyBwdXRUb1ByaW1pdGl2ZSgpIGludG8gSlNPYmplY3Q6OnB1dCgpLCBy
ZW1vdmluZyBhIGxvdCBvZiBkdXBsaWNhdGVkIGxvZ2ljIGFuZAorICAgICAgICBmaXhpbmcgbm9u
LXJlaWZpZWQgc3RhdGljIHByb3BlcnRpZXMgaW4gcHJvdG90eXBlIGNoYWluIG9mIGEgcHJpbWl0
aXZlIHRvIGJlIGNvbnNpZGVyZWQuCisKKyAgICAgICAgQSBmZXcgdHdlYWtzIHRoYXQgY291bGQg
YmUgYnVncywgYnV0IHdlcmUgdW5vYnNlcnZhYmxlOgorICAgICAgICAgIDEuIFByb3BlcnR5QXR0
cmlidXRlOjpDdXN0b21WYWx1ZSBpcyBub3cgdW5zZXQgd2hlbiBhIHNldHRlci1sZXNzIHByb3Bl
cnR5IGlzIHJlYXNzaWduZWQuCisgICAgICAgICAgMi4gdWludDY0X3QgcHV0QnlJbmRleElubGlu
ZSgpIG5vdyBjYWxscyBwdXQoKSB2aWEgbWV0aG9kIHRhYmxlIGxpa2UgdWludDMyX3QgY291bnRl
cnBhcnQuCisKKyAgICAgICAgTm90YWJsZSByZWZhY3RvcnM6CisgICAgICAgICAgMS4gSW5saW5l
cyBjYWxsQ3VzdG9tU2V0dGVyKCksIGRyb3BwaW5nIHdlaXJkIFRyaVN0YXRlIHJldHVybiB2YWx1
ZS4KKyAgICAgICAgICAyLiBTaW1wbGlmaWVzIGluaXRpYWxpemF0aW9uIG9mIFN0cmluZ1Byb3Rv
dHlwZS4KKyAgICAgICAgICAzLiBTaW1wbGlmaWVzIGlzVGhpc1ZhbHVlQWx0ZXJlZCgpIHRvIHBv
aW50ZXIgY29tcGFyaXNvbnMgYXQgbm9uLUpTUHJveHkgY2FsbCBzaXRlcy4KKyAgICAgICAgICA0
LiBSZW1vdmVzIGRvUHV0UHJvcGVydHlTZWN1cml0eUNoZWNrKCkgbWV0aG9kcyBhcyB0aGUgc2Ft
ZSBjaGVja3MgYXJlIHBlcmZvcm1lZCBieSBwdXQoKSBtZXRob2RzLgorICAgICAgICAgIDUuIFJl
bW92ZXMgcHJvdG90eXBlQ2hhaW5NYXlJbnRlcmNlcHRTdG9yZVRvKCksIHdoaWNoIHByZXR0eSBt
dWNoIGR1cGxpY2F0ZWQgY2FuUGVyZm9ybUZhc3RQdXRJbmxpbmUoKS4KKyAgICAgICAgICA2LiBS
ZW1vdmVzIGR1bW15IEpTQXJyYXlCdWZmZXJWaWV3OjpwdXQoKSBtZXRob2QuCisgICAgICAgICAg
Ny4gUmVtb3ZlcyBub3cgdW51c2VkIGxvb2t1cFB1dCgpLgorCisgICAgICAgIEFsaWducyBKU0Mg
d2l0aCBWOCBhbmQgU3BpZGVyTW9ua2V5LgorCisgICAgICAgIFRoaXMgcGF0Y2ggY2FyZWZ1bGx5
IHByZXNlcnZlcyB0aGUgY3VycmVudCBiZWhhdmlvciBvZiBSZWZsZWN0LnNldCB3aXRoIEN1c3Rv
bVZhbHVlCisgICAgICAgIGFuZCBwcm90b3R5cGUgY2hhaW4gW1tTZXRdXSB0byBhIEpTQ2FsbGJh
Y2tPYmplY3QgLyBsZWdhY3kgcGxhdGZvcm0gb2JqZWN0LgorCisgICAgICAgIFRoaXMgY2hhbmdl
IGlzIHBlcmZvcm1hbmNlLW5ldXRyYWwgb24gL3B1dC8gbWljcm9iZW5jaG1hcmtzIGFzIGl0IGRv
ZXNuJ3QgYWZmZWN0CisgICAgICAgIGNhY2hpbmcsIG9ubHkgdGhlIHNsb3cgcGF0aC4gUmVmbGVj
dC5zZXQgd2l0aCBKU0ZpbmFsT2JqZWN0IHJlY2VpdmVyIGlzIDEzMCUgZmFzdGVyLgorICAgICAg
ICBwdXRJbmxpbmVTbG93KCkgbWljcm9iZW5jaG1hcmtzIHByb2dyZXNzIGJ5IDQtMTglLgorCisg
ICAgICAgIFsxXTogaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vcmRpbmFyeXNldHdpdGhv
d25kZXNjcmlwdG9yIChzdGVwIDMpCisKKyAgICAgICAgKiBBUEkvSlNDYWxsYmFja09iamVjdC5o
OgorICAgICAgICAqIEFQSS9KU0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25zLmg6CisgICAgICAgIChK
U0M6OkpTQ2FsbGJhY2tPYmplY3Q8UGFyZW50Pjo6cHV0KToKKyAgICAgICAgKiBBUEkvdGVzdHMv
dGVzdGFwaVNjcmlwdHMvdGVzdGFwaS5qczoKKyAgICAgICAgKiBkZWJ1Z2dlci9EZWJ1Z2dlclNj
b3BlLmg6CisgICAgICAgICogcnVudGltZS9DbGFzc0luZm8uaDoKKyAgICAgICAgKiBydW50aW1l
L0Nsb25lZEFyZ3VtZW50cy5oOgorICAgICAgICAqIHJ1bnRpbWUvQ3VzdG9tR2V0dGVyU2V0dGVy
LmNwcDoKKyAgICAgICAgKEpTQzo6Y2FsbEN1c3RvbVNldHRlcik6IERlbGV0ZWQuCisgICAgICAg
ICogcnVudGltZS9DdXN0b21HZXR0ZXJTZXR0ZXIuaDoKKyAgICAgICAgKiBydW50aW1lL0Vycm9y
Q29uc3RydWN0b3IuaDoKKyAgICAgICAgKiBydW50aW1lL0Vycm9ySW5zdGFuY2UuaDoKKyAgICAg
ICAgKiBydW50aW1lL0dlbmVyaWNBcmd1bWVudHMuaDoKKyAgICAgICAgKiBydW50aW1lL0dlbmVy
aWNBcmd1bWVudHNJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkdlbmVyaWNBcmd1bWVudHM8VHlw
ZT46OnB1dCk6CisgICAgICAgICogcnVudGltZS9HZXR0ZXJTZXR0ZXIuaDoKKyAgICAgICAgKiBy
dW50aW1lL0pTQXJyYXkuY3BwOgorICAgICAgICAoSlNDOjpKU0FycmF5OjpwdXQpOgorICAgICAg
ICAqIHJ1bnRpbWUvSlNBcnJheS5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNBcnJheUJ1ZmZlclZp
ZXcuY3BwOgorICAgICAgICAoSlNDOjpKU0FycmF5QnVmZmVyVmlldzo6cHV0KTogRGVsZXRlZC4K
KyAgICAgICAgKiBydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3Lmg6CisgICAgICAgICogcnVudGlt
ZS9KU0NKU1ZhbHVlLmNwcDoKKyAgICAgICAgKEpTQzo6SlNWYWx1ZTo6cHV0VG9QcmltaXRpdmUp
OgorICAgICAgICAqIHJ1bnRpbWUvSlNDZWxsLmNwcDoKKyAgICAgICAgKEpTQzo6SlNDZWxsOjpk
b1B1dFByb3BlcnR5U2VjdXJpdHlDaGVjayk6IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9K
U0NlbGwuaDoKKyAgICAgICAgKiBydW50aW1lL0pTRnVuY3Rpb24uY3BwOgorICAgICAgICAoSlND
OjpKU0Z1bmN0aW9uOjpwdXQpOgorICAgICAgICAqIHJ1bnRpbWUvSlNGdW5jdGlvbi5oOgorICAg
ICAgICAqIHJ1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXcuaDoKKyAgICAgICAgKiBydW50
aW1lL0pTR2xvYmFsTGV4aWNhbEVudmlyb25tZW50Lmg6CisgICAgICAgICogcnVudGltZS9KU0ds
b2JhbE9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0OjpwdXQpOgorICAg
ICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuaDoKKyAgICAgICAgKiBydW50aW1lL0pTTGV4
aWNhbEVudmlyb25tZW50Lmg6CisgICAgICAgICogcnVudGltZS9KU01vZHVsZUVudmlyb25tZW50
Lmg6CisgICAgICAgICogcnVudGltZS9KU01vZHVsZU5hbWVzcGFjZU9iamVjdC5oOgorICAgICAg
ICAqIHJ1bnRpbWUvSlNPYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Z2V0T3du
UHJvcGVydHlTbG90KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1dElubGluZVNsb3cpOgor
ICAgICAgICAoSlNDOjpKU09iamVjdDo6ZGVmaW5lUHJvcGVydHlPblJlY2VpdmVyKToKKyAgICAg
ICAgKEpTQzo6SlNPYmplY3Q6OmRlZmluZVByb3BlcnR5T25SZWNlaXZlclNsb3cpOgorICAgICAg
ICAoSlNDOjpKU09iamVjdDo6ZG9QdXRQcm9wZXJ0eVNlY3VyaXR5Q2hlY2spOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpKU09iamVjdDo6cHJvdG90eXBlQ2hhaW5NYXlJbnRlcmNlcHRTdG9yZVRv
KTogRGVsZXRlZC4KKyAgICAgICAgKiBydW50aW1lL0pTT2JqZWN0Lmg6CisgICAgICAgIChKU0M6
OkpTT2JqZWN0OjpwdXRCeUluZGV4SW5saW5lKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6Omdl
dE93blByb3BlcnR5U2xvdCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpwdXREaXJlY3QpOgor
ICAgICAgICAoSlNDOjpKU09iamVjdDo6ZG9QdXRQcm9wZXJ0eVNlY3VyaXR5Q2hlY2spOiBEZWxl
dGVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNPYmplY3RJbmxpbmVzLmg6CisgICAgICAgIChKU0M6
OkpTT2JqZWN0OjpjYW5QZXJmb3JtRmFzdFB1dElubGluZUV4Y2x1ZGluZ1Byb3RvKToKKyAgICAg
ICAgKEpTQzo6SlNPYmplY3Q6OnB1dElubGluZUZvckpTT2JqZWN0KToKKyAgICAgICAgKEpTQzo6
SlNPYmplY3Q6OnB1dElubGluZUZhc3QpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cHV0RGly
ZWN0SW50ZXJuYWwpOgorICAgICAgICAqIHJ1bnRpbWUvSlNQcm94eS5oOgorICAgICAgICAqIHJ1
bnRpbWUvSlNUeXBlSW5mby5oOgorICAgICAgICAoSlNDOjpUeXBlSW5mbzo6aGFzU3RhdGljUHJv
cGVydHlUYWJsZSBjb25zdCk6CisgICAgICAgIChKU0M6OlR5cGVJbmZvOjpvdmVycmlkZXNQdXQg
Y29uc3QpOgorICAgICAgICAoSlNDOjpUeXBlSW5mbzo6Z2V0T3duUHJvcGVydHlTbG90TWF5QmVX
cm9uZ0Fib3V0RG9udEVudW0gY29uc3QpOgorICAgICAgICAoSlNDOjpUeXBlSW5mbzo6aGFzUHV0
UHJvcGVydHlTZWN1cml0eUNoZWNrIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBydW50aW1l
L0xvb2t1cC5oOgorICAgICAgICAoSlNDOjpwdXRFbnRyeSk6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6Omxvb2t1cFB1dCk6IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9Qcm9wZXJ0eVNsb3Qu
aDoKKyAgICAgICAgKiBydW50aW1lL1Byb3h5T2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6UHJv
eHlPYmplY3Q6OnB1dCk6CisgICAgICAgICogcnVudGltZS9Qcm94eU9iamVjdC5oOgorICAgICAg
ICAqIHJ1bnRpbWUvUHV0UHJvcGVydHlTbG90Lmg6CisgICAgICAgIChKU0M6OlB1dFByb3BlcnR5
U2xvdDo6aXNUYWludGVkQnlPcGFxdWVPYmplY3QgY29uc3QpOgorICAgICAgICAoSlNDOjpQdXRQ
cm9wZXJ0eVNsb3Q6OnNldElzVGFpbnRlZEJ5T3BhcXVlT2JqZWN0KToKKyAgICAgICAgKiBydW50
aW1lL1JlZmxlY3RPYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpKU0NfREVGSU5FX0hPU1RfRlVO
Q1RJT04pOgorICAgICAgICAqIHJ1bnRpbWUvUmVnRXhwT2JqZWN0LmNwcDoKKyAgICAgICAgKEpT
Qzo6UmVnRXhwT2JqZWN0OjpwdXQpOgorICAgICAgICAqIHJ1bnRpbWUvUmVnRXhwT2JqZWN0Lmg6
CisgICAgICAgICogcnVudGltZS9TdHJpbmdPYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpTdHJp
bmdPYmplY3Q6OnB1dCk6CisgICAgICAgICogcnVudGltZS9TdHJpbmdPYmplY3QuaDoKKyAgICAg
ICAgKiBydW50aW1lL1N0cmluZ1Byb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6OlN0cmluZ1By
b3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpTdHJpbmdQcm90b3R5cGU6
OmNyZWF0ZSk6CisgICAgICAgICogcnVudGltZS9TdHJpbmdQcm90b3R5cGUuaDoKKyAgICAgICAg
KiBydW50aW1lL1N0cnVjdHVyZS5jcHA6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6dmFsaWRh
dGVGbGFncyk6CisgICAgICAgICogdG9vbHMvSlNEb2xsYXJWTS5jcHA6CisKIDIwMjEtMDQtMTMg
IE1hcmsgTGFtICA8bWFyay5sYW1AYXBwbGUuY29tPgogCiAgICAgICAgIFRoZSB3YXRjaGRvZyBz
aG91bGQgbm90IGZpcmUgd2hlbiBpdCdzIG5vdCBhY3RpdmUuCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3QuaAkocmV2aXNpb24gMjc1OTY1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEyOSw3ICsxMjksNyBAQCB0ZW1wbGF0ZSA8Y2xhc3MgUGFyZW50PgogY2xhc3MgSlND
YWxsYmFja09iamVjdCBmaW5hbCA6IHB1YmxpYyBQYXJlbnQgewogcHVibGljOgogICAgIHVzaW5n
IEJhc2UgPSBQYXJlbnQ7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVG
bGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90
IHwgT3ZlcnJpZGVzR2V0T3duU3BlY2lhbFByb3BlcnR5TmFtZXMgfCBPdmVycmlkZXNHZXRDYWxs
RGF0YSB8IEludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJ
c05vdFplcm8gfCBJbXBsZW1lbnRzSGFzSW5zdGFuY2UgfCBQcm9oaWJpdHNQcm9wZXJ0eUNhY2hp
bmcgfCBHZXRPd25Qcm9wZXJ0eVNsb3RNYXlCZVdyb25nQWJvdXREb250RW51bTsKKyAgICBzdGF0
aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxh
Z3MgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNHZXRPd25TcGVjaWFs
UHJvcGVydHlOYW1lcyB8IE92ZXJyaWRlc0dldENhbGxEYXRhIHwgT3ZlcnJpZGVzUHV0IHwgSW50
ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8
IEltcGxlbWVudHNIYXNJbnN0YW5jZSB8IFByb2hpYml0c1Byb3BlcnR5Q2FjaGluZyB8IEdldE93
blByb3BlcnR5U2xvdE1heUJlV3JvbmdBYm91dERvbnRFbnVtOwogICAgIHN0YXRpY19hc3NlcnQo
IShTdHJ1Y3R1cmVGbGFncyAmIEltcGxlbWVudHNEZWZhdWx0SGFzSW5zdGFuY2UpLCAidXNpbmcg
Y3VzdG9tSGFzSW5zdGFuY2UiKTsKIAogICAgIH5KU0NhbGxiYWNrT2JqZWN0KCk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3RGdW5jdGlvbnMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3RGdW5j
dGlvbnMuaAkocmV2aXNpb24gMjc1OTY1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9K
U0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1NCw2ICsyNTQs
OSBAQCBib29sIEpTQ2FsbGJhY2tPYmplY3Q8UGFyZW50Pjo6cHV0KEpTQ2VsCiAgICAgSlNPYmpl
Y3RSZWYgdGhpc1JlZiA9IHRvUmVmKGpzQ2FzdDxKU09iamVjdCo+KHRoaXNPYmplY3QpKTsKICAg
ICBSZWZQdHI8T3BhcXVlSlNTdHJpbmc+IHByb3BlcnR5TmFtZVJlZjsKICAgICBKU1ZhbHVlUmVm
IHZhbHVlUmVmID0gdG9SZWYoZ2xvYmFsT2JqZWN0LCB2YWx1ZSk7CisKKyAgICBpZiAoVU5MSUtF
TFkoaXNUaGlzVmFsdWVBbHRlcmVkKHNsb3QsIHRoaXNPYmplY3QpKSkKKyAgICAgICAgUkVMRUFT
RV9BTkRfUkVUVVJOKHNjb3BlLCBQYXJlbnQ6OnB1dCh0aGlzT2JqZWN0LCBnbG9iYWxPYmplY3Qs
IHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpKTsKICAgICAKICAgICBpZiAoU3RyaW5nSW1wbCog
bmFtZSA9IHByb3BlcnR5TmFtZS51aWQoKSkgewogICAgICAgICBmb3IgKEpTQ2xhc3NSZWYganND
bGFzcyA9IHRoaXNPYmplY3QtPmNsYXNzUmVmKCk7IGpzQ2xhc3M7IGpzQ2xhc3MgPSBqc0NsYXNz
LT5wYXJlbnRDbGFzcykgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy90
ZXN0YXBpU2NyaXB0cy90ZXN0YXBpLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9BUEkvdGVzdHMvdGVzdGFwaVNjcmlwdHMvdGVzdGFwaS5qcwkocmV2aXNpb24gMjc1OTY1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy90ZXN0YXBpU2NyaXB0cy90ZXN0
YXBpLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0yMDgsNiArMjA4LDI2IEBAIHNob3VsZEJlKCJzeW1i
b2xUb1N0cmluZ1RhZ0Rlc2NyaXB0b3IuY28KIE15T2JqZWN0W1N5bWJvbC50b1N0cmluZ1RhZ10g
PSAiRm9vIjsKIHNob3VsZEJlKCJPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoTXlPYmpl
Y3QpIiwgIltvYmplY3QgRm9vXSIpOwogCit2YXIgTXlPYmplY3RIZWlyID0gT2JqZWN0LmNyZWF0
ZShNeU9iamVjdCk7CitNeU9iamVjdEhlaXIudGhyb3dPblNldCA9IDIyOwordmFyIE15T2JqZWN0
SGVpclRocm93T25TZXREZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRv
cihNeU9iamVjdEhlaXIsICJ0aHJvd09uU2V0Iik7CitzaG91bGRCZSgidHlwZW9mIE15T2JqZWN0
SGVpclRocm93T25TZXREZXNjcmlwdG9yIiwgIm9iamVjdCIpOworc2hvdWxkQmUoIk15T2JqZWN0
SGVpclRocm93T25TZXREZXNjcmlwdG9yLnZhbHVlIiwgMjIpOworc2hvdWxkQmUoIk15T2JqZWN0
SGVpclRocm93T25TZXREZXNjcmlwdG9yLndyaXRhYmxlIiwgdHJ1ZSk7CitzaG91bGRCZSgiTXlP
YmplY3RIZWlyVGhyb3dPblNldERlc2NyaXB0b3IuZW51bWVyYWJsZSIsIHRydWUpOworc2hvdWxk
QmUoIk15T2JqZWN0SGVpclRocm93T25TZXREZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSIsIHRydWUp
Oworc2hvdWxkVGhyb3coIk15T2JqZWN0LnRocm93T25TZXQgPSAyMiIpOworCit2YXIgZ2xvYmFs
T2JqZWN0SGVpciA9IE9iamVjdC5jcmVhdGUodGhpcyk7CitnbG9iYWxPYmplY3RIZWlyLmdsb2Jh
bFN0YXRpY1ZhbHVlMiA9IDMzOwordmFyIGdsb2JhbE9iamVjdEhlaXJHbG9iYWxTdGF0aWNWYWx1
ZTJEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWxPYmpl
Y3RIZWlyLCAiZ2xvYmFsU3RhdGljVmFsdWUyIik7CitzaG91bGRCZSgidHlwZW9mIGdsb2JhbE9i
amVjdEhlaXJHbG9iYWxTdGF0aWNWYWx1ZTJEZXNjcmlwdG9yIiwgIm9iamVjdCIpOworc2hvdWxk
QmUoImdsb2JhbE9iamVjdEhlaXJHbG9iYWxTdGF0aWNWYWx1ZTJEZXNjcmlwdG9yLnZhbHVlIiwg
MzMpOworc2hvdWxkQmUoImdsb2JhbE9iamVjdEhlaXJHbG9iYWxTdGF0aWNWYWx1ZTJEZXNjcmlw
dG9yLndyaXRhYmxlIiwgdHJ1ZSk7CitzaG91bGRCZSgiZ2xvYmFsT2JqZWN0SGVpckdsb2JhbFN0
YXRpY1ZhbHVlMkRlc2NyaXB0b3IuZW51bWVyYWJsZSIsIHRydWUpOworc2hvdWxkQmUoImdsb2Jh
bE9iamVjdEhlaXJHbG9iYWxTdGF0aWNWYWx1ZTJEZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSIsIHRy
dWUpOworc2hvdWxkQmUoInRoaXMuZ2xvYmFsU3RhdGljVmFsdWUyIiwgMyk7CisKIGRlcml2ZWQg
PSBuZXcgRGVyaXZlZCgpOwogCiBzaG91bGRCZSgiZGVyaXZlZCBpbnN0YW5jZW9mIERlcml2ZWQi
LCB0cnVlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlclNj
b3BlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVn
Z2VyU2NvcGUuaAkocmV2aXNpb24gMjc1OTY1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rl
YnVnZ2VyL0RlYnVnZ2VyU2NvcGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNyBAQCBj
bGFzcyBKU1Njb3BlOwogY2xhc3MgRGVidWdnZXJTY29wZSBmaW5hbCA6IHB1YmxpYyBKU05vbkZp
bmFsT2JqZWN0IHsKIHB1YmxpYzoKICAgICB1c2luZyBCYXNlID0gSlNOb25GaW5hbE9iamVjdDsK
LSAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3Ry
dWN0dXJlRmxhZ3MgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNHZXRP
d25Qcm9wZXJ0eU5hbWVzOworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJl
RmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xv
dCB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5TmFtZXMgfCBPdmVycmlkZXNQdXQ7CiAKICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4KICAgICBzdGF0
aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0NsYXNzSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0NsYXNzSW5mby5oCShyZXZpc2lvbiAyNzU5NjUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9DbGFzc0luZm8uaAkod29ya2luZyBjb3B5KQpAQCAtNjgs
OSArNjgsNiBAQCBzdHJ1Y3QgTWV0aG9kVGFibGUgewogICAgIHVzaW5nIEdldE93blByb3BlcnR5
U2xvdEJ5SW5kZXhGdW5jdGlvblB0ciA9IGJvb2wgKCopKEpTT2JqZWN0KiwgSlNHbG9iYWxPYmpl
Y3QqLCB1bnNpZ25lZCwgUHJvcGVydHlTbG90Jik7CiAgICAgR2V0T3duUHJvcGVydHlTbG90QnlJ
bmRleEZ1bmN0aW9uUHRyIE1FVEhPRF9UQUJMRV9FTlRSWShnZXRPd25Qcm9wZXJ0eVNsb3RCeUlu
ZGV4KTsKIAotICAgIHVzaW5nIERvUHV0UHJvcGVydHlTZWN1cml0eUNoZWNrRnVuY3Rpb25QdHIg
PSB2b2lkICgqKShKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBQdXRQ
cm9wZXJ0eVNsb3QmKTsKLSAgICBEb1B1dFByb3BlcnR5U2VjdXJpdHlDaGVja0Z1bmN0aW9uUHRy
IE1FVEhPRF9UQUJMRV9FTlRSWShkb1B1dFByb3BlcnR5U2VjdXJpdHlDaGVjayk7Ci0KICAgICB1
c2luZyBUb1RoaXNGdW5jdGlvblB0ciA9IEpTVmFsdWUgKCopKEpTQ2VsbCosIEpTR2xvYmFsT2Jq
ZWN0KiwgRUNNQU1vZGUpOwogICAgIFRvVGhpc0Z1bmN0aW9uUHRyIE1FVEhPRF9UQUJMRV9FTlRS
WSh0b1RoaXMpOwogCkBAIC0xNTgsNyArMTU1LDYgQEAgc3RydWN0IE1ldGhvZFRhYmxlIHsKICAg
ICAgICAgJkNsYXNzTmFtZTo6ZGVsZXRlUHJvcGVydHlCeUluZGV4LCBcCiAgICAgICAgICZDbGFz
c05hbWU6OmdldE93blByb3BlcnR5U2xvdCwgXAogICAgICAgICAmQ2xhc3NOYW1lOjpnZXRPd25Q
cm9wZXJ0eVNsb3RCeUluZGV4LCBcCi0gICAgICAgICZDbGFzc05hbWU6OmRvUHV0UHJvcGVydHlT
ZWN1cml0eUNoZWNrLCBcCiAgICAgICAgICZDbGFzc05hbWU6OnRvVGhpcywgXAogICAgICAgICAm
Q2xhc3NOYW1lOjpkZWZhdWx0VmFsdWUsIFwKICAgICAgICAgJkNsYXNzTmFtZTo6Z2V0T3duUHJv
cGVydHlOYW1lcywgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xvbmVk
QXJndW1lbnRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Q2xvbmVkQXJndW1lbnRzLmgJKHJldmlzaW9uIDI3NTk2NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0Nsb25lZEFyZ3VtZW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0
MCw3IEBAIG5hbWVzcGFjZSBKU0MgewogY2xhc3MgQ2xvbmVkQXJndW1lbnRzIGZpbmFsIDogcHVi
bGljIEpTTm9uRmluYWxPYmplY3QgewogcHVibGljOgogICAgIHVzaW5nIEJhc2UgPSBKU05vbkZp
bmFsT2JqZWN0OwotICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3Mg
PSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92
ZXJyaWRlc0dldE93blNwZWNpYWxQcm9wZXJ0eU5hbWVzOworICAgIHN0YXRpYyBjb25zdGV4cHIg
dW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IE92ZXJyaWRl
c0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRlc0dldE93blNwZWNpYWxQcm9wZXJ0eU5hbWVz
IHwgT3ZlcnJpZGVzUHV0OwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNw
YWNlQWNjZXNzIG1vZGU+CiAgICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYg
dm0pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DdXN0b21HZXR0ZXJTZXR0
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0N1c3Rv
bUdldHRlclNldHRlci5jcHAJKHJldmlzaW9uIDI3NTk2NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0N1c3RvbUdldHRlclNldHRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2
LDI4ICsyNiwxMCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkN1c3RvbUdldHRl
clNldHRlci5oIgogCi0jaW5jbHVkZSAiSlNDSlNWYWx1ZUlubGluZXMuaCIKLSNpbmNsdWRlIDx3
dGYvQXNzZXJ0aW9ucy5oPgotCiBuYW1lc3BhY2UgSlNDIHsKIAogU1RBVElDX0FTU0VSVF9JU19U
UklWSUFMTFlfREVTVFJVQ1RJQkxFKEN1c3RvbUdldHRlclNldHRlcik7CiAKIGNvbnN0IENsYXNz
SW5mbyBDdXN0b21HZXR0ZXJTZXR0ZXI6OnNfaW5mbyA9IHsgIkN1c3RvbUdldHRlclNldHRlciIs
IG51bGxwdHIsIG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoQ3VzdG9tR2V0
dGVyU2V0dGVyKSB9OwogCi1UcmlTdGF0ZSBjYWxsQ3VzdG9tU2V0dGVyKEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEN1c3RvbUdldHRlclNldHRlcjo6Q3VzdG9tU2V0dGVyIHNldHRlciwg
Ym9vbCBpc0FjY2Vzc29yLCBKU09iamVjdCogc2xvdEJhc2UsIEpTVmFsdWUgdGhpc1ZhbHVlLCBK
U1ZhbHVlIHZhbHVlLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQotewotICAgIGlmIChpc0Fj
Y2Vzc29yKSB7Ci0gICAgICAgIGlmICghc2V0dGVyKQotICAgICAgICAgICAgcmV0dXJuIFRyaVN0
YXRlOjpGYWxzZTsKLSAgICAgICAgc2V0dGVyKGdsb2JhbE9iamVjdCwgSlNWYWx1ZTo6ZW5jb2Rl
KHRoaXNWYWx1ZSksIEpTVmFsdWU6OmVuY29kZSh2YWx1ZSksIHByb3BlcnR5TmFtZSk7Ci0gICAg
ICAgIC8vIEFsd2F5cyByZXR1cm4gdHJ1ZSBpZiB0aGVyZSBpcyBhIHNldHRlciBhbmQgaXQgaXMg
b2JzZXJ2ZWQgYXMgYW4gYWNjZXNzb3IgdG8gdXNlcnMuCi0gICAgICAgIHJldHVybiBUcmlTdGF0
ZTo6VHJ1ZTsKLSAgICB9Ci0KLSAgICBpZiAoIXNldHRlcikKLSAgICAgICAgcmV0dXJuIFRyaVN0
YXRlOjpJbmRldGVybWluYXRlOwotICAgIHJldHVybiB0cmlTdGF0ZShzZXR0ZXIoZ2xvYmFsT2Jq
ZWN0LCBKU1ZhbHVlOjplbmNvZGUoc2xvdEJhc2UpLCBKU1ZhbHVlOjplbmNvZGUodmFsdWUpLCBw
cm9wZXJ0eU5hbWUpKTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9DdXN0b21HZXR0ZXJTZXR0ZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DdXN0b21HZXR0ZXJTZXR0ZXIuaAkocmV2aXNp
b24gMjc1OTY1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ3VzdG9tR2V0dGVy
U2V0dGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTc2LDYgKzc2LDQgQEAgcHJpdmF0ZToKICAgICBD
dXN0b21TZXR0ZXIgbV9zZXR0ZXI7CiB9OwogCi1KU19FWFBPUlRfUFJJVkFURSBUcmlTdGF0ZSBj
YWxsQ3VzdG9tU2V0dGVyKEpTR2xvYmFsT2JqZWN0KiwgQ3VzdG9tR2V0dGVyU2V0dGVyOjpDdXN0
b21TZXR0ZXIsIGJvb2wgaXNBY2Nlc3NvciwgSlNPYmplY3QqIHNsb3RCYXNlLCBKU1ZhbHVlIHRo
aXNWYWx1ZSwgSlNWYWx1ZSwgUHJvcGVydHlOYW1lKTsKLQogfSAvLyBuYW1lc3BhY2UgSlNDCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvckNvbnN0cnVjdG9yLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JDb25zdHJ1Y3Rv
ci5oCShyZXZpc2lvbiAyNzU5NjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9F
cnJvckNvbnN0cnVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAgY2xhc3Mg
R2V0dGVyU2V0dGVyOwogY2xhc3MgRXJyb3JDb25zdHJ1Y3RvciBmaW5hbCA6IHB1YmxpYyBJbnRl
cm5hbEZ1bmN0aW9uIHsKIHB1YmxpYzoKICAgICB1c2luZyBCYXNlID0gSW50ZXJuYWxGdW5jdGlv
bjsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6
U3RydWN0dXJlRmxhZ3MgfCBPdmVycmlkZXNQdXQ7CiAKICAgICBzdGF0aWMgRXJyb3JDb25zdHJ1
Y3RvciogY3JlYXRlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEVycm9yUHJvdG90eXBl
KiBlcnJvclByb3RvdHlwZSwgR2V0dGVyU2V0dGVyKikKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9FcnJvckluc3RhbmNlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JJbnN0YW5jZS5oCShyZXZpc2lvbiAyNzU5NjUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvckluc3RhbmNlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTMwLDcgKzMwLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiBjbGFzcyBFcnJvcklu
c3RhbmNlIDogcHVibGljIEpTTm9uRmluYWxPYmplY3QgewogcHVibGljOgogICAgIHVzaW5nIEJh
c2UgPSBKU05vbkZpbmFsT2JqZWN0OwotICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3Ry
dWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IE92ZXJyaWRlc0dldE93blByb3Bl
cnR5U2xvdCB8IE92ZXJyaWRlc0dldE93blNwZWNpYWxQcm9wZXJ0eU5hbWVzOworICAgIHN0YXRp
YyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFn
cyB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRlc0dldE93blNwZWNpYWxQ
cm9wZXJ0eU5hbWVzIHwgT3ZlcnJpZGVzUHV0OwogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBu
ZWVkc0Rlc3RydWN0aW9uID0gdHJ1ZTsKIAogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxs
KiBjZWxsKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3Vt
ZW50cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVy
aWNBcmd1bWVudHMuaAkocmV2aXNpb24gMjc1OTY1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw3
IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFR5cGU+CiBjbGFzcyBHZW5lcmljQXJndW1lbnRzIDogcHVi
bGljIEpTTm9uRmluYWxPYmplY3QgewogcHVibGljOgogICAgIHR5cGVkZWYgSlNOb25GaW5hbE9i
amVjdCBCYXNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3Mg
PSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92
ZXJyaWRlc0dldE93blByb3BlcnR5TmFtZXMgfCBJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90
QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvOworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5z
aWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IE92ZXJyaWRlc0dl
dE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5TmFtZXMgfCBPdmVycmlk
ZXNQdXQgfCBJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3Ro
SXNOb3RaZXJvOwogCiBwcm90ZWN0ZWQ6CiAgICAgR2VuZXJpY0FyZ3VtZW50cyhWTSYgdm0sIFN0
cnVjdHVyZSogc3RydWN0dXJlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
R2VuZXJpY0FyZ3VtZW50c0lubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9HZW5lcmljQXJndW1lbnRzSW5saW5lcy5oCShyZXZpc2lvbiAyNzU5NjUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljQXJndW1lbnRzSW5saW5l
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzQsOCArMTM0LDggQEAgYm9vbCBHZW5lcmljQXJndW1l
bnRzPFR5cGU+OjpwdXQoSlNDZWxsKgogCiAgICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9l
Y21hMjYyLyNzZWMtYXJndW1lbnRzLWV4b3RpYy1vYmplY3RzLXNldC1wLXYtcmVjZWl2ZXIKICAg
ICAvLyBGYWxsIGJhY2sgdG8gdGhlIE9yZGluYXJ5U2V0IHdoZW4gdGhlIHJlY2VpdmVyIGlzIGFs
dGVyZWQgZnJvbSB0aGUgdGhpc09iamVjdC4KLSAgICBpZiAoVU5MSUtFTFkoaXNUaGlzVmFsdWVB
bHRlcmVkKHNsb3QsIHRoaXNPYmplY3QpKSkKLSAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNj
b3BlLCBvcmRpbmFyeVNldFNsb3coZ2xvYmFsT2JqZWN0LCB0aGlzT2JqZWN0LCBpZGVudCwgdmFs
dWUsIHNsb3QudGhpc1ZhbHVlKCksIHNsb3QuaXNTdHJpY3RNb2RlKCkpKTsKKyAgICBpZiAoVU5M
SUtFTFkoc2xvdC50aGlzVmFsdWUoKSAhPSB0aGlzT2JqZWN0KSkKKyAgICAgICAgUkVMRUFTRV9B
TkRfUkVUVVJOKHNjb3BlLCBCYXNlOjpwdXQodGhpc09iamVjdCwgZ2xvYmFsT2JqZWN0LCBpZGVu
dCwgdmFsdWUsIHNsb3QpKTsKICAgICAKICAgICBPcHRpb25hbDx1aW50MzJfdD4gaW5kZXggPSBw
YXJzZUluZGV4KGlkZW50KTsKICAgICBpZiAoaW5kZXggJiYgdGhpc09iamVjdC0+aXNNYXBwZWRB
cmd1bWVudChpbmRleC52YWx1ZSgpKSkgewpAQCAtMTQzLDkgKzE0Myw3IEBAIGJvb2wgR2VuZXJp
Y0FyZ3VtZW50czxUeXBlPjo6cHV0KEpTQ2VsbCoKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
fQogCi0gICAgYXV0byByZXN1bHQgPSBCYXNlOjpwdXQodGhpc09iamVjdCwgZ2xvYmFsT2JqZWN0
LCBpZGVudCwgdmFsdWUsIHNsb3QpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGZh
bHNlKTsKLSAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIHJlc3VsdCk7CisgICAgUkVMRUFT
RV9BTkRfUkVUVVJOKHNjb3BlLCBCYXNlOjpwdXQodGhpc09iamVjdCwgZ2xvYmFsT2JqZWN0LCBp
ZGVudCwgdmFsdWUsIHNsb3QpKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVHlwZT4KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dldHRlclNldHRlci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dldHRlclNldHRlci5oCShyZXZpc2lv
biAyNzU5NjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZXR0ZXJTZXR0ZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtNTQsNyArNTQsNyBAQCBwcml2YXRlOgogCiBwdWJsaWM6CiAK
LSAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3Ry
dWN0dXJlRmxhZ3MgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBTdHJ1Y3R1cmVJc0lt
bW9ydGFsOworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBC
YXNlOjpTdHJ1Y3R1cmVGbGFncyB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJy
aWRlc1B1dCB8IFN0cnVjdHVyZUlzSW1tb3J0YWw7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBD
ZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+CiAgICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFj
ZUZvcihWTSYgdm0pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5
LmNwcAkocmV2aXNpb24gMjc1OTY1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNBcnJheS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzOCwxMCArMjM4LDYgQEAgYm9vbCBKU0Fy
cmF5OjpwdXQoSlNDZWxsKiBjZWxsLCBKU0dsb2JhbAogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIEpTQXJyYXkqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNB
cnJheSo+KGNlbGwpOwotCi0gICAgaWYgKFVOTElLRUxZKGlzVGhpc1ZhbHVlQWx0ZXJlZChzbG90
LCB0aGlzT2JqZWN0KSkpCi0gICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgb3JkaW5h
cnlTZXRTbG93KGdsb2JhbE9iamVjdCwgdGhpc09iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwg
c2xvdC50aGlzVmFsdWUoKSwgc2xvdC5pc1N0cmljdE1vZGUoKSkpOwotCiAgICAgdGhpc09iamVj
dC0+ZW5zdXJlV3JpdGFibGUodm0pOwogCiAgICAgaWYgKHByb3BlcnR5TmFtZSA9PSB2bS5wcm9w
ZXJ0eU5hbWVzLT5sZW5ndGgpIHsKQEAgLTI1MSw2ICsyNDcsOSBAQCBib29sIEpTQXJyYXk6OnB1
dChKU0NlbGwqIGNlbGwsIEpTR2xvYmFsCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
ICAgIH0KIAorICAgICAgICBpZiAoVU5MSUtFTFkoc2xvdC50aGlzVmFsdWUoKSAhPSB0aGlzT2Jq
ZWN0KSkKKyAgICAgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgSlNPYmplY3Q6OmRl
ZmluZVByb3BlcnR5T25SZWNlaXZlcihnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgdmFsdWUs
IHNsb3QpKTsKKwogICAgICAgICB1bnNpZ25lZCBuZXdMZW5ndGggPSB2YWx1ZS50b1VJbnQzMihn
bG9iYWxPYmplY3QpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBmYWxzZSk7
CiAgICAgICAgIGRvdWJsZSB2YWx1ZUFzTnVtYmVyID0gdmFsdWUudG9OdW1iZXIoZ2xvYmFsT2Jq
ZWN0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmgJKHJldmlz
aW9uIDI3NTk2NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaAko
d29ya2luZyBjb3B5KQpAQCAtNDAsNyArNDAsNyBAQCBjbGFzcyBKU0FycmF5IDogcHVibGljIEpT
Tm9uRmluYWxPYmplY3QgCiAKIHB1YmxpYzoKICAgICB0eXBlZGVmIEpTTm9uRmluYWxPYmplY3Qg
QmFzZTsKLSAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFz
ZTo6U3RydWN0dXJlRmxhZ3MgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlk
ZXNHZXRPd25TcGVjaWFsUHJvcGVydHlOYW1lczsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2ln
bmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBPdmVycmlkZXNHZXRP
d25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNHZXRPd25TcGVjaWFsUHJvcGVydHlOYW1lcyB8IE92
ZXJyaWRlc1B1dDsKIAogICAgIHN0YXRpYyBzaXplX3QgYWxsb2NhdGlvblNpemUoQ2hlY2tlZDxz
aXplX3Q+IGlubGluZUNhcGFjaXR5KQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5jcHAJKHJldmlzaW9uIDI3NTk2
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTcyLDE4ICsxNzIsNiBAQCB2b2lkIEpTQXJyYXlCdWZmZXJW
aWV3Ojp2aXNpdENoaWxkcmVuSW1wCiAKIERFRklORV9WSVNJVF9DSElMRFJFTihKU0FycmF5QnVm
ZmVyVmlldyk7CiAKLWJvb2wgSlNBcnJheUJ1ZmZlclZpZXc6OnB1dCgKLSAgICBKU0NlbGwqIGNl
bGwsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5h
bWUsIEpTVmFsdWUgdmFsdWUsCi0gICAgUHV0UHJvcGVydHlTbG90JiBzbG90KQotewotICAgIEpT
QXJyYXlCdWZmZXJWaWV3KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQXJyYXlCdWZmZXJWaWV3Kj4o
Y2VsbCk7Ci0KLSAgICBpZiAoVU5MSUtFTFkoaXNUaGlzVmFsdWVBbHRlcmVkKHNsb3QsIHRoaXNP
YmplY3QpKSkKLSAgICAgICAgcmV0dXJuIG9yZGluYXJ5U2V0U2xvdyhnbG9iYWxPYmplY3QsIHRo
aXNPYmplY3QsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QudGhpc1ZhbHVlKCksIHNsb3QuaXNT
dHJpY3RNb2RlKCkpOwotICAgIAotICAgIHJldHVybiBCYXNlOjpwdXQodGhpc09iamVjdCwgZ2xv
YmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KTsKLX0KLQogQXJyYXlCdWZmZXIq
IEpTQXJyYXlCdWZmZXJWaWV3Ojp1bnNoYXJlZEJ1ZmZlcigpCiB7CiAgICAgQXJyYXlCdWZmZXIq
IHJlc3VsdCA9IHBvc3NpYmx5U2hhcmVkQnVmZmVyKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmgJKHJldmlzaW9uIDI3NTk2
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTE2OSw4ICsxNjksNiBAQCBwcm90ZWN0ZWQ6CiAgICAgCiAgICAg
SlNfRVhQT1JUX1BSSVZBVEUgSlNBcnJheUJ1ZmZlclZpZXcoVk0mLCBDb25zdHJ1Y3Rpb25Db250
ZXh0Jik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOwot
ICAgIAotICAgIHN0YXRpYyBib29sIHB1dChKU0NlbGwqLCBKU0dsb2JhbE9iamVjdCosIFByb3Bl
cnR5TmFtZSwgSlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7CiAKICAgICBERUNMQVJFX1ZJU0lU
X0NISUxEUkVOOwogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlND
SlNWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNDSlNWYWx1ZS5jcHAJKHJldmlzaW9uIDI3NTk2NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQ0pTVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTIsNyArMjEyLDcg
QEAgSlNPYmplY3QqIEpTVmFsdWU6OnN5bnRoZXNpemVQcm90b3R5cGUoSgogICAgIHJldHVybiBu
dWxscHRyOwogfQogCi0vLyBFQ01BIDguNy4yCisvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8j
c2VjLW9yZGluYXJ5c2V0CiBib29sIEpTVmFsdWU6OnB1dFRvUHJpbWl0aXZlKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFs
dWUsIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3Qt
PnZtKCk7CkBAIC0yMjYsNjQgKzIyNiw3IEBAIGJvb2wgSlNWYWx1ZTo6cHV0VG9QcmltaXRpdmUo
SlNHbG9iYWxPYmoKICAgICBFWENFUFRJT05fQVNTRVJUKCEhc2NvcGUuZXhjZXB0aW9uKCkgPT0g
IW9iaik7CiAgICAgaWYgKFVOTElLRUxZKCFvYmopKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgSlNWYWx1ZSBwcm90b3R5cGU7Ci0gICAgaWYgKHByb3BlcnR5TmFtZSAhPSB2bS5wcm9wZXJ0
eU5hbWVzLT51bmRlcnNjb3JlUHJvdG8pIHsKLSAgICAgICAgd2hpbGUgKHRydWUpIHsKLSAgICAg
ICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gb2JqLT5zdHJ1Y3R1cmUodm0pOwotICAgICAg
ICAgICAgaWYgKHN0cnVjdHVyZS0+aGFzUmVhZE9ubHlPckdldHRlclNldHRlclByb3BlcnRpZXNF
eGNsdWRpbmdQcm90bygpIHx8IHN0cnVjdHVyZS0+dHlwZUluZm8oKS5oYXNQdXRQcm9wZXJ0eVNl
Y3VyaXR5Q2hlY2soKSkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGlmIChv
YmotPnR5cGUoKSA9PSBQcm94eU9iamVjdFR5cGUpIHsKLSAgICAgICAgICAgICAgICBhdXRvKiBw
cm94eSA9IGpzQ2FzdDxQcm94eU9iamVjdCo+KG9iaik7Ci0gICAgICAgICAgICAgICAgUkVMRUFT
RV9BTkRfUkVUVVJOKHNjb3BlLCBwcm94eS0+UHJveHlPYmplY3Q6OnB1dChwcm94eSwgZ2xvYmFs
T2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KSk7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBwcm90b3R5cGUgPSBvYmotPmdldFByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0KTsK
LSAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGZhbHNlKTsKLQotICAgICAg
ICAgICAgaWYgKHByb3RvdHlwZS5pc051bGwoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gdHlw
ZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsIHNsb3QuaXNTdHJpY3RNb2RlKCksIFJlYWRvbmx5
UHJvcGVydHlXcml0ZUVycm9yKTsKLSAgICAgICAgICAgIG9iaiA9IGFzT2JqZWN0KHByb3RvdHlw
ZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBmb3IgKDsgOyBvYmogPSBhc09iamVjdChwcm90
b3R5cGUpKSB7Ci0gICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gb2JqLT5zdHJ1Y3R1cmUo
dm0pOwotICAgICAgICBpZiAoVU5MSUtFTFkoc3RydWN0dXJlLT50eXBlSW5mbygpLmhhc1B1dFBy
b3BlcnR5U2VjdXJpdHlDaGVjaygpKSkgewotICAgICAgICAgICAgb2JqLT5tZXRob2RUYWJsZSh2
bSktPmRvUHV0UHJvcGVydHlTZWN1cml0eUNoZWNrKG9iaiwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0
eU5hbWUsIHNsb3QpOwotICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZmFs
c2UpOwotICAgICAgICB9Ci0gICAgICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXM7Ci0gICAgICAgIFBy
b3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0KHZtLCBwcm9wZXJ0eU5hbWUsIGF0
dHJpYnV0ZXMpOwotICAgICAgICBpZiAob2Zmc2V0ICE9IGludmFsaWRPZmZzZXQpIHsKLSAgICAg
ICAgICAgIGlmIChhdHRyaWJ1dGVzICYgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5KQotICAg
ICAgICAgICAgICAgIHJldHVybiB0eXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgc2xvdC5p
c1N0cmljdE1vZGUoKSwgUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpOwotCi0gICAgICAgICAg
ICBKU1ZhbHVlIGdzID0gb2JqLT5nZXREaXJlY3Qob2Zmc2V0KTsKLSAgICAgICAgICAgIGlmIChn
cy5pc0dldHRlclNldHRlcigpKQotICAgICAgICAgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihz
Y29wZSwgY2FsbFNldHRlcihnbG9iYWxPYmplY3QsICp0aGlzLCBncywgdmFsdWUsIHNsb3QuaXNT
dHJpY3RNb2RlKCkgPyBFQ01BTW9kZTo6c3RyaWN0KCkgOiBFQ01BTW9kZTo6c2xvcHB5KCkpKTsK
LQotICAgICAgICAgICAgaWYgKGdzLmlzQ3VzdG9tR2V0dGVyU2V0dGVyKCkpIHsKLSAgICAgICAg
ICAgICAgICBhdXRvIHNldHRlciA9IGpzQ2FzdDxDdXN0b21HZXR0ZXJTZXR0ZXIqPihncy5hc0Nl
bGwoKSktPnNldHRlcigpOwotICAgICAgICAgICAgICAgIGJvb2wgaXNBY2Nlc3NvciA9IGF0dHJp
YnV0ZXMgJiBQcm9wZXJ0eUF0dHJpYnV0ZTo6Q3VzdG9tQWNjZXNzb3I7Ci0gICAgICAgICAgICAg
ICAgYXV0byByZXN1bHQgPSBjYWxsQ3VzdG9tU2V0dGVyKGdsb2JhbE9iamVjdCwgc2V0dGVyLCBp
c0FjY2Vzc29yLCBvYmosIHNsb3QudGhpc1ZhbHVlKCksIHZhbHVlLCBwcm9wZXJ0eU5hbWUpOwot
ICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgIT0gVHJpU3RhdGU6OkluZGV0ZXJtaW5hdGUpCi0g
ICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgcmVzdWx0ID09IFRy
aVN0YXRlOjpUcnVlKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gSWYgdGhlcmUn
cyBhbiBleGlzdGluZyBwcm9wZXJ0eSBvbiB0aGUgb2JqZWN0IG9yIG9uZSBvZiBpdHMgCi0gICAg
ICAgICAgICAvLyBwcm90b3R5cGVzIGl0IHNob3VsZCBiZSByZXBsYWNlZCwgc28gYnJlYWsgaGVy
ZS4KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGlmIChvYmotPnR5cGUo
KSA9PSBQcm94eU9iamVjdFR5cGUpIHsKLSAgICAgICAgICAgIGF1dG8qIHByb3h5ID0ganNDYXN0
PFByb3h5T2JqZWN0Kj4ob2JqKTsKLSAgICAgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29w
ZSwgcHJveHktPlByb3h5T2JqZWN0OjpwdXQocHJveHksIGdsb2JhbE9iamVjdCwgcHJvcGVydHlO
YW1lLCB2YWx1ZSwgc2xvdCkpOwotICAgICAgICB9Ci0gICAgICAgIHByb3RvdHlwZSA9IG9iai0+
Z2V0UHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QpOwotICAgICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCBmYWxzZSk7Ci0gICAgICAgIGlmIChwcm90b3R5cGUuaXNOdWxsKCkpCi0gICAg
ICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHR5cGVFcnJvcihnbG9iYWxP
YmplY3QsIHNjb3BlLCBzbG90LmlzU3RyaWN0TW9kZSgpLCBSZWFkb25seVByb3BlcnR5V3JpdGVF
cnJvcik7CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBvYmotPm1ldGhvZFRhYmxlKHZt
KS0+cHV0KG9iaiwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KSk7CiB9
CiAKIGJvb2wgSlNWYWx1ZTo6cHV0VG9QcmltaXRpdmVCeUluZGV4KEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCBz
aG91bGRUaHJvdykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmNw
cAkocmV2aXNpb24gMjc1OTY1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlND
ZWxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjAxLDExICsyMDEsNiBAQCBib29sIEpTQ2VsbDo6
Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lk
IEpTQ2VsbDo6ZG9QdXRQcm9wZXJ0eVNlY3VyaXR5Q2hlY2soSlNPYmplY3QqLCBKU0dsb2JhbE9i
amVjdCosIFByb3BlcnR5TmFtZSwgUHV0UHJvcGVydHlTbG90JikKLXsKLSAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotfQotCiB2b2lkIEpTQ2VsbDo6Z2V0T3duUHJvcGVydHlOYW1l
cyhKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lQXJyYXkmLCBEb250RW51
bVByb3BlcnRpZXNNb2RlKQogewogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAkocmV2aXNpb24gMjc1OTY1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI1Nyw3ICsyNTcsNiBAQCBwcm90ZWN0ZWQ6CiAgICAgc3RhdGljIGJvb2wgZGVmaW5l
T3duUHJvcGVydHkoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwgY29u
c3QgUHJvcGVydHlEZXNjcmlwdG9yJiwgYm9vbCBzaG91bGRUaHJvdyk7CiAgICAgc3RhdGljIGJv
b2wgZ2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0
eU5hbWUsIFByb3BlcnR5U2xvdCYpOwogICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xv
dEJ5SW5kZXgoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIHVuc2lnbmVkIHByb3BlcnR5TmFt
ZSwgUHJvcGVydHlTbG90Jik7Ci0gICAgc3RhdGljIE5PX1JFVFVSTl9EVUVfVE9fQ1JBU0ggdm9p
ZCBkb1B1dFByb3BlcnR5U2VjdXJpdHlDaGVjayhKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0Kiwg
UHJvcGVydHlOYW1lLCBQdXRQcm9wZXJ0eVNsb3QmKTsKIAogcHJpdmF0ZToKICAgICBmcmllbmQg
Y2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNGdW5jdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5jcHAJKHJldmlzaW9uIDI3NTk2NSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01
MTksMTAgKzUxOSw2IEBAIGJvb2wgSlNGdW5jdGlvbjo6cHV0KEpTQ2VsbCogY2VsbCwgSlNHbG8K
ICAgICAgICAgICAgIHJhcmVEYXRhLT5zZXRIYXNNb2RpZmllZE5hbWVGb3JOb25Ib3N0RnVuY3Rp
b24oKTsKICAgICB9CiAKLSAgICBpZiAoVU5MSUtFTFkoaXNUaGlzVmFsdWVBbHRlcmVkKHNsb3Qs
IHRoaXNPYmplY3QpKSkKLSAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBvcmRpbmFy
eVNldFNsb3coZ2xvYmFsT2JqZWN0LCB0aGlzT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBz
bG90LnRoaXNWYWx1ZSgpLCBzbG90LmlzU3RyaWN0TW9kZSgpKSk7Ci0KLQogICAgIGlmICh0aGlz
T2JqZWN0LT5pc0hvc3RPckJ1aWx0aW5GdW5jdGlvbigpKSB7CiAgICAgICAgIFByb3BlcnR5U3Rh
dHVzIHByb3BlcnR5VHlwZSA9IHRoaXNPYmplY3QtPnJlaWZ5TGF6eVByb3BlcnR5Rm9ySG9zdE9y
QnVpbHRpbklmTmVlZGVkKHZtLCBnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSk7CiAgICAgICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGZhbHNlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmgJKHJldmlzaW9uIDI3NTk2NSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAt
NzAsNyArNzAsNyBAQCBwdWJsaWM6CiAgICAgfQogICAgIAogICAgIHR5cGVkZWYgSlNDYWxsZWUg
QmFzZTsKLSAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFz
ZTo6U3RydWN0dXJlRmxhZ3MgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlk
ZXNHZXRPd25TcGVjaWFsUHJvcGVydHlOYW1lcyB8IE92ZXJyaWRlc0dldENhbGxEYXRhOworICAg
IHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1
cmVGbGFncyB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRlc0dldE93blNw
ZWNpYWxQcm9wZXJ0eU5hbWVzIHwgT3ZlcnJpZGVzR2V0Q2FsbERhdGEgfCBPdmVycmlkZXNQdXQ7
CiAKICAgICBzdGF0aWMgc2l6ZV90IGFsbG9jYXRpb25TaXplKENoZWNrZWQ8c2l6ZV90PiBpbmxp
bmVDYXBhY2l0eSkKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0dlbmVyaWNUeXBlZEFycmF5Vmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmgJKHJldmlzaW9uIDI3NTk2NSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3
LmgJKHdvcmtpbmcgY29weSkKQEAgLTk5LDcgKzk5LDcgQEAgcHVibGljOgogICAgIHVzaW5nIEVs
ZW1lbnRUeXBlID0gdHlwZW5hbWUgQWRhcHRvcjo6VHlwZTsKICAgICBzdGF0aWMgY29uc3RleHBy
IFR5cGVkQXJyYXlDb250ZW50VHlwZSBjb250ZW50VHlwZSA9IEFkYXB0b3I6OmNvbnRlbnRUeXBl
OwogCi0gICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6
OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVz
R2V0T3duUHJvcGVydHlOYW1lcyB8IEludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4
RXZlbldoZW5MZW5ndGhJc05vdFplcm87CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBT
dHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJv
cGVydHlTbG90IHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlOYW1lcyB8IE92ZXJyaWRlc1B1dCB8
IEludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFpl
cm87CiAKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIGVsZW1lbnRTaXplID0gc2l6ZW9m
KHR5cGVuYW1lIEFkYXB0b3I6OlR5cGUpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0dsb2JhbExleGljYWxFbnZpcm9ubWVudC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsTGV4aWNhbEVudmlyb25tZW50LmgJKHJl
dmlzaW9uIDI3NTk2NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFs
TGV4aWNhbEVudmlyb25tZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDcgKzMzLDcgQEAgY2xh
c3MgSlNHbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQgZmluYWwgOgogcHVibGljOgogICAgIHVzaW5n
IEJhc2UgPSBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0OwogCi0gICAgc3RhdGljIGNvbnN0ZXhw
ciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJp
ZGVzR2V0T3duUHJvcGVydHlTbG90OworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3Ry
dWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IE92ZXJyaWRlc0dldE93blByb3Bl
cnR5U2xvdCB8IE92ZXJyaWRlc1B1dDsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBl
LCBTdWJzcGFjZUFjY2VzcyBtb2RlPgogICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VG
b3IoVk0mIHZtKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxP
YmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
R2xvYmFsT2JqZWN0LmNwcAkocmV2aXNpb24gMjc1OTY1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDc1LDgg
KzE0NzUsMTIgQEAgYm9vbCBKU0dsb2JhbE9iamVjdDo6cHV0KEpTQ2VsbCogY2VsbCwgSgogICAg
IEpTR2xvYmFsT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTR2xvYmFsT2JqZWN0Kj4oY2Vs
bCk7CiAgICAgQVNTRVJUKCFIZWFwOjpoZWFwKHZhbHVlKSB8fCBIZWFwOjpoZWFwKHZhbHVlKSA9
PSBIZWFwOjpoZWFwKHRoaXNPYmplY3QpKTsKIAotICAgIGlmIChVTkxJS0VMWShpc1RoaXNWYWx1
ZUFsdGVyZWQoc2xvdCwgdGhpc09iamVjdCkpKQotICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4o
c2NvcGUsIG9yZGluYXJ5U2V0U2xvdyhnbG9iYWxPYmplY3QsIHRoaXNPYmplY3QsIHByb3BlcnR5
TmFtZSwgdmFsdWUsIHNsb3QudGhpc1ZhbHVlKCksIHNsb3QuaXNTdHJpY3RNb2RlKCkpKTsKKyAg
ICBpZiAoVU5MSUtFTFkoaXNUaGlzVmFsdWVBbHRlcmVkKHNsb3QsIHRoaXNPYmplY3QpKSkgewor
ICAgICAgICBTeW1ib2xUYWJsZUVudHJ5OjpGYXN0IGVudHJ5ID0gdGhpc09iamVjdC0+c3ltYm9s
VGFibGUoKS0+Z2V0KHByb3BlcnR5TmFtZS51aWQoKSk7CisgICAgICAgIGlmICghZW50cnkuaXNO
dWxsKCkgJiYgZW50cnkuaXNSZWFkT25seSgpKQorICAgICAgICAgICAgcmV0dXJuIHR5cGVFcnJv
cihnbG9iYWxPYmplY3QsIHNjb3BlLCBzbG90LmlzU3RyaWN0TW9kZSgpLCBSZWFkb25seVByb3Bl
cnR5V3JpdGVFcnJvcik7CisgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgQmFzZTo6
cHV0KHRoaXNPYmplY3QsIGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCkp
OworICAgIH0KIAogICAgIGJvb2wgc2hvdWxkVGhyb3dSZWFkT25seUVycm9yID0gc2xvdC5pc1N0
cmljdE1vZGUoKTsKICAgICBib29sIGlnbm9yZVJlYWRPbmx5RXJyb3JzID0gZmFsc2U7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgJKHJl
dmlzaW9uIDI3NTk2NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFs
T2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTU5Niw3ICs1OTYsNyBAQCBwdWJsaWM6CiAgICAg
ICAgIAogcHVibGljOgogICAgIHVzaW5nIEJhc2UgPSBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0
OwotICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpT
dHJ1Y3R1cmVGbGFncyB8IEhhc1N0YXRpY1Byb3BlcnR5VGFibGUgfCBPdmVycmlkZXNHZXRPd25Q
cm9wZXJ0eVNsb3QgfCBJc0ltbXV0YWJsZVByb3RvdHlwZUV4b3RpY09iamVjdDsKKyAgICBzdGF0
aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxh
Z3MgfCBIYXNTdGF0aWNQcm9wZXJ0eVRhYmxlIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90
IHwgT3ZlcnJpZGVzUHV0IHwgSXNJbW11dGFibGVQcm90b3R5cGVFeG90aWNPYmplY3Q7CiAKICAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7CiAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xleGljYWxFbnZpcm9ubWVudC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTGV4aWNhbEVudmlyb25tZW50
LmgJKHJldmlzaW9uIDI3NTk2NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
TGV4aWNhbEVudmlyb25tZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDcgKzQ4LDcgQEAgcHVi
bGljOgogICAgIH0KIAogICAgIHVzaW5nIEJhc2UgPSBKU1N5bWJvbFRhYmxlT2JqZWN0OwotICAg
IHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1
cmVGbGFncyB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRlc0dldE93blNw
ZWNpYWxQcm9wZXJ0eU5hbWVzOworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0
dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5
U2xvdCB8IE92ZXJyaWRlc0dldE93blNwZWNpYWxQcm9wZXJ0eU5hbWVzIHwgT3ZlcnJpZGVzUHV0
OwogCiAgICAgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiogdmFyaWFibGVzKCkKICAgICB7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZUVudmlyb25tZW50LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVFbnZp
cm9ubWVudC5oCShyZXZpc2lvbiAyNzU5NjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU01vZHVsZUVudmlyb25tZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDcg
QEAgY2xhc3MgSlNNb2R1bGVFbnZpcm9ubWVudCBmaW5hbCA6IHB1YmxpYwogICAgIGZyaWVuZCBj
bGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CiBwdWJsaWM6CiAgICAgdXNpbmcgQmFzZSA9IEpT
TGV4aWNhbEVudmlyb25tZW50OwotICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0
dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5
U2xvdCB8IE92ZXJyaWRlc0dldE93blNwZWNpYWxQcm9wZXJ0eU5hbWVzOworICAgIHN0YXRpYyBj
b25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8
IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRlc0dldE93blNwZWNpYWxQcm9w
ZXJ0eU5hbWVzIHwgT3ZlcnJpZGVzUHV0OwogCiAgICAgc3RhdGljIEpTTW9kdWxlRW52aXJvbm1l
bnQqIGNyZWF0ZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTU2NvcGUq
IGN1cnJlbnRTY29wZSwgU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlLCBKU1ZhbHVlIGluaXRpYWxW
YWx1ZSwgQWJzdHJhY3RNb2R1bGVSZWNvcmQqIG1vZHVsZVJlY29yZCkKICAgICB7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZU5hbWVzcGFjZU9iamVjdC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlTmFtZXNw
YWNlT2JqZWN0LmgJKHJldmlzaW9uIDI3NTk2NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTTW9kdWxlTmFtZXNwYWNlT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcg
KzM0LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiBjbGFzcyBKU01vZHVsZU5hbWVzcGFjZU9iamVjdCBm
aW5hbCA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKIHB1YmxpYzoKICAgICB1c2luZyBCYXNl
ID0gSlNOb25GaW5hbE9iamVjdDsKLSAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVj
dHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0
eVNsb3QgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eU5hbWVzIHwgSW50ZXJjZXB0c0dldE93blBy
b3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8IEdldE93blByb3BlcnR5
U2xvdElzSW1wdXJlRm9yUHJvcGVydHlBYnNlbmNlIHwgSXNJbW11dGFibGVQcm90b3R5cGVFeG90
aWNPYmplY3Q7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9
IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3Zl
cnJpZGVzR2V0T3duUHJvcGVydHlOYW1lcyB8IE92ZXJyaWRlc1B1dCB8IEludGVyY2VwdHNHZXRP
d25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8gfCBHZXRPd25Qcm9w
ZXJ0eVNsb3RJc0ltcHVyZUZvclByb3BlcnR5QWJzZW5jZSB8IElzSW1tdXRhYmxlUHJvdG90eXBl
RXhvdGljT2JqZWN0OwogCiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzRGVzdHJ1Y3Rp
b24gPSB0cnVlOwogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCShyZXZpc2lvbiAyNzU5NjUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTY0NSwxMCArNjQ1LDYgQEAgYm9vbCBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlT
bG90KEpTT2JqZQogewogICAgIHJldHVybiBnZXRPd25Qcm9wZXJ0eVNsb3RJbXBsKG9iamVjdCwg
Z2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwogfQotCi12b2lkIEpTT2JqZWN0Ojpk
b1B1dFByb3BlcnR5U2VjdXJpdHlDaGVjayhKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJv
cGVydHlOYW1lLCBQdXRQcm9wZXJ0eVNsb3QmKQotewotfQogI2VuZGlmIC8vIEFTU0VSVF9FTkFC
TEVECiAKIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLW9yZGluYXJ5c2V0
CkBAIC03NTcsNyArNzUzLDcgQEAgYm9vbCBvcmRpbmFyeVNldFNsb3coSlNHbG9iYWxPYmplY3Qq
IGdsbwogICAgIHJldHVybiB0cnVlOwogfQogCi0vLyBFQ01BIDguNi4yLjIKKy8vIGh0dHBzOi8v
dGMzOS5lcy9lY21hMjYyLyNzZWMtb3JkaW5hcnlzZXQKIGJvb2wgSlNPYmplY3Q6OnB1dChKU0Nl
bGwqIGNlbGwsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZSBwcm9w
ZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBy
ZXR1cm4gcHV0SW5saW5lRm9ySlNPYmplY3QoY2VsbCwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5h
bWUsIHZhbHVlLCBzbG90KTsKQEAgLTc2NSw2OSArNzYxLDkzIEBAIGJvb2wgSlNPYmplY3Q6OnB1
dChKU0NlbGwqIGNlbGwsIEpTR2xvYmEKIAogYm9vbCBKU09iamVjdDo6cHV0SW5saW5lU2xvdyhK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBK
U1ZhbHVlIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7Ci0gICAgQVNTRVJUKCFpc1Ro
aXNWYWx1ZUFsdGVyZWQoc2xvdCwgdGhpcykpOworICAgIEFTU0VSVCghcGFyc2VJbmRleChwcm9w
ZXJ0eU5hbWUpKTsKIAogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKKyAgICBpZiAoVU5MSUtFTFkoIXZt
LmlzU2FmZVRvUmVjdXJzZVNvZnQoKSkpIHsKKyAgICAgICAgdGhyb3dTdGFja092ZXJmbG93RXJy
b3IoZ2xvYmFsT2JqZWN0LCBzY29wZSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisK
ICAgICBKU09iamVjdCogb2JqID0gdGhpczsKICAgICBmb3IgKDs7KSB7CiAgICAgICAgIFN0cnVj
dHVyZSogc3RydWN0dXJlID0gb2JqLT5zdHJ1Y3R1cmUodm0pOwotICAgICAgICBpZiAoVU5MSUtF
TFkoc3RydWN0dXJlLT50eXBlSW5mbygpLmhhc1B1dFByb3BlcnR5U2VjdXJpdHlDaGVjaygpKSkg
ewotICAgICAgICAgICAgb2JqLT5tZXRob2RUYWJsZSh2bSktPmRvUHV0UHJvcGVydHlTZWN1cml0
eUNoZWNrKG9iaiwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwotICAgICAgICAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZmFsc2UpOwotICAgICAgICB9CisgICAgICAg
IGlmIChvYmogIT0gdGhpcyAmJiBzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkub3ZlcnJpZGVzUHV0KCkp
CisgICAgICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIG9iai0+bWV0aG9kVGFibGUo
dm0pLT5wdXQob2JqLCBnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpKTsK
KworICAgICAgICBib29sIGhhc1Byb3BlcnR5ID0gZmFsc2U7CiAgICAgICAgIHVuc2lnbmVkIGF0
dHJpYnV0ZXM7CisgICAgICAgIFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jIGN1c3RvbVNl
dHRlciA9IG51bGxwdHI7CiAgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVy
ZS0+Z2V0KHZtLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMpOwogICAgICAgICBpZiAoaXNWYWxp
ZE9mZnNldChvZmZzZXQpKSB7Ci0gICAgICAgICAgICBpZiAoYXR0cmlidXRlcyAmIFByb3BlcnR5
QXR0cmlidXRlOjpSZWFkT25seSkgewotICAgICAgICAgICAgICAgIEFTU0VSVCh0aGlzLT5wcm90
b3R5cGVDaGFpbk1heUludGVyY2VwdFN0b3JlVG8odm0sIHByb3BlcnR5TmFtZSkgfHwgb2JqID09
IHRoaXMpOwotICAgICAgICAgICAgICAgIHJldHVybiB0eXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBz
Y29wZSwgc2xvdC5pc1N0cmljdE1vZGUoKSwgUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpOwor
ICAgICAgICAgICAgaGFzUHJvcGVydHkgPSB0cnVlOworICAgICAgICAgICAgaWYgKGF0dHJpYnV0
ZXMgJiBQcm9wZXJ0eUF0dHJpYnV0ZTo6Q3VzdG9tQWNjZXNzb3JPclZhbHVlKQorICAgICAgICAg
ICAgICAgIGN1c3RvbVNldHRlciA9IGpzQ2FzdDxDdXN0b21HZXR0ZXJTZXR0ZXIqPihvYmotPmdl
dERpcmVjdChvZmZzZXQpKS0+c2V0dGVyKCk7CisgICAgICAgIH0gZWxzZSBpZiAoc3RydWN0dXJl
LT50eXBlSW5mbygpLmhhc1N0YXRpY1Byb3BlcnR5VGFibGUoKSAmJiAhc3RydWN0dXJlLT5zdGF0
aWNQcm9wZXJ0aWVzUmVpZmllZCgpKSB7CisgICAgICAgICAgICBpZiAoYXV0byBlbnRyeSA9IHN0
cnVjdHVyZS0+ZmluZFByb3BlcnR5SGFzaEVudHJ5KHByb3BlcnR5TmFtZSkpIHsKKyAgICAgICAg
ICAgICAgICBoYXNQcm9wZXJ0eSA9IHRydWU7CisgICAgICAgICAgICAgICAgYXR0cmlidXRlcyA9
IGVudHJ5LT52YWx1ZS0+YXR0cmlidXRlcygpOworCisgICAgICAgICAgICAgICAgLy8gRklYTUU6
IFJlbW92ZSB0aGlzIGFmdGVyIHdyaXRhYmxlIGFjY2Vzc29ycyBhcmUgaW50cm9kdWNlZCB0byBz
dGF0aWMgaGFzaCB0YWJsZXMuCisgICAgICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZXMgJiBQcm9w
ZXJ0eUF0dHJpYnV0ZTo6QWNjZXNzb3IpCisgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXMg
fD0gUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5OworICAgICAgICAgICAgICAgIC8vIEZJWE1F
OiBSZW1vdmUgdGhpcyBhZnRlciB3ZSBzdG9wIGRlZmF1bHRpbmcgdG8gQ3VzdG9tVmFsdWUgaW4g
c3RhdGljIGhhc2ggdGFibGVzLgorICAgICAgICAgICAgICAgIGlmICghKGF0dHJpYnV0ZXMgJiBQ
cm9wZXJ0eUF0dHJpYnV0ZTo6QnVpbHRpbk9yRnVuY3Rpb25PckFjY2Vzc29yT3JMYXp5UHJvcGVy
dHlPckNvbnN0YW50KSAmJiAhKGF0dHJpYnV0ZXMgJiBQcm9wZXJ0eUF0dHJpYnV0ZTo6Q3VzdG9t
QWNjZXNzb3IpKQorICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzIHw9IFByb3BlcnR5QXR0
cmlidXRlOjpDdXN0b21WYWx1ZTsKKworICAgICAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVzICYg
UHJvcGVydHlBdHRyaWJ1dGU6OkN1c3RvbUFjY2Vzc29yT3JWYWx1ZSkKKyAgICAgICAgICAgICAg
ICAgICAgY3VzdG9tU2V0dGVyID0gZW50cnktPnZhbHVlLT5wcm9wZXJ0eVB1dHRlcigpOwogICAg
ICAgICAgICAgfQorICAgICAgICB9CiAKLSAgICAgICAgICAgIEpTVmFsdWUgZ3MgPSBvYmotPmdl
dERpcmVjdChvZmZzZXQpOwotICAgICAgICAgICAgaWYgKGdzLmlzR2V0dGVyU2V0dGVyKCkpIHsK
KyAgICAgICAgaWYgKGhhc1Byb3BlcnR5KSB7CisgICAgICAgICAgICBpZiAoYXR0cmlidXRlcyAm
IFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHlw
ZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsIHNsb3QuaXNTdHJpY3RNb2RlKCksIFJlYWRvbmx5
UHJvcGVydHlXcml0ZUVycm9yKTsKKyAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVzICYgUHJvcGVy
dHlBdHRyaWJ1dGU6OkFjY2Vzc29yKSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKGlzVmFsaWRP
ZmZzZXQob2Zmc2V0KSk7CiAgICAgICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBtYWtlIHN1cmUg
dGhhdCB3ZSBkZWNpZGUgdG8gY2FjaGUgdGhpcyBwcm9wZXJ0eSBiZWZvcmUgd2UgcG90ZW50aWFs
bHkgZXhlY3V0ZSBhcmliaXRyYXJ5IEpTLgogICAgICAgICAgICAgICAgIGlmICghdGhpcy0+c3Ry
dWN0dXJlKHZtKS0+aXNVbmNhY2hlYWJsZURpY3Rpb25hcnkoKSkKICAgICAgICAgICAgICAgICAg
ICAgc2xvdC5zZXRDYWNoZWFibGVTZXR0ZXIob2JqLCBvZmZzZXQpOwotCi0gICAgICAgICAgICAg
ICAgYm9vbCByZXN1bHQgPSBjYWxsU2V0dGVyKGdsb2JhbE9iamVjdCwgc2xvdC50aGlzVmFsdWUo
KSwgZ3MsIHZhbHVlLCBzbG90LmlzU3RyaWN0TW9kZSgpID8gRUNNQU1vZGU6OnN0cmljdCgpIDog
RUNNQU1vZGU6OnNsb3BweSgpKTsKLSAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCBmYWxzZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAg
ICAgICAgICBKU1ZhbHVlIGdzID0gb2JqLT5nZXREaXJlY3Qob2Zmc2V0KTsKKyAgICAgICAgICAg
ICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIGNhbGxTZXR0ZXIoZ2xvYmFsT2JqZWN0LCBz
bG90LnRoaXNWYWx1ZSgpLCBncywgdmFsdWUsIHNsb3QuaXNTdHJpY3RNb2RlKCkgPyBFQ01BTW9k
ZTo6c3RyaWN0KCkgOiBFQ01BTW9kZTo6c2xvcHB5KCkpKTsKICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIGlmIChncy5pc0N1c3RvbUdldHRlclNldHRlcigpKSB7Ci0gICAgICAgICAgICAgICAg
Ym9vbCBpc0FjY2Vzc29yID0gYXR0cmlidXRlcyAmIFByb3BlcnR5QXR0cmlidXRlOjpDdXN0b21B
Y2Nlc3NvcjsKLSAgICAgICAgICAgICAgICBhdXRvIHNldHRlciA9IGpzQ2FzdDxDdXN0b21HZXR0
ZXJTZXR0ZXIqPihncy5hc0NlbGwoKSktPnNldHRlcigpOworICAgICAgICAgICAgaWYgKGF0dHJp
YnV0ZXMgJiBQcm9wZXJ0eUF0dHJpYnV0ZTo6Q3VzdG9tQWNjZXNzb3IpIHsKKyAgICAgICAgICAg
ICAgICBBU1NFUlQoY3VzdG9tU2V0dGVyKTsKICAgICAgICAgICAgICAgICAvLyBGSVhNRTogV2Ug
c2hvdWxkIG9ubHkgYmUgY2FjaGluZyB0aGVzZSBpZiB3ZSdyZSBub3QgYW4gdW5jYWNoZWFibGUg
ZGljdGlvbmFyeToKICAgICAgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjE1MzQ3Ci0KLSAgICAgICAgICAgICAgICAvLyBXZSBuZWVkIHRvIG1h
a2Ugc3VyZSB0aGF0IHdlIGRlY2lkZSB0byBjYWNoZSB0aGlzIHByb3BlcnR5IGJlZm9yZSB3ZSBw
b3RlbnRpYWxseSBleGVjdXRlIGFyaWJpdHJhcnkgSlMuCi0gICAgICAgICAgICAgICAgaWYgKGlz
QWNjZXNzb3IpCi0gICAgICAgICAgICAgICAgICAgIHNsb3Quc2V0Q3VzdG9tQWNjZXNzb3Iob2Jq
LCBzZXR0ZXIpOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgc2xv
dC5zZXRDdXN0b21WYWx1ZShvYmosIHNldHRlcik7Ci0KLSAgICAgICAgICAgICAgICBhdXRvIHJl
c3VsdCA9IGNhbGxDdXN0b21TZXR0ZXIoZ2xvYmFsT2JqZWN0LCBzZXR0ZXIsIGlzQWNjZXNzb3Is
IG9iaiwgc2xvdC50aGlzVmFsdWUoKSwgdmFsdWUsIHByb3BlcnR5TmFtZSk7CisgICAgICAgICAg
ICAgICAgc2xvdC5zZXRDdXN0b21BY2Nlc3NvcihvYmosIGN1c3RvbVNldHRlcik7ICAgICAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBjdXN0b21TZXR0ZXIoZ2xvYmFsT2JqZWN0LCBK
U1ZhbHVlOjplbmNvZGUoc2xvdC50aGlzVmFsdWUoKSksIEpTVmFsdWU6OmVuY29kZSh2YWx1ZSks
IHByb3BlcnR5TmFtZSk7CiAgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgZmFsc2UpOwotICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgIT0gVHJpU3RhdGU6OkluZGV0
ZXJtaW5hdGUpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgPT0gVHJpU3RhdGU6
OlRydWU7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBBU1NFUlQoIShhdHRyaWJ1dGVzICYgUHJvcGVydHlBdHRyaWJ1dGU6OkFjY2Vzc29y
KSk7Ci0KLSAgICAgICAgICAgIC8vIElmIHRoZXJlJ3MgYW4gZXhpc3RpbmcgcHJvcGVydHkgb24g
dGhlIGJhc2Ugb2JqZWN0LCBvciBvbiBvbmUgb2YgaXRzIAotICAgICAgICAgICAgLy8gcHJvdG90
eXBlcywgd2Ugc2hvdWxkIHN0b3JlIHRoZSBwcm9wZXJ0eSBvbiB0aGUgKmJhc2UqIG9iamVjdC4K
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGlmICghb2JqLT5zdGF0aWNQ
cm9wZXJ0aWVzUmVpZmllZCh2bSkpIHsKLSAgICAgICAgICAgIGlmIChvYmotPmNsYXNzSW5mbyh2
bSktPmhhc1N0YXRpY1NldHRlck9yUmVhZG9ubHlQcm9wZXJ0aWVzKCkpIHsKLSAgICAgICAgICAg
ICAgICBpZiAoYXV0byBlbnRyeSA9IG9iai0+ZmluZFByb3BlcnR5SGFzaEVudHJ5KHZtLCBwcm9w
ZXJ0eU5hbWUpKQotICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUs
IHB1dEVudHJ5KGdsb2JhbE9iamVjdCwgZW50cnktPnRhYmxlLT5jbGFzc0ZvclRoaXMsIGVudHJ5
LT52YWx1ZSwgb2JqLCB0aGlzLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KSk7CisgICAgICAg
ICAgICBpZiAoYXR0cmlidXRlcyAmIFByb3BlcnR5QXR0cmlidXRlOjpDdXN0b21WYWx1ZSkgewor
ICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBPbmNlIGxlZ2FjeSBSZWdFeHAgZmVhdHVyZXMgYXJl
IGltcGxlbWVudGVkLCB0aGVyZSB3b3VsZCBiZSBubyB1c2UgY2FzZSBmb3IgY2FsbGluZyBDdXN0
b21WYWx1ZSBzZXR0ZXIgaWYgcmVjZWl2ZXIgaXMgYWx0ZXJlZC4KKyAgICAgICAgICAgICAgICBp
ZiAoY3VzdG9tU2V0dGVyICYmICEoaXNUaGlzVmFsdWVBbHRlcmVkKHNsb3QsIG9iaikgJiYgc2xv
dC5jb250ZXh0KCkgPT0gUHV0UHJvcGVydHlTbG90OjpSZWZsZWN0U2V0KSkgeworICAgICAgICAg
ICAgICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIG9ubHkgYmUgY2FjaGluZyB0aGVzZSBpZiB3
ZSdyZSBub3QgYW4gdW5jYWNoZWFibGUgZGljdGlvbmFyeToKKyAgICAgICAgICAgICAgICAgICAg
Ly8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNTM0NworICAgICAg
ICAgICAgICAgICAgICBzbG90LnNldEN1c3RvbVZhbHVlKG9iaiwgY3VzdG9tU2V0dGVyKTsKKyAg
ICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBjdXN0b21TZXR0ZXIo
Z2xvYmFsT2JqZWN0LCBKU1ZhbHVlOjplbmNvZGUob2JqKSwgSlNWYWx1ZTo6ZW5jb2RlKHZhbHVl
KSwgcHJvcGVydHlOYW1lKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlm
ICghaXNUaGlzVmFsdWVBbHRlcmVkKHNsb3QsIG9iaikpIHsKKyAgICAgICAgICAgICAgICAgICAg
Ly8gQXZvaWQgUHV0TW9kZVB1dCBiZWNhdXNlIGl0IGZhaWxzIGZvciBub24tZXh0ZW5zaWJsZSBz
dHJ1Y3R1cmVzLgorICAgICAgICAgICAgICAgICAgICBvYmotPnB1dERpcmVjdCh2bSwgcHJvcGVy
dHlOYW1lLCB2YWx1ZSwgYXR0cmlidXRlc0ZvclN0cnVjdHVyZShhdHRyaWJ1dGVzKSAmIH5Qcm9w
ZXJ0eUF0dHJpYnV0ZTo6Q3VzdG9tVmFsdWUsIHNsb3QpOworICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CisgICAgICAgICAg
ICBpZiAoYXR0cmlidXRlcyAmIFByb3BlcnR5QXR0cmlidXRlOjpCdWlsdGluT3JGdW5jdGlvbk9y
TGF6eVByb3BlcnR5KSB7CisgICAgICAgICAgICAgICAgaWYgKCFpc1RoaXNWYWx1ZUFsdGVyZWQo
c2xvdCwgb2JqKSkgeworICAgICAgICAgICAgICAgICAgICAvLyBBdm9pZCBQdXRNb2RlUHV0IGJl
Y2F1c2UgaXQgZmFpbHMgZm9yIG5vbi1leHRlbnNpYmxlIHN0cnVjdHVyZXMuCisgICAgICAgICAg
ICAgICAgICAgIG9iai0+cHV0RGlyZWN0KHZtLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBhdHRyaWJ1
dGVzRm9yU3RydWN0dXJlKGF0dHJpYnV0ZXMpLCBzbG90KTsKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAg
ICAgLy8gSWYgdGhlcmUncyBhbiBleGlzdGluZyB3cml0YWJsZSBwcm9wZXJ0eSBvbiB0aGUgYmFz
ZSBvYmplY3QsIG9yIG9uIG9uZSBvZiBpdHMgCisgICAgICAgICAgICAvLyBwcm90b3R5cGVzLCB3
ZSBzaG91bGQgYXR0ZW1wdCB0byBzdG9yZSB0aGUgcHJvcGVydHkgb24gdGhlIHJlY2VpdmVyLgor
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKG9iai0+dHlwZSgpID09
IFByb3h5T2JqZWN0VHlwZSkgewotICAgICAgICAgICAgYXV0byogcHJveHkgPSBqc0Nhc3Q8UHJv
eHlPYmplY3QqPihvYmopOwotICAgICAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBw
cm94eS0+UHJveHlPYmplY3Q6OnB1dChwcm94eSwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUs
IHZhbHVlLCBzbG90KSk7Ci0gICAgICAgIH0KKwogICAgICAgICBKU1ZhbHVlIHByb3RvdHlwZSA9
IG9iai0+Z2V0UHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QpOwogICAgICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCBmYWxzZSk7CiAgICAgICAgIGlmIChwcm90b3R5cGUuaXNOdWxsKCkp
CkBAIC04MzUsMTEgKzg1NSw1MiBAQCBib29sIEpTT2JqZWN0OjpwdXRJbmxpbmVTbG93KEpTR2xv
YmFsT2JqCiAgICAgICAgIG9iaiA9IGFzT2JqZWN0KHByb3RvdHlwZSk7CiAgICAgfQogCi0gICAg
aWYgKCFwdXREaXJlY3RJbnRlcm5hbDxQdXRNb2RlUHV0Pih2bSwgcHJvcGVydHlOYW1lLCB2YWx1
ZSwgMCwgc2xvdCkpCisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBwdXRJbmxpbmVGYXN0
KGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCkpOworfQorCisvLyBodHRw
czovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9yZGluYXJ5c2V0IChzdGVwIDMpCitib29sIEpTT2Jq
ZWN0OjpkZWZpbmVQcm9wZXJ0eU9uUmVjZWl2ZXIoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgUHV0UHJvcGVydHlT
bG90JiBzbG90KQoreworICAgIEFTU0VSVCghcGFyc2VJbmRleChwcm9wZXJ0eU5hbWUpKTsKKwor
ICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBKU09iamVjdCogcmVjZWl2ZXIgPSBzbG90LnRoaXNW
YWx1ZSgpLmdldE9iamVjdCgpOworICAgIC8vIEZJWE1FOiBGb3IgYSBmYWlsdXJlIGR1ZSB0byBw
cmltaXRpdmUgcmVjZWl2ZXIsIHRoZSBlcnJvciBtZXNzYWdlIGlzIG1pc2xlYWRpbmcuCisgICAg
aWYgKCFyZWNlaXZlcikKKyAgICAgICAgcmV0dXJuIHR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNj
b3BlLCBzbG90LmlzU3RyaWN0TW9kZSgpLCBSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcik7Cisg
ICAgaWYgKHNsb3QuaXNUYWludGVkQnlPcGFxdWVPYmplY3QoKSB8fCBzbG90LmNvbnRleHQoKSA9
PSBQdXRQcm9wZXJ0eVNsb3Q6OlJlZmxlY3RTZXQpIHsKKyAgICAgICAgaWYgKHJlY2VpdmVyLT5t
ZXRob2RUYWJsZSh2bSktPmRlZmluZU93blByb3BlcnR5ICE9IEpTT2JqZWN0OjpkZWZpbmVPd25Q
cm9wZXJ0eSkKKyAgICAgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgZGVmaW5lUHJv
cGVydHlPblJlY2VpdmVyU2xvdyhnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHJl
Y2VpdmVyLCBzbG90LmlzU3RyaWN0TW9kZSgpKSk7CisgICAgfQorICAgIC8vIEZJWE1FOiBGb3Ig
YSBmYWlsdXJlIGR1ZSB0byBub24tZXh0ZW5zaWJsZSBzdHJ1Y3R1cmUsIHRoZSBlcnJvciBtZXNz
YWdlIGlzIG1pc2xlYWRpbmcuCisgICAgaWYgKCFyZWNlaXZlci0+cHV0RGlyZWN0SW50ZXJuYWw8
UHV0TW9kZVB1dD4odm0sIHByb3BlcnR5TmFtZSwgdmFsdWUsIDAsIHNsb3QpKQogICAgICAgICBy
ZXR1cm4gdHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsIHNsb3QuaXNTdHJpY3RNb2RlKCks
IFJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9yKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorYm9v
bCBKU09iamVjdDo6ZGVmaW5lUHJvcGVydHlPblJlY2VpdmVyU2xvdyhKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBK
U09iamVjdCogcmVjZWl2ZXIsIGJvb2wgc2hvdWxkVGhyb3cpCit7CisgICAgVk0mIHZtID0gZ2xv
YmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKKworICAgIFByb3BlcnR5U2xvdCBzbG90KHJlY2VpdmVyLCBQcm9wZXJ0eVNsb3Q6OkludGVy
bmFsTWV0aG9kVHlwZTo6R2V0T3duUHJvcGVydHkpOworICAgIGJvb2wgaGFzUHJvcGVydHkgPSBy
ZWNlaXZlci0+bWV0aG9kVGFibGUodm0pLT5nZXRPd25Qcm9wZXJ0eVNsb3QocmVjZWl2ZXIsIGds
b2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCBzbG90KTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCBmYWxzZSk7CisKKyAgICBQcm9wZXJ0eURlc2NyaXB0b3IgZGVzY3JpcHRvcjsKKyAg
ICBpZiAoaGFzUHJvcGVydHkpIHsKKyAgICAgICAgLy8gRklYTUU6IEZvciBhbiBhY2Nlc3NvciB3
aXRoIHNldHRlciwgdGhlIGVycm9yIG1lc3NhZ2UgaXMgbWlzbGVhZGluZy4KKyAgICAgICAgaWYg
KHNsb3QuYXR0cmlidXRlcygpICYgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5T3JBY2Nlc3Nv
ck9yQ3VzdG9tQWNjZXNzb3IpCisgICAgICAgICAgICByZXR1cm4gdHlwZUVycm9yKGdsb2JhbE9i
amVjdCwgc2NvcGUsIHNob3VsZFRocm93LCBSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcik7Cisg
ICAgICAgIGRlc2NyaXB0b3Iuc2V0VmFsdWUodmFsdWUpOworICAgIH0gZWxzZQorICAgICAgICBk
ZXNjcmlwdG9yLnNldERlc2NyaXB0b3IodmFsdWUsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9w
ZXJ0eUF0dHJpYnV0ZTo6Tm9uZSkpOworCisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBy
ZWNlaXZlci0+bWV0aG9kVGFibGUodm0pLT5kZWZpbmVPd25Qcm9wZXJ0eShyZWNlaXZlciwgZ2xv
YmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IsIHNob3VsZFRocm93KSk7Cit9CisK
IGJvb2wgSlNPYmplY3Q6OnB1dEJ5SW5kZXgoSlNDZWxsKiBjZWxsLCBKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIGJvb2wg
c2hvdWxkVGhyb3cpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwpAQCAtMzg1
MCwzMCArMzkxMSw2IEBAIGJvb2wgSlNPYmplY3Q6OmFueU9iamVjdEluQ2hhaW5NYXlJbnRlcmMK
ICAgICB9CiB9CiAKLWJvb2wgSlNPYmplY3Q6OnByb3RvdHlwZUNoYWluTWF5SW50ZXJjZXB0U3Rv
cmVUbyhWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCi17Ci0gICAgaWYgKHBhcnNl
SW5kZXgocHJvcGVydHlOYW1lKSkKLSAgICAgICAgcmV0dXJuIGFueU9iamVjdEluQ2hhaW5NYXlJ
bnRlcmNlcHRJbmRleGVkQWNjZXNzZXModm0pOwotICAgIAotICAgIGZvciAoSlNPYmplY3QqIGN1
cnJlbnQgPSB0aGlzOyA7KSB7Ci0gICAgICAgIEpTVmFsdWUgcHJvdG90eXBlID0gY3VycmVudC0+
Z2V0UHJvdG90eXBlRGlyZWN0KHZtKTsKLSAgICAgICAgaWYgKHByb3RvdHlwZS5pc051bGwoKSkK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgCi0gICAgICAgIGN1cnJlbnQgPSBh
c09iamVjdChwcm90b3R5cGUpOwotICAgICAgICAKLSAgICAgICAgdW5zaWduZWQgYXR0cmlidXRl
czsKLSAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gY3VycmVudC0+c3RydWN0dXJlKHZt
KS0+Z2V0KHZtLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMpOwotICAgICAgICBpZiAoIUpTQzo6
aXNWYWxpZE9mZnNldChvZmZzZXQpKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIAot
ICAgICAgICBpZiAoYXR0cmlidXRlcyAmIChQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBQ
cm9wZXJ0eUF0dHJpYnV0ZTo6QWNjZXNzb3IpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgICAgIAotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotfQotCiBib29sIEpTT2JqZWN0
OjpuZWVkc1Nsb3dQdXRJbmRleGluZyhWTSYgdm0pIGNvbnN0CiB7CiAgICAgcmV0dXJuIGFueU9i
amVjdEluQ2hhaW5NYXlJbnRlcmNlcHRJbmRleGVkQWNjZXNzZXModm0pIHx8IGdsb2JhbE9iamVj
dCh2bSktPmlzSGF2aW5nQUJhZFRpbWUoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNPYmplY3QuaAkocmV2aXNpb24gMjc1OTY1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMTY2LDcgKzE2Niw2IEBA
IHB1YmxpYzoKIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBib29sIGdldE93blByb3Bl
cnR5U2xvdEJ5SW5kZXgoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIHVuc2lnbmVkIHByb3Bl
cnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CiAgICAgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RJbmxp
bmUoSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwotICAgIEpT
X0VYUE9SVF9QUklWQVRFX0lGX0FTU0VSVF9FTkFCTEVEIHN0YXRpYyB2b2lkIGRvUHV0UHJvcGVy
dHlTZWN1cml0eUNoZWNrKEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUs
IFB1dFByb3BlcnR5U2xvdCYpOwogCiAgICAgLy8gVGhlIGtleSBkaWZmZXJlbmNlIGJldHdlZW4g
dGhpcyBhbmQgZ2V0T3duUHJvcGVydHlTbG90IGlzIHRoYXQgZ2V0T3duUHJvcGVydHlTbG90CiAg
ICAgLy8gY3VycmVudGx5IHJldHVybnMgaW5jb3JyZWN0IHJlc3VsdHMgZm9yIHRoZSBET00gd2lu
ZG93ICh3aXRoIG5vbi1vd24gcHJvcGVydGllcykKQEAgLTE5Nyw2ICsxOTYsNyBAQCBwdWJsaWM6
CiAgICAgc3RhdGljIGJvb2wgcHV0SW5saW5lRm9ySlNPYmplY3QoSlNDZWxsKiwgSlNHbG9iYWxP
YmplY3QqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOwogICAgIAog
ICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBib29sIHB1dChKU0NlbGwqLCBKU0dsb2JhbE9i
amVjdCosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7CisgICAgSlNf
RVhQT1JUX1BSSVZBVEUgTkVWRVJfSU5MSU5FIHN0YXRpYyBib29sIGRlZmluZVByb3BlcnR5T25S
ZWNlaXZlcihKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0UHJvcGVy
dHlTbG90Jik7CiAgICAgLy8gcHV0QnlJbmRleCBhc3N1bWVzIHRoYXQgdGhlIHJlY2VpdmVyIGlz
IHRoaXMgSlNDZWxsIG9iamVjdC4KICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9vbCBw
dXRCeUluZGV4KEpTQ2VsbCosIEpTR2xvYmFsT2JqZWN0KiwgdW5zaWduZWQgcHJvcGVydHlOYW1l
LCBKU1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsKICAgICAgICAgCkBAIC0yMTMsMTIgKzIxMywx
MyBAQCBwdWJsaWM6CiAKICAgICBBTFdBWVNfSU5MSU5FIGJvb2wgcHV0QnlJbmRleElubGluZShK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCB1aW50NjRfdCBwcm9wZXJ0eU5hbWUsIEpTVmFs
dWUgdmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpCiAgICAgeworICAgICAgICBWTSYgdm0gPSBnZXRW
TShnbG9iYWxPYmplY3QpOwogICAgICAgICBpZiAoTElLRUxZKHByb3BlcnR5TmFtZSA8PSBNQVhf
QVJSQVlfSU5ERVgpKQogICAgICAgICAgICAgcmV0dXJuIHB1dEJ5SW5kZXhJbmxpbmUoZ2xvYmFs
T2JqZWN0LCBzdGF0aWNfY2FzdDx1aW50MzJfdD4ocHJvcGVydHlOYW1lKSwgdmFsdWUsIHNob3Vs
ZFRocm93KTsKIAogICAgICAgICBBU1NFUlQocHJvcGVydHlOYW1lIDw9IG1heFNhZmVJbnRlZ2Vy
KCkpOwogICAgICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdCh0aGlzLCBzaG91bGRUaHJvdyk7Ci0g
ICAgICAgIHJldHVybiBwdXRJbmxpbmVGb3JKU09iamVjdCh0aGlzLCBnbG9iYWxPYmplY3QsIElk
ZW50aWZpZXI6OmZyb20oZ2V0Vk0oZ2xvYmFsT2JqZWN0KSwgcHJvcGVydHlOYW1lKSwgdmFsdWUs
IHNsb3QpOworICAgICAgICByZXR1cm4gbWV0aG9kVGFibGUodm0pLT5wdXQodGhpcywgZ2xvYmFs
T2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tKHZtLCBwcm9wZXJ0eU5hbWUpLCB2YWx1ZSwgc2xvdCk7
CiAgICAgfQogICAgICAgICAKICAgICAvLyBUaGlzIGlzIHNpbWlsYXIgdG8gdGhlIHB1dERpcmVj
dCogbWV0aG9kczoKQEAgLTYzNyw2ICs2MzgsNyBAQCBwdWJsaWM6CiAgICAgLy8gIC0gYXR0cmli
dXRlcyB3aWxsIGJlIHJlc3BlY3RlZCAoYWZ0ZXIgdGhlIGNhbGwgdGhlIHByb3BlcnR5IHdpbGwg
ZXhpc3Qgd2l0aCB0aGUgZ2l2ZW4gYXR0cmlidXRlcykKICAgICAvLyAgLSB0aGUgcHJvcGVydHkg
bmFtZSBpcyBhc3N1bWVkIHRvIG5vdCBiZSBhbiBpbmRleC4KICAgICBib29sIHB1dERpcmVjdChW
TSYsIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcyA9IDApOworICAg
IGJvb2wgcHV0RGlyZWN0KFZNJiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCB1bnNpZ25lZCBhdHRy
aWJ1dGVzLCBQdXRQcm9wZXJ0eVNsb3QmKTsKICAgICBib29sIHB1dERpcmVjdChWTSYsIFByb3Bl
cnR5TmFtZSwgSlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7CiAgICAgdm9pZCBwdXREaXJlY3RX
aXRob3V0VHJhbnNpdGlvbihWTSYsIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgdW5zaWduZWQgYXR0
cmlidXRlcyA9IDApOwogICAgIGJvb2wgcHV0RGlyZWN0Tm9uSW5kZXhBY2Nlc3NvcihWTSYsIFBy
b3BlcnR5TmFtZSwgR2V0dGVyU2V0dGVyKiwgdW5zaWduZWQgYXR0cmlidXRlcyk7CkBAIC04MTAs
NyArODEyLDYgQEAgcHVibGljOgogICAgIGJvb2wgaXNGcm96ZW4oVk0mIHZtKSB7IHJldHVybiBz
dHJ1Y3R1cmUodm0pLT5pc0Zyb3plbih2bSk7IH0KIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIGJv
b2wgYW55T2JqZWN0SW5DaGFpbk1heUludGVyY2VwdEluZGV4ZWRBY2Nlc3NlcyhWTSYpIGNvbnN0
OwotICAgIEpTX0VYUE9SVF9QUklWQVRFIGJvb2wgcHJvdG90eXBlQ2hhaW5NYXlJbnRlcmNlcHRT
dG9yZVRvKFZNJiwgUHJvcGVydHlOYW1lKTsKICAgICBib29sIG5lZWRzU2xvd1B1dEluZGV4aW5n
KFZNJikgY29uc3Q7CiAKIHByaXZhdGU6CkBAIC0xMTAyLDcgKzExMDMsOSBAQCBwcml2YXRlOgog
ICAgIHRlbXBsYXRlPFB1dE1vZGU+CiAgICAgYm9vbCBwdXREaXJlY3RJbnRlcm5hbChWTSYsIFBy
b3BlcnR5TmFtZSwgSlNWYWx1ZSwgdW5zaWduZWQgYXR0ciwgUHV0UHJvcGVydHlTbG90Jik7CiAK
KyAgICBib29sIHB1dElubGluZUZhc3QoSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIEpT
VmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIE5FVkVSX0lO
TElORSBib29sIHB1dElubGluZVNsb3coSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIEpT
VmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIE5FVkVSX0lO
TElORSBzdGF0aWMgYm9vbCBkZWZpbmVQcm9wZXJ0eU9uUmVjZWl2ZXJTbG93KEpTR2xvYmFsT2Jq
ZWN0KiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBKU09iamVjdCogcmVjZWl2ZXIsIGJvb2wgc2hv
dWxkVGhyb3cpOwogCiAgICAgYm9vbCBnZXROb25JbmRleFByb3BlcnR5U2xvdChKU0dsb2JhbE9i
amVjdCosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CiAgICAgYm9vbCBnZXRPd25Ob25J
bmRleFByb3BlcnR5U2xvdChWTSYsIFN0cnVjdHVyZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlT
bG90Jik7CkBAIC0xNDM1LDEwICsxNDM4LDYgQEAgQUxXQVlTX0lOTElORSBib29sIEpTT2JqZWN0
OjpnZXRPd25Qcm9wZQogewogICAgIHJldHVybiBnZXRPd25Qcm9wZXJ0eVNsb3RJbXBsKG9iamVj
dCwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwogfQotCi1BTFdBWVNfSU5MSU5F
IHZvaWQgSlNPYmplY3Q6OmRvUHV0UHJvcGVydHlTZWN1cml0eUNoZWNrKEpTT2JqZWN0KiwgSlNH
bG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIFB1dFByb3BlcnR5U2xvdCYpCi17Ci19CiAjZW5k
aWYKIAogLy8gSXQgbWF5IHNlZW0gY3JhenkgdG8gaW5saW5lIGEgZnVuY3Rpb24gdGhpcyBsYXJn
ZSBidXQgaXQgbWFrZXMgYSBiaWcgZGlmZmVyZW5jZQpAQCAtMTUyMiw2ICsxNTIxLDEzIEBAIGlu
bGluZSBib29sIEpTT2JqZWN0OjpwdXREaXJlY3QoVk0mIHZtLCAKICAgICByZXR1cm4gcHV0RGly
ZWN0SW50ZXJuYWw8UHV0TW9kZURlZmluZU93blByb3BlcnR5Pih2bSwgcHJvcGVydHlOYW1lLCB2
YWx1ZSwgYXR0cmlidXRlcywgc2xvdCk7CiB9CiAKK2lubGluZSBib29sIEpTT2JqZWN0OjpwdXRE
aXJlY3QoVk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCB1
bnNpZ25lZCBhdHRyaWJ1dGVzLCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCit7CisgICAgQVNTRVJU
KCF2YWx1ZS5pc0dldHRlclNldHRlcigpKTsKKyAgICBBU1NFUlQoIXZhbHVlLmlzQ3VzdG9tR2V0
dGVyU2V0dGVyKCkpOworICAgIHJldHVybiBwdXREaXJlY3RJbnRlcm5hbDxQdXRNb2RlRGVmaW5l
T3duUHJvcGVydHk+KHZtLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBhdHRyaWJ1dGVzLCBzbG90KTsK
K30KKwogaW5saW5lIGJvb2wgSlNPYmplY3Q6OnB1dERpcmVjdChWTSYgdm0sIFByb3BlcnR5TmFt
ZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKIHsK
ICAgICBBU1NFUlQoIXZhbHVlLmlzR2V0dGVyU2V0dGVyKCkpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3RJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3RJbmxpbmVzLmgJKHJldmlzaW9uIDI3NTk2
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0SW5saW5lcy5oCSh3
b3JraW5nIGNvcHkpCkBAIC02Nyw3ICs2Nyw3IEBAIEFMV0FZU19JTkxJTkUgYm9vbCBKU09iamVj
dDo6Y2FuUGVyZm9ybUYKICAgICBKU09iamVjdCogb2JqID0gdGhpczsKICAgICB3aGlsZSAodHJ1
ZSkgewogICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG9iai0+c3RydWN0dXJlKHZtKTsK
LSAgICAgICAgaWYgKHN0cnVjdHVyZS0+aGFzUmVhZE9ubHlPckdldHRlclNldHRlclByb3BlcnRp
ZXNFeGNsdWRpbmdQcm90bygpIHx8IHN0cnVjdHVyZS0+dHlwZUluZm8oKS5vdmVycmlkZXNHZXRQ
cm90b3R5cGUoKSkKKyAgICAgICAgaWYgKHN0cnVjdHVyZS0+aGFzUmVhZE9ubHlPckdldHRlclNl
dHRlclByb3BlcnRpZXNFeGNsdWRpbmdQcm90bygpIHx8IHN0cnVjdHVyZS0+dHlwZUluZm8oKS5v
dmVycmlkZXNQdXQoKSB8fCBzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkub3ZlcnJpZGVzR2V0UHJvdG90
eXBlKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgcHJvdG90eXBlID0g
b2JqLT5nZXRQcm90b3R5cGVEaXJlY3Qodm0pOwpAQCAtMjMxLDMyICsyMzEsMzkgQEAgQUxXQVlT
X0lOTElORSBQcm9wZXJ0eU9mZnNldCBKU09iamVjdDo6cAogICAgIHJldHVybiByZXN1bHQ7CiB9
CiAKLS8vIEVDTUEgOC42LjIuMgorLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vcmRp
bmFyeXNldAogQUxXQVlTX0lOTElORSBib29sIEpTT2JqZWN0OjpwdXRJbmxpbmVGb3JKU09iamVj
dChKU0NlbGwqIGNlbGwsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5TmFt
ZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKIHsK
ICAgICBWTSYgdm0gPSBnZXRWTShnbG9iYWxPYmplY3QpOwotICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIEpTT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0
PEpTT2JqZWN0Kj4oY2VsbCk7CiAgICAgQVNTRVJUKHZhbHVlKTsKICAgICBBU1NFUlQoIUhlYXA6
OmhlYXAodmFsdWUpIHx8IEhlYXA6OmhlYXAodmFsdWUpID09IEhlYXA6OmhlYXAodGhpc09iamVj
dCkpOwogCi0gICAgaWYgKFVOTElLRUxZKGlzVGhpc1ZhbHVlQWx0ZXJlZChzbG90LCB0aGlzT2Jq
ZWN0KSkpCi0gICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgb3JkaW5hcnlTZXRTbG93
KGdsb2JhbE9iamVjdCwgdGhpc09iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdC50aGlz
VmFsdWUoKSwgc2xvdC5pc1N0cmljdE1vZGUoKSkpOwotCiAgICAgLy8gVHJ5IGluZGV4ZWQgcHV0
IGZpcnN0LiBUaGlzIGlzIHJlcXVpcmVkIGZvciBjb3JyZWN0bmVzcywgc2luY2UgbG9hZHMgb24g
cHJvcGVydHkgbmFtZXMgdGhhdCBhcHBlYXIgbGlrZQogICAgIC8vIHZhbGlkIGluZGljZXMgd2ls
bCBuZXZlciBsb29rIGluIHRoZSBuYW1lZCBwcm9wZXJ0eSBzdG9yYWdlLgotICAgIGlmIChPcHRp
b25hbDx1aW50MzJfdD4gaW5kZXggPSBwYXJzZUluZGV4KHByb3BlcnR5TmFtZSkpCi0gICAgICAg
IFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgcHV0QnlJbmRleCh0aGlzT2JqZWN0LCBnbG9iYWxP
YmplY3QsIGluZGV4LnZhbHVlKCksIHZhbHVlLCBzbG90LmlzU3RyaWN0TW9kZSgpKSk7Ci0KLSAg
ICBpZiAodGhpc09iamVjdC0+Y2FuUGVyZm9ybUZhc3RQdXRJbmxpbmUodm0sIHByb3BlcnR5TmFt
ZSkpIHsKLSAgICAgICAgQVNTRVJUKCF0aGlzT2JqZWN0LT5wcm90b3R5cGVDaGFpbk1heUludGVy
Y2VwdFN0b3JlVG8odm0sIHByb3BlcnR5TmFtZSkpOwotICAgICAgICBpZiAoIXRoaXNPYmplY3Qt
PnB1dERpcmVjdEludGVybmFsPFB1dE1vZGVQdXQ+KHZtLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCAw
LCBzbG90KSkKLSAgICAgICAgICAgIHJldHVybiB0eXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29w
ZSwgc2xvdC5pc1N0cmljdE1vZGUoKSwgUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpOwotICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAoT3B0aW9uYWw8dWludDMyX3Q+IGluZGV4ID0gcGFy
c2VJbmRleChwcm9wZXJ0eU5hbWUpKSB7CisgICAgICAgIGlmIChVTkxJS0VMWShpc1RoaXNWYWx1
ZUFsdGVyZWQoc2xvdCwgdGhpc09iamVjdCkpKQorICAgICAgICAgICAgcmV0dXJuIG9yZGluYXJ5
U2V0U2xvdyhnbG9iYWxPYmplY3QsIHRoaXNPYmplY3QsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNs
b3QudGhpc1ZhbHVlKCksIHNsb3QuaXNTdHJpY3RNb2RlKCkpOworICAgICAgICByZXR1cm4gdGhp
c09iamVjdC0+bWV0aG9kVGFibGUodm0pLT5wdXRCeUluZGV4KHRoaXNPYmplY3QsIGdsb2JhbE9i
amVjdCwgaW5kZXgudmFsdWUoKSwgdmFsdWUsIHNsb3QuaXNTdHJpY3RNb2RlKCkpOwogICAgIH0K
IAotICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgdGhpc09iamVjdC0+cHV0SW5saW5lU2xv
dyhnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpKTsKKyAgICBpZiAodGhp
c09iamVjdC0+Y2FuUGVyZm9ybUZhc3RQdXRJbmxpbmUodm0sIHByb3BlcnR5TmFtZSkpCisgICAg
ICAgIHJldHVybiB0aGlzT2JqZWN0LT5wdXRJbmxpbmVGYXN0KGdsb2JhbE9iamVjdCwgcHJvcGVy
dHlOYW1lLCB2YWx1ZSwgc2xvdCk7CisgICAgcmV0dXJuIHRoaXNPYmplY3QtPnB1dElubGluZVNs
b3coZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KTsKK30KKworQUxXQVlT
X0lOTElORSBib29sIEpTT2JqZWN0OjpwdXRJbmxpbmVGYXN0KEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFB1dFBy
b3BlcnR5U2xvdCYgc2xvdCkKK3sKKyAgICBWTSYgdm0gPSBnZXRWTShnbG9iYWxPYmplY3QpOwor
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIGlmIChVTkxJ
S0VMWShpc1RoaXNWYWx1ZUFsdGVyZWQoc2xvdCwgdGhpcykpKQorICAgICAgICBSRUxFQVNFX0FO
RF9SRVRVUk4oc2NvcGUsIGRlZmluZVByb3BlcnR5T25SZWNlaXZlcihnbG9iYWxPYmplY3QsIHBy
b3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpKTsKKyAgICAvLyBGSVhNRTogRm9yIGEgZmFpbHVyZSBk
dWUgdG8gbm9uLWV4dGVuc2libGUgc3RydWN0dXJlLCB0aGUgZXJyb3IgbWVzc2FnZSBpcyBtaXNs
ZWFkaW5nLgorICAgIGlmICghcHV0RGlyZWN0SW50ZXJuYWw8UHV0TW9kZVB1dD4odm0sIHByb3Bl
cnR5TmFtZSwgdmFsdWUsIDAsIHNsb3QpKQorICAgICAgICByZXR1cm4gdHlwZUVycm9yKGdsb2Jh
bE9iamVjdCwgc2NvcGUsIHNsb3QuaXNTdHJpY3RNb2RlKCksIFJlYWRvbmx5UHJvcGVydHlXcml0
ZUVycm9yKTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogLy8gSGFzT3duUHJvcGVydHkoTywgUCkg
ZnJvbSBzZWN0aW9uIDcuMy4xMSBpbiB0aGUgc3BlYy4KQEAgLTI5OSw3ICszMDYsNyBAQCBBTFdB
WVNfSU5MSU5FIGJvb2wgSlNPYmplY3Q6OnB1dERpcmVjdEluCiAgICAgICAgIHVuc2lnbmVkIGN1
cnJlbnRBdHRyaWJ1dGVzOwogICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1
cmUtPmdldCh2bSwgcHJvcGVydHlOYW1lLCBjdXJyZW50QXR0cmlidXRlcyk7CiAgICAgICAgIGlm
IChvZmZzZXQgIT0gaW52YWxpZE9mZnNldCkgewotICAgICAgICAgICAgaWYgKChtb2RlID09IFB1
dE1vZGVQdXQpICYmIGN1cnJlbnRBdHRyaWJ1dGVzICYgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRP
bmx5KQorICAgICAgICAgICAgaWYgKChtb2RlID09IFB1dE1vZGVQdXQpICYmIGN1cnJlbnRBdHRy
aWJ1dGVzICYgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5T3JBY2Nlc3Nvck9yQ3VzdG9tQWNj
ZXNzb3IpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgICAgICBwdXRE
aXJlY3Qodm0sIG9mZnNldCwgdmFsdWUpOwpAQCAtMzU4LDcgKzM2NSw3IEBAIEFMV0FZU19JTkxJ
TkUgYm9vbCBKU09iamVjdDo6cHV0RGlyZWN0SW4KICAgICB1bnNpZ25lZCBjdXJyZW50QXR0cmli
dXRlczsKICAgICBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldCh2bSwgcHJvcGVydHlOYW1lLCBjdXJy
ZW50QXR0cmlidXRlcyk7CiAgICAgaWYgKG9mZnNldCAhPSBpbnZhbGlkT2Zmc2V0KSB7Ci0gICAg
ICAgIGlmICgobW9kZSA9PSBQdXRNb2RlUHV0KSAmJiBjdXJyZW50QXR0cmlidXRlcyAmIFByb3Bl
cnR5QXR0cmlidXRlOjpSZWFkT25seSkKKyAgICAgICAgaWYgKChtb2RlID09IFB1dE1vZGVQdXQp
ICYmIGN1cnJlbnRBdHRyaWJ1dGVzICYgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5T3JBY2Nl
c3Nvck9yQ3VzdG9tQWNjZXNzb3IpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAg
ICAgc3RydWN0dXJlLT5kaWRSZXBsYWNlUHJvcGVydHkob2Zmc2V0KTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJveHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3h5LmgJKHJldmlzaW9uIDI3NTk2NSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAtMzIs
NyArMzIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIGNsYXNzIEpTUHJveHkgOiBwdWJsaWMgSlNOb25G
aW5hbE9iamVjdCB7CiBwdWJsaWM6CiAgICAgdXNpbmcgQmFzZSA9IEpTTm9uRmluYWxPYmplY3Q7
Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0
cnVjdHVyZUZsYWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzR2V0
T3duUHJvcGVydHlOYW1lcyB8IE92ZXJyaWRlc0dldFByb3RvdHlwZSB8IEludGVyY2VwdHNHZXRP
d25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm87CisgICAgc3RhdGlj
IGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdz
IHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlO
YW1lcyB8IE92ZXJyaWRlc1B1dCB8IE92ZXJyaWRlc0dldFByb3RvdHlwZSB8IEludGVyY2VwdHNH
ZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm87CiAKICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+CiAgICAgc3RhdGljIElz
b1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1R5cGVJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNUeXBlSW5mby5oCShyZXZpc2lvbiAyNzU5NjUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGVJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDcg
KzU3LDcgQEAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBJc0ltbXV0YWJsZVBybwogc3RhdGlj
IGNvbnN0ZXhwciB1bnNpZ25lZCBHZXRPd25Qcm9wZXJ0eVNsb3RJc0ltcHVyZUZvclByb3BlcnR5
QWJzZW5jZSA9IDEgPDwgMTU7CiBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIEludGVyY2VwdHNH
ZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8gPSAxIDw8IDE2
Owogc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVJc0ltbW9ydGFsID0gMSA8PCAx
NzsKLXN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgSGFzUHV0UHJvcGVydHlTZWN1cml0eUNoZWNr
ID0gMSA8PCAxODsKK3N0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgT3ZlcnJpZGVzUHV0ID0gMSA8
PCAxODsKIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgT3ZlcnJpZGVzR2V0UHJvdG90eXBlID0g
MSA8PCAxOTsKIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgR2V0T3duUHJvcGVydHlTbG90TWF5
QmVXcm9uZ0Fib3V0RG9udEVudW0gPSAxIDw8IDIwOwogCkBAIC05NCw2ICs5NCw3IEBAIHB1Ymxp
YzoKICAgICBib29sIGltcGxlbWVudHNEZWZhdWx0SGFzSW5zdGFuY2UoKSBjb25zdCB7IHJldHVy
biBpc1NldE9uRmxhZ3MxPEltcGxlbWVudHNEZWZhdWx0SGFzSW5zdGFuY2U+KCk7IH0KICAgICBi
b29sIG92ZXJyaWRlc0dldENhbGxEYXRhKCkgY29uc3QgeyByZXR1cm4gaXNTZXRPbkZsYWdzMTxP
dmVycmlkZXNHZXRDYWxsRGF0YT4oKTsgfQogICAgIGJvb2wgb3ZlcnJpZGVzR2V0T3duUHJvcGVy
dHlTbG90KCkgY29uc3QgeyByZXR1cm4gb3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90KGlubGlu
ZVR5cGVGbGFncygpKTsgfQorICAgIGJvb2wgaGFzU3RhdGljUHJvcGVydHlUYWJsZSgpIGNvbnN0
IHsgcmV0dXJuIGhhc1N0YXRpY1Byb3BlcnR5VGFibGUoaW5saW5lVHlwZUZsYWdzKCkpOyB9CiAg
ICAgc3RhdGljIGJvb2wgb3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90KElubGluZVR5cGVGbGFn
cyBmbGFncykgeyByZXR1cm4gZmxhZ3MgJiBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3Q7IH0K
ICAgICBzdGF0aWMgYm9vbCBoYXNTdGF0aWNQcm9wZXJ0eVRhYmxlKElubGluZVR5cGVGbGFncyBm
bGFncykgeyByZXR1cm4gZmxhZ3MgJiBIYXNTdGF0aWNQcm9wZXJ0eVRhYmxlOyB9CiAgICAgc3Rh
dGljIGJvb2wgcGVyQ2VsbEJpdChJbmxpbmVUeXBlRmxhZ3MgZmxhZ3MpIHsgcmV0dXJuIGZsYWdz
ICYgVHlwZUluZm9QZXJDZWxsQml0OyB9CkBAIC0xMDIsMTIgKzEwMywxMiBAQCBwdWJsaWM6CiAg
ICAgYm9vbCBvdmVycmlkZXNHZXRPd25Qcm9wZXJ0eU5hbWVzKCkgY29uc3QgeyByZXR1cm4gaXNT
ZXRPbkZsYWdzMjxPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eU5hbWVzPigpOyB9CiAgICAgYm9vbCBv
dmVycmlkZXNHZXRPd25TcGVjaWFsUHJvcGVydHlOYW1lcygpIGNvbnN0IHsgcmV0dXJuIGlzU2V0
T25GbGFnczI8T3ZlcnJpZGVzR2V0T3duU3BlY2lhbFByb3BlcnR5TmFtZXM+KCk7IH0KICAgICBi
b29sIG92ZXJyaWRlc0FueUZvcm1PZkdldE93blByb3BlcnR5TmFtZXMoKSBjb25zdCB7IHJldHVy
biBvdmVycmlkZXNHZXRPd25Qcm9wZXJ0eU5hbWVzKCkgfHwgb3ZlcnJpZGVzR2V0T3duU3BlY2lh
bFByb3BlcnR5TmFtZXMoKTsgfQorICAgIGJvb2wgb3ZlcnJpZGVzUHV0KCkgY29uc3QgeyByZXR1
cm4gaXNTZXRPbkZsYWdzMjxPdmVycmlkZXNQdXQ+KCk7IH0KICAgICBib29sIG92ZXJyaWRlc0dl
dFByb3RvdHlwZSgpIGNvbnN0IHsgcmV0dXJuIGlzU2V0T25GbGFnczI8T3ZlcnJpZGVzR2V0UHJv
dG90eXBlPigpOyB9CiAgICAgYm9vbCBwcm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmcoKSBjb25zdCB7
IHJldHVybiBpc1NldE9uRmxhZ3MyPFByb2hpYml0c1Byb3BlcnR5Q2FjaGluZz4oKTsgfQogICAg
IGJvb2wgZ2V0T3duUHJvcGVydHlTbG90SXNJbXB1cmUoKSBjb25zdCB7IHJldHVybiBpc1NldE9u
RmxhZ3MyPEdldE93blByb3BlcnR5U2xvdElzSW1wdXJlPigpOyB9CiAgICAgYm9vbCBnZXRPd25Q
cm9wZXJ0eVNsb3RJc0ltcHVyZUZvclByb3BlcnR5QWJzZW5jZSgpIGNvbnN0IHsgcmV0dXJuIGlz
U2V0T25GbGFnczI8R2V0T3duUHJvcGVydHlTbG90SXNJbXB1cmVGb3JQcm9wZXJ0eUFic2VuY2U+
KCk7IH0KICAgICBib29sIGdldE93blByb3BlcnR5U2xvdE1heUJlV3JvbmdBYm91dERvbnRFbnVt
KCkgY29uc3QgeyByZXR1cm4gaXNTZXRPbkZsYWdzMjxHZXRPd25Qcm9wZXJ0eVNsb3RNYXlCZVdy
b25nQWJvdXREb250RW51bT4oKTsgfQotICAgIGJvb2wgaGFzUHV0UHJvcGVydHlTZWN1cml0eUNo
ZWNrKCkgY29uc3QgeyByZXR1cm4gaXNTZXRPbkZsYWdzMjxIYXNQdXRQcm9wZXJ0eVNlY3VyaXR5
Q2hlY2s+KCk7IH0KICAgICBib29sIG5ld0ltcHVyZVByb3BlcnR5RmlyZXNXYXRjaHBvaW50cygp
IGNvbnN0IHsgcmV0dXJuIGlzU2V0T25GbGFnczI8TmV3SW1wdXJlUHJvcGVydHlGaXJlc1dhdGNo
cG9pbnRzPigpOyB9CiAgICAgYm9vbCBpc0ltbXV0YWJsZVByb3RvdHlwZUV4b3RpY09iamVjdCgp
IGNvbnN0IHsgcmV0dXJuIGlzU2V0T25GbGFnczI8SXNJbW11dGFibGVQcm90b3R5cGVFeG90aWNP
YmplY3Q+KCk7IH0KICAgICBib29sIGludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4
RXZlbldoZW5MZW5ndGhJc05vdFplcm8oKSBjb25zdCB7IHJldHVybiBpc1NldE9uRmxhZ3MyPElu
dGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8+
KCk7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xvb2t1cC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xvb2t1cC5oCShyZXZpc2lv
biAyNzU5NjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Mb29rdXAuaAkod29y
a2luZyBjb3B5KQpAQCAtMjYyLDcwICsyNjIsNiBAQCBpbmxpbmUgYm9vbCByZXBsYWNlU3RhdGlj
UHJvcGVydHlTbG90KFZNCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLS8vICdiYXNlJyBtZWFucyB0
aGUgb2JqZWN0IGhvbGRpbmcgdGhlIHByb3BlcnR5IChwb3NzaWJseSBpbiB0aGUgcHJvdG90eXBl
IGNoYWluIG9mIHRoZSBvYmplY3QgcHV0IHdhcyBjYWxsZWQgb24pLgotLy8gJ3RoaXNWYWx1ZScg
aXMgdGhlIG9iamVjdCB0aGF0IHB1dCBpcyBiZWluZyBhcHBsaWVkIHRvIChpbiB0aGUgY2FzZSBv
ZiBhIHByb3h5LCB0aGUgcHJveHkgdGFyZ2V0KS4KLS8vICdzbG90LnRoaXNWYWx1ZSgpJyBpcyB0
aGUgb2JqZWN0IHRoZSBwdXQgd2FzIG9yaWdpbmFsbHkgcGVyZm9ybWVkIG9uIChpbiB0aGUgY2Fz
ZSBvZiBhIHByb3h5LCB0aGUgcHJveHkgaXRzZWxmKS4KLWlubGluZSBib29sIHB1dEVudHJ5KEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IENsYXNzSW5mbyosIGNvbnN0IEhhc2hU
YWJsZVZhbHVlKiBlbnRyeSwgSlNPYmplY3QqIGJhc2UsIEpTT2JqZWN0KiB0aGlzVmFsdWUsIFBy
b3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYg
c2xvdCkKLXsKLSAgICBWTSYgdm0gPSBnZXRWTShnbG9iYWxPYmplY3QpOwotICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAgIGlmIChlbnRyeS0+YXR0cmlidXRl
cygpICYgUHJvcGVydHlBdHRyaWJ1dGU6OkJ1aWx0aW5PckZ1bmN0aW9uT3JMYXp5UHJvcGVydHkp
IHsKLSAgICAgICAgaWYgKCEoZW50cnktPmF0dHJpYnV0ZXMoKSAmIFByb3BlcnR5QXR0cmlidXRl
OjpSZWFkT25seSkpIHsKLSAgICAgICAgICAgIC8vIElmIHRoaXMgaXMgYSBmdW5jdGlvbiBvciBs
YXp5IHByb3BlcnR5IHB1dCB0aGVuIHdlIGp1c3QgZG8gdGhlIHB1dCBiZWNhdXNlCi0gICAgICAg
ICAgICAvLyBsb2dpY2FsbHkgdGhlIG9iamVjdCBhbHJlYWR5IGhhZCB0aGUgcHJvcGVydHksIHNv
IHRoaXMgaXMganVzdCBhIHJlcGxhY2UuCi0gICAgICAgICAgICAvLyBGSVhNRTogdGhpc1ZhbHVl
IG1heSBiZSBhbiBvYmplY3Qgd2l0aCBub24tZXh0ZW5zaWJsZSBzdHJ1Y3R1cmUgd2UgbXVzdCB0
aHJvdyBmb3IuCi0gICAgICAgICAgICBpZiAoSlNPYmplY3QqIHRoaXNPYmplY3QgPSBqc0R5bmFt
aWNDYXN0PEpTT2JqZWN0Kj4odm0sIHRoaXNWYWx1ZSkpCi0gICAgICAgICAgICAgICAgdGhpc09i
amVjdC0+cHV0RGlyZWN0KHZtLCBwcm9wZXJ0eU5hbWUsIHZhbHVlKTsKLSAgICAgICAgICAgIHJl
dHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0eXBlRXJyb3IoZ2xvYmFsT2Jq
ZWN0LCBzY29wZSwgc2xvdC5pc1N0cmljdE1vZGUoKSwgUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJy
b3IpOwotICAgIH0KLQotICAgIGlmIChlbnRyeS0+YXR0cmlidXRlcygpICYgUHJvcGVydHlBdHRy
aWJ1dGU6OkFjY2Vzc29yKQotICAgICAgICByZXR1cm4gdHlwZUVycm9yKGdsb2JhbE9iamVjdCwg
c2NvcGUsIHNsb3QuaXNTdHJpY3RNb2RlKCksIFJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9yKTsK
LQotICAgIGlmICghKGVudHJ5LT5hdHRyaWJ1dGVzKCkgJiBQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVh
ZE9ubHkpKSB7Ci0gICAgICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoIShlbnRyeS0+YXR0cmlidXRl
cygpICYgUHJvcGVydHlBdHRyaWJ1dGU6OkRPTUpJVEF0dHJpYnV0ZSksICJET01KSVRBdHRyaWJ1
dGUgc3VwcG9ydHMgcmVhZG9ubHkgYXR0cmlidXRlcyBjdXJyZW50bHkuIik7Ci0gICAgICAgIGJv
b2wgaXNBY2Nlc3NvciA9IGVudHJ5LT5hdHRyaWJ1dGVzKCkgJiBQcm9wZXJ0eUF0dHJpYnV0ZTo6
Q3VzdG9tQWNjZXNzb3I7Ci0gICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgb25seSBiZSBjYWNo
aW5nIHRoZXNlIGlmIHdlJ3JlIG5vdCBhbiB1bmNhY2hlYWJsZSBkaWN0aW9uYXJ5OgotICAgICAg
ICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE1MzQ3Ci0gICAg
ICAgIC8vIFdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgd2UgZGVjaWRlIHRvIGNhY2hlIHRoaXMg
cHJvcGVydHkgYmVmb3JlIHdlIHBvdGVudGlhbGx5IGV4ZWN1dGUgYXJpYml0cmFyeSBKUy4KLSAg
ICAgICAgaWYgKGlzQWNjZXNzb3IpCi0gICAgICAgICAgICBzbG90LnNldEN1c3RvbUFjY2Vzc29y
KGJhc2UsIGVudHJ5LT5wcm9wZXJ0eVB1dHRlcigpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAg
ICAgc2xvdC5zZXRDdXN0b21WYWx1ZShiYXNlLCBlbnRyeS0+cHJvcGVydHlQdXR0ZXIoKSk7Ci0K
LSAgICAgICAgYXV0byByZXN1bHQgPSBjYWxsQ3VzdG9tU2V0dGVyKGdsb2JhbE9iamVjdCwgZW50
cnktPnByb3BlcnR5UHV0dGVyKCksIGlzQWNjZXNzb3IsIGJhc2UsIHNsb3QudGhpc1ZhbHVlKCks
IHZhbHVlLCBwcm9wZXJ0eU5hbWUpOwotICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCBmYWxzZSk7Ci0gICAgICAgIGlmIChyZXN1bHQgIT0gVHJpU3RhdGU6OkluZGV0ZXJtaW5hdGUp
Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0ID09IFRyaVN0YXRlOjpUcnVlOwotCi0gICAgICAg
IC8vIEZJWE1FOiB0aGlzVmFsdWUgbWF5IGJlIGFuIG9iamVjdCB3aXRoIG5vbi1leHRlbnNpYmxl
IHN0cnVjdHVyZSB3ZSBtdXN0IHRocm93IGZvci4KLSAgICAgICAgaWYgKEpTT2JqZWN0KiB0aGlz
T2JqZWN0ID0ganNEeW5hbWljQ2FzdDxKU09iamVjdCo+KHZtLCB0aGlzVmFsdWUpKQotICAgICAg
ICAgICAgdGhpc09iamVjdC0+cHV0RGlyZWN0KHZtLCBwcm9wZXJ0eU5hbWUsIHZhbHVlKTsKLSAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIHR5cGVFcnJvcihnbG9iYWxP
YmplY3QsIHNjb3BlLCBzbG90LmlzU3RyaWN0TW9kZSgpLCBSZWFkb25seVByb3BlcnR5V3JpdGVF
cnJvcik7Ci19Ci0KLS8qKgotICogVGhpcyBvbmUgaXMgZm9yICJwdXQiLgotICogSXQgbG9va3Mg
dXAgYSBoYXNoIGVudHJ5IGZvciB0aGUgcHJvcGVydHkgdG8gYmUgc2V0LiAgSWYgYW4gZW50cnkK
LSAqIGlzIGZvdW5kIGl0IHNldHMgdGhlIHZhbHVlIGFuZCByZXR1cm5zIHRydWUsIGVsc2UgaXQg
cmV0dXJucyBmYWxzZS4KLSAqLwotaW5saW5lIGJvb2wgbG9va3VwUHV0KEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTT2JqZWN0KiBiYXNl
LCBKU1ZhbHVlIHZhbHVlLCBjb25zdCBIYXNoVGFibGUmIHRhYmxlLCBQdXRQcm9wZXJ0eVNsb3Qm
IHNsb3QsIGJvb2wmIHB1dFJlc3VsdCkKLXsKLSAgICBjb25zdCBIYXNoVGFibGVWYWx1ZSogZW50
cnkgPSB0YWJsZS5lbnRyeShwcm9wZXJ0eU5hbWUpOwotCi0gICAgaWYgKCFlbnRyeSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcHV0UmVzdWx0ID0gcHV0RW50cnkoZ2xvYmFsT2JqZWN0
LCB0YWJsZS5jbGFzc0ZvclRoaXMsIGVudHJ5LCBiYXNlLCBiYXNlLCBwcm9wZXJ0eU5hbWUsIHZh
bHVlLCBzbG90KTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQogaW5saW5lIHZvaWQgcmVpZnlTdGF0
aWNQcm9wZXJ0eShWTSYgdm0sIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvLCBjb25zdCBQcm9w
ZXJ0eU5hbWUmIHByb3BlcnR5TmFtZSwgY29uc3QgSGFzaFRhYmxlVmFsdWUmIHZhbHVlLCBKU09i
amVjdCYgdGhpc09iaikKIHsKICAgICBpZiAodmFsdWUuYXR0cmlidXRlcygpICYgUHJvcGVydHlB
dHRyaWJ1dGU6OkJ1aWx0aW4pIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1Byb3BlcnR5U2xvdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1Byb3BlcnR5U2xvdC5oCShyZXZpc2lvbiAyNzU5NjUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9Qcm9wZXJ0eVNsb3QuaAkod29ya2luZyBjb3B5KQpAQCAtNDcsNiArNDcs
NyBAQCBlbnVtIGNsYXNzIFByb3BlcnR5QXR0cmlidXRlIDogdW5zaWduZWQgCiAgICAgQ3VzdG9t
VmFsdWUgICAgICAgPSAxIDw8IDYsCiAgICAgQ3VzdG9tQWNjZXNzb3JPclZhbHVlID0gQ3VzdG9t
QWNjZXNzb3IgfCBDdXN0b21WYWx1ZSwKICAgICBBY2Nlc3Nvck9yQ3VzdG9tQWNjZXNzb3JPclZh
bHVlID0gQWNjZXNzb3IgfCBDdXN0b21BY2Nlc3NvciB8IEN1c3RvbVZhbHVlLAorICAgIFJlYWRP
bmx5T3JBY2Nlc3Nvck9yQ3VzdG9tQWNjZXNzb3IgPSBSZWFkT25seSB8IEFjY2Vzc29yIHwgQ3Vz
dG9tQWNjZXNzb3IsCiAKICAgICAvLyBUaGluZ3MgdGhhdCBhcmUgdXNlZCBieSBzdGF0aWMgaGFz
aHRhYmxlcyBhcmUgbm90IGluIHRoZSBhdHRyaWJ1dGVzIGJ5dGUgaW4gUHJvcGVydHlNYXBFbnRy
eS4KICAgICBGdW5jdGlvbiAgICAgICAgICA9IDEgPDwgOCwgIC8vIHByb3BlcnR5IGlzIGEgZnVu
Y3Rpb24gLSBvbmx5IHVzZWQgYnkgc3RhdGljIGhhc2h0YWJsZXMKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1Byb3h5T2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm94eU9iamVjdC5jcHAJKHJldmlzaW9uIDI3NTk2NSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3h5T2JqZWN0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDY0LDYgKzQ2NCw3IEBAIGJvb2wgUHJveHlPYmplY3Q6OnB1dChKU0NlbGwq
IGNlbGwsIEpTR2wKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgc2xv
dC5kaXNhYmxlQ2FjaGluZygpOworICAgIHNsb3Quc2V0SXNUYWludGVkQnlPcGFxdWVPYmplY3Qo
KTsKIAogICAgIFByb3h5T2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PFByb3h5T2JqZWN0Kj4o
Y2VsbCk7CiAgICAgYXV0byBwZXJmb3JtRGVmYXVsdFB1dCA9IFsmXSAoKSB7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm94eU9iamVjdC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3h5T2JqZWN0LmgJKHJldmlzaW9uIDI3NTk2
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3h5T2JqZWN0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAgY2xhc3MgUHJveHlPYmplY3QgZmluYWwgOiBwdWJs
aWMgSlNOb25GaQogcHVibGljOgogICAgIHR5cGVkZWYgSlNOb25GaW5hbE9iamVjdCBCYXNlOwog
Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0
cnVjdHVyZUZsYWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzR2V0
T3duUHJvcGVydHlOYW1lcyB8IE92ZXJyaWRlc0dldFByb3RvdHlwZSB8IE92ZXJyaWRlc0dldENh
bGxEYXRhIHwgSW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0
aElzTm90WmVybyB8IFByb2hpYml0c1Byb3BlcnR5Q2FjaGluZzsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBPdmVy
cmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eU5hbWVzIHwg
T3ZlcnJpZGVzR2V0UHJvdG90eXBlIHwgT3ZlcnJpZGVzR2V0Q2FsbERhdGEgfCBPdmVycmlkZXNQ
dXQgfCBJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNO
b3RaZXJvIHwgUHJvaGliaXRzUHJvcGVydHlDYWNoaW5nOwogCiAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+CiAgICAgc3RhdGljIElzb1N1YnNwYWNl
KiBzdWJzcGFjZUZvcihWTSYgdm0pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9QdXRQcm9wZXJ0eVNsb3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9QdXRQcm9wZXJ0eVNsb3QuaAkocmV2aXNpb24gMjc1OTY1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvUHV0UHJvcGVydHlTbG90LmgJKHdvcmtpbmcgY29weSkKQEAg
LTM3LDcgKzM3LDcgQEAgY2xhc3MgSlNGdW5jdGlvbjsKIGNsYXNzIFB1dFByb3BlcnR5U2xvdCB7
CiBwdWJsaWM6CiAgICAgZW51bSBUeXBlIDogdWludDhfdCB7IFVuY2FjaGFibGUsIEV4aXN0aW5n
UHJvcGVydHksIE5ld1Byb3BlcnR5LCBTZXR0ZXJQcm9wZXJ0eSwgQ3VzdG9tVmFsdWUsIEN1c3Rv
bUFjY2Vzc29yIH07Ci0gICAgZW51bSBDb250ZXh0IHsgVW5rbm93bkNvbnRleHQsIFB1dEJ5SWQs
IFB1dEJ5SWRFdmFsIH07CisgICAgZW51bSBDb250ZXh0IDogdWludDhfdCB7IFVua25vd25Db250
ZXh0LCBQdXRCeUlkLCBQdXRCeUlkRXZhbCwgUmVmbGVjdFNldCB9OwogICAgIHVzaW5nIFB1dFZh
bHVlRnVuYyA9IEpTQzo6UHV0VmFsdWVGdW5jOwogICAgIHVzaW5nIFB1dFZhbHVlRnVuY1dpdGhQ
dHIgPSBKU0M6OlB1dFZhbHVlRnVuY1dpdGhQdHI7CiAKQEAgLTExNiw2ICsxMTYsOCBAQCBwdWJs
aWM6CiAgICAgYm9vbCBpc0NhY2hlYWJsZUN1c3RvbSgpIGNvbnN0IHsgcmV0dXJuIGlzQ2FjaGVh
YmxlKCkgJiYgKG1fdHlwZSA9PSBDdXN0b21WYWx1ZSB8fCBtX3R5cGUgPT0gQ3VzdG9tQWNjZXNz
b3IpICYmICEhbV9wdXRGdW5jdGlvbjsgfQogICAgIGJvb2wgaXNDdXN0b21BY2Nlc3NvcigpIGNv
bnN0IHsgcmV0dXJuIGlzQ2FjaGVhYmxlKCkgJiYgbV90eXBlID09IEN1c3RvbUFjY2Vzc29yOyB9
CiAgICAgYm9vbCBpc0luaXRpYWxpemF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9pc0luaXRpYWxp
emF0aW9uOyB9CisgICAgYm9vbCBpc1RhaW50ZWRCeU9wYXF1ZU9iamVjdCgpIGNvbnN0IHsgcmV0
dXJuIG1faXNUYWludGVkQnlPcGFxdWVPYmplY3Q7IH0KKyAgICB2b2lkIHNldElzVGFpbnRlZEJ5
T3BhcXVlT2JqZWN0KCkgeyBtX2lzVGFpbnRlZEJ5T3BhcXVlT2JqZWN0ID0gdHJ1ZTsgfQogCiAg
ICAgUHJvcGVydHlPZmZzZXQgY2FjaGVkT2Zmc2V0KCkgY29uc3QKICAgICB7CkBAIC0xMzUsNiAr
MTM3LDcgQEAgcHJpdmF0ZToKICAgICBQcm9wZXJ0eU9mZnNldCBtX29mZnNldDsKICAgICBib29s
IG1faXNTdHJpY3RNb2RlIDogMTsKICAgICBib29sIG1faXNJbml0aWFsaXphdGlvbiA6IDE7Cisg
ICAgYm9vbCBtX2lzVGFpbnRlZEJ5T3BhcXVlT2JqZWN0IHsgZmFsc2UgfTsKICAgICBUeXBlIG1f
dHlwZTsKICAgICB1aW50OF90IG1fY29udGV4dDsKICAgICBDYWNoZWFiaWxpdHlUeXBlIG1fY2Fj
aGVhYmlsaXR5OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVmbGVjdE9i
amVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVm
bGVjdE9iamVjdC5jcHAJKHJldmlzaW9uIDI3NTk2NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1JlZmxlY3RPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjAsNyArMjYw
LDcgQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKHJlZmxlY3RPYmplY3RTZQogCiAgICAgLy8g
RG8gbm90IHJhaXNlIGFueSByZWFkb25seSBlcnJvcnMgdGhhdCBoYXBwZW4gaW4gc3RyaWN0IG1v
ZGUuCiAgICAgYm9vbCBzaG91bGRUaHJvd0lmQ2FudFNldCA9IGZhbHNlOwotICAgIFB1dFByb3Bl
cnR5U2xvdCBzbG90KHJlY2VpdmVyLCBzaG91bGRUaHJvd0lmQ2FudFNldCk7CisgICAgUHV0UHJv
cGVydHlTbG90IHNsb3QocmVjZWl2ZXIsIHNob3VsZFRocm93SWZDYW50U2V0LCBQdXRQcm9wZXJ0
eVNsb3Q6OlJlZmxlY3RTZXQpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgSlNWYWx1
ZTo6ZW5jb2RlKGpzQm9vbGVhbih0YXJnZXRPYmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+cHV0KHRh
cmdldE9iamVjdCwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIGNhbGxGcmFtZS0+YXJndW1l
bnQoMiksIHNsb3QpKSkpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9SZWdFeHBPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1JlZ0V4cE9iamVjdC5jcHAJKHJldmlzaW9uIDI3NTk2NSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEz
NCwxOSArMTM0LDI0IEBAIEpTQ19ERUZJTkVfQ1VTVE9NX1NFVFRFUihyZWdFeHBPYmplY3RTZXQK
IGJvb2wgUmVnRXhwT2JqZWN0OjpwdXQoSlNDZWxsKiBjZWxsLCBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBQdXRQ
cm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwor
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBSZWdFeHBPYmpl
Y3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8UmVnRXhwT2JqZWN0Kj4oY2VsbCk7CiAKLSAgICBpZiAo
VU5MSUtFTFkoaXNUaGlzVmFsdWVBbHRlcmVkKHNsb3QsIHRoaXNPYmplY3QpKSkKLSAgICAgICAg
cmV0dXJuIG9yZGluYXJ5U2V0U2xvdyhnbG9iYWxPYmplY3QsIHRoaXNPYmplY3QsIHByb3BlcnR5
TmFtZSwgdmFsdWUsIHNsb3QudGhpc1ZhbHVlKCksIHNsb3QuaXNTdHJpY3RNb2RlKCkpOwotCiAg
ICAgaWYgKHByb3BlcnR5TmFtZSA9PSB2bS5wcm9wZXJ0eU5hbWVzLT5sYXN0SW5kZXgpIHsKKyAg
ICAgICAgaWYgKCF0aGlzT2JqZWN0LT5sYXN0SW5kZXhJc1dyaXRhYmxlKCkpCisgICAgICAgICAg
ICByZXR1cm4gdHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsIHNsb3QuaXNTdHJpY3RNb2Rl
KCksIFJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9yKTsKKworICAgICAgICBpZiAoVU5MSUtFTFko
c2xvdC50aGlzVmFsdWUoKSAhPSB0aGlzT2JqZWN0KSkKKyAgICAgICAgICAgIFJFTEVBU0VfQU5E
X1JFVFVSTihzY29wZSwgSlNPYmplY3Q6OmRlZmluZVByb3BlcnR5T25SZWNlaXZlcihnbG9iYWxP
YmplY3QsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpKTsKKwogICAgICAgICBib29sIHJlc3Vs
dCA9IHRoaXNPYmplY3QtPnNldExhc3RJbmRleChnbG9iYWxPYmplY3QsIHZhbHVlLCBzbG90Lmlz
U3RyaWN0TW9kZSgpKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZmFsc2Up
OwogICAgICAgICBzbG90LnNldEN1c3RvbVZhbHVlKHRoaXNPYmplY3QsIHNsb3QuaXNTdHJpY3RN
b2RlKCkKICAgICAgICAgICAgID8gcmVnRXhwT2JqZWN0U2V0TGFzdEluZGV4U3RyaWN0CiAgICAg
ICAgICAgICA6IHJlZ0V4cE9iamVjdFNldExhc3RJbmRleE5vblN0cmljdCk7CiAgICAgICAgIHJl
dHVybiByZXN1bHQ7CiAgICAgfQotICAgIHJldHVybiBCYXNlOjpwdXQoY2VsbCwgZ2xvYmFsT2Jq
ZWN0LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KTsKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4o
c2NvcGUsIEJhc2U6OnB1dChjZWxsLCBnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgdmFsdWUs
IHNsb3QpKTsKIH0KIAogSlNWYWx1ZSBSZWdFeHBPYmplY3Q6OmV4ZWMoSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgSlNTdHJpbmcqIHN0cmluZykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5oCShyZXZpc2lvbiAyNzU5NjUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBPYmplY3QuaAkod29ya2luZyBjb3B5KQpA
QCAtMzAsNyArMzAsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIGNsYXNzIFJlZ0V4cE9iamVjdCBmaW5h
bCA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKIHB1YmxpYzoKICAgICB1c2luZyBCYXNlID0g
SlNOb25GaW5hbE9iamVjdDsKLSAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVy
ZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNs
b3QgfCBPdmVycmlkZXNHZXRPd25TcGVjaWFsUHJvcGVydHlOYW1lczsKKyAgICBzdGF0aWMgY29u
c3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBP
dmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNHZXRPd25TcGVjaWFsUHJvcGVy
dHlOYW1lcyB8IE92ZXJyaWRlc1B1dDsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBl
LCBTdWJzcGFjZUFjY2VzcyBtb2RlPgogICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VG
b3IoVk0mIHZtKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nT2Jq
ZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJp
bmdPYmplY3QuY3BwCShyZXZpc2lvbiAyNzU5NjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TdHJpbmdPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OCwxMSArNjgsMTAg
QEAgYm9vbCBTdHJpbmdPYmplY3Q6OnB1dChKU0NlbGwqIGNlbGwsIEpTRwogCiAgICAgU3RyaW5n
T2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PFN0cmluZ09iamVjdCo+KGNlbGwpOwogCi0gICAg
aWYgKFVOTElLRUxZKGlzVGhpc1ZhbHVlQWx0ZXJlZChzbG90LCB0aGlzT2JqZWN0KSkpIAotICAg
ICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIG9yZGluYXJ5U2V0U2xvdyhnbG9iYWxPYmpl
Y3QsIHRoaXNPYmplY3QsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QudGhpc1ZhbHVlKCksIHNs
b3QuaXNTdHJpY3RNb2RlKCkpKTsKLQogICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gdm0ucHJvcGVy
dHlOYW1lcy0+bGVuZ3RoKQogICAgICAgICByZXR1cm4gdHlwZUVycm9yKGdsb2JhbE9iamVjdCwg
c2NvcGUsIHNsb3QuaXNTdHJpY3RNb2RlKCksIFJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9yKTsK
KyAgICBpZiAoVU5MSUtFTFkoc2xvdC50aGlzVmFsdWUoKSAhPSB0aGlzT2JqZWN0KSkKKyAgICAg
ICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU09iamVjdDo6cHV0KGNlbGwsIGdsb2JhbE9i
amVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCkpOwogICAgIGlmIChPcHRpb25hbDx1aW50
MzJfdD4gaW5kZXggPSBwYXJzZUluZGV4KHByb3BlcnR5TmFtZSkpIAogICAgICAgICBSRUxFQVNF
X0FORF9SRVRVUk4oc2NvcGUsIHB1dEJ5SW5kZXgoY2VsbCwgZ2xvYmFsT2JqZWN0LCBpbmRleC52
YWx1ZSgpLCB2YWx1ZSwgc2xvdC5pc1N0cmljdE1vZGUoKSkpOwogICAgIFJFTEVBU0VfQU5EX1JF
VFVSTihzY29wZSwgSlNPYmplY3Q6OnB1dChjZWxsLCBnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFt
ZSwgdmFsdWUsIHNsb3QpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0
cmluZ09iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1N0cmluZ09iamVjdC5oCShyZXZpc2lvbiAyNzU5NjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TdHJpbmdPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNyArMjgsNyBA
QCBuYW1lc3BhY2UgSlNDIHsKIGNsYXNzIFN0cmluZ09iamVjdCA6IHB1YmxpYyBKU1dyYXBwZXJP
YmplY3QgewogcHVibGljOgogICAgIHVzaW5nIEJhc2UgPSBKU1dyYXBwZXJPYmplY3Q7Ci0gICAg
c3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVy
ZUZsYWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzR2V0T3duUHJv
cGVydHlOYW1lcyB8IEludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5M
ZW5ndGhJc05vdFplcm87CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVG
bGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90
IHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlOYW1lcyB8IE92ZXJyaWRlc1B1dCB8IEludGVyY2Vw
dHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm87CiAKICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4KICAgICBzdGF0aWMgSXNv
U3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1N0cmluZ1Byb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nUHJvdG90eXBlLmNwcAkocmV2aXNpb24gMjc1OTY1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nUHJvdG90eXBlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTIxLDkgKzEyMSw5IEBAIFN0cmluZ1Byb3RvdHlwZTo6U3RyaW5nUHJv
dG90eXBlKFZNJiB2bSwKIHsKIH0KIAotdm9pZCBTdHJpbmdQcm90b3R5cGU6OmZpbmlzaENyZWF0
aW9uKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNTdHJpbmcqIG5hbWVB
bmRNZXNzYWdlKQordm9pZCBTdHJpbmdQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKIHsKLSAgICBCYXNlOjpmaW5pc2hDcmVhdGlv
bih2bSwgbmFtZUFuZE1lc3NhZ2UpOworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtLCBqc0Vt
cHR5U3RyaW5nKHZtKSk7CiAgICAgQVNTRVJUKGluaGVyaXRzKHZtLCBpbmZvKCkpKTsKIAogICAg
IEpTQ19OQVRJVkVfSU5UUklOU0lDX0ZVTkNUSU9OX1dJVEhPVVRfVFJBTlNJVElPTih2bS5wcm9w
ZXJ0eU5hbWVzLT50b1N0cmluZywgc3RyaW5nUHJvdG9GdW5jVG9TdHJpbmcsIHN0YXRpY19jYXN0
PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pLCAwLCBTdHJpbmdQcm90b3R5
cGVWYWx1ZU9mSW50cmluc2ljKTsKQEAgLTE2NSwxNCArMTY1LDEyIEBAIHZvaWQgU3RyaW5nUHJv
dG90eXBlOjpmaW5pc2hDcmVhdGlvbihWTSYKICAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlv
bih2bSwgdm0ucHJvcGVydHlOYW1lcy0+aXRlcmF0b3JTeW1ib2wsIGl0ZXJhdG9yRnVuY3Rpb24s
IHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pKTsKIAog
ICAgIC8vIFRoZSBjb25zdHJ1Y3RvciB3aWxsIGJlIGFkZGVkIGxhdGVyLCBhZnRlciBTdHJpbmdD
b25zdHJ1Y3RvciBoYXMgYmVlbiBidWlsdAotICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9u
KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgsIGpzTnVtYmVyKDApLCBQcm9wZXJ0eUF0dHJp
YnV0ZTo6RG9udERlbGV0ZSB8IFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IFByb3BlcnR5
QXR0cmlidXRlOjpEb250RW51bSk7CiB9CiAKIFN0cmluZ1Byb3RvdHlwZSogU3RyaW5nUHJvdG90
eXBlOjpjcmVhdGUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSkKIHsKLSAgICBKU1N0cmluZyogZW1wdHkgPSBqc0VtcHR5U3RyaW5nKHZt
KTsKICAgICBTdHJpbmdQcm90b3R5cGUqIHByb3RvdHlwZSA9IG5ldyAoTm90TnVsbCwgYWxsb2Nh
dGVDZWxsPFN0cmluZ1Byb3RvdHlwZT4odm0uaGVhcCkpIFN0cmluZ1Byb3RvdHlwZSh2bSwgc3Ry
dWN0dXJlKTsKLSAgICBwcm90b3R5cGUtPmZpbmlzaENyZWF0aW9uKHZtLCBnbG9iYWxPYmplY3Qs
IGVtcHR5KTsKKyAgICBwcm90b3R5cGUtPmZpbmlzaENyZWF0aW9uKHZtLCBnbG9iYWxPYmplY3Qp
OwogICAgIHJldHVybiBwcm90b3R5cGU7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1N0cmluZ1Byb3RvdHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1N0cmluZ1Byb3RvdHlwZS5oCShyZXZpc2lvbiAyNzU5NjUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdQcm90b3R5cGUuaAkod29ya2luZyBj
b3B5KQpAQCAtNDUsNyArNDUsNyBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAgICAgU3RyaW5nUHJv
dG90eXBlKFZNJiwgU3RydWN0dXJlKik7Ci0gICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIEpT
R2xvYmFsT2JqZWN0KiwgSlNTdHJpbmcqKTsKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwg
SlNHbG9iYWxPYmplY3QqKTsKIH07CiBTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJM
RShTdHJpbmdQcm90b3R5cGUsIFN0cmluZ09iamVjdCk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAkocmV2aXNpb24gMjc1OTY1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTkwLDExICsxOTAsNiBAQCB2b2lkIFN0cnVjdHVyZTo6dmFsaWRhdGVGbGFncygpCiAgICAg
aWYgKG92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXgpCiAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKHR5cGVJbmZvKCkuaW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVu
V2hlbkxlbmd0aElzTm90WmVybygpKTsKIAotICAgIGJvb2wgb3ZlcnJpZGVzUHV0UHJvcGVydHlT
ZWN1cml0eUNoZWNrID0KLSAgICAgICAgbWV0aG9kVGFibGUuZG9QdXRQcm9wZXJ0eVNlY3VyaXR5
Q2hlY2sgIT0gSlNPYmplY3Q6OmRvUHV0UHJvcGVydHlTZWN1cml0eUNoZWNrCi0gICAgICAgICYm
IG1ldGhvZFRhYmxlLmRvUHV0UHJvcGVydHlTZWN1cml0eUNoZWNrICE9IEpTQ2VsbDo6ZG9QdXRQ
cm9wZXJ0eVNlY3VyaXR5Q2hlY2s7Ci0gICAgUkVMRUFTRV9BU1NFUlQob3ZlcnJpZGVzUHV0UHJv
cGVydHlTZWN1cml0eUNoZWNrID09IHR5cGVJbmZvKCkuaGFzUHV0UHJvcGVydHlTZWN1cml0eUNo
ZWNrKCkpOwotCiAgICAgYm9vbCBvdmVycmlkZXNHZXRPd25Qcm9wZXJ0eU5hbWVzID0KICAgICAg
ICAgbWV0aG9kVGFibGUuZ2V0T3duUHJvcGVydHlOYW1lcyAhPSBKU09iamVjdDo6Z2V0T3duUHJv
cGVydHlOYW1lcwogICAgICAgICAmJiBtZXRob2RUYWJsZS5nZXRPd25Qcm9wZXJ0eU5hbWVzICE9
IEpTQ2VsbDo6Z2V0T3duUHJvcGVydHlOYW1lczsKQEAgLTIwOSw2ICsyMDQsMTggQEAgdm9pZCBT
dHJ1Y3R1cmU6OnZhbGlkYXRlRmxhZ3MoKQogICAgICAgICBtZXRob2RUYWJsZS5nZXRQcm90b3R5
cGUgIT0gc3RhdGljX2Nhc3Q8TWV0aG9kVGFibGU6OkdldFByb3RvdHlwZUZ1bmN0aW9uUHRyPihK
U09iamVjdDo6Z2V0UHJvdG90eXBlKQogICAgICAgICAmJiBtZXRob2RUYWJsZS5nZXRQcm90b3R5
cGUgIT0gSlNDZWxsOjpnZXRQcm90b3R5cGU7CiAgICAgUkVMRUFTRV9BU1NFUlQob3ZlcnJpZGVz
R2V0UHJvdG90eXBlID09IHR5cGVJbmZvKCkub3ZlcnJpZGVzR2V0UHJvdG90eXBlKCkpOworCisg
ICAgYm9vbCBvdmVycmlkZXNQdXQgPQorICAgICAgICBtZXRob2RUYWJsZS5wdXQgIT0gSlNPYmpl
Y3Q6OnB1dAorICAgICAgICAmJiBtZXRob2RUYWJsZS5wdXQgIT0gSlNDZWxsOjpwdXQ7CisgICAg
UkVMRUFTRV9BU1NFUlQob3ZlcnJpZGVzUHV0ID09IHR5cGVJbmZvKCkub3ZlcnJpZGVzUHV0KCkp
OworCisgICAgYm9vbCBvdmVycmlkZXNEZWZpbmVPd25Qcm9wZXJ0eSA9CisgICAgICAgIG1ldGhv
ZFRhYmxlLmRlZmluZU93blByb3BlcnR5ICE9IEpTT2JqZWN0OjpkZWZpbmVPd25Qcm9wZXJ0eQor
ICAgICAgICAmJiBtZXRob2RUYWJsZS5kZWZpbmVPd25Qcm9wZXJ0eSAhPSBKU0NlbGw6OmRlZmlu
ZU93blByb3BlcnR5OworCisgICAgaWYgKG92ZXJyaWRlc0RlZmluZU93blByb3BlcnR5KQorICAg
ICAgICBSRUxFQVNFX0FTU0VSVChvdmVycmlkZXNQdXQpOwogfQogI2Vsc2UKIGlubGluZSB2b2lk
IFN0cnVjdHVyZTo6dmFsaWRhdGVGbGFncygpIHsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3Rvb2xzL0pTRG9sbGFyVk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS90b29scy9KU0RvbGxhclZNLmNwcAkocmV2aXNpb24gMjc1OTY1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3Rvb2xzL0pTRG9sbGFyVk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02ODcs
OSArNjg3LDExIEBAIEpTQ19ERUZJTkVfQ1VTVE9NX0dFVFRFUihydW50aW1lQXJyYXlMZW4KICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKHRoaXNPYmplY3QtPmdldExlbmd0aCgp
KSk7CiB9CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgQ29tcGFjdEhhc2hJbmRleCBzdGF0aWNDdXN0
b21BY2Nlc3NvclRhYmxlSW5kZXhbMl0gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IENvbXBhY3RI
YXNoSW5kZXggc3RhdGljQ3VzdG9tQWNjZXNzb3JUYWJsZUluZGV4WzRdID0gewogICAgIHsgMCwg
LTEgfSwKICAgICB7IC0xLCAtMSB9LAorICAgIHsgMSwgLTEgfSwKKyAgICB7IC0xLCAtMSB9LAog
fTsKIAogc3RhdGljIEpTQ19ERUNMQVJFX0NVU1RPTV9HRVRURVIodGVzdFN0YXRpY0FjY2Vzc29y
R2V0dGVyKTsKQEAgLTcxMiwxOSArNzE0LDIzIEBAIEpTQ19ERUZJTkVfQ1VTVE9NX1NFVFRFUih0
ZXN0U3RhdGljQWNjZXMKIHsKICAgICBEb2xsYXJWTUFzc2VydFNjb3BlIGFzc2VydFNjb3BlOwog
ICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICAKLSAgICBKU09iamVjdCogdGhpc09iamVjdCA9
IGpzRHluYW1pY0Nhc3Q8SlNPYmplY3QqPih2bSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkp
OworICAgIEpTVmFsdWUgcmVjZWl2ZXIgPSBKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKTsKKyAg
ICBKU09iamVjdCogdGhpc09iamVjdCA9IHJlY2VpdmVyLmlzT2JqZWN0KCkgPyBhc09iamVjdChy
ZWNlaXZlcikgOiByZWNlaXZlci5zeW50aGVzaXplUHJvdG90eXBlKGdsb2JhbE9iamVjdCk7Cisg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CiAgICAgUkVMRUFTRV9B
U1NFUlQodGhpc09iamVjdCk7CiAKICAgICByZXR1cm4gdGhpc09iamVjdC0+cHV0RGlyZWN0KHZt
LCBQcm9wZXJ0eU5hbWUoSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInRlc3RGaWVsZCIpKSwg
SlNWYWx1ZTo6ZGVjb2RlKHZhbHVlKSk7CiB9CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgSGFzaFRh
YmxlVmFsdWUgc3RhdGljQ3VzdG9tQWNjZXNzb3JUYWJsZVZhbHVlc1sxXSA9IHsKK3N0YXRpYyBj
b25zdCBzdHJ1Y3QgSGFzaFRhYmxlVmFsdWUgc3RhdGljQ3VzdG9tQWNjZXNzb3JUYWJsZVZhbHVl
c1syXSA9IHsKICAgICB7ICJ0ZXN0U3RhdGljQWNjZXNzb3IiLCBzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkN1c3RvbUFjY2Vzc29yKSwgTm9JbnRyaW5zaWMsIHsgKGlu
dHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPih0ZXN0U3RhdGlj
QWNjZXNzb3JHZXR0ZXIpLCAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHV0UHJvcGVydHlTbG90OjpQ
dXRWYWx1ZUZ1bmM+KHRlc3RTdGF0aWNBY2Nlc3NvclB1dHRlcikgfSB9LAorICAgIHsgInRlc3RT
dGF0aWNBY2Nlc3NvclJlYWRPbmx5IiwgUHJvcGVydHlBdHRyaWJ1dGU6OkN1c3RvbUFjY2Vzc29y
IHwgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5LCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qp
c3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KHRlc3RTdGF0aWNBY2Nlc3Nv
ckdldHRlciksIChpbnRwdHJfdClzdGF0aWNfY2FzdDxQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVl
RnVuYz4oMCkgfSB9LAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBIYXNoVGFibGUgc3RhdGlj
Q3VzdG9tQWNjZXNzb3JUYWJsZSA9Ci0gICAgeyAxLCAxLCB0cnVlLCBudWxscHRyLCBzdGF0aWND
dXN0b21BY2Nlc3NvclRhYmxlVmFsdWVzLCBzdGF0aWNDdXN0b21BY2Nlc3NvclRhYmxlSW5kZXgg
fTsKKyAgICB7IDIsIDMsIHRydWUsIG51bGxwdHIsIHN0YXRpY0N1c3RvbUFjY2Vzc29yVGFibGVW
YWx1ZXMsIHN0YXRpY0N1c3RvbUFjY2Vzc29yVGFibGVJbmRleCB9OwogCiBjbGFzcyBTdGF0aWND
dXN0b21BY2Nlc3NvciA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKICAgICB1c2luZyBCYXNl
ID0gSlNOb25GaW5hbE9iamVjdDsKQEAgLTc4OSwxNyArNzk1LDI1IEBAIEpTQ19ERUZJTkVfQ1VT
VE9NX1NFVFRFUih0ZXN0U3RhdGljVmFsdWUKICAgICByZXR1cm4gdGhpc09iamVjdC0+cHV0RGly
ZWN0KHZtLCBQcm9wZXJ0eU5hbWUoSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInRlc3RTdGF0
aWNWYWx1ZSIpKSwgSlNWYWx1ZTo6ZGVjb2RlKHZhbHVlKSk7CiB9CiAKLXN0YXRpYyBjb25zdCBz
dHJ1Y3QgQ29tcGFjdEhhc2hJbmRleCBzdGF0aWNDdXN0b21WYWx1ZVRhYmxlSW5kZXhbMl0gPSB7
CitzdGF0aWMgY29uc3Qgc3RydWN0IENvbXBhY3RIYXNoSW5kZXggc3RhdGljQ3VzdG9tVmFsdWVU
YWJsZUluZGV4WzhdID0geworICAgIHsgMSwgLTEgfSwKKyAgICB7IC0xLCAtMSB9LAorICAgIHsg
LTEsIC0xIH0sCisgICAgeyAtMSwgLTEgfSwKKyAgICB7IC0xLCAtMSB9LAorICAgIHsgMiwgLTEg
fSwKICAgICB7IDAsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKIH07CiAKLXN0YXRpYyBjb25zdCBz
dHJ1Y3QgSGFzaFRhYmxlVmFsdWUgc3RhdGljQ3VzdG9tVmFsdWVUYWJsZVZhbHVlc1sxXSA9IHsK
LSAgICB7ICJ0ZXN0U3RhdGljVmFsdWUiLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlB
dHRyaWJ1dGU6OkN1c3RvbUFjY2Vzc29yKSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRp
Y19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPih0ZXN0U3RhdGljVmFsdWVHZXR0ZXIp
LCAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmM+KHRl
c3RTdGF0aWNWYWx1ZVB1dHRlcikgfSB9LAorc3RhdGljIGNvbnN0IHN0cnVjdCBIYXNoVGFibGVW
YWx1ZSBzdGF0aWNDdXN0b21WYWx1ZVRhYmxlVmFsdWVzWzNdID0geworICAgIHsgInRlc3RTdGF0
aWNWYWx1ZSIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6Tm9uZSks
IE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZh
bHVlRnVuYz4odGVzdFN0YXRpY1ZhbHVlR2V0dGVyKSwgKGludHB0cl90KXN0YXRpY19jYXN0PFB1
dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jPih0ZXN0U3RhdGljVmFsdWVQdXR0ZXIpIH0gfSwK
KyAgICB7ICJ0ZXN0U3RhdGljVmFsdWVOb1NldHRlciIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQ
cm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3Rh
dGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KHRlc3RTdGF0aWNWYWx1ZUdldHRl
ciksIChpbnRwdHJfdClzdGF0aWNfY2FzdDxQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYz4o
MCkgfSB9LAorICAgIHsgInRlc3RTdGF0aWNWYWx1ZVJlYWRPbmx5Iiwgc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSksIE5vSW50cmluc2ljLCB7IChpbnRw
dHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4odGVzdFN0YXRpY1Zh
bHVlR2V0dGVyKSwgKGludHB0cl90KXN0YXRpY19jYXN0PFB1dFByb3BlcnR5U2xvdDo6UHV0VmFs
dWVGdW5jPigwKSB9IH0sCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IEhhc2hUYWJsZSBzdGF0
aWNDdXN0b21WYWx1ZVRhYmxlID0KLSAgICB7IDEsIDEsIHRydWUsIG51bGxwdHIsIHN0YXRpY0N1
c3RvbVZhbHVlVGFibGVWYWx1ZXMsIHN0YXRpY0N1c3RvbVZhbHVlVGFibGVJbmRleCB9OworICAg
IHsgMywgNywgdHJ1ZSwgbnVsbHB0ciwgc3RhdGljQ3VzdG9tVmFsdWVUYWJsZVZhbHVlcywgc3Rh
dGljQ3VzdG9tVmFsdWVUYWJsZUluZGV4IH07CiAKIGNsYXNzIFN0YXRpY0N1c3RvbVZhbHVlIDog
cHVibGljIEpTTm9uRmluYWxPYmplY3QgewogICAgIHVzaW5nIEJhc2UgPSBKU05vbkZpbmFsT2Jq
ZWN0OwpAQCAtODM3LDYgKzg1MSw3IEBAIHB1YmxpYzoKIAogY2xhc3MgT2JqZWN0RG9pbmdTaWRl
RWZmZWN0UHV0V2l0aG91dENvcnJlY3RTbG90U3RhdHVzIDogcHVibGljIEpTTm9uRmluYWxPYmpl
Y3QgewogICAgIHVzaW5nIEJhc2UgPSBKU05vbkZpbmFsT2JqZWN0OworICAgIHN0YXRpYyBjb25z
dGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IE92
ZXJyaWRlc1B1dDsKIHB1YmxpYzoKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vi
c3BhY2VBY2Nlc3M+CiAgICAgc3RhdGljIENvbXBsZXRlU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZN
JiB2bSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI3NTk2NSkKKysrIFNvdXJjZS9XZWJDb3Jl
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ2IEBACisyMDIxLTA0LTE0ICBB
bGV4ZXkgU2h2YXlrYSAgPHNodmFpa2FsZXNoQGdtYWlsLmNvbT4KKworICAgICAgICBbSlNDXSBP
cmRpbmFyeVNldCBzaG91bGQgaW52b2tlIGN1c3RvbSBbW1NldF1dIG1ldGhvZHMKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNzkxNgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEZpeGVzOgorICAgICAgICAg
IDEuIExlZ2FjeSBwbGF0Zm9ybSBvYmplY3QncyBbW1NldF1dIG5vdyBndWFyZHMgYWdhaW5zdCBh
bHRlcmVkIHJlY2VpdmVyIFsxXS4KKyAgICAgICAgICAgICAoYWxpZ25zIHdpdGggQmxpbmspLgor
ICAgICAgICAgIDIuIERpcmVjdCBbW1NldF1dIHRvIHdpbmRvdy4lSW50ZXJmYWNlJSBjb25zdHJ1
Y3RvciBub3cgcHJlc2VydmVzIERvbnRFbnVtIGF0dHJpYnV0ZSBbMl0uCisgICAgICAgICAgICAg
KGFsaWducyB3aXRoIEJsaW5rIGFuZCBHZWNrbykuCisgICAgICAgICAgMy4gQ3Jvc3Mtb3JpZ2lu
IG5vbi1pbmRleCBwdXQoKSBub3cgdGhyb3dzIFNlY3VyaXR5RXJyb3IgaW5zdGVhZCBvZiBzaWxl
bnRseSBmYWlsaW5nIFszXS4KKyAgICAgICAgICAgICAoYWxpZ25zIHdpdGggQmxpbmsgYW5kIEdl
Y2tvKS4KKworICAgICAgICBSZWZhY3RvcnM6CisgICAgICAgICAgMS4gU2ltcGxpZmllcyBjcm9z
cy1vcmlnaW4gSlNET01XaW5kb3c6OnB1dCgpLCBhbGlnbmluZyBpdCB3aXRoIEpTTG9jYXRpb246
OnB1dCgpLgorICAgICAgICAgIDIuIFJlcGxhY2VzIGxvb2t1cFB1dCgpIHdpdGggZGlyZWN0IHNl
dHRlciBjYWxsIGluIEpTUmVtb3RlRE9NV2luZG93OjpwdXQoKS4KKyAgICAgICAgICAzLiBSZW1v
dmVzIG5vdyB1bnVzZWQgZG9QdXRQcm9wZXJ0eVNlY3VyaXR5Q2hlY2soKSBtZXRob2RzLgorCisg
ICAgICAgIFRlc3RzOiBqcy9kb20vc2NyaXB0LXRlc3RzL3JlZmxlY3Qtc2V0LW9udG8tZG9tLmpz
CisgICAgICAgICAgICAgICBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL1dlYklETC9l
Y21hc2NyaXB0LWJpbmRpbmcvaW50ZXJmYWNlLW9iamVjdC1zZXQtcmVjZWl2ZXIuaHRtbAorICAg
ICAgICAgICAgICAgaHR0cC90ZXN0cy9zZWN1cml0eS9jcm9zcy1mcmFtZS1hY2Nlc3Mtb2JqZWN0
LWdldFByb3RvdHlwZU9mLWluLXB1dC5odG1sCisKKyAgICAgICAgWzFdIGh0dHBzOi8vaGV5Y2Ft
LmdpdGh1Yi5pby93ZWJpZGwvI2xlZ2FjeS1wbGF0Zm9ybS1vYmplY3Qtc2V0IChzdGVwIDEpCisg
ICAgICAgIFsyXSBodHRwczovL2hleWNhbS5naXRodWIuaW8vd2ViaWRsLyNkZWZpbmUtdGhlLWds
b2JhbC1wcm9wZXJ0eS1yZWZlcmVuY2VzIChzdGVwIDMuMS4zKQorICAgICAgICBbM10gaHR0cHM6
Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvYnJvd3NlcnMuaHRtbCNjcm9zc29yaWdp
bnNldC0oLW8sLXAsLXYsLXJlY2VpdmVyLSkgKHN0ZXAgNCkKKworICAgICAgICAqIGJpbmRpbmdz
L2pzL0pTRE9NV2luZG93Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NV2luZG93
OjpwdXQpOgorICAgICAgICAoV2ViQ29yZTo6SlNET01XaW5kb3c6OmRvUHV0UHJvcGVydHlTZWN1
cml0eUNoZWNrKTogRGVsZXRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0xvY2F0aW9uQ3Vz
dG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTTG9jYXRpb246OmRvUHV0UHJvcGVydHlTZWN1
cml0eUNoZWNrKTogRGVsZXRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1JlbW90ZURPTVdp
bmRvd0N1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1JlbW90ZURPTVdpbmRvdzo6cHV0
KToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbToKKyAgICAg
ICAgKEdlbmVyYXRlUHV0KToKKyAgICAgICAgKEdlbmVyYXRlSGVhZGVyKToKKyAgICAgICAgKiBi
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvKjogVXBkYXRlZC4KKyAgICAgICAgKiBicmlkZ2Uvb2Jq
Yy9vYmpjX3J1bnRpbWUuaDoKKyAgICAgICAgKiBicmlkZ2UvcnVudGltZV9hcnJheS5oOgorICAg
ICAgICAqIGJyaWRnZS9ydW50aW1lX29iamVjdC5oOgorCiAyMDIxLTA0LTE0ICBEZXZpbiBSb3Vz
c28gIDxkcm91c3NvQGFwcGxlLmNvbT4KIAogICAgICAgICBbaU9TXSBsaW1pdCBob3cgb2Z0ZW4g
YFdlYkFWUGxheWVyQ29udHJvbGxlcmAgbm90aWZpZXMgdGhlIGBQbGF5YmFja1Nlc3Npb25Nb2Rl
bGAgYWJvdXQgY2hhbmdlcyB0byBwbGF5YmFjayBzcGVlZApJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmNwcAkocmV2aXNpb24gMjc1OTY1
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yNDgsMjMgKzI0OCw2IEBAIGJvb2wgSlNET01XaW5kb3c6OmdldE93
blByb3BlcnR5U2xvdEJ5SW4KICAgICByZXR1cm4gQmFzZTo6Z2V0T3duUHJvcGVydHlTbG90QnlJ
bmRleCh0aGlzT2JqZWN0LCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBpbmRleCwgc2xvdCk7CiB9CiAK
LXZvaWQgSlNET01XaW5kb3c6OmRvUHV0UHJvcGVydHlTZWN1cml0eUNoZWNrKEpTT2JqZWN0KiBj
ZWxsLCBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIHBy
b3BlcnR5TmFtZSwgUHV0UHJvcGVydHlTbG90JikKLXsKLSAgICBWTSYgdm0gPSBsZXhpY2FsR2xv
YmFsT2JqZWN0LT52bSgpOwotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKLQotICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNET01XaW5kb3cqPihjZWxsKTsK
LQotICAgIFN0cmluZyBlcnJvck1lc3NhZ2U7Ci0gICAgaWYgKCFCaW5kaW5nU2VjdXJpdHk6OnNo
b3VsZEFsbG93QWNjZXNzVG9ET01XaW5kb3coKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNPYmpl
Y3QtPndyYXBwZWQoKSwgZXJyb3JNZXNzYWdlKSkgewotICAgICAgICAvLyBXZSBvbmx5IGFsbG93
IHNldHRpbmcgImxvY2F0aW9uIiBhdHRyaWJ1dGUgY3Jvc3Mtb3JpZ2luLgotICAgICAgICBpZiAo
cHJvcGVydHlOYW1lID09IHN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0
YSktPmJ1aWx0aW5OYW1lcygpLmxvY2F0aW9uUHVibGljTmFtZSgpKQotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICB0aHJvd1NlY3VyaXR5RXJyb3IoKmxleGljYWxHbG9iYWxPYmplY3QsIHNj
b3BlLCBlcnJvck1lc3NhZ2UpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotfQotCiBib29sIEpT
RE9NV2luZG93OjpwdXQoSlNDZWxsKiBjZWxsLCBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2Jh
bE9iamVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgUHV0UHJv
cGVydHlTbG90JiBzbG90KQogewogICAgIFZNJiB2bSA9IGxleGljYWxHbG9iYWxPYmplY3QtPnZt
KCk7CkBAIC0yNzIsMTcgKzI1NSwxMCBAQCBib29sIEpTRE9NV2luZG93OjpwdXQoSlNDZWxsKiBj
ZWxsLCBKU0dsCiAKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTRE9NV2luZG93Kj4o
Y2VsbCk7CiAKLSAgICBTdHJpbmcgZXJyb3JNZXNzYWdlOwotICAgIGlmICghQmluZGluZ1NlY3Vy
aXR5OjpzaG91bGRBbGxvd0FjY2Vzc1RvRE9NV2luZG93KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0
aGlzT2JqZWN0LT53cmFwcGVkKCksIGVycm9yTWVzc2FnZSkpIHsKKyAgICBpZiAocHJvcGVydHlO
YW1lICE9IHN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSktPmJ1aWx0
aW5OYW1lcygpLmxvY2F0aW9uUHVibGljTmFtZSgpKSB7CiAgICAgICAgIC8vIFdlIG9ubHkgYWxs
b3cgc2V0dGluZyAibG9jYXRpb24iIGF0dHJpYnV0ZSBjcm9zcy1vcmlnaW4uCi0gICAgICAgIGlm
IChwcm9wZXJ0eU5hbWUgPT0gc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnRE
YXRhKS0+YnVpbHRpbk5hbWVzKCkubG9jYXRpb25QdWJsaWNOYW1lKCkpIHsKLSAgICAgICAgICAg
IGJvb2wgcHV0UmVzdWx0ID0gZmFsc2U7Ci0gICAgICAgICAgICBpZiAobG9va3VwUHV0KGxleGlj
YWxHbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgdGhpc09iamVjdCwgdmFsdWUsICpzX2luZm8u
c3RhdGljUHJvcEhhc2hUYWJsZSwgc2xvdCwgcHV0UmVzdWx0KSkKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gcHV0UmVzdWx0OworICAgICAgICBpZiAoIUJpbmRpbmdTZWN1cml0eTo6c2hvdWxkQWxs
b3dBY2Nlc3NUb0RPTVdpbmRvdyhsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzT2JqZWN0LT53cmFw
cGVkKCksIFRocm93U2VjdXJpdHlFcnJvcikpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgIH0KLSAgICAgICAgdGhyb3dTZWN1cml0eUVycm9yKCpsZXhpY2FsR2xvYmFsT2JqZWN0
LCBzY29wZSwgZXJyb3JNZXNzYWdlKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAog
ICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgQmFzZTo6cHV0KHRoaXNPYmplY3QsIGxleGlj
YWxHbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTG9jYXRpb25DdXN0b20uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTG9jYXRpb25DdXN0b20uY3BwCShyZXZpc2lv
biAyNzU5NjUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0xvY2F0aW9uQ3VzdG9t
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA4LDIzICsxMDgsNiBAQCBib29sIEpTTG9jYXRpb246
OmdldE93blByb3BlcnR5U2xvdEJ5SW5kCiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBK
U09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChvYmplY3QsIGxleGljYWxHbG9iYWxP
YmplY3QsIGluZGV4LCBzbG90KSk7CiB9CiAKLXZvaWQgSlNMb2NhdGlvbjo6ZG9QdXRQcm9wZXJ0
eVNlY3VyaXR5Q2hlY2soSlNPYmplY3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGxleGljYWxH
bG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFB1dFByb3BlcnR5U2xvdCYp
Ci17Ci0gICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0xvY2F0aW9uKj4ob2JqZWN0KTsK
LSAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7Ci0KLSAg
ICBWTSYgdm0gPSBsZXhpY2FsR2xvYmFsT2JqZWN0LT52bSgpOwotCi0gICAgLy8gQWx3YXlzIGFs
bG93IGFzc2lnbmluZyB0byB0aGUgd2hvbGUgbG9jYXRpb24uCi0gICAgLy8gSG93ZXZlciwgYWxs
bG93aW5nIGFzc2lnbmluZyBvZiBwaWVjZXMgbWlnaHQgaW5hZHZlcnRlbnRseSBkaXNjbG9zZSBw
YXJ0cyBvZiB0aGUgb3JpZ2luYWwgbG9jYXRpb24uCi0gICAgLy8gU28gZmFsbCB0aHJvdWdoIHRv
IHRoZSBhY2Nlc3MgY2hlY2sgZm9yIHRob3NlLgotICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gc3Rh
dGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKS0+YnVpbHRpbk5hbWVzKCku
aHJlZlB1YmxpY05hbWUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gQmxvY2sgYWNjZXNz
IGFuZCB0aHJvdyBpZiB0aGVyZSBpcyBhIHNlY3VyaXR5IGVycm9yLgotICAgIEJpbmRpbmdTZWN1
cml0eTo6c2hvdWxkQWxsb3dBY2Nlc3NUb0RPTVdpbmRvdyhsZXhpY2FsR2xvYmFsT2JqZWN0LCB0
aGlzT2JqZWN0LT53cmFwcGVkKCkud2luZG93KCksIFRocm93U2VjdXJpdHlFcnJvcik7Ci19Ci0K
IGJvb2wgSlNMb2NhdGlvbjo6cHV0KEpTQ2VsbCogY2VsbCwgSlNHbG9iYWxPYmplY3QqIGxleGlj
YWxHbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUs
IFB1dFByb3BlcnR5U2xvdCYgcHV0UHJvcGVydHlTbG90KQogewogICAgIFZNJiB2bSA9IGxleGlj
YWxHbG9iYWxPYmplY3QtPnZtKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U1JlbW90ZURPTVdpbmRvd0N1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNSZW1vdGVET01XaW5kb3dDdXN0b20uY3BwCShyZXZpc2lvbiAyNzU5NjUp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1JlbW90ZURPTVdpbmRvd0N1c3RvbS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTY4LDExICs2OCwxMiBAQCBib29sIEpTUmVtb3RlRE9NV2lu
ZG93OjpwdXQoSlNDZWxsKiBjZWxsCiAKICAgICAvLyBXZSBvbmx5IGFsbG93IHNldHRpbmcgImxv
Y2F0aW9uIiBhdHRyaWJ1dGUgY3Jvc3Mtb3JpZ2luLgogICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0g
c3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKS0+YnVpbHRpbk5hbWVz
KCkubG9jYXRpb25QdWJsaWNOYW1lKCkpIHsKLSAgICAgICAgYm9vbCBwdXRSZXN1bHQgPSBmYWxz
ZTsKLSAgICAgICAgaWYgKGxvb2t1cFB1dChsZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5h
bWUsIHRoaXNPYmplY3QsIHZhbHVlLCAqc19pbmZvLnN0YXRpY1Byb3BIYXNoVGFibGUsIHNsb3Qs
IHB1dFJlc3VsdCkpCi0gICAgICAgICAgICByZXR1cm4gcHV0UmVzdWx0OwotICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIGF1dG8qIHNldHRlciA9IHNfaW5mby5zdGF0aWNQcm9wSGFzaFRh
YmxlLT5lbnRyeShwcm9wZXJ0eU5hbWUpLT5wcm9wZXJ0eVB1dHRlcigpOworICAgICAgICBzZXR0
ZXIobGV4aWNhbEdsb2JhbE9iamVjdCwgSlNWYWx1ZTo6ZW5jb2RlKHNsb3QudGhpc1ZhbHVlKCkp
LCBKU1ZhbHVlOjplbmNvZGUodmFsdWUpLCBwcm9wZXJ0eU5hbWUpOworICAgICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCBmYWxzZSk7CisgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0K
KwogICAgIHRocm93U2VjdXJpdHlFcnJvcigqbGV4aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUsIGVy
cm9yTWVzc2FnZSk7CiAgICAgcmV0dXJuIGZhbHNlOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0JKHJldmlzaW9uIDI3
NTk2NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpT
LnBtCSh3b3JraW5nIGNvcHkpCkBAIC0xMTgxLDYgKzExODEsOCBAQCBzdWIgR2VuZXJhdGVQdXQK
ICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICJ7XG4iKTsKICAgICBwdXNoKEAkb3V0cHV0QXJyYXks
ICIgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDwke2NsYXNzTmFtZX0qPihjZWxsKTtcbiIp
OwogICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRT
KHRoaXNPYmplY3QsIGluZm8oKSk7XG5cbiIpOworICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAg
ICBpZiAoVU5MSUtFTFkodGhpc09iamVjdCAhPSBwdXRQcm9wZXJ0eVNsb3QudGhpc1ZhbHVlKCkp
KVxuIik7CisgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgICAgICByZXR1cm4gSlNPYmplY3Q6
OnB1dCh0aGlzT2JqZWN0LCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHZhbHVl
LCBwdXRQcm9wZXJ0eVNsb3QpO1xuIik7CiAKICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAg
YXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShsZXhpY2FsR2xvYmFsT2JqZWN0
LT52bSgpKTtcblxuIik7CiAKQEAgLTI5NTQsMTEgKzI5NTYsNiBAQCBzdWIgR2VuZXJhdGVIZWFk
ZXIKICAgICAgICAgJHN0cnVjdHVyZUZsYWdzeyJKU0M6OkludGVyY2VwdHNHZXRPd25Qcm9wZXJ0
eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8ifSA9IDE7CiAgICAgfQogCi0gICAg
aWYgKCRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+e0NoZWNrU2VjdXJpdHl9KSB7Ci0g
ICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgc3RhdGljIHZvaWQgZG9QdXRQcm9wZXJ0
eVNlY3VyaXR5Q2hlY2soSlNDOjpKU09iamVjdCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6
OlByb3BlcnR5TmFtZSwgSlNDOjpQdXRQcm9wZXJ0eVNsb3QmKTtcbiIpOwotICAgICAgICAkc3Ry
dWN0dXJlRmxhZ3N7IkpTQzo6SGFzUHV0UHJvcGVydHlTZWN1cml0eUNoZWNrIn0gPSAxOwotICAg
IH0KLQogICAgIGlmICgkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntQbHVnaW59IHx8
IEdldE5hbWVkU2V0dGVyT3BlcmF0aW9uKCRpbnRlcmZhY2UpKSB7CiAgICAgICAgICRzdHJ1Y3R1
cmVGbGFnc3siSlNDOjpQcm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmcifSA9IDE7CiAgICAgfQpAQCAt
Mjk3MSw2ICsyOTY4LDcgQEAgc3ViIEdlbmVyYXRlSGVhZGVyCiAgICAgaWYgKEluc3RhbmNlT3Zl
cnJpZGVzUHV0KCRpbnRlcmZhY2UpKSB7CiAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIg
ICAgc3RhdGljIGJvb2wgcHV0KEpTQzo6SlNDZWxsKiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpT
Qzo6UHJvcGVydHlOYW1lLCBKU0M6OkpTVmFsdWUsIEpTQzo6UHV0UHJvcGVydHlTbG90Jik7XG4i
KTsKICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBzdGF0aWMgYm9vbCBwdXRCeUlu
ZGV4KEpTQzo6SlNDZWxsKiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIHVuc2lnbmVkIHByb3BlcnR5
TmFtZSwgSlNDOjpKU1ZhbHVlLCBib29sIHNob3VsZFRocm93KTtcbiIpOworICAgICAgICAkc3Ry
dWN0dXJlRmxhZ3N7IkpTQzo6T3ZlcnJpZGVzUHV0In0gPSAxOwogICAgIH0KICAgICAKICAgICBp
ZiAoSW5zdGFuY2VPdmVycmlkZXNEZWZpbmVPd25Qcm9wZXJ0eSgkaW50ZXJmYWNlKSkgewpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdERvbWFpblNl
Y3VyaXR5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdERvbWFpblNlY3VyaXR5LmgJKHJldmlzaW9uIDI3NTk2NSkKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3REb21haW5TZWN1cml0eS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zOSw3ICszOSw2IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgSlND
OjpKU09iamVjdCogY3JlYXRlUHJvdG90eXBlKEpTQzo6Vk0mLCBKU0RPTUdsb2JhbE9iamVjdCYp
OwogICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBwcm90b3R5cGUoSlNDOjpWTSYsIEpTRE9NR2xv
YmFsT2JqZWN0Jik7CiAgICAgc3RhdGljIFRlc3REb21haW5TZWN1cml0eSogdG9XcmFwcGVkKEpT
Qzo6Vk0mLCBKU0M6OkpTVmFsdWUpOwotICAgIHN0YXRpYyB2b2lkIGRvUHV0UHJvcGVydHlTZWN1
cml0eUNoZWNrKEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpQcm9w
ZXJ0eU5hbWUsIEpTQzo6UHV0UHJvcGVydHlTbG90Jik7CiAgICAgc3RhdGljIHZvaWQgZGVzdHJv
eShKU0M6OkpTQ2VsbCopOwogCiAgICAgREVDTEFSRV9JTkZPOwpAQCAtNTksNyArNTgsNyBAQCBw
dWJsaWM6CiAgICAgc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6
OlZNJiB2bSk7CiAgICAgc3RhdGljIHZvaWQgYW5hbHl6ZUhlYXAoSlNDZWxsKiwgSlNDOjpIZWFw
QW5hbHl6ZXImKTsKIHB1YmxpYzoKLSAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVj
dHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBKU0M6Okhhc1B1dFByb3BlcnR5U2Vj
dXJpdHlDaGVjayB8IEpTQzo6SGFzU3RhdGljUHJvcGVydHlUYWJsZTsKKyAgICBzdGF0aWMgY29u
c3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBK
U0M6Okhhc1N0YXRpY1Byb3BlcnR5VGFibGU7CiBwcm90ZWN0ZWQ6CiAgICAgSlNUZXN0RG9tYWlu
U2VjdXJpdHkoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCYsIFJlZjxUZXN0RG9t
YWluU2VjdXJpdHk+JiYpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0SW5kZXhlZFNldHRlck5vSWRlbnRpZmllci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEluZGV4ZWRT
ZXR0ZXJOb0lkZW50aWZpZXIuY3BwCShyZXZpc2lvbiAyNzU5NjUpCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW5kZXhlZFNldHRlck5vSWRlbnRpZmll
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5OSw2ICsxOTksOCBAQCBib29sIEpTVGVzdEluZGV4
ZWRTZXR0ZXJOb0lkZW50aWZpZXI6OnB1CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxK
U1Rlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09C
SkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwogCisgICAgaWYgKFVOTElLRUxZKHRo
aXNPYmplY3QgIT0gcHV0UHJvcGVydHlTbG90LnRoaXNWYWx1ZSgpKSkKKyAgICAgICAgcmV0dXJu
IEpTT2JqZWN0OjpwdXQodGhpc09iamVjdCwgbGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlO
YW1lLCB2YWx1ZSwgcHV0UHJvcGVydHlTbG90KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKGxleGljYWxHbG9iYWxPYmplY3QtPnZtKCkpOwogCiAgICAgaWYgKGF1
dG8gaW5kZXggPSBwYXJzZUluZGV4KHByb3BlcnR5TmFtZSkpIHsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlm
aWVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIuaAkocmV2aXNpb24gMjc1OTY1KQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEluZGV4ZWRT
ZXR0ZXJOb0lkZW50aWZpZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNjQsNyArNjQsNyBAQCBwdWJs
aWM6CiAgICAgc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6OlZN
JiB2bSk7CiAgICAgc3RhdGljIHZvaWQgYW5hbHl6ZUhlYXAoSlNDZWxsKiwgSlNDOjpIZWFwQW5h
bHl6ZXImKTsKIHB1YmxpYzoKLSAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVy
ZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBKU0M6OkludGVyY2VwdHNHZXRPd25Qcm9w
ZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8gfCBKU0M6Ok92ZXJyaWRlc0dl
dE93blByb3BlcnR5TmFtZXMgfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdDsKKyAg
ICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0
dXJlRmxhZ3MgfCBKU0M6OkludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldo
ZW5MZW5ndGhJc05vdFplcm8gfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5TmFtZXMgfCBK
U0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEpTQzo6T3ZlcnJpZGVzUHV0OwogcHJv
dGVjdGVkOgogICAgIEpTVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIoSlNDOjpTdHJ1Y3R1
cmUqLCBKU0RPTUdsb2JhbE9iamVjdCYsIFJlZjxUZXN0SW5kZXhlZFNldHRlck5vSWRlbnRpZmll
cj4mJik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbmRleGVkU2V0dGVy
VGhyb3dpbmdFeGNlcHRpb24uY3BwCShyZXZpc2lvbiAyNzU5NjUpCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhj
ZXB0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk5LDYgKzE5OSw4IEBAIGJvb2wgSlNUZXN0
SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW8KICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganND
YXN0PEpTVGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbio+KGNlbGwpOwogICAgIEFT
U0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKIAorICAgIGlmIChV
TkxJS0VMWSh0aGlzT2JqZWN0ICE9IHB1dFByb3BlcnR5U2xvdC50aGlzVmFsdWUoKSkpCisgICAg
ICAgIHJldHVybiBKU09iamVjdDo6cHV0KHRoaXNPYmplY3QsIGxleGljYWxHbG9iYWxPYmplY3Qs
IHByb3BlcnR5TmFtZSwgdmFsdWUsIHB1dFByb3BlcnR5U2xvdCk7CiAgICAgYXV0byB0aHJvd1Nj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRShsZXhpY2FsR2xvYmFsT2JqZWN0LT52bSgpKTsKIAog
ICAgIGlmIChhdXRvIGluZGV4ID0gcGFyc2VJbmRleChwcm9wZXJ0eU5hbWUpKSB7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW5kZXhlZFNldHRl
clRocm93aW5nRXhjZXB0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5o
CShyZXZpc2lvbiAyNzU5NjUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTY0LDcgKzY0LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNl
KiBzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pOwogICAgIHN0YXRpYyB2b2lkIGFuYWx5emVI
ZWFwKEpTQ2VsbCosIEpTQzo6SGVhcEFuYWx5emVyJik7CiBwdWJsaWM6Ci0gICAgc3RhdGljIGNv
bnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwg
SlNDOjpJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNO
b3RaZXJvIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eU5hbWVzIHwgSlNDOjpPdmVycmlk
ZXNHZXRPd25Qcm9wZXJ0eVNsb3Q7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1
Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSlNDOjpJbnRlcmNlcHRzR2V0T3du
UHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgSlNDOjpPdmVycmlk
ZXNHZXRPd25Qcm9wZXJ0eU5hbWVzIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3Qg
fCBKU0M6Ok92ZXJyaWRlc1B1dDsKIHByb3RlY3RlZDoKICAgICBKU1Rlc3RJbmRleGVkU2V0dGVy
VGhyb3dpbmdFeGNlcHRpb24oSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCYsIFJl
ZjxUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uPiYmKTsKIApJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEluZGV4ZWRTZXR0ZXJXaXRo
SWRlbnRpZmllci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5jcHAJKHJldmlz
aW9uIDI3NTk2NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
MDgsNiArMjA4LDggQEAgYm9vbCBKU1Rlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXI6Ogog
ICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVu
dGlmaWVyKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0
LCBpbmZvKCkpOwogCisgICAgaWYgKFVOTElLRUxZKHRoaXNPYmplY3QgIT0gcHV0UHJvcGVydHlT
bG90LnRoaXNWYWx1ZSgpKSkKKyAgICAgICAgcmV0dXJuIEpTT2JqZWN0OjpwdXQodGhpc09iamVj
dCwgbGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgcHV0UHJvcGVydHlT
bG90KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKGxleGljYWxH
bG9iYWxPYmplY3QtPnZtKCkpOwogCiAgICAgaWYgKGF1dG8gaW5kZXggPSBwYXJzZUluZGV4KHBy
b3BlcnR5TmFtZSkpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW5kZXhlZFNldHRl
cldpdGhJZGVudGlmaWVyLmgJKHJldmlzaW9uIDI3NTk2NSkKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtNjQsNyArNjQsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIEpT
Qzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSk7CiAgICAgc3RhdGlj
IHZvaWQgYW5hbHl6ZUhlYXAoSlNDZWxsKiwgSlNDOjpIZWFwQW5hbHl6ZXImKTsKIHB1YmxpYzoK
LSAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3Ry
dWN0dXJlRmxhZ3MgfCBKU0M6OkludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZl
bldoZW5MZW5ndGhJc05vdFplcm8gfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5TmFtZXMg
fCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdDsKKyAgICBzdGF0aWMgY29uc3RleHBy
IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBKU0M6Oklu
dGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8g
fCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5TmFtZXMgfCBKU0M6Ok92ZXJyaWRlc0dldE93
blByb3BlcnR5U2xvdCB8IEpTQzo6T3ZlcnJpZGVzUHV0OwogcHJvdGVjdGVkOgogICAgIEpTVGVz
dEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcihKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFs
T2JqZWN0JiwgUmVmPFRlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXI+JiYpOwogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdEludGVyZmFjZS5oCShyZXZpc2lvbiAyNzU5NjUpCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTgzLDYgKzgzLDggQEAgcHVibGljOgogI2lmIEVOQUJMRShDb25kaXRpb24xMSkgfHwgRU5B
QkxFKENvbmRpdGlvbjEyKQogICAgIEpTQzo6SlNWYWx1ZSBzdXBwbGVtZW50YWxNZXRob2QzKEpT
Qzo6SlNHbG9iYWxPYmplY3QmLCBKU0M6OkNhbGxGcmFtZSYpOwogI2VuZGlmCitwdWJsaWM6Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVj
dHVyZUZsYWdzIHwgSlNDOjpPdmVycmlkZXNQdXQ7CiBwcm90ZWN0ZWQ6CiAgICAgSlNUZXN0SW50
ZXJmYWNlKEpTQzo6U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3QmLCBSZWY8VGVzdEludGVy
ZmFjZT4mJik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEFu
ZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIuY3BwCShyZXZpc2lvbiAyNzU5NjUpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRBbmRJbmRleGVk
U2V0dGVyTm9JZGVudGlmaWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjI1LDYgKzIyNSw4IEBA
IGJvb2wgSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGkKICAgICBhdXRvKiB0aGlz
T2JqZWN0ID0ganNDYXN0PEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllcio+
KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygp
KTsKIAorICAgIGlmIChVTkxJS0VMWSh0aGlzT2JqZWN0ICE9IHB1dFByb3BlcnR5U2xvdC50aGlz
VmFsdWUoKSkpCisgICAgICAgIHJldHVybiBKU09iamVjdDo6cHV0KHRoaXNPYmplY3QsIGxleGlj
YWxHbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHB1dFByb3BlcnR5U2xvdCk7CiAg
ICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShsZXhpY2FsR2xvYmFsT2Jq
ZWN0LT52bSgpKTsKIAogICAgIGlmIChhdXRvIGluZGV4ID0gcGFyc2VJbmRleChwcm9wZXJ0eU5h
bWUpKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkQW5kSW5kZXhl
ZFNldHRlck5vSWRlbnRpZmllci5oCShyZXZpc2lvbiAyNzU5NjUpCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9J
ZGVudGlmaWVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTY0LDcgKzY0LDcgQEAgcHVibGljOgogICAg
IHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pOwog
ICAgIHN0YXRpYyB2b2lkIGFuYWx5emVIZWFwKEpTQ2VsbCosIEpTQzo6SGVhcEFuYWx5emVyJik7
CiBwdWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9
IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSlNDOjpHZXRPd25Qcm9wZXJ0eVNsb3RJc0ltcHVyZUZv
clByb3BlcnR5QWJzZW5jZSB8IEpTQzo6SW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5k
ZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlO
YW1lcyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgSlNDOjpQcm9oaWJpdHNQ
cm9wZXJ0eUNhY2hpbmc7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVG
bGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSlNDOjpHZXRPd25Qcm9wZXJ0eVNsb3RJc0lt
cHVyZUZvclByb3BlcnR5QWJzZW5jZSB8IEpTQzo6SW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xv
dEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJv
cGVydHlOYW1lcyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgSlNDOjpPdmVy
cmlkZXNQdXQgfCBKU0M6OlByb2hpYml0c1Byb3BlcnR5Q2FjaGluZzsKIHByb3RlY3RlZDoKICAg
ICBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIoSlNDOjpTdHJ1Y3R1cmUq
LCBKU0RPTUdsb2JhbE9iamVjdCYsIFJlZjxUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVu
dGlmaWVyPiYmKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24uY3BwCShyZXZpc2lvbiAyNzU5
NjUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFt
ZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yMjUsNiArMjI1LDggQEAgYm9vbCBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2lu
ZwogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0
dGVyVGhyb3dpbmdFeGNlcHRpb24qPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVS
SVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAKKyAgICBpZiAoVU5MSUtFTFkodGhpc09iamVjdCAh
PSBwdXRQcm9wZXJ0eVNsb3QudGhpc1ZhbHVlKCkpKQorICAgICAgICByZXR1cm4gSlNPYmplY3Q6
OnB1dCh0aGlzT2JqZWN0LCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHZhbHVl
LCBwdXRQcm9wZXJ0eVNsb3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUobGV4aWNhbEdsb2JhbE9iamVjdC0+dm0oKSk7CiAKICAgICBpZiAoYXV0byBpbmRleCA9
IHBhcnNlSW5kZXgocHJvcGVydHlOYW1lKSkgewpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhj
ZXB0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uLmgJKHJl
dmlzaW9uIDI3NTk2NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5oCSh3b3JraW5n
IGNvcHkpCkBAIC02NCw3ICs2NCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgSlNDOjpJc29TdWJz
cGFjZSogc3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKTsKICAgICBzdGF0aWMgdm9pZCBhbmFs
eXplSGVhcChKU0NlbGwqLCBKU0M6OkhlYXBBbmFseXplciYpOwogcHVibGljOgotICAgIHN0YXRp
YyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFn
cyB8IEpTQzo6R2V0T3duUHJvcGVydHlTbG90SXNJbXB1cmVGb3JQcm9wZXJ0eUFic2VuY2UgfCBK
U0M6OkludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05v
dFplcm8gfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5TmFtZXMgfCBKU0M6Ok92ZXJyaWRl
c0dldE93blByb3BlcnR5U2xvdCB8IEpTQzo6UHJvaGliaXRzUHJvcGVydHlDYWNoaW5nOworICAg
IHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1
cmVGbGFncyB8IEpTQzo6R2V0T3duUHJvcGVydHlTbG90SXNJbXB1cmVGb3JQcm9wZXJ0eUFic2Vu
Y2UgfCBKU0M6OkludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5n
dGhJc05vdFplcm8gfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5TmFtZXMgfCBKU0M6Ok92
ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEpTQzo6T3ZlcnJpZGVzUHV0IHwgSlNDOjpQcm9o
aWJpdHNQcm9wZXJ0eUNhY2hpbmc7CiBwcm90ZWN0ZWQ6CiAgICAgSlNUZXN0TmFtZWRBbmRJbmRl
eGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24oSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9i
amVjdCYsIFJlZjxUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24+JiYp
OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEFuZEluZGV4
ZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5jcHAJKHJldmlzaW9uIDI3NTk2NSkKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0
ZXJXaXRoSWRlbnRpZmllci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzNiw2ICsyMzYsOCBAQCBi
b29sIEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVuCiAgICAgYXV0byogdGhpc09i
amVjdCA9IGpzQ2FzdDxKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcio+
KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygp
KTsKIAorICAgIGlmIChVTkxJS0VMWSh0aGlzT2JqZWN0ICE9IHB1dFByb3BlcnR5U2xvdC50aGlz
VmFsdWUoKSkpCisgICAgICAgIHJldHVybiBKU09iamVjdDo6cHV0KHRoaXNPYmplY3QsIGxleGlj
YWxHbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHB1dFByb3BlcnR5U2xvdCk7CiAg
ICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShsZXhpY2FsR2xvYmFsT2Jq
ZWN0LT52bSgpKTsKIAogICAgIGlmIChhdXRvIGluZGV4ID0gcGFyc2VJbmRleChwcm9wZXJ0eU5h
bWUpKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRBbmRJbmRl
eGVkU2V0dGVyV2l0aElkZW50aWZpZXIuaAkocmV2aXNpb24gMjc1OTY1KQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRl
cldpdGhJZGVudGlmaWVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTY0LDcgKzY0LDcgQEAgcHVibGlj
OgogICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYg
dm0pOwogICAgIHN0YXRpYyB2b2lkIGFuYWx5emVIZWFwKEpTQ2VsbCosIEpTQzo6SGVhcEFuYWx5
emVyJik7CiBwdWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVG
bGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSlNDOjpHZXRPd25Qcm9wZXJ0eVNsb3RJc0lt
cHVyZUZvclByb3BlcnR5QWJzZW5jZSB8IEpTQzo6SW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xv
dEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJv
cGVydHlOYW1lcyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgSlNDOjpQcm9o
aWJpdHNQcm9wZXJ0eUNhY2hpbmc7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1
Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSlNDOjpHZXRPd25Qcm9wZXJ0eVNs
b3RJc0ltcHVyZUZvclByb3BlcnR5QWJzZW5jZSB8IEpTQzo6SW50ZXJjZXB0c0dldE93blByb3Bl
cnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8IEpTQzo6T3ZlcnJpZGVzR2V0
T3duUHJvcGVydHlOYW1lcyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgSlND
OjpPdmVycmlkZXNQdXQgfCBKU0M6OlByb2hpYml0c1Byb3BlcnR5Q2FjaGluZzsKIHByb3RlY3Rl
ZDoKICAgICBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcihKU0M6OlN0
cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0JiwgUmVmPFRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0
ZXJXaXRoSWRlbnRpZmllcj4mJik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlck5vSWRlbnRpZmllci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVk
U2V0dGVyTm9JZGVudGlmaWVyLmNwcAkocmV2aXNpb24gMjc1OTY1KQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA0LDYgKzIwNCw4IEBAIGJvb2wgSlNUZXN0TmFtZWRT
ZXR0ZXJOb0lkZW50aWZpZXI6OnB1dCgKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpT
VGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVD
VF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwogCisgICAgaWYgKFVOTElLRUxZKHRoaXNP
YmplY3QgIT0gcHV0UHJvcGVydHlTbG90LnRoaXNWYWx1ZSgpKSkKKyAgICAgICAgcmV0dXJuIEpT
T2JqZWN0OjpwdXQodGhpc09iamVjdCwgbGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1l
LCB2YWx1ZSwgcHV0UHJvcGVydHlTbG90KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKGxleGljYWxHbG9iYWxPYmplY3QtPnZtKCkpOwogCiAgICAgaWYgKCFwcm9w
ZXJ0eU5hbWUuaXNTeW1ib2woKSkgewpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0
dGVyTm9JZGVudGlmaWVyLmgJKHJldmlzaW9uIDI3NTk2NSkKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlck5vSWRlbnRpZmllci5oCSh3
b3JraW5nIGNvcHkpCkBAIC02NCw3ICs2NCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgSlNDOjpJ
c29TdWJzcGFjZSogc3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKTsKICAgICBzdGF0aWMgdm9p
ZCBhbmFseXplSGVhcChKU0NlbGwqLCBKU0M6OkhlYXBBbmFseXplciYpOwogcHVibGljOgotICAg
IHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1
cmVGbGFncyB8IEpTQzo6R2V0T3duUHJvcGVydHlTbG90SXNJbXB1cmVGb3JQcm9wZXJ0eUFic2Vu
Y2UgfCBKU0M6OkludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5n
dGhJc05vdFplcm8gfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5TmFtZXMgfCBKU0M6Ok92
ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEpTQzo6UHJvaGliaXRzUHJvcGVydHlDYWNoaW5n
OworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpT
dHJ1Y3R1cmVGbGFncyB8IEpTQzo6R2V0T3duUHJvcGVydHlTbG90SXNJbXB1cmVGb3JQcm9wZXJ0
eUFic2VuY2UgfCBKU0M6OkludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldo
ZW5MZW5ndGhJc05vdFplcm8gfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5TmFtZXMgfCBK
U0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEpTQzo6T3ZlcnJpZGVzUHV0IHwgSlND
OjpQcm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmc7CiBwcm90ZWN0ZWQ6CiAgICAgSlNUZXN0TmFtZWRT
ZXR0ZXJOb0lkZW50aWZpZXIoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCYsIFJl
ZjxUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXI+JiYpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2Vw
dGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24uY3BwCShyZXZpc2lvbiAy
NzU5NjUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwNCw2
ICsyMDQsOCBAQCBib29sIEpTVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb246CiAgICAg
YXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0
aW9uKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBp
bmZvKCkpOwogCisgICAgaWYgKFVOTElLRUxZKHRoaXNPYmplY3QgIT0gcHV0UHJvcGVydHlTbG90
LnRoaXNWYWx1ZSgpKSkKKyAgICAgICAgcmV0dXJuIEpTT2JqZWN0OjpwdXQodGhpc09iamVjdCwg
bGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgcHV0UHJvcGVydHlTbG90
KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKGxleGljYWxHbG9i
YWxPYmplY3QtPnZtKCkpOwogCiAgICAgaWYgKCFwcm9wZXJ0eU5hbWUuaXNTeW1ib2woKSkgewpJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVk
U2V0dGVyVGhyb3dpbmdFeGNlcHRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlv
bi5oCShyZXZpc2lvbiAyNzU5NjUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5oCSh3b3JraW5nIGNv
cHkpCkBAIC02NCw3ICs2NCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFj
ZSogc3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKTsKICAgICBzdGF0aWMgdm9pZCBhbmFseXpl
SGVhcChKU0NlbGwqLCBKU0M6OkhlYXBBbmFseXplciYpOwogcHVibGljOgotICAgIHN0YXRpYyBj
b25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8
IEpTQzo6R2V0T3duUHJvcGVydHlTbG90SXNJbXB1cmVGb3JQcm9wZXJ0eUFic2VuY2UgfCBKU0M6
OkludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFpl
cm8gfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5TmFtZXMgfCBKU0M6Ok92ZXJyaWRlc0dl
dE93blByb3BlcnR5U2xvdCB8IEpTQzo6UHJvaGliaXRzUHJvcGVydHlDYWNoaW5nOworICAgIHN0
YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVG
bGFncyB8IEpTQzo6R2V0T3duUHJvcGVydHlTbG90SXNJbXB1cmVGb3JQcm9wZXJ0eUFic2VuY2Ug
fCBKU0M6OkludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJ
c05vdFplcm8gfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5TmFtZXMgfCBKU0M6Ok92ZXJy
aWRlc0dldE93blByb3BlcnR5U2xvdCB8IEpTQzo6T3ZlcnJpZGVzUHV0IHwgSlNDOjpQcm9oaWJp
dHNQcm9wZXJ0eUNhY2hpbmc7CiBwcm90ZWN0ZWQ6CiAgICAgSlNUZXN0TmFtZWRTZXR0ZXJUaHJv
d2luZ0V4Y2VwdGlvbihKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0JiwgUmVmPFRl
c3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9uPiYmKTsKIApJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZp
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyLmNwcAkocmV2aXNpb24gMjc1OTY1
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVk
U2V0dGVyV2l0aElkZW50aWZpZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTIsNiArMjEyLDgg
QEAgYm9vbCBKU1Rlc3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyOjpwdQogICAgIGF1dG8qIHRo
aXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllcio+KGNlbGwp
OwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKIAor
ICAgIGlmIChVTkxJS0VMWSh0aGlzT2JqZWN0ICE9IHB1dFByb3BlcnR5U2xvdC50aGlzVmFsdWUo
KSkpCisgICAgICAgIHJldHVybiBKU09iamVjdDo6cHV0KHRoaXNPYmplY3QsIGxleGljYWxHbG9i
YWxPYmplY3QsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHB1dFByb3BlcnR5U2xvdCk7CiAgICAgYXV0
byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShsZXhpY2FsR2xvYmFsT2JqZWN0LT52
bSgpKTsKIAogICAgIGlmICghcHJvcGVydHlOYW1lLmlzU3ltYm9sKCkpIHsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhJ
ZGVudGlmaWVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXIuaAkocmV2aXNpb24gMjc1
OTY1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5h
bWVkU2V0dGVyV2l0aElkZW50aWZpZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNjQsNyArNjQsNyBA
QCBwdWJsaWM6CiAgICAgc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1wbChK
U0M6OlZNJiB2bSk7CiAgICAgc3RhdGljIHZvaWQgYW5hbHl6ZUhlYXAoSlNDZWxsKiwgSlNDOjpI
ZWFwQW5hbHl6ZXImKTsKIHB1YmxpYzoKLSAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0
cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBKU0M6OkdldE93blByb3BlcnR5
U2xvdElzSW1wdXJlRm9yUHJvcGVydHlBYnNlbmNlIHwgSlNDOjpJbnRlcmNlcHRzR2V0T3duUHJv
cGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgSlNDOjpPdmVycmlkZXNH
ZXRPd25Qcm9wZXJ0eU5hbWVzIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBK
U0M6OlByb2hpYml0c1Byb3BlcnR5Q2FjaGluZzsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2ln
bmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBKU0M6OkdldE93blBy
b3BlcnR5U2xvdElzSW1wdXJlRm9yUHJvcGVydHlBYnNlbmNlIHwgSlNDOjpJbnRlcmNlcHRzR2V0
T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgSlNDOjpPdmVy
cmlkZXNHZXRPd25Qcm9wZXJ0eU5hbWVzIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNs
b3QgfCBKU0M6Ok92ZXJyaWRlc1B1dCB8IEpTQzo6UHJvaGliaXRzUHJvcGVydHlDYWNoaW5nOwog
cHJvdGVjdGVkOgogICAgIEpTVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXIoSlNDOjpTdHJ1
Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCYsIFJlZjxUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRp
Zmllcj4mJik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJX
aXRoSW5kZXhlZEdldHRlci5jcHAJKHJldmlzaW9uIDI3NTk2NSkKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0
dGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjM2LDYgKzIzNiw4IEBAIGJvb2wgSlNUZXN0TmFt
ZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlcjoKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0
PEpTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXIqPihjZWxsKTsKICAgICBBU1NFUlRf
R0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAKKyAgICBpZiAoVU5MSUtF
TFkodGhpc09iamVjdCAhPSBwdXRQcm9wZXJ0eVNsb3QudGhpc1ZhbHVlKCkpKQorICAgICAgICBy
ZXR1cm4gSlNPYmplY3Q6OnB1dCh0aGlzT2JqZWN0LCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9w
ZXJ0eU5hbWUsIHZhbHVlLCBwdXRQcm9wZXJ0eVNsb3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUobGV4aWNhbEdsb2JhbE9iamVjdC0+dm0oKSk7CiAKICAgICBp
ZiAoIXByb3BlcnR5TmFtZS5pc1N5bWJvbCgpKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyLmgJKHJldmlzaW9uIDI3NTk2NSkKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRl
cldpdGhJbmRleGVkR2V0dGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTY0LDcgKzY0LDcgQEAgcHVi
bGljOgogICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvckltcGwoSlNDOjpW
TSYgdm0pOwogICAgIHN0YXRpYyB2b2lkIGFuYWx5emVIZWFwKEpTQ2VsbCosIEpTQzo6SGVhcEFu
YWx5emVyJik7CiBwdWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1
cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSlNDOjpHZXRPd25Qcm9wZXJ0eVNsb3RJ
c0ltcHVyZUZvclByb3BlcnR5QWJzZW5jZSB8IEpTQzo6SW50ZXJjZXB0c0dldE93blByb3BlcnR5
U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3du
UHJvcGVydHlOYW1lcyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgSlNDOjpQ
cm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmc7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBT
dHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSlNDOjpHZXRPd25Qcm9wZXJ0
eVNsb3RJc0ltcHVyZUZvclByb3BlcnR5QWJzZW5jZSB8IEpTQzo6SW50ZXJjZXB0c0dldE93blBy
b3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8IEpTQzo6T3ZlcnJpZGVz
R2V0T3duUHJvcGVydHlOYW1lcyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwg
SlNDOjpPdmVycmlkZXNQdXQgfCBKU0M6OlByb2hpYml0c1Byb3BlcnR5Q2FjaGluZzsKIHByb3Rl
Y3RlZDoKICAgICBKU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyKEpTQzo6U3RydWN0
dXJlKiwgSlNET01HbG9iYWxPYmplY3QmLCBSZWY8VGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRH
ZXR0ZXI+JiYpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5h
bWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXIuY3BwCShyZXZpc2lvbiAyNzU5NjUp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRT
ZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIz
Niw2ICsyMzYsOCBAQCBib29sIEpTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBCiAg
ICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVk
R2V0dGVyQW5kU2V0dGVyKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0
aGlzT2JqZWN0LCBpbmZvKCkpOwogCisgICAgaWYgKFVOTElLRUxZKHRoaXNPYmplY3QgIT0gcHV0
UHJvcGVydHlTbG90LnRoaXNWYWx1ZSgpKSkKKyAgICAgICAgcmV0dXJuIEpTT2JqZWN0OjpwdXQo
dGhpc09iamVjdCwgbGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgcHV0
UHJvcGVydHlTbG90KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KGxleGljYWxHbG9iYWxPYmplY3QtPnZtKCkpOwogCiAgICAgaWYgKGF1dG8gaW5kZXggPSBwYXJz
ZUluZGV4KHByb3BlcnR5TmFtZSkpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5kU2V0dGVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXIuaAkocmV2aXNpb24g
Mjc1OTY1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXIuaAkod29ya2luZyBjb3B5KQpA
QCAtNjQsNyArNjQsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1
YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSk7CiAgICAgc3RhdGljIHZvaWQgYW5hbHl6ZUhlYXAo
SlNDZWxsKiwgSlNDOjpIZWFwQW5hbHl6ZXImKTsKIHB1YmxpYzoKLSAgICBzdGF0aWMgY29uc3Rl
eHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBKU0M6
OkdldE93blByb3BlcnR5U2xvdElzSW1wdXJlRm9yUHJvcGVydHlBYnNlbmNlIHwgSlNDOjpJbnRl
cmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwg
SlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eU5hbWVzIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Q
cm9wZXJ0eVNsb3QgfCBKU0M6OlByb2hpYml0c1Byb3BlcnR5Q2FjaGluZzsKKyAgICBzdGF0aWMg
Y29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3Mg
fCBKU0M6OkdldE93blByb3BlcnR5U2xvdElzSW1wdXJlRm9yUHJvcGVydHlBYnNlbmNlIHwgSlND
OjpJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3Ra
ZXJvIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eU5hbWVzIHwgSlNDOjpPdmVycmlkZXNH
ZXRPd25Qcm9wZXJ0eVNsb3QgfCBKU0M6Ok92ZXJyaWRlc1B1dCB8IEpTQzo6UHJvaGliaXRzUHJv
cGVydHlDYWNoaW5nOwogcHJvdGVjdGVkOgogICAgIEpTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4
ZWRHZXR0ZXJBbmRTZXR0ZXIoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCYsIFJl
ZjxUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRlcj4mJik7CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRl
cldpdGhMZWdhY3lPdmVycmlkZUJ1aWx0SW5zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5
T3ZlcnJpZGVCdWlsdElucy5jcHAJKHJldmlzaW9uIDI3NTk2NSkKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lPdmVy
cmlkZUJ1aWx0SW5zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA0LDYgKzIwNCw4IEBAIGJvb2wg
SlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5T3ZlcnJpZGUKICAgICBhdXRvKiB0aGlzT2JqZWN0
ID0ganNDYXN0PEpTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMqPihj
ZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7
CiAKKyAgICBpZiAoVU5MSUtFTFkodGhpc09iamVjdCAhPSBwdXRQcm9wZXJ0eVNsb3QudGhpc1Zh
bHVlKCkpKQorICAgICAgICByZXR1cm4gSlNPYmplY3Q6OnB1dCh0aGlzT2JqZWN0LCBsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBwdXRQcm9wZXJ0eVNsb3QpOwogICAg
IGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUobGV4aWNhbEdsb2JhbE9iamVj
dC0+dm0oKSk7CiAKICAgICBpZiAoIXByb3BlcnR5TmFtZS5pc1N5bWJvbCgpKSB7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJX
aXRoTGVnYWN5T3ZlcnJpZGVCdWlsdElucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lPdmVy
cmlkZUJ1aWx0SW5zLmgJKHJldmlzaW9uIDI3NTk2NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lPdmVycmlkZUJ1
aWx0SW5zLmgJKHdvcmtpbmcgY29weSkKQEAgLTY0LDcgKzY0LDcgQEAgcHVibGljOgogICAgIHN0
YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pOwogICAg
IHN0YXRpYyB2b2lkIGFuYWx5emVIZWFwKEpTQ2VsbCosIEpTQzo6SGVhcEFuYWx5emVyJik7CiBw
dWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJh
c2U6OlN0cnVjdHVyZUZsYWdzIHwgSlNDOjpHZXRPd25Qcm9wZXJ0eVNsb3RJc0ltcHVyZSB8IEpT
Qzo6SW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90
WmVybyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlOYW1lcyB8IEpTQzo6T3ZlcnJpZGVz
R2V0T3duUHJvcGVydHlTbG90IHwgSlNDOjpQcm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmc7CisgICAg
c3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVy
ZUZsYWdzIHwgSlNDOjpHZXRPd25Qcm9wZXJ0eVNsb3RJc0ltcHVyZSB8IEpTQzo6SW50ZXJjZXB0
c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8IEpTQzo6
T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlOYW1lcyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVy
dHlTbG90IHwgSlNDOjpPdmVycmlkZXNQdXQgfCBKU0M6OlByb2hpYml0c1Byb3BlcnR5Q2FjaGlu
ZzsKIHByb3RlY3RlZDoKICAgICBKU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lPdmVycmlkZUJ1
aWx0SW5zKEpTQzo6U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3QmLCBSZWY8VGVzdE5hbWVk
U2V0dGVyV2l0aExlZ2FjeU92ZXJyaWRlQnVpbHRJbnM+JiYpOwogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5
VW5mb3JnZWFibGVQcm9wZXJ0aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3Jn
ZWFibGVQcm9wZXJ0aWVzLmNwcAkocmV2aXNpb24gMjc1OTY1KQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9y
Z2VhYmxlUHJvcGVydGllcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzMCw2ICsyMzAsOCBAQCBi
b29sIEpTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhCiAgICAgYXV0byogdGhpc09i
amVjdCA9IGpzQ2FzdDxKU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lVbmZvcmdlYWJsZVByb3Bl
cnRpZXMqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3Qs
IGluZm8oKSk7CiAKKyAgICBpZiAoVU5MSUtFTFkodGhpc09iamVjdCAhPSBwdXRQcm9wZXJ0eVNs
b3QudGhpc1ZhbHVlKCkpKQorICAgICAgICByZXR1cm4gSlNPYmplY3Q6OnB1dCh0aGlzT2JqZWN0
LCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBwdXRQcm9wZXJ0eVNs
b3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUobGV4aWNhbEds
b2JhbE9iamVjdC0+dm0oKSk7CiAKICAgICBpZiAoIXByb3BlcnR5TmFtZS5pc1N5bWJvbCgpKSB7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFt
ZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVy
V2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllcy5oCShyZXZpc2lvbiAyNzU5NjUpCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJX
aXRoTGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTY0LDcg
KzY0LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZv
ckltcGwoSlNDOjpWTSYgdm0pOwogICAgIHN0YXRpYyB2b2lkIGFuYWx5emVIZWFwKEpTQ2VsbCos
IEpTQzo6SGVhcEFuYWx5emVyJik7CiBwdWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB1bnNp
Z25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSlNDOjpHZXRPd25Q
cm9wZXJ0eVNsb3RJc0ltcHVyZUZvclByb3BlcnR5QWJzZW5jZSB8IEpTQzo6SGFzU3RhdGljUHJv
cGVydHlUYWJsZSB8IEpTQzo6SW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVu
V2hlbkxlbmd0aElzTm90WmVybyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlOYW1lcyB8
IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgSlNDOjpQcm9oaWJpdHNQcm9wZXJ0
eUNhY2hpbmc7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9
IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSlNDOjpHZXRPd25Qcm9wZXJ0eVNsb3RJc0ltcHVyZUZv
clByb3BlcnR5QWJzZW5jZSB8IEpTQzo6SGFzU3RhdGljUHJvcGVydHlUYWJsZSB8IEpTQzo6SW50
ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8
IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlOYW1lcyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3du
UHJvcGVydHlTbG90IHwgSlNDOjpPdmVycmlkZXNQdXQgfCBKU0M6OlByb2hpYml0c1Byb3BlcnR5
Q2FjaGluZzsKIHByb3RlY3RlZDoKICAgICBKU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lVbmZv
cmdlYWJsZVByb3BlcnRpZXMoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCYsIFJl
ZjxUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVzPiYmKTsKIApJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVk
U2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllc0FuZExlZ2FjeU92ZXJyaWRlQnVp
bHRJbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lVbmZvcmdlYWJsZVByb3BlcnRpZXNB
bmRMZWdhY3lPdmVycmlkZUJ1aWx0SW5zLmNwcAkocmV2aXNpb24gMjc1OTY1KQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aExl
Z2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllc0FuZExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yMzAsNiArMjMwLDggQEAgYm9vbCBKU1Rlc3ROYW1lZFNldHRlcldp
dGhMZWdhY3lVbmZvcmdlYQogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0TmFt
ZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVzQW5kTGVnYWN5T3ZlcnJpZGVC
dWlsdElucyo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVj
dCwgaW5mbygpKTsKIAorICAgIGlmIChVTkxJS0VMWSh0aGlzT2JqZWN0ICE9IHB1dFByb3BlcnR5
U2xvdC50aGlzVmFsdWUoKSkpCisgICAgICAgIHJldHVybiBKU09iamVjdDo6cHV0KHRoaXNPYmpl
Y3QsIGxleGljYWxHbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHB1dFByb3BlcnR5
U2xvdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShsZXhpY2Fs
R2xvYmFsT2JqZWN0LT52bSgpKTsKIAogICAgIGlmICghcHJvcGVydHlOYW1lLmlzU3ltYm9sKCkp
IHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RO
YW1lZFNldHRlcldpdGhMZWdhY3lVbmZvcmdlYWJsZVByb3BlcnRpZXNBbmRMZWdhY3lPdmVycmlk
ZUJ1aWx0SW5zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGll
c0FuZExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMuaAkocmV2aXNpb24gMjc1OTY1KQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aExl
Z2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllc0FuZExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMuaAkod29y
a2luZyBjb3B5KQpAQCAtNjQsNyArNjQsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIEpTQzo6SXNv
U3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSk7CiAgICAgc3RhdGljIHZvaWQg
YW5hbHl6ZUhlYXAoSlNDZWxsKiwgSlNDOjpIZWFwQW5hbHl6ZXImKTsKIHB1YmxpYzoKLSAgICBz
dGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJl
RmxhZ3MgfCBKU0M6OkdldE93blByb3BlcnR5U2xvdElzSW1wdXJlIHwgSlNDOjpIYXNTdGF0aWNQ
cm9wZXJ0eVRhYmxlIHwgSlNDOjpJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2
ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eU5hbWVz
IHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBKU0M6OlByb2hpYml0c1Byb3Bl
cnR5Q2FjaGluZzsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdz
ID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBKU0M6OkdldE93blByb3BlcnR5U2xvdElzSW1wdXJl
IHwgSlNDOjpIYXNTdGF0aWNQcm9wZXJ0eVRhYmxlIHwgSlNDOjpJbnRlcmNlcHRzR2V0T3duUHJv
cGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgSlNDOjpPdmVycmlkZXNH
ZXRPd25Qcm9wZXJ0eU5hbWVzIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBK
U0M6Ok92ZXJyaWRlc1B1dCB8IEpTQzo6UHJvaGliaXRzUHJvcGVydHlDYWNoaW5nOwogcHJvdGVj
dGVkOgogICAgIEpTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGll
c0FuZExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9i
amVjdCYsIFJlZjxUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVz
QW5kTGVnYWN5T3ZlcnJpZGVCdWlsdElucz4mJik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RQbHVnaW5JbnRlcmZhY2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RQbHVn
aW5JbnRlcmZhY2UuY3BwCShyZXZpc2lvbiAyNzU5NjUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0UGx1Z2luSW50ZXJmYWNlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTgxLDYgKzE4MSw4IEBAIGJvb2wgSlNUZXN0UGx1Z2luSW50ZXJmYWNlOjpwdXQo
SlNDZWxsKiAKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdFBsdWdpbkludGVy
ZmFjZSo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwg
aW5mbygpKTsKIAorICAgIGlmIChVTkxJS0VMWSh0aGlzT2JqZWN0ICE9IHB1dFByb3BlcnR5U2xv
dC50aGlzVmFsdWUoKSkpCisgICAgICAgIHJldHVybiBKU09iamVjdDo6cHV0KHRoaXNPYmplY3Qs
IGxleGljYWxHbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHB1dFByb3BlcnR5U2xv
dCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShsZXhpY2FsR2xv
YmFsT2JqZWN0LT52bSgpKTsKIAogICAgIGJvb2wgcHV0UmVzdWx0ID0gZmFsc2U7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0UGx1Z2luSW50ZXJm
YWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdFBsdWdpbkludGVyZmFjZS5oCShyZXZpc2lvbiAyNzU5NjUpCisrKyBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0UGx1Z2luSW50ZXJmYWNlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTY3LDcgKzY3LDcgQEAgcHVibGljOgogCiAgICAgc3RhdGljIHZv
aWQgYW5hbHl6ZUhlYXAoSlNDZWxsKiwgSlNDOjpIZWFwQW5hbHl6ZXImKTsKIHB1YmxpYzoKLSAg
ICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0
dXJlRmxhZ3MgfCBKU0M6OkludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldo
ZW5MZW5ndGhJc05vdFplcm8gfCBKU0M6Ok92ZXJyaWRlc0dldENhbGxEYXRhIHwgSlNDOjpPdmVy
cmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBKU0M6OlByb2hpYml0c1Byb3BlcnR5Q2FjaGluZzsK
KyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3Ry
dWN0dXJlRmxhZ3MgfCBKU0M6OkludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZl
bldoZW5MZW5ndGhJc05vdFplcm8gfCBKU0M6Ok92ZXJyaWRlc0dldENhbGxEYXRhIHwgSlNDOjpP
dmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBKU0M6Ok92ZXJyaWRlc1B1dCB8IEpTQzo6UHJv
aGliaXRzUHJvcGVydHlDYWNoaW5nOwogcHJvdGVjdGVkOgogICAgIEpTVGVzdFBsdWdpbkludGVy
ZmFjZShKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0JiwgUmVmPFRlc3RQbHVnaW5J
bnRlcmZhY2U+JiYpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcnVudGltZV9hcnJh
eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX2FycmF5LmgJ
KHJldmlzaW9uIDI3NTk2NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX2FycmF5
LmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDcgKzM1LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiBjbGFz
cyBSdW50aW1lQXJyYXkgZmluYWwgOiBwdWJsaWMgSlNBcnJheSB7CiBwdWJsaWM6CiAgICAgdXNp
bmcgQmFzZSA9IEpTQXJyYXk7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1
cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlT
bG90IHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlOYW1lcyB8IEludGVyY2VwdHNHZXRPd25Qcm9w
ZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm87CisgICAgc3RhdGljIGNvbnN0
ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgT3Zl
cnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlOYW1lcyB8
IE92ZXJyaWRlc1B1dCB8IEludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldo
ZW5MZW5ndGhJc05vdFplcm87CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzRGVzdHJ1
Y3Rpb24gPSB0cnVlOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIEpTQzo6U3Vi
c3BhY2VBY2Nlc3M+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcnVudGltZV9vYmplY3Qu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcnVudGltZV9vYmplY3QuaAko
cmV2aXNpb24gMjc1OTY1KQorKysgU291cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRpbWVfb2JqZWN0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDcgKzM3LDcgQEAgRXhjZXB0aW9uKiB0aHJvd1J1bnRp
bWVPYmplY3RJbnZhbGlkQWNjZQogY2xhc3MgV0VCQ09SRV9FWFBPUlQgUnVudGltZU9iamVjdCA6
IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKIHB1YmxpYzoKICAgICB1c2luZyBCYXNlID0gSlNO
b25GaW5hbE9iamVjdDsKLSAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZs
YWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3Qg
fCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eU5hbWVzIHwgT3ZlcnJpZGVzR2V0Q2FsbERhdGEgfCBH
ZXRPd25Qcm9wZXJ0eVNsb3RNYXlCZVdyb25nQWJvdXREb250RW51bTsKKyAgICBzdGF0aWMgY29u
c3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBP
dmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eU5hbWVz
IHwgT3ZlcnJpZGVzR2V0Q2FsbERhdGEgfCBPdmVycmlkZXNQdXQgfCBHZXRPd25Qcm9wZXJ0eVNs
b3RNYXlCZVdyb25nQWJvdXREb250RW51bTsKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVl
ZHNEZXN0cnVjdGlvbiA9IHRydWU7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwg
SlNDOjpTdWJzcGFjZUFjY2Vzcz4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9vYmpjL29i
amNfcnVudGltZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9vYmpjL29i
amNfcnVudGltZS5oCShyZXZpc2lvbiAyNzU5NjUpCisrKyBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uv
b2JqYy9vYmpjX3J1bnRpbWUuaAkod29ya2luZyBjb3B5KQpAQCAtOTEsNyArOTEsNyBAQCBwcml2
YXRlOgogY2xhc3MgT2JqY0ZhbGxiYWNrT2JqZWN0SW1wIGZpbmFsIDogcHVibGljIEpTRGVzdHJ1
Y3RpYmxlT2JqZWN0IHsKIHB1YmxpYzoKICAgICB1c2luZyBCYXNlID0gSlNEZXN0cnVjdGlibGVP
YmplY3Q7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJh
c2U6OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJp
ZGVzR2V0Q2FsbERhdGE7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVG
bGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90
IHwgT3ZlcnJpZGVzR2V0Q2FsbERhdGEgfCBPdmVycmlkZXNQdXQ7CiAgICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOwogCiAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgQ2VsbFR5cGUsIEpTQzo6U3Vic3BhY2VBY2Nlc3M+CkluZGV4OiBTb3VyY2UvV2ViS2l0L0No
YW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwkocmV2aXNpb24g
Mjc1OTY1KQorKysgU291cmNlL1dlYktpdC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEs
MyArMSwxMiBAQAorMjAyMS0wNC0xNCAgQWxleGV5IFNodmF5a2EgIDxzaHZhaWthbGVzaEBnbWFp
bC5jb20+CisKKyAgICAgICAgW0pTQ10gT3JkaW5hcnlTZXQgc2hvdWxkIGludm9rZSBjdXN0b20g
W1tTZXRdXSBtZXRob2RzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMTc5MTYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9KU05QT2JqZWN0Lmg6CisKIDIw
MjEtMDQtMTQgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KIAog
ICAgICAgICBUZW1wb3JhcmlseSBmaXggbW9yZSB0ZXJtaW5hdGVfd2l0aF9yZWFzb24tcmVsYXRl
ZCBjcmFzaGVzCkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2Fw
ZS9KU05QT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1Bs
dWdpbnMvTmV0c2NhcGUvSlNOUE9iamVjdC5oCShyZXZpc2lvbiAyNzU5NjUpCisrKyBTb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9KU05QT2JqZWN0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQ0LDcgKzQ0LDcgQEAgY2xhc3MgTlBSdW50aW1lT2JqZWN0TWFwOwogY2xhc3Mg
SlNOUE9iamVjdCBmaW5hbCA6IHB1YmxpYyBKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0IHsKIHB1
YmxpYzoKICAgICB1c2luZyBCYXNlID0gSlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdDsKLSAgICBz
dGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJl
RmxhZ3MgfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEpTQzo6T3ZlcnJpZGVz
R2V0T3duUHJvcGVydHlOYW1lcyB8IEpTQzo6T3ZlcnJpZGVzR2V0Q2FsbERhdGEgfCBKU0M6Okdl
dE93blByb3BlcnR5U2xvdE1heUJlV3JvbmdBYm91dERvbnRFbnVtOworICAgIHN0YXRpYyBjb25z
dGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEpT
Qzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9w
ZXJ0eU5hbWVzIHwgSlNDOjpPdmVycmlkZXNHZXRDYWxsRGF0YSB8IEpTQzo6T3ZlcnJpZGVzUHV0
IHwgSlNDOjpHZXRPd25Qcm9wZXJ0eVNsb3RNYXlCZVdyb25nQWJvdXREb250RW51bTsKIAogICAg
IHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBKU0M6OlN1YnNwYWNlQWNjZXNzPgogICAgIHN0
YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKSW5kZXg6IExh
eW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJ
KHJldmlzaW9uIDI3NTk2NSkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5
KQpAQCAtMSwzICsxLDE1IEBACisyMDIxLTA0LTE0ICBBbGV4ZXkgU2h2YXlrYSAgPHNodmFpa2Fs
ZXNoQGdtYWlsLmNvbT4KKworICAgICAgICBbSlNDXSBPcmRpbmFyeVNldCBzaG91bGQgaW52b2tl
IGN1c3RvbSBbW1NldF1dIG1ldGhvZHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIxNzkxNgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgICogaHR0cC90ZXN0cy9zZWN1cml0eS9jcm9zcy1mcmFtZS1hY2Nlc3Mt
b2JqZWN0LWdldFByb3RvdHlwZU9mLWluLXB1dC1leHBlY3RlZC50eHQ6CisgICAgICAgICogaHR0
cC90ZXN0cy9zZWN1cml0eS9jcm9zcy1mcmFtZS1hY2Nlc3Mtb2JqZWN0LWdldFByb3RvdHlwZU9m
LWluLXB1dC5odG1sOgorICAgICAgICAqIGpzL2RvbS9yZWZsZWN0LXNldC1vbnRvLWRvbS1leHBl
Y3RlZC50eHQ6CisgICAgICAgICoganMvZG9tL3NjcmlwdC10ZXN0cy9yZWZsZWN0LXNldC1vbnRv
LWRvbS5qczoKKwogMjAyMS0wNC0xNCAgUm9iZXJ0IEplbm5lciAgPGplbm5lckBhcHBsZS5jb20+
CiAKICAgICAgICAgWyB3azIgXSBodHRwL3Rlc3RzL3NlY3VyaXR5L3dlYmdsLXJlbW90ZS1yZWFk
LXJlbW90ZS1pbWFnZS1hbGxvd2VkLXdpdGgtY3JlZGVudGlhbHMuaHRtbCBpcyBmbGFrZXkgY3Jh
c2hpbmcKSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkvY3Jvc3MtZnJhbWUt
YWNjZXNzLW9iamVjdC1nZXRQcm90b3R5cGVPZi1pbi1wdXQtZXhwZWN0ZWQudHh0Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkvY3Jvc3MtZnJhbWUtYWNjZXNz
LW9iamVjdC1nZXRQcm90b3R5cGVPZi1pbi1wdXQtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAyNzU5
NjUpCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L2Nyb3NzLWZyYW1lLWFjY2Vz
cy1vYmplY3QtZ2V0UHJvdG90eXBlT2YtaW4tcHV0LWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDcgQEAKIFRoaXMgdGVzdHMgdGhhdCB5b3UgY2FuJ3QgZ2V0IHRoZSBwcm90
b3R5cGUgb2YgdGhlIHdpbmRvdyBkdXJpbmcgW1tQdXRdXSBvcGVyYXRpb24uCiAKK1BBU1MgYXJy
YXkuY29jb2EgPSBjb2NvYVZhbHVlIHRocmV3IGV4Y2VwdGlvbiBTZWN1cml0eUVycm9yOiBCbG9j
a2VkIGEgZnJhbWUgd2l0aCBvcmlnaW4gImh0dHA6Ly8xMjcuMC4wLjE6ODAwMCIgZnJvbSBhY2Nl
c3NpbmcgYSBjcm9zcy1vcmlnaW4gZnJhbWUuIFByb3RvY29scywgZG9tYWlucywgYW5kIHBvcnRz
IG11c3QgbWF0Y2guLgorUEFTUyAnc3RyJy5jb2NvYSA9IGNvY29hVmFsdWUgdGhyZXcgZXhjZXB0
aW9uIFNlY3VyaXR5RXJyb3I6IEJsb2NrZWQgYSBmcmFtZSB3aXRoIG9yaWdpbiAiaHR0cDovLzEy
Ny4wLjAuMTo4MDAwIiBmcm9tIGFjY2Vzc2luZyBhIGNyb3NzLW9yaWdpbiBmcmFtZS4gUHJvdG9j
b2xzLCBkb21haW5zLCBhbmQgcG9ydHMgbXVzdCBtYXRjaC4uCiBQQVNTOiBzdWNjZXNzZnVsbHlQ
YXJzZWQgc2hvdWxkIGJlICd0cnVlJyBhbmQgaXMuCiAKIFRFU1QgQ09NUExFVEUKSW5kZXg6IExh
eW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkvY3Jvc3MtZnJhbWUtYWNjZXNzLW9iamVjdC1n
ZXRQcm90b3R5cGVPZi1pbi1wdXQuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRw
L3Rlc3RzL3NlY3VyaXR5L2Nyb3NzLWZyYW1lLWFjY2Vzcy1vYmplY3QtZ2V0UHJvdG90eXBlT2Yt
aW4tcHV0Lmh0bWwJKHJldmlzaW9uIDI3NTk2NSkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMv
c2VjdXJpdHkvY3Jvc3MtZnJhbWUtYWNjZXNzLW9iamVjdC1nZXRQcm90b3R5cGVPZi1pbi1wdXQu
aHRtbAkod29ya2luZyBjb3B5KQpAQCAtMTUsNyArMTUsNyBAQAogICAgICAgICBkb1Rlc3QgPSBm
dW5jdGlvbigpCiAgICAgICAgIHsKICAgICAgICAgICAgIHRhcmdldFdpbmRvdyA9IGRvY3VtZW50
LmdldEVsZW1lbnRCeUlkKCJ0YXJnZXQiKS5jb250ZW50V2luZG93OwotICAgICAgICAgICAgdmFy
IGFycmF5ID0gW107CisgICAgICAgICAgICBhcnJheSA9IFtdOwogICAgICAgICAgICAgYXJyYXku
X19wcm90b19fLl9fcHJvdG9fXyA9IHRhcmdldFdpbmRvdzsKICAgICAgICAgICAgIGFycmF5WzBd
ID0gMTEuMTE7CiAgICAgICAgICAgICBhcnJheVsyXSA9IDIyLjIyOwpAQCAtMjQsMTEgKzI0LDE1
IEBACiAgICAgICAgICAgICAgICAgICAgIHRlc3RGYWlsZWQoInRvU3RyaW5nIGlzIGNhbGxlZCBi
eSAxMDEwMTAxMCBzZXR0ZXIiKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Owot
ICAgICAgICAgICAgYXJyYXlbImNvY29hIl0gPSB7CisgICAgICAgICAgICBjb2NvYVZhbHVlID0g
ewogICAgICAgICAgICAgICAgIHRvU3RyaW5nKCkgewogICAgICAgICAgICAgICAgICAgICB0ZXN0
RmFpbGVkKCJ0b1N0cmluZyBpcyBjYWxsZWQgYnkgY29jb2Egc2V0dGVyIik7CiAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIHNob3VsZFRocm93RXJyb3JOYW1l
KCJhcnJheS5jb2NvYSA9IGNvY29hVmFsdWUiLCAiU2VjdXJpdHlFcnJvciIpOworCisgICAgICAg
ICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YoU3RyaW5nLnByb3RvdHlwZSwgdGFyZ2V0V2luZG93
KTsKKyAgICAgICAgICAgIHNob3VsZFRocm93RXJyb3JOYW1lKCInc3RyJy5jb2NvYSA9IGNvY29h
VmFsdWUiLCAiU2VjdXJpdHlFcnJvciIpOwogICAgICAgICAgICAgZmluaXNoSlNUZXN0KCk7CiAg
ICAgICAgIH0KICAgICA8L3NjcmlwdD4KSW5kZXg6IExheW91dFRlc3RzL2ltcG9ydGVkL3czYy9D
aGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL0NoYW5nZUxv
ZwkocmV2aXNpb24gMjc1OTY1KQorKysgTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDIxLTA0LTE0ICBBbGV4ZXkgU2h2
YXlrYSAgPHNodmFpa2FsZXNoQGdtYWlsLmNvbT4KKworICAgICAgICBbSlNDXSBPcmRpbmFyeVNl
dCBzaG91bGQgaW52b2tlIGN1c3RvbSBbW1NldF1dIG1ldGhvZHMKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNzkxNgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL1dlYklE
TC9lY21hc2NyaXB0LWJpbmRpbmcvaW50ZXJmYWNlLW9iamVjdC1zZXQtcmVjZWl2ZXItZXhwZWN0
ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvV2ViSURML2VjbWFz
Y3JpcHQtYmluZGluZy9pbnRlcmZhY2Utb2JqZWN0LXNldC1yZWNlaXZlci5odG1sOiBBZGRlZC4K
KyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvV2ViSURML2VjbWFzY3JpcHQtYmluZGluZy9p
bnRlcmZhY2UtcHJvdG90eXBlLWNvbnN0cnVjdG9yLXNldC1yZWNlaXZlci1leHBlY3RlZC50eHQ6
CisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL1dlYklETC9lY21hc2NyaXB0LWJpbmRpbmcv
aW50ZXJmYWNlLXByb3RvdHlwZS1jb25zdHJ1Y3Rvci1zZXQtcmVjZWl2ZXIuaHRtbDoKKwogMjAy
MS0wNC0xMyAgWmlyYW4gU3VuICA8enN1bkBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtjc3MtZ3Jp
ZF0gSW5jb3JyZWN0IHRyYWNrIHNpemluZyB3aGVuIHVzaW5nIHJlbGF0aXZlIHNpemVkIGl0ZW1z
IGluICdhdXRvJyBjb2x1bW4gdHJhY2tzCkluZGV4OiBMYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mv
d2ViLXBsYXRmb3JtLXRlc3RzL1dlYklETC9lY21hc2NyaXB0LWJpbmRpbmcvaW50ZXJmYWNlLW9i
amVjdC1zZXQtcmVjZWl2ZXItZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvV2ViSURML2VjbWFzY3JpcHQtYmluZGlu
Zy9pbnRlcmZhY2Utb2JqZWN0LXNldC1yZWNlaXZlci1leHBlY3RlZC50eHQJKG5vbmV4aXN0ZW50
KQorKysgTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9XZWJJREwv
ZWNtYXNjcmlwdC1iaW5kaW5nL2ludGVyZmFjZS1vYmplY3Qtc2V0LXJlY2VpdmVyLWV4cGVjdGVk
LnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQgQEAKKworUEFTUyBEaXJlY3QgW1tTZXRd
XSBwcmVzZXJ2ZXMgW1tFbnVtZXJhYmxlXV06IGZhbHNlIHByb3BlcnR5IGF0dHJpYnV0ZQorUEFT
UyBQcm90b3R5cGUgY2hhaW4gW1tTZXRdXSBjcmVhdGVzIHByb3BlcnR5IG9uIHJlY2VpdmVyCisK
SW5kZXg6IExheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvV2ViSURM
L2VjbWFzY3JpcHQtYmluZGluZy9pbnRlcmZhY2Utb2JqZWN0LXNldC1yZWNlaXZlci5odG1sCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMv
V2ViSURML2VjbWFzY3JpcHQtYmluZGluZy9pbnRlcmZhY2Utb2JqZWN0LXNldC1yZWNlaXZlci5o
dG1sCShub25leGlzdGVudCkKKysrIExheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZv
cm0tdGVzdHMvV2ViSURML2VjbWFzY3JpcHQtYmluZGluZy9pbnRlcmZhY2Utb2JqZWN0LXNldC1y
ZWNlaXZlci5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzcgQEAKKzwhRE9DVFlQRSBo
dG1sPgorPG1ldGEgY2hhcnNldD0idXRmLTgiPgorPHRpdGxlPndpbmRvdy5JbnRlcmZhY2UgaXMg
ZGVmaW5lZCBvbiBbW1NldF1dIHJlY2VpdmVyPC90aXRsZT4KKzxsaW5rIHJlbD0iaGVscCIgaHJl
Zj0iaHR0cHM6Ly9oZXljYW0uZ2l0aHViLmlvL3dlYmlkbC8jZGVmaW5lLXRoZS1nbG9iYWwtcHJv
cGVydHktcmVmZXJlbmNlcyI+Cis8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy90ZXN0aGFybmVzcy5q
cyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy90ZXN0aGFybmVzc3JlcG9ydC5q
cyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgorInVzZSBzdHJpY3QiOworY29uc3QgdGVzdFZhbHVlID0g
T2JqZWN0LmZyZWV6ZShmdW5jdGlvbigpIHt9KTsKKwordGVzdCgoKSA9PiB7CisgIHdpbmRvdy5X
aW5kb3cgPSB0ZXN0VmFsdWU7CisgIGFzc2VydF9mYWxzZSh3aW5kb3cucHJvcGVydHlJc0VudW1l
cmFibGUoIldpbmRvdyIpKTsKKworICB3aW5kb3cuSGlzdG9yeSA9IHRlc3RWYWx1ZTsKKyAgYXNz
ZXJ0X2ZhbHNlKHdpbmRvdy5wcm9wZXJ0eUlzRW51bWVyYWJsZSgiSGlzdG9yeSIpKTsKKworICB3
aW5kb3cuSFRNTERpdkVsZW1lbnQgPSB0ZXN0VmFsdWU7CisgIGFzc2VydF9mYWxzZSh3aW5kb3cu
cHJvcGVydHlJc0VudW1lcmFibGUoIkhUTUxEaXZFbGVtZW50IikpCit9LCAiRGlyZWN0IFtbU2V0
XV0gcHJlc2VydmVzIFtbRW51bWVyYWJsZV1dOiBmYWxzZSBwcm9wZXJ0eSBhdHRyaWJ1dGUiKTsK
KwordGVzdCgoKSA9PiB7CisgIGNvbnN0IGhlaXIgPSBPYmplY3QuY3JlYXRlKHdpbmRvdyk7CisK
KyAgaGVpci5Mb2NhdGlvbiA9IHRlc3RWYWx1ZTsKKyAgYXNzZXJ0X2VxdWFscyhoZWlyLkxvY2F0
aW9uLCB0ZXN0VmFsdWUpOworICBhc3NlcnRfbm90X2VxdWFscyh3aW5kb3cuTG9jYXRpb24sIHRl
c3RWYWx1ZSk7CisKKyAgaGVpci5IVE1MRG9jdW1lbnQgPSB0ZXN0VmFsdWU7CisgIGFzc2VydF9l
cXVhbHMoaGVpci5IVE1MRG9jdW1lbnQsIHRlc3RWYWx1ZSk7CisgIGFzc2VydF9ub3RfZXF1YWxz
KHdpbmRvdy5IVE1MRG9jdW1lbnQsIHRlc3RWYWx1ZSk7CisKKyAgaGVpci5IVE1MUHJlRWxlbWVu
dCA9IHRlc3RWYWx1ZTsKKyAgYXNzZXJ0X2VxdWFscyhoZWlyLkhUTUxQcmVFbGVtZW50LCB0ZXN0
VmFsdWUpOworICBhc3NlcnRfbm90X2VxdWFscyh3aW5kb3cuSFRNTFByZUVsZW1lbnQsIHRlc3RW
YWx1ZSk7Cit9LCAiUHJvdG90eXBlIGNoYWluIFtbU2V0XV0gY3JlYXRlcyBwcm9wZXJ0eSBvbiBy
ZWNlaXZlciIpOworPC9zY3JpcHQ+CkluZGV4OiBMYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2Vi
LXBsYXRmb3JtLXRlc3RzL1dlYklETC9lY21hc2NyaXB0LWJpbmRpbmcvaW50ZXJmYWNlLXByb3Rv
dHlwZS1jb25zdHJ1Y3Rvci1zZXQtcmVjZWl2ZXItZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvV2ViSURML2VjbWFz
Y3JpcHQtYmluZGluZy9pbnRlcmZhY2UtcHJvdG90eXBlLWNvbnN0cnVjdG9yLXNldC1yZWNlaXZl
ci1leHBlY3RlZC50eHQJKHJldmlzaW9uIDI3NTk2NSkKKysrIExheW91dFRlc3RzL2ltcG9ydGVk
L3czYy93ZWItcGxhdGZvcm0tdGVzdHMvV2ViSURML2VjbWFzY3JpcHQtYmluZGluZy9pbnRlcmZh
Y2UtcHJvdG90eXBlLWNvbnN0cnVjdG9yLXNldC1yZWNlaXZlci1leHBlY3RlZC50eHQJKHdvcmtp
bmcgY29weSkKQEAgLTEsNCArMSw0IEBACiAKLVBBU1MgV2luZG93LCBMb2NhdGlvbiwgTmF2aWdh
dG9yLCBIVE1MRG9jdW1lbnQsIGFuZCBIVE1MSGVhZEVsZW1lbnQKLVBBU1MgQWxsIHdpbmRvdy4q
IGNvbnN0cnVjdG9ycworUEFTUyBEaXJlY3QgW1tTZXRdXSBwcmVzZXJ2ZXMgW1tFbnVtZXJhYmxl
XV06IGZhbHNlIHByb3BlcnR5IGF0dHJpYnV0ZQorUEFTUyBQcm90b3R5cGUgY2hhaW4gW1tTZXRd
XSBjcmVhdGVzIHByb3BlcnR5IG9uIHJlY2VpdmVyCiAKSW5kZXg6IExheW91dFRlc3RzL2ltcG9y
dGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvV2ViSURML2VjbWFzY3JpcHQtYmluZGluZy9pbnRl
cmZhY2UtcHJvdG90eXBlLWNvbnN0cnVjdG9yLXNldC1yZWNlaXZlci5odG1sCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvV2ViSURML2Vj
bWFzY3JpcHQtYmluZGluZy9pbnRlcmZhY2UtcHJvdG90eXBlLWNvbnN0cnVjdG9yLXNldC1yZWNl
aXZlci5odG1sCShyZXZpc2lvbiAyNzU5NjUpCisrKyBMYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mv
d2ViLXBsYXRmb3JtLXRlc3RzL1dlYklETC9lY21hc2NyaXB0LWJpbmRpbmcvaW50ZXJmYWNlLXBy
b3RvdHlwZS1jb25zdHJ1Y3Rvci1zZXQtcmVjZWl2ZXIuaHRtbAkod29ya2luZyBjb3B5KQpAQCAt
Niw0MiArNiwzMSBAQAogPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvdGVzdGhhcm5lc3NyZXBvcnQu
anMiPjwvc2NyaXB0PgogPHNjcmlwdD4KICJ1c2Ugc3RyaWN0IjsKK2NvbnN0IHRlc3RWYWx1ZSA9
IE9iamVjdC5mcmVlemUoZnVuY3Rpb24oKSB7fSk7CiAKIHRlc3QoKCkgPT4gewotICB3aW5kb3cu
Y29uc3RydWN0b3IgPSBudWxsOwotICBhc3NlcnRfZXF1YWxzKFdpbmRvdy5wcm90b3R5cGUuY29u
c3RydWN0b3IsIFdpbmRvdyk7Ci0KLSAgbG9jYXRpb24uY29uc3RydWN0b3IgPSBmYWxzZTsKLSAg
YXNzZXJ0X2VxdWFscyhMb2NhdGlvbi5wcm90b3R5cGUuY29uc3RydWN0b3IsIExvY2F0aW9uKTsK
LQotICBuYXZpZ2F0b3IuY29uc3RydWN0b3IgPSAxOwotICBhc3NlcnRfZXF1YWxzKE5hdmlnYXRv
ci5wcm90b3R5cGUuY29uc3RydWN0b3IsIE5hdmlnYXRvcik7CisgIExvY2F0aW9uLnByb3RvdHlw
ZS5jb25zdHJ1Y3RvciA9IHRlc3RWYWx1ZTsKKyAgYXNzZXJ0X2ZhbHNlKExvY2F0aW9uLnByb3Rv
dHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZSgiY29uc3RydWN0b3IiKSk7CiAKLSAgZG9jdW1lbnQu
Y29uc3RydWN0b3IgPSB7fTsKLSAgYXNzZXJ0X2VxdWFscyhIVE1MRG9jdW1lbnQucHJvdG90eXBl
LmNvbnN0cnVjdG9yLCBIVE1MRG9jdW1lbnQpOworICBIVE1MRG9jdW1lbnQucHJvdG90eXBlLmNv
bnN0cnVjdG9yID0gdGVzdFZhbHVlOworICBhc3NlcnRfZmFsc2UoSFRNTERvY3VtZW50LnByb3Rv
dHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZSgiY29uc3RydWN0b3IiKSk7CiAKLSAgZG9jdW1lbnQu
aGVhZC5jb25zdHJ1Y3RvciA9IFtdOwotICBhc3NlcnRfZXF1YWxzKEhUTUxIZWFkRWxlbWVudC5w
cm90b3R5cGUuY29uc3RydWN0b3IsIEhUTUxIZWFkRWxlbWVudCk7Ci19LCAiV2luZG93LCBMb2Nh
dGlvbiwgTmF2aWdhdG9yLCBIVE1MRG9jdW1lbnQsIGFuZCBIVE1MSGVhZEVsZW1lbnQiKTsKKyAg
SFRNTERpdkVsZW1lbnQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gdGVzdFZhbHVlOworICBhc3Nl
cnRfZmFsc2UoSFRNTERpdkVsZW1lbnQucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlKCJj
b25zdHJ1Y3RvciIpKTsKK30sICJEaXJlY3QgW1tTZXRdXSBwcmVzZXJ2ZXMgW1tFbnVtZXJhYmxl
XV06IGZhbHNlIHByb3BlcnR5IGF0dHJpYnV0ZSIpOwogCiB0ZXN0KCgpID0+IHsKLSAgZm9yIChs
ZXQga2V5IG9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHdpbmRvdykpIHsKLSAgICBpZiAo
IS9eW0EtWl0vLnRlc3Qoa2V5KSkgY29udGludWU7CisgIHdpbmRvdy5jb25zdHJ1Y3RvciA9IHRl
c3RWYWx1ZTsKKyAgYXNzZXJ0X2VxdWFscyh3aW5kb3cuY29uc3RydWN0b3IsIHRlc3RWYWx1ZSk7
CisgIGFzc2VydF9lcXVhbHMoV2luZG93LnByb3RvdHlwZS5jb25zdHJ1Y3RvciwgV2luZG93KTsK
KworICBuYXZpZ2F0b3IuY29uc3RydWN0b3IgPSB0ZXN0VmFsdWU7CisgIGFzc2VydF9lcXVhbHMo
bmF2aWdhdG9yLmNvbnN0cnVjdG9yLCB0ZXN0VmFsdWUpOworICBhc3NlcnRfZXF1YWxzKE5hdmln
YXRvci5wcm90b3R5cGUuY29uc3RydWN0b3IsIE5hdmlnYXRvcik7CiAKLSAgICBsZXQgZGVzYyA9
IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iod2luZG93LCBrZXkpOwotICAgIGlmICgh
ZGVzYyB8fCBkZXNjLmVudW1lcmFibGUpIGNvbnRpbnVlOwotICAgIGxldCB7dmFsdWV9ID0gZGVz
YzsKLSAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAiZnVuY3Rpb24iKSBjb250aW51ZTsKLSAgICBs
ZXQge3Byb3RvdHlwZX0gPSB2YWx1ZTsKLSAgICBpZiAoIXByb3RvdHlwZSkgY29udGludWU7Ci0K
LSAgICBsZXQgaGVpciA9IE9iamVjdC5jcmVhdGUocHJvdG90eXBlKTsKLSAgICBsZXQgbmV3Q29u
c3RydWN0b3IgPSBmdW5jdGlvbigpIHt9OwotICAgIGhlaXIuY29uc3RydWN0b3IgPSBuZXdDb25z
dHJ1Y3RvcjsKLQotICAgIGFzc2VydF9ub3RfZXF1YWxzKHByb3RvdHlwZS5jb25zdHJ1Y3Rvciwg
bmV3Q29uc3RydWN0b3IsIGtleSk7Ci0gICAgYXNzZXJ0X293bl9wcm9wZXJ0eShoZWlyLCAiY29u
c3RydWN0b3IiLCBrZXkpOwotICAgIGFzc2VydF9lcXVhbHMoaGVpci5jb25zdHJ1Y3RvciwgbmV3
Q29uc3RydWN0b3IsIGtleSk7Ci0gIH0KLX0sICJBbGwgd2luZG93LiogY29uc3RydWN0b3JzIik7
CisgIGNvbnN0IHNwYW4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7CisgIHNwYW4u
Y29uc3RydWN0b3IgPSB0ZXN0VmFsdWU7CisgIGFzc2VydF9lcXVhbHMoc3Bhbi5jb25zdHJ1Y3Rv
ciwgdGVzdFZhbHVlKTsKKyAgYXNzZXJ0X2VxdWFscyhIVE1MU3BhbkVsZW1lbnQucHJvdG90eXBl
LmNvbnN0cnVjdG9yLCBIVE1MU3BhbkVsZW1lbnQpOworfSwgIlByb3RvdHlwZSBjaGFpbiBbW1Nl
dF1dIGNyZWF0ZXMgcHJvcGVydHkgb24gcmVjZWl2ZXIiKTsKIDwvc2NyaXB0PgpJbmRleDogTGF5
b3V0VGVzdHMvanMvZG9tL3JlZmxlY3Qtc2V0LW9udG8tZG9tLWV4cGVjdGVkLnR4dAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9kb20vcmVmbGVjdC1zZXQtb250by1kb20tZXhwZWN0ZWQu
dHh0CShyZXZpc2lvbiAyNzU5NjUpCisrKyBMYXlvdXRUZXN0cy9qcy9kb20vcmVmbGVjdC1zZXQt
b250by1kb20tZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC05MywxMyArOTMsMTMgQEAg
UEFTUyBSZWZsZWN0LmdldChkb2N1bWVudC5ib2R5LmRhdGFzZXQsIAogUEFTUyBSZWZsZWN0LnNl
dChkb2N1bWVudC5ib2R5LmRhdGFzZXQsICJjb2NvYS1jYXBwdWNjaW5vIiwgInN3ZWV0IikgdGhy
ZXcgZXhjZXB0aW9uIFN5bnRheEVycm9yOiBUaGUgc3RyaW5nIGRpZCBub3QgbWF0Y2ggdGhlIGV4
cGVjdGVkIHBhdHRlcm4uLgogUEFTUyBSZWZsZWN0LnNldChkb2N1bWVudC5ib2R5LmRhdGFzZXQs
IDAsICJzd2VldCIpIGlzIHRydWUKIFBBU1MgUmVmbGVjdC5nZXQoZG9jdW1lbnQuYm9keS5kYXRh
c2V0LCAwKSBpcyAic3dlZXQiCi1ET01TdHJpbmdNYXAgaWdub3JlcyB0aGUgcmVjZWl2ZXIuIFRo
ZXNlIHB1dERlbGVnYXRlIG9ubHkgd29yayB3aXRoIDo6cHV0IChub3QgOjpkZWZpbmVPd25Qcm9w
ZXJ0eSkuIFNvIHRoZXkgYmVoYXZlIGFzIHRoZSBzcGVjaWFsIHNldHRlciwgd2Ugc2hvdWxkIG5v
dCBmYWxsYmFjayB0byB0aGUgT3JkaW5hcnlTZXQuCitET01TdHJpbmdNYXAgZmFsbHMgYmFjayB0
byBPcmRpbmFyeVNldCBpZiByZWNlaXZlciBpcyBhbHRlcmVkLgogUEFTUyBSZWZsZWN0LnNldChk
b2N1bWVudC5ib2R5LmRhdGFzZXQsICJjb2NvYSIsICJvayIsIHJlY2VpdmVyKSBpcyB0cnVlCi1Q
QVNTIFJlZmxlY3QuZ2V0KGRvY3VtZW50LmJvZHkuZGF0YXNldCwgImNvY29hIikgaXMgIm9rIgot
UEFTUyBSZWZsZWN0LmdldChyZWNlaXZlciwgImNvY29hIikgaXMgdW5kZWZpbmVkCitQQVNTIFJl
ZmxlY3QuZ2V0KGRvY3VtZW50LmJvZHkuZGF0YXNldCwgImNvY29hIikgaXMgInN3ZWV0IgorUEFT
UyBSZWZsZWN0LmdldChyZWNlaXZlciwgImNvY29hIikgaXMgIm9rIgogUEFTUyBSZWZsZWN0LnNl
dChkb2N1bWVudC5ib2R5LmRhdGFzZXQsIDAsICJvayIsIHJlY2VpdmVyKSBpcyB0cnVlCi1QQVNT
IFJlZmxlY3QuZ2V0KGRvY3VtZW50LmJvZHkuZGF0YXNldCwgMCkgaXMgIm9rIgotUEFTUyBSZWZs
ZWN0LmdldChyZWNlaXZlciwgMCkgaXMgdW5kZWZpbmVkCitQQVNTIFJlZmxlY3QuZ2V0KGRvY3Vt
ZW50LmJvZHkuZGF0YXNldCwgMCkgaXMgInN3ZWV0IgorUEFTUyBSZWZsZWN0LmdldChyZWNlaXZl
ciwgMCkgaXMgIm9rIgogQ3VzdG9tSW5kZXhlZFNldHRlcgogUEFTUyBSZWZsZWN0LmdldChzZWxl
Y3QsIDApLnZhbHVlIGlzICJjb2NvYSIKIFBBU1MgUmVmbGVjdC5nZXQoc2VsZWN0LCAibGVuZ3Ro
IikgaXMgMwpAQCAtMTExLDEwICsxMTEsMTAgQEAgUEFTUyBSZWZsZWN0LmdldChzZWxlY3QsICJs
ZW5ndGgiKSBpcyA0MgogUEFTUyBSZWZsZWN0LnNldChzZWxlY3QsIDQ0LCBvcHRpb24yKSBpcyB0
cnVlCiBQQVNTIFJlZmxlY3QuZ2V0KHNlbGVjdCwgNDQpLnZhbHVlIGlzICJraWxpbWFuamFybyIK
IFBBU1MgUmVmbGVjdC5zZXQoc2VsZWN0LCAyMCwgIktpbGltYW5qYXJvIikgdGhyZXcgZXhjZXB0
aW9uIFR5cGVFcnJvcjogVHlwZSBlcnJvci4KLUN1c3RvbUluZGV4ZWRTZXR0ZXIgaWdub3JlcyB0
aGUgcmVjZWl2ZXIuIFRoZXNlIG1ldGhvZHMgb25seSB3b3JrIHdpdGggOjpwdXQgKG5vdCA6OmRl
ZmluZU93blByb3BlcnR5KS4gU28gdGhleSBiZWhhdmUgYXMgdGhlIHNwZWNpYWwgc2V0dGVyLCB3
ZSBzaG91bGQgbm90IGZhbGxiYWNrIHRvIHRoZSBPcmRpbmFyeVNldC4KK0N1c3RvbUluZGV4ZWRT
ZXR0ZXIgZmFsbHMgYmFjayB0byBPcmRpbmFyeVNldCBpZiByZWNlaXZlciBpcyBhbHRlcmVkLgog
UEFTUyBSZWZsZWN0LnNldChzZWxlY3QsIDAsIG9wdGlvbjMsIHJlY2VpdmVyKSBpcyB0cnVlCi1Q
QVNTIFJlZmxlY3QuZ2V0KHJlY2VpdmVyLCAwKSBpcyB1bmRlZmluZWQKLVBBU1MgUmVmbGVjdC5n
ZXQoc2VsZWN0LCAwKSBpcyBvcHRpb24zCitQQVNTIFJlZmxlY3QuZ2V0KHJlY2VpdmVyLCAwKSBp
cyBvcHRpb24zCitQQVNTIFJlZmxlY3QuZ2V0KHNlbGVjdCwgMCkgaXMgc2VsZWN0LmNoaWxkcmVu
WzBdCiBQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCiAKIFRFU1QgQ09NUExFVEUKSW5k
ZXg6IExheW91dFRlc3RzL2pzL2RvbS9zY3JpcHQtdGVzdHMvcmVmbGVjdC1zZXQtb250by1kb20u
anMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvZG9tL3NjcmlwdC10ZXN0cy9yZWZsZWN0
LXNldC1vbnRvLWRvbS5qcwkocmV2aXNpb24gMjc1OTY1KQorKysgTGF5b3V0VGVzdHMvanMvZG9t
L3NjcmlwdC10ZXN0cy9yZWZsZWN0LXNldC1vbnRvLWRvbS5qcwkod29ya2luZyBjb3B5KQpAQCAt
MTE2LDE1ICsxMTYsMTUgQEAgc2hvdWxkVGhyb3coYFJlZmxlY3Quc2V0KGRvY3VtZW50LmJvZHku
ZAogc2hvdWxkQmUoYFJlZmxlY3Quc2V0KGRvY3VtZW50LmJvZHkuZGF0YXNldCwgMCwgInN3ZWV0
IilgLCBgdHJ1ZWApOwogc2hvdWxkQmUoYFJlZmxlY3QuZ2V0KGRvY3VtZW50LmJvZHkuZGF0YXNl
dCwgMClgLCBgInN3ZWV0ImApOwogCi1kZWJ1ZygiRE9NU3RyaW5nTWFwIGlnbm9yZXMgdGhlIHJl
Y2VpdmVyLiBUaGVzZSBwdXREZWxlZ2F0ZSBvbmx5IHdvcmsgd2l0aCA6OnB1dCAobm90IDo6ZGVm
aW5lT3duUHJvcGVydHkpLiBTbyB0aGV5IGJlaGF2ZSBhcyB0aGUgc3BlY2lhbCBzZXR0ZXIsIHdl
IHNob3VsZCBub3QgZmFsbGJhY2sgdG8gdGhlIE9yZGluYXJ5U2V0LiIpOworZGVidWcoIkRPTVN0
cmluZ01hcCBmYWxscyBiYWNrIHRvIE9yZGluYXJ5U2V0IGlmIHJlY2VpdmVyIGlzIGFsdGVyZWQu
Iik7CiB2YXIgcmVjZWl2ZXIgPSB7fTsKIHNob3VsZEJlKGBSZWZsZWN0LnNldChkb2N1bWVudC5i
b2R5LmRhdGFzZXQsICJjb2NvYSIsICJvayIsIHJlY2VpdmVyKWAsIGB0cnVlYCk7Ci1zaG91bGRC
ZShgUmVmbGVjdC5nZXQoZG9jdW1lbnQuYm9keS5kYXRhc2V0LCAiY29jb2EiKWAsIGAib2siYCk7
Ci1zaG91bGRCZShgUmVmbGVjdC5nZXQocmVjZWl2ZXIsICJjb2NvYSIpYCwgYHVuZGVmaW5lZGAp
Oworc2hvdWxkQmUoYFJlZmxlY3QuZ2V0KGRvY3VtZW50LmJvZHkuZGF0YXNldCwgImNvY29hIilg
LCBgInN3ZWV0ImApOworc2hvdWxkQmUoYFJlZmxlY3QuZ2V0KHJlY2VpdmVyLCAiY29jb2EiKWAs
IGAib2siYCk7CiB2YXIgcmVjZWl2ZXIgPSB7fTsKIHNob3VsZEJlKGBSZWZsZWN0LnNldChkb2N1
bWVudC5ib2R5LmRhdGFzZXQsIDAsICJvayIsIHJlY2VpdmVyKWAsIGB0cnVlYCk7Ci1zaG91bGRC
ZShgUmVmbGVjdC5nZXQoZG9jdW1lbnQuYm9keS5kYXRhc2V0LCAwKWAsIGAib2siYCk7Ci1zaG91
bGRCZShgUmVmbGVjdC5nZXQocmVjZWl2ZXIsIDApYCwgYHVuZGVmaW5lZGApOworc2hvdWxkQmUo
YFJlZmxlY3QuZ2V0KGRvY3VtZW50LmJvZHkuZGF0YXNldCwgMClgLCBgInN3ZWV0ImApOworc2hv
dWxkQmUoYFJlZmxlY3QuZ2V0KHJlY2VpdmVyLCAwKWAsIGAib2siYCk7CiAKIGRlYnVnKCJDdXN0
b21JbmRleGVkU2V0dGVyIik7CiB2YXIgc2VsZWN0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo
InRlc3RTZWxlY3QiKTsKQEAgLTE0NiwxMSArMTQ2LDExIEBAIHNob3VsZEJlKGBSZWZsZWN0LnNl
dChzZWxlY3QsIDQ0LCBvcHRpb24KIHNob3VsZEJlKGBSZWZsZWN0LmdldChzZWxlY3QsIDQ0KS52
YWx1ZWAsIGAia2lsaW1hbmphcm8iYCk7CiBzaG91bGRUaHJvdyhgUmVmbGVjdC5zZXQoc2VsZWN0
LCAyMCwgIktpbGltYW5qYXJvIilgKTsKIAotZGVidWcoIkN1c3RvbUluZGV4ZWRTZXR0ZXIgaWdu
b3JlcyB0aGUgcmVjZWl2ZXIuIFRoZXNlIG1ldGhvZHMgb25seSB3b3JrIHdpdGggOjpwdXQgKG5v
dCA6OmRlZmluZU93blByb3BlcnR5KS4gU28gdGhleSBiZWhhdmUgYXMgdGhlIHNwZWNpYWwgc2V0
dGVyLCB3ZSBzaG91bGQgbm90IGZhbGxiYWNrIHRvIHRoZSBPcmRpbmFyeVNldC4iKTsKK2RlYnVn
KCJDdXN0b21JbmRleGVkU2V0dGVyIGZhbGxzIGJhY2sgdG8gT3JkaW5hcnlTZXQgaWYgcmVjZWl2
ZXIgaXMgYWx0ZXJlZC4iKTsKIHZhciBvcHRpb24zID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgi
b3B0aW9uIik7CiBvcHRpb24zLnZhbHVlID0gInJhYmJpdCI7CiBvcHRpb24zLnRleHRDb250ZW50
ID0gIlJhYmJpdCI7CiB2YXIgcmVjZWl2ZXIgPSB7fTsKIHNob3VsZEJlKGBSZWZsZWN0LnNldChz
ZWxlY3QsIDAsIG9wdGlvbjMsIHJlY2VpdmVyKWAsIGB0cnVlYCk7Ci1zaG91bGRCZShgUmVmbGVj
dC5nZXQocmVjZWl2ZXIsIDApYCwgYHVuZGVmaW5lZGApOwotc2hvdWxkQmUoYFJlZmxlY3QuZ2V0
KHNlbGVjdCwgMClgLCBgb3B0aW9uM2ApOworc2hvdWxkQmUoYFJlZmxlY3QuZ2V0KHJlY2VpdmVy
LCAwKWAsIGBvcHRpb24zYCk7CitzaG91bGRCZShgUmVmbGVjdC5nZXQoc2VsZWN0LCAwKWAsIGBz
ZWxlY3QuY2hpbGRyZW5bMF1gKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>426668</attachid>
            <date>2021-04-21 04:04:16 -0700</date>
            <delta_ts>2021-04-23 09:10:00 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-217916-20210421140414.patch</filename>
            <type>text/plain</type>
            <size>175662</size>
            <attacher name="Alexey Shvayka">ashvayka</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyNzYzNTUpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDI1IEBACisyMDIxLTA0LTIxICBBbGV4ZXkgU2h2YXlrYSAgPHNodmFpa2FsZXNo
QGdtYWlsLmNvbT4KKworICAgICAgICBbSlNDXSBPcmRpbmFyeVNldCBzaG91bGQgaW52b2tlIGN1
c3RvbSBbW1NldF1dIG1ldGhvZHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIxNzkxNgorCisgICAgICAgIFJldmlld2VkIGJ5IFl1c3VrZSBTdXp1a2ku
CisKKyAgICAgICAgKiBtaWNyb2JlbmNobWFya3MvcHV0LXNsb3ctbm8tY2FjaGUtYXJyYXkuanM6
IEFkZGVkLgorICAgICAgICAqIG1pY3JvYmVuY2htYXJrcy9wdXQtc2xvdy1uby1jYWNoZS1mdW5j
dGlvbi5qczogQWRkZWQuCisgICAgICAgICogbWljcm9iZW5jaG1hcmtzL3B1dC1zbG93LW5vLWNh
Y2hlLWpzLXByb3h5LmpzOiBBZGRlZC4KKyAgICAgICAgKiBtaWNyb2JlbmNobWFya3MvcHV0LXNs
b3ctbm8tY2FjaGUtbG9uZy1wcm90b3R5cGUtY2hhaW4uanM6IEFkZGVkLgorICAgICAgICAqIG1p
Y3JvYmVuY2htYXJrcy9wdXQtc2xvdy1uby1jYWNoZS5qczogQWRkZWQuCisgICAgICAgICogbWlj
cm9iZW5jaG1hcmtzL3JlZmxlY3Qtc2V0LXdpdGgtcmVjZWl2ZXIuanM6IEFkZGVkLgorICAgICAg
ICAqIHN0cmVzcy9jdXN0b20tZ2V0LXNldC1wcm90by1jaGFpbi1wdXQuanM6CisgICAgICAgICog
c3RyZXNzL21vZHVsZS1uYW1lc3BhY2UtYWNjZXNzLXNldC1mYWlscy5qczogQWRkZWQuCisgICAg
ICAgICogc3RyZXNzL3Byb3RvLWNoYWluLXB1dC1tZXRob2Qtb3ZlcnJpZGUuanM6IEFkZGVkLgor
ICAgICAgICAqIHN0cmVzcy9wcm90by1jaGFpbi1wdXQtbm9uLXJlaWZpZWQtc3RhdGljLWZ1bmN0
aW9uLmpzOiBBZGRlZC4KKyAgICAgICAgKiBzdHJlc3MvcHV0LXRvLXByaW1pdGl2ZS1ub24tcmVp
ZmllZC1zdGF0aWMtY3VzdG9tLmpzOiBBZGRlZC4KKyAgICAgICAgKiBzdHJlc3MvcHV0LXRvLXBy
aW1pdGl2ZS5qczogQWRkZWQuCisgICAgICAgICogc3RyZXNzL3JlZmxlY3Qtc2V0LW5vbi1yZWlm
aWVkLXN0YXRpYy1hY2Nlc3Nvci5qczogQWRkZWQuCisgICAgICAgICogc3RyZXNzL3R5cGVkLWFy
cmF5LWNhbm9uaWNhbC1udW1lcmljLWluZGV4LXN0cmluZy1zZXQuanM6IEFkZGVkLgorCiAyMDIx
LTA0LTIwICBQYXVsbyBNYXRvcyAgPHBtYXRvc0BpZ2FsaWEuY29tPgogCiAgICAgICAgIFVuc2tp
cCBjb3VwbGUgb2YgdGVzdHMgZm9yIGFybXY3bCBhbmQgbWlwcwpJbmRleDogSlNUZXN0cy9taWNy
b2JlbmNobWFya3MvcHV0LXNsb3ctbm8tY2FjaGUtYXJyYXkuanMKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNU
ZXN0cy9taWNyb2JlbmNobWFya3MvcHV0LXNsb3ctbm8tY2FjaGUtYXJyYXkuanMJKG5vbmV4aXN0
ZW50KQorKysgSlNUZXN0cy9taWNyb2JlbmNobWFya3MvcHV0LXNsb3ctbm8tY2FjaGUtYXJyYXku
anMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2IEBACisoZnVuY3Rpb24oKSB7CisgICAgdmFy
IGFycmF5ID0gW107CisKKyAgICBmb3IgKHZhciBqID0gMDsgaiA8IDFlNTsgaisrKQorICAgICAg
ICBhcnJheVsiZm9vIiArIGpdID0gajsKK30pKCk7CkluZGV4OiBKU1Rlc3RzL21pY3JvYmVuY2ht
YXJrcy9wdXQtc2xvdy1uby1jYWNoZS1mdW5jdGlvbi5qcwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3Rz
L21pY3JvYmVuY2htYXJrcy9wdXQtc2xvdy1uby1jYWNoZS1mdW5jdGlvbi5qcwkobm9uZXhpc3Rl
bnQpCisrKyBKU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9wdXQtc2xvdy1uby1jYWNoZS1mdW5jdGlv
bi5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDggQEAKKyhmdW5jdGlvbigpIHsKKyAgICBj
bGFzcyBBIHt9CisgICAgY2xhc3MgQiBleHRlbmRzIEEge30KKyAgICBjbGFzcyBDIGV4dGVuZHMg
QiB7fQorCisgICAgZm9yICh2YXIgaiA9IDA7IGogPCAxZTU7IGorKykKKyAgICAgICAgQ1siZm9v
IiArIGpdID0gajsKK30pKCk7CkluZGV4OiBKU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9wdXQtc2xv
dy1uby1jYWNoZS1qcy1wcm94eS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL21pY3JvYmVuY2ht
YXJrcy9wdXQtc2xvdy1uby1jYWNoZS1qcy1wcm94eS5qcwkobm9uZXhpc3RlbnQpCisrKyBKU1Rl
c3RzL21pY3JvYmVuY2htYXJrcy9wdXQtc2xvdy1uby1jYWNoZS1qcy1wcm94eS5qcwkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDYgQEAKKyhmdW5jdGlvbigpIHsKKyAgICB2YXIgcHJveHkgPSAk
dm0uY3JlYXRlUHJveHkoeyBzZXQgZm9vKF92KSB7fSB9KTsKKworICAgIGZvciAodmFyIGogPSAw
OyBqIDwgMWU1OyBqKyspCisgICAgICAgIHByb3h5WyJmb28iICsgal0gPSBqOworfSkoKTsKSW5k
ZXg6IEpTVGVzdHMvbWljcm9iZW5jaG1hcmtzL3B1dC1zbG93LW5vLWNhY2hlLWxvbmctcHJvdG90
eXBlLWNoYWluLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvbWljcm9iZW5jaG1hcmtzL3B1dC1z
bG93LW5vLWNhY2hlLWxvbmctcHJvdG90eXBlLWNoYWluLmpzCShub25leGlzdGVudCkKKysrIEpT
VGVzdHMvbWljcm9iZW5jaG1hcmtzL3B1dC1zbG93LW5vLWNhY2hlLWxvbmctcHJvdG90eXBlLWNo
YWluLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOCBAQAorKGZ1bmN0aW9uKCkgeworICAg
IHZhciBiYXNlID0geyBzZXQgZm9vKF92KSB7fSB9OworICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
MWUzOyBpKyspCisgICAgICAgIGJhc2UgPSBPYmplY3QuY3JlYXRlKGJhc2UpOworCisgICAgZm9y
ICh2YXIgaiA9IDA7IGogPCAzZTM7IGorKykKKyAgICAgICAgYmFzZVsiZm9vIiArIGpdID0gajsK
K30pKCk7CkluZGV4OiBKU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9wdXQtc2xvdy1uby1jYWNoZS5q
cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9wdXQtc2xvdy1uby1jYWNo
ZS5qcwkobm9uZXhpc3RlbnQpCisrKyBKU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9wdXQtc2xvdy1u
by1jYWNoZS5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYgQEAKKyhmdW5jdGlvbigpIHsK
KyAgICB2YXIgYmFzZSA9IHsgc2V0IGZvbyhfdikge30gfTsKKworICAgIGZvciAodmFyIGogPSAw
OyBqIDwgMWU1OyBqKyspCisgICAgICAgIGJhc2VbImZvbyIgKyBqXSA9IGo7Cit9KSgpOwpJbmRl
eDogSlNUZXN0cy9taWNyb2JlbmNobWFya3MvcmVmbGVjdC1zZXQtd2l0aC1yZWNlaXZlci5qcwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBKU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9yZWZsZWN0LXNldC13aXRoLXJl
Y2VpdmVyLmpzCShub25leGlzdGVudCkKKysrIEpTVGVzdHMvbWljcm9iZW5jaG1hcmtzL3JlZmxl
Y3Qtc2V0LXdpdGgtcmVjZWl2ZXIuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2IEBACiso
ZnVuY3Rpb24oKSB7CisgICAgdmFyIHRhcmdldCA9IG5ldyAoY2xhc3Mge30pOworCisgICAgZm9y
ICh2YXIgaSA9IDA7IGkgPCAxZTY7IGkrKykKKyAgICAgICAgUmVmbGVjdC5zZXQodGFyZ2V0LCAi
Zm9vIiwgMSwge30pOworfSkoKTsKSW5kZXg6IEpTVGVzdHMvc3RyZXNzL2N1c3RvbS1nZXQtc2V0
LXByb3RvLWNoYWluLXB1dC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0cmVzcy9jdXN0b20t
Z2V0LXNldC1wcm90by1jaGFpbi1wdXQuanMJKHJldmlzaW9uIDI3NjM1NSkKKysrIEpTVGVzdHMv
c3RyZXNzL2N1c3RvbS1nZXQtc2V0LXByb3RvLWNoYWluLXB1dC5qcwkod29ya2luZyBjb3B5KQpA
QCAtMzcsOCArMzcsOCBAQCBmdW5jdGlvbiBnZXRPYmplY3RzKCkgewogICAgICAgICAuLi5wcmlt
aXRpdmVzLm1hcChPYmplY3QpLAogICAgICAgICBPYmplY3QuY3JlYXRlKGN1c3RvbVRlc3RHZXR0
ZXJTZXR0ZXIpLAogICAgICAgICBPYmplY3QuY3JlYXRlKE9iamVjdC5jcmVhdGUoY3VzdG9tVGVz
dEdldHRlclNldHRlcikpLAotICAgICAgICAvLyBGSVhNRTogb3JkaW5hcnlTZXRTbG93KCkgc2hv
dWxkIGhhbmRsZSBDdXN0b217QWNjZXNzb3IsVmFsdWV9IGRlc2NyaXB0b3JzLgotICAgICAgICAv
LyBuZXcgUHJveHkoY3VzdG9tVGVzdEdldHRlclNldHRlciwge30pLAorICAgICAgICBPYmplY3Qu
Y3JlYXRlKG5ldyBQcm94eShjdXN0b21UZXN0R2V0dGVyU2V0dGVyLCB7fSkpLAorICAgICAgICBP
YmplY3QuY3JlYXRlKCR2bS5jcmVhdGVQcm94eShjdXN0b21UZXN0R2V0dGVyU2V0dGVyKSksCiAg
ICAgXTsKIH0KIApAQCAtODUsMTMgKzg1LDEzIEBAIGZ1bmN0aW9uIGdldEJhc2VzKCkgewogfSko
KTsKIAogLy8gQ3VzdG9tVmFsdWU6IHNldHRlciByZXR1cm5zIHxmYWxzZXwKKy8vIEZJWE1FOiBP
bmNlIGxlZ2FjeSBSZWdFeHAgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkLCB0aGVyZSB3b3VsZCBi
ZSBubyB1c2UgY2FzZSBmb3IgY2FsbGluZyBDdXN0b21WYWx1ZSBzZXR0ZXIgaWYgcmVjZWl2ZXIg
aXMgYWx0ZXJlZC4KICgoKSA9PiB7CiAgICAgZm9yIChsZXQgYmFzZSBvZiBnZXRCYXNlcygpKSB7
CiAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTAwOyArK2kpCiAgICAgICAgICAgICBiYXNl
LmN1c3RvbVZhbHVlID0gMTsKLSAgICAgICAgLy8gVGhpcyBpcyB3ZWlyZCwgYnV0IGl0IGlzbid0
IGV4cG9zZWQgdG8gdXNlcmxhbmQgY29kZToKICAgICAgICAgYXNzZXJ0KCFiYXNlLmhhc093blBy
b3BlcnR5KCJjdXN0b21WYWx1ZSIpKTsKLSAgICAgICAgYXNzZXJ0KCFSZWZsZWN0LnNldChPYmpl
Y3QoYmFzZSksICJjdXN0b21WYWx1ZSIsIDEpKTsKKyAgICAgICAgYXNzZXJ0KFJlZmxlY3Quc2V0
KE9iamVjdChiYXNlKSwgImN1c3RvbVZhbHVlIiwgMSkpOwogICAgIH0KIH0pKCk7CiAKSW5kZXg6
IEpTVGVzdHMvc3RyZXNzL21vZHVsZS1uYW1lc3BhY2UtYWNjZXNzLXNldC1mYWlscy5qcwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBKU1Rlc3RzL3N0cmVzcy9tb2R1bGUtbmFtZXNwYWNlLWFjY2Vzcy1zZXQtZmFp
bHMuanMJKG5vbmV4aXN0ZW50KQorKysgSlNUZXN0cy9zdHJlc3MvbW9kdWxlLW5hbWVzcGFjZS1h
Y2Nlc3Mtc2V0LWZhaWxzLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTAgQEAKK2NvbnN0
IGV4aXN0aW5nS2V5cyA9IFsiY29jb2EiLCAidGVzdCIsIFN5bWJvbC50b1N0cmluZ1RhZ107Citj
b25zdCBub25FeGlzdGluZ0tleXMgPSBbImZvbyIsIFN5bWJvbCgiZm9vIildOworY29uc3QgYWxs
S2V5cyA9IFsuLi5leGlzdGluZ0tleXMsIC4uLm5vbkV4aXN0aW5nS2V5c107Citjb25zdCB0ZXN0
VmFsdWUgPSBPYmplY3QuZnJlZXplKHt9KTsKKworZnVuY3Rpb24gYXNzZXJ0KHgsIGtleSkgewor
ICAgIGlmICgheCkKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBCYWQgYXNzZXJ0aW9uISBLZXk6
ICR7U3RyaW5nKGtleSl9YCk7Cit9CisKK2Z1bmN0aW9uIHNob3VsZFRocm93KGZ1bmMsIGVycm9y
TWVzc2FnZSkgeworICAgIGxldCBlcnJvclRocm93biA9IGZhbHNlOworICAgIHRyeSB7CisgICAg
ICAgIGZ1bmMoKTsKKyAgICB9IGNhdGNoIChlcnJvcikgeworICAgICAgICBlcnJvclRocm93biA9
IHRydWU7CisgICAgICAgIGlmIChTdHJpbmcoZXJyb3IpICE9PSBlcnJvck1lc3NhZ2UpCisgICAg
ICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEJhZCBlcnJvcjogJHtlcnJvcn1gKTsKKyAgICB9Cisg
ICAgaWYgKCFlcnJvclRocm93bikKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJEaWRuJ3QgdGhy
b3chIik7Cit9CisKK2Z1bmN0aW9uIHRlc3REaXJlY3RTZXQobnMpIHsKKyAgICBmb3IgKGNvbnN0
IGtleSBvZiBhbGxLZXlzKSB7CisgICAgICAgIG5zW2tleV0gPSB0ZXN0VmFsdWU7CisgICAgICAg
IGFzc2VydChuc1trZXldICE9PSB0ZXN0VmFsdWUsIGtleSk7CisKKyAgICAgICAgc2hvdWxkVGhy
b3coKCkgPT4geyAidXNlIHN0cmljdCI7IG5zW2tleV0gPSB0ZXN0VmFsdWU7IH0sICJUeXBlRXJy
b3I6IEF0dGVtcHRlZCB0byBhc3NpZ24gdG8gcmVhZG9ubHkgcHJvcGVydHkuIik7CisgICAgICAg
IGFzc2VydChuc1trZXldICE9PSB0ZXN0VmFsdWUsIGtleSk7CisgICAgfQorfQorCitmdW5jdGlv
biB0ZXN0UHJvdG90eXBlQ2hhaW5TZXQobnMpIHsKKyAgICBmb3IgKGNvbnN0IGtleSBvZiBhbGxL
ZXlzKSB7CisgICAgICAgIGNvbnN0IGhlaXIgPSBPYmplY3QuY3JlYXRlKG5zKTsKKworICAgICAg
ICBoZWlyW2tleV0gPSB0ZXN0VmFsdWU7CisgICAgICAgIGFzc2VydChPYmplY3QuZ2V0T3duUHJv
cGVydHlEZXNjcmlwdG9yKGhlaXIsIGtleSkgPT09IHVuZGVmaW5lZCwga2V5KTsKKworICAgICAg
ICBzaG91bGRUaHJvdygoKSA9PiB7ICJ1c2Ugc3RyaWN0IjsgaGVpcltrZXldID0gdGVzdFZhbHVl
OyB9LCAiVHlwZUVycm9yOiBBdHRlbXB0ZWQgdG8gYXNzaWduIHRvIHJlYWRvbmx5IHByb3BlcnR5
LiIpOworICAgICAgICBhc3NlcnQoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihoZWly
LCBrZXkpID09PSB1bmRlZmluZWQsIGtleSk7CisgICAgfQorfQorCitmdW5jdGlvbiB0ZXN0UmVm
bGVjdFNldChucykgeworICAgICJ1c2Ugc3RyaWN0IjsKKworICAgIGZvciAoY29uc3QgZXhpc3Rp
bmdLZXkgb2YgZXhpc3RpbmdLZXlzKSB7CisgICAgICAgIGFzc2VydCghUmVmbGVjdC5zZXQobnMs
IGV4aXN0aW5nS2V5LCB0ZXN0VmFsdWUpLCBleGlzdGluZ0tleSk7CisKKyAgICAgICAgY29uc3Qg
dGFyZ2V0ID0ge307CisgICAgICAgIGFzc2VydCghUmVmbGVjdC5zZXQodGFyZ2V0LCBleGlzdGlu
Z0tleSwgdGVzdFZhbHVlLCBucyksIGV4aXN0aW5nS2V5KTsKKworICAgICAgICBjb25zdCBpc1dy
aXRhYmxlID0gZXhpc3RpbmdLZXkgIT09IFN5bWJvbC50b1N0cmluZ1RhZzsKKyAgICAgICAgYXNz
ZXJ0KFJlZmxlY3Quc2V0KHRhcmdldCwgZXhpc3RpbmdLZXksIG5zW2V4aXN0aW5nS2V5XSwgbnMp
ID09PSBpc1dyaXRhYmxlLCBleGlzdGluZ0tleSk7CisKKyAgICAgICAgYXNzZXJ0KG5zW2V4aXN0
aW5nS2V5XSAhPT0gdGVzdFZhbHVlLCBleGlzdGluZ0tleSk7CisgICAgICAgIGFzc2VydCh0YXJn
ZXRbZXhpc3RpbmdLZXldID09PSB1bmRlZmluZWQsIGV4aXN0aW5nS2V5KTsKKyAgICB9CisKKyAg
ICBmb3IgKGNvbnN0IG5vbkV4aXN0aW5nS2V5IG9mIG5vbkV4aXN0aW5nS2V5cykgeworICAgICAg
ICBhc3NlcnQoIVJlZmxlY3Quc2V0KG5zLCBub25FeGlzdGluZ0tleSwgdGVzdFZhbHVlKSwgbm9u
RXhpc3RpbmdLZXkpOworICAgICAgICBhc3NlcnQobnNbbm9uRXhpc3RpbmdLZXldID09PSB1bmRl
ZmluZWQsIG5vbkV4aXN0aW5nS2V5KTsKKworICAgICAgICBjb25zdCB0YXJnZXQgPSB7fTsKKyAg
ICAgICAgYXNzZXJ0KCFSZWZsZWN0LnNldCh0YXJnZXQsIG5vbkV4aXN0aW5nS2V5LCB0ZXN0VmFs
dWUsIG5zKSwgbm9uRXhpc3RpbmdLZXkpOworICAgICAgICBhc3NlcnQodGFyZ2V0W25vbkV4aXN0
aW5nS2V5XSA9PT0gdW5kZWZpbmVkLCBub25FeGlzdGluZ0tleSk7CisgICAgfQorCisgICAgZm9y
IChjb25zdCBrZXkgb2YgYWxsS2V5cykgeworICAgICAgICBjb25zdCB0YXJnZXQgPSBPYmplY3Qu
Y3JlYXRlKG5zKTsKKyAgICAgICAgY29uc3QgcmVjZWl2ZXIgPSB7fTsKKworICAgICAgICBhc3Nl
cnQoIVJlZmxlY3Quc2V0KHRhcmdldCwga2V5LCB0ZXN0VmFsdWUsIHJlY2VpdmVyKSwga2V5KTsK
KyAgICAgICAgYXNzZXJ0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBr
ZXkpID09PSB1bmRlZmluZWQsIGtleSk7CisgICAgICAgIGFzc2VydChPYmplY3QuZ2V0T3duUHJv
cGVydHlEZXNjcmlwdG9yKHJlY2VpdmVyLCBrZXkpID09PSB1bmRlZmluZWQsIGtleSk7CisgICAg
fQorfQorCitpbXBvcnQoIi4vcmVzb3VyY2VzL21vZHVsZS1uYW1lc3BhY2UtYWNjZXNzLmpzIiku
dGhlbihucyA9PiB7CisgICAgdGVzdERpcmVjdFNldChucyk7CisgICAgdGVzdFByb3RvdHlwZUNo
YWluU2V0KG5zKTsKKyAgICB0ZXN0UmVmbGVjdFNldChucyk7Cit9KS5jYXRjaChlcnIgPT4gewor
ICAgIHByaW50KGAhISEgJHtlcnJ9XG4ke2Vyci5zdGFja31gKTsKKyAgICAkdm0uYWJvcnQoKTsK
K30pOworCitkcmFpbk1pY3JvdGFza3MoKTsKSW5kZXg6IEpTVGVzdHMvc3RyZXNzL3Byb3RvLWNo
YWluLXB1dC1tZXRob2Qtb3ZlcnJpZGUuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3Mv
cHJvdG8tY2hhaW4tcHV0LW1ldGhvZC1vdmVycmlkZS5qcwkobm9uZXhpc3RlbnQpCisrKyBKU1Rl
c3RzL3N0cmVzcy9wcm90by1jaGFpbi1wdXQtbWV0aG9kLW92ZXJyaWRlLmpzCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMTQyIEBACitjb25zdCBURVNUX1ZBTFVFID0gMTA2MjYzMDcxMzsgLy8g
QXJyYXkncyAibGVuZ3RoIiBpcyByZXF1aXJlZCB0byBiZSBpbnQzMgorCit0ZXN0U2V0UmVzdWx0
KFsxLCAyXSwgImxlbmd0aCIsIHRydWUpOwordGVzdFNldFJlc3VsdCgKKyAgICBPYmplY3QuZGVm
aW5lUHJvcGVydHkobmV3IEFycmF5LCAibGVuZ3RoIiwgeyB3cml0YWJsZTogZmFsc2UgfSksCisg
ICAgImxlbmd0aCIsCisgICAgZmFsc2UsCispOworCit0ZXN0U2V0UmVzdWx0KG5ldyBTdHJpbmcs
ICJsZW5ndGgiLCBmYWxzZSk7Cit0ZXN0U2V0UmVzdWx0KG5ldyBSZWdFeHAsICJsYXN0SW5kZXgi
LCB0cnVlKTsKK3Rlc3RTZXRSZXN1bHQoCisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KC8oPzop
L2csICJsYXN0SW5kZXgiLCB7IHdyaXRhYmxlOiBmYWxzZSB9KSwKKyAgICAibGFzdEluZGV4IiwK
KyAgICBmYWxzZSwKKyk7CisKK2ZvciAoY29uc3Qga2V5IG9mIFsibGluZSIsICJjb2x1bW4iLCAi
c291cmNlVVJMIiwgInN0YWNrIl0pCisgICAgdGVzdFNldFJlc3VsdChuZXcgRXJyb3IsIGtleSwg
dHJ1ZSk7CisKK2NvbnN0IG1hcHBlZEFyZ3VtZW50cyA9IChmdW5jdGlvbihhLCBiKSB7IHJldHVy
biBhcmd1bWVudHM7IH0pKDEsIDIpOwordGVzdFNldFJlc3VsdChtYXBwZWRBcmd1bWVudHMsICJj
YWxsZWUiLCB0cnVlKTsKK3Rlc3RTZXRSZXN1bHQobWFwcGVkQXJndW1lbnRzLCAibGVuZ3RoIiwg
dHJ1ZSk7Cit0ZXN0U2V0UmVzdWx0KG1hcHBlZEFyZ3VtZW50cywgU3ltYm9sLml0ZXJhdG9yLCB0
cnVlKTsKKworY29uc3QgdW5tYXBwZWRBcmd1bWVudHMgPSAoZnVuY3Rpb24oKSB7ICJ1c2Ugc3Ry
aWN0IjsgcmV0dXJuIGFyZ3VtZW50czsgfSkoKTsKK3Rlc3RTZXRSZXN1bHQodW5tYXBwZWRBcmd1
bWVudHMsICJsZW5ndGgiLCB0cnVlKTsKK3Rlc3RTZXRSZXN1bHQodW5tYXBwZWRBcmd1bWVudHMs
IFN5bWJvbC5pdGVyYXRvciwgdHJ1ZSk7CisKK3ZhciBmb287CitmdW5jdGlvbiBiYXIoKSB7fQor
Zm9yIChjb25zdCBrZXkgb2YgWyJmb28iLCAiYmFyIiwgInBhcnNlSW50Il0pCisgICAgdGVzdFNl
dFJlc3VsdChnbG9iYWxUaGlzLCBrZXksIHRydWUpOworCitmb3IgKGNvbnN0IGtleSBvZiBbIklu
ZmluaXR5IiwgIk5hTiIsICJ1bmRlZmluZWQiXSkKKyAgICB0ZXN0U2V0UmVzdWx0KGdsb2JhbFRo
aXMsIGtleSwgZmFsc2UpOworCitmb3IgKGNvbnN0IGtleSBvZiBbIm5hbWUiLCAibGVuZ3RoIl0p
IHsKKyAgICB0ZXN0U2V0UmVzdWx0KGZ1bmN0aW9uKCkge30uYmluZCgpLCBrZXksIGZhbHNlKTsK
KyAgICB0ZXN0U2V0UmVzdWx0KAorICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZnVuY3Rp
b24oKSB7fSwga2V5LCB7IHdyaXRhYmxlOiB0cnVlIH0pLAorICAgICAgICBrZXksCisgICAgICAg
IHRydWUsCisgICAgKTsKKworICAgIHRlc3RTZXRSZXN1bHQoKCkgPT4geyAidXNlIHN0cmljdCI7
IH0sIGtleSwgZmFsc2UpOworICAgIHRlc3RTZXRSZXN1bHQoCisgICAgICAgIE9iamVjdC5kZWZp
bmVQcm9wZXJ0eShwYXJzZUZsb2F0LCBrZXksIHsgd3JpdGFibGU6IHRydWUgfSksCisgICAgICAg
IGtleSwKKyAgICAgICAgdHJ1ZSwKKyAgICApOworfQorCit0ZXN0U2V0UmVzdWx0KGZ1bmN0aW9u
KCkgeyAidXNlIHN0cmljdCI7IH0sICJwcm90b3R5cGUiLCB0cnVlKTsKK3Rlc3RTZXRSZXN1bHQo
CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGZ1bmN0aW9uKCkge30sICJwcm90b3R5cGUiLCB7
IHdyaXRhYmxlOiBmYWxzZSB9KSwKKyAgICAicHJvdG90eXBlIiwKKyAgICBmYWxzZSwKKyk7CisK
K3Rlc3RTZXRSZXN1bHQoZnVuY3Rpb24oKSB7fSwgImFyZ3VtZW50cyIsIGZhbHNlKTsKK3Rlc3RT
ZXRSZXN1bHQoZnVuY3Rpb24oKSB7fSwgImNhbGxlciIsIGZhbHNlKTsKKworLy8gPT09IGhhcm5l
c3MgPT09CisKK2Z1bmN0aW9uIHRlc3RTZXRSZXN1bHQodGFyZ2V0LCBrZXksIGV4cGVjdGVkUmVz
dWx0KSB7CisgICAgbGV0IGNsZWFuVXAgPSBwdXRTZXR0ZXJPblByb3RvdHlwZSh0YXJnZXQsIGtl
eSwgKCkgPT4ge30pOworCisgICAgZm9yIChjb25zdCBwcmltaXRpdmUgb2YgW3RydWUsIDEsICJm
b28iLCBTeW1ib2woKSwgMG5dKSB7CisgICAgICAgIGNvbnN0IHByaW1pdGl2ZVByb3RvdHlwZSA9
IE9iamVjdC5nZXRQcm90b3R5cGVPZihwcmltaXRpdmUpOworICAgICAgICBPYmplY3Quc2V0UHJv
dG90eXBlT2YocHJpbWl0aXZlUHJvdG90eXBlLCB0YXJnZXQpOworICAgICAgICB0ZXN0U2V0UmVz
dWx0SW50ZXJuYWwodGFyZ2V0LCBrZXksIHByaW1pdGl2ZSwgZmFsc2UpOworICAgICAgICBPYmpl
Y3Quc2V0UHJvdG90eXBlT2YocHJpbWl0aXZlUHJvdG90eXBlLCBPYmplY3QucHJvdG90eXBlKTsK
KyAgICB9CisKKyAgICBjbGVhblVwKCk7CisgICAgY2xlYW5VcCA9IHB1dFNldHRlck9uUHJvdG90
eXBlKHRhcmdldCwga2V5LCAoKSA9PiB7CisgICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtTdHJp
bmcoa2V5KX0gc2V0dGVyIHNob3VsZCBiZSB1bnJlYWNoYWJsZSFgKTsKKyAgICB9KTsKKworICAg
IGZvciAoY29uc3QgcmVjZWl2ZXIgb2YgWworICAgICAgICBPYmplY3QuY3JlYXRlKHRhcmdldCks
CisgICAgICAgIE9iamVjdC5jcmVhdGUoT2JqZWN0LmNyZWF0ZSh0YXJnZXQpKSwKKyAgICAgICAg
bmV3IFByb3h5KHRhcmdldCwge30pLAorICAgICAgICBuZXcgUHJveHkodGFyZ2V0LCBSZWZsZWN0
KSwKKyAgICBdKQorICAgICAgICB0ZXN0U2V0UmVzdWx0SW50ZXJuYWwodGFyZ2V0LCBrZXksIHJl
Y2VpdmVyLCBleHBlY3RlZFJlc3VsdCk7CisKKyAgICBjbGVhblVwKCk7Cit9CisKK2Z1bmN0aW9u
IHB1dFNldHRlck9uUHJvdG90eXBlKHRhcmdldCwga2V5LCBzZXQpIHsKKyAgICBjb25zdCBkZXNj
cmlwdG9yID0geyBzZXQsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9OworICAgIGNvbnN0IGN1cnJlbnRQ
cm90b3R5cGUgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YodGFyZ2V0KTsKKyAgICBjb25zdCBuZXdQ
cm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKG51bGwsIHsgW2tleV06IGRlc2NyaXB0b3IgfSk7CisK
KyAgICBpZiAoUmVmbGVjdC5zZXRQcm90b3R5cGVPZih0YXJnZXQsIG5ld1Byb3RvdHlwZSkpCisg
ICAgICAgIHJldHVybiAoKSA9PiB7IE9iamVjdC5zZXRQcm90b3R5cGVPZih0YXJnZXQsIGN1cnJl
bnRQcm90b3R5cGUpOyB9OworCisgICAgaWYgKGN1cnJlbnRQcm90b3R5cGUgIT09IG51bGwgJiYg
UmVmbGVjdC5kZWZpbmVQcm9wZXJ0eShjdXJyZW50UHJvdG90eXBlLCBrZXksIGRlc2NyaXB0b3Ip
KQorICAgICAgICByZXR1cm4gKCkgPT4geyAidXNlIHN0cmljdCI7IGRlbGV0ZSBjdXJyZW50UHJv
dG90eXBlW2tleV07IH07CisKKyAgICB0aHJvdyBuZXcgRXJyb3IoIlRoaXMgaXMgdW5yZWFjaGFi
bGU6IGF0IGxlYXN0IG9uZSBhcHByb2FjaCBzaG91bGQgc3VjY2VlZCEiKTsKK30KKworZnVuY3Rp
b24gdGVzdFNldFJlc3VsdEludGVybmFsKHRhcmdldCwga2V5LCByZWNlaXZlciwgZXhwZWN0ZWRS
ZXN1bHQpIHsKKyAgICByZWNlaXZlcltrZXldID0gVEVTVF9WQUxVRTsKKyAgICBzaG91bGRCZShy
ZWNlaXZlcltrZXldID09PSBURVNUX1ZBTFVFLCBleHBlY3RlZFJlc3VsdCwga2V5KTsKKworICAg
IHRlc3RTZXRSZXN1bHRTdHJpY3QocmVjZWl2ZXIsIGtleSwgZXhwZWN0ZWRSZXN1bHQpOworCisg
ICAgaWYgKHJlY2VpdmVyID09PSBPYmplY3QocmVjZWl2ZXIpKQorICAgICAgICBzaG91bGRCZShS
ZWZsZWN0LnNldChyZWNlaXZlciwga2V5LCBURVNUX1ZBTFVFKSwgZXhwZWN0ZWRSZXN1bHQsIGtl
eSk7CisgICAgc2hvdWxkQmUoUmVmbGVjdC5zZXQodGFyZ2V0LCBrZXksIFRFU1RfVkFMVUUsIHJl
Y2VpdmVyKSwgZXhwZWN0ZWRSZXN1bHQsIGtleSk7Cit9CisKK2Z1bmN0aW9uIHRlc3RTZXRSZXN1
bHRTdHJpY3QocmVjZWl2ZXIsIGtleSwgZXhwZWN0ZWRSZXN1bHQpIHsKKyAgICAidXNlIHN0cmlj
dCI7CisgICAgaWYgKGV4cGVjdGVkUmVzdWx0KSB7CisgICAgICAgIHJlY2VpdmVyW2tleV0gPSBU
RVNUX1ZBTFVFOworICAgICAgICBzaG91bGRCZShyZWNlaXZlcltrZXldLCBURVNUX1ZBTFVFLCBr
ZXkpOworICAgIH0gZWxzZQorICAgICAgICBzaG91bGRUaHJvd1R5cGVFcnJvcigoKSA9PiB7IHJl
Y2VpdmVyW2tleV0gPSBURVNUX1ZBTFVFOyB9LCBrZXkpOworfQorCitmdW5jdGlvbiBzaG91bGRC
ZShhY3R1YWwsIGV4cGVjdGVkLCBrZXkpIHsKKyAgICBpZiAoYWN0dWFsICE9PSBleHBlY3RlZCkK
KyAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBLZXk6ICR7U3RyaW5nKGtleSl9LiAke2FjdHVhbH0g
IT09ICR7ZXhwZWN0ZWR9YCk7Cit9CisKK2Z1bmN0aW9uIHNob3VsZFRocm93VHlwZUVycm9yKGZ1
bmMsIGtleSkgeworICAgIGxldCBlcnJvclRocm93biA9IGZhbHNlOworICAgIHRyeSB7CisgICAg
ICAgIGZ1bmMoKTsKKyAgICB9IGNhdGNoIChlcnJvcikgeworICAgICAgICBlcnJvclRocm93biA9
IHRydWU7CisgICAgICAgIGlmIChlcnJvci5jb25zdHJ1Y3RvciAhPT0gVHlwZUVycm9yKQorICAg
ICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBLZXk6ICR7U3RyaW5nKGtleSl9LiBCYWQgZXJyb3I6
ICR7ZXJyb3J9YCk7CisgICAgfQorICAgIGlmICghZXJyb3JUaHJvd24pCisgICAgICAgIHRocm93
IG5ldyBFcnJvcihgS2V5OiAke1N0cmluZyhrZXkpfS4gRGlkbid0IHRocm93IWApOworfQpJbmRl
eDogSlNUZXN0cy9zdHJlc3MvcHJvdG8tY2hhaW4tcHV0LW5vbi1yZWlmaWVkLXN0YXRpYy1mdW5j
dGlvbi5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0cmVzcy9wcm90by1jaGFpbi1wdXQtbm9u
LXJlaWZpZWQtc3RhdGljLWZ1bmN0aW9uLmpzCShub25leGlzdGVudCkKKysrIEpTVGVzdHMvc3Ry
ZXNzL3Byb3RvLWNoYWluLXB1dC1ub24tcmVpZmllZC1zdGF0aWMtZnVuY3Rpb24uanMJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwxMjEgQEAKKyJ1c2Ugc3RyaWN0IjsKK2NvbnN0IHRlc3RWYWx1
ZSA9IE9iamVjdC5mcmVlemUoe30pOworCitmdW5jdGlvbiBhc3NlcnQoeCwga2V5KSB7CisgICAg
aWYgKCF4KQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEtleTogIiR7a2V5fSIuIEJhZCBhc3Nl
cnRpb24hYCk7Cit9CisKK2Z1bmN0aW9uIHNob3VsZFRocm93KGZ1bmMsIGVycm9yTWVzc2FnZSwg
a2V5KSB7CisgICAgbGV0IGVycm9yVGhyb3duID0gZmFsc2U7CisgICAgdHJ5IHsKKyAgICAgICAg
ZnVuYygpOworICAgIH0gY2F0Y2ggKGVycm9yKSB7CisgICAgICAgIGVycm9yVGhyb3duID0gdHJ1
ZTsKKyAgICAgICAgaWYgKFN0cmluZyhlcnJvcikgIT09IGVycm9yTWVzc2FnZSkKKyAgICAgICAg
ICAgIHRocm93IG5ldyBFcnJvcihgS2V5OiAiJHtrZXl9Ii4gQmFkIGVycm9yOiAke2Vycm9yfWAp
OworICAgIH0KKyAgICBpZiAoIWVycm9yVGhyb3duKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3Io
YEtleTogIiR7a2V5fSIuIERpZG4ndCB0aHJvdyFgKTsKK30KKworZnVuY3Rpb24qIHRlc3RDYXNl
cygpIHsKKyAgICAvLyBoYXNTZXR0ZXJPclJlYWRvbmx5UHJvcGVydGllczogZmFsc2UKKyAgICBm
b3IgKGNvbnN0IGtleSBvZiBbImlzRmluaXRlIiwgImV2YWwiLCAiZ2xvYmFsVGhpcyIsICJwYXJz
ZUludCIsICJFdmFsRXJyb3IiLCAiSlNPTiIsICJVaW50OENsYW1wZWRBcnJheSIsICJXZWFrTWFw
Il0pCisgICAgICAgIHlpZWxkIFskdm0uY3JlYXRlR2xvYmFsT2JqZWN0KCksIGtleV07CisgICAg
Zm9yIChjb25zdCBrZXkgb2YgWyJzZWFsIiwgImlzIiwgInZhbHVlcyIsICJmcm9tRW50cmllcyIs
ICJkZWZpbmVQcm9wZXJ0eSIsICJzZXRQcm90b3R5cGVPZiJdKQorICAgICAgICB5aWVsZCBbJHZt
LmNyZWF0ZUdsb2JhbE9iamVjdCgpLk9iamVjdCwga2V5XTsKKyAgICBmb3IgKGNvbnN0IGtleSBv
ZiBbImFwcGx5IiwgImNvbnN0cnVjdCIsICJoYXMiLCAicHJldmVudEV4dGVuc2lvbnMiLCAiZ2V0
UHJvdG90eXBlT2YiXSkKKyAgICAgICAgeWllbGQgWyR2bS5jcmVhdGVHbG9iYWxPYmplY3QoKS5S
ZWZsZWN0LCBrZXldOworICAgIGZvciAoY29uc3Qga2V5IG9mIFsidG9EYXRlU3RyaW5nIiwgInRv
TG9jYWxlU3RyaW5nIiwgImdldFVUQ01vbnRoIiwgImdldERheSIsICJzZXRVVENNaW51dGVzIiwg
InNldE1vbnRoIl0pCisgICAgICAgIHlpZWxkIFskdm0uY3JlYXRlR2xvYmFsT2JqZWN0KCkuRGF0
ZS5wcm90b3R5cGUsIGtleV07CisgICAgZm9yIChjb25zdCBrZXkgb2YgWyJjb25jYXQiLCAibWF0
Y2giLCAicGFkU3RhcnQiLCAiYm9sZCIsICJmaXhlZCIsICJzbWFsbCIsICJzdWIiXSkKKyAgICAg
ICAgeWllbGQgWyR2bS5jcmVhdGVHbG9iYWxPYmplY3QoKS5TdHJpbmcucHJvdG90eXBlLCBrZXld
OworCisgICAgLy8gaGFzU2V0dGVyT3JSZWFkb25seVByb3BlcnRpZXM6IHRydWUKKyAgICBmb3Ig
KGNvbnN0IGtleSBvZiBbImdldFVpbnQxNiIsICJzZXRJbnQ4IiwgImdldEZsb2F0MzIiLCAic2V0
QmlnVWludDY0Il0pCisgICAgICAgIHlpZWxkIFskdm0uY3JlYXRlR2xvYmFsT2JqZWN0KCkuRGF0
YVZpZXcucHJvdG90eXBlLCBrZXldOworICAgIGZvciAoY29uc3Qga2V5IG9mIFsidG9TdHJpbmci
LCAidmFsdWVPZiJdKQorICAgICAgICB5aWVsZCBbJHZtLmNyZWF0ZUdsb2JhbE9iamVjdCgpLlN5
bWJvbC5wcm90b3R5cGUsIGtleV07CisgICAgZm9yIChjb25zdCBrZXkgb2YgWyJmb3JtYXRSYW5n
ZSIsICJmb3JtYXRUb1BhcnRzIiwgInJlc29sdmVkT3B0aW9ucyJdKQorICAgICAgICB5aWVsZCBb
JHZtLmNyZWF0ZUdsb2JhbE9iamVjdCgpLkludGwuRGF0ZVRpbWVGb3JtYXQucHJvdG90eXBlLCBr
ZXldOworICAgIGZvciAoY29uc3Qga2V5IG9mIFsiZm9ybWF0VG9QYXJ0cyIsICJyZXNvbHZlZE9w
dGlvbnMiXSkKKyAgICAgICAgeWllbGQgWyR2bS5jcmVhdGVHbG9iYWxPYmplY3QoKS5JbnRsLk51
bWJlckZvcm1hdC5wcm90b3R5cGUsIGtleV07CisgICAgZm9yIChjb25zdCBrZXkgb2YgWyJtYXhp
bWl6ZSIsICJtaW5pbWl6ZSIsICJ0b1N0cmluZyJdKQorICAgICAgICB5aWVsZCBbJHZtLmNyZWF0
ZUdsb2JhbE9iamVjdCgpLkludGwuTG9jYWxlLnByb3RvdHlwZSwga2V5XTsKKworICAgIHlpZWxk
IFskdm0uY3JlYXRlU3RhdGljQ3VzdG9tVmFsdWUoKSwgInRlc3RTdGF0aWNWYWx1ZU5vU2V0dGVy
Il07Cit9CisKK2ZvciAoY29uc3QgW29iamVjdCwga2V5XSBvZiB0ZXN0Q2FzZXMoKSkgeworICAg
IG9iamVjdFtrZXldID0gdGVzdFZhbHVlOworCisgICAgY29uc3QgZGVzYyA9IE9iamVjdC5nZXRP
d25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBrZXkpOworICAgIGFzc2VydChkZXNjLnZhbHVl
ID09PSB0ZXN0VmFsdWUsIGtleSk7CisgICAgYXNzZXJ0KGRlc2Mud3JpdGFibGUsIGtleSk7Cisg
ICAgYXNzZXJ0KCFkZXNjLmVudW1lcmFibGUsIGtleSk7CisgICAgYXNzZXJ0KGRlc2MuY29uZmln
dXJhYmxlLCBrZXkpOworfQorCitmb3IgKGNvbnN0IFtvYmplY3QsIGtleV0gb2YgdGVzdENhc2Vz
KCkpIHsKKyAgICBPYmplY3QucHJldmVudEV4dGVuc2lvbnMob2JqZWN0KTsKKyAgICBvYmplY3Rb
a2V5XSA9IHRlc3RWYWx1ZTsKKworICAgIGNvbnN0IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVy
dHlEZXNjcmlwdG9yKG9iamVjdCwga2V5KTsKKyAgICBhc3NlcnQoZGVzYy52YWx1ZSA9PT0gdGVz
dFZhbHVlLCBrZXkpOworICAgIGFzc2VydChkZXNjLndyaXRhYmxlLCBrZXkpOworICAgIGFzc2Vy
dCghZGVzYy5lbnVtZXJhYmxlLCBrZXkpOworICAgIGFzc2VydChkZXNjLmNvbmZpZ3VyYWJsZSwg
a2V5KTsKK30KKworZm9yIChjb25zdCBbb2JqZWN0LCBrZXldIG9mIHRlc3RDYXNlcygpKSB7Cisg
ICAgY29uc3QgaGVpciA9IE9iamVjdC5jcmVhdGUob2JqZWN0KTsKKyAgICBoZWlyW2tleV0gPSB0
ZXN0VmFsdWU7CisKKyAgICBjb25zdCBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3Jp
cHRvcihoZWlyLCBrZXkpOworICAgIGFzc2VydChkZXNjLnZhbHVlID09PSB0ZXN0VmFsdWUsIGtl
eSk7CisgICAgYXNzZXJ0KGRlc2Mud3JpdGFibGUsIGtleSk7CisgICAgYXNzZXJ0KGRlc2MuZW51
bWVyYWJsZSwga2V5KTsKKyAgICBhc3NlcnQoZGVzYy5jb25maWd1cmFibGUsIGtleSk7CisgICAg
YXNzZXJ0KG9iamVjdFtrZXldICE9PSB0ZXN0VmFsdWUsIGtleSk7Cit9CisKK2ZvciAoY29uc3Qg
W29iamVjdCwga2V5XSBvZiB0ZXN0Q2FzZXMoKSkgeworICAgIGNvbnN0IHByb3RvdHlwZSA9IE9i
amVjdC5nZXRQcm90b3R5cGVPZihvYmplY3QpOworICAgIGlmIChwcm90b3R5cGUgIT09IG51bGwp
IHsKKyAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHByb3RvdHlwZSwga2V5LCB7CisgICAg
ICAgICAgICBzZXQoKSB7IHRocm93IG5ldyBFcnJvcihgIiR7a2V5fSIgc2V0dGVyIHNob3VsZCBi
ZSB1bnJlYWNoYWJsZSFgKTsgfSwKKyAgICAgICAgfSk7CisgICAgfQorCisgICAgY29uc3QgaGVp
ciA9IE9iamVjdC5jcmVhdGUob2JqZWN0KTsKKyAgICBoZWlyW2tleV0gPSB0ZXN0VmFsdWU7CisK
KyAgICBjb25zdCBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihoZWlyLCBr
ZXkpOworICAgIGFzc2VydChkZXNjLnZhbHVlID09PSB0ZXN0VmFsdWUsIGtleSk7CisgICAgYXNz
ZXJ0KGRlc2Mud3JpdGFibGUsIGtleSk7CisgICAgYXNzZXJ0KGRlc2MuZW51bWVyYWJsZSwga2V5
KTsKKyAgICBhc3NlcnQoZGVzYy5jb25maWd1cmFibGUsIGtleSk7CisgICAgYXNzZXJ0KG9iamVj
dFtrZXldICE9PSB0ZXN0VmFsdWUsIGtleSk7Cit9CisKK2ZvciAoY29uc3QgW29iamVjdCwga2V5
XSBvZiB0ZXN0Q2FzZXMoKSkgeworICAgIGNvbnN0IGhlaXIgPSBPYmplY3QuY3JlYXRlKG9iamVj
dCk7CisgICAgT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zKGhlaXIpOworCisgICAgc2hvdWxkVGhy
b3coKCkgPT4geyBoZWlyW2tleV0gPSB0ZXN0VmFsdWU7IH0sICJUeXBlRXJyb3I6IEF0dGVtcHRl
ZCB0byBhc3NpZ24gdG8gcmVhZG9ubHkgcHJvcGVydHkuIiwga2V5KTsKKyAgICBhc3NlcnQoaGVp
cltrZXldICE9PSB0ZXN0VmFsdWUsIGtleSk7CisgICAgYXNzZXJ0KG9iamVjdFtrZXldICE9PSB0
ZXN0VmFsdWUsIGtleSk7Cit9CisKK2ZvciAoY29uc3QgW29iamVjdCwga2V5XSBvZiB0ZXN0Q2Fz
ZXMoKSkgeworICAgIGNvbnN0IHRhcmdldCA9IHt9OworICAgIGFzc2VydChSZWZsZWN0LnNldCh0
YXJnZXQsIGtleSwgdGVzdFZhbHVlLCBvYmplY3QpLCBrZXkpOworICAgIGFzc2VydCghdGFyZ2V0
Lmhhc093blByb3BlcnR5KGtleSksIGtleSk7CisKKyAgICBjb25zdCBkZXNjID0gT2JqZWN0Lmdl
dE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIGtleSk7CisgICAgYXNzZXJ0KGRlc2MudmFs
dWUgPT09IHRlc3RWYWx1ZSwga2V5KTsKKyAgICBhc3NlcnQoZGVzYy53cml0YWJsZSwga2V5KTsK
KyAgICBhc3NlcnQoIWRlc2MuZW51bWVyYWJsZSwga2V5KTsKKyAgICBhc3NlcnQoZGVzYy5jb25m
aWd1cmFibGUsIGtleSk7Cit9CkluZGV4OiBKU1Rlc3RzL3N0cmVzcy9wdXQtdG8tcHJpbWl0aXZl
LW5vbi1yZWlmaWVkLXN0YXRpYy1jdXN0b20uanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJl
c3MvcHV0LXRvLXByaW1pdGl2ZS1ub24tcmVpZmllZC1zdGF0aWMtY3VzdG9tLmpzCShub25leGlz
dGVudCkKKysrIEpTVGVzdHMvc3RyZXNzL3B1dC10by1wcmltaXRpdmUtbm9uLXJlaWZpZWQtc3Rh
dGljLWN1c3RvbS5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY0IEBACisidXNlIHN0cmlj
dCI7CisKK2Z1bmN0aW9uIHNob3VsZEJlKGFjdHVhbCwgZXhwZWN0ZWQpIHsKKyAgICBpZiAoYWN0
dWFsICE9PSBleHBlY3RlZCkKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBCYWQgdmFsdWU6ICR7
YWN0dWFsfSFgKTsKK30KKworZnVuY3Rpb24gc2hvdWxkVGhyb3coZnVuYywgZXJyb3JNZXNzYWdl
KSB7CisgICAgbGV0IGVycm9yVGhyb3duID0gZmFsc2U7CisgICAgdHJ5IHsKKyAgICAgICAgZnVu
YygpOworICAgIH0gY2F0Y2ggKGVycm9yKSB7CisgICAgICAgIGVycm9yVGhyb3duID0gdHJ1ZTsK
KyAgICAgICAgaWYgKFN0cmluZyhlcnJvcikgIT09IGVycm9yTWVzc2FnZSkKKyAgICAgICAgICAg
IHRocm93IG5ldyBFcnJvcihgQmFkIGVycm9yOiAke2Vycm9yfWApOworICAgIH0KKyAgICBpZiAo
IWVycm9yVGhyb3duKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkRpZG4ndCB0aHJvdyEiKTsK
K30KKworY29uc3QgcG9pc29uZWRTZXR0ZXIgPSB7IHNldCgpIHsgdGhyb3cgbmV3IEVycm9yKCJP
YmplY3QucHJvdG90eXBlIHNldHRlciBzaG91bGQgYmUgdW5yZWFjaGFibGUhIik7IH0gfTsKK2Nv
bnN0IHByaW1pdGl2ZXMgPSBbdHJ1ZSwgMSwgIiIsIFN5bWJvbCgpLCAwbl07CisKKyhmdW5jdGlv
biB0ZXN0U3RhdGljQ3VzdG9tVmFsdWUoKSB7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMo
T2JqZWN0LnByb3RvdHlwZSwgeworICAgICAgICB0ZXN0U3RhdGljVmFsdWU6IHBvaXNvbmVkU2V0
dGVyLAorICAgICAgICB0ZXN0U3RhdGljVmFsdWVOb1NldHRlcjogcG9pc29uZWRTZXR0ZXIsCisg
ICAgICAgIHRlc3RTdGF0aWNWYWx1ZVJlYWRPbmx5OiBwb2lzb25lZFNldHRlciwKKyAgICB9KTsK
KworICAgIGZvciAoY29uc3QgcHJpbWl0aXZlIG9mIHByaW1pdGl2ZXMpIHsKKyAgICAgICAgY29u
c3QgcHJpbWl0aXZlUHJvdG90eXBlID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHByaW1pdGl2ZSk7
CisgICAgICAgIGNvbnN0IHN0YXRpY0N1c3RvbVZhbHVlID0gJHZtLmNyZWF0ZVN0YXRpY0N1c3Rv
bVZhbHVlKCk7CisgICAgICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZihwcmltaXRpdmVQcm90b3R5
cGUsIHN0YXRpY0N1c3RvbVZhbHVlKTsKKworICAgICAgICBwcmltaXRpdmUudGVzdFN0YXRpY1Zh
bHVlID0gMTsKKyAgICAgICAgc2hvdWxkQmUoc3RhdGljQ3VzdG9tVmFsdWUudGVzdFN0YXRpY1Zh
bHVlLCAxKTsKKyAgICAgICAgc2hvdWxkVGhyb3coKCkgPT4geyBwcmltaXRpdmUudGVzdFN0YXRp
Y1ZhbHVlID0gMTsgfSwgIlR5cGVFcnJvcjogQXR0ZW1wdGVkIHRvIGFzc2lnbiB0byByZWFkb25s
eSBwcm9wZXJ0eS4iKTsKKworICAgICAgICBzaG91bGRUaHJvdygoKSA9PiB7IHByaW1pdGl2ZS50
ZXN0U3RhdGljVmFsdWVOb1NldHRlciA9IDE7IH0sICJUeXBlRXJyb3I6IEF0dGVtcHRlZCB0byBh
c3NpZ24gdG8gcmVhZG9ubHkgcHJvcGVydHkuIik7CisgICAgICAgIHNob3VsZFRocm93KCgpID0+
IHsgcHJpbWl0aXZlLnRlc3RTdGF0aWNWYWx1ZVJlYWRPbmx5ID0gMTsgfSwgIlR5cGVFcnJvcjog
QXR0ZW1wdGVkIHRvIGFzc2lnbiB0byByZWFkb25seSBwcm9wZXJ0eS4iKTsKKyAgICAgICAgT2Jq
ZWN0LnNldFByb3RvdHlwZU9mKHByaW1pdGl2ZVByb3RvdHlwZSwgT2JqZWN0LnByb3RvdHlwZSk7
CisgICAgfQorfSkoKTsKKworKGZ1bmN0aW9uIHRlc3RTdGF0aWNDdXN0b21BY2Nlc3NvcigpIHsK
KyAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhPYmplY3QucHJvdG90eXBlLCB7CisgICAgICAg
IHRlc3RTdGF0aWNBY2Nlc3NvcjogcG9pc29uZWRTZXR0ZXIsCisgICAgICAgIHRlc3RTdGF0aWNB
Y2Nlc3NvclJlYWRPbmx5OiBwb2lzb25lZFNldHRlciwKKyAgICB9KTsKKworICAgIGZvciAoY29u
c3QgcHJpbWl0aXZlIG9mIHByaW1pdGl2ZXMpIHsKKyAgICAgICAgY29uc3QgcHJpbWl0aXZlUHJv
dG90eXBlID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHByaW1pdGl2ZSk7CisgICAgICAgIE9iamVj
dC5zZXRQcm90b3R5cGVPZihwcmltaXRpdmVQcm90b3R5cGUsICR2bS5jcmVhdGVTdGF0aWNDdXN0
b21BY2Nlc3NvcigpKTsKKworICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDEwMDA7IGkrKykg
eworICAgICAgICAgICAgcHJpbWl0aXZlLnRlc3RTdGF0aWNBY2Nlc3NvciA9IGk7CisgICAgICAg
ICAgICBzaG91bGRCZShwcmltaXRpdmVQcm90b3R5cGUudGVzdEZpZWxkLCBpKTsKKyAgICAgICAg
fQorCisgICAgICAgIHNob3VsZFRocm93KCgpID0+IHsgcHJpbWl0aXZlLnRlc3RTdGF0aWNBY2Nl
c3NvclJlYWRPbmx5ID0gMTsgfSwgIlR5cGVFcnJvcjogQXR0ZW1wdGVkIHRvIGFzc2lnbiB0byBy
ZWFkb25seSBwcm9wZXJ0eS4iKTsKKyAgICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKHByaW1p
dGl2ZVByb3RvdHlwZSwgT2JqZWN0LnByb3RvdHlwZSk7CisgICAgfQorfSkoKTsKSW5kZXg6IEpT
VGVzdHMvc3RyZXNzL3B1dC10by1wcmltaXRpdmUuanMKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9z
dHJlc3MvcHV0LXRvLXByaW1pdGl2ZS5qcwkobm9uZXhpc3RlbnQpCisrKyBKU1Rlc3RzL3N0cmVz
cy9wdXQtdG8tcHJpbWl0aXZlLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjcgQEAKK2Z1
bmN0aW9uIHNob3VsZEJlKGFjdHVhbCwgZXhwZWN0ZWQpIHsKKyAgICBpZiAoYWN0dWFsICE9PSBl
eHBlY3RlZCkKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBCYWQgdmFsdWU6ICR7YWN0dWFsfSFg
KTsKK30KKworZnVuY3Rpb24gc2hvdWxkVGhyb3coZnVuYywgZXJyb3JNZXNzYWdlKSB7CisgICAg
bGV0IGVycm9yVGhyb3duID0gZmFsc2U7CisgICAgdHJ5IHsKKyAgICAgICAgZnVuYygpOworICAg
IH0gY2F0Y2ggKGVycm9yKSB7CisgICAgICAgIGVycm9yVGhyb3duID0gdHJ1ZTsKKyAgICAgICAg
aWYgKFN0cmluZyhlcnJvcikgIT09IGVycm9yTWVzc2FnZSkKKyAgICAgICAgICAgIHRocm93IG5l
dyBFcnJvcihgQmFkIGVycm9yOiAke2Vycm9yfWApOworICAgIH0KKyAgICBpZiAoIWVycm9yVGhy
b3duKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkRpZG4ndCB0aHJvdyEiKTsKK30KKworKGZ1
bmN0aW9uIHN0cmluZ0xlbmd0aCgpIHsKKyAgICBsZXQgc3RyID0gImZvbyI7CisKKyAgICBmb3Ig
KGxldCBpID0gMDsgaSA8IDFlNTsgaSsrKSB7CisgICAgICAgIHN0ci5sZW5ndGggPSAwOworICAg
ICAgICBzaG91bGRCZShzdHIubGVuZ3RoLCAzKTsKKyAgICAgICAgc2hvdWxkVGhyb3coKCkgPT4g
eyAidXNlIHN0cmljdCI7ICJiYXIiLmxlbmd0aCA9IDM7IH0sICJUeXBlRXJyb3I6IEF0dGVtcHRl
ZCB0byBhc3NpZ24gdG8gcmVhZG9ubHkgcHJvcGVydHkuIik7CisgICAgfQorfSkoKTsKSW5kZXg6
IEpTVGVzdHMvc3RyZXNzL3JlZmxlY3Qtc2V0LW5vbi1yZWlmaWVkLXN0YXRpYy1hY2Nlc3Nvci5q
cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0cmVzcy9yZWZsZWN0LXNldC1ub24tcmVpZmllZC1z
dGF0aWMtYWNjZXNzb3IuanMJKG5vbmV4aXN0ZW50KQorKysgSlNUZXN0cy9zdHJlc3MvcmVmbGVj
dC1zZXQtbm9uLXJlaWZpZWQtc3RhdGljLWFjY2Vzc29yLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMjcgQEAKKyJ1c2Ugc3RyaWN0IjsKK2NvbnN0IHRlc3RWYWx1ZSA9IE9iamVjdC5mcmVl
emUoe30pOworCitmdW5jdGlvbiBhc3NlcnQoeCwga2V5KSB7CisgICAgaWYgKCF4KQorICAgICAg
ICB0aHJvdyBuZXcgRXJyb3IoYEtleTogIiR7a2V5fSIuIEJhZCBhc3NlcnRpb24hYCk7Cit9CisK
K2Z1bmN0aW9uKiB0ZXN0Q2FzZXMoKSB7CisgICAgZm9yIChjb25zdCBrZXkgb2YgWyJkZXNjcmlw
dGlvbiJdKQorICAgICAgICB5aWVsZCBbJHZtLmNyZWF0ZUdsb2JhbE9iamVjdCgpLlN5bWJvbC5w
cm90b3R5cGUsIGtleV07CisgICAgZm9yIChjb25zdCBrZXkgb2YgWyJidWZmZXIiLCAiYnl0ZUxl
bmd0aCIsICJieXRlT2Zmc2V0Il0pCisgICAgICAgIHlpZWxkIFskdm0uY3JlYXRlR2xvYmFsT2Jq
ZWN0KCkuRGF0YVZpZXcucHJvdG90eXBlLCBrZXldOworICAgIGZvciAoY29uc3Qga2V5IG9mIFsi
YmFzZU5hbWUiLCAiY2FzZUZpcnN0IiwgImhvdXJDeWNsZSIsICJudW1lcmljIiwgInJlZ2lvbiJd
KQorICAgICAgICB5aWVsZCBbJHZtLmNyZWF0ZUdsb2JhbE9iamVjdCgpLkludGwuTG9jYWxlLnBy
b3RvdHlwZSwga2V5XTsKKworICAgIGZvciAoY29uc3Qga2V5IG9mIFsidGVzdFN0YXRpY0FjY2Vz
c29yIiwgInRlc3RTdGF0aWNBY2Nlc3NvclJlYWRPbmx5Il0pCisgICAgICAgIHlpZWxkIFskdm0u
Y3JlYXRlU3RhdGljQ3VzdG9tQWNjZXNzb3IoKSwga2V5XTsKKyAgICB5aWVsZCBbJHZtLmNyZWF0
ZVN0YXRpY0N1c3RvbVZhbHVlKCksICJ0ZXN0U3RhdGljVmFsdWVSZWFkT25seSJdOworfQorCitm
b3IgKGNvbnN0IFtvYmplY3QsIGtleV0gb2YgdGVzdENhc2VzKCkpIHsKKyAgICBjb25zdCB0YXJn
ZXQgPSB7fTsKKyAgICBhc3NlcnQoIVJlZmxlY3Quc2V0KHRhcmdldCwga2V5LCB0ZXN0VmFsdWUs
IG9iamVjdCksIGtleSk7CisgICAgYXNzZXJ0KCF0YXJnZXQuaGFzT3duUHJvcGVydHkoa2V5KSwg
a2V5KTsKKyAgICBhc3NlcnQoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3Qs
IGtleSkudmFsdWUgIT09IHRlc3RWYWx1ZSwga2V5KTsKK30KSW5kZXg6IEpTVGVzdHMvc3RyZXNz
L3R5cGVkLWFycmF5LWNhbm9uaWNhbC1udW1lcmljLWluZGV4LXN0cmluZy1zZXQuanMKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gSlNUZXN0cy9zdHJlc3MvdHlwZWQtYXJyYXktY2Fub25pY2FsLW51bWVyaWMtaW5k
ZXgtc3RyaW5nLXNldC5qcwkobm9uZXhpc3RlbnQpCisrKyBKU1Rlc3RzL3N0cmVzcy90eXBlZC1h
cnJheS1jYW5vbmljYWwtbnVtZXJpYy1pbmRleC1zdHJpbmctc2V0LmpzCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsNTggQEAKKyd1c2Ugc3RyaWN0JzsKK2NvbnN0IFR5cGVkQXJyYXlzID0gW1Vp
bnQ4Q2xhbXBlZEFycmF5LCBVaW50OEFycmF5LCBVaW50MTZBcnJheSwgVWludDMyQXJyYXksIElu
dDhBcnJheSwgSW50MTZBcnJheSwgSW50MzJBcnJheSwgRmxvYXQzMkFycmF5LCBGbG9hdDY0QXJy
YXldOworY29uc3QgY2Fub25pY2FsTnVtZXJpY0luZGV4U3RyaW5ncyA9IFsnLTAnLCAnLTEnLCAn
LTMuMTQnLCAnSW5maW5pdHknLCAnLUluZmluaXR5JywgJ05hTicsICcwLjUnLCAnNDI5NDk2NzI5
NScsICc0Mjk0OTY3Mjk2J107CisKK2Z1bmN0aW9uIGFzc2VydCh4LCBrZXkpIHsKKyAgICBpZiAo
IXgpCisgICAgICAgIHRocm93IG5ldyBFcnJvcihgQmFkIGFzc2VydGlvbiEgS2V5OiAnJHtrZXl9
J2ApOworfQorCitmb3IgKGNvbnN0IFR5cGVkQXJyYXkgb2YgVHlwZWRBcnJheXMpIHsKKyAgICBm
b3IgKGNvbnN0IGtleSBvZiBjYW5vbmljYWxOdW1lcmljSW5kZXhTdHJpbmdzKSB7CisgICAgICAg
IGNvbnN0IGFzc2VydFByb3RvdHlwZVByb3BlcnR5SXNVbnJlYWNoYWJsZSA9ICgpID0+IHsKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb25zdCB0QSA9IG5ldyBUeXBlZEFycmF5Owor
ICAgICAgICAgICAgICAgIHRBW2tleV0gPSAxOworICAgICAgICAgICAgICAgIGFzc2VydCghdEEu
aGFzT3duUHJvcGVydHkoa2V5KSwga2V5KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIGNvbnN0IHRBID0gbmV3IFR5cGVkQXJyYXk7CisgICAgICAgICAg
ICAgICAgY29uc3QgaGVpciA9IE9iamVjdC5jcmVhdGUodEEpOworICAgICAgICAgICAgICAgIGhl
aXJba2V5XSA9IDI7CisKKyAgICAgICAgICAgICAgICBhc3NlcnQoIXRBLmhhc093blByb3BlcnR5
KGtleSksIGtleSk7CisgICAgICAgICAgICAgICAgYXNzZXJ0KCFoZWlyLmhhc093blByb3BlcnR5
KGtleSksIGtleSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBjb25zdCB0YXJnZXQgPSB7fTsKKyAgICAgICAgICAgICAgICBjb25zdCByZWNlaXZlciA9
IG5ldyBUeXBlZEFycmF5OworCisgICAgICAgICAgICAgICAgYXNzZXJ0KCFSZWZsZWN0LnNldCh0
YXJnZXQsIGtleSwgMywgcmVjZWl2ZXIpLCBrZXkpOworICAgICAgICAgICAgICAgIGFzc2VydCgh
dGFyZ2V0Lmhhc093blByb3BlcnR5KGtleSksIGtleSk7CisgICAgICAgICAgICAgICAgYXNzZXJ0
KCFyZWNlaXZlci5oYXNPd25Qcm9wZXJ0eShrZXkpLCBrZXkpOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY29uc3QgdEEgPSBuZXcgVHlwZWRBcnJheTsK
KyAgICAgICAgICAgICAgICBjb25zdCB0YXJnZXQgPSBPYmplY3QuY3JlYXRlKHRBKTsKKyAgICAg
ICAgICAgICAgICBjb25zdCByZWNlaXZlciA9IHt9OworCisgICAgICAgICAgICAgICAgYXNzZXJ0
KFJlZmxlY3Quc2V0KHRhcmdldCwga2V5LCA0LCByZWNlaXZlciksIGtleSk7CisgICAgICAgICAg
ICAgICAgYXNzZXJ0KCF0QS5oYXNPd25Qcm9wZXJ0eShrZXkpLCBrZXkpOworICAgICAgICAgICAg
ICAgIGFzc2VydCghdGFyZ2V0Lmhhc093blByb3BlcnR5KGtleSksIGtleSk7CisgICAgICAgICAg
ICAgICAgYXNzZXJ0KCFyZWNlaXZlci5oYXNPd25Qcm9wZXJ0eShrZXkpLCBrZXkpOworICAgICAg
ICAgICAgfQorICAgICAgICB9OworCisgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUeXBl
ZEFycmF5LnByb3RvdHlwZSwga2V5LCB7CisgICAgICAgICAgICBzZXQoKSB7IHRocm93IG5ldyBF
cnJvcihgJHtUeXBlZEFycmF5Lm5hbWV9LnByb3RvdHlwZVsnJHtrZXl9J10gc2V0dGVyIHNob3Vs
ZCBiZSB1bnJlYWNoYWJsZSFgKTsgfSwKKyAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwK
KyAgICAgICAgfSk7CisgICAgICAgIGFzc2VydFByb3RvdHlwZVByb3BlcnR5SXNVbnJlYWNoYWJs
ZSgpOworCisgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUeXBlZEFycmF5LnByb3RvdHlw
ZSwga2V5LCB7IHdyaXRhYmxlOiBmYWxzZSB9KTsKKyAgICAgICAgYXNzZXJ0UHJvdG90eXBlUHJv
cGVydHlJc1VucmVhY2hhYmxlKCk7CisgICAgfQorfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCShyZXZpc2lvbiAyNzYzNTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9n
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTU3IEBACisyMDIxLTA0LTIxICBBbGV4ZXkgU2h2
YXlrYSAgPHNodmFpa2FsZXNoQGdtYWlsLmNvbT4KKworICAgICAgICBbSlNDXSBPcmRpbmFyeVNl
dCBzaG91bGQgaW52b2tlIGN1c3RvbSBbW1NldF1dIG1ldGhvZHMKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNzkxNgorCisgICAgICAgIFJldmlld2Vk
IGJ5IFl1c3VrZSBTdXp1a2kuCisKKyAgICAgICAgVGhpcyBwYXRjaCBmaXhlcyBwdXRJbmxpbmVT
bG93KCkgdG8gaGFuZGxlIHNwZWNpYWwgcHJvcGVydGllcyAobGlrZSBKU0Z1bmN0aW9uJ3MgIm5h
bWUiCisgICAgICAgIGFuZCBKU0FycmF5J3MgImxlbmd0aCIpIGluIHByb3RvdHlwZSBjaGFpbi4g
V2hlbiBzdWNoIHByb3BlcnR5IGlzIGVuY291bnRlcmVkLCBwcm90b3R5cGUKKyAgICAgICAgY2hh
aW4gdHJhdmVyc2FsIGlzIHN0b3BwZWQ7IGlmIGl0J3MgcmVhZC1vbmx5LCBhIFR5cGVFcnJvciBp
cyB0aHJvd24gaW4gc3RyaWN0IG1vZGUuCisKKyAgICAgICAgVGhpcyBjaGFuZ2UgYWRkcyBPdmVy
cmlkZXNQdXQgb3V0IG9mIGxpbmUgdHlwZSBpbmZvIGZsYWcsIGFuZCB1dGlsaXplcyBpdCBpbiBw
dXRJbmxpbmVTbG93KCkKKyAgICAgICAgdG8gaW52b2tlIG92ZXJyaWRlbiBtZXRob2RzLiBXaGls
ZSB0aGlzIGFwcHJvYWNoIHJlcXVpcmVzIHB1dCgpIG1ldGhvZHMgdG8gYmUgYXdhcmUgb2YKKyAg
ICAgICAgYWx0ZXJlZCByZWNlaXZlcnMsIGl0IHJlbmRlcnMgc2V2ZXJhbCBiZW5lZml0czoKKyAg
ICAgICAgICAxLiBwdXQoKSBtZXRob2QgY2FuIGJlIHVzZWQgZm9yIGJvdGggInJlYWwiIFtbU2V0
XV0gb3ZlcnJpZGVzIGFuZCBzcGVjaWFsIHByb3BlcnRpZXMsCisgICAgICAgICAgICAgd2l0aCBp
dHMgcmV0dXJuIHZhbHVlIHJlbWFpbmluZyBgYm9vbGA7CisgICAgICAgICAgMi4gaXQgaXMgc2lt
cGxlciwgZmFzdGVyLCBhbmQgbW9yZSBwcmVkaWN0YWJsZSB0aGFuIGNhbGxpbmcgW1tHZXRPd25Q
cm9wZXJ0eV1dIGluCisgICAgICAgICAgICAgcHV0SW5saW5lU2xvdygpIG9yIGFkZGluZyBkZWZp
bmVPd25Qcm9wZXJ0eVZpYVB1dCgpIHRvIHRoZSBtZXRob2QgdGFibGUuCisKKyAgICAgICAgUmVt
b3ZlcyBvcmRpbmFyeVNldFNsb3coKSBmb3Igbm9uLWluZGV4IHByb3BlcnRpZXMsIHdoaWNoIGRp
ZG4ndCBpbnZva2Ugc29tZSBbW1NldF1dCisgICAgICAgIG1ldGhvZHMgYXMgd2VsbC4gSW5zdGVh
ZCwgZGVmaW5lUHJvcGVydHlPblJlY2VpdmVyKCkgaXMgaW50cm9kdWNlZCBmb3IgYWx0ZXJlZCBy
ZWNlaXZlcnMsCisgICAgICAgIHdoaWNoIHBlcmZvcm1zIGNvcnJlY3RseSB3aGVuIHJlYWNoZWQg
YmVjYXVzZToKKyAgICAgICAgICAxLiBhbGwgc3BlY2lhbCBwcm9wZXJ0aWVzIHdlcmUgYWxyZWFk
eSBoYW5kbGVkICh1bmxlc3MgaXQncyBSZWZsZWN0LnNldCk7CisgICAgICAgICAgMi4gcGVyZm9y
bWluZyBwdXREaXJlY3RJbnRlcm5hbCgpIGlzIHVub2JzZXJ2YWJsZSAodW5sZXNzIFByb3h5T2Jq
ZWN0IHdhcyBzZWVuKTsKKyAgICAgICAgICAzLiBwdXREaXJlY3RJbnRlcm5hbCgpIG5vdyBmdWxs
eSBpbXBsZW1lbnRzIHByb3BlcnR5IGRlZmluaXRpb24gb2YgT3JkaW5hcnlTZXQgWzFdOworICAg
ICAgICAgIDQuIHB1dCgpIG92ZXJyaWRlIGlzIHJlcXVpcmVkIGlmIGEgc3BlYyBkZWZpbmVzIGN1
c3RvbSBbW0RlZmluZU93blByb3BlcnR5XV0uCisKKyAgICAgICAgU2luY2UgaW5kZXhlZCBwdXRz
IGhhbmRsZSBvdmVycmlkZXMgLyBhbHRlcmVkIHJlY2VpdmVycyBxdWl0ZSBkaWZmZXJlbnRseSwg
dGhleSB3aWxsCisgICAgICAgIGJlIGZpeGVkIGluIGEgZm9sbG93LXVwLCBjb21wbGV0ZWx5IHJl
bW92aW5nIG9yZGluYXJ5U2V0U2xvdygpLgorCisgICAgICAgIEFsc28sIGJ5IG1lcmdpbmcgcHV0
RW50cnkoKSAvIHB1dFRvUHJpbWl0aXZlKCkgaW50byBwdXRJbmxpbmVTbG93KCkgYW5kIGludHJv
ZHVjaW5nCisgICAgICAgIHB1dElubGluZUZhc3RSZXBsYWNpbmdTdGF0aWNQcm9wZXJ0eUlmTmVl
ZGVkKCkgaGVscGVyLCB0aGlzIHBhdGNoIGZpeGVzIGEgZmV3IGJ1Z3M6CisgICAgICAgICAgMS4g
RGlyZWN0IFtbU2V0XV0gdG8gbm9uLXJlaWZpZWQgc3RhdGljIHByb3BlcnR5IG5vdyBwcmVzZXJ2
ZXMgaXRzIGF0dHJpYnV0ZXMgd2hlbiByZXBsYWNpbmcgW1tWYWx1ZV1dLgorICAgICAgICAgIDIu
IFByb3RvdHlwZSBjaGFpbiBbW1NldF1dIHRvIG5vbi1yZWlmaWVkIHN0YXRpYyBwcm9wZXJ0eSBu
b3cgdGhyb3dzIGlmIHJlY2VpdmVyIGlzIG5vbi1leHRlbnNpYmxlLgorICAgICAgICAgIDMuIE5v
bi1yZWlmaWVkIHN0YXRpYyB3cml0YWJsZSBwcm9wZXJ0eSBub3cgc2hhZG93cyByZWFkLW9ubHkg
b25lIHRoYXQgaXMgZnVydGhlciBpbiBwcm90b3R5cGUgY2hhaW4uCisgICAgICAgICAgNC4gTm9u
LXJlaWZpZWQgc3RhdGljIHByb3BlcnRpZXMgaW4gcHJvdG90eXBlIGNoYWluIG9mIGEgcHJpbWl0
aXZlIGFyZSBub3cgY29uc2lkZXJlZC4KKworICAgICAgICBBIGZldyBpc3N1ZXMgZml4ZWQgdGhh
dCB3ZXJlIHByZXZpb3VzbHkgdW5vYnNlcnZhYmxlOgorICAgICAgICAgIDEuIFByb3BlcnR5QXR0
cmlidXRlOjpDdXN0b21WYWx1ZSBpcyBub3cgdW5zZXQgd2hlbiBhIHNldHRlci1sZXNzIHByb3Bl
cnR5IGlzIHJlYXNzaWduZWQuCisgICAgICAgICAgMi4gdWludDY0X3QgcHV0QnlJbmRleElubGlu
ZSgpIG5vdyBjYWxscyBwdXQoKSB2aWEgbWV0aG9kIHRhYmxlIGxpa2UgdWludDMyX3QgY291bnRl
cnBhcnQuCisKKyAgICAgICAgT3RoZXIgbm90YWJsZSByZWZhY3RvcnM6CisgICAgICAgICAgMS4g
SW5saW5lcyBjYWxsQ3VzdG9tU2V0dGVyKCksIGRyb3BwaW5nIHdlaXJkIFRyaVN0YXRlIHJldHVy
biB2YWx1ZS4KKyAgICAgICAgICAyLiBTaW1wbGlmaWVzIGluaXRpYWxpemF0aW9uIG9mIFN0cmlu
Z1Byb3RvdHlwZS4KKyAgICAgICAgICAzLiBTaW1wbGlmaWVzIGlzVGhpc1ZhbHVlQWx0ZXJlZCgp
IHRvIHBvaW50ZXIgY29tcGFyaXNvbnMgYXQgbm9uLUpTUHJveHkgY2FsbCBzaXRlcy4KKyAgICAg
ICAgICA0LiBSZW1vdmVzIGRvUHV0UHJvcGVydHlTZWN1cml0eUNoZWNrKCkgbWV0aG9kcyBhcyB0
aGUgc2FtZSBjaGVja3MgYXJlIHBlcmZvcm1lZCBieSBwdXQoKSBtZXRob2RzLgorICAgICAgICAg
IDUuIFJlbW92ZXMgcHJvdG90eXBlQ2hhaW5NYXlJbnRlcmNlcHRTdG9yZVRvKCksIHdoaWNoIHBy
ZXR0eSBtdWNoIGR1cGxpY2F0ZWQgY2FuUGVyZm9ybUZhc3RQdXRJbmxpbmUoKS4KKyAgICAgICAg
ICA2LiBSZW1vdmVzIGR1bW15IEpTQXJyYXlCdWZmZXJWaWV3OjpwdXQoKSBtZXRob2QuCisgICAg
ICAgICAgNy4gUmVtb3ZlcyBub3cgdW51c2VkIGxvb2t1cFB1dCgpLgorCisgICAgICAgIEFsaWdu
cyBKU0Mgd2l0aCBWOCBhbmQgU3BpZGVyTW9ua2V5LgorCisgICAgICAgIFRoaXMgcGF0Y2ggY2Fy
ZWZ1bGx5IHByZXNlcnZlcyB0aGUgY3VycmVudCBiZWhhdmlvciBvZiBSZWZsZWN0LnNldCB3aXRo
IEN1c3RvbVZhbHVlCisgICAgICAgIGFuZCBwcm90b3R5cGUgY2hhaW4gW1tTZXRdXSB0byBhIEpT
Q2FsbGJhY2tPYmplY3QgLyBsZWdhY3kgcGxhdGZvcm0gb2JqZWN0LgorCisgICAgICAgIFRoaXMg
Y2hhbmdlIGlzIHBlcmZvcm1hbmNlLW5ldXRyYWwgb24gL3B1dC8gbWljcm9iZW5jaG1hcmtzIGFz
IGl0IGRvZXNuJ3QgYWZmZWN0CisgICAgICAgIGNhY2hpbmcsIG9ubHkgdGhlIHNsb3cgcGF0aC4g
UmVmbGVjdC5zZXQgd2l0aCBKU0ZpbmFsT2JqZWN0IHJlY2VpdmVyIGlzIDEzMCUgZmFzdGVyLgor
ICAgICAgICBwdXRJbmxpbmVTbG93KCkgbWljcm9iZW5jaG1hcmtzIHByb2dyZXNzIGJ5IDQtMTgl
LgorCisgICAgICAgIFsxXTogaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vcmRpbmFyeXNl
dHdpdGhvd25kZXNjcmlwdG9yIChzdGVwIDMpCisKKyAgICAgICAgKiBBUEkvSlNDYWxsYmFja09i
amVjdC5oOgorICAgICAgICAqIEFQSS9KU0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25zLmg6CisgICAg
ICAgIChKU0M6OkpTQ2FsbGJhY2tPYmplY3Q8UGFyZW50Pjo6cHV0KToKKyAgICAgICAgKiBBUEkv
dGVzdHMvdGVzdGFwaVNjcmlwdHMvdGVzdGFwaS5qczoKKyAgICAgICAgKiBkZWJ1Z2dlci9EZWJ1
Z2dlclNjb3BlLmg6CisgICAgICAgICogcnVudGltZS9DbGFzc0luZm8uaDoKKyAgICAgICAgKiBy
dW50aW1lL0Nsb25lZEFyZ3VtZW50cy5oOgorICAgICAgICAqIHJ1bnRpbWUvQ3VzdG9tR2V0dGVy
U2V0dGVyLmNwcDoKKyAgICAgICAgKEpTQzo6Y2FsbEN1c3RvbVNldHRlcik6IERlbGV0ZWQuCisg
ICAgICAgICogcnVudGltZS9DdXN0b21HZXR0ZXJTZXR0ZXIuaDoKKyAgICAgICAgKiBydW50aW1l
L0Vycm9yQ29uc3RydWN0b3IuaDoKKyAgICAgICAgKiBydW50aW1lL0Vycm9ySW5zdGFuY2UuaDoK
KyAgICAgICAgKiBydW50aW1lL0dlbmVyaWNBcmd1bWVudHMuaDoKKyAgICAgICAgKiBydW50aW1l
L0dlbmVyaWNBcmd1bWVudHNJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkdlbmVyaWNBcmd1bWVu
dHM8VHlwZT46OnB1dCk6CisgICAgICAgICogcnVudGltZS9HZXR0ZXJTZXR0ZXIuaDoKKyAgICAg
ICAgKiBydW50aW1lL0pTQXJyYXkuY3BwOgorICAgICAgICAoSlNDOjpKU0FycmF5OjpwdXQpOgor
ICAgICAgICAqIHJ1bnRpbWUvSlNBcnJheS5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNBcnJheUJ1
ZmZlclZpZXcuY3BwOgorICAgICAgICAoSlNDOjpKU0FycmF5QnVmZmVyVmlldzo6cHV0KTogRGVs
ZXRlZC4KKyAgICAgICAgKiBydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3Lmg6CisgICAgICAgICog
cnVudGltZS9KU0NKU1ZhbHVlLmNwcDoKKyAgICAgICAgKEpTQzo6SlNWYWx1ZTo6cHV0VG9Qcmlt
aXRpdmUpOgorICAgICAgICAqIHJ1bnRpbWUvSlNDZWxsLmNwcDoKKyAgICAgICAgKEpTQzo6SlND
ZWxsOjpkb1B1dFByb3BlcnR5U2VjdXJpdHlDaGVjayk6IERlbGV0ZWQuCisgICAgICAgICogcnVu
dGltZS9KU0NlbGwuaDoKKyAgICAgICAgKiBydW50aW1lL0pTRnVuY3Rpb24uY3BwOgorICAgICAg
ICAoSlNDOjpKU0Z1bmN0aW9uOjpwdXQpOgorICAgICAgICAqIHJ1bnRpbWUvSlNGdW5jdGlvbi5o
OgorICAgICAgICAqIHJ1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXcuaDoKKyAgICAgICAg
KiBydW50aW1lL0pTR2xvYmFsTGV4aWNhbEVudmlyb25tZW50Lmg6CisgICAgICAgICogcnVudGlt
ZS9KU0dsb2JhbE9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0OjpwdXQp
OgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuaDoKKyAgICAgICAgKiBydW50aW1l
L0pTTGV4aWNhbEVudmlyb25tZW50Lmg6CisgICAgICAgICogcnVudGltZS9KU01vZHVsZUVudmly
b25tZW50Lmg6CisgICAgICAgICogcnVudGltZS9KU01vZHVsZU5hbWVzcGFjZU9iamVjdC5oOgor
ICAgICAgICAqIHJ1bnRpbWUvSlNPYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6
Z2V0T3duUHJvcGVydHlTbG90KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1dElubGluZVNs
b3cpOgorICAgICAgICAoSlNDOjpkZWZpbmVQcm9wZXJ0eU9uUmVjZWl2ZXJTbG93KToKKyAgICAg
ICAgKEpTQzo6SlNPYmplY3Q6OmRlZmluZVByb3BlcnR5T25SZWNlaXZlcik6CisgICAgICAgIChK
U0M6OkpTT2JqZWN0OjpwdXRJbmxpbmVGYXN0UmVwbGFjaW5nU3RhdGljUHJvcGVydHlJZk5lZWRl
ZCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpkb1B1dFByb3BlcnR5U2VjdXJpdHlDaGVjayk6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpwcm90b3R5cGVDaGFpbk1heUludGVy
Y2VwdFN0b3JlVG8pOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNPYmplY3QuaDoKKyAg
ICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1dEJ5SW5kZXhJbmxpbmUpOgorICAgICAgICAoSlNDOjpK
U09iamVjdDo6aGFzTm9uUmVpZmllZFN0YXRpY1Byb3BlcnRpZXMpOgorICAgICAgICAoSlNDOjpK
U09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1
dERpcmVjdCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpkb1B1dFByb3BlcnR5U2VjdXJpdHlD
aGVjayk6IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9KU09iamVjdElubGluZXMuaDoKKyAg
ICAgICAgKEpTQzo6SlNPYmplY3Q6OmNhblBlcmZvcm1GYXN0UHV0SW5saW5lRXhjbHVkaW5nUHJv
dG8pOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cHV0SW5saW5lRm9ySlNPYmplY3QpOgorICAg
ICAgICAoSlNDOjpKU09iamVjdDo6cHV0SW5saW5lRmFzdCk6CisgICAgICAgIChKU0M6OkpTT2Jq
ZWN0OjpwdXREaXJlY3RJbnRlcm5hbCk6CisgICAgICAgICogcnVudGltZS9KU1Byb3h5Lmg6Cisg
ICAgICAgICogcnVudGltZS9KU1R5cGVJbmZvLmg6CisgICAgICAgIChKU0M6OlR5cGVJbmZvOjpo
YXNTdGF0aWNQcm9wZXJ0eVRhYmxlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6VHlwZUluZm86Om92
ZXJyaWRlc1B1dCBjb25zdCk6CisgICAgICAgIChKU0M6OlR5cGVJbmZvOjpnZXRPd25Qcm9wZXJ0
eVNsb3RNYXlCZVdyb25nQWJvdXREb250RW51bSBjb25zdCk6CisgICAgICAgIChKU0M6OlR5cGVJ
bmZvOjpoYXNQdXRQcm9wZXJ0eVNlY3VyaXR5Q2hlY2sgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAqIHJ1bnRpbWUvTG9va3VwLmg6CisgICAgICAgIChKU0M6OnB1dEVudHJ5KTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6bG9va3VwUHV0KTogRGVsZXRlZC4KKyAgICAgICAgKiBydW50aW1lL1By
b3BlcnR5U2xvdC5oOgorICAgICAgICAqIHJ1bnRpbWUvUHJveHlPYmplY3QuY3BwOgorICAgICAg
ICAoSlNDOjpQcm94eU9iamVjdDo6cHV0KToKKyAgICAgICAgKiBydW50aW1lL1Byb3h5T2JqZWN0
Lmg6CisgICAgICAgICogcnVudGltZS9QdXRQcm9wZXJ0eVNsb3QuaDoKKyAgICAgICAgKEpTQzo6
UHV0UHJvcGVydHlTbG90OjpQdXRQcm9wZXJ0eVNsb3QpOgorICAgICAgICAoSlNDOjpQdXRQcm9w
ZXJ0eVNsb3Q6OmNvbnRleHQgY29uc3QpOgorICAgICAgICAoSlNDOjpQdXRQcm9wZXJ0eVNsb3Q6
OmlzVGFpbnRlZEJ5T3BhcXVlT2JqZWN0IGNvbnN0KToKKyAgICAgICAgKEpTQzo6UHV0UHJvcGVy
dHlTbG90OjpzZXRJc1RhaW50ZWRCeU9wYXF1ZU9iamVjdCk6CisgICAgICAgICogcnVudGltZS9S
ZWZsZWN0T2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6SlNDX0RFRklORV9IT1NUX0ZVTkNUSU9O
KToKKyAgICAgICAgKiBydW50aW1lL1JlZ0V4cE9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OlJl
Z0V4cE9iamVjdDo6cHV0KToKKyAgICAgICAgKiBydW50aW1lL1JlZ0V4cE9iamVjdC5oOgorICAg
ICAgICAqIHJ1bnRpbWUvU3RyaW5nT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6U3RyaW5nT2Jq
ZWN0OjpwdXQpOgorICAgICAgICAqIHJ1bnRpbWUvU3RyaW5nT2JqZWN0Lmg6CisgICAgICAgICog
cnVudGltZS9TdHJpbmdQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpTdHJpbmdQcm90b3R5
cGU6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6U3RyaW5nUHJvdG90eXBlOjpjcmVh
dGUpOgorICAgICAgICAqIHJ1bnRpbWUvU3RyaW5nUHJvdG90eXBlLmg6CisgICAgICAgICogcnVu
dGltZS9TdHJ1Y3R1cmUuY3BwOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnZhbGlkYXRlRmxh
Z3MpOgorICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlLmg6CisgICAgICAgIChKU0M6OlN0cnVj
dHVyZTo6aGFzTm9uUmVpZmllZFN0YXRpY1Byb3BlcnRpZXMgY29uc3QpOgorICAgICAgICAqIHRv
b2xzL0pTRG9sbGFyVk0uY3BwOgorCiAyMDIxLTA0LTIwICBNaWNoYWVsIENhdGFuemFybyAgPG1j
YXRhbnphcm9AZ25vbWUub3JnPgogCiAgICAgICAgIFN0YXRpYyBhc3NlcnRzIGluIFdhc21BaXJJ
UkdlbmVyYXRvci5jcHAgYW5kIFdhc21CM0lSR2VuZXJhdG9yLmNwcCB0cmlnZ2VyIC1Xbm9ubnVs
bCB3YXJuaW5ncyB3aXRoIEdDQyAxMQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9K
U0NhbGxiYWNrT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQ
SS9KU0NhbGxiYWNrT2JqZWN0LmgJKHJldmlzaW9uIDI3NjM1NSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjksNyAr
MTI5LDcgQEAgdGVtcGxhdGUgPGNsYXNzIFBhcmVudD4KIGNsYXNzIEpTQ2FsbGJhY2tPYmplY3Qg
ZmluYWwgOiBwdWJsaWMgUGFyZW50IHsKIHB1YmxpYzoKICAgICB1c2luZyBCYXNlID0gUGFyZW50
OwotICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpT
dHJ1Y3R1cmVGbGFncyB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRlc0dl
dE93blNwZWNpYWxQcm9wZXJ0eU5hbWVzIHwgT3ZlcnJpZGVzR2V0Q2FsbERhdGEgfCBJbnRlcmNl
cHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgSW1w
bGVtZW50c0hhc0luc3RhbmNlIHwgUHJvaGliaXRzUHJvcGVydHlDYWNoaW5nIHwgR2V0T3duUHJv
cGVydHlTbG90TWF5QmVXcm9uZ0Fib3V0RG9udEVudW07CisgICAgc3RhdGljIGNvbnN0ZXhwciB1
bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJpZGVz
R2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzR2V0T3duU3BlY2lhbFByb3BlcnR5TmFtZXMg
fCBPdmVycmlkZXNHZXRDYWxsRGF0YSB8IE92ZXJyaWRlc1B1dCB8IEludGVyY2VwdHNHZXRPd25Q
cm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8gfCBJbXBsZW1lbnRzSGFz
SW5zdGFuY2UgfCBQcm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmcgfCBHZXRPd25Qcm9wZXJ0eVNsb3RN
YXlCZVdyb25nQWJvdXREb250RW51bTsKICAgICBzdGF0aWNfYXNzZXJ0KCEoU3RydWN0dXJlRmxh
Z3MgJiBJbXBsZW1lbnRzRGVmYXVsdEhhc0luc3RhbmNlKSwgInVzaW5nIGN1c3RvbUhhc0luc3Rh
bmNlIik7CiAKICAgICB+SlNDYWxsYmFja09iamVjdCgpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25zLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25zLmgJKHJldmlz
aW9uIDI3NjM1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVj
dEZ1bmN0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNTQsNiArMjU0LDkgQEAgYm9vbCBKU0Nh
bGxiYWNrT2JqZWN0PFBhcmVudD46OnB1dChKU0NlbAogICAgIEpTT2JqZWN0UmVmIHRoaXNSZWYg
PSB0b1JlZihqc0Nhc3Q8SlNPYmplY3QqPih0aGlzT2JqZWN0KSk7CiAgICAgUmVmUHRyPE9wYXF1
ZUpTU3RyaW5nPiBwcm9wZXJ0eU5hbWVSZWY7CiAgICAgSlNWYWx1ZVJlZiB2YWx1ZVJlZiA9IHRv
UmVmKGdsb2JhbE9iamVjdCwgdmFsdWUpOworCisgICAgaWYgKFVOTElLRUxZKGlzVGhpc1ZhbHVl
QWx0ZXJlZChzbG90LCB0aGlzT2JqZWN0KSkpCisgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihz
Y29wZSwgUGFyZW50OjpwdXQodGhpc09iamVjdCwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUs
IHZhbHVlLCBzbG90KSk7CiAgICAgCiAgICAgaWYgKFN0cmluZ0ltcGwqIG5hbWUgPSBwcm9wZXJ0
eU5hbWUudWlkKCkpIHsKICAgICAgICAgZm9yIChKU0NsYXNzUmVmIGpzQ2xhc3MgPSB0aGlzT2Jq
ZWN0LT5jbGFzc1JlZigpOyBqc0NsYXNzOyBqc0NsYXNzID0ganNDbGFzcy0+cGFyZW50Q2xhc3Mp
IHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvdGVzdGFwaVNjcmlwdHMv
dGVzdGFwaS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3Rz
L3Rlc3RhcGlTY3JpcHRzL3Rlc3RhcGkuanMJKHJldmlzaW9uIDI3NjM1NSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvdGVzdGFwaVNjcmlwdHMvdGVzdGFwaS5qcwkod29ya2lu
ZyBjb3B5KQpAQCAtMjA4LDYgKzIwOCwyNiBAQCBzaG91bGRCZSgic3ltYm9sVG9TdHJpbmdUYWdE
ZXNjcmlwdG9yLmNvCiBNeU9iamVjdFtTeW1ib2wudG9TdHJpbmdUYWddID0gIkZvbyI7CiBzaG91
bGRCZSgiT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKE15T2JqZWN0KSIsICJbb2JqZWN0
IEZvb10iKTsKIAordmFyIE15T2JqZWN0SGVpciA9IE9iamVjdC5jcmVhdGUoTXlPYmplY3QpOwor
TXlPYmplY3RIZWlyLnRocm93T25TZXQgPSAyMjsKK3ZhciBNeU9iamVjdEhlaXJUaHJvd09uU2V0
RGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTXlPYmplY3RIZWly
LCAidGhyb3dPblNldCIpOworc2hvdWxkQmUoInR5cGVvZiBNeU9iamVjdEhlaXJUaHJvd09uU2V0
RGVzY3JpcHRvciIsICJvYmplY3QiKTsKK3Nob3VsZEJlKCJNeU9iamVjdEhlaXJUaHJvd09uU2V0
RGVzY3JpcHRvci52YWx1ZSIsIDIyKTsKK3Nob3VsZEJlKCJNeU9iamVjdEhlaXJUaHJvd09uU2V0
RGVzY3JpcHRvci53cml0YWJsZSIsIHRydWUpOworc2hvdWxkQmUoIk15T2JqZWN0SGVpclRocm93
T25TZXREZXNjcmlwdG9yLmVudW1lcmFibGUiLCB0cnVlKTsKK3Nob3VsZEJlKCJNeU9iamVjdEhl
aXJUaHJvd09uU2V0RGVzY3JpcHRvci5jb25maWd1cmFibGUiLCB0cnVlKTsKK3Nob3VsZFRocm93
KCJNeU9iamVjdC50aHJvd09uU2V0ID0gMjIiKTsKKwordmFyIGdsb2JhbE9iamVjdEhlaXIgPSBP
YmplY3QuY3JlYXRlKHRoaXMpOworZ2xvYmFsT2JqZWN0SGVpci5nbG9iYWxTdGF0aWNWYWx1ZTIg
PSAzMzsKK3ZhciBnbG9iYWxPYmplY3RIZWlyR2xvYmFsU3RhdGljVmFsdWUyRGVzY3JpcHRvciA9
IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsT2JqZWN0SGVpciwgImdsb2Jh
bFN0YXRpY1ZhbHVlMiIpOworc2hvdWxkQmUoInR5cGVvZiBnbG9iYWxPYmplY3RIZWlyR2xvYmFs
U3RhdGljVmFsdWUyRGVzY3JpcHRvciIsICJvYmplY3QiKTsKK3Nob3VsZEJlKCJnbG9iYWxPYmpl
Y3RIZWlyR2xvYmFsU3RhdGljVmFsdWUyRGVzY3JpcHRvci52YWx1ZSIsIDMzKTsKK3Nob3VsZEJl
KCJnbG9iYWxPYmplY3RIZWlyR2xvYmFsU3RhdGljVmFsdWUyRGVzY3JpcHRvci53cml0YWJsZSIs
IHRydWUpOworc2hvdWxkQmUoImdsb2JhbE9iamVjdEhlaXJHbG9iYWxTdGF0aWNWYWx1ZTJEZXNj
cmlwdG9yLmVudW1lcmFibGUiLCB0cnVlKTsKK3Nob3VsZEJlKCJnbG9iYWxPYmplY3RIZWlyR2xv
YmFsU3RhdGljVmFsdWUyRGVzY3JpcHRvci5jb25maWd1cmFibGUiLCB0cnVlKTsKK3Nob3VsZEJl
KCJ0aGlzLmdsb2JhbFN0YXRpY1ZhbHVlMiIsIDMpOworCiBkZXJpdmVkID0gbmV3IERlcml2ZWQo
KTsKIAogc2hvdWxkQmUoImRlcml2ZWQgaW5zdGFuY2VvZiBEZXJpdmVkIiwgdHJ1ZSk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXJTY29wZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlclNjb3BlLmgJKHJl
dmlzaW9uIDI3NjM1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dl
clNjb3BlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDcgKzM2LDcgQEAgY2xhc3MgSlNTY29wZTsK
IGNsYXNzIERlYnVnZ2VyU2NvcGUgZmluYWwgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7CiBw
dWJsaWM6CiAgICAgdXNpbmcgQmFzZSA9IEpTTm9uRmluYWxPYmplY3Q7Ci0gICAgc3RhdGljIGNv
bnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwg
T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlOYW1l
czsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6
U3RydWN0dXJlRmxhZ3MgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNH
ZXRPd25Qcm9wZXJ0eU5hbWVzIHwgT3ZlcnJpZGVzUHV0OwogCiAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+CiAgICAgc3RhdGljIElzb1N1YnNwYWNl
KiBzdWJzcGFjZUZvcihWTSYgdm0pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9DbGFzc0luZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9DbGFzc0luZm8uaAkocmV2aXNpb24gMjc2MzU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQ2xhc3NJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTY4LDkgKzY4LDYgQEAgc3Ry
dWN0IE1ldGhvZFRhYmxlIHsKICAgICB1c2luZyBHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RnVu
Y3Rpb25QdHIgPSBib29sICgqKShKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgdW5zaWduZWQs
IFByb3BlcnR5U2xvdCYpOwogICAgIEdldE93blByb3BlcnR5U2xvdEJ5SW5kZXhGdW5jdGlvblB0
ciBNRVRIT0RfVEFCTEVfRU5UUlkoZ2V0T3duUHJvcGVydHlTbG90QnlJbmRleCk7CiAKLSAgICB1
c2luZyBEb1B1dFByb3BlcnR5U2VjdXJpdHlDaGVja0Z1bmN0aW9uUHRyID0gdm9pZCAoKikoSlNP
YmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwgUHV0UHJvcGVydHlTbG90Jik7
Ci0gICAgRG9QdXRQcm9wZXJ0eVNlY3VyaXR5Q2hlY2tGdW5jdGlvblB0ciBNRVRIT0RfVEFCTEVf
RU5UUlkoZG9QdXRQcm9wZXJ0eVNlY3VyaXR5Q2hlY2spOwotCiAgICAgdXNpbmcgVG9UaGlzRnVu
Y3Rpb25QdHIgPSBKU1ZhbHVlICgqKShKU0NlbGwqLCBKU0dsb2JhbE9iamVjdCosIEVDTUFNb2Rl
KTsKICAgICBUb1RoaXNGdW5jdGlvblB0ciBNRVRIT0RfVEFCTEVfRU5UUlkodG9UaGlzKTsKIApA
QCAtMTU4LDcgKzE1NSw2IEBAIHN0cnVjdCBNZXRob2RUYWJsZSB7CiAgICAgICAgICZDbGFzc05h
bWU6OmRlbGV0ZVByb3BlcnR5QnlJbmRleCwgXAogICAgICAgICAmQ2xhc3NOYW1lOjpnZXRPd25Q
cm9wZXJ0eVNsb3QsIFwKICAgICAgICAgJkNsYXNzTmFtZTo6Z2V0T3duUHJvcGVydHlTbG90QnlJ
bmRleCwgXAotICAgICAgICAmQ2xhc3NOYW1lOjpkb1B1dFByb3BlcnR5U2VjdXJpdHlDaGVjaywg
XAogICAgICAgICAmQ2xhc3NOYW1lOjp0b1RoaXMsIFwKICAgICAgICAgJkNsYXNzTmFtZTo6ZGVm
YXVsdFZhbHVlLCBcCiAgICAgICAgICZDbGFzc05hbWU6OmdldE93blByb3BlcnR5TmFtZXMsIFwK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Nsb25lZEFyZ3VtZW50cy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Nsb25lZEFyZ3VtZW50
cy5oCShyZXZpc2lvbiAyNzYzNTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9D
bG9uZWRBcmd1bWVudHMuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsNyArNDAsNyBAQCBuYW1lc3Bh
Y2UgSlNDIHsKIGNsYXNzIENsb25lZEFyZ3VtZW50cyBmaW5hbCA6IHB1YmxpYyBKU05vbkZpbmFs
T2JqZWN0IHsKIHB1YmxpYzoKICAgICB1c2luZyBCYXNlID0gSlNOb25GaW5hbE9iamVjdDsKLSAg
ICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0
dXJlRmxhZ3MgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNHZXRPd25T
cGVjaWFsUHJvcGVydHlOYW1lczsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVj
dHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0
eVNsb3QgfCBPdmVycmlkZXNHZXRPd25TcGVjaWFsUHJvcGVydHlOYW1lcyB8IE92ZXJyaWRlc1B1
dDsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2VzcyBtb2Rl
PgogICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ3VzdG9tR2V0dGVyU2V0dGVyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DdXN0b21HZXR0ZXJTZXR0ZXIu
Y3BwCShyZXZpc2lvbiAyNzYzNTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9D
dXN0b21HZXR0ZXJTZXR0ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwyOCArMjYsMTAgQEAK
ICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJDdXN0b21HZXR0ZXJTZXR0ZXIuaCIKIAot
I2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgiCi0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMu
aD4KLQogbmFtZXNwYWNlIEpTQyB7CiAKIFNUQVRJQ19BU1NFUlRfSVNfVFJJVklBTExZX0RFU1RS
VUNUSUJMRShDdXN0b21HZXR0ZXJTZXR0ZXIpOwogCiBjb25zdCBDbGFzc0luZm8gQ3VzdG9tR2V0
dGVyU2V0dGVyOjpzX2luZm8gPSB7ICJDdXN0b21HZXR0ZXJTZXR0ZXIiLCBudWxscHRyLCBudWxs
cHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEN1c3RvbUdldHRlclNldHRlcikgfTsK
IAotVHJpU3RhdGUgY2FsbEN1c3RvbVNldHRlcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBDdXN0b21HZXR0ZXJTZXR0ZXI6OkN1c3RvbVNldHRlciBzZXR0ZXIsIGJvb2wgaXNBY2Nlc3Nv
ciwgSlNPYmplY3QqIHNsb3RCYXNlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgSlNWYWx1ZSB2YWx1ZSwg
UHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKLXsKLSAgICBpZiAoaXNBY2Nlc3NvcikgewotICAg
ICAgICBpZiAoIXNldHRlcikKLSAgICAgICAgICAgIHJldHVybiBUcmlTdGF0ZTo6RmFsc2U7Ci0g
ICAgICAgIHNldHRlcihnbG9iYWxPYmplY3QsIEpTVmFsdWU6OmVuY29kZSh0aGlzVmFsdWUpLCBK
U1ZhbHVlOjplbmNvZGUodmFsdWUpLCBwcm9wZXJ0eU5hbWUpOwotICAgICAgICAvLyBBbHdheXMg
cmV0dXJuIHRydWUgaWYgdGhlcmUgaXMgYSBzZXR0ZXIgYW5kIGl0IGlzIG9ic2VydmVkIGFzIGFu
IGFjY2Vzc29yIHRvIHVzZXJzLgotICAgICAgICByZXR1cm4gVHJpU3RhdGU6OlRydWU7Ci0gICAg
fQotCi0gICAgaWYgKCFzZXR0ZXIpCi0gICAgICAgIHJldHVybiBUcmlTdGF0ZTo6SW5kZXRlcm1p
bmF0ZTsKLSAgICByZXR1cm4gdHJpU3RhdGUoc2V0dGVyKGdsb2JhbE9iamVjdCwgSlNWYWx1ZTo6
ZW5jb2RlKHNsb3RCYXNlKSwgSlNWYWx1ZTo6ZW5jb2RlKHZhbHVlKSwgcHJvcGVydHlOYW1lKSk7
Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQ3VzdG9tR2V0dGVyU2V0dGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQ3VzdG9tR2V0dGVyU2V0dGVyLmgJKHJldmlzaW9uIDI3NjM1NSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0N1c3RvbUdldHRlclNldHRlci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC03Niw2ICs3Niw0IEBAIHByaXZhdGU6CiAgICAgQ3VzdG9tU2V0dGVyIG1f
c2V0dGVyOwogfTsKIAotSlNfRVhQT1JUX1BSSVZBVEUgVHJpU3RhdGUgY2FsbEN1c3RvbVNldHRl
cihKU0dsb2JhbE9iamVjdCosIEN1c3RvbUdldHRlclNldHRlcjo6Q3VzdG9tU2V0dGVyLCBib29s
IGlzQWNjZXNzb3IsIEpTT2JqZWN0KiBzbG90QmFzZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIEpTVmFs
dWUsIFByb3BlcnR5TmFtZSk7Ci0KIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JDb25zdHJ1Y3Rvci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9yQ29uc3RydWN0b3IuaAkocmV2aXNpb24g
Mjc2MzU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JDb25zdHJ1Y3Rv
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBAIGNsYXNzIEdldHRlclNldHRlcjsK
IGNsYXNzIEVycm9yQ29uc3RydWN0b3IgZmluYWwgOiBwdWJsaWMgSW50ZXJuYWxGdW5jdGlvbiB7
CiBwdWJsaWM6CiAgICAgdXNpbmcgQmFzZSA9IEludGVybmFsRnVuY3Rpb247CisgICAgc3RhdGlj
IGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdz
IHwgT3ZlcnJpZGVzUHV0OwogCiAgICAgc3RhdGljIEVycm9yQ29uc3RydWN0b3IqIGNyZWF0ZShW
TSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBFcnJvclByb3RvdHlwZSogZXJyb3JQcm90b3R5
cGUsIEdldHRlclNldHRlciopCiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvRXJyb3JJbnN0YW5jZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0Vycm9ySW5zdGFuY2UuaAkocmV2aXNpb24gMjc2MzU1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JJbnN0YW5jZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
MCw3ICszMCw3IEBAIG5hbWVzcGFjZSBKU0MgewogY2xhc3MgRXJyb3JJbnN0YW5jZSA6IHB1Ymxp
YyBKU05vbkZpbmFsT2JqZWN0IHsKIHB1YmxpYzoKICAgICB1c2luZyBCYXNlID0gSlNOb25GaW5h
bE9iamVjdDsKLSAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0g
QmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVy
cmlkZXNHZXRPd25TcGVjaWFsUHJvcGVydHlOYW1lczsKKyAgICBzdGF0aWMgY29uc3RleHByIHVu
c2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBPdmVycmlkZXNH
ZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNHZXRPd25TcGVjaWFsUHJvcGVydHlOYW1lcyB8
IE92ZXJyaWRlc1B1dDsKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNEZXN0cnVjdGlv
biA9IHRydWU7CiAKICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCogY2VsbCkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNBcmd1bWVudHMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljQXJndW1lbnRzLmgJ
KHJldmlzaW9uIDI3NjM1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVy
aWNBcmd1bWVudHMuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNyBAQCB0ZW1wbGF0ZTx0
eXBlbmFtZSBUeXBlPgogY2xhc3MgR2VuZXJpY0FyZ3VtZW50cyA6IHB1YmxpYyBKU05vbkZpbmFs
T2JqZWN0IHsKIHB1YmxpYzoKICAgICB0eXBlZGVmIEpTTm9uRmluYWxPYmplY3QgQmFzZTsKLSAg
ICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0
dXJlRmxhZ3MgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNHZXRPd25Q
cm9wZXJ0eU5hbWVzIHwgSW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hl
bkxlbmd0aElzTm90WmVybzsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVy
ZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNs
b3QgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eU5hbWVzIHwgT3ZlcnJpZGVzUHV0IHwgSW50ZXJj
ZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybzsKIAog
cHJvdGVjdGVkOgogICAgIEdlbmVyaWNBcmd1bWVudHMoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNBcmd1bWVu
dHNJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
R2VuZXJpY0FyZ3VtZW50c0lubGluZXMuaAkocmV2aXNpb24gMjc2MzU1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50c0lubGluZXMuaAkod29ya2luZyBj
b3B5KQpAQCAtMTM0LDggKzEzNCw4IEBAIGJvb2wgR2VuZXJpY0FyZ3VtZW50czxUeXBlPjo6cHV0
KEpTQ2VsbCoKIAogICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWFy
Z3VtZW50cy1leG90aWMtb2JqZWN0cy1zZXQtcC12LXJlY2VpdmVyCiAgICAgLy8gRmFsbCBiYWNr
IHRvIHRoZSBPcmRpbmFyeVNldCB3aGVuIHRoZSByZWNlaXZlciBpcyBhbHRlcmVkIGZyb20gdGhl
IHRoaXNPYmplY3QuCi0gICAgaWYgKFVOTElLRUxZKGlzVGhpc1ZhbHVlQWx0ZXJlZChzbG90LCB0
aGlzT2JqZWN0KSkpCi0gICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgb3JkaW5hcnlT
ZXRTbG93KGdsb2JhbE9iamVjdCwgdGhpc09iamVjdCwgaWRlbnQsIHZhbHVlLCBzbG90LnRoaXNW
YWx1ZSgpLCBzbG90LmlzU3RyaWN0TW9kZSgpKSk7CisgICAgaWYgKFVOTElLRUxZKHNsb3QudGhp
c1ZhbHVlKCkgIT0gdGhpc09iamVjdCkpCisgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29w
ZSwgQmFzZTo6cHV0KHRoaXNPYmplY3QsIGdsb2JhbE9iamVjdCwgaWRlbnQsIHZhbHVlLCBzbG90
KSk7CiAgICAgCiAgICAgT3B0aW9uYWw8dWludDMyX3Q+IGluZGV4ID0gcGFyc2VJbmRleChpZGVu
dCk7CiAgICAgaWYgKGluZGV4ICYmIHRoaXNPYmplY3QtPmlzTWFwcGVkQXJndW1lbnQoaW5kZXgu
dmFsdWUoKSkpIHsKQEAgLTE0Myw5ICsxNDMsNyBAQCBib29sIEdlbmVyaWNBcmd1bWVudHM8VHlw
ZT46OnB1dChKU0NlbGwqCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIGF1dG8g
cmVzdWx0ID0gQmFzZTo6cHV0KHRoaXNPYmplY3QsIGdsb2JhbE9iamVjdCwgaWRlbnQsIHZhbHVl
LCBzbG90KTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBmYWxzZSk7Ci0gICAgUkVM
RUFTRV9BTkRfUkVUVVJOKHNjb3BlLCByZXN1bHQpOworICAgIFJFTEVBU0VfQU5EX1JFVFVSTihz
Y29wZSwgQmFzZTo6cHV0KHRoaXNPYmplY3QsIGdsb2JhbE9iamVjdCwgaWRlbnQsIHZhbHVlLCBz
bG90KSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFR5cGU+CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9HZXR0ZXJTZXR0ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9HZXR0ZXJTZXR0ZXIuaAkocmV2aXNpb24gMjc2MzU1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2V0dGVyU2V0dGVyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTU0LDcgKzU0LDcgQEAgcHJpdmF0ZToKIAogcHVibGljOgogCi0gICAgc3RhdGljIGNv
bnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwg
T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgU3RydWN0dXJlSXNJbW1vcnRhbDsKKyAgICBz
dGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJl
RmxhZ3MgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNQdXQgfCBTdHJ1
Y3R1cmVJc0ltbW9ydGFsOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNw
YWNlQWNjZXNzPgogICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAJKHJldmlzaW9u
IDI3NjM1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yMzgsMTAgKzIzOCw2IEBAIGJvb2wgSlNBcnJheTo6cHV0KEpTQ2Vs
bCogY2VsbCwgSlNHbG9iYWwKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CiAKICAgICBKU0FycmF5KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQXJyYXkqPihjZWxsKTsK
LQotICAgIGlmIChVTkxJS0VMWShpc1RoaXNWYWx1ZUFsdGVyZWQoc2xvdCwgdGhpc09iamVjdCkp
KQotICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIG9yZGluYXJ5U2V0U2xvdyhnbG9i
YWxPYmplY3QsIHRoaXNPYmplY3QsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QudGhpc1ZhbHVl
KCksIHNsb3QuaXNTdHJpY3RNb2RlKCkpKTsKLQogICAgIHRoaXNPYmplY3QtPmVuc3VyZVdyaXRh
YmxlKHZtKTsKIAogICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gdm0ucHJvcGVydHlOYW1lcy0+bGVu
Z3RoKSB7CkBAIC0yNTEsNiArMjQ3LDkgQEAgYm9vbCBKU0FycmF5OjpwdXQoSlNDZWxsKiBjZWxs
LCBKU0dsb2JhbAogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAKKyAgICAg
ICAgaWYgKFVOTElLRUxZKHNsb3QudGhpc1ZhbHVlKCkgIT0gdGhpc09iamVjdCkpCisgICAgICAg
ICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTT2JqZWN0OjpkZWZpbmVQcm9wZXJ0eU9u
UmVjZWl2ZXIoZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KSk7CisKICAg
ICAgICAgdW5zaWduZWQgbmV3TGVuZ3RoID0gdmFsdWUudG9VSW50MzIoZ2xvYmFsT2JqZWN0KTsK
ICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZmFsc2UpOwogICAgICAgICBkb3Vi
bGUgdmFsdWVBc051bWJlciA9IHZhbHVlLnRvTnVtYmVyKGdsb2JhbE9iamVjdCk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5oCShyZXZpc2lvbiAyNzYzNTUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmgJKHdvcmtpbmcgY29weSkK
QEAgLTQwLDcgKzQwLDcgQEAgY2xhc3MgSlNBcnJheSA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0
IAogCiBwdWJsaWM6CiAgICAgdHlwZWRlZiBKU05vbkZpbmFsT2JqZWN0IEJhc2U7Ci0gICAgc3Rh
dGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZs
YWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzR2V0T3duU3BlY2lh
bFByb3BlcnR5TmFtZXM7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVG
bGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90
IHwgT3ZlcnJpZGVzR2V0T3duU3BlY2lhbFByb3BlcnR5TmFtZXMgfCBPdmVycmlkZXNQdXQ7CiAK
ICAgICBzdGF0aWMgc2l6ZV90IGFsbG9jYXRpb25TaXplKENoZWNrZWQ8c2l6ZV90PiBpbmxpbmVD
YXBhY2l0eSkKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Fy
cmF5QnVmZmVyVmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuY3BwCShyZXZpc2lvbiAyNzYzNTUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE3MiwxOCArMTcyLDYgQEAgdm9pZCBKU0FycmF5QnVmZmVyVmlldzo6dmlzaXRDaGls
ZHJlbkltcAogCiBERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNBcnJheUJ1ZmZlclZpZXcpOwogCi1i
b29sIEpTQXJyYXlCdWZmZXJWaWV3OjpwdXQoCi0gICAgSlNDZWxsKiBjZWxsLCBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZh
bHVlLAotICAgIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKLXsKLSAgICBKU0FycmF5QnVmZmVyVmll
dyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0FycmF5QnVmZmVyVmlldyo+KGNlbGwpOwotCi0gICAg
aWYgKFVOTElLRUxZKGlzVGhpc1ZhbHVlQWx0ZXJlZChzbG90LCB0aGlzT2JqZWN0KSkpCi0gICAg
ICAgIHJldHVybiBvcmRpbmFyeVNldFNsb3coZ2xvYmFsT2JqZWN0LCB0aGlzT2JqZWN0LCBwcm9w
ZXJ0eU5hbWUsIHZhbHVlLCBzbG90LnRoaXNWYWx1ZSgpLCBzbG90LmlzU3RyaWN0TW9kZSgpKTsK
LSAgICAKLSAgICByZXR1cm4gQmFzZTo6cHV0KHRoaXNPYmplY3QsIGdsb2JhbE9iamVjdCwgcHJv
cGVydHlOYW1lLCB2YWx1ZSwgc2xvdCk7Ci19Ci0KIEFycmF5QnVmZmVyKiBKU0FycmF5QnVmZmVy
Vmlldzo6dW5zaGFyZWRCdWZmZXIoKQogewogICAgIEFycmF5QnVmZmVyKiByZXN1bHQgPSBwb3Nz
aWJseVNoYXJlZEJ1ZmZlcigpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNBcnJheUJ1ZmZlclZpZXcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5oCShyZXZpc2lvbiAyNzYzNTUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xNjksOCArMTY5LDYgQEAgcHJvdGVjdGVkOgogICAgIAogICAgIEpTX0VYUE9SVF9QUklW
QVRFIEpTQXJyYXlCdWZmZXJWaWV3KFZNJiwgQ29uc3RydWN0aW9uQ29udGV4dCYpOwogICAgIEpT
X0VYUE9SVF9QUklWQVRFIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKLSAgICAKLSAgICBzdGF0
aWMgYm9vbCBwdXQoSlNDZWxsKiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIEpTVmFs
dWUsIFB1dFByb3BlcnR5U2xvdCYpOwogCiAgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKICAg
ICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0pTVmFsdWUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0pTVmFsdWUuY3Bw
CShyZXZpc2lvbiAyNzYzNTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NK
U1ZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjEyLDcgKzIxMiw3IEBAIEpTT2JqZWN0KiBK
U1ZhbHVlOjpzeW50aGVzaXplUHJvdG90eXBlKEoKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAot
Ly8gRUNNQSA4LjcuMgorLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vcmRpbmFyeXNl
dAogYm9vbCBKU1ZhbHVlOjpwdXRUb1ByaW1pdGl2ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBQdXRQcm9wZXJ0
eVNsb3QmIHNsb3QpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwpAQCAtMjIx
LDY5ICsyMjEsMTQgQEAgYm9vbCBKU1ZhbHVlOjpwdXRUb1ByaW1pdGl2ZShKU0dsb2JhbE9iagog
ICAgIGlmIChPcHRpb25hbDx1aW50MzJfdD4gaW5kZXggPSBwYXJzZUluZGV4KHByb3BlcnR5TmFt
ZSkpCiAgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgcHV0VG9QcmltaXRpdmVCeUlu
ZGV4KGdsb2JhbE9iamVjdCwgaW5kZXgudmFsdWUoKSwgdmFsdWUsIHNsb3QuaXNTdHJpY3RNb2Rl
KCkpKTsKIAorICAgIGlmIChpc1N0cmluZygpICYmIHByb3BlcnR5TmFtZS51aWQoKSA9PSB2bS5w
cm9wZXJ0eU5hbWVzLT5sZW5ndGguaW1wbCgpKQorICAgICAgICByZXR1cm4gdHlwZUVycm9yKGds
b2JhbE9iamVjdCwgc2NvcGUsIHNsb3QuaXNTdHJpY3RNb2RlKCksIFJlYWRvbmx5UHJvcGVydHlX
cml0ZUVycm9yKTsKICAgICAvLyBDaGVjayBpZiB0aGVyZSBhcmUgYW55IHNldHRlcnMgb3IgZ2V0
dGVycyBpbiB0aGUgcHJvdG90eXBlIGNoYWluCiAgICAgSlNPYmplY3QqIG9iaiA9IHN5bnRoZXNp
emVQcm90b3R5cGUoZ2xvYmFsT2JqZWN0KTsKICAgICBFWENFUFRJT05fQVNTRVJUKCEhc2NvcGUu
ZXhjZXB0aW9uKCkgPT0gIW9iaik7CiAgICAgaWYgKFVOTElLRUxZKCFvYmopKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgSlNWYWx1ZSBwcm90b3R5cGU7Ci0gICAgaWYgKHByb3BlcnR5TmFt
ZSAhPSB2bS5wcm9wZXJ0eU5hbWVzLT51bmRlcnNjb3JlUHJvdG8pIHsKLSAgICAgICAgd2hpbGUg
KHRydWUpIHsKLSAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gb2JqLT5zdHJ1Y3R1
cmUodm0pOwotICAgICAgICAgICAgaWYgKHN0cnVjdHVyZS0+aGFzUmVhZE9ubHlPckdldHRlclNl
dHRlclByb3BlcnRpZXNFeGNsdWRpbmdQcm90bygpIHx8IHN0cnVjdHVyZS0+dHlwZUluZm8oKS5o
YXNQdXRQcm9wZXJ0eVNlY3VyaXR5Q2hlY2soKSkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgIGlmIChvYmotPnR5cGUoKSA9PSBQcm94eU9iamVjdFR5cGUpIHsKLSAgICAgICAg
ICAgICAgICBhdXRvKiBwcm94eSA9IGpzQ2FzdDxQcm94eU9iamVjdCo+KG9iaik7Ci0gICAgICAg
ICAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBwcm94eS0+UHJveHlPYmplY3Q6OnB1
dChwcm94eSwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KSk7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBwcm90b3R5cGUgPSBvYmotPmdldFByb3RvdHlwZSh2bSwg
Z2xvYmFsT2JqZWN0KTsKLSAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGZh
bHNlKTsKLQotICAgICAgICAgICAgaWYgKHByb3RvdHlwZS5pc051bGwoKSkKLSAgICAgICAgICAg
ICAgICByZXR1cm4gdHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsIHNsb3QuaXNTdHJpY3RN
b2RlKCksIFJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9yKTsKLSAgICAgICAgICAgIG9iaiA9IGFz
T2JqZWN0KHByb3RvdHlwZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBmb3IgKDsgOyBvYmog
PSBhc09iamVjdChwcm90b3R5cGUpKSB7Ci0gICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0g
b2JqLT5zdHJ1Y3R1cmUodm0pOwotICAgICAgICBpZiAoVU5MSUtFTFkoc3RydWN0dXJlLT50eXBl
SW5mbygpLmhhc1B1dFByb3BlcnR5U2VjdXJpdHlDaGVjaygpKSkgewotICAgICAgICAgICAgb2Jq
LT5tZXRob2RUYWJsZSh2bSktPmRvUHV0UHJvcGVydHlTZWN1cml0eUNoZWNrKG9iaiwgZ2xvYmFs
T2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwotICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgZmFsc2UpOwotICAgICAgICB9Ci0gICAgICAgIHVuc2lnbmVkIGF0dHJpYnV0
ZXM7Ci0gICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0KHZtLCBw
cm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMpOwotICAgICAgICBpZiAob2Zmc2V0ICE9IGludmFsaWRP
ZmZzZXQpIHsKLSAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVzICYgUHJvcGVydHlBdHRyaWJ1dGU6
OlJlYWRPbmx5KQotICAgICAgICAgICAgICAgIHJldHVybiB0eXBlRXJyb3IoZ2xvYmFsT2JqZWN0
LCBzY29wZSwgc2xvdC5pc1N0cmljdE1vZGUoKSwgUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3Ip
OwotCi0gICAgICAgICAgICBKU1ZhbHVlIGdzID0gb2JqLT5nZXREaXJlY3Qob2Zmc2V0KTsKLSAg
ICAgICAgICAgIGlmIChncy5pc0dldHRlclNldHRlcigpKQotICAgICAgICAgICAgICAgIFJFTEVB
U0VfQU5EX1JFVFVSTihzY29wZSwgY2FsbFNldHRlcihnbG9iYWxPYmplY3QsICp0aGlzLCBncywg
dmFsdWUsIHNsb3QuaXNTdHJpY3RNb2RlKCkgPyBFQ01BTW9kZTo6c3RyaWN0KCkgOiBFQ01BTW9k
ZTo6c2xvcHB5KCkpKTsKLQotICAgICAgICAgICAgaWYgKGdzLmlzQ3VzdG9tR2V0dGVyU2V0dGVy
KCkpIHsKLSAgICAgICAgICAgICAgICBhdXRvIHNldHRlciA9IGpzQ2FzdDxDdXN0b21HZXR0ZXJT
ZXR0ZXIqPihncy5hc0NlbGwoKSktPnNldHRlcigpOwotICAgICAgICAgICAgICAgIGJvb2wgaXNB
Y2Nlc3NvciA9IGF0dHJpYnV0ZXMgJiBQcm9wZXJ0eUF0dHJpYnV0ZTo6Q3VzdG9tQWNjZXNzb3I7
Ci0gICAgICAgICAgICAgICAgYXV0byByZXN1bHQgPSBjYWxsQ3VzdG9tU2V0dGVyKGdsb2JhbE9i
amVjdCwgc2V0dGVyLCBpc0FjY2Vzc29yLCBvYmosIHNsb3QudGhpc1ZhbHVlKCksIHZhbHVlLCBw
cm9wZXJ0eU5hbWUpOwotICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgIT0gVHJpU3RhdGU6Oklu
ZGV0ZXJtaW5hdGUpCi0gICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29w
ZSwgcmVzdWx0ID09IFRyaVN0YXRlOjpUcnVlKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgLy8gSWYgdGhlcmUncyBhbiBleGlzdGluZyBwcm9wZXJ0eSBvbiB0aGUgb2JqZWN0IG9yIG9u
ZSBvZiBpdHMgCi0gICAgICAgICAgICAvLyBwcm90b3R5cGVzIGl0IHNob3VsZCBiZSByZXBsYWNl
ZCwgc28gYnJlYWsgaGVyZS4KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAg
IGlmIChvYmotPnR5cGUoKSA9PSBQcm94eU9iamVjdFR5cGUpIHsKLSAgICAgICAgICAgIGF1dG8q
IHByb3h5ID0ganNDYXN0PFByb3h5T2JqZWN0Kj4ob2JqKTsKLSAgICAgICAgICAgIFJFTEVBU0Vf
QU5EX1JFVFVSTihzY29wZSwgcHJveHktPlByb3h5T2JqZWN0OjpwdXQocHJveHksIGdsb2JhbE9i
amVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCkpOwotICAgICAgICB9Ci0gICAgICAgIHBy
b3RvdHlwZSA9IG9iai0+Z2V0UHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QpOwotICAgICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBmYWxzZSk7Ci0gICAgICAgIGlmIChwcm90b3R5cGUu
aXNOdWxsKCkpCi0gICAgICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHR5
cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCBzbG90LmlzU3RyaWN0TW9kZSgpLCBSZWFkb25s
eVByb3BlcnR5V3JpdGVFcnJvcik7CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBvYmot
Pm1ldGhvZFRhYmxlKHZtKS0+cHV0KG9iaiwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHZh
bHVlLCBzbG90KSk7CiB9CiAKIGJvb2wgSlNWYWx1ZTo6cHV0VG9QcmltaXRpdmVCeUluZGV4KEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1
ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJvdykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTQ2VsbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNDZWxsLmNwcAkocmV2aXNpb24gMjc2MzU1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNDZWxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjAxLDExICsyMDEsNiBA
QCBib29sIEpTQ2VsbDo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKCiAgICAgcmV0dXJuIGZh
bHNlOwogfQogCi12b2lkIEpTQ2VsbDo6ZG9QdXRQcm9wZXJ0eVNlY3VyaXR5Q2hlY2soSlNPYmpl
Y3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwgUHV0UHJvcGVydHlTbG90JikKLXsK
LSAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotfQotCiB2b2lkIEpTQ2VsbDo6Z2V0
T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1l
QXJyYXkmLCBEb250RW51bVByb3BlcnRpZXNNb2RlKQogewogICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAko
cmV2aXNpb24gMjc2MzU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxs
LmgJKHdvcmtpbmcgY29weSkKQEAgLTI1Nyw3ICsyNTcsNiBAQCBwcm90ZWN0ZWQ6CiAgICAgc3Rh
dGljIGJvb2wgZGVmaW5lT3duUHJvcGVydHkoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFBy
b3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlEZXNjcmlwdG9yJiwgYm9vbCBzaG91bGRUaHJvdyk7
CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiwgSlNHbG9iYWxP
YmplY3QqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwogICAgIHN0YXRpYyBib29sIGdl
dE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIHVuc2ln
bmVkIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7Ci0gICAgc3RhdGljIE5PX1JFVFVSTl9E
VUVfVE9fQ1JBU0ggdm9pZCBkb1B1dFByb3BlcnR5U2VjdXJpdHlDaGVjayhKU09iamVjdCosIEpT
R2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBQdXRQcm9wZXJ0eVNsb3QmKTsKIAogcHJpdmF0
ZToKICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5jcHAJKHJldmlzaW9uIDI3NjM1
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC01MTksMTAgKzUxOSw2IEBAIGJvb2wgSlNGdW5jdGlvbjo6cHV0KEpTQ2Vs
bCogY2VsbCwgSlNHbG8KICAgICAgICAgICAgIHJhcmVEYXRhLT5zZXRIYXNNb2RpZmllZE5hbWVG
b3JOb25Ib3N0RnVuY3Rpb24oKTsKICAgICB9CiAKLSAgICBpZiAoVU5MSUtFTFkoaXNUaGlzVmFs
dWVBbHRlcmVkKHNsb3QsIHRoaXNPYmplY3QpKSkKLSAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJO
KHNjb3BlLCBvcmRpbmFyeVNldFNsb3coZ2xvYmFsT2JqZWN0LCB0aGlzT2JqZWN0LCBwcm9wZXJ0
eU5hbWUsIHZhbHVlLCBzbG90LnRoaXNWYWx1ZSgpLCBzbG90LmlzU3RyaWN0TW9kZSgpKSk7Ci0K
LQogICAgIGlmICh0aGlzT2JqZWN0LT5pc0hvc3RPckJ1aWx0aW5GdW5jdGlvbigpKSB7CiAgICAg
ICAgIFByb3BlcnR5U3RhdHVzIHByb3BlcnR5VHlwZSA9IHRoaXNPYmplY3QtPnJlaWZ5TGF6eVBy
b3BlcnR5Rm9ySG9zdE9yQnVpbHRpbklmTmVlZGVkKHZtLCBnbG9iYWxPYmplY3QsIHByb3BlcnR5
TmFtZSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGZhbHNlKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmgJKHJldmlzaW9uIDI3
NjM1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uaAkod29y
a2luZyBjb3B5KQpAQCAtNzAsNyArNzAsNyBAQCBwdWJsaWM6CiAgICAgfQogICAgIAogICAgIHR5
cGVkZWYgSlNDYWxsZWUgQmFzZTsKLSAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVj
dHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0
eVNsb3QgfCBPdmVycmlkZXNHZXRPd25TcGVjaWFsUHJvcGVydHlOYW1lcyB8IE92ZXJyaWRlc0dl
dENhbGxEYXRhOworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3Mg
PSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92
ZXJyaWRlc0dldE93blNwZWNpYWxQcm9wZXJ0eU5hbWVzIHwgT3ZlcnJpZGVzR2V0Q2FsbERhdGEg
fCBPdmVycmlkZXNQdXQ7CiAKICAgICBzdGF0aWMgc2l6ZV90IGFsbG9jYXRpb25TaXplKENoZWNr
ZWQ8c2l6ZV90PiBpbmxpbmVDYXBhY2l0eSkKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlldy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmgJKHJl
dmlzaW9uIDI3NjM1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJp
Y1R5cGVkQXJyYXlWaWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTk5LDcgKzk5LDcgQEAgcHVibGlj
OgogICAgIHVzaW5nIEVsZW1lbnRUeXBlID0gdHlwZW5hbWUgQWRhcHRvcjo6VHlwZTsKICAgICBz
dGF0aWMgY29uc3RleHByIFR5cGVkQXJyYXlDb250ZW50VHlwZSBjb250ZW50VHlwZSA9IEFkYXB0
b3I6OmNvbnRlbnRUeXBlOwogCi0gICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1
cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlT
bG90IHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlOYW1lcyB8IEludGVyY2VwdHNHZXRPd25Qcm9w
ZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm87CisgICAgc3RhdGljIGNvbnN0
ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgT3Zl
cnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlOYW1lcyB8
IE92ZXJyaWRlc1B1dCB8IEludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldo
ZW5MZW5ndGhJc05vdFplcm87CiAKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIGVsZW1l
bnRTaXplID0gc2l6ZW9mKHR5cGVuYW1lIEFkYXB0b3I6OlR5cGUpOwogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbExleGljYWxFbnZpcm9ubWVudC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsTGV4aWNhbEVu
dmlyb25tZW50LmgJKHJldmlzaW9uIDI3NjM1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTR2xvYmFsTGV4aWNhbEVudmlyb25tZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTMz
LDcgKzMzLDcgQEAgY2xhc3MgSlNHbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQgZmluYWwgOgogcHVi
bGljOgogICAgIHVzaW5nIEJhc2UgPSBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0OwogCi0gICAg
c3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVy
ZUZsYWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90OworICAgIHN0YXRpYyBjb25zdGV4
cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IE92ZXJy
aWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRlc1B1dDsKIAogICAgIHRlbXBsYXRlPHR5
cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2VzcyBtb2RlPgogICAgIHN0YXRpYyBJc29TdWJz
cGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAkocmV2aXNpb24gMjc2MzU1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xNDc2LDggKzE0NzYsMTUgQEAgYm9vbCBKU0dsb2JhbE9iamVjdDo6cHV0KEpTQ2Vs
bCogY2VsbCwgSgogICAgIEpTR2xvYmFsT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTR2xv
YmFsT2JqZWN0Kj4oY2VsbCk7CiAgICAgQVNTRVJUKCFIZWFwOjpoZWFwKHZhbHVlKSB8fCBIZWFw
OjpoZWFwKHZhbHVlKSA9PSBIZWFwOjpoZWFwKHRoaXNPYmplY3QpKTsKIAotICAgIGlmIChVTkxJ
S0VMWShpc1RoaXNWYWx1ZUFsdGVyZWQoc2xvdCwgdGhpc09iamVjdCkpKQotICAgICAgICBSRUxF
QVNFX0FORF9SRVRVUk4oc2NvcGUsIG9yZGluYXJ5U2V0U2xvdyhnbG9iYWxPYmplY3QsIHRoaXNP
YmplY3QsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QudGhpc1ZhbHVlKCksIHNsb3QuaXNTdHJp
Y3RNb2RlKCkpKTsKKyAgICBpZiAoVU5MSUtFTFkoaXNUaGlzVmFsdWVBbHRlcmVkKHNsb3QsIHRo
aXNPYmplY3QpKSkgeworICAgICAgICBTeW1ib2xUYWJsZUVudHJ5OjpGYXN0IGVudHJ5ID0gdGhp
c09iamVjdC0+c3ltYm9sVGFibGUoKS0+Z2V0KHByb3BlcnR5TmFtZS51aWQoKSk7CisgICAgICAg
IGlmICghZW50cnkuaXNOdWxsKCkpIHsKKyAgICAgICAgICAgIGlmIChlbnRyeS5pc1JlYWRPbmx5
KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3Bl
LCBzbG90LmlzU3RyaWN0TW9kZSgpLCBSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcik7CisgICAg
ICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTT2JqZWN0OjpkZWZpbmVQcm9wZXJ0
eU9uUmVjZWl2ZXIoZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KSk7Cisg
ICAgICAgIH0KKyAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBCYXNlOjpwdXQodGhp
c09iamVjdCwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KSk7CisgICAg
fQogCiAgICAgYm9vbCBzaG91bGRUaHJvd1JlYWRPbmx5RXJyb3IgPSBzbG90LmlzU3RyaWN0TW9k
ZSgpOwogICAgIGJvb2wgaWdub3JlUmVhZE9ubHlFcnJvcnMgPSBmYWxzZTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAkocmV2aXNpb24g
Mjc2MzU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3Qu
aAkod29ya2luZyBjb3B5KQpAQCAtNTk2LDcgKzU5Niw3IEBAIHB1YmxpYzoKICAgICAgICAgCiBw
dWJsaWM6CiAgICAgdXNpbmcgQmFzZSA9IEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3Q7Ci0gICAg
c3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVy
ZUZsYWdzIHwgSGFzU3RhdGljUHJvcGVydHlUYWJsZSB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5
U2xvdCB8IElzSW1tdXRhYmxlUHJvdG90eXBlRXhvdGljT2JqZWN0OworICAgIHN0YXRpYyBjb25z
dGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEhh
c1N0YXRpY1Byb3BlcnR5VGFibGUgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVy
cmlkZXNQdXQgfCBJc0ltbXV0YWJsZVByb3RvdHlwZUV4b3RpY09iamVjdDsKIAogICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBuZWVkc0Rlc3RydWN0aW9uID0gdHJ1ZTsKICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTTGV4aWNhbEVudmlyb25tZW50LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMZXhpY2FsRW52aXJvbm1lbnQuaAkocmV2
aXNpb24gMjc2MzU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMZXhpY2Fs
RW52aXJvbm1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNDgsNyArNDgsNyBAQCBwdWJsaWM6CiAg
ICAgfQogCiAgICAgdXNpbmcgQmFzZSA9IEpTU3ltYm9sVGFibGVPYmplY3Q7Ci0gICAgc3RhdGlj
IGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdz
IHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzR2V0T3duU3BlY2lhbFBy
b3BlcnR5TmFtZXM7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFn
cyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwg
T3ZlcnJpZGVzR2V0T3duU3BlY2lhbFByb3BlcnR5TmFtZXMgfCBPdmVycmlkZXNQdXQ7CiAKICAg
ICBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+KiB2YXJpYWJsZXMoKQogICAgIHsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlRW52aXJvbm1lbnQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZUVudmlyb25tZW50
LmgJKHJldmlzaW9uIDI3NjM1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
TW9kdWxlRW52aXJvbm1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsNyArNDAsNyBAQCBjbGFz
cyBKU01vZHVsZUVudmlyb25tZW50IGZpbmFsIDogcHVibGljCiAgICAgZnJpZW5kIGNsYXNzIExM
SW50T2Zmc2V0c0V4dHJhY3RvcjsKIHB1YmxpYzoKICAgICB1c2luZyBCYXNlID0gSlNMZXhpY2Fs
RW52aXJvbm1lbnQ7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFn
cyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwg
T3ZlcnJpZGVzR2V0T3duU3BlY2lhbFByb3BlcnR5TmFtZXM7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJp
ZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzR2V0T3duU3BlY2lhbFByb3BlcnR5TmFt
ZXMgfCBPdmVycmlkZXNQdXQ7CiAKICAgICBzdGF0aWMgSlNNb2R1bGVFbnZpcm9ubWVudCogY3Jl
YXRlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNTY29wZSogY3VycmVu
dFNjb3BlLCBTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUsIEpTVmFsdWUgaW5pdGlhbFZhbHVlLCBB
YnN0cmFjdE1vZHVsZVJlY29yZCogbW9kdWxlUmVjb3JkKQogICAgIHsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlTmFtZXNwYWNlT2JqZWN0LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVOYW1lc3BhY2VPYmpl
Y3QuaAkocmV2aXNpb24gMjc2MzU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNNb2R1bGVOYW1lc3BhY2VPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsNyBA
QCBuYW1lc3BhY2UgSlNDIHsKIGNsYXNzIEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0IGZpbmFsIDog
cHVibGljIEpTTm9uRmluYWxPYmplY3QgewogcHVibGljOgogICAgIHVzaW5nIEJhc2UgPSBKU05v
bkZpbmFsT2JqZWN0OwotICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxh
Z3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8
IE92ZXJyaWRlc0dldE93blByb3BlcnR5TmFtZXMgfCBJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlT
bG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgR2V0T3duUHJvcGVydHlTbG90SXNJ
bXB1cmVGb3JQcm9wZXJ0eUFic2VuY2UgfCBJc0ltbXV0YWJsZVByb3RvdHlwZUV4b3RpY09iamVj
dDsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6
U3RydWN0dXJlRmxhZ3MgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNH
ZXRPd25Qcm9wZXJ0eU5hbWVzIHwgT3ZlcnJpZGVzUHV0IHwgSW50ZXJjZXB0c0dldE93blByb3Bl
cnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8IEdldE93blByb3BlcnR5U2xv
dElzSW1wdXJlRm9yUHJvcGVydHlBYnNlbmNlIHwgSXNJbW11dGFibGVQcm90b3R5cGVFeG90aWNP
YmplY3Q7CiAKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9IHRy
dWU7CiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAJKHJldmlzaW9uIDI3NjM1NSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNjQ2LDEwICs2NDYsNiBAQCBib29sIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlNP
YmplCiB7CiAgICAgcmV0dXJuIGdldE93blByb3BlcnR5U2xvdEltcGwob2JqZWN0LCBnbG9iYWxP
YmplY3QsIHByb3BlcnR5TmFtZSwgc2xvdCk7CiB9Ci0KLXZvaWQgSlNPYmplY3Q6OmRvUHV0UHJv
cGVydHlTZWN1cml0eUNoZWNrKEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5h
bWUsIFB1dFByb3BlcnR5U2xvdCYpCi17Ci19CiAjZW5kaWYgLy8gQVNTRVJUX0VOQUJMRUQKIAog
Ly8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtb3JkaW5hcnlzZXQKQEAgLTc1
OCw3ICs3NTQsNyBAQCBib29sIG9yZGluYXJ5U2V0U2xvdyhKU0dsb2JhbE9iamVjdCogZ2xvCiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKLS8vIEVDTUEgOC42LjIuMgorLy8gaHR0cHM6Ly90YzM5LmVz
L2VjbWEyNjIvI3NlYy1vcmRpbmFyeXNldAogYm9vbCBKU09iamVjdDo6cHV0KEpTQ2VsbCogY2Vs
bCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFt
ZSwgSlNWYWx1ZSB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBzbG90KQogewogICAgIHJldHVybiBw
dXRJbmxpbmVGb3JKU09iamVjdChjZWxsLCBnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgdmFs
dWUsIHNsb3QpOwpAQCAtNzY2LDY5ICs3NjIsODkgQEAgYm9vbCBKU09iamVjdDo6cHV0KEpTQ2Vs
bCogY2VsbCwgSlNHbG9iYQogCiBib29sIEpTT2JqZWN0OjpwdXRJbmxpbmVTbG93KEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUg
dmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKLSAgICBBU1NFUlQoIWlzVGhpc1ZhbHVl
QWx0ZXJlZChzbG90LCB0aGlzKSk7CisgICAgQVNTRVJUKCFwYXJzZUluZGV4KHByb3BlcnR5TmFt
ZSkpOwogCiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAorICAgIGlmIChVTkxJS0VMWSghdm0uaXNTYWZl
VG9SZWN1cnNlU29mdCgpKSkgeworICAgICAgICB0aHJvd1N0YWNrT3ZlcmZsb3dFcnJvcihnbG9i
YWxPYmplY3QsIHNjb3BlKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKwogICAgIEpT
T2JqZWN0KiBvYmogPSB0aGlzOwogICAgIGZvciAoOzspIHsKICAgICAgICAgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUgPSBvYmotPnN0cnVjdHVyZSh2bSk7Ci0gICAgICAgIGlmIChVTkxJS0VMWShzdHJ1
Y3R1cmUtPnR5cGVJbmZvKCkuaGFzUHV0UHJvcGVydHlTZWN1cml0eUNoZWNrKCkpKSB7Ci0gICAg
ICAgICAgICBvYmotPm1ldGhvZFRhYmxlKHZtKS0+ZG9QdXRQcm9wZXJ0eVNlY3VyaXR5Q2hlY2so
b2JqLCBnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgc2xvdCk7Ci0gICAgICAgICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBmYWxzZSk7Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKG9i
aiAhPSB0aGlzICYmIHN0cnVjdHVyZS0+dHlwZUluZm8oKS5vdmVycmlkZXNQdXQoKSkKKyAgICAg
ICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgb2JqLT5tZXRob2RUYWJsZSh2bSktPnB1
dChvYmosIGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCkpOworCisgICAg
ICAgIGJvb2wgaGFzUHJvcGVydHkgPSBmYWxzZTsKICAgICAgICAgdW5zaWduZWQgYXR0cmlidXRl
czsKKyAgICAgICAgUHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmMgY3VzdG9tU2V0dGVyID0g
bnVsbHB0cjsKICAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0dXJlLT5nZXQo
dm0sIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcyk7CiAgICAgICAgIGlmIChpc1ZhbGlkT2Zmc2V0
KG9mZnNldCkpIHsKLSAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVzICYgUHJvcGVydHlBdHRyaWJ1
dGU6OlJlYWRPbmx5KSB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKHRoaXMtPnByb3RvdHlwZUNo
YWluTWF5SW50ZXJjZXB0U3RvcmVUbyh2bSwgcHJvcGVydHlOYW1lKSB8fCBvYmogPT0gdGhpcyk7
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCBz
bG90LmlzU3RyaWN0TW9kZSgpLCBSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcik7CisgICAgICAg
ICAgICBoYXNQcm9wZXJ0eSA9IHRydWU7CisgICAgICAgICAgICBpZiAoYXR0cmlidXRlcyAmIFBy
b3BlcnR5QXR0cmlidXRlOjpDdXN0b21BY2Nlc3Nvck9yVmFsdWUpCisgICAgICAgICAgICAgICAg
Y3VzdG9tU2V0dGVyID0ganNDYXN0PEN1c3RvbUdldHRlclNldHRlcio+KG9iai0+Z2V0RGlyZWN0
KG9mZnNldCkpLT5zZXR0ZXIoKTsKKyAgICAgICAgfSBlbHNlIGlmIChzdHJ1Y3R1cmUtPmhhc05v
blJlaWZpZWRTdGF0aWNQcm9wZXJ0aWVzKCkpIHsKKyAgICAgICAgICAgIGlmIChhdXRvIGVudHJ5
ID0gc3RydWN0dXJlLT5maW5kUHJvcGVydHlIYXNoRW50cnkocHJvcGVydHlOYW1lKSkgeworICAg
ICAgICAgICAgICAgIGhhc1Byb3BlcnR5ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBhdHRyaWJ1
dGVzID0gYXR0cmlidXRlc0ZvclN0cnVjdHVyZShlbnRyeS0+dmFsdWUtPmF0dHJpYnV0ZXMoKSk7
CisKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogUmVtb3ZlIHRoaXMgYWZ0ZXIgd3JpdGFibGUg
YWNjZXNzb3JzIGFyZSBpbnRyb2R1Y2VkIHRvIHN0YXRpYyBoYXNoIHRhYmxlcy4KKyAgICAgICAg
ICAgICAgICBpZiAoYXR0cmlidXRlcyAmIFByb3BlcnR5QXR0cmlidXRlOjpBY2Nlc3NvcikKKyAg
ICAgICAgICAgICAgICAgICAgYXR0cmlidXRlcyB8PSBQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9u
bHk7CisgICAgICAgICAgICAgICAgLy8gRklYTUU6IFJlbW92ZSB0aGlzIGFmdGVyIHdlIHN0b3Ag
ZGVmYXVsdGluZyB0byBDdXN0b21WYWx1ZSBpbiBzdGF0aWMgaGFzaCB0YWJsZXMuCisgICAgICAg
ICAgICAgICAgaWYgKCEoZW50cnktPnZhbHVlLT5hdHRyaWJ1dGVzKCkgJiAoUHJvcGVydHlBdHRy
aWJ1dGU6OkN1c3RvbUFjY2Vzc29yIHwgUHJvcGVydHlBdHRyaWJ1dGU6OkJ1aWx0aW5PckZ1bmN0
aW9uT3JBY2Nlc3Nvck9yTGF6eVByb3BlcnR5T3JDb25zdGFudCkpKQorICAgICAgICAgICAgICAg
ICAgICBhdHRyaWJ1dGVzIHw9IFByb3BlcnR5QXR0cmlidXRlOjpDdXN0b21WYWx1ZTsKKworICAg
ICAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVzICYgUHJvcGVydHlBdHRyaWJ1dGU6OkN1c3RvbUFj
Y2Vzc29yT3JWYWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgY3VzdG9tU2V0dGVyID0gZW50cnkt
PnZhbHVlLT5wcm9wZXJ0eVB1dHRlcigpOwogICAgICAgICAgICAgfQorICAgICAgICB9CiAKLSAg
ICAgICAgICAgIEpTVmFsdWUgZ3MgPSBvYmotPmdldERpcmVjdChvZmZzZXQpOwotICAgICAgICAg
ICAgaWYgKGdzLmlzR2V0dGVyU2V0dGVyKCkpIHsKKyAgICAgICAgaWYgKGhhc1Byb3BlcnR5KSB7
CisgICAgICAgICAgICBpZiAoYXR0cmlidXRlcyAmIFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25s
eSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUs
IHNsb3QuaXNTdHJpY3RNb2RlKCksIFJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9yKTsKKyAgICAg
ICAgICAgIGlmIChhdHRyaWJ1dGVzICYgUHJvcGVydHlBdHRyaWJ1dGU6OkFjY2Vzc29yKSB7Cisg
ICAgICAgICAgICAgICAgQVNTRVJUKGlzVmFsaWRPZmZzZXQob2Zmc2V0KSk7CiAgICAgICAgICAg
ICAgICAgLy8gV2UgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCB3ZSBkZWNpZGUgdG8gY2FjaGUgdGhp
cyBwcm9wZXJ0eSBiZWZvcmUgd2UgcG90ZW50aWFsbHkgZXhlY3V0ZSBhcmliaXRyYXJ5IEpTLgog
ICAgICAgICAgICAgICAgIGlmICghdGhpcy0+c3RydWN0dXJlKHZtKS0+aXNVbmNhY2hlYWJsZURp
Y3Rpb25hcnkoKSkKICAgICAgICAgICAgICAgICAgICAgc2xvdC5zZXRDYWNoZWFibGVTZXR0ZXIo
b2JqLCBvZmZzZXQpOwotCi0gICAgICAgICAgICAgICAgYm9vbCByZXN1bHQgPSBjYWxsU2V0dGVy
KGdsb2JhbE9iamVjdCwgc2xvdC50aGlzVmFsdWUoKSwgZ3MsIHZhbHVlLCBzbG90LmlzU3RyaWN0
TW9kZSgpID8gRUNNQU1vZGU6OnN0cmljdCgpIDogRUNNQU1vZGU6OnNsb3BweSgpKTsKLSAgICAg
ICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBmYWxzZSk7Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgICAgICBKU1ZhbHVlIGdzID0gb2JqLT5n
ZXREaXJlY3Qob2Zmc2V0KTsKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2Nv
cGUsIGNhbGxTZXR0ZXIoZ2xvYmFsT2JqZWN0LCBzbG90LnRoaXNWYWx1ZSgpLCBncywgdmFsdWUs
IHNsb3QuaXNTdHJpY3RNb2RlKCkgPyBFQ01BTW9kZTo6c3RyaWN0KCkgOiBFQ01BTW9kZTo6c2xv
cHB5KCkpKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChncy5pc0N1c3RvbUdldHRl
clNldHRlcigpKSB7Ci0gICAgICAgICAgICAgICAgYm9vbCBpc0FjY2Vzc29yID0gYXR0cmlidXRl
cyAmIFByb3BlcnR5QXR0cmlidXRlOjpDdXN0b21BY2Nlc3NvcjsKLSAgICAgICAgICAgICAgICBh
dXRvIHNldHRlciA9IGpzQ2FzdDxDdXN0b21HZXR0ZXJTZXR0ZXIqPihncy5hc0NlbGwoKSktPnNl
dHRlcigpOworICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZXMgJiBQcm9wZXJ0eUF0dHJpYnV0ZTo6
Q3VzdG9tQWNjZXNzb3IpIHsKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogUmVtb3ZlIHRoaXMg
YWZ0ZXIgV2ViSURMIGdlbmVyYXRvciBpcyBmaXhlZCB0byBzZXQgUmVhZE9ubHkgZm9yIFtSdW50
aW1lQ29uZGl0aW9uYWxseVJlYWRXcml0ZV0gYXR0cmlidXRlcy4KKyAgICAgICAgICAgICAgICBp
ZiAoIWN1c3RvbVNldHRlcikKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICAgICAgICAgIEFTU0VSVChjdXN0b21TZXR0ZXIpOwogICAgICAgICAgICAgICAgIC8vIEZJ
WE1FOiBXZSBzaG91bGQgb25seSBiZSBjYWNoaW5nIHRoZXNlIGlmIHdlJ3JlIG5vdCBhbiB1bmNh
Y2hlYWJsZSBkaWN0aW9uYXJ5OgogICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTUzNDcKLQotICAgICAgICAgICAgICAgIC8vIFdlIG5l
ZWQgdG8gbWFrZSBzdXJlIHRoYXQgd2UgZGVjaWRlIHRvIGNhY2hlIHRoaXMgcHJvcGVydHkgYmVm
b3JlIHdlIHBvdGVudGlhbGx5IGV4ZWN1dGUgYXJpYml0cmFyeSBKUy4KLSAgICAgICAgICAgICAg
ICBpZiAoaXNBY2Nlc3NvcikKLSAgICAgICAgICAgICAgICAgICAgc2xvdC5zZXRDdXN0b21BY2Nl
c3NvcihvYmosIHNldHRlcik7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAg
ICAgICBzbG90LnNldEN1c3RvbVZhbHVlKG9iaiwgc2V0dGVyKTsKLQotICAgICAgICAgICAgICAg
IGF1dG8gcmVzdWx0ID0gY2FsbEN1c3RvbVNldHRlcihnbG9iYWxPYmplY3QsIHNldHRlciwgaXNB
Y2Nlc3Nvciwgb2JqLCBzbG90LnRoaXNWYWx1ZSgpLCB2YWx1ZSwgcHJvcGVydHlOYW1lKTsKLSAg
ICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBmYWxzZSk7Ci0gICAgICAg
ICAgICAgICAgaWYgKHJlc3VsdCAhPSBUcmlTdGF0ZTo6SW5kZXRlcm1pbmF0ZSkKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCA9PSBUcmlTdGF0ZTo6VHJ1ZTsKKyAgICAgICAgICAg
ICAgICBzbG90LnNldEN1c3RvbUFjY2Vzc29yKG9iaiwgY3VzdG9tU2V0dGVyKTsKKyAgICAgICAg
ICAgICAgICBzY29wZS5yZWxlYXNlKCk7CisgICAgICAgICAgICAgICAgY3VzdG9tU2V0dGVyKGds
b2JhbE9iamVjdCwgSlNWYWx1ZTo6ZW5jb2RlKHNsb3QudGhpc1ZhbHVlKCkpLCBKU1ZhbHVlOjpl
bmNvZGUodmFsdWUpLCBwcm9wZXJ0eU5hbWUpOworICAgICAgICAgICAgICAgIHJldHVybiB0cnVl
OwogICAgICAgICAgICAgfQotICAgICAgICAgICAgQVNTRVJUKCEoYXR0cmlidXRlcyAmIFByb3Bl
cnR5QXR0cmlidXRlOjpBY2Nlc3NvcikpOwotCi0gICAgICAgICAgICAvLyBJZiB0aGVyZSdzIGFu
IGV4aXN0aW5nIHByb3BlcnR5IG9uIHRoZSBiYXNlIG9iamVjdCwgb3Igb24gb25lIG9mIGl0cyAK
LSAgICAgICAgICAgIC8vIHByb3RvdHlwZXMsIHdlIHNob3VsZCBzdG9yZSB0aGUgcHJvcGVydHkg
b24gdGhlICpiYXNlKiBvYmplY3QuCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAg
ICAgICBpZiAoIW9iai0+c3RhdGljUHJvcGVydGllc1JlaWZpZWQodm0pKSB7Ci0gICAgICAgICAg
ICBpZiAob2JqLT5jbGFzc0luZm8odm0pLT5oYXNTdGF0aWNTZXR0ZXJPclJlYWRvbmx5UHJvcGVy
dGllcygpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGF1dG8gZW50cnkgPSBvYmotPmZpbmRQcm9w
ZXJ0eUhhc2hFbnRyeSh2bSwgcHJvcGVydHlOYW1lKSkKLSAgICAgICAgICAgICAgICAgICAgUkVM
RUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBwdXRFbnRyeShnbG9iYWxPYmplY3QsIGVudHJ5LT50YWJs
ZS0+Y2xhc3NGb3JUaGlzLCBlbnRyeS0+dmFsdWUsIG9iaiwgdGhpcywgcHJvcGVydHlOYW1lLCB2
YWx1ZSwgc2xvdCkpOworICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZXMgJiBQcm9wZXJ0eUF0dHJp
YnV0ZTo6Q3VzdG9tVmFsdWUpIHsKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogT25jZSBsZWdh
Y3kgUmVnRXhwIGZlYXR1cmVzIGFyZSBpbXBsZW1lbnRlZCwgdGhlcmUgd291bGQgYmUgbm8gdXNl
IGNhc2UgZm9yIGNhbGxpbmcgQ3VzdG9tVmFsdWUgc2V0dGVyIGlmIHJlY2VpdmVyIGlzIGFsdGVy
ZWQuCisgICAgICAgICAgICAgICAgaWYgKGN1c3RvbVNldHRlciAmJiAhKGlzVGhpc1ZhbHVlQWx0
ZXJlZChzbG90LCBvYmopICYmIHNsb3QuY29udGV4dCgpID09IFB1dFByb3BlcnR5U2xvdDo6UmVm
bGVjdFNldCkpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBvbmx5
IGJlIGNhY2hpbmcgdGhlc2UgaWYgd2UncmUgbm90IGFuIHVuY2FjaGVhYmxlIGRpY3Rpb25hcnk6
CisgICAgICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMTUzNDcKKyAgICAgICAgICAgICAgICAgICAgc2xvdC5zZXRDdXN0b21WYWx1ZShv
YmosIGN1c3RvbVNldHRlcik7CisgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVS
TihzY29wZSwgY3VzdG9tU2V0dGVyKGdsb2JhbE9iamVjdCwgSlNWYWx1ZTo6ZW5jb2RlKG9iaiks
IEpTVmFsdWU6OmVuY29kZSh2YWx1ZSksIHByb3BlcnR5TmFtZSkpOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICBpZiAoIWlzVGhpc1ZhbHVlQWx0ZXJlZChzbG90LCBvYmopKSB7
CisgICAgICAgICAgICAgICAgICAgIC8vIEF2b2lkIFB1dE1vZGVQdXQgYmVjYXVzZSBpdCBmYWls
cyBmb3Igbm9uLWV4dGVuc2libGUgc3RydWN0dXJlcy4KKyAgICAgICAgICAgICAgICAgICAgb2Jq
LT5wdXREaXJlY3Qodm0sIHByb3BlcnR5TmFtZSwgdmFsdWUsIGF0dHJpYnV0ZXMgJiB+UHJvcGVy
dHlBdHRyaWJ1dGU6OkN1c3RvbVZhbHVlLCBzbG90KTsKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQorICAgICAgICAgICAg
Ly8gSWYgdGhlcmUncyBhbiBleGlzdGluZyB3cml0YWJsZSBwcm9wZXJ0eSBvbiB0aGUgYmFzZSBv
YmplY3QsIG9yIG9uIG9uZSBvZiBpdHMgCisgICAgICAgICAgICAvLyBwcm90b3R5cGVzLCB3ZSBz
aG91bGQgYXR0ZW1wdCB0byBzdG9yZSB0aGUgcHJvcGVydHkgb24gdGhlIHJlY2VpdmVyLgorICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKG9iai0+dHlwZSgpID09IFBy
b3h5T2JqZWN0VHlwZSkgewotICAgICAgICAgICAgYXV0byogcHJveHkgPSBqc0Nhc3Q8UHJveHlP
YmplY3QqPihvYmopOwotICAgICAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBwcm94
eS0+UHJveHlPYmplY3Q6OnB1dChwcm94eSwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHZh
bHVlLCBzbG90KSk7Ci0gICAgICAgIH0KKwogICAgICAgICBKU1ZhbHVlIHByb3RvdHlwZSA9IG9i
ai0+Z2V0UHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QpOwogICAgICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCBmYWxzZSk7CiAgICAgICAgIGlmIChwcm90b3R5cGUuaXNOdWxsKCkpCkBA
IC04MzYsNiArODUyLDczIEBAIGJvb2wgSlNPYmplY3Q6OnB1dElubGluZVNsb3coSlNHbG9iYWxP
YmoKICAgICAgICAgb2JqID0gYXNPYmplY3QocHJvdG90eXBlKTsKICAgICB9CiAKKyAgICBzY29w
ZS5yZWxlYXNlKCk7CisgICAgaWYgKFVOTElLRUxZKGlzVGhpc1ZhbHVlQWx0ZXJlZChzbG90LCB0
aGlzKSkpCisgICAgICAgIHJldHVybiBkZWZpbmVQcm9wZXJ0eU9uUmVjZWl2ZXIoZ2xvYmFsT2Jq
ZWN0LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KTsKKyAgICByZXR1cm4gcHV0SW5saW5lRmFz
dChnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpOworfQorCitzdGF0aWMg
TkVWRVJfSU5MSU5FIGJvb2wgZGVmaW5lUHJvcGVydHlPblJlY2VpdmVyU2xvdyhKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZh
bHVlLCBKU09iamVjdCogcmVjZWl2ZXIsIGJvb2wgc2hvdWxkVGhyb3cpCit7CisgICAgVk0mIHZt
ID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKKworICAgIFByb3BlcnR5U2xvdCBzbG90KHJlY2VpdmVyLCBQcm9wZXJ0eVNsb3Q6
OkludGVybmFsTWV0aG9kVHlwZTo6R2V0T3duUHJvcGVydHkpOworICAgIGJvb2wgaGFzUHJvcGVy
dHkgPSByZWNlaXZlci0+bWV0aG9kVGFibGUodm0pLT5nZXRPd25Qcm9wZXJ0eVNsb3QocmVjZWl2
ZXIsIGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCBzbG90KTsKKyAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCBmYWxzZSk7CisKKyAgICBQcm9wZXJ0eURlc2NyaXB0b3IgZGVzY3JpcHRv
cjsKKyAgICBpZiAoaGFzUHJvcGVydHkpIHsKKyAgICAgICAgLy8gRklYTUU6IEZvciBhbiBhY2Nl
c3NvciB3aXRoIHNldHRlciwgdGhlIGVycm9yIG1lc3NhZ2UgaXMgbWlzbGVhZGluZy4KKyAgICAg
ICAgaWYgKHNsb3QuYXR0cmlidXRlcygpICYgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5T3JB
Y2Nlc3Nvck9yQ3VzdG9tQWNjZXNzb3IpCisgICAgICAgICAgICByZXR1cm4gdHlwZUVycm9yKGds
b2JhbE9iamVjdCwgc2NvcGUsIHNob3VsZFRocm93LCBSZWFkb25seVByb3BlcnR5V3JpdGVFcnJv
cik7CisgICAgICAgIGRlc2NyaXB0b3Iuc2V0VmFsdWUodmFsdWUpOworICAgIH0gZWxzZQorICAg
ICAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0b3IodmFsdWUsIHN0YXRpY19jYXN0PHVuc2lnbmVk
PihQcm9wZXJ0eUF0dHJpYnV0ZTo6Tm9uZSkpOworCisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNj
b3BlLCByZWNlaXZlci0+bWV0aG9kVGFibGUodm0pLT5kZWZpbmVPd25Qcm9wZXJ0eShyZWNlaXZl
ciwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IsIHNob3VsZFRocm93KSk7
Cit9CisKKy8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb3JkaW5hcnlzZXQgKHN0ZXAg
MykKK2Jvb2wgSlNPYmplY3Q6OmRlZmluZVByb3BlcnR5T25SZWNlaXZlcihKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVl
LCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCit7CisgICAgQVNTRVJUKCFwYXJzZUluZGV4KHByb3Bl
cnR5TmFtZSkpOworCisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIEpTT2JqZWN0KiByZWNlaXZl
ciA9IHNsb3QudGhpc1ZhbHVlKCkuZ2V0T2JqZWN0KCk7CisgICAgLy8gRklYTUU6IEZvciBhIGZh
aWx1cmUgZHVlIHRvIHByaW1pdGl2ZSByZWNlaXZlciwgdGhlIGVycm9yIG1lc3NhZ2UgaXMgbWlz
bGVhZGluZy4KKyAgICBpZiAoIXJlY2VpdmVyKQorICAgICAgICByZXR1cm4gdHlwZUVycm9yKGds
b2JhbE9iamVjdCwgc2NvcGUsIHNsb3QuaXNTdHJpY3RNb2RlKCksIFJlYWRvbmx5UHJvcGVydHlX
cml0ZUVycm9yKTsKKyAgICBzY29wZS5yZWxlYXNlKCk7CisKKyAgICBpZiAoc2xvdC5pc1RhaW50
ZWRCeU9wYXF1ZU9iamVjdCgpIHx8IHNsb3QuY29udGV4dCgpID09IFB1dFByb3BlcnR5U2xvdDo6
UmVmbGVjdFNldCkgeworICAgICAgICBpZiAocmVjZWl2ZXItPm1ldGhvZFRhYmxlKHZtKS0+ZGVm
aW5lT3duUHJvcGVydHkgIT0gSlNPYmplY3Q6OmRlZmluZU93blByb3BlcnR5KQorICAgICAgICAg
ICAgcmV0dXJuIGRlZmluZVByb3BlcnR5T25SZWNlaXZlclNsb3coZ2xvYmFsT2JqZWN0LCBwcm9w
ZXJ0eU5hbWUsIHZhbHVlLCByZWNlaXZlciwgc2xvdC5pc1N0cmljdE1vZGUoKSk7CisgICAgfQor
CisgICAgcmV0dXJuIHJlY2VpdmVyLT5wdXRJbmxpbmVGYXN0KGdsb2JhbE9iamVjdCwgcHJvcGVy
dHlOYW1lLCB2YWx1ZSwgc2xvdCk7Cit9CisKK2Jvb2wgSlNPYmplY3Q6OnB1dElubGluZUZhc3RS
ZXBsYWNpbmdTdGF0aWNQcm9wZXJ0eUlmTmVlZGVkKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFB1dFByb3BlcnR5
U2xvdCYgc2xvdCkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgQVNTRVJUKGhhc05vblJl
aWZpZWRTdGF0aWNQcm9wZXJ0aWVzKHZtKSk7CisgICAgaWYgKGF1dG8gZW50cnkgPSBmaW5kUHJv
cGVydHlIYXNoRW50cnkodm0sIHByb3BlcnR5TmFtZSkpIHsKKyAgICAgICAgdW5zaWduZWQgYXR0
cmlidXRlcyA9IGF0dHJpYnV0ZXNGb3JTdHJ1Y3R1cmUoZW50cnktPnZhbHVlLT5hdHRyaWJ1dGVz
KCkpOworICAgICAgICBpZiAoYXR0cmlidXRlcyAmIFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25s
eU9yQWNjZXNzb3JPckN1c3RvbUFjY2Vzc29yKSB7CisgICAgICAgICAgICBBU1NFUlQoc2xvdC5j
b250ZXh0KCkgPT0gUHV0UHJvcGVydHlTbG90OjpSZWZsZWN0U2V0KTsKKyAgICAgICAgICAgIC8v
IEZJWE1FOiBGb3IgYW4gYWNjZXNzb3Igd2l0aCBzZXR0ZXIsIHRoZSBlcnJvciBtZXNzYWdlIGlz
IG1pc2xlYWRpbmcuCisgICAgICAgICAgICByZXR1cm4gdHlwZUVycm9yKGdsb2JhbE9iamVjdCwg
c2NvcGUsIHNsb3QuaXNTdHJpY3RNb2RlKCksIFJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9yKTsK
KyAgICAgICAgfQorICAgICAgICAvLyBBdm9pZCBQdXRNb2RlUHV0IGJlY2F1c2UgaXQgZmFpbHMg
Zm9yIG5vbi1leHRlbnNpYmxlIHN0cnVjdHVyZXMuCisgICAgICAgIHB1dERpcmVjdCh2bSwgcHJv
cGVydHlOYW1lLCB2YWx1ZSwgYXR0cmlidXRlcyAmIH5Qcm9wZXJ0eUF0dHJpYnV0ZTo6Q3VzdG9t
VmFsdWUsIHNsb3QpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgLy8gRklYTUU6
IEZvciBhIGZhaWx1cmUgZHVlIHRvIG5vbi1leHRlbnNpYmxlIHN0cnVjdHVyZSwgdGhlIGVycm9y
IG1lc3NhZ2UgaXMgbWlzbGVhZGluZy4KICAgICBpZiAoIXB1dERpcmVjdEludGVybmFsPFB1dE1v
ZGVQdXQ+KHZtLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCAwLCBzbG90KSkKICAgICAgICAgcmV0dXJu
IHR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCBzbG90LmlzU3RyaWN0TW9kZSgpLCBSZWFk
b25seVByb3BlcnR5V3JpdGVFcnJvcik7CiAgICAgcmV0dXJuIHRydWU7CkBAIC0zODUyLDMwICsz
OTM1LDYgQEAgYm9vbCBKU09iamVjdDo6YW55T2JqZWN0SW5DaGFpbk1heUludGVyYwogICAgIH0K
IH0KIAotYm9vbCBKU09iamVjdDo6cHJvdG90eXBlQ2hhaW5NYXlJbnRlcmNlcHRTdG9yZVRvKFZN
JiB2bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKLXsKLSAgICBpZiAocGFyc2VJbmRleChw
cm9wZXJ0eU5hbWUpKQotICAgICAgICByZXR1cm4gYW55T2JqZWN0SW5DaGFpbk1heUludGVyY2Vw
dEluZGV4ZWRBY2Nlc3Nlcyh2bSk7Ci0gICAgCi0gICAgZm9yIChKU09iamVjdCogY3VycmVudCA9
IHRoaXM7IDspIHsKLSAgICAgICAgSlNWYWx1ZSBwcm90b3R5cGUgPSBjdXJyZW50LT5nZXRQcm90
b3R5cGVEaXJlY3Qodm0pOwotICAgICAgICBpZiAocHJvdG90eXBlLmlzTnVsbCgpKQotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAKLSAgICAgICAgY3VycmVudCA9IGFzT2JqZWN0
KHByb3RvdHlwZSk7Ci0gICAgICAgIAotICAgICAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzOwotICAg
ICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBjdXJyZW50LT5zdHJ1Y3R1cmUodm0pLT5nZXQo
dm0sIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcyk7Ci0gICAgICAgIGlmICghSlNDOjppc1ZhbGlk
T2Zmc2V0KG9mZnNldCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgCi0gICAgICAg
IGlmIChhdHRyaWJ1dGVzICYgKFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IFByb3BlcnR5
QXR0cmlidXRlOjpBY2Nlc3NvcikpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAg
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci19Ci0KIGJvb2wgSlNPYmplY3Q6Om5lZWRz
U2xvd1B1dEluZGV4aW5nKFZNJiB2bSkgY29uc3QKIHsKICAgICByZXR1cm4gYW55T2JqZWN0SW5D
aGFpbk1heUludGVyY2VwdEluZGV4ZWRBY2Nlc3Nlcyh2bSkgfHwgZ2xvYmFsT2JqZWN0KHZtKS0+
aXNIYXZpbmdBQmFkVGltZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U09iamVjdC5oCShyZXZpc2lvbiAyNzYzNTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU09iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNjYsNyArMTY2LDYgQEAgcHVibGlj
OgogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90
QnlJbmRleChKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgdW5zaWduZWQgcHJvcGVydHlOYW1l
LCBQcm9wZXJ0eVNsb3QmKTsKICAgICBib29sIGdldE93blByb3BlcnR5U2xvdElubGluZShKU0ds
b2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7Ci0gICAgSlNfRVhQT1JU
X1BSSVZBVEVfSUZfQVNTRVJUX0VOQUJMRUQgc3RhdGljIHZvaWQgZG9QdXRQcm9wZXJ0eVNlY3Vy
aXR5Q2hlY2soSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwgUHV0UHJv
cGVydHlTbG90Jik7CiAKICAgICAvLyBUaGUga2V5IGRpZmZlcmVuY2UgYmV0d2VlbiB0aGlzIGFu
ZCBnZXRPd25Qcm9wZXJ0eVNsb3QgaXMgdGhhdCBnZXRPd25Qcm9wZXJ0eVNsb3QKICAgICAvLyBj
dXJyZW50bHkgcmV0dXJucyBpbmNvcnJlY3QgcmVzdWx0cyBmb3IgdGhlIERPTSB3aW5kb3cgKHdp
dGggbm9uLW93biBwcm9wZXJ0aWVzKQpAQCAtMTk3LDYgKzE5Niw3IEBAIHB1YmxpYzoKICAgICBz
dGF0aWMgYm9vbCBwdXRJbmxpbmVGb3JKU09iamVjdChKU0NlbGwqLCBKU0dsb2JhbE9iamVjdCos
IFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7CiAgICAgCiAgICAgSlNf
RVhQT1JUX1BSSVZBVEUgc3RhdGljIGJvb2wgcHV0KEpTQ2VsbCosIEpTR2xvYmFsT2JqZWN0Kiwg
UHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmKTsKKyAgICBKU19FWFBPUlRf
UFJJVkFURSBORVZFUl9JTkxJTkUgc3RhdGljIGJvb2wgZGVmaW5lUHJvcGVydHlPblJlY2VpdmVy
KEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQcm9wZXJ0eVNsb3Qm
KTsKICAgICAvLyBwdXRCeUluZGV4IGFzc3VtZXMgdGhhdCB0aGUgcmVjZWl2ZXIgaXMgdGhpcyBK
U0NlbGwgb2JqZWN0LgogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBib29sIHB1dEJ5SW5k
ZXgoSlNDZWxsKiwgSlNHbG9iYWxPYmplY3QqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFs
dWUsIGJvb2wgc2hvdWxkVGhyb3cpOwogICAgICAgICAKQEAgLTIxMywxMiArMjEzLDEzIEBAIHB1
YmxpYzoKIAogICAgIEFMV0FZU19JTkxJTkUgYm9vbCBwdXRCeUluZGV4SW5saW5lKEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIHVpbnQ2NF90IHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1
ZSwgYm9vbCBzaG91bGRUaHJvdykKICAgICB7CisgICAgICAgIFZNJiB2bSA9IGdldFZNKGdsb2Jh
bE9iamVjdCk7CiAgICAgICAgIGlmIChMSUtFTFkocHJvcGVydHlOYW1lIDw9IE1BWF9BUlJBWV9J
TkRFWCkpCiAgICAgICAgICAgICByZXR1cm4gcHV0QnlJbmRleElubGluZShnbG9iYWxPYmplY3Qs
IHN0YXRpY19jYXN0PHVpbnQzMl90Pihwcm9wZXJ0eU5hbWUpLCB2YWx1ZSwgc2hvdWxkVGhyb3cp
OwogCiAgICAgICAgIEFTU0VSVChwcm9wZXJ0eU5hbWUgPD0gbWF4U2FmZUludGVnZXIoKSk7CiAg
ICAgICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KHRoaXMsIHNob3VsZFRocm93KTsKLSAgICAgICAg
cmV0dXJuIHB1dElubGluZUZvckpTT2JqZWN0KHRoaXMsIGdsb2JhbE9iamVjdCwgSWRlbnRpZmll
cjo6ZnJvbShnZXRWTShnbG9iYWxPYmplY3QpLCBwcm9wZXJ0eU5hbWUpLCB2YWx1ZSwgc2xvdCk7
CisgICAgICAgIHJldHVybiBtZXRob2RUYWJsZSh2bSktPnB1dCh0aGlzLCBnbG9iYWxPYmplY3Qs
IElkZW50aWZpZXI6OmZyb20odm0sIHByb3BlcnR5TmFtZSksIHZhbHVlLCBzbG90KTsKICAgICB9
CiAgICAgICAgIAogICAgIC8vIFRoaXMgaXMgc2ltaWxhciB0byB0aGUgcHV0RGlyZWN0KiBtZXRo
b2RzOgpAQCAtNjM3LDYgKzYzOCw3IEBAIHB1YmxpYzoKICAgICAvLyAgLSBhdHRyaWJ1dGVzIHdp
bGwgYmUgcmVzcGVjdGVkIChhZnRlciB0aGUgY2FsbCB0aGUgcHJvcGVydHkgd2lsbCBleGlzdCB3
aXRoIHRoZSBnaXZlbiBhdHRyaWJ1dGVzKQogICAgIC8vICAtIHRoZSBwcm9wZXJ0eSBuYW1lIGlz
IGFzc3VtZWQgdG8gbm90IGJlIGFuIGluZGV4LgogICAgIGJvb2wgcHV0RGlyZWN0KFZNJiwgUHJv
cGVydHlOYW1lLCBKU1ZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzID0gMCk7CisgICAgYm9vbCBw
dXREaXJlY3QoVk0mLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMs
IFB1dFByb3BlcnR5U2xvdCYpOwogICAgIGJvb2wgcHV0RGlyZWN0KFZNJiwgUHJvcGVydHlOYW1l
LCBKU1ZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmKTsKICAgICB2b2lkIHB1dERpcmVjdFdpdGhvdXRU
cmFuc2l0aW9uKFZNJiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVz
ID0gMCk7CiAgICAgYm9vbCBwdXREaXJlY3ROb25JbmRleEFjY2Vzc29yKFZNJiwgUHJvcGVydHlO
YW1lLCBHZXR0ZXJTZXR0ZXIqLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKTsKQEAgLTc2NCw2ICs3NjYs
MTEgQEAgcHVibGljOgogICAgIGJvb2wgaGFzR2V0dGVyU2V0dGVyUHJvcGVydGllcyhWTSYgdm0p
IHsgcmV0dXJuIHN0cnVjdHVyZSh2bSktPmhhc0dldHRlclNldHRlclByb3BlcnRpZXMoKTsgfQog
ICAgIGJvb2wgaGFzQ3VzdG9tR2V0dGVyU2V0dGVyUHJvcGVydGllcyhWTSYgdm0pIHsgcmV0dXJu
IHN0cnVjdHVyZSh2bSktPmhhc0N1c3RvbUdldHRlclNldHRlclByb3BlcnRpZXMoKTsgfQogCisg
ICAgYm9vbCBoYXNOb25SZWlmaWVkU3RhdGljUHJvcGVydGllcyhWTSYgdm0pCisgICAgeworICAg
ICAgICByZXR1cm4gVHlwZUluZm86Omhhc1N0YXRpY1Byb3BlcnR5VGFibGUoaW5saW5lVHlwZUZs
YWdzKCkpICYmICFzdHJ1Y3R1cmUodm0pLT5zdGF0aWNQcm9wZXJ0aWVzUmVpZmllZCgpOworICAg
IH0KKwogICAgIC8vIHB1dE93bkRhdGFQcm9wZXJ0eSBoYXMgJ3B1dCcgbGlrZSBzZW1hbnRpY3Ms
IGhvd2V2ZXIgdGhpcyBtZXRob2Q6CiAgICAgLy8gIC0gYXNzdW1lcyB0aGUgb2JqZWN0IGNvbnRh
aW5zIG5vIG93biBnZXR0ZXIvc2V0dGVyIHByb3BlcnRpZXMuCiAgICAgLy8gIC0gcHJvdmlkZXMg
bm8gc3BlY2lhbCBoYW5kbGluZyBmb3IgX19wcm90b19fCkBAIC04MTAsNyArODE3LDYgQEAgcHVi
bGljOgogICAgIGJvb2wgaXNGcm96ZW4oVk0mIHZtKSB7IHJldHVybiBzdHJ1Y3R1cmUodm0pLT5p
c0Zyb3plbih2bSk7IH0KIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIGJvb2wgYW55T2JqZWN0SW5D
aGFpbk1heUludGVyY2VwdEluZGV4ZWRBY2Nlc3NlcyhWTSYpIGNvbnN0OwotICAgIEpTX0VYUE9S
VF9QUklWQVRFIGJvb2wgcHJvdG90eXBlQ2hhaW5NYXlJbnRlcmNlcHRTdG9yZVRvKFZNJiwgUHJv
cGVydHlOYW1lKTsKICAgICBib29sIG5lZWRzU2xvd1B1dEluZGV4aW5nKFZNJikgY29uc3Q7CiAK
IHByaXZhdGU6CkBAIC0xMTAyLDYgKzExMDgsOCBAQCBwcml2YXRlOgogICAgIHRlbXBsYXRlPFB1
dE1vZGU+CiAgICAgYm9vbCBwdXREaXJlY3RJbnRlcm5hbChWTSYsIFByb3BlcnR5TmFtZSwgSlNW
YWx1ZSwgdW5zaWduZWQgYXR0ciwgUHV0UHJvcGVydHlTbG90Jik7CiAKKyAgICBib29sIHB1dElu
bGluZUZhc3QoSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3Bl
cnR5U2xvdCYpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIE5FVkVSX0lOTElORSBib29sIHB1dElu
bGluZUZhc3RSZXBsYWNpbmdTdGF0aWNQcm9wZXJ0eUlmTmVlZGVkKEpTR2xvYmFsT2JqZWN0Kiwg
UHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmKTsKICAgICBKU19FWFBPUlRf
UFJJVkFURSBORVZFUl9JTkxJTkUgYm9vbCBwdXRJbmxpbmVTbG93KEpTR2xvYmFsT2JqZWN0Kiwg
UHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmKTsKIAogICAgIGJvb2wgZ2V0
Tm9uSW5kZXhQcm9wZXJ0eVNsb3QoSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIFByb3Bl
cnR5U2xvdCYpOwpAQCAtMTQzNSwxMCArMTQ0Myw2IEBAIEFMV0FZU19JTkxJTkUgYm9vbCBKU09i
amVjdDo6Z2V0T3duUHJvcGUKIHsKICAgICByZXR1cm4gZ2V0T3duUHJvcGVydHlTbG90SW1wbChv
YmplY3QsIGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCBzbG90KTsKIH0KLQotQUxXQVlTX0lO
TElORSB2b2lkIEpTT2JqZWN0Ojpkb1B1dFByb3BlcnR5U2VjdXJpdHlDaGVjayhKU09iamVjdCos
IEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBQdXRQcm9wZXJ0eVNsb3QmKQotewotfQog
I2VuZGlmCiAKIC8vIEl0IG1heSBzZWVtIGNyYXp5IHRvIGlubGluZSBhIGZ1bmN0aW9uIHRoaXMg
bGFyZ2UgYnV0IGl0IG1ha2VzIGEgYmlnIGRpZmZlcmVuY2UKQEAgLTE1MjIsNiArMTUyNiwxMyBA
QCBpbmxpbmUgYm9vbCBKU09iamVjdDo6cHV0RGlyZWN0KFZNJiB2bSwgCiAgICAgcmV0dXJuIHB1
dERpcmVjdEludGVybmFsPFB1dE1vZGVEZWZpbmVPd25Qcm9wZXJ0eT4odm0sIHByb3BlcnR5TmFt
ZSwgdmFsdWUsIGF0dHJpYnV0ZXMsIHNsb3QpOwogfQogCitpbmxpbmUgYm9vbCBKU09iamVjdDo6
cHV0RGlyZWN0KFZNJiB2bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1
ZSwgdW5zaWduZWQgYXR0cmlidXRlcywgUHV0UHJvcGVydHlTbG90JiBzbG90KQoreworICAgIEFT
U0VSVCghdmFsdWUuaXNHZXR0ZXJTZXR0ZXIoKSk7CisgICAgQVNTRVJUKCF2YWx1ZS5pc0N1c3Rv
bUdldHRlclNldHRlcigpKTsKKyAgICByZXR1cm4gcHV0RGlyZWN0SW50ZXJuYWw8UHV0TW9kZURl
ZmluZU93blByb3BlcnR5Pih2bSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgYXR0cmlidXRlcywgc2xv
dCk7Cit9CisKIGlubGluZSBib29sIEpTT2JqZWN0OjpwdXREaXJlY3QoVk0mIHZtLCBQcm9wZXJ0
eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3Qp
CiB7CiAgICAgQVNTRVJUKCF2YWx1ZS5pc0dldHRlclNldHRlcigpKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0SW5saW5lcy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0SW5saW5lcy5oCShyZXZpc2lvbiAy
NzYzNTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdElubGluZXMu
aAkod29ya2luZyBjb3B5KQpAQCAtNjksNiArNjksOCBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgSlNP
YmplY3Q6OmNhblBlcmZvcm1GCiAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gb2JqLT5z
dHJ1Y3R1cmUodm0pOwogICAgICAgICBpZiAoc3RydWN0dXJlLT5oYXNSZWFkT25seU9yR2V0dGVy
U2V0dGVyUHJvcGVydGllc0V4Y2x1ZGluZ1Byb3RvKCkgfHwgc3RydWN0dXJlLT50eXBlSW5mbygp
Lm92ZXJyaWRlc0dldFByb3RvdHlwZSgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICBpZiAob2JqICE9IHRoaXMgJiYgc3RydWN0dXJlLT50eXBlSW5mbygpLm92ZXJyaWRlc1B1
dCgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgIHByb3RvdHlwZSA9IG9i
ai0+Z2V0UHJvdG90eXBlRGlyZWN0KHZtKTsKICAgICAgICAgaWYgKHByb3RvdHlwZS5pc051bGwo
KSkKQEAgLTIzMSwzMiArMjMzLDQzIEBAIEFMV0FZU19JTkxJTkUgUHJvcGVydHlPZmZzZXQgSlNP
YmplY3Q6OnAKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi0vLyBFQ01BIDguNi4yLjIKKy8vIGh0
dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb3JkaW5hcnlzZXQKIEFMV0FZU19JTkxJTkUgYm9v
bCBKU09iamVjdDo6cHV0SW5saW5lRm9ySlNPYmplY3QoSlNDZWxsKiBjZWxsLCBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZh
bHVlLCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgVk0mIHZtID0gZ2V0Vk0oZ2xvYmFs
T2JqZWN0KTsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAg
ICBKU09iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU09iamVjdCo+KGNlbGwpOwogICAgIEFT
U0VSVCh2YWx1ZSk7CiAgICAgQVNTRVJUKCFIZWFwOjpoZWFwKHZhbHVlKSB8fCBIZWFwOjpoZWFw
KHZhbHVlKSA9PSBIZWFwOjpoZWFwKHRoaXNPYmplY3QpKTsKIAotICAgIGlmIChVTkxJS0VMWShp
c1RoaXNWYWx1ZUFsdGVyZWQoc2xvdCwgdGhpc09iamVjdCkpKQotICAgICAgICBSRUxFQVNFX0FO
RF9SRVRVUk4oc2NvcGUsIG9yZGluYXJ5U2V0U2xvdyhnbG9iYWxPYmplY3QsIHRoaXNPYmplY3Qs
IHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QudGhpc1ZhbHVlKCksIHNsb3QuaXNTdHJpY3RNb2Rl
KCkpKTsKLQogICAgIC8vIFRyeSBpbmRleGVkIHB1dCBmaXJzdC4gVGhpcyBpcyByZXF1aXJlZCBm
b3IgY29ycmVjdG5lc3MsIHNpbmNlIGxvYWRzIG9uIHByb3BlcnR5IG5hbWVzIHRoYXQgYXBwZWFy
IGxpa2UKICAgICAvLyB2YWxpZCBpbmRpY2VzIHdpbGwgbmV2ZXIgbG9vayBpbiB0aGUgbmFtZWQg
cHJvcGVydHkgc3RvcmFnZS4KLSAgICBpZiAoT3B0aW9uYWw8dWludDMyX3Q+IGluZGV4ID0gcGFy
c2VJbmRleChwcm9wZXJ0eU5hbWUpKQotICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUs
IHB1dEJ5SW5kZXgodGhpc09iamVjdCwgZ2xvYmFsT2JqZWN0LCBpbmRleC52YWx1ZSgpLCB2YWx1
ZSwgc2xvdC5pc1N0cmljdE1vZGUoKSkpOwotCi0gICAgaWYgKHRoaXNPYmplY3QtPmNhblBlcmZv
cm1GYXN0UHV0SW5saW5lKHZtLCBwcm9wZXJ0eU5hbWUpKSB7Ci0gICAgICAgIEFTU0VSVCghdGhp
c09iamVjdC0+cHJvdG90eXBlQ2hhaW5NYXlJbnRlcmNlcHRTdG9yZVRvKHZtLCBwcm9wZXJ0eU5h
bWUpKTsKLSAgICAgICAgaWYgKCF0aGlzT2JqZWN0LT5wdXREaXJlY3RJbnRlcm5hbDxQdXRNb2Rl
UHV0Pih2bSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgMCwgc2xvdCkpCi0gICAgICAgICAgICByZXR1
cm4gdHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsIHNsb3QuaXNTdHJpY3RNb2RlKCksIFJl
YWRvbmx5UHJvcGVydHlXcml0ZUVycm9yKTsKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYg
KE9wdGlvbmFsPHVpbnQzMl90PiBpbmRleCA9IHBhcnNlSW5kZXgocHJvcGVydHlOYW1lKSkgewor
ICAgICAgICBpZiAoVU5MSUtFTFkoaXNUaGlzVmFsdWVBbHRlcmVkKHNsb3QsIHRoaXNPYmplY3Qp
KSkKKyAgICAgICAgICAgIHJldHVybiBvcmRpbmFyeVNldFNsb3coZ2xvYmFsT2JqZWN0LCB0aGlz
T2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90LnRoaXNWYWx1ZSgpLCBzbG90LmlzU3Ry
aWN0TW9kZSgpKTsKKyAgICAgICAgcmV0dXJuIHRoaXNPYmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+
cHV0QnlJbmRleCh0aGlzT2JqZWN0LCBnbG9iYWxPYmplY3QsIGluZGV4LnZhbHVlKCksIHZhbHVl
LCBzbG90LmlzU3RyaWN0TW9kZSgpKTsKICAgICB9CiAKLSAgICBSRUxFQVNFX0FORF9SRVRVUk4o
c2NvcGUsIHRoaXNPYmplY3QtPnB1dElubGluZVNsb3coZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5h
bWUsIHZhbHVlLCBzbG90KSk7CisgICAgaWYgKCF0aGlzT2JqZWN0LT5jYW5QZXJmb3JtRmFzdFB1
dElubGluZSh2bSwgcHJvcGVydHlOYW1lKSkKKyAgICAgICAgcmV0dXJuIHRoaXNPYmplY3QtPnB1
dElubGluZVNsb3coZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KTsKKyAg
ICBpZiAoVU5MSUtFTFkoaXNUaGlzVmFsdWVBbHRlcmVkKHNsb3QsIHRoaXNPYmplY3QpKSkKKyAg
ICAgICAgcmV0dXJuIGRlZmluZVByb3BlcnR5T25SZWNlaXZlcihnbG9iYWxPYmplY3QsIHByb3Bl
cnR5TmFtZSwgdmFsdWUsIHNsb3QpOworICAgIHJldHVybiB0aGlzT2JqZWN0LT5wdXRJbmxpbmVG
YXN0KGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCk7Cit9CisKK0FMV0FZ
U19JTkxJTkUgYm9vbCBKU09iamVjdDo6cHV0SW5saW5lRmFzdChKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBQdXRQ
cm9wZXJ0eVNsb3QmIHNsb3QpCit7CisgICAgQVNTRVJUKCFwYXJzZUluZGV4KHByb3BlcnR5TmFt
ZSkpOworCisgICAgVk0mIHZtID0gZ2V0Vk0oZ2xvYmFsT2JqZWN0KTsKKyAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBpZiAoVU5MSUtFTFkoaGFzTm9uUmVp
ZmllZFN0YXRpY1Byb3BlcnRpZXModm0pKSkKKyAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNj
b3BlLCBwdXRJbmxpbmVGYXN0UmVwbGFjaW5nU3RhdGljUHJvcGVydHlJZk5lZWRlZChnbG9iYWxP
YmplY3QsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpKTsKKyAgICAvLyBGSVhNRTogRm9yIGEg
ZmFpbHVyZSBkdWUgdG8gbm9uLWV4dGVuc2libGUgc3RydWN0dXJlLCB0aGUgZXJyb3IgbWVzc2Fn
ZSBpcyBtaXNsZWFkaW5nLgorICAgIGlmICghcHV0RGlyZWN0SW50ZXJuYWw8UHV0TW9kZVB1dD4o
dm0sIHByb3BlcnR5TmFtZSwgdmFsdWUsIDAsIHNsb3QpKQorICAgICAgICByZXR1cm4gdHlwZUVy
cm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsIHNsb3QuaXNTdHJpY3RNb2RlKCksIFJlYWRvbmx5UHJv
cGVydHlXcml0ZUVycm9yKTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogLy8gSGFzT3duUHJvcGVy
dHkoTywgUCkgZnJvbSBzZWN0aW9uIDcuMy4xMSBpbiB0aGUgc3BlYy4KQEAgLTI5OSw3ICszMTIs
NyBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgSlNPYmplY3Q6OnB1dERpcmVjdEluCiAgICAgICAgIHVu
c2lnbmVkIGN1cnJlbnRBdHRyaWJ1dGVzOwogICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQg
PSBzdHJ1Y3R1cmUtPmdldCh2bSwgcHJvcGVydHlOYW1lLCBjdXJyZW50QXR0cmlidXRlcyk7CiAg
ICAgICAgIGlmIChvZmZzZXQgIT0gaW52YWxpZE9mZnNldCkgewotICAgICAgICAgICAgaWYgKCht
b2RlID09IFB1dE1vZGVQdXQpICYmIGN1cnJlbnRBdHRyaWJ1dGVzICYgUHJvcGVydHlBdHRyaWJ1
dGU6OlJlYWRPbmx5KQorICAgICAgICAgICAgaWYgKChtb2RlID09IFB1dE1vZGVQdXQpICYmIGN1
cnJlbnRBdHRyaWJ1dGVzICYgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5T3JBY2Nlc3Nvck9y
Q3VzdG9tQWNjZXNzb3IpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAg
ICAgICBwdXREaXJlY3Qodm0sIG9mZnNldCwgdmFsdWUpOwpAQCAtMzU4LDcgKzM3MSw3IEBAIEFM
V0FZU19JTkxJTkUgYm9vbCBKU09iamVjdDo6cHV0RGlyZWN0SW4KICAgICB1bnNpZ25lZCBjdXJy
ZW50QXR0cmlidXRlczsKICAgICBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldCh2bSwgcHJvcGVydHlO
YW1lLCBjdXJyZW50QXR0cmlidXRlcyk7CiAgICAgaWYgKG9mZnNldCAhPSBpbnZhbGlkT2Zmc2V0
KSB7Ci0gICAgICAgIGlmICgobW9kZSA9PSBQdXRNb2RlUHV0KSAmJiBjdXJyZW50QXR0cmlidXRl
cyAmIFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSkKKyAgICAgICAgaWYgKChtb2RlID09IFB1
dE1vZGVQdXQpICYmIGN1cnJlbnRBdHRyaWJ1dGVzICYgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRP
bmx5T3JBY2Nlc3Nvck9yQ3VzdG9tQWNjZXNzb3IpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAKICAgICAgICAgc3RydWN0dXJlLT5kaWRSZXBsYWNlUHJvcGVydHkob2Zmc2V0KTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJveHkuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3h5LmgJKHJldmlzaW9uIDI3NjM1NSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJveHkuaAkod29ya2luZyBjb3B5
KQpAQCAtMzIsNyArMzIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIGNsYXNzIEpTUHJveHkgOiBwdWJs
aWMgSlNOb25GaW5hbE9iamVjdCB7CiBwdWJsaWM6CiAgICAgdXNpbmcgQmFzZSA9IEpTTm9uRmlu
YWxPYmplY3Q7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9
IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3Zl
cnJpZGVzR2V0T3duUHJvcGVydHlOYW1lcyB8IE92ZXJyaWRlc0dldFByb3RvdHlwZSB8IEludGVy
Y2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm87Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVj
dHVyZUZsYWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzR2V0T3du
UHJvcGVydHlOYW1lcyB8IE92ZXJyaWRlc1B1dCB8IE92ZXJyaWRlc0dldFByb3RvdHlwZSB8IElu
dGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm87
CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+CiAgICAg
c3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGVJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlSW5mby5oCShyZXZpc2lvbiAyNzYzNTUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGVJbmZvLmgJKHdvcmtpbmcgY29weSkK
QEAgLTU3LDcgKzU3LDcgQEAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBJc0ltbXV0YWJsZVBy
bwogc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBHZXRPd25Qcm9wZXJ0eVNsb3RJc0ltcHVyZUZv
clByb3BlcnR5QWJzZW5jZSA9IDEgPDwgMTU7CiBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIElu
dGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8g
PSAxIDw8IDE2Owogc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVJc0ltbW9ydGFs
ID0gMSA8PCAxNzsKLXN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgSGFzUHV0UHJvcGVydHlTZWN1
cml0eUNoZWNrID0gMSA8PCAxODsKK3N0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgT3ZlcnJpZGVz
UHV0ID0gMSA8PCAxODsKIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgT3ZlcnJpZGVzR2V0UHJv
dG90eXBlID0gMSA8PCAxOTsKIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgR2V0T3duUHJvcGVy
dHlTbG90TWF5QmVXcm9uZ0Fib3V0RG9udEVudW0gPSAxIDw8IDIwOwogCkBAIC05NCw2ICs5NCw3
IEBAIHB1YmxpYzoKICAgICBib29sIGltcGxlbWVudHNEZWZhdWx0SGFzSW5zdGFuY2UoKSBjb25z
dCB7IHJldHVybiBpc1NldE9uRmxhZ3MxPEltcGxlbWVudHNEZWZhdWx0SGFzSW5zdGFuY2U+KCk7
IH0KICAgICBib29sIG92ZXJyaWRlc0dldENhbGxEYXRhKCkgY29uc3QgeyByZXR1cm4gaXNTZXRP
bkZsYWdzMTxPdmVycmlkZXNHZXRDYWxsRGF0YT4oKTsgfQogICAgIGJvb2wgb3ZlcnJpZGVzR2V0
T3duUHJvcGVydHlTbG90KCkgY29uc3QgeyByZXR1cm4gb3ZlcnJpZGVzR2V0T3duUHJvcGVydHlT
bG90KGlubGluZVR5cGVGbGFncygpKTsgfQorICAgIGJvb2wgaGFzU3RhdGljUHJvcGVydHlUYWJs
ZSgpIGNvbnN0IHsgcmV0dXJuIGhhc1N0YXRpY1Byb3BlcnR5VGFibGUoaW5saW5lVHlwZUZsYWdz
KCkpOyB9CiAgICAgc3RhdGljIGJvb2wgb3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90KElubGlu
ZVR5cGVGbGFncyBmbGFncykgeyByZXR1cm4gZmxhZ3MgJiBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0
eVNsb3Q7IH0KICAgICBzdGF0aWMgYm9vbCBoYXNTdGF0aWNQcm9wZXJ0eVRhYmxlKElubGluZVR5
cGVGbGFncyBmbGFncykgeyByZXR1cm4gZmxhZ3MgJiBIYXNTdGF0aWNQcm9wZXJ0eVRhYmxlOyB9
CiAgICAgc3RhdGljIGJvb2wgcGVyQ2VsbEJpdChJbmxpbmVUeXBlRmxhZ3MgZmxhZ3MpIHsgcmV0
dXJuIGZsYWdzICYgVHlwZUluZm9QZXJDZWxsQml0OyB9CkBAIC0xMDIsMTIgKzEwMywxMiBAQCBw
dWJsaWM6CiAgICAgYm9vbCBvdmVycmlkZXNHZXRPd25Qcm9wZXJ0eU5hbWVzKCkgY29uc3QgeyBy
ZXR1cm4gaXNTZXRPbkZsYWdzMjxPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eU5hbWVzPigpOyB9CiAg
ICAgYm9vbCBvdmVycmlkZXNHZXRPd25TcGVjaWFsUHJvcGVydHlOYW1lcygpIGNvbnN0IHsgcmV0
dXJuIGlzU2V0T25GbGFnczI8T3ZlcnJpZGVzR2V0T3duU3BlY2lhbFByb3BlcnR5TmFtZXM+KCk7
IH0KICAgICBib29sIG92ZXJyaWRlc0FueUZvcm1PZkdldE93blByb3BlcnR5TmFtZXMoKSBjb25z
dCB7IHJldHVybiBvdmVycmlkZXNHZXRPd25Qcm9wZXJ0eU5hbWVzKCkgfHwgb3ZlcnJpZGVzR2V0
T3duU3BlY2lhbFByb3BlcnR5TmFtZXMoKTsgfQorICAgIGJvb2wgb3ZlcnJpZGVzUHV0KCkgY29u
c3QgeyByZXR1cm4gaXNTZXRPbkZsYWdzMjxPdmVycmlkZXNQdXQ+KCk7IH0KICAgICBib29sIG92
ZXJyaWRlc0dldFByb3RvdHlwZSgpIGNvbnN0IHsgcmV0dXJuIGlzU2V0T25GbGFnczI8T3ZlcnJp
ZGVzR2V0UHJvdG90eXBlPigpOyB9CiAgICAgYm9vbCBwcm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmco
KSBjb25zdCB7IHJldHVybiBpc1NldE9uRmxhZ3MyPFByb2hpYml0c1Byb3BlcnR5Q2FjaGluZz4o
KTsgfQogICAgIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90SXNJbXB1cmUoKSBjb25zdCB7IHJldHVy
biBpc1NldE9uRmxhZ3MyPEdldE93blByb3BlcnR5U2xvdElzSW1wdXJlPigpOyB9CiAgICAgYm9v
bCBnZXRPd25Qcm9wZXJ0eVNsb3RJc0ltcHVyZUZvclByb3BlcnR5QWJzZW5jZSgpIGNvbnN0IHsg
cmV0dXJuIGlzU2V0T25GbGFnczI8R2V0T3duUHJvcGVydHlTbG90SXNJbXB1cmVGb3JQcm9wZXJ0
eUFic2VuY2U+KCk7IH0KICAgICBib29sIGdldE93blByb3BlcnR5U2xvdE1heUJlV3JvbmdBYm91
dERvbnRFbnVtKCkgY29uc3QgeyByZXR1cm4gaXNTZXRPbkZsYWdzMjxHZXRPd25Qcm9wZXJ0eVNs
b3RNYXlCZVdyb25nQWJvdXREb250RW51bT4oKTsgfQotICAgIGJvb2wgaGFzUHV0UHJvcGVydHlT
ZWN1cml0eUNoZWNrKCkgY29uc3QgeyByZXR1cm4gaXNTZXRPbkZsYWdzMjxIYXNQdXRQcm9wZXJ0
eVNlY3VyaXR5Q2hlY2s+KCk7IH0KICAgICBib29sIG5ld0ltcHVyZVByb3BlcnR5RmlyZXNXYXRj
aHBvaW50cygpIGNvbnN0IHsgcmV0dXJuIGlzU2V0T25GbGFnczI8TmV3SW1wdXJlUHJvcGVydHlG
aXJlc1dhdGNocG9pbnRzPigpOyB9CiAgICAgYm9vbCBpc0ltbXV0YWJsZVByb3RvdHlwZUV4b3Rp
Y09iamVjdCgpIGNvbnN0IHsgcmV0dXJuIGlzU2V0T25GbGFnczI8SXNJbW11dGFibGVQcm90b3R5
cGVFeG90aWNPYmplY3Q+KCk7IH0KICAgICBib29sIGludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNs
b3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8oKSBjb25zdCB7IHJldHVybiBpc1NldE9u
RmxhZ3MyPEludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJ
c05vdFplcm8+KCk7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xvb2t1
cC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xvb2t1cC5o
CShyZXZpc2lvbiAyNzYzNTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Mb29r
dXAuaAkod29ya2luZyBjb3B5KQpAQCAtMjYyLDcwICsyNjIsNiBAQCBpbmxpbmUgYm9vbCByZXBs
YWNlU3RhdGljUHJvcGVydHlTbG90KFZNCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLS8vICdiYXNl
JyBtZWFucyB0aGUgb2JqZWN0IGhvbGRpbmcgdGhlIHByb3BlcnR5IChwb3NzaWJseSBpbiB0aGUg
cHJvdG90eXBlIGNoYWluIG9mIHRoZSBvYmplY3QgcHV0IHdhcyBjYWxsZWQgb24pLgotLy8gJ3Ro
aXNWYWx1ZScgaXMgdGhlIG9iamVjdCB0aGF0IHB1dCBpcyBiZWluZyBhcHBsaWVkIHRvIChpbiB0
aGUgY2FzZSBvZiBhIHByb3h5LCB0aGUgcHJveHkgdGFyZ2V0KS4KLS8vICdzbG90LnRoaXNWYWx1
ZSgpJyBpcyB0aGUgb2JqZWN0IHRoZSBwdXQgd2FzIG9yaWdpbmFsbHkgcGVyZm9ybWVkIG9uIChp
biB0aGUgY2FzZSBvZiBhIHByb3h5LCB0aGUgcHJveHkgaXRzZWxmKS4KLWlubGluZSBib29sIHB1
dEVudHJ5KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IENsYXNzSW5mbyosIGNv
bnN0IEhhc2hUYWJsZVZhbHVlKiBlbnRyeSwgSlNPYmplY3QqIGJhc2UsIEpTT2JqZWN0KiB0aGlz
VmFsdWUsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFB1dFByb3Bl
cnR5U2xvdCYgc2xvdCkKLXsKLSAgICBWTSYgdm0gPSBnZXRWTShnbG9iYWxPYmplY3QpOwotICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAgIGlmIChlbnRyeS0+
YXR0cmlidXRlcygpICYgUHJvcGVydHlBdHRyaWJ1dGU6OkJ1aWx0aW5PckZ1bmN0aW9uT3JMYXp5
UHJvcGVydHkpIHsKLSAgICAgICAgaWYgKCEoZW50cnktPmF0dHJpYnV0ZXMoKSAmIFByb3BlcnR5
QXR0cmlidXRlOjpSZWFkT25seSkpIHsKLSAgICAgICAgICAgIC8vIElmIHRoaXMgaXMgYSBmdW5j
dGlvbiBvciBsYXp5IHByb3BlcnR5IHB1dCB0aGVuIHdlIGp1c3QgZG8gdGhlIHB1dCBiZWNhdXNl
Ci0gICAgICAgICAgICAvLyBsb2dpY2FsbHkgdGhlIG9iamVjdCBhbHJlYWR5IGhhZCB0aGUgcHJv
cGVydHksIHNvIHRoaXMgaXMganVzdCBhIHJlcGxhY2UuCi0gICAgICAgICAgICAvLyBGSVhNRTog
dGhpc1ZhbHVlIG1heSBiZSBhbiBvYmplY3Qgd2l0aCBub24tZXh0ZW5zaWJsZSBzdHJ1Y3R1cmUg
d2UgbXVzdCB0aHJvdyBmb3IuCi0gICAgICAgICAgICBpZiAoSlNPYmplY3QqIHRoaXNPYmplY3Qg
PSBqc0R5bmFtaWNDYXN0PEpTT2JqZWN0Kj4odm0sIHRoaXNWYWx1ZSkpCi0gICAgICAgICAgICAg
ICAgdGhpc09iamVjdC0+cHV0RGlyZWN0KHZtLCBwcm9wZXJ0eU5hbWUsIHZhbHVlKTsKLSAgICAg
ICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0eXBlRXJyb3Io
Z2xvYmFsT2JqZWN0LCBzY29wZSwgc2xvdC5pc1N0cmljdE1vZGUoKSwgUmVhZG9ubHlQcm9wZXJ0
eVdyaXRlRXJyb3IpOwotICAgIH0KLQotICAgIGlmIChlbnRyeS0+YXR0cmlidXRlcygpICYgUHJv
cGVydHlBdHRyaWJ1dGU6OkFjY2Vzc29yKQotICAgICAgICByZXR1cm4gdHlwZUVycm9yKGdsb2Jh
bE9iamVjdCwgc2NvcGUsIHNsb3QuaXNTdHJpY3RNb2RlKCksIFJlYWRvbmx5UHJvcGVydHlXcml0
ZUVycm9yKTsKLQotICAgIGlmICghKGVudHJ5LT5hdHRyaWJ1dGVzKCkgJiBQcm9wZXJ0eUF0dHJp
YnV0ZTo6UmVhZE9ubHkpKSB7Ci0gICAgICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoIShlbnRyeS0+
YXR0cmlidXRlcygpICYgUHJvcGVydHlBdHRyaWJ1dGU6OkRPTUpJVEF0dHJpYnV0ZSksICJET01K
SVRBdHRyaWJ1dGUgc3VwcG9ydHMgcmVhZG9ubHkgYXR0cmlidXRlcyBjdXJyZW50bHkuIik7Ci0g
ICAgICAgIGJvb2wgaXNBY2Nlc3NvciA9IGVudHJ5LT5hdHRyaWJ1dGVzKCkgJiBQcm9wZXJ0eUF0
dHJpYnV0ZTo6Q3VzdG9tQWNjZXNzb3I7Ci0gICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgb25s
eSBiZSBjYWNoaW5nIHRoZXNlIGlmIHdlJ3JlIG5vdCBhbiB1bmNhY2hlYWJsZSBkaWN0aW9uYXJ5
OgotICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE1
MzQ3Ci0gICAgICAgIC8vIFdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgd2UgZGVjaWRlIHRvIGNh
Y2hlIHRoaXMgcHJvcGVydHkgYmVmb3JlIHdlIHBvdGVudGlhbGx5IGV4ZWN1dGUgYXJpYml0cmFy
eSBKUy4KLSAgICAgICAgaWYgKGlzQWNjZXNzb3IpCi0gICAgICAgICAgICBzbG90LnNldEN1c3Rv
bUFjY2Vzc29yKGJhc2UsIGVudHJ5LT5wcm9wZXJ0eVB1dHRlcigpKTsKLSAgICAgICAgZWxzZQot
ICAgICAgICAgICAgc2xvdC5zZXRDdXN0b21WYWx1ZShiYXNlLCBlbnRyeS0+cHJvcGVydHlQdXR0
ZXIoKSk7Ci0KLSAgICAgICAgYXV0byByZXN1bHQgPSBjYWxsQ3VzdG9tU2V0dGVyKGdsb2JhbE9i
amVjdCwgZW50cnktPnByb3BlcnR5UHV0dGVyKCksIGlzQWNjZXNzb3IsIGJhc2UsIHNsb3QudGhp
c1ZhbHVlKCksIHZhbHVlLCBwcm9wZXJ0eU5hbWUpOwotICAgICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCBmYWxzZSk7Ci0gICAgICAgIGlmIChyZXN1bHQgIT0gVHJpU3RhdGU6OkluZGV0
ZXJtaW5hdGUpCi0gICAgICAgICAgICByZXR1cm4gcmVzdWx0ID09IFRyaVN0YXRlOjpUcnVlOwot
Ci0gICAgICAgIC8vIEZJWE1FOiB0aGlzVmFsdWUgbWF5IGJlIGFuIG9iamVjdCB3aXRoIG5vbi1l
eHRlbnNpYmxlIHN0cnVjdHVyZSB3ZSBtdXN0IHRocm93IGZvci4KLSAgICAgICAgaWYgKEpTT2Jq
ZWN0KiB0aGlzT2JqZWN0ID0ganNEeW5hbWljQ2FzdDxKU09iamVjdCo+KHZtLCB0aGlzVmFsdWUp
KQotICAgICAgICAgICAgdGhpc09iamVjdC0+cHV0RGlyZWN0KHZtLCBwcm9wZXJ0eU5hbWUsIHZh
bHVlKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIHR5cGVFcnJv
cihnbG9iYWxPYmplY3QsIHNjb3BlLCBzbG90LmlzU3RyaWN0TW9kZSgpLCBSZWFkb25seVByb3Bl
cnR5V3JpdGVFcnJvcik7Ci19Ci0KLS8qKgotICogVGhpcyBvbmUgaXMgZm9yICJwdXQiLgotICog
SXQgbG9va3MgdXAgYSBoYXNoIGVudHJ5IGZvciB0aGUgcHJvcGVydHkgdG8gYmUgc2V0LiAgSWYg
YW4gZW50cnkKLSAqIGlzIGZvdW5kIGl0IHNldHMgdGhlIHZhbHVlIGFuZCByZXR1cm5zIHRydWUs
IGVsc2UgaXQgcmV0dXJucyBmYWxzZS4KLSAqLwotaW5saW5lIGJvb2wgbG9va3VwUHV0KEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTT2Jq
ZWN0KiBiYXNlLCBKU1ZhbHVlIHZhbHVlLCBjb25zdCBIYXNoVGFibGUmIHRhYmxlLCBQdXRQcm9w
ZXJ0eVNsb3QmIHNsb3QsIGJvb2wmIHB1dFJlc3VsdCkKLXsKLSAgICBjb25zdCBIYXNoVGFibGVW
YWx1ZSogZW50cnkgPSB0YWJsZS5lbnRyeShwcm9wZXJ0eU5hbWUpOwotCi0gICAgaWYgKCFlbnRy
eSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcHV0UmVzdWx0ID0gcHV0RW50cnkoZ2xv
YmFsT2JqZWN0LCB0YWJsZS5jbGFzc0ZvclRoaXMsIGVudHJ5LCBiYXNlLCBiYXNlLCBwcm9wZXJ0
eU5hbWUsIHZhbHVlLCBzbG90KTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQogaW5saW5lIHZvaWQg
cmVpZnlTdGF0aWNQcm9wZXJ0eShWTSYgdm0sIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvLCBj
b25zdCBQcm9wZXJ0eU5hbWUmIHByb3BlcnR5TmFtZSwgY29uc3QgSGFzaFRhYmxlVmFsdWUmIHZh
bHVlLCBKU09iamVjdCYgdGhpc09iaikKIHsKICAgICBpZiAodmFsdWUuYXR0cmlidXRlcygpICYg
UHJvcGVydHlBdHRyaWJ1dGU6OkJ1aWx0aW4pIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1Byb3BlcnR5U2xvdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1Byb3BlcnR5U2xvdC5oCShyZXZpc2lvbiAyNzYzNTUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eVNsb3QuaAkod29ya2luZyBjb3B5KQpAQCAt
NDcsNiArNDcsNyBAQCBlbnVtIGNsYXNzIFByb3BlcnR5QXR0cmlidXRlIDogdW5zaWduZWQgCiAg
ICAgQ3VzdG9tVmFsdWUgICAgICAgPSAxIDw8IDYsCiAgICAgQ3VzdG9tQWNjZXNzb3JPclZhbHVl
ID0gQ3VzdG9tQWNjZXNzb3IgfCBDdXN0b21WYWx1ZSwKICAgICBBY2Nlc3Nvck9yQ3VzdG9tQWNj
ZXNzb3JPclZhbHVlID0gQWNjZXNzb3IgfCBDdXN0b21BY2Nlc3NvciB8IEN1c3RvbVZhbHVlLAor
ICAgIFJlYWRPbmx5T3JBY2Nlc3Nvck9yQ3VzdG9tQWNjZXNzb3IgPSBSZWFkT25seSB8IEFjY2Vz
c29yIHwgQ3VzdG9tQWNjZXNzb3IsCiAKICAgICAvLyBUaGluZ3MgdGhhdCBhcmUgdXNlZCBieSBz
dGF0aWMgaGFzaHRhYmxlcyBhcmUgbm90IGluIHRoZSBhdHRyaWJ1dGVzIGJ5dGUgaW4gUHJvcGVy
dHlNYXBFbnRyeS4KICAgICBGdW5jdGlvbiAgICAgICAgICA9IDEgPDwgOCwgIC8vIHByb3BlcnR5
IGlzIGEgZnVuY3Rpb24gLSBvbmx5IHVzZWQgYnkgc3RhdGljIGhhc2h0YWJsZXMKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3h5T2JqZWN0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm94eU9iamVjdC5jcHAJKHJldmlzaW9u
IDI3NjM1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3h5T2JqZWN0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDY0LDYgKzQ2NCw3IEBAIGJvb2wgUHJveHlPYmplY3Q6OnB1
dChKU0NlbGwqIGNlbGwsIEpTR2wKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7
CiAgICAgc2xvdC5kaXNhYmxlQ2FjaGluZygpOworICAgIHNsb3Quc2V0SXNUYWludGVkQnlPcGFx
dWVPYmplY3QoKTsKIAogICAgIFByb3h5T2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PFByb3h5
T2JqZWN0Kj4oY2VsbCk7CiAgICAgYXV0byBwZXJmb3JtRGVmYXVsdFB1dCA9IFsmXSAoKSB7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm94eU9iamVjdC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3h5T2JqZWN0LmgJKHJldmlz
aW9uIDI3NjM1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3h5T2JqZWN0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAgY2xhc3MgUHJveHlPYmplY3QgZmlu
YWwgOiBwdWJsaWMgSlNOb25GaQogcHVibGljOgogICAgIHR5cGVkZWYgSlNOb25GaW5hbE9iamVj
dCBCYXNlOwogCi0gICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9
IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3Zl
cnJpZGVzR2V0T3duUHJvcGVydHlOYW1lcyB8IE92ZXJyaWRlc0dldFByb3RvdHlwZSB8IE92ZXJy
aWRlc0dldENhbGxEYXRhIHwgSW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVu
V2hlbkxlbmd0aElzTm90WmVybyB8IFByb2hpYml0c1Byb3BlcnR5Q2FjaGluZzsKKyAgICBzdGF0
aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxh
Z3MgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0
eU5hbWVzIHwgT3ZlcnJpZGVzR2V0UHJvdG90eXBlIHwgT3ZlcnJpZGVzR2V0Q2FsbERhdGEgfCBP
dmVycmlkZXNQdXQgfCBJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVu
TGVuZ3RoSXNOb3RaZXJvIHwgUHJvaGliaXRzUHJvcGVydHlDYWNoaW5nOwogCiAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+CiAgICAgc3RhdGljIElz
b1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9QdXRQcm9wZXJ0eVNsb3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9QdXRQcm9wZXJ0eVNsb3QuaAkocmV2aXNpb24gMjc2MzU1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHV0UHJvcGVydHlTbG90LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTM3LDcgKzM3LDcgQEAgY2xhc3MgSlNGdW5jdGlvbjsKIGNsYXNzIFB1dFByb3Bl
cnR5U2xvdCB7CiBwdWJsaWM6CiAgICAgZW51bSBUeXBlIDogdWludDhfdCB7IFVuY2FjaGFibGUs
IEV4aXN0aW5nUHJvcGVydHksIE5ld1Byb3BlcnR5LCBTZXR0ZXJQcm9wZXJ0eSwgQ3VzdG9tVmFs
dWUsIEN1c3RvbUFjY2Vzc29yIH07Ci0gICAgZW51bSBDb250ZXh0IHsgVW5rbm93bkNvbnRleHQs
IFB1dEJ5SWQsIFB1dEJ5SWRFdmFsIH07CisgICAgZW51bSBDb250ZXh0IDogdWludDhfdCB7IFVu
a25vd25Db250ZXh0LCBQdXRCeUlkLCBQdXRCeUlkRXZhbCwgUmVmbGVjdFNldCB9OwogICAgIHVz
aW5nIFB1dFZhbHVlRnVuYyA9IEpTQzo6UHV0VmFsdWVGdW5jOwogICAgIHVzaW5nIFB1dFZhbHVl
RnVuY1dpdGhQdHIgPSBKU0M6OlB1dFZhbHVlRnVuY1dpdGhQdHI7CiAKQEAgLTQ3LDYgKzQ3LDcg
QEAgcHVibGljOgogICAgICAgICAsIG1fb2Zmc2V0KGludmFsaWRPZmZzZXQpCiAgICAgICAgICwg
bV9pc1N0cmljdE1vZGUoaXNTdHJpY3RNb2RlKQogICAgICAgICAsIG1faXNJbml0aWFsaXphdGlv
bihpc0luaXRpYWxpemF0aW9uKQorICAgICAgICAsIG1faXNUYWludGVkQnlPcGFxdWVPYmplY3Qo
ZmFsc2UpCiAgICAgICAgICwgbV90eXBlKFVuY2FjaGFibGUpCiAgICAgICAgICwgbV9jb250ZXh0
KGNvbnRleHQpCiAgICAgICAgICwgbV9jYWNoZWFiaWxpdHkoQ2FjaGluZ0FsbG93ZWQpCkBAIC0x
MDQsOSArMTA1LDggQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9wdXRGdW5jdGlvbjsKICAg
ICB9CiAKLSAgICBDb250ZXh0IGNvbnRleHQoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxD
b250ZXh0PihtX2NvbnRleHQpOyB9Ci0KICAgICBUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBt
X3R5cGU7IH0KKyAgICBDb250ZXh0IGNvbnRleHQoKSBjb25zdCB7IHJldHVybiBtX2NvbnRleHQ7
IH0KICAgICBKU09iamVjdCogYmFzZSgpIGNvbnN0IHsgcmV0dXJuIG1fYmFzZTsgfQogICAgIEpT
VmFsdWUgdGhpc1ZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV90aGlzVmFsdWU7IH0KIApAQCAtMTE2
LDYgKzExNiw4IEBAIHB1YmxpYzoKICAgICBib29sIGlzQ2FjaGVhYmxlQ3VzdG9tKCkgY29uc3Qg
eyByZXR1cm4gaXNDYWNoZWFibGUoKSAmJiAobV90eXBlID09IEN1c3RvbVZhbHVlIHx8IG1fdHlw
ZSA9PSBDdXN0b21BY2Nlc3NvcikgJiYgISFtX3B1dEZ1bmN0aW9uOyB9CiAgICAgYm9vbCBpc0N1
c3RvbUFjY2Vzc29yKCkgY29uc3QgeyByZXR1cm4gaXNDYWNoZWFibGUoKSAmJiBtX3R5cGUgPT0g
Q3VzdG9tQWNjZXNzb3I7IH0KICAgICBib29sIGlzSW5pdGlhbGl6YXRpb24oKSBjb25zdCB7IHJl
dHVybiBtX2lzSW5pdGlhbGl6YXRpb247IH0KKyAgICBib29sIGlzVGFpbnRlZEJ5T3BhcXVlT2Jq
ZWN0KCkgY29uc3QgeyByZXR1cm4gbV9pc1RhaW50ZWRCeU9wYXF1ZU9iamVjdDsgfQorICAgIHZv
aWQgc2V0SXNUYWludGVkQnlPcGFxdWVPYmplY3QoKSB7IG1faXNUYWludGVkQnlPcGFxdWVPYmpl
Y3QgPSB0cnVlOyB9CiAKICAgICBQcm9wZXJ0eU9mZnNldCBjYWNoZWRPZmZzZXQoKSBjb25zdAog
ICAgIHsKQEAgLTEzNSw4ICsxMzcsOSBAQCBwcml2YXRlOgogICAgIFByb3BlcnR5T2Zmc2V0IG1f
b2Zmc2V0OwogICAgIGJvb2wgbV9pc1N0cmljdE1vZGUgOiAxOwogICAgIGJvb2wgbV9pc0luaXRp
YWxpemF0aW9uIDogMTsKKyAgICBib29sIG1faXNUYWludGVkQnlPcGFxdWVPYmplY3QgOiAxOwog
ICAgIFR5cGUgbV90eXBlOwotICAgIHVpbnQ4X3QgbV9jb250ZXh0OworICAgIENvbnRleHQgbV9j
b250ZXh0OwogICAgIENhY2hlYWJpbGl0eVR5cGUgbV9jYWNoZWFiaWxpdHk7CiAgICAgRnVuY3Rp
b25QdHI8Q3VzdG9tQWNjZXNzb3JQdHJUYWc+IG1fcHV0RnVuY3Rpb247CiB9OwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVmbGVjdE9iamVjdC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVmbGVjdE9iamVjdC5jcHAJKHJldmlz
aW9uIDI3NjM1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZmxlY3RPYmpl
Y3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjAsNyArMjYwLDcgQEAgSlNDX0RFRklORV9IT1NU
X0ZVTkNUSU9OKHJlZmxlY3RPYmplY3RTZQogCiAgICAgLy8gRG8gbm90IHJhaXNlIGFueSByZWFk
b25seSBlcnJvcnMgdGhhdCBoYXBwZW4gaW4gc3RyaWN0IG1vZGUuCiAgICAgYm9vbCBzaG91bGRU
aHJvd0lmQ2FudFNldCA9IGZhbHNlOwotICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KHJlY2VpdmVy
LCBzaG91bGRUaHJvd0lmQ2FudFNldCk7CisgICAgUHV0UHJvcGVydHlTbG90IHNsb3QocmVjZWl2
ZXIsIHNob3VsZFRocm93SWZDYW50U2V0LCBQdXRQcm9wZXJ0eVNsb3Q6OlJlZmxlY3RTZXQpOwog
ICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih0
YXJnZXRPYmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+cHV0KHRhcmdldE9iamVjdCwgZ2xvYmFsT2Jq
ZWN0LCBwcm9wZXJ0eU5hbWUsIGNhbGxGcmFtZS0+YXJndW1lbnQoMiksIHNsb3QpKSkpOwogfQog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBPYmplY3QuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5j
cHAJKHJldmlzaW9uIDI3NjM1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Jl
Z0V4cE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzNCwxOSArMTM0LDI0IEBAIEpTQ19E
RUZJTkVfQ1VTVE9NX1NFVFRFUihyZWdFeHBPYmplY3RTZXQKIGJvb2wgUmVnRXhwT2JqZWN0Ojpw
dXQoSlNDZWxsKiBjZWxsLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5h
bWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7
CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBSZWdFeHBPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nh
c3Q8UmVnRXhwT2JqZWN0Kj4oY2VsbCk7CiAKLSAgICBpZiAoVU5MSUtFTFkoaXNUaGlzVmFsdWVB
bHRlcmVkKHNsb3QsIHRoaXNPYmplY3QpKSkKLSAgICAgICAgcmV0dXJuIG9yZGluYXJ5U2V0U2xv
dyhnbG9iYWxPYmplY3QsIHRoaXNPYmplY3QsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QudGhp
c1ZhbHVlKCksIHNsb3QuaXNTdHJpY3RNb2RlKCkpOwotCiAgICAgaWYgKHByb3BlcnR5TmFtZSA9
PSB2bS5wcm9wZXJ0eU5hbWVzLT5sYXN0SW5kZXgpIHsKKyAgICAgICAgaWYgKCF0aGlzT2JqZWN0
LT5sYXN0SW5kZXhJc1dyaXRhYmxlKCkpCisgICAgICAgICAgICByZXR1cm4gdHlwZUVycm9yKGds
b2JhbE9iamVjdCwgc2NvcGUsIHNsb3QuaXNTdHJpY3RNb2RlKCksIFJlYWRvbmx5UHJvcGVydHlX
cml0ZUVycm9yKTsKKworICAgICAgICBpZiAoVU5MSUtFTFkoc2xvdC50aGlzVmFsdWUoKSAhPSB0
aGlzT2JqZWN0KSkKKyAgICAgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgSlNPYmpl
Y3Q6OmRlZmluZVByb3BlcnR5T25SZWNlaXZlcihnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwg
dmFsdWUsIHNsb3QpKTsKKwogICAgICAgICBib29sIHJlc3VsdCA9IHRoaXNPYmplY3QtPnNldExh
c3RJbmRleChnbG9iYWxPYmplY3QsIHZhbHVlLCBzbG90LmlzU3RyaWN0TW9kZSgpKTsKKyAgICAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZmFsc2UpOwogICAgICAgICBzbG90LnNldEN1
c3RvbVZhbHVlKHRoaXNPYmplY3QsIHNsb3QuaXNTdHJpY3RNb2RlKCkKICAgICAgICAgICAgID8g
cmVnRXhwT2JqZWN0U2V0TGFzdEluZGV4U3RyaWN0CiAgICAgICAgICAgICA6IHJlZ0V4cE9iamVj
dFNldExhc3RJbmRleE5vblN0cmljdCk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQot
ICAgIHJldHVybiBCYXNlOjpwdXQoY2VsbCwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHZh
bHVlLCBzbG90KTsKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEJhc2U6OnB1dChjZWxs
LCBnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpKTsKIH0KIAogSlNWYWx1
ZSBSZWdFeHBPYmplY3Q6OmV4ZWMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNTdHJp
bmcqIHN0cmluZykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE9i
amVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4
cE9iamVjdC5oCShyZXZpc2lvbiAyNzYzNTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9SZWdFeHBPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAsNyBAQCBuYW1l
c3BhY2UgSlNDIHsKIGNsYXNzIFJlZ0V4cE9iamVjdCBmaW5hbCA6IHB1YmxpYyBKU05vbkZpbmFs
T2JqZWN0IHsKIHB1YmxpYzoKICAgICB1c2luZyBCYXNlID0gSlNOb25GaW5hbE9iamVjdDsKLSAg
ICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0
dXJlRmxhZ3MgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNHZXRPd25T
cGVjaWFsUHJvcGVydHlOYW1lczsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVj
dHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0
eVNsb3QgfCBPdmVycmlkZXNHZXRPd25TcGVjaWFsUHJvcGVydHlOYW1lcyB8IE92ZXJyaWRlc1B1
dDsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2VzcyBtb2Rl
PgogICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nT2JqZWN0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdPYmplY3QuY3BwCShyZXZpc2lv
biAyNzYzNTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdPYmplY3Qu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OCwxMSArNjgsMTAgQEAgYm9vbCBTdHJpbmdPYmplY3Q6
OnB1dChKU0NlbGwqIGNlbGwsIEpTRwogCiAgICAgU3RyaW5nT2JqZWN0KiB0aGlzT2JqZWN0ID0g
anNDYXN0PFN0cmluZ09iamVjdCo+KGNlbGwpOwogCi0gICAgaWYgKFVOTElLRUxZKGlzVGhpc1Zh
bHVlQWx0ZXJlZChzbG90LCB0aGlzT2JqZWN0KSkpIAotICAgICAgICBSRUxFQVNFX0FORF9SRVRV
Uk4oc2NvcGUsIG9yZGluYXJ5U2V0U2xvdyhnbG9iYWxPYmplY3QsIHRoaXNPYmplY3QsIHByb3Bl
cnR5TmFtZSwgdmFsdWUsIHNsb3QudGhpc1ZhbHVlKCksIHNsb3QuaXNTdHJpY3RNb2RlKCkpKTsK
LQogICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoKQogICAg
ICAgICByZXR1cm4gdHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsIHNsb3QuaXNTdHJpY3RN
b2RlKCksIFJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9yKTsKKyAgICBpZiAoVU5MSUtFTFkoc2xv
dC50aGlzVmFsdWUoKSAhPSB0aGlzT2JqZWN0KSkKKyAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJO
KHNjb3BlLCBKU09iamVjdDo6cHV0KGNlbGwsIGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCB2
YWx1ZSwgc2xvdCkpOwogICAgIGlmIChPcHRpb25hbDx1aW50MzJfdD4gaW5kZXggPSBwYXJzZUlu
ZGV4KHByb3BlcnR5TmFtZSkpIAogICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIHB1
dEJ5SW5kZXgoY2VsbCwgZ2xvYmFsT2JqZWN0LCBpbmRleC52YWx1ZSgpLCB2YWx1ZSwgc2xvdC5p
c1N0cmljdE1vZGUoKSkpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgSlNPYmplY3Q6
OnB1dChjZWxsLCBnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ09iamVjdC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ09iamVjdC5oCShyZXZp
c2lvbiAyNzYzNTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdPYmpl
Y3QuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNyArMjgsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIGNs
YXNzIFN0cmluZ09iamVjdCA6IHB1YmxpYyBKU1dyYXBwZXJPYmplY3QgewogcHVibGljOgogICAg
IHVzaW5nIEJhc2UgPSBKU1dyYXBwZXJPYmplY3Q7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB1bnNp
Z25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJpZGVzR2V0
T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlOYW1lcyB8IEludGVyY2Vw
dHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm87CisgICAg
c3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVy
ZUZsYWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzR2V0T3duUHJv
cGVydHlOYW1lcyB8IE92ZXJyaWRlc1B1dCB8IEludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RC
eUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm87CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSwg
U3Vic3BhY2VBY2Nlc3MgbW9kZT4KICAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9y
KFZNJiB2bSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ1Byb3Rv
dHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3Ry
aW5nUHJvdG90eXBlLmNwcAkocmV2aXNpb24gMjc2MzU1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvU3RyaW5nUHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIxLDkg
KzEyMSw5IEBAIFN0cmluZ1Byb3RvdHlwZTo6U3RyaW5nUHJvdG90eXBlKFZNJiB2bSwKIHsKIH0K
IAotdm9pZCBTdHJpbmdQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgSlNTdHJpbmcqIG5hbWVBbmRNZXNzYWdlKQordm9pZCBTdHJp
bmdQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCkKIHsKLSAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSwgbmFtZUFuZE1lc3NhZ2Up
OworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtLCBqc0VtcHR5U3RyaW5nKHZtKSk7CiAgICAg
QVNTRVJUKGluaGVyaXRzKHZtLCBpbmZvKCkpKTsKIAogICAgIEpTQ19OQVRJVkVfSU5UUklOU0lD
X0ZVTkNUSU9OX1dJVEhPVVRfVFJBTlNJVElPTih2bS5wcm9wZXJ0eU5hbWVzLT50b1N0cmluZywg
c3RyaW5nUHJvdG9GdW5jVG9TdHJpbmcsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0
dHJpYnV0ZTo6RG9udEVudW0pLCAwLCBTdHJpbmdQcm90b3R5cGVWYWx1ZU9mSW50cmluc2ljKTsK
QEAgLTE2NSwxNCArMTY1LDEyIEBAIHZvaWQgU3RyaW5nUHJvdG90eXBlOjpmaW5pc2hDcmVhdGlv
bihWTSYKICAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVydHlOYW1l
cy0+aXRlcmF0b3JTeW1ib2wsIGl0ZXJhdG9yRnVuY3Rpb24sIHN0YXRpY19jYXN0PHVuc2lnbmVk
PihQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pKTsKIAogICAgIC8vIFRoZSBjb25zdHJ1Y3Rv
ciB3aWxsIGJlIGFkZGVkIGxhdGVyLCBhZnRlciBTdHJpbmdDb25zdHJ1Y3RvciBoYXMgYmVlbiBi
dWlsdAotICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5hbWVz
LT5sZW5ndGgsIGpzTnVtYmVyKDApLCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSB8IFBy
b3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7
CiB9CiAKIFN0cmluZ1Byb3RvdHlwZSogU3RyaW5nUHJvdG90eXBlOjpjcmVhdGUoVk0mIHZtLCBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKIHsKLSAg
ICBKU1N0cmluZyogZW1wdHkgPSBqc0VtcHR5U3RyaW5nKHZtKTsKICAgICBTdHJpbmdQcm90b3R5
cGUqIHByb3RvdHlwZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFN0cmluZ1Byb3RvdHlw
ZT4odm0uaGVhcCkpIFN0cmluZ1Byb3RvdHlwZSh2bSwgc3RydWN0dXJlKTsKLSAgICBwcm90b3R5
cGUtPmZpbmlzaENyZWF0aW9uKHZtLCBnbG9iYWxPYmplY3QsIGVtcHR5KTsKKyAgICBwcm90b3R5
cGUtPmZpbmlzaENyZWF0aW9uKHZtLCBnbG9iYWxPYmplY3QpOwogICAgIHJldHVybiBwcm90b3R5
cGU7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ1Byb3Rv
dHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmlu
Z1Byb3RvdHlwZS5oCShyZXZpc2lvbiAyNzYzNTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TdHJpbmdQcm90b3R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDUsNyArNDUsNyBA
QCBwdWJsaWM6CiAKIHByaXZhdGU6CiAgICAgU3RyaW5nUHJvdG90eXBlKFZNJiwgU3RydWN0dXJl
Kik7Ci0gICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNTdHJp
bmcqKTsKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgSlNHbG9iYWxPYmplY3QqKTsKIH07
CiBTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShTdHJpbmdQcm90b3R5cGUsIFN0
cmluZ09iamVjdCk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVj
dHVyZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3Ry
dWN0dXJlLmNwcAkocmV2aXNpb24gMjc2MzU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU3RydWN0dXJlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTkwLDExICsxOTAsNiBAQCB2
b2lkIFN0cnVjdHVyZTo6dmFsaWRhdGVGbGFncygpCiAgICAgaWYgKG92ZXJyaWRlc0dldE93blBy
b3BlcnR5U2xvdEJ5SW5kZXgpCiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHR5cGVJbmZvKCkuaW50
ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybygp
KTsKIAotICAgIGJvb2wgb3ZlcnJpZGVzUHV0UHJvcGVydHlTZWN1cml0eUNoZWNrID0KLSAgICAg
ICAgbWV0aG9kVGFibGUuZG9QdXRQcm9wZXJ0eVNlY3VyaXR5Q2hlY2sgIT0gSlNPYmplY3Q6OmRv
UHV0UHJvcGVydHlTZWN1cml0eUNoZWNrCi0gICAgICAgICYmIG1ldGhvZFRhYmxlLmRvUHV0UHJv
cGVydHlTZWN1cml0eUNoZWNrICE9IEpTQ2VsbDo6ZG9QdXRQcm9wZXJ0eVNlY3VyaXR5Q2hlY2s7
Ci0gICAgUkVMRUFTRV9BU1NFUlQob3ZlcnJpZGVzUHV0UHJvcGVydHlTZWN1cml0eUNoZWNrID09
IHR5cGVJbmZvKCkuaGFzUHV0UHJvcGVydHlTZWN1cml0eUNoZWNrKCkpOwotCiAgICAgYm9vbCBv
dmVycmlkZXNHZXRPd25Qcm9wZXJ0eU5hbWVzID0KICAgICAgICAgbWV0aG9kVGFibGUuZ2V0T3du
UHJvcGVydHlOYW1lcyAhPSBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcwogICAgICAgICAm
JiBtZXRob2RUYWJsZS5nZXRPd25Qcm9wZXJ0eU5hbWVzICE9IEpTQ2VsbDo6Z2V0T3duUHJvcGVy
dHlOYW1lczsKQEAgLTIwOSw2ICsyMDQsMTggQEAgdm9pZCBTdHJ1Y3R1cmU6OnZhbGlkYXRlRmxh
Z3MoKQogICAgICAgICBtZXRob2RUYWJsZS5nZXRQcm90b3R5cGUgIT0gc3RhdGljX2Nhc3Q8TWV0
aG9kVGFibGU6OkdldFByb3RvdHlwZUZ1bmN0aW9uUHRyPihKU09iamVjdDo6Z2V0UHJvdG90eXBl
KQogICAgICAgICAmJiBtZXRob2RUYWJsZS5nZXRQcm90b3R5cGUgIT0gSlNDZWxsOjpnZXRQcm90
b3R5cGU7CiAgICAgUkVMRUFTRV9BU1NFUlQob3ZlcnJpZGVzR2V0UHJvdG90eXBlID09IHR5cGVJ
bmZvKCkub3ZlcnJpZGVzR2V0UHJvdG90eXBlKCkpOworCisgICAgYm9vbCBvdmVycmlkZXNQdXQg
PQorICAgICAgICBtZXRob2RUYWJsZS5wdXQgIT0gSlNPYmplY3Q6OnB1dAorICAgICAgICAmJiBt
ZXRob2RUYWJsZS5wdXQgIT0gSlNDZWxsOjpwdXQ7CisgICAgUkVMRUFTRV9BU1NFUlQob3ZlcnJp
ZGVzUHV0ID09IHR5cGVJbmZvKCkub3ZlcnJpZGVzUHV0KCkpOworCisgICAgYm9vbCBvdmVycmlk
ZXNEZWZpbmVPd25Qcm9wZXJ0eSA9CisgICAgICAgIG1ldGhvZFRhYmxlLmRlZmluZU93blByb3Bl
cnR5ICE9IEpTT2JqZWN0OjpkZWZpbmVPd25Qcm9wZXJ0eQorICAgICAgICAmJiBtZXRob2RUYWJs
ZS5kZWZpbmVPd25Qcm9wZXJ0eSAhPSBKU0NlbGw6OmRlZmluZU93blByb3BlcnR5OworCisgICAg
aWYgKG92ZXJyaWRlc0RlZmluZU93blByb3BlcnR5KQorICAgICAgICBSRUxFQVNFX0FTU0VSVChv
dmVycmlkZXNQdXQpOwogfQogI2Vsc2UKIGlubGluZSB2b2lkIFN0cnVjdHVyZTo6dmFsaWRhdGVG
bGFncygpIHsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJl
LmgJKHJldmlzaW9uIDI3NjM1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0
cnVjdHVyZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNjcsNiArMjY3LDExIEBAIHB1YmxpYzoKICAg
ICB7CiAgICAgICAgIHJldHVybiB0eXBlSW5mbygpLmdldE93blByb3BlcnR5U2xvdElzSW1wdXJl
KCk7CiAgICAgfQorCisgICAgYm9vbCBoYXNOb25SZWlmaWVkU3RhdGljUHJvcGVydGllcygpIGNv
bnN0CisgICAgeworICAgICAgICByZXR1cm4gdHlwZUluZm8oKS5oYXNTdGF0aWNQcm9wZXJ0eVRh
YmxlKCkgJiYgIXN0YXRpY1Byb3BlcnRpZXNSZWlmaWVkKCk7CisgICAgfQogICAgIAogICAgIC8v
IFR5cGUgYWNjZXNzb3JzLgogICAgIFR5cGVJbmZvIHR5cGVJbmZvKCkgY29uc3QgeyByZXR1cm4g
bV9ibG9iLnR5cGVJbmZvKG1fb3V0T2ZMaW5lVHlwZUZsYWdzKTsgfQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3Rvb2xzL0pTRG9sbGFyVk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS90b29scy9KU0RvbGxhclZNLmNwcAkocmV2aXNpb24gMjc2MzU1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0pTRG9sbGFyVk0uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC02ODcsOSArNjg3LDExIEBAIEpTQ19ERUZJTkVfQ1VTVE9NX0dFVFRFUihydW50aW1lQXJy
YXlMZW4KICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKHRoaXNPYmplY3QtPmdl
dExlbmd0aCgpKSk7CiB9CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgQ29tcGFjdEhhc2hJbmRleCBz
dGF0aWNDdXN0b21BY2Nlc3NvclRhYmxlSW5kZXhbMl0gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0
IENvbXBhY3RIYXNoSW5kZXggc3RhdGljQ3VzdG9tQWNjZXNzb3JUYWJsZUluZGV4WzRdID0gewog
ICAgIHsgMCwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAorICAgIHsgMSwgLTEgfSwKKyAgICB7IC0x
LCAtMSB9LAogfTsKIAogc3RhdGljIEpTQ19ERUNMQVJFX0NVU1RPTV9HRVRURVIodGVzdFN0YXRp
Y0FjY2Vzc29yR2V0dGVyKTsKQEAgLTcxMiwxOSArNzE0LDIzIEBAIEpTQ19ERUZJTkVfQ1VTVE9N
X1NFVFRFUih0ZXN0U3RhdGljQWNjZXMKIHsKICAgICBEb2xsYXJWTUFzc2VydFNjb3BlIGFzc2Vy
dFNjb3BlOwogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHRocm93
U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICAKLSAgICBKU09iamVjdCogdGhp
c09iamVjdCA9IGpzRHluYW1pY0Nhc3Q8SlNPYmplY3QqPih2bSwgSlNWYWx1ZTo6ZGVjb2RlKHRo
aXNWYWx1ZSkpOworICAgIEpTVmFsdWUgcmVjZWl2ZXIgPSBKU1ZhbHVlOjpkZWNvZGUodGhpc1Zh
bHVlKTsKKyAgICBKU09iamVjdCogdGhpc09iamVjdCA9IHJlY2VpdmVyLmlzT2JqZWN0KCkgPyBh
c09iamVjdChyZWNlaXZlcikgOiByZWNlaXZlci5zeW50aGVzaXplUHJvdG90eXBlKGdsb2JhbE9i
amVjdCk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CiAgICAg
UkVMRUFTRV9BU1NFUlQodGhpc09iamVjdCk7CiAKICAgICByZXR1cm4gdGhpc09iamVjdC0+cHV0
RGlyZWN0KHZtLCBQcm9wZXJ0eU5hbWUoSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInRlc3RG
aWVsZCIpKSwgSlNWYWx1ZTo6ZGVjb2RlKHZhbHVlKSk7CiB9CiAKLXN0YXRpYyBjb25zdCBzdHJ1
Y3QgSGFzaFRhYmxlVmFsdWUgc3RhdGljQ3VzdG9tQWNjZXNzb3JUYWJsZVZhbHVlc1sxXSA9IHsK
K3N0YXRpYyBjb25zdCBzdHJ1Y3QgSGFzaFRhYmxlVmFsdWUgc3RhdGljQ3VzdG9tQWNjZXNzb3JU
YWJsZVZhbHVlc1syXSA9IHsKICAgICB7ICJ0ZXN0U3RhdGljQWNjZXNzb3IiLCBzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkN1c3RvbUFjY2Vzc29yKSwgTm9JbnRyaW5z
aWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPih0
ZXN0U3RhdGljQWNjZXNzb3JHZXR0ZXIpLCAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHV0UHJvcGVy
dHlTbG90OjpQdXRWYWx1ZUZ1bmM+KHRlc3RTdGF0aWNBY2Nlc3NvclB1dHRlcikgfSB9LAorICAg
IHsgInRlc3RTdGF0aWNBY2Nlc3NvclJlYWRPbmx5IiwgUHJvcGVydHlBdHRyaWJ1dGU6OkN1c3Rv
bUFjY2Vzc29yIHwgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5LCBOb0ludHJpbnNpYywgeyAo
aW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KHRlc3RTdGF0
aWNBY2Nlc3NvckdldHRlciksIChpbnRwdHJfdClzdGF0aWNfY2FzdDxQdXRQcm9wZXJ0eVNsb3Q6
OlB1dFZhbHVlRnVuYz4oMCkgfSB9LAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBIYXNoVGFi
bGUgc3RhdGljQ3VzdG9tQWNjZXNzb3JUYWJsZSA9Ci0gICAgeyAxLCAxLCB0cnVlLCBudWxscHRy
LCBzdGF0aWNDdXN0b21BY2Nlc3NvclRhYmxlVmFsdWVzLCBzdGF0aWNDdXN0b21BY2Nlc3NvclRh
YmxlSW5kZXggfTsKKyAgICB7IDIsIDMsIHRydWUsIG51bGxwdHIsIHN0YXRpY0N1c3RvbUFjY2Vz
c29yVGFibGVWYWx1ZXMsIHN0YXRpY0N1c3RvbUFjY2Vzc29yVGFibGVJbmRleCB9OwogCiBjbGFz
cyBTdGF0aWNDdXN0b21BY2Nlc3NvciA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKICAgICB1
c2luZyBCYXNlID0gSlNOb25GaW5hbE9iamVjdDsKQEAgLTc4OSwxNyArNzk1LDI1IEBAIEpTQ19E
RUZJTkVfQ1VTVE9NX1NFVFRFUih0ZXN0U3RhdGljVmFsdWUKICAgICByZXR1cm4gdGhpc09iamVj
dC0+cHV0RGlyZWN0KHZtLCBQcm9wZXJ0eU5hbWUoSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwg
InRlc3RTdGF0aWNWYWx1ZSIpKSwgSlNWYWx1ZTo6ZGVjb2RlKHZhbHVlKSk7CiB9CiAKLXN0YXRp
YyBjb25zdCBzdHJ1Y3QgQ29tcGFjdEhhc2hJbmRleCBzdGF0aWNDdXN0b21WYWx1ZVRhYmxlSW5k
ZXhbMl0gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IENvbXBhY3RIYXNoSW5kZXggc3RhdGljQ3Vz
dG9tVmFsdWVUYWJsZUluZGV4WzhdID0geworICAgIHsgMSwgLTEgfSwKKyAgICB7IC0xLCAtMSB9
LAorICAgIHsgLTEsIC0xIH0sCisgICAgeyAtMSwgLTEgfSwKKyAgICB7IC0xLCAtMSB9LAorICAg
IHsgMiwgLTEgfSwKICAgICB7IDAsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKIH07CiAKLXN0YXRp
YyBjb25zdCBzdHJ1Y3QgSGFzaFRhYmxlVmFsdWUgc3RhdGljQ3VzdG9tVmFsdWVUYWJsZVZhbHVl
c1sxXSA9IHsKLSAgICB7ICJ0ZXN0U3RhdGljVmFsdWUiLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
UHJvcGVydHlBdHRyaWJ1dGU6OkN1c3RvbUFjY2Vzc29yKSwgTm9JbnRyaW5zaWMsIHsgKGludHB0
cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPih0ZXN0U3RhdGljVmFs
dWVHZXR0ZXIpLCAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHV0UHJvcGVydHlTbG90OjpQdXRWYWx1
ZUZ1bmM+KHRlc3RTdGF0aWNWYWx1ZVB1dHRlcikgfSB9LAorc3RhdGljIGNvbnN0IHN0cnVjdCBI
YXNoVGFibGVWYWx1ZSBzdGF0aWNDdXN0b21WYWx1ZVRhYmxlVmFsdWVzWzNdID0geworICAgIHsg
InRlc3RTdGF0aWNWYWx1ZSIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0
ZTo6Tm9uZSksIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNs
b3Q6OkdldFZhbHVlRnVuYz4odGVzdFN0YXRpY1ZhbHVlR2V0dGVyKSwgKGludHB0cl90KXN0YXRp
Y19jYXN0PFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jPih0ZXN0U3RhdGljVmFsdWVQdXR0
ZXIpIH0gfSwKKyAgICB7ICJ0ZXN0U3RhdGljVmFsdWVOb1NldHRlciIsIHN0YXRpY19jYXN0PHVu
c2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pLCBOb0ludHJpbnNpYywgeyAoaW50
cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KHRlc3RTdGF0aWNW
YWx1ZUdldHRlciksIChpbnRwdHJfdClzdGF0aWNfY2FzdDxQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZh
bHVlRnVuYz4oMCkgfSB9LAorICAgIHsgInRlc3RTdGF0aWNWYWx1ZVJlYWRPbmx5Iiwgc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSksIE5vSW50cmluc2lj
LCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4odGVz
dFN0YXRpY1ZhbHVlR2V0dGVyKSwgKGludHB0cl90KXN0YXRpY19jYXN0PFB1dFByb3BlcnR5U2xv
dDo6UHV0VmFsdWVGdW5jPigwKSB9IH0sCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IEhhc2hU
YWJsZSBzdGF0aWNDdXN0b21WYWx1ZVRhYmxlID0KLSAgICB7IDEsIDEsIHRydWUsIG51bGxwdHIs
IHN0YXRpY0N1c3RvbVZhbHVlVGFibGVWYWx1ZXMsIHN0YXRpY0N1c3RvbVZhbHVlVGFibGVJbmRl
eCB9OworICAgIHsgMywgNywgdHJ1ZSwgbnVsbHB0ciwgc3RhdGljQ3VzdG9tVmFsdWVUYWJsZVZh
bHVlcywgc3RhdGljQ3VzdG9tVmFsdWVUYWJsZUluZGV4IH07CiAKIGNsYXNzIFN0YXRpY0N1c3Rv
bVZhbHVlIDogcHVibGljIEpTTm9uRmluYWxPYmplY3QgewogICAgIHVzaW5nIEJhc2UgPSBKU05v
bkZpbmFsT2JqZWN0OwpAQCAtODM3LDYgKzg1MSw3IEBAIHB1YmxpYzoKIAogY2xhc3MgT2JqZWN0
RG9pbmdTaWRlRWZmZWN0UHV0V2l0aG91dENvcnJlY3RTbG90U3RhdHVzIDogcHVibGljIEpTTm9u
RmluYWxPYmplY3QgewogICAgIHVzaW5nIEJhc2UgPSBKU05vbkZpbmFsT2JqZWN0OworICAgIHN0
YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVG
bGFncyB8IE92ZXJyaWRlc1B1dDsKIHB1YmxpYzoKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxs
VHlwZSwgU3Vic3BhY2VBY2Nlc3M+CiAgICAgc3RhdGljIENvbXBsZXRlU3Vic3BhY2UqIHN1YnNw
YWNlRm9yKFZNJiB2bSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI3NjM1NSkKKysrIFNvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDYxIEBACisyMDIx
LTA0LTIxICBBbGV4ZXkgU2h2YXlrYSAgPHNodmFpa2FsZXNoQGdtYWlsLmNvbT4KKworICAgICAg
ICBbSlNDXSBPcmRpbmFyeVNldCBzaG91bGQgaW52b2tlIGN1c3RvbSBbW1NldF1dIG1ldGhvZHMK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNzkxNgor
CisgICAgICAgIFJldmlld2VkIGJ5IFl1c3VrZSBTdXp1a2kuCisKKyAgICAgICAgRml4ZXM6Cisg
ICAgICAgICAgMS4gTGVnYWN5IHBsYXRmb3JtIG9iamVjdCdzIFtbU2V0XV0gbm93IGd1YXJkcyBh
Z2FpbnN0IGFsdGVyZWQgcmVjZWl2ZXIgWzFdLgorICAgICAgICAgICAgIChhbGlnbnMgd2l0aCBC
bGluaykuCisgICAgICAgICAgMi4gRGlyZWN0IFtbU2V0XV0gdG8gd2luZG93LiVJbnRlcmZhY2Ul
IGNvbnN0cnVjdG9yIG5vdyBwcmVzZXJ2ZXMgRG9udEVudW0gYXR0cmlidXRlIFsyXS4KKyAgICAg
ICAgICAgICAoYWxpZ25zIHdpdGggQmxpbmsgYW5kIEdlY2tvKS4KKyAgICAgICAgICAzLiBDcm9z
cy1vcmlnaW4gbm9uLWluZGV4IHB1dCgpIG5vdyB0aHJvd3MgU2VjdXJpdHlFcnJvciBpbnN0ZWFk
IG9mIHNpbGVudGx5IGZhaWxpbmcgWzNdLgorICAgICAgICAgICAgIChhbGlnbnMgd2l0aCBCbGlu
ayBhbmQgR2Vja28pLgorCisgICAgICAgIFJlZmFjdG9yczoKKyAgICAgICAgICAxLiBTaW1wbGlm
aWVzIGNyb3NzLW9yaWdpbiBKU0RPTVdpbmRvdzo6cHV0KCksIGFsaWduaW5nIGl0IHdpdGggSlNM
b2NhdGlvbjo6cHV0KCkuCisgICAgICAgICAgMi4gUmVwbGFjZXMgbG9va3VwUHV0KCkgd2l0aCBk
aXJlY3Qgc2V0dGVyIGNhbGwgaW4gSlNSZW1vdGVET01XaW5kb3c6OnB1dCgpLgorICAgICAgICAg
IDMuIFJlbW92ZXMgbm93IHVudXNlZCBkb1B1dFByb3BlcnR5U2VjdXJpdHlDaGVjaygpIG1ldGhv
ZHMuCisKKyAgICAgICAgVGVzdHM6IGpzL2RvbS9zY3JpcHQtdGVzdHMvcmVmbGVjdC1zZXQtb250
by1kb20uanMKKyAgICAgICAgICAgICAgIGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMv
V2ViSURML2VjbWFzY3JpcHQtYmluZGluZy9pbnRlcmZhY2Utb2JqZWN0LXNldC1yZWNlaXZlci5o
dG1sCisgICAgICAgICAgICAgICBodHRwL3Rlc3RzL3NlY3VyaXR5L2Nyb3NzLWZyYW1lLWFjY2Vz
cy1vYmplY3QtZ2V0UHJvdG90eXBlT2YtaW4tcHV0Lmh0bWwKKworICAgICAgICBbMV0gaHR0cHM6
Ly9oZXljYW0uZ2l0aHViLmlvL3dlYmlkbC8jbGVnYWN5LXBsYXRmb3JtLW9iamVjdC1zZXQgKHN0
ZXAgMSkKKyAgICAgICAgWzJdIGh0dHBzOi8vaGV5Y2FtLmdpdGh1Yi5pby93ZWJpZGwvI2RlZmlu
ZS10aGUtZ2xvYmFsLXByb3BlcnR5LXJlZmVyZW5jZXMgKHN0ZXAgMy4xLjMpCisgICAgICAgIFsz
XSBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9icm93c2Vycy5odG1sI2Ny
b3Nzb3JpZ2luc2V0LSgtbywtcCwtdiwtcmVjZWl2ZXItKSAoc3RlcCA0KQorCisgICAgICAgICog
YmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNE
T01XaW5kb3c6OnB1dCk6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTVdpbmRvdzo6ZG9QdXRQcm9w
ZXJ0eVNlY3VyaXR5Q2hlY2spOiBEZWxldGVkLgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTTG9j
YXRpb25DdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNMb2NhdGlvbjo6ZG9QdXRQcm9w
ZXJ0eVNlY3VyaXR5Q2hlY2spOiBEZWxldGVkLgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTUmVt
b3RlRE9NV2luZG93Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTUmVtb3RlRE9NV2lu
ZG93OjpwdXQpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBt
OgorICAgICAgICAoR2VuZXJhdGVQdXQpOgorICAgICAgICAoR2VuZXJhdGVIZWFkZXIpOgorICAg
ICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy8qOiBVcGRhdGVkLgorICAgICAgICAqIGJy
aWRnZS9vYmpjL29iamNfcnVudGltZS5oOgorICAgICAgICAqIGJyaWRnZS9ydW50aW1lX2FycmF5
Lmg6CisgICAgICAgICogYnJpZGdlL3J1bnRpbWVfb2JqZWN0Lmg6CisKKyAgICAgICAgKiBiaW5k
aW5ncy9qcy9KU0RPTVdpbmRvd0N1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTVdp
bmRvdzo6cHV0KToKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NV2luZG93Ojpkb1B1dFByb3BlcnR5
U2VjdXJpdHlDaGVjayk6IERlbGV0ZWQuCisgICAgICAgICogYmluZGluZ3MvanMvSlNMb2NhdGlv
bkN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0xvY2F0aW9uOjpkb1B1dFByb3BlcnR5
U2VjdXJpdHlDaGVjayk6IERlbGV0ZWQuCisgICAgICAgICogYmluZGluZ3MvanMvSlNSZW1vdGVE
T01XaW5kb3dDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNSZW1vdGVET01XaW5kb3c6
OnB1dCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG06Cisg
ICAgICAgIChHZW5lcmF0ZVB1dCk6CisgICAgICAgIChHZW5lcmF0ZUhlYWRlcik6CisgICAgICAg
ICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTLyo6IFVwZGF0ZWQuCisgICAgICAgICogYnJpZGdl
L29iamMvb2JqY19ydW50aW1lLmg6CisgICAgICAgICogYnJpZGdlL3J1bnRpbWVfYXJyYXkuaDoK
KyAgICAgICAgKiBicmlkZ2UvcnVudGltZV9vYmplY3QuaDoKKwogMjAyMS0wNC0yMSAgTWFydGlu
IFJvYmluc29uICA8bXJvYmluc29uQHdlYmtpdC5vcmc+CiAKICAgICAgICAgQWRkIGJhc2ljIChu
b24tbW9tZW50dW0pIHdoZWVsIGV2ZW50IGhhbmRsaW5nIGZvciBzY3JvbGwgc25hcApJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmNwcAko
cmV2aXNpb24gMjc2MzU1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5k
b3dDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNDgsMjMgKzI0OCw2IEBAIGJvb2wgSlNE
T01XaW5kb3c6OmdldE93blByb3BlcnR5U2xvdEJ5SW4KICAgICByZXR1cm4gQmFzZTo6Z2V0T3du
UHJvcGVydHlTbG90QnlJbmRleCh0aGlzT2JqZWN0LCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBpbmRl
eCwgc2xvdCk7CiB9CiAKLXZvaWQgSlNET01XaW5kb3c6OmRvUHV0UHJvcGVydHlTZWN1cml0eUNo
ZWNrKEpTT2JqZWN0KiBjZWxsLCBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwg
UHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHV0UHJvcGVydHlTbG90JikKLXsKLSAgICBWTSYg
dm0gPSBsZXhpY2FsR2xvYmFsT2JqZWN0LT52bSgpOwotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKLQotICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNET01X
aW5kb3cqPihjZWxsKTsKLQotICAgIFN0cmluZyBlcnJvck1lc3NhZ2U7Ci0gICAgaWYgKCFCaW5k
aW5nU2VjdXJpdHk6OnNob3VsZEFsbG93QWNjZXNzVG9ET01XaW5kb3coKmxleGljYWxHbG9iYWxP
YmplY3QsIHRoaXNPYmplY3QtPndyYXBwZWQoKSwgZXJyb3JNZXNzYWdlKSkgewotICAgICAgICAv
LyBXZSBvbmx5IGFsbG93IHNldHRpbmcgImxvY2F0aW9uIiBhdHRyaWJ1dGUgY3Jvc3Mtb3JpZ2lu
LgotICAgICAgICBpZiAocHJvcGVydHlOYW1lID09IHN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRh
Kj4odm0uY2xpZW50RGF0YSktPmJ1aWx0aW5OYW1lcygpLmxvY2F0aW9uUHVibGljTmFtZSgpKQot
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB0aHJvd1NlY3VyaXR5RXJyb3IoKmxleGljYWxH
bG9iYWxPYmplY3QsIHNjb3BlLCBlcnJvck1lc3NhZ2UpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotfQotCiBib29sIEpTRE9NV2luZG93OjpwdXQoSlNDZWxsKiBjZWxsLCBKU0dsb2JhbE9iamVj
dCogbGV4aWNhbEdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1
ZSB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBzbG90KQogewogICAgIFZNJiB2bSA9IGxleGljYWxH
bG9iYWxPYmplY3QtPnZtKCk7CkBAIC0yNzIsMTcgKzI1NSwxMCBAQCBib29sIEpTRE9NV2luZG93
OjpwdXQoSlNDZWxsKiBjZWxsLCBKU0dsCiAKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0
PEpTRE9NV2luZG93Kj4oY2VsbCk7CiAKLSAgICBTdHJpbmcgZXJyb3JNZXNzYWdlOwotICAgIGlm
ICghQmluZGluZ1NlY3VyaXR5OjpzaG91bGRBbGxvd0FjY2Vzc1RvRE9NV2luZG93KCpsZXhpY2Fs
R2xvYmFsT2JqZWN0LCB0aGlzT2JqZWN0LT53cmFwcGVkKCksIGVycm9yTWVzc2FnZSkpIHsKKyAg
ICBpZiAocHJvcGVydHlOYW1lICE9IHN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xp
ZW50RGF0YSktPmJ1aWx0aW5OYW1lcygpLmxvY2F0aW9uUHVibGljTmFtZSgpKSB7CiAgICAgICAg
IC8vIFdlIG9ubHkgYWxsb3cgc2V0dGluZyAibG9jYXRpb24iIGF0dHJpYnV0ZSBjcm9zcy1vcmln
aW4uCi0gICAgICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERh
dGEqPih2bS5jbGllbnREYXRhKS0+YnVpbHRpbk5hbWVzKCkubG9jYXRpb25QdWJsaWNOYW1lKCkp
IHsKLSAgICAgICAgICAgIGJvb2wgcHV0UmVzdWx0ID0gZmFsc2U7Ci0gICAgICAgICAgICBpZiAo
bG9va3VwUHV0KGxleGljYWxHbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgdGhpc09iamVjdCwg
dmFsdWUsICpzX2luZm8uc3RhdGljUHJvcEhhc2hUYWJsZSwgc2xvdCwgcHV0UmVzdWx0KSkKLSAg
ICAgICAgICAgICAgICByZXR1cm4gcHV0UmVzdWx0OworICAgICAgICBpZiAoIUJpbmRpbmdTZWN1
cml0eTo6c2hvdWxkQWxsb3dBY2Nlc3NUb0RPTVdpbmRvdyhsZXhpY2FsR2xvYmFsT2JqZWN0LCB0
aGlzT2JqZWN0LT53cmFwcGVkKCksIFRocm93U2VjdXJpdHlFcnJvcikpCiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgdGhyb3dTZWN1cml0eUVycm9yKCpsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBzY29wZSwgZXJyb3JNZXNzYWdlKTsKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIH0KIAogICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgQmFzZTo6cHV0KHRo
aXNPYmplY3QsIGxleGljYWxHbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3Qp
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTG9jYXRpb25DdXN0b20uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTG9jYXRpb25DdXN0
b20uY3BwCShyZXZpc2lvbiAyNzYzNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0xvY2F0aW9uQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA4LDIzICsxMDgsNiBAQCBi
b29sIEpTTG9jYXRpb246OmdldE93blByb3BlcnR5U2xvdEJ5SW5kCiAgICAgUkVMRUFTRV9BTkRf
UkVUVVJOKHNjb3BlLCBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChvYmplY3Qs
IGxleGljYWxHbG9iYWxPYmplY3QsIGluZGV4LCBzbG90KSk7CiB9CiAKLXZvaWQgSlNMb2NhdGlv
bjo6ZG9QdXRQcm9wZXJ0eVNlY3VyaXR5Q2hlY2soSlNPYmplY3QqIG9iamVjdCwgSlNHbG9iYWxP
YmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFB1
dFByb3BlcnR5U2xvdCYpCi17Ci0gICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0xvY2F0
aW9uKj4ob2JqZWN0KTsKLSAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3Qs
IGluZm8oKSk7Ci0KLSAgICBWTSYgdm0gPSBsZXhpY2FsR2xvYmFsT2JqZWN0LT52bSgpOwotCi0g
ICAgLy8gQWx3YXlzIGFsbG93IGFzc2lnbmluZyB0byB0aGUgd2hvbGUgbG9jYXRpb24uCi0gICAg
Ly8gSG93ZXZlciwgYWxsbG93aW5nIGFzc2lnbmluZyBvZiBwaWVjZXMgbWlnaHQgaW5hZHZlcnRl
bnRseSBkaXNjbG9zZSBwYXJ0cyBvZiB0aGUgb3JpZ2luYWwgbG9jYXRpb24uCi0gICAgLy8gU28g
ZmFsbCB0aHJvdWdoIHRvIHRoZSBhY2Nlc3MgY2hlY2sgZm9yIHRob3NlLgotICAgIGlmIChwcm9w
ZXJ0eU5hbWUgPT0gc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKS0+
YnVpbHRpbk5hbWVzKCkuaHJlZlB1YmxpY05hbWUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
Ly8gQmxvY2sgYWNjZXNzIGFuZCB0aHJvdyBpZiB0aGVyZSBpcyBhIHNlY3VyaXR5IGVycm9yLgot
ICAgIEJpbmRpbmdTZWN1cml0eTo6c2hvdWxkQWxsb3dBY2Nlc3NUb0RPTVdpbmRvdyhsZXhpY2Fs
R2xvYmFsT2JqZWN0LCB0aGlzT2JqZWN0LT53cmFwcGVkKCkud2luZG93KCksIFRocm93U2VjdXJp
dHlFcnJvcik7Ci19Ci0KIGJvb2wgSlNMb2NhdGlvbjo6cHV0KEpTQ2VsbCogY2VsbCwgSlNHbG9i
YWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUs
IEpTVmFsdWUgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgcHV0UHJvcGVydHlTbG90KQogewogICAg
IFZNJiB2bSA9IGxleGljYWxHbG9iYWxPYmplY3QtPnZtKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU1JlbW90ZURPTVdpbmRvd0N1c3RvbS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNSZW1vdGVET01XaW5kb3dDdXN0b20uY3BwCShy
ZXZpc2lvbiAyNzYzNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1JlbW90ZURP
TVdpbmRvd0N1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY4LDExICs2OCwxMiBAQCBib29s
IEpTUmVtb3RlRE9NV2luZG93OjpwdXQoSlNDZWxsKiBjZWxsCiAKICAgICAvLyBXZSBvbmx5IGFs
bG93IHNldHRpbmcgImxvY2F0aW9uIiBhdHRyaWJ1dGUgY3Jvc3Mtb3JpZ2luLgogICAgIGlmIChw
cm9wZXJ0eU5hbWUgPT0gc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRh
KS0+YnVpbHRpbk5hbWVzKCkubG9jYXRpb25QdWJsaWNOYW1lKCkpIHsKLSAgICAgICAgYm9vbCBw
dXRSZXN1bHQgPSBmYWxzZTsKLSAgICAgICAgaWYgKGxvb2t1cFB1dChsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBwcm9wZXJ0eU5hbWUsIHRoaXNPYmplY3QsIHZhbHVlLCAqc19pbmZvLnN0YXRpY1Byb3BI
YXNoVGFibGUsIHNsb3QsIHB1dFJlc3VsdCkpCi0gICAgICAgICAgICByZXR1cm4gcHV0UmVzdWx0
OwotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGF1dG8qIHNldHRlciA9IHNfaW5mby5z
dGF0aWNQcm9wSGFzaFRhYmxlLT5lbnRyeShwcm9wZXJ0eU5hbWUpLT5wcm9wZXJ0eVB1dHRlcigp
OworICAgICAgICBzY29wZS5yZWxlYXNlKCk7CisgICAgICAgIHNldHRlcihsZXhpY2FsR2xvYmFs
T2JqZWN0LCBKU1ZhbHVlOjplbmNvZGUoc2xvdC50aGlzVmFsdWUoKSksIEpTVmFsdWU6OmVuY29k
ZSh2YWx1ZSksIHByb3BlcnR5TmFtZSk7CisgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KKwog
ICAgIHRocm93U2VjdXJpdHlFcnJvcigqbGV4aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUsIGVycm9y
TWVzc2FnZSk7CiAgICAgcmV0dXJuIGZhbHNlOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0JKHJldmlzaW9uIDI3NjM1
NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBt
CSh3b3JraW5nIGNvcHkpCkBAIC0xMTgxLDYgKzExODEsOCBAQCBzdWIgR2VuZXJhdGVQdXQKICAg
ICBwdXNoKEAkb3V0cHV0QXJyYXksICJ7XG4iKTsKICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIg
ICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDwke2NsYXNzTmFtZX0qPihjZWxsKTtcbiIpOwog
ICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRo
aXNPYmplY3QsIGluZm8oKSk7XG5cbiIpOworICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBp
ZiAoVU5MSUtFTFkodGhpc09iamVjdCAhPSBwdXRQcm9wZXJ0eVNsb3QudGhpc1ZhbHVlKCkpKVxu
Iik7CisgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgICAgICByZXR1cm4gSlNPYmplY3Q6OnB1
dCh0aGlzT2JqZWN0LCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBw
dXRQcm9wZXJ0eVNsb3QpO1xuIik7CiAKICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgYXV0
byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShsZXhpY2FsR2xvYmFsT2JqZWN0LT52
bSgpKTtcblxuIik7CiAKQEAgLTI5NTQsMTEgKzI5NTYsNiBAQCBzdWIgR2VuZXJhdGVIZWFkZXIK
ICAgICAgICAgJHN0cnVjdHVyZUZsYWdzeyJKU0M6OkludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNs
b3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8ifSA9IDE7CiAgICAgfQogCi0gICAgaWYg
KCRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+e0NoZWNrU2VjdXJpdHl9KSB7Ci0gICAg
ICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgc3RhdGljIHZvaWQgZG9QdXRQcm9wZXJ0eVNl
Y3VyaXR5Q2hlY2soSlNDOjpKU09iamVjdCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlBy
b3BlcnR5TmFtZSwgSlNDOjpQdXRQcm9wZXJ0eVNsb3QmKTtcbiIpOwotICAgICAgICAkc3RydWN0
dXJlRmxhZ3N7IkpTQzo6SGFzUHV0UHJvcGVydHlTZWN1cml0eUNoZWNrIn0gPSAxOwotICAgIH0K
LQogICAgIGlmICgkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntQbHVnaW59IHx8IEdl
dE5hbWVkU2V0dGVyT3BlcmF0aW9uKCRpbnRlcmZhY2UpKSB7CiAgICAgICAgICRzdHJ1Y3R1cmVG
bGFnc3siSlNDOjpQcm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmcifSA9IDE7CiAgICAgfQpAQCAtMjk3
MSw2ICsyOTY4LDcgQEAgc3ViIEdlbmVyYXRlSGVhZGVyCiAgICAgaWYgKEluc3RhbmNlT3ZlcnJp
ZGVzUHV0KCRpbnRlcmZhY2UpKSB7CiAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAg
c3RhdGljIGJvb2wgcHV0KEpTQzo6SlNDZWxsKiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6
UHJvcGVydHlOYW1lLCBKU0M6OkpTVmFsdWUsIEpTQzo6UHV0UHJvcGVydHlTbG90Jik7XG4iKTsK
ICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBzdGF0aWMgYm9vbCBwdXRCeUluZGV4
KEpTQzo6SlNDZWxsKiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIHVuc2lnbmVkIHByb3BlcnR5TmFt
ZSwgSlNDOjpKU1ZhbHVlLCBib29sIHNob3VsZFRocm93KTtcbiIpOworICAgICAgICAkc3RydWN0
dXJlRmxhZ3N7IkpTQzo6T3ZlcnJpZGVzUHV0In0gPSAxOwogICAgIH0KICAgICAKICAgICBpZiAo
SW5zdGFuY2VPdmVycmlkZXNEZWZpbmVPd25Qcm9wZXJ0eSgkaW50ZXJmYWNlKSkgewpJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdERvbWFpblNlY3Vy
aXR5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdERvbWFpblNlY3VyaXR5LmgJKHJldmlzaW9uIDI3NjM1NSkKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3REb21haW5TZWN1cml0eS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zOSw3ICszOSw2IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgSlNDOjpK
U09iamVjdCogY3JlYXRlUHJvdG90eXBlKEpTQzo6Vk0mLCBKU0RPTUdsb2JhbE9iamVjdCYpOwog
ICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBwcm90b3R5cGUoSlNDOjpWTSYsIEpTRE9NR2xvYmFs
T2JqZWN0Jik7CiAgICAgc3RhdGljIFRlc3REb21haW5TZWN1cml0eSogdG9XcmFwcGVkKEpTQzo6
Vk0mLCBKU0M6OkpTVmFsdWUpOwotICAgIHN0YXRpYyB2b2lkIGRvUHV0UHJvcGVydHlTZWN1cml0
eUNoZWNrKEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpQcm9wZXJ0
eU5hbWUsIEpTQzo6UHV0UHJvcGVydHlTbG90Jik7CiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShK
U0M6OkpTQ2VsbCopOwogCiAgICAgREVDTEFSRV9JTkZPOwpAQCAtNTksNyArNTgsNyBAQCBwdWJs
aWM6CiAgICAgc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6OlZN
JiB2bSk7CiAgICAgc3RhdGljIHZvaWQgYW5hbHl6ZUhlYXAoSlNDZWxsKiwgSlNDOjpIZWFwQW5h
bHl6ZXImKTsKIHB1YmxpYzoKLSAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVy
ZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBKU0M6Okhhc1B1dFByb3BlcnR5U2VjdXJp
dHlDaGVjayB8IEpTQzo6SGFzU3RhdGljUHJvcGVydHlUYWJsZTsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBKU0M6
Okhhc1N0YXRpY1Byb3BlcnR5VGFibGU7CiBwcm90ZWN0ZWQ6CiAgICAgSlNUZXN0RG9tYWluU2Vj
dXJpdHkoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCYsIFJlZjxUZXN0RG9tYWlu
U2VjdXJpdHk+JiYpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0SW5kZXhlZFNldHRlck5vSWRlbnRpZmllci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEluZGV4ZWRTZXR0
ZXJOb0lkZW50aWZpZXIuY3BwCShyZXZpc2lvbiAyNzYzNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW5kZXhlZFNldHRlck5vSWRlbnRpZmllci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE5OSw2ICsxOTksOCBAQCBib29sIEpTVGVzdEluZGV4ZWRT
ZXR0ZXJOb0lkZW50aWZpZXI6OnB1CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rl
c3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVD
VF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwogCisgICAgaWYgKFVOTElLRUxZKHRoaXNP
YmplY3QgIT0gcHV0UHJvcGVydHlTbG90LnRoaXNWYWx1ZSgpKSkKKyAgICAgICAgcmV0dXJuIEpT
T2JqZWN0OjpwdXQodGhpc09iamVjdCwgbGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1l
LCB2YWx1ZSwgcHV0UHJvcGVydHlTbG90KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKGxleGljYWxHbG9iYWxPYmplY3QtPnZtKCkpOwogCiAgICAgaWYgKGF1dG8g
aW5kZXggPSBwYXJzZUluZGV4KHByb3BlcnR5TmFtZSkpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIuaAkocmV2aXNpb24gMjc2MzU1KQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEluZGV4ZWRTZXR0
ZXJOb0lkZW50aWZpZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNjQsNyArNjQsNyBAQCBwdWJsaWM6
CiAgICAgc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2
bSk7CiAgICAgc3RhdGljIHZvaWQgYW5hbHl6ZUhlYXAoSlNDZWxsKiwgSlNDOjpIZWFwQW5hbHl6
ZXImKTsKIHB1YmxpYzoKLSAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZs
YWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBKU0M6OkludGVyY2VwdHNHZXRPd25Qcm9wZXJ0
eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8gfCBKU0M6Ok92ZXJyaWRlc0dldE93
blByb3BlcnR5TmFtZXMgfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdDsKKyAgICBz
dGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJl
RmxhZ3MgfCBKU0M6OkludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5M
ZW5ndGhJc05vdFplcm8gfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5TmFtZXMgfCBKU0M6
Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEpTQzo6T3ZlcnJpZGVzUHV0OwogcHJvdGVj
dGVkOgogICAgIEpTVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIoSlNDOjpTdHJ1Y3R1cmUq
LCBKU0RPTUdsb2JhbE9iamVjdCYsIFJlZjxUZXN0SW5kZXhlZFNldHRlck5vSWRlbnRpZmllcj4m
Jik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbmRleGVkU2V0dGVyVGhy
b3dpbmdFeGNlcHRpb24uY3BwCShyZXZpc2lvbiAyNzYzNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0
aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk5LDYgKzE5OSw4IEBAIGJvb2wgSlNUZXN0SW5k
ZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW8KICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0
PEpTVGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbio+KGNlbGwpOwogICAgIEFTU0VS
VF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKIAorICAgIGlmIChVTkxJ
S0VMWSh0aGlzT2JqZWN0ICE9IHB1dFByb3BlcnR5U2xvdC50aGlzVmFsdWUoKSkpCisgICAgICAg
IHJldHVybiBKU09iamVjdDo6cHV0KHRoaXNPYmplY3QsIGxleGljYWxHbG9iYWxPYmplY3QsIHBy
b3BlcnR5TmFtZSwgdmFsdWUsIHB1dFByb3BlcnR5U2xvdCk7CiAgICAgYXV0byB0aHJvd1Njb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRShsZXhpY2FsR2xvYmFsT2JqZWN0LT52bSgpKTsKIAogICAg
IGlmIChhdXRvIGluZGV4ID0gcGFyc2VJbmRleChwcm9wZXJ0eU5hbWUpKSB7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW5kZXhlZFNldHRlclRo
cm93aW5nRXhjZXB0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5oCShy
ZXZpc2lvbiAyNzYzNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uLmgJKHdvcmtpbmcgY29weSkK
QEAgLTY0LDcgKzY0LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBz
dWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pOwogICAgIHN0YXRpYyB2b2lkIGFuYWx5emVIZWFw
KEpTQ2VsbCosIEpTQzo6SGVhcEFuYWx5emVyJik7CiBwdWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0
ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSlND
OjpJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3Ra
ZXJvIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eU5hbWVzIHwgSlNDOjpPdmVycmlkZXNH
ZXRPd25Qcm9wZXJ0eVNsb3Q7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1
cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSlNDOjpJbnRlcmNlcHRzR2V0T3duUHJv
cGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgSlNDOjpPdmVycmlkZXNH
ZXRPd25Qcm9wZXJ0eU5hbWVzIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBK
U0M6Ok92ZXJyaWRlc1B1dDsKIHByb3RlY3RlZDoKICAgICBKU1Rlc3RJbmRleGVkU2V0dGVyVGhy
b3dpbmdFeGNlcHRpb24oSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCYsIFJlZjxU
ZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uPiYmKTsKIApJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRl
bnRpZmllci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5jcHAJKHJldmlzaW9u
IDI3NjM1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDgs
NiArMjA4LDggQEAgYm9vbCBKU1Rlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXI6OgogICAg
IGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlm
aWVyKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBp
bmZvKCkpOwogCisgICAgaWYgKFVOTElLRUxZKHRoaXNPYmplY3QgIT0gcHV0UHJvcGVydHlTbG90
LnRoaXNWYWx1ZSgpKSkKKyAgICAgICAgcmV0dXJuIEpTT2JqZWN0OjpwdXQodGhpc09iamVjdCwg
bGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgcHV0UHJvcGVydHlTbG90
KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKGxleGljYWxHbG9i
YWxPYmplY3QtPnZtKCkpOwogCiAgICAgaWYgKGF1dG8gaW5kZXggPSBwYXJzZUluZGV4KHByb3Bl
cnR5TmFtZSkpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW5kZXhlZFNldHRlcldp
dGhJZGVudGlmaWVyLmgJKHJldmlzaW9uIDI3NjM1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIuaAko
d29ya2luZyBjb3B5KQpAQCAtNjQsNyArNjQsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIEpTQzo6
SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSk7CiAgICAgc3RhdGljIHZv
aWQgYW5hbHl6ZUhlYXAoSlNDZWxsKiwgSlNDOjpIZWFwQW5hbHl6ZXImKTsKIHB1YmxpYzoKLSAg
ICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0
dXJlRmxhZ3MgfCBKU0M6OkludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldo
ZW5MZW5ndGhJc05vdFplcm8gfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5TmFtZXMgfCBK
U0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdDsKKyAgICBzdGF0aWMgY29uc3RleHByIHVu
c2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBKU0M6OkludGVy
Y2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8gfCBK
U0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5TmFtZXMgfCBKU0M6Ok92ZXJyaWRlc0dldE93blBy
b3BlcnR5U2xvdCB8IEpTQzo6T3ZlcnJpZGVzUHV0OwogcHJvdGVjdGVkOgogICAgIEpTVGVzdElu
ZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcihKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2Jq
ZWN0JiwgUmVmPFRlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXI+JiYpOwogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdEludGVyZmFjZS5oCShyZXZpc2lvbiAyNzYzNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTgzLDYgKzgzLDggQEAgcHVibGljOgogI2lmIEVOQUJMRShDb25kaXRpb24xMSkgfHwgRU5BQkxF
KENvbmRpdGlvbjEyKQogICAgIEpTQzo6SlNWYWx1ZSBzdXBwbGVtZW50YWxNZXRob2QzKEpTQzo6
SlNHbG9iYWxPYmplY3QmLCBKU0M6OkNhbGxGcmFtZSYpOwogI2VuZGlmCitwdWJsaWM6CisgICAg
c3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVy
ZUZsYWdzIHwgSlNDOjpPdmVycmlkZXNQdXQ7CiBwcm90ZWN0ZWQ6CiAgICAgSlNUZXN0SW50ZXJm
YWNlKEpTQzo6U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3QmLCBSZWY8VGVzdEludGVyZmFj
ZT4mJik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEFuZElu
ZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIuY3BwCShyZXZpc2lvbiAyNzYzNTUpCisrKyBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0
dGVyTm9JZGVudGlmaWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjI1LDYgKzIyNSw4IEBAIGJv
b2wgSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGkKICAgICBhdXRvKiB0aGlzT2Jq
ZWN0ID0ganNDYXN0PEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllcio+KGNl
bGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsK
IAorICAgIGlmIChVTkxJS0VMWSh0aGlzT2JqZWN0ICE9IHB1dFByb3BlcnR5U2xvdC50aGlzVmFs
dWUoKSkpCisgICAgICAgIHJldHVybiBKU09iamVjdDo6cHV0KHRoaXNPYmplY3QsIGxleGljYWxH
bG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHB1dFByb3BlcnR5U2xvdCk7CiAgICAg
YXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShsZXhpY2FsR2xvYmFsT2JqZWN0
LT52bSgpKTsKIAogICAgIGlmIChhdXRvIGluZGV4ID0gcGFyc2VJbmRleChwcm9wZXJ0eU5hbWUp
KSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkQW5kSW5kZXhlZFNl
dHRlck5vSWRlbnRpZmllci5oCShyZXZpc2lvbiAyNzYzNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVu
dGlmaWVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTY0LDcgKzY0LDcgQEAgcHVibGljOgogICAgIHN0
YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pOwogICAg
IHN0YXRpYyB2b2lkIGFuYWx5emVIZWFwKEpTQ2VsbCosIEpTQzo6SGVhcEFuYWx5emVyJik7CiBw
dWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJh
c2U6OlN0cnVjdHVyZUZsYWdzIHwgSlNDOjpHZXRPd25Qcm9wZXJ0eVNsb3RJc0ltcHVyZUZvclBy
b3BlcnR5QWJzZW5jZSB8IEpTQzo6SW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhF
dmVuV2hlbkxlbmd0aElzTm90WmVybyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlOYW1l
cyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgSlNDOjpQcm9oaWJpdHNQcm9w
ZXJ0eUNhY2hpbmc7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFn
cyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSlNDOjpHZXRPd25Qcm9wZXJ0eVNsb3RJc0ltcHVy
ZUZvclByb3BlcnR5QWJzZW5jZSB8IEpTQzo6SW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5
SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVy
dHlOYW1lcyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgSlNDOjpPdmVycmlk
ZXNQdXQgfCBKU0M6OlByb2hpYml0c1Byb3BlcnR5Q2FjaGluZzsKIHByb3RlY3RlZDoKICAgICBK
U1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIoSlNDOjpTdHJ1Y3R1cmUqLCBK
U0RPTUdsb2JhbE9iamVjdCYsIFJlZjxUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGlm
aWVyPiYmKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFt
ZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24uY3BwCShyZXZpc2lvbiAyNzYzNTUp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRB
bmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
MjUsNiArMjI1LDggQEAgYm9vbCBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZwog
ICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVy
VGhyb3dpbmdFeGNlcHRpb24qPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRT
KHRoaXNPYmplY3QsIGluZm8oKSk7CiAKKyAgICBpZiAoVU5MSUtFTFkodGhpc09iamVjdCAhPSBw
dXRQcm9wZXJ0eVNsb3QudGhpc1ZhbHVlKCkpKQorICAgICAgICByZXR1cm4gSlNPYmplY3Q6OnB1
dCh0aGlzT2JqZWN0LCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBw
dXRQcm9wZXJ0eVNsb3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUobGV4aWNhbEdsb2JhbE9iamVjdC0+dm0oKSk7CiAKICAgICBpZiAoYXV0byBpbmRleCA9IHBh
cnNlSW5kZXgocHJvcGVydHlOYW1lKSkgewpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0
aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uLmgJKHJldmlz
aW9uIDI3NjM1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5oCSh3b3JraW5nIGNv
cHkpCkBAIC02NCw3ICs2NCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFj
ZSogc3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKTsKICAgICBzdGF0aWMgdm9pZCBhbmFseXpl
SGVhcChKU0NlbGwqLCBKU0M6OkhlYXBBbmFseXplciYpOwogcHVibGljOgotICAgIHN0YXRpYyBj
b25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8
IEpTQzo6R2V0T3duUHJvcGVydHlTbG90SXNJbXB1cmVGb3JQcm9wZXJ0eUFic2VuY2UgfCBKU0M6
OkludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFpl
cm8gfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5TmFtZXMgfCBKU0M6Ok92ZXJyaWRlc0dl
dE93blByb3BlcnR5U2xvdCB8IEpTQzo6UHJvaGliaXRzUHJvcGVydHlDYWNoaW5nOworICAgIHN0
YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVG
bGFncyB8IEpTQzo6R2V0T3duUHJvcGVydHlTbG90SXNJbXB1cmVGb3JQcm9wZXJ0eUFic2VuY2Ug
fCBKU0M6OkludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJ
c05vdFplcm8gfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5TmFtZXMgfCBKU0M6Ok92ZXJy
aWRlc0dldE93blByb3BlcnR5U2xvdCB8IEpTQzo6T3ZlcnJpZGVzUHV0IHwgSlNDOjpQcm9oaWJp
dHNQcm9wZXJ0eUNhY2hpbmc7CiBwcm90ZWN0ZWQ6CiAgICAgSlNUZXN0TmFtZWRBbmRJbmRleGVk
U2V0dGVyVGhyb3dpbmdFeGNlcHRpb24oSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVj
dCYsIFJlZjxUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24+JiYpOwog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFt
ZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEFuZEluZGV4ZWRT
ZXR0ZXJXaXRoSWRlbnRpZmllci5jcHAJKHJldmlzaW9uIDI3NjM1NSkKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJX
aXRoSWRlbnRpZmllci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzNiw2ICsyMzYsOCBAQCBib29s
IEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVuCiAgICAgYXV0byogdGhpc09iamVj
dCA9IGpzQ2FzdDxKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcio+KGNl
bGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsK
IAorICAgIGlmIChVTkxJS0VMWSh0aGlzT2JqZWN0ICE9IHB1dFByb3BlcnR5U2xvdC50aGlzVmFs
dWUoKSkpCisgICAgICAgIHJldHVybiBKU09iamVjdDo6cHV0KHRoaXNPYmplY3QsIGxleGljYWxH
bG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHB1dFByb3BlcnR5U2xvdCk7CiAgICAg
YXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShsZXhpY2FsR2xvYmFsT2JqZWN0
LT52bSgpKTsKIAogICAgIGlmIChhdXRvIGluZGV4ID0gcGFyc2VJbmRleChwcm9wZXJ0eU5hbWUp
KSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRBbmRJbmRleGVk
U2V0dGVyV2l0aElkZW50aWZpZXIuaAkocmV2aXNpb24gMjc2MzU1KQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldp
dGhJZGVudGlmaWVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTY0LDcgKzY0LDcgQEAgcHVibGljOgog
ICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0p
OwogICAgIHN0YXRpYyB2b2lkIGFuYWx5emVIZWFwKEpTQ2VsbCosIEpTQzo6SGVhcEFuYWx5emVy
Jik7CiBwdWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFn
cyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSlNDOjpHZXRPd25Qcm9wZXJ0eVNsb3RJc0ltcHVy
ZUZvclByb3BlcnR5QWJzZW5jZSB8IEpTQzo6SW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5
SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVy
dHlOYW1lcyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgSlNDOjpQcm9oaWJp
dHNQcm9wZXJ0eUNhY2hpbmc7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1
cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSlNDOjpHZXRPd25Qcm9wZXJ0eVNsb3RJ
c0ltcHVyZUZvclByb3BlcnR5QWJzZW5jZSB8IEpTQzo6SW50ZXJjZXB0c0dldE93blByb3BlcnR5
U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3du
UHJvcGVydHlOYW1lcyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgSlNDOjpP
dmVycmlkZXNQdXQgfCBKU0M6OlByb2hpYml0c1Byb3BlcnR5Q2FjaGluZzsKIHByb3RlY3RlZDoK
ICAgICBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcihKU0M6OlN0cnVj
dHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0JiwgUmVmPFRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJX
aXRoSWRlbnRpZmllcj4mJik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlck5vSWRlbnRpZmllci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0
dGVyTm9JZGVudGlmaWVyLmNwcAkocmV2aXNpb24gMjc2MzU1KQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjA0LDYgKzIwNCw4IEBAIGJvb2wgSlNUZXN0TmFtZWRTZXR0
ZXJOb0lkZW50aWZpZXI6OnB1dCgKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVz
dE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9J
TkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwogCisgICAgaWYgKFVOTElLRUxZKHRoaXNPYmpl
Y3QgIT0gcHV0UHJvcGVydHlTbG90LnRoaXNWYWx1ZSgpKSkKKyAgICAgICAgcmV0dXJuIEpTT2Jq
ZWN0OjpwdXQodGhpc09iamVjdCwgbGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCB2
YWx1ZSwgcHV0UHJvcGVydHlTbG90KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKGxleGljYWxHbG9iYWxPYmplY3QtPnZtKCkpOwogCiAgICAgaWYgKCFwcm9wZXJ0
eU5hbWUuaXNTeW1ib2woKSkgewpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVy
Tm9JZGVudGlmaWVyLmgJKHJldmlzaW9uIDI3NjM1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlck5vSWRlbnRpZmllci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC02NCw3ICs2NCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgSlNDOjpJc29T
dWJzcGFjZSogc3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKTsKICAgICBzdGF0aWMgdm9pZCBh
bmFseXplSGVhcChKU0NlbGwqLCBKU0M6OkhlYXBBbmFseXplciYpOwogcHVibGljOgotICAgIHN0
YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVG
bGFncyB8IEpTQzo6R2V0T3duUHJvcGVydHlTbG90SXNJbXB1cmVGb3JQcm9wZXJ0eUFic2VuY2Ug
fCBKU0M6OkludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJ
c05vdFplcm8gfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5TmFtZXMgfCBKU0M6Ok92ZXJy
aWRlc0dldE93blByb3BlcnR5U2xvdCB8IEpTQzo6UHJvaGliaXRzUHJvcGVydHlDYWNoaW5nOwor
ICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1
Y3R1cmVGbGFncyB8IEpTQzo6R2V0T3duUHJvcGVydHlTbG90SXNJbXB1cmVGb3JQcm9wZXJ0eUFi
c2VuY2UgfCBKU0M6OkludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5M
ZW5ndGhJc05vdFplcm8gfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5TmFtZXMgfCBKU0M6
Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEpTQzo6T3ZlcnJpZGVzUHV0IHwgSlNDOjpQ
cm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmc7CiBwcm90ZWN0ZWQ6CiAgICAgSlNUZXN0TmFtZWRTZXR0
ZXJOb0lkZW50aWZpZXIoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCYsIFJlZjxU
ZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXI+JiYpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlv
bi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24uY3BwCShyZXZpc2lvbiAyNzYz
NTUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFt
ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwNCw2ICsy
MDQsOCBAQCBib29sIEpTVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb246CiAgICAgYXV0
byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9u
Kj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZv
KCkpOwogCisgICAgaWYgKFVOTElLRUxZKHRoaXNPYmplY3QgIT0gcHV0UHJvcGVydHlTbG90LnRo
aXNWYWx1ZSgpKSkKKyAgICAgICAgcmV0dXJuIEpTT2JqZWN0OjpwdXQodGhpc09iamVjdCwgbGV4
aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgcHV0UHJvcGVydHlTbG90KTsK
ICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKGxleGljYWxHbG9iYWxP
YmplY3QtPnZtKCkpOwogCiAgICAgaWYgKCFwcm9wZXJ0eU5hbWUuaXNTeW1ib2woKSkgewpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0
dGVyVGhyb3dpbmdFeGNlcHRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5o
CShyZXZpc2lvbiAyNzYzNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5oCSh3b3JraW5nIGNvcHkp
CkBAIC02NCw3ICs2NCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSog
c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKTsKICAgICBzdGF0aWMgdm9pZCBhbmFseXplSGVh
cChKU0NlbGwqLCBKU0M6OkhlYXBBbmFseXplciYpOwogcHVibGljOgotICAgIHN0YXRpYyBjb25z
dGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEpT
Qzo6R2V0T3duUHJvcGVydHlTbG90SXNJbXB1cmVGb3JQcm9wZXJ0eUFic2VuY2UgfCBKU0M6Oklu
dGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8g
fCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5TmFtZXMgfCBKU0M6Ok92ZXJyaWRlc0dldE93
blByb3BlcnR5U2xvdCB8IEpTQzo6UHJvaGliaXRzUHJvcGVydHlDYWNoaW5nOworICAgIHN0YXRp
YyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFn
cyB8IEpTQzo6R2V0T3duUHJvcGVydHlTbG90SXNJbXB1cmVGb3JQcm9wZXJ0eUFic2VuY2UgfCBK
U0M6OkludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05v
dFplcm8gfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5TmFtZXMgfCBKU0M6Ok92ZXJyaWRl
c0dldE93blByb3BlcnR5U2xvdCB8IEpTQzo6T3ZlcnJpZGVzUHV0IHwgSlNDOjpQcm9oaWJpdHNQ
cm9wZXJ0eUNhY2hpbmc7CiBwcm90ZWN0ZWQ6CiAgICAgSlNUZXN0TmFtZWRTZXR0ZXJUaHJvd2lu
Z0V4Y2VwdGlvbihKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0JiwgUmVmPFRlc3RO
YW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9uPiYmKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyLmNwcAkocmV2aXNpb24gMjc2MzU1KQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0
dGVyV2l0aElkZW50aWZpZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTIsNiArMjEyLDggQEAg
Ym9vbCBKU1Rlc3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyOjpwdQogICAgIGF1dG8qIHRoaXNP
YmplY3QgPSBqc0Nhc3Q8SlNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllcio+KGNlbGwpOwog
ICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKIAorICAg
IGlmIChVTkxJS0VMWSh0aGlzT2JqZWN0ICE9IHB1dFByb3BlcnR5U2xvdC50aGlzVmFsdWUoKSkp
CisgICAgICAgIHJldHVybiBKU09iamVjdDo6cHV0KHRoaXNPYmplY3QsIGxleGljYWxHbG9iYWxP
YmplY3QsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHB1dFByb3BlcnR5U2xvdCk7CiAgICAgYXV0byB0
aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShsZXhpY2FsR2xvYmFsT2JqZWN0LT52bSgp
KTsKIAogICAgIGlmICghcHJvcGVydHlOYW1lLmlzU3ltYm9sKCkpIHsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhJZGVu
dGlmaWVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXIuaAkocmV2aXNpb24gMjc2MzU1
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVk
U2V0dGVyV2l0aElkZW50aWZpZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNjQsNyArNjQsNyBAQCBw
dWJsaWM6CiAgICAgc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6
OlZNJiB2bSk7CiAgICAgc3RhdGljIHZvaWQgYW5hbHl6ZUhlYXAoSlNDZWxsKiwgSlNDOjpIZWFw
QW5hbHl6ZXImKTsKIHB1YmxpYzoKLSAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVj
dHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBKU0M6OkdldE93blByb3BlcnR5U2xv
dElzSW1wdXJlRm9yUHJvcGVydHlBYnNlbmNlIHwgSlNDOjpJbnRlcmNlcHRzR2V0T3duUHJvcGVy
dHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgSlNDOjpPdmVycmlkZXNHZXRP
d25Qcm9wZXJ0eU5hbWVzIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBKU0M6
OlByb2hpYml0c1Byb3BlcnR5Q2FjaGluZzsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVk
IFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBKU0M6OkdldE93blByb3Bl
cnR5U2xvdElzSW1wdXJlRm9yUHJvcGVydHlBYnNlbmNlIHwgSlNDOjpJbnRlcmNlcHRzR2V0T3du
UHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgSlNDOjpPdmVycmlk
ZXNHZXRPd25Qcm9wZXJ0eU5hbWVzIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3Qg
fCBKU0M6Ok92ZXJyaWRlc1B1dCB8IEpTQzo6UHJvaGliaXRzUHJvcGVydHlDYWNoaW5nOwogcHJv
dGVjdGVkOgogICAgIEpTVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXIoSlNDOjpTdHJ1Y3R1
cmUqLCBKU0RPTUdsb2JhbE9iamVjdCYsIFJlZjxUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmll
cj4mJik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRo
SW5kZXhlZEdldHRlci5jcHAJKHJldmlzaW9uIDI3NjM1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjM2LDYgKzIzNiw4IEBAIGJvb2wgSlNUZXN0TmFtZWRT
ZXR0ZXJXaXRoSW5kZXhlZEdldHRlcjoKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpT
VGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXIqPihjZWxsKTsKICAgICBBU1NFUlRfR0Nf
T0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAKKyAgICBpZiAoVU5MSUtFTFko
dGhpc09iamVjdCAhPSBwdXRQcm9wZXJ0eVNsb3QudGhpc1ZhbHVlKCkpKQorICAgICAgICByZXR1
cm4gSlNPYmplY3Q6OnB1dCh0aGlzT2JqZWN0LCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0
eU5hbWUsIHZhbHVlLCBwdXRQcm9wZXJ0eVNsb3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUobGV4aWNhbEdsb2JhbE9iamVjdC0+dm0oKSk7CiAKICAgICBpZiAo
IXByb3BlcnR5TmFtZS5pc1N5bWJvbCgpKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyLmgJKHJldmlzaW9uIDI3NjM1NSkKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldp
dGhJbmRleGVkR2V0dGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTY0LDcgKzY0LDcgQEAgcHVibGlj
OgogICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYg
dm0pOwogICAgIHN0YXRpYyB2b2lkIGFuYWx5emVIZWFwKEpTQ2VsbCosIEpTQzo6SGVhcEFuYWx5
emVyJik7CiBwdWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVG
bGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSlNDOjpHZXRPd25Qcm9wZXJ0eVNsb3RJc0lt
cHVyZUZvclByb3BlcnR5QWJzZW5jZSB8IEpTQzo6SW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xv
dEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJv
cGVydHlOYW1lcyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgSlNDOjpQcm9o
aWJpdHNQcm9wZXJ0eUNhY2hpbmc7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1
Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSlNDOjpHZXRPd25Qcm9wZXJ0eVNs
b3RJc0ltcHVyZUZvclByb3BlcnR5QWJzZW5jZSB8IEpTQzo6SW50ZXJjZXB0c0dldE93blByb3Bl
cnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8IEpTQzo6T3ZlcnJpZGVzR2V0
T3duUHJvcGVydHlOYW1lcyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgSlND
OjpPdmVycmlkZXNQdXQgfCBKU0M6OlByb2hpYml0c1Byb3BlcnR5Q2FjaGluZzsKIHByb3RlY3Rl
ZDoKICAgICBKU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyKEpTQzo6U3RydWN0dXJl
KiwgSlNET01HbG9iYWxPYmplY3QmLCBSZWY8VGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0
ZXI+JiYpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVk
U2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXIuY3BwCShyZXZpc2lvbiAyNzYzNTUpCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0
ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzNiw2
ICsyMzYsOCBAQCBib29sIEpTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBCiAgICAg
YXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0
dGVyQW5kU2V0dGVyKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlz
T2JqZWN0LCBpbmZvKCkpOwogCisgICAgaWYgKFVOTElLRUxZKHRoaXNPYmplY3QgIT0gcHV0UHJv
cGVydHlTbG90LnRoaXNWYWx1ZSgpKSkKKyAgICAgICAgcmV0dXJuIEpTT2JqZWN0OjpwdXQodGhp
c09iamVjdCwgbGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgcHV0UHJv
cGVydHlTbG90KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKGxl
eGljYWxHbG9iYWxPYmplY3QtPnZtKCkpOwogCiAgICAgaWYgKGF1dG8gaW5kZXggPSBwYXJzZUlu
ZGV4KHByb3BlcnR5TmFtZSkpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5kU2V0dGVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXIuaAkocmV2aXNpb24gMjc2
MzU1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5h
bWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXIuaAkod29ya2luZyBjb3B5KQpAQCAt
NjQsNyArNjQsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNw
YWNlRm9ySW1wbChKU0M6OlZNJiB2bSk7CiAgICAgc3RhdGljIHZvaWQgYW5hbHl6ZUhlYXAoSlND
ZWxsKiwgSlNDOjpIZWFwQW5hbHl6ZXImKTsKIHB1YmxpYzoKLSAgICBzdGF0aWMgY29uc3RleHBy
IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBKU0M6Okdl
dE93blByb3BlcnR5U2xvdElzSW1wdXJlRm9yUHJvcGVydHlBYnNlbmNlIHwgSlNDOjpJbnRlcmNl
cHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgSlND
OjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eU5hbWVzIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9w
ZXJ0eVNsb3QgfCBKU0M6OlByb2hpYml0c1Byb3BlcnR5Q2FjaGluZzsKKyAgICBzdGF0aWMgY29u
c3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBK
U0M6OkdldE93blByb3BlcnR5U2xvdElzSW1wdXJlRm9yUHJvcGVydHlBYnNlbmNlIHwgSlNDOjpJ
bnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJv
IHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eU5hbWVzIHwgSlNDOjpPdmVycmlkZXNHZXRP
d25Qcm9wZXJ0eVNsb3QgfCBKU0M6Ok92ZXJyaWRlc1B1dCB8IEpTQzo6UHJvaGliaXRzUHJvcGVy
dHlDYWNoaW5nOwogcHJvdGVjdGVkOgogICAgIEpTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRH
ZXR0ZXJBbmRTZXR0ZXIoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCYsIFJlZjxU
ZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRlcj4mJik7CiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldp
dGhMZWdhY3lPdmVycmlkZUJ1aWx0SW5zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5T3Zl
cnJpZGVCdWlsdElucy5jcHAJKHJldmlzaW9uIDI3NjM1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lPdmVycmlk
ZUJ1aWx0SW5zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA0LDYgKzIwNCw4IEBAIGJvb2wgSlNU
ZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5T3ZlcnJpZGUKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0g
anNDYXN0PEpTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMqPihjZWxs
KTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAK
KyAgICBpZiAoVU5MSUtFTFkodGhpc09iamVjdCAhPSBwdXRQcm9wZXJ0eVNsb3QudGhpc1ZhbHVl
KCkpKQorICAgICAgICByZXR1cm4gSlNPYmplY3Q6OnB1dCh0aGlzT2JqZWN0LCBsZXhpY2FsR2xv
YmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBwdXRQcm9wZXJ0eVNsb3QpOwogICAgIGF1
dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUobGV4aWNhbEdsb2JhbE9iamVjdC0+
dm0oKSk7CiAKICAgICBpZiAoIXByb3BlcnR5TmFtZS5pc1N5bWJvbCgpKSB7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRo
TGVnYWN5T3ZlcnJpZGVCdWlsdElucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lPdmVycmlk
ZUJ1aWx0SW5zLmgJKHJldmlzaW9uIDI3NjM1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lPdmVycmlkZUJ1aWx0
SW5zLmgJKHdvcmtpbmcgY29weSkKQEAgLTY0LDcgKzY0LDcgQEAgcHVibGljOgogICAgIHN0YXRp
YyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pOwogICAgIHN0
YXRpYyB2b2lkIGFuYWx5emVIZWFwKEpTQ2VsbCosIEpTQzo6SGVhcEFuYWx5emVyJik7CiBwdWJs
aWM6Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6
OlN0cnVjdHVyZUZsYWdzIHwgSlNDOjpHZXRPd25Qcm9wZXJ0eVNsb3RJc0ltcHVyZSB8IEpTQzo6
SW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVy
byB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlOYW1lcyB8IEpTQzo6T3ZlcnJpZGVzR2V0
T3duUHJvcGVydHlTbG90IHwgSlNDOjpQcm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmc7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZs
YWdzIHwgSlNDOjpHZXRPd25Qcm9wZXJ0eVNsb3RJc0ltcHVyZSB8IEpTQzo6SW50ZXJjZXB0c0dl
dE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8IEpTQzo6T3Zl
cnJpZGVzR2V0T3duUHJvcGVydHlOYW1lcyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlT
bG90IHwgSlNDOjpPdmVycmlkZXNQdXQgfCBKU0M6OlByb2hpYml0c1Byb3BlcnR5Q2FjaGluZzsK
IHByb3RlY3RlZDoKICAgICBKU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lPdmVycmlkZUJ1aWx0
SW5zKEpTQzo6U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3QmLCBSZWY8VGVzdE5hbWVkU2V0
dGVyV2l0aExlZ2FjeU92ZXJyaWRlQnVpbHRJbnM+JiYpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5m
b3JnZWFibGVQcm9wZXJ0aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWFi
bGVQcm9wZXJ0aWVzLmNwcAkocmV2aXNpb24gMjc2MzU1KQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2Vh
YmxlUHJvcGVydGllcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzMCw2ICsyMzAsOCBAQCBib29s
IEpTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhCiAgICAgYXV0byogdGhpc09iamVj
dCA9IGpzQ2FzdDxKU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lVbmZvcmdlYWJsZVByb3BlcnRp
ZXMqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGlu
Zm8oKSk7CiAKKyAgICBpZiAoVU5MSUtFTFkodGhpc09iamVjdCAhPSBwdXRQcm9wZXJ0eVNsb3Qu
dGhpc1ZhbHVlKCkpKQorICAgICAgICByZXR1cm4gSlNPYmplY3Q6OnB1dCh0aGlzT2JqZWN0LCBs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBwdXRQcm9wZXJ0eVNsb3Qp
OwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUobGV4aWNhbEdsb2Jh
bE9iamVjdC0+dm0oKSk7CiAKICAgICBpZiAoIXByb3BlcnR5TmFtZS5pc1N5bWJvbCgpKSB7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRT
ZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0
aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllcy5oCShyZXZpc2lvbiAyNzYzNTUpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRo
TGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTY0LDcgKzY0
LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcklt
cGwoSlNDOjpWTSYgdm0pOwogICAgIHN0YXRpYyB2b2lkIGFuYWx5emVIZWFwKEpTQ2VsbCosIEpT
Qzo6SGVhcEFuYWx5emVyJik7CiBwdWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25l
ZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSlNDOjpHZXRPd25Qcm9w
ZXJ0eVNsb3RJc0ltcHVyZUZvclByb3BlcnR5QWJzZW5jZSB8IEpTQzo6SGFzU3RhdGljUHJvcGVy
dHlUYWJsZSB8IEpTQzo6SW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hl
bkxlbmd0aElzTm90WmVybyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlOYW1lcyB8IEpT
Qzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgSlNDOjpQcm9oaWJpdHNQcm9wZXJ0eUNh
Y2hpbmc7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJh
c2U6OlN0cnVjdHVyZUZsYWdzIHwgSlNDOjpHZXRPd25Qcm9wZXJ0eVNsb3RJc0ltcHVyZUZvclBy
b3BlcnR5QWJzZW5jZSB8IEpTQzo6SGFzU3RhdGljUHJvcGVydHlUYWJsZSB8IEpTQzo6SW50ZXJj
ZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8IEpT
Qzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlOYW1lcyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJv
cGVydHlTbG90IHwgSlNDOjpPdmVycmlkZXNQdXQgfCBKU0M6OlByb2hpYml0c1Byb3BlcnR5Q2Fj
aGluZzsKIHByb3RlY3RlZDoKICAgICBKU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lVbmZvcmdl
YWJsZVByb3BlcnRpZXMoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCYsIFJlZjxU
ZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVzPiYmKTsKIApJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0
dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllc0FuZExlZ2FjeU92ZXJyaWRlQnVpbHRJ
bnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lVbmZvcmdlYWJsZVByb3BlcnRpZXNBbmRM
ZWdhY3lPdmVycmlkZUJ1aWx0SW5zLmNwcAkocmV2aXNpb24gMjc2MzU1KQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2Fj
eVVuZm9yZ2VhYmxlUHJvcGVydGllc0FuZExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMzAsNiArMjMwLDggQEAgYm9vbCBKU1Rlc3ROYW1lZFNldHRlcldpdGhM
ZWdhY3lVbmZvcmdlYQogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0TmFtZWRT
ZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVzQW5kTGVnYWN5T3ZlcnJpZGVCdWls
dElucyo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwg
aW5mbygpKTsKIAorICAgIGlmIChVTkxJS0VMWSh0aGlzT2JqZWN0ICE9IHB1dFByb3BlcnR5U2xv
dC50aGlzVmFsdWUoKSkpCisgICAgICAgIHJldHVybiBKU09iamVjdDo6cHV0KHRoaXNPYmplY3Qs
IGxleGljYWxHbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHB1dFByb3BlcnR5U2xv
dCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShsZXhpY2FsR2xv
YmFsT2JqZWN0LT52bSgpKTsKIAogICAgIGlmICghcHJvcGVydHlOYW1lLmlzU3ltYm9sKCkpIHsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1l
ZFNldHRlcldpdGhMZWdhY3lVbmZvcmdlYWJsZVByb3BlcnRpZXNBbmRMZWdhY3lPdmVycmlkZUJ1
aWx0SW5zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllc0Fu
ZExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMuaAkocmV2aXNpb24gMjc2MzU1KQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2Fj
eVVuZm9yZ2VhYmxlUHJvcGVydGllc0FuZExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNjQsNyArNjQsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIEpTQzo6SXNvU3Vi
c3BhY2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSk7CiAgICAgc3RhdGljIHZvaWQgYW5h
bHl6ZUhlYXAoSlNDZWxsKiwgSlNDOjpIZWFwQW5hbHl6ZXImKTsKIHB1YmxpYzoKLSAgICBzdGF0
aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxh
Z3MgfCBKU0M6OkdldE93blByb3BlcnR5U2xvdElzSW1wdXJlIHwgSlNDOjpIYXNTdGF0aWNQcm9w
ZXJ0eVRhYmxlIHwgSlNDOjpJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5X
aGVuTGVuZ3RoSXNOb3RaZXJvIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eU5hbWVzIHwg
SlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBKU0M6OlByb2hpYml0c1Byb3BlcnR5
Q2FjaGluZzsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0g
QmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBKU0M6OkdldE93blByb3BlcnR5U2xvdElzSW1wdXJlIHwg
SlNDOjpIYXNTdGF0aWNQcm9wZXJ0eVRhYmxlIHwgSlNDOjpJbnRlcmNlcHRzR2V0T3duUHJvcGVy
dHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgSlNDOjpPdmVycmlkZXNHZXRP
d25Qcm9wZXJ0eU5hbWVzIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBKU0M6
Ok92ZXJyaWRlc1B1dCB8IEpTQzo6UHJvaGliaXRzUHJvcGVydHlDYWNoaW5nOwogcHJvdGVjdGVk
OgogICAgIEpTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllc0Fu
ZExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVj
dCYsIFJlZjxUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVzQW5k
TGVnYWN5T3ZlcnJpZGVCdWlsdElucz4mJik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RQbHVnaW5JbnRlcmZhY2UuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RQbHVnaW5J
bnRlcmZhY2UuY3BwCShyZXZpc2lvbiAyNzYzNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0UGx1Z2luSW50ZXJmYWNlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTgxLDYgKzE4MSw4IEBAIGJvb2wgSlNUZXN0UGx1Z2luSW50ZXJmYWNlOjpwdXQoSlND
ZWxsKiAKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdFBsdWdpbkludGVyZmFj
ZSo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5m
bygpKTsKIAorICAgIGlmIChVTkxJS0VMWSh0aGlzT2JqZWN0ICE9IHB1dFByb3BlcnR5U2xvdC50
aGlzVmFsdWUoKSkpCisgICAgICAgIHJldHVybiBKU09iamVjdDo6cHV0KHRoaXNPYmplY3QsIGxl
eGljYWxHbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHB1dFByb3BlcnR5U2xvdCk7
CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShsZXhpY2FsR2xvYmFs
T2JqZWN0LT52bSgpKTsKIAogICAgIGJvb2wgcHV0UmVzdWx0ID0gZmFsc2U7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0UGx1Z2luSW50ZXJmYWNl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdFBsdWdpbkludGVyZmFjZS5oCShyZXZpc2lvbiAyNzYzNTUpCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0UGx1Z2luSW50ZXJmYWNlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTY3LDcgKzY3LDcgQEAgcHVibGljOgogCiAgICAgc3RhdGljIHZvaWQg
YW5hbHl6ZUhlYXAoSlNDZWxsKiwgSlNDOjpIZWFwQW5hbHl6ZXImKTsKIHB1YmxpYzoKLSAgICBz
dGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJl
RmxhZ3MgfCBKU0M6OkludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5M
ZW5ndGhJc05vdFplcm8gfCBKU0M6Ok92ZXJyaWRlc0dldENhbGxEYXRhIHwgSlNDOjpPdmVycmlk
ZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBKU0M6OlByb2hpYml0c1Byb3BlcnR5Q2FjaGluZzsKKyAg
ICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0
dXJlRmxhZ3MgfCBKU0M6OkludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldo
ZW5MZW5ndGhJc05vdFplcm8gfCBKU0M6Ok92ZXJyaWRlc0dldENhbGxEYXRhIHwgSlNDOjpPdmVy
cmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBKU0M6Ok92ZXJyaWRlc1B1dCB8IEpTQzo6UHJvaGli
aXRzUHJvcGVydHlDYWNoaW5nOwogcHJvdGVjdGVkOgogICAgIEpTVGVzdFBsdWdpbkludGVyZmFj
ZShKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0JiwgUmVmPFRlc3RQbHVnaW5JbnRl
cmZhY2U+JiYpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcnVudGltZV9hcnJheS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX2FycmF5LmgJKHJl
dmlzaW9uIDI3NjM1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX2FycmF5LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTM1LDcgKzM1LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiBjbGFzcyBS
dW50aW1lQXJyYXkgZmluYWwgOiBwdWJsaWMgSlNBcnJheSB7CiBwdWJsaWM6CiAgICAgdXNpbmcg
QmFzZSA9IEpTQXJyYXk7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVG
bGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90
IHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlOYW1lcyB8IEludGVyY2VwdHNHZXRPd25Qcm9wZXJ0
eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm87CisgICAgc3RhdGljIGNvbnN0ZXhw
ciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJp
ZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlOYW1lcyB8IE92
ZXJyaWRlc1B1dCB8IEludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5M
ZW5ndGhJc05vdFplcm87CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzRGVzdHJ1Y3Rp
b24gPSB0cnVlOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIEpTQzo6U3Vic3Bh
Y2VBY2Nlc3M+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcnVudGltZV9vYmplY3QuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcnVudGltZV9vYmplY3QuaAkocmV2
aXNpb24gMjc2MzU1KQorKysgU291cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRpbWVfb2JqZWN0LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTM3LDcgKzM3LDcgQEAgRXhjZXB0aW9uKiB0aHJvd1J1bnRpbWVP
YmplY3RJbnZhbGlkQWNjZQogY2xhc3MgV0VCQ09SRV9FWFBPUlQgUnVudGltZU9iamVjdCA6IHB1
YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKIHB1YmxpYzoKICAgICB1c2luZyBCYXNlID0gSlNOb25G
aW5hbE9iamVjdDsKLSAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdz
ID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBP
dmVycmlkZXNHZXRPd25Qcm9wZXJ0eU5hbWVzIHwgT3ZlcnJpZGVzR2V0Q2FsbERhdGEgfCBHZXRP
d25Qcm9wZXJ0eVNsb3RNYXlCZVdyb25nQWJvdXREb250RW51bTsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBPdmVy
cmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eU5hbWVzIHwg
T3ZlcnJpZGVzR2V0Q2FsbERhdGEgfCBPdmVycmlkZXNQdXQgfCBHZXRPd25Qcm9wZXJ0eVNsb3RN
YXlCZVdyb25nQWJvdXREb250RW51bTsKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNE
ZXN0cnVjdGlvbiA9IHRydWU7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgSlND
OjpTdWJzcGFjZUFjY2Vzcz4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9vYmpjL29iamNf
cnVudGltZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9vYmpjL29iamNf
cnVudGltZS5oCShyZXZpc2lvbiAyNzYzNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvb2Jq
Yy9vYmpjX3J1bnRpbWUuaAkod29ya2luZyBjb3B5KQpAQCAtOTEsNyArOTEsNyBAQCBwcml2YXRl
OgogY2xhc3MgT2JqY0ZhbGxiYWNrT2JqZWN0SW1wIGZpbmFsIDogcHVibGljIEpTRGVzdHJ1Y3Rp
YmxlT2JqZWN0IHsKIHB1YmxpYzoKICAgICB1c2luZyBCYXNlID0gSlNEZXN0cnVjdGlibGVPYmpl
Y3Q7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6
OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVz
R2V0Q2FsbERhdGE7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFn
cyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwg
T3ZlcnJpZGVzR2V0Q2FsbERhdGEgfCBPdmVycmlkZXNQdXQ7CiAgICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
Q2VsbFR5cGUsIEpTQzo6U3Vic3BhY2VBY2Nlc3M+CkluZGV4OiBTb3VyY2UvV2ViS2l0L0NoYW5n
ZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwkocmV2aXNpb24gMjc2
MzU1KQorKysgU291cmNlL1dlYktpdC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyAr
MSwxMiBAQAorMjAyMS0wNC0yMSAgQWxleGV5IFNodmF5a2EgIDxzaHZhaWthbGVzaEBnbWFpbC5j
b20+CisKKyAgICAgICAgW0pTQ10gT3JkaW5hcnlTZXQgc2hvdWxkIGludm9rZSBjdXN0b20gW1tT
ZXRdXSBtZXRob2RzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yMTc5MTYKKworICAgICAgICBSZXZpZXdlZCBieSBZdXN1a2UgU3V6dWtpLgorCisgICAg
ICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL0pTTlBPYmplY3QuaDoKKwogMjAyMS0w
NC0yMSAgUGhpbGlwcGUgTm9ybWFuZCAgPHBub3JtYW5kQGlnYWxpYS5jb20+CiAKICAgICAgICAg
VW5yZXZpZXdlZCwgV1BFIENvZyBidWlsZCBmaXggYWZ0ZXIgcjI3NjMxNgpJbmRleDogU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvSlNOUE9iamVjdC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL0pTTlBPYmpl
Y3QuaAkocmV2aXNpb24gMjc2MzU1KQorKysgU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdp
bnMvTmV0c2NhcGUvSlNOUE9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCw3ICs0NCw3IEBA
IGNsYXNzIE5QUnVudGltZU9iamVjdE1hcDsKIGNsYXNzIEpTTlBPYmplY3QgZmluYWwgOiBwdWJs
aWMgSlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCB7CiBwdWJsaWM6CiAgICAgdXNpbmcgQmFzZSA9
IEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3Q7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25l
ZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSlNDOjpPdmVycmlkZXNH
ZXRPd25Qcm9wZXJ0eVNsb3QgfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5TmFtZXMgfCBK
U0M6Ok92ZXJyaWRlc0dldENhbGxEYXRhIHwgSlNDOjpHZXRPd25Qcm9wZXJ0eVNsb3RNYXlCZVdy
b25nQWJvdXREb250RW51bTsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVy
ZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3Bl
cnR5U2xvdCB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlOYW1lcyB8IEpTQzo6T3ZlcnJp
ZGVzR2V0Q2FsbERhdGEgfCBKU0M6Ok92ZXJyaWRlc1B1dCB8IEpTQzo6R2V0T3duUHJvcGVydHlT
bG90TWF5QmVXcm9uZ0Fib3V0RG9udEVudW07CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxs
VHlwZSwgSlNDOjpTdWJzcGFjZUFjY2Vzcz4KICAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSog
c3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNzYzNTUpCisrKyBM
YXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNSBAQAorMjAy
MS0wNC0yMSAgQWxleGV5IFNodmF5a2EgIDxzaHZhaWthbGVzaEBnbWFpbC5jb20+CisKKyAgICAg
ICAgW0pTQ10gT3JkaW5hcnlTZXQgc2hvdWxkIGludm9rZSBjdXN0b20gW1tTZXRdXSBtZXRob2Rz
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTc5MTYK
KworICAgICAgICBSZXZpZXdlZCBieSBZdXN1a2UgU3V6dWtpLgorCisgICAgICAgICogaHR0cC90
ZXN0cy9zZWN1cml0eS9jcm9zcy1mcmFtZS1hY2Nlc3Mtb2JqZWN0LWdldFByb3RvdHlwZU9mLWlu
LXB1dC1leHBlY3RlZC50eHQ6CisgICAgICAgICogaHR0cC90ZXN0cy9zZWN1cml0eS9jcm9zcy1m
cmFtZS1hY2Nlc3Mtb2JqZWN0LWdldFByb3RvdHlwZU9mLWluLXB1dC5odG1sOgorICAgICAgICAq
IGpzL2RvbS9yZWZsZWN0LXNldC1vbnRvLWRvbS1leHBlY3RlZC50eHQ6CisgICAgICAgICoganMv
ZG9tL3NjcmlwdC10ZXN0cy9yZWZsZWN0LXNldC1vbnRvLWRvbS5qczoKKwogMjAyMS0wNC0yMSAg
TWFydGluIFJvYmluc29uICA8bXJvYmluc29uQHdlYmtpdC5vcmc+CiAKICAgICAgICAgQWRkIGJh
c2ljIChub24tbW9tZW50dW0pIHdoZWVsIGV2ZW50IGhhbmRsaW5nIGZvciBzY3JvbGwgc25hcApJ
bmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS9jcm9zcy1mcmFtZS1hY2Nlc3Mt
b2JqZWN0LWdldFByb3RvdHlwZU9mLWluLXB1dC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS9jcm9zcy1mcmFtZS1hY2Nlc3Mtb2JqZWN0
LWdldFByb3RvdHlwZU9mLWluLXB1dC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDI3NjM1NSkKKysr
IExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkvY3Jvc3MtZnJhbWUtYWNjZXNzLW9iamVj
dC1nZXRQcm90b3R5cGVPZi1pbi1wdXQtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNyBAQAogVGhpcyB0ZXN0cyB0aGF0IHlvdSBjYW4ndCBnZXQgdGhlIHByb3RvdHlwZSBv
ZiB0aGUgd2luZG93IGR1cmluZyBbW1B1dF1dIG9wZXJhdGlvbi4KIAorUEFTUyBhcnJheS5jb2Nv
YSA9IGNvY29hVmFsdWUgdGhyZXcgZXhjZXB0aW9uIFNlY3VyaXR5RXJyb3I6IEJsb2NrZWQgYSBm
cmFtZSB3aXRoIG9yaWdpbiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiBmcm9tIGFjY2Vzc2luZyBh
IGNyb3NzLW9yaWdpbiBmcmFtZS4gUHJvdG9jb2xzLCBkb21haW5zLCBhbmQgcG9ydHMgbXVzdCBt
YXRjaC4uCitQQVNTICdzdHInLmNvY29hID0gY29jb2FWYWx1ZSB0aHJldyBleGNlcHRpb24gU2Vj
dXJpdHlFcnJvcjogQmxvY2tlZCBhIGZyYW1lIHdpdGggb3JpZ2luICJodHRwOi8vMTI3LjAuMC4x
OjgwMDAiIGZyb20gYWNjZXNzaW5nIGEgY3Jvc3Mtb3JpZ2luIGZyYW1lLiBQcm90b2NvbHMsIGRv
bWFpbnMsIGFuZCBwb3J0cyBtdXN0IG1hdGNoLi4KIFBBU1M6IHN1Y2Nlc3NmdWxseVBhcnNlZCBz
aG91bGQgYmUgJ3RydWUnIGFuZCBpcy4KIAogVEVTVCBDT01QTEVURQpJbmRleDogTGF5b3V0VGVz
dHMvaHR0cC90ZXN0cy9zZWN1cml0eS9jcm9zcy1mcmFtZS1hY2Nlc3Mtb2JqZWN0LWdldFByb3Rv
dHlwZU9mLWluLXB1dC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMv
c2VjdXJpdHkvY3Jvc3MtZnJhbWUtYWNjZXNzLW9iamVjdC1nZXRQcm90b3R5cGVPZi1pbi1wdXQu
aHRtbAkocmV2aXNpb24gMjc2MzU1KQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0
eS9jcm9zcy1mcmFtZS1hY2Nlc3Mtb2JqZWN0LWdldFByb3RvdHlwZU9mLWluLXB1dC5odG1sCSh3
b3JraW5nIGNvcHkpCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgICAgIGRvVGVzdCA9IGZ1bmN0aW9u
KCkKICAgICAgICAgewogICAgICAgICAgICAgdGFyZ2V0V2luZG93ID0gZG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoInRhcmdldCIpLmNvbnRlbnRXaW5kb3c7Ci0gICAgICAgICAgICB2YXIgYXJyYXkg
PSBbXTsKKyAgICAgICAgICAgIGFycmF5ID0gW107CiAgICAgICAgICAgICBhcnJheS5fX3Byb3Rv
X18uX19wcm90b19fID0gdGFyZ2V0V2luZG93OwogICAgICAgICAgICAgYXJyYXlbMF0gPSAxMS4x
MTsKICAgICAgICAgICAgIGFycmF5WzJdID0gMjIuMjI7CkBAIC0yNCwxMSArMjQsMTUgQEAKICAg
ICAgICAgICAgICAgICAgICAgdGVzdEZhaWxlZCgidG9TdHJpbmcgaXMgY2FsbGVkIGJ5IDEwMTAx
MDEwIHNldHRlciIpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH07Ci0gICAgICAg
ICAgICBhcnJheVsiY29jb2EiXSA9IHsKKyAgICAgICAgICAgIGNvY29hVmFsdWUgPSB7CiAgICAg
ICAgICAgICAgICAgdG9TdHJpbmcoKSB7CiAgICAgICAgICAgICAgICAgICAgIHRlc3RGYWlsZWQo
InRvU3RyaW5nIGlzIGNhbGxlZCBieSBjb2NvYSBzZXR0ZXIiKTsKICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICB9OworICAgICAgICAgICAgc2hvdWxkVGhyb3dFcnJvck5hbWUoImFycmF5
LmNvY29hID0gY29jb2FWYWx1ZSIsICJTZWN1cml0eUVycm9yIik7CisKKyAgICAgICAgICAgIE9i
amVjdC5zZXRQcm90b3R5cGVPZihTdHJpbmcucHJvdG90eXBlLCB0YXJnZXRXaW5kb3cpOworICAg
ICAgICAgICAgc2hvdWxkVGhyb3dFcnJvck5hbWUoIidzdHInLmNvY29hID0gY29jb2FWYWx1ZSIs
ICJTZWN1cml0eUVycm9yIik7CiAgICAgICAgICAgICBmaW5pc2hKU1Rlc3QoKTsKICAgICAgICAg
fQogICAgIDwvc2NyaXB0PgpJbmRleDogTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL0NoYW5nZUxv
Zwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9pbXBvcnRlZC93M2MvQ2hhbmdlTG9nCShyZXZp
c2lvbiAyNzYzNTUpCisrKyBMYXlvdXRUZXN0cy9pbXBvcnRlZC93M2MvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMTUgQEAKKzIwMjEtMDQtMjEgIEFsZXhleSBTaHZheWthICA8
c2h2YWlrYWxlc2hAZ21haWwuY29tPgorCisgICAgICAgIFtKU0NdIE9yZGluYXJ5U2V0IHNob3Vs
ZCBpbnZva2UgY3VzdG9tIFtbU2V0XV0gbWV0aG9kcworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE3OTE2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgWXVz
dWtlIFN1enVraS4KKworICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9XZWJJREwvZWNtYXNj
cmlwdC1iaW5kaW5nL2ludGVyZmFjZS1vYmplY3Qtc2V0LXJlY2VpdmVyLWV4cGVjdGVkLnR4dDog
QWRkZWQuCisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL1dlYklETC9lY21hc2NyaXB0LWJp
bmRpbmcvaW50ZXJmYWNlLW9iamVjdC1zZXQtcmVjZWl2ZXIuaHRtbDogQWRkZWQuCisgICAgICAg
ICogd2ViLXBsYXRmb3JtLXRlc3RzL1dlYklETC9lY21hc2NyaXB0LWJpbmRpbmcvaW50ZXJmYWNl
LXByb3RvdHlwZS1jb25zdHJ1Y3Rvci1zZXQtcmVjZWl2ZXItZXhwZWN0ZWQudHh0OgorICAgICAg
ICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9XZWJJREwvZWNtYXNjcmlwdC1iaW5kaW5nL2ludGVyZmFj
ZS1wcm90b3R5cGUtY29uc3RydWN0b3Itc2V0LXJlY2VpdmVyLmh0bWw6CisKIDIwMjEtMDQtMjEg
IE1hbnVlbCBSZWdvIENhc2Fzbm92YXMgIDxyZWdvQGlnYWxpYS5jb20+CiAKICAgICAgICAgW3Nl
bGVjdG9yc10gSW1wb3J0IG9uZSBtb3JlIDpmb2N1cy12aXNpYmxlIFdQVCB0ZXN0CkluZGV4OiBM
YXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL1dlYklETC9lY21hc2Ny
aXB0LWJpbmRpbmcvaW50ZXJmYWNlLW9iamVjdC1zZXQtcmVjZWl2ZXItZXhwZWN0ZWQudHh0Cj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMv
V2ViSURML2VjbWFzY3JpcHQtYmluZGluZy9pbnRlcmZhY2Utb2JqZWN0LXNldC1yZWNlaXZlci1l
eHBlY3RlZC50eHQJKG5vbmV4aXN0ZW50KQorKysgTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dl
Yi1wbGF0Zm9ybS10ZXN0cy9XZWJJREwvZWNtYXNjcmlwdC1iaW5kaW5nL2ludGVyZmFjZS1vYmpl
Y3Qtc2V0LXJlY2VpdmVyLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQg
QEAKKworUEFTUyBEaXJlY3QgW1tTZXRdXSBwcmVzZXJ2ZXMgW1tFbnVtZXJhYmxlXV06IGZhbHNl
IHByb3BlcnR5IGF0dHJpYnV0ZQorUEFTUyBQcm90b3R5cGUgY2hhaW4gW1tTZXRdXSBjcmVhdGVz
IHByb3BlcnR5IG9uIHJlY2VpdmVyCisKSW5kZXg6IExheW91dFRlc3RzL2ltcG9ydGVkL3czYy93
ZWItcGxhdGZvcm0tdGVzdHMvV2ViSURML2VjbWFzY3JpcHQtYmluZGluZy9pbnRlcmZhY2Utb2Jq
ZWN0LXNldC1yZWNlaXZlci5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2ltcG9ydGVk
L3czYy93ZWItcGxhdGZvcm0tdGVzdHMvV2ViSURML2VjbWFzY3JpcHQtYmluZGluZy9pbnRlcmZh
Y2Utb2JqZWN0LXNldC1yZWNlaXZlci5odG1sCShub25leGlzdGVudCkKKysrIExheW91dFRlc3Rz
L2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvV2ViSURML2VjbWFzY3JpcHQtYmluZGlu
Zy9pbnRlcmZhY2Utb2JqZWN0LXNldC1yZWNlaXZlci5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMzcgQEAKKzwhRE9DVFlQRSBodG1sPgorPG1ldGEgY2hhcnNldD0idXRmLTgiPgorPHRp
dGxlPndpbmRvdy5JbnRlcmZhY2UgaXMgZGVmaW5lZCBvbiBbW1NldF1dIHJlY2VpdmVyPC90aXRs
ZT4KKzxsaW5rIHJlbD0iaGVscCIgaHJlZj0iaHR0cHM6Ly9oZXljYW0uZ2l0aHViLmlvL3dlYmlk
bC8jZGVmaW5lLXRoZS1nbG9iYWwtcHJvcGVydHktcmVmZXJlbmNlcyI+Cis8c2NyaXB0IHNyYz0i
L3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iL3Jlc291
cmNlcy90ZXN0aGFybmVzc3JlcG9ydC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgorInVzZSBzdHJp
Y3QiOworY29uc3QgdGVzdFZhbHVlID0gT2JqZWN0LmZyZWV6ZShmdW5jdGlvbigpIHt9KTsKKwor
dGVzdCgoKSA9PiB7CisgIHdpbmRvdy5XaW5kb3cgPSB0ZXN0VmFsdWU7CisgIGFzc2VydF9mYWxz
ZSh3aW5kb3cucHJvcGVydHlJc0VudW1lcmFibGUoIldpbmRvdyIpKTsKKworICB3aW5kb3cuSGlz
dG9yeSA9IHRlc3RWYWx1ZTsKKyAgYXNzZXJ0X2ZhbHNlKHdpbmRvdy5wcm9wZXJ0eUlzRW51bWVy
YWJsZSgiSGlzdG9yeSIpKTsKKworICB3aW5kb3cuSFRNTERpdkVsZW1lbnQgPSB0ZXN0VmFsdWU7
CisgIGFzc2VydF9mYWxzZSh3aW5kb3cucHJvcGVydHlJc0VudW1lcmFibGUoIkhUTUxEaXZFbGVt
ZW50IikpCit9LCAiRGlyZWN0IFtbU2V0XV0gcHJlc2VydmVzIFtbRW51bWVyYWJsZV1dOiBmYWxz
ZSBwcm9wZXJ0eSBhdHRyaWJ1dGUiKTsKKwordGVzdCgoKSA9PiB7CisgIGNvbnN0IGhlaXIgPSBP
YmplY3QuY3JlYXRlKHdpbmRvdyk7CisKKyAgaGVpci5Mb2NhdGlvbiA9IHRlc3RWYWx1ZTsKKyAg
YXNzZXJ0X2VxdWFscyhoZWlyLkxvY2F0aW9uLCB0ZXN0VmFsdWUpOworICBhc3NlcnRfbm90X2Vx
dWFscyh3aW5kb3cuTG9jYXRpb24sIHRlc3RWYWx1ZSk7CisKKyAgaGVpci5IVE1MRG9jdW1lbnQg
PSB0ZXN0VmFsdWU7CisgIGFzc2VydF9lcXVhbHMoaGVpci5IVE1MRG9jdW1lbnQsIHRlc3RWYWx1
ZSk7CisgIGFzc2VydF9ub3RfZXF1YWxzKHdpbmRvdy5IVE1MRG9jdW1lbnQsIHRlc3RWYWx1ZSk7
CisKKyAgaGVpci5IVE1MUHJlRWxlbWVudCA9IHRlc3RWYWx1ZTsKKyAgYXNzZXJ0X2VxdWFscyho
ZWlyLkhUTUxQcmVFbGVtZW50LCB0ZXN0VmFsdWUpOworICBhc3NlcnRfbm90X2VxdWFscyh3aW5k
b3cuSFRNTFByZUVsZW1lbnQsIHRlc3RWYWx1ZSk7Cit9LCAiUHJvdG90eXBlIGNoYWluIFtbU2V0
XV0gY3JlYXRlcyBwcm9wZXJ0eSBvbiByZWNlaXZlciIpOworPC9zY3JpcHQ+CkluZGV4OiBMYXlv
dXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL1dlYklETC9lY21hc2NyaXB0
LWJpbmRpbmcvaW50ZXJmYWNlLXByb3RvdHlwZS1jb25zdHJ1Y3Rvci1zZXQtcmVjZWl2ZXItZXhw
ZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxh
dGZvcm0tdGVzdHMvV2ViSURML2VjbWFzY3JpcHQtYmluZGluZy9pbnRlcmZhY2UtcHJvdG90eXBl
LWNvbnN0cnVjdG9yLXNldC1yZWNlaXZlci1leHBlY3RlZC50eHQJKHJldmlzaW9uIDI3NjM1NSkK
KysrIExheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvV2ViSURML2Vj
bWFzY3JpcHQtYmluZGluZy9pbnRlcmZhY2UtcHJvdG90eXBlLWNvbnN0cnVjdG9yLXNldC1yZWNl
aXZlci1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTEsNCArMSw0IEBACiAKLVBBU1Mg
V2luZG93LCBMb2NhdGlvbiwgTmF2aWdhdG9yLCBIVE1MRG9jdW1lbnQsIGFuZCBIVE1MSGVhZEVs
ZW1lbnQKLVBBU1MgQWxsIHdpbmRvdy4qIGNvbnN0cnVjdG9ycworUEFTUyBEaXJlY3QgW1tTZXRd
XSBwcmVzZXJ2ZXMgW1tFbnVtZXJhYmxlXV06IGZhbHNlIHByb3BlcnR5IGF0dHJpYnV0ZQorUEFT
UyBQcm90b3R5cGUgY2hhaW4gW1tTZXRdXSBjcmVhdGVzIHByb3BlcnR5IG9uIHJlY2VpdmVyCiAK
SW5kZXg6IExheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvV2ViSURM
L2VjbWFzY3JpcHQtYmluZGluZy9pbnRlcmZhY2UtcHJvdG90eXBlLWNvbnN0cnVjdG9yLXNldC1y
ZWNlaXZlci5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWIt
cGxhdGZvcm0tdGVzdHMvV2ViSURML2VjbWFzY3JpcHQtYmluZGluZy9pbnRlcmZhY2UtcHJvdG90
eXBlLWNvbnN0cnVjdG9yLXNldC1yZWNlaXZlci5odG1sCShyZXZpc2lvbiAyNzYzNTUpCisrKyBM
YXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL1dlYklETC9lY21hc2Ny
aXB0LWJpbmRpbmcvaW50ZXJmYWNlLXByb3RvdHlwZS1jb25zdHJ1Y3Rvci1zZXQtcmVjZWl2ZXIu
aHRtbAkod29ya2luZyBjb3B5KQpAQCAtNiw0MiArNiwzMSBAQAogPHNjcmlwdCBzcmM9Ii9yZXNv
dXJjZXMvdGVzdGhhcm5lc3NyZXBvcnQuanMiPjwvc2NyaXB0PgogPHNjcmlwdD4KICJ1c2Ugc3Ry
aWN0IjsKK2NvbnN0IHRlc3RWYWx1ZSA9IE9iamVjdC5mcmVlemUoZnVuY3Rpb24oKSB7fSk7CiAK
IHRlc3QoKCkgPT4gewotICB3aW5kb3cuY29uc3RydWN0b3IgPSBudWxsOwotICBhc3NlcnRfZXF1
YWxzKFdpbmRvdy5wcm90b3R5cGUuY29uc3RydWN0b3IsIFdpbmRvdyk7Ci0KLSAgbG9jYXRpb24u
Y29uc3RydWN0b3IgPSBmYWxzZTsKLSAgYXNzZXJ0X2VxdWFscyhMb2NhdGlvbi5wcm90b3R5cGUu
Y29uc3RydWN0b3IsIExvY2F0aW9uKTsKLQotICBuYXZpZ2F0b3IuY29uc3RydWN0b3IgPSAxOwot
ICBhc3NlcnRfZXF1YWxzKE5hdmlnYXRvci5wcm90b3R5cGUuY29uc3RydWN0b3IsIE5hdmlnYXRv
cik7CisgIExvY2F0aW9uLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IHRlc3RWYWx1ZTsKKyAgYXNz
ZXJ0X2ZhbHNlKExvY2F0aW9uLnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZSgiY29uc3Ry
dWN0b3IiKSk7CiAKLSAgZG9jdW1lbnQuY29uc3RydWN0b3IgPSB7fTsKLSAgYXNzZXJ0X2VxdWFs
cyhIVE1MRG9jdW1lbnQucHJvdG90eXBlLmNvbnN0cnVjdG9yLCBIVE1MRG9jdW1lbnQpOworICBI
VE1MRG9jdW1lbnQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gdGVzdFZhbHVlOworICBhc3NlcnRf
ZmFsc2UoSFRNTERvY3VtZW50LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZSgiY29uc3Ry
dWN0b3IiKSk7CiAKLSAgZG9jdW1lbnQuaGVhZC5jb25zdHJ1Y3RvciA9IFtdOwotICBhc3NlcnRf
ZXF1YWxzKEhUTUxIZWFkRWxlbWVudC5wcm90b3R5cGUuY29uc3RydWN0b3IsIEhUTUxIZWFkRWxl
bWVudCk7Ci19LCAiV2luZG93LCBMb2NhdGlvbiwgTmF2aWdhdG9yLCBIVE1MRG9jdW1lbnQsIGFu
ZCBIVE1MSGVhZEVsZW1lbnQiKTsKKyAgSFRNTERpdkVsZW1lbnQucHJvdG90eXBlLmNvbnN0cnVj
dG9yID0gdGVzdFZhbHVlOworICBhc3NlcnRfZmFsc2UoSFRNTERpdkVsZW1lbnQucHJvdG90eXBl
LnByb3BlcnR5SXNFbnVtZXJhYmxlKCJjb25zdHJ1Y3RvciIpKTsKK30sICJEaXJlY3QgW1tTZXRd
XSBwcmVzZXJ2ZXMgW1tFbnVtZXJhYmxlXV06IGZhbHNlIHByb3BlcnR5IGF0dHJpYnV0ZSIpOwog
CiB0ZXN0KCgpID0+IHsKLSAgZm9yIChsZXQga2V5IG9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5h
bWVzKHdpbmRvdykpIHsKLSAgICBpZiAoIS9eW0EtWl0vLnRlc3Qoa2V5KSkgY29udGludWU7Cisg
IHdpbmRvdy5jb25zdHJ1Y3RvciA9IHRlc3RWYWx1ZTsKKyAgYXNzZXJ0X2VxdWFscyh3aW5kb3cu
Y29uc3RydWN0b3IsIHRlc3RWYWx1ZSk7CisgIGFzc2VydF9lcXVhbHMoV2luZG93LnByb3RvdHlw
ZS5jb25zdHJ1Y3RvciwgV2luZG93KTsKKworICBuYXZpZ2F0b3IuY29uc3RydWN0b3IgPSB0ZXN0
VmFsdWU7CisgIGFzc2VydF9lcXVhbHMobmF2aWdhdG9yLmNvbnN0cnVjdG9yLCB0ZXN0VmFsdWUp
OworICBhc3NlcnRfZXF1YWxzKE5hdmlnYXRvci5wcm90b3R5cGUuY29uc3RydWN0b3IsIE5hdmln
YXRvcik7CiAKLSAgICBsZXQgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Io
d2luZG93LCBrZXkpOwotICAgIGlmICghZGVzYyB8fCBkZXNjLmVudW1lcmFibGUpIGNvbnRpbnVl
OwotICAgIGxldCB7dmFsdWV9ID0gZGVzYzsKLSAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAiZnVu
Y3Rpb24iKSBjb250aW51ZTsKLSAgICBsZXQge3Byb3RvdHlwZX0gPSB2YWx1ZTsKLSAgICBpZiAo
IXByb3RvdHlwZSkgY29udGludWU7Ci0KLSAgICBsZXQgaGVpciA9IE9iamVjdC5jcmVhdGUocHJv
dG90eXBlKTsKLSAgICBsZXQgbmV3Q29uc3RydWN0b3IgPSBmdW5jdGlvbigpIHt9OwotICAgIGhl
aXIuY29uc3RydWN0b3IgPSBuZXdDb25zdHJ1Y3RvcjsKLQotICAgIGFzc2VydF9ub3RfZXF1YWxz
KHByb3RvdHlwZS5jb25zdHJ1Y3RvciwgbmV3Q29uc3RydWN0b3IsIGtleSk7Ci0gICAgYXNzZXJ0
X293bl9wcm9wZXJ0eShoZWlyLCAiY29uc3RydWN0b3IiLCBrZXkpOwotICAgIGFzc2VydF9lcXVh
bHMoaGVpci5jb25zdHJ1Y3RvciwgbmV3Q29uc3RydWN0b3IsIGtleSk7Ci0gIH0KLX0sICJBbGwg
d2luZG93LiogY29uc3RydWN0b3JzIik7CisgIGNvbnN0IHNwYW4gPSBkb2N1bWVudC5jcmVhdGVF
bGVtZW50KCJzcGFuIik7CisgIHNwYW4uY29uc3RydWN0b3IgPSB0ZXN0VmFsdWU7CisgIGFzc2Vy
dF9lcXVhbHMoc3Bhbi5jb25zdHJ1Y3RvciwgdGVzdFZhbHVlKTsKKyAgYXNzZXJ0X2VxdWFscyhI
VE1MU3BhbkVsZW1lbnQucHJvdG90eXBlLmNvbnN0cnVjdG9yLCBIVE1MU3BhbkVsZW1lbnQpOwor
fSwgIlByb3RvdHlwZSBjaGFpbiBbW1NldF1dIGNyZWF0ZXMgcHJvcGVydHkgb24gcmVjZWl2ZXIi
KTsKIDwvc2NyaXB0PgpJbmRleDogTGF5b3V0VGVzdHMvanMvZG9tL3JlZmxlY3Qtc2V0LW9udG8t
ZG9tLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9kb20vcmVmbGVj
dC1zZXQtb250by1kb20tZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAyNzYzNTUpCisrKyBMYXlvdXRU
ZXN0cy9qcy9kb20vcmVmbGVjdC1zZXQtb250by1kb20tZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNv
cHkpCkBAIC05MywxMyArOTMsMTMgQEAgUEFTUyBSZWZsZWN0LmdldChkb2N1bWVudC5ib2R5LmRh
dGFzZXQsIAogUEFTUyBSZWZsZWN0LnNldChkb2N1bWVudC5ib2R5LmRhdGFzZXQsICJjb2NvYS1j
YXBwdWNjaW5vIiwgInN3ZWV0IikgdGhyZXcgZXhjZXB0aW9uIFN5bnRheEVycm9yOiBUaGUgc3Ry
aW5nIGRpZCBub3QgbWF0Y2ggdGhlIGV4cGVjdGVkIHBhdHRlcm4uLgogUEFTUyBSZWZsZWN0LnNl
dChkb2N1bWVudC5ib2R5LmRhdGFzZXQsIDAsICJzd2VldCIpIGlzIHRydWUKIFBBU1MgUmVmbGVj
dC5nZXQoZG9jdW1lbnQuYm9keS5kYXRhc2V0LCAwKSBpcyAic3dlZXQiCi1ET01TdHJpbmdNYXAg
aWdub3JlcyB0aGUgcmVjZWl2ZXIuIFRoZXNlIHB1dERlbGVnYXRlIG9ubHkgd29yayB3aXRoIDo6
cHV0IChub3QgOjpkZWZpbmVPd25Qcm9wZXJ0eSkuIFNvIHRoZXkgYmVoYXZlIGFzIHRoZSBzcGVj
aWFsIHNldHRlciwgd2Ugc2hvdWxkIG5vdCBmYWxsYmFjayB0byB0aGUgT3JkaW5hcnlTZXQuCitE
T01TdHJpbmdNYXAgZmFsbHMgYmFjayB0byBPcmRpbmFyeVNldCBpZiByZWNlaXZlciBpcyBhbHRl
cmVkLgogUEFTUyBSZWZsZWN0LnNldChkb2N1bWVudC5ib2R5LmRhdGFzZXQsICJjb2NvYSIsICJv
ayIsIHJlY2VpdmVyKSBpcyB0cnVlCi1QQVNTIFJlZmxlY3QuZ2V0KGRvY3VtZW50LmJvZHkuZGF0
YXNldCwgImNvY29hIikgaXMgIm9rIgotUEFTUyBSZWZsZWN0LmdldChyZWNlaXZlciwgImNvY29h
IikgaXMgdW5kZWZpbmVkCitQQVNTIFJlZmxlY3QuZ2V0KGRvY3VtZW50LmJvZHkuZGF0YXNldCwg
ImNvY29hIikgaXMgInN3ZWV0IgorUEFTUyBSZWZsZWN0LmdldChyZWNlaXZlciwgImNvY29hIikg
aXMgIm9rIgogUEFTUyBSZWZsZWN0LnNldChkb2N1bWVudC5ib2R5LmRhdGFzZXQsIDAsICJvayIs
IHJlY2VpdmVyKSBpcyB0cnVlCi1QQVNTIFJlZmxlY3QuZ2V0KGRvY3VtZW50LmJvZHkuZGF0YXNl
dCwgMCkgaXMgIm9rIgotUEFTUyBSZWZsZWN0LmdldChyZWNlaXZlciwgMCkgaXMgdW5kZWZpbmVk
CitQQVNTIFJlZmxlY3QuZ2V0KGRvY3VtZW50LmJvZHkuZGF0YXNldCwgMCkgaXMgInN3ZWV0Igor
UEFTUyBSZWZsZWN0LmdldChyZWNlaXZlciwgMCkgaXMgIm9rIgogQ3VzdG9tSW5kZXhlZFNldHRl
cgogUEFTUyBSZWZsZWN0LmdldChzZWxlY3QsIDApLnZhbHVlIGlzICJjb2NvYSIKIFBBU1MgUmVm
bGVjdC5nZXQoc2VsZWN0LCAibGVuZ3RoIikgaXMgMwpAQCAtMTExLDEwICsxMTEsMTAgQEAgUEFT
UyBSZWZsZWN0LmdldChzZWxlY3QsICJsZW5ndGgiKSBpcyA0MgogUEFTUyBSZWZsZWN0LnNldChz
ZWxlY3QsIDQ0LCBvcHRpb24yKSBpcyB0cnVlCiBQQVNTIFJlZmxlY3QuZ2V0KHNlbGVjdCwgNDQp
LnZhbHVlIGlzICJraWxpbWFuamFybyIKIFBBU1MgUmVmbGVjdC5zZXQoc2VsZWN0LCAyMCwgIktp
bGltYW5qYXJvIikgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogVHlwZSBlcnJvci4KLUN1c3Rv
bUluZGV4ZWRTZXR0ZXIgaWdub3JlcyB0aGUgcmVjZWl2ZXIuIFRoZXNlIG1ldGhvZHMgb25seSB3
b3JrIHdpdGggOjpwdXQgKG5vdCA6OmRlZmluZU93blByb3BlcnR5KS4gU28gdGhleSBiZWhhdmUg
YXMgdGhlIHNwZWNpYWwgc2V0dGVyLCB3ZSBzaG91bGQgbm90IGZhbGxiYWNrIHRvIHRoZSBPcmRp
bmFyeVNldC4KK0N1c3RvbUluZGV4ZWRTZXR0ZXIgZmFsbHMgYmFjayB0byBPcmRpbmFyeVNldCBp
ZiByZWNlaXZlciBpcyBhbHRlcmVkLgogUEFTUyBSZWZsZWN0LnNldChzZWxlY3QsIDAsIG9wdGlv
bjMsIHJlY2VpdmVyKSBpcyB0cnVlCi1QQVNTIFJlZmxlY3QuZ2V0KHJlY2VpdmVyLCAwKSBpcyB1
bmRlZmluZWQKLVBBU1MgUmVmbGVjdC5nZXQoc2VsZWN0LCAwKSBpcyBvcHRpb24zCitQQVNTIFJl
ZmxlY3QuZ2V0KHJlY2VpdmVyLCAwKSBpcyBvcHRpb24zCitQQVNTIFJlZmxlY3QuZ2V0KHNlbGVj
dCwgMCkgaXMgc2VsZWN0LmNoaWxkcmVuWzBdCiBQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0
cnVlCiAKIFRFU1QgQ09NUExFVEUKSW5kZXg6IExheW91dFRlc3RzL2pzL2RvbS9zY3JpcHQtdGVz
dHMvcmVmbGVjdC1zZXQtb250by1kb20uanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMv
ZG9tL3NjcmlwdC10ZXN0cy9yZWZsZWN0LXNldC1vbnRvLWRvbS5qcwkocmV2aXNpb24gMjc2MzU1
KQorKysgTGF5b3V0VGVzdHMvanMvZG9tL3NjcmlwdC10ZXN0cy9yZWZsZWN0LXNldC1vbnRvLWRv
bS5qcwkod29ya2luZyBjb3B5KQpAQCAtMTE2LDE1ICsxMTYsMTUgQEAgc2hvdWxkVGhyb3coYFJl
ZmxlY3Quc2V0KGRvY3VtZW50LmJvZHkuZAogc2hvdWxkQmUoYFJlZmxlY3Quc2V0KGRvY3VtZW50
LmJvZHkuZGF0YXNldCwgMCwgInN3ZWV0IilgLCBgdHJ1ZWApOwogc2hvdWxkQmUoYFJlZmxlY3Qu
Z2V0KGRvY3VtZW50LmJvZHkuZGF0YXNldCwgMClgLCBgInN3ZWV0ImApOwogCi1kZWJ1ZygiRE9N
U3RyaW5nTWFwIGlnbm9yZXMgdGhlIHJlY2VpdmVyLiBUaGVzZSBwdXREZWxlZ2F0ZSBvbmx5IHdv
cmsgd2l0aCA6OnB1dCAobm90IDo6ZGVmaW5lT3duUHJvcGVydHkpLiBTbyB0aGV5IGJlaGF2ZSBh
cyB0aGUgc3BlY2lhbCBzZXR0ZXIsIHdlIHNob3VsZCBub3QgZmFsbGJhY2sgdG8gdGhlIE9yZGlu
YXJ5U2V0LiIpOworZGVidWcoIkRPTVN0cmluZ01hcCBmYWxscyBiYWNrIHRvIE9yZGluYXJ5U2V0
IGlmIHJlY2VpdmVyIGlzIGFsdGVyZWQuIik7CiB2YXIgcmVjZWl2ZXIgPSB7fTsKIHNob3VsZEJl
KGBSZWZsZWN0LnNldChkb2N1bWVudC5ib2R5LmRhdGFzZXQsICJjb2NvYSIsICJvayIsIHJlY2Vp
dmVyKWAsIGB0cnVlYCk7Ci1zaG91bGRCZShgUmVmbGVjdC5nZXQoZG9jdW1lbnQuYm9keS5kYXRh
c2V0LCAiY29jb2EiKWAsIGAib2siYCk7Ci1zaG91bGRCZShgUmVmbGVjdC5nZXQocmVjZWl2ZXIs
ICJjb2NvYSIpYCwgYHVuZGVmaW5lZGApOworc2hvdWxkQmUoYFJlZmxlY3QuZ2V0KGRvY3VtZW50
LmJvZHkuZGF0YXNldCwgImNvY29hIilgLCBgInN3ZWV0ImApOworc2hvdWxkQmUoYFJlZmxlY3Qu
Z2V0KHJlY2VpdmVyLCAiY29jb2EiKWAsIGAib2siYCk7CiB2YXIgcmVjZWl2ZXIgPSB7fTsKIHNo
b3VsZEJlKGBSZWZsZWN0LnNldChkb2N1bWVudC5ib2R5LmRhdGFzZXQsIDAsICJvayIsIHJlY2Vp
dmVyKWAsIGB0cnVlYCk7Ci1zaG91bGRCZShgUmVmbGVjdC5nZXQoZG9jdW1lbnQuYm9keS5kYXRh
c2V0LCAwKWAsIGAib2siYCk7Ci1zaG91bGRCZShgUmVmbGVjdC5nZXQocmVjZWl2ZXIsIDApYCwg
YHVuZGVmaW5lZGApOworc2hvdWxkQmUoYFJlZmxlY3QuZ2V0KGRvY3VtZW50LmJvZHkuZGF0YXNl
dCwgMClgLCBgInN3ZWV0ImApOworc2hvdWxkQmUoYFJlZmxlY3QuZ2V0KHJlY2VpdmVyLCAwKWAs
IGAib2siYCk7CiAKIGRlYnVnKCJDdXN0b21JbmRleGVkU2V0dGVyIik7CiB2YXIgc2VsZWN0ID0g
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRlc3RTZWxlY3QiKTsKQEAgLTE0NiwxMSArMTQ2LDEx
IEBAIHNob3VsZEJlKGBSZWZsZWN0LnNldChzZWxlY3QsIDQ0LCBvcHRpb24KIHNob3VsZEJlKGBS
ZWZsZWN0LmdldChzZWxlY3QsIDQ0KS52YWx1ZWAsIGAia2lsaW1hbmphcm8iYCk7CiBzaG91bGRU
aHJvdyhgUmVmbGVjdC5zZXQoc2VsZWN0LCAyMCwgIktpbGltYW5qYXJvIilgKTsKIAotZGVidWco
IkN1c3RvbUluZGV4ZWRTZXR0ZXIgaWdub3JlcyB0aGUgcmVjZWl2ZXIuIFRoZXNlIG1ldGhvZHMg
b25seSB3b3JrIHdpdGggOjpwdXQgKG5vdCA6OmRlZmluZU93blByb3BlcnR5KS4gU28gdGhleSBi
ZWhhdmUgYXMgdGhlIHNwZWNpYWwgc2V0dGVyLCB3ZSBzaG91bGQgbm90IGZhbGxiYWNrIHRvIHRo
ZSBPcmRpbmFyeVNldC4iKTsKK2RlYnVnKCJDdXN0b21JbmRleGVkU2V0dGVyIGZhbGxzIGJhY2sg
dG8gT3JkaW5hcnlTZXQgaWYgcmVjZWl2ZXIgaXMgYWx0ZXJlZC4iKTsKIHZhciBvcHRpb24zID0g
ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgib3B0aW9uIik7CiBvcHRpb24zLnZhbHVlID0gInJhYmJp
dCI7CiBvcHRpb24zLnRleHRDb250ZW50ID0gIlJhYmJpdCI7CiB2YXIgcmVjZWl2ZXIgPSB7fTsK
IHNob3VsZEJlKGBSZWZsZWN0LnNldChzZWxlY3QsIDAsIG9wdGlvbjMsIHJlY2VpdmVyKWAsIGB0
cnVlYCk7Ci1zaG91bGRCZShgUmVmbGVjdC5nZXQocmVjZWl2ZXIsIDApYCwgYHVuZGVmaW5lZGAp
Owotc2hvdWxkQmUoYFJlZmxlY3QuZ2V0KHNlbGVjdCwgMClgLCBgb3B0aW9uM2ApOworc2hvdWxk
QmUoYFJlZmxlY3QuZ2V0KHJlY2VpdmVyLCAwKWAsIGBvcHRpb24zYCk7CitzaG91bGRCZShgUmVm
bGVjdC5nZXQoc2VsZWN0LCAwKWAsIGBzZWxlY3QuY2hpbGRyZW5bMF1gKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>426914</attachid>
            <date>2021-04-23 09:10:07 -0700</date>
            <delta_ts>2021-04-26 04:05:36 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-217916-20210423191003.patch</filename>
            <type>text/plain</type>
            <size>182826</size>
            <attacher name="Alexey Shvayka">ashvayka</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyNzY0OTkpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDI1IEBACisyMDIxLTA0LTIzICBBbGV4ZXkgU2h2YXlrYSAgPHNodmFpa2FsZXNo
QGdtYWlsLmNvbT4KKworICAgICAgICBbSlNDXSBPcmRpbmFyeVNldCBzaG91bGQgaW52b2tlIGN1
c3RvbSBbW1NldF1dIG1ldGhvZHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIxNzkxNgorCisgICAgICAgIFJldmlld2VkIGJ5IFl1c3VrZSBTdXp1a2ku
CisKKyAgICAgICAgKiBtaWNyb2JlbmNobWFya3MvcHV0LXNsb3ctbm8tY2FjaGUtYXJyYXkuanM6
IEFkZGVkLgorICAgICAgICAqIG1pY3JvYmVuY2htYXJrcy9wdXQtc2xvdy1uby1jYWNoZS1mdW5j
dGlvbi5qczogQWRkZWQuCisgICAgICAgICogbWljcm9iZW5jaG1hcmtzL3B1dC1zbG93LW5vLWNh
Y2hlLWpzLXByb3h5LmpzOiBBZGRlZC4KKyAgICAgICAgKiBtaWNyb2JlbmNobWFya3MvcHV0LXNs
b3ctbm8tY2FjaGUtbG9uZy1wcm90b3R5cGUtY2hhaW4uanM6IEFkZGVkLgorICAgICAgICAqIG1p
Y3JvYmVuY2htYXJrcy9wdXQtc2xvdy1uby1jYWNoZS5qczogQWRkZWQuCisgICAgICAgICogbWlj
cm9iZW5jaG1hcmtzL3JlZmxlY3Qtc2V0LXdpdGgtcmVjZWl2ZXIuanM6IEFkZGVkLgorICAgICAg
ICAqIHN0cmVzcy9jdXN0b20tZ2V0LXNldC1wcm90by1jaGFpbi1wdXQuanM6CisgICAgICAgICog
c3RyZXNzL21vZHVsZS1uYW1lc3BhY2UtYWNjZXNzLXNldC1mYWlscy5qczogQWRkZWQuCisgICAg
ICAgICogc3RyZXNzL3B1dC1ub24tcmVpZmllZC1zdGF0aWMtYWNjZXNzb3Itb3ItY3VzdG9tLmpz
OiBBZGRlZC4KKyAgICAgICAgKiBzdHJlc3MvcHV0LW5vbi1yZWlmaWVkLXN0YXRpYy1mdW5jdGlv
bi1vci1jdXN0b20uanM6IEFkZGVkLgorICAgICAgICAqIHN0cmVzcy9wdXQtdG8tcHJpbWl0aXZl
LW5vbi1yZWlmaWVkLXN0YXRpYy1jdXN0b20uanM6IEFkZGVkLgorICAgICAgICAqIHN0cmVzcy9w
dXQtdG8tcHJpbWl0aXZlLmpzOiBBZGRlZC4KKyAgICAgICAgKiBzdHJlc3MvcHV0LXRvLXByb3Rv
LWNoYWluLW92ZXJyaWRlcy1wdXQuanM6IEFkZGVkLgorICAgICAgICAqIHN0cmVzcy90eXBlZC1h
cnJheS1jYW5vbmljYWwtbnVtZXJpYy1pbmRleC1zdHJpbmctc2V0LmpzOiBBZGRlZC4KKwogMjAy
MS0wNC0yMiAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29tPgogCiAgICAgICAgIFtK
U0NdIEJhc2VsaW5lIHNob3VsZCBoYXZlIGZhc3QgcGF0aCBmb3Igc3dpdGNoX2ltbQpJbmRleDog
SlNUZXN0cy9taWNyb2JlbmNobWFya3MvcHV0LXNsb3ctbm8tY2FjaGUtYXJyYXkuanMKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gSlNUZXN0cy9taWNyb2JlbmNobWFya3MvcHV0LXNsb3ctbm8tY2FjaGUtYXJyYXku
anMJKG5vbmV4aXN0ZW50KQorKysgSlNUZXN0cy9taWNyb2JlbmNobWFya3MvcHV0LXNsb3ctbm8t
Y2FjaGUtYXJyYXkuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2IEBACisoZnVuY3Rpb24o
KSB7CisgICAgdmFyIGFycmF5ID0gW107CisKKyAgICBmb3IgKHZhciBqID0gMDsgaiA8IDFlNTsg
aisrKQorICAgICAgICBhcnJheVsiZm9vIiArIGpdID0gajsKK30pKCk7CkluZGV4OiBKU1Rlc3Rz
L21pY3JvYmVuY2htYXJrcy9wdXQtc2xvdy1uby1jYWNoZS1mdW5jdGlvbi5qcwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBKU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9wdXQtc2xvdy1uby1jYWNoZS1mdW5jdGlvbi5q
cwkobm9uZXhpc3RlbnQpCisrKyBKU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9wdXQtc2xvdy1uby1j
YWNoZS1mdW5jdGlvbi5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDggQEAKKyhmdW5jdGlv
bigpIHsKKyAgICBjbGFzcyBBIHt9CisgICAgY2xhc3MgQiBleHRlbmRzIEEge30KKyAgICBjbGFz
cyBDIGV4dGVuZHMgQiB7fQorCisgICAgZm9yICh2YXIgaiA9IDA7IGogPCAxZTU7IGorKykKKyAg
ICAgICAgQ1siZm9vIiArIGpdID0gajsKK30pKCk7CkluZGV4OiBKU1Rlc3RzL21pY3JvYmVuY2ht
YXJrcy9wdXQtc2xvdy1uby1jYWNoZS1qcy1wcm94eS5qcwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3Rz
L21pY3JvYmVuY2htYXJrcy9wdXQtc2xvdy1uby1jYWNoZS1qcy1wcm94eS5qcwkobm9uZXhpc3Rl
bnQpCisrKyBKU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9wdXQtc2xvdy1uby1jYWNoZS1qcy1wcm94
eS5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYgQEAKKyhmdW5jdGlvbigpIHsKKyAgICB2
YXIgcHJveHkgPSAkdm0uY3JlYXRlUHJveHkoeyBzZXQgZm9vKF92KSB7fSB9KTsKKworICAgIGZv
ciAodmFyIGogPSAwOyBqIDwgMWU1OyBqKyspCisgICAgICAgIHByb3h5WyJmb28iICsgal0gPSBq
OworfSkoKTsKSW5kZXg6IEpTVGVzdHMvbWljcm9iZW5jaG1hcmtzL3B1dC1zbG93LW5vLWNhY2hl
LWxvbmctcHJvdG90eXBlLWNoYWluLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvbWljcm9iZW5j
aG1hcmtzL3B1dC1zbG93LW5vLWNhY2hlLWxvbmctcHJvdG90eXBlLWNoYWluLmpzCShub25leGlz
dGVudCkKKysrIEpTVGVzdHMvbWljcm9iZW5jaG1hcmtzL3B1dC1zbG93LW5vLWNhY2hlLWxvbmct
cHJvdG90eXBlLWNoYWluLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOCBAQAorKGZ1bmN0
aW9uKCkgeworICAgIHZhciBiYXNlID0geyBzZXQgZm9vKF92KSB7fSB9OworICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgMWUzOyBpKyspCisgICAgICAgIGJhc2UgPSBPYmplY3QuY3JlYXRlKGJhc2Up
OworCisgICAgZm9yICh2YXIgaiA9IDA7IGogPCAzZTM7IGorKykKKyAgICAgICAgYmFzZVsiZm9v
IiArIGpdID0gajsKK30pKCk7CkluZGV4OiBKU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9wdXQtc2xv
dy1uby1jYWNoZS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9wdXQt
c2xvdy1uby1jYWNoZS5qcwkobm9uZXhpc3RlbnQpCisrKyBKU1Rlc3RzL21pY3JvYmVuY2htYXJr
cy9wdXQtc2xvdy1uby1jYWNoZS5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYgQEAKKyhm
dW5jdGlvbigpIHsKKyAgICB2YXIgYmFzZSA9IHsgc2V0IGZvbyhfdikge30gfTsKKworICAgIGZv
ciAodmFyIGogPSAwOyBqIDwgMWU1OyBqKyspCisgICAgICAgIGJhc2VbImZvbyIgKyBqXSA9IGo7
Cit9KSgpOwpJbmRleDogSlNUZXN0cy9taWNyb2JlbmNobWFya3MvcmVmbGVjdC1zZXQtd2l0aC1y
ZWNlaXZlci5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9yZWZsZWN0
LXNldC13aXRoLXJlY2VpdmVyLmpzCShub25leGlzdGVudCkKKysrIEpTVGVzdHMvbWljcm9iZW5j
aG1hcmtzL3JlZmxlY3Qtc2V0LXdpdGgtcmVjZWl2ZXIuanMJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw2IEBACisoZnVuY3Rpb24oKSB7CisgICAgdmFyIHRhcmdldCA9IG5ldyAoY2xhc3Mge30p
OworCisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxZTY7IGkrKykKKyAgICAgICAgUmVmbGVjdC5z
ZXQodGFyZ2V0LCAiZm9vIiwgMSwge30pOworfSkoKTsKSW5kZXg6IEpTVGVzdHMvc3RyZXNzL2N1
c3RvbS1nZXQtc2V0LXByb3RvLWNoYWluLXB1dC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0
cmVzcy9jdXN0b20tZ2V0LXNldC1wcm90by1jaGFpbi1wdXQuanMJKHJldmlzaW9uIDI3NjQ5OSkK
KysrIEpTVGVzdHMvc3RyZXNzL2N1c3RvbS1nZXQtc2V0LXByb3RvLWNoYWluLXB1dC5qcwkod29y
a2luZyBjb3B5KQpAQCAtMzcsOCArMzcsOCBAQCBmdW5jdGlvbiBnZXRPYmplY3RzKCkgewogICAg
ICAgICAuLi5wcmltaXRpdmVzLm1hcChPYmplY3QpLAogICAgICAgICBPYmplY3QuY3JlYXRlKGN1
c3RvbVRlc3RHZXR0ZXJTZXR0ZXIpLAogICAgICAgICBPYmplY3QuY3JlYXRlKE9iamVjdC5jcmVh
dGUoY3VzdG9tVGVzdEdldHRlclNldHRlcikpLAotICAgICAgICAvLyBGSVhNRTogb3JkaW5hcnlT
ZXRTbG93KCkgc2hvdWxkIGhhbmRsZSBDdXN0b217QWNjZXNzb3IsVmFsdWV9IGRlc2NyaXB0b3Jz
LgotICAgICAgICAvLyBuZXcgUHJveHkoY3VzdG9tVGVzdEdldHRlclNldHRlciwge30pLAorICAg
ICAgICBPYmplY3QuY3JlYXRlKG5ldyBQcm94eShjdXN0b21UZXN0R2V0dGVyU2V0dGVyLCB7fSkp
LAorICAgICAgICBPYmplY3QuY3JlYXRlKCR2bS5jcmVhdGVQcm94eShjdXN0b21UZXN0R2V0dGVy
U2V0dGVyKSksCiAgICAgXTsKIH0KIApAQCAtODUsMTMgKzg1LDEzIEBAIGZ1bmN0aW9uIGdldEJh
c2VzKCkgewogfSkoKTsKIAogLy8gQ3VzdG9tVmFsdWU6IHNldHRlciByZXR1cm5zIHxmYWxzZXwK
Ky8vIEZJWE1FOiBPbmNlIGxlZ2FjeSBSZWdFeHAgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkLCB0
aGVyZSB3b3VsZCBiZSBubyB1c2UgY2FzZSBmb3IgY2FsbGluZyBDdXN0b21WYWx1ZSBzZXR0ZXIg
aWYgcmVjZWl2ZXIgaXMgYWx0ZXJlZC4KICgoKSA9PiB7CiAgICAgZm9yIChsZXQgYmFzZSBvZiBn
ZXRCYXNlcygpKSB7CiAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTAwOyArK2kpCiAgICAg
ICAgICAgICBiYXNlLmN1c3RvbVZhbHVlID0gMTsKLSAgICAgICAgLy8gVGhpcyBpcyB3ZWlyZCwg
YnV0IGl0IGlzbid0IGV4cG9zZWQgdG8gdXNlcmxhbmQgY29kZToKICAgICAgICAgYXNzZXJ0KCFi
YXNlLmhhc093blByb3BlcnR5KCJjdXN0b21WYWx1ZSIpKTsKLSAgICAgICAgYXNzZXJ0KCFSZWZs
ZWN0LnNldChPYmplY3QoYmFzZSksICJjdXN0b21WYWx1ZSIsIDEpKTsKKyAgICAgICAgYXNzZXJ0
KFJlZmxlY3Quc2V0KE9iamVjdChiYXNlKSwgImN1c3RvbVZhbHVlIiwgMSkpOwogICAgIH0KIH0p
KCk7CiAKSW5kZXg6IEpTVGVzdHMvc3RyZXNzL21vZHVsZS1uYW1lc3BhY2UtYWNjZXNzLXNldC1m
YWlscy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0cmVzcy9tb2R1bGUtbmFtZXNwYWNlLWFj
Y2Vzcy1zZXQtZmFpbHMuanMJKG5vbmV4aXN0ZW50KQorKysgSlNUZXN0cy9zdHJlc3MvbW9kdWxl
LW5hbWVzcGFjZS1hY2Nlc3Mtc2V0LWZhaWxzLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
OTAgQEAKK2NvbnN0IGV4aXN0aW5nS2V5cyA9IFsiY29jb2EiLCAidGVzdCIsIFN5bWJvbC50b1N0
cmluZ1RhZ107Citjb25zdCBub25FeGlzdGluZ0tleXMgPSBbImZvbyIsIFN5bWJvbCgiZm9vIild
OworY29uc3QgYWxsS2V5cyA9IFsuLi5leGlzdGluZ0tleXMsIC4uLm5vbkV4aXN0aW5nS2V5c107
Citjb25zdCB0ZXN0VmFsdWUgPSBPYmplY3QuZnJlZXplKHt9KTsKKworZnVuY3Rpb24gYXNzZXJ0
KHgsIGtleSkgeworICAgIGlmICgheCkKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBCYWQgYXNz
ZXJ0aW9uISBLZXk6ICR7U3RyaW5nKGtleSl9YCk7Cit9CisKK2Z1bmN0aW9uIHNob3VsZFRocm93
KGZ1bmMsIGVycm9yTWVzc2FnZSkgeworICAgIGxldCBlcnJvclRocm93biA9IGZhbHNlOworICAg
IHRyeSB7CisgICAgICAgIGZ1bmMoKTsKKyAgICB9IGNhdGNoIChlcnJvcikgeworICAgICAgICBl
cnJvclRocm93biA9IHRydWU7CisgICAgICAgIGlmIChTdHJpbmcoZXJyb3IpICE9PSBlcnJvck1l
c3NhZ2UpCisgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEJhZCBlcnJvcjogJHtlcnJvcn1g
KTsKKyAgICB9CisgICAgaWYgKCFlcnJvclRocm93bikKKyAgICAgICAgdGhyb3cgbmV3IEVycm9y
KCJEaWRuJ3QgdGhyb3chIik7Cit9CisKK2Z1bmN0aW9uIHRlc3REaXJlY3RTZXQobnMpIHsKKyAg
ICBmb3IgKGNvbnN0IGtleSBvZiBhbGxLZXlzKSB7CisgICAgICAgIG5zW2tleV0gPSB0ZXN0VmFs
dWU7CisgICAgICAgIGFzc2VydChuc1trZXldICE9PSB0ZXN0VmFsdWUsIGtleSk7CisKKyAgICAg
ICAgc2hvdWxkVGhyb3coKCkgPT4geyAidXNlIHN0cmljdCI7IG5zW2tleV0gPSB0ZXN0VmFsdWU7
IH0sICJUeXBlRXJyb3I6IEF0dGVtcHRlZCB0byBhc3NpZ24gdG8gcmVhZG9ubHkgcHJvcGVydHku
Iik7CisgICAgICAgIGFzc2VydChuc1trZXldICE9PSB0ZXN0VmFsdWUsIGtleSk7CisgICAgfQor
fQorCitmdW5jdGlvbiB0ZXN0UHJvdG90eXBlQ2hhaW5TZXQobnMpIHsKKyAgICBmb3IgKGNvbnN0
IGtleSBvZiBhbGxLZXlzKSB7CisgICAgICAgIGNvbnN0IGhlaXIgPSBPYmplY3QuY3JlYXRlKG5z
KTsKKworICAgICAgICBoZWlyW2tleV0gPSB0ZXN0VmFsdWU7CisgICAgICAgIGFzc2VydChPYmpl
Y3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGhlaXIsIGtleSkgPT09IHVuZGVmaW5lZCwga2V5
KTsKKworICAgICAgICBzaG91bGRUaHJvdygoKSA9PiB7ICJ1c2Ugc3RyaWN0IjsgaGVpcltrZXld
ID0gdGVzdFZhbHVlOyB9LCAiVHlwZUVycm9yOiBBdHRlbXB0ZWQgdG8gYXNzaWduIHRvIHJlYWRv
bmx5IHByb3BlcnR5LiIpOworICAgICAgICBhc3NlcnQoT2JqZWN0LmdldE93blByb3BlcnR5RGVz
Y3JpcHRvcihoZWlyLCBrZXkpID09PSB1bmRlZmluZWQsIGtleSk7CisgICAgfQorfQorCitmdW5j
dGlvbiB0ZXN0UmVmbGVjdFNldChucykgeworICAgICJ1c2Ugc3RyaWN0IjsKKworICAgIGZvciAo
Y29uc3QgZXhpc3RpbmdLZXkgb2YgZXhpc3RpbmdLZXlzKSB7CisgICAgICAgIGFzc2VydCghUmVm
bGVjdC5zZXQobnMsIGV4aXN0aW5nS2V5LCB0ZXN0VmFsdWUpLCBleGlzdGluZ0tleSk7CisKKyAg
ICAgICAgY29uc3QgdGFyZ2V0ID0ge307CisgICAgICAgIGFzc2VydCghUmVmbGVjdC5zZXQodGFy
Z2V0LCBleGlzdGluZ0tleSwgdGVzdFZhbHVlLCBucyksIGV4aXN0aW5nS2V5KTsKKworICAgICAg
ICBjb25zdCBpc1dyaXRhYmxlID0gZXhpc3RpbmdLZXkgIT09IFN5bWJvbC50b1N0cmluZ1RhZzsK
KyAgICAgICAgYXNzZXJ0KFJlZmxlY3Quc2V0KHRhcmdldCwgZXhpc3RpbmdLZXksIG5zW2V4aXN0
aW5nS2V5XSwgbnMpID09PSBpc1dyaXRhYmxlLCBleGlzdGluZ0tleSk7CisKKyAgICAgICAgYXNz
ZXJ0KG5zW2V4aXN0aW5nS2V5XSAhPT0gdGVzdFZhbHVlLCBleGlzdGluZ0tleSk7CisgICAgICAg
IGFzc2VydCh0YXJnZXRbZXhpc3RpbmdLZXldID09PSB1bmRlZmluZWQsIGV4aXN0aW5nS2V5KTsK
KyAgICB9CisKKyAgICBmb3IgKGNvbnN0IG5vbkV4aXN0aW5nS2V5IG9mIG5vbkV4aXN0aW5nS2V5
cykgeworICAgICAgICBhc3NlcnQoIVJlZmxlY3Quc2V0KG5zLCBub25FeGlzdGluZ0tleSwgdGVz
dFZhbHVlKSwgbm9uRXhpc3RpbmdLZXkpOworICAgICAgICBhc3NlcnQobnNbbm9uRXhpc3RpbmdL
ZXldID09PSB1bmRlZmluZWQsIG5vbkV4aXN0aW5nS2V5KTsKKworICAgICAgICBjb25zdCB0YXJn
ZXQgPSB7fTsKKyAgICAgICAgYXNzZXJ0KCFSZWZsZWN0LnNldCh0YXJnZXQsIG5vbkV4aXN0aW5n
S2V5LCB0ZXN0VmFsdWUsIG5zKSwgbm9uRXhpc3RpbmdLZXkpOworICAgICAgICBhc3NlcnQodGFy
Z2V0W25vbkV4aXN0aW5nS2V5XSA9PT0gdW5kZWZpbmVkLCBub25FeGlzdGluZ0tleSk7CisgICAg
fQorCisgICAgZm9yIChjb25zdCBrZXkgb2YgYWxsS2V5cykgeworICAgICAgICBjb25zdCB0YXJn
ZXQgPSBPYmplY3QuY3JlYXRlKG5zKTsKKyAgICAgICAgY29uc3QgcmVjZWl2ZXIgPSB7fTsKKwor
ICAgICAgICBhc3NlcnQoIVJlZmxlY3Quc2V0KHRhcmdldCwga2V5LCB0ZXN0VmFsdWUsIHJlY2Vp
dmVyKSwga2V5KTsKKyAgICAgICAgYXNzZXJ0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0
b3IodGFyZ2V0LCBrZXkpID09PSB1bmRlZmluZWQsIGtleSk7CisgICAgICAgIGFzc2VydChPYmpl
Y3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHJlY2VpdmVyLCBrZXkpID09PSB1bmRlZmluZWQs
IGtleSk7CisgICAgfQorfQorCitpbXBvcnQoIi4vcmVzb3VyY2VzL21vZHVsZS1uYW1lc3BhY2Ut
YWNjZXNzLmpzIikudGhlbihucyA9PiB7CisgICAgdGVzdERpcmVjdFNldChucyk7CisgICAgdGVz
dFByb3RvdHlwZUNoYWluU2V0KG5zKTsKKyAgICB0ZXN0UmVmbGVjdFNldChucyk7Cit9KS5jYXRj
aChlcnIgPT4geworICAgIHByaW50KGAhISEgJHtlcnJ9XG4ke2Vyci5zdGFja31gKTsKKyAgICAk
dm0uYWJvcnQoKTsKK30pOworCitkcmFpbk1pY3JvdGFza3MoKTsKSW5kZXg6IEpTVGVzdHMvc3Ry
ZXNzL3B1dC1ub24tcmVpZmllZC1zdGF0aWMtYWNjZXNzb3Itb3ItY3VzdG9tLmpzCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIEpTVGVzdHMvc3RyZXNzL3B1dC1ub24tcmVpZmllZC1zdGF0aWMtYWNjZXNzb3Itb3It
Y3VzdG9tLmpzCShub25leGlzdGVudCkKKysrIEpTVGVzdHMvc3RyZXNzL3B1dC1ub24tcmVpZmll
ZC1zdGF0aWMtYWNjZXNzb3Itb3ItY3VzdG9tLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NTggQEAKKyJ1c2Ugc3RyaWN0IjsKK2NvbnN0IHRlc3RWYWx1ZSA9IE9iamVjdC5mcmVlemUoe30p
OworCitmdW5jdGlvbiBhc3NlcnQoeCwga2V5KSB7CisgICAgaWYgKCF4KQorICAgICAgICB0aHJv
dyBuZXcgRXJyb3IoYEtleTogIiR7a2V5fSIuIEJhZCBhc3NlcnRpb24hYCk7Cit9CisKK2Z1bmN0
aW9uKiB0ZXN0Q2FzZXMoKSB7CisgICAgZm9yIChjb25zdCBrZXkgb2YgWyJkZXNjcmlwdGlvbiJd
KQorICAgICAgICB5aWVsZCBbJHZtLmNyZWF0ZUdsb2JhbE9iamVjdCgpLlN5bWJvbC5wcm90b3R5
cGUsIGtleV07CisgICAgZm9yIChjb25zdCBrZXkgb2YgWyJidWZmZXIiLCAiYnl0ZUxlbmd0aCIs
ICJieXRlT2Zmc2V0Il0pCisgICAgICAgIHlpZWxkIFskdm0uY3JlYXRlR2xvYmFsT2JqZWN0KCku
RGF0YVZpZXcucHJvdG90eXBlLCBrZXldOworICAgIGZvciAoY29uc3Qga2V5IG9mIFsiYmFzZU5h
bWUiLCAiY2FzZUZpcnN0IiwgImhvdXJDeWNsZSIsICJudW1lcmljIiwgInJlZ2lvbiJdKQorICAg
ICAgICB5aWVsZCBbJHZtLmNyZWF0ZUdsb2JhbE9iamVjdCgpLkludGwuTG9jYWxlLnByb3RvdHlw
ZSwga2V5XTsKKworICAgIGZvciAoY29uc3Qga2V5IG9mIFsidGVzdFN0YXRpY0FjY2Vzc29yIiwg
InRlc3RTdGF0aWNBY2Nlc3NvclJlYWRPbmx5Il0pCisgICAgICAgIHlpZWxkIFskdm0uY3JlYXRl
U3RhdGljQ3VzdG9tQWNjZXNzb3IoKSwga2V5XTsKKyAgICB5aWVsZCBbJHZtLmNyZWF0ZVN0YXRp
Y0N1c3RvbVZhbHVlKCksICJ0ZXN0U3RhdGljVmFsdWVSZWFkT25seSJdOworfQorCitmb3IgKGNv
bnN0IFtvYmplY3QsIGtleV0gb2YgdGVzdENhc2VzKCkpIHsKKyAgICBjb25zdCB0YXJnZXQgPSB7
fTsKKyAgICBhc3NlcnQoIVJlZmxlY3Quc2V0KHRhcmdldCwga2V5LCB0ZXN0VmFsdWUsIG9iamVj
dCksIGtleSk7CisgICAgYXNzZXJ0KCF0YXJnZXQuaGFzT3duUHJvcGVydHkoa2V5KSwga2V5KTsK
KyAgICBhc3NlcnQoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIGtleSku
dmFsdWUgIT09IHRlc3RWYWx1ZSwga2V5KTsKK30KKworZm9yIChjb25zdCBbb2JqZWN0LCBrZXld
IG9mIHRlc3RDYXNlcygpKSB7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iamVjdCwga2V5
LCB7IHZhbHVlOiB7fSwgd3JpdGFibGU6IGZhbHNlIH0pOworICAgIGNvbnN0IHRhcmdldCA9IHt9
OworICAgIGFzc2VydCghUmVmbGVjdC5zZXQodGFyZ2V0LCBrZXksIHRlc3RWYWx1ZSwgb2JqZWN0
KSwga2V5KTsKKyAgICBhc3NlcnQoIXRhcmdldC5oYXNPd25Qcm9wZXJ0eShrZXkpLCBrZXkpOwor
ICAgIGFzc2VydChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwga2V5KS52
YWx1ZSAhPT0gdGVzdFZhbHVlLCBrZXkpOworfQorCitmb3IgKGNvbnN0IFtvYmplY3QsIGtleV0g
b2YgdGVzdENhc2VzKCkpIHsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqZWN0LCBrZXks
IHsgdmFsdWU6IHt9LCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiBmYWxzZSB9KTsKKyAg
ICBvYmplY3Rba2V5XSA9IHRlc3RWYWx1ZTsKKworICAgIGNvbnN0IGRlc2MgPSBPYmplY3QuZ2V0
T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwga2V5KTsKKyAgICBhc3NlcnQoZGVzYy52YWx1
ZSA9PT0gdGVzdFZhbHVlLCBrZXkpOworICAgIGFzc2VydChkZXNjLndyaXRhYmxlLCBrZXkpOwor
ICAgIGFzc2VydCghZGVzYy5lbnVtZXJhYmxlLCBrZXkpOworICAgIGFzc2VydCghZGVzYy5jb25m
aWd1cmFibGUsIGtleSk7Cit9CisKK2ZvciAoY29uc3QgW29iamVjdCwga2V5XSBvZiB0ZXN0Q2Fz
ZXMoKSkgeworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmplY3QsIGtleSwgeyB2YWx1ZTog
e30sIHdyaXRhYmxlOiB0cnVlLCBlbnVtZXJhYmxlOiB0cnVlIH0pOworICAgIGNvbnN0IHRhcmdl
dCA9IHt9OworICAgIGFzc2VydChSZWZsZWN0LnNldCh0YXJnZXQsIGtleSwgdGVzdFZhbHVlLCBv
YmplY3QpLCBrZXkpOworCisgICAgY29uc3QgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURl
c2NyaXB0b3Iob2JqZWN0LCBrZXkpOworICAgIGFzc2VydChkZXNjLnZhbHVlID09PSB0ZXN0VmFs
dWUsIGtleSk7CisgICAgYXNzZXJ0KGRlc2Mud3JpdGFibGUsIGtleSk7CisgICAgYXNzZXJ0KGRl
c2MuZW51bWVyYWJsZSwga2V5KTsKKyAgICBhc3NlcnQoZGVzYy5jb25maWd1cmFibGUsIGtleSk7
Cit9CkluZGV4OiBKU1Rlc3RzL3N0cmVzcy9wdXQtbm9uLXJlaWZpZWQtc3RhdGljLWZ1bmN0aW9u
LW9yLWN1c3RvbS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0cmVzcy9wdXQtbm9uLXJlaWZp
ZWQtc3RhdGljLWZ1bmN0aW9uLW9yLWN1c3RvbS5qcwkobm9uZXhpc3RlbnQpCisrKyBKU1Rlc3Rz
L3N0cmVzcy9wdXQtbm9uLXJlaWZpZWQtc3RhdGljLWZ1bmN0aW9uLW9yLWN1c3RvbS5qcwkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDE0MyBAQAorInVzZSBzdHJpY3QiOworY29uc3QgdGVzdFZh
bHVlID0gT2JqZWN0LmZyZWV6ZSh7fSk7CisKK2Z1bmN0aW9uIGFzc2VydCh4LCBrZXkpIHsKKyAg
ICBpZiAoIXgpCisgICAgICAgIHRocm93IG5ldyBFcnJvcihgS2V5OiAiJHtrZXl9Ii4gQmFkIGFz
c2VydGlvbiFgKTsKK30KKworZnVuY3Rpb24gc2hvdWxkVGhyb3coZnVuYywgZXJyb3JNZXNzYWdl
LCBrZXkpIHsKKyAgICBsZXQgZXJyb3JUaHJvd24gPSBmYWxzZTsKKyAgICB0cnkgeworICAgICAg
ICBmdW5jKCk7CisgICAgfSBjYXRjaCAoZXJyb3IpIHsKKyAgICAgICAgZXJyb3JUaHJvd24gPSB0
cnVlOworICAgICAgICBpZiAoU3RyaW5nKGVycm9yKSAhPT0gZXJyb3JNZXNzYWdlKQorICAgICAg
ICAgICAgdGhyb3cgbmV3IEVycm9yKGBLZXk6ICIke2tleX0iLiBCYWQgZXJyb3I6ICR7ZXJyb3J9
YCk7CisgICAgfQorICAgIGlmICghZXJyb3JUaHJvd24pCisgICAgICAgIHRocm93IG5ldyBFcnJv
cihgS2V5OiAiJHtrZXl9Ii4gRGlkbid0IHRocm93IWApOworfQorCitmdW5jdGlvbiogdGVzdENh
c2VzKCkgeworICAgIC8vIGhhc1NldHRlck9yUmVhZG9ubHlQcm9wZXJ0aWVzOiBmYWxzZQorICAg
IGZvciAoY29uc3Qga2V5IG9mIFsiaXNGaW5pdGUiLCAiZXZhbCIsICJnbG9iYWxUaGlzIiwgInBh
cnNlSW50IiwgIkV2YWxFcnJvciIsICJKU09OIiwgIlVpbnQ4Q2xhbXBlZEFycmF5IiwgIldlYWtN
YXAiXSkKKyAgICAgICAgeWllbGQgWyR2bS5jcmVhdGVHbG9iYWxPYmplY3QoKSwga2V5XTsKKyAg
ICBmb3IgKGNvbnN0IGtleSBvZiBbInNlYWwiLCAiaXMiLCAidmFsdWVzIiwgImZyb21FbnRyaWVz
IiwgImRlZmluZVByb3BlcnR5IiwgInNldFByb3RvdHlwZU9mIl0pCisgICAgICAgIHlpZWxkIFsk
dm0uY3JlYXRlR2xvYmFsT2JqZWN0KCkuT2JqZWN0LCBrZXldOworICAgIGZvciAoY29uc3Qga2V5
IG9mIFsiYXBwbHkiLCAiY29uc3RydWN0IiwgImhhcyIsICJwcmV2ZW50RXh0ZW5zaW9ucyIsICJn
ZXRQcm90b3R5cGVPZiJdKQorICAgICAgICB5aWVsZCBbJHZtLmNyZWF0ZUdsb2JhbE9iamVjdCgp
LlJlZmxlY3QsIGtleV07CisgICAgZm9yIChjb25zdCBrZXkgb2YgWyJ0b0RhdGVTdHJpbmciLCAi
dG9Mb2NhbGVTdHJpbmciLCAiZ2V0VVRDTW9udGgiLCAiZ2V0RGF5IiwgInNldFVUQ01pbnV0ZXMi
LCAic2V0TW9udGgiXSkKKyAgICAgICAgeWllbGQgWyR2bS5jcmVhdGVHbG9iYWxPYmplY3QoKS5E
YXRlLnByb3RvdHlwZSwga2V5XTsKKyAgICBmb3IgKGNvbnN0IGtleSBvZiBbImNvbmNhdCIsICJt
YXRjaCIsICJwYWRTdGFydCIsICJib2xkIiwgImZpeGVkIiwgInNtYWxsIiwgInN1YiJdKQorICAg
ICAgICB5aWVsZCBbJHZtLmNyZWF0ZUdsb2JhbE9iamVjdCgpLlN0cmluZy5wcm90b3R5cGUsIGtl
eV07CisKKyAgICAvLyBoYXNTZXR0ZXJPclJlYWRvbmx5UHJvcGVydGllczogdHJ1ZQorICAgIGZv
ciAoY29uc3Qga2V5IG9mIFsiZ2V0VWludDE2IiwgInNldEludDgiLCAiZ2V0RmxvYXQzMiIsICJz
ZXRCaWdVaW50NjQiXSkKKyAgICAgICAgeWllbGQgWyR2bS5jcmVhdGVHbG9iYWxPYmplY3QoKS5E
YXRhVmlldy5wcm90b3R5cGUsIGtleV07CisgICAgZm9yIChjb25zdCBrZXkgb2YgWyJ0b1N0cmlu
ZyIsICJ2YWx1ZU9mIl0pCisgICAgICAgIHlpZWxkIFskdm0uY3JlYXRlR2xvYmFsT2JqZWN0KCku
U3ltYm9sLnByb3RvdHlwZSwga2V5XTsKKyAgICBmb3IgKGNvbnN0IGtleSBvZiBbImZvcm1hdFJh
bmdlIiwgImZvcm1hdFRvUGFydHMiLCAicmVzb2x2ZWRPcHRpb25zIl0pCisgICAgICAgIHlpZWxk
IFskdm0uY3JlYXRlR2xvYmFsT2JqZWN0KCkuSW50bC5EYXRlVGltZUZvcm1hdC5wcm90b3R5cGUs
IGtleV07CisgICAgZm9yIChjb25zdCBrZXkgb2YgWyJmb3JtYXRUb1BhcnRzIiwgInJlc29sdmVk
T3B0aW9ucyJdKQorICAgICAgICB5aWVsZCBbJHZtLmNyZWF0ZUdsb2JhbE9iamVjdCgpLkludGwu
TnVtYmVyRm9ybWF0LnByb3RvdHlwZSwga2V5XTsKKyAgICBmb3IgKGNvbnN0IGtleSBvZiBbIm1h
eGltaXplIiwgIm1pbmltaXplIiwgInRvU3RyaW5nIl0pCisgICAgICAgIHlpZWxkIFskdm0uY3Jl
YXRlR2xvYmFsT2JqZWN0KCkuSW50bC5Mb2NhbGUucHJvdG90eXBlLCBrZXldOworCisgICAgeWll
bGQgWyR2bS5jcmVhdGVTdGF0aWNDdXN0b21WYWx1ZSgpLCAidGVzdFN0YXRpY1ZhbHVlTm9TZXR0
ZXIiXTsKK30KKworZm9yIChjb25zdCBbb2JqZWN0LCBrZXldIG9mIHRlc3RDYXNlcygpKSB7Cisg
ICAgb2JqZWN0W2tleV0gPSB0ZXN0VmFsdWU7CisKKyAgICBjb25zdCBkZXNjID0gT2JqZWN0Lmdl
dE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIGtleSk7CisgICAgYXNzZXJ0KGRlc2MudmFs
dWUgPT09IHRlc3RWYWx1ZSwga2V5KTsKKyAgICBhc3NlcnQoZGVzYy53cml0YWJsZSwga2V5KTsK
KyAgICBhc3NlcnQoIWRlc2MuZW51bWVyYWJsZSwga2V5KTsKKyAgICBhc3NlcnQoZGVzYy5jb25m
aWd1cmFibGUsIGtleSk7Cit9CisKK2ZvciAoY29uc3QgW29iamVjdCwga2V5XSBvZiB0ZXN0Q2Fz
ZXMoKSkgeworICAgIE9iamVjdC5wcmV2ZW50RXh0ZW5zaW9ucyhvYmplY3QpOworICAgIG9iamVj
dFtrZXldID0gdGVzdFZhbHVlOworCisgICAgY29uc3QgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9w
ZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBrZXkpOworICAgIGFzc2VydChkZXNjLnZhbHVlID09PSB0
ZXN0VmFsdWUsIGtleSk7CisgICAgYXNzZXJ0KGRlc2Mud3JpdGFibGUsIGtleSk7CisgICAgYXNz
ZXJ0KCFkZXNjLmVudW1lcmFibGUsIGtleSk7CisgICAgYXNzZXJ0KGRlc2MuY29uZmlndXJhYmxl
LCBrZXkpOworfQorCitmb3IgKGNvbnN0IFtvYmplY3QsIGtleV0gb2YgdGVzdENhc2VzKCkpIHsK
KyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqZWN0LCBrZXksIHsgZW51bWVyYWJsZTogdHJ1
ZSwgY29uZmlndXJhYmxlOiBmYWxzZSB9KTsKKyAgICBvYmplY3Rba2V5XSA9IHRlc3RWYWx1ZTsK
KworICAgIGNvbnN0IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVj
dCwga2V5KTsKKyAgICBhc3NlcnQoZGVzYy52YWx1ZSA9PT0gdGVzdFZhbHVlLCBrZXkpOworICAg
IGFzc2VydChkZXNjLndyaXRhYmxlLCBrZXkpOworICAgIGFzc2VydChkZXNjLmVudW1lcmFibGUs
IGtleSk7CisgICAgYXNzZXJ0KCFkZXNjLmNvbmZpZ3VyYWJsZSwga2V5KTsKK30KKworZm9yIChj
b25zdCBbb2JqZWN0LCBrZXldIG9mIHRlc3RDYXNlcygpKSB7CisgICAgT2JqZWN0LmRlZmluZVBy
b3BlcnR5KG9iamVjdCwga2V5LCB7IHdyaXRhYmxlOiBmYWxzZSB9KTsKKyAgICBzaG91bGRUaHJv
dygoKSA9PiB7IG9iamVjdFtrZXldID0gdGVzdFZhbHVlOyB9LCAiVHlwZUVycm9yOiBBdHRlbXB0
ZWQgdG8gYXNzaWduIHRvIHJlYWRvbmx5IHByb3BlcnR5LiIsIGtleSk7CisKKyAgICBjb25zdCBk
ZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIGtleSk7CisgICAg
YXNzZXJ0KGRlc2MudmFsdWUgIT09IHRlc3RWYWx1ZSwga2V5KTsKKyAgICBhc3NlcnQoIWRlc2Mu
d3JpdGFibGUsIGtleSk7CisgICAgYXNzZXJ0KCFkZXNjLmVudW1lcmFibGUsIGtleSk7CisgICAg
YXNzZXJ0KGRlc2MuY29uZmlndXJhYmxlLCBrZXkpOworfQorCitmb3IgKGNvbnN0IFtvYmplY3Qs
IGtleV0gb2YgdGVzdENhc2VzKCkpIHsKKyAgICBjb25zdCBoZWlyID0gT2JqZWN0LmNyZWF0ZShv
YmplY3QpOworICAgIGhlaXJba2V5XSA9IHRlc3RWYWx1ZTsKKworICAgIGNvbnN0IGRlc2MgPSBP
YmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGhlaXIsIGtleSk7CisgICAgYXNzZXJ0KGRl
c2MudmFsdWUgPT09IHRlc3RWYWx1ZSwga2V5KTsKKyAgICBhc3NlcnQoZGVzYy53cml0YWJsZSwg
a2V5KTsKKyAgICBhc3NlcnQoZGVzYy5lbnVtZXJhYmxlLCBrZXkpOworICAgIGFzc2VydChkZXNj
LmNvbmZpZ3VyYWJsZSwga2V5KTsKKyAgICBhc3NlcnQob2JqZWN0W2tleV0gIT09IHRlc3RWYWx1
ZSwga2V5KTsKK30KKworZm9yIChjb25zdCBbb2JqZWN0LCBrZXldIG9mIHRlc3RDYXNlcygpKSB7
CisgICAgY29uc3QgcHJvdG90eXBlID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKG9iamVjdCk7Cisg
ICAgaWYgKHByb3RvdHlwZSAhPT0gbnVsbCkgeworICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVy
dHkocHJvdG90eXBlLCBrZXksIHsKKyAgICAgICAgICAgIHNldCgpIHsgdGhyb3cgbmV3IEVycm9y
KGAiJHtrZXl9IiBzZXR0ZXIgc2hvdWxkIGJlIHVucmVhY2hhYmxlIWApOyB9LAorICAgICAgICB9
KTsKKyAgICB9CisKKyAgICBjb25zdCBoZWlyID0gT2JqZWN0LmNyZWF0ZShvYmplY3QpOworICAg
IGhlaXJba2V5XSA9IHRlc3RWYWx1ZTsKKworICAgIGNvbnN0IGRlc2MgPSBPYmplY3QuZ2V0T3du
UHJvcGVydHlEZXNjcmlwdG9yKGhlaXIsIGtleSk7CisgICAgYXNzZXJ0KGRlc2MudmFsdWUgPT09
IHRlc3RWYWx1ZSwga2V5KTsKKyAgICBhc3NlcnQoZGVzYy53cml0YWJsZSwga2V5KTsKKyAgICBh
c3NlcnQoZGVzYy5lbnVtZXJhYmxlLCBrZXkpOworICAgIGFzc2VydChkZXNjLmNvbmZpZ3VyYWJs
ZSwga2V5KTsKKyAgICBhc3NlcnQob2JqZWN0W2tleV0gIT09IHRlc3RWYWx1ZSwga2V5KTsKK30K
KworZm9yIChjb25zdCBbb2JqZWN0LCBrZXldIG9mIHRlc3RDYXNlcygpKSB7CisgICAgY29uc3Qg
aGVpciA9IE9iamVjdC5jcmVhdGUob2JqZWN0KTsKKyAgICBPYmplY3QucHJldmVudEV4dGVuc2lv
bnMoaGVpcik7CisKKyAgICBzaG91bGRUaHJvdygoKSA9PiB7IGhlaXJba2V5XSA9IHRlc3RWYWx1
ZTsgfSwgIlR5cGVFcnJvcjogQXR0ZW1wdGVkIHRvIGFzc2lnbiB0byByZWFkb25seSBwcm9wZXJ0
eS4iLCBrZXkpOworICAgIGFzc2VydChoZWlyW2tleV0gIT09IHRlc3RWYWx1ZSwga2V5KTsKKyAg
ICBhc3NlcnQob2JqZWN0W2tleV0gIT09IHRlc3RWYWx1ZSwga2V5KTsKK30KKworZm9yIChjb25z
dCBbb2JqZWN0LCBrZXldIG9mIHRlc3RDYXNlcygpKSB7CisgICAgY29uc3QgdGFyZ2V0ID0ge307
CisgICAgYXNzZXJ0KFJlZmxlY3Quc2V0KHRhcmdldCwga2V5LCB0ZXN0VmFsdWUsIG9iamVjdCks
IGtleSk7CisgICAgYXNzZXJ0KCF0YXJnZXQuaGFzT3duUHJvcGVydHkoa2V5KSwga2V5KTsKKwor
ICAgIGNvbnN0IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwg
a2V5KTsKKyAgICBhc3NlcnQoZGVzYy52YWx1ZSA9PT0gdGVzdFZhbHVlLCBrZXkpOworICAgIGFz
c2VydChkZXNjLndyaXRhYmxlLCBrZXkpOworICAgIGFzc2VydCghZGVzYy5lbnVtZXJhYmxlLCBr
ZXkpOworICAgIGFzc2VydChkZXNjLmNvbmZpZ3VyYWJsZSwga2V5KTsKK30KSW5kZXg6IEpTVGVz
dHMvc3RyZXNzL3B1dC10by1wcmltaXRpdmUtbm9uLXJlaWZpZWQtc3RhdGljLWN1c3RvbS5qcwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0cmVzcy9wdXQtdG8tcHJpbWl0aXZlLW5vbi1yZWlmaWVk
LXN0YXRpYy1jdXN0b20uanMJKG5vbmV4aXN0ZW50KQorKysgSlNUZXN0cy9zdHJlc3MvcHV0LXRv
LXByaW1pdGl2ZS1ub24tcmVpZmllZC1zdGF0aWMtY3VzdG9tLmpzCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNjQgQEAKKyJ1c2Ugc3RyaWN0IjsKKworZnVuY3Rpb24gc2hvdWxkQmUoYWN0dWFs
LCBleHBlY3RlZCkgeworICAgIGlmIChhY3R1YWwgIT09IGV4cGVjdGVkKQorICAgICAgICB0aHJv
dyBuZXcgRXJyb3IoYEJhZCB2YWx1ZTogJHthY3R1YWx9IWApOworfQorCitmdW5jdGlvbiBzaG91
bGRUaHJvdyhmdW5jLCBlcnJvck1lc3NhZ2UpIHsKKyAgICBsZXQgZXJyb3JUaHJvd24gPSBmYWxz
ZTsKKyAgICB0cnkgeworICAgICAgICBmdW5jKCk7CisgICAgfSBjYXRjaCAoZXJyb3IpIHsKKyAg
ICAgICAgZXJyb3JUaHJvd24gPSB0cnVlOworICAgICAgICBpZiAoU3RyaW5nKGVycm9yKSAhPT0g
ZXJyb3JNZXNzYWdlKQorICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBCYWQgZXJyb3I6ICR7
ZXJyb3J9YCk7CisgICAgfQorICAgIGlmICghZXJyb3JUaHJvd24pCisgICAgICAgIHRocm93IG5l
dyBFcnJvcigiRGlkbid0IHRocm93ISIpOworfQorCitjb25zdCBwb2lzb25lZFNldHRlciA9IHsg
c2V0KCkgeyB0aHJvdyBuZXcgRXJyb3IoIk9iamVjdC5wcm90b3R5cGUgc2V0dGVyIHNob3VsZCBi
ZSB1bnJlYWNoYWJsZSEiKTsgfSB9OworY29uc3QgcHJpbWl0aXZlcyA9IFt0cnVlLCAxLCAiIiwg
U3ltYm9sKCksIDBuXTsKKworKGZ1bmN0aW9uIHRlc3RTdGF0aWNDdXN0b21WYWx1ZSgpIHsKKyAg
ICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhPYmplY3QucHJvdG90eXBlLCB7CisgICAgICAgIHRl
c3RTdGF0aWNWYWx1ZTogcG9pc29uZWRTZXR0ZXIsCisgICAgICAgIHRlc3RTdGF0aWNWYWx1ZU5v
U2V0dGVyOiBwb2lzb25lZFNldHRlciwKKyAgICAgICAgdGVzdFN0YXRpY1ZhbHVlUmVhZE9ubHk6
IHBvaXNvbmVkU2V0dGVyLAorICAgIH0pOworCisgICAgZm9yIChjb25zdCBwcmltaXRpdmUgb2Yg
cHJpbWl0aXZlcykgeworICAgICAgICBjb25zdCBwcmltaXRpdmVQcm90b3R5cGUgPSBPYmplY3Qu
Z2V0UHJvdG90eXBlT2YocHJpbWl0aXZlKTsKKyAgICAgICAgY29uc3Qgc3RhdGljQ3VzdG9tVmFs
dWUgPSAkdm0uY3JlYXRlU3RhdGljQ3VzdG9tVmFsdWUoKTsKKyAgICAgICAgT2JqZWN0LnNldFBy
b3RvdHlwZU9mKHByaW1pdGl2ZVByb3RvdHlwZSwgc3RhdGljQ3VzdG9tVmFsdWUpOworCisgICAg
ICAgIHByaW1pdGl2ZS50ZXN0U3RhdGljVmFsdWUgPSAxOworICAgICAgICBzaG91bGRCZShzdGF0
aWNDdXN0b21WYWx1ZS50ZXN0U3RhdGljVmFsdWUsIDEpOworICAgICAgICBzaG91bGRUaHJvdygo
KSA9PiB7IHByaW1pdGl2ZS50ZXN0U3RhdGljVmFsdWUgPSAxOyB9LCAiVHlwZUVycm9yOiBBdHRl
bXB0ZWQgdG8gYXNzaWduIHRvIHJlYWRvbmx5IHByb3BlcnR5LiIpOworCisgICAgICAgIHNob3Vs
ZFRocm93KCgpID0+IHsgcHJpbWl0aXZlLnRlc3RTdGF0aWNWYWx1ZU5vU2V0dGVyID0gMTsgfSwg
IlR5cGVFcnJvcjogQXR0ZW1wdGVkIHRvIGFzc2lnbiB0byByZWFkb25seSBwcm9wZXJ0eS4iKTsK
KyAgICAgICAgc2hvdWxkVGhyb3coKCkgPT4geyBwcmltaXRpdmUudGVzdFN0YXRpY1ZhbHVlUmVh
ZE9ubHkgPSAxOyB9LCAiVHlwZUVycm9yOiBBdHRlbXB0ZWQgdG8gYXNzaWduIHRvIHJlYWRvbmx5
IHByb3BlcnR5LiIpOworICAgICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YocHJpbWl0aXZlUHJv
dG90eXBlLCBPYmplY3QucHJvdG90eXBlKTsKKyAgICB9Cit9KSgpOworCisoZnVuY3Rpb24gdGVz
dFN0YXRpY0N1c3RvbUFjY2Vzc29yKCkgeworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKE9i
amVjdC5wcm90b3R5cGUsIHsKKyAgICAgICAgdGVzdFN0YXRpY0FjY2Vzc29yOiBwb2lzb25lZFNl
dHRlciwKKyAgICAgICAgdGVzdFN0YXRpY0FjY2Vzc29yUmVhZE9ubHk6IHBvaXNvbmVkU2V0dGVy
LAorICAgIH0pOworCisgICAgZm9yIChjb25zdCBwcmltaXRpdmUgb2YgcHJpbWl0aXZlcykgewor
ICAgICAgICBjb25zdCBwcmltaXRpdmVQcm90b3R5cGUgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Yo
cHJpbWl0aXZlKTsKKyAgICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKHByaW1pdGl2ZVByb3Rv
dHlwZSwgJHZtLmNyZWF0ZVN0YXRpY0N1c3RvbUFjY2Vzc29yKCkpOworCisgICAgICAgIGZvciAo
bGV0IGkgPSAwOyBpIDwgMTAwMDsgaSsrKSB7CisgICAgICAgICAgICBwcmltaXRpdmUudGVzdFN0
YXRpY0FjY2Vzc29yID0gaTsKKyAgICAgICAgICAgIHNob3VsZEJlKHByaW1pdGl2ZVByb3RvdHlw
ZS50ZXN0RmllbGQsIGkpOworICAgICAgICB9CisKKyAgICAgICAgc2hvdWxkVGhyb3coKCkgPT4g
eyBwcmltaXRpdmUudGVzdFN0YXRpY0FjY2Vzc29yUmVhZE9ubHkgPSAxOyB9LCAiVHlwZUVycm9y
OiBBdHRlbXB0ZWQgdG8gYXNzaWduIHRvIHJlYWRvbmx5IHByb3BlcnR5LiIpOworICAgICAgICBP
YmplY3Quc2V0UHJvdG90eXBlT2YocHJpbWl0aXZlUHJvdG90eXBlLCBPYmplY3QucHJvdG90eXBl
KTsKKyAgICB9Cit9KSgpOwpJbmRleDogSlNUZXN0cy9zdHJlc3MvcHV0LXRvLXByaW1pdGl2ZS5q
cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0cmVzcy9wdXQtdG8tcHJpbWl0aXZlLmpzCShub25l
eGlzdGVudCkKKysrIEpTVGVzdHMvc3RyZXNzL3B1dC10by1wcmltaXRpdmUuanMJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSwyNyBAQAorZnVuY3Rpb24gc2hvdWxkQmUoYWN0dWFsLCBleHBlY3Rl
ZCkgeworICAgIGlmIChhY3R1YWwgIT09IGV4cGVjdGVkKQorICAgICAgICB0aHJvdyBuZXcgRXJy
b3IoYEJhZCB2YWx1ZTogJHthY3R1YWx9IWApOworfQorCitmdW5jdGlvbiBzaG91bGRUaHJvdyhm
dW5jLCBlcnJvck1lc3NhZ2UpIHsKKyAgICBsZXQgZXJyb3JUaHJvd24gPSBmYWxzZTsKKyAgICB0
cnkgeworICAgICAgICBmdW5jKCk7CisgICAgfSBjYXRjaCAoZXJyb3IpIHsKKyAgICAgICAgZXJy
b3JUaHJvd24gPSB0cnVlOworICAgICAgICBpZiAoU3RyaW5nKGVycm9yKSAhPT0gZXJyb3JNZXNz
YWdlKQorICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBCYWQgZXJyb3I6ICR7ZXJyb3J9YCk7
CisgICAgfQorICAgIGlmICghZXJyb3JUaHJvd24pCisgICAgICAgIHRocm93IG5ldyBFcnJvcigi
RGlkbid0IHRocm93ISIpOworfQorCisoZnVuY3Rpb24gc3RyaW5nTGVuZ3RoKCkgeworICAgIGxl
dCBzdHIgPSAiZm9vIjsKKworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMWU1OyBpKyspIHsKKyAg
ICAgICAgc3RyLmxlbmd0aCA9IDA7CisgICAgICAgIHNob3VsZEJlKHN0ci5sZW5ndGgsIDMpOwor
ICAgICAgICBzaG91bGRUaHJvdygoKSA9PiB7ICJ1c2Ugc3RyaWN0IjsgImJhciIubGVuZ3RoID0g
MzsgfSwgIlR5cGVFcnJvcjogQXR0ZW1wdGVkIHRvIGFzc2lnbiB0byByZWFkb25seSBwcm9wZXJ0
eS4iKTsKKyAgICB9Cit9KSgpOwpJbmRleDogSlNUZXN0cy9zdHJlc3MvcHV0LXRvLXByb3RvLWNo
YWluLW92ZXJyaWRlcy1wdXQuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3MvcHV0LXRv
LXByb3RvLWNoYWluLW92ZXJyaWRlcy1wdXQuanMJKG5vbmV4aXN0ZW50KQorKysgSlNUZXN0cy9z
dHJlc3MvcHV0LXRvLXByb3RvLWNoYWluLW92ZXJyaWRlcy1wdXQuanMJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwxNDIgQEAKK2NvbnN0IFRFU1RfVkFMVUUgPSAxMDYyNjMwNzEzOyAvLyBBcnJh
eSdzICJsZW5ndGgiIGlzIHJlcXVpcmVkIHRvIGJlIGludDMyCisKK3Rlc3RTZXRSZXN1bHQoWzEs
IDJdLCAibGVuZ3RoIiwgdHJ1ZSk7Cit0ZXN0U2V0UmVzdWx0KAorICAgIE9iamVjdC5kZWZpbmVQ
cm9wZXJ0eShuZXcgQXJyYXksICJsZW5ndGgiLCB7IHdyaXRhYmxlOiBmYWxzZSB9KSwKKyAgICAi
bGVuZ3RoIiwKKyAgICBmYWxzZSwKKyk7CisKK3Rlc3RTZXRSZXN1bHQobmV3IFN0cmluZywgImxl
bmd0aCIsIGZhbHNlKTsKK3Rlc3RTZXRSZXN1bHQobmV3IFJlZ0V4cCwgImxhc3RJbmRleCIsIHRy
dWUpOwordGVzdFNldFJlc3VsdCgKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoLyg/OikvZywg
Imxhc3RJbmRleCIsIHsgd3JpdGFibGU6IGZhbHNlIH0pLAorICAgICJsYXN0SW5kZXgiLAorICAg
IGZhbHNlLAorKTsKKworZm9yIChjb25zdCBrZXkgb2YgWyJsaW5lIiwgImNvbHVtbiIsICJzb3Vy
Y2VVUkwiLCAic3RhY2siXSkKKyAgICB0ZXN0U2V0UmVzdWx0KG5ldyBFcnJvciwga2V5LCB0cnVl
KTsKKworY29uc3QgbWFwcGVkQXJndW1lbnRzID0gKGZ1bmN0aW9uKGEsIGIpIHsgcmV0dXJuIGFy
Z3VtZW50czsgfSkoMSwgMik7Cit0ZXN0U2V0UmVzdWx0KG1hcHBlZEFyZ3VtZW50cywgImNhbGxl
ZSIsIHRydWUpOwordGVzdFNldFJlc3VsdChtYXBwZWRBcmd1bWVudHMsICJsZW5ndGgiLCB0cnVl
KTsKK3Rlc3RTZXRSZXN1bHQobWFwcGVkQXJndW1lbnRzLCBTeW1ib2wuaXRlcmF0b3IsIHRydWUp
OworCitjb25zdCB1bm1hcHBlZEFyZ3VtZW50cyA9IChmdW5jdGlvbigpIHsgInVzZSBzdHJpY3Qi
OyByZXR1cm4gYXJndW1lbnRzOyB9KSgpOwordGVzdFNldFJlc3VsdCh1bm1hcHBlZEFyZ3VtZW50
cywgImxlbmd0aCIsIHRydWUpOwordGVzdFNldFJlc3VsdCh1bm1hcHBlZEFyZ3VtZW50cywgU3lt
Ym9sLml0ZXJhdG9yLCB0cnVlKTsKKwordmFyIGZvbzsKK2Z1bmN0aW9uIGJhcigpIHt9Citmb3Ig
KGNvbnN0IGtleSBvZiBbImZvbyIsICJiYXIiLCAicGFyc2VJbnQiXSkKKyAgICB0ZXN0U2V0UmVz
dWx0KGdsb2JhbFRoaXMsIGtleSwgdHJ1ZSk7CisKK2ZvciAoY29uc3Qga2V5IG9mIFsiSW5maW5p
dHkiLCAiTmFOIiwgInVuZGVmaW5lZCJdKQorICAgIHRlc3RTZXRSZXN1bHQoZ2xvYmFsVGhpcywg
a2V5LCBmYWxzZSk7CisKK2ZvciAoY29uc3Qga2V5IG9mIFsibmFtZSIsICJsZW5ndGgiXSkgewor
ICAgIHRlc3RTZXRSZXN1bHQoZnVuY3Rpb24oKSB7fS5iaW5kKCksIGtleSwgZmFsc2UpOworICAg
IHRlc3RTZXRSZXN1bHQoCisgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmdW5jdGlvbigp
IHt9LCBrZXksIHsgd3JpdGFibGU6IHRydWUgfSksCisgICAgICAgIGtleSwKKyAgICAgICAgdHJ1
ZSwKKyAgICApOworCisgICAgdGVzdFNldFJlc3VsdCgoKSA9PiB7ICJ1c2Ugc3RyaWN0IjsgfSwg
a2V5LCBmYWxzZSk7CisgICAgdGVzdFNldFJlc3VsdCgKKyAgICAgICAgT2JqZWN0LmRlZmluZVBy
b3BlcnR5KHBhcnNlRmxvYXQsIGtleSwgeyB3cml0YWJsZTogdHJ1ZSB9KSwKKyAgICAgICAga2V5
LAorICAgICAgICB0cnVlLAorICAgICk7Cit9CisKK3Rlc3RTZXRSZXN1bHQoZnVuY3Rpb24oKSB7
ICJ1c2Ugc3RyaWN0IjsgfSwgInByb3RvdHlwZSIsIHRydWUpOwordGVzdFNldFJlc3VsdCgKKyAg
ICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZnVuY3Rpb24oKSB7fSwgInByb3RvdHlwZSIsIHsgd3Jp
dGFibGU6IGZhbHNlIH0pLAorICAgICJwcm90b3R5cGUiLAorICAgIGZhbHNlLAorKTsKKwordGVz
dFNldFJlc3VsdChmdW5jdGlvbigpIHt9LCAiYXJndW1lbnRzIiwgZmFsc2UpOwordGVzdFNldFJl
c3VsdChmdW5jdGlvbigpIHt9LCAiY2FsbGVyIiwgZmFsc2UpOworCisvLyA9PT0gaGFybmVzcyA9
PT0KKworZnVuY3Rpb24gdGVzdFNldFJlc3VsdCh0YXJnZXQsIGtleSwgZXhwZWN0ZWRSZXN1bHQp
IHsKKyAgICBsZXQgY2xlYW5VcCA9IHB1dFNldHRlck9uUHJvdG90eXBlKHRhcmdldCwga2V5LCAo
KSA9PiB7fSk7CisKKyAgICBmb3IgKGNvbnN0IHByaW1pdGl2ZSBvZiBbdHJ1ZSwgMSwgImZvbyIs
IFN5bWJvbCgpLCAwbl0pIHsKKyAgICAgICAgY29uc3QgcHJpbWl0aXZlUHJvdG90eXBlID0gT2Jq
ZWN0LmdldFByb3RvdHlwZU9mKHByaW1pdGl2ZSk7CisgICAgICAgIE9iamVjdC5zZXRQcm90b3R5
cGVPZihwcmltaXRpdmVQcm90b3R5cGUsIHRhcmdldCk7CisgICAgICAgIHRlc3RTZXRSZXN1bHRJ
bnRlcm5hbCh0YXJnZXQsIGtleSwgcHJpbWl0aXZlLCBmYWxzZSk7CisgICAgICAgIE9iamVjdC5z
ZXRQcm90b3R5cGVPZihwcmltaXRpdmVQcm90b3R5cGUsIE9iamVjdC5wcm90b3R5cGUpOworICAg
IH0KKworICAgIGNsZWFuVXAoKTsKKyAgICBjbGVhblVwID0gcHV0U2V0dGVyT25Qcm90b3R5cGUo
dGFyZ2V0LCBrZXksICgpID0+IHsKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke1N0cmluZyhr
ZXkpfSBzZXR0ZXIgc2hvdWxkIGJlIHVucmVhY2hhYmxlIWApOworICAgIH0pOworCisgICAgZm9y
IChjb25zdCByZWNlaXZlciBvZiBbCisgICAgICAgIE9iamVjdC5jcmVhdGUodGFyZ2V0KSwKKyAg
ICAgICAgT2JqZWN0LmNyZWF0ZShPYmplY3QuY3JlYXRlKHRhcmdldCkpLAorICAgICAgICBuZXcg
UHJveHkodGFyZ2V0LCB7fSksCisgICAgICAgIG5ldyBQcm94eSh0YXJnZXQsIFJlZmxlY3QpLAor
ICAgIF0pCisgICAgICAgIHRlc3RTZXRSZXN1bHRJbnRlcm5hbCh0YXJnZXQsIGtleSwgcmVjZWl2
ZXIsIGV4cGVjdGVkUmVzdWx0KTsKKworICAgIGNsZWFuVXAoKTsKK30KKworZnVuY3Rpb24gcHV0
U2V0dGVyT25Qcm90b3R5cGUodGFyZ2V0LCBrZXksIHNldCkgeworICAgIGNvbnN0IGRlc2NyaXB0
b3IgPSB7IHNldCwgY29uZmlndXJhYmxlOiB0cnVlIH07CisgICAgY29uc3QgY3VycmVudFByb3Rv
dHlwZSA9IE9iamVjdC5nZXRQcm90b3R5cGVPZih0YXJnZXQpOworICAgIGNvbnN0IG5ld1Byb3Rv
dHlwZSA9IE9iamVjdC5jcmVhdGUobnVsbCwgeyBba2V5XTogZGVzY3JpcHRvciB9KTsKKworICAg
IGlmIChSZWZsZWN0LnNldFByb3RvdHlwZU9mKHRhcmdldCwgbmV3UHJvdG90eXBlKSkKKyAgICAg
ICAgcmV0dXJuICgpID0+IHsgT2JqZWN0LnNldFByb3RvdHlwZU9mKHRhcmdldCwgY3VycmVudFBy
b3RvdHlwZSk7IH07CisKKyAgICBpZiAoY3VycmVudFByb3RvdHlwZSAhPT0gbnVsbCAmJiBSZWZs
ZWN0LmRlZmluZVByb3BlcnR5KGN1cnJlbnRQcm90b3R5cGUsIGtleSwgZGVzY3JpcHRvcikpCisg
ICAgICAgIHJldHVybiAoKSA9PiB7ICJ1c2Ugc3RyaWN0IjsgZGVsZXRlIGN1cnJlbnRQcm90b3R5
cGVba2V5XTsgfTsKKworICAgIHRocm93IG5ldyBFcnJvcigiVGhpcyBpcyB1bnJlYWNoYWJsZTog
YXQgbGVhc3Qgb25lIGFwcHJvYWNoIHNob3VsZCBzdWNjZWVkISIpOworfQorCitmdW5jdGlvbiB0
ZXN0U2V0UmVzdWx0SW50ZXJuYWwodGFyZ2V0LCBrZXksIHJlY2VpdmVyLCBleHBlY3RlZFJlc3Vs
dCkgeworICAgIHJlY2VpdmVyW2tleV0gPSBURVNUX1ZBTFVFOworICAgIHNob3VsZEJlKHJlY2Vp
dmVyW2tleV0gPT09IFRFU1RfVkFMVUUsIGV4cGVjdGVkUmVzdWx0LCBrZXkpOworCisgICAgdGVz
dFNldFJlc3VsdFN0cmljdChyZWNlaXZlciwga2V5LCBleHBlY3RlZFJlc3VsdCk7CisKKyAgICBp
ZiAocmVjZWl2ZXIgPT09IE9iamVjdChyZWNlaXZlcikpCisgICAgICAgIHNob3VsZEJlKFJlZmxl
Y3Quc2V0KHJlY2VpdmVyLCBrZXksIFRFU1RfVkFMVUUpLCBleHBlY3RlZFJlc3VsdCwga2V5KTsK
KyAgICBzaG91bGRCZShSZWZsZWN0LnNldCh0YXJnZXQsIGtleSwgVEVTVF9WQUxVRSwgcmVjZWl2
ZXIpLCBleHBlY3RlZFJlc3VsdCwga2V5KTsKK30KKworZnVuY3Rpb24gdGVzdFNldFJlc3VsdFN0
cmljdChyZWNlaXZlciwga2V5LCBleHBlY3RlZFJlc3VsdCkgeworICAgICJ1c2Ugc3RyaWN0IjsK
KyAgICBpZiAoZXhwZWN0ZWRSZXN1bHQpIHsKKyAgICAgICAgcmVjZWl2ZXJba2V5XSA9IFRFU1Rf
VkFMVUU7CisgICAgICAgIHNob3VsZEJlKHJlY2VpdmVyW2tleV0sIFRFU1RfVkFMVUUsIGtleSk7
CisgICAgfSBlbHNlCisgICAgICAgIHNob3VsZFRocm93VHlwZUVycm9yKCgpID0+IHsgcmVjZWl2
ZXJba2V5XSA9IFRFU1RfVkFMVUU7IH0sIGtleSk7Cit9CisKK2Z1bmN0aW9uIHNob3VsZEJlKGFj
dHVhbCwgZXhwZWN0ZWQsIGtleSkgeworICAgIGlmIChhY3R1YWwgIT09IGV4cGVjdGVkKQorICAg
ICAgICB0aHJvdyBuZXcgRXJyb3IoYEtleTogJHtTdHJpbmcoa2V5KX0uICR7YWN0dWFsfSAhPT0g
JHtleHBlY3RlZH1gKTsKK30KKworZnVuY3Rpb24gc2hvdWxkVGhyb3dUeXBlRXJyb3IoZnVuYywg
a2V5KSB7CisgICAgbGV0IGVycm9yVGhyb3duID0gZmFsc2U7CisgICAgdHJ5IHsKKyAgICAgICAg
ZnVuYygpOworICAgIH0gY2F0Y2ggKGVycm9yKSB7CisgICAgICAgIGVycm9yVGhyb3duID0gdHJ1
ZTsKKyAgICAgICAgaWYgKGVycm9yLmNvbnN0cnVjdG9yICE9PSBUeXBlRXJyb3IpCisgICAgICAg
ICAgICB0aHJvdyBuZXcgRXJyb3IoYEtleTogJHtTdHJpbmcoa2V5KX0uIEJhZCBlcnJvcjogJHtl
cnJvcn1gKTsKKyAgICB9CisgICAgaWYgKCFlcnJvclRocm93bikKKyAgICAgICAgdGhyb3cgbmV3
IEVycm9yKGBLZXk6ICR7U3RyaW5nKGtleSl9LiBEaWRuJ3QgdGhyb3chYCk7Cit9CkluZGV4OiBK
U1Rlc3RzL3N0cmVzcy90eXBlZC1hcnJheS1jYW5vbmljYWwtbnVtZXJpYy1pbmRleC1zdHJpbmct
c2V0LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvc3RyZXNzL3R5cGVkLWFycmF5LWNhbm9uaWNh
bC1udW1lcmljLWluZGV4LXN0cmluZy1zZXQuanMJKG5vbmV4aXN0ZW50KQorKysgSlNUZXN0cy9z
dHJlc3MvdHlwZWQtYXJyYXktY2Fub25pY2FsLW51bWVyaWMtaW5kZXgtc3RyaW5nLXNldC5qcwko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU4IEBACisndXNlIHN0cmljdCc7Citjb25zdCBUeXBl
ZEFycmF5cyA9IFtVaW50OENsYW1wZWRBcnJheSwgVWludDhBcnJheSwgVWludDE2QXJyYXksIFVp
bnQzMkFycmF5LCBJbnQ4QXJyYXksIEludDE2QXJyYXksIEludDMyQXJyYXksIEZsb2F0MzJBcnJh
eSwgRmxvYXQ2NEFycmF5XTsKK2NvbnN0IGNhbm9uaWNhbE51bWVyaWNJbmRleFN0cmluZ3MgPSBb
Jy0wJywgJy0xJywgJy0zLjE0JywgJ0luZmluaXR5JywgJy1JbmZpbml0eScsICdOYU4nLCAnMC41
JywgJzQyOTQ5NjcyOTUnLCAnNDI5NDk2NzI5NiddOworCitmdW5jdGlvbiBhc3NlcnQoeCwga2V5
KSB7CisgICAgaWYgKCF4KQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEJhZCBhc3NlcnRpb24h
IEtleTogJyR7a2V5fSdgKTsKK30KKworZm9yIChjb25zdCBUeXBlZEFycmF5IG9mIFR5cGVkQXJy
YXlzKSB7CisgICAgZm9yIChjb25zdCBrZXkgb2YgY2Fub25pY2FsTnVtZXJpY0luZGV4U3RyaW5n
cykgeworICAgICAgICBjb25zdCBhc3NlcnRQcm90b3R5cGVQcm9wZXJ0eUlzVW5yZWFjaGFibGUg
PSAoKSA9PiB7CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY29uc3QgdEEgPSBuZXcg
VHlwZWRBcnJheTsKKyAgICAgICAgICAgICAgICB0QVtrZXldID0gMTsKKyAgICAgICAgICAgICAg
ICBhc3NlcnQoIXRBLmhhc093blByb3BlcnR5KGtleSksIGtleSk7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb25zdCB0QSA9IG5ldyBUeXBlZEFycmF5
OworICAgICAgICAgICAgICAgIGNvbnN0IGhlaXIgPSBPYmplY3QuY3JlYXRlKHRBKTsKKyAgICAg
ICAgICAgICAgICBoZWlyW2tleV0gPSAyOworCisgICAgICAgICAgICAgICAgYXNzZXJ0KCF0QS5o
YXNPd25Qcm9wZXJ0eShrZXkpLCBrZXkpOworICAgICAgICAgICAgICAgIGFzc2VydCghaGVpci5o
YXNPd25Qcm9wZXJ0eShrZXkpLCBrZXkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgY29uc3QgdGFyZ2V0ID0ge307CisgICAgICAgICAgICAgICAgY29u
c3QgcmVjZWl2ZXIgPSBuZXcgVHlwZWRBcnJheTsKKworICAgICAgICAgICAgICAgIGFzc2VydCgh
UmVmbGVjdC5zZXQodGFyZ2V0LCBrZXksIDMsIHJlY2VpdmVyKSwga2V5KTsKKyAgICAgICAgICAg
ICAgICBhc3NlcnQoIXRhcmdldC5oYXNPd25Qcm9wZXJ0eShrZXkpLCBrZXkpOworICAgICAgICAg
ICAgICAgIGFzc2VydCghcmVjZWl2ZXIuaGFzT3duUHJvcGVydHkoa2V5KSwga2V5KTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNvbnN0IHRBID0gbmV3
IFR5cGVkQXJyYXk7CisgICAgICAgICAgICAgICAgY29uc3QgdGFyZ2V0ID0gT2JqZWN0LmNyZWF0
ZSh0QSk7CisgICAgICAgICAgICAgICAgY29uc3QgcmVjZWl2ZXIgPSB7fTsKKworICAgICAgICAg
ICAgICAgIGFzc2VydChSZWZsZWN0LnNldCh0YXJnZXQsIGtleSwgNCwgcmVjZWl2ZXIpLCBrZXkp
OworICAgICAgICAgICAgICAgIGFzc2VydCghdEEuaGFzT3duUHJvcGVydHkoa2V5KSwga2V5KTsK
KyAgICAgICAgICAgICAgICBhc3NlcnQoIXRhcmdldC5oYXNPd25Qcm9wZXJ0eShrZXkpLCBrZXkp
OworICAgICAgICAgICAgICAgIGFzc2VydCghcmVjZWl2ZXIuaGFzT3duUHJvcGVydHkoa2V5KSwg
a2V5KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKworICAgICAgICBPYmplY3QuZGVmaW5l
UHJvcGVydHkoVHlwZWRBcnJheS5wcm90b3R5cGUsIGtleSwgeworICAgICAgICAgICAgc2V0KCkg
eyB0aHJvdyBuZXcgRXJyb3IoYCR7VHlwZWRBcnJheS5uYW1lfS5wcm90b3R5cGVbJyR7a2V5fSdd
IHNldHRlciBzaG91bGQgYmUgdW5yZWFjaGFibGUhYCk7IH0sCisgICAgICAgICAgICBjb25maWd1
cmFibGU6IHRydWUsCisgICAgICAgIH0pOworICAgICAgICBhc3NlcnRQcm90b3R5cGVQcm9wZXJ0
eUlzVW5yZWFjaGFibGUoKTsKKworICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVHlwZWRB
cnJheS5wcm90b3R5cGUsIGtleSwgeyB3cml0YWJsZTogZmFsc2UgfSk7CisgICAgICAgIGFzc2Vy
dFByb3RvdHlwZVByb3BlcnR5SXNVbnJlYWNoYWJsZSgpOworICAgIH0KK30KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjc2NDk5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1NyBAQAorMjAyMS0wNC0y
MyAgQWxleGV5IFNodmF5a2EgIDxzaHZhaWthbGVzaEBnbWFpbC5jb20+CisKKyAgICAgICAgW0pT
Q10gT3JkaW5hcnlTZXQgc2hvdWxkIGludm9rZSBjdXN0b20gW1tTZXRdXSBtZXRob2RzCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTc5MTYKKworICAg
ICAgICBSZXZpZXdlZCBieSBZdXN1a2UgU3V6dWtpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggZml4
ZXMgcHV0SW5saW5lU2xvdygpIHRvIGhhbmRsZSBzcGVjaWFsIHByb3BlcnRpZXMgKGxpa2UgSlNG
dW5jdGlvbidzICJuYW1lIgorICAgICAgICBhbmQgSlNBcnJheSdzICJsZW5ndGgiKSBpbiBwcm90
b3R5cGUgY2hhaW4uIFdoZW4gc3VjaCBwcm9wZXJ0eSBpcyBlbmNvdW50ZXJlZCwgcHJvdG90eXBl
CisgICAgICAgIGNoYWluIHRyYXZlcnNhbCBpcyBzdG9wcGVkOyBpZiBpdCdzIHJlYWQtb25seSwg
YSBUeXBlRXJyb3IgaXMgdGhyb3duIGluIHN0cmljdCBtb2RlLgorCisgICAgICAgIFRoaXMgY2hh
bmdlIGFkZHMgT3ZlcnJpZGVzUHV0IG91dCBvZiBsaW5lIHR5cGUgaW5mbyBmbGFnLCBhbmQgdXRp
bGl6ZXMgaXQgaW4gcHV0SW5saW5lU2xvdygpCisgICAgICAgIHRvIGludm9rZSBvdmVycmlkZW4g
bWV0aG9kcy4gV2hpbGUgdGhpcyBhcHByb2FjaCByZXF1aXJlcyBwdXQoKSBtZXRob2RzIHRvIGJl
IGF3YXJlIG9mCisgICAgICAgIGFsdGVyZWQgcmVjZWl2ZXJzLCBpdCByZW5kZXJzIHNldmVyYWwg
YmVuZWZpdHM6CisgICAgICAgICAgMS4gcHV0KCkgbWV0aG9kIGNhbiBiZSB1c2VkIGZvciBib3Ro
ICJyZWFsIiBbW1NldF1dIG92ZXJyaWRlcyBhbmQgc3BlY2lhbCBwcm9wZXJ0aWVzLAorICAgICAg
ICAgICAgIHdpdGggaXRzIHJldHVybiB2YWx1ZSByZW1haW5pbmcgYGJvb2xgOworICAgICAgICAg
IDIuIGl0IGlzIHNpbXBsZXIsIGZhc3RlciwgYW5kIG1vcmUgcHJlZGljdGFibGUgdGhhbiBjYWxs
aW5nIFtbR2V0T3duUHJvcGVydHldXSBpbgorICAgICAgICAgICAgIHB1dElubGluZVNsb3coKSBv
ciBhZGRpbmcgZGVmaW5lT3duUHJvcGVydHlWaWFQdXQoKSB0byB0aGUgbWV0aG9kIHRhYmxlLgor
CisgICAgICAgIFJlbW92ZXMgb3JkaW5hcnlTZXRTbG93KCkgZm9yIG5vbi1pbmRleCBwcm9wZXJ0
aWVzLCB3aGljaCBkaWRuJ3QgaW52b2tlIHNvbWUgW1tTZXRdXQorICAgICAgICBtZXRob2RzIGFz
IHdlbGwuIEluc3RlYWQsIGRlZmluZVByb3BlcnR5T25SZWNlaXZlcigpIGlzIGludHJvZHVjZWQg
Zm9yIGFsdGVyZWQgcmVjZWl2ZXJzLAorICAgICAgICB3aGljaCBwZXJmb3JtcyBjb3JyZWN0bHkg
d2hlbiByZWFjaGVkIGJlY2F1c2U6CisgICAgICAgICAgMS4gYWxsIHNwZWNpYWwgcHJvcGVydGll
cyB3ZXJlIGFscmVhZHkgaGFuZGxlZCAodW5sZXNzIGl0J3MgUmVmbGVjdC5zZXQpOworICAgICAg
ICAgIDIuIHBlcmZvcm1pbmcgcHV0RGlyZWN0SW50ZXJuYWwoKSBpcyB1bm9ic2VydmFibGUgKHVu
bGVzcyBQcm94eU9iamVjdCB3YXMgc2Vlbik7CisgICAgICAgICAgMy4gcHV0RGlyZWN0SW50ZXJu
YWwoKSBub3cgZnVsbHkgaW1wbGVtZW50cyBwcm9wZXJ0eSBkZWZpbml0aW9uIG9mIE9yZGluYXJ5
U2V0IFsxXTsKKyAgICAgICAgICA0LiBwdXQoKSBvdmVycmlkZSBpcyByZXF1aXJlZCBpZiBhIHNw
ZWMgZGVmaW5lcyBjdXN0b20gW1tEZWZpbmVPd25Qcm9wZXJ0eV1dLgorCisgICAgICAgIFNpbmNl
IGluZGV4ZWQgcHV0cyBoYW5kbGUgb3ZlcnJpZGVzIC8gYWx0ZXJlZCByZWNlaXZlcnMgcXVpdGUg
ZGlmZmVyZW50bHksIHRoZXkgd2lsbAorICAgICAgICBiZSBmaXhlZCBpbiBhIGZvbGxvdy11cCwg
Y29tcGxldGVseSByZW1vdmluZyBvcmRpbmFyeVNldFNsb3coKS4KKworICAgICAgICBBbHNvLCBi
eSBtZXJnaW5nIHB1dEVudHJ5KCkgLyBwdXRUb1ByaW1pdGl2ZSgpIGludG8gcHV0SW5saW5lU2xv
dygpIGFuZCBpbnRyb2R1Y2luZworICAgICAgICBwdXRJbmxpbmVGYXN0UmVwbGFjaW5nU3RhdGlj
UHJvcGVydHlJZk5lZWRlZCgpIGhlbHBlciwgdGhpcyBwYXRjaCBmaXhlcyBhIGZldyBidWdzOgor
ICAgICAgICAgIDEuIERpcmVjdCBbW1NldF1dIHRvIG5vbi1yZWlmaWVkIHN0YXRpYyBwcm9wZXJ0
eSBub3cgcHJlc2VydmVzIGl0cyBhdHRyaWJ1dGVzIHdoZW4gcmVwbGFjaW5nIFtbVmFsdWVdXS4K
KyAgICAgICAgICAyLiBQcm90b3R5cGUgY2hhaW4gW1tTZXRdXSB0byBub24tcmVpZmllZCBzdGF0
aWMgcHJvcGVydHkgbm93IHRocm93cyBpZiByZWNlaXZlciBpcyBub24tZXh0ZW5zaWJsZS4KKyAg
ICAgICAgICAzLiBOb24tcmVpZmllZCBzdGF0aWMgd3JpdGFibGUgcHJvcGVydHkgbm93IHNoYWRv
d3MgcmVhZC1vbmx5IG9uZSB0aGF0IGlzIGZ1cnRoZXIgaW4gcHJvdG90eXBlIGNoYWluLgorICAg
ICAgICAgIDQuIE5vbi1yZWlmaWVkIHN0YXRpYyBwcm9wZXJ0aWVzIGluIHByb3RvdHlwZSBjaGFp
biBvZiBhIHByaW1pdGl2ZSBhcmUgbm93IGNvbnNpZGVyZWQuCisKKyAgICAgICAgQSBmZXcgaXNz
dWVzIGZpeGVkIHRoYXQgd2VyZSBwcmV2aW91c2x5IHVub2JzZXJ2YWJsZToKKyAgICAgICAgICAx
LiBQcm9wZXJ0eUF0dHJpYnV0ZTo6Q3VzdG9tVmFsdWUgaXMgbm93IHVuc2V0IHdoZW4gYSBzZXR0
ZXItbGVzcyBwcm9wZXJ0eSBpcyByZWFzc2lnbmVkLgorICAgICAgICAgIDIuIHVpbnQ2NF90IHB1
dEJ5SW5kZXhJbmxpbmUoKSBub3cgY2FsbHMgcHV0KCkgdmlhIG1ldGhvZCB0YWJsZSBsaWtlIHVp
bnQzMl90IGNvdW50ZXJwYXJ0LgorCisgICAgICAgIE90aGVyIG5vdGFibGUgcmVmYWN0b3JzOgor
ICAgICAgICAgIDEuIElubGluZXMgY2FsbEN1c3RvbVNldHRlcigpLCBkcm9wcGluZyB3ZWlyZCBU
cmlTdGF0ZSByZXR1cm4gdmFsdWUuCisgICAgICAgICAgMi4gU2ltcGxpZmllcyBpbml0aWFsaXph
dGlvbiBvZiBTdHJpbmdQcm90b3R5cGUuCisgICAgICAgICAgMy4gU2ltcGxpZmllcyBpc1RoaXNW
YWx1ZUFsdGVyZWQoKSB0byBwb2ludGVyIGNvbXBhcmlzb25zIGF0IG5vbi1KU1Byb3h5IGNhbGwg
c2l0ZXMuCisgICAgICAgICAgNC4gUmVtb3ZlcyBkb1B1dFByb3BlcnR5U2VjdXJpdHlDaGVjaygp
IG1ldGhvZHMgYXMgdGhlIHNhbWUgY2hlY2tzIGFyZSBwZXJmb3JtZWQgYnkgcHV0KCkgbWV0aG9k
cy4KKyAgICAgICAgICA1LiBSZW1vdmVzIHByb3RvdHlwZUNoYWluTWF5SW50ZXJjZXB0U3RvcmVU
bygpLCB3aGljaCBwcmV0dHkgbXVjaCBkdXBsaWNhdGVkIGNhblBlcmZvcm1GYXN0UHV0SW5saW5l
KCkuCisgICAgICAgICAgNi4gUmVtb3ZlcyBkdW1teSBKU0FycmF5QnVmZmVyVmlldzo6cHV0KCkg
bWV0aG9kLgorICAgICAgICAgIDcuIFJlbW92ZXMgbm93IHVudXNlZCBsb29rdXBQdXQoKS4KKwor
ICAgICAgICBBbGlnbnMgSlNDIHdpdGggVjggYW5kIFNwaWRlck1vbmtleS4KKworICAgICAgICBU
aGlzIHBhdGNoIGNhcmVmdWxseSBwcmVzZXJ2ZXMgdGhlIGN1cnJlbnQgYmVoYXZpb3Igb2YgUmVm
bGVjdC5zZXQgd2l0aCBDdXN0b21WYWx1ZQorICAgICAgICBhbmQgcHJvdG90eXBlIGNoYWluIFtb
U2V0XV0gdG8gYSBKU0NhbGxiYWNrT2JqZWN0IC8gbGVnYWN5IHBsYXRmb3JtIG9iamVjdC4KKwor
ICAgICAgICBUaGlzIGNoYW5nZSBpcyBwZXJmb3JtYW5jZS1uZXV0cmFsIG9uIC9wdXQvIG1pY3Jv
YmVuY2htYXJrcyBhcyBpdCBkb2Vzbid0IGFmZmVjdAorICAgICAgICBjYWNoaW5nLCBvbmx5IHRo
ZSBzbG93IHBhdGguIFJlZmxlY3Quc2V0IHdpdGggSlNGaW5hbE9iamVjdCByZWNlaXZlciBpcyAx
MzAlIGZhc3Rlci4KKyAgICAgICAgcHV0SW5saW5lU2xvdygpIG1pY3JvYmVuY2htYXJrcyBwcm9n
cmVzcyBieSA0LTE4JS4KKworICAgICAgICBbMV06IGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNz
ZWMtb3JkaW5hcnlzZXR3aXRob3duZGVzY3JpcHRvciAoc3RlcCAzKQorCisgICAgICAgICogQVBJ
L0pTQ2FsbGJhY2tPYmplY3QuaDoKKyAgICAgICAgKiBBUEkvSlNDYWxsYmFja09iamVjdEZ1bmN0
aW9ucy5oOgorICAgICAgICAoSlNDOjpKU0NhbGxiYWNrT2JqZWN0PFBhcmVudD46OnB1dCk6Cisg
ICAgICAgICogQVBJL3Rlc3RzL3Rlc3RhcGlTY3JpcHRzL3Rlc3RhcGkuanM6CisgICAgICAgICog
ZGVidWdnZXIvRGVidWdnZXJTY29wZS5oOgorICAgICAgICAqIHJ1bnRpbWUvQ2xhc3NJbmZvLmg6
CisgICAgICAgICogcnVudGltZS9DbG9uZWRBcmd1bWVudHMuaDoKKyAgICAgICAgKiBydW50aW1l
L0N1c3RvbUdldHRlclNldHRlci5jcHA6CisgICAgICAgIChKU0M6OmNhbGxDdXN0b21TZXR0ZXIp
OiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvQ3VzdG9tR2V0dGVyU2V0dGVyLmg6CisgICAg
ICAgICogcnVudGltZS9FcnJvckNvbnN0cnVjdG9yLmg6CisgICAgICAgICogcnVudGltZS9FcnJv
ckluc3RhbmNlLmg6CisgICAgICAgICogcnVudGltZS9HZW5lcmljQXJndW1lbnRzLmg6CisgICAg
ICAgICogcnVudGltZS9HZW5lcmljQXJndW1lbnRzSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpH
ZW5lcmljQXJndW1lbnRzPFR5cGU+OjpwdXQpOgorICAgICAgICAqIHJ1bnRpbWUvR2V0dGVyU2V0
dGVyLmg6CisgICAgICAgICogcnVudGltZS9KU0FycmF5LmNwcDoKKyAgICAgICAgKEpTQzo6SlNB
cnJheTo6cHV0KToKKyAgICAgICAgKiBydW50aW1lL0pTQXJyYXkuaDoKKyAgICAgICAgKiBydW50
aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmNwcDoKKyAgICAgICAgKEpTQzo6SlNBcnJheUJ1ZmZlclZp
ZXc6OnB1dCk6IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5o
OgorICAgICAgICAqIHJ1bnRpbWUvSlNDSlNWYWx1ZS5jcHA6CisgICAgICAgIChKU0M6OkpTVmFs
dWU6OnB1dFRvUHJpbWl0aXZlKToKKyAgICAgICAgKiBydW50aW1lL0pTQ2VsbC5jcHA6CisgICAg
ICAgIChKU0M6OkpTQ2VsbDo6ZG9QdXRQcm9wZXJ0eVNlY3VyaXR5Q2hlY2spOiBEZWxldGVkLgor
ICAgICAgICAqIHJ1bnRpbWUvSlNDZWxsLmg6CisgICAgICAgICogcnVudGltZS9KU0Z1bmN0aW9u
LmNwcDoKKyAgICAgICAgKEpTQzo6SlNGdW5jdGlvbjo6cHV0KToKKyAgICAgICAgKiBydW50aW1l
L0pTRnVuY3Rpb24uaDoKKyAgICAgICAgKiBydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3
Lmg6CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbExleGljYWxFbnZpcm9ubWVudC5oOgorICAg
ICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpKU0dsb2Jh
bE9iamVjdDo6cHV0KToKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsT2JqZWN0Lmg6CisgICAg
ICAgICogcnVudGltZS9KU0xleGljYWxFbnZpcm9ubWVudC5oOgorICAgICAgICAqIHJ1bnRpbWUv
SlNNb2R1bGVFbnZpcm9ubWVudC5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNNb2R1bGVOYW1lc3Bh
Y2VPYmplY3QuaDoKKyAgICAgICAgKiBydW50aW1lL0pTT2JqZWN0LmNwcDoKKyAgICAgICAgKEpT
Qzo6SlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0
OjpwdXRJbmxpbmVTbG93KToKKyAgICAgICAgKEpTQzo6ZGVmaW5lUHJvcGVydHlPblJlY2VpdmVy
U2xvdyk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpkZWZpbmVQcm9wZXJ0eU9uUmVjZWl2ZXIp
OgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cHV0SW5saW5lRmFzdFJlcGxhY2luZ1N0YXRpY1By
b3BlcnR5SWZOZWVkZWQpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6ZG9QdXRQcm9wZXJ0eVNl
Y3VyaXR5Q2hlY2spOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cHJvdG90eXBl
Q2hhaW5NYXlJbnRlcmNlcHRTdG9yZVRvKTogRGVsZXRlZC4KKyAgICAgICAgKiBydW50aW1lL0pT
T2JqZWN0Lmg6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpwdXRCeUluZGV4SW5saW5lKToKKyAg
ICAgICAgKEpTQzo6SlNPYmplY3Q6Omhhc05vblJlaWZpZWRTdGF0aWNQcm9wZXJ0aWVzKToKKyAg
ICAgICAgKEpTQzo6SlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdCk6CisgICAgICAgIChKU0M6
OkpTT2JqZWN0OjpwdXREaXJlY3QpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6ZG9QdXRQcm9w
ZXJ0eVNlY3VyaXR5Q2hlY2spOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNPYmplY3RJ
bmxpbmVzLmg6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpjYW5QZXJmb3JtRmFzdFB1dElubGlu
ZUV4Y2x1ZGluZ1Byb3RvKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1dElubGluZUZvckpT
T2JqZWN0KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1dElubGluZUZhc3QpOgorICAgICAg
ICAoSlNDOjpKU09iamVjdDo6cHV0RGlyZWN0SW50ZXJuYWwpOgorICAgICAgICAqIHJ1bnRpbWUv
SlNQcm94eS5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNUeXBlSW5mby5oOgorICAgICAgICAoSlND
OjpUeXBlSW5mbzo6aGFzU3RhdGljUHJvcGVydHlUYWJsZSBjb25zdCk6CisgICAgICAgIChKU0M6
OlR5cGVJbmZvOjpvdmVycmlkZXNQdXQgY29uc3QpOgorICAgICAgICAoSlNDOjpUeXBlSW5mbzo6
Z2V0T3duUHJvcGVydHlTbG90TWF5QmVXcm9uZ0Fib3V0RG9udEVudW0gY29uc3QpOgorICAgICAg
ICAoSlNDOjpUeXBlSW5mbzo6aGFzUHV0UHJvcGVydHlTZWN1cml0eUNoZWNrIGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKiBydW50aW1lL0xvb2t1cC5oOgorICAgICAgICAoSlNDOjpwdXRFbnRy
eSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Omxvb2t1cFB1dCk6IERlbGV0ZWQuCisgICAgICAg
ICogcnVudGltZS9Qcm9wZXJ0eVNsb3QuaDoKKyAgICAgICAgKiBydW50aW1lL1Byb3h5T2JqZWN0
LmNwcDoKKyAgICAgICAgKEpTQzo6UHJveHlPYmplY3Q6OnB1dCk6CisgICAgICAgICogcnVudGlt
ZS9Qcm94eU9iamVjdC5oOgorICAgICAgICAqIHJ1bnRpbWUvUHV0UHJvcGVydHlTbG90Lmg6Cisg
ICAgICAgIChKU0M6OlB1dFByb3BlcnR5U2xvdDo6UHV0UHJvcGVydHlTbG90KToKKyAgICAgICAg
KEpTQzo6UHV0UHJvcGVydHlTbG90Ojpjb250ZXh0IGNvbnN0KToKKyAgICAgICAgKEpTQzo6UHV0
UHJvcGVydHlTbG90Ojppc1RhaW50ZWRCeU9wYXF1ZU9iamVjdCBjb25zdCk6CisgICAgICAgIChK
U0M6OlB1dFByb3BlcnR5U2xvdDo6c2V0SXNUYWludGVkQnlPcGFxdWVPYmplY3QpOgorICAgICAg
ICAqIHJ1bnRpbWUvUmVmbGVjdE9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OkpTQ19ERUZJTkVf
SE9TVF9GVU5DVElPTik6CisgICAgICAgICogcnVudGltZS9SZWdFeHBPYmplY3QuY3BwOgorICAg
ICAgICAoSlNDOjpSZWdFeHBPYmplY3Q6OnB1dCk6CisgICAgICAgICogcnVudGltZS9SZWdFeHBP
YmplY3QuaDoKKyAgICAgICAgKiBydW50aW1lL1N0cmluZ09iamVjdC5jcHA6CisgICAgICAgIChK
U0M6OlN0cmluZ09iamVjdDo6cHV0KToKKyAgICAgICAgKiBydW50aW1lL1N0cmluZ09iamVjdC5o
OgorICAgICAgICAqIHJ1bnRpbWUvU3RyaW5nUHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6
U3RyaW5nUHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChKU0M6OlN0cmluZ1By
b3RvdHlwZTo6Y3JlYXRlKToKKyAgICAgICAgKiBydW50aW1lL1N0cmluZ1Byb3RvdHlwZS5oOgor
ICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlLmNwcDoKKyAgICAgICAgKEpTQzo6U3RydWN0dXJl
Ojp2YWxpZGF0ZUZsYWdzKToKKyAgICAgICAgKiBydW50aW1lL1N0cnVjdHVyZS5oOgorICAgICAg
ICAoSlNDOjpTdHJ1Y3R1cmU6Omhhc05vblJlaWZpZWRTdGF0aWNQcm9wZXJ0aWVzIGNvbnN0KToK
KyAgICAgICAgKiB0b29scy9KU0RvbGxhclZNLmNwcDoKKwogMjAyMS0wNC0yMyAgQ29tbWl0IFF1
ZXVlICA8Y29tbWl0LXF1ZXVlQHdlYmtpdC5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcmV2
ZXJ0aW5nIHIyNzY0ODYuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJh
Y2tPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2Fs
bGJhY2tPYmplY3QuaAkocmV2aXNpb24gMjc2NDk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L0FQSS9KU0NhbGxiYWNrT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEyOSw3ICsxMjksNyBA
QCB0ZW1wbGF0ZSA8Y2xhc3MgUGFyZW50PgogY2xhc3MgSlNDYWxsYmFja09iamVjdCBmaW5hbCA6
IHB1YmxpYyBQYXJlbnQgewogcHVibGljOgogICAgIHVzaW5nIEJhc2UgPSBQYXJlbnQ7Ci0gICAg
c3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVy
ZUZsYWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzR2V0T3duU3Bl
Y2lhbFByb3BlcnR5TmFtZXMgfCBPdmVycmlkZXNHZXRDYWxsRGF0YSB8IEludGVyY2VwdHNHZXRP
d25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8gfCBJbXBsZW1lbnRz
SGFzSW5zdGFuY2UgfCBQcm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmcgfCBHZXRPd25Qcm9wZXJ0eVNs
b3RNYXlCZVdyb25nQWJvdXREb250RW51bTsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVk
IFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBPdmVycmlkZXNHZXRPd25Q
cm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNHZXRPd25TcGVjaWFsUHJvcGVydHlOYW1lcyB8IE92ZXJy
aWRlc0dldENhbGxEYXRhIHwgT3ZlcnJpZGVzUHV0IHwgSW50ZXJjZXB0c0dldE93blByb3BlcnR5
U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8IEltcGxlbWVudHNIYXNJbnN0YW5j
ZSB8IFByb2hpYml0c1Byb3BlcnR5Q2FjaGluZyB8IEdldE93blByb3BlcnR5U2xvdE1heUJlV3Jv
bmdBYm91dERvbnRFbnVtOwogICAgIHN0YXRpY19hc3NlcnQoIShTdHJ1Y3R1cmVGbGFncyAmIElt
cGxlbWVudHNEZWZhdWx0SGFzSW5zdGFuY2UpLCAidXNpbmcgY3VzdG9tSGFzSW5zdGFuY2UiKTsK
IAogICAgIH5KU0NhbGxiYWNrT2JqZWN0KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
QVBJL0pTQ2FsbGJhY2tPYmplY3RGdW5jdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3RGdW5jdGlvbnMuaAkocmV2aXNpb24gMjc2
NDk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0RnVuY3Rp
b25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1NCw2ICsyNTQsOSBAQCBib29sIEpTQ2FsbGJhY2tP
YmplY3Q8UGFyZW50Pjo6cHV0KEpTQ2VsCiAgICAgSlNPYmplY3RSZWYgdGhpc1JlZiA9IHRvUmVm
KGpzQ2FzdDxKU09iamVjdCo+KHRoaXNPYmplY3QpKTsKICAgICBSZWZQdHI8T3BhcXVlSlNTdHJp
bmc+IHByb3BlcnR5TmFtZVJlZjsKICAgICBKU1ZhbHVlUmVmIHZhbHVlUmVmID0gdG9SZWYoZ2xv
YmFsT2JqZWN0LCB2YWx1ZSk7CisKKyAgICBpZiAoVU5MSUtFTFkoaXNUaGlzVmFsdWVBbHRlcmVk
KHNsb3QsIHRoaXNPYmplY3QpKSkKKyAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBQ
YXJlbnQ6OnB1dCh0aGlzT2JqZWN0LCBnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgdmFsdWUs
IHNsb3QpKTsKICAgICAKICAgICBpZiAoU3RyaW5nSW1wbCogbmFtZSA9IHByb3BlcnR5TmFtZS51
aWQoKSkgewogICAgICAgICBmb3IgKEpTQ2xhc3NSZWYganNDbGFzcyA9IHRoaXNPYmplY3QtPmNs
YXNzUmVmKCk7IGpzQ2xhc3M7IGpzQ2xhc3MgPSBqc0NsYXNzLT5wYXJlbnRDbGFzcykgewpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy90ZXN0YXBpU2NyaXB0cy90ZXN0YXBp
LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvdGVzdGFw
aVNjcmlwdHMvdGVzdGFwaS5qcwkocmV2aXNpb24gMjc2NDk5KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL0FQSS90ZXN0cy90ZXN0YXBpU2NyaXB0cy90ZXN0YXBpLmpzCSh3b3JraW5nIGNvcHkp
CkBAIC0yMDgsNiArMjA4LDI2IEBAIHNob3VsZEJlKCJzeW1ib2xUb1N0cmluZ1RhZ0Rlc2NyaXB0
b3IuY28KIE15T2JqZWN0W1N5bWJvbC50b1N0cmluZ1RhZ10gPSAiRm9vIjsKIHNob3VsZEJlKCJP
YmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoTXlPYmplY3QpIiwgIltvYmplY3QgRm9vXSIp
OwogCit2YXIgTXlPYmplY3RIZWlyID0gT2JqZWN0LmNyZWF0ZShNeU9iamVjdCk7CitNeU9iamVj
dEhlaXIudGhyb3dPblNldCA9IDIyOwordmFyIE15T2JqZWN0SGVpclRocm93T25TZXREZXNjcmlw
dG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihNeU9iamVjdEhlaXIsICJ0aHJv
d09uU2V0Iik7CitzaG91bGRCZSgidHlwZW9mIE15T2JqZWN0SGVpclRocm93T25TZXREZXNjcmlw
dG9yIiwgIm9iamVjdCIpOworc2hvdWxkQmUoIk15T2JqZWN0SGVpclRocm93T25TZXREZXNjcmlw
dG9yLnZhbHVlIiwgMjIpOworc2hvdWxkQmUoIk15T2JqZWN0SGVpclRocm93T25TZXREZXNjcmlw
dG9yLndyaXRhYmxlIiwgdHJ1ZSk7CitzaG91bGRCZSgiTXlPYmplY3RIZWlyVGhyb3dPblNldERl
c2NyaXB0b3IuZW51bWVyYWJsZSIsIHRydWUpOworc2hvdWxkQmUoIk15T2JqZWN0SGVpclRocm93
T25TZXREZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSIsIHRydWUpOworc2hvdWxkVGhyb3coIk15T2Jq
ZWN0LnRocm93T25TZXQgPSAyMiIpOworCit2YXIgZ2xvYmFsT2JqZWN0SGVpciA9IE9iamVjdC5j
cmVhdGUodGhpcyk7CitnbG9iYWxPYmplY3RIZWlyLmdsb2JhbFN0YXRpY1ZhbHVlMiA9IDMzOwor
dmFyIGdsb2JhbE9iamVjdEhlaXJHbG9iYWxTdGF0aWNWYWx1ZTJEZXNjcmlwdG9yID0gT2JqZWN0
LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWxPYmplY3RIZWlyLCAiZ2xvYmFsU3RhdGlj
VmFsdWUyIik7CitzaG91bGRCZSgidHlwZW9mIGdsb2JhbE9iamVjdEhlaXJHbG9iYWxTdGF0aWNW
YWx1ZTJEZXNjcmlwdG9yIiwgIm9iamVjdCIpOworc2hvdWxkQmUoImdsb2JhbE9iamVjdEhlaXJH
bG9iYWxTdGF0aWNWYWx1ZTJEZXNjcmlwdG9yLnZhbHVlIiwgMzMpOworc2hvdWxkQmUoImdsb2Jh
bE9iamVjdEhlaXJHbG9iYWxTdGF0aWNWYWx1ZTJEZXNjcmlwdG9yLndyaXRhYmxlIiwgdHJ1ZSk7
CitzaG91bGRCZSgiZ2xvYmFsT2JqZWN0SGVpckdsb2JhbFN0YXRpY1ZhbHVlMkRlc2NyaXB0b3Iu
ZW51bWVyYWJsZSIsIHRydWUpOworc2hvdWxkQmUoImdsb2JhbE9iamVjdEhlaXJHbG9iYWxTdGF0
aWNWYWx1ZTJEZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSIsIHRydWUpOworc2hvdWxkQmUoInRoaXMu
Z2xvYmFsU3RhdGljVmFsdWUyIiwgMyk7CisKIGRlcml2ZWQgPSBuZXcgRGVyaXZlZCgpOwogCiBz
aG91bGRCZSgiZGVyaXZlZCBpbnN0YW5jZW9mIERlcml2ZWQiLCB0cnVlKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlclNjb3BlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyU2NvcGUuaAkocmV2aXNpb24g
Mjc2NDk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyU2NvcGUu
aAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNyBAQCBjbGFzcyBKU1Njb3BlOwogY2xhc3Mg
RGVidWdnZXJTY29wZSBmaW5hbCA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKIHB1YmxpYzoK
ICAgICB1c2luZyBCYXNlID0gSlNOb25GaW5hbE9iamVjdDsKLSAgICBzdGF0aWMgY29uc3RleHBy
IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBPdmVycmlk
ZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eU5hbWVzOworICAg
IHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1
cmVGbGFncyB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRlc0dldE93blBy
b3BlcnR5TmFtZXMgfCBPdmVycmlkZXNQdXQ7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxs
VHlwZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4KICAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNw
YWNlRm9yKFZNJiB2bSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NsYXNz
SW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NsYXNz
SW5mby5oCShyZXZpc2lvbiAyNzY0OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9DbGFzc0luZm8uaAkod29ya2luZyBjb3B5KQpAQCAtNjgsOSArNjgsNiBAQCBzdHJ1Y3QgTWV0
aG9kVGFibGUgewogICAgIHVzaW5nIEdldE93blByb3BlcnR5U2xvdEJ5SW5kZXhGdW5jdGlvblB0
ciA9IGJvb2wgKCopKEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCB1bnNpZ25lZCwgUHJvcGVy
dHlTbG90Jik7CiAgICAgR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEZ1bmN0aW9uUHRyIE1FVEhP
RF9UQUJMRV9FTlRSWShnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KTsKIAotICAgIHVzaW5nIERv
UHV0UHJvcGVydHlTZWN1cml0eUNoZWNrRnVuY3Rpb25QdHIgPSB2b2lkICgqKShKU09iamVjdCos
IEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBQdXRQcm9wZXJ0eVNsb3QmKTsKLSAgICBE
b1B1dFByb3BlcnR5U2VjdXJpdHlDaGVja0Z1bmN0aW9uUHRyIE1FVEhPRF9UQUJMRV9FTlRSWShk
b1B1dFByb3BlcnR5U2VjdXJpdHlDaGVjayk7Ci0KICAgICB1c2luZyBUb1RoaXNGdW5jdGlvblB0
ciA9IEpTVmFsdWUgKCopKEpTQ2VsbCosIEpTR2xvYmFsT2JqZWN0KiwgRUNNQU1vZGUpOwogICAg
IFRvVGhpc0Z1bmN0aW9uUHRyIE1FVEhPRF9UQUJMRV9FTlRSWSh0b1RoaXMpOwogCkBAIC0xNTgs
NyArMTU1LDYgQEAgc3RydWN0IE1ldGhvZFRhYmxlIHsKICAgICAgICAgJkNsYXNzTmFtZTo6ZGVs
ZXRlUHJvcGVydHlCeUluZGV4LCBcCiAgICAgICAgICZDbGFzc05hbWU6OmdldE93blByb3BlcnR5
U2xvdCwgXAogICAgICAgICAmQ2xhc3NOYW1lOjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4LCBc
Ci0gICAgICAgICZDbGFzc05hbWU6OmRvUHV0UHJvcGVydHlTZWN1cml0eUNoZWNrLCBcCiAgICAg
ICAgICZDbGFzc05hbWU6OnRvVGhpcywgXAogICAgICAgICAmQ2xhc3NOYW1lOjpkZWZhdWx0VmFs
dWUsIFwKICAgICAgICAgJkNsYXNzTmFtZTo6Z2V0T3duUHJvcGVydHlOYW1lcywgXApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xvbmVkQXJndW1lbnRzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xvbmVkQXJndW1lbnRzLmgJKHJl
dmlzaW9uIDI3NjQ5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Nsb25lZEFy
Z3VtZW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw3IEBAIG5hbWVzcGFjZSBKU0Mg
ewogY2xhc3MgQ2xvbmVkQXJndW1lbnRzIGZpbmFsIDogcHVibGljIEpTTm9uRmluYWxPYmplY3Qg
ewogcHVibGljOgogICAgIHVzaW5nIEJhc2UgPSBKU05vbkZpbmFsT2JqZWN0OwotICAgIHN0YXRp
YyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFn
cyB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRlc0dldE93blNwZWNpYWxQ
cm9wZXJ0eU5hbWVzOworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxh
Z3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8
IE92ZXJyaWRlc0dldE93blNwZWNpYWxQcm9wZXJ0eU5hbWVzIHwgT3ZlcnJpZGVzUHV0OwogCiAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+CiAgICAg
c3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9DdXN0b21HZXR0ZXJTZXR0ZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0N1c3RvbUdldHRlclNldHRlci5jcHAJKHJl
dmlzaW9uIDI3NjQ5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0N1c3RvbUdl
dHRlclNldHRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDI4ICsyNiwxMCBAQAogI2luY2x1
ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkN1c3RvbUdldHRlclNldHRlci5oIgogCi0jaW5jbHVk
ZSAiSlNDSlNWYWx1ZUlubGluZXMuaCIKLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgotCiBu
YW1lc3BhY2UgSlNDIHsKIAogU1RBVElDX0FTU0VSVF9JU19UUklWSUFMTFlfREVTVFJVQ1RJQkxF
KEN1c3RvbUdldHRlclNldHRlcik7CiAKIGNvbnN0IENsYXNzSW5mbyBDdXN0b21HZXR0ZXJTZXR0
ZXI6OnNfaW5mbyA9IHsgIkN1c3RvbUdldHRlclNldHRlciIsIG51bGxwdHIsIG51bGxwdHIsIG51
bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoQ3VzdG9tR2V0dGVyU2V0dGVyKSB9OwogCi1UcmlT
dGF0ZSBjYWxsQ3VzdG9tU2V0dGVyKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEN1c3Rv
bUdldHRlclNldHRlcjo6Q3VzdG9tU2V0dGVyIHNldHRlciwgYm9vbCBpc0FjY2Vzc29yLCBKU09i
amVjdCogc2xvdEJhc2UsIEpTVmFsdWUgdGhpc1ZhbHVlLCBKU1ZhbHVlIHZhbHVlLCBQcm9wZXJ0
eU5hbWUgcHJvcGVydHlOYW1lKQotewotICAgIGlmIChpc0FjY2Vzc29yKSB7Ci0gICAgICAgIGlm
ICghc2V0dGVyKQotICAgICAgICAgICAgcmV0dXJuIFRyaVN0YXRlOjpGYWxzZTsKLSAgICAgICAg
c2V0dGVyKGdsb2JhbE9iamVjdCwgSlNWYWx1ZTo6ZW5jb2RlKHRoaXNWYWx1ZSksIEpTVmFsdWU6
OmVuY29kZSh2YWx1ZSksIHByb3BlcnR5TmFtZSk7Ci0gICAgICAgIC8vIEFsd2F5cyByZXR1cm4g
dHJ1ZSBpZiB0aGVyZSBpcyBhIHNldHRlciBhbmQgaXQgaXMgb2JzZXJ2ZWQgYXMgYW4gYWNjZXNz
b3IgdG8gdXNlcnMuCi0gICAgICAgIHJldHVybiBUcmlTdGF0ZTo6VHJ1ZTsKLSAgICB9Ci0KLSAg
ICBpZiAoIXNldHRlcikKLSAgICAgICAgcmV0dXJuIFRyaVN0YXRlOjpJbmRldGVybWluYXRlOwot
ICAgIHJldHVybiB0cmlTdGF0ZShzZXR0ZXIoZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlOjplbmNvZGUo
c2xvdEJhc2UpLCBKU1ZhbHVlOjplbmNvZGUodmFsdWUpLCBwcm9wZXJ0eU5hbWUpKTsKLX0KLQog
fSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9D
dXN0b21HZXR0ZXJTZXR0ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9DdXN0b21HZXR0ZXJTZXR0ZXIuaAkocmV2aXNpb24gMjc2NDk5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ3VzdG9tR2V0dGVyU2V0dGVyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTc2LDYgKzc2LDQgQEAgcHJpdmF0ZToKICAgICBDdXN0b21TZXR0ZXIgbV9zZXR0ZXI7
CiB9OwogCi1KU19FWFBPUlRfUFJJVkFURSBUcmlTdGF0ZSBjYWxsQ3VzdG9tU2V0dGVyKEpTR2xv
YmFsT2JqZWN0KiwgQ3VzdG9tR2V0dGVyU2V0dGVyOjpDdXN0b21TZXR0ZXIsIGJvb2wgaXNBY2Nl
c3NvciwgSlNPYmplY3QqIHNsb3RCYXNlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgSlNWYWx1ZSwgUHJv
cGVydHlOYW1lKTsKLQogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9FcnJvckNvbnN0cnVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JDb25zdHJ1Y3Rvci5oCShyZXZpc2lvbiAyNzY0OTkp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvckNvbnN0cnVjdG9yLmgJKHdv
cmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAgY2xhc3MgR2V0dGVyU2V0dGVyOwogY2xhc3Mg
RXJyb3JDb25zdHJ1Y3RvciBmaW5hbCA6IHB1YmxpYyBJbnRlcm5hbEZ1bmN0aW9uIHsKIHB1Ymxp
YzoKICAgICB1c2luZyBCYXNlID0gSW50ZXJuYWxGdW5jdGlvbjsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBPdmVy
cmlkZXNQdXQ7CiAKICAgICBzdGF0aWMgRXJyb3JDb25zdHJ1Y3RvciogY3JlYXRlKFZNJiB2bSwg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEVycm9yUHJvdG90eXBlKiBlcnJvclByb3RvdHlwZSwgR2V0
dGVyU2V0dGVyKikKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9F
cnJvckluc3RhbmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvRXJyb3JJbnN0YW5jZS5oCShyZXZpc2lvbiAyNzY0OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9FcnJvckluc3RhbmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMw
LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiBjbGFzcyBFcnJvckluc3RhbmNlIDogcHVibGljIEpTTm9u
RmluYWxPYmplY3QgewogcHVibGljOgogICAgIHVzaW5nIEJhc2UgPSBKU05vbkZpbmFsT2JqZWN0
OwotICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpT
dHJ1Y3R1cmVGbGFncyB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRlc0dl
dE93blNwZWNpYWxQcm9wZXJ0eU5hbWVzOworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQg
U3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IE92ZXJyaWRlc0dldE93blBy
b3BlcnR5U2xvdCB8IE92ZXJyaWRlc0dldE93blNwZWNpYWxQcm9wZXJ0eU5hbWVzIHwgT3ZlcnJp
ZGVzUHV0OwogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0Rlc3RydWN0aW9uID0gdHJ1
ZTsKIAogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKiBjZWxsKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50cy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNBcmd1bWVudHMuaAkocmV2aXNp
b24gMjc2NDk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3Vt
ZW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw3IEBAIHRlbXBsYXRlPHR5cGVuYW1l
IFR5cGU+CiBjbGFzcyBHZW5lcmljQXJndW1lbnRzIDogcHVibGljIEpTTm9uRmluYWxPYmplY3Qg
ewogcHVibGljOgogICAgIHR5cGVkZWYgSlNOb25GaW5hbE9iamVjdCBCYXNlOwotICAgIHN0YXRp
YyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFn
cyB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5
TmFtZXMgfCBJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3Ro
SXNOb3RaZXJvOworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3Mg
PSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92
ZXJyaWRlc0dldE93blByb3BlcnR5TmFtZXMgfCBPdmVycmlkZXNQdXQgfCBJbnRlcmNlcHRzR2V0
T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvOwogCiBwcm90ZWN0
ZWQ6CiAgICAgR2VuZXJpY0FyZ3VtZW50cyhWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50c0lubGlu
ZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmlj
QXJndW1lbnRzSW5saW5lcy5oCShyZXZpc2lvbiAyNzY0OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9HZW5lcmljQXJndW1lbnRzSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xMzQsOCArMTM0LDggQEAgYm9vbCBHZW5lcmljQXJndW1lbnRzPFR5cGU+OjpwdXQoSlNDZWxs
KgogCiAgICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtYXJndW1lbnRz
LWV4b3RpYy1vYmplY3RzLXNldC1wLXYtcmVjZWl2ZXIKICAgICAvLyBGYWxsIGJhY2sgdG8gdGhl
IE9yZGluYXJ5U2V0IHdoZW4gdGhlIHJlY2VpdmVyIGlzIGFsdGVyZWQgZnJvbSB0aGUgdGhpc09i
amVjdC4KLSAgICBpZiAoVU5MSUtFTFkoaXNUaGlzVmFsdWVBbHRlcmVkKHNsb3QsIHRoaXNPYmpl
Y3QpKSkKLSAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBvcmRpbmFyeVNldFNsb3co
Z2xvYmFsT2JqZWN0LCB0aGlzT2JqZWN0LCBpZGVudCwgdmFsdWUsIHNsb3QudGhpc1ZhbHVlKCks
IHNsb3QuaXNTdHJpY3RNb2RlKCkpKTsKKyAgICBpZiAoVU5MSUtFTFkoc2xvdC50aGlzVmFsdWUo
KSAhPSB0aGlzT2JqZWN0KSkKKyAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBCYXNl
OjpwdXQodGhpc09iamVjdCwgZ2xvYmFsT2JqZWN0LCBpZGVudCwgdmFsdWUsIHNsb3QpKTsKICAg
ICAKICAgICBPcHRpb25hbDx1aW50MzJfdD4gaW5kZXggPSBwYXJzZUluZGV4KGlkZW50KTsKICAg
ICBpZiAoaW5kZXggJiYgdGhpc09iamVjdC0+aXNNYXBwZWRBcmd1bWVudChpbmRleC52YWx1ZSgp
KSkgewpAQCAtMTQzLDkgKzE0Myw3IEBAIGJvb2wgR2VuZXJpY0FyZ3VtZW50czxUeXBlPjo6cHV0
KEpTQ2VsbCoKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgYXV0byByZXN1bHQg
PSBCYXNlOjpwdXQodGhpc09iamVjdCwgZ2xvYmFsT2JqZWN0LCBpZGVudCwgdmFsdWUsIHNsb3Qp
OwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGZhbHNlKTsKLSAgICBSRUxFQVNFX0FO
RF9SRVRVUk4oc2NvcGUsIHJlc3VsdCk7CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBC
YXNlOjpwdXQodGhpc09iamVjdCwgZ2xvYmFsT2JqZWN0LCBpZGVudCwgdmFsdWUsIHNsb3QpKTsK
IH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVHlwZT4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0dldHRlclNldHRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0dldHRlclNldHRlci5oCShyZXZpc2lvbiAyNzY0OTkpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9HZXR0ZXJTZXR0ZXIuaAkod29ya2luZyBjb3B5KQpAQCAt
NTQsNyArNTQsNyBAQCBwcml2YXRlOgogCiBwdWJsaWM6CiAKLSAgICBzdGF0aWMgY29uc3RleHBy
IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBPdmVycmlk
ZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBTdHJ1Y3R1cmVJc0ltbW9ydGFsOworICAgIHN0YXRpYyBj
b25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8
IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRlc1B1dCB8IFN0cnVjdHVyZUlz
SW1tb3J0YWw7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nl
c3M+CiAgICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcAkocmV2aXNpb24gMjc2NDk5
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTIzOCwxMCArMjM4LDYgQEAgYm9vbCBKU0FycmF5OjpwdXQoSlNDZWxsKiBjZWxs
LCBKU0dsb2JhbAogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAog
ICAgIEpTQXJyYXkqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNBcnJheSo+KGNlbGwpOwotCi0gICAg
aWYgKFVOTElLRUxZKGlzVGhpc1ZhbHVlQWx0ZXJlZChzbG90LCB0aGlzT2JqZWN0KSkpCi0gICAg
ICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgb3JkaW5hcnlTZXRTbG93KGdsb2JhbE9iamVj
dCwgdGhpc09iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdC50aGlzVmFsdWUoKSwgc2xv
dC5pc1N0cmljdE1vZGUoKSkpOwotCiAgICAgdGhpc09iamVjdC0+ZW5zdXJlV3JpdGFibGUodm0p
OwogCiAgICAgaWYgKHByb3BlcnR5TmFtZSA9PSB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgpIHsK
QEAgLTI1MSw2ICsyNDcsOSBAQCBib29sIEpTQXJyYXk6OnB1dChKU0NlbGwqIGNlbGwsIEpTR2xv
YmFsCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KIAorICAgICAgICBpZiAo
VU5MSUtFTFkoc2xvdC50aGlzVmFsdWUoKSAhPSB0aGlzT2JqZWN0KSkKKyAgICAgICAgICAgIFJF
TEVBU0VfQU5EX1JFVFVSTihzY29wZSwgSlNPYmplY3Q6OmRlZmluZVByb3BlcnR5T25SZWNlaXZl
cihnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpKTsKKwogICAgICAgICB1
bnNpZ25lZCBuZXdMZW5ndGggPSB2YWx1ZS50b1VJbnQzMihnbG9iYWxPYmplY3QpOwogICAgICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBmYWxzZSk7CiAgICAgICAgIGRvdWJsZSB2YWx1
ZUFzTnVtYmVyID0gdmFsdWUudG9OdW1iZXIoZ2xvYmFsT2JqZWN0KTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmgJKHJldmlzaW9uIDI3NjQ5OSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtNDAs
NyArNDAsNyBAQCBjbGFzcyBKU0FycmF5IDogcHVibGljIEpTTm9uRmluYWxPYmplY3QgCiAKIHB1
YmxpYzoKICAgICB0eXBlZGVmIEpTTm9uRmluYWxPYmplY3QgQmFzZTsKLSAgICBzdGF0aWMgY29u
c3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBP
dmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNHZXRPd25TcGVjaWFsUHJvcGVy
dHlOYW1lczsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0g
QmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVy
cmlkZXNHZXRPd25TcGVjaWFsUHJvcGVydHlOYW1lcyB8IE92ZXJyaWRlc1B1dDsKIAogICAgIHN0
YXRpYyBzaXplX3QgYWxsb2NhdGlvblNpemUoQ2hlY2tlZDxzaXplX3Q+IGlubGluZUNhcGFjaXR5
KQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZm
ZXJWaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0FycmF5QnVmZmVyVmlldy5jcHAJKHJldmlzaW9uIDI3NjQ5OSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTcyLDE4ICsxNzIsNiBAQCB2b2lkIEpTQXJyYXlCdWZmZXJWaWV3Ojp2aXNpdENoaWxkcmVuSW1w
CiAKIERFRklORV9WSVNJVF9DSElMRFJFTihKU0FycmF5QnVmZmVyVmlldyk7CiAKLWJvb2wgSlNB
cnJheUJ1ZmZlclZpZXc6OnB1dCgKLSAgICBKU0NlbGwqIGNlbGwsIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsCi0g
ICAgUHV0UHJvcGVydHlTbG90JiBzbG90KQotewotICAgIEpTQXJyYXlCdWZmZXJWaWV3KiB0aGlz
T2JqZWN0ID0ganNDYXN0PEpTQXJyYXlCdWZmZXJWaWV3Kj4oY2VsbCk7Ci0KLSAgICBpZiAoVU5M
SUtFTFkoaXNUaGlzVmFsdWVBbHRlcmVkKHNsb3QsIHRoaXNPYmplY3QpKSkKLSAgICAgICAgcmV0
dXJuIG9yZGluYXJ5U2V0U2xvdyhnbG9iYWxPYmplY3QsIHRoaXNPYmplY3QsIHByb3BlcnR5TmFt
ZSwgdmFsdWUsIHNsb3QudGhpc1ZhbHVlKCksIHNsb3QuaXNTdHJpY3RNb2RlKCkpOwotICAgIAot
ICAgIHJldHVybiBCYXNlOjpwdXQodGhpc09iamVjdCwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5h
bWUsIHZhbHVlLCBzbG90KTsKLX0KLQogQXJyYXlCdWZmZXIqIEpTQXJyYXlCdWZmZXJWaWV3Ojp1
bnNoYXJlZEJ1ZmZlcigpCiB7CiAgICAgQXJyYXlCdWZmZXIqIHJlc3VsdCA9IHBvc3NpYmx5U2hh
cmVkQnVmZmVyKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5
QnVmZmVyVmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTQXJyYXlCdWZmZXJWaWV3LmgJKHJldmlzaW9uIDI3NjQ5OSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTE2
OSw4ICsxNjksNiBAQCBwcm90ZWN0ZWQ6CiAgICAgCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgSlNB
cnJheUJ1ZmZlclZpZXcoVk0mLCBDb25zdHJ1Y3Rpb25Db250ZXh0Jik7CiAgICAgSlNfRVhQT1JU
X1BSSVZBVEUgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOwotICAgIAotICAgIHN0YXRpYyBib29s
IHB1dChKU0NlbGwqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0
UHJvcGVydHlTbG90Jik7CiAKICAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogICAgIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNWYWx1ZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNWYWx1ZS5jcHAJKHJldmlz
aW9uIDI3NjQ5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0pTVmFsdWUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTIsNyArMjEyLDcgQEAgSlNPYmplY3QqIEpTVmFsdWU6
OnN5bnRoZXNpemVQcm90b3R5cGUoSgogICAgIHJldHVybiBudWxscHRyOwogfQogCi0vLyBFQ01B
IDguNy4yCisvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9yZGluYXJ5c2V0CiBib29s
IEpTVmFsdWU6OnB1dFRvUHJpbWl0aXZlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFBy
b3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYg
c2xvdCkKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CkBAIC0yMjEsNjkgKzIy
MSwxNCBAQCBib29sIEpTVmFsdWU6OnB1dFRvUHJpbWl0aXZlKEpTR2xvYmFsT2JqCiAgICAgaWYg
KE9wdGlvbmFsPHVpbnQzMl90PiBpbmRleCA9IHBhcnNlSW5kZXgocHJvcGVydHlOYW1lKSkKICAg
ICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBwdXRUb1ByaW1pdGl2ZUJ5SW5kZXgoZ2xv
YmFsT2JqZWN0LCBpbmRleC52YWx1ZSgpLCB2YWx1ZSwgc2xvdC5pc1N0cmljdE1vZGUoKSkpOwog
CisgICAgaWYgKGlzU3RyaW5nKCkgJiYgcHJvcGVydHlOYW1lLnVpZCgpID09IHZtLnByb3BlcnR5
TmFtZXMtPmxlbmd0aC5pbXBsKCkpCisgICAgICAgIHJldHVybiB0eXBlRXJyb3IoZ2xvYmFsT2Jq
ZWN0LCBzY29wZSwgc2xvdC5pc1N0cmljdE1vZGUoKSwgUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJy
b3IpOwogICAgIC8vIENoZWNrIGlmIHRoZXJlIGFyZSBhbnkgc2V0dGVycyBvciBnZXR0ZXJzIGlu
IHRoZSBwcm90b3R5cGUgY2hhaW4KICAgICBKU09iamVjdCogb2JqID0gc3ludGhlc2l6ZVByb3Rv
dHlwZShnbG9iYWxPYmplY3QpOwogICAgIEVYQ0VQVElPTl9BU1NFUlQoISFzY29wZS5leGNlcHRp
b24oKSA9PSAhb2JqKTsKICAgICBpZiAoVU5MSUtFTFkoIW9iaikpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICBKU1ZhbHVlIHByb3RvdHlwZTsKLSAgICBpZiAocHJvcGVydHlOYW1lICE9IHZt
LnByb3BlcnR5TmFtZXMtPnVuZGVyc2NvcmVQcm90bykgewotICAgICAgICB3aGlsZSAodHJ1ZSkg
ewotICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBvYmotPnN0cnVjdHVyZSh2bSk7
Ci0gICAgICAgICAgICBpZiAoc3RydWN0dXJlLT5oYXNSZWFkT25seU9yR2V0dGVyU2V0dGVyUHJv
cGVydGllc0V4Y2x1ZGluZ1Byb3RvKCkgfHwgc3RydWN0dXJlLT50eXBlSW5mbygpLmhhc1B1dFBy
b3BlcnR5U2VjdXJpdHlDaGVjaygpKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgaWYgKG9iai0+dHlwZSgpID09IFByb3h5T2JqZWN0VHlwZSkgewotICAgICAgICAgICAgICAg
IGF1dG8qIHByb3h5ID0ganNDYXN0PFByb3h5T2JqZWN0Kj4ob2JqKTsKLSAgICAgICAgICAgICAg
ICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIHByb3h5LT5Qcm94eU9iamVjdDo6cHV0KHByb3h5
LCBnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpKTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIHByb3RvdHlwZSA9IG9iai0+Z2V0UHJvdG90eXBlKHZtLCBnbG9iYWxP
YmplY3QpOwotICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZmFsc2UpOwot
Ci0gICAgICAgICAgICBpZiAocHJvdG90eXBlLmlzTnVsbCgpKQotICAgICAgICAgICAgICAgIHJl
dHVybiB0eXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgc2xvdC5pc1N0cmljdE1vZGUoKSwg
UmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpOwotICAgICAgICAgICAgb2JqID0gYXNPYmplY3Qo
cHJvdG90eXBlKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGZvciAoOyA7IG9iaiA9IGFzT2Jq
ZWN0KHByb3RvdHlwZSkpIHsKLSAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBvYmotPnN0
cnVjdHVyZSh2bSk7Ci0gICAgICAgIGlmIChVTkxJS0VMWShzdHJ1Y3R1cmUtPnR5cGVJbmZvKCku
aGFzUHV0UHJvcGVydHlTZWN1cml0eUNoZWNrKCkpKSB7Ci0gICAgICAgICAgICBvYmotPm1ldGhv
ZFRhYmxlKHZtKS0+ZG9QdXRQcm9wZXJ0eVNlY3VyaXR5Q2hlY2sob2JqLCBnbG9iYWxPYmplY3Qs
IHByb3BlcnR5TmFtZSwgc2xvdCk7Ci0gICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCBmYWxzZSk7Ci0gICAgICAgIH0KLSAgICAgICAgdW5zaWduZWQgYXR0cmlidXRlczsKLSAg
ICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0dXJlLT5nZXQodm0sIHByb3BlcnR5
TmFtZSwgYXR0cmlidXRlcyk7Ci0gICAgICAgIGlmIChvZmZzZXQgIT0gaW52YWxpZE9mZnNldCkg
ewotICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZXMgJiBQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9u
bHkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3Bl
LCBzbG90LmlzU3RyaWN0TW9kZSgpLCBSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcik7Ci0KLSAg
ICAgICAgICAgIEpTVmFsdWUgZ3MgPSBvYmotPmdldERpcmVjdChvZmZzZXQpOwotICAgICAgICAg
ICAgaWYgKGdzLmlzR2V0dGVyU2V0dGVyKCkpCi0gICAgICAgICAgICAgICAgUkVMRUFTRV9BTkRf
UkVUVVJOKHNjb3BlLCBjYWxsU2V0dGVyKGdsb2JhbE9iamVjdCwgKnRoaXMsIGdzLCB2YWx1ZSwg
c2xvdC5pc1N0cmljdE1vZGUoKSA/IEVDTUFNb2RlOjpzdHJpY3QoKSA6IEVDTUFNb2RlOjpzbG9w
cHkoKSkpOwotCi0gICAgICAgICAgICBpZiAoZ3MuaXNDdXN0b21HZXR0ZXJTZXR0ZXIoKSkgewot
ICAgICAgICAgICAgICAgIGF1dG8gc2V0dGVyID0ganNDYXN0PEN1c3RvbUdldHRlclNldHRlcio+
KGdzLmFzQ2VsbCgpKS0+c2V0dGVyKCk7Ci0gICAgICAgICAgICAgICAgYm9vbCBpc0FjY2Vzc29y
ID0gYXR0cmlidXRlcyAmIFByb3BlcnR5QXR0cmlidXRlOjpDdXN0b21BY2Nlc3NvcjsKLSAgICAg
ICAgICAgICAgICBhdXRvIHJlc3VsdCA9IGNhbGxDdXN0b21TZXR0ZXIoZ2xvYmFsT2JqZWN0LCBz
ZXR0ZXIsIGlzQWNjZXNzb3IsIG9iaiwgc2xvdC50aGlzVmFsdWUoKSwgdmFsdWUsIHByb3BlcnR5
TmFtZSk7Ci0gICAgICAgICAgICAgICAgaWYgKHJlc3VsdCAhPSBUcmlTdGF0ZTo6SW5kZXRlcm1p
bmF0ZSkKLSAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCByZXN1
bHQgPT0gVHJpU3RhdGU6OlRydWUpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBJ
ZiB0aGVyZSdzIGFuIGV4aXN0aW5nIHByb3BlcnR5IG9uIHRoZSBvYmplY3Qgb3Igb25lIG9mIGl0
cyAKLSAgICAgICAgICAgIC8vIHByb3RvdHlwZXMgaXQgc2hvdWxkIGJlIHJlcGxhY2VkLCBzbyBi
cmVhayBoZXJlLgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKG9i
ai0+dHlwZSgpID09IFByb3h5T2JqZWN0VHlwZSkgewotICAgICAgICAgICAgYXV0byogcHJveHkg
PSBqc0Nhc3Q8UHJveHlPYmplY3QqPihvYmopOwotICAgICAgICAgICAgUkVMRUFTRV9BTkRfUkVU
VVJOKHNjb3BlLCBwcm94eS0+UHJveHlPYmplY3Q6OnB1dChwcm94eSwgZ2xvYmFsT2JqZWN0LCBw
cm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KSk7Ci0gICAgICAgIH0KLSAgICAgICAgcHJvdG90eXBl
ID0gb2JqLT5nZXRQcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCk7Ci0gICAgICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIGZhbHNlKTsKLSAgICAgICAgaWYgKHByb3RvdHlwZS5pc051bGwo
KSkKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gdHlwZUVycm9y
KGdsb2JhbE9iamVjdCwgc2NvcGUsIHNsb3QuaXNTdHJpY3RNb2RlKCksIFJlYWRvbmx5UHJvcGVy
dHlXcml0ZUVycm9yKTsKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIG9iai0+bWV0aG9k
VGFibGUodm0pLT5wdXQob2JqLCBnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNs
b3QpKTsKIH0KIAogYm9vbCBKU1ZhbHVlOjpwdXRUb1ByaW1pdGl2ZUJ5SW5kZXgoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVl
LCBib29sIHNob3VsZFRocm93KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNDZWxsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0NlbGwuY3BwCShyZXZpc2lvbiAyNzY0OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0NlbGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDEsMTEgKzIwMSw2IEBAIGJvb2wg
SlNDZWxsOjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEoKICAgICByZXR1cm4gZmFsc2U7CiB9
CiAKLXZvaWQgSlNDZWxsOjpkb1B1dFByb3BlcnR5U2VjdXJpdHlDaGVjayhKU09iamVjdCosIEpT
R2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBQdXRQcm9wZXJ0eVNsb3QmKQotewotICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci19Ci0KIHZvaWQgSlNDZWxsOjpnZXRPd25Qcm9w
ZXJ0eU5hbWVzKEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWVBcnJheSYs
IERvbnRFbnVtUHJvcGVydGllc01vZGUpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCShyZXZpc2lv
biAyNzY0OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAkod29y
a2luZyBjb3B5KQpAQCAtMjU3LDcgKzI1Nyw2IEBAIHByb3RlY3RlZDoKICAgICBzdGF0aWMgYm9v
bCBkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlO
YW1lLCBjb25zdCBQcm9wZXJ0eURlc2NyaXB0b3ImLCBib29sIHNob3VsZFRocm93KTsKICAgICBz
dGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCos
IFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJv
cGVydHlTbG90QnlJbmRleChKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgdW5zaWduZWQgcHJv
cGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKLSAgICBzdGF0aWMgTk9fUkVUVVJOX0RVRV9UT19D
UkFTSCB2b2lkIGRvUHV0UHJvcGVydHlTZWN1cml0eUNoZWNrKEpTT2JqZWN0KiwgSlNHbG9iYWxP
YmplY3QqLCBQcm9wZXJ0eU5hbWUsIFB1dFByb3BlcnR5U2xvdCYpOwogCiBwcml2YXRlOgogICAg
IGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcAkocmV2aXNpb24gMjc2NDk5KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTUxOSwxMCArNTE5LDYgQEAgYm9vbCBKU0Z1bmN0aW9uOjpwdXQoSlNDZWxsKiBjZWxs
LCBKU0dsbwogICAgICAgICAgICAgcmFyZURhdGEtPnNldEhhc01vZGlmaWVkTmFtZUZvck5vbkhv
c3RGdW5jdGlvbigpOwogICAgIH0KIAotICAgIGlmIChVTkxJS0VMWShpc1RoaXNWYWx1ZUFsdGVy
ZWQoc2xvdCwgdGhpc09iamVjdCkpKQotICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUs
IG9yZGluYXJ5U2V0U2xvdyhnbG9iYWxPYmplY3QsIHRoaXNPYmplY3QsIHByb3BlcnR5TmFtZSwg
dmFsdWUsIHNsb3QudGhpc1ZhbHVlKCksIHNsb3QuaXNTdHJpY3RNb2RlKCkpKTsKLQotCiAgICAg
aWYgKHRoaXNPYmplY3QtPmlzSG9zdE9yQnVpbHRpbkZ1bmN0aW9uKCkpIHsKICAgICAgICAgUHJv
cGVydHlTdGF0dXMgcHJvcGVydHlUeXBlID0gdGhpc09iamVjdC0+cmVpZnlMYXp5UHJvcGVydHlG
b3JIb3N0T3JCdWlsdGluSWZOZWVkZWQodm0sIGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lKTsK
ICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZmFsc2UpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uaAkocmV2aXNpb24gMjc2NDk5KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5oCSh3b3JraW5nIGNv
cHkpCkBAIC03MCw3ICs3MCw3IEBAIHB1YmxpYzoKICAgICB9CiAgICAgCiAgICAgdHlwZWRlZiBK
U0NhbGxlZSBCYXNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxh
Z3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8
IE92ZXJyaWRlc0dldE93blNwZWNpYWxQcm9wZXJ0eU5hbWVzIHwgT3ZlcnJpZGVzR2V0Q2FsbERh
dGE7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6
OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVz
R2V0T3duU3BlY2lhbFByb3BlcnR5TmFtZXMgfCBPdmVycmlkZXNHZXRDYWxsRGF0YSB8IE92ZXJy
aWRlc1B1dDsKIAogICAgIHN0YXRpYyBzaXplX3QgYWxsb2NhdGlvblNpemUoQ2hlY2tlZDxzaXpl
X3Q+IGlubGluZUNhcGFjaXR5KQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXcuaAkocmV2aXNpb24g
Mjc2NDk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRB
cnJheVZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAtOTksNyArOTksNyBAQCBwdWJsaWM6CiAgICAg
dXNpbmcgRWxlbWVudFR5cGUgPSB0eXBlbmFtZSBBZGFwdG9yOjpUeXBlOwogICAgIHN0YXRpYyBj
b25zdGV4cHIgVHlwZWRBcnJheUNvbnRlbnRUeXBlIGNvbnRlbnRUeXBlID0gQWRhcHRvcjo6Y29u
dGVudFR5cGU7CiAKLSAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdz
ID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBP
dmVycmlkZXNHZXRPd25Qcm9wZXJ0eU5hbWVzIHwgSW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xv
dEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybzsKKyAgICBzdGF0aWMgY29uc3RleHByIHVu
c2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBPdmVycmlkZXNH
ZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eU5hbWVzIHwgT3ZlcnJp
ZGVzUHV0IHwgSW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0
aElzTm90WmVybzsKIAogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgZWxlbWVudFNpemUg
PSBzaXplb2YodHlwZW5hbWUgQWRhcHRvcjo6VHlwZSk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsTGV4aWNhbEVudmlyb25tZW50LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxMZXhpY2FsRW52aXJvbm1l
bnQuaAkocmV2aXNpb24gMjc2NDk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNHbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsNyArMzMs
NyBAQCBjbGFzcyBKU0dsb2JhbExleGljYWxFbnZpcm9ubWVudCBmaW5hbCA6CiBwdWJsaWM6CiAg
ICAgdXNpbmcgQmFzZSA9IEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3Q7CiAKLSAgICBzdGF0aWMg
Y29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3Mg
fCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3Q7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNp
Z25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJpZGVzR2V0
T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzUHV0OwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
Q2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+CiAgICAgc3RhdGljIElzb1N1YnNwYWNlKiBz
dWJzcGFjZUZvcihWTSYgdm0pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0dsb2JhbE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCShyZXZpc2lvbiAyNzY0OTkpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE0NzYsOCArMTQ3NiwxNSBAQCBib29sIEpTR2xvYmFsT2JqZWN0OjpwdXQoSlNDZWxsKiBjZWxs
LCBKCiAgICAgSlNHbG9iYWxPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNHbG9iYWxPYmpl
Y3QqPihjZWxsKTsKICAgICBBU1NFUlQoIUhlYXA6OmhlYXAodmFsdWUpIHx8IEhlYXA6OmhlYXAo
dmFsdWUpID09IEhlYXA6OmhlYXAodGhpc09iamVjdCkpOwogCi0gICAgaWYgKFVOTElLRUxZKGlz
VGhpc1ZhbHVlQWx0ZXJlZChzbG90LCB0aGlzT2JqZWN0KSkpCi0gICAgICAgIFJFTEVBU0VfQU5E
X1JFVFVSTihzY29wZSwgb3JkaW5hcnlTZXRTbG93KGdsb2JhbE9iamVjdCwgdGhpc09iamVjdCwg
cHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdC50aGlzVmFsdWUoKSwgc2xvdC5pc1N0cmljdE1vZGUo
KSkpOworICAgIGlmIChVTkxJS0VMWShpc1RoaXNWYWx1ZUFsdGVyZWQoc2xvdCwgdGhpc09iamVj
dCkpKSB7CisgICAgICAgIFN5bWJvbFRhYmxlRW50cnk6OkZhc3QgZW50cnkgPSB0aGlzT2JqZWN0
LT5zeW1ib2xUYWJsZSgpLT5nZXQocHJvcGVydHlOYW1lLnVpZCgpKTsKKyAgICAgICAgaWYgKCFl
bnRyeS5pc051bGwoKSkgeworICAgICAgICAgICAgaWYgKGVudHJ5LmlzUmVhZE9ubHkoKSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gdHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsIHNsb3Qu
aXNTdHJpY3RNb2RlKCksIFJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9yKTsKKyAgICAgICAgICAg
IFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgSlNPYmplY3Q6OmRlZmluZVByb3BlcnR5T25SZWNl
aXZlcihnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpKTsKKyAgICAgICAg
fQorICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEJhc2U6OnB1dCh0aGlzT2JqZWN0
LCBnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpKTsKKyAgICB9CiAKICAg
ICBib29sIHNob3VsZFRocm93UmVhZE9ubHlFcnJvciA9IHNsb3QuaXNTdHJpY3RNb2RlKCk7CiAg
ICAgYm9vbCBpZ25vcmVSZWFkT25seUVycm9ycyA9IGZhbHNlOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCShyZXZpc2lvbiAyNzY0OTkp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC01OTYsNyArNTk2LDcgQEAgcHVibGljOgogICAgICAgICAKIHB1YmxpYzoK
ICAgICB1c2luZyBCYXNlID0gSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdDsKLSAgICBzdGF0aWMg
Y29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3Mg
fCBIYXNTdGF0aWNQcm9wZXJ0eVRhYmxlIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwg
SXNJbW11dGFibGVQcm90b3R5cGVFeG90aWNPYmplY3Q7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1
bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSGFzU3RhdGlj
UHJvcGVydHlUYWJsZSB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRlc1B1
dCB8IElzSW1tdXRhYmxlUHJvdG90eXBlRXhvdGljT2JqZWN0OwogCiAgICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOwogICAgIHRlbXBsYXRlPHR5cGVuYW1l
IENlbGxUeXBlLCBTdWJzcGFjZUFjY2VzcyBtb2RlPgpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNMZXhpY2FsRW52aXJvbm1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xleGljYWxFbnZpcm9ubWVudC5oCShyZXZpc2lvbiAy
NzY0OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xleGljYWxFbnZpcm9u
bWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCw3ICs0OCw3IEBAIHB1YmxpYzoKICAgICB9CiAK
ICAgICB1c2luZyBCYXNlID0gSlNTeW1ib2xUYWJsZU9iamVjdDsKLSAgICBzdGF0aWMgY29uc3Rl
eHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBPdmVy
cmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNHZXRPd25TcGVjaWFsUHJvcGVydHlO
YW1lczsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFz
ZTo6U3RydWN0dXJlRmxhZ3MgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlk
ZXNHZXRPd25TcGVjaWFsUHJvcGVydHlOYW1lcyB8IE92ZXJyaWRlc1B1dDsKIAogICAgIFdyaXRl
QmFycmllckJhc2U8VW5rbm93bj4qIHZhcmlhYmxlcygpCiAgICAgewpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVFbnZpcm9ubWVudC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlRW52aXJvbm1lbnQuaAkocmV2
aXNpb24gMjc2NDk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVF
bnZpcm9ubWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw3IEBAIGNsYXNzIEpTTW9k
dWxlRW52aXJvbm1lbnQgZmluYWwgOiBwdWJsaWMKICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZz
ZXRzRXh0cmFjdG9yOwogcHVibGljOgogICAgIHVzaW5nIEJhc2UgPSBKU0xleGljYWxFbnZpcm9u
bWVudDsKLSAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFz
ZTo6U3RydWN0dXJlRmxhZ3MgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlk
ZXNHZXRPd25TcGVjaWFsUHJvcGVydHlOYW1lczsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2ln
bmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBPdmVycmlkZXNHZXRP
d25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNHZXRPd25TcGVjaWFsUHJvcGVydHlOYW1lcyB8IE92
ZXJyaWRlc1B1dDsKIAogICAgIHN0YXRpYyBKU01vZHVsZUVudmlyb25tZW50KiBjcmVhdGUoVk0m
IHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1Njb3BlKiBjdXJyZW50U2NvcGUs
IFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSwgSlNWYWx1ZSBpbml0aWFsVmFsdWUsIEFic3RyYWN0
TW9kdWxlUmVjb3JkKiBtb2R1bGVSZWNvcmQpCiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZU5hbWVzcGFjZU9iamVjdC5oCShy
ZXZpc2lvbiAyNzY0OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVs
ZU5hbWVzcGFjZU9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw3IEBAIG5hbWVz
cGFjZSBKU0MgewogY2xhc3MgSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QgZmluYWwgOiBwdWJsaWMg
SlNOb25GaW5hbE9iamVjdCB7CiBwdWJsaWM6CiAgICAgdXNpbmcgQmFzZSA9IEpTTm9uRmluYWxP
YmplY3Q7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJh
c2U6OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJp
ZGVzR2V0T3duUHJvcGVydHlOYW1lcyB8IEludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUlu
ZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8gfCBHZXRPd25Qcm9wZXJ0eVNsb3RJc0ltcHVyZUZv
clByb3BlcnR5QWJzZW5jZSB8IElzSW1tdXRhYmxlUHJvdG90eXBlRXhvdGljT2JqZWN0OworICAg
IHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1
cmVGbGFncyB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRlc0dldE93blBy
b3BlcnR5TmFtZXMgfCBPdmVycmlkZXNQdXQgfCBJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90
QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgR2V0T3duUHJvcGVydHlTbG90SXNJbXB1
cmVGb3JQcm9wZXJ0eUFic2VuY2UgfCBJc0ltbXV0YWJsZVByb3RvdHlwZUV4b3RpY09iamVjdDsK
IAogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0Rlc3RydWN0aW9uID0gdHJ1ZTsKICAg
ICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAkocmV2aXNpb24gMjc2NDk5KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NDYs
MTAgKzY0Niw2IEBAIGJvb2wgSlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdChKU09iamUKIHsK
ICAgICByZXR1cm4gZ2V0T3duUHJvcGVydHlTbG90SW1wbChvYmplY3QsIGdsb2JhbE9iamVjdCwg
cHJvcGVydHlOYW1lLCBzbG90KTsKIH0KLQotdm9pZCBKU09iamVjdDo6ZG9QdXRQcm9wZXJ0eVNl
Y3VyaXR5Q2hlY2soSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwgUHV0
UHJvcGVydHlTbG90JikKLXsKLX0KICNlbmRpZiAvLyBBU1NFUlRfRU5BQkxFRAogCiAvLyBodHRw
czovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1vcmRpbmFyeXNldApAQCAtNzU4LDcgKzc1
NCw3IEBAIGJvb2wgb3JkaW5hcnlTZXRTbG93KEpTR2xvYmFsT2JqZWN0KiBnbG8KICAgICByZXR1
cm4gdHJ1ZTsKIH0KIAotLy8gRUNNQSA4LjYuMi4yCisvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2
Mi8jc2VjLW9yZGluYXJ5c2V0CiBib29sIEpTT2JqZWN0OjpwdXQoSlNDZWxsKiBjZWxsLCBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1Zh
bHVlIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgcmV0dXJuIHB1dElubGlu
ZUZvckpTT2JqZWN0KGNlbGwsIGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xv
dCk7CkBAIC03NjYsNjkgKzc2Miw5NiBAQCBib29sIEpTT2JqZWN0OjpwdXQoSlNDZWxsKiBjZWxs
LCBKU0dsb2JhCiAKIGJvb2wgSlNPYmplY3Q6OnB1dElubGluZVNsb3coSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwg
UHV0UHJvcGVydHlTbG90JiBzbG90KQogewotICAgIEFTU0VSVCghaXNUaGlzVmFsdWVBbHRlcmVk
KHNsb3QsIHRoaXMpKTsKKyAgICBBU1NFUlQoIXBhcnNlSW5kZXgocHJvcGVydHlOYW1lKSk7CiAK
ICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwogCisgICAgaWYgKFVOTElLRUxZKCF2bS5pc1NhZmVUb1JlY3Vy
c2VTb2Z0KCkpKSB7CisgICAgICAgIHRocm93U3RhY2tPdmVyZmxvd0Vycm9yKGdsb2JhbE9iamVj
dCwgc2NvcGUpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCiAgICAgSlNPYmplY3Qq
IG9iaiA9IHRoaXM7CiAgICAgZm9yICg7OykgewogICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSA9IG9iai0+c3RydWN0dXJlKHZtKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKHN0cnVjdHVyZS0+
dHlwZUluZm8oKS5oYXNQdXRQcm9wZXJ0eVNlY3VyaXR5Q2hlY2soKSkpIHsKLSAgICAgICAgICAg
IG9iai0+bWV0aG9kVGFibGUodm0pLT5kb1B1dFByb3BlcnR5U2VjdXJpdHlDaGVjayhvYmosIGds
b2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCBzbG90KTsKLSAgICAgICAgICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIGZhbHNlKTsKLSAgICAgICAgfQorICAgICAgICBpZiAob2JqICE9IHRo
aXMgJiYgc3RydWN0dXJlLT50eXBlSW5mbygpLm92ZXJyaWRlc1B1dCgpKQorICAgICAgICAgICAg
UkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBvYmotPm1ldGhvZFRhYmxlKHZtKS0+cHV0KG9iaiwg
Z2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KSk7CisKKyAgICAgICAgYm9v
bCBoYXNQcm9wZXJ0eSA9IGZhbHNlOwogICAgICAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzOworICAg
ICAgICBQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYyBjdXN0b21TZXR0ZXIgPSBudWxscHRy
OwogICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldCh2bSwgcHJv
cGVydHlOYW1lLCBhdHRyaWJ1dGVzKTsKICAgICAgICAgaWYgKGlzVmFsaWRPZmZzZXQob2Zmc2V0
KSkgewotICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZXMgJiBQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVh
ZE9ubHkpIHsKLSAgICAgICAgICAgICAgICBBU1NFUlQodGhpcy0+cHJvdG90eXBlQ2hhaW5NYXlJ
bnRlcmNlcHRTdG9yZVRvKHZtLCBwcm9wZXJ0eU5hbWUpIHx8IG9iaiA9PSB0aGlzKTsKLSAgICAg
ICAgICAgICAgICByZXR1cm4gdHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsIHNsb3QuaXNT
dHJpY3RNb2RlKCksIFJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9yKTsKKyAgICAgICAgICAgIGhh
c1Byb3BlcnR5ID0gdHJ1ZTsKKyAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVzICYgUHJvcGVydHlB
dHRyaWJ1dGU6OkN1c3RvbUFjY2Vzc29yT3JWYWx1ZSkKKyAgICAgICAgICAgICAgICBjdXN0b21T
ZXR0ZXIgPSBqc0Nhc3Q8Q3VzdG9tR2V0dGVyU2V0dGVyKj4ob2JqLT5nZXREaXJlY3Qob2Zmc2V0
KSktPnNldHRlcigpOworICAgICAgICB9IGVsc2UgaWYgKHN0cnVjdHVyZS0+aGFzTm9uUmVpZmll
ZFN0YXRpY1Byb3BlcnRpZXMoKSkgeworICAgICAgICAgICAgaWYgKGF1dG8gZW50cnkgPSBzdHJ1
Y3R1cmUtPmZpbmRQcm9wZXJ0eUhhc2hFbnRyeShwcm9wZXJ0eU5hbWUpKSB7CisgICAgICAgICAg
ICAgICAgaGFzUHJvcGVydHkgPSB0cnVlOworICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXMgPSBl
bnRyeS0+dmFsdWUtPmF0dHJpYnV0ZXMoKTsKKworICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBS
ZW1vdmUgdGhpcyBhZnRlciB3cml0YWJsZSBhY2Nlc3NvcnMgYXJlIGludHJvZHVjZWQgdG8gc3Rh
dGljIGhhc2ggdGFibGVzLgorICAgICAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVzICYgUHJvcGVy
dHlBdHRyaWJ1dGU6OkFjY2Vzc29yKQorICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzIHw9
IFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seTsKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTog
UmVtb3ZlIHRoaXMgYWZ0ZXIgd2Ugc3RvcCBkZWZhdWx0aW5nIHRvIEN1c3RvbVZhbHVlIGluIHN0
YXRpYyBoYXNoIHRhYmxlcy4KKyAgICAgICAgICAgICAgICBpZiAoIShhdHRyaWJ1dGVzICYgKFBy
b3BlcnR5QXR0cmlidXRlOjpDdXN0b21BY2Nlc3NvciB8IFByb3BlcnR5QXR0cmlidXRlOjpCdWls
dGluT3JGdW5jdGlvbk9yQWNjZXNzb3JPckxhenlQcm9wZXJ0eU9yQ29uc3RhbnQpKSkKKyAgICAg
ICAgICAgICAgICAgICAgYXR0cmlidXRlcyB8PSBQcm9wZXJ0eUF0dHJpYnV0ZTo6Q3VzdG9tVmFs
dWU7CisKKyAgICAgICAgICAgICAgICBpZiAoYXR0cmlidXRlcyAmIFByb3BlcnR5QXR0cmlidXRl
OjpDdXN0b21BY2Nlc3Nvck9yVmFsdWUpCisgICAgICAgICAgICAgICAgICAgIGN1c3RvbVNldHRl
ciA9IGVudHJ5LT52YWx1ZS0+cHJvcGVydHlQdXR0ZXIoKTsKICAgICAgICAgICAgIH0KKyAgICAg
ICAgfQogCi0gICAgICAgICAgICBKU1ZhbHVlIGdzID0gb2JqLT5nZXREaXJlY3Qob2Zmc2V0KTsK
LSAgICAgICAgICAgIGlmIChncy5pc0dldHRlclNldHRlcigpKSB7CisgICAgICAgIGlmIChoYXNQ
cm9wZXJ0eSkgeworICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZXMgJiBQcm9wZXJ0eUF0dHJpYnV0
ZTo6UmVhZE9ubHkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHR5cGVFcnJvcihnbG9iYWxPYmpl
Y3QsIHNjb3BlLCBzbG90LmlzU3RyaWN0TW9kZSgpLCBSZWFkb25seVByb3BlcnR5V3JpdGVFcnJv
cik7CisgICAgICAgICAgICBpZiAoYXR0cmlidXRlcyAmIFByb3BlcnR5QXR0cmlidXRlOjpBY2Nl
c3NvcikgeworICAgICAgICAgICAgICAgIEFTU0VSVChpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpOwog
ICAgICAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgd2UgZGVjaWRlIHRv
IGNhY2hlIHRoaXMgcHJvcGVydHkgYmVmb3JlIHdlIHBvdGVudGlhbGx5IGV4ZWN1dGUgYXJpYml0
cmFyeSBKUy4KICAgICAgICAgICAgICAgICBpZiAoIXRoaXMtPnN0cnVjdHVyZSh2bSktPmlzVW5j
YWNoZWFibGVEaWN0aW9uYXJ5KCkpCiAgICAgICAgICAgICAgICAgICAgIHNsb3Quc2V0Q2FjaGVh
YmxlU2V0dGVyKG9iaiwgb2Zmc2V0KTsKLQotICAgICAgICAgICAgICAgIGJvb2wgcmVzdWx0ID0g
Y2FsbFNldHRlcihnbG9iYWxPYmplY3QsIHNsb3QudGhpc1ZhbHVlKCksIGdzLCB2YWx1ZSwgc2xv
dC5pc1N0cmljdE1vZGUoKSA/IEVDTUFNb2RlOjpzdHJpY3QoKSA6IEVDTUFNb2RlOjpzbG9wcHko
KSk7Ci0gICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZmFsc2UpOwot
ICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICAgICAgSlNWYWx1ZSBn
cyA9IG9iai0+Z2V0RGlyZWN0KG9mZnNldCk7CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BTkRf
UkVUVVJOKHNjb3BlLCBjYWxsU2V0dGVyKGdsb2JhbE9iamVjdCwgc2xvdC50aGlzVmFsdWUoKSwg
Z3MsIHZhbHVlLCBzbG90LmlzU3RyaWN0TW9kZSgpID8gRUNNQU1vZGU6OnN0cmljdCgpIDogRUNN
QU1vZGU6OnNsb3BweSgpKSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoZ3MuaXND
dXN0b21HZXR0ZXJTZXR0ZXIoKSkgewotICAgICAgICAgICAgICAgIGJvb2wgaXNBY2Nlc3NvciA9
IGF0dHJpYnV0ZXMgJiBQcm9wZXJ0eUF0dHJpYnV0ZTo6Q3VzdG9tQWNjZXNzb3I7Ci0gICAgICAg
ICAgICAgICAgYXV0byBzZXR0ZXIgPSBqc0Nhc3Q8Q3VzdG9tR2V0dGVyU2V0dGVyKj4oZ3MuYXND
ZWxsKCkpLT5zZXR0ZXIoKTsKKyAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVzICYgUHJvcGVydHlB
dHRyaWJ1dGU6OkN1c3RvbUFjY2Vzc29yKSB7CisgICAgICAgICAgICAgICAgLy8gRklYTUU6IFJl
bW92ZSB0aGlzIGFmdGVyIFdlYklETCBnZW5lcmF0b3IgaXMgZml4ZWQgdG8gc2V0IFJlYWRPbmx5
IGZvciBbUnVudGltZUNvbmRpdGlvbmFsbHlSZWFkV3JpdGVdIGF0dHJpYnV0ZXMuCisgICAgICAg
ICAgICAgICAgaWYgKCFjdXN0b21TZXR0ZXIpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgICAgICAgICBBU1NFUlQoY3VzdG9tU2V0dGVyKTsKICAgICAgICAgICAg
ICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIG9ubHkgYmUgY2FjaGluZyB0aGVzZSBpZiB3ZSdyZSBu
b3QgYW4gdW5jYWNoZWFibGUgZGljdGlvbmFyeToKICAgICAgICAgICAgICAgICAvLyBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE1MzQ3Ci0KLSAgICAgICAgICAgICAg
ICAvLyBXZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHdlIGRlY2lkZSB0byBjYWNoZSB0aGlzIHBy
b3BlcnR5IGJlZm9yZSB3ZSBwb3RlbnRpYWxseSBleGVjdXRlIGFyaWJpdHJhcnkgSlMuCi0gICAg
ICAgICAgICAgICAgaWYgKGlzQWNjZXNzb3IpCi0gICAgICAgICAgICAgICAgICAgIHNsb3Quc2V0
Q3VzdG9tQWNjZXNzb3Iob2JqLCBzZXR0ZXIpOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgICAgICAgICAgc2xvdC5zZXRDdXN0b21WYWx1ZShvYmosIHNldHRlcik7Ci0KLSAgICAg
ICAgICAgICAgICBhdXRvIHJlc3VsdCA9IGNhbGxDdXN0b21TZXR0ZXIoZ2xvYmFsT2JqZWN0LCBz
ZXR0ZXIsIGlzQWNjZXNzb3IsIG9iaiwgc2xvdC50aGlzVmFsdWUoKSwgdmFsdWUsIHByb3BlcnR5
TmFtZSk7Ci0gICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZmFsc2Up
OwotICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgIT0gVHJpU3RhdGU6OkluZGV0ZXJtaW5hdGUp
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgPT0gVHJpU3RhdGU6OlRydWU7Cisg
ICAgICAgICAgICAgICAgc2xvdC5zZXRDdXN0b21BY2Nlc3NvcihvYmosIGN1c3RvbVNldHRlcik7
CisgICAgICAgICAgICAgICAgc2NvcGUucmVsZWFzZSgpOworICAgICAgICAgICAgICAgIGN1c3Rv
bVNldHRlcihnbG9iYWxPYmplY3QsIEpTVmFsdWU6OmVuY29kZShzbG90LnRoaXNWYWx1ZSgpKSwg
SlNWYWx1ZTo6ZW5jb2RlKHZhbHVlKSwgcHJvcGVydHlOYW1lKTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIEFTU0VSVCghKGF0dHJpYnV0
ZXMgJiBQcm9wZXJ0eUF0dHJpYnV0ZTo6QWNjZXNzb3IpKTsKLQotICAgICAgICAgICAgLy8gSWYg
dGhlcmUncyBhbiBleGlzdGluZyBwcm9wZXJ0eSBvbiB0aGUgYmFzZSBvYmplY3QsIG9yIG9uIG9u
ZSBvZiBpdHMgCi0gICAgICAgICAgICAvLyBwcm90b3R5cGVzLCB3ZSBzaG91bGQgc3RvcmUgdGhl
IHByb3BlcnR5IG9uIHRoZSAqYmFzZSogb2JqZWN0LgotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KLSAgICAgICAgaWYgKCFvYmotPnN0YXRpY1Byb3BlcnRpZXNSZWlmaWVkKHZtKSkgewot
ICAgICAgICAgICAgaWYgKG9iai0+Y2xhc3NJbmZvKHZtKS0+aGFzU3RhdGljU2V0dGVyT3JSZWFk
b25seVByb3BlcnRpZXMoKSkgewotICAgICAgICAgICAgICAgIGlmIChhdXRvIGVudHJ5ID0gb2Jq
LT5maW5kUHJvcGVydHlIYXNoRW50cnkodm0sIHByb3BlcnR5TmFtZSkpCi0gICAgICAgICAgICAg
ICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgcHV0RW50cnkoZ2xvYmFsT2JqZWN0LCBl
bnRyeS0+dGFibGUtPmNsYXNzRm9yVGhpcywgZW50cnktPnZhbHVlLCBvYmosIHRoaXMsIHByb3Bl
cnR5TmFtZSwgdmFsdWUsIHNsb3QpKTsKKyAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVzICYgUHJv
cGVydHlBdHRyaWJ1dGU6OkN1c3RvbVZhbHVlKSB7CisgICAgICAgICAgICAgICAgLy8gRklYTUU6
IE9uY2UgbGVnYWN5IFJlZ0V4cCBmZWF0dXJlcyBhcmUgaW1wbGVtZW50ZWQsIHRoZXJlIHdvdWxk
IGJlIG5vIHVzZSBjYXNlIGZvciBjYWxsaW5nIEN1c3RvbVZhbHVlIHNldHRlciBpZiByZWNlaXZl
ciBpcyBhbHRlcmVkLgorICAgICAgICAgICAgICAgIGlmIChjdXN0b21TZXR0ZXIgJiYgIShpc1Ro
aXNWYWx1ZUFsdGVyZWQoc2xvdCwgb2JqKSAmJiBzbG90LmNvbnRleHQoKSA9PSBQdXRQcm9wZXJ0
eVNsb3Q6OlJlZmxlY3RTZXQpKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBz
aG91bGQgb25seSBiZSBjYWNoaW5nIHRoZXNlIGlmIHdlJ3JlIG5vdCBhbiB1bmNhY2hlYWJsZSBk
aWN0aW9uYXJ5OgorICAgICAgICAgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjE1MzQ3CisgICAgICAgICAgICAgICAgICAgIHNsb3Quc2V0Q3Vz
dG9tVmFsdWUob2JqLCBjdXN0b21TZXR0ZXIpOworICAgICAgICAgICAgICAgICAgICBSRUxFQVNF
X0FORF9SRVRVUk4oc2NvcGUsIGN1c3RvbVNldHRlcihnbG9iYWxPYmplY3QsIEpTVmFsdWU6OmVu
Y29kZShvYmopLCBKU1ZhbHVlOjplbmNvZGUodmFsdWUpLCBwcm9wZXJ0eU5hbWUpKTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKCFpc1RoaXNWYWx1ZUFsdGVyZWQoc2xv
dCwgb2JqKSkgeworICAgICAgICAgICAgICAgICAgICAvLyBBdm9pZCBQdXRNb2RlUHV0IGJlY2F1
c2UgaXQgZmFpbHMgZm9yIG5vbi1leHRlbnNpYmxlIHN0cnVjdHVyZXMuCisgICAgICAgICAgICAg
ICAgICAgIG9iai0+cHV0RGlyZWN0KHZtLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBhdHRyaWJ1dGVz
Rm9yU3RydWN0dXJlKGF0dHJpYnV0ZXMpICYgflByb3BlcnR5QXR0cmlidXRlOjpDdXN0b21WYWx1
ZSwgc2xvdCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVzICYgUHJvcGVy
dHlBdHRyaWJ1dGU6OkJ1aWx0aW5PckZ1bmN0aW9uT3JMYXp5UHJvcGVydHkpIHsKKyAgICAgICAg
ICAgICAgICBpZiAoIWlzVGhpc1ZhbHVlQWx0ZXJlZChzbG90LCBvYmopKSB7CisgICAgICAgICAg
ICAgICAgICAgIC8vIEF2b2lkIFB1dE1vZGVQdXQgYmVjYXVzZSBpdCBmYWlscyBmb3Igbm9uLWV4
dGVuc2libGUgc3RydWN0dXJlcy4KKyAgICAgICAgICAgICAgICAgICAgb2JqLT5wdXREaXJlY3Qo
dm0sIHByb3BlcnR5TmFtZSwgdmFsdWUsIGF0dHJpYnV0ZXNGb3JTdHJ1Y3R1cmUoYXR0cmlidXRl
cyksIHNsb3QpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBJZiB0aGVyZSdzIGFuIGV4aXN0
aW5nIHdyaXRhYmxlIHByb3BlcnR5IG9uIHRoZSBiYXNlIG9iamVjdCwgb3Igb24gb25lIG9mIGl0
cyAKKyAgICAgICAgICAgIC8vIHByb3RvdHlwZXMsIHdlIHNob3VsZCBhdHRlbXB0IHRvIHN0b3Jl
IHRoZSBwcm9wZXJ0eSBvbiB0aGUgcmVjZWl2ZXIuCisgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQotICAgICAgICBpZiAob2JqLT50eXBlKCkgPT0gUHJveHlPYmplY3RUeXBlKSB7Ci0gICAg
ICAgICAgICBhdXRvKiBwcm94eSA9IGpzQ2FzdDxQcm94eU9iamVjdCo+KG9iaik7Ci0gICAgICAg
ICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIHByb3h5LT5Qcm94eU9iamVjdDo6cHV0KHBy
b3h5LCBnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpKTsKLSAgICAgICAg
fQorCiAgICAgICAgIEpTVmFsdWUgcHJvdG90eXBlID0gb2JqLT5nZXRQcm90b3R5cGUodm0sIGds
b2JhbE9iamVjdCk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGZhbHNlKTsK
ICAgICAgICAgaWYgKHByb3RvdHlwZS5pc051bGwoKSkKQEAgLTgzNiw5ICs4NTksODAgQEAgYm9v
bCBKU09iamVjdDo6cHV0SW5saW5lU2xvdyhKU0dsb2JhbE9iagogICAgICAgICBvYmogPSBhc09i
amVjdChwcm90b3R5cGUpOwogICAgIH0KIAotICAgIGlmICghcHV0RGlyZWN0SW50ZXJuYWw8UHV0
TW9kZVB1dD4odm0sIHByb3BlcnR5TmFtZSwgdmFsdWUsIDAsIHNsb3QpKQorICAgIHNjb3BlLnJl
bGVhc2UoKTsKKyAgICBpZiAoVU5MSUtFTFkoaXNUaGlzVmFsdWVBbHRlcmVkKHNsb3QsIHRoaXMp
KSkKKyAgICAgICAgcmV0dXJuIGRlZmluZVByb3BlcnR5T25SZWNlaXZlcihnbG9iYWxPYmplY3Qs
IHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpOworICAgIHJldHVybiBwdXRJbmxpbmVGYXN0KGds
b2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCk7Cit9CisKK3N0YXRpYyBORVZF
Ul9JTkxJTkUgYm9vbCBkZWZpbmVQcm9wZXJ0eU9uUmVjZWl2ZXJTbG93KEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUs
IEpTT2JqZWN0KiByZWNlaXZlciwgYm9vbCBzaG91bGRUaHJvdykKK3sKKyAgICBWTSYgdm0gPSBn
bG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOworCisgICAgUHJvcGVydHlTbG90IHNsb3QocmVjZWl2ZXIsIFByb3BlcnR5U2xvdDo6SW50
ZXJuYWxNZXRob2RUeXBlOjpHZXRPd25Qcm9wZXJ0eSk7CisgICAgYm9vbCBoYXNQcm9wZXJ0eSA9
IHJlY2VpdmVyLT5tZXRob2RUYWJsZSh2bSktPmdldE93blByb3BlcnR5U2xvdChyZWNlaXZlciwg
Z2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHNsb3QpOworICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIGZhbHNlKTsKKworICAgIFByb3BlcnR5RGVzY3JpcHRvciBkZXNjcmlwdG9yOwor
ICAgIGlmIChoYXNQcm9wZXJ0eSkgeworICAgICAgICAvLyBGSVhNRTogRm9yIGFuIGFjY2Vzc29y
IHdpdGggc2V0dGVyLCB0aGUgZXJyb3IgbWVzc2FnZSBpcyBtaXNsZWFkaW5nLgorICAgICAgICBp
ZiAoc2xvdC5hdHRyaWJ1dGVzKCkgJiBQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHlPckFjY2Vz
c29yT3JDdXN0b21BY2Nlc3NvcikKKyAgICAgICAgICAgIHJldHVybiB0eXBlRXJyb3IoZ2xvYmFs
T2JqZWN0LCBzY29wZSwgc2hvdWxkVGhyb3csIFJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9yKTsK
KyAgICAgICAgZGVzY3JpcHRvci5zZXRWYWx1ZSh2YWx1ZSk7CisgICAgfSBlbHNlCisgICAgICAg
IGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcih2YWx1ZSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFBy
b3BlcnR5QXR0cmlidXRlOjpOb25lKSk7CisKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUs
IHJlY2VpdmVyLT5tZXRob2RUYWJsZSh2bSktPmRlZmluZU93blByb3BlcnR5KHJlY2VpdmVyLCBn
bG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvciwgc2hvdWxkVGhyb3cpKTsKK30K
KworLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vcmRpbmFyeXNldCAoc3RlcCAzKQor
Ym9vbCBKU09iamVjdDo6ZGVmaW5lUHJvcGVydHlPblJlY2VpdmVyKEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFB1
dFByb3BlcnR5U2xvdCYgc2xvdCkKK3sKKyAgICBBU1NFUlQoIXBhcnNlSW5kZXgocHJvcGVydHlO
YW1lKSk7CisKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgSlNPYmplY3QqIHJlY2VpdmVyID0g
c2xvdC50aGlzVmFsdWUoKS5nZXRPYmplY3QoKTsKKyAgICAvLyBGSVhNRTogRm9yIGEgZmFpbHVy
ZSBkdWUgdG8gcHJpbWl0aXZlIHJlY2VpdmVyLCB0aGUgZXJyb3IgbWVzc2FnZSBpcyBtaXNsZWFk
aW5nLgorICAgIGlmICghcmVjZWl2ZXIpCiAgICAgICAgIHJldHVybiB0eXBlRXJyb3IoZ2xvYmFs
T2JqZWN0LCBzY29wZSwgc2xvdC5pc1N0cmljdE1vZGUoKSwgUmVhZG9ubHlQcm9wZXJ0eVdyaXRl
RXJyb3IpOwotICAgIHJldHVybiB0cnVlOworICAgIHNjb3BlLnJlbGVhc2UoKTsKKworICAgIGlm
IChzbG90LmlzVGFpbnRlZEJ5T3BhcXVlT2JqZWN0KCkgfHwgc2xvdC5jb250ZXh0KCkgPT0gUHV0
UHJvcGVydHlTbG90OjpSZWZsZWN0U2V0KSB7CisgICAgICAgIGlmIChyZWNlaXZlci0+bWV0aG9k
VGFibGUodm0pLT5kZWZpbmVPd25Qcm9wZXJ0eSAhPSBKU09iamVjdDo6ZGVmaW5lT3duUHJvcGVy
dHkpCisgICAgICAgICAgICByZXR1cm4gZGVmaW5lUHJvcGVydHlPblJlY2VpdmVyU2xvdyhnbG9i
YWxPYmplY3QsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHJlY2VpdmVyLCBzbG90LmlzU3RyaWN0TW9k
ZSgpKTsKKyAgICB9CisKKyAgICBpZiAoVU5MSUtFTFkocmVjZWl2ZXItPmhhc05vblJlaWZpZWRT
dGF0aWNQcm9wZXJ0aWVzKHZtKSkpCisgICAgICAgIHJldHVybiByZWNlaXZlci0+cHV0SW5saW5l
RmFzdFJlcGxhY2luZ1N0YXRpY1Byb3BlcnR5SWZOZWVkZWQoZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0
eU5hbWUsIHZhbHVlLCBzbG90KTsKKyAgICByZXR1cm4gcmVjZWl2ZXItPnB1dElubGluZUZhc3Qo
Z2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KTsKK30KKworYm9vbCBKU09i
amVjdDo6cHV0SW5saW5lRmFzdFJlcGxhY2luZ1N0YXRpY1Byb3BlcnR5SWZOZWVkZWQoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1
ZSB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBzbG90KQoreworICAgIEFTU0VSVCghcGFyc2VJbmRl
eChwcm9wZXJ0eU5hbWUpKTsKKworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSA9IHRoaXMtPnN0cnVjdHVyZSh2bSk7CisgICAgQVNTRVJUKHN0cnVjdHVyZS0+
aGFzTm9uUmVpZmllZFN0YXRpY1Byb3BlcnRpZXMoKSk7CisgICAgaWYgKCFpc1ZhbGlkT2Zmc2V0
KHN0cnVjdHVyZS0+Z2V0KHZtLCBwcm9wZXJ0eU5hbWUpKSkgeworICAgICAgICBpZiAoYXV0byBl
bnRyeSA9IHN0cnVjdHVyZS0+ZmluZFByb3BlcnR5SGFzaEVudHJ5KHByb3BlcnR5TmFtZSkpIHsK
KyAgICAgICAgICAgIGlmIChlbnRyeS0+dmFsdWUtPmF0dHJpYnV0ZXMoKSAmIFByb3BlcnR5QXR0
cmlidXRlOjpSZWFkT25seU9yQWNjZXNzb3JPckN1c3RvbUFjY2Vzc29yKSB7CisgICAgICAgICAg
ICAgICAgQVNTRVJUKHNsb3QuY29udGV4dCgpID09IFB1dFByb3BlcnR5U2xvdDo6UmVmbGVjdFNl
dCk7CisgICAgICAgICAgICAgICAgLy8gRklYTUU6IEZvciBhbiBhY2Nlc3NvciB3aXRoIHNldHRl
ciwgdGhlIGVycm9yIG1lc3NhZ2UgaXMgbWlzbGVhZGluZy4KKyAgICAgICAgICAgICAgICByZXR1
cm4gdHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsIHNsb3QuaXNTdHJpY3RNb2RlKCksIFJl
YWRvbmx5UHJvcGVydHlXcml0ZUVycm9yKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8v
IEF2b2lkIFB1dE1vZGVQdXQgYmVjYXVzZSBpdCBmYWlscyBmb3Igbm9uLWV4dGVuc2libGUgc3Ry
dWN0dXJlcy4KKyAgICAgICAgICAgIHB1dERpcmVjdCh2bSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwg
YXR0cmlidXRlc0ZvclN0cnVjdHVyZShlbnRyeS0+dmFsdWUtPmF0dHJpYnV0ZXMoKSkgJiB+UHJv
cGVydHlBdHRyaWJ1dGU6OkN1c3RvbVZhbHVlLCBzbG90KTsKKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBw
dXRJbmxpbmVGYXN0KGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCkpOwog
fQogCiBib29sIEpTT2JqZWN0OjpwdXRCeUluZGV4KEpTQ2VsbCogY2VsbCwgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBi
b29sIHNob3VsZFRocm93KQpAQCAtMzg1MiwzMCArMzk0Niw2IEBAIGJvb2wgSlNPYmplY3Q6OmFu
eU9iamVjdEluQ2hhaW5NYXlJbnRlcmMKICAgICB9CiB9CiAKLWJvb2wgSlNPYmplY3Q6OnByb3Rv
dHlwZUNoYWluTWF5SW50ZXJjZXB0U3RvcmVUbyhWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0
eU5hbWUpCi17Ci0gICAgaWYgKHBhcnNlSW5kZXgocHJvcGVydHlOYW1lKSkKLSAgICAgICAgcmV0
dXJuIGFueU9iamVjdEluQ2hhaW5NYXlJbnRlcmNlcHRJbmRleGVkQWNjZXNzZXModm0pOwotICAg
IAotICAgIGZvciAoSlNPYmplY3QqIGN1cnJlbnQgPSB0aGlzOyA7KSB7Ci0gICAgICAgIEpTVmFs
dWUgcHJvdG90eXBlID0gY3VycmVudC0+Z2V0UHJvdG90eXBlRGlyZWN0KHZtKTsKLSAgICAgICAg
aWYgKHByb3RvdHlwZS5pc051bGwoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgCi0gICAgICAgIGN1cnJlbnQgPSBhc09iamVjdChwcm90b3R5cGUpOwotICAgICAgICAKLSAg
ICAgICAgdW5zaWduZWQgYXR0cmlidXRlczsKLSAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0
ID0gY3VycmVudC0+c3RydWN0dXJlKHZtKS0+Z2V0KHZtLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0
ZXMpOwotICAgICAgICBpZiAoIUpTQzo6aXNWYWxpZE9mZnNldChvZmZzZXQpKQotICAgICAgICAg
ICAgY29udGludWU7Ci0gICAgICAgIAotICAgICAgICBpZiAoYXR0cmlidXRlcyAmIChQcm9wZXJ0
eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6QWNjZXNzb3IpKQotICAg
ICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIAotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgfQotfQotCiBib29sIEpTT2JqZWN0OjpuZWVkc1Nsb3dQdXRJbmRleGluZyhWTSYgdm0pIGNv
bnN0CiB7CiAgICAgcmV0dXJuIGFueU9iamVjdEluQ2hhaW5NYXlJbnRlcmNlcHRJbmRleGVkQWNj
ZXNzZXModm0pIHx8IGdsb2JhbE9iamVjdCh2bSktPmlzSGF2aW5nQUJhZFRpbWUoKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAkocmV2aXNpb24gMjc2NDk5
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAkod29ya2luZyBj
b3B5KQpAQCAtMTY2LDcgKzE2Niw2IEBAIHB1YmxpYzoKIAogICAgIEpTX0VYUE9SVF9QUklWQVRF
IHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNPYmplY3QqLCBKU0dsb2Jh
bE9iamVjdCosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CiAgICAgYm9v
bCBnZXRPd25Qcm9wZXJ0eVNsb3RJbmxpbmUoSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUs
IFByb3BlcnR5U2xvdCYpOwotICAgIEpTX0VYUE9SVF9QUklWQVRFX0lGX0FTU0VSVF9FTkFCTEVE
IHN0YXRpYyB2b2lkIGRvUHV0UHJvcGVydHlTZWN1cml0eUNoZWNrKEpTT2JqZWN0KiwgSlNHbG9i
YWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIFB1dFByb3BlcnR5U2xvdCYpOwogCiAgICAgLy8gVGhl
IGtleSBkaWZmZXJlbmNlIGJldHdlZW4gdGhpcyBhbmQgZ2V0T3duUHJvcGVydHlTbG90IGlzIHRo
YXQgZ2V0T3duUHJvcGVydHlTbG90CiAgICAgLy8gY3VycmVudGx5IHJldHVybnMgaW5jb3JyZWN0
IHJlc3VsdHMgZm9yIHRoZSBET00gd2luZG93ICh3aXRoIG5vbi1vd24gcHJvcGVydGllcykKQEAg
LTE5Nyw2ICsxOTYsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGJvb2wgcHV0SW5saW5lRm9ySlNP
YmplY3QoSlNDZWxsKiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1
dFByb3BlcnR5U2xvdCYpOwogICAgIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBib29s
IHB1dChKU0NlbGwqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0
UHJvcGVydHlTbG90Jik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgTkVWRVJfSU5MSU5FIHN0YXRp
YyBib29sIGRlZmluZVByb3BlcnR5T25SZWNlaXZlcihKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5
TmFtZSwgSlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7CiAgICAgLy8gcHV0QnlJbmRleCBhc3N1
bWVzIHRoYXQgdGhlIHJlY2VpdmVyIGlzIHRoaXMgSlNDZWxsIG9iamVjdC4KICAgICBKU19FWFBP
UlRfUFJJVkFURSBzdGF0aWMgYm9vbCBwdXRCeUluZGV4KEpTQ2VsbCosIEpTR2xvYmFsT2JqZWN0
KiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsKICAg
ICAgICAgCkBAIC0yMTMsMTIgKzIxMywxMyBAQCBwdWJsaWM6CiAKICAgICBBTFdBWVNfSU5MSU5F
IGJvb2wgcHV0QnlJbmRleElubGluZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCB1aW50
NjRfdCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpCiAgICAg
eworICAgICAgICBWTSYgdm0gPSBnZXRWTShnbG9iYWxPYmplY3QpOwogICAgICAgICBpZiAoTElL
RUxZKHByb3BlcnR5TmFtZSA8PSBNQVhfQVJSQVlfSU5ERVgpKQogICAgICAgICAgICAgcmV0dXJu
IHB1dEJ5SW5kZXhJbmxpbmUoZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDx1aW50MzJfdD4ocHJv
cGVydHlOYW1lKSwgdmFsdWUsIHNob3VsZFRocm93KTsKIAogICAgICAgICBBU1NFUlQocHJvcGVy
dHlOYW1lIDw9IG1heFNhZmVJbnRlZ2VyKCkpOwogICAgICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xv
dCh0aGlzLCBzaG91bGRUaHJvdyk7Ci0gICAgICAgIHJldHVybiBwdXRJbmxpbmVGb3JKU09iamVj
dCh0aGlzLCBnbG9iYWxPYmplY3QsIElkZW50aWZpZXI6OmZyb20oZ2V0Vk0oZ2xvYmFsT2JqZWN0
KSwgcHJvcGVydHlOYW1lKSwgdmFsdWUsIHNsb3QpOworICAgICAgICByZXR1cm4gbWV0aG9kVGFi
bGUodm0pLT5wdXQodGhpcywgZ2xvYmFsT2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tKHZtLCBwcm9w
ZXJ0eU5hbWUpLCB2YWx1ZSwgc2xvdCk7CiAgICAgfQogICAgICAgICAKICAgICAvLyBUaGlzIGlz
IHNpbWlsYXIgdG8gdGhlIHB1dERpcmVjdCogbWV0aG9kczoKQEAgLTYzNyw2ICs2MzgsNyBAQCBw
dWJsaWM6CiAgICAgLy8gIC0gYXR0cmlidXRlcyB3aWxsIGJlIHJlc3BlY3RlZCAoYWZ0ZXIgdGhl
IGNhbGwgdGhlIHByb3BlcnR5IHdpbGwgZXhpc3Qgd2l0aCB0aGUgZ2l2ZW4gYXR0cmlidXRlcykK
ICAgICAvLyAgLSB0aGUgcHJvcGVydHkgbmFtZSBpcyBhc3N1bWVkIHRvIG5vdCBiZSBhbiBpbmRl
eC4KICAgICBib29sIHB1dERpcmVjdChWTSYsIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgdW5zaWdu
ZWQgYXR0cmlidXRlcyA9IDApOworICAgIGJvb2wgcHV0RGlyZWN0KFZNJiwgUHJvcGVydHlOYW1l
LCBKU1ZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBQdXRQcm9wZXJ0eVNsb3QmKTsKICAgICBi
b29sIHB1dERpcmVjdChWTSYsIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90
Jik7CiAgICAgdm9pZCBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbihWTSYsIFByb3BlcnR5TmFt
ZSwgSlNWYWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcyA9IDApOwogICAgIGJvb2wgcHV0RGlyZWN0
Tm9uSW5kZXhBY2Nlc3NvcihWTSYsIFByb3BlcnR5TmFtZSwgR2V0dGVyU2V0dGVyKiwgdW5zaWdu
ZWQgYXR0cmlidXRlcyk7CkBAIC03NjQsNiArNzY2LDExIEBAIHB1YmxpYzoKICAgICBib29sIGhh
c0dldHRlclNldHRlclByb3BlcnRpZXMoVk0mIHZtKSB7IHJldHVybiBzdHJ1Y3R1cmUodm0pLT5o
YXNHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzKCk7IH0KICAgICBib29sIGhhc0N1c3RvbUdldHRlclNl
dHRlclByb3BlcnRpZXMoVk0mIHZtKSB7IHJldHVybiBzdHJ1Y3R1cmUodm0pLT5oYXNDdXN0b21H
ZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzKCk7IH0KIAorICAgIGJvb2wgaGFzTm9uUmVpZmllZFN0YXRp
Y1Byb3BlcnRpZXMoVk0mIHZtKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFR5cGVJbmZvOjpoYXNT
dGF0aWNQcm9wZXJ0eVRhYmxlKGlubGluZVR5cGVGbGFncygpKSAmJiAhc3RydWN0dXJlKHZtKS0+
c3RhdGljUHJvcGVydGllc1JlaWZpZWQoKTsKKyAgICB9CisKICAgICAvLyBwdXRPd25EYXRhUHJv
cGVydHkgaGFzICdwdXQnIGxpa2Ugc2VtYW50aWNzLCBob3dldmVyIHRoaXMgbWV0aG9kOgogICAg
IC8vICAtIGFzc3VtZXMgdGhlIG9iamVjdCBjb250YWlucyBubyBvd24gZ2V0dGVyL3NldHRlciBw
cm9wZXJ0aWVzLgogICAgIC8vICAtIHByb3ZpZGVzIG5vIHNwZWNpYWwgaGFuZGxpbmcgZm9yIF9f
cHJvdG9fXwpAQCAtODEwLDcgKzgxNyw2IEBAIHB1YmxpYzoKICAgICBib29sIGlzRnJvemVuKFZN
JiB2bSkgeyByZXR1cm4gc3RydWN0dXJlKHZtKS0+aXNGcm96ZW4odm0pOyB9CiAKICAgICBKU19F
WFBPUlRfUFJJVkFURSBib29sIGFueU9iamVjdEluQ2hhaW5NYXlJbnRlcmNlcHRJbmRleGVkQWNj
ZXNzZXMoVk0mKSBjb25zdDsKLSAgICBKU19FWFBPUlRfUFJJVkFURSBib29sIHByb3RvdHlwZUNo
YWluTWF5SW50ZXJjZXB0U3RvcmVUbyhWTSYsIFByb3BlcnR5TmFtZSk7CiAgICAgYm9vbCBuZWVk
c1Nsb3dQdXRJbmRleGluZyhWTSYpIGNvbnN0OwogCiBwcml2YXRlOgpAQCAtMTEwMyw2ICsxMTA5
LDggQEAgcHJpdmF0ZToKICAgICBib29sIHB1dERpcmVjdEludGVybmFsKFZNJiwgUHJvcGVydHlO
YW1lLCBKU1ZhbHVlLCB1bnNpZ25lZCBhdHRyLCBQdXRQcm9wZXJ0eVNsb3QmKTsKIAogICAgIEpT
X0VYUE9SVF9QUklWQVRFIE5FVkVSX0lOTElORSBib29sIHB1dElubGluZVNsb3coSlNHbG9iYWxP
YmplY3QqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOworICAgIEpT
X0VYUE9SVF9QUklWQVRFIE5FVkVSX0lOTElORSBib29sIHB1dElubGluZUZhc3RSZXBsYWNpbmdT
dGF0aWNQcm9wZXJ0eUlmTmVlZGVkKEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBKU1Zh
bHVlLCBQdXRQcm9wZXJ0eVNsb3QmKTsKKyAgICBib29sIHB1dElubGluZUZhc3QoSlNHbG9iYWxP
YmplY3QqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOwogCiAgICAg
Ym9vbCBnZXROb25JbmRleFByb3BlcnR5U2xvdChKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFt
ZSwgUHJvcGVydHlTbG90Jik7CiAgICAgYm9vbCBnZXRPd25Ob25JbmRleFByb3BlcnR5U2xvdChW
TSYsIFN0cnVjdHVyZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CkBAIC0xNDM1LDEw
ICsxNDQzLDYgQEAgQUxXQVlTX0lOTElORSBib29sIEpTT2JqZWN0OjpnZXRPd25Qcm9wZQogewog
ICAgIHJldHVybiBnZXRPd25Qcm9wZXJ0eVNsb3RJbXBsKG9iamVjdCwgZ2xvYmFsT2JqZWN0LCBw
cm9wZXJ0eU5hbWUsIHNsb3QpOwogfQotCi1BTFdBWVNfSU5MSU5FIHZvaWQgSlNPYmplY3Q6OmRv
UHV0UHJvcGVydHlTZWN1cml0eUNoZWNrKEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9w
ZXJ0eU5hbWUsIFB1dFByb3BlcnR5U2xvdCYpCi17Ci19CiAjZW5kaWYKIAogLy8gSXQgbWF5IHNl
ZW0gY3JhenkgdG8gaW5saW5lIGEgZnVuY3Rpb24gdGhpcyBsYXJnZSBidXQgaXQgbWFrZXMgYSBi
aWcgZGlmZmVyZW5jZQpAQCAtMTUyMiw2ICsxNTI2LDEzIEBAIGlubGluZSBib29sIEpTT2JqZWN0
OjpwdXREaXJlY3QoVk0mIHZtLCAKICAgICByZXR1cm4gcHV0RGlyZWN0SW50ZXJuYWw8UHV0TW9k
ZURlZmluZU93blByb3BlcnR5Pih2bSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgYXR0cmlidXRlcywg
c2xvdCk7CiB9CiAKK2lubGluZSBib29sIEpTT2JqZWN0OjpwdXREaXJlY3QoVk0mIHZtLCBQcm9w
ZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVz
LCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCit7CisgICAgQVNTRVJUKCF2YWx1ZS5pc0dldHRlclNl
dHRlcigpKTsKKyAgICBBU1NFUlQoIXZhbHVlLmlzQ3VzdG9tR2V0dGVyU2V0dGVyKCkpOworICAg
IHJldHVybiBwdXREaXJlY3RJbnRlcm5hbDxQdXRNb2RlRGVmaW5lT3duUHJvcGVydHk+KHZtLCBw
cm9wZXJ0eU5hbWUsIHZhbHVlLCBhdHRyaWJ1dGVzLCBzbG90KTsKK30KKwogaW5saW5lIGJvb2wg
SlNPYmplY3Q6OnB1dERpcmVjdChWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpT
VmFsdWUgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBBU1NFUlQoIXZhbHVl
LmlzR2V0dGVyU2V0dGVyKCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNPYmplY3RJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNPYmplY3RJbmxpbmVzLmgJKHJldmlzaW9uIDI3NjQ5OSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC02
OSw2ICs2OSw4IEBAIEFMV0FZU19JTkxJTkUgYm9vbCBKU09iamVjdDo6Y2FuUGVyZm9ybUYKICAg
ICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBvYmotPnN0cnVjdHVyZSh2bSk7CiAgICAgICAg
IGlmIChzdHJ1Y3R1cmUtPmhhc1JlYWRPbmx5T3JHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzRXhjbHVk
aW5nUHJvdG8oKSB8fCBzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkub3ZlcnJpZGVzR2V0UHJvdG90eXBl
KCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmIChvYmogIT0gdGhpcyAm
JiBzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkub3ZlcnJpZGVzUHV0KCkpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAKICAgICAgICAgcHJvdG90eXBlID0gb2JqLT5nZXRQcm90b3R5cGVEaXJlY3Qo
dm0pOwogICAgICAgICBpZiAocHJvdG90eXBlLmlzTnVsbCgpKQpAQCAtMjMxLDMyICsyMzMsNDMg
QEAgQUxXQVlTX0lOTElORSBQcm9wZXJ0eU9mZnNldCBKU09iamVjdDo6cAogICAgIHJldHVybiBy
ZXN1bHQ7CiB9CiAKLS8vIEVDTUEgOC42LjIuMgorLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIv
I3NlYy1vcmRpbmFyeXNldAogQUxXQVlTX0lOTElORSBib29sIEpTT2JqZWN0OjpwdXRJbmxpbmVG
b3JKU09iamVjdChKU0NlbGwqIGNlbGwsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFBy
b3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYg
c2xvdCkKIHsKICAgICBWTSYgdm0gPSBnZXRWTShnbG9iYWxPYmplY3QpOwotICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIEpTT2JqZWN0KiB0aGlzT2JqZWN0
ID0ganNDYXN0PEpTT2JqZWN0Kj4oY2VsbCk7CiAgICAgQVNTRVJUKHZhbHVlKTsKICAgICBBU1NF
UlQoIUhlYXA6OmhlYXAodmFsdWUpIHx8IEhlYXA6OmhlYXAodmFsdWUpID09IEhlYXA6OmhlYXAo
dGhpc09iamVjdCkpOwogCi0gICAgaWYgKFVOTElLRUxZKGlzVGhpc1ZhbHVlQWx0ZXJlZChzbG90
LCB0aGlzT2JqZWN0KSkpCi0gICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgb3JkaW5h
cnlTZXRTbG93KGdsb2JhbE9iamVjdCwgdGhpc09iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwg
c2xvdC50aGlzVmFsdWUoKSwgc2xvdC5pc1N0cmljdE1vZGUoKSkpOwotCiAgICAgLy8gVHJ5IGlu
ZGV4ZWQgcHV0IGZpcnN0LiBUaGlzIGlzIHJlcXVpcmVkIGZvciBjb3JyZWN0bmVzcywgc2luY2Ug
bG9hZHMgb24gcHJvcGVydHkgbmFtZXMgdGhhdCBhcHBlYXIgbGlrZQogICAgIC8vIHZhbGlkIGlu
ZGljZXMgd2lsbCBuZXZlciBsb29rIGluIHRoZSBuYW1lZCBwcm9wZXJ0eSBzdG9yYWdlLgotICAg
IGlmIChPcHRpb25hbDx1aW50MzJfdD4gaW5kZXggPSBwYXJzZUluZGV4KHByb3BlcnR5TmFtZSkp
Ci0gICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgcHV0QnlJbmRleCh0aGlzT2JqZWN0
LCBnbG9iYWxPYmplY3QsIGluZGV4LnZhbHVlKCksIHZhbHVlLCBzbG90LmlzU3RyaWN0TW9kZSgp
KSk7Ci0KLSAgICBpZiAodGhpc09iamVjdC0+Y2FuUGVyZm9ybUZhc3RQdXRJbmxpbmUodm0sIHBy
b3BlcnR5TmFtZSkpIHsKLSAgICAgICAgQVNTRVJUKCF0aGlzT2JqZWN0LT5wcm90b3R5cGVDaGFp
bk1heUludGVyY2VwdFN0b3JlVG8odm0sIHByb3BlcnR5TmFtZSkpOwotICAgICAgICBpZiAoIXRo
aXNPYmplY3QtPnB1dERpcmVjdEludGVybmFsPFB1dE1vZGVQdXQ+KHZtLCBwcm9wZXJ0eU5hbWUs
IHZhbHVlLCAwLCBzbG90KSkKLSAgICAgICAgICAgIHJldHVybiB0eXBlRXJyb3IoZ2xvYmFsT2Jq
ZWN0LCBzY29wZSwgc2xvdC5pc1N0cmljdE1vZGUoKSwgUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJy
b3IpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAoT3B0aW9uYWw8dWludDMyX3Q+IGlu
ZGV4ID0gcGFyc2VJbmRleChwcm9wZXJ0eU5hbWUpKSB7CisgICAgICAgIGlmIChVTkxJS0VMWShp
c1RoaXNWYWx1ZUFsdGVyZWQoc2xvdCwgdGhpc09iamVjdCkpKQorICAgICAgICAgICAgcmV0dXJu
IG9yZGluYXJ5U2V0U2xvdyhnbG9iYWxPYmplY3QsIHRoaXNPYmplY3QsIHByb3BlcnR5TmFtZSwg
dmFsdWUsIHNsb3QudGhpc1ZhbHVlKCksIHNsb3QuaXNTdHJpY3RNb2RlKCkpOworICAgICAgICBy
ZXR1cm4gdGhpc09iamVjdC0+bWV0aG9kVGFibGUodm0pLT5wdXRCeUluZGV4KHRoaXNPYmplY3Qs
IGdsb2JhbE9iamVjdCwgaW5kZXgudmFsdWUoKSwgdmFsdWUsIHNsb3QuaXNTdHJpY3RNb2RlKCkp
OwogICAgIH0KIAotICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgdGhpc09iamVjdC0+cHV0
SW5saW5lU2xvdyhnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpKTsKKyAg
ICBpZiAoIXRoaXNPYmplY3QtPmNhblBlcmZvcm1GYXN0UHV0SW5saW5lKHZtLCBwcm9wZXJ0eU5h
bWUpKQorICAgICAgICByZXR1cm4gdGhpc09iamVjdC0+cHV0SW5saW5lU2xvdyhnbG9iYWxPYmpl
Y3QsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpOworICAgIGlmIChVTkxJS0VMWShpc1RoaXNW
YWx1ZUFsdGVyZWQoc2xvdCwgdGhpc09iamVjdCkpKQorICAgICAgICByZXR1cm4gZGVmaW5lUHJv
cGVydHlPblJlY2VpdmVyKGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCk7
CisgICAgaWYgKFVOTElLRUxZKHRoaXNPYmplY3QtPmhhc05vblJlaWZpZWRTdGF0aWNQcm9wZXJ0
aWVzKHZtKSkpCisgICAgICAgIHJldHVybiB0aGlzT2JqZWN0LT5wdXRJbmxpbmVGYXN0UmVwbGFj
aW5nU3RhdGljUHJvcGVydHlJZk5lZWRlZChnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgdmFs
dWUsIHNsb3QpOworICAgIHJldHVybiB0aGlzT2JqZWN0LT5wdXRJbmxpbmVGYXN0KGdsb2JhbE9i
amVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCk7Cit9CisKK0FMV0FZU19JTkxJTkUgYm9v
bCBKU09iamVjdDo6cHV0SW5saW5lRmFzdChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQ
cm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3Qm
IHNsb3QpCit7CisgICAgQVNTRVJUKCFwYXJzZUluZGV4KHByb3BlcnR5TmFtZSkpOworCisgICAg
Vk0mIHZtID0gZ2V0Vk0oZ2xvYmFsT2JqZWN0KTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CisKKyAgICAvLyBGSVhNRTogRm9yIGEgZmFpbHVyZSBkdWUgdG8gbm9u
LWV4dGVuc2libGUgc3RydWN0dXJlLCB0aGUgZXJyb3IgbWVzc2FnZSBpcyBtaXNsZWFkaW5nLgor
ICAgIGlmICghcHV0RGlyZWN0SW50ZXJuYWw8UHV0TW9kZVB1dD4odm0sIHByb3BlcnR5TmFtZSwg
dmFsdWUsIDAsIHNsb3QpKQorICAgICAgICByZXR1cm4gdHlwZUVycm9yKGdsb2JhbE9iamVjdCwg
c2NvcGUsIHNsb3QuaXNTdHJpY3RNb2RlKCksIFJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9yKTsK
KyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogLy8gSGFzT3duUHJvcGVydHkoTywgUCkgZnJvbSBzZWN0
aW9uIDcuMy4xMSBpbiB0aGUgc3BlYy4KQEAgLTI5OSw3ICszMTIsNyBAQCBBTFdBWVNfSU5MSU5F
IGJvb2wgSlNPYmplY3Q6OnB1dERpcmVjdEluCiAgICAgICAgIHVuc2lnbmVkIGN1cnJlbnRBdHRy
aWJ1dGVzOwogICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldCh2
bSwgcHJvcGVydHlOYW1lLCBjdXJyZW50QXR0cmlidXRlcyk7CiAgICAgICAgIGlmIChvZmZzZXQg
IT0gaW52YWxpZE9mZnNldCkgewotICAgICAgICAgICAgaWYgKChtb2RlID09IFB1dE1vZGVQdXQp
ICYmIGN1cnJlbnRBdHRyaWJ1dGVzICYgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5KQorICAg
ICAgICAgICAgaWYgKChtb2RlID09IFB1dE1vZGVQdXQpICYmIGN1cnJlbnRBdHRyaWJ1dGVzICYg
UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5T3JBY2Nlc3Nvck9yQ3VzdG9tQWNjZXNzb3IpCiAg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgICAgICBwdXREaXJlY3Qodm0s
IG9mZnNldCwgdmFsdWUpOwpAQCAtMzU4LDcgKzM3MSw3IEBAIEFMV0FZU19JTkxJTkUgYm9vbCBK
U09iamVjdDo6cHV0RGlyZWN0SW4KICAgICB1bnNpZ25lZCBjdXJyZW50QXR0cmlidXRlczsKICAg
ICBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldCh2bSwgcHJvcGVydHlOYW1lLCBjdXJyZW50QXR0cmli
dXRlcyk7CiAgICAgaWYgKG9mZnNldCAhPSBpbnZhbGlkT2Zmc2V0KSB7Ci0gICAgICAgIGlmICgo
bW9kZSA9PSBQdXRNb2RlUHV0KSAmJiBjdXJyZW50QXR0cmlidXRlcyAmIFByb3BlcnR5QXR0cmli
dXRlOjpSZWFkT25seSkKKyAgICAgICAgaWYgKChtb2RlID09IFB1dE1vZGVQdXQpICYmIGN1cnJl
bnRBdHRyaWJ1dGVzICYgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5T3JBY2Nlc3Nvck9yQ3Vz
dG9tQWNjZXNzb3IpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgc3RydWN0
dXJlLT5kaWRSZXBsYWNlUHJvcGVydHkob2Zmc2V0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTUHJveHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1Byb3h5LmgJKHJldmlzaW9uIDI3NjQ5OSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTUHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNyBA
QCBuYW1lc3BhY2UgSlNDIHsKIGNsYXNzIEpTUHJveHkgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVj
dCB7CiBwdWJsaWM6CiAgICAgdXNpbmcgQmFzZSA9IEpTTm9uRmluYWxPYmplY3Q7Ci0gICAgc3Rh
dGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZs
YWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVy
dHlOYW1lcyB8IE92ZXJyaWRlc0dldFByb3RvdHlwZSB8IEludGVyY2VwdHNHZXRPd25Qcm9wZXJ0
eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm87CisgICAgc3RhdGljIGNvbnN0ZXhw
ciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJp
ZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlOYW1lcyB8IE92
ZXJyaWRlc1B1dCB8IE92ZXJyaWRlc0dldFByb3RvdHlwZSB8IEludGVyY2VwdHNHZXRPd25Qcm9w
ZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm87CiAKICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+CiAgICAgc3RhdGljIElzb1N1YnNwYWNl
KiBzdWJzcGFjZUZvcihWTSYgdm0pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU1R5cGVJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNUeXBlSW5mby5oCShyZXZpc2lvbiAyNzY0OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1R5cGVJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDcgKzU3LDcgQEAg
c3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBJc0ltbXV0YWJsZVBybwogc3RhdGljIGNvbnN0ZXhw
ciB1bnNpZ25lZCBHZXRPd25Qcm9wZXJ0eVNsb3RJc0ltcHVyZUZvclByb3BlcnR5QWJzZW5jZSA9
IDEgPDwgMTU7CiBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIEludGVyY2VwdHNHZXRPd25Qcm9w
ZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8gPSAxIDw8IDE2Owogc3RhdGlj
IGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVJc0ltbW9ydGFsID0gMSA8PCAxNzsKLXN0YXRp
YyBjb25zdGV4cHIgdW5zaWduZWQgSGFzUHV0UHJvcGVydHlTZWN1cml0eUNoZWNrID0gMSA8PCAx
ODsKK3N0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgT3ZlcnJpZGVzUHV0ID0gMSA8PCAxODsKIHN0
YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgT3ZlcnJpZGVzR2V0UHJvdG90eXBlID0gMSA8PCAxOTsK
IHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgR2V0T3duUHJvcGVydHlTbG90TWF5QmVXcm9uZ0Fi
b3V0RG9udEVudW0gPSAxIDw8IDIwOwogCkBAIC05NCw2ICs5NCw3IEBAIHB1YmxpYzoKICAgICBi
b29sIGltcGxlbWVudHNEZWZhdWx0SGFzSW5zdGFuY2UoKSBjb25zdCB7IHJldHVybiBpc1NldE9u
RmxhZ3MxPEltcGxlbWVudHNEZWZhdWx0SGFzSW5zdGFuY2U+KCk7IH0KICAgICBib29sIG92ZXJy
aWRlc0dldENhbGxEYXRhKCkgY29uc3QgeyByZXR1cm4gaXNTZXRPbkZsYWdzMTxPdmVycmlkZXNH
ZXRDYWxsRGF0YT4oKTsgfQogICAgIGJvb2wgb3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90KCkg
Y29uc3QgeyByZXR1cm4gb3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90KGlubGluZVR5cGVGbGFn
cygpKTsgfQorICAgIGJvb2wgaGFzU3RhdGljUHJvcGVydHlUYWJsZSgpIGNvbnN0IHsgcmV0dXJu
IGlzU2V0T25GbGFnczE8SGFzU3RhdGljUHJvcGVydHlUYWJsZT4oKTsgfQogICAgIHN0YXRpYyBi
b29sIG92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdChJbmxpbmVUeXBlRmxhZ3MgZmxhZ3MpIHsg
cmV0dXJuIGZsYWdzICYgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90OyB9CiAgICAgc3RhdGlj
IGJvb2wgaGFzU3RhdGljUHJvcGVydHlUYWJsZShJbmxpbmVUeXBlRmxhZ3MgZmxhZ3MpIHsgcmV0
dXJuIGZsYWdzICYgSGFzU3RhdGljUHJvcGVydHlUYWJsZTsgfQogICAgIHN0YXRpYyBib29sIHBl
ckNlbGxCaXQoSW5saW5lVHlwZUZsYWdzIGZsYWdzKSB7IHJldHVybiBmbGFncyAmIFR5cGVJbmZv
UGVyQ2VsbEJpdDsgfQpAQCAtMTAyLDEyICsxMDMsMTIgQEAgcHVibGljOgogICAgIGJvb2wgb3Zl
cnJpZGVzR2V0T3duUHJvcGVydHlOYW1lcygpIGNvbnN0IHsgcmV0dXJuIGlzU2V0T25GbGFnczI8
T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlOYW1lcz4oKTsgfQogICAgIGJvb2wgb3ZlcnJpZGVzR2V0
T3duU3BlY2lhbFByb3BlcnR5TmFtZXMoKSBjb25zdCB7IHJldHVybiBpc1NldE9uRmxhZ3MyPE92
ZXJyaWRlc0dldE93blNwZWNpYWxQcm9wZXJ0eU5hbWVzPigpOyB9CiAgICAgYm9vbCBvdmVycmlk
ZXNBbnlGb3JtT2ZHZXRPd25Qcm9wZXJ0eU5hbWVzKCkgY29uc3QgeyByZXR1cm4gb3ZlcnJpZGVz
R2V0T3duUHJvcGVydHlOYW1lcygpIHx8IG92ZXJyaWRlc0dldE93blNwZWNpYWxQcm9wZXJ0eU5h
bWVzKCk7IH0KKyAgICBib29sIG92ZXJyaWRlc1B1dCgpIGNvbnN0IHsgcmV0dXJuIGlzU2V0T25G
bGFnczI8T3ZlcnJpZGVzUHV0PigpOyB9CiAgICAgYm9vbCBvdmVycmlkZXNHZXRQcm90b3R5cGUo
KSBjb25zdCB7IHJldHVybiBpc1NldE9uRmxhZ3MyPE92ZXJyaWRlc0dldFByb3RvdHlwZT4oKTsg
fQogICAgIGJvb2wgcHJvaGliaXRzUHJvcGVydHlDYWNoaW5nKCkgY29uc3QgeyByZXR1cm4gaXNT
ZXRPbkZsYWdzMjxQcm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmc+KCk7IH0KICAgICBib29sIGdldE93
blByb3BlcnR5U2xvdElzSW1wdXJlKCkgY29uc3QgeyByZXR1cm4gaXNTZXRPbkZsYWdzMjxHZXRP
d25Qcm9wZXJ0eVNsb3RJc0ltcHVyZT4oKTsgfQogICAgIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90
SXNJbXB1cmVGb3JQcm9wZXJ0eUFic2VuY2UoKSBjb25zdCB7IHJldHVybiBpc1NldE9uRmxhZ3My
PEdldE93blByb3BlcnR5U2xvdElzSW1wdXJlRm9yUHJvcGVydHlBYnNlbmNlPigpOyB9CiAgICAg
Ym9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RNYXlCZVdyb25nQWJvdXREb250RW51bSgpIGNvbnN0IHsg
cmV0dXJuIGlzU2V0T25GbGFnczI8R2V0T3duUHJvcGVydHlTbG90TWF5QmVXcm9uZ0Fib3V0RG9u
dEVudW0+KCk7IH0KLSAgICBib29sIGhhc1B1dFByb3BlcnR5U2VjdXJpdHlDaGVjaygpIGNvbnN0
IHsgcmV0dXJuIGlzU2V0T25GbGFnczI8SGFzUHV0UHJvcGVydHlTZWN1cml0eUNoZWNrPigpOyB9
CiAgICAgYm9vbCBuZXdJbXB1cmVQcm9wZXJ0eUZpcmVzV2F0Y2hwb2ludHMoKSBjb25zdCB7IHJl
dHVybiBpc1NldE9uRmxhZ3MyPE5ld0ltcHVyZVByb3BlcnR5RmlyZXNXYXRjaHBvaW50cz4oKTsg
fQogICAgIGJvb2wgaXNJbW11dGFibGVQcm90b3R5cGVFeG90aWNPYmplY3QoKSBjb25zdCB7IHJl
dHVybiBpc1NldE9uRmxhZ3MyPElzSW1tdXRhYmxlUHJvdG90eXBlRXhvdGljT2JqZWN0PigpOyB9
CiAgICAgYm9vbCBpbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVu
Z3RoSXNOb3RaZXJvKCkgY29uc3QgeyByZXR1cm4gaXNTZXRPbkZsYWdzMjxJbnRlcmNlcHRzR2V0
T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvPigpOyB9CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Mb29rdXAuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Mb29rdXAuaAkocmV2aXNpb24gMjc2NDk5KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTG9va3VwLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI2Miw3MCArMjYyLDYgQEAgaW5saW5lIGJvb2wgcmVwbGFjZVN0YXRpY1Byb3BlcnR5U2xv
dChWTQogICAgIHJldHVybiB0cnVlOwogfQogCi0vLyAnYmFzZScgbWVhbnMgdGhlIG9iamVjdCBo
b2xkaW5nIHRoZSBwcm9wZXJ0eSAocG9zc2libHkgaW4gdGhlIHByb3RvdHlwZSBjaGFpbiBvZiB0
aGUgb2JqZWN0IHB1dCB3YXMgY2FsbGVkIG9uKS4KLS8vICd0aGlzVmFsdWUnIGlzIHRoZSBvYmpl
Y3QgdGhhdCBwdXQgaXMgYmVpbmcgYXBwbGllZCB0byAoaW4gdGhlIGNhc2Ugb2YgYSBwcm94eSwg
dGhlIHByb3h5IHRhcmdldCkuCi0vLyAnc2xvdC50aGlzVmFsdWUoKScgaXMgdGhlIG9iamVjdCB0
aGUgcHV0IHdhcyBvcmlnaW5hbGx5IHBlcmZvcm1lZCBvbiAoaW4gdGhlIGNhc2Ugb2YgYSBwcm94
eSwgdGhlIHByb3h5IGl0c2VsZikuCi1pbmxpbmUgYm9vbCBwdXRFbnRyeShKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBjb25zdCBDbGFzc0luZm8qLCBjb25zdCBIYXNoVGFibGVWYWx1ZSog
ZW50cnksIEpTT2JqZWN0KiBiYXNlLCBKU09iamVjdCogdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUg
cHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCi17Ci0g
ICAgVk0mIHZtID0gZ2V0Vk0oZ2xvYmFsT2JqZWN0KTsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICBpZiAoZW50cnktPmF0dHJpYnV0ZXMoKSAmIFByb3Bl
cnR5QXR0cmlidXRlOjpCdWlsdGluT3JGdW5jdGlvbk9yTGF6eVByb3BlcnR5KSB7Ci0gICAgICAg
IGlmICghKGVudHJ5LT5hdHRyaWJ1dGVzKCkgJiBQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkp
KSB7Ci0gICAgICAgICAgICAvLyBJZiB0aGlzIGlzIGEgZnVuY3Rpb24gb3IgbGF6eSBwcm9wZXJ0
eSBwdXQgdGhlbiB3ZSBqdXN0IGRvIHRoZSBwdXQgYmVjYXVzZQotICAgICAgICAgICAgLy8gbG9n
aWNhbGx5IHRoZSBvYmplY3QgYWxyZWFkeSBoYWQgdGhlIHByb3BlcnR5LCBzbyB0aGlzIGlzIGp1
c3QgYSByZXBsYWNlLgotICAgICAgICAgICAgLy8gRklYTUU6IHRoaXNWYWx1ZSBtYXkgYmUgYW4g
b2JqZWN0IHdpdGggbm9uLWV4dGVuc2libGUgc3RydWN0dXJlIHdlIG11c3QgdGhyb3cgZm9yLgot
ICAgICAgICAgICAgaWYgKEpTT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNEeW5hbWljQ2FzdDxKU09i
amVjdCo+KHZtLCB0aGlzVmFsdWUpKQotICAgICAgICAgICAgICAgIHRoaXNPYmplY3QtPnB1dERp
cmVjdCh2bSwgcHJvcGVydHlOYW1lLCB2YWx1ZSk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICAgICAgfQotICAgICAgICByZXR1cm4gdHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUs
IHNsb3QuaXNTdHJpY3RNb2RlKCksIFJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9yKTsKLSAgICB9
Ci0KLSAgICBpZiAoZW50cnktPmF0dHJpYnV0ZXMoKSAmIFByb3BlcnR5QXR0cmlidXRlOjpBY2Nl
c3NvcikKLSAgICAgICAgcmV0dXJuIHR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCBzbG90
LmlzU3RyaWN0TW9kZSgpLCBSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcik7Ci0KLSAgICBpZiAo
IShlbnRyeS0+YXR0cmlidXRlcygpICYgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5KSkgewot
ICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKCEoZW50cnktPmF0dHJpYnV0ZXMoKSAmIFByb3Bl
cnR5QXR0cmlidXRlOjpET01KSVRBdHRyaWJ1dGUpLCAiRE9NSklUQXR0cmlidXRlIHN1cHBvcnRz
IHJlYWRvbmx5IGF0dHJpYnV0ZXMgY3VycmVudGx5LiIpOwotICAgICAgICBib29sIGlzQWNjZXNz
b3IgPSBlbnRyeS0+YXR0cmlidXRlcygpICYgUHJvcGVydHlBdHRyaWJ1dGU6OkN1c3RvbUFjY2Vz
c29yOwotICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIG9ubHkgYmUgY2FjaGluZyB0aGVzZSBp
ZiB3ZSdyZSBub3QgYW4gdW5jYWNoZWFibGUgZGljdGlvbmFyeToKLSAgICAgICAgLy8gaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNTM0NwotICAgICAgICAvLyBXZSBu
ZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHdlIGRlY2lkZSB0byBjYWNoZSB0aGlzIHByb3BlcnR5IGJl
Zm9yZSB3ZSBwb3RlbnRpYWxseSBleGVjdXRlIGFyaWJpdHJhcnkgSlMuCi0gICAgICAgIGlmIChp
c0FjY2Vzc29yKQotICAgICAgICAgICAgc2xvdC5zZXRDdXN0b21BY2Nlc3NvcihiYXNlLCBlbnRy
eS0+cHJvcGVydHlQdXR0ZXIoKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNsb3Quc2V0
Q3VzdG9tVmFsdWUoYmFzZSwgZW50cnktPnByb3BlcnR5UHV0dGVyKCkpOwotCi0gICAgICAgIGF1
dG8gcmVzdWx0ID0gY2FsbEN1c3RvbVNldHRlcihnbG9iYWxPYmplY3QsIGVudHJ5LT5wcm9wZXJ0
eVB1dHRlcigpLCBpc0FjY2Vzc29yLCBiYXNlLCBzbG90LnRoaXNWYWx1ZSgpLCB2YWx1ZSwgcHJv
cGVydHlOYW1lKTsKLSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZmFsc2UpOwot
ICAgICAgICBpZiAocmVzdWx0ICE9IFRyaVN0YXRlOjpJbmRldGVybWluYXRlKQotICAgICAgICAg
ICAgcmV0dXJuIHJlc3VsdCA9PSBUcmlTdGF0ZTo6VHJ1ZTsKLQotICAgICAgICAvLyBGSVhNRTog
dGhpc1ZhbHVlIG1heSBiZSBhbiBvYmplY3Qgd2l0aCBub24tZXh0ZW5zaWJsZSBzdHJ1Y3R1cmUg
d2UgbXVzdCB0aHJvdyBmb3IuCi0gICAgICAgIGlmIChKU09iamVjdCogdGhpc09iamVjdCA9IGpz
RHluYW1pY0Nhc3Q8SlNPYmplY3QqPih2bSwgdGhpc1ZhbHVlKSkKLSAgICAgICAgICAgIHRoaXNP
YmplY3QtPnB1dERpcmVjdCh2bSwgcHJvcGVydHlOYW1lLCB2YWx1ZSk7Ci0gICAgICAgIHJldHVy
biB0cnVlOwotICAgIH0KLQotICAgIHJldHVybiB0eXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29w
ZSwgc2xvdC5pc1N0cmljdE1vZGUoKSwgUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpOwotfQot
Ci0vKioKLSAqIFRoaXMgb25lIGlzIGZvciAicHV0Ii4KLSAqIEl0IGxvb2tzIHVwIGEgaGFzaCBl
bnRyeSBmb3IgdGhlIHByb3BlcnR5IHRvIGJlIHNldC4gIElmIGFuIGVudHJ5Ci0gKiBpcyBmb3Vu
ZCBpdCBzZXRzIHRoZSB2YWx1ZSBhbmQgcmV0dXJucyB0cnVlLCBlbHNlIGl0IHJldHVybnMgZmFs
c2UuCi0gKi8KLWlubGluZSBib29sIGxvb2t1cFB1dChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU09iamVjdCogYmFzZSwgSlNWYWx1ZSB2
YWx1ZSwgY29uc3QgSGFzaFRhYmxlJiB0YWJsZSwgUHV0UHJvcGVydHlTbG90JiBzbG90LCBib29s
JiBwdXRSZXN1bHQpCi17Ci0gICAgY29uc3QgSGFzaFRhYmxlVmFsdWUqIGVudHJ5ID0gdGFibGUu
ZW50cnkocHJvcGVydHlOYW1lKTsKLQotICAgIGlmICghZW50cnkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIHB1dFJlc3VsdCA9IHB1dEVudHJ5KGdsb2JhbE9iamVjdCwgdGFibGUuY2xh
c3NGb3JUaGlzLCBlbnRyeSwgYmFzZSwgYmFzZSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCk7
Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KIGlubGluZSB2b2lkIHJlaWZ5U3RhdGljUHJvcGVydHko
Vk0mIHZtLCBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbywgY29uc3QgUHJvcGVydHlOYW1lJiBw
cm9wZXJ0eU5hbWUsIGNvbnN0IEhhc2hUYWJsZVZhbHVlJiB2YWx1ZSwgSlNPYmplY3QmIHRoaXNP
YmopCiB7CiAgICAgaWYgKHZhbHVlLmF0dHJpYnV0ZXMoKSAmIFByb3BlcnR5QXR0cmlidXRlOjpC
dWlsdGluKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eVNs
b3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0
eVNsb3QuaAkocmV2aXNpb24gMjc2NDk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvUHJvcGVydHlTbG90LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDYgKzQ3LDcgQEAgZW51bSBj
bGFzcyBQcm9wZXJ0eUF0dHJpYnV0ZSA6IHVuc2lnbmVkIAogICAgIEN1c3RvbVZhbHVlICAgICAg
ID0gMSA8PCA2LAogICAgIEN1c3RvbUFjY2Vzc29yT3JWYWx1ZSA9IEN1c3RvbUFjY2Vzc29yIHwg
Q3VzdG9tVmFsdWUsCiAgICAgQWNjZXNzb3JPckN1c3RvbUFjY2Vzc29yT3JWYWx1ZSA9IEFjY2Vz
c29yIHwgQ3VzdG9tQWNjZXNzb3IgfCBDdXN0b21WYWx1ZSwKKyAgICBSZWFkT25seU9yQWNjZXNz
b3JPckN1c3RvbUFjY2Vzc29yID0gUmVhZE9ubHkgfCBBY2Nlc3NvciB8IEN1c3RvbUFjY2Vzc29y
LAogCiAgICAgLy8gVGhpbmdzIHRoYXQgYXJlIHVzZWQgYnkgc3RhdGljIGhhc2h0YWJsZXMgYXJl
IG5vdCBpbiB0aGUgYXR0cmlidXRlcyBieXRlIGluIFByb3BlcnR5TWFwRW50cnkuCiAgICAgRnVu
Y3Rpb24gICAgICAgICAgPSAxIDw8IDgsICAvLyBwcm9wZXJ0eSBpcyBhIGZ1bmN0aW9uIC0gb25s
eSB1c2VkIGJ5IHN0YXRpYyBoYXNodGFibGVzCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Qcm94eU9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvUHJveHlPYmplY3QuY3BwCShyZXZpc2lvbiAyNzY0OTkpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm94eU9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQ2NCw2ICs0NjQsNyBAQCBib29sIFByb3h5T2JqZWN0OjpwdXQoSlNDZWxsKiBjZWxsLCBKU0ds
CiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIHNsb3QuZGlzYWJsZUNh
Y2hpbmcoKTsKKyAgICBzbG90LnNldElzVGFpbnRlZEJ5T3BhcXVlT2JqZWN0KCk7CiAKICAgICBQ
cm94eU9iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxQcm94eU9iamVjdCo+KGNlbGwpOwogICAg
IGF1dG8gcGVyZm9ybURlZmF1bHRQdXQgPSBbJl0gKCkgewpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvUHJveHlPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9Qcm94eU9iamVjdC5oCShyZXZpc2lvbiAyNzY0OTkpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm94eU9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zNCw3ICszNCw3IEBAIGNsYXNzIFByb3h5T2JqZWN0IGZpbmFsIDogcHVibGljIEpTTm9uRmkK
IHB1YmxpYzoKICAgICB0eXBlZGVmIEpTTm9uRmluYWxPYmplY3QgQmFzZTsKIAotICAgIHN0YXRp
YyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFn
cyB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5
TmFtZXMgfCBPdmVycmlkZXNHZXRQcm90b3R5cGUgfCBPdmVycmlkZXNHZXRDYWxsRGF0YSB8IElu
dGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8g
fCBQcm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmc7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25l
ZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJpZGVzR2V0T3du
UHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlOYW1lcyB8IE92ZXJyaWRlc0dl
dFByb3RvdHlwZSB8IE92ZXJyaWRlc0dldENhbGxEYXRhIHwgT3ZlcnJpZGVzUHV0IHwgSW50ZXJj
ZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8IFBy
b2hpYml0c1Byb3BlcnR5Q2FjaGluZzsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBl
LCBTdWJzcGFjZUFjY2VzcyBtb2RlPgogICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VG
b3IoVk0mIHZtKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHV0UHJvcGVy
dHlTbG90LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHV0
UHJvcGVydHlTbG90LmgJKHJldmlzaW9uIDI3NjQ5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1B1dFByb3BlcnR5U2xvdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw3ICszNyw3
IEBAIGNsYXNzIEpTRnVuY3Rpb247CiBjbGFzcyBQdXRQcm9wZXJ0eVNsb3QgewogcHVibGljOgog
ICAgIGVudW0gVHlwZSA6IHVpbnQ4X3QgeyBVbmNhY2hhYmxlLCBFeGlzdGluZ1Byb3BlcnR5LCBO
ZXdQcm9wZXJ0eSwgU2V0dGVyUHJvcGVydHksIEN1c3RvbVZhbHVlLCBDdXN0b21BY2Nlc3NvciB9
OwotICAgIGVudW0gQ29udGV4dCB7IFVua25vd25Db250ZXh0LCBQdXRCeUlkLCBQdXRCeUlkRXZh
bCB9OworICAgIGVudW0gQ29udGV4dCA6IHVpbnQ4X3QgeyBVbmtub3duQ29udGV4dCwgUHV0QnlJ
ZCwgUHV0QnlJZEV2YWwsIFJlZmxlY3RTZXQgfTsKICAgICB1c2luZyBQdXRWYWx1ZUZ1bmMgPSBK
U0M6OlB1dFZhbHVlRnVuYzsKICAgICB1c2luZyBQdXRWYWx1ZUZ1bmNXaXRoUHRyID0gSlNDOjpQ
dXRWYWx1ZUZ1bmNXaXRoUHRyOwogCkBAIC00Nyw2ICs0Nyw3IEBAIHB1YmxpYzoKICAgICAgICAg
LCBtX29mZnNldChpbnZhbGlkT2Zmc2V0KQogICAgICAgICAsIG1faXNTdHJpY3RNb2RlKGlzU3Ry
aWN0TW9kZSkKICAgICAgICAgLCBtX2lzSW5pdGlhbGl6YXRpb24oaXNJbml0aWFsaXphdGlvbikK
KyAgICAgICAgLCBtX2lzVGFpbnRlZEJ5T3BhcXVlT2JqZWN0KGZhbHNlKQogICAgICAgICAsIG1f
dHlwZShVbmNhY2hhYmxlKQogICAgICAgICAsIG1fY29udGV4dChjb250ZXh0KQogICAgICAgICAs
IG1fY2FjaGVhYmlsaXR5KENhY2hpbmdBbGxvd2VkKQpAQCAtMTA0LDkgKzEwNSw4IEBAIHB1Ymxp
YzoKICAgICAgICAgcmV0dXJuIG1fcHV0RnVuY3Rpb247CiAgICAgfQogCi0gICAgQ29udGV4dCBj
b250ZXh0KCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Q29udGV4dD4obV9jb250ZXh0KTsg
fQotCiAgICAgVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9CisgICAgQ29udGV4
dCBjb250ZXh0KCkgY29uc3QgeyByZXR1cm4gbV9jb250ZXh0OyB9CiAgICAgSlNPYmplY3QqIGJh
c2UoKSBjb25zdCB7IHJldHVybiBtX2Jhc2U7IH0KICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSgpIGNv
bnN0IHsgcmV0dXJuIG1fdGhpc1ZhbHVlOyB9CiAKQEAgLTExNiw2ICsxMTYsOCBAQCBwdWJsaWM6
CiAgICAgYm9vbCBpc0NhY2hlYWJsZUN1c3RvbSgpIGNvbnN0IHsgcmV0dXJuIGlzQ2FjaGVhYmxl
KCkgJiYgKG1fdHlwZSA9PSBDdXN0b21WYWx1ZSB8fCBtX3R5cGUgPT0gQ3VzdG9tQWNjZXNzb3Ip
ICYmICEhbV9wdXRGdW5jdGlvbjsgfQogICAgIGJvb2wgaXNDdXN0b21BY2Nlc3NvcigpIGNvbnN0
IHsgcmV0dXJuIGlzQ2FjaGVhYmxlKCkgJiYgbV90eXBlID09IEN1c3RvbUFjY2Vzc29yOyB9CiAg
ICAgYm9vbCBpc0luaXRpYWxpemF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9pc0luaXRpYWxpemF0
aW9uOyB9CisgICAgYm9vbCBpc1RhaW50ZWRCeU9wYXF1ZU9iamVjdCgpIGNvbnN0IHsgcmV0dXJu
IG1faXNUYWludGVkQnlPcGFxdWVPYmplY3Q7IH0KKyAgICB2b2lkIHNldElzVGFpbnRlZEJ5T3Bh
cXVlT2JqZWN0KCkgeyBtX2lzVGFpbnRlZEJ5T3BhcXVlT2JqZWN0ID0gdHJ1ZTsgfQogCiAgICAg
UHJvcGVydHlPZmZzZXQgY2FjaGVkT2Zmc2V0KCkgY29uc3QKICAgICB7CkBAIC0xMzUsOCArMTM3
LDkgQEAgcHJpdmF0ZToKICAgICBQcm9wZXJ0eU9mZnNldCBtX29mZnNldDsKICAgICBib29sIG1f
aXNTdHJpY3RNb2RlIDogMTsKICAgICBib29sIG1faXNJbml0aWFsaXphdGlvbiA6IDE7CisgICAg
Ym9vbCBtX2lzVGFpbnRlZEJ5T3BhcXVlT2JqZWN0IDogMTsKICAgICBUeXBlIG1fdHlwZTsKLSAg
ICB1aW50OF90IG1fY29udGV4dDsKKyAgICBDb250ZXh0IG1fY29udGV4dDsKICAgICBDYWNoZWFi
aWxpdHlUeXBlIG1fY2FjaGVhYmlsaXR5OwogICAgIEZ1bmN0aW9uUHRyPEN1c3RvbUFjY2Vzc29y
UHRyVGFnPiBtX3B1dEZ1bmN0aW9uOwogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1JlZmxlY3RPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1JlZmxlY3RPYmplY3QuY3BwCShyZXZpc2lvbiAyNzY0OTkpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWZsZWN0T2JqZWN0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjYwLDcgKzI2MCw3IEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihyZWZsZWN0T2Jq
ZWN0U2UKIAogICAgIC8vIERvIG5vdCByYWlzZSBhbnkgcmVhZG9ubHkgZXJyb3JzIHRoYXQgaGFw
cGVuIGluIHN0cmljdCBtb2RlLgogICAgIGJvb2wgc2hvdWxkVGhyb3dJZkNhbnRTZXQgPSBmYWxz
ZTsKLSAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChyZWNlaXZlciwgc2hvdWxkVGhyb3dJZkNhbnRT
ZXQpOworICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KHJlY2VpdmVyLCBzaG91bGRUaHJvd0lmQ2Fu
dFNldCwgUHV0UHJvcGVydHlTbG90OjpSZWZsZWN0U2V0KTsKICAgICBSRUxFQVNFX0FORF9SRVRV
Uk4oc2NvcGUsIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4odGFyZ2V0T2JqZWN0LT5tZXRob2RU
YWJsZSh2bSktPnB1dCh0YXJnZXRPYmplY3QsIGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCBj
YWxsRnJhbWUtPmFyZ3VtZW50KDIpLCBzbG90KSkpKTsKIH0KIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBPYmplY3QuY3BwCShyZXZpc2lvbiAyNzY0OTkp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBPYmplY3QuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMzQsMTkgKzEzNCwyNCBAQCBKU0NfREVGSU5FX0NVU1RPTV9TRVRURVIo
cmVnRXhwT2JqZWN0U2V0CiBib29sIFJlZ0V4cE9iamVjdDo6cHV0KEpTQ2VsbCogY2VsbCwgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNW
YWx1ZSB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBzbG90KQogewogICAgIFZNJiB2bSA9IGdsb2Jh
bE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CiAgICAgUmVnRXhwT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PFJlZ0V4cE9iamVjdCo+KGNl
bGwpOwogCi0gICAgaWYgKFVOTElLRUxZKGlzVGhpc1ZhbHVlQWx0ZXJlZChzbG90LCB0aGlzT2Jq
ZWN0KSkpCi0gICAgICAgIHJldHVybiBvcmRpbmFyeVNldFNsb3coZ2xvYmFsT2JqZWN0LCB0aGlz
T2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90LnRoaXNWYWx1ZSgpLCBzbG90LmlzU3Ry
aWN0TW9kZSgpKTsKLQogICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gdm0ucHJvcGVydHlOYW1lcy0+
bGFzdEluZGV4KSB7CisgICAgICAgIGlmICghdGhpc09iamVjdC0+bGFzdEluZGV4SXNXcml0YWJs
ZSgpKQorICAgICAgICAgICAgcmV0dXJuIHR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCBz
bG90LmlzU3RyaWN0TW9kZSgpLCBSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcik7CisKKyAgICAg
ICAgaWYgKFVOTElLRUxZKHNsb3QudGhpc1ZhbHVlKCkgIT0gdGhpc09iamVjdCkpCisgICAgICAg
ICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTT2JqZWN0OjpkZWZpbmVQcm9wZXJ0eU9u
UmVjZWl2ZXIoZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KSk7CisKICAg
ICAgICAgYm9vbCByZXN1bHQgPSB0aGlzT2JqZWN0LT5zZXRMYXN0SW5kZXgoZ2xvYmFsT2JqZWN0
LCB2YWx1ZSwgc2xvdC5pc1N0cmljdE1vZGUoKSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIGZhbHNlKTsKICAgICAgICAgc2xvdC5zZXRDdXN0b21WYWx1ZSh0aGlzT2JqZWN0
LCBzbG90LmlzU3RyaWN0TW9kZSgpCiAgICAgICAgICAgICA/IHJlZ0V4cE9iamVjdFNldExhc3RJ
bmRleFN0cmljdAogICAgICAgICAgICAgOiByZWdFeHBPYmplY3RTZXRMYXN0SW5kZXhOb25TdHJp
Y3QpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KLSAgICByZXR1cm4gQmFzZTo6cHV0
KGNlbGwsIGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCk7CisgICAgUkVM
RUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBCYXNlOjpwdXQoY2VsbCwgZ2xvYmFsT2JqZWN0LCBwcm9w
ZXJ0eU5hbWUsIHZhbHVlLCBzbG90KSk7CiB9CiAKIEpTVmFsdWUgUmVnRXhwT2JqZWN0OjpleGVj
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTU3RyaW5nKiBzdHJpbmcpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBPYmplY3QuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBPYmplY3QuaAkocmV2aXNpb24g
Mjc2NDk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiBjbGFzcyBS
ZWdFeHBPYmplY3QgZmluYWwgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7CiBwdWJsaWM6CiAg
ICAgdXNpbmcgQmFzZSA9IEpTTm9uRmluYWxPYmplY3Q7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB1
bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJpZGVz
R2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzR2V0T3duU3BlY2lhbFByb3BlcnR5TmFtZXM7
CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0
cnVjdHVyZUZsYWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzR2V0
T3duU3BlY2lhbFByb3BlcnR5TmFtZXMgfCBPdmVycmlkZXNQdXQ7CiAKICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4KICAgICBzdGF0aWMgSXNvU3Vi
c3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1N0cmluZ09iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvU3RyaW5nT2JqZWN0LmNwcAkocmV2aXNpb24gMjc2NDk5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNjgsMTEgKzY4LDEwIEBAIGJvb2wgU3RyaW5nT2JqZWN0OjpwdXQoSlNDZWxsKiBjZWxsLCBK
U0cKIAogICAgIFN0cmluZ09iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxTdHJpbmdPYmplY3Qq
PihjZWxsKTsKIAotICAgIGlmIChVTkxJS0VMWShpc1RoaXNWYWx1ZUFsdGVyZWQoc2xvdCwgdGhp
c09iamVjdCkpKSAKLSAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBvcmRpbmFyeVNl
dFNsb3coZ2xvYmFsT2JqZWN0LCB0aGlzT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90
LnRoaXNWYWx1ZSgpLCBzbG90LmlzU3RyaWN0TW9kZSgpKSk7Ci0KICAgICBpZiAocHJvcGVydHlO
YW1lID09IHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCkKICAgICAgICAgcmV0dXJuIHR5cGVFcnJv
cihnbG9iYWxPYmplY3QsIHNjb3BlLCBzbG90LmlzU3RyaWN0TW9kZSgpLCBSZWFkb25seVByb3Bl
cnR5V3JpdGVFcnJvcik7CisgICAgaWYgKFVOTElLRUxZKHNsb3QudGhpc1ZhbHVlKCkgIT0gdGhp
c09iamVjdCkpCisgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgSlNPYmplY3Q6OnB1
dChjZWxsLCBnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpKTsKICAgICBp
ZiAoT3B0aW9uYWw8dWludDMyX3Q+IGluZGV4ID0gcGFyc2VJbmRleChwcm9wZXJ0eU5hbWUpKSAK
ICAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBwdXRCeUluZGV4KGNlbGwsIGdsb2Jh
bE9iamVjdCwgaW5kZXgudmFsdWUoKSwgdmFsdWUsIHNsb3QuaXNTdHJpY3RNb2RlKCkpKTsKICAg
ICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTT2JqZWN0OjpwdXQoY2VsbCwgZ2xvYmFsT2Jq
ZWN0LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TdHJpbmdPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TdHJpbmdPYmplY3QuaAkocmV2aXNpb24gMjc2NDk5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nT2JqZWN0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTI4LDcgKzI4LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiBjbGFzcyBTdHJpbmdPYmplY3QgOiBw
dWJsaWMgSlNXcmFwcGVyT2JqZWN0IHsKIHB1YmxpYzoKICAgICB1c2luZyBCYXNlID0gSlNXcmFw
cGVyT2JqZWN0OwotICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3Mg
PSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92
ZXJyaWRlc0dldE93blByb3BlcnR5TmFtZXMgfCBJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90
QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvOworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5z
aWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IE92ZXJyaWRlc0dl
dE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5TmFtZXMgfCBPdmVycmlk
ZXNQdXQgfCBJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3Ro
SXNOb3RaZXJvOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+
CiAgICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdQcm90b3R5cGUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ1Byb3RvdHlwZS5jcHAJKHJl
dmlzaW9uIDI3NjQ5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ1By
b3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMSw5ICsxMjEsOSBAQCBTdHJpbmdQcm90
b3R5cGU6OlN0cmluZ1Byb3RvdHlwZShWTSYgdm0sCiB7CiB9CiAKLXZvaWQgU3RyaW5nUHJvdG90
eXBlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEpTU3RyaW5nKiBuYW1lQW5kTWVzc2FnZSkKK3ZvaWQgU3RyaW5nUHJvdG90eXBlOjpmaW5pc2hD
cmVhdGlvbihWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCiB7Ci0gICAgQmFz
ZTo6ZmluaXNoQ3JlYXRpb24odm0sIG5hbWVBbmRNZXNzYWdlKTsKKyAgICBCYXNlOjpmaW5pc2hD
cmVhdGlvbih2bSwganNFbXB0eVN0cmluZyh2bSkpOwogICAgIEFTU0VSVChpbmhlcml0cyh2bSwg
aW5mbygpKSk7CiAKICAgICBKU0NfTkFUSVZFX0lOVFJJTlNJQ19GVU5DVElPTl9XSVRIT1VUX1RS
QU5TSVRJT04odm0ucHJvcGVydHlOYW1lcy0+dG9TdHJpbmcsIHN0cmluZ1Byb3RvRnVuY1RvU3Ry
aW5nLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSwg
MCwgU3RyaW5nUHJvdG90eXBlVmFsdWVPZkludHJpbnNpYyk7CkBAIC0xNjUsMTQgKzE2NSwxMiBA
QCB2b2lkIFN0cmluZ1Byb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24oVk0mCiAgICAgcHV0RGlyZWN0
V2l0aG91dFRyYW5zaXRpb24odm0sIHZtLnByb3BlcnR5TmFtZXMtPml0ZXJhdG9yU3ltYm9sLCBp
dGVyYXRvckZ1bmN0aW9uLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6
OkRvbnRFbnVtKSk7CiAKICAgICAvLyBUaGUgY29uc3RydWN0b3Igd2lsbCBiZSBhZGRlZCBsYXRl
ciwgYWZ0ZXIgU3RyaW5nQ29uc3RydWN0b3IgaGFzIGJlZW4gYnVpbHQKLSAgICBwdXREaXJlY3RX
aXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBqc051bWJlcigw
KSwgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnREZWxldGUgfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVh
ZE9ubHkgfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOwogfQogCiBTdHJpbmdQcm90b3R5
cGUqIFN0cmluZ1Byb3RvdHlwZTo6Y3JlYXRlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiB7Ci0gICAgSlNTdHJpbmcqIGVtcHR5ID0g
anNFbXB0eVN0cmluZyh2bSk7CiAgICAgU3RyaW5nUHJvdG90eXBlKiBwcm90b3R5cGUgPSBuZXcg
KE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxTdHJpbmdQcm90b3R5cGU+KHZtLmhlYXApKSBTdHJpbmdQ
cm90b3R5cGUodm0sIHN0cnVjdHVyZSk7Ci0gICAgcHJvdG90eXBlLT5maW5pc2hDcmVhdGlvbih2
bSwgZ2xvYmFsT2JqZWN0LCBlbXB0eSk7CisgICAgcHJvdG90eXBlLT5maW5pc2hDcmVhdGlvbih2
bSwgZ2xvYmFsT2JqZWN0KTsKICAgICByZXR1cm4gcHJvdG90eXBlOwogfQogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdQcm90b3R5cGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdQcm90b3R5cGUuaAkocmV2aXNp
b24gMjc2NDk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nUHJvdG90
eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDcgKzQ1LDcgQEAgcHVibGljOgogCiBwcml2YXRl
OgogICAgIFN0cmluZ1Byb3RvdHlwZShWTSYsIFN0cnVjdHVyZSopOwotICAgIHZvaWQgZmluaXNo
Q3JlYXRpb24oVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTU3RyaW5nKik7CisgICAgdm9pZCBmaW5p
c2hDcmVhdGlvbihWTSYsIEpTR2xvYmFsT2JqZWN0Kik7CiB9OwogU1RBVElDX0FTU0VSVF9JU09f
U1VCU1BBQ0VfU0hBUkFCTEUoU3RyaW5nUHJvdG90eXBlLCBTdHJpbmdPYmplY3QpOwogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAJKHJldmlzaW9u
IDI3NjQ5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTE5MCwxMSArMTkwLDYgQEAgdm9pZCBTdHJ1Y3R1cmU6OnZhbGlk
YXRlRmxhZ3MoKQogICAgIGlmIChvdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KQog
ICAgICAgICBSRUxFQVNFX0FTU0VSVCh0eXBlSW5mbygpLmludGVyY2VwdHNHZXRPd25Qcm9wZXJ0
eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8oKSk7CiAKLSAgICBib29sIG92ZXJy
aWRlc1B1dFByb3BlcnR5U2VjdXJpdHlDaGVjayA9Ci0gICAgICAgIG1ldGhvZFRhYmxlLmRvUHV0
UHJvcGVydHlTZWN1cml0eUNoZWNrICE9IEpTT2JqZWN0Ojpkb1B1dFByb3BlcnR5U2VjdXJpdHlD
aGVjawotICAgICAgICAmJiBtZXRob2RUYWJsZS5kb1B1dFByb3BlcnR5U2VjdXJpdHlDaGVjayAh
PSBKU0NlbGw6OmRvUHV0UHJvcGVydHlTZWN1cml0eUNoZWNrOwotICAgIFJFTEVBU0VfQVNTRVJU
KG92ZXJyaWRlc1B1dFByb3BlcnR5U2VjdXJpdHlDaGVjayA9PSB0eXBlSW5mbygpLmhhc1B1dFBy
b3BlcnR5U2VjdXJpdHlDaGVjaygpKTsKLQogICAgIGJvb2wgb3ZlcnJpZGVzR2V0T3duUHJvcGVy
dHlOYW1lcyA9CiAgICAgICAgIG1ldGhvZFRhYmxlLmdldE93blByb3BlcnR5TmFtZXMgIT0gSlNP
YmplY3Q6OmdldE93blByb3BlcnR5TmFtZXMKICAgICAgICAgJiYgbWV0aG9kVGFibGUuZ2V0T3du
UHJvcGVydHlOYW1lcyAhPSBKU0NlbGw6OmdldE93blByb3BlcnR5TmFtZXM7CkBAIC0yMDksNiAr
MjA0LDE4IEBAIHZvaWQgU3RydWN0dXJlOjp2YWxpZGF0ZUZsYWdzKCkKICAgICAgICAgbWV0aG9k
VGFibGUuZ2V0UHJvdG90eXBlICE9IHN0YXRpY19jYXN0PE1ldGhvZFRhYmxlOjpHZXRQcm90b3R5
cGVGdW5jdGlvblB0cj4oSlNPYmplY3Q6OmdldFByb3RvdHlwZSkKICAgICAgICAgJiYgbWV0aG9k
VGFibGUuZ2V0UHJvdG90eXBlICE9IEpTQ2VsbDo6Z2V0UHJvdG90eXBlOwogICAgIFJFTEVBU0Vf
QVNTRVJUKG92ZXJyaWRlc0dldFByb3RvdHlwZSA9PSB0eXBlSW5mbygpLm92ZXJyaWRlc0dldFBy
b3RvdHlwZSgpKTsKKworICAgIGJvb2wgb3ZlcnJpZGVzUHV0ID0KKyAgICAgICAgbWV0aG9kVGFi
bGUucHV0ICE9IEpTT2JqZWN0OjpwdXQKKyAgICAgICAgJiYgbWV0aG9kVGFibGUucHV0ICE9IEpT
Q2VsbDo6cHV0OworICAgIFJFTEVBU0VfQVNTRVJUKG92ZXJyaWRlc1B1dCA9PSB0eXBlSW5mbygp
Lm92ZXJyaWRlc1B1dCgpKTsKKworICAgIGJvb2wgb3ZlcnJpZGVzRGVmaW5lT3duUHJvcGVydHkg
PQorICAgICAgICBtZXRob2RUYWJsZS5kZWZpbmVPd25Qcm9wZXJ0eSAhPSBKU09iamVjdDo6ZGVm
aW5lT3duUHJvcGVydHkKKyAgICAgICAgJiYgbWV0aG9kVGFibGUuZGVmaW5lT3duUHJvcGVydHkg
IT0gSlNDZWxsOjpkZWZpbmVPd25Qcm9wZXJ0eTsKKworICAgIGlmIChvdmVycmlkZXNEZWZpbmVP
d25Qcm9wZXJ0eSkKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQob3ZlcnJpZGVzUHV0KTsKIH0KICNl
bHNlCiBpbmxpbmUgdm9pZCBTdHJ1Y3R1cmU6OnZhbGlkYXRlRmxhZ3MoKSB7IH0KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCShyZXZpc2lvbiAyNzY0OTkp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAkod29ya2luZyBj
b3B5KQpAQCAtMjY3LDYgKzI2NywxMSBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICByZXR1cm4g
dHlwZUluZm8oKS5nZXRPd25Qcm9wZXJ0eVNsb3RJc0ltcHVyZSgpOwogICAgIH0KKworICAgIGJv
b2wgaGFzTm9uUmVpZmllZFN0YXRpY1Byb3BlcnRpZXMoKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuIHR5cGVJbmZvKCkuaGFzU3RhdGljUHJvcGVydHlUYWJsZSgpICYmICFzdGF0aWNQcm9w
ZXJ0aWVzUmVpZmllZCgpOworICAgIH0KICAgICAKICAgICAvLyBUeXBlIGFjY2Vzc29ycy4KICAg
ICBUeXBlSW5mbyB0eXBlSW5mbygpIGNvbnN0IHsgcmV0dXJuIG1fYmxvYi50eXBlSW5mbyhtX291
dE9mTGluZVR5cGVGbGFncyk7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9K
U0RvbGxhclZNLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMv
SlNEb2xsYXJWTS5jcHAJKHJldmlzaW9uIDI3NjQ5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS90b29scy9KU0RvbGxhclZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjg3LDkgKzY4NywxMSBA
QCBKU0NfREVGSU5FX0NVU1RPTV9HRVRURVIocnVudGltZUFycmF5TGVuCiAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc051bWJlcih0aGlzT2JqZWN0LT5nZXRMZW5ndGgoKSkpOwogfQogCi1z
dGF0aWMgY29uc3Qgc3RydWN0IENvbXBhY3RIYXNoSW5kZXggc3RhdGljQ3VzdG9tQWNjZXNzb3JU
YWJsZUluZGV4WzJdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBDb21wYWN0SGFzaEluZGV4IHN0
YXRpY0N1c3RvbUFjY2Vzc29yVGFibGVJbmRleFs0XSA9IHsKICAgICB7IDAsIC0xIH0sCiAgICAg
eyAtMSwgLTEgfSwKKyAgICB7IDEsIC0xIH0sCisgICAgeyAtMSwgLTEgfSwKIH07CiAKIHN0YXRp
YyBKU0NfREVDTEFSRV9DVVNUT01fR0VUVEVSKHRlc3RTdGF0aWNBY2Nlc3NvckdldHRlcik7CkBA
IC03MTIsMTkgKzcxNCwyMyBAQCBKU0NfREVGSU5FX0NVU1RPTV9TRVRURVIodGVzdFN0YXRpY0Fj
Y2VzCiB7CiAgICAgRG9sbGFyVk1Bc3NlcnRTY29wZSBhc3NlcnRTY29wZTsKICAgICBWTSYgdm0g
PSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CiAgICAgCi0gICAgSlNPYmplY3QqIHRoaXNPYmplY3QgPSBqc0R5bmFtaWND
YXN0PEpTT2JqZWN0Kj4odm0sIEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKKyAgICBKU1Zh
bHVlIHJlY2VpdmVyID0gSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSk7CisgICAgSlNPYmplY3Qq
IHRoaXNPYmplY3QgPSByZWNlaXZlci5pc09iamVjdCgpID8gYXNPYmplY3QocmVjZWl2ZXIpIDog
cmVjZWl2ZXIuc3ludGhlc2l6ZVByb3RvdHlwZShnbG9iYWxPYmplY3QpOworICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwogICAgIFJFTEVBU0VfQVNTRVJUKHRoaXNP
YmplY3QpOwogCiAgICAgcmV0dXJuIHRoaXNPYmplY3QtPnB1dERpcmVjdCh2bSwgUHJvcGVydHlO
YW1lKElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJ0ZXN0RmllbGQiKSksIEpTVmFsdWU6OmRl
Y29kZSh2YWx1ZSkpOwogfQogCi1zdGF0aWMgY29uc3Qgc3RydWN0IEhhc2hUYWJsZVZhbHVlIHN0
YXRpY0N1c3RvbUFjY2Vzc29yVGFibGVWYWx1ZXNbMV0gPSB7Ci0gICAgeyAidGVzdFN0YXRpY0Fj
Y2Vzc29yIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpDdXN0b21B
Y2Nlc3NvciksIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNs
b3Q6OkdldFZhbHVlRnVuYz4odGVzdFN0YXRpY0FjY2Vzc29yR2V0dGVyKSwgKGludHB0cl90KXN0
YXRpY19jYXN0PFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jPih0ZXN0U3RhdGljQWNjZXNz
b3JQdXR0ZXIpIH0gfSwKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgSGFzaFRhYmxlVmFsdWUgc3RhdGlj
Q3VzdG9tQWNjZXNzb3JUYWJsZVZhbHVlc1syXSA9IHsKKyAgICB7ICJ0ZXN0U3RhdGljQWNjZXNz
b3IiLCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0gfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6Q3Vz
dG9tQWNjZXNzb3IsIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0
eVNsb3Q6OkdldFZhbHVlRnVuYz4odGVzdFN0YXRpY0FjY2Vzc29yR2V0dGVyKSwgKGludHB0cl90
KXN0YXRpY19jYXN0PFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jPih0ZXN0U3RhdGljQWNj
ZXNzb3JQdXR0ZXIpIH0gfSwKKyAgICB7ICJ0ZXN0U3RhdGljQWNjZXNzb3JSZWFkT25seSIsIFBy
b3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSB8
IFByb3BlcnR5QXR0cmlidXRlOjpDdXN0b21BY2Nlc3NvciwgTm9JbnRyaW5zaWMsIHsgKGludHB0
cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPih0ZXN0U3RhdGljQWNj
ZXNzb3JHZXR0ZXIpLCAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHV0UHJvcGVydHlTbG90OjpQdXRW
YWx1ZUZ1bmM+KDApIH0gfSwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgSGFzaFRhYmxlIHN0
YXRpY0N1c3RvbUFjY2Vzc29yVGFibGUgPQotICAgIHsgMSwgMSwgdHJ1ZSwgbnVsbHB0ciwgc3Rh
dGljQ3VzdG9tQWNjZXNzb3JUYWJsZVZhbHVlcywgc3RhdGljQ3VzdG9tQWNjZXNzb3JUYWJsZUlu
ZGV4IH07CisgICAgeyAyLCAzLCB0cnVlLCBudWxscHRyLCBzdGF0aWNDdXN0b21BY2Nlc3NvclRh
YmxlVmFsdWVzLCBzdGF0aWNDdXN0b21BY2Nlc3NvclRhYmxlSW5kZXggfTsKIAogY2xhc3MgU3Rh
dGljQ3VzdG9tQWNjZXNzb3IgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7CiAgICAgdXNpbmcg
QmFzZSA9IEpTTm9uRmluYWxPYmplY3Q7CkBAIC03ODksMTcgKzc5NSwyNSBAQCBKU0NfREVGSU5F
X0NVU1RPTV9TRVRURVIodGVzdFN0YXRpY1ZhbHVlCiAgICAgcmV0dXJuIHRoaXNPYmplY3QtPnB1
dERpcmVjdCh2bSwgUHJvcGVydHlOYW1lKElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJ0ZXN0
U3RhdGljVmFsdWUiKSksIEpTVmFsdWU6OmRlY29kZSh2YWx1ZSkpOwogfQogCi1zdGF0aWMgY29u
c3Qgc3RydWN0IENvbXBhY3RIYXNoSW5kZXggc3RhdGljQ3VzdG9tVmFsdWVUYWJsZUluZGV4WzJd
ID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBDb21wYWN0SGFzaEluZGV4IHN0YXRpY0N1c3RvbVZh
bHVlVGFibGVJbmRleFs4XSA9IHsKKyAgICB7IDEsIC0xIH0sCisgICAgeyAtMSwgLTEgfSwKKyAg
ICB7IC0xLCAtMSB9LAorICAgIHsgLTEsIC0xIH0sCisgICAgeyAtMSwgLTEgfSwKKyAgICB7IDIs
IC0xIH0sCiAgICAgeyAwLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiB9OwogCi1zdGF0aWMgY29u
c3Qgc3RydWN0IEhhc2hUYWJsZVZhbHVlIHN0YXRpY0N1c3RvbVZhbHVlVGFibGVWYWx1ZXNbMV0g
PSB7Ci0gICAgeyAidGVzdFN0YXRpY1ZhbHVlIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3Bl
cnR5QXR0cmlidXRlOjpDdXN0b21BY2Nlc3NvciksIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClz
dGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4odGVzdFN0YXRpY1ZhbHVlR2V0
dGVyKSwgKGludHB0cl90KXN0YXRpY19jYXN0PFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5j
Pih0ZXN0U3RhdGljVmFsdWVQdXR0ZXIpIH0gfSwKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgSGFzaFRh
YmxlVmFsdWUgc3RhdGljQ3VzdG9tVmFsdWVUYWJsZVZhbHVlc1szXSA9IHsKKyAgICB7ICJ0ZXN0
U3RhdGljVmFsdWUiLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRv
bnRFbnVtKSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xv
dDo6R2V0VmFsdWVGdW5jPih0ZXN0U3RhdGljVmFsdWVHZXR0ZXIpLCAoaW50cHRyX3Qpc3RhdGlj
X2Nhc3Q8UHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmM+KHRlc3RTdGF0aWNWYWx1ZVB1dHRl
cikgfSB9LAorICAgIHsgInRlc3RTdGF0aWNWYWx1ZU5vU2V0dGVyIiwgc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSksIE5vSW50cmluc2ljLCB7IChpbnRw
dHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4odGVzdFN0YXRpY1Zh
bHVlR2V0dGVyKSwgKGludHB0cl90KXN0YXRpY19jYXN0PFB1dFByb3BlcnR5U2xvdDo6UHV0VmFs
dWVGdW5jPigwKSB9IH0sCisgICAgeyAidGVzdFN0YXRpY1ZhbHVlUmVhZE9ubHkiLCBQcm9wZXJ0
eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0sIE5vSW50
cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVu
Yz4odGVzdFN0YXRpY1ZhbHVlR2V0dGVyKSwgKGludHB0cl90KXN0YXRpY19jYXN0PFB1dFByb3Bl
cnR5U2xvdDo6UHV0VmFsdWVGdW5jPigwKSB9IH0sCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0
IEhhc2hUYWJsZSBzdGF0aWNDdXN0b21WYWx1ZVRhYmxlID0KLSAgICB7IDEsIDEsIHRydWUsIG51
bGxwdHIsIHN0YXRpY0N1c3RvbVZhbHVlVGFibGVWYWx1ZXMsIHN0YXRpY0N1c3RvbVZhbHVlVGFi
bGVJbmRleCB9OworICAgIHsgMywgNywgdHJ1ZSwgbnVsbHB0ciwgc3RhdGljQ3VzdG9tVmFsdWVU
YWJsZVZhbHVlcywgc3RhdGljQ3VzdG9tVmFsdWVUYWJsZUluZGV4IH07CiAKIGNsYXNzIFN0YXRp
Y0N1c3RvbVZhbHVlIDogcHVibGljIEpTTm9uRmluYWxPYmplY3QgewogICAgIHVzaW5nIEJhc2Ug
PSBKU05vbkZpbmFsT2JqZWN0OwpAQCAtODM3LDYgKzg1MSw3IEBAIHB1YmxpYzoKIAogY2xhc3Mg
T2JqZWN0RG9pbmdTaWRlRWZmZWN0UHV0V2l0aG91dENvcnJlY3RTbG90U3RhdHVzIDogcHVibGlj
IEpTTm9uRmluYWxPYmplY3QgewogICAgIHVzaW5nIEJhc2UgPSBKU05vbkZpbmFsT2JqZWN0Owor
ICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1
Y3R1cmVGbGFncyB8IE92ZXJyaWRlc1B1dDsKIHB1YmxpYzoKICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+CiAgICAgc3RhdGljIENvbXBsZXRlU3Vic3BhY2Uq
IHN1YnNwYWNlRm9yKFZNJiB2bSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI3NjQ5OSkKKysr
IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyMiBA
QAorMjAyMS0wNC0yMyAgQWxleGV5IFNodmF5a2EgIDxzaHZhaWthbGVzaEBnbWFpbC5jb20+CisK
KyAgICAgICAgW0pTQ10gT3JkaW5hcnlTZXQgc2hvdWxkIGludm9rZSBjdXN0b20gW1tTZXRdXSBt
ZXRob2RzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
MTc5MTYKKworICAgICAgICBSZXZpZXdlZCBieSBZdXN1a2UgU3V6dWtpLgorCisgICAgICAgIEZp
eGVzOgorICAgICAgICAgIDEuIExlZ2FjeSBwbGF0Zm9ybSBvYmplY3QncyBbW1NldF1dIG5vdyBn
dWFyZHMgYWdhaW5zdCBhbHRlcmVkIHJlY2VpdmVyIFsxXS4KKyAgICAgICAgICAgICAoYWxpZ25z
IHdpdGggQmxpbmspLgorICAgICAgICAgIDIuIERpcmVjdCBbW1NldF1dIHRvIHdpbmRvdy4lSW50
ZXJmYWNlJSBjb25zdHJ1Y3RvciBub3cgcHJlc2VydmVzIERvbnRFbnVtIGF0dHJpYnV0ZSBbMl0u
CisgICAgICAgICAgICAgKGFsaWducyB3aXRoIEJsaW5rIGFuZCBHZWNrbykuCisgICAgICAgICAg
My4gQ3Jvc3Mtb3JpZ2luIG5vbi1pbmRleCBwdXQoKSBub3cgdGhyb3dzIFNlY3VyaXR5RXJyb3Ig
aW5zdGVhZCBvZiBzaWxlbnRseSBmYWlsaW5nIFszXS4KKyAgICAgICAgICAgICAoYWxpZ25zIHdp
dGggQmxpbmsgYW5kIEdlY2tvKS4KKworICAgICAgICBSZWZhY3RvcnM6CisgICAgICAgICAgMS4g
U2ltcGxpZmllcyBjcm9zcy1vcmlnaW4gSlNET01XaW5kb3c6OnB1dCgpLCBhbGlnbmluZyBpdCB3
aXRoIEpTTG9jYXRpb246OnB1dCgpLgorICAgICAgICAgIDIuIFJlcGxhY2VzIGxvb2t1cFB1dCgp
IHdpdGggZGlyZWN0IHNldHRlciBjYWxsIGluIEpTUmVtb3RlRE9NV2luZG93OjpwdXQoKS4KKyAg
ICAgICAgICAzLiBSZW1vdmVzIG5vdyB1bnVzZWQgZG9QdXRQcm9wZXJ0eVNlY3VyaXR5Q2hlY2so
KSBtZXRob2RzLgorCisgICAgICAgIFRlc3RzOiBqcy9kb20vc2NyaXB0LXRlc3RzL3JlZmxlY3Qt
c2V0LW9udG8tZG9tLmpzCisgICAgICAgICAgICAgICBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3Jt
LXRlc3RzL1dlYklETC9lY21hc2NyaXB0LWJpbmRpbmcvaW50ZXJmYWNlLW9iamVjdC1zZXQtcmVj
ZWl2ZXIuaHRtbAorICAgICAgICAgICAgICAgaHR0cC90ZXN0cy9zZWN1cml0eS9jcm9zcy1mcmFt
ZS1hY2Nlc3Mtb2JqZWN0LWdldFByb3RvdHlwZU9mLWluLXB1dC5odG1sCisKKyAgICAgICAgWzFd
IGh0dHBzOi8vaGV5Y2FtLmdpdGh1Yi5pby93ZWJpZGwvI2xlZ2FjeS1wbGF0Zm9ybS1vYmplY3Qt
c2V0IChzdGVwIDEpCisgICAgICAgIFsyXSBodHRwczovL2hleWNhbS5naXRodWIuaW8vd2ViaWRs
LyNkZWZpbmUtdGhlLWdsb2JhbC1wcm9wZXJ0eS1yZWZlcmVuY2VzIChzdGVwIDMuMS4zKQorICAg
ICAgICBbM10gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvYnJvd3NlcnMu
aHRtbCNjcm9zc29yaWdpbnNldC0oLW8sLXAsLXYsLXJlY2VpdmVyLSkgKHN0ZXAgNCkKKworICAg
ICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkpTRE9NV2luZG93OjpwdXQpOgorICAgICAgICAoV2ViQ29yZTo6SlNET01XaW5kb3c6OmRv
UHV0UHJvcGVydHlTZWN1cml0eUNoZWNrKTogRGVsZXRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9q
cy9KU0xvY2F0aW9uQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTTG9jYXRpb246OmRv
UHV0UHJvcGVydHlTZWN1cml0eUNoZWNrKTogRGVsZXRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9q
cy9KU1JlbW90ZURPTVdpbmRvd0N1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1JlbW90
ZURPTVdpbmRvdzo6cHV0KToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0
b3JKUy5wbToKKyAgICAgICAgKEdlbmVyYXRlUHV0KToKKyAgICAgICAgKEdlbmVyYXRlSGVhZGVy
KToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvKjogVXBkYXRlZC4KKyAgICAg
ICAgKiBicmlkZ2Uvb2JqYy9vYmpjX3J1bnRpbWUuaDoKKyAgICAgICAgKiBicmlkZ2UvcnVudGlt
ZV9hcnJheS5oOgorICAgICAgICAqIGJyaWRnZS9ydW50aW1lX29iamVjdC5oOgorCisgICAgICAg
ICogYmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SlNET01XaW5kb3c6OnB1dCk6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTVdpbmRvdzo6ZG9QdXRQ
cm9wZXJ0eVNlY3VyaXR5Q2hlY2spOiBEZWxldGVkLgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pT
TG9jYXRpb25DdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNMb2NhdGlvbjo6ZG9QdXRQ
cm9wZXJ0eVNlY3VyaXR5Q2hlY2spOiBEZWxldGVkLgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pT
UmVtb3RlRE9NV2luZG93Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTUmVtb3RlRE9N
V2luZG93OjpwdXQpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpT
LnBtOgorICAgICAgICAoR2VuZXJhdGVQdXQpOgorICAgICAgICAoR2VuZXJhdGVIZWFkZXIpOgor
ICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy8qOiBVcGRhdGVkLgorICAgICAgICAq
IGJyaWRnZS9vYmpjL29iamNfcnVudGltZS5oOgorICAgICAgICAqIGJyaWRnZS9ydW50aW1lX2Fy
cmF5Lmg6CisgICAgICAgICogYnJpZGdlL3J1bnRpbWVfb2JqZWN0Lmg6CisKKyAgICAgICAgKiBi
aW5kaW5ncy9qcy9KU0RPTVdpbmRvd0N1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0RP
TVdpbmRvdzo6cHV0KToKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NV2luZG93Ojpkb1B1dFByb3Bl
cnR5U2VjdXJpdHlDaGVjayk6IERlbGV0ZWQuCisgICAgICAgICogYmluZGluZ3MvanMvSlNMb2Nh
dGlvbkN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0xvY2F0aW9uOjpkb1B1dFByb3Bl
cnR5U2VjdXJpdHlDaGVjayk6IERlbGV0ZWQuCisgICAgICAgICogYmluZGluZ3MvanMvSlNSZW1v
dGVET01XaW5kb3dDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNSZW1vdGVET01XaW5k
b3c6OnB1dCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG06
CisgICAgICAgIChHZW5lcmF0ZVB1dCk6CisgICAgICAgIChHZW5lcmF0ZUhlYWRlcik6CisgICAg
ICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdERvbWFpblNlY3VyaXR5Lmg6Cisg
ICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEluZGV4ZWRTZXR0ZXJOb0lk
ZW50aWZpZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0SW5kZXhlZFNldHRlck5vSWRl
bnRpZmllcjo6cHV0KToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
SW5kZXhlZFNldHRlck5vSWRlbnRpZmllci5oOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SlNUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uOjpwdXQpOgor
ICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbmRleGVkU2V0dGVyVGhy
b3dpbmdFeGNlcHRpb24uaDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpT
VGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcjo6cHV0KToKKyAgICAgICAgKiBiaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyLmg6Cisg
ICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEludGVyZmFjZS5oOgorICAg
ICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0
ZXJOb0lkZW50aWZpZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRBbmRJbmRl
eGVkU2V0dGVyTm9JZGVudGlmaWVyOjpwdXQpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIuaDoKKyAgICAg
ICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVy
VGhyb3dpbmdFeGNlcHRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRBbmRJ
bmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb246OnB1dCk6CisgICAgICAgICogYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0
aW9uLmg6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkQW5k
SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVz
dE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyOjpwdXQpOgorICAgICAgICAqIGJp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRl
bnRpZmllci5oOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1l
ZFNldHRlck5vSWRlbnRpZmllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZFNl
dHRlck5vSWRlbnRpZmllcjo6cHV0KToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXIuaDoKKyAgICAgICAgKiBiaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9uOjpwdXQp
OgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlclRo
cm93aW5nRXhjZXB0aW9uLmg6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNU
ZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllcjo6cHV0KToKKyAgICAgICAgKiBiaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5oOgorICAgICAg
ICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVk
R2V0dGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4
ZWRHZXR0ZXI6OnB1dCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXIuaDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRlci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVy
QW5kU2V0dGVyOjpwdXQpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5kU2V0dGVyLmg6CisgICAgICAgICogYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeU92ZXJyaWRl
QnVpbHRJbnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVn
YWN5T3ZlcnJpZGVCdWlsdEluczo6cHV0KToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5T3ZlcnJpZGVCdWlsdElucy5oOgorICAg
ICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdh
Y3lVbmZvcmdlYWJsZVByb3BlcnRpZXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFt
ZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVzOjpwdXQpOgorICAgICAgICAq
IGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lVbmZv
cmdlYWJsZVByb3BlcnRpZXMuaDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVzQW5kTGVnYWN5
T3ZlcnJpZGVCdWlsdElucy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZFNldHRl
cldpdGhMZWdhY3lVbmZvcmdlYWJsZVByb3BlcnRpZXNBbmRMZWdhY3lPdmVycmlkZUJ1aWx0SW5z
OjpwdXQpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNl
dHRlcldpdGhMZWdhY3lVbmZvcmdlYWJsZVByb3BlcnRpZXNBbmRMZWdhY3lPdmVycmlkZUJ1aWx0
SW5zLmg6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFBsdWdpbklu
dGVyZmFjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RQbHVnaW5JbnRlcmZhY2U6OnB1
dCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFBsdWdpbkludGVy
ZmFjZS5oOgorICAgICAgICAqIGJyaWRnZS9vYmpjL29iamNfcnVudGltZS5oOgorICAgICAgICAq
IGJyaWRnZS9ydW50aW1lX2FycmF5Lmg6CisgICAgICAgICogYnJpZGdlL3J1bnRpbWVfb2JqZWN0
Lmg6CisKIDIwMjEtMDQtMjMgIE1pY2hhZWwgQ2F0YW56YXJvICA8bWNhdGFuemFyb0Bnbm9tZS5v
cmc+CiAKICAgICAgICAgSW1wcm92ZSBIYXNoVGFibGVEZWxldGVkVmFsdWUgb2YgU2VydmljZVdv
cmtlclJlZ2lzdHJhdGlvbktleQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNE
T01XaW5kb3dDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTRE9NV2luZG93Q3VzdG9tLmNwcAkocmV2aXNpb24gMjc2NDk5KQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yNDgsMjMgKzI0OCw2IEBAIGJvb2wgSlNET01XaW5kb3c6OmdldE93blByb3BlcnR5U2xvdEJ5
SW4KICAgICByZXR1cm4gQmFzZTo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleCh0aGlzT2JqZWN0
LCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBpbmRleCwgc2xvdCk7CiB9CiAKLXZvaWQgSlNET01XaW5k
b3c6OmRvUHV0UHJvcGVydHlTZWN1cml0eUNoZWNrKEpTT2JqZWN0KiBjZWxsLCBKU0dsb2JhbE9i
amVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHV0
UHJvcGVydHlTbG90JikKLXsKLSAgICBWTSYgdm0gPSBsZXhpY2FsR2xvYmFsT2JqZWN0LT52bSgp
OwotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAgIGF1dG8q
IHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNET01XaW5kb3cqPihjZWxsKTsKLQotICAgIFN0cmluZyBl
cnJvck1lc3NhZ2U7Ci0gICAgaWYgKCFCaW5kaW5nU2VjdXJpdHk6OnNob3VsZEFsbG93QWNjZXNz
VG9ET01XaW5kb3coKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNPYmplY3QtPndyYXBwZWQoKSwg
ZXJyb3JNZXNzYWdlKSkgewotICAgICAgICAvLyBXZSBvbmx5IGFsbG93IHNldHRpbmcgImxvY2F0
aW9uIiBhdHRyaWJ1dGUgY3Jvc3Mtb3JpZ2luLgotICAgICAgICBpZiAocHJvcGVydHlOYW1lID09
IHN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSktPmJ1aWx0aW5OYW1l
cygpLmxvY2F0aW9uUHVibGljTmFtZSgpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB0
aHJvd1NlY3VyaXR5RXJyb3IoKmxleGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLCBlcnJvck1lc3Nh
Z2UpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotfQotCiBib29sIEpTRE9NV2luZG93OjpwdXQo
SlNDZWxsKiBjZWxsLCBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgUHJvcGVy
dHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBzbG90
KQogewogICAgIFZNJiB2bSA9IGxleGljYWxHbG9iYWxPYmplY3QtPnZtKCk7CkBAIC0yNzIsMTcg
KzI1NSwxMCBAQCBib29sIEpTRE9NV2luZG93OjpwdXQoSlNDZWxsKiBjZWxsLCBKU0dsCiAKICAg
ICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTRE9NV2luZG93Kj4oY2VsbCk7CiAKLSAgICBT
dHJpbmcgZXJyb3JNZXNzYWdlOwotICAgIGlmICghQmluZGluZ1NlY3VyaXR5OjpzaG91bGRBbGxv
d0FjY2Vzc1RvRE9NV2luZG93KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzT2JqZWN0LT53cmFw
cGVkKCksIGVycm9yTWVzc2FnZSkpIHsKKyAgICBpZiAocHJvcGVydHlOYW1lICE9IHN0YXRpY19j
YXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSktPmJ1aWx0aW5OYW1lcygpLmxvY2F0
aW9uUHVibGljTmFtZSgpKSB7CiAgICAgICAgIC8vIFdlIG9ubHkgYWxsb3cgc2V0dGluZyAibG9j
YXRpb24iIGF0dHJpYnV0ZSBjcm9zcy1vcmlnaW4uCi0gICAgICAgIGlmIChwcm9wZXJ0eU5hbWUg
PT0gc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKS0+YnVpbHRpbk5h
bWVzKCkubG9jYXRpb25QdWJsaWNOYW1lKCkpIHsKLSAgICAgICAgICAgIGJvb2wgcHV0UmVzdWx0
ID0gZmFsc2U7Ci0gICAgICAgICAgICBpZiAobG9va3VwUHV0KGxleGljYWxHbG9iYWxPYmplY3Qs
IHByb3BlcnR5TmFtZSwgdGhpc09iamVjdCwgdmFsdWUsICpzX2luZm8uc3RhdGljUHJvcEhhc2hU
YWJsZSwgc2xvdCwgcHV0UmVzdWx0KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gcHV0UmVzdWx0
OworICAgICAgICBpZiAoIUJpbmRpbmdTZWN1cml0eTo6c2hvdWxkQWxsb3dBY2Nlc3NUb0RPTVdp
bmRvdyhsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzT2JqZWN0LT53cmFwcGVkKCksIFRocm93U2Vj
dXJpdHlFcnJvcikpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAg
ICAgdGhyb3dTZWN1cml0eUVycm9yKCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSwgZXJyb3JN
ZXNzYWdlKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAogICAgIFJFTEVBU0VfQU5E
X1JFVFVSTihzY29wZSwgQmFzZTo6cHV0KHRoaXNPYmplY3QsIGxleGljYWxHbG9iYWxPYmplY3Qs
IHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTTG9jYXRpb25DdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTTG9jYXRpb25DdXN0b20uY3BwCShyZXZpc2lvbiAyNzY0OTkpCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0xvY2F0aW9uQ3VzdG9tLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTA4LDIzICsxMDgsNiBAQCBib29sIEpTTG9jYXRpb246OmdldE93blByb3BlcnR5
U2xvdEJ5SW5kCiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU09iamVjdDo6Z2V0T3du
UHJvcGVydHlTbG90QnlJbmRleChvYmplY3QsIGxleGljYWxHbG9iYWxPYmplY3QsIGluZGV4LCBz
bG90KSk7CiB9CiAKLXZvaWQgSlNMb2NhdGlvbjo6ZG9QdXRQcm9wZXJ0eVNlY3VyaXR5Q2hlY2so
SlNPYmplY3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIFBy
b3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFB1dFByb3BlcnR5U2xvdCYpCi17Ci0gICAgYXV0byog
dGhpc09iamVjdCA9IGpzQ2FzdDxKU0xvY2F0aW9uKj4ob2JqZWN0KTsKLSAgICBBU1NFUlRfR0Nf
T0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7Ci0KLSAgICBWTSYgdm0gPSBsZXhp
Y2FsR2xvYmFsT2JqZWN0LT52bSgpOwotCi0gICAgLy8gQWx3YXlzIGFsbG93IGFzc2lnbmluZyB0
byB0aGUgd2hvbGUgbG9jYXRpb24uCi0gICAgLy8gSG93ZXZlciwgYWxsbG93aW5nIGFzc2lnbmlu
ZyBvZiBwaWVjZXMgbWlnaHQgaW5hZHZlcnRlbnRseSBkaXNjbG9zZSBwYXJ0cyBvZiB0aGUgb3Jp
Z2luYWwgbG9jYXRpb24uCi0gICAgLy8gU28gZmFsbCB0aHJvdWdoIHRvIHRoZSBhY2Nlc3MgY2hl
Y2sgZm9yIHRob3NlLgotICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gc3RhdGljX2Nhc3Q8SlNWTUNs
aWVudERhdGEqPih2bS5jbGllbnREYXRhKS0+YnVpbHRpbk5hbWVzKCkuaHJlZlB1YmxpY05hbWUo
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gQmxvY2sgYWNjZXNzIGFuZCB0aHJvdyBpZiB0
aGVyZSBpcyBhIHNlY3VyaXR5IGVycm9yLgotICAgIEJpbmRpbmdTZWN1cml0eTo6c2hvdWxkQWxs
b3dBY2Nlc3NUb0RPTVdpbmRvdyhsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzT2JqZWN0LT53cmFw
cGVkKCkud2luZG93KCksIFRocm93U2VjdXJpdHlFcnJvcik7Ci19Ci0KIGJvb2wgSlNMb2NhdGlv
bjo6cHV0KEpTQ2VsbCogY2VsbCwgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3Qs
IFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFB1dFByb3BlcnR5U2xv
dCYgcHV0UHJvcGVydHlTbG90KQogewogICAgIFZNJiB2bSA9IGxleGljYWxHbG9iYWxPYmplY3Qt
PnZtKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1JlbW90ZURPTVdpbmRv
d0N1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNS
ZW1vdGVET01XaW5kb3dDdXN0b20uY3BwCShyZXZpc2lvbiAyNzY0OTkpCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU1JlbW90ZURPTVdpbmRvd0N1c3RvbS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTY4LDExICs2OCwxMiBAQCBib29sIEpTUmVtb3RlRE9NV2luZG93OjpwdXQoSlNDZWxs
KiBjZWxsCiAKICAgICAvLyBXZSBvbmx5IGFsbG93IHNldHRpbmcgImxvY2F0aW9uIiBhdHRyaWJ1
dGUgY3Jvc3Mtb3JpZ2luLgogICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gc3RhdGljX2Nhc3Q8SlNW
TUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKS0+YnVpbHRpbk5hbWVzKCkubG9jYXRpb25QdWJs
aWNOYW1lKCkpIHsKLSAgICAgICAgYm9vbCBwdXRSZXN1bHQgPSBmYWxzZTsKLSAgICAgICAgaWYg
KGxvb2t1cFB1dChsZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHRoaXNPYmplY3Qs
IHZhbHVlLCAqc19pbmZvLnN0YXRpY1Byb3BIYXNoVGFibGUsIHNsb3QsIHB1dFJlc3VsdCkpCi0g
ICAgICAgICAgICByZXR1cm4gcHV0UmVzdWx0OwotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIGF1dG8qIHNldHRlciA9IHNfaW5mby5zdGF0aWNQcm9wSGFzaFRhYmxlLT5lbnRyeShwcm9w
ZXJ0eU5hbWUpLT5wcm9wZXJ0eVB1dHRlcigpOworICAgICAgICBzY29wZS5yZWxlYXNlKCk7Cisg
ICAgICAgIHNldHRlcihsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1ZhbHVlOjplbmNvZGUoc2xvdC50
aGlzVmFsdWUoKSksIEpTVmFsdWU6OmVuY29kZSh2YWx1ZSksIHByb3BlcnR5TmFtZSk7CisgICAg
ICAgIHJldHVybiB0cnVlOwogICAgIH0KKwogICAgIHRocm93U2VjdXJpdHlFcnJvcigqbGV4aWNh
bEdsb2JhbE9iamVjdCwgc2NvcGUsIGVycm9yTWVzc2FnZSk7CiAgICAgcmV0dXJuIGZhbHNlOwog
fQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMu
cG0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2Vu
ZXJhdG9ySlMucG0JKHJldmlzaW9uIDI3NjQ5OSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCSh3b3JraW5nIGNvcHkpCkBAIC0xMTgxLDYgKzEx
ODEsOCBAQCBzdWIgR2VuZXJhdGVQdXQKICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICJ7XG4iKTsK
ICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDwk
e2NsYXNzTmFtZX0qPihjZWxsKTtcbiIpOwogICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBB
U1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7XG5cbiIpOworICAg
IHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBpZiAoVU5MSUtFTFkodGhpc09iamVjdCAhPSBwdXRQ
cm9wZXJ0eVNsb3QudGhpc1ZhbHVlKCkpKVxuIik7CisgICAgcHVzaChAJG91dHB1dEFycmF5LCAi
ICAgICAgICByZXR1cm4gSlNPYmplY3Q6OnB1dCh0aGlzT2JqZWN0LCBsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBwdXRQcm9wZXJ0eVNsb3QpO1xuIik7CiAKICAgICBw
dXNoKEAkb3V0cHV0QXJyYXksICIgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRShsZXhpY2FsR2xvYmFsT2JqZWN0LT52bSgpKTtcblxuIik7CiAKQEAgLTI5NTQsMTEgKzI5
NTYsNiBAQCBzdWIgR2VuZXJhdGVIZWFkZXIKICAgICAgICAgJHN0cnVjdHVyZUZsYWdzeyJKU0M6
OkludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFpl
cm8ifSA9IDE7CiAgICAgfQogCi0gICAgaWYgKCRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRl
cy0+e0NoZWNrU2VjdXJpdHl9KSB7Ci0gICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAg
c3RhdGljIHZvaWQgZG9QdXRQcm9wZXJ0eVNlY3VyaXR5Q2hlY2soSlNDOjpKU09iamVjdCosIEpT
Qzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpQdXRQcm9wZXJ0eVNs
b3QmKTtcbiIpOwotICAgICAgICAkc3RydWN0dXJlRmxhZ3N7IkpTQzo6SGFzUHV0UHJvcGVydHlT
ZWN1cml0eUNoZWNrIn0gPSAxOwotICAgIH0KLQogICAgIGlmICgkaW50ZXJmYWNlLT5leHRlbmRl
ZEF0dHJpYnV0ZXMtPntQbHVnaW59IHx8IEdldE5hbWVkU2V0dGVyT3BlcmF0aW9uKCRpbnRlcmZh
Y2UpKSB7CiAgICAgICAgICRzdHJ1Y3R1cmVGbGFnc3siSlNDOjpQcm9oaWJpdHNQcm9wZXJ0eUNh
Y2hpbmcifSA9IDE7CiAgICAgfQpAQCAtMjk3MSw2ICsyOTY4LDcgQEAgc3ViIEdlbmVyYXRlSGVh
ZGVyCiAgICAgaWYgKEluc3RhbmNlT3ZlcnJpZGVzUHV0KCRpbnRlcmZhY2UpKSB7CiAgICAgICAg
IHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgc3RhdGljIGJvb2wgcHV0KEpTQzo6SlNDZWxsKiwg
SlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OkpTVmFsdWUsIEpT
Qzo6UHV0UHJvcGVydHlTbG90Jik7XG4iKTsKICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwg
IiAgICBzdGF0aWMgYm9vbCBwdXRCeUluZGV4KEpTQzo6SlNDZWxsKiwgSlNDOjpKU0dsb2JhbE9i
amVjdCosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNDOjpKU1ZhbHVlLCBib29sIHNob3VsZFRo
cm93KTtcbiIpOworICAgICAgICAkc3RydWN0dXJlRmxhZ3N7IkpTQzo6T3ZlcnJpZGVzUHV0In0g
PSAxOwogICAgIH0KICAgICAKICAgICBpZiAoSW5zdGFuY2VPdmVycmlkZXNEZWZpbmVPd25Qcm9w
ZXJ0eSgkaW50ZXJmYWNlKSkgewpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdERvbWFpblNlY3VyaXR5LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdERvbWFpblNlY3VyaXR5LmgJKHJl
dmlzaW9uIDI3NjQ5OSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3REb21haW5TZWN1cml0eS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw3ICszOSw2IEBA
IHB1YmxpYzoKICAgICBzdGF0aWMgSlNDOjpKU09iamVjdCogY3JlYXRlUHJvdG90eXBlKEpTQzo6
Vk0mLCBKU0RPTUdsb2JhbE9iamVjdCYpOwogICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBwcm90
b3R5cGUoSlNDOjpWTSYsIEpTRE9NR2xvYmFsT2JqZWN0Jik7CiAgICAgc3RhdGljIFRlc3REb21h
aW5TZWN1cml0eSogdG9XcmFwcGVkKEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOwotICAgIHN0YXRp
YyB2b2lkIGRvUHV0UHJvcGVydHlTZWN1cml0eUNoZWNrKEpTQzo6SlNPYmplY3QqLCBKU0M6OkpT
R2xvYmFsT2JqZWN0KiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6UHV0UHJvcGVydHlTbG90Jik7
CiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0M6OkpTQ2VsbCopOwogCiAgICAgREVDTEFSRV9J
TkZPOwpAQCAtNTksNyArNTgsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIEpTQzo6SXNvU3Vic3Bh
Y2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSk7CiAgICAgc3RhdGljIHZvaWQgYW5hbHl6
ZUhlYXAoSlNDZWxsKiwgSlNDOjpIZWFwQW5hbHl6ZXImKTsKIHB1YmxpYzoKLSAgICBzdGF0aWMg
Y29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3Mg
fCBKU0M6Okhhc1B1dFByb3BlcnR5U2VjdXJpdHlDaGVjayB8IEpTQzo6SGFzU3RhdGljUHJvcGVy
dHlUYWJsZTsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0g
QmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBKU0M6Okhhc1N0YXRpY1Byb3BlcnR5VGFibGU7CiBwcm90
ZWN0ZWQ6CiAgICAgSlNUZXN0RG9tYWluU2VjdXJpdHkoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUds
b2JhbE9iamVjdCYsIFJlZjxUZXN0RG9tYWluU2VjdXJpdHk+JiYpOwogCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW5kZXhlZFNldHRlck5vSWRl
bnRpZmllci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIuY3BwCShyZXZpc2lvbiAy
NzY0OTkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
SW5kZXhlZFNldHRlck5vSWRlbnRpZmllci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5OSw2ICsx
OTksOCBAQCBib29sIEpTVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXI6OnB1CiAgICAgYXV0
byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyKj4o
Y2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkp
OwogCisgICAgaWYgKFVOTElLRUxZKHRoaXNPYmplY3QgIT0gcHV0UHJvcGVydHlTbG90LnRoaXNW
YWx1ZSgpKSkKKyAgICAgICAgcmV0dXJuIEpTT2JqZWN0OjpwdXQodGhpc09iamVjdCwgbGV4aWNh
bEdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgcHV0UHJvcGVydHlTbG90KTsKICAg
ICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKGxleGljYWxHbG9iYWxPYmpl
Y3QtPnZtKCkpOwogCiAgICAgaWYgKGF1dG8gaW5kZXggPSBwYXJzZUluZGV4KHByb3BlcnR5TmFt
ZSkpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZp
ZXIuaAkocmV2aXNpb24gMjc2NDk5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtNjQsNyArNjQsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIEpTQzo6SXNvU3Vic3BhY2Uq
IHN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSk7CiAgICAgc3RhdGljIHZvaWQgYW5hbHl6ZUhl
YXAoSlNDZWxsKiwgSlNDOjpIZWFwQW5hbHl6ZXImKTsKIHB1YmxpYzoKLSAgICBzdGF0aWMgY29u
c3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBK
U0M6OkludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05v
dFplcm8gfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5TmFtZXMgfCBKU0M6Ok92ZXJyaWRl
c0dldE93blByb3BlcnR5U2xvdDsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVj
dHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBKU0M6OkludGVyY2VwdHNHZXRPd25Q
cm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8gfCBKU0M6Ok92ZXJyaWRl
c0dldE93blByb3BlcnR5TmFtZXMgfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8
IEpTQzo6T3ZlcnJpZGVzUHV0OwogcHJvdGVjdGVkOgogICAgIEpTVGVzdEluZGV4ZWRTZXR0ZXJO
b0lkZW50aWZpZXIoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCYsIFJlZjxUZXN0
SW5kZXhlZFNldHRlck5vSWRlbnRpZmllcj4mJik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRp
b24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24uY3BwCShyZXZpc2lvbiAy
NzY0OTkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk5
LDYgKzE5OSw4IEBAIGJvb2wgSlNUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW8KICAg
ICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4
Y2VwdGlvbio+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVj
dCwgaW5mbygpKTsKIAorICAgIGlmIChVTkxJS0VMWSh0aGlzT2JqZWN0ICE9IHB1dFByb3BlcnR5
U2xvdC50aGlzVmFsdWUoKSkpCisgICAgICAgIHJldHVybiBKU09iamVjdDo6cHV0KHRoaXNPYmpl
Y3QsIGxleGljYWxHbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHB1dFByb3BlcnR5
U2xvdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShsZXhpY2Fs
R2xvYmFsT2JqZWN0LT52bSgpKTsKIAogICAgIGlmIChhdXRvIGluZGV4ID0gcGFyc2VJbmRleChw
cm9wZXJ0eU5hbWUpKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEluZGV4ZWRT
ZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5oCShyZXZpc2lvbiAyNzY0OTkpCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW5kZXhlZFNldHRlclRocm93aW5n
RXhjZXB0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTY0LDcgKzY0LDcgQEAgcHVibGljOgogICAg
IHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pOwog
ICAgIHN0YXRpYyB2b2lkIGFuYWx5emVIZWFwKEpTQ2VsbCosIEpTQzo6SGVhcEFuYWx5emVyJik7
CiBwdWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9
IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSlNDOjpJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90
QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9w
ZXJ0eU5hbWVzIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3Q7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdz
IHwgSlNDOjpJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3Ro
SXNOb3RaZXJvIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eU5hbWVzIHwgSlNDOjpPdmVy
cmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBKU0M6Ok92ZXJyaWRlc1B1dDsKIHByb3RlY3RlZDoK
ICAgICBKU1Rlc3RJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24oSlNDOjpTdHJ1Y3R1cmUq
LCBKU0RPTUdsb2JhbE9iamVjdCYsIFJlZjxUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0
aW9uPiYmKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEluZGV4ZWRTZXR0ZXJX
aXRoSWRlbnRpZmllci5jcHAJKHJldmlzaW9uIDI3NjQ5OSkKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDgsNiArMjA4LDggQEAgYm9vbCBKU1Rlc3RJbmRleGVk
U2V0dGVyV2l0aElkZW50aWZpZXI6OgogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNU
ZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09C
SkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwogCisgICAgaWYgKFVOTElLRUxZKHRo
aXNPYmplY3QgIT0gcHV0UHJvcGVydHlTbG90LnRoaXNWYWx1ZSgpKSkKKyAgICAgICAgcmV0dXJu
IEpTT2JqZWN0OjpwdXQodGhpc09iamVjdCwgbGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlO
YW1lLCB2YWx1ZSwgcHV0UHJvcGVydHlTbG90KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKGxleGljYWxHbG9iYWxPYmplY3QtPnZtKCkpOwogCiAgICAgaWYgKGF1
dG8gaW5kZXggPSBwYXJzZUluZGV4KHByb3BlcnR5TmFtZSkpIHsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50
aWZpZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyLmgJKHJldmlzaW9uIDI3NjQ5
OSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbmRl
eGVkU2V0dGVyV2l0aElkZW50aWZpZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNjQsNyArNjQsNyBA
QCBwdWJsaWM6CiAgICAgc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1wbChK
U0M6OlZNJiB2bSk7CiAgICAgc3RhdGljIHZvaWQgYW5hbHl6ZUhlYXAoSlNDZWxsKiwgSlNDOjpI
ZWFwQW5hbHl6ZXImKTsKIHB1YmxpYzoKLSAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0
cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBKU0M6OkludGVyY2VwdHNHZXRP
d25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8gfCBKU0M6Ok92ZXJy
aWRlc0dldE93blByb3BlcnR5TmFtZXMgfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xv
dDsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6
U3RydWN0dXJlRmxhZ3MgfCBKU0M6OkludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4
RXZlbldoZW5MZW5ndGhJc05vdFplcm8gfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5TmFt
ZXMgfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEpTQzo6T3ZlcnJpZGVzUHV0
OwogcHJvdGVjdGVkOgogICAgIEpTVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcihKU0M6
OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0JiwgUmVmPFRlc3RJbmRleGVkU2V0dGVyV2l0
aElkZW50aWZpZXI+JiYpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEludGVyZmFjZS5oCShyZXZpc2lvbiAyNzY0
OTkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW50
ZXJmYWNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTgzLDYgKzgzLDggQEAgcHVibGljOgogI2lmIEVO
QUJMRShDb25kaXRpb24xMSkgfHwgRU5BQkxFKENvbmRpdGlvbjEyKQogICAgIEpTQzo6SlNWYWx1
ZSBzdXBwbGVtZW50YWxNZXRob2QzKEpTQzo6SlNHbG9iYWxPYmplY3QmLCBKU0M6OkNhbGxGcmFt
ZSYpOwogI2VuZGlmCitwdWJsaWM6CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1
Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSlNDOjpPdmVycmlkZXNQdXQ7CiBw
cm90ZWN0ZWQ6CiAgICAgSlNUZXN0SW50ZXJmYWNlKEpTQzo6U3RydWN0dXJlKiwgSlNET01HbG9i
YWxPYmplY3QmLCBSZWY8VGVzdEludGVyZmFjZT4mJik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lk
ZW50aWZpZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIuY3BwCShy
ZXZpc2lvbiAyNzY0OTkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjI1LDYgKzIyNSw4IEBAIGJvb2wgSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVy
Tm9JZGVudGkKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdE5hbWVkQW5kSW5k
ZXhlZFNldHRlck5vSWRlbnRpZmllcio+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5I
RVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKIAorICAgIGlmIChVTkxJS0VMWSh0aGlzT2JqZWN0
ICE9IHB1dFByb3BlcnR5U2xvdC50aGlzVmFsdWUoKSkpCisgICAgICAgIHJldHVybiBKU09iamVj
dDo6cHV0KHRoaXNPYmplY3QsIGxleGljYWxHbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgdmFs
dWUsIHB1dFByb3BlcnR5U2xvdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRShsZXhpY2FsR2xvYmFsT2JqZWN0LT52bSgpKTsKIAogICAgIGlmIChhdXRvIGluZGV4
ID0gcGFyc2VJbmRleChwcm9wZXJ0eU5hbWUpKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGlm
aWVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllci5oCShyZXZpc2lvbiAy
NzY0OTkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTY0
LDcgKzY0LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFj
ZUZvckltcGwoSlNDOjpWTSYgdm0pOwogICAgIHN0YXRpYyB2b2lkIGFuYWx5emVIZWFwKEpTQ2Vs
bCosIEpTQzo6SGVhcEFuYWx5emVyJik7CiBwdWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB1
bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSlNDOjpHZXRP
d25Qcm9wZXJ0eVNsb3RJc0ltcHVyZUZvclByb3BlcnR5QWJzZW5jZSB8IEpTQzo6SW50ZXJjZXB0
c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8IEpTQzo6
T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlOYW1lcyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVy
dHlTbG90IHwgSlNDOjpQcm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmc7CisgICAgc3RhdGljIGNvbnN0
ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSlND
OjpHZXRPd25Qcm9wZXJ0eVNsb3RJc0ltcHVyZUZvclByb3BlcnR5QWJzZW5jZSB8IEpTQzo6SW50
ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8
IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlOYW1lcyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3du
UHJvcGVydHlTbG90IHwgSlNDOjpPdmVycmlkZXNQdXQgfCBKU0M6OlByb2hpYml0c1Byb3BlcnR5
Q2FjaGluZzsKIHByb3RlY3RlZDoKICAgICBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lk
ZW50aWZpZXIoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCYsIFJlZjxUZXN0TmFt
ZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyPiYmKTsKIApJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRo
cm93aW5nRXhjZXB0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNl
cHRpb24uY3BwCShyZXZpc2lvbiAyNzY0OTkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRp
b24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjUsNiArMjI1LDggQEAgYm9vbCBKU1Rlc3ROYW1l
ZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZwogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8
SlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24qPihjZWxsKTsKICAg
ICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAKKyAgICBp
ZiAoVU5MSUtFTFkodGhpc09iamVjdCAhPSBwdXRQcm9wZXJ0eVNsb3QudGhpc1ZhbHVlKCkpKQor
ICAgICAgICByZXR1cm4gSlNPYmplY3Q6OnB1dCh0aGlzT2JqZWN0LCBsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBwdXRQcm9wZXJ0eVNsb3QpOwogICAgIGF1dG8gdGhy
b3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUobGV4aWNhbEdsb2JhbE9iamVjdC0+dm0oKSk7
CiAKICAgICBpZiAoYXV0byBpbmRleCA9IHBhcnNlSW5kZXgocHJvcGVydHlOYW1lKSkgewpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkQW5k
SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRl
clRocm93aW5nRXhjZXB0aW9uLmgJKHJldmlzaW9uIDI3NjQ5OSkKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJv
d2luZ0V4Y2VwdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC02NCw3ICs2NCw3IEBAIHB1YmxpYzoK
ICAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZt
KTsKICAgICBzdGF0aWMgdm9pZCBhbmFseXplSGVhcChKU0NlbGwqLCBKU0M6OkhlYXBBbmFseXpl
ciYpOwogcHVibGljOgotICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxh
Z3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEpTQzo6R2V0T3duUHJvcGVydHlTbG90SXNJbXB1
cmVGb3JQcm9wZXJ0eUFic2VuY2UgfCBKU0M6OkludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RC
eUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8gfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3Bl
cnR5TmFtZXMgfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEpTQzo6UHJvaGli
aXRzUHJvcGVydHlDYWNoaW5nOworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0
dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEpTQzo6R2V0T3duUHJvcGVydHlTbG90
SXNJbXB1cmVGb3JQcm9wZXJ0eUFic2VuY2UgfCBKU0M6OkludGVyY2VwdHNHZXRPd25Qcm9wZXJ0
eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8gfCBKU0M6Ok92ZXJyaWRlc0dldE93
blByb3BlcnR5TmFtZXMgfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEpTQzo6
T3ZlcnJpZGVzUHV0IHwgSlNDOjpQcm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmc7CiBwcm90ZWN0ZWQ6
CiAgICAgSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24oSlNDOjpT
dHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCYsIFJlZjxUZXN0TmFtZWRBbmRJbmRleGVkU2V0
dGVyVGhyb3dpbmdFeGNlcHRpb24+JiYpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZp
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5jcHAJKHJldmlz
aW9uIDI3NjQ5OSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTIzNiw2ICsyMzYsOCBAQCBib29sIEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldp
dGhJZGVuCiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3ROYW1lZEFuZEluZGV4
ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcio+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5I
RVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKIAorICAgIGlmIChVTkxJS0VMWSh0aGlzT2JqZWN0
ICE9IHB1dFByb3BlcnR5U2xvdC50aGlzVmFsdWUoKSkpCisgICAgICAgIHJldHVybiBKU09iamVj
dDo6cHV0KHRoaXNPYmplY3QsIGxleGljYWxHbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgdmFs
dWUsIHB1dFByb3BlcnR5U2xvdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRShsZXhpY2FsR2xvYmFsT2JqZWN0LT52bSgpKTsKIAogICAgIGlmIChhdXRvIGluZGV4
ID0gcGFyc2VJbmRleChwcm9wZXJ0eU5hbWUpKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50
aWZpZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIuaAkocmV2aXNp
b24gMjc2NDk5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTY0LDcgKzY0LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBz
dWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pOwogICAgIHN0YXRpYyB2b2lkIGFuYWx5emVIZWFw
KEpTQ2VsbCosIEpTQzo6SGVhcEFuYWx5emVyJik7CiBwdWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0
ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSlND
OjpHZXRPd25Qcm9wZXJ0eVNsb3RJc0ltcHVyZUZvclByb3BlcnR5QWJzZW5jZSB8IEpTQzo6SW50
ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8
IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlOYW1lcyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3du
UHJvcGVydHlTbG90IHwgSlNDOjpQcm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmc7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdz
IHwgSlNDOjpHZXRPd25Qcm9wZXJ0eVNsb3RJc0ltcHVyZUZvclByb3BlcnR5QWJzZW5jZSB8IEpT
Qzo6SW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90
WmVybyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlOYW1lcyB8IEpTQzo6T3ZlcnJpZGVz
R2V0T3duUHJvcGVydHlTbG90IHwgSlNDOjpPdmVycmlkZXNQdXQgfCBKU0M6OlByb2hpYml0c1By
b3BlcnR5Q2FjaGluZzsKIHByb3RlY3RlZDoKICAgICBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0
ZXJXaXRoSWRlbnRpZmllcihKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0JiwgUmVm
PFRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcj4mJik7CiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlck5v
SWRlbnRpZmllci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyLmNwcAkocmV2aXNpb24g
Mjc2NDk5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA0LDYgKzIw
NCw4IEBAIGJvb2wgSlNUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXI6OnB1dCgKICAgICBhdXRv
KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyKj4oY2Vs
bCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwog
CisgICAgaWYgKFVOTElLRUxZKHRoaXNPYmplY3QgIT0gcHV0UHJvcGVydHlTbG90LnRoaXNWYWx1
ZSgpKSkKKyAgICAgICAgcmV0dXJuIEpTT2JqZWN0OjpwdXQodGhpc09iamVjdCwgbGV4aWNhbEds
b2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgcHV0UHJvcGVydHlTbG90KTsKICAgICBh
dXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKGxleGljYWxHbG9iYWxPYmplY3Qt
PnZtKCkpOwogCiAgICAgaWYgKCFwcm9wZXJ0eU5hbWUuaXNTeW1ib2woKSkgewpJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyTm9J
ZGVudGlmaWVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyLmgJKHJldmlzaW9uIDI3NjQ5
OSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1l
ZFNldHRlck5vSWRlbnRpZmllci5oCSh3b3JraW5nIGNvcHkpCkBAIC02NCw3ICs2NCw3IEBAIHB1
YmxpYzoKICAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3JJbXBsKEpTQzo6
Vk0mIHZtKTsKICAgICBzdGF0aWMgdm9pZCBhbmFseXplSGVhcChKU0NlbGwqLCBKU0M6OkhlYXBB
bmFseXplciYpOwogcHVibGljOgotICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0
dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEpTQzo6R2V0T3duUHJvcGVydHlTbG90
SXNJbXB1cmVGb3JQcm9wZXJ0eUFic2VuY2UgfCBKU0M6OkludGVyY2VwdHNHZXRPd25Qcm9wZXJ0
eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8gfCBKU0M6Ok92ZXJyaWRlc0dldE93
blByb3BlcnR5TmFtZXMgfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEpTQzo6
UHJvaGliaXRzUHJvcGVydHlDYWNoaW5nOworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQg
U3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEpTQzo6R2V0T3duUHJvcGVy
dHlTbG90SXNJbXB1cmVGb3JQcm9wZXJ0eUFic2VuY2UgfCBKU0M6OkludGVyY2VwdHNHZXRPd25Q
cm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8gfCBKU0M6Ok92ZXJyaWRl
c0dldE93blByb3BlcnR5TmFtZXMgfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8
IEpTQzo6T3ZlcnJpZGVzUHV0IHwgSlNDOjpQcm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmc7CiBwcm90
ZWN0ZWQ6CiAgICAgSlNUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXIoSlNDOjpTdHJ1Y3R1cmUq
LCBKU0RPTUdsb2JhbE9iamVjdCYsIFJlZjxUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXI+JiYp
OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdF
eGNlcHRpb24uY3BwCShyZXZpc2lvbiAyNzY0OTkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTIwNCw2ICsyMDQsOCBAQCBib29sIEpTVGVzdE5hbWVkU2V0dGVy
VGhyb3dpbmdFeGNlcHRpb246CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3RO
YW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9uKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVD
VF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwogCisgICAgaWYgKFVOTElLRUxZKHRoaXNP
YmplY3QgIT0gcHV0UHJvcGVydHlTbG90LnRoaXNWYWx1ZSgpKSkKKyAgICAgICAgcmV0dXJuIEpT
T2JqZWN0OjpwdXQodGhpc09iamVjdCwgbGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1l
LCB2YWx1ZSwgcHV0UHJvcGVydHlTbG90KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKGxleGljYWxHbG9iYWxPYmplY3QtPnZtKCkpOwogCiAgICAgaWYgKCFwcm9w
ZXJ0eU5hbWUuaXNTeW1ib2woKSkgewpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24uaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFt
ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5oCShyZXZpc2lvbiAyNzY0OTkpCisrKyBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJUaHJvd2lu
Z0V4Y2VwdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC02NCw3ICs2NCw3IEBAIHB1YmxpYzoKICAg
ICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKTsK
ICAgICBzdGF0aWMgdm9pZCBhbmFseXplSGVhcChKU0NlbGwqLCBKU0M6OkhlYXBBbmFseXplciYp
OwogcHVibGljOgotICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3Mg
PSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEpTQzo6R2V0T3duUHJvcGVydHlTbG90SXNJbXB1cmVG
b3JQcm9wZXJ0eUFic2VuY2UgfCBKU0M6OkludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUlu
ZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8gfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5
TmFtZXMgfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEpTQzo6UHJvaGliaXRz
UHJvcGVydHlDYWNoaW5nOworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJl
RmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEpTQzo6R2V0T3duUHJvcGVydHlTbG90SXNJ
bXB1cmVGb3JQcm9wZXJ0eUFic2VuY2UgfCBKU0M6OkludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNs
b3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8gfCBKU0M6Ok92ZXJyaWRlc0dldE93blBy
b3BlcnR5TmFtZXMgfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEpTQzo6T3Zl
cnJpZGVzUHV0IHwgSlNDOjpQcm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmc7CiBwcm90ZWN0ZWQ6CiAg
ICAgSlNUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbihKU0M6OlN0cnVjdHVyZSosIEpT
RE9NR2xvYmFsT2JqZWN0JiwgUmVmPFRlc3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9uPiYm
KTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhJZGVudGlm
aWVyLmNwcAkocmV2aXNpb24gMjc2NDk5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yMTIsNiArMjEyLDggQEAgYm9vbCBKU1Rlc3ROYW1lZFNldHRlcldpdGhJZGVu
dGlmaWVyOjpwdQogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0TmFtZWRTZXR0
ZXJXaXRoSWRlbnRpZmllcio+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMo
dGhpc09iamVjdCwgaW5mbygpKTsKIAorICAgIGlmIChVTkxJS0VMWSh0aGlzT2JqZWN0ICE9IHB1
dFByb3BlcnR5U2xvdC50aGlzVmFsdWUoKSkpCisgICAgICAgIHJldHVybiBKU09iamVjdDo6cHV0
KHRoaXNPYmplY3QsIGxleGljYWxHbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHB1
dFByb3BlcnR5U2xvdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RShsZXhpY2FsR2xvYmFsT2JqZWN0LT52bSgpKTsKIAogICAgIGlmICghcHJvcGVydHlOYW1lLmlz
U3ltYm9sKCkpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aElk
ZW50aWZpZXIuaAkocmV2aXNpb24gMjc2NDk5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXIuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNjQsNyArNjQsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIEpTQzo6SXNvU3Vi
c3BhY2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSk7CiAgICAgc3RhdGljIHZvaWQgYW5h
bHl6ZUhlYXAoSlNDZWxsKiwgSlNDOjpIZWFwQW5hbHl6ZXImKTsKIHB1YmxpYzoKLSAgICBzdGF0
aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxh
Z3MgfCBKU0M6OkdldE93blByb3BlcnR5U2xvdElzSW1wdXJlRm9yUHJvcGVydHlBYnNlbmNlIHwg
SlNDOjpJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNO
b3RaZXJvIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eU5hbWVzIHwgSlNDOjpPdmVycmlk
ZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBKU0M6OlByb2hpYml0c1Byb3BlcnR5Q2FjaGluZzsKKyAg
ICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0
dXJlRmxhZ3MgfCBKU0M6OkdldE93blByb3BlcnR5U2xvdElzSW1wdXJlRm9yUHJvcGVydHlBYnNl
bmNlIHwgSlNDOjpJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVu
Z3RoSXNOb3RaZXJvIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eU5hbWVzIHwgSlNDOjpP
dmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBKU0M6Ok92ZXJyaWRlc1B1dCB8IEpTQzo6UHJv
aGliaXRzUHJvcGVydHlDYWNoaW5nOwogcHJvdGVjdGVkOgogICAgIEpTVGVzdE5hbWVkU2V0dGVy
V2l0aElkZW50aWZpZXIoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCYsIFJlZjxU
ZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllcj4mJik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0
dGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlci5jcHAJKHJldmlzaW9uIDI3
NjQ5OSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RO
YW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjM2LDYg
KzIzNiw4IEBAIGJvb2wgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlcjoKICAgICBh
dXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0
ZXIqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGlu
Zm8oKSk7CiAKKyAgICBpZiAoVU5MSUtFTFkodGhpc09iamVjdCAhPSBwdXRQcm9wZXJ0eVNsb3Qu
dGhpc1ZhbHVlKCkpKQorICAgICAgICByZXR1cm4gSlNPYmplY3Q6OnB1dCh0aGlzT2JqZWN0LCBs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBwdXRQcm9wZXJ0eVNsb3Qp
OwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUobGV4aWNhbEdsb2Jh
bE9iamVjdC0+dm0oKSk7CiAKICAgICBpZiAoIXByb3BlcnR5TmFtZS5pc1N5bWJvbCgpKSB7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRT
ZXR0ZXJXaXRoSW5kZXhlZEdldHRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVy
LmgJKHJldmlzaW9uIDI3NjQ5OSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTY0LDcgKzY0LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNl
KiBzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pOwogICAgIHN0YXRpYyB2b2lkIGFuYWx5emVI
ZWFwKEpTQ2VsbCosIEpTQzo6SGVhcEFuYWx5emVyJik7CiBwdWJsaWM6Ci0gICAgc3RhdGljIGNv
bnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwg
SlNDOjpHZXRPd25Qcm9wZXJ0eVNsb3RJc0ltcHVyZUZvclByb3BlcnR5QWJzZW5jZSB8IEpTQzo6
SW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVy
byB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlOYW1lcyB8IEpTQzo6T3ZlcnJpZGVzR2V0
T3duUHJvcGVydHlTbG90IHwgSlNDOjpQcm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmc7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZs
YWdzIHwgSlNDOjpHZXRPd25Qcm9wZXJ0eVNsb3RJc0ltcHVyZUZvclByb3BlcnR5QWJzZW5jZSB8
IEpTQzo6SW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElz
Tm90WmVybyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlOYW1lcyB8IEpTQzo6T3ZlcnJp
ZGVzR2V0T3duUHJvcGVydHlTbG90IHwgSlNDOjpPdmVycmlkZXNQdXQgfCBKU0M6OlByb2hpYml0
c1Byb3BlcnR5Q2FjaGluZzsKIHByb3RlY3RlZDoKICAgICBKU1Rlc3ROYW1lZFNldHRlcldpdGhJ
bmRleGVkR2V0dGVyKEpTQzo6U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3QmLCBSZWY8VGVz
dE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXI+JiYpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdl
dHRlckFuZFNldHRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0
ZXIuY3BwCShyZXZpc2lvbiAyNzY0OTkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTIzNiw2ICsyMzYsOCBAQCBib29sIEpTVGVzdE5hbWVkU2V0
dGVyV2l0aEluZGV4ZWRHZXR0ZXJBCiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rl
c3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5kU2V0dGVyKj4oY2VsbCk7CiAgICAgQVNT
RVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwogCisgICAgaWYgKFVO
TElLRUxZKHRoaXNPYmplY3QgIT0gcHV0UHJvcGVydHlTbG90LnRoaXNWYWx1ZSgpKSkKKyAgICAg
ICAgcmV0dXJuIEpTT2JqZWN0OjpwdXQodGhpc09iamVjdCwgbGV4aWNhbEdsb2JhbE9iamVjdCwg
cHJvcGVydHlOYW1lLCB2YWx1ZSwgcHV0UHJvcGVydHlTbG90KTsKICAgICBhdXRvIHRocm93U2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKGxleGljYWxHbG9iYWxPYmplY3QtPnZtKCkpOwogCiAg
ICAgaWYgKGF1dG8gaW5kZXggPSBwYXJzZUluZGV4KHByb3BlcnR5TmFtZSkpIHsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldp
dGhJbmRleGVkR2V0dGVyQW5kU2V0dGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0
ZXJBbmRTZXR0ZXIuaAkocmV2aXNpb24gMjc2NDk5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRT
ZXR0ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNjQsNyArNjQsNyBAQCBwdWJsaWM6CiAgICAgc3Rh
dGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSk7CiAgICAg
c3RhdGljIHZvaWQgYW5hbHl6ZUhlYXAoSlNDZWxsKiwgSlNDOjpIZWFwQW5hbHl6ZXImKTsKIHB1
YmxpYzoKLSAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFz
ZTo6U3RydWN0dXJlRmxhZ3MgfCBKU0M6OkdldE93blByb3BlcnR5U2xvdElzSW1wdXJlRm9yUHJv
cGVydHlBYnNlbmNlIHwgSlNDOjpJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2
ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eU5hbWVz
IHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBKU0M6OlByb2hpYml0c1Byb3Bl
cnR5Q2FjaGluZzsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdz
ID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBKU0M6OkdldE93blByb3BlcnR5U2xvdElzSW1wdXJl
Rm9yUHJvcGVydHlBYnNlbmNlIHwgSlNDOjpJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJ
bmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0
eU5hbWVzIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBKU0M6Ok92ZXJyaWRl
c1B1dCB8IEpTQzo6UHJvaGliaXRzUHJvcGVydHlDYWNoaW5nOwogcHJvdGVjdGVkOgogICAgIEpT
VGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXIoSlNDOjpTdHJ1Y3R1cmUq
LCBKU0RPTUdsb2JhbE9iamVjdCYsIFJlZjxUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRl
ckFuZFNldHRlcj4mJik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lPdmVycmlkZUJ1aWx0SW5zLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5T3ZlcnJpZGVCdWlsdElucy5jcHAJKHJldmlzaW9uIDI3
NjQ5OSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RO
YW1lZFNldHRlcldpdGhMZWdhY3lPdmVycmlkZUJ1aWx0SW5zLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjA0LDYgKzIwNCw4IEBAIGJvb2wgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5T3ZlcnJp
ZGUKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdE5hbWVkU2V0dGVyV2l0aExl
Z2FjeU92ZXJyaWRlQnVpbHRJbnMqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVS
SVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAKKyAgICBpZiAoVU5MSUtFTFkodGhpc09iamVjdCAh
PSBwdXRQcm9wZXJ0eVNsb3QudGhpc1ZhbHVlKCkpKQorICAgICAgICByZXR1cm4gSlNPYmplY3Q6
OnB1dCh0aGlzT2JqZWN0LCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHZhbHVl
LCBwdXRQcm9wZXJ0eVNsb3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUobGV4aWNhbEdsb2JhbE9iamVjdC0+dm0oKSk7CiAKICAgICBpZiAoIXByb3BlcnR5TmFt
ZS5pc1N5bWJvbCgpKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5T3ZlcnJpZGVCdWlsdElucy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RO
YW1lZFNldHRlcldpdGhMZWdhY3lPdmVycmlkZUJ1aWx0SW5zLmgJKHJldmlzaW9uIDI3NjQ5OSkK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNl
dHRlcldpdGhMZWdhY3lPdmVycmlkZUJ1aWx0SW5zLmgJKHdvcmtpbmcgY29weSkKQEAgLTY0LDcg
KzY0LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZv
ckltcGwoSlNDOjpWTSYgdm0pOwogICAgIHN0YXRpYyB2b2lkIGFuYWx5emVIZWFwKEpTQ2VsbCos
IEpTQzo6SGVhcEFuYWx5emVyJik7CiBwdWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB1bnNp
Z25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSlNDOjpHZXRPd25Q
cm9wZXJ0eVNsb3RJc0ltcHVyZSB8IEpTQzo6SW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5
SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVy
dHlOYW1lcyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgSlNDOjpQcm9oaWJp
dHNQcm9wZXJ0eUNhY2hpbmc7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1
cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSlNDOjpHZXRPd25Qcm9wZXJ0eVNsb3RJ
c0ltcHVyZSB8IEpTQzo6SW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hl
bkxlbmd0aElzTm90WmVybyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlOYW1lcyB8IEpT
Qzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgSlNDOjpPdmVycmlkZXNQdXQgfCBKU0M6
OlByb2hpYml0c1Byb3BlcnR5Q2FjaGluZzsKIHByb3RlY3RlZDoKICAgICBKU1Rlc3ROYW1lZFNl
dHRlcldpdGhMZWdhY3lPdmVycmlkZUJ1aWx0SW5zKEpTQzo6U3RydWN0dXJlKiwgSlNET01HbG9i
YWxPYmplY3QmLCBSZWY8VGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeU92ZXJyaWRlQnVpbHRJbnM+
JiYpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFt
ZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVzLmNwcAkocmV2aXNpb24gMjc2
NDk5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5h
bWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllcy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTIzMCw2ICsyMzAsOCBAQCBib29sIEpTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVu
Zm9yZ2VhCiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3ROYW1lZFNldHRlcldp
dGhMZWdhY3lVbmZvcmdlYWJsZVByb3BlcnRpZXMqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JK
RUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAKKyAgICBpZiAoVU5MSUtFTFkodGhp
c09iamVjdCAhPSBwdXRQcm9wZXJ0eVNsb3QudGhpc1ZhbHVlKCkpKQorICAgICAgICByZXR1cm4g
SlNPYmplY3Q6OnB1dCh0aGlzT2JqZWN0LCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5h
bWUsIHZhbHVlLCBwdXRQcm9wZXJ0eVNsb3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUobGV4aWNhbEdsb2JhbE9iamVjdC0+dm0oKSk7CiAKICAgICBpZiAoIXBy
b3BlcnR5TmFtZS5pc1N5bWJvbCgpKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWFibGVQcm9w
ZXJ0aWVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllcy5o
CShyZXZpc2lvbiAyNzY0OTkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTY0LDcgKzY0LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBKU0M6
Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pOwogICAgIHN0YXRpYyB2
b2lkIGFuYWx5emVIZWFwKEpTQ2VsbCosIEpTQzo6SGVhcEFuYWx5emVyJik7CiBwdWJsaWM6Ci0g
ICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVj
dHVyZUZsYWdzIHwgSlNDOjpHZXRPd25Qcm9wZXJ0eVNsb3RJc0ltcHVyZUZvclByb3BlcnR5QWJz
ZW5jZSB8IEpTQzo6SGFzU3RhdGljUHJvcGVydHlUYWJsZSB8IEpTQzo6SW50ZXJjZXB0c0dldE93
blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8IEpTQzo6T3ZlcnJp
ZGVzR2V0T3duUHJvcGVydHlOYW1lcyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90
IHwgSlNDOjpQcm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmc7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1
bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSlNDOjpHZXRP
d25Qcm9wZXJ0eVNsb3RJc0ltcHVyZUZvclByb3BlcnR5QWJzZW5jZSB8IEpTQzo6SGFzU3RhdGlj
UHJvcGVydHlUYWJsZSB8IEpTQzo6SW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhF
dmVuV2hlbkxlbmd0aElzTm90WmVybyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlOYW1l
cyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgSlNDOjpPdmVycmlkZXNQdXQg
fCBKU0M6OlByb2hpYml0c1Byb3BlcnR5Q2FjaGluZzsKIHByb3RlY3RlZDoKICAgICBKU1Rlc3RO
YW1lZFNldHRlcldpdGhMZWdhY3lVbmZvcmdlYWJsZVByb3BlcnRpZXMoSlNDOjpTdHJ1Y3R1cmUq
LCBKU0RPTUdsb2JhbE9iamVjdCYsIFJlZjxUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3Jn
ZWFibGVQcm9wZXJ0aWVzPiYmKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVy
dGllc0FuZExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdh
Y3lVbmZvcmdlYWJsZVByb3BlcnRpZXNBbmRMZWdhY3lPdmVycmlkZUJ1aWx0SW5zLmNwcAkocmV2
aXNpb24gMjc2NDk5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllc0FuZExlZ2Fj
eU92ZXJyaWRlQnVpbHRJbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzAsNiArMjMwLDggQEAg
Ym9vbCBKU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lVbmZvcmdlYQogICAgIGF1dG8qIHRoaXNP
YmplY3QgPSBqc0Nhc3Q8SlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWFibGVQcm9w
ZXJ0aWVzQW5kTGVnYWN5T3ZlcnJpZGVCdWlsdElucyo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19P
QkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKIAorICAgIGlmIChVTkxJS0VMWSh0
aGlzT2JqZWN0ICE9IHB1dFByb3BlcnR5U2xvdC50aGlzVmFsdWUoKSkpCisgICAgICAgIHJldHVy
biBKU09iamVjdDo6cHV0KHRoaXNPYmplY3QsIGxleGljYWxHbG9iYWxPYmplY3QsIHByb3BlcnR5
TmFtZSwgdmFsdWUsIHB1dFByb3BlcnR5U2xvdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRShsZXhpY2FsR2xvYmFsT2JqZWN0LT52bSgpKTsKIAogICAgIGlmICgh
cHJvcGVydHlOYW1lLmlzU3ltYm9sKCkpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lVbmZvcmdlYWJsZVBy
b3BlcnRpZXNBbmRMZWdhY3lPdmVycmlkZUJ1aWx0SW5zLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aExl
Z2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllc0FuZExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMuaAkocmV2
aXNpb24gMjc2NDk5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllc0FuZExlZ2Fj
eU92ZXJyaWRlQnVpbHRJbnMuaAkod29ya2luZyBjb3B5KQpAQCAtNjQsNyArNjQsNyBAQCBwdWJs
aWM6CiAgICAgc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6OlZN
JiB2bSk7CiAgICAgc3RhdGljIHZvaWQgYW5hbHl6ZUhlYXAoSlNDZWxsKiwgSlNDOjpIZWFwQW5h
bHl6ZXImKTsKIHB1YmxpYzoKLSAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVy
ZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBKU0M6OkdldE93blByb3BlcnR5U2xvdElz
SW1wdXJlIHwgSlNDOjpIYXNTdGF0aWNQcm9wZXJ0eVRhYmxlIHwgSlNDOjpJbnRlcmNlcHRzR2V0
T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgSlNDOjpPdmVy
cmlkZXNHZXRPd25Qcm9wZXJ0eU5hbWVzIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNs
b3QgfCBKU0M6OlByb2hpYml0c1Byb3BlcnR5Q2FjaGluZzsKKyAgICBzdGF0aWMgY29uc3RleHBy
IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBKU0M6Okdl
dE93blByb3BlcnR5U2xvdElzSW1wdXJlIHwgSlNDOjpIYXNTdGF0aWNQcm9wZXJ0eVRhYmxlIHwg
SlNDOjpJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNO
b3RaZXJvIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eU5hbWVzIHwgSlNDOjpPdmVycmlk
ZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBKU0M6Ok92ZXJyaWRlc1B1dCB8IEpTQzo6UHJvaGliaXRz
UHJvcGVydHlDYWNoaW5nOwogcHJvdGVjdGVkOgogICAgIEpTVGVzdE5hbWVkU2V0dGVyV2l0aExl
Z2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllc0FuZExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMoSlNDOjpT
dHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCYsIFJlZjxUZXN0TmFtZWRTZXR0ZXJXaXRoTGVn
YWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVzQW5kTGVnYWN5T3ZlcnJpZGVCdWlsdElucz4mJik7CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RQbHVn
aW5JbnRlcmZhY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RQbHVnaW5JbnRlcmZhY2UuY3BwCShyZXZpc2lvbiAyNzY0OTkp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0UGx1Z2lu
SW50ZXJmYWNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTgxLDYgKzE4MSw4IEBAIGJvb2wgSlNU
ZXN0UGx1Z2luSW50ZXJmYWNlOjpwdXQoSlNDZWxsKiAKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0g
anNDYXN0PEpTVGVzdFBsdWdpbkludGVyZmFjZSo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpF
Q1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKIAorICAgIGlmIChVTkxJS0VMWSh0aGlz
T2JqZWN0ICE9IHB1dFByb3BlcnR5U2xvdC50aGlzVmFsdWUoKSkpCisgICAgICAgIHJldHVybiBK
U09iamVjdDo6cHV0KHRoaXNPYmplY3QsIGxleGljYWxHbG9iYWxPYmplY3QsIHByb3BlcnR5TmFt
ZSwgdmFsdWUsIHB1dFByb3BlcnR5U2xvdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRShsZXhpY2FsR2xvYmFsT2JqZWN0LT52bSgpKTsKIAogICAgIGJvb2wgcHV0
UmVzdWx0ID0gZmFsc2U7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0UGx1Z2luSW50ZXJmYWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFBsdWdpbkludGVyZmFjZS5oCShyZXZp
c2lvbiAyNzY0OTkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0UGx1Z2luSW50ZXJmYWNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTY3LDcgKzY3LDcgQEAg
cHVibGljOgogCiAgICAgc3RhdGljIHZvaWQgYW5hbHl6ZUhlYXAoSlNDZWxsKiwgSlNDOjpIZWFw
QW5hbHl6ZXImKTsKIHB1YmxpYzoKLSAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVj
dHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBKU0M6OkludGVyY2VwdHNHZXRPd25Q
cm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8gfCBKU0M6Ok92ZXJyaWRl
c0dldENhbGxEYXRhIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBKU0M6OlBy
b2hpYml0c1Byb3BlcnR5Q2FjaGluZzsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0
cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBKU0M6OkludGVyY2VwdHNHZXRP
d25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8gfCBKU0M6Ok92ZXJy
aWRlc0dldENhbGxEYXRhIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBKU0M6
Ok92ZXJyaWRlc1B1dCB8IEpTQzo6UHJvaGliaXRzUHJvcGVydHlDYWNoaW5nOwogcHJvdGVjdGVk
OgogICAgIEpTVGVzdFBsdWdpbkludGVyZmFjZShKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFs
T2JqZWN0JiwgUmVmPFRlc3RQbHVnaW5JbnRlcmZhY2U+JiYpOwogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9icmlkZ2UvcnVudGltZV9hcnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JyaWRnZS9ydW50aW1lX2FycmF5LmgJKHJldmlzaW9uIDI3NjQ5OSkKKysrIFNvdXJjZS9XZWJD
b3JlL2JyaWRnZS9ydW50aW1lX2FycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDcgKzM1LDcg
QEAgbmFtZXNwYWNlIEpTQyB7CiBjbGFzcyBSdW50aW1lQXJyYXkgZmluYWwgOiBwdWJsaWMgSlNB
cnJheSB7CiBwdWJsaWM6CiAgICAgdXNpbmcgQmFzZSA9IEpTQXJyYXk7Ci0gICAgc3RhdGljIGNv
bnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwg
T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlOYW1l
cyB8IEludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05v
dFplcm87CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJh
c2U6OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJp
ZGVzR2V0T3duUHJvcGVydHlOYW1lcyB8IE92ZXJyaWRlc1B1dCB8IEludGVyY2VwdHNHZXRPd25Q
cm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm87CiAgICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOwogCiAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgQ2VsbFR5cGUsIEpTQzo6U3Vic3BhY2VBY2Nlc3M+CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9icmlkZ2UvcnVudGltZV9vYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
cmlkZ2UvcnVudGltZV9vYmplY3QuaAkocmV2aXNpb24gMjc2NDk5KQorKysgU291cmNlL1dlYkNv
cmUvYnJpZGdlL3J1bnRpbWVfb2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDcgKzM3LDcg
QEAgRXhjZXB0aW9uKiB0aHJvd1J1bnRpbWVPYmplY3RJbnZhbGlkQWNjZQogY2xhc3MgV0VCQ09S
RV9FWFBPUlQgUnVudGltZU9iamVjdCA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKIHB1Ymxp
YzoKICAgICB1c2luZyBCYXNlID0gSlNOb25GaW5hbE9iamVjdDsKLSAgICBzdGF0aWMgY29uc3Rl
eHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBPdmVy
cmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eU5hbWVzIHwg
T3ZlcnJpZGVzR2V0Q2FsbERhdGEgfCBHZXRPd25Qcm9wZXJ0eVNsb3RNYXlCZVdyb25nQWJvdXRE
b250RW51bTsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0g
QmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVy
cmlkZXNHZXRPd25Qcm9wZXJ0eU5hbWVzIHwgT3ZlcnJpZGVzR2V0Q2FsbERhdGEgfCBPdmVycmlk
ZXNQdXQgfCBHZXRPd25Qcm9wZXJ0eVNsb3RNYXlCZVdyb25nQWJvdXREb250RW51bTsKICAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7CiAKICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgSlNDOjpTdWJzcGFjZUFjY2Vzcz4KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JyaWRnZS9vYmpjL29iamNfcnVudGltZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JyaWRnZS9vYmpjL29iamNfcnVudGltZS5oCShyZXZpc2lvbiAyNzY0OTkpCisr
KyBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvb2JqYy9vYmpjX3J1bnRpbWUuaAkod29ya2luZyBjb3B5
KQpAQCAtOTEsNyArOTEsNyBAQCBwcml2YXRlOgogY2xhc3MgT2JqY0ZhbGxiYWNrT2JqZWN0SW1w
IGZpbmFsIDogcHVibGljIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0IHsKIHB1YmxpYzoKICAgICB1c2lu
ZyBCYXNlID0gSlNEZXN0cnVjdGlibGVPYmplY3Q7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB1bnNp
Z25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJpZGVzR2V0
T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzR2V0Q2FsbERhdGE7CisgICAgc3RhdGljIGNvbnN0
ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgT3Zl
cnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzR2V0Q2FsbERhdGEgfCBPdmVycmlk
ZXNQdXQ7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVl
OwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIEpTQzo6U3Vic3BhY2VBY2Nlc3M+
CkluZGV4OiBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L0NoYW5nZUxvZwkocmV2aXNpb24gMjc2NDk5KQorKysgU291cmNlL1dlYktpdC9DaGFuZ2VM
b2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMiBAQAorMjAyMS0wNC0yMyAgQWxleGV5IFNo
dmF5a2EgIDxzaHZhaWthbGVzaEBnbWFpbC5jb20+CisKKyAgICAgICAgW0pTQ10gT3JkaW5hcnlT
ZXQgc2hvdWxkIGludm9rZSBjdXN0b20gW1tTZXRdXSBtZXRob2RzCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTc5MTYKKworICAgICAgICBSZXZpZXdl
ZCBieSBZdXN1a2UgU3V6dWtpLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNj
YXBlL0pTTlBPYmplY3QuaDoKKwogMjAyMS0wNC0yMyAgWW91ZW5uIEZhYmxldCAgPHlvdWVubkBh
cHBsZS5jb20+CiAKICAgICAgICAgSGFuZGxlIHJvdGF0aW9uIGNvcnJlY3RseSBpbiBXZWJSVEMg
R1BVUHJvY2VzcyByZW5kZXJpbmcgcGlwZWxpbmUKSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9QbHVnaW5zL05ldHNjYXBlL0pTTlBPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9KU05QT2JqZWN0LmgJKHJldmlzaW9u
IDI3NjQ5OSkKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL0pT
TlBPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtNDQsNyArNDQsNyBAQCBjbGFzcyBOUFJ1bnRp
bWVPYmplY3RNYXA7CiBjbGFzcyBKU05QT2JqZWN0IGZpbmFsIDogcHVibGljIEpTQzo6SlNEZXN0
cnVjdGlibGVPYmplY3QgewogcHVibGljOgogICAgIHVzaW5nIEJhc2UgPSBKU0M6OkpTRGVzdHJ1
Y3RpYmxlT2JqZWN0OwotICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxh
Z3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlT
bG90IHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eU5hbWVzIHwgSlNDOjpPdmVycmlkZXNH
ZXRDYWxsRGF0YSB8IEpTQzo6R2V0T3duUHJvcGVydHlTbG90TWF5QmVXcm9uZ0Fib3V0RG9udEVu
dW07CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6
OlN0cnVjdHVyZUZsYWdzIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBKU0M6
Ok92ZXJyaWRlc0dldE93blByb3BlcnR5TmFtZXMgfCBKU0M6Ok92ZXJyaWRlc0dldENhbGxEYXRh
IHwgSlNDOjpPdmVycmlkZXNQdXQgfCBKU0M6OkdldE93blByb3BlcnR5U2xvdE1heUJlV3JvbmdB
Ym91dERvbnRFbnVtOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIEpTQzo6U3Vi
c3BhY2VBY2Nlc3M+CiAgICAgc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpT
Qzo6Vk0mIHZtKQpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gMjc2NDk5KQorKysgTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTUgQEAKKzIwMjEtMDQtMjMgIEFsZXhl
eSBTaHZheWthICA8c2h2YWlrYWxlc2hAZ21haWwuY29tPgorCisgICAgICAgIFtKU0NdIE9yZGlu
YXJ5U2V0IHNob3VsZCBpbnZva2UgY3VzdG9tIFtbU2V0XV0gbWV0aG9kcworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE3OTE2CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgWXVzdWtlIFN1enVraS4KKworICAgICAgICAqIGh0dHAvdGVzdHMvc2VjdXJpdHkv
Y3Jvc3MtZnJhbWUtYWNjZXNzLW9iamVjdC1nZXRQcm90b3R5cGVPZi1pbi1wdXQtZXhwZWN0ZWQu
dHh0OgorICAgICAgICAqIGh0dHAvdGVzdHMvc2VjdXJpdHkvY3Jvc3MtZnJhbWUtYWNjZXNzLW9i
amVjdC1nZXRQcm90b3R5cGVPZi1pbi1wdXQuaHRtbDoKKyAgICAgICAgKiBqcy9kb20vcmVmbGVj
dC1zZXQtb250by1kb20tZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGpzL2RvbS9zY3JpcHQtdGVz
dHMvcmVmbGVjdC1zZXQtb250by1kb20uanM6CisKIDIwMjEtMDQtMjMgIFBoaWxpcHBlIE5vcm1h
bmQgIDxwbm9ybWFuZEBpZ2FsaWEuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIEdUSyBnYXJk
ZW5pbmcKSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkvY3Jvc3MtZnJhbWUt
YWNjZXNzLW9iamVjdC1nZXRQcm90b3R5cGVPZi1pbi1wdXQtZXhwZWN0ZWQudHh0Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkvY3Jvc3MtZnJhbWUtYWNjZXNz
LW9iamVjdC1nZXRQcm90b3R5cGVPZi1pbi1wdXQtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAyNzY0
OTkpCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L2Nyb3NzLWZyYW1lLWFjY2Vz
cy1vYmplY3QtZ2V0UHJvdG90eXBlT2YtaW4tcHV0LWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDcgQEAKIFRoaXMgdGVzdHMgdGhhdCB5b3UgY2FuJ3QgZ2V0IHRoZSBwcm90
b3R5cGUgb2YgdGhlIHdpbmRvdyBkdXJpbmcgW1tQdXRdXSBvcGVyYXRpb24uCiAKK1BBU1MgYXJy
YXkuY29jb2EgPSBjb2NvYVZhbHVlIHRocmV3IGV4Y2VwdGlvbiBTZWN1cml0eUVycm9yOiBCbG9j
a2VkIGEgZnJhbWUgd2l0aCBvcmlnaW4gImh0dHA6Ly8xMjcuMC4wLjE6ODAwMCIgZnJvbSBhY2Nl
c3NpbmcgYSBjcm9zcy1vcmlnaW4gZnJhbWUuIFByb3RvY29scywgZG9tYWlucywgYW5kIHBvcnRz
IG11c3QgbWF0Y2guLgorUEFTUyAnc3RyJy5jb2NvYSA9IGNvY29hVmFsdWUgdGhyZXcgZXhjZXB0
aW9uIFNlY3VyaXR5RXJyb3I6IEJsb2NrZWQgYSBmcmFtZSB3aXRoIG9yaWdpbiAiaHR0cDovLzEy
Ny4wLjAuMTo4MDAwIiBmcm9tIGFjY2Vzc2luZyBhIGNyb3NzLW9yaWdpbiBmcmFtZS4gUHJvdG9j
b2xzLCBkb21haW5zLCBhbmQgcG9ydHMgbXVzdCBtYXRjaC4uCiBQQVNTOiBzdWNjZXNzZnVsbHlQ
YXJzZWQgc2hvdWxkIGJlICd0cnVlJyBhbmQgaXMuCiAKIFRFU1QgQ09NUExFVEUKSW5kZXg6IExh
eW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkvY3Jvc3MtZnJhbWUtYWNjZXNzLW9iamVjdC1n
ZXRQcm90b3R5cGVPZi1pbi1wdXQuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRw
L3Rlc3RzL3NlY3VyaXR5L2Nyb3NzLWZyYW1lLWFjY2Vzcy1vYmplY3QtZ2V0UHJvdG90eXBlT2Yt
aW4tcHV0Lmh0bWwJKHJldmlzaW9uIDI3NjQ5OSkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMv
c2VjdXJpdHkvY3Jvc3MtZnJhbWUtYWNjZXNzLW9iamVjdC1nZXRQcm90b3R5cGVPZi1pbi1wdXQu
aHRtbAkod29ya2luZyBjb3B5KQpAQCAtMTUsNyArMTUsNyBAQAogICAgICAgICBkb1Rlc3QgPSBm
dW5jdGlvbigpCiAgICAgICAgIHsKICAgICAgICAgICAgIHRhcmdldFdpbmRvdyA9IGRvY3VtZW50
LmdldEVsZW1lbnRCeUlkKCJ0YXJnZXQiKS5jb250ZW50V2luZG93OwotICAgICAgICAgICAgdmFy
IGFycmF5ID0gW107CisgICAgICAgICAgICBhcnJheSA9IFtdOwogICAgICAgICAgICAgYXJyYXku
X19wcm90b19fLl9fcHJvdG9fXyA9IHRhcmdldFdpbmRvdzsKICAgICAgICAgICAgIGFycmF5WzBd
ID0gMTEuMTE7CiAgICAgICAgICAgICBhcnJheVsyXSA9IDIyLjIyOwpAQCAtMjQsMTEgKzI0LDE1
IEBACiAgICAgICAgICAgICAgICAgICAgIHRlc3RGYWlsZWQoInRvU3RyaW5nIGlzIGNhbGxlZCBi
eSAxMDEwMTAxMCBzZXR0ZXIiKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Owot
ICAgICAgICAgICAgYXJyYXlbImNvY29hIl0gPSB7CisgICAgICAgICAgICBjb2NvYVZhbHVlID0g
ewogICAgICAgICAgICAgICAgIHRvU3RyaW5nKCkgewogICAgICAgICAgICAgICAgICAgICB0ZXN0
RmFpbGVkKCJ0b1N0cmluZyBpcyBjYWxsZWQgYnkgY29jb2Egc2V0dGVyIik7CiAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIHNob3VsZFRocm93RXJyb3JOYW1l
KCJhcnJheS5jb2NvYSA9IGNvY29hVmFsdWUiLCAiU2VjdXJpdHlFcnJvciIpOworCisgICAgICAg
ICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YoU3RyaW5nLnByb3RvdHlwZSwgdGFyZ2V0V2luZG93
KTsKKyAgICAgICAgICAgIHNob3VsZFRocm93RXJyb3JOYW1lKCInc3RyJy5jb2NvYSA9IGNvY29h
VmFsdWUiLCAiU2VjdXJpdHlFcnJvciIpOwogICAgICAgICAgICAgZmluaXNoSlNUZXN0KCk7CiAg
ICAgICAgIH0KICAgICA8L3NjcmlwdD4KSW5kZXg6IExheW91dFRlc3RzL2ltcG9ydGVkL3czYy9D
aGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL0NoYW5nZUxv
ZwkocmV2aXNpb24gMjc2NDk5KQorKysgTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDIxLTA0LTIzICBBbGV4ZXkgU2h2
YXlrYSAgPHNodmFpa2FsZXNoQGdtYWlsLmNvbT4KKworICAgICAgICBbSlNDXSBPcmRpbmFyeVNl
dCBzaG91bGQgaW52b2tlIGN1c3RvbSBbW1NldF1dIG1ldGhvZHMKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNzkxNgorCisgICAgICAgIFJldmlld2Vk
IGJ5IFl1c3VrZSBTdXp1a2kuCisKKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvV2ViSURM
L2VjbWFzY3JpcHQtYmluZGluZy9pbnRlcmZhY2Utb2JqZWN0LXNldC1yZWNlaXZlci1leHBlY3Rl
ZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9XZWJJREwvZWNtYXNj
cmlwdC1iaW5kaW5nL2ludGVyZmFjZS1vYmplY3Qtc2V0LXJlY2VpdmVyLmh0bWw6IEFkZGVkLgor
ICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9XZWJJREwvZWNtYXNjcmlwdC1iaW5kaW5nL2lu
dGVyZmFjZS1wcm90b3R5cGUtY29uc3RydWN0b3Itc2V0LXJlY2VpdmVyLWV4cGVjdGVkLnR4dDoK
KyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvV2ViSURML2VjbWFzY3JpcHQtYmluZGluZy9p
bnRlcmZhY2UtcHJvdG90eXBlLWNvbnN0cnVjdG9yLXNldC1yZWNlaXZlci5odG1sOgorCiAyMDIx
LTA0LTIzICBDYXRoaWUgQ2hlbiAgPGNhdGhpZWNoZW5AaWdhbGlhLmNvbT4KIAogICAgICAgICBJ
bXBvcnQgdGhlIHVwZGF0ZSB0byAibWFwcGluZyBhdHRyaWJ1dGUgd2lkdGggYW5kIGhlaWdodCB0
byBhc3BlY3QgcmF0aW8iIHRlc3RzIGZyb20gV1BUCkluZGV4OiBMYXlvdXRUZXN0cy9pbXBvcnRl
ZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL1dlYklETC9lY21hc2NyaXB0LWJpbmRpbmcvaW50ZXJm
YWNlLW9iamVjdC1zZXQtcmVjZWl2ZXItZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvV2ViSURML2VjbWFzY3JpcHQt
YmluZGluZy9pbnRlcmZhY2Utb2JqZWN0LXNldC1yZWNlaXZlci1leHBlY3RlZC50eHQJKG5vbmV4
aXN0ZW50KQorKysgTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9X
ZWJJREwvZWNtYXNjcmlwdC1iaW5kaW5nL2ludGVyZmFjZS1vYmplY3Qtc2V0LXJlY2VpdmVyLWV4
cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQgQEAKKworUEFTUyBEaXJlY3Qg
W1tTZXRdXSBwcmVzZXJ2ZXMgW1tFbnVtZXJhYmxlXV06IGZhbHNlIHByb3BlcnR5IGF0dHJpYnV0
ZQorUEFTUyBQcm90b3R5cGUgY2hhaW4gW1tTZXRdXSBjcmVhdGVzIHByb3BlcnR5IG9uIHJlY2Vp
dmVyCisKSW5kZXg6IExheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMv
V2ViSURML2VjbWFzY3JpcHQtYmluZGluZy9pbnRlcmZhY2Utb2JqZWN0LXNldC1yZWNlaXZlci5o
dG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0t
dGVzdHMvV2ViSURML2VjbWFzY3JpcHQtYmluZGluZy9pbnRlcmZhY2Utb2JqZWN0LXNldC1yZWNl
aXZlci5odG1sCShub25leGlzdGVudCkKKysrIExheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWIt
cGxhdGZvcm0tdGVzdHMvV2ViSURML2VjbWFzY3JpcHQtYmluZGluZy9pbnRlcmZhY2Utb2JqZWN0
LXNldC1yZWNlaXZlci5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzcgQEAKKzwhRE9D
VFlQRSBodG1sPgorPG1ldGEgY2hhcnNldD0idXRmLTgiPgorPHRpdGxlPndpbmRvdy5JbnRlcmZh
Y2UgaXMgZGVmaW5lZCBvbiBbW1NldF1dIHJlY2VpdmVyPC90aXRsZT4KKzxsaW5rIHJlbD0iaGVs
cCIgaHJlZj0iaHR0cHM6Ly9oZXljYW0uZ2l0aHViLmlvL3dlYmlkbC8jZGVmaW5lLXRoZS1nbG9i
YWwtcHJvcGVydHktcmVmZXJlbmNlcyI+Cis8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy90ZXN0aGFy
bmVzcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy90ZXN0aGFybmVzc3Jl
cG9ydC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgorInVzZSBzdHJpY3QiOworY29uc3QgdGVzdFZh
bHVlID0gT2JqZWN0LmZyZWV6ZShmdW5jdGlvbigpIHt9KTsKKwordGVzdCgoKSA9PiB7CisgIHdp
bmRvdy5XaW5kb3cgPSB0ZXN0VmFsdWU7CisgIGFzc2VydF9mYWxzZSh3aW5kb3cucHJvcGVydHlJ
c0VudW1lcmFibGUoIldpbmRvdyIpKTsKKworICB3aW5kb3cuSGlzdG9yeSA9IHRlc3RWYWx1ZTsK
KyAgYXNzZXJ0X2ZhbHNlKHdpbmRvdy5wcm9wZXJ0eUlzRW51bWVyYWJsZSgiSGlzdG9yeSIpKTsK
KworICB3aW5kb3cuSFRNTERpdkVsZW1lbnQgPSB0ZXN0VmFsdWU7CisgIGFzc2VydF9mYWxzZSh3
aW5kb3cucHJvcGVydHlJc0VudW1lcmFibGUoIkhUTUxEaXZFbGVtZW50IikpCit9LCAiRGlyZWN0
IFtbU2V0XV0gcHJlc2VydmVzIFtbRW51bWVyYWJsZV1dOiBmYWxzZSBwcm9wZXJ0eSBhdHRyaWJ1
dGUiKTsKKwordGVzdCgoKSA9PiB7CisgIGNvbnN0IGhlaXIgPSBPYmplY3QuY3JlYXRlKHdpbmRv
dyk7CisKKyAgaGVpci5Mb2NhdGlvbiA9IHRlc3RWYWx1ZTsKKyAgYXNzZXJ0X2VxdWFscyhoZWly
LkxvY2F0aW9uLCB0ZXN0VmFsdWUpOworICBhc3NlcnRfbm90X2VxdWFscyh3aW5kb3cuTG9jYXRp
b24sIHRlc3RWYWx1ZSk7CisKKyAgaGVpci5IVE1MRG9jdW1lbnQgPSB0ZXN0VmFsdWU7CisgIGFz
c2VydF9lcXVhbHMoaGVpci5IVE1MRG9jdW1lbnQsIHRlc3RWYWx1ZSk7CisgIGFzc2VydF9ub3Rf
ZXF1YWxzKHdpbmRvdy5IVE1MRG9jdW1lbnQsIHRlc3RWYWx1ZSk7CisKKyAgaGVpci5IVE1MUHJl
RWxlbWVudCA9IHRlc3RWYWx1ZTsKKyAgYXNzZXJ0X2VxdWFscyhoZWlyLkhUTUxQcmVFbGVtZW50
LCB0ZXN0VmFsdWUpOworICBhc3NlcnRfbm90X2VxdWFscyh3aW5kb3cuSFRNTFByZUVsZW1lbnQs
IHRlc3RWYWx1ZSk7Cit9LCAiUHJvdG90eXBlIGNoYWluIFtbU2V0XV0gY3JlYXRlcyBwcm9wZXJ0
eSBvbiByZWNlaXZlciIpOworPC9zY3JpcHQ+CkluZGV4OiBMYXlvdXRUZXN0cy9pbXBvcnRlZC93
M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL1dlYklETC9lY21hc2NyaXB0LWJpbmRpbmcvaW50ZXJmYWNl
LXByb3RvdHlwZS1jb25zdHJ1Y3Rvci1zZXQtcmVjZWl2ZXItZXhwZWN0ZWQudHh0Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvV2ViSURM
L2VjbWFzY3JpcHQtYmluZGluZy9pbnRlcmZhY2UtcHJvdG90eXBlLWNvbnN0cnVjdG9yLXNldC1y
ZWNlaXZlci1leHBlY3RlZC50eHQJKHJldmlzaW9uIDI3NjQ5OSkKKysrIExheW91dFRlc3RzL2lt
cG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvV2ViSURML2VjbWFzY3JpcHQtYmluZGluZy9p
bnRlcmZhY2UtcHJvdG90eXBlLWNvbnN0cnVjdG9yLXNldC1yZWNlaXZlci1leHBlY3RlZC50eHQJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNCArMSw0IEBACiAKLVBBU1MgV2luZG93LCBMb2NhdGlvbiwg
TmF2aWdhdG9yLCBIVE1MRG9jdW1lbnQsIGFuZCBIVE1MSGVhZEVsZW1lbnQKLVBBU1MgQWxsIHdp
bmRvdy4qIGNvbnN0cnVjdG9ycworUEFTUyBEaXJlY3QgW1tTZXRdXSBwcmVzZXJ2ZXMgW1tFbnVt
ZXJhYmxlXV06IGZhbHNlIHByb3BlcnR5IGF0dHJpYnV0ZQorUEFTUyBQcm90b3R5cGUgY2hhaW4g
W1tTZXRdXSBjcmVhdGVzIHByb3BlcnR5IG9uIHJlY2VpdmVyCiAKSW5kZXg6IExheW91dFRlc3Rz
L2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvV2ViSURML2VjbWFzY3JpcHQtYmluZGlu
Zy9pbnRlcmZhY2UtcHJvdG90eXBlLWNvbnN0cnVjdG9yLXNldC1yZWNlaXZlci5odG1sCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvV2Vi
SURML2VjbWFzY3JpcHQtYmluZGluZy9pbnRlcmZhY2UtcHJvdG90eXBlLWNvbnN0cnVjdG9yLXNl
dC1yZWNlaXZlci5odG1sCShyZXZpc2lvbiAyNzY0OTkpCisrKyBMYXlvdXRUZXN0cy9pbXBvcnRl
ZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL1dlYklETC9lY21hc2NyaXB0LWJpbmRpbmcvaW50ZXJm
YWNlLXByb3RvdHlwZS1jb25zdHJ1Y3Rvci1zZXQtcmVjZWl2ZXIuaHRtbAkod29ya2luZyBjb3B5
KQpAQCAtNiw0MiArNiwzMSBAQAogPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvdGVzdGhhcm5lc3Ny
ZXBvcnQuanMiPjwvc2NyaXB0PgogPHNjcmlwdD4KICJ1c2Ugc3RyaWN0IjsKK2NvbnN0IHRlc3RW
YWx1ZSA9IE9iamVjdC5mcmVlemUoZnVuY3Rpb24oKSB7fSk7CiAKIHRlc3QoKCkgPT4gewotICB3
aW5kb3cuY29uc3RydWN0b3IgPSBudWxsOwotICBhc3NlcnRfZXF1YWxzKFdpbmRvdy5wcm90b3R5
cGUuY29uc3RydWN0b3IsIFdpbmRvdyk7Ci0KLSAgbG9jYXRpb24uY29uc3RydWN0b3IgPSBmYWxz
ZTsKLSAgYXNzZXJ0X2VxdWFscyhMb2NhdGlvbi5wcm90b3R5cGUuY29uc3RydWN0b3IsIExvY2F0
aW9uKTsKLQotICBuYXZpZ2F0b3IuY29uc3RydWN0b3IgPSAxOwotICBhc3NlcnRfZXF1YWxzKE5h
dmlnYXRvci5wcm90b3R5cGUuY29uc3RydWN0b3IsIE5hdmlnYXRvcik7CisgIExvY2F0aW9uLnBy
b3RvdHlwZS5jb25zdHJ1Y3RvciA9IHRlc3RWYWx1ZTsKKyAgYXNzZXJ0X2ZhbHNlKExvY2F0aW9u
LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZSgiY29uc3RydWN0b3IiKSk7CiAKLSAgZG9j
dW1lbnQuY29uc3RydWN0b3IgPSB7fTsKLSAgYXNzZXJ0X2VxdWFscyhIVE1MRG9jdW1lbnQucHJv
dG90eXBlLmNvbnN0cnVjdG9yLCBIVE1MRG9jdW1lbnQpOworICBIVE1MRG9jdW1lbnQucHJvdG90
eXBlLmNvbnN0cnVjdG9yID0gdGVzdFZhbHVlOworICBhc3NlcnRfZmFsc2UoSFRNTERvY3VtZW50
LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZSgiY29uc3RydWN0b3IiKSk7CiAKLSAgZG9j
dW1lbnQuaGVhZC5jb25zdHJ1Y3RvciA9IFtdOwotICBhc3NlcnRfZXF1YWxzKEhUTUxIZWFkRWxl
bWVudC5wcm90b3R5cGUuY29uc3RydWN0b3IsIEhUTUxIZWFkRWxlbWVudCk7Ci19LCAiV2luZG93
LCBMb2NhdGlvbiwgTmF2aWdhdG9yLCBIVE1MRG9jdW1lbnQsIGFuZCBIVE1MSGVhZEVsZW1lbnQi
KTsKKyAgSFRNTERpdkVsZW1lbnQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gdGVzdFZhbHVlOwor
ICBhc3NlcnRfZmFsc2UoSFRNTERpdkVsZW1lbnQucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJh
YmxlKCJjb25zdHJ1Y3RvciIpKTsKK30sICJEaXJlY3QgW1tTZXRdXSBwcmVzZXJ2ZXMgW1tFbnVt
ZXJhYmxlXV06IGZhbHNlIHByb3BlcnR5IGF0dHJpYnV0ZSIpOwogCiB0ZXN0KCgpID0+IHsKLSAg
Zm9yIChsZXQga2V5IG9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHdpbmRvdykpIHsKLSAg
ICBpZiAoIS9eW0EtWl0vLnRlc3Qoa2V5KSkgY29udGludWU7CisgIHdpbmRvdy5jb25zdHJ1Y3Rv
ciA9IHRlc3RWYWx1ZTsKKyAgYXNzZXJ0X2VxdWFscyh3aW5kb3cuY29uc3RydWN0b3IsIHRlc3RW
YWx1ZSk7CisgIGFzc2VydF9lcXVhbHMoV2luZG93LnByb3RvdHlwZS5jb25zdHJ1Y3RvciwgV2lu
ZG93KTsKKworICBuYXZpZ2F0b3IuY29uc3RydWN0b3IgPSB0ZXN0VmFsdWU7CisgIGFzc2VydF9l
cXVhbHMobmF2aWdhdG9yLmNvbnN0cnVjdG9yLCB0ZXN0VmFsdWUpOworICBhc3NlcnRfZXF1YWxz
KE5hdmlnYXRvci5wcm90b3R5cGUuY29uc3RydWN0b3IsIE5hdmlnYXRvcik7CiAKLSAgICBsZXQg
ZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iod2luZG93LCBrZXkpOwotICAg
IGlmICghZGVzYyB8fCBkZXNjLmVudW1lcmFibGUpIGNvbnRpbnVlOwotICAgIGxldCB7dmFsdWV9
ID0gZGVzYzsKLSAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAiZnVuY3Rpb24iKSBjb250aW51ZTsK
LSAgICBsZXQge3Byb3RvdHlwZX0gPSB2YWx1ZTsKLSAgICBpZiAoIXByb3RvdHlwZSkgY29udGlu
dWU7Ci0KLSAgICBsZXQgaGVpciA9IE9iamVjdC5jcmVhdGUocHJvdG90eXBlKTsKLSAgICBsZXQg
bmV3Q29uc3RydWN0b3IgPSBmdW5jdGlvbigpIHt9OwotICAgIGhlaXIuY29uc3RydWN0b3IgPSBu
ZXdDb25zdHJ1Y3RvcjsKLQotICAgIGFzc2VydF9ub3RfZXF1YWxzKHByb3RvdHlwZS5jb25zdHJ1
Y3RvciwgbmV3Q29uc3RydWN0b3IsIGtleSk7Ci0gICAgYXNzZXJ0X293bl9wcm9wZXJ0eShoZWly
LCAiY29uc3RydWN0b3IiLCBrZXkpOwotICAgIGFzc2VydF9lcXVhbHMoaGVpci5jb25zdHJ1Y3Rv
ciwgbmV3Q29uc3RydWN0b3IsIGtleSk7Ci0gIH0KLX0sICJBbGwgd2luZG93LiogY29uc3RydWN0
b3JzIik7CisgIGNvbnN0IHNwYW4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7Cisg
IHNwYW4uY29uc3RydWN0b3IgPSB0ZXN0VmFsdWU7CisgIGFzc2VydF9lcXVhbHMoc3Bhbi5jb25z
dHJ1Y3RvciwgdGVzdFZhbHVlKTsKKyAgYXNzZXJ0X2VxdWFscyhIVE1MU3BhbkVsZW1lbnQucHJv
dG90eXBlLmNvbnN0cnVjdG9yLCBIVE1MU3BhbkVsZW1lbnQpOworfSwgIlByb3RvdHlwZSBjaGFp
biBbW1NldF1dIGNyZWF0ZXMgcHJvcGVydHkgb24gcmVjZWl2ZXIiKTsKIDwvc2NyaXB0PgpJbmRl
eDogTGF5b3V0VGVzdHMvanMvZG9tL3JlZmxlY3Qtc2V0LW9udG8tZG9tLWV4cGVjdGVkLnR4dAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9kb20vcmVmbGVjdC1zZXQtb250by1kb20tZXhw
ZWN0ZWQudHh0CShyZXZpc2lvbiAyNzY0OTkpCisrKyBMYXlvdXRUZXN0cy9qcy9kb20vcmVmbGVj
dC1zZXQtb250by1kb20tZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC05MywxMyArOTMs
MTMgQEAgUEFTUyBSZWZsZWN0LmdldChkb2N1bWVudC5ib2R5LmRhdGFzZXQsIAogUEFTUyBSZWZs
ZWN0LnNldChkb2N1bWVudC5ib2R5LmRhdGFzZXQsICJjb2NvYS1jYXBwdWNjaW5vIiwgInN3ZWV0
IikgdGhyZXcgZXhjZXB0aW9uIFN5bnRheEVycm9yOiBUaGUgc3RyaW5nIGRpZCBub3QgbWF0Y2gg
dGhlIGV4cGVjdGVkIHBhdHRlcm4uLgogUEFTUyBSZWZsZWN0LnNldChkb2N1bWVudC5ib2R5LmRh
dGFzZXQsIDAsICJzd2VldCIpIGlzIHRydWUKIFBBU1MgUmVmbGVjdC5nZXQoZG9jdW1lbnQuYm9k
eS5kYXRhc2V0LCAwKSBpcyAic3dlZXQiCi1ET01TdHJpbmdNYXAgaWdub3JlcyB0aGUgcmVjZWl2
ZXIuIFRoZXNlIHB1dERlbGVnYXRlIG9ubHkgd29yayB3aXRoIDo6cHV0IChub3QgOjpkZWZpbmVP
d25Qcm9wZXJ0eSkuIFNvIHRoZXkgYmVoYXZlIGFzIHRoZSBzcGVjaWFsIHNldHRlciwgd2Ugc2hv
dWxkIG5vdCBmYWxsYmFjayB0byB0aGUgT3JkaW5hcnlTZXQuCitET01TdHJpbmdNYXAgZmFsbHMg
YmFjayB0byBPcmRpbmFyeVNldCBpZiByZWNlaXZlciBpcyBhbHRlcmVkLgogUEFTUyBSZWZsZWN0
LnNldChkb2N1bWVudC5ib2R5LmRhdGFzZXQsICJjb2NvYSIsICJvayIsIHJlY2VpdmVyKSBpcyB0
cnVlCi1QQVNTIFJlZmxlY3QuZ2V0KGRvY3VtZW50LmJvZHkuZGF0YXNldCwgImNvY29hIikgaXMg
Im9rIgotUEFTUyBSZWZsZWN0LmdldChyZWNlaXZlciwgImNvY29hIikgaXMgdW5kZWZpbmVkCitQ
QVNTIFJlZmxlY3QuZ2V0KGRvY3VtZW50LmJvZHkuZGF0YXNldCwgImNvY29hIikgaXMgInN3ZWV0
IgorUEFTUyBSZWZsZWN0LmdldChyZWNlaXZlciwgImNvY29hIikgaXMgIm9rIgogUEFTUyBSZWZs
ZWN0LnNldChkb2N1bWVudC5ib2R5LmRhdGFzZXQsIDAsICJvayIsIHJlY2VpdmVyKSBpcyB0cnVl
Ci1QQVNTIFJlZmxlY3QuZ2V0KGRvY3VtZW50LmJvZHkuZGF0YXNldCwgMCkgaXMgIm9rIgotUEFT
UyBSZWZsZWN0LmdldChyZWNlaXZlciwgMCkgaXMgdW5kZWZpbmVkCitQQVNTIFJlZmxlY3QuZ2V0
KGRvY3VtZW50LmJvZHkuZGF0YXNldCwgMCkgaXMgInN3ZWV0IgorUEFTUyBSZWZsZWN0LmdldChy
ZWNlaXZlciwgMCkgaXMgIm9rIgogQ3VzdG9tSW5kZXhlZFNldHRlcgogUEFTUyBSZWZsZWN0Lmdl
dChzZWxlY3QsIDApLnZhbHVlIGlzICJjb2NvYSIKIFBBU1MgUmVmbGVjdC5nZXQoc2VsZWN0LCAi
bGVuZ3RoIikgaXMgMwpAQCAtMTExLDEwICsxMTEsMTAgQEAgUEFTUyBSZWZsZWN0LmdldChzZWxl
Y3QsICJsZW5ndGgiKSBpcyA0MgogUEFTUyBSZWZsZWN0LnNldChzZWxlY3QsIDQ0LCBvcHRpb24y
KSBpcyB0cnVlCiBQQVNTIFJlZmxlY3QuZ2V0KHNlbGVjdCwgNDQpLnZhbHVlIGlzICJraWxpbWFu
amFybyIKIFBBU1MgUmVmbGVjdC5zZXQoc2VsZWN0LCAyMCwgIktpbGltYW5qYXJvIikgdGhyZXcg
ZXhjZXB0aW9uIFR5cGVFcnJvcjogVHlwZSBlcnJvci4KLUN1c3RvbUluZGV4ZWRTZXR0ZXIgaWdu
b3JlcyB0aGUgcmVjZWl2ZXIuIFRoZXNlIG1ldGhvZHMgb25seSB3b3JrIHdpdGggOjpwdXQgKG5v
dCA6OmRlZmluZU93blByb3BlcnR5KS4gU28gdGhleSBiZWhhdmUgYXMgdGhlIHNwZWNpYWwgc2V0
dGVyLCB3ZSBzaG91bGQgbm90IGZhbGxiYWNrIHRvIHRoZSBPcmRpbmFyeVNldC4KK0N1c3RvbUlu
ZGV4ZWRTZXR0ZXIgZmFsbHMgYmFjayB0byBPcmRpbmFyeVNldCBpZiByZWNlaXZlciBpcyBhbHRl
cmVkLgogUEFTUyBSZWZsZWN0LnNldChzZWxlY3QsIDAsIG9wdGlvbjMsIHJlY2VpdmVyKSBpcyB0
cnVlCi1QQVNTIFJlZmxlY3QuZ2V0KHJlY2VpdmVyLCAwKSBpcyB1bmRlZmluZWQKLVBBU1MgUmVm
bGVjdC5nZXQoc2VsZWN0LCAwKSBpcyBvcHRpb24zCitQQVNTIFJlZmxlY3QuZ2V0KHJlY2VpdmVy
LCAwKSBpcyBvcHRpb24zCitQQVNTIFJlZmxlY3QuZ2V0KHNlbGVjdCwgMCkgaXMgc2VsZWN0LmNo
aWxkcmVuWzBdCiBQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCiAKIFRFU1QgQ09NUExF
VEUKSW5kZXg6IExheW91dFRlc3RzL2pzL2RvbS9zY3JpcHQtdGVzdHMvcmVmbGVjdC1zZXQtb250
by1kb20uanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvZG9tL3NjcmlwdC10ZXN0cy9y
ZWZsZWN0LXNldC1vbnRvLWRvbS5qcwkocmV2aXNpb24gMjc2NDk5KQorKysgTGF5b3V0VGVzdHMv
anMvZG9tL3NjcmlwdC10ZXN0cy9yZWZsZWN0LXNldC1vbnRvLWRvbS5qcwkod29ya2luZyBjb3B5
KQpAQCAtMTE2LDE1ICsxMTYsMTUgQEAgc2hvdWxkVGhyb3coYFJlZmxlY3Quc2V0KGRvY3VtZW50
LmJvZHkuZAogc2hvdWxkQmUoYFJlZmxlY3Quc2V0KGRvY3VtZW50LmJvZHkuZGF0YXNldCwgMCwg
InN3ZWV0IilgLCBgdHJ1ZWApOwogc2hvdWxkQmUoYFJlZmxlY3QuZ2V0KGRvY3VtZW50LmJvZHku
ZGF0YXNldCwgMClgLCBgInN3ZWV0ImApOwogCi1kZWJ1ZygiRE9NU3RyaW5nTWFwIGlnbm9yZXMg
dGhlIHJlY2VpdmVyLiBUaGVzZSBwdXREZWxlZ2F0ZSBvbmx5IHdvcmsgd2l0aCA6OnB1dCAobm90
IDo6ZGVmaW5lT3duUHJvcGVydHkpLiBTbyB0aGV5IGJlaGF2ZSBhcyB0aGUgc3BlY2lhbCBzZXR0
ZXIsIHdlIHNob3VsZCBub3QgZmFsbGJhY2sgdG8gdGhlIE9yZGluYXJ5U2V0LiIpOworZGVidWco
IkRPTVN0cmluZ01hcCBmYWxscyBiYWNrIHRvIE9yZGluYXJ5U2V0IGlmIHJlY2VpdmVyIGlzIGFs
dGVyZWQuIik7CiB2YXIgcmVjZWl2ZXIgPSB7fTsKIHNob3VsZEJlKGBSZWZsZWN0LnNldChkb2N1
bWVudC5ib2R5LmRhdGFzZXQsICJjb2NvYSIsICJvayIsIHJlY2VpdmVyKWAsIGB0cnVlYCk7Ci1z
aG91bGRCZShgUmVmbGVjdC5nZXQoZG9jdW1lbnQuYm9keS5kYXRhc2V0LCAiY29jb2EiKWAsIGAi
b2siYCk7Ci1zaG91bGRCZShgUmVmbGVjdC5nZXQocmVjZWl2ZXIsICJjb2NvYSIpYCwgYHVuZGVm
aW5lZGApOworc2hvdWxkQmUoYFJlZmxlY3QuZ2V0KGRvY3VtZW50LmJvZHkuZGF0YXNldCwgImNv
Y29hIilgLCBgInN3ZWV0ImApOworc2hvdWxkQmUoYFJlZmxlY3QuZ2V0KHJlY2VpdmVyLCAiY29j
b2EiKWAsIGAib2siYCk7CiB2YXIgcmVjZWl2ZXIgPSB7fTsKIHNob3VsZEJlKGBSZWZsZWN0LnNl
dChkb2N1bWVudC5ib2R5LmRhdGFzZXQsIDAsICJvayIsIHJlY2VpdmVyKWAsIGB0cnVlYCk7Ci1z
aG91bGRCZShgUmVmbGVjdC5nZXQoZG9jdW1lbnQuYm9keS5kYXRhc2V0LCAwKWAsIGAib2siYCk7
Ci1zaG91bGRCZShgUmVmbGVjdC5nZXQocmVjZWl2ZXIsIDApYCwgYHVuZGVmaW5lZGApOworc2hv
dWxkQmUoYFJlZmxlY3QuZ2V0KGRvY3VtZW50LmJvZHkuZGF0YXNldCwgMClgLCBgInN3ZWV0ImAp
Oworc2hvdWxkQmUoYFJlZmxlY3QuZ2V0KHJlY2VpdmVyLCAwKWAsIGAib2siYCk7CiAKIGRlYnVn
KCJDdXN0b21JbmRleGVkU2V0dGVyIik7CiB2YXIgc2VsZWN0ID0gZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoInRlc3RTZWxlY3QiKTsKQEAgLTE0NiwxMSArMTQ2LDExIEBAIHNob3VsZEJlKGBSZWZs
ZWN0LnNldChzZWxlY3QsIDQ0LCBvcHRpb24KIHNob3VsZEJlKGBSZWZsZWN0LmdldChzZWxlY3Qs
IDQ0KS52YWx1ZWAsIGAia2lsaW1hbmphcm8iYCk7CiBzaG91bGRUaHJvdyhgUmVmbGVjdC5zZXQo
c2VsZWN0LCAyMCwgIktpbGltYW5qYXJvIilgKTsKIAotZGVidWcoIkN1c3RvbUluZGV4ZWRTZXR0
ZXIgaWdub3JlcyB0aGUgcmVjZWl2ZXIuIFRoZXNlIG1ldGhvZHMgb25seSB3b3JrIHdpdGggOjpw
dXQgKG5vdCA6OmRlZmluZU93blByb3BlcnR5KS4gU28gdGhleSBiZWhhdmUgYXMgdGhlIHNwZWNp
YWwgc2V0dGVyLCB3ZSBzaG91bGQgbm90IGZhbGxiYWNrIHRvIHRoZSBPcmRpbmFyeVNldC4iKTsK
K2RlYnVnKCJDdXN0b21JbmRleGVkU2V0dGVyIGZhbGxzIGJhY2sgdG8gT3JkaW5hcnlTZXQgaWYg
cmVjZWl2ZXIgaXMgYWx0ZXJlZC4iKTsKIHZhciBvcHRpb24zID0gZG9jdW1lbnQuY3JlYXRlRWxl
bWVudCgib3B0aW9uIik7CiBvcHRpb24zLnZhbHVlID0gInJhYmJpdCI7CiBvcHRpb24zLnRleHRD
b250ZW50ID0gIlJhYmJpdCI7CiB2YXIgcmVjZWl2ZXIgPSB7fTsKIHNob3VsZEJlKGBSZWZsZWN0
LnNldChzZWxlY3QsIDAsIG9wdGlvbjMsIHJlY2VpdmVyKWAsIGB0cnVlYCk7Ci1zaG91bGRCZShg
UmVmbGVjdC5nZXQocmVjZWl2ZXIsIDApYCwgYHVuZGVmaW5lZGApOwotc2hvdWxkQmUoYFJlZmxl
Y3QuZ2V0KHNlbGVjdCwgMClgLCBgb3B0aW9uM2ApOworc2hvdWxkQmUoYFJlZmxlY3QuZ2V0KHJl
Y2VpdmVyLCAwKWAsIGBvcHRpb24zYCk7CitzaG91bGRCZShgUmVmbGVjdC5nZXQoc2VsZWN0LCAw
KWAsIGBzZWxlY3QuY2hpbGRyZW5bMF1gKTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>427034</attachid>
            <date>2021-04-26 04:05:42 -0700</date>
            <delta_ts>2021-04-26 07:47:41 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-217916-20210426140540.patch</filename>
            <type>text/plain</type>
            <size>182824</size>
            <attacher name="Alexey Shvayka">ashvayka</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyNzY1ODUpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDI1IEBACisyMDIxLTA0LTI2ICBBbGV4ZXkgU2h2YXlrYSAgPHNodmFpa2FsZXNo
QGdtYWlsLmNvbT4KKworICAgICAgICBbSlNDXSBPcmRpbmFyeVNldCBzaG91bGQgaW52b2tlIGN1
c3RvbSBbW1NldF1dIG1ldGhvZHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIxNzkxNgorCisgICAgICAgIFJldmlld2VkIGJ5IFl1c3VrZSBTdXp1a2ku
CisKKyAgICAgICAgKiBtaWNyb2JlbmNobWFya3MvcHV0LXNsb3ctbm8tY2FjaGUtYXJyYXkuanM6
IEFkZGVkLgorICAgICAgICAqIG1pY3JvYmVuY2htYXJrcy9wdXQtc2xvdy1uby1jYWNoZS1mdW5j
dGlvbi5qczogQWRkZWQuCisgICAgICAgICogbWljcm9iZW5jaG1hcmtzL3B1dC1zbG93LW5vLWNh
Y2hlLWpzLXByb3h5LmpzOiBBZGRlZC4KKyAgICAgICAgKiBtaWNyb2JlbmNobWFya3MvcHV0LXNs
b3ctbm8tY2FjaGUtbG9uZy1wcm90b3R5cGUtY2hhaW4uanM6IEFkZGVkLgorICAgICAgICAqIG1p
Y3JvYmVuY2htYXJrcy9wdXQtc2xvdy1uby1jYWNoZS5qczogQWRkZWQuCisgICAgICAgICogbWlj
cm9iZW5jaG1hcmtzL3JlZmxlY3Qtc2V0LXdpdGgtcmVjZWl2ZXIuanM6IEFkZGVkLgorICAgICAg
ICAqIHN0cmVzcy9jdXN0b20tZ2V0LXNldC1wcm90by1jaGFpbi1wdXQuanM6CisgICAgICAgICog
c3RyZXNzL21vZHVsZS1uYW1lc3BhY2UtYWNjZXNzLXNldC1mYWlscy5qczogQWRkZWQuCisgICAg
ICAgICogc3RyZXNzL3B1dC1ub24tcmVpZmllZC1zdGF0aWMtYWNjZXNzb3Itb3ItY3VzdG9tLmpz
OiBBZGRlZC4KKyAgICAgICAgKiBzdHJlc3MvcHV0LW5vbi1yZWlmaWVkLXN0YXRpYy1mdW5jdGlv
bi1vci1jdXN0b20uanM6IEFkZGVkLgorICAgICAgICAqIHN0cmVzcy9wdXQtdG8tcHJpbWl0aXZl
LW5vbi1yZWlmaWVkLXN0YXRpYy1jdXN0b20uanM6IEFkZGVkLgorICAgICAgICAqIHN0cmVzcy9w
dXQtdG8tcHJpbWl0aXZlLmpzOiBBZGRlZC4KKyAgICAgICAgKiBzdHJlc3MvcHV0LXRvLXByb3Rv
LWNoYWluLW92ZXJyaWRlcy1wdXQuanM6IEFkZGVkLgorICAgICAgICAqIHN0cmVzcy90eXBlZC1h
cnJheS1jYW5vbmljYWwtbnVtZXJpYy1pbmRleC1zdHJpbmctc2V0LmpzOiBBZGRlZC4KKwogMjAy
MS0wNC0yMiAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29tPgogCiAgICAgICAgIFtK
U0NdIEJhc2VsaW5lIHNob3VsZCBoYXZlIGZhc3QgcGF0aCBmb3Igc3dpdGNoX2ltbQpJbmRleDog
SlNUZXN0cy9taWNyb2JlbmNobWFya3MvcHV0LXNsb3ctbm8tY2FjaGUtYXJyYXkuanMKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gSlNUZXN0cy9taWNyb2JlbmNobWFya3MvcHV0LXNsb3ctbm8tY2FjaGUtYXJyYXku
anMJKG5vbmV4aXN0ZW50KQorKysgSlNUZXN0cy9taWNyb2JlbmNobWFya3MvcHV0LXNsb3ctbm8t
Y2FjaGUtYXJyYXkuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2IEBACisoZnVuY3Rpb24o
KSB7CisgICAgdmFyIGFycmF5ID0gW107CisKKyAgICBmb3IgKHZhciBqID0gMDsgaiA8IDFlNTsg
aisrKQorICAgICAgICBhcnJheVsiZm9vIiArIGpdID0gajsKK30pKCk7CkluZGV4OiBKU1Rlc3Rz
L21pY3JvYmVuY2htYXJrcy9wdXQtc2xvdy1uby1jYWNoZS1mdW5jdGlvbi5qcwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBKU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9wdXQtc2xvdy1uby1jYWNoZS1mdW5jdGlvbi5q
cwkobm9uZXhpc3RlbnQpCisrKyBKU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9wdXQtc2xvdy1uby1j
YWNoZS1mdW5jdGlvbi5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDggQEAKKyhmdW5jdGlv
bigpIHsKKyAgICBjbGFzcyBBIHt9CisgICAgY2xhc3MgQiBleHRlbmRzIEEge30KKyAgICBjbGFz
cyBDIGV4dGVuZHMgQiB7fQorCisgICAgZm9yICh2YXIgaiA9IDA7IGogPCAxZTU7IGorKykKKyAg
ICAgICAgQ1siZm9vIiArIGpdID0gajsKK30pKCk7CkluZGV4OiBKU1Rlc3RzL21pY3JvYmVuY2ht
YXJrcy9wdXQtc2xvdy1uby1jYWNoZS1qcy1wcm94eS5qcwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3Rz
L21pY3JvYmVuY2htYXJrcy9wdXQtc2xvdy1uby1jYWNoZS1qcy1wcm94eS5qcwkobm9uZXhpc3Rl
bnQpCisrKyBKU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9wdXQtc2xvdy1uby1jYWNoZS1qcy1wcm94
eS5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYgQEAKKyhmdW5jdGlvbigpIHsKKyAgICB2
YXIgcHJveHkgPSAkdm0uY3JlYXRlUHJveHkoeyBzZXQgZm9vKF92KSB7fSB9KTsKKworICAgIGZv
ciAodmFyIGogPSAwOyBqIDwgMWU1OyBqKyspCisgICAgICAgIHByb3h5WyJmb28iICsgal0gPSBq
OworfSkoKTsKSW5kZXg6IEpTVGVzdHMvbWljcm9iZW5jaG1hcmtzL3B1dC1zbG93LW5vLWNhY2hl
LWxvbmctcHJvdG90eXBlLWNoYWluLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvbWljcm9iZW5j
aG1hcmtzL3B1dC1zbG93LW5vLWNhY2hlLWxvbmctcHJvdG90eXBlLWNoYWluLmpzCShub25leGlz
dGVudCkKKysrIEpTVGVzdHMvbWljcm9iZW5jaG1hcmtzL3B1dC1zbG93LW5vLWNhY2hlLWxvbmct
cHJvdG90eXBlLWNoYWluLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOCBAQAorKGZ1bmN0
aW9uKCkgeworICAgIHZhciBiYXNlID0geyBzZXQgZm9vKF92KSB7fSB9OworICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgMWUzOyBpKyspCisgICAgICAgIGJhc2UgPSBPYmplY3QuY3JlYXRlKGJhc2Up
OworCisgICAgZm9yICh2YXIgaiA9IDA7IGogPCAzZTM7IGorKykKKyAgICAgICAgYmFzZVsiZm9v
IiArIGpdID0gajsKK30pKCk7CkluZGV4OiBKU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9wdXQtc2xv
dy1uby1jYWNoZS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9wdXQt
c2xvdy1uby1jYWNoZS5qcwkobm9uZXhpc3RlbnQpCisrKyBKU1Rlc3RzL21pY3JvYmVuY2htYXJr
cy9wdXQtc2xvdy1uby1jYWNoZS5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYgQEAKKyhm
dW5jdGlvbigpIHsKKyAgICB2YXIgYmFzZSA9IHsgc2V0IGZvbyhfdikge30gfTsKKworICAgIGZv
ciAodmFyIGogPSAwOyBqIDwgMWU1OyBqKyspCisgICAgICAgIGJhc2VbImZvbyIgKyBqXSA9IGo7
Cit9KSgpOwpJbmRleDogSlNUZXN0cy9taWNyb2JlbmNobWFya3MvcmVmbGVjdC1zZXQtd2l0aC1y
ZWNlaXZlci5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9yZWZsZWN0
LXNldC13aXRoLXJlY2VpdmVyLmpzCShub25leGlzdGVudCkKKysrIEpTVGVzdHMvbWljcm9iZW5j
aG1hcmtzL3JlZmxlY3Qtc2V0LXdpdGgtcmVjZWl2ZXIuanMJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw2IEBACisoZnVuY3Rpb24oKSB7CisgICAgdmFyIHRhcmdldCA9IG5ldyAoY2xhc3Mge30p
OworCisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxZTY7IGkrKykKKyAgICAgICAgUmVmbGVjdC5z
ZXQodGFyZ2V0LCAiZm9vIiwgMSwge30pOworfSkoKTsKSW5kZXg6IEpTVGVzdHMvc3RyZXNzL2N1
c3RvbS1nZXQtc2V0LXByb3RvLWNoYWluLXB1dC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0
cmVzcy9jdXN0b20tZ2V0LXNldC1wcm90by1jaGFpbi1wdXQuanMJKHJldmlzaW9uIDI3NjU4NSkK
KysrIEpTVGVzdHMvc3RyZXNzL2N1c3RvbS1nZXQtc2V0LXByb3RvLWNoYWluLXB1dC5qcwkod29y
a2luZyBjb3B5KQpAQCAtMzcsOCArMzcsOCBAQCBmdW5jdGlvbiBnZXRPYmplY3RzKCkgewogICAg
ICAgICAuLi5wcmltaXRpdmVzLm1hcChPYmplY3QpLAogICAgICAgICBPYmplY3QuY3JlYXRlKGN1
c3RvbVRlc3RHZXR0ZXJTZXR0ZXIpLAogICAgICAgICBPYmplY3QuY3JlYXRlKE9iamVjdC5jcmVh
dGUoY3VzdG9tVGVzdEdldHRlclNldHRlcikpLAotICAgICAgICAvLyBGSVhNRTogb3JkaW5hcnlT
ZXRTbG93KCkgc2hvdWxkIGhhbmRsZSBDdXN0b217QWNjZXNzb3IsVmFsdWV9IGRlc2NyaXB0b3Jz
LgotICAgICAgICAvLyBuZXcgUHJveHkoY3VzdG9tVGVzdEdldHRlclNldHRlciwge30pLAorICAg
ICAgICBPYmplY3QuY3JlYXRlKG5ldyBQcm94eShjdXN0b21UZXN0R2V0dGVyU2V0dGVyLCB7fSkp
LAorICAgICAgICBPYmplY3QuY3JlYXRlKCR2bS5jcmVhdGVQcm94eShjdXN0b21UZXN0R2V0dGVy
U2V0dGVyKSksCiAgICAgXTsKIH0KIApAQCAtODUsMTMgKzg1LDEzIEBAIGZ1bmN0aW9uIGdldEJh
c2VzKCkgewogfSkoKTsKIAogLy8gQ3VzdG9tVmFsdWU6IHNldHRlciByZXR1cm5zIHxmYWxzZXwK
Ky8vIEZJWE1FOiBPbmNlIGxlZ2FjeSBSZWdFeHAgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkLCB0
aGVyZSB3b3VsZCBiZSBubyB1c2UgY2FzZSBmb3IgY2FsbGluZyBDdXN0b21WYWx1ZSBzZXR0ZXIg
aWYgcmVjZWl2ZXIgaXMgYWx0ZXJlZC4KICgoKSA9PiB7CiAgICAgZm9yIChsZXQgYmFzZSBvZiBn
ZXRCYXNlcygpKSB7CiAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTAwOyArK2kpCiAgICAg
ICAgICAgICBiYXNlLmN1c3RvbVZhbHVlID0gMTsKLSAgICAgICAgLy8gVGhpcyBpcyB3ZWlyZCwg
YnV0IGl0IGlzbid0IGV4cG9zZWQgdG8gdXNlcmxhbmQgY29kZToKICAgICAgICAgYXNzZXJ0KCFi
YXNlLmhhc093blByb3BlcnR5KCJjdXN0b21WYWx1ZSIpKTsKLSAgICAgICAgYXNzZXJ0KCFSZWZs
ZWN0LnNldChPYmplY3QoYmFzZSksICJjdXN0b21WYWx1ZSIsIDEpKTsKKyAgICAgICAgYXNzZXJ0
KFJlZmxlY3Quc2V0KE9iamVjdChiYXNlKSwgImN1c3RvbVZhbHVlIiwgMSkpOwogICAgIH0KIH0p
KCk7CiAKSW5kZXg6IEpTVGVzdHMvc3RyZXNzL21vZHVsZS1uYW1lc3BhY2UtYWNjZXNzLXNldC1m
YWlscy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0cmVzcy9tb2R1bGUtbmFtZXNwYWNlLWFj
Y2Vzcy1zZXQtZmFpbHMuanMJKG5vbmV4aXN0ZW50KQorKysgSlNUZXN0cy9zdHJlc3MvbW9kdWxl
LW5hbWVzcGFjZS1hY2Nlc3Mtc2V0LWZhaWxzLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
OTAgQEAKK2NvbnN0IGV4aXN0aW5nS2V5cyA9IFsiY29jb2EiLCAidGVzdCIsIFN5bWJvbC50b1N0
cmluZ1RhZ107Citjb25zdCBub25FeGlzdGluZ0tleXMgPSBbImZvbyIsIFN5bWJvbCgiZm9vIild
OworY29uc3QgYWxsS2V5cyA9IFsuLi5leGlzdGluZ0tleXMsIC4uLm5vbkV4aXN0aW5nS2V5c107
Citjb25zdCB0ZXN0VmFsdWUgPSBPYmplY3QuZnJlZXplKHt9KTsKKworZnVuY3Rpb24gYXNzZXJ0
KHgsIGtleSkgeworICAgIGlmICgheCkKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBCYWQgYXNz
ZXJ0aW9uISBLZXk6ICR7U3RyaW5nKGtleSl9YCk7Cit9CisKK2Z1bmN0aW9uIHNob3VsZFRocm93
KGZ1bmMsIGVycm9yTWVzc2FnZSkgeworICAgIGxldCBlcnJvclRocm93biA9IGZhbHNlOworICAg
IHRyeSB7CisgICAgICAgIGZ1bmMoKTsKKyAgICB9IGNhdGNoIChlcnJvcikgeworICAgICAgICBl
cnJvclRocm93biA9IHRydWU7CisgICAgICAgIGlmIChTdHJpbmcoZXJyb3IpICE9PSBlcnJvck1l
c3NhZ2UpCisgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEJhZCBlcnJvcjogJHtlcnJvcn1g
KTsKKyAgICB9CisgICAgaWYgKCFlcnJvclRocm93bikKKyAgICAgICAgdGhyb3cgbmV3IEVycm9y
KCJEaWRuJ3QgdGhyb3chIik7Cit9CisKK2Z1bmN0aW9uIHRlc3REaXJlY3RTZXQobnMpIHsKKyAg
ICBmb3IgKGNvbnN0IGtleSBvZiBhbGxLZXlzKSB7CisgICAgICAgIG5zW2tleV0gPSB0ZXN0VmFs
dWU7CisgICAgICAgIGFzc2VydChuc1trZXldICE9PSB0ZXN0VmFsdWUsIGtleSk7CisKKyAgICAg
ICAgc2hvdWxkVGhyb3coKCkgPT4geyAidXNlIHN0cmljdCI7IG5zW2tleV0gPSB0ZXN0VmFsdWU7
IH0sICJUeXBlRXJyb3I6IEF0dGVtcHRlZCB0byBhc3NpZ24gdG8gcmVhZG9ubHkgcHJvcGVydHku
Iik7CisgICAgICAgIGFzc2VydChuc1trZXldICE9PSB0ZXN0VmFsdWUsIGtleSk7CisgICAgfQor
fQorCitmdW5jdGlvbiB0ZXN0UHJvdG90eXBlQ2hhaW5TZXQobnMpIHsKKyAgICBmb3IgKGNvbnN0
IGtleSBvZiBhbGxLZXlzKSB7CisgICAgICAgIGNvbnN0IGhlaXIgPSBPYmplY3QuY3JlYXRlKG5z
KTsKKworICAgICAgICBoZWlyW2tleV0gPSB0ZXN0VmFsdWU7CisgICAgICAgIGFzc2VydChPYmpl
Y3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGhlaXIsIGtleSkgPT09IHVuZGVmaW5lZCwga2V5
KTsKKworICAgICAgICBzaG91bGRUaHJvdygoKSA9PiB7ICJ1c2Ugc3RyaWN0IjsgaGVpcltrZXld
ID0gdGVzdFZhbHVlOyB9LCAiVHlwZUVycm9yOiBBdHRlbXB0ZWQgdG8gYXNzaWduIHRvIHJlYWRv
bmx5IHByb3BlcnR5LiIpOworICAgICAgICBhc3NlcnQoT2JqZWN0LmdldE93blByb3BlcnR5RGVz
Y3JpcHRvcihoZWlyLCBrZXkpID09PSB1bmRlZmluZWQsIGtleSk7CisgICAgfQorfQorCitmdW5j
dGlvbiB0ZXN0UmVmbGVjdFNldChucykgeworICAgICJ1c2Ugc3RyaWN0IjsKKworICAgIGZvciAo
Y29uc3QgZXhpc3RpbmdLZXkgb2YgZXhpc3RpbmdLZXlzKSB7CisgICAgICAgIGFzc2VydCghUmVm
bGVjdC5zZXQobnMsIGV4aXN0aW5nS2V5LCB0ZXN0VmFsdWUpLCBleGlzdGluZ0tleSk7CisKKyAg
ICAgICAgY29uc3QgdGFyZ2V0ID0ge307CisgICAgICAgIGFzc2VydCghUmVmbGVjdC5zZXQodGFy
Z2V0LCBleGlzdGluZ0tleSwgdGVzdFZhbHVlLCBucyksIGV4aXN0aW5nS2V5KTsKKworICAgICAg
ICBjb25zdCBpc1dyaXRhYmxlID0gZXhpc3RpbmdLZXkgIT09IFN5bWJvbC50b1N0cmluZ1RhZzsK
KyAgICAgICAgYXNzZXJ0KFJlZmxlY3Quc2V0KHRhcmdldCwgZXhpc3RpbmdLZXksIG5zW2V4aXN0
aW5nS2V5XSwgbnMpID09PSBpc1dyaXRhYmxlLCBleGlzdGluZ0tleSk7CisKKyAgICAgICAgYXNz
ZXJ0KG5zW2V4aXN0aW5nS2V5XSAhPT0gdGVzdFZhbHVlLCBleGlzdGluZ0tleSk7CisgICAgICAg
IGFzc2VydCh0YXJnZXRbZXhpc3RpbmdLZXldID09PSB1bmRlZmluZWQsIGV4aXN0aW5nS2V5KTsK
KyAgICB9CisKKyAgICBmb3IgKGNvbnN0IG5vbkV4aXN0aW5nS2V5IG9mIG5vbkV4aXN0aW5nS2V5
cykgeworICAgICAgICBhc3NlcnQoIVJlZmxlY3Quc2V0KG5zLCBub25FeGlzdGluZ0tleSwgdGVz
dFZhbHVlKSwgbm9uRXhpc3RpbmdLZXkpOworICAgICAgICBhc3NlcnQobnNbbm9uRXhpc3RpbmdL
ZXldID09PSB1bmRlZmluZWQsIG5vbkV4aXN0aW5nS2V5KTsKKworICAgICAgICBjb25zdCB0YXJn
ZXQgPSB7fTsKKyAgICAgICAgYXNzZXJ0KCFSZWZsZWN0LnNldCh0YXJnZXQsIG5vbkV4aXN0aW5n
S2V5LCB0ZXN0VmFsdWUsIG5zKSwgbm9uRXhpc3RpbmdLZXkpOworICAgICAgICBhc3NlcnQodGFy
Z2V0W25vbkV4aXN0aW5nS2V5XSA9PT0gdW5kZWZpbmVkLCBub25FeGlzdGluZ0tleSk7CisgICAg
fQorCisgICAgZm9yIChjb25zdCBrZXkgb2YgYWxsS2V5cykgeworICAgICAgICBjb25zdCB0YXJn
ZXQgPSBPYmplY3QuY3JlYXRlKG5zKTsKKyAgICAgICAgY29uc3QgcmVjZWl2ZXIgPSB7fTsKKwor
ICAgICAgICBhc3NlcnQoIVJlZmxlY3Quc2V0KHRhcmdldCwga2V5LCB0ZXN0VmFsdWUsIHJlY2Vp
dmVyKSwga2V5KTsKKyAgICAgICAgYXNzZXJ0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0
b3IodGFyZ2V0LCBrZXkpID09PSB1bmRlZmluZWQsIGtleSk7CisgICAgICAgIGFzc2VydChPYmpl
Y3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHJlY2VpdmVyLCBrZXkpID09PSB1bmRlZmluZWQs
IGtleSk7CisgICAgfQorfQorCitpbXBvcnQoIi4vcmVzb3VyY2VzL21vZHVsZS1uYW1lc3BhY2Ut
YWNjZXNzLmpzIikudGhlbihucyA9PiB7CisgICAgdGVzdERpcmVjdFNldChucyk7CisgICAgdGVz
dFByb3RvdHlwZUNoYWluU2V0KG5zKTsKKyAgICB0ZXN0UmVmbGVjdFNldChucyk7Cit9KS5jYXRj
aChlcnIgPT4geworICAgIHByaW50KGAhISEgJHtlcnJ9XG4ke2Vyci5zdGFja31gKTsKKyAgICAk
dm0uYWJvcnQoKTsKK30pOworCitkcmFpbk1pY3JvdGFza3MoKTsKSW5kZXg6IEpTVGVzdHMvc3Ry
ZXNzL3B1dC1ub24tcmVpZmllZC1zdGF0aWMtYWNjZXNzb3Itb3ItY3VzdG9tLmpzCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIEpTVGVzdHMvc3RyZXNzL3B1dC1ub24tcmVpZmllZC1zdGF0aWMtYWNjZXNzb3Itb3It
Y3VzdG9tLmpzCShub25leGlzdGVudCkKKysrIEpTVGVzdHMvc3RyZXNzL3B1dC1ub24tcmVpZmll
ZC1zdGF0aWMtYWNjZXNzb3Itb3ItY3VzdG9tLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NTggQEAKKyJ1c2Ugc3RyaWN0IjsKK2NvbnN0IHRlc3RWYWx1ZSA9IE9iamVjdC5mcmVlemUoe30p
OworCitmdW5jdGlvbiBhc3NlcnQoeCwga2V5KSB7CisgICAgaWYgKCF4KQorICAgICAgICB0aHJv
dyBuZXcgRXJyb3IoYEtleTogIiR7a2V5fSIuIEJhZCBhc3NlcnRpb24hYCk7Cit9CisKK2Z1bmN0
aW9uKiB0ZXN0Q2FzZXMoKSB7CisgICAgZm9yIChjb25zdCBrZXkgb2YgWyJkZXNjcmlwdGlvbiJd
KQorICAgICAgICB5aWVsZCBbJHZtLmNyZWF0ZUdsb2JhbE9iamVjdCgpLlN5bWJvbC5wcm90b3R5
cGUsIGtleV07CisgICAgZm9yIChjb25zdCBrZXkgb2YgWyJidWZmZXIiLCAiYnl0ZUxlbmd0aCIs
ICJieXRlT2Zmc2V0Il0pCisgICAgICAgIHlpZWxkIFskdm0uY3JlYXRlR2xvYmFsT2JqZWN0KCku
RGF0YVZpZXcucHJvdG90eXBlLCBrZXldOworICAgIGZvciAoY29uc3Qga2V5IG9mIFsiYmFzZU5h
bWUiLCAiY2FzZUZpcnN0IiwgImhvdXJDeWNsZSIsICJudW1lcmljIiwgInJlZ2lvbiJdKQorICAg
ICAgICB5aWVsZCBbJHZtLmNyZWF0ZUdsb2JhbE9iamVjdCgpLkludGwuTG9jYWxlLnByb3RvdHlw
ZSwga2V5XTsKKworICAgIGZvciAoY29uc3Qga2V5IG9mIFsidGVzdFN0YXRpY0FjY2Vzc29yRG9u
dEVudW0iLCAidGVzdFN0YXRpY0FjY2Vzc29yUmVhZE9ubHkiXSkKKyAgICAgICAgeWllbGQgWyR2
bS5jcmVhdGVTdGF0aWNDdXN0b21BY2Nlc3NvcigpLCBrZXldOworICAgIHlpZWxkIFskdm0uY3Jl
YXRlU3RhdGljQ3VzdG9tVmFsdWUoKSwgInRlc3RTdGF0aWNWYWx1ZVJlYWRPbmx5Il07Cit9CisK
K2ZvciAoY29uc3QgW29iamVjdCwga2V5XSBvZiB0ZXN0Q2FzZXMoKSkgeworICAgIGNvbnN0IHRh
cmdldCA9IHt9OworICAgIGFzc2VydCghUmVmbGVjdC5zZXQodGFyZ2V0LCBrZXksIHRlc3RWYWx1
ZSwgb2JqZWN0KSwga2V5KTsKKyAgICBhc3NlcnQoIXRhcmdldC5oYXNPd25Qcm9wZXJ0eShrZXkp
LCBrZXkpOworICAgIGFzc2VydChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVj
dCwga2V5KS52YWx1ZSAhPT0gdGVzdFZhbHVlLCBrZXkpOworfQorCitmb3IgKGNvbnN0IFtvYmpl
Y3QsIGtleV0gb2YgdGVzdENhc2VzKCkpIHsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2Jq
ZWN0LCBrZXksIHsgdmFsdWU6IHt9LCB3cml0YWJsZTogZmFsc2UgfSk7CisgICAgY29uc3QgdGFy
Z2V0ID0ge307CisgICAgYXNzZXJ0KCFSZWZsZWN0LnNldCh0YXJnZXQsIGtleSwgdGVzdFZhbHVl
LCBvYmplY3QpLCBrZXkpOworICAgIGFzc2VydCghdGFyZ2V0Lmhhc093blByb3BlcnR5KGtleSks
IGtleSk7CisgICAgYXNzZXJ0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0
LCBrZXkpLnZhbHVlICE9PSB0ZXN0VmFsdWUsIGtleSk7Cit9CisKK2ZvciAoY29uc3QgW29iamVj
dCwga2V5XSBvZiB0ZXN0Q2FzZXMoKSkgeworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmpl
Y3QsIGtleSwgeyB2YWx1ZToge30sIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IGZhbHNl
IH0pOworICAgIG9iamVjdFtrZXldID0gdGVzdFZhbHVlOworCisgICAgY29uc3QgZGVzYyA9IE9i
amVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBrZXkpOworICAgIGFzc2VydChk
ZXNjLnZhbHVlID09PSB0ZXN0VmFsdWUsIGtleSk7CisgICAgYXNzZXJ0KGRlc2Mud3JpdGFibGUs
IGtleSk7CisgICAgYXNzZXJ0KCFkZXNjLmVudW1lcmFibGUsIGtleSk7CisgICAgYXNzZXJ0KCFk
ZXNjLmNvbmZpZ3VyYWJsZSwga2V5KTsKK30KKworZm9yIChjb25zdCBbb2JqZWN0LCBrZXldIG9m
IHRlc3RDYXNlcygpKSB7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iamVjdCwga2V5LCB7
IHZhbHVlOiB7fSwgd3JpdGFibGU6IHRydWUsIGVudW1lcmFibGU6IHRydWUgfSk7CisgICAgY29u
c3QgdGFyZ2V0ID0ge307CisgICAgYXNzZXJ0KFJlZmxlY3Quc2V0KHRhcmdldCwga2V5LCB0ZXN0
VmFsdWUsIG9iamVjdCksIGtleSk7CisKKyAgICBjb25zdCBkZXNjID0gT2JqZWN0LmdldE93blBy
b3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIGtleSk7CisgICAgYXNzZXJ0KGRlc2MudmFsdWUgPT09
IHRlc3RWYWx1ZSwga2V5KTsKKyAgICBhc3NlcnQoZGVzYy53cml0YWJsZSwga2V5KTsKKyAgICBh
c3NlcnQoZGVzYy5lbnVtZXJhYmxlLCBrZXkpOworICAgIGFzc2VydChkZXNjLmNvbmZpZ3VyYWJs
ZSwga2V5KTsKK30KSW5kZXg6IEpTVGVzdHMvc3RyZXNzL3B1dC1ub24tcmVpZmllZC1zdGF0aWMt
ZnVuY3Rpb24tb3ItY3VzdG9tLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvc3RyZXNzL3B1dC1u
b24tcmVpZmllZC1zdGF0aWMtZnVuY3Rpb24tb3ItY3VzdG9tLmpzCShub25leGlzdGVudCkKKysr
IEpTVGVzdHMvc3RyZXNzL3B1dC1ub24tcmVpZmllZC1zdGF0aWMtZnVuY3Rpb24tb3ItY3VzdG9t
LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTQzIEBACisidXNlIHN0cmljdCI7Citjb25z
dCB0ZXN0VmFsdWUgPSBPYmplY3QuZnJlZXplKHt9KTsKKworZnVuY3Rpb24gYXNzZXJ0KHgsIGtl
eSkgeworICAgIGlmICgheCkKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBLZXk6ICIke2tleX0i
LiBCYWQgYXNzZXJ0aW9uIWApOworfQorCitmdW5jdGlvbiBzaG91bGRUaHJvdyhmdW5jLCBlcnJv
ck1lc3NhZ2UsIGtleSkgeworICAgIGxldCBlcnJvclRocm93biA9IGZhbHNlOworICAgIHRyeSB7
CisgICAgICAgIGZ1bmMoKTsKKyAgICB9IGNhdGNoIChlcnJvcikgeworICAgICAgICBlcnJvclRo
cm93biA9IHRydWU7CisgICAgICAgIGlmIChTdHJpbmcoZXJyb3IpICE9PSBlcnJvck1lc3NhZ2Up
CisgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEtleTogIiR7a2V5fSIuIEJhZCBlcnJvcjog
JHtlcnJvcn1gKTsKKyAgICB9CisgICAgaWYgKCFlcnJvclRocm93bikKKyAgICAgICAgdGhyb3cg
bmV3IEVycm9yKGBLZXk6ICIke2tleX0iLiBEaWRuJ3QgdGhyb3chYCk7Cit9CisKK2Z1bmN0aW9u
KiB0ZXN0Q2FzZXMoKSB7CisgICAgLy8gaGFzU2V0dGVyT3JSZWFkb25seVByb3BlcnRpZXM6IGZh
bHNlCisgICAgZm9yIChjb25zdCBrZXkgb2YgWyJpc0Zpbml0ZSIsICJldmFsIiwgImdsb2JhbFRo
aXMiLCAicGFyc2VJbnQiLCAiRXZhbEVycm9yIiwgIkpTT04iLCAiVWludDhDbGFtcGVkQXJyYXki
LCAiV2Vha01hcCJdKQorICAgICAgICB5aWVsZCBbJHZtLmNyZWF0ZUdsb2JhbE9iamVjdCgpLCBr
ZXldOworICAgIGZvciAoY29uc3Qga2V5IG9mIFsic2VhbCIsICJpcyIsICJ2YWx1ZXMiLCAiZnJv
bUVudHJpZXMiLCAiZGVmaW5lUHJvcGVydHkiLCAic2V0UHJvdG90eXBlT2YiXSkKKyAgICAgICAg
eWllbGQgWyR2bS5jcmVhdGVHbG9iYWxPYmplY3QoKS5PYmplY3QsIGtleV07CisgICAgZm9yIChj
b25zdCBrZXkgb2YgWyJhcHBseSIsICJjb25zdHJ1Y3QiLCAiaGFzIiwgInByZXZlbnRFeHRlbnNp
b25zIiwgImdldFByb3RvdHlwZU9mIl0pCisgICAgICAgIHlpZWxkIFskdm0uY3JlYXRlR2xvYmFs
T2JqZWN0KCkuUmVmbGVjdCwga2V5XTsKKyAgICBmb3IgKGNvbnN0IGtleSBvZiBbInRvRGF0ZVN0
cmluZyIsICJ0b0xvY2FsZVN0cmluZyIsICJnZXRVVENNb250aCIsICJnZXREYXkiLCAic2V0VVRD
TWludXRlcyIsICJzZXRNb250aCJdKQorICAgICAgICB5aWVsZCBbJHZtLmNyZWF0ZUdsb2JhbE9i
amVjdCgpLkRhdGUucHJvdG90eXBlLCBrZXldOworICAgIGZvciAoY29uc3Qga2V5IG9mIFsiY29u
Y2F0IiwgIm1hdGNoIiwgInBhZFN0YXJ0IiwgImJvbGQiLCAiZml4ZWQiLCAic21hbGwiLCAic3Vi
Il0pCisgICAgICAgIHlpZWxkIFskdm0uY3JlYXRlR2xvYmFsT2JqZWN0KCkuU3RyaW5nLnByb3Rv
dHlwZSwga2V5XTsKKworICAgIC8vIGhhc1NldHRlck9yUmVhZG9ubHlQcm9wZXJ0aWVzOiB0cnVl
CisgICAgZm9yIChjb25zdCBrZXkgb2YgWyJnZXRVaW50MTYiLCAic2V0SW50OCIsICJnZXRGbG9h
dDMyIiwgInNldEJpZ1VpbnQ2NCJdKQorICAgICAgICB5aWVsZCBbJHZtLmNyZWF0ZUdsb2JhbE9i
amVjdCgpLkRhdGFWaWV3LnByb3RvdHlwZSwga2V5XTsKKyAgICBmb3IgKGNvbnN0IGtleSBvZiBb
InRvU3RyaW5nIiwgInZhbHVlT2YiXSkKKyAgICAgICAgeWllbGQgWyR2bS5jcmVhdGVHbG9iYWxP
YmplY3QoKS5TeW1ib2wucHJvdG90eXBlLCBrZXldOworICAgIGZvciAoY29uc3Qga2V5IG9mIFsi
Zm9ybWF0UmFuZ2UiLCAiZm9ybWF0VG9QYXJ0cyIsICJyZXNvbHZlZE9wdGlvbnMiXSkKKyAgICAg
ICAgeWllbGQgWyR2bS5jcmVhdGVHbG9iYWxPYmplY3QoKS5JbnRsLkRhdGVUaW1lRm9ybWF0LnBy
b3RvdHlwZSwga2V5XTsKKyAgICBmb3IgKGNvbnN0IGtleSBvZiBbImZvcm1hdFRvUGFydHMiLCAi
cmVzb2x2ZWRPcHRpb25zIl0pCisgICAgICAgIHlpZWxkIFskdm0uY3JlYXRlR2xvYmFsT2JqZWN0
KCkuSW50bC5OdW1iZXJGb3JtYXQucHJvdG90eXBlLCBrZXldOworICAgIGZvciAoY29uc3Qga2V5
IG9mIFsibWF4aW1pemUiLCAibWluaW1pemUiLCAidG9TdHJpbmciXSkKKyAgICAgICAgeWllbGQg
WyR2bS5jcmVhdGVHbG9iYWxPYmplY3QoKS5JbnRsLkxvY2FsZS5wcm90b3R5cGUsIGtleV07CisK
KyAgICB5aWVsZCBbJHZtLmNyZWF0ZVN0YXRpY0N1c3RvbVZhbHVlKCksICJ0ZXN0U3RhdGljVmFs
dWVOb1NldHRlciJdOworfQorCitmb3IgKGNvbnN0IFtvYmplY3QsIGtleV0gb2YgdGVzdENhc2Vz
KCkpIHsKKyAgICBvYmplY3Rba2V5XSA9IHRlc3RWYWx1ZTsKKworICAgIGNvbnN0IGRlc2MgPSBP
YmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwga2V5KTsKKyAgICBhc3NlcnQo
ZGVzYy52YWx1ZSA9PT0gdGVzdFZhbHVlLCBrZXkpOworICAgIGFzc2VydChkZXNjLndyaXRhYmxl
LCBrZXkpOworICAgIGFzc2VydCghZGVzYy5lbnVtZXJhYmxlLCBrZXkpOworICAgIGFzc2VydChk
ZXNjLmNvbmZpZ3VyYWJsZSwga2V5KTsKK30KKworZm9yIChjb25zdCBbb2JqZWN0LCBrZXldIG9m
IHRlc3RDYXNlcygpKSB7CisgICAgT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zKG9iamVjdCk7Cisg
ICAgb2JqZWN0W2tleV0gPSB0ZXN0VmFsdWU7CisKKyAgICBjb25zdCBkZXNjID0gT2JqZWN0Lmdl
dE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIGtleSk7CisgICAgYXNzZXJ0KGRlc2MudmFs
dWUgPT09IHRlc3RWYWx1ZSwga2V5KTsKKyAgICBhc3NlcnQoZGVzYy53cml0YWJsZSwga2V5KTsK
KyAgICBhc3NlcnQoIWRlc2MuZW51bWVyYWJsZSwga2V5KTsKKyAgICBhc3NlcnQoZGVzYy5jb25m
aWd1cmFibGUsIGtleSk7Cit9CisKK2ZvciAoY29uc3QgW29iamVjdCwga2V5XSBvZiB0ZXN0Q2Fz
ZXMoKSkgeworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmplY3QsIGtleSwgeyBlbnVtZXJh
YmxlOiB0cnVlLCBjb25maWd1cmFibGU6IGZhbHNlIH0pOworICAgIG9iamVjdFtrZXldID0gdGVz
dFZhbHVlOworCisgICAgY29uc3QgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0
b3Iob2JqZWN0LCBrZXkpOworICAgIGFzc2VydChkZXNjLnZhbHVlID09PSB0ZXN0VmFsdWUsIGtl
eSk7CisgICAgYXNzZXJ0KGRlc2Mud3JpdGFibGUsIGtleSk7CisgICAgYXNzZXJ0KGRlc2MuZW51
bWVyYWJsZSwga2V5KTsKKyAgICBhc3NlcnQoIWRlc2MuY29uZmlndXJhYmxlLCBrZXkpOworfQor
Citmb3IgKGNvbnN0IFtvYmplY3QsIGtleV0gb2YgdGVzdENhc2VzKCkpIHsKKyAgICBPYmplY3Qu
ZGVmaW5lUHJvcGVydHkob2JqZWN0LCBrZXksIHsgd3JpdGFibGU6IGZhbHNlIH0pOworICAgIHNo
b3VsZFRocm93KCgpID0+IHsgb2JqZWN0W2tleV0gPSB0ZXN0VmFsdWU7IH0sICJUeXBlRXJyb3I6
IEF0dGVtcHRlZCB0byBhc3NpZ24gdG8gcmVhZG9ubHkgcHJvcGVydHkuIiwga2V5KTsKKworICAg
IGNvbnN0IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwga2V5
KTsKKyAgICBhc3NlcnQoZGVzYy52YWx1ZSAhPT0gdGVzdFZhbHVlLCBrZXkpOworICAgIGFzc2Vy
dCghZGVzYy53cml0YWJsZSwga2V5KTsKKyAgICBhc3NlcnQoIWRlc2MuZW51bWVyYWJsZSwga2V5
KTsKKyAgICBhc3NlcnQoZGVzYy5jb25maWd1cmFibGUsIGtleSk7Cit9CisKK2ZvciAoY29uc3Qg
W29iamVjdCwga2V5XSBvZiB0ZXN0Q2FzZXMoKSkgeworICAgIGNvbnN0IGhlaXIgPSBPYmplY3Qu
Y3JlYXRlKG9iamVjdCk7CisgICAgaGVpcltrZXldID0gdGVzdFZhbHVlOworCisgICAgY29uc3Qg
ZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoaGVpciwga2V5KTsKKyAgICBh
c3NlcnQoZGVzYy52YWx1ZSA9PT0gdGVzdFZhbHVlLCBrZXkpOworICAgIGFzc2VydChkZXNjLndy
aXRhYmxlLCBrZXkpOworICAgIGFzc2VydChkZXNjLmVudW1lcmFibGUsIGtleSk7CisgICAgYXNz
ZXJ0KGRlc2MuY29uZmlndXJhYmxlLCBrZXkpOworICAgIGFzc2VydChvYmplY3Rba2V5XSAhPT0g
dGVzdFZhbHVlLCBrZXkpOworfQorCitmb3IgKGNvbnN0IFtvYmplY3QsIGtleV0gb2YgdGVzdENh
c2VzKCkpIHsKKyAgICBjb25zdCBwcm90b3R5cGUgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Yob2Jq
ZWN0KTsKKyAgICBpZiAocHJvdG90eXBlICE9PSBudWxsKSB7CisgICAgICAgIE9iamVjdC5kZWZp
bmVQcm9wZXJ0eShwcm90b3R5cGUsIGtleSwgeworICAgICAgICAgICAgc2V0KCkgeyB0aHJvdyBu
ZXcgRXJyb3IoYCIke2tleX0iIHNldHRlciBzaG91bGQgYmUgdW5yZWFjaGFibGUhYCk7IH0sCisg
ICAgICAgIH0pOworICAgIH0KKworICAgIGNvbnN0IGhlaXIgPSBPYmplY3QuY3JlYXRlKG9iamVj
dCk7CisgICAgaGVpcltrZXldID0gdGVzdFZhbHVlOworCisgICAgY29uc3QgZGVzYyA9IE9iamVj
dC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoaGVpciwga2V5KTsKKyAgICBhc3NlcnQoZGVzYy52
YWx1ZSA9PT0gdGVzdFZhbHVlLCBrZXkpOworICAgIGFzc2VydChkZXNjLndyaXRhYmxlLCBrZXkp
OworICAgIGFzc2VydChkZXNjLmVudW1lcmFibGUsIGtleSk7CisgICAgYXNzZXJ0KGRlc2MuY29u
ZmlndXJhYmxlLCBrZXkpOworICAgIGFzc2VydChvYmplY3Rba2V5XSAhPT0gdGVzdFZhbHVlLCBr
ZXkpOworfQorCitmb3IgKGNvbnN0IFtvYmplY3QsIGtleV0gb2YgdGVzdENhc2VzKCkpIHsKKyAg
ICBjb25zdCBoZWlyID0gT2JqZWN0LmNyZWF0ZShvYmplY3QpOworICAgIE9iamVjdC5wcmV2ZW50
RXh0ZW5zaW9ucyhoZWlyKTsKKworICAgIHNob3VsZFRocm93KCgpID0+IHsgaGVpcltrZXldID0g
dGVzdFZhbHVlOyB9LCAiVHlwZUVycm9yOiBBdHRlbXB0ZWQgdG8gYXNzaWduIHRvIHJlYWRvbmx5
IHByb3BlcnR5LiIsIGtleSk7CisgICAgYXNzZXJ0KGhlaXJba2V5XSAhPT0gdGVzdFZhbHVlLCBr
ZXkpOworICAgIGFzc2VydChvYmplY3Rba2V5XSAhPT0gdGVzdFZhbHVlLCBrZXkpOworfQorCitm
b3IgKGNvbnN0IFtvYmplY3QsIGtleV0gb2YgdGVzdENhc2VzKCkpIHsKKyAgICBjb25zdCB0YXJn
ZXQgPSB7fTsKKyAgICBhc3NlcnQoUmVmbGVjdC5zZXQodGFyZ2V0LCBrZXksIHRlc3RWYWx1ZSwg
b2JqZWN0KSwga2V5KTsKKyAgICBhc3NlcnQoIXRhcmdldC5oYXNPd25Qcm9wZXJ0eShrZXkpLCBr
ZXkpOworCisgICAgY29uc3QgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Io
b2JqZWN0LCBrZXkpOworICAgIGFzc2VydChkZXNjLnZhbHVlID09PSB0ZXN0VmFsdWUsIGtleSk7
CisgICAgYXNzZXJ0KGRlc2Mud3JpdGFibGUsIGtleSk7CisgICAgYXNzZXJ0KCFkZXNjLmVudW1l
cmFibGUsIGtleSk7CisgICAgYXNzZXJ0KGRlc2MuY29uZmlndXJhYmxlLCBrZXkpOworfQpJbmRl
eDogSlNUZXN0cy9zdHJlc3MvcHV0LXRvLXByaW1pdGl2ZS1ub24tcmVpZmllZC1zdGF0aWMtY3Vz
dG9tLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvc3RyZXNzL3B1dC10by1wcmltaXRpdmUtbm9u
LXJlaWZpZWQtc3RhdGljLWN1c3RvbS5qcwkobm9uZXhpc3RlbnQpCisrKyBKU1Rlc3RzL3N0cmVz
cy9wdXQtdG8tcHJpbWl0aXZlLW5vbi1yZWlmaWVkLXN0YXRpYy1jdXN0b20uanMJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw2NCBAQAorInVzZSBzdHJpY3QiOworCitmdW5jdGlvbiBzaG91bGRC
ZShhY3R1YWwsIGV4cGVjdGVkKSB7CisgICAgaWYgKGFjdHVhbCAhPT0gZXhwZWN0ZWQpCisgICAg
ICAgIHRocm93IG5ldyBFcnJvcihgQmFkIHZhbHVlOiAke2FjdHVhbH0hYCk7Cit9CisKK2Z1bmN0
aW9uIHNob3VsZFRocm93KGZ1bmMsIGVycm9yTWVzc2FnZSkgeworICAgIGxldCBlcnJvclRocm93
biA9IGZhbHNlOworICAgIHRyeSB7CisgICAgICAgIGZ1bmMoKTsKKyAgICB9IGNhdGNoIChlcnJv
cikgeworICAgICAgICBlcnJvclRocm93biA9IHRydWU7CisgICAgICAgIGlmIChTdHJpbmcoZXJy
b3IpICE9PSBlcnJvck1lc3NhZ2UpCisgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEJhZCBl
cnJvcjogJHtlcnJvcn1gKTsKKyAgICB9CisgICAgaWYgKCFlcnJvclRocm93bikKKyAgICAgICAg
dGhyb3cgbmV3IEVycm9yKCJEaWRuJ3QgdGhyb3chIik7Cit9CisKK2NvbnN0IHBvaXNvbmVkU2V0
dGVyID0geyBzZXQoKSB7IHRocm93IG5ldyBFcnJvcigiT2JqZWN0LnByb3RvdHlwZSBzZXR0ZXIg
c2hvdWxkIGJlIHVucmVhY2hhYmxlISIpOyB9IH07Citjb25zdCBwcmltaXRpdmVzID0gW3RydWUs
IDEsICIiLCBTeW1ib2woKSwgMG5dOworCisoZnVuY3Rpb24gdGVzdFN0YXRpY0N1c3RvbVZhbHVl
KCkgeworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKE9iamVjdC5wcm90b3R5cGUsIHsKKyAg
ICAgICAgdGVzdFN0YXRpY1ZhbHVlOiBwb2lzb25lZFNldHRlciwKKyAgICAgICAgdGVzdFN0YXRp
Y1ZhbHVlTm9TZXR0ZXI6IHBvaXNvbmVkU2V0dGVyLAorICAgICAgICB0ZXN0U3RhdGljVmFsdWVS
ZWFkT25seTogcG9pc29uZWRTZXR0ZXIsCisgICAgfSk7CisKKyAgICBmb3IgKGNvbnN0IHByaW1p
dGl2ZSBvZiBwcmltaXRpdmVzKSB7CisgICAgICAgIGNvbnN0IHByaW1pdGl2ZVByb3RvdHlwZSA9
IE9iamVjdC5nZXRQcm90b3R5cGVPZihwcmltaXRpdmUpOworICAgICAgICBjb25zdCBzdGF0aWND
dXN0b21WYWx1ZSA9ICR2bS5jcmVhdGVTdGF0aWNDdXN0b21WYWx1ZSgpOworICAgICAgICBPYmpl
Y3Quc2V0UHJvdG90eXBlT2YocHJpbWl0aXZlUHJvdG90eXBlLCBzdGF0aWNDdXN0b21WYWx1ZSk7
CisKKyAgICAgICAgcHJpbWl0aXZlLnRlc3RTdGF0aWNWYWx1ZSA9IDE7CisgICAgICAgIHNob3Vs
ZEJlKHN0YXRpY0N1c3RvbVZhbHVlLnRlc3RTdGF0aWNWYWx1ZSwgMSk7CisgICAgICAgIHNob3Vs
ZFRocm93KCgpID0+IHsgcHJpbWl0aXZlLnRlc3RTdGF0aWNWYWx1ZSA9IDE7IH0sICJUeXBlRXJy
b3I6IEF0dGVtcHRlZCB0byBhc3NpZ24gdG8gcmVhZG9ubHkgcHJvcGVydHkuIik7CisKKyAgICAg
ICAgc2hvdWxkVGhyb3coKCkgPT4geyBwcmltaXRpdmUudGVzdFN0YXRpY1ZhbHVlTm9TZXR0ZXIg
PSAxOyB9LCAiVHlwZUVycm9yOiBBdHRlbXB0ZWQgdG8gYXNzaWduIHRvIHJlYWRvbmx5IHByb3Bl
cnR5LiIpOworICAgICAgICBzaG91bGRUaHJvdygoKSA9PiB7IHByaW1pdGl2ZS50ZXN0U3RhdGlj
VmFsdWVSZWFkT25seSA9IDE7IH0sICJUeXBlRXJyb3I6IEF0dGVtcHRlZCB0byBhc3NpZ24gdG8g
cmVhZG9ubHkgcHJvcGVydHkuIik7CisgICAgICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZihwcmlt
aXRpdmVQcm90b3R5cGUsIE9iamVjdC5wcm90b3R5cGUpOworICAgIH0KK30pKCk7CisKKyhmdW5j
dGlvbiB0ZXN0U3RhdGljQ3VzdG9tQWNjZXNzb3IoKSB7CisgICAgT2JqZWN0LmRlZmluZVByb3Bl
cnRpZXMoT2JqZWN0LnByb3RvdHlwZSwgeworICAgICAgICB0ZXN0U3RhdGljQWNjZXNzb3I6IHBv
aXNvbmVkU2V0dGVyLAorICAgICAgICB0ZXN0U3RhdGljQWNjZXNzb3JSZWFkT25seTogcG9pc29u
ZWRTZXR0ZXIsCisgICAgfSk7CisKKyAgICBmb3IgKGNvbnN0IHByaW1pdGl2ZSBvZiBwcmltaXRp
dmVzKSB7CisgICAgICAgIGNvbnN0IHByaW1pdGl2ZVByb3RvdHlwZSA9IE9iamVjdC5nZXRQcm90
b3R5cGVPZihwcmltaXRpdmUpOworICAgICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YocHJpbWl0
aXZlUHJvdG90eXBlLCAkdm0uY3JlYXRlU3RhdGljQ3VzdG9tQWNjZXNzb3IoKSk7CisKKyAgICAg
ICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxMDAwOyBpKyspIHsKKyAgICAgICAgICAgIHByaW1pdGl2
ZS50ZXN0U3RhdGljQWNjZXNzb3IgPSBpOworICAgICAgICAgICAgc2hvdWxkQmUocHJpbWl0aXZl
UHJvdG90eXBlLnRlc3RGaWVsZCwgaSk7CisgICAgICAgIH0KKworICAgICAgICBzaG91bGRUaHJv
dygoKSA9PiB7IHByaW1pdGl2ZS50ZXN0U3RhdGljQWNjZXNzb3JSZWFkT25seSA9IDE7IH0sICJU
eXBlRXJyb3I6IEF0dGVtcHRlZCB0byBhc3NpZ24gdG8gcmVhZG9ubHkgcHJvcGVydHkuIik7Cisg
ICAgICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZihwcmltaXRpdmVQcm90b3R5cGUsIE9iamVjdC5w
cm90b3R5cGUpOworICAgIH0KK30pKCk7CkluZGV4OiBKU1Rlc3RzL3N0cmVzcy9wdXQtdG8tcHJp
bWl0aXZlLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvc3RyZXNzL3B1dC10by1wcmltaXRpdmUu
anMJKG5vbmV4aXN0ZW50KQorKysgSlNUZXN0cy9zdHJlc3MvcHV0LXRvLXByaW1pdGl2ZS5qcwko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI3IEBACitmdW5jdGlvbiBzaG91bGRCZShhY3R1YWws
IGV4cGVjdGVkKSB7CisgICAgaWYgKGFjdHVhbCAhPT0gZXhwZWN0ZWQpCisgICAgICAgIHRocm93
IG5ldyBFcnJvcihgQmFkIHZhbHVlOiAke2FjdHVhbH0hYCk7Cit9CisKK2Z1bmN0aW9uIHNob3Vs
ZFRocm93KGZ1bmMsIGVycm9yTWVzc2FnZSkgeworICAgIGxldCBlcnJvclRocm93biA9IGZhbHNl
OworICAgIHRyeSB7CisgICAgICAgIGZ1bmMoKTsKKyAgICB9IGNhdGNoIChlcnJvcikgeworICAg
ICAgICBlcnJvclRocm93biA9IHRydWU7CisgICAgICAgIGlmIChTdHJpbmcoZXJyb3IpICE9PSBl
cnJvck1lc3NhZ2UpCisgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEJhZCBlcnJvcjogJHtl
cnJvcn1gKTsKKyAgICB9CisgICAgaWYgKCFlcnJvclRocm93bikKKyAgICAgICAgdGhyb3cgbmV3
IEVycm9yKCJEaWRuJ3QgdGhyb3chIik7Cit9CisKKyhmdW5jdGlvbiBzdHJpbmdMZW5ndGgoKSB7
CisgICAgbGV0IHN0ciA9ICJmb28iOworCisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxZTU7IGkr
KykgeworICAgICAgICBzdHIubGVuZ3RoID0gMDsKKyAgICAgICAgc2hvdWxkQmUoc3RyLmxlbmd0
aCwgMyk7CisgICAgICAgIHNob3VsZFRocm93KCgpID0+IHsgInVzZSBzdHJpY3QiOyAiYmFyIi5s
ZW5ndGggPSAzOyB9LCAiVHlwZUVycm9yOiBBdHRlbXB0ZWQgdG8gYXNzaWduIHRvIHJlYWRvbmx5
IHByb3BlcnR5LiIpOworICAgIH0KK30pKCk7CkluZGV4OiBKU1Rlc3RzL3N0cmVzcy9wdXQtdG8t
cHJvdG8tY2hhaW4tb3ZlcnJpZGVzLXB1dC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0cmVz
cy9wdXQtdG8tcHJvdG8tY2hhaW4tb3ZlcnJpZGVzLXB1dC5qcwkobm9uZXhpc3RlbnQpCisrKyBK
U1Rlc3RzL3N0cmVzcy9wdXQtdG8tcHJvdG8tY2hhaW4tb3ZlcnJpZGVzLXB1dC5qcwkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDE0MiBAQAorY29uc3QgVEVTVF9WQUxVRSA9IDEwNjI2MzA3MTM7
IC8vIEFycmF5J3MgImxlbmd0aCIgaXMgcmVxdWlyZWQgdG8gYmUgaW50MzIKKwordGVzdFNldFJl
c3VsdChbMSwgMl0sICJsZW5ndGgiLCB0cnVlKTsKK3Rlc3RTZXRSZXN1bHQoCisgICAgT2JqZWN0
LmRlZmluZVByb3BlcnR5KG5ldyBBcnJheSwgImxlbmd0aCIsIHsgd3JpdGFibGU6IGZhbHNlIH0p
LAorICAgICJsZW5ndGgiLAorICAgIGZhbHNlLAorKTsKKwordGVzdFNldFJlc3VsdChuZXcgU3Ry
aW5nLCAibGVuZ3RoIiwgZmFsc2UpOwordGVzdFNldFJlc3VsdChuZXcgUmVnRXhwLCAibGFzdElu
ZGV4IiwgdHJ1ZSk7Cit0ZXN0U2V0UmVzdWx0KAorICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSgv
KD86KS9nLCAibGFzdEluZGV4IiwgeyB3cml0YWJsZTogZmFsc2UgfSksCisgICAgImxhc3RJbmRl
eCIsCisgICAgZmFsc2UsCispOworCitmb3IgKGNvbnN0IGtleSBvZiBbImxpbmUiLCAiY29sdW1u
IiwgInNvdXJjZVVSTCIsICJzdGFjayJdKQorICAgIHRlc3RTZXRSZXN1bHQobmV3IEVycm9yLCBr
ZXksIHRydWUpOworCitjb25zdCBtYXBwZWRBcmd1bWVudHMgPSAoZnVuY3Rpb24oYSwgYikgeyBy
ZXR1cm4gYXJndW1lbnRzOyB9KSgxLCAyKTsKK3Rlc3RTZXRSZXN1bHQobWFwcGVkQXJndW1lbnRz
LCAiY2FsbGVlIiwgdHJ1ZSk7Cit0ZXN0U2V0UmVzdWx0KG1hcHBlZEFyZ3VtZW50cywgImxlbmd0
aCIsIHRydWUpOwordGVzdFNldFJlc3VsdChtYXBwZWRBcmd1bWVudHMsIFN5bWJvbC5pdGVyYXRv
ciwgdHJ1ZSk7CisKK2NvbnN0IHVubWFwcGVkQXJndW1lbnRzID0gKGZ1bmN0aW9uKCkgeyAidXNl
IHN0cmljdCI7IHJldHVybiBhcmd1bWVudHM7IH0pKCk7Cit0ZXN0U2V0UmVzdWx0KHVubWFwcGVk
QXJndW1lbnRzLCAibGVuZ3RoIiwgdHJ1ZSk7Cit0ZXN0U2V0UmVzdWx0KHVubWFwcGVkQXJndW1l
bnRzLCBTeW1ib2wuaXRlcmF0b3IsIHRydWUpOworCit2YXIgZm9vOworZnVuY3Rpb24gYmFyKCkg
e30KK2ZvciAoY29uc3Qga2V5IG9mIFsiZm9vIiwgImJhciIsICJwYXJzZUludCJdKQorICAgIHRl
c3RTZXRSZXN1bHQoZ2xvYmFsVGhpcywga2V5LCB0cnVlKTsKKworZm9yIChjb25zdCBrZXkgb2Yg
WyJJbmZpbml0eSIsICJOYU4iLCAidW5kZWZpbmVkIl0pCisgICAgdGVzdFNldFJlc3VsdChnbG9i
YWxUaGlzLCBrZXksIGZhbHNlKTsKKworZm9yIChjb25zdCBrZXkgb2YgWyJuYW1lIiwgImxlbmd0
aCJdKSB7CisgICAgdGVzdFNldFJlc3VsdChmdW5jdGlvbigpIHt9LmJpbmQoKSwga2V5LCBmYWxz
ZSk7CisgICAgdGVzdFNldFJlc3VsdCgKKyAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGZ1
bmN0aW9uKCkge30sIGtleSwgeyB3cml0YWJsZTogdHJ1ZSB9KSwKKyAgICAgICAga2V5LAorICAg
ICAgICB0cnVlLAorICAgICk7CisKKyAgICB0ZXN0U2V0UmVzdWx0KCgpID0+IHsgInVzZSBzdHJp
Y3QiOyB9LCBrZXksIGZhbHNlKTsKKyAgICB0ZXN0U2V0UmVzdWx0KAorICAgICAgICBPYmplY3Qu
ZGVmaW5lUHJvcGVydHkocGFyc2VGbG9hdCwga2V5LCB7IHdyaXRhYmxlOiB0cnVlIH0pLAorICAg
ICAgICBrZXksCisgICAgICAgIHRydWUsCisgICAgKTsKK30KKwordGVzdFNldFJlc3VsdChmdW5j
dGlvbigpIHsgInVzZSBzdHJpY3QiOyB9LCAicHJvdG90eXBlIiwgdHJ1ZSk7Cit0ZXN0U2V0UmVz
dWx0KAorICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmdW5jdGlvbigpIHt9LCAicHJvdG90eXBl
IiwgeyB3cml0YWJsZTogZmFsc2UgfSksCisgICAgInByb3RvdHlwZSIsCisgICAgZmFsc2UsCisp
OworCit0ZXN0U2V0UmVzdWx0KGZ1bmN0aW9uKCkge30sICJhcmd1bWVudHMiLCBmYWxzZSk7Cit0
ZXN0U2V0UmVzdWx0KGZ1bmN0aW9uKCkge30sICJjYWxsZXIiLCBmYWxzZSk7CisKKy8vID09PSBo
YXJuZXNzID09PQorCitmdW5jdGlvbiB0ZXN0U2V0UmVzdWx0KHRhcmdldCwga2V5LCBleHBlY3Rl
ZFJlc3VsdCkgeworICAgIGxldCBjbGVhblVwID0gcHV0U2V0dGVyT25Qcm90b3R5cGUodGFyZ2V0
LCBrZXksICgpID0+IHt9KTsKKworICAgIGZvciAoY29uc3QgcHJpbWl0aXZlIG9mIFt0cnVlLCAx
LCAiZm9vIiwgU3ltYm9sKCksIDBuXSkgeworICAgICAgICBjb25zdCBwcmltaXRpdmVQcm90b3R5
cGUgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YocHJpbWl0aXZlKTsKKyAgICAgICAgT2JqZWN0LnNl
dFByb3RvdHlwZU9mKHByaW1pdGl2ZVByb3RvdHlwZSwgdGFyZ2V0KTsKKyAgICAgICAgdGVzdFNl
dFJlc3VsdEludGVybmFsKHRhcmdldCwga2V5LCBwcmltaXRpdmUsIGZhbHNlKTsKKyAgICAgICAg
T2JqZWN0LnNldFByb3RvdHlwZU9mKHByaW1pdGl2ZVByb3RvdHlwZSwgT2JqZWN0LnByb3RvdHlw
ZSk7CisgICAgfQorCisgICAgY2xlYW5VcCgpOworICAgIGNsZWFuVXAgPSBwdXRTZXR0ZXJPblBy
b3RvdHlwZSh0YXJnZXQsIGtleSwgKCkgPT4geworICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7
U3RyaW5nKGtleSl9IHNldHRlciBzaG91bGQgYmUgdW5yZWFjaGFibGUhYCk7CisgICAgfSk7CisK
KyAgICBmb3IgKGNvbnN0IHJlY2VpdmVyIG9mIFsKKyAgICAgICAgT2JqZWN0LmNyZWF0ZSh0YXJn
ZXQpLAorICAgICAgICBPYmplY3QuY3JlYXRlKE9iamVjdC5jcmVhdGUodGFyZ2V0KSksCisgICAg
ICAgIG5ldyBQcm94eSh0YXJnZXQsIHt9KSwKKyAgICAgICAgbmV3IFByb3h5KHRhcmdldCwgUmVm
bGVjdCksCisgICAgXSkKKyAgICAgICAgdGVzdFNldFJlc3VsdEludGVybmFsKHRhcmdldCwga2V5
LCByZWNlaXZlciwgZXhwZWN0ZWRSZXN1bHQpOworCisgICAgY2xlYW5VcCgpOworfQorCitmdW5j
dGlvbiBwdXRTZXR0ZXJPblByb3RvdHlwZSh0YXJnZXQsIGtleSwgc2V0KSB7CisgICAgY29uc3Qg
ZGVzY3JpcHRvciA9IHsgc2V0LCBjb25maWd1cmFibGU6IHRydWUgfTsKKyAgICBjb25zdCBjdXJy
ZW50UHJvdG90eXBlID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHRhcmdldCk7CisgICAgY29uc3Qg
bmV3UHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShudWxsLCB7IFtrZXldOiBkZXNjcmlwdG9yIH0p
OworCisgICAgaWYgKFJlZmxlY3Quc2V0UHJvdG90eXBlT2YodGFyZ2V0LCBuZXdQcm90b3R5cGUp
KQorICAgICAgICByZXR1cm4gKCkgPT4geyBPYmplY3Quc2V0UHJvdG90eXBlT2YodGFyZ2V0LCBj
dXJyZW50UHJvdG90eXBlKTsgfTsKKworICAgIGlmIChjdXJyZW50UHJvdG90eXBlICE9PSBudWxs
ICYmIFJlZmxlY3QuZGVmaW5lUHJvcGVydHkoY3VycmVudFByb3RvdHlwZSwga2V5LCBkZXNjcmlw
dG9yKSkKKyAgICAgICAgcmV0dXJuICgpID0+IHsgInVzZSBzdHJpY3QiOyBkZWxldGUgY3VycmVu
dFByb3RvdHlwZVtrZXldOyB9OworCisgICAgdGhyb3cgbmV3IEVycm9yKCJUaGlzIGlzIHVucmVh
Y2hhYmxlOiBhdCBsZWFzdCBvbmUgYXBwcm9hY2ggc2hvdWxkIHN1Y2NlZWQhIik7Cit9CisKK2Z1
bmN0aW9uIHRlc3RTZXRSZXN1bHRJbnRlcm5hbCh0YXJnZXQsIGtleSwgcmVjZWl2ZXIsIGV4cGVj
dGVkUmVzdWx0KSB7CisgICAgcmVjZWl2ZXJba2V5XSA9IFRFU1RfVkFMVUU7CisgICAgc2hvdWxk
QmUocmVjZWl2ZXJba2V5XSA9PT0gVEVTVF9WQUxVRSwgZXhwZWN0ZWRSZXN1bHQsIGtleSk7CisK
KyAgICB0ZXN0U2V0UmVzdWx0U3RyaWN0KHJlY2VpdmVyLCBrZXksIGV4cGVjdGVkUmVzdWx0KTsK
KworICAgIGlmIChyZWNlaXZlciA9PT0gT2JqZWN0KHJlY2VpdmVyKSkKKyAgICAgICAgc2hvdWxk
QmUoUmVmbGVjdC5zZXQocmVjZWl2ZXIsIGtleSwgVEVTVF9WQUxVRSksIGV4cGVjdGVkUmVzdWx0
LCBrZXkpOworICAgIHNob3VsZEJlKFJlZmxlY3Quc2V0KHRhcmdldCwga2V5LCBURVNUX1ZBTFVF
LCByZWNlaXZlciksIGV4cGVjdGVkUmVzdWx0LCBrZXkpOworfQorCitmdW5jdGlvbiB0ZXN0U2V0
UmVzdWx0U3RyaWN0KHJlY2VpdmVyLCBrZXksIGV4cGVjdGVkUmVzdWx0KSB7CisgICAgInVzZSBz
dHJpY3QiOworICAgIGlmIChleHBlY3RlZFJlc3VsdCkgeworICAgICAgICByZWNlaXZlcltrZXld
ID0gVEVTVF9WQUxVRTsKKyAgICAgICAgc2hvdWxkQmUocmVjZWl2ZXJba2V5XSwgVEVTVF9WQUxV
RSwga2V5KTsKKyAgICB9IGVsc2UKKyAgICAgICAgc2hvdWxkVGhyb3dUeXBlRXJyb3IoKCkgPT4g
eyByZWNlaXZlcltrZXldID0gVEVTVF9WQUxVRTsgfSwga2V5KTsKK30KKworZnVuY3Rpb24gc2hv
dWxkQmUoYWN0dWFsLCBleHBlY3RlZCwga2V5KSB7CisgICAgaWYgKGFjdHVhbCAhPT0gZXhwZWN0
ZWQpCisgICAgICAgIHRocm93IG5ldyBFcnJvcihgS2V5OiAke1N0cmluZyhrZXkpfS4gJHthY3R1
YWx9ICE9PSAke2V4cGVjdGVkfWApOworfQorCitmdW5jdGlvbiBzaG91bGRUaHJvd1R5cGVFcnJv
cihmdW5jLCBrZXkpIHsKKyAgICBsZXQgZXJyb3JUaHJvd24gPSBmYWxzZTsKKyAgICB0cnkgewor
ICAgICAgICBmdW5jKCk7CisgICAgfSBjYXRjaCAoZXJyb3IpIHsKKyAgICAgICAgZXJyb3JUaHJv
d24gPSB0cnVlOworICAgICAgICBpZiAoZXJyb3IuY29uc3RydWN0b3IgIT09IFR5cGVFcnJvcikK
KyAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgS2V5OiAke1N0cmluZyhrZXkpfS4gQmFkIGVy
cm9yOiAke2Vycm9yfWApOworICAgIH0KKyAgICBpZiAoIWVycm9yVGhyb3duKQorICAgICAgICB0
aHJvdyBuZXcgRXJyb3IoYEtleTogJHtTdHJpbmcoa2V5KX0uIERpZG4ndCB0aHJvdyFgKTsKK30K
SW5kZXg6IEpTVGVzdHMvc3RyZXNzL3R5cGVkLWFycmF5LWNhbm9uaWNhbC1udW1lcmljLWluZGV4
LXN0cmluZy1zZXQuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3MvdHlwZWQtYXJyYXkt
Y2Fub25pY2FsLW51bWVyaWMtaW5kZXgtc3RyaW5nLXNldC5qcwkobm9uZXhpc3RlbnQpCisrKyBK
U1Rlc3RzL3N0cmVzcy90eXBlZC1hcnJheS1jYW5vbmljYWwtbnVtZXJpYy1pbmRleC1zdHJpbmct
c2V0LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTggQEAKKyd1c2Ugc3RyaWN0JzsKK2Nv
bnN0IFR5cGVkQXJyYXlzID0gW1VpbnQ4Q2xhbXBlZEFycmF5LCBVaW50OEFycmF5LCBVaW50MTZB
cnJheSwgVWludDMyQXJyYXksIEludDhBcnJheSwgSW50MTZBcnJheSwgSW50MzJBcnJheSwgRmxv
YXQzMkFycmF5LCBGbG9hdDY0QXJyYXldOworY29uc3QgY2Fub25pY2FsTnVtZXJpY0luZGV4U3Ry
aW5ncyA9IFsnLTAnLCAnLTEnLCAnLTMuMTQnLCAnSW5maW5pdHknLCAnLUluZmluaXR5JywgJ05h
TicsICcwLjUnLCAnNDI5NDk2NzI5NScsICc0Mjk0OTY3Mjk2J107CisKK2Z1bmN0aW9uIGFzc2Vy
dCh4LCBrZXkpIHsKKyAgICBpZiAoIXgpCisgICAgICAgIHRocm93IG5ldyBFcnJvcihgQmFkIGFz
c2VydGlvbiEgS2V5OiAnJHtrZXl9J2ApOworfQorCitmb3IgKGNvbnN0IFR5cGVkQXJyYXkgb2Yg
VHlwZWRBcnJheXMpIHsKKyAgICBmb3IgKGNvbnN0IGtleSBvZiBjYW5vbmljYWxOdW1lcmljSW5k
ZXhTdHJpbmdzKSB7CisgICAgICAgIGNvbnN0IGFzc2VydFByb3RvdHlwZVByb3BlcnR5SXNVbnJl
YWNoYWJsZSA9ICgpID0+IHsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb25zdCB0
QSA9IG5ldyBUeXBlZEFycmF5OworICAgICAgICAgICAgICAgIHRBW2tleV0gPSAxOworICAgICAg
ICAgICAgICAgIGFzc2VydCghdEEuaGFzT3duUHJvcGVydHkoa2V5KSwga2V5KTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNvbnN0IHRBID0gbmV3IFR5
cGVkQXJyYXk7CisgICAgICAgICAgICAgICAgY29uc3QgaGVpciA9IE9iamVjdC5jcmVhdGUodEEp
OworICAgICAgICAgICAgICAgIGhlaXJba2V5XSA9IDI7CisKKyAgICAgICAgICAgICAgICBhc3Nl
cnQoIXRBLmhhc093blByb3BlcnR5KGtleSksIGtleSk7CisgICAgICAgICAgICAgICAgYXNzZXJ0
KCFoZWlyLmhhc093blByb3BlcnR5KGtleSksIGtleSk7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb25zdCB0YXJnZXQgPSB7fTsKKyAgICAgICAgICAg
ICAgICBjb25zdCByZWNlaXZlciA9IG5ldyBUeXBlZEFycmF5OworCisgICAgICAgICAgICAgICAg
YXNzZXJ0KCFSZWZsZWN0LnNldCh0YXJnZXQsIGtleSwgMywgcmVjZWl2ZXIpLCBrZXkpOworICAg
ICAgICAgICAgICAgIGFzc2VydCghdGFyZ2V0Lmhhc093blByb3BlcnR5KGtleSksIGtleSk7Cisg
ICAgICAgICAgICAgICAgYXNzZXJ0KCFyZWNlaXZlci5oYXNPd25Qcm9wZXJ0eShrZXkpLCBrZXkp
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY29uc3Qg
dEEgPSBuZXcgVHlwZWRBcnJheTsKKyAgICAgICAgICAgICAgICBjb25zdCB0YXJnZXQgPSBPYmpl
Y3QuY3JlYXRlKHRBKTsKKyAgICAgICAgICAgICAgICBjb25zdCByZWNlaXZlciA9IHt9OworCisg
ICAgICAgICAgICAgICAgYXNzZXJ0KFJlZmxlY3Quc2V0KHRhcmdldCwga2V5LCA0LCByZWNlaXZl
ciksIGtleSk7CisgICAgICAgICAgICAgICAgYXNzZXJ0KCF0QS5oYXNPd25Qcm9wZXJ0eShrZXkp
LCBrZXkpOworICAgICAgICAgICAgICAgIGFzc2VydCghdGFyZ2V0Lmhhc093blByb3BlcnR5KGtl
eSksIGtleSk7CisgICAgICAgICAgICAgICAgYXNzZXJ0KCFyZWNlaXZlci5oYXNPd25Qcm9wZXJ0
eShrZXkpLCBrZXkpOworICAgICAgICAgICAgfQorICAgICAgICB9OworCisgICAgICAgIE9iamVj
dC5kZWZpbmVQcm9wZXJ0eShUeXBlZEFycmF5LnByb3RvdHlwZSwga2V5LCB7CisgICAgICAgICAg
ICBzZXQoKSB7IHRocm93IG5ldyBFcnJvcihgJHtUeXBlZEFycmF5Lm5hbWV9LnByb3RvdHlwZVsn
JHtrZXl9J10gc2V0dGVyIHNob3VsZCBiZSB1bnJlYWNoYWJsZSFgKTsgfSwKKyAgICAgICAgICAg
IGNvbmZpZ3VyYWJsZTogdHJ1ZSwKKyAgICAgICAgfSk7CisgICAgICAgIGFzc2VydFByb3RvdHlw
ZVByb3BlcnR5SXNVbnJlYWNoYWJsZSgpOworCisgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0
eShUeXBlZEFycmF5LnByb3RvdHlwZSwga2V5LCB7IHdyaXRhYmxlOiBmYWxzZSB9KTsKKyAgICAg
ICAgYXNzZXJ0UHJvdG90eXBlUHJvcGVydHlJc1VucmVhY2hhYmxlKCk7CisgICAgfQorfQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNzY1ODUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTU3IEBACisy
MDIxLTA0LTI2ICBBbGV4ZXkgU2h2YXlrYSAgPHNodmFpa2FsZXNoQGdtYWlsLmNvbT4KKworICAg
ICAgICBbSlNDXSBPcmRpbmFyeVNldCBzaG91bGQgaW52b2tlIGN1c3RvbSBbW1NldF1dIG1ldGhv
ZHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNzkx
NgorCisgICAgICAgIFJldmlld2VkIGJ5IFl1c3VrZSBTdXp1a2kuCisKKyAgICAgICAgVGhpcyBw
YXRjaCBmaXhlcyBwdXRJbmxpbmVTbG93KCkgdG8gaGFuZGxlIHNwZWNpYWwgcHJvcGVydGllcyAo
bGlrZSBKU0Z1bmN0aW9uJ3MgIm5hbWUiCisgICAgICAgIGFuZCBKU0FycmF5J3MgImxlbmd0aCIp
IGluIHByb3RvdHlwZSBjaGFpbi4gV2hlbiBzdWNoIHByb3BlcnR5IGlzIGVuY291bnRlcmVkLCBw
cm90b3R5cGUKKyAgICAgICAgY2hhaW4gdHJhdmVyc2FsIGlzIHN0b3BwZWQ7IGlmIGl0J3MgcmVh
ZC1vbmx5LCBhIFR5cGVFcnJvciBpcyB0aHJvd24gaW4gc3RyaWN0IG1vZGUuCisKKyAgICAgICAg
VGhpcyBjaGFuZ2UgYWRkcyBPdmVycmlkZXNQdXQgb3V0IG9mIGxpbmUgdHlwZSBpbmZvIGZsYWcs
IGFuZCB1dGlsaXplcyBpdCBpbiBwdXRJbmxpbmVTbG93KCkKKyAgICAgICAgdG8gaW52b2tlIG92
ZXJyaWRlbiBtZXRob2RzLiBXaGlsZSB0aGlzIGFwcHJvYWNoIHJlcXVpcmVzIHB1dCgpIG1ldGhv
ZHMgdG8gYmUgYXdhcmUgb2YKKyAgICAgICAgYWx0ZXJlZCByZWNlaXZlcnMsIGl0IHJlbmRlcnMg
c2V2ZXJhbCBiZW5lZml0czoKKyAgICAgICAgICAxLiBwdXQoKSBtZXRob2QgY2FuIGJlIHVzZWQg
Zm9yIGJvdGggInJlYWwiIFtbU2V0XV0gb3ZlcnJpZGVzIGFuZCBzcGVjaWFsIHByb3BlcnRpZXMs
CisgICAgICAgICAgICAgd2l0aCBpdHMgcmV0dXJuIHZhbHVlIHJlbWFpbmluZyBgYm9vbGA7Cisg
ICAgICAgICAgMi4gaXQgaXMgc2ltcGxlciwgZmFzdGVyLCBhbmQgbW9yZSBwcmVkaWN0YWJsZSB0
aGFuIGNhbGxpbmcgW1tHZXRPd25Qcm9wZXJ0eV1dIGluCisgICAgICAgICAgICAgcHV0SW5saW5l
U2xvdygpIG9yIGFkZGluZyBkZWZpbmVPd25Qcm9wZXJ0eVZpYVB1dCgpIHRvIHRoZSBtZXRob2Qg
dGFibGUuCisKKyAgICAgICAgUmVtb3ZlcyBvcmRpbmFyeVNldFNsb3coKSBmb3Igbm9uLWluZGV4
IHByb3BlcnRpZXMsIHdoaWNoIGRpZG4ndCBpbnZva2Ugc29tZSBbW1NldF1dCisgICAgICAgIG1l
dGhvZHMgYXMgd2VsbC4gSW5zdGVhZCwgZGVmaW5lUHJvcGVydHlPblJlY2VpdmVyKCkgaXMgaW50
cm9kdWNlZCBmb3IgYWx0ZXJlZCByZWNlaXZlcnMsCisgICAgICAgIHdoaWNoIHBlcmZvcm1zIGNv
cnJlY3RseSB3aGVuIHJlYWNoZWQgYmVjYXVzZToKKyAgICAgICAgICAxLiBhbGwgc3BlY2lhbCBw
cm9wZXJ0aWVzIHdlcmUgYWxyZWFkeSBoYW5kbGVkICh1bmxlc3MgaXQncyBSZWZsZWN0LnNldCk7
CisgICAgICAgICAgMi4gcGVyZm9ybWluZyBwdXREaXJlY3RJbnRlcm5hbCgpIGlzIHVub2JzZXJ2
YWJsZSAodW5sZXNzIFByb3h5T2JqZWN0IHdhcyBzZWVuKTsKKyAgICAgICAgICAzLiBwdXREaXJl
Y3RJbnRlcm5hbCgpIG5vdyBmdWxseSBpbXBsZW1lbnRzIHByb3BlcnR5IGRlZmluaXRpb24gb2Yg
T3JkaW5hcnlTZXQgWzFdOworICAgICAgICAgIDQuIHB1dCgpIG92ZXJyaWRlIGlzIHJlcXVpcmVk
IGlmIGEgc3BlYyBkZWZpbmVzIGN1c3RvbSBbW0RlZmluZU93blByb3BlcnR5XV0uCisKKyAgICAg
ICAgU2luY2UgaW5kZXhlZCBwdXRzIGhhbmRsZSBvdmVycmlkZXMgLyBhbHRlcmVkIHJlY2VpdmVy
cyBxdWl0ZSBkaWZmZXJlbnRseSwgdGhleSB3aWxsCisgICAgICAgIGJlIGZpeGVkIGluIGEgZm9s
bG93LXVwLCBjb21wbGV0ZWx5IHJlbW92aW5nIG9yZGluYXJ5U2V0U2xvdygpLgorCisgICAgICAg
IEFsc28sIGJ5IG1lcmdpbmcgcHV0RW50cnkoKSAvIHB1dFRvUHJpbWl0aXZlKCkgaW50byBwdXRJ
bmxpbmVTbG93KCkgYW5kIGludHJvZHVjaW5nCisgICAgICAgIHB1dElubGluZUZhc3RSZXBsYWNp
bmdTdGF0aWNQcm9wZXJ0eUlmTmVlZGVkKCkgaGVscGVyLCB0aGlzIHBhdGNoIGZpeGVzIGEgZmV3
IGJ1Z3M6CisgICAgICAgICAgMS4gRGlyZWN0IFtbU2V0XV0gdG8gbm9uLXJlaWZpZWQgc3RhdGlj
IHByb3BlcnR5IG5vdyBwcmVzZXJ2ZXMgaXRzIGF0dHJpYnV0ZXMgd2hlbiByZXBsYWNpbmcgW1tW
YWx1ZV1dLgorICAgICAgICAgIDIuIFByb3RvdHlwZSBjaGFpbiBbW1NldF1dIHRvIG5vbi1yZWlm
aWVkIHN0YXRpYyBwcm9wZXJ0eSBub3cgdGhyb3dzIGlmIHJlY2VpdmVyIGlzIG5vbi1leHRlbnNp
YmxlLgorICAgICAgICAgIDMuIE5vbi1yZWlmaWVkIHN0YXRpYyB3cml0YWJsZSBwcm9wZXJ0eSBu
b3cgc2hhZG93cyByZWFkLW9ubHkgb25lIHRoYXQgaXMgZnVydGhlciBpbiBwcm90b3R5cGUgY2hh
aW4uCisgICAgICAgICAgNC4gTm9uLXJlaWZpZWQgc3RhdGljIHByb3BlcnRpZXMgaW4gcHJvdG90
eXBlIGNoYWluIG9mIGEgcHJpbWl0aXZlIGFyZSBub3cgY29uc2lkZXJlZC4KKworICAgICAgICBG
aXhlcyBhIGZldyBpc3N1ZXMgdGhhdCB3ZXJlIHByZXZpb3VzbHkgdW5vYnNlcnZhYmxlOgorICAg
ICAgICAgIDEuIFByb3BlcnR5QXR0cmlidXRlOjpDdXN0b21WYWx1ZSBpcyBub3cgdW5zZXQgd2hl
biBhIHNldHRlci1sZXNzIHByb3BlcnR5IGlzIHJlYXNzaWduZWQuCisgICAgICAgICAgMi4gdWlu
dDY0X3QgcHV0QnlJbmRleElubGluZSgpIG5vdyBjYWxscyBwdXQoKSB2aWEgbWV0aG9kIHRhYmxl
IGxpa2UgdWludDMyX3QgY291bnRlcnBhcnQuCisKKyAgICAgICAgT3RoZXIgbm90YWJsZSByZWZh
Y3RvcnM6CisgICAgICAgICAgMS4gSW5saW5lcyBjYWxsQ3VzdG9tU2V0dGVyKCksIGRyb3BwaW5n
IHdlaXJkIFRyaVN0YXRlIHJldHVybiB2YWx1ZS4KKyAgICAgICAgICAyLiBTaW1wbGlmaWVzIGlu
aXRpYWxpemF0aW9uIG9mIFN0cmluZ1Byb3RvdHlwZS4KKyAgICAgICAgICAzLiBTaW1wbGlmaWVz
IGlzVGhpc1ZhbHVlQWx0ZXJlZCgpIHRvIHBvaW50ZXIgY29tcGFyaXNvbnMgYXQgbm9uLUpTUHJv
eHkgY2FsbCBzaXRlcy4KKyAgICAgICAgICA0LiBSZW1vdmVzIGRvUHV0UHJvcGVydHlTZWN1cml0
eUNoZWNrKCkgbWV0aG9kcyBhcyB0aGUgc2FtZSBjaGVja3MgYXJlIHBlcmZvcm1lZCBieSBwdXQo
KSBtZXRob2RzLgorICAgICAgICAgIDUuIFJlbW92ZXMgcHJvdG90eXBlQ2hhaW5NYXlJbnRlcmNl
cHRTdG9yZVRvKCksIHdoaWNoIHByZXR0eSBtdWNoIGR1cGxpY2F0ZWQgY2FuUGVyZm9ybUZhc3RQ
dXRJbmxpbmUoKS4KKyAgICAgICAgICA2LiBSZW1vdmVzIGR1bW15IEpTQXJyYXlCdWZmZXJWaWV3
OjpwdXQoKSBtZXRob2QuCisgICAgICAgICAgNy4gUmVtb3ZlcyBub3cgdW51c2VkIGxvb2t1cFB1
dCgpLgorCisgICAgICAgIEFsaWducyBKU0Mgd2l0aCBWOCBhbmQgU3BpZGVyTW9ua2V5LgorCisg
ICAgICAgIFRoaXMgcGF0Y2ggY2FyZWZ1bGx5IHByZXNlcnZlcyB0aGUgY3VycmVudCBiZWhhdmlv
ciBvZiBSZWZsZWN0LnNldCB3aXRoIEN1c3RvbVZhbHVlCisgICAgICAgIGFuZCBwcm90b3R5cGUg
Y2hhaW4gW1tTZXRdXSB0byBhIEpTQ2FsbGJhY2tPYmplY3QgLyBsZWdhY3kgcGxhdGZvcm0gb2Jq
ZWN0LgorCisgICAgICAgIFRoaXMgY2hhbmdlIGlzIHBlcmZvcm1hbmNlLW5ldXRyYWwgb24gL3B1
dC8gbWljcm9iZW5jaG1hcmtzIGFzIGl0IGRvZXNuJ3QgYWZmZWN0CisgICAgICAgIGNhY2hpbmcs
IG9ubHkgdGhlIHNsb3cgcGF0aC4gUmVmbGVjdC5zZXQgd2l0aCBKU0ZpbmFsT2JqZWN0IHJlY2Vp
dmVyIGlzIDEzMCUgZmFzdGVyLgorICAgICAgICBwdXRJbmxpbmVTbG93KCkgbWljcm9iZW5jaG1h
cmtzIHByb2dyZXNzIGJ5IDQtMTglLgorCisgICAgICAgIFsxXTogaHR0cHM6Ly90YzM5LmVzL2Vj
bWEyNjIvI3NlYy1vcmRpbmFyeXNldHdpdGhvd25kZXNjcmlwdG9yIChzdGVwIDMpCisKKyAgICAg
ICAgKiBBUEkvSlNDYWxsYmFja09iamVjdC5oOgorICAgICAgICAqIEFQSS9KU0NhbGxiYWNrT2Jq
ZWN0RnVuY3Rpb25zLmg6CisgICAgICAgIChKU0M6OkpTQ2FsbGJhY2tPYmplY3Q8UGFyZW50Pjo6
cHV0KToKKyAgICAgICAgKiBBUEkvdGVzdHMvdGVzdGFwaVNjcmlwdHMvdGVzdGFwaS5qczoKKyAg
ICAgICAgKiBkZWJ1Z2dlci9EZWJ1Z2dlclNjb3BlLmg6CisgICAgICAgICogcnVudGltZS9DbGFz
c0luZm8uaDoKKyAgICAgICAgKiBydW50aW1lL0Nsb25lZEFyZ3VtZW50cy5oOgorICAgICAgICAq
IHJ1bnRpbWUvQ3VzdG9tR2V0dGVyU2V0dGVyLmNwcDoKKyAgICAgICAgKEpTQzo6Y2FsbEN1c3Rv
bVNldHRlcik6IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9DdXN0b21HZXR0ZXJTZXR0ZXIu
aDoKKyAgICAgICAgKiBydW50aW1lL0Vycm9yQ29uc3RydWN0b3IuaDoKKyAgICAgICAgKiBydW50
aW1lL0Vycm9ySW5zdGFuY2UuaDoKKyAgICAgICAgKiBydW50aW1lL0dlbmVyaWNBcmd1bWVudHMu
aDoKKyAgICAgICAgKiBydW50aW1lL0dlbmVyaWNBcmd1bWVudHNJbmxpbmVzLmg6CisgICAgICAg
IChKU0M6OkdlbmVyaWNBcmd1bWVudHM8VHlwZT46OnB1dCk6CisgICAgICAgICogcnVudGltZS9H
ZXR0ZXJTZXR0ZXIuaDoKKyAgICAgICAgKiBydW50aW1lL0pTQXJyYXkuY3BwOgorICAgICAgICAo
SlNDOjpKU0FycmF5OjpwdXQpOgorICAgICAgICAqIHJ1bnRpbWUvSlNBcnJheS5oOgorICAgICAg
ICAqIHJ1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuY3BwOgorICAgICAgICAoSlNDOjpKU0FycmF5
QnVmZmVyVmlldzo6cHV0KTogRGVsZXRlZC4KKyAgICAgICAgKiBydW50aW1lL0pTQXJyYXlCdWZm
ZXJWaWV3Lmg6CisgICAgICAgICogcnVudGltZS9KU0NKU1ZhbHVlLmNwcDoKKyAgICAgICAgKEpT
Qzo6SlNWYWx1ZTo6cHV0VG9QcmltaXRpdmUpOgorICAgICAgICAqIHJ1bnRpbWUvSlNDZWxsLmNw
cDoKKyAgICAgICAgKEpTQzo6SlNDZWxsOjpkb1B1dFByb3BlcnR5U2VjdXJpdHlDaGVjayk6IERl
bGV0ZWQuCisgICAgICAgICogcnVudGltZS9KU0NlbGwuaDoKKyAgICAgICAgKiBydW50aW1lL0pT
RnVuY3Rpb24uY3BwOgorICAgICAgICAoSlNDOjpKU0Z1bmN0aW9uOjpwdXQpOgorICAgICAgICAq
IHJ1bnRpbWUvSlNGdW5jdGlvbi5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNHZW5lcmljVHlwZWRB
cnJheVZpZXcuaDoKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsTGV4aWNhbEVudmlyb25tZW50
Lmg6CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHA6CisgICAgICAgIChKU0M6
OkpTR2xvYmFsT2JqZWN0OjpwdXQpOgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3Qu
aDoKKyAgICAgICAgKiBydW50aW1lL0pTTGV4aWNhbEVudmlyb25tZW50Lmg6CisgICAgICAgICog
cnVudGltZS9KU01vZHVsZUVudmlyb25tZW50Lmg6CisgICAgICAgICogcnVudGltZS9KU01vZHVs
ZU5hbWVzcGFjZU9iamVjdC5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNPYmplY3QuY3BwOgorICAg
ICAgICAoSlNDOjpKU09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90KToKKyAgICAgICAgKEpTQzo6
SlNPYmplY3Q6OnB1dElubGluZVNsb3cpOgorICAgICAgICAoSlNDOjpkZWZpbmVQcm9wZXJ0eU9u
UmVjZWl2ZXJTbG93KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmRlZmluZVByb3BlcnR5T25S
ZWNlaXZlcik6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpwdXRJbmxpbmVGYXN0UmVwbGFjaW5n
U3RhdGljUHJvcGVydHlJZk5lZWRlZCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpkb1B1dFBy
b3BlcnR5U2VjdXJpdHlDaGVjayk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpw
cm90b3R5cGVDaGFpbk1heUludGVyY2VwdFN0b3JlVG8pOiBEZWxldGVkLgorICAgICAgICAqIHJ1
bnRpbWUvSlNPYmplY3QuaDoKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1dEJ5SW5kZXhJbmxp
bmUpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6aGFzTm9uUmVpZmllZFN0YXRpY1Byb3BlcnRp
ZXMpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90KToKKyAgICAg
ICAgKEpTQzo6SlNPYmplY3Q6OnB1dERpcmVjdCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpk
b1B1dFByb3BlcnR5U2VjdXJpdHlDaGVjayk6IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9K
U09iamVjdElubGluZXMuaDoKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNhblBlcmZvcm1GYXN0
UHV0SW5saW5lRXhjbHVkaW5nUHJvdG8pOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cHV0SW5s
aW5lRm9ySlNPYmplY3QpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cHV0SW5saW5lRmFzdCk6
CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpwdXREaXJlY3RJbnRlcm5hbCk6CisgICAgICAgICog
cnVudGltZS9KU1Byb3h5Lmg6CisgICAgICAgICogcnVudGltZS9KU1R5cGVJbmZvLmg6CisgICAg
ICAgIChKU0M6OlR5cGVJbmZvOjpoYXNTdGF0aWNQcm9wZXJ0eVRhYmxlIGNvbnN0KToKKyAgICAg
ICAgKEpTQzo6VHlwZUluZm86Om92ZXJyaWRlc1B1dCBjb25zdCk6CisgICAgICAgIChKU0M6OlR5
cGVJbmZvOjpnZXRPd25Qcm9wZXJ0eVNsb3RNYXlCZVdyb25nQWJvdXREb250RW51bSBjb25zdCk6
CisgICAgICAgIChKU0M6OlR5cGVJbmZvOjpoYXNQdXRQcm9wZXJ0eVNlY3VyaXR5Q2hlY2sgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvTG9va3VwLmg6CisgICAgICAgIChKU0M6
OnB1dEVudHJ5KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6bG9va3VwUHV0KTogRGVsZXRlZC4K
KyAgICAgICAgKiBydW50aW1lL1Byb3BlcnR5U2xvdC5oOgorICAgICAgICAqIHJ1bnRpbWUvUHJv
eHlPYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpQcm94eU9iamVjdDo6cHV0KToKKyAgICAgICAg
KiBydW50aW1lL1Byb3h5T2JqZWN0Lmg6CisgICAgICAgICogcnVudGltZS9QdXRQcm9wZXJ0eVNs
b3QuaDoKKyAgICAgICAgKEpTQzo6UHV0UHJvcGVydHlTbG90OjpQdXRQcm9wZXJ0eVNsb3QpOgor
ICAgICAgICAoSlNDOjpQdXRQcm9wZXJ0eVNsb3Q6OmNvbnRleHQgY29uc3QpOgorICAgICAgICAo
SlNDOjpQdXRQcm9wZXJ0eVNsb3Q6OmlzVGFpbnRlZEJ5T3BhcXVlT2JqZWN0IGNvbnN0KToKKyAg
ICAgICAgKEpTQzo6UHV0UHJvcGVydHlTbG90OjpzZXRJc1RhaW50ZWRCeU9wYXF1ZU9iamVjdCk6
CisgICAgICAgICogcnVudGltZS9SZWZsZWN0T2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6SlND
X0RFRklORV9IT1NUX0ZVTkNUSU9OKToKKyAgICAgICAgKiBydW50aW1lL1JlZ0V4cE9iamVjdC5j
cHA6CisgICAgICAgIChKU0M6OlJlZ0V4cE9iamVjdDo6cHV0KToKKyAgICAgICAgKiBydW50aW1l
L1JlZ0V4cE9iamVjdC5oOgorICAgICAgICAqIHJ1bnRpbWUvU3RyaW5nT2JqZWN0LmNwcDoKKyAg
ICAgICAgKEpTQzo6U3RyaW5nT2JqZWN0OjpwdXQpOgorICAgICAgICAqIHJ1bnRpbWUvU3RyaW5n
T2JqZWN0Lmg6CisgICAgICAgICogcnVudGltZS9TdHJpbmdQcm90b3R5cGUuY3BwOgorICAgICAg
ICAoSlNDOjpTdHJpbmdQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6
U3RyaW5nUHJvdG90eXBlOjpjcmVhdGUpOgorICAgICAgICAqIHJ1bnRpbWUvU3RyaW5nUHJvdG90
eXBlLmg6CisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmUuY3BwOgorICAgICAgICAoSlNDOjpT
dHJ1Y3R1cmU6OnZhbGlkYXRlRmxhZ3MpOgorICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlLmg6
CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6aGFzTm9uUmVpZmllZFN0YXRpY1Byb3BlcnRpZXMg
Y29uc3QpOgorICAgICAgICAqIHRvb2xzL0pTRG9sbGFyVk0uY3BwOgorCiAyMDIxLTA0LTIzICBN
aWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgogCiAgICAgICAgIFtZQVJSIEludGVy
cHJldGVyXSBJbXByb3BlciBiYWNrdHJhY2sgb2YgcGFyZW50aGVzZXMgd2l0aCBub24temVybyBi
YXNlZCBncmVlZHkgcXVhbnRpZmllcnMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkv
SlNDYWxsYmFja09iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9B
UEkvSlNDYWxsYmFja09iamVjdC5oCShyZXZpc2lvbiAyNzY1ODUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMTI5LDcg
KzEyOSw3IEBAIHRlbXBsYXRlIDxjbGFzcyBQYXJlbnQ+CiBjbGFzcyBKU0NhbGxiYWNrT2JqZWN0
IGZpbmFsIDogcHVibGljIFBhcmVudCB7CiBwdWJsaWM6CiAgICAgdXNpbmcgQmFzZSA9IFBhcmVu
dDsKLSAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6
U3RydWN0dXJlRmxhZ3MgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNH
ZXRPd25TcGVjaWFsUHJvcGVydHlOYW1lcyB8IE92ZXJyaWRlc0dldENhbGxEYXRhIHwgSW50ZXJj
ZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8IElt
cGxlbWVudHNIYXNJbnN0YW5jZSB8IFByb2hpYml0c1Byb3BlcnR5Q2FjaGluZyB8IEdldE93blBy
b3BlcnR5U2xvdE1heUJlV3JvbmdBYm91dERvbnRFbnVtOworICAgIHN0YXRpYyBjb25zdGV4cHIg
dW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IE92ZXJyaWRl
c0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRlc0dldE93blNwZWNpYWxQcm9wZXJ0eU5hbWVz
IHwgT3ZlcnJpZGVzR2V0Q2FsbERhdGEgfCBPdmVycmlkZXNQdXQgfCBJbnRlcmNlcHRzR2V0T3du
UHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgSW1wbGVtZW50c0hh
c0luc3RhbmNlIHwgUHJvaGliaXRzUHJvcGVydHlDYWNoaW5nIHwgR2V0T3duUHJvcGVydHlTbG90
TWF5QmVXcm9uZ0Fib3V0RG9udEVudW07CiAgICAgc3RhdGljX2Fzc2VydCghKFN0cnVjdHVyZUZs
YWdzICYgSW1wbGVtZW50c0RlZmF1bHRIYXNJbnN0YW5jZSksICJ1c2luZyBjdXN0b21IYXNJbnN0
YW5jZSIpOwogCiAgICAgfkpTQ2FsbGJhY2tPYmplY3QoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdEZ1bmN0aW9ucy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdEZ1bmN0aW9ucy5oCShyZXZp
c2lvbiAyNzY1ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmpl
Y3RGdW5jdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMjU0LDYgKzI1NCw5IEBAIGJvb2wgSlND
YWxsYmFja09iamVjdDxQYXJlbnQ+OjpwdXQoSlNDZWwKICAgICBKU09iamVjdFJlZiB0aGlzUmVm
ID0gdG9SZWYoanNDYXN0PEpTT2JqZWN0Kj4odGhpc09iamVjdCkpOwogICAgIFJlZlB0cjxPcGFx
dWVKU1N0cmluZz4gcHJvcGVydHlOYW1lUmVmOwogICAgIEpTVmFsdWVSZWYgdmFsdWVSZWYgPSB0
b1JlZihnbG9iYWxPYmplY3QsIHZhbHVlKTsKKworICAgIGlmIChVTkxJS0VMWShpc1RoaXNWYWx1
ZUFsdGVyZWQoc2xvdCwgdGhpc09iamVjdCkpKQorICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4o
c2NvcGUsIFBhcmVudDo6cHV0KHRoaXNPYmplY3QsIGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1l
LCB2YWx1ZSwgc2xvdCkpOwogICAgIAogICAgIGlmIChTdHJpbmdJbXBsKiBuYW1lID0gcHJvcGVy
dHlOYW1lLnVpZCgpKSB7CiAgICAgICAgIGZvciAoSlNDbGFzc1JlZiBqc0NsYXNzID0gdGhpc09i
amVjdC0+Y2xhc3NSZWYoKTsganNDbGFzczsganNDbGFzcyA9IGpzQ2xhc3MtPnBhcmVudENsYXNz
KSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL3Rlc3RhcGlTY3JpcHRz
L3Rlc3RhcGkuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0
cy90ZXN0YXBpU2NyaXB0cy90ZXN0YXBpLmpzCShyZXZpc2lvbiAyNzY1ODUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL3Rlc3RhcGlTY3JpcHRzL3Rlc3RhcGkuanMJKHdvcmtp
bmcgY29weSkKQEAgLTIwOCw2ICsyMDgsMjYgQEAgc2hvdWxkQmUoInN5bWJvbFRvU3RyaW5nVGFn
RGVzY3JpcHRvci5jbwogTXlPYmplY3RbU3ltYm9sLnRvU3RyaW5nVGFnXSA9ICJGb28iOwogc2hv
dWxkQmUoIk9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChNeU9iamVjdCkiLCAiW29iamVj
dCBGb29dIik7CiAKK3ZhciBNeU9iamVjdEhlaXIgPSBPYmplY3QuY3JlYXRlKE15T2JqZWN0KTsK
K015T2JqZWN0SGVpci50aHJvd09uU2V0ID0gMjI7Cit2YXIgTXlPYmplY3RIZWlyVGhyb3dPblNl
dERlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE15T2JqZWN0SGVp
ciwgInRocm93T25TZXQiKTsKK3Nob3VsZEJlKCJ0eXBlb2YgTXlPYmplY3RIZWlyVGhyb3dPblNl
dERlc2NyaXB0b3IiLCAib2JqZWN0Iik7CitzaG91bGRCZSgiTXlPYmplY3RIZWlyVGhyb3dPblNl
dERlc2NyaXB0b3IudmFsdWUiLCAyMik7CitzaG91bGRCZSgiTXlPYmplY3RIZWlyVGhyb3dPblNl
dERlc2NyaXB0b3Iud3JpdGFibGUiLCB0cnVlKTsKK3Nob3VsZEJlKCJNeU9iamVjdEhlaXJUaHJv
d09uU2V0RGVzY3JpcHRvci5lbnVtZXJhYmxlIiwgdHJ1ZSk7CitzaG91bGRCZSgiTXlPYmplY3RI
ZWlyVGhyb3dPblNldERlc2NyaXB0b3IuY29uZmlndXJhYmxlIiwgdHJ1ZSk7CitzaG91bGRUaHJv
dygiTXlPYmplY3QudGhyb3dPblNldCA9IDIyIik7CisKK3ZhciBnbG9iYWxPYmplY3RIZWlyID0g
T2JqZWN0LmNyZWF0ZSh0aGlzKTsKK2dsb2JhbE9iamVjdEhlaXIuZ2xvYmFsU3RhdGljVmFsdWUy
ID0gMzM7Cit2YXIgZ2xvYmFsT2JqZWN0SGVpckdsb2JhbFN0YXRpY1ZhbHVlMkRlc2NyaXB0b3Ig
PSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbE9iamVjdEhlaXIsICJnbG9i
YWxTdGF0aWNWYWx1ZTIiKTsKK3Nob3VsZEJlKCJ0eXBlb2YgZ2xvYmFsT2JqZWN0SGVpckdsb2Jh
bFN0YXRpY1ZhbHVlMkRlc2NyaXB0b3IiLCAib2JqZWN0Iik7CitzaG91bGRCZSgiZ2xvYmFsT2Jq
ZWN0SGVpckdsb2JhbFN0YXRpY1ZhbHVlMkRlc2NyaXB0b3IudmFsdWUiLCAzMyk7CitzaG91bGRC
ZSgiZ2xvYmFsT2JqZWN0SGVpckdsb2JhbFN0YXRpY1ZhbHVlMkRlc2NyaXB0b3Iud3JpdGFibGUi
LCB0cnVlKTsKK3Nob3VsZEJlKCJnbG9iYWxPYmplY3RIZWlyR2xvYmFsU3RhdGljVmFsdWUyRGVz
Y3JpcHRvci5lbnVtZXJhYmxlIiwgdHJ1ZSk7CitzaG91bGRCZSgiZ2xvYmFsT2JqZWN0SGVpckds
b2JhbFN0YXRpY1ZhbHVlMkRlc2NyaXB0b3IuY29uZmlndXJhYmxlIiwgdHJ1ZSk7CitzaG91bGRC
ZSgidGhpcy5nbG9iYWxTdGF0aWNWYWx1ZTIiLCAzKTsKKwogZGVyaXZlZCA9IG5ldyBEZXJpdmVk
KCk7CiAKIHNob3VsZEJlKCJkZXJpdmVkIGluc3RhbmNlb2YgRGVyaXZlZCIsIHRydWUpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyU2NvcGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXJTY29wZS5oCShy
ZXZpc2lvbiAyNzY1ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdn
ZXJTY29wZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw3IEBAIGNsYXNzIEpTU2NvcGU7
CiBjbGFzcyBEZWJ1Z2dlclNjb3BlIGZpbmFsIDogcHVibGljIEpTTm9uRmluYWxPYmplY3Qgewog
cHVibGljOgogICAgIHVzaW5nIEJhc2UgPSBKU05vbkZpbmFsT2JqZWN0OwotICAgIHN0YXRpYyBj
b25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8
IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5TmFt
ZXM7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6
OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVz
R2V0T3duUHJvcGVydHlOYW1lcyB8IE92ZXJyaWRlc1B1dDsKIAogICAgIHRlbXBsYXRlPHR5cGVu
YW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2VzcyBtb2RlPgogICAgIHN0YXRpYyBJc29TdWJzcGFj
ZSogc3Vic3BhY2VGb3IoVk0mIHZtKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQ2xhc3NJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQ2xhc3NJbmZvLmgJKHJldmlzaW9uIDI3NjU4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0NsYXNzSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC02OCw5ICs2OCw2IEBAIHN0
cnVjdCBNZXRob2RUYWJsZSB7CiAgICAgdXNpbmcgR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEZ1
bmN0aW9uUHRyID0gYm9vbCAoKikoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIHVuc2lnbmVk
LCBQcm9wZXJ0eVNsb3QmKTsKICAgICBHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RnVuY3Rpb25Q
dHIgTUVUSE9EX1RBQkxFX0VOVFJZKGdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgpOwogCi0gICAg
dXNpbmcgRG9QdXRQcm9wZXJ0eVNlY3VyaXR5Q2hlY2tGdW5jdGlvblB0ciA9IHZvaWQgKCopKEpT
T2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIFB1dFByb3BlcnR5U2xvdCYp
OwotICAgIERvUHV0UHJvcGVydHlTZWN1cml0eUNoZWNrRnVuY3Rpb25QdHIgTUVUSE9EX1RBQkxF
X0VOVFJZKGRvUHV0UHJvcGVydHlTZWN1cml0eUNoZWNrKTsKLQogICAgIHVzaW5nIFRvVGhpc0Z1
bmN0aW9uUHRyID0gSlNWYWx1ZSAoKikoSlNDZWxsKiwgSlNHbG9iYWxPYmplY3QqLCBFQ01BTW9k
ZSk7CiAgICAgVG9UaGlzRnVuY3Rpb25QdHIgTUVUSE9EX1RBQkxFX0VOVFJZKHRvVGhpcyk7CiAK
QEAgLTE1OCw3ICsxNTUsNiBAQCBzdHJ1Y3QgTWV0aG9kVGFibGUgewogICAgICAgICAmQ2xhc3NO
YW1lOjpkZWxldGVQcm9wZXJ0eUJ5SW5kZXgsIFwKICAgICAgICAgJkNsYXNzTmFtZTo6Z2V0T3du
UHJvcGVydHlTbG90LCBcCiAgICAgICAgICZDbGFzc05hbWU6OmdldE93blByb3BlcnR5U2xvdEJ5
SW5kZXgsIFwKLSAgICAgICAgJkNsYXNzTmFtZTo6ZG9QdXRQcm9wZXJ0eVNlY3VyaXR5Q2hlY2ss
IFwKICAgICAgICAgJkNsYXNzTmFtZTo6dG9UaGlzLCBcCiAgICAgICAgICZDbGFzc05hbWU6OmRl
ZmF1bHRWYWx1ZSwgXAogICAgICAgICAmQ2xhc3NOYW1lOjpnZXRPd25Qcm9wZXJ0eU5hbWVzLCBc
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbG9uZWRBcmd1bWVudHMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbG9uZWRBcmd1bWVu
dHMuaAkocmV2aXNpb24gMjc2NTg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Q2xvbmVkQXJndW1lbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDcgQEAgbmFtZXNw
YWNlIEpTQyB7CiBjbGFzcyBDbG9uZWRBcmd1bWVudHMgZmluYWwgOiBwdWJsaWMgSlNOb25GaW5h
bE9iamVjdCB7CiBwdWJsaWM6CiAgICAgdXNpbmcgQmFzZSA9IEpTTm9uRmluYWxPYmplY3Q7Ci0g
ICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVj
dHVyZUZsYWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzR2V0T3du
U3BlY2lhbFByb3BlcnR5TmFtZXM7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1
Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVy
dHlTbG90IHwgT3ZlcnJpZGVzR2V0T3duU3BlY2lhbFByb3BlcnR5TmFtZXMgfCBPdmVycmlkZXNQ
dXQ7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3MgbW9k
ZT4KICAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0N1c3RvbUdldHRlclNldHRlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ3VzdG9tR2V0dGVyU2V0dGVy
LmNwcAkocmV2aXNpb24gMjc2NTg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Q3VzdG9tR2V0dGVyU2V0dGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsMjggKzI2LDEwIEBA
CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiQ3VzdG9tR2V0dGVyU2V0dGVyLmgiCiAK
LSNpbmNsdWRlICJKU0NKU1ZhbHVlSW5saW5lcy5oIgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25z
Lmg+Ci0KIG5hbWVzcGFjZSBKU0MgewogCiBTVEFUSUNfQVNTRVJUX0lTX1RSSVZJQUxMWV9ERVNU
UlVDVElCTEUoQ3VzdG9tR2V0dGVyU2V0dGVyKTsKIAogY29uc3QgQ2xhc3NJbmZvIEN1c3RvbUdl
dHRlclNldHRlcjo6c19pbmZvID0geyAiQ3VzdG9tR2V0dGVyU2V0dGVyIiwgbnVsbHB0ciwgbnVs
bHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShDdXN0b21HZXR0ZXJTZXR0ZXIpIH07
CiAKLVRyaVN0YXRlIGNhbGxDdXN0b21TZXR0ZXIoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgQ3VzdG9tR2V0dGVyU2V0dGVyOjpDdXN0b21TZXR0ZXIgc2V0dGVyLCBib29sIGlzQWNjZXNz
b3IsIEpTT2JqZWN0KiBzbG90QmFzZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIEpTVmFsdWUgdmFsdWUs
IFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCi17Ci0gICAgaWYgKGlzQWNjZXNzb3IpIHsKLSAg
ICAgICAgaWYgKCFzZXR0ZXIpCi0gICAgICAgICAgICByZXR1cm4gVHJpU3RhdGU6OkZhbHNlOwot
ICAgICAgICBzZXR0ZXIoZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlOjplbmNvZGUodGhpc1ZhbHVlKSwg
SlNWYWx1ZTo6ZW5jb2RlKHZhbHVlKSwgcHJvcGVydHlOYW1lKTsKLSAgICAgICAgLy8gQWx3YXlz
IHJldHVybiB0cnVlIGlmIHRoZXJlIGlzIGEgc2V0dGVyIGFuZCBpdCBpcyBvYnNlcnZlZCBhcyBh
biBhY2Nlc3NvciB0byB1c2Vycy4KLSAgICAgICAgcmV0dXJuIFRyaVN0YXRlOjpUcnVlOwotICAg
IH0KLQotICAgIGlmICghc2V0dGVyKQotICAgICAgICByZXR1cm4gVHJpU3RhdGU6OkluZGV0ZXJt
aW5hdGU7Ci0gICAgcmV0dXJuIHRyaVN0YXRlKHNldHRlcihnbG9iYWxPYmplY3QsIEpTVmFsdWU6
OmVuY29kZShzbG90QmFzZSksIEpTVmFsdWU6OmVuY29kZSh2YWx1ZSksIHByb3BlcnR5TmFtZSkp
OwotfQotCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0N1c3RvbUdldHRlclNldHRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0N1c3RvbUdldHRlclNldHRlci5oCShyZXZpc2lvbiAyNzY1ODUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DdXN0b21HZXR0ZXJTZXR0ZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtNzYsNiArNzYsNCBAQCBwcml2YXRlOgogICAgIEN1c3RvbVNldHRlciBt
X3NldHRlcjsKIH07CiAKLUpTX0VYUE9SVF9QUklWQVRFIFRyaVN0YXRlIGNhbGxDdXN0b21TZXR0
ZXIoSlNHbG9iYWxPYmplY3QqLCBDdXN0b21HZXR0ZXJTZXR0ZXI6OkN1c3RvbVNldHRlciwgYm9v
bCBpc0FjY2Vzc29yLCBKU09iamVjdCogc2xvdEJhc2UsIEpTVmFsdWUgdGhpc1ZhbHVlLCBKU1Zh
bHVlLCBQcm9wZXJ0eU5hbWUpOwotCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9yQ29uc3RydWN0b3IuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvckNvbnN0cnVjdG9yLmgJKHJldmlzaW9u
IDI3NjU4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9yQ29uc3RydWN0
b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQCBjbGFzcyBHZXR0ZXJTZXR0ZXI7
CiBjbGFzcyBFcnJvckNvbnN0cnVjdG9yIGZpbmFsIDogcHVibGljIEludGVybmFsRnVuY3Rpb24g
ewogcHVibGljOgogICAgIHVzaW5nIEJhc2UgPSBJbnRlcm5hbEZ1bmN0aW9uOworICAgIHN0YXRp
YyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFn
cyB8IE92ZXJyaWRlc1B1dDsKIAogICAgIHN0YXRpYyBFcnJvckNvbnN0cnVjdG9yKiBjcmVhdGUo
Vk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgRXJyb3JQcm90b3R5cGUqIGVycm9yUHJvdG90
eXBlLCBHZXR0ZXJTZXR0ZXIqKQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0Vycm9ySW5zdGFuY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9FcnJvckluc3RhbmNlLmgJKHJldmlzaW9uIDI3NjU4NSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9ySW5zdGFuY2UuaAkod29ya2luZyBjb3B5KQpAQCAt
MzAsNyArMzAsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIGNsYXNzIEVycm9ySW5zdGFuY2UgOiBwdWJs
aWMgSlNOb25GaW5hbE9iamVjdCB7CiBwdWJsaWM6CiAgICAgdXNpbmcgQmFzZSA9IEpTTm9uRmlu
YWxPYmplY3Q7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9
IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3Zl
cnJpZGVzR2V0T3duU3BlY2lhbFByb3BlcnR5TmFtZXM7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1
bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJpZGVz
R2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzR2V0T3duU3BlY2lhbFByb3BlcnR5TmFtZXMg
fCBPdmVycmlkZXNQdXQ7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzRGVzdHJ1Y3Rp
b24gPSB0cnVlOwogCiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqIGNlbGwpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljQXJndW1lbnRzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50cy5o
CShyZXZpc2lvbiAyNzY1ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5l
cmljQXJndW1lbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDcgKzM2LDcgQEAgdGVtcGxhdGU8
dHlwZW5hbWUgVHlwZT4KIGNsYXNzIEdlbmVyaWNBcmd1bWVudHMgOiBwdWJsaWMgSlNOb25GaW5h
bE9iamVjdCB7CiBwdWJsaWM6CiAgICAgdHlwZWRlZiBKU05vbkZpbmFsT2JqZWN0IEJhc2U7Ci0g
ICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVj
dHVyZUZsYWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzR2V0T3du
UHJvcGVydHlOYW1lcyB8IEludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldo
ZW5MZW5ndGhJc05vdFplcm87CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1
cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlT
bG90IHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlOYW1lcyB8IE92ZXJyaWRlc1B1dCB8IEludGVy
Y2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm87CiAK
IHByb3RlY3RlZDoKICAgICBHZW5lcmljQXJndW1lbnRzKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljQXJndW1l
bnRzSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0dlbmVyaWNBcmd1bWVudHNJbmxpbmVzLmgJKHJldmlzaW9uIDI3NjU4NSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNBcmd1bWVudHNJbmxpbmVzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEzNCw4ICsxMzQsOCBAQCBib29sIEdlbmVyaWNBcmd1bWVudHM8VHlwZT46OnB1
dChKU0NlbGwqCiAKICAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1h
cmd1bWVudHMtZXhvdGljLW9iamVjdHMtc2V0LXAtdi1yZWNlaXZlcgogICAgIC8vIEZhbGwgYmFj
ayB0byB0aGUgT3JkaW5hcnlTZXQgd2hlbiB0aGUgcmVjZWl2ZXIgaXMgYWx0ZXJlZCBmcm9tIHRo
ZSB0aGlzT2JqZWN0LgotICAgIGlmIChVTkxJS0VMWShpc1RoaXNWYWx1ZUFsdGVyZWQoc2xvdCwg
dGhpc09iamVjdCkpKQotICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIG9yZGluYXJ5
U2V0U2xvdyhnbG9iYWxPYmplY3QsIHRoaXNPYmplY3QsIGlkZW50LCB2YWx1ZSwgc2xvdC50aGlz
VmFsdWUoKSwgc2xvdC5pc1N0cmljdE1vZGUoKSkpOworICAgIGlmIChVTkxJS0VMWShzbG90LnRo
aXNWYWx1ZSgpICE9IHRoaXNPYmplY3QpKQorICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2Nv
cGUsIEJhc2U6OnB1dCh0aGlzT2JqZWN0LCBnbG9iYWxPYmplY3QsIGlkZW50LCB2YWx1ZSwgc2xv
dCkpOwogICAgIAogICAgIE9wdGlvbmFsPHVpbnQzMl90PiBpbmRleCA9IHBhcnNlSW5kZXgoaWRl
bnQpOwogICAgIGlmIChpbmRleCAmJiB0aGlzT2JqZWN0LT5pc01hcHBlZEFyZ3VtZW50KGluZGV4
LnZhbHVlKCkpKSB7CkBAIC0xNDMsOSArMTQzLDcgQEAgYm9vbCBHZW5lcmljQXJndW1lbnRzPFR5
cGU+OjpwdXQoSlNDZWxsKgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICBhdXRv
IHJlc3VsdCA9IEJhc2U6OnB1dCh0aGlzT2JqZWN0LCBnbG9iYWxPYmplY3QsIGlkZW50LCB2YWx1
ZSwgc2xvdCk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZmFsc2UpOwotICAgIFJF
TEVBU0VfQU5EX1JFVFVSTihzY29wZSwgcmVzdWx0KTsKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4o
c2NvcGUsIEJhc2U6OnB1dCh0aGlzT2JqZWN0LCBnbG9iYWxPYmplY3QsIGlkZW50LCB2YWx1ZSwg
c2xvdCkpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlPgpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvR2V0dGVyU2V0dGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvR2V0dGVyU2V0dGVyLmgJKHJldmlzaW9uIDI3NjU4NSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dldHRlclNldHRlci5oCSh3b3JraW5nIGNv
cHkpCkBAIC01NCw3ICs1NCw3IEBAIHByaXZhdGU6CiAKIHB1YmxpYzoKIAotICAgIHN0YXRpYyBj
b25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8
IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IFN0cnVjdHVyZUlzSW1tb3J0YWw7CisgICAg
c3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVy
ZUZsYWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzUHV0IHwgU3Ry
dWN0dXJlSXNJbW1vcnRhbDsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJz
cGFjZUFjY2Vzcz4KICAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwCShyZXZpc2lv
biAyNzY1ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjM4LDEwICsyMzgsNiBAQCBib29sIEpTQXJyYXk6OnB1dChKU0Nl
bGwqIGNlbGwsIEpTR2xvYmFsCiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwogCiAgICAgSlNBcnJheSogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0FycmF5Kj4oY2VsbCk7
Ci0KLSAgICBpZiAoVU5MSUtFTFkoaXNUaGlzVmFsdWVBbHRlcmVkKHNsb3QsIHRoaXNPYmplY3Qp
KSkKLSAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBvcmRpbmFyeVNldFNsb3coZ2xv
YmFsT2JqZWN0LCB0aGlzT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90LnRoaXNWYWx1
ZSgpLCBzbG90LmlzU3RyaWN0TW9kZSgpKSk7Ci0KICAgICB0aGlzT2JqZWN0LT5lbnN1cmVXcml0
YWJsZSh2bSk7CiAKICAgICBpZiAocHJvcGVydHlOYW1lID09IHZtLnByb3BlcnR5TmFtZXMtPmxl
bmd0aCkgewpAQCAtMjUxLDYgKzI0Nyw5IEBAIGJvb2wgSlNBcnJheTo6cHV0KEpTQ2VsbCogY2Vs
bCwgSlNHbG9iYWwKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogCisgICAg
ICAgIGlmIChVTkxJS0VMWShzbG90LnRoaXNWYWx1ZSgpICE9IHRoaXNPYmplY3QpKQorICAgICAg
ICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU09iamVjdDo6ZGVmaW5lUHJvcGVydHlP
blJlY2VpdmVyKGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCkpOworCiAg
ICAgICAgIHVuc2lnbmVkIG5ld0xlbmd0aCA9IHZhbHVlLnRvVUludDMyKGdsb2JhbE9iamVjdCk7
CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGZhbHNlKTsKICAgICAgICAgZG91
YmxlIHZhbHVlQXNOdW1iZXIgPSB2YWx1ZS50b051bWJlcihnbG9iYWxPYmplY3QpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaAkocmV2aXNpb24gMjc2NTg1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5oCSh3b3JraW5nIGNvcHkp
CkBAIC00MCw3ICs0MCw3IEBAIGNsYXNzIEpTQXJyYXkgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVj
dCAKIAogcHVibGljOgogICAgIHR5cGVkZWYgSlNOb25GaW5hbE9iamVjdCBCYXNlOwotICAgIHN0
YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVG
bGFncyB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRlc0dldE93blNwZWNp
YWxQcm9wZXJ0eU5hbWVzOworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJl
RmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xv
dCB8IE92ZXJyaWRlc0dldE93blNwZWNpYWxQcm9wZXJ0eU5hbWVzIHwgT3ZlcnJpZGVzUHV0Owog
CiAgICAgc3RhdGljIHNpemVfdCBhbGxvY2F0aW9uU2l6ZShDaGVja2VkPHNpemVfdD4gaW5saW5l
Q2FwYWNpdHkpCiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNB
cnJheUJ1ZmZlclZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmNwcAkocmV2aXNpb24gMjc2NTg1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xNzIsMTggKzE3Miw2IEBAIHZvaWQgSlNBcnJheUJ1ZmZlclZpZXc6OnZpc2l0Q2hp
bGRyZW5JbXAKIAogREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTQXJyYXlCdWZmZXJWaWV3KTsKIAot
Ym9vbCBKU0FycmF5QnVmZmVyVmlldzo6cHV0KAotICAgIEpTQ2VsbCogY2VsbCwgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2
YWx1ZSwKLSAgICBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCi17Ci0gICAgSlNBcnJheUJ1ZmZlclZp
ZXcqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNBcnJheUJ1ZmZlclZpZXcqPihjZWxsKTsKLQotICAg
IGlmIChVTkxJS0VMWShpc1RoaXNWYWx1ZUFsdGVyZWQoc2xvdCwgdGhpc09iamVjdCkpKQotICAg
ICAgICByZXR1cm4gb3JkaW5hcnlTZXRTbG93KGdsb2JhbE9iamVjdCwgdGhpc09iamVjdCwgcHJv
cGVydHlOYW1lLCB2YWx1ZSwgc2xvdC50aGlzVmFsdWUoKSwgc2xvdC5pc1N0cmljdE1vZGUoKSk7
Ci0gICAgCi0gICAgcmV0dXJuIEJhc2U6OnB1dCh0aGlzT2JqZWN0LCBnbG9iYWxPYmplY3QsIHBy
b3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpOwotfQotCiBBcnJheUJ1ZmZlciogSlNBcnJheUJ1ZmZl
clZpZXc6OnVuc2hhcmVkQnVmZmVyKCkKIHsKICAgICBBcnJheUJ1ZmZlciogcmVzdWx0ID0gcG9z
c2libHlTaGFyZWRCdWZmZXIoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTQXJyYXlCdWZmZXJWaWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuaAkocmV2aXNpb24gMjc2NTg1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuaAkod29ya2luZyBjb3B5
KQpAQCAtMTY5LDggKzE2OSw2IEBAIHByb3RlY3RlZDoKICAgICAKICAgICBKU19FWFBPUlRfUFJJ
VkFURSBKU0FycmF5QnVmZmVyVmlldyhWTSYsIENvbnN0cnVjdGlvbkNvbnRleHQmKTsKICAgICBK
U19FWFBPUlRfUFJJVkFURSB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7Ci0gICAgCi0gICAgc3Rh
dGljIGJvb2wgcHV0KEpTQ2VsbCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBKU1Zh
bHVlLCBQdXRQcm9wZXJ0eVNsb3QmKTsKIAogICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAg
ICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NKU1ZhbHVlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NKU1ZhbHVlLmNw
cAkocmV2aXNpb24gMjc2NTg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlND
SlNWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxMiw3ICsyMTIsNyBAQCBKU09iamVjdCog
SlNWYWx1ZTo6c3ludGhlc2l6ZVByb3RvdHlwZShKCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAK
LS8vIEVDTUEgOC43LjIKKy8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb3JkaW5hcnlz
ZXQKIGJvb2wgSlNWYWx1ZTo6cHV0VG9QcmltaXRpdmUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgUHV0UHJvcGVy
dHlTbG90JiBzbG90KQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKQEAgLTIy
MSw2OSArMjIxLDE0IEBAIGJvb2wgSlNWYWx1ZTo6cHV0VG9QcmltaXRpdmUoSlNHbG9iYWxPYmoK
ICAgICBpZiAoT3B0aW9uYWw8dWludDMyX3Q+IGluZGV4ID0gcGFyc2VJbmRleChwcm9wZXJ0eU5h
bWUpKQogICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIHB1dFRvUHJpbWl0aXZlQnlJ
bmRleChnbG9iYWxPYmplY3QsIGluZGV4LnZhbHVlKCksIHZhbHVlLCBzbG90LmlzU3RyaWN0TW9k
ZSgpKSk7CiAKKyAgICBpZiAoaXNTdHJpbmcoKSAmJiBwcm9wZXJ0eU5hbWUudWlkKCkgPT0gdm0u
cHJvcGVydHlOYW1lcy0+bGVuZ3RoLmltcGwoKSkKKyAgICAgICAgcmV0dXJuIHR5cGVFcnJvcihn
bG9iYWxPYmplY3QsIHNjb3BlLCBzbG90LmlzU3RyaWN0TW9kZSgpLCBSZWFkb25seVByb3BlcnR5
V3JpdGVFcnJvcik7CiAgICAgLy8gQ2hlY2sgaWYgdGhlcmUgYXJlIGFueSBzZXR0ZXJzIG9yIGdl
dHRlcnMgaW4gdGhlIHByb3RvdHlwZSBjaGFpbgogICAgIEpTT2JqZWN0KiBvYmogPSBzeW50aGVz
aXplUHJvdG90eXBlKGdsb2JhbE9iamVjdCk7CiAgICAgRVhDRVBUSU9OX0FTU0VSVCghIXNjb3Bl
LmV4Y2VwdGlvbigpID09ICFvYmopOwogICAgIGlmIChVTkxJS0VMWSghb2JqKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIEpTVmFsdWUgcHJvdG90eXBlOwotICAgIGlmIChwcm9wZXJ0eU5h
bWUgIT0gdm0ucHJvcGVydHlOYW1lcy0+dW5kZXJzY29yZVByb3RvKSB7Ci0gICAgICAgIHdoaWxl
ICh0cnVlKSB7Ci0gICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG9iai0+c3RydWN0
dXJlKHZtKTsKLSAgICAgICAgICAgIGlmIChzdHJ1Y3R1cmUtPmhhc1JlYWRPbmx5T3JHZXR0ZXJT
ZXR0ZXJQcm9wZXJ0aWVzRXhjbHVkaW5nUHJvdG8oKSB8fCBzdHJ1Y3R1cmUtPnR5cGVJbmZvKCku
aGFzUHV0UHJvcGVydHlTZWN1cml0eUNoZWNrKCkpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICBpZiAob2JqLT50eXBlKCkgPT0gUHJveHlPYmplY3RUeXBlKSB7Ci0gICAgICAg
ICAgICAgICAgYXV0byogcHJveHkgPSBqc0Nhc3Q8UHJveHlPYmplY3QqPihvYmopOwotICAgICAg
ICAgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgcHJveHktPlByb3h5T2JqZWN0Ojpw
dXQocHJveHksIGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCkpOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgcHJvdG90eXBlID0gb2JqLT5nZXRQcm90b3R5cGUodm0s
IGdsb2JhbE9iamVjdCk7Ci0gICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBm
YWxzZSk7Ci0KLSAgICAgICAgICAgIGlmIChwcm90b3R5cGUuaXNOdWxsKCkpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIHR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCBzbG90LmlzU3RyaWN0
TW9kZSgpLCBSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcik7Ci0gICAgICAgICAgICBvYmogPSBh
c09iamVjdChwcm90b3R5cGUpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgZm9yICg7IDsgb2Jq
ID0gYXNPYmplY3QocHJvdG90eXBlKSkgewotICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9
IG9iai0+c3RydWN0dXJlKHZtKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKHN0cnVjdHVyZS0+dHlw
ZUluZm8oKS5oYXNQdXRQcm9wZXJ0eVNlY3VyaXR5Q2hlY2soKSkpIHsKLSAgICAgICAgICAgIG9i
ai0+bWV0aG9kVGFibGUodm0pLT5kb1B1dFByb3BlcnR5U2VjdXJpdHlDaGVjayhvYmosIGdsb2Jh
bE9iamVjdCwgcHJvcGVydHlOYW1lLCBzbG90KTsKLSAgICAgICAgICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIGZhbHNlKTsKLSAgICAgICAgfQotICAgICAgICB1bnNpZ25lZCBhdHRyaWJ1
dGVzOwotICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldCh2bSwg
cHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzKTsKLSAgICAgICAgaWYgKG9mZnNldCAhPSBpbnZhbGlk
T2Zmc2V0KSB7Ci0gICAgICAgICAgICBpZiAoYXR0cmlidXRlcyAmIFByb3BlcnR5QXR0cmlidXRl
OjpSZWFkT25seSkKLSAgICAgICAgICAgICAgICByZXR1cm4gdHlwZUVycm9yKGdsb2JhbE9iamVj
dCwgc2NvcGUsIHNsb3QuaXNTdHJpY3RNb2RlKCksIFJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9y
KTsKLQotICAgICAgICAgICAgSlNWYWx1ZSBncyA9IG9iai0+Z2V0RGlyZWN0KG9mZnNldCk7Ci0g
ICAgICAgICAgICBpZiAoZ3MuaXNHZXR0ZXJTZXR0ZXIoKSkKLSAgICAgICAgICAgICAgICBSRUxF
QVNFX0FORF9SRVRVUk4oc2NvcGUsIGNhbGxTZXR0ZXIoZ2xvYmFsT2JqZWN0LCAqdGhpcywgZ3Ms
IHZhbHVlLCBzbG90LmlzU3RyaWN0TW9kZSgpID8gRUNNQU1vZGU6OnN0cmljdCgpIDogRUNNQU1v
ZGU6OnNsb3BweSgpKSk7Ci0KLSAgICAgICAgICAgIGlmIChncy5pc0N1c3RvbUdldHRlclNldHRl
cigpKSB7Ci0gICAgICAgICAgICAgICAgYXV0byBzZXR0ZXIgPSBqc0Nhc3Q8Q3VzdG9tR2V0dGVy
U2V0dGVyKj4oZ3MuYXNDZWxsKCkpLT5zZXR0ZXIoKTsKLSAgICAgICAgICAgICAgICBib29sIGlz
QWNjZXNzb3IgPSBhdHRyaWJ1dGVzICYgUHJvcGVydHlBdHRyaWJ1dGU6OkN1c3RvbUFjY2Vzc29y
OwotICAgICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gY2FsbEN1c3RvbVNldHRlcihnbG9iYWxP
YmplY3QsIHNldHRlciwgaXNBY2Nlc3Nvciwgb2JqLCBzbG90LnRoaXNWYWx1ZSgpLCB2YWx1ZSwg
cHJvcGVydHlOYW1lKTsKLSAgICAgICAgICAgICAgICBpZiAocmVzdWx0ICE9IFRyaVN0YXRlOjpJ
bmRldGVybWluYXRlKQotICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2Nv
cGUsIHJlc3VsdCA9PSBUcmlTdGF0ZTo6VHJ1ZSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgIC8vIElmIHRoZXJlJ3MgYW4gZXhpc3RpbmcgcHJvcGVydHkgb24gdGhlIG9iamVjdCBvciBv
bmUgb2YgaXRzIAotICAgICAgICAgICAgLy8gcHJvdG90eXBlcyBpdCBzaG91bGQgYmUgcmVwbGFj
ZWQsIHNvIGJyZWFrIGhlcmUuCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAg
ICBpZiAob2JqLT50eXBlKCkgPT0gUHJveHlPYmplY3RUeXBlKSB7Ci0gICAgICAgICAgICBhdXRv
KiBwcm94eSA9IGpzQ2FzdDxQcm94eU9iamVjdCo+KG9iaik7Ci0gICAgICAgICAgICBSRUxFQVNF
X0FORF9SRVRVUk4oc2NvcGUsIHByb3h5LT5Qcm94eU9iamVjdDo6cHV0KHByb3h5LCBnbG9iYWxP
YmplY3QsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpKTsKLSAgICAgICAgfQotICAgICAgICBw
cm90b3R5cGUgPSBvYmotPmdldFByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0KTsKLSAgICAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZmFsc2UpOwotICAgICAgICBpZiAocHJvdG90eXBl
LmlzTnVsbCgpKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIAotICAgIHJldHVybiB0
eXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgc2xvdC5pc1N0cmljdE1vZGUoKSwgUmVhZG9u
bHlQcm9wZXJ0eVdyaXRlRXJyb3IpOworICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgb2Jq
LT5tZXRob2RUYWJsZSh2bSktPnB1dChvYmosIGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCB2
YWx1ZSwgc2xvdCkpOwogfQogCiBib29sIEpTVmFsdWU6OnB1dFRvUHJpbWl0aXZlQnlJbmRleChK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFs
dWUgdmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0NlbGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTQ2VsbC5jcHAJKHJldmlzaW9uIDI3NjU4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTQ2VsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwMSwxMSArMjAxLDYg
QEAgYm9vbCBKU0NlbGw6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSgogICAgIHJldHVybiBm
YWxzZTsKIH0KIAotdm9pZCBKU0NlbGw6OmRvUHV0UHJvcGVydHlTZWN1cml0eUNoZWNrKEpTT2Jq
ZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIFB1dFByb3BlcnR5U2xvdCYpCi17
Ci0gICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLX0KLQogdm9pZCBKU0NlbGw6Omdl
dE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFt
ZUFycmF5JiwgRG9udEVudW1Qcm9wZXJ0aWVzTW9kZSkKIHsKICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxs
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgJ
KHJldmlzaW9uIDI3NjU4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2Vs
bC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNTcsNyArMjU3LDYgQEAgcHJvdGVjdGVkOgogICAgIHN0
YXRpYyBib29sIGRlZmluZU93blByb3BlcnR5KEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQ
cm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5RGVzY3JpcHRvciYsIGJvb2wgc2hvdWxkVGhyb3cp
OwogICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU09iamVjdCosIEpTR2xvYmFs
T2JqZWN0KiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKICAgICBzdGF0aWMgYm9vbCBn
ZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCB1bnNp
Z25lZCBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwotICAgIHN0YXRpYyBOT19SRVRVUk5f
RFVFX1RPX0NSQVNIIHZvaWQgZG9QdXRQcm9wZXJ0eVNlY3VyaXR5Q2hlY2soSlNPYmplY3QqLCBK
U0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwgUHV0UHJvcGVydHlTbG90Jik7CiAKIHByaXZh
dGU6CiAgICAgZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uY3BwCShyZXZpc2lvbiAyNzY1
ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNTE5LDEwICs1MTksNiBAQCBib29sIEpTRnVuY3Rpb246OnB1dChKU0Nl
bGwqIGNlbGwsIEpTR2xvCiAgICAgICAgICAgICByYXJlRGF0YS0+c2V0SGFzTW9kaWZpZWROYW1l
Rm9yTm9uSG9zdEZ1bmN0aW9uKCk7CiAgICAgfQogCi0gICAgaWYgKFVOTElLRUxZKGlzVGhpc1Zh
bHVlQWx0ZXJlZChzbG90LCB0aGlzT2JqZWN0KSkpCi0gICAgICAgIFJFTEVBU0VfQU5EX1JFVFVS
TihzY29wZSwgb3JkaW5hcnlTZXRTbG93KGdsb2JhbE9iamVjdCwgdGhpc09iamVjdCwgcHJvcGVy
dHlOYW1lLCB2YWx1ZSwgc2xvdC50aGlzVmFsdWUoKSwgc2xvdC5pc1N0cmljdE1vZGUoKSkpOwot
Ci0KICAgICBpZiAodGhpc09iamVjdC0+aXNIb3N0T3JCdWlsdGluRnVuY3Rpb24oKSkgewogICAg
ICAgICBQcm9wZXJ0eVN0YXR1cyBwcm9wZXJ0eVR5cGUgPSB0aGlzT2JqZWN0LT5yZWlmeUxhenlQ
cm9wZXJ0eUZvckhvc3RPckJ1aWx0aW5JZk5lZWRlZCh2bSwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0
eU5hbWUpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBmYWxzZSk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5oCShyZXZpc2lvbiAy
NzY1ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmgJKHdv
cmtpbmcgY29weSkKQEAgLTcwLDcgKzcwLDcgQEAgcHVibGljOgogICAgIH0KICAgICAKICAgICB0
eXBlZGVmIEpTQ2FsbGVlIEJhc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1
Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVy
dHlTbG90IHwgT3ZlcnJpZGVzR2V0T3duU3BlY2lhbFByb3BlcnR5TmFtZXMgfCBPdmVycmlkZXNH
ZXRDYWxsRGF0YTsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdz
ID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBP
dmVycmlkZXNHZXRPd25TcGVjaWFsUHJvcGVydHlOYW1lcyB8IE92ZXJyaWRlc0dldENhbGxEYXRh
IHwgT3ZlcnJpZGVzUHV0OwogCiAgICAgc3RhdGljIHNpemVfdCBhbGxvY2F0aW9uU2l6ZShDaGVj
a2VkPHNpemVfdD4gaW5saW5lQ2FwYWNpdHkpCiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXcuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlldy5oCShy
ZXZpc2lvbiAyNzY1ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVy
aWNUeXBlZEFycmF5Vmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC05OSw3ICs5OSw3IEBAIHB1Ymxp
YzoKICAgICB1c2luZyBFbGVtZW50VHlwZSA9IHR5cGVuYW1lIEFkYXB0b3I6OlR5cGU7CiAgICAg
c3RhdGljIGNvbnN0ZXhwciBUeXBlZEFycmF5Q29udGVudFR5cGUgY29udGVudFR5cGUgPSBBZGFw
dG9yOjpjb250ZW50VHlwZTsKIAotICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0
dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5
U2xvdCB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5TmFtZXMgfCBJbnRlcmNlcHRzR2V0T3duUHJv
cGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvOworICAgIHN0YXRpYyBjb25z
dGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IE92
ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5TmFtZXMg
fCBPdmVycmlkZXNQdXQgfCBJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5X
aGVuTGVuZ3RoSXNOb3RaZXJvOwogCiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBlbGVt
ZW50U2l6ZSA9IHNpemVvZih0eXBlbmFtZSBBZGFwdG9yOjpUeXBlKTsKIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbExleGljYWxF
bnZpcm9ubWVudC5oCShyZXZpc2lvbiAyNzY1ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0dsb2JhbExleGljYWxFbnZpcm9ubWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
Myw3ICszMyw3IEBAIGNsYXNzIEpTR2xvYmFsTGV4aWNhbEVudmlyb25tZW50IGZpbmFsIDoKIHB1
YmxpYzoKICAgICB1c2luZyBCYXNlID0gSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdDsKIAotICAg
IHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1
cmVGbGFncyB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdDsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBPdmVy
cmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNQdXQ7CiAKICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4KICAgICBzdGF0aWMgSXNvU3Vi
c3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAJKHJldmlzaW9uIDI3NjU4NSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTQ3Niw4ICsxNDc2LDE1IEBAIGJvb2wgSlNHbG9iYWxPYmplY3Q6OnB1dChKU0Nl
bGwqIGNlbGwsIEoKICAgICBKU0dsb2JhbE9iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0ds
b2JhbE9iamVjdCo+KGNlbGwpOwogICAgIEFTU0VSVCghSGVhcDo6aGVhcCh2YWx1ZSkgfHwgSGVh
cDo6aGVhcCh2YWx1ZSkgPT0gSGVhcDo6aGVhcCh0aGlzT2JqZWN0KSk7CiAKLSAgICBpZiAoVU5M
SUtFTFkoaXNUaGlzVmFsdWVBbHRlcmVkKHNsb3QsIHRoaXNPYmplY3QpKSkKLSAgICAgICAgUkVM
RUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBvcmRpbmFyeVNldFNsb3coZ2xvYmFsT2JqZWN0LCB0aGlz
T2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90LnRoaXNWYWx1ZSgpLCBzbG90LmlzU3Ry
aWN0TW9kZSgpKSk7CisgICAgaWYgKFVOTElLRUxZKGlzVGhpc1ZhbHVlQWx0ZXJlZChzbG90LCB0
aGlzT2JqZWN0KSkpIHsKKyAgICAgICAgU3ltYm9sVGFibGVFbnRyeTo6RmFzdCBlbnRyeSA9IHRo
aXNPYmplY3QtPnN5bWJvbFRhYmxlKCktPmdldChwcm9wZXJ0eU5hbWUudWlkKCkpOworICAgICAg
ICBpZiAoIWVudHJ5LmlzTnVsbCgpKSB7CisgICAgICAgICAgICBpZiAoZW50cnkuaXNSZWFkT25s
eSgpKQorICAgICAgICAgICAgICAgIHJldHVybiB0eXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29w
ZSwgc2xvdC5pc1N0cmljdE1vZGUoKSwgUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpOworICAg
ICAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU09iamVjdDo6ZGVmaW5lUHJvcGVy
dHlPblJlY2VpdmVyKGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCkpOwor
ICAgICAgICB9CisgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgQmFzZTo6cHV0KHRo
aXNPYmplY3QsIGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCkpOworICAg
IH0KIAogICAgIGJvb2wgc2hvdWxkVGhyb3dSZWFkT25seUVycm9yID0gc2xvdC5pc1N0cmljdE1v
ZGUoKTsKICAgICBib29sIGlnbm9yZVJlYWRPbmx5RXJyb3JzID0gZmFsc2U7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgJKHJldmlzaW9u
IDI3NjU4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTU5Niw3ICs1OTYsNyBAQCBwdWJsaWM6CiAgICAgICAgIAog
cHVibGljOgogICAgIHVzaW5nIEJhc2UgPSBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0OwotICAg
IHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1
cmVGbGFncyB8IEhhc1N0YXRpY1Byb3BlcnR5VGFibGUgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0
eVNsb3QgfCBJc0ltbXV0YWJsZVByb3RvdHlwZUV4b3RpY09iamVjdDsKKyAgICBzdGF0aWMgY29u
c3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBI
YXNTdGF0aWNQcm9wZXJ0eVRhYmxlIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3Zl
cnJpZGVzUHV0IHwgSXNJbW11dGFibGVQcm90b3R5cGVFeG90aWNPYmplY3Q7CiAKICAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7CiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0xleGljYWxFbnZpcm9ubWVudC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTGV4aWNhbEVudmlyb25tZW50LmgJKHJl
dmlzaW9uIDI3NjU4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTGV4aWNh
bEVudmlyb25tZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDcgKzQ4LDcgQEAgcHVibGljOgog
ICAgIH0KIAogICAgIHVzaW5nIEJhc2UgPSBKU1N5bWJvbFRhYmxlT2JqZWN0OwotICAgIHN0YXRp
YyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFn
cyB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRlc0dldE93blNwZWNpYWxQ
cm9wZXJ0eU5hbWVzOworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxh
Z3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8
IE92ZXJyaWRlc0dldE93blNwZWNpYWxQcm9wZXJ0eU5hbWVzIHwgT3ZlcnJpZGVzUHV0OwogCiAg
ICAgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiogdmFyaWFibGVzKCkKICAgICB7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZUVudmlyb25tZW50LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVFbnZpcm9ubWVu
dC5oCShyZXZpc2lvbiAyNzY1ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U01vZHVsZUVudmlyb25tZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDcgQEAgY2xh
c3MgSlNNb2R1bGVFbnZpcm9ubWVudCBmaW5hbCA6IHB1YmxpYwogICAgIGZyaWVuZCBjbGFzcyBM
TEludE9mZnNldHNFeHRyYWN0b3I7CiBwdWJsaWM6CiAgICAgdXNpbmcgQmFzZSA9IEpTTGV4aWNh
bEVudmlyb25tZW50OwotICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxh
Z3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8
IE92ZXJyaWRlc0dldE93blNwZWNpYWxQcm9wZXJ0eU5hbWVzOworICAgIHN0YXRpYyBjb25zdGV4
cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IE92ZXJy
aWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRlc0dldE93blNwZWNpYWxQcm9wZXJ0eU5h
bWVzIHwgT3ZlcnJpZGVzUHV0OwogCiAgICAgc3RhdGljIEpTTW9kdWxlRW52aXJvbm1lbnQqIGNy
ZWF0ZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTU2NvcGUqIGN1cnJl
bnRTY29wZSwgU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlLCBKU1ZhbHVlIGluaXRpYWxWYWx1ZSwg
QWJzdHJhY3RNb2R1bGVSZWNvcmQqIG1vZHVsZVJlY29yZCkKICAgICB7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZU5hbWVzcGFjZU9iamVjdC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlTmFtZXNwYWNlT2Jq
ZWN0LmgJKHJldmlzaW9uIDI3NjU4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTTW9kdWxlTmFtZXNwYWNlT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDcg
QEAgbmFtZXNwYWNlIEpTQyB7CiBjbGFzcyBKU01vZHVsZU5hbWVzcGFjZU9iamVjdCBmaW5hbCA6
IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKIHB1YmxpYzoKICAgICB1c2luZyBCYXNlID0gSlNO
b25GaW5hbE9iamVjdDsKLSAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZs
YWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3Qg
fCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eU5hbWVzIHwgSW50ZXJjZXB0c0dldE93blByb3BlcnR5
U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8IEdldE93blByb3BlcnR5U2xvdElz
SW1wdXJlRm9yUHJvcGVydHlBYnNlbmNlIHwgSXNJbW11dGFibGVQcm90b3R5cGVFeG90aWNPYmpl
Y3Q7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6
OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVz
R2V0T3duUHJvcGVydHlOYW1lcyB8IE92ZXJyaWRlc1B1dCB8IEludGVyY2VwdHNHZXRPd25Qcm9w
ZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8gfCBHZXRPd25Qcm9wZXJ0eVNs
b3RJc0ltcHVyZUZvclByb3BlcnR5QWJzZW5jZSB8IElzSW1tdXRhYmxlUHJvdG90eXBlRXhvdGlj
T2JqZWN0OwogCiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0
cnVlOwogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCShyZXZpc2lvbiAyNzY1ODUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTY0NiwxMCArNjQ2LDYgQEAgYm9vbCBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90KEpT
T2JqZQogewogICAgIHJldHVybiBnZXRPd25Qcm9wZXJ0eVNsb3RJbXBsKG9iamVjdCwgZ2xvYmFs
T2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwogfQotCi12b2lkIEpTT2JqZWN0Ojpkb1B1dFBy
b3BlcnR5U2VjdXJpdHlDaGVjayhKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlO
YW1lLCBQdXRQcm9wZXJ0eVNsb3QmKQotewotfQogI2VuZGlmIC8vIEFTU0VSVF9FTkFCTEVECiAK
IC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLW9yZGluYXJ5c2V0CkBAIC03
NTgsNyArNzU0LDcgQEAgYm9vbCBvcmRpbmFyeVNldFNsb3coSlNHbG9iYWxPYmplY3QqIGdsbwog
ICAgIHJldHVybiB0cnVlOwogfQogCi0vLyBFQ01BIDguNi4yLjIKKy8vIGh0dHBzOi8vdGMzOS5l
cy9lY21hMjYyLyNzZWMtb3JkaW5hcnlzZXQKIGJvb2wgSlNPYmplY3Q6OnB1dChKU0NlbGwqIGNl
bGwsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5h
bWUsIEpTVmFsdWUgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICByZXR1cm4g
cHV0SW5saW5lRm9ySlNPYmplY3QoY2VsbCwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHZh
bHVlLCBzbG90KTsKQEAgLTc2Niw2OSArNzYyLDk2IEBAIGJvb2wgSlNPYmplY3Q6OnB1dChKU0Nl
bGwqIGNlbGwsIEpTR2xvYmEKIAogYm9vbCBKU09iamVjdDo6cHV0SW5saW5lU2xvdyhKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVl
IHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7Ci0gICAgQVNTRVJUKCFpc1RoaXNWYWx1
ZUFsdGVyZWQoc2xvdCwgdGhpcykpOworICAgIEFTU0VSVCghcGFyc2VJbmRleChwcm9wZXJ0eU5h
bWUpKTsKIAogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKKyAgICBpZiAoVU5MSUtFTFkoIXZtLmlzU2Fm
ZVRvUmVjdXJzZVNvZnQoKSkpIHsKKyAgICAgICAgdGhyb3dTdGFja092ZXJmbG93RXJyb3IoZ2xv
YmFsT2JqZWN0LCBzY29wZSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKICAgICBK
U09iamVjdCogb2JqID0gdGhpczsKICAgICBmb3IgKDs7KSB7CiAgICAgICAgIFN0cnVjdHVyZSog
c3RydWN0dXJlID0gb2JqLT5zdHJ1Y3R1cmUodm0pOwotICAgICAgICBpZiAoVU5MSUtFTFkoc3Ry
dWN0dXJlLT50eXBlSW5mbygpLmhhc1B1dFByb3BlcnR5U2VjdXJpdHlDaGVjaygpKSkgewotICAg
ICAgICAgICAgb2JqLT5tZXRob2RUYWJsZSh2bSktPmRvUHV0UHJvcGVydHlTZWN1cml0eUNoZWNr
KG9iaiwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwotICAgICAgICAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZmFsc2UpOwotICAgICAgICB9CisgICAgICAgIGlmIChv
YmogIT0gdGhpcyAmJiBzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkub3ZlcnJpZGVzUHV0KCkpCisgICAg
ICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIG9iai0+bWV0aG9kVGFibGUodm0pLT5w
dXQob2JqLCBnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpKTsKKworICAg
ICAgICBib29sIGhhc1Byb3BlcnR5ID0gZmFsc2U7CiAgICAgICAgIHVuc2lnbmVkIGF0dHJpYnV0
ZXM7CisgICAgICAgIFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jIGN1c3RvbVNldHRlciA9
IG51bGxwdHI7CiAgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0
KHZtLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMpOwogICAgICAgICBpZiAoaXNWYWxpZE9mZnNl
dChvZmZzZXQpKSB7Ci0gICAgICAgICAgICBpZiAoYXR0cmlidXRlcyAmIFByb3BlcnR5QXR0cmli
dXRlOjpSZWFkT25seSkgewotICAgICAgICAgICAgICAgIEFTU0VSVCh0aGlzLT5wcm90b3R5cGVD
aGFpbk1heUludGVyY2VwdFN0b3JlVG8odm0sIHByb3BlcnR5TmFtZSkgfHwgb2JqID09IHRoaXMp
OwotICAgICAgICAgICAgICAgIHJldHVybiB0eXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwg
c2xvdC5pc1N0cmljdE1vZGUoKSwgUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpOworICAgICAg
ICAgICAgaGFzUHJvcGVydHkgPSB0cnVlOworICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZXMgJiBQ
cm9wZXJ0eUF0dHJpYnV0ZTo6Q3VzdG9tQWNjZXNzb3JPclZhbHVlKQorICAgICAgICAgICAgICAg
IGN1c3RvbVNldHRlciA9IGpzQ2FzdDxDdXN0b21HZXR0ZXJTZXR0ZXIqPihvYmotPmdldERpcmVj
dChvZmZzZXQpKS0+c2V0dGVyKCk7CisgICAgICAgIH0gZWxzZSBpZiAoc3RydWN0dXJlLT5oYXNO
b25SZWlmaWVkU3RhdGljUHJvcGVydGllcygpKSB7CisgICAgICAgICAgICBpZiAoYXV0byBlbnRy
eSA9IHN0cnVjdHVyZS0+ZmluZFByb3BlcnR5SGFzaEVudHJ5KHByb3BlcnR5TmFtZSkpIHsKKyAg
ICAgICAgICAgICAgICBoYXNQcm9wZXJ0eSA9IHRydWU7CisgICAgICAgICAgICAgICAgYXR0cmli
dXRlcyA9IGVudHJ5LT52YWx1ZS0+YXR0cmlidXRlcygpOworCisgICAgICAgICAgICAgICAgLy8g
RklYTUU6IFJlbW92ZSB0aGlzIGFmdGVyIHdyaXRhYmxlIGFjY2Vzc29ycyBhcmUgaW50cm9kdWNl
ZCB0byBzdGF0aWMgaGFzaCB0YWJsZXMuCisgICAgICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZXMg
JiBQcm9wZXJ0eUF0dHJpYnV0ZTo6QWNjZXNzb3IpCisgICAgICAgICAgICAgICAgICAgIGF0dHJp
YnV0ZXMgfD0gUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5OworICAgICAgICAgICAgICAgIC8v
IEZJWE1FOiBSZW1vdmUgdGhpcyBhZnRlciB3ZSBzdG9wIGRlZmF1bHRpbmcgdG8gQ3VzdG9tVmFs
dWUgaW4gc3RhdGljIGhhc2ggdGFibGVzLgorICAgICAgICAgICAgICAgIGlmICghKGF0dHJpYnV0
ZXMgJiAoUHJvcGVydHlBdHRyaWJ1dGU6OkN1c3RvbUFjY2Vzc29yIHwgUHJvcGVydHlBdHRyaWJ1
dGU6OkJ1aWx0aW5PckZ1bmN0aW9uT3JBY2Nlc3Nvck9yTGF6eVByb3BlcnR5T3JDb25zdGFudCkp
KQorICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzIHw9IFByb3BlcnR5QXR0cmlidXRlOjpD
dXN0b21WYWx1ZTsKKworICAgICAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVzICYgUHJvcGVydHlB
dHRyaWJ1dGU6OkN1c3RvbUFjY2Vzc29yT3JWYWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgY3Vz
dG9tU2V0dGVyID0gZW50cnktPnZhbHVlLT5wcm9wZXJ0eVB1dHRlcigpOwogICAgICAgICAgICAg
fQorICAgICAgICB9CiAKLSAgICAgICAgICAgIEpTVmFsdWUgZ3MgPSBvYmotPmdldERpcmVjdChv
ZmZzZXQpOwotICAgICAgICAgICAgaWYgKGdzLmlzR2V0dGVyU2V0dGVyKCkpIHsKKyAgICAgICAg
aWYgKGhhc1Byb3BlcnR5KSB7CisgICAgICAgICAgICBpZiAoYXR0cmlidXRlcyAmIFByb3BlcnR5
QXR0cmlidXRlOjpSZWFkT25seSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHlwZUVycm9yKGds
b2JhbE9iamVjdCwgc2NvcGUsIHNsb3QuaXNTdHJpY3RNb2RlKCksIFJlYWRvbmx5UHJvcGVydHlX
cml0ZUVycm9yKTsKKyAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVzICYgUHJvcGVydHlBdHRyaWJ1
dGU6OkFjY2Vzc29yKSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKGlzVmFsaWRPZmZzZXQob2Zm
c2V0KSk7CiAgICAgICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCB3ZSBk
ZWNpZGUgdG8gY2FjaGUgdGhpcyBwcm9wZXJ0eSBiZWZvcmUgd2UgcG90ZW50aWFsbHkgZXhlY3V0
ZSBhcmliaXRyYXJ5IEpTLgogICAgICAgICAgICAgICAgIGlmICghdGhpcy0+c3RydWN0dXJlKHZt
KS0+aXNVbmNhY2hlYWJsZURpY3Rpb25hcnkoKSkKICAgICAgICAgICAgICAgICAgICAgc2xvdC5z
ZXRDYWNoZWFibGVTZXR0ZXIob2JqLCBvZmZzZXQpOwotCi0gICAgICAgICAgICAgICAgYm9vbCBy
ZXN1bHQgPSBjYWxsU2V0dGVyKGdsb2JhbE9iamVjdCwgc2xvdC50aGlzVmFsdWUoKSwgZ3MsIHZh
bHVlLCBzbG90LmlzU3RyaWN0TW9kZSgpID8gRUNNQU1vZGU6OnN0cmljdCgpIDogRUNNQU1vZGU6
OnNsb3BweSgpKTsKLSAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBm
YWxzZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgICAgICBK
U1ZhbHVlIGdzID0gb2JqLT5nZXREaXJlY3Qob2Zmc2V0KTsKKyAgICAgICAgICAgICAgICBSRUxF
QVNFX0FORF9SRVRVUk4oc2NvcGUsIGNhbGxTZXR0ZXIoZ2xvYmFsT2JqZWN0LCBzbG90LnRoaXNW
YWx1ZSgpLCBncywgdmFsdWUsIHNsb3QuaXNTdHJpY3RNb2RlKCkgPyBFQ01BTW9kZTo6c3RyaWN0
KCkgOiBFQ01BTW9kZTo6c2xvcHB5KCkpKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlm
IChncy5pc0N1c3RvbUdldHRlclNldHRlcigpKSB7Ci0gICAgICAgICAgICAgICAgYm9vbCBpc0Fj
Y2Vzc29yID0gYXR0cmlidXRlcyAmIFByb3BlcnR5QXR0cmlidXRlOjpDdXN0b21BY2Nlc3NvcjsK
LSAgICAgICAgICAgICAgICBhdXRvIHNldHRlciA9IGpzQ2FzdDxDdXN0b21HZXR0ZXJTZXR0ZXIq
Pihncy5hc0NlbGwoKSktPnNldHRlcigpOworICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZXMgJiBQ
cm9wZXJ0eUF0dHJpYnV0ZTo6Q3VzdG9tQWNjZXNzb3IpIHsKKyAgICAgICAgICAgICAgICAvLyBG
SVhNRTogUmVtb3ZlIHRoaXMgYWZ0ZXIgV2ViSURMIGdlbmVyYXRvciBpcyBmaXhlZCB0byBzZXQg
UmVhZE9ubHkgZm9yIFtSdW50aW1lQ29uZGl0aW9uYWxseVJlYWRXcml0ZV0gYXR0cmlidXRlcy4K
KyAgICAgICAgICAgICAgICBpZiAoIWN1c3RvbVNldHRlcikKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIEFTU0VSVChjdXN0b21TZXR0ZXIpOwogICAg
ICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgb25seSBiZSBjYWNoaW5nIHRoZXNlIGlm
IHdlJ3JlIG5vdCBhbiB1bmNhY2hlYWJsZSBkaWN0aW9uYXJ5OgogICAgICAgICAgICAgICAgIC8v
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTUzNDcKLQotICAgICAg
ICAgICAgICAgIC8vIFdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgd2UgZGVjaWRlIHRvIGNhY2hl
IHRoaXMgcHJvcGVydHkgYmVmb3JlIHdlIHBvdGVudGlhbGx5IGV4ZWN1dGUgYXJpYml0cmFyeSBK
Uy4KLSAgICAgICAgICAgICAgICBpZiAoaXNBY2Nlc3NvcikKLSAgICAgICAgICAgICAgICAgICAg
c2xvdC5zZXRDdXN0b21BY2Nlc3NvcihvYmosIHNldHRlcik7Ci0gICAgICAgICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgICAgICAgICBzbG90LnNldEN1c3RvbVZhbHVlKG9iaiwgc2V0dGVyKTsK
LQotICAgICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gY2FsbEN1c3RvbVNldHRlcihnbG9iYWxP
YmplY3QsIHNldHRlciwgaXNBY2Nlc3Nvciwgb2JqLCBzbG90LnRoaXNWYWx1ZSgpLCB2YWx1ZSwg
cHJvcGVydHlOYW1lKTsKLSAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCBmYWxzZSk7Ci0gICAgICAgICAgICAgICAgaWYgKHJlc3VsdCAhPSBUcmlTdGF0ZTo6SW5kZXRl
cm1pbmF0ZSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCA9PSBUcmlTdGF0ZTo6
VHJ1ZTsKKyAgICAgICAgICAgICAgICBzbG90LnNldEN1c3RvbUFjY2Vzc29yKG9iaiwgY3VzdG9t
U2V0dGVyKTsKKyAgICAgICAgICAgICAgICBzY29wZS5yZWxlYXNlKCk7CisgICAgICAgICAgICAg
ICAgY3VzdG9tU2V0dGVyKGdsb2JhbE9iamVjdCwgSlNWYWx1ZTo6ZW5jb2RlKHNsb3QudGhpc1Zh
bHVlKCkpLCBKU1ZhbHVlOjplbmNvZGUodmFsdWUpLCBwcm9wZXJ0eU5hbWUpOworICAgICAgICAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgQVNTRVJUKCEo
YXR0cmlidXRlcyAmIFByb3BlcnR5QXR0cmlidXRlOjpBY2Nlc3NvcikpOwotCi0gICAgICAgICAg
ICAvLyBJZiB0aGVyZSdzIGFuIGV4aXN0aW5nIHByb3BlcnR5IG9uIHRoZSBiYXNlIG9iamVjdCwg
b3Igb24gb25lIG9mIGl0cyAKLSAgICAgICAgICAgIC8vIHByb3RvdHlwZXMsIHdlIHNob3VsZCBz
dG9yZSB0aGUgcHJvcGVydHkgb24gdGhlICpiYXNlKiBvYmplY3QuCi0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgfQotICAgICAgICBpZiAoIW9iai0+c3RhdGljUHJvcGVydGllc1JlaWZpZWQo
dm0pKSB7Ci0gICAgICAgICAgICBpZiAob2JqLT5jbGFzc0luZm8odm0pLT5oYXNTdGF0aWNTZXR0
ZXJPclJlYWRvbmx5UHJvcGVydGllcygpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGF1dG8gZW50
cnkgPSBvYmotPmZpbmRQcm9wZXJ0eUhhc2hFbnRyeSh2bSwgcHJvcGVydHlOYW1lKSkKLSAgICAg
ICAgICAgICAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBwdXRFbnRyeShnbG9iYWxP
YmplY3QsIGVudHJ5LT50YWJsZS0+Y2xhc3NGb3JUaGlzLCBlbnRyeS0+dmFsdWUsIG9iaiwgdGhp
cywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCkpOworICAgICAgICAgICAgaWYgKGF0dHJpYnV0
ZXMgJiBQcm9wZXJ0eUF0dHJpYnV0ZTo6Q3VzdG9tVmFsdWUpIHsKKyAgICAgICAgICAgICAgICAv
LyBGSVhNRTogT25jZSBsZWdhY3kgUmVnRXhwIGZlYXR1cmVzIGFyZSBpbXBsZW1lbnRlZCwgdGhl
cmUgd291bGQgYmUgbm8gdXNlIGNhc2UgZm9yIGNhbGxpbmcgQ3VzdG9tVmFsdWUgc2V0dGVyIGlm
IHJlY2VpdmVyIGlzIGFsdGVyZWQuCisgICAgICAgICAgICAgICAgaWYgKGN1c3RvbVNldHRlciAm
JiAhKGlzVGhpc1ZhbHVlQWx0ZXJlZChzbG90LCBvYmopICYmIHNsb3QuY29udGV4dCgpID09IFB1
dFByb3BlcnR5U2xvdDo6UmVmbGVjdFNldCkpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gRklY
TUU6IFdlIHNob3VsZCBvbmx5IGJlIGNhY2hpbmcgdGhlc2UgaWYgd2UncmUgbm90IGFuIHVuY2Fj
aGVhYmxlIGRpY3Rpb25hcnk6CisgICAgICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTUzNDcKKyAgICAgICAgICAgICAgICAgICAgc2xv
dC5zZXRDdXN0b21WYWx1ZShvYmosIGN1c3RvbVNldHRlcik7CisgICAgICAgICAgICAgICAgICAg
IFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgY3VzdG9tU2V0dGVyKGdsb2JhbE9iamVjdCwgSlNW
YWx1ZTo6ZW5jb2RlKG9iaiksIEpTVmFsdWU6OmVuY29kZSh2YWx1ZSksIHByb3BlcnR5TmFtZSkp
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoIWlzVGhpc1ZhbHVlQWx0
ZXJlZChzbG90LCBvYmopKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIEF2b2lkIFB1dE1vZGVQ
dXQgYmVjYXVzZSBpdCBmYWlscyBmb3Igbm9uLWV4dGVuc2libGUgc3RydWN0dXJlcy4KKyAgICAg
ICAgICAgICAgICAgICAgb2JqLT5wdXREaXJlY3Qodm0sIHByb3BlcnR5TmFtZSwgdmFsdWUsIGF0
dHJpYnV0ZXNGb3JTdHJ1Y3R1cmUoYXR0cmlidXRlcykgJiB+UHJvcGVydHlBdHRyaWJ1dGU6OkN1
c3RvbVZhbHVlLCBzbG90KTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZXMg
JiBQcm9wZXJ0eUF0dHJpYnV0ZTo6QnVpbHRpbk9yRnVuY3Rpb25PckxhenlQcm9wZXJ0eSkgewor
ICAgICAgICAgICAgICAgIGlmICghaXNUaGlzVmFsdWVBbHRlcmVkKHNsb3QsIG9iaikpIHsKKyAg
ICAgICAgICAgICAgICAgICAgLy8gQXZvaWQgUHV0TW9kZVB1dCBiZWNhdXNlIGl0IGZhaWxzIGZv
ciBub24tZXh0ZW5zaWJsZSBzdHJ1Y3R1cmVzLgorICAgICAgICAgICAgICAgICAgICBvYmotPnB1
dERpcmVjdCh2bSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgYXR0cmlidXRlc0ZvclN0cnVjdHVyZShh
dHRyaWJ1dGVzKSwgc2xvdCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIElmIHRoZXJlJ3Mg
YW4gZXhpc3Rpbmcgd3JpdGFibGUgcHJvcGVydHkgb24gdGhlIGJhc2Ugb2JqZWN0LCBvciBvbiBv
bmUgb2YgaXRzIAorICAgICAgICAgICAgLy8gcHJvdG90eXBlcywgd2Ugc2hvdWxkIGF0dGVtcHQg
dG8gc3RvcmUgdGhlIHByb3BlcnR5IG9uIHRoZSByZWNlaXZlci4KKyAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9Ci0gICAgICAgIGlmIChvYmotPnR5cGUoKSA9PSBQcm94eU9iamVjdFR5cGUp
IHsKLSAgICAgICAgICAgIGF1dG8qIHByb3h5ID0ganNDYXN0PFByb3h5T2JqZWN0Kj4ob2JqKTsK
LSAgICAgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgcHJveHktPlByb3h5T2JqZWN0
OjpwdXQocHJveHksIGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCkpOwot
ICAgICAgICB9CisKICAgICAgICAgSlNWYWx1ZSBwcm90b3R5cGUgPSBvYmotPmdldFByb3RvdHlw
ZSh2bSwgZ2xvYmFsT2JqZWN0KTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
ZmFsc2UpOwogICAgICAgICBpZiAocHJvdG90eXBlLmlzTnVsbCgpKQpAQCAtODM2LDkgKzg1OSw4
MCBAQCBib29sIEpTT2JqZWN0OjpwdXRJbmxpbmVTbG93KEpTR2xvYmFsT2JqCiAgICAgICAgIG9i
aiA9IGFzT2JqZWN0KHByb3RvdHlwZSk7CiAgICAgfQogCi0gICAgaWYgKCFwdXREaXJlY3RJbnRl
cm5hbDxQdXRNb2RlUHV0Pih2bSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgMCwgc2xvdCkpCisgICAg
c2NvcGUucmVsZWFzZSgpOworICAgIGlmIChVTkxJS0VMWShpc1RoaXNWYWx1ZUFsdGVyZWQoc2xv
dCwgdGhpcykpKQorICAgICAgICByZXR1cm4gZGVmaW5lUHJvcGVydHlPblJlY2VpdmVyKGdsb2Jh
bE9iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCk7CisgICAgcmV0dXJuIHB1dElubGlu
ZUZhc3QoZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KTsKK30KKworc3Rh
dGljIE5FVkVSX0lOTElORSBib29sIGRlZmluZVByb3BlcnR5T25SZWNlaXZlclNsb3coSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1
ZSB2YWx1ZSwgSlNPYmplY3QqIHJlY2VpdmVyLCBib29sIHNob3VsZFRocm93KQoreworICAgIFZN
JiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CisKKyAgICBQcm9wZXJ0eVNsb3Qgc2xvdChyZWNlaXZlciwgUHJvcGVydHlT
bG90OjpJbnRlcm5hbE1ldGhvZFR5cGU6OkdldE93blByb3BlcnR5KTsKKyAgICBib29sIGhhc1By
b3BlcnR5ID0gcmVjZWl2ZXItPm1ldGhvZFRhYmxlKHZtKS0+Z2V0T3duUHJvcGVydHlTbG90KHJl
Y2VpdmVyLCBnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgc2xvdCk7CisgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgZmFsc2UpOworCisgICAgUHJvcGVydHlEZXNjcmlwdG9yIGRlc2Ny
aXB0b3I7CisgICAgaWYgKGhhc1Byb3BlcnR5KSB7CisgICAgICAgIC8vIEZJWE1FOiBGb3IgYW4g
YWNjZXNzb3Igd2l0aCBzZXR0ZXIsIHRoZSBlcnJvciBtZXNzYWdlIGlzIG1pc2xlYWRpbmcuCisg
ICAgICAgIGlmIChzbG90LmF0dHJpYnV0ZXMoKSAmIFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25s
eU9yQWNjZXNzb3JPckN1c3RvbUFjY2Vzc29yKQorICAgICAgICAgICAgcmV0dXJuIHR5cGVFcnJv
cihnbG9iYWxPYmplY3QsIHNjb3BlLCBzaG91bGRUaHJvdywgUmVhZG9ubHlQcm9wZXJ0eVdyaXRl
RXJyb3IpOworICAgICAgICBkZXNjcmlwdG9yLnNldFZhbHVlKHZhbHVlKTsKKyAgICB9IGVsc2UK
KyAgICAgICAgZGVzY3JpcHRvci5zZXREZXNjcmlwdG9yKHZhbHVlLCBzdGF0aWNfY2FzdDx1bnNp
Z25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6Ok5vbmUpKTsKKworICAgIFJFTEVBU0VfQU5EX1JFVFVS
TihzY29wZSwgcmVjZWl2ZXItPm1ldGhvZFRhYmxlKHZtKS0+ZGVmaW5lT3duUHJvcGVydHkocmVj
ZWl2ZXIsIGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yLCBzaG91bGRUaHJv
dykpOworfQorCisvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9yZGluYXJ5c2V0IChz
dGVwIDMpCitib29sIEpTT2JqZWN0OjpkZWZpbmVQcm9wZXJ0eU9uUmVjZWl2ZXIoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2
YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBzbG90KQoreworICAgIEFTU0VSVCghcGFyc2VJbmRleChw
cm9wZXJ0eU5hbWUpKTsKKworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBKU09iamVjdCogcmVj
ZWl2ZXIgPSBzbG90LnRoaXNWYWx1ZSgpLmdldE9iamVjdCgpOworICAgIC8vIEZJWE1FOiBGb3Ig
YSBmYWlsdXJlIGR1ZSB0byBwcmltaXRpdmUgcmVjZWl2ZXIsIHRoZSBlcnJvciBtZXNzYWdlIGlz
IG1pc2xlYWRpbmcuCisgICAgaWYgKCFyZWNlaXZlcikKICAgICAgICAgcmV0dXJuIHR5cGVFcnJv
cihnbG9iYWxPYmplY3QsIHNjb3BlLCBzbG90LmlzU3RyaWN0TW9kZSgpLCBSZWFkb25seVByb3Bl
cnR5V3JpdGVFcnJvcik7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgc2NvcGUucmVsZWFzZSgpOwor
CisgICAgaWYgKHNsb3QuaXNUYWludGVkQnlPcGFxdWVPYmplY3QoKSB8fCBzbG90LmNvbnRleHQo
KSA9PSBQdXRQcm9wZXJ0eVNsb3Q6OlJlZmxlY3RTZXQpIHsKKyAgICAgICAgaWYgKHJlY2VpdmVy
LT5tZXRob2RUYWJsZSh2bSktPmRlZmluZU93blByb3BlcnR5ICE9IEpTT2JqZWN0OjpkZWZpbmVP
d25Qcm9wZXJ0eSkKKyAgICAgICAgICAgIHJldHVybiBkZWZpbmVQcm9wZXJ0eU9uUmVjZWl2ZXJT
bG93KGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgcmVjZWl2ZXIsIHNsb3QuaXNT
dHJpY3RNb2RlKCkpOworICAgIH0KKworICAgIGlmIChVTkxJS0VMWShyZWNlaXZlci0+aGFzTm9u
UmVpZmllZFN0YXRpY1Byb3BlcnRpZXModm0pKSkKKyAgICAgICAgcmV0dXJuIHJlY2VpdmVyLT5w
dXRJbmxpbmVGYXN0UmVwbGFjaW5nU3RhdGljUHJvcGVydHlJZk5lZWRlZChnbG9iYWxPYmplY3Qs
IHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpOworICAgIHJldHVybiByZWNlaXZlci0+cHV0SW5s
aW5lRmFzdChnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpOworfQorCiti
b29sIEpTT2JqZWN0OjpwdXRJbmxpbmVGYXN0UmVwbGFjaW5nU3RhdGljUHJvcGVydHlJZk5lZWRl
ZChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1l
LCBKU1ZhbHVlIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCit7CisgICAgQVNTRVJUKCFw
YXJzZUluZGV4KHByb3BlcnR5TmFtZSkpOworCisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52
bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIFN0
cnVjdHVyZSogc3RydWN0dXJlID0gdGhpcy0+c3RydWN0dXJlKHZtKTsKKyAgICBBU1NFUlQoc3Ry
dWN0dXJlLT5oYXNOb25SZWlmaWVkU3RhdGljUHJvcGVydGllcygpKTsKKyAgICBpZiAoIWlzVmFs
aWRPZmZzZXQoc3RydWN0dXJlLT5nZXQodm0sIHByb3BlcnR5TmFtZSkpKSB7CisgICAgICAgIGlm
IChhdXRvIGVudHJ5ID0gc3RydWN0dXJlLT5maW5kUHJvcGVydHlIYXNoRW50cnkocHJvcGVydHlO
YW1lKSkgeworICAgICAgICAgICAgaWYgKGVudHJ5LT52YWx1ZS0+YXR0cmlidXRlcygpICYgUHJv
cGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5T3JBY2Nlc3Nvck9yQ3VzdG9tQWNjZXNzb3IpIHsKKyAg
ICAgICAgICAgICAgICBBU1NFUlQoc2xvdC5jb250ZXh0KCkgPT0gUHV0UHJvcGVydHlTbG90OjpS
ZWZsZWN0U2V0KTsKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogRm9yIGFuIGFjY2Vzc29yIHdp
dGggc2V0dGVyLCB0aGUgZXJyb3IgbWVzc2FnZSBpcyBtaXNsZWFkaW5nLgorICAgICAgICAgICAg
ICAgIHJldHVybiB0eXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgc2xvdC5pc1N0cmljdE1v
ZGUoKSwgUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgLy8gQXZvaWQgUHV0TW9kZVB1dCBiZWNhdXNlIGl0IGZhaWxzIGZvciBub24tZXh0ZW5z
aWJsZSBzdHJ1Y3R1cmVzLgorICAgICAgICAgICAgcHV0RGlyZWN0KHZtLCBwcm9wZXJ0eU5hbWUs
IHZhbHVlLCBhdHRyaWJ1dGVzRm9yU3RydWN0dXJlKGVudHJ5LT52YWx1ZS0+YXR0cmlidXRlcygp
KSAmIH5Qcm9wZXJ0eUF0dHJpYnV0ZTo6Q3VzdG9tVmFsdWUsIHNsb3QpOworICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4o
c2NvcGUsIHB1dElubGluZUZhc3QoZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBz
bG90KSk7CiB9CiAKIGJvb2wgSlNPYmplY3Q6OnB1dEJ5SW5kZXgoSlNDZWxsKiBjZWxsLCBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUg
dmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpCkBAIC0zODUyLDMwICszOTQ2LDYgQEAgYm9vbCBKU09i
amVjdDo6YW55T2JqZWN0SW5DaGFpbk1heUludGVyYwogICAgIH0KIH0KIAotYm9vbCBKU09iamVj
dDo6cHJvdG90eXBlQ2hhaW5NYXlJbnRlcmNlcHRTdG9yZVRvKFZNJiB2bSwgUHJvcGVydHlOYW1l
IHByb3BlcnR5TmFtZSkKLXsKLSAgICBpZiAocGFyc2VJbmRleChwcm9wZXJ0eU5hbWUpKQotICAg
ICAgICByZXR1cm4gYW55T2JqZWN0SW5DaGFpbk1heUludGVyY2VwdEluZGV4ZWRBY2Nlc3Nlcyh2
bSk7Ci0gICAgCi0gICAgZm9yIChKU09iamVjdCogY3VycmVudCA9IHRoaXM7IDspIHsKLSAgICAg
ICAgSlNWYWx1ZSBwcm90b3R5cGUgPSBjdXJyZW50LT5nZXRQcm90b3R5cGVEaXJlY3Qodm0pOwot
ICAgICAgICBpZiAocHJvdG90eXBlLmlzTnVsbCgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICAKLSAgICAgICAgY3VycmVudCA9IGFzT2JqZWN0KHByb3RvdHlwZSk7Ci0gICAg
ICAgIAotICAgICAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzOwotICAgICAgICBQcm9wZXJ0eU9mZnNl
dCBvZmZzZXQgPSBjdXJyZW50LT5zdHJ1Y3R1cmUodm0pLT5nZXQodm0sIHByb3BlcnR5TmFtZSwg
YXR0cmlidXRlcyk7Ci0gICAgICAgIGlmICghSlNDOjppc1ZhbGlkT2Zmc2V0KG9mZnNldCkpCi0g
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgCi0gICAgICAgIGlmIChhdHRyaWJ1dGVzICYg
KFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IFByb3BlcnR5QXR0cmlidXRlOjpBY2Nlc3Nv
cikpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICB9Ci19Ci0KIGJvb2wgSlNPYmplY3Q6Om5lZWRzU2xvd1B1dEluZGV4aW5nKFZN
JiB2bSkgY29uc3QKIHsKICAgICByZXR1cm4gYW55T2JqZWN0SW5DaGFpbk1heUludGVyY2VwdElu
ZGV4ZWRBY2Nlc3Nlcyh2bSkgfHwgZ2xvYmFsT2JqZWN0KHZtKS0+aXNIYXZpbmdBQmFkVGltZSgp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCShyZXZpc2lv
biAyNzY1ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xNjYsNyArMTY2LDYgQEAgcHVibGljOgogCiAgICAgSlNfRVhQT1JU
X1BSSVZBVEUgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU09iamVjdCos
IEpTR2xvYmFsT2JqZWN0KiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsK
ICAgICBib29sIGdldE93blByb3BlcnR5U2xvdElubGluZShKU0dsb2JhbE9iamVjdCosIFByb3Bl
cnR5TmFtZSwgUHJvcGVydHlTbG90Jik7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEVfSUZfQVNTRVJU
X0VOQUJMRUQgc3RhdGljIHZvaWQgZG9QdXRQcm9wZXJ0eVNlY3VyaXR5Q2hlY2soSlNPYmplY3Qq
LCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwgUHV0UHJvcGVydHlTbG90Jik7CiAKICAg
ICAvLyBUaGUga2V5IGRpZmZlcmVuY2UgYmV0d2VlbiB0aGlzIGFuZCBnZXRPd25Qcm9wZXJ0eVNs
b3QgaXMgdGhhdCBnZXRPd25Qcm9wZXJ0eVNsb3QKICAgICAvLyBjdXJyZW50bHkgcmV0dXJucyBp
bmNvcnJlY3QgcmVzdWx0cyBmb3IgdGhlIERPTSB3aW5kb3cgKHdpdGggbm9uLW93biBwcm9wZXJ0
aWVzKQpAQCAtMTk3LDYgKzE5Niw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgYm9vbCBwdXRJbmxp
bmVGb3JKU09iamVjdChKU0NlbGwqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwgSlNW
YWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7CiAgICAgCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3Rh
dGljIGJvb2wgcHV0KEpTQ2VsbCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBKU1Zh
bHVlLCBQdXRQcm9wZXJ0eVNsb3QmKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBORVZFUl9JTkxJ
TkUgc3RhdGljIGJvb2wgZGVmaW5lUHJvcGVydHlPblJlY2VpdmVyKEpTR2xvYmFsT2JqZWN0Kiwg
UHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmKTsKICAgICAvLyBwdXRCeUlu
ZGV4IGFzc3VtZXMgdGhhdCB0aGUgcmVjZWl2ZXIgaXMgdGhpcyBKU0NlbGwgb2JqZWN0LgogICAg
IEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBib29sIHB1dEJ5SW5kZXgoSlNDZWxsKiwgSlNHbG9i
YWxPYmplY3QqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIGJvb2wgc2hvdWxkVGhy
b3cpOwogICAgICAgICAKQEAgLTIxMywxMiArMjEzLDEzIEBAIHB1YmxpYzoKIAogICAgIEFMV0FZ
U19JTkxJTkUgYm9vbCBwdXRCeUluZGV4SW5saW5lKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIHVpbnQ2NF90IHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJv
dykKICAgICB7CisgICAgICAgIFZNJiB2bSA9IGdldFZNKGdsb2JhbE9iamVjdCk7CiAgICAgICAg
IGlmIChMSUtFTFkocHJvcGVydHlOYW1lIDw9IE1BWF9BUlJBWV9JTkRFWCkpCiAgICAgICAgICAg
ICByZXR1cm4gcHV0QnlJbmRleElubGluZShnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PHVpbnQz
Ml90Pihwcm9wZXJ0eU5hbWUpLCB2YWx1ZSwgc2hvdWxkVGhyb3cpOwogCiAgICAgICAgIEFTU0VS
VChwcm9wZXJ0eU5hbWUgPD0gbWF4U2FmZUludGVnZXIoKSk7CiAgICAgICAgIFB1dFByb3BlcnR5
U2xvdCBzbG90KHRoaXMsIHNob3VsZFRocm93KTsKLSAgICAgICAgcmV0dXJuIHB1dElubGluZUZv
ckpTT2JqZWN0KHRoaXMsIGdsb2JhbE9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbShnZXRWTShnbG9i
YWxPYmplY3QpLCBwcm9wZXJ0eU5hbWUpLCB2YWx1ZSwgc2xvdCk7CisgICAgICAgIHJldHVybiBt
ZXRob2RUYWJsZSh2bSktPnB1dCh0aGlzLCBnbG9iYWxPYmplY3QsIElkZW50aWZpZXI6OmZyb20o
dm0sIHByb3BlcnR5TmFtZSksIHZhbHVlLCBzbG90KTsKICAgICB9CiAgICAgICAgIAogICAgIC8v
IFRoaXMgaXMgc2ltaWxhciB0byB0aGUgcHV0RGlyZWN0KiBtZXRob2RzOgpAQCAtNjM3LDYgKzYz
OCw3IEBAIHB1YmxpYzoKICAgICAvLyAgLSBhdHRyaWJ1dGVzIHdpbGwgYmUgcmVzcGVjdGVkIChh
ZnRlciB0aGUgY2FsbCB0aGUgcHJvcGVydHkgd2lsbCBleGlzdCB3aXRoIHRoZSBnaXZlbiBhdHRy
aWJ1dGVzKQogICAgIC8vICAtIHRoZSBwcm9wZXJ0eSBuYW1lIGlzIGFzc3VtZWQgdG8gbm90IGJl
IGFuIGluZGV4LgogICAgIGJvb2wgcHV0RGlyZWN0KFZNJiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVl
LCB1bnNpZ25lZCBhdHRyaWJ1dGVzID0gMCk7CisgICAgYm9vbCBwdXREaXJlY3QoVk0mLCBQcm9w
ZXJ0eU5hbWUsIEpTVmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMsIFB1dFByb3BlcnR5U2xvdCYp
OwogICAgIGJvb2wgcHV0RGlyZWN0KFZNJiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQcm9w
ZXJ0eVNsb3QmKTsKICAgICB2b2lkIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKFZNJiwgUHJv
cGVydHlOYW1lLCBKU1ZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzID0gMCk7CiAgICAgYm9vbCBw
dXREaXJlY3ROb25JbmRleEFjY2Vzc29yKFZNJiwgUHJvcGVydHlOYW1lLCBHZXR0ZXJTZXR0ZXIq
LCB1bnNpZ25lZCBhdHRyaWJ1dGVzKTsKQEAgLTc2NCw2ICs3NjYsMTEgQEAgcHVibGljOgogICAg
IGJvb2wgaGFzR2V0dGVyU2V0dGVyUHJvcGVydGllcyhWTSYgdm0pIHsgcmV0dXJuIHN0cnVjdHVy
ZSh2bSktPmhhc0dldHRlclNldHRlclByb3BlcnRpZXMoKTsgfQogICAgIGJvb2wgaGFzQ3VzdG9t
R2V0dGVyU2V0dGVyUHJvcGVydGllcyhWTSYgdm0pIHsgcmV0dXJuIHN0cnVjdHVyZSh2bSktPmhh
c0N1c3RvbUdldHRlclNldHRlclByb3BlcnRpZXMoKTsgfQogCisgICAgYm9vbCBoYXNOb25SZWlm
aWVkU3RhdGljUHJvcGVydGllcyhWTSYgdm0pCisgICAgeworICAgICAgICByZXR1cm4gVHlwZUlu
Zm86Omhhc1N0YXRpY1Byb3BlcnR5VGFibGUoaW5saW5lVHlwZUZsYWdzKCkpICYmICFzdHJ1Y3R1
cmUodm0pLT5zdGF0aWNQcm9wZXJ0aWVzUmVpZmllZCgpOworICAgIH0KKwogICAgIC8vIHB1dE93
bkRhdGFQcm9wZXJ0eSBoYXMgJ3B1dCcgbGlrZSBzZW1hbnRpY3MsIGhvd2V2ZXIgdGhpcyBtZXRo
b2Q6CiAgICAgLy8gIC0gYXNzdW1lcyB0aGUgb2JqZWN0IGNvbnRhaW5zIG5vIG93biBnZXR0ZXIv
c2V0dGVyIHByb3BlcnRpZXMuCiAgICAgLy8gIC0gcHJvdmlkZXMgbm8gc3BlY2lhbCBoYW5kbGlu
ZyBmb3IgX19wcm90b19fCkBAIC04MTAsNyArODE3LDYgQEAgcHVibGljOgogICAgIGJvb2wgaXNG
cm96ZW4oVk0mIHZtKSB7IHJldHVybiBzdHJ1Y3R1cmUodm0pLT5pc0Zyb3plbih2bSk7IH0KIAog
ICAgIEpTX0VYUE9SVF9QUklWQVRFIGJvb2wgYW55T2JqZWN0SW5DaGFpbk1heUludGVyY2VwdElu
ZGV4ZWRBY2Nlc3NlcyhWTSYpIGNvbnN0OwotICAgIEpTX0VYUE9SVF9QUklWQVRFIGJvb2wgcHJv
dG90eXBlQ2hhaW5NYXlJbnRlcmNlcHRTdG9yZVRvKFZNJiwgUHJvcGVydHlOYW1lKTsKICAgICBi
b29sIG5lZWRzU2xvd1B1dEluZGV4aW5nKFZNJikgY29uc3Q7CiAKIHByaXZhdGU6CkBAIC0xMTAz
LDYgKzExMDksOCBAQCBwcml2YXRlOgogICAgIGJvb2wgcHV0RGlyZWN0SW50ZXJuYWwoVk0mLCBQ
cm9wZXJ0eU5hbWUsIEpTVmFsdWUsIHVuc2lnbmVkIGF0dHIsIFB1dFByb3BlcnR5U2xvdCYpOwog
CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgTkVWRVJfSU5MSU5FIGJvb2wgcHV0SW5saW5lU2xvdyhK
U0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7
CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgTkVWRVJfSU5MSU5FIGJvb2wgcHV0SW5saW5lRmFzdFJl
cGxhY2luZ1N0YXRpY1Byb3BlcnR5SWZOZWVkZWQoSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5h
bWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOworICAgIGJvb2wgcHV0SW5saW5lRmFzdChK
U0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7
CiAKICAgICBib29sIGdldE5vbkluZGV4UHJvcGVydHlTbG90KEpTR2xvYmFsT2JqZWN0KiwgUHJv
cGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKICAgICBib29sIGdldE93bk5vbkluZGV4UHJvcGVy
dHlTbG90KFZNJiwgU3RydWN0dXJlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKQEAg
LTE0MzUsMTAgKzE0NDMsNiBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgSlNPYmplY3Q6OmdldE93blBy
b3BlCiB7CiAgICAgcmV0dXJuIGdldE93blByb3BlcnR5U2xvdEltcGwob2JqZWN0LCBnbG9iYWxP
YmplY3QsIHByb3BlcnR5TmFtZSwgc2xvdCk7CiB9Ci0KLUFMV0FZU19JTkxJTkUgdm9pZCBKU09i
amVjdDo6ZG9QdXRQcm9wZXJ0eVNlY3VyaXR5Q2hlY2soSlNPYmplY3QqLCBKU0dsb2JhbE9iamVj
dCosIFByb3BlcnR5TmFtZSwgUHV0UHJvcGVydHlTbG90JikKLXsKLX0KICNlbmRpZgogCiAvLyBJ
dCBtYXkgc2VlbSBjcmF6eSB0byBpbmxpbmUgYSBmdW5jdGlvbiB0aGlzIGxhcmdlIGJ1dCBpdCBt
YWtlcyBhIGJpZyBkaWZmZXJlbmNlCkBAIC0xNTIyLDYgKzE1MjYsMTMgQEAgaW5saW5lIGJvb2wg
SlNPYmplY3Q6OnB1dERpcmVjdChWTSYgdm0sIAogICAgIHJldHVybiBwdXREaXJlY3RJbnRlcm5h
bDxQdXRNb2RlRGVmaW5lT3duUHJvcGVydHk+KHZtLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBhdHRy
aWJ1dGVzLCBzbG90KTsKIH0KIAoraW5saW5lIGJvb2wgSlNPYmplY3Q6OnB1dERpcmVjdChWTSYg
dm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIHVuc2lnbmVkIGF0
dHJpYnV0ZXMsIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKK3sKKyAgICBBU1NFUlQoIXZhbHVlLmlz
R2V0dGVyU2V0dGVyKCkpOworICAgIEFTU0VSVCghdmFsdWUuaXNDdXN0b21HZXR0ZXJTZXR0ZXIo
KSk7CisgICAgcmV0dXJuIHB1dERpcmVjdEludGVybmFsPFB1dE1vZGVEZWZpbmVPd25Qcm9wZXJ0
eT4odm0sIHByb3BlcnR5TmFtZSwgdmFsdWUsIGF0dHJpYnV0ZXMsIHNsb3QpOworfQorCiBpbmxp
bmUgYm9vbCBKU09iamVjdDo6cHV0RGlyZWN0KFZNJiB2bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5
TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBzbG90KQogewogICAgIEFTU0VS
VCghdmFsdWUuaXNHZXR0ZXJTZXR0ZXIoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU09iamVjdElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU09iamVjdElubGluZXMuaAkocmV2aXNpb24gMjc2NTg1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3RJbmxpbmVzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTY5LDYgKzY5LDggQEAgQUxXQVlTX0lOTElORSBib29sIEpTT2JqZWN0OjpjYW5QZXJm
b3JtRgogICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG9iai0+c3RydWN0dXJlKHZtKTsK
ICAgICAgICAgaWYgKHN0cnVjdHVyZS0+aGFzUmVhZE9ubHlPckdldHRlclNldHRlclByb3BlcnRp
ZXNFeGNsdWRpbmdQcm90bygpIHx8IHN0cnVjdHVyZS0+dHlwZUluZm8oKS5vdmVycmlkZXNHZXRQ
cm90b3R5cGUoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKG9iaiAh
PSB0aGlzICYmIHN0cnVjdHVyZS0+dHlwZUluZm8oKS5vdmVycmlkZXNQdXQoKSkKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICBwcm90b3R5cGUgPSBvYmotPmdldFByb3RvdHlw
ZURpcmVjdCh2bSk7CiAgICAgICAgIGlmIChwcm90b3R5cGUuaXNOdWxsKCkpCkBAIC0yMzEsMzIg
KzIzMyw0MyBAQCBBTFdBWVNfSU5MSU5FIFByb3BlcnR5T2Zmc2V0IEpTT2JqZWN0OjpwCiAgICAg
cmV0dXJuIHJlc3VsdDsKIH0KIAotLy8gRUNNQSA4LjYuMi4yCisvLyBodHRwczovL3RjMzkuZXMv
ZWNtYTI2Mi8jc2VjLW9yZGluYXJ5c2V0CiBBTFdBWVNfSU5MSU5FIGJvb2wgSlNPYmplY3Q6OnB1
dElubGluZUZvckpTT2JqZWN0KEpTQ2VsbCogY2VsbCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgUHV0UHJvcGVy
dHlTbG90JiBzbG90KQogewogICAgIFZNJiB2bSA9IGdldFZNKGdsb2JhbE9iamVjdCk7Ci0gICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgSlNPYmplY3QqIHRo
aXNPYmplY3QgPSBqc0Nhc3Q8SlNPYmplY3QqPihjZWxsKTsKICAgICBBU1NFUlQodmFsdWUpOwog
ICAgIEFTU0VSVCghSGVhcDo6aGVhcCh2YWx1ZSkgfHwgSGVhcDo6aGVhcCh2YWx1ZSkgPT0gSGVh
cDo6aGVhcCh0aGlzT2JqZWN0KSk7CiAKLSAgICBpZiAoVU5MSUtFTFkoaXNUaGlzVmFsdWVBbHRl
cmVkKHNsb3QsIHRoaXNPYmplY3QpKSkKLSAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3Bl
LCBvcmRpbmFyeVNldFNsb3coZ2xvYmFsT2JqZWN0LCB0aGlzT2JqZWN0LCBwcm9wZXJ0eU5hbWUs
IHZhbHVlLCBzbG90LnRoaXNWYWx1ZSgpLCBzbG90LmlzU3RyaWN0TW9kZSgpKSk7Ci0KICAgICAv
LyBUcnkgaW5kZXhlZCBwdXQgZmlyc3QuIFRoaXMgaXMgcmVxdWlyZWQgZm9yIGNvcnJlY3RuZXNz
LCBzaW5jZSBsb2FkcyBvbiBwcm9wZXJ0eSBuYW1lcyB0aGF0IGFwcGVhciBsaWtlCiAgICAgLy8g
dmFsaWQgaW5kaWNlcyB3aWxsIG5ldmVyIGxvb2sgaW4gdGhlIG5hbWVkIHByb3BlcnR5IHN0b3Jh
Z2UuCi0gICAgaWYgKE9wdGlvbmFsPHVpbnQzMl90PiBpbmRleCA9IHBhcnNlSW5kZXgocHJvcGVy
dHlOYW1lKSkKLSAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBwdXRCeUluZGV4KHRo
aXNPYmplY3QsIGdsb2JhbE9iamVjdCwgaW5kZXgudmFsdWUoKSwgdmFsdWUsIHNsb3QuaXNTdHJp
Y3RNb2RlKCkpKTsKLQotICAgIGlmICh0aGlzT2JqZWN0LT5jYW5QZXJmb3JtRmFzdFB1dElubGlu
ZSh2bSwgcHJvcGVydHlOYW1lKSkgewotICAgICAgICBBU1NFUlQoIXRoaXNPYmplY3QtPnByb3Rv
dHlwZUNoYWluTWF5SW50ZXJjZXB0U3RvcmVUbyh2bSwgcHJvcGVydHlOYW1lKSk7Ci0gICAgICAg
IGlmICghdGhpc09iamVjdC0+cHV0RGlyZWN0SW50ZXJuYWw8UHV0TW9kZVB1dD4odm0sIHByb3Bl
cnR5TmFtZSwgdmFsdWUsIDAsIHNsb3QpKQotICAgICAgICAgICAgcmV0dXJuIHR5cGVFcnJvcihn
bG9iYWxPYmplY3QsIHNjb3BlLCBzbG90LmlzU3RyaWN0TW9kZSgpLCBSZWFkb25seVByb3BlcnR5
V3JpdGVFcnJvcik7Ci0gICAgICAgIHJldHVybiB0cnVlOworICAgIGlmIChPcHRpb25hbDx1aW50
MzJfdD4gaW5kZXggPSBwYXJzZUluZGV4KHByb3BlcnR5TmFtZSkpIHsKKyAgICAgICAgaWYgKFVO
TElLRUxZKGlzVGhpc1ZhbHVlQWx0ZXJlZChzbG90LCB0aGlzT2JqZWN0KSkpCisgICAgICAgICAg
ICByZXR1cm4gb3JkaW5hcnlTZXRTbG93KGdsb2JhbE9iamVjdCwgdGhpc09iamVjdCwgcHJvcGVy
dHlOYW1lLCB2YWx1ZSwgc2xvdC50aGlzVmFsdWUoKSwgc2xvdC5pc1N0cmljdE1vZGUoKSk7Cisg
ICAgICAgIHJldHVybiB0aGlzT2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPnB1dEJ5SW5kZXgodGhp
c09iamVjdCwgZ2xvYmFsT2JqZWN0LCBpbmRleC52YWx1ZSgpLCB2YWx1ZSwgc2xvdC5pc1N0cmlj
dE1vZGUoKSk7CiAgICAgfQogCi0gICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCB0aGlzT2Jq
ZWN0LT5wdXRJbmxpbmVTbG93KGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xv
dCkpOworICAgIGlmICghdGhpc09iamVjdC0+Y2FuUGVyZm9ybUZhc3RQdXRJbmxpbmUodm0sIHBy
b3BlcnR5TmFtZSkpCisgICAgICAgIHJldHVybiB0aGlzT2JqZWN0LT5wdXRJbmxpbmVTbG93KGds
b2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCk7CisgICAgaWYgKFVOTElLRUxZ
KGlzVGhpc1ZhbHVlQWx0ZXJlZChzbG90LCB0aGlzT2JqZWN0KSkpCisgICAgICAgIHJldHVybiBk
ZWZpbmVQcm9wZXJ0eU9uUmVjZWl2ZXIoZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHZhbHVl
LCBzbG90KTsKKyAgICBpZiAoVU5MSUtFTFkodGhpc09iamVjdC0+aGFzTm9uUmVpZmllZFN0YXRp
Y1Byb3BlcnRpZXModm0pKSkKKyAgICAgICAgcmV0dXJuIHRoaXNPYmplY3QtPnB1dElubGluZUZh
c3RSZXBsYWNpbmdTdGF0aWNQcm9wZXJ0eUlmTmVlZGVkKGdsb2JhbE9iamVjdCwgcHJvcGVydHlO
YW1lLCB2YWx1ZSwgc2xvdCk7CisgICAgcmV0dXJuIHRoaXNPYmplY3QtPnB1dElubGluZUZhc3Qo
Z2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KTsKK30KKworQUxXQVlTX0lO
TElORSBib29sIEpTT2JqZWN0OjpwdXRJbmxpbmVGYXN0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFB1dFByb3Bl
cnR5U2xvdCYgc2xvdCkKK3sKKyAgICBBU1NFUlQoIXBhcnNlSW5kZXgocHJvcGVydHlOYW1lKSk7
CisKKyAgICBWTSYgdm0gPSBnZXRWTShnbG9iYWxPYmplY3QpOworICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIC8vIEZJWE1FOiBGb3IgYSBmYWlsdXJlIGR1
ZSB0byBub24tZXh0ZW5zaWJsZSBzdHJ1Y3R1cmUsIHRoZSBlcnJvciBtZXNzYWdlIGlzIG1pc2xl
YWRpbmcuCisgICAgaWYgKCFwdXREaXJlY3RJbnRlcm5hbDxQdXRNb2RlUHV0Pih2bSwgcHJvcGVy
dHlOYW1lLCB2YWx1ZSwgMCwgc2xvdCkpCisgICAgICAgIHJldHVybiB0eXBlRXJyb3IoZ2xvYmFs
T2JqZWN0LCBzY29wZSwgc2xvdC5pc1N0cmljdE1vZGUoKSwgUmVhZG9ubHlQcm9wZXJ0eVdyaXRl
RXJyb3IpOworICAgIHJldHVybiB0cnVlOwogfQogCiAvLyBIYXNPd25Qcm9wZXJ0eShPLCBQKSBm
cm9tIHNlY3Rpb24gNy4zLjExIGluIHRoZSBzcGVjLgpAQCAtMjk5LDcgKzMxMiw3IEBAIEFMV0FZ
U19JTkxJTkUgYm9vbCBKU09iamVjdDo6cHV0RGlyZWN0SW4KICAgICAgICAgdW5zaWduZWQgY3Vy
cmVudEF0dHJpYnV0ZXM7CiAgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVy
ZS0+Z2V0KHZtLCBwcm9wZXJ0eU5hbWUsIGN1cnJlbnRBdHRyaWJ1dGVzKTsKICAgICAgICAgaWYg
KG9mZnNldCAhPSBpbnZhbGlkT2Zmc2V0KSB7Ci0gICAgICAgICAgICBpZiAoKG1vZGUgPT0gUHV0
TW9kZVB1dCkgJiYgY3VycmVudEF0dHJpYnV0ZXMgJiBQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9u
bHkpCisgICAgICAgICAgICBpZiAoKG1vZGUgPT0gUHV0TW9kZVB1dCkgJiYgY3VycmVudEF0dHJp
YnV0ZXMgJiBQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHlPckFjY2Vzc29yT3JDdXN0b21BY2Nl
c3NvcikKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgICAgIHB1dERp
cmVjdCh2bSwgb2Zmc2V0LCB2YWx1ZSk7CkBAIC0zNTgsNyArMzcxLDcgQEAgQUxXQVlTX0lOTElO
RSBib29sIEpTT2JqZWN0OjpwdXREaXJlY3RJbgogICAgIHVuc2lnbmVkIGN1cnJlbnRBdHRyaWJ1
dGVzOwogICAgIG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0KHZtLCBwcm9wZXJ0eU5hbWUsIGN1cnJl
bnRBdHRyaWJ1dGVzKTsKICAgICBpZiAob2Zmc2V0ICE9IGludmFsaWRPZmZzZXQpIHsKLSAgICAg
ICAgaWYgKChtb2RlID09IFB1dE1vZGVQdXQpICYmIGN1cnJlbnRBdHRyaWJ1dGVzICYgUHJvcGVy
dHlBdHRyaWJ1dGU6OlJlYWRPbmx5KQorICAgICAgICBpZiAoKG1vZGUgPT0gUHV0TW9kZVB1dCkg
JiYgY3VycmVudEF0dHJpYnV0ZXMgJiBQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHlPckFjY2Vz
c29yT3JDdXN0b21BY2Nlc3NvcikKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAg
ICBzdHJ1Y3R1cmUtPmRpZFJlcGxhY2VQcm9wZXJ0eShvZmZzZXQpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm94eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTUHJveHkuaAkocmV2aXNpb24gMjc2NTg1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm94eS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3
ICszMiw3IEBAIG5hbWVzcGFjZSBKU0MgewogY2xhc3MgSlNQcm94eSA6IHB1YmxpYyBKU05vbkZp
bmFsT2JqZWN0IHsKIHB1YmxpYzoKICAgICB1c2luZyBCYXNlID0gSlNOb25GaW5hbE9iamVjdDsK
LSAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3Ry
dWN0dXJlRmxhZ3MgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNHZXRP
d25Qcm9wZXJ0eU5hbWVzIHwgT3ZlcnJpZGVzR2V0UHJvdG90eXBlIHwgSW50ZXJjZXB0c0dldE93
blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybzsKKyAgICBzdGF0aWMg
Y29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3Mg
fCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eU5h
bWVzIHwgT3ZlcnJpZGVzUHV0IHwgT3ZlcnJpZGVzR2V0UHJvdG90eXBlIHwgSW50ZXJjZXB0c0dl
dE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybzsKIAogICAgIHRl
bXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2Vzcz4KICAgICBzdGF0aWMgSXNv
U3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTVHlwZUluZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1R5cGVJbmZvLmgJKHJldmlzaW9uIDI3NjU4NSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTVHlwZUluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtNTcsNyAr
NTcsNyBAQCBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIElzSW1tdXRhYmxlUHJvCiBzdGF0aWMg
Y29uc3RleHByIHVuc2lnbmVkIEdldE93blByb3BlcnR5U2xvdElzSW1wdXJlRm9yUHJvcGVydHlB
YnNlbmNlID0gMSA8PCAxNTsKIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgSW50ZXJjZXB0c0dl
dE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyA9IDEgPDwgMTY7
CiBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUlzSW1tb3J0YWwgPSAxIDw8IDE3
Owotc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBIYXNQdXRQcm9wZXJ0eVNlY3VyaXR5Q2hlY2sg
PSAxIDw8IDE4Oworc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBPdmVycmlkZXNQdXQgPSAxIDw8
IDE4Owogc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBPdmVycmlkZXNHZXRQcm90b3R5cGUgPSAx
IDw8IDE5Owogc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBHZXRPd25Qcm9wZXJ0eVNsb3RNYXlC
ZVdyb25nQWJvdXREb250RW51bSA9IDEgPDwgMjA7CiAKQEAgLTk0LDYgKzk0LDcgQEAgcHVibGlj
OgogICAgIGJvb2wgaW1wbGVtZW50c0RlZmF1bHRIYXNJbnN0YW5jZSgpIGNvbnN0IHsgcmV0dXJu
IGlzU2V0T25GbGFnczE8SW1wbGVtZW50c0RlZmF1bHRIYXNJbnN0YW5jZT4oKTsgfQogICAgIGJv
b2wgb3ZlcnJpZGVzR2V0Q2FsbERhdGEoKSBjb25zdCB7IHJldHVybiBpc1NldE9uRmxhZ3MxPE92
ZXJyaWRlc0dldENhbGxEYXRhPigpOyB9CiAgICAgYm9vbCBvdmVycmlkZXNHZXRPd25Qcm9wZXJ0
eVNsb3QoKSBjb25zdCB7IHJldHVybiBvdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QoaW5saW5l
VHlwZUZsYWdzKCkpOyB9CisgICAgYm9vbCBoYXNTdGF0aWNQcm9wZXJ0eVRhYmxlKCkgY29uc3Qg
eyByZXR1cm4gaXNTZXRPbkZsYWdzMTxIYXNTdGF0aWNQcm9wZXJ0eVRhYmxlPigpOyB9CiAgICAg
c3RhdGljIGJvb2wgb3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90KElubGluZVR5cGVGbGFncyBm
bGFncykgeyByZXR1cm4gZmxhZ3MgJiBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3Q7IH0KICAg
ICBzdGF0aWMgYm9vbCBoYXNTdGF0aWNQcm9wZXJ0eVRhYmxlKElubGluZVR5cGVGbGFncyBmbGFn
cykgeyByZXR1cm4gZmxhZ3MgJiBIYXNTdGF0aWNQcm9wZXJ0eVRhYmxlOyB9CiAgICAgc3RhdGlj
IGJvb2wgcGVyQ2VsbEJpdChJbmxpbmVUeXBlRmxhZ3MgZmxhZ3MpIHsgcmV0dXJuIGZsYWdzICYg
VHlwZUluZm9QZXJDZWxsQml0OyB9CkBAIC0xMDIsMTIgKzEwMywxMiBAQCBwdWJsaWM6CiAgICAg
Ym9vbCBvdmVycmlkZXNHZXRPd25Qcm9wZXJ0eU5hbWVzKCkgY29uc3QgeyByZXR1cm4gaXNTZXRP
bkZsYWdzMjxPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eU5hbWVzPigpOyB9CiAgICAgYm9vbCBvdmVy
cmlkZXNHZXRPd25TcGVjaWFsUHJvcGVydHlOYW1lcygpIGNvbnN0IHsgcmV0dXJuIGlzU2V0T25G
bGFnczI8T3ZlcnJpZGVzR2V0T3duU3BlY2lhbFByb3BlcnR5TmFtZXM+KCk7IH0KICAgICBib29s
IG92ZXJyaWRlc0FueUZvcm1PZkdldE93blByb3BlcnR5TmFtZXMoKSBjb25zdCB7IHJldHVybiBv
dmVycmlkZXNHZXRPd25Qcm9wZXJ0eU5hbWVzKCkgfHwgb3ZlcnJpZGVzR2V0T3duU3BlY2lhbFBy
b3BlcnR5TmFtZXMoKTsgfQorICAgIGJvb2wgb3ZlcnJpZGVzUHV0KCkgY29uc3QgeyByZXR1cm4g
aXNTZXRPbkZsYWdzMjxPdmVycmlkZXNQdXQ+KCk7IH0KICAgICBib29sIG92ZXJyaWRlc0dldFBy
b3RvdHlwZSgpIGNvbnN0IHsgcmV0dXJuIGlzU2V0T25GbGFnczI8T3ZlcnJpZGVzR2V0UHJvdG90
eXBlPigpOyB9CiAgICAgYm9vbCBwcm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmcoKSBjb25zdCB7IHJl
dHVybiBpc1NldE9uRmxhZ3MyPFByb2hpYml0c1Byb3BlcnR5Q2FjaGluZz4oKTsgfQogICAgIGJv
b2wgZ2V0T3duUHJvcGVydHlTbG90SXNJbXB1cmUoKSBjb25zdCB7IHJldHVybiBpc1NldE9uRmxh
Z3MyPEdldE93blByb3BlcnR5U2xvdElzSW1wdXJlPigpOyB9CiAgICAgYm9vbCBnZXRPd25Qcm9w
ZXJ0eVNsb3RJc0ltcHVyZUZvclByb3BlcnR5QWJzZW5jZSgpIGNvbnN0IHsgcmV0dXJuIGlzU2V0
T25GbGFnczI8R2V0T3duUHJvcGVydHlTbG90SXNJbXB1cmVGb3JQcm9wZXJ0eUFic2VuY2U+KCk7
IH0KICAgICBib29sIGdldE93blByb3BlcnR5U2xvdE1heUJlV3JvbmdBYm91dERvbnRFbnVtKCkg
Y29uc3QgeyByZXR1cm4gaXNTZXRPbkZsYWdzMjxHZXRPd25Qcm9wZXJ0eVNsb3RNYXlCZVdyb25n
QWJvdXREb250RW51bT4oKTsgfQotICAgIGJvb2wgaGFzUHV0UHJvcGVydHlTZWN1cml0eUNoZWNr
KCkgY29uc3QgeyByZXR1cm4gaXNTZXRPbkZsYWdzMjxIYXNQdXRQcm9wZXJ0eVNlY3VyaXR5Q2hl
Y2s+KCk7IH0KICAgICBib29sIG5ld0ltcHVyZVByb3BlcnR5RmlyZXNXYXRjaHBvaW50cygpIGNv
bnN0IHsgcmV0dXJuIGlzU2V0T25GbGFnczI8TmV3SW1wdXJlUHJvcGVydHlGaXJlc1dhdGNocG9p
bnRzPigpOyB9CiAgICAgYm9vbCBpc0ltbXV0YWJsZVByb3RvdHlwZUV4b3RpY09iamVjdCgpIGNv
bnN0IHsgcmV0dXJuIGlzU2V0T25GbGFnczI8SXNJbW11dGFibGVQcm90b3R5cGVFeG90aWNPYmpl
Y3Q+KCk7IH0KICAgICBib29sIGludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZl
bldoZW5MZW5ndGhJc05vdFplcm8oKSBjb25zdCB7IHJldHVybiBpc1NldE9uRmxhZ3MyPEludGVy
Y2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8+KCk7
IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xvb2t1cC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xvb2t1cC5oCShyZXZpc2lvbiAy
NzY1ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Mb29rdXAuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjYyLDcwICsyNjIsNiBAQCBpbmxpbmUgYm9vbCByZXBsYWNlU3RhdGljUHJv
cGVydHlTbG90KFZNCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLS8vICdiYXNlJyBtZWFucyB0aGUg
b2JqZWN0IGhvbGRpbmcgdGhlIHByb3BlcnR5IChwb3NzaWJseSBpbiB0aGUgcHJvdG90eXBlIGNo
YWluIG9mIHRoZSBvYmplY3QgcHV0IHdhcyBjYWxsZWQgb24pLgotLy8gJ3RoaXNWYWx1ZScgaXMg
dGhlIG9iamVjdCB0aGF0IHB1dCBpcyBiZWluZyBhcHBsaWVkIHRvIChpbiB0aGUgY2FzZSBvZiBh
IHByb3h5LCB0aGUgcHJveHkgdGFyZ2V0KS4KLS8vICdzbG90LnRoaXNWYWx1ZSgpJyBpcyB0aGUg
b2JqZWN0IHRoZSBwdXQgd2FzIG9yaWdpbmFsbHkgcGVyZm9ybWVkIG9uIChpbiB0aGUgY2FzZSBv
ZiBhIHByb3h5LCB0aGUgcHJveHkgaXRzZWxmKS4KLWlubGluZSBib29sIHB1dEVudHJ5KEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IENsYXNzSW5mbyosIGNvbnN0IEhhc2hUYWJs
ZVZhbHVlKiBlbnRyeSwgSlNPYmplY3QqIGJhc2UsIEpTT2JqZWN0KiB0aGlzVmFsdWUsIFByb3Bl
cnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgc2xv
dCkKLXsKLSAgICBWTSYgdm0gPSBnZXRWTShnbG9iYWxPYmplY3QpOwotICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAgIGlmIChlbnRyeS0+YXR0cmlidXRlcygp
ICYgUHJvcGVydHlBdHRyaWJ1dGU6OkJ1aWx0aW5PckZ1bmN0aW9uT3JMYXp5UHJvcGVydHkpIHsK
LSAgICAgICAgaWYgKCEoZW50cnktPmF0dHJpYnV0ZXMoKSAmIFByb3BlcnR5QXR0cmlidXRlOjpS
ZWFkT25seSkpIHsKLSAgICAgICAgICAgIC8vIElmIHRoaXMgaXMgYSBmdW5jdGlvbiBvciBsYXp5
IHByb3BlcnR5IHB1dCB0aGVuIHdlIGp1c3QgZG8gdGhlIHB1dCBiZWNhdXNlCi0gICAgICAgICAg
ICAvLyBsb2dpY2FsbHkgdGhlIG9iamVjdCBhbHJlYWR5IGhhZCB0aGUgcHJvcGVydHksIHNvIHRo
aXMgaXMganVzdCBhIHJlcGxhY2UuCi0gICAgICAgICAgICAvLyBGSVhNRTogdGhpc1ZhbHVlIG1h
eSBiZSBhbiBvYmplY3Qgd2l0aCBub24tZXh0ZW5zaWJsZSBzdHJ1Y3R1cmUgd2UgbXVzdCB0aHJv
dyBmb3IuCi0gICAgICAgICAgICBpZiAoSlNPYmplY3QqIHRoaXNPYmplY3QgPSBqc0R5bmFtaWND
YXN0PEpTT2JqZWN0Kj4odm0sIHRoaXNWYWx1ZSkpCi0gICAgICAgICAgICAgICAgdGhpc09iamVj
dC0+cHV0RGlyZWN0KHZtLCBwcm9wZXJ0eU5hbWUsIHZhbHVlKTsKLSAgICAgICAgICAgIHJldHVy
biB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0eXBlRXJyb3IoZ2xvYmFsT2JqZWN0
LCBzY29wZSwgc2xvdC5pc1N0cmljdE1vZGUoKSwgUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3Ip
OwotICAgIH0KLQotICAgIGlmIChlbnRyeS0+YXR0cmlidXRlcygpICYgUHJvcGVydHlBdHRyaWJ1
dGU6OkFjY2Vzc29yKQotICAgICAgICByZXR1cm4gdHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2Nv
cGUsIHNsb3QuaXNTdHJpY3RNb2RlKCksIFJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9yKTsKLQot
ICAgIGlmICghKGVudHJ5LT5hdHRyaWJ1dGVzKCkgJiBQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9u
bHkpKSB7Ci0gICAgICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoIShlbnRyeS0+YXR0cmlidXRlcygp
ICYgUHJvcGVydHlBdHRyaWJ1dGU6OkRPTUpJVEF0dHJpYnV0ZSksICJET01KSVRBdHRyaWJ1dGUg
c3VwcG9ydHMgcmVhZG9ubHkgYXR0cmlidXRlcyBjdXJyZW50bHkuIik7Ci0gICAgICAgIGJvb2wg
aXNBY2Nlc3NvciA9IGVudHJ5LT5hdHRyaWJ1dGVzKCkgJiBQcm9wZXJ0eUF0dHJpYnV0ZTo6Q3Vz
dG9tQWNjZXNzb3I7Ci0gICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgb25seSBiZSBjYWNoaW5n
IHRoZXNlIGlmIHdlJ3JlIG5vdCBhbiB1bmNhY2hlYWJsZSBkaWN0aW9uYXJ5OgotICAgICAgICAv
LyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE1MzQ3Ci0gICAgICAg
IC8vIFdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgd2UgZGVjaWRlIHRvIGNhY2hlIHRoaXMgcHJv
cGVydHkgYmVmb3JlIHdlIHBvdGVudGlhbGx5IGV4ZWN1dGUgYXJpYml0cmFyeSBKUy4KLSAgICAg
ICAgaWYgKGlzQWNjZXNzb3IpCi0gICAgICAgICAgICBzbG90LnNldEN1c3RvbUFjY2Vzc29yKGJh
c2UsIGVudHJ5LT5wcm9wZXJ0eVB1dHRlcigpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAg
c2xvdC5zZXRDdXN0b21WYWx1ZShiYXNlLCBlbnRyeS0+cHJvcGVydHlQdXR0ZXIoKSk7Ci0KLSAg
ICAgICAgYXV0byByZXN1bHQgPSBjYWxsQ3VzdG9tU2V0dGVyKGdsb2JhbE9iamVjdCwgZW50cnkt
PnByb3BlcnR5UHV0dGVyKCksIGlzQWNjZXNzb3IsIGJhc2UsIHNsb3QudGhpc1ZhbHVlKCksIHZh
bHVlLCBwcm9wZXJ0eU5hbWUpOwotICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBm
YWxzZSk7Ci0gICAgICAgIGlmIChyZXN1bHQgIT0gVHJpU3RhdGU6OkluZGV0ZXJtaW5hdGUpCi0g
ICAgICAgICAgICByZXR1cm4gcmVzdWx0ID09IFRyaVN0YXRlOjpUcnVlOwotCi0gICAgICAgIC8v
IEZJWE1FOiB0aGlzVmFsdWUgbWF5IGJlIGFuIG9iamVjdCB3aXRoIG5vbi1leHRlbnNpYmxlIHN0
cnVjdHVyZSB3ZSBtdXN0IHRocm93IGZvci4KLSAgICAgICAgaWYgKEpTT2JqZWN0KiB0aGlzT2Jq
ZWN0ID0ganNEeW5hbWljQ2FzdDxKU09iamVjdCo+KHZtLCB0aGlzVmFsdWUpKQotICAgICAgICAg
ICAgdGhpc09iamVjdC0+cHV0RGlyZWN0KHZtLCBwcm9wZXJ0eU5hbWUsIHZhbHVlKTsKLSAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIHR5cGVFcnJvcihnbG9iYWxPYmpl
Y3QsIHNjb3BlLCBzbG90LmlzU3RyaWN0TW9kZSgpLCBSZWFkb25seVByb3BlcnR5V3JpdGVFcnJv
cik7Ci19Ci0KLS8qKgotICogVGhpcyBvbmUgaXMgZm9yICJwdXQiLgotICogSXQgbG9va3MgdXAg
YSBoYXNoIGVudHJ5IGZvciB0aGUgcHJvcGVydHkgdG8gYmUgc2V0LiAgSWYgYW4gZW50cnkKLSAq
IGlzIGZvdW5kIGl0IHNldHMgdGhlIHZhbHVlIGFuZCByZXR1cm5zIHRydWUsIGVsc2UgaXQgcmV0
dXJucyBmYWxzZS4KLSAqLwotaW5saW5lIGJvb2wgbG9va3VwUHV0KEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTT2JqZWN0KiBiYXNlLCBK
U1ZhbHVlIHZhbHVlLCBjb25zdCBIYXNoVGFibGUmIHRhYmxlLCBQdXRQcm9wZXJ0eVNsb3QmIHNs
b3QsIGJvb2wmIHB1dFJlc3VsdCkKLXsKLSAgICBjb25zdCBIYXNoVGFibGVWYWx1ZSogZW50cnkg
PSB0YWJsZS5lbnRyeShwcm9wZXJ0eU5hbWUpOwotCi0gICAgaWYgKCFlbnRyeSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgcHV0UmVzdWx0ID0gcHV0RW50cnkoZ2xvYmFsT2JqZWN0LCB0
YWJsZS5jbGFzc0ZvclRoaXMsIGVudHJ5LCBiYXNlLCBiYXNlLCBwcm9wZXJ0eU5hbWUsIHZhbHVl
LCBzbG90KTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQogaW5saW5lIHZvaWQgcmVpZnlTdGF0aWNQ
cm9wZXJ0eShWTSYgdm0sIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvLCBjb25zdCBQcm9wZXJ0
eU5hbWUmIHByb3BlcnR5TmFtZSwgY29uc3QgSGFzaFRhYmxlVmFsdWUmIHZhbHVlLCBKU09iamVj
dCYgdGhpc09iaikKIHsKICAgICBpZiAodmFsdWUuYXR0cmlidXRlcygpICYgUHJvcGVydHlBdHRy
aWJ1dGU6OkJ1aWx0aW4pIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1By
b3BlcnR5U2xvdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1Byb3BlcnR5U2xvdC5oCShyZXZpc2lvbiAyNzY1ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Qcm9wZXJ0eVNsb3QuaAkod29ya2luZyBjb3B5KQpAQCAtNDcsNiArNDcsNyBA
QCBlbnVtIGNsYXNzIFByb3BlcnR5QXR0cmlidXRlIDogdW5zaWduZWQgCiAgICAgQ3VzdG9tVmFs
dWUgICAgICAgPSAxIDw8IDYsCiAgICAgQ3VzdG9tQWNjZXNzb3JPclZhbHVlID0gQ3VzdG9tQWNj
ZXNzb3IgfCBDdXN0b21WYWx1ZSwKICAgICBBY2Nlc3Nvck9yQ3VzdG9tQWNjZXNzb3JPclZhbHVl
ID0gQWNjZXNzb3IgfCBDdXN0b21BY2Nlc3NvciB8IEN1c3RvbVZhbHVlLAorICAgIFJlYWRPbmx5
T3JBY2Nlc3Nvck9yQ3VzdG9tQWNjZXNzb3IgPSBSZWFkT25seSB8IEFjY2Vzc29yIHwgQ3VzdG9t
QWNjZXNzb3IsCiAKICAgICAvLyBUaGluZ3MgdGhhdCBhcmUgdXNlZCBieSBzdGF0aWMgaGFzaHRh
YmxlcyBhcmUgbm90IGluIHRoZSBhdHRyaWJ1dGVzIGJ5dGUgaW4gUHJvcGVydHlNYXBFbnRyeS4K
ICAgICBGdW5jdGlvbiAgICAgICAgICA9IDEgPDwgOCwgIC8vIHByb3BlcnR5IGlzIGEgZnVuY3Rp
b24gLSBvbmx5IHVzZWQgYnkgc3RhdGljIGhhc2h0YWJsZXMKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1Byb3h5T2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9Qcm94eU9iamVjdC5jcHAJKHJldmlzaW9uIDI3NjU4NSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3h5T2JqZWN0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDY0LDYgKzQ2NCw3IEBAIGJvb2wgUHJveHlPYmplY3Q6OnB1dChKU0NlbGwqIGNl
bGwsIEpTR2wKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgc2xvdC5k
aXNhYmxlQ2FjaGluZygpOworICAgIHNsb3Quc2V0SXNUYWludGVkQnlPcGFxdWVPYmplY3QoKTsK
IAogICAgIFByb3h5T2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PFByb3h5T2JqZWN0Kj4oY2Vs
bCk7CiAgICAgYXV0byBwZXJmb3JtRGVmYXVsdFB1dCA9IFsmXSAoKSB7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm94eU9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3h5T2JqZWN0LmgJKHJldmlzaW9uIDI3NjU4NSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3h5T2JqZWN0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTM0LDcgKzM0LDcgQEAgY2xhc3MgUHJveHlPYmplY3QgZmluYWwgOiBwdWJsaWMg
SlNOb25GaQogcHVibGljOgogICAgIHR5cGVkZWYgSlNOb25GaW5hbE9iamVjdCBCYXNlOwogCi0g
ICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVj
dHVyZUZsYWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzR2V0T3du
UHJvcGVydHlOYW1lcyB8IE92ZXJyaWRlc0dldFByb3RvdHlwZSB8IE92ZXJyaWRlc0dldENhbGxE
YXRhIHwgSW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElz
Tm90WmVybyB8IFByb2hpYml0c1Byb3BlcnR5Q2FjaGluZzsKKyAgICBzdGF0aWMgY29uc3RleHBy
IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBPdmVycmlk
ZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eU5hbWVzIHwgT3Zl
cnJpZGVzR2V0UHJvdG90eXBlIHwgT3ZlcnJpZGVzR2V0Q2FsbERhdGEgfCBPdmVycmlkZXNQdXQg
fCBJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3Ra
ZXJvIHwgUHJvaGliaXRzUHJvcGVydHlDYWNoaW5nOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
Q2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+CiAgICAgc3RhdGljIElzb1N1YnNwYWNlKiBz
dWJzcGFjZUZvcihWTSYgdm0pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Q
dXRQcm9wZXJ0eVNsb3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9QdXRQcm9wZXJ0eVNsb3QuaAkocmV2aXNpb24gMjc2NTg1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvUHV0UHJvcGVydHlTbG90LmgJKHdvcmtpbmcgY29weSkKQEAgLTM3
LDcgKzM3LDcgQEAgY2xhc3MgSlNGdW5jdGlvbjsKIGNsYXNzIFB1dFByb3BlcnR5U2xvdCB7CiBw
dWJsaWM6CiAgICAgZW51bSBUeXBlIDogdWludDhfdCB7IFVuY2FjaGFibGUsIEV4aXN0aW5nUHJv
cGVydHksIE5ld1Byb3BlcnR5LCBTZXR0ZXJQcm9wZXJ0eSwgQ3VzdG9tVmFsdWUsIEN1c3RvbUFj
Y2Vzc29yIH07Ci0gICAgZW51bSBDb250ZXh0IHsgVW5rbm93bkNvbnRleHQsIFB1dEJ5SWQsIFB1
dEJ5SWRFdmFsIH07CisgICAgZW51bSBDb250ZXh0IDogdWludDhfdCB7IFVua25vd25Db250ZXh0
LCBQdXRCeUlkLCBQdXRCeUlkRXZhbCwgUmVmbGVjdFNldCB9OwogICAgIHVzaW5nIFB1dFZhbHVl
RnVuYyA9IEpTQzo6UHV0VmFsdWVGdW5jOwogICAgIHVzaW5nIFB1dFZhbHVlRnVuY1dpdGhQdHIg
PSBKU0M6OlB1dFZhbHVlRnVuY1dpdGhQdHI7CiAKQEAgLTQ3LDYgKzQ3LDcgQEAgcHVibGljOgog
ICAgICAgICAsIG1fb2Zmc2V0KGludmFsaWRPZmZzZXQpCiAgICAgICAgICwgbV9pc1N0cmljdE1v
ZGUoaXNTdHJpY3RNb2RlKQogICAgICAgICAsIG1faXNJbml0aWFsaXphdGlvbihpc0luaXRpYWxp
emF0aW9uKQorICAgICAgICAsIG1faXNUYWludGVkQnlPcGFxdWVPYmplY3QoZmFsc2UpCiAgICAg
ICAgICwgbV90eXBlKFVuY2FjaGFibGUpCiAgICAgICAgICwgbV9jb250ZXh0KGNvbnRleHQpCiAg
ICAgICAgICwgbV9jYWNoZWFiaWxpdHkoQ2FjaGluZ0FsbG93ZWQpCkBAIC0xMDQsOSArMTA1LDgg
QEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9wdXRGdW5jdGlvbjsKICAgICB9CiAKLSAgICBD
b250ZXh0IGNvbnRleHQoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxDb250ZXh0PihtX2Nv
bnRleHQpOyB9Ci0KICAgICBUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KKyAg
ICBDb250ZXh0IGNvbnRleHQoKSBjb25zdCB7IHJldHVybiBtX2NvbnRleHQ7IH0KICAgICBKU09i
amVjdCogYmFzZSgpIGNvbnN0IHsgcmV0dXJuIG1fYmFzZTsgfQogICAgIEpTVmFsdWUgdGhpc1Zh
bHVlKCkgY29uc3QgeyByZXR1cm4gbV90aGlzVmFsdWU7IH0KIApAQCAtMTE2LDYgKzExNiw4IEBA
IHB1YmxpYzoKICAgICBib29sIGlzQ2FjaGVhYmxlQ3VzdG9tKCkgY29uc3QgeyByZXR1cm4gaXND
YWNoZWFibGUoKSAmJiAobV90eXBlID09IEN1c3RvbVZhbHVlIHx8IG1fdHlwZSA9PSBDdXN0b21B
Y2Nlc3NvcikgJiYgISFtX3B1dEZ1bmN0aW9uOyB9CiAgICAgYm9vbCBpc0N1c3RvbUFjY2Vzc29y
KCkgY29uc3QgeyByZXR1cm4gaXNDYWNoZWFibGUoKSAmJiBtX3R5cGUgPT0gQ3VzdG9tQWNjZXNz
b3I7IH0KICAgICBib29sIGlzSW5pdGlhbGl6YXRpb24oKSBjb25zdCB7IHJldHVybiBtX2lzSW5p
dGlhbGl6YXRpb247IH0KKyAgICBib29sIGlzVGFpbnRlZEJ5T3BhcXVlT2JqZWN0KCkgY29uc3Qg
eyByZXR1cm4gbV9pc1RhaW50ZWRCeU9wYXF1ZU9iamVjdDsgfQorICAgIHZvaWQgc2V0SXNUYWlu
dGVkQnlPcGFxdWVPYmplY3QoKSB7IG1faXNUYWludGVkQnlPcGFxdWVPYmplY3QgPSB0cnVlOyB9
CiAKICAgICBQcm9wZXJ0eU9mZnNldCBjYWNoZWRPZmZzZXQoKSBjb25zdAogICAgIHsKQEAgLTEz
NSw4ICsxMzcsOSBAQCBwcml2YXRlOgogICAgIFByb3BlcnR5T2Zmc2V0IG1fb2Zmc2V0OwogICAg
IGJvb2wgbV9pc1N0cmljdE1vZGUgOiAxOwogICAgIGJvb2wgbV9pc0luaXRpYWxpemF0aW9uIDog
MTsKKyAgICBib29sIG1faXNUYWludGVkQnlPcGFxdWVPYmplY3QgOiAxOwogICAgIFR5cGUgbV90
eXBlOwotICAgIHVpbnQ4X3QgbV9jb250ZXh0OworICAgIENvbnRleHQgbV9jb250ZXh0OwogICAg
IENhY2hlYWJpbGl0eVR5cGUgbV9jYWNoZWFiaWxpdHk7CiAgICAgRnVuY3Rpb25QdHI8Q3VzdG9t
QWNjZXNzb3JQdHJUYWc+IG1fcHV0RnVuY3Rpb247CiB9OwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvUmVmbGVjdE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVmbGVjdE9iamVjdC5jcHAJKHJldmlzaW9uIDI3NjU4NSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZmxlY3RPYmplY3QuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNjAsNyArMjYwLDcgQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKHJl
ZmxlY3RPYmplY3RTZQogCiAgICAgLy8gRG8gbm90IHJhaXNlIGFueSByZWFkb25seSBlcnJvcnMg
dGhhdCBoYXBwZW4gaW4gc3RyaWN0IG1vZGUuCiAgICAgYm9vbCBzaG91bGRUaHJvd0lmQ2FudFNl
dCA9IGZhbHNlOwotICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KHJlY2VpdmVyLCBzaG91bGRUaHJv
d0lmQ2FudFNldCk7CisgICAgUHV0UHJvcGVydHlTbG90IHNsb3QocmVjZWl2ZXIsIHNob3VsZFRo
cm93SWZDYW50U2V0LCBQdXRQcm9wZXJ0eVNsb3Q6OlJlZmxlY3RTZXQpOwogICAgIFJFTEVBU0Vf
QU5EX1JFVFVSTihzY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih0YXJnZXRPYmplY3Qt
Pm1ldGhvZFRhYmxlKHZtKS0+cHV0KHRhcmdldE9iamVjdCwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0
eU5hbWUsIGNhbGxGcmFtZS0+YXJndW1lbnQoMiksIHNsb3QpKSkpOwogfQogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBPYmplY3QuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5jcHAJKHJldmlzaW9u
IDI3NjU4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEzNCwxOSArMTM0LDI0IEBAIEpTQ19ERUZJTkVfQ1VTVE9N
X1NFVFRFUihyZWdFeHBPYmplY3RTZXQKIGJvb2wgUmVnRXhwT2JqZWN0OjpwdXQoSlNDZWxsKiBj
ZWxsLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlO
YW1lLCBKU1ZhbHVlIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgVk0mIHZt
ID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKICAgICBSZWdFeHBPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8UmVnRXhwT2Jq
ZWN0Kj4oY2VsbCk7CiAKLSAgICBpZiAoVU5MSUtFTFkoaXNUaGlzVmFsdWVBbHRlcmVkKHNsb3Qs
IHRoaXNPYmplY3QpKSkKLSAgICAgICAgcmV0dXJuIG9yZGluYXJ5U2V0U2xvdyhnbG9iYWxPYmpl
Y3QsIHRoaXNPYmplY3QsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QudGhpc1ZhbHVlKCksIHNs
b3QuaXNTdHJpY3RNb2RlKCkpOwotCiAgICAgaWYgKHByb3BlcnR5TmFtZSA9PSB2bS5wcm9wZXJ0
eU5hbWVzLT5sYXN0SW5kZXgpIHsKKyAgICAgICAgaWYgKCF0aGlzT2JqZWN0LT5sYXN0SW5kZXhJ
c1dyaXRhYmxlKCkpCisgICAgICAgICAgICByZXR1cm4gdHlwZUVycm9yKGdsb2JhbE9iamVjdCwg
c2NvcGUsIHNsb3QuaXNTdHJpY3RNb2RlKCksIFJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9yKTsK
KworICAgICAgICBpZiAoVU5MSUtFTFkoc2xvdC50aGlzVmFsdWUoKSAhPSB0aGlzT2JqZWN0KSkK
KyAgICAgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgSlNPYmplY3Q6OmRlZmluZVBy
b3BlcnR5T25SZWNlaXZlcihnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3Qp
KTsKKwogICAgICAgICBib29sIHJlc3VsdCA9IHRoaXNPYmplY3QtPnNldExhc3RJbmRleChnbG9i
YWxPYmplY3QsIHZhbHVlLCBzbG90LmlzU3RyaWN0TW9kZSgpKTsKKyAgICAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgZmFsc2UpOwogICAgICAgICBzbG90LnNldEN1c3RvbVZhbHVlKHRo
aXNPYmplY3QsIHNsb3QuaXNTdHJpY3RNb2RlKCkKICAgICAgICAgICAgID8gcmVnRXhwT2JqZWN0
U2V0TGFzdEluZGV4U3RyaWN0CiAgICAgICAgICAgICA6IHJlZ0V4cE9iamVjdFNldExhc3RJbmRl
eE5vblN0cmljdCk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQotICAgIHJldHVybiBC
YXNlOjpwdXQoY2VsbCwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KTsK
KyAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEJhc2U6OnB1dChjZWxsLCBnbG9iYWxPYmpl
Y3QsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpKTsKIH0KIAogSlNWYWx1ZSBSZWdFeHBPYmpl
Y3Q6OmV4ZWMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNTdHJpbmcqIHN0cmluZykK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5oCShy
ZXZpc2lvbiAyNzY1ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBP
YmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAsNyBAQCBuYW1lc3BhY2UgSlNDIHsK
IGNsYXNzIFJlZ0V4cE9iamVjdCBmaW5hbCA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKIHB1
YmxpYzoKICAgICB1c2luZyBCYXNlID0gSlNOb25GaW5hbE9iamVjdDsKLSAgICBzdGF0aWMgY29u
c3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBP
dmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNHZXRPd25TcGVjaWFsUHJvcGVy
dHlOYW1lczsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0g
QmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVy
cmlkZXNHZXRPd25TcGVjaWFsUHJvcGVydHlOYW1lcyB8IE92ZXJyaWRlc1B1dDsKIAogICAgIHRl
bXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2VzcyBtb2RlPgogICAgIHN0YXRp
YyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU3RyaW5nT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdPYmplY3QuY3BwCShyZXZpc2lvbiAyNzY1ODUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdPYmplY3QuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC02OCwxMSArNjgsMTAgQEAgYm9vbCBTdHJpbmdPYmplY3Q6OnB1dChKU0NlbGwq
IGNlbGwsIEpTRwogCiAgICAgU3RyaW5nT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PFN0cmlu
Z09iamVjdCo+KGNlbGwpOwogCi0gICAgaWYgKFVOTElLRUxZKGlzVGhpc1ZhbHVlQWx0ZXJlZChz
bG90LCB0aGlzT2JqZWN0KSkpIAotICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIG9y
ZGluYXJ5U2V0U2xvdyhnbG9iYWxPYmplY3QsIHRoaXNPYmplY3QsIHByb3BlcnR5TmFtZSwgdmFs
dWUsIHNsb3QudGhpc1ZhbHVlKCksIHNsb3QuaXNTdHJpY3RNb2RlKCkpKTsKLQogICAgIGlmIChw
cm9wZXJ0eU5hbWUgPT0gdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoKQogICAgICAgICByZXR1cm4g
dHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsIHNsb3QuaXNTdHJpY3RNb2RlKCksIFJlYWRv
bmx5UHJvcGVydHlXcml0ZUVycm9yKTsKKyAgICBpZiAoVU5MSUtFTFkoc2xvdC50aGlzVmFsdWUo
KSAhPSB0aGlzT2JqZWN0KSkKKyAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU09i
amVjdDo6cHV0KGNlbGwsIGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCkp
OwogICAgIGlmIChPcHRpb25hbDx1aW50MzJfdD4gaW5kZXggPSBwYXJzZUluZGV4KHByb3BlcnR5
TmFtZSkpIAogICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIHB1dEJ5SW5kZXgoY2Vs
bCwgZ2xvYmFsT2JqZWN0LCBpbmRleC52YWx1ZSgpLCB2YWx1ZSwgc2xvdC5pc1N0cmljdE1vZGUo
KSkpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgSlNPYmplY3Q6OnB1dChjZWxsLCBn
bG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ09iamVjdC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ09iamVjdC5oCShyZXZpc2lvbiAyNzY1ODUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdPYmplY3QuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjgsNyArMjgsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIGNsYXNzIFN0cmluZ09i
amVjdCA6IHB1YmxpYyBKU1dyYXBwZXJPYmplY3QgewogcHVibGljOgogICAgIHVzaW5nIEJhc2Ug
PSBKU1dyYXBwZXJPYmplY3Q7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1
cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlT
bG90IHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlOYW1lcyB8IEludGVyY2VwdHNHZXRPd25Qcm9w
ZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm87CisgICAgc3RhdGljIGNvbnN0
ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgT3Zl
cnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlOYW1lcyB8
IE92ZXJyaWRlc1B1dCB8IEludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldo
ZW5MZW5ndGhJc05vdFplcm87CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSwgU3Vic3BhY2VBY2Nl
c3MgbW9kZT4KICAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ1Byb3RvdHlwZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nUHJvdG90eXBl
LmNwcAkocmV2aXNpb24gMjc2NTg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U3RyaW5nUHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIxLDkgKzEyMSw5IEBAIFN0
cmluZ1Byb3RvdHlwZTo6U3RyaW5nUHJvdG90eXBlKFZNJiB2bSwKIHsKIH0KIAotdm9pZCBTdHJp
bmdQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgSlNTdHJpbmcqIG5hbWVBbmRNZXNzYWdlKQordm9pZCBTdHJpbmdQcm90b3R5cGU6
OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKIHsK
LSAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSwgbmFtZUFuZE1lc3NhZ2UpOworICAgIEJhc2U6
OmZpbmlzaENyZWF0aW9uKHZtLCBqc0VtcHR5U3RyaW5nKHZtKSk7CiAgICAgQVNTRVJUKGluaGVy
aXRzKHZtLCBpbmZvKCkpKTsKIAogICAgIEpTQ19OQVRJVkVfSU5UUklOU0lDX0ZVTkNUSU9OX1dJ
VEhPVVRfVFJBTlNJVElPTih2bS5wcm9wZXJ0eU5hbWVzLT50b1N0cmluZywgc3RyaW5nUHJvdG9G
dW5jVG9TdHJpbmcsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9u
dEVudW0pLCAwLCBTdHJpbmdQcm90b3R5cGVWYWx1ZU9mSW50cmluc2ljKTsKQEAgLTE2NSwxNCAr
MTY1LDEyIEBAIHZvaWQgU3RyaW5nUHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbihWTSYKICAgICBw
dXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVydHlOYW1lcy0+aXRlcmF0b3JT
eW1ib2wsIGl0ZXJhdG9yRnVuY3Rpb24sIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0
dHJpYnV0ZTo6RG9udEVudW0pKTsKIAogICAgIC8vIFRoZSBjb25zdHJ1Y3RvciB3aWxsIGJlIGFk
ZGVkIGxhdGVyLCBhZnRlciBTdHJpbmdDb25zdHJ1Y3RvciBoYXMgYmVlbiBidWlsdAotICAgIHB1
dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgsIGpz
TnVtYmVyKDApLCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSB8IFByb3BlcnR5QXR0cmli
dXRlOjpSZWFkT25seSB8IFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7CiB9CiAKIFN0cmlu
Z1Byb3RvdHlwZSogU3RyaW5nUHJvdG90eXBlOjpjcmVhdGUoVk0mIHZtLCBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKIHsKLSAgICBKU1N0cmluZyog
ZW1wdHkgPSBqc0VtcHR5U3RyaW5nKHZtKTsKICAgICBTdHJpbmdQcm90b3R5cGUqIHByb3RvdHlw
ZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFN0cmluZ1Byb3RvdHlwZT4odm0uaGVhcCkp
IFN0cmluZ1Byb3RvdHlwZSh2bSwgc3RydWN0dXJlKTsKLSAgICBwcm90b3R5cGUtPmZpbmlzaENy
ZWF0aW9uKHZtLCBnbG9iYWxPYmplY3QsIGVtcHR5KTsKKyAgICBwcm90b3R5cGUtPmZpbmlzaENy
ZWF0aW9uKHZtLCBnbG9iYWxPYmplY3QpOwogICAgIHJldHVybiBwcm90b3R5cGU7CiB9CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ1Byb3RvdHlwZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ1Byb3RvdHlwZS5o
CShyZXZpc2lvbiAyNzY1ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJp
bmdQcm90b3R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDUsNyArNDUsNyBAQCBwdWJsaWM6CiAK
IHByaXZhdGU6CiAgICAgU3RyaW5nUHJvdG90eXBlKFZNJiwgU3RydWN0dXJlKik7Ci0gICAgdm9p
ZCBmaW5pc2hDcmVhdGlvbihWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNTdHJpbmcqKTsKKyAgICB2
b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgSlNHbG9iYWxPYmplY3QqKTsKIH07CiBTVEFUSUNfQVNT
RVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShTdHJpbmdQcm90b3R5cGUsIFN0cmluZ09iamVjdCk7
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAko
cmV2aXNpb24gMjc2NTg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0
dXJlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTkwLDExICsxOTAsNiBAQCB2b2lkIFN0cnVjdHVy
ZTo6dmFsaWRhdGVGbGFncygpCiAgICAgaWYgKG92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdEJ5
SW5kZXgpCiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHR5cGVJbmZvKCkuaW50ZXJjZXB0c0dldE93
blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybygpKTsKIAotICAgIGJv
b2wgb3ZlcnJpZGVzUHV0UHJvcGVydHlTZWN1cml0eUNoZWNrID0KLSAgICAgICAgbWV0aG9kVGFi
bGUuZG9QdXRQcm9wZXJ0eVNlY3VyaXR5Q2hlY2sgIT0gSlNPYmplY3Q6OmRvUHV0UHJvcGVydHlT
ZWN1cml0eUNoZWNrCi0gICAgICAgICYmIG1ldGhvZFRhYmxlLmRvUHV0UHJvcGVydHlTZWN1cml0
eUNoZWNrICE9IEpTQ2VsbDo6ZG9QdXRQcm9wZXJ0eVNlY3VyaXR5Q2hlY2s7Ci0gICAgUkVMRUFT
RV9BU1NFUlQob3ZlcnJpZGVzUHV0UHJvcGVydHlTZWN1cml0eUNoZWNrID09IHR5cGVJbmZvKCku
aGFzUHV0UHJvcGVydHlTZWN1cml0eUNoZWNrKCkpOwotCiAgICAgYm9vbCBvdmVycmlkZXNHZXRP
d25Qcm9wZXJ0eU5hbWVzID0KICAgICAgICAgbWV0aG9kVGFibGUuZ2V0T3duUHJvcGVydHlOYW1l
cyAhPSBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcwogICAgICAgICAmJiBtZXRob2RUYWJs
ZS5nZXRPd25Qcm9wZXJ0eU5hbWVzICE9IEpTQ2VsbDo6Z2V0T3duUHJvcGVydHlOYW1lczsKQEAg
LTIwOSw2ICsyMDQsMTggQEAgdm9pZCBTdHJ1Y3R1cmU6OnZhbGlkYXRlRmxhZ3MoKQogICAgICAg
ICBtZXRob2RUYWJsZS5nZXRQcm90b3R5cGUgIT0gc3RhdGljX2Nhc3Q8TWV0aG9kVGFibGU6Okdl
dFByb3RvdHlwZUZ1bmN0aW9uUHRyPihKU09iamVjdDo6Z2V0UHJvdG90eXBlKQogICAgICAgICAm
JiBtZXRob2RUYWJsZS5nZXRQcm90b3R5cGUgIT0gSlNDZWxsOjpnZXRQcm90b3R5cGU7CiAgICAg
UkVMRUFTRV9BU1NFUlQob3ZlcnJpZGVzR2V0UHJvdG90eXBlID09IHR5cGVJbmZvKCkub3ZlcnJp
ZGVzR2V0UHJvdG90eXBlKCkpOworCisgICAgYm9vbCBvdmVycmlkZXNQdXQgPQorICAgICAgICBt
ZXRob2RUYWJsZS5wdXQgIT0gSlNPYmplY3Q6OnB1dAorICAgICAgICAmJiBtZXRob2RUYWJsZS5w
dXQgIT0gSlNDZWxsOjpwdXQ7CisgICAgUkVMRUFTRV9BU1NFUlQob3ZlcnJpZGVzUHV0ID09IHR5
cGVJbmZvKCkub3ZlcnJpZGVzUHV0KCkpOworCisgICAgYm9vbCBvdmVycmlkZXNEZWZpbmVPd25Q
cm9wZXJ0eSA9CisgICAgICAgIG1ldGhvZFRhYmxlLmRlZmluZU93blByb3BlcnR5ICE9IEpTT2Jq
ZWN0OjpkZWZpbmVPd25Qcm9wZXJ0eQorICAgICAgICAmJiBtZXRob2RUYWJsZS5kZWZpbmVPd25Q
cm9wZXJ0eSAhPSBKU0NlbGw6OmRlZmluZU93blByb3BlcnR5OworCisgICAgaWYgKG92ZXJyaWRl
c0RlZmluZU93blByb3BlcnR5KQorICAgICAgICBSRUxFQVNFX0FTU0VSVChvdmVycmlkZXNQdXQp
OwogfQogI2Vsc2UKIGlubGluZSB2b2lkIFN0cnVjdHVyZTo6dmFsaWRhdGVGbGFncygpIHsgfQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgJKHJldmlzaW9u
IDI3NjU4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yNjcsNiArMjY3LDExIEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAg
IHJldHVybiB0eXBlSW5mbygpLmdldE93blByb3BlcnR5U2xvdElzSW1wdXJlKCk7CiAgICAgfQor
CisgICAgYm9vbCBoYXNOb25SZWlmaWVkU3RhdGljUHJvcGVydGllcygpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gdHlwZUluZm8oKS5oYXNTdGF0aWNQcm9wZXJ0eVRhYmxlKCkgJiYgIXN0
YXRpY1Byb3BlcnRpZXNSZWlmaWVkKCk7CisgICAgfQogICAgIAogICAgIC8vIFR5cGUgYWNjZXNz
b3JzLgogICAgIFR5cGVJbmZvIHR5cGVJbmZvKCkgY29uc3QgeyByZXR1cm4gbV9ibG9iLnR5cGVJ
bmZvKG1fb3V0T2ZMaW5lVHlwZUZsYWdzKTsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3Rvb2xzL0pTRG9sbGFyVk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS90b29scy9KU0RvbGxhclZNLmNwcAkocmV2aXNpb24gMjc2NTg1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3Rvb2xzL0pTRG9sbGFyVk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02ODcsMTEg
KzY4Nyw2IEBAIEpTQ19ERUZJTkVfQ1VTVE9NX0dFVFRFUihydW50aW1lQXJyYXlMZW4KICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKHRoaXNPYmplY3QtPmdldExlbmd0aCgpKSk7
CiB9CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgQ29tcGFjdEhhc2hJbmRleCBzdGF0aWNDdXN0b21B
Y2Nlc3NvclRhYmxlSW5kZXhbMl0gPSB7Ci0gICAgeyAwLCAtMSB9LAotICAgIHsgLTEsIC0xIH0s
Ci19OwotCiBzdGF0aWMgSlNDX0RFQ0xBUkVfQ1VTVE9NX0dFVFRFUih0ZXN0U3RhdGljQWNjZXNz
b3JHZXR0ZXIpOwogc3RhdGljIEpTQ19ERUNMQVJFX0NVU1RPTV9TRVRURVIodGVzdFN0YXRpY0Fj
Y2Vzc29yUHV0dGVyKTsKIApAQCAtNzEyLDE5ICs3MDcsMzYgQEAgSlNDX0RFRklORV9DVVNUT01f
U0VUVEVSKHRlc3RTdGF0aWNBY2NlcwogewogICAgIERvbGxhclZNQXNzZXJ0U2NvcGUgYXNzZXJ0
U2NvcGU7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gdGhyb3dT
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIAotICAgIEpTT2JqZWN0KiB0aGlz
T2JqZWN0ID0ganNEeW5hbWljQ2FzdDxKU09iamVjdCo+KHZtLCBKU1ZhbHVlOjpkZWNvZGUodGhp
c1ZhbHVlKSk7CisgICAgSlNWYWx1ZSByZWNlaXZlciA9IEpTVmFsdWU6OmRlY29kZSh0aGlzVmFs
dWUpOworICAgIEpTT2JqZWN0KiB0aGlzT2JqZWN0ID0gcmVjZWl2ZXIuaXNPYmplY3QoKSA/IGFz
T2JqZWN0KHJlY2VpdmVyKSA6IHJlY2VpdmVyLnN5bnRoZXNpemVQcm90b3R5cGUoZ2xvYmFsT2Jq
ZWN0KTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKICAgICBS
RUxFQVNFX0FTU0VSVCh0aGlzT2JqZWN0KTsKIAogICAgIHJldHVybiB0aGlzT2JqZWN0LT5wdXRE
aXJlY3Qodm0sIFByb3BlcnR5TmFtZShJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAidGVzdEZp
ZWxkIikpLCBKU1ZhbHVlOjpkZWNvZGUodmFsdWUpKTsKIH0KIAotc3RhdGljIGNvbnN0IHN0cnVj
dCBIYXNoVGFibGVWYWx1ZSBzdGF0aWNDdXN0b21BY2Nlc3NvclRhYmxlVmFsdWVzWzFdID0gewor
c3RhdGljIGNvbnN0IHN0cnVjdCBDb21wYWN0SGFzaEluZGV4IHN0YXRpY0N1c3RvbUFjY2Vzc29y
VGFibGVJbmRleFs5XSA9IHsKKyAgICB7IC0xLCAtMSB9LAorICAgIHsgLTEsIC0xIH0sCisgICAg
eyAyLCAtMSB9LAorICAgIHsgLTEsIC0xIH0sCisgICAgeyAwLCA4IH0sCisgICAgeyAtMSwgLTEg
fSwKKyAgICB7IC0xLCAtMSB9LAorICAgIHsgLTEsIC0xIH0sCisgICAgeyAxLCAtMSB9LAorfTsK
Kworc3RhdGljIGNvbnN0IHN0cnVjdCBIYXNoVGFibGVWYWx1ZSBzdGF0aWNDdXN0b21BY2Nlc3Nv
clRhYmxlVmFsdWVzWzNdID0gewogICAgIHsgInRlc3RTdGF0aWNBY2Nlc3NvciIsIHN0YXRpY19j
YXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6Q3VzdG9tQWNjZXNzb3IpLCBOb0ludHJp
bnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+
KHRlc3RTdGF0aWNBY2Nlc3NvckdldHRlciksIChpbnRwdHJfdClzdGF0aWNfY2FzdDxQdXRQcm9w
ZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYz4odGVzdFN0YXRpY0FjY2Vzc29yUHV0dGVyKSB9IH0sCisg
ICAgeyAidGVzdFN0YXRpY0FjY2Vzc29yRG9udEVudW0iLCBQcm9wZXJ0eUF0dHJpYnV0ZTo6Q3Vz
dG9tQWNjZXNzb3IgfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0sIE5vSW50cmluc2ljLCB7
IChpbnRwdHJfdClzdGF0aWNfY2FzdDxHZXRWYWx1ZUZ1bmM+KHRlc3RTdGF0aWNBY2Nlc3Nvckdl
dHRlciksIChpbnRwdHJfdClzdGF0aWNfY2FzdDxQdXRWYWx1ZUZ1bmM+KHRlc3RTdGF0aWNBY2Nl
c3NvclB1dHRlcikgfSB9LAorICAgIHsgInRlc3RTdGF0aWNBY2Nlc3NvclJlYWRPbmx5IiwgUHJv
cGVydHlBdHRyaWJ1dGU6OkN1c3RvbUFjY2Vzc29yIHwgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRF
bnVtIHwgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5LCBOb0ludHJpbnNpYywgeyAoaW50cHRy
X3Qpc3RhdGljX2Nhc3Q8R2V0VmFsdWVGdW5jPih0ZXN0U3RhdGljQWNjZXNzb3JHZXR0ZXIpLCAw
IH0gfSwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgSGFzaFRhYmxlIHN0YXRpY0N1c3RvbUFj
Y2Vzc29yVGFibGUgPQotICAgIHsgMSwgMSwgdHJ1ZSwgbnVsbHB0ciwgc3RhdGljQ3VzdG9tQWNj
ZXNzb3JUYWJsZVZhbHVlcywgc3RhdGljQ3VzdG9tQWNjZXNzb3JUYWJsZUluZGV4IH07CisgICAg
eyAzLCA3LCB0cnVlLCBudWxscHRyLCBzdGF0aWNDdXN0b21BY2Nlc3NvclRhYmxlVmFsdWVzLCBz
dGF0aWNDdXN0b21BY2Nlc3NvclRhYmxlSW5kZXggfTsKIAogY2xhc3MgU3RhdGljQ3VzdG9tQWNj
ZXNzb3IgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7CiAgICAgdXNpbmcgQmFzZSA9IEpTTm9u
RmluYWxPYmplY3Q7CkBAIC03ODksMTcgKzgwMSwyNSBAQCBKU0NfREVGSU5FX0NVU1RPTV9TRVRU
RVIodGVzdFN0YXRpY1ZhbHVlCiAgICAgcmV0dXJuIHRoaXNPYmplY3QtPnB1dERpcmVjdCh2bSwg
UHJvcGVydHlOYW1lKElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJ0ZXN0U3RhdGljVmFsdWUi
KSksIEpTVmFsdWU6OmRlY29kZSh2YWx1ZSkpOwogfQogCi1zdGF0aWMgY29uc3Qgc3RydWN0IENv
bXBhY3RIYXNoSW5kZXggc3RhdGljQ3VzdG9tVmFsdWVUYWJsZUluZGV4WzJdID0geworc3RhdGlj
IGNvbnN0IHN0cnVjdCBDb21wYWN0SGFzaEluZGV4IHN0YXRpY0N1c3RvbVZhbHVlVGFibGVJbmRl
eFs4XSA9IHsKKyAgICB7IDEsIC0xIH0sCisgICAgeyAtMSwgLTEgfSwKKyAgICB7IC0xLCAtMSB9
LAorICAgIHsgLTEsIC0xIH0sCisgICAgeyAtMSwgLTEgfSwKKyAgICB7IDIsIC0xIH0sCiAgICAg
eyAwLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiB9OwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IEhh
c2hUYWJsZVZhbHVlIHN0YXRpY0N1c3RvbVZhbHVlVGFibGVWYWx1ZXNbMV0gPSB7Ci0gICAgeyAi
dGVzdFN0YXRpY1ZhbHVlIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRl
OjpDdXN0b21BY2Nlc3NvciksIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxQ
cm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4odGVzdFN0YXRpY1ZhbHVlR2V0dGVyKSwgKGludHB0
cl90KXN0YXRpY19jYXN0PFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jPih0ZXN0U3RhdGlj
VmFsdWVQdXR0ZXIpIH0gfSwKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgSGFzaFRhYmxlVmFsdWUgc3Rh
dGljQ3VzdG9tVmFsdWVUYWJsZVZhbHVlc1szXSA9IHsKKyAgICB7ICJ0ZXN0U3RhdGljVmFsdWUi
LCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkN1c3RvbVZhbHVlKSwg
Tm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PEdldFZhbHVlRnVuYz4odGVzdFN0
YXRpY1ZhbHVlR2V0dGVyKSwgKGludHB0cl90KXN0YXRpY19jYXN0PFB1dFZhbHVlRnVuYz4odGVz
dFN0YXRpY1ZhbHVlUHV0dGVyKSB9IH0sCisgICAgeyAidGVzdFN0YXRpY1ZhbHVlTm9TZXR0ZXIi
LCBQcm9wZXJ0eUF0dHJpYnV0ZTo6Q3VzdG9tVmFsdWUgfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9u
dEVudW0sIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxHZXRWYWx1ZUZ1bmM+
KHRlc3RTdGF0aWNWYWx1ZUdldHRlciksIDAgfSB9LAorICAgIHsgInRlc3RTdGF0aWNWYWx1ZVJl
YWRPbmx5IiwgUHJvcGVydHlBdHRyaWJ1dGU6OkN1c3RvbVZhbHVlIHwgUHJvcGVydHlBdHRyaWJ1
dGU6OkRvbnRFbnVtIHwgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5LCBOb0ludHJpbnNpYywg
eyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8R2V0VmFsdWVGdW5jPih0ZXN0U3RhdGljVmFsdWVHZXR0
ZXIpLCAwIH0gfSwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgSGFzaFRhYmxlIHN0YXRpY0N1
c3RvbVZhbHVlVGFibGUgPQotICAgIHsgMSwgMSwgdHJ1ZSwgbnVsbHB0ciwgc3RhdGljQ3VzdG9t
VmFsdWVUYWJsZVZhbHVlcywgc3RhdGljQ3VzdG9tVmFsdWVUYWJsZUluZGV4IH07CisgICAgeyAz
LCA3LCB0cnVlLCBudWxscHRyLCBzdGF0aWNDdXN0b21WYWx1ZVRhYmxlVmFsdWVzLCBzdGF0aWND
dXN0b21WYWx1ZVRhYmxlSW5kZXggfTsKIAogY2xhc3MgU3RhdGljQ3VzdG9tVmFsdWUgOiBwdWJs
aWMgSlNOb25GaW5hbE9iamVjdCB7CiAgICAgdXNpbmcgQmFzZSA9IEpTTm9uRmluYWxPYmplY3Q7
CkBAIC04MzcsNiArODU3LDcgQEAgcHVibGljOgogCiBjbGFzcyBPYmplY3REb2luZ1NpZGVFZmZl
Y3RQdXRXaXRob3V0Q29ycmVjdFNsb3RTdGF0dXMgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7
CiAgICAgdXNpbmcgQmFzZSA9IEpTTm9uRmluYWxPYmplY3Q7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJp
ZGVzUHV0OwogcHVibGljOgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFj
ZUFjY2Vzcz4KICAgICBzdGF0aWMgQ29tcGxldGVTdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZt
KQpJbmRleDogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjc2NTg1KQorKysgU291cmNlL1dlYkNvcmUvQ2hh
bmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTIyIEBACisyMDIxLTA0LTI2ICBBbGV4
ZXkgU2h2YXlrYSAgPHNodmFpa2FsZXNoQGdtYWlsLmNvbT4KKworICAgICAgICBbSlNDXSBPcmRp
bmFyeVNldCBzaG91bGQgaW52b2tlIGN1c3RvbSBbW1NldF1dIG1ldGhvZHMKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNzkxNgorCisgICAgICAgIFJl
dmlld2VkIGJ5IFl1c3VrZSBTdXp1a2kuCisKKyAgICAgICAgRml4ZXM6CisgICAgICAgICAgMS4g
TGVnYWN5IHBsYXRmb3JtIG9iamVjdCdzIFtbU2V0XV0gbm93IGd1YXJkcyBhZ2FpbnN0IGFsdGVy
ZWQgcmVjZWl2ZXIgWzFdLgorICAgICAgICAgICAgIChhbGlnbnMgd2l0aCBCbGluaykuCisgICAg
ICAgICAgMi4gRGlyZWN0IFtbU2V0XV0gdG8gd2luZG93LiVJbnRlcmZhY2UlIGNvbnN0cnVjdG9y
IG5vdyBwcmVzZXJ2ZXMgRG9udEVudW0gYXR0cmlidXRlIFsyXS4KKyAgICAgICAgICAgICAoYWxp
Z25zIHdpdGggQmxpbmsgYW5kIEdlY2tvKS4KKyAgICAgICAgICAzLiBDcm9zcy1vcmlnaW4gbm9u
LWluZGV4IHB1dCgpIG5vdyB0aHJvd3MgU2VjdXJpdHlFcnJvciBpbnN0ZWFkIG9mIHNpbGVudGx5
IGZhaWxpbmcgWzNdLgorICAgICAgICAgICAgIChhbGlnbnMgd2l0aCBCbGluayBhbmQgR2Vja28p
LgorCisgICAgICAgIFJlZmFjdG9yczoKKyAgICAgICAgICAxLiBTaW1wbGlmaWVzIGNyb3NzLW9y
aWdpbiBKU0RPTVdpbmRvdzo6cHV0KCksIGFsaWduaW5nIGl0IHdpdGggSlNMb2NhdGlvbjo6cHV0
KCkuCisgICAgICAgICAgMi4gUmVwbGFjZXMgbG9va3VwUHV0KCkgd2l0aCBkaXJlY3Qgc2V0dGVy
IGNhbGwgaW4gSlNSZW1vdGVET01XaW5kb3c6OnB1dCgpLgorICAgICAgICAgIDMuIFJlbW92ZXMg
bm93IHVudXNlZCBkb1B1dFByb3BlcnR5U2VjdXJpdHlDaGVjaygpIG1ldGhvZHMuCisKKyAgICAg
ICAgVGVzdHM6IGpzL2RvbS9zY3JpcHQtdGVzdHMvcmVmbGVjdC1zZXQtb250by1kb20uanMKKyAg
ICAgICAgICAgICAgIGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvV2ViSURML2VjbWFz
Y3JpcHQtYmluZGluZy9pbnRlcmZhY2Utb2JqZWN0LXNldC1yZWNlaXZlci5odG1sCisgICAgICAg
ICAgICAgICBodHRwL3Rlc3RzL3NlY3VyaXR5L2Nyb3NzLWZyYW1lLWFjY2Vzcy1vYmplY3QtZ2V0
UHJvdG90eXBlT2YtaW4tcHV0Lmh0bWwKKworICAgICAgICBbMV0gaHR0cHM6Ly9oZXljYW0uZ2l0
aHViLmlvL3dlYmlkbC8jbGVnYWN5LXBsYXRmb3JtLW9iamVjdC1zZXQgKHN0ZXAgMSkKKyAgICAg
ICAgWzJdIGh0dHBzOi8vaGV5Y2FtLmdpdGh1Yi5pby93ZWJpZGwvI2RlZmluZS10aGUtZ2xvYmFs
LXByb3BlcnR5LXJlZmVyZW5jZXMgKHN0ZXAgMy4xLjMpCisgICAgICAgIFszXSBodHRwczovL2h0
bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9icm93c2Vycy5odG1sI2Nyb3Nzb3JpZ2luc2V0
LSgtbywtcCwtdiwtcmVjZWl2ZXItKSAoc3RlcCA0KQorCisgICAgICAgICogYmluZGluZ3MvanMv
SlNET01XaW5kb3dDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNET01XaW5kb3c6OnB1
dCk6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTVdpbmRvdzo6ZG9QdXRQcm9wZXJ0eVNlY3VyaXR5
Q2hlY2spOiBEZWxldGVkLgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTTG9jYXRpb25DdXN0b20u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNMb2NhdGlvbjo6ZG9QdXRQcm9wZXJ0eVNlY3VyaXR5
Q2hlY2spOiBEZWxldGVkLgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTUmVtb3RlRE9NV2luZG93
Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTUmVtb3RlRE9NV2luZG93OjpwdXQpOgor
ICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtOgorICAgICAgICAo
R2VuZXJhdGVQdXQpOgorICAgICAgICAoR2VuZXJhdGVIZWFkZXIpOgorICAgICAgICAqIGJpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy8qOiBVcGRhdGVkLgorICAgICAgICAqIGJyaWRnZS9vYmpjL29i
amNfcnVudGltZS5oOgorICAgICAgICAqIGJyaWRnZS9ydW50aW1lX2FycmF5Lmg6CisgICAgICAg
ICogYnJpZGdlL3J1bnRpbWVfb2JqZWN0Lmg6CisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RP
TVdpbmRvd0N1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTVdpbmRvdzo6cHV0KToK
KyAgICAgICAgKFdlYkNvcmU6OkpTRE9NV2luZG93Ojpkb1B1dFByb3BlcnR5U2VjdXJpdHlDaGVj
ayk6IERlbGV0ZWQuCisgICAgICAgICogYmluZGluZ3MvanMvSlNMb2NhdGlvbkN1c3RvbS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpKU0xvY2F0aW9uOjpkb1B1dFByb3BlcnR5U2VjdXJpdHlDaGVj
ayk6IERlbGV0ZWQuCisgICAgICAgICogYmluZGluZ3MvanMvSlNSZW1vdGVET01XaW5kb3dDdXN0
b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNSZW1vdGVET01XaW5kb3c6OnB1dCk6CisgICAg
ICAgICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG06CisgICAgICAgIChHZW5l
cmF0ZVB1dCk6CisgICAgICAgIChHZW5lcmF0ZUhlYWRlcik6CisgICAgICAgICogYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTLyo6IFVwZGF0ZWQuCisgICAgICAgICogYnJpZGdlL29iamMvb2JqY19y
dW50aW1lLmg6CisgICAgICAgICogYnJpZGdlL3J1bnRpbWVfYXJyYXkuaDoKKyAgICAgICAgKiBi
cmlkZ2UvcnVudGltZV9vYmplY3QuaDoKKworICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NV2lu
ZG93Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NV2luZG93OjpwdXQpOgorICAg
ICAgICAoV2ViQ29yZTo6SlNET01XaW5kb3c6OmRvUHV0UHJvcGVydHlTZWN1cml0eUNoZWNrKTog
RGVsZXRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0xvY2F0aW9uQ3VzdG9tLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkpTTG9jYXRpb246OmRvUHV0UHJvcGVydHlTZWN1cml0eUNoZWNrKTog
RGVsZXRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1JlbW90ZURPTVdpbmRvd0N1c3RvbS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpKU1JlbW90ZURPTVdpbmRvdzo6cHV0KToKKyAgICAgICAg
KiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbToKKyAgICAgICAgKEdlbmVyYXRl
UHV0KToKKyAgICAgICAgKEdlbmVyYXRlSGVhZGVyKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0RG9tYWluU2VjdXJpdHkuaDoKKyAgICAgICAgKiBiaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW5kZXhlZFNldHRlck5vSWRlbnRpZmllci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpKU1Rlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyOjpwdXQpOgorICAg
ICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbmRleGVkU2V0dGVyTm9JZGVu
dGlmaWVyLmg6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEluZGV4
ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RJ
bmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb246OnB1dCk6CisgICAgICAgICogYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5oOgor
ICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbmRleGVkU2V0dGVyV2l0
aElkZW50aWZpZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0SW5kZXhlZFNldHRlcldp
dGhJZGVudGlmaWVyOjpwdXQpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIuaDoKKyAgICAgICAgKiBiaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNlLmg6CisgICAgICAgICogYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZp
ZXI6OnB1dCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVk
QW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllci5oOgorICAgICAgICAqIGJpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2lu
Z0V4Y2VwdGlvbjo6cHV0KToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24uaDoKKyAgICAgICAgKiBi
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElk
ZW50aWZpZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0
dGVyV2l0aElkZW50aWZpZXI6OnB1dCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyLmg6CisgICAgICAg
ICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyOjpw
dXQpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRl
ck5vSWRlbnRpZmllci5oOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpT
VGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb246OnB1dCk6CisgICAgICAgICogYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24uaDoK
KyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRo
SWRlbnRpZmllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZFNldHRlcldpdGhJ
ZGVudGlmaWVyOjpwdXQpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyLmg6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlcjo6cHV0KToKKyAg
ICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5k
ZXhlZEdldHRlci5oOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RO
YW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5kU2V0dGVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkpTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXI6OnB1dCk6Cisg
ICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aElu
ZGV4ZWRHZXR0ZXJBbmRTZXR0ZXIuaDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5T3ZlcnJpZGVCdWlsdElucy5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lPdmVycmlkZUJ1aWx0SW5z
OjpwdXQpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNl
dHRlcldpdGhMZWdhY3lPdmVycmlkZUJ1aWx0SW5zLmg6CisgICAgICAgICogYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVy
dGllcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lV
bmZvcmdlYWJsZVByb3BlcnRpZXM6OnB1dCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllcy5o
OgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldp
dGhMZWdhY3lVbmZvcmdlYWJsZVByb3BlcnRpZXNBbmRMZWdhY3lPdmVycmlkZUJ1aWx0SW5zLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2Vh
YmxlUHJvcGVydGllc0FuZExlZ2FjeU92ZXJyaWRlQnVpbHRJbnM6OnB1dCk6CisgICAgICAgICog
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9y
Z2VhYmxlUHJvcGVydGllc0FuZExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMuaDoKKyAgICAgICAgKiBi
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0UGx1Z2luSW50ZXJmYWNlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkpTVGVzdFBsdWdpbkludGVyZmFjZTo6cHV0KToKKyAgICAgICAgKiBiaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0UGx1Z2luSW50ZXJmYWNlLmg6CisgICAgICAgICog
YnJpZGdlL29iamMvb2JqY19ydW50aW1lLmg6CisgICAgICAgICogYnJpZGdlL3J1bnRpbWVfYXJy
YXkuaDoKKyAgICAgICAgKiBicmlkZ2UvcnVudGltZV9vYmplY3QuaDoKKwogMjAyMS0wNC0yNiAg
Unlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KIAogICAgICAgICBJbXBsZW1lbnQgU2hh
ZG93Um9vdC5wcm90b3R5cGUuZGVsZWdhdGVzRm9jdXMgYXR0cmlidXRlCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0N1c3RvbS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20uY3BwCShyZXZpc2lv
biAyNzY1ODUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0N1c3Rv
bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0OCwyMyArMjQ4LDYgQEAgYm9vbCBKU0RPTVdpbmRv
dzo6Z2V0T3duUHJvcGVydHlTbG90QnlJbgogICAgIHJldHVybiBCYXNlOjpnZXRPd25Qcm9wZXJ0
eVNsb3RCeUluZGV4KHRoaXNPYmplY3QsIGxleGljYWxHbG9iYWxPYmplY3QsIGluZGV4LCBzbG90
KTsKIH0KIAotdm9pZCBKU0RPTVdpbmRvdzo6ZG9QdXRQcm9wZXJ0eVNlY3VyaXR5Q2hlY2soSlNP
YmplY3QqIGNlbGwsIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBQcm9wZXJ0
eU5hbWUgcHJvcGVydHlOYW1lLCBQdXRQcm9wZXJ0eVNsb3QmKQotewotICAgIFZNJiB2bSA9IGxl
eGljYWxHbG9iYWxPYmplY3QtPnZtKCk7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwotCi0gICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0RPTVdpbmRvdyo+
KGNlbGwpOwotCi0gICAgU3RyaW5nIGVycm9yTWVzc2FnZTsKLSAgICBpZiAoIUJpbmRpbmdTZWN1
cml0eTo6c2hvdWxkQWxsb3dBY2Nlc3NUb0RPTVdpbmRvdygqbGV4aWNhbEdsb2JhbE9iamVjdCwg
dGhpc09iamVjdC0+d3JhcHBlZCgpLCBlcnJvck1lc3NhZ2UpKSB7Ci0gICAgICAgIC8vIFdlIG9u
bHkgYWxsb3cgc2V0dGluZyAibG9jYXRpb24iIGF0dHJpYnV0ZSBjcm9zcy1vcmlnaW4uCi0gICAg
ICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5j
bGllbnREYXRhKS0+YnVpbHRpbk5hbWVzKCkubG9jYXRpb25QdWJsaWNOYW1lKCkpCi0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIHRocm93U2VjdXJpdHlFcnJvcigqbGV4aWNhbEdsb2JhbE9i
amVjdCwgc2NvcGUsIGVycm9yTWVzc2FnZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci19Ci0K
IGJvb2wgSlNET01XaW5kb3c6OnB1dChKU0NlbGwqIGNlbGwsIEpTR2xvYmFsT2JqZWN0KiBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVl
LCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgVk0mIHZtID0gbGV4aWNhbEdsb2JhbE9i
amVjdC0+dm0oKTsKQEAgLTI3MiwxNyArMjU1LDEwIEBAIGJvb2wgSlNET01XaW5kb3c6OnB1dChK
U0NlbGwqIGNlbGwsIEpTR2wKIAogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNET01X
aW5kb3cqPihjZWxsKTsKIAotICAgIFN0cmluZyBlcnJvck1lc3NhZ2U7Ci0gICAgaWYgKCFCaW5k
aW5nU2VjdXJpdHk6OnNob3VsZEFsbG93QWNjZXNzVG9ET01XaW5kb3coKmxleGljYWxHbG9iYWxP
YmplY3QsIHRoaXNPYmplY3QtPndyYXBwZWQoKSwgZXJyb3JNZXNzYWdlKSkgeworICAgIGlmIChw
cm9wZXJ0eU5hbWUgIT0gc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRh
KS0+YnVpbHRpbk5hbWVzKCkubG9jYXRpb25QdWJsaWNOYW1lKCkpIHsKICAgICAgICAgLy8gV2Ug
b25seSBhbGxvdyBzZXR0aW5nICJsb2NhdGlvbiIgYXR0cmlidXRlIGNyb3NzLW9yaWdpbi4KLSAg
ICAgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZt
LmNsaWVudERhdGEpLT5idWlsdGluTmFtZXMoKS5sb2NhdGlvblB1YmxpY05hbWUoKSkgewotICAg
ICAgICAgICAgYm9vbCBwdXRSZXN1bHQgPSBmYWxzZTsKLSAgICAgICAgICAgIGlmIChsb29rdXBQ
dXQobGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCB0aGlzT2JqZWN0LCB2YWx1ZSwg
KnNfaW5mby5zdGF0aWNQcm9wSGFzaFRhYmxlLCBzbG90LCBwdXRSZXN1bHQpKQotICAgICAgICAg
ICAgICAgIHJldHVybiBwdXRSZXN1bHQ7CisgICAgICAgIGlmICghQmluZGluZ1NlY3VyaXR5Ojpz
aG91bGRBbGxvd0FjY2Vzc1RvRE9NV2luZG93KGxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNPYmpl
Y3QtPndyYXBwZWQoKSwgVGhyb3dTZWN1cml0eUVycm9yKSkKICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgfQotICAgICAgICB0aHJvd1NlY3VyaXR5RXJyb3IoKmxleGljYWxHbG9i
YWxPYmplY3QsIHNjb3BlLCBlcnJvck1lc3NhZ2UpOwotICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgfQogCiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBCYXNlOjpwdXQodGhpc09iamVj
dCwgbGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCkpOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNMb2NhdGlvbkN1c3RvbS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNMb2NhdGlvbkN1c3RvbS5jcHAJ
KHJldmlzaW9uIDI3NjU4NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTG9jYXRp
b25DdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDgsMjMgKzEwOCw2IEBAIGJvb2wgSlNM
b2NhdGlvbjo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmQKICAgICBSRUxFQVNFX0FORF9SRVRVUk4o
c2NvcGUsIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KG9iamVjdCwgbGV4aWNh
bEdsb2JhbE9iamVjdCwgaW5kZXgsIHNsb3QpKTsKIH0KIAotdm9pZCBKU0xvY2F0aW9uOjpkb1B1
dFByb3BlcnR5U2VjdXJpdHlDaGVjayhKU09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9iamVjdCog
bGV4aWNhbEdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHV0UHJvcGVy
dHlTbG90JikKLXsKLSAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTTG9jYXRpb24qPihv
YmplY3QpOwotICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygp
KTsKLQotICAgIFZNJiB2bSA9IGxleGljYWxHbG9iYWxPYmplY3QtPnZtKCk7Ci0KLSAgICAvLyBB
bHdheXMgYWxsb3cgYXNzaWduaW5nIHRvIHRoZSB3aG9sZSBsb2NhdGlvbi4KLSAgICAvLyBIb3dl
dmVyLCBhbGxsb3dpbmcgYXNzaWduaW5nIG9mIHBpZWNlcyBtaWdodCBpbmFkdmVydGVudGx5IGRp
c2Nsb3NlIHBhcnRzIG9mIHRoZSBvcmlnaW5hbCBsb2NhdGlvbi4KLSAgICAvLyBTbyBmYWxsIHRo
cm91Z2ggdG8gdGhlIGFjY2VzcyBjaGVjayBmb3IgdGhvc2UuCi0gICAgaWYgKHByb3BlcnR5TmFt
ZSA9PSBzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpLT5idWlsdGlu
TmFtZXMoKS5ocmVmUHVibGljTmFtZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBCbG9j
ayBhY2Nlc3MgYW5kIHRocm93IGlmIHRoZXJlIGlzIGEgc2VjdXJpdHkgZXJyb3IuCi0gICAgQmlu
ZGluZ1NlY3VyaXR5OjpzaG91bGRBbGxvd0FjY2Vzc1RvRE9NV2luZG93KGxleGljYWxHbG9iYWxP
YmplY3QsIHRoaXNPYmplY3QtPndyYXBwZWQoKS53aW5kb3coKSwgVGhyb3dTZWN1cml0eUVycm9y
KTsKLX0KLQogYm9vbCBKU0xvY2F0aW9uOjpwdXQoSlNDZWxsKiBjZWxsLCBKU0dsb2JhbE9iamVj
dCogbGV4aWNhbEdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1
ZSB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBwdXRQcm9wZXJ0eVNsb3QpCiB7CiAgICAgVk0mIHZt
ID0gbGV4aWNhbEdsb2JhbE9iamVjdC0+dm0oKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTUmVtb3RlRE9NV2luZG93Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU1JlbW90ZURPTVdpbmRvd0N1c3RvbS5jcHAJKHJldmlzaW9u
IDI3NjU4NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUmVtb3RlRE9NV2luZG93
Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjgsMTEgKzY4LDEyIEBAIGJvb2wgSlNSZW1v
dGVET01XaW5kb3c6OnB1dChKU0NlbGwqIGNlbGwKIAogICAgIC8vIFdlIG9ubHkgYWxsb3cgc2V0
dGluZyAibG9jYXRpb24iIGF0dHJpYnV0ZSBjcm9zcy1vcmlnaW4uCiAgICAgaWYgKHByb3BlcnR5
TmFtZSA9PSBzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpLT5idWls
dGluTmFtZXMoKS5sb2NhdGlvblB1YmxpY05hbWUoKSkgewotICAgICAgICBib29sIHB1dFJlc3Vs
dCA9IGZhbHNlOwotICAgICAgICBpZiAobG9va3VwUHV0KGxleGljYWxHbG9iYWxPYmplY3QsIHBy
b3BlcnR5TmFtZSwgdGhpc09iamVjdCwgdmFsdWUsICpzX2luZm8uc3RhdGljUHJvcEhhc2hUYWJs
ZSwgc2xvdCwgcHV0UmVzdWx0KSkKLSAgICAgICAgICAgIHJldHVybiBwdXRSZXN1bHQ7Ci0gICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgYXV0byogc2V0dGVyID0gc19pbmZvLnN0YXRpY1By
b3BIYXNoVGFibGUtPmVudHJ5KHByb3BlcnR5TmFtZSktPnByb3BlcnR5UHV0dGVyKCk7CisgICAg
ICAgIHNjb3BlLnJlbGVhc2UoKTsKKyAgICAgICAgc2V0dGVyKGxleGljYWxHbG9iYWxPYmplY3Qs
IEpTVmFsdWU6OmVuY29kZShzbG90LnRoaXNWYWx1ZSgpKSwgSlNWYWx1ZTo6ZW5jb2RlKHZhbHVl
KSwgcHJvcGVydHlOYW1lKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQorCiAgICAgdGhy
b3dTZWN1cml0eUVycm9yKCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSwgZXJyb3JNZXNzYWdl
KTsKICAgICByZXR1cm4gZmFsc2U7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQkocmV2aXNpb24gMjc2NTg1KQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0JKHdvcmtp
bmcgY29weSkKQEAgLTExODEsNiArMTE4MSw4IEBAIHN1YiBHZW5lcmF0ZVB1dAogICAgIHB1c2go
QCRvdXRwdXRBcnJheSwgIntcbiIpOwogICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBhdXRv
KiB0aGlzT2JqZWN0ID0ganNDYXN0PCR7Y2xhc3NOYW1lfSo+KGNlbGwpO1xuIik7CiAgICAgcHVz
aChAJG91dHB1dEFycmF5LCAiICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVj
dCwgaW5mbygpKTtcblxuIik7CisgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIGlmIChVTkxJ
S0VMWSh0aGlzT2JqZWN0ICE9IHB1dFByb3BlcnR5U2xvdC50aGlzVmFsdWUoKSkpXG4iKTsKKyAg
ICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgICAgIHJldHVybiBKU09iamVjdDo6cHV0KHRoaXNP
YmplY3QsIGxleGljYWxHbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHB1dFByb3Bl
cnR5U2xvdCk7XG4iKTsKIAogICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBhdXRvIHRocm93
U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKGxleGljYWxHbG9iYWxPYmplY3QtPnZtKCkpO1xu
XG4iKTsKIApAQCAtMjk1NCwxMSArMjk1Niw2IEBAIHN1YiBHZW5lcmF0ZUhlYWRlcgogICAgICAg
ICAkc3RydWN0dXJlRmxhZ3N7IkpTQzo6SW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5k
ZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyJ9ID0gMTsKICAgICB9CiAKLSAgICBpZiAoJGludGVy
ZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Q2hlY2tTZWN1cml0eX0pIHsKLSAgICAgICAgcHVz
aChAaGVhZGVyQ29udGVudCwgIiAgICBzdGF0aWMgdm9pZCBkb1B1dFByb3BlcnR5U2VjdXJpdHlD
aGVjayhKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6UHJvcGVydHlO
YW1lLCBKU0M6OlB1dFByb3BlcnR5U2xvdCYpO1xuIik7Ci0gICAgICAgICRzdHJ1Y3R1cmVGbGFn
c3siSlNDOjpIYXNQdXRQcm9wZXJ0eVNlY3VyaXR5Q2hlY2sifSA9IDE7Ci0gICAgfQotCiAgICAg
aWYgKCRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+e1BsdWdpbn0gfHwgR2V0TmFtZWRT
ZXR0ZXJPcGVyYXRpb24oJGludGVyZmFjZSkpIHsKICAgICAgICAgJHN0cnVjdHVyZUZsYWdzeyJK
U0M6OlByb2hpYml0c1Byb3BlcnR5Q2FjaGluZyJ9ID0gMTsKICAgICB9CkBAIC0yOTcxLDYgKzI5
NjgsNyBAQCBzdWIgR2VuZXJhdGVIZWFkZXIKICAgICBpZiAoSW5zdGFuY2VPdmVycmlkZXNQdXQo
JGludGVyZmFjZSkpIHsKICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBzdGF0aWMg
Ym9vbCBwdXQoSlNDOjpKU0NlbGwqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpQcm9wZXJ0
eU5hbWUsIEpTQzo6SlNWYWx1ZSwgSlNDOjpQdXRQcm9wZXJ0eVNsb3QmKTtcbiIpOwogICAgICAg
ICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHN0YXRpYyBib29sIHB1dEJ5SW5kZXgoSlNDOjpK
U0NlbGwqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU0M6
OkpTVmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpO1xuIik7CisgICAgICAgICRzdHJ1Y3R1cmVGbGFn
c3siSlNDOjpPdmVycmlkZXNQdXQifSA9IDE7CiAgICAgfQogICAgIAogICAgIGlmIChJbnN0YW5j
ZU92ZXJyaWRlc0RlZmluZU93blByb3BlcnR5KCRpbnRlcmZhY2UpKSB7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RG9tYWluU2VjdXJpdHkuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0RG9tYWluU2VjdXJpdHkuaAkocmV2aXNpb24gMjc2NTg1KQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdERvbWFpblNlY3VyaXR5LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTM5LDcgKzM5LDYgQEAgcHVibGljOgogICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0
KiBjcmVhdGVQcm90b3R5cGUoSlNDOjpWTSYsIEpTRE9NR2xvYmFsT2JqZWN0Jik7CiAgICAgc3Rh
dGljIEpTQzo6SlNPYmplY3QqIHByb3RvdHlwZShKU0M6OlZNJiwgSlNET01HbG9iYWxPYmplY3Qm
KTsKICAgICBzdGF0aWMgVGVzdERvbWFpblNlY3VyaXR5KiB0b1dyYXBwZWQoSlNDOjpWTSYsIEpT
Qzo6SlNWYWx1ZSk7Ci0gICAgc3RhdGljIHZvaWQgZG9QdXRQcm9wZXJ0eVNlY3VyaXR5Q2hlY2so
SlNDOjpKU09iamVjdCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlByb3BlcnR5TmFtZSwg
SlNDOjpQdXRQcm9wZXJ0eVNsb3QmKTsKICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQzo6SlND
ZWxsKik7CiAKICAgICBERUNMQVJFX0lORk87CkBAIC01OSw3ICs1OCw3IEBAIHB1YmxpYzoKICAg
ICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKTsK
ICAgICBzdGF0aWMgdm9pZCBhbmFseXplSGVhcChKU0NlbGwqLCBKU0M6OkhlYXBBbmFseXplciYp
OwogcHVibGljOgotICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3Mg
PSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEpTQzo6SGFzUHV0UHJvcGVydHlTZWN1cml0eUNoZWNr
IHwgSlNDOjpIYXNTdGF0aWNQcm9wZXJ0eVRhYmxlOworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5z
aWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEpTQzo6SGFzU3Rh
dGljUHJvcGVydHlUYWJsZTsKIHByb3RlY3RlZDoKICAgICBKU1Rlc3REb21haW5TZWN1cml0eShK
U0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0JiwgUmVmPFRlc3REb21haW5TZWN1cml0
eT4mJik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW5kZXhlZFNldHRlck5vSWRl
bnRpZmllci5jcHAJKHJldmlzaW9uIDI3NjU4NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTk5LDYgKzE5OSw4IEBAIGJvb2wgSlNUZXN0SW5kZXhlZFNldHRlck5v
SWRlbnRpZmllcjo6cHUKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdEluZGV4
ZWRTZXR0ZXJOb0lkZW50aWZpZXIqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVS
SVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAKKyAgICBpZiAoVU5MSUtFTFkodGhpc09iamVjdCAh
PSBwdXRQcm9wZXJ0eVNsb3QudGhpc1ZhbHVlKCkpKQorICAgICAgICByZXR1cm4gSlNPYmplY3Q6
OnB1dCh0aGlzT2JqZWN0LCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHZhbHVl
LCBwdXRQcm9wZXJ0eVNsb3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUobGV4aWNhbEdsb2JhbE9iamVjdC0+dm0oKSk7CiAKICAgICBpZiAoYXV0byBpbmRleCA9
IHBhcnNlSW5kZXgocHJvcGVydHlOYW1lKSkgewpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
SW5kZXhlZFNldHRlck5vSWRlbnRpZmllci5oCShyZXZpc2lvbiAyNzY1ODUpCisrKyBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW5kZXhlZFNldHRlck5vSWRl
bnRpZmllci5oCSh3b3JraW5nIGNvcHkpCkBAIC02NCw3ICs2NCw3IEBAIHB1YmxpYzoKICAgICBz
dGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKTsKICAg
ICBzdGF0aWMgdm9pZCBhbmFseXplSGVhcChKU0NlbGwqLCBKU0M6OkhlYXBBbmFseXplciYpOwog
cHVibGljOgotICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBC
YXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEpTQzo6SW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5
SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVy
dHlOYW1lcyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90OworICAgIHN0YXRpYyBj
b25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8
IEpTQzo6SW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElz
Tm90WmVybyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlOYW1lcyB8IEpTQzo6T3ZlcnJp
ZGVzR2V0T3duUHJvcGVydHlTbG90IHwgSlNDOjpPdmVycmlkZXNQdXQ7CiBwcm90ZWN0ZWQ6CiAg
ICAgSlNUZXN0SW5kZXhlZFNldHRlck5vSWRlbnRpZmllcihKU0M6OlN0cnVjdHVyZSosIEpTRE9N
R2xvYmFsT2JqZWN0JiwgUmVmPFRlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyPiYmKTsKIApJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEluZGV4
ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4
Y2VwdGlvbi5jcHAJKHJldmlzaW9uIDI3NjU4NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xOTksNiArMTk5LDggQEAgYm9vbCBKU1Rlc3RJbmRleGVkU2V0
dGVyVGhyb3dpbmdFeGNlcHRpbwogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0
SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09C
SkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwogCisgICAgaWYgKFVOTElLRUxZKHRo
aXNPYmplY3QgIT0gcHV0UHJvcGVydHlTbG90LnRoaXNWYWx1ZSgpKSkKKyAgICAgICAgcmV0dXJu
IEpTT2JqZWN0OjpwdXQodGhpc09iamVjdCwgbGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlO
YW1lLCB2YWx1ZSwgcHV0UHJvcGVydHlTbG90KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKGxleGljYWxHbG9iYWxPYmplY3QtPnZtKCkpOwogCiAgICAgaWYgKGF1
dG8gaW5kZXggPSBwYXJzZUluZGV4KHByb3BlcnR5TmFtZSkpIHsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbmRleGVkU2V0dGVyVGhyb3dpbmdF
eGNlcHRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uLmgJKHJldmlzaW9u
IDI3NjU4NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNjQs
NyArNjQsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNl
Rm9ySW1wbChKU0M6OlZNJiB2bSk7CiAgICAgc3RhdGljIHZvaWQgYW5hbHl6ZUhlYXAoSlNDZWxs
KiwgSlNDOjpIZWFwQW5hbHl6ZXImKTsKIHB1YmxpYzoKLSAgICBzdGF0aWMgY29uc3RleHByIHVu
c2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBKU0M6OkludGVy
Y2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8gfCBK
U0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5TmFtZXMgfCBKU0M6Ok92ZXJyaWRlc0dldE93blBy
b3BlcnR5U2xvdDsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdz
ID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBKU0M6OkludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNs
b3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8gfCBKU0M6Ok92ZXJyaWRlc0dldE93blBy
b3BlcnR5TmFtZXMgfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEpTQzo6T3Zl
cnJpZGVzUHV0OwogcHJvdGVjdGVkOgogICAgIEpTVGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4
Y2VwdGlvbihKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0JiwgUmVmPFRlc3RJbmRl
eGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24+JiYpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyLmNwcAkocmV2aXNpb24gMjc2NTg1
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEluZGV4
ZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwOCw2ICsyMDgs
OCBAQCBib29sIEpTVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcjo6CiAgICAgYXV0byog
dGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIqPihj
ZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7
CiAKKyAgICBpZiAoVU5MSUtFTFkodGhpc09iamVjdCAhPSBwdXRQcm9wZXJ0eVNsb3QudGhpc1Zh
bHVlKCkpKQorICAgICAgICByZXR1cm4gSlNPYmplY3Q6OnB1dCh0aGlzT2JqZWN0LCBsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBwdXRQcm9wZXJ0eVNsb3QpOwogICAg
IGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUobGV4aWNhbEdsb2JhbE9iamVj
dC0+dm0oKSk7CiAKICAgICBpZiAoYXV0byBpbmRleCA9IHBhcnNlSW5kZXgocHJvcGVydHlOYW1l
KSkgewpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50
aWZpZXIuaAkocmV2aXNpb24gMjc2NTg1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5oCSh3b3JraW5n
IGNvcHkpCkBAIC02NCw3ICs2NCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgSlNDOjpJc29TdWJz
cGFjZSogc3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKTsKICAgICBzdGF0aWMgdm9pZCBhbmFs
eXplSGVhcChKU0NlbGwqLCBKU0M6OkhlYXBBbmFseXplciYpOwogcHVibGljOgotICAgIHN0YXRp
YyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFn
cyB8IEpTQzo6SW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0
aElzTm90WmVybyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlOYW1lcyB8IEpTQzo6T3Zl
cnJpZGVzR2V0T3duUHJvcGVydHlTbG90OworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQg
U3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEpTQzo6SW50ZXJjZXB0c0dl
dE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8IEpTQzo6T3Zl
cnJpZGVzR2V0T3duUHJvcGVydHlOYW1lcyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlT
bG90IHwgSlNDOjpPdmVycmlkZXNQdXQ7CiBwcm90ZWN0ZWQ6CiAgICAgSlNUZXN0SW5kZXhlZFNl
dHRlcldpdGhJZGVudGlmaWVyKEpTQzo6U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3QmLCBS
ZWY8VGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcj4mJik7CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbnRlcmZhY2UuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW50
ZXJmYWNlLmgJKHJldmlzaW9uIDI3NjU4NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RJbnRlcmZhY2UuaAkod29ya2luZyBjb3B5KQpAQCAtODMsNiAr
ODMsOCBAQCBwdWJsaWM6CiAjaWYgRU5BQkxFKENvbmRpdGlvbjExKSB8fCBFTkFCTEUoQ29uZGl0
aW9uMTIpCiAgICAgSlNDOjpKU1ZhbHVlIHN1cHBsZW1lbnRhbE1ldGhvZDMoSlNDOjpKU0dsb2Jh
bE9iamVjdCYsIEpTQzo6Q2FsbEZyYW1lJik7CiAjZW5kaWYKK3B1YmxpYzoKKyAgICBzdGF0aWMg
Y29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3Mg
fCBKU0M6Ok92ZXJyaWRlc1B1dDsKIHByb3RlY3RlZDoKICAgICBKU1Rlc3RJbnRlcmZhY2UoSlND
OjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCYsIFJlZjxUZXN0SW50ZXJmYWNlPiYmKTsK
IApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5h
bWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkQW5kSW5kZXhlZFNl
dHRlck5vSWRlbnRpZmllci5jcHAJKHJldmlzaW9uIDI3NjU4NSkKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lk
ZW50aWZpZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjUsNiArMjI1LDggQEAgYm9vbCBKU1Rl
c3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aQogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBq
c0Nhc3Q8SlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyKj4oY2VsbCk7CiAg
ICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwogCisgICAg
aWYgKFVOTElLRUxZKHRoaXNPYmplY3QgIT0gcHV0UHJvcGVydHlTbG90LnRoaXNWYWx1ZSgpKSkK
KyAgICAgICAgcmV0dXJuIEpTT2JqZWN0OjpwdXQodGhpc09iamVjdCwgbGV4aWNhbEdsb2JhbE9i
amVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgcHV0UHJvcGVydHlTbG90KTsKICAgICBhdXRvIHRo
cm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKGxleGljYWxHbG9iYWxPYmplY3QtPnZtKCkp
OwogCiAgICAgaWYgKGF1dG8gaW5kZXggPSBwYXJzZUluZGV4KHByb3BlcnR5TmFtZSkpIHsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEFu
ZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9J
ZGVudGlmaWVyLmgJKHJldmlzaW9uIDI3NjU4NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtNjQsNyArNjQsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIEpT
Qzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSk7CiAgICAgc3RhdGlj
IHZvaWQgYW5hbHl6ZUhlYXAoSlNDZWxsKiwgSlNDOjpIZWFwQW5hbHl6ZXImKTsKIHB1YmxpYzoK
LSAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3Ry
dWN0dXJlRmxhZ3MgfCBKU0M6OkdldE93blByb3BlcnR5U2xvdElzSW1wdXJlRm9yUHJvcGVydHlB
YnNlbmNlIHwgSlNDOjpJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVu
TGVuZ3RoSXNOb3RaZXJvIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eU5hbWVzIHwgSlND
OjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBKU0M6OlByb2hpYml0c1Byb3BlcnR5Q2Fj
aGluZzsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFz
ZTo6U3RydWN0dXJlRmxhZ3MgfCBKU0M6OkdldE93blByb3BlcnR5U2xvdElzSW1wdXJlRm9yUHJv
cGVydHlBYnNlbmNlIHwgSlNDOjpJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2
ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eU5hbWVz
IHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBKU0M6Ok92ZXJyaWRlc1B1dCB8
IEpTQzo6UHJvaGliaXRzUHJvcGVydHlDYWNoaW5nOwogcHJvdGVjdGVkOgogICAgIEpTVGVzdE5h
bWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllcihKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xv
YmFsT2JqZWN0JiwgUmVmPFRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXI+JiYp
OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEFuZElu
ZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5jcHAJKHJldmlzaW9uIDI3NjU4NSkKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEFuZEluZGV4
ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyNSw2ICsy
MjUsOCBAQCBib29sIEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5nCiAgICAgYXV0
byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2lu
Z0V4Y2VwdGlvbio+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09i
amVjdCwgaW5mbygpKTsKIAorICAgIGlmIChVTkxJS0VMWSh0aGlzT2JqZWN0ICE9IHB1dFByb3Bl
cnR5U2xvdC50aGlzVmFsdWUoKSkpCisgICAgICAgIHJldHVybiBKU09iamVjdDo6cHV0KHRoaXNP
YmplY3QsIGxleGljYWxHbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHB1dFByb3Bl
cnR5U2xvdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShsZXhp
Y2FsR2xvYmFsT2JqZWN0LT52bSgpKTsKIAogICAgIGlmIChhdXRvIGluZGV4ID0gcGFyc2VJbmRl
eChwcm9wZXJ0eU5hbWUpKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24uaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24uaAkocmV2aXNpb24gMjc2
NTg1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5h
bWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAg
LTY0LDcgKzY0LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJz
cGFjZUZvckltcGwoSlNDOjpWTSYgdm0pOwogICAgIHN0YXRpYyB2b2lkIGFuYWx5emVIZWFwKEpT
Q2VsbCosIEpTQzo6SGVhcEFuYWx5emVyJik7CiBwdWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0ZXhw
ciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSlNDOjpH
ZXRPd25Qcm9wZXJ0eVNsb3RJc0ltcHVyZUZvclByb3BlcnR5QWJzZW5jZSB8IEpTQzo6SW50ZXJj
ZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8IEpT
Qzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlOYW1lcyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJv
cGVydHlTbG90IHwgSlNDOjpQcm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmc7CisgICAgc3RhdGljIGNv
bnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwg
SlNDOjpHZXRPd25Qcm9wZXJ0eVNsb3RJc0ltcHVyZUZvclByb3BlcnR5QWJzZW5jZSB8IEpTQzo6
SW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVy
byB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlOYW1lcyB8IEpTQzo6T3ZlcnJpZGVzR2V0
T3duUHJvcGVydHlTbG90IHwgSlNDOjpPdmVycmlkZXNQdXQgfCBKU0M6OlByb2hpYml0c1Byb3Bl
cnR5Q2FjaGluZzsKIHByb3RlY3RlZDoKICAgICBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJU
aHJvd2luZ0V4Y2VwdGlvbihKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0JiwgUmVm
PFRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbj4mJik7CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEFuZElu
ZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldp
dGhJZGVudGlmaWVyLmNwcAkocmV2aXNpb24gMjc2NTg1KQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVu
dGlmaWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjM2LDYgKzIzNiw4IEBAIGJvb2wgSlNUZXN0
TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW4KICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganND
YXN0PEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyKj4oY2VsbCk7CiAg
ICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwogCisgICAg
aWYgKFVOTElLRUxZKHRoaXNPYmplY3QgIT0gcHV0UHJvcGVydHlTbG90LnRoaXNWYWx1ZSgpKSkK
KyAgICAgICAgcmV0dXJuIEpTT2JqZWN0OjpwdXQodGhpc09iamVjdCwgbGV4aWNhbEdsb2JhbE9i
amVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgcHV0UHJvcGVydHlTbG90KTsKICAgICBhdXRvIHRo
cm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKGxleGljYWxHbG9iYWxPYmplY3QtPnZtKCkp
OwogCiAgICAgaWYgKGF1dG8gaW5kZXggPSBwYXJzZUluZGV4KHByb3BlcnR5TmFtZSkpIHsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEFu
ZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJX
aXRoSWRlbnRpZmllci5oCShyZXZpc2lvbiAyNzY1ODUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50
aWZpZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNjQsNyArNjQsNyBAQCBwdWJsaWM6CiAgICAgc3Rh
dGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSk7CiAgICAg
c3RhdGljIHZvaWQgYW5hbHl6ZUhlYXAoSlNDZWxsKiwgSlNDOjpIZWFwQW5hbHl6ZXImKTsKIHB1
YmxpYzoKLSAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFz
ZTo6U3RydWN0dXJlRmxhZ3MgfCBKU0M6OkdldE93blByb3BlcnR5U2xvdElzSW1wdXJlRm9yUHJv
cGVydHlBYnNlbmNlIHwgSlNDOjpJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2
ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eU5hbWVz
IHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBKU0M6OlByb2hpYml0c1Byb3Bl
cnR5Q2FjaGluZzsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdz
ID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBKU0M6OkdldE93blByb3BlcnR5U2xvdElzSW1wdXJl
Rm9yUHJvcGVydHlBYnNlbmNlIHwgSlNDOjpJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJ
bmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0
eU5hbWVzIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBKU0M6Ok92ZXJyaWRl
c1B1dCB8IEpTQzo6UHJvaGliaXRzUHJvcGVydHlDYWNoaW5nOwogcHJvdGVjdGVkOgogICAgIEpT
VGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyKEpTQzo6U3RydWN0dXJlKiwg
SlNET01HbG9iYWxPYmplY3QmLCBSZWY8VGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVu
dGlmaWVyPiYmKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJOb0lk
ZW50aWZpZXIuY3BwCShyZXZpc2lvbiAyNzY1ODUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMDQsNiArMjA0LDggQEAgYm9vbCBKU1Rlc3ROYW1lZFNldHRlck5vSWRl
bnRpZmllcjo6cHV0KAogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0TmFtZWRT
ZXR0ZXJOb0lkZW50aWZpZXIqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRT
KHRoaXNPYmplY3QsIGluZm8oKSk7CiAKKyAgICBpZiAoVU5MSUtFTFkodGhpc09iamVjdCAhPSBw
dXRQcm9wZXJ0eVNsb3QudGhpc1ZhbHVlKCkpKQorICAgICAgICByZXR1cm4gSlNPYmplY3Q6OnB1
dCh0aGlzT2JqZWN0LCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBw
dXRQcm9wZXJ0eVNsb3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUobGV4aWNhbEdsb2JhbE9iamVjdC0+dm0oKSk7CiAKICAgICBpZiAoIXByb3BlcnR5TmFtZS5p
c1N5bWJvbCgpKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJOb0lkZW50
aWZpZXIuaAkocmV2aXNpb24gMjc2NTg1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTY0LDcgKzY0LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNl
KiBzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pOwogICAgIHN0YXRpYyB2b2lkIGFuYWx5emVI
ZWFwKEpTQ2VsbCosIEpTQzo6SGVhcEFuYWx5emVyJik7CiBwdWJsaWM6Ci0gICAgc3RhdGljIGNv
bnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwg
SlNDOjpHZXRPd25Qcm9wZXJ0eVNsb3RJc0ltcHVyZUZvclByb3BlcnR5QWJzZW5jZSB8IEpTQzo6
SW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVy
byB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlOYW1lcyB8IEpTQzo6T3ZlcnJpZGVzR2V0
T3duUHJvcGVydHlTbG90IHwgSlNDOjpQcm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmc7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZs
YWdzIHwgSlNDOjpHZXRPd25Qcm9wZXJ0eVNsb3RJc0ltcHVyZUZvclByb3BlcnR5QWJzZW5jZSB8
IEpTQzo6SW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElz
Tm90WmVybyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlOYW1lcyB8IEpTQzo6T3ZlcnJp
ZGVzR2V0T3duUHJvcGVydHlTbG90IHwgSlNDOjpPdmVycmlkZXNQdXQgfCBKU0M6OlByb2hpYml0
c1Byb3BlcnR5Q2FjaGluZzsKIHByb3RlY3RlZDoKICAgICBKU1Rlc3ROYW1lZFNldHRlck5vSWRl
bnRpZmllcihKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0JiwgUmVmPFRlc3ROYW1l
ZFNldHRlck5vSWRlbnRpZmllcj4mJik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9uLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5jcHAJKHJldmlzaW9uIDI3NjU4NSkKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRl
clRocm93aW5nRXhjZXB0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA0LDYgKzIwNCw4IEBA
IGJvb2wgSlNUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbjoKICAgICBhdXRvKiB0aGlz
T2JqZWN0ID0ganNDYXN0PEpTVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24qPihjZWxs
KTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAK
KyAgICBpZiAoVU5MSUtFTFkodGhpc09iamVjdCAhPSBwdXRQcm9wZXJ0eVNsb3QudGhpc1ZhbHVl
KCkpKQorICAgICAgICByZXR1cm4gSlNPYmplY3Q6OnB1dCh0aGlzT2JqZWN0LCBsZXhpY2FsR2xv
YmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBwdXRQcm9wZXJ0eVNsb3QpOwogICAgIGF1
dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUobGV4aWNhbEdsb2JhbE9iamVjdC0+
dm0oKSk7CiAKICAgICBpZiAoIXByb3BlcnR5TmFtZS5pc1N5bWJvbCgpKSB7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJUaHJv
d2luZ0V4Y2VwdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9uLmgJKHJldmlz
aW9uIDI3NjU4NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTY0
LDcgKzY0LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFj
ZUZvckltcGwoSlNDOjpWTSYgdm0pOwogICAgIHN0YXRpYyB2b2lkIGFuYWx5emVIZWFwKEpTQ2Vs
bCosIEpTQzo6SGVhcEFuYWx5emVyJik7CiBwdWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB1
bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSlNDOjpHZXRP
d25Qcm9wZXJ0eVNsb3RJc0ltcHVyZUZvclByb3BlcnR5QWJzZW5jZSB8IEpTQzo6SW50ZXJjZXB0
c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8IEpTQzo6
T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlOYW1lcyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVy
dHlTbG90IHwgSlNDOjpQcm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmc7CisgICAgc3RhdGljIGNvbnN0
ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSlND
OjpHZXRPd25Qcm9wZXJ0eVNsb3RJc0ltcHVyZUZvclByb3BlcnR5QWJzZW5jZSB8IEpTQzo6SW50
ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8
IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlOYW1lcyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3du
UHJvcGVydHlTbG90IHwgSlNDOjpPdmVycmlkZXNQdXQgfCBKU0M6OlByb2hpYml0c1Byb3BlcnR5
Q2FjaGluZzsKIHByb3RlY3RlZDoKICAgICBKU1Rlc3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0
aW9uKEpTQzo6U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3QmLCBSZWY8VGVzdE5hbWVkU2V0
dGVyVGhyb3dpbmdFeGNlcHRpb24+JiYpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXIuY3BwCShyZXZpc2lvbiAyNzY1ODUpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRo
SWRlbnRpZmllci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxMiw2ICsyMTIsOCBAQCBib29sIEpT
VGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXI6OnB1CiAgICAgYXV0byogdGhpc09iamVjdCA9
IGpzQ2FzdDxKU1Rlc3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyKj4oY2VsbCk7CiAgICAgQVNT
RVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwogCisgICAgaWYgKFVO
TElLRUxZKHRoaXNPYmplY3QgIT0gcHV0UHJvcGVydHlTbG90LnRoaXNWYWx1ZSgpKSkKKyAgICAg
ICAgcmV0dXJuIEpTT2JqZWN0OjpwdXQodGhpc09iamVjdCwgbGV4aWNhbEdsb2JhbE9iamVjdCwg
cHJvcGVydHlOYW1lLCB2YWx1ZSwgcHV0UHJvcGVydHlTbG90KTsKICAgICBhdXRvIHRocm93U2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKGxleGljYWxHbG9iYWxPYmplY3QtPnZtKCkpOwogCiAg
ICAgaWYgKCFwcm9wZXJ0eU5hbWUuaXNTeW1ib2woKSkgewpJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXIu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5oCShyZXZpc2lvbiAyNzY1ODUpCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJX
aXRoSWRlbnRpZmllci5oCSh3b3JraW5nIGNvcHkpCkBAIC02NCw3ICs2NCw3IEBAIHB1YmxpYzoK
ICAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZt
KTsKICAgICBzdGF0aWMgdm9pZCBhbmFseXplSGVhcChKU0NlbGwqLCBKU0M6OkhlYXBBbmFseXpl
ciYpOwogcHVibGljOgotICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxh
Z3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEpTQzo6R2V0T3duUHJvcGVydHlTbG90SXNJbXB1
cmVGb3JQcm9wZXJ0eUFic2VuY2UgfCBKU0M6OkludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RC
eUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8gfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3Bl
cnR5TmFtZXMgfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEpTQzo6UHJvaGli
aXRzUHJvcGVydHlDYWNoaW5nOworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0
dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEpTQzo6R2V0T3duUHJvcGVydHlTbG90
SXNJbXB1cmVGb3JQcm9wZXJ0eUFic2VuY2UgfCBKU0M6OkludGVyY2VwdHNHZXRPd25Qcm9wZXJ0
eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8gfCBKU0M6Ok92ZXJyaWRlc0dldE93
blByb3BlcnR5TmFtZXMgfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEpTQzo6
T3ZlcnJpZGVzUHV0IHwgSlNDOjpQcm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmc7CiBwcm90ZWN0ZWQ6
CiAgICAgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllcihKU0M6OlN0cnVjdHVyZSosIEpT
RE9NR2xvYmFsT2JqZWN0JiwgUmVmPFRlc3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyPiYmKTsK
IApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5h
bWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVk
R2V0dGVyLmNwcAkocmV2aXNpb24gMjc2NTg1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yMzYsNiArMjM2LDggQEAgYm9vbCBKU1Rlc3ROYW1lZFNldHRlcldp
dGhJbmRleGVkR2V0dGVyOgogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0TmFt
ZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlcio+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1Rf
SU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKIAorICAgIGlmIChVTkxJS0VMWSh0aGlzT2Jq
ZWN0ICE9IHB1dFByb3BlcnR5U2xvdC50aGlzVmFsdWUoKSkpCisgICAgICAgIHJldHVybiBKU09i
amVjdDo6cHV0KHRoaXNPYmplY3QsIGxleGljYWxHbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwg
dmFsdWUsIHB1dFByb3BlcnR5U2xvdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRShsZXhpY2FsR2xvYmFsT2JqZWN0LT52bSgpKTsKIAogICAgIGlmICghcHJvcGVy
dHlOYW1lLmlzU3ltYm9sKCkpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVk
U2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXIuaAkocmV2aXNpb24gMjc2NTg1KQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4
ZWRHZXR0ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNjQsNyArNjQsNyBAQCBwdWJsaWM6CiAgICAg
c3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSk7CiAg
ICAgc3RhdGljIHZvaWQgYW5hbHl6ZUhlYXAoSlNDZWxsKiwgSlNDOjpIZWFwQW5hbHl6ZXImKTsK
IHB1YmxpYzoKLSAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0g
QmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBKU0M6OkdldE93blByb3BlcnR5U2xvdElzSW1wdXJlRm9y
UHJvcGVydHlBYnNlbmNlIHwgSlNDOjpJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRl
eEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eU5h
bWVzIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBKU0M6OlByb2hpYml0c1By
b3BlcnR5Q2FjaGluZzsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZs
YWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBKU0M6OkdldE93blByb3BlcnR5U2xvdElzSW1w
dXJlRm9yUHJvcGVydHlBYnNlbmNlIHwgSlNDOjpJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90
QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9w
ZXJ0eU5hbWVzIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBKU0M6Ok92ZXJy
aWRlc1B1dCB8IEpTQzo6UHJvaGliaXRzUHJvcGVydHlDYWNoaW5nOwogcHJvdGVjdGVkOgogICAg
IEpTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXIoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RP
TUdsb2JhbE9iamVjdCYsIFJlZjxUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlcj4mJik7
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RO
YW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5kU2V0dGVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJX
aXRoSW5kZXhlZEdldHRlckFuZFNldHRlci5jcHAJKHJldmlzaW9uIDI3NjU4NSkKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhJ
bmRleGVkR2V0dGVyQW5kU2V0dGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjM2LDYgKzIzNiw4
IEBAIGJvb2wgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckEKICAgICBhdXRvKiB0
aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRT
ZXR0ZXIqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3Qs
IGluZm8oKSk7CiAKKyAgICBpZiAoVU5MSUtFTFkodGhpc09iamVjdCAhPSBwdXRQcm9wZXJ0eVNs
b3QudGhpc1ZhbHVlKCkpKQorICAgICAgICByZXR1cm4gSlNPYmplY3Q6OnB1dCh0aGlzT2JqZWN0
LCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBwdXRQcm9wZXJ0eVNs
b3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUobGV4aWNhbEds
b2JhbE9iamVjdC0+dm0oKSk7CiAKICAgICBpZiAoYXV0byBpbmRleCA9IHBhcnNlSW5kZXgocHJv
cGVydHlOYW1lKSkgewpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFt
ZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRlci5oCShyZXZpc2lvbiAyNzY1ODUpCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0
ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC02NCw3ICs2
NCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3JJ
bXBsKEpTQzo6Vk0mIHZtKTsKICAgICBzdGF0aWMgdm9pZCBhbmFseXplSGVhcChKU0NlbGwqLCBK
U0M6OkhlYXBBbmFseXplciYpOwogcHVibGljOgotICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWdu
ZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEpTQzo6R2V0T3duUHJv
cGVydHlTbG90SXNJbXB1cmVGb3JQcm9wZXJ0eUFic2VuY2UgfCBKU0M6OkludGVyY2VwdHNHZXRP
d25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8gfCBKU0M6Ok92ZXJy
aWRlc0dldE93blByb3BlcnR5TmFtZXMgfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xv
dCB8IEpTQzo6UHJvaGliaXRzUHJvcGVydHlDYWNoaW5nOworICAgIHN0YXRpYyBjb25zdGV4cHIg
dW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEpTQzo6R2V0
T3duUHJvcGVydHlTbG90SXNJbXB1cmVGb3JQcm9wZXJ0eUFic2VuY2UgfCBKU0M6OkludGVyY2Vw
dHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8gfCBKU0M6
Ok92ZXJyaWRlc0dldE93blByb3BlcnR5TmFtZXMgfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3Bl
cnR5U2xvdCB8IEpTQzo6T3ZlcnJpZGVzUHV0IHwgSlNDOjpQcm9oaWJpdHNQcm9wZXJ0eUNhY2hp
bmc7CiBwcm90ZWN0ZWQ6CiAgICAgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFu
ZFNldHRlcihKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0JiwgUmVmPFRlc3ROYW1l
ZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5kU2V0dGVyPiYmKTsKIApJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2Fj
eU92ZXJyaWRlQnVpbHRJbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lPdmVycmlkZUJ1
aWx0SW5zLmNwcAkocmV2aXNpb24gMjc2NTg1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeU92ZXJyaWRlQnVpbHRJ
bnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDQsNiArMjA0LDggQEAgYm9vbCBKU1Rlc3ROYW1l
ZFNldHRlcldpdGhMZWdhY3lPdmVycmlkZQogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8
SlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5T3ZlcnJpZGVCdWlsdElucyo+KGNlbGwpOwogICAg
IEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKIAorICAgIGlm
IChVTkxJS0VMWSh0aGlzT2JqZWN0ICE9IHB1dFByb3BlcnR5U2xvdC50aGlzVmFsdWUoKSkpCisg
ICAgICAgIHJldHVybiBKU09iamVjdDo6cHV0KHRoaXNPYmplY3QsIGxleGljYWxHbG9iYWxPYmpl
Y3QsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHB1dFByb3BlcnR5U2xvdCk7CiAgICAgYXV0byB0aHJv
d1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShsZXhpY2FsR2xvYmFsT2JqZWN0LT52bSgpKTsK
IAogICAgIGlmICghcHJvcGVydHlOYW1lLmlzU3ltYm9sKCkpIHsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lP
dmVycmlkZUJ1aWx0SW5zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeU92ZXJyaWRlQnVpbHRJ
bnMuaAkocmV2aXNpb24gMjc2NTg1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMuaAko
d29ya2luZyBjb3B5KQpAQCAtNjQsNyArNjQsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIEpTQzo6
SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSk7CiAgICAgc3RhdGljIHZv
aWQgYW5hbHl6ZUhlYXAoSlNDZWxsKiwgSlNDOjpIZWFwQW5hbHl6ZXImKTsKIHB1YmxpYzoKLSAg
ICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0
dXJlRmxhZ3MgfCBKU0M6OkdldE93blByb3BlcnR5U2xvdElzSW1wdXJlIHwgSlNDOjpJbnRlcmNl
cHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgSlND
OjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eU5hbWVzIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9w
ZXJ0eVNsb3QgfCBKU0M6OlByb2hpYml0c1Byb3BlcnR5Q2FjaGluZzsKKyAgICBzdGF0aWMgY29u
c3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBK
U0M6OkdldE93blByb3BlcnR5U2xvdElzSW1wdXJlIHwgSlNDOjpJbnRlcmNlcHRzR2V0T3duUHJv
cGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgSlNDOjpPdmVycmlkZXNH
ZXRPd25Qcm9wZXJ0eU5hbWVzIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBK
U0M6Ok92ZXJyaWRlc1B1dCB8IEpTQzo6UHJvaGliaXRzUHJvcGVydHlDYWNoaW5nOwogcHJvdGVj
dGVkOgogICAgIEpTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMoSlND
OjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCYsIFJlZjxUZXN0TmFtZWRTZXR0ZXJXaXRo
TGVnYWN5T3ZlcnJpZGVCdWlsdElucz4mJik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lVbmZvcmdlYWJs
ZVByb3BlcnRpZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lVbmZvcmdlYWJsZVByb3Bl
cnRpZXMuY3BwCShyZXZpc2lvbiAyNzY1ODUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWFibGVQcm9w
ZXJ0aWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMwLDYgKzIzMCw4IEBAIGJvb2wgSlNUZXN0
TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWEKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganND
YXN0PEpTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllcyo+KGNl
bGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsK
IAorICAgIGlmIChVTkxJS0VMWSh0aGlzT2JqZWN0ICE9IHB1dFByb3BlcnR5U2xvdC50aGlzVmFs
dWUoKSkpCisgICAgICAgIHJldHVybiBKU09iamVjdDo6cHV0KHRoaXNPYmplY3QsIGxleGljYWxH
bG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHB1dFByb3BlcnR5U2xvdCk7CiAgICAg
YXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShsZXhpY2FsR2xvYmFsT2JqZWN0
LT52bSgpKTsKIAogICAgIGlmICghcHJvcGVydHlOYW1lLmlzU3ltYm9sKCkpIHsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldp
dGhMZWdhY3lVbmZvcmdlYWJsZVByb3BlcnRpZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5
VW5mb3JnZWFibGVQcm9wZXJ0aWVzLmgJKHJldmlzaW9uIDI3NjU4NSkKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lV
bmZvcmdlYWJsZVByb3BlcnRpZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNjQsNyArNjQsNyBAQCBw
dWJsaWM6CiAgICAgc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6
OlZNJiB2bSk7CiAgICAgc3RhdGljIHZvaWQgYW5hbHl6ZUhlYXAoSlNDZWxsKiwgSlNDOjpIZWFw
QW5hbHl6ZXImKTsKIHB1YmxpYzoKLSAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVj
dHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBKU0M6OkdldE93blByb3BlcnR5U2xv
dElzSW1wdXJlRm9yUHJvcGVydHlBYnNlbmNlIHwgSlNDOjpIYXNTdGF0aWNQcm9wZXJ0eVRhYmxl
IHwgSlNDOjpJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3Ro
SXNOb3RaZXJvIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eU5hbWVzIHwgSlNDOjpPdmVy
cmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBKU0M6OlByb2hpYml0c1Byb3BlcnR5Q2FjaGluZzsK
KyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3Ry
dWN0dXJlRmxhZ3MgfCBKU0M6OkdldE93blByb3BlcnR5U2xvdElzSW1wdXJlRm9yUHJvcGVydHlB
YnNlbmNlIHwgSlNDOjpIYXNTdGF0aWNQcm9wZXJ0eVRhYmxlIHwgSlNDOjpJbnRlcmNlcHRzR2V0
T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgSlNDOjpPdmVy
cmlkZXNHZXRPd25Qcm9wZXJ0eU5hbWVzIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNs
b3QgfCBKU0M6Ok92ZXJyaWRlc1B1dCB8IEpTQzo6UHJvaGliaXRzUHJvcGVydHlDYWNoaW5nOwog
cHJvdGVjdGVkOgogICAgIEpTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJv
cGVydGllcyhKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0JiwgUmVmPFRlc3ROYW1l
ZFNldHRlcldpdGhMZWdhY3lVbmZvcmdlYWJsZVByb3BlcnRpZXM+JiYpOwogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRo
TGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVzQW5kTGVnYWN5T3ZlcnJpZGVCdWlsdElucy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllc0FuZExlZ2FjeU92
ZXJyaWRlQnVpbHRJbnMuY3BwCShyZXZpc2lvbiAyNzY1ODUpCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3Jn
ZWFibGVQcm9wZXJ0aWVzQW5kTGVnYWN5T3ZlcnJpZGVCdWlsdElucy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTIzMCw2ICsyMzAsOCBAQCBib29sIEpTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVu
Zm9yZ2VhCiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3ROYW1lZFNldHRlcldp
dGhMZWdhY3lVbmZvcmdlYWJsZVByb3BlcnRpZXNBbmRMZWdhY3lPdmVycmlkZUJ1aWx0SW5zKj4o
Y2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkp
OwogCisgICAgaWYgKFVOTElLRUxZKHRoaXNPYmplY3QgIT0gcHV0UHJvcGVydHlTbG90LnRoaXNW
YWx1ZSgpKSkKKyAgICAgICAgcmV0dXJuIEpTT2JqZWN0OjpwdXQodGhpc09iamVjdCwgbGV4aWNh
bEdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgcHV0UHJvcGVydHlTbG90KTsKICAg
ICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKGxleGljYWxHbG9iYWxPYmpl
Y3QtPnZtKCkpOwogCiAgICAgaWYgKCFwcm9wZXJ0eU5hbWUuaXNTeW1ib2woKSkgewpJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVy
V2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllc0FuZExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVzQW5kTGVnYWN5
T3ZlcnJpZGVCdWlsdElucy5oCShyZXZpc2lvbiAyNzY1ODUpCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3Jn
ZWFibGVQcm9wZXJ0aWVzQW5kTGVnYWN5T3ZlcnJpZGVCdWlsdElucy5oCSh3b3JraW5nIGNvcHkp
CkBAIC02NCw3ICs2NCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSog
c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKTsKICAgICBzdGF0aWMgdm9pZCBhbmFseXplSGVh
cChKU0NlbGwqLCBKU0M6OkhlYXBBbmFseXplciYpOwogcHVibGljOgotICAgIHN0YXRpYyBjb25z
dGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEpT
Qzo6R2V0T3duUHJvcGVydHlTbG90SXNJbXB1cmUgfCBKU0M6Okhhc1N0YXRpY1Byb3BlcnR5VGFi
bGUgfCBKU0M6OkludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5n
dGhJc05vdFplcm8gfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5TmFtZXMgfCBKU0M6Ok92
ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEpTQzo6UHJvaGliaXRzUHJvcGVydHlDYWNoaW5n
OworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpT
dHJ1Y3R1cmVGbGFncyB8IEpTQzo6R2V0T3duUHJvcGVydHlTbG90SXNJbXB1cmUgfCBKU0M6Okhh
c1N0YXRpY1Byb3BlcnR5VGFibGUgfCBKU0M6OkludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RC
eUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8gfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3Bl
cnR5TmFtZXMgfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEpTQzo6T3ZlcnJp
ZGVzUHV0IHwgSlNDOjpQcm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmc7CiBwcm90ZWN0ZWQ6CiAgICAg
SlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVzQW5kTGVnYWN5
T3ZlcnJpZGVCdWlsdElucyhKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0JiwgUmVm
PFRlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lVbmZvcmdlYWJsZVByb3BlcnRpZXNBbmRMZWdhY3lP
dmVycmlkZUJ1aWx0SW5zPiYmKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdFBsdWdpbkludGVyZmFjZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFBsdWdpbkludGVyZmFj
ZS5jcHAJKHJldmlzaW9uIDI3NjU4NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RQbHVnaW5JbnRlcmZhY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
ODEsNiArMTgxLDggQEAgYm9vbCBKU1Rlc3RQbHVnaW5JbnRlcmZhY2U6OnB1dChKU0NlbGwqIAog
ICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0UGx1Z2luSW50ZXJmYWNlKj4oY2Vs
bCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwog
CisgICAgaWYgKFVOTElLRUxZKHRoaXNPYmplY3QgIT0gcHV0UHJvcGVydHlTbG90LnRoaXNWYWx1
ZSgpKSkKKyAgICAgICAgcmV0dXJuIEpTT2JqZWN0OjpwdXQodGhpc09iamVjdCwgbGV4aWNhbEds
b2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgcHV0UHJvcGVydHlTbG90KTsKICAgICBh
dXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKGxleGljYWxHbG9iYWxPYmplY3Qt
PnZtKCkpOwogCiAgICAgYm9vbCBwdXRSZXN1bHQgPSBmYWxzZTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RQbHVnaW5JbnRlcmZhY2UuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
UGx1Z2luSW50ZXJmYWNlLmgJKHJldmlzaW9uIDI3NjU4NSkKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RQbHVnaW5JbnRlcmZhY2UuaAkod29ya2luZyBj
b3B5KQpAQCAtNjcsNyArNjcsNyBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgdm9pZCBhbmFseXpl
SGVhcChKU0NlbGwqLCBKU0M6OkhlYXBBbmFseXplciYpOwogcHVibGljOgotICAgIHN0YXRpYyBj
b25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8
IEpTQzo6SW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElz
Tm90WmVybyB8IEpTQzo6T3ZlcnJpZGVzR2V0Q2FsbERhdGEgfCBKU0M6Ok92ZXJyaWRlc0dldE93
blByb3BlcnR5U2xvdCB8IEpTQzo6UHJvaGliaXRzUHJvcGVydHlDYWNoaW5nOworICAgIHN0YXRp
YyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFn
cyB8IEpTQzo6SW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0
aElzTm90WmVybyB8IEpTQzo6T3ZlcnJpZGVzR2V0Q2FsbERhdGEgfCBKU0M6Ok92ZXJyaWRlc0dl
dE93blByb3BlcnR5U2xvdCB8IEpTQzo6T3ZlcnJpZGVzUHV0IHwgSlNDOjpQcm9oaWJpdHNQcm9w
ZXJ0eUNhY2hpbmc7CiBwcm90ZWN0ZWQ6CiAgICAgSlNUZXN0UGx1Z2luSW50ZXJmYWNlKEpTQzo6
U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3QmLCBSZWY8VGVzdFBsdWdpbkludGVyZmFjZT4m
Jik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX2FycmF5LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRpbWVfYXJyYXkuaAkocmV2aXNpb24g
Mjc2NTg1KQorKysgU291cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRpbWVfYXJyYXkuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzUsNyArMzUsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIGNsYXNzIFJ1bnRpbWVB
cnJheSBmaW5hbCA6IHB1YmxpYyBKU0FycmF5IHsKIHB1YmxpYzoKICAgICB1c2luZyBCYXNlID0g
SlNBcnJheTsKLSAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0g
QmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVy
cmlkZXNHZXRPd25Qcm9wZXJ0eU5hbWVzIHwgSW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5
SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybzsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2ln
bmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBPdmVycmlkZXNHZXRP
d25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eU5hbWVzIHwgT3ZlcnJpZGVz
UHV0IHwgSW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElz
Tm90WmVybzsKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9IHRy
dWU7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgSlNDOjpTdWJzcGFjZUFjY2Vz
cz4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX29iamVjdC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX29iamVjdC5oCShyZXZpc2lvbiAy
NzY1ODUpCisrKyBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcnVudGltZV9vYmplY3QuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzcsNyArMzcsNyBAQCBFeGNlcHRpb24qIHRocm93UnVudGltZU9iamVjdElu
dmFsaWRBY2NlCiBjbGFzcyBXRUJDT1JFX0VYUE9SVCBSdW50aW1lT2JqZWN0IDogcHVibGljIEpT
Tm9uRmluYWxPYmplY3QgewogcHVibGljOgogICAgIHVzaW5nIEJhc2UgPSBKU05vbkZpbmFsT2Jq
ZWN0OwotICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNl
OjpTdHJ1Y3R1cmVGbGFncyB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRl
c0dldE93blByb3BlcnR5TmFtZXMgfCBPdmVycmlkZXNHZXRDYWxsRGF0YSB8IEdldE93blByb3Bl
cnR5U2xvdE1heUJlV3JvbmdBYm91dERvbnRFbnVtOworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5z
aWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IE92ZXJyaWRlc0dl
dE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5TmFtZXMgfCBPdmVycmlk
ZXNHZXRDYWxsRGF0YSB8IE92ZXJyaWRlc1B1dCB8IEdldE93blByb3BlcnR5U2xvdE1heUJlV3Jv
bmdBYm91dERvbnRFbnVtOwogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0Rlc3RydWN0
aW9uID0gdHJ1ZTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBKU0M6OlN1YnNw
YWNlQWNjZXNzPgpJbmRleDogU291cmNlL1dlYkNvcmUvYnJpZGdlL29iamMvb2JqY19ydW50aW1l
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYnJpZGdlL29iamMvb2JqY19ydW50aW1l
LmgJKHJldmlzaW9uIDI3NjU4NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9vYmpjL29iamNf
cnVudGltZS5oCSh3b3JraW5nIGNvcHkpCkBAIC05MSw3ICs5MSw3IEBAIHByaXZhdGU6CiBjbGFz
cyBPYmpjRmFsbGJhY2tPYmplY3RJbXAgZmluYWwgOiBwdWJsaWMgSlNEZXN0cnVjdGlibGVPYmpl
Y3QgewogcHVibGljOgogICAgIHVzaW5nIEJhc2UgPSBKU0Rlc3RydWN0aWJsZU9iamVjdDsKLSAg
ICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0
dXJlRmxhZ3MgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNHZXRDYWxs
RGF0YTsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFz
ZTo6U3RydWN0dXJlRmxhZ3MgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlk
ZXNHZXRDYWxsRGF0YSB8IE92ZXJyaWRlc1B1dDsKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
bmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlw
ZSwgSlNDOjpTdWJzcGFjZUFjY2Vzcz4KSW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNzY1ODUpCisr
KyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyIEBA
CisyMDIxLTA0LTI2ICBBbGV4ZXkgU2h2YXlrYSAgPHNodmFpa2FsZXNoQGdtYWlsLmNvbT4KKwor
ICAgICAgICBbSlNDXSBPcmRpbmFyeVNldCBzaG91bGQgaW52b2tlIGN1c3RvbSBbW1NldF1dIG1l
dGhvZHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIx
NzkxNgorCisgICAgICAgIFJldmlld2VkIGJ5IFl1c3VrZSBTdXp1a2kuCisKKyAgICAgICAgKiBX
ZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvSlNOUE9iamVjdC5oOgorCiAyMDIxLTA0LTI1ICBE
ZXZpbiBSb3Vzc28gIDxkcm91c3NvQGFwcGxlLmNvbT4KIAogICAgICAgICBBZGQgYEFMV0FZU19M
T0dfV0lUSF9TVFJFQU1gIG1hY3JvIGZvciBlYXNpZXIgZGV2ZWxvcG1lbnQvZGVidWdnaW5nCklu
ZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9KU05QT2JqZWN0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2Nh
cGUvSlNOUE9iamVjdC5oCShyZXZpc2lvbiAyNzY1ODUpCisrKyBTb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9KU05QT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0
LDcgKzQ0LDcgQEAgY2xhc3MgTlBSdW50aW1lT2JqZWN0TWFwOwogY2xhc3MgSlNOUE9iamVjdCBm
aW5hbCA6IHB1YmxpYyBKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0IHsKIHB1YmxpYzoKICAgICB1
c2luZyBCYXNlID0gSlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdDsKLSAgICBzdGF0aWMgY29uc3Rl
eHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBKU0M6
Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVy
dHlOYW1lcyB8IEpTQzo6T3ZlcnJpZGVzR2V0Q2FsbERhdGEgfCBKU0M6OkdldE93blByb3BlcnR5
U2xvdE1heUJlV3JvbmdBYm91dERvbnRFbnVtOworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWdu
ZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEpTQzo6T3ZlcnJpZGVz
R2V0T3duUHJvcGVydHlTbG90IHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eU5hbWVzIHwg
SlNDOjpPdmVycmlkZXNHZXRDYWxsRGF0YSB8IEpTQzo6T3ZlcnJpZGVzUHV0IHwgSlNDOjpHZXRP
d25Qcm9wZXJ0eVNsb3RNYXlCZVdyb25nQWJvdXREb250RW51bTsKIAogICAgIHRlbXBsYXRlPHR5
cGVuYW1lIENlbGxUeXBlLCBKU0M6OlN1YnNwYWNlQWNjZXNzPgogICAgIHN0YXRpYyBKU0M6Oklz
b1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKSW5kZXg6IExheW91dFRlc3RzL0No
YW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDI3
NjU4NSkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsx
LDE1IEBACisyMDIxLTA0LTI2ICBBbGV4ZXkgU2h2YXlrYSAgPHNodmFpa2FsZXNoQGdtYWlsLmNv
bT4KKworICAgICAgICBbSlNDXSBPcmRpbmFyeVNldCBzaG91bGQgaW52b2tlIGN1c3RvbSBbW1Nl
dF1dIG1ldGhvZHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIxNzkxNgorCisgICAgICAgIFJldmlld2VkIGJ5IFl1c3VrZSBTdXp1a2kuCisKKyAgICAg
ICAgKiBodHRwL3Rlc3RzL3NlY3VyaXR5L2Nyb3NzLWZyYW1lLWFjY2Vzcy1vYmplY3QtZ2V0UHJv
dG90eXBlT2YtaW4tcHV0LWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBodHRwL3Rlc3RzL3NlY3Vy
aXR5L2Nyb3NzLWZyYW1lLWFjY2Vzcy1vYmplY3QtZ2V0UHJvdG90eXBlT2YtaW4tcHV0Lmh0bWw6
CisgICAgICAgICoganMvZG9tL3JlZmxlY3Qtc2V0LW9udG8tZG9tLWV4cGVjdGVkLnR4dDoKKyAg
ICAgICAgKiBqcy9kb20vc2NyaXB0LXRlc3RzL3JlZmxlY3Qtc2V0LW9udG8tZG9tLmpzOgorCiAy
MDIxLTA0LTI1ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgogCiAgICAgICAgIFJl
c3luYyBXUFQgc2hhZG93IERPTSB0ZXN0cyBhcyBvZiAwMmYwY2MxMApJbmRleDogTGF5b3V0VGVz
dHMvaHR0cC90ZXN0cy9zZWN1cml0eS9jcm9zcy1mcmFtZS1hY2Nlc3Mtb2JqZWN0LWdldFByb3Rv
dHlwZU9mLWluLXB1dC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0
cC90ZXN0cy9zZWN1cml0eS9jcm9zcy1mcmFtZS1hY2Nlc3Mtb2JqZWN0LWdldFByb3RvdHlwZU9m
LWluLXB1dC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDI3NjU4NSkKKysrIExheW91dFRlc3RzL2h0
dHAvdGVzdHMvc2VjdXJpdHkvY3Jvc3MtZnJhbWUtYWNjZXNzLW9iamVjdC1nZXRQcm90b3R5cGVP
Zi1pbi1wdXQtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNyBAQAogVGhp
cyB0ZXN0cyB0aGF0IHlvdSBjYW4ndCBnZXQgdGhlIHByb3RvdHlwZSBvZiB0aGUgd2luZG93IGR1
cmluZyBbW1B1dF1dIG9wZXJhdGlvbi4KIAorUEFTUyBhcnJheS5jb2NvYSA9IGNvY29hVmFsdWUg
dGhyZXcgZXhjZXB0aW9uIFNlY3VyaXR5RXJyb3I6IEJsb2NrZWQgYSBmcmFtZSB3aXRoIG9yaWdp
biAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiBmcm9tIGFjY2Vzc2luZyBhIGNyb3NzLW9yaWdpbiBm
cmFtZS4gUHJvdG9jb2xzLCBkb21haW5zLCBhbmQgcG9ydHMgbXVzdCBtYXRjaC4uCitQQVNTICdz
dHInLmNvY29hID0gY29jb2FWYWx1ZSB0aHJldyBleGNlcHRpb24gU2VjdXJpdHlFcnJvcjogQmxv
Y2tlZCBhIGZyYW1lIHdpdGggb3JpZ2luICJodHRwOi8vMTI3LjAuMC4xOjgwMDAiIGZyb20gYWNj
ZXNzaW5nIGEgY3Jvc3Mtb3JpZ2luIGZyYW1lLiBQcm90b2NvbHMsIGRvbWFpbnMsIGFuZCBwb3J0
cyBtdXN0IG1hdGNoLi4KIFBBU1M6IHN1Y2Nlc3NmdWxseVBhcnNlZCBzaG91bGQgYmUgJ3RydWUn
IGFuZCBpcy4KIAogVEVTVCBDT01QTEVURQpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9z
ZWN1cml0eS9jcm9zcy1mcmFtZS1hY2Nlc3Mtb2JqZWN0LWdldFByb3RvdHlwZU9mLWluLXB1dC5o
dG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkvY3Jvc3Mt
ZnJhbWUtYWNjZXNzLW9iamVjdC1nZXRQcm90b3R5cGVPZi1pbi1wdXQuaHRtbAkocmV2aXNpb24g
Mjc2NTg1KQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS9jcm9zcy1mcmFtZS1h
Y2Nlc3Mtb2JqZWN0LWdldFByb3RvdHlwZU9mLWluLXB1dC5odG1sCSh3b3JraW5nIGNvcHkpCkBA
IC0xNSw3ICsxNSw3IEBACiAgICAgICAgIGRvVGVzdCA9IGZ1bmN0aW9uKCkKICAgICAgICAgewog
ICAgICAgICAgICAgdGFyZ2V0V2luZG93ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRhcmdl
dCIpLmNvbnRlbnRXaW5kb3c7Ci0gICAgICAgICAgICB2YXIgYXJyYXkgPSBbXTsKKyAgICAgICAg
ICAgIGFycmF5ID0gW107CiAgICAgICAgICAgICBhcnJheS5fX3Byb3RvX18uX19wcm90b19fID0g
dGFyZ2V0V2luZG93OwogICAgICAgICAgICAgYXJyYXlbMF0gPSAxMS4xMTsKICAgICAgICAgICAg
IGFycmF5WzJdID0gMjIuMjI7CkBAIC0yNCwxMSArMjQsMTUgQEAKICAgICAgICAgICAgICAgICAg
ICAgdGVzdEZhaWxlZCgidG9TdHJpbmcgaXMgY2FsbGVkIGJ5IDEwMTAxMDEwIHNldHRlciIpOwog
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH07Ci0gICAgICAgICAgICBhcnJheVsiY29j
b2EiXSA9IHsKKyAgICAgICAgICAgIGNvY29hVmFsdWUgPSB7CiAgICAgICAgICAgICAgICAgdG9T
dHJpbmcoKSB7CiAgICAgICAgICAgICAgICAgICAgIHRlc3RGYWlsZWQoInRvU3RyaW5nIGlzIGNh
bGxlZCBieSBjb2NvYSBzZXR0ZXIiKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9
OworICAgICAgICAgICAgc2hvdWxkVGhyb3dFcnJvck5hbWUoImFycmF5LmNvY29hID0gY29jb2FW
YWx1ZSIsICJTZWN1cml0eUVycm9yIik7CisKKyAgICAgICAgICAgIE9iamVjdC5zZXRQcm90b3R5
cGVPZihTdHJpbmcucHJvdG90eXBlLCB0YXJnZXRXaW5kb3cpOworICAgICAgICAgICAgc2hvdWxk
VGhyb3dFcnJvck5hbWUoIidzdHInLmNvY29hID0gY29jb2FWYWx1ZSIsICJTZWN1cml0eUVycm9y
Iik7CiAgICAgICAgICAgICBmaW5pc2hKU1Rlc3QoKTsKICAgICAgICAgfQogICAgIDwvc2NyaXB0
PgpJbmRleDogTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL0NoYW5nZUxvZwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9pbXBvcnRlZC93M2MvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNzY1ODUpCisr
KyBMYXlvdXRUZXN0cy9pbXBvcnRlZC93M2MvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDMgKzEsMTUgQEAKKzIwMjEtMDQtMjYgIEFsZXhleSBTaHZheWthICA8c2h2YWlrYWxlc2hAZ21h
aWwuY29tPgorCisgICAgICAgIFtKU0NdIE9yZGluYXJ5U2V0IHNob3VsZCBpbnZva2UgY3VzdG9t
IFtbU2V0XV0gbWV0aG9kcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjE3OTE2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgWXVzdWtlIFN1enVraS4KKwor
ICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9XZWJJREwvZWNtYXNjcmlwdC1iaW5kaW5nL2lu
dGVyZmFjZS1vYmplY3Qtc2V0LXJlY2VpdmVyLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAg
ICogd2ViLXBsYXRmb3JtLXRlc3RzL1dlYklETC9lY21hc2NyaXB0LWJpbmRpbmcvaW50ZXJmYWNl
LW9iamVjdC1zZXQtcmVjZWl2ZXIuaHRtbDogQWRkZWQuCisgICAgICAgICogd2ViLXBsYXRmb3Jt
LXRlc3RzL1dlYklETC9lY21hc2NyaXB0LWJpbmRpbmcvaW50ZXJmYWNlLXByb3RvdHlwZS1jb25z
dHJ1Y3Rvci1zZXQtcmVjZWl2ZXItZXhwZWN0ZWQudHh0OgorICAgICAgICAqIHdlYi1wbGF0Zm9y
bS10ZXN0cy9XZWJJREwvZWNtYXNjcmlwdC1iaW5kaW5nL2ludGVyZmFjZS1wcm90b3R5cGUtY29u
c3RydWN0b3Itc2V0LXJlY2VpdmVyLmh0bWw6CisKIDIwMjEtMDQtMjYgIFJ5b3N1a2UgTml3YSAg
PHJuaXdhQHdlYmtpdC5vcmc+CiAKICAgICAgICAgSW1wbGVtZW50IFNoYWRvd1Jvb3QucHJvdG90
eXBlLmRlbGVnYXRlc0ZvY3VzIGF0dHJpYnV0ZQpJbmRleDogTGF5b3V0VGVzdHMvaW1wb3J0ZWQv
dzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9XZWJJREwvZWNtYXNjcmlwdC1iaW5kaW5nL2ludGVyZmFj
ZS1vYmplY3Qtc2V0LXJlY2VpdmVyLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL1dlYklETC9lY21hc2NyaXB0LWJp
bmRpbmcvaW50ZXJmYWNlLW9iamVjdC1zZXQtcmVjZWl2ZXItZXhwZWN0ZWQudHh0CShub25leGlz
dGVudCkKKysrIExheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvV2Vi
SURML2VjbWFzY3JpcHQtYmluZGluZy9pbnRlcmZhY2Utb2JqZWN0LXNldC1yZWNlaXZlci1leHBl
Y3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0IEBACisKK1BBU1MgRGlyZWN0IFtb
U2V0XV0gcHJlc2VydmVzIFtbRW51bWVyYWJsZV1dOiBmYWxzZSBwcm9wZXJ0eSBhdHRyaWJ1dGUK
K1BBU1MgUHJvdG90eXBlIGNoYWluIFtbU2V0XV0gY3JlYXRlcyBwcm9wZXJ0eSBvbiByZWNlaXZl
cgorCkluZGV4OiBMYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL1dl
YklETC9lY21hc2NyaXB0LWJpbmRpbmcvaW50ZXJmYWNlLW9iamVjdC1zZXQtcmVjZWl2ZXIuaHRt
bAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRl
c3RzL1dlYklETC9lY21hc2NyaXB0LWJpbmRpbmcvaW50ZXJmYWNlLW9iamVjdC1zZXQtcmVjZWl2
ZXIuaHRtbAkobm9uZXhpc3RlbnQpCisrKyBMYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBs
YXRmb3JtLXRlc3RzL1dlYklETC9lY21hc2NyaXB0LWJpbmRpbmcvaW50ZXJmYWNlLW9iamVjdC1z
ZXQtcmVjZWl2ZXIuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM3IEBACis8IURPQ1RZ
UEUgaHRtbD4KKzxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KKzx0aXRsZT53aW5kb3cuSW50ZXJmYWNl
IGlzIGRlZmluZWQgb24gW1tTZXRdXSByZWNlaXZlcjwvdGl0bGU+Cis8bGluayByZWw9ImhlbHAi
IGhyZWY9Imh0dHBzOi8vaGV5Y2FtLmdpdGh1Yi5pby93ZWJpZGwvI2RlZmluZS10aGUtZ2xvYmFs
LXByb3BlcnR5LXJlZmVyZW5jZXMiPgorPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvdGVzdGhhcm5l
c3MuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvdGVzdGhhcm5lc3NyZXBv
cnQuanMiPjwvc2NyaXB0PgorPHNjcmlwdD4KKyJ1c2Ugc3RyaWN0IjsKK2NvbnN0IHRlc3RWYWx1
ZSA9IE9iamVjdC5mcmVlemUoZnVuY3Rpb24oKSB7fSk7CisKK3Rlc3QoKCkgPT4geworICB3aW5k
b3cuV2luZG93ID0gdGVzdFZhbHVlOworICBhc3NlcnRfZmFsc2Uod2luZG93LnByb3BlcnR5SXNF
bnVtZXJhYmxlKCJXaW5kb3ciKSk7CisKKyAgd2luZG93Lkhpc3RvcnkgPSB0ZXN0VmFsdWU7Cisg
IGFzc2VydF9mYWxzZSh3aW5kb3cucHJvcGVydHlJc0VudW1lcmFibGUoIkhpc3RvcnkiKSk7CisK
KyAgd2luZG93LkhUTUxEaXZFbGVtZW50ID0gdGVzdFZhbHVlOworICBhc3NlcnRfZmFsc2Uod2lu
ZG93LnByb3BlcnR5SXNFbnVtZXJhYmxlKCJIVE1MRGl2RWxlbWVudCIpKQorfSwgIkRpcmVjdCBb
W1NldF1dIHByZXNlcnZlcyBbW0VudW1lcmFibGVdXTogZmFsc2UgcHJvcGVydHkgYXR0cmlidXRl
Iik7CisKK3Rlc3QoKCkgPT4geworICBjb25zdCBoZWlyID0gT2JqZWN0LmNyZWF0ZSh3aW5kb3cp
OworCisgIGhlaXIuTG9jYXRpb24gPSB0ZXN0VmFsdWU7CisgIGFzc2VydF9lcXVhbHMoaGVpci5M
b2NhdGlvbiwgdGVzdFZhbHVlKTsKKyAgYXNzZXJ0X25vdF9lcXVhbHMod2luZG93LkxvY2F0aW9u
LCB0ZXN0VmFsdWUpOworCisgIGhlaXIuSFRNTERvY3VtZW50ID0gdGVzdFZhbHVlOworICBhc3Nl
cnRfZXF1YWxzKGhlaXIuSFRNTERvY3VtZW50LCB0ZXN0VmFsdWUpOworICBhc3NlcnRfbm90X2Vx
dWFscyh3aW5kb3cuSFRNTERvY3VtZW50LCB0ZXN0VmFsdWUpOworCisgIGhlaXIuSFRNTFByZUVs
ZW1lbnQgPSB0ZXN0VmFsdWU7CisgIGFzc2VydF9lcXVhbHMoaGVpci5IVE1MUHJlRWxlbWVudCwg
dGVzdFZhbHVlKTsKKyAgYXNzZXJ0X25vdF9lcXVhbHMod2luZG93LkhUTUxQcmVFbGVtZW50LCB0
ZXN0VmFsdWUpOworfSwgIlByb3RvdHlwZSBjaGFpbiBbW1NldF1dIGNyZWF0ZXMgcHJvcGVydHkg
b24gcmVjZWl2ZXIiKTsKKzwvc2NyaXB0PgpJbmRleDogTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNj
L3dlYi1wbGF0Zm9ybS10ZXN0cy9XZWJJREwvZWNtYXNjcmlwdC1iaW5kaW5nL2ludGVyZmFjZS1w
cm90b3R5cGUtY29uc3RydWN0b3Itc2V0LXJlY2VpdmVyLWV4cGVjdGVkLnR4dAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL1dlYklETC9l
Y21hc2NyaXB0LWJpbmRpbmcvaW50ZXJmYWNlLXByb3RvdHlwZS1jb25zdHJ1Y3Rvci1zZXQtcmVj
ZWl2ZXItZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAyNzY1ODUpCisrKyBMYXlvdXRUZXN0cy9pbXBv
cnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL1dlYklETC9lY21hc2NyaXB0LWJpbmRpbmcvaW50
ZXJmYWNlLXByb3RvdHlwZS1jb25zdHJ1Y3Rvci1zZXQtcmVjZWl2ZXItZXhwZWN0ZWQudHh0CSh3
b3JraW5nIGNvcHkpCkBAIC0xLDQgKzEsNCBAQAogCi1QQVNTIFdpbmRvdywgTG9jYXRpb24sIE5h
dmlnYXRvciwgSFRNTERvY3VtZW50LCBhbmQgSFRNTEhlYWRFbGVtZW50Ci1QQVNTIEFsbCB3aW5k
b3cuKiBjb25zdHJ1Y3RvcnMKK1BBU1MgRGlyZWN0IFtbU2V0XV0gcHJlc2VydmVzIFtbRW51bWVy
YWJsZV1dOiBmYWxzZSBwcm9wZXJ0eSBhdHRyaWJ1dGUKK1BBU1MgUHJvdG90eXBlIGNoYWluIFtb
U2V0XV0gY3JlYXRlcyBwcm9wZXJ0eSBvbiByZWNlaXZlcgogCkluZGV4OiBMYXlvdXRUZXN0cy9p
bXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL1dlYklETC9lY21hc2NyaXB0LWJpbmRpbmcv
aW50ZXJmYWNlLXByb3RvdHlwZS1jb25zdHJ1Y3Rvci1zZXQtcmVjZWl2ZXIuaHRtbAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL1dlYklE
TC9lY21hc2NyaXB0LWJpbmRpbmcvaW50ZXJmYWNlLXByb3RvdHlwZS1jb25zdHJ1Y3Rvci1zZXQt
cmVjZWl2ZXIuaHRtbAkocmV2aXNpb24gMjc2NTg1KQorKysgTGF5b3V0VGVzdHMvaW1wb3J0ZWQv
dzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9XZWJJREwvZWNtYXNjcmlwdC1iaW5kaW5nL2ludGVyZmFj
ZS1wcm90b3R5cGUtY29uc3RydWN0b3Itc2V0LXJlY2VpdmVyLmh0bWwJKHdvcmtpbmcgY29weSkK
QEAgLTYsNDIgKzYsMzEgQEAKIDxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVw
b3J0LmpzIj48L3NjcmlwdD4KIDxzY3JpcHQ+CiAidXNlIHN0cmljdCI7Citjb25zdCB0ZXN0VmFs
dWUgPSBPYmplY3QuZnJlZXplKGZ1bmN0aW9uKCkge30pOwogCiB0ZXN0KCgpID0+IHsKLSAgd2lu
ZG93LmNvbnN0cnVjdG9yID0gbnVsbDsKLSAgYXNzZXJ0X2VxdWFscyhXaW5kb3cucHJvdG90eXBl
LmNvbnN0cnVjdG9yLCBXaW5kb3cpOwotCi0gIGxvY2F0aW9uLmNvbnN0cnVjdG9yID0gZmFsc2U7
Ci0gIGFzc2VydF9lcXVhbHMoTG9jYXRpb24ucHJvdG90eXBlLmNvbnN0cnVjdG9yLCBMb2NhdGlv
bik7Ci0KLSAgbmF2aWdhdG9yLmNvbnN0cnVjdG9yID0gMTsKLSAgYXNzZXJ0X2VxdWFscyhOYXZp
Z2F0b3IucHJvdG90eXBlLmNvbnN0cnVjdG9yLCBOYXZpZ2F0b3IpOworICBMb2NhdGlvbi5wcm90
b3R5cGUuY29uc3RydWN0b3IgPSB0ZXN0VmFsdWU7CisgIGFzc2VydF9mYWxzZShMb2NhdGlvbi5w
cm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUoImNvbnN0cnVjdG9yIikpOwogCi0gIGRvY3Vt
ZW50LmNvbnN0cnVjdG9yID0ge307Ci0gIGFzc2VydF9lcXVhbHMoSFRNTERvY3VtZW50LnByb3Rv
dHlwZS5jb25zdHJ1Y3RvciwgSFRNTERvY3VtZW50KTsKKyAgSFRNTERvY3VtZW50LnByb3RvdHlw
ZS5jb25zdHJ1Y3RvciA9IHRlc3RWYWx1ZTsKKyAgYXNzZXJ0X2ZhbHNlKEhUTUxEb2N1bWVudC5w
cm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUoImNvbnN0cnVjdG9yIikpOwogCi0gIGRvY3Vt
ZW50LmhlYWQuY29uc3RydWN0b3IgPSBbXTsKLSAgYXNzZXJ0X2VxdWFscyhIVE1MSGVhZEVsZW1l
bnQucHJvdG90eXBlLmNvbnN0cnVjdG9yLCBIVE1MSGVhZEVsZW1lbnQpOwotfSwgIldpbmRvdywg
TG9jYXRpb24sIE5hdmlnYXRvciwgSFRNTERvY3VtZW50LCBhbmQgSFRNTEhlYWRFbGVtZW50Iik7
CisgIEhUTUxEaXZFbGVtZW50LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IHRlc3RWYWx1ZTsKKyAg
YXNzZXJ0X2ZhbHNlKEhUTUxEaXZFbGVtZW50LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJs
ZSgiY29uc3RydWN0b3IiKSk7Cit9LCAiRGlyZWN0IFtbU2V0XV0gcHJlc2VydmVzIFtbRW51bWVy
YWJsZV1dOiBmYWxzZSBwcm9wZXJ0eSBhdHRyaWJ1dGUiKTsKIAogdGVzdCgoKSA9PiB7Ci0gIGZv
ciAobGV0IGtleSBvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh3aW5kb3cpKSB7Ci0gICAg
aWYgKCEvXltBLVpdLy50ZXN0KGtleSkpIGNvbnRpbnVlOworICB3aW5kb3cuY29uc3RydWN0b3Ig
PSB0ZXN0VmFsdWU7CisgIGFzc2VydF9lcXVhbHMod2luZG93LmNvbnN0cnVjdG9yLCB0ZXN0VmFs
dWUpOworICBhc3NlcnRfZXF1YWxzKFdpbmRvdy5wcm90b3R5cGUuY29uc3RydWN0b3IsIFdpbmRv
dyk7CisKKyAgbmF2aWdhdG9yLmNvbnN0cnVjdG9yID0gdGVzdFZhbHVlOworICBhc3NlcnRfZXF1
YWxzKG5hdmlnYXRvci5jb25zdHJ1Y3RvciwgdGVzdFZhbHVlKTsKKyAgYXNzZXJ0X2VxdWFscyhO
YXZpZ2F0b3IucHJvdG90eXBlLmNvbnN0cnVjdG9yLCBOYXZpZ2F0b3IpOwogCi0gICAgbGV0IGRl
c2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHdpbmRvdywga2V5KTsKLSAgICBp
ZiAoIWRlc2MgfHwgZGVzYy5lbnVtZXJhYmxlKSBjb250aW51ZTsKLSAgICBsZXQge3ZhbHVlfSA9
IGRlc2M7Ci0gICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gImZ1bmN0aW9uIikgY29udGludWU7Ci0g
ICAgbGV0IHtwcm90b3R5cGV9ID0gdmFsdWU7Ci0gICAgaWYgKCFwcm90b3R5cGUpIGNvbnRpbnVl
OwotCi0gICAgbGV0IGhlaXIgPSBPYmplY3QuY3JlYXRlKHByb3RvdHlwZSk7Ci0gICAgbGV0IG5l
d0NvbnN0cnVjdG9yID0gZnVuY3Rpb24oKSB7fTsKLSAgICBoZWlyLmNvbnN0cnVjdG9yID0gbmV3
Q29uc3RydWN0b3I7Ci0KLSAgICBhc3NlcnRfbm90X2VxdWFscyhwcm90b3R5cGUuY29uc3RydWN0
b3IsIG5ld0NvbnN0cnVjdG9yLCBrZXkpOwotICAgIGFzc2VydF9vd25fcHJvcGVydHkoaGVpciwg
ImNvbnN0cnVjdG9yIiwga2V5KTsKLSAgICBhc3NlcnRfZXF1YWxzKGhlaXIuY29uc3RydWN0b3Is
IG5ld0NvbnN0cnVjdG9yLCBrZXkpOwotICB9Ci19LCAiQWxsIHdpbmRvdy4qIGNvbnN0cnVjdG9y
cyIpOworICBjb25zdCBzcGFuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpOworICBz
cGFuLmNvbnN0cnVjdG9yID0gdGVzdFZhbHVlOworICBhc3NlcnRfZXF1YWxzKHNwYW4uY29uc3Ry
dWN0b3IsIHRlc3RWYWx1ZSk7CisgIGFzc2VydF9lcXVhbHMoSFRNTFNwYW5FbGVtZW50LnByb3Rv
dHlwZS5jb25zdHJ1Y3RvciwgSFRNTFNwYW5FbGVtZW50KTsKK30sICJQcm90b3R5cGUgY2hhaW4g
W1tTZXRdXSBjcmVhdGVzIHByb3BlcnR5IG9uIHJlY2VpdmVyIik7CiA8L3NjcmlwdD4KSW5kZXg6
IExheW91dFRlc3RzL2pzL2RvbS9yZWZsZWN0LXNldC1vbnRvLWRvbS1leHBlY3RlZC50eHQKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvZG9tL3JlZmxlY3Qtc2V0LW9udG8tZG9tLWV4cGVj
dGVkLnR4dAkocmV2aXNpb24gMjc2NTg1KQorKysgTGF5b3V0VGVzdHMvanMvZG9tL3JlZmxlY3Qt
c2V0LW9udG8tZG9tLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtOTMsMTMgKzkzLDEz
IEBAIFBBU1MgUmVmbGVjdC5nZXQoZG9jdW1lbnQuYm9keS5kYXRhc2V0LCAKIFBBU1MgUmVmbGVj
dC5zZXQoZG9jdW1lbnQuYm9keS5kYXRhc2V0LCAiY29jb2EtY2FwcHVjY2lubyIsICJzd2VldCIp
IHRocmV3IGV4Y2VwdGlvbiBTeW50YXhFcnJvcjogVGhlIHN0cmluZyBkaWQgbm90IG1hdGNoIHRo
ZSBleHBlY3RlZCBwYXR0ZXJuLi4KIFBBU1MgUmVmbGVjdC5zZXQoZG9jdW1lbnQuYm9keS5kYXRh
c2V0LCAwLCAic3dlZXQiKSBpcyB0cnVlCiBQQVNTIFJlZmxlY3QuZ2V0KGRvY3VtZW50LmJvZHku
ZGF0YXNldCwgMCkgaXMgInN3ZWV0IgotRE9NU3RyaW5nTWFwIGlnbm9yZXMgdGhlIHJlY2VpdmVy
LiBUaGVzZSBwdXREZWxlZ2F0ZSBvbmx5IHdvcmsgd2l0aCA6OnB1dCAobm90IDo6ZGVmaW5lT3du
UHJvcGVydHkpLiBTbyB0aGV5IGJlaGF2ZSBhcyB0aGUgc3BlY2lhbCBzZXR0ZXIsIHdlIHNob3Vs
ZCBub3QgZmFsbGJhY2sgdG8gdGhlIE9yZGluYXJ5U2V0LgorRE9NU3RyaW5nTWFwIGZhbGxzIGJh
Y2sgdG8gT3JkaW5hcnlTZXQgaWYgcmVjZWl2ZXIgaXMgYWx0ZXJlZC4KIFBBU1MgUmVmbGVjdC5z
ZXQoZG9jdW1lbnQuYm9keS5kYXRhc2V0LCAiY29jb2EiLCAib2siLCByZWNlaXZlcikgaXMgdHJ1
ZQotUEFTUyBSZWZsZWN0LmdldChkb2N1bWVudC5ib2R5LmRhdGFzZXQsICJjb2NvYSIpIGlzICJv
ayIKLVBBU1MgUmVmbGVjdC5nZXQocmVjZWl2ZXIsICJjb2NvYSIpIGlzIHVuZGVmaW5lZAorUEFT
UyBSZWZsZWN0LmdldChkb2N1bWVudC5ib2R5LmRhdGFzZXQsICJjb2NvYSIpIGlzICJzd2VldCIK
K1BBU1MgUmVmbGVjdC5nZXQocmVjZWl2ZXIsICJjb2NvYSIpIGlzICJvayIKIFBBU1MgUmVmbGVj
dC5zZXQoZG9jdW1lbnQuYm9keS5kYXRhc2V0LCAwLCAib2siLCByZWNlaXZlcikgaXMgdHJ1ZQot
UEFTUyBSZWZsZWN0LmdldChkb2N1bWVudC5ib2R5LmRhdGFzZXQsIDApIGlzICJvayIKLVBBU1Mg
UmVmbGVjdC5nZXQocmVjZWl2ZXIsIDApIGlzIHVuZGVmaW5lZAorUEFTUyBSZWZsZWN0LmdldChk
b2N1bWVudC5ib2R5LmRhdGFzZXQsIDApIGlzICJzd2VldCIKK1BBU1MgUmVmbGVjdC5nZXQocmVj
ZWl2ZXIsIDApIGlzICJvayIKIEN1c3RvbUluZGV4ZWRTZXR0ZXIKIFBBU1MgUmVmbGVjdC5nZXQo
c2VsZWN0LCAwKS52YWx1ZSBpcyAiY29jb2EiCiBQQVNTIFJlZmxlY3QuZ2V0KHNlbGVjdCwgImxl
bmd0aCIpIGlzIDMKQEAgLTExMSwxMCArMTExLDEwIEBAIFBBU1MgUmVmbGVjdC5nZXQoc2VsZWN0
LCAibGVuZ3RoIikgaXMgNDIKIFBBU1MgUmVmbGVjdC5zZXQoc2VsZWN0LCA0NCwgb3B0aW9uMikg
aXMgdHJ1ZQogUEFTUyBSZWZsZWN0LmdldChzZWxlY3QsIDQ0KS52YWx1ZSBpcyAia2lsaW1hbmph
cm8iCiBQQVNTIFJlZmxlY3Quc2V0KHNlbGVjdCwgMjAsICJLaWxpbWFuamFybyIpIHRocmV3IGV4
Y2VwdGlvbiBUeXBlRXJyb3I6IFR5cGUgZXJyb3IuCi1DdXN0b21JbmRleGVkU2V0dGVyIGlnbm9y
ZXMgdGhlIHJlY2VpdmVyLiBUaGVzZSBtZXRob2RzIG9ubHkgd29yayB3aXRoIDo6cHV0IChub3Qg
OjpkZWZpbmVPd25Qcm9wZXJ0eSkuIFNvIHRoZXkgYmVoYXZlIGFzIHRoZSBzcGVjaWFsIHNldHRl
ciwgd2Ugc2hvdWxkIG5vdCBmYWxsYmFjayB0byB0aGUgT3JkaW5hcnlTZXQuCitDdXN0b21JbmRl
eGVkU2V0dGVyIGZhbGxzIGJhY2sgdG8gT3JkaW5hcnlTZXQgaWYgcmVjZWl2ZXIgaXMgYWx0ZXJl
ZC4KIFBBU1MgUmVmbGVjdC5zZXQoc2VsZWN0LCAwLCBvcHRpb24zLCByZWNlaXZlcikgaXMgdHJ1
ZQotUEFTUyBSZWZsZWN0LmdldChyZWNlaXZlciwgMCkgaXMgdW5kZWZpbmVkCi1QQVNTIFJlZmxl
Y3QuZ2V0KHNlbGVjdCwgMCkgaXMgb3B0aW9uMworUEFTUyBSZWZsZWN0LmdldChyZWNlaXZlciwg
MCkgaXMgb3B0aW9uMworUEFTUyBSZWZsZWN0LmdldChzZWxlY3QsIDApIGlzIHNlbGVjdC5jaGls
ZHJlblswXQogUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQogCiBURVNUIENPTVBMRVRF
CkluZGV4OiBMYXlvdXRUZXN0cy9qcy9kb20vc2NyaXB0LXRlc3RzL3JlZmxlY3Qtc2V0LW9udG8t
ZG9tLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL2RvbS9zY3JpcHQtdGVzdHMvcmVm
bGVjdC1zZXQtb250by1kb20uanMJKHJldmlzaW9uIDI3NjU4NSkKKysrIExheW91dFRlc3RzL2pz
L2RvbS9zY3JpcHQtdGVzdHMvcmVmbGVjdC1zZXQtb250by1kb20uanMJKHdvcmtpbmcgY29weSkK
QEAgLTExNiwxNSArMTE2LDE1IEBAIHNob3VsZFRocm93KGBSZWZsZWN0LnNldChkb2N1bWVudC5i
b2R5LmQKIHNob3VsZEJlKGBSZWZsZWN0LnNldChkb2N1bWVudC5ib2R5LmRhdGFzZXQsIDAsICJz
d2VldCIpYCwgYHRydWVgKTsKIHNob3VsZEJlKGBSZWZsZWN0LmdldChkb2N1bWVudC5ib2R5LmRh
dGFzZXQsIDApYCwgYCJzd2VldCJgKTsKIAotZGVidWcoIkRPTVN0cmluZ01hcCBpZ25vcmVzIHRo
ZSByZWNlaXZlci4gVGhlc2UgcHV0RGVsZWdhdGUgb25seSB3b3JrIHdpdGggOjpwdXQgKG5vdCA6
OmRlZmluZU93blByb3BlcnR5KS4gU28gdGhleSBiZWhhdmUgYXMgdGhlIHNwZWNpYWwgc2V0dGVy
LCB3ZSBzaG91bGQgbm90IGZhbGxiYWNrIHRvIHRoZSBPcmRpbmFyeVNldC4iKTsKK2RlYnVnKCJE
T01TdHJpbmdNYXAgZmFsbHMgYmFjayB0byBPcmRpbmFyeVNldCBpZiByZWNlaXZlciBpcyBhbHRl
cmVkLiIpOwogdmFyIHJlY2VpdmVyID0ge307CiBzaG91bGRCZShgUmVmbGVjdC5zZXQoZG9jdW1l
bnQuYm9keS5kYXRhc2V0LCAiY29jb2EiLCAib2siLCByZWNlaXZlcilgLCBgdHJ1ZWApOwotc2hv
dWxkQmUoYFJlZmxlY3QuZ2V0KGRvY3VtZW50LmJvZHkuZGF0YXNldCwgImNvY29hIilgLCBgIm9r
ImApOwotc2hvdWxkQmUoYFJlZmxlY3QuZ2V0KHJlY2VpdmVyLCAiY29jb2EiKWAsIGB1bmRlZmlu
ZWRgKTsKK3Nob3VsZEJlKGBSZWZsZWN0LmdldChkb2N1bWVudC5ib2R5LmRhdGFzZXQsICJjb2Nv
YSIpYCwgYCJzd2VldCJgKTsKK3Nob3VsZEJlKGBSZWZsZWN0LmdldChyZWNlaXZlciwgImNvY29h
IilgLCBgIm9rImApOwogdmFyIHJlY2VpdmVyID0ge307CiBzaG91bGRCZShgUmVmbGVjdC5zZXQo
ZG9jdW1lbnQuYm9keS5kYXRhc2V0LCAwLCAib2siLCByZWNlaXZlcilgLCBgdHJ1ZWApOwotc2hv
dWxkQmUoYFJlZmxlY3QuZ2V0KGRvY3VtZW50LmJvZHkuZGF0YXNldCwgMClgLCBgIm9rImApOwot
c2hvdWxkQmUoYFJlZmxlY3QuZ2V0KHJlY2VpdmVyLCAwKWAsIGB1bmRlZmluZWRgKTsKK3Nob3Vs
ZEJlKGBSZWZsZWN0LmdldChkb2N1bWVudC5ib2R5LmRhdGFzZXQsIDApYCwgYCJzd2VldCJgKTsK
K3Nob3VsZEJlKGBSZWZsZWN0LmdldChyZWNlaXZlciwgMClgLCBgIm9rImApOwogCiBkZWJ1Zygi
Q3VzdG9tSW5kZXhlZFNldHRlciIpOwogdmFyIHNlbGVjdCA9IGRvY3VtZW50LmdldEVsZW1lbnRC
eUlkKCJ0ZXN0U2VsZWN0Iik7CkBAIC0xNDYsMTEgKzE0NiwxMSBAQCBzaG91bGRCZShgUmVmbGVj
dC5zZXQoc2VsZWN0LCA0NCwgb3B0aW9uCiBzaG91bGRCZShgUmVmbGVjdC5nZXQoc2VsZWN0LCA0
NCkudmFsdWVgLCBgImtpbGltYW5qYXJvImApOwogc2hvdWxkVGhyb3coYFJlZmxlY3Quc2V0KHNl
bGVjdCwgMjAsICJLaWxpbWFuamFybyIpYCk7CiAKLWRlYnVnKCJDdXN0b21JbmRleGVkU2V0dGVy
IGlnbm9yZXMgdGhlIHJlY2VpdmVyLiBUaGVzZSBtZXRob2RzIG9ubHkgd29yayB3aXRoIDo6cHV0
IChub3QgOjpkZWZpbmVPd25Qcm9wZXJ0eSkuIFNvIHRoZXkgYmVoYXZlIGFzIHRoZSBzcGVjaWFs
IHNldHRlciwgd2Ugc2hvdWxkIG5vdCBmYWxsYmFjayB0byB0aGUgT3JkaW5hcnlTZXQuIik7Citk
ZWJ1ZygiQ3VzdG9tSW5kZXhlZFNldHRlciBmYWxscyBiYWNrIHRvIE9yZGluYXJ5U2V0IGlmIHJl
Y2VpdmVyIGlzIGFsdGVyZWQuIik7CiB2YXIgb3B0aW9uMyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1l
bnQoIm9wdGlvbiIpOwogb3B0aW9uMy52YWx1ZSA9ICJyYWJiaXQiOwogb3B0aW9uMy50ZXh0Q29u
dGVudCA9ICJSYWJiaXQiOwogdmFyIHJlY2VpdmVyID0ge307CiBzaG91bGRCZShgUmVmbGVjdC5z
ZXQoc2VsZWN0LCAwLCBvcHRpb24zLCByZWNlaXZlcilgLCBgdHJ1ZWApOwotc2hvdWxkQmUoYFJl
ZmxlY3QuZ2V0KHJlY2VpdmVyLCAwKWAsIGB1bmRlZmluZWRgKTsKLXNob3VsZEJlKGBSZWZsZWN0
LmdldChzZWxlY3QsIDApYCwgYG9wdGlvbjNgKTsKK3Nob3VsZEJlKGBSZWZsZWN0LmdldChyZWNl
aXZlciwgMClgLCBgb3B0aW9uM2ApOworc2hvdWxkQmUoYFJlZmxlY3QuZ2V0KHNlbGVjdCwgMClg
LCBgc2VsZWN0LmNoaWxkcmVuWzBdYCk7Cg==
</data>
<flag name="review"
          id="447523"
          type_id="1"
          status="+"
          setter="ashvayka"
    />
    <flag name="commit-queue"
          id="447513"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
      

    </bug>

</bugzilla>