<?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>202061</bug_id>
          
          <creation_ts>2019-09-20 15:53:28 -0700</creation_ts>
          <short_desc>SubFrameSOAuthorizationSession should ensure messages are posted in the right order to the parent frame</short_desc>
          <delta_ts>2019-09-27 00:14:03 -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>WebKit Misc.</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>NEW</bug_status>
          <resolution></resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Jiewen Tan">jiewen_tan</reporter>
          <assigned_to name="Jiewen Tan">jiewen_tan</assigned_to>
          <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>jiewen_tan</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>youennf</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1572930</commentid>
    <comment_count>0</comment_count>
    <who name="Jiewen Tan">jiewen_tan</who>
    <bug_when>2019-09-20 15:53:28 -0700</bug_when>
    <thetext>SubFrameSOAuthorizationSession should ensure messages are posted in order to the parent frame.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1572931</commentid>
    <comment_count>1</comment_count>
    <who name="Jiewen Tan">jiewen_tan</who>
    <bug_when>2019-09-20 15:54:20 -0700</bug_when>
    <thetext>&lt;rdar://problem/55485666&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1572945</commentid>
    <comment_count>2</comment_count>
      <attachid>379283</attachid>
    <who name="Jiewen Tan">jiewen_tan</who>
    <bug_when>2019-09-20 16:41:17 -0700</bug_when>
    <thetext>Created attachment 379283
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1574038</commentid>
    <comment_count>3</comment_count>
      <attachid>379283</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2019-09-25 06:56:29 -0700</bug_when>
    <thetext>Comment on attachment 379283
Patch

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

&gt; Source/WebKit/UIProcess/Cocoa/SOAuthorization/SubFrameSOAuthorizationSession.mm:66
&gt; +    if (auto* frame = page-&gt;process().webFrame(*m_frameID))

What guarantees that m_frameID is not null?

&gt; Source/WebKit/UIProcess/Cocoa/SOAuthorization/SubFrameSOAuthorizationSession.mm:73
&gt; +    appendRequestToLoad(URL(navigationAction()-&gt;request().url()), IPC::DataReference(reinterpret_cast&lt;const uint8_t*&gt;(soAuthorizationPostDidCancelMessageToParent), strlen(soAuthorizationPostDidCancelMessageToParent)).vector());

Is there a more direct way to create a Vector&lt;uint8_t&gt; from a null terminated string?
If not, I would add a static routine to ease readability since this is also used below.

&gt; Source/WebKit/UIProcess/Cocoa/SOAuthorization/SubFrameSOAuthorizationSession.mm:74
&gt; +    appendRequestToLoad(URL(navigationAction()-&gt;request().url()), String(navigationAction()-&gt;request().httpReferrer()));

Should soAuthorizationPostDidCancelMessageToParent do both the postMessage and the navigation (through window.location for instance)  or do we prefer to have them as two different tasks?

&gt; Source/WebKit/UIProcess/Cocoa/SOAuthorization/SubFrameSOAuthorizationSession.mm:100
&gt; +    if (m_requestsToLoad.first().first != url)

I think this is ok but just in case, are we 100% sure m_requestsToLoad cannot be empty here?

&gt; Source/WebKit/UIProcess/FrameLoadState.h:78
&gt; +    HashMap&lt;Observer*, WeakPtr&lt;Observer&gt;&gt; m_observers;

Can we use a WeakHashSet?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1574163</commentid>
    <comment_count>4</comment_count>
      <attachid>379283</attachid>
    <who name="Jiewen Tan">jiewen_tan</who>
    <bug_when>2019-09-25 12:18:01 -0700</bug_when>
    <thetext>Comment on attachment 379283
Patch

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

Thanks Youenn for taking a look.

&gt;&gt; Source/WebKit/UIProcess/Cocoa/SOAuthorization/SubFrameSOAuthorizationSession.mm:66
&gt;&gt; +    if (auto* frame = page-&gt;process().webFrame(*m_frameID))
&gt; 
&gt; What guarantees that m_frameID is not null?

Right, thanks for pointing it out.

&gt;&gt; Source/WebKit/UIProcess/Cocoa/SOAuthorization/SubFrameSOAuthorizationSession.mm:73
&gt;&gt; +    appendRequestToLoad(URL(navigationAction()-&gt;request().url()), IPC::DataReference(reinterpret_cast&lt;const uint8_t*&gt;(soAuthorizationPostDidCancelMessageToParent), strlen(soAuthorizationPostDidCancelMessageToParent)).vector());
&gt; 
&gt; Is there a more direct way to create a Vector&lt;uint8_t&gt; from a null terminated string?
&gt; If not, I would add a static routine to ease readability since this is also used below.

Sure, I will make a static helper that replicates what the method is doing. Maybe we should consider a Vector constructor that do the magic.

&gt;&gt; Source/WebKit/UIProcess/Cocoa/SOAuthorization/SubFrameSOAuthorizationSession.mm:74
&gt;&gt; +    appendRequestToLoad(URL(navigationAction()-&gt;request().url()), String(navigationAction()-&gt;request().httpReferrer()));
&gt; 
&gt; Should soAuthorizationPostDidCancelMessageToParent do both the postMessage and the navigation (through window.location for instance)  or do we prefer to have them as two different tasks?

Not sure if there is a way to preserve the http referrer in JS.

&gt;&gt; Source/WebKit/UIProcess/Cocoa/SOAuthorization/SubFrameSOAuthorizationSession.mm:100
&gt;&gt; +    if (m_requestsToLoad.first().first != url)
&gt; 
&gt; I think this is ok but just in case, are we 100% sure m_requestsToLoad cannot be empty here?

By design, yes. I will add an assertion.

&gt; Source/WebKit/UIProcess/FrameLoadState.h:47
&gt; +        virtual void didFinishLoad(const URL&amp;) = 0;

Maybe we don&apos;t need to pass a URL?

&gt;&gt; Source/WebKit/UIProcess/FrameLoadState.h:78
&gt;&gt; +    HashMap&lt;Observer*, WeakPtr&lt;Observer&gt;&gt; m_observers;
&gt; 
&gt; Can we use a WeakHashSet?

I like new wtf helpers!!!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1574246</commentid>
    <comment_count>5</comment_count>
      <attachid>379283</attachid>
    <who name="Jiewen Tan">jiewen_tan</who>
    <bug_when>2019-09-25 15:29:56 -0700</bug_when>
    <thetext>Comment on attachment 379283
Patch

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

&gt;&gt;&gt; Source/WebKit/UIProcess/FrameLoadState.h:78
&gt;&gt;&gt; +    HashMap&lt;Observer*, WeakPtr&lt;Observer&gt;&gt; m_observers;
&gt;&gt; 
&gt;&gt; Can we use a WeakHashSet?
&gt; 
&gt; I like new wtf helpers!!!

It looks like WeakHashSet can&apos;t be copied. And nether does HashSet. Not sure why. And also not sure if I should make WeakHashSet copiable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1574265</commentid>
    <comment_count>6</comment_count>
      <attachid>379283</attachid>
    <who name="Jiewen Tan">jiewen_tan</who>
    <bug_when>2019-09-25 15:56:35 -0700</bug_when>
    <thetext>Comment on attachment 379283
Patch

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

&gt;&gt;&gt;&gt; Source/WebKit/UIProcess/FrameLoadState.h:78
&gt;&gt;&gt;&gt; +    HashMap&lt;Observer*, WeakPtr&lt;Observer&gt;&gt; m_observers;
&gt;&gt;&gt; 
&gt;&gt;&gt; Can we use a WeakHashSet?
&gt;&gt; 
&gt;&gt; I like new wtf helpers!!!
&gt; 
&gt; It looks like WeakHashSet can&apos;t be copied. And nether does HashSet. Not sure why. And also not sure if I should make WeakHashSet copiable.

Filed Bug 202248 as a follow up.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1574267</commentid>
    <comment_count>7</comment_count>
      <attachid>379587</attachid>
    <who name="Jiewen Tan">jiewen_tan</who>
    <bug_when>2019-09-25 16:00:01 -0700</bug_when>
    <thetext>Created attachment 379587
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1574380</commentid>
    <comment_count>8</comment_count>
      <attachid>379587</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2019-09-26 01:19:25 -0700</bug_when>
    <thetext>Comment on attachment 379587
Patch

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

&gt; Source/WebKit/UIProcess/Cocoa/SOAuthorization/SubFrameSOAuthorizationSession.mm:65
&gt; +    if (auto* targetFrame = this-&gt;navigationAction()-&gt;targetFrame()) {

Looking at SubFrameSOAuthorizationSession::create, I believe we always have a FrameID.
It might be simpler to pass it as a parameter and make m_frameID not Optional.

&gt; Source/WebKit/UIProcess/Cocoa/SOAuthorization/SubFrameSOAuthorizationSession.mm:98
&gt; +    appendRequestToLoad(URL(response.url()), IPC::DataReference(reinterpret_cast&lt;const uint8_t*&gt;(data.bytes), data.length).vector());

Could use convertBytesToVector

&gt; Source/WebKit/UIProcess/FrameLoadState.cpp:93
&gt; +    auto observersCopy = m_observers;

A hashmap copy is probably more expensive than creating a Vector of values.
Maybe we could use a WeakHashSet for m_observers and a Vector&lt;Observer*&gt; for observersCopy.

&gt; Source/WebKit/UIProcess/WebProcessPool.cpp:44
&gt; +#include &quot;LegacyGlobalSettings.h&quot;

Is it needed?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1574404</commentid>
    <comment_count>9</comment_count>
      <attachid>379587</attachid>
    <who name="Jiewen Tan">jiewen_tan</who>
    <bug_when>2019-09-26 02:50:15 -0700</bug_when>
    <thetext>Comment on attachment 379587
Patch

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

&gt;&gt; Source/WebKit/UIProcess/Cocoa/SOAuthorization/SubFrameSOAuthorizationSession.mm:65
&gt;&gt; +    if (auto* targetFrame = this-&gt;navigationAction()-&gt;targetFrame()) {
&gt; 
&gt; Looking at SubFrameSOAuthorizationSession::create, I believe we always have a FrameID.
&gt; It might be simpler to pass it as a parameter and make m_frameID not Optional.

Sounds good. Fixed.

&gt;&gt; Source/WebKit/UIProcess/Cocoa/SOAuthorization/SubFrameSOAuthorizationSession.mm:98
&gt;&gt; +    appendRequestToLoad(URL(response.url()), IPC::DataReference(reinterpret_cast&lt;const uint8_t*&gt;(data.bytes), data.length).vector());
&gt; 
&gt; Could use convertBytesToVector

Good catch!

&gt;&gt; Source/WebKit/UIProcess/FrameLoadState.cpp:93
&gt;&gt; +    auto observersCopy = m_observers;
&gt; 
&gt; A hashmap copy is probably more expensive than creating a Vector of values.
&gt; Maybe we could use a WeakHashSet for m_observers and a Vector&lt;Observer*&gt; for observersCopy.

Fixed. A good idea!

&gt;&gt; Source/WebKit/UIProcess/WebProcessPool.cpp:44
&gt;&gt; +#include &quot;LegacyGlobalSettings.h&quot;
&gt; 
&gt; Is it needed?

I made some arrangement of Sources.txt during the development and discover this lack of header. Just did it for someone else&apos;s convenience.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1574405</commentid>
    <comment_count>10</comment_count>
      <attachid>379628</attachid>
    <who name="Jiewen Tan">jiewen_tan</who>
    <bug_when>2019-09-26 02:52:14 -0700</bug_when>
    <thetext>Created attachment 379628
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1574737</commentid>
    <comment_count>11</comment_count>
      <attachid>379628</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2019-09-26 22:49:14 -0700</bug_when>
    <thetext>Comment on attachment 379628
Patch

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

&gt; Source/WebKit/UIProcess/Cocoa/SOAuthorization/SubFrameSOAuthorizationSession.mm:-107
&gt; -    if (!page || !navigationActionPtr)

We were doing a page check here and no longer now.
Might be safer to keep it.

&gt; Source/WebKit/UIProcess/FrameLoadState.cpp:95
&gt; +        observersCopy.append(&amp;observer);

We can use uncheckedAppend/resverInitialCapacity.
Or better, just use copyToVector if working or WTF::map(m_observers, [](auto&amp; observer) { return observer.get(); });</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1574740</commentid>
    <comment_count>12</comment_count>
      <attachid>379628</attachid>
    <who name="Jiewen Tan">jiewen_tan</who>
    <bug_when>2019-09-26 23:00:36 -0700</bug_when>
    <thetext>Comment on attachment 379628
Patch

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

Thanks Youenn for r+ the patch.

&gt;&gt; Source/WebKit/UIProcess/Cocoa/SOAuthorization/SubFrameSOAuthorizationSession.mm:-107
&gt;&gt; -    if (!page || !navigationActionPtr)
&gt; 
&gt; We were doing a page check here and no longer now.
&gt; Might be safer to keep it.

Sure.

&gt;&gt; Source/WebKit/UIProcess/FrameLoadState.cpp:95
&gt;&gt; +        observersCopy.append(&amp;observer);
&gt; 
&gt; We can use uncheckedAppend/resverInitialCapacity.
&gt; Or better, just use copyToVector if working or WTF::map(m_observers, [](auto&amp; observer) { return observer.get(); });

I was thinking about Vector.appendRange but then it doesn&apos;t work. It definitely looks much better!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1574747</commentid>
    <comment_count>13</comment_count>
      <attachid>379628</attachid>
    <who name="Jiewen Tan">jiewen_tan</who>
    <bug_when>2019-09-26 23:26:17 -0700</bug_when>
    <thetext>Comment on attachment 379628
Patch

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

&gt;&gt;&gt; Source/WebKit/UIProcess/FrameLoadState.cpp:95
&gt;&gt;&gt; +        observersCopy.append(&amp;observer);
&gt;&gt; 
&gt;&gt; We can use uncheckedAppend/resverInitialCapacity.
&gt;&gt; Or better, just use copyToVector if working or WTF::map(m_observers, [](auto&amp; observer) { return observer.get(); });
&gt; 
&gt; I was thinking about Vector.appendRange but then it doesn&apos;t work. It definitely looks much better!

WeakHashSet uses computeSize() instead of size(), and therefore WTF::map doesn&apos;t work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1574748</commentid>
    <comment_count>14</comment_count>
      <attachid>379713</attachid>
    <who name="Jiewen Tan">jiewen_tan</who>
    <bug_when>2019-09-26 23:29:25 -0700</bug_when>
    <thetext>Created attachment 379713
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1574753</commentid>
    <comment_count>15</comment_count>
      <attachid>379713</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-09-27 00:14:03 -0700</bug_when>
    <thetext>Comment on attachment 379713
Patch for landing

Clearing flags on attachment: 379713

Committed r250416: &lt;https://trac.webkit.org/changeset/250416&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>379283</attachid>
            <date>2019-09-20 16:41:17 -0700</date>
            <delta_ts>2019-09-25 15:59:59 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-202061-20190920164116.patch</filename>
            <type>text/plain</type>
            <size>22571</size>
            <attacher name="Jiewen Tan">jiewen_tan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ5NzM4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDAyODIxMjExM2JhZDgzOTZl
M2M2MjdiMGUyODQ0MTc2N2ZlZDdhZjMuLmNlMjVmNzU0MTE5NWRmMTg1YjQ0YjhiYzQzZjk5Y2M2
ZDBiOTAyYTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTIgQEAKKzIwMTktMDktMjAgIEppZXdlbiBU
YW4gIDxqaWV3ZW5fdGFuQGFwcGxlLmNvbT4KKworICAgICAgICBTdWJGcmFtZVNPQXV0aG9yaXph
dGlvblNlc3Npb24gc2hvdWxkIGVuc3VyZSBtZXNzYWdlcyBhcmUgcG9zdGVkIGluIHRoZSByaWdo
dCBvcmRlciB0byB0aGUgcGFyZW50IGZyYW1lCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMDIwNjEKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzU1NDg1
NjY2PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRo
aXMgcGF0Y2ggZW5zdXJlcyBtZXNzYWdlcyB0aGF0IHNpZ25hbCB0aGUgcHJvY2VzcyBvZiBTT0F1
dGhvcml6YXRpb24gaW50ZXJjZXB0aW9uIGFyZSBwb3N0ZWQgaW4KKyAgICAgICAgdGhlIHJpZ2h0
IG9yZGVyIHRvIHRoZSBwYXJlbnQgZnJhbWUuIEJlZm9yZSB0aGlzIHBhdGNoLCB0aGVyZSBhcmUg
Y2hhbmNlcyB0aGF0IFNPQXV0aG9yaXphdGlvbkRpZENhbmNlbAorICAgICAgICBjb3VsZCBiZSBw
b3N0ZWQgdG8gdGhlIHBhcmVudCBiZWZvcmUgU09BdXRob3JpemF0aW9uRGlkU3RhcnQuIFRoZXJl
IGFyZSBmZXcgY2F1c2VzIHRoYXQgbGVhZCB0bworICAgICAgICB0aGlzIHJhY2UgY29uZGl0aW9u
OgorICAgICAgICAxKSBTdWJGcmFtZVNPQXV0aG9yaXphdGlvblNlc3Npb246OmJlZm9yZVN0YXJ0
IHBvc3RzIFNPQXV0aG9yaXphdGlvbkRpZFN0YXJ0IGluIHRoZSBuZXh0IHJ1bmxvb3AuIFNvCisg
ICAgICAgIGV4dGVuc2lvbiBjb3VsZCBoYXZlIHRoZSBjaGFuY2UgdG8gaW52b2tlIFN1YkZyYW1l
U09BdXRob3JpemF0aW9uU2Vzc2lvbjo6ZmFsbEJhY2tUb1dlYlBhdGhJbnRlcm5hbAorICAgICAg
ICBiZWZvcmUgU09BdXRob3JpemF0aW9uRGlkU3RhcnQgaXMgcG9zdGVkLgorICAgICAgICAyKSBF
dmVuIGlmIHRoZSBvcmRlciBpcyByaWdodCBpbiB0aGUgVUkgcHJvY2VzcywgaXQgaXMgbm90IGd1
YXJhbnRlZWQgdGhhdCBXZWIgcHJvY2VzcyB3aWxsIHN0cmljdGx5CisgICAgICAgIGZvbGxvdyB0
aGUgb3JkZXIgYXMgdGhlIGxvYWRpbmcgcHJvY2VzcyBpcyBhc3luYy4KKworICAgICAgICBUbyBm
aXggdGhlIGlzc3VlOgorICAgICAgICAxKSBTdWJGcmFtZVNPQXV0aG9yaXphdGlvblNlc3Npb246
OmJlZm9yZVN0YXJ0IG5vdyBwb3N0cyBTT0F1dGhvcml6YXRpb25EaWRTdGFydCBpbiB0aGUgc2Ft
ZSBydW5sb29wLgorICAgICAgICAyKSBPYnNlcnZlciBpcyBpbnRyb2R1Y2VkIGluIEZyYW1lTG9h
ZFN0YXRlIHN1Y2ggdGhhdCBTdWJGcmFtZVNPQXV0aG9yaXphdGlvblNlc3Npb24gY291bGQga25v
dyBpZgorICAgICAgICB0aGUgbG9hZGluZyBpcyBmaW5pc2hlZC4gV2l0aCB0aGlzIG5ldyBjYXBh
Y2l0eSwgU3ViRnJhbWVTT0F1dGhvcml6YXRpb25TZXNzaW9uIGNhbiBlbnN1cmUgaXQgb25seQor
ICAgICAgICBwb3N0cyBuZXh0IG1lc3NhZ2Ugd2hlbiB0aGUgcHJldmlvdXMgbWVzc2FnZSBoYXMg
YmVlbiBwb3N0ZWQuCisKKyAgICAgICAgSW1wbGVtZW50YXRpb24gd2lzZSwgYSBkZXF1ZSB0byBx
dWV1ZSByZXF1ZXN0cyBpcyBwcm92aWRlZCB0byBtYWludGFpbiBvcmRlci4KKyAgICAgICAgMSkg
V2hlbiBuZXcgcmVxdWVzdCBpcyBhZGRlZCB0byB0aGUgZGVxdWUsIFN1YkZyYW1lU09BdXRob3Jp
emF0aW9uU2Vzc2lvbiB3aWxsIG9ubHkgbG9hZCB0aGUgcmVxdWVzdAorICAgICAgICBpZiBpdCBp
cyB0aGUgb25seSBlbGVtZW50IGluIHRoZSBkZXF1ZS4gT3RoZXJ3aXNlLCBpdCBkb2VzIG5vdGhp
bmcuCisgICAgICAgIDIpIFdoZW4gU3ViRnJhbWVTT0F1dGhvcml6YXRpb25TZXNzaW9uIHJlY2Vp
dmVzIGRpZEZpbmlzaExvYWQsIGl0IHBvcHMgdGhlIGhlYWQgb2YgdGhlIHF1ZXVlIGFuZCBsb2Fk
cworICAgICAgICB0aGUgbmV4dCByZXF1ZXN0IGluIHRoZSBxdWV1ZSBpZiBhbnkuCisgICAgICAg
IFRoZSBhYm92ZSBkZXNpZ24gc2hvdWxkIGd1YXJhbnRlZSBhbGwgcmVxdWVzdHMgYXJlIGxvYWRl
ZCBpbiBzZXF1ZW5jZS4KKworICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9TT0F1dGhvcml6YXRp
b24vU3ViRnJhbWVTT0F1dGhvcml6YXRpb25TZXNzaW9uLmg6CisgICAgICAgICogVUlQcm9jZXNz
L0NvY29hL1NPQXV0aG9yaXphdGlvbi9TdWJGcmFtZVNPQXV0aG9yaXphdGlvblNlc3Npb24ubW06
CisgICAgICAgIChXZWJLaXQ6OlN1YkZyYW1lU09BdXRob3JpemF0aW9uU2Vzc2lvbjo6U3ViRnJh
bWVTT0F1dGhvcml6YXRpb25TZXNzaW9uKToKKyAgICAgICAgKFdlYktpdDo6U3ViRnJhbWVTT0F1
dGhvcml6YXRpb25TZXNzaW9uOjp+U3ViRnJhbWVTT0F1dGhvcml6YXRpb25TZXNzaW9uKToKKyAg
ICAgICAgKFdlYktpdDo6U3ViRnJhbWVTT0F1dGhvcml6YXRpb25TZXNzaW9uOjpmYWxsQmFja1Rv
V2ViUGF0aEludGVybmFsKToKKyAgICAgICAgKFdlYktpdDo6U3ViRnJhbWVTT0F1dGhvcml6YXRp
b25TZXNzaW9uOjpjb21wbGV0ZUludGVybmFsKToKKyAgICAgICAgKFdlYktpdDo6U3ViRnJhbWVT
T0F1dGhvcml6YXRpb25TZXNzaW9uOjpiZWZvcmVTdGFydCk6CisgICAgICAgIChXZWJLaXQ6OlN1
YkZyYW1lU09BdXRob3JpemF0aW9uU2Vzc2lvbjo6ZGlkRmluaXNoTG9hZCk6CisgICAgICAgIChX
ZWJLaXQ6OlN1YkZyYW1lU09BdXRob3JpemF0aW9uU2Vzc2lvbjo6YXBwZW5kUmVxdWVzdFRvTG9h
ZCk6CisgICAgICAgIChXZWJLaXQ6OlN1YkZyYW1lU09BdXRob3JpemF0aW9uU2Vzc2lvbjo6bG9h
ZFJlcXVlc3RUb0ZyYW1lKToKKyAgICAgICAgKFdlYktpdDo6U3ViRnJhbWVTT0F1dGhvcml6YXRp
b25TZXNzaW9uOjpsb2FkRGF0YVRvRnJhbWUpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpT
dWJGcmFtZVNPQXV0aG9yaXphdGlvblNlc3Npb246OnBvc3REaWRDYW5jZWxNZXNzYWdlVG9QYXJl
bnQpOiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9GcmFtZUxvYWRTdGF0ZS5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OkZyYW1lTG9hZFN0YXRlOjphZGRPYnNlcnZlcik6CisgICAgICAgIChX
ZWJLaXQ6OkZyYW1lTG9hZFN0YXRlOjpyZW1vdmVPYnNlcnZlcik6CisgICAgICAgIChXZWJLaXQ6
OkZyYW1lTG9hZFN0YXRlOjpkaWRGaW5pc2hMb2FkKToKKyAgICAgICAgKiBVSVByb2Nlc3MvRnJh
bWVMb2FkU3RhdGUuaDoKKwogMjAxOS0wOS0xMCAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUu
Y29tPgogCiAgICAgICAgIEhhbmdzIG9uIFN3aXNzLmNvbSBkdWUgdG8gdGhlIHdlYiBwcm9jZXNz
IGJlaW5nIGJsb2NrZWQgb24gU3RvcmFnZUFyZWFNYXA6OkxvYWRWYWx1ZXNJZk5lZWRlZApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvU09BdXRob3JpemF0aW9uL1N1
YkZyYW1lU09BdXRob3JpemF0aW9uU2Vzc2lvbi5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
Q29jb2EvU09BdXRob3JpemF0aW9uL1N1YkZyYW1lU09BdXRob3JpemF0aW9uU2Vzc2lvbi5oCmlu
ZGV4IDdmN2IxZjlmZTVjY2U2MDRlNzYxMzFjNGVhMzk1ZGM5ZmEzZDc3M2QuLmJmY2VjYjQ5NmY4
MWZiYWQxYTJjOGYzNTM4MzY0ZDM5N2U1NjM3NGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0NvY29hL1NPQXV0aG9yaXphdGlvbi9TdWJGcmFtZVNPQXV0aG9yaXphdGlvblNl
c3Npb24uaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9TT0F1dGhvcml6YXRp
b24vU3ViRnJhbWVTT0F1dGhvcml6YXRpb25TZXNzaW9uLmgKQEAgLTI3LDYgKzI3LDcgQEAKIAog
I2lmIEhBVkUoQVBQX1NTTykKIAorI2luY2x1ZGUgIkZyYW1lTG9hZFN0YXRlLmgiCiAjaW5jbHVk
ZSAiTmF2aWdhdGlvblNPQXV0aG9yaXphdGlvblNlc3Npb24uaCIKIAogbmFtZXNwYWNlIElQQyB7
CkBAIC0zNSwxMyArMzYsMTkgQEAgY2xhc3MgRGF0YVJlZmVyZW5jZTsKIAogbmFtZXNwYWNlIFdl
YktpdCB7CiAKLWNsYXNzIFN1YkZyYW1lU09BdXRob3JpemF0aW9uU2Vzc2lvbiBmaW5hbCA6IHB1
YmxpYyBOYXZpZ2F0aW9uU09BdXRob3JpemF0aW9uU2Vzc2lvbiB7CitjbGFzcyBTdWJGcmFtZVNP
QXV0aG9yaXphdGlvblNlc3Npb24gZmluYWwgOiBwdWJsaWMgTmF2aWdhdGlvblNPQXV0aG9yaXph
dGlvblNlc3Npb24sIHB1YmxpYyBGcmFtZUxvYWRTdGF0ZTo6T2JzZXJ2ZXIgewogcHVibGljOgog
ICAgIHVzaW5nIENhbGxiYWNrID0gQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT47CisgICAg
dXNpbmcgU09BdXRob3JpemF0aW9uU2Vzc2lvbjo6d2Vha1B0ckZhY3Rvcnk7CisgICAgdXNpbmcg
V2Vha1ZhbHVlVHlwZSA9IFNPQXV0aG9yaXphdGlvblNlc3Npb246OldlYWtWYWx1ZVR5cGU7CiAK
ICAgICBzdGF0aWMgUmVmPFNPQXV0aG9yaXphdGlvblNlc3Npb24+IGNyZWF0ZShTT0F1dGhvcml6
YXRpb24gKnNvQXV0aG9yaXphdGlvbiwgUmVmPEFQSTo6TmF2aWdhdGlvbkFjdGlvbj4mJiBuYXZp
Z2F0aW9uQWN0aW9uLCBXZWJQYWdlUHJveHkmIHBhZ2UsIENhbGxiYWNrJiYgY29tcGxldGlvbkhh
bmRsZXIpOwogCisgICAgflN1YkZyYW1lU09BdXRob3JpemF0aW9uU2Vzc2lvbigpOworCiBwcml2
YXRlOgorICAgIHVzaW5nIFN1cHBsZW1lbnQgPSBWYXJpYW50PFZlY3Rvcjx1aW50OF90PiwgU3Ry
aW5nPjsKKwogICAgIFN1YkZyYW1lU09BdXRob3JpemF0aW9uU2Vzc2lvbihTT0F1dGhvcml6YXRp
b24gKiwgUmVmPEFQSTo6TmF2aWdhdGlvbkFjdGlvbj4mJiwgV2ViUGFnZVByb3h5JiwgQ2FsbGJh
Y2smJik7CiAKICAgICAvLyBTT0F1dGhvcml6YXRpb25TZXNzaW9uCkBAIC01Miw4ICs1OSwxNCBA
QCBwcml2YXRlOgogICAgIC8vIE5hdmlnYXRpb25TT0F1dGhvcml6YXRpb25TZXNzaW9uCiAgICAg
dm9pZCBiZWZvcmVTdGFydCgpIGZpbmFsOwogCi0gICAgdm9pZCBsb2FkRGF0YVRvRnJhbWUoY29u
c3QgSVBDOjpEYXRhUmVmZXJlbmNlJiwgY29uc3QgVVJMJik7Ci0gICAgdm9pZCBwb3N0RGlkQ2Fu
Y2VsTWVzc2FnZVRvUGFyZW50KEZ1bmN0aW9uPHZvaWQoKT4mJik7CisgICAgLy8gRnJhbWVMb2Fk
U3RhdGU6Ok9ic2VydmVyCisgICAgdm9pZCBkaWRGaW5pc2hMb2FkKGNvbnN0IFVSTCYpIGZpbmFs
OworCisgICAgdm9pZCBhcHBlbmRSZXF1ZXN0VG9Mb2FkKFVSTCYmLCBTdXBwbGVtZW50JiYpOwor
ICAgIHZvaWQgbG9hZFJlcXVlc3RUb0ZyYW1lKCk7CisKKyAgICBPcHRpb25hbDxXZWJDb3JlOjpG
cmFtZUlkZW50aWZpZXI+IG1fZnJhbWVJRDsKKyAgICBEZXF1ZTxzdGQ6OnBhaXI8VVJMLCBTdXBw
bGVtZW50Pj4gbV9yZXF1ZXN0c1RvTG9hZDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvU09BdXRob3JpemF0aW9u
L1N1YkZyYW1lU09BdXRob3JpemF0aW9uU2Vzc2lvbi5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0NvY29hL1NPQXV0aG9yaXphdGlvbi9TdWJGcmFtZVNPQXV0aG9yaXphdGlvblNlc3Npb24u
bW0KaW5kZXggMGNiZWYwZDFkZDRkZWRhNDQ4YzVkZDZiYWQ3MzRhNDBkNDUxM2U0NC4uYzRhMjM0
MTY4YWI0MDlkOWVjNzgwY2UzYmZmMGE3YzU3YzI5YTNjNiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQ29jb2EvU09BdXRob3JpemF0aW9uL1N1YkZyYW1lU09BdXRob3JpemF0
aW9uU2Vzc2lvbi5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9TT0F1dGhv
cml6YXRpb24vU3ViRnJhbWVTT0F1dGhvcml6YXRpb25TZXNzaW9uLm1tCkBAIC00MCw3ICs0MCw3
IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIGNvbnN0
IGNoYXIqIHNvQXV0aG9yaXphdGlvblBvc3REaWRTdGFydE1lc3NhZ2VUb1BhcmVudCA9ICI8c2Ny
aXB0PnBhcmVudC5wb3N0TWVzc2FnZSgnU09BdXRob3JpemF0aW9uRGlkU3RhcnQnLCAnKicpOzwv
c2NyaXB0PiI7Ci1jb25zdCBjaGFyKiBzb0F1dGhvcml6YXRpb25Qb3N0RGlkQ2FuY2VsTWVzc2Fn
ZVRvUGFyZW50ID0gInBhcmVudC5wb3N0TWVzc2FnZSgnU09BdXRob3JpemF0aW9uRGlkQ2FuY2Vs
JywgJyonKTsiOworY29uc3QgY2hhciogc29BdXRob3JpemF0aW9uUG9zdERpZENhbmNlbE1lc3Nh
Z2VUb1BhcmVudCA9ICI8c2NyaXB0PnBhcmVudC5wb3N0TWVzc2FnZSgnU09BdXRob3JpemF0aW9u
RGlkQ2FuY2VsJywgJyonKTs8L3NjcmlwdD4iOwogCiBSZWY8U09BdXRob3JpemF0aW9uU2Vzc2lv
bj4gU3ViRnJhbWVTT0F1dGhvcml6YXRpb25TZXNzaW9uOjpjcmVhdGUoU09BdXRob3JpemF0aW9u
ICpzb0F1dGhvcml6YXRpb24sIFJlZjxBUEk6Ok5hdmlnYXRpb25BY3Rpb24+JiYgbmF2aWdhdGlv
bkFjdGlvbiwgV2ViUGFnZVByb3h5JiBwYWdlLCBDYWxsYmFjayYmIGNvbXBsZXRpb25IYW5kbGVy
KQogewpAQCAtNTAsMjggKzUwLDI4IEBAIFJlZjxTT0F1dGhvcml6YXRpb25TZXNzaW9uPiBTdWJG
cmFtZVNPQXV0aG9yaXphdGlvblNlc3Npb246OmNyZWF0ZShTT0F1dGhvcml6YXRpCiBTdWJGcmFt
ZVNPQXV0aG9yaXphdGlvblNlc3Npb246OlN1YkZyYW1lU09BdXRob3JpemF0aW9uU2Vzc2lvbihT
T0F1dGhvcml6YXRpb24gKnNvQXV0aG9yaXphdGlvbiwgUmVmPEFQSTo6TmF2aWdhdGlvbkFjdGlv
bj4mJiBuYXZpZ2F0aW9uQWN0aW9uLCBXZWJQYWdlUHJveHkmIHBhZ2UsIENhbGxiYWNrJiYgY29t
cGxldGlvbkhhbmRsZXIpCiAgICAgOiBOYXZpZ2F0aW9uU09BdXRob3JpemF0aW9uU2Vzc2lvbihz
b0F1dGhvcml6YXRpb24sIFdURk1vdmUobmF2aWdhdGlvbkFjdGlvbiksIHBhZ2UsIEluaXRpYXRp
bmdBY3Rpb246OlN1YkZyYW1lLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSkKIHsKKyAgICBB
U1NFUlQodGhpcy0+bmF2aWdhdGlvbkFjdGlvbigpKTsKKyAgICBpZiAoYXV0byogdGFyZ2V0RnJh
bWUgPSB0aGlzLT5uYXZpZ2F0aW9uQWN0aW9uKCktPnRhcmdldEZyYW1lKCkpIHsKKyAgICAgICAg
bV9mcmFtZUlEID0gdGFyZ2V0RnJhbWUtPmhhbmRsZSgpLmZyYW1lSUQoKTsKKyAgICAgICAgaWYg
KGF1dG8qIGZyYW1lID0gcGFnZS5wcm9jZXNzKCkud2ViRnJhbWUoKm1fZnJhbWVJRCkpCisgICAg
ICAgICAgICBmcmFtZS0+ZnJhbWVMb2FkU3RhdGUoKS5hZGRPYnNlcnZlcigqdGhpcyk7CisgICAg
fQorfQorCitTdWJGcmFtZVNPQXV0aG9yaXphdGlvblNlc3Npb246On5TdWJGcmFtZVNPQXV0aG9y
aXphdGlvblNlc3Npb24oKQoreworICAgIGF1dG8qIHBhZ2UgPSB0aGlzLT5wYWdlKCk7CisgICAg
aWYgKCFwYWdlKQorICAgICAgICByZXR1cm47CisgICAgaWYgKGF1dG8qIGZyYW1lID0gcGFnZS0+
cHJvY2VzcygpLndlYkZyYW1lKCptX2ZyYW1lSUQpKQorICAgICAgICBmcmFtZS0+ZnJhbWVMb2Fk
U3RhdGUoKS5yZW1vdmVPYnNlcnZlcigqdGhpcyk7CiB9CiAKIHZvaWQgU3ViRnJhbWVTT0F1dGhv
cml6YXRpb25TZXNzaW9uOjpmYWxsQmFja1RvV2ViUGF0aEludGVybmFsKCkKIHsKLSAgICAvLyBJ
bnN0ZWFkIG9mIGlzc3VpbmcgYSBsb2FkLCB3ZSBleGVjdXRlIHRoZSBKYXZhc2NyaXB0IGRpcmVj
dGx5LiBUaGlzIHByb3ZpZGVzIHVzIGEgY2FsbGJhY2sKLSAgICAvLyB0byBlbnN1cmUgdGhlIGZp
bmFsIGxvYWQgaXMgaXNzdWVkIGFmdGVyIHRoZSBtZXNzYWdlIGlzIHBvc3RlZC4KLSAgICBwb3N0
RGlkQ2FuY2VsTWVzc2FnZVRvUGFyZW50KFt3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlzKV0g
ewotICAgICAgICBpZiAoIXdlYWtUaGlzKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBh
dXRvKiBwYWdlID0gd2Vha1RoaXMtPnBhZ2UoKTsKLSAgICAgICAgYXV0byogbmF2aWdhdGlvbkFj
dGlvblB0ciA9IHdlYWtUaGlzLT5uYXZpZ2F0aW9uQWN0aW9uKCk7Ci0gICAgICAgIGlmICghcGFn
ZSB8fCAhbmF2aWdhdGlvbkFjdGlvblB0cikKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAg
ICBpZiAoYXV0byogdGFyZ2V0RnJhbWUgPSBuYXZpZ2F0aW9uQWN0aW9uUHRyLT50YXJnZXRGcmFt
ZSgpKSB7Ci0gICAgICAgICAgICBpZiAoYXV0byogZnJhbWUgPSBwYWdlLT5wcm9jZXNzKCkud2Vi
RnJhbWUodGFyZ2V0RnJhbWUtPmhhbmRsZSgpLmZyYW1lSUQoKSkpIHsKLSAgICAgICAgICAgICAg
ICBwYWdlLT5zZXRTaG91bGRTdXBwcmVzc1NPQXV0aG9yaXphdGlvbkluTmV4dE5hdmlnYXRpb25Q
b2xpY3lEZWNpc2lvbigpOwotICAgICAgICAgICAgICAgIC8vIElzc3VlIGEgbmV3IGxvYWQgdG8g
dGhlIG9yaWdpbmFsIFVSTCBhcyB0aGUgb3JpZ2luYWwgbG9hZCBpcyBhYm9ydGVkIGJlZm9yZSBz
dGFydC4KLSAgICAgICAgICAgICAgICBmcmFtZS0+bG9hZFVSTChuYXZpZ2F0aW9uQWN0aW9uUHRy
LT5yZXF1ZXN0KCkudXJsKCksIG5hdmlnYXRpb25BY3Rpb25QdHItPnJlcXVlc3QoKS5odHRwUmVm
ZXJyZXIoKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9KTsKKyAgICBBU1NFUlQo
bmF2aWdhdGlvbkFjdGlvbigpKTsKKyAgICBhcHBlbmRSZXF1ZXN0VG9Mb2FkKFVSTChuYXZpZ2F0
aW9uQWN0aW9uKCktPnJlcXVlc3QoKS51cmwoKSksIElQQzo6RGF0YVJlZmVyZW5jZShyZWludGVy
cHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihzb0F1dGhvcml6YXRpb25Qb3N0RGlkQ2FuY2VsTWVz
c2FnZVRvUGFyZW50KSwgc3RybGVuKHNvQXV0aG9yaXphdGlvblBvc3REaWRDYW5jZWxNZXNzYWdl
VG9QYXJlbnQpKS52ZWN0b3IoKSk7CisgICAgYXBwZW5kUmVxdWVzdFRvTG9hZChVUkwobmF2aWdh
dGlvbkFjdGlvbigpLT5yZXF1ZXN0KCkudXJsKCkpLCBTdHJpbmcobmF2aWdhdGlvbkFjdGlvbigp
LT5yZXF1ZXN0KCkuaHR0cFJlZmVycmVyKCkpKTsKIH0KIAogdm9pZCBTdWJGcmFtZVNPQXV0aG9y
aXphdGlvblNlc3Npb246OmFib3J0SW50ZXJuYWwoKQpAQCAtODQsNDcgKzg0LDQ1IEBAIHZvaWQg
U3ViRnJhbWVTT0F1dGhvcml6YXRpb25TZXNzaW9uOjpjb21wbGV0ZUludGVybmFsKGNvbnN0IFdl
YkNvcmU6OlJlc291cmNlUmVzCiAgICAgICAgIGZhbGxCYWNrVG9XZWJQYXRoSW50ZXJuYWwoKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBsb2FkRGF0YVRvRnJhbWUoSVBDOjpEYXRhUmVm
ZXJlbmNlKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGRhdGEuYnl0ZXMpLCBkYXRh
Lmxlbmd0aCksIHJlc3BvbnNlLnVybCgpKTsKKyAgICBhcHBlbmRSZXF1ZXN0VG9Mb2FkKFVSTChy
ZXNwb25zZS51cmwoKSksIElQQzo6RGF0YVJlZmVyZW5jZShyZWludGVycHJldF9jYXN0PGNvbnN0
IHVpbnQ4X3QqPihkYXRhLmJ5dGVzKSwgZGF0YS5sZW5ndGgpLnZlY3RvcigpKTsKIH0KIAogdm9p
ZCBTdWJGcmFtZVNPQXV0aG9yaXphdGlvblNlc3Npb246OmJlZm9yZVN0YXJ0KCkKIHsKICAgICAv
LyBDYW5jZWxsZWQgdGhlIGN1cnJlbnQgbG9hZCBiZWZvcmUgbG9hZGluZyB0aGUgZGF0YSB0byBw
b3N0IFNPQXV0aG9yaXphdGlvbkRpZFN0YXJ0IHRvIHRoZSBwYXJlbnQgZnJhbWUuCiAgICAgaW52
b2tlQ2FsbGJhY2sodHJ1ZSk7Ci0gICAgLy8gQ3VycmVudGx5IGluIHRoZSBtaWRkbGUgb2YgZGVj
aWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbiwgc2hvdWxkIHN0YXJ0IGEgbmV3IGxvYWQgYWZ0
ZXIuCi0gICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFt3ZWFrVGhpcyA9IG1ha2VXZWFrUHRy
KCp0aGlzKV0gewotICAgICAgICBpZiAoIXdlYWtUaGlzIHx8ICF3ZWFrVGhpcy0+cGFnZSgpIHx8
ICF3ZWFrVGhpcy0+bmF2aWdhdGlvbkFjdGlvbigpKQotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICAvLyBJbnN0ZWFkIG9mIGV4ZWN1dGluZyB0aGUgSmF2YXNjcmlwdCBkaXJlY3RseSwgaXNz
dWluZyBhIGxvYWQuIFRoaXMgd2lsbCBzZXQgdGhlIG9yaWdpbiBwcm9wZXJseS4KLSAgICAgICAg
d2Vha1RoaXMtPmxvYWREYXRhVG9GcmFtZShJUEM6OkRhdGFSZWZlcmVuY2UocmVpbnRlcnByZXRf
Y2FzdDxjb25zdCB1aW50OF90Kj4oc29BdXRob3JpemF0aW9uUG9zdERpZFN0YXJ0TWVzc2FnZVRv
UGFyZW50KSwgc3RybGVuKHNvQXV0aG9yaXphdGlvblBvc3REaWRTdGFydE1lc3NhZ2VUb1BhcmVu
dCkpLCB3ZWFrVGhpcy0+bmF2aWdhdGlvbkFjdGlvbigpLT5yZXF1ZXN0KCkudXJsKCkpOwotICAg
IH0pOworICAgIEFTU0VSVChuYXZpZ2F0aW9uQWN0aW9uKCkpOworICAgIGFwcGVuZFJlcXVlc3RU
b0xvYWQoVVJMKG5hdmlnYXRpb25BY3Rpb24oKS0+cmVxdWVzdCgpLnVybCgpKSwgSVBDOjpEYXRh
UmVmZXJlbmNlKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KHNvQXV0aG9yaXphdGlv
blBvc3REaWRTdGFydE1lc3NhZ2VUb1BhcmVudCksIHN0cmxlbihzb0F1dGhvcml6YXRpb25Qb3N0
RGlkU3RhcnRNZXNzYWdlVG9QYXJlbnQpKS52ZWN0b3IoKSk7CiB9CiAKLXZvaWQgU3ViRnJhbWVT
T0F1dGhvcml6YXRpb25TZXNzaW9uOjpsb2FkRGF0YVRvRnJhbWUoY29uc3QgSVBDOjpEYXRhUmVm
ZXJlbmNlJiBkYXRhLCBjb25zdCBVUkwmIGJhc2VVUkwpCit2b2lkIFN1YkZyYW1lU09BdXRob3Jp
emF0aW9uU2Vzc2lvbjo6ZGlkRmluaXNoTG9hZChjb25zdCBVUkwmIHVybCkKIHsKLSAgICBhdXRv
KiBwYWdlID0gdGhpcy0+cGFnZSgpOwotICAgIGF1dG8qIG5hdmlnYXRpb25BY3Rpb25QdHIgPSBu
YXZpZ2F0aW9uQWN0aW9uKCk7Ci0gICAgaWYgKCFwYWdlIHx8ICFuYXZpZ2F0aW9uQWN0aW9uUHRy
KQorICAgIGlmIChtX3JlcXVlc3RzVG9Mb2FkLmZpcnN0KCkuZmlyc3QgIT0gdXJsKQogICAgICAg
ICByZXR1cm47CisgICAgbV9yZXF1ZXN0c1RvTG9hZC50YWtlRmlyc3QoKTsKKyAgICBsb2FkUmVx
dWVzdFRvRnJhbWUoKTsKK30KIAotICAgIGlmIChhdXRvKiB0YXJnZXRGcmFtZSA9IG5hdmlnYXRp
b25BY3Rpb25QdHItPnRhcmdldEZyYW1lKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIGZyYW1lID0g
cGFnZS0+cHJvY2VzcygpLndlYkZyYW1lKHRhcmdldEZyYW1lLT5oYW5kbGUoKS5mcmFtZUlEKCkp
KSB7Ci0gICAgICAgICAgICBwYWdlLT5zZXRTaG91bGRTdXBwcmVzc1NPQXV0aG9yaXphdGlvbklu
TmV4dE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lvbigpOwotICAgICAgICAgICAgZnJhbWUtPmxvYWRE
YXRhKGRhdGEsICJ0ZXh0L2h0bWwiLCAiVVRGLTgiLCBiYXNlVVJMKTsKLSAgICAgICAgfQotICAg
IH0KK3ZvaWQgU3ViRnJhbWVTT0F1dGhvcml6YXRpb25TZXNzaW9uOjphcHBlbmRSZXF1ZXN0VG9M
b2FkKFVSTCYmIHVybCwgU3VwcGxlbWVudCYmIHN1cHBsZW1lbnQpCit7CisgICAgbV9yZXF1ZXN0
c1RvTG9hZC5hcHBlbmQoeyBXVEZNb3ZlKHVybCksIFdURk1vdmUoc3VwcGxlbWVudCkgfSk7Cisg
ICAgaWYgKG1fcmVxdWVzdHNUb0xvYWQuc2l6ZSgpID09IDEpCisgICAgICAgIGxvYWRSZXF1ZXN0
VG9GcmFtZSgpOwogfQogCi12b2lkIFN1YkZyYW1lU09BdXRob3JpemF0aW9uU2Vzc2lvbjo6cG9z
dERpZENhbmNlbE1lc3NhZ2VUb1BhcmVudChGdW5jdGlvbjx2b2lkKCk+JiYgY2FsbGJhY2spCit2
b2lkIFN1YkZyYW1lU09BdXRob3JpemF0aW9uU2Vzc2lvbjo6bG9hZFJlcXVlc3RUb0ZyYW1lKCkK
IHsKICAgICBhdXRvKiBwYWdlID0gdGhpcy0+cGFnZSgpOwotICAgIGF1dG8qIG5hdmlnYXRpb25B
Y3Rpb25QdHIgPSBuYXZpZ2F0aW9uQWN0aW9uKCk7Ci0gICAgaWYgKCFwYWdlIHx8ICFuYXZpZ2F0
aW9uQWN0aW9uUHRyKQorICAgIGlmICghcGFnZSB8fCBtX3JlcXVlc3RzVG9Mb2FkLmlzRW1wdHko
KSB8fCAhbV9mcmFtZUlEKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoYXV0byogdGFyZ2V0
RnJhbWUgPSBuYXZpZ2F0aW9uQWN0aW9uUHRyLT50YXJnZXRGcmFtZSgpKSB7Ci0gICAgICAgIHBh
Z2UtPnJ1bkphdmFTY3JpcHRJbkZyYW1lKHRhcmdldEZyYW1lLT5oYW5kbGUoKS5mcmFtZUlEKCks
IHNvQXV0aG9yaXphdGlvblBvc3REaWRDYW5jZWxNZXNzYWdlVG9QYXJlbnQsIGZhbHNlLCBbY2Fs
bGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0gKEFQSTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlKiwg
Ym9vbCwgY29uc3QgRXhjZXB0aW9uRGV0YWlscyYsIFNjcmlwdFZhbHVlQ2FsbGJhY2s6OkVycm9y
KSB7Ci0gICAgICAgICAgICBjYWxsYmFjaygpOworICAgIGlmIChhdXRvKiBmcmFtZSA9IHBhZ2Ut
PnByb2Nlc3MoKS53ZWJGcmFtZSgqbV9mcmFtZUlEKSkgeworICAgICAgICBwYWdlLT5zZXRTaG91
bGRTdXBwcmVzc1NPQXV0aG9yaXphdGlvbkluTmV4dE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lvbigp
OworICAgICAgICBhdXRvJiB1cmwgPSBtX3JlcXVlc3RzVG9Mb2FkLmZpcnN0KCkuZmlyc3Q7Cisg
ICAgICAgIFdURjo6c3dpdGNoT24obV9yZXF1ZXN0c1RvTG9hZC5maXJzdCgpLnNlY29uZCwgWyZd
KGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgZGF0YSkgeworICAgICAgICAgICAgZnJhbWUtPmxvYWRE
YXRhKElQQzo6RGF0YVJlZmVyZW5jZShkYXRhKSwgInRleHQvaHRtbCIsICJVVEYtOCIsIHVybCk7
CisgICAgICAgIH0sIFsmXShjb25zdCBTdHJpbmcmIHJlZmVycmVyKSB7CisgICAgICAgICAgICBm
cmFtZS0+bG9hZFVSTCh1cmwsIHJlZmVycmVyKTsKICAgICAgICAgfSk7CiAgICAgfQogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvRnJhbWVMb2FkU3RhdGUuY3BwIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvRnJhbWVMb2FkU3RhdGUuY3BwCmluZGV4IDI2ZjJhMDllOWZk
OGZmMGFhNGZmODQ0NzI5ODc4YzI2ZDU4NmNmNWUuLjdkOTUyOTViODlmY2E1M2U5MGMzYWY0NmNh
MzMxNzY2MjUzYzU4MzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0ZyYW1l
TG9hZFN0YXRlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9GcmFtZUxvYWRTdGF0
ZS5jcHAKQEAgLTMyLDYgKzMyLDE4IEBAIEZyYW1lTG9hZFN0YXRlOjp+RnJhbWVMb2FkU3RhdGUo
KQogewogfQogCit2b2lkIEZyYW1lTG9hZFN0YXRlOjphZGRPYnNlcnZlcihPYnNlcnZlciYgb2Jz
ZXJ2ZXIpCit7CisgICAgYXV0byByZXN1bHQgPSBtX29ic2VydmVycy5hZGQoJm9ic2VydmVyLCBt
YWtlV2Vha1B0cihvYnNlcnZlcikpOworICAgIEFTU0VSVF9VTlVTRUQocmVzdWx0LCByZXN1bHQu
aXNOZXdFbnRyeSk7Cit9CisKK3ZvaWQgRnJhbWVMb2FkU3RhdGU6OnJlbW92ZU9ic2VydmVyKE9i
c2VydmVyJiBvYnNlcnZlcikKK3sKKyAgICBhdXRvIHJlc3VsdCA9IG1fb2JzZXJ2ZXJzLnJlbW92
ZSgmb2JzZXJ2ZXIpOworICAgIEFTU0VSVF9VTlVTRUQocmVzdWx0LCByZXN1bHQpOworfQorCiB2
b2lkIEZyYW1lTG9hZFN0YXRlOjpkaWRTdGFydFByb3Zpc2lvbmFsTG9hZChjb25zdCBVUkwmIHVy
bCkKIHsKICAgICBBU1NFUlQobV9wcm92aXNpb25hbFVSTC5pc0VtcHR5KCkpOwpAQCAtNzcsNiAr
ODksMTMgQEAgdm9pZCBGcmFtZUxvYWRTdGF0ZTo6ZGlkRmluaXNoTG9hZCgpCiAgICAgQVNTRVJU
KG1fcHJvdmlzaW9uYWxVUkwuaXNFbXB0eSgpKTsKIAogICAgIG1fc3RhdGUgPSBTdGF0ZTo6Rmlu
aXNoZWQ7CisKKyAgICBhdXRvIG9ic2VydmVyc0NvcHkgPSBtX29ic2VydmVyczsKKyAgICBmb3Ig
KGNvbnN0IGF1dG8mIG9ic2VydmVyIDogb2JzZXJ2ZXJzQ29weSkgeworICAgICAgICBpZiAoIW9i
c2VydmVyLnZhbHVlKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIG9ic2VydmVyLnZh
bHVlLT5kaWRGaW5pc2hMb2FkKG1fdXJsKTsKKyAgICB9CiB9CiAKIHZvaWQgRnJhbWVMb2FkU3Rh
dGU6OmRpZEZhaWxMb2FkKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Zy
YW1lTG9hZFN0YXRlLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9GcmFtZUxvYWRTdGF0ZS5o
CmluZGV4IGMzNGUyN2RmMTg4YWJlNzZiNTk1N2M4MzZlZWM3OGI2Yzk3OWM4NDUuLjZkNDllMTM2
Y2M4OGMxMGQ3MzY4ZDI5OTdjYTU5MjlhYzlkMjIzMzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0ZyYW1lTG9hZFN0YXRlLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvRnJhbWVMb2FkU3RhdGUuaApAQCAtMjYsNiArMjYsNyBAQAogI3ByYWdtYSBvbmNlCiAKICNp
bmNsdWRlIDx3dGYvVVJMLmg+CisjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KIAogbmFtZXNwYWNl
IFdlYktpdCB7CiAKQEAgLTM5LDYgKzQwLDE2IEBAIHB1YmxpYzoKICAgICAgICAgRmluaXNoZWQK
ICAgICB9OwogCisgICAgY2xhc3MgT2JzZXJ2ZXIgOiBwdWJsaWMgQ2FuTWFrZVdlYWtQdHI8T2Jz
ZXJ2ZXI+IHsKKyAgICBwdWJsaWM6CisgICAgICAgIHZpcnR1YWwgfk9ic2VydmVyKCkgPSBkZWZh
dWx0OworCisgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRGaW5pc2hMb2FkKGNvbnN0IFVSTCYpID0g
MDsKKyAgICB9OworCisgICAgdm9pZCBhZGRPYnNlcnZlcihPYnNlcnZlciYpOworICAgIHZvaWQg
cmVtb3ZlT2JzZXJ2ZXIoT2JzZXJ2ZXImKTsKKwogICAgIHZvaWQgZGlkU3RhcnRQcm92aXNpb25h
bExvYWQoY29uc3QgVVJMJik7CiAgICAgdm9pZCBkaWRFeHBsaWNpdE9wZW4oY29uc3QgVVJMJik7
CiAgICAgdm9pZCBkaWRSZWNlaXZlU2VydmVyUmVkaXJlY3RGb3JQcm92aXNpb25hbExvYWQoY29u
c3QgVVJMJik7CkBAIC02NCw2ICs3NSw3IEBAIHByaXZhdGU6CiAgICAgVVJMIG1fcHJvdmlzaW9u
YWxVUkw7CiAgICAgVVJMIG1fdW5yZWFjaGFibGVVUkw7CiAgICAgVVJMIG1fbGFzdFVucmVhY2hh
YmxlVVJMOworICAgIEhhc2hNYXA8T2JzZXJ2ZXIqLCBXZWFrUHRyPE9ic2VydmVyPj4gbV9vYnNl
cnZlcnM7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1Rvb2xzL0No
YW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCAwNGQ4NWQwMDgxMjE0OWI0Yzg5MjA5OWVh
OTc4NzNlNDYxMWY1NGQ2Li43OTYwNWI1YTk1MjYzYTZmNWI0ZjZkNzQ5NjgwNzYzYzU2ODVjOTBm
IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMTggQEAKKzIwMTktMDktMjAgIEppZXdlbiBUYW4gIDxqaWV3ZW5fdGFuQGFwcGxlLmNv
bT4KKworICAgICAgICBTdWJGcmFtZVNPQXV0aG9yaXphdGlvblNlc3Npb24gc2hvdWxkIGVuc3Vy
ZSBtZXNzYWdlcyBhcmUgcG9zdGVkIGluIHRoZSByaWdodCBvcmRlciB0byB0aGUgcGFyZW50IGZy
YW1lCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDIw
NjEKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzU1NDg1NjY2PgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZHMgdGVzdHMgdGhhdCBjaGVjayB0aGUg
b3JkZXIgb2YgbWVzc2FnZXMgcG9zdGVkIGJ5IFN1YkZyYW1lU09BdXRob3JpemF0aW9uU2Vzc2lv
bi4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvVGVzdFNPQXV0
aG9yaXphdGlvbi5tbToKKyAgICAgICAgKC1bVGVzdFNPQXV0aG9yaXphdGlvblNjcmlwdE1lc3Nh
Z2VIYW5kbGVyIHVzZXJDb250ZW50Q29udHJvbGxlcjpkaWRSZWNlaXZlU2NyaXB0TWVzc2FnZTpd
KToKKyAgICAgICAgKHJlc2V0U3RhdGUpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVCk6
CisKIDIwMTktMDktMTAgIEtlaXRoIFJvbGxpbiAgPGtyb2xsaW5AYXBwbGUuY29tPgogCiAgICAg
ICAgIFJlbW92ZSBTU0wtYmFzZWQgVExTRGVwcmVjYXRpb24ubW0gY29udGVudHMKZGlmZiAtLWdp
dCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvVGVzdFNPQXV0aG9yaXph
dGlvbi5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvVGVzdFNPQXV0
aG9yaXphdGlvbi5tbQppbmRleCBkMGUyZTdkYmFhYzg0ODk5MDRjYWQ3YzE4ZmNhYWRjNzI5M2Ey
MWFiLi5kNjA3Yzc2YmIxMDE4ZjM5NjE4YzgwODRiZjAzZjdkY2U5OTdjYzgxIDEwMDY0NAotLS0g
YS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1Rlc3RTT0F1dGhvcml6YXRp
b24ubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9UZXN0U09B
dXRob3JpemF0aW9uLm1tCkBAIC01Myw2ICs1Myw3IEBAIHN0YXRpYyBib29sIHVpU2hvd2VkID0g
ZmFsc2U7CiBzdGF0aWMgYm9vbCBuZXdXaW5kb3dDcmVhdGVkID0gZmFsc2U7CiBzdGF0aWMgYm9v
bCBoYXZlSHR0cEJvZHkgPSBmYWxzZTsKIHN0YXRpYyBib29sIG5hdmlnYXRpb25Qb2xpY3lEZWNp
ZGVkID0gZmFsc2U7CitzdGF0aWMgYm9vbCBhbGxNZXNzYWdlc1JlY2VpdmVkID0gZmFsc2U7CiBz
dGF0aWMgU3RyaW5nIGZpbmFsVVJMOwogc3RhdGljIFNPQXV0aG9yaXphdGlvbiogZ0F1dGhvcml6
YXRpb247CiBzdGF0aWMgaWQ8U09BdXRob3JpemF0aW9uRGVsZWdhdGU+IGdEZWxlZ2F0ZTsKQEAg
LTI0MSw2ICsyNDIsMzcgQEAgLSAodm9pZCl2aWV3RGlkRGlzYXBwZWFyCiAKIEBlbmQKIAorQGlu
dGVyZmFjZSBUZXN0U09BdXRob3JpemF0aW9uU2NyaXB0TWVzc2FnZUhhbmRsZXIgOiBOU09iamVj
dCA8V0tTY3JpcHRNZXNzYWdlSGFuZGxlcj4KK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFRlc3RT
T0F1dGhvcml6YXRpb25TY3JpcHRNZXNzYWdlSGFuZGxlciB7CisgICAgUmV0YWluUHRyPE5TTXV0
YWJsZUFycmF5PiBfbWVzc2FnZXM7Cit9CisKKy0gKHZvaWQpdXNlckNvbnRlbnRDb250cm9sbGVy
OihXS1VzZXJDb250ZW50Q29udHJvbGxlciAqKXVzZXJDb250ZW50Q29udHJvbGxlciBkaWRSZWNl
aXZlU2NyaXB0TWVzc2FnZTooV0tTY3JpcHRNZXNzYWdlICopbWVzc2FnZQoreworICAgIGlmICgh
X21lc3NhZ2VzKQorICAgICAgICBfbWVzc2FnZXMgPSBhZG9wdE5TKFtbTlNNdXRhYmxlQXJyYXkg
YWxsb2NdIGluaXRdKTsKKyAgICBbX21lc3NhZ2VzIGFkZE9iamVjdDptZXNzYWdlLmJvZHldOwor
CisgICAgaWYgKFttZXNzYWdlLmJvZHkgaXNFcXVhbDpAIiJdKSB7CisgICAgICAgIGFsbE1lc3Nh
Z2VzUmVjZWl2ZWQgPSB0cnVlOworICAgICAgICBFWFBFQ1RfRVEoW19tZXNzYWdlcyBjb3VudF0s
IDV1KTsKKyAgICAgICAgRVhQRUNUX1dLX1NUUkVRKCJTT0F1dGhvcml6YXRpb25EaWRTdGFydCIs
IFtfbWVzc2FnZXMgb2JqZWN0QXRJbmRleDoxXSk7CisgICAgICAgIEVYUEVDVF9XS19TVFJFUSgi
U09BdXRob3JpemF0aW9uRGlkQ2FuY2VsIiwgW19tZXNzYWdlcyBvYmplY3RBdEluZGV4OjNdKTsK
KyAgICAgICAgRVhQRUNUX1dLX1NUUkVRKCIiLCBbX21lc3NhZ2VzIG9iamVjdEF0SW5kZXg6NF0p
OworICAgIH0KKworICAgIGlmIChbbWVzc2FnZS5ib2R5IGlzRXF1YWw6QCJIZWxsby4iXSkgewor
ICAgICAgICBhbGxNZXNzYWdlc1JlY2VpdmVkID0gdHJ1ZTsKKyAgICAgICAgRVhQRUNUX0VRKFtf
bWVzc2FnZXMgY291bnRdLCA0dSk7CisgICAgICAgIEVYUEVDVF9XS19TVFJFUSgiU09BdXRob3Jp
emF0aW9uRGlkU3RhcnQiLCBbX21lc3NhZ2VzIG9iamVjdEF0SW5kZXg6MV0pOworICAgICAgICBF
WFBFQ1RfV0tfU1RSRVEoIkhlbGxvLiIsIFtfbWVzc2FnZXMgb2JqZWN0QXRJbmRleDozXSk7Cisg
ICAgfQorfQorCitAZW5kCisKIHN0YXRpYyBib29sIG92ZXJyaWRlQ2FuUGVyZm9ybUF1dGhvcml6
YXRpb25XaXRoVVJMKGlkLCBTRUwsIE5TVVJMICp1cmwsIE5TSW50ZWdlcikKIHsKICAgICBpZiAo
IVt1cmwubGFzdFBhdGhDb21wb25lbnQgaXNFcXVhbDpAInNpbXBsZS5odG1sIl0gJiYgIVt1cmwu
aG9zdCBpc0VxdWFsOkAid3d3LmV4YW1wbGUuY29tIl0gJiYgIVt1cmwubGFzdFBhdGhDb21wb25l
bnQgaXNFcXVhbDpAIkdldFNlc3Npb25Db29raWUuaHRtbCJdKQpAQCAtMjkyLDYgKzMyNCw3IEBA
IHN0YXRpYyB2b2lkIHJlc2V0U3RhdGUoKQogICAgIG5ld1dpbmRvd0NyZWF0ZWQgPSBmYWxzZTsK
ICAgICBoYXZlSHR0cEJvZHkgPSBmYWxzZTsKICAgICBuYXZpZ2F0aW9uUG9saWN5RGVjaWRlZCA9
IGZhbHNlOworICAgIGFsbE1lc3NhZ2VzUmVjZWl2ZWQgPSBmYWxzZTsKICAgICBmaW5hbFVSTCA9
IGVtcHR5U3RyaW5nKCk7CiAgICAgZ0F1dGhvcml6YXRpb24gPSBudWxscHRyOwogICAgIGdEZWxl
Z2F0ZSA9IG51bGxwdHI7CkBAIC0yMjIwLDYgKzIyNTMsNjAgQEAgVEVTVChTT0F1dGhvcml6YXRp
b25TdWJGcmFtZSwgSW50ZXJjZXB0aW9uRXJyb3JXaXRoUmVmZXJyZXIpCiAgICAgW3dlYlZpZXcg
d2FpdEZvck1lc3NhZ2U6KGlkKW1ha2VTdHJpbmcoIlJlZmVycmVyOiAiLCBvcmlnaW4sICIvIild
OyAvLyBSZWZlcnJlciBwb2xpY3kgcmVxdWlyZXMgJy8nIGFmdGVyIG9yaWdpbi4KIH0KIAorVEVT
VChTT0F1dGhvcml6YXRpb25TdWJGcmFtZSwgSW50ZXJjZXB0aW9uRXJyb3JNZXNzYWdlT3JkZXIp
Cit7CisgICAgcmVzZXRTdGF0ZSgpOworICAgIENsYXNzTWV0aG9kU3dpenpsZXIgc3dpenpsZXIx
KFBBTDo6Z2V0U09BdXRob3JpemF0aW9uQ2xhc3MoKSwgQHNlbGVjdG9yKGNhblBlcmZvcm1BdXRo
b3JpemF0aW9uV2l0aFVSTDpyZXNwb25zZUNvZGU6KSwgcmVpbnRlcnByZXRfY2FzdDxJTVA+KG92
ZXJyaWRlQ2FuUGVyZm9ybUF1dGhvcml6YXRpb25XaXRoVVJMKSk7CisgICAgSW5zdGFuY2VNZXRo
b2RTd2l6emxlciBzd2l6emxlcjIoUEFMOjpnZXRTT0F1dGhvcml6YXRpb25DbGFzcygpLCBAc2Vs
ZWN0b3Ioc2V0RGVsZWdhdGU6KSwgcmVpbnRlcnByZXRfY2FzdDxJTVA+KG92ZXJyaWRlU2V0RGVs
ZWdhdGUpKTsKKyAgICBJbnN0YW5jZU1ldGhvZFN3aXp6bGVyIHN3aXp6bGVyMyhQQUw6OmdldFNP
QXV0aG9yaXphdGlvbkNsYXNzKCksIEBzZWxlY3RvcihiZWdpbkF1dGhvcml6YXRpb25XaXRoVVJM
Omh0dHBIZWFkZXJzOmh0dHBCb2R5OiksIHJlaW50ZXJwcmV0X2Nhc3Q8SU1QPihvdmVycmlkZUJl
Z2luQXV0aG9yaXphdGlvbldpdGhVUkwpKTsKKyAgICBDbGFzc01ldGhvZFN3aXp6bGVyIHN3aXp6
bGVyNChbQUtBdXRob3JpemF0aW9uQ29udHJvbGxlciBjbGFzc10sIEBzZWxlY3Rvcihpc1VSTEZy
b21BcHBsZU93bmVkRG9tYWluOiksIHJlaW50ZXJwcmV0X2Nhc3Q8SU1QPihvdmVycmlkZUlzVVJM
RnJvbUFwcGxlT3duZWREb21haW4pKTsKKworICAgIFJldGFpblB0cjxOU1VSTD4gYmFzZVVSTCA9
IFtbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gVVJMRm9yUmVzb3VyY2U6QCJzaW1wbGUyIiB3aXRoRXh0
ZW5zaW9uOkAiaHRtbCIgc3ViZGlyZWN0b3J5OkAiVGVzdFdlYktpdEFQSS5yZXNvdXJjZXMiXTsK
KyAgICBSZXRhaW5QdHI8TlNVUkw+IHRlc3RVUkwgPSBbW05TQnVuZGxlIG1haW5CdW5kbGVdIFVS
TEZvclJlc291cmNlOkAiR2V0U2Vzc2lvbkNvb2tpZSIgd2l0aEV4dGVuc2lvbjpAImh0bWwiIHN1
YmRpcmVjdG9yeTpAIlRlc3RXZWJLaXRBUEkucmVzb3VyY2VzIl07CisgICAgYXV0byB0ZXN0SHRt
bCA9IGdlbmVyYXRlSHRtbChwYXJlbnRUZW1wbGF0ZSwgdGVzdFVSTC5nZXQoKS5hYnNvbHV0ZVN0
cmluZyk7CisKKyAgICBhdXRvIGNvbmZpZ3VyYXRpb24gPSBhZG9wdE5TKFtbV0tXZWJWaWV3Q29u
ZmlndXJhdGlvbiBhbGxvY10gaW5pdF0pOworICAgIGF1dG8gbWVzc2FnZUhhbmRsZXIgPSBhZG9w
dE5TKFtbVGVzdFNPQXV0aG9yaXphdGlvblNjcmlwdE1lc3NhZ2VIYW5kbGVyIGFsbG9jXSBpbml0
XSk7CisgICAgW1tjb25maWd1cmF0aW9uIHVzZXJDb250ZW50Q29udHJvbGxlcl0gYWRkU2NyaXB0
TWVzc2FnZUhhbmRsZXI6bWVzc2FnZUhhbmRsZXIuZ2V0KCkgbmFtZTpAInRlc3RIYW5kbGVyIl07
CisKKyAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5p
dFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKSBjb25maWd1cmF0aW9uOmNvbmZp
Z3VyYXRpb24uZ2V0KCldKTsKKyAgICBhdXRvIGRlbGVnYXRlID0gYWRvcHROUyhbW1Rlc3RTT0F1
dGhvcml6YXRpb25EZWxlZ2F0ZSBhbGxvY10gaW5pdF0pOworICAgIGNvbmZpZ3VyZVNPQXV0aG9y
aXphdGlvbldlYlZpZXcod2ViVmlldy5nZXQoKSwgZGVsZWdhdGUuZ2V0KCkpOworCisgICAgW3dl
YlZpZXcgbG9hZEhUTUxTdHJpbmc6dGVzdEh0bWwgYmFzZVVSTDpiYXNlVVJMLmdldCgpXTsKKyAg
ICBVdGlsOjpydW4oJmF1dGhvcml6YXRpb25QZXJmb3JtZWQpOworICAgIFtnRGVsZWdhdGUgYXV0
aG9yaXphdGlvbjpnQXV0aG9yaXphdGlvbiBkaWRDb21wbGV0ZVdpdGhFcnJvcjphZG9wdE5TKFtb
TlNFcnJvciBhbGxvY10gaW5pdFdpdGhEb21haW46TlNDb2NvYUVycm9yRG9tYWluIGNvZGU6MCB1
c2VySW5mbzpuaWxdKS5nZXQoKV07CisgICAgVXRpbDo6cnVuKCZhbGxNZXNzYWdlc1JlY2VpdmVk
KTsKK30KKworVEVTVChTT0F1dGhvcml6YXRpb25TdWJGcmFtZSwgSW50ZXJjZXB0aW9uU3VjY2Vz
c01lc3NhZ2VPcmRlcikKK3sKKyAgICByZXNldFN0YXRlKCk7CisgICAgQ2xhc3NNZXRob2RTd2l6
emxlciBzd2l6emxlcjEoUEFMOjpnZXRTT0F1dGhvcml6YXRpb25DbGFzcygpLCBAc2VsZWN0b3Io
Y2FuUGVyZm9ybUF1dGhvcml6YXRpb25XaXRoVVJMOnJlc3BvbnNlQ29kZTopLCByZWludGVycHJl
dF9jYXN0PElNUD4ob3ZlcnJpZGVDYW5QZXJmb3JtQXV0aG9yaXphdGlvbldpdGhVUkwpKTsKKyAg
ICBJbnN0YW5jZU1ldGhvZFN3aXp6bGVyIHN3aXp6bGVyMihQQUw6OmdldFNPQXV0aG9yaXphdGlv
bkNsYXNzKCksIEBzZWxlY3RvcihzZXREZWxlZ2F0ZTopLCByZWludGVycHJldF9jYXN0PElNUD4o
b3ZlcnJpZGVTZXREZWxlZ2F0ZSkpOworICAgIEluc3RhbmNlTWV0aG9kU3dpenpsZXIgc3dpenps
ZXIzKFBBTDo6Z2V0U09BdXRob3JpemF0aW9uQ2xhc3MoKSwgQHNlbGVjdG9yKGJlZ2luQXV0aG9y
aXphdGlvbldpdGhVUkw6aHR0cEhlYWRlcnM6aHR0cEJvZHk6KSwgcmVpbnRlcnByZXRfY2FzdDxJ
TVA+KG92ZXJyaWRlQmVnaW5BdXRob3JpemF0aW9uV2l0aFVSTCkpOworICAgIENsYXNzTWV0aG9k
U3dpenpsZXIgc3dpenpsZXI0KFtBS0F1dGhvcml6YXRpb25Db250cm9sbGVyIGNsYXNzXSwgQHNl
bGVjdG9yKGlzVVJMRnJvbUFwcGxlT3duZWREb21haW46KSwgcmVpbnRlcnByZXRfY2FzdDxJTVA+
KG92ZXJyaWRlSXNVUkxGcm9tQXBwbGVPd25lZERvbWFpbikpOworCisgICAgYXV0byB0ZXN0VVJM
ID0gVVJMKFVSTCgpLCAiaHR0cDovL3d3dy5leGFtcGxlLmNvbSIpOworICAgIGF1dG8gdGVzdEh0
bWwgPSBnZW5lcmF0ZUh0bWwocGFyZW50VGVtcGxhdGUsIHRlc3RVUkwuc3RyaW5nKCkpOworCisg
ICAgYXV0byBjb25maWd1cmF0aW9uID0gYWRvcHROUyhbW1dLV2ViVmlld0NvbmZpZ3VyYXRpb24g
YWxsb2NdIGluaXRdKTsKKyAgICBhdXRvIG1lc3NhZ2VIYW5kbGVyID0gYWRvcHROUyhbW1Rlc3RT
T0F1dGhvcml6YXRpb25TY3JpcHRNZXNzYWdlSGFuZGxlciBhbGxvY10gaW5pdF0pOworICAgIFtb
Y29uZmlndXJhdGlvbiB1c2VyQ29udGVudENvbnRyb2xsZXJdIGFkZFNjcmlwdE1lc3NhZ2VIYW5k
bGVyOm1lc3NhZ2VIYW5kbGVyLmdldCgpIG5hbWU6QCJ0ZXN0SGFuZGxlciJdOworCisgICAgYXV0
byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6
Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCkgY29uZmlndXJhdGlvbjpjb25maWd1cmF0aW9uLmdl
dCgpXSk7CisgICAgYXV0byBkZWxlZ2F0ZSA9IGFkb3B0TlMoW1tUZXN0U09BdXRob3JpemF0aW9u
RGVsZWdhdGUgYWxsb2NdIGluaXRdKTsKKyAgICBjb25maWd1cmVTT0F1dGhvcml6YXRpb25XZWJW
aWV3KHdlYlZpZXcuZ2V0KCksIGRlbGVnYXRlLmdldCgpKTsKKworICAgIFt3ZWJWaWV3IGxvYWRI
VE1MU3RyaW5nOnRlc3RIdG1sIGJhc2VVUkw6bmlsXTsKKyAgICBVdGlsOjpydW4oJmF1dGhvcml6
YXRpb25QZXJmb3JtZWQpOworCisgICAgYXV0byByZXNwb25zZSA9IGFkb3B0TlMoW1tOU0hUVFBV
UkxSZXNwb25zZSBhbGxvY10gaW5pdFdpdGhVUkw6dGVzdFVSTCBzdGF0dXNDb2RlOjIwMCBIVFRQ
VmVyc2lvbjpAIkhUVFAvMS4xIiBoZWFkZXJGaWVsZHM6bmlsXSk7CisgICAgYXV0byBpZnJhbWVI
dG1sQ1N0cmluZyA9IGdlbmVyYXRlSHRtbChpZnJhbWVUZW1wbGF0ZSwgIiIpLnV0ZjgoKTsKKyAg
ICBbZ0RlbGVnYXRlIGF1dGhvcml6YXRpb246Z0F1dGhvcml6YXRpb24gZGlkQ29tcGxldGVXaXRo
SFRUUFJlc3BvbnNlOnJlc3BvbnNlLmdldCgpIGh0dHBCb2R5OmFkb3B0TlMoW1tOU0RhdGEgYWxs
b2NdIGluaXRXaXRoQnl0ZXM6aWZyYW1lSHRtbENTdHJpbmcuZGF0YSgpIGxlbmd0aDppZnJhbWVI
dG1sQ1N0cmluZy5sZW5ndGgoKV0pLmdldCgpXTsKKyAgICBVdGlsOjpydW4oJmFsbE1lc3NhZ2Vz
UmVjZWl2ZWQpOworfQorCiB9IC8vIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJCiAKICNlbmRpZgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>379587</attachid>
            <date>2019-09-25 16:00:01 -0700</date>
            <delta_ts>2019-09-26 02:52:12 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-202061-20190925160000.patch</filename>
            <type>text/plain</type>
            <size>23488</size>
            <attacher name="Jiewen Tan">jiewen_tan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUwMzU0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGM2ZThlNGQ4NjM0OTcyMWRm
Y2Q3MDU5MWMyNTE2ZTQxYTQ0MmQyNGYuLjY5ZDE0ZmM4YzA2MDkzOTJhMzYxNzI5YTU1N2I2ZjE4
NDU0NzU4ZDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTIgQEAKKzIwMTktMDktMjAgIEppZXdlbiBU
YW4gIDxqaWV3ZW5fdGFuQGFwcGxlLmNvbT4KKworICAgICAgICBTdWJGcmFtZVNPQXV0aG9yaXph
dGlvblNlc3Npb24gc2hvdWxkIGVuc3VyZSBtZXNzYWdlcyBhcmUgcG9zdGVkIGluIHRoZSByaWdo
dCBvcmRlciB0byB0aGUgcGFyZW50IGZyYW1lCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMDIwNjEKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzU1NDg1
NjY2PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRo
aXMgcGF0Y2ggZW5zdXJlcyBtZXNzYWdlcyB0aGF0IHNpZ25hbCB0aGUgcHJvY2VzcyBvZiBTT0F1
dGhvcml6YXRpb24gaW50ZXJjZXB0aW9uIGFyZSBwb3N0ZWQgaW4KKyAgICAgICAgdGhlIHJpZ2h0
IG9yZGVyIHRvIHRoZSBwYXJlbnQgZnJhbWUuIEJlZm9yZSB0aGlzIHBhdGNoLCB0aGVyZSBhcmUg
Y2hhbmNlcyB0aGF0IFNPQXV0aG9yaXphdGlvbkRpZENhbmNlbAorICAgICAgICBjb3VsZCBiZSBw
b3N0ZWQgdG8gdGhlIHBhcmVudCBiZWZvcmUgU09BdXRob3JpemF0aW9uRGlkU3RhcnQuIFRoZXJl
IGFyZSBmZXcgY2F1c2VzIHRoYXQgbGVhZCB0bworICAgICAgICB0aGlzIHJhY2UgY29uZGl0aW9u
OgorICAgICAgICAxKSBTdWJGcmFtZVNPQXV0aG9yaXphdGlvblNlc3Npb246OmJlZm9yZVN0YXJ0
IHBvc3RzIFNPQXV0aG9yaXphdGlvbkRpZFN0YXJ0IGluIHRoZSBuZXh0IHJ1bmxvb3AuIFNvCisg
ICAgICAgIGV4dGVuc2lvbiBjb3VsZCBoYXZlIHRoZSBjaGFuY2UgdG8gaW52b2tlIFN1YkZyYW1l
U09BdXRob3JpemF0aW9uU2Vzc2lvbjo6ZmFsbEJhY2tUb1dlYlBhdGhJbnRlcm5hbAorICAgICAg
ICBiZWZvcmUgU09BdXRob3JpemF0aW9uRGlkU3RhcnQgaXMgcG9zdGVkLgorICAgICAgICAyKSBF
dmVuIGlmIHRoZSBvcmRlciBpcyByaWdodCBpbiB0aGUgVUkgcHJvY2VzcywgaXQgaXMgbm90IGd1
YXJhbnRlZWQgdGhhdCBXZWIgcHJvY2VzcyB3aWxsIHN0cmljdGx5CisgICAgICAgIGZvbGxvdyB0
aGUgb3JkZXIgYXMgdGhlIGxvYWRpbmcgcHJvY2VzcyBpcyBhc3luYy4KKworICAgICAgICBUbyBm
aXggdGhlIGlzc3VlOgorICAgICAgICAxKSBTdWJGcmFtZVNPQXV0aG9yaXphdGlvblNlc3Npb246
OmJlZm9yZVN0YXJ0IG5vdyBwb3N0cyBTT0F1dGhvcml6YXRpb25EaWRTdGFydCBpbiB0aGUgc2Ft
ZSBydW5sb29wLgorICAgICAgICAyKSBPYnNlcnZlciBpcyBpbnRyb2R1Y2VkIGluIEZyYW1lTG9h
ZFN0YXRlIHN1Y2ggdGhhdCBTdWJGcmFtZVNPQXV0aG9yaXphdGlvblNlc3Npb24gY291bGQga25v
dyBpZgorICAgICAgICB0aGUgbG9hZGluZyBpcyBmaW5pc2hlZC4gV2l0aCB0aGlzIG5ldyBjYXBh
Y2l0eSwgU3ViRnJhbWVTT0F1dGhvcml6YXRpb25TZXNzaW9uIGNhbiBlbnN1cmUgaXQgb25seQor
ICAgICAgICBwb3N0cyBuZXh0IG1lc3NhZ2Ugd2hlbiB0aGUgcHJldmlvdXMgbWVzc2FnZSBoYXMg
YmVlbiBwb3N0ZWQuCisKKyAgICAgICAgSW1wbGVtZW50YXRpb24gd2lzZSwgYSBkZXF1ZSB0byBx
dWV1ZSByZXF1ZXN0cyBpcyBwcm92aWRlZCB0byBtYWludGFpbiBvcmRlci4KKyAgICAgICAgMSkg
V2hlbiBuZXcgcmVxdWVzdCBpcyBhZGRlZCB0byB0aGUgZGVxdWUsIFN1YkZyYW1lU09BdXRob3Jp
emF0aW9uU2Vzc2lvbiB3aWxsIG9ubHkgbG9hZCB0aGUgcmVxdWVzdAorICAgICAgICBpZiBpdCBp
cyB0aGUgb25seSBlbGVtZW50IGluIHRoZSBkZXF1ZS4gT3RoZXJ3aXNlLCBpdCBkb2VzIG5vdGhp
bmcuCisgICAgICAgIDIpIFdoZW4gU3ViRnJhbWVTT0F1dGhvcml6YXRpb25TZXNzaW9uIHJlY2Vp
dmVzIGRpZEZpbmlzaExvYWQsIGl0IHBvcHMgdGhlIGhlYWQgb2YgdGhlIHF1ZXVlIGFuZCBsb2Fk
cworICAgICAgICB0aGUgbmV4dCByZXF1ZXN0IGluIHRoZSBxdWV1ZSBpZiBhbnkuCisgICAgICAg
IFRoZSBhYm92ZSBkZXNpZ24gc2hvdWxkIGd1YXJhbnRlZSBhbGwgcmVxdWVzdHMgYXJlIGxvYWRl
ZCBpbiBzZXF1ZW5jZS4KKworICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9TT0F1dGhvcml6YXRp
b24vU3ViRnJhbWVTT0F1dGhvcml6YXRpb25TZXNzaW9uLmg6CisgICAgICAgICogVUlQcm9jZXNz
L0NvY29hL1NPQXV0aG9yaXphdGlvbi9TdWJGcmFtZVNPQXV0aG9yaXphdGlvblNlc3Npb24ubW06
CisgICAgICAgIChXZWJLaXQ6OlN1YkZyYW1lU09BdXRob3JpemF0aW9uU2Vzc2lvbjo6U3ViRnJh
bWVTT0F1dGhvcml6YXRpb25TZXNzaW9uKToKKyAgICAgICAgKFdlYktpdDo6U3ViRnJhbWVTT0F1
dGhvcml6YXRpb25TZXNzaW9uOjp+U3ViRnJhbWVTT0F1dGhvcml6YXRpb25TZXNzaW9uKToKKyAg
ICAgICAgKFdlYktpdDo6U3ViRnJhbWVTT0F1dGhvcml6YXRpb25TZXNzaW9uOjpmYWxsQmFja1Rv
V2ViUGF0aEludGVybmFsKToKKyAgICAgICAgKFdlYktpdDo6U3ViRnJhbWVTT0F1dGhvcml6YXRp
b25TZXNzaW9uOjpjb21wbGV0ZUludGVybmFsKToKKyAgICAgICAgKFdlYktpdDo6U3ViRnJhbWVT
T0F1dGhvcml6YXRpb25TZXNzaW9uOjpiZWZvcmVTdGFydCk6CisgICAgICAgIChXZWJLaXQ6OlN1
YkZyYW1lU09BdXRob3JpemF0aW9uU2Vzc2lvbjo6ZGlkRmluaXNoTG9hZCk6CisgICAgICAgIChX
ZWJLaXQ6OlN1YkZyYW1lU09BdXRob3JpemF0aW9uU2Vzc2lvbjo6YXBwZW5kUmVxdWVzdFRvTG9h
ZCk6CisgICAgICAgIChXZWJLaXQ6OlN1YkZyYW1lU09BdXRob3JpemF0aW9uU2Vzc2lvbjo6bG9h
ZFJlcXVlc3RUb0ZyYW1lKToKKyAgICAgICAgKFdlYktpdDo6U3ViRnJhbWVTT0F1dGhvcml6YXRp
b25TZXNzaW9uOjpsb2FkRGF0YVRvRnJhbWUpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpT
dWJGcmFtZVNPQXV0aG9yaXphdGlvblNlc3Npb246OnBvc3REaWRDYW5jZWxNZXNzYWdlVG9QYXJl
bnQpOiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9GcmFtZUxvYWRTdGF0ZS5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OkZyYW1lTG9hZFN0YXRlOjphZGRPYnNlcnZlcik6CisgICAgICAgIChX
ZWJLaXQ6OkZyYW1lTG9hZFN0YXRlOjpyZW1vdmVPYnNlcnZlcik6CisgICAgICAgIChXZWJLaXQ6
OkZyYW1lTG9hZFN0YXRlOjpkaWRGaW5pc2hMb2FkKToKKyAgICAgICAgKiBVSVByb2Nlc3MvRnJh
bWVMb2FkU3RhdGUuaDoKKwogMjAxOS0wOS0yNSAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3Rl
bnNlbkB3ZWJraXQub3JnPgogCiAgICAgICAgIERvbid0IGZhbGwgYmFjayB0byBkZWZhdWx0IHNl
c3Npb24gaWYgc2Vzc2lvbiBjYW4ndCBiZSBmb3VuZCBmb3IgY29va2llIG9wZXJhdGlvbnMKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1NPQXV0aG9yaXphdGlvbi9T
dWJGcmFtZVNPQXV0aG9yaXphdGlvblNlc3Npb24uaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0NvY29hL1NPQXV0aG9yaXphdGlvbi9TdWJGcmFtZVNPQXV0aG9yaXphdGlvblNlc3Npb24uaApp
bmRleCA3ZjdiMWY5ZmU1Y2NlNjA0ZTc2MTMxYzRlYTM5NWRjOWZhM2Q3NzNkLi5lNDYyYjAxYzY1
ZWQzZDc4MDdlMTQ5ZTMyMzJlYWQyZjQzNDdhNjBlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9Db2NvYS9TT0F1dGhvcml6YXRpb24vU3ViRnJhbWVTT0F1dGhvcml6YXRpb25T
ZXNzaW9uLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvU09BdXRob3JpemF0
aW9uL1N1YkZyYW1lU09BdXRob3JpemF0aW9uU2Vzc2lvbi5oCkBAIC0yNyw2ICsyNyw3IEBACiAK
ICNpZiBIQVZFKEFQUF9TU08pCiAKKyNpbmNsdWRlICJGcmFtZUxvYWRTdGF0ZS5oIgogI2luY2x1
ZGUgIk5hdmlnYXRpb25TT0F1dGhvcml6YXRpb25TZXNzaW9uLmgiCiAKIG5hbWVzcGFjZSBJUEMg
ewpAQCAtMzUsMTMgKzM2LDE5IEBAIGNsYXNzIERhdGFSZWZlcmVuY2U7CiAKIG5hbWVzcGFjZSBX
ZWJLaXQgewogCi1jbGFzcyBTdWJGcmFtZVNPQXV0aG9yaXphdGlvblNlc3Npb24gZmluYWwgOiBw
dWJsaWMgTmF2aWdhdGlvblNPQXV0aG9yaXphdGlvblNlc3Npb24geworY2xhc3MgU3ViRnJhbWVT
T0F1dGhvcml6YXRpb25TZXNzaW9uIGZpbmFsIDogcHVibGljIE5hdmlnYXRpb25TT0F1dGhvcml6
YXRpb25TZXNzaW9uLCBwdWJsaWMgRnJhbWVMb2FkU3RhdGU6Ok9ic2VydmVyIHsKIHB1YmxpYzoK
ICAgICB1c2luZyBDYWxsYmFjayA9IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+OworICAg
IHVzaW5nIFNPQXV0aG9yaXphdGlvblNlc3Npb246OndlYWtQdHJGYWN0b3J5OworICAgIHVzaW5n
IFdlYWtWYWx1ZVR5cGUgPSBTT0F1dGhvcml6YXRpb25TZXNzaW9uOjpXZWFrVmFsdWVUeXBlOwog
CiAgICAgc3RhdGljIFJlZjxTT0F1dGhvcml6YXRpb25TZXNzaW9uPiBjcmVhdGUoU09BdXRob3Jp
emF0aW9uICpzb0F1dGhvcml6YXRpb24sIFJlZjxBUEk6Ok5hdmlnYXRpb25BY3Rpb24+JiYgbmF2
aWdhdGlvbkFjdGlvbiwgV2ViUGFnZVByb3h5JiBwYWdlLCBDYWxsYmFjayYmIGNvbXBsZXRpb25I
YW5kbGVyKTsKIAorICAgIH5TdWJGcmFtZVNPQXV0aG9yaXphdGlvblNlc3Npb24oKTsKKwogcHJp
dmF0ZToKKyAgICB1c2luZyBTdXBwbGVtZW50ID0gVmFyaWFudDxWZWN0b3I8dWludDhfdD4sIFN0
cmluZz47CisKICAgICBTdWJGcmFtZVNPQXV0aG9yaXphdGlvblNlc3Npb24oU09BdXRob3JpemF0
aW9uICosIFJlZjxBUEk6Ok5hdmlnYXRpb25BY3Rpb24+JiYsIFdlYlBhZ2VQcm94eSYsIENhbGxi
YWNrJiYpOwogCiAgICAgLy8gU09BdXRob3JpemF0aW9uU2Vzc2lvbgpAQCAtNTIsOCArNTksMTQg
QEAgcHJpdmF0ZToKICAgICAvLyBOYXZpZ2F0aW9uU09BdXRob3JpemF0aW9uU2Vzc2lvbgogICAg
IHZvaWQgYmVmb3JlU3RhcnQoKSBmaW5hbDsKIAotICAgIHZvaWQgbG9hZERhdGFUb0ZyYW1lKGNv
bnN0IElQQzo6RGF0YVJlZmVyZW5jZSYsIGNvbnN0IFVSTCYpOwotICAgIHZvaWQgcG9zdERpZENh
bmNlbE1lc3NhZ2VUb1BhcmVudChGdW5jdGlvbjx2b2lkKCk+JiYpOworICAgIC8vIEZyYW1lTG9h
ZFN0YXRlOjpPYnNlcnZlcgorICAgIHZvaWQgZGlkRmluaXNoTG9hZCgpIGZpbmFsOworCisgICAg
dm9pZCBhcHBlbmRSZXF1ZXN0VG9Mb2FkKFVSTCYmLCBTdXBwbGVtZW50JiYpOworICAgIHZvaWQg
bG9hZFJlcXVlc3RUb0ZyYW1lKCk7CisKKyAgICBPcHRpb25hbDxXZWJDb3JlOjpGcmFtZUlkZW50
aWZpZXI+IG1fZnJhbWVJRDsKKyAgICBEZXF1ZTxzdGQ6OnBhaXI8VVJMLCBTdXBwbGVtZW50Pj4g
bV9yZXF1ZXN0c1RvTG9hZDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvU09BdXRob3JpemF0aW9uL1N1YkZyYW1l
U09BdXRob3JpemF0aW9uU2Vzc2lvbi5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29h
L1NPQXV0aG9yaXphdGlvbi9TdWJGcmFtZVNPQXV0aG9yaXphdGlvblNlc3Npb24ubW0KaW5kZXgg
MGNiZWYwZDFkZDRkZWRhNDQ4YzVkZDZiYWQ3MzRhNDBkNDUxM2U0NC4uODU2YmFhZTNlMjExNjRm
OTE3OTc3YWM4ZmRkYWUxOTdlNGMzNWI5NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQ29jb2EvU09BdXRob3JpemF0aW9uL1N1YkZyYW1lU09BdXRob3JpemF0aW9uU2Vzc2lv
bi5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9TT0F1dGhvcml6YXRpb24v
U3ViRnJhbWVTT0F1dGhvcml6YXRpb25TZXNzaW9uLm1tCkBAIC0zOSw4ICszOSwxOSBAQAogbmFt
ZXNwYWNlIFdlYktpdCB7CiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAorbmFtZXNwYWNlIHsK
KwogY29uc3QgY2hhciogc29BdXRob3JpemF0aW9uUG9zdERpZFN0YXJ0TWVzc2FnZVRvUGFyZW50
ID0gIjxzY3JpcHQ+cGFyZW50LnBvc3RNZXNzYWdlKCdTT0F1dGhvcml6YXRpb25EaWRTdGFydCcs
ICcqJyk7PC9zY3JpcHQ+IjsKLWNvbnN0IGNoYXIqIHNvQXV0aG9yaXphdGlvblBvc3REaWRDYW5j
ZWxNZXNzYWdlVG9QYXJlbnQgPSAicGFyZW50LnBvc3RNZXNzYWdlKCdTT0F1dGhvcml6YXRpb25E
aWRDYW5jZWwnLCAnKicpOyI7Citjb25zdCBjaGFyKiBzb0F1dGhvcml6YXRpb25Qb3N0RGlkQ2Fu
Y2VsTWVzc2FnZVRvUGFyZW50ID0gIjxzY3JpcHQ+cGFyZW50LnBvc3RNZXNzYWdlKCdTT0F1dGhv
cml6YXRpb25EaWRDYW5jZWwnLCAnKicpOzwvc2NyaXB0PiI7CisKK3N0YXRpYyBpbmxpbmUgVmVj
dG9yPHVpbnQ4X3Q+IGNvbnZlcnRCeXRlc1RvVmVjdG9yKGNvbnN0IHVpbnQ4X3QgYnl0ZUFycmF5
W10sIGNvbnN0IHNpemVfdCBsZW5ndGgpCit7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IHJlc3VsdDsK
KyAgICByZXN1bHQuYXBwZW5kKGJ5dGVBcnJheSwgbGVuZ3RoKTsKKyAgICByZXR1cm4gcmVzdWx0
OworfQorCit9IC8vIG5hbWVzcGFjZQogCiBSZWY8U09BdXRob3JpemF0aW9uU2Vzc2lvbj4gU3Vi
RnJhbWVTT0F1dGhvcml6YXRpb25TZXNzaW9uOjpjcmVhdGUoU09BdXRob3JpemF0aW9uICpzb0F1
dGhvcml6YXRpb24sIFJlZjxBUEk6Ok5hdmlnYXRpb25BY3Rpb24+JiYgbmF2aWdhdGlvbkFjdGlv
biwgV2ViUGFnZVByb3h5JiBwYWdlLCBDYWxsYmFjayYmIGNvbXBsZXRpb25IYW5kbGVyKQogewpA
QCAtNTAsMjggKzYxLDI4IEBAIFJlZjxTT0F1dGhvcml6YXRpb25TZXNzaW9uPiBTdWJGcmFtZVNP
QXV0aG9yaXphdGlvblNlc3Npb246OmNyZWF0ZShTT0F1dGhvcml6YXRpCiBTdWJGcmFtZVNPQXV0
aG9yaXphdGlvblNlc3Npb246OlN1YkZyYW1lU09BdXRob3JpemF0aW9uU2Vzc2lvbihTT0F1dGhv
cml6YXRpb24gKnNvQXV0aG9yaXphdGlvbiwgUmVmPEFQSTo6TmF2aWdhdGlvbkFjdGlvbj4mJiBu
YXZpZ2F0aW9uQWN0aW9uLCBXZWJQYWdlUHJveHkmIHBhZ2UsIENhbGxiYWNrJiYgY29tcGxldGlv
bkhhbmRsZXIpCiAgICAgOiBOYXZpZ2F0aW9uU09BdXRob3JpemF0aW9uU2Vzc2lvbihzb0F1dGhv
cml6YXRpb24sIFdURk1vdmUobmF2aWdhdGlvbkFjdGlvbiksIHBhZ2UsIEluaXRpYXRpbmdBY3Rp
b246OlN1YkZyYW1lLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSkKIHsKKyAgICBBU1NFUlQo
dGhpcy0+bmF2aWdhdGlvbkFjdGlvbigpKTsKKyAgICBpZiAoYXV0byogdGFyZ2V0RnJhbWUgPSB0
aGlzLT5uYXZpZ2F0aW9uQWN0aW9uKCktPnRhcmdldEZyYW1lKCkpIHsKKyAgICAgICAgbV9mcmFt
ZUlEID0gdGFyZ2V0RnJhbWUtPmhhbmRsZSgpLmZyYW1lSUQoKTsKKyAgICAgICAgaWYgKGF1dG8q
IGZyYW1lID0gcGFnZS5wcm9jZXNzKCkud2ViRnJhbWUoKm1fZnJhbWVJRCkpCisgICAgICAgICAg
ICBmcmFtZS0+ZnJhbWVMb2FkU3RhdGUoKS5hZGRPYnNlcnZlcigqdGhpcyk7CisgICAgfQorfQor
CitTdWJGcmFtZVNPQXV0aG9yaXphdGlvblNlc3Npb246On5TdWJGcmFtZVNPQXV0aG9yaXphdGlv
blNlc3Npb24oKQoreworICAgIGF1dG8qIHBhZ2UgPSB0aGlzLT5wYWdlKCk7CisgICAgaWYgKCFw
YWdlIHx8ICFtX2ZyYW1lSUQpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoYXV0byogZnJhbWUg
PSBwYWdlLT5wcm9jZXNzKCkud2ViRnJhbWUoKm1fZnJhbWVJRCkpCisgICAgICAgIGZyYW1lLT5m
cmFtZUxvYWRTdGF0ZSgpLnJlbW92ZU9ic2VydmVyKCp0aGlzKTsKIH0KIAogdm9pZCBTdWJGcmFt
ZVNPQXV0aG9yaXphdGlvblNlc3Npb246OmZhbGxCYWNrVG9XZWJQYXRoSW50ZXJuYWwoKQogewot
ICAgIC8vIEluc3RlYWQgb2YgaXNzdWluZyBhIGxvYWQsIHdlIGV4ZWN1dGUgdGhlIEphdmFzY3Jp
cHQgZGlyZWN0bHkuIFRoaXMgcHJvdmlkZXMgdXMgYSBjYWxsYmFjawotICAgIC8vIHRvIGVuc3Vy
ZSB0aGUgZmluYWwgbG9hZCBpcyBpc3N1ZWQgYWZ0ZXIgdGhlIG1lc3NhZ2UgaXMgcG9zdGVkLgot
ICAgIHBvc3REaWRDYW5jZWxNZXNzYWdlVG9QYXJlbnQoW3dlYWtUaGlzID0gbWFrZVdlYWtQdHIo
KnRoaXMpXSB7Ci0gICAgICAgIGlmICghd2Vha1RoaXMpCi0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIGF1dG8qIHBhZ2UgPSB3ZWFrVGhpcy0+cGFnZSgpOwotICAgICAgICBhdXRvKiBuYXZp
Z2F0aW9uQWN0aW9uUHRyID0gd2Vha1RoaXMtPm5hdmlnYXRpb25BY3Rpb24oKTsKLSAgICAgICAg
aWYgKCFwYWdlIHx8ICFuYXZpZ2F0aW9uQWN0aW9uUHRyKQotICAgICAgICAgICAgcmV0dXJuOwot
Ci0gICAgICAgIGlmIChhdXRvKiB0YXJnZXRGcmFtZSA9IG5hdmlnYXRpb25BY3Rpb25QdHItPnRh
cmdldEZyYW1lKCkpIHsKLSAgICAgICAgICAgIGlmIChhdXRvKiBmcmFtZSA9IHBhZ2UtPnByb2Nl
c3MoKS53ZWJGcmFtZSh0YXJnZXRGcmFtZS0+aGFuZGxlKCkuZnJhbWVJRCgpKSkgewotICAgICAg
ICAgICAgICAgIHBhZ2UtPnNldFNob3VsZFN1cHByZXNzU09BdXRob3JpemF0aW9uSW5OZXh0TmF2
aWdhdGlvblBvbGljeURlY2lzaW9uKCk7Ci0gICAgICAgICAgICAgICAgLy8gSXNzdWUgYSBuZXcg
bG9hZCB0byB0aGUgb3JpZ2luYWwgVVJMIGFzIHRoZSBvcmlnaW5hbCBsb2FkIGlzIGFib3J0ZWQg
YmVmb3JlIHN0YXJ0LgotICAgICAgICAgICAgICAgIGZyYW1lLT5sb2FkVVJMKG5hdmlnYXRpb25B
Y3Rpb25QdHItPnJlcXVlc3QoKS51cmwoKSwgbmF2aWdhdGlvbkFjdGlvblB0ci0+cmVxdWVzdCgp
Lmh0dHBSZWZlcnJlcigpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0pOworICAg
IEFTU0VSVChuYXZpZ2F0aW9uQWN0aW9uKCkpOworICAgIGFwcGVuZFJlcXVlc3RUb0xvYWQoVVJM
KG5hdmlnYXRpb25BY3Rpb24oKS0+cmVxdWVzdCgpLnVybCgpKSwgY29udmVydEJ5dGVzVG9WZWN0
b3IocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oc29BdXRob3JpemF0aW9uUG9zdERp
ZENhbmNlbE1lc3NhZ2VUb1BhcmVudCksIHN0cmxlbihzb0F1dGhvcml6YXRpb25Qb3N0RGlkQ2Fu
Y2VsTWVzc2FnZVRvUGFyZW50KSkpOworICAgIGFwcGVuZFJlcXVlc3RUb0xvYWQoVVJMKG5hdmln
YXRpb25BY3Rpb24oKS0+cmVxdWVzdCgpLnVybCgpKSwgU3RyaW5nKG5hdmlnYXRpb25BY3Rpb24o
KS0+cmVxdWVzdCgpLmh0dHBSZWZlcnJlcigpKSk7CiB9CiAKIHZvaWQgU3ViRnJhbWVTT0F1dGhv
cml6YXRpb25TZXNzaW9uOjphYm9ydEludGVybmFsKCkKQEAgLTg0LDQ3ICs5NSw0OCBAQCB2b2lk
IFN1YkZyYW1lU09BdXRob3JpemF0aW9uU2Vzc2lvbjo6Y29tcGxldGVJbnRlcm5hbChjb25zdCBX
ZWJDb3JlOjpSZXNvdXJjZVJlcwogICAgICAgICBmYWxsQmFja1RvV2ViUGF0aEludGVybmFsKCk7
CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgbG9hZERhdGFUb0ZyYW1lKElQQzo6RGF0YVJl
ZmVyZW5jZShyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihkYXRhLmJ5dGVzKSwgZGF0
YS5sZW5ndGgpLCByZXNwb25zZS51cmwoKSk7CisgICAgYXBwZW5kUmVxdWVzdFRvTG9hZChVUkwo
cmVzcG9uc2UudXJsKCkpLCBJUEM6OkRhdGFSZWZlcmVuY2UocmVpbnRlcnByZXRfY2FzdDxjb25z
dCB1aW50OF90Kj4oZGF0YS5ieXRlcyksIGRhdGEubGVuZ3RoKS52ZWN0b3IoKSk7CiB9CiAKIHZv
aWQgU3ViRnJhbWVTT0F1dGhvcml6YXRpb25TZXNzaW9uOjpiZWZvcmVTdGFydCgpCiB7CiAgICAg
Ly8gQ2FuY2VsbGVkIHRoZSBjdXJyZW50IGxvYWQgYmVmb3JlIGxvYWRpbmcgdGhlIGRhdGEgdG8g
cG9zdCBTT0F1dGhvcml6YXRpb25EaWRTdGFydCB0byB0aGUgcGFyZW50IGZyYW1lLgogICAgIGlu
dm9rZUNhbGxiYWNrKHRydWUpOwotICAgIC8vIEN1cnJlbnRseSBpbiB0aGUgbWlkZGxlIG9mIGRl
Y2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb24sIHNob3VsZCBzdGFydCBhIG5ldyBsb2FkIGFm
dGVyLgotICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbd2Vha1RoaXMgPSBtYWtlV2Vha1B0
cigqdGhpcyldIHsKLSAgICAgICAgaWYgKCF3ZWFrVGhpcyB8fCAhd2Vha1RoaXMtPnBhZ2UoKSB8
fCAhd2Vha1RoaXMtPm5hdmlnYXRpb25BY3Rpb24oKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgLy8gSW5zdGVhZCBvZiBleGVjdXRpbmcgdGhlIEphdmFzY3JpcHQgZGlyZWN0bHksIGlz
c3VpbmcgYSBsb2FkLiBUaGlzIHdpbGwgc2V0IHRoZSBvcmlnaW4gcHJvcGVybHkuCi0gICAgICAg
IHdlYWtUaGlzLT5sb2FkRGF0YVRvRnJhbWUoSVBDOjpEYXRhUmVmZXJlbmNlKHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgdWludDhfdCo+KHNvQXV0aG9yaXphdGlvblBvc3REaWRTdGFydE1lc3NhZ2VU
b1BhcmVudCksIHN0cmxlbihzb0F1dGhvcml6YXRpb25Qb3N0RGlkU3RhcnRNZXNzYWdlVG9QYXJl
bnQpKSwgd2Vha1RoaXMtPm5hdmlnYXRpb25BY3Rpb24oKS0+cmVxdWVzdCgpLnVybCgpKTsKLSAg
ICB9KTsKKyAgICBBU1NFUlQobmF2aWdhdGlvbkFjdGlvbigpKTsKKyAgICBhcHBlbmRSZXF1ZXN0
VG9Mb2FkKFVSTChuYXZpZ2F0aW9uQWN0aW9uKCktPnJlcXVlc3QoKS51cmwoKSksIGNvbnZlcnRC
eXRlc1RvVmVjdG9yKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KHNvQXV0aG9yaXph
dGlvblBvc3REaWRTdGFydE1lc3NhZ2VUb1BhcmVudCksIHN0cmxlbihzb0F1dGhvcml6YXRpb25Q
b3N0RGlkU3RhcnRNZXNzYWdlVG9QYXJlbnQpKSk7CiB9CiAKLXZvaWQgU3ViRnJhbWVTT0F1dGhv
cml6YXRpb25TZXNzaW9uOjpsb2FkRGF0YVRvRnJhbWUoY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNl
JiBkYXRhLCBjb25zdCBVUkwmIGJhc2VVUkwpCit2b2lkIFN1YkZyYW1lU09BdXRob3JpemF0aW9u
U2Vzc2lvbjo6ZGlkRmluaXNoTG9hZCgpCiB7Ci0gICAgYXV0byogcGFnZSA9IHRoaXMtPnBhZ2Uo
KTsKLSAgICBhdXRvKiBuYXZpZ2F0aW9uQWN0aW9uUHRyID0gbmF2aWdhdGlvbkFjdGlvbigpOwot
ICAgIGlmICghcGFnZSB8fCAhbmF2aWdhdGlvbkFjdGlvblB0cikKKyAgICBBU1NFUlQocGFnZSgp
KTsKKyAgICBhdXRvKiBmcmFtZSA9IHBhZ2UoKS0+cHJvY2VzcygpLndlYkZyYW1lKCptX2ZyYW1l
SUQpOworICAgIEFTU0VSVChmcmFtZSk7CisgICAgaWYgKG1fcmVxdWVzdHNUb0xvYWQuaXNFbXB0
eSgpIHx8IG1fcmVxdWVzdHNUb0xvYWQuZmlyc3QoKS5maXJzdCAhPSBmcmFtZS0+dXJsKCkpCiAg
ICAgICAgIHJldHVybjsKKyAgICBtX3JlcXVlc3RzVG9Mb2FkLnRha2VGaXJzdCgpOworICAgIGxv
YWRSZXF1ZXN0VG9GcmFtZSgpOworfQogCi0gICAgaWYgKGF1dG8qIHRhcmdldEZyYW1lID0gbmF2
aWdhdGlvbkFjdGlvblB0ci0+dGFyZ2V0RnJhbWUoKSkgewotICAgICAgICBpZiAoYXV0byogZnJh
bWUgPSBwYWdlLT5wcm9jZXNzKCkud2ViRnJhbWUodGFyZ2V0RnJhbWUtPmhhbmRsZSgpLmZyYW1l
SUQoKSkpIHsKLSAgICAgICAgICAgIHBhZ2UtPnNldFNob3VsZFN1cHByZXNzU09BdXRob3JpemF0
aW9uSW5OZXh0TmF2aWdhdGlvblBvbGljeURlY2lzaW9uKCk7Ci0gICAgICAgICAgICBmcmFtZS0+
bG9hZERhdGEoZGF0YSwgInRleHQvaHRtbCIsICJVVEYtOCIsIGJhc2VVUkwpOwotICAgICAgICB9
Ci0gICAgfQordm9pZCBTdWJGcmFtZVNPQXV0aG9yaXphdGlvblNlc3Npb246OmFwcGVuZFJlcXVl
c3RUb0xvYWQoVVJMJiYgdXJsLCBTdXBwbGVtZW50JiYgc3VwcGxlbWVudCkKK3sKKyAgICBtX3Jl
cXVlc3RzVG9Mb2FkLmFwcGVuZCh7IFdURk1vdmUodXJsKSwgV1RGTW92ZShzdXBwbGVtZW50KSB9
KTsKKyAgICBpZiAobV9yZXF1ZXN0c1RvTG9hZC5zaXplKCkgPT0gMSkKKyAgICAgICAgbG9hZFJl
cXVlc3RUb0ZyYW1lKCk7CiB9CiAKLXZvaWQgU3ViRnJhbWVTT0F1dGhvcml6YXRpb25TZXNzaW9u
Ojpwb3N0RGlkQ2FuY2VsTWVzc2FnZVRvUGFyZW50KEZ1bmN0aW9uPHZvaWQoKT4mJiBjYWxsYmFj
aykKK3ZvaWQgU3ViRnJhbWVTT0F1dGhvcml6YXRpb25TZXNzaW9uOjpsb2FkUmVxdWVzdFRvRnJh
bWUoKQogewogICAgIGF1dG8qIHBhZ2UgPSB0aGlzLT5wYWdlKCk7Ci0gICAgYXV0byogbmF2aWdh
dGlvbkFjdGlvblB0ciA9IG5hdmlnYXRpb25BY3Rpb24oKTsKLSAgICBpZiAoIXBhZ2UgfHwgIW5h
dmlnYXRpb25BY3Rpb25QdHIpCisgICAgaWYgKCFwYWdlIHx8IG1fcmVxdWVzdHNUb0xvYWQuaXNF
bXB0eSgpIHx8ICFtX2ZyYW1lSUQpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChhdXRvKiB0
YXJnZXRGcmFtZSA9IG5hdmlnYXRpb25BY3Rpb25QdHItPnRhcmdldEZyYW1lKCkpIHsKLSAgICAg
ICAgcGFnZS0+cnVuSmF2YVNjcmlwdEluRnJhbWUodGFyZ2V0RnJhbWUtPmhhbmRsZSgpLmZyYW1l
SUQoKSwgc29BdXRob3JpemF0aW9uUG9zdERpZENhbmNlbE1lc3NhZ2VUb1BhcmVudCwgZmFsc2Us
IFtjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXSAoQVBJOjpTZXJpYWxpemVkU2NyaXB0VmFs
dWUqLCBib29sLCBjb25zdCBFeGNlcHRpb25EZXRhaWxzJiwgU2NyaXB0VmFsdWVDYWxsYmFjazo6
RXJyb3IpIHsKLSAgICAgICAgICAgIGNhbGxiYWNrKCk7CisgICAgaWYgKGF1dG8qIGZyYW1lID0g
cGFnZS0+cHJvY2VzcygpLndlYkZyYW1lKCptX2ZyYW1lSUQpKSB7CisgICAgICAgIHBhZ2UtPnNl
dFNob3VsZFN1cHByZXNzU09BdXRob3JpemF0aW9uSW5OZXh0TmF2aWdhdGlvblBvbGljeURlY2lz
aW9uKCk7CisgICAgICAgIGF1dG8mIHVybCA9IG1fcmVxdWVzdHNUb0xvYWQuZmlyc3QoKS5maXJz
dDsKKyAgICAgICAgV1RGOjpzd2l0Y2hPbihtX3JlcXVlc3RzVG9Mb2FkLmZpcnN0KCkuc2Vjb25k
LCBbJl0oY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBkYXRhKSB7CisgICAgICAgICAgICBmcmFtZS0+
bG9hZERhdGEoSVBDOjpEYXRhUmVmZXJlbmNlKGRhdGEpLCAidGV4dC9odG1sIiwgIlVURi04Iiwg
dXJsKTsKKyAgICAgICAgfSwgWyZdKGNvbnN0IFN0cmluZyYgcmVmZXJyZXIpIHsKKyAgICAgICAg
ICAgIGZyYW1lLT5sb2FkVVJMKHVybCwgcmVmZXJyZXIpOwogICAgICAgICB9KTsKICAgICB9CiB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9GcmFtZUxvYWRTdGF0ZS5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9GcmFtZUxvYWRTdGF0ZS5jcHAKaW5kZXggMjZmMmEw
OWU5ZmQ4ZmYwYWE0ZmY4NDQ3Mjk4NzhjMjZkNTg2Y2Y1ZS4uNTViMzVlMmNmZGIzMTljMWI0Y2E0
ODFjMjk0MzMzNGEwNjY0MWZkYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
RnJhbWVMb2FkU3RhdGUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0ZyYW1lTG9h
ZFN0YXRlLmNwcApAQCAtMzIsNiArMzIsMTggQEAgRnJhbWVMb2FkU3RhdGU6On5GcmFtZUxvYWRT
dGF0ZSgpCiB7CiB9CiAKK3ZvaWQgRnJhbWVMb2FkU3RhdGU6OmFkZE9ic2VydmVyKE9ic2VydmVy
JiBvYnNlcnZlcikKK3sKKyAgICBhdXRvIHJlc3VsdCA9IG1fb2JzZXJ2ZXJzLmFkZCgmb2JzZXJ2
ZXIsIG1ha2VXZWFrUHRyKG9ic2VydmVyKSk7CisgICAgQVNTRVJUX1VOVVNFRChyZXN1bHQsIHJl
c3VsdC5pc05ld0VudHJ5KTsKK30KKwordm9pZCBGcmFtZUxvYWRTdGF0ZTo6cmVtb3ZlT2JzZXJ2
ZXIoT2JzZXJ2ZXImIG9ic2VydmVyKQoreworICAgIGF1dG8gcmVzdWx0ID0gbV9vYnNlcnZlcnMu
cmVtb3ZlKCZvYnNlcnZlcik7CisgICAgQVNTRVJUX1VOVVNFRChyZXN1bHQsIHJlc3VsdCk7Cit9
CisKIHZvaWQgRnJhbWVMb2FkU3RhdGU6OmRpZFN0YXJ0UHJvdmlzaW9uYWxMb2FkKGNvbnN0IFVS
TCYgdXJsKQogewogICAgIEFTU0VSVChtX3Byb3Zpc2lvbmFsVVJMLmlzRW1wdHkoKSk7CkBAIC03
Nyw2ICs4OSwxMyBAQCB2b2lkIEZyYW1lTG9hZFN0YXRlOjpkaWRGaW5pc2hMb2FkKCkKICAgICBB
U1NFUlQobV9wcm92aXNpb25hbFVSTC5pc0VtcHR5KCkpOwogCiAgICAgbV9zdGF0ZSA9IFN0YXRl
OjpGaW5pc2hlZDsKKworICAgIGF1dG8gb2JzZXJ2ZXJzQ29weSA9IG1fb2JzZXJ2ZXJzOworICAg
IGZvciAoY29uc3QgYXV0byYgb2JzZXJ2ZXIgOiBtX29ic2VydmVycykgeworICAgICAgICBpZiAo
IW9ic2VydmVyLnZhbHVlKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIG9ic2VydmVy
LnZhbHVlLT5kaWRGaW5pc2hMb2FkKCk7CisgICAgfQogfQogCiB2b2lkIEZyYW1lTG9hZFN0YXRl
OjpkaWRGYWlsTG9hZCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9GcmFt
ZUxvYWRTdGF0ZS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvRnJhbWVMb2FkU3RhdGUuaApp
bmRleCBjMzRlMjdkZjE4OGFiZTc2YjU5NTdjODM2ZWVjNzhiNmM5NzljODQ1Li40OGQ5NDM5MWY0
ZGJkZjY2NGRlNzgzZmU4YzcyOTVkZDZiM2QwMDYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9GcmFtZUxvYWRTdGF0ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0ZyYW1lTG9hZFN0YXRlLmgKQEAgLTI2LDYgKzI2LDcgQEAKICNwcmFnbWEgb25jZQogCiAjaW5j
bHVkZSA8d3RmL1VSTC5oPgorI2luY2x1ZGUgPHd0Zi9XZWFrUHRyLmg+CiAKIG5hbWVzcGFjZSBX
ZWJLaXQgewogCkBAIC0zOSw2ICs0MCwxNiBAQCBwdWJsaWM6CiAgICAgICAgIEZpbmlzaGVkCiAg
ICAgfTsKIAorICAgIGNsYXNzIE9ic2VydmVyIDogcHVibGljIENhbk1ha2VXZWFrUHRyPE9ic2Vy
dmVyPiB7CisgICAgcHVibGljOgorICAgICAgICB2aXJ0dWFsIH5PYnNlcnZlcigpID0gZGVmYXVs
dDsKKworICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkRmluaXNoTG9hZCgpID0gMDsKKyAgICB9Owor
CisgICAgdm9pZCBhZGRPYnNlcnZlcihPYnNlcnZlciYpOworICAgIHZvaWQgcmVtb3ZlT2JzZXJ2
ZXIoT2JzZXJ2ZXImKTsKKwogICAgIHZvaWQgZGlkU3RhcnRQcm92aXNpb25hbExvYWQoY29uc3Qg
VVJMJik7CiAgICAgdm9pZCBkaWRFeHBsaWNpdE9wZW4oY29uc3QgVVJMJik7CiAgICAgdm9pZCBk
aWRSZWNlaXZlU2VydmVyUmVkaXJlY3RGb3JQcm92aXNpb25hbExvYWQoY29uc3QgVVJMJik7CkBA
IC02NCw2ICs3NSw3IEBAIHByaXZhdGU6CiAgICAgVVJMIG1fcHJvdmlzaW9uYWxVUkw7CiAgICAg
VVJMIG1fdW5yZWFjaGFibGVVUkw7CiAgICAgVVJMIG1fbGFzdFVucmVhY2hhYmxlVVJMOworICAg
IEhhc2hNYXA8T2JzZXJ2ZXIqLCBXZWFrUHRyPE9ic2VydmVyPj4gbV9vYnNlcnZlcnM7CiB9Owog
CiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL1dlYlByb2Nlc3NQb29sLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nl
c3NQb29sLmNwcAppbmRleCA4ZTQ2MzBiZGEzYmFiNTgyYjZmNWQ2NGVkNTg4ZjZjMGQzMGI1OWQ2
Li45N2Q5MzhjODBiM2Q3NDFhZDVkZmEyZWFkNGNiOTQ3ZDIxYTgzNzExIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHAKKysrIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3BwCkBAIC00MSw2ICs0MSw3IEBACiAjaW5j
bHVkZSAiRG93bmxvYWRQcm94eU1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiR2FtZXBhZERhdGEuaCIK
ICNpbmNsdWRlICJIaWdoUGVyZm9ybWFuY2VHcmFwaGljc1VzYWdlU2FtcGxlci5oIgorI2luY2x1
ZGUgIkxlZ2FjeUdsb2JhbFNldHRpbmdzLmgiCiAjaW5jbHVkZSAiTG9nSW5pdGlhbGl6YXRpb24u
aCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiTmV0d29ya1Byb2Nlc3NDcmVhdGlv
blBhcmFtZXRlcnMuaCIKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5n
ZUxvZwppbmRleCA2Yzg5Njk4OGE3ZDhhNTJhOGY0OWQzMzk4YzYyZDljZDU4YjM1YjU3Li5iOTk2
ZTY5ZjgxMjc3MWVkOTQxM2FkMjZiYjNmOTQxZTI3Y2UxM2RjIDEwMDY0NAotLS0gYS9Ub29scy9D
aGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTggQEAKKzIwMTktMDkt
MjAgIEppZXdlbiBUYW4gIDxqaWV3ZW5fdGFuQGFwcGxlLmNvbT4KKworICAgICAgICBTdWJGcmFt
ZVNPQXV0aG9yaXphdGlvblNlc3Npb24gc2hvdWxkIGVuc3VyZSBtZXNzYWdlcyBhcmUgcG9zdGVk
IGluIHRoZSByaWdodCBvcmRlciB0byB0aGUgcGFyZW50IGZyYW1lCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDIwNjEKKyAgICAgICAgPHJkYXI6Ly9w
cm9ibGVtLzU1NDg1NjY2PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIEFkZHMgdGVzdHMgdGhhdCBjaGVjayB0aGUgb3JkZXIgb2YgbWVzc2FnZXMgcG9z
dGVkIGJ5IFN1YkZyYW1lU09BdXRob3JpemF0aW9uU2Vzc2lvbi4KKworICAgICAgICAqIFRlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvVGVzdFNPQXV0aG9yaXphdGlvbi5tbToKKyAgICAg
ICAgKC1bVGVzdFNPQXV0aG9yaXphdGlvblNjcmlwdE1lc3NhZ2VIYW5kbGVyIHVzZXJDb250ZW50
Q29udHJvbGxlcjpkaWRSZWNlaXZlU2NyaXB0TWVzc2FnZTpdKToKKyAgICAgICAgKHJlc2V0U3Rh
dGUpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVCk6CisKIDIwMTktMDktMjUgIEFsZXgg
Q2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBSZW1vdmUg
ZHVwbGljYXRlIFdlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0aW9uIGNvcHlpbmcgY29kZQpkaWZm
IC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9UZXN0U09BdXRo
b3JpemF0aW9uLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9UZXN0
U09BdXRob3JpemF0aW9uLm1tCmluZGV4IGQwZTJlN2RiYWFjODQ4OTkwNGNhZDdjMThmY2FhZGM3
MjkzYTIxYWIuLmQ2MDdjNzZiYjEwMThmMzk2MThjODA4NGJmMDNmN2RjZTk5N2NjODEgMTAwNjQ0
Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvVGVzdFNPQXV0aG9y
aXphdGlvbi5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1Rl
c3RTT0F1dGhvcml6YXRpb24ubW0KQEAgLTUzLDYgKzUzLDcgQEAgc3RhdGljIGJvb2wgdWlTaG93
ZWQgPSBmYWxzZTsKIHN0YXRpYyBib29sIG5ld1dpbmRvd0NyZWF0ZWQgPSBmYWxzZTsKIHN0YXRp
YyBib29sIGhhdmVIdHRwQm9keSA9IGZhbHNlOwogc3RhdGljIGJvb2wgbmF2aWdhdGlvblBvbGlj
eURlY2lkZWQgPSBmYWxzZTsKK3N0YXRpYyBib29sIGFsbE1lc3NhZ2VzUmVjZWl2ZWQgPSBmYWxz
ZTsKIHN0YXRpYyBTdHJpbmcgZmluYWxVUkw7CiBzdGF0aWMgU09BdXRob3JpemF0aW9uKiBnQXV0
aG9yaXphdGlvbjsKIHN0YXRpYyBpZDxTT0F1dGhvcml6YXRpb25EZWxlZ2F0ZT4gZ0RlbGVnYXRl
OwpAQCAtMjQxLDYgKzI0MiwzNyBAQCAtICh2b2lkKXZpZXdEaWREaXNhcHBlYXIKIAogQGVuZAog
CitAaW50ZXJmYWNlIFRlc3RTT0F1dGhvcml6YXRpb25TY3JpcHRNZXNzYWdlSGFuZGxlciA6IE5T
T2JqZWN0IDxXS1NjcmlwdE1lc3NhZ2VIYW5kbGVyPgorQGVuZAorCitAaW1wbGVtZW50YXRpb24g
VGVzdFNPQXV0aG9yaXphdGlvblNjcmlwdE1lc3NhZ2VIYW5kbGVyIHsKKyAgICBSZXRhaW5QdHI8
TlNNdXRhYmxlQXJyYXk+IF9tZXNzYWdlczsKK30KKworLSAodm9pZCl1c2VyQ29udGVudENvbnRy
b2xsZXI6KFdLVXNlckNvbnRlbnRDb250cm9sbGVyICopdXNlckNvbnRlbnRDb250cm9sbGVyIGRp
ZFJlY2VpdmVTY3JpcHRNZXNzYWdlOihXS1NjcmlwdE1lc3NhZ2UgKiltZXNzYWdlCit7CisgICAg
aWYgKCFfbWVzc2FnZXMpCisgICAgICAgIF9tZXNzYWdlcyA9IGFkb3B0TlMoW1tOU011dGFibGVB
cnJheSBhbGxvY10gaW5pdF0pOworICAgIFtfbWVzc2FnZXMgYWRkT2JqZWN0Om1lc3NhZ2UuYm9k
eV07CisKKyAgICBpZiAoW21lc3NhZ2UuYm9keSBpc0VxdWFsOkAiIl0pIHsKKyAgICAgICAgYWxs
TWVzc2FnZXNSZWNlaXZlZCA9IHRydWU7CisgICAgICAgIEVYUEVDVF9FUShbX21lc3NhZ2VzIGNv
dW50XSwgNXUpOworICAgICAgICBFWFBFQ1RfV0tfU1RSRVEoIlNPQXV0aG9yaXphdGlvbkRpZFN0
YXJ0IiwgW19tZXNzYWdlcyBvYmplY3RBdEluZGV4OjFdKTsKKyAgICAgICAgRVhQRUNUX1dLX1NU
UkVRKCJTT0F1dGhvcml6YXRpb25EaWRDYW5jZWwiLCBbX21lc3NhZ2VzIG9iamVjdEF0SW5kZXg6
M10pOworICAgICAgICBFWFBFQ1RfV0tfU1RSRVEoIiIsIFtfbWVzc2FnZXMgb2JqZWN0QXRJbmRl
eDo0XSk7CisgICAgfQorCisgICAgaWYgKFttZXNzYWdlLmJvZHkgaXNFcXVhbDpAIkhlbGxvLiJd
KSB7CisgICAgICAgIGFsbE1lc3NhZ2VzUmVjZWl2ZWQgPSB0cnVlOworICAgICAgICBFWFBFQ1Rf
RVEoW19tZXNzYWdlcyBjb3VudF0sIDR1KTsKKyAgICAgICAgRVhQRUNUX1dLX1NUUkVRKCJTT0F1
dGhvcml6YXRpb25EaWRTdGFydCIsIFtfbWVzc2FnZXMgb2JqZWN0QXRJbmRleDoxXSk7CisgICAg
ICAgIEVYUEVDVF9XS19TVFJFUSgiSGVsbG8uIiwgW19tZXNzYWdlcyBvYmplY3RBdEluZGV4OjNd
KTsKKyAgICB9Cit9CisKK0BlbmQKKwogc3RhdGljIGJvb2wgb3ZlcnJpZGVDYW5QZXJmb3JtQXV0
aG9yaXphdGlvbldpdGhVUkwoaWQsIFNFTCwgTlNVUkwgKnVybCwgTlNJbnRlZ2VyKQogewogICAg
IGlmICghW3VybC5sYXN0UGF0aENvbXBvbmVudCBpc0VxdWFsOkAic2ltcGxlLmh0bWwiXSAmJiAh
W3VybC5ob3N0IGlzRXF1YWw6QCJ3d3cuZXhhbXBsZS5jb20iXSAmJiAhW3VybC5sYXN0UGF0aENv
bXBvbmVudCBpc0VxdWFsOkAiR2V0U2Vzc2lvbkNvb2tpZS5odG1sIl0pCkBAIC0yOTIsNiArMzI0
LDcgQEAgc3RhdGljIHZvaWQgcmVzZXRTdGF0ZSgpCiAgICAgbmV3V2luZG93Q3JlYXRlZCA9IGZh
bHNlOwogICAgIGhhdmVIdHRwQm9keSA9IGZhbHNlOwogICAgIG5hdmlnYXRpb25Qb2xpY3lEZWNp
ZGVkID0gZmFsc2U7CisgICAgYWxsTWVzc2FnZXNSZWNlaXZlZCA9IGZhbHNlOwogICAgIGZpbmFs
VVJMID0gZW1wdHlTdHJpbmcoKTsKICAgICBnQXV0aG9yaXphdGlvbiA9IG51bGxwdHI7CiAgICAg
Z0RlbGVnYXRlID0gbnVsbHB0cjsKQEAgLTIyMjAsNiArMjI1Myw2MCBAQCBURVNUKFNPQXV0aG9y
aXphdGlvblN1YkZyYW1lLCBJbnRlcmNlcHRpb25FcnJvcldpdGhSZWZlcnJlcikKICAgICBbd2Vi
VmlldyB3YWl0Rm9yTWVzc2FnZTooaWQpbWFrZVN0cmluZygiUmVmZXJyZXI6ICIsIG9yaWdpbiwg
Ii8iKV07IC8vIFJlZmVycmVyIHBvbGljeSByZXF1aXJlcyAnLycgYWZ0ZXIgb3JpZ2luLgogfQog
CitURVNUKFNPQXV0aG9yaXphdGlvblN1YkZyYW1lLCBJbnRlcmNlcHRpb25FcnJvck1lc3NhZ2VP
cmRlcikKK3sKKyAgICByZXNldFN0YXRlKCk7CisgICAgQ2xhc3NNZXRob2RTd2l6emxlciBzd2l6
emxlcjEoUEFMOjpnZXRTT0F1dGhvcml6YXRpb25DbGFzcygpLCBAc2VsZWN0b3IoY2FuUGVyZm9y
bUF1dGhvcml6YXRpb25XaXRoVVJMOnJlc3BvbnNlQ29kZTopLCByZWludGVycHJldF9jYXN0PElN
UD4ob3ZlcnJpZGVDYW5QZXJmb3JtQXV0aG9yaXphdGlvbldpdGhVUkwpKTsKKyAgICBJbnN0YW5j
ZU1ldGhvZFN3aXp6bGVyIHN3aXp6bGVyMihQQUw6OmdldFNPQXV0aG9yaXphdGlvbkNsYXNzKCks
IEBzZWxlY3RvcihzZXREZWxlZ2F0ZTopLCByZWludGVycHJldF9jYXN0PElNUD4ob3ZlcnJpZGVT
ZXREZWxlZ2F0ZSkpOworICAgIEluc3RhbmNlTWV0aG9kU3dpenpsZXIgc3dpenpsZXIzKFBBTDo6
Z2V0U09BdXRob3JpemF0aW9uQ2xhc3MoKSwgQHNlbGVjdG9yKGJlZ2luQXV0aG9yaXphdGlvbldp
dGhVUkw6aHR0cEhlYWRlcnM6aHR0cEJvZHk6KSwgcmVpbnRlcnByZXRfY2FzdDxJTVA+KG92ZXJy
aWRlQmVnaW5BdXRob3JpemF0aW9uV2l0aFVSTCkpOworICAgIENsYXNzTWV0aG9kU3dpenpsZXIg
c3dpenpsZXI0KFtBS0F1dGhvcml6YXRpb25Db250cm9sbGVyIGNsYXNzXSwgQHNlbGVjdG9yKGlz
VVJMRnJvbUFwcGxlT3duZWREb21haW46KSwgcmVpbnRlcnByZXRfY2FzdDxJTVA+KG92ZXJyaWRl
SXNVUkxGcm9tQXBwbGVPd25lZERvbWFpbikpOworCisgICAgUmV0YWluUHRyPE5TVVJMPiBiYXNl
VVJMID0gW1tOU0J1bmRsZSBtYWluQnVuZGxlXSBVUkxGb3JSZXNvdXJjZTpAInNpbXBsZTIiIHdp
dGhFeHRlbnNpb246QCJodG1sIiBzdWJkaXJlY3Rvcnk6QCJUZXN0V2ViS2l0QVBJLnJlc291cmNl
cyJdOworICAgIFJldGFpblB0cjxOU1VSTD4gdGVzdFVSTCA9IFtbTlNCdW5kbGUgbWFpbkJ1bmRs
ZV0gVVJMRm9yUmVzb3VyY2U6QCJHZXRTZXNzaW9uQ29va2llIiB3aXRoRXh0ZW5zaW9uOkAiaHRt
bCIgc3ViZGlyZWN0b3J5OkAiVGVzdFdlYktpdEFQSS5yZXNvdXJjZXMiXTsKKyAgICBhdXRvIHRl
c3RIdG1sID0gZ2VuZXJhdGVIdG1sKHBhcmVudFRlbXBsYXRlLCB0ZXN0VVJMLmdldCgpLmFic29s
dXRlU3RyaW5nKTsKKworICAgIGF1dG8gY29uZmlndXJhdGlvbiA9IGFkb3B0TlMoW1tXS1dlYlZp
ZXdDb25maWd1cmF0aW9uIGFsbG9jXSBpbml0XSk7CisgICAgYXV0byBtZXNzYWdlSGFuZGxlciA9
IGFkb3B0TlMoW1tUZXN0U09BdXRob3JpemF0aW9uU2NyaXB0TWVzc2FnZUhhbmRsZXIgYWxsb2Nd
IGluaXRdKTsKKyAgICBbW2NvbmZpZ3VyYXRpb24gdXNlckNvbnRlbnRDb250cm9sbGVyXSBhZGRT
Y3JpcHRNZXNzYWdlSGFuZGxlcjptZXNzYWdlSGFuZGxlci5nZXQoKSBuYW1lOkAidGVzdEhhbmRs
ZXIiXTsKKworICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9j
XSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApIGNvbmZpZ3VyYXRpb246
Y29uZmlndXJhdGlvbi5nZXQoKV0pOworICAgIGF1dG8gZGVsZWdhdGUgPSBhZG9wdE5TKFtbVGVz
dFNPQXV0aG9yaXphdGlvbkRlbGVnYXRlIGFsbG9jXSBpbml0XSk7CisgICAgY29uZmlndXJlU09B
dXRob3JpemF0aW9uV2ViVmlldyh3ZWJWaWV3LmdldCgpLCBkZWxlZ2F0ZS5nZXQoKSk7CisKKyAg
ICBbd2ViVmlldyBsb2FkSFRNTFN0cmluZzp0ZXN0SHRtbCBiYXNlVVJMOmJhc2VVUkwuZ2V0KCld
OworICAgIFV0aWw6OnJ1bigmYXV0aG9yaXphdGlvblBlcmZvcm1lZCk7CisgICAgW2dEZWxlZ2F0
ZSBhdXRob3JpemF0aW9uOmdBdXRob3JpemF0aW9uIGRpZENvbXBsZXRlV2l0aEVycm9yOmFkb3B0
TlMoW1tOU0Vycm9yIGFsbG9jXSBpbml0V2l0aERvbWFpbjpOU0NvY29hRXJyb3JEb21haW4gY29k
ZTowIHVzZXJJbmZvOm5pbF0pLmdldCgpXTsKKyAgICBVdGlsOjpydW4oJmFsbE1lc3NhZ2VzUmVj
ZWl2ZWQpOworfQorCitURVNUKFNPQXV0aG9yaXphdGlvblN1YkZyYW1lLCBJbnRlcmNlcHRpb25T
dWNjZXNzTWVzc2FnZU9yZGVyKQoreworICAgIHJlc2V0U3RhdGUoKTsKKyAgICBDbGFzc01ldGhv
ZFN3aXp6bGVyIHN3aXp6bGVyMShQQUw6OmdldFNPQXV0aG9yaXphdGlvbkNsYXNzKCksIEBzZWxl
Y3RvcihjYW5QZXJmb3JtQXV0aG9yaXphdGlvbldpdGhVUkw6cmVzcG9uc2VDb2RlOiksIHJlaW50
ZXJwcmV0X2Nhc3Q8SU1QPihvdmVycmlkZUNhblBlcmZvcm1BdXRob3JpemF0aW9uV2l0aFVSTCkp
OworICAgIEluc3RhbmNlTWV0aG9kU3dpenpsZXIgc3dpenpsZXIyKFBBTDo6Z2V0U09BdXRob3Jp
emF0aW9uQ2xhc3MoKSwgQHNlbGVjdG9yKHNldERlbGVnYXRlOiksIHJlaW50ZXJwcmV0X2Nhc3Q8
SU1QPihvdmVycmlkZVNldERlbGVnYXRlKSk7CisgICAgSW5zdGFuY2VNZXRob2RTd2l6emxlciBz
d2l6emxlcjMoUEFMOjpnZXRTT0F1dGhvcml6YXRpb25DbGFzcygpLCBAc2VsZWN0b3IoYmVnaW5B
dXRob3JpemF0aW9uV2l0aFVSTDpodHRwSGVhZGVyczpodHRwQm9keTopLCByZWludGVycHJldF9j
YXN0PElNUD4ob3ZlcnJpZGVCZWdpbkF1dGhvcml6YXRpb25XaXRoVVJMKSk7CisgICAgQ2xhc3NN
ZXRob2RTd2l6emxlciBzd2l6emxlcjQoW0FLQXV0aG9yaXphdGlvbkNvbnRyb2xsZXIgY2xhc3Nd
LCBAc2VsZWN0b3IoaXNVUkxGcm9tQXBwbGVPd25lZERvbWFpbjopLCByZWludGVycHJldF9jYXN0
PElNUD4ob3ZlcnJpZGVJc1VSTEZyb21BcHBsZU93bmVkRG9tYWluKSk7CisKKyAgICBhdXRvIHRl
c3RVUkwgPSBVUkwoVVJMKCksICJodHRwOi8vd3d3LmV4YW1wbGUuY29tIik7CisgICAgYXV0byB0
ZXN0SHRtbCA9IGdlbmVyYXRlSHRtbChwYXJlbnRUZW1wbGF0ZSwgdGVzdFVSTC5zdHJpbmcoKSk7
CisKKyAgICBhdXRvIGNvbmZpZ3VyYXRpb24gPSBhZG9wdE5TKFtbV0tXZWJWaWV3Q29uZmlndXJh
dGlvbiBhbGxvY10gaW5pdF0pOworICAgIGF1dG8gbWVzc2FnZUhhbmRsZXIgPSBhZG9wdE5TKFtb
VGVzdFNPQXV0aG9yaXphdGlvblNjcmlwdE1lc3NhZ2VIYW5kbGVyIGFsbG9jXSBpbml0XSk7Cisg
ICAgW1tjb25maWd1cmF0aW9uIHVzZXJDb250ZW50Q29udHJvbGxlcl0gYWRkU2NyaXB0TWVzc2Fn
ZUhhbmRsZXI6bWVzc2FnZUhhbmRsZXIuZ2V0KCkgbmFtZTpAInRlc3RIYW5kbGVyIl07CisKKyAg
ICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhG
cmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKSBjb25maWd1cmF0aW9uOmNvbmZpZ3VyYXRp
b24uZ2V0KCldKTsKKyAgICBhdXRvIGRlbGVnYXRlID0gYWRvcHROUyhbW1Rlc3RTT0F1dGhvcml6
YXRpb25EZWxlZ2F0ZSBhbGxvY10gaW5pdF0pOworICAgIGNvbmZpZ3VyZVNPQXV0aG9yaXphdGlv
bldlYlZpZXcod2ViVmlldy5nZXQoKSwgZGVsZWdhdGUuZ2V0KCkpOworCisgICAgW3dlYlZpZXcg
bG9hZEhUTUxTdHJpbmc6dGVzdEh0bWwgYmFzZVVSTDpuaWxdOworICAgIFV0aWw6OnJ1bigmYXV0
aG9yaXphdGlvblBlcmZvcm1lZCk7CisKKyAgICBhdXRvIHJlc3BvbnNlID0gYWRvcHROUyhbW05T
SFRUUFVSTFJlc3BvbnNlIGFsbG9jXSBpbml0V2l0aFVSTDp0ZXN0VVJMIHN0YXR1c0NvZGU6MjAw
IEhUVFBWZXJzaW9uOkAiSFRUUC8xLjEiIGhlYWRlckZpZWxkczpuaWxdKTsKKyAgICBhdXRvIGlm
cmFtZUh0bWxDU3RyaW5nID0gZ2VuZXJhdGVIdG1sKGlmcmFtZVRlbXBsYXRlLCAiIikudXRmOCgp
OworICAgIFtnRGVsZWdhdGUgYXV0aG9yaXphdGlvbjpnQXV0aG9yaXphdGlvbiBkaWRDb21wbGV0
ZVdpdGhIVFRQUmVzcG9uc2U6cmVzcG9uc2UuZ2V0KCkgaHR0cEJvZHk6YWRvcHROUyhbW05TRGF0
YSBhbGxvY10gaW5pdFdpdGhCeXRlczppZnJhbWVIdG1sQ1N0cmluZy5kYXRhKCkgbGVuZ3RoOmlm
cmFtZUh0bWxDU3RyaW5nLmxlbmd0aCgpXSkuZ2V0KCldOworICAgIFV0aWw6OnJ1bigmYWxsTWVz
c2FnZXNSZWNlaXZlZCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkKIAogI2Vu
ZGlmCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>379628</attachid>
            <date>2019-09-26 02:52:14 -0700</date>
            <delta_ts>2019-09-26 22:49:14 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-202061-20190926025213.patch</filename>
            <type>text/plain</type>
            <size>26333</size>
            <attacher name="Jiewen Tan">jiewen_tan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUwMzU0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGM2ZThlNGQ4NjM0OTcyMWRm
Y2Q3MDU5MWMyNTE2ZTQxYTQ0MmQyNGYuLjY5ZDE0ZmM4YzA2MDkzOTJhMzYxNzI5YTU1N2I2ZjE4
NDU0NzU4ZDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTIgQEAKKzIwMTktMDktMjAgIEppZXdlbiBU
YW4gIDxqaWV3ZW5fdGFuQGFwcGxlLmNvbT4KKworICAgICAgICBTdWJGcmFtZVNPQXV0aG9yaXph
dGlvblNlc3Npb24gc2hvdWxkIGVuc3VyZSBtZXNzYWdlcyBhcmUgcG9zdGVkIGluIHRoZSByaWdo
dCBvcmRlciB0byB0aGUgcGFyZW50IGZyYW1lCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMDIwNjEKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzU1NDg1
NjY2PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRo
aXMgcGF0Y2ggZW5zdXJlcyBtZXNzYWdlcyB0aGF0IHNpZ25hbCB0aGUgcHJvY2VzcyBvZiBTT0F1
dGhvcml6YXRpb24gaW50ZXJjZXB0aW9uIGFyZSBwb3N0ZWQgaW4KKyAgICAgICAgdGhlIHJpZ2h0
IG9yZGVyIHRvIHRoZSBwYXJlbnQgZnJhbWUuIEJlZm9yZSB0aGlzIHBhdGNoLCB0aGVyZSBhcmUg
Y2hhbmNlcyB0aGF0IFNPQXV0aG9yaXphdGlvbkRpZENhbmNlbAorICAgICAgICBjb3VsZCBiZSBw
b3N0ZWQgdG8gdGhlIHBhcmVudCBiZWZvcmUgU09BdXRob3JpemF0aW9uRGlkU3RhcnQuIFRoZXJl
IGFyZSBmZXcgY2F1c2VzIHRoYXQgbGVhZCB0bworICAgICAgICB0aGlzIHJhY2UgY29uZGl0aW9u
OgorICAgICAgICAxKSBTdWJGcmFtZVNPQXV0aG9yaXphdGlvblNlc3Npb246OmJlZm9yZVN0YXJ0
IHBvc3RzIFNPQXV0aG9yaXphdGlvbkRpZFN0YXJ0IGluIHRoZSBuZXh0IHJ1bmxvb3AuIFNvCisg
ICAgICAgIGV4dGVuc2lvbiBjb3VsZCBoYXZlIHRoZSBjaGFuY2UgdG8gaW52b2tlIFN1YkZyYW1l
U09BdXRob3JpemF0aW9uU2Vzc2lvbjo6ZmFsbEJhY2tUb1dlYlBhdGhJbnRlcm5hbAorICAgICAg
ICBiZWZvcmUgU09BdXRob3JpemF0aW9uRGlkU3RhcnQgaXMgcG9zdGVkLgorICAgICAgICAyKSBF
dmVuIGlmIHRoZSBvcmRlciBpcyByaWdodCBpbiB0aGUgVUkgcHJvY2VzcywgaXQgaXMgbm90IGd1
YXJhbnRlZWQgdGhhdCBXZWIgcHJvY2VzcyB3aWxsIHN0cmljdGx5CisgICAgICAgIGZvbGxvdyB0
aGUgb3JkZXIgYXMgdGhlIGxvYWRpbmcgcHJvY2VzcyBpcyBhc3luYy4KKworICAgICAgICBUbyBm
aXggdGhlIGlzc3VlOgorICAgICAgICAxKSBTdWJGcmFtZVNPQXV0aG9yaXphdGlvblNlc3Npb246
OmJlZm9yZVN0YXJ0IG5vdyBwb3N0cyBTT0F1dGhvcml6YXRpb25EaWRTdGFydCBpbiB0aGUgc2Ft
ZSBydW5sb29wLgorICAgICAgICAyKSBPYnNlcnZlciBpcyBpbnRyb2R1Y2VkIGluIEZyYW1lTG9h
ZFN0YXRlIHN1Y2ggdGhhdCBTdWJGcmFtZVNPQXV0aG9yaXphdGlvblNlc3Npb24gY291bGQga25v
dyBpZgorICAgICAgICB0aGUgbG9hZGluZyBpcyBmaW5pc2hlZC4gV2l0aCB0aGlzIG5ldyBjYXBh
Y2l0eSwgU3ViRnJhbWVTT0F1dGhvcml6YXRpb25TZXNzaW9uIGNhbiBlbnN1cmUgaXQgb25seQor
ICAgICAgICBwb3N0cyBuZXh0IG1lc3NhZ2Ugd2hlbiB0aGUgcHJldmlvdXMgbWVzc2FnZSBoYXMg
YmVlbiBwb3N0ZWQuCisKKyAgICAgICAgSW1wbGVtZW50YXRpb24gd2lzZSwgYSBkZXF1ZSB0byBx
dWV1ZSByZXF1ZXN0cyBpcyBwcm92aWRlZCB0byBtYWludGFpbiBvcmRlci4KKyAgICAgICAgMSkg
V2hlbiBuZXcgcmVxdWVzdCBpcyBhZGRlZCB0byB0aGUgZGVxdWUsIFN1YkZyYW1lU09BdXRob3Jp
emF0aW9uU2Vzc2lvbiB3aWxsIG9ubHkgbG9hZCB0aGUgcmVxdWVzdAorICAgICAgICBpZiBpdCBp
cyB0aGUgb25seSBlbGVtZW50IGluIHRoZSBkZXF1ZS4gT3RoZXJ3aXNlLCBpdCBkb2VzIG5vdGhp
bmcuCisgICAgICAgIDIpIFdoZW4gU3ViRnJhbWVTT0F1dGhvcml6YXRpb25TZXNzaW9uIHJlY2Vp
dmVzIGRpZEZpbmlzaExvYWQsIGl0IHBvcHMgdGhlIGhlYWQgb2YgdGhlIHF1ZXVlIGFuZCBsb2Fk
cworICAgICAgICB0aGUgbmV4dCByZXF1ZXN0IGluIHRoZSBxdWV1ZSBpZiBhbnkuCisgICAgICAg
IFRoZSBhYm92ZSBkZXNpZ24gc2hvdWxkIGd1YXJhbnRlZSBhbGwgcmVxdWVzdHMgYXJlIGxvYWRl
ZCBpbiBzZXF1ZW5jZS4KKworICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9TT0F1dGhvcml6YXRp
b24vU3ViRnJhbWVTT0F1dGhvcml6YXRpb25TZXNzaW9uLmg6CisgICAgICAgICogVUlQcm9jZXNz
L0NvY29hL1NPQXV0aG9yaXphdGlvbi9TdWJGcmFtZVNPQXV0aG9yaXphdGlvblNlc3Npb24ubW06
CisgICAgICAgIChXZWJLaXQ6OlN1YkZyYW1lU09BdXRob3JpemF0aW9uU2Vzc2lvbjo6U3ViRnJh
bWVTT0F1dGhvcml6YXRpb25TZXNzaW9uKToKKyAgICAgICAgKFdlYktpdDo6U3ViRnJhbWVTT0F1
dGhvcml6YXRpb25TZXNzaW9uOjp+U3ViRnJhbWVTT0F1dGhvcml6YXRpb25TZXNzaW9uKToKKyAg
ICAgICAgKFdlYktpdDo6U3ViRnJhbWVTT0F1dGhvcml6YXRpb25TZXNzaW9uOjpmYWxsQmFja1Rv
V2ViUGF0aEludGVybmFsKToKKyAgICAgICAgKFdlYktpdDo6U3ViRnJhbWVTT0F1dGhvcml6YXRp
b25TZXNzaW9uOjpjb21wbGV0ZUludGVybmFsKToKKyAgICAgICAgKFdlYktpdDo6U3ViRnJhbWVT
T0F1dGhvcml6YXRpb25TZXNzaW9uOjpiZWZvcmVTdGFydCk6CisgICAgICAgIChXZWJLaXQ6OlN1
YkZyYW1lU09BdXRob3JpemF0aW9uU2Vzc2lvbjo6ZGlkRmluaXNoTG9hZCk6CisgICAgICAgIChX
ZWJLaXQ6OlN1YkZyYW1lU09BdXRob3JpemF0aW9uU2Vzc2lvbjo6YXBwZW5kUmVxdWVzdFRvTG9h
ZCk6CisgICAgICAgIChXZWJLaXQ6OlN1YkZyYW1lU09BdXRob3JpemF0aW9uU2Vzc2lvbjo6bG9h
ZFJlcXVlc3RUb0ZyYW1lKToKKyAgICAgICAgKFdlYktpdDo6U3ViRnJhbWVTT0F1dGhvcml6YXRp
b25TZXNzaW9uOjpsb2FkRGF0YVRvRnJhbWUpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpT
dWJGcmFtZVNPQXV0aG9yaXphdGlvblNlc3Npb246OnBvc3REaWRDYW5jZWxNZXNzYWdlVG9QYXJl
bnQpOiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9GcmFtZUxvYWRTdGF0ZS5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OkZyYW1lTG9hZFN0YXRlOjphZGRPYnNlcnZlcik6CisgICAgICAgIChX
ZWJLaXQ6OkZyYW1lTG9hZFN0YXRlOjpyZW1vdmVPYnNlcnZlcik6CisgICAgICAgIChXZWJLaXQ6
OkZyYW1lTG9hZFN0YXRlOjpkaWRGaW5pc2hMb2FkKToKKyAgICAgICAgKiBVSVByb2Nlc3MvRnJh
bWVMb2FkU3RhdGUuaDoKKwogMjAxOS0wOS0yNSAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3Rl
bnNlbkB3ZWJraXQub3JnPgogCiAgICAgICAgIERvbid0IGZhbGwgYmFjayB0byBkZWZhdWx0IHNl
c3Npb24gaWYgc2Vzc2lvbiBjYW4ndCBiZSBmb3VuZCBmb3IgY29va2llIG9wZXJhdGlvbnMKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1NPQXV0aG9yaXphdGlvbi9T
T0F1dGhvcml6YXRpb25Db29yZGluYXRvci5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Nv
Y29hL1NPQXV0aG9yaXphdGlvbi9TT0F1dGhvcml6YXRpb25Db29yZGluYXRvci5tbQppbmRleCBk
YjQ0ZGUyNTRmNDBmZDRkOTlmODI3NWUzMjQxZmU3ZGJjMWYzMTE4Li5mMmIwNzNmNDI1ZTc1NjU3
ODRlYzQwZTY2ZDg4MGY3NjhiNzkxNzYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9Db2NvYS9TT0F1dGhvcml6YXRpb24vU09BdXRob3JpemF0aW9uQ29vcmRpbmF0b3IubW0K
KysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvU09BdXRob3JpemF0aW9uL1NPQXV0
aG9yaXphdGlvbkNvb3JkaW5hdG9yLm1tCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpZiBIQVZFKEFQ
UF9TU08pCiAKKyNpbXBvcnQgIkFQSUZyYW1lSGFuZGxlLmgiCiAjaW1wb3J0ICJQb3BVcFNPQXV0
aG9yaXphdGlvblNlc3Npb24uaCIKICNpbXBvcnQgIlJlZGlyZWN0U09BdXRob3JpemF0aW9uU2Vz
c2lvbi5oIgogI2ltcG9ydCAiU3ViRnJhbWVTT0F1dGhvcml6YXRpb25TZXNzaW9uLmgiCkBAIC02
NiwxMyArNjcsMTQgQEAgdm9pZCBTT0F1dGhvcml6YXRpb25Db29yZGluYXRvcjo6dHJ5QXV0aG9y
aXplKFJlZjxBUEk6Ok5hdmlnYXRpb25BY3Rpb24+JiYgbmF2aWcKICAgICB9CiAKICAgICAvLyBT
dWJGcmFtZVNPQXV0aG9yaXphdGlvblNlc3Npb24gc2hvdWxkIG9ubHkgYmUgYWxsb3dlZCBmb3Ig
QXBwbGUgZmlyc3QgcGFydGllcy4KLSAgICBib29sIHN1YmZyYW1lTmF2aWdhdGlvbiA9IG5hdmln
YXRpb25BY3Rpb24tPnRhcmdldEZyYW1lKCkgJiYgIW5hdmlnYXRpb25BY3Rpb24tPnRhcmdldEZy
YW1lKCktPmlzTWFpbkZyYW1lKCk7CisgICAgYXV0byogdGFyZ2V0RnJhbWUgPSBuYXZpZ2F0aW9u
QWN0aW9uLT50YXJnZXRGcmFtZSgpOworICAgIGJvb2wgc3ViZnJhbWVOYXZpZ2F0aW9uID0gdGFy
Z2V0RnJhbWUgJiYgIXRhcmdldEZyYW1lLT5pc01haW5GcmFtZSgpOwogICAgIGlmIChzdWJmcmFt
ZU5hdmlnYXRpb24gJiYgKCFwYWdlLm1haW5GcmFtZSgpIHx8ICFbQUtBdXRob3JpemF0aW9uQ29u
dHJvbGxlciBpc1VSTEZyb21BcHBsZU93bmVkRG9tYWluOnBhZ2UubWFpbkZyYW1lKCktPnVybCgp
XSkpIHsKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoZmFsc2UpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogCi0gICAgYXV0byBzZXNzaW9uID0gc3ViZnJhbWVOYXZpZ2F0aW9uID8gU3ViRnJh
bWVTT0F1dGhvcml6YXRpb25TZXNzaW9uOjpjcmVhdGUobV9zb0F1dGhvcml6YXRpb24uZ2V0KCks
IFdURk1vdmUobmF2aWdhdGlvbkFjdGlvbiksIHBhZ2UsIFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpKSA6IFJlZGlyZWN0U09BdXRob3JpemF0aW9uU2Vzc2lvbjo6Y3JlYXRlKG1fc29BdXRob3Jp
emF0aW9uLmdldCgpLCBXVEZNb3ZlKG5hdmlnYXRpb25BY3Rpb24pLCBwYWdlLCBXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKSk7CisgICAgYXV0byBzZXNzaW9uID0gc3ViZnJhbWVOYXZpZ2F0aW9u
ID8gU3ViRnJhbWVTT0F1dGhvcml6YXRpb25TZXNzaW9uOjpjcmVhdGUobV9zb0F1dGhvcml6YXRp
b24uZ2V0KCksIFdURk1vdmUobmF2aWdhdGlvbkFjdGlvbiksIHBhZ2UsIFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpLCB0YXJnZXRGcmFtZS0+aGFuZGxlKCkuZnJhbWVJRCgpKSA6IFJlZGlyZWN0
U09BdXRob3JpemF0aW9uU2Vzc2lvbjo6Y3JlYXRlKG1fc29BdXRob3JpemF0aW9uLmdldCgpLCBX
VEZNb3ZlKG5hdmlnYXRpb25BY3Rpb24pLCBwYWdlLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KSk7CiAgICAgW21fc29BdXRob3JpemF0aW9uRGVsZWdhdGUgc2V0U2Vzc2lvbjpXVEZNb3ZlKHNl
c3Npb24pXTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2Ev
U09BdXRob3JpemF0aW9uL1N1YkZyYW1lU09BdXRob3JpemF0aW9uU2Vzc2lvbi5oIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvU09BdXRob3JpemF0aW9uL1N1YkZyYW1lU09BdXRob3Jp
emF0aW9uU2Vzc2lvbi5oCmluZGV4IDdmN2IxZjlmZTVjY2U2MDRlNzYxMzFjNGVhMzk1ZGM5ZmEz
ZDc3M2QuLmQ5ZGQ5ZGVhMGRiNGQ2YTgzYjViZTg4OGJhZTZjOTgzODVlMmZjMWYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1NPQXV0aG9yaXphdGlvbi9TdWJGcmFt
ZVNPQXV0aG9yaXphdGlvblNlc3Npb24uaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9D
b2NvYS9TT0F1dGhvcml6YXRpb24vU3ViRnJhbWVTT0F1dGhvcml6YXRpb25TZXNzaW9uLmgKQEAg
LTI3LDYgKzI3LDcgQEAKIAogI2lmIEhBVkUoQVBQX1NTTykKIAorI2luY2x1ZGUgIkZyYW1lTG9h
ZFN0YXRlLmgiCiAjaW5jbHVkZSAiTmF2aWdhdGlvblNPQXV0aG9yaXphdGlvblNlc3Npb24uaCIK
IAogbmFtZXNwYWNlIElQQyB7CkBAIC0zNSwxNCArMzYsMjAgQEAgY2xhc3MgRGF0YVJlZmVyZW5j
ZTsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLWNsYXNzIFN1YkZyYW1lU09BdXRob3JpemF0aW9u
U2Vzc2lvbiBmaW5hbCA6IHB1YmxpYyBOYXZpZ2F0aW9uU09BdXRob3JpemF0aW9uU2Vzc2lvbiB7
CitjbGFzcyBTdWJGcmFtZVNPQXV0aG9yaXphdGlvblNlc3Npb24gZmluYWwgOiBwdWJsaWMgTmF2
aWdhdGlvblNPQXV0aG9yaXphdGlvblNlc3Npb24sIHB1YmxpYyBGcmFtZUxvYWRTdGF0ZTo6T2Jz
ZXJ2ZXIgewogcHVibGljOgogICAgIHVzaW5nIENhbGxiYWNrID0gQ29tcGxldGlvbkhhbmRsZXI8
dm9pZChib29sKT47CisgICAgdXNpbmcgU09BdXRob3JpemF0aW9uU2Vzc2lvbjo6d2Vha1B0ckZh
Y3Rvcnk7CisgICAgdXNpbmcgV2Vha1ZhbHVlVHlwZSA9IFNPQXV0aG9yaXphdGlvblNlc3Npb246
OldlYWtWYWx1ZVR5cGU7CiAKLSAgICBzdGF0aWMgUmVmPFNPQXV0aG9yaXphdGlvblNlc3Npb24+
IGNyZWF0ZShTT0F1dGhvcml6YXRpb24gKnNvQXV0aG9yaXphdGlvbiwgUmVmPEFQSTo6TmF2aWdh
dGlvbkFjdGlvbj4mJiBuYXZpZ2F0aW9uQWN0aW9uLCBXZWJQYWdlUHJveHkmIHBhZ2UsIENhbGxi
YWNrJiYgY29tcGxldGlvbkhhbmRsZXIpOworICAgIHN0YXRpYyBSZWY8U09BdXRob3JpemF0aW9u
U2Vzc2lvbj4gY3JlYXRlKFNPQXV0aG9yaXphdGlvbiAqLCBSZWY8QVBJOjpOYXZpZ2F0aW9uQWN0
aW9uPiYmLCBXZWJQYWdlUHJveHkmLCBDYWxsYmFjayYmLCBXZWJDb3JlOjpGcmFtZUlkZW50aWZp
ZXIpOworCisgICAgflN1YkZyYW1lU09BdXRob3JpemF0aW9uU2Vzc2lvbigpOwogCiBwcml2YXRl
OgotICAgIFN1YkZyYW1lU09BdXRob3JpemF0aW9uU2Vzc2lvbihTT0F1dGhvcml6YXRpb24gKiwg
UmVmPEFQSTo6TmF2aWdhdGlvbkFjdGlvbj4mJiwgV2ViUGFnZVByb3h5JiwgQ2FsbGJhY2smJik7
CisgICAgdXNpbmcgU3VwcGxlbWVudCA9IFZhcmlhbnQ8VmVjdG9yPHVpbnQ4X3Q+LCBTdHJpbmc+
OworCisgICAgU3ViRnJhbWVTT0F1dGhvcml6YXRpb25TZXNzaW9uKFNPQXV0aG9yaXphdGlvbiAq
LCBSZWY8QVBJOjpOYXZpZ2F0aW9uQWN0aW9uPiYmLCBXZWJQYWdlUHJveHkmLCBDYWxsYmFjayYm
LCBXZWJDb3JlOjpGcmFtZUlkZW50aWZpZXIpOwogCiAgICAgLy8gU09BdXRob3JpemF0aW9uU2Vz
c2lvbgogICAgIHZvaWQgZmFsbEJhY2tUb1dlYlBhdGhJbnRlcm5hbCgpIGZpbmFsOwpAQCAtNTIs
OCArNTksMTQgQEAgcHJpdmF0ZToKICAgICAvLyBOYXZpZ2F0aW9uU09BdXRob3JpemF0aW9uU2Vz
c2lvbgogICAgIHZvaWQgYmVmb3JlU3RhcnQoKSBmaW5hbDsKIAotICAgIHZvaWQgbG9hZERhdGFU
b0ZyYW1lKGNvbnN0IElQQzo6RGF0YVJlZmVyZW5jZSYsIGNvbnN0IFVSTCYpOwotICAgIHZvaWQg
cG9zdERpZENhbmNlbE1lc3NhZ2VUb1BhcmVudChGdW5jdGlvbjx2b2lkKCk+JiYpOworICAgIC8v
IEZyYW1lTG9hZFN0YXRlOjpPYnNlcnZlcgorICAgIHZvaWQgZGlkRmluaXNoTG9hZCgpIGZpbmFs
OworCisgICAgdm9pZCBhcHBlbmRSZXF1ZXN0VG9Mb2FkKFVSTCYmLCBTdXBwbGVtZW50JiYpOwor
ICAgIHZvaWQgbG9hZFJlcXVlc3RUb0ZyYW1lKCk7CisKKyAgICBXZWJDb3JlOjpGcmFtZUlkZW50
aWZpZXIgbV9mcmFtZUlEOworICAgIERlcXVlPHN0ZDo6cGFpcjxVUkwsIFN1cHBsZW1lbnQ+PiBt
X3JlcXVlc3RzVG9Mb2FkOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9TT0F1dGhvcml6YXRpb24vU3ViRnJhbWVT
T0F1dGhvcml6YXRpb25TZXNzaW9uLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2Ev
U09BdXRob3JpemF0aW9uL1N1YkZyYW1lU09BdXRob3JpemF0aW9uU2Vzc2lvbi5tbQppbmRleCAw
Y2JlZjBkMWRkNGRlZGE0NDhjNWRkNmJhZDczNGE0MGQ0NTEzZTQ0Li43ZWExOGM5YTJjOTAwYzg3
YzQyMWFmNzk1YjMwZDRiYmI4ODE2OGU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9Db2NvYS9TT0F1dGhvcml6YXRpb24vU3ViRnJhbWVTT0F1dGhvcml6YXRpb25TZXNzaW9u
Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1NPQXV0aG9yaXphdGlvbi9T
dWJGcmFtZVNPQXV0aG9yaXphdGlvblNlc3Npb24ubW0KQEAgLTI4LDcgKzI4LDYgQEAKIAogI2lm
IEhBVkUoQVBQX1NTTykKIAotI2ltcG9ydCAiQVBJRnJhbWVIYW5kbGUuaCIKICNpbXBvcnQgIkFQ
SU5hdmlnYXRpb25BY3Rpb24uaCIKICNpbXBvcnQgIkRhdGFSZWZlcmVuY2UuaCIKICNpbXBvcnQg
IldlYlBhZ2VQcm94eS5oIgpAQCAtMzksMzkgKzM4LDQ3IEBACiBuYW1lc3BhY2UgV2ViS2l0IHsK
IHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCituYW1lc3BhY2UgeworCiBjb25zdCBjaGFyKiBz
b0F1dGhvcml6YXRpb25Qb3N0RGlkU3RhcnRNZXNzYWdlVG9QYXJlbnQgPSAiPHNjcmlwdD5wYXJl
bnQucG9zdE1lc3NhZ2UoJ1NPQXV0aG9yaXphdGlvbkRpZFN0YXJ0JywgJyonKTs8L3NjcmlwdD4i
OwotY29uc3QgY2hhciogc29BdXRob3JpemF0aW9uUG9zdERpZENhbmNlbE1lc3NhZ2VUb1BhcmVu
dCA9ICJwYXJlbnQucG9zdE1lc3NhZ2UoJ1NPQXV0aG9yaXphdGlvbkRpZENhbmNlbCcsICcqJyk7
IjsKK2NvbnN0IGNoYXIqIHNvQXV0aG9yaXphdGlvblBvc3REaWRDYW5jZWxNZXNzYWdlVG9QYXJl
bnQgPSAiPHNjcmlwdD5wYXJlbnQucG9zdE1lc3NhZ2UoJ1NPQXV0aG9yaXphdGlvbkRpZENhbmNl
bCcsICcqJyk7PC9zY3JpcHQ+IjsKIAotUmVmPFNPQXV0aG9yaXphdGlvblNlc3Npb24+IFN1YkZy
YW1lU09BdXRob3JpemF0aW9uU2Vzc2lvbjo6Y3JlYXRlKFNPQXV0aG9yaXphdGlvbiAqc29BdXRo
b3JpemF0aW9uLCBSZWY8QVBJOjpOYXZpZ2F0aW9uQWN0aW9uPiYmIG5hdmlnYXRpb25BY3Rpb24s
IFdlYlBhZ2VQcm94eSYgcGFnZSwgQ2FsbGJhY2smJiBjb21wbGV0aW9uSGFuZGxlcikKK3N0YXRp
YyBpbmxpbmUgVmVjdG9yPHVpbnQ4X3Q+IGNvbnZlcnRCeXRlc1RvVmVjdG9yKGNvbnN0IHVpbnQ4
X3QgYnl0ZUFycmF5W10sIGNvbnN0IHNpemVfdCBsZW5ndGgpCiB7Ci0gICAgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgU3ViRnJhbWVTT0F1dGhvcml6YXRpb25TZXNzaW9uKHNvQXV0aG9yaXphdGlvbiwg
V1RGTW92ZShuYXZpZ2F0aW9uQWN0aW9uKSwgcGFnZSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cikpKTsKKyAgICBWZWN0b3I8dWludDhfdD4gcmVzdWx0OworICAgIHJlc3VsdC5hcHBlbmQoYnl0
ZUFycmF5LCBsZW5ndGgpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLVN1YkZyYW1lU09BdXRo
b3JpemF0aW9uU2Vzc2lvbjo6U3ViRnJhbWVTT0F1dGhvcml6YXRpb25TZXNzaW9uKFNPQXV0aG9y
aXphdGlvbiAqc29BdXRob3JpemF0aW9uLCBSZWY8QVBJOjpOYXZpZ2F0aW9uQWN0aW9uPiYmIG5h
dmlnYXRpb25BY3Rpb24sIFdlYlBhZ2VQcm94eSYgcGFnZSwgQ2FsbGJhY2smJiBjb21wbGV0aW9u
SGFuZGxlcikKK30gLy8gbmFtZXNwYWNlCisKK1JlZjxTT0F1dGhvcml6YXRpb25TZXNzaW9uPiBT
dWJGcmFtZVNPQXV0aG9yaXphdGlvblNlc3Npb246OmNyZWF0ZShTT0F1dGhvcml6YXRpb24gKnNv
QXV0aG9yaXphdGlvbiwgUmVmPEFQSTo6TmF2aWdhdGlvbkFjdGlvbj4mJiBuYXZpZ2F0aW9uQWN0
aW9uLCBXZWJQYWdlUHJveHkmIHBhZ2UsIENhbGxiYWNrJiYgY29tcGxldGlvbkhhbmRsZXIsIEZy
YW1lSWRlbnRpZmllciBmcmFtZUlEKQoreworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFN1YkZy
YW1lU09BdXRob3JpemF0aW9uU2Vzc2lvbihzb0F1dGhvcml6YXRpb24sIFdURk1vdmUobmF2aWdh
dGlvbkFjdGlvbiksIHBhZ2UsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpLCBmcmFtZUlEKSk7
Cit9CisKK1N1YkZyYW1lU09BdXRob3JpemF0aW9uU2Vzc2lvbjo6U3ViRnJhbWVTT0F1dGhvcml6
YXRpb25TZXNzaW9uKFNPQXV0aG9yaXphdGlvbiAqc29BdXRob3JpemF0aW9uLCBSZWY8QVBJOjpO
YXZpZ2F0aW9uQWN0aW9uPiYmIG5hdmlnYXRpb25BY3Rpb24sIFdlYlBhZ2VQcm94eSYgcGFnZSwg
Q2FsbGJhY2smJiBjb21wbGV0aW9uSGFuZGxlciwgRnJhbWVJZGVudGlmaWVyIGZyYW1lSUQpCiAg
ICAgOiBOYXZpZ2F0aW9uU09BdXRob3JpemF0aW9uU2Vzc2lvbihzb0F1dGhvcml6YXRpb24sIFdU
Rk1vdmUobmF2aWdhdGlvbkFjdGlvbiksIHBhZ2UsIEluaXRpYXRpbmdBY3Rpb246OlN1YkZyYW1l
LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSkKKyAgICAsIG1fZnJhbWVJRChmcmFtZUlEKQor
eworICAgIGlmIChhdXRvKiBmcmFtZSA9IHBhZ2UucHJvY2VzcygpLndlYkZyYW1lKG1fZnJhbWVJ
RCkpCisgICAgICAgIGZyYW1lLT5mcmFtZUxvYWRTdGF0ZSgpLmFkZE9ic2VydmVyKCp0aGlzKTsK
K30KKworU3ViRnJhbWVTT0F1dGhvcml6YXRpb25TZXNzaW9uOjp+U3ViRnJhbWVTT0F1dGhvcml6
YXRpb25TZXNzaW9uKCkKIHsKKyAgICBhdXRvKiBwYWdlID0gdGhpcy0+cGFnZSgpOworICAgIGlm
ICghcGFnZSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChhdXRvKiBmcmFtZSA9IHBhZ2UtPnBy
b2Nlc3MoKS53ZWJGcmFtZShtX2ZyYW1lSUQpKQorICAgICAgICBmcmFtZS0+ZnJhbWVMb2FkU3Rh
dGUoKS5yZW1vdmVPYnNlcnZlcigqdGhpcyk7CiB9CiAKIHZvaWQgU3ViRnJhbWVTT0F1dGhvcml6
YXRpb25TZXNzaW9uOjpmYWxsQmFja1RvV2ViUGF0aEludGVybmFsKCkKIHsKLSAgICAvLyBJbnN0
ZWFkIG9mIGlzc3VpbmcgYSBsb2FkLCB3ZSBleGVjdXRlIHRoZSBKYXZhc2NyaXB0IGRpcmVjdGx5
LiBUaGlzIHByb3ZpZGVzIHVzIGEgY2FsbGJhY2sKLSAgICAvLyB0byBlbnN1cmUgdGhlIGZpbmFs
IGxvYWQgaXMgaXNzdWVkIGFmdGVyIHRoZSBtZXNzYWdlIGlzIHBvc3RlZC4KLSAgICBwb3N0RGlk
Q2FuY2VsTWVzc2FnZVRvUGFyZW50KFt3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlzKV0gewot
ICAgICAgICBpZiAoIXdlYWtUaGlzKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBhdXRv
KiBwYWdlID0gd2Vha1RoaXMtPnBhZ2UoKTsKLSAgICAgICAgYXV0byogbmF2aWdhdGlvbkFjdGlv
blB0ciA9IHdlYWtUaGlzLT5uYXZpZ2F0aW9uQWN0aW9uKCk7Ci0gICAgICAgIGlmICghcGFnZSB8
fCAhbmF2aWdhdGlvbkFjdGlvblB0cikKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBp
ZiAoYXV0byogdGFyZ2V0RnJhbWUgPSBuYXZpZ2F0aW9uQWN0aW9uUHRyLT50YXJnZXRGcmFtZSgp
KSB7Ci0gICAgICAgICAgICBpZiAoYXV0byogZnJhbWUgPSBwYWdlLT5wcm9jZXNzKCkud2ViRnJh
bWUodGFyZ2V0RnJhbWUtPmhhbmRsZSgpLmZyYW1lSUQoKSkpIHsKLSAgICAgICAgICAgICAgICBw
YWdlLT5zZXRTaG91bGRTdXBwcmVzc1NPQXV0aG9yaXphdGlvbkluTmV4dE5hdmlnYXRpb25Qb2xp
Y3lEZWNpc2lvbigpOwotICAgICAgICAgICAgICAgIC8vIElzc3VlIGEgbmV3IGxvYWQgdG8gdGhl
IG9yaWdpbmFsIFVSTCBhcyB0aGUgb3JpZ2luYWwgbG9hZCBpcyBhYm9ydGVkIGJlZm9yZSBzdGFy
dC4KLSAgICAgICAgICAgICAgICBmcmFtZS0+bG9hZFVSTChuYXZpZ2F0aW9uQWN0aW9uUHRyLT5y
ZXF1ZXN0KCkudXJsKCksIG5hdmlnYXRpb25BY3Rpb25QdHItPnJlcXVlc3QoKS5odHRwUmVmZXJy
ZXIoKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9KTsKKyAgICBBU1NFUlQobmF2
aWdhdGlvbkFjdGlvbigpKTsKKyAgICBhcHBlbmRSZXF1ZXN0VG9Mb2FkKFVSTChuYXZpZ2F0aW9u
QWN0aW9uKCktPnJlcXVlc3QoKS51cmwoKSksIGNvbnZlcnRCeXRlc1RvVmVjdG9yKHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KHNvQXV0aG9yaXphdGlvblBvc3REaWRDYW5jZWxNZXNz
YWdlVG9QYXJlbnQpLCBzdHJsZW4oc29BdXRob3JpemF0aW9uUG9zdERpZENhbmNlbE1lc3NhZ2VU
b1BhcmVudCkpKTsKKyAgICBhcHBlbmRSZXF1ZXN0VG9Mb2FkKFVSTChuYXZpZ2F0aW9uQWN0aW9u
KCktPnJlcXVlc3QoKS51cmwoKSksIFN0cmluZyhuYXZpZ2F0aW9uQWN0aW9uKCktPnJlcXVlc3Qo
KS5odHRwUmVmZXJyZXIoKSkpOwogfQogCiB2b2lkIFN1YkZyYW1lU09BdXRob3JpemF0aW9uU2Vz
c2lvbjo6YWJvcnRJbnRlcm5hbCgpCkBAIC04NCw0NyArOTEsNDggQEAgdm9pZCBTdWJGcmFtZVNP
QXV0aG9yaXphdGlvblNlc3Npb246OmNvbXBsZXRlSW50ZXJuYWwoY29uc3QgV2ViQ29yZTo6UmVz
b3VyY2VSZXMKICAgICAgICAgZmFsbEJhY2tUb1dlYlBhdGhJbnRlcm5hbCgpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQotICAgIGxvYWREYXRhVG9GcmFtZShJUEM6OkRhdGFSZWZlcmVuY2UocmVp
bnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oZGF0YS5ieXRlcyksIGRhdGEubGVuZ3RoKSwg
cmVzcG9uc2UudXJsKCkpOworICAgIGFwcGVuZFJlcXVlc3RUb0xvYWQoVVJMKHJlc3BvbnNlLnVy
bCgpKSwgY29udmVydEJ5dGVzVG9WZWN0b3IocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90
Kj4oZGF0YS5ieXRlcyksIGRhdGEubGVuZ3RoKSk7CiB9CiAKIHZvaWQgU3ViRnJhbWVTT0F1dGhv
cml6YXRpb25TZXNzaW9uOjpiZWZvcmVTdGFydCgpCiB7CiAgICAgLy8gQ2FuY2VsbGVkIHRoZSBj
dXJyZW50IGxvYWQgYmVmb3JlIGxvYWRpbmcgdGhlIGRhdGEgdG8gcG9zdCBTT0F1dGhvcml6YXRp
b25EaWRTdGFydCB0byB0aGUgcGFyZW50IGZyYW1lLgogICAgIGludm9rZUNhbGxiYWNrKHRydWUp
OwotICAgIC8vIEN1cnJlbnRseSBpbiB0aGUgbWlkZGxlIG9mIGRlY2lkZVBvbGljeUZvck5hdmln
YXRpb25BY3Rpb24sIHNob3VsZCBzdGFydCBhIG5ldyBsb2FkIGFmdGVyLgotICAgIFJ1bkxvb3A6
Om1haW4oKS5kaXNwYXRjaChbd2Vha1RoaXMgPSBtYWtlV2Vha1B0cigqdGhpcyldIHsKLSAgICAg
ICAgaWYgKCF3ZWFrVGhpcyB8fCAhd2Vha1RoaXMtPnBhZ2UoKSB8fCAhd2Vha1RoaXMtPm5hdmln
YXRpb25BY3Rpb24oKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgLy8gSW5zdGVhZCBv
ZiBleGVjdXRpbmcgdGhlIEphdmFzY3JpcHQgZGlyZWN0bHksIGlzc3VpbmcgYSBsb2FkLiBUaGlz
IHdpbGwgc2V0IHRoZSBvcmlnaW4gcHJvcGVybHkuCi0gICAgICAgIHdlYWtUaGlzLT5sb2FkRGF0
YVRvRnJhbWUoSVBDOjpEYXRhUmVmZXJlbmNlKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhf
dCo+KHNvQXV0aG9yaXphdGlvblBvc3REaWRTdGFydE1lc3NhZ2VUb1BhcmVudCksIHN0cmxlbihz
b0F1dGhvcml6YXRpb25Qb3N0RGlkU3RhcnRNZXNzYWdlVG9QYXJlbnQpKSwgd2Vha1RoaXMtPm5h
dmlnYXRpb25BY3Rpb24oKS0+cmVxdWVzdCgpLnVybCgpKTsKLSAgICB9KTsKKyAgICBBU1NFUlQo
bmF2aWdhdGlvbkFjdGlvbigpKTsKKyAgICBhcHBlbmRSZXF1ZXN0VG9Mb2FkKFVSTChuYXZpZ2F0
aW9uQWN0aW9uKCktPnJlcXVlc3QoKS51cmwoKSksIGNvbnZlcnRCeXRlc1RvVmVjdG9yKHJlaW50
ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KHNvQXV0aG9yaXphdGlvblBvc3REaWRTdGFydE1l
c3NhZ2VUb1BhcmVudCksIHN0cmxlbihzb0F1dGhvcml6YXRpb25Qb3N0RGlkU3RhcnRNZXNzYWdl
VG9QYXJlbnQpKSk7CiB9CiAKLXZvaWQgU3ViRnJhbWVTT0F1dGhvcml6YXRpb25TZXNzaW9uOjps
b2FkRGF0YVRvRnJhbWUoY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNlJiBkYXRhLCBjb25zdCBVUkwm
IGJhc2VVUkwpCit2b2lkIFN1YkZyYW1lU09BdXRob3JpemF0aW9uU2Vzc2lvbjo6ZGlkRmluaXNo
TG9hZCgpCiB7Ci0gICAgYXV0byogcGFnZSA9IHRoaXMtPnBhZ2UoKTsKLSAgICBhdXRvKiBuYXZp
Z2F0aW9uQWN0aW9uUHRyID0gbmF2aWdhdGlvbkFjdGlvbigpOwotICAgIGlmICghcGFnZSB8fCAh
bmF2aWdhdGlvbkFjdGlvblB0cikKKyAgICBBU1NFUlQocGFnZSgpKTsKKyAgICBhdXRvKiBmcmFt
ZSA9IHBhZ2UoKS0+cHJvY2VzcygpLndlYkZyYW1lKG1fZnJhbWVJRCk7CisgICAgQVNTRVJUKGZy
YW1lKTsKKyAgICBpZiAobV9yZXF1ZXN0c1RvTG9hZC5pc0VtcHR5KCkgfHwgbV9yZXF1ZXN0c1Rv
TG9hZC5maXJzdCgpLmZpcnN0ICE9IGZyYW1lLT51cmwoKSkKICAgICAgICAgcmV0dXJuOworICAg
IG1fcmVxdWVzdHNUb0xvYWQudGFrZUZpcnN0KCk7CisgICAgbG9hZFJlcXVlc3RUb0ZyYW1lKCk7
Cit9CiAKLSAgICBpZiAoYXV0byogdGFyZ2V0RnJhbWUgPSBuYXZpZ2F0aW9uQWN0aW9uUHRyLT50
YXJnZXRGcmFtZSgpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBmcmFtZSA9IHBhZ2UtPnByb2Nlc3Mo
KS53ZWJGcmFtZSh0YXJnZXRGcmFtZS0+aGFuZGxlKCkuZnJhbWVJRCgpKSkgewotICAgICAgICAg
ICAgcGFnZS0+c2V0U2hvdWxkU3VwcHJlc3NTT0F1dGhvcml6YXRpb25Jbk5leHROYXZpZ2F0aW9u
UG9saWN5RGVjaXNpb24oKTsKLSAgICAgICAgICAgIGZyYW1lLT5sb2FkRGF0YShkYXRhLCAidGV4
dC9odG1sIiwgIlVURi04IiwgYmFzZVVSTCk7Ci0gICAgICAgIH0KLSAgICB9Cit2b2lkIFN1YkZy
YW1lU09BdXRob3JpemF0aW9uU2Vzc2lvbjo6YXBwZW5kUmVxdWVzdFRvTG9hZChVUkwmJiB1cmws
IFN1cHBsZW1lbnQmJiBzdXBwbGVtZW50KQoreworICAgIG1fcmVxdWVzdHNUb0xvYWQuYXBwZW5k
KHsgV1RGTW92ZSh1cmwpLCBXVEZNb3ZlKHN1cHBsZW1lbnQpIH0pOworICAgIGlmIChtX3JlcXVl
c3RzVG9Mb2FkLnNpemUoKSA9PSAxKQorICAgICAgICBsb2FkUmVxdWVzdFRvRnJhbWUoKTsKIH0K
IAotdm9pZCBTdWJGcmFtZVNPQXV0aG9yaXphdGlvblNlc3Npb246OnBvc3REaWRDYW5jZWxNZXNz
YWdlVG9QYXJlbnQoRnVuY3Rpb248dm9pZCgpPiYmIGNhbGxiYWNrKQordm9pZCBTdWJGcmFtZVNP
QXV0aG9yaXphdGlvblNlc3Npb246OmxvYWRSZXF1ZXN0VG9GcmFtZSgpCiB7CiAgICAgYXV0byog
cGFnZSA9IHRoaXMtPnBhZ2UoKTsKLSAgICBhdXRvKiBuYXZpZ2F0aW9uQWN0aW9uUHRyID0gbmF2
aWdhdGlvbkFjdGlvbigpOwotICAgIGlmICghcGFnZSB8fCAhbmF2aWdhdGlvbkFjdGlvblB0cikK
KyAgICBpZiAoIXBhZ2UgfHwgbV9yZXF1ZXN0c1RvTG9hZC5pc0VtcHR5KCkpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIGlmIChhdXRvKiB0YXJnZXRGcmFtZSA9IG5hdmlnYXRpb25BY3Rpb25QdHIt
PnRhcmdldEZyYW1lKCkpIHsKLSAgICAgICAgcGFnZS0+cnVuSmF2YVNjcmlwdEluRnJhbWUodGFy
Z2V0RnJhbWUtPmhhbmRsZSgpLmZyYW1lSUQoKSwgc29BdXRob3JpemF0aW9uUG9zdERpZENhbmNl
bE1lc3NhZ2VUb1BhcmVudCwgZmFsc2UsIFtjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXSAo
QVBJOjpTZXJpYWxpemVkU2NyaXB0VmFsdWUqLCBib29sLCBjb25zdCBFeGNlcHRpb25EZXRhaWxz
JiwgU2NyaXB0VmFsdWVDYWxsYmFjazo6RXJyb3IpIHsKLSAgICAgICAgICAgIGNhbGxiYWNrKCk7
CisgICAgaWYgKGF1dG8qIGZyYW1lID0gcGFnZS0+cHJvY2VzcygpLndlYkZyYW1lKG1fZnJhbWVJ
RCkpIHsKKyAgICAgICAgcGFnZS0+c2V0U2hvdWxkU3VwcHJlc3NTT0F1dGhvcml6YXRpb25Jbk5l
eHROYXZpZ2F0aW9uUG9saWN5RGVjaXNpb24oKTsKKyAgICAgICAgYXV0byYgdXJsID0gbV9yZXF1
ZXN0c1RvTG9hZC5maXJzdCgpLmZpcnN0OworICAgICAgICBXVEY6OnN3aXRjaE9uKG1fcmVxdWVz
dHNUb0xvYWQuZmlyc3QoKS5zZWNvbmQsIFsmXShjb25zdCBWZWN0b3I8dWludDhfdD4mIGRhdGEp
IHsKKyAgICAgICAgICAgIGZyYW1lLT5sb2FkRGF0YShJUEM6OkRhdGFSZWZlcmVuY2UoZGF0YSks
ICJ0ZXh0L2h0bWwiLCAiVVRGLTgiLCB1cmwpOworICAgICAgICB9LCBbJl0oY29uc3QgU3RyaW5n
JiByZWZlcnJlcikgeworICAgICAgICAgICAgZnJhbWUtPmxvYWRVUkwodXJsLCByZWZlcnJlcik7
CiAgICAgICAgIH0pOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0ZyYW1lTG9hZFN0YXRlLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0ZyYW1lTG9h
ZFN0YXRlLmNwcAppbmRleCAyNmYyYTA5ZTlmZDhmZjBhYTRmZjg0NDcyOTg3OGMyNmQ1ODZjZjVl
Li5jNjFiZWQ4MWQwOTI4NDYzMmJmMjk2NWVkMmM5OWIwYzZmZTQwMWEzIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9GcmFtZUxvYWRTdGF0ZS5jcHAKKysrIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvRnJhbWVMb2FkU3RhdGUuY3BwCkBAIC0zMiw2ICszMiwxOCBAQCBGcmFt
ZUxvYWRTdGF0ZTo6fkZyYW1lTG9hZFN0YXRlKCkKIHsKIH0KIAordm9pZCBGcmFtZUxvYWRTdGF0
ZTo6YWRkT2JzZXJ2ZXIoT2JzZXJ2ZXImIG9ic2VydmVyKQoreworICAgIGF1dG8gcmVzdWx0ID0g
bV9vYnNlcnZlcnMuYWRkKG9ic2VydmVyKTsKKyAgICBBU1NFUlRfVU5VU0VEKHJlc3VsdCwgcmVz
dWx0LmlzTmV3RW50cnkpOworfQorCit2b2lkIEZyYW1lTG9hZFN0YXRlOjpyZW1vdmVPYnNlcnZl
cihPYnNlcnZlciYgb2JzZXJ2ZXIpCit7CisgICAgYXV0byByZXN1bHQgPSBtX29ic2VydmVycy5y
ZW1vdmUob2JzZXJ2ZXIpOworICAgIEFTU0VSVF9VTlVTRUQocmVzdWx0LCByZXN1bHQpOworfQor
CiB2b2lkIEZyYW1lTG9hZFN0YXRlOjpkaWRTdGFydFByb3Zpc2lvbmFsTG9hZChjb25zdCBVUkwm
IHVybCkKIHsKICAgICBBU1NFUlQobV9wcm92aXNpb25hbFVSTC5pc0VtcHR5KCkpOwpAQCAtNzcs
NiArODksMTIgQEAgdm9pZCBGcmFtZUxvYWRTdGF0ZTo6ZGlkRmluaXNoTG9hZCgpCiAgICAgQVNT
RVJUKG1fcHJvdmlzaW9uYWxVUkwuaXNFbXB0eSgpKTsKIAogICAgIG1fc3RhdGUgPSBTdGF0ZTo6
RmluaXNoZWQ7CisKKyAgICBWZWN0b3I8T2JzZXJ2ZXIqPiBvYnNlcnZlcnNDb3B5OworICAgIGZv
ciAoYXV0byYgb2JzZXJ2ZXIgOiBtX29ic2VydmVycykKKyAgICAgICAgb2JzZXJ2ZXJzQ29weS5h
cHBlbmQoJm9ic2VydmVyKTsKKyAgICBmb3IgKGF1dG8qIG9ic2VydmVyIDogb2JzZXJ2ZXJzQ29w
eSkKKyAgICAgICAgb2JzZXJ2ZXItPmRpZEZpbmlzaExvYWQoKTsKIH0KIAogdm9pZCBGcmFtZUxv
YWRTdGF0ZTo6ZGlkRmFpbExvYWQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvRnJhbWVMb2FkU3RhdGUuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0ZyYW1lTG9hZFN0
YXRlLmgKaW5kZXggYzM0ZTI3ZGYxODhhYmU3NmI1OTU3YzgzNmVlYzc4YjZjOTc5Yzg0NS4uZjI5
NzdlYTVmYjE0NTUzMTkyYmZhYjc3ZjE2NGMzOGIyODg0ZTIxYiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvRnJhbWVMb2FkU3RhdGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9GcmFtZUxvYWRTdGF0ZS5oCkBAIC0yNiw2ICsyNiw3IEBACiAjcHJhZ21hIG9uY2UK
IAogI2luY2x1ZGUgPHd0Zi9VUkwuaD4KKyNpbmNsdWRlIDx3dGYvV2Vha0hhc2hTZXQuaD4KIAog
bmFtZXNwYWNlIFdlYktpdCB7CiAKQEAgLTM5LDYgKzQwLDE2IEBAIHB1YmxpYzoKICAgICAgICAg
RmluaXNoZWQKICAgICB9OwogCisgICAgY2xhc3MgT2JzZXJ2ZXIgOiBwdWJsaWMgQ2FuTWFrZVdl
YWtQdHI8T2JzZXJ2ZXI+IHsKKyAgICBwdWJsaWM6CisgICAgICAgIHZpcnR1YWwgfk9ic2VydmVy
KCkgPSBkZWZhdWx0OworCisgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRGaW5pc2hMb2FkKCkgPSAw
OworICAgIH07CisKKyAgICB2b2lkIGFkZE9ic2VydmVyKE9ic2VydmVyJik7CisgICAgdm9pZCBy
ZW1vdmVPYnNlcnZlcihPYnNlcnZlciYpOworCiAgICAgdm9pZCBkaWRTdGFydFByb3Zpc2lvbmFs
TG9hZChjb25zdCBVUkwmKTsKICAgICB2b2lkIGRpZEV4cGxpY2l0T3Blbihjb25zdCBVUkwmKTsK
ICAgICB2b2lkIGRpZFJlY2VpdmVTZXJ2ZXJSZWRpcmVjdEZvclByb3Zpc2lvbmFsTG9hZChjb25z
dCBVUkwmKTsKQEAgLTY0LDYgKzc1LDcgQEAgcHJpdmF0ZToKICAgICBVUkwgbV9wcm92aXNpb25h
bFVSTDsKICAgICBVUkwgbV91bnJlYWNoYWJsZVVSTDsKICAgICBVUkwgbV9sYXN0VW5yZWFjaGFi
bGVVUkw7CisgICAgV2Vha0hhc2hTZXQ8T2JzZXJ2ZXI+IG1fb2JzZXJ2ZXJzOwogfTsKIAogfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9X
ZWJQcm9jZXNzUG9vbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9v
bC5jcHAKaW5kZXggOGU0NjMwYmRhM2JhYjU4MmI2ZjVkNjRlZDU4OGY2YzBkMzBiNTlkNi4uOTdk
OTM4YzgwYjNkNzQxYWQ1ZGZhMmVhZDRjYjk0N2QyMWE4MzcxMSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcApAQCAtNDEsNiArNDEsNyBAQAogI2luY2x1ZGUg
IkRvd25sb2FkUHJveHlNZXNzYWdlcy5oIgogI2luY2x1ZGUgIkdhbWVwYWREYXRhLmgiCiAjaW5j
bHVkZSAiSGlnaFBlcmZvcm1hbmNlR3JhcGhpY3NVc2FnZVNhbXBsZXIuaCIKKyNpbmNsdWRlICJM
ZWdhY3lHbG9iYWxTZXR0aW5ncy5oIgogI2luY2x1ZGUgIkxvZ0luaXRpYWxpemF0aW9uLmgiCiAj
aW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJh
bWV0ZXJzLmgiCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cK
aW5kZXggNmM4OTY5ODhhN2Q4YTUyYThmNDlkMzM5OGM2MmQ5Y2Q1OGIzNWI1Ny4uYjk5NmU2OWY4
MTI3NzFlZDk0MTNhZDI2YmIzZjk0MWUyN2NlMTNkYyAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdl
TG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE4IEBACisyMDE5LTA5LTIwICBK
aWV3ZW4gVGFuICA8amlld2VuX3RhbkBhcHBsZS5jb20+CisKKyAgICAgICAgU3ViRnJhbWVTT0F1
dGhvcml6YXRpb25TZXNzaW9uIHNob3VsZCBlbnN1cmUgbWVzc2FnZXMgYXJlIHBvc3RlZCBpbiB0
aGUgcmlnaHQgb3JkZXIgdG8gdGhlIHBhcmVudCBmcmFtZQorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAyMDYxCisgICAgICAgIDxyZGFyOi8vcHJvYmxl
bS81NTQ4NTY2Nj4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBBZGRzIHRlc3RzIHRoYXQgY2hlY2sgdGhlIG9yZGVyIG9mIG1lc3NhZ2VzIHBvc3RlZCBi
eSBTdWJGcmFtZVNPQXV0aG9yaXphdGlvblNlc3Npb24uCisKKyAgICAgICAgKiBUZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdENvY29hL1Rlc3RTT0F1dGhvcml6YXRpb24ubW06CisgICAgICAgICgt
W1Rlc3RTT0F1dGhvcml6YXRpb25TY3JpcHRNZXNzYWdlSGFuZGxlciB1c2VyQ29udGVudENvbnRy
b2xsZXI6ZGlkUmVjZWl2ZVNjcmlwdE1lc3NhZ2U6XSk6CisgICAgICAgIChyZXNldFN0YXRlKToK
KyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1QpOgorCiAyMDE5LTA5LTI1ICBBbGV4IENocmlz
dGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmVtb3ZlIGR1cGxp
Y2F0ZSBXZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbiBjb3B5aW5nIGNvZGUKZGlmZiAtLWdp
dCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvVGVzdFNPQXV0aG9yaXph
dGlvbi5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvVGVzdFNPQXV0
aG9yaXphdGlvbi5tbQppbmRleCBkMGUyZTdkYmFhYzg0ODk5MDRjYWQ3YzE4ZmNhYWRjNzI5M2Ey
MWFiLi5kNjA3Yzc2YmIxMDE4ZjM5NjE4YzgwODRiZjAzZjdkY2U5OTdjYzgxIDEwMDY0NAotLS0g
YS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1Rlc3RTT0F1dGhvcml6YXRp
b24ubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9UZXN0U09B
dXRob3JpemF0aW9uLm1tCkBAIC01Myw2ICs1Myw3IEBAIHN0YXRpYyBib29sIHVpU2hvd2VkID0g
ZmFsc2U7CiBzdGF0aWMgYm9vbCBuZXdXaW5kb3dDcmVhdGVkID0gZmFsc2U7CiBzdGF0aWMgYm9v
bCBoYXZlSHR0cEJvZHkgPSBmYWxzZTsKIHN0YXRpYyBib29sIG5hdmlnYXRpb25Qb2xpY3lEZWNp
ZGVkID0gZmFsc2U7CitzdGF0aWMgYm9vbCBhbGxNZXNzYWdlc1JlY2VpdmVkID0gZmFsc2U7CiBz
dGF0aWMgU3RyaW5nIGZpbmFsVVJMOwogc3RhdGljIFNPQXV0aG9yaXphdGlvbiogZ0F1dGhvcml6
YXRpb247CiBzdGF0aWMgaWQ8U09BdXRob3JpemF0aW9uRGVsZWdhdGU+IGdEZWxlZ2F0ZTsKQEAg
LTI0MSw2ICsyNDIsMzcgQEAgLSAodm9pZCl2aWV3RGlkRGlzYXBwZWFyCiAKIEBlbmQKIAorQGlu
dGVyZmFjZSBUZXN0U09BdXRob3JpemF0aW9uU2NyaXB0TWVzc2FnZUhhbmRsZXIgOiBOU09iamVj
dCA8V0tTY3JpcHRNZXNzYWdlSGFuZGxlcj4KK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFRlc3RT
T0F1dGhvcml6YXRpb25TY3JpcHRNZXNzYWdlSGFuZGxlciB7CisgICAgUmV0YWluUHRyPE5TTXV0
YWJsZUFycmF5PiBfbWVzc2FnZXM7Cit9CisKKy0gKHZvaWQpdXNlckNvbnRlbnRDb250cm9sbGVy
OihXS1VzZXJDb250ZW50Q29udHJvbGxlciAqKXVzZXJDb250ZW50Q29udHJvbGxlciBkaWRSZWNl
aXZlU2NyaXB0TWVzc2FnZTooV0tTY3JpcHRNZXNzYWdlICopbWVzc2FnZQoreworICAgIGlmICgh
X21lc3NhZ2VzKQorICAgICAgICBfbWVzc2FnZXMgPSBhZG9wdE5TKFtbTlNNdXRhYmxlQXJyYXkg
YWxsb2NdIGluaXRdKTsKKyAgICBbX21lc3NhZ2VzIGFkZE9iamVjdDptZXNzYWdlLmJvZHldOwor
CisgICAgaWYgKFttZXNzYWdlLmJvZHkgaXNFcXVhbDpAIiJdKSB7CisgICAgICAgIGFsbE1lc3Nh
Z2VzUmVjZWl2ZWQgPSB0cnVlOworICAgICAgICBFWFBFQ1RfRVEoW19tZXNzYWdlcyBjb3VudF0s
IDV1KTsKKyAgICAgICAgRVhQRUNUX1dLX1NUUkVRKCJTT0F1dGhvcml6YXRpb25EaWRTdGFydCIs
IFtfbWVzc2FnZXMgb2JqZWN0QXRJbmRleDoxXSk7CisgICAgICAgIEVYUEVDVF9XS19TVFJFUSgi
U09BdXRob3JpemF0aW9uRGlkQ2FuY2VsIiwgW19tZXNzYWdlcyBvYmplY3RBdEluZGV4OjNdKTsK
KyAgICAgICAgRVhQRUNUX1dLX1NUUkVRKCIiLCBbX21lc3NhZ2VzIG9iamVjdEF0SW5kZXg6NF0p
OworICAgIH0KKworICAgIGlmIChbbWVzc2FnZS5ib2R5IGlzRXF1YWw6QCJIZWxsby4iXSkgewor
ICAgICAgICBhbGxNZXNzYWdlc1JlY2VpdmVkID0gdHJ1ZTsKKyAgICAgICAgRVhQRUNUX0VRKFtf
bWVzc2FnZXMgY291bnRdLCA0dSk7CisgICAgICAgIEVYUEVDVF9XS19TVFJFUSgiU09BdXRob3Jp
emF0aW9uRGlkU3RhcnQiLCBbX21lc3NhZ2VzIG9iamVjdEF0SW5kZXg6MV0pOworICAgICAgICBF
WFBFQ1RfV0tfU1RSRVEoIkhlbGxvLiIsIFtfbWVzc2FnZXMgb2JqZWN0QXRJbmRleDozXSk7Cisg
ICAgfQorfQorCitAZW5kCisKIHN0YXRpYyBib29sIG92ZXJyaWRlQ2FuUGVyZm9ybUF1dGhvcml6
YXRpb25XaXRoVVJMKGlkLCBTRUwsIE5TVVJMICp1cmwsIE5TSW50ZWdlcikKIHsKICAgICBpZiAo
IVt1cmwubGFzdFBhdGhDb21wb25lbnQgaXNFcXVhbDpAInNpbXBsZS5odG1sIl0gJiYgIVt1cmwu
aG9zdCBpc0VxdWFsOkAid3d3LmV4YW1wbGUuY29tIl0gJiYgIVt1cmwubGFzdFBhdGhDb21wb25l
bnQgaXNFcXVhbDpAIkdldFNlc3Npb25Db29raWUuaHRtbCJdKQpAQCAtMjkyLDYgKzMyNCw3IEBA
IHN0YXRpYyB2b2lkIHJlc2V0U3RhdGUoKQogICAgIG5ld1dpbmRvd0NyZWF0ZWQgPSBmYWxzZTsK
ICAgICBoYXZlSHR0cEJvZHkgPSBmYWxzZTsKICAgICBuYXZpZ2F0aW9uUG9saWN5RGVjaWRlZCA9
IGZhbHNlOworICAgIGFsbE1lc3NhZ2VzUmVjZWl2ZWQgPSBmYWxzZTsKICAgICBmaW5hbFVSTCA9
IGVtcHR5U3RyaW5nKCk7CiAgICAgZ0F1dGhvcml6YXRpb24gPSBudWxscHRyOwogICAgIGdEZWxl
Z2F0ZSA9IG51bGxwdHI7CkBAIC0yMjIwLDYgKzIyNTMsNjAgQEAgVEVTVChTT0F1dGhvcml6YXRp
b25TdWJGcmFtZSwgSW50ZXJjZXB0aW9uRXJyb3JXaXRoUmVmZXJyZXIpCiAgICAgW3dlYlZpZXcg
d2FpdEZvck1lc3NhZ2U6KGlkKW1ha2VTdHJpbmcoIlJlZmVycmVyOiAiLCBvcmlnaW4sICIvIild
OyAvLyBSZWZlcnJlciBwb2xpY3kgcmVxdWlyZXMgJy8nIGFmdGVyIG9yaWdpbi4KIH0KIAorVEVT
VChTT0F1dGhvcml6YXRpb25TdWJGcmFtZSwgSW50ZXJjZXB0aW9uRXJyb3JNZXNzYWdlT3JkZXIp
Cit7CisgICAgcmVzZXRTdGF0ZSgpOworICAgIENsYXNzTWV0aG9kU3dpenpsZXIgc3dpenpsZXIx
KFBBTDo6Z2V0U09BdXRob3JpemF0aW9uQ2xhc3MoKSwgQHNlbGVjdG9yKGNhblBlcmZvcm1BdXRo
b3JpemF0aW9uV2l0aFVSTDpyZXNwb25zZUNvZGU6KSwgcmVpbnRlcnByZXRfY2FzdDxJTVA+KG92
ZXJyaWRlQ2FuUGVyZm9ybUF1dGhvcml6YXRpb25XaXRoVVJMKSk7CisgICAgSW5zdGFuY2VNZXRo
b2RTd2l6emxlciBzd2l6emxlcjIoUEFMOjpnZXRTT0F1dGhvcml6YXRpb25DbGFzcygpLCBAc2Vs
ZWN0b3Ioc2V0RGVsZWdhdGU6KSwgcmVpbnRlcnByZXRfY2FzdDxJTVA+KG92ZXJyaWRlU2V0RGVs
ZWdhdGUpKTsKKyAgICBJbnN0YW5jZU1ldGhvZFN3aXp6bGVyIHN3aXp6bGVyMyhQQUw6OmdldFNP
QXV0aG9yaXphdGlvbkNsYXNzKCksIEBzZWxlY3RvcihiZWdpbkF1dGhvcml6YXRpb25XaXRoVVJM
Omh0dHBIZWFkZXJzOmh0dHBCb2R5OiksIHJlaW50ZXJwcmV0X2Nhc3Q8SU1QPihvdmVycmlkZUJl
Z2luQXV0aG9yaXphdGlvbldpdGhVUkwpKTsKKyAgICBDbGFzc01ldGhvZFN3aXp6bGVyIHN3aXp6
bGVyNChbQUtBdXRob3JpemF0aW9uQ29udHJvbGxlciBjbGFzc10sIEBzZWxlY3Rvcihpc1VSTEZy
b21BcHBsZU93bmVkRG9tYWluOiksIHJlaW50ZXJwcmV0X2Nhc3Q8SU1QPihvdmVycmlkZUlzVVJM
RnJvbUFwcGxlT3duZWREb21haW4pKTsKKworICAgIFJldGFpblB0cjxOU1VSTD4gYmFzZVVSTCA9
IFtbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gVVJMRm9yUmVzb3VyY2U6QCJzaW1wbGUyIiB3aXRoRXh0
ZW5zaW9uOkAiaHRtbCIgc3ViZGlyZWN0b3J5OkAiVGVzdFdlYktpdEFQSS5yZXNvdXJjZXMiXTsK
KyAgICBSZXRhaW5QdHI8TlNVUkw+IHRlc3RVUkwgPSBbW05TQnVuZGxlIG1haW5CdW5kbGVdIFVS
TEZvclJlc291cmNlOkAiR2V0U2Vzc2lvbkNvb2tpZSIgd2l0aEV4dGVuc2lvbjpAImh0bWwiIHN1
YmRpcmVjdG9yeTpAIlRlc3RXZWJLaXRBUEkucmVzb3VyY2VzIl07CisgICAgYXV0byB0ZXN0SHRt
bCA9IGdlbmVyYXRlSHRtbChwYXJlbnRUZW1wbGF0ZSwgdGVzdFVSTC5nZXQoKS5hYnNvbHV0ZVN0
cmluZyk7CisKKyAgICBhdXRvIGNvbmZpZ3VyYXRpb24gPSBhZG9wdE5TKFtbV0tXZWJWaWV3Q29u
ZmlndXJhdGlvbiBhbGxvY10gaW5pdF0pOworICAgIGF1dG8gbWVzc2FnZUhhbmRsZXIgPSBhZG9w
dE5TKFtbVGVzdFNPQXV0aG9yaXphdGlvblNjcmlwdE1lc3NhZ2VIYW5kbGVyIGFsbG9jXSBpbml0
XSk7CisgICAgW1tjb25maWd1cmF0aW9uIHVzZXJDb250ZW50Q29udHJvbGxlcl0gYWRkU2NyaXB0
TWVzc2FnZUhhbmRsZXI6bWVzc2FnZUhhbmRsZXIuZ2V0KCkgbmFtZTpAInRlc3RIYW5kbGVyIl07
CisKKyAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5p
dFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKSBjb25maWd1cmF0aW9uOmNvbmZp
Z3VyYXRpb24uZ2V0KCldKTsKKyAgICBhdXRvIGRlbGVnYXRlID0gYWRvcHROUyhbW1Rlc3RTT0F1
dGhvcml6YXRpb25EZWxlZ2F0ZSBhbGxvY10gaW5pdF0pOworICAgIGNvbmZpZ3VyZVNPQXV0aG9y
aXphdGlvbldlYlZpZXcod2ViVmlldy5nZXQoKSwgZGVsZWdhdGUuZ2V0KCkpOworCisgICAgW3dl
YlZpZXcgbG9hZEhUTUxTdHJpbmc6dGVzdEh0bWwgYmFzZVVSTDpiYXNlVVJMLmdldCgpXTsKKyAg
ICBVdGlsOjpydW4oJmF1dGhvcml6YXRpb25QZXJmb3JtZWQpOworICAgIFtnRGVsZWdhdGUgYXV0
aG9yaXphdGlvbjpnQXV0aG9yaXphdGlvbiBkaWRDb21wbGV0ZVdpdGhFcnJvcjphZG9wdE5TKFtb
TlNFcnJvciBhbGxvY10gaW5pdFdpdGhEb21haW46TlNDb2NvYUVycm9yRG9tYWluIGNvZGU6MCB1
c2VySW5mbzpuaWxdKS5nZXQoKV07CisgICAgVXRpbDo6cnVuKCZhbGxNZXNzYWdlc1JlY2VpdmVk
KTsKK30KKworVEVTVChTT0F1dGhvcml6YXRpb25TdWJGcmFtZSwgSW50ZXJjZXB0aW9uU3VjY2Vz
c01lc3NhZ2VPcmRlcikKK3sKKyAgICByZXNldFN0YXRlKCk7CisgICAgQ2xhc3NNZXRob2RTd2l6
emxlciBzd2l6emxlcjEoUEFMOjpnZXRTT0F1dGhvcml6YXRpb25DbGFzcygpLCBAc2VsZWN0b3Io
Y2FuUGVyZm9ybUF1dGhvcml6YXRpb25XaXRoVVJMOnJlc3BvbnNlQ29kZTopLCByZWludGVycHJl
dF9jYXN0PElNUD4ob3ZlcnJpZGVDYW5QZXJmb3JtQXV0aG9yaXphdGlvbldpdGhVUkwpKTsKKyAg
ICBJbnN0YW5jZU1ldGhvZFN3aXp6bGVyIHN3aXp6bGVyMihQQUw6OmdldFNPQXV0aG9yaXphdGlv
bkNsYXNzKCksIEBzZWxlY3RvcihzZXREZWxlZ2F0ZTopLCByZWludGVycHJldF9jYXN0PElNUD4o
b3ZlcnJpZGVTZXREZWxlZ2F0ZSkpOworICAgIEluc3RhbmNlTWV0aG9kU3dpenpsZXIgc3dpenps
ZXIzKFBBTDo6Z2V0U09BdXRob3JpemF0aW9uQ2xhc3MoKSwgQHNlbGVjdG9yKGJlZ2luQXV0aG9y
aXphdGlvbldpdGhVUkw6aHR0cEhlYWRlcnM6aHR0cEJvZHk6KSwgcmVpbnRlcnByZXRfY2FzdDxJ
TVA+KG92ZXJyaWRlQmVnaW5BdXRob3JpemF0aW9uV2l0aFVSTCkpOworICAgIENsYXNzTWV0aG9k
U3dpenpsZXIgc3dpenpsZXI0KFtBS0F1dGhvcml6YXRpb25Db250cm9sbGVyIGNsYXNzXSwgQHNl
bGVjdG9yKGlzVVJMRnJvbUFwcGxlT3duZWREb21haW46KSwgcmVpbnRlcnByZXRfY2FzdDxJTVA+
KG92ZXJyaWRlSXNVUkxGcm9tQXBwbGVPd25lZERvbWFpbikpOworCisgICAgYXV0byB0ZXN0VVJM
ID0gVVJMKFVSTCgpLCAiaHR0cDovL3d3dy5leGFtcGxlLmNvbSIpOworICAgIGF1dG8gdGVzdEh0
bWwgPSBnZW5lcmF0ZUh0bWwocGFyZW50VGVtcGxhdGUsIHRlc3RVUkwuc3RyaW5nKCkpOworCisg
ICAgYXV0byBjb25maWd1cmF0aW9uID0gYWRvcHROUyhbW1dLV2ViVmlld0NvbmZpZ3VyYXRpb24g
YWxsb2NdIGluaXRdKTsKKyAgICBhdXRvIG1lc3NhZ2VIYW5kbGVyID0gYWRvcHROUyhbW1Rlc3RT
T0F1dGhvcml6YXRpb25TY3JpcHRNZXNzYWdlSGFuZGxlciBhbGxvY10gaW5pdF0pOworICAgIFtb
Y29uZmlndXJhdGlvbiB1c2VyQ29udGVudENvbnRyb2xsZXJdIGFkZFNjcmlwdE1lc3NhZ2VIYW5k
bGVyOm1lc3NhZ2VIYW5kbGVyLmdldCgpIG5hbWU6QCJ0ZXN0SGFuZGxlciJdOworCisgICAgYXV0
byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6
Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCkgY29uZmlndXJhdGlvbjpjb25maWd1cmF0aW9uLmdl
dCgpXSk7CisgICAgYXV0byBkZWxlZ2F0ZSA9IGFkb3B0TlMoW1tUZXN0U09BdXRob3JpemF0aW9u
RGVsZWdhdGUgYWxsb2NdIGluaXRdKTsKKyAgICBjb25maWd1cmVTT0F1dGhvcml6YXRpb25XZWJW
aWV3KHdlYlZpZXcuZ2V0KCksIGRlbGVnYXRlLmdldCgpKTsKKworICAgIFt3ZWJWaWV3IGxvYWRI
VE1MU3RyaW5nOnRlc3RIdG1sIGJhc2VVUkw6bmlsXTsKKyAgICBVdGlsOjpydW4oJmF1dGhvcml6
YXRpb25QZXJmb3JtZWQpOworCisgICAgYXV0byByZXNwb25zZSA9IGFkb3B0TlMoW1tOU0hUVFBV
UkxSZXNwb25zZSBhbGxvY10gaW5pdFdpdGhVUkw6dGVzdFVSTCBzdGF0dXNDb2RlOjIwMCBIVFRQ
VmVyc2lvbjpAIkhUVFAvMS4xIiBoZWFkZXJGaWVsZHM6bmlsXSk7CisgICAgYXV0byBpZnJhbWVI
dG1sQ1N0cmluZyA9IGdlbmVyYXRlSHRtbChpZnJhbWVUZW1wbGF0ZSwgIiIpLnV0ZjgoKTsKKyAg
ICBbZ0RlbGVnYXRlIGF1dGhvcml6YXRpb246Z0F1dGhvcml6YXRpb24gZGlkQ29tcGxldGVXaXRo
SFRUUFJlc3BvbnNlOnJlc3BvbnNlLmdldCgpIGh0dHBCb2R5OmFkb3B0TlMoW1tOU0RhdGEgYWxs
b2NdIGluaXRXaXRoQnl0ZXM6aWZyYW1lSHRtbENTdHJpbmcuZGF0YSgpIGxlbmd0aDppZnJhbWVI
dG1sQ1N0cmluZy5sZW5ndGgoKV0pLmdldCgpXTsKKyAgICBVdGlsOjpydW4oJmFsbE1lc3NhZ2Vz
UmVjZWl2ZWQpOworfQorCiB9IC8vIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJCiAKICNlbmRpZgo=
</data>
<flag name="review"
          id="395359"
          type_id="1"
          status="+"
          setter="youennf"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>379713</attachid>
            <date>2019-09-26 23:29:25 -0700</date>
            <delta_ts>2019-09-27 00:14:03 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-202061-20190926232925.patch</filename>
            <type>text/plain</type>
            <size>26341</size>
            <attacher name="Jiewen Tan">jiewen_tan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUwMzU0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGM2ZThlNGQ4NjM0OTcyMWRm
Y2Q3MDU5MWMyNTE2ZTQxYTQ0MmQyNGYuLjQ0ZDViNzE3YzgyODJhMDZkYzQxZGY2ZjI5YTQ0YzU3
ZTJhZDVlYTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTIgQEAKKzIwMTktMDktMjAgIEppZXdlbiBU
YW4gIDxqaWV3ZW5fdGFuQGFwcGxlLmNvbT4KKworICAgICAgICBTdWJGcmFtZVNPQXV0aG9yaXph
dGlvblNlc3Npb24gc2hvdWxkIGVuc3VyZSBtZXNzYWdlcyBhcmUgcG9zdGVkIGluIHRoZSByaWdo
dCBvcmRlciB0byB0aGUgcGFyZW50IGZyYW1lCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMDIwNjEKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzU1NDg1
NjY2PgorCisgICAgICAgIFJldmlld2VkIGJ5IFlvdWVubiBGYWJsZXQuCisKKyAgICAgICAgVGhp
cyBwYXRjaCBlbnN1cmVzIG1lc3NhZ2VzIHRoYXQgc2lnbmFsIHRoZSBwcm9jZXNzIG9mIFNPQXV0
aG9yaXphdGlvbiBpbnRlcmNlcHRpb24gYXJlIHBvc3RlZCBpbgorICAgICAgICB0aGUgcmlnaHQg
b3JkZXIgdG8gdGhlIHBhcmVudCBmcmFtZS4gQmVmb3JlIHRoaXMgcGF0Y2gsIHRoZXJlIGFyZSBj
aGFuY2VzIHRoYXQgU09BdXRob3JpemF0aW9uRGlkQ2FuY2VsCisgICAgICAgIGNvdWxkIGJlIHBv
c3RlZCB0byB0aGUgcGFyZW50IGJlZm9yZSBTT0F1dGhvcml6YXRpb25EaWRTdGFydC4gVGhlcmUg
YXJlIGZldyBjYXVzZXMgdGhhdCBsZWFkIHRvCisgICAgICAgIHRoaXMgcmFjZSBjb25kaXRpb246
CisgICAgICAgIDEpIFN1YkZyYW1lU09BdXRob3JpemF0aW9uU2Vzc2lvbjo6YmVmb3JlU3RhcnQg
cG9zdHMgU09BdXRob3JpemF0aW9uRGlkU3RhcnQgaW4gdGhlIG5leHQgcnVubG9vcC4gU28KKyAg
ICAgICAgZXh0ZW5zaW9uIGNvdWxkIGhhdmUgdGhlIGNoYW5jZSB0byBpbnZva2UgU3ViRnJhbWVT
T0F1dGhvcml6YXRpb25TZXNzaW9uOjpmYWxsQmFja1RvV2ViUGF0aEludGVybmFsCisgICAgICAg
IGJlZm9yZSBTT0F1dGhvcml6YXRpb25EaWRTdGFydCBpcyBwb3N0ZWQuCisgICAgICAgIDIpIEV2
ZW4gaWYgdGhlIG9yZGVyIGlzIHJpZ2h0IGluIHRoZSBVSSBwcm9jZXNzLCBpdCBpcyBub3QgZ3Vh
cmFudGVlZCB0aGF0IFdlYiBwcm9jZXNzIHdpbGwgc3RyaWN0bHkKKyAgICAgICAgZm9sbG93IHRo
ZSBvcmRlciBhcyB0aGUgbG9hZGluZyBwcm9jZXNzIGlzIGFzeW5jLgorCisgICAgICAgIFRvIGZp
eCB0aGUgaXNzdWU6CisgICAgICAgIDEpIFN1YkZyYW1lU09BdXRob3JpemF0aW9uU2Vzc2lvbjo6
YmVmb3JlU3RhcnQgbm93IHBvc3RzIFNPQXV0aG9yaXphdGlvbkRpZFN0YXJ0IGluIHRoZSBzYW1l
IHJ1bmxvb3AuCisgICAgICAgIDIpIE9ic2VydmVyIGlzIGludHJvZHVjZWQgaW4gRnJhbWVMb2Fk
U3RhdGUgc3VjaCB0aGF0IFN1YkZyYW1lU09BdXRob3JpemF0aW9uU2Vzc2lvbiBjb3VsZCBrbm93
IGlmCisgICAgICAgIHRoZSBsb2FkaW5nIGlzIGZpbmlzaGVkLiBXaXRoIHRoaXMgbmV3IGNhcGFj
aXR5LCBTdWJGcmFtZVNPQXV0aG9yaXphdGlvblNlc3Npb24gY2FuIGVuc3VyZSBpdCBvbmx5Cisg
ICAgICAgIHBvc3RzIG5leHQgbWVzc2FnZSB3aGVuIHRoZSBwcmV2aW91cyBtZXNzYWdlIGhhcyBi
ZWVuIHBvc3RlZC4KKworICAgICAgICBJbXBsZW1lbnRhdGlvbiB3aXNlLCBhIGRlcXVlIHRvIHF1
ZXVlIHJlcXVlc3RzIGlzIHByb3ZpZGVkIHRvIG1haW50YWluIG9yZGVyLgorICAgICAgICAxKSBX
aGVuIG5ldyByZXF1ZXN0IGlzIGFkZGVkIHRvIHRoZSBkZXF1ZSwgU3ViRnJhbWVTT0F1dGhvcml6
YXRpb25TZXNzaW9uIHdpbGwgb25seSBsb2FkIHRoZSByZXF1ZXN0CisgICAgICAgIGlmIGl0IGlz
IHRoZSBvbmx5IGVsZW1lbnQgaW4gdGhlIGRlcXVlLiBPdGhlcndpc2UsIGl0IGRvZXMgbm90aGlu
Zy4KKyAgICAgICAgMikgV2hlbiBTdWJGcmFtZVNPQXV0aG9yaXphdGlvblNlc3Npb24gcmVjZWl2
ZXMgZGlkRmluaXNoTG9hZCwgaXQgcG9wcyB0aGUgaGVhZCBvZiB0aGUgcXVldWUgYW5kIGxvYWRz
CisgICAgICAgIHRoZSBuZXh0IHJlcXVlc3QgaW4gdGhlIHF1ZXVlIGlmIGFueS4KKyAgICAgICAg
VGhlIGFib3ZlIGRlc2lnbiBzaG91bGQgZ3VhcmFudGVlIGFsbCByZXF1ZXN0cyBhcmUgbG9hZGVk
IGluIHNlcXVlbmNlLgorCisgICAgICAgICogVUlQcm9jZXNzL0NvY29hL1NPQXV0aG9yaXphdGlv
bi9TdWJGcmFtZVNPQXV0aG9yaXphdGlvblNlc3Npb24uaDoKKyAgICAgICAgKiBVSVByb2Nlc3Mv
Q29jb2EvU09BdXRob3JpemF0aW9uL1N1YkZyYW1lU09BdXRob3JpemF0aW9uU2Vzc2lvbi5tbToK
KyAgICAgICAgKFdlYktpdDo6U3ViRnJhbWVTT0F1dGhvcml6YXRpb25TZXNzaW9uOjpTdWJGcmFt
ZVNPQXV0aG9yaXphdGlvblNlc3Npb24pOgorICAgICAgICAoV2ViS2l0OjpTdWJGcmFtZVNPQXV0
aG9yaXphdGlvblNlc3Npb246On5TdWJGcmFtZVNPQXV0aG9yaXphdGlvblNlc3Npb24pOgorICAg
ICAgICAoV2ViS2l0OjpTdWJGcmFtZVNPQXV0aG9yaXphdGlvblNlc3Npb246OmZhbGxCYWNrVG9X
ZWJQYXRoSW50ZXJuYWwpOgorICAgICAgICAoV2ViS2l0OjpTdWJGcmFtZVNPQXV0aG9yaXphdGlv
blNlc3Npb246OmNvbXBsZXRlSW50ZXJuYWwpOgorICAgICAgICAoV2ViS2l0OjpTdWJGcmFtZVNP
QXV0aG9yaXphdGlvblNlc3Npb246OmJlZm9yZVN0YXJ0KToKKyAgICAgICAgKFdlYktpdDo6U3Vi
RnJhbWVTT0F1dGhvcml6YXRpb25TZXNzaW9uOjpkaWRGaW5pc2hMb2FkKToKKyAgICAgICAgKFdl
YktpdDo6U3ViRnJhbWVTT0F1dGhvcml6YXRpb25TZXNzaW9uOjphcHBlbmRSZXF1ZXN0VG9Mb2Fk
KToKKyAgICAgICAgKFdlYktpdDo6U3ViRnJhbWVTT0F1dGhvcml6YXRpb25TZXNzaW9uOjpsb2Fk
UmVxdWVzdFRvRnJhbWUpOgorICAgICAgICAoV2ViS2l0OjpTdWJGcmFtZVNPQXV0aG9yaXphdGlv
blNlc3Npb246OmxvYWREYXRhVG9GcmFtZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlN1
YkZyYW1lU09BdXRob3JpemF0aW9uU2Vzc2lvbjo6cG9zdERpZENhbmNlbE1lc3NhZ2VUb1BhcmVu
dCk6IERlbGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNzL0ZyYW1lTG9hZFN0YXRlLmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6RnJhbWVMb2FkU3RhdGU6OmFkZE9ic2VydmVyKToKKyAgICAgICAgKFdl
YktpdDo6RnJhbWVMb2FkU3RhdGU6OnJlbW92ZU9ic2VydmVyKToKKyAgICAgICAgKFdlYktpdDo6
RnJhbWVMb2FkU3RhdGU6OmRpZEZpbmlzaExvYWQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9GcmFt
ZUxvYWRTdGF0ZS5oOgorCiAyMDE5LTA5LTI1ICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVu
c2VuQHdlYmtpdC5vcmc+CiAKICAgICAgICAgRG9uJ3QgZmFsbCBiYWNrIHRvIGRlZmF1bHQgc2Vz
c2lvbiBpZiBzZXNzaW9uIGNhbid0IGJlIGZvdW5kIGZvciBjb29raWUgb3BlcmF0aW9ucwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvU09BdXRob3JpemF0aW9uL1NP
QXV0aG9yaXphdGlvbkNvb3JkaW5hdG9yLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29j
b2EvU09BdXRob3JpemF0aW9uL1NPQXV0aG9yaXphdGlvbkNvb3JkaW5hdG9yLm1tCmluZGV4IGRi
NDRkZTI1NGY0MGZkNGQ5OWY4Mjc1ZTMyNDFmZTdkYmMxZjMxMTguLmYyYjA3M2Y0MjVlNzU2NTc4
NGVjNDBlNjZkODgwZjc2OGI3OTE3NjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0NvY29hL1NPQXV0aG9yaXphdGlvbi9TT0F1dGhvcml6YXRpb25Db29yZGluYXRvci5tbQor
KysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9TT0F1dGhvcml6YXRpb24vU09BdXRo
b3JpemF0aW9uQ29vcmRpbmF0b3IubW0KQEAgLTI4LDYgKzI4LDcgQEAKIAogI2lmIEhBVkUoQVBQ
X1NTTykKIAorI2ltcG9ydCAiQVBJRnJhbWVIYW5kbGUuaCIKICNpbXBvcnQgIlBvcFVwU09BdXRo
b3JpemF0aW9uU2Vzc2lvbi5oIgogI2ltcG9ydCAiUmVkaXJlY3RTT0F1dGhvcml6YXRpb25TZXNz
aW9uLmgiCiAjaW1wb3J0ICJTdWJGcmFtZVNPQXV0aG9yaXphdGlvblNlc3Npb24uaCIKQEAgLTY2
LDEzICs2NywxNCBAQCB2b2lkIFNPQXV0aG9yaXphdGlvbkNvb3JkaW5hdG9yOjp0cnlBdXRob3Jp
emUoUmVmPEFQSTo6TmF2aWdhdGlvbkFjdGlvbj4mJiBuYXZpZwogICAgIH0KIAogICAgIC8vIFN1
YkZyYW1lU09BdXRob3JpemF0aW9uU2Vzc2lvbiBzaG91bGQgb25seSBiZSBhbGxvd2VkIGZvciBB
cHBsZSBmaXJzdCBwYXJ0aWVzLgotICAgIGJvb2wgc3ViZnJhbWVOYXZpZ2F0aW9uID0gbmF2aWdh
dGlvbkFjdGlvbi0+dGFyZ2V0RnJhbWUoKSAmJiAhbmF2aWdhdGlvbkFjdGlvbi0+dGFyZ2V0RnJh
bWUoKS0+aXNNYWluRnJhbWUoKTsKKyAgICBhdXRvKiB0YXJnZXRGcmFtZSA9IG5hdmlnYXRpb25B
Y3Rpb24tPnRhcmdldEZyYW1lKCk7CisgICAgYm9vbCBzdWJmcmFtZU5hdmlnYXRpb24gPSB0YXJn
ZXRGcmFtZSAmJiAhdGFyZ2V0RnJhbWUtPmlzTWFpbkZyYW1lKCk7CiAgICAgaWYgKHN1YmZyYW1l
TmF2aWdhdGlvbiAmJiAoIXBhZ2UubWFpbkZyYW1lKCkgfHwgIVtBS0F1dGhvcml6YXRpb25Db250
cm9sbGVyIGlzVVJMRnJvbUFwcGxlT3duZWREb21haW46cGFnZS5tYWluRnJhbWUoKS0+dXJsKCld
KSkgewogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihmYWxzZSk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKLSAgICBhdXRvIHNlc3Npb24gPSBzdWJmcmFtZU5hdmlnYXRpb24gPyBTdWJGcmFt
ZVNPQXV0aG9yaXphdGlvblNlc3Npb246OmNyZWF0ZShtX3NvQXV0aG9yaXphdGlvbi5nZXQoKSwg
V1RGTW92ZShuYXZpZ2F0aW9uQWN0aW9uKSwgcGFnZSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cikpIDogUmVkaXJlY3RTT0F1dGhvcml6YXRpb25TZXNzaW9uOjpjcmVhdGUobV9zb0F1dGhvcml6
YXRpb24uZ2V0KCksIFdURk1vdmUobmF2aWdhdGlvbkFjdGlvbiksIHBhZ2UsIFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKKyAgICBhdXRvIHNlc3Npb24gPSBzdWJmcmFtZU5hdmlnYXRpb24g
PyBTdWJGcmFtZVNPQXV0aG9yaXphdGlvblNlc3Npb246OmNyZWF0ZShtX3NvQXV0aG9yaXphdGlv
bi5nZXQoKSwgV1RGTW92ZShuYXZpZ2F0aW9uQWN0aW9uKSwgcGFnZSwgV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlciksIHRhcmdldEZyYW1lLT5oYW5kbGUoKS5mcmFtZUlEKCkpIDogUmVkaXJlY3RT
T0F1dGhvcml6YXRpb25TZXNzaW9uOjpjcmVhdGUobV9zb0F1dGhvcml6YXRpb24uZ2V0KCksIFdU
Rk1vdmUobmF2aWdhdGlvbkFjdGlvbiksIHBhZ2UsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
KTsKICAgICBbbV9zb0F1dGhvcml6YXRpb25EZWxlZ2F0ZSBzZXRTZXNzaW9uOldURk1vdmUoc2Vz
c2lvbildOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9T
T0F1dGhvcml6YXRpb24vU3ViRnJhbWVTT0F1dGhvcml6YXRpb25TZXNzaW9uLmggYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9TT0F1dGhvcml6YXRpb24vU3ViRnJhbWVTT0F1dGhvcml6
YXRpb25TZXNzaW9uLmgKaW5kZXggN2Y3YjFmOWZlNWNjZTYwNGU3NjEzMWM0ZWEzOTVkYzlmYTNk
NzczZC4uZDlkZDlkZWEwZGI0ZDZhODNiNWJlODg4YmFlNmM5ODM4NWUyZmMxZiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvU09BdXRob3JpemF0aW9uL1N1YkZyYW1l
U09BdXRob3JpemF0aW9uU2Vzc2lvbi5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Nv
Y29hL1NPQXV0aG9yaXphdGlvbi9TdWJGcmFtZVNPQXV0aG9yaXphdGlvblNlc3Npb24uaApAQCAt
MjcsNiArMjcsNyBAQAogCiAjaWYgSEFWRShBUFBfU1NPKQogCisjaW5jbHVkZSAiRnJhbWVMb2Fk
U3RhdGUuaCIKICNpbmNsdWRlICJOYXZpZ2F0aW9uU09BdXRob3JpemF0aW9uU2Vzc2lvbi5oIgog
CiBuYW1lc3BhY2UgSVBDIHsKQEAgLTM1LDE0ICszNiwyMCBAQCBjbGFzcyBEYXRhUmVmZXJlbmNl
OwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotY2xhc3MgU3ViRnJhbWVTT0F1dGhvcml6YXRpb25T
ZXNzaW9uIGZpbmFsIDogcHVibGljIE5hdmlnYXRpb25TT0F1dGhvcml6YXRpb25TZXNzaW9uIHsK
K2NsYXNzIFN1YkZyYW1lU09BdXRob3JpemF0aW9uU2Vzc2lvbiBmaW5hbCA6IHB1YmxpYyBOYXZp
Z2F0aW9uU09BdXRob3JpemF0aW9uU2Vzc2lvbiwgcHVibGljIEZyYW1lTG9hZFN0YXRlOjpPYnNl
cnZlciB7CiBwdWJsaWM6CiAgICAgdXNpbmcgQ2FsbGJhY2sgPSBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKGJvb2wpPjsKKyAgICB1c2luZyBTT0F1dGhvcml6YXRpb25TZXNzaW9uOjp3ZWFrUHRyRmFj
dG9yeTsKKyAgICB1c2luZyBXZWFrVmFsdWVUeXBlID0gU09BdXRob3JpemF0aW9uU2Vzc2lvbjo6
V2Vha1ZhbHVlVHlwZTsKIAotICAgIHN0YXRpYyBSZWY8U09BdXRob3JpemF0aW9uU2Vzc2lvbj4g
Y3JlYXRlKFNPQXV0aG9yaXphdGlvbiAqc29BdXRob3JpemF0aW9uLCBSZWY8QVBJOjpOYXZpZ2F0
aW9uQWN0aW9uPiYmIG5hdmlnYXRpb25BY3Rpb24sIFdlYlBhZ2VQcm94eSYgcGFnZSwgQ2FsbGJh
Y2smJiBjb21wbGV0aW9uSGFuZGxlcik7CisgICAgc3RhdGljIFJlZjxTT0F1dGhvcml6YXRpb25T
ZXNzaW9uPiBjcmVhdGUoU09BdXRob3JpemF0aW9uICosIFJlZjxBUEk6Ok5hdmlnYXRpb25BY3Rp
b24+JiYsIFdlYlBhZ2VQcm94eSYsIENhbGxiYWNrJiYsIFdlYkNvcmU6OkZyYW1lSWRlbnRpZmll
cik7CisKKyAgICB+U3ViRnJhbWVTT0F1dGhvcml6YXRpb25TZXNzaW9uKCk7CiAKIHByaXZhdGU6
Ci0gICAgU3ViRnJhbWVTT0F1dGhvcml6YXRpb25TZXNzaW9uKFNPQXV0aG9yaXphdGlvbiAqLCBS
ZWY8QVBJOjpOYXZpZ2F0aW9uQWN0aW9uPiYmLCBXZWJQYWdlUHJveHkmLCBDYWxsYmFjayYmKTsK
KyAgICB1c2luZyBTdXBwbGVtZW50ID0gVmFyaWFudDxWZWN0b3I8dWludDhfdD4sIFN0cmluZz47
CisKKyAgICBTdWJGcmFtZVNPQXV0aG9yaXphdGlvblNlc3Npb24oU09BdXRob3JpemF0aW9uICos
IFJlZjxBUEk6Ok5hdmlnYXRpb25BY3Rpb24+JiYsIFdlYlBhZ2VQcm94eSYsIENhbGxiYWNrJiYs
IFdlYkNvcmU6OkZyYW1lSWRlbnRpZmllcik7CiAKICAgICAvLyBTT0F1dGhvcml6YXRpb25TZXNz
aW9uCiAgICAgdm9pZCBmYWxsQmFja1RvV2ViUGF0aEludGVybmFsKCkgZmluYWw7CkBAIC01Miw4
ICs1OSwxNCBAQCBwcml2YXRlOgogICAgIC8vIE5hdmlnYXRpb25TT0F1dGhvcml6YXRpb25TZXNz
aW9uCiAgICAgdm9pZCBiZWZvcmVTdGFydCgpIGZpbmFsOwogCi0gICAgdm9pZCBsb2FkRGF0YVRv
RnJhbWUoY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNlJiwgY29uc3QgVVJMJik7Ci0gICAgdm9pZCBw
b3N0RGlkQ2FuY2VsTWVzc2FnZVRvUGFyZW50KEZ1bmN0aW9uPHZvaWQoKT4mJik7CisgICAgLy8g
RnJhbWVMb2FkU3RhdGU6Ok9ic2VydmVyCisgICAgdm9pZCBkaWRGaW5pc2hMb2FkKCkgZmluYWw7
CisKKyAgICB2b2lkIGFwcGVuZFJlcXVlc3RUb0xvYWQoVVJMJiYsIFN1cHBsZW1lbnQmJik7Cisg
ICAgdm9pZCBsb2FkUmVxdWVzdFRvRnJhbWUoKTsKKworICAgIFdlYkNvcmU6OkZyYW1lSWRlbnRp
ZmllciBtX2ZyYW1lSUQ7CisgICAgRGVxdWU8c3RkOjpwYWlyPFVSTCwgU3VwcGxlbWVudD4+IG1f
cmVxdWVzdHNUb0xvYWQ7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1NPQXV0aG9yaXphdGlvbi9TdWJGcmFtZVNP
QXV0aG9yaXphdGlvblNlc3Npb24ubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9T
T0F1dGhvcml6YXRpb24vU3ViRnJhbWVTT0F1dGhvcml6YXRpb25TZXNzaW9uLm1tCmluZGV4IDBj
YmVmMGQxZGQ0ZGVkYTQ0OGM1ZGQ2YmFkNzM0YTQwZDQ1MTNlNDQuLjNiNTM4MGUzZWJmOTMwMzBj
YjJlNWNlODMzNDI0MGRhYTk5YzZjYjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0NvY29hL1NPQXV0aG9yaXphdGlvbi9TdWJGcmFtZVNPQXV0aG9yaXphdGlvblNlc3Npb24u
bW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvU09BdXRob3JpemF0aW9uL1N1
YkZyYW1lU09BdXRob3JpemF0aW9uU2Vzc2lvbi5tbQpAQCAtMjgsNyArMjgsNiBAQAogCiAjaWYg
SEFWRShBUFBfU1NPKQogCi0jaW1wb3J0ICJBUElGcmFtZUhhbmRsZS5oIgogI2ltcG9ydCAiQVBJ
TmF2aWdhdGlvbkFjdGlvbi5oIgogI2ltcG9ydCAiRGF0YVJlZmVyZW5jZS5oIgogI2ltcG9ydCAi
V2ViUGFnZVByb3h5LmgiCkBAIC0zOSwzOSArMzgsNDcgQEAKIG5hbWVzcGFjZSBXZWJLaXQgewog
dXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKK25hbWVzcGFjZSB7CisKIGNvbnN0IGNoYXIqIHNv
QXV0aG9yaXphdGlvblBvc3REaWRTdGFydE1lc3NhZ2VUb1BhcmVudCA9ICI8c2NyaXB0PnBhcmVu
dC5wb3N0TWVzc2FnZSgnU09BdXRob3JpemF0aW9uRGlkU3RhcnQnLCAnKicpOzwvc2NyaXB0PiI7
Ci1jb25zdCBjaGFyKiBzb0F1dGhvcml6YXRpb25Qb3N0RGlkQ2FuY2VsTWVzc2FnZVRvUGFyZW50
ID0gInBhcmVudC5wb3N0TWVzc2FnZSgnU09BdXRob3JpemF0aW9uRGlkQ2FuY2VsJywgJyonKTsi
OworY29uc3QgY2hhciogc29BdXRob3JpemF0aW9uUG9zdERpZENhbmNlbE1lc3NhZ2VUb1BhcmVu
dCA9ICI8c2NyaXB0PnBhcmVudC5wb3N0TWVzc2FnZSgnU09BdXRob3JpemF0aW9uRGlkQ2FuY2Vs
JywgJyonKTs8L3NjcmlwdD4iOwogCi1SZWY8U09BdXRob3JpemF0aW9uU2Vzc2lvbj4gU3ViRnJh
bWVTT0F1dGhvcml6YXRpb25TZXNzaW9uOjpjcmVhdGUoU09BdXRob3JpemF0aW9uICpzb0F1dGhv
cml6YXRpb24sIFJlZjxBUEk6Ok5hdmlnYXRpb25BY3Rpb24+JiYgbmF2aWdhdGlvbkFjdGlvbiwg
V2ViUGFnZVByb3h5JiBwYWdlLCBDYWxsYmFjayYmIGNvbXBsZXRpb25IYW5kbGVyKQorc3RhdGlj
IGlubGluZSBWZWN0b3I8dWludDhfdD4gY29udmVydEJ5dGVzVG9WZWN0b3IoY29uc3QgdWludDhf
dCBieXRlQXJyYXlbXSwgY29uc3Qgc2l6ZV90IGxlbmd0aCkKIHsKLSAgICByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBTdWJGcmFtZVNPQXV0aG9yaXphdGlvblNlc3Npb24oc29BdXRob3JpemF0aW9uLCBX
VEZNb3ZlKG5hdmlnYXRpb25BY3Rpb24pLCBwYWdlLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KSkpOworICAgIFZlY3Rvcjx1aW50OF90PiByZXN1bHQ7CisgICAgcmVzdWx0LmFwcGVuZChieXRl
QXJyYXksIGxlbmd0aCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotU3ViRnJhbWVTT0F1dGhv
cml6YXRpb25TZXNzaW9uOjpTdWJGcmFtZVNPQXV0aG9yaXphdGlvblNlc3Npb24oU09BdXRob3Jp
emF0aW9uICpzb0F1dGhvcml6YXRpb24sIFJlZjxBUEk6Ok5hdmlnYXRpb25BY3Rpb24+JiYgbmF2
aWdhdGlvbkFjdGlvbiwgV2ViUGFnZVByb3h5JiBwYWdlLCBDYWxsYmFjayYmIGNvbXBsZXRpb25I
YW5kbGVyKQorfSAvLyBuYW1lc3BhY2UKKworUmVmPFNPQXV0aG9yaXphdGlvblNlc3Npb24+IFN1
YkZyYW1lU09BdXRob3JpemF0aW9uU2Vzc2lvbjo6Y3JlYXRlKFNPQXV0aG9yaXphdGlvbiAqc29B
dXRob3JpemF0aW9uLCBSZWY8QVBJOjpOYXZpZ2F0aW9uQWN0aW9uPiYmIG5hdmlnYXRpb25BY3Rp
b24sIFdlYlBhZ2VQcm94eSYgcGFnZSwgQ2FsbGJhY2smJiBjb21wbGV0aW9uSGFuZGxlciwgRnJh
bWVJZGVudGlmaWVyIGZyYW1lSUQpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU3ViRnJh
bWVTT0F1dGhvcml6YXRpb25TZXNzaW9uKHNvQXV0aG9yaXphdGlvbiwgV1RGTW92ZShuYXZpZ2F0
aW9uQWN0aW9uKSwgcGFnZSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciksIGZyYW1lSUQpKTsK
K30KKworU3ViRnJhbWVTT0F1dGhvcml6YXRpb25TZXNzaW9uOjpTdWJGcmFtZVNPQXV0aG9yaXph
dGlvblNlc3Npb24oU09BdXRob3JpemF0aW9uICpzb0F1dGhvcml6YXRpb24sIFJlZjxBUEk6Ok5h
dmlnYXRpb25BY3Rpb24+JiYgbmF2aWdhdGlvbkFjdGlvbiwgV2ViUGFnZVByb3h5JiBwYWdlLCBD
YWxsYmFjayYmIGNvbXBsZXRpb25IYW5kbGVyLCBGcmFtZUlkZW50aWZpZXIgZnJhbWVJRCkKICAg
ICA6IE5hdmlnYXRpb25TT0F1dGhvcml6YXRpb25TZXNzaW9uKHNvQXV0aG9yaXphdGlvbiwgV1RG
TW92ZShuYXZpZ2F0aW9uQWN0aW9uKSwgcGFnZSwgSW5pdGlhdGluZ0FjdGlvbjo6U3ViRnJhbWUs
IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKQorICAgICwgbV9mcmFtZUlEKGZyYW1lSUQpCit7
CisgICAgaWYgKGF1dG8qIGZyYW1lID0gcGFnZS5wcm9jZXNzKCkud2ViRnJhbWUobV9mcmFtZUlE
KSkKKyAgICAgICAgZnJhbWUtPmZyYW1lTG9hZFN0YXRlKCkuYWRkT2JzZXJ2ZXIoKnRoaXMpOwor
fQorCitTdWJGcmFtZVNPQXV0aG9yaXphdGlvblNlc3Npb246On5TdWJGcmFtZVNPQXV0aG9yaXph
dGlvblNlc3Npb24oKQogeworICAgIGF1dG8qIHBhZ2UgPSB0aGlzLT5wYWdlKCk7CisgICAgaWYg
KCFwYWdlKQorICAgICAgICByZXR1cm47CisgICAgaWYgKGF1dG8qIGZyYW1lID0gcGFnZS0+cHJv
Y2VzcygpLndlYkZyYW1lKG1fZnJhbWVJRCkpCisgICAgICAgIGZyYW1lLT5mcmFtZUxvYWRTdGF0
ZSgpLnJlbW92ZU9ic2VydmVyKCp0aGlzKTsKIH0KIAogdm9pZCBTdWJGcmFtZVNPQXV0aG9yaXph
dGlvblNlc3Npb246OmZhbGxCYWNrVG9XZWJQYXRoSW50ZXJuYWwoKQogewotICAgIC8vIEluc3Rl
YWQgb2YgaXNzdWluZyBhIGxvYWQsIHdlIGV4ZWN1dGUgdGhlIEphdmFzY3JpcHQgZGlyZWN0bHku
IFRoaXMgcHJvdmlkZXMgdXMgYSBjYWxsYmFjawotICAgIC8vIHRvIGVuc3VyZSB0aGUgZmluYWwg
bG9hZCBpcyBpc3N1ZWQgYWZ0ZXIgdGhlIG1lc3NhZ2UgaXMgcG9zdGVkLgotICAgIHBvc3REaWRD
YW5jZWxNZXNzYWdlVG9QYXJlbnQoW3dlYWtUaGlzID0gbWFrZVdlYWtQdHIoKnRoaXMpXSB7Ci0g
ICAgICAgIGlmICghd2Vha1RoaXMpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGF1dG8q
IHBhZ2UgPSB3ZWFrVGhpcy0+cGFnZSgpOwotICAgICAgICBhdXRvKiBuYXZpZ2F0aW9uQWN0aW9u
UHRyID0gd2Vha1RoaXMtPm5hdmlnYXRpb25BY3Rpb24oKTsKLSAgICAgICAgaWYgKCFwYWdlIHx8
ICFuYXZpZ2F0aW9uQWN0aW9uUHRyKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGlm
IChhdXRvKiB0YXJnZXRGcmFtZSA9IG5hdmlnYXRpb25BY3Rpb25QdHItPnRhcmdldEZyYW1lKCkp
IHsKLSAgICAgICAgICAgIGlmIChhdXRvKiBmcmFtZSA9IHBhZ2UtPnByb2Nlc3MoKS53ZWJGcmFt
ZSh0YXJnZXRGcmFtZS0+aGFuZGxlKCkuZnJhbWVJRCgpKSkgewotICAgICAgICAgICAgICAgIHBh
Z2UtPnNldFNob3VsZFN1cHByZXNzU09BdXRob3JpemF0aW9uSW5OZXh0TmF2aWdhdGlvblBvbGlj
eURlY2lzaW9uKCk7Ci0gICAgICAgICAgICAgICAgLy8gSXNzdWUgYSBuZXcgbG9hZCB0byB0aGUg
b3JpZ2luYWwgVVJMIGFzIHRoZSBvcmlnaW5hbCBsb2FkIGlzIGFib3J0ZWQgYmVmb3JlIHN0YXJ0
LgotICAgICAgICAgICAgICAgIGZyYW1lLT5sb2FkVVJMKG5hdmlnYXRpb25BY3Rpb25QdHItPnJl
cXVlc3QoKS51cmwoKSwgbmF2aWdhdGlvbkFjdGlvblB0ci0+cmVxdWVzdCgpLmh0dHBSZWZlcnJl
cigpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0pOworICAgIEFTU0VSVChuYXZp
Z2F0aW9uQWN0aW9uKCkpOworICAgIGFwcGVuZFJlcXVlc3RUb0xvYWQoVVJMKG5hdmlnYXRpb25B
Y3Rpb24oKS0+cmVxdWVzdCgpLnVybCgpKSwgY29udmVydEJ5dGVzVG9WZWN0b3IocmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oc29BdXRob3JpemF0aW9uUG9zdERpZENhbmNlbE1lc3Nh
Z2VUb1BhcmVudCksIHN0cmxlbihzb0F1dGhvcml6YXRpb25Qb3N0RGlkQ2FuY2VsTWVzc2FnZVRv
UGFyZW50KSkpOworICAgIGFwcGVuZFJlcXVlc3RUb0xvYWQoVVJMKG5hdmlnYXRpb25BY3Rpb24o
KS0+cmVxdWVzdCgpLnVybCgpKSwgU3RyaW5nKG5hdmlnYXRpb25BY3Rpb24oKS0+cmVxdWVzdCgp
Lmh0dHBSZWZlcnJlcigpKSk7CiB9CiAKIHZvaWQgU3ViRnJhbWVTT0F1dGhvcml6YXRpb25TZXNz
aW9uOjphYm9ydEludGVybmFsKCkKQEAgLTg0LDQ3ICs5MSw1MCBAQCB2b2lkIFN1YkZyYW1lU09B
dXRob3JpemF0aW9uU2Vzc2lvbjo6Y29tcGxldGVJbnRlcm5hbChjb25zdCBXZWJDb3JlOjpSZXNv
dXJjZVJlcwogICAgICAgICBmYWxsQmFja1RvV2ViUGF0aEludGVybmFsKCk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9Ci0gICAgbG9hZERhdGFUb0ZyYW1lKElQQzo6RGF0YVJlZmVyZW5jZShyZWlu
dGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihkYXRhLmJ5dGVzKSwgZGF0YS5sZW5ndGgpLCBy
ZXNwb25zZS51cmwoKSk7CisgICAgYXBwZW5kUmVxdWVzdFRvTG9hZChVUkwocmVzcG9uc2UudXJs
KCkpLCBjb252ZXJ0Qnl0ZXNUb1ZlY3RvcihyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3Qq
PihkYXRhLmJ5dGVzKSwgZGF0YS5sZW5ndGgpKTsKIH0KIAogdm9pZCBTdWJGcmFtZVNPQXV0aG9y
aXphdGlvblNlc3Npb246OmJlZm9yZVN0YXJ0KCkKIHsKICAgICAvLyBDYW5jZWxsZWQgdGhlIGN1
cnJlbnQgbG9hZCBiZWZvcmUgbG9hZGluZyB0aGUgZGF0YSB0byBwb3N0IFNPQXV0aG9yaXphdGlv
bkRpZFN0YXJ0IHRvIHRoZSBwYXJlbnQgZnJhbWUuCiAgICAgaW52b2tlQ2FsbGJhY2sodHJ1ZSk7
Ci0gICAgLy8gQ3VycmVudGx5IGluIHRoZSBtaWRkbGUgb2YgZGVjaWRlUG9saWN5Rm9yTmF2aWdh
dGlvbkFjdGlvbiwgc2hvdWxkIHN0YXJ0IGEgbmV3IGxvYWQgYWZ0ZXIuCi0gICAgUnVuTG9vcDo6
bWFpbigpLmRpc3BhdGNoKFt3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlzKV0gewotICAgICAg
ICBpZiAoIXdlYWtUaGlzIHx8ICF3ZWFrVGhpcy0+cGFnZSgpIHx8ICF3ZWFrVGhpcy0+bmF2aWdh
dGlvbkFjdGlvbigpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAvLyBJbnN0ZWFkIG9m
IGV4ZWN1dGluZyB0aGUgSmF2YXNjcmlwdCBkaXJlY3RseSwgaXNzdWluZyBhIGxvYWQuIFRoaXMg
d2lsbCBzZXQgdGhlIG9yaWdpbiBwcm9wZXJseS4KLSAgICAgICAgd2Vha1RoaXMtPmxvYWREYXRh
VG9GcmFtZShJUEM6OkRhdGFSZWZlcmVuY2UocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90
Kj4oc29BdXRob3JpemF0aW9uUG9zdERpZFN0YXJ0TWVzc2FnZVRvUGFyZW50KSwgc3RybGVuKHNv
QXV0aG9yaXphdGlvblBvc3REaWRTdGFydE1lc3NhZ2VUb1BhcmVudCkpLCB3ZWFrVGhpcy0+bmF2
aWdhdGlvbkFjdGlvbigpLT5yZXF1ZXN0KCkudXJsKCkpOwotICAgIH0pOworICAgIEFTU0VSVChu
YXZpZ2F0aW9uQWN0aW9uKCkpOworICAgIGFwcGVuZFJlcXVlc3RUb0xvYWQoVVJMKG5hdmlnYXRp
b25BY3Rpb24oKS0+cmVxdWVzdCgpLnVybCgpKSwgY29udmVydEJ5dGVzVG9WZWN0b3IocmVpbnRl
cnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oc29BdXRob3JpemF0aW9uUG9zdERpZFN0YXJ0TWVz
c2FnZVRvUGFyZW50KSwgc3RybGVuKHNvQXV0aG9yaXphdGlvblBvc3REaWRTdGFydE1lc3NhZ2VU
b1BhcmVudCkpKTsKIH0KIAotdm9pZCBTdWJGcmFtZVNPQXV0aG9yaXphdGlvblNlc3Npb246Omxv
YWREYXRhVG9GcmFtZShjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmIGRhdGEsIGNvbnN0IFVSTCYg
YmFzZVVSTCkKK3ZvaWQgU3ViRnJhbWVTT0F1dGhvcml6YXRpb25TZXNzaW9uOjpkaWRGaW5pc2hM
b2FkKCkKIHsKICAgICBhdXRvKiBwYWdlID0gdGhpcy0+cGFnZSgpOwotICAgIGF1dG8qIG5hdmln
YXRpb25BY3Rpb25QdHIgPSBuYXZpZ2F0aW9uQWN0aW9uKCk7Ci0gICAgaWYgKCFwYWdlIHx8ICFu
YXZpZ2F0aW9uQWN0aW9uUHRyKQorICAgIGlmICghcGFnZSkKKyAgICAgICAgcmV0dXJuOworICAg
IGF1dG8qIGZyYW1lID0gcGFnZS0+cHJvY2VzcygpLndlYkZyYW1lKG1fZnJhbWVJRCk7CisgICAg
QVNTRVJUKGZyYW1lKTsKKyAgICBpZiAobV9yZXF1ZXN0c1RvTG9hZC5pc0VtcHR5KCkgfHwgbV9y
ZXF1ZXN0c1RvTG9hZC5maXJzdCgpLmZpcnN0ICE9IGZyYW1lLT51cmwoKSkKICAgICAgICAgcmV0
dXJuOworICAgIG1fcmVxdWVzdHNUb0xvYWQudGFrZUZpcnN0KCk7CisgICAgbG9hZFJlcXVlc3RU
b0ZyYW1lKCk7Cit9CiAKLSAgICBpZiAoYXV0byogdGFyZ2V0RnJhbWUgPSBuYXZpZ2F0aW9uQWN0
aW9uUHRyLT50YXJnZXRGcmFtZSgpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBmcmFtZSA9IHBhZ2Ut
PnByb2Nlc3MoKS53ZWJGcmFtZSh0YXJnZXRGcmFtZS0+aGFuZGxlKCkuZnJhbWVJRCgpKSkgewot
ICAgICAgICAgICAgcGFnZS0+c2V0U2hvdWxkU3VwcHJlc3NTT0F1dGhvcml6YXRpb25Jbk5leHRO
YXZpZ2F0aW9uUG9saWN5RGVjaXNpb24oKTsKLSAgICAgICAgICAgIGZyYW1lLT5sb2FkRGF0YShk
YXRhLCAidGV4dC9odG1sIiwgIlVURi04IiwgYmFzZVVSTCk7Ci0gICAgICAgIH0KLSAgICB9Cit2
b2lkIFN1YkZyYW1lU09BdXRob3JpemF0aW9uU2Vzc2lvbjo6YXBwZW5kUmVxdWVzdFRvTG9hZChV
UkwmJiB1cmwsIFN1cHBsZW1lbnQmJiBzdXBwbGVtZW50KQoreworICAgIG1fcmVxdWVzdHNUb0xv
YWQuYXBwZW5kKHsgV1RGTW92ZSh1cmwpLCBXVEZNb3ZlKHN1cHBsZW1lbnQpIH0pOworICAgIGlm
IChtX3JlcXVlc3RzVG9Mb2FkLnNpemUoKSA9PSAxKQorICAgICAgICBsb2FkUmVxdWVzdFRvRnJh
bWUoKTsKIH0KIAotdm9pZCBTdWJGcmFtZVNPQXV0aG9yaXphdGlvblNlc3Npb246OnBvc3REaWRD
YW5jZWxNZXNzYWdlVG9QYXJlbnQoRnVuY3Rpb248dm9pZCgpPiYmIGNhbGxiYWNrKQordm9pZCBT
dWJGcmFtZVNPQXV0aG9yaXphdGlvblNlc3Npb246OmxvYWRSZXF1ZXN0VG9GcmFtZSgpCiB7CiAg
ICAgYXV0byogcGFnZSA9IHRoaXMtPnBhZ2UoKTsKLSAgICBhdXRvKiBuYXZpZ2F0aW9uQWN0aW9u
UHRyID0gbmF2aWdhdGlvbkFjdGlvbigpOwotICAgIGlmICghcGFnZSB8fCAhbmF2aWdhdGlvbkFj
dGlvblB0cikKKyAgICBpZiAoIXBhZ2UgfHwgbV9yZXF1ZXN0c1RvTG9hZC5pc0VtcHR5KCkpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIGlmIChhdXRvKiB0YXJnZXRGcmFtZSA9IG5hdmlnYXRpb25B
Y3Rpb25QdHItPnRhcmdldEZyYW1lKCkpIHsKLSAgICAgICAgcGFnZS0+cnVuSmF2YVNjcmlwdElu
RnJhbWUodGFyZ2V0RnJhbWUtPmhhbmRsZSgpLmZyYW1lSUQoKSwgc29BdXRob3JpemF0aW9uUG9z
dERpZENhbmNlbE1lc3NhZ2VUb1BhcmVudCwgZmFsc2UsIFtjYWxsYmFjayA9IFdURk1vdmUoY2Fs
bGJhY2spXSAoQVBJOjpTZXJpYWxpemVkU2NyaXB0VmFsdWUqLCBib29sLCBjb25zdCBFeGNlcHRp
b25EZXRhaWxzJiwgU2NyaXB0VmFsdWVDYWxsYmFjazo6RXJyb3IpIHsKLSAgICAgICAgICAgIGNh
bGxiYWNrKCk7CisgICAgaWYgKGF1dG8qIGZyYW1lID0gcGFnZS0+cHJvY2VzcygpLndlYkZyYW1l
KG1fZnJhbWVJRCkpIHsKKyAgICAgICAgcGFnZS0+c2V0U2hvdWxkU3VwcHJlc3NTT0F1dGhvcml6
YXRpb25Jbk5leHROYXZpZ2F0aW9uUG9saWN5RGVjaXNpb24oKTsKKyAgICAgICAgYXV0byYgdXJs
ID0gbV9yZXF1ZXN0c1RvTG9hZC5maXJzdCgpLmZpcnN0OworICAgICAgICBXVEY6OnN3aXRjaE9u
KG1fcmVxdWVzdHNUb0xvYWQuZmlyc3QoKS5zZWNvbmQsIFsmXShjb25zdCBWZWN0b3I8dWludDhf
dD4mIGRhdGEpIHsKKyAgICAgICAgICAgIGZyYW1lLT5sb2FkRGF0YShJUEM6OkRhdGFSZWZlcmVu
Y2UoZGF0YSksICJ0ZXh0L2h0bWwiLCAiVVRGLTgiLCB1cmwpOworICAgICAgICB9LCBbJl0oY29u
c3QgU3RyaW5nJiByZWZlcnJlcikgeworICAgICAgICAgICAgZnJhbWUtPmxvYWRVUkwodXJsLCBy
ZWZlcnJlcik7CiAgICAgICAgIH0pOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0ZyYW1lTG9hZFN0YXRlLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0ZyYW1lTG9hZFN0YXRlLmNwcAppbmRleCAyNmYyYTA5ZTlmZDhmZjBhYTRmZjg0NDcyOTg3OGMy
NmQ1ODZjZjVlLi5jNjFiZWQ4MWQwOTI4NDYzMmJmMjk2NWVkMmM5OWIwYzZmZTQwMWEzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9GcmFtZUxvYWRTdGF0ZS5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvRnJhbWVMb2FkU3RhdGUuY3BwCkBAIC0zMiw2ICszMiwx
OCBAQCBGcmFtZUxvYWRTdGF0ZTo6fkZyYW1lTG9hZFN0YXRlKCkKIHsKIH0KIAordm9pZCBGcmFt
ZUxvYWRTdGF0ZTo6YWRkT2JzZXJ2ZXIoT2JzZXJ2ZXImIG9ic2VydmVyKQoreworICAgIGF1dG8g
cmVzdWx0ID0gbV9vYnNlcnZlcnMuYWRkKG9ic2VydmVyKTsKKyAgICBBU1NFUlRfVU5VU0VEKHJl
c3VsdCwgcmVzdWx0LmlzTmV3RW50cnkpOworfQorCit2b2lkIEZyYW1lTG9hZFN0YXRlOjpyZW1v
dmVPYnNlcnZlcihPYnNlcnZlciYgb2JzZXJ2ZXIpCit7CisgICAgYXV0byByZXN1bHQgPSBtX29i
c2VydmVycy5yZW1vdmUob2JzZXJ2ZXIpOworICAgIEFTU0VSVF9VTlVTRUQocmVzdWx0LCByZXN1
bHQpOworfQorCiB2b2lkIEZyYW1lTG9hZFN0YXRlOjpkaWRTdGFydFByb3Zpc2lvbmFsTG9hZChj
b25zdCBVUkwmIHVybCkKIHsKICAgICBBU1NFUlQobV9wcm92aXNpb25hbFVSTC5pc0VtcHR5KCkp
OwpAQCAtNzcsNiArODksMTIgQEAgdm9pZCBGcmFtZUxvYWRTdGF0ZTo6ZGlkRmluaXNoTG9hZCgp
CiAgICAgQVNTRVJUKG1fcHJvdmlzaW9uYWxVUkwuaXNFbXB0eSgpKTsKIAogICAgIG1fc3RhdGUg
PSBTdGF0ZTo6RmluaXNoZWQ7CisKKyAgICBWZWN0b3I8T2JzZXJ2ZXIqPiBvYnNlcnZlcnNDb3B5
OworICAgIGZvciAoYXV0byYgb2JzZXJ2ZXIgOiBtX29ic2VydmVycykKKyAgICAgICAgb2JzZXJ2
ZXJzQ29weS5hcHBlbmQoJm9ic2VydmVyKTsKKyAgICBmb3IgKGF1dG8qIG9ic2VydmVyIDogb2Jz
ZXJ2ZXJzQ29weSkKKyAgICAgICAgb2JzZXJ2ZXItPmRpZEZpbmlzaExvYWQoKTsKIH0KIAogdm9p
ZCBGcmFtZUxvYWRTdGF0ZTo6ZGlkRmFpbExvYWQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvRnJhbWVMb2FkU3RhdGUuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Zy
YW1lTG9hZFN0YXRlLmgKaW5kZXggYzM0ZTI3ZGYxODhhYmU3NmI1OTU3YzgzNmVlYzc4YjZjOTc5
Yzg0NS4uZjI5NzdlYTVmYjE0NTUzMTkyYmZhYjc3ZjE2NGMzOGIyODg0ZTIxYiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvRnJhbWVMb2FkU3RhdGUuaAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9GcmFtZUxvYWRTdGF0ZS5oCkBAIC0yNiw2ICsyNiw3IEBACiAjcHJh
Z21hIG9uY2UKIAogI2luY2x1ZGUgPHd0Zi9VUkwuaD4KKyNpbmNsdWRlIDx3dGYvV2Vha0hhc2hT
ZXQuaD4KIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKQEAgLTM5LDYgKzQwLDE2IEBAIHB1YmxpYzoK
ICAgICAgICAgRmluaXNoZWQKICAgICB9OwogCisgICAgY2xhc3MgT2JzZXJ2ZXIgOiBwdWJsaWMg
Q2FuTWFrZVdlYWtQdHI8T2JzZXJ2ZXI+IHsKKyAgICBwdWJsaWM6CisgICAgICAgIHZpcnR1YWwg
fk9ic2VydmVyKCkgPSBkZWZhdWx0OworCisgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRGaW5pc2hM
b2FkKCkgPSAwOworICAgIH07CisKKyAgICB2b2lkIGFkZE9ic2VydmVyKE9ic2VydmVyJik7Cisg
ICAgdm9pZCByZW1vdmVPYnNlcnZlcihPYnNlcnZlciYpOworCiAgICAgdm9pZCBkaWRTdGFydFBy
b3Zpc2lvbmFsTG9hZChjb25zdCBVUkwmKTsKICAgICB2b2lkIGRpZEV4cGxpY2l0T3Blbihjb25z
dCBVUkwmKTsKICAgICB2b2lkIGRpZFJlY2VpdmVTZXJ2ZXJSZWRpcmVjdEZvclByb3Zpc2lvbmFs
TG9hZChjb25zdCBVUkwmKTsKQEAgLTY0LDYgKzc1LDcgQEAgcHJpdmF0ZToKICAgICBVUkwgbV9w
cm92aXNpb25hbFVSTDsKICAgICBVUkwgbV91bnJlYWNoYWJsZVVSTDsKICAgICBVUkwgbV9sYXN0
VW5yZWFjaGFibGVVUkw7CisgICAgV2Vha0hhc2hTZXQ8T2JzZXJ2ZXI+IG1fb2JzZXJ2ZXJzOwog
fTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQ
cm9jZXNzUG9vbC5jcHAKaW5kZXggOGU0NjMwYmRhM2JhYjU4MmI2ZjVkNjRlZDU4OGY2YzBkMzBi
NTlkNi4uOTdkOTM4YzgwYjNkNzQxYWQ1ZGZhMmVhZDRjYjk0N2QyMWE4MzcxMSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcApAQCAtNDEsNiArNDEsNyBAQAog
I2luY2x1ZGUgIkRvd25sb2FkUHJveHlNZXNzYWdlcy5oIgogI2luY2x1ZGUgIkdhbWVwYWREYXRh
LmgiCiAjaW5jbHVkZSAiSGlnaFBlcmZvcm1hbmNlR3JhcGhpY3NVc2FnZVNhbXBsZXIuaCIKKyNp
bmNsdWRlICJMZWdhY3lHbG9iYWxTZXR0aW5ncy5oIgogI2luY2x1ZGUgIkxvZ0luaXRpYWxpemF0
aW9uLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNzQ3Jl
YXRpb25QYXJhbWV0ZXJzLmgiCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9D
aGFuZ2VMb2cKaW5kZXggNmM4OTY5ODhhN2Q4YTUyYThmNDlkMzM5OGM2MmQ5Y2Q1OGIzNWI1Ny4u
YjMzMTYxOWI4NjZhMjk4MTMyMTVjNDA4NDcyOWNjMTZjOGU1MGFkMyAxMDA2NDQKLS0tIGEvVG9v
bHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE4IEBACisyMDE5
LTA5LTIwICBKaWV3ZW4gVGFuICA8amlld2VuX3RhbkBhcHBsZS5jb20+CisKKyAgICAgICAgU3Vi
RnJhbWVTT0F1dGhvcml6YXRpb25TZXNzaW9uIHNob3VsZCBlbnN1cmUgbWVzc2FnZXMgYXJlIHBv
c3RlZCBpbiB0aGUgcmlnaHQgb3JkZXIgdG8gdGhlIHBhcmVudCBmcmFtZQorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAyMDYxCisgICAgICAgIDxyZGFy
Oi8vcHJvYmxlbS81NTQ4NTY2Nj4KKworICAgICAgICBSZXZpZXdlZCBieSBZb3Vlbm4gRmFibGV0
LgorCisgICAgICAgIEFkZHMgdGVzdHMgdGhhdCBjaGVjayB0aGUgb3JkZXIgb2YgbWVzc2FnZXMg
cG9zdGVkIGJ5IFN1YkZyYW1lU09BdXRob3JpemF0aW9uU2Vzc2lvbi4KKworICAgICAgICAqIFRl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvVGVzdFNPQXV0aG9yaXphdGlvbi5tbToKKyAg
ICAgICAgKC1bVGVzdFNPQXV0aG9yaXphdGlvblNjcmlwdE1lc3NhZ2VIYW5kbGVyIHVzZXJDb250
ZW50Q29udHJvbGxlcjpkaWRSZWNlaXZlU2NyaXB0TWVzc2FnZTpdKToKKyAgICAgICAgKHJlc2V0
U3RhdGUpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVCk6CisKIDIwMTktMDktMjUgIEFs
ZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBSZW1v
dmUgZHVwbGljYXRlIFdlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0aW9uIGNvcHlpbmcgY29kZQpk
aWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9UZXN0U09B
dXRob3JpemF0aW9uLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9U
ZXN0U09BdXRob3JpemF0aW9uLm1tCmluZGV4IGQwZTJlN2RiYWFjODQ4OTkwNGNhZDdjMThmY2Fh
ZGM3MjkzYTIxYWIuLmQ2MDdjNzZiYjEwMThmMzk2MThjODA4NGJmMDNmN2RjZTk5N2NjODEgMTAw
NjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvVGVzdFNPQXV0
aG9yaXphdGlvbi5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29h
L1Rlc3RTT0F1dGhvcml6YXRpb24ubW0KQEAgLTUzLDYgKzUzLDcgQEAgc3RhdGljIGJvb2wgdWlT
aG93ZWQgPSBmYWxzZTsKIHN0YXRpYyBib29sIG5ld1dpbmRvd0NyZWF0ZWQgPSBmYWxzZTsKIHN0
YXRpYyBib29sIGhhdmVIdHRwQm9keSA9IGZhbHNlOwogc3RhdGljIGJvb2wgbmF2aWdhdGlvblBv
bGljeURlY2lkZWQgPSBmYWxzZTsKK3N0YXRpYyBib29sIGFsbE1lc3NhZ2VzUmVjZWl2ZWQgPSBm
YWxzZTsKIHN0YXRpYyBTdHJpbmcgZmluYWxVUkw7CiBzdGF0aWMgU09BdXRob3JpemF0aW9uKiBn
QXV0aG9yaXphdGlvbjsKIHN0YXRpYyBpZDxTT0F1dGhvcml6YXRpb25EZWxlZ2F0ZT4gZ0RlbGVn
YXRlOwpAQCAtMjQxLDYgKzI0MiwzNyBAQCAtICh2b2lkKXZpZXdEaWREaXNhcHBlYXIKIAogQGVu
ZAogCitAaW50ZXJmYWNlIFRlc3RTT0F1dGhvcml6YXRpb25TY3JpcHRNZXNzYWdlSGFuZGxlciA6
IE5TT2JqZWN0IDxXS1NjcmlwdE1lc3NhZ2VIYW5kbGVyPgorQGVuZAorCitAaW1wbGVtZW50YXRp
b24gVGVzdFNPQXV0aG9yaXphdGlvblNjcmlwdE1lc3NhZ2VIYW5kbGVyIHsKKyAgICBSZXRhaW5Q
dHI8TlNNdXRhYmxlQXJyYXk+IF9tZXNzYWdlczsKK30KKworLSAodm9pZCl1c2VyQ29udGVudENv
bnRyb2xsZXI6KFdLVXNlckNvbnRlbnRDb250cm9sbGVyICopdXNlckNvbnRlbnRDb250cm9sbGVy
IGRpZFJlY2VpdmVTY3JpcHRNZXNzYWdlOihXS1NjcmlwdE1lc3NhZ2UgKiltZXNzYWdlCit7Cisg
ICAgaWYgKCFfbWVzc2FnZXMpCisgICAgICAgIF9tZXNzYWdlcyA9IGFkb3B0TlMoW1tOU011dGFi
bGVBcnJheSBhbGxvY10gaW5pdF0pOworICAgIFtfbWVzc2FnZXMgYWRkT2JqZWN0Om1lc3NhZ2Uu
Ym9keV07CisKKyAgICBpZiAoW21lc3NhZ2UuYm9keSBpc0VxdWFsOkAiIl0pIHsKKyAgICAgICAg
YWxsTWVzc2FnZXNSZWNlaXZlZCA9IHRydWU7CisgICAgICAgIEVYUEVDVF9FUShbX21lc3NhZ2Vz
IGNvdW50XSwgNXUpOworICAgICAgICBFWFBFQ1RfV0tfU1RSRVEoIlNPQXV0aG9yaXphdGlvbkRp
ZFN0YXJ0IiwgW19tZXNzYWdlcyBvYmplY3RBdEluZGV4OjFdKTsKKyAgICAgICAgRVhQRUNUX1dL
X1NUUkVRKCJTT0F1dGhvcml6YXRpb25EaWRDYW5jZWwiLCBbX21lc3NhZ2VzIG9iamVjdEF0SW5k
ZXg6M10pOworICAgICAgICBFWFBFQ1RfV0tfU1RSRVEoIiIsIFtfbWVzc2FnZXMgb2JqZWN0QXRJ
bmRleDo0XSk7CisgICAgfQorCisgICAgaWYgKFttZXNzYWdlLmJvZHkgaXNFcXVhbDpAIkhlbGxv
LiJdKSB7CisgICAgICAgIGFsbE1lc3NhZ2VzUmVjZWl2ZWQgPSB0cnVlOworICAgICAgICBFWFBF
Q1RfRVEoW19tZXNzYWdlcyBjb3VudF0sIDR1KTsKKyAgICAgICAgRVhQRUNUX1dLX1NUUkVRKCJT
T0F1dGhvcml6YXRpb25EaWRTdGFydCIsIFtfbWVzc2FnZXMgb2JqZWN0QXRJbmRleDoxXSk7Cisg
ICAgICAgIEVYUEVDVF9XS19TVFJFUSgiSGVsbG8uIiwgW19tZXNzYWdlcyBvYmplY3RBdEluZGV4
OjNdKTsKKyAgICB9Cit9CisKK0BlbmQKKwogc3RhdGljIGJvb2wgb3ZlcnJpZGVDYW5QZXJmb3Jt
QXV0aG9yaXphdGlvbldpdGhVUkwoaWQsIFNFTCwgTlNVUkwgKnVybCwgTlNJbnRlZ2VyKQogewog
ICAgIGlmICghW3VybC5sYXN0UGF0aENvbXBvbmVudCBpc0VxdWFsOkAic2ltcGxlLmh0bWwiXSAm
JiAhW3VybC5ob3N0IGlzRXF1YWw6QCJ3d3cuZXhhbXBsZS5jb20iXSAmJiAhW3VybC5sYXN0UGF0
aENvbXBvbmVudCBpc0VxdWFsOkAiR2V0U2Vzc2lvbkNvb2tpZS5odG1sIl0pCkBAIC0yOTIsNiAr
MzI0LDcgQEAgc3RhdGljIHZvaWQgcmVzZXRTdGF0ZSgpCiAgICAgbmV3V2luZG93Q3JlYXRlZCA9
IGZhbHNlOwogICAgIGhhdmVIdHRwQm9keSA9IGZhbHNlOwogICAgIG5hdmlnYXRpb25Qb2xpY3lE
ZWNpZGVkID0gZmFsc2U7CisgICAgYWxsTWVzc2FnZXNSZWNlaXZlZCA9IGZhbHNlOwogICAgIGZp
bmFsVVJMID0gZW1wdHlTdHJpbmcoKTsKICAgICBnQXV0aG9yaXphdGlvbiA9IG51bGxwdHI7CiAg
ICAgZ0RlbGVnYXRlID0gbnVsbHB0cjsKQEAgLTIyMjAsNiArMjI1Myw2MCBAQCBURVNUKFNPQXV0
aG9yaXphdGlvblN1YkZyYW1lLCBJbnRlcmNlcHRpb25FcnJvcldpdGhSZWZlcnJlcikKICAgICBb
d2ViVmlldyB3YWl0Rm9yTWVzc2FnZTooaWQpbWFrZVN0cmluZygiUmVmZXJyZXI6ICIsIG9yaWdp
biwgIi8iKV07IC8vIFJlZmVycmVyIHBvbGljeSByZXF1aXJlcyAnLycgYWZ0ZXIgb3JpZ2luLgog
fQogCitURVNUKFNPQXV0aG9yaXphdGlvblN1YkZyYW1lLCBJbnRlcmNlcHRpb25FcnJvck1lc3Nh
Z2VPcmRlcikKK3sKKyAgICByZXNldFN0YXRlKCk7CisgICAgQ2xhc3NNZXRob2RTd2l6emxlciBz
d2l6emxlcjEoUEFMOjpnZXRTT0F1dGhvcml6YXRpb25DbGFzcygpLCBAc2VsZWN0b3IoY2FuUGVy
Zm9ybUF1dGhvcml6YXRpb25XaXRoVVJMOnJlc3BvbnNlQ29kZTopLCByZWludGVycHJldF9jYXN0
PElNUD4ob3ZlcnJpZGVDYW5QZXJmb3JtQXV0aG9yaXphdGlvbldpdGhVUkwpKTsKKyAgICBJbnN0
YW5jZU1ldGhvZFN3aXp6bGVyIHN3aXp6bGVyMihQQUw6OmdldFNPQXV0aG9yaXphdGlvbkNsYXNz
KCksIEBzZWxlY3RvcihzZXREZWxlZ2F0ZTopLCByZWludGVycHJldF9jYXN0PElNUD4ob3ZlcnJp
ZGVTZXREZWxlZ2F0ZSkpOworICAgIEluc3RhbmNlTWV0aG9kU3dpenpsZXIgc3dpenpsZXIzKFBB
TDo6Z2V0U09BdXRob3JpemF0aW9uQ2xhc3MoKSwgQHNlbGVjdG9yKGJlZ2luQXV0aG9yaXphdGlv
bldpdGhVUkw6aHR0cEhlYWRlcnM6aHR0cEJvZHk6KSwgcmVpbnRlcnByZXRfY2FzdDxJTVA+KG92
ZXJyaWRlQmVnaW5BdXRob3JpemF0aW9uV2l0aFVSTCkpOworICAgIENsYXNzTWV0aG9kU3dpenps
ZXIgc3dpenpsZXI0KFtBS0F1dGhvcml6YXRpb25Db250cm9sbGVyIGNsYXNzXSwgQHNlbGVjdG9y
KGlzVVJMRnJvbUFwcGxlT3duZWREb21haW46KSwgcmVpbnRlcnByZXRfY2FzdDxJTVA+KG92ZXJy
aWRlSXNVUkxGcm9tQXBwbGVPd25lZERvbWFpbikpOworCisgICAgUmV0YWluUHRyPE5TVVJMPiBi
YXNlVVJMID0gW1tOU0J1bmRsZSBtYWluQnVuZGxlXSBVUkxGb3JSZXNvdXJjZTpAInNpbXBsZTIi
IHdpdGhFeHRlbnNpb246QCJodG1sIiBzdWJkaXJlY3Rvcnk6QCJUZXN0V2ViS2l0QVBJLnJlc291
cmNlcyJdOworICAgIFJldGFpblB0cjxOU1VSTD4gdGVzdFVSTCA9IFtbTlNCdW5kbGUgbWFpbkJ1
bmRsZV0gVVJMRm9yUmVzb3VyY2U6QCJHZXRTZXNzaW9uQ29va2llIiB3aXRoRXh0ZW5zaW9uOkAi
aHRtbCIgc3ViZGlyZWN0b3J5OkAiVGVzdFdlYktpdEFQSS5yZXNvdXJjZXMiXTsKKyAgICBhdXRv
IHRlc3RIdG1sID0gZ2VuZXJhdGVIdG1sKHBhcmVudFRlbXBsYXRlLCB0ZXN0VVJMLmdldCgpLmFi
c29sdXRlU3RyaW5nKTsKKworICAgIGF1dG8gY29uZmlndXJhdGlvbiA9IGFkb3B0TlMoW1tXS1dl
YlZpZXdDb25maWd1cmF0aW9uIGFsbG9jXSBpbml0XSk7CisgICAgYXV0byBtZXNzYWdlSGFuZGxl
ciA9IGFkb3B0TlMoW1tUZXN0U09BdXRob3JpemF0aW9uU2NyaXB0TWVzc2FnZUhhbmRsZXIgYWxs
b2NdIGluaXRdKTsKKyAgICBbW2NvbmZpZ3VyYXRpb24gdXNlckNvbnRlbnRDb250cm9sbGVyXSBh
ZGRTY3JpcHRNZXNzYWdlSGFuZGxlcjptZXNzYWdlSGFuZGxlci5nZXQoKSBuYW1lOkAidGVzdEhh
bmRsZXIiXTsKKworICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFs
bG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApIGNvbmZpZ3VyYXRp
b246Y29uZmlndXJhdGlvbi5nZXQoKV0pOworICAgIGF1dG8gZGVsZWdhdGUgPSBhZG9wdE5TKFtb
VGVzdFNPQXV0aG9yaXphdGlvbkRlbGVnYXRlIGFsbG9jXSBpbml0XSk7CisgICAgY29uZmlndXJl
U09BdXRob3JpemF0aW9uV2ViVmlldyh3ZWJWaWV3LmdldCgpLCBkZWxlZ2F0ZS5nZXQoKSk7CisK
KyAgICBbd2ViVmlldyBsb2FkSFRNTFN0cmluZzp0ZXN0SHRtbCBiYXNlVVJMOmJhc2VVUkwuZ2V0
KCldOworICAgIFV0aWw6OnJ1bigmYXV0aG9yaXphdGlvblBlcmZvcm1lZCk7CisgICAgW2dEZWxl
Z2F0ZSBhdXRob3JpemF0aW9uOmdBdXRob3JpemF0aW9uIGRpZENvbXBsZXRlV2l0aEVycm9yOmFk
b3B0TlMoW1tOU0Vycm9yIGFsbG9jXSBpbml0V2l0aERvbWFpbjpOU0NvY29hRXJyb3JEb21haW4g
Y29kZTowIHVzZXJJbmZvOm5pbF0pLmdldCgpXTsKKyAgICBVdGlsOjpydW4oJmFsbE1lc3NhZ2Vz
UmVjZWl2ZWQpOworfQorCitURVNUKFNPQXV0aG9yaXphdGlvblN1YkZyYW1lLCBJbnRlcmNlcHRp
b25TdWNjZXNzTWVzc2FnZU9yZGVyKQoreworICAgIHJlc2V0U3RhdGUoKTsKKyAgICBDbGFzc01l
dGhvZFN3aXp6bGVyIHN3aXp6bGVyMShQQUw6OmdldFNPQXV0aG9yaXphdGlvbkNsYXNzKCksIEBz
ZWxlY3RvcihjYW5QZXJmb3JtQXV0aG9yaXphdGlvbldpdGhVUkw6cmVzcG9uc2VDb2RlOiksIHJl
aW50ZXJwcmV0X2Nhc3Q8SU1QPihvdmVycmlkZUNhblBlcmZvcm1BdXRob3JpemF0aW9uV2l0aFVS
TCkpOworICAgIEluc3RhbmNlTWV0aG9kU3dpenpsZXIgc3dpenpsZXIyKFBBTDo6Z2V0U09BdXRo
b3JpemF0aW9uQ2xhc3MoKSwgQHNlbGVjdG9yKHNldERlbGVnYXRlOiksIHJlaW50ZXJwcmV0X2Nh
c3Q8SU1QPihvdmVycmlkZVNldERlbGVnYXRlKSk7CisgICAgSW5zdGFuY2VNZXRob2RTd2l6emxl
ciBzd2l6emxlcjMoUEFMOjpnZXRTT0F1dGhvcml6YXRpb25DbGFzcygpLCBAc2VsZWN0b3IoYmVn
aW5BdXRob3JpemF0aW9uV2l0aFVSTDpodHRwSGVhZGVyczpodHRwQm9keTopLCByZWludGVycHJl
dF9jYXN0PElNUD4ob3ZlcnJpZGVCZWdpbkF1dGhvcml6YXRpb25XaXRoVVJMKSk7CisgICAgQ2xh
c3NNZXRob2RTd2l6emxlciBzd2l6emxlcjQoW0FLQXV0aG9yaXphdGlvbkNvbnRyb2xsZXIgY2xh
c3NdLCBAc2VsZWN0b3IoaXNVUkxGcm9tQXBwbGVPd25lZERvbWFpbjopLCByZWludGVycHJldF9j
YXN0PElNUD4ob3ZlcnJpZGVJc1VSTEZyb21BcHBsZU93bmVkRG9tYWluKSk7CisKKyAgICBhdXRv
IHRlc3RVUkwgPSBVUkwoVVJMKCksICJodHRwOi8vd3d3LmV4YW1wbGUuY29tIik7CisgICAgYXV0
byB0ZXN0SHRtbCA9IGdlbmVyYXRlSHRtbChwYXJlbnRUZW1wbGF0ZSwgdGVzdFVSTC5zdHJpbmco
KSk7CisKKyAgICBhdXRvIGNvbmZpZ3VyYXRpb24gPSBhZG9wdE5TKFtbV0tXZWJWaWV3Q29uZmln
dXJhdGlvbiBhbGxvY10gaW5pdF0pOworICAgIGF1dG8gbWVzc2FnZUhhbmRsZXIgPSBhZG9wdE5T
KFtbVGVzdFNPQXV0aG9yaXphdGlvblNjcmlwdE1lc3NhZ2VIYW5kbGVyIGFsbG9jXSBpbml0XSk7
CisgICAgW1tjb25maWd1cmF0aW9uIHVzZXJDb250ZW50Q29udHJvbGxlcl0gYWRkU2NyaXB0TWVz
c2FnZUhhbmRsZXI6bWVzc2FnZUhhbmRsZXIuZ2V0KCkgbmFtZTpAInRlc3RIYW5kbGVyIl07CisK
KyAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdp
dGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKSBjb25maWd1cmF0aW9uOmNvbmZpZ3Vy
YXRpb24uZ2V0KCldKTsKKyAgICBhdXRvIGRlbGVnYXRlID0gYWRvcHROUyhbW1Rlc3RTT0F1dGhv
cml6YXRpb25EZWxlZ2F0ZSBhbGxvY10gaW5pdF0pOworICAgIGNvbmZpZ3VyZVNPQXV0aG9yaXph
dGlvbldlYlZpZXcod2ViVmlldy5nZXQoKSwgZGVsZWdhdGUuZ2V0KCkpOworCisgICAgW3dlYlZp
ZXcgbG9hZEhUTUxTdHJpbmc6dGVzdEh0bWwgYmFzZVVSTDpuaWxdOworICAgIFV0aWw6OnJ1bigm
YXV0aG9yaXphdGlvblBlcmZvcm1lZCk7CisKKyAgICBhdXRvIHJlc3BvbnNlID0gYWRvcHROUyhb
W05TSFRUUFVSTFJlc3BvbnNlIGFsbG9jXSBpbml0V2l0aFVSTDp0ZXN0VVJMIHN0YXR1c0NvZGU6
MjAwIEhUVFBWZXJzaW9uOkAiSFRUUC8xLjEiIGhlYWRlckZpZWxkczpuaWxdKTsKKyAgICBhdXRv
IGlmcmFtZUh0bWxDU3RyaW5nID0gZ2VuZXJhdGVIdG1sKGlmcmFtZVRlbXBsYXRlLCAiIikudXRm
OCgpOworICAgIFtnRGVsZWdhdGUgYXV0aG9yaXphdGlvbjpnQXV0aG9yaXphdGlvbiBkaWRDb21w
bGV0ZVdpdGhIVFRQUmVzcG9uc2U6cmVzcG9uc2UuZ2V0KCkgaHR0cEJvZHk6YWRvcHROUyhbW05T
RGF0YSBhbGxvY10gaW5pdFdpdGhCeXRlczppZnJhbWVIdG1sQ1N0cmluZy5kYXRhKCkgbGVuZ3Ro
OmlmcmFtZUh0bWxDU3RyaW5nLmxlbmd0aCgpXSkuZ2V0KCldOworICAgIFV0aWw6OnJ1bigmYWxs
TWVzc2FnZXNSZWNlaXZlZCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkKIAog
I2VuZGlmCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>