<?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>216199</bug_id>
          
          <creation_ts>2020-09-04 16:39:11 -0700</creation_ts>
          <short_desc>Remove storage WorkQueue in NetworkProcess</short_desc>
          <delta_ts>2020-09-08 14:53:23 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=216285</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Sihui Liu">sihui_liu</reporter>
          <assigned_to name="Sihui Liu">sihui_liu</assigned_to>
          <cc>achristensen</cc>
    
    <cc>alecflett</cc>
    
    <cc>beidson</cc>
    
    <cc>cdumez</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>jsbell</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>youennf</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1685918</commentid>
    <comment_count>0</comment_count>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2020-09-04 16:39:11 -0700</bug_when>
    <thetext>...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1685923</commentid>
    <comment_count>1</comment_count>
      <attachid>408045</attachid>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2020-09-04 16:51:29 -0700</bug_when>
    <thetext>Created attachment 408045
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1686605</commentid>
    <comment_count>2</comment_count>
      <attachid>408045</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2020-09-08 10:12:52 -0700</bug_when>
    <thetext>Comment on attachment 408045
Patch

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

&gt; Source/WebCore/Modules/indexeddb/server/IDBServer.cpp:544
&gt; +void IDBServer::collectOriginsForVersion(const String&amp; versionPath, HashSet&lt;WebCore::SecurityOriginData&gt;&amp; securityOrigins) const

Can we make it a static function instead of a method?

&gt; Source/WebKit/NetworkProcess/IndexedDB/WebIDBServer.cpp:69
&gt; +        LockHolder locker(m_server-&gt;lock());

Shouldn&apos;t we lock in getOrigins instead?

&gt; Source/WebKit/NetworkProcess/NetworkProcess.cpp:1560
&gt; +                callbackAggregator-&gt;m_websiteData.entries.append({ origins.takeAny(), WebsiteDataType::IndexedDBDatabases, 0 });

It seems we could return a Vector.
We added an optimisation for Vector::isolatedCopy() const &amp;&amp; which would be nice as well to use.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1686616</commentid>
    <comment_count>3</comment_count>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2020-09-08 10:35:37 -0700</bug_when>
    <thetext>(In reply to youenn fablet from comment #2)
&gt; Comment on attachment 408045 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=408045&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/Modules/indexeddb/server/IDBServer.cpp:544
&gt; &gt; +void IDBServer::collectOriginsForVersion(const String&amp; versionPath, HashSet&lt;WebCore::SecurityOriginData&gt;&amp; securityOrigins) const
&gt; 
&gt; Can we make it a static function instead of a method?
&gt; 
Sure.

&gt; &gt; Source/WebKit/NetworkProcess/IndexedDB/WebIDBServer.cpp:69
&gt; &gt; +        LockHolder locker(m_server-&gt;lock());
&gt; 
&gt; Shouldn&apos;t we lock in getOrigins instead?
&gt; 
No, we hold this lock when performing task on IDB thread; so if we acquire this lock on the main thread, background thread will be stopped.

&gt; &gt; Source/WebKit/NetworkProcess/NetworkProcess.cpp:1560
&gt; &gt; +                callbackAggregator-&gt;m_websiteData.entries.append({ origins.takeAny(), WebsiteDataType::IndexedDBDatabases, 0 });
&gt; 
&gt; It seems we could return a Vector.
&gt; We added an optimisation for Vector::isolatedCopy() const &amp;&amp; which would be
&gt; nice as well to use.

Where do you suggest using Vector? You mean appendVector() here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1686622</commentid>
    <comment_count>4</comment_count>
      <attachid>408045</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2020-09-08 10:42:40 -0700</bug_when>
    <thetext>Comment on attachment 408045
Patch

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

&gt;&gt;&gt; Source/WebKit/NetworkProcess/IndexedDB/WebIDBServer.cpp:69
&gt;&gt;&gt; +        LockHolder locker(m_server-&gt;lock());
&gt;&gt; 
&gt;&gt; Shouldn&apos;t we lock in getOrigins instead?
&gt; 
&gt; No, we hold this lock when performing task on IDB thread; so if we acquire this lock on the main thread, background thread will be stopped.

I meant in IDBServer::getOrigins, not WebIDBServer::getOrigins.
You are calling m_server-&gt;lock() and then m_server-&gt;getOrigins(), it seems it could be optimised

&gt;&gt;&gt; Source/WebKit/NetworkProcess/NetworkProcess.cpp:1560
&gt;&gt;&gt; +                callbackAggregator-&gt;m_websiteData.entries.append({ origins.takeAny(), WebsiteDataType::IndexedDBDatabases, 0 });
&gt;&gt; 
&gt;&gt; It seems we could return a Vector.
&gt;&gt; We added an optimisation for Vector::isolatedCopy() const &amp;&amp; which would be nice as well to use.
&gt; 
&gt; Where do you suggest using Vector? You mean appendVector() here?

If getOrigins returns a Vector, we could use the Vector optimised of crossThreadCopy() and potentially use map here.
We might still need a HashSet to remove duplicates.
Recreating a HashSet through crossThreadCopy() is probably less efficient than a Vector created from a HashSet.
Or maybe we could try to optimise HashSet isolatedCopy in cases where all entries are already isolated.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1686664</commentid>
    <comment_count>5</comment_count>
      <attachid>408045</attachid>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2020-09-08 12:11:05 -0700</bug_when>
    <thetext>Comment on attachment 408045
Patch

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

&gt;&gt;&gt;&gt; Source/WebKit/NetworkProcess/IndexedDB/WebIDBServer.cpp:69
&gt;&gt;&gt;&gt; +        LockHolder locker(m_server-&gt;lock());
&gt;&gt;&gt; 
&gt;&gt;&gt; Shouldn&apos;t we lock in getOrigins instead?
&gt;&gt; 
&gt;&gt; No, we hold this lock when performing task on IDB thread; so if we acquire this lock on the main thread, background thread will be stopped.
&gt; 
&gt; I meant in IDBServer::getOrigins, not WebIDBServer::getOrigins.
&gt; You are calling m_server-&gt;lock() and then m_server-&gt;getOrigins(), it seems it could be optimised

I see, yeah, that makes sense, but this is how we do all the tasks right now: holding lock in WebIDBServer and verify lock is held in IDBServer, so I will keep it this way for now.

&gt;&gt;&gt;&gt; Source/WebKit/NetworkProcess/NetworkProcess.cpp:1560
&gt;&gt;&gt;&gt; +                callbackAggregator-&gt;m_websiteData.entries.append({ origins.takeAny(), WebsiteDataType::IndexedDBDatabases, 0 });
&gt;&gt;&gt; 
&gt;&gt;&gt; It seems we could return a Vector.
&gt;&gt;&gt; We added an optimisation for Vector::isolatedCopy() const &amp;&amp; which would be nice as well to use.
&gt;&gt; 
&gt;&gt; Where do you suggest using Vector? You mean appendVector() here?
&gt; 
&gt; If getOrigins returns a Vector, we could use the Vector optimised of crossThreadCopy() and potentially use map here.
&gt; We might still need a HashSet to remove duplicates.
&gt; Recreating a HashSet through crossThreadCopy() is probably less efficient than a Vector created from a HashSet.
&gt; Or maybe we could try to optimise HashSet isolatedCopy in cases where all entries are already isolated.

I see, so you suggest that IDBServer::getOrigins() returns Vector and WebIDBServer::getOrigins makes a crossThreadCopy of the Vector? 
In NetworkProcess, we have filterForRegistrableDomains that takes HashSet, so seems it&apos;s more convenient to use HashSet there and as you said, maybe optimize isolatedCopy of HashSet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1686668</commentid>
    <comment_count>6</comment_count>
      <attachid>408253</attachid>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2020-09-08 12:14:48 -0700</bug_when>
    <thetext>Created attachment 408253
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1686680</commentid>
    <comment_count>7</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-09-08 12:37:47 -0700</bug_when>
    <thetext>Committed r266742: &lt;https://trac.webkit.org/changeset/266742&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 408253.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1686681</commentid>
    <comment_count>8</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-09-08 12:38:19 -0700</bug_when>
    <thetext>&lt;rdar://problem/68524066&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>408045</attachid>
            <date>2020-09-04 16:51:29 -0700</date>
            <delta_ts>2020-09-08 12:14:46 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-216199-20200904165129.patch</filename>
            <type>text/plain</type>
            <size>18830</size>
            <attacher name="Sihui Liu">sihui_liu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY2NjM0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTc4ZmMxMjg2Njg5MmJj
MTlhM2I5MGM3ZTZlYTZlMGIzYjRlNmQwMi4uYzQyOWUyMzk0ZmI4MWJmNjY5MmNmODAxOGI3MmU2
ZjRiMmU1OGIxYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDIwLTA5LTA0ICBTaWh1
aSBMaXUgIDxzaWh1aV9saXVAYXBwbGUuY29tPgorCisgICAgICAgIFJlbW92ZSBzdG9yYWdlIFdv
cmtRdWV1ZSBpbiBOZXR3b3JrUHJvY2VzcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjE2MTk5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgTW92ZSBvcmlnaW4gZmV0Y2hpbmcgY29kZSBmcm9tIE5ldHdvcmtQ
cm9jZXNzIHRvIElEQlNlcnZlci4KKworICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NlcnZl
ci9JREJTZXJ2ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpJREJTZXJ2ZXI6
OmNvbGxlY3RPcmlnaW5zRm9yVmVyc2lvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJREJT
ZXJ2ZXI6OklEQlNlcnZlcjo6Z2V0T3JpZ2lucyBjb25zdCk6CisgICAgICAgICogTW9kdWxlcy9p
bmRleGVkZGIvc2VydmVyL0lEQlNlcnZlci5oOgorCiAyMDIwLTA5LTA0ICBDaHJpcyBEdW1leiAg
PGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgSW1wcm92ZSBpbnRlcnBvbGF0aW9uIGFsZ29y
aXRobSBpbiBPc2NpbGxhdG9yTm9kZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VM
b2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCAxMzcwNjQ0NTU2NGMzMTEyMmNiYTY0
ZDg5MTg3YTQ4MWE0YmM0NzRjLi5mNTRhOWU3NmQzZWVhMDE2MGIwZjliZmMxYjcyNWRjMGRmNmI5
MzkxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2Vi
S2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDI5IEBACisyMDIwLTA5LTA0ICBTaWh1aSBMaXUgIDxz
aWh1aV9saXVAYXBwbGUuY29tPgorCisgICAgICAgIFJlbW92ZSBzdG9yYWdlIFdvcmtRdWV1ZSBp
biBOZXR3b3JrUHJvY2VzcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjE2MTk5CisKKyAgICAgICAgVGhlIG9ubHkgbWVhbmluZ2Z1bCB1c2FnZSBvZiB0
aGlzIFdvcmtRdWV1ZSBpcyBpdGVyYXRpbmcgSW5kZXhlZERCIGRpcmVjdG9yaWVzIGFuZCBjb2xs
ZWN0aW5nIG9yaWdpbnMsIHdoaWxlCisgICAgICAgIHRoZXJlIGNhbiBiZSBzb21lIElEQiB0aHJl
YWQgYWNjZXNzaW5nIHRoZSBzYW1lIGRpcmVjdG9yaWVzLiBUbyByZW1vdmUgdGhlIHJhY2UsIExl
dCdzIGp1c3QgZHJvcCB0aGlzIFdvcmtRdWV1ZQorICAgICAgICBhbmQgZmV0Y2ggb3JpZ2lucyB2
aWEgV2ViSURCU2VydmVyLgorCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvSW5kZXhlZERCL1dl
YklEQlNlcnZlci5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYklEQlNlcnZlcjo6Z2V0T3JpZ2lu
cyk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvSW5kZXhlZERCL1dlYklEQlNlcnZlci5oOgor
ICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcDoKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya1Byb2Nlc3M6OmFkZFNlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2VyKToKKyAg
ICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OmZldGNoV2Vic2l0ZURhdGEpOgorICAgICAg
ICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6ZGVsZXRlQW5kUmVzdHJpY3RXZWJzaXRlRGF0YUZv
clJlZ2lzdHJhYmxlRG9tYWlucyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpy
ZWdpc3RyYWJsZURvbWFpbnNXaXRoV2Vic2l0ZURhdGEpOgorICAgICAgICAoV2ViS2l0OjpOZXR3
b3JrUHJvY2Vzczo6YWRkSW5kZXhlZERhdGFiYXNlU2Vzc2lvbik6CisgICAgICAgIChXZWJLaXQ6
Ok5ldHdvcmtQcm9jZXNzOjphZGRTZXJ2aWNlV29ya2VyU2Vzc2lvbik6CisgICAgICAgIChXZWJL
aXQ6Ok5ldHdvcmtQcm9jZXNzOjplbnN1cmVQYXRoRXhpc3RzKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OnBvc3RTdG9yYWdlVGFzayk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpwZXJmb3JtTmV4dFN0b3JhZ2VUYXNrKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OmNvbGxlY3RJbmRleGVkRGF0
YWJhc2VPcmlnaW5zRm9yVmVyc2lvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Ok5ldHdv
cmtQcm9jZXNzOjppbmRleGVkRGF0YWJhc2VPcmlnaW5zKTogRGVsZXRlZC4KKyAgICAgICAgKiBO
ZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5oOgorCiAyMDIwLTA5LTA0ICBTaWh1aSBMaXUg
IDxzaWh1aV9saXVAYXBwbGUuY29tPgogCiAgICAgICAgIFdlYnBhZ2VzIGZsYXNoIHdoZW4gc3dp
dGNoaW5nIGJldHdlZW4gd2luZG93cwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcnZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmNwcAppbmRleCBlNGI4MmYwYzdiMzZiMjYzNWJh
MDBhMWVmZjRlMTRhYjU2YTk3ODIyLi44NWZjZjYxMDZkY2JjZjQ0ZDMyYTA0MzcwNjVjOTNiYTY1
YTE3YmJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2
ZXIvSURCU2VydmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9z
ZXJ2ZXIvSURCU2VydmVyLmNwcApAQCAtNTQxLDYgKzU0MSwzNyBAQCB2b2lkIElEQlNlcnZlcjo6
Z2V0QWxsRGF0YWJhc2VOYW1lc0FuZFZlcnNpb25zKElEQkNvbm5lY3Rpb25JZGVudGlmaWVyIHNl
cnZlckNvbgogICAgIGNvbm5lY3Rpb24tPmRpZEdldEFsbERhdGFiYXNlTmFtZXNBbmRWZXJzaW9u
cyhyZXF1ZXN0SWRlbnRpZmllciwgV1RGTW92ZShkYXRhYmFzZXMpKTsKIH0KIAordm9pZCBJREJT
ZXJ2ZXI6OmNvbGxlY3RPcmlnaW5zRm9yVmVyc2lvbihjb25zdCBTdHJpbmcmIHZlcnNpb25QYXRo
LCBIYXNoU2V0PFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YT4mIHNlY3VyaXR5T3JpZ2lucykg
Y29uc3QKK3sKKyAgICBmb3IgKGF1dG8mIHRvcE9yaWdpblBhdGggOiBGaWxlU3lzdGVtOjpsaXN0
RGlyZWN0b3J5KHZlcnNpb25QYXRoLCAiKiIpKSB7CisgICAgICAgIGF1dG8gZGF0YWJhc2VJZGVu
dGlmaWVyID0gRmlsZVN5c3RlbTo6cGF0aEdldEZpbGVOYW1lKHRvcE9yaWdpblBhdGgpOworICAg
ICAgICBpZiAoYXV0byBzZWN1cml0eU9yaWdpbiA9IFNlY3VyaXR5T3JpZ2luRGF0YTo6ZnJvbURh
dGFiYXNlSWRlbnRpZmllcihkYXRhYmFzZUlkZW50aWZpZXIpKSB7CisgICAgICAgICAgICBzZWN1
cml0eU9yaWdpbnMuYWRkKFdURk1vdmUoKnNlY3VyaXR5T3JpZ2luKSk7CisgICAgICAgIAorICAg
ICAgICAgICAgZm9yIChhdXRvJiBvcmlnaW5QYXRoIDogRmlsZVN5c3RlbTo6bGlzdERpcmVjdG9y
eSh0b3BPcmlnaW5QYXRoLCAiKiIpKSB7CisgICAgICAgICAgICAgICAgZGF0YWJhc2VJZGVudGlm
aWVyID0gRmlsZVN5c3RlbTo6cGF0aEdldEZpbGVOYW1lKG9yaWdpblBhdGgpOworICAgICAgICAg
ICAgICAgIGlmIChhdXRvIHNlY3VyaXR5T3JpZ2luID0gU2VjdXJpdHlPcmlnaW5EYXRhOjpmcm9t
RGF0YWJhc2VJZGVudGlmaWVyKGRhdGFiYXNlSWRlbnRpZmllcikpCisgICAgICAgICAgICAgICAg
ICAgIHNlY3VyaXR5T3JpZ2lucy5hZGQoV1RGTW92ZSgqc2VjdXJpdHlPcmlnaW4pKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKworSGFzaFNldDxTZWN1cml0eU9yaWdpbkRh
dGE+IElEQlNlcnZlcjo6Z2V0T3JpZ2lucygpIGNvbnN0Cit7CisgICAgQVNTRVJUKCFpc01haW5U
aHJlYWQoKSk7CisgICAgQVNTRVJUKG1fbG9jay5pc0hlbGQoKSk7CisKKyAgICBpZiAobV9kYXRh
YmFzZURpcmVjdG9yeVBhdGguaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4geyB9OworCisgICAg
SGFzaFNldDxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGE+IHNlY3VyaXR5T3JpZ2luczsKKyAg
ICBjb2xsZWN0T3JpZ2luc0ZvclZlcnNpb24oRmlsZVN5c3RlbTo6cGF0aEJ5QXBwZW5kaW5nQ29t
cG9uZW50KG1fZGF0YWJhc2VEaXJlY3RvcnlQYXRoLCAidjAiKSwgc2VjdXJpdHlPcmlnaW5zKTsK
KyAgICBjb2xsZWN0T3JpZ2luc0ZvclZlcnNpb24oRmlsZVN5c3RlbTo6cGF0aEJ5QXBwZW5kaW5n
Q29tcG9uZW50KG1fZGF0YWJhc2VEaXJlY3RvcnlQYXRoLCAidjEiKSwgc2VjdXJpdHlPcmlnaW5z
KTsKKworICAgIHJldHVybiBzZWN1cml0eU9yaWdpbnM7Cit9CisKIHZvaWQgSURCU2VydmVyOjpj
bG9zZUFuZERlbGV0ZURhdGFiYXNlc01vZGlmaWVkU2luY2UoV2FsbFRpbWUgbW9kaWZpY2F0aW9u
VGltZSkKIHsKICAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIuaCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIuaAppbmRleCBkODVkOGVj
YjE3YjdiMmVkYWI3N2VhNDUwNTM3NTllN2UzZTRmZWMzLi5mMGM0MzVhMGNkYjY0ZGFjZGFjNDgz
ZmQ4ZTlmMGY2OTBiZGVhOGU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvc2VydmVyL0lEQlNlcnZlci5oCkBAIC0xMDEsNiArMTAxLDcgQEAgcHVibGljOgog
CiAgICAgc3RkOjp1bmlxdWVfcHRyPElEQkJhY2tpbmdTdG9yZT4gY3JlYXRlQmFja2luZ1N0b3Jl
KGNvbnN0IElEQkRhdGFiYXNlSWRlbnRpZmllciYpOwogCisgICAgV0VCQ09SRV9FWFBPUlQgSGFz
aFNldDxTZWN1cml0eU9yaWdpbkRhdGE+IGdldE9yaWdpbnMoKSBjb25zdDsKICAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIGNsb3NlQW5kRGVsZXRlRGF0YWJhc2VzTW9kaWZpZWRTaW5jZShXYWxsVGlt
ZSk7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBjbG9zZUFuZERlbGV0ZURhdGFiYXNlc0Zvck9y
aWdpbnMoY29uc3QgVmVjdG9yPFNlY3VyaXR5T3JpZ2luRGF0YT4mKTsKICAgICB2b2lkIGNsb3Nl
RGF0YWJhc2VzRm9yT3JpZ2lucyhjb25zdCBWZWN0b3I8U2VjdXJpdHlPcmlnaW5EYXRhPiYsIEZ1
bmN0aW9uPGJvb2woY29uc3QgU2VjdXJpdHlPcmlnaW5EYXRhJiwgY29uc3QgQ2xpZW50T3JpZ2lu
Jik+JiYpOwpAQCAtMTIyLDYgKzEyMyw4IEBAIHByaXZhdGU6CiAgICAgdm9pZCByZW1vdmVEYXRh
YmFzZXNNb2RpZmllZFNpbmNlRm9yVmVyc2lvbihXYWxsVGltZSwgY29uc3QgU3RyaW5nJik7CiAg
ICAgdm9pZCByZW1vdmVEYXRhYmFzZXNXaXRoT3JpZ2luc0ZvclZlcnNpb24oY29uc3QgVmVjdG9y
PFNlY3VyaXR5T3JpZ2luRGF0YT4mLCBjb25zdCBTdHJpbmcmKTsKIAorICAgIHZvaWQgY29sbGVj
dE9yaWdpbnNGb3JWZXJzaW9uKGNvbnN0IFN0cmluZyYsIEhhc2hTZXQ8V2ViQ29yZTo6U2VjdXJp
dHlPcmlnaW5EYXRhPiYpIGNvbnN0OworCiAgICAgUEFMOjpTZXNzaW9uSUQgbV9zZXNzaW9uSUQ7
CiAgICAgSGFzaE1hcDxJREJDb25uZWN0aW9uSWRlbnRpZmllciwgUmVmUHRyPElEQkNvbm5lY3Rp
b25Ub0NsaWVudD4+IG1fY29ubmVjdGlvbk1hcDsKICAgICBIYXNoTWFwPElEQkRhdGFiYXNlSWRl
bnRpZmllciwgc3RkOjp1bmlxdWVfcHRyPFVuaXF1ZUlEQkRhdGFiYXNlPj4gbV91bmlxdWVJREJE
YXRhYmFzZU1hcDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvSW5k
ZXhlZERCL1dlYklEQlNlcnZlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0lu
ZGV4ZWREQi9XZWJJREJTZXJ2ZXIuY3BwCmluZGV4IDk3MTEyNWIxY2NmYzljODQzNTM0ZDM2MDAz
MDdlYTE0MmE4ZWRhZTYuLjJkNDRlNzhhNWFmMmMxMWZjNzY5ZTE5OWY3MDZkZjA5YjFhNGFiZDYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvSW5kZXhlZERCL1dlYklE
QlNlcnZlci5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9JbmRleGVkREIv
V2ViSURCU2VydmVyLmNwcApAQCAtNTksNiArNTksMjAgQEAgV2ViSURCU2VydmVyOjp+V2ViSURC
U2VydmVyKCkKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogfQogCit2b2lkIFdlYklE
QlNlcnZlcjo6Z2V0T3JpZ2lucyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKEhhc2hTZXQ8V2ViQ29y
ZTo6U2VjdXJpdHlPcmlnaW5EYXRhPiYmKT4mJiBjYWxsYmFjaykKK3sKKyAgICBBU1NFUlQoUnVu
TG9vcDo6aXNNYWluKCkpOworCisgICAgcG9zdFRhc2soW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBt
YWtlUmVmKCp0aGlzKSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0oKSBtdXRhYmxlIHsK
KyAgICAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICAgICAgTG9ja0hvbGRl
ciBsb2NrZXIobV9zZXJ2ZXItPmxvY2soKSk7CisgICAgICAgIHBvc3RUYXNrUmVwbHkoQ3Jvc3NU
aHJlYWRUYXNrKFtjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCBvcmlnaW5zID0gY3Jvc3NU
aHJlYWRDb3B5KG1fc2VydmVyLT5nZXRPcmlnaW5zKCkpXSgpIG11dGFibGUgeworICAgICAgICAg
ICAgY2FsbGJhY2soV1RGTW92ZShvcmlnaW5zKSk7CisgICAgICAgIH0pKTsKKyAgICB9KTsKK30K
Kwogdm9pZCBXZWJJREJTZXJ2ZXI6OmNsb3NlQW5kRGVsZXRlRGF0YWJhc2VzTW9kaWZpZWRTaW5j
ZShXYWxsVGltZSBtb2RpZmljYXRpb25UaW1lLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYg
Y2FsbGJhY2spCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvSW5kZXhlZERCL1dlYklEQlNlcnZlci5oIGIv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9JbmRleGVkREIvV2ViSURCU2VydmVyLmgKaW5k
ZXggZjc5YjNmMDhmOTBlMmM5NTZlY2RhN2I3YTMxZDE3ZTdmYTMxYzExMS4uM2VhMTE2YzBiOGE1
NGJmMTk5NjBmOWI1YzA2N2JmYjcwOGQxOTc2NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9JbmRleGVkREIvV2ViSURCU2VydmVyLmgKKysrIGIvU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9JbmRleGVkREIvV2ViSURCU2VydmVyLmgKQEAgLTQ3LDYgKzQ3LDcg
QEAgY2xhc3MgV2ViSURCU2VydmVyIGZpbmFsIDogcHVibGljIENyb3NzVGhyZWFkVGFza0hhbmRs
ZXIsIHB1YmxpYyBJUEM6OkNvbm5lY3Rpb24KIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPFdlYklE
QlNlcnZlcj4gY3JlYXRlKFBBTDo6U2Vzc2lvbklELCBjb25zdCBTdHJpbmcmIGRpcmVjdG9yeSwg
V2ViQ29yZTo6SURCU2VydmVyOjpJREJTZXJ2ZXI6OlN0b3JhZ2VRdW90YU1hbmFnZXJTcGFjZVJl
cXVlc3RlciYmKTsKIAorICAgIHZvaWQgZ2V0T3JpZ2lucyhDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KEhhc2hTZXQ8V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhPiYmKT4mJik7CiAgICAgdm9pZCBj
bG9zZUFuZERlbGV0ZURhdGFiYXNlc01vZGlmaWVkU2luY2UoV2FsbFRpbWUsIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoKT4mJiBjYWxsYmFjayk7CiAgICAgdm9pZCBjbG9zZUFuZERlbGV0ZURhdGFi
YXNlc0Zvck9yaWdpbnMoY29uc3QgVmVjdG9yPFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YT4m
LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY2FsbGJhY2spOwogICAgIHZvaWQgcmVuYW1l
T3JpZ2luKGNvbnN0IFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YSYsIGNvbnN0IFdlYkNvcmU6
OlNlY3VyaXR5T3JpZ2luRGF0YSYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcCBi
L1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwCmluZGV4IDMw
MDUzZGE0ZDc3YTMxYTlmZmEyYjUyY2EzMWYzY2M3N2E5MjkxNDMuLjg2OWZlZmNlNjg0ZjUzOTgz
NDE2MzA0YzY3ZTc3MzEzZjZmNWI1ODMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwCkBAIC00NjUsMTEgKzQ2NSw4IEBAIHZvaWQgTmV0d29y
a1Byb2Nlc3M6OmFkZFNlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2VyKFBBTDo6U2Vzc2lvbklEIHNl
c3Npb25JRCwgdWluCiAgICAgYXV0byBpc05ld0VudHJ5ID0gbV9zZXNzaW9uU3RvcmFnZVF1b3Rh
TWFuYWdlcnMuZW5zdXJlKHNlc3Npb25JRCwgW2RlZmF1bHRRdW90YSwgZGVmYXVsdFRoaXJkUGFy
dHlRdW90YSwgJmNhY2hlUm9vdFBhdGhdIHsKICAgICAgICAgcmV0dXJuIG1ha2VVbmlxdWU8U2Vz
c2lvblN0b3JhZ2VRdW90YU1hbmFnZXI+KGNhY2hlUm9vdFBhdGgsIGRlZmF1bHRRdW90YSwgZGVm
YXVsdFRoaXJkUGFydHlRdW90YSk7CiAgICAgfSkuaXNOZXdFbnRyeTsKLSAgICBpZiAoaXNOZXdF
bnRyeSkgeworICAgIGlmIChpc05ld0VudHJ5KQogICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpj
b25zdW1lUGVybWFuZW50bHkoY2FjaGVSb290UGF0aEhhbmRsZSk7Ci0gICAgICAgIGlmICghY2Fj
aGVSb290UGF0aC5pc0VtcHR5KCkpCi0gICAgICAgICAgICBwb3N0U3RvcmFnZVRhc2soY3JlYXRl
Q3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmTmV0d29ya1Byb2Nlc3M6OmVuc3VyZVBhdGhFeGlzdHMs
IGNhY2hlUm9vdFBhdGgpKTsKLSAgICB9CiB9CiAKIHZvaWQgTmV0d29ya1Byb2Nlc3M6OnJlbW92
ZVNlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2VyKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkKQEAg
LTE1NTgsMTMgKzE1NTUsMTAgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6ZmV0Y2hXZWJzaXRlRGF0
YShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIE9wdGlvblNldDxXZWJzaXQKICNpZiBFTkFCTEUo
SU5ERVhFRF9EQVRBQkFTRSkKICAgICBhdXRvIHBhdGggPSBtX2lkYkRhdGFiYXNlUGF0aHMuZ2V0
KHNlc3Npb25JRCk7CiAgICAgaWYgKCFwYXRoLmlzRW1wdHkoKSAmJiB3ZWJzaXRlRGF0YVR5cGVz
LmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6SW5kZXhlZERCRGF0YWJhc2VzKSkgewotICAgICAg
ICAvLyBGSVhNRTogUGljayB0aGUgcmlnaHQgZGF0YWJhc2Ugc3RvcmUgYmFzZWQgb24gdGhlIHNl
c3Npb24gSUQuCi0gICAgICAgIHBvc3RTdG9yYWdlVGFzayhDcm9zc1RocmVhZFRhc2soW3RoaXMs
IGNhbGxiYWNrQWdncmVnYXRvciwgcGF0aCA9IGNyb3NzVGhyZWFkQ29weShwYXRoKV0oKSBtdXRh
YmxlIHsKLSAgICAgICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbY2FsbGJhY2tBZ2dy
ZWdhdG9yID0gV1RGTW92ZShjYWxsYmFja0FnZ3JlZ2F0b3IpLCBzZWN1cml0eU9yaWdpbnMgPSBp
bmRleGVkRGF0YWJhc2VPcmlnaW5zKHBhdGgpXSB7Ci0gICAgICAgICAgICAgICAgZm9yIChjb25z
dCBhdXRvJiBzZWN1cml0eU9yaWdpbiA6IHNlY3VyaXR5T3JpZ2lucykKLSAgICAgICAgICAgICAg
ICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5tX3dlYnNpdGVEYXRhLmVudHJpZXMuYXBwZW5kKHsg
c2VjdXJpdHlPcmlnaW4sIFdlYnNpdGVEYXRhVHlwZTo6SW5kZXhlZERCRGF0YWJhc2VzLCAwIH0p
OwotICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0pKTsKKyAgICAgICAgd2ViSURCU2VydmVyKHNl
c3Npb25JRCkuZ2V0T3JpZ2lucyhbY2FsbGJhY2tBZ2dyZWdhdG9yXShhdXRvJiYgb3JpZ2lucykg
eworICAgICAgICAgICAgd2hpbGUgKCFvcmlnaW5zLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAg
ICBjYWxsYmFja0FnZ3JlZ2F0b3ItPm1fd2Vic2l0ZURhdGEuZW50cmllcy5hcHBlbmQoeyBvcmln
aW5zLnRha2VBbnkoKSwgV2Vic2l0ZURhdGFUeXBlOjpJbmRleGVkREJEYXRhYmFzZXMsIDAgfSk7
CisgICAgICAgIH0pOwogICAgIH0KICNlbmRpZgogCkBAIC0xOTU2LDIyICsxOTUwLDEzIEBAIHZv
aWQgTmV0d29ya1Byb2Nlc3M6OmRlbGV0ZUFuZFJlc3RyaWN0V2Vic2l0ZURhdGFGb3JSZWdpc3Ry
YWJsZURvbWFpbnMoUEFMOjpTZXNzCiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCiAgICAg
YXV0byBwYXRoID0gbV9pZGJEYXRhYmFzZVBhdGhzLmdldChzZXNzaW9uSUQpOwogICAgIGlmICgh
cGF0aC5pc0VtcHR5KCkgJiYgd2Vic2l0ZURhdGFUeXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5
cGU6OkluZGV4ZWREQkRhdGFiYXNlcykpIHsKLSAgICAgICAgLy8gRklYTUU6IFBpY2sgdGhlIHJp
Z2h0IGRhdGFiYXNlIHN0b3JlIGJhc2VkIG9uIHRoZSBzZXNzaW9uIElELgotICAgICAgICBwb3N0
U3RvcmFnZVRhc2soQ3Jvc3NUaHJlYWRUYXNrKFt0aGlzLCBzZXNzaW9uSUQsIGNhbGxiYWNrQWdn
cmVnYXRvciwgcGF0aCA9IGNyb3NzVGhyZWFkQ29weShwYXRoKSwgZG9tYWluc1RvRGVsZXRlQWxs
Tm9uQ29va2llV2Vic2l0ZURhdGFGb3IgPSBjcm9zc1RocmVhZENvcHkoZG9tYWluc1RvRGVsZXRl
QWxsTm9uQ29va2llV2Vic2l0ZURhdGFGb3IpXSgpIG11dGFibGUgewotICAgICAgICAgICAgUnVu
TG9vcDo6bWFpbigpLmRpc3BhdGNoKFt0aGlzLCBzZXNzaW9uSUQsIGRvbWFpbnNUb0RlbGV0ZUFs
bE5vbkNvb2tpZVdlYnNpdGVEYXRhRm9yID0gV1RGTW92ZShkb21haW5zVG9EZWxldGVBbGxOb25D
b29raWVXZWJzaXRlRGF0YUZvciksIGNhbGxiYWNrQWdncmVnYXRvciwgc2VjdXJpdHlPcmlnaW5z
ID0gaW5kZXhlZERhdGFiYXNlT3JpZ2lucyhwYXRoKV0gewotICAgICAgICAgICAgICAgIFZlY3Rv
cjxTZWN1cml0eU9yaWdpbkRhdGE+IGVudHJpZXNUb0RlbGV0ZTsKLSAgICAgICAgICAgICAgICBm
b3IgKGNvbnN0IGF1dG8mIHNlY3VyaXR5T3JpZ2luIDogc2VjdXJpdHlPcmlnaW5zKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIGF1dG8gZG9tYWluID0gUmVnaXN0cmFibGVEb21haW46OnVuY2hlY2tl
ZENyZWF0ZUZyb21Ib3N0KHNlY3VyaXR5T3JpZ2luLmhvc3QpOwotICAgICAgICAgICAgICAgICAg
ICBpZiAoIWRvbWFpbnNUb0RlbGV0ZUFsbE5vbkNvb2tpZVdlYnNpdGVEYXRhRm9yLmNvbnRhaW5z
KGRvbWFpbikpCi0gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgd2Vi
SURCU2VydmVyKHNlc3Npb25JRCkuZ2V0T3JpZ2lucyhbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1h
a2VSZWYoKnRoaXMpLCBzZXNzaW9uSUQsIGNhbGxiYWNrQWdncmVnYXRvciwgZG9tYWluc1RvRGVs
ZXRlQWxsTm9uQ29va2llV2Vic2l0ZURhdGFGb3JdKGF1dG8mJiBvcmlnaW5zKSB7CisgICAgICAg
ICAgICBpZiAoIW1fd2ViSURCU2VydmVycy5jb250YWlucyhzZXNzaW9uSUQpKQorICAgICAgICAg
ICAgICAgIHJldHVybjsKIAotICAgICAgICAgICAgICAgICAgICBlbnRyaWVzVG9EZWxldGUuYXBw
ZW5kKHNlY3VyaXR5T3JpZ2luKTsKLSAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2tBZ2dyZWdh
dG9yLT5tX2RvbWFpbnMuYWRkKGRvbWFpbik7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICAgICAgd2ViSURCU2VydmVyKHNlc3Npb25JRCkuY2xvc2VBbmREZWxldGVEYXRhYmFzZXNG
b3JPcmlnaW5zKGVudHJpZXNUb0RlbGV0ZSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAg
ICAgICAgICAgIH0pOwotICAgICAgICB9KSk7CisgICAgICAgICAgICBhdXRvIG9yaWdpbnNUb0Rl
bGV0ZSA9IGZpbHRlckZvclJlZ2lzdHJhYmxlRG9tYWlucyhvcmlnaW5zLCBkb21haW5zVG9EZWxl
dGVBbGxOb25Db29raWVXZWJzaXRlRGF0YUZvciwgY2FsbGJhY2tBZ2dyZWdhdG9yLT5tX2RvbWFp
bnMpOworICAgICAgICAgICAgd2ViSURCU2VydmVyKHNlc3Npb25JRCkuY2xvc2VBbmREZWxldGVE
YXRhYmFzZXNGb3JPcmlnaW5zKG9yaWdpbnNUb0RlbGV0ZSwgW2NhbGxiYWNrQWdncmVnYXRvcl0g
eyB9KTsKKyAgICAgICAgfSk7CiAgICAgfQogI2VuZGlmCiAgICAgCkBAIC0yMTAxLDEzICsyMDg2
LDEwIEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OnJlZ2lzdHJhYmxlRG9tYWluc1dpdGhXZWJzaXRl
RGF0YShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsCiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJB
U0UpCiAgICAgYXV0byBwYXRoID0gbV9pZGJEYXRhYmFzZVBhdGhzLmdldChzZXNzaW9uSUQpOwog
ICAgIGlmICghcGF0aC5pc0VtcHR5KCkgJiYgd2Vic2l0ZURhdGFUeXBlcy5jb250YWlucyhXZWJz
aXRlRGF0YVR5cGU6OkluZGV4ZWREQkRhdGFiYXNlcykpIHsKLSAgICAgICAgLy8gRklYTUU6IFBp
Y2sgdGhlIHJpZ2h0IGRhdGFiYXNlIHN0b3JlIGJhc2VkIG9uIHRoZSBzZXNzaW9uIElELgotICAg
ICAgICBwb3N0U3RvcmFnZVRhc2soQ3Jvc3NUaHJlYWRUYXNrKFt0aGlzLCBjYWxsYmFja0FnZ3Jl
Z2F0b3IsIHBhdGggPSBjcm9zc1RocmVhZENvcHkocGF0aCldKCkgbXV0YWJsZSB7Ci0gICAgICAg
ICAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW2NhbGxiYWNrQWdncmVnYXRvciwgc2VjdXJp
dHlPcmlnaW5zID0gaW5kZXhlZERhdGFiYXNlT3JpZ2lucyhwYXRoKV0gewotICAgICAgICAgICAg
ICAgIGZvciAoY29uc3QgYXV0byYgc2VjdXJpdHlPcmlnaW4gOiBzZWN1cml0eU9yaWdpbnMpCi0g
ICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+bV93ZWJzaXRlRGF0YS5lbnRy
aWVzLmFwcGVuZCh7IHNlY3VyaXR5T3JpZ2luLCBXZWJzaXRlRGF0YVR5cGU6OkluZGV4ZWREQkRh
dGFiYXNlcywgMCB9KTsKLSAgICAgICAgICAgIH0pOwotICAgICAgICB9KSk7CisgICAgICAgIHdl
YklEQlNlcnZlcihzZXNzaW9uSUQpLmdldE9yaWdpbnMoW2NhbGxiYWNrQWdncmVnYXRvcl0oYXV0
byYmIG9yaWdpbnMpIHsKKyAgICAgICAgICAgIHdoaWxlICghb3JpZ2lucy5pc0VtcHR5KCkpCisg
ICAgICAgICAgICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5tX3dlYnNpdGVEYXRhLmVudHJpZXMu
YXBwZW5kKHsgb3JpZ2lucy50YWtlQW55KCksIFdlYnNpdGVEYXRhVHlwZTo6SW5kZXhlZERCRGF0
YWJhc2VzLCAwIH0pOworICAgICAgICB9KTsKICAgICB9CiAjZW5kaWYKICAgICAKQEAgLTI0MjUs
NzIgKzI0MDcsNiBAQCBXZWJJREJTZXJ2ZXImIE5ldHdvcmtQcm9jZXNzOjp3ZWJJREJTZXJ2ZXIo
UEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQogICAgIH0pLml0ZXJhdG9yLT52YWx1ZTsKIH0KIAot
dm9pZCBOZXR3b3JrUHJvY2Vzczo6ZW5zdXJlUGF0aEV4aXN0cyhjb25zdCBTdHJpbmcmIHBhdGgp
Ci17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0gICAgCi0gICAgaWYgKCFGaWxl
U3lzdGVtOjptYWtlQWxsRGlyZWN0b3JpZXMocGF0aCkpCi0gICAgICAgIExPR19FUlJPUigiRmFp
bGVkIHRvIG1ha2UgYWxsIGRpcmVjdG9yaWVzIGZvciBwYXRoICclcyciLCBwYXRoLnV0ZjgoKS5k
YXRhKCkpOwotfQotCi12b2lkIE5ldHdvcmtQcm9jZXNzOjpwb3N0U3RvcmFnZVRhc2soQ3Jvc3NU
aHJlYWRUYXNrJiYgdGFzaykKLXsKLSAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwotICAg
IAotICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fc3RvcmFnZVRhc2tNdXRleCk7Ci0gICAgCi0gICAg
bV9zdG9yYWdlVGFza3MuYXBwZW5kKFdURk1vdmUodGFzaykpOwotICAgIAotICAgIG1fc3RvcmFn
ZVRhc2tRdWV1ZS0+ZGlzcGF0Y2goW3RoaXNdIHsKLSAgICAgICAgcGVyZm9ybU5leHRTdG9yYWdl
VGFzaygpOwotICAgIH0pOwotfQotCi12b2lkIE5ldHdvcmtQcm9jZXNzOjpwZXJmb3JtTmV4dFN0
b3JhZ2VUYXNrKCkKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLSAgICAKLSAg
ICBDcm9zc1RocmVhZFRhc2sgdGFzazsKLSAgICB7Ci0gICAgICAgIExvY2tIb2xkZXIgbG9ja2Vy
KG1fc3RvcmFnZVRhc2tNdXRleCk7Ci0gICAgICAgIEFTU0VSVCghbV9zdG9yYWdlVGFza3MuaXNF
bXB0eSgpKTsKLSAgICAgICAgdGFzayA9IG1fc3RvcmFnZVRhc2tzLnRha2VGaXJzdCgpOwotICAg
IH0KLSAgICAKLSAgICB0YXNrLnBlcmZvcm1UYXNrKCk7Ci19Ci0KLXZvaWQgTmV0d29ya1Byb2Nl
c3M6OmNvbGxlY3RJbmRleGVkRGF0YWJhc2VPcmlnaW5zRm9yVmVyc2lvbihjb25zdCBTdHJpbmcm
IHBhdGgsIEhhc2hTZXQ8V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhPiYgc2VjdXJpdHlPcmln
aW5zKQotewotICAgIGlmIChwYXRoLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
Zm9yIChhdXRvJiB0b3BPcmlnaW5QYXRoIDogRmlsZVN5c3RlbTo6bGlzdERpcmVjdG9yeShwYXRo
LCAiKiIpKSB7Ci0gICAgICAgIGF1dG8gZGF0YWJhc2VJZGVudGlmaWVyID0gRmlsZVN5c3RlbTo6
cGF0aEdldEZpbGVOYW1lKHRvcE9yaWdpblBhdGgpOwotICAgICAgICBpZiAoYXV0byBzZWN1cml0
eU9yaWdpbiA9IFNlY3VyaXR5T3JpZ2luRGF0YTo6ZnJvbURhdGFiYXNlSWRlbnRpZmllcihkYXRh
YmFzZUlkZW50aWZpZXIpKSB7Ci0gICAgICAgICAgICBzZWN1cml0eU9yaWdpbnMuYWRkKFdURk1v
dmUoKnNlY3VyaXR5T3JpZ2luKSk7Ci0gICAgICAgIAotICAgICAgICAgICAgZm9yIChhdXRvJiBv
cmlnaW5QYXRoIDogRmlsZVN5c3RlbTo6bGlzdERpcmVjdG9yeSh0b3BPcmlnaW5QYXRoLCAiKiIp
KSB7Ci0gICAgICAgICAgICAgICAgZGF0YWJhc2VJZGVudGlmaWVyID0gRmlsZVN5c3RlbTo6cGF0
aEdldEZpbGVOYW1lKG9yaWdpblBhdGgpOwotICAgICAgICAgICAgICAgIGlmIChhdXRvIHNlY3Vy
aXR5T3JpZ2luID0gU2VjdXJpdHlPcmlnaW5EYXRhOjpmcm9tRGF0YWJhc2VJZGVudGlmaWVyKGRh
dGFiYXNlSWRlbnRpZmllcikpCi0gICAgICAgICAgICAgICAgICAgIHNlY3VyaXR5T3JpZ2lucy5h
ZGQoV1RGTW92ZSgqc2VjdXJpdHlPcmlnaW4pKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
ICAgIH0KLX0KLQotSGFzaFNldDxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGE+IE5ldHdvcmtQ
cm9jZXNzOjppbmRleGVkRGF0YWJhc2VPcmlnaW5zKGNvbnN0IFN0cmluZyYgcGF0aCkKLXsKLSAg
ICBpZiAocGF0aC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiB7IH07Ci0gICAgCi0gICAgSGFz
aFNldDxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGE+IHNlY3VyaXR5T3JpZ2luczsKLSAgICBj
b2xsZWN0SW5kZXhlZERhdGFiYXNlT3JpZ2luc0ZvclZlcnNpb24oRmlsZVN5c3RlbTo6cGF0aEJ5
QXBwZW5kaW5nQ29tcG9uZW50KHBhdGgsICJ2MCIpLCBzZWN1cml0eU9yaWdpbnMpOwotICAgIGNv
bGxlY3RJbmRleGVkRGF0YWJhc2VPcmlnaW5zRm9yVmVyc2lvbihGaWxlU3lzdGVtOjpwYXRoQnlB
cHBlbmRpbmdDb21wb25lbnQocGF0aCwgInYxIiksIHNlY3VyaXR5T3JpZ2lucyk7Ci0KLSAgICBy
ZXR1cm4gc2VjdXJpdHlPcmlnaW5zOwotfQotCiB2b2lkIE5ldHdvcmtQcm9jZXNzOjphZGRJbmRl
eGVkRGF0YWJhc2VTZXNzaW9uKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgU3RyaW5nJiBpbmRl
eGVkRGF0YWJhc2VEaXJlY3RvcnksIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSYgaGFuZGxlKQog
ewogICAgIC8vICoqKioqKioqKgpAQCAtMjQ5OSw4ICsyNDE1LDYgQEAgdm9pZCBOZXR3b3JrUHJv
Y2Vzczo6YWRkSW5kZXhlZERhdGFiYXNlU2Vzc2lvbihQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQs
IFN0cmluZyYKICAgICBhdXRvIGFkZFJlc3VsdCA9IG1faWRiRGF0YWJhc2VQYXRocy5hZGQoc2Vz
c2lvbklELCBpbmRleGVkRGF0YWJhc2VEaXJlY3RvcnkpOwogICAgIGlmIChhZGRSZXN1bHQuaXNO
ZXdFbnRyeSkgewogICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50bHko
aGFuZGxlKTsKLSAgICAgICAgaWYgKCFpbmRleGVkRGF0YWJhc2VEaXJlY3RvcnkuaXNFbXB0eSgp
KQotICAgICAgICAgICAgcG9zdFN0b3JhZ2VUYXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhp
cywgJk5ldHdvcmtQcm9jZXNzOjplbnN1cmVQYXRoRXhpc3RzLCBpbmRleGVkRGF0YWJhc2VEaXJl
Y3RvcnkpKTsKICAgICAgICAgc2V0U2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXJJREJSb290UGF0
aChzZXNzaW9uSUQsIGluZGV4ZWREYXRhYmFzZURpcmVjdG9yeSk7CiAgICAgfQogfQpAQCAtMjYz
NSwxMSArMjU0OSw4IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmFkZFNlcnZpY2VXb3JrZXJTZXNz
aW9uKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgYm9vbCBwcm9jCiAgICAgICAgIHByb2Nlc3NU
ZXJtaW5hdGlvbkRlbGF5RW5hYmxlZAogICAgIH07CiAgICAgYXV0byBhZGRSZXN1bHQgPSBtX3Nl
cnZpY2VXb3JrZXJJbmZvLmFkZChzZXNzaW9uSUQsIFdURk1vdmUoaW5mbykpOwotICAgIGlmIChh
ZGRSZXN1bHQuaXNOZXdFbnRyeSkgeworICAgIGlmIChhZGRSZXN1bHQuaXNOZXdFbnRyeSkKICAg
ICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y29uc3VtZVBlcm1hbmVudGx5KGhhbmRsZSk7Ci0gICAg
ICAgIGlmICghYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5kYXRhYmFzZVBhdGguaXNFbXB0eSgp
KQotICAgICAgICAgICAgcG9zdFN0b3JhZ2VUYXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhp
cywgJk5ldHdvcmtQcm9jZXNzOjplbnN1cmVQYXRoRXhpc3RzLCBhZGRSZXN1bHQuaXRlcmF0b3It
PnZhbHVlLmRhdGFiYXNlUGF0aCkpOwotICAgIH0KIH0KICNlbmRpZiAvLyBFTkFCTEUoU0VSVklD
RV9XT1JLRVIpCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0
d29ya1Byb2Nlc3MuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nl
c3MuaAppbmRleCAyYTRlOWY2MmNhZjdmMDFiNzEyNmI1ODliNTQ0YjVkNzIzNzAzMGQ0Li41OGZi
ZjYzOTE4ZTE5NWI0NmFhNTg4YjNlNmM4MTA2NzM4NzE1MzhhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmgKKysrIGIvU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5oCkBAIC00NjYsOCArNDY2LDYgQEAgcHJp
dmF0ZToKIAogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQogICAgIHZvaWQgYWRkSW5kZXhl
ZERhdGFiYXNlU2Vzc2lvbihQQUw6OlNlc3Npb25JRCwgU3RyaW5nJiwgU2FuZGJveEV4dGVuc2lv
bjo6SGFuZGxlJik7Ci0gICAgdm9pZCBjb2xsZWN0SW5kZXhlZERhdGFiYXNlT3JpZ2luc0ZvclZl
cnNpb24oY29uc3QgU3RyaW5nJiwgSGFzaFNldDxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGE+
Jik7Ci0gICAgSGFzaFNldDxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGE+IGluZGV4ZWREYXRh
YmFzZU9yaWdpbnMoY29uc3QgU3RyaW5nJiBwYXRoKTsKICAgICBSZWY8V2ViSURCU2VydmVyPiBj
cmVhdGVXZWJJREJTZXJ2ZXIoUEFMOjpTZXNzaW9uSUQpOwogICAgIHZvaWQgc2V0U2Vzc2lvblN0
b3JhZ2VRdW90YU1hbmFnZXJJREJSb290UGF0aChQQUw6OlNlc3Npb25JRCwgY29uc3QgU3RyaW5n
JiBpZGJSb290UGF0aCk7CiAgICAgdm9pZCByZW1vdmVXZWJJREJTZXJ2ZXJJZlBvc3NpYmxlKFBB
TDo6U2Vzc2lvbklEKTsKQEAgLTQ4NSwxMSArNDgzLDYgQEAgcHJpdmF0ZToKICAgICB2b2lkIGFk
ZFNlcnZpY2VXb3JrZXJTZXNzaW9uKFBBTDo6U2Vzc2lvbklELCBib29sIHByb2Nlc3NUZXJtaW5h
dGlvbkRlbGF5RW5hYmxlZCwgU3RyaW5nJiYgc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVj
dG9yeSwgY29uc3QgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlJik7CiAjZW5kaWYKIAotICAgIHZv
aWQgcG9zdFN0b3JhZ2VUYXNrKENyb3NzVGhyZWFkVGFzayYmKTsKLSAgICAvLyBGb3IgZXhlY3V0
aW9uIG9uIHdvcmsgcXVldWUgdGhyZWFkIG9ubHkuCi0gICAgdm9pZCBwZXJmb3JtTmV4dFN0b3Jh
Z2VUYXNrKCk7Ci0gICAgdm9pZCBlbnN1cmVQYXRoRXhpc3RzKGNvbnN0IFN0cmluZyYgcGF0aCk7
Ci0KICAgICBjbGFzcyBTZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlciB7CiAgICAgICAgIFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOwogICAgIHB1YmxpYzoKQEAgLTU3MCwxNSArNTYzLDEwIEBAIHBy
aXZhdGU6CiAgICAgV2ViU1FMaXRlRGF0YWJhc2VUcmFja2VyIG1fd2ViU1FMaXRlRGF0YWJhc2VU
cmFja2VyOwogI2VuZGlmCiAKLSAgICBSZWY8V29ya1F1ZXVlPiBtX3N0b3JhZ2VUYXNrUXVldWUg
eyBXb3JrUXVldWU6OmNyZWF0ZSgiY29tLmFwcGxlLldlYktpdC5TdG9yYWdlVGFzayIpIH07Ci0K
ICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKICAgICBIYXNoTWFwPFBBTDo6U2Vzc2lvbklE
LCBTdHJpbmc+IG1faWRiRGF0YWJhc2VQYXRoczsKICAgICBIYXNoTWFwPFBBTDo6U2Vzc2lvbklE
LCBSZWZQdHI8V2ViSURCU2VydmVyPj4gbV93ZWJJREJTZXJ2ZXJzOwogI2VuZGlmCi0KLSAgICBE
ZXF1ZTxDcm9zc1RocmVhZFRhc2s+IG1fc3RvcmFnZVRhc2tzOwotICAgIExvY2sgbV9zdG9yYWdl
VGFza011dGV4OwogICAgIAogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKICAgICBzdHJ1Y3Qg
U2VydmljZVdvcmtlckluZm8gewo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>408253</attachid>
            <date>2020-09-08 12:14:48 -0700</date>
            <delta_ts>2020-09-08 12:37:48 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-216199-20200908121447.patch</filename>
            <type>text/plain</type>
            <size>18419</size>
            <attacher name="Sihui Liu">sihui_liu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY2NzI3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTNiYjdlMGU0MTA4MDRh
Y2Q0YjU4MGMyYjJkMjBiOWE1YjY4ZmEwYS4uYzQ4YWYwMGUyNDBjODE5OTVhZTJjM2EwOGFjZGEy
ODQyNzNiZWNlZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDIwLTA5LTA4ICBTaWh1
aSBMaXUgIDxzaWh1aV9saXVAYXBwbGUuY29tPgorCisgICAgICAgIFJlbW92ZSBzdG9yYWdlIFdv
cmtRdWV1ZSBpbiBOZXR3b3JrUHJvY2VzcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjE2MTk5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgWW91ZW5uIEZh
YmxldC4KKworICAgICAgICBNb3ZlIG9yaWdpbiBmZXRjaGluZyBjb2RlIGZyb20gTmV0d29ya1By
b2Nlc3MgdG8gSURCU2VydmVyLgorCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2VydmVy
L0lEQlNlcnZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OklEQlNlcnZlcjo6
Y29sbGVjdE9yaWdpbnNGb3JWZXJzaW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNl
cnZlcjo6SURCU2VydmVyOjpnZXRPcmlnaW5zIGNvbnN0KToKKyAgICAgICAgKiBNb2R1bGVzL2lu
ZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmg6CisKIDIwMjAtMDktMDggIFphbGFuIEJ1anRhcyAg
PHphbGFuQGFwcGxlLmNvbT4KIAogICAgICAgICBbTEZDXVtJRkNdIFJlbW92ZSByZWR1bmRhbnQg
Rm9ybWF0dGluZ0NvbnRleHQ6OlF1aXJrczo6bGluZURlc2NlbnROZWVkc0NvbGxhcHNpbmcKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VM
b2cKaW5kZXggYzY2ZmZkYzI3MWZiZDVlNGYwMGM3NDBiMzg4MjZkOTc3YjgxM2U1OS4uNzNhNTQy
NTg2YTM4MWIxMjI2ZDI0ZmQ2ZjZkZmYwYThhOWE0MTM1NCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwz
MSBAQAorMjAyMC0wOS0wOCAgU2lodWkgTGl1ICA8c2lodWlfbGl1QGFwcGxlLmNvbT4KKworICAg
ICAgICBSZW1vdmUgc3RvcmFnZSBXb3JrUXVldWUgaW4gTmV0d29ya1Byb2Nlc3MKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNjE5OQorCisgICAgICAg
IFJldmlld2VkIGJ5IFlvdWVubiBGYWJsZXQuCisKKyAgICAgICAgVGhlIG9ubHkgbWVhbmluZ2Z1
bCB1c2FnZSBvZiB0aGlzIFdvcmtRdWV1ZSBpcyBpdGVyYXRpbmcgSW5kZXhlZERCIGRpcmVjdG9y
aWVzIGFuZCBjb2xsZWN0aW5nIG9yaWdpbnMsIHdoaWxlCisgICAgICAgIHRoZXJlIGNhbiBiZSBz
b21lIElEQiB0aHJlYWQgYWNjZXNzaW5nIHRoZSBzYW1lIGRpcmVjdG9yaWVzLiBUbyByZW1vdmUg
dGhlIHJhY2UsIExldCdzIGp1c3QgZHJvcCB0aGlzIFdvcmtRdWV1ZQorICAgICAgICBhbmQgZmV0
Y2ggb3JpZ2lucyB2aWEgV2ViSURCU2VydmVyLgorCisgICAgICAgICogTmV0d29ya1Byb2Nlc3Mv
SW5kZXhlZERCL1dlYklEQlNlcnZlci5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYklEQlNlcnZl
cjo6Z2V0T3JpZ2lucyk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvSW5kZXhlZERCL1dlYklE
QlNlcnZlci5oOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcDoK
KyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OmFkZFNlc3Npb25TdG9yYWdlUXVvdGFN
YW5hZ2VyKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OmZldGNoV2Vic2l0ZURh
dGEpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6ZGVsZXRlQW5kUmVzdHJpY3RX
ZWJzaXRlRGF0YUZvclJlZ2lzdHJhYmxlRG9tYWlucyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdv
cmtQcm9jZXNzOjpyZWdpc3RyYWJsZURvbWFpbnNXaXRoV2Vic2l0ZURhdGEpOgorICAgICAgICAo
V2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6YWRkSW5kZXhlZERhdGFiYXNlU2Vzc2lvbik6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjphZGRTZXJ2aWNlV29ya2VyU2Vzc2lvbik6Cisg
ICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjplbnN1cmVQYXRoRXhpc3RzKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OnBvc3RTdG9yYWdlVGFzayk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpwZXJmb3JtTmV4dFN0b3Jh
Z2VUYXNrKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OmNvbGxl
Y3RJbmRleGVkRGF0YWJhc2VPcmlnaW5zRm9yVmVyc2lvbik6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjppbmRleGVkRGF0YWJhc2VPcmlnaW5zKTogRGVsZXRlZC4K
KyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5oOgorCiAyMDIwLTA5LTA4
ICBNaWtlIEdvcnNlICA8bWdvcnNlQHN1c2UuY29tPgogCiAgICAgICAgIFtHVEtdIEFjY2VsZXJh
dGVkQmFja2luZ1N0b3JlV2F5bGFuZCBtaWdodCBlcnJvbmVvdXNseSB0cnkgdG8gdXNlIFNITSB3
aXRoIG9sZGVyIHdwZWJhY2tlbmQtZmRvCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIuY3BwCmluZGV4IGU0YjgyZjBjN2IzNmIyNjM1
YmEwMGExZWZmNGUxNGFiNTZhOTc4MjIuLjdiNWQ0ZDU3ZjEwOGI1MGQ2ZDc5NTQzMWI2NjRkM2Fh
NWJiNjUxODYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3Nl
cnZlci9JREJTZXJ2ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L3NlcnZlci9JREJTZXJ2ZXIuY3BwCkBAIC01NDEsNiArNTQxLDM3IEBAIHZvaWQgSURCU2VydmVy
OjpnZXRBbGxEYXRhYmFzZU5hbWVzQW5kVmVyc2lvbnMoSURCQ29ubmVjdGlvbklkZW50aWZpZXIg
c2VydmVyQ29uCiAgICAgY29ubmVjdGlvbi0+ZGlkR2V0QWxsRGF0YWJhc2VOYW1lc0FuZFZlcnNp
b25zKHJlcXVlc3RJZGVudGlmaWVyLCBXVEZNb3ZlKGRhdGFiYXNlcykpOwogfQogCitzdGF0aWMg
dm9pZCBjb2xsZWN0T3JpZ2luc0ZvclZlcnNpb24oY29uc3QgU3RyaW5nJiB2ZXJzaW9uUGF0aCwg
SGFzaFNldDxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGE+JiBzZWN1cml0eU9yaWdpbnMpCit7
CisgICAgZm9yIChhdXRvJiB0b3BPcmlnaW5QYXRoIDogRmlsZVN5c3RlbTo6bGlzdERpcmVjdG9y
eSh2ZXJzaW9uUGF0aCwgIioiKSkgeworICAgICAgICBhdXRvIGRhdGFiYXNlSWRlbnRpZmllciA9
IEZpbGVTeXN0ZW06OnBhdGhHZXRGaWxlTmFtZSh0b3BPcmlnaW5QYXRoKTsKKyAgICAgICAgaWYg
KGF1dG8gc2VjdXJpdHlPcmlnaW4gPSBTZWN1cml0eU9yaWdpbkRhdGE6OmZyb21EYXRhYmFzZUlk
ZW50aWZpZXIoZGF0YWJhc2VJZGVudGlmaWVyKSkgeworICAgICAgICAgICAgc2VjdXJpdHlPcmln
aW5zLmFkZChXVEZNb3ZlKCpzZWN1cml0eU9yaWdpbikpOworICAgICAgICAKKyAgICAgICAgICAg
IGZvciAoYXV0byYgb3JpZ2luUGF0aCA6IEZpbGVTeXN0ZW06Omxpc3REaXJlY3RvcnkodG9wT3Jp
Z2luUGF0aCwgIioiKSkgeworICAgICAgICAgICAgICAgIGRhdGFiYXNlSWRlbnRpZmllciA9IEZp
bGVTeXN0ZW06OnBhdGhHZXRGaWxlTmFtZShvcmlnaW5QYXRoKTsKKyAgICAgICAgICAgICAgICBp
ZiAoYXV0byBzZWN1cml0eU9yaWdpbiA9IFNlY3VyaXR5T3JpZ2luRGF0YTo6ZnJvbURhdGFiYXNl
SWRlbnRpZmllcihkYXRhYmFzZUlkZW50aWZpZXIpKQorICAgICAgICAgICAgICAgICAgICBzZWN1
cml0eU9yaWdpbnMuYWRkKFdURk1vdmUoKnNlY3VyaXR5T3JpZ2luKSk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICB9Cit9CisKK0hhc2hTZXQ8U2VjdXJpdHlPcmlnaW5EYXRhPiBJREJT
ZXJ2ZXI6OmdldE9yaWdpbnMoKSBjb25zdAoreworICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkp
OworICAgIEFTU0VSVChtX2xvY2suaXNIZWxkKCkpOworCisgICAgaWYgKG1fZGF0YWJhc2VEaXJl
Y3RvcnlQYXRoLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIEhhc2hTZXQ8
V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhPiBzZWN1cml0eU9yaWdpbnM7CisgICAgY29sbGVj
dE9yaWdpbnNGb3JWZXJzaW9uKEZpbGVTeXN0ZW06OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudCht
X2RhdGFiYXNlRGlyZWN0b3J5UGF0aCwgInYwIiksIHNlY3VyaXR5T3JpZ2lucyk7CisgICAgY29s
bGVjdE9yaWdpbnNGb3JWZXJzaW9uKEZpbGVTeXN0ZW06OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVu
dChtX2RhdGFiYXNlRGlyZWN0b3J5UGF0aCwgInYxIiksIHNlY3VyaXR5T3JpZ2lucyk7CisKKyAg
ICByZXR1cm4gc2VjdXJpdHlPcmlnaW5zOworfQorCiB2b2lkIElEQlNlcnZlcjo6Y2xvc2VBbmRE
ZWxldGVEYXRhYmFzZXNNb2RpZmllZFNpbmNlKFdhbGxUaW1lIG1vZGlmaWNhdGlvblRpbWUpCiB7
CiAgICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmgKaW5kZXggZDg1ZDhlY2IxN2I3YjJl
ZGFiNzdlYTQ1MDUzNzU5ZTdlM2U0ZmVjMy4uM2YxZjNhNGZlYjZlZDNjMDY0MzRkYjc5MDVmZmRl
NWVlYWQxZmEyZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
c2VydmVyL0lEQlNlcnZlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L3NlcnZlci9JREJTZXJ2ZXIuaApAQCAtMTAxLDYgKzEwMSw3IEBAIHB1YmxpYzoKIAogICAgIHN0
ZDo6dW5pcXVlX3B0cjxJREJCYWNraW5nU3RvcmU+IGNyZWF0ZUJhY2tpbmdTdG9yZShjb25zdCBJ
REJEYXRhYmFzZUlkZW50aWZpZXImKTsKIAorICAgIFdFQkNPUkVfRVhQT1JUIEhhc2hTZXQ8U2Vj
dXJpdHlPcmlnaW5EYXRhPiBnZXRPcmlnaW5zKCkgY29uc3Q7CiAgICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCBjbG9zZUFuZERlbGV0ZURhdGFiYXNlc01vZGlmaWVkU2luY2UoV2FsbFRpbWUpOwogICAg
IFdFQkNPUkVfRVhQT1JUIHZvaWQgY2xvc2VBbmREZWxldGVEYXRhYmFzZXNGb3JPcmlnaW5zKGNv
bnN0IFZlY3RvcjxTZWN1cml0eU9yaWdpbkRhdGE+Jik7CiAgICAgdm9pZCBjbG9zZURhdGFiYXNl
c0Zvck9yaWdpbnMoY29uc3QgVmVjdG9yPFNlY3VyaXR5T3JpZ2luRGF0YT4mLCBGdW5jdGlvbjxi
b29sKGNvbnN0IFNlY3VyaXR5T3JpZ2luRGF0YSYsIGNvbnN0IENsaWVudE9yaWdpbiYpPiYmKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvSW5kZXhlZERCL1dlYklE
QlNlcnZlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0luZGV4ZWREQi9XZWJJ
REJTZXJ2ZXIuY3BwCmluZGV4IDk3MTEyNWIxY2NmYzljODQzNTM0ZDM2MDAzMDdlYTE0MmE4ZWRh
ZTYuLjJkNDRlNzhhNWFmMmMxMWZjNzY5ZTE5OWY3MDZkZjA5YjFhNGFiZDYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvSW5kZXhlZERCL1dlYklEQlNlcnZlci5jcHAK
KysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9JbmRleGVkREIvV2ViSURCU2VydmVy
LmNwcApAQCAtNTksNiArNTksMjAgQEAgV2ViSURCU2VydmVyOjp+V2ViSURCU2VydmVyKCkKICAg
ICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogfQogCit2b2lkIFdlYklEQlNlcnZlcjo6Z2V0
T3JpZ2lucyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKEhhc2hTZXQ8V2ViQ29yZTo6U2VjdXJpdHlP
cmlnaW5EYXRhPiYmKT4mJiBjYWxsYmFjaykKK3sKKyAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWlu
KCkpOworCisgICAgcG9zdFRhc2soW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlz
KSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0oKSBtdXRhYmxlIHsKKyAgICAgICAgQVNT
RVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9z
ZXJ2ZXItPmxvY2soKSk7CisgICAgICAgIHBvc3RUYXNrUmVwbHkoQ3Jvc3NUaHJlYWRUYXNrKFtj
YWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCBvcmlnaW5zID0gY3Jvc3NUaHJlYWRDb3B5KG1f
c2VydmVyLT5nZXRPcmlnaW5zKCkpXSgpIG11dGFibGUgeworICAgICAgICAgICAgY2FsbGJhY2so
V1RGTW92ZShvcmlnaW5zKSk7CisgICAgICAgIH0pKTsKKyAgICB9KTsKK30KKwogdm9pZCBXZWJJ
REJTZXJ2ZXI6OmNsb3NlQW5kRGVsZXRlRGF0YWJhc2VzTW9kaWZpZWRTaW5jZShXYWxsVGltZSBt
b2RpZmljYXRpb25UaW1lLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY2FsbGJhY2spCiB7
CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3MvSW5kZXhlZERCL1dlYklEQlNlcnZlci5oIGIvU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9JbmRleGVkREIvV2ViSURCU2VydmVyLmgKaW5kZXggZjc5YjNmMDhm
OTBlMmM5NTZlY2RhN2I3YTMxZDE3ZTdmYTMxYzExMS4uM2VhMTE2YzBiOGE1NGJmMTk5NjBmOWI1
YzA2N2JmYjcwOGQxOTc2NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9JbmRleGVkREIvV2ViSURCU2VydmVyLmgKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9JbmRleGVkREIvV2ViSURCU2VydmVyLmgKQEAgLTQ3LDYgKzQ3LDcgQEAgY2xhc3MgV2Vi
SURCU2VydmVyIGZpbmFsIDogcHVibGljIENyb3NzVGhyZWFkVGFza0hhbmRsZXIsIHB1YmxpYyBJ
UEM6OkNvbm5lY3Rpb24KIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPFdlYklEQlNlcnZlcj4gY3Jl
YXRlKFBBTDo6U2Vzc2lvbklELCBjb25zdCBTdHJpbmcmIGRpcmVjdG9yeSwgV2ViQ29yZTo6SURC
U2VydmVyOjpJREJTZXJ2ZXI6OlN0b3JhZ2VRdW90YU1hbmFnZXJTcGFjZVJlcXVlc3RlciYmKTsK
IAorICAgIHZvaWQgZ2V0T3JpZ2lucyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKEhhc2hTZXQ8V2Vi
Q29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhPiYmKT4mJik7CiAgICAgdm9pZCBjbG9zZUFuZERlbGV0
ZURhdGFiYXNlc01vZGlmaWVkU2luY2UoV2FsbFRpbWUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
KT4mJiBjYWxsYmFjayk7CiAgICAgdm9pZCBjbG9zZUFuZERlbGV0ZURhdGFiYXNlc0Zvck9yaWdp
bnMoY29uc3QgVmVjdG9yPFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YT4mLCBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKCk+JiYgY2FsbGJhY2spOwogICAgIHZvaWQgcmVuYW1lT3JpZ2luKGNvbnN0
IFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YSYsIGNvbnN0IFdlYkNvcmU6OlNlY3VyaXR5T3Jp
Z2luRGF0YSYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcCBiL1NvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwCmluZGV4IDMwMDUzZGE0ZDc3YTMx
YTlmZmEyYjUyY2EzMWYzY2M3N2E5MjkxNDMuLjg2OWZlZmNlNjg0ZjUzOTgzNDE2MzA0YzY3ZTc3
MzEzZjZmNWI1ODMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0
d29ya1Byb2Nlc3MuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29y
a1Byb2Nlc3MuY3BwCkBAIC00NjUsMTEgKzQ2NSw4IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmFk
ZFNlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2VyKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgdWlu
CiAgICAgYXV0byBpc05ld0VudHJ5ID0gbV9zZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcnMuZW5z
dXJlKHNlc3Npb25JRCwgW2RlZmF1bHRRdW90YSwgZGVmYXVsdFRoaXJkUGFydHlRdW90YSwgJmNh
Y2hlUm9vdFBhdGhdIHsKICAgICAgICAgcmV0dXJuIG1ha2VVbmlxdWU8U2Vzc2lvblN0b3JhZ2VR
dW90YU1hbmFnZXI+KGNhY2hlUm9vdFBhdGgsIGRlZmF1bHRRdW90YSwgZGVmYXVsdFRoaXJkUGFy
dHlRdW90YSk7CiAgICAgfSkuaXNOZXdFbnRyeTsKLSAgICBpZiAoaXNOZXdFbnRyeSkgeworICAg
IGlmIChpc05ld0VudHJ5KQogICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFu
ZW50bHkoY2FjaGVSb290UGF0aEhhbmRsZSk7Ci0gICAgICAgIGlmICghY2FjaGVSb290UGF0aC5p
c0VtcHR5KCkpCi0gICAgICAgICAgICBwb3N0U3RvcmFnZVRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRU
YXNrKCp0aGlzLCAmTmV0d29ya1Byb2Nlc3M6OmVuc3VyZVBhdGhFeGlzdHMsIGNhY2hlUm9vdFBh
dGgpKTsKLSAgICB9CiB9CiAKIHZvaWQgTmV0d29ya1Byb2Nlc3M6OnJlbW92ZVNlc3Npb25TdG9y
YWdlUXVvdGFNYW5hZ2VyKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkKQEAgLTE1NTgsMTMgKzE1
NTUsMTAgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6ZmV0Y2hXZWJzaXRlRGF0YShQQUw6OlNlc3Np
b25JRCBzZXNzaW9uSUQsIE9wdGlvblNldDxXZWJzaXQKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRB
QkFTRSkKICAgICBhdXRvIHBhdGggPSBtX2lkYkRhdGFiYXNlUGF0aHMuZ2V0KHNlc3Npb25JRCk7
CiAgICAgaWYgKCFwYXRoLmlzRW1wdHkoKSAmJiB3ZWJzaXRlRGF0YVR5cGVzLmNvbnRhaW5zKFdl
YnNpdGVEYXRhVHlwZTo6SW5kZXhlZERCRGF0YWJhc2VzKSkgewotICAgICAgICAvLyBGSVhNRTog
UGljayB0aGUgcmlnaHQgZGF0YWJhc2Ugc3RvcmUgYmFzZWQgb24gdGhlIHNlc3Npb24gSUQuCi0g
ICAgICAgIHBvc3RTdG9yYWdlVGFzayhDcm9zc1RocmVhZFRhc2soW3RoaXMsIGNhbGxiYWNrQWdn
cmVnYXRvciwgcGF0aCA9IGNyb3NzVGhyZWFkQ29weShwYXRoKV0oKSBtdXRhYmxlIHsKLSAgICAg
ICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbY2FsbGJhY2tBZ2dyZWdhdG9yID0gV1RG
TW92ZShjYWxsYmFja0FnZ3JlZ2F0b3IpLCBzZWN1cml0eU9yaWdpbnMgPSBpbmRleGVkRGF0YWJh
c2VPcmlnaW5zKHBhdGgpXSB7Ci0gICAgICAgICAgICAgICAgZm9yIChjb25zdCBhdXRvJiBzZWN1
cml0eU9yaWdpbiA6IHNlY3VyaXR5T3JpZ2lucykKLSAgICAgICAgICAgICAgICAgICAgY2FsbGJh
Y2tBZ2dyZWdhdG9yLT5tX3dlYnNpdGVEYXRhLmVudHJpZXMuYXBwZW5kKHsgc2VjdXJpdHlPcmln
aW4sIFdlYnNpdGVEYXRhVHlwZTo6SW5kZXhlZERCRGF0YWJhc2VzLCAwIH0pOwotICAgICAgICAg
ICAgfSk7Ci0gICAgICAgIH0pKTsKKyAgICAgICAgd2ViSURCU2VydmVyKHNlc3Npb25JRCkuZ2V0
T3JpZ2lucyhbY2FsbGJhY2tBZ2dyZWdhdG9yXShhdXRvJiYgb3JpZ2lucykgeworICAgICAgICAg
ICAgd2hpbGUgKCFvcmlnaW5zLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICBjYWxsYmFja0Fn
Z3JlZ2F0b3ItPm1fd2Vic2l0ZURhdGEuZW50cmllcy5hcHBlbmQoeyBvcmlnaW5zLnRha2VBbnko
KSwgV2Vic2l0ZURhdGFUeXBlOjpJbmRleGVkREJEYXRhYmFzZXMsIDAgfSk7CisgICAgICAgIH0p
OwogICAgIH0KICNlbmRpZgogCkBAIC0xOTU2LDIyICsxOTUwLDEzIEBAIHZvaWQgTmV0d29ya1By
b2Nlc3M6OmRlbGV0ZUFuZFJlc3RyaWN0V2Vic2l0ZURhdGFGb3JSZWdpc3RyYWJsZURvbWFpbnMo
UEFMOjpTZXNzCiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCiAgICAgYXV0byBwYXRoID0g
bV9pZGJEYXRhYmFzZVBhdGhzLmdldChzZXNzaW9uSUQpOwogICAgIGlmICghcGF0aC5pc0VtcHR5
KCkgJiYgd2Vic2l0ZURhdGFUeXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5cGU6OkluZGV4ZWRE
QkRhdGFiYXNlcykpIHsKLSAgICAgICAgLy8gRklYTUU6IFBpY2sgdGhlIHJpZ2h0IGRhdGFiYXNl
IHN0b3JlIGJhc2VkIG9uIHRoZSBzZXNzaW9uIElELgotICAgICAgICBwb3N0U3RvcmFnZVRhc2so
Q3Jvc3NUaHJlYWRUYXNrKFt0aGlzLCBzZXNzaW9uSUQsIGNhbGxiYWNrQWdncmVnYXRvciwgcGF0
aCA9IGNyb3NzVGhyZWFkQ29weShwYXRoKSwgZG9tYWluc1RvRGVsZXRlQWxsTm9uQ29va2llV2Vi
c2l0ZURhdGFGb3IgPSBjcm9zc1RocmVhZENvcHkoZG9tYWluc1RvRGVsZXRlQWxsTm9uQ29va2ll
V2Vic2l0ZURhdGFGb3IpXSgpIG11dGFibGUgewotICAgICAgICAgICAgUnVuTG9vcDo6bWFpbigp
LmRpc3BhdGNoKFt0aGlzLCBzZXNzaW9uSUQsIGRvbWFpbnNUb0RlbGV0ZUFsbE5vbkNvb2tpZVdl
YnNpdGVEYXRhRm9yID0gV1RGTW92ZShkb21haW5zVG9EZWxldGVBbGxOb25Db29raWVXZWJzaXRl
RGF0YUZvciksIGNhbGxiYWNrQWdncmVnYXRvciwgc2VjdXJpdHlPcmlnaW5zID0gaW5kZXhlZERh
dGFiYXNlT3JpZ2lucyhwYXRoKV0gewotICAgICAgICAgICAgICAgIFZlY3RvcjxTZWN1cml0eU9y
aWdpbkRhdGE+IGVudHJpZXNUb0RlbGV0ZTsKLSAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGF1
dG8mIHNlY3VyaXR5T3JpZ2luIDogc2VjdXJpdHlPcmlnaW5zKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIGF1dG8gZG9tYWluID0gUmVnaXN0cmFibGVEb21haW46OnVuY2hlY2tlZENyZWF0ZUZyb21I
b3N0KHNlY3VyaXR5T3JpZ2luLmhvc3QpOwotICAgICAgICAgICAgICAgICAgICBpZiAoIWRvbWFp
bnNUb0RlbGV0ZUFsbE5vbkNvb2tpZVdlYnNpdGVEYXRhRm9yLmNvbnRhaW5zKGRvbWFpbikpCi0g
ICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgd2ViSURCU2VydmVyKHNl
c3Npb25JRCkuZ2V0T3JpZ2lucyhbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMp
LCBzZXNzaW9uSUQsIGNhbGxiYWNrQWdncmVnYXRvciwgZG9tYWluc1RvRGVsZXRlQWxsTm9uQ29v
a2llV2Vic2l0ZURhdGFGb3JdKGF1dG8mJiBvcmlnaW5zKSB7CisgICAgICAgICAgICBpZiAoIW1f
d2ViSURCU2VydmVycy5jb250YWlucyhzZXNzaW9uSUQpKQorICAgICAgICAgICAgICAgIHJldHVy
bjsKIAotICAgICAgICAgICAgICAgICAgICBlbnRyaWVzVG9EZWxldGUuYXBwZW5kKHNlY3VyaXR5
T3JpZ2luKTsKLSAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5tX2RvbWFp
bnMuYWRkKGRvbWFpbik7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgd2Vi
SURCU2VydmVyKHNlc3Npb25JRCkuY2xvc2VBbmREZWxldGVEYXRhYmFzZXNGb3JPcmlnaW5zKGVu
dHJpZXNUb0RlbGV0ZSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICAgICAgICAgIH0p
OwotICAgICAgICB9KSk7CisgICAgICAgICAgICBhdXRvIG9yaWdpbnNUb0RlbGV0ZSA9IGZpbHRl
ckZvclJlZ2lzdHJhYmxlRG9tYWlucyhvcmlnaW5zLCBkb21haW5zVG9EZWxldGVBbGxOb25Db29r
aWVXZWJzaXRlRGF0YUZvciwgY2FsbGJhY2tBZ2dyZWdhdG9yLT5tX2RvbWFpbnMpOworICAgICAg
ICAgICAgd2ViSURCU2VydmVyKHNlc3Npb25JRCkuY2xvc2VBbmREZWxldGVEYXRhYmFzZXNGb3JP
cmlnaW5zKG9yaWdpbnNUb0RlbGV0ZSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKKyAgICAg
ICAgfSk7CiAgICAgfQogI2VuZGlmCiAgICAgCkBAIC0yMTAxLDEzICsyMDg2LDEwIEBAIHZvaWQg
TmV0d29ya1Byb2Nlc3M6OnJlZ2lzdHJhYmxlRG9tYWluc1dpdGhXZWJzaXRlRGF0YShQQUw6OlNl
c3Npb25JRCBzZXNzaW9uSUQsCiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCiAgICAgYXV0
byBwYXRoID0gbV9pZGJEYXRhYmFzZVBhdGhzLmdldChzZXNzaW9uSUQpOwogICAgIGlmICghcGF0
aC5pc0VtcHR5KCkgJiYgd2Vic2l0ZURhdGFUeXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5cGU6
OkluZGV4ZWREQkRhdGFiYXNlcykpIHsKLSAgICAgICAgLy8gRklYTUU6IFBpY2sgdGhlIHJpZ2h0
IGRhdGFiYXNlIHN0b3JlIGJhc2VkIG9uIHRoZSBzZXNzaW9uIElELgotICAgICAgICBwb3N0U3Rv
cmFnZVRhc2soQ3Jvc3NUaHJlYWRUYXNrKFt0aGlzLCBjYWxsYmFja0FnZ3JlZ2F0b3IsIHBhdGgg
PSBjcm9zc1RocmVhZENvcHkocGF0aCldKCkgbXV0YWJsZSB7Ci0gICAgICAgICAgICBSdW5Mb29w
OjptYWluKCkuZGlzcGF0Y2goW2NhbGxiYWNrQWdncmVnYXRvciwgc2VjdXJpdHlPcmlnaW5zID0g
aW5kZXhlZERhdGFiYXNlT3JpZ2lucyhwYXRoKV0gewotICAgICAgICAgICAgICAgIGZvciAoY29u
c3QgYXV0byYgc2VjdXJpdHlPcmlnaW4gOiBzZWN1cml0eU9yaWdpbnMpCi0gICAgICAgICAgICAg
ICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+bV93ZWJzaXRlRGF0YS5lbnRyaWVzLmFwcGVuZCh7
IHNlY3VyaXR5T3JpZ2luLCBXZWJzaXRlRGF0YVR5cGU6OkluZGV4ZWREQkRhdGFiYXNlcywgMCB9
KTsKLSAgICAgICAgICAgIH0pOwotICAgICAgICB9KSk7CisgICAgICAgIHdlYklEQlNlcnZlcihz
ZXNzaW9uSUQpLmdldE9yaWdpbnMoW2NhbGxiYWNrQWdncmVnYXRvcl0oYXV0byYmIG9yaWdpbnMp
IHsKKyAgICAgICAgICAgIHdoaWxlICghb3JpZ2lucy5pc0VtcHR5KCkpCisgICAgICAgICAgICAg
ICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5tX3dlYnNpdGVEYXRhLmVudHJpZXMuYXBwZW5kKHsgb3Jp
Z2lucy50YWtlQW55KCksIFdlYnNpdGVEYXRhVHlwZTo6SW5kZXhlZERCRGF0YWJhc2VzLCAwIH0p
OworICAgICAgICB9KTsKICAgICB9CiAjZW5kaWYKICAgICAKQEAgLTI0MjUsNzIgKzI0MDcsNiBA
QCBXZWJJREJTZXJ2ZXImIE5ldHdvcmtQcm9jZXNzOjp3ZWJJREJTZXJ2ZXIoUEFMOjpTZXNzaW9u
SUQgc2Vzc2lvbklEKQogICAgIH0pLml0ZXJhdG9yLT52YWx1ZTsKIH0KIAotdm9pZCBOZXR3b3Jr
UHJvY2Vzczo6ZW5zdXJlUGF0aEV4aXN0cyhjb25zdCBTdHJpbmcmIHBhdGgpCi17Ci0gICAgQVNT
RVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0gICAgCi0gICAgaWYgKCFGaWxlU3lzdGVtOjptYWtl
QWxsRGlyZWN0b3JpZXMocGF0aCkpCi0gICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIG1ha2Ug
YWxsIGRpcmVjdG9yaWVzIGZvciBwYXRoICclcyciLCBwYXRoLnV0ZjgoKS5kYXRhKCkpOwotfQot
Ci12b2lkIE5ldHdvcmtQcm9jZXNzOjpwb3N0U3RvcmFnZVRhc2soQ3Jvc3NUaHJlYWRUYXNrJiYg
dGFzaykKLXsKLSAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwotICAgIAotICAgIExvY2tI
b2xkZXIgbG9ja2VyKG1fc3RvcmFnZVRhc2tNdXRleCk7Ci0gICAgCi0gICAgbV9zdG9yYWdlVGFz
a3MuYXBwZW5kKFdURk1vdmUodGFzaykpOwotICAgIAotICAgIG1fc3RvcmFnZVRhc2tRdWV1ZS0+
ZGlzcGF0Y2goW3RoaXNdIHsKLSAgICAgICAgcGVyZm9ybU5leHRTdG9yYWdlVGFzaygpOwotICAg
IH0pOwotfQotCi12b2lkIE5ldHdvcmtQcm9jZXNzOjpwZXJmb3JtTmV4dFN0b3JhZ2VUYXNrKCkK
LXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLSAgICAKLSAgICBDcm9zc1RocmVh
ZFRhc2sgdGFzazsKLSAgICB7Ci0gICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fc3RvcmFnZVRh
c2tNdXRleCk7Ci0gICAgICAgIEFTU0VSVCghbV9zdG9yYWdlVGFza3MuaXNFbXB0eSgpKTsKLSAg
ICAgICAgdGFzayA9IG1fc3RvcmFnZVRhc2tzLnRha2VGaXJzdCgpOwotICAgIH0KLSAgICAKLSAg
ICB0YXNrLnBlcmZvcm1UYXNrKCk7Ci19Ci0KLXZvaWQgTmV0d29ya1Byb2Nlc3M6OmNvbGxlY3RJ
bmRleGVkRGF0YWJhc2VPcmlnaW5zRm9yVmVyc2lvbihjb25zdCBTdHJpbmcmIHBhdGgsIEhhc2hT
ZXQ8V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhPiYgc2VjdXJpdHlPcmlnaW5zKQotewotICAg
IGlmIChwYXRoLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZm9yIChhdXRvJiB0
b3BPcmlnaW5QYXRoIDogRmlsZVN5c3RlbTo6bGlzdERpcmVjdG9yeShwYXRoLCAiKiIpKSB7Ci0g
ICAgICAgIGF1dG8gZGF0YWJhc2VJZGVudGlmaWVyID0gRmlsZVN5c3RlbTo6cGF0aEdldEZpbGVO
YW1lKHRvcE9yaWdpblBhdGgpOwotICAgICAgICBpZiAoYXV0byBzZWN1cml0eU9yaWdpbiA9IFNl
Y3VyaXR5T3JpZ2luRGF0YTo6ZnJvbURhdGFiYXNlSWRlbnRpZmllcihkYXRhYmFzZUlkZW50aWZp
ZXIpKSB7Ci0gICAgICAgICAgICBzZWN1cml0eU9yaWdpbnMuYWRkKFdURk1vdmUoKnNlY3VyaXR5
T3JpZ2luKSk7Ci0gICAgICAgIAotICAgICAgICAgICAgZm9yIChhdXRvJiBvcmlnaW5QYXRoIDog
RmlsZVN5c3RlbTo6bGlzdERpcmVjdG9yeSh0b3BPcmlnaW5QYXRoLCAiKiIpKSB7Ci0gICAgICAg
ICAgICAgICAgZGF0YWJhc2VJZGVudGlmaWVyID0gRmlsZVN5c3RlbTo6cGF0aEdldEZpbGVOYW1l
KG9yaWdpblBhdGgpOwotICAgICAgICAgICAgICAgIGlmIChhdXRvIHNlY3VyaXR5T3JpZ2luID0g
U2VjdXJpdHlPcmlnaW5EYXRhOjpmcm9tRGF0YWJhc2VJZGVudGlmaWVyKGRhdGFiYXNlSWRlbnRp
ZmllcikpCi0gICAgICAgICAgICAgICAgICAgIHNlY3VyaXR5T3JpZ2lucy5hZGQoV1RGTW92ZSgq
c2VjdXJpdHlPcmlnaW4pKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLX0KLQot
SGFzaFNldDxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGE+IE5ldHdvcmtQcm9jZXNzOjppbmRl
eGVkRGF0YWJhc2VPcmlnaW5zKGNvbnN0IFN0cmluZyYgcGF0aCkKLXsKLSAgICBpZiAocGF0aC5p
c0VtcHR5KCkpCi0gICAgICAgIHJldHVybiB7IH07Ci0gICAgCi0gICAgSGFzaFNldDxXZWJDb3Jl
OjpTZWN1cml0eU9yaWdpbkRhdGE+IHNlY3VyaXR5T3JpZ2luczsKLSAgICBjb2xsZWN0SW5kZXhl
ZERhdGFiYXNlT3JpZ2luc0ZvclZlcnNpb24oRmlsZVN5c3RlbTo6cGF0aEJ5QXBwZW5kaW5nQ29t
cG9uZW50KHBhdGgsICJ2MCIpLCBzZWN1cml0eU9yaWdpbnMpOwotICAgIGNvbGxlY3RJbmRleGVk
RGF0YWJhc2VPcmlnaW5zRm9yVmVyc2lvbihGaWxlU3lzdGVtOjpwYXRoQnlBcHBlbmRpbmdDb21w
b25lbnQocGF0aCwgInYxIiksIHNlY3VyaXR5T3JpZ2lucyk7Ci0KLSAgICByZXR1cm4gc2VjdXJp
dHlPcmlnaW5zOwotfQotCiB2b2lkIE5ldHdvcmtQcm9jZXNzOjphZGRJbmRleGVkRGF0YWJhc2VT
ZXNzaW9uKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgU3RyaW5nJiBpbmRleGVkRGF0YWJhc2VE
aXJlY3RvcnksIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSYgaGFuZGxlKQogewogICAgIC8vICoq
KioqKioqKgpAQCAtMjQ5OSw4ICsyNDE1LDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6YWRkSW5k
ZXhlZERhdGFiYXNlU2Vzc2lvbihQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIFN0cmluZyYKICAg
ICBhdXRvIGFkZFJlc3VsdCA9IG1faWRiRGF0YWJhc2VQYXRocy5hZGQoc2Vzc2lvbklELCBpbmRl
eGVkRGF0YWJhc2VEaXJlY3RvcnkpOwogICAgIGlmIChhZGRSZXN1bHQuaXNOZXdFbnRyeSkgewog
ICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50bHkoaGFuZGxlKTsKLSAg
ICAgICAgaWYgKCFpbmRleGVkRGF0YWJhc2VEaXJlY3RvcnkuaXNFbXB0eSgpKQotICAgICAgICAg
ICAgcG9zdFN0b3JhZ2VUYXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJk5ldHdvcmtQ
cm9jZXNzOjplbnN1cmVQYXRoRXhpc3RzLCBpbmRleGVkRGF0YWJhc2VEaXJlY3RvcnkpKTsKICAg
ICAgICAgc2V0U2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXJJREJSb290UGF0aChzZXNzaW9uSUQs
IGluZGV4ZWREYXRhYmFzZURpcmVjdG9yeSk7CiAgICAgfQogfQpAQCAtMjYzNSwxMSArMjU0OSw4
IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmFkZFNlcnZpY2VXb3JrZXJTZXNzaW9uKFBBTDo6U2Vz
c2lvbklEIHNlc3Npb25JRCwgYm9vbCBwcm9jCiAgICAgICAgIHByb2Nlc3NUZXJtaW5hdGlvbkRl
bGF5RW5hYmxlZAogICAgIH07CiAgICAgYXV0byBhZGRSZXN1bHQgPSBtX3NlcnZpY2VXb3JrZXJJ
bmZvLmFkZChzZXNzaW9uSUQsIFdURk1vdmUoaW5mbykpOwotICAgIGlmIChhZGRSZXN1bHQuaXNO
ZXdFbnRyeSkgeworICAgIGlmIChhZGRSZXN1bHQuaXNOZXdFbnRyeSkKICAgICAgICAgU2FuZGJv
eEV4dGVuc2lvbjo6Y29uc3VtZVBlcm1hbmVudGx5KGhhbmRsZSk7Ci0gICAgICAgIGlmICghYWRk
UmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5kYXRhYmFzZVBhdGguaXNFbXB0eSgpKQotICAgICAgICAg
ICAgcG9zdFN0b3JhZ2VUYXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJk5ldHdvcmtQ
cm9jZXNzOjplbnN1cmVQYXRoRXhpc3RzLCBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmRhdGFi
YXNlUGF0aCkpOwotICAgIH0KIH0KICNlbmRpZiAvLyBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3Mu
aCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaAppbmRleCAy
YTRlOWY2MmNhZjdmMDFiNzEyNmI1ODliNTQ0YjVkNzIzNzAzMGQ0Li41OGZiZjYzOTE4ZTE5NWI0
NmFhNTg4YjNlNmM4MTA2NzM4NzE1MzhhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmgKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9OZXR3b3JrUHJvY2Vzcy5oCkBAIC00NjYsOCArNDY2LDYgQEAgcHJpdmF0ZToKIAogI2lm
IEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQogICAgIHZvaWQgYWRkSW5kZXhlZERhdGFiYXNlU2Vz
c2lvbihQQUw6OlNlc3Npb25JRCwgU3RyaW5nJiwgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlJik7
Ci0gICAgdm9pZCBjb2xsZWN0SW5kZXhlZERhdGFiYXNlT3JpZ2luc0ZvclZlcnNpb24oY29uc3Qg
U3RyaW5nJiwgSGFzaFNldDxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGE+Jik7Ci0gICAgSGFz
aFNldDxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGE+IGluZGV4ZWREYXRhYmFzZU9yaWdpbnMo
Y29uc3QgU3RyaW5nJiBwYXRoKTsKICAgICBSZWY8V2ViSURCU2VydmVyPiBjcmVhdGVXZWJJREJT
ZXJ2ZXIoUEFMOjpTZXNzaW9uSUQpOwogICAgIHZvaWQgc2V0U2Vzc2lvblN0b3JhZ2VRdW90YU1h
bmFnZXJJREJSb290UGF0aChQQUw6OlNlc3Npb25JRCwgY29uc3QgU3RyaW5nJiBpZGJSb290UGF0
aCk7CiAgICAgdm9pZCByZW1vdmVXZWJJREJTZXJ2ZXJJZlBvc3NpYmxlKFBBTDo6U2Vzc2lvbklE
KTsKQEAgLTQ4NSwxMSArNDgzLDYgQEAgcHJpdmF0ZToKICAgICB2b2lkIGFkZFNlcnZpY2VXb3Jr
ZXJTZXNzaW9uKFBBTDo6U2Vzc2lvbklELCBib29sIHByb2Nlc3NUZXJtaW5hdGlvbkRlbGF5RW5h
YmxlZCwgU3RyaW5nJiYgc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeSwgY29uc3Qg
U2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlJik7CiAjZW5kaWYKIAotICAgIHZvaWQgcG9zdFN0b3Jh
Z2VUYXNrKENyb3NzVGhyZWFkVGFzayYmKTsKLSAgICAvLyBGb3IgZXhlY3V0aW9uIG9uIHdvcmsg
cXVldWUgdGhyZWFkIG9ubHkuCi0gICAgdm9pZCBwZXJmb3JtTmV4dFN0b3JhZ2VUYXNrKCk7Ci0g
ICAgdm9pZCBlbnN1cmVQYXRoRXhpc3RzKGNvbnN0IFN0cmluZyYgcGF0aCk7Ci0KICAgICBjbGFz
cyBTZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlciB7CiAgICAgICAgIFdURl9NQUtFX0ZBU1RfQUxM
T0NBVEVEOwogICAgIHB1YmxpYzoKQEAgLTU3MCwxNSArNTYzLDEwIEBAIHByaXZhdGU6CiAgICAg
V2ViU1FMaXRlRGF0YWJhc2VUcmFja2VyIG1fd2ViU1FMaXRlRGF0YWJhc2VUcmFja2VyOwogI2Vu
ZGlmCiAKLSAgICBSZWY8V29ya1F1ZXVlPiBtX3N0b3JhZ2VUYXNrUXVldWUgeyBXb3JrUXVldWU6
OmNyZWF0ZSgiY29tLmFwcGxlLldlYktpdC5TdG9yYWdlVGFzayIpIH07Ci0KICNpZiBFTkFCTEUo
SU5ERVhFRF9EQVRBQkFTRSkKICAgICBIYXNoTWFwPFBBTDo6U2Vzc2lvbklELCBTdHJpbmc+IG1f
aWRiRGF0YWJhc2VQYXRoczsKICAgICBIYXNoTWFwPFBBTDo6U2Vzc2lvbklELCBSZWZQdHI8V2Vi
SURCU2VydmVyPj4gbV93ZWJJREJTZXJ2ZXJzOwogI2VuZGlmCi0KLSAgICBEZXF1ZTxDcm9zc1Ro
cmVhZFRhc2s+IG1fc3RvcmFnZVRhc2tzOwotICAgIExvY2sgbV9zdG9yYWdlVGFza011dGV4Owog
ICAgIAogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKICAgICBzdHJ1Y3QgU2VydmljZVdvcmtl
ckluZm8gewo=
</data>

          </attachment>
      

    </bug>

</bugzilla>