<?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>200817</bug_id>
          
          <creation_ts>2019-08-16 09:34:18 -0700</creation_ts>
          <short_desc>Clarify StorageManagerSet / StorageManager threading model after r248734</short_desc>
          <delta_ts>2019-08-16 15:06:22 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit2</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>200373</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Dumez">cdumez</reporter>
          <assigned_to name="Chris Dumez">cdumez</assigned_to>
          <cc>achristensen</cc>
    
    <cc>beidson</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ggaren</cc>
    
    <cc>sihui_liu</cc>
    
    <cc>youennf</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1562055</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2019-08-16 09:34:18 -0700</bug_when>
    <thetext>Clarify StorageManagerSet / StorageManager threading model after r248734. StorageManager is now a background thread object but it still calls its completion handlers on the main thread, which is very error prone.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1562056</commentid>
    <comment_count>1</comment_count>
      <attachid>376503</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2019-08-16 09:38:32 -0700</bug_when>
    <thetext>Created attachment 376503
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1562060</commentid>
    <comment_count>2</comment_count>
      <attachid>376505</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2019-08-16 09:45:00 -0700</bug_when>
    <thetext>Created attachment 376505
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1562071</commentid>
    <comment_count>3</comment_count>
      <attachid>376505</attachid>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2019-08-16 10:05:01 -0700</bug_when>
    <thetext>Comment on attachment 376505
Patch

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

&gt; Source/WebKit/NetworkProcess/WebStorage/StorageManagerSet.cpp:188
&gt;  void StorageManagerSet::getSessionStorageOrigins(PAL::SessionID sessionID, CompletionHandler&lt;void(HashSet&lt;WebCore::SecurityOriginData&gt;&amp;&amp;)&gt;&amp;&amp; completionHandler)

Probably not very related: CompletionHandler&lt;void(HashSet&lt;WebCore::SecurityOriginData&gt;&amp;&amp;)&gt;&amp;&amp; here can be changed to GetOriginsCallback&amp;&amp;.

&gt; Source/WebKit/NetworkProcess/WebStorage/StorageManagerSet.cpp:203
&gt;  void StorageManagerSet::deleteSessionStorage(PAL::SessionID sessionID, CompletionHandler&lt;void()&gt;&amp;&amp; completionHandler)

CompletionHandler&lt;void()&gt;&amp;&amp; =&gt; DeleteCallback&amp;&amp;

&gt; Source/WebKit/NetworkProcess/WebStorage/StorageManagerSet.cpp:270
&gt;  void StorageManagerSet::getLocalStorageOriginDetails(PAL::SessionID sessionID, CompletionHandler&lt;void(Vector&lt;LocalStorageDatabaseTracker::OriginDetails&gt;&amp;&amp;)&gt;&amp;&amp; completionHandler)

CompletionHandler&lt;void(Vector&lt;LocalStorageDatabaseTracker::OriginDetails&gt;&amp;&amp;)&gt;&amp;&amp; =&gt; GetOriginDetailsCallback&amp;&amp;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1562075</commentid>
    <comment_count>4</comment_count>
      <attachid>376508</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2019-08-16 10:13:17 -0700</bug_when>
    <thetext>Created attachment 376508
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1562086</commentid>
    <comment_count>5</comment_count>
      <attachid>376508</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2019-08-16 10:35:28 -0700</bug_when>
    <thetext>Comment on attachment 376508
Patch

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

r=me

&gt; Source/WebKit/NetworkProcess/WebStorage/StorageManagerSet.cpp:279
&gt; +        auto originDetails = storageManager-&gt;getLocalStorageOriginDetails();
&gt; +        RunLoop::main().dispatch([completionHandler = WTFMove(completionHandler), originDetails = crossThreadCopy(originDetails)]() mutable {

Kind of unfortunate that this idiom creates a throw-away copy followed by a cross-thread copy.

Maybe we should consider renaming getLocalStorageOriginDetails() -&gt; getLocalStorageOriginDetailsCrossThreadCopy(), and change the implementation to produce a crossThreadCopy.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1562087</commentid>
    <comment_count>6</comment_count>
      <attachid>376508</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2019-08-16 10:36:36 -0700</bug_when>
    <thetext>Comment on attachment 376508
Patch

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

&gt;&gt; Source/WebKit/NetworkProcess/WebStorage/StorageManagerSet.cpp:279
&gt;&gt; +        RunLoop::main().dispatch([completionHandler = WTFMove(completionHandler), originDetails = crossThreadCopy(originDetails)]() mutable {
&gt; 
&gt; Kind of unfortunate that this idiom creates a throw-away copy followed by a cross-thread copy.
&gt; 
&gt; Maybe we should consider renaming getLocalStorageOriginDetails() -&gt; getLocalStorageOriginDetailsCrossThreadCopy(), and change the implementation to produce a crossThreadCopy.

Ok, I can do that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1562089</commentid>
    <comment_count>7</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2019-08-16 10:40:36 -0700</bug_when>
    <thetext>(In reply to Chris Dumez from comment #6)
&gt; Comment on attachment 376508 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=376508&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WebKit/NetworkProcess/WebStorage/StorageManagerSet.cpp:279
&gt; &gt;&gt; +        RunLoop::main().dispatch([completionHandler = WTFMove(completionHandler), originDetails = crossThreadCopy(originDetails)]() mutable {
&gt; &gt; 
&gt; &gt; Kind of unfortunate that this idiom creates a throw-away copy followed by a cross-thread copy.
&gt; &gt; 
&gt; &gt; Maybe we should consider renaming getLocalStorageOriginDetails() -&gt; getLocalStorageOriginDetailsCrossThreadCopy(), and change the implementation to produce a crossThreadCopy.
&gt; 
&gt; Ok, I can do that.

I would just like to point out that the previous code was already creating a throw-away copy since LocalStorageDatabaseTracker::originDetails() returns a new Vector. I merely moved the place where the Vector was crossThreadCopied.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1562090</commentid>
    <comment_count>8</comment_count>
      <attachid>376510</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2019-08-16 10:49:00 -0700</bug_when>
    <thetext>Created attachment 376510
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1562091</commentid>
    <comment_count>9</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2019-08-16 10:52:51 -0700</bug_when>
    <thetext>(In reply to Chris Dumez from comment #8)
&gt; Created attachment 376510 [details]
&gt; Patch

This latest iteration should have no perf impact as it always cross-thread-copies at the source.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1562094</commentid>
    <comment_count>10</comment_count>
      <attachid>376510</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2019-08-16 10:58:51 -0700</bug_when>
    <thetext>Comment on attachment 376510
Patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1562095</commentid>
    <comment_count>11</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2019-08-16 10:59:32 -0700</bug_when>
    <thetext>&gt; I would just like to point out that the previous code was already creating a
&gt; throw-away copy since LocalStorageDatabaseTracker::originDetails() returns a
&gt; new Vector. I merely moved the place where the Vector was crossThreadCopied.

True! :P

I guess I only noticed this because the new code is clearer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1562096</commentid>
    <comment_count>12</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2019-08-16 11:01:26 -0700</bug_when>
    <thetext>(In reply to Geoffrey Garen from comment #11)
&gt; &gt; I would just like to point out that the previous code was already creating a
&gt; &gt; throw-away copy since LocalStorageDatabaseTracker::originDetails() returns a
&gt; &gt; new Vector. I merely moved the place where the Vector was crossThreadCopied.
&gt; 
&gt; True! :P
&gt; 
&gt; I guess I only noticed this because the new code is clearer.

Your point still stands for the other 2 calls sites. You just happened to comment on the only one when there is no perf-hit :P</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1562100</commentid>
    <comment_count>13</comment_count>
      <attachid>376510</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-08-16 11:15:28 -0700</bug_when>
    <thetext>Comment on attachment 376510
Patch

Clearing flags on attachment: 376510

Committed r248779: &lt;https://trac.webkit.org/changeset/248779&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1562101</commentid>
    <comment_count>14</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-08-16 11:15:29 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1562239</commentid>
    <comment_count>15</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-08-16 15:06:22 -0700</bug_when>
    <thetext>&lt;rdar://problem/54409115&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>376503</attachid>
            <date>2019-08-16 09:38:32 -0700</date>
            <delta_ts>2019-08-16 09:44:59 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-200817-20190816093831.patch</filename>
            <type>text/plain</type>
            <size>15371</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ4NzcxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGJiN2FlN2NkM2Q5NThkYzMx
OTRlZjNhYjIyMThlMmQ1YTU3MDE5NzYuLjUzZmM3NmY1OGMwMmI4YzFlMzczZTRjYzJmZTYwOWVk
MDIwOTQzYmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzcgQEAKKzIwMTktMDgtMTYgIENocmlzIER1
bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KKworICAgICAgICBDbGFyaWZ5IFN0b3JhZ2VNYW5hZ2Vy
U2V0IC8gU3RvcmFnZU1hbmFnZXIgdGhyZWFkaW5nIG1vZGVsIGFmdGVyIHIyNDg3MzQKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMDgxNworCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENsYXJpZnkgU3RvcmFn
ZU1hbmFnZXJTZXQgLyBTdG9yYWdlTWFuYWdlciB0aHJlYWRpbmcgbW9kZWwgYWZ0ZXIgcjI0ODcz
NC4gU3RvcmFnZU1hbmFnZXIgaXMgbm93CisgICAgICAgIGEgYmFja2dyb3VuZCB0aHJlYWQgb2Jq
ZWN0IGJ1dCBpdCBzdGlsbCBjYWxscyBpdHMgY29tcGxldGlvbiBoYW5kbGVycyBvbiB0aGUgbWFp
biB0aHJlYWQsIHdoaWNoCisgICAgICAgIGlzIHZlcnkgZXJyb3IgcHJvbmUuIFRoZSBwYXR0ZXJu
IGluIFdlYktpdCBmb3IgdGhyZWFkIHNhZmV0eSBpcyB0aGF0IG1ldGhvZHMgc2hvdWxkIGFsd2F5
cyBjYWxsCisgICAgICAgIHRoZWlyIGNvbXBsZXRpb24gaGFuZGxlciBvZiB0aGUgdGhyZWFkIC8g
cXVldWUgdGhleSB3ZXJlIGNhbGxlZCBvbiB0aGVtc2VsdmVzLiBEb2luZyBkaWZmZXJlbnRseQor
ICAgICAgICBoYXMgY2F1c2VkIHNvIG1hbnkgdGhyZWFkLXNhZmV0eSBidWdzIGluIHRoZSBwYXN0
LgorCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdlTWFuYWdlci5j
cHA6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VNYW5hZ2VyOjpnZXRTZXNzaW9uU3RvcmFnZU9y
aWdpbnMgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlTWFuYWdlcjo6ZGVsZXRlU2Vz
c2lvblN0b3JhZ2VPcmlnaW5zKToKKyAgICAgICAgKFdlYktpdDo6U3RvcmFnZU1hbmFnZXI6OmRl
bGV0ZVNlc3Npb25TdG9yYWdlRW50cmllc0Zvck9yaWdpbnMpOgorICAgICAgICAoV2ViS2l0OjpT
dG9yYWdlTWFuYWdlcjo6Z2V0TG9jYWxTdG9yYWdlT3JpZ2lucyBjb25zdCk6CisgICAgICAgIChX
ZWJLaXQ6OlN0b3JhZ2VNYW5hZ2VyOjpnZXRMb2NhbFN0b3JhZ2VPcmlnaW5EZXRhaWxzIGNvbnN0
KToKKyAgICAgICAgKFdlYktpdDo6U3RvcmFnZU1hbmFnZXI6OmRlbGV0ZUxvY2FsU3RvcmFnZU9y
aWdpbnNNb2RpZmllZFNpbmNlKToKKyAgICAgICAgKFdlYktpdDo6U3RvcmFnZU1hbmFnZXI6OmRl
bGV0ZUxvY2FsU3RvcmFnZUVudHJpZXNGb3JPcmlnaW5zKToKKyAgICAgICAgKFdlYktpdDo6U3Rv
cmFnZU1hbmFnZXI6OmdldFNlc3Npb25TdG9yYWdlT3JpZ2lucyk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJLaXQ6OlN0b3JhZ2VNYW5hZ2VyOjpnZXRMb2NhbFN0b3JhZ2VPcmlnaW5zKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYktpdDo6U3RvcmFnZU1hbmFnZXI6OmdldExvY2FsU3RvcmFnZU9yaWdp
bkRldGFpbHMpOiBEZWxldGVkLgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL1dlYlN0b3JhZ2Uv
U3RvcmFnZU1hbmFnZXIuaDoKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9XZWJTdG9yYWdlL1N0
b3JhZ2VNYW5hZ2VyU2V0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6U3RvcmFnZU1hbmFnZXJTZXQ6
OmdldFNlc3Npb25TdG9yYWdlT3JpZ2lucyk6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VNYW5h
Z2VyU2V0OjpkZWxldGVTZXNzaW9uU3RvcmFnZSk6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VN
YW5hZ2VyU2V0OjpkZWxldGVTZXNzaW9uU3RvcmFnZUZvck9yaWdpbnMpOgorICAgICAgICAoV2Vi
S2l0OjpTdG9yYWdlTWFuYWdlclNldDo6Z2V0TG9jYWxTdG9yYWdlT3JpZ2lucyk6CisgICAgICAg
IChXZWJLaXQ6OlN0b3JhZ2VNYW5hZ2VyU2V0OjpkZWxldGVMb2NhbFN0b3JhZ2VNb2RpZmllZFNp
bmNlKToKKyAgICAgICAgKFdlYktpdDo6U3RvcmFnZU1hbmFnZXJTZXQ6OmRlbGV0ZUxvY2FsU3Rv
cmFnZUZvck9yaWdpbnMpOgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlTWFuYWdlclNldDo6Z2V0
TG9jYWxTdG9yYWdlT3JpZ2luRGV0YWlscyk6CisKIDIwMTktMDgtMTUgIFl1c3VrZSBTdXp1a2kg
IDx5c3V6dWtpQGFwcGxlLmNvbT4KIAogICAgICAgICBbV1RGXSBBZGQgbWFrZVVuaXF1ZTxUPiwg
d2hpY2ggZW5zdXJlcyBUIGlzIGZhc3QtYWxsb2NhdGVkLCBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RCBhbm5vdGF0aW9uIHBhcnQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3MvV2ViU3RvcmFnZS9TdG9yYWdlTWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL1dlYlN0b3JhZ2UvU3RvcmFnZU1hbmFnZXIuY3BwCmluZGV4IDY0ZGI0OTRiYWYwYTE3
MGYwMGY0YTRkN2Y5ZmYyNzFlNWYyNjVhNmYuLmEyYWYyMDAxMDI4OTFlNTQwYTMyMzFiZjczNDA2
NDYzODUwZGEwODkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvV2Vi
U3RvcmFnZS9TdG9yYWdlTWFuYWdlci5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9XZWJTdG9yYWdlL1N0b3JhZ2VNYW5hZ2VyLmNwcApAQCAtOTIsMzIgKzkyLDI4IEBAIHZv
aWQgU3RvcmFnZU1hbmFnZXI6OmNsb25lU2Vzc2lvblN0b3JhZ2VOYW1lc3BhY2UodWludDY0X3Qg
c3RvcmFnZU5hbWVzcGFjZUlELCB1CiAgICAgc2Vzc2lvblN0b3JhZ2VOYW1lc3BhY2UtPmNsb25l
VG8oKm5ld1Nlc3Npb25TdG9yYWdlTmFtZXNwYWNlKTsKIH0KIAotdm9pZCBTdG9yYWdlTWFuYWdl
cjo6Z2V0U2Vzc2lvblN0b3JhZ2VPcmlnaW5zKEZ1bmN0aW9uPHZvaWQoSGFzaFNldDxXZWJDb3Jl
OjpTZWN1cml0eU9yaWdpbkRhdGE+JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQorSGFzaFNldDxX
ZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGE+IFN0b3JhZ2VNYW5hZ2VyOjpnZXRTZXNzaW9uU3Rv
cmFnZU9yaWdpbnMoKSBjb25zdAogewogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwog
CiAgICAgSGFzaFNldDxTZWN1cml0eU9yaWdpbkRhdGE+IG9yaWdpbnM7CiAgICAgZm9yIChjb25z
dCBhdXRvJiBzZXNzaW9uU3RvcmFnZU5hbWVzcGFjZSA6IG1fc2Vzc2lvblN0b3JhZ2VOYW1lc3Bh
Y2VzLnZhbHVlcygpKSB7CiAgICAgICAgIGZvciAoYXV0byYgb3JpZ2luIDogc2Vzc2lvblN0b3Jh
Z2VOYW1lc3BhY2UtPm9yaWdpbnMoKSkKLSAgICAgICAgb3JpZ2lucy5hZGQoY3Jvc3NUaHJlYWRD
b3B5KG9yaWdpbikpOworICAgICAgICAgICAgb3JpZ2lucy5hZGQob3JpZ2luKTsKICAgICB9CiAK
LSAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW29yaWdpbnMgPSBXVEZNb3ZlKG9yaWdpbnMp
LCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFi
bGUgewotICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKG9yaWdpbnMpKTsKLSAgICB9
KTsKKyAgICByZXR1cm4gb3JpZ2luczsKIH0KIAotdm9pZCBTdG9yYWdlTWFuYWdlcjo6ZGVsZXRl
U2Vzc2lvblN0b3JhZ2VPcmlnaW5zKEZ1bmN0aW9uPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxl
cikKK3ZvaWQgU3RvcmFnZU1hbmFnZXI6OmRlbGV0ZVNlc3Npb25TdG9yYWdlT3JpZ2lucygpCiB7
CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CiAKICAgICBmb3IgKGF1dG8mIHNlc3Np
b25TdG9yYWdlTmFtZXNwYWNlIDogbV9zZXNzaW9uU3RvcmFnZU5hbWVzcGFjZXMudmFsdWVzKCkp
CiAgICAgICAgIHNlc3Npb25TdG9yYWdlTmFtZXNwYWNlLT5jbGVhckFsbFN0b3JhZ2VBcmVhcygp
OwotCi0gICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpKTsKIH0KIAotdm9pZCBTdG9yYWdlTWFuYWdlcjo6ZGVsZXRlU2Vzc2lvblN0b3JhZ2VFbnRy
aWVzRm9yT3JpZ2lucyhjb25zdCBWZWN0b3I8V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhPiYg
b3JpZ2lucywgRnVuY3Rpb248dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQordm9pZCBTdG9y
YWdlTWFuYWdlcjo6ZGVsZXRlU2Vzc2lvblN0b3JhZ2VFbnRyaWVzRm9yT3JpZ2lucyhjb25zdCBW
ZWN0b3I8V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhPiYgb3JpZ2lucykKIHsKICAgICBBU1NF
UlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKIApAQCAtMTI1LDQ5ICsxMjEsNDEgQEAgdm9pZCBTdG9y
YWdlTWFuYWdlcjo6ZGVsZXRlU2Vzc2lvblN0b3JhZ2VFbnRyaWVzRm9yT3JpZ2lucyhjb25zdCBW
ZWN0b3I8V2ViQ29yZToKICAgICAgICAgZm9yIChhdXRvJiBzZXNzaW9uU3RvcmFnZU5hbWVzcGFj
ZSA6IG1fc2Vzc2lvblN0b3JhZ2VOYW1lc3BhY2VzLnZhbHVlcygpKQogICAgICAgICAgICAgc2Vz
c2lvblN0b3JhZ2VOYW1lc3BhY2UtPmNsZWFyU3RvcmFnZUFyZWFzTWF0Y2hpbmdPcmlnaW4ob3Jp
Z2luKTsKICAgICB9Ci0KLSAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcikpOwogfQogCi12b2lkIFN0b3JhZ2VNYW5hZ2VyOjpnZXRMb2NhbFN0b3Jh
Z2VPcmlnaW5zKEZ1bmN0aW9uPHZvaWQoSGFzaFNldDxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRh
dGE+JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQorSGFzaFNldDxXZWJDb3JlOjpTZWN1cml0eU9y
aWdpbkRhdGE+IFN0b3JhZ2VNYW5hZ2VyOjpnZXRMb2NhbFN0b3JhZ2VPcmlnaW5zKCkgY29uc3QK
IHsKICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKIAogICAgIEhhc2hTZXQ8U2VjdXJp
dHlPcmlnaW5EYXRhPiBvcmlnaW5zOwogICAgIGlmIChtX2xvY2FsU3RvcmFnZURhdGFiYXNlVHJh
Y2tlcikgewogICAgIGZvciAoYXV0byYgb3JpZ2luIDogbV9sb2NhbFN0b3JhZ2VEYXRhYmFzZVRy
YWNrZXItPm9yaWdpbnMoKSkKLSAgICAgICAgb3JpZ2lucy5hZGQob3JpZ2luLmlzb2xhdGVkQ29w
eSgpKTsKKyAgICAgICAgb3JpZ2lucy5hZGQob3JpZ2luKTsKICAgICB9IGVsc2UgewogICAgICAg
ICBmb3IgKGNvbnN0IGF1dG8mIGxvY2FsU3RvcmFnZU5hbWVTcGFjZSA6IG1fbG9jYWxTdG9yYWdl
TmFtZXNwYWNlcy52YWx1ZXMoKSkgewogICAgICAgICAgICAgZm9yIChhdXRvJiBvcmlnaW4gOiBs
b2NhbFN0b3JhZ2VOYW1lU3BhY2UtPmVwaGVtZXJhbE9yaWdpbnMoKSkKLSAgICAgICAgICAgICAg
ICBvcmlnaW5zLmFkZChvcmlnaW4uaXNvbGF0ZWRDb3B5KCkpOworICAgICAgICAgICAgICAgIG9y
aWdpbnMuYWRkKG9yaWdpbik7CiAgICAgICAgIH0KICAgICB9CiAKICAgICBmb3IgKGF1dG8mIHRy
YW5zaWVudExvY2FsU3RvcmFnZU5hbWVzcGFjZSA6IG1fdHJhbnNpZW50TG9jYWxTdG9yYWdlTmFt
ZXNwYWNlcy52YWx1ZXMoKSkgewogICAgICAgICBmb3IgKGF1dG8mIG9yaWdpbiA6IHRyYW5zaWVu
dExvY2FsU3RvcmFnZU5hbWVzcGFjZS0+b3JpZ2lucygpKQotICAgICAgICAgICAgb3JpZ2lucy5h
ZGQob3JpZ2luLmlzb2xhdGVkQ29weSgpKTsKKyAgICAgICAgICAgIG9yaWdpbnMuYWRkKG9yaWdp
bik7CiAgICAgfQogCi0gICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFtvcmlnaW5zID0gV1RG
TW92ZShvcmlnaW5zKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKV0oKSBtdXRhYmxlIHsKLSAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShvcmln
aW5zKSk7Ci0gICAgfSk7CisgICAgcmV0dXJuIG9yaWdpbnM7CiB9CiAKLXZvaWQgU3RvcmFnZU1h
bmFnZXI6OmdldExvY2FsU3RvcmFnZU9yaWdpbkRldGFpbHMoRnVuY3Rpb248dm9pZChWZWN0b3I8
TG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyOjpPcmlnaW5EZXRhaWxzPiYmKT4mJiBjb21wbGV0
aW9uSGFuZGxlcikKK1ZlY3RvcjxMb2NhbFN0b3JhZ2VEYXRhYmFzZVRyYWNrZXI6Ok9yaWdpbkRl
dGFpbHM+IFN0b3JhZ2VNYW5hZ2VyOjpnZXRMb2NhbFN0b3JhZ2VPcmlnaW5EZXRhaWxzKCkgY29u
c3QKIHsKICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKIAotICAgIFZlY3RvcjxMb2Nh
bFN0b3JhZ2VEYXRhYmFzZVRyYWNrZXI6Ok9yaWdpbkRldGFpbHM+IG9yaWdpbkRldGFpbHM7CiAg
ICAgaWYgKG1fbG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyKQotICAgICAgICBvcmlnaW5EZXRh
aWxzID0gY3Jvc3NUaHJlYWRDb3B5KG1fbG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyLT5vcmln
aW5EZXRhaWxzKCkpOwotCi0gICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFtvcmlnaW5EZXRh
aWxzID0gV1RGTW92ZShvcmlnaW5EZXRhaWxzKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKLSAgICAgICAgY29tcGxldGlvbkhhbmRs
ZXIoV1RGTW92ZShvcmlnaW5EZXRhaWxzKSk7Ci0gICAgfSk7CisgICAgICAgIHJldHVybiBtX2xv
Y2FsU3RvcmFnZURhdGFiYXNlVHJhY2tlci0+b3JpZ2luRGV0YWlscygpOworICAgIHJldHVybiB7
IH07CiB9CiAKLXZvaWQgU3RvcmFnZU1hbmFnZXI6OmRlbGV0ZUxvY2FsU3RvcmFnZU9yaWdpbnNN
b2RpZmllZFNpbmNlKFdhbGxUaW1lIHRpbWUsIEZ1bmN0aW9uPHZvaWQoKT4mJiBjb21wbGV0aW9u
SGFuZGxlcikKK3ZvaWQgU3RvcmFnZU1hbmFnZXI6OmRlbGV0ZUxvY2FsU3RvcmFnZU9yaWdpbnNN
b2RpZmllZFNpbmNlKFdhbGxUaW1lIHRpbWUpCiB7CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01h
aW4oKSk7CiAKQEAgLTE4NiwxMSArMTc0LDkgQEAgdm9pZCBTdG9yYWdlTWFuYWdlcjo6ZGVsZXRl
TG9jYWxTdG9yYWdlT3JpZ2luc01vZGlmaWVkU2luY2UoV2FsbFRpbWUgdGltZSwgRnVuY3QKICAg
ICAgICAgZm9yIChhdXRvJiBsb2NhbFN0b3JhZ2VOYW1lc3BhY2UgOiBtX2xvY2FsU3RvcmFnZU5h
bWVzcGFjZXMudmFsdWVzKCkpCiAgICAgICAgICAgICBsb2NhbFN0b3JhZ2VOYW1lc3BhY2UtPmNs
ZWFyQWxsU3RvcmFnZUFyZWFzKCk7CiAgICAgfQotCi0gICAgUnVuTG9vcDo6bWFpbigpLmRpc3Bh
dGNoKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAotdm9pZCBTdG9yYWdlTWFuYWdl
cjo6ZGVsZXRlTG9jYWxTdG9yYWdlRW50cmllc0Zvck9yaWdpbnMoY29uc3QgVmVjdG9yPFdlYkNv
cmU6OlNlY3VyaXR5T3JpZ2luRGF0YT4mIG9yaWdpbnMsIEZ1bmN0aW9uPHZvaWQoKT4mJiBjb21w
bGV0aW9uSGFuZGxlcikKK3ZvaWQgU3RvcmFnZU1hbmFnZXI6OmRlbGV0ZUxvY2FsU3RvcmFnZUVu
dHJpZXNGb3JPcmlnaW5zKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGE+
JiBvcmlnaW5zKQogewogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwogCkBAIC0yMDQs
OCArMTkwLDYgQEAgdm9pZCBTdG9yYWdlTWFuYWdlcjo6ZGVsZXRlTG9jYWxTdG9yYWdlRW50cmll
c0Zvck9yaWdpbnMoY29uc3QgVmVjdG9yPFdlYkNvcmU6OlMKICAgICAgICAgaWYgKG1fbG9jYWxT
dG9yYWdlRGF0YWJhc2VUcmFja2VyKQogICAgICAgICAgICAgbV9sb2NhbFN0b3JhZ2VEYXRhYmFz
ZVRyYWNrZXItPmRlbGV0ZURhdGFiYXNlV2l0aE9yaWdpbihvcmlnaW4pOwogICAgIH0KLQotICAg
IFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9
CiAKIFN0b3JhZ2VBcmVhKiBTdG9yYWdlTWFuYWdlcjo6Y3JlYXRlTG9jYWxTdG9yYWdlQXJlYSh1
aW50NjRfdCBzdG9yYWdlTmFtZXNwYWNlSUQsIFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YSYm
IG9yaWdpbikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvV2ViU3Rv
cmFnZS9TdG9yYWdlTWFuYWdlci5oIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9XZWJT
dG9yYWdlL1N0b3JhZ2VNYW5hZ2VyLmgKaW5kZXggNmI1M2UxYjJlMDQ0OWY5YjNjMDQwM2I1MzIz
YWVhZDAwYzNhOTYwOS4uM2I2ZjMyOWJlZDJlMGVhNjZmNTllNzcyNWNmMTI1Mjg4OTc5NDFkOSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9XZWJTdG9yYWdlL1N0b3Jh
Z2VNYW5hZ2VyLmgKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9XZWJTdG9yYWdl
L1N0b3JhZ2VNYW5hZ2VyLmgKQEAgLTYyLDE0ICs2MiwxNCBAQCBwdWJsaWM6CiAgICAgdm9pZCBk
ZXN0cm95U2Vzc2lvblN0b3JhZ2VOYW1lc3BhY2UodWludDY0X3Qgc3RvcmFnZU5hbWVzcGFjZUlE
KTsKICAgICB2b2lkIGNsb25lU2Vzc2lvblN0b3JhZ2VOYW1lc3BhY2UodWludDY0X3Qgc3RvcmFn
ZU5hbWVzcGFjZUlELCB1aW50NjRfdCBuZXdTdG9yYWdlTmFtZXNwYWNlSUQpOwogCi0gICAgdm9p
ZCBnZXRTZXNzaW9uU3RvcmFnZU9yaWdpbnMoRnVuY3Rpb248dm9pZChIYXNoU2V0PFdlYkNvcmU6
OlNlY3VyaXR5T3JpZ2luRGF0YT4mJik+JiYpOwotICAgIHZvaWQgZGVsZXRlU2Vzc2lvblN0b3Jh
Z2VPcmlnaW5zKEZ1bmN0aW9uPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcik7Ci0gICAgdm9p
ZCBkZWxldGVTZXNzaW9uU3RvcmFnZUVudHJpZXNGb3JPcmlnaW5zKGNvbnN0IFZlY3RvcjxXZWJD
b3JlOjpTZWN1cml0eU9yaWdpbkRhdGE+JiwgRnVuY3Rpb248dm9pZCgpPiYmKTsKLQotICAgIHZv
aWQgZ2V0TG9jYWxTdG9yYWdlT3JpZ2lucyhGdW5jdGlvbjx2b2lkKEhhc2hTZXQ8V2ViQ29yZTo6
U2VjdXJpdHlPcmlnaW5EYXRhPiYmKT4mJik7Ci0gICAgdm9pZCBkZWxldGVMb2NhbFN0b3JhZ2VP
cmlnaW5zTW9kaWZpZWRTaW5jZShXYWxsVGltZSwgRnVuY3Rpb248dm9pZCgpPiYmKTsKLSAgICB2
b2lkIGRlbGV0ZUxvY2FsU3RvcmFnZUVudHJpZXNGb3JPcmlnaW5zKGNvbnN0IFZlY3RvcjxXZWJD
b3JlOjpTZWN1cml0eU9yaWdpbkRhdGE+JiwgRnVuY3Rpb248dm9pZCgpPiYmKTsKLSAgICB2b2lk
IGdldExvY2FsU3RvcmFnZU9yaWdpbkRldGFpbHMoRnVuY3Rpb248dm9pZChWZWN0b3I8TG9jYWxT
dG9yYWdlRGF0YWJhc2VUcmFja2VyOjpPcmlnaW5EZXRhaWxzPiYmKT4mJik7CisgICAgSGFzaFNl
dDxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGE+IGdldFNlc3Npb25TdG9yYWdlT3JpZ2lucygp
IGNvbnN0OworICAgIHZvaWQgZGVsZXRlU2Vzc2lvblN0b3JhZ2VPcmlnaW5zKCk7CisgICAgdm9p
ZCBkZWxldGVTZXNzaW9uU3RvcmFnZUVudHJpZXNGb3JPcmlnaW5zKGNvbnN0IFZlY3RvcjxXZWJD
b3JlOjpTZWN1cml0eU9yaWdpbkRhdGE+Jik7CisKKyAgICBIYXNoU2V0PFdlYkNvcmU6OlNlY3Vy
aXR5T3JpZ2luRGF0YT4gZ2V0TG9jYWxTdG9yYWdlT3JpZ2lucygpIGNvbnN0OworICAgIHZvaWQg
ZGVsZXRlTG9jYWxTdG9yYWdlT3JpZ2luc01vZGlmaWVkU2luY2UoV2FsbFRpbWUpOworICAgIHZv
aWQgZGVsZXRlTG9jYWxTdG9yYWdlRW50cmllc0Zvck9yaWdpbnMoY29uc3QgVmVjdG9yPFdlYkNv
cmU6OlNlY3VyaXR5T3JpZ2luRGF0YT4mKTsKKyAgICBWZWN0b3I8TG9jYWxTdG9yYWdlRGF0YWJh
c2VUcmFja2VyOjpPcmlnaW5EZXRhaWxzPiBnZXRMb2NhbFN0b3JhZ2VPcmlnaW5EZXRhaWxzKCkg
Y29uc3Q7CiAKICAgICB2b2lkIGNsZWFyU3RvcmFnZU5hbWVzcGFjZXMoKTsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9XZWJTdG9yYWdlL1N0b3JhZ2VNYW5hZ2Vy
U2V0LmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdl
TWFuYWdlclNldC5jcHAKaW5kZXggODFjN2I3MWJmNDUzMDMxMWY4OTk5NmRkZjhkNDY4MGU5YmIw
OTI0YS4uZjEyNWQ2MGQ2NGFmZmI2OTlmMTRkMGM5NjcxZTEyMDE3MmViNzc3NCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9XZWJTdG9yYWdlL1N0b3JhZ2VNYW5hZ2Vy
U2V0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL1dlYlN0b3JhZ2UvU3Rv
cmFnZU1hbmFnZXJTZXQuY3BwCkBAIC0xODcsNzEgKzE4Nyw5OCBAQCB2b2lkIFN0b3JhZ2VNYW5h
Z2VyU2V0OjpyZXN1bWUoKQogCiB2b2lkIFN0b3JhZ2VNYW5hZ2VyU2V0OjpnZXRTZXNzaW9uU3Rv
cmFnZU9yaWdpbnMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKEhhc2hTZXQ8V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhPiYmKT4mJiBjb21wbGV0aW9u
SGFuZGxlcikKIHsKKyAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOworCiAgICAgbV9xdWV1
ZS0+ZGlzcGF0Y2goW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgc2Vzc2lv
bklELCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11
dGFibGUgewogICAgICAgICBhdXRvKiBzdG9yYWdlTWFuYWdlciA9IG1fc3RvcmFnZU1hbmFnZXJz
LmdldChzZXNzaW9uSUQpOwogICAgICAgICBBU1NFUlQoc3RvcmFnZU1hbmFnZXIpOwogCi0gICAg
ICAgIHN0b3JhZ2VNYW5hZ2VyLT5nZXRTZXNzaW9uU3RvcmFnZU9yaWdpbnMoV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcikpOworICAgICAgICBhdXRvIG9yaWdpbnMgPSBzdG9yYWdlTWFuYWdlci0+
Z2V0U2Vzc2lvblN0b3JhZ2VPcmlnaW5zKCk7CisgICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNw
YXRjaChbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgb3Jp
Z2lucyA9IGNyb3NzVGhyZWFkQ29weShvcmlnaW5zKV0oKSBtdXRhYmxlIHsKKyAgICAgICAgICAg
IGNvbXBsZXRpb25IYW5kbGVyKFdURk1vdmUob3JpZ2lucykpOworICAgICAgICB9KTsKICAgICB9
KTsKIH0KIAogdm9pZCBTdG9yYWdlTWFuYWdlclNldDo6ZGVsZXRlU2Vzc2lvblN0b3JhZ2UoUEFM
OjpTZXNzaW9uSUQgc2Vzc2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxl
dGlvbkhhbmRsZXIpCiB7CisgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKKwogICAgIG1f
cXVldWUtPmRpc3BhdGNoKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIHNl
c3Npb25JRCwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0o
KSBtdXRhYmxlIHsKICAgICAgICAgYXV0byogc3RvcmFnZU1hbmFnZXIgPSBtX3N0b3JhZ2VNYW5h
Z2Vycy5nZXQoc2Vzc2lvbklEKTsKICAgICAgICAgQVNTRVJUKHN0b3JhZ2VNYW5hZ2VyKTsKIAot
ICAgICAgICBzdG9yYWdlTWFuYWdlci0+ZGVsZXRlU2Vzc2lvblN0b3JhZ2VPcmlnaW5zKFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpKTsKKyAgICAgICAgc3RvcmFnZU1hbmFnZXItPmRlbGV0ZVNl
c3Npb25TdG9yYWdlT3JpZ2lucygpOworICAgICAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2go
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIH0pOwogfQogCiB2b2lkIFN0b3JhZ2VN
YW5hZ2VyU2V0OjpkZWxldGVTZXNzaW9uU3RvcmFnZUZvck9yaWdpbnMoUEFMOjpTZXNzaW9uSUQg
c2Vzc2lvbklELCBjb25zdCBWZWN0b3I8V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhPiYgb3Jp
Z2luRGF0YXMsIERlbGV0ZUNhbGxiYWNrJiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CisgICAgQVNT
RVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKKwogICAgIG1fcXVldWUtPmRpc3BhdGNoKFt0aGlzLCBw
cm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIHNlc3Npb25JRCwgY29waWVkT3JpZ2luRGF0
YXMgPSBjcm9zc1RocmVhZENvcHkob3JpZ2luRGF0YXMpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgewogICAgICAgICBhdXRvKiBzdG9y
YWdlTWFuYWdlciA9IG1fc3RvcmFnZU1hbmFnZXJzLmdldChzZXNzaW9uSUQpOwogICAgICAgICBB
U1NFUlQoc3RvcmFnZU1hbmFnZXIpOwogCi0gICAgICAgIHN0b3JhZ2VNYW5hZ2VyLT5kZWxldGVT
ZXNzaW9uU3RvcmFnZUVudHJpZXNGb3JPcmlnaW5zKGNvcGllZE9yaWdpbkRhdGFzLCBXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKSk7CisgICAgICAgIHN0b3JhZ2VNYW5hZ2VyLT5kZWxldGVTZXNz
aW9uU3RvcmFnZUVudHJpZXNGb3JPcmlnaW5zKGNvcGllZE9yaWdpbkRhdGFzKTsKKyAgICAgICAg
UnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAg
ICB9KTsKIH0KIAogdm9pZCBTdG9yYWdlTWFuYWdlclNldDo6Z2V0TG9jYWxTdG9yYWdlT3JpZ2lu
cyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIEdldE9yaWdpbnNDYWxsYmFjayYmIGNvbXBsZXRp
b25IYW5kbGVyKQogeworICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CisKICAgICBtX3F1
ZXVlLT5kaXNwYXRjaChbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBzZXNz
aW9uSUQsIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkg
bXV0YWJsZSB7CiAgICAgICAgIGF1dG8qIHN0b3JhZ2VNYW5hZ2VyID0gbV9zdG9yYWdlTWFuYWdl
cnMuZ2V0KHNlc3Npb25JRCk7CiAgICAgICAgIEFTU0VSVChzdG9yYWdlTWFuYWdlcik7CiAKLSAg
ICAgICAgc3RvcmFnZU1hbmFnZXItPmdldExvY2FsU3RvcmFnZU9yaWdpbnMoV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcikpOworICAgICAgICBhdXRvIG9yaWdpbnMgPSBzdG9yYWdlTWFuYWdlci0+
Z2V0TG9jYWxTdG9yYWdlT3JpZ2lucygpOworICAgICAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0
Y2goW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciksIG9yaWdp
bnMgPSBjcm9zc1RocmVhZENvcHkob3JpZ2lucyldKCkgbXV0YWJsZSB7CisgICAgICAgICAgICBj
b21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKG9yaWdpbnMpKTsKKyAgICAgICAgfSk7CiAgICAgfSk7
CiB9CiAKIHZvaWQgU3RvcmFnZU1hbmFnZXJTZXQ6OmRlbGV0ZUxvY2FsU3RvcmFnZU1vZGlmaWVk
U2luY2UoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBXYWxsVGltZSB0aW1lLCBEZWxldGVDYWxs
YmFjayYmIGNvbXBsZXRpb25IYW5kbGVyKQogeworICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4o
KSk7CisKICAgICBtX3F1ZXVlLT5kaXNwYXRjaChbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VS
ZWYoKnRoaXMpLCBzZXNzaW9uSUQsIHRpbWUsIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7CiAgICAgICAgIGF1dG8qIHN0b3JhZ2VNYW5h
Z2VyID0gbV9zdG9yYWdlTWFuYWdlcnMuZ2V0KHNlc3Npb25JRCk7CiAgICAgICAgIEFTU0VSVChz
dG9yYWdlTWFuYWdlcik7CiAKLSAgICAgICAgc3RvcmFnZU1hbmFnZXItPmRlbGV0ZUxvY2FsU3Rv
cmFnZU9yaWdpbnNNb2RpZmllZFNpbmNlKHRpbWUsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
KTsKKyAgICAgICAgc3RvcmFnZU1hbmFnZXItPmRlbGV0ZUxvY2FsU3RvcmFnZU9yaWdpbnNNb2Rp
ZmllZFNpbmNlKHRpbWUpOworICAgICAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIH0pOwogfQogCiB2b2lkIFN0b3JhZ2VNYW5hZ2Vy
U2V0OjpkZWxldGVMb2NhbFN0b3JhZ2VGb3JPcmlnaW5zKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25J
RCwgY29uc3QgVmVjdG9yPFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YT4mIG9yaWdpbkRhdGFz
LCBEZWxldGVDYWxsYmFjayYmIGNvbXBsZXRpb25IYW5kbGVyKQogeworICAgIEFTU0VSVChSdW5M
b29wOjppc01haW4oKSk7CisKICAgICBtX3F1ZXVlLT5kaXNwYXRjaChbdGhpcywgcHJvdGVjdGVk
VGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBzZXNzaW9uSUQsIGNvcGllZE9yaWdpbkRhdGFzID0gY3Jv
c3NUaHJlYWRDb3B5KG9yaWdpbkRhdGFzKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKICAgICAgICAgYXV0byogc3RvcmFnZU1hbmFn
ZXIgPSBtX3N0b3JhZ2VNYW5hZ2Vycy5nZXQoc2Vzc2lvbklEKTsKICAgICAgICAgQVNTRVJUKHN0
b3JhZ2VNYW5hZ2VyKTsKIAotICAgICAgICBzdG9yYWdlTWFuYWdlci0+ZGVsZXRlTG9jYWxTdG9y
YWdlRW50cmllc0Zvck9yaWdpbnMoY29waWVkT3JpZ2luRGF0YXMsIFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpKTsKKyAgICAgICAgc3RvcmFnZU1hbmFnZXItPmRlbGV0ZUxvY2FsU3RvcmFnZUVu
dHJpZXNGb3JPcmlnaW5zKGNvcGllZE9yaWdpbkRhdGFzKTsKKyAgICAgICAgUnVuTG9vcDo6bWFp
bigpLmRpc3BhdGNoKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICB9KTsKIH0KIAog
dm9pZCBTdG9yYWdlTWFuYWdlclNldDo6Z2V0TG9jYWxTdG9yYWdlT3JpZ2luRGV0YWlscyhQQUw6
OlNlc3Npb25JRCBzZXNzaW9uSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPExvY2Fs
U3RvcmFnZURhdGFiYXNlVHJhY2tlcjo6T3JpZ2luRGV0YWlscz4mJik+JiYgY29tcGxldGlvbkhh
bmRsZXIpCiB7CisgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKKwogICAgIG1fcXVldWUt
PmRpc3BhdGNoKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIHNlc3Npb25J
RCwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRh
YmxlIHsKICAgICAgICAgYXV0byogc3RvcmFnZU1hbmFnZXIgPSBtX3N0b3JhZ2VNYW5hZ2Vycy5n
ZXQoc2Vzc2lvbklEKTsKICAgICAgICAgQVNTRVJUKHN0b3JhZ2VNYW5hZ2VyKTsKIAotICAgICAg
ICBzdG9yYWdlTWFuYWdlci0+Z2V0TG9jYWxTdG9yYWdlT3JpZ2luRGV0YWlscyhXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKSk7CisgICAgICAgIGF1dG8gb3JpZ2luRGV0YWlscyA9IHN0b3JhZ2VN
YW5hZ2VyLT5nZXRMb2NhbFN0b3JhZ2VPcmlnaW5EZXRhaWxzKCk7CisgICAgICAgIFJ1bkxvb3A6
Om1haW4oKS5kaXNwYXRjaChbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKSwgb3JpZ2luRGV0YWlscyA9IGNyb3NzVGhyZWFkQ29weShvcmlnaW5EZXRhaWxzKV0o
KSBtdXRhYmxlIHsKKyAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFdURk1vdmUob3JpZ2lu
RGV0YWlscykpOworICAgICAgICB9KTsKICAgICB9KTsKIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>376505</attachid>
            <date>2019-08-16 09:45:00 -0700</date>
            <delta_ts>2019-08-16 10:13:16 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-200817-20190816094459.patch</filename>
            <type>text/plain</type>
            <size>15576</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ4NzcxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGJiN2FlN2NkM2Q5NThkYzMx
OTRlZjNhYjIyMThlMmQ1YTU3MDE5NzYuLjUzZmM3NmY1OGMwMmI4YzFlMzczZTRjYzJmZTYwOWVk
MDIwOTQzYmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzcgQEAKKzIwMTktMDgtMTYgIENocmlzIER1
bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KKworICAgICAgICBDbGFyaWZ5IFN0b3JhZ2VNYW5hZ2Vy
U2V0IC8gU3RvcmFnZU1hbmFnZXIgdGhyZWFkaW5nIG1vZGVsIGFmdGVyIHIyNDg3MzQKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMDgxNworCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENsYXJpZnkgU3RvcmFn
ZU1hbmFnZXJTZXQgLyBTdG9yYWdlTWFuYWdlciB0aHJlYWRpbmcgbW9kZWwgYWZ0ZXIgcjI0ODcz
NC4gU3RvcmFnZU1hbmFnZXIgaXMgbm93CisgICAgICAgIGEgYmFja2dyb3VuZCB0aHJlYWQgb2Jq
ZWN0IGJ1dCBpdCBzdGlsbCBjYWxscyBpdHMgY29tcGxldGlvbiBoYW5kbGVycyBvbiB0aGUgbWFp
biB0aHJlYWQsIHdoaWNoCisgICAgICAgIGlzIHZlcnkgZXJyb3IgcHJvbmUuIFRoZSBwYXR0ZXJu
IGluIFdlYktpdCBmb3IgdGhyZWFkIHNhZmV0eSBpcyB0aGF0IG1ldGhvZHMgc2hvdWxkIGFsd2F5
cyBjYWxsCisgICAgICAgIHRoZWlyIGNvbXBsZXRpb24gaGFuZGxlciBvZiB0aGUgdGhyZWFkIC8g
cXVldWUgdGhleSB3ZXJlIGNhbGxlZCBvbiB0aGVtc2VsdmVzLiBEb2luZyBkaWZmZXJlbnRseQor
ICAgICAgICBoYXMgY2F1c2VkIHNvIG1hbnkgdGhyZWFkLXNhZmV0eSBidWdzIGluIHRoZSBwYXN0
LgorCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdlTWFuYWdlci5j
cHA6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VNYW5hZ2VyOjpnZXRTZXNzaW9uU3RvcmFnZU9y
aWdpbnMgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlTWFuYWdlcjo6ZGVsZXRlU2Vz
c2lvblN0b3JhZ2VPcmlnaW5zKToKKyAgICAgICAgKFdlYktpdDo6U3RvcmFnZU1hbmFnZXI6OmRl
bGV0ZVNlc3Npb25TdG9yYWdlRW50cmllc0Zvck9yaWdpbnMpOgorICAgICAgICAoV2ViS2l0OjpT
dG9yYWdlTWFuYWdlcjo6Z2V0TG9jYWxTdG9yYWdlT3JpZ2lucyBjb25zdCk6CisgICAgICAgIChX
ZWJLaXQ6OlN0b3JhZ2VNYW5hZ2VyOjpnZXRMb2NhbFN0b3JhZ2VPcmlnaW5EZXRhaWxzIGNvbnN0
KToKKyAgICAgICAgKFdlYktpdDo6U3RvcmFnZU1hbmFnZXI6OmRlbGV0ZUxvY2FsU3RvcmFnZU9y
aWdpbnNNb2RpZmllZFNpbmNlKToKKyAgICAgICAgKFdlYktpdDo6U3RvcmFnZU1hbmFnZXI6OmRl
bGV0ZUxvY2FsU3RvcmFnZUVudHJpZXNGb3JPcmlnaW5zKToKKyAgICAgICAgKFdlYktpdDo6U3Rv
cmFnZU1hbmFnZXI6OmdldFNlc3Npb25TdG9yYWdlT3JpZ2lucyk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJLaXQ6OlN0b3JhZ2VNYW5hZ2VyOjpnZXRMb2NhbFN0b3JhZ2VPcmlnaW5zKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYktpdDo6U3RvcmFnZU1hbmFnZXI6OmdldExvY2FsU3RvcmFnZU9yaWdp
bkRldGFpbHMpOiBEZWxldGVkLgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL1dlYlN0b3JhZ2Uv
U3RvcmFnZU1hbmFnZXIuaDoKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9XZWJTdG9yYWdlL1N0
b3JhZ2VNYW5hZ2VyU2V0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6U3RvcmFnZU1hbmFnZXJTZXQ6
OmdldFNlc3Npb25TdG9yYWdlT3JpZ2lucyk6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VNYW5h
Z2VyU2V0OjpkZWxldGVTZXNzaW9uU3RvcmFnZSk6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VN
YW5hZ2VyU2V0OjpkZWxldGVTZXNzaW9uU3RvcmFnZUZvck9yaWdpbnMpOgorICAgICAgICAoV2Vi
S2l0OjpTdG9yYWdlTWFuYWdlclNldDo6Z2V0TG9jYWxTdG9yYWdlT3JpZ2lucyk6CisgICAgICAg
IChXZWJLaXQ6OlN0b3JhZ2VNYW5hZ2VyU2V0OjpkZWxldGVMb2NhbFN0b3JhZ2VNb2RpZmllZFNp
bmNlKToKKyAgICAgICAgKFdlYktpdDo6U3RvcmFnZU1hbmFnZXJTZXQ6OmRlbGV0ZUxvY2FsU3Rv
cmFnZUZvck9yaWdpbnMpOgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlTWFuYWdlclNldDo6Z2V0
TG9jYWxTdG9yYWdlT3JpZ2luRGV0YWlscyk6CisKIDIwMTktMDgtMTUgIFl1c3VrZSBTdXp1a2kg
IDx5c3V6dWtpQGFwcGxlLmNvbT4KIAogICAgICAgICBbV1RGXSBBZGQgbWFrZVVuaXF1ZTxUPiwg
d2hpY2ggZW5zdXJlcyBUIGlzIGZhc3QtYWxsb2NhdGVkLCBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RCBhbm5vdGF0aW9uIHBhcnQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3MvV2ViU3RvcmFnZS9TdG9yYWdlTWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL1dlYlN0b3JhZ2UvU3RvcmFnZU1hbmFnZXIuY3BwCmluZGV4IDY0ZGI0OTRiYWYwYTE3
MGYwMGY0YTRkN2Y5ZmYyNzFlNWYyNjVhNmYuLmEyYWYyMDAxMDI4OTFlNTQwYTMyMzFiZjczNDA2
NDYzODUwZGEwODkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvV2Vi
U3RvcmFnZS9TdG9yYWdlTWFuYWdlci5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9XZWJTdG9yYWdlL1N0b3JhZ2VNYW5hZ2VyLmNwcApAQCAtOTIsMzIgKzkyLDI4IEBAIHZv
aWQgU3RvcmFnZU1hbmFnZXI6OmNsb25lU2Vzc2lvblN0b3JhZ2VOYW1lc3BhY2UodWludDY0X3Qg
c3RvcmFnZU5hbWVzcGFjZUlELCB1CiAgICAgc2Vzc2lvblN0b3JhZ2VOYW1lc3BhY2UtPmNsb25l
VG8oKm5ld1Nlc3Npb25TdG9yYWdlTmFtZXNwYWNlKTsKIH0KIAotdm9pZCBTdG9yYWdlTWFuYWdl
cjo6Z2V0U2Vzc2lvblN0b3JhZ2VPcmlnaW5zKEZ1bmN0aW9uPHZvaWQoSGFzaFNldDxXZWJDb3Jl
OjpTZWN1cml0eU9yaWdpbkRhdGE+JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQorSGFzaFNldDxX
ZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGE+IFN0b3JhZ2VNYW5hZ2VyOjpnZXRTZXNzaW9uU3Rv
cmFnZU9yaWdpbnMoKSBjb25zdAogewogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwog
CiAgICAgSGFzaFNldDxTZWN1cml0eU9yaWdpbkRhdGE+IG9yaWdpbnM7CiAgICAgZm9yIChjb25z
dCBhdXRvJiBzZXNzaW9uU3RvcmFnZU5hbWVzcGFjZSA6IG1fc2Vzc2lvblN0b3JhZ2VOYW1lc3Bh
Y2VzLnZhbHVlcygpKSB7CiAgICAgICAgIGZvciAoYXV0byYgb3JpZ2luIDogc2Vzc2lvblN0b3Jh
Z2VOYW1lc3BhY2UtPm9yaWdpbnMoKSkKLSAgICAgICAgb3JpZ2lucy5hZGQoY3Jvc3NUaHJlYWRD
b3B5KG9yaWdpbikpOworICAgICAgICAgICAgb3JpZ2lucy5hZGQob3JpZ2luKTsKICAgICB9CiAK
LSAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW29yaWdpbnMgPSBXVEZNb3ZlKG9yaWdpbnMp
LCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFi
bGUgewotICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKG9yaWdpbnMpKTsKLSAgICB9
KTsKKyAgICByZXR1cm4gb3JpZ2luczsKIH0KIAotdm9pZCBTdG9yYWdlTWFuYWdlcjo6ZGVsZXRl
U2Vzc2lvblN0b3JhZ2VPcmlnaW5zKEZ1bmN0aW9uPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxl
cikKK3ZvaWQgU3RvcmFnZU1hbmFnZXI6OmRlbGV0ZVNlc3Npb25TdG9yYWdlT3JpZ2lucygpCiB7
CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CiAKICAgICBmb3IgKGF1dG8mIHNlc3Np
b25TdG9yYWdlTmFtZXNwYWNlIDogbV9zZXNzaW9uU3RvcmFnZU5hbWVzcGFjZXMudmFsdWVzKCkp
CiAgICAgICAgIHNlc3Npb25TdG9yYWdlTmFtZXNwYWNlLT5jbGVhckFsbFN0b3JhZ2VBcmVhcygp
OwotCi0gICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpKTsKIH0KIAotdm9pZCBTdG9yYWdlTWFuYWdlcjo6ZGVsZXRlU2Vzc2lvblN0b3JhZ2VFbnRy
aWVzRm9yT3JpZ2lucyhjb25zdCBWZWN0b3I8V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhPiYg
b3JpZ2lucywgRnVuY3Rpb248dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQordm9pZCBTdG9y
YWdlTWFuYWdlcjo6ZGVsZXRlU2Vzc2lvblN0b3JhZ2VFbnRyaWVzRm9yT3JpZ2lucyhjb25zdCBW
ZWN0b3I8V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhPiYgb3JpZ2lucykKIHsKICAgICBBU1NF
UlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKIApAQCAtMTI1LDQ5ICsxMjEsNDEgQEAgdm9pZCBTdG9y
YWdlTWFuYWdlcjo6ZGVsZXRlU2Vzc2lvblN0b3JhZ2VFbnRyaWVzRm9yT3JpZ2lucyhjb25zdCBW
ZWN0b3I8V2ViQ29yZToKICAgICAgICAgZm9yIChhdXRvJiBzZXNzaW9uU3RvcmFnZU5hbWVzcGFj
ZSA6IG1fc2Vzc2lvblN0b3JhZ2VOYW1lc3BhY2VzLnZhbHVlcygpKQogICAgICAgICAgICAgc2Vz
c2lvblN0b3JhZ2VOYW1lc3BhY2UtPmNsZWFyU3RvcmFnZUFyZWFzTWF0Y2hpbmdPcmlnaW4ob3Jp
Z2luKTsKICAgICB9Ci0KLSAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcikpOwogfQogCi12b2lkIFN0b3JhZ2VNYW5hZ2VyOjpnZXRMb2NhbFN0b3Jh
Z2VPcmlnaW5zKEZ1bmN0aW9uPHZvaWQoSGFzaFNldDxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRh
dGE+JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQorSGFzaFNldDxXZWJDb3JlOjpTZWN1cml0eU9y
aWdpbkRhdGE+IFN0b3JhZ2VNYW5hZ2VyOjpnZXRMb2NhbFN0b3JhZ2VPcmlnaW5zKCkgY29uc3QK
IHsKICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKIAogICAgIEhhc2hTZXQ8U2VjdXJp
dHlPcmlnaW5EYXRhPiBvcmlnaW5zOwogICAgIGlmIChtX2xvY2FsU3RvcmFnZURhdGFiYXNlVHJh
Y2tlcikgewogICAgIGZvciAoYXV0byYgb3JpZ2luIDogbV9sb2NhbFN0b3JhZ2VEYXRhYmFzZVRy
YWNrZXItPm9yaWdpbnMoKSkKLSAgICAgICAgb3JpZ2lucy5hZGQob3JpZ2luLmlzb2xhdGVkQ29w
eSgpKTsKKyAgICAgICAgb3JpZ2lucy5hZGQob3JpZ2luKTsKICAgICB9IGVsc2UgewogICAgICAg
ICBmb3IgKGNvbnN0IGF1dG8mIGxvY2FsU3RvcmFnZU5hbWVTcGFjZSA6IG1fbG9jYWxTdG9yYWdl
TmFtZXNwYWNlcy52YWx1ZXMoKSkgewogICAgICAgICAgICAgZm9yIChhdXRvJiBvcmlnaW4gOiBs
b2NhbFN0b3JhZ2VOYW1lU3BhY2UtPmVwaGVtZXJhbE9yaWdpbnMoKSkKLSAgICAgICAgICAgICAg
ICBvcmlnaW5zLmFkZChvcmlnaW4uaXNvbGF0ZWRDb3B5KCkpOworICAgICAgICAgICAgICAgIG9y
aWdpbnMuYWRkKG9yaWdpbik7CiAgICAgICAgIH0KICAgICB9CiAKICAgICBmb3IgKGF1dG8mIHRy
YW5zaWVudExvY2FsU3RvcmFnZU5hbWVzcGFjZSA6IG1fdHJhbnNpZW50TG9jYWxTdG9yYWdlTmFt
ZXNwYWNlcy52YWx1ZXMoKSkgewogICAgICAgICBmb3IgKGF1dG8mIG9yaWdpbiA6IHRyYW5zaWVu
dExvY2FsU3RvcmFnZU5hbWVzcGFjZS0+b3JpZ2lucygpKQotICAgICAgICAgICAgb3JpZ2lucy5h
ZGQob3JpZ2luLmlzb2xhdGVkQ29weSgpKTsKKyAgICAgICAgICAgIG9yaWdpbnMuYWRkKG9yaWdp
bik7CiAgICAgfQogCi0gICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFtvcmlnaW5zID0gV1RG
TW92ZShvcmlnaW5zKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKV0oKSBtdXRhYmxlIHsKLSAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShvcmln
aW5zKSk7Ci0gICAgfSk7CisgICAgcmV0dXJuIG9yaWdpbnM7CiB9CiAKLXZvaWQgU3RvcmFnZU1h
bmFnZXI6OmdldExvY2FsU3RvcmFnZU9yaWdpbkRldGFpbHMoRnVuY3Rpb248dm9pZChWZWN0b3I8
TG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyOjpPcmlnaW5EZXRhaWxzPiYmKT4mJiBjb21wbGV0
aW9uSGFuZGxlcikKK1ZlY3RvcjxMb2NhbFN0b3JhZ2VEYXRhYmFzZVRyYWNrZXI6Ok9yaWdpbkRl
dGFpbHM+IFN0b3JhZ2VNYW5hZ2VyOjpnZXRMb2NhbFN0b3JhZ2VPcmlnaW5EZXRhaWxzKCkgY29u
c3QKIHsKICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKIAotICAgIFZlY3RvcjxMb2Nh
bFN0b3JhZ2VEYXRhYmFzZVRyYWNrZXI6Ok9yaWdpbkRldGFpbHM+IG9yaWdpbkRldGFpbHM7CiAg
ICAgaWYgKG1fbG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyKQotICAgICAgICBvcmlnaW5EZXRh
aWxzID0gY3Jvc3NUaHJlYWRDb3B5KG1fbG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyLT5vcmln
aW5EZXRhaWxzKCkpOwotCi0gICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFtvcmlnaW5EZXRh
aWxzID0gV1RGTW92ZShvcmlnaW5EZXRhaWxzKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKLSAgICAgICAgY29tcGxldGlvbkhhbmRs
ZXIoV1RGTW92ZShvcmlnaW5EZXRhaWxzKSk7Ci0gICAgfSk7CisgICAgICAgIHJldHVybiBtX2xv
Y2FsU3RvcmFnZURhdGFiYXNlVHJhY2tlci0+b3JpZ2luRGV0YWlscygpOworICAgIHJldHVybiB7
IH07CiB9CiAKLXZvaWQgU3RvcmFnZU1hbmFnZXI6OmRlbGV0ZUxvY2FsU3RvcmFnZU9yaWdpbnNN
b2RpZmllZFNpbmNlKFdhbGxUaW1lIHRpbWUsIEZ1bmN0aW9uPHZvaWQoKT4mJiBjb21wbGV0aW9u
SGFuZGxlcikKK3ZvaWQgU3RvcmFnZU1hbmFnZXI6OmRlbGV0ZUxvY2FsU3RvcmFnZU9yaWdpbnNN
b2RpZmllZFNpbmNlKFdhbGxUaW1lIHRpbWUpCiB7CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01h
aW4oKSk7CiAKQEAgLTE4NiwxMSArMTc0LDkgQEAgdm9pZCBTdG9yYWdlTWFuYWdlcjo6ZGVsZXRl
TG9jYWxTdG9yYWdlT3JpZ2luc01vZGlmaWVkU2luY2UoV2FsbFRpbWUgdGltZSwgRnVuY3QKICAg
ICAgICAgZm9yIChhdXRvJiBsb2NhbFN0b3JhZ2VOYW1lc3BhY2UgOiBtX2xvY2FsU3RvcmFnZU5h
bWVzcGFjZXMudmFsdWVzKCkpCiAgICAgICAgICAgICBsb2NhbFN0b3JhZ2VOYW1lc3BhY2UtPmNs
ZWFyQWxsU3RvcmFnZUFyZWFzKCk7CiAgICAgfQotCi0gICAgUnVuTG9vcDo6bWFpbigpLmRpc3Bh
dGNoKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAotdm9pZCBTdG9yYWdlTWFuYWdl
cjo6ZGVsZXRlTG9jYWxTdG9yYWdlRW50cmllc0Zvck9yaWdpbnMoY29uc3QgVmVjdG9yPFdlYkNv
cmU6OlNlY3VyaXR5T3JpZ2luRGF0YT4mIG9yaWdpbnMsIEZ1bmN0aW9uPHZvaWQoKT4mJiBjb21w
bGV0aW9uSGFuZGxlcikKK3ZvaWQgU3RvcmFnZU1hbmFnZXI6OmRlbGV0ZUxvY2FsU3RvcmFnZUVu
dHJpZXNGb3JPcmlnaW5zKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGE+
JiBvcmlnaW5zKQogewogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwogCkBAIC0yMDQs
OCArMTkwLDYgQEAgdm9pZCBTdG9yYWdlTWFuYWdlcjo6ZGVsZXRlTG9jYWxTdG9yYWdlRW50cmll
c0Zvck9yaWdpbnMoY29uc3QgVmVjdG9yPFdlYkNvcmU6OlMKICAgICAgICAgaWYgKG1fbG9jYWxT
dG9yYWdlRGF0YWJhc2VUcmFja2VyKQogICAgICAgICAgICAgbV9sb2NhbFN0b3JhZ2VEYXRhYmFz
ZVRyYWNrZXItPmRlbGV0ZURhdGFiYXNlV2l0aE9yaWdpbihvcmlnaW4pOwogICAgIH0KLQotICAg
IFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9
CiAKIFN0b3JhZ2VBcmVhKiBTdG9yYWdlTWFuYWdlcjo6Y3JlYXRlTG9jYWxTdG9yYWdlQXJlYSh1
aW50NjRfdCBzdG9yYWdlTmFtZXNwYWNlSUQsIFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YSYm
IG9yaWdpbikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvV2ViU3Rv
cmFnZS9TdG9yYWdlTWFuYWdlci5oIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9XZWJT
dG9yYWdlL1N0b3JhZ2VNYW5hZ2VyLmgKaW5kZXggNmI1M2UxYjJlMDQ0OWY5YjNjMDQwM2I1MzIz
YWVhZDAwYzNhOTYwOS4uNzIyOTYxMTMzNjY5N2QxZDUwYTRlMTdjYjMxMmM0YzdlYTViYWM5NCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9XZWJTdG9yYWdlL1N0b3Jh
Z2VNYW5hZ2VyLmgKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9XZWJTdG9yYWdl
L1N0b3JhZ2VNYW5hZ2VyLmgKQEAgLTMwLDcgKzMwLDYgQEAKICNpbmNsdWRlIDxXZWJDb3JlL1Nl
Y3VyaXR5T3JpZ2luRGF0YS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvU3RvcmFnZU1hcC5oPgogI2lu
Y2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+Ci0jaW5jbHVkZSA8d3RmL0Z1bmN0aW9uLmg+CiAjaW5jbHVk
ZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CiAKQEAg
LTYyLDE0ICs2MSwxNCBAQCBwdWJsaWM6CiAgICAgdm9pZCBkZXN0cm95U2Vzc2lvblN0b3JhZ2VO
YW1lc3BhY2UodWludDY0X3Qgc3RvcmFnZU5hbWVzcGFjZUlEKTsKICAgICB2b2lkIGNsb25lU2Vz
c2lvblN0b3JhZ2VOYW1lc3BhY2UodWludDY0X3Qgc3RvcmFnZU5hbWVzcGFjZUlELCB1aW50NjRf
dCBuZXdTdG9yYWdlTmFtZXNwYWNlSUQpOwogCi0gICAgdm9pZCBnZXRTZXNzaW9uU3RvcmFnZU9y
aWdpbnMoRnVuY3Rpb248dm9pZChIYXNoU2V0PFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YT4m
Jik+JiYpOwotICAgIHZvaWQgZGVsZXRlU2Vzc2lvblN0b3JhZ2VPcmlnaW5zKEZ1bmN0aW9uPHZv
aWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcik7Ci0gICAgdm9pZCBkZWxldGVTZXNzaW9uU3RvcmFn
ZUVudHJpZXNGb3JPcmlnaW5zKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRh
dGE+JiwgRnVuY3Rpb248dm9pZCgpPiYmKTsKKyAgICBIYXNoU2V0PFdlYkNvcmU6OlNlY3VyaXR5
T3JpZ2luRGF0YT4gZ2V0U2Vzc2lvblN0b3JhZ2VPcmlnaW5zKCkgY29uc3Q7CisgICAgdm9pZCBk
ZWxldGVTZXNzaW9uU3RvcmFnZU9yaWdpbnMoKTsKKyAgICB2b2lkIGRlbGV0ZVNlc3Npb25TdG9y
YWdlRW50cmllc0Zvck9yaWdpbnMoY29uc3QgVmVjdG9yPFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2lu
RGF0YT4mKTsKIAotICAgIHZvaWQgZ2V0TG9jYWxTdG9yYWdlT3JpZ2lucyhGdW5jdGlvbjx2b2lk
KEhhc2hTZXQ8V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhPiYmKT4mJik7Ci0gICAgdm9pZCBk
ZWxldGVMb2NhbFN0b3JhZ2VPcmlnaW5zTW9kaWZpZWRTaW5jZShXYWxsVGltZSwgRnVuY3Rpb248
dm9pZCgpPiYmKTsKLSAgICB2b2lkIGRlbGV0ZUxvY2FsU3RvcmFnZUVudHJpZXNGb3JPcmlnaW5z
KGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGE+JiwgRnVuY3Rpb248dm9p
ZCgpPiYmKTsKLSAgICB2b2lkIGdldExvY2FsU3RvcmFnZU9yaWdpbkRldGFpbHMoRnVuY3Rpb248
dm9pZChWZWN0b3I8TG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyOjpPcmlnaW5EZXRhaWxzPiYm
KT4mJik7CisgICAgSGFzaFNldDxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGE+IGdldExvY2Fs
U3RvcmFnZU9yaWdpbnMoKSBjb25zdDsKKyAgICB2b2lkIGRlbGV0ZUxvY2FsU3RvcmFnZU9yaWdp
bnNNb2RpZmllZFNpbmNlKFdhbGxUaW1lKTsKKyAgICB2b2lkIGRlbGV0ZUxvY2FsU3RvcmFnZUVu
dHJpZXNGb3JPcmlnaW5zKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGE+
Jik7CisgICAgVmVjdG9yPExvY2FsU3RvcmFnZURhdGFiYXNlVHJhY2tlcjo6T3JpZ2luRGV0YWls
cz4gZ2V0TG9jYWxTdG9yYWdlT3JpZ2luRGV0YWlscygpIGNvbnN0OwogCiAgICAgdm9pZCBjbGVh
clN0b3JhZ2VOYW1lc3BhY2VzKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdlTWFuYWdlclNldC5jcHAgYi9Tb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL1dlYlN0b3JhZ2UvU3RvcmFnZU1hbmFnZXJTZXQuY3BwCmluZGV4IDgx
YzdiNzFiZjQ1MzAzMTFmODk5OTZkZGY4ZDQ2ODBlOWJiMDkyNGEuLmYxMjVkNjBkNjRhZmZiNjk5
ZjE0ZDBjOTY3MWUxMjAxNzJlYjc3NzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdlTWFuYWdlclNldC5jcHAKKysrIGIvU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9XZWJTdG9yYWdlL1N0b3JhZ2VNYW5hZ2VyU2V0LmNwcApAQCAt
MTg3LDcxICsxODcsOTggQEAgdm9pZCBTdG9yYWdlTWFuYWdlclNldDo6cmVzdW1lKCkKIAogdm9p
ZCBTdG9yYWdlTWFuYWdlclNldDo6Z2V0U2Vzc2lvblN0b3JhZ2VPcmlnaW5zKFBBTDo6U2Vzc2lv
bklEIHNlc3Npb25JRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChIYXNoU2V0PFdlYkNvcmU6OlNl
Y3VyaXR5T3JpZ2luRGF0YT4mJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CisgICAgQVNTRVJU
KFJ1bkxvb3A6OmlzTWFpbigpKTsKKwogICAgIG1fcXVldWUtPmRpc3BhdGNoKFt0aGlzLCBwcm90
ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIHNlc3Npb25JRCwgY29tcGxldGlvbkhhbmRsZXIg
PSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKICAgICAgICAgYXV0byog
c3RvcmFnZU1hbmFnZXIgPSBtX3N0b3JhZ2VNYW5hZ2Vycy5nZXQoc2Vzc2lvbklEKTsKICAgICAg
ICAgQVNTRVJUKHN0b3JhZ2VNYW5hZ2VyKTsKIAotICAgICAgICBzdG9yYWdlTWFuYWdlci0+Z2V0
U2Vzc2lvblN0b3JhZ2VPcmlnaW5zKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKKyAgICAg
ICAgYXV0byBvcmlnaW5zID0gc3RvcmFnZU1hbmFnZXItPmdldFNlc3Npb25TdG9yYWdlT3JpZ2lu
cygpOworICAgICAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW2NvbXBsZXRpb25IYW5kbGVy
ID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciksIG9yaWdpbnMgPSBjcm9zc1RocmVhZENvcHko
b3JpZ2lucyldKCkgbXV0YWJsZSB7CisgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihXVEZN
b3ZlKG9yaWdpbnMpKTsKKyAgICAgICAgfSk7CiAgICAgfSk7CiB9CiAKIHZvaWQgU3RvcmFnZU1h
bmFnZXJTZXQ6OmRlbGV0ZVNlc3Npb25TdG9yYWdlKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwg
Q29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogeworICAgIEFT
U0VSVChSdW5Mb29wOjppc01haW4oKSk7CisKICAgICBtX3F1ZXVlLT5kaXNwYXRjaChbdGhpcywg
cHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBzZXNzaW9uSUQsIGNvbXBsZXRpb25IYW5k
bGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7CiAgICAgICAgIGF1
dG8qIHN0b3JhZ2VNYW5hZ2VyID0gbV9zdG9yYWdlTWFuYWdlcnMuZ2V0KHNlc3Npb25JRCk7CiAg
ICAgICAgIEFTU0VSVChzdG9yYWdlTWFuYWdlcik7CiAKLSAgICAgICAgc3RvcmFnZU1hbmFnZXIt
PmRlbGV0ZVNlc3Npb25TdG9yYWdlT3JpZ2lucyhXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7
CisgICAgICAgIHN0b3JhZ2VNYW5hZ2VyLT5kZWxldGVTZXNzaW9uU3RvcmFnZU9yaWdpbnMoKTsK
KyAgICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpKTsKICAgICB9KTsKIH0KIAogdm9pZCBTdG9yYWdlTWFuYWdlclNldDo6ZGVsZXRlU2Vzc2lv
blN0b3JhZ2VGb3JPcmlnaW5zKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgVmVjdG9y
PFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YT4mIG9yaWdpbkRhdGFzLCBEZWxldGVDYWxsYmFj
ayYmIGNvbXBsZXRpb25IYW5kbGVyKQogeworICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7
CisKICAgICBtX3F1ZXVlLT5kaXNwYXRjaChbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYo
KnRoaXMpLCBzZXNzaW9uSUQsIGNvcGllZE9yaWdpbkRhdGFzID0gY3Jvc3NUaHJlYWRDb3B5KG9y
aWdpbkRhdGFzKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KV0oKSBtdXRhYmxlIHsKICAgICAgICAgYXV0byogc3RvcmFnZU1hbmFnZXIgPSBtX3N0b3JhZ2VN
YW5hZ2Vycy5nZXQoc2Vzc2lvbklEKTsKICAgICAgICAgQVNTRVJUKHN0b3JhZ2VNYW5hZ2VyKTsK
IAotICAgICAgICBzdG9yYWdlTWFuYWdlci0+ZGVsZXRlU2Vzc2lvblN0b3JhZ2VFbnRyaWVzRm9y
T3JpZ2lucyhjb3BpZWRPcmlnaW5EYXRhcywgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwor
ICAgICAgICBzdG9yYWdlTWFuYWdlci0+ZGVsZXRlU2Vzc2lvblN0b3JhZ2VFbnRyaWVzRm9yT3Jp
Z2lucyhjb3BpZWRPcmlnaW5EYXRhcyk7CisgICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRj
aChXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgfSk7CiB9CiAKIHZvaWQgU3RvcmFn
ZU1hbmFnZXJTZXQ6OmdldExvY2FsU3RvcmFnZU9yaWdpbnMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lv
bklELCBHZXRPcmlnaW5zQ2FsbGJhY2smJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKKyAgICBBU1NF
UlQoUnVuTG9vcDo6aXNNYWluKCkpOworCiAgICAgbV9xdWV1ZS0+ZGlzcGF0Y2goW3RoaXMsIHBy
b3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgc2Vzc2lvbklELCBjb21wbGV0aW9uSGFuZGxl
ciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgewogICAgICAgICBhdXRv
KiBzdG9yYWdlTWFuYWdlciA9IG1fc3RvcmFnZU1hbmFnZXJzLmdldChzZXNzaW9uSUQpOwogICAg
ICAgICBBU1NFUlQoc3RvcmFnZU1hbmFnZXIpOwogCi0gICAgICAgIHN0b3JhZ2VNYW5hZ2VyLT5n
ZXRMb2NhbFN0b3JhZ2VPcmlnaW5zKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKKyAgICAg
ICAgYXV0byBvcmlnaW5zID0gc3RvcmFnZU1hbmFnZXItPmdldExvY2FsU3RvcmFnZU9yaWdpbnMo
KTsKKyAgICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFtjb21wbGV0aW9uSGFuZGxlciA9
IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpLCBvcmlnaW5zID0gY3Jvc3NUaHJlYWRDb3B5KG9y
aWdpbnMpXSgpIG11dGFibGUgeworICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92
ZShvcmlnaW5zKSk7CisgICAgICAgIH0pOwogICAgIH0pOwogfQogCiB2b2lkIFN0b3JhZ2VNYW5h
Z2VyU2V0OjpkZWxldGVMb2NhbFN0b3JhZ2VNb2RpZmllZFNpbmNlKFBBTDo6U2Vzc2lvbklEIHNl
c3Npb25JRCwgV2FsbFRpbWUgdGltZSwgRGVsZXRlQ2FsbGJhY2smJiBjb21wbGV0aW9uSGFuZGxl
cikKIHsKKyAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOworCiAgICAgbV9xdWV1ZS0+ZGlz
cGF0Y2goW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgc2Vzc2lvbklELCB0
aW1lLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11
dGFibGUgewogICAgICAgICBhdXRvKiBzdG9yYWdlTWFuYWdlciA9IG1fc3RvcmFnZU1hbmFnZXJz
LmdldChzZXNzaW9uSUQpOwogICAgICAgICBBU1NFUlQoc3RvcmFnZU1hbmFnZXIpOwogCi0gICAg
ICAgIHN0b3JhZ2VNYW5hZ2VyLT5kZWxldGVMb2NhbFN0b3JhZ2VPcmlnaW5zTW9kaWZpZWRTaW5j
ZSh0aW1lLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CisgICAgICAgIHN0b3JhZ2VNYW5h
Z2VyLT5kZWxldGVMb2NhbFN0b3JhZ2VPcmlnaW5zTW9kaWZpZWRTaW5jZSh0aW1lKTsKKyAgICAg
ICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsK
ICAgICB9KTsKIH0KIAogdm9pZCBTdG9yYWdlTWFuYWdlclNldDo6ZGVsZXRlTG9jYWxTdG9yYWdl
Rm9yT3JpZ2lucyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IFZlY3RvcjxXZWJDb3Jl
OjpTZWN1cml0eU9yaWdpbkRhdGE+JiBvcmlnaW5EYXRhcywgRGVsZXRlQ2FsbGJhY2smJiBjb21w
bGV0aW9uSGFuZGxlcikKIHsKKyAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOworCiAgICAg
bV9xdWV1ZS0+ZGlzcGF0Y2goW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwg
c2Vzc2lvbklELCBjb3BpZWRPcmlnaW5EYXRhcyA9IGNyb3NzVGhyZWFkQ29weShvcmlnaW5EYXRh
cyksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0
YWJsZSB7CiAgICAgICAgIGF1dG8qIHN0b3JhZ2VNYW5hZ2VyID0gbV9zdG9yYWdlTWFuYWdlcnMu
Z2V0KHNlc3Npb25JRCk7CiAgICAgICAgIEFTU0VSVChzdG9yYWdlTWFuYWdlcik7CiAKLSAgICAg
ICAgc3RvcmFnZU1hbmFnZXItPmRlbGV0ZUxvY2FsU3RvcmFnZUVudHJpZXNGb3JPcmlnaW5zKGNv
cGllZE9yaWdpbkRhdGFzLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CisgICAgICAgIHN0
b3JhZ2VNYW5hZ2VyLT5kZWxldGVMb2NhbFN0b3JhZ2VFbnRyaWVzRm9yT3JpZ2lucyhjb3BpZWRP
cmlnaW5EYXRhcyk7CisgICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKSk7CiAgICAgfSk7CiB9CiAKIHZvaWQgU3RvcmFnZU1hbmFnZXJTZXQ6
OmdldExvY2FsU3RvcmFnZU9yaWdpbkRldGFpbHMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxMb2NhbFN0b3JhZ2VEYXRhYmFzZVRyYWNrZXI6
Ok9yaWdpbkRldGFpbHM+JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogeworICAgIEFTU0VSVChS
dW5Mb29wOjppc01haW4oKSk7CisKICAgICBtX3F1ZXVlLT5kaXNwYXRjaChbdGhpcywgcHJvdGVj
dGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBzZXNzaW9uSUQsIGNvbXBsZXRpb25IYW5kbGVyID0g
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7CiAgICAgICAgIGF1dG8qIHN0
b3JhZ2VNYW5hZ2VyID0gbV9zdG9yYWdlTWFuYWdlcnMuZ2V0KHNlc3Npb25JRCk7CiAgICAgICAg
IEFTU0VSVChzdG9yYWdlTWFuYWdlcik7CiAKLSAgICAgICAgc3RvcmFnZU1hbmFnZXItPmdldExv
Y2FsU3RvcmFnZU9yaWdpbkRldGFpbHMoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOworICAg
ICAgICBhdXRvIG9yaWdpbkRldGFpbHMgPSBzdG9yYWdlTWFuYWdlci0+Z2V0TG9jYWxTdG9yYWdl
T3JpZ2luRGV0YWlscygpOworICAgICAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW2NvbXBs
ZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciksIG9yaWdpbkRldGFpbHMg
PSBjcm9zc1RocmVhZENvcHkob3JpZ2luRGV0YWlscyldKCkgbXV0YWJsZSB7CisgICAgICAgICAg
ICBjb21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKG9yaWdpbkRldGFpbHMpKTsKKyAgICAgICAgfSk7
CiAgICAgfSk7CiB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>376508</attachid>
            <date>2019-08-16 10:13:17 -0700</date>
            <delta_ts>2019-08-16 10:48:59 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-200817-20190816101317.patch</filename>
            <type>text/plain</type>
            <size>15975</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ4Nzc0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGJiN2FlN2NkM2Q5NThkYzMx
OTRlZjNhYjIyMThlMmQ1YTU3MDE5NzYuLjUzZmM3NmY1OGMwMmI4YzFlMzczZTRjYzJmZTYwOWVk
MDIwOTQzYmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzcgQEAKKzIwMTktMDgtMTYgIENocmlzIER1
bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KKworICAgICAgICBDbGFyaWZ5IFN0b3JhZ2VNYW5hZ2Vy
U2V0IC8gU3RvcmFnZU1hbmFnZXIgdGhyZWFkaW5nIG1vZGVsIGFmdGVyIHIyNDg3MzQKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMDgxNworCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENsYXJpZnkgU3RvcmFn
ZU1hbmFnZXJTZXQgLyBTdG9yYWdlTWFuYWdlciB0aHJlYWRpbmcgbW9kZWwgYWZ0ZXIgcjI0ODcz
NC4gU3RvcmFnZU1hbmFnZXIgaXMgbm93CisgICAgICAgIGEgYmFja2dyb3VuZCB0aHJlYWQgb2Jq
ZWN0IGJ1dCBpdCBzdGlsbCBjYWxscyBpdHMgY29tcGxldGlvbiBoYW5kbGVycyBvbiB0aGUgbWFp
biB0aHJlYWQsIHdoaWNoCisgICAgICAgIGlzIHZlcnkgZXJyb3IgcHJvbmUuIFRoZSBwYXR0ZXJu
IGluIFdlYktpdCBmb3IgdGhyZWFkIHNhZmV0eSBpcyB0aGF0IG1ldGhvZHMgc2hvdWxkIGFsd2F5
cyBjYWxsCisgICAgICAgIHRoZWlyIGNvbXBsZXRpb24gaGFuZGxlciBvZiB0aGUgdGhyZWFkIC8g
cXVldWUgdGhleSB3ZXJlIGNhbGxlZCBvbiB0aGVtc2VsdmVzLiBEb2luZyBkaWZmZXJlbnRseQor
ICAgICAgICBoYXMgY2F1c2VkIHNvIG1hbnkgdGhyZWFkLXNhZmV0eSBidWdzIGluIHRoZSBwYXN0
LgorCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdlTWFuYWdlci5j
cHA6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VNYW5hZ2VyOjpnZXRTZXNzaW9uU3RvcmFnZU9y
aWdpbnMgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlTWFuYWdlcjo6ZGVsZXRlU2Vz
c2lvblN0b3JhZ2VPcmlnaW5zKToKKyAgICAgICAgKFdlYktpdDo6U3RvcmFnZU1hbmFnZXI6OmRl
bGV0ZVNlc3Npb25TdG9yYWdlRW50cmllc0Zvck9yaWdpbnMpOgorICAgICAgICAoV2ViS2l0OjpT
dG9yYWdlTWFuYWdlcjo6Z2V0TG9jYWxTdG9yYWdlT3JpZ2lucyBjb25zdCk6CisgICAgICAgIChX
ZWJLaXQ6OlN0b3JhZ2VNYW5hZ2VyOjpnZXRMb2NhbFN0b3JhZ2VPcmlnaW5EZXRhaWxzIGNvbnN0
KToKKyAgICAgICAgKFdlYktpdDo6U3RvcmFnZU1hbmFnZXI6OmRlbGV0ZUxvY2FsU3RvcmFnZU9y
aWdpbnNNb2RpZmllZFNpbmNlKToKKyAgICAgICAgKFdlYktpdDo6U3RvcmFnZU1hbmFnZXI6OmRl
bGV0ZUxvY2FsU3RvcmFnZUVudHJpZXNGb3JPcmlnaW5zKToKKyAgICAgICAgKFdlYktpdDo6U3Rv
cmFnZU1hbmFnZXI6OmdldFNlc3Npb25TdG9yYWdlT3JpZ2lucyk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJLaXQ6OlN0b3JhZ2VNYW5hZ2VyOjpnZXRMb2NhbFN0b3JhZ2VPcmlnaW5zKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYktpdDo6U3RvcmFnZU1hbmFnZXI6OmdldExvY2FsU3RvcmFnZU9yaWdp
bkRldGFpbHMpOiBEZWxldGVkLgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL1dlYlN0b3JhZ2Uv
U3RvcmFnZU1hbmFnZXIuaDoKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9XZWJTdG9yYWdlL1N0
b3JhZ2VNYW5hZ2VyU2V0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6U3RvcmFnZU1hbmFnZXJTZXQ6
OmdldFNlc3Npb25TdG9yYWdlT3JpZ2lucyk6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VNYW5h
Z2VyU2V0OjpkZWxldGVTZXNzaW9uU3RvcmFnZSk6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VN
YW5hZ2VyU2V0OjpkZWxldGVTZXNzaW9uU3RvcmFnZUZvck9yaWdpbnMpOgorICAgICAgICAoV2Vi
S2l0OjpTdG9yYWdlTWFuYWdlclNldDo6Z2V0TG9jYWxTdG9yYWdlT3JpZ2lucyk6CisgICAgICAg
IChXZWJLaXQ6OlN0b3JhZ2VNYW5hZ2VyU2V0OjpkZWxldGVMb2NhbFN0b3JhZ2VNb2RpZmllZFNp
bmNlKToKKyAgICAgICAgKFdlYktpdDo6U3RvcmFnZU1hbmFnZXJTZXQ6OmRlbGV0ZUxvY2FsU3Rv
cmFnZUZvck9yaWdpbnMpOgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlTWFuYWdlclNldDo6Z2V0
TG9jYWxTdG9yYWdlT3JpZ2luRGV0YWlscyk6CisKIDIwMTktMDgtMTUgIFl1c3VrZSBTdXp1a2kg
IDx5c3V6dWtpQGFwcGxlLmNvbT4KIAogICAgICAgICBbV1RGXSBBZGQgbWFrZVVuaXF1ZTxUPiwg
d2hpY2ggZW5zdXJlcyBUIGlzIGZhc3QtYWxsb2NhdGVkLCBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RCBhbm5vdGF0aW9uIHBhcnQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3MvV2ViU3RvcmFnZS9TdG9yYWdlTWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL1dlYlN0b3JhZ2UvU3RvcmFnZU1hbmFnZXIuY3BwCmluZGV4IDY0ZGI0OTRiYWYwYTE3
MGYwMGY0YTRkN2Y5ZmYyNzFlNWYyNjVhNmYuLmEyYWYyMDAxMDI4OTFlNTQwYTMyMzFiZjczNDA2
NDYzODUwZGEwODkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvV2Vi
U3RvcmFnZS9TdG9yYWdlTWFuYWdlci5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9XZWJTdG9yYWdlL1N0b3JhZ2VNYW5hZ2VyLmNwcApAQCAtOTIsMzIgKzkyLDI4IEBAIHZv
aWQgU3RvcmFnZU1hbmFnZXI6OmNsb25lU2Vzc2lvblN0b3JhZ2VOYW1lc3BhY2UodWludDY0X3Qg
c3RvcmFnZU5hbWVzcGFjZUlELCB1CiAgICAgc2Vzc2lvblN0b3JhZ2VOYW1lc3BhY2UtPmNsb25l
VG8oKm5ld1Nlc3Npb25TdG9yYWdlTmFtZXNwYWNlKTsKIH0KIAotdm9pZCBTdG9yYWdlTWFuYWdl
cjo6Z2V0U2Vzc2lvblN0b3JhZ2VPcmlnaW5zKEZ1bmN0aW9uPHZvaWQoSGFzaFNldDxXZWJDb3Jl
OjpTZWN1cml0eU9yaWdpbkRhdGE+JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQorSGFzaFNldDxX
ZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGE+IFN0b3JhZ2VNYW5hZ2VyOjpnZXRTZXNzaW9uU3Rv
cmFnZU9yaWdpbnMoKSBjb25zdAogewogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwog
CiAgICAgSGFzaFNldDxTZWN1cml0eU9yaWdpbkRhdGE+IG9yaWdpbnM7CiAgICAgZm9yIChjb25z
dCBhdXRvJiBzZXNzaW9uU3RvcmFnZU5hbWVzcGFjZSA6IG1fc2Vzc2lvblN0b3JhZ2VOYW1lc3Bh
Y2VzLnZhbHVlcygpKSB7CiAgICAgICAgIGZvciAoYXV0byYgb3JpZ2luIDogc2Vzc2lvblN0b3Jh
Z2VOYW1lc3BhY2UtPm9yaWdpbnMoKSkKLSAgICAgICAgb3JpZ2lucy5hZGQoY3Jvc3NUaHJlYWRD
b3B5KG9yaWdpbikpOworICAgICAgICAgICAgb3JpZ2lucy5hZGQob3JpZ2luKTsKICAgICB9CiAK
LSAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW29yaWdpbnMgPSBXVEZNb3ZlKG9yaWdpbnMp
LCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFi
bGUgewotICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKG9yaWdpbnMpKTsKLSAgICB9
KTsKKyAgICByZXR1cm4gb3JpZ2luczsKIH0KIAotdm9pZCBTdG9yYWdlTWFuYWdlcjo6ZGVsZXRl
U2Vzc2lvblN0b3JhZ2VPcmlnaW5zKEZ1bmN0aW9uPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxl
cikKK3ZvaWQgU3RvcmFnZU1hbmFnZXI6OmRlbGV0ZVNlc3Npb25TdG9yYWdlT3JpZ2lucygpCiB7
CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CiAKICAgICBmb3IgKGF1dG8mIHNlc3Np
b25TdG9yYWdlTmFtZXNwYWNlIDogbV9zZXNzaW9uU3RvcmFnZU5hbWVzcGFjZXMudmFsdWVzKCkp
CiAgICAgICAgIHNlc3Npb25TdG9yYWdlTmFtZXNwYWNlLT5jbGVhckFsbFN0b3JhZ2VBcmVhcygp
OwotCi0gICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpKTsKIH0KIAotdm9pZCBTdG9yYWdlTWFuYWdlcjo6ZGVsZXRlU2Vzc2lvblN0b3JhZ2VFbnRy
aWVzRm9yT3JpZ2lucyhjb25zdCBWZWN0b3I8V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhPiYg
b3JpZ2lucywgRnVuY3Rpb248dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQordm9pZCBTdG9y
YWdlTWFuYWdlcjo6ZGVsZXRlU2Vzc2lvblN0b3JhZ2VFbnRyaWVzRm9yT3JpZ2lucyhjb25zdCBW
ZWN0b3I8V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhPiYgb3JpZ2lucykKIHsKICAgICBBU1NF
UlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKIApAQCAtMTI1LDQ5ICsxMjEsNDEgQEAgdm9pZCBTdG9y
YWdlTWFuYWdlcjo6ZGVsZXRlU2Vzc2lvblN0b3JhZ2VFbnRyaWVzRm9yT3JpZ2lucyhjb25zdCBW
ZWN0b3I8V2ViQ29yZToKICAgICAgICAgZm9yIChhdXRvJiBzZXNzaW9uU3RvcmFnZU5hbWVzcGFj
ZSA6IG1fc2Vzc2lvblN0b3JhZ2VOYW1lc3BhY2VzLnZhbHVlcygpKQogICAgICAgICAgICAgc2Vz
c2lvblN0b3JhZ2VOYW1lc3BhY2UtPmNsZWFyU3RvcmFnZUFyZWFzTWF0Y2hpbmdPcmlnaW4ob3Jp
Z2luKTsKICAgICB9Ci0KLSAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcikpOwogfQogCi12b2lkIFN0b3JhZ2VNYW5hZ2VyOjpnZXRMb2NhbFN0b3Jh
Z2VPcmlnaW5zKEZ1bmN0aW9uPHZvaWQoSGFzaFNldDxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRh
dGE+JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQorSGFzaFNldDxXZWJDb3JlOjpTZWN1cml0eU9y
aWdpbkRhdGE+IFN0b3JhZ2VNYW5hZ2VyOjpnZXRMb2NhbFN0b3JhZ2VPcmlnaW5zKCkgY29uc3QK
IHsKICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKIAogICAgIEhhc2hTZXQ8U2VjdXJp
dHlPcmlnaW5EYXRhPiBvcmlnaW5zOwogICAgIGlmIChtX2xvY2FsU3RvcmFnZURhdGFiYXNlVHJh
Y2tlcikgewogICAgIGZvciAoYXV0byYgb3JpZ2luIDogbV9sb2NhbFN0b3JhZ2VEYXRhYmFzZVRy
YWNrZXItPm9yaWdpbnMoKSkKLSAgICAgICAgb3JpZ2lucy5hZGQob3JpZ2luLmlzb2xhdGVkQ29w
eSgpKTsKKyAgICAgICAgb3JpZ2lucy5hZGQob3JpZ2luKTsKICAgICB9IGVsc2UgewogICAgICAg
ICBmb3IgKGNvbnN0IGF1dG8mIGxvY2FsU3RvcmFnZU5hbWVTcGFjZSA6IG1fbG9jYWxTdG9yYWdl
TmFtZXNwYWNlcy52YWx1ZXMoKSkgewogICAgICAgICAgICAgZm9yIChhdXRvJiBvcmlnaW4gOiBs
b2NhbFN0b3JhZ2VOYW1lU3BhY2UtPmVwaGVtZXJhbE9yaWdpbnMoKSkKLSAgICAgICAgICAgICAg
ICBvcmlnaW5zLmFkZChvcmlnaW4uaXNvbGF0ZWRDb3B5KCkpOworICAgICAgICAgICAgICAgIG9y
aWdpbnMuYWRkKG9yaWdpbik7CiAgICAgICAgIH0KICAgICB9CiAKICAgICBmb3IgKGF1dG8mIHRy
YW5zaWVudExvY2FsU3RvcmFnZU5hbWVzcGFjZSA6IG1fdHJhbnNpZW50TG9jYWxTdG9yYWdlTmFt
ZXNwYWNlcy52YWx1ZXMoKSkgewogICAgICAgICBmb3IgKGF1dG8mIG9yaWdpbiA6IHRyYW5zaWVu
dExvY2FsU3RvcmFnZU5hbWVzcGFjZS0+b3JpZ2lucygpKQotICAgICAgICAgICAgb3JpZ2lucy5h
ZGQob3JpZ2luLmlzb2xhdGVkQ29weSgpKTsKKyAgICAgICAgICAgIG9yaWdpbnMuYWRkKG9yaWdp
bik7CiAgICAgfQogCi0gICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFtvcmlnaW5zID0gV1RG
TW92ZShvcmlnaW5zKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKV0oKSBtdXRhYmxlIHsKLSAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShvcmln
aW5zKSk7Ci0gICAgfSk7CisgICAgcmV0dXJuIG9yaWdpbnM7CiB9CiAKLXZvaWQgU3RvcmFnZU1h
bmFnZXI6OmdldExvY2FsU3RvcmFnZU9yaWdpbkRldGFpbHMoRnVuY3Rpb248dm9pZChWZWN0b3I8
TG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyOjpPcmlnaW5EZXRhaWxzPiYmKT4mJiBjb21wbGV0
aW9uSGFuZGxlcikKK1ZlY3RvcjxMb2NhbFN0b3JhZ2VEYXRhYmFzZVRyYWNrZXI6Ok9yaWdpbkRl
dGFpbHM+IFN0b3JhZ2VNYW5hZ2VyOjpnZXRMb2NhbFN0b3JhZ2VPcmlnaW5EZXRhaWxzKCkgY29u
c3QKIHsKICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKIAotICAgIFZlY3RvcjxMb2Nh
bFN0b3JhZ2VEYXRhYmFzZVRyYWNrZXI6Ok9yaWdpbkRldGFpbHM+IG9yaWdpbkRldGFpbHM7CiAg
ICAgaWYgKG1fbG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyKQotICAgICAgICBvcmlnaW5EZXRh
aWxzID0gY3Jvc3NUaHJlYWRDb3B5KG1fbG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyLT5vcmln
aW5EZXRhaWxzKCkpOwotCi0gICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFtvcmlnaW5EZXRh
aWxzID0gV1RGTW92ZShvcmlnaW5EZXRhaWxzKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKLSAgICAgICAgY29tcGxldGlvbkhhbmRs
ZXIoV1RGTW92ZShvcmlnaW5EZXRhaWxzKSk7Ci0gICAgfSk7CisgICAgICAgIHJldHVybiBtX2xv
Y2FsU3RvcmFnZURhdGFiYXNlVHJhY2tlci0+b3JpZ2luRGV0YWlscygpOworICAgIHJldHVybiB7
IH07CiB9CiAKLXZvaWQgU3RvcmFnZU1hbmFnZXI6OmRlbGV0ZUxvY2FsU3RvcmFnZU9yaWdpbnNN
b2RpZmllZFNpbmNlKFdhbGxUaW1lIHRpbWUsIEZ1bmN0aW9uPHZvaWQoKT4mJiBjb21wbGV0aW9u
SGFuZGxlcikKK3ZvaWQgU3RvcmFnZU1hbmFnZXI6OmRlbGV0ZUxvY2FsU3RvcmFnZU9yaWdpbnNN
b2RpZmllZFNpbmNlKFdhbGxUaW1lIHRpbWUpCiB7CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01h
aW4oKSk7CiAKQEAgLTE4NiwxMSArMTc0LDkgQEAgdm9pZCBTdG9yYWdlTWFuYWdlcjo6ZGVsZXRl
TG9jYWxTdG9yYWdlT3JpZ2luc01vZGlmaWVkU2luY2UoV2FsbFRpbWUgdGltZSwgRnVuY3QKICAg
ICAgICAgZm9yIChhdXRvJiBsb2NhbFN0b3JhZ2VOYW1lc3BhY2UgOiBtX2xvY2FsU3RvcmFnZU5h
bWVzcGFjZXMudmFsdWVzKCkpCiAgICAgICAgICAgICBsb2NhbFN0b3JhZ2VOYW1lc3BhY2UtPmNs
ZWFyQWxsU3RvcmFnZUFyZWFzKCk7CiAgICAgfQotCi0gICAgUnVuTG9vcDo6bWFpbigpLmRpc3Bh
dGNoKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAotdm9pZCBTdG9yYWdlTWFuYWdl
cjo6ZGVsZXRlTG9jYWxTdG9yYWdlRW50cmllc0Zvck9yaWdpbnMoY29uc3QgVmVjdG9yPFdlYkNv
cmU6OlNlY3VyaXR5T3JpZ2luRGF0YT4mIG9yaWdpbnMsIEZ1bmN0aW9uPHZvaWQoKT4mJiBjb21w
bGV0aW9uSGFuZGxlcikKK3ZvaWQgU3RvcmFnZU1hbmFnZXI6OmRlbGV0ZUxvY2FsU3RvcmFnZUVu
dHJpZXNGb3JPcmlnaW5zKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGE+
JiBvcmlnaW5zKQogewogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwogCkBAIC0yMDQs
OCArMTkwLDYgQEAgdm9pZCBTdG9yYWdlTWFuYWdlcjo6ZGVsZXRlTG9jYWxTdG9yYWdlRW50cmll
c0Zvck9yaWdpbnMoY29uc3QgVmVjdG9yPFdlYkNvcmU6OlMKICAgICAgICAgaWYgKG1fbG9jYWxT
dG9yYWdlRGF0YWJhc2VUcmFja2VyKQogICAgICAgICAgICAgbV9sb2NhbFN0b3JhZ2VEYXRhYmFz
ZVRyYWNrZXItPmRlbGV0ZURhdGFiYXNlV2l0aE9yaWdpbihvcmlnaW4pOwogICAgIH0KLQotICAg
IFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9
CiAKIFN0b3JhZ2VBcmVhKiBTdG9yYWdlTWFuYWdlcjo6Y3JlYXRlTG9jYWxTdG9yYWdlQXJlYSh1
aW50NjRfdCBzdG9yYWdlTmFtZXNwYWNlSUQsIFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YSYm
IG9yaWdpbikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvV2ViU3Rv
cmFnZS9TdG9yYWdlTWFuYWdlci5oIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9XZWJT
dG9yYWdlL1N0b3JhZ2VNYW5hZ2VyLmgKaW5kZXggNmI1M2UxYjJlMDQ0OWY5YjNjMDQwM2I1MzIz
YWVhZDAwYzNhOTYwOS4uNzIyOTYxMTMzNjY5N2QxZDUwYTRlMTdjYjMxMmM0YzdlYTViYWM5NCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9XZWJTdG9yYWdlL1N0b3Jh
Z2VNYW5hZ2VyLmgKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9XZWJTdG9yYWdl
L1N0b3JhZ2VNYW5hZ2VyLmgKQEAgLTMwLDcgKzMwLDYgQEAKICNpbmNsdWRlIDxXZWJDb3JlL1Nl
Y3VyaXR5T3JpZ2luRGF0YS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvU3RvcmFnZU1hcC5oPgogI2lu
Y2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+Ci0jaW5jbHVkZSA8d3RmL0Z1bmN0aW9uLmg+CiAjaW5jbHVk
ZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CiAKQEAg
LTYyLDE0ICs2MSwxNCBAQCBwdWJsaWM6CiAgICAgdm9pZCBkZXN0cm95U2Vzc2lvblN0b3JhZ2VO
YW1lc3BhY2UodWludDY0X3Qgc3RvcmFnZU5hbWVzcGFjZUlEKTsKICAgICB2b2lkIGNsb25lU2Vz
c2lvblN0b3JhZ2VOYW1lc3BhY2UodWludDY0X3Qgc3RvcmFnZU5hbWVzcGFjZUlELCB1aW50NjRf
dCBuZXdTdG9yYWdlTmFtZXNwYWNlSUQpOwogCi0gICAgdm9pZCBnZXRTZXNzaW9uU3RvcmFnZU9y
aWdpbnMoRnVuY3Rpb248dm9pZChIYXNoU2V0PFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YT4m
Jik+JiYpOwotICAgIHZvaWQgZGVsZXRlU2Vzc2lvblN0b3JhZ2VPcmlnaW5zKEZ1bmN0aW9uPHZv
aWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcik7Ci0gICAgdm9pZCBkZWxldGVTZXNzaW9uU3RvcmFn
ZUVudHJpZXNGb3JPcmlnaW5zKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRh
dGE+JiwgRnVuY3Rpb248dm9pZCgpPiYmKTsKKyAgICBIYXNoU2V0PFdlYkNvcmU6OlNlY3VyaXR5
T3JpZ2luRGF0YT4gZ2V0U2Vzc2lvblN0b3JhZ2VPcmlnaW5zKCkgY29uc3Q7CisgICAgdm9pZCBk
ZWxldGVTZXNzaW9uU3RvcmFnZU9yaWdpbnMoKTsKKyAgICB2b2lkIGRlbGV0ZVNlc3Npb25TdG9y
YWdlRW50cmllc0Zvck9yaWdpbnMoY29uc3QgVmVjdG9yPFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2lu
RGF0YT4mKTsKIAotICAgIHZvaWQgZ2V0TG9jYWxTdG9yYWdlT3JpZ2lucyhGdW5jdGlvbjx2b2lk
KEhhc2hTZXQ8V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhPiYmKT4mJik7Ci0gICAgdm9pZCBk
ZWxldGVMb2NhbFN0b3JhZ2VPcmlnaW5zTW9kaWZpZWRTaW5jZShXYWxsVGltZSwgRnVuY3Rpb248
dm9pZCgpPiYmKTsKLSAgICB2b2lkIGRlbGV0ZUxvY2FsU3RvcmFnZUVudHJpZXNGb3JPcmlnaW5z
KGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGE+JiwgRnVuY3Rpb248dm9p
ZCgpPiYmKTsKLSAgICB2b2lkIGdldExvY2FsU3RvcmFnZU9yaWdpbkRldGFpbHMoRnVuY3Rpb248
dm9pZChWZWN0b3I8TG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyOjpPcmlnaW5EZXRhaWxzPiYm
KT4mJik7CisgICAgSGFzaFNldDxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGE+IGdldExvY2Fs
U3RvcmFnZU9yaWdpbnMoKSBjb25zdDsKKyAgICB2b2lkIGRlbGV0ZUxvY2FsU3RvcmFnZU9yaWdp
bnNNb2RpZmllZFNpbmNlKFdhbGxUaW1lKTsKKyAgICB2b2lkIGRlbGV0ZUxvY2FsU3RvcmFnZUVu
dHJpZXNGb3JPcmlnaW5zKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGE+
Jik7CisgICAgVmVjdG9yPExvY2FsU3RvcmFnZURhdGFiYXNlVHJhY2tlcjo6T3JpZ2luRGV0YWls
cz4gZ2V0TG9jYWxTdG9yYWdlT3JpZ2luRGV0YWlscygpIGNvbnN0OwogCiAgICAgdm9pZCBjbGVh
clN0b3JhZ2VOYW1lc3BhY2VzKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdlTWFuYWdlclNldC5jcHAgYi9Tb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL1dlYlN0b3JhZ2UvU3RvcmFnZU1hbmFnZXJTZXQuY3BwCmluZGV4IDgx
YzdiNzFiZjQ1MzAzMTFmODk5OTZkZGY4ZDQ2ODBlOWJiMDkyNGEuLjk5ZWJjY2I5MDA5ZjI3ZGM2
ZjhiODkzNTYwYjdiM2U4YjYwMjdlMzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdlTWFuYWdlclNldC5jcHAKKysrIGIvU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9XZWJTdG9yYWdlL1N0b3JhZ2VNYW5hZ2VyU2V0LmNwcApAQCAt
MTg1LDczICsxODUsMTAwIEBAIHZvaWQgU3RvcmFnZU1hbmFnZXJTZXQ6OnJlc3VtZSgpCiAgICAg
ICAgIG1fc3RhdGVDaGFuZ2VDb25kaXRpb24ubm90aWZ5T25lKCk7CiB9CiAKLXZvaWQgU3RvcmFn
ZU1hbmFnZXJTZXQ6OmdldFNlc3Npb25TdG9yYWdlT3JpZ2lucyhQQUw6OlNlc3Npb25JRCBzZXNz
aW9uSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoSGFzaFNldDxXZWJDb3JlOjpTZWN1cml0eU9y
aWdpbkRhdGE+JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQordm9pZCBTdG9yYWdlTWFuYWdlclNl
dDo6Z2V0U2Vzc2lvblN0b3JhZ2VPcmlnaW5zKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgR2V0
T3JpZ2luc0NhbGxiYWNrJiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CisgICAgQVNTRVJUKFJ1bkxv
b3A6OmlzTWFpbigpKTsKKwogICAgIG1fcXVldWUtPmRpc3BhdGNoKFt0aGlzLCBwcm90ZWN0ZWRU
aGlzID0gbWFrZVJlZigqdGhpcyksIHNlc3Npb25JRCwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKICAgICAgICAgYXV0byogc3RvcmFn
ZU1hbmFnZXIgPSBtX3N0b3JhZ2VNYW5hZ2Vycy5nZXQoc2Vzc2lvbklEKTsKICAgICAgICAgQVNT
RVJUKHN0b3JhZ2VNYW5hZ2VyKTsKIAotICAgICAgICBzdG9yYWdlTWFuYWdlci0+Z2V0U2Vzc2lv
blN0b3JhZ2VPcmlnaW5zKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKKyAgICAgICAgYXV0
byBvcmlnaW5zID0gc3RvcmFnZU1hbmFnZXItPmdldFNlc3Npb25TdG9yYWdlT3JpZ2lucygpOwor
ICAgICAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW2NvbXBsZXRpb25IYW5kbGVyID0gV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlciksIG9yaWdpbnMgPSBjcm9zc1RocmVhZENvcHkob3JpZ2lu
cyldKCkgbXV0YWJsZSB7CisgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKG9y
aWdpbnMpKTsKKyAgICAgICAgfSk7CiAgICAgfSk7CiB9CiAKLXZvaWQgU3RvcmFnZU1hbmFnZXJT
ZXQ6OmRlbGV0ZVNlc3Npb25TdG9yYWdlKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQordm9pZCBTdG9yYWdlTWFu
YWdlclNldDo6ZGVsZXRlU2Vzc2lvblN0b3JhZ2UoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBE
ZWxldGVDYWxsYmFjayYmIGNvbXBsZXRpb25IYW5kbGVyKQogeworICAgIEFTU0VSVChSdW5Mb29w
Ojppc01haW4oKSk7CisKICAgICBtX3F1ZXVlLT5kaXNwYXRjaChbdGhpcywgcHJvdGVjdGVkVGhp
cyA9IG1ha2VSZWYoKnRoaXMpLCBzZXNzaW9uSUQsIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7CiAgICAgICAgIGF1dG8qIHN0b3JhZ2VN
YW5hZ2VyID0gbV9zdG9yYWdlTWFuYWdlcnMuZ2V0KHNlc3Npb25JRCk7CiAgICAgICAgIEFTU0VS
VChzdG9yYWdlTWFuYWdlcik7CiAKLSAgICAgICAgc3RvcmFnZU1hbmFnZXItPmRlbGV0ZVNlc3Np
b25TdG9yYWdlT3JpZ2lucyhXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CisgICAgICAgIHN0
b3JhZ2VNYW5hZ2VyLT5kZWxldGVTZXNzaW9uU3RvcmFnZU9yaWdpbnMoKTsKKyAgICAgICAgUnVu
TG9vcDo6bWFpbigpLmRpc3BhdGNoKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICB9
KTsKIH0KIAogdm9pZCBTdG9yYWdlTWFuYWdlclNldDo6ZGVsZXRlU2Vzc2lvblN0b3JhZ2VGb3JP
cmlnaW5zKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgVmVjdG9yPFdlYkNvcmU6OlNl
Y3VyaXR5T3JpZ2luRGF0YT4mIG9yaWdpbkRhdGFzLCBEZWxldGVDYWxsYmFjayYmIGNvbXBsZXRp
b25IYW5kbGVyKQogeworICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CisKICAgICBtX3F1
ZXVlLT5kaXNwYXRjaChbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBzZXNz
aW9uSUQsIGNvcGllZE9yaWdpbkRhdGFzID0gY3Jvc3NUaHJlYWRDb3B5KG9yaWdpbkRhdGFzKSwg
Y29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxl
IHsKICAgICAgICAgYXV0byogc3RvcmFnZU1hbmFnZXIgPSBtX3N0b3JhZ2VNYW5hZ2Vycy5nZXQo
c2Vzc2lvbklEKTsKICAgICAgICAgQVNTRVJUKHN0b3JhZ2VNYW5hZ2VyKTsKIAotICAgICAgICBz
dG9yYWdlTWFuYWdlci0+ZGVsZXRlU2Vzc2lvblN0b3JhZ2VFbnRyaWVzRm9yT3JpZ2lucyhjb3Bp
ZWRPcmlnaW5EYXRhcywgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOworICAgICAgICBzdG9y
YWdlTWFuYWdlci0+ZGVsZXRlU2Vzc2lvblN0b3JhZ2VFbnRyaWVzRm9yT3JpZ2lucyhjb3BpZWRP
cmlnaW5EYXRhcyk7CisgICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKSk7CiAgICAgfSk7CiB9CiAKIHZvaWQgU3RvcmFnZU1hbmFnZXJTZXQ6
OmdldExvY2FsU3RvcmFnZU9yaWdpbnMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBHZXRPcmln
aW5zQ2FsbGJhY2smJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKKyAgICBBU1NFUlQoUnVuTG9vcDo6
aXNNYWluKCkpOworCiAgICAgbV9xdWV1ZS0+ZGlzcGF0Y2goW3RoaXMsIHByb3RlY3RlZFRoaXMg
PSBtYWtlUmVmKCp0aGlzKSwgc2Vzc2lvbklELCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgewogICAgICAgICBhdXRvKiBzdG9yYWdlTWFu
YWdlciA9IG1fc3RvcmFnZU1hbmFnZXJzLmdldChzZXNzaW9uSUQpOwogICAgICAgICBBU1NFUlQo
c3RvcmFnZU1hbmFnZXIpOwogCi0gICAgICAgIHN0b3JhZ2VNYW5hZ2VyLT5nZXRMb2NhbFN0b3Jh
Z2VPcmlnaW5zKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKKyAgICAgICAgYXV0byBvcmln
aW5zID0gc3RvcmFnZU1hbmFnZXItPmdldExvY2FsU3RvcmFnZU9yaWdpbnMoKTsKKyAgICAgICAg
UnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpLCBvcmlnaW5zID0gY3Jvc3NUaHJlYWRDb3B5KG9yaWdpbnMpXSgpIG11
dGFibGUgeworICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShvcmlnaW5zKSk7
CisgICAgICAgIH0pOwogICAgIH0pOwogfQogCiB2b2lkIFN0b3JhZ2VNYW5hZ2VyU2V0OjpkZWxl
dGVMb2NhbFN0b3JhZ2VNb2RpZmllZFNpbmNlKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgV2Fs
bFRpbWUgdGltZSwgRGVsZXRlQ2FsbGJhY2smJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKKyAgICBB
U1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOworCiAgICAgbV9xdWV1ZS0+ZGlzcGF0Y2goW3RoaXMs
IHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgc2Vzc2lvbklELCB0aW1lLCBjb21wbGV0
aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgewogICAg
ICAgICBhdXRvKiBzdG9yYWdlTWFuYWdlciA9IG1fc3RvcmFnZU1hbmFnZXJzLmdldChzZXNzaW9u
SUQpOwogICAgICAgICBBU1NFUlQoc3RvcmFnZU1hbmFnZXIpOwogCi0gICAgICAgIHN0b3JhZ2VN
YW5hZ2VyLT5kZWxldGVMb2NhbFN0b3JhZ2VPcmlnaW5zTW9kaWZpZWRTaW5jZSh0aW1lLCBXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CisgICAgICAgIHN0b3JhZ2VNYW5hZ2VyLT5kZWxldGVM
b2NhbFN0b3JhZ2VPcmlnaW5zTW9kaWZpZWRTaW5jZSh0aW1lKTsKKyAgICAgICAgUnVuTG9vcDo6
bWFpbigpLmRpc3BhdGNoKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICB9KTsKIH0K
IAogdm9pZCBTdG9yYWdlTWFuYWdlclNldDo6ZGVsZXRlTG9jYWxTdG9yYWdlRm9yT3JpZ2lucyhQ
QUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpTZWN1cml0eU9y
aWdpbkRhdGE+JiBvcmlnaW5EYXRhcywgRGVsZXRlQ2FsbGJhY2smJiBjb21wbGV0aW9uSGFuZGxl
cikKIHsKKyAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOworCiAgICAgbV9xdWV1ZS0+ZGlz
cGF0Y2goW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgc2Vzc2lvbklELCBj
b3BpZWRPcmlnaW5EYXRhcyA9IGNyb3NzVGhyZWFkQ29weShvcmlnaW5EYXRhcyksIGNvbXBsZXRp
b25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7CiAgICAg
ICAgIGF1dG8qIHN0b3JhZ2VNYW5hZ2VyID0gbV9zdG9yYWdlTWFuYWdlcnMuZ2V0KHNlc3Npb25J
RCk7CiAgICAgICAgIEFTU0VSVChzdG9yYWdlTWFuYWdlcik7CiAKLSAgICAgICAgc3RvcmFnZU1h
bmFnZXItPmRlbGV0ZUxvY2FsU3RvcmFnZUVudHJpZXNGb3JPcmlnaW5zKGNvcGllZE9yaWdpbkRh
dGFzLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CisgICAgICAgIHN0b3JhZ2VNYW5hZ2Vy
LT5kZWxldGVMb2NhbFN0b3JhZ2VFbnRyaWVzRm9yT3JpZ2lucyhjb3BpZWRPcmlnaW5EYXRhcyk7
CisgICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSk7CiAgICAgfSk7CiB9CiAKLXZvaWQgU3RvcmFnZU1hbmFnZXJTZXQ6OmdldExvY2FsU3Rv
cmFnZU9yaWdpbkRldGFpbHMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKFZlY3RvcjxMb2NhbFN0b3JhZ2VEYXRhYmFzZVRyYWNrZXI6Ok9yaWdpbkRldGFp
bHM+JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQordm9pZCBTdG9yYWdlTWFuYWdlclNldDo6Z2V0
TG9jYWxTdG9yYWdlT3JpZ2luRGV0YWlscyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIEdldE9y
aWdpbkRldGFpbHNDYWxsYmFjayYmIGNvbXBsZXRpb25IYW5kbGVyKQogeworICAgIEFTU0VSVChS
dW5Mb29wOjppc01haW4oKSk7CisKICAgICBtX3F1ZXVlLT5kaXNwYXRjaChbdGhpcywgcHJvdGVj
dGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBzZXNzaW9uSUQsIGNvbXBsZXRpb25IYW5kbGVyID0g
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7CiAgICAgICAgIGF1dG8qIHN0
b3JhZ2VNYW5hZ2VyID0gbV9zdG9yYWdlTWFuYWdlcnMuZ2V0KHNlc3Npb25JRCk7CiAgICAgICAg
IEFTU0VSVChzdG9yYWdlTWFuYWdlcik7CiAKLSAgICAgICAgc3RvcmFnZU1hbmFnZXItPmdldExv
Y2FsU3RvcmFnZU9yaWdpbkRldGFpbHMoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOworICAg
ICAgICBhdXRvIG9yaWdpbkRldGFpbHMgPSBzdG9yYWdlTWFuYWdlci0+Z2V0TG9jYWxTdG9yYWdl
T3JpZ2luRGV0YWlscygpOworICAgICAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW2NvbXBs
ZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciksIG9yaWdpbkRldGFpbHMg
PSBjcm9zc1RocmVhZENvcHkob3JpZ2luRGV0YWlscyldKCkgbXV0YWJsZSB7CisgICAgICAgICAg
ICBjb21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKG9yaWdpbkRldGFpbHMpKTsKKyAgICAgICAgfSk7
CiAgICAgfSk7CiB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>376510</attachid>
            <date>2019-08-16 10:49:00 -0700</date>
            <delta_ts>2019-08-16 11:15:28 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-200817-20190816104900.patch</filename>
            <type>text/plain</type>
            <size>17664</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ4Nzc2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGY2MTg1YTI5YjIwODAzYWFk
NTVjNjYxZmQ4Zjc1M2ZiMmE0ZWJiZjYuLmQ1MDRlZDgyNGRiOTA1ZWJjMjNmZDc4M2VjYTZmY2Nm
ZmQxZTdlN2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzcgQEAKKzIwMTktMDgtMTYgIENocmlzIER1
bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KKworICAgICAgICBDbGFyaWZ5IFN0b3JhZ2VNYW5hZ2Vy
U2V0IC8gU3RvcmFnZU1hbmFnZXIgdGhyZWFkaW5nIG1vZGVsIGFmdGVyIHIyNDg3MzQKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMDgxNworCisgICAg
ICAgIFJldmlld2VkIGJ5IEdlb2ZmcmV5IEdhcmVuLgorCisgICAgICAgIENsYXJpZnkgU3RvcmFn
ZU1hbmFnZXJTZXQgLyBTdG9yYWdlTWFuYWdlciB0aHJlYWRpbmcgbW9kZWwgYWZ0ZXIgcjI0ODcz
NC4gU3RvcmFnZU1hbmFnZXIgaXMgbm93CisgICAgICAgIGEgYmFja2dyb3VuZCB0aHJlYWQgb2Jq
ZWN0IGJ1dCBpdCBzdGlsbCBjYWxscyBpdHMgY29tcGxldGlvbiBoYW5kbGVycyBvbiB0aGUgbWFp
biB0aHJlYWQsIHdoaWNoCisgICAgICAgIGlzIHZlcnkgZXJyb3IgcHJvbmUuIFRoZSBwYXR0ZXJu
IGluIFdlYktpdCBmb3IgdGhyZWFkIHNhZmV0eSBpcyB0aGF0IG1ldGhvZHMgc2hvdWxkIGFsd2F5
cyBjYWxsCisgICAgICAgIHRoZWlyIGNvbXBsZXRpb24gaGFuZGxlciBvZiB0aGUgdGhyZWFkIC8g
cXVldWUgdGhleSB3ZXJlIGNhbGxlZCBvbiB0aGVtc2VsdmVzLiBEb2luZyBkaWZmZXJlbnRseQor
ICAgICAgICBoYXMgY2F1c2VkIHNvIG1hbnkgdGhyZWFkLXNhZmV0eSBidWdzIGluIHRoZSBwYXN0
LgorCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdlTWFuYWdlci5j
cHA6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VNYW5hZ2VyOjpnZXRTZXNzaW9uU3RvcmFnZU9y
aWdpbnMgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlTWFuYWdlcjo6ZGVsZXRlU2Vz
c2lvblN0b3JhZ2VPcmlnaW5zKToKKyAgICAgICAgKFdlYktpdDo6U3RvcmFnZU1hbmFnZXI6OmRl
bGV0ZVNlc3Npb25TdG9yYWdlRW50cmllc0Zvck9yaWdpbnMpOgorICAgICAgICAoV2ViS2l0OjpT
dG9yYWdlTWFuYWdlcjo6Z2V0TG9jYWxTdG9yYWdlT3JpZ2lucyBjb25zdCk6CisgICAgICAgIChX
ZWJLaXQ6OlN0b3JhZ2VNYW5hZ2VyOjpnZXRMb2NhbFN0b3JhZ2VPcmlnaW5EZXRhaWxzIGNvbnN0
KToKKyAgICAgICAgKFdlYktpdDo6U3RvcmFnZU1hbmFnZXI6OmRlbGV0ZUxvY2FsU3RvcmFnZU9y
aWdpbnNNb2RpZmllZFNpbmNlKToKKyAgICAgICAgKFdlYktpdDo6U3RvcmFnZU1hbmFnZXI6OmRl
bGV0ZUxvY2FsU3RvcmFnZUVudHJpZXNGb3JPcmlnaW5zKToKKyAgICAgICAgKFdlYktpdDo6U3Rv
cmFnZU1hbmFnZXI6OmdldFNlc3Npb25TdG9yYWdlT3JpZ2lucyk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJLaXQ6OlN0b3JhZ2VNYW5hZ2VyOjpnZXRMb2NhbFN0b3JhZ2VPcmlnaW5zKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYktpdDo6U3RvcmFnZU1hbmFnZXI6OmdldExvY2FsU3RvcmFnZU9yaWdp
bkRldGFpbHMpOiBEZWxldGVkLgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL1dlYlN0b3JhZ2Uv
U3RvcmFnZU1hbmFnZXIuaDoKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9XZWJTdG9yYWdlL1N0
b3JhZ2VNYW5hZ2VyU2V0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6U3RvcmFnZU1hbmFnZXJTZXQ6
OmdldFNlc3Npb25TdG9yYWdlT3JpZ2lucyk6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VNYW5h
Z2VyU2V0OjpkZWxldGVTZXNzaW9uU3RvcmFnZSk6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VN
YW5hZ2VyU2V0OjpkZWxldGVTZXNzaW9uU3RvcmFnZUZvck9yaWdpbnMpOgorICAgICAgICAoV2Vi
S2l0OjpTdG9yYWdlTWFuYWdlclNldDo6Z2V0TG9jYWxTdG9yYWdlT3JpZ2lucyk6CisgICAgICAg
IChXZWJLaXQ6OlN0b3JhZ2VNYW5hZ2VyU2V0OjpkZWxldGVMb2NhbFN0b3JhZ2VNb2RpZmllZFNp
bmNlKToKKyAgICAgICAgKFdlYktpdDo6U3RvcmFnZU1hbmFnZXJTZXQ6OmRlbGV0ZUxvY2FsU3Rv
cmFnZUZvck9yaWdpbnMpOgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlTWFuYWdlclNldDo6Z2V0
TG9jYWxTdG9yYWdlT3JpZ2luRGV0YWlscyk6CisKIDIwMTktMDgtMTYgIFRpbW90aHkgSGF0Y2hl
ciAgPHRpbW90aHlAYXBwbGUuY29tPgogCiAgICAgICAgIFJFR1JFU1NJT04gKHIyNDg0MzYpOiBX
S1dlYlZpZXcgZG9lc27igJl0IHJlc3BlY3QgaXNPcGFxdWUgc2V0dGluZyBpbiBOSUIuCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL1dlYlN0b3JhZ2UvTG9jYWxTdG9y
YWdlRGF0YWJhc2VUcmFja2VyLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvV2Vi
U3RvcmFnZS9Mb2NhbFN0b3JhZ2VEYXRhYmFzZVRyYWNrZXIuY3BwCmluZGV4IDY3MzI3MDk0MzJm
M2E2ZTc1MjUxMTdmZWVlNzlmYjVjOGE2MTY5MjkuLjBlYmVhY2JhNjE5Y2IxZTlhMzc1M2ZlMDI1
ZTQ2YTM1ZmI4MWIxNDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
V2ViU3RvcmFnZS9Mb2NhbFN0b3JhZ2VEYXRhYmFzZVRyYWNrZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9Mb2NhbFN0b3JhZ2VEYXRhYmFzZVRyYWNr
ZXIuY3BwCkBAIC0xMzEsNyArMTMxLDcgQEAgVmVjdG9yPFNlY3VyaXR5T3JpZ2luRGF0YT4gTG9j
YWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyOjpvcmlnaW5zKCkgY29uc3QKICAgICByZXR1cm4gZGF0
YWJhc2VPcmlnaW5zOwogfQogCi1WZWN0b3I8TG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyOjpP
cmlnaW5EZXRhaWxzPiBMb2NhbFN0b3JhZ2VEYXRhYmFzZVRyYWNrZXI6Om9yaWdpbkRldGFpbHMo
KQorVmVjdG9yPExvY2FsU3RvcmFnZURhdGFiYXNlVHJhY2tlcjo6T3JpZ2luRGV0YWlscz4gTG9j
YWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyOjpvcmlnaW5EZXRhaWxzQ3Jvc3NUaHJlYWRDb3B5KCkK
IHsKICAgICBWZWN0b3I8T3JpZ2luRGV0YWlscz4gcmVzdWx0OwogICAgIGF1dG8gZGF0YWJhc2VP
cmlnaW5zID0gb3JpZ2lucygpOwpAQCAtMTQxLDEwICsxNDEsMTAgQEAgVmVjdG9yPExvY2FsU3Rv
cmFnZURhdGFiYXNlVHJhY2tlcjo6T3JpZ2luRGV0YWlscz4gTG9jYWxTdG9yYWdlRGF0YWJhc2VU
cmFja2VyOjoKICAgICAgICAgU3RyaW5nIHBhdGggPSBkYXRhYmFzZVBhdGgob3JpZ2luKTsKIAog
ICAgICAgICBPcmlnaW5EZXRhaWxzIGRldGFpbHM7Ci0gICAgICAgIGRldGFpbHMub3JpZ2luSWRl
bnRpZmllciA9IG9yaWdpbi5kYXRhYmFzZUlkZW50aWZpZXIoKTsKKyAgICAgICAgZGV0YWlscy5v
cmlnaW5JZGVudGlmaWVyID0gY3Jvc3NUaHJlYWRDb3B5KG9yaWdpbi5kYXRhYmFzZUlkZW50aWZp
ZXIoKSk7CiAgICAgICAgIGRldGFpbHMuY3JlYXRpb25UaW1lID0gU1FMaXRlRmlsZVN5c3RlbTo6
ZGF0YWJhc2VDcmVhdGlvblRpbWUocGF0aCk7CiAgICAgICAgIGRldGFpbHMubW9kaWZpY2F0aW9u
VGltZSA9IFNRTGl0ZUZpbGVTeXN0ZW06OmRhdGFiYXNlTW9kaWZpY2F0aW9uVGltZShwYXRoKTsK
LSAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZChkZXRhaWxzKTsKKyAgICAgICAgcmVzdWx0
LnVuY2hlY2tlZEFwcGVuZChXVEZNb3ZlKGRldGFpbHMpKTsKICAgICB9CiAKICAgICByZXR1cm4g
cmVzdWx0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9XZWJTdG9y
YWdlL0xvY2FsU3RvcmFnZURhdGFiYXNlVHJhY2tlci5oIGIvU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9XZWJTdG9yYWdlL0xvY2FsU3RvcmFnZURhdGFiYXNlVHJhY2tlci5oCmluZGV4IDg1
YjQ5ZWUyNWI4YWNjYzlkYWY5OTkzNGRlNzg4YzIzNWZkNWFiZjAuLjU0NGU0NGYwZGE3NDcwZjNl
ODI2NTY3Y2QwMGI4ZTcwMzRhZGYyYTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvV2ViU3RvcmFnZS9Mb2NhbFN0b3JhZ2VEYXRhYmFzZVRyYWNrZXIuaAorKysgYi9T
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL1dlYlN0b3JhZ2UvTG9jYWxTdG9yYWdlRGF0YWJh
c2VUcmFja2VyLmgKQEAgLTYxLDcgKzYxLDcgQEAgcHVibGljOgogCiAgICAgICAgIE9yaWdpbkRl
dGFpbHMgaXNvbGF0ZWRDb3B5KCkgY29uc3QgeyByZXR1cm4geyBvcmlnaW5JZGVudGlmaWVyLmlz
b2xhdGVkQ29weSgpLCBjcmVhdGlvblRpbWUsIG1vZGlmaWNhdGlvblRpbWUgfTsgfQogICAgIH07
Ci0gICAgVmVjdG9yPE9yaWdpbkRldGFpbHM+IG9yaWdpbkRldGFpbHMoKTsKKyAgICBWZWN0b3I8
T3JpZ2luRGV0YWlscz4gb3JpZ2luRGV0YWlsc0Nyb3NzVGhyZWFkQ29weSgpOwogCiBwcml2YXRl
OgogICAgIExvY2FsU3RvcmFnZURhdGFiYXNlVHJhY2tlcihTdHJpbmcmJiBsb2NhbFN0b3JhZ2VE
aXJlY3RvcnkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9XZWJT
dG9yYWdlL1N0b3JhZ2VNYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
V2ViU3RvcmFnZS9TdG9yYWdlTWFuYWdlci5jcHAKaW5kZXggNjRkYjQ5NGJhZjBhMTcwZjAwZjRh
NGQ3ZjlmZjI3MWU1ZjI2NWE2Zi4uODA4YzRlMzEzZDc0NTBmZjZiNWIzODI1NTdlZmFlMzI1OTg3
MGYzZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9XZWJTdG9yYWdl
L1N0b3JhZ2VNYW5hZ2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL1dl
YlN0b3JhZ2UvU3RvcmFnZU1hbmFnZXIuY3BwCkBAIC05MiwzMiArOTIsMjggQEAgdm9pZCBTdG9y
YWdlTWFuYWdlcjo6Y2xvbmVTZXNzaW9uU3RvcmFnZU5hbWVzcGFjZSh1aW50NjRfdCBzdG9yYWdl
TmFtZXNwYWNlSUQsIHUKICAgICBzZXNzaW9uU3RvcmFnZU5hbWVzcGFjZS0+Y2xvbmVUbygqbmV3
U2Vzc2lvblN0b3JhZ2VOYW1lc3BhY2UpOwogfQogCi12b2lkIFN0b3JhZ2VNYW5hZ2VyOjpnZXRT
ZXNzaW9uU3RvcmFnZU9yaWdpbnMoRnVuY3Rpb248dm9pZChIYXNoU2V0PFdlYkNvcmU6OlNlY3Vy
aXR5T3JpZ2luRGF0YT4mJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCitIYXNoU2V0PFdlYkNvcmU6
OlNlY3VyaXR5T3JpZ2luRGF0YT4gU3RvcmFnZU1hbmFnZXI6OmdldFNlc3Npb25TdG9yYWdlT3Jp
Z2luc0Nyb3NzVGhyZWFkQ29weSgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01h
aW4oKSk7CiAKICAgICBIYXNoU2V0PFNlY3VyaXR5T3JpZ2luRGF0YT4gb3JpZ2luczsKICAgICBm
b3IgKGNvbnN0IGF1dG8mIHNlc3Npb25TdG9yYWdlTmFtZXNwYWNlIDogbV9zZXNzaW9uU3RvcmFn
ZU5hbWVzcGFjZXMudmFsdWVzKCkpIHsKICAgICAgICAgZm9yIChhdXRvJiBvcmlnaW4gOiBzZXNz
aW9uU3RvcmFnZU5hbWVzcGFjZS0+b3JpZ2lucygpKQotICAgICAgICBvcmlnaW5zLmFkZChjcm9z
c1RocmVhZENvcHkob3JpZ2luKSk7CisgICAgICAgICAgICBvcmlnaW5zLmFkZChjcm9zc1RocmVh
ZENvcHkob3JpZ2luKSk7CiAgICAgfQogCi0gICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFtv
cmlnaW5zID0gV1RGTW92ZShvcmlnaW5zKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKLSAgICAgICAgY29tcGxldGlvbkhhbmRsZXIo
V1RGTW92ZShvcmlnaW5zKSk7Ci0gICAgfSk7CisgICAgcmV0dXJuIG9yaWdpbnM7CiB9CiAKLXZv
aWQgU3RvcmFnZU1hbmFnZXI6OmRlbGV0ZVNlc3Npb25TdG9yYWdlT3JpZ2lucyhGdW5jdGlvbjx2
b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCit2b2lkIFN0b3JhZ2VNYW5hZ2VyOjpkZWxldGVT
ZXNzaW9uU3RvcmFnZU9yaWdpbnMoKQogewogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkp
OwogCiAgICAgZm9yIChhdXRvJiBzZXNzaW9uU3RvcmFnZU5hbWVzcGFjZSA6IG1fc2Vzc2lvblN0
b3JhZ2VOYW1lc3BhY2VzLnZhbHVlcygpKQogICAgICAgICBzZXNzaW9uU3RvcmFnZU5hbWVzcGFj
ZS0+Y2xlYXJBbGxTdG9yYWdlQXJlYXMoKTsKLQotICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRj
aChXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKLXZvaWQgU3RvcmFnZU1hbmFnZXI6
OmRlbGV0ZVNlc3Npb25TdG9yYWdlRW50cmllc0Zvck9yaWdpbnMoY29uc3QgVmVjdG9yPFdlYkNv
cmU6OlNlY3VyaXR5T3JpZ2luRGF0YT4mIG9yaWdpbnMsIEZ1bmN0aW9uPHZvaWQoKT4mJiBjb21w
bGV0aW9uSGFuZGxlcikKK3ZvaWQgU3RvcmFnZU1hbmFnZXI6OmRlbGV0ZVNlc3Npb25TdG9yYWdl
RW50cmllc0Zvck9yaWdpbnMoY29uc3QgVmVjdG9yPFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0
YT4mIG9yaWdpbnMpCiB7CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CiAKQEAgLTEy
NSwxMSArMTIxLDkgQEAgdm9pZCBTdG9yYWdlTWFuYWdlcjo6ZGVsZXRlU2Vzc2lvblN0b3JhZ2VF
bnRyaWVzRm9yT3JpZ2lucyhjb25zdCBWZWN0b3I8V2ViQ29yZToKICAgICAgICAgZm9yIChhdXRv
JiBzZXNzaW9uU3RvcmFnZU5hbWVzcGFjZSA6IG1fc2Vzc2lvblN0b3JhZ2VOYW1lc3BhY2VzLnZh
bHVlcygpKQogICAgICAgICAgICAgc2Vzc2lvblN0b3JhZ2VOYW1lc3BhY2UtPmNsZWFyU3RvcmFn
ZUFyZWFzTWF0Y2hpbmdPcmlnaW4ob3JpZ2luKTsKICAgICB9Ci0KLSAgICBSdW5Mb29wOjptYWlu
KCkuZGlzcGF0Y2goV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCi12b2lkIFN0b3Jh
Z2VNYW5hZ2VyOjpnZXRMb2NhbFN0b3JhZ2VPcmlnaW5zKEZ1bmN0aW9uPHZvaWQoSGFzaFNldDxX
ZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGE+JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQorSGFz
aFNldDxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGE+IFN0b3JhZ2VNYW5hZ2VyOjpnZXRMb2Nh
bFN0b3JhZ2VPcmlnaW5zQ3Jvc3NUaHJlYWRDb3B5KCkgY29uc3QKIHsKICAgICBBU1NFUlQoIVJ1
bkxvb3A6OmlzTWFpbigpKTsKIApAQCAtMTQ5LDI1ICsxNDMsMTkgQEAgdm9pZCBTdG9yYWdlTWFu
YWdlcjo6Z2V0TG9jYWxTdG9yYWdlT3JpZ2lucyhGdW5jdGlvbjx2b2lkKEhhc2hTZXQ8V2ViQ29y
ZTo6U2VjdXIKICAgICAgICAgICAgIG9yaWdpbnMuYWRkKG9yaWdpbi5pc29sYXRlZENvcHkoKSk7
CiAgICAgfQogCi0gICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFtvcmlnaW5zID0gV1RGTW92
ZShvcmlnaW5zKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KV0oKSBtdXRhYmxlIHsKLSAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShvcmlnaW5z
KSk7Ci0gICAgfSk7CisgICAgcmV0dXJuIG9yaWdpbnM7CiB9CiAKLXZvaWQgU3RvcmFnZU1hbmFn
ZXI6OmdldExvY2FsU3RvcmFnZU9yaWdpbkRldGFpbHMoRnVuY3Rpb248dm9pZChWZWN0b3I8TG9j
YWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyOjpPcmlnaW5EZXRhaWxzPiYmKT4mJiBjb21wbGV0aW9u
SGFuZGxlcikKK1ZlY3RvcjxMb2NhbFN0b3JhZ2VEYXRhYmFzZVRyYWNrZXI6Ok9yaWdpbkRldGFp
bHM+IFN0b3JhZ2VNYW5hZ2VyOjpnZXRMb2NhbFN0b3JhZ2VPcmlnaW5EZXRhaWxzQ3Jvc3NUaHJl
YWRDb3B5KCkgY29uc3QKIHsKICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKIAotICAg
IFZlY3RvcjxMb2NhbFN0b3JhZ2VEYXRhYmFzZVRyYWNrZXI6Ok9yaWdpbkRldGFpbHM+IG9yaWdp
bkRldGFpbHM7CiAgICAgaWYgKG1fbG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyKQotICAgICAg
ICBvcmlnaW5EZXRhaWxzID0gY3Jvc3NUaHJlYWRDb3B5KG1fbG9jYWxTdG9yYWdlRGF0YWJhc2VU
cmFja2VyLT5vcmlnaW5EZXRhaWxzKCkpOwotCi0gICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNo
KFtvcmlnaW5EZXRhaWxzID0gV1RGTW92ZShvcmlnaW5EZXRhaWxzKSwgY29tcGxldGlvbkhhbmRs
ZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKLSAgICAgICAgY29t
cGxldGlvbkhhbmRsZXIoV1RGTW92ZShvcmlnaW5EZXRhaWxzKSk7Ci0gICAgfSk7CisgICAgICAg
IHJldHVybiBtX2xvY2FsU3RvcmFnZURhdGFiYXNlVHJhY2tlci0+b3JpZ2luRGV0YWlsc0Nyb3Nz
VGhyZWFkQ29weSgpOworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgU3RvcmFnZU1hbmFnZXI6
OmRlbGV0ZUxvY2FsU3RvcmFnZU9yaWdpbnNNb2RpZmllZFNpbmNlKFdhbGxUaW1lIHRpbWUsIEZ1
bmN0aW9uPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3ZvaWQgU3RvcmFnZU1hbmFnZXI6
OmRlbGV0ZUxvY2FsU3RvcmFnZU9yaWdpbnNNb2RpZmllZFNpbmNlKFdhbGxUaW1lIHRpbWUpCiB7
CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CiAKQEAgLTE4NiwxMSArMTc0LDkgQEAg
dm9pZCBTdG9yYWdlTWFuYWdlcjo6ZGVsZXRlTG9jYWxTdG9yYWdlT3JpZ2luc01vZGlmaWVkU2lu
Y2UoV2FsbFRpbWUgdGltZSwgRnVuY3QKICAgICAgICAgZm9yIChhdXRvJiBsb2NhbFN0b3JhZ2VO
YW1lc3BhY2UgOiBtX2xvY2FsU3RvcmFnZU5hbWVzcGFjZXMudmFsdWVzKCkpCiAgICAgICAgICAg
ICBsb2NhbFN0b3JhZ2VOYW1lc3BhY2UtPmNsZWFyQWxsU3RvcmFnZUFyZWFzKCk7CiAgICAgfQot
Ci0gICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
KTsKIH0KIAotdm9pZCBTdG9yYWdlTWFuYWdlcjo6ZGVsZXRlTG9jYWxTdG9yYWdlRW50cmllc0Zv
ck9yaWdpbnMoY29uc3QgVmVjdG9yPFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YT4mIG9yaWdp
bnMsIEZ1bmN0aW9uPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3ZvaWQgU3RvcmFnZU1h
bmFnZXI6OmRlbGV0ZUxvY2FsU3RvcmFnZUVudHJpZXNGb3JPcmlnaW5zKGNvbnN0IFZlY3RvcjxX
ZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGE+JiBvcmlnaW5zKQogewogICAgIEFTU0VSVCghUnVu
TG9vcDo6aXNNYWluKCkpOwogCkBAIC0yMDQsOCArMTkwLDYgQEAgdm9pZCBTdG9yYWdlTWFuYWdl
cjo6ZGVsZXRlTG9jYWxTdG9yYWdlRW50cmllc0Zvck9yaWdpbnMoY29uc3QgVmVjdG9yPFdlYkNv
cmU6OlMKICAgICAgICAgaWYgKG1fbG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyKQogICAgICAg
ICAgICAgbV9sb2NhbFN0b3JhZ2VEYXRhYmFzZVRyYWNrZXItPmRlbGV0ZURhdGFiYXNlV2l0aE9y
aWdpbihvcmlnaW4pOwogICAgIH0KLQotICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIFN0b3JhZ2VBcmVhKiBTdG9yYWdlTWFuYWdl
cjo6Y3JlYXRlTG9jYWxTdG9yYWdlQXJlYSh1aW50NjRfdCBzdG9yYWdlTmFtZXNwYWNlSUQsIFdl
YkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YSYmIG9yaWdpbikKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdlTWFuYWdlci5oIGIvU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9XZWJTdG9yYWdlL1N0b3JhZ2VNYW5hZ2VyLmgKaW5kZXgg
NmI1M2UxYjJlMDQ0OWY5YjNjMDQwM2I1MzIzYWVhZDAwYzNhOTYwOS4uZDY3ZTI2NDIzN2MxMTRi
NTBmYTZjYTMyNzhlZjBlODBlNGFhOWUxMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9XZWJTdG9yYWdlL1N0b3JhZ2VNYW5hZ2VyLmgKKysrIGIvU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9XZWJTdG9yYWdlL1N0b3JhZ2VNYW5hZ2VyLmgKQEAgLTMwLDcgKzMw
LDYgQEAKICNpbmNsdWRlIDxXZWJDb3JlL1NlY3VyaXR5T3JpZ2luRGF0YS5oPgogI2luY2x1ZGUg
PFdlYkNvcmUvU3RvcmFnZU1hcC5oPgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+Ci0jaW5jbHVk
ZSA8d3RmL0Z1bmN0aW9uLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3
dGYvdGV4dC9TdHJpbmdIYXNoLmg+CiAKQEAgLTYyLDE0ICs2MSwxNCBAQCBwdWJsaWM6CiAgICAg
dm9pZCBkZXN0cm95U2Vzc2lvblN0b3JhZ2VOYW1lc3BhY2UodWludDY0X3Qgc3RvcmFnZU5hbWVz
cGFjZUlEKTsKICAgICB2b2lkIGNsb25lU2Vzc2lvblN0b3JhZ2VOYW1lc3BhY2UodWludDY0X3Qg
c3RvcmFnZU5hbWVzcGFjZUlELCB1aW50NjRfdCBuZXdTdG9yYWdlTmFtZXNwYWNlSUQpOwogCi0g
ICAgdm9pZCBnZXRTZXNzaW9uU3RvcmFnZU9yaWdpbnMoRnVuY3Rpb248dm9pZChIYXNoU2V0PFdl
YkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YT4mJik+JiYpOwotICAgIHZvaWQgZGVsZXRlU2Vzc2lv
blN0b3JhZ2VPcmlnaW5zKEZ1bmN0aW9uPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcik7Ci0g
ICAgdm9pZCBkZWxldGVTZXNzaW9uU3RvcmFnZUVudHJpZXNGb3JPcmlnaW5zKGNvbnN0IFZlY3Rv
cjxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGE+JiwgRnVuY3Rpb248dm9pZCgpPiYmKTsKKyAg
ICBIYXNoU2V0PFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YT4gZ2V0U2Vzc2lvblN0b3JhZ2VP
cmlnaW5zQ3Jvc3NUaHJlYWRDb3B5KCkgY29uc3Q7CisgICAgdm9pZCBkZWxldGVTZXNzaW9uU3Rv
cmFnZU9yaWdpbnMoKTsKKyAgICB2b2lkIGRlbGV0ZVNlc3Npb25TdG9yYWdlRW50cmllc0Zvck9y
aWdpbnMoY29uc3QgVmVjdG9yPFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YT4mKTsKIAotICAg
IHZvaWQgZ2V0TG9jYWxTdG9yYWdlT3JpZ2lucyhGdW5jdGlvbjx2b2lkKEhhc2hTZXQ8V2ViQ29y
ZTo6U2VjdXJpdHlPcmlnaW5EYXRhPiYmKT4mJik7Ci0gICAgdm9pZCBkZWxldGVMb2NhbFN0b3Jh
Z2VPcmlnaW5zTW9kaWZpZWRTaW5jZShXYWxsVGltZSwgRnVuY3Rpb248dm9pZCgpPiYmKTsKLSAg
ICB2b2lkIGRlbGV0ZUxvY2FsU3RvcmFnZUVudHJpZXNGb3JPcmlnaW5zKGNvbnN0IFZlY3RvcjxX
ZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGE+JiwgRnVuY3Rpb248dm9pZCgpPiYmKTsKLSAgICB2
b2lkIGdldExvY2FsU3RvcmFnZU9yaWdpbkRldGFpbHMoRnVuY3Rpb248dm9pZChWZWN0b3I8TG9j
YWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyOjpPcmlnaW5EZXRhaWxzPiYmKT4mJik7CisgICAgSGFz
aFNldDxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGE+IGdldExvY2FsU3RvcmFnZU9yaWdpbnND
cm9zc1RocmVhZENvcHkoKSBjb25zdDsKKyAgICB2b2lkIGRlbGV0ZUxvY2FsU3RvcmFnZU9yaWdp
bnNNb2RpZmllZFNpbmNlKFdhbGxUaW1lKTsKKyAgICB2b2lkIGRlbGV0ZUxvY2FsU3RvcmFnZUVu
dHJpZXNGb3JPcmlnaW5zKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGE+
Jik7CisgICAgVmVjdG9yPExvY2FsU3RvcmFnZURhdGFiYXNlVHJhY2tlcjo6T3JpZ2luRGV0YWls
cz4gZ2V0TG9jYWxTdG9yYWdlT3JpZ2luRGV0YWlsc0Nyb3NzVGhyZWFkQ29weSgpIGNvbnN0Owog
CiAgICAgdm9pZCBjbGVhclN0b3JhZ2VOYW1lc3BhY2VzKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdlTWFuYWdlclNldC5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL1dlYlN0b3JhZ2UvU3RvcmFnZU1hbmFnZXJT
ZXQuY3BwCmluZGV4IDgxYzdiNzFiZjQ1MzAzMTFmODk5OTZkZGY4ZDQ2ODBlOWJiMDkyNGEuLjk3
NzEzMWY0N2IzYmEyMmEwMTdlY2VkODE2MzdhOTJkOGVhNWFlM2YgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdlTWFuYWdlclNldC5jcHAK
KysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9XZWJTdG9yYWdlL1N0b3JhZ2VNYW5h
Z2VyU2V0LmNwcApAQCAtMTg1LDczICsxODUsMTAwIEBAIHZvaWQgU3RvcmFnZU1hbmFnZXJTZXQ6
OnJlc3VtZSgpCiAgICAgICAgIG1fc3RhdGVDaGFuZ2VDb25kaXRpb24ubm90aWZ5T25lKCk7CiB9
CiAKLXZvaWQgU3RvcmFnZU1hbmFnZXJTZXQ6OmdldFNlc3Npb25TdG9yYWdlT3JpZ2lucyhQQUw6
OlNlc3Npb25JRCBzZXNzaW9uSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoSGFzaFNldDxXZWJD
b3JlOjpTZWN1cml0eU9yaWdpbkRhdGE+JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQordm9pZCBT
dG9yYWdlTWFuYWdlclNldDo6Z2V0U2Vzc2lvblN0b3JhZ2VPcmlnaW5zKFBBTDo6U2Vzc2lvbklE
IHNlc3Npb25JRCwgR2V0T3JpZ2luc0NhbGxiYWNrJiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Cisg
ICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKKwogICAgIG1fcXVldWUtPmRpc3BhdGNoKFt0
aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIHNlc3Npb25JRCwgY29tcGxldGlv
bkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKICAgICAg
ICAgYXV0byogc3RvcmFnZU1hbmFnZXIgPSBtX3N0b3JhZ2VNYW5hZ2Vycy5nZXQoc2Vzc2lvbklE
KTsKICAgICAgICAgQVNTRVJUKHN0b3JhZ2VNYW5hZ2VyKTsKIAotICAgICAgICBzdG9yYWdlTWFu
YWdlci0+Z2V0U2Vzc2lvblN0b3JhZ2VPcmlnaW5zKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
KTsKKyAgICAgICAgYXV0byBvcmlnaW5zID0gc3RvcmFnZU1hbmFnZXItPmdldFNlc3Npb25TdG9y
YWdlT3JpZ2luc0Nyb3NzVGhyZWFkQ29weSgpOworICAgICAgICBSdW5Mb29wOjptYWluKCkuZGlz
cGF0Y2goW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciksIG9y
aWdpbnMgPSBXVEZNb3ZlKG9yaWdpbnMpXSgpIG11dGFibGUgeworICAgICAgICAgICAgY29tcGxl
dGlvbkhhbmRsZXIoV1RGTW92ZShvcmlnaW5zKSk7CisgICAgICAgIH0pOwogICAgIH0pOwogfQog
Ci12b2lkIFN0b3JhZ2VNYW5hZ2VyU2V0OjpkZWxldGVTZXNzaW9uU3RvcmFnZShQQUw6OlNlc3Np
b25JRCBzZXNzaW9uSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFu
ZGxlcikKK3ZvaWQgU3RvcmFnZU1hbmFnZXJTZXQ6OmRlbGV0ZVNlc3Npb25TdG9yYWdlKFBBTDo6
U2Vzc2lvbklEIHNlc3Npb25JRCwgRGVsZXRlQ2FsbGJhY2smJiBjb21wbGV0aW9uSGFuZGxlcikK
IHsKKyAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOworCiAgICAgbV9xdWV1ZS0+ZGlzcGF0
Y2goW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgc2Vzc2lvbklELCBjb21w
bGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgewog
ICAgICAgICBhdXRvKiBzdG9yYWdlTWFuYWdlciA9IG1fc3RvcmFnZU1hbmFnZXJzLmdldChzZXNz
aW9uSUQpOwogICAgICAgICBBU1NFUlQoc3RvcmFnZU1hbmFnZXIpOwogCi0gICAgICAgIHN0b3Jh
Z2VNYW5hZ2VyLT5kZWxldGVTZXNzaW9uU3RvcmFnZU9yaWdpbnMoV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcikpOworICAgICAgICBzdG9yYWdlTWFuYWdlci0+ZGVsZXRlU2Vzc2lvblN0b3JhZ2VP
cmlnaW5zKCk7CisgICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKSk7CiAgICAgfSk7CiB9CiAKIHZvaWQgU3RvcmFnZU1hbmFnZXJTZXQ6OmRl
bGV0ZVNlc3Npb25TdG9yYWdlRm9yT3JpZ2lucyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNv
bnN0IFZlY3RvcjxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGE+JiBvcmlnaW5EYXRhcywgRGVs
ZXRlQ2FsbGJhY2smJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKKyAgICBBU1NFUlQoUnVuTG9vcDo6
aXNNYWluKCkpOworCiAgICAgbV9xdWV1ZS0+ZGlzcGF0Y2goW3RoaXMsIHByb3RlY3RlZFRoaXMg
PSBtYWtlUmVmKCp0aGlzKSwgc2Vzc2lvbklELCBjb3BpZWRPcmlnaW5EYXRhcyA9IGNyb3NzVGhy
ZWFkQ29weShvcmlnaW5EYXRhcyksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7CiAgICAgICAgIGF1dG8qIHN0b3JhZ2VNYW5hZ2VyID0g
bV9zdG9yYWdlTWFuYWdlcnMuZ2V0KHNlc3Npb25JRCk7CiAgICAgICAgIEFTU0VSVChzdG9yYWdl
TWFuYWdlcik7CiAKLSAgICAgICAgc3RvcmFnZU1hbmFnZXItPmRlbGV0ZVNlc3Npb25TdG9yYWdl
RW50cmllc0Zvck9yaWdpbnMoY29waWVkT3JpZ2luRGF0YXMsIFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpKTsKKyAgICAgICAgc3RvcmFnZU1hbmFnZXItPmRlbGV0ZVNlc3Npb25TdG9yYWdlRW50
cmllc0Zvck9yaWdpbnMoY29waWVkT3JpZ2luRGF0YXMpOworICAgICAgICBSdW5Mb29wOjptYWlu
KCkuZGlzcGF0Y2goV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIH0pOwogfQogCiB2
b2lkIFN0b3JhZ2VNYW5hZ2VyU2V0OjpnZXRMb2NhbFN0b3JhZ2VPcmlnaW5zKFBBTDo6U2Vzc2lv
bklEIHNlc3Npb25JRCwgR2V0T3JpZ2luc0NhbGxiYWNrJiYgY29tcGxldGlvbkhhbmRsZXIpCiB7
CisgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKKwogICAgIG1fcXVldWUtPmRpc3BhdGNo
KFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIHNlc3Npb25JRCwgY29tcGxl
dGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKICAg
ICAgICAgYXV0byogc3RvcmFnZU1hbmFnZXIgPSBtX3N0b3JhZ2VNYW5hZ2Vycy5nZXQoc2Vzc2lv
bklEKTsKICAgICAgICAgQVNTRVJUKHN0b3JhZ2VNYW5hZ2VyKTsKIAotICAgICAgICBzdG9yYWdl
TWFuYWdlci0+Z2V0TG9jYWxTdG9yYWdlT3JpZ2lucyhXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KSk7CisgICAgICAgIGF1dG8gb3JpZ2lucyA9IHN0b3JhZ2VNYW5hZ2VyLT5nZXRMb2NhbFN0b3Jh
Z2VPcmlnaW5zQ3Jvc3NUaHJlYWRDb3B5KCk7CisgICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNw
YXRjaChbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgb3Jp
Z2lucyA9IFdURk1vdmUob3JpZ2lucyldKCkgbXV0YWJsZSB7CisgICAgICAgICAgICBjb21wbGV0
aW9uSGFuZGxlcihXVEZNb3ZlKG9yaWdpbnMpKTsKKyAgICAgICAgfSk7CiAgICAgfSk7CiB9CiAK
IHZvaWQgU3RvcmFnZU1hbmFnZXJTZXQ6OmRlbGV0ZUxvY2FsU3RvcmFnZU1vZGlmaWVkU2luY2Uo
UEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBXYWxsVGltZSB0aW1lLCBEZWxldGVDYWxsYmFjayYm
IGNvbXBsZXRpb25IYW5kbGVyKQogeworICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CisK
ICAgICBtX3F1ZXVlLT5kaXNwYXRjaChbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRo
aXMpLCBzZXNzaW9uSUQsIHRpbWUsIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7CiAgICAgICAgIGF1dG8qIHN0b3JhZ2VNYW5hZ2VyID0g
bV9zdG9yYWdlTWFuYWdlcnMuZ2V0KHNlc3Npb25JRCk7CiAgICAgICAgIEFTU0VSVChzdG9yYWdl
TWFuYWdlcik7CiAKLSAgICAgICAgc3RvcmFnZU1hbmFnZXItPmRlbGV0ZUxvY2FsU3RvcmFnZU9y
aWdpbnNNb2RpZmllZFNpbmNlKHRpbWUsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKKyAg
ICAgICAgc3RvcmFnZU1hbmFnZXItPmRlbGV0ZUxvY2FsU3RvcmFnZU9yaWdpbnNNb2RpZmllZFNp
bmNlKHRpbWUpOworICAgICAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcikpOwogICAgIH0pOwogfQogCiB2b2lkIFN0b3JhZ2VNYW5hZ2VyU2V0Ojpk
ZWxldGVMb2NhbFN0b3JhZ2VGb3JPcmlnaW5zKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29u
c3QgVmVjdG9yPFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YT4mIG9yaWdpbkRhdGFzLCBEZWxl
dGVDYWxsYmFjayYmIGNvbXBsZXRpb25IYW5kbGVyKQogeworICAgIEFTU0VSVChSdW5Mb29wOjpp
c01haW4oKSk7CisKICAgICBtX3F1ZXVlLT5kaXNwYXRjaChbdGhpcywgcHJvdGVjdGVkVGhpcyA9
IG1ha2VSZWYoKnRoaXMpLCBzZXNzaW9uSUQsIGNvcGllZE9yaWdpbkRhdGFzID0gY3Jvc3NUaHJl
YWRDb3B5KG9yaWdpbkRhdGFzKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKICAgICAgICAgYXV0byogc3RvcmFnZU1hbmFnZXIgPSBt
X3N0b3JhZ2VNYW5hZ2Vycy5nZXQoc2Vzc2lvbklEKTsKICAgICAgICAgQVNTRVJUKHN0b3JhZ2VN
YW5hZ2VyKTsKIAotICAgICAgICBzdG9yYWdlTWFuYWdlci0+ZGVsZXRlTG9jYWxTdG9yYWdlRW50
cmllc0Zvck9yaWdpbnMoY29waWVkT3JpZ2luRGF0YXMsIFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpKTsKKyAgICAgICAgc3RvcmFnZU1hbmFnZXItPmRlbGV0ZUxvY2FsU3RvcmFnZUVudHJpZXNG
b3JPcmlnaW5zKGNvcGllZE9yaWdpbkRhdGFzKTsKKyAgICAgICAgUnVuTG9vcDo6bWFpbigpLmRp
c3BhdGNoKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICB9KTsKIH0KIAotdm9pZCBT
dG9yYWdlTWFuYWdlclNldDo6Z2V0TG9jYWxTdG9yYWdlT3JpZ2luRGV0YWlscyhQQUw6OlNlc3Np
b25JRCBzZXNzaW9uSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPExvY2FsU3RvcmFn
ZURhdGFiYXNlVHJhY2tlcjo6T3JpZ2luRGV0YWlscz4mJik+JiYgY29tcGxldGlvbkhhbmRsZXIp
Cit2b2lkIFN0b3JhZ2VNYW5hZ2VyU2V0OjpnZXRMb2NhbFN0b3JhZ2VPcmlnaW5EZXRhaWxzKFBB
TDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgR2V0T3JpZ2luRGV0YWlsc0NhbGxiYWNrJiYgY29tcGxl
dGlvbkhhbmRsZXIpCiB7CisgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKKwogICAgIG1f
cXVldWUtPmRpc3BhdGNoKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIHNl
c3Npb25JRCwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0o
KSBtdXRhYmxlIHsKICAgICAgICAgYXV0byogc3RvcmFnZU1hbmFnZXIgPSBtX3N0b3JhZ2VNYW5h
Z2Vycy5nZXQoc2Vzc2lvbklEKTsKICAgICAgICAgQVNTRVJUKHN0b3JhZ2VNYW5hZ2VyKTsKIAot
ICAgICAgICBzdG9yYWdlTWFuYWdlci0+Z2V0TG9jYWxTdG9yYWdlT3JpZ2luRGV0YWlscyhXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CisgICAgICAgIGF1dG8gb3JpZ2luRGV0YWlscyA9IHN0
b3JhZ2VNYW5hZ2VyLT5nZXRMb2NhbFN0b3JhZ2VPcmlnaW5EZXRhaWxzQ3Jvc3NUaHJlYWRDb3B5
KCk7CisgICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbY29tcGxldGlvbkhhbmRsZXIg
PSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgb3JpZ2luRGV0YWlscyA9IFdURk1vdmUob3Jp
Z2luRGV0YWlscyldKCkgbXV0YWJsZSB7CisgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihX
VEZNb3ZlKG9yaWdpbkRldGFpbHMpKTsKKyAgICAgICAgfSk7CiAgICAgfSk7CiB9CiAK
</data>

          </attachment>
      

    </bug>

</bugzilla>