<?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>161674</bug_id>
          
          <creation_ts>2016-09-06 20:58:28 -0700</creation_ts>
          <short_desc>Introduce abstract class LoadableScript for classic script and module graph</short_desc>
          <delta_ts>2016-09-07 23:01:11 -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>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>148897</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Yusuke Suzuki">ysuzuki</reporter>
          <assigned_to name="Yusuke Suzuki">ysuzuki</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>rniwa</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1227037</commentid>
    <comment_count>0</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2016-09-06 20:58:28 -0700</bug_when>
    <thetext>Introduce abstract class LoadableScript for classic script and module graph</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1227038</commentid>
    <comment_count>1</comment_count>
      <attachid>288095</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2016-09-06 21:01:23 -0700</bug_when>
    <thetext>Created attachment 288095
Patch

WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1227091</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-09-07 00:34:45 -0700</bug_when>
    <thetext>Attachment 288095 did not pass style-queue:


ERROR: Source/WebCore/dom/LoadableClassicScript.cpp:81:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/WebCore/dom/LoadableClassicScript.cpp:93:  This { should be at the end of the previous line  [whitespace/braces] [4]
Total errors found: 2 in 16 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1227105</commentid>
    <comment_count>3</comment_count>
      <attachid>288121</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2016-09-07 01:29:30 -0700</bug_when>
    <thetext>Created attachment 288121
Patch

WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1227378</commentid>
    <comment_count>4</comment_count>
      <attachid>288193</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2016-09-07 15:24:38 -0700</bug_when>
    <thetext>Created attachment 288193
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1227380</commentid>
    <comment_count>5</comment_count>
      <attachid>288193</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2016-09-07 15:43:37 -0700</bug_when>
    <thetext>Comment on attachment 288193
Patch

I&apos;ll introduce a little bit change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1227382</commentid>
    <comment_count>6</comment_count>
      <attachid>288196</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2016-09-07 15:49:56 -0700</bug_when>
    <thetext>Created attachment 288196
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1227409</commentid>
    <comment_count>7</comment_count>
      <attachid>288196</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2016-09-07 16:46:45 -0700</bug_when>
    <thetext>Comment on attachment 288196
Patch

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

&gt; Source/WebCore/dom/LoadableClassicScript.cpp:39
&gt; +    if (!cachedScript)
&gt; +        return nullptr;

create function typically doesn&apos;t return nullptr.
Why don&apos;t we check this in the caller instead?
That way, this function can return Ref&lt;LoadableClassicScript&gt; like other create functions.

&gt; Source/WebCore/dom/LoadableClassicScript.cpp:99
&gt; +                makeString(&quot;Refused to execute script from &apos;&quot;, m_cachedScript-&gt;url().stringCenterEllipsizedToLength(), &quot;&apos; because its MIME type (&apos;&quot;, m_cachedScript-&gt;mimeType(), &quot;&apos;) is not executable, and strict MIME type checking is enabled.&quot;)

This line is really long.
Can we break the line somewhere?

&gt; Source/WebCore/dom/LoadableClassicScript.h:40
&gt; +// A CachedResourceHandle alone does not prevent the underlying CachedResource
&gt; +// from purging its data buffer. This class holds a client until this class is
&gt; +// destroyed in order to guarantee that the data buffer will not be purged.

I think this is the kind of a comment that can get outdated pretty fast.
I&apos;d recommend moving it to the change log (since it&apos;s definitely correct when this patch is landed).

&gt; Source/WebCore/dom/ScriptElement.cpp:262
&gt; -bool ScriptElement::requestScript(const String&amp; sourceUrl)
&gt; +CachedResourceHandle&lt;CachedScript&gt; ScriptElement::requestCachedScript(const URL&amp; sourceURL, const String&amp; nonceAttribute, const String&amp; crossOriginMode)

Could you change the order of requestCachedScript and requestClassicScript so that the diff looks nicer?
It&apos;s a bit strange to call this request *cachedScript* in that it may send a network request if the cache doesn&apos;t exist.
How about requestScriptWithCache or requestScriptFromCachedResourceLoader? Or loadCachedScriptResource?

&gt; Source/WebCore/dom/ScriptElement.cpp:357
&gt; -void ScriptElement::notifyFinished(CachedResource* resource)
&gt; +void ScriptElement::executeQueuedScriptAndDispatchEvent(LoadableScript&amp; loadableScript)

&quot;queued script&quot; seems rather vague. I&apos;d rather call executeScriptInScriptRunner, executeScriptByScriptRunner, or executeScriptForScriptRunner.
By why is it significant that this function remove itself from loadableScript?
Maybe that&apos;ll lead to a more semantically descriptive function name as well.
Could you clarify that in the change log?

&gt; Source/WebCore/dom/ScriptElement.cpp:364
&gt; +void ScriptElement::executePendingScriptAndDispatchEvent(PendingScript&amp; pendingScript)

Ditto.  It&apos;s totally clear to me that &quot;PendingScript&quot; means HTMLScriptRunner and QueuedScript means ScriptRunner.
I&apos;d rather explicitly say this is executeScriptForHTMLScriptRunner.

&gt; Source/WebCore/dom/ScriptElement.cpp:376
&gt; +void ScriptElement::executeScript(LoadableScript&amp; loadableScript)

Do we really need this function?  It seems like all call sites are also asserting ASSERT(!loadableScript.errorOccurred());
If we&apos;re keeping this function, perhaps it&apos;s better to call it executeScriptWithoutCheckingErrors to make the semantics clear.

&gt; Source/WebCore/dom/ScriptRunner.cpp:116
&gt; +        ASSERT(toScriptElementIfPossible(&amp;script-&gt;element()));

Instead of repeating this in ASSERT and then using it, why don&apos;t we store in a local variable?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1227467</commentid>
    <comment_count>8</comment_count>
      <attachid>288196</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2016-09-07 18:33:07 -0700</bug_when>
    <thetext>Comment on attachment 288196
Patch

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

&gt; Source/WebCore/ChangeLog:22
&gt; +        (WebCore::LoadableClassicScript::errorOccurred): Beyond the boolean value, this can return the detail

And I&apos;ve applied the change suggested in https://bugs.webkit.org/show_bug.cgi?id=148897. The name is changed from errorOccurred() to wasErrored().

&gt;&gt; Source/WebCore/dom/LoadableClassicScript.cpp:39
&gt;&gt; +        return nullptr;
&gt; 
&gt; create function typically doesn&apos;t return nullptr.
&gt; Why don&apos;t we check this in the caller instead?
&gt; That way, this function can return Ref&lt;LoadableClassicScript&gt; like other create functions.

Sounds better.
I&apos;ve just moved the check to the caller side and ensure that this LoadableClassicScript::create always returns Ref and never fails.

&gt;&gt; Source/WebCore/dom/LoadableClassicScript.cpp:99
&gt;&gt; +                makeString(&quot;Refused to execute script from &apos;&quot;, m_cachedScript-&gt;url().stringCenterEllipsizedToLength(), &quot;&apos; because its MIME type (&apos;&quot;, m_cachedScript-&gt;mimeType(), &quot;&apos;) is not executable, and strict MIME type checking is enabled.&quot;)
&gt; 
&gt; This line is really long.
&gt; Can we break the line somewhere?

OK, inserted.

&gt;&gt; Source/WebCore/dom/LoadableClassicScript.h:40
&gt;&gt; +// destroyed in order to guarantee that the data buffer will not be purged.
&gt; 
&gt; I think this is the kind of a comment that can get outdated pretty fast.
&gt; I&apos;d recommend moving it to the change log (since it&apos;s definitely correct when this patch is landed).

Make sense. Moved.

&gt;&gt; Source/WebCore/dom/ScriptElement.cpp:262
&gt;&gt; +CachedResourceHandle&lt;CachedScript&gt; ScriptElement::requestCachedScript(const URL&amp; sourceURL, const String&amp; nonceAttribute, const String&amp; crossOriginMode)
&gt; 
&gt; Could you change the order of requestCachedScript and requestClassicScript so that the diff looks nicer?
&gt; It&apos;s a bit strange to call this request *cachedScript* in that it may send a network request if the cache doesn&apos;t exist.
&gt; How about requestScriptWithCache or requestScriptFromCachedResourceLoader? Or loadCachedScriptResource?

Moved and this change makes the diff nicer.
And right. CachedScript can be retrieved through the network request. `requestScriptWithCache` seems better. Changed.

&gt;&gt; Source/WebCore/dom/ScriptElement.cpp:357
&gt;&gt; +void ScriptElement::executeQueuedScriptAndDispatchEvent(LoadableScript&amp; loadableScript)
&gt; 
&gt; &quot;queued script&quot; seems rather vague. I&apos;d rather call executeScriptInScriptRunner, executeScriptByScriptRunner, or executeScriptForScriptRunner.
&gt; By why is it significant that this function remove itself from loadableScript?
&gt; Maybe that&apos;ll lead to a more semantically descriptive function name as well.
&gt; Could you clarify that in the change log?

It is because ScriptRunner is driven by the different way from HTMLScriptRunner.
While HTMLScriptRunner is driven by the PendingScript and HTML document parser, ScriptRunner is driven by the notification told by the ScriptElement.
As we can see in the ScriptElement::prepareScript, we call m_loadableScript-&gt;addClient(*this) only when we use the ScriptRunner.
And once the loading is done, ScriptElement receives the notification and drives the ScriptRunner by using ScriptElement::m_willExecuteInOrder information (defer / async).

But right, it is tricky. I think there is a chance to refactor ScriptRunner by using PendingScript::{setClient,clearClient}.
I&apos;ll handle this in the separate patch. https://bugs.webkit.org/show_bug.cgi?id=161726

&gt;&gt; Source/WebCore/dom/ScriptElement.cpp:364
&gt;&gt; +void ScriptElement::executePendingScriptAndDispatchEvent(PendingScript&amp; pendingScript)
&gt; 
&gt; Ditto.  It&apos;s totally clear to me that &quot;PendingScript&quot; means HTMLScriptRunner and QueuedScript means ScriptRunner.
&gt; I&apos;d rather explicitly say this is executeScriptForHTMLScriptRunner.

Reasonable. Changed it to executeScriptForHTMLScriptRunner.

&gt;&gt; Source/WebCore/dom/ScriptElement.cpp:376
&gt;&gt; +void ScriptElement::executeScript(LoadableScript&amp; loadableScript)
&gt; 
&gt; Do we really need this function?  It seems like all call sites are also asserting ASSERT(!loadableScript.errorOccurred());
&gt; If we&apos;re keeping this function, perhaps it&apos;s better to call it executeScriptWithoutCheckingErrors to make the semantics clear.

This is defined just for the correspondence between `executeScript(const ScriptSourceCode&amp;)` and `executeScript(LoadableScript&amp;)`.
Since the current caller is only one (and there is no plan adding a new caller for this function), merging this into executeScriptAndDispatchEvent is OK.

&gt;&gt; Source/WebCore/dom/ScriptRunner.cpp:116
&gt;&gt; +        ASSERT(toScriptElementIfPossible(&amp;script-&gt;element()));
&gt; 
&gt; Instead of repeating this in ASSERT and then using it, why don&apos;t we store in a local variable?

It is because I don&apos;t want to create the pointer local variable for the value that should not be nullptr.
But either is OK. I reverted it to the original one.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1227475</commentid>
    <comment_count>9</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2016-09-07 18:51:54 -0700</bug_when>
    <thetext>Committed r205581: &lt;http://trac.webkit.org/changeset/205581&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1227545</commentid>
    <comment_count>10</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2016-09-07 23:01:11 -0700</bug_when>
    <thetext>Committed r205583: &lt;http://trac.webkit.org/changeset/205583&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>288095</attachid>
            <date>2016-09-06 21:01:23 -0700</date>
            <delta_ts>2016-09-07 01:29:26 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-161674-20160906205900.patch</filename>
            <type>text/plain</type>
            <size>55207</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA1NTEyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTMxYTVjNjcwMjFmYTVi
NTU4ZGJkODlhMmY3ZGU0Nzc4ZmVkMTFhMS4uNGI1Y2Q2NmZjMWNlN2QyNDMxYTgyMzk1ZmIxZGM0
YWY4NmQ4N2E5MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDcyIEBACisyMDE2LTA5LTA2ICBZdXN1
a2UgU3V6dWtpICA8dXRhdGFuZS50ZWFAZ21haWwuY29tPgorCisgICAgICAgIEludHJvZHVjZSBh
YnN0cmFjdCBjbGFzcyBMb2FkYWJsZVNjcmlwdCBmb3IgY2xhc3NpYyBzY3JpcHQgYW5kIG1vZHVs
ZSBncmFwaAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTYxNjc0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
Tm8gYmVoYXZpb3IgY2hhbmdlLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAg
ICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGRvbS9Mb2Fk
YWJsZUNsYXNzaWNTY3JpcHQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxvYWRhYmxl
Q2xhc3NpY1NjcmlwdDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkxvYWRhYmxlQ2xhc3Np
Y1NjcmlwdDo6TG9hZGFibGVDbGFzc2ljU2NyaXB0KToKKyAgICAgICAgKFdlYkNvcmU6OkxvYWRh
YmxlQ2xhc3NpY1NjcmlwdDo6fkxvYWRhYmxlQ2xhc3NpY1NjcmlwdCk6CisgICAgICAgIChXZWJD
b3JlOjpMb2FkYWJsZUNsYXNzaWNTY3JpcHQ6OmlzTG9hZGVkKToKKyAgICAgICAgKFdlYkNvcmU6
OkxvYWRhYmxlQ2xhc3NpY1NjcmlwdDo6ZXJyb3JPY2N1cnJlZCk6CisgICAgICAgIChXZWJDb3Jl
OjpMb2FkYWJsZUNsYXNzaWNTY3JpcHQ6Ondhc0NhbmNlbGVkKToKKyAgICAgICAgKFdlYkNvcmU6
OkxvYWRhYmxlQ2xhc3NpY1NjcmlwdDo6bm90aWZ5RmluaXNoZWQpOgorICAgICAgICAqIGRvbS9M
b2FkYWJsZUNsYXNzaWNTY3JpcHQuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvZG9tL1Bl
bmRpbmdTY3JpcHQuaC4KKyAgICAgICAgKGlzVHlwZSk6CisgICAgICAgICogZG9tL0xvYWRhYmxl
U2NyaXB0LmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdFJ1bm5lci5o
LgorICAgICAgICAoV2ViQ29yZTo6TG9hZGFibGVTY3JpcHQ6OmFkZENsaWVudCk6CisgICAgICAg
IChXZWJDb3JlOjpMb2FkYWJsZVNjcmlwdDo6cmVtb3ZlQ2xpZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OkxvYWRhYmxlU2NyaXB0Ojpub3RpZnlDbGllbnRGaW5pc2hlZCk6CisgICAgICAgICogZG9t
L0xvYWRhYmxlU2NyaXB0Lmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRS
dW5uZXIuaC4KKyAgICAgICAgKFdlYkNvcmU6OkxvYWRhYmxlU2NyaXB0Ojp+TG9hZGFibGVTY3Jp
cHQpOgorICAgICAgICAoV2ViQ29yZTo6TG9hZGFibGVTY3JpcHQ6OmlzQ2xhc3NpY1NjcmlwdCk6
CisgICAgICAgIChXZWJDb3JlOjpMb2FkYWJsZVNjcmlwdDo6aXNNb2R1bGVHcmFwaCk6CisgICAg
ICAgICogZG9tL0xvYWRhYmxlU2NyaXB0Q2xpZW50Lmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJD
b3JlL2RvbS9TY3JpcHRSdW5uZXIuaC4KKyAgICAgICAgKFdlYkNvcmU6OkxvYWRhYmxlU2NyaXB0
Q2xpZW50Ojp+TG9hZGFibGVTY3JpcHRDbGllbnQpOgorICAgICAgICAqIGRvbS9QZW5kaW5nU2Ny
aXB0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBlbmRpbmdTY3JpcHQ6OmNyZWF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpQZW5kaW5nU2NyaXB0OjpQZW5kaW5nU2NyaXB0KToKKyAgICAgICAgKFdl
YkNvcmU6OlBlbmRpbmdTY3JpcHQ6On5QZW5kaW5nU2NyaXB0KToKKyAgICAgICAgKFdlYkNvcmU6
OlBlbmRpbmdTY3JpcHQ6OmxvYWRhYmxlU2NyaXB0KToKKyAgICAgICAgKFdlYkNvcmU6OlBlbmRp
bmdTY3JpcHQ6Om5vdGlmeUZpbmlzaGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlBlbmRpbmdTY3Jp
cHQ6OmlzTG9hZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlBlbmRpbmdTY3JpcHQ6OmVycm9yT2Nj
dXJyZWQpOgorICAgICAgICAoV2ViQ29yZTo6UGVuZGluZ1NjcmlwdDo6Y2FjaGVkU2NyaXB0KTog
RGVsZXRlZC4KKyAgICAgICAgKiBkb20vUGVuZGluZ1NjcmlwdC5oOgorICAgICAgICAqIGRvbS9T
Y3JpcHRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdEVsZW1lbnQ6OlNjcmlw
dEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RWxlbWVudDo6aGFuZGxlU291cmNl
QXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdEVsZW1lbnQ6OnByZXBhcmVTY3Jp
cHQpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RWxlbWVudDo6cmVxdWVzdENhY2hlZFNjcmlw
dCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRFbGVtZW50OjpyZXF1ZXN0Q2xhc3NpY1Njcmlw
dCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRFbGVtZW50OjpleGVjdXRlU2NyaXB0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcmlwdEVsZW1lbnQ6OnN0b3BMb2FkUmVxdWVzdCk6CisgICAgICAg
IChXZWJDb3JlOjpTY3JpcHRFbGVtZW50OjpleGVjdXRlU2NyaXB0V2l0aG91dERpc3BhdGNoaW5n
RXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RWxlbWVudDo6bm90aWZ5RmluaXNoZWQp
OgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RWxlbWVudDo6cmVxdWVzdFNjcmlwdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRFbGVtZW50OjpleGVjdXRlKTogRGVsZXRlZC4K
KyAgICAgICAgKiBkb20vU2NyaXB0RWxlbWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0
RWxlbWVudDo6bG9hZGFibGVTY3JpcHQpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RWxlbWVu
dDo6Y2FjaGVkU2NyaXB0KTogRGVsZXRlZC4KKyAgICAgICAgKiBkb20vU2NyaXB0UnVubmVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdFJ1bm5lcjo6cXVldWVTY3JpcHRGb3JFeGVjdXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0UnVubmVyOjp0aW1lckZpcmVkKToKKyAgICAg
ICAgKiBkb20vU2NyaXB0UnVubmVyLmg6CisgICAgICAgICogaHRtbC9wYXJzZXIvSFRNTFNjcmlw
dFJ1bm5lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MU2NyaXB0UnVubmVyOjpleGVjdXRl
UGVuZGluZ1NjcmlwdEFuZERpc3BhdGNoRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6cmVxdWVz
dFBlbmRpbmdTY3JpcHQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNjcmlwdFJ1bm5lcjo6cmVx
dWVzdFBhcnNpbmdCbG9ja2luZ1NjcmlwdCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MU2NyaXB0
UnVubmVyOjpzb3VyY2VGcm9tUGVuZGluZ1NjcmlwdCk6IERlbGV0ZWQuCisgICAgICAgICogaHRt
bC9wYXJzZXIvSFRNTFNjcmlwdFJ1bm5lci5oOgorICAgICAgICAqIHhtbC9wYXJzZXIvWE1MRG9j
dW1lbnRQYXJzZXJMaWJ4bWwyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlhNTERvY3VtZW50UGFy
c2VyOjplbmRFbGVtZW50TnMpOgorCiAyMDE2LTA5LTA2ICBGdWppaSBIaXJvbm9yaSAgPEhpcm9u
b3JpLkZ1amlpQHNvbnkuY29tPgogCiAgICAgICAgIFtDTWFrZV0gRGVjb3VwbGUgZ2VuZXJhdGlu
ZyBiaW5kaW5ncyBvZiBXZWJDb3JlIGFuZCBXZWJDb3JlVGVzdFN1cHBvcnQKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKaW5kZXggYzQyOTBlNDQ0MDk5N2IxMTdlOTA3ZjM5YmM3YWM2ODk0ZDVlNmNlOC4uYjQ3
ZGUzMzNiNWEyZTMxOTk5NmY5ZTUxMmZlZjQ2Mjk0NGI5NDI4MSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50
eHQKQEAgLTE0MzYsNiArMTQzNiw4IEBAIHNldChXZWJDb3JlX1NPVVJDRVMKICAgICBkb20vSW5s
aW5lU3R5bGVTaGVldE93bmVyLmNwcAogICAgIGRvbS9LZXlib2FyZEV2ZW50LmNwcAogICAgIGRv
bS9MaXZlTm9kZUxpc3QuY3BwCisgICAgZG9tL0xvYWRhYmxlQ2xhc3NpY1NjcmlwdC5jcHAKKyAg
ICBkb20vTG9hZGFibGVTY3JpcHQuY3BwCiAgICAgZG9tL01lc3NhZ2VDaGFubmVsLmNwcAogICAg
IGRvbS9NZXNzYWdlRXZlbnQuY3BwCiAgICAgZG9tL01lc3NhZ2VQb3J0LmNwcApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDYyZTky
MTU0ZGY3ZGU0NDIxZmYxNGQ5YzlkZDE2ODk5YWJmZmJlNDguLjVkZGYwMjBkYzlhMjI1M2RhODE3
YTM2ZjFiODI0M2FkNTg1NjY0NDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTYwOTgsNiArNjA5OCwxMSBAQAogCQlFMUZGOEY2
RDE4MERCNUJFMDAxMzI2NzQgLyogQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnkuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxRkY4RjZCMTgwREI1QkUwMDEz
MjY3NCAvKiBDcnlwdG9BbGdvcml0aG1SZWdpc3RyeS5oICovOyB9OwogCQlFMzg4Mzg5ODFCQUQx
NDVGMDBENjJFRTMgLyogU2NyaXB0TW9kdWxlTG9hZGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUzODgzODk0MUJBRDE0NUYwMEQ2MkVFMyAvKiBT
Y3JpcHRNb2R1bGVMb2FkZXIuY3BwICovOyB9OwogCQlFMzg4Mzg5OTFCQUQxNDVGMDBENjJFRTMg
LyogU2NyaXB0TW9kdWxlTG9hZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBFMzg4Mzg5NTFCQUQxNDVGMDBENjJFRTMgLyogU2NyaXB0TW9kdWxlTG9h
ZGVyLmggKi87IH07CisJCUUzQjJGMEVCMUQ3RjRDOUQwMEIwQzlEMSAvKiBMb2FkYWJsZUNsYXNz
aWNTY3JpcHQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRTNCMkYwRTMxRDdGMzVFQzAwQjBDOUQxIC8qIExvYWRhYmxlQ2xhc3NpY1NjcmlwdC5jcHAg
Ki87IH07CisJCUUzQjJGMEVDMUQ3RjRDQTEwMEIwQzlEMSAvKiBMb2FkYWJsZVNjcmlwdC5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFM0IyRjBFOTFE
N0YzRDNDMDBCMEM5RDEgLyogTG9hZGFibGVTY3JpcHQuY3BwICovOyB9OworCQlFM0IyRjBFRDFE
N0Y0Q0EzMDBCMEM5RDEgLyogTG9hZGFibGVTY3JpcHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUzQjJGMEU3MUQ3RjM1RUMwMEIwQzlEMSAvKiBMb2Fk
YWJsZVNjcmlwdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CisJCUUzQjJGMEVFMUQ3RjRDQTkwMEIwQzlEMSAvKiBMb2FkYWJsZVNjcmlwdENsaWVudC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTNCMkYwRTgx
RDdGMzVFQzAwQjBDOUQxIC8qIExvYWRhYmxlU2NyaXB0Q2xpZW50LmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJRTNCMkYwRjAxRDdGNENCNTAwQjBD
OUQxIC8qIExvYWRhYmxlQ2xhc3NpY1NjcmlwdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRTNCMkYwRTQxRDdGMzVFQzAwQjBDOUQxIC8qIExvYWRhYmxl
Q2xhc3NpY1NjcmlwdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCUUzRkEzODY0MUQ3MTgxMkQwMEFBNTk1MCAvKiBQZW5kaW5nU2NyaXB0Q2xpZW50
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFM0ZBMzg2
MTFENzE2RTc2MDBBQTU5NTAgLyogUGVuZGluZ1NjcmlwdENsaWVudC5oICovOyB9OwogCQlFNDAx
QzI3NTE3Q0U1M0VDMDBDNDFBMzUgLyogRWxlbWVudEl0ZXJhdG9yQXNzZXJ0aW9ucy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQwMUMyNzQxN0NFNTNF
QzAwQzQxQTM1IC8qIEVsZW1lbnRJdGVyYXRvckFzc2VydGlvbnMuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlFNDAxRTBBNDFDM0MwQjgzMDBGMzRE
MTAgLyogU3R5bGVDaGFuZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEU0MDFFMEEzMUMzQzBCODMwMEYzNEQxMCAvKiBTdHlsZUNoYW5nZS5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0xMzY3Myw2ICsx
MzY3OCwxMSBAQAogCQlFMUZGOEY2QjE4MERCNUJFMDAxMzI2NzQgLyogQ3J5cHRvQWxnb3JpdGht
UmVnaXN0cnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ3J5cHRvQWxnb3Jp
dGhtUmVnaXN0cnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTM4ODM4OTQxQkFE
MTQ1RjAwRDYyRUUzIC8qIFNjcmlwdE1vZHVsZUxvYWRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBTY3JpcHRNb2R1bGVMb2FkZXIuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlFMzg4Mzg5NTFCQUQxNDVGMDBENjJFRTMgLyogU2NyaXB0TW9kdWxl
TG9hZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNjcmlwdE1vZHVsZUxv
YWRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFM0IyRjBFMzFEN0YzNUVDMDBC
MEM5RDEgLyogTG9hZGFibGVDbGFzc2ljU2NyaXB0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IExvYWRhYmxlQ2xhc3NpY1NjcmlwdC5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUUzQjJGMEU0MUQ3RjM1RUMwMEIwQzlEMSAvKiBMb2FkYWJsZUNsYXNz
aWNTY3JpcHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTG9hZGFibGVDbGFz
c2ljU2NyaXB0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUUzQjJGMEU3MUQ3RjM1
RUMwMEIwQzlEMSAvKiBMb2FkYWJsZVNjcmlwdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBMb2FkYWJsZVNjcmlwdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlF
M0IyRjBFODFEN0YzNUVDMDBCMEM5RDEgLyogTG9hZGFibGVTY3JpcHRDbGllbnQuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTG9hZGFibGVTY3JpcHRDbGllbnQuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTNCMkYwRTkxRDdGM0QzQzAwQjBDOUQxIC8qIExvYWRh
YmxlU2NyaXB0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExvYWRh
YmxlU2NyaXB0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTNGQTM4NjExRDcx
NkU3NjAwQUE1OTUwIC8qIFBlbmRpbmdTY3JpcHRDbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gUGVuZGluZ1NjcmlwdENsaWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlFNDAxQzI3NDE3Q0U1M0VDMDBDNDFBMzUgLyogRWxlbWVudEl0ZXJhdG9yQXNz
ZXJ0aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFbGVtZW50SXRlcmF0
b3JBc3NlcnRpb25zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0MDFFMEEzMUMz
QzBCODMwMEYzNEQxMCAvKiBTdHlsZUNoYW5nZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBTdHlsZUNoYW5nZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjMw
MzEsNiArMjMwNDEsMTEgQEAKIAkJCQkxNENGN0MyMDA5RjcxMTA2MDBFQjM2NjUgLyogS2V5Ym9h
cmRFdmVudC5pZGwgKi8sCiAJCQkJQkM3RkE2MUUwRDFGMENCRDAwREIyMkE5IC8qIExpdmVOb2Rl
TGlzdC5jcHAgKi8sCiAJCQkJQkM3RkE2MUYwRDFGMENCRDAwREIyMkE5IC8qIExpdmVOb2RlTGlz
dC5oICovLAorCQkJCUUzQjJGMEUzMUQ3RjM1RUMwMEIwQzlEMSAvKiBMb2FkYWJsZUNsYXNzaWNT
Y3JpcHQuY3BwICovLAorCQkJCUUzQjJGMEU0MUQ3RjM1RUMwMEIwQzlEMSAvKiBMb2FkYWJsZUNs
YXNzaWNTY3JpcHQuaCAqLywKKwkJCQlFM0IyRjBFOTFEN0YzRDNDMDBCMEM5RDEgLyogTG9hZGFi
bGVTY3JpcHQuY3BwICovLAorCQkJCUUzQjJGMEU3MUQ3RjM1RUMwMEIwQzlEMSAvKiBMb2FkYWJs
ZVNjcmlwdC5oICovLAorCQkJCUUzQjJGMEU4MUQ3RjM1RUMwMEIwQzlEMSAvKiBMb2FkYWJsZVNj
cmlwdENsaWVudC5oICovLAogCQkJCUJDOUE2MTQ0MTQ2ODU5RDkwMDYwNTdGRCAvKiBtYWtlX2Rv
bV9leGNlcHRpb25zLnBsICovLAogCQkJCUJDOUE2MTQ1MTQ2ODU5RDkwMDYwNTdGRCAvKiBtYWtl
X2V2ZW50X2ZhY3RvcnkucGwgKi8sCiAJCQkJQkM5QTYxNDYxNDY4NTlEOTAwNjA1N0ZEIC8qIG1h
a2VfbmFtZXMucGwgKi8sCkBAIC0yNDkzOCw2ICsyNDk1Myw3IEBACiAJCQkJQzUxMzdDRjMxMUE1
ODM3ODAwNEFEQjk5IC8qIEpTRE9NU3RyaW5nTGlzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM2
NDY0OTgxMUQ4MjM0OTAwNjQ1NUIwIC8qIEpTRE9NU3RyaW5nTWFwLmggaW4gSGVhZGVycyAqLywK
IAkJCQk3Njk0NTYzRDEyMTREOTdDMDAwN0NCQUUgLyogSlNET01Ub2tlbkxpc3QuaCBpbiBIZWFk
ZXJzICovLAorCQkJCUUzQjJGMEYwMUQ3RjRDQjUwMEIwQzlEMSAvKiBMb2FkYWJsZUNsYXNzaWNT
Y3JpcHQuaCBpbiBIZWFkZXJzICovLAogCQkJCTJFMzdFMDA2MTJEQkM1QTQwMEE2QjIzMyAvKiBK
U0RPTVVSTC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM2OTMyNzQwRDdFMjkzOTAwQUU0NEQxIC8q
IEpTRE9NV2luZG93QmFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNjUyRkJCQkMwREUyN0NCNjAw
MDFEMzg2IC8qIEpTRE9NV2luZG93Q3VzdG9tLmggaW4gSGVhZGVycyAqLywKQEAgLTI1MzI0LDYg
KzI1MzQwLDcgQEAKIAkJCQlCMkZBM0RGMTBBQjc1QTZGMDAwRTVBQzQgLyogSlNTVkdSZW5kZXJp
bmdJbnRlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyRkEzREYzMEFCNzVBNkYwMDBFNUFDNCAv
KiBKU1NWR1NjcmlwdEVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyRkEzREY1MEFCNzVB
NkYwMDBFNUFDNCAvKiBKU1NWR1NldEVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCUUzQjJG
MEVFMUQ3RjRDQTkwMEIwQzlEMSAvKiBMb2FkYWJsZVNjcmlwdENsaWVudC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQjJGQTNERjcwQUI3NUE2RjAwMEU1QUM0IC8qIEpTU1ZHU3RvcEVsZW1lbnQuaCBp
biBIZWFkZXJzICovLAogCQkJCUIyRkEzREY5MEFCNzVBNkYwMDBFNUFDNCAvKiBKU1NWR1N0cmlu
Z0xpc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyRkEzREZCMEFCNzVBNkYwMDBFNUFDNCAvKiBK
U1NWR1N0eWxlRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNjkzNCw2ICsyNjk1MSw3IEBA
CiAJCQkJMzdGODE4RkQwRDY1NzYwNjAwNUUxRjA1IC8qIFdlYkNvcmVVUkxSZXNwb25zZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJNDRBMjBEQjkwRjg0MTY2QzAwQjNFMUZFIC8qIFdlYkNvcmVVUkxS
ZXNwb25zZUlPUy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTNGMTk5RjAwODI0NUU1OTAwMUU5QUJD
IC8qIFdlYkNvcmVWaWV3LmggaW4gSGVhZGVycyAqLywKKwkJCQlFM0IyRjBFRDFEN0Y0Q0EzMDBC
MEM5RDEgLyogTG9hZGFibGVTY3JpcHQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1RTYxNjc0MTg5
NDU4MUYwMDlBREY1MCAvKiBXZWJEZWJ1Z2dlckFnZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlG
RTBEODRFOTEwNDg0MzQ4MDAxQTE3OUUgLyogV2ViRXZlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTIyNUExNkI1MEQ1QzExRTkwMDA5MDI5NSAvKiBXZWJFdmVudFJlZ2lvbi5oIGluIEhlYWRlcnMg
Ki8sCkBAIC0yNzY1OSw2ICsyNzY3Nyw3IEBACiAJCQkJNDNFREQ2N0UxQjQ4NURCRjAwNjQwRTc1
IC8qIENvbWJpbmVkRmlsdGVyc0FscGhhYmV0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTI2RTk0
NEQ4MUFDNEIyREQwMDdCODVCNSAvKiBDb21iaW5lZFVSTEZpbHRlcnMuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQTU4NEZFMzQxODY0RDVBRjAwODQzQjEwIC8qIENvbW1hbmRMaW5lQVBJSG9zdC5j
cHAgaW4gU291cmNlcyAqLywKKwkJCQlFM0IyRjBFQjFEN0Y0QzlEMDBCMEM5RDEgLyogTG9hZGFi
bGVDbGFzc2ljU2NyaXB0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1ODRGRTJCMTg2Mzg3MEYw
MDg0M0IxMCAvKiBDb21tYW5kTGluZUFQSU1vZHVsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk2
NTUwQjZBMTA5OURGMDI3MDA5MEQ3ODEgLyogQ29tbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlFMUZFMTM3NDE4NDAyQTY3MDA4OTJGMTMgLyogQ29tbW9uQ3J5cHRvVXRpbGl0aWVzLmNwcCBp
biBTb3VyY2VzICovLApAQCAtMjc3NTcsNiArMjc3NzYsNyBAQAogCQkJCUUxNkE4NEY5MTRDODVD
Q0MwMDI5NzdERiAvKiBDU1NCb3JkZXJJbWFnZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzI3
NEIzMTE0MEVCRUQ4MDBFQURGQTYgLyogQ1NTQm9yZGVySW1hZ2VTbGljZVZhbHVlLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTQ5QUUyRDhFMTM0RUU1MEMwMDcyOTIwQSAvKiBDU1NDYWxjdWxhdGlv
blZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUUzQjJGMEVDMUQ3RjRDQTEwMEIwQzlEMSAv
KiBMb2FkYWJsZVNjcmlwdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzYwNEE0MzBEQjU2MzRF
MDAyMDQ3MzkgLyogQ1NTQ2FudmFzVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTFFQkJC
RDQwQUFDOUI4NzAwMUZFOEUyIC8qIENTU0NoYXJzZXRSdWxlLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUJDRUE0NzhGMDk3Q0FBQzgwMDk0QzlFNCAvKiBDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRp
b24uY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vTG9h
ZGFibGVDbGFzc2ljU2NyaXB0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Mb2FkYWJsZUNsYXNz
aWNTY3JpcHQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZhZWYxZjNmYmY5MjFlNmM1OGQ4MzczZmU0YzBiMTAx
ZTkxNjBjMzQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTG9hZGFibGVD
bGFzc2ljU2NyaXB0LmNwcApAQCAtMCwwICsxLDEwNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNiBBcHBsZSwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
TG9hZGFibGVDbGFzc2ljU2NyaXB0LmgiCisKKyNpbmNsdWRlICJFbGVtZW50LmgiCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworUmVmUHRyPExvYWRhYmxlQ2xhc3NpY1NjcmlwdD4gTG9hZGFibGVD
bGFzc2ljU2NyaXB0OjpjcmVhdGUoQ2FjaGVkUmVzb3VyY2VIYW5kbGU8Q2FjaGVkU2NyaXB0PiYm
IGNhY2hlZFNjcmlwdCwgY29uc3QgU3RyaW5nJiBjcm9zc09yaWdpbk1vZGUsIFNlY3VyaXR5T3Jp
Z2luJiBzZWN1cml0eU9yaWdpbikKK3sKKyAgICBpZiAoIWNhY2hlZFNjcmlwdCkKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisgICAgYXV0byBzY3JpcHQgPSBhZG9wdFJlZigqbmV3IExvYWRhYmxl
Q2xhc3NpY1NjcmlwdChXVEZNb3ZlKGNhY2hlZFNjcmlwdCksIGNyb3NzT3JpZ2luTW9kZSwgc2Vj
dXJpdHlPcmlnaW4pKTsKKyAgICBjYWNoZWRTY3JpcHQtPmFkZENsaWVudChzY3JpcHQucHRyKCkp
OworICAgIHJldHVybiBXVEZNb3ZlKHNjcmlwdCk7Cit9CisKK0xvYWRhYmxlQ2xhc3NpY1Njcmlw
dDo6TG9hZGFibGVDbGFzc2ljU2NyaXB0KENhY2hlZFJlc291cmNlSGFuZGxlPENhY2hlZFNjcmlw
dD4mJiBjYWNoZWRTY3JpcHQsIGNvbnN0IFN0cmluZyYgY3Jvc3NPcmlnaW5Nb2RlLCBTZWN1cml0
eU9yaWdpbiYgc2VjdXJpdHlPcmlnaW4pCisgICAgOiBtX2NhY2hlZFNjcmlwdChjYWNoZWRTY3Jp
cHQpCisgICAgLCBtX3JlcXVlc3RVc2VzQWNjZXNzQ29udHJvbCghY3Jvc3NPcmlnaW5Nb2RlLmlz
TnVsbCgpKQorICAgICwgbV9zZWN1cml0eU9yaWdpbihzZWN1cml0eU9yaWdpbikKK3sKK30KKwor
TG9hZGFibGVDbGFzc2ljU2NyaXB0Ojp+TG9hZGFibGVDbGFzc2ljU2NyaXB0KCkKK3sKKyAgICBt
X2NhY2hlZFNjcmlwdC0+cmVtb3ZlQ2xpZW50KHRoaXMpOworfQorCitib29sIExvYWRhYmxlQ2xh
c3NpY1NjcmlwdDo6aXNMb2FkZWQoKSBjb25zdAoreworICAgIHJldHVybiBtX2NhY2hlZFNjcmlw
dC0+aXNMb2FkZWQoKTsKK30KKworT3B0aW9uYWw8RXJyb3I+IExvYWRhYmxlQ2xhc3NpY1Njcmlw
dDo6ZXJyb3JPY2N1cnJlZCgpIGNvbnN0Cit7CisgICAgaWYgKG1fZXJyb3IpCisgICAgICAgIHJl
dHVybiBtX2Vycm9yOworCisgICAgaWYgKG1fY2FjaGVkU2NyaXB0LT5lcnJvck9jY3VycmVkKCkp
CisgICAgICAgIHJldHVybiB7IEVycm9yOjpDYWNoZWRTY3JpcHRFcnJvciwgTnVsbG9wdCB9Owor
CisgICAgcmV0dXJuIE51bGxvcHQ7Cit9CisKK2Jvb2wgTG9hZGFibGVDbGFzc2ljU2NyaXB0Ojp3
YXNDYW5jZWxlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY2FjaGVkU2NyaXB0LT53YXNDYW5j
ZWxlZCgpOworfQorCit2b2lkIExvYWRhYmxlQ2xhc3NpY1NjcmlwdDo6bm90aWZ5RmluaXNoZWQo
Q2FjaGVkUmVzb3VyY2UqKQoreworICAgIGlmIChtX3JlcXVlc3RVc2VzQWNjZXNzQ29udHJvbCAm
JiAhbV9jYWNoZWRTY3JpcHQtPnBhc3Nlc1NhbWVPcmlnaW5Qb2xpY3lDaGVjayhtX3NlY3VyaXR5
T3JpZ2luLmdldCgpKSkgeworICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8U3RyaW5nPiBj
b25zb2xlTWVzc2FnZShBU0NJSUxpdGVyYWwoIkNyb3NzLW9yaWdpbiBzY3JpcHQgbG9hZCBkZW5p
ZWQgYnkgQ3Jvc3MtT3JpZ2luIFJlc291cmNlIFNoYXJpbmcgcG9saWN5LiIpKTsKKyAgICAgICAg
bV9lcnJvciA9IHsKKyAgICAgICAgICAgIEVycm9yOjpDcm9zc09yaWdpbkxvYWRFcnJvciwKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBNZXNzYWdlU291cmNlOjpKUywKKyAgICAgICAg
ICAgICAgICBNZXNzYWdlTGV2ZWw6OkVycm9yLAorICAgICAgICAgICAgICAgIGNvbnNvbGVNZXNz
YWdlCisgICAgICAgICAgICB9CisgICAgICAgIH07CisgICAgfQorCisjaWYgRU5BQkxFKE5PU05J
RkYpCisgICAgaWYgKCFtX2NhY2hlZFNjcmlwdC0+bWltZVR5cGVBbGxvd2VkQnlOb3NuaWZmKCkp
IHsKKyAgICAgICAgbV9lcnJvciA9IHsKKyAgICAgICAgICAgIEVycm9yOjpOb3NuaWZmRXJyb3Is
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgTWVzc2FnZVNvdXJjZTo6U2VjdXJpdHks
CisgICAgICAgICAgICAgICAgTWVzc2FnZUxldmVsOjpFcnJvciwKKyAgICAgICAgICAgICAgICBt
YWtlU3RyaW5nKCJSZWZ1c2VkIHRvIGV4ZWN1dGUgc2NyaXB0IGZyb20gJyIsIG1fY2FjaGVkU2Ny
aXB0LT51cmwoKS5zdHJpbmdDZW50ZXJFbGxpcHNpemVkVG9MZW5ndGgoKSwgIicgYmVjYXVzZSBp
dHMgTUlNRSB0eXBlICgnIiwgbV9jYWNoZWRTY3JpcHQtPm1pbWVUeXBlKCksICInKSBpcyBub3Qg
ZXhlY3V0YWJsZSwgYW5kIHN0cmljdCBNSU1FIHR5cGUgY2hlY2tpbmcgaXMgZW5hYmxlZC4iKQor
ICAgICAgICAgICAgfQorICAgICAgICB9OworICAgIH0KKyNlbmRpZgorCisgICAgbm90aWZ5Q2xp
ZW50RmluaXNoZWQoKTsKK30KKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0xv
YWRhYmxlQ2xhc3NpY1NjcmlwdC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0xvYWRhYmxlQ2xhc3Np
Y1NjcmlwdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjE3YTVjOTczYzcwNjU2ODMxOTNmZTE2NGQ5Mzc4ZTQ4MzE3
YTlmM2UKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTG9hZGFibGVDbGFz
c2ljU2NyaXB0LmgKQEAgLTAsMCArMSw2NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBB
cHBsZSwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkNhY2hlZFJlc291
cmNlQ2xpZW50LmgiCisjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VIYW5kbGUuaCIKKyNpbmNsdWRl
ICJDYWNoZWRTY3JpcHQuaCIKKyNpbmNsdWRlICJMb2FkYWJsZVNjcmlwdC5oIgorI2luY2x1ZGUg
IkxvYWRhYmxlU2NyaXB0Q2xpZW50LmgiCisjaW5jbHVkZSA8d3RmL1R5cGVDYXN0cy5oPgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIEEgQ2FjaGVkUmVzb3VyY2VIYW5kbGUgYWxvbmUgZG9l
cyBub3QgcHJldmVudCB0aGUgdW5kZXJseWluZyBDYWNoZWRSZXNvdXJjZQorLy8gZnJvbSBwdXJn
aW5nIGl0cyBkYXRhIGJ1ZmZlci4gVGhpcyBjbGFzcyBob2xkcyBhIGNsaWVudCB1bnRpbCB0aGlz
IGNsYXNzIGlzCisvLyBkZXN0cm95ZWQgaW4gb3JkZXIgdG8gZ3VhcmFudGVlIHRoYXQgdGhlIGRh
dGEgYnVmZmVyIHdpbGwgbm90IGJlIHB1cmdlZC4KK2NsYXNzIExvYWRhYmxlQ2xhc3NpY1Njcmlw
dCBmaW5hbCA6IHB1YmxpYyBMb2FkYWJsZVNjcmlwdCwgcHJpdmF0ZSBDYWNoZWRSZXNvdXJjZUNs
aWVudCB7CitwdWJsaWM6CisgICAgfkxvYWRhYmxlQ2xhc3NpY1NjcmlwdCgpOworCisgICAgc3Rh
dGljIFJlZlB0cjxMb2FkYWJsZUNsYXNzaWNTY3JpcHQ+IGNyZWF0ZShDYWNoZWRSZXNvdXJjZUhh
bmRsZTxDYWNoZWRTY3JpcHQ+JiYsIGNvbnN0IFN0cmluZyYgY3Jvc3NPcmlnaW5Nb2RlLCBTZWN1
cml0eU9yaWdpbiYpOworICAgIGJvb2wgaXNMb2FkZWQoKSBjb25zdCBvdmVycmlkZTsKKyAgICBP
cHRpb25hbDxFcnJvcj4gZXJyb3JPY2N1cnJlZCgpIGNvbnN0IG92ZXJyaWRlOworICAgIGJvb2wg
d2FzQ2FuY2VsZWQoKSBjb25zdCBvdmVycmlkZTsKKworICAgIENhY2hlZFNjcmlwdCYgY2FjaGVk
U2NyaXB0KCkgeyByZXR1cm4gKm1fY2FjaGVkU2NyaXB0OyB9CisgICAgYm9vbCBpc0NsYXNzaWNT
Y3JpcHQoKSBjb25zdCBmaW5hbCB7IHJldHVybiB0cnVlOyB9CisKK3ByaXZhdGU6CisgICAgTG9h
ZGFibGVDbGFzc2ljU2NyaXB0KENhY2hlZFJlc291cmNlSGFuZGxlPENhY2hlZFNjcmlwdD4mJiwg
Y29uc3QgU3RyaW5nJiBjcm9zc09yaWdpbk1vZGUpOworCisgICAgdm9pZCBub3RpZnlGaW5pc2hl
ZChDYWNoZWRSZXNvdXJjZSopIG92ZXJyaWRlOworCisgICAgQ2FjaGVkUmVzb3VyY2VIYW5kbGU8
Q2FjaGVkU2NyaXB0PiBtX2NhY2hlZFNjcmlwdDsKKyAgICBSZWY8U2VjdXJpdHlPcmlnaW4+IG1f
c2VjdXJpdHlPcmlnaW47CisgICAgT3B0aW9uYWw8RXJyb3I+IG1fZXJyb3IgeyBOdWxsb3B0IH07
Cit9OworCit9CisKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQkVHSU4oV2ViQ29yZTo6TG9hZGFi
bGVDbGFzc2ljU2NyaXB0KQorICAgIHN0YXRpYyBib29sIGlzVHlwZShjb25zdCBXZWJDb3JlOjpM
b2FkYWJsZVNjcmlwdCYgc2NyaXB0KSB7IHJldHVybiBzY3JpcHQuaXNDbGFzc2ljU2NyaXB0KCk7
IH0KK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRU5EKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9Mb2FkYWJsZVNjcmlwdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTG9hZGFibGVT
Y3JpcHQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmVmZGI2Yjg5NDg2ZDQ5M2M5OGZiMWY1YjM1NzZiNGM2OTYz
ZTBiNGMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTG9hZGFibGVTY3Jp
cHQuY3BwCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUs
IEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkxvYWRhYmxlU2Ny
aXB0LmgiCisKKyNpbmNsdWRlICJMb2FkYWJsZVNjcmlwdENsaWVudC5oIgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK3ZvaWQgTG9hZGFibGVTY3JpcHQ6OmFkZENsaWVudChMb2FkYWJsZVNjcmlw
dENsaWVudCYgY2xpZW50KQoreworICAgIG1fY2xpZW50cy5hZGQoJmNsaWVudCk7CisgICAgaWYg
KGlzTG9hZGVkKCkpIHsKKyAgICAgICAgUmVmPExvYWRhYmxlU2NyaXB0PiBwcm90ZWN0ZWRUaGlz
KCp0aGlzKTsKKyAgICAgICAgY2xpZW50Lm5vdGlmeUZpbmlzaGVkKCp0aGlzKTsKKyAgICB9Cit9
CisKK3ZvaWQgTG9hZGFibGVTY3JpcHQ6OnJlbW92ZUNsaWVudChMb2FkYWJsZVNjcmlwdENsaWVu
dCYgY2xpZW50KQoreworICAgIG1fY2xpZW50cy5yZW1vdmUoJmNsaWVudCk7Cit9CisKK3ZvaWQg
TG9hZGFibGVTY3JpcHQ6Om5vdGlmeUNsaWVudEZpbmlzaGVkKCkKK3sKKyAgICBSZWZQdHI8TG9h
ZGFibGVTY3JpcHQ+IHByb3RlY3RlZFRoaXModGhpcyk7CisKKyAgICBWZWN0b3I8TG9hZGFibGVT
Y3JpcHRDbGllbnQqPiB2ZWN0b3I7CisgICAgZm9yIChhdXRvJiBwYWlyIDogbV9jbGllbnRzKQor
ICAgICAgICB2ZWN0b3IuYXBwZW5kKHBhaXIua2V5KTsKKyAgICBmb3IgKGF1dG8mIGNsaWVudCA6
IHZlY3RvcikKKyAgICAgICAgY2xpZW50LT5ub3RpZnlGaW5pc2hlZCgqdGhpcyk7Cit9CisKK30K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Mb2FkYWJsZVNjcmlwdC5oIGIvU291cmNl
L1dlYkNvcmUvZG9tL0xvYWRhYmxlU2NyaXB0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODUzMTg0NjkxNTAyODU2
ZGRhZTRmYTc4ZTZlMDU3NDZmMGE5ZGRlNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2RvbS9Mb2FkYWJsZVNjcmlwdC5oCkBAIC0wLDAgKzEsNzQgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTYgQXBwbGUsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRl
IDx3dGYvSGFzaENvdW50ZWRTZXQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIExvYWRhYmxlU2NyaXB0Q2xpZW50OworCitjbGFz
cyBMb2FkYWJsZVNjcmlwdCA6IHB1YmxpYyBSZWZDb3VudGVkPExvYWRhYmxlU2NyaXB0PiB7Citw
dWJsaWM6CisgICAgZW51bSBjbGFzcyBFcnJvclR5cGUgeworICAgICAgICBDYWNoZWRTY3JpcHQs
CisgICAgICAgIENyb3NzT3JpZ2luTG9hZCwKKyAgICAgICAgTm9zbmlmZiwKKyAgICB9OworCisg
ICAgc3RydWN0IENvbnNvbGVNZXNzYWdlIHsKKyAgICAgICAgTWVzc2FnZVNvdXJjZSBzb3VyY2U7
CisgICAgICAgIE1lc3NhZ2VMZXZlbCBsZXZlbDsKKyAgICAgICAgU3RyaW5nIG1lc3NhZ2U7Cisg
ICAgfTsKKworICAgIHN0cnVjdCBFcnJvciB7CisgICAgICAgIEVycm9yVHlwZSB0eXBlOworICAg
ICAgICBPcHRpb25hbDxDb25zb2xlTWVzc2FnZT4gY29uc29sZU1lc3NhZ2U7CisgICAgfTsKKwor
ICAgIHZpcnR1YWwgfkxvYWRhYmxlU2NyaXB0KCkgeyB9CisKKyAgICB2aXJ0dWFsIGJvb2wgaXNM
b2FkZWQoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBPcHRpb25hbDxFcnJvcj4gZXJyb3JPY2N1
cnJlZCgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgd2FzQ2FuY2VsZWQoKSBjb25zdCA9
IDA7CisKKyAgICB2b2lkIGFkZENsaWVudChMb2FkYWJsZVNjcmlwdENsaWVudCYpOworICAgIHZv
aWQgcmVtb3ZlQ2xpZW50KExvYWRhYmxlU2NyaXB0Q2xpZW50Jik7CisKKyAgICB2aXJ0dWFsIGJv
b2wgaXNDbGFzc2ljU2NyaXB0KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFs
IGJvb2wgaXNNb2R1bGVHcmFwaCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisKK3Byb3RlY3Rl
ZDoKKyAgICB2b2lkIG5vdGlmeUNsaWVudEZpbmlzaGVkKCk7CisKK3ByaXZhdGU6CisgICAgRG9j
dW1lbnQmIG1fZG9jdW1lbnQ7CisgICAgSGFzaENvdW50ZWRTZXQ8TG9hZGFibGVTY3JpcHRDbGll
bnQqPiBtX2NsaWVudHM7Cit9OworCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20v
TG9hZGFibGVTY3JpcHRDbGllbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Mb2FkYWJsZVNjcmlw
dENsaWVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmMwNGU5Y2ZmYjZlZDQyZjcwYTZjNTY3ZWZmYzFkMTBmMTgx
NzRlNzIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTG9hZGFibGVTY3Jp
cHRDbGllbnQuaApAQCAtMCwwICsxLDM5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFw
cGxlLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2NsYXNzIExvYWRhYmxlU2NyaXB0OworCitjbGFzcyBMb2FkYWJsZVNjcmlwdENsaWVudCB7Citw
dWJsaWM6CisgICAgdmlydHVhbCB+TG9hZGFibGVTY3JpcHRDbGllbnQoKSB7IH0KKworICAgIHZp
cnR1YWwgdm9pZCBub3RpZnlGaW5pc2hlZChMb2FkYWJsZVNjcmlwdCYpID0gMDsKK307CisKK30K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9QZW5kaW5nU2NyaXB0LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2RvbS9QZW5kaW5nU2NyaXB0LmNwcAppbmRleCA3MWJkYjJkODNlZjNjNjhlMWI1
YmY3OTMxY2NmNzY4N2JiOThhNTZjLi41OWZiNGU3N2JiZDA4ZjE4NWY5ZTAwMGMxNDZhYzVhYTVi
NzA1Mjk1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vUGVuZGluZ1NjcmlwdC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1BlbmRpbmdTY3JpcHQuY3BwCkBAIC0yNiwxNiArMjYs
MTUgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJQZW5kaW5nU2NyaXB0LmgiCiAK
LSNpbmNsdWRlICJDYWNoZWRTY3JpcHQuaCIKICNpbmNsdWRlICJFbGVtZW50LmgiCiAjaW5jbHVk
ZSAiUGVuZGluZ1NjcmlwdENsaWVudC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVJlZjxQ
ZW5kaW5nU2NyaXB0PiBQZW5kaW5nU2NyaXB0OjpjcmVhdGUoRWxlbWVudCYgZWxlbWVudCwgQ2Fj
aGVkU2NyaXB0JiBjYWNoZWRTY3JpcHQpCitSZWY8UGVuZGluZ1NjcmlwdD4gUGVuZGluZ1Njcmlw
dDo6Y3JlYXRlKEVsZW1lbnQmIGVsZW1lbnQsIExvYWRhYmxlU2NyaXB0JiBsb2FkYWJsZVNjcmlw
dCkKIHsKLSAgICBSZWY8UGVuZGluZ1NjcmlwdD4gcGVuZGluZ1NjcmlwdCA9IGFkb3B0UmVmKCpu
ZXcgUGVuZGluZ1NjcmlwdChlbGVtZW50LCBjYWNoZWRTY3JpcHQpKTsKLSAgICBjYWNoZWRTY3Jp
cHQuYWRkQ2xpZW50KCZwZW5kaW5nU2NyaXB0LmdldCgpKTsKKyAgICBSZWY8UGVuZGluZ1Njcmlw
dD4gcGVuZGluZ1NjcmlwdCA9IGFkb3B0UmVmKCpuZXcgUGVuZGluZ1NjcmlwdChlbGVtZW50LCBs
b2FkYWJsZVNjcmlwdCkpOworICAgIGxvYWRhYmxlU2NyaXB0LmFkZENsaWVudChwZW5kaW5nU2Ny
aXB0LmdldCgpKTsKICAgICByZXR1cm4gcGVuZGluZ1NjcmlwdDsKIH0KIApAQCAtNTAsMjEgKzQ5
LDIxIEBAIFBlbmRpbmdTY3JpcHQ6OlBlbmRpbmdTY3JpcHQoRWxlbWVudCYgZWxlbWVudCwgVGV4
dFBvc2l0aW9uIHN0YXJ0aW5nUG9zaXRpb24pCiB7CiB9CiAKLVBlbmRpbmdTY3JpcHQ6OlBlbmRp
bmdTY3JpcHQoRWxlbWVudCYgZWxlbWVudCwgQ2FjaGVkU2NyaXB0JiBjYWNoZWRTY3JpcHQpCitQ
ZW5kaW5nU2NyaXB0OjpQZW5kaW5nU2NyaXB0KEVsZW1lbnQmIGVsZW1lbnQsIExvYWRhYmxlU2Ny
aXB0JiBsb2FkYWJsZVNjcmlwdCkKICAgICA6IG1fZWxlbWVudChlbGVtZW50KQotICAgICwgbV9j
YWNoZWRTY3JpcHQoJmNhY2hlZFNjcmlwdCkKKyAgICAsIG1fbG9hZGFibGVTY3JpcHQoJmxvYWRh
YmxlU2NyaXB0KQogewogfQogCiBQZW5kaW5nU2NyaXB0Ojp+UGVuZGluZ1NjcmlwdCgpCiB7Ci0g
ICAgaWYgKG1fY2FjaGVkU2NyaXB0KQotICAgICAgICBtX2NhY2hlZFNjcmlwdC0+cmVtb3ZlQ2xp
ZW50KHRoaXMpOworICAgIGlmIChtX2xvYWRhYmxlU2NyaXB0KQorICAgICAgICBtX2xvYWRhYmxl
U2NyaXB0LT5yZW1vdmVDbGllbnQoKnRoaXMpOwogfQogCi1DYWNoZWRTY3JpcHQqIFBlbmRpbmdT
Y3JpcHQ6OmNhY2hlZFNjcmlwdCgpIGNvbnN0CitMb2FkYWJsZVNjcmlwdCogUGVuZGluZ1Njcmlw
dDo6bG9hZGFibGVTY3JpcHQoKSBjb25zdAogewotICAgIHJldHVybiBtX2NhY2hlZFNjcmlwdC5n
ZXQoKTsKKyAgICByZXR1cm4gbV9sb2FkYWJsZVNjcmlwdC5nZXQoKTsKIH0KIAogdm9pZCBQZW5k
aW5nU2NyaXB0Ojpub3RpZnlDbGllbnRGaW5pc2hlZCgpCkBAIC03NCwxNCArNzMsMTkgQEAgdm9p
ZCBQZW5kaW5nU2NyaXB0Ojpub3RpZnlDbGllbnRGaW5pc2hlZCgpCiAgICAgICAgIG1fY2xpZW50
LT5ub3RpZnlGaW5pc2hlZCgqdGhpcyk7CiB9CiAKLXZvaWQgUGVuZGluZ1NjcmlwdDo6bm90aWZ5
RmluaXNoZWQoQ2FjaGVkUmVzb3VyY2UqKQordm9pZCBQZW5kaW5nU2NyaXB0Ojpub3RpZnlGaW5p
c2hlZChMb2FkYWJsZVNjcmlwdCYpCiB7CiAgICAgbm90aWZ5Q2xpZW50RmluaXNoZWQoKTsKIH0K
IAogYm9vbCBQZW5kaW5nU2NyaXB0Ojppc0xvYWRlZCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1f
Y2FjaGVkU2NyaXB0ICYmIG1fY2FjaGVkU2NyaXB0LT5pc0xvYWRlZCgpOworICAgIHJldHVybiBt
X2xvYWRhYmxlU2NyaXB0ICYmIG1fbG9hZGFibGVTY3JpcHQtPmlzTG9hZGVkKCk7Cit9CisKK2Jv
b2wgUGVuZGluZ1NjcmlwdDo6ZXJyb3JPY2N1cnJlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1f
bG9hZGFibGVTY3JpcHQgJiYgbV9sb2FkYWJsZVNjcmlwdC0+ZXJyb3JPY2N1cnJlZCgpOwogfQog
CiB2b2lkIFBlbmRpbmdTY3JpcHQ6OnNldENsaWVudChQZW5kaW5nU2NyaXB0Q2xpZW50KiBjbGll
bnQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vUGVuZGluZ1NjcmlwdC5oIGIvU291
cmNlL1dlYkNvcmUvZG9tL1BlbmRpbmdTY3JpcHQuaAppbmRleCAwN2IyZjM1ZTY1M2EzZDNkODhi
YWVkNGFlMDU2NjJhZjhkNDQ3ODIxLi41MGI5MmUzMWYxNDUwMWQ2YWY1NmZiMTllNWE4YWRlZGQ4
NDk2ODY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vUGVuZGluZ1NjcmlwdC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9QZW5kaW5nU2NyaXB0LmgKQEAgLTI1LDggKzI1LDggQEAK
IAogI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUNsaWVudC5oIgotI2lu
Y2x1ZGUgIkNhY2hlZFJlc291cmNlSGFuZGxlLmgiCisjaW5jbHVkZSAiTG9hZGFibGVTY3JpcHQu
aCIKKyNpbmNsdWRlICJMb2FkYWJsZVNjcmlwdENsaWVudC5oIgogI2luY2x1ZGUgPHd0Zi9SZWYu
aD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRQ
b3NpdGlvbi5oPgpAQCAtMzcsMTQgKzM3LDExIEBAIGNsYXNzIENhY2hlZFNjcmlwdDsKIGNsYXNz
IEVsZW1lbnQ7CiBjbGFzcyBQZW5kaW5nU2NyaXB0Q2xpZW50OwogCi0vLyBBIGNvbnRhaW5lciBm
b3IgYW4gZXh0ZXJuYWwgc2NyaXB0IHdoaWNoIG1heSBiZSBsb2FkZWQgYW5kIGV4ZWN1dGVkLgot
Ly8KLS8vIEEgQ2FjaGVkUmVzb3VyY2VIYW5kbGUgYWxvbmUgZG9lcyBub3QgcHJldmVudCB0aGUg
dW5kZXJseWluZyBDYWNoZWRSZXNvdXJjZQotLy8gZnJvbSBwdXJnaW5nIGl0cyBkYXRhIGJ1ZmZl
ci4gVGhpcyBjbGFzcyBob2xkcyBhIGR1bW15IGNsaWVudCBvcGVuIGZvciBpdHMKLS8vIGxpZmV0
aW1lIGluIG9yZGVyIHRvIGd1YXJhbnRlZSB0aGF0IHRoZSBkYXRhIGJ1ZmZlciB3aWxsIG5vdCBi
ZSBwdXJnZWQuCi1jbGFzcyBQZW5kaW5nU2NyaXB0IGZpbmFsIDogcHVibGljIFJlZkNvdW50ZWQ8
UGVuZGluZ1NjcmlwdD4sIHB1YmxpYyBDYWNoZWRSZXNvdXJjZUNsaWVudCB7CisvLyBBIGNvbnRh
aW5lciBmb3Igc2NyaXB0cyB3aGljaCBtYXkgYmUgbG9hZGVkIGFuZCBleGVjdXRlZC4KKy8vIFRo
aXMgY2FuIGhvbGQgTG9hZGFibGVTY3JpcHQgYW5kIG5vbiBleHRlcm5hbCBpbmxpbmUgc2NyaXB0
LgorY2xhc3MgUGVuZGluZ1NjcmlwdCBmaW5hbCA6IHB1YmxpYyBSZWZDb3VudGVkPFBlbmRpbmdT
Y3JpcHQ+LCBwdWJsaWMgTG9hZGFibGVTY3JpcHRDbGllbnQgewogcHVibGljOgotICAgIHN0YXRp
YyBSZWY8UGVuZGluZ1NjcmlwdD4gY3JlYXRlKEVsZW1lbnQmLCBDYWNoZWRTY3JpcHQmKTsKKyAg
ICBzdGF0aWMgUmVmPFBlbmRpbmdTY3JpcHQ+IGNyZWF0ZShFbGVtZW50JiwgTG9hZGFibGVTY3Jp
cHQmKTsKICAgICBzdGF0aWMgUmVmPFBlbmRpbmdTY3JpcHQ+IGNyZWF0ZShFbGVtZW50JiwgVGV4
dFBvc2l0aW9uIHNjcmlwdFN0YXJ0UG9zaXRpb24pOwogCiAgICAgdmlydHVhbCB+UGVuZGluZ1Nj
cmlwdCgpOwpAQCAtNTcsMjUgKzU0LDI2IEBAIGNsYXNzIFBlbmRpbmdTY3JpcHQgZmluYWwgOiBw
dWJsaWMgUmVmQ291bnRlZDxQZW5kaW5nU2NyaXB0PiwgcHVibGljIENhY2hlZFJlc291CiAgICAg
RWxlbWVudCYgZWxlbWVudCgpIHsgcmV0dXJuIG1fZWxlbWVudC5nZXQoKTsgfQogICAgIGNvbnN0
IEVsZW1lbnQmIGVsZW1lbnQoKSBjb25zdCB7IHJldHVybiBtX2VsZW1lbnQuZ2V0KCk7IH0KIAot
ICAgIENhY2hlZFNjcmlwdCogY2FjaGVkU2NyaXB0KCkgY29uc3Q7Ci0gICAgYm9vbCBuZWVkc0xv
YWRpbmcoKSBjb25zdCB7IHJldHVybiBjYWNoZWRTY3JpcHQoKTsgfQorICAgIExvYWRhYmxlU2Ny
aXB0KiBsb2FkYWJsZVNjcmlwdCgpIGNvbnN0OworICAgIGJvb2wgbmVlZHNMb2FkaW5nKCkgY29u
c3QgeyByZXR1cm4gbG9hZGFibGVTY3JpcHQoKTsgfQogCiAgICAgYm9vbCBpc0xvYWRlZCgpIGNv
bnN0OworICAgIGJvb2wgZXJyb3JPY2N1cnJlZCgpIGNvbnN0OwogCi0gICAgdm9pZCBub3RpZnlG
aW5pc2hlZChDYWNoZWRSZXNvdXJjZSopIG92ZXJyaWRlOworICAgIHZvaWQgbm90aWZ5RmluaXNo
ZWQoTG9hZGFibGVTY3JpcHQmKSBvdmVycmlkZTsKIAogICAgIHZvaWQgc2V0Q2xpZW50KFBlbmRp
bmdTY3JpcHRDbGllbnQqKTsKICAgICB2b2lkIGNsZWFyQ2xpZW50KCk7CiAKIHByaXZhdGU6Ci0g
ICAgUGVuZGluZ1NjcmlwdChFbGVtZW50JiwgQ2FjaGVkU2NyaXB0Jik7CisgICAgUGVuZGluZ1Nj
cmlwdChFbGVtZW50JiwgTG9hZGFibGVTY3JpcHQmKTsKICAgICBQZW5kaW5nU2NyaXB0KEVsZW1l
bnQmLCBUZXh0UG9zaXRpb24gc3RhcnRpbmdQb3NpdGlvbik7CiAKICAgICB2b2lkIG5vdGlmeUNs
aWVudEZpbmlzaGVkKCk7CiAKICAgICBSZWY8RWxlbWVudD4gbV9lbGVtZW50OwogICAgIFRleHRQ
b3NpdGlvbiBtX3N0YXJ0aW5nUG9zaXRpb247IC8vIE9ubHkgdXNlZCBmb3IgaW5saW5lIHNjcmlw
dCB0YWdzLgotICAgIENhY2hlZFJlc291cmNlSGFuZGxlPENhY2hlZFNjcmlwdD4gbV9jYWNoZWRT
Y3JpcHQ7CisgICAgUmVmUHRyPExvYWRhYmxlU2NyaXB0PiBtX2xvYWRhYmxlU2NyaXB0OwogICAg
IFBlbmRpbmdTY3JpcHRDbGllbnQqIG1fY2xpZW50IHsgbnVsbHB0ciB9OwogfTsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNv
cmUvZG9tL1NjcmlwdEVsZW1lbnQuY3BwCmluZGV4IGYxODcxMTE1YjMyOGE2ZjEyNjMwOTM2ZTg1
ZWIwOWFiN2ExZjM1N2MuLmU5ZGI5YWE3YTE2MzYzMzQwNTZjMTUxMGZmZjIxZTZiMWZkZGEwZDYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRFbGVtZW50LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0RWxlbWVudC5jcHAKQEAgLTM3LDYgKzM3LDcgQEAKICNp
bmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJIVE1MUGFyc2VySWRpb21zLmgiCiAjaW5j
bHVkZSAiSWdub3JlRGVzdHJ1Y3RpdmVXcml0ZUNvdW50SW5jcmVtZW50ZXIuaCIKKyNpbmNsdWRl
ICJMb2FkYWJsZUNsYXNzaWNTY3JpcHQuaCIKICNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5Lmgi
CiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlNWR05hbWVzLmgiCkBAIC02OCw3ICs2OSw2
IEBAIFNjcmlwdEVsZW1lbnQ6OlNjcmlwdEVsZW1lbnQoRWxlbWVudCYgZWxlbWVudCwgYm9vbCBw
YXJzZXJJbnNlcnRlZCwgYm9vbCBhbHJlYWR5CiAgICAgLCBtX3dpbGxFeGVjdXRlV2hlbkRvY3Vt
ZW50RmluaXNoZWRQYXJzaW5nKGZhbHNlKQogICAgICwgbV9mb3JjZUFzeW5jKCFwYXJzZXJJbnNl
cnRlZCkKICAgICAsIG1fd2lsbEV4ZWN1dGVJbk9yZGVyKGZhbHNlKQotICAgICwgbV9yZXF1ZXN0
VXNlc0FjY2Vzc0NvbnRyb2woZmFsc2UpCiB7CiAgICAgaWYgKHBhcnNlckluc2VydGVkICYmIG1f
ZWxlbWVudC5kb2N1bWVudCgpLnNjcmlwdGFibGVEb2N1bWVudFBhcnNlcigpICYmICFtX2VsZW1l
bnQuZG9jdW1lbnQoKS5pc0luRG9jdW1lbnRXcml0ZSgpKQogICAgICAgICBtX3N0YXJ0TGluZU51
bWJlciA9IG1fZWxlbWVudC5kb2N1bWVudCgpLnNjcmlwdGFibGVEb2N1bWVudFBhcnNlcigpLT50
ZXh0UG9zaXRpb24oKS5tX2xpbmU7CkBAIC05Niw5ICs5Niw5IEBAIHZvaWQgU2NyaXB0RWxlbWVu
dDo6Y2hpbGRyZW5DaGFuZ2VkKCkKICAgICAgICAgcHJlcGFyZVNjcmlwdCgpOyAvLyBGSVhNRTog
UHJvdmlkZSBhIHJlYWwgc3RhcnRpbmcgbGluZSBudW1iZXIgaGVyZS4KIH0KIAotdm9pZCBTY3Jp
cHRFbGVtZW50OjpoYW5kbGVTb3VyY2VBdHRyaWJ1dGUoY29uc3QgU3RyaW5nJiBzb3VyY2VVcmwp
Cit2b2lkIFNjcmlwdEVsZW1lbnQ6OmhhbmRsZVNvdXJjZUF0dHJpYnV0ZShjb25zdCBTdHJpbmcm
IHNvdXJjZVVSTCkKIHsKLSAgICBpZiAoaWdub3Jlc0xvYWRSZXF1ZXN0KCkgfHwgc291cmNlVXJs
LmlzRW1wdHkoKSkKKyAgICBpZiAoaWdub3Jlc0xvYWRSZXF1ZXN0KCkgfHwgc291cmNlVVJMLmlz
RW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgcHJlcGFyZVNjcmlwdCgpOyAvLyBGSVhN
RTogUHJvdmlkZSBhIHJlYWwgc3RhcnRpbmcgbGluZSBudW1iZXIgaGVyZS4KQEAgLTIyNyw5ICsy
MjcsMTAgQEAgYm9vbCBTY3JpcHRFbGVtZW50OjpwcmVwYXJlU2NyaXB0KGNvbnN0IFRleHRQb3Np
dGlvbiYgc2NyaXB0U3RhcnRQb3NpdGlvbiwgTGVnYWMKICAgICBlbHNlCiAgICAgICAgIG1fY2hh
cmFjdGVyRW5jb2RpbmcgPSBkb2N1bWVudC5jaGFyc2V0KCk7CiAKLSAgICBpZiAoaGFzU291cmNl
QXR0cmlidXRlKCkpCi0gICAgICAgIGlmICghcmVxdWVzdFNjcmlwdChzb3VyY2VBdHRyaWJ1dGVW
YWx1ZSgpKSkKKyAgICBpZiAoaGFzU291cmNlQXR0cmlidXRlKCkpIHsKKyAgICAgICAgaWYgKCFy
ZXF1ZXN0Q2xhc3NpY1NjcmlwdChzb3VyY2VBdHRyaWJ1dGVWYWx1ZSgpKSkKICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CiAKICAgICBpZiAoaGFzU291cmNlQXR0cmlidXRlKCkgJiYg
ZGVmZXJBdHRyaWJ1dGVWYWx1ZSgpICYmIG1fcGFyc2VySW5zZXJ0ZWQgJiYgIWFzeW5jQXR0cmli
dXRlVmFsdWUoKSkgewogICAgICAgICBtX3dpbGxFeGVjdXRlV2hlbkRvY3VtZW50RmluaXNoZWRQ
YXJzaW5nID0gdHJ1ZTsKQEAgLTI0MCwxMiArMjQxLDE0IEBAIGJvb2wgU2NyaXB0RWxlbWVudDo6
cHJlcGFyZVNjcmlwdChjb25zdCBUZXh0UG9zaXRpb24mIHNjcmlwdFN0YXJ0UG9zaXRpb24sIExl
Z2FjCiAgICAgICAgIG1fd2lsbEJlUGFyc2VyRXhlY3V0ZWQgPSB0cnVlOwogICAgICAgICBtX3Jl
YWR5VG9CZVBhcnNlckV4ZWN1dGVkID0gdHJ1ZTsKICAgICB9IGVsc2UgaWYgKGhhc1NvdXJjZUF0
dHJpYnV0ZSgpICYmICFhc3luY0F0dHJpYnV0ZVZhbHVlKCkgJiYgIW1fZm9yY2VBc3luYykgewor
ICAgICAgICBBU1NFUlQobV9sb2FkYWJsZVNjcmlwdCk7CiAgICAgICAgIG1fd2lsbEV4ZWN1dGVJ
bk9yZGVyID0gdHJ1ZTsKLSAgICAgICAgZG9jdW1lbnQuc2NyaXB0UnVubmVyKCktPnF1ZXVlU2Ny
aXB0Rm9yRXhlY3V0aW9uKHRoaXMsIG1fY2FjaGVkU2NyaXB0LCBTY3JpcHRSdW5uZXI6OklOX09S
REVSX0VYRUNVVElPTik7Ci0gICAgICAgIG1fY2FjaGVkU2NyaXB0LT5hZGRDbGllbnQodGhpcyk7
CisgICAgICAgIGRvY3VtZW50LnNjcmlwdFJ1bm5lcigpLT5xdWV1ZVNjcmlwdEZvckV4ZWN1dGlv
bih0aGlzLCAqbV9sb2FkYWJsZVNjcmlwdCwgU2NyaXB0UnVubmVyOjpJTl9PUkRFUl9FWEVDVVRJ
T04pOworICAgICAgICBtX2xvYWRhYmxlU2NyaXB0LT5hZGRDbGllbnQoKnRoaXMpOwogICAgIH0g
ZWxzZSBpZiAoaGFzU291cmNlQXR0cmlidXRlKCkpIHsKLSAgICAgICAgbV9lbGVtZW50LmRvY3Vt
ZW50KCkuc2NyaXB0UnVubmVyKCktPnF1ZXVlU2NyaXB0Rm9yRXhlY3V0aW9uKHRoaXMsIG1fY2Fj
aGVkU2NyaXB0LCBTY3JpcHRSdW5uZXI6OkFTWU5DX0VYRUNVVElPTik7Ci0gICAgICAgIG1fY2Fj
aGVkU2NyaXB0LT5hZGRDbGllbnQodGhpcyk7CisgICAgICAgIEFTU0VSVChtX2xvYWRhYmxlU2Ny
aXB0KTsKKyAgICAgICAgbV9lbGVtZW50LmRvY3VtZW50KCkuc2NyaXB0UnVubmVyKCktPnF1ZXVl
U2NyaXB0Rm9yRXhlY3V0aW9uKHRoaXMsICptX2xvYWRhYmxlU2NyaXB0LCBTY3JpcHRSdW5uZXI6
OkFTWU5DX0VYRUNVVElPTik7CisgICAgICAgIG1fbG9hZGFibGVTY3JpcHQtPmFkZENsaWVudCgq
dGhpcyk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgLy8gUmVzZXQgbGluZSBudW1iZXJpbmcgZm9y
IG5lc3RlZCB3cml0ZXMuCiAgICAgICAgIFRleHRQb3NpdGlvbiBwb3NpdGlvbiA9IGRvY3VtZW50
LmlzSW5Eb2N1bWVudFdyaXRlKCkgPyBUZXh0UG9zaXRpb24oKSA6IHNjcmlwdFN0YXJ0UG9zaXRp
b247CkBAIC0yNTUsMzkgKzI1OCw0NSBAQCBib29sIFNjcmlwdEVsZW1lbnQ6OnByZXBhcmVTY3Jp
cHQoY29uc3QgVGV4dFBvc2l0aW9uJiBzY3JpcHRTdGFydFBvc2l0aW9uLCBMZWdhYwogICAgIHJl
dHVybiB0cnVlOwogfQogCi1ib29sIFNjcmlwdEVsZW1lbnQ6OnJlcXVlc3RTY3JpcHQoY29uc3Qg
U3RyaW5nJiBzb3VyY2VVcmwpCitDYWNoZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRTY3JpcHQ+IFNj
cmlwdEVsZW1lbnQ6OnJlcXVlc3RDYWNoZWRTY3JpcHQoY29uc3QgVVJMJiBzb3VyY2VVUkwsIGNv
bnN0IFN0cmluZyYgbm9uY2VBdHRyaWJ1dGUsIGNvbnN0IFN0cmluZyYgY3Jvc3NPcmlnaW5Nb2Rl
KQogewotICAgIFJlZjxEb2N1bWVudD4gb3JpZ2luYWxEb2N1bWVudChtX2VsZW1lbnQuZG9jdW1l
bnQoKSk7Ci0gICAgaWYgKCFtX2VsZW1lbnQuZGlzcGF0Y2hCZWZvcmVMb2FkRXZlbnQoc291cmNl
VXJsKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghbV9lbGVtZW50LmluRG9jdW1l
bnQoKSB8fCAmbV9lbGVtZW50LmRvY3VtZW50KCkgIT0gb3JpZ2luYWxEb2N1bWVudC5wdHIoKSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGJvb2wgaGFzS25vd25Ob25jZSA9IG1fZWxlbWVu
dC5kb2N1bWVudCgpLmNvbnRlbnRTZWN1cml0eVBvbGljeSgpLT5hbGxvd1NjcmlwdFdpdGhOb25j
ZShub25jZUF0dHJpYnV0ZSwgbV9lbGVtZW50LmlzSW5Vc2VyQWdlbnRTaGFkb3dUcmVlKCkpOwor
ICAgIFJlc291cmNlTG9hZGVyT3B0aW9ucyBvcHRpb25zID0gQ2FjaGVkUmVzb3VyY2VMb2FkZXI6
OmRlZmF1bHRDYWNoZWRSZXNvdXJjZU9wdGlvbnMoKTsKKyAgICBvcHRpb25zLmNvbnRlbnRTZWN1
cml0eVBvbGljeUltcG9zaXRpb24gPSBoYXNLbm93bk5vbmNlID8gQ29udGVudFNlY3VyaXR5UG9s
aWN5SW1wb3NpdGlvbjo6U2tpcFBvbGljeUNoZWNrIDogQ29udGVudFNlY3VyaXR5UG9saWN5SW1w
b3NpdGlvbjo6RG9Qb2xpY3lDaGVjazsKIAotICAgIEFTU0VSVCghbV9jYWNoZWRTY3JpcHQpOwot
ICAgIGlmICghc3RyaXBMZWFkaW5nQW5kVHJhaWxpbmdIVE1MU3BhY2VzKHNvdXJjZVVybCkuaXNF
bXB0eSgpKSB7Ci0gICAgICAgIGJvb2wgaGFzS25vd25Ob25jZSA9IG1fZWxlbWVudC5kb2N1bWVu
dCgpLmNvbnRlbnRTZWN1cml0eVBvbGljeSgpLT5hbGxvd1NjcmlwdFdpdGhOb25jZShtX2VsZW1l
bnQuYXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihIVE1MTmFtZXM6Om5vbmNlQXR0ciks
IG1fZWxlbWVudC5pc0luVXNlckFnZW50U2hhZG93VHJlZSgpKTsKLSAgICAgICAgUmVzb3VyY2VM
b2FkZXJPcHRpb25zIG9wdGlvbnMgPSBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6ZGVmYXVsdENhY2hl
ZFJlc291cmNlT3B0aW9ucygpOwotICAgICAgICBvcHRpb25zLmNvbnRlbnRTZWN1cml0eVBvbGlj
eUltcG9zaXRpb24gPSBoYXNLbm93bk5vbmNlID8gQ29udGVudFNlY3VyaXR5UG9saWN5SW1wb3Np
dGlvbjo6U2tpcFBvbGljeUNoZWNrIDogQ29udGVudFNlY3VyaXR5UG9saWN5SW1wb3NpdGlvbjo6
RG9Qb2xpY3lDaGVjazsKKyAgICBDYWNoZWRSZXNvdXJjZVJlcXVlc3QgcmVxdWVzdChSZXNvdXJj
ZVJlcXVlc3Qoc291cmNlVVJMKSwgb3B0aW9ucyk7CisKKyAgICBtX2VsZW1lbnQuZG9jdW1lbnQo
KS5jb250ZW50U2VjdXJpdHlQb2xpY3koKS0+dXBncmFkZUluc2VjdXJlUmVxdWVzdElmTmVlZGVk
KHJlcXVlc3QubXV0YWJsZVJlc291cmNlUmVxdWVzdCgpLCBDb250ZW50U2VjdXJpdHlQb2xpY3k6
Okluc2VjdXJlUmVxdWVzdFR5cGU6OkxvYWQpOworCisgICAgaWYgKCFjcm9zc09yaWdpbk1vZGUu
aXNOdWxsKCkpIHsKKyAgICAgICAgU3RvcmVkQ3JlZGVudGlhbHMgYWxsb3dDcmVkZW50aWFscyA9
IGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGNyb3NzT3JpZ2luTW9kZSwgInVzZS1jcmVk
ZW50aWFscyIpID8gQWxsb3dTdG9yZWRDcmVkZW50aWFscyA6IERvTm90QWxsb3dTdG9yZWRDcmVk
ZW50aWFsczsKKyAgICAgICAgQVNTRVJUKG1fZWxlbWVudC5kb2N1bWVudCgpLnNlY3VyaXR5T3Jp
Z2luKCkpOworICAgICAgICB1cGRhdGVSZXF1ZXN0Rm9yQWNjZXNzQ29udHJvbChyZXF1ZXN0Lm11
dGFibGVSZXNvdXJjZVJlcXVlc3QoKSwgKm1fZWxlbWVudC5kb2N1bWVudCgpLnNlY3VyaXR5T3Jp
Z2luKCksIGFsbG93Q3JlZGVudGlhbHMpOworICAgIH0KIAotICAgICAgICBDYWNoZWRSZXNvdXJj
ZVJlcXVlc3QgcmVxdWVzdChSZXNvdXJjZVJlcXVlc3QobV9lbGVtZW50LmRvY3VtZW50KCkuY29t
cGxldGVVUkwoc291cmNlVXJsKSksIG9wdGlvbnMpOworICAgIHJlcXVlc3Quc2V0Q2hhcnNldChz
Y3JpcHRDaGFyc2V0KCkpOworICAgIHJlcXVlc3Quc2V0SW5pdGlhdG9yKCZlbGVtZW50KCkpOwog
Ci0gICAgICAgIG1fZWxlbWVudC5kb2N1bWVudCgpLmNvbnRlbnRTZWN1cml0eVBvbGljeSgpLT51
cGdyYWRlSW5zZWN1cmVSZXF1ZXN0SWZOZWVkZWQocmVxdWVzdC5tdXRhYmxlUmVzb3VyY2VSZXF1
ZXN0KCksIENvbnRlbnRTZWN1cml0eVBvbGljeTo6SW5zZWN1cmVSZXF1ZXN0VHlwZTo6TG9hZCk7
CisgICAgcmV0dXJuIG1fZWxlbWVudC5kb2N1bWVudCgpLmNhY2hlZFJlc291cmNlTG9hZGVyKCku
cmVxdWVzdFNjcmlwdChyZXF1ZXN0KTsKK30KKworYm9vbCBTY3JpcHRFbGVtZW50OjpyZXF1ZXN0
Q2xhc3NpY1NjcmlwdChjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCkKK3sKKyAgICBSZWY8RG9jdW1l
bnQ+IG9yaWdpbmFsRG9jdW1lbnQobV9lbGVtZW50LmRvY3VtZW50KCkpOworICAgIGlmICghbV9l
bGVtZW50LmRpc3BhdGNoQmVmb3JlTG9hZEV2ZW50KHNvdXJjZVVSTCkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICBib29sIGRpZEV2ZW50TGlzdGVuZXJEaXNjb25uZWN0VGhpc0VsZW1lbnQg
PSAhbV9lbGVtZW50LmluRG9jdW1lbnQoKSB8fCAmbV9lbGVtZW50LmRvY3VtZW50KCkgIT0gb3Jp
Z2luYWxEb2N1bWVudC5wdHIoKTsKKyAgICBpZiAoZGlkRXZlbnRMaXN0ZW5lckRpc2Nvbm5lY3RU
aGlzRWxlbWVudCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCisgICAgQVNTRVJUKCFtX2xvYWRh
YmxlU2NyaXB0KTsKKyAgICBpZiAoIXN0cmlwTGVhZGluZ0FuZFRyYWlsaW5nSFRNTFNwYWNlcyhz
b3VyY2VVUkwpLmlzRW1wdHkoKSkgewogICAgICAgICBTdHJpbmcgY3Jvc3NPcmlnaW5Nb2RlID0g
bV9lbGVtZW50LmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oSFRNTE5hbWVzOjpjcm9z
c29yaWdpbkF0dHIpOwotICAgICAgICBpZiAoIWNyb3NzT3JpZ2luTW9kZS5pc051bGwoKSkgewot
ICAgICAgICAgICAgbV9yZXF1ZXN0VXNlc0FjY2Vzc0NvbnRyb2wgPSB0cnVlOwotICAgICAgICAg
ICAgU3RvcmVkQ3JlZGVudGlhbHMgYWxsb3dDcmVkZW50aWFscyA9IGVxdWFsTGV0dGVyc0lnbm9y
aW5nQVNDSUlDYXNlKGNyb3NzT3JpZ2luTW9kZSwgInVzZS1jcmVkZW50aWFscyIpID8gQWxsb3dT
dG9yZWRDcmVkZW50aWFscyA6IERvTm90QWxsb3dTdG9yZWRDcmVkZW50aWFsczsKLSAgICAgICAg
ICAgIEFTU0VSVChtX2VsZW1lbnQuZG9jdW1lbnQoKS5zZWN1cml0eU9yaWdpbigpKTsKLSAgICAg
ICAgICAgIHVwZGF0ZVJlcXVlc3RGb3JBY2Nlc3NDb250cm9sKHJlcXVlc3QubXV0YWJsZVJlc291
cmNlUmVxdWVzdCgpLCAqbV9lbGVtZW50LmRvY3VtZW50KCkuc2VjdXJpdHlPcmlnaW4oKSwgYWxs
b3dDcmVkZW50aWFscyk7Ci0gICAgICAgIH0KLSAgICAgICAgcmVxdWVzdC5zZXRDaGFyc2V0KHNj
cmlwdENoYXJzZXQoKSk7Ci0gICAgICAgIHJlcXVlc3Quc2V0SW5pdGlhdG9yKCZlbGVtZW50KCkp
OwotCi0gICAgICAgIG1fY2FjaGVkU2NyaXB0ID0gbV9lbGVtZW50LmRvY3VtZW50KCkuY2FjaGVk
UmVzb3VyY2VMb2FkZXIoKS5yZXF1ZXN0U2NyaXB0KHJlcXVlc3QpOworICAgICAgICBtX2xvYWRh
YmxlU2NyaXB0ID0gTG9hZGFibGVDbGFzc2ljU2NyaXB0OjpjcmVhdGUocmVxdWVzdENhY2hlZFNj
cmlwdChtX2VsZW1lbnQuZG9jdW1lbnQoKS5jb21wbGV0ZVVSTChzb3VyY2VVUkwpLCBtX2VsZW1l
bnQuYXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihIVE1MTmFtZXM6Om5vbmNlQXR0ciks
IGNyb3NzT3JpZ2luTW9kZSksIGNyb3NzT3JpZ2luTW9kZSwgKm1fZWxlbWVudC5kb2N1bWVudCgp
LnNlY3VyaXR5T3JpZ2luKCkpOwogICAgICAgICBtX2lzRXh0ZXJuYWxTY3JpcHQgPSB0cnVlOwog
ICAgIH0KIAotICAgIGlmIChtX2NhY2hlZFNjcmlwdCkKKyAgICBpZiAobV9sb2FkYWJsZVNjcmlw
dCkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICBjYWxsT25NYWluVGhyZWFkKFt0aGlzLCBl
bGVtZW50ID0gUmVmPEVsZW1lbnQ+KG1fZWxlbWVudCldIHsKQEAgLTMxMSwxMyArMzIwLDYgQEAg
dm9pZCBTY3JpcHRFbGVtZW50OjpleGVjdXRlU2NyaXB0KGNvbnN0IFNjcmlwdFNvdXJjZUNvZGUm
IHNvdXJjZUNvZGUpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgfQogCi0jaWYgRU5BQkxFKE5P
U05JRkYpCi0gICAgaWYgKG1faXNFeHRlcm5hbFNjcmlwdCAmJiBtX2NhY2hlZFNjcmlwdCAmJiAh
bV9jYWNoZWRTY3JpcHQtPm1pbWVUeXBlQWxsb3dlZEJ5Tm9zbmlmZigpKSB7Ci0gICAgICAgIG1f
ZWxlbWVudC5kb2N1bWVudCgpLmFkZENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2U6OlNlY3Vy
aXR5LCBNZXNzYWdlTGV2ZWw6OkVycm9yLCAiUmVmdXNlZCB0byBleGVjdXRlIHNjcmlwdCBmcm9t
ICciICsgbV9jYWNoZWRTY3JpcHQtPnVybCgpLnN0cmluZ0NlbnRlckVsbGlwc2l6ZWRUb0xlbmd0
aCgpICsgIicgYmVjYXVzZSBpdHMgTUlNRSB0eXBlICgnIiArIG1fY2FjaGVkU2NyaXB0LT5taW1l
VHlwZSgpICsgIicpIGlzIG5vdCBleGVjdXRhYmxlLCBhbmQgc3RyaWN0IE1JTUUgdHlwZSBjaGVj
a2luZyBpcyBlbmFibGVkLiIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotI2VuZGlmCi0KICAg
ICBSZWY8RG9jdW1lbnQ+IGRvY3VtZW50KG1fZWxlbWVudC5kb2N1bWVudCgpKTsKICAgICBpZiAo
RnJhbWUqIGZyYW1lID0gZG9jdW1lbnQtPmZyYW1lKCkpIHsKICAgICAgICAgSWdub3JlRGVzdHJ1
Y3RpdmVXcml0ZUNvdW50SW5jcmVtZW50ZXIgaWdub3JlRGVzY3RydWN0aXZlV3JpdGVDb3VudElu
Y3JlbWVudGVyKG1faXNFeHRlcm5hbFNjcmlwdCA/IGRvY3VtZW50LnB0cigpIDogbnVsbHB0cik7
CkBAIC0zMzIsNTEgKzMzNCw1MCBAQCB2b2lkIFNjcmlwdEVsZW1lbnQ6OmV4ZWN1dGVTY3JpcHQo
Y29uc3QgU2NyaXB0U291cmNlQ29kZSYgc291cmNlQ29kZSkKIAogdm9pZCBTY3JpcHRFbGVtZW50
OjpzdG9wTG9hZFJlcXVlc3QoKQogewotICAgIGlmIChtX2NhY2hlZFNjcmlwdCkgeworICAgIGlm
IChtX2xvYWRhYmxlU2NyaXB0KSB7CiAgICAgICAgIGlmICghbV93aWxsQmVQYXJzZXJFeGVjdXRl
ZCkKLSAgICAgICAgICAgIG1fY2FjaGVkU2NyaXB0LT5yZW1vdmVDbGllbnQodGhpcyk7Ci0gICAg
ICAgIG1fY2FjaGVkU2NyaXB0ID0gbnVsbHB0cjsKKyAgICAgICAgICAgIG1fbG9hZGFibGVTY3Jp
cHQtPnJlbW92ZUNsaWVudCgqdGhpcyk7CisgICAgICAgIG1fbG9hZGFibGVTY3JpcHQgPSBudWxs
cHRyOwogICAgIH0KIH0KIAotdm9pZCBTY3JpcHRFbGVtZW50OjpleGVjdXRlKENhY2hlZFNjcmlw
dCogY2FjaGVkU2NyaXB0KQordm9pZCBTY3JpcHRFbGVtZW50OjpleGVjdXRlU2NyaXB0KExvYWRh
YmxlU2NyaXB0JiBsb2FkYWJsZVNjcmlwdCkKIHsKICAgICBBU1NFUlQoIW1fd2lsbEJlUGFyc2Vy
RXhlY3V0ZWQpOwotICAgIEFTU0VSVChjYWNoZWRTY3JpcHQpOwotICAgIGlmIChjYWNoZWRTY3Jp
cHQtPmVycm9yT2NjdXJyZWQoKSkKKworICAgIGlmIChPcHRpb25hbDxMb2FkYWJsZVNjcmlwdDo6
RXJyb3I+IGVycm9yID0gbG9hZGFibGVTY3JpcHQuZXJyb3JPY2N1cnJlZCgpKSB7CisgICAgICAg
IGlmIChPcHRpb25hbDxMb2FkYWJsZVNjcmlwdDo6Q29uc29sZU1lc3NhZ2U+IG1lc3NhZ2UgPSBl
cnJvci5jb25zb2xlTWVzc2FnZSkKKyAgICAgICAgICAgIG1fZWxlbWVudC5kb2N1bWVudCgpLmFk
ZENvbnNvbGVNZXNzYWdlKG1lc3NhZ2UtPnR5cGUsIG1lc3NhZ2UtPmxldmVsLCBtZXNzYWdlLT5t
ZXNzYWdlKTsKICAgICAgICAgZGlzcGF0Y2hFcnJvckV2ZW50KCk7Ci0gICAgZWxzZSBpZiAoIWNh
Y2hlZFNjcmlwdC0+d2FzQ2FuY2VsZWQoKSkgewotICAgICAgICBleGVjdXRlU2NyaXB0KFNjcmlw
dFNvdXJjZUNvZGUoY2FjaGVkU2NyaXB0KSk7CisgICAgfSBlbHNlIGlmICghbG9hZGFibGVTY3Jp
cHQud2FzQ2FuY2VsZWQoKSkgeworICAgICAgICBleGVjdXRlU2NyaXB0V2l0aG91dERpc3BhdGNo
aW5nRXZlbnQobG9hZGFibGVTY3JpcHQpOwogICAgICAgICBkaXNwYXRjaExvYWRFdmVudCgpOwog
ICAgIH0KLSAgICBjYWNoZWRTY3JpcHQtPnJlbW92ZUNsaWVudCh0aGlzKTsKKyAgICBsb2FkYWJs
ZVNjcmlwdC5yZW1vdmVDbGllbnQoKnRoaXMpOworfQorCit2b2lkIFNjcmlwdEVsZW1lbnQ6OmV4
ZWN1dGVTY3JpcHRXaXRob3V0RGlzcGF0Y2hpbmdFdmVudChMb2FkYWJsZVNjcmlwdCYgbG9hZGFi
bGVTY3JpcHQpCit7CisgICAgc2NyaXB0RWxlbWVudC5leGVjdXRlU2NyaXB0KFNjcmlwdFNvdXJj
ZUNvZGUoJmRvd25jYXN0PExvYWRhYmxlQ2xhc3NpY1NjcmlwdD4oKmxvYWRhYmxlU2NyaXB0KS5j
YWNoZWRTY3JpcHQoKSkpOwogfQogCi12b2lkIFNjcmlwdEVsZW1lbnQ6Om5vdGlmeUZpbmlzaGVk
KENhY2hlZFJlc291cmNlKiByZXNvdXJjZSkKK3ZvaWQgU2NyaXB0RWxlbWVudDo6bm90aWZ5Rmlu
aXNoZWQoTG9hZGFibGVTY3JpcHQmIGxvYWRhYmxlU2NyaXB0KQogewogICAgIEFTU0VSVCghbV93
aWxsQmVQYXJzZXJFeGVjdXRlZCk7CiAKLSAgICAvLyBDYWNoZWRSZXNvdXJjZSBwb3NzaWJseSBp
bnZva2VzIHRoaXMgbm90aWZ5RmluaXNoZWQoKSBtb3JlIHRoYW4KKyAgICAvLyBMb2FkYWJsZVNj
cmlwdCBwb3NzaWJseSBpbnZva2VzIHRoaXMgbm90aWZ5RmluaXNoZWQoKSBtb3JlIHRoYW4KICAg
ICAvLyBvbmNlIGJlY2F1c2UgU2NyaXB0RWxlbWVudCBkb2Vzbid0IHVuc3Vic2NyaWJlIGl0c2Vs
ZiBmcm9tCi0gICAgLy8gQ2FjaGVkUmVzb3VyY2UgaGVyZSBhbmQgZG9lcyBpdCBpbiBleGVjdXRl
KCkgaW5zdGVhZC4KLSAgICAvLyBXZSB1c2UgbV9jYWNoZWRTY3JpcHQgdG8gY2hlY2sgaWYgdGhp
cyBmdW5jdGlvbiBpcyBhbHJlYWR5IGNhbGxlZC4KLSAgICBBU1NFUlRfVU5VU0VEKHJlc291cmNl
LCByZXNvdXJjZSA9PSBtX2NhY2hlZFNjcmlwdCk7Ci0gICAgaWYgKCFtX2NhY2hlZFNjcmlwdCkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1fcmVxdWVzdFVzZXNBY2Nlc3NDb250cm9sICYm
ICFtX2NhY2hlZFNjcmlwdC0+cGFzc2VzU2FtZU9yaWdpblBvbGljeUNoZWNrKCptX2VsZW1lbnQu
ZG9jdW1lbnQoKS5zZWN1cml0eU9yaWdpbigpKSkgewotICAgICAgICBkaXNwYXRjaEVycm9yRXZl
bnQoKTsKLSAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFN0cmluZz4gY29uc29sZU1lc3Nh
Z2UoQVNDSUlMaXRlcmFsKCJDcm9zcy1vcmlnaW4gc2NyaXB0IGxvYWQgZGVuaWVkIGJ5IENyb3Nz
LU9yaWdpbiBSZXNvdXJjZSBTaGFyaW5nIHBvbGljeS4iKSk7Ci0gICAgICAgIG1fZWxlbWVudC5k
b2N1bWVudCgpLmFkZENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2U6OkpTLCBNZXNzYWdlTGV2
ZWw6OkVycm9yLCBjb25zb2xlTWVzc2FnZSk7CisgICAgLy8gTG9hZGFibGVTY3JpcHQgaGVyZSBh
bmQgZG9lcyBpdCBpbiBleGVjdXRlKCkgaW5zdGVhZC4KKyAgICAvLyBXZSB1c2UgbV9sb2FkYWJs
ZVNjcmlwdCB0byBjaGVjayBpZiB0aGlzIGZ1bmN0aW9uIGlzIGFscmVhZHkgY2FsbGVkLgorICAg
IGlmICghbV9sb2FkYWJsZVNjcmlwdCkKICAgICAgICAgcmV0dXJuOwotICAgIH0KIAogICAgIGlm
IChtX3dpbGxFeGVjdXRlSW5PcmRlcikKICAgICAgICAgbV9lbGVtZW50LmRvY3VtZW50KCkuc2Ny
aXB0UnVubmVyKCktPm5vdGlmeVNjcmlwdFJlYWR5KHRoaXMsIFNjcmlwdFJ1bm5lcjo6SU5fT1JE
RVJfRVhFQ1VUSU9OKTsKICAgICBlbHNlCiAgICAgICAgIG1fZWxlbWVudC5kb2N1bWVudCgpLnNj
cmlwdFJ1bm5lcigpLT5ub3RpZnlTY3JpcHRSZWFkeSh0aGlzLCBTY3JpcHRSdW5uZXI6OkFTWU5D
X0VYRUNVVElPTik7CiAKLSAgICBtX2NhY2hlZFNjcmlwdCA9IG51bGxwdHI7CisgICAgbV9sb2Fk
YWJsZVNjcmlwdCA9IG51bGxwdHI7CiB9CiAKIGJvb2wgU2NyaXB0RWxlbWVudDo6aWdub3Jlc0xv
YWRSZXF1ZXN0KCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRF
bGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0RWxlbWVudC5oCmluZGV4IDFhYTRm
MmU4M2IzMTExNzEyNDZhMjMwZTY1ODgwNjJmOWNmM2QwODQuLjk5OWZkYmE2NWZhMGJkMDJmZjFm
MGFmZTU4MGFhZTVhYTUwZWYxZWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TY3Jp
cHRFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdEVsZW1lbnQuaApAQCAt
MTgsMTIgKzE4LDE0IEBACiAgKgogICovCiAKLSNpZm5kZWYgU2NyaXB0RWxlbWVudF9oCi0jZGVm
aW5lIFNjcmlwdEVsZW1lbnRfaAorI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJDYWNoZWRSZXNv
dXJjZUNsaWVudC5oIgogI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlSGFuZGxlLmgiCisjaW5jbHVk
ZSAiTG9hZGFibGVTY3JpcHQuaCIKKyNpbmNsdWRlICJMb2FkYWJsZVNjcmlwdENsaWVudC5oIgog
I2luY2x1ZGUgIlRpbWVyLmgiCisjaW5jbHVkZSAiVVJMLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQv
VGV4dFBvc2l0aW9uLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKQEAgLTM1
LDcgKzM3LDcgQEAgY2xhc3MgRWxlbWVudDsKIGNsYXNzIFNjcmlwdEVsZW1lbnQ7CiBjbGFzcyBT
Y3JpcHRTb3VyY2VDb2RlOwogCi1jbGFzcyBTY3JpcHRFbGVtZW50IDogcHJpdmF0ZSBDYWNoZWRS
ZXNvdXJjZUNsaWVudCB7CitjbGFzcyBTY3JpcHRFbGVtZW50IDogcHJpdmF0ZSBMb2FkYWJsZVNj
cmlwdENsaWVudCB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+U2NyaXB0RWxlbWVudCgpOwogCkBA
IC00Nyw4ICs0OSw5IEBAIGNsYXNzIFNjcmlwdEVsZW1lbnQgOiBwcml2YXRlIENhY2hlZFJlc291
cmNlQ2xpZW50IHsKIAogICAgIFN0cmluZyBzY3JpcHRDaGFyc2V0KCkgY29uc3QgeyByZXR1cm4g
bV9jaGFyYWN0ZXJFbmNvZGluZzsgfQogICAgIFdFQkNPUkVfRVhQT1JUIFN0cmluZyBzY3JpcHRD
b250ZW50KCkgY29uc3Q7CisgICAgdm9pZCBleGVjdXRlU2NyaXB0KExvYWRhYmxlU2NyaXB0Jik7
CiAgICAgdm9pZCBleGVjdXRlU2NyaXB0KGNvbnN0IFNjcmlwdFNvdXJjZUNvZGUmKTsKLSAgICB2
b2lkIGV4ZWN1dGUoQ2FjaGVkU2NyaXB0Kik7CisgICAgdm9pZCBleGVjdXRlU2NyaXB0V2l0aG91
dERpc3BhdGNoaW5nRXZlbnQoTG9hZGFibGVTY3JpcHQmKTsKIAogICAgIC8vIFhNTCBwYXJzZXIg
Y2FsbHMgdGhlc2UKICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hMb2FkRXZlbnQoKSA9IDA7CkBA
IC01OCw3ICs2MSw3IEBAIGNsYXNzIFNjcmlwdEVsZW1lbnQgOiBwcml2YXRlIENhY2hlZFJlc291
cmNlQ2xpZW50IHsKICAgICBib29sIHdpbGxCZVBhcnNlckV4ZWN1dGVkKCkgY29uc3QgeyByZXR1
cm4gbV93aWxsQmVQYXJzZXJFeGVjdXRlZDsgfQogICAgIGJvb2wgcmVhZHlUb0JlUGFyc2VyRXhl
Y3V0ZWQoKSBjb25zdCB7IHJldHVybiBtX3JlYWR5VG9CZVBhcnNlckV4ZWN1dGVkOyB9CiAgICAg
Ym9vbCB3aWxsRXhlY3V0ZVdoZW5Eb2N1bWVudEZpbmlzaGVkUGFyc2luZygpIGNvbnN0IHsgcmV0
dXJuIG1fd2lsbEV4ZWN1dGVXaGVuRG9jdW1lbnRGaW5pc2hlZFBhcnNpbmc7IH0KLSAgICBDYWNo
ZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRTY3JpcHQ+IGNhY2hlZFNjcmlwdCgpIHsgcmV0dXJuIG1f
Y2FjaGVkU2NyaXB0OyB9CisgICAgTG9hZGFibGVTY3JpcHQqIGxvYWRhYmxlU2NyaXB0KCkgeyBy
ZXR1cm4gbV9sb2FkYWJsZVNjcmlwdC5nZXQoKTsgfQogCiBwcm90ZWN0ZWQ6CiAgICAgU2NyaXB0
RWxlbWVudChFbGVtZW50JiwgYm9vbCBjcmVhdGVkQnlQYXJzZXIsIGJvb2wgaXNFdmFsdWF0ZWQp
OwpAQCAtNzIsNyArNzUsNyBAQCBjbGFzcyBTY3JpcHRFbGVtZW50IDogcHJpdmF0ZSBDYWNoZWRS
ZXNvdXJjZUNsaWVudCB7CiAgICAgYm9vbCBzaG91bGRDYWxsRmluaXNoZWRJbnNlcnRpbmdTdWJ0
cmVlKENvbnRhaW5lck5vZGUmKTsKICAgICB2b2lkIGZpbmlzaGVkSW5zZXJ0aW5nU3VidHJlZSgp
OwogICAgIHZvaWQgY2hpbGRyZW5DaGFuZ2VkKCk7Ci0gICAgdm9pZCBoYW5kbGVTb3VyY2VBdHRy
aWJ1dGUoY29uc3QgU3RyaW5nJiBzb3VyY2VVcmwpOworICAgIHZvaWQgaGFuZGxlU291cmNlQXR0
cmlidXRlKGNvbnN0IFN0cmluZyYgc291cmNlVVJMKTsKICAgICB2b2lkIGhhbmRsZUFzeW5jQXR0
cmlidXRlKCk7CiAKIHByaXZhdGU6CkBAIC04MiwxMCArODUsMTIgQEAgY2xhc3MgU2NyaXB0RWxl
bWVudCA6IHByaXZhdGUgQ2FjaGVkUmVzb3VyY2VDbGllbnQgewogICAgIGJvb2wgaWdub3Jlc0xv
YWRSZXF1ZXN0KCkgY29uc3Q7CiAgICAgYm9vbCBpc1NjcmlwdEZvckV2ZW50U3VwcG9ydGVkKCkg
Y29uc3Q7CiAKLSAgICBib29sIHJlcXVlc3RTY3JpcHQoY29uc3QgU3RyaW5nJiBzb3VyY2VVcmwp
OworICAgIENhY2hlZFJlc291cmNlSGFuZGxlPENhY2hlZFNjcmlwdD4gcmVxdWVzdENhY2hlZFNj
cmlwdChjb25zdCBVUkwmLCBjb25zdCBTdHJpbmcmIG5vbmNlQXR0cmlidXRlLCBjb25zdCBTdHJp
bmcmIGNyb3Nzb3JpZ2luQXR0cmlidXRlKTsKKworICAgIGJvb2wgcmVxdWVzdENsYXNzaWNTY3Jp
cHQoY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwpOwogICAgIHZvaWQgc3RvcExvYWRSZXF1ZXN0KCk7
CiAKLSAgICB2b2lkIG5vdGlmeUZpbmlzaGVkKENhY2hlZFJlc291cmNlKikgb3ZlcnJpZGU7Cisg
ICAgdm9pZCBub3RpZnlGaW5pc2hlZChMb2FkYWJsZVNjcmlwdCYpIG92ZXJyaWRlOwogCiAgICAg
dmlydHVhbCBTdHJpbmcgc291cmNlQXR0cmlidXRlVmFsdWUoKSBjb25zdCA9IDA7CiAgICAgdmly
dHVhbCBTdHJpbmcgY2hhcnNldEF0dHJpYnV0ZVZhbHVlKCkgY29uc3QgPSAwOwpAQCAtOTgsNyAr
MTAzLDYgQEAgY2xhc3MgU2NyaXB0RWxlbWVudCA6IHByaXZhdGUgQ2FjaGVkUmVzb3VyY2VDbGll
bnQgewogICAgIHZpcnR1YWwgYm9vbCBoYXNTb3VyY2VBdHRyaWJ1dGUoKSBjb25zdCA9IDA7CiAK
ICAgICBFbGVtZW50JiBtX2VsZW1lbnQ7Ci0gICAgQ2FjaGVkUmVzb3VyY2VIYW5kbGU8Q2FjaGVk
U2NyaXB0PiBtX2NhY2hlZFNjcmlwdDsKICAgICBXVEY6Ok9yZGluYWxOdW1iZXIgbV9zdGFydExp
bmVOdW1iZXI7CiAgICAgYm9vbCBtX3BhcnNlckluc2VydGVkIDogMTsKICAgICBib29sIG1faXNF
eHRlcm5hbFNjcmlwdCA6IDE7CkBAIC0xMDksMTQgKzExMywxMiBAQCBjbGFzcyBTY3JpcHRFbGVt
ZW50IDogcHJpdmF0ZSBDYWNoZWRSZXNvdXJjZUNsaWVudCB7CiAgICAgYm9vbCBtX3dpbGxFeGVj
dXRlV2hlbkRvY3VtZW50RmluaXNoZWRQYXJzaW5nIDogMTsKICAgICBib29sIG1fZm9yY2VBc3lu
YyA6IDE7CiAgICAgYm9vbCBtX3dpbGxFeGVjdXRlSW5PcmRlciA6IDE7Ci0gICAgYm9vbCBtX3Jl
cXVlc3RVc2VzQWNjZXNzQ29udHJvbCA6IDE7CiAgICAgU3RyaW5nIG1fY2hhcmFjdGVyRW5jb2Rp
bmc7CiAgICAgU3RyaW5nIG1fZmFsbGJhY2tDaGFyYWN0ZXJFbmNvZGluZzsKKyAgICBSZWZQdHI8
TG9hZGFibGVTY3JpcHQ+IG1fbG9hZGFibGVTY3JpcHQ7CiB9OwogCiAvLyBGSVhNRTogcmVwbGFj
ZSB3aXRoIGRvd25jYXN0PFNjcmlwdEVsZW1lbnQ+LgogU2NyaXB0RWxlbWVudCogdG9TY3JpcHRF
bGVtZW50SWZQb3NzaWJsZShFbGVtZW50Kik7CiAKIH0KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0UnVubmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9T
Y3JpcHRSdW5uZXIuY3BwCmluZGV4IGE1NThmYWU2MTE0Nzc0Y2Y3NzY3MThkYzIwM2MwZWFkZTA3
YWU0OGYuLmIxYzBiMGMyN2Q4NjM3ZDgyYzNlZDA5ZmE1YWU0NWJjN2QxNWRiOTAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRSdW5uZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2RvbS9TY3JpcHRSdW5uZXIuY3BwCkBAIC0yNiw3ICsyNiw2IEBACiAjaW5jbHVkZSAiY29u
ZmlnLmgiCiAjaW5jbHVkZSAiU2NyaXB0UnVubmVyLmgiCiAKLSNpbmNsdWRlICJDYWNoZWRTY3Jp
cHQuaCIKICNpbmNsdWRlICJFbGVtZW50LmgiCiAjaW5jbHVkZSAiUGVuZGluZ1NjcmlwdC5oIgog
I2luY2x1ZGUgIlNjcmlwdEVsZW1lbnQuaCIKQEAgLTQ5LDEwICs0OCw5IEBAIFNjcmlwdFJ1bm5l
cjo6flNjcmlwdFJ1bm5lcigpCiAgICAgICAgIG1fZG9jdW1lbnQuZGVjcmVtZW50TG9hZEV2ZW50
RGVsYXlDb3VudCgpOwogfQogCi12b2lkIFNjcmlwdFJ1bm5lcjo6cXVldWVTY3JpcHRGb3JFeGVj
dXRpb24oU2NyaXB0RWxlbWVudCogc2NyaXB0RWxlbWVudCwgQ2FjaGVkUmVzb3VyY2VIYW5kbGU8
Q2FjaGVkU2NyaXB0PiBjYWNoZWRTY3JpcHQsIEV4ZWN1dGlvblR5cGUgZXhlY3V0aW9uVHlwZSkK
K3ZvaWQgU2NyaXB0UnVubmVyOjpxdWV1ZVNjcmlwdEZvckV4ZWN1dGlvbihTY3JpcHRFbGVtZW50
KiBzY3JpcHRFbGVtZW50LCBMb2FkYWJsZVNjcmlwdCYgbG9hZGFibGVTY3JpcHQsIEV4ZWN1dGlv
blR5cGUgZXhlY3V0aW9uVHlwZSkKIHsKICAgICBBU1NFUlQoc2NyaXB0RWxlbWVudCk7Ci0gICAg
QVNTRVJUKGNhY2hlZFNjcmlwdC5nZXQoKSk7CiAKICAgICBFbGVtZW50JiBlbGVtZW50ID0gc2Ny
aXB0RWxlbWVudC0+ZWxlbWVudCgpOwogICAgIEFTU0VSVChlbGVtZW50LmluRG9jdW1lbnQoKSk7
CkBAIC02MSwxMSArNTksMTEgQEAgdm9pZCBTY3JpcHRSdW5uZXI6OnF1ZXVlU2NyaXB0Rm9yRXhl
Y3V0aW9uKFNjcmlwdEVsZW1lbnQqIHNjcmlwdEVsZW1lbnQsIENhY2hlZFIKIAogICAgIHN3aXRj
aCAoZXhlY3V0aW9uVHlwZSkgewogICAgIGNhc2UgQVNZTkNfRVhFQ1VUSU9OOgotICAgICAgICBt
X3BlbmRpbmdBc3luY1NjcmlwdHMuYWRkKHNjcmlwdEVsZW1lbnQsIFBlbmRpbmdTY3JpcHQ6OmNy
ZWF0ZShlbGVtZW50LCAqY2FjaGVkU2NyaXB0KSk7CisgICAgICAgIG1fcGVuZGluZ0FzeW5jU2Ny
aXB0cy5hZGQoc2NyaXB0RWxlbWVudCwgUGVuZGluZ1NjcmlwdDo6Y3JlYXRlKGVsZW1lbnQsIGxv
YWRhYmxlU2NyaXB0KSk7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBJTl9PUkRFUl9FWEVD
VVRJT046Ci0gICAgICAgIG1fc2NyaXB0c1RvRXhlY3V0ZUluT3JkZXIuYXBwZW5kKFBlbmRpbmdT
Y3JpcHQ6OmNyZWF0ZShlbGVtZW50LCAqY2FjaGVkU2NyaXB0KSk7CisgICAgICAgIG1fc2NyaXB0
c1RvRXhlY3V0ZUluT3JkZXIuYXBwZW5kKFBlbmRpbmdTY3JpcHQ6OmNyZWF0ZShlbGVtZW50LCBs
b2FkYWJsZVNjcmlwdCkpOwogICAgICAgICBicmVhazsKICAgICB9CiB9CkBAIC0xMTUsOSArMTEz
LDkgQEAgdm9pZCBTY3JpcHRSdW5uZXI6OnRpbWVyRmlyZWQoKQogICAgICAgICAvLyBQYXBlciBv
dmVyIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDQwNTAKICAgICAg
ICAgaWYgKCFzY3JpcHQpCiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgYXV0byogc2Ny
aXB0RWxlbWVudCA9IHRvU2NyaXB0RWxlbWVudElmUG9zc2libGUoJnNjcmlwdC0+ZWxlbWVudCgp
KTsKLSAgICAgICAgQVNTRVJUKHNjcmlwdEVsZW1lbnQpOwotICAgICAgICBzY3JpcHRFbGVtZW50
LT5leGVjdXRlKHNjcmlwdC0+Y2FjaGVkU2NyaXB0KCkpOworICAgICAgICBBU1NFUlQodG9TY3Jp
cHRFbGVtZW50SWZQb3NzaWJsZSgmc2NyaXB0LT5lbGVtZW50KCkpKTsKKyAgICAgICAgQVNTRVJU
KHNjcmlwdC5uZWVkc0xvYWRpbmcoKSk7CisgICAgICAgIHRvU2NyaXB0RWxlbWVudElmUG9zc2li
bGUoJnNjcmlwdC0+ZWxlbWVudCgpKS0+ZXhlY3V0ZVNjcmlwdCgqc2NyaXB0LmxvYWRhYmxlU2Ny
aXB0KCkpOwogICAgICAgICBtX2RvY3VtZW50LmRlY3JlbWVudExvYWRFdmVudERlbGF5Q291bnQo
KTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0UnVubmVy
LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0UnVubmVyLmgKaW5kZXggYmE0MTlmYTkwN2Fj
OGVkNWEzMzczOTQ4Mzk1ZWFlZDE4M2Q2YmMzYy4uZWVlMWEyNjNhOTM5OWRkMDM4MDI2YzAwNjZj
YWIzOGY2YjNkMzU3NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdFJ1bm5l
ci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRSdW5uZXIuaApAQCAtMjMsMTAgKzIz
LDggQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAogICovCiAKLSNpZm5kZWYgU2NyaXB0UnVubmVyX2gKLSNk
ZWZpbmUgU2NyaXB0UnVubmVyX2gKKyNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSAiQ2FjaGVkUmVz
b3VyY2VIYW5kbGUuaCIKICNpbmNsdWRlICJUaW1lci5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFw
Lmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CkBAIC0zNCwxMCArMzIsMTAgQEAKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBDYWNoZWRTY3JpcHQ7CiBjbGFzcyBEb2N1bWVu
dDsKIGNsYXNzIFBlbmRpbmdTY3JpcHQ7CiBjbGFzcyBTY3JpcHRFbGVtZW50OworY2xhc3MgTG9h
ZGFibGVTY3JpcHQ7CiAKIGNsYXNzIFNjcmlwdFJ1bm5lciB7CiAgICAgV1RGX01BS0VfTk9OQ09Q
WUFCTEUoU2NyaXB0UnVubmVyKTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CkBAIC00Niw3ICs0
NCw3IEBAIGNsYXNzIFNjcmlwdFJ1bm5lciB7CiAgICAgflNjcmlwdFJ1bm5lcigpOwogCiAgICAg
ZW51bSBFeGVjdXRpb25UeXBlIHsgQVNZTkNfRVhFQ1VUSU9OLCBJTl9PUkRFUl9FWEVDVVRJT04g
fTsKLSAgICB2b2lkIHF1ZXVlU2NyaXB0Rm9yRXhlY3V0aW9uKFNjcmlwdEVsZW1lbnQqLCBDYWNo
ZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRTY3JpcHQ+LCBFeGVjdXRpb25UeXBlKTsKKyAgICB2b2lk
IHF1ZXVlU2NyaXB0Rm9yRXhlY3V0aW9uKFNjcmlwdEVsZW1lbnQqLCBMb2FkYWJsZVNjcmlwdCYs
IEV4ZWN1dGlvblR5cGUpOwogICAgIGJvb2wgaGFzUGVuZGluZ1NjcmlwdHMoKSBjb25zdCB7IHJl
dHVybiAhbV9zY3JpcHRzVG9FeGVjdXRlU29vbi5pc0VtcHR5KCkgfHwgIW1fc2NyaXB0c1RvRXhl
Y3V0ZUluT3JkZXIuaXNFbXB0eSgpIHx8ICFtX3BlbmRpbmdBc3luY1NjcmlwdHMuaXNFbXB0eSgp
OyB9CiAgICAgdm9pZCBzdXNwZW5kKCk7CiAgICAgdm9pZCByZXN1bWUoKTsKQEAgLTYzLDUgKzYx
LDMgQEAgY2xhc3MgU2NyaXB0UnVubmVyIHsKIH07CiAKIH0KLQotI2VuZGlmCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MU2NyaXB0UnVubmVyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxTY3JpcHRSdW5uZXIuY3BwCmluZGV4IGViNzc4ODQx
NzA0ODE5MmNmNWViMDUwYzZjNTI3ODdmNmEwNDk4MGUuLjkyYzAzY2U5ZTY2NjZhODc0M2YzOTUz
NTI1ZGM1ODlhYjlmMzkyYzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2Vy
L0hUTUxTY3JpcHRSdW5uZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hU
TUxTY3JpcHRSdW5uZXIuY3BwCkBAIC0yNiw4ICsyNiw2IEBACiAjaW5jbHVkZSAiY29uZmlnLmgi
CiAjaW5jbHVkZSAiSFRNTFNjcmlwdFJ1bm5lci5oIgogCi0jaW5jbHVkZSAiQ2FjaGVkU2NyaXB0
LmgiCi0jaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VMb2FkZXIuaCIKICNpbmNsdWRlICJFbGVtZW50
LmgiCiAjaW5jbHVkZSAiRXZlbnQuaCIKICNpbmNsdWRlICJFdmVudE5hbWVzLmgiCkBAIC04OSwx
NyArODcsNiBAQCBpbmxpbmUgUmVmPEV2ZW50PiBjcmVhdGVTY3JpcHRMb2FkRXZlbnQoKQogICAg
IHJldHVybiBFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5sb2FkRXZlbnQsIGZhbHNlLCBmYWxz
ZSk7CiB9CiAKLVNjcmlwdFNvdXJjZUNvZGUgSFRNTFNjcmlwdFJ1bm5lcjo6c291cmNlRnJvbVBl
bmRpbmdTY3JpcHQoY29uc3QgUGVuZGluZ1NjcmlwdCYgc2NyaXB0LCBib29sJiBlcnJvck9jY3Vy
cmVkKSBjb25zdAotewotICAgIGlmIChzY3JpcHQuY2FjaGVkU2NyaXB0KCkpIHsKLSAgICAgICAg
ZXJyb3JPY2N1cnJlZCA9IHNjcmlwdC5jYWNoZWRTY3JpcHQoKS0+ZXJyb3JPY2N1cnJlZCgpOwot
ICAgICAgICBBU1NFUlQoc2NyaXB0LmNhY2hlZFNjcmlwdCgpLT5pc0xvYWRlZCgpKTsKLSAgICAg
ICAgcmV0dXJuIFNjcmlwdFNvdXJjZUNvZGUoc2NyaXB0LmNhY2hlZFNjcmlwdCgpKTsKLSAgICB9
Ci0gICAgZXJyb3JPY2N1cnJlZCA9IGZhbHNlOwotICAgIHJldHVybiBTY3JpcHRTb3VyY2VDb2Rl
KHNjcmlwdC5lbGVtZW50KCkudGV4dENvbnRlbnQoKSwgZG9jdW1lbnRVUkxGb3JTY3JpcHRFeGVj
dXRpb24obV9kb2N1bWVudCksIHNjcmlwdC5zdGFydGluZ1Bvc2l0aW9uKCkpOwotfQotCiBib29s
IEhUTUxTY3JpcHRSdW5uZXI6OmlzUGVuZGluZ1NjcmlwdFJlYWR5KGNvbnN0IFBlbmRpbmdTY3Jp
cHQmIHNjcmlwdCkKIHsKICAgICBpZiAoIW1fZG9jdW1lbnQpCkBAIC0xMjUsOCArMTEyLDcgQEAg
dm9pZCBIVE1MU2NyaXB0UnVubmVyOjpleGVjdXRlUGFyc2luZ0Jsb2NraW5nU2NyaXB0KCkKIAog
dm9pZCBIVE1MU2NyaXB0UnVubmVyOjpleGVjdXRlUGVuZGluZ1NjcmlwdEFuZERpc3BhdGNoRXZl
bnQoUmVmUHRyPFBlbmRpbmdTY3JpcHQ+IHBlbmRpbmdTY3JpcHQpCiB7Ci0gICAgYm9vbCBlcnJv
ck9jY3VycmVkID0gZmFsc2U7Ci0gICAgU2NyaXB0U291cmNlQ29kZSBzb3VyY2VDb2RlID0gc291
cmNlRnJvbVBlbmRpbmdTY3JpcHQoKnBlbmRpbmdTY3JpcHQsIGVycm9yT2NjdXJyZWQpOworICAg
IGJvb2wgZXJyb3JPY2N1cnJlZCA9IHBlbmRpbmdTY3JpcHQtPmVycm9yT2NjdXJyZWQoKTsKIAog
ICAgIC8vIFN0b3Agd2F0Y2hpbmcgbG9hZHMgYmVmb3JlIGV4ZWN1dGVTY3JpcHQgdG8gcHJldmVu
dCByZWN1cnNpb24gaWYgdGhlIHNjcmlwdCByZWxvYWRzIGl0c2VsZi4KICAgICBpZiAocGVuZGlu
Z1NjcmlwdC0+d2F0Y2hpbmdGb3JMb2FkKCkpCkBAIC0xNDIsNyArMTI4LDEwIEBAIHZvaWQgSFRN
TFNjcmlwdFJ1bm5lcjo6ZXhlY3V0ZVBlbmRpbmdTY3JpcHRBbmREaXNwYXRjaEV2ZW50KFJlZlB0
cjxQZW5kaW5nU2NyaXB0CiAgICAgICAgICAgICBzY3JpcHRFbGVtZW50LT5kaXNwYXRjaEVycm9y
RXZlbnQoKTsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBBU1NFUlQoaXNFeGVjdXRpbmdT
Y3JpcHQoKSk7Ci0gICAgICAgICAgICBzY3JpcHRFbGVtZW50LT5leGVjdXRlU2NyaXB0KHNvdXJj
ZUNvZGUpOworICAgICAgICAgICAgaWYgKGF1dG8qIGxvYWRhYmxlU2NyaXB0ID0gcGVuZGluZ1Nj
cmlwdC5sb2FkYWJsZVNjcmlwdCgpKQorICAgICAgICAgICAgICAgIHNjcmlwdEVsZW1lbnQtPmV4
ZWN1dGVTY3JpcHRXaXRob3V0RGlzcGF0Y2hpbmdFdmVudCgqbG9hZGFibGVTY3JpcHQpOworICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHNjcmlwdEVsZW1lbnQtPmV4ZWN1dGVTY3Jp
cHQoU2NyaXB0U291cmNlQ29kZShwZW5kaW5nU2NyaXB0LT5lbGVtZW50KCkudGV4dENvbnRlbnQo
KSwgZG9jdW1lbnRVUkxGb3JTY3JpcHRFeGVjdXRpb24obV9kb2N1bWVudCksIHBlbmRpbmdTY3Jp
cHQtPnN0YXJ0aW5nUG9zaXRpb24oKSkpOwogICAgICAgICAgICAgcGVuZGluZ1NjcmlwdC0+ZWxl
bWVudCgpLmRpc3BhdGNoRXZlbnQoY3JlYXRlU2NyaXB0TG9hZEV2ZW50KCkpOwogICAgICAgICB9
CiAgICAgfQpAQCAtMjM2LDggKzIyNSw5IEBAIHN0YXRpYyBSZWY8UGVuZGluZ1NjcmlwdD4gcmVx
dWVzdFBlbmRpbmdTY3JpcHQoRWxlbWVudCogc2NyaXB0KQogewogICAgIGF1dG8mIHNjcmlwdEVs
ZW1lbnQgPSAqdG9TY3JpcHRFbGVtZW50SWZQb3NzaWJsZShzY3JpcHQpOwogICAgIEFTU0VSVChz
Y3JpcHRFbGVtZW50LndpbGxCZVBhcnNlckV4ZWN1dGVkKCkpOwotICAgIEFTU0VSVChzY3JpcHRF
bGVtZW50LmNhY2hlZFNjcmlwdCgpKTsKLSAgICByZXR1cm4gUGVuZGluZ1NjcmlwdDo6Y3JlYXRl
KCpzY3JpcHQsICpzY3JpcHRFbGVtZW50LmNhY2hlZFNjcmlwdCgpKTsKKyAgICBBU1NFUlQoc2Ny
aXB0RWxlbWVudC5sb2FkYWJsZVNjcmlwdCgpKTsKKworICAgIHJldHVybiBQZW5kaW5nU2NyaXB0
OjpjcmVhdGUoKnNjcmlwdCwgKnNjcmlwdEVsZW1lbnQubG9hZGFibGVTY3JpcHQoKSk7CiB9CiAK
IHZvaWQgSFRNTFNjcmlwdFJ1bm5lcjo6cmVxdWVzdFBhcnNpbmdCbG9ja2luZ1NjcmlwdChFbGVt
ZW50KiBlbGVtZW50KQpAQCAtMjQ2LDcgKzIzNiw3IEBAIHZvaWQgSFRNTFNjcmlwdFJ1bm5lcjo6
cmVxdWVzdFBhcnNpbmdCbG9ja2luZ1NjcmlwdChFbGVtZW50KiBlbGVtZW50KQogICAgIG1fcGFy
c2VyQmxvY2tpbmdTY3JpcHQgPSByZXF1ZXN0UGVuZGluZ1NjcmlwdChlbGVtZW50KTsKICAgICBB
U1NFUlQobV9wYXJzZXJCbG9ja2luZ1NjcmlwdC0+bmVlZHNMb2FkaW5nKCkpOwogCi0gICAgLy8g
V2Ugb25seSBjYXJlIGFib3V0IGEgbG9hZCBjYWxsYmFjayBpZiBjYWNoZWRTY3JpcHQgaXMgbm90
IGFscmVhZHkKKyAgICAvLyBXZSBvbmx5IGNhcmUgYWJvdXQgYSBsb2FkIGNhbGxiYWNrIGlmIExv
YWRhYmxlU2NyaXB0IGlzIG5vdCBhbHJlYWR5CiAgICAgLy8gaW4gdGhlIGNhY2hlLiBDYWxsZXJz
IHdpbGwgYXR0ZW1wdCB0byBydW4gdGhlIG1fcGFyc2VyQmxvY2tpbmdTY3JpcHQKICAgICAvLyBp
ZiBwb3NzaWJsZSBiZWZvcmUgcmV0dXJuaW5nIGNvbnRyb2wgdG8gdGhlIHBhcnNlci4KICAgICBp
ZiAoIW1fcGFyc2VyQmxvY2tpbmdTY3JpcHQtPmlzTG9hZGVkKCkpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MU2NyaXB0UnVubmVyLmggYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL3BhcnNlci9IVE1MU2NyaXB0UnVubmVyLmgKaW5kZXggZTZiNWVkNTI2ODU5MjgwNTEx
MTMyNzA3Y2UwMTI5NTc2ZjcxYzQ5NC4uOTFkODg2YzM4YTZlZDFmZWUxOWFjOWZiNTc4YmQ4NTkz
M2U2NWQ0ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFNjcmlw
dFJ1bm5lci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxTY3JpcHRSdW5u
ZXIuaApAQCAtMzIsOCArMzIsNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIENh
Y2hlZFJlc291cmNlOwotY2xhc3MgQ2FjaGVkU2NyaXB0OwogY2xhc3MgRG9jdW1lbnQ7CiBjbGFz
cyBFbGVtZW50OwogY2xhc3MgRnJhbWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS94bWwv
cGFyc2VyL1hNTERvY3VtZW50UGFyc2VyTGlieG1sMi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS94bWwv
cGFyc2VyL1hNTERvY3VtZW50UGFyc2VyTGlieG1sMi5jcHAKaW5kZXggYTk5ZjlkZTcyNzNhNTYy
ZTE0NmQ5MzUzMjkyYTA1MDBiNDQ0OGQ3ZC4uOGRkNzE5ZWNkZTUzODVhNmY3ZDc0YTZjZmQ1OGQ0
MmRhMGM3NDJhMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9YTUxEb2N1
bWVudFBhcnNlckxpYnhtbDIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvWE1M
RG9jdW1lbnRQYXJzZXJMaWJ4bWwyLmNwcApAQCAtNDUsNiArNDUsNyBAQAogI2luY2x1ZGUgIkhU
TUxOYW1lcy5oIgogI2luY2x1ZGUgIkhUTUxTdHlsZUVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1M
VGVtcGxhdGVFbGVtZW50LmgiCisjaW5jbHVkZSAiTG9hZGFibGVDbGFzc2ljU2NyaXB0LmgiCiAj
aW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlByb2Nlc3NpbmdJbnN0cnVjdGlvbi5oIgogI2lu
Y2x1ZGUgIlJlc291cmNlRXJyb3IuaCIKQEAgLTkyMCw4ICs5MjEsMTAgQEAgdm9pZCBYTUxEb2N1
bWVudFBhcnNlcjo6ZW5kRWxlbWVudE5zKCkKIAogICAgICAgICBpZiAoc2NyaXB0RWxlbWVudC0+
cmVhZHlUb0JlUGFyc2VyRXhlY3V0ZWQoKSkKICAgICAgICAgICAgIHNjcmlwdEVsZW1lbnQtPmV4
ZWN1dGVTY3JpcHQoU2NyaXB0U291cmNlQ29kZShzY3JpcHRFbGVtZW50LT5zY3JpcHRDb250ZW50
KCksIGRvY3VtZW50KCktPnVybCgpLCBtX3NjcmlwdFN0YXJ0UG9zaXRpb24pKTsKLSAgICAgICAg
ZWxzZSBpZiAoc2NyaXB0RWxlbWVudC0+d2lsbEJlUGFyc2VyRXhlY3V0ZWQoKSkgewotICAgICAg
ICAgICAgbV9wZW5kaW5nU2NyaXB0ID0gc2NyaXB0RWxlbWVudC0+Y2FjaGVkU2NyaXB0KCk7Cisg
ICAgICAgIGVsc2UgaWYgKHNjcmlwdEVsZW1lbnQtPndpbGxCZVBhcnNlckV4ZWN1dGVkKCkgJiYg
c2NyaXB0RWxlbWVudC0+bG9hZGFibGVTY3JpcHQoKSAmJiBpczxMb2FkYWJsZUNsYXNzaWNTY3Jp
cHQ+KCpzY3JpcHRFbGVtZW50LT5sb2FkYWJsZVNjcmlwdCgpKSkgeworICAgICAgICAgICAgLy8g
RklYTUU6IEFsbG93ICJtb2R1bGUiIHNjcmlwdHMgZm9yIFhNTCBkb2N1bWVudHMuCisgICAgICAg
ICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYxNjUxCisg
ICAgICAgICAgICBtX3BlbmRpbmdTY3JpcHQgPSAmZG93bmNhc3Q8TG9hZGFibGVDbGFzc2ljU2Ny
aXB0Pigqc2NyaXB0RWxlbWVudC0+bG9hZGFibGVTY3JpcHQoKSkuY2FjaGVkU2NyaXB0KCk7CiAg
ICAgICAgICAgICBtX3NjcmlwdEVsZW1lbnQgPSAmZWxlbWVudDsKICAgICAgICAgICAgIG1fcGVu
ZGluZ1NjcmlwdC0+YWRkQ2xpZW50KHRoaXMpOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>288121</attachid>
            <date>2016-09-07 01:29:30 -0700</date>
            <delta_ts>2016-09-07 15:24:36 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-161674-20160907172705.patch</filename>
            <type>text/plain</type>
            <size>55393</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA1NTM3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTY5MTFjMWUwYTA5ZDVl
NGY0ZGI3Y2IxNzU3NmM4OWZmNzM5OTk0Mi4uNjc3ODc1MGRlMzgxYzYyNmUxMjk0YTgxZWVjMzEx
NDRiODgxNjA3YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDcyIEBACisyMDE2LTA5LTA3ICBZdXN1
a2UgU3V6dWtpICA8dXRhdGFuZS50ZWFAZ21haWwuY29tPgorCisgICAgICAgIEludHJvZHVjZSBh
YnN0cmFjdCBjbGFzcyBMb2FkYWJsZVNjcmlwdCBmb3IgY2xhc3NpYyBzY3JpcHQgYW5kIG1vZHVs
ZSBncmFwaAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTYxNjc0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
Tm8gYmVoYXZpb3IgY2hhbmdlLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAg
ICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGRvbS9Mb2Fk
YWJsZUNsYXNzaWNTY3JpcHQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxvYWRhYmxl
Q2xhc3NpY1NjcmlwdDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkxvYWRhYmxlQ2xhc3Np
Y1NjcmlwdDo6TG9hZGFibGVDbGFzc2ljU2NyaXB0KToKKyAgICAgICAgKFdlYkNvcmU6OkxvYWRh
YmxlQ2xhc3NpY1NjcmlwdDo6fkxvYWRhYmxlQ2xhc3NpY1NjcmlwdCk6CisgICAgICAgIChXZWJD
b3JlOjpMb2FkYWJsZUNsYXNzaWNTY3JpcHQ6OmlzTG9hZGVkKToKKyAgICAgICAgKFdlYkNvcmU6
OkxvYWRhYmxlQ2xhc3NpY1NjcmlwdDo6ZXJyb3JPY2N1cnJlZCk6CisgICAgICAgIChXZWJDb3Jl
OjpMb2FkYWJsZUNsYXNzaWNTY3JpcHQ6Ondhc0NhbmNlbGVkKToKKyAgICAgICAgKFdlYkNvcmU6
OkxvYWRhYmxlQ2xhc3NpY1NjcmlwdDo6bm90aWZ5RmluaXNoZWQpOgorICAgICAgICAqIGRvbS9M
b2FkYWJsZUNsYXNzaWNTY3JpcHQuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvZG9tL1Bl
bmRpbmdTY3JpcHQuaC4KKyAgICAgICAgKGlzVHlwZSk6CisgICAgICAgICogZG9tL0xvYWRhYmxl
U2NyaXB0LmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdFJ1bm5lci5o
LgorICAgICAgICAoV2ViQ29yZTo6TG9hZGFibGVTY3JpcHQ6OmFkZENsaWVudCk6CisgICAgICAg
IChXZWJDb3JlOjpMb2FkYWJsZVNjcmlwdDo6cmVtb3ZlQ2xpZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OkxvYWRhYmxlU2NyaXB0Ojpub3RpZnlDbGllbnRGaW5pc2hlZCk6CisgICAgICAgICogZG9t
L0xvYWRhYmxlU2NyaXB0Lmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRS
dW5uZXIuaC4KKyAgICAgICAgKFdlYkNvcmU6OkxvYWRhYmxlU2NyaXB0Ojp+TG9hZGFibGVTY3Jp
cHQpOgorICAgICAgICAoV2ViQ29yZTo6TG9hZGFibGVTY3JpcHQ6OmlzQ2xhc3NpY1NjcmlwdCk6
CisgICAgICAgIChXZWJDb3JlOjpMb2FkYWJsZVNjcmlwdDo6aXNNb2R1bGVHcmFwaCk6CisgICAg
ICAgICogZG9tL0xvYWRhYmxlU2NyaXB0Q2xpZW50Lmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJD
b3JlL2RvbS9TY3JpcHRSdW5uZXIuaC4KKyAgICAgICAgKFdlYkNvcmU6OkxvYWRhYmxlU2NyaXB0
Q2xpZW50Ojp+TG9hZGFibGVTY3JpcHRDbGllbnQpOgorICAgICAgICAqIGRvbS9QZW5kaW5nU2Ny
aXB0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBlbmRpbmdTY3JpcHQ6OmNyZWF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpQZW5kaW5nU2NyaXB0OjpQZW5kaW5nU2NyaXB0KToKKyAgICAgICAgKFdl
YkNvcmU6OlBlbmRpbmdTY3JpcHQ6On5QZW5kaW5nU2NyaXB0KToKKyAgICAgICAgKFdlYkNvcmU6
OlBlbmRpbmdTY3JpcHQ6OmxvYWRhYmxlU2NyaXB0KToKKyAgICAgICAgKFdlYkNvcmU6OlBlbmRp
bmdTY3JpcHQ6Om5vdGlmeUZpbmlzaGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlBlbmRpbmdTY3Jp
cHQ6OmlzTG9hZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlBlbmRpbmdTY3JpcHQ6OmVycm9yT2Nj
dXJyZWQpOgorICAgICAgICAoV2ViQ29yZTo6UGVuZGluZ1NjcmlwdDo6Y2FjaGVkU2NyaXB0KTog
RGVsZXRlZC4KKyAgICAgICAgKiBkb20vUGVuZGluZ1NjcmlwdC5oOgorICAgICAgICAqIGRvbS9T
Y3JpcHRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdEVsZW1lbnQ6OlNjcmlw
dEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RWxlbWVudDo6aGFuZGxlU291cmNl
QXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdEVsZW1lbnQ6OnByZXBhcmVTY3Jp
cHQpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RWxlbWVudDo6cmVxdWVzdENhY2hlZFNjcmlw
dCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRFbGVtZW50OjpyZXF1ZXN0Q2xhc3NpY1Njcmlw
dCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRFbGVtZW50OjpleGVjdXRlU2NyaXB0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcmlwdEVsZW1lbnQ6OnN0b3BMb2FkUmVxdWVzdCk6CisgICAgICAg
IChXZWJDb3JlOjpTY3JpcHRFbGVtZW50OjpleGVjdXRlU2NyaXB0V2l0aG91dERpc3BhdGNoaW5n
RXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RWxlbWVudDo6bm90aWZ5RmluaXNoZWQp
OgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RWxlbWVudDo6cmVxdWVzdFNjcmlwdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRFbGVtZW50OjpleGVjdXRlKTogRGVsZXRlZC4K
KyAgICAgICAgKiBkb20vU2NyaXB0RWxlbWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0
RWxlbWVudDo6bG9hZGFibGVTY3JpcHQpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RWxlbWVu
dDo6Y2FjaGVkU2NyaXB0KTogRGVsZXRlZC4KKyAgICAgICAgKiBkb20vU2NyaXB0UnVubmVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdFJ1bm5lcjo6cXVldWVTY3JpcHRGb3JFeGVjdXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0UnVubmVyOjp0aW1lckZpcmVkKToKKyAgICAg
ICAgKiBkb20vU2NyaXB0UnVubmVyLmg6CisgICAgICAgICogaHRtbC9wYXJzZXIvSFRNTFNjcmlw
dFJ1bm5lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MU2NyaXB0UnVubmVyOjpleGVjdXRl
UGVuZGluZ1NjcmlwdEFuZERpc3BhdGNoRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6cmVxdWVz
dFBlbmRpbmdTY3JpcHQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNjcmlwdFJ1bm5lcjo6cmVx
dWVzdFBhcnNpbmdCbG9ja2luZ1NjcmlwdCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MU2NyaXB0
UnVubmVyOjpzb3VyY2VGcm9tUGVuZGluZ1NjcmlwdCk6IERlbGV0ZWQuCisgICAgICAgICogaHRt
bC9wYXJzZXIvSFRNTFNjcmlwdFJ1bm5lci5oOgorICAgICAgICAqIHhtbC9wYXJzZXIvWE1MRG9j
dW1lbnRQYXJzZXJMaWJ4bWwyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlhNTERvY3VtZW50UGFy
c2VyOjplbmRFbGVtZW50TnMpOgorCiAyMDE2LTA5LTA2ICBDb21taXQgUXVldWUgIDxjb21taXQt
cXVldWVAd2Via2l0Lm9yZz4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMjA1
NTIxLCByMjA1NTI2LCBhbmQgcjIwNTUzMi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NN
YWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXggYzQyOTBl
NDQ0MDk5N2IxMTdlOTA3ZjM5YmM3YWM2ODk0ZDVlNmNlOC4uYjQ3ZGUzMzNiNWEyZTMxOTk5NmY5
ZTUxMmZlZjQ2Mjk0NGI5NDI4MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKQEAgLTE0MzYsNiArMTQz
Niw4IEBAIHNldChXZWJDb3JlX1NPVVJDRVMKICAgICBkb20vSW5saW5lU3R5bGVTaGVldE93bmVy
LmNwcAogICAgIGRvbS9LZXlib2FyZEV2ZW50LmNwcAogICAgIGRvbS9MaXZlTm9kZUxpc3QuY3Bw
CisgICAgZG9tL0xvYWRhYmxlQ2xhc3NpY1NjcmlwdC5jcHAKKyAgICBkb20vTG9hZGFibGVTY3Jp
cHQuY3BwCiAgICAgZG9tL01lc3NhZ2VDaGFubmVsLmNwcAogICAgIGRvbS9NZXNzYWdlRXZlbnQu
Y3BwCiAgICAgZG9tL01lc3NhZ2VQb3J0LmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDYyZTkyMTU0ZGY3ZGU0NDIxZmYxNGQ5
YzlkZDE2ODk5YWJmZmJlNDguLjVkZGYwMjBkYzlhMjI1M2RhODE3YTM2ZjFiODI0M2FkNTg1NjY0
NDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKQEAgLTYwOTgsNiArNjA5OCwxMSBAQAogCQlFMUZGOEY2RDE4MERCNUJFMDAxMzI2NzQg
LyogQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEUxRkY4RjZCMTgwREI1QkUwMDEzMjY3NCAvKiBDcnlwdG9BbGdv
cml0aG1SZWdpc3RyeS5oICovOyB9OwogCQlFMzg4Mzg5ODFCQUQxNDVGMDBENjJFRTMgLyogU2Ny
aXB0TW9kdWxlTG9hZGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEUzODgzODk0MUJBRDE0NUYwMEQ2MkVFMyAvKiBTY3JpcHRNb2R1bGVMb2FkZXIu
Y3BwICovOyB9OwogCQlFMzg4Mzg5OTFCQUQxNDVGMDBENjJFRTMgLyogU2NyaXB0TW9kdWxlTG9h
ZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMzg4
Mzg5NTFCQUQxNDVGMDBENjJFRTMgLyogU2NyaXB0TW9kdWxlTG9hZGVyLmggKi87IH07CisJCUUz
QjJGMEVCMUQ3RjRDOUQwMEIwQzlEMSAvKiBMb2FkYWJsZUNsYXNzaWNTY3JpcHQuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTNCMkYwRTMxRDdGMzVF
QzAwQjBDOUQxIC8qIExvYWRhYmxlQ2xhc3NpY1NjcmlwdC5jcHAgKi87IH07CisJCUUzQjJGMEVD
MUQ3RjRDQTEwMEIwQzlEMSAvKiBMb2FkYWJsZVNjcmlwdC5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFM0IyRjBFOTFEN0YzRDNDMDBCMEM5RDEgLyog
TG9hZGFibGVTY3JpcHQuY3BwICovOyB9OworCQlFM0IyRjBFRDFEN0Y0Q0EzMDBCMEM5RDEgLyog
TG9hZGFibGVTY3JpcHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEUzQjJGMEU3MUQ3RjM1RUMwMEIwQzlEMSAvKiBMb2FkYWJsZVNjcmlwdC5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUUzQjJGMEVFMUQ3
RjRDQTkwMEIwQzlEMSAvKiBMb2FkYWJsZVNjcmlwdENsaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTNCMkYwRTgxRDdGMzVFQzAwQjBDOUQxIC8q
IExvYWRhYmxlU2NyaXB0Q2xpZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKKwkJRTNCMkYwRjAxRDdGNENCNTAwQjBDOUQxIC8qIExvYWRhYmxlQ2xh
c3NpY1NjcmlwdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRTNCMkYwRTQxRDdGMzVFQzAwQjBDOUQxIC8qIExvYWRhYmxlQ2xhc3NpY1NjcmlwdC5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUUzRkEzODY0
MUQ3MTgxMkQwMEFBNTk1MCAvKiBQZW5kaW5nU2NyaXB0Q2xpZW50LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFM0ZBMzg2MTFENzE2RTc2MDBBQTU5NTAg
LyogUGVuZGluZ1NjcmlwdENsaWVudC5oICovOyB9OwogCQlFNDAxQzI3NTE3Q0U1M0VDMDBDNDFB
MzUgLyogRWxlbWVudEl0ZXJhdG9yQXNzZXJ0aW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQwMUMyNzQxN0NFNTNFQzAwQzQxQTM1IC8qIEVsZW1l
bnRJdGVyYXRvckFzc2VydGlvbnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQlFNDAxRTBBNDFDM0MwQjgzMDBGMzREMTAgLyogU3R5bGVDaGFuZ2Uu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0MDFFMEEz
MUMzQzBCODMwMEYzNEQxMCAvKiBTdHlsZUNoYW5nZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0xMzY3Myw2ICsxMzY3OCwxMSBAQAogCQlFMUZG
OEY2QjE4MERCNUJFMDAxMzI2NzQgLyogQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnkuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnkuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTM4ODM4OTQxQkFEMTQ1RjAwRDYyRUUzIC8qIFNj
cmlwdE1vZHVsZUxvYWRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBTY3JpcHRNb2R1bGVMb2FkZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlF
Mzg4Mzg5NTFCQUQxNDVGMDBENjJFRTMgLyogU2NyaXB0TW9kdWxlTG9hZGVyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNjcmlwdE1vZHVsZUxvYWRlci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlFM0IyRjBFMzFEN0YzNUVDMDBCMEM5RDEgLyogTG9hZGFibGVD
bGFzc2ljU2NyaXB0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExv
YWRhYmxlQ2xhc3NpY1NjcmlwdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUUz
QjJGMEU0MUQ3RjM1RUMwMEIwQzlEMSAvKiBMb2FkYWJsZUNsYXNzaWNTY3JpcHQuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTG9hZGFibGVDbGFzc2ljU2NyaXB0Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUUzQjJGMEU3MUQ3RjM1RUMwMEIwQzlEMSAvKiBMb2Fk
YWJsZVNjcmlwdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMb2FkYWJsZVNj
cmlwdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFM0IyRjBFODFEN0YzNUVDMDBC
MEM5RDEgLyogTG9hZGFibGVTY3JpcHRDbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gTG9hZGFibGVTY3JpcHRDbGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJRTNCMkYwRTkxRDdGM0QzQzAwQjBDOUQxIC8qIExvYWRhYmxlU2NyaXB0LmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExvYWRhYmxlU2NyaXB0LmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTNGQTM4NjExRDcxNkU3NjAwQUE1OTUwIC8qIFBl
bmRpbmdTY3JpcHRDbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGVu
ZGluZ1NjcmlwdENsaWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNDAxQzI3
NDE3Q0U1M0VDMDBDNDFBMzUgLyogRWxlbWVudEl0ZXJhdG9yQXNzZXJ0aW9ucy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFbGVtZW50SXRlcmF0b3JBc3NlcnRpb25zLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0MDFFMEEzMUMzQzBCODMwMEYzNEQxMCAvKiBT
dHlsZUNoYW5nZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdHlsZUNoYW5n
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjMwMzEsNiArMjMwNDEsMTEgQEAK
IAkJCQkxNENGN0MyMDA5RjcxMTA2MDBFQjM2NjUgLyogS2V5Ym9hcmRFdmVudC5pZGwgKi8sCiAJ
CQkJQkM3RkE2MUUwRDFGMENCRDAwREIyMkE5IC8qIExpdmVOb2RlTGlzdC5jcHAgKi8sCiAJCQkJ
QkM3RkE2MUYwRDFGMENCRDAwREIyMkE5IC8qIExpdmVOb2RlTGlzdC5oICovLAorCQkJCUUzQjJG
MEUzMUQ3RjM1RUMwMEIwQzlEMSAvKiBMb2FkYWJsZUNsYXNzaWNTY3JpcHQuY3BwICovLAorCQkJ
CUUzQjJGMEU0MUQ3RjM1RUMwMEIwQzlEMSAvKiBMb2FkYWJsZUNsYXNzaWNTY3JpcHQuaCAqLywK
KwkJCQlFM0IyRjBFOTFEN0YzRDNDMDBCMEM5RDEgLyogTG9hZGFibGVTY3JpcHQuY3BwICovLAor
CQkJCUUzQjJGMEU3MUQ3RjM1RUMwMEIwQzlEMSAvKiBMb2FkYWJsZVNjcmlwdC5oICovLAorCQkJ
CUUzQjJGMEU4MUQ3RjM1RUMwMEIwQzlEMSAvKiBMb2FkYWJsZVNjcmlwdENsaWVudC5oICovLAog
CQkJCUJDOUE2MTQ0MTQ2ODU5RDkwMDYwNTdGRCAvKiBtYWtlX2RvbV9leGNlcHRpb25zLnBsICov
LAogCQkJCUJDOUE2MTQ1MTQ2ODU5RDkwMDYwNTdGRCAvKiBtYWtlX2V2ZW50X2ZhY3RvcnkucGwg
Ki8sCiAJCQkJQkM5QTYxNDYxNDY4NTlEOTAwNjA1N0ZEIC8qIG1ha2VfbmFtZXMucGwgKi8sCkBA
IC0yNDkzOCw2ICsyNDk1Myw3IEBACiAJCQkJQzUxMzdDRjMxMUE1ODM3ODAwNEFEQjk5IC8qIEpT
RE9NU3RyaW5nTGlzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM2NDY0OTgxMUQ4MjM0OTAwNjQ1
NUIwIC8qIEpTRE9NU3RyaW5nTWFwLmggaW4gSGVhZGVycyAqLywKIAkJCQk3Njk0NTYzRDEyMTRE
OTdDMDAwN0NCQUUgLyogSlNET01Ub2tlbkxpc3QuaCBpbiBIZWFkZXJzICovLAorCQkJCUUzQjJG
MEYwMUQ3RjRDQjUwMEIwQzlEMSAvKiBMb2FkYWJsZUNsYXNzaWNTY3JpcHQuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTJFMzdFMDA2MTJEQkM1QTQwMEE2QjIzMyAvKiBKU0RPTVVSTC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQkM2OTMyNzQwRDdFMjkzOTAwQUU0NEQxIC8qIEpTRE9NV2luZG93QmFzZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJNjUyRkJCQkMwREUyN0NCNjAwMDFEMzg2IC8qIEpTRE9NV2lu
ZG93Q3VzdG9tLmggaW4gSGVhZGVycyAqLywKQEAgLTI1MzI0LDYgKzI1MzQwLDcgQEAKIAkJCQlC
MkZBM0RGMTBBQjc1QTZGMDAwRTVBQzQgLyogSlNTVkdSZW5kZXJpbmdJbnRlbnQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUIyRkEzREYzMEFCNzVBNkYwMDBFNUFDNCAvKiBKU1NWR1NjcmlwdEVsZW1l
bnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyRkEzREY1MEFCNzVBNkYwMDBFNUFDNCAvKiBKU1NW
R1NldEVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCUUzQjJGMEVFMUQ3RjRDQTkwMEIwQzlE
MSAvKiBMb2FkYWJsZVNjcmlwdENsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjJGQTNERjcw
QUI3NUE2RjAwMEU1QUM0IC8qIEpTU1ZHU3RvcEVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUIyRkEzREY5MEFCNzVBNkYwMDBFNUFDNCAvKiBKU1NWR1N0cmluZ0xpc3QuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUIyRkEzREZCMEFCNzVBNkYwMDBFNUFDNCAvKiBKU1NWR1N0eWxlRWxlbWVudC5o
IGluIEhlYWRlcnMgKi8sCkBAIC0yNjkzNCw2ICsyNjk1MSw3IEBACiAJCQkJMzdGODE4RkQwRDY1
NzYwNjAwNUUxRjA1IC8qIFdlYkNvcmVVUkxSZXNwb25zZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
NDRBMjBEQjkwRjg0MTY2QzAwQjNFMUZFIC8qIFdlYkNvcmVVUkxSZXNwb25zZUlPUy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJOTNGMTk5RjAwODI0NUU1OTAwMUU5QUJDIC8qIFdlYkNvcmVWaWV3Lmgg
aW4gSGVhZGVycyAqLywKKwkJCQlFM0IyRjBFRDFEN0Y0Q0EzMDBCMEM5RDEgLyogTG9hZGFibGVT
Y3JpcHQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1RTYxNjc0MTg5NDU4MUYwMDlBREY1MCAvKiBX
ZWJEZWJ1Z2dlckFnZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlGRTBEODRFOTEwNDg0MzQ4MDAx
QTE3OUUgLyogV2ViRXZlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTIyNUExNkI1MEQ1QzExRTkw
MDA5MDI5NSAvKiBXZWJFdmVudFJlZ2lvbi5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNzY1OSw2ICsy
NzY3Nyw3IEBACiAJCQkJNDNFREQ2N0UxQjQ4NURCRjAwNjQwRTc1IC8qIENvbWJpbmVkRmlsdGVy
c0FscGhhYmV0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTI2RTk0NEQ4MUFDNEIyREQwMDdCODVC
NSAvKiBDb21iaW5lZFVSTEZpbHRlcnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTU4NEZFMzQx
ODY0RDVBRjAwODQzQjEwIC8qIENvbW1hbmRMaW5lQVBJSG9zdC5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQlFM0IyRjBFQjFEN0Y0QzlEMDBCMEM5RDEgLyogTG9hZGFibGVDbGFzc2ljU2NyaXB0LmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUE1ODRGRTJCMTg2Mzg3MEYwMDg0M0IxMCAvKiBDb21tYW5k
TGluZUFQSU1vZHVsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk2NTUwQjZBMTA5OURGMDI3MDA5
MEQ3ODEgLyogQ29tbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFMUZFMTM3NDE4NDAyQTY3
MDA4OTJGMTMgLyogQ29tbW9uQ3J5cHRvVXRpbGl0aWVzLmNwcCBpbiBTb3VyY2VzICovLApAQCAt
Mjc3NTcsNiArMjc3NzYsNyBAQAogCQkJCUUxNkE4NEY5MTRDODVDQ0MwMDI5NzdERiAvKiBDU1NC
b3JkZXJJbWFnZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzI3NEIzMTE0MEVCRUQ4MDBFQURG
QTYgLyogQ1NTQm9yZGVySW1hZ2VTbGljZVZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTQ5
QUUyRDhFMTM0RUU1MEMwMDcyOTIwQSAvKiBDU1NDYWxjdWxhdGlvblZhbHVlLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCUUzQjJGMEVDMUQ3RjRDQTEwMEIwQzlEMSAvKiBMb2FkYWJsZVNjcmlwdC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzYwNEE0MzBEQjU2MzRFMDAyMDQ3MzkgLyogQ1NTQ2Fu
dmFzVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTFFQkJCRDQwQUFDOUI4NzAwMUZFOEUy
IC8qIENTU0NoYXJzZXRSdWxlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDRUE0NzhGMDk3Q0FB
QzgwMDk0QzlFNCAvKiBDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwIGluIFNvdXJjZXMg
Ki8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vTG9hZGFibGVDbGFzc2ljU2NyaXB0
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Mb2FkYWJsZUNsYXNzaWNTY3JpcHQuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjQxYzk3OWMwNTVmM2Q1MTAzMmE4ZTZhMmU0MGE4NzVhMmZmODhlYjEKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTG9hZGFibGVDbGFzc2ljU2NyaXB0LmNwcApA
QCAtMCwwICsxLDEwNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSwgSW5jLiBB
bGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTG9hZGFibGVDbGFzc2ljU2Ny
aXB0LmgiCisKKyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYv
dGV4dC9TdHJpbmdJbXBsLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUmVmUHRyPExvYWRh
YmxlQ2xhc3NpY1NjcmlwdD4gTG9hZGFibGVDbGFzc2ljU2NyaXB0OjpjcmVhdGUoQ2FjaGVkUmVz
b3VyY2VIYW5kbGU8Q2FjaGVkU2NyaXB0PiYmIGNhY2hlZFNjcmlwdCwgY29uc3QgU3RyaW5nJiBj
cm9zc09yaWdpbk1vZGUsIFNlY3VyaXR5T3JpZ2luJiBzZWN1cml0eU9yaWdpbikKK3sKKyAgICBp
ZiAoIWNhY2hlZFNjcmlwdCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgYXV0byBzY3Jp
cHQgPSBhZG9wdFJlZigqbmV3IExvYWRhYmxlQ2xhc3NpY1NjcmlwdChXVEZNb3ZlKGNhY2hlZFNj
cmlwdCksIGNyb3NzT3JpZ2luTW9kZSwgc2VjdXJpdHlPcmlnaW4pKTsKKyAgICBjYWNoZWRTY3Jp
cHQtPmFkZENsaWVudChzY3JpcHQucHRyKCkpOworICAgIHJldHVybiBXVEZNb3ZlKHNjcmlwdCk7
Cit9CisKK0xvYWRhYmxlQ2xhc3NpY1NjcmlwdDo6TG9hZGFibGVDbGFzc2ljU2NyaXB0KENhY2hl
ZFJlc291cmNlSGFuZGxlPENhY2hlZFNjcmlwdD4mJiBjYWNoZWRTY3JpcHQsIGNvbnN0IFN0cmlu
ZyYgY3Jvc3NPcmlnaW5Nb2RlLCBTZWN1cml0eU9yaWdpbiYgc2VjdXJpdHlPcmlnaW4pCisgICAg
OiBtX2NhY2hlZFNjcmlwdChjYWNoZWRTY3JpcHQpCisgICAgLCBtX3NlY3VyaXR5T3JpZ2luKHNl
Y3VyaXR5T3JpZ2luKQorICAgICwgbV9yZXF1ZXN0VXNlc0FjY2Vzc0NvbnRyb2woIWNyb3NzT3Jp
Z2luTW9kZS5pc051bGwoKSkKK3sKK30KKworTG9hZGFibGVDbGFzc2ljU2NyaXB0Ojp+TG9hZGFi
bGVDbGFzc2ljU2NyaXB0KCkKK3sKKyAgICBtX2NhY2hlZFNjcmlwdC0+cmVtb3ZlQ2xpZW50KHRo
aXMpOworfQorCitib29sIExvYWRhYmxlQ2xhc3NpY1NjcmlwdDo6aXNMb2FkZWQoKSBjb25zdAor
eworICAgIHJldHVybiBtX2NhY2hlZFNjcmlwdC0+aXNMb2FkZWQoKTsKK30KKworT3B0aW9uYWw8
TG9hZGFibGVTY3JpcHQ6OkVycm9yPiBMb2FkYWJsZUNsYXNzaWNTY3JpcHQ6OmVycm9yT2NjdXJy
ZWQoKSBjb25zdAoreworICAgIGlmIChtX2Vycm9yKQorICAgICAgICByZXR1cm4gbV9lcnJvcjsK
KworICAgIGlmIChtX2NhY2hlZFNjcmlwdC0+ZXJyb3JPY2N1cnJlZCgpKQorICAgICAgICByZXR1
cm4gRXJyb3IgeyBFcnJvclR5cGU6OkNhY2hlZFNjcmlwdCwgTnVsbG9wdCB9OworCisgICAgcmV0
dXJuIE51bGxvcHQ7Cit9CisKK2Jvb2wgTG9hZGFibGVDbGFzc2ljU2NyaXB0Ojp3YXNDYW5jZWxl
ZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY2FjaGVkU2NyaXB0LT53YXNDYW5jZWxlZCgpOwor
fQorCit2b2lkIExvYWRhYmxlQ2xhc3NpY1NjcmlwdDo6bm90aWZ5RmluaXNoZWQoQ2FjaGVkUmVz
b3VyY2UqKQoreworICAgIGlmIChtX3JlcXVlc3RVc2VzQWNjZXNzQ29udHJvbCAmJiAhbV9jYWNo
ZWRTY3JpcHQtPnBhc3Nlc1NhbWVPcmlnaW5Qb2xpY3lDaGVjayhtX3NlY3VyaXR5T3JpZ2luLmdl
dCgpKSkgeworICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8U3RyaW5nPiBjb25zb2xlTWVz
c2FnZShBU0NJSUxpdGVyYWwoIkNyb3NzLW9yaWdpbiBzY3JpcHQgbG9hZCBkZW5pZWQgYnkgQ3Jv
c3MtT3JpZ2luIFJlc291cmNlIFNoYXJpbmcgcG9saWN5LiIpKTsKKyAgICAgICAgbV9lcnJvciA9
IEVycm9yIHsKKyAgICAgICAgICAgIEVycm9yVHlwZTo6Q3Jvc3NPcmlnaW5Mb2FkLAorICAgICAg
ICAgICAgQ29uc29sZU1lc3NhZ2UgeworICAgICAgICAgICAgICAgIE1lc3NhZ2VTb3VyY2U6OkpT
LAorICAgICAgICAgICAgICAgIE1lc3NhZ2VMZXZlbDo6RXJyb3IsCisgICAgICAgICAgICAgICAg
Y29uc29sZU1lc3NhZ2UKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKyAgICB9CisKKyNpZiBF
TkFCTEUoTk9TTklGRikKKyAgICBpZiAoIW1fY2FjaGVkU2NyaXB0LT5taW1lVHlwZUFsbG93ZWRC
eU5vc25pZmYoKSkgeworICAgICAgICBtX2Vycm9yID0gRXJyb3IgeworICAgICAgICAgICAgRXJy
b3JUeXBlOjpOb3NuaWZmLAorICAgICAgICAgICAgQ29uc29sZU1lc3NhZ2UgeworICAgICAgICAg
ICAgICAgIE1lc3NhZ2VTb3VyY2U6OlNlY3VyaXR5LAorICAgICAgICAgICAgICAgIE1lc3NhZ2VM
ZXZlbDo6RXJyb3IsCisgICAgICAgICAgICAgICAgbWFrZVN0cmluZygiUmVmdXNlZCB0byBleGVj
dXRlIHNjcmlwdCBmcm9tICciLCBtX2NhY2hlZFNjcmlwdC0+dXJsKCkuc3RyaW5nQ2VudGVyRWxs
aXBzaXplZFRvTGVuZ3RoKCksICInIGJlY2F1c2UgaXRzIE1JTUUgdHlwZSAoJyIsIG1fY2FjaGVk
U2NyaXB0LT5taW1lVHlwZSgpLCAiJykgaXMgbm90IGV4ZWN1dGFibGUsIGFuZCBzdHJpY3QgTUlN
RSB0eXBlIGNoZWNraW5nIGlzIGVuYWJsZWQuIikKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsK
KyAgICB9CisjZW5kaWYKKworICAgIG5vdGlmeUNsaWVudEZpbmlzaGVkKCk7Cit9CisKK30KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Mb2FkYWJsZUNsYXNzaWNTY3JpcHQuaCBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9Mb2FkYWJsZUNsYXNzaWNTY3JpcHQuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yN2Yy
OGIyOTY4NTRkMzAwOThiOTRlYTQ0NzE1YTYwZWM1MDlkNDQ5Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvZG9tL0xvYWRhYmxlQ2xhc3NpY1NjcmlwdC5oCkBAIC0wLDAgKzEsNjgg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUsIEluYy4gQWxsIFJpZ2h0cyBSZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdt
YSBvbmNlCisKKyNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUNsaWVudC5oIgorI2luY2x1ZGUgIkNh
Y2hlZFJlc291cmNlSGFuZGxlLmgiCisjaW5jbHVkZSAiQ2FjaGVkU2NyaXB0LmgiCisjaW5jbHVk
ZSAiTG9hZGFibGVTY3JpcHQuaCIKKyNpbmNsdWRlICJMb2FkYWJsZVNjcmlwdENsaWVudC5oIgor
I2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCisjaW5jbHVkZSA8d3RmL1R5cGVDYXN0cy5oPgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIEEgQ2FjaGVkUmVzb3VyY2VIYW5kbGUgYWxvbmUg
ZG9lcyBub3QgcHJldmVudCB0aGUgdW5kZXJseWluZyBDYWNoZWRSZXNvdXJjZQorLy8gZnJvbSBw
dXJnaW5nIGl0cyBkYXRhIGJ1ZmZlci4gVGhpcyBjbGFzcyBob2xkcyBhIGNsaWVudCB1bnRpbCB0
aGlzIGNsYXNzIGlzCisvLyBkZXN0cm95ZWQgaW4gb3JkZXIgdG8gZ3VhcmFudGVlIHRoYXQgdGhl
IGRhdGEgYnVmZmVyIHdpbGwgbm90IGJlIHB1cmdlZC4KK2NsYXNzIExvYWRhYmxlQ2xhc3NpY1Nj
cmlwdCBmaW5hbCA6IHB1YmxpYyBMb2FkYWJsZVNjcmlwdCwgcHJpdmF0ZSBDYWNoZWRSZXNvdXJj
ZUNsaWVudCB7CitwdWJsaWM6CisgICAgfkxvYWRhYmxlQ2xhc3NpY1NjcmlwdCgpOworCisgICAg
c3RhdGljIFJlZlB0cjxMb2FkYWJsZUNsYXNzaWNTY3JpcHQ+IGNyZWF0ZShDYWNoZWRSZXNvdXJj
ZUhhbmRsZTxDYWNoZWRTY3JpcHQ+JiYsIGNvbnN0IFN0cmluZyYgY3Jvc3NPcmlnaW5Nb2RlLCBT
ZWN1cml0eU9yaWdpbiYpOworICAgIGJvb2wgaXNMb2FkZWQoKSBjb25zdCBvdmVycmlkZTsKKyAg
ICBPcHRpb25hbDxFcnJvcj4gZXJyb3JPY2N1cnJlZCgpIGNvbnN0IG92ZXJyaWRlOworICAgIGJv
b2wgd2FzQ2FuY2VsZWQoKSBjb25zdCBvdmVycmlkZTsKKworICAgIENhY2hlZFNjcmlwdCYgY2Fj
aGVkU2NyaXB0KCkgeyByZXR1cm4gKm1fY2FjaGVkU2NyaXB0OyB9CisgICAgYm9vbCBpc0NsYXNz
aWNTY3JpcHQoKSBjb25zdCBmaW5hbCB7IHJldHVybiB0cnVlOyB9CisKK3ByaXZhdGU6CisgICAg
TG9hZGFibGVDbGFzc2ljU2NyaXB0KENhY2hlZFJlc291cmNlSGFuZGxlPENhY2hlZFNjcmlwdD4m
JiwgY29uc3QgU3RyaW5nJiBjcm9zc09yaWdpbk1vZGUsIFNlY3VyaXR5T3JpZ2luJik7CisKKyAg
ICB2b2lkIG5vdGlmeUZpbmlzaGVkKENhY2hlZFJlc291cmNlKikgb3ZlcnJpZGU7CisKKyAgICBD
YWNoZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRTY3JpcHQ+IG1fY2FjaGVkU2NyaXB0OworICAgIFJl
ZjxTZWN1cml0eU9yaWdpbj4gbV9zZWN1cml0eU9yaWdpbjsKKyAgICBPcHRpb25hbDxFcnJvcj4g
bV9lcnJvciB7IE51bGxvcHQgfTsKKyAgICBib29sIG1fcmVxdWVzdFVzZXNBY2Nlc3NDb250cm9s
OworfTsKKworfQorCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdlYkNvcmU6OkxvYWRh
YmxlQ2xhc3NpY1NjcmlwdCkKKyAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6
TG9hZGFibGVTY3JpcHQmIHNjcmlwdCkgeyByZXR1cm4gc2NyaXB0LmlzQ2xhc3NpY1NjcmlwdCgp
OyB9CitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VORCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vTG9hZGFibGVTY3JpcHQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0xvYWRhYmxl
U2NyaXB0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lZmRiNmI4OTQ4NmQ0OTNjOThmYjFmNWIzNTc2YjRjNjk2
M2UwYjRjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0xvYWRhYmxlU2Ny
aXB0LmNwcApAQCAtMCwwICsxLDU4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxl
LCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJMb2FkYWJsZVNj
cmlwdC5oIgorCisjaW5jbHVkZSAiTG9hZGFibGVTY3JpcHRDbGllbnQuaCIKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCit2b2lkIExvYWRhYmxlU2NyaXB0OjphZGRDbGllbnQoTG9hZGFibGVTY3Jp
cHRDbGllbnQmIGNsaWVudCkKK3sKKyAgICBtX2NsaWVudHMuYWRkKCZjbGllbnQpOworICAgIGlm
IChpc0xvYWRlZCgpKSB7CisgICAgICAgIFJlZjxMb2FkYWJsZVNjcmlwdD4gcHJvdGVjdGVkVGhp
cygqdGhpcyk7CisgICAgICAgIGNsaWVudC5ub3RpZnlGaW5pc2hlZCgqdGhpcyk7CisgICAgfQor
fQorCit2b2lkIExvYWRhYmxlU2NyaXB0OjpyZW1vdmVDbGllbnQoTG9hZGFibGVTY3JpcHRDbGll
bnQmIGNsaWVudCkKK3sKKyAgICBtX2NsaWVudHMucmVtb3ZlKCZjbGllbnQpOworfQorCit2b2lk
IExvYWRhYmxlU2NyaXB0Ojpub3RpZnlDbGllbnRGaW5pc2hlZCgpCit7CisgICAgUmVmUHRyPExv
YWRhYmxlU2NyaXB0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOworCisgICAgVmVjdG9yPExvYWRhYmxl
U2NyaXB0Q2xpZW50Kj4gdmVjdG9yOworICAgIGZvciAoYXV0byYgcGFpciA6IG1fY2xpZW50cykK
KyAgICAgICAgdmVjdG9yLmFwcGVuZChwYWlyLmtleSk7CisgICAgZm9yIChhdXRvJiBjbGllbnQg
OiB2ZWN0b3IpCisgICAgICAgIGNsaWVudC0+bm90aWZ5RmluaXNoZWQoKnRoaXMpOworfQorCit9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vTG9hZGFibGVTY3JpcHQuaCBiL1NvdXJj
ZS9XZWJDb3JlL2RvbS9Mb2FkYWJsZVNjcmlwdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjM2OWNiODNiMDc5NzQ1
MGViYWU1NjUxMmNlMjI4OGNlNmM2MzY3ZTcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9kb20vTG9hZGFibGVTY3JpcHQuaApAQCAtMCwwICsxLDc1IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE2IEFwcGxlLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVk
ZSA8cnVudGltZS9Db25zb2xlVHlwZXMuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaENvdW50ZWRTZXQu
aD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0
cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIExvYWRhYmxlU2NyaXB0Q2xp
ZW50OworCitjbGFzcyBMb2FkYWJsZVNjcmlwdCA6IHB1YmxpYyBSZWZDb3VudGVkPExvYWRhYmxl
U2NyaXB0PiB7CitwdWJsaWM6CisgICAgZW51bSBjbGFzcyBFcnJvclR5cGUgeworICAgICAgICBD
YWNoZWRTY3JpcHQsCisgICAgICAgIENyb3NzT3JpZ2luTG9hZCwKKyAgICAgICAgTm9zbmlmZiwK
KyAgICB9OworCisgICAgc3RydWN0IENvbnNvbGVNZXNzYWdlIHsKKyAgICAgICAgTWVzc2FnZVNv
dXJjZSBzb3VyY2U7CisgICAgICAgIE1lc3NhZ2VMZXZlbCBsZXZlbDsKKyAgICAgICAgU3RyaW5n
IG1lc3NhZ2U7CisgICAgfTsKKworICAgIHN0cnVjdCBFcnJvciB7CisgICAgICAgIEVycm9yVHlw
ZSB0eXBlOworICAgICAgICBPcHRpb25hbDxDb25zb2xlTWVzc2FnZT4gY29uc29sZU1lc3NhZ2U7
CisgICAgfTsKKworICAgIHZpcnR1YWwgfkxvYWRhYmxlU2NyaXB0KCkgeyB9CisKKyAgICB2aXJ0
dWFsIGJvb2wgaXNMb2FkZWQoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBPcHRpb25hbDxFcnJv
cj4gZXJyb3JPY2N1cnJlZCgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgd2FzQ2FuY2Vs
ZWQoKSBjb25zdCA9IDA7CisKKyAgICB2b2lkIGFkZENsaWVudChMb2FkYWJsZVNjcmlwdENsaWVu
dCYpOworICAgIHZvaWQgcmVtb3ZlQ2xpZW50KExvYWRhYmxlU2NyaXB0Q2xpZW50Jik7CisKKyAg
ICB2aXJ0dWFsIGJvb2wgaXNDbGFzc2ljU2NyaXB0KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0K
KyAgICB2aXJ0dWFsIGJvb2wgaXNNb2R1bGVHcmFwaCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9
CisKK3Byb3RlY3RlZDoKKyAgICB2b2lkIG5vdGlmeUNsaWVudEZpbmlzaGVkKCk7CisKK3ByaXZh
dGU6CisgICAgSGFzaENvdW50ZWRTZXQ8TG9hZGFibGVTY3JpcHRDbGllbnQqPiBtX2NsaWVudHM7
Cit9OworCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vTG9hZGFibGVTY3JpcHRD
bGllbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Mb2FkYWJsZVNjcmlwdENsaWVudC5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmMwNGU5Y2ZmYjZlZDQyZjcwYTZjNTY3ZWZmYzFkMTBmMTgxNzRlNzIKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTG9hZGFibGVTY3JpcHRDbGllbnQuaApAQCAt
MCwwICsxLDM5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlLCBJbmMuIEFsbCBS
aWdodHMgUmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNwcmFnbWEgb25jZQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIExvYWRhYmxl
U2NyaXB0OworCitjbGFzcyBMb2FkYWJsZVNjcmlwdENsaWVudCB7CitwdWJsaWM6CisgICAgdmly
dHVhbCB+TG9hZGFibGVTY3JpcHRDbGllbnQoKSB7IH0KKworICAgIHZpcnR1YWwgdm9pZCBub3Rp
ZnlGaW5pc2hlZChMb2FkYWJsZVNjcmlwdCYpID0gMDsKK307CisKK30KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9QZW5kaW5nU2NyaXB0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Q
ZW5kaW5nU2NyaXB0LmNwcAppbmRleCA3MWJkYjJkODNlZjNjNjhlMWI1YmY3OTMxY2NmNzY4N2Ji
OThhNTZjLi41OWZiNGU3N2JiZDA4ZjE4NWY5ZTAwMGMxNDZhYzVhYTViNzA1Mjk1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vUGVuZGluZ1NjcmlwdC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvZG9tL1BlbmRpbmdTY3JpcHQuY3BwCkBAIC0yNiwxNiArMjYsMTUgQEAKICNpbmNsdWRl
ICJjb25maWcuaCIKICNpbmNsdWRlICJQZW5kaW5nU2NyaXB0LmgiCiAKLSNpbmNsdWRlICJDYWNo
ZWRTY3JpcHQuaCIKICNpbmNsdWRlICJFbGVtZW50LmgiCiAjaW5jbHVkZSAiUGVuZGluZ1Njcmlw
dENsaWVudC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVJlZjxQZW5kaW5nU2NyaXB0PiBQ
ZW5kaW5nU2NyaXB0OjpjcmVhdGUoRWxlbWVudCYgZWxlbWVudCwgQ2FjaGVkU2NyaXB0JiBjYWNo
ZWRTY3JpcHQpCitSZWY8UGVuZGluZ1NjcmlwdD4gUGVuZGluZ1NjcmlwdDo6Y3JlYXRlKEVsZW1l
bnQmIGVsZW1lbnQsIExvYWRhYmxlU2NyaXB0JiBsb2FkYWJsZVNjcmlwdCkKIHsKLSAgICBSZWY8
UGVuZGluZ1NjcmlwdD4gcGVuZGluZ1NjcmlwdCA9IGFkb3B0UmVmKCpuZXcgUGVuZGluZ1Njcmlw
dChlbGVtZW50LCBjYWNoZWRTY3JpcHQpKTsKLSAgICBjYWNoZWRTY3JpcHQuYWRkQ2xpZW50KCZw
ZW5kaW5nU2NyaXB0LmdldCgpKTsKKyAgICBSZWY8UGVuZGluZ1NjcmlwdD4gcGVuZGluZ1Njcmlw
dCA9IGFkb3B0UmVmKCpuZXcgUGVuZGluZ1NjcmlwdChlbGVtZW50LCBsb2FkYWJsZVNjcmlwdCkp
OworICAgIGxvYWRhYmxlU2NyaXB0LmFkZENsaWVudChwZW5kaW5nU2NyaXB0LmdldCgpKTsKICAg
ICByZXR1cm4gcGVuZGluZ1NjcmlwdDsKIH0KIApAQCAtNTAsMjEgKzQ5LDIxIEBAIFBlbmRpbmdT
Y3JpcHQ6OlBlbmRpbmdTY3JpcHQoRWxlbWVudCYgZWxlbWVudCwgVGV4dFBvc2l0aW9uIHN0YXJ0
aW5nUG9zaXRpb24pCiB7CiB9CiAKLVBlbmRpbmdTY3JpcHQ6OlBlbmRpbmdTY3JpcHQoRWxlbWVu
dCYgZWxlbWVudCwgQ2FjaGVkU2NyaXB0JiBjYWNoZWRTY3JpcHQpCitQZW5kaW5nU2NyaXB0OjpQ
ZW5kaW5nU2NyaXB0KEVsZW1lbnQmIGVsZW1lbnQsIExvYWRhYmxlU2NyaXB0JiBsb2FkYWJsZVNj
cmlwdCkKICAgICA6IG1fZWxlbWVudChlbGVtZW50KQotICAgICwgbV9jYWNoZWRTY3JpcHQoJmNh
Y2hlZFNjcmlwdCkKKyAgICAsIG1fbG9hZGFibGVTY3JpcHQoJmxvYWRhYmxlU2NyaXB0KQogewog
fQogCiBQZW5kaW5nU2NyaXB0Ojp+UGVuZGluZ1NjcmlwdCgpCiB7Ci0gICAgaWYgKG1fY2FjaGVk
U2NyaXB0KQotICAgICAgICBtX2NhY2hlZFNjcmlwdC0+cmVtb3ZlQ2xpZW50KHRoaXMpOworICAg
IGlmIChtX2xvYWRhYmxlU2NyaXB0KQorICAgICAgICBtX2xvYWRhYmxlU2NyaXB0LT5yZW1vdmVD
bGllbnQoKnRoaXMpOwogfQogCi1DYWNoZWRTY3JpcHQqIFBlbmRpbmdTY3JpcHQ6OmNhY2hlZFNj
cmlwdCgpIGNvbnN0CitMb2FkYWJsZVNjcmlwdCogUGVuZGluZ1NjcmlwdDo6bG9hZGFibGVTY3Jp
cHQoKSBjb25zdAogewotICAgIHJldHVybiBtX2NhY2hlZFNjcmlwdC5nZXQoKTsKKyAgICByZXR1
cm4gbV9sb2FkYWJsZVNjcmlwdC5nZXQoKTsKIH0KIAogdm9pZCBQZW5kaW5nU2NyaXB0Ojpub3Rp
ZnlDbGllbnRGaW5pc2hlZCgpCkBAIC03NCwxNCArNzMsMTkgQEAgdm9pZCBQZW5kaW5nU2NyaXB0
Ojpub3RpZnlDbGllbnRGaW5pc2hlZCgpCiAgICAgICAgIG1fY2xpZW50LT5ub3RpZnlGaW5pc2hl
ZCgqdGhpcyk7CiB9CiAKLXZvaWQgUGVuZGluZ1NjcmlwdDo6bm90aWZ5RmluaXNoZWQoQ2FjaGVk
UmVzb3VyY2UqKQordm9pZCBQZW5kaW5nU2NyaXB0Ojpub3RpZnlGaW5pc2hlZChMb2FkYWJsZVNj
cmlwdCYpCiB7CiAgICAgbm90aWZ5Q2xpZW50RmluaXNoZWQoKTsKIH0KIAogYm9vbCBQZW5kaW5n
U2NyaXB0Ojppc0xvYWRlZCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fY2FjaGVkU2NyaXB0ICYm
IG1fY2FjaGVkU2NyaXB0LT5pc0xvYWRlZCgpOworICAgIHJldHVybiBtX2xvYWRhYmxlU2NyaXB0
ICYmIG1fbG9hZGFibGVTY3JpcHQtPmlzTG9hZGVkKCk7Cit9CisKK2Jvb2wgUGVuZGluZ1Njcmlw
dDo6ZXJyb3JPY2N1cnJlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbG9hZGFibGVTY3JpcHQg
JiYgbV9sb2FkYWJsZVNjcmlwdC0+ZXJyb3JPY2N1cnJlZCgpOwogfQogCiB2b2lkIFBlbmRpbmdT
Y3JpcHQ6OnNldENsaWVudChQZW5kaW5nU2NyaXB0Q2xpZW50KiBjbGllbnQpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9kb20vUGVuZGluZ1NjcmlwdC5oIGIvU291cmNlL1dlYkNvcmUvZG9t
L1BlbmRpbmdTY3JpcHQuaAppbmRleCAwN2IyZjM1ZTY1M2EzZDNkODhiYWVkNGFlMDU2NjJhZjhk
NDQ3ODIxLi41MGI5MmUzMWYxNDUwMWQ2YWY1NmZiMTllNWE4YWRlZGQ4NDk2ODY1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vUGVuZGluZ1NjcmlwdC5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2RvbS9QZW5kaW5nU2NyaXB0LmgKQEAgLTI1LDggKzI1LDggQEAKIAogI3ByYWdtYSBvbmNl
CiAKLSNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUNsaWVudC5oIgotI2luY2x1ZGUgIkNhY2hlZFJl
c291cmNlSGFuZGxlLmgiCisjaW5jbHVkZSAiTG9hZGFibGVTY3JpcHQuaCIKKyNpbmNsdWRlICJM
b2FkYWJsZVNjcmlwdENsaWVudC5oIgogI2luY2x1ZGUgPHd0Zi9SZWYuaD4KICNpbmNsdWRlIDx3
dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRQb3NpdGlvbi5oPgpAQCAt
MzcsMTQgKzM3LDExIEBAIGNsYXNzIENhY2hlZFNjcmlwdDsKIGNsYXNzIEVsZW1lbnQ7CiBjbGFz
cyBQZW5kaW5nU2NyaXB0Q2xpZW50OwogCi0vLyBBIGNvbnRhaW5lciBmb3IgYW4gZXh0ZXJuYWwg
c2NyaXB0IHdoaWNoIG1heSBiZSBsb2FkZWQgYW5kIGV4ZWN1dGVkLgotLy8KLS8vIEEgQ2FjaGVk
UmVzb3VyY2VIYW5kbGUgYWxvbmUgZG9lcyBub3QgcHJldmVudCB0aGUgdW5kZXJseWluZyBDYWNo
ZWRSZXNvdXJjZQotLy8gZnJvbSBwdXJnaW5nIGl0cyBkYXRhIGJ1ZmZlci4gVGhpcyBjbGFzcyBo
b2xkcyBhIGR1bW15IGNsaWVudCBvcGVuIGZvciBpdHMKLS8vIGxpZmV0aW1lIGluIG9yZGVyIHRv
IGd1YXJhbnRlZSB0aGF0IHRoZSBkYXRhIGJ1ZmZlciB3aWxsIG5vdCBiZSBwdXJnZWQuCi1jbGFz
cyBQZW5kaW5nU2NyaXB0IGZpbmFsIDogcHVibGljIFJlZkNvdW50ZWQ8UGVuZGluZ1NjcmlwdD4s
IHB1YmxpYyBDYWNoZWRSZXNvdXJjZUNsaWVudCB7CisvLyBBIGNvbnRhaW5lciBmb3Igc2NyaXB0
cyB3aGljaCBtYXkgYmUgbG9hZGVkIGFuZCBleGVjdXRlZC4KKy8vIFRoaXMgY2FuIGhvbGQgTG9h
ZGFibGVTY3JpcHQgYW5kIG5vbiBleHRlcm5hbCBpbmxpbmUgc2NyaXB0LgorY2xhc3MgUGVuZGlu
Z1NjcmlwdCBmaW5hbCA6IHB1YmxpYyBSZWZDb3VudGVkPFBlbmRpbmdTY3JpcHQ+LCBwdWJsaWMg
TG9hZGFibGVTY3JpcHRDbGllbnQgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8UGVuZGluZ1Nj
cmlwdD4gY3JlYXRlKEVsZW1lbnQmLCBDYWNoZWRTY3JpcHQmKTsKKyAgICBzdGF0aWMgUmVmPFBl
bmRpbmdTY3JpcHQ+IGNyZWF0ZShFbGVtZW50JiwgTG9hZGFibGVTY3JpcHQmKTsKICAgICBzdGF0
aWMgUmVmPFBlbmRpbmdTY3JpcHQ+IGNyZWF0ZShFbGVtZW50JiwgVGV4dFBvc2l0aW9uIHNjcmlw
dFN0YXJ0UG9zaXRpb24pOwogCiAgICAgdmlydHVhbCB+UGVuZGluZ1NjcmlwdCgpOwpAQCAtNTcs
MjUgKzU0LDI2IEBAIGNsYXNzIFBlbmRpbmdTY3JpcHQgZmluYWwgOiBwdWJsaWMgUmVmQ291bnRl
ZDxQZW5kaW5nU2NyaXB0PiwgcHVibGljIENhY2hlZFJlc291CiAgICAgRWxlbWVudCYgZWxlbWVu
dCgpIHsgcmV0dXJuIG1fZWxlbWVudC5nZXQoKTsgfQogICAgIGNvbnN0IEVsZW1lbnQmIGVsZW1l
bnQoKSBjb25zdCB7IHJldHVybiBtX2VsZW1lbnQuZ2V0KCk7IH0KIAotICAgIENhY2hlZFNjcmlw
dCogY2FjaGVkU2NyaXB0KCkgY29uc3Q7Ci0gICAgYm9vbCBuZWVkc0xvYWRpbmcoKSBjb25zdCB7
IHJldHVybiBjYWNoZWRTY3JpcHQoKTsgfQorICAgIExvYWRhYmxlU2NyaXB0KiBsb2FkYWJsZVNj
cmlwdCgpIGNvbnN0OworICAgIGJvb2wgbmVlZHNMb2FkaW5nKCkgY29uc3QgeyByZXR1cm4gbG9h
ZGFibGVTY3JpcHQoKTsgfQogCiAgICAgYm9vbCBpc0xvYWRlZCgpIGNvbnN0OworICAgIGJvb2wg
ZXJyb3JPY2N1cnJlZCgpIGNvbnN0OwogCi0gICAgdm9pZCBub3RpZnlGaW5pc2hlZChDYWNoZWRS
ZXNvdXJjZSopIG92ZXJyaWRlOworICAgIHZvaWQgbm90aWZ5RmluaXNoZWQoTG9hZGFibGVTY3Jp
cHQmKSBvdmVycmlkZTsKIAogICAgIHZvaWQgc2V0Q2xpZW50KFBlbmRpbmdTY3JpcHRDbGllbnQq
KTsKICAgICB2b2lkIGNsZWFyQ2xpZW50KCk7CiAKIHByaXZhdGU6Ci0gICAgUGVuZGluZ1Njcmlw
dChFbGVtZW50JiwgQ2FjaGVkU2NyaXB0Jik7CisgICAgUGVuZGluZ1NjcmlwdChFbGVtZW50Jiwg
TG9hZGFibGVTY3JpcHQmKTsKICAgICBQZW5kaW5nU2NyaXB0KEVsZW1lbnQmLCBUZXh0UG9zaXRp
b24gc3RhcnRpbmdQb3NpdGlvbik7CiAKICAgICB2b2lkIG5vdGlmeUNsaWVudEZpbmlzaGVkKCk7
CiAKICAgICBSZWY8RWxlbWVudD4gbV9lbGVtZW50OwogICAgIFRleHRQb3NpdGlvbiBtX3N0YXJ0
aW5nUG9zaXRpb247IC8vIE9ubHkgdXNlZCBmb3IgaW5saW5lIHNjcmlwdCB0YWdzLgotICAgIENh
Y2hlZFJlc291cmNlSGFuZGxlPENhY2hlZFNjcmlwdD4gbV9jYWNoZWRTY3JpcHQ7CisgICAgUmVm
UHRyPExvYWRhYmxlU2NyaXB0PiBtX2xvYWRhYmxlU2NyaXB0OwogICAgIFBlbmRpbmdTY3JpcHRD
bGllbnQqIG1fY2xpZW50IHsgbnVsbHB0ciB9OwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZG9tL1NjcmlwdEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdEVs
ZW1lbnQuY3BwCmluZGV4IGYxODcxMTE1YjMyOGE2ZjEyNjMwOTM2ZTg1ZWIwOWFiN2ExZjM1N2Mu
LmQzYTQ0NDA5MzFmOTJhYmI5MTQ2NzE1OWM1YTcxZGZlMmE2NzBkNTkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9k
b20vU2NyaXB0RWxlbWVudC5jcHAKQEAgLTM3LDYgKzM3LDcgQEAKICNpbmNsdWRlICJIVE1MTmFt
ZXMuaCIKICNpbmNsdWRlICJIVE1MUGFyc2VySWRpb21zLmgiCiAjaW5jbHVkZSAiSWdub3JlRGVz
dHJ1Y3RpdmVXcml0ZUNvdW50SW5jcmVtZW50ZXIuaCIKKyNpbmNsdWRlICJMb2FkYWJsZUNsYXNz
aWNTY3JpcHQuaCIKICNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCiAjaW5jbHVkZSAiUGFn
ZS5oIgogI2luY2x1ZGUgIlNWR05hbWVzLmgiCkBAIC02OCw3ICs2OSw2IEBAIFNjcmlwdEVsZW1l
bnQ6OlNjcmlwdEVsZW1lbnQoRWxlbWVudCYgZWxlbWVudCwgYm9vbCBwYXJzZXJJbnNlcnRlZCwg
Ym9vbCBhbHJlYWR5CiAgICAgLCBtX3dpbGxFeGVjdXRlV2hlbkRvY3VtZW50RmluaXNoZWRQYXJz
aW5nKGZhbHNlKQogICAgICwgbV9mb3JjZUFzeW5jKCFwYXJzZXJJbnNlcnRlZCkKICAgICAsIG1f
d2lsbEV4ZWN1dGVJbk9yZGVyKGZhbHNlKQotICAgICwgbV9yZXF1ZXN0VXNlc0FjY2Vzc0NvbnRy
b2woZmFsc2UpCiB7CiAgICAgaWYgKHBhcnNlckluc2VydGVkICYmIG1fZWxlbWVudC5kb2N1bWVu
dCgpLnNjcmlwdGFibGVEb2N1bWVudFBhcnNlcigpICYmICFtX2VsZW1lbnQuZG9jdW1lbnQoKS5p
c0luRG9jdW1lbnRXcml0ZSgpKQogICAgICAgICBtX3N0YXJ0TGluZU51bWJlciA9IG1fZWxlbWVu
dC5kb2N1bWVudCgpLnNjcmlwdGFibGVEb2N1bWVudFBhcnNlcigpLT50ZXh0UG9zaXRpb24oKS5t
X2xpbmU7CkBAIC05Niw5ICs5Niw5IEBAIHZvaWQgU2NyaXB0RWxlbWVudDo6Y2hpbGRyZW5DaGFu
Z2VkKCkKICAgICAgICAgcHJlcGFyZVNjcmlwdCgpOyAvLyBGSVhNRTogUHJvdmlkZSBhIHJlYWwg
c3RhcnRpbmcgbGluZSBudW1iZXIgaGVyZS4KIH0KIAotdm9pZCBTY3JpcHRFbGVtZW50OjpoYW5k
bGVTb3VyY2VBdHRyaWJ1dGUoY29uc3QgU3RyaW5nJiBzb3VyY2VVcmwpCit2b2lkIFNjcmlwdEVs
ZW1lbnQ6OmhhbmRsZVNvdXJjZUF0dHJpYnV0ZShjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCkKIHsK
LSAgICBpZiAoaWdub3Jlc0xvYWRSZXF1ZXN0KCkgfHwgc291cmNlVXJsLmlzRW1wdHkoKSkKKyAg
ICBpZiAoaWdub3Jlc0xvYWRSZXF1ZXN0KCkgfHwgc291cmNlVVJMLmlzRW1wdHkoKSkKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgcHJlcGFyZVNjcmlwdCgpOyAvLyBGSVhNRTogUHJvdmlkZSBhIHJl
YWwgc3RhcnRpbmcgbGluZSBudW1iZXIgaGVyZS4KQEAgLTIyNyw5ICsyMjcsMTAgQEAgYm9vbCBT
Y3JpcHRFbGVtZW50OjpwcmVwYXJlU2NyaXB0KGNvbnN0IFRleHRQb3NpdGlvbiYgc2NyaXB0U3Rh
cnRQb3NpdGlvbiwgTGVnYWMKICAgICBlbHNlCiAgICAgICAgIG1fY2hhcmFjdGVyRW5jb2Rpbmcg
PSBkb2N1bWVudC5jaGFyc2V0KCk7CiAKLSAgICBpZiAoaGFzU291cmNlQXR0cmlidXRlKCkpCi0g
ICAgICAgIGlmICghcmVxdWVzdFNjcmlwdChzb3VyY2VBdHRyaWJ1dGVWYWx1ZSgpKSkKKyAgICBp
ZiAoaGFzU291cmNlQXR0cmlidXRlKCkpIHsKKyAgICAgICAgaWYgKCFyZXF1ZXN0Q2xhc3NpY1Nj
cmlwdChzb3VyY2VBdHRyaWJ1dGVWYWx1ZSgpKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CiAKICAgICBpZiAoaGFzU291cmNlQXR0cmlidXRlKCkgJiYgZGVmZXJBdHRyaWJ1dGVW
YWx1ZSgpICYmIG1fcGFyc2VySW5zZXJ0ZWQgJiYgIWFzeW5jQXR0cmlidXRlVmFsdWUoKSkgewog
ICAgICAgICBtX3dpbGxFeGVjdXRlV2hlbkRvY3VtZW50RmluaXNoZWRQYXJzaW5nID0gdHJ1ZTsK
QEAgLTI0MCwxMiArMjQxLDE0IEBAIGJvb2wgU2NyaXB0RWxlbWVudDo6cHJlcGFyZVNjcmlwdChj
b25zdCBUZXh0UG9zaXRpb24mIHNjcmlwdFN0YXJ0UG9zaXRpb24sIExlZ2FjCiAgICAgICAgIG1f
d2lsbEJlUGFyc2VyRXhlY3V0ZWQgPSB0cnVlOwogICAgICAgICBtX3JlYWR5VG9CZVBhcnNlckV4
ZWN1dGVkID0gdHJ1ZTsKICAgICB9IGVsc2UgaWYgKGhhc1NvdXJjZUF0dHJpYnV0ZSgpICYmICFh
c3luY0F0dHJpYnV0ZVZhbHVlKCkgJiYgIW1fZm9yY2VBc3luYykgeworICAgICAgICBBU1NFUlQo
bV9sb2FkYWJsZVNjcmlwdCk7CiAgICAgICAgIG1fd2lsbEV4ZWN1dGVJbk9yZGVyID0gdHJ1ZTsK
LSAgICAgICAgZG9jdW1lbnQuc2NyaXB0UnVubmVyKCktPnF1ZXVlU2NyaXB0Rm9yRXhlY3V0aW9u
KHRoaXMsIG1fY2FjaGVkU2NyaXB0LCBTY3JpcHRSdW5uZXI6OklOX09SREVSX0VYRUNVVElPTik7
Ci0gICAgICAgIG1fY2FjaGVkU2NyaXB0LT5hZGRDbGllbnQodGhpcyk7CisgICAgICAgIGRvY3Vt
ZW50LnNjcmlwdFJ1bm5lcigpLT5xdWV1ZVNjcmlwdEZvckV4ZWN1dGlvbih0aGlzLCAqbV9sb2Fk
YWJsZVNjcmlwdCwgU2NyaXB0UnVubmVyOjpJTl9PUkRFUl9FWEVDVVRJT04pOworICAgICAgICBt
X2xvYWRhYmxlU2NyaXB0LT5hZGRDbGllbnQoKnRoaXMpOwogICAgIH0gZWxzZSBpZiAoaGFzU291
cmNlQXR0cmlidXRlKCkpIHsKLSAgICAgICAgbV9lbGVtZW50LmRvY3VtZW50KCkuc2NyaXB0UnVu
bmVyKCktPnF1ZXVlU2NyaXB0Rm9yRXhlY3V0aW9uKHRoaXMsIG1fY2FjaGVkU2NyaXB0LCBTY3Jp
cHRSdW5uZXI6OkFTWU5DX0VYRUNVVElPTik7Ci0gICAgICAgIG1fY2FjaGVkU2NyaXB0LT5hZGRD
bGllbnQodGhpcyk7CisgICAgICAgIEFTU0VSVChtX2xvYWRhYmxlU2NyaXB0KTsKKyAgICAgICAg
bV9lbGVtZW50LmRvY3VtZW50KCkuc2NyaXB0UnVubmVyKCktPnF1ZXVlU2NyaXB0Rm9yRXhlY3V0
aW9uKHRoaXMsICptX2xvYWRhYmxlU2NyaXB0LCBTY3JpcHRSdW5uZXI6OkFTWU5DX0VYRUNVVElP
Tik7CisgICAgICAgIG1fbG9hZGFibGVTY3JpcHQtPmFkZENsaWVudCgqdGhpcyk7CiAgICAgfSBl
bHNlIHsKICAgICAgICAgLy8gUmVzZXQgbGluZSBudW1iZXJpbmcgZm9yIG5lc3RlZCB3cml0ZXMu
CiAgICAgICAgIFRleHRQb3NpdGlvbiBwb3NpdGlvbiA9IGRvY3VtZW50LmlzSW5Eb2N1bWVudFdy
aXRlKCkgPyBUZXh0UG9zaXRpb24oKSA6IHNjcmlwdFN0YXJ0UG9zaXRpb247CkBAIC0yNTUsMzkg
KzI1OCw0NSBAQCBib29sIFNjcmlwdEVsZW1lbnQ6OnByZXBhcmVTY3JpcHQoY29uc3QgVGV4dFBv
c2l0aW9uJiBzY3JpcHRTdGFydFBvc2l0aW9uLCBMZWdhYwogICAgIHJldHVybiB0cnVlOwogfQog
Ci1ib29sIFNjcmlwdEVsZW1lbnQ6OnJlcXVlc3RTY3JpcHQoY29uc3QgU3RyaW5nJiBzb3VyY2VV
cmwpCitDYWNoZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRTY3JpcHQ+IFNjcmlwdEVsZW1lbnQ6OnJl
cXVlc3RDYWNoZWRTY3JpcHQoY29uc3QgVVJMJiBzb3VyY2VVUkwsIGNvbnN0IFN0cmluZyYgbm9u
Y2VBdHRyaWJ1dGUsIGNvbnN0IFN0cmluZyYgY3Jvc3NPcmlnaW5Nb2RlKQogewotICAgIFJlZjxE
b2N1bWVudD4gb3JpZ2luYWxEb2N1bWVudChtX2VsZW1lbnQuZG9jdW1lbnQoKSk7Ci0gICAgaWYg
KCFtX2VsZW1lbnQuZGlzcGF0Y2hCZWZvcmVMb2FkRXZlbnQoc291cmNlVXJsKSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIGlmICghbV9lbGVtZW50LmluRG9jdW1lbnQoKSB8fCAmbV9lbGVt
ZW50LmRvY3VtZW50KCkgIT0gb3JpZ2luYWxEb2N1bWVudC5wdHIoKSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIGJvb2wgaGFzS25vd25Ob25jZSA9IG1fZWxlbWVudC5kb2N1bWVudCgpLmNv
bnRlbnRTZWN1cml0eVBvbGljeSgpLT5hbGxvd1NjcmlwdFdpdGhOb25jZShub25jZUF0dHJpYnV0
ZSwgbV9lbGVtZW50LmlzSW5Vc2VyQWdlbnRTaGFkb3dUcmVlKCkpOworICAgIFJlc291cmNlTG9h
ZGVyT3B0aW9ucyBvcHRpb25zID0gQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OmRlZmF1bHRDYWNoZWRS
ZXNvdXJjZU9wdGlvbnMoKTsKKyAgICBvcHRpb25zLmNvbnRlbnRTZWN1cml0eVBvbGljeUltcG9z
aXRpb24gPSBoYXNLbm93bk5vbmNlID8gQ29udGVudFNlY3VyaXR5UG9saWN5SW1wb3NpdGlvbjo6
U2tpcFBvbGljeUNoZWNrIDogQ29udGVudFNlY3VyaXR5UG9saWN5SW1wb3NpdGlvbjo6RG9Qb2xp
Y3lDaGVjazsKIAotICAgIEFTU0VSVCghbV9jYWNoZWRTY3JpcHQpOwotICAgIGlmICghc3RyaXBM
ZWFkaW5nQW5kVHJhaWxpbmdIVE1MU3BhY2VzKHNvdXJjZVVybCkuaXNFbXB0eSgpKSB7Ci0gICAg
ICAgIGJvb2wgaGFzS25vd25Ob25jZSA9IG1fZWxlbWVudC5kb2N1bWVudCgpLmNvbnRlbnRTZWN1
cml0eVBvbGljeSgpLT5hbGxvd1NjcmlwdFdpdGhOb25jZShtX2VsZW1lbnQuYXR0cmlidXRlV2l0
aG91dFN5bmNocm9uaXphdGlvbihIVE1MTmFtZXM6Om5vbmNlQXR0ciksIG1fZWxlbWVudC5pc0lu
VXNlckFnZW50U2hhZG93VHJlZSgpKTsKLSAgICAgICAgUmVzb3VyY2VMb2FkZXJPcHRpb25zIG9w
dGlvbnMgPSBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6ZGVmYXVsdENhY2hlZFJlc291cmNlT3B0aW9u
cygpOwotICAgICAgICBvcHRpb25zLmNvbnRlbnRTZWN1cml0eVBvbGljeUltcG9zaXRpb24gPSBo
YXNLbm93bk5vbmNlID8gQ29udGVudFNlY3VyaXR5UG9saWN5SW1wb3NpdGlvbjo6U2tpcFBvbGlj
eUNoZWNrIDogQ29udGVudFNlY3VyaXR5UG9saWN5SW1wb3NpdGlvbjo6RG9Qb2xpY3lDaGVjazsK
KyAgICBDYWNoZWRSZXNvdXJjZVJlcXVlc3QgcmVxdWVzdChSZXNvdXJjZVJlcXVlc3Qoc291cmNl
VVJMKSwgb3B0aW9ucyk7CisKKyAgICBtX2VsZW1lbnQuZG9jdW1lbnQoKS5jb250ZW50U2VjdXJp
dHlQb2xpY3koKS0+dXBncmFkZUluc2VjdXJlUmVxdWVzdElmTmVlZGVkKHJlcXVlc3QubXV0YWJs
ZVJlc291cmNlUmVxdWVzdCgpLCBDb250ZW50U2VjdXJpdHlQb2xpY3k6Okluc2VjdXJlUmVxdWVz
dFR5cGU6OkxvYWQpOworCisgICAgaWYgKCFjcm9zc09yaWdpbk1vZGUuaXNOdWxsKCkpIHsKKyAg
ICAgICAgU3RvcmVkQ3JlZGVudGlhbHMgYWxsb3dDcmVkZW50aWFscyA9IGVxdWFsTGV0dGVyc0ln
bm9yaW5nQVNDSUlDYXNlKGNyb3NzT3JpZ2luTW9kZSwgInVzZS1jcmVkZW50aWFscyIpID8gQWxs
b3dTdG9yZWRDcmVkZW50aWFscyA6IERvTm90QWxsb3dTdG9yZWRDcmVkZW50aWFsczsKKyAgICAg
ICAgQVNTRVJUKG1fZWxlbWVudC5kb2N1bWVudCgpLnNlY3VyaXR5T3JpZ2luKCkpOworICAgICAg
ICB1cGRhdGVSZXF1ZXN0Rm9yQWNjZXNzQ29udHJvbChyZXF1ZXN0Lm11dGFibGVSZXNvdXJjZVJl
cXVlc3QoKSwgKm1fZWxlbWVudC5kb2N1bWVudCgpLnNlY3VyaXR5T3JpZ2luKCksIGFsbG93Q3Jl
ZGVudGlhbHMpOworICAgIH0KIAotICAgICAgICBDYWNoZWRSZXNvdXJjZVJlcXVlc3QgcmVxdWVz
dChSZXNvdXJjZVJlcXVlc3QobV9lbGVtZW50LmRvY3VtZW50KCkuY29tcGxldGVVUkwoc291cmNl
VXJsKSksIG9wdGlvbnMpOworICAgIHJlcXVlc3Quc2V0Q2hhcnNldChzY3JpcHRDaGFyc2V0KCkp
OworICAgIHJlcXVlc3Quc2V0SW5pdGlhdG9yKCZlbGVtZW50KCkpOwogCi0gICAgICAgIG1fZWxl
bWVudC5kb2N1bWVudCgpLmNvbnRlbnRTZWN1cml0eVBvbGljeSgpLT51cGdyYWRlSW5zZWN1cmVS
ZXF1ZXN0SWZOZWVkZWQocmVxdWVzdC5tdXRhYmxlUmVzb3VyY2VSZXF1ZXN0KCksIENvbnRlbnRT
ZWN1cml0eVBvbGljeTo6SW5zZWN1cmVSZXF1ZXN0VHlwZTo6TG9hZCk7CisgICAgcmV0dXJuIG1f
ZWxlbWVudC5kb2N1bWVudCgpLmNhY2hlZFJlc291cmNlTG9hZGVyKCkucmVxdWVzdFNjcmlwdChy
ZXF1ZXN0KTsKK30KKworYm9vbCBTY3JpcHRFbGVtZW50OjpyZXF1ZXN0Q2xhc3NpY1NjcmlwdChj
b25zdCBTdHJpbmcmIHNvdXJjZVVSTCkKK3sKKyAgICBSZWY8RG9jdW1lbnQ+IG9yaWdpbmFsRG9j
dW1lbnQobV9lbGVtZW50LmRvY3VtZW50KCkpOworICAgIGlmICghbV9lbGVtZW50LmRpc3BhdGNo
QmVmb3JlTG9hZEV2ZW50KHNvdXJjZVVSTCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBi
b29sIGRpZEV2ZW50TGlzdGVuZXJEaXNjb25uZWN0VGhpc0VsZW1lbnQgPSAhbV9lbGVtZW50Lmlu
RG9jdW1lbnQoKSB8fCAmbV9lbGVtZW50LmRvY3VtZW50KCkgIT0gb3JpZ2luYWxEb2N1bWVudC5w
dHIoKTsKKyAgICBpZiAoZGlkRXZlbnRMaXN0ZW5lckRpc2Nvbm5lY3RUaGlzRWxlbWVudCkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCisgICAgQVNTRVJUKCFtX2xvYWRhYmxlU2NyaXB0KTsKKyAg
ICBpZiAoIXN0cmlwTGVhZGluZ0FuZFRyYWlsaW5nSFRNTFNwYWNlcyhzb3VyY2VVUkwpLmlzRW1w
dHkoKSkgewogICAgICAgICBTdHJpbmcgY3Jvc3NPcmlnaW5Nb2RlID0gbV9lbGVtZW50LmF0dHJp
YnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oSFRNTE5hbWVzOjpjcm9zc29yaWdpbkF0dHIpOwot
ICAgICAgICBpZiAoIWNyb3NzT3JpZ2luTW9kZS5pc051bGwoKSkgewotICAgICAgICAgICAgbV9y
ZXF1ZXN0VXNlc0FjY2Vzc0NvbnRyb2wgPSB0cnVlOwotICAgICAgICAgICAgU3RvcmVkQ3JlZGVu
dGlhbHMgYWxsb3dDcmVkZW50aWFscyA9IGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGNy
b3NzT3JpZ2luTW9kZSwgInVzZS1jcmVkZW50aWFscyIpID8gQWxsb3dTdG9yZWRDcmVkZW50aWFs
cyA6IERvTm90QWxsb3dTdG9yZWRDcmVkZW50aWFsczsKLSAgICAgICAgICAgIEFTU0VSVChtX2Vs
ZW1lbnQuZG9jdW1lbnQoKS5zZWN1cml0eU9yaWdpbigpKTsKLSAgICAgICAgICAgIHVwZGF0ZVJl
cXVlc3RGb3JBY2Nlc3NDb250cm9sKHJlcXVlc3QubXV0YWJsZVJlc291cmNlUmVxdWVzdCgpLCAq
bV9lbGVtZW50LmRvY3VtZW50KCkuc2VjdXJpdHlPcmlnaW4oKSwgYWxsb3dDcmVkZW50aWFscyk7
Ci0gICAgICAgIH0KLSAgICAgICAgcmVxdWVzdC5zZXRDaGFyc2V0KHNjcmlwdENoYXJzZXQoKSk7
Ci0gICAgICAgIHJlcXVlc3Quc2V0SW5pdGlhdG9yKCZlbGVtZW50KCkpOwotCi0gICAgICAgIG1f
Y2FjaGVkU2NyaXB0ID0gbV9lbGVtZW50LmRvY3VtZW50KCkuY2FjaGVkUmVzb3VyY2VMb2FkZXIo
KS5yZXF1ZXN0U2NyaXB0KHJlcXVlc3QpOworICAgICAgICBtX2xvYWRhYmxlU2NyaXB0ID0gTG9h
ZGFibGVDbGFzc2ljU2NyaXB0OjpjcmVhdGUocmVxdWVzdENhY2hlZFNjcmlwdChtX2VsZW1lbnQu
ZG9jdW1lbnQoKS5jb21wbGV0ZVVSTChzb3VyY2VVUkwpLCBtX2VsZW1lbnQuYXR0cmlidXRlV2l0
aG91dFN5bmNocm9uaXphdGlvbihIVE1MTmFtZXM6Om5vbmNlQXR0ciksIGNyb3NzT3JpZ2luTW9k
ZSksIGNyb3NzT3JpZ2luTW9kZSwgKm1fZWxlbWVudC5kb2N1bWVudCgpLnNlY3VyaXR5T3JpZ2lu
KCkpOwogICAgICAgICBtX2lzRXh0ZXJuYWxTY3JpcHQgPSB0cnVlOwogICAgIH0KIAotICAgIGlm
IChtX2NhY2hlZFNjcmlwdCkKKyAgICBpZiAobV9sb2FkYWJsZVNjcmlwdCkKICAgICAgICAgcmV0
dXJuIHRydWU7CiAKICAgICBjYWxsT25NYWluVGhyZWFkKFt0aGlzLCBlbGVtZW50ID0gUmVmPEVs
ZW1lbnQ+KG1fZWxlbWVudCldIHsKQEAgLTMxMSwxMyArMzIwLDYgQEAgdm9pZCBTY3JpcHRFbGVt
ZW50OjpleGVjdXRlU2NyaXB0KGNvbnN0IFNjcmlwdFNvdXJjZUNvZGUmIHNvdXJjZUNvZGUpCiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgfQogCi0jaWYgRU5BQkxFKE5PU05JRkYpCi0gICAgaWYg
KG1faXNFeHRlcm5hbFNjcmlwdCAmJiBtX2NhY2hlZFNjcmlwdCAmJiAhbV9jYWNoZWRTY3JpcHQt
Pm1pbWVUeXBlQWxsb3dlZEJ5Tm9zbmlmZigpKSB7Ci0gICAgICAgIG1fZWxlbWVudC5kb2N1bWVu
dCgpLmFkZENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2U6OlNlY3VyaXR5LCBNZXNzYWdlTGV2
ZWw6OkVycm9yLCAiUmVmdXNlZCB0byBleGVjdXRlIHNjcmlwdCBmcm9tICciICsgbV9jYWNoZWRT
Y3JpcHQtPnVybCgpLnN0cmluZ0NlbnRlckVsbGlwc2l6ZWRUb0xlbmd0aCgpICsgIicgYmVjYXVz
ZSBpdHMgTUlNRSB0eXBlICgnIiArIG1fY2FjaGVkU2NyaXB0LT5taW1lVHlwZSgpICsgIicpIGlz
IG5vdCBleGVjdXRhYmxlLCBhbmQgc3RyaWN0IE1JTUUgdHlwZSBjaGVja2luZyBpcyBlbmFibGVk
LiIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotI2VuZGlmCi0KICAgICBSZWY8RG9jdW1lbnQ+
IGRvY3VtZW50KG1fZWxlbWVudC5kb2N1bWVudCgpKTsKICAgICBpZiAoRnJhbWUqIGZyYW1lID0g
ZG9jdW1lbnQtPmZyYW1lKCkpIHsKICAgICAgICAgSWdub3JlRGVzdHJ1Y3RpdmVXcml0ZUNvdW50
SW5jcmVtZW50ZXIgaWdub3JlRGVzY3RydWN0aXZlV3JpdGVDb3VudEluY3JlbWVudGVyKG1faXNF
eHRlcm5hbFNjcmlwdCA/IGRvY3VtZW50LnB0cigpIDogbnVsbHB0cik7CkBAIC0zMzIsNTEgKzMz
NCw1MCBAQCB2b2lkIFNjcmlwdEVsZW1lbnQ6OmV4ZWN1dGVTY3JpcHQoY29uc3QgU2NyaXB0U291
cmNlQ29kZSYgc291cmNlQ29kZSkKIAogdm9pZCBTY3JpcHRFbGVtZW50OjpzdG9wTG9hZFJlcXVl
c3QoKQogewotICAgIGlmIChtX2NhY2hlZFNjcmlwdCkgeworICAgIGlmIChtX2xvYWRhYmxlU2Ny
aXB0KSB7CiAgICAgICAgIGlmICghbV93aWxsQmVQYXJzZXJFeGVjdXRlZCkKLSAgICAgICAgICAg
IG1fY2FjaGVkU2NyaXB0LT5yZW1vdmVDbGllbnQodGhpcyk7Ci0gICAgICAgIG1fY2FjaGVkU2Ny
aXB0ID0gbnVsbHB0cjsKKyAgICAgICAgICAgIG1fbG9hZGFibGVTY3JpcHQtPnJlbW92ZUNsaWVu
dCgqdGhpcyk7CisgICAgICAgIG1fbG9hZGFibGVTY3JpcHQgPSBudWxscHRyOwogICAgIH0KIH0K
IAotdm9pZCBTY3JpcHRFbGVtZW50OjpleGVjdXRlKENhY2hlZFNjcmlwdCogY2FjaGVkU2NyaXB0
KQordm9pZCBTY3JpcHRFbGVtZW50OjpleGVjdXRlU2NyaXB0KExvYWRhYmxlU2NyaXB0JiBsb2Fk
YWJsZVNjcmlwdCkKIHsKICAgICBBU1NFUlQoIW1fd2lsbEJlUGFyc2VyRXhlY3V0ZWQpOwotICAg
IEFTU0VSVChjYWNoZWRTY3JpcHQpOwotICAgIGlmIChjYWNoZWRTY3JpcHQtPmVycm9yT2NjdXJy
ZWQoKSkKKworICAgIGlmIChPcHRpb25hbDxMb2FkYWJsZVNjcmlwdDo6RXJyb3I+IGVycm9yID0g
bG9hZGFibGVTY3JpcHQuZXJyb3JPY2N1cnJlZCgpKSB7CisgICAgICAgIGlmIChPcHRpb25hbDxM
b2FkYWJsZVNjcmlwdDo6Q29uc29sZU1lc3NhZ2U+IG1lc3NhZ2UgPSBlcnJvci0+Y29uc29sZU1l
c3NhZ2UpCisgICAgICAgICAgICBtX2VsZW1lbnQuZG9jdW1lbnQoKS5hZGRDb25zb2xlTWVzc2Fn
ZShtZXNzYWdlLT5zb3VyY2UsIG1lc3NhZ2UtPmxldmVsLCBtZXNzYWdlLT5tZXNzYWdlKTsKICAg
ICAgICAgZGlzcGF0Y2hFcnJvckV2ZW50KCk7Ci0gICAgZWxzZSBpZiAoIWNhY2hlZFNjcmlwdC0+
d2FzQ2FuY2VsZWQoKSkgewotICAgICAgICBleGVjdXRlU2NyaXB0KFNjcmlwdFNvdXJjZUNvZGUo
Y2FjaGVkU2NyaXB0KSk7CisgICAgfSBlbHNlIGlmICghbG9hZGFibGVTY3JpcHQud2FzQ2FuY2Vs
ZWQoKSkgeworICAgICAgICBleGVjdXRlU2NyaXB0V2l0aG91dERpc3BhdGNoaW5nRXZlbnQobG9h
ZGFibGVTY3JpcHQpOwogICAgICAgICBkaXNwYXRjaExvYWRFdmVudCgpOwogICAgIH0KLSAgICBj
YWNoZWRTY3JpcHQtPnJlbW92ZUNsaWVudCh0aGlzKTsKKyAgICBsb2FkYWJsZVNjcmlwdC5yZW1v
dmVDbGllbnQoKnRoaXMpOworfQorCit2b2lkIFNjcmlwdEVsZW1lbnQ6OmV4ZWN1dGVTY3JpcHRX
aXRob3V0RGlzcGF0Y2hpbmdFdmVudChMb2FkYWJsZVNjcmlwdCYgbG9hZGFibGVTY3JpcHQpCit7
CisgICAgZXhlY3V0ZVNjcmlwdChTY3JpcHRTb3VyY2VDb2RlKCZkb3duY2FzdDxMb2FkYWJsZUNs
YXNzaWNTY3JpcHQ+KGxvYWRhYmxlU2NyaXB0KS5jYWNoZWRTY3JpcHQoKSkpOwogfQogCi12b2lk
IFNjcmlwdEVsZW1lbnQ6Om5vdGlmeUZpbmlzaGVkKENhY2hlZFJlc291cmNlKiByZXNvdXJjZSkK
K3ZvaWQgU2NyaXB0RWxlbWVudDo6bm90aWZ5RmluaXNoZWQoTG9hZGFibGVTY3JpcHQmKQogewog
ICAgIEFTU0VSVCghbV93aWxsQmVQYXJzZXJFeGVjdXRlZCk7CiAKLSAgICAvLyBDYWNoZWRSZXNv
dXJjZSBwb3NzaWJseSBpbnZva2VzIHRoaXMgbm90aWZ5RmluaXNoZWQoKSBtb3JlIHRoYW4KKyAg
ICAvLyBMb2FkYWJsZVNjcmlwdCBwb3NzaWJseSBpbnZva2VzIHRoaXMgbm90aWZ5RmluaXNoZWQo
KSBtb3JlIHRoYW4KICAgICAvLyBvbmNlIGJlY2F1c2UgU2NyaXB0RWxlbWVudCBkb2Vzbid0IHVu
c3Vic2NyaWJlIGl0c2VsZiBmcm9tCi0gICAgLy8gQ2FjaGVkUmVzb3VyY2UgaGVyZSBhbmQgZG9l
cyBpdCBpbiBleGVjdXRlKCkgaW5zdGVhZC4KLSAgICAvLyBXZSB1c2UgbV9jYWNoZWRTY3JpcHQg
dG8gY2hlY2sgaWYgdGhpcyBmdW5jdGlvbiBpcyBhbHJlYWR5IGNhbGxlZC4KLSAgICBBU1NFUlRf
VU5VU0VEKHJlc291cmNlLCByZXNvdXJjZSA9PSBtX2NhY2hlZFNjcmlwdCk7Ci0gICAgaWYgKCFt
X2NhY2hlZFNjcmlwdCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1fcmVxdWVzdFVzZXNB
Y2Nlc3NDb250cm9sICYmICFtX2NhY2hlZFNjcmlwdC0+cGFzc2VzU2FtZU9yaWdpblBvbGljeUNo
ZWNrKCptX2VsZW1lbnQuZG9jdW1lbnQoKS5zZWN1cml0eU9yaWdpbigpKSkgewotICAgICAgICBk
aXNwYXRjaEVycm9yRXZlbnQoKTsKLSAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFN0cmlu
Zz4gY29uc29sZU1lc3NhZ2UoQVNDSUlMaXRlcmFsKCJDcm9zcy1vcmlnaW4gc2NyaXB0IGxvYWQg
ZGVuaWVkIGJ5IENyb3NzLU9yaWdpbiBSZXNvdXJjZSBTaGFyaW5nIHBvbGljeS4iKSk7Ci0gICAg
ICAgIG1fZWxlbWVudC5kb2N1bWVudCgpLmFkZENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2U6
OkpTLCBNZXNzYWdlTGV2ZWw6OkVycm9yLCBjb25zb2xlTWVzc2FnZSk7CisgICAgLy8gTG9hZGFi
bGVTY3JpcHQgaGVyZSBhbmQgZG9lcyBpdCBpbiBleGVjdXRlKCkgaW5zdGVhZC4KKyAgICAvLyBX
ZSB1c2UgbV9sb2FkYWJsZVNjcmlwdCB0byBjaGVjayBpZiB0aGlzIGZ1bmN0aW9uIGlzIGFscmVh
ZHkgY2FsbGVkLgorICAgIGlmICghbV9sb2FkYWJsZVNjcmlwdCkKICAgICAgICAgcmV0dXJuOwot
ICAgIH0KIAogICAgIGlmIChtX3dpbGxFeGVjdXRlSW5PcmRlcikKICAgICAgICAgbV9lbGVtZW50
LmRvY3VtZW50KCkuc2NyaXB0UnVubmVyKCktPm5vdGlmeVNjcmlwdFJlYWR5KHRoaXMsIFNjcmlw
dFJ1bm5lcjo6SU5fT1JERVJfRVhFQ1VUSU9OKTsKICAgICBlbHNlCiAgICAgICAgIG1fZWxlbWVu
dC5kb2N1bWVudCgpLnNjcmlwdFJ1bm5lcigpLT5ub3RpZnlTY3JpcHRSZWFkeSh0aGlzLCBTY3Jp
cHRSdW5uZXI6OkFTWU5DX0VYRUNVVElPTik7CiAKLSAgICBtX2NhY2hlZFNjcmlwdCA9IG51bGxw
dHI7CisgICAgbV9sb2FkYWJsZVNjcmlwdCA9IG51bGxwdHI7CiB9CiAKIGJvb2wgU2NyaXB0RWxl
bWVudDo6aWdub3Jlc0xvYWRSZXF1ZXN0KCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9TY3JpcHRFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0RWxlbWVu
dC5oCmluZGV4IDFhYTRmMmU4M2IzMTExNzEyNDZhMjMwZTY1ODgwNjJmOWNmM2QwODQuLjk5OWZk
YmE2NWZhMGJkMDJmZjFmMGFmZTU4MGFhZTVhYTUwZWYxZWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9TY3JpcHRFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1Njcmlw
dEVsZW1lbnQuaApAQCAtMTgsMTIgKzE4LDE0IEBACiAgKgogICovCiAKLSNpZm5kZWYgU2NyaXB0
RWxlbWVudF9oCi0jZGVmaW5lIFNjcmlwdEVsZW1lbnRfaAorI3ByYWdtYSBvbmNlCiAKICNpbmNs
dWRlICJDYWNoZWRSZXNvdXJjZUNsaWVudC5oIgogI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlSGFu
ZGxlLmgiCisjaW5jbHVkZSAiTG9hZGFibGVTY3JpcHQuaCIKKyNpbmNsdWRlICJMb2FkYWJsZVNj
cmlwdENsaWVudC5oIgogI2luY2x1ZGUgIlRpbWVyLmgiCisjaW5jbHVkZSAiVVJMLmgiCiAjaW5j
bHVkZSA8d3RmL3RleHQvVGV4dFBvc2l0aW9uLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3Ry
aW5nLmg+CiAKQEAgLTM1LDcgKzM3LDcgQEAgY2xhc3MgRWxlbWVudDsKIGNsYXNzIFNjcmlwdEVs
ZW1lbnQ7CiBjbGFzcyBTY3JpcHRTb3VyY2VDb2RlOwogCi1jbGFzcyBTY3JpcHRFbGVtZW50IDog
cHJpdmF0ZSBDYWNoZWRSZXNvdXJjZUNsaWVudCB7CitjbGFzcyBTY3JpcHRFbGVtZW50IDogcHJp
dmF0ZSBMb2FkYWJsZVNjcmlwdENsaWVudCB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+U2NyaXB0
RWxlbWVudCgpOwogCkBAIC00Nyw4ICs0OSw5IEBAIGNsYXNzIFNjcmlwdEVsZW1lbnQgOiBwcml2
YXRlIENhY2hlZFJlc291cmNlQ2xpZW50IHsKIAogICAgIFN0cmluZyBzY3JpcHRDaGFyc2V0KCkg
Y29uc3QgeyByZXR1cm4gbV9jaGFyYWN0ZXJFbmNvZGluZzsgfQogICAgIFdFQkNPUkVfRVhQT1JU
IFN0cmluZyBzY3JpcHRDb250ZW50KCkgY29uc3Q7CisgICAgdm9pZCBleGVjdXRlU2NyaXB0KExv
YWRhYmxlU2NyaXB0Jik7CiAgICAgdm9pZCBleGVjdXRlU2NyaXB0KGNvbnN0IFNjcmlwdFNvdXJj
ZUNvZGUmKTsKLSAgICB2b2lkIGV4ZWN1dGUoQ2FjaGVkU2NyaXB0Kik7CisgICAgdm9pZCBleGVj
dXRlU2NyaXB0V2l0aG91dERpc3BhdGNoaW5nRXZlbnQoTG9hZGFibGVTY3JpcHQmKTsKIAogICAg
IC8vIFhNTCBwYXJzZXIgY2FsbHMgdGhlc2UKICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hMb2Fk
RXZlbnQoKSA9IDA7CkBAIC01OCw3ICs2MSw3IEBAIGNsYXNzIFNjcmlwdEVsZW1lbnQgOiBwcml2
YXRlIENhY2hlZFJlc291cmNlQ2xpZW50IHsKICAgICBib29sIHdpbGxCZVBhcnNlckV4ZWN1dGVk
KCkgY29uc3QgeyByZXR1cm4gbV93aWxsQmVQYXJzZXJFeGVjdXRlZDsgfQogICAgIGJvb2wgcmVh
ZHlUb0JlUGFyc2VyRXhlY3V0ZWQoKSBjb25zdCB7IHJldHVybiBtX3JlYWR5VG9CZVBhcnNlckV4
ZWN1dGVkOyB9CiAgICAgYm9vbCB3aWxsRXhlY3V0ZVdoZW5Eb2N1bWVudEZpbmlzaGVkUGFyc2lu
ZygpIGNvbnN0IHsgcmV0dXJuIG1fd2lsbEV4ZWN1dGVXaGVuRG9jdW1lbnRGaW5pc2hlZFBhcnNp
bmc7IH0KLSAgICBDYWNoZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRTY3JpcHQ+IGNhY2hlZFNjcmlw
dCgpIHsgcmV0dXJuIG1fY2FjaGVkU2NyaXB0OyB9CisgICAgTG9hZGFibGVTY3JpcHQqIGxvYWRh
YmxlU2NyaXB0KCkgeyByZXR1cm4gbV9sb2FkYWJsZVNjcmlwdC5nZXQoKTsgfQogCiBwcm90ZWN0
ZWQ6CiAgICAgU2NyaXB0RWxlbWVudChFbGVtZW50JiwgYm9vbCBjcmVhdGVkQnlQYXJzZXIsIGJv
b2wgaXNFdmFsdWF0ZWQpOwpAQCAtNzIsNyArNzUsNyBAQCBjbGFzcyBTY3JpcHRFbGVtZW50IDog
cHJpdmF0ZSBDYWNoZWRSZXNvdXJjZUNsaWVudCB7CiAgICAgYm9vbCBzaG91bGRDYWxsRmluaXNo
ZWRJbnNlcnRpbmdTdWJ0cmVlKENvbnRhaW5lck5vZGUmKTsKICAgICB2b2lkIGZpbmlzaGVkSW5z
ZXJ0aW5nU3VidHJlZSgpOwogICAgIHZvaWQgY2hpbGRyZW5DaGFuZ2VkKCk7Ci0gICAgdm9pZCBo
YW5kbGVTb3VyY2VBdHRyaWJ1dGUoY29uc3QgU3RyaW5nJiBzb3VyY2VVcmwpOworICAgIHZvaWQg
aGFuZGxlU291cmNlQXR0cmlidXRlKGNvbnN0IFN0cmluZyYgc291cmNlVVJMKTsKICAgICB2b2lk
IGhhbmRsZUFzeW5jQXR0cmlidXRlKCk7CiAKIHByaXZhdGU6CkBAIC04MiwxMCArODUsMTIgQEAg
Y2xhc3MgU2NyaXB0RWxlbWVudCA6IHByaXZhdGUgQ2FjaGVkUmVzb3VyY2VDbGllbnQgewogICAg
IGJvb2wgaWdub3Jlc0xvYWRSZXF1ZXN0KCkgY29uc3Q7CiAgICAgYm9vbCBpc1NjcmlwdEZvckV2
ZW50U3VwcG9ydGVkKCkgY29uc3Q7CiAKLSAgICBib29sIHJlcXVlc3RTY3JpcHQoY29uc3QgU3Ry
aW5nJiBzb3VyY2VVcmwpOworICAgIENhY2hlZFJlc291cmNlSGFuZGxlPENhY2hlZFNjcmlwdD4g
cmVxdWVzdENhY2hlZFNjcmlwdChjb25zdCBVUkwmLCBjb25zdCBTdHJpbmcmIG5vbmNlQXR0cmli
dXRlLCBjb25zdCBTdHJpbmcmIGNyb3Nzb3JpZ2luQXR0cmlidXRlKTsKKworICAgIGJvb2wgcmVx
dWVzdENsYXNzaWNTY3JpcHQoY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwpOwogICAgIHZvaWQgc3Rv
cExvYWRSZXF1ZXN0KCk7CiAKLSAgICB2b2lkIG5vdGlmeUZpbmlzaGVkKENhY2hlZFJlc291cmNl
Kikgb3ZlcnJpZGU7CisgICAgdm9pZCBub3RpZnlGaW5pc2hlZChMb2FkYWJsZVNjcmlwdCYpIG92
ZXJyaWRlOwogCiAgICAgdmlydHVhbCBTdHJpbmcgc291cmNlQXR0cmlidXRlVmFsdWUoKSBjb25z
dCA9IDA7CiAgICAgdmlydHVhbCBTdHJpbmcgY2hhcnNldEF0dHJpYnV0ZVZhbHVlKCkgY29uc3Qg
PSAwOwpAQCAtOTgsNyArMTAzLDYgQEAgY2xhc3MgU2NyaXB0RWxlbWVudCA6IHByaXZhdGUgQ2Fj
aGVkUmVzb3VyY2VDbGllbnQgewogICAgIHZpcnR1YWwgYm9vbCBoYXNTb3VyY2VBdHRyaWJ1dGUo
KSBjb25zdCA9IDA7CiAKICAgICBFbGVtZW50JiBtX2VsZW1lbnQ7Ci0gICAgQ2FjaGVkUmVzb3Vy
Y2VIYW5kbGU8Q2FjaGVkU2NyaXB0PiBtX2NhY2hlZFNjcmlwdDsKICAgICBXVEY6Ok9yZGluYWxO
dW1iZXIgbV9zdGFydExpbmVOdW1iZXI7CiAgICAgYm9vbCBtX3BhcnNlckluc2VydGVkIDogMTsK
ICAgICBib29sIG1faXNFeHRlcm5hbFNjcmlwdCA6IDE7CkBAIC0xMDksMTQgKzExMywxMiBAQCBj
bGFzcyBTY3JpcHRFbGVtZW50IDogcHJpdmF0ZSBDYWNoZWRSZXNvdXJjZUNsaWVudCB7CiAgICAg
Ym9vbCBtX3dpbGxFeGVjdXRlV2hlbkRvY3VtZW50RmluaXNoZWRQYXJzaW5nIDogMTsKICAgICBi
b29sIG1fZm9yY2VBc3luYyA6IDE7CiAgICAgYm9vbCBtX3dpbGxFeGVjdXRlSW5PcmRlciA6IDE7
Ci0gICAgYm9vbCBtX3JlcXVlc3RVc2VzQWNjZXNzQ29udHJvbCA6IDE7CiAgICAgU3RyaW5nIG1f
Y2hhcmFjdGVyRW5jb2Rpbmc7CiAgICAgU3RyaW5nIG1fZmFsbGJhY2tDaGFyYWN0ZXJFbmNvZGlu
ZzsKKyAgICBSZWZQdHI8TG9hZGFibGVTY3JpcHQ+IG1fbG9hZGFibGVTY3JpcHQ7CiB9OwogCiAv
LyBGSVhNRTogcmVwbGFjZSB3aXRoIGRvd25jYXN0PFNjcmlwdEVsZW1lbnQ+LgogU2NyaXB0RWxl
bWVudCogdG9TY3JpcHRFbGVtZW50SWZQb3NzaWJsZShFbGVtZW50Kik7CiAKIH0KLQotI2VuZGlm
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0UnVubmVyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2RvbS9TY3JpcHRSdW5uZXIuY3BwCmluZGV4IGE1NThmYWU2MTE0Nzc0Y2Y3NzY3
MThkYzIwM2MwZWFkZTA3YWU0OGYuLjUxNTMzNTM1Mjg3MWYyZGUxYzY1ZTMwYzE2OTliZjYyOTBm
MzAyM2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRSdW5uZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRSdW5uZXIuY3BwCkBAIC0yNiw3ICsyNiw2IEBA
CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiU2NyaXB0UnVubmVyLmgiCiAKLSNpbmNs
dWRlICJDYWNoZWRTY3JpcHQuaCIKICNpbmNsdWRlICJFbGVtZW50LmgiCiAjaW5jbHVkZSAiUGVu
ZGluZ1NjcmlwdC5oIgogI2luY2x1ZGUgIlNjcmlwdEVsZW1lbnQuaCIKQEAgLTQ5LDEwICs0OCw5
IEBAIFNjcmlwdFJ1bm5lcjo6flNjcmlwdFJ1bm5lcigpCiAgICAgICAgIG1fZG9jdW1lbnQuZGVj
cmVtZW50TG9hZEV2ZW50RGVsYXlDb3VudCgpOwogfQogCi12b2lkIFNjcmlwdFJ1bm5lcjo6cXVl
dWVTY3JpcHRGb3JFeGVjdXRpb24oU2NyaXB0RWxlbWVudCogc2NyaXB0RWxlbWVudCwgQ2FjaGVk
UmVzb3VyY2VIYW5kbGU8Q2FjaGVkU2NyaXB0PiBjYWNoZWRTY3JpcHQsIEV4ZWN1dGlvblR5cGUg
ZXhlY3V0aW9uVHlwZSkKK3ZvaWQgU2NyaXB0UnVubmVyOjpxdWV1ZVNjcmlwdEZvckV4ZWN1dGlv
bihTY3JpcHRFbGVtZW50KiBzY3JpcHRFbGVtZW50LCBMb2FkYWJsZVNjcmlwdCYgbG9hZGFibGVT
Y3JpcHQsIEV4ZWN1dGlvblR5cGUgZXhlY3V0aW9uVHlwZSkKIHsKICAgICBBU1NFUlQoc2NyaXB0
RWxlbWVudCk7Ci0gICAgQVNTRVJUKGNhY2hlZFNjcmlwdC5nZXQoKSk7CiAKICAgICBFbGVtZW50
JiBlbGVtZW50ID0gc2NyaXB0RWxlbWVudC0+ZWxlbWVudCgpOwogICAgIEFTU0VSVChlbGVtZW50
LmluRG9jdW1lbnQoKSk7CkBAIC02MSwxMSArNTksMTEgQEAgdm9pZCBTY3JpcHRSdW5uZXI6OnF1
ZXVlU2NyaXB0Rm9yRXhlY3V0aW9uKFNjcmlwdEVsZW1lbnQqIHNjcmlwdEVsZW1lbnQsIENhY2hl
ZFIKIAogICAgIHN3aXRjaCAoZXhlY3V0aW9uVHlwZSkgewogICAgIGNhc2UgQVNZTkNfRVhFQ1VU
SU9OOgotICAgICAgICBtX3BlbmRpbmdBc3luY1NjcmlwdHMuYWRkKHNjcmlwdEVsZW1lbnQsIFBl
bmRpbmdTY3JpcHQ6OmNyZWF0ZShlbGVtZW50LCAqY2FjaGVkU2NyaXB0KSk7CisgICAgICAgIG1f
cGVuZGluZ0FzeW5jU2NyaXB0cy5hZGQoc2NyaXB0RWxlbWVudCwgUGVuZGluZ1NjcmlwdDo6Y3Jl
YXRlKGVsZW1lbnQsIGxvYWRhYmxlU2NyaXB0KSk7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2Fz
ZSBJTl9PUkRFUl9FWEVDVVRJT046Ci0gICAgICAgIG1fc2NyaXB0c1RvRXhlY3V0ZUluT3JkZXIu
YXBwZW5kKFBlbmRpbmdTY3JpcHQ6OmNyZWF0ZShlbGVtZW50LCAqY2FjaGVkU2NyaXB0KSk7Cisg
ICAgICAgIG1fc2NyaXB0c1RvRXhlY3V0ZUluT3JkZXIuYXBwZW5kKFBlbmRpbmdTY3JpcHQ6OmNy
ZWF0ZShlbGVtZW50LCBsb2FkYWJsZVNjcmlwdCkpOwogICAgICAgICBicmVhazsKICAgICB9CiB9
CkBAIC0xMTUsOSArMTEzLDkgQEAgdm9pZCBTY3JpcHRSdW5uZXI6OnRpbWVyRmlyZWQoKQogICAg
ICAgICAvLyBQYXBlciBvdmVyIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNDQwNTAKICAgICAgICAgaWYgKCFzY3JpcHQpCiAgICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgYXV0byogc2NyaXB0RWxlbWVudCA9IHRvU2NyaXB0RWxlbWVudElmUG9zc2libGUoJnNj
cmlwdC0+ZWxlbWVudCgpKTsKLSAgICAgICAgQVNTRVJUKHNjcmlwdEVsZW1lbnQpOwotICAgICAg
ICBzY3JpcHRFbGVtZW50LT5leGVjdXRlKHNjcmlwdC0+Y2FjaGVkU2NyaXB0KCkpOworICAgICAg
ICBBU1NFUlQodG9TY3JpcHRFbGVtZW50SWZQb3NzaWJsZSgmc2NyaXB0LT5lbGVtZW50KCkpKTsK
KyAgICAgICAgQVNTRVJUKHNjcmlwdC5uZWVkc0xvYWRpbmcoKSk7CisgICAgICAgIHRvU2NyaXB0
RWxlbWVudElmUG9zc2libGUoJnNjcmlwdC0+ZWxlbWVudCgpKS0+ZXhlY3V0ZVNjcmlwdCgqc2Ny
aXB0LT5sb2FkYWJsZVNjcmlwdCgpKTsKICAgICAgICAgbV9kb2N1bWVudC5kZWNyZW1lbnRMb2Fk
RXZlbnREZWxheUNvdW50KCk7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
ZG9tL1NjcmlwdFJ1bm5lci5oIGIvU291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdFJ1bm5lci5oCmlu
ZGV4IGJhNDE5ZmE5MDdhYzhlZDVhMzM3Mzk0ODM5NWVhZWQxODNkNmJjM2MuLmVlZTFhMjYzYTkz
OTlkZDAzODAyNmMwMDY2Y2FiMzhmNmIzZDM1NzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2RvbS9TY3JpcHRSdW5uZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0UnVubmVy
LmgKQEAgLTIzLDEwICsyMyw4IEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKICAqLwogCi0jaWZuZGVmIFNj
cmlwdFJ1bm5lcl9oCi0jZGVmaW5lIFNjcmlwdFJ1bm5lcl9oCisjcHJhZ21hIG9uY2UKIAotI2lu
Y2x1ZGUgIkNhY2hlZFJlc291cmNlSGFuZGxlLmgiCiAjaW5jbHVkZSAiVGltZXIuaCIKICNpbmNs
dWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgpAQCAtMzQs
MTAgKzMyLDEwIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgQ2FjaGVkU2NyaXB0
OwogY2xhc3MgRG9jdW1lbnQ7CiBjbGFzcyBQZW5kaW5nU2NyaXB0OwogY2xhc3MgU2NyaXB0RWxl
bWVudDsKK2NsYXNzIExvYWRhYmxlU2NyaXB0OwogCiBjbGFzcyBTY3JpcHRSdW5uZXIgewogICAg
IFdURl9NQUtFX05PTkNPUFlBQkxFKFNjcmlwdFJ1bm5lcik7IFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOwpAQCAtNDYsNyArNDQsNyBAQCBjbGFzcyBTY3JpcHRSdW5uZXIgewogICAgIH5TY3JpcHRS
dW5uZXIoKTsKIAogICAgIGVudW0gRXhlY3V0aW9uVHlwZSB7IEFTWU5DX0VYRUNVVElPTiwgSU5f
T1JERVJfRVhFQ1VUSU9OIH07Ci0gICAgdm9pZCBxdWV1ZVNjcmlwdEZvckV4ZWN1dGlvbihTY3Jp
cHRFbGVtZW50KiwgQ2FjaGVkUmVzb3VyY2VIYW5kbGU8Q2FjaGVkU2NyaXB0PiwgRXhlY3V0aW9u
VHlwZSk7CisgICAgdm9pZCBxdWV1ZVNjcmlwdEZvckV4ZWN1dGlvbihTY3JpcHRFbGVtZW50Kiwg
TG9hZGFibGVTY3JpcHQmLCBFeGVjdXRpb25UeXBlKTsKICAgICBib29sIGhhc1BlbmRpbmdTY3Jp
cHRzKCkgY29uc3QgeyByZXR1cm4gIW1fc2NyaXB0c1RvRXhlY3V0ZVNvb24uaXNFbXB0eSgpIHx8
ICFtX3NjcmlwdHNUb0V4ZWN1dGVJbk9yZGVyLmlzRW1wdHkoKSB8fCAhbV9wZW5kaW5nQXN5bmNT
Y3JpcHRzLmlzRW1wdHkoKTsgfQogICAgIHZvaWQgc3VzcGVuZCgpOwogICAgIHZvaWQgcmVzdW1l
KCk7CkBAIC02Myw1ICs2MSwzIEBAIGNsYXNzIFNjcmlwdFJ1bm5lciB7CiB9OwogCiB9Ci0KLSNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFNjcmlwdFJ1
bm5lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MU2NyaXB0UnVubmVyLmNw
cAppbmRleCBlYjc3ODg0MTcwNDgxOTJjZjVlYjA1MGM2YzUyNzg3ZjZhMDQ5ODBlLi5kNjI2YTc5
ZGY3NDAwMTcxNDljYjgxNThjYzg3MmE0ZTQ0ZmIwZWRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL3BhcnNlci9IVE1MU2NyaXB0UnVubmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL3BhcnNlci9IVE1MU2NyaXB0UnVubmVyLmNwcApAQCAtMjYsOCArMjYsNiBAQAogI2lu
Y2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkhUTUxTY3JpcHRSdW5uZXIuaCIKIAotI2luY2x1
ZGUgIkNhY2hlZFNjcmlwdC5oIgotI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlTG9hZGVyLmgiCiAj
aW5jbHVkZSAiRWxlbWVudC5oIgogI2luY2x1ZGUgIkV2ZW50LmgiCiAjaW5jbHVkZSAiRXZlbnRO
YW1lcy5oIgpAQCAtODksMTcgKzg3LDYgQEAgaW5saW5lIFJlZjxFdmVudD4gY3JlYXRlU2NyaXB0
TG9hZEV2ZW50KCkKICAgICByZXR1cm4gRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkubG9hZEV2
ZW50LCBmYWxzZSwgZmFsc2UpOwogfQogCi1TY3JpcHRTb3VyY2VDb2RlIEhUTUxTY3JpcHRSdW5u
ZXI6OnNvdXJjZUZyb21QZW5kaW5nU2NyaXB0KGNvbnN0IFBlbmRpbmdTY3JpcHQmIHNjcmlwdCwg
Ym9vbCYgZXJyb3JPY2N1cnJlZCkgY29uc3QKLXsKLSAgICBpZiAoc2NyaXB0LmNhY2hlZFNjcmlw
dCgpKSB7Ci0gICAgICAgIGVycm9yT2NjdXJyZWQgPSBzY3JpcHQuY2FjaGVkU2NyaXB0KCktPmVy
cm9yT2NjdXJyZWQoKTsKLSAgICAgICAgQVNTRVJUKHNjcmlwdC5jYWNoZWRTY3JpcHQoKS0+aXNM
b2FkZWQoKSk7Ci0gICAgICAgIHJldHVybiBTY3JpcHRTb3VyY2VDb2RlKHNjcmlwdC5jYWNoZWRT
Y3JpcHQoKSk7Ci0gICAgfQotICAgIGVycm9yT2NjdXJyZWQgPSBmYWxzZTsKLSAgICByZXR1cm4g
U2NyaXB0U291cmNlQ29kZShzY3JpcHQuZWxlbWVudCgpLnRleHRDb250ZW50KCksIGRvY3VtZW50
VVJMRm9yU2NyaXB0RXhlY3V0aW9uKG1fZG9jdW1lbnQpLCBzY3JpcHQuc3RhcnRpbmdQb3NpdGlv
bigpKTsKLX0KLQogYm9vbCBIVE1MU2NyaXB0UnVubmVyOjppc1BlbmRpbmdTY3JpcHRSZWFkeShj
b25zdCBQZW5kaW5nU2NyaXB0JiBzY3JpcHQpCiB7CiAgICAgaWYgKCFtX2RvY3VtZW50KQpAQCAt
MTI1LDggKzExMiw3IEBAIHZvaWQgSFRNTFNjcmlwdFJ1bm5lcjo6ZXhlY3V0ZVBhcnNpbmdCbG9j
a2luZ1NjcmlwdCgpCiAKIHZvaWQgSFRNTFNjcmlwdFJ1bm5lcjo6ZXhlY3V0ZVBlbmRpbmdTY3Jp
cHRBbmREaXNwYXRjaEV2ZW50KFJlZlB0cjxQZW5kaW5nU2NyaXB0PiBwZW5kaW5nU2NyaXB0KQog
ewotICAgIGJvb2wgZXJyb3JPY2N1cnJlZCA9IGZhbHNlOwotICAgIFNjcmlwdFNvdXJjZUNvZGUg
c291cmNlQ29kZSA9IHNvdXJjZUZyb21QZW5kaW5nU2NyaXB0KCpwZW5kaW5nU2NyaXB0LCBlcnJv
ck9jY3VycmVkKTsKKyAgICBib29sIGVycm9yT2NjdXJyZWQgPSBwZW5kaW5nU2NyaXB0LT5lcnJv
ck9jY3VycmVkKCk7CiAKICAgICAvLyBTdG9wIHdhdGNoaW5nIGxvYWRzIGJlZm9yZSBleGVjdXRl
U2NyaXB0IHRvIHByZXZlbnQgcmVjdXJzaW9uIGlmIHRoZSBzY3JpcHQgcmVsb2FkcyBpdHNlbGYu
CiAgICAgaWYgKHBlbmRpbmdTY3JpcHQtPndhdGNoaW5nRm9yTG9hZCgpKQpAQCAtMTQyLDcgKzEy
OCwxMCBAQCB2b2lkIEhUTUxTY3JpcHRSdW5uZXI6OmV4ZWN1dGVQZW5kaW5nU2NyaXB0QW5kRGlz
cGF0Y2hFdmVudChSZWZQdHI8UGVuZGluZ1NjcmlwdAogICAgICAgICAgICAgc2NyaXB0RWxlbWVu
dC0+ZGlzcGF0Y2hFcnJvckV2ZW50KCk7CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgQVNT
RVJUKGlzRXhlY3V0aW5nU2NyaXB0KCkpOwotICAgICAgICAgICAgc2NyaXB0RWxlbWVudC0+ZXhl
Y3V0ZVNjcmlwdChzb3VyY2VDb2RlKTsKKyAgICAgICAgICAgIGlmIChhdXRvKiBsb2FkYWJsZVNj
cmlwdCA9IHBlbmRpbmdTY3JpcHQtPmxvYWRhYmxlU2NyaXB0KCkpCisgICAgICAgICAgICAgICAg
c2NyaXB0RWxlbWVudC0+ZXhlY3V0ZVNjcmlwdFdpdGhvdXREaXNwYXRjaGluZ0V2ZW50KCpsb2Fk
YWJsZVNjcmlwdCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgc2NyaXB0RWxl
bWVudC0+ZXhlY3V0ZVNjcmlwdChTY3JpcHRTb3VyY2VDb2RlKHBlbmRpbmdTY3JpcHQtPmVsZW1l
bnQoKS50ZXh0Q29udGVudCgpLCBkb2N1bWVudFVSTEZvclNjcmlwdEV4ZWN1dGlvbihtX2RvY3Vt
ZW50KSwgcGVuZGluZ1NjcmlwdC0+c3RhcnRpbmdQb3NpdGlvbigpKSk7CiAgICAgICAgICAgICBw
ZW5kaW5nU2NyaXB0LT5lbGVtZW50KCkuZGlzcGF0Y2hFdmVudChjcmVhdGVTY3JpcHRMb2FkRXZl
bnQoKSk7CiAgICAgICAgIH0KICAgICB9CkBAIC0yMzYsOCArMjI1LDggQEAgc3RhdGljIFJlZjxQ
ZW5kaW5nU2NyaXB0PiByZXF1ZXN0UGVuZGluZ1NjcmlwdChFbGVtZW50KiBzY3JpcHQpCiB7CiAg
ICAgYXV0byYgc2NyaXB0RWxlbWVudCA9ICp0b1NjcmlwdEVsZW1lbnRJZlBvc3NpYmxlKHNjcmlw
dCk7CiAgICAgQVNTRVJUKHNjcmlwdEVsZW1lbnQud2lsbEJlUGFyc2VyRXhlY3V0ZWQoKSk7Ci0g
ICAgQVNTRVJUKHNjcmlwdEVsZW1lbnQuY2FjaGVkU2NyaXB0KCkpOwotICAgIHJldHVybiBQZW5k
aW5nU2NyaXB0OjpjcmVhdGUoKnNjcmlwdCwgKnNjcmlwdEVsZW1lbnQuY2FjaGVkU2NyaXB0KCkp
OworICAgIEFTU0VSVChzY3JpcHRFbGVtZW50LmxvYWRhYmxlU2NyaXB0KCkpOworICAgIHJldHVy
biBQZW5kaW5nU2NyaXB0OjpjcmVhdGUoKnNjcmlwdCwgKnNjcmlwdEVsZW1lbnQubG9hZGFibGVT
Y3JpcHQoKSk7CiB9CiAKIHZvaWQgSFRNTFNjcmlwdFJ1bm5lcjo6cmVxdWVzdFBhcnNpbmdCbG9j
a2luZ1NjcmlwdChFbGVtZW50KiBlbGVtZW50KQpAQCAtMjQ2LDcgKzIzNSw3IEBAIHZvaWQgSFRN
TFNjcmlwdFJ1bm5lcjo6cmVxdWVzdFBhcnNpbmdCbG9ja2luZ1NjcmlwdChFbGVtZW50KiBlbGVt
ZW50KQogICAgIG1fcGFyc2VyQmxvY2tpbmdTY3JpcHQgPSByZXF1ZXN0UGVuZGluZ1NjcmlwdChl
bGVtZW50KTsKICAgICBBU1NFUlQobV9wYXJzZXJCbG9ja2luZ1NjcmlwdC0+bmVlZHNMb2FkaW5n
KCkpOwogCi0gICAgLy8gV2Ugb25seSBjYXJlIGFib3V0IGEgbG9hZCBjYWxsYmFjayBpZiBjYWNo
ZWRTY3JpcHQgaXMgbm90IGFscmVhZHkKKyAgICAvLyBXZSBvbmx5IGNhcmUgYWJvdXQgYSBsb2Fk
IGNhbGxiYWNrIGlmIExvYWRhYmxlU2NyaXB0IGlzIG5vdCBhbHJlYWR5CiAgICAgLy8gaW4gdGhl
IGNhY2hlLiBDYWxsZXJzIHdpbGwgYXR0ZW1wdCB0byBydW4gdGhlIG1fcGFyc2VyQmxvY2tpbmdT
Y3JpcHQKICAgICAvLyBpZiBwb3NzaWJsZSBiZWZvcmUgcmV0dXJuaW5nIGNvbnRyb2wgdG8gdGhl
IHBhcnNlci4KICAgICBpZiAoIW1fcGFyc2VyQmxvY2tpbmdTY3JpcHQtPmlzTG9hZGVkKCkpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MU2NyaXB0UnVubmVyLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MU2NyaXB0UnVubmVyLmgKaW5kZXggZTZi
NWVkNTI2ODU5MjgwNTExMTMyNzA3Y2UwMTI5NTc2ZjcxYzQ5NC4uOTFkODg2YzM4YTZlZDFmZWUx
OWFjOWZiNTc4YmQ4NTkzM2U2NWQ0ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9w
YXJzZXIvSFRNTFNjcmlwdFJ1bm5lci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2Vy
L0hUTUxTY3JpcHRSdW5uZXIuaApAQCAtMzIsOCArMzIsNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLWNsYXNzIENhY2hlZFJlc291cmNlOwotY2xhc3MgQ2FjaGVkU2NyaXB0OwogY2xhc3Mg
RG9jdW1lbnQ7CiBjbGFzcyBFbGVtZW50OwogY2xhc3MgRnJhbWU7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS94bWwvcGFyc2VyL1hNTERvY3VtZW50UGFyc2VyTGlieG1sMi5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS94bWwvcGFyc2VyL1hNTERvY3VtZW50UGFyc2VyTGlieG1sMi5jcHAKaW5kZXgg
YTk5ZjlkZTcyNzNhNTYyZTE0NmQ5MzUzMjkyYTA1MDBiNDQ0OGQ3ZC4uOGRkNzE5ZWNkZTUzODVh
NmY3ZDc0YTZjZmQ1OGQ0MmRhMGM3NDJhMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUveG1s
L3BhcnNlci9YTUxEb2N1bWVudFBhcnNlckxpYnhtbDIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3htbC9wYXJzZXIvWE1MRG9jdW1lbnRQYXJzZXJMaWJ4bWwyLmNwcApAQCAtNDUsNiArNDUsNyBA
QAogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIkhUTUxTdHlsZUVsZW1lbnQuaCIK
ICNpbmNsdWRlICJIVE1MVGVtcGxhdGVFbGVtZW50LmgiCisjaW5jbHVkZSAiTG9hZGFibGVDbGFz
c2ljU2NyaXB0LmgiCiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlByb2Nlc3NpbmdJbnN0
cnVjdGlvbi5oIgogI2luY2x1ZGUgIlJlc291cmNlRXJyb3IuaCIKQEAgLTkyMCw4ICs5MjEsMTAg
QEAgdm9pZCBYTUxEb2N1bWVudFBhcnNlcjo6ZW5kRWxlbWVudE5zKCkKIAogICAgICAgICBpZiAo
c2NyaXB0RWxlbWVudC0+cmVhZHlUb0JlUGFyc2VyRXhlY3V0ZWQoKSkKICAgICAgICAgICAgIHNj
cmlwdEVsZW1lbnQtPmV4ZWN1dGVTY3JpcHQoU2NyaXB0U291cmNlQ29kZShzY3JpcHRFbGVtZW50
LT5zY3JpcHRDb250ZW50KCksIGRvY3VtZW50KCktPnVybCgpLCBtX3NjcmlwdFN0YXJ0UG9zaXRp
b24pKTsKLSAgICAgICAgZWxzZSBpZiAoc2NyaXB0RWxlbWVudC0+d2lsbEJlUGFyc2VyRXhlY3V0
ZWQoKSkgewotICAgICAgICAgICAgbV9wZW5kaW5nU2NyaXB0ID0gc2NyaXB0RWxlbWVudC0+Y2Fj
aGVkU2NyaXB0KCk7CisgICAgICAgIGVsc2UgaWYgKHNjcmlwdEVsZW1lbnQtPndpbGxCZVBhcnNl
ckV4ZWN1dGVkKCkgJiYgc2NyaXB0RWxlbWVudC0+bG9hZGFibGVTY3JpcHQoKSAmJiBpczxMb2Fk
YWJsZUNsYXNzaWNTY3JpcHQ+KCpzY3JpcHRFbGVtZW50LT5sb2FkYWJsZVNjcmlwdCgpKSkgewor
ICAgICAgICAgICAgLy8gRklYTUU6IEFsbG93ICJtb2R1bGUiIHNjcmlwdHMgZm9yIFhNTCBkb2N1
bWVudHMuCisgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTYxNjUxCisgICAgICAgICAgICBtX3BlbmRpbmdTY3JpcHQgPSAmZG93bmNhc3Q8TG9h
ZGFibGVDbGFzc2ljU2NyaXB0Pigqc2NyaXB0RWxlbWVudC0+bG9hZGFibGVTY3JpcHQoKSkuY2Fj
aGVkU2NyaXB0KCk7CiAgICAgICAgICAgICBtX3NjcmlwdEVsZW1lbnQgPSAmZWxlbWVudDsKICAg
ICAgICAgICAgIG1fcGVuZGluZ1NjcmlwdC0+YWRkQ2xpZW50KHRoaXMpOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>288193</attachid>
            <date>2016-09-07 15:24:38 -0700</date>
            <delta_ts>2016-09-07 15:49:53 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-161674-20160907152213.patch</filename>
            <type>text/plain</type>
            <size>59271</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA1NTQ5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzc3ZWZlMzQxMGIyNmIz
ZjNjMjMwNGU4ODdkZjljYThhZjljYjQ0OC4uMjkwNWU4YmNkMWQ4YjAyYjYwNzEzZDllZjlkZDg4
MGFkZWJjNTVjNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDkyIEBACisyMDE2LTA5LTA3ICBZdXN1
a2UgU3V6dWtpICA8dXRhdGFuZS50ZWFAZ21haWwuY29tPgorCisgICAgICAgIEludHJvZHVjZSBh
YnN0cmFjdCBjbGFzcyBMb2FkYWJsZVNjcmlwdCBmb3IgY2xhc3NpYyBzY3JpcHQgYW5kIG1vZHVs
ZSBncmFwaAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTYxNjc0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
VG8gcHJlcGFyZSBmb3IgU2NyaXB0TW9kdWxlR3JhcGgsIHdlIGludHJvZHVjZSB0aGUgYWJzdHJh
Y3QgY2xhc3Mgb3ZlciB0aGUgY2xhc3NpYyBzY3JpcHQKKyAgICAgICAgYW5kIHRoZSBtb2R1bGUg
c2NyaXB0LCBMb2FkYWJsZVNjcmlwdC4KKworICAgICAgICBObyBiZWhhdmlvciBjaGFuZ2UuCisK
KyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2o6CisgICAgICAgICogZG9tL0xvYWRhYmxlQ2xhc3NpY1NjcmlwdC5jcHA6
IEFkZGVkLiBMb2FkYWJsZUNsYXNzaWNTY3JpcHQgaXMgdGhlIGRlcml2ZWQgY2xhc3MgZnJvbSB0
aGUKKyAgICAgICAgTG9hZGFibGVTY3JpcHQuIEluIHRoZSBtb2R1bGUgcGF0Y2gsIHdlIHdpbGwg
aW50cm9kdWNlIExvYWRhYmxlU2NyaXB0TW9kdWxlR3JhcGggd2hpY2ggaXMgYWxzbworICAgICAg
ICB0aGUgZGVyaXZlZCBjbGFzcyBmcm9tIHRoZSBMb2FkYWJsZVNjcmlwdC4gSXQgaXMgdXNlZCBm
b3IgdGhlIGV4dGVybmFsIGNsYXNzaWMgc2NyaXB0LgorICAgICAgICAoV2ViQ29yZTo6TG9hZGFi
bGVDbGFzc2ljU2NyaXB0OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6TG9hZGFibGVDbGFz
c2ljU2NyaXB0OjpMb2FkYWJsZUNsYXNzaWNTY3JpcHQpOgorICAgICAgICAoV2ViQ29yZTo6TG9h
ZGFibGVDbGFzc2ljU2NyaXB0Ojp+TG9hZGFibGVDbGFzc2ljU2NyaXB0KToKKyAgICAgICAgKFdl
YkNvcmU6OkxvYWRhYmxlQ2xhc3NpY1NjcmlwdDo6aXNMb2FkZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6TG9hZGFibGVDbGFzc2ljU2NyaXB0OjplcnJvck9jY3VycmVkKTogQmV5b25kIHRoZSBib29s
ZWFuIHZhbHVlLCB0aGlzIGNhbiByZXR1cm4gdGhlIGRldGFpbAorICAgICAgICBvZiB0aGUgZXJy
b3IuIFRoaXMgZGV0YWlsZWQgaW5mb3JtYXRpb24gd2lsbCBiZSB1c2VkIHRvIHJlcG9ydCBpdCB0
byB0aGUgaW5zcGVjdG9yIGluIHRoZSBTY3JpcHRFbGVtZW50LgorICAgICAgICAoV2ViQ29yZTo6
TG9hZGFibGVDbGFzc2ljU2NyaXB0Ojp3YXNDYW5jZWxlZCk6CisgICAgICAgIChXZWJDb3JlOjpM
b2FkYWJsZUNsYXNzaWNTY3JpcHQ6Om5vdGlmeUZpbmlzaGVkKTogTm9zbmlmZiBhbmQgY3Jvc3Mt
b3JpZ2luIGxvYWRpbmcgZXJyb3JzIGFyZSBoYW5kbGVkIGhlcmUsCisgICAgICAgIGluc3RlYWQg
b2YgZXhwb3NpbmcgQ2FjaGVkU2NyaXB0Ki4KKyAgICAgICAgKiBkb20vTG9hZGFibGVDbGFzc2lj
U2NyaXB0Lmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2RvbS9QZW5kaW5nU2NyaXB0Lmgu
CisgICAgICAgIChpc1R5cGUpOgorICAgICAgICAqIGRvbS9Mb2FkYWJsZVNjcmlwdC5jcHA6IENv
cGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRSdW5uZXIuaC4gTmV3IHdyYXBwZXIg
Zm9yIENhY2hlZFNjcmlwdAorICAgICAgICBhbmQgU2NyaXB0TW9kdWxlR3JhcGguIFdlIGludHJv
ZHVjZSBhIG5ldyB3cmFwcGVyIHRvIGhhbmRsZSB0aGUgYWJvdmUgMiB0aGluZ3MgaW4gdGhlIHNh
bWUgd2F5LgorICAgICAgICBXZSB0YWtlIHRoZSB3YXkgdG8gaW50cm9kdWNlIGEgbmV3IHdyYXBw
ZXIgaW5zdGVhZCBvZiBpbnRyb2R1Y2luZyBhIG5ldyBpbnRlcmZhY2UgdGhhdCBpcyBpbmhlcml0
ZWQgYnkKKyAgICAgICAgQ2FjaGVkU2NyaXB0IGFuZCBTY3JpcHRNb2R1bGVHcmFwaC4gVGhpcyBp
cyBiZWNhdXNlIFNjcmlwdE1vZHVsZUdyYXBoIGlzIHJlZi1jb3VudGVkIHdoaWxlIENhY2hlZFNj
cmlwdAorICAgICAgICBpcyBtYW5hZ2VkIGJ5IENhY2hlZFJlc291cmNlSGFuZGxlLiBXaGlsZSB0
aGlzIHBhdGNoIGRvZXMgbm90IGNvbnRhaW4gU2NyaXB0TW9kdWxlR3JhcGggcGFydCwgdGhpcwor
ICAgICAgICBzaG91bGQgYmUgYWRkZWQgaW4gdGhlIG1vZHVsZSBwYXRjaCBhbmQgYXQgdGhhdCB0
aW1lLCB0aGlzIHNob3VsZCBiZSBtYW5hZ2VkIGJ5IHRoaXMgTG9hZGFibGVTY3JpcHQncworICAg
ICAgICBzdWJjbGFzcy4gQW5kIHdlIGludHJvZHVjZSBUeXBlQ2FzdHMgdHJhaXRzIGZvciBMb2Fk
YWJsZVNjcmlwdCB0byBhbGxvdyBgaXM8PmAgYW5kIGBkb3duY2FzdDw+YC4KKyAgICAgICAgKFdl
YkNvcmU6OkxvYWRhYmxlU2NyaXB0OjphZGRDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6TG9h
ZGFibGVTY3JpcHQ6OnJlbW92ZUNsaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpMb2FkYWJsZVNj
cmlwdDo6bm90aWZ5Q2xpZW50RmluaXNoZWQpOiBQcm9wYWdhdGUgdGhlIG5vdGlmaWNhdGlvbi4K
KyAgICAgICAgKiBkb20vTG9hZGFibGVTY3JpcHQuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNv
cmUvZG9tL1NjcmlwdFJ1bm5lci5oLgorICAgICAgICAoV2ViQ29yZTo6TG9hZGFibGVTY3JpcHQ6
On5Mb2FkYWJsZVNjcmlwdCk6CisgICAgICAgIChXZWJDb3JlOjpMb2FkYWJsZVNjcmlwdDo6aXND
bGFzc2ljU2NyaXB0KTogVXNlZCBpbiBUeXBlQ2FzdHMgKGBpczw+YCBldGMuKS4KKyAgICAgICAg
KFdlYkNvcmU6OkxvYWRhYmxlU2NyaXB0Ojppc01vZHVsZUdyYXBoKTogRGl0dG8uCisgICAgICAg
ICogZG9tL0xvYWRhYmxlU2NyaXB0Q2xpZW50Lmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3Jl
L2RvbS9TY3JpcHRSdW5uZXIuaC4KKyAgICAgICAgKFdlYkNvcmU6OkxvYWRhYmxlU2NyaXB0Q2xp
ZW50Ojp+TG9hZGFibGVTY3JpcHRDbGllbnQpOgorICAgICAgICAqIGRvbS9QZW5kaW5nU2NyaXB0
LmNwcDogVXNlIExvYWRhYmxlU2NyaXB0IGluc3RlYWQgb2YgQ2FjaGVkU2NyaXB0LgorICAgICAg
ICAoV2ViQ29yZTo6UGVuZGluZ1NjcmlwdDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlBl
bmRpbmdTY3JpcHQ6OlBlbmRpbmdTY3JpcHQpOgorICAgICAgICAoV2ViQ29yZTo6UGVuZGluZ1Nj
cmlwdDo6flBlbmRpbmdTY3JpcHQpOgorICAgICAgICAoV2ViQ29yZTo6UGVuZGluZ1NjcmlwdDo6
bG9hZGFibGVTY3JpcHQpOgorICAgICAgICAoV2ViQ29yZTo6UGVuZGluZ1NjcmlwdDo6bm90aWZ5
RmluaXNoZWQpOgorICAgICAgICAoV2ViQ29yZTo6UGVuZGluZ1NjcmlwdDo6aXNMb2FkZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6UGVuZGluZ1NjcmlwdDo6ZXJyb3JPY2N1cnJlZCk6CisgICAgICAg
IChXZWJDb3JlOjpQZW5kaW5nU2NyaXB0OjpjYWNoZWRTY3JpcHQpOiBEZWxldGVkLgorICAgICAg
ICAqIGRvbS9QZW5kaW5nU2NyaXB0Lmg6CisgICAgICAgICogZG9tL1NjcmlwdEVsZW1lbnQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RWxlbWVudDo6U2NyaXB0RWxlbWVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpTY3JpcHRFbGVtZW50OjpoYW5kbGVTb3VyY2VBdHRyaWJ1dGUpOiBDaGFu
Z2Ugc291cmNlVXJsIHRvIHNvdXJjZVVSTCB0byBiZSBjb25zaXN0ZW50LgorICAgICAgICAoV2Vi
Q29yZTo6U2NyaXB0RWxlbWVudDo6cHJlcGFyZVNjcmlwdCk6CisgICAgICAgIChXZWJDb3JlOjpT
Y3JpcHRFbGVtZW50OjpyZXF1ZXN0Q2FjaGVkU2NyaXB0KTogRXh0cmFjdCB0aGUgY29kZSByZXF1
ZXN0aW5nIHRoZQorICAgICAgICBDYWNoZWRTY3JpcHQgZnJvbSByZXF1ZXN0U2NyaXB0LiBUaGlz
IHdpbGwgYWxzbyBiZSB1c2VkIGJ5IHRoZSBtb2R1bGUgZmV0Y2hlci4KKyAgICAgICAgKFdlYkNv
cmU6OlNjcmlwdEVsZW1lbnQ6OnJlcXVlc3RDbGFzc2ljU2NyaXB0KTogcmVxdWVzdFNjcmlwdCBp
cyByZW5hbWVkIHRvIHJlcXVlc3RDbGFzc2ljU2NyaXB0LgorICAgICAgICAoV2ViQ29yZTo6U2Ny
aXB0RWxlbWVudDo6ZXhlY3V0ZVNjcmlwdCk6IE5vdyBpbnNwZWN0b3IgZXJyb3IgcmVwb3J0aW5n
IGlzIGFsc28gZG9uZSBpbiB0aGlzIGZ1bmN0aW9uLgorICAgICAgICBXaGVuIGFuIGVycm9yIG9j
Y3VycywgTG9hZGFibGVTY3JpcHQ6OmVycm9yT2NjdXJyZWQoKSByZXR1cm5zIHRoZSBlcnJvciB3
aGljaCBtYXkgaW5jbHVkZSB0aGUgaW5mb3JtYXRpb24KKyAgICAgICAgdG8gcmVwb3J0IHRoZSBl
cnJvciB0byB0aGUgaW5zcGVjdG9yLiBub3NuaWZmIGFuZCBjcm9zcy1vcmlnaW4gbG9hZGluZyBl
cnJvcnMgYXJlIG5vdyBkZXRlY3RlZCBieSB0aGUKKyAgICAgICAgTG9hZGFibGVDbGFzc2ljU2Ny
aXB0IGFuZCByZXBvcnRlZCB0aHJvdWdoIHRoaXMgZXJyb3JPY2N1cnJlZCgpLgorICAgICAgICAo
V2ViQ29yZTo6U2NyaXB0RWxlbWVudDo6c3RvcExvYWRSZXF1ZXN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcmlwdEVsZW1lbnQ6OmV4ZWN1dGVTY3JpcHRBbmREaXNwYXRjaEV2ZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcmlwdEVsZW1lbnQ6OmV4ZWN1dGVRdWV1ZWRTY3JpcHRBbmREaXNwYXRj
aEV2ZW50KTogTW92ZSB0aGUgY29kZSBmcm9tIFNjcmlwdFJ1bm5lci4KKyAgICAgICAgKFdlYkNv
cmU6OlNjcmlwdEVsZW1lbnQ6OmV4ZWN1dGVQZW5kaW5nU2NyaXB0QW5kRGlzcGF0Y2hFdmVudCk6
IE1vdmUgdGhlIGNvZGUgZnJvbSBIVE1MU2NyaXB0UnVubmVyLgorICAgICAgICAoV2ViQ29yZTo6
U2NyaXB0RWxlbWVudDo6bm90aWZ5RmluaXNoZWQpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0
RWxlbWVudDo6cmVxdWVzdFNjcmlwdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3Jp
cHRFbGVtZW50OjpleGVjdXRlKTogRGVsZXRlZC4KKyAgICAgICAgKiBkb20vU2NyaXB0RWxlbWVu
dC5oOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RWxlbWVudDo6bG9hZGFibGVTY3JpcHQpOgor
ICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RWxlbWVudDo6Y2FjaGVkU2NyaXB0KTogRGVsZXRlZC4K
KyAgICAgICAgKiBkb20vU2NyaXB0UnVubmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlw
dFJ1bm5lcjo6cXVldWVTY3JpcHRGb3JFeGVjdXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U2Ny
aXB0UnVubmVyOjp0aW1lckZpcmVkKTogVXNlIFNjcmlwdEVsZW1lbnQ6OmV4ZWN1dGVRdWV1ZWRT
Y3JpcHRBbmREaXNwYXRjaEV2ZW50LgorICAgICAgICAqIGRvbS9TY3JpcHRSdW5uZXIuaDoKKyAg
ICAgICAgKiBodG1sL3BhcnNlci9IVE1MU2NyaXB0UnVubmVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxTY3JpcHRSdW5uZXI6OmV4ZWN1dGVQZW5kaW5nU2NyaXB0QW5kRGlzcGF0Y2hFdmVu
dCk6CisgICAgICAgIChXZWJDb3JlOjpyZXF1ZXN0UGVuZGluZ1NjcmlwdCk6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MU2NyaXB0UnVubmVyOjpyZXF1ZXN0UGFyc2luZ0Jsb2NraW5nU2NyaXB0KToK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxTY3JpcHRSdW5uZXI6OnNvdXJjZUZyb21QZW5kaW5nU2Ny
aXB0KTogRGVsZXRlZC4KKyAgICAgICAgKiBodG1sL3BhcnNlci9IVE1MU2NyaXB0UnVubmVyLmg6
IFVzZSBTY3JpcHRFbGVtZW50OjpleGVjdXRlUGVuZGluZ1NjcmlwdEFuZERpc3BhdGNoRXZlbnQu
CisgICAgICAgICogeG1sL3BhcnNlci9YTUxEb2N1bWVudFBhcnNlckxpYnhtbDIuY3BwOiBDdXJy
ZW50bHksIHdlIGRvIG5vdGhpbmcgYWJvdXQgWE1MRG9jdW1lbnQgaW4gdGhpcyBwYXRjaC4KKyAg
ICAgICAgV2Ugc2hvdWxkIHN1cHBvcnQgdGhlIG1vZHVsZSBzY3JpcHQsIGJ1dCBiZWZvcmUgdGhh
dCwgd2Ugc2hvdWxkIHJlZmFjdG9yIHRoaXMgcGVuZGluZyBzY3JpcHQgaGFuZGxpbmcuCisgICAg
ICAgIChXZWJDb3JlOjpYTUxEb2N1bWVudFBhcnNlcjo6ZW5kRWxlbWVudE5zKToKKwogMjAxNi0w
OS0wNyAgWW91ZW5uIEZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+CiAKICAgICAgICAgW1N0cmVh
bXMgQVBJXSBTZXBhcmF0ZSBjb21waWxlIGZsYWcgZm9yIFJlYWRhYmxlU3RyZWFtIGFuZCBXcml0
YWJsZVN0cmVhbQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQgYi9T
b3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAppbmRleCA3NjE0ZmM2YmIxZGI4NGU2MWQ5ODVm
MGQwMjdiZTY5NTk5ZDA2NjJlLi42ZDFmOGNiODlkMTZjMjU2ODUzNmNiNzllY2I1MmNiNzJmNzA2
OTUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dApAQCAtMTQzNiw2ICsxNDM2LDggQEAgc2V0KFdlYkNv
cmVfU09VUkNFUwogICAgIGRvbS9JbmxpbmVTdHlsZVNoZWV0T3duZXIuY3BwCiAgICAgZG9tL0tl
eWJvYXJkRXZlbnQuY3BwCiAgICAgZG9tL0xpdmVOb2RlTGlzdC5jcHAKKyAgICBkb20vTG9hZGFi
bGVDbGFzc2ljU2NyaXB0LmNwcAorICAgIGRvbS9Mb2FkYWJsZVNjcmlwdC5jcHAKICAgICBkb20v
TWVzc2FnZUNoYW5uZWwuY3BwCiAgICAgZG9tL01lc3NhZ2VFdmVudC5jcHAKICAgICBkb20vTWVz
c2FnZVBvcnQuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKaW5kZXggNjJlOTIxNTRkZjdkZTQ0MjFmZjE0ZDljOWRkMTY4OTlhYmZmYmU0
OC4uNWRkZjAyMGRjOWEyMjUzZGE4MTdhMzZmMWI4MjQzYWQ1ODU2NjQ0NyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNjA5OCw2
ICs2MDk4LDExIEBACiAJCUUxRkY4RjZEMTgwREI1QkUwMDEzMjY3NCAvKiBDcnlwdG9BbGdvcml0
aG1SZWdpc3RyeS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRTFGRjhGNkIxODBEQjVCRTAwMTMyNjc0IC8qIENyeXB0b0FsZ29yaXRobVJlZ2lzdHJ5Lmgg
Ki87IH07CiAJCUUzODgzODk4MUJBRDE0NUYwMEQ2MkVFMyAvKiBTY3JpcHRNb2R1bGVMb2FkZXIu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTM4ODM4
OTQxQkFEMTQ1RjAwRDYyRUUzIC8qIFNjcmlwdE1vZHVsZUxvYWRlci5jcHAgKi87IH07CiAJCUUz
ODgzODk5MUJBRDE0NUYwMEQ2MkVFMyAvKiBTY3JpcHRNb2R1bGVMb2FkZXIuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUzODgzODk1MUJBRDE0NUYwMEQ2
MkVFMyAvKiBTY3JpcHRNb2R1bGVMb2FkZXIuaCAqLzsgfTsKKwkJRTNCMkYwRUIxRDdGNEM5RDAw
QjBDOUQxIC8qIExvYWRhYmxlQ2xhc3NpY1NjcmlwdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFM0IyRjBFMzFEN0YzNUVDMDBCMEM5RDEgLyogTG9h
ZGFibGVDbGFzc2ljU2NyaXB0LmNwcCAqLzsgfTsKKwkJRTNCMkYwRUMxRDdGNENBMTAwQjBDOUQx
IC8qIExvYWRhYmxlU2NyaXB0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEUzQjJGMEU5MUQ3RjNEM0MwMEIwQzlEMSAvKiBMb2FkYWJsZVNjcmlwdC5j
cHAgKi87IH07CisJCUUzQjJGMEVEMUQ3RjRDQTMwMEIwQzlEMSAvKiBMb2FkYWJsZVNjcmlwdC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTNCMkYwRTcx
RDdGMzVFQzAwQjBDOUQxIC8qIExvYWRhYmxlU2NyaXB0LmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJRTNCMkYwRUUxRDdGNENBOTAwQjBDOUQxIC8q
IExvYWRhYmxlU2NyaXB0Q2xpZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBFM0IyRjBFODFEN0YzNUVDMDBCMEM5RDEgLyogTG9hZGFibGVTY3JpcHRD
bGllbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owor
CQlFM0IyRjBGMDFEN0Y0Q0I1MDBCMEM5RDEgLyogTG9hZGFibGVDbGFzc2ljU2NyaXB0LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFM0IyRjBFNDFEN0Yz
NUVDMDBCMEM5RDEgLyogTG9hZGFibGVDbGFzc2ljU2NyaXB0LmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTNGQTM4NjQxRDcxODEyRDAwQUE1OTUw
IC8qIFBlbmRpbmdTY3JpcHRDbGllbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEUzRkEzODYxMUQ3MTZFNzYwMEFBNTk1MCAvKiBQZW5kaW5nU2NyaXB0
Q2xpZW50LmggKi87IH07CiAJCUU0MDFDMjc1MTdDRTUzRUMwMEM0MUEzNSAvKiBFbGVtZW50SXRl
cmF0b3JBc3NlcnRpb25zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBFNDAxQzI3NDE3Q0U1M0VDMDBDNDFBMzUgLyogRWxlbWVudEl0ZXJhdG9yQXNzZXJ0
aW9ucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CUU0MDFFMEE0MUMzQzBCODMwMEYzNEQxMCAvKiBTdHlsZUNoYW5nZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQwMUUwQTMxQzNDMEI4MzAwRjM0RDEw
IC8qIFN0eWxlQ2hhbmdlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKQEAgLTEzNjczLDYgKzEzNjc4LDExIEBACiAJCUUxRkY4RjZCMTgwREI1QkUwMDEz
MjY3NCAvKiBDcnlwdG9BbGdvcml0aG1SZWdpc3RyeS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBDcnlwdG9BbGdvcml0aG1SZWdpc3RyeS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlFMzg4Mzg5NDFCQUQxNDVGMDBENjJFRTMgLyogU2NyaXB0TW9kdWxlTG9hZGVy
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNjcmlwdE1vZHVsZUxv
YWRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUzODgzODk1MUJBRDE0NUYw
MEQ2MkVFMyAvKiBTY3JpcHRNb2R1bGVMb2FkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gU2NyaXB0TW9kdWxlTG9hZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCUUzQjJGMEUzMUQ3RjM1RUMwMEIwQzlEMSAvKiBMb2FkYWJsZUNsYXNzaWNTY3JpcHQuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTG9hZGFibGVDbGFzc2ljU2Ny
aXB0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTNCMkYwRTQxRDdGMzVFQzAw
QjBDOUQxIC8qIExvYWRhYmxlQ2xhc3NpY1NjcmlwdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBMb2FkYWJsZUNsYXNzaWNTY3JpcHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJRTNCMkYwRTcxRDdGMzVFQzAwQjBDOUQxIC8qIExvYWRhYmxlU2NyaXB0LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExvYWRhYmxlU2NyaXB0Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUUzQjJGMEU4MUQ3RjM1RUMwMEIwQzlEMSAvKiBMb2FkYWJs
ZVNjcmlwdENsaWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMb2FkYWJs
ZVNjcmlwdENsaWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFM0IyRjBFOTFE
N0YzRDNDMDBCMEM5RDEgLyogTG9hZGFibGVTY3JpcHQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gTG9hZGFibGVTY3JpcHQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlFM0ZBMzg2MTFENzE2RTc2MDBBQTU5NTAgLyogUGVuZGluZ1NjcmlwdENsaWVu
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQZW5kaW5nU2NyaXB0Q2xpZW50
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0MDFDMjc0MTdDRTUzRUMwMEM0MUEz
NSAvKiBFbGVtZW50SXRlcmF0b3JBc3NlcnRpb25zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEVsZW1lbnRJdGVyYXRvckFzc2VydGlvbnMuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJRTQwMUUwQTMxQzNDMEI4MzAwRjM0RDEwIC8qIFN0eWxlQ2hhbmdlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0eWxlQ2hhbmdlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC0yMzAzMSw2ICsyMzA0MSwxMSBAQAogCQkJCTE0Q0Y3QzIwMDlG
NzExMDYwMEVCMzY2NSAvKiBLZXlib2FyZEV2ZW50LmlkbCAqLywKIAkJCQlCQzdGQTYxRTBEMUYw
Q0JEMDBEQjIyQTkgLyogTGl2ZU5vZGVMaXN0LmNwcCAqLywKIAkJCQlCQzdGQTYxRjBEMUYwQ0JE
MDBEQjIyQTkgLyogTGl2ZU5vZGVMaXN0LmggKi8sCisJCQkJRTNCMkYwRTMxRDdGMzVFQzAwQjBD
OUQxIC8qIExvYWRhYmxlQ2xhc3NpY1NjcmlwdC5jcHAgKi8sCisJCQkJRTNCMkYwRTQxRDdGMzVF
QzAwQjBDOUQxIC8qIExvYWRhYmxlQ2xhc3NpY1NjcmlwdC5oICovLAorCQkJCUUzQjJGMEU5MUQ3
RjNEM0MwMEIwQzlEMSAvKiBMb2FkYWJsZVNjcmlwdC5jcHAgKi8sCisJCQkJRTNCMkYwRTcxRDdG
MzVFQzAwQjBDOUQxIC8qIExvYWRhYmxlU2NyaXB0LmggKi8sCisJCQkJRTNCMkYwRTgxRDdGMzVF
QzAwQjBDOUQxIC8qIExvYWRhYmxlU2NyaXB0Q2xpZW50LmggKi8sCiAJCQkJQkM5QTYxNDQxNDY4
NTlEOTAwNjA1N0ZEIC8qIG1ha2VfZG9tX2V4Y2VwdGlvbnMucGwgKi8sCiAJCQkJQkM5QTYxNDUx
NDY4NTlEOTAwNjA1N0ZEIC8qIG1ha2VfZXZlbnRfZmFjdG9yeS5wbCAqLywKIAkJCQlCQzlBNjE0
NjE0Njg1OUQ5MDA2MDU3RkQgLyogbWFrZV9uYW1lcy5wbCAqLywKQEAgLTI0OTM4LDYgKzI0OTUz
LDcgQEAKIAkJCQlDNTEzN0NGMzExQTU4Mzc4MDA0QURCOTkgLyogSlNET01TdHJpbmdMaXN0Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQlCQzY0NjQ5ODExRDgyMzQ5MDA2NDU1QjAgLyogSlNET01TdHJp
bmdNYXAuaCBpbiBIZWFkZXJzICovLAogCQkJCTc2OTQ1NjNEMTIxNEQ5N0MwMDA3Q0JBRSAvKiBK
U0RPTVRva2VuTGlzdC5oIGluIEhlYWRlcnMgKi8sCisJCQkJRTNCMkYwRjAxRDdGNENCNTAwQjBD
OUQxIC8qIExvYWRhYmxlQ2xhc3NpY1NjcmlwdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkUzN0Uw
MDYxMkRCQzVBNDAwQTZCMjMzIC8qIEpTRE9NVVJMLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzY5
MzI3NDBEN0UyOTM5MDBBRTQ0RDEgLyogSlNET01XaW5kb3dCYXNlLmggaW4gSGVhZGVycyAqLywK
IAkJCQk2NTJGQkJCQzBERTI3Q0I2MDAwMUQzODYgLyogSlNET01XaW5kb3dDdXN0b20uaCBpbiBI
ZWFkZXJzICovLApAQCAtMjUzMjQsNiArMjUzNDAsNyBAQAogCQkJCUIyRkEzREYxMEFCNzVBNkYw
MDBFNUFDNCAvKiBKU1NWR1JlbmRlcmluZ0ludGVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjJG
QTNERjMwQUI3NUE2RjAwMEU1QUM0IC8qIEpTU1ZHU2NyaXB0RWxlbWVudC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQjJGQTNERjUwQUI3NUE2RjAwMEU1QUM0IC8qIEpTU1ZHU2V0RWxlbWVudC5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJRTNCMkYwRUUxRDdGNENBOTAwQjBDOUQxIC8qIExvYWRhYmxlU2Ny
aXB0Q2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlCMkZBM0RGNzBBQjc1QTZGMDAwRTVBQzQg
LyogSlNTVkdTdG9wRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjJGQTNERjkwQUI3NUE2
RjAwMEU1QUM0IC8qIEpTU1ZHU3RyaW5nTGlzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjJGQTNE
RkIwQUI3NUE2RjAwMEU1QUM0IC8qIEpTU1ZHU3R5bGVFbGVtZW50LmggaW4gSGVhZGVycyAqLywK
QEAgLTI2OTM0LDYgKzI2OTUxLDcgQEAKIAkJCQkzN0Y4MThGRDBENjU3NjA2MDA1RTFGMDUgLyog
V2ViQ29yZVVSTFJlc3BvbnNlLmggaW4gSGVhZGVycyAqLywKIAkJCQk0NEEyMERCOTBGODQxNjZD
MDBCM0UxRkUgLyogV2ViQ29yZVVSTFJlc3BvbnNlSU9TLmggaW4gSGVhZGVycyAqLywKIAkJCQk5
M0YxOTlGMDA4MjQ1RTU5MDAxRTlBQkMgLyogV2ViQ29yZVZpZXcuaCBpbiBIZWFkZXJzICovLAor
CQkJCUUzQjJGMEVEMUQ3RjRDQTMwMEIwQzlEMSAvKiBMb2FkYWJsZVNjcmlwdC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQTVFNjE2NzQxODk0NTgxRjAwOUFERjUwIC8qIFdlYkRlYnVnZ2VyQWdlbnQu
aCBpbiBIZWFkZXJzICovLAogCQkJCUZFMEQ4NEU5MTA0ODQzNDgwMDFBMTc5RSAvKiBXZWJFdmVu
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMjI1QTE2QjUwRDVDMTFFOTAwMDkwMjk1IC8qIFdlYkV2
ZW50UmVnaW9uLmggaW4gSGVhZGVycyAqLywKQEAgLTI3NjU5LDYgKzI3Njc3LDcgQEAKIAkJCQk0
M0VERDY3RTFCNDg1REJGMDA2NDBFNzUgLyogQ29tYmluZWRGaWx0ZXJzQWxwaGFiZXQuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMjZFOTQ0RDgxQUM0QjJERDAwN0I4NUI1IC8qIENvbWJpbmVkVVJM
RmlsdGVycy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTg0RkUzNDE4NjRENUFGMDA4NDNCMTAg
LyogQ29tbWFuZExpbmVBUElIb3N0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUUzQjJGMEVCMUQ3
RjRDOUQwMEIwQzlEMSAvKiBMb2FkYWJsZUNsYXNzaWNTY3JpcHQuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQTU4NEZFMkIxODYzODcwRjAwODQzQjEwIC8qIENvbW1hbmRMaW5lQVBJTW9kdWxlLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTY1NTBCNkExMDk5REYwMjcwMDkwRDc4MSAvKiBDb21tZW50
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUxRkUxMzc0MTg0MDJBNjcwMDg5MkYxMyAvKiBDb21t
b25DcnlwdG9VdGlsaXRpZXMuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0yNzc1Nyw2ICsyNzc3Niw3
IEBACiAJCQkJRTE2QTg0RjkxNEM4NUNDQzAwMjk3N0RGIC8qIENTU0JvcmRlckltYWdlLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUJDMjc0QjMxMTQwRUJFRDgwMEVBREZBNiAvKiBDU1NCb3JkZXJJ
bWFnZVNsaWNlVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNDlBRTJEOEUxMzRFRTUwQzAw
NzI5MjBBIC8qIENTU0NhbGN1bGF0aW9uVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRTNC
MkYwRUMxRDdGNENBMTAwQjBDOUQxIC8qIExvYWRhYmxlU2NyaXB0LmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUJDNjA0QTQzMERCNTYzNEUwMDIwNDczOSAvKiBDU1NDYW52YXNWYWx1ZS5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlFMUVCQkJENDBBQUM5Qjg3MDAxRkU4RTIgLyogQ1NTQ2hhcnNldFJ1
bGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNFQTQ3OEYwOTdDQUFDODAwOTRDOUU0IC8qIENT
U0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2RvbS9Mb2FkYWJsZUNsYXNzaWNTY3JpcHQuY3BwIGIvU291cmNlL1dl
YkNvcmUvZG9tL0xvYWRhYmxlQ2xhc3NpY1NjcmlwdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDU2M2E1ZjQ5
YjMzYmViOWRhOWQ5ZGJiZDk5MTlkMjM4ZWRhY2M4OQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2RvbS9Mb2FkYWJsZUNsYXNzaWNTY3JpcHQuY3BwCkBAIC0wLDAgKzEsMTA2IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJMb2FkYWJsZUNsYXNzaWNTY3JpcHQuaCIKKworI2luY2x1
ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0ltcGwu
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitSZWZQdHI8TG9hZGFibGVDbGFzc2ljU2NyaXB0
PiBMb2FkYWJsZUNsYXNzaWNTY3JpcHQ6OmNyZWF0ZShDYWNoZWRSZXNvdXJjZUhhbmRsZTxDYWNo
ZWRTY3JpcHQ+JiYgY2FjaGVkU2NyaXB0LCBjb25zdCBTdHJpbmcmIGNyb3NzT3JpZ2luTW9kZSwg
U2VjdXJpdHlPcmlnaW4mIHNlY3VyaXR5T3JpZ2luKQoreworICAgIGlmICghY2FjaGVkU2NyaXB0
KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBhdXRvIHNjcmlwdCA9IGFkb3B0UmVmKCpu
ZXcgTG9hZGFibGVDbGFzc2ljU2NyaXB0KFdURk1vdmUoY2FjaGVkU2NyaXB0KSwgY3Jvc3NPcmln
aW5Nb2RlLCBzZWN1cml0eU9yaWdpbikpOworICAgIGNhY2hlZFNjcmlwdC0+YWRkQ2xpZW50KHNj
cmlwdC5wdHIoKSk7CisgICAgcmV0dXJuIFdURk1vdmUoc2NyaXB0KTsKK30KKworTG9hZGFibGVD
bGFzc2ljU2NyaXB0OjpMb2FkYWJsZUNsYXNzaWNTY3JpcHQoQ2FjaGVkUmVzb3VyY2VIYW5kbGU8
Q2FjaGVkU2NyaXB0PiYmIGNhY2hlZFNjcmlwdCwgY29uc3QgU3RyaW5nJiBjcm9zc09yaWdpbk1v
ZGUsIFNlY3VyaXR5T3JpZ2luJiBzZWN1cml0eU9yaWdpbikKKyAgICA6IG1fY2FjaGVkU2NyaXB0
KGNhY2hlZFNjcmlwdCkKKyAgICAsIG1fc2VjdXJpdHlPcmlnaW4oc2VjdXJpdHlPcmlnaW4pCisg
ICAgLCBtX3JlcXVlc3RVc2VzQWNjZXNzQ29udHJvbCghY3Jvc3NPcmlnaW5Nb2RlLmlzTnVsbCgp
KQoreworfQorCitMb2FkYWJsZUNsYXNzaWNTY3JpcHQ6On5Mb2FkYWJsZUNsYXNzaWNTY3JpcHQo
KQoreworICAgIG1fY2FjaGVkU2NyaXB0LT5yZW1vdmVDbGllbnQodGhpcyk7Cit9CisKK2Jvb2wg
TG9hZGFibGVDbGFzc2ljU2NyaXB0Ojppc0xvYWRlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1f
Y2FjaGVkU2NyaXB0LT5pc0xvYWRlZCgpOworfQorCitPcHRpb25hbDxMb2FkYWJsZVNjcmlwdDo6
RXJyb3I+IExvYWRhYmxlQ2xhc3NpY1NjcmlwdDo6ZXJyb3JPY2N1cnJlZCgpIGNvbnN0Cit7Cisg
ICAgaWYgKG1fZXJyb3IpCisgICAgICAgIHJldHVybiBtX2Vycm9yOworCisgICAgaWYgKG1fY2Fj
aGVkU2NyaXB0LT5lcnJvck9jY3VycmVkKCkpCisgICAgICAgIHJldHVybiBFcnJvciB7IEVycm9y
VHlwZTo6Q2FjaGVkU2NyaXB0LCBOdWxsb3B0IH07CisKKyAgICByZXR1cm4gTnVsbG9wdDsKK30K
KworYm9vbCBMb2FkYWJsZUNsYXNzaWNTY3JpcHQ6Ondhc0NhbmNlbGVkKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbV9jYWNoZWRTY3JpcHQtPndhc0NhbmNlbGVkKCk7Cit9CisKK3ZvaWQgTG9hZGFi
bGVDbGFzc2ljU2NyaXB0Ojpub3RpZnlGaW5pc2hlZChDYWNoZWRSZXNvdXJjZSopCit7CisgICAg
aWYgKCFtX2Vycm9yICYmIG1fcmVxdWVzdFVzZXNBY2Nlc3NDb250cm9sICYmICFtX2NhY2hlZFNj
cmlwdC0+cGFzc2VzU2FtZU9yaWdpblBvbGljeUNoZWNrKG1fc2VjdXJpdHlPcmlnaW4uZ2V0KCkp
KSB7CisgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxTdHJpbmc+IGNvbnNvbGVNZXNzYWdl
KEFTQ0lJTGl0ZXJhbCgiQ3Jvc3Mtb3JpZ2luIHNjcmlwdCBsb2FkIGRlbmllZCBieSBDcm9zcy1P
cmlnaW4gUmVzb3VyY2UgU2hhcmluZyBwb2xpY3kuIikpOworICAgICAgICBtX2Vycm9yID0gRXJy
b3IgeworICAgICAgICAgICAgRXJyb3JUeXBlOjpDcm9zc09yaWdpbkxvYWQsCisgICAgICAgICAg
ICBDb25zb2xlTWVzc2FnZSB7CisgICAgICAgICAgICAgICAgTWVzc2FnZVNvdXJjZTo6SlMsCisg
ICAgICAgICAgICAgICAgTWVzc2FnZUxldmVsOjpFcnJvciwKKyAgICAgICAgICAgICAgICBjb25z
b2xlTWVzc2FnZQorICAgICAgICAgICAgfQorICAgICAgICB9OworICAgIH0KKworI2lmIEVOQUJM
RShOT1NOSUZGKQorICAgIGlmICghbV9lcnJvciAmJiAhbV9jYWNoZWRTY3JpcHQtPm1pbWVUeXBl
QWxsb3dlZEJ5Tm9zbmlmZigpKSB7CisgICAgICAgIG1fZXJyb3IgPSBFcnJvciB7CisgICAgICAg
ICAgICBFcnJvclR5cGU6Ok5vc25pZmYsCisgICAgICAgICAgICBDb25zb2xlTWVzc2FnZSB7Cisg
ICAgICAgICAgICAgICAgTWVzc2FnZVNvdXJjZTo6U2VjdXJpdHksCisgICAgICAgICAgICAgICAg
TWVzc2FnZUxldmVsOjpFcnJvciwKKyAgICAgICAgICAgICAgICBtYWtlU3RyaW5nKCJSZWZ1c2Vk
IHRvIGV4ZWN1dGUgc2NyaXB0IGZyb20gJyIsIG1fY2FjaGVkU2NyaXB0LT51cmwoKS5zdHJpbmdD
ZW50ZXJFbGxpcHNpemVkVG9MZW5ndGgoKSwgIicgYmVjYXVzZSBpdHMgTUlNRSB0eXBlICgnIiwg
bV9jYWNoZWRTY3JpcHQtPm1pbWVUeXBlKCksICInKSBpcyBub3QgZXhlY3V0YWJsZSwgYW5kIHN0
cmljdCBNSU1FIHR5cGUgY2hlY2tpbmcgaXMgZW5hYmxlZC4iKQorICAgICAgICAgICAgfQorICAg
ICAgICB9OworICAgIH0KKyNlbmRpZgorCisgICAgbm90aWZ5Q2xpZW50RmluaXNoZWQoKTsKK30K
KworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0xvYWRhYmxlQ2xhc3NpY1Njcmlw
dC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0xvYWRhYmxlQ2xhc3NpY1NjcmlwdC5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjI3ZjI4YjI5Njg1NGQzMDA5OGI5NGVhNDQ3MTVhNjBlYzUwOWQ0NDkKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTG9hZGFibGVDbGFzc2ljU2NyaXB0LmgKQEAgLTAs
MCArMSw2OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSwgSW5jLiBBbGwgUmln
aHRzIFJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlQ2xpZW50LmgiCisjaW5j
bHVkZSAiQ2FjaGVkUmVzb3VyY2VIYW5kbGUuaCIKKyNpbmNsdWRlICJDYWNoZWRTY3JpcHQuaCIK
KyNpbmNsdWRlICJMb2FkYWJsZVNjcmlwdC5oIgorI2luY2x1ZGUgIkxvYWRhYmxlU2NyaXB0Q2xp
ZW50LmgiCisjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKKyNpbmNsdWRlIDx3dGYvVHlwZUNh
c3RzLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gQSBDYWNoZWRSZXNvdXJjZUhhbmRs
ZSBhbG9uZSBkb2VzIG5vdCBwcmV2ZW50IHRoZSB1bmRlcmx5aW5nIENhY2hlZFJlc291cmNlCisv
LyBmcm9tIHB1cmdpbmcgaXRzIGRhdGEgYnVmZmVyLiBUaGlzIGNsYXNzIGhvbGRzIGEgY2xpZW50
IHVudGlsIHRoaXMgY2xhc3MgaXMKKy8vIGRlc3Ryb3llZCBpbiBvcmRlciB0byBndWFyYW50ZWUg
dGhhdCB0aGUgZGF0YSBidWZmZXIgd2lsbCBub3QgYmUgcHVyZ2VkLgorY2xhc3MgTG9hZGFibGVD
bGFzc2ljU2NyaXB0IGZpbmFsIDogcHVibGljIExvYWRhYmxlU2NyaXB0LCBwcml2YXRlIENhY2hl
ZFJlc291cmNlQ2xpZW50IHsKK3B1YmxpYzoKKyAgICB+TG9hZGFibGVDbGFzc2ljU2NyaXB0KCk7
CisKKyAgICBzdGF0aWMgUmVmUHRyPExvYWRhYmxlQ2xhc3NpY1NjcmlwdD4gY3JlYXRlKENhY2hl
ZFJlc291cmNlSGFuZGxlPENhY2hlZFNjcmlwdD4mJiwgY29uc3QgU3RyaW5nJiBjcm9zc09yaWdp
bk1vZGUsIFNlY3VyaXR5T3JpZ2luJik7CisgICAgYm9vbCBpc0xvYWRlZCgpIGNvbnN0IG92ZXJy
aWRlOworICAgIE9wdGlvbmFsPEVycm9yPiBlcnJvck9jY3VycmVkKCkgY29uc3Qgb3ZlcnJpZGU7
CisgICAgYm9vbCB3YXNDYW5jZWxlZCgpIGNvbnN0IG92ZXJyaWRlOworCisgICAgQ2FjaGVkU2Ny
aXB0JiBjYWNoZWRTY3JpcHQoKSB7IHJldHVybiAqbV9jYWNoZWRTY3JpcHQ7IH0KKyAgICBib29s
IGlzQ2xhc3NpY1NjcmlwdCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHRydWU7IH0KKworcHJpdmF0
ZToKKyAgICBMb2FkYWJsZUNsYXNzaWNTY3JpcHQoQ2FjaGVkUmVzb3VyY2VIYW5kbGU8Q2FjaGVk
U2NyaXB0PiYmLCBjb25zdCBTdHJpbmcmIGNyb3NzT3JpZ2luTW9kZSwgU2VjdXJpdHlPcmlnaW4m
KTsKKworICAgIHZvaWQgbm90aWZ5RmluaXNoZWQoQ2FjaGVkUmVzb3VyY2UqKSBvdmVycmlkZTsK
KworICAgIENhY2hlZFJlc291cmNlSGFuZGxlPENhY2hlZFNjcmlwdD4gbV9jYWNoZWRTY3JpcHQ7
CisgICAgUmVmPFNlY3VyaXR5T3JpZ2luPiBtX3NlY3VyaXR5T3JpZ2luOworICAgIE9wdGlvbmFs
PEVycm9yPiBtX2Vycm9yIHsgTnVsbG9wdCB9OworICAgIGJvb2wgbV9yZXF1ZXN0VXNlc0FjY2Vz
c0NvbnRyb2w7Cit9OworCit9CisKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQkVHSU4oV2ViQ29y
ZTo6TG9hZGFibGVDbGFzc2ljU2NyaXB0KQorICAgIHN0YXRpYyBib29sIGlzVHlwZShjb25zdCBX
ZWJDb3JlOjpMb2FkYWJsZVNjcmlwdCYgc2NyaXB0KSB7IHJldHVybiBzY3JpcHQuaXNDbGFzc2lj
U2NyaXB0KCk7IH0KK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRU5EKCkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9Mb2FkYWJsZVNjcmlwdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20v
TG9hZGFibGVTY3JpcHQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmVmZGI2Yjg5NDg2ZDQ5M2M5OGZiMWY1YjM1
NzZiNGM2OTYzZTBiNGMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTG9h
ZGFibGVTY3JpcHQuY3BwCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTYgQXBwbGUsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkxv
YWRhYmxlU2NyaXB0LmgiCisKKyNpbmNsdWRlICJMb2FkYWJsZVNjcmlwdENsaWVudC5oIgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK3ZvaWQgTG9hZGFibGVTY3JpcHQ6OmFkZENsaWVudChMb2Fk
YWJsZVNjcmlwdENsaWVudCYgY2xpZW50KQoreworICAgIG1fY2xpZW50cy5hZGQoJmNsaWVudCk7
CisgICAgaWYgKGlzTG9hZGVkKCkpIHsKKyAgICAgICAgUmVmPExvYWRhYmxlU2NyaXB0PiBwcm90
ZWN0ZWRUaGlzKCp0aGlzKTsKKyAgICAgICAgY2xpZW50Lm5vdGlmeUZpbmlzaGVkKCp0aGlzKTsK
KyAgICB9Cit9CisKK3ZvaWQgTG9hZGFibGVTY3JpcHQ6OnJlbW92ZUNsaWVudChMb2FkYWJsZVNj
cmlwdENsaWVudCYgY2xpZW50KQoreworICAgIG1fY2xpZW50cy5yZW1vdmUoJmNsaWVudCk7Cit9
CisKK3ZvaWQgTG9hZGFibGVTY3JpcHQ6Om5vdGlmeUNsaWVudEZpbmlzaGVkKCkKK3sKKyAgICBS
ZWZQdHI8TG9hZGFibGVTY3JpcHQ+IHByb3RlY3RlZFRoaXModGhpcyk7CisKKyAgICBWZWN0b3I8
TG9hZGFibGVTY3JpcHRDbGllbnQqPiB2ZWN0b3I7CisgICAgZm9yIChhdXRvJiBwYWlyIDogbV9j
bGllbnRzKQorICAgICAgICB2ZWN0b3IuYXBwZW5kKHBhaXIua2V5KTsKKyAgICBmb3IgKGF1dG8m
IGNsaWVudCA6IHZlY3RvcikKKyAgICAgICAgY2xpZW50LT5ub3RpZnlGaW5pc2hlZCgqdGhpcyk7
Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Mb2FkYWJsZVNjcmlwdC5o
IGIvU291cmNlL1dlYkNvcmUvZG9tL0xvYWRhYmxlU2NyaXB0LmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzY5Y2I4
M2IwNzk3NDUwZWJhZTU2NTEyY2UyMjg4Y2U2YzYzNjdlNwotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9Mb2FkYWJsZVNjcmlwdC5oCkBAIC0wLDAgKzEsNzUgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisK
KyNpbmNsdWRlIDxydW50aW1lL0NvbnNvbGVUeXBlcy5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoQ291
bnRlZFNldC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgTG9hZGFibGVT
Y3JpcHRDbGllbnQ7CisKK2NsYXNzIExvYWRhYmxlU2NyaXB0IDogcHVibGljIFJlZkNvdW50ZWQ8
TG9hZGFibGVTY3JpcHQ+IHsKK3B1YmxpYzoKKyAgICBlbnVtIGNsYXNzIEVycm9yVHlwZSB7Cisg
ICAgICAgIENhY2hlZFNjcmlwdCwKKyAgICAgICAgQ3Jvc3NPcmlnaW5Mb2FkLAorICAgICAgICBO
b3NuaWZmLAorICAgIH07CisKKyAgICBzdHJ1Y3QgQ29uc29sZU1lc3NhZ2UgeworICAgICAgICBN
ZXNzYWdlU291cmNlIHNvdXJjZTsKKyAgICAgICAgTWVzc2FnZUxldmVsIGxldmVsOworICAgICAg
ICBTdHJpbmcgbWVzc2FnZTsKKyAgICB9OworCisgICAgc3RydWN0IEVycm9yIHsKKyAgICAgICAg
RXJyb3JUeXBlIHR5cGU7CisgICAgICAgIE9wdGlvbmFsPENvbnNvbGVNZXNzYWdlPiBjb25zb2xl
TWVzc2FnZTsKKyAgICB9OworCisgICAgdmlydHVhbCB+TG9hZGFibGVTY3JpcHQoKSB7IH0KKwor
ICAgIHZpcnR1YWwgYm9vbCBpc0xvYWRlZCgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIE9wdGlv
bmFsPEVycm9yPiBlcnJvck9jY3VycmVkKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgYm9vbCB3
YXNDYW5jZWxlZCgpIGNvbnN0ID0gMDsKKworICAgIHZvaWQgYWRkQ2xpZW50KExvYWRhYmxlU2Ny
aXB0Q2xpZW50Jik7CisgICAgdm9pZCByZW1vdmVDbGllbnQoTG9hZGFibGVTY3JpcHRDbGllbnQm
KTsKKworICAgIHZpcnR1YWwgYm9vbCBpc0NsYXNzaWNTY3JpcHQoKSBjb25zdCB7IHJldHVybiBm
YWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc01vZHVsZUdyYXBoKCkgY29uc3QgeyByZXR1cm4g
ZmFsc2U7IH0KKworcHJvdGVjdGVkOgorICAgIHZvaWQgbm90aWZ5Q2xpZW50RmluaXNoZWQoKTsK
KworcHJpdmF0ZToKKyAgICBIYXNoQ291bnRlZFNldDxMb2FkYWJsZVNjcmlwdENsaWVudCo+IG1f
Y2xpZW50czsKK307CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Mb2FkYWJs
ZVNjcmlwdENsaWVudC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0xvYWRhYmxlU2NyaXB0Q2xpZW50
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uYzA0ZTljZmZiNmVkNDJmNzBhNmM1NjdlZmZjMWQxMGYxODE3NGU3Mgot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Mb2FkYWJsZVNjcmlwdENsaWVu
dC5oCkBAIC0wLDAgKzEsMzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUsIElu
Yy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3Mg
TG9hZGFibGVTY3JpcHQ7CisKK2NsYXNzIExvYWRhYmxlU2NyaXB0Q2xpZW50IHsKK3B1YmxpYzoK
KyAgICB2aXJ0dWFsIH5Mb2FkYWJsZVNjcmlwdENsaWVudCgpIHsgfQorCisgICAgdmlydHVhbCB2
b2lkIG5vdGlmeUZpbmlzaGVkKExvYWRhYmxlU2NyaXB0JikgPSAwOworfTsKKworfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1BlbmRpbmdTY3JpcHQuY3BwIGIvU291cmNlL1dlYkNv
cmUvZG9tL1BlbmRpbmdTY3JpcHQuY3BwCmluZGV4IDcxYmRiMmQ4M2VmM2M2OGUxYjViZjc5MzFj
Y2Y3Njg3YmI5OGE1NmMuLjU5ZmI0ZTc3YmJkMDhmMTg1ZjllMDAwYzE0NmFjNWFhNWI3MDUyOTUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9QZW5kaW5nU2NyaXB0LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9kb20vUGVuZGluZ1NjcmlwdC5jcHAKQEAgLTI2LDE2ICsyNiwxNSBAQAog
I2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlBlbmRpbmdTY3JpcHQuaCIKIAotI2luY2x1
ZGUgIkNhY2hlZFNjcmlwdC5oIgogI2luY2x1ZGUgIkVsZW1lbnQuaCIKICNpbmNsdWRlICJQZW5k
aW5nU2NyaXB0Q2xpZW50LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUmVmPFBlbmRpbmdT
Y3JpcHQ+IFBlbmRpbmdTY3JpcHQ6OmNyZWF0ZShFbGVtZW50JiBlbGVtZW50LCBDYWNoZWRTY3Jp
cHQmIGNhY2hlZFNjcmlwdCkKK1JlZjxQZW5kaW5nU2NyaXB0PiBQZW5kaW5nU2NyaXB0OjpjcmVh
dGUoRWxlbWVudCYgZWxlbWVudCwgTG9hZGFibGVTY3JpcHQmIGxvYWRhYmxlU2NyaXB0KQogewot
ICAgIFJlZjxQZW5kaW5nU2NyaXB0PiBwZW5kaW5nU2NyaXB0ID0gYWRvcHRSZWYoKm5ldyBQZW5k
aW5nU2NyaXB0KGVsZW1lbnQsIGNhY2hlZFNjcmlwdCkpOwotICAgIGNhY2hlZFNjcmlwdC5hZGRD
bGllbnQoJnBlbmRpbmdTY3JpcHQuZ2V0KCkpOworICAgIFJlZjxQZW5kaW5nU2NyaXB0PiBwZW5k
aW5nU2NyaXB0ID0gYWRvcHRSZWYoKm5ldyBQZW5kaW5nU2NyaXB0KGVsZW1lbnQsIGxvYWRhYmxl
U2NyaXB0KSk7CisgICAgbG9hZGFibGVTY3JpcHQuYWRkQ2xpZW50KHBlbmRpbmdTY3JpcHQuZ2V0
KCkpOwogICAgIHJldHVybiBwZW5kaW5nU2NyaXB0OwogfQogCkBAIC01MCwyMSArNDksMjEgQEAg
UGVuZGluZ1NjcmlwdDo6UGVuZGluZ1NjcmlwdChFbGVtZW50JiBlbGVtZW50LCBUZXh0UG9zaXRp
b24gc3RhcnRpbmdQb3NpdGlvbikKIHsKIH0KIAotUGVuZGluZ1NjcmlwdDo6UGVuZGluZ1Njcmlw
dChFbGVtZW50JiBlbGVtZW50LCBDYWNoZWRTY3JpcHQmIGNhY2hlZFNjcmlwdCkKK1BlbmRpbmdT
Y3JpcHQ6OlBlbmRpbmdTY3JpcHQoRWxlbWVudCYgZWxlbWVudCwgTG9hZGFibGVTY3JpcHQmIGxv
YWRhYmxlU2NyaXB0KQogICAgIDogbV9lbGVtZW50KGVsZW1lbnQpCi0gICAgLCBtX2NhY2hlZFNj
cmlwdCgmY2FjaGVkU2NyaXB0KQorICAgICwgbV9sb2FkYWJsZVNjcmlwdCgmbG9hZGFibGVTY3Jp
cHQpCiB7CiB9CiAKIFBlbmRpbmdTY3JpcHQ6On5QZW5kaW5nU2NyaXB0KCkKIHsKLSAgICBpZiAo
bV9jYWNoZWRTY3JpcHQpCi0gICAgICAgIG1fY2FjaGVkU2NyaXB0LT5yZW1vdmVDbGllbnQodGhp
cyk7CisgICAgaWYgKG1fbG9hZGFibGVTY3JpcHQpCisgICAgICAgIG1fbG9hZGFibGVTY3JpcHQt
PnJlbW92ZUNsaWVudCgqdGhpcyk7CiB9CiAKLUNhY2hlZFNjcmlwdCogUGVuZGluZ1NjcmlwdDo6
Y2FjaGVkU2NyaXB0KCkgY29uc3QKK0xvYWRhYmxlU2NyaXB0KiBQZW5kaW5nU2NyaXB0Ojpsb2Fk
YWJsZVNjcmlwdCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fY2FjaGVkU2NyaXB0LmdldCgpOwor
ICAgIHJldHVybiBtX2xvYWRhYmxlU2NyaXB0LmdldCgpOwogfQogCiB2b2lkIFBlbmRpbmdTY3Jp
cHQ6Om5vdGlmeUNsaWVudEZpbmlzaGVkKCkKQEAgLTc0LDE0ICs3MywxOSBAQCB2b2lkIFBlbmRp
bmdTY3JpcHQ6Om5vdGlmeUNsaWVudEZpbmlzaGVkKCkKICAgICAgICAgbV9jbGllbnQtPm5vdGlm
eUZpbmlzaGVkKCp0aGlzKTsKIH0KIAotdm9pZCBQZW5kaW5nU2NyaXB0Ojpub3RpZnlGaW5pc2hl
ZChDYWNoZWRSZXNvdXJjZSopCit2b2lkIFBlbmRpbmdTY3JpcHQ6Om5vdGlmeUZpbmlzaGVkKExv
YWRhYmxlU2NyaXB0JikKIHsKICAgICBub3RpZnlDbGllbnRGaW5pc2hlZCgpOwogfQogCiBib29s
IFBlbmRpbmdTY3JpcHQ6OmlzTG9hZGVkKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9jYWNoZWRT
Y3JpcHQgJiYgbV9jYWNoZWRTY3JpcHQtPmlzTG9hZGVkKCk7CisgICAgcmV0dXJuIG1fbG9hZGFi
bGVTY3JpcHQgJiYgbV9sb2FkYWJsZVNjcmlwdC0+aXNMb2FkZWQoKTsKK30KKworYm9vbCBQZW5k
aW5nU2NyaXB0OjplcnJvck9jY3VycmVkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9sb2FkYWJs
ZVNjcmlwdCAmJiBtX2xvYWRhYmxlU2NyaXB0LT5lcnJvck9jY3VycmVkKCk7CiB9CiAKIHZvaWQg
UGVuZGluZ1NjcmlwdDo6c2V0Q2xpZW50KFBlbmRpbmdTY3JpcHRDbGllbnQqIGNsaWVudCkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9QZW5kaW5nU2NyaXB0LmggYi9Tb3VyY2UvV2Vi
Q29yZS9kb20vUGVuZGluZ1NjcmlwdC5oCmluZGV4IDA3YjJmMzVlNjUzYTNkM2Q4OGJhZWQ0YWUw
NTY2MmFmOGQ0NDc4MjEuLjUwYjkyZTMxZjE0NTAxZDZhZjU2ZmIxOWU1YThhZGVkZDg0OTY4NjUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9QZW5kaW5nU2NyaXB0LmgKKysrIGIvU291
cmNlL1dlYkNvcmUvZG9tL1BlbmRpbmdTY3JpcHQuaApAQCAtMjUsOCArMjUsOCBAQAogCiAjcHJh
Z21hIG9uY2UKIAotI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlQ2xpZW50LmgiCi0jaW5jbHVkZSAi
Q2FjaGVkUmVzb3VyY2VIYW5kbGUuaCIKKyNpbmNsdWRlICJMb2FkYWJsZVNjcmlwdC5oIgorI2lu
Y2x1ZGUgIkxvYWRhYmxlU2NyaXB0Q2xpZW50LmgiCiAjaW5jbHVkZSA8d3RmL1JlZi5oPgogI2lu
Y2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFBvc2l0aW9u
Lmg+CkBAIC0zNywxNCArMzcsMTEgQEAgY2xhc3MgQ2FjaGVkU2NyaXB0OwogY2xhc3MgRWxlbWVu
dDsKIGNsYXNzIFBlbmRpbmdTY3JpcHRDbGllbnQ7CiAKLS8vIEEgY29udGFpbmVyIGZvciBhbiBl
eHRlcm5hbCBzY3JpcHQgd2hpY2ggbWF5IGJlIGxvYWRlZCBhbmQgZXhlY3V0ZWQuCi0vLwotLy8g
QSBDYWNoZWRSZXNvdXJjZUhhbmRsZSBhbG9uZSBkb2VzIG5vdCBwcmV2ZW50IHRoZSB1bmRlcmx5
aW5nIENhY2hlZFJlc291cmNlCi0vLyBmcm9tIHB1cmdpbmcgaXRzIGRhdGEgYnVmZmVyLiBUaGlz
IGNsYXNzIGhvbGRzIGEgZHVtbXkgY2xpZW50IG9wZW4gZm9yIGl0cwotLy8gbGlmZXRpbWUgaW4g
b3JkZXIgdG8gZ3VhcmFudGVlIHRoYXQgdGhlIGRhdGEgYnVmZmVyIHdpbGwgbm90IGJlIHB1cmdl
ZC4KLWNsYXNzIFBlbmRpbmdTY3JpcHQgZmluYWwgOiBwdWJsaWMgUmVmQ291bnRlZDxQZW5kaW5n
U2NyaXB0PiwgcHVibGljIENhY2hlZFJlc291cmNlQ2xpZW50IHsKKy8vIEEgY29udGFpbmVyIGZv
ciBzY3JpcHRzIHdoaWNoIG1heSBiZSBsb2FkZWQgYW5kIGV4ZWN1dGVkLgorLy8gVGhpcyBjYW4g
aG9sZCBMb2FkYWJsZVNjcmlwdCBhbmQgbm9uIGV4dGVybmFsIGlubGluZSBzY3JpcHQuCitjbGFz
cyBQZW5kaW5nU2NyaXB0IGZpbmFsIDogcHVibGljIFJlZkNvdW50ZWQ8UGVuZGluZ1NjcmlwdD4s
IHB1YmxpYyBMb2FkYWJsZVNjcmlwdENsaWVudCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxQ
ZW5kaW5nU2NyaXB0PiBjcmVhdGUoRWxlbWVudCYsIENhY2hlZFNjcmlwdCYpOworICAgIHN0YXRp
YyBSZWY8UGVuZGluZ1NjcmlwdD4gY3JlYXRlKEVsZW1lbnQmLCBMb2FkYWJsZVNjcmlwdCYpOwog
ICAgIHN0YXRpYyBSZWY8UGVuZGluZ1NjcmlwdD4gY3JlYXRlKEVsZW1lbnQmLCBUZXh0UG9zaXRp
b24gc2NyaXB0U3RhcnRQb3NpdGlvbik7CiAKICAgICB2aXJ0dWFsIH5QZW5kaW5nU2NyaXB0KCk7
CkBAIC01NywyNSArNTQsMjYgQEAgY2xhc3MgUGVuZGluZ1NjcmlwdCBmaW5hbCA6IHB1YmxpYyBS
ZWZDb3VudGVkPFBlbmRpbmdTY3JpcHQ+LCBwdWJsaWMgQ2FjaGVkUmVzb3UKICAgICBFbGVtZW50
JiBlbGVtZW50KCkgeyByZXR1cm4gbV9lbGVtZW50LmdldCgpOyB9CiAgICAgY29uc3QgRWxlbWVu
dCYgZWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fZWxlbWVudC5nZXQoKTsgfQogCi0gICAgQ2Fj
aGVkU2NyaXB0KiBjYWNoZWRTY3JpcHQoKSBjb25zdDsKLSAgICBib29sIG5lZWRzTG9hZGluZygp
IGNvbnN0IHsgcmV0dXJuIGNhY2hlZFNjcmlwdCgpOyB9CisgICAgTG9hZGFibGVTY3JpcHQqIGxv
YWRhYmxlU2NyaXB0KCkgY29uc3Q7CisgICAgYm9vbCBuZWVkc0xvYWRpbmcoKSBjb25zdCB7IHJl
dHVybiBsb2FkYWJsZVNjcmlwdCgpOyB9CiAKICAgICBib29sIGlzTG9hZGVkKCkgY29uc3Q7Cisg
ICAgYm9vbCBlcnJvck9jY3VycmVkKCkgY29uc3Q7CiAKLSAgICB2b2lkIG5vdGlmeUZpbmlzaGVk
KENhY2hlZFJlc291cmNlKikgb3ZlcnJpZGU7CisgICAgdm9pZCBub3RpZnlGaW5pc2hlZChMb2Fk
YWJsZVNjcmlwdCYpIG92ZXJyaWRlOwogCiAgICAgdm9pZCBzZXRDbGllbnQoUGVuZGluZ1Njcmlw
dENsaWVudCopOwogICAgIHZvaWQgY2xlYXJDbGllbnQoKTsKIAogcHJpdmF0ZToKLSAgICBQZW5k
aW5nU2NyaXB0KEVsZW1lbnQmLCBDYWNoZWRTY3JpcHQmKTsKKyAgICBQZW5kaW5nU2NyaXB0KEVs
ZW1lbnQmLCBMb2FkYWJsZVNjcmlwdCYpOwogICAgIFBlbmRpbmdTY3JpcHQoRWxlbWVudCYsIFRl
eHRQb3NpdGlvbiBzdGFydGluZ1Bvc2l0aW9uKTsKIAogICAgIHZvaWQgbm90aWZ5Q2xpZW50Rmlu
aXNoZWQoKTsKIAogICAgIFJlZjxFbGVtZW50PiBtX2VsZW1lbnQ7CiAgICAgVGV4dFBvc2l0aW9u
IG1fc3RhcnRpbmdQb3NpdGlvbjsgLy8gT25seSB1c2VkIGZvciBpbmxpbmUgc2NyaXB0IHRhZ3Mu
Ci0gICAgQ2FjaGVkUmVzb3VyY2VIYW5kbGU8Q2FjaGVkU2NyaXB0PiBtX2NhY2hlZFNjcmlwdDsK
KyAgICBSZWZQdHI8TG9hZGFibGVTY3JpcHQ+IG1fbG9hZGFibGVTY3JpcHQ7CiAgICAgUGVuZGlu
Z1NjcmlwdENsaWVudCogbV9jbGllbnQgeyBudWxscHRyIH07CiB9OwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20v
U2NyaXB0RWxlbWVudC5jcHAKaW5kZXggZjE4NzExMTViMzI4YTZmMTI2MzA5MzZlODVlYjA5YWI3
YTFmMzU3Yy4uMWUxYjBkNDA5NmM0NjgxMjEwMDE2YjdhYmQwZTczNWI3NTkwY2ZkMyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2RvbS9TY3JpcHRFbGVtZW50LmNwcApAQCAtMzcsOCArMzcsMTAgQEAKICNpbmNsdWRl
ICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJIVE1MUGFyc2VySWRpb21zLmgiCiAjaW5jbHVkZSAi
SWdub3JlRGVzdHJ1Y3RpdmVXcml0ZUNvdW50SW5jcmVtZW50ZXIuaCIKKyNpbmNsdWRlICJMb2Fk
YWJsZUNsYXNzaWNTY3JpcHQuaCIKICNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCiAjaW5j
bHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIlBlbmRpbmdTY3JpcHQuaCIKICNpbmNsdWRlICJTVkdO
YW1lcy5oIgogI2luY2x1ZGUgIlNWR1NjcmlwdEVsZW1lbnQuaCIKICNpbmNsdWRlICJTY3JpcHRD
b250cm9sbGVyLmgiCkBAIC02OCw3ICs3MCw2IEBAIFNjcmlwdEVsZW1lbnQ6OlNjcmlwdEVsZW1l
bnQoRWxlbWVudCYgZWxlbWVudCwgYm9vbCBwYXJzZXJJbnNlcnRlZCwgYm9vbCBhbHJlYWR5CiAg
ICAgLCBtX3dpbGxFeGVjdXRlV2hlbkRvY3VtZW50RmluaXNoZWRQYXJzaW5nKGZhbHNlKQogICAg
ICwgbV9mb3JjZUFzeW5jKCFwYXJzZXJJbnNlcnRlZCkKICAgICAsIG1fd2lsbEV4ZWN1dGVJbk9y
ZGVyKGZhbHNlKQotICAgICwgbV9yZXF1ZXN0VXNlc0FjY2Vzc0NvbnRyb2woZmFsc2UpCiB7CiAg
ICAgaWYgKHBhcnNlckluc2VydGVkICYmIG1fZWxlbWVudC5kb2N1bWVudCgpLnNjcmlwdGFibGVE
b2N1bWVudFBhcnNlcigpICYmICFtX2VsZW1lbnQuZG9jdW1lbnQoKS5pc0luRG9jdW1lbnRXcml0
ZSgpKQogICAgICAgICBtX3N0YXJ0TGluZU51bWJlciA9IG1fZWxlbWVudC5kb2N1bWVudCgpLnNj
cmlwdGFibGVEb2N1bWVudFBhcnNlcigpLT50ZXh0UG9zaXRpb24oKS5tX2xpbmU7CkBAIC05Niw5
ICs5Nyw5IEBAIHZvaWQgU2NyaXB0RWxlbWVudDo6Y2hpbGRyZW5DaGFuZ2VkKCkKICAgICAgICAg
cHJlcGFyZVNjcmlwdCgpOyAvLyBGSVhNRTogUHJvdmlkZSBhIHJlYWwgc3RhcnRpbmcgbGluZSBu
dW1iZXIgaGVyZS4KIH0KIAotdm9pZCBTY3JpcHRFbGVtZW50OjpoYW5kbGVTb3VyY2VBdHRyaWJ1
dGUoY29uc3QgU3RyaW5nJiBzb3VyY2VVcmwpCit2b2lkIFNjcmlwdEVsZW1lbnQ6OmhhbmRsZVNv
dXJjZUF0dHJpYnV0ZShjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCkKIHsKLSAgICBpZiAoaWdub3Jl
c0xvYWRSZXF1ZXN0KCkgfHwgc291cmNlVXJsLmlzRW1wdHkoKSkKKyAgICBpZiAoaWdub3Jlc0xv
YWRSZXF1ZXN0KCkgfHwgc291cmNlVVJMLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgcHJlcGFyZVNjcmlwdCgpOyAvLyBGSVhNRTogUHJvdmlkZSBhIHJlYWwgc3RhcnRpbmcgbGlu
ZSBudW1iZXIgaGVyZS4KQEAgLTIyNyw5ICsyMjgsMTAgQEAgYm9vbCBTY3JpcHRFbGVtZW50Ojpw
cmVwYXJlU2NyaXB0KGNvbnN0IFRleHRQb3NpdGlvbiYgc2NyaXB0U3RhcnRQb3NpdGlvbiwgTGVn
YWMKICAgICBlbHNlCiAgICAgICAgIG1fY2hhcmFjdGVyRW5jb2RpbmcgPSBkb2N1bWVudC5jaGFy
c2V0KCk7CiAKLSAgICBpZiAoaGFzU291cmNlQXR0cmlidXRlKCkpCi0gICAgICAgIGlmICghcmVx
dWVzdFNjcmlwdChzb3VyY2VBdHRyaWJ1dGVWYWx1ZSgpKSkKKyAgICBpZiAoaGFzU291cmNlQXR0
cmlidXRlKCkpIHsKKyAgICAgICAgaWYgKCFyZXF1ZXN0Q2xhc3NpY1NjcmlwdChzb3VyY2VBdHRy
aWJ1dGVWYWx1ZSgpKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CiAKICAgICBp
ZiAoaGFzU291cmNlQXR0cmlidXRlKCkgJiYgZGVmZXJBdHRyaWJ1dGVWYWx1ZSgpICYmIG1fcGFy
c2VySW5zZXJ0ZWQgJiYgIWFzeW5jQXR0cmlidXRlVmFsdWUoKSkgewogICAgICAgICBtX3dpbGxF
eGVjdXRlV2hlbkRvY3VtZW50RmluaXNoZWRQYXJzaW5nID0gdHJ1ZTsKQEAgLTI0MCwxMiArMjQy
LDE0IEBAIGJvb2wgU2NyaXB0RWxlbWVudDo6cHJlcGFyZVNjcmlwdChjb25zdCBUZXh0UG9zaXRp
b24mIHNjcmlwdFN0YXJ0UG9zaXRpb24sIExlZ2FjCiAgICAgICAgIG1fd2lsbEJlUGFyc2VyRXhl
Y3V0ZWQgPSB0cnVlOwogICAgICAgICBtX3JlYWR5VG9CZVBhcnNlckV4ZWN1dGVkID0gdHJ1ZTsK
ICAgICB9IGVsc2UgaWYgKGhhc1NvdXJjZUF0dHJpYnV0ZSgpICYmICFhc3luY0F0dHJpYnV0ZVZh
bHVlKCkgJiYgIW1fZm9yY2VBc3luYykgeworICAgICAgICBBU1NFUlQobV9sb2FkYWJsZVNjcmlw
dCk7CiAgICAgICAgIG1fd2lsbEV4ZWN1dGVJbk9yZGVyID0gdHJ1ZTsKLSAgICAgICAgZG9jdW1l
bnQuc2NyaXB0UnVubmVyKCktPnF1ZXVlU2NyaXB0Rm9yRXhlY3V0aW9uKHRoaXMsIG1fY2FjaGVk
U2NyaXB0LCBTY3JpcHRSdW5uZXI6OklOX09SREVSX0VYRUNVVElPTik7Ci0gICAgICAgIG1fY2Fj
aGVkU2NyaXB0LT5hZGRDbGllbnQodGhpcyk7CisgICAgICAgIGRvY3VtZW50LnNjcmlwdFJ1bm5l
cigpLT5xdWV1ZVNjcmlwdEZvckV4ZWN1dGlvbih0aGlzLCAqbV9sb2FkYWJsZVNjcmlwdCwgU2Ny
aXB0UnVubmVyOjpJTl9PUkRFUl9FWEVDVVRJT04pOworICAgICAgICBtX2xvYWRhYmxlU2NyaXB0
LT5hZGRDbGllbnQoKnRoaXMpOwogICAgIH0gZWxzZSBpZiAoaGFzU291cmNlQXR0cmlidXRlKCkp
IHsKLSAgICAgICAgbV9lbGVtZW50LmRvY3VtZW50KCkuc2NyaXB0UnVubmVyKCktPnF1ZXVlU2Ny
aXB0Rm9yRXhlY3V0aW9uKHRoaXMsIG1fY2FjaGVkU2NyaXB0LCBTY3JpcHRSdW5uZXI6OkFTWU5D
X0VYRUNVVElPTik7Ci0gICAgICAgIG1fY2FjaGVkU2NyaXB0LT5hZGRDbGllbnQodGhpcyk7Cisg
ICAgICAgIEFTU0VSVChtX2xvYWRhYmxlU2NyaXB0KTsKKyAgICAgICAgbV9lbGVtZW50LmRvY3Vt
ZW50KCkuc2NyaXB0UnVubmVyKCktPnF1ZXVlU2NyaXB0Rm9yRXhlY3V0aW9uKHRoaXMsICptX2xv
YWRhYmxlU2NyaXB0LCBTY3JpcHRSdW5uZXI6OkFTWU5DX0VYRUNVVElPTik7CisgICAgICAgIG1f
bG9hZGFibGVTY3JpcHQtPmFkZENsaWVudCgqdGhpcyk7CiAgICAgfSBlbHNlIHsKICAgICAgICAg
Ly8gUmVzZXQgbGluZSBudW1iZXJpbmcgZm9yIG5lc3RlZCB3cml0ZXMuCiAgICAgICAgIFRleHRQ
b3NpdGlvbiBwb3NpdGlvbiA9IGRvY3VtZW50LmlzSW5Eb2N1bWVudFdyaXRlKCkgPyBUZXh0UG9z
aXRpb24oKSA6IHNjcmlwdFN0YXJ0UG9zaXRpb247CkBAIC0yNTUsMzkgKzI1OSw0NSBAQCBib29s
IFNjcmlwdEVsZW1lbnQ6OnByZXBhcmVTY3JpcHQoY29uc3QgVGV4dFBvc2l0aW9uJiBzY3JpcHRT
dGFydFBvc2l0aW9uLCBMZWdhYwogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIFNjcmlwdEVs
ZW1lbnQ6OnJlcXVlc3RTY3JpcHQoY29uc3QgU3RyaW5nJiBzb3VyY2VVcmwpCitDYWNoZWRSZXNv
dXJjZUhhbmRsZTxDYWNoZWRTY3JpcHQ+IFNjcmlwdEVsZW1lbnQ6OnJlcXVlc3RDYWNoZWRTY3Jp
cHQoY29uc3QgVVJMJiBzb3VyY2VVUkwsIGNvbnN0IFN0cmluZyYgbm9uY2VBdHRyaWJ1dGUsIGNv
bnN0IFN0cmluZyYgY3Jvc3NPcmlnaW5Nb2RlKQogewotICAgIFJlZjxEb2N1bWVudD4gb3JpZ2lu
YWxEb2N1bWVudChtX2VsZW1lbnQuZG9jdW1lbnQoKSk7Ci0gICAgaWYgKCFtX2VsZW1lbnQuZGlz
cGF0Y2hCZWZvcmVMb2FkRXZlbnQoc291cmNlVXJsKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIGlmICghbV9lbGVtZW50LmluRG9jdW1lbnQoKSB8fCAmbV9lbGVtZW50LmRvY3VtZW50KCkg
IT0gb3JpZ2luYWxEb2N1bWVudC5wdHIoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGJv
b2wgaGFzS25vd25Ob25jZSA9IG1fZWxlbWVudC5kb2N1bWVudCgpLmNvbnRlbnRTZWN1cml0eVBv
bGljeSgpLT5hbGxvd1NjcmlwdFdpdGhOb25jZShub25jZUF0dHJpYnV0ZSwgbV9lbGVtZW50Lmlz
SW5Vc2VyQWdlbnRTaGFkb3dUcmVlKCkpOworICAgIFJlc291cmNlTG9hZGVyT3B0aW9ucyBvcHRp
b25zID0gQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OmRlZmF1bHRDYWNoZWRSZXNvdXJjZU9wdGlvbnMo
KTsKKyAgICBvcHRpb25zLmNvbnRlbnRTZWN1cml0eVBvbGljeUltcG9zaXRpb24gPSBoYXNLbm93
bk5vbmNlID8gQ29udGVudFNlY3VyaXR5UG9saWN5SW1wb3NpdGlvbjo6U2tpcFBvbGljeUNoZWNr
IDogQ29udGVudFNlY3VyaXR5UG9saWN5SW1wb3NpdGlvbjo6RG9Qb2xpY3lDaGVjazsKIAotICAg
IEFTU0VSVCghbV9jYWNoZWRTY3JpcHQpOwotICAgIGlmICghc3RyaXBMZWFkaW5nQW5kVHJhaWxp
bmdIVE1MU3BhY2VzKHNvdXJjZVVybCkuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGJvb2wgaGFzS25v
d25Ob25jZSA9IG1fZWxlbWVudC5kb2N1bWVudCgpLmNvbnRlbnRTZWN1cml0eVBvbGljeSgpLT5h
bGxvd1NjcmlwdFdpdGhOb25jZShtX2VsZW1lbnQuYXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXph
dGlvbihIVE1MTmFtZXM6Om5vbmNlQXR0ciksIG1fZWxlbWVudC5pc0luVXNlckFnZW50U2hhZG93
VHJlZSgpKTsKLSAgICAgICAgUmVzb3VyY2VMb2FkZXJPcHRpb25zIG9wdGlvbnMgPSBDYWNoZWRS
ZXNvdXJjZUxvYWRlcjo6ZGVmYXVsdENhY2hlZFJlc291cmNlT3B0aW9ucygpOwotICAgICAgICBv
cHRpb25zLmNvbnRlbnRTZWN1cml0eVBvbGljeUltcG9zaXRpb24gPSBoYXNLbm93bk5vbmNlID8g
Q29udGVudFNlY3VyaXR5UG9saWN5SW1wb3NpdGlvbjo6U2tpcFBvbGljeUNoZWNrIDogQ29udGVu
dFNlY3VyaXR5UG9saWN5SW1wb3NpdGlvbjo6RG9Qb2xpY3lDaGVjazsKKyAgICBDYWNoZWRSZXNv
dXJjZVJlcXVlc3QgcmVxdWVzdChSZXNvdXJjZVJlcXVlc3Qoc291cmNlVVJMKSwgb3B0aW9ucyk7
CiAKLSAgICAgICAgQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3QoUmVzb3VyY2VSZXF1ZXN0
KG1fZWxlbWVudC5kb2N1bWVudCgpLmNvbXBsZXRlVVJMKHNvdXJjZVVybCkpLCBvcHRpb25zKTsK
KyAgICBtX2VsZW1lbnQuZG9jdW1lbnQoKS5jb250ZW50U2VjdXJpdHlQb2xpY3koKS0+dXBncmFk
ZUluc2VjdXJlUmVxdWVzdElmTmVlZGVkKHJlcXVlc3QubXV0YWJsZVJlc291cmNlUmVxdWVzdCgp
LCBDb250ZW50U2VjdXJpdHlQb2xpY3k6Okluc2VjdXJlUmVxdWVzdFR5cGU6OkxvYWQpOwogCi0g
ICAgICAgIG1fZWxlbWVudC5kb2N1bWVudCgpLmNvbnRlbnRTZWN1cml0eVBvbGljeSgpLT51cGdy
YWRlSW5zZWN1cmVSZXF1ZXN0SWZOZWVkZWQocmVxdWVzdC5tdXRhYmxlUmVzb3VyY2VSZXF1ZXN0
KCksIENvbnRlbnRTZWN1cml0eVBvbGljeTo6SW5zZWN1cmVSZXF1ZXN0VHlwZTo6TG9hZCk7Cisg
ICAgaWYgKCFjcm9zc09yaWdpbk1vZGUuaXNOdWxsKCkpIHsKKyAgICAgICAgU3RvcmVkQ3JlZGVu
dGlhbHMgYWxsb3dDcmVkZW50aWFscyA9IGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGNy
b3NzT3JpZ2luTW9kZSwgInVzZS1jcmVkZW50aWFscyIpID8gQWxsb3dTdG9yZWRDcmVkZW50aWFs
cyA6IERvTm90QWxsb3dTdG9yZWRDcmVkZW50aWFsczsKKyAgICAgICAgQVNTRVJUKG1fZWxlbWVu
dC5kb2N1bWVudCgpLnNlY3VyaXR5T3JpZ2luKCkpOworICAgICAgICB1cGRhdGVSZXF1ZXN0Rm9y
QWNjZXNzQ29udHJvbChyZXF1ZXN0Lm11dGFibGVSZXNvdXJjZVJlcXVlc3QoKSwgKm1fZWxlbWVu
dC5kb2N1bWVudCgpLnNlY3VyaXR5T3JpZ2luKCksIGFsbG93Q3JlZGVudGlhbHMpOworICAgIH0K
IAorICAgIHJlcXVlc3Quc2V0Q2hhcnNldChzY3JpcHRDaGFyc2V0KCkpOworICAgIHJlcXVlc3Qu
c2V0SW5pdGlhdG9yKCZlbGVtZW50KCkpOworCisgICAgcmV0dXJuIG1fZWxlbWVudC5kb2N1bWVu
dCgpLmNhY2hlZFJlc291cmNlTG9hZGVyKCkucmVxdWVzdFNjcmlwdChyZXF1ZXN0KTsKK30KKwor
Ym9vbCBTY3JpcHRFbGVtZW50OjpyZXF1ZXN0Q2xhc3NpY1NjcmlwdChjb25zdCBTdHJpbmcmIHNv
dXJjZVVSTCkKK3sKKyAgICBSZWY8RG9jdW1lbnQ+IG9yaWdpbmFsRG9jdW1lbnQobV9lbGVtZW50
LmRvY3VtZW50KCkpOworICAgIGlmICghbV9lbGVtZW50LmRpc3BhdGNoQmVmb3JlTG9hZEV2ZW50
KHNvdXJjZVVSTCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBib29sIGRpZEV2ZW50TGlz
dGVuZXJEaXNjb25uZWN0VGhpc0VsZW1lbnQgPSAhbV9lbGVtZW50LmluRG9jdW1lbnQoKSB8fCAm
bV9lbGVtZW50LmRvY3VtZW50KCkgIT0gb3JpZ2luYWxEb2N1bWVudC5wdHIoKTsKKyAgICBpZiAo
ZGlkRXZlbnRMaXN0ZW5lckRpc2Nvbm5lY3RUaGlzRWxlbWVudCkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgQVNTRVJUKCFtX2xvYWRhYmxlU2NyaXB0KTsKKyAgICBpZiAoIXN0cmlwTGVh
ZGluZ0FuZFRyYWlsaW5nSFRNTFNwYWNlcyhzb3VyY2VVUkwpLmlzRW1wdHkoKSkgewogICAgICAg
ICBTdHJpbmcgY3Jvc3NPcmlnaW5Nb2RlID0gbV9lbGVtZW50LmF0dHJpYnV0ZVdpdGhvdXRTeW5j
aHJvbml6YXRpb24oSFRNTE5hbWVzOjpjcm9zc29yaWdpbkF0dHIpOwotICAgICAgICBpZiAoIWNy
b3NzT3JpZ2luTW9kZS5pc051bGwoKSkgewotICAgICAgICAgICAgbV9yZXF1ZXN0VXNlc0FjY2Vz
c0NvbnRyb2wgPSB0cnVlOwotICAgICAgICAgICAgU3RvcmVkQ3JlZGVudGlhbHMgYWxsb3dDcmVk
ZW50aWFscyA9IGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGNyb3NzT3JpZ2luTW9kZSwg
InVzZS1jcmVkZW50aWFscyIpID8gQWxsb3dTdG9yZWRDcmVkZW50aWFscyA6IERvTm90QWxsb3dT
dG9yZWRDcmVkZW50aWFsczsKLSAgICAgICAgICAgIEFTU0VSVChtX2VsZW1lbnQuZG9jdW1lbnQo
KS5zZWN1cml0eU9yaWdpbigpKTsKLSAgICAgICAgICAgIHVwZGF0ZVJlcXVlc3RGb3JBY2Nlc3ND
b250cm9sKHJlcXVlc3QubXV0YWJsZVJlc291cmNlUmVxdWVzdCgpLCAqbV9lbGVtZW50LmRvY3Vt
ZW50KCkuc2VjdXJpdHlPcmlnaW4oKSwgYWxsb3dDcmVkZW50aWFscyk7Ci0gICAgICAgIH0KLSAg
ICAgICAgcmVxdWVzdC5zZXRDaGFyc2V0KHNjcmlwdENoYXJzZXQoKSk7Ci0gICAgICAgIHJlcXVl
c3Quc2V0SW5pdGlhdG9yKCZlbGVtZW50KCkpOwotCi0gICAgICAgIG1fY2FjaGVkU2NyaXB0ID0g
bV9lbGVtZW50LmRvY3VtZW50KCkuY2FjaGVkUmVzb3VyY2VMb2FkZXIoKS5yZXF1ZXN0U2NyaXB0
KHJlcXVlc3QpOworICAgICAgICBtX2xvYWRhYmxlU2NyaXB0ID0gTG9hZGFibGVDbGFzc2ljU2Ny
aXB0OjpjcmVhdGUocmVxdWVzdENhY2hlZFNjcmlwdChtX2VsZW1lbnQuZG9jdW1lbnQoKS5jb21w
bGV0ZVVSTChzb3VyY2VVUkwpLCBtX2VsZW1lbnQuYXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXph
dGlvbihIVE1MTmFtZXM6Om5vbmNlQXR0ciksIGNyb3NzT3JpZ2luTW9kZSksIGNyb3NzT3JpZ2lu
TW9kZSwgKm1fZWxlbWVudC5kb2N1bWVudCgpLnNlY3VyaXR5T3JpZ2luKCkpOwogICAgICAgICBt
X2lzRXh0ZXJuYWxTY3JpcHQgPSB0cnVlOwogICAgIH0KIAotICAgIGlmIChtX2NhY2hlZFNjcmlw
dCkKKyAgICBpZiAobV9sb2FkYWJsZVNjcmlwdCkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAg
ICBjYWxsT25NYWluVGhyZWFkKFt0aGlzLCBlbGVtZW50ID0gUmVmPEVsZW1lbnQ+KG1fZWxlbWVu
dCldIHsKQEAgLTMxMSwxMyArMzIxLDYgQEAgdm9pZCBTY3JpcHRFbGVtZW50OjpleGVjdXRlU2Ny
aXB0KGNvbnN0IFNjcmlwdFNvdXJjZUNvZGUmIHNvdXJjZUNvZGUpCiAgICAgICAgICAgICByZXR1
cm47CiAgICAgfQogCi0jaWYgRU5BQkxFKE5PU05JRkYpCi0gICAgaWYgKG1faXNFeHRlcm5hbFNj
cmlwdCAmJiBtX2NhY2hlZFNjcmlwdCAmJiAhbV9jYWNoZWRTY3JpcHQtPm1pbWVUeXBlQWxsb3dl
ZEJ5Tm9zbmlmZigpKSB7Ci0gICAgICAgIG1fZWxlbWVudC5kb2N1bWVudCgpLmFkZENvbnNvbGVN
ZXNzYWdlKE1lc3NhZ2VTb3VyY2U6OlNlY3VyaXR5LCBNZXNzYWdlTGV2ZWw6OkVycm9yLCAiUmVm
dXNlZCB0byBleGVjdXRlIHNjcmlwdCBmcm9tICciICsgbV9jYWNoZWRTY3JpcHQtPnVybCgpLnN0
cmluZ0NlbnRlckVsbGlwc2l6ZWRUb0xlbmd0aCgpICsgIicgYmVjYXVzZSBpdHMgTUlNRSB0eXBl
ICgnIiArIG1fY2FjaGVkU2NyaXB0LT5taW1lVHlwZSgpICsgIicpIGlzIG5vdCBleGVjdXRhYmxl
LCBhbmQgc3RyaWN0IE1JTUUgdHlwZSBjaGVja2luZyBpcyBlbmFibGVkLiIpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotI2VuZGlmCi0KICAgICBSZWY8RG9jdW1lbnQ+IGRvY3VtZW50KG1fZWxl
bWVudC5kb2N1bWVudCgpKTsKICAgICBpZiAoRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQtPmZyYW1l
KCkpIHsKICAgICAgICAgSWdub3JlRGVzdHJ1Y3RpdmVXcml0ZUNvdW50SW5jcmVtZW50ZXIgaWdu
b3JlRGVzY3RydWN0aXZlV3JpdGVDb3VudEluY3JlbWVudGVyKG1faXNFeHRlcm5hbFNjcmlwdCA/
IGRvY3VtZW50LnB0cigpIDogbnVsbHB0cik7CkBAIC0zMzIsNTEgKzMzNSw2NyBAQCB2b2lkIFNj
cmlwdEVsZW1lbnQ6OmV4ZWN1dGVTY3JpcHQoY29uc3QgU2NyaXB0U291cmNlQ29kZSYgc291cmNl
Q29kZSkKIAogdm9pZCBTY3JpcHRFbGVtZW50OjpzdG9wTG9hZFJlcXVlc3QoKQogewotICAgIGlm
IChtX2NhY2hlZFNjcmlwdCkgeworICAgIGlmIChtX2xvYWRhYmxlU2NyaXB0KSB7CiAgICAgICAg
IGlmICghbV93aWxsQmVQYXJzZXJFeGVjdXRlZCkKLSAgICAgICAgICAgIG1fY2FjaGVkU2NyaXB0
LT5yZW1vdmVDbGllbnQodGhpcyk7Ci0gICAgICAgIG1fY2FjaGVkU2NyaXB0ID0gbnVsbHB0cjsK
KyAgICAgICAgICAgIG1fbG9hZGFibGVTY3JpcHQtPnJlbW92ZUNsaWVudCgqdGhpcyk7CisgICAg
ICAgIG1fbG9hZGFibGVTY3JpcHQgPSBudWxscHRyOwogICAgIH0KIH0KIAotdm9pZCBTY3JpcHRF
bGVtZW50OjpleGVjdXRlKENhY2hlZFNjcmlwdCogY2FjaGVkU2NyaXB0KQordm9pZCBTY3JpcHRF
bGVtZW50OjpleGVjdXRlU2NyaXB0QW5kRGlzcGF0Y2hFdmVudChMb2FkYWJsZVNjcmlwdCYgbG9h
ZGFibGVTY3JpcHQpCiB7Ci0gICAgQVNTRVJUKCFtX3dpbGxCZVBhcnNlckV4ZWN1dGVkKTsKLSAg
ICBBU1NFUlQoY2FjaGVkU2NyaXB0KTsKLSAgICBpZiAoY2FjaGVkU2NyaXB0LT5lcnJvck9jY3Vy
cmVkKCkpCisgICAgaWYgKE9wdGlvbmFsPExvYWRhYmxlU2NyaXB0OjpFcnJvcj4gZXJyb3IgPSBs
b2FkYWJsZVNjcmlwdC5lcnJvck9jY3VycmVkKCkpIHsKKyAgICAgICAgaWYgKE9wdGlvbmFsPExv
YWRhYmxlU2NyaXB0OjpDb25zb2xlTWVzc2FnZT4gbWVzc2FnZSA9IGVycm9yLT5jb25zb2xlTWVz
c2FnZSkKKyAgICAgICAgICAgIG1fZWxlbWVudC5kb2N1bWVudCgpLmFkZENvbnNvbGVNZXNzYWdl
KG1lc3NhZ2UtPnNvdXJjZSwgbWVzc2FnZS0+bGV2ZWwsIG1lc3NhZ2UtPm1lc3NhZ2UpOwogICAg
ICAgICBkaXNwYXRjaEVycm9yRXZlbnQoKTsKLSAgICBlbHNlIGlmICghY2FjaGVkU2NyaXB0LT53
YXNDYW5jZWxlZCgpKSB7Ci0gICAgICAgIGV4ZWN1dGVTY3JpcHQoU2NyaXB0U291cmNlQ29kZShj
YWNoZWRTY3JpcHQpKTsKKyAgICB9IGVsc2UgaWYgKCFsb2FkYWJsZVNjcmlwdC53YXNDYW5jZWxl
ZCgpKSB7CisgICAgICAgIGV4ZWN1dGVTY3JpcHQobG9hZGFibGVTY3JpcHQpOwogICAgICAgICBk
aXNwYXRjaExvYWRFdmVudCgpOwogICAgIH0KLSAgICBjYWNoZWRTY3JpcHQtPnJlbW92ZUNsaWVu
dCh0aGlzKTsKIH0KIAotdm9pZCBTY3JpcHRFbGVtZW50Ojpub3RpZnlGaW5pc2hlZChDYWNoZWRS
ZXNvdXJjZSogcmVzb3VyY2UpCit2b2lkIFNjcmlwdEVsZW1lbnQ6OmV4ZWN1dGVRdWV1ZWRTY3Jp
cHRBbmREaXNwYXRjaEV2ZW50KExvYWRhYmxlU2NyaXB0JiBsb2FkYWJsZVNjcmlwdCkKIHsKICAg
ICBBU1NFUlQoIW1fd2lsbEJlUGFyc2VyRXhlY3V0ZWQpOworICAgIGV4ZWN1dGVTY3JpcHRBbmRE
aXNwYXRjaEV2ZW50KGxvYWRhYmxlU2NyaXB0KTsKKyAgICBsb2FkYWJsZVNjcmlwdC5yZW1vdmVD
bGllbnQoKnRoaXMpOworfQogCi0gICAgLy8gQ2FjaGVkUmVzb3VyY2UgcG9zc2libHkgaW52b2tl
cyB0aGlzIG5vdGlmeUZpbmlzaGVkKCkgbW9yZSB0aGFuCi0gICAgLy8gb25jZSBiZWNhdXNlIFNj
cmlwdEVsZW1lbnQgZG9lc24ndCB1bnN1YnNjcmliZSBpdHNlbGYgZnJvbQotICAgIC8vIENhY2hl
ZFJlc291cmNlIGhlcmUgYW5kIGRvZXMgaXQgaW4gZXhlY3V0ZSgpIGluc3RlYWQuCi0gICAgLy8g
V2UgdXNlIG1fY2FjaGVkU2NyaXB0IHRvIGNoZWNrIGlmIHRoaXMgZnVuY3Rpb24gaXMgYWxyZWFk
eSBjYWxsZWQuCi0gICAgQVNTRVJUX1VOVVNFRChyZXNvdXJjZSwgcmVzb3VyY2UgPT0gbV9jYWNo
ZWRTY3JpcHQpOwotICAgIGlmICghbV9jYWNoZWRTY3JpcHQpCi0gICAgICAgIHJldHVybjsKK3Zv
aWQgU2NyaXB0RWxlbWVudDo6ZXhlY3V0ZVBlbmRpbmdTY3JpcHRBbmREaXNwYXRjaEV2ZW50KFBl
bmRpbmdTY3JpcHQmIHBlbmRpbmdTY3JpcHQpCit7CisgICAgSWdub3JlRGVzdHJ1Y3RpdmVXcml0
ZUNvdW50SW5jcmVtZW50ZXIgaWdub3JlRGVzdHJ1Y3RpdmVXcml0ZUNvdW50SW5jcmVtZW50ZXIo
Jm1fZWxlbWVudC5kb2N1bWVudCgpKTsKKyAgICBpZiAoYXV0byogbG9hZGFibGVTY3JpcHQgPSBw
ZW5kaW5nU2NyaXB0LmxvYWRhYmxlU2NyaXB0KCkpCisgICAgICAgIGV4ZWN1dGVTY3JpcHRBbmRE
aXNwYXRjaEV2ZW50KCpsb2FkYWJsZVNjcmlwdCk7CisgICAgZWxzZSB7CisgICAgICAgIEFTU0VS
VCghcGVuZGluZ1NjcmlwdC5lcnJvck9jY3VycmVkKCkpOworICAgICAgICBleGVjdXRlU2NyaXB0
KFNjcmlwdFNvdXJjZUNvZGUoc2NyaXB0Q29udGVudCgpLCBtX2VsZW1lbnQuZG9jdW1lbnQoKS51
cmwoKSwgcGVuZGluZ1NjcmlwdC5zdGFydGluZ1Bvc2l0aW9uKCkpKTsKKyAgICAgICAgZGlzcGF0
Y2hMb2FkRXZlbnQoKTsKKyAgICB9Cit9CiAKLSAgICBpZiAobV9yZXF1ZXN0VXNlc0FjY2Vzc0Nv
bnRyb2wgJiYgIW1fY2FjaGVkU2NyaXB0LT5wYXNzZXNTYW1lT3JpZ2luUG9saWN5Q2hlY2soKm1f
ZWxlbWVudC5kb2N1bWVudCgpLnNlY3VyaXR5T3JpZ2luKCkpKSB7Ci0gICAgICAgIGRpc3BhdGNo
RXJyb3JFdmVudCgpOwotICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8U3RyaW5nPiBjb25z
b2xlTWVzc2FnZShBU0NJSUxpdGVyYWwoIkNyb3NzLW9yaWdpbiBzY3JpcHQgbG9hZCBkZW5pZWQg
YnkgQ3Jvc3MtT3JpZ2luIFJlc291cmNlIFNoYXJpbmcgcG9saWN5LiIpKTsKLSAgICAgICAgbV9l
bGVtZW50LmRvY3VtZW50KCkuYWRkQ29uc29sZU1lc3NhZ2UoTWVzc2FnZVNvdXJjZTo6SlMsIE1l
c3NhZ2VMZXZlbDo6RXJyb3IsIGNvbnNvbGVNZXNzYWdlKTsKK3ZvaWQgU2NyaXB0RWxlbWVudDo6
ZXhlY3V0ZVNjcmlwdChMb2FkYWJsZVNjcmlwdCYgbG9hZGFibGVTY3JpcHQpCit7CisgICAgQVNT
RVJUKCFsb2FkYWJsZVNjcmlwdC5lcnJvck9jY3VycmVkKCkpOworICAgIGV4ZWN1dGVTY3JpcHQo
U2NyaXB0U291cmNlQ29kZSgmZG93bmNhc3Q8TG9hZGFibGVDbGFzc2ljU2NyaXB0Pihsb2FkYWJs
ZVNjcmlwdCkuY2FjaGVkU2NyaXB0KCkpKTsKK30KKwordm9pZCBTY3JpcHRFbGVtZW50Ojpub3Rp
ZnlGaW5pc2hlZChMb2FkYWJsZVNjcmlwdCYpCit7CisgICAgQVNTRVJUKCFtX3dpbGxCZVBhcnNl
ckV4ZWN1dGVkKTsKKworICAgIC8vIExvYWRhYmxlU2NyaXB0IHBvc3NpYmx5IGludm9rZXMgdGhp
cyBub3RpZnlGaW5pc2hlZCgpIG1vcmUgdGhhbgorICAgIC8vIG9uY2UgYmVjYXVzZSBTY3JpcHRF
bGVtZW50IGRvZXNuJ3QgdW5zdWJzY3JpYmUgaXRzZWxmIGZyb20KKyAgICAvLyBMb2FkYWJsZVNj
cmlwdCBoZXJlIGFuZCBkb2VzIGl0IGluIGV4ZWN1dGUoKSBpbnN0ZWFkLgorICAgIC8vIFdlIHVz
ZSBtX2xvYWRhYmxlU2NyaXB0IHRvIGNoZWNrIGlmIHRoaXMgZnVuY3Rpb24gaXMgYWxyZWFkeSBj
YWxsZWQuCisgICAgaWYgKCFtX2xvYWRhYmxlU2NyaXB0KQogICAgICAgICByZXR1cm47Ci0gICAg
fQogCiAgICAgaWYgKG1fd2lsbEV4ZWN1dGVJbk9yZGVyKQogICAgICAgICBtX2VsZW1lbnQuZG9j
dW1lbnQoKS5zY3JpcHRSdW5uZXIoKS0+bm90aWZ5U2NyaXB0UmVhZHkodGhpcywgU2NyaXB0UnVu
bmVyOjpJTl9PUkRFUl9FWEVDVVRJT04pOwogICAgIGVsc2UKICAgICAgICAgbV9lbGVtZW50LmRv
Y3VtZW50KCkuc2NyaXB0UnVubmVyKCktPm5vdGlmeVNjcmlwdFJlYWR5KHRoaXMsIFNjcmlwdFJ1
bm5lcjo6QVNZTkNfRVhFQ1VUSU9OKTsKIAotICAgIG1fY2FjaGVkU2NyaXB0ID0gbnVsbHB0cjsK
KyAgICBtX2xvYWRhYmxlU2NyaXB0ID0gbnVsbHB0cjsKIH0KIAogYm9vbCBTY3JpcHRFbGVtZW50
OjppZ25vcmVzTG9hZFJlcXVlc3QoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
ZG9tL1NjcmlwdEVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRFbGVtZW50LmgK
aW5kZXggMWFhNGYyZTgzYjMxMTE3MTI0NmEyMzBlNjU4ODA2MmY5Y2YzZDA4NC4uZTRlNWE0NTgz
Njk0MDllNTU2N2U2NmQzNWE1Yjc5YWFlODUyMzY0NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZG9tL1NjcmlwdEVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0RWxl
bWVudC5oCkBAIC0xOCwxMiArMTgsMTQgQEAKICAqCiAgKi8KIAotI2lmbmRlZiBTY3JpcHRFbGVt
ZW50X2gKLSNkZWZpbmUgU2NyaXB0RWxlbWVudF9oCisjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUg
IkNhY2hlZFJlc291cmNlQ2xpZW50LmgiCiAjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VIYW5kbGUu
aCIKKyNpbmNsdWRlICJMb2FkYWJsZVNjcmlwdC5oIgorI2luY2x1ZGUgIkxvYWRhYmxlU2NyaXB0
Q2xpZW50LmgiCiAjaW5jbHVkZSAiVGltZXIuaCIKKyNpbmNsdWRlICJVUkwuaCIKICNpbmNsdWRl
IDx3dGYvdGV4dC9UZXh0UG9zaXRpb24uaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcu
aD4KIApAQCAtMzIsMTAgKzM0LDExIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIENhY2hl
ZFNjcmlwdDsKIGNsYXNzIENvbnRhaW5lck5vZGU7CiBjbGFzcyBFbGVtZW50OworY2xhc3MgUGVu
ZGluZ1NjcmlwdDsKIGNsYXNzIFNjcmlwdEVsZW1lbnQ7CiBjbGFzcyBTY3JpcHRTb3VyY2VDb2Rl
OwogCi1jbGFzcyBTY3JpcHRFbGVtZW50IDogcHJpdmF0ZSBDYWNoZWRSZXNvdXJjZUNsaWVudCB7
CitjbGFzcyBTY3JpcHRFbGVtZW50IDogcHJpdmF0ZSBMb2FkYWJsZVNjcmlwdENsaWVudCB7CiBw
dWJsaWM6CiAgICAgdmlydHVhbCB+U2NyaXB0RWxlbWVudCgpOwogCkBAIC00OCw3ICs1MSw5IEBA
IGNsYXNzIFNjcmlwdEVsZW1lbnQgOiBwcml2YXRlIENhY2hlZFJlc291cmNlQ2xpZW50IHsKICAg
ICBTdHJpbmcgc2NyaXB0Q2hhcnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fY2hhcmFjdGVyRW5jb2Rp
bmc7IH0KICAgICBXRUJDT1JFX0VYUE9SVCBTdHJpbmcgc2NyaXB0Q29udGVudCgpIGNvbnN0Owog
ICAgIHZvaWQgZXhlY3V0ZVNjcmlwdChjb25zdCBTY3JpcHRTb3VyY2VDb2RlJik7Ci0gICAgdm9p
ZCBleGVjdXRlKENhY2hlZFNjcmlwdCopOworCisgICAgdm9pZCBleGVjdXRlUXVldWVkU2NyaXB0
QW5kRGlzcGF0Y2hFdmVudChMb2FkYWJsZVNjcmlwdCYpOworICAgIHZvaWQgZXhlY3V0ZVBlbmRp
bmdTY3JpcHRBbmREaXNwYXRjaEV2ZW50KFBlbmRpbmdTY3JpcHQmKTsKIAogICAgIC8vIFhNTCBw
YXJzZXIgY2FsbHMgdGhlc2UKICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hMb2FkRXZlbnQoKSA9
IDA7CkBAIC01OCw3ICs2Myw3IEBAIGNsYXNzIFNjcmlwdEVsZW1lbnQgOiBwcml2YXRlIENhY2hl
ZFJlc291cmNlQ2xpZW50IHsKICAgICBib29sIHdpbGxCZVBhcnNlckV4ZWN1dGVkKCkgY29uc3Qg
eyByZXR1cm4gbV93aWxsQmVQYXJzZXJFeGVjdXRlZDsgfQogICAgIGJvb2wgcmVhZHlUb0JlUGFy
c2VyRXhlY3V0ZWQoKSBjb25zdCB7IHJldHVybiBtX3JlYWR5VG9CZVBhcnNlckV4ZWN1dGVkOyB9
CiAgICAgYm9vbCB3aWxsRXhlY3V0ZVdoZW5Eb2N1bWVudEZpbmlzaGVkUGFyc2luZygpIGNvbnN0
IHsgcmV0dXJuIG1fd2lsbEV4ZWN1dGVXaGVuRG9jdW1lbnRGaW5pc2hlZFBhcnNpbmc7IH0KLSAg
ICBDYWNoZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRTY3JpcHQ+IGNhY2hlZFNjcmlwdCgpIHsgcmV0
dXJuIG1fY2FjaGVkU2NyaXB0OyB9CisgICAgTG9hZGFibGVTY3JpcHQqIGxvYWRhYmxlU2NyaXB0
KCkgeyByZXR1cm4gbV9sb2FkYWJsZVNjcmlwdC5nZXQoKTsgfQogCiBwcm90ZWN0ZWQ6CiAgICAg
U2NyaXB0RWxlbWVudChFbGVtZW50JiwgYm9vbCBjcmVhdGVkQnlQYXJzZXIsIGJvb2wgaXNFdmFs
dWF0ZWQpOwpAQCAtNzIsMjAgKzc3LDI1IEBAIGNsYXNzIFNjcmlwdEVsZW1lbnQgOiBwcml2YXRl
IENhY2hlZFJlc291cmNlQ2xpZW50IHsKICAgICBib29sIHNob3VsZENhbGxGaW5pc2hlZEluc2Vy
dGluZ1N1YnRyZWUoQ29udGFpbmVyTm9kZSYpOwogICAgIHZvaWQgZmluaXNoZWRJbnNlcnRpbmdT
dWJ0cmVlKCk7CiAgICAgdm9pZCBjaGlsZHJlbkNoYW5nZWQoKTsKLSAgICB2b2lkIGhhbmRsZVNv
dXJjZUF0dHJpYnV0ZShjb25zdCBTdHJpbmcmIHNvdXJjZVVybCk7CisgICAgdm9pZCBoYW5kbGVT
b3VyY2VBdHRyaWJ1dGUoY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwpOwogICAgIHZvaWQgaGFuZGxl
QXN5bmNBdHRyaWJ1dGUoKTsKIAogcHJpdmF0ZToKKyAgICB2b2lkIGV4ZWN1dGVTY3JpcHQoTG9h
ZGFibGVTY3JpcHQmKTsKKyAgICB2b2lkIGV4ZWN1dGVTY3JpcHRBbmREaXNwYXRjaEV2ZW50KExv
YWRhYmxlU2NyaXB0Jik7CisKICAgICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211
bHRpcGFnZS9zY3JpcHRpbmcuaHRtbCNjb25jZXB0LXNjcmlwdC10eXBlCiAgICAgZW51bSBjbGFz
cyBTY3JpcHRUeXBlIHsgQ2xhc3NpYywgTW9kdWxlIH07CiAgICAgT3B0aW9uYWw8U2NyaXB0VHlw
ZT4gZGV0ZXJtaW5lU2NyaXB0VHlwZShMZWdhY3lUeXBlU3VwcG9ydCkgY29uc3Q7CiAgICAgYm9v
bCBpZ25vcmVzTG9hZFJlcXVlc3QoKSBjb25zdDsKICAgICBib29sIGlzU2NyaXB0Rm9yRXZlbnRT
dXBwb3J0ZWQoKSBjb25zdDsKIAotICAgIGJvb2wgcmVxdWVzdFNjcmlwdChjb25zdCBTdHJpbmcm
IHNvdXJjZVVybCk7CisgICAgQ2FjaGVkUmVzb3VyY2VIYW5kbGU8Q2FjaGVkU2NyaXB0PiByZXF1
ZXN0Q2FjaGVkU2NyaXB0KGNvbnN0IFVSTCYsIGNvbnN0IFN0cmluZyYgbm9uY2VBdHRyaWJ1dGUs
IGNvbnN0IFN0cmluZyYgY3Jvc3NvcmlnaW5BdHRyaWJ1dGUpOworCisgICAgYm9vbCByZXF1ZXN0
Q2xhc3NpY1NjcmlwdChjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCk7CiAgICAgdm9pZCBzdG9wTG9h
ZFJlcXVlc3QoKTsKIAotICAgIHZvaWQgbm90aWZ5RmluaXNoZWQoQ2FjaGVkUmVzb3VyY2UqKSBv
dmVycmlkZTsKKyAgICB2b2lkIG5vdGlmeUZpbmlzaGVkKExvYWRhYmxlU2NyaXB0Jikgb3ZlcnJp
ZGU7CiAKICAgICB2aXJ0dWFsIFN0cmluZyBzb3VyY2VBdHRyaWJ1dGVWYWx1ZSgpIGNvbnN0ID0g
MDsKICAgICB2aXJ0dWFsIFN0cmluZyBjaGFyc2V0QXR0cmlidXRlVmFsdWUoKSBjb25zdCA9IDA7
CkBAIC05OCw3ICsxMDgsNiBAQCBjbGFzcyBTY3JpcHRFbGVtZW50IDogcHJpdmF0ZSBDYWNoZWRS
ZXNvdXJjZUNsaWVudCB7CiAgICAgdmlydHVhbCBib29sIGhhc1NvdXJjZUF0dHJpYnV0ZSgpIGNv
bnN0ID0gMDsKIAogICAgIEVsZW1lbnQmIG1fZWxlbWVudDsKLSAgICBDYWNoZWRSZXNvdXJjZUhh
bmRsZTxDYWNoZWRTY3JpcHQ+IG1fY2FjaGVkU2NyaXB0OwogICAgIFdURjo6T3JkaW5hbE51bWJl
ciBtX3N0YXJ0TGluZU51bWJlcjsKICAgICBib29sIG1fcGFyc2VySW5zZXJ0ZWQgOiAxOwogICAg
IGJvb2wgbV9pc0V4dGVybmFsU2NyaXB0IDogMTsKQEAgLTEwOSwxNCArMTE4LDEyIEBAIGNsYXNz
IFNjcmlwdEVsZW1lbnQgOiBwcml2YXRlIENhY2hlZFJlc291cmNlQ2xpZW50IHsKICAgICBib29s
IG1fd2lsbEV4ZWN1dGVXaGVuRG9jdW1lbnRGaW5pc2hlZFBhcnNpbmcgOiAxOwogICAgIGJvb2wg
bV9mb3JjZUFzeW5jIDogMTsKICAgICBib29sIG1fd2lsbEV4ZWN1dGVJbk9yZGVyIDogMTsKLSAg
ICBib29sIG1fcmVxdWVzdFVzZXNBY2Nlc3NDb250cm9sIDogMTsKICAgICBTdHJpbmcgbV9jaGFy
YWN0ZXJFbmNvZGluZzsKICAgICBTdHJpbmcgbV9mYWxsYmFja0NoYXJhY3RlckVuY29kaW5nOwor
ICAgIFJlZlB0cjxMb2FkYWJsZVNjcmlwdD4gbV9sb2FkYWJsZVNjcmlwdDsKIH07CiAKIC8vIEZJ
WE1FOiByZXBsYWNlIHdpdGggZG93bmNhc3Q8U2NyaXB0RWxlbWVudD4uCiBTY3JpcHRFbGVtZW50
KiB0b1NjcmlwdEVsZW1lbnRJZlBvc3NpYmxlKEVsZW1lbnQqKTsKIAogfQotCi0jZW5kaWYKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRSdW5uZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvZG9tL1NjcmlwdFJ1bm5lci5jcHAKaW5kZXggYTU1OGZhZTYxMTQ3NzRjZjc3NjcxOGRj
MjAzYzBlYWRlMDdhZTQ4Zi4uM2JjMjcyMDVhNmZiZDg0MWEwNTQ3OTQ5NGZmODhiNDFiOGI0YTUy
MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdFJ1bm5lci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdFJ1bm5lci5jcHAKQEAgLTI2LDcgKzI2LDYgQEAKICNp
bmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJTY3JpcHRSdW5uZXIuaCIKIAotI2luY2x1ZGUg
IkNhY2hlZFNjcmlwdC5oIgogI2luY2x1ZGUgIkVsZW1lbnQuaCIKICNpbmNsdWRlICJQZW5kaW5n
U2NyaXB0LmgiCiAjaW5jbHVkZSAiU2NyaXB0RWxlbWVudC5oIgpAQCAtNDksMTAgKzQ4LDkgQEAg
U2NyaXB0UnVubmVyOjp+U2NyaXB0UnVubmVyKCkKICAgICAgICAgbV9kb2N1bWVudC5kZWNyZW1l
bnRMb2FkRXZlbnREZWxheUNvdW50KCk7CiB9CiAKLXZvaWQgU2NyaXB0UnVubmVyOjpxdWV1ZVNj
cmlwdEZvckV4ZWN1dGlvbihTY3JpcHRFbGVtZW50KiBzY3JpcHRFbGVtZW50LCBDYWNoZWRSZXNv
dXJjZUhhbmRsZTxDYWNoZWRTY3JpcHQ+IGNhY2hlZFNjcmlwdCwgRXhlY3V0aW9uVHlwZSBleGVj
dXRpb25UeXBlKQordm9pZCBTY3JpcHRSdW5uZXI6OnF1ZXVlU2NyaXB0Rm9yRXhlY3V0aW9uKFNj
cmlwdEVsZW1lbnQqIHNjcmlwdEVsZW1lbnQsIExvYWRhYmxlU2NyaXB0JiBsb2FkYWJsZVNjcmlw
dCwgRXhlY3V0aW9uVHlwZSBleGVjdXRpb25UeXBlKQogewogICAgIEFTU0VSVChzY3JpcHRFbGVt
ZW50KTsKLSAgICBBU1NFUlQoY2FjaGVkU2NyaXB0LmdldCgpKTsKIAogICAgIEVsZW1lbnQmIGVs
ZW1lbnQgPSBzY3JpcHRFbGVtZW50LT5lbGVtZW50KCk7CiAgICAgQVNTRVJUKGVsZW1lbnQuaW5E
b2N1bWVudCgpKTsKQEAgLTYxLDExICs1OSwxMSBAQCB2b2lkIFNjcmlwdFJ1bm5lcjo6cXVldWVT
Y3JpcHRGb3JFeGVjdXRpb24oU2NyaXB0RWxlbWVudCogc2NyaXB0RWxlbWVudCwgQ2FjaGVkUgog
CiAgICAgc3dpdGNoIChleGVjdXRpb25UeXBlKSB7CiAgICAgY2FzZSBBU1lOQ19FWEVDVVRJT046
Ci0gICAgICAgIG1fcGVuZGluZ0FzeW5jU2NyaXB0cy5hZGQoc2NyaXB0RWxlbWVudCwgUGVuZGlu
Z1NjcmlwdDo6Y3JlYXRlKGVsZW1lbnQsICpjYWNoZWRTY3JpcHQpKTsKKyAgICAgICAgbV9wZW5k
aW5nQXN5bmNTY3JpcHRzLmFkZChzY3JpcHRFbGVtZW50LCBQZW5kaW5nU2NyaXB0OjpjcmVhdGUo
ZWxlbWVudCwgbG9hZGFibGVTY3JpcHQpKTsKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIElO
X09SREVSX0VYRUNVVElPTjoKLSAgICAgICAgbV9zY3JpcHRzVG9FeGVjdXRlSW5PcmRlci5hcHBl
bmQoUGVuZGluZ1NjcmlwdDo6Y3JlYXRlKGVsZW1lbnQsICpjYWNoZWRTY3JpcHQpKTsKKyAgICAg
ICAgbV9zY3JpcHRzVG9FeGVjdXRlSW5PcmRlci5hcHBlbmQoUGVuZGluZ1NjcmlwdDo6Y3JlYXRl
KGVsZW1lbnQsIGxvYWRhYmxlU2NyaXB0KSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIH0KQEAg
LTExNSw5ICsxMTMsOSBAQCB2b2lkIFNjcmlwdFJ1bm5lcjo6dGltZXJGaXJlZCgpCiAgICAgICAg
IC8vIFBhcGVyIG92ZXIgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0
NDA1MAogICAgICAgICBpZiAoIXNjcmlwdCkKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICBhdXRvKiBzY3JpcHRFbGVtZW50ID0gdG9TY3JpcHRFbGVtZW50SWZQb3NzaWJsZSgmc2NyaXB0
LT5lbGVtZW50KCkpOwotICAgICAgICBBU1NFUlQoc2NyaXB0RWxlbWVudCk7Ci0gICAgICAgIHNj
cmlwdEVsZW1lbnQtPmV4ZWN1dGUoc2NyaXB0LT5jYWNoZWRTY3JpcHQoKSk7CisgICAgICAgIEFT
U0VSVCh0b1NjcmlwdEVsZW1lbnRJZlBvc3NpYmxlKCZzY3JpcHQtPmVsZW1lbnQoKSkpOworICAg
ICAgICBBU1NFUlQoc2NyaXB0LT5uZWVkc0xvYWRpbmcoKSk7CisgICAgICAgIHRvU2NyaXB0RWxl
bWVudElmUG9zc2libGUoJnNjcmlwdC0+ZWxlbWVudCgpKS0+ZXhlY3V0ZVF1ZXVlZFNjcmlwdEFu
ZERpc3BhdGNoRXZlbnQoKnNjcmlwdC0+bG9hZGFibGVTY3JpcHQoKSk7CiAgICAgICAgIG1fZG9j
dW1lbnQuZGVjcmVtZW50TG9hZEV2ZW50RGVsYXlDb3VudCgpOwogICAgIH0KIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRSdW5uZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9TY3JpcHRSdW5uZXIuaAppbmRleCBiYTQxOWZhOTA3YWM4ZWQ1YTMzNzM5NDgzOTVlYWVkMTgz
ZDZiYzNjLi5lZWUxYTI2M2E5Mzk5ZGQwMzgwMjZjMDA2NmNhYjM4ZjZiM2QzNTc3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0UnVubmVyLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvZG9tL1NjcmlwdFJ1bm5lci5oCkBAIC0yMywxMCArMjMsOCBAQAogICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CiAgKi8KIAotI2lmbmRlZiBTY3JpcHRSdW5uZXJfaAotI2RlZmluZSBTY3JpcHRSdW5uZXJfaAor
I3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUhhbmRsZS5oIgogI2luY2x1
ZGUgIlRpbWVyLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvTm9u
Y29weWFibGUuaD4KQEAgLTM0LDEwICszMiwxMCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
LWNsYXNzIENhY2hlZFNjcmlwdDsKIGNsYXNzIERvY3VtZW50OwogY2xhc3MgUGVuZGluZ1Njcmlw
dDsKIGNsYXNzIFNjcmlwdEVsZW1lbnQ7CitjbGFzcyBMb2FkYWJsZVNjcmlwdDsKIAogY2xhc3Mg
U2NyaXB0UnVubmVyIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTY3JpcHRSdW5uZXIpOyBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKQEAgLTQ2LDcgKzQ0LDcgQEAgY2xhc3MgU2NyaXB0UnVu
bmVyIHsKICAgICB+U2NyaXB0UnVubmVyKCk7CiAKICAgICBlbnVtIEV4ZWN1dGlvblR5cGUgeyBB
U1lOQ19FWEVDVVRJT04sIElOX09SREVSX0VYRUNVVElPTiB9OwotICAgIHZvaWQgcXVldWVTY3Jp
cHRGb3JFeGVjdXRpb24oU2NyaXB0RWxlbWVudCosIENhY2hlZFJlc291cmNlSGFuZGxlPENhY2hl
ZFNjcmlwdD4sIEV4ZWN1dGlvblR5cGUpOworICAgIHZvaWQgcXVldWVTY3JpcHRGb3JFeGVjdXRp
b24oU2NyaXB0RWxlbWVudCosIExvYWRhYmxlU2NyaXB0JiwgRXhlY3V0aW9uVHlwZSk7CiAgICAg
Ym9vbCBoYXNQZW5kaW5nU2NyaXB0cygpIGNvbnN0IHsgcmV0dXJuICFtX3NjcmlwdHNUb0V4ZWN1
dGVTb29uLmlzRW1wdHkoKSB8fCAhbV9zY3JpcHRzVG9FeGVjdXRlSW5PcmRlci5pc0VtcHR5KCkg
fHwgIW1fcGVuZGluZ0FzeW5jU2NyaXB0cy5pc0VtcHR5KCk7IH0KICAgICB2b2lkIHN1c3BlbmQo
KTsKICAgICB2b2lkIHJlc3VtZSgpOwpAQCAtNjMsNSArNjEsMyBAQCBjbGFzcyBTY3JpcHRSdW5u
ZXIgewogfTsKIAogfQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
cGFyc2VyL0hUTUxTY3JpcHRSdW5uZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIv
SFRNTFNjcmlwdFJ1bm5lci5jcHAKaW5kZXggZWI3Nzg4NDE3MDQ4MTkyY2Y1ZWIwNTBjNmM1Mjc4
N2Y2YTA0OTgwZS4uOWE2YmJhZDkzMzAyNDFiMWUxYjdkYzEyNjI4MjI3YzVlNDAzODRjMCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFNjcmlwdFJ1bm5lci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFNjcmlwdFJ1bm5lci5jcHAKQEAg
LTI2LDggKzI2LDYgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJIVE1MU2NyaXB0
UnVubmVyLmgiCiAKLSNpbmNsdWRlICJDYWNoZWRTY3JpcHQuaCIKLSNpbmNsdWRlICJDYWNoZWRS
ZXNvdXJjZUxvYWRlci5oIgogI2luY2x1ZGUgIkVsZW1lbnQuaCIKICNpbmNsdWRlICJFdmVudC5o
IgogI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKQEAgLTg5LDE3ICs4Nyw2IEBAIGlubGluZSBSZWY8
RXZlbnQ+IGNyZWF0ZVNjcmlwdExvYWRFdmVudCgpCiAgICAgcmV0dXJuIEV2ZW50OjpjcmVhdGUo
ZXZlbnROYW1lcygpLmxvYWRFdmVudCwgZmFsc2UsIGZhbHNlKTsKIH0KIAotU2NyaXB0U291cmNl
Q29kZSBIVE1MU2NyaXB0UnVubmVyOjpzb3VyY2VGcm9tUGVuZGluZ1NjcmlwdChjb25zdCBQZW5k
aW5nU2NyaXB0JiBzY3JpcHQsIGJvb2wmIGVycm9yT2NjdXJyZWQpIGNvbnN0Ci17Ci0gICAgaWYg
KHNjcmlwdC5jYWNoZWRTY3JpcHQoKSkgewotICAgICAgICBlcnJvck9jY3VycmVkID0gc2NyaXB0
LmNhY2hlZFNjcmlwdCgpLT5lcnJvck9jY3VycmVkKCk7Ci0gICAgICAgIEFTU0VSVChzY3JpcHQu
Y2FjaGVkU2NyaXB0KCktPmlzTG9hZGVkKCkpOwotICAgICAgICByZXR1cm4gU2NyaXB0U291cmNl
Q29kZShzY3JpcHQuY2FjaGVkU2NyaXB0KCkpOwotICAgIH0KLSAgICBlcnJvck9jY3VycmVkID0g
ZmFsc2U7Ci0gICAgcmV0dXJuIFNjcmlwdFNvdXJjZUNvZGUoc2NyaXB0LmVsZW1lbnQoKS50ZXh0
Q29udGVudCgpLCBkb2N1bWVudFVSTEZvclNjcmlwdEV4ZWN1dGlvbihtX2RvY3VtZW50KSwgc2Ny
aXB0LnN0YXJ0aW5nUG9zaXRpb24oKSk7Ci19Ci0KIGJvb2wgSFRNTFNjcmlwdFJ1bm5lcjo6aXNQ
ZW5kaW5nU2NyaXB0UmVhZHkoY29uc3QgUGVuZGluZ1NjcmlwdCYgc2NyaXB0KQogewogICAgIGlm
ICghbV9kb2N1bWVudCkKQEAgLTEyNSw5ICsxMTIsNiBAQCB2b2lkIEhUTUxTY3JpcHRSdW5uZXI6
OmV4ZWN1dGVQYXJzaW5nQmxvY2tpbmdTY3JpcHQoKQogCiB2b2lkIEhUTUxTY3JpcHRSdW5uZXI6
OmV4ZWN1dGVQZW5kaW5nU2NyaXB0QW5kRGlzcGF0Y2hFdmVudChSZWZQdHI8UGVuZGluZ1Njcmlw
dD4gcGVuZGluZ1NjcmlwdCkKIHsKLSAgICBib29sIGVycm9yT2NjdXJyZWQgPSBmYWxzZTsKLSAg
ICBTY3JpcHRTb3VyY2VDb2RlIHNvdXJjZUNvZGUgPSBzb3VyY2VGcm9tUGVuZGluZ1NjcmlwdCgq
cGVuZGluZ1NjcmlwdCwgZXJyb3JPY2N1cnJlZCk7Ci0KICAgICAvLyBTdG9wIHdhdGNoaW5nIGxv
YWRzIGJlZm9yZSBleGVjdXRlU2NyaXB0IHRvIHByZXZlbnQgcmVjdXJzaW9uIGlmIHRoZSBzY3Jp
cHQgcmVsb2FkcyBpdHNlbGYuCiAgICAgaWYgKHBlbmRpbmdTY3JpcHQtPndhdGNoaW5nRm9yTG9h
ZCgpKQogICAgICAgICBzdG9wV2F0Y2hpbmdGb3JMb2FkKCpwZW5kaW5nU2NyaXB0KTsKQEAgLTEz
NywxNCArMTIxLDcgQEAgdm9pZCBIVE1MU2NyaXB0UnVubmVyOjpleGVjdXRlUGVuZGluZ1Njcmlw
dEFuZERpc3BhdGNoRXZlbnQoUmVmUHRyPFBlbmRpbmdTY3JpcHQKIAogICAgIGlmIChhdXRvKiBz
Y3JpcHRFbGVtZW50ID0gdG9TY3JpcHRFbGVtZW50SWZQb3NzaWJsZSgmcGVuZGluZ1NjcmlwdC0+
ZWxlbWVudCgpKSkgewogICAgICAgICBOZXN0aW5nTGV2ZWxJbmNyZW1lbnRlciBuZXN0aW5nTGV2
ZWxJbmNyZW1lbnRlcihtX3NjcmlwdE5lc3RpbmdMZXZlbCk7Ci0gICAgICAgIElnbm9yZURlc3Ry
dWN0aXZlV3JpdGVDb3VudEluY3JlbWVudGVyIGlnbm9yZURlc3RydWN0aXZlV3JpdGVDb3VudElu
Y3JlbWVudGVyKG1fZG9jdW1lbnQpOwotICAgICAgICBpZiAoZXJyb3JPY2N1cnJlZCkKLSAgICAg
ICAgICAgIHNjcmlwdEVsZW1lbnQtPmRpc3BhdGNoRXJyb3JFdmVudCgpOwotICAgICAgICBlbHNl
IHsKLSAgICAgICAgICAgIEFTU0VSVChpc0V4ZWN1dGluZ1NjcmlwdCgpKTsKLSAgICAgICAgICAg
IHNjcmlwdEVsZW1lbnQtPmV4ZWN1dGVTY3JpcHQoc291cmNlQ29kZSk7Ci0gICAgICAgICAgICBw
ZW5kaW5nU2NyaXB0LT5lbGVtZW50KCkuZGlzcGF0Y2hFdmVudChjcmVhdGVTY3JpcHRMb2FkRXZl
bnQoKSk7Ci0gICAgICAgIH0KKyAgICAgICAgc2NyaXB0RWxlbWVudC0+ZXhlY3V0ZVBlbmRpbmdT
Y3JpcHRBbmREaXNwYXRjaEV2ZW50KCpwZW5kaW5nU2NyaXB0KTsKICAgICB9CiAgICAgQVNTRVJU
KCFpc0V4ZWN1dGluZ1NjcmlwdCgpKTsKIH0KQEAgLTIzNiw4ICsyMTMsOCBAQCBzdGF0aWMgUmVm
PFBlbmRpbmdTY3JpcHQ+IHJlcXVlc3RQZW5kaW5nU2NyaXB0KEVsZW1lbnQqIHNjcmlwdCkKIHsK
ICAgICBhdXRvJiBzY3JpcHRFbGVtZW50ID0gKnRvU2NyaXB0RWxlbWVudElmUG9zc2libGUoc2Ny
aXB0KTsKICAgICBBU1NFUlQoc2NyaXB0RWxlbWVudC53aWxsQmVQYXJzZXJFeGVjdXRlZCgpKTsK
LSAgICBBU1NFUlQoc2NyaXB0RWxlbWVudC5jYWNoZWRTY3JpcHQoKSk7Ci0gICAgcmV0dXJuIFBl
bmRpbmdTY3JpcHQ6OmNyZWF0ZSgqc2NyaXB0LCAqc2NyaXB0RWxlbWVudC5jYWNoZWRTY3JpcHQo
KSk7CisgICAgQVNTRVJUKHNjcmlwdEVsZW1lbnQubG9hZGFibGVTY3JpcHQoKSk7CisgICAgcmV0
dXJuIFBlbmRpbmdTY3JpcHQ6OmNyZWF0ZSgqc2NyaXB0LCAqc2NyaXB0RWxlbWVudC5sb2FkYWJs
ZVNjcmlwdCgpKTsKIH0KIAogdm9pZCBIVE1MU2NyaXB0UnVubmVyOjpyZXF1ZXN0UGFyc2luZ0Js
b2NraW5nU2NyaXB0KEVsZW1lbnQqIGVsZW1lbnQpCkBAIC0yNDYsNyArMjIzLDcgQEAgdm9pZCBI
VE1MU2NyaXB0UnVubmVyOjpyZXF1ZXN0UGFyc2luZ0Jsb2NraW5nU2NyaXB0KEVsZW1lbnQqIGVs
ZW1lbnQpCiAgICAgbV9wYXJzZXJCbG9ja2luZ1NjcmlwdCA9IHJlcXVlc3RQZW5kaW5nU2NyaXB0
KGVsZW1lbnQpOwogICAgIEFTU0VSVChtX3BhcnNlckJsb2NraW5nU2NyaXB0LT5uZWVkc0xvYWRp
bmcoKSk7CiAKLSAgICAvLyBXZSBvbmx5IGNhcmUgYWJvdXQgYSBsb2FkIGNhbGxiYWNrIGlmIGNh
Y2hlZFNjcmlwdCBpcyBub3QgYWxyZWFkeQorICAgIC8vIFdlIG9ubHkgY2FyZSBhYm91dCBhIGxv
YWQgY2FsbGJhY2sgaWYgTG9hZGFibGVTY3JpcHQgaXMgbm90IGFscmVhZHkKICAgICAvLyBpbiB0
aGUgY2FjaGUuIENhbGxlcnMgd2lsbCBhdHRlbXB0IHRvIHJ1biB0aGUgbV9wYXJzZXJCbG9ja2lu
Z1NjcmlwdAogICAgIC8vIGlmIHBvc3NpYmxlIGJlZm9yZSByZXR1cm5pbmcgY29udHJvbCB0byB0
aGUgcGFyc2VyLgogICAgIGlmICghbV9wYXJzZXJCbG9ja2luZ1NjcmlwdC0+aXNMb2FkZWQoKSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxTY3JpcHRSdW5uZXIu
aCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxTY3JpcHRSdW5uZXIuaAppbmRleCBl
NmI1ZWQ1MjY4NTkyODA1MTExMzI3MDdjZTAxMjk1NzZmNzFjNDk0Li45MWQ4ODZjMzhhNmVkMWZl
ZTE5YWM5ZmI1NzhiZDg1OTMzZTY1ZDRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L3BhcnNlci9IVE1MU2NyaXB0UnVubmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJz
ZXIvSFRNTFNjcmlwdFJ1bm5lci5oCkBAIC0zMiw4ICszMiw2IEBACiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotY2xhc3MgQ2FjaGVkUmVzb3VyY2U7Ci1jbGFzcyBDYWNoZWRTY3JpcHQ7CiBjbGFz
cyBEb2N1bWVudDsKIGNsYXNzIEVsZW1lbnQ7CiBjbGFzcyBGcmFtZTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvWE1MRG9jdW1lbnRQYXJzZXJMaWJ4bWwyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvWE1MRG9jdW1lbnRQYXJzZXJMaWJ4bWwyLmNwcAppbmRl
eCBhOTlmOWRlNzI3M2E1NjJlMTQ2ZDkzNTMyOTJhMDUwMGI0NDQ4ZDdkLi44ZGQ3MTllY2RlNTM4
NWE2ZjdkNzRhNmNmZDU4ZDQyZGEwYzc0MmEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS94
bWwvcGFyc2VyL1hNTERvY3VtZW50UGFyc2VyTGlieG1sMi5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUveG1sL3BhcnNlci9YTUxEb2N1bWVudFBhcnNlckxpYnhtbDIuY3BwCkBAIC00NSw2ICs0NSw3
IEBACiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiSFRNTFN0eWxlRWxlbWVudC5o
IgogI2luY2x1ZGUgIkhUTUxUZW1wbGF0ZUVsZW1lbnQuaCIKKyNpbmNsdWRlICJMb2FkYWJsZUNs
YXNzaWNTY3JpcHQuaCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUHJvY2Vzc2luZ0lu
c3RydWN0aW9uLmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VFcnJvci5oIgpAQCAtOTIwLDggKzkyMSwx
MCBAQCB2b2lkIFhNTERvY3VtZW50UGFyc2VyOjplbmRFbGVtZW50TnMoKQogCiAgICAgICAgIGlm
IChzY3JpcHRFbGVtZW50LT5yZWFkeVRvQmVQYXJzZXJFeGVjdXRlZCgpKQogICAgICAgICAgICAg
c2NyaXB0RWxlbWVudC0+ZXhlY3V0ZVNjcmlwdChTY3JpcHRTb3VyY2VDb2RlKHNjcmlwdEVsZW1l
bnQtPnNjcmlwdENvbnRlbnQoKSwgZG9jdW1lbnQoKS0+dXJsKCksIG1fc2NyaXB0U3RhcnRQb3Np
dGlvbikpOwotICAgICAgICBlbHNlIGlmIChzY3JpcHRFbGVtZW50LT53aWxsQmVQYXJzZXJFeGVj
dXRlZCgpKSB7Ci0gICAgICAgICAgICBtX3BlbmRpbmdTY3JpcHQgPSBzY3JpcHRFbGVtZW50LT5j
YWNoZWRTY3JpcHQoKTsKKyAgICAgICAgZWxzZSBpZiAoc2NyaXB0RWxlbWVudC0+d2lsbEJlUGFy
c2VyRXhlY3V0ZWQoKSAmJiBzY3JpcHRFbGVtZW50LT5sb2FkYWJsZVNjcmlwdCgpICYmIGlzPExv
YWRhYmxlQ2xhc3NpY1NjcmlwdD4oKnNjcmlwdEVsZW1lbnQtPmxvYWRhYmxlU2NyaXB0KCkpKSB7
CisgICAgICAgICAgICAvLyBGSVhNRTogQWxsb3cgIm1vZHVsZSIgc2NyaXB0cyBmb3IgWE1MIGRv
Y3VtZW50cy4KKyAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNjE2NTEKKyAgICAgICAgICAgIG1fcGVuZGluZ1NjcmlwdCA9ICZkb3duY2FzdDxM
b2FkYWJsZUNsYXNzaWNTY3JpcHQ+KCpzY3JpcHRFbGVtZW50LT5sb2FkYWJsZVNjcmlwdCgpKS5j
YWNoZWRTY3JpcHQoKTsKICAgICAgICAgICAgIG1fc2NyaXB0RWxlbWVudCA9ICZlbGVtZW50Owog
ICAgICAgICAgICAgbV9wZW5kaW5nU2NyaXB0LT5hZGRDbGllbnQodGhpcyk7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>288196</attachid>
            <date>2016-09-07 15:49:56 -0700</date>
            <delta_ts>2016-09-07 16:46:45 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-161674-20160907154731.patch</filename>
            <type>text/plain</type>
            <size>59672</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA1NTQ5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzc3ZWZlMzQxMGIyNmIz
ZjNjMjMwNGU4ODdkZjljYThhZjljYjQ0OC4uMzAwMzJiZDI5Y2QyMjA2MDJhMGIxNDU5YjlkMTg3
NDAwZTg4MTlkYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDkzIEBACisyMDE2LTA5LTA3ICBZdXN1
a2UgU3V6dWtpICA8dXRhdGFuZS50ZWFAZ21haWwuY29tPgorCisgICAgICAgIEludHJvZHVjZSBh
YnN0cmFjdCBjbGFzcyBMb2FkYWJsZVNjcmlwdCBmb3IgY2xhc3NpYyBzY3JpcHQgYW5kIG1vZHVs
ZSBncmFwaAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTYxNjc0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
VG8gcHJlcGFyZSBmb3IgU2NyaXB0TW9kdWxlR3JhcGgsIHdlIGludHJvZHVjZSB0aGUgYWJzdHJh
Y3QgY2xhc3Mgb3ZlciB0aGUgY2xhc3NpYyBzY3JpcHQKKyAgICAgICAgYW5kIHRoZSBtb2R1bGUg
c2NyaXB0LCBMb2FkYWJsZVNjcmlwdC4KKworICAgICAgICBObyBiZWhhdmlvciBjaGFuZ2UuCisK
KyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2o6CisgICAgICAgICogZG9tL0xvYWRhYmxlQ2xhc3NpY1NjcmlwdC5jcHA6
IEFkZGVkLiBMb2FkYWJsZUNsYXNzaWNTY3JpcHQgaXMgdGhlIGRlcml2ZWQgY2xhc3MgZnJvbSB0
aGUKKyAgICAgICAgTG9hZGFibGVTY3JpcHQuIEluIHRoZSBtb2R1bGUgcGF0Y2gsIHdlIHdpbGwg
aW50cm9kdWNlIExvYWRhYmxlU2NyaXB0TW9kdWxlR3JhcGggd2hpY2ggaXMgYWxzbworICAgICAg
ICB0aGUgZGVyaXZlZCBjbGFzcyBmcm9tIHRoZSBMb2FkYWJsZVNjcmlwdC4gSXQgaXMgdXNlZCBm
b3IgdGhlIGV4dGVybmFsIGNsYXNzaWMgc2NyaXB0LgorICAgICAgICAoV2ViQ29yZTo6TG9hZGFi
bGVDbGFzc2ljU2NyaXB0OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6TG9hZGFibGVDbGFz
c2ljU2NyaXB0OjpMb2FkYWJsZUNsYXNzaWNTY3JpcHQpOgorICAgICAgICAoV2ViQ29yZTo6TG9h
ZGFibGVDbGFzc2ljU2NyaXB0Ojp+TG9hZGFibGVDbGFzc2ljU2NyaXB0KToKKyAgICAgICAgKFdl
YkNvcmU6OkxvYWRhYmxlQ2xhc3NpY1NjcmlwdDo6aXNMb2FkZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6TG9hZGFibGVDbGFzc2ljU2NyaXB0OjplcnJvck9jY3VycmVkKTogQmV5b25kIHRoZSBib29s
ZWFuIHZhbHVlLCB0aGlzIGNhbiByZXR1cm4gdGhlIGRldGFpbAorICAgICAgICBvZiB0aGUgZXJy
b3IuIFRoaXMgZGV0YWlsZWQgaW5mb3JtYXRpb24gd2lsbCBiZSB1c2VkIHRvIHJlcG9ydCBpdCB0
byB0aGUgaW5zcGVjdG9yIGluIHRoZSBTY3JpcHRFbGVtZW50LgorICAgICAgICAoV2ViQ29yZTo6
TG9hZGFibGVDbGFzc2ljU2NyaXB0Ojp3YXNDYW5jZWxlZCk6CisgICAgICAgIChXZWJDb3JlOjpM
b2FkYWJsZUNsYXNzaWNTY3JpcHQ6Om5vdGlmeUZpbmlzaGVkKTogTm9zbmlmZiBhbmQgY3Jvc3Mt
b3JpZ2luIGxvYWRpbmcgZXJyb3JzIGFyZSBoYW5kbGVkIGhlcmUsCisgICAgICAgIGluc3RlYWQg
b2YgZXhwb3NpbmcgQ2FjaGVkU2NyaXB0Ki4KKyAgICAgICAgKFdlYkNvcmU6OkxvYWRhYmxlQ2xh
c3NpY1NjcmlwdDo6ZXhlY3V0ZSk6IEV4ZWN1dGUgdGhlIGNhY2hlZCBzY3JpcHQgYnkgdXNpbmcg
dGhlIGdpdmVuIFNjcmlwdEVsZW1lbnQuCisgICAgICAgICogZG9tL0xvYWRhYmxlQ2xhc3NpY1Nj
cmlwdC5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9kb20vUGVuZGluZ1NjcmlwdC5oLgor
ICAgICAgICAoaXNUeXBlKToKKyAgICAgICAgKiBkb20vTG9hZGFibGVTY3JpcHQuY3BwOiBDb3Bp
ZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0UnVubmVyLmguIE5ldyB3cmFwcGVyIGZv
ciBDYWNoZWRTY3JpcHQKKyAgICAgICAgYW5kIFNjcmlwdE1vZHVsZUdyYXBoLiBXZSBpbnRyb2R1
Y2UgYSBuZXcgd3JhcHBlciB0byBoYW5kbGUgdGhlIGFib3ZlIDIgdGhpbmdzIGluIHRoZSBzYW1l
IHdheS4KKyAgICAgICAgV2UgdGFrZSB0aGUgd2F5IHRvIGludHJvZHVjZSBhIG5ldyB3cmFwcGVy
IGluc3RlYWQgb2YgaW50cm9kdWNpbmcgYSBuZXcgaW50ZXJmYWNlIHRoYXQgaXMgaW5oZXJpdGVk
IGJ5CisgICAgICAgIENhY2hlZFNjcmlwdCBhbmQgU2NyaXB0TW9kdWxlR3JhcGguIFRoaXMgaXMg
YmVjYXVzZSBTY3JpcHRNb2R1bGVHcmFwaCBpcyByZWYtY291bnRlZCB3aGlsZSBDYWNoZWRTY3Jp
cHQKKyAgICAgICAgaXMgbWFuYWdlZCBieSBDYWNoZWRSZXNvdXJjZUhhbmRsZS4gV2hpbGUgdGhp
cyBwYXRjaCBkb2VzIG5vdCBjb250YWluIFNjcmlwdE1vZHVsZUdyYXBoIHBhcnQsIHRoaXMKKyAg
ICAgICAgc2hvdWxkIGJlIGFkZGVkIGluIHRoZSBtb2R1bGUgcGF0Y2ggYW5kIGF0IHRoYXQgdGlt
ZSwgdGhpcyBzaG91bGQgYmUgbWFuYWdlZCBieSB0aGlzIExvYWRhYmxlU2NyaXB0J3MKKyAgICAg
ICAgc3ViY2xhc3MuIEFuZCB3ZSBpbnRyb2R1Y2UgVHlwZUNhc3RzIHRyYWl0cyBmb3IgTG9hZGFi
bGVTY3JpcHQgdG8gYWxsb3cgYGlzPD5gIGFuZCBgZG93bmNhc3Q8PmAuCisgICAgICAgIChXZWJD
b3JlOjpMb2FkYWJsZVNjcmlwdDo6YWRkQ2xpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkxvYWRh
YmxlU2NyaXB0OjpyZW1vdmVDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6TG9hZGFibGVTY3Jp
cHQ6Om5vdGlmeUNsaWVudEZpbmlzaGVkKTogUHJvcGFnYXRlIHRoZSBub3RpZmljYXRpb24uCisg
ICAgICAgICogZG9tL0xvYWRhYmxlU2NyaXB0Lmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3Jl
L2RvbS9TY3JpcHRSdW5uZXIuaC4KKyAgICAgICAgKFdlYkNvcmU6OkxvYWRhYmxlU2NyaXB0Ojp+
TG9hZGFibGVTY3JpcHQpOgorICAgICAgICAoV2ViQ29yZTo6TG9hZGFibGVTY3JpcHQ6OmlzQ2xh
c3NpY1NjcmlwdCk6IFVzZWQgaW4gVHlwZUNhc3RzIChgaXM8PmAgZXRjLikuCisgICAgICAgIChX
ZWJDb3JlOjpMb2FkYWJsZVNjcmlwdDo6aXNNb2R1bGVHcmFwaCk6IERpdHRvLgorICAgICAgICAq
IGRvbS9Mb2FkYWJsZVNjcmlwdENsaWVudC5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9k
b20vU2NyaXB0UnVubmVyLmguCisgICAgICAgIChXZWJDb3JlOjpMb2FkYWJsZVNjcmlwdENsaWVu
dDo6fkxvYWRhYmxlU2NyaXB0Q2xpZW50KToKKyAgICAgICAgKiBkb20vUGVuZGluZ1NjcmlwdC5j
cHA6IFVzZSBMb2FkYWJsZVNjcmlwdCBpbnN0ZWFkIG9mIENhY2hlZFNjcmlwdC4KKyAgICAgICAg
KFdlYkNvcmU6OlBlbmRpbmdTY3JpcHQ6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpQZW5k
aW5nU2NyaXB0OjpQZW5kaW5nU2NyaXB0KToKKyAgICAgICAgKFdlYkNvcmU6OlBlbmRpbmdTY3Jp
cHQ6On5QZW5kaW5nU2NyaXB0KToKKyAgICAgICAgKFdlYkNvcmU6OlBlbmRpbmdTY3JpcHQ6Omxv
YWRhYmxlU2NyaXB0KToKKyAgICAgICAgKFdlYkNvcmU6OlBlbmRpbmdTY3JpcHQ6Om5vdGlmeUZp
bmlzaGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlBlbmRpbmdTY3JpcHQ6OmlzTG9hZGVkKToKKyAg
ICAgICAgKFdlYkNvcmU6OlBlbmRpbmdTY3JpcHQ6OmVycm9yT2NjdXJyZWQpOgorICAgICAgICAo
V2ViQ29yZTo6UGVuZGluZ1NjcmlwdDo6Y2FjaGVkU2NyaXB0KTogRGVsZXRlZC4KKyAgICAgICAg
KiBkb20vUGVuZGluZ1NjcmlwdC5oOgorICAgICAgICAqIGRvbS9TY3JpcHRFbGVtZW50LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdEVsZW1lbnQ6OlNjcmlwdEVsZW1lbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6U2NyaXB0RWxlbWVudDo6aGFuZGxlU291cmNlQXR0cmlidXRlKTogQ2hhbmdl
IHNvdXJjZVVybCB0byBzb3VyY2VVUkwgdG8gYmUgY29uc2lzdGVudC4KKyAgICAgICAgKFdlYkNv
cmU6OlNjcmlwdEVsZW1lbnQ6OnByZXBhcmVTY3JpcHQpOgorICAgICAgICAoV2ViQ29yZTo6U2Ny
aXB0RWxlbWVudDo6cmVxdWVzdENhY2hlZFNjcmlwdCk6IEV4dHJhY3QgdGhlIGNvZGUgcmVxdWVz
dGluZyB0aGUKKyAgICAgICAgQ2FjaGVkU2NyaXB0IGZyb20gcmVxdWVzdFNjcmlwdC4gVGhpcyB3
aWxsIGFsc28gYmUgdXNlZCBieSB0aGUgbW9kdWxlIGZldGNoZXIuCisgICAgICAgIChXZWJDb3Jl
OjpTY3JpcHRFbGVtZW50OjpyZXF1ZXN0Q2xhc3NpY1NjcmlwdCk6IHJlcXVlc3RTY3JpcHQgaXMg
cmVuYW1lZCB0byByZXF1ZXN0Q2xhc3NpY1NjcmlwdC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcmlw
dEVsZW1lbnQ6OmV4ZWN1dGVTY3JpcHQpOiBOb3cgaW5zcGVjdG9yIGVycm9yIHJlcG9ydGluZyBp
cyBhbHNvIGRvbmUgaW4gdGhpcyBmdW5jdGlvbi4KKyAgICAgICAgV2hlbiBhbiBlcnJvciBvY2N1
cnMsIExvYWRhYmxlU2NyaXB0OjplcnJvck9jY3VycmVkKCkgcmV0dXJucyB0aGUgZXJyb3Igd2hp
Y2ggbWF5IGluY2x1ZGUgdGhlIGluZm9ybWF0aW9uCisgICAgICAgIHRvIHJlcG9ydCB0aGUgZXJy
b3IgdG8gdGhlIGluc3BlY3Rvci4gbm9zbmlmZiBhbmQgY3Jvc3Mtb3JpZ2luIGxvYWRpbmcgZXJy
b3JzIGFyZSBub3cgZGV0ZWN0ZWQgYnkgdGhlCisgICAgICAgIExvYWRhYmxlQ2xhc3NpY1Njcmlw
dCBhbmQgcmVwb3J0ZWQgdGhyb3VnaCB0aGlzIGVycm9yT2NjdXJyZWQoKS4KKyAgICAgICAgKFdl
YkNvcmU6OlNjcmlwdEVsZW1lbnQ6OnN0b3BMb2FkUmVxdWVzdCk6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JpcHRFbGVtZW50OjpleGVjdXRlU2NyaXB0QW5kRGlzcGF0Y2hFdmVudCk6CisgICAgICAg
IChXZWJDb3JlOjpTY3JpcHRFbGVtZW50OjpleGVjdXRlUXVldWVkU2NyaXB0QW5kRGlzcGF0Y2hF
dmVudCk6IE1vdmUgdGhlIGNvZGUgZnJvbSBTY3JpcHRSdW5uZXIuCisgICAgICAgIChXZWJDb3Jl
OjpTY3JpcHRFbGVtZW50OjpleGVjdXRlUGVuZGluZ1NjcmlwdEFuZERpc3BhdGNoRXZlbnQpOiBN
b3ZlIHRoZSBjb2RlIGZyb20gSFRNTFNjcmlwdFJ1bm5lci4KKyAgICAgICAgKFdlYkNvcmU6OlNj
cmlwdEVsZW1lbnQ6Om5vdGlmeUZpbmlzaGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdEVs
ZW1lbnQ6OnJlcXVlc3RTY3JpcHQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0
RWxlbWVudDo6ZXhlY3V0ZSk6IERlbGV0ZWQuCisgICAgICAgICogZG9tL1NjcmlwdEVsZW1lbnQu
aDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdEVsZW1lbnQ6OmxvYWRhYmxlU2NyaXB0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcmlwdEVsZW1lbnQ6OmNhY2hlZFNjcmlwdCk6IERlbGV0ZWQuCisg
ICAgICAgICogZG9tL1NjcmlwdFJ1bm5lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRS
dW5uZXI6OnF1ZXVlU2NyaXB0Rm9yRXhlY3V0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlw
dFJ1bm5lcjo6dGltZXJGaXJlZCk6IFVzZSBTY3JpcHRFbGVtZW50OjpleGVjdXRlUXVldWVkU2Ny
aXB0QW5kRGlzcGF0Y2hFdmVudC4KKyAgICAgICAgKiBkb20vU2NyaXB0UnVubmVyLmg6CisgICAg
ICAgICogaHRtbC9wYXJzZXIvSFRNTFNjcmlwdFJ1bm5lci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MU2NyaXB0UnVubmVyOjpleGVjdXRlUGVuZGluZ1NjcmlwdEFuZERpc3BhdGNoRXZlbnQp
OgorICAgICAgICAoV2ViQ29yZTo6cmVxdWVzdFBlbmRpbmdTY3JpcHQpOgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTFNjcmlwdFJ1bm5lcjo6cmVxdWVzdFBhcnNpbmdCbG9ja2luZ1NjcmlwdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MU2NyaXB0UnVubmVyOjpzb3VyY2VGcm9tUGVuZGluZ1Njcmlw
dCk6IERlbGV0ZWQuCisgICAgICAgICogaHRtbC9wYXJzZXIvSFRNTFNjcmlwdFJ1bm5lci5oOiBV
c2UgU2NyaXB0RWxlbWVudDo6ZXhlY3V0ZVBlbmRpbmdTY3JpcHRBbmREaXNwYXRjaEV2ZW50Lgor
ICAgICAgICAqIHhtbC9wYXJzZXIvWE1MRG9jdW1lbnRQYXJzZXJMaWJ4bWwyLmNwcDogQ3VycmVu
dGx5LCB3ZSBkbyBub3RoaW5nIGFib3V0IFhNTERvY3VtZW50IGluIHRoaXMgcGF0Y2guCisgICAg
ICAgIFdlIHNob3VsZCBzdXBwb3J0IHRoZSBtb2R1bGUgc2NyaXB0LCBidXQgYmVmb3JlIHRoYXQs
IHdlIHNob3VsZCByZWZhY3RvciB0aGlzIHBlbmRpbmcgc2NyaXB0IGhhbmRsaW5nLgorICAgICAg
ICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6OmVuZEVsZW1lbnROcyk6CisKIDIwMTYtMDkt
MDcgIFlvdWVubiBGYWJsZXQgIDx5b3Vlbm5AYXBwbGUuY29tPgogCiAgICAgICAgIFtTdHJlYW1z
IEFQSV0gU2VwYXJhdGUgY29tcGlsZSBmbGFnIGZvciBSZWFkYWJsZVN0cmVhbSBhbmQgV3JpdGFi
bGVTdHJlYW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291
cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXggNzYxNGZjNmJiMWRiODRlNjFkOTg1ZjBk
MDI3YmU2OTU5OWQwNjYyZS4uNmQxZjhjYjg5ZDE2YzI1Njg1MzZjYjc5ZWNiNTJjYjcyZjcwNjk1
MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNl
L1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKQEAgLTE0MzYsNiArMTQzNiw4IEBAIHNldChXZWJDb3Jl
X1NPVVJDRVMKICAgICBkb20vSW5saW5lU3R5bGVTaGVldE93bmVyLmNwcAogICAgIGRvbS9LZXli
b2FyZEV2ZW50LmNwcAogICAgIGRvbS9MaXZlTm9kZUxpc3QuY3BwCisgICAgZG9tL0xvYWRhYmxl
Q2xhc3NpY1NjcmlwdC5jcHAKKyAgICBkb20vTG9hZGFibGVTY3JpcHQuY3BwCiAgICAgZG9tL01l
c3NhZ2VDaGFubmVsLmNwcAogICAgIGRvbS9NZXNzYWdlRXZlbnQuY3BwCiAgICAgZG9tL01lc3Nh
Z2VQb3J0LmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCmluZGV4IDYyZTkyMTU0ZGY3ZGU0NDIxZmYxNGQ5YzlkZDE2ODk5YWJmZmJlNDgu
LjVkZGYwMjBkYzlhMjI1M2RhODE3YTM2ZjFiODI0M2FkNTg1NjY0NDcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTYwOTgsNiAr
NjA5OCwxMSBAQAogCQlFMUZGOEY2RDE4MERCNUJFMDAxMzI2NzQgLyogQ3J5cHRvQWxnb3JpdGht
UmVnaXN0cnkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEUxRkY4RjZCMTgwREI1QkUwMDEzMjY3NCAvKiBDcnlwdG9BbGdvcml0aG1SZWdpc3RyeS5oICov
OyB9OwogCQlFMzg4Mzg5ODFCQUQxNDVGMDBENjJFRTMgLyogU2NyaXB0TW9kdWxlTG9hZGVyLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUzODgzODk0
MUJBRDE0NUYwMEQ2MkVFMyAvKiBTY3JpcHRNb2R1bGVMb2FkZXIuY3BwICovOyB9OwogCQlFMzg4
Mzg5OTFCQUQxNDVGMDBENjJFRTMgLyogU2NyaXB0TW9kdWxlTG9hZGVyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMzg4Mzg5NTFCQUQxNDVGMDBENjJF
RTMgLyogU2NyaXB0TW9kdWxlTG9hZGVyLmggKi87IH07CisJCUUzQjJGMEVCMUQ3RjRDOUQwMEIw
QzlEMSAvKiBMb2FkYWJsZUNsYXNzaWNTY3JpcHQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTNCMkYwRTMxRDdGMzVFQzAwQjBDOUQxIC8qIExvYWRh
YmxlQ2xhc3NpY1NjcmlwdC5jcHAgKi87IH07CisJCUUzQjJGMEVDMUQ3RjRDQTEwMEIwQzlEMSAv
KiBMb2FkYWJsZVNjcmlwdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBFM0IyRjBFOTFEN0YzRDNDMDBCMEM5RDEgLyogTG9hZGFibGVTY3JpcHQuY3Bw
ICovOyB9OworCQlFM0IyRjBFRDFEN0Y0Q0EzMDBCMEM5RDEgLyogTG9hZGFibGVTY3JpcHQuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUzQjJGMEU3MUQ3
RjM1RUMwMEIwQzlEMSAvKiBMb2FkYWJsZVNjcmlwdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUUzQjJGMEVFMUQ3RjRDQTkwMEIwQzlEMSAvKiBM
b2FkYWJsZVNjcmlwdENsaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRTNCMkYwRTgxRDdGMzVFQzAwQjBDOUQxIC8qIExvYWRhYmxlU2NyaXB0Q2xp
ZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJ
RTNCMkYwRjAxRDdGNENCNTAwQjBDOUQxIC8qIExvYWRhYmxlQ2xhc3NpY1NjcmlwdC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTNCMkYwRTQxRDdGMzVF
QzAwQjBDOUQxIC8qIExvYWRhYmxlQ2xhc3NpY1NjcmlwdC5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUUzRkEzODY0MUQ3MTgxMkQwMEFBNTk1MCAv
KiBQZW5kaW5nU2NyaXB0Q2xpZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBFM0ZBMzg2MTFENzE2RTc2MDBBQTU5NTAgLyogUGVuZGluZ1NjcmlwdENs
aWVudC5oICovOyB9OwogCQlFNDAxQzI3NTE3Q0U1M0VDMDBDNDFBMzUgLyogRWxlbWVudEl0ZXJh
dG9yQXNzZXJ0aW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gRTQwMUMyNzQxN0NFNTNFQzAwQzQxQTM1IC8qIEVsZW1lbnRJdGVyYXRvckFzc2VydGlv
bnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlF
NDAxRTBBNDFDM0MwQjgzMDBGMzREMTAgLyogU3R5bGVDaGFuZ2UuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0MDFFMEEzMUMzQzBCODMwMEYzNEQxMCAv
KiBTdHlsZUNoYW5nZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CkBAIC0xMzY3Myw2ICsxMzY3OCwxMSBAQAogCQlFMUZGOEY2QjE4MERCNUJFMDAxMzI2
NzQgLyogQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJRTM4ODM4OTQxQkFEMTQ1RjAwRDYyRUUzIC8qIFNjcmlwdE1vZHVsZUxvYWRlci5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTY3JpcHRNb2R1bGVMb2Fk
ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMzg4Mzg5NTFCQUQxNDVGMDBE
NjJFRTMgLyogU2NyaXB0TW9kdWxlTG9hZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFNjcmlwdE1vZHVsZUxvYWRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlFM0IyRjBFMzFEN0YzNUVDMDBCMEM5RDEgLyogTG9hZGFibGVDbGFzc2ljU2NyaXB0LmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExvYWRhYmxlQ2xhc3NpY1Njcmlw
dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUUzQjJGMEU0MUQ3RjM1RUMwMEIw
QzlEMSAvKiBMb2FkYWJsZUNsYXNzaWNTY3JpcHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gTG9hZGFibGVDbGFzc2ljU2NyaXB0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUUzQjJGMEU3MUQ3RjM1RUMwMEIwQzlEMSAvKiBMb2FkYWJsZVNjcmlwdC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMb2FkYWJsZVNjcmlwdC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlFM0IyRjBFODFEN0YzNUVDMDBCMEM5RDEgLyogTG9hZGFibGVT
Y3JpcHRDbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTG9hZGFibGVT
Y3JpcHRDbGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTNCMkYwRTkxRDdG
M0QzQzAwQjBDOUQxIC8qIExvYWRhYmxlU2NyaXB0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IExvYWRhYmxlU2NyaXB0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJRTNGQTM4NjExRDcxNkU3NjAwQUE1OTUwIC8qIFBlbmRpbmdTY3JpcHRDbGllbnQu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGVuZGluZ1NjcmlwdENsaWVudC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNDAxQzI3NDE3Q0U1M0VDMDBDNDFBMzUg
LyogRWxlbWVudEl0ZXJhdG9yQXNzZXJ0aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBFbGVtZW50SXRlcmF0b3JBc3NlcnRpb25zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUU0MDFFMEEzMUMzQzBCODMwMEYzNEQxMCAvKiBTdHlsZUNoYW5nZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdHlsZUNoYW5nZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtMjMwMzEsNiArMjMwNDEsMTEgQEAKIAkJCQkxNENGN0MyMDA5Rjcx
MTA2MDBFQjM2NjUgLyogS2V5Ym9hcmRFdmVudC5pZGwgKi8sCiAJCQkJQkM3RkE2MUUwRDFGMENC
RDAwREIyMkE5IC8qIExpdmVOb2RlTGlzdC5jcHAgKi8sCiAJCQkJQkM3RkE2MUYwRDFGMENCRDAw
REIyMkE5IC8qIExpdmVOb2RlTGlzdC5oICovLAorCQkJCUUzQjJGMEUzMUQ3RjM1RUMwMEIwQzlE
MSAvKiBMb2FkYWJsZUNsYXNzaWNTY3JpcHQuY3BwICovLAorCQkJCUUzQjJGMEU0MUQ3RjM1RUMw
MEIwQzlEMSAvKiBMb2FkYWJsZUNsYXNzaWNTY3JpcHQuaCAqLywKKwkJCQlFM0IyRjBFOTFEN0Yz
RDNDMDBCMEM5RDEgLyogTG9hZGFibGVTY3JpcHQuY3BwICovLAorCQkJCUUzQjJGMEU3MUQ3RjM1
RUMwMEIwQzlEMSAvKiBMb2FkYWJsZVNjcmlwdC5oICovLAorCQkJCUUzQjJGMEU4MUQ3RjM1RUMw
MEIwQzlEMSAvKiBMb2FkYWJsZVNjcmlwdENsaWVudC5oICovLAogCQkJCUJDOUE2MTQ0MTQ2ODU5
RDkwMDYwNTdGRCAvKiBtYWtlX2RvbV9leGNlcHRpb25zLnBsICovLAogCQkJCUJDOUE2MTQ1MTQ2
ODU5RDkwMDYwNTdGRCAvKiBtYWtlX2V2ZW50X2ZhY3RvcnkucGwgKi8sCiAJCQkJQkM5QTYxNDYx
NDY4NTlEOTAwNjA1N0ZEIC8qIG1ha2VfbmFtZXMucGwgKi8sCkBAIC0yNDkzOCw2ICsyNDk1Myw3
IEBACiAJCQkJQzUxMzdDRjMxMUE1ODM3ODAwNEFEQjk5IC8qIEpTRE9NU3RyaW5nTGlzdC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQkM2NDY0OTgxMUQ4MjM0OTAwNjQ1NUIwIC8qIEpTRE9NU3RyaW5n
TWFwLmggaW4gSGVhZGVycyAqLywKIAkJCQk3Njk0NTYzRDEyMTREOTdDMDAwN0NCQUUgLyogSlNE
T01Ub2tlbkxpc3QuaCBpbiBIZWFkZXJzICovLAorCQkJCUUzQjJGMEYwMUQ3RjRDQjUwMEIwQzlE
MSAvKiBMb2FkYWJsZUNsYXNzaWNTY3JpcHQuaCBpbiBIZWFkZXJzICovLAogCQkJCTJFMzdFMDA2
MTJEQkM1QTQwMEE2QjIzMyAvKiBKU0RPTVVSTC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM2OTMy
NzQwRDdFMjkzOTAwQUU0NEQxIC8qIEpTRE9NV2luZG93QmFzZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJNjUyRkJCQkMwREUyN0NCNjAwMDFEMzg2IC8qIEpTRE9NV2luZG93Q3VzdG9tLmggaW4gSGVh
ZGVycyAqLywKQEAgLTI1MzI0LDYgKzI1MzQwLDcgQEAKIAkJCQlCMkZBM0RGMTBBQjc1QTZGMDAw
RTVBQzQgLyogSlNTVkdSZW5kZXJpbmdJbnRlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyRkEz
REYzMEFCNzVBNkYwMDBFNUFDNCAvKiBKU1NWR1NjcmlwdEVsZW1lbnQuaCBpbiBIZWFkZXJzICov
LAogCQkJCUIyRkEzREY1MEFCNzVBNkYwMDBFNUFDNCAvKiBKU1NWR1NldEVsZW1lbnQuaCBpbiBI
ZWFkZXJzICovLAorCQkJCUUzQjJGMEVFMUQ3RjRDQTkwMEIwQzlEMSAvKiBMb2FkYWJsZVNjcmlw
dENsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjJGQTNERjcwQUI3NUE2RjAwMEU1QUM0IC8q
IEpTU1ZHU3RvcEVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyRkEzREY5MEFCNzVBNkYw
MDBFNUFDNCAvKiBKU1NWR1N0cmluZ0xpc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyRkEzREZC
MEFCNzVBNkYwMDBFNUFDNCAvKiBKU1NWR1N0eWxlRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCkBA
IC0yNjkzNCw2ICsyNjk1MSw3IEBACiAJCQkJMzdGODE4RkQwRDY1NzYwNjAwNUUxRjA1IC8qIFdl
YkNvcmVVUkxSZXNwb25zZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDRBMjBEQjkwRjg0MTY2QzAw
QjNFMUZFIC8qIFdlYkNvcmVVUkxSZXNwb25zZUlPUy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTNG
MTk5RjAwODI0NUU1OTAwMUU5QUJDIC8qIFdlYkNvcmVWaWV3LmggaW4gSGVhZGVycyAqLywKKwkJ
CQlFM0IyRjBFRDFEN0Y0Q0EzMDBCMEM5RDEgLyogTG9hZGFibGVTY3JpcHQuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUE1RTYxNjc0MTg5NDU4MUYwMDlBREY1MCAvKiBXZWJEZWJ1Z2dlckFnZW50Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQlGRTBEODRFOTEwNDg0MzQ4MDAxQTE3OUUgLyogV2ViRXZlbnQu
aCBpbiBIZWFkZXJzICovLAogCQkJCTIyNUExNkI1MEQ1QzExRTkwMDA5MDI5NSAvKiBXZWJFdmVu
dFJlZ2lvbi5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNzY1OSw2ICsyNzY3Nyw3IEBACiAJCQkJNDNF
REQ2N0UxQjQ4NURCRjAwNjQwRTc1IC8qIENvbWJpbmVkRmlsdGVyc0FscGhhYmV0LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTI2RTk0NEQ4MUFDNEIyREQwMDdCODVCNSAvKiBDb21iaW5lZFVSTEZp
bHRlcnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTU4NEZFMzQxODY0RDVBRjAwODQzQjEwIC8q
IENvbW1hbmRMaW5lQVBJSG9zdC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlFM0IyRjBFQjFEN0Y0
QzlEMDBCMEM5RDEgLyogTG9hZGFibGVDbGFzc2ljU2NyaXB0LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUE1ODRGRTJCMTg2Mzg3MEYwMDg0M0IxMCAvKiBDb21tYW5kTGluZUFQSU1vZHVsZS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk2NTUwQjZBMTA5OURGMDI3MDA5MEQ3ODEgLyogQ29tbWVudC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlFMUZFMTM3NDE4NDAyQTY3MDA4OTJGMTMgLyogQ29tbW9u
Q3J5cHRvVXRpbGl0aWVzLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjc3NTcsNiArMjc3NzYsNyBA
QAogCQkJCUUxNkE4NEY5MTRDODVDQ0MwMDI5NzdERiAvKiBDU1NCb3JkZXJJbWFnZS5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlCQzI3NEIzMTE0MEVCRUQ4MDBFQURGQTYgLyogQ1NTQm9yZGVySW1h
Z2VTbGljZVZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTQ5QUUyRDhFMTM0RUU1MEMwMDcy
OTIwQSAvKiBDU1NDYWxjdWxhdGlvblZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUUzQjJG
MEVDMUQ3RjRDQTEwMEIwQzlEMSAvKiBMb2FkYWJsZVNjcmlwdC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlCQzYwNEE0MzBEQjU2MzRFMDAyMDQ3MzkgLyogQ1NTQ2FudmFzVmFsdWUuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJRTFFQkJCRDQwQUFDOUI4NzAwMUZFOEUyIC8qIENTU0NoYXJzZXRSdWxl
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDRUE0NzhGMDk3Q0FBQzgwMDk0QzlFNCAvKiBDU1ND
b21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9kb20vTG9hZGFibGVDbGFzc2ljU2NyaXB0LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2RvbS9Mb2FkYWJsZUNsYXNzaWNTY3JpcHQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQyNDRjZTcwZjdl
N2E5NjljYTE2MjI3MTEyMmI2ZDI0NGNjOTBjZDQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9kb20vTG9hZGFibGVDbGFzc2ljU2NyaXB0LmNwcApAQCAtMCwwICsxLDExNCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiTG9hZGFibGVDbGFzc2ljU2NyaXB0LmgiCisKKyNpbmNsdWRl
ICJTY3JpcHRFbGVtZW50LmgiCisjaW5jbHVkZSAiU2NyaXB0U291cmNlQ29kZS5oIgorI2luY2x1
ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0ltcGwu
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitSZWZQdHI8TG9hZGFibGVDbGFzc2ljU2NyaXB0
PiBMb2FkYWJsZUNsYXNzaWNTY3JpcHQ6OmNyZWF0ZShDYWNoZWRSZXNvdXJjZUhhbmRsZTxDYWNo
ZWRTY3JpcHQ+JiYgY2FjaGVkU2NyaXB0LCBjb25zdCBTdHJpbmcmIGNyb3NzT3JpZ2luTW9kZSwg
U2VjdXJpdHlPcmlnaW4mIHNlY3VyaXR5T3JpZ2luKQoreworICAgIGlmICghY2FjaGVkU2NyaXB0
KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBhdXRvIHNjcmlwdCA9IGFkb3B0UmVmKCpu
ZXcgTG9hZGFibGVDbGFzc2ljU2NyaXB0KFdURk1vdmUoY2FjaGVkU2NyaXB0KSwgY3Jvc3NPcmln
aW5Nb2RlLCBzZWN1cml0eU9yaWdpbikpOworICAgIGNhY2hlZFNjcmlwdC0+YWRkQ2xpZW50KHNj
cmlwdC5wdHIoKSk7CisgICAgcmV0dXJuIFdURk1vdmUoc2NyaXB0KTsKK30KKworTG9hZGFibGVD
bGFzc2ljU2NyaXB0OjpMb2FkYWJsZUNsYXNzaWNTY3JpcHQoQ2FjaGVkUmVzb3VyY2VIYW5kbGU8
Q2FjaGVkU2NyaXB0PiYmIGNhY2hlZFNjcmlwdCwgY29uc3QgU3RyaW5nJiBjcm9zc09yaWdpbk1v
ZGUsIFNlY3VyaXR5T3JpZ2luJiBzZWN1cml0eU9yaWdpbikKKyAgICA6IG1fY2FjaGVkU2NyaXB0
KGNhY2hlZFNjcmlwdCkKKyAgICAsIG1fc2VjdXJpdHlPcmlnaW4oc2VjdXJpdHlPcmlnaW4pCisg
ICAgLCBtX3JlcXVlc3RVc2VzQWNjZXNzQ29udHJvbCghY3Jvc3NPcmlnaW5Nb2RlLmlzTnVsbCgp
KQoreworfQorCitMb2FkYWJsZUNsYXNzaWNTY3JpcHQ6On5Mb2FkYWJsZUNsYXNzaWNTY3JpcHQo
KQoreworICAgIG1fY2FjaGVkU2NyaXB0LT5yZW1vdmVDbGllbnQodGhpcyk7Cit9CisKK2Jvb2wg
TG9hZGFibGVDbGFzc2ljU2NyaXB0Ojppc0xvYWRlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1f
Y2FjaGVkU2NyaXB0LT5pc0xvYWRlZCgpOworfQorCitPcHRpb25hbDxMb2FkYWJsZVNjcmlwdDo6
RXJyb3I+IExvYWRhYmxlQ2xhc3NpY1NjcmlwdDo6ZXJyb3JPY2N1cnJlZCgpIGNvbnN0Cit7Cisg
ICAgaWYgKG1fZXJyb3IpCisgICAgICAgIHJldHVybiBtX2Vycm9yOworCisgICAgaWYgKG1fY2Fj
aGVkU2NyaXB0LT5lcnJvck9jY3VycmVkKCkpCisgICAgICAgIHJldHVybiBFcnJvciB7IEVycm9y
VHlwZTo6Q2FjaGVkU2NyaXB0LCBOdWxsb3B0IH07CisKKyAgICByZXR1cm4gTnVsbG9wdDsKK30K
KworYm9vbCBMb2FkYWJsZUNsYXNzaWNTY3JpcHQ6Ondhc0NhbmNlbGVkKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbV9jYWNoZWRTY3JpcHQtPndhc0NhbmNlbGVkKCk7Cit9CisKK3ZvaWQgTG9hZGFi
bGVDbGFzc2ljU2NyaXB0Ojpub3RpZnlGaW5pc2hlZChDYWNoZWRSZXNvdXJjZSopCit7CisgICAg
aWYgKCFtX2Vycm9yICYmIG1fcmVxdWVzdFVzZXNBY2Nlc3NDb250cm9sICYmICFtX2NhY2hlZFNj
cmlwdC0+cGFzc2VzU2FtZU9yaWdpblBvbGljeUNoZWNrKG1fc2VjdXJpdHlPcmlnaW4uZ2V0KCkp
KSB7CisgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxTdHJpbmc+IGNvbnNvbGVNZXNzYWdl
KEFTQ0lJTGl0ZXJhbCgiQ3Jvc3Mtb3JpZ2luIHNjcmlwdCBsb2FkIGRlbmllZCBieSBDcm9zcy1P
cmlnaW4gUmVzb3VyY2UgU2hhcmluZyBwb2xpY3kuIikpOworICAgICAgICBtX2Vycm9yID0gRXJy
b3IgeworICAgICAgICAgICAgRXJyb3JUeXBlOjpDcm9zc09yaWdpbkxvYWQsCisgICAgICAgICAg
ICBDb25zb2xlTWVzc2FnZSB7CisgICAgICAgICAgICAgICAgTWVzc2FnZVNvdXJjZTo6SlMsCisg
ICAgICAgICAgICAgICAgTWVzc2FnZUxldmVsOjpFcnJvciwKKyAgICAgICAgICAgICAgICBjb25z
b2xlTWVzc2FnZQorICAgICAgICAgICAgfQorICAgICAgICB9OworICAgIH0KKworI2lmIEVOQUJM
RShOT1NOSUZGKQorICAgIGlmICghbV9lcnJvciAmJiAhbV9jYWNoZWRTY3JpcHQtPm1pbWVUeXBl
QWxsb3dlZEJ5Tm9zbmlmZigpKSB7CisgICAgICAgIG1fZXJyb3IgPSBFcnJvciB7CisgICAgICAg
ICAgICBFcnJvclR5cGU6Ok5vc25pZmYsCisgICAgICAgICAgICBDb25zb2xlTWVzc2FnZSB7Cisg
ICAgICAgICAgICAgICAgTWVzc2FnZVNvdXJjZTo6U2VjdXJpdHksCisgICAgICAgICAgICAgICAg
TWVzc2FnZUxldmVsOjpFcnJvciwKKyAgICAgICAgICAgICAgICBtYWtlU3RyaW5nKCJSZWZ1c2Vk
IHRvIGV4ZWN1dGUgc2NyaXB0IGZyb20gJyIsIG1fY2FjaGVkU2NyaXB0LT51cmwoKS5zdHJpbmdD
ZW50ZXJFbGxpcHNpemVkVG9MZW5ndGgoKSwgIicgYmVjYXVzZSBpdHMgTUlNRSB0eXBlICgnIiwg
bV9jYWNoZWRTY3JpcHQtPm1pbWVUeXBlKCksICInKSBpcyBub3QgZXhlY3V0YWJsZSwgYW5kIHN0
cmljdCBNSU1FIHR5cGUgY2hlY2tpbmcgaXMgZW5hYmxlZC4iKQorICAgICAgICAgICAgfQorICAg
ICAgICB9OworICAgIH0KKyNlbmRpZgorCisgICAgbm90aWZ5Q2xpZW50RmluaXNoZWQoKTsKK30K
Kwordm9pZCBMb2FkYWJsZUNsYXNzaWNTY3JpcHQ6OmV4ZWN1dGUoU2NyaXB0RWxlbWVudCYgc2Ny
aXB0RWxlbWVudCkKK3sKKyAgICBBU1NFUlQoIWVycm9yT2NjdXJyZWQoKSk7CisgICAgc2NyaXB0
RWxlbWVudC5leGVjdXRlU2NyaXB0KFNjcmlwdFNvdXJjZUNvZGUobV9jYWNoZWRTY3JpcHQuZ2V0
KCkpKTsKK30KKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0xvYWRhYmxlQ2xh
c3NpY1NjcmlwdC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0xvYWRhYmxlQ2xhc3NpY1NjcmlwdC5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmNjNzI4Yjk2NGFiYTUyMDc3NjlkOTdhMTA5NTQ2NjJiODEyOGFlMDIKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTG9hZGFibGVDbGFzc2ljU2NyaXB0
LmgKQEAgLTAsMCArMSw3MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSwgSW5j
LiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlQ2xpZW50
LmgiCisjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VIYW5kbGUuaCIKKyNpbmNsdWRlICJDYWNoZWRT
Y3JpcHQuaCIKKyNpbmNsdWRlICJMb2FkYWJsZVNjcmlwdC5oIgorI2luY2x1ZGUgIkxvYWRhYmxl
U2NyaXB0Q2xpZW50LmgiCisjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKKyNpbmNsdWRlIDx3
dGYvVHlwZUNhc3RzLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gQSBDYWNoZWRSZXNv
dXJjZUhhbmRsZSBhbG9uZSBkb2VzIG5vdCBwcmV2ZW50IHRoZSB1bmRlcmx5aW5nIENhY2hlZFJl
c291cmNlCisvLyBmcm9tIHB1cmdpbmcgaXRzIGRhdGEgYnVmZmVyLiBUaGlzIGNsYXNzIGhvbGRz
IGEgY2xpZW50IHVudGlsIHRoaXMgY2xhc3MgaXMKKy8vIGRlc3Ryb3llZCBpbiBvcmRlciB0byBn
dWFyYW50ZWUgdGhhdCB0aGUgZGF0YSBidWZmZXIgd2lsbCBub3QgYmUgcHVyZ2VkLgorY2xhc3Mg
TG9hZGFibGVDbGFzc2ljU2NyaXB0IGZpbmFsIDogcHVibGljIExvYWRhYmxlU2NyaXB0LCBwcml2
YXRlIENhY2hlZFJlc291cmNlQ2xpZW50IHsKK3B1YmxpYzoKKyAgICB+TG9hZGFibGVDbGFzc2lj
U2NyaXB0KCk7CisKKyAgICBzdGF0aWMgUmVmUHRyPExvYWRhYmxlQ2xhc3NpY1NjcmlwdD4gY3Jl
YXRlKENhY2hlZFJlc291cmNlSGFuZGxlPENhY2hlZFNjcmlwdD4mJiwgY29uc3QgU3RyaW5nJiBj
cm9zc09yaWdpbk1vZGUsIFNlY3VyaXR5T3JpZ2luJik7CisgICAgYm9vbCBpc0xvYWRlZCgpIGNv
bnN0IG92ZXJyaWRlOworICAgIE9wdGlvbmFsPEVycm9yPiBlcnJvck9jY3VycmVkKCkgY29uc3Qg
b3ZlcnJpZGU7CisgICAgYm9vbCB3YXNDYW5jZWxlZCgpIGNvbnN0IG92ZXJyaWRlOworCisgICAg
Q2FjaGVkU2NyaXB0JiBjYWNoZWRTY3JpcHQoKSB7IHJldHVybiAqbV9jYWNoZWRTY3JpcHQ7IH0K
KyAgICBib29sIGlzQ2xhc3NpY1NjcmlwdCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHRydWU7IH0K
KworICAgIHZvaWQgZXhlY3V0ZShTY3JpcHRFbGVtZW50Jikgb3ZlcnJpZGU7CisKK3ByaXZhdGU6
CisgICAgTG9hZGFibGVDbGFzc2ljU2NyaXB0KENhY2hlZFJlc291cmNlSGFuZGxlPENhY2hlZFNj
cmlwdD4mJiwgY29uc3QgU3RyaW5nJiBjcm9zc09yaWdpbk1vZGUsIFNlY3VyaXR5T3JpZ2luJik7
CisKKyAgICB2b2lkIG5vdGlmeUZpbmlzaGVkKENhY2hlZFJlc291cmNlKikgb3ZlcnJpZGU7CisK
KyAgICBDYWNoZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRTY3JpcHQ+IG1fY2FjaGVkU2NyaXB0Owor
ICAgIFJlZjxTZWN1cml0eU9yaWdpbj4gbV9zZWN1cml0eU9yaWdpbjsKKyAgICBPcHRpb25hbDxF
cnJvcj4gbV9lcnJvciB7IE51bGxvcHQgfTsKKyAgICBib29sIG1fcmVxdWVzdFVzZXNBY2Nlc3ND
b250cm9sOworfTsKKworfQorCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdlYkNvcmU6
OkxvYWRhYmxlQ2xhc3NpY1NjcmlwdCkKKyAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2Vi
Q29yZTo6TG9hZGFibGVTY3JpcHQmIHNjcmlwdCkgeyByZXR1cm4gc2NyaXB0LmlzQ2xhc3NpY1Nj
cmlwdCgpOyB9CitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VORCgpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vTG9hZGFibGVTY3JpcHQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0xv
YWRhYmxlU2NyaXB0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lZmRiNmI4OTQ4NmQ0OTNjOThmYjFmNWIzNTc2
YjRjNjk2M2UwYjRjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0xvYWRh
YmxlU2NyaXB0LmNwcApAQCAtMCwwICsxLDU4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2
IEFwcGxlLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJMb2Fk
YWJsZVNjcmlwdC5oIgorCisjaW5jbHVkZSAiTG9hZGFibGVTY3JpcHRDbGllbnQuaCIKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCit2b2lkIExvYWRhYmxlU2NyaXB0OjphZGRDbGllbnQoTG9hZGFi
bGVTY3JpcHRDbGllbnQmIGNsaWVudCkKK3sKKyAgICBtX2NsaWVudHMuYWRkKCZjbGllbnQpOwor
ICAgIGlmIChpc0xvYWRlZCgpKSB7CisgICAgICAgIFJlZjxMb2FkYWJsZVNjcmlwdD4gcHJvdGVj
dGVkVGhpcygqdGhpcyk7CisgICAgICAgIGNsaWVudC5ub3RpZnlGaW5pc2hlZCgqdGhpcyk7Cisg
ICAgfQorfQorCit2b2lkIExvYWRhYmxlU2NyaXB0OjpyZW1vdmVDbGllbnQoTG9hZGFibGVTY3Jp
cHRDbGllbnQmIGNsaWVudCkKK3sKKyAgICBtX2NsaWVudHMucmVtb3ZlKCZjbGllbnQpOworfQor
Cit2b2lkIExvYWRhYmxlU2NyaXB0Ojpub3RpZnlDbGllbnRGaW5pc2hlZCgpCit7CisgICAgUmVm
UHRyPExvYWRhYmxlU2NyaXB0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOworCisgICAgVmVjdG9yPExv
YWRhYmxlU2NyaXB0Q2xpZW50Kj4gdmVjdG9yOworICAgIGZvciAoYXV0byYgcGFpciA6IG1fY2xp
ZW50cykKKyAgICAgICAgdmVjdG9yLmFwcGVuZChwYWlyLmtleSk7CisgICAgZm9yIChhdXRvJiBj
bGllbnQgOiB2ZWN0b3IpCisgICAgICAgIGNsaWVudC0+bm90aWZ5RmluaXNoZWQoKnRoaXMpOwor
fQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vTG9hZGFibGVTY3JpcHQuaCBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9Mb2FkYWJsZVNjcmlwdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjI0MmYwYTQ5
ZDkwZWE3ZjM2YjY5YjRmM2FjNTgxMDJkMzY5MTRjMjMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vTG9hZGFibGVTY3JpcHQuaApAQCAtMCwwICsxLDc4IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE2IEFwcGxlLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisj
aW5jbHVkZSA8cnVudGltZS9Db25zb2xlVHlwZXMuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaENvdW50
ZWRTZXQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0
L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIExvYWRhYmxlU2Ny
aXB0Q2xpZW50OworY2xhc3MgU2NyaXB0RWxlbWVudDsKKworY2xhc3MgTG9hZGFibGVTY3JpcHQg
OiBwdWJsaWMgUmVmQ291bnRlZDxMb2FkYWJsZVNjcmlwdD4geworcHVibGljOgorICAgIGVudW0g
Y2xhc3MgRXJyb3JUeXBlIHsKKyAgICAgICAgQ2FjaGVkU2NyaXB0LAorICAgICAgICBDcm9zc09y
aWdpbkxvYWQsCisgICAgICAgIE5vc25pZmYsCisgICAgfTsKKworICAgIHN0cnVjdCBDb25zb2xl
TWVzc2FnZSB7CisgICAgICAgIE1lc3NhZ2VTb3VyY2Ugc291cmNlOworICAgICAgICBNZXNzYWdl
TGV2ZWwgbGV2ZWw7CisgICAgICAgIFN0cmluZyBtZXNzYWdlOworICAgIH07CisKKyAgICBzdHJ1
Y3QgRXJyb3IgeworICAgICAgICBFcnJvclR5cGUgdHlwZTsKKyAgICAgICAgT3B0aW9uYWw8Q29u
c29sZU1lc3NhZ2U+IGNvbnNvbGVNZXNzYWdlOworICAgIH07CisKKyAgICB2aXJ0dWFsIH5Mb2Fk
YWJsZVNjcmlwdCgpIHsgfQorCisgICAgdmlydHVhbCBib29sIGlzTG9hZGVkKCkgY29uc3QgPSAw
OworICAgIHZpcnR1YWwgT3B0aW9uYWw8RXJyb3I+IGVycm9yT2NjdXJyZWQoKSBjb25zdCA9IDA7
CisgICAgdmlydHVhbCBib29sIHdhc0NhbmNlbGVkKCkgY29uc3QgPSAwOworCisgICAgdmlydHVh
bCB2b2lkIGV4ZWN1dGUoU2NyaXB0RWxlbWVudCYpID0gMDsKKworICAgIHZvaWQgYWRkQ2xpZW50
KExvYWRhYmxlU2NyaXB0Q2xpZW50Jik7CisgICAgdm9pZCByZW1vdmVDbGllbnQoTG9hZGFibGVT
Y3JpcHRDbGllbnQmKTsKKworICAgIHZpcnR1YWwgYm9vbCBpc0NsYXNzaWNTY3JpcHQoKSBjb25z
dCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc01vZHVsZUdyYXBoKCkgY29u
c3QgeyByZXR1cm4gZmFsc2U7IH0KKworcHJvdGVjdGVkOgorICAgIHZvaWQgbm90aWZ5Q2xpZW50
RmluaXNoZWQoKTsKKworcHJpdmF0ZToKKyAgICBIYXNoQ291bnRlZFNldDxMb2FkYWJsZVNjcmlw
dENsaWVudCo+IG1fY2xpZW50czsKK307CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2RvbS9Mb2FkYWJsZVNjcmlwdENsaWVudC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0xvYWRhYmxl
U2NyaXB0Q2xpZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzA0ZTljZmZiNmVkNDJmNzBhNmM1NjdlZmZjMWQx
MGYxODE3NGU3MgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Mb2FkYWJs
ZVNjcmlwdENsaWVudC5oCkBAIC0wLDAgKzEsMzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTYgQXBwbGUsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworY2xhc3MgTG9hZGFibGVTY3JpcHQ7CisKK2NsYXNzIExvYWRhYmxlU2NyaXB0Q2xpZW50
IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5Mb2FkYWJsZVNjcmlwdENsaWVudCgpIHsgfQorCisg
ICAgdmlydHVhbCB2b2lkIG5vdGlmeUZpbmlzaGVkKExvYWRhYmxlU2NyaXB0JikgPSAwOworfTsK
KworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1BlbmRpbmdTY3JpcHQuY3BwIGIv
U291cmNlL1dlYkNvcmUvZG9tL1BlbmRpbmdTY3JpcHQuY3BwCmluZGV4IDcxYmRiMmQ4M2VmM2M2
OGUxYjViZjc5MzFjY2Y3Njg3YmI5OGE1NmMuLjU5ZmI0ZTc3YmJkMDhmMTg1ZjllMDAwYzE0NmFj
NWFhNWI3MDUyOTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9QZW5kaW5nU2NyaXB0
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vUGVuZGluZ1NjcmlwdC5jcHAKQEAgLTI2LDE2
ICsyNiwxNSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlBlbmRpbmdTY3JpcHQu
aCIKIAotI2luY2x1ZGUgIkNhY2hlZFNjcmlwdC5oIgogI2luY2x1ZGUgIkVsZW1lbnQuaCIKICNp
bmNsdWRlICJQZW5kaW5nU2NyaXB0Q2xpZW50LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
UmVmPFBlbmRpbmdTY3JpcHQ+IFBlbmRpbmdTY3JpcHQ6OmNyZWF0ZShFbGVtZW50JiBlbGVtZW50
LCBDYWNoZWRTY3JpcHQmIGNhY2hlZFNjcmlwdCkKK1JlZjxQZW5kaW5nU2NyaXB0PiBQZW5kaW5n
U2NyaXB0OjpjcmVhdGUoRWxlbWVudCYgZWxlbWVudCwgTG9hZGFibGVTY3JpcHQmIGxvYWRhYmxl
U2NyaXB0KQogewotICAgIFJlZjxQZW5kaW5nU2NyaXB0PiBwZW5kaW5nU2NyaXB0ID0gYWRvcHRS
ZWYoKm5ldyBQZW5kaW5nU2NyaXB0KGVsZW1lbnQsIGNhY2hlZFNjcmlwdCkpOwotICAgIGNhY2hl
ZFNjcmlwdC5hZGRDbGllbnQoJnBlbmRpbmdTY3JpcHQuZ2V0KCkpOworICAgIFJlZjxQZW5kaW5n
U2NyaXB0PiBwZW5kaW5nU2NyaXB0ID0gYWRvcHRSZWYoKm5ldyBQZW5kaW5nU2NyaXB0KGVsZW1l
bnQsIGxvYWRhYmxlU2NyaXB0KSk7CisgICAgbG9hZGFibGVTY3JpcHQuYWRkQ2xpZW50KHBlbmRp
bmdTY3JpcHQuZ2V0KCkpOwogICAgIHJldHVybiBwZW5kaW5nU2NyaXB0OwogfQogCkBAIC01MCwy
MSArNDksMjEgQEAgUGVuZGluZ1NjcmlwdDo6UGVuZGluZ1NjcmlwdChFbGVtZW50JiBlbGVtZW50
LCBUZXh0UG9zaXRpb24gc3RhcnRpbmdQb3NpdGlvbikKIHsKIH0KIAotUGVuZGluZ1NjcmlwdDo6
UGVuZGluZ1NjcmlwdChFbGVtZW50JiBlbGVtZW50LCBDYWNoZWRTY3JpcHQmIGNhY2hlZFNjcmlw
dCkKK1BlbmRpbmdTY3JpcHQ6OlBlbmRpbmdTY3JpcHQoRWxlbWVudCYgZWxlbWVudCwgTG9hZGFi
bGVTY3JpcHQmIGxvYWRhYmxlU2NyaXB0KQogICAgIDogbV9lbGVtZW50KGVsZW1lbnQpCi0gICAg
LCBtX2NhY2hlZFNjcmlwdCgmY2FjaGVkU2NyaXB0KQorICAgICwgbV9sb2FkYWJsZVNjcmlwdCgm
bG9hZGFibGVTY3JpcHQpCiB7CiB9CiAKIFBlbmRpbmdTY3JpcHQ6On5QZW5kaW5nU2NyaXB0KCkK
IHsKLSAgICBpZiAobV9jYWNoZWRTY3JpcHQpCi0gICAgICAgIG1fY2FjaGVkU2NyaXB0LT5yZW1v
dmVDbGllbnQodGhpcyk7CisgICAgaWYgKG1fbG9hZGFibGVTY3JpcHQpCisgICAgICAgIG1fbG9h
ZGFibGVTY3JpcHQtPnJlbW92ZUNsaWVudCgqdGhpcyk7CiB9CiAKLUNhY2hlZFNjcmlwdCogUGVu
ZGluZ1NjcmlwdDo6Y2FjaGVkU2NyaXB0KCkgY29uc3QKK0xvYWRhYmxlU2NyaXB0KiBQZW5kaW5n
U2NyaXB0Ojpsb2FkYWJsZVNjcmlwdCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fY2FjaGVkU2Ny
aXB0LmdldCgpOworICAgIHJldHVybiBtX2xvYWRhYmxlU2NyaXB0LmdldCgpOwogfQogCiB2b2lk
IFBlbmRpbmdTY3JpcHQ6Om5vdGlmeUNsaWVudEZpbmlzaGVkKCkKQEAgLTc0LDE0ICs3MywxOSBA
QCB2b2lkIFBlbmRpbmdTY3JpcHQ6Om5vdGlmeUNsaWVudEZpbmlzaGVkKCkKICAgICAgICAgbV9j
bGllbnQtPm5vdGlmeUZpbmlzaGVkKCp0aGlzKTsKIH0KIAotdm9pZCBQZW5kaW5nU2NyaXB0Ojpu
b3RpZnlGaW5pc2hlZChDYWNoZWRSZXNvdXJjZSopCit2b2lkIFBlbmRpbmdTY3JpcHQ6Om5vdGlm
eUZpbmlzaGVkKExvYWRhYmxlU2NyaXB0JikKIHsKICAgICBub3RpZnlDbGllbnRGaW5pc2hlZCgp
OwogfQogCiBib29sIFBlbmRpbmdTY3JpcHQ6OmlzTG9hZGVkKCkgY29uc3QKIHsKLSAgICByZXR1
cm4gbV9jYWNoZWRTY3JpcHQgJiYgbV9jYWNoZWRTY3JpcHQtPmlzTG9hZGVkKCk7CisgICAgcmV0
dXJuIG1fbG9hZGFibGVTY3JpcHQgJiYgbV9sb2FkYWJsZVNjcmlwdC0+aXNMb2FkZWQoKTsKK30K
KworYm9vbCBQZW5kaW5nU2NyaXB0OjplcnJvck9jY3VycmVkKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gbV9sb2FkYWJsZVNjcmlwdCAmJiBtX2xvYWRhYmxlU2NyaXB0LT5lcnJvck9jY3VycmVkKCk7
CiB9CiAKIHZvaWQgUGVuZGluZ1NjcmlwdDo6c2V0Q2xpZW50KFBlbmRpbmdTY3JpcHRDbGllbnQq
IGNsaWVudCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9QZW5kaW5nU2NyaXB0Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9kb20vUGVuZGluZ1NjcmlwdC5oCmluZGV4IDA3YjJmMzVlNjUzYTNk
M2Q4OGJhZWQ0YWUwNTY2MmFmOGQ0NDc4MjEuLjUwYjkyZTMxZjE0NTAxZDZhZjU2ZmIxOWU1YThh
ZGVkZDg0OTY4NjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9QZW5kaW5nU2NyaXB0
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1BlbmRpbmdTY3JpcHQuaApAQCAtMjUsOCArMjUs
OCBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlQ2xpZW50Lmgi
Ci0jaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VIYW5kbGUuaCIKKyNpbmNsdWRlICJMb2FkYWJsZVNj
cmlwdC5oIgorI2luY2x1ZGUgIkxvYWRhYmxlU2NyaXB0Q2xpZW50LmgiCiAjaW5jbHVkZSA8d3Rm
L1JlZi5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQv
VGV4dFBvc2l0aW9uLmg+CkBAIC0zNywxNCArMzcsMTEgQEAgY2xhc3MgQ2FjaGVkU2NyaXB0Owog
Y2xhc3MgRWxlbWVudDsKIGNsYXNzIFBlbmRpbmdTY3JpcHRDbGllbnQ7CiAKLS8vIEEgY29udGFp
bmVyIGZvciBhbiBleHRlcm5hbCBzY3JpcHQgd2hpY2ggbWF5IGJlIGxvYWRlZCBhbmQgZXhlY3V0
ZWQuCi0vLwotLy8gQSBDYWNoZWRSZXNvdXJjZUhhbmRsZSBhbG9uZSBkb2VzIG5vdCBwcmV2ZW50
IHRoZSB1bmRlcmx5aW5nIENhY2hlZFJlc291cmNlCi0vLyBmcm9tIHB1cmdpbmcgaXRzIGRhdGEg
YnVmZmVyLiBUaGlzIGNsYXNzIGhvbGRzIGEgZHVtbXkgY2xpZW50IG9wZW4gZm9yIGl0cwotLy8g
bGlmZXRpbWUgaW4gb3JkZXIgdG8gZ3VhcmFudGVlIHRoYXQgdGhlIGRhdGEgYnVmZmVyIHdpbGwg
bm90IGJlIHB1cmdlZC4KLWNsYXNzIFBlbmRpbmdTY3JpcHQgZmluYWwgOiBwdWJsaWMgUmVmQ291
bnRlZDxQZW5kaW5nU2NyaXB0PiwgcHVibGljIENhY2hlZFJlc291cmNlQ2xpZW50IHsKKy8vIEEg
Y29udGFpbmVyIGZvciBzY3JpcHRzIHdoaWNoIG1heSBiZSBsb2FkZWQgYW5kIGV4ZWN1dGVkLgor
Ly8gVGhpcyBjYW4gaG9sZCBMb2FkYWJsZVNjcmlwdCBhbmQgbm9uIGV4dGVybmFsIGlubGluZSBz
Y3JpcHQuCitjbGFzcyBQZW5kaW5nU2NyaXB0IGZpbmFsIDogcHVibGljIFJlZkNvdW50ZWQ8UGVu
ZGluZ1NjcmlwdD4sIHB1YmxpYyBMb2FkYWJsZVNjcmlwdENsaWVudCB7CiBwdWJsaWM6Ci0gICAg
c3RhdGljIFJlZjxQZW5kaW5nU2NyaXB0PiBjcmVhdGUoRWxlbWVudCYsIENhY2hlZFNjcmlwdCYp
OworICAgIHN0YXRpYyBSZWY8UGVuZGluZ1NjcmlwdD4gY3JlYXRlKEVsZW1lbnQmLCBMb2FkYWJs
ZVNjcmlwdCYpOwogICAgIHN0YXRpYyBSZWY8UGVuZGluZ1NjcmlwdD4gY3JlYXRlKEVsZW1lbnQm
LCBUZXh0UG9zaXRpb24gc2NyaXB0U3RhcnRQb3NpdGlvbik7CiAKICAgICB2aXJ0dWFsIH5QZW5k
aW5nU2NyaXB0KCk7CkBAIC01NywyNSArNTQsMjYgQEAgY2xhc3MgUGVuZGluZ1NjcmlwdCBmaW5h
bCA6IHB1YmxpYyBSZWZDb3VudGVkPFBlbmRpbmdTY3JpcHQ+LCBwdWJsaWMgQ2FjaGVkUmVzb3UK
ICAgICBFbGVtZW50JiBlbGVtZW50KCkgeyByZXR1cm4gbV9lbGVtZW50LmdldCgpOyB9CiAgICAg
Y29uc3QgRWxlbWVudCYgZWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fZWxlbWVudC5nZXQoKTsg
fQogCi0gICAgQ2FjaGVkU2NyaXB0KiBjYWNoZWRTY3JpcHQoKSBjb25zdDsKLSAgICBib29sIG5l
ZWRzTG9hZGluZygpIGNvbnN0IHsgcmV0dXJuIGNhY2hlZFNjcmlwdCgpOyB9CisgICAgTG9hZGFi
bGVTY3JpcHQqIGxvYWRhYmxlU2NyaXB0KCkgY29uc3Q7CisgICAgYm9vbCBuZWVkc0xvYWRpbmco
KSBjb25zdCB7IHJldHVybiBsb2FkYWJsZVNjcmlwdCgpOyB9CiAKICAgICBib29sIGlzTG9hZGVk
KCkgY29uc3Q7CisgICAgYm9vbCBlcnJvck9jY3VycmVkKCkgY29uc3Q7CiAKLSAgICB2b2lkIG5v
dGlmeUZpbmlzaGVkKENhY2hlZFJlc291cmNlKikgb3ZlcnJpZGU7CisgICAgdm9pZCBub3RpZnlG
aW5pc2hlZChMb2FkYWJsZVNjcmlwdCYpIG92ZXJyaWRlOwogCiAgICAgdm9pZCBzZXRDbGllbnQo
UGVuZGluZ1NjcmlwdENsaWVudCopOwogICAgIHZvaWQgY2xlYXJDbGllbnQoKTsKIAogcHJpdmF0
ZToKLSAgICBQZW5kaW5nU2NyaXB0KEVsZW1lbnQmLCBDYWNoZWRTY3JpcHQmKTsKKyAgICBQZW5k
aW5nU2NyaXB0KEVsZW1lbnQmLCBMb2FkYWJsZVNjcmlwdCYpOwogICAgIFBlbmRpbmdTY3JpcHQo
RWxlbWVudCYsIFRleHRQb3NpdGlvbiBzdGFydGluZ1Bvc2l0aW9uKTsKIAogICAgIHZvaWQgbm90
aWZ5Q2xpZW50RmluaXNoZWQoKTsKIAogICAgIFJlZjxFbGVtZW50PiBtX2VsZW1lbnQ7CiAgICAg
VGV4dFBvc2l0aW9uIG1fc3RhcnRpbmdQb3NpdGlvbjsgLy8gT25seSB1c2VkIGZvciBpbmxpbmUg
c2NyaXB0IHRhZ3MuCi0gICAgQ2FjaGVkUmVzb3VyY2VIYW5kbGU8Q2FjaGVkU2NyaXB0PiBtX2Nh
Y2hlZFNjcmlwdDsKKyAgICBSZWZQdHI8TG9hZGFibGVTY3JpcHQ+IG1fbG9hZGFibGVTY3JpcHQ7
CiAgICAgUGVuZGluZ1NjcmlwdENsaWVudCogbV9jbGllbnQgeyBudWxscHRyIH07CiB9OwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0RWxlbWVudC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9kb20vU2NyaXB0RWxlbWVudC5jcHAKaW5kZXggZjE4NzExMTViMzI4YTZmMTI2MzA5
MzZlODVlYjA5YWI3YTFmMzU3Yy4uOTFhOTg5MWFjODZkOWE3MzdlN2NjYmQ0NDk2OTg4YThiNjk2
ZmY1ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdEVsZW1lbnQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRFbGVtZW50LmNwcApAQCAtMzcsOCArMzcsMTAg
QEAKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJIVE1MUGFyc2VySWRpb21zLmgi
CiAjaW5jbHVkZSAiSWdub3JlRGVzdHJ1Y3RpdmVXcml0ZUNvdW50SW5jcmVtZW50ZXIuaCIKKyNp
bmNsdWRlICJMb2FkYWJsZUNsYXNzaWNTY3JpcHQuaCIKICNpbmNsdWRlICJNSU1FVHlwZVJlZ2lz
dHJ5LmgiCiAjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIlBlbmRpbmdTY3JpcHQuaCIKICNp
bmNsdWRlICJTVkdOYW1lcy5oIgogI2luY2x1ZGUgIlNWR1NjcmlwdEVsZW1lbnQuaCIKICNpbmNs
dWRlICJTY3JpcHRDb250cm9sbGVyLmgiCkBAIC02OCw3ICs3MCw2IEBAIFNjcmlwdEVsZW1lbnQ6
OlNjcmlwdEVsZW1lbnQoRWxlbWVudCYgZWxlbWVudCwgYm9vbCBwYXJzZXJJbnNlcnRlZCwgYm9v
bCBhbHJlYWR5CiAgICAgLCBtX3dpbGxFeGVjdXRlV2hlbkRvY3VtZW50RmluaXNoZWRQYXJzaW5n
KGZhbHNlKQogICAgICwgbV9mb3JjZUFzeW5jKCFwYXJzZXJJbnNlcnRlZCkKICAgICAsIG1fd2ls
bEV4ZWN1dGVJbk9yZGVyKGZhbHNlKQotICAgICwgbV9yZXF1ZXN0VXNlc0FjY2Vzc0NvbnRyb2wo
ZmFsc2UpCiB7CiAgICAgaWYgKHBhcnNlckluc2VydGVkICYmIG1fZWxlbWVudC5kb2N1bWVudCgp
LnNjcmlwdGFibGVEb2N1bWVudFBhcnNlcigpICYmICFtX2VsZW1lbnQuZG9jdW1lbnQoKS5pc0lu
RG9jdW1lbnRXcml0ZSgpKQogICAgICAgICBtX3N0YXJ0TGluZU51bWJlciA9IG1fZWxlbWVudC5k
b2N1bWVudCgpLnNjcmlwdGFibGVEb2N1bWVudFBhcnNlcigpLT50ZXh0UG9zaXRpb24oKS5tX2xp
bmU7CkBAIC05Niw5ICs5Nyw5IEBAIHZvaWQgU2NyaXB0RWxlbWVudDo6Y2hpbGRyZW5DaGFuZ2Vk
KCkKICAgICAgICAgcHJlcGFyZVNjcmlwdCgpOyAvLyBGSVhNRTogUHJvdmlkZSBhIHJlYWwgc3Rh
cnRpbmcgbGluZSBudW1iZXIgaGVyZS4KIH0KIAotdm9pZCBTY3JpcHRFbGVtZW50OjpoYW5kbGVT
b3VyY2VBdHRyaWJ1dGUoY29uc3QgU3RyaW5nJiBzb3VyY2VVcmwpCit2b2lkIFNjcmlwdEVsZW1l
bnQ6OmhhbmRsZVNvdXJjZUF0dHJpYnV0ZShjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCkKIHsKLSAg
ICBpZiAoaWdub3Jlc0xvYWRSZXF1ZXN0KCkgfHwgc291cmNlVXJsLmlzRW1wdHkoKSkKKyAgICBp
ZiAoaWdub3Jlc0xvYWRSZXF1ZXN0KCkgfHwgc291cmNlVVJMLmlzRW1wdHkoKSkKICAgICAgICAg
cmV0dXJuOwogCiAgICAgcHJlcGFyZVNjcmlwdCgpOyAvLyBGSVhNRTogUHJvdmlkZSBhIHJlYWwg
c3RhcnRpbmcgbGluZSBudW1iZXIgaGVyZS4KQEAgLTIyNyw5ICsyMjgsMTAgQEAgYm9vbCBTY3Jp
cHRFbGVtZW50OjpwcmVwYXJlU2NyaXB0KGNvbnN0IFRleHRQb3NpdGlvbiYgc2NyaXB0U3RhcnRQ
b3NpdGlvbiwgTGVnYWMKICAgICBlbHNlCiAgICAgICAgIG1fY2hhcmFjdGVyRW5jb2RpbmcgPSBk
b2N1bWVudC5jaGFyc2V0KCk7CiAKLSAgICBpZiAoaGFzU291cmNlQXR0cmlidXRlKCkpCi0gICAg
ICAgIGlmICghcmVxdWVzdFNjcmlwdChzb3VyY2VBdHRyaWJ1dGVWYWx1ZSgpKSkKKyAgICBpZiAo
aGFzU291cmNlQXR0cmlidXRlKCkpIHsKKyAgICAgICAgaWYgKCFyZXF1ZXN0Q2xhc3NpY1Njcmlw
dChzb3VyY2VBdHRyaWJ1dGVWYWx1ZSgpKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CiAKICAgICBpZiAoaGFzU291cmNlQXR0cmlidXRlKCkgJiYgZGVmZXJBdHRyaWJ1dGVWYWx1
ZSgpICYmIG1fcGFyc2VySW5zZXJ0ZWQgJiYgIWFzeW5jQXR0cmlidXRlVmFsdWUoKSkgewogICAg
ICAgICBtX3dpbGxFeGVjdXRlV2hlbkRvY3VtZW50RmluaXNoZWRQYXJzaW5nID0gdHJ1ZTsKQEAg
LTI0MCwxMiArMjQyLDE0IEBAIGJvb2wgU2NyaXB0RWxlbWVudDo6cHJlcGFyZVNjcmlwdChjb25z
dCBUZXh0UG9zaXRpb24mIHNjcmlwdFN0YXJ0UG9zaXRpb24sIExlZ2FjCiAgICAgICAgIG1fd2ls
bEJlUGFyc2VyRXhlY3V0ZWQgPSB0cnVlOwogICAgICAgICBtX3JlYWR5VG9CZVBhcnNlckV4ZWN1
dGVkID0gdHJ1ZTsKICAgICB9IGVsc2UgaWYgKGhhc1NvdXJjZUF0dHJpYnV0ZSgpICYmICFhc3lu
Y0F0dHJpYnV0ZVZhbHVlKCkgJiYgIW1fZm9yY2VBc3luYykgeworICAgICAgICBBU1NFUlQobV9s
b2FkYWJsZVNjcmlwdCk7CiAgICAgICAgIG1fd2lsbEV4ZWN1dGVJbk9yZGVyID0gdHJ1ZTsKLSAg
ICAgICAgZG9jdW1lbnQuc2NyaXB0UnVubmVyKCktPnF1ZXVlU2NyaXB0Rm9yRXhlY3V0aW9uKHRo
aXMsIG1fY2FjaGVkU2NyaXB0LCBTY3JpcHRSdW5uZXI6OklOX09SREVSX0VYRUNVVElPTik7Ci0g
ICAgICAgIG1fY2FjaGVkU2NyaXB0LT5hZGRDbGllbnQodGhpcyk7CisgICAgICAgIGRvY3VtZW50
LnNjcmlwdFJ1bm5lcigpLT5xdWV1ZVNjcmlwdEZvckV4ZWN1dGlvbih0aGlzLCAqbV9sb2FkYWJs
ZVNjcmlwdCwgU2NyaXB0UnVubmVyOjpJTl9PUkRFUl9FWEVDVVRJT04pOworICAgICAgICBtX2xv
YWRhYmxlU2NyaXB0LT5hZGRDbGllbnQoKnRoaXMpOwogICAgIH0gZWxzZSBpZiAoaGFzU291cmNl
QXR0cmlidXRlKCkpIHsKLSAgICAgICAgbV9lbGVtZW50LmRvY3VtZW50KCkuc2NyaXB0UnVubmVy
KCktPnF1ZXVlU2NyaXB0Rm9yRXhlY3V0aW9uKHRoaXMsIG1fY2FjaGVkU2NyaXB0LCBTY3JpcHRS
dW5uZXI6OkFTWU5DX0VYRUNVVElPTik7Ci0gICAgICAgIG1fY2FjaGVkU2NyaXB0LT5hZGRDbGll
bnQodGhpcyk7CisgICAgICAgIEFTU0VSVChtX2xvYWRhYmxlU2NyaXB0KTsKKyAgICAgICAgbV9l
bGVtZW50LmRvY3VtZW50KCkuc2NyaXB0UnVubmVyKCktPnF1ZXVlU2NyaXB0Rm9yRXhlY3V0aW9u
KHRoaXMsICptX2xvYWRhYmxlU2NyaXB0LCBTY3JpcHRSdW5uZXI6OkFTWU5DX0VYRUNVVElPTik7
CisgICAgICAgIG1fbG9hZGFibGVTY3JpcHQtPmFkZENsaWVudCgqdGhpcyk7CiAgICAgfSBlbHNl
IHsKICAgICAgICAgLy8gUmVzZXQgbGluZSBudW1iZXJpbmcgZm9yIG5lc3RlZCB3cml0ZXMuCiAg
ICAgICAgIFRleHRQb3NpdGlvbiBwb3NpdGlvbiA9IGRvY3VtZW50LmlzSW5Eb2N1bWVudFdyaXRl
KCkgPyBUZXh0UG9zaXRpb24oKSA6IHNjcmlwdFN0YXJ0UG9zaXRpb247CkBAIC0yNTUsMzkgKzI1
OSw0NSBAQCBib29sIFNjcmlwdEVsZW1lbnQ6OnByZXBhcmVTY3JpcHQoY29uc3QgVGV4dFBvc2l0
aW9uJiBzY3JpcHRTdGFydFBvc2l0aW9uLCBMZWdhYwogICAgIHJldHVybiB0cnVlOwogfQogCi1i
b29sIFNjcmlwdEVsZW1lbnQ6OnJlcXVlc3RTY3JpcHQoY29uc3QgU3RyaW5nJiBzb3VyY2VVcmwp
CitDYWNoZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRTY3JpcHQ+IFNjcmlwdEVsZW1lbnQ6OnJlcXVl
c3RDYWNoZWRTY3JpcHQoY29uc3QgVVJMJiBzb3VyY2VVUkwsIGNvbnN0IFN0cmluZyYgbm9uY2VB
dHRyaWJ1dGUsIGNvbnN0IFN0cmluZyYgY3Jvc3NPcmlnaW5Nb2RlKQogewotICAgIFJlZjxEb2N1
bWVudD4gb3JpZ2luYWxEb2N1bWVudChtX2VsZW1lbnQuZG9jdW1lbnQoKSk7Ci0gICAgaWYgKCFt
X2VsZW1lbnQuZGlzcGF0Y2hCZWZvcmVMb2FkRXZlbnQoc291cmNlVXJsKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIGlmICghbV9lbGVtZW50LmluRG9jdW1lbnQoKSB8fCAmbV9lbGVtZW50
LmRvY3VtZW50KCkgIT0gb3JpZ2luYWxEb2N1bWVudC5wdHIoKSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIGJvb2wgaGFzS25vd25Ob25jZSA9IG1fZWxlbWVudC5kb2N1bWVudCgpLmNvbnRl
bnRTZWN1cml0eVBvbGljeSgpLT5hbGxvd1NjcmlwdFdpdGhOb25jZShub25jZUF0dHJpYnV0ZSwg
bV9lbGVtZW50LmlzSW5Vc2VyQWdlbnRTaGFkb3dUcmVlKCkpOworICAgIFJlc291cmNlTG9hZGVy
T3B0aW9ucyBvcHRpb25zID0gQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OmRlZmF1bHRDYWNoZWRSZXNv
dXJjZU9wdGlvbnMoKTsKKyAgICBvcHRpb25zLmNvbnRlbnRTZWN1cml0eVBvbGljeUltcG9zaXRp
b24gPSBoYXNLbm93bk5vbmNlID8gQ29udGVudFNlY3VyaXR5UG9saWN5SW1wb3NpdGlvbjo6U2tp
cFBvbGljeUNoZWNrIDogQ29udGVudFNlY3VyaXR5UG9saWN5SW1wb3NpdGlvbjo6RG9Qb2xpY3lD
aGVjazsKIAotICAgIEFTU0VSVCghbV9jYWNoZWRTY3JpcHQpOwotICAgIGlmICghc3RyaXBMZWFk
aW5nQW5kVHJhaWxpbmdIVE1MU3BhY2VzKHNvdXJjZVVybCkuaXNFbXB0eSgpKSB7Ci0gICAgICAg
IGJvb2wgaGFzS25vd25Ob25jZSA9IG1fZWxlbWVudC5kb2N1bWVudCgpLmNvbnRlbnRTZWN1cml0
eVBvbGljeSgpLT5hbGxvd1NjcmlwdFdpdGhOb25jZShtX2VsZW1lbnQuYXR0cmlidXRlV2l0aG91
dFN5bmNocm9uaXphdGlvbihIVE1MTmFtZXM6Om5vbmNlQXR0ciksIG1fZWxlbWVudC5pc0luVXNl
ckFnZW50U2hhZG93VHJlZSgpKTsKLSAgICAgICAgUmVzb3VyY2VMb2FkZXJPcHRpb25zIG9wdGlv
bnMgPSBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6ZGVmYXVsdENhY2hlZFJlc291cmNlT3B0aW9ucygp
OwotICAgICAgICBvcHRpb25zLmNvbnRlbnRTZWN1cml0eVBvbGljeUltcG9zaXRpb24gPSBoYXNL
bm93bk5vbmNlID8gQ29udGVudFNlY3VyaXR5UG9saWN5SW1wb3NpdGlvbjo6U2tpcFBvbGljeUNo
ZWNrIDogQ29udGVudFNlY3VyaXR5UG9saWN5SW1wb3NpdGlvbjo6RG9Qb2xpY3lDaGVjazsKKyAg
ICBDYWNoZWRSZXNvdXJjZVJlcXVlc3QgcmVxdWVzdChSZXNvdXJjZVJlcXVlc3Qoc291cmNlVVJM
KSwgb3B0aW9ucyk7CiAKLSAgICAgICAgQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3QoUmVz
b3VyY2VSZXF1ZXN0KG1fZWxlbWVudC5kb2N1bWVudCgpLmNvbXBsZXRlVVJMKHNvdXJjZVVybCkp
LCBvcHRpb25zKTsKKyAgICBtX2VsZW1lbnQuZG9jdW1lbnQoKS5jb250ZW50U2VjdXJpdHlQb2xp
Y3koKS0+dXBncmFkZUluc2VjdXJlUmVxdWVzdElmTmVlZGVkKHJlcXVlc3QubXV0YWJsZVJlc291
cmNlUmVxdWVzdCgpLCBDb250ZW50U2VjdXJpdHlQb2xpY3k6Okluc2VjdXJlUmVxdWVzdFR5cGU6
OkxvYWQpOwogCi0gICAgICAgIG1fZWxlbWVudC5kb2N1bWVudCgpLmNvbnRlbnRTZWN1cml0eVBv
bGljeSgpLT51cGdyYWRlSW5zZWN1cmVSZXF1ZXN0SWZOZWVkZWQocmVxdWVzdC5tdXRhYmxlUmVz
b3VyY2VSZXF1ZXN0KCksIENvbnRlbnRTZWN1cml0eVBvbGljeTo6SW5zZWN1cmVSZXF1ZXN0VHlw
ZTo6TG9hZCk7CisgICAgaWYgKCFjcm9zc09yaWdpbk1vZGUuaXNOdWxsKCkpIHsKKyAgICAgICAg
U3RvcmVkQ3JlZGVudGlhbHMgYWxsb3dDcmVkZW50aWFscyA9IGVxdWFsTGV0dGVyc0lnbm9yaW5n
QVNDSUlDYXNlKGNyb3NzT3JpZ2luTW9kZSwgInVzZS1jcmVkZW50aWFscyIpID8gQWxsb3dTdG9y
ZWRDcmVkZW50aWFscyA6IERvTm90QWxsb3dTdG9yZWRDcmVkZW50aWFsczsKKyAgICAgICAgQVNT
RVJUKG1fZWxlbWVudC5kb2N1bWVudCgpLnNlY3VyaXR5T3JpZ2luKCkpOworICAgICAgICB1cGRh
dGVSZXF1ZXN0Rm9yQWNjZXNzQ29udHJvbChyZXF1ZXN0Lm11dGFibGVSZXNvdXJjZVJlcXVlc3Qo
KSwgKm1fZWxlbWVudC5kb2N1bWVudCgpLnNlY3VyaXR5T3JpZ2luKCksIGFsbG93Q3JlZGVudGlh
bHMpOworICAgIH0KIAorICAgIHJlcXVlc3Quc2V0Q2hhcnNldChzY3JpcHRDaGFyc2V0KCkpOwor
ICAgIHJlcXVlc3Quc2V0SW5pdGlhdG9yKCZlbGVtZW50KCkpOworCisgICAgcmV0dXJuIG1fZWxl
bWVudC5kb2N1bWVudCgpLmNhY2hlZFJlc291cmNlTG9hZGVyKCkucmVxdWVzdFNjcmlwdChyZXF1
ZXN0KTsKK30KKworYm9vbCBTY3JpcHRFbGVtZW50OjpyZXF1ZXN0Q2xhc3NpY1NjcmlwdChjb25z
dCBTdHJpbmcmIHNvdXJjZVVSTCkKK3sKKyAgICBSZWY8RG9jdW1lbnQ+IG9yaWdpbmFsRG9jdW1l
bnQobV9lbGVtZW50LmRvY3VtZW50KCkpOworICAgIGlmICghbV9lbGVtZW50LmRpc3BhdGNoQmVm
b3JlTG9hZEV2ZW50KHNvdXJjZVVSTCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBib29s
IGRpZEV2ZW50TGlzdGVuZXJEaXNjb25uZWN0VGhpc0VsZW1lbnQgPSAhbV9lbGVtZW50LmluRG9j
dW1lbnQoKSB8fCAmbV9lbGVtZW50LmRvY3VtZW50KCkgIT0gb3JpZ2luYWxEb2N1bWVudC5wdHIo
KTsKKyAgICBpZiAoZGlkRXZlbnRMaXN0ZW5lckRpc2Nvbm5lY3RUaGlzRWxlbWVudCkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgQVNTRVJUKCFtX2xvYWRhYmxlU2NyaXB0KTsKKyAgICBp
ZiAoIXN0cmlwTGVhZGluZ0FuZFRyYWlsaW5nSFRNTFNwYWNlcyhzb3VyY2VVUkwpLmlzRW1wdHko
KSkgewogICAgICAgICBTdHJpbmcgY3Jvc3NPcmlnaW5Nb2RlID0gbV9lbGVtZW50LmF0dHJpYnV0
ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oSFRNTE5hbWVzOjpjcm9zc29yaWdpbkF0dHIpOwotICAg
ICAgICBpZiAoIWNyb3NzT3JpZ2luTW9kZS5pc051bGwoKSkgewotICAgICAgICAgICAgbV9yZXF1
ZXN0VXNlc0FjY2Vzc0NvbnRyb2wgPSB0cnVlOwotICAgICAgICAgICAgU3RvcmVkQ3JlZGVudGlh
bHMgYWxsb3dDcmVkZW50aWFscyA9IGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGNyb3Nz
T3JpZ2luTW9kZSwgInVzZS1jcmVkZW50aWFscyIpID8gQWxsb3dTdG9yZWRDcmVkZW50aWFscyA6
IERvTm90QWxsb3dTdG9yZWRDcmVkZW50aWFsczsKLSAgICAgICAgICAgIEFTU0VSVChtX2VsZW1l
bnQuZG9jdW1lbnQoKS5zZWN1cml0eU9yaWdpbigpKTsKLSAgICAgICAgICAgIHVwZGF0ZVJlcXVl
c3RGb3JBY2Nlc3NDb250cm9sKHJlcXVlc3QubXV0YWJsZVJlc291cmNlUmVxdWVzdCgpLCAqbV9l
bGVtZW50LmRvY3VtZW50KCkuc2VjdXJpdHlPcmlnaW4oKSwgYWxsb3dDcmVkZW50aWFscyk7Ci0g
ICAgICAgIH0KLSAgICAgICAgcmVxdWVzdC5zZXRDaGFyc2V0KHNjcmlwdENoYXJzZXQoKSk7Ci0g
ICAgICAgIHJlcXVlc3Quc2V0SW5pdGlhdG9yKCZlbGVtZW50KCkpOwotCi0gICAgICAgIG1fY2Fj
aGVkU2NyaXB0ID0gbV9lbGVtZW50LmRvY3VtZW50KCkuY2FjaGVkUmVzb3VyY2VMb2FkZXIoKS5y
ZXF1ZXN0U2NyaXB0KHJlcXVlc3QpOworICAgICAgICBtX2xvYWRhYmxlU2NyaXB0ID0gTG9hZGFi
bGVDbGFzc2ljU2NyaXB0OjpjcmVhdGUocmVxdWVzdENhY2hlZFNjcmlwdChtX2VsZW1lbnQuZG9j
dW1lbnQoKS5jb21wbGV0ZVVSTChzb3VyY2VVUkwpLCBtX2VsZW1lbnQuYXR0cmlidXRlV2l0aG91
dFN5bmNocm9uaXphdGlvbihIVE1MTmFtZXM6Om5vbmNlQXR0ciksIGNyb3NzT3JpZ2luTW9kZSks
IGNyb3NzT3JpZ2luTW9kZSwgKm1fZWxlbWVudC5kb2N1bWVudCgpLnNlY3VyaXR5T3JpZ2luKCkp
OwogICAgICAgICBtX2lzRXh0ZXJuYWxTY3JpcHQgPSB0cnVlOwogICAgIH0KIAotICAgIGlmICht
X2NhY2hlZFNjcmlwdCkKKyAgICBpZiAobV9sb2FkYWJsZVNjcmlwdCkKICAgICAgICAgcmV0dXJu
IHRydWU7CiAKICAgICBjYWxsT25NYWluVGhyZWFkKFt0aGlzLCBlbGVtZW50ID0gUmVmPEVsZW1l
bnQ+KG1fZWxlbWVudCldIHsKQEAgLTMxMSwxMyArMzIxLDYgQEAgdm9pZCBTY3JpcHRFbGVtZW50
OjpleGVjdXRlU2NyaXB0KGNvbnN0IFNjcmlwdFNvdXJjZUNvZGUmIHNvdXJjZUNvZGUpCiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgfQogCi0jaWYgRU5BQkxFKE5PU05JRkYpCi0gICAgaWYgKG1f
aXNFeHRlcm5hbFNjcmlwdCAmJiBtX2NhY2hlZFNjcmlwdCAmJiAhbV9jYWNoZWRTY3JpcHQtPm1p
bWVUeXBlQWxsb3dlZEJ5Tm9zbmlmZigpKSB7Ci0gICAgICAgIG1fZWxlbWVudC5kb2N1bWVudCgp
LmFkZENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2U6OlNlY3VyaXR5LCBNZXNzYWdlTGV2ZWw6
OkVycm9yLCAiUmVmdXNlZCB0byBleGVjdXRlIHNjcmlwdCBmcm9tICciICsgbV9jYWNoZWRTY3Jp
cHQtPnVybCgpLnN0cmluZ0NlbnRlckVsbGlwc2l6ZWRUb0xlbmd0aCgpICsgIicgYmVjYXVzZSBp
dHMgTUlNRSB0eXBlICgnIiArIG1fY2FjaGVkU2NyaXB0LT5taW1lVHlwZSgpICsgIicpIGlzIG5v
dCBleGVjdXRhYmxlLCBhbmQgc3RyaWN0IE1JTUUgdHlwZSBjaGVja2luZyBpcyBlbmFibGVkLiIp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotI2VuZGlmCi0KICAgICBSZWY8RG9jdW1lbnQ+IGRv
Y3VtZW50KG1fZWxlbWVudC5kb2N1bWVudCgpKTsKICAgICBpZiAoRnJhbWUqIGZyYW1lID0gZG9j
dW1lbnQtPmZyYW1lKCkpIHsKICAgICAgICAgSWdub3JlRGVzdHJ1Y3RpdmVXcml0ZUNvdW50SW5j
cmVtZW50ZXIgaWdub3JlRGVzY3RydWN0aXZlV3JpdGVDb3VudEluY3JlbWVudGVyKG1faXNFeHRl
cm5hbFNjcmlwdCA/IGRvY3VtZW50LnB0cigpIDogbnVsbHB0cik7CkBAIC0zMzIsNTEgKzMzNSw2
NyBAQCB2b2lkIFNjcmlwdEVsZW1lbnQ6OmV4ZWN1dGVTY3JpcHQoY29uc3QgU2NyaXB0U291cmNl
Q29kZSYgc291cmNlQ29kZSkKIAogdm9pZCBTY3JpcHRFbGVtZW50OjpzdG9wTG9hZFJlcXVlc3Qo
KQogewotICAgIGlmIChtX2NhY2hlZFNjcmlwdCkgeworICAgIGlmIChtX2xvYWRhYmxlU2NyaXB0
KSB7CiAgICAgICAgIGlmICghbV93aWxsQmVQYXJzZXJFeGVjdXRlZCkKLSAgICAgICAgICAgIG1f
Y2FjaGVkU2NyaXB0LT5yZW1vdmVDbGllbnQodGhpcyk7Ci0gICAgICAgIG1fY2FjaGVkU2NyaXB0
ID0gbnVsbHB0cjsKKyAgICAgICAgICAgIG1fbG9hZGFibGVTY3JpcHQtPnJlbW92ZUNsaWVudCgq
dGhpcyk7CisgICAgICAgIG1fbG9hZGFibGVTY3JpcHQgPSBudWxscHRyOwogICAgIH0KIH0KIAot
dm9pZCBTY3JpcHRFbGVtZW50OjpleGVjdXRlKENhY2hlZFNjcmlwdCogY2FjaGVkU2NyaXB0KQor
dm9pZCBTY3JpcHRFbGVtZW50OjpleGVjdXRlU2NyaXB0QW5kRGlzcGF0Y2hFdmVudChMb2FkYWJs
ZVNjcmlwdCYgbG9hZGFibGVTY3JpcHQpCiB7Ci0gICAgQVNTRVJUKCFtX3dpbGxCZVBhcnNlckV4
ZWN1dGVkKTsKLSAgICBBU1NFUlQoY2FjaGVkU2NyaXB0KTsKLSAgICBpZiAoY2FjaGVkU2NyaXB0
LT5lcnJvck9jY3VycmVkKCkpCisgICAgaWYgKE9wdGlvbmFsPExvYWRhYmxlU2NyaXB0OjpFcnJv
cj4gZXJyb3IgPSBsb2FkYWJsZVNjcmlwdC5lcnJvck9jY3VycmVkKCkpIHsKKyAgICAgICAgaWYg
KE9wdGlvbmFsPExvYWRhYmxlU2NyaXB0OjpDb25zb2xlTWVzc2FnZT4gbWVzc2FnZSA9IGVycm9y
LT5jb25zb2xlTWVzc2FnZSkKKyAgICAgICAgICAgIG1fZWxlbWVudC5kb2N1bWVudCgpLmFkZENv
bnNvbGVNZXNzYWdlKG1lc3NhZ2UtPnNvdXJjZSwgbWVzc2FnZS0+bGV2ZWwsIG1lc3NhZ2UtPm1l
c3NhZ2UpOwogICAgICAgICBkaXNwYXRjaEVycm9yRXZlbnQoKTsKLSAgICBlbHNlIGlmICghY2Fj
aGVkU2NyaXB0LT53YXNDYW5jZWxlZCgpKSB7Ci0gICAgICAgIGV4ZWN1dGVTY3JpcHQoU2NyaXB0
U291cmNlQ29kZShjYWNoZWRTY3JpcHQpKTsKKyAgICB9IGVsc2UgaWYgKCFsb2FkYWJsZVNjcmlw
dC53YXNDYW5jZWxlZCgpKSB7CisgICAgICAgIGV4ZWN1dGVTY3JpcHQobG9hZGFibGVTY3JpcHQp
OwogICAgICAgICBkaXNwYXRjaExvYWRFdmVudCgpOwogICAgIH0KLSAgICBjYWNoZWRTY3JpcHQt
PnJlbW92ZUNsaWVudCh0aGlzKTsKIH0KIAotdm9pZCBTY3JpcHRFbGVtZW50Ojpub3RpZnlGaW5p
c2hlZChDYWNoZWRSZXNvdXJjZSogcmVzb3VyY2UpCit2b2lkIFNjcmlwdEVsZW1lbnQ6OmV4ZWN1
dGVRdWV1ZWRTY3JpcHRBbmREaXNwYXRjaEV2ZW50KExvYWRhYmxlU2NyaXB0JiBsb2FkYWJsZVNj
cmlwdCkKIHsKICAgICBBU1NFUlQoIW1fd2lsbEJlUGFyc2VyRXhlY3V0ZWQpOworICAgIGV4ZWN1
dGVTY3JpcHRBbmREaXNwYXRjaEV2ZW50KGxvYWRhYmxlU2NyaXB0KTsKKyAgICBsb2FkYWJsZVNj
cmlwdC5yZW1vdmVDbGllbnQoKnRoaXMpOworfQogCi0gICAgLy8gQ2FjaGVkUmVzb3VyY2UgcG9z
c2libHkgaW52b2tlcyB0aGlzIG5vdGlmeUZpbmlzaGVkKCkgbW9yZSB0aGFuCi0gICAgLy8gb25j
ZSBiZWNhdXNlIFNjcmlwdEVsZW1lbnQgZG9lc24ndCB1bnN1YnNjcmliZSBpdHNlbGYgZnJvbQot
ICAgIC8vIENhY2hlZFJlc291cmNlIGhlcmUgYW5kIGRvZXMgaXQgaW4gZXhlY3V0ZSgpIGluc3Rl
YWQuCi0gICAgLy8gV2UgdXNlIG1fY2FjaGVkU2NyaXB0IHRvIGNoZWNrIGlmIHRoaXMgZnVuY3Rp
b24gaXMgYWxyZWFkeSBjYWxsZWQuCi0gICAgQVNTRVJUX1VOVVNFRChyZXNvdXJjZSwgcmVzb3Vy
Y2UgPT0gbV9jYWNoZWRTY3JpcHQpOwotICAgIGlmICghbV9jYWNoZWRTY3JpcHQpCi0gICAgICAg
IHJldHVybjsKK3ZvaWQgU2NyaXB0RWxlbWVudDo6ZXhlY3V0ZVBlbmRpbmdTY3JpcHRBbmREaXNw
YXRjaEV2ZW50KFBlbmRpbmdTY3JpcHQmIHBlbmRpbmdTY3JpcHQpCit7CisgICAgSWdub3JlRGVz
dHJ1Y3RpdmVXcml0ZUNvdW50SW5jcmVtZW50ZXIgaWdub3JlRGVzdHJ1Y3RpdmVXcml0ZUNvdW50
SW5jcmVtZW50ZXIoJm1fZWxlbWVudC5kb2N1bWVudCgpKTsKKyAgICBpZiAoYXV0byogbG9hZGFi
bGVTY3JpcHQgPSBwZW5kaW5nU2NyaXB0LmxvYWRhYmxlU2NyaXB0KCkpCisgICAgICAgIGV4ZWN1
dGVTY3JpcHRBbmREaXNwYXRjaEV2ZW50KCpsb2FkYWJsZVNjcmlwdCk7CisgICAgZWxzZSB7Cisg
ICAgICAgIEFTU0VSVCghcGVuZGluZ1NjcmlwdC5lcnJvck9jY3VycmVkKCkpOworICAgICAgICBl
eGVjdXRlU2NyaXB0KFNjcmlwdFNvdXJjZUNvZGUoc2NyaXB0Q29udGVudCgpLCBtX2VsZW1lbnQu
ZG9jdW1lbnQoKS51cmwoKSwgcGVuZGluZ1NjcmlwdC5zdGFydGluZ1Bvc2l0aW9uKCkpKTsKKyAg
ICAgICAgZGlzcGF0Y2hMb2FkRXZlbnQoKTsKKyAgICB9Cit9CiAKLSAgICBpZiAobV9yZXF1ZXN0
VXNlc0FjY2Vzc0NvbnRyb2wgJiYgIW1fY2FjaGVkU2NyaXB0LT5wYXNzZXNTYW1lT3JpZ2luUG9s
aWN5Q2hlY2soKm1fZWxlbWVudC5kb2N1bWVudCgpLnNlY3VyaXR5T3JpZ2luKCkpKSB7Ci0gICAg
ICAgIGRpc3BhdGNoRXJyb3JFdmVudCgpOwotICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8
U3RyaW5nPiBjb25zb2xlTWVzc2FnZShBU0NJSUxpdGVyYWwoIkNyb3NzLW9yaWdpbiBzY3JpcHQg
bG9hZCBkZW5pZWQgYnkgQ3Jvc3MtT3JpZ2luIFJlc291cmNlIFNoYXJpbmcgcG9saWN5LiIpKTsK
LSAgICAgICAgbV9lbGVtZW50LmRvY3VtZW50KCkuYWRkQ29uc29sZU1lc3NhZ2UoTWVzc2FnZVNv
dXJjZTo6SlMsIE1lc3NhZ2VMZXZlbDo6RXJyb3IsIGNvbnNvbGVNZXNzYWdlKTsKK3ZvaWQgU2Ny
aXB0RWxlbWVudDo6ZXhlY3V0ZVNjcmlwdChMb2FkYWJsZVNjcmlwdCYgbG9hZGFibGVTY3JpcHQp
Cit7CisgICAgQVNTRVJUKCFsb2FkYWJsZVNjcmlwdC5lcnJvck9jY3VycmVkKCkpOworICAgIGxv
YWRhYmxlU2NyaXB0LmV4ZWN1dGUoKnRoaXMpOworfQorCit2b2lkIFNjcmlwdEVsZW1lbnQ6Om5v
dGlmeUZpbmlzaGVkKExvYWRhYmxlU2NyaXB0JikKK3sKKyAgICBBU1NFUlQoIW1fd2lsbEJlUGFy
c2VyRXhlY3V0ZWQpOworCisgICAgLy8gTG9hZGFibGVTY3JpcHQgcG9zc2libHkgaW52b2tlcyB0
aGlzIG5vdGlmeUZpbmlzaGVkKCkgbW9yZSB0aGFuCisgICAgLy8gb25jZSBiZWNhdXNlIFNjcmlw
dEVsZW1lbnQgZG9lc24ndCB1bnN1YnNjcmliZSBpdHNlbGYgZnJvbQorICAgIC8vIExvYWRhYmxl
U2NyaXB0IGhlcmUgYW5kIGRvZXMgaXQgaW4gZXhlY3V0ZSgpIGluc3RlYWQuCisgICAgLy8gV2Ug
dXNlIG1fbG9hZGFibGVTY3JpcHQgdG8gY2hlY2sgaWYgdGhpcyBmdW5jdGlvbiBpcyBhbHJlYWR5
IGNhbGxlZC4KKyAgICBpZiAoIW1fbG9hZGFibGVTY3JpcHQpCiAgICAgICAgIHJldHVybjsKLSAg
ICB9CiAKICAgICBpZiAobV93aWxsRXhlY3V0ZUluT3JkZXIpCiAgICAgICAgIG1fZWxlbWVudC5k
b2N1bWVudCgpLnNjcmlwdFJ1bm5lcigpLT5ub3RpZnlTY3JpcHRSZWFkeSh0aGlzLCBTY3JpcHRS
dW5uZXI6OklOX09SREVSX0VYRUNVVElPTik7CiAgICAgZWxzZQogICAgICAgICBtX2VsZW1lbnQu
ZG9jdW1lbnQoKS5zY3JpcHRSdW5uZXIoKS0+bm90aWZ5U2NyaXB0UmVhZHkodGhpcywgU2NyaXB0
UnVubmVyOjpBU1lOQ19FWEVDVVRJT04pOwogCi0gICAgbV9jYWNoZWRTY3JpcHQgPSBudWxscHRy
OworICAgIG1fbG9hZGFibGVTY3JpcHQgPSBudWxscHRyOwogfQogCiBib29sIFNjcmlwdEVsZW1l
bnQ6Omlnbm9yZXNMb2FkUmVxdWVzdCgpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vU2NyaXB0RWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdEVsZW1lbnQu
aAppbmRleCAxYWE0ZjJlODNiMzExMTcxMjQ2YTIzMGU2NTg4MDYyZjljZjNkMDg0Li5lNGU1YTQ1
ODM2OTQwOWU1NTY3ZTY2ZDM1YTViNzlhYWU4NTIzNjQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vU2NyaXB0RWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRF
bGVtZW50LmgKQEAgLTE4LDEyICsxOCwxNCBAQAogICoKICAqLwogCi0jaWZuZGVmIFNjcmlwdEVs
ZW1lbnRfaAotI2RlZmluZSBTY3JpcHRFbGVtZW50X2gKKyNwcmFnbWEgb25jZQogCiAjaW5jbHVk
ZSAiQ2FjaGVkUmVzb3VyY2VDbGllbnQuaCIKICNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUhhbmRs
ZS5oIgorI2luY2x1ZGUgIkxvYWRhYmxlU2NyaXB0LmgiCisjaW5jbHVkZSAiTG9hZGFibGVTY3Jp
cHRDbGllbnQuaCIKICNpbmNsdWRlICJUaW1lci5oIgorI2luY2x1ZGUgIlVSTC5oIgogI2luY2x1
ZGUgPHd0Zi90ZXh0L1RleHRQb3NpdGlvbi5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmlu
Zy5oPgogCkBAIC0zMiwxMCArMzQsMTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgQ2Fj
aGVkU2NyaXB0OwogY2xhc3MgQ29udGFpbmVyTm9kZTsKIGNsYXNzIEVsZW1lbnQ7CitjbGFzcyBQ
ZW5kaW5nU2NyaXB0OwogY2xhc3MgU2NyaXB0RWxlbWVudDsKIGNsYXNzIFNjcmlwdFNvdXJjZUNv
ZGU7CiAKLWNsYXNzIFNjcmlwdEVsZW1lbnQgOiBwcml2YXRlIENhY2hlZFJlc291cmNlQ2xpZW50
IHsKK2NsYXNzIFNjcmlwdEVsZW1lbnQgOiBwcml2YXRlIExvYWRhYmxlU2NyaXB0Q2xpZW50IHsK
IHB1YmxpYzoKICAgICB2aXJ0dWFsIH5TY3JpcHRFbGVtZW50KCk7CiAKQEAgLTQ4LDcgKzUxLDkg
QEAgY2xhc3MgU2NyaXB0RWxlbWVudCA6IHByaXZhdGUgQ2FjaGVkUmVzb3VyY2VDbGllbnQgewog
ICAgIFN0cmluZyBzY3JpcHRDaGFyc2V0KCkgY29uc3QgeyByZXR1cm4gbV9jaGFyYWN0ZXJFbmNv
ZGluZzsgfQogICAgIFdFQkNPUkVfRVhQT1JUIFN0cmluZyBzY3JpcHRDb250ZW50KCkgY29uc3Q7
CiAgICAgdm9pZCBleGVjdXRlU2NyaXB0KGNvbnN0IFNjcmlwdFNvdXJjZUNvZGUmKTsKLSAgICB2
b2lkIGV4ZWN1dGUoQ2FjaGVkU2NyaXB0Kik7CisKKyAgICB2b2lkIGV4ZWN1dGVRdWV1ZWRTY3Jp
cHRBbmREaXNwYXRjaEV2ZW50KExvYWRhYmxlU2NyaXB0Jik7CisgICAgdm9pZCBleGVjdXRlUGVu
ZGluZ1NjcmlwdEFuZERpc3BhdGNoRXZlbnQoUGVuZGluZ1NjcmlwdCYpOwogCiAgICAgLy8gWE1M
IHBhcnNlciBjYWxscyB0aGVzZQogICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaExvYWRFdmVudCgp
ID0gMDsKQEAgLTU4LDcgKzYzLDcgQEAgY2xhc3MgU2NyaXB0RWxlbWVudCA6IHByaXZhdGUgQ2Fj
aGVkUmVzb3VyY2VDbGllbnQgewogICAgIGJvb2wgd2lsbEJlUGFyc2VyRXhlY3V0ZWQoKSBjb25z
dCB7IHJldHVybiBtX3dpbGxCZVBhcnNlckV4ZWN1dGVkOyB9CiAgICAgYm9vbCByZWFkeVRvQmVQ
YXJzZXJFeGVjdXRlZCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVhZHlUb0JlUGFyc2VyRXhlY3V0ZWQ7
IH0KICAgICBib29sIHdpbGxFeGVjdXRlV2hlbkRvY3VtZW50RmluaXNoZWRQYXJzaW5nKCkgY29u
c3QgeyByZXR1cm4gbV93aWxsRXhlY3V0ZVdoZW5Eb2N1bWVudEZpbmlzaGVkUGFyc2luZzsgfQot
ICAgIENhY2hlZFJlc291cmNlSGFuZGxlPENhY2hlZFNjcmlwdD4gY2FjaGVkU2NyaXB0KCkgeyBy
ZXR1cm4gbV9jYWNoZWRTY3JpcHQ7IH0KKyAgICBMb2FkYWJsZVNjcmlwdCogbG9hZGFibGVTY3Jp
cHQoKSB7IHJldHVybiBtX2xvYWRhYmxlU2NyaXB0LmdldCgpOyB9CiAKIHByb3RlY3RlZDoKICAg
ICBTY3JpcHRFbGVtZW50KEVsZW1lbnQmLCBib29sIGNyZWF0ZWRCeVBhcnNlciwgYm9vbCBpc0V2
YWx1YXRlZCk7CkBAIC03MiwyMCArNzcsMjUgQEAgY2xhc3MgU2NyaXB0RWxlbWVudCA6IHByaXZh
dGUgQ2FjaGVkUmVzb3VyY2VDbGllbnQgewogICAgIGJvb2wgc2hvdWxkQ2FsbEZpbmlzaGVkSW5z
ZXJ0aW5nU3VidHJlZShDb250YWluZXJOb2RlJik7CiAgICAgdm9pZCBmaW5pc2hlZEluc2VydGlu
Z1N1YnRyZWUoKTsKICAgICB2b2lkIGNoaWxkcmVuQ2hhbmdlZCgpOwotICAgIHZvaWQgaGFuZGxl
U291cmNlQXR0cmlidXRlKGNvbnN0IFN0cmluZyYgc291cmNlVXJsKTsKKyAgICB2b2lkIGhhbmRs
ZVNvdXJjZUF0dHJpYnV0ZShjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCk7CiAgICAgdm9pZCBoYW5k
bGVBc3luY0F0dHJpYnV0ZSgpOwogCiBwcml2YXRlOgorICAgIHZvaWQgZXhlY3V0ZVNjcmlwdChM
b2FkYWJsZVNjcmlwdCYpOworICAgIHZvaWQgZXhlY3V0ZVNjcmlwdEFuZERpc3BhdGNoRXZlbnQo
TG9hZGFibGVTY3JpcHQmKTsKKwogICAgIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcv
bXVsdGlwYWdlL3NjcmlwdGluZy5odG1sI2NvbmNlcHQtc2NyaXB0LXR5cGUKICAgICBlbnVtIGNs
YXNzIFNjcmlwdFR5cGUgeyBDbGFzc2ljLCBNb2R1bGUgfTsKICAgICBPcHRpb25hbDxTY3JpcHRU
eXBlPiBkZXRlcm1pbmVTY3JpcHRUeXBlKExlZ2FjeVR5cGVTdXBwb3J0KSBjb25zdDsKICAgICBi
b29sIGlnbm9yZXNMb2FkUmVxdWVzdCgpIGNvbnN0OwogICAgIGJvb2wgaXNTY3JpcHRGb3JFdmVu
dFN1cHBvcnRlZCgpIGNvbnN0OwogCi0gICAgYm9vbCByZXF1ZXN0U2NyaXB0KGNvbnN0IFN0cmlu
ZyYgc291cmNlVXJsKTsKKyAgICBDYWNoZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRTY3JpcHQ+IHJl
cXVlc3RDYWNoZWRTY3JpcHQoY29uc3QgVVJMJiwgY29uc3QgU3RyaW5nJiBub25jZUF0dHJpYnV0
ZSwgY29uc3QgU3RyaW5nJiBjcm9zc29yaWdpbkF0dHJpYnV0ZSk7CisKKyAgICBib29sIHJlcXVl
c3RDbGFzc2ljU2NyaXB0KGNvbnN0IFN0cmluZyYgc291cmNlVVJMKTsKICAgICB2b2lkIHN0b3BM
b2FkUmVxdWVzdCgpOwogCi0gICAgdm9pZCBub3RpZnlGaW5pc2hlZChDYWNoZWRSZXNvdXJjZSop
IG92ZXJyaWRlOworICAgIHZvaWQgbm90aWZ5RmluaXNoZWQoTG9hZGFibGVTY3JpcHQmKSBvdmVy
cmlkZTsKIAogICAgIHZpcnR1YWwgU3RyaW5nIHNvdXJjZUF0dHJpYnV0ZVZhbHVlKCkgY29uc3Qg
PSAwOwogICAgIHZpcnR1YWwgU3RyaW5nIGNoYXJzZXRBdHRyaWJ1dGVWYWx1ZSgpIGNvbnN0ID0g
MDsKQEAgLTk4LDcgKzEwOCw2IEBAIGNsYXNzIFNjcmlwdEVsZW1lbnQgOiBwcml2YXRlIENhY2hl
ZFJlc291cmNlQ2xpZW50IHsKICAgICB2aXJ0dWFsIGJvb2wgaGFzU291cmNlQXR0cmlidXRlKCkg
Y29uc3QgPSAwOwogCiAgICAgRWxlbWVudCYgbV9lbGVtZW50OwotICAgIENhY2hlZFJlc291cmNl
SGFuZGxlPENhY2hlZFNjcmlwdD4gbV9jYWNoZWRTY3JpcHQ7CiAgICAgV1RGOjpPcmRpbmFsTnVt
YmVyIG1fc3RhcnRMaW5lTnVtYmVyOwogICAgIGJvb2wgbV9wYXJzZXJJbnNlcnRlZCA6IDE7CiAg
ICAgYm9vbCBtX2lzRXh0ZXJuYWxTY3JpcHQgOiAxOwpAQCAtMTA5LDE0ICsxMTgsMTIgQEAgY2xh
c3MgU2NyaXB0RWxlbWVudCA6IHByaXZhdGUgQ2FjaGVkUmVzb3VyY2VDbGllbnQgewogICAgIGJv
b2wgbV93aWxsRXhlY3V0ZVdoZW5Eb2N1bWVudEZpbmlzaGVkUGFyc2luZyA6IDE7CiAgICAgYm9v
bCBtX2ZvcmNlQXN5bmMgOiAxOwogICAgIGJvb2wgbV93aWxsRXhlY3V0ZUluT3JkZXIgOiAxOwot
ICAgIGJvb2wgbV9yZXF1ZXN0VXNlc0FjY2Vzc0NvbnRyb2wgOiAxOwogICAgIFN0cmluZyBtX2No
YXJhY3RlckVuY29kaW5nOwogICAgIFN0cmluZyBtX2ZhbGxiYWNrQ2hhcmFjdGVyRW5jb2Rpbmc7
CisgICAgUmVmUHRyPExvYWRhYmxlU2NyaXB0PiBtX2xvYWRhYmxlU2NyaXB0OwogfTsKIAogLy8g
RklYTUU6IHJlcGxhY2Ugd2l0aCBkb3duY2FzdDxTY3JpcHRFbGVtZW50Pi4KIFNjcmlwdEVsZW1l
bnQqIHRvU2NyaXB0RWxlbWVudElmUG9zc2libGUoRWxlbWVudCopOwogCiB9Ci0KLSNlbmRpZgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdFJ1bm5lci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9kb20vU2NyaXB0UnVubmVyLmNwcAppbmRleCBhNTU4ZmFlNjExNDc3NGNmNzc2NzE4
ZGMyMDNjMGVhZGUwN2FlNDhmLi4zYmMyNzIwNWE2ZmJkODQxYTA1NDc5NDk0ZmY4OGI0MWI4YjRh
NTIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0UnVubmVyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0UnVubmVyLmNwcApAQCAtMjYsNyArMjYsNiBAQAog
I2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlNjcmlwdFJ1bm5lci5oIgogCi0jaW5jbHVk
ZSAiQ2FjaGVkU2NyaXB0LmgiCiAjaW5jbHVkZSAiRWxlbWVudC5oIgogI2luY2x1ZGUgIlBlbmRp
bmdTY3JpcHQuaCIKICNpbmNsdWRlICJTY3JpcHRFbGVtZW50LmgiCkBAIC00OSwxMCArNDgsOSBA
QCBTY3JpcHRSdW5uZXI6On5TY3JpcHRSdW5uZXIoKQogICAgICAgICBtX2RvY3VtZW50LmRlY3Jl
bWVudExvYWRFdmVudERlbGF5Q291bnQoKTsKIH0KIAotdm9pZCBTY3JpcHRSdW5uZXI6OnF1ZXVl
U2NyaXB0Rm9yRXhlY3V0aW9uKFNjcmlwdEVsZW1lbnQqIHNjcmlwdEVsZW1lbnQsIENhY2hlZFJl
c291cmNlSGFuZGxlPENhY2hlZFNjcmlwdD4gY2FjaGVkU2NyaXB0LCBFeGVjdXRpb25UeXBlIGV4
ZWN1dGlvblR5cGUpCit2b2lkIFNjcmlwdFJ1bm5lcjo6cXVldWVTY3JpcHRGb3JFeGVjdXRpb24o
U2NyaXB0RWxlbWVudCogc2NyaXB0RWxlbWVudCwgTG9hZGFibGVTY3JpcHQmIGxvYWRhYmxlU2Ny
aXB0LCBFeGVjdXRpb25UeXBlIGV4ZWN1dGlvblR5cGUpCiB7CiAgICAgQVNTRVJUKHNjcmlwdEVs
ZW1lbnQpOwotICAgIEFTU0VSVChjYWNoZWRTY3JpcHQuZ2V0KCkpOwogCiAgICAgRWxlbWVudCYg
ZWxlbWVudCA9IHNjcmlwdEVsZW1lbnQtPmVsZW1lbnQoKTsKICAgICBBU1NFUlQoZWxlbWVudC5p
bkRvY3VtZW50KCkpOwpAQCAtNjEsMTEgKzU5LDExIEBAIHZvaWQgU2NyaXB0UnVubmVyOjpxdWV1
ZVNjcmlwdEZvckV4ZWN1dGlvbihTY3JpcHRFbGVtZW50KiBzY3JpcHRFbGVtZW50LCBDYWNoZWRS
CiAKICAgICBzd2l0Y2ggKGV4ZWN1dGlvblR5cGUpIHsKICAgICBjYXNlIEFTWU5DX0VYRUNVVElP
TjoKLSAgICAgICAgbV9wZW5kaW5nQXN5bmNTY3JpcHRzLmFkZChzY3JpcHRFbGVtZW50LCBQZW5k
aW5nU2NyaXB0OjpjcmVhdGUoZWxlbWVudCwgKmNhY2hlZFNjcmlwdCkpOworICAgICAgICBtX3Bl
bmRpbmdBc3luY1NjcmlwdHMuYWRkKHNjcmlwdEVsZW1lbnQsIFBlbmRpbmdTY3JpcHQ6OmNyZWF0
ZShlbGVtZW50LCBsb2FkYWJsZVNjcmlwdCkpOwogICAgICAgICBicmVhazsKIAogICAgIGNhc2Ug
SU5fT1JERVJfRVhFQ1VUSU9OOgotICAgICAgICBtX3NjcmlwdHNUb0V4ZWN1dGVJbk9yZGVyLmFw
cGVuZChQZW5kaW5nU2NyaXB0OjpjcmVhdGUoZWxlbWVudCwgKmNhY2hlZFNjcmlwdCkpOworICAg
ICAgICBtX3NjcmlwdHNUb0V4ZWN1dGVJbk9yZGVyLmFwcGVuZChQZW5kaW5nU2NyaXB0OjpjcmVh
dGUoZWxlbWVudCwgbG9hZGFibGVTY3JpcHQpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogfQpA
QCAtMTE1LDkgKzExMyw5IEBAIHZvaWQgU2NyaXB0UnVubmVyOjp0aW1lckZpcmVkKCkKICAgICAg
ICAgLy8gUGFwZXIgb3ZlciBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTQ0MDUwCiAgICAgICAgIGlmICghc2NyaXB0KQogICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgIGF1dG8qIHNjcmlwdEVsZW1lbnQgPSB0b1NjcmlwdEVsZW1lbnRJZlBvc3NpYmxlKCZzY3Jp
cHQtPmVsZW1lbnQoKSk7Ci0gICAgICAgIEFTU0VSVChzY3JpcHRFbGVtZW50KTsKLSAgICAgICAg
c2NyaXB0RWxlbWVudC0+ZXhlY3V0ZShzY3JpcHQtPmNhY2hlZFNjcmlwdCgpKTsKKyAgICAgICAg
QVNTRVJUKHRvU2NyaXB0RWxlbWVudElmUG9zc2libGUoJnNjcmlwdC0+ZWxlbWVudCgpKSk7Cisg
ICAgICAgIEFTU0VSVChzY3JpcHQtPm5lZWRzTG9hZGluZygpKTsKKyAgICAgICAgdG9TY3JpcHRF
bGVtZW50SWZQb3NzaWJsZSgmc2NyaXB0LT5lbGVtZW50KCkpLT5leGVjdXRlUXVldWVkU2NyaXB0
QW5kRGlzcGF0Y2hFdmVudCgqc2NyaXB0LT5sb2FkYWJsZVNjcmlwdCgpKTsKICAgICAgICAgbV9k
b2N1bWVudC5kZWNyZW1lbnRMb2FkRXZlbnREZWxheUNvdW50KCk7CiAgICAgfQogfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdFJ1bm5lci5oIGIvU291cmNlL1dlYkNvcmUv
ZG9tL1NjcmlwdFJ1bm5lci5oCmluZGV4IGJhNDE5ZmE5MDdhYzhlZDVhMzM3Mzk0ODM5NWVhZWQx
ODNkNmJjM2MuLmVlZTFhMjYzYTkzOTlkZDAzODAyNmMwMDY2Y2FiMzhmNmIzZDM1NzcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRSdW5uZXIuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9kb20vU2NyaXB0UnVubmVyLmgKQEAgLTIzLDEwICsyMyw4IEBACiAgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKICAqLwogCi0jaWZuZGVmIFNjcmlwdFJ1bm5lcl9oCi0jZGVmaW5lIFNjcmlwdFJ1bm5lcl9o
CisjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlSGFuZGxlLmgiCiAjaW5j
bHVkZSAiVGltZXIuaCIKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9O
b25jb3B5YWJsZS5oPgpAQCAtMzQsMTAgKzMyLDEwIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotY2xhc3MgQ2FjaGVkU2NyaXB0OwogY2xhc3MgRG9jdW1lbnQ7CiBjbGFzcyBQZW5kaW5nU2Ny
aXB0OwogY2xhc3MgU2NyaXB0RWxlbWVudDsKK2NsYXNzIExvYWRhYmxlU2NyaXB0OwogCiBjbGFz
cyBTY3JpcHRSdW5uZXIgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFNjcmlwdFJ1bm5lcik7
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwpAQCAtNDYsNyArNDQsNyBAQCBjbGFzcyBTY3JpcHRS
dW5uZXIgewogICAgIH5TY3JpcHRSdW5uZXIoKTsKIAogICAgIGVudW0gRXhlY3V0aW9uVHlwZSB7
IEFTWU5DX0VYRUNVVElPTiwgSU5fT1JERVJfRVhFQ1VUSU9OIH07Ci0gICAgdm9pZCBxdWV1ZVNj
cmlwdEZvckV4ZWN1dGlvbihTY3JpcHRFbGVtZW50KiwgQ2FjaGVkUmVzb3VyY2VIYW5kbGU8Q2Fj
aGVkU2NyaXB0PiwgRXhlY3V0aW9uVHlwZSk7CisgICAgdm9pZCBxdWV1ZVNjcmlwdEZvckV4ZWN1
dGlvbihTY3JpcHRFbGVtZW50KiwgTG9hZGFibGVTY3JpcHQmLCBFeGVjdXRpb25UeXBlKTsKICAg
ICBib29sIGhhc1BlbmRpbmdTY3JpcHRzKCkgY29uc3QgeyByZXR1cm4gIW1fc2NyaXB0c1RvRXhl
Y3V0ZVNvb24uaXNFbXB0eSgpIHx8ICFtX3NjcmlwdHNUb0V4ZWN1dGVJbk9yZGVyLmlzRW1wdHko
KSB8fCAhbV9wZW5kaW5nQXN5bmNTY3JpcHRzLmlzRW1wdHkoKTsgfQogICAgIHZvaWQgc3VzcGVu
ZCgpOwogICAgIHZvaWQgcmVzdW1lKCk7CkBAIC02Myw1ICs2MSwzIEBAIGNsYXNzIFNjcmlwdFJ1
bm5lciB7CiB9OwogCiB9Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRt
bC9wYXJzZXIvSFRNTFNjcmlwdFJ1bm5lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNl
ci9IVE1MU2NyaXB0UnVubmVyLmNwcAppbmRleCBlYjc3ODg0MTcwNDgxOTJjZjVlYjA1MGM2YzUy
Nzg3ZjZhMDQ5ODBlLi45YTZiYmFkOTMzMDI0MWIxZTFiN2RjMTI2MjgyMjdjNWU0MDM4NGMwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MU2NyaXB0UnVubmVyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MU2NyaXB0UnVubmVyLmNwcApA
QCAtMjYsOCArMjYsNiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkhUTUxTY3Jp
cHRSdW5uZXIuaCIKIAotI2luY2x1ZGUgIkNhY2hlZFNjcmlwdC5oIgotI2luY2x1ZGUgIkNhY2hl
ZFJlc291cmNlTG9hZGVyLmgiCiAjaW5jbHVkZSAiRWxlbWVudC5oIgogI2luY2x1ZGUgIkV2ZW50
LmgiCiAjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgpAQCAtODksMTcgKzg3LDYgQEAgaW5saW5lIFJl
ZjxFdmVudD4gY3JlYXRlU2NyaXB0TG9hZEV2ZW50KCkKICAgICByZXR1cm4gRXZlbnQ6OmNyZWF0
ZShldmVudE5hbWVzKCkubG9hZEV2ZW50LCBmYWxzZSwgZmFsc2UpOwogfQogCi1TY3JpcHRTb3Vy
Y2VDb2RlIEhUTUxTY3JpcHRSdW5uZXI6OnNvdXJjZUZyb21QZW5kaW5nU2NyaXB0KGNvbnN0IFBl
bmRpbmdTY3JpcHQmIHNjcmlwdCwgYm9vbCYgZXJyb3JPY2N1cnJlZCkgY29uc3QKLXsKLSAgICBp
ZiAoc2NyaXB0LmNhY2hlZFNjcmlwdCgpKSB7Ci0gICAgICAgIGVycm9yT2NjdXJyZWQgPSBzY3Jp
cHQuY2FjaGVkU2NyaXB0KCktPmVycm9yT2NjdXJyZWQoKTsKLSAgICAgICAgQVNTRVJUKHNjcmlw
dC5jYWNoZWRTY3JpcHQoKS0+aXNMb2FkZWQoKSk7Ci0gICAgICAgIHJldHVybiBTY3JpcHRTb3Vy
Y2VDb2RlKHNjcmlwdC5jYWNoZWRTY3JpcHQoKSk7Ci0gICAgfQotICAgIGVycm9yT2NjdXJyZWQg
PSBmYWxzZTsKLSAgICByZXR1cm4gU2NyaXB0U291cmNlQ29kZShzY3JpcHQuZWxlbWVudCgpLnRl
eHRDb250ZW50KCksIGRvY3VtZW50VVJMRm9yU2NyaXB0RXhlY3V0aW9uKG1fZG9jdW1lbnQpLCBz
Y3JpcHQuc3RhcnRpbmdQb3NpdGlvbigpKTsKLX0KLQogYm9vbCBIVE1MU2NyaXB0UnVubmVyOjpp
c1BlbmRpbmdTY3JpcHRSZWFkeShjb25zdCBQZW5kaW5nU2NyaXB0JiBzY3JpcHQpCiB7CiAgICAg
aWYgKCFtX2RvY3VtZW50KQpAQCAtMTI1LDkgKzExMiw2IEBAIHZvaWQgSFRNTFNjcmlwdFJ1bm5l
cjo6ZXhlY3V0ZVBhcnNpbmdCbG9ja2luZ1NjcmlwdCgpCiAKIHZvaWQgSFRNTFNjcmlwdFJ1bm5l
cjo6ZXhlY3V0ZVBlbmRpbmdTY3JpcHRBbmREaXNwYXRjaEV2ZW50KFJlZlB0cjxQZW5kaW5nU2Ny
aXB0PiBwZW5kaW5nU2NyaXB0KQogewotICAgIGJvb2wgZXJyb3JPY2N1cnJlZCA9IGZhbHNlOwot
ICAgIFNjcmlwdFNvdXJjZUNvZGUgc291cmNlQ29kZSA9IHNvdXJjZUZyb21QZW5kaW5nU2NyaXB0
KCpwZW5kaW5nU2NyaXB0LCBlcnJvck9jY3VycmVkKTsKLQogICAgIC8vIFN0b3Agd2F0Y2hpbmcg
bG9hZHMgYmVmb3JlIGV4ZWN1dGVTY3JpcHQgdG8gcHJldmVudCByZWN1cnNpb24gaWYgdGhlIHNj
cmlwdCByZWxvYWRzIGl0c2VsZi4KICAgICBpZiAocGVuZGluZ1NjcmlwdC0+d2F0Y2hpbmdGb3JM
b2FkKCkpCiAgICAgICAgIHN0b3BXYXRjaGluZ0ZvckxvYWQoKnBlbmRpbmdTY3JpcHQpOwpAQCAt
MTM3LDE0ICsxMjEsNyBAQCB2b2lkIEhUTUxTY3JpcHRSdW5uZXI6OmV4ZWN1dGVQZW5kaW5nU2Ny
aXB0QW5kRGlzcGF0Y2hFdmVudChSZWZQdHI8UGVuZGluZ1NjcmlwdAogCiAgICAgaWYgKGF1dG8q
IHNjcmlwdEVsZW1lbnQgPSB0b1NjcmlwdEVsZW1lbnRJZlBvc3NpYmxlKCZwZW5kaW5nU2NyaXB0
LT5lbGVtZW50KCkpKSB7CiAgICAgICAgIE5lc3RpbmdMZXZlbEluY3JlbWVudGVyIG5lc3RpbmdM
ZXZlbEluY3JlbWVudGVyKG1fc2NyaXB0TmVzdGluZ0xldmVsKTsKLSAgICAgICAgSWdub3JlRGVz
dHJ1Y3RpdmVXcml0ZUNvdW50SW5jcmVtZW50ZXIgaWdub3JlRGVzdHJ1Y3RpdmVXcml0ZUNvdW50
SW5jcmVtZW50ZXIobV9kb2N1bWVudCk7Ci0gICAgICAgIGlmIChlcnJvck9jY3VycmVkKQotICAg
ICAgICAgICAgc2NyaXB0RWxlbWVudC0+ZGlzcGF0Y2hFcnJvckV2ZW50KCk7Ci0gICAgICAgIGVs
c2UgewotICAgICAgICAgICAgQVNTRVJUKGlzRXhlY3V0aW5nU2NyaXB0KCkpOwotICAgICAgICAg
ICAgc2NyaXB0RWxlbWVudC0+ZXhlY3V0ZVNjcmlwdChzb3VyY2VDb2RlKTsKLSAgICAgICAgICAg
IHBlbmRpbmdTY3JpcHQtPmVsZW1lbnQoKS5kaXNwYXRjaEV2ZW50KGNyZWF0ZVNjcmlwdExvYWRF
dmVudCgpKTsKLSAgICAgICAgfQorICAgICAgICBzY3JpcHRFbGVtZW50LT5leGVjdXRlUGVuZGlu
Z1NjcmlwdEFuZERpc3BhdGNoRXZlbnQoKnBlbmRpbmdTY3JpcHQpOwogICAgIH0KICAgICBBU1NF
UlQoIWlzRXhlY3V0aW5nU2NyaXB0KCkpOwogfQpAQCAtMjM2LDggKzIxMyw4IEBAIHN0YXRpYyBS
ZWY8UGVuZGluZ1NjcmlwdD4gcmVxdWVzdFBlbmRpbmdTY3JpcHQoRWxlbWVudCogc2NyaXB0KQog
ewogICAgIGF1dG8mIHNjcmlwdEVsZW1lbnQgPSAqdG9TY3JpcHRFbGVtZW50SWZQb3NzaWJsZShz
Y3JpcHQpOwogICAgIEFTU0VSVChzY3JpcHRFbGVtZW50LndpbGxCZVBhcnNlckV4ZWN1dGVkKCkp
OwotICAgIEFTU0VSVChzY3JpcHRFbGVtZW50LmNhY2hlZFNjcmlwdCgpKTsKLSAgICByZXR1cm4g
UGVuZGluZ1NjcmlwdDo6Y3JlYXRlKCpzY3JpcHQsICpzY3JpcHRFbGVtZW50LmNhY2hlZFNjcmlw
dCgpKTsKKyAgICBBU1NFUlQoc2NyaXB0RWxlbWVudC5sb2FkYWJsZVNjcmlwdCgpKTsKKyAgICBy
ZXR1cm4gUGVuZGluZ1NjcmlwdDo6Y3JlYXRlKCpzY3JpcHQsICpzY3JpcHRFbGVtZW50LmxvYWRh
YmxlU2NyaXB0KCkpOwogfQogCiB2b2lkIEhUTUxTY3JpcHRSdW5uZXI6OnJlcXVlc3RQYXJzaW5n
QmxvY2tpbmdTY3JpcHQoRWxlbWVudCogZWxlbWVudCkKQEAgLTI0Niw3ICsyMjMsNyBAQCB2b2lk
IEhUTUxTY3JpcHRSdW5uZXI6OnJlcXVlc3RQYXJzaW5nQmxvY2tpbmdTY3JpcHQoRWxlbWVudCog
ZWxlbWVudCkKICAgICBtX3BhcnNlckJsb2NraW5nU2NyaXB0ID0gcmVxdWVzdFBlbmRpbmdTY3Jp
cHQoZWxlbWVudCk7CiAgICAgQVNTRVJUKG1fcGFyc2VyQmxvY2tpbmdTY3JpcHQtPm5lZWRzTG9h
ZGluZygpKTsKIAotICAgIC8vIFdlIG9ubHkgY2FyZSBhYm91dCBhIGxvYWQgY2FsbGJhY2sgaWYg
Y2FjaGVkU2NyaXB0IGlzIG5vdCBhbHJlYWR5CisgICAgLy8gV2Ugb25seSBjYXJlIGFib3V0IGEg
bG9hZCBjYWxsYmFjayBpZiBMb2FkYWJsZVNjcmlwdCBpcyBub3QgYWxyZWFkeQogICAgIC8vIGlu
IHRoZSBjYWNoZS4gQ2FsbGVycyB3aWxsIGF0dGVtcHQgdG8gcnVuIHRoZSBtX3BhcnNlckJsb2Nr
aW5nU2NyaXB0CiAgICAgLy8gaWYgcG9zc2libGUgYmVmb3JlIHJldHVybmluZyBjb250cm9sIHRv
IHRoZSBwYXJzZXIuCiAgICAgaWYgKCFtX3BhcnNlckJsb2NraW5nU2NyaXB0LT5pc0xvYWRlZCgp
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFNjcmlwdFJ1bm5l
ci5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFNjcmlwdFJ1bm5lci5oCmluZGV4
IGU2YjVlZDUyNjg1OTI4MDUxMTEzMjcwN2NlMDEyOTU3NmY3MWM0OTQuLjkxZDg4NmMzOGE2ZWQx
ZmVlMTlhYzlmYjU3OGJkODU5MzNlNjVkNGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvcGFyc2VyL0hUTUxTY3JpcHRSdW5uZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3Bh
cnNlci9IVE1MU2NyaXB0UnVubmVyLmgKQEAgLTMyLDggKzMyLDYgQEAKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi1jbGFzcyBDYWNoZWRSZXNvdXJjZTsKLWNsYXNzIENhY2hlZFNjcmlwdDsKIGNs
YXNzIERvY3VtZW50OwogY2xhc3MgRWxlbWVudDsKIGNsYXNzIEZyYW1lOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9YTUxEb2N1bWVudFBhcnNlckxpYnhtbDIuY3BwIGIv
U291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9YTUxEb2N1bWVudFBhcnNlckxpYnhtbDIuY3BwCmlu
ZGV4IGE5OWY5ZGU3MjczYTU2MmUxNDZkOTM1MzI5MmEwNTAwYjQ0NDhkN2QuLjhkZDcxOWVjZGU1
Mzg1YTZmN2Q3NGE2Y2ZkNThkNDJkYTBjNzQyYTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3htbC9wYXJzZXIvWE1MRG9jdW1lbnRQYXJzZXJMaWJ4bWwyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS94bWwvcGFyc2VyL1hNTERvY3VtZW50UGFyc2VyTGlieG1sMi5jcHAKQEAgLTQ1LDYgKzQ1
LDcgQEAKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJIVE1MU3R5bGVFbGVtZW50
LmgiCiAjaW5jbHVkZSAiSFRNTFRlbXBsYXRlRWxlbWVudC5oIgorI2luY2x1ZGUgIkxvYWRhYmxl
Q2xhc3NpY1NjcmlwdC5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJQcm9jZXNzaW5n
SW5zdHJ1Y3Rpb24uaCIKICNpbmNsdWRlICJSZXNvdXJjZUVycm9yLmgiCkBAIC05MjAsOCArOTIx
LDEwIEBAIHZvaWQgWE1MRG9jdW1lbnRQYXJzZXI6OmVuZEVsZW1lbnROcygpCiAKICAgICAgICAg
aWYgKHNjcmlwdEVsZW1lbnQtPnJlYWR5VG9CZVBhcnNlckV4ZWN1dGVkKCkpCiAgICAgICAgICAg
ICBzY3JpcHRFbGVtZW50LT5leGVjdXRlU2NyaXB0KFNjcmlwdFNvdXJjZUNvZGUoc2NyaXB0RWxl
bWVudC0+c2NyaXB0Q29udGVudCgpLCBkb2N1bWVudCgpLT51cmwoKSwgbV9zY3JpcHRTdGFydFBv
c2l0aW9uKSk7Ci0gICAgICAgIGVsc2UgaWYgKHNjcmlwdEVsZW1lbnQtPndpbGxCZVBhcnNlckV4
ZWN1dGVkKCkpIHsKLSAgICAgICAgICAgIG1fcGVuZGluZ1NjcmlwdCA9IHNjcmlwdEVsZW1lbnQt
PmNhY2hlZFNjcmlwdCgpOworICAgICAgICBlbHNlIGlmIChzY3JpcHRFbGVtZW50LT53aWxsQmVQ
YXJzZXJFeGVjdXRlZCgpICYmIHNjcmlwdEVsZW1lbnQtPmxvYWRhYmxlU2NyaXB0KCkgJiYgaXM8
TG9hZGFibGVDbGFzc2ljU2NyaXB0Pigqc2NyaXB0RWxlbWVudC0+bG9hZGFibGVTY3JpcHQoKSkp
IHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBBbGxvdyAibW9kdWxlIiBzY3JpcHRzIGZvciBYTUwg
ZG9jdW1lbnRzLgorICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE2MTY1MQorICAgICAgICAgICAgbV9wZW5kaW5nU2NyaXB0ID0gJmRvd25jYXN0
PExvYWRhYmxlQ2xhc3NpY1NjcmlwdD4oKnNjcmlwdEVsZW1lbnQtPmxvYWRhYmxlU2NyaXB0KCkp
LmNhY2hlZFNjcmlwdCgpOwogICAgICAgICAgICAgbV9zY3JpcHRFbGVtZW50ID0gJmVsZW1lbnQ7
CiAgICAgICAgICAgICBtX3BlbmRpbmdTY3JpcHQtPmFkZENsaWVudCh0aGlzKTsKIAo=
</data>
<flag name="review"
          id="311577"
          type_id="1"
          status="+"
          setter="rniwa"
    />
          </attachment>
      

    </bug>

</bugzilla>