<?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>156065</bug_id>
          
          <creation_ts>2016-03-31 08:50:39 -0700</creation_ts>
          <short_desc>[iOS] Both WebPage&apos;s volatility timer and WebProcess&apos;s processSuspensionCleanupTimer are trying to make surfaces volatile with very short interval</short_desc>
          <delta_ts>2016-03-31 22:02:16 -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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Dumez">cdumez</reporter>
          <assigned_to name="Chris Dumez">cdumez</assigned_to>
          <cc>barraclough</cc>
    
    <cc>commit-queue</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>thorton</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1179425</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-03-31 08:50:39 -0700</bug_when>
    <thetext>Both WebPage&apos;s volatility timer and WebProcess&apos;s processSuspensionCleanupTimer are trying to make surfaces volatile with very short interval.

We should probably:
- Merge those timers
- Back off exponentially</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1179427</commentid>
    <comment_count>1</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-03-31 08:51:00 -0700</bug_when>
    <thetext>rdar://problem/25452004</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1179431</commentid>
    <comment_count>2</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2016-03-31 09:05:20 -0700</bug_when>
    <thetext>And the RemoteLayerBackingStoreCollection volatility timer....</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1179433</commentid>
    <comment_count>3</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-03-31 09:07:06 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; And the RemoteLayerBackingStoreCollection volatility timer....

What do you want me to do about this timer? I am not familiar with it but Tim said this one was independently useful.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1179442</commentid>
    <comment_count>4</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2016-03-31 09:32:21 -0700</bug_when>
    <thetext>Can it be the &quot;master&quot; timer that is used by WebPage and WebProcess?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1179469</commentid>
    <comment_count>5</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-03-31 10:57:24 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; Can it be the &quot;master&quot; timer that is used by WebPage and WebProcess?

Ok</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1179476</commentid>
    <comment_count>6</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2016-03-31 11:09:25 -0700</bug_when>
    <thetext>Just keep in mind that they do different things (make volatile all layers vs. just unparented ones, IIRC). I&apos;m sure you can get it to one timer, it might just need to figure out what it needs to do when it fires.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1179494</commentid>
    <comment_count>7</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-03-31 11:27:54 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; Just keep in mind that they do different things (make volatile all layers
&gt; vs. just unparented ones, IIRC). I&apos;m sure you can get it to one timer, it
&gt; might just need to figure out what it needs to do when it fires.

Yes, given this. I would propose merging the 2 other timers first as this is easier / less error-prone.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1179506</commentid>
    <comment_count>8</comment_count>
      <attachid>275308</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-03-31 11:46:56 -0700</bug_when>
    <thetext>Created attachment 275308
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1179507</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-03-31 11:48:43 -0700</bug_when>
    <thetext>Attachment 275308 did not pass style-queue:


ERROR: Source/WebKit2/WebProcess/WebPage/WebPage.h:583:  Missing space inside { }.  [whitespace/braces] [5]
Total errors found: 1 in 8 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1179555</commentid>
    <comment_count>10</comment_count>
      <attachid>275308</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2016-03-31 13:48:10 -0700</bug_when>
    <thetext>Comment on attachment 275308
Patch

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

&gt; Source/WebKit2/WebProcess/WebPage/WebPage.cpp:247
&gt; +static const std::chrono::milliseconds maximumVolatilityTimerInterval { 10 * 1000 }; // 10 seconds.

Can&apos;t you say chrono::seconds to avoid the need for the comment?

&gt; Source/WebKit2/WebProcess/WebPage/WebPage.cpp:2036
&gt; +void WebPage::volatilityTimerFired()

layerVolatility

&gt; Source/WebKit2/WebProcess/WebPage/WebPage.cpp:2043
&gt; +    m_volatilityTimer.startOneShot(m_volatilityTimerInterval);

Can it be a repeating timer whose interval we adjust?

&gt; Source/WebKit2/WebProcess/WebPage/WebPage.cpp:2050
&gt; +        WEBPAGE_LOG_ALWAYS(&quot;%p - WebPage - Successfully marked layers as volatile&quot;, this);

I don&apos;t think we should log on success.

&gt; Source/WebKit2/WebProcess/WebPage/WebPage.cpp:2061
&gt; +    WEBPAGE_LOG_ALWAYS(&quot;%p - WebPage::markLayersVolatile()&quot;, this);

Not sure this should log either.

&gt; Source/WebKit2/WebProcess/WebPage/WebPage.cpp:2070
&gt; +    if (markLayersVolatileImmediatelyIfPossible())
&gt; +        return;

Isn&apos;t it odd that this doesn&apos;t synchronously call the completion handler, with no way for the caller to know if completionHandler will be called later?

&gt; Source/WebKit2/WebProcess/WebPage/WebPage.cpp:2079
&gt; +    WEBPAGE_LOG_ALWAYS(&quot;%p - WebPage::cancelMarkLayersVolatile()&quot;, this);

Don&apos;t log unless this is unusual.

&gt; Source/WebKit2/WebProcess/WebPage/WebPage.h:992
&gt; +    void volatilityTimerFired();

layerVolatility

&gt; Source/WebKit2/WebProcess/WebPage/WebPage.h:1424
&gt; +    WebCore::Timer m_volatilityTimer;
&gt; +    std::chrono::milliseconds m_volatilityTimerInterval;

I think these should refer to layerVolatility. It&apos;s weird to have text that talks about &quot;volatility&quot; in WebPage without qualifying that it&apos;s about layers (or, more specifically, surfaces).

&gt; Source/WebKit2/WebProcess/WebProcess.cpp:1214
&gt; +        WEBPROCESS_LOG_ALWAYS(&quot;%p - WebProcess::markAllLayersVolatile() Successfuly marked all layers as volatile&quot;, this);

Too much logging?

&gt; Source/WebKit2/WebProcess/WebProcess.cpp:1217
&gt; +            WEBPROCESS_LOG_ALWAYS(&quot;%p - WebProcess::actualPrepareToSuspend() Sending ProcessReadyToSuspend IPC message&quot;, this);

Ditto.

&gt; Source/WebKit2/WebProcess/WebProcess.cpp:1233
&gt; +    WEBPROCESS_LOG_ALWAYS(&quot;%p - WebProcess::processWillSuspendImminently()&quot;, this);

Too much logging?

&gt; Source/WebKit2/WebProcess/WebProcess.cpp:1241
&gt; +    WEBPROCESS_LOG_ALWAYS(&quot;%p - WebProcess::prepareToSuspend()&quot;, this);

Too much logging?

&gt; Source/WebKit2/WebProcess/WebProcess.cpp:1247
&gt; +    WEBPROCESS_LOG_ALWAYS(&quot;%p - WebProcess::cancelPrepareToSuspend()&quot;, this);

Too much logging?

&gt; Source/WebKit2/WebProcess/WebProcess.cpp:1257
&gt; +    WEBPROCESS_LOG_ALWAYS(&quot;%p - WebProcess::cancelPrepareToSuspend() Sending DidCancelProcessSuspension IPC message&quot;, this);

Too much logging?

&gt; Source/WebKit2/WebProcess/WebProcess.cpp:1263
&gt; +    WEBPROCESS_LOG_ALWAYS(&quot;%p - WebProcess::markAllLayersVolatile()&quot;, this);

Ditto.

&gt; Source/WebKit2/WebProcess/WebProcess.cpp:1271
&gt; +            if (--m_pagesMarkingLayersAsVolatile)

Should this be if (!--m_pagesMarkingLayersAsVolatile) ?

Also assert that m_pagesMarkingLayersAsVolatile doesn&apos;t underflow.

&gt; Source/WebKit2/WebProcess/WebProcess.cpp:1295
&gt; +    WEBPROCESS_LOG_ALWAYS(&quot;%p - WebProcess::processDidResume()&quot;, this);

Too much logging?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1179583</commentid>
    <comment_count>11</comment_count>
      <attachid>275308</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-03-31 14:25:16 -0700</bug_when>
    <thetext>Comment on attachment 275308
Patch

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

&gt;&gt; Source/WebKit2/WebProcess/WebPage/WebPage.cpp:247
&gt;&gt; +static const std::chrono::milliseconds maximumVolatilityTimerInterval { 10 * 1000 }; // 10 seconds.
&gt; 
&gt; Can&apos;t you say chrono::seconds to avoid the need for the comment?

I&apos;ll check but I think this is going to mess with my std::min() below.

&gt;&gt; Source/WebKit2/WebProcess/WebPage/WebPage.cpp:2036
&gt;&gt; +void WebPage::volatilityTimerFired()
&gt; 
&gt; layerVolatility

ok.

&gt;&gt; Source/WebKit2/WebProcess/WebPage/WebPage.cpp:2043
&gt;&gt; +    m_volatilityTimer.startOneShot(m_volatilityTimerInterval);
&gt; 
&gt; Can it be a repeating timer whose interval we adjust?

I&apos;ll look into it.

&gt;&gt; Source/WebKit2/WebProcess/WebPage/WebPage.cpp:2070
&gt;&gt; +        return;
&gt; 
&gt; Isn&apos;t it odd that this doesn&apos;t synchronously call the completion handler, with no way for the caller to know if completionHandler will be called later?

markLayersVolatileImmediatelyIfPossible() calls the completion handlers.

&gt;&gt; Source/WebKit2/WebProcess/WebPage/WebPage.h:1424
&gt;&gt; +    std::chrono::milliseconds m_volatilityTimerInterval;
&gt; 
&gt; I think these should refer to layerVolatility. It&apos;s weird to have text that talks about &quot;volatility&quot; in WebPage without qualifying that it&apos;s about layers (or, more specifically, surfaces).

ok

&gt;&gt; Source/WebKit2/WebProcess/WebProcess.cpp:1214
&gt;&gt; +        WEBPROCESS_LOG_ALWAYS(&quot;%p - WebProcess::markAllLayersVolatile() Successfuly marked all layers as volatile&quot;, this);
&gt; 
&gt; Too much logging?

Too much? This happens exactly once on process suspension.

&gt;&gt; Source/WebKit2/WebProcess/WebProcess.cpp:1233
&gt;&gt; +    WEBPROCESS_LOG_ALWAYS(&quot;%p - WebProcess::processWillSuspendImminently()&quot;, this);
&gt; 
&gt; Too much logging?

All these happen once on process suspension. We&apos;ve had several bugs in the past related to this hand-shake between the UIProcess and the WebProcess so I think the logging is useful.

&gt;&gt; Source/WebKit2/WebProcess/WebProcess.cpp:1271
&gt;&gt; +            if (--m_pagesMarkingLayersAsVolatile)
&gt; 
&gt; Should this be if (!--m_pagesMarkingLayersAsVolatile) ?
&gt; 
&gt; Also assert that m_pagesMarkingLayersAsVolatile doesn&apos;t underflow.

Yes :S</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1179631</commentid>
    <comment_count>12</comment_count>
      <attachid>275344</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-03-31 15:42:12 -0700</bug_when>
    <thetext>Created attachment 275344
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1179654</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-03-31 16:13:25 -0700</bug_when>
    <thetext>Attachment 275344 did not pass style-queue:


ERROR: Source/WebKit2/WebProcess/WebPage/WebPage.h:583:  Missing space inside { }.  [whitespace/braces] [5]
Total errors found: 1 in 8 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1179669</commentid>
    <comment_count>14</comment_count>
      <attachid>275344</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-03-31 16:33:54 -0700</bug_when>
    <thetext>Comment on attachment 275344
Patch

Clearing flags on attachment: 275344

Committed r198929: &lt;http://trac.webkit.org/changeset/198929&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1179670</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-03-31 16:33:58 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1179749</commentid>
    <comment_count>16</comment_count>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2016-03-31 21:53:35 -0700</bug_when>
    <thetext>EFL port is broken by this patch. Fixed it on http://trac.webkit.org/changeset/198939.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1179752</commentid>
    <comment_count>17</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-03-31 22:02:16 -0700</bug_when>
    <thetext>(In reply to comment #16)
&gt; EFL port is broken by this patch. Fixed it on
&gt; http://trac.webkit.org/changeset/198939.

Sorry about that and thanks for fixing.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>275308</attachid>
            <date>2016-03-31 11:46:56 -0700</date>
            <delta_ts>2016-03-31 15:42:07 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-156065-20160331114700.patch</filename>
            <type>text/plain</type>
            <size>18642</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk4ODc2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzllZWVhZDExNTkxZDE4
MTRhNDcyZWMzYjcwZDdiNDVkMTI0Y2YxMi4uY2FiZDczNzQxYWJiYjAzNmZmZmI1YjZmMzJmZWMx
ZDRiODhkYTM3NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDE2LTAzLTMxICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgW2lPU10gQm90aCBXZWJQYWdl
J3Mgdm9sYXRpbGl0eSB0aW1lciBhbmQgV2ViUHJvY2VzcydzIHByb2Nlc3NTdXNwZW5zaW9uQ2xl
YW51cFRpbWVyIGFyZSB0cnlpbmcgdG8gbWFrZSBzdXJmYWNlcyB2b2xhdGlsZSB3aXRoIHZlcnkg
c2hvcnQgaW50ZXJ2YWwKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE1NjA2NQorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMjU0NTIwMDQ+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRXhwb3J0IGEgc3ltYm9s
IHNvIGl0IGNhbiBiZSB1c2VkIGZyb20gV2ViS2l0Mi4KKworICAgICAgICAqIHBhZ2UvUGFnZS5o
OgorCiAyMDE2LTAzLTMwICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgog
CiAgICAgICAgIFtpT1MgV0syXSBBdm9pZCBjcmVhdGluZyB0aWxlcyB0aGF0IGFyZSB0b28gbGFy
Z2UgZm9yIHJlbmRlcmluZwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIv
U291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmluZGV4IDMyMmUyOWQxMDEwOWJjYzFmNTM1NjQ3NGVi
YmNhZjFlMWFmMjk1MjUuLmFjYWMyMjA2ODNhOTBlNGYxODFlNWIwMWQ3YmViMTRjMWEzZTY4Y2Ig
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0NyBAQAorMjAxNi0wMy0zMSAgQ2hyaXMgRHVtZXogIDxj
ZHVtZXpAYXBwbGUuY29tPgorCisgICAgICAgIFtpT1NdIEJvdGggV2ViUGFnZSdzIHZvbGF0aWxp
dHkgdGltZXIgYW5kIFdlYlByb2Nlc3MncyBwcm9jZXNzU3VzcGVuc2lvbkNsZWFudXBUaW1lciBh
cmUgdHJ5aW5nIHRvIG1ha2Ugc3VyZmFjZXMgdm9sYXRpbGUgd2l0aCB2ZXJ5IHNob3J0IGludGVy
dmFsCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTYw
NjUKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzI1NDUyMDA0PgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVwb24gcHJvY2VzcyBzdXNwZW5zaW9uLCBi
b3RoIHRoZSBXZWJQYWdlJ3Mgdm9sYXRpbGl0eSB0aW1lciBhbmQKKyAgICAgICAgV2ViUHJvY2Vz
cycgcHJvY2Vzc1N1c3BlbnNpb25DbGVhbnVwVGltZXIgYXJlIHRyeWluZyB0byBtYWtlIHN1cmZh
Y2VzCisgICAgICAgIHZvbGF0aWxlIHdpdGggYSB2ZXJ5IHNob3J0IGludGVydmFsLiBUaGlzIGlz
IG92ZXJseSBhZ2dyZXNzaXZlIGdpdmVuCisgICAgICAgIHRoYXQgdGhpcyBvcGVyYXRpb24gbm9y
bWFsbHkgc3VjY2VlZHMgdmVyeSBxdWlja2x5IG9yIGRvZXMgbm90IChkdWUKKyAgICAgICAgdG8g
dW5kZXJseWluZyBidWdzKS4KKworICAgICAgICBUaGlzIHBhdGNoIGRvZXMgdGhlIGZvbGxvd2lu
ZzoKKyAgICAgICAgLSBEcm9wIHRoZSBXZWJQcm9jZXNzJyBwcm9jZXNzU3VzcGVuc2lvbkNsZWFu
dXBUaW1lciBhbmQgaGF2ZSB0aGUKKyAgICAgICAgICBXZWJQcm9jZXNzIGRyaXZlIHRoZSBXZWJQ
YWdlcycgdm9sYXRpbGl0eSB0aW1lciBpbnN0ZWFkLgorICAgICAgICAtIFVwZGF0ZSB0aGUgV2Vi
UGFnZXMnIHZvbGF0aWxpdHkgdGltZXIgdG8gZG8gZXhwb25lbnRpYWwgYmFjayBvZmYuCisKKyAg
ICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHA6CisgICAgICAgIChXZWJLaXQ6
OldlYlBhZ2U6OnZvbGF0aWxpdHlUaW1lckZpcmVkKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFn
ZTo6bWFya0xheWVyc1ZvbGF0aWxlSW1tZWRpYXRlbHlJZlBvc3NpYmxlKToKKyAgICAgICAgKFdl
YktpdDo6V2ViUGFnZTo6bWFya0xheWVyc1ZvbGF0aWxlKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
UGFnZTo6Y2FuY2VsTWFya0xheWVyc1ZvbGF0aWxlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFn
ZTo6c2V0TGF5ZXJUcmVlU3RhdGVJc0Zyb3plbik6IERlbGV0ZWQuCisgICAgICAgICogV2ViUHJv
Y2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6bWFya0xh
eWVyc1ZvbGF0aWxlKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJ
T1MubW06CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmFwcGxpY2F0aW9uRGlkRW50ZXJCYWNr
Z3JvdW5kKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6YXBwbGljYXRpb25XaWxsRW50ZXJG
b3JlZ3JvdW5kKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6YXBwbGljYXRpb25EaWRCZWNv
bWVBY3RpdmUpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjphZGp1c3RWZWxvY2l0eURhdGFG
b3JCb3VuZGVkU2NhbGUpOiBEZWxldGVkLgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUHJvY2Vz
cy5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3M6OmFjdHVhbFByZXBhcmVUb1N1c3Bl
bmQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzOjpwcm9jZXNzV2lsbFN1c3BlbmRJbW1p
bmVudGx5KToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzczo6cHJlcGFyZVRvU3VzcGVuZCk6
CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3M6OmNhbmNlbFByZXBhcmVUb1N1c3BlbmQpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzOjptYXJrQWxsTGF5ZXJzVm9sYXRpbGUpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzOjpjYW5jZWxNYXJrQWxsTGF5ZXJzVm9sYXRpbGUpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzOjpzZXRBbGxMYXllclRyZWVTdGF0ZXNGcm96ZW4p
OgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzOjpwcm9jZXNzRGlkUmVzdW1lKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViUHJvY2Vzczo6V2ViUHJvY2Vzcyk6IERlbGV0ZWQuCisgICAgICAgICog
V2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmg6CisKIDIwMTYtMDMtMzAgIEJyaWFuIEJ1cmcgIDxiYnVy
Z0BhcHBsZS5jb20+CiAKICAgICAgICAgV2ViIEF1dG9tYXRpb246IEFkZCBBdXRvbWF0aW9uLnBl
cmZvcm1LZXlib2FyZEludGVyYWN0aW9ucwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFn
ZS9QYWdlLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuaAppbmRleCAzMTdhZDYzZmNmNzI2
MDU2ZGFmZjQzYzM0ZGUxOGJlZGVhN2NkOWY1Li41MDU2MjVhODEyMzU5OTNkYjk3ZjAwYjdmODI3
NjZmMTAxYmMwZmJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuaApAQCAtNTA5LDcgKzUwOSw3IEBAIHB1YmxpYzoK
ICAgICBib29sIGlzQ29udHJvbGxlZEJ5QXV0b21hdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fY29u
dHJvbGxlZEJ5QXV0b21hdGlvbjsgfQogICAgIHZvaWQgc2V0Q29udHJvbGxlZEJ5QXV0b21hdGlv
bihib29sIGNvbnRyb2xsZWQpIHsgbV9jb250cm9sbGVkQnlBdXRvbWF0aW9uID0gY29udHJvbGxl
ZDsgfQogCi0gICAgYm9vbCBpc0Fsd2F5c09uTG9nZ2luZ0FsbG93ZWQoKSBjb25zdDsKKyAgICBX
RUJDT1JFX0VYUE9SVCBib29sIGlzQWx3YXlzT25Mb2dnaW5nQWxsb3dlZCgpIGNvbnN0OwogCiAg
ICAgU3RyaW5nIGNhcHRpb25Vc2VyUHJlZmVyZW5jZXNTdHlsZVNoZWV0KCk7CiAgICAgdm9pZCBz
ZXRDYXB0aW9uVXNlclByZWZlcmVuY2VzU3R5bGVTaGVldChjb25zdCBTdHJpbmcmKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcCBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAppbmRleCBkYmQxZGI2
ZGIxZjE4ODZjM2M3MTNjZmUzZmMxMTg1MDkzMTAyOWY2Li5mNmQ4Zjk4ZDEyZWUyNWI0NDllODYw
YTI4YmJiNGMxOWY3NDdiNGQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlBhZ2UvV2ViUGFnZS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL1dlYlBhZ2UuY3BwCkBAIC0yNDMsNiArMjQzLDExIEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJD
b3JlOwogbmFtZXNwYWNlIFdlYktpdCB7CiAKIHN0YXRpYyBjb25zdCBkb3VibGUgcGFnZVNjcm9s
bEh5c3RlcmVzaXNTZWNvbmRzID0gMC4zOworc3RhdGljIGNvbnN0IHN0ZDo6Y2hyb25vOjptaWxs
aXNlY29uZHMgaW5pdGlhbFZvbGF0aWxpdHlUaW1lckludGVydmFsIHsgMjAgfTsKK3N0YXRpYyBj
b25zdCBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzIG1heGltdW1Wb2xhdGlsaXR5VGltZXJJbnRl
cnZhbCB7IDEwICogMTAwMCB9OyAvLyAxMCBzZWNvbmRzLgorCisjZGVmaW5lIFdFQlBBR0VfTE9H
X0FMV0FZUyguLi4pIExPR19BTFdBWVMoaXNBbHdheXNPbkxvZ2dpbmdBbGxvd2VkKCksIF9fVkFf
QVJHU19fKQorI2RlZmluZSBXRUJQQUdFX0xPR19BTFdBWVNfRVJST1IoLi4uKSBMT0dfQUxXQVlT
X0VSUk9SKGlzQWx3YXlzT25Mb2dnaW5nQWxsb3dlZCgpLCBfX1ZBX0FSR1NfXykKIAogY2xhc3Mg
U2VuZFN0b3BSZXNwb25zaXZlbmVzc1RpbWVyIHsKIHB1YmxpYzoKQEAgLTM1MSw4ICszNTYsOSBA
QCBXZWJQYWdlOjpXZWJQYWdlKHVpbnQ2NF90IHBhZ2VJRCwgY29uc3QgV2ViUGFnZUNyZWF0aW9u
UGFyYW1ldGVycyYgcGFyYW1ldGVycykKICAgICAsIG1fYXZhaWxhYmxlU2NyZWVuU2l6ZShwYXJh
bWV0ZXJzLmF2YWlsYWJsZVNjcmVlblNpemUpCiAgICAgLCBtX2RldmljZU9yaWVudGF0aW9uKDAp
CiAgICAgLCBtX2luRHluYW1pY1NpemVVcGRhdGUoZmFsc2UpCi0gICAgLCBtX3ZvbGF0aWxpdHlU
aW1lcigqdGhpcywgJldlYlBhZ2U6OnZvbGF0aWxpdHlUaW1lckZpcmVkKQogI2VuZGlmCisgICAg
LCBtX3ZvbGF0aWxpdHlUaW1lcigqdGhpcywgJldlYlBhZ2U6OnZvbGF0aWxpdHlUaW1lckZpcmVk
KQorICAgICwgbV92b2xhdGlsaXR5VGltZXJJbnRlcnZhbChpbml0aWFsVm9sYXRpbGl0eVRpbWVy
SW50ZXJ2YWwpCiAgICAgLCBtX2JhY2tncm91bmRDb2xvcihDb2xvcjo6d2hpdGUpCiAgICAgLCBt
X21heGltdW1SZW5kZXJpbmdTdXBwcmVzc2lvblRva2VuKDApCiAgICAgLCBtX3Njcm9sbFBpbm5p
bmdCZWhhdmlvcihEb05vdFBpbikKQEAgLTIwMjcsMTMgKzIwMzMsNTIgQEAgdm9pZCBXZWJQYWdl
OjpzZXRMYXllclRyZWVTdGF0ZUlzRnJvemVuKGJvb2wgZnJvemVuKQogICAgIGRyYXdpbmdBcmVh
LT5zZXRMYXllclRyZWVTdGF0ZUlzRnJvemVuKGZyb3plbik7CiB9CiAKK3ZvaWQgV2ViUGFnZTo6
dm9sYXRpbGl0eVRpbWVyRmlyZWQoKQoreworICAgIGlmIChtYXJrTGF5ZXJzVm9sYXRpbGVJbW1l
ZGlhdGVseUlmUG9zc2libGUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV92b2xhdGlsaXR5
VGltZXJJbnRlcnZhbCA9IHN0ZDo6bWluKDIgKiBtX3ZvbGF0aWxpdHlUaW1lckludGVydmFsLCBt
YXhpbXVtVm9sYXRpbGl0eVRpbWVySW50ZXJ2YWwpOworICAgIFdFQlBBR0VfTE9HX0FMV0FZU19F
UlJPUigiJXAgLSBXZWJQYWdlIC0gRmFpbGVkIHRvIG1hcmsgYWxsIGxheWVycyBhcyB2b2xhdGls
ZSwgd2lsbCByZXRyeSBpbiAlbGxkIG1zIiwgdGhpcywgbV92b2xhdGlsaXR5VGltZXJJbnRlcnZh
bC5jb3VudCgpKTsKKyAgICBtX3ZvbGF0aWxpdHlUaW1lci5zdGFydE9uZVNob3QobV92b2xhdGls
aXR5VGltZXJJbnRlcnZhbCk7Cit9CisKIGJvb2wgV2ViUGFnZTo6bWFya0xheWVyc1ZvbGF0aWxl
SW1tZWRpYXRlbHlJZlBvc3NpYmxlKCkKIHsKLSAgICBhdXRvKiBkcmF3aW5nQXJlYSA9IHRoaXMt
PmRyYXdpbmdBcmVhKCk7Ci0gICAgaWYgKCFkcmF3aW5nQXJlYSkKLSAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgYm9vbCBzdWNjZXNzID0gIWRyYXdpbmdBcmVhKCkgfHwgZHJhd2luZ0FyZWEoKS0+
bWFya0xheWVyc1ZvbGF0aWxlSW1tZWRpYXRlbHlJZlBvc3NpYmxlKCk7CisgICAgaWYgKHN1Y2Nl
c3MpIHsKKyAgICAgICAgV0VCUEFHRV9MT0dfQUxXQVlTKCIlcCAtIFdlYlBhZ2UgLSBTdWNjZXNz
ZnVsbHkgbWFya2VkIGxheWVycyBhcyB2b2xhdGlsZSIsIHRoaXMpOworICAgICAgICBhdXRvIGNv
bXBsZXRpb25IYW5kbGVycyA9IFdURk1vdmUobV9tYXJrTGF5ZXJzQXNWb2xhdGlsZUNvbXBsZXRp
b25IYW5kbGVycyk7CisgICAgICAgIGZvciAoYXV0byYgY29tcGxldGlvbkhhbmRsZXIgOiBjb21w
bGV0aW9uSGFuZGxlcnMpCisgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOworICAgIH0K
KworICAgIHJldHVybiBzdWNjZXNzOworfQorCit2b2lkIFdlYlBhZ2U6Om1hcmtMYXllcnNWb2xh
dGlsZShzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgV0VC
UEFHRV9MT0dfQUxXQVlTKCIlcCAtIFdlYlBhZ2U6Om1hcmtMYXllcnNWb2xhdGlsZSgpIiwgdGhp
cyk7CisKKyAgICBpZiAobV92b2xhdGlsaXR5VGltZXIuaXNBY3RpdmUoKSkKKyAgICAgICAgbV92
b2xhdGlsaXR5VGltZXIuc3RvcCgpOworCisgICAgaWYgKGNvbXBsZXRpb25IYW5kbGVyKQorICAg
ICAgICBtX21hcmtMYXllcnNBc1ZvbGF0aWxlQ29tcGxldGlvbkhhbmRsZXJzLmFwcGVuZChXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CisKKyAgICBpZiAobWFya0xheWVyc1ZvbGF0aWxlSW1t
ZWRpYXRlbHlJZlBvc3NpYmxlKCkpCisgICAgICAgIHJldHVybjsKIAotICAgIHJldHVybiBkcmF3
aW5nQXJlYS0+bWFya0xheWVyc1ZvbGF0aWxlSW1tZWRpYXRlbHlJZlBvc3NpYmxlKCk7CisgICAg
bV92b2xhdGlsaXR5VGltZXJJbnRlcnZhbCA9IGluaXRpYWxWb2xhdGlsaXR5VGltZXJJbnRlcnZh
bDsKKyAgICBXRUJQQUdFX0xPR19BTFdBWVMoIiVwIC0gRmFpbGVkIHRvIG1hcmsgYWxsIGxheWVy
cyBhcyB2b2xhdGlsZSwgd2lsbCByZXRyeSBpbiAlbGxkIG1zIiwgdGhpcywgbV92b2xhdGlsaXR5
VGltZXJJbnRlcnZhbC5jb3VudCgpKTsKKyAgICBtX3ZvbGF0aWxpdHlUaW1lci5zdGFydE9uZVNo
b3QobV92b2xhdGlsaXR5VGltZXJJbnRlcnZhbCk7Cit9CisKK3ZvaWQgV2ViUGFnZTo6Y2FuY2Vs
TWFya0xheWVyc1ZvbGF0aWxlKCkKK3sKKyAgICBXRUJQQUdFX0xPR19BTFdBWVMoIiVwIC0gV2Vi
UGFnZTo6Y2FuY2VsTWFya0xheWVyc1ZvbGF0aWxlKCkiLCB0aGlzKTsKKyAgICBtX3ZvbGF0aWxp
dHlUaW1lci5zdG9wKCk7CisgICAgbV9tYXJrTGF5ZXJzQXNWb2xhdGlsZUNvbXBsZXRpb25IYW5k
bGVycy5jbGVhcigpOwogfQogCiBjbGFzcyBDdXJyZW50RXZlbnQgewpAQCAtMzMzOCw2ICszMzgz
LDExIEBAIHZvaWQgV2ViUGFnZTo6cmVtb3ZlV2ViRWRpdENvbW1hbmQodWludDY0X3Qgc3RlcElE
KQogICAgIG1fdW5kb1N0ZXBNYXAucmVtb3ZlKHN0ZXBJRCk7CiB9CiAKK2Jvb2wgV2ViUGFnZTo6
aXNBbHdheXNPbkxvZ2dpbmdBbGxvd2VkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gY29yZVBhZ2Uo
KSAmJiBjb3JlUGFnZSgpLT5pc0Fsd2F5c09uTG9nZ2luZ0FsbG93ZWQoKTsKK30KKwogdm9pZCBX
ZWJQYWdlOjp1bmFwcGx5RWRpdENvbW1hbmQodWludDY0X3Qgc3RlcElEKQogewogICAgIFdlYlVu
ZG9TdGVwKiBzdGVwID0gd2ViVW5kb1N0ZXAoc3RlcElEKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCmluZGV4IGU4OWE0OWZmM2FlYmY5YWYzZGI4OWI5OTE5
ODg2ZTA3YTcwMTAyNGUuLmQwYjUyZTc3M2ViZmExZDIzMDc3N2RhNTc5YTRjMGQ0YzVhZmVjNjMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgK
KysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaApAQCAtMjg3
LDYgKzI4Nyw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHJlbW92ZVdlYkVkaXRDb21tYW5kKHVpbnQ2
NF90KTsKICAgICBib29sIGlzSW5SZWRvKCkgY29uc3QgeyByZXR1cm4gbV9pc0luUmVkbzsgfQog
CisgICAgYm9vbCBpc0Fsd2F5c09uTG9nZ2luZ0FsbG93ZWQoKSBjb25zdDsKICAgICB2b2lkIHNl
dEFjdGl2ZVBvcHVwTWVudShXZWJQb3B1cE1lbnUqKTsKIAogICAgIHZvaWQgc2V0SGlkZGVuUGFn
ZVRpbWVyVGhyb3R0bGluZ0luY3JlYXNlTGltaXQoc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcyBs
aW1pdCkKQEAgLTU3OSw3ICs1ODAsOCBAQCBwdWJsaWM6CiAjZW5kaWYKIAogICAgIHZvaWQgc2V0
TGF5ZXJUcmVlU3RhdGVJc0Zyb3plbihib29sKTsKLSAgICBib29sIG1hcmtMYXllcnNWb2xhdGls
ZUltbWVkaWF0ZWx5SWZQb3NzaWJsZSgpOworICAgIHZvaWQgbWFya0xheWVyc1ZvbGF0aWxlKHN0
ZDo6ZnVuY3Rpb248dm9pZCgpPiBjb21wbGV0aW9uSGFuZGxlciA9IHt9KTsKKyAgICB2b2lkIGNh
bmNlbE1hcmtMYXllcnNWb2xhdGlsZSgpOwogCiAgICAgTm90aWZpY2F0aW9uUGVybWlzc2lvblJl
cXVlc3RNYW5hZ2VyKiBub3RpZmljYXRpb25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXIoKTsKIApA
QCAtOTc2LDcgKzk3OCw2IEBAIHByaXZhdGU6CiAgICAgdm9pZCByZXNldFRleHRBdXRvc2l6aW5n
QmVmb3JlTGF5b3V0SWZOZWVkZWQoY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJiBvbGRTaXplLCBj
b25zdCBXZWJDb3JlOjpGbG9hdFNpemUmIG5ld1NpemUpOwogICAgIFdlYkNvcmU6OlZpc2libGVQ
b3NpdGlvbiB2aXNpYmxlUG9zaXRpb25JbkZvY3VzZWROb2RlRm9yUG9pbnQoY29uc3QgV2ViQ29y
ZTo6RnJhbWUmLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYsIGJvb2wgaXNJbnRlcmFjdGluZ1dp
dGhBc3Npc3RlZE5vZGUpOwogICAgIFBhc3NSZWZQdHI8V2ViQ29yZTo6UmFuZ2U+IHJhbmdlRm9y
R3JhbnVsYXJpdHlBdFBvaW50KGNvbnN0IFdlYkNvcmU6OkZyYW1lJiwgY29uc3QgV2ViQ29yZTo6
SW50UG9pbnQmLCB1aW50MzJfdCBncmFudWxhcml0eSwgYm9vbCBpc0ludGVyYWN0aW5nV2l0aEFz
c2lzdGVkTm9kZSk7Ci0gICAgdm9pZCB2b2xhdGlsaXR5VGltZXJGaXJlZCgpOwogI2VuZGlmCiAj
aWYgIVBMQVRGT1JNKENPQ09BKQogICAgIHN0YXRpYyBjb25zdCBjaGFyKiBpbnRlcnByZXRLZXlF
dmVudChjb25zdCBXZWJDb3JlOjpLZXlib2FyZEV2ZW50Kik7CkBAIC05ODcsNiArOTg4LDkgQEAg
cHJpdmF0ZToKICAgICBib29sIGV4ZWN1dGVLZXlwcmVzc0NvbW1hbmRzSW50ZXJuYWwoY29uc3Qg
VmVjdG9yPFdlYkNvcmU6OktleXByZXNzQ29tbWFuZD4mLCBXZWJDb3JlOjpLZXlib2FyZEV2ZW50
Kik7CiAjZW5kaWYKIAorICAgIGJvb2wgbWFya0xheWVyc1ZvbGF0aWxlSW1tZWRpYXRlbHlJZlBv
c3NpYmxlKCk7CisgICAgdm9pZCB2b2xhdGlsaXR5VGltZXJGaXJlZCgpOworCiAgICAgU3RyaW5n
IHNvdXJjZUZvckZyYW1lKFdlYkZyYW1lKik7CiAKICAgICB2b2lkIGxvYWREYXRhSW1wbCh1aW50
NjRfdCBuYXZpZ2F0aW9uSUQsIFBhc3NSZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiwgY29u
c3QgU3RyaW5nJiBNSU1FVHlwZSwgY29uc3QgU3RyaW5nJiBlbmNvZGluZ05hbWUsIGNvbnN0IFdl
YkNvcmU6OlVSTCYgYmFzZVVSTCwgY29uc3QgV2ViQ29yZTo6VVJMJiBmYWlsaW5nVVJMLCBjb25z
dCBVc2VyRGF0YSYpOwpAQCAtMTQxNCw5ICsxNDE4LDEyIEBAIHByaXZhdGU6CiAgICAgUmVmUHRy
PFdlYkNvcmU6Ok5vZGU+IG1fcGVuZGluZ1N5bnRoZXRpY0NsaWNrTm9kZTsKICAgICBXZWJDb3Jl
OjpGbG9hdFBvaW50IG1fcGVuZGluZ1N5bnRoZXRpY0NsaWNrTG9jYXRpb247CiAgICAgV2ViQ29y
ZTo6RmxvYXRSZWN0IG1fcHJldmlvdXNFeHBvc2VkQ29udGVudFJlY3Q7Ci0gICAgV2ViQ29yZTo6
VGltZXIgbV92b2xhdGlsaXR5VGltZXI7CiAjZW5kaWYKIAorICAgIFdlYkNvcmU6OlRpbWVyIG1f
dm9sYXRpbGl0eVRpbWVyOworICAgIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMgbV92b2xhdGls
aXR5VGltZXJJbnRlcnZhbDsKKyAgICBWZWN0b3I8c3RkOjpmdW5jdGlvbjx2b2lkKCk+PiBtX21h
cmtMYXllcnNBc1ZvbGF0aWxlQ29tcGxldGlvbkhhbmRsZXJzOworCiAgICAgSGFzaFNldDxTdHJp
bmcsIEFTQ0lJQ2FzZUluc2Vuc2l0aXZlSGFzaD4gbV9taW1lVHlwZXNXaXRoQ3VzdG9tQ29udGVu
dFByb3ZpZGVyczsKICAgICBXZWJDb3JlOjpDb2xvciBtX2JhY2tncm91bmRDb2xvcjsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9T
Lm1tIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1t
CmluZGV4IDExOGFjYjBjZWE4MDE3NTc3YmFlY2JmNjhiZmE5MzUyMTkwMzYyYzkuLjZlMzExNjJk
MzA0M2FlMGVhN2Q3NzNjNThmYTk3MjI2NmMzNjdiNDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbQorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0KQEAgLTI4NjYsMjggKzI4
NjYsMTcgQEAgdm9pZCBXZWJQYWdlOjphcHBsaWNhdGlvbldpbGxSZXNpZ25BY3RpdmUoKQogICAg
IFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gcG9zdE5vdGlmaWNhdGlvbk5h
bWU6V2ViVUlBcHBsaWNhdGlvbldpbGxSZXNpZ25BY3RpdmVOb3RpZmljYXRpb24gb2JqZWN0Om5p
bF07CiB9CiAKLXZvaWQgV2ViUGFnZTo6dm9sYXRpbGl0eVRpbWVyRmlyZWQoKQotewotICAgIGlm
ICghbWFya0xheWVyc1ZvbGF0aWxlSW1tZWRpYXRlbHlJZlBvc3NpYmxlKCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIG1fdm9sYXRpbGl0eVRpbWVyLnN0b3AoKTsKLX0KLQogdm9pZCBXZWJQYWdl
OjphcHBsaWNhdGlvbkRpZEVudGVyQmFja2dyb3VuZChib29sIGlzU3VzcGVuZGVkVW5kZXJMb2Nr
KQogewogICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gcG9zdE5vdGlm
aWNhdGlvbk5hbWU6V2ViVUlBcHBsaWNhdGlvbkRpZEVudGVyQmFja2dyb3VuZE5vdGlmaWNhdGlv
biBvYmplY3Q6bmlsIHVzZXJJbmZvOkB7QCJpc1N1c3BlbmRlZFVuZGVyTG9jayI6IFtOU051bWJl
ciBudW1iZXJXaXRoQm9vbDppc1N1c3BlbmRlZFVuZGVyTG9ja119XTsKIAogICAgIHNldExheWVy
VHJlZVN0YXRlSXNGcm96ZW4odHJ1ZSk7Ci0gICAgaWYgKG1hcmtMYXllcnNWb2xhdGlsZUltbWVk
aWF0ZWx5SWZQb3NzaWJsZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3ZvbGF0aWxpdHlU
aW1lci5zdGFydFJlcGVhdGluZyhzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzKDIwMCkpOworICAg
IG1hcmtMYXllcnNWb2xhdGlsZSgpOwogfQogCiB2b2lkIFdlYlBhZ2U6OmFwcGxpY2F0aW9uV2ls
bEVudGVyRm9yZWdyb3VuZChib29sIGlzU3VzcGVuZGVkVW5kZXJMb2NrKQogewotICAgIG1fdm9s
YXRpbGl0eVRpbWVyLnN0b3AoKTsKKyAgICBjYW5jZWxNYXJrTGF5ZXJzVm9sYXRpbGUoKTsKICAg
ICBzZXRMYXllclRyZWVTdGF0ZUlzRnJvemVuKGZhbHNlKTsKIAogICAgIFtbTlNOb3RpZmljYXRp
b25DZW50ZXIgZGVmYXVsdENlbnRlcl0gcG9zdE5vdGlmaWNhdGlvbk5hbWU6V2ViVUlBcHBsaWNh
dGlvbldpbGxFbnRlckZvcmVncm91bmROb3RpZmljYXRpb24gb2JqZWN0Om5pbCB1c2VySW5mbzpA
e0AiaXNTdXNwZW5kZWRVbmRlckxvY2siOiBAKGlzU3VzcGVuZGVkVW5kZXJMb2NrKX1dOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcCBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHAKaW5kZXggZjJjOGM3NGZkZDUwODE0
NjMxMzc0ZjkxNWM0MTZkOTFjNjhkMDRiMi4uZjdhMzVkYzAxNjA2NzNmNTBlYzNmM2FkNWMxMDQ5
ZWJmMzk0MjE1ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9j
ZXNzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwCkBA
IC0xNDAsNiArMTQwLDggQEAgc3RhdGljIGNvbnN0IGRvdWJsZSBwbHVnSW5BdXRvU3RhcnRFeHBp
cmF0aW9uVGltZVVwZGF0ZVRocmVzaG9sZCA9IDI5ICogMjQgKiA2MAogLy8gVGhpcyBzaG91bGQg
YmUgZ3JlYXRlciB0aGFuIHRpbGVSZXZhbGlkYXRpb25UaW1lb3V0IGluIFRpbGVDb250cm9sbGVy
Lgogc3RhdGljIGNvbnN0IGRvdWJsZSBub25WaXNpYmxlUHJvY2Vzc0NsZWFudXBEZWxheSA9IDEw
OwogCisjZGVmaW5lIFdFQlBST0NFU1NfTE9HX0FMV0FZUyguLi4pIExPR19BTFdBWVModHJ1ZSwg
X19WQV9BUkdTX18pCisKIG5hbWVzcGFjZSBXZWJLaXQgewogCiBXZWJQcm9jZXNzJiBXZWJQcm9j
ZXNzOjpzaW5nbGV0b24oKQpAQCAtMTUzLDcgKzE1NSw2IEBAIFdlYlByb2Nlc3M6OldlYlByb2Nl
c3MoKQogI2lmIFBMQVRGT1JNKElPUykKICAgICAsIG1fdmlld1VwZGF0ZURpc3BhdGNoZXIoVmll
d1VwZGF0ZURpc3BhdGNoZXI6OmNyZWF0ZSgpKQogI2VuZGlmCi0gICAgLCBtX3Byb2Nlc3NTdXNw
ZW5zaW9uQ2xlYW51cFRpbWVyKCp0aGlzLCAmV2ViUHJvY2Vzczo6cHJvY2Vzc1N1c3BlbnNpb25D
bGVhbnVwVGltZXJGaXJlZCkKICAgICAsIG1faW5EaWRDbG9zZShmYWxzZSkKICAgICAsIG1faGFz
U2V0Q2FjaGVNb2RlbChmYWxzZSkKICAgICAsIG1fY2FjaGVNb2RlbChDYWNoZU1vZGVsRG9jdW1l
bnRWaWV3ZXIpCkBAIC0xMjA5LDEzICsxMjEwLDE0IEBAIHZvaWQgV2ViUHJvY2Vzczo6YWN0dWFs
UHJlcGFyZVRvU3VzcGVuZChTaG91bGRBY2tub3dsZWRnZVdoZW5SZWFkeVRvU3VzcGVuZCBzaG91
CiAKICAgICBzZXRBbGxMYXllclRyZWVTdGF0ZXNGcm96ZW4odHJ1ZSk7CiAKLSAgICBpZiAobWFy
a0FsbExheWVyc1ZvbGF0aWxlSWZQb3NzaWJsZSgpKSB7Ci0gICAgICAgIGlmIChzaG91bGRBY2tu
b3dsZWRnZVdoZW5SZWFkeVRvU3VzcGVuZCA9PSBTaG91bGRBY2tub3dsZWRnZVdoZW5SZWFkeVRv
U3VzcGVuZDo6WWVzKQorICAgIG1hcmtBbGxMYXllcnNWb2xhdGlsZShbdGhpcywgc2hvdWxkQWNr
bm93bGVkZ2VXaGVuUmVhZHlUb1N1c3BlbmRdIHsKKyAgICAgICAgV0VCUFJPQ0VTU19MT0dfQUxX
QVlTKCIlcCAtIFdlYlByb2Nlc3M6Om1hcmtBbGxMYXllcnNWb2xhdGlsZSgpIFN1Y2Nlc3NmdWx5
IG1hcmtlZCBhbGwgbGF5ZXJzIGFzIHZvbGF0aWxlIiwgdGhpcyk7CisKKyAgICAgICAgaWYgKHNo
b3VsZEFja25vd2xlZGdlV2hlblJlYWR5VG9TdXNwZW5kID09IFNob3VsZEFja25vd2xlZGdlV2hl
blJlYWR5VG9TdXNwZW5kOjpZZXMpIHsKKyAgICAgICAgICAgIFdFQlBST0NFU1NfTE9HX0FMV0FZ
UygiJXAgLSBXZWJQcm9jZXNzOjphY3R1YWxQcmVwYXJlVG9TdXNwZW5kKCkgU2VuZGluZyBQcm9j
ZXNzUmVhZHlUb1N1c3BlbmQgSVBDIG1lc3NhZ2UiLCB0aGlzKTsKICAgICAgICAgICAgIHBhcmVu
dFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYlByb2Nlc3NQcm94eTo6UHJv
Y2Vzc1JlYWR5VG9TdXNwZW5kKCksIDApOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIG1f
c2hvdWxkQWNrbm93bGVkZ2VXaGVuUmVhZHlUb1N1c3BlbmQgPSBzaG91bGRBY2tub3dsZWRnZVdo
ZW5SZWFkeVRvU3VzcGVuZDsKLSAgICBtX3Byb2Nlc3NTdXNwZW5zaW9uQ2xlYW51cFRpbWVyLnN0
YXJ0UmVwZWF0aW5nKHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMoMjApKTsKKyAgICAgICAgfQor
ICAgIH0pOwogfQogCiB2b2lkIFdlYlByb2Nlc3M6OnByb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50
bHkoYm9vbCYgaGFuZGxlZCkKQEAgLTEyMjgsNiArMTIzMCw3IEBAIHZvaWQgV2ViUHJvY2Vzczo6
cHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseShib29sJiBoYW5kbGVkKQogICAgICAgICByZXR1
cm47CiAgICAgfQogCisgICAgV0VCUFJPQ0VTU19MT0dfQUxXQVlTKCIlcCAtIFdlYlByb2Nlc3M6
OnByb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHkoKSIsIHRoaXMpOwogICAgIERhdGFiYXNlVHJh
Y2tlcjo6dHJhY2tlcigpLmNsb3NlQWxsRGF0YWJhc2VzKCk7CiAgICAgYWN0dWFsUHJlcGFyZVRv
U3VzcGVuZChTaG91bGRBY2tub3dsZWRnZVdoZW5SZWFkeVRvU3VzcGVuZDo6Tm8pOwogICAgIGhh
bmRsZWQgPSB0cnVlOwpAQCAtMTIzNSw0OSArMTIzOCw2MyBAQCB2b2lkIFdlYlByb2Nlc3M6OnBy
b2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHkoYm9vbCYgaGFuZGxlZCkKIAogdm9pZCBXZWJQcm9j
ZXNzOjpwcmVwYXJlVG9TdXNwZW5kKCkKIHsKKyAgICBXRUJQUk9DRVNTX0xPR19BTFdBWVMoIiVw
IC0gV2ViUHJvY2Vzczo6cHJlcGFyZVRvU3VzcGVuZCgpIiwgdGhpcyk7CiAgICAgYWN0dWFsUHJl
cGFyZVRvU3VzcGVuZChTaG91bGRBY2tub3dsZWRnZVdoZW5SZWFkeVRvU3VzcGVuZDo6WWVzKTsK
IH0KIAogdm9pZCBXZWJQcm9jZXNzOjpjYW5jZWxQcmVwYXJlVG9TdXNwZW5kKCkKIHsKKyAgICBX
RUJQUk9DRVNTX0xPR19BTFdBWVMoIiVwIC0gV2ViUHJvY2Vzczo6Y2FuY2VsUHJlcGFyZVRvU3Vz
cGVuZCgpIiwgdGhpcyk7CiAgICAgc2V0QWxsTGF5ZXJUcmVlU3RhdGVzRnJvemVuKGZhbHNlKTsK
IAogICAgIC8vIElmIHdlJ3ZlIGFscmVhZHkgZmluaXNoZWQgY2xlYW5pbmcgdXAgYW5kIHNlbnQg
UHJvY2Vzc1JlYWR5VG9TdXNwZW5kLCB3ZQogICAgIC8vIHNob3VsZG4ndCBzZW5kIERpZENhbmNl
bFByb2Nlc3NTdXNwZW5zaW9uOyB0aGUgVUkgcHJvY2VzcyBzdHJpY3RseSBleHBlY3RzIG9uZSBv
ciB0aGUgb3RoZXIuCi0gICAgaWYgKCFtX3Byb2Nlc3NTdXNwZW5zaW9uQ2xlYW51cFRpbWVyLmlz
QWN0aXZlKCkpCisgICAgaWYgKCFtX3BhZ2VzTWFya2luZ0xheWVyc0FzVm9sYXRpbGUpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIG1fcHJvY2Vzc1N1c3BlbnNpb25DbGVhbnVwVGltZXIuc3RvcCgp
OworICAgIGNhbmNlbE1hcmtBbGxMYXllcnNWb2xhdGlsZSgpOworCisgICAgV0VCUFJPQ0VTU19M
T0dfQUxXQVlTKCIlcCAtIFdlYlByb2Nlc3M6OmNhbmNlbFByZXBhcmVUb1N1c3BlbmQoKSBTZW5k
aW5nIERpZENhbmNlbFByb2Nlc3NTdXNwZW5zaW9uIElQQyBtZXNzYWdlIiwgdGhpcyk7CiAgICAg
cGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViUHJvY2Vzc1Byb3h5
OjpEaWRDYW5jZWxQcm9jZXNzU3VzcGVuc2lvbigpLCAwKTsKIH0KIAotYm9vbCBXZWJQcm9jZXNz
OjptYXJrQWxsTGF5ZXJzVm9sYXRpbGVJZlBvc3NpYmxlKCkKK3ZvaWQgV2ViUHJvY2Vzczo6bWFy
a0FsbExheWVyc1ZvbGF0aWxlKHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBjb21wbGV0aW9uSGFuZGxl
cikKIHsKLSAgICBib29sIHN1Y2Nlc3NmdWxseU1hcmtlZEFsbExheWVyc1ZvbGF0aWxlID0gdHJ1
ZTsKLSAgICBmb3IgKGF1dG8mIHBhZ2UgOiBtX3BhZ2VNYXAudmFsdWVzKCkpCi0gICAgICAgIHN1
Y2Nlc3NmdWxseU1hcmtlZEFsbExheWVyc1ZvbGF0aWxlICY9IHBhZ2UtPm1hcmtMYXllcnNWb2xh
dGlsZUltbWVkaWF0ZWx5SWZQb3NzaWJsZSgpOwotCi0gICAgcmV0dXJuIHN1Y2Nlc3NmdWxseU1h
cmtlZEFsbExheWVyc1ZvbGF0aWxlOworICAgIFdFQlBST0NFU1NfTE9HX0FMV0FZUygiJXAgLSBX
ZWJQcm9jZXNzOjptYXJrQWxsTGF5ZXJzVm9sYXRpbGUoKSIsIHRoaXMpOworICAgIG1fcGFnZXNN
YXJraW5nTGF5ZXJzQXNWb2xhdGlsZSA9IG1fcGFnZU1hcC5zaXplKCk7CisgICAgaWYgKCFtX3Bh
Z2VzTWFya2luZ0xheWVyc0FzVm9sYXRpbGUpIHsKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIo
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBmb3IgKGF1dG8mIHBhZ2UgOiBtX3BhZ2VN
YXAudmFsdWVzKCkpIHsKKyAgICAgICAgcGFnZS0+bWFya0xheWVyc1ZvbGF0aWxlKFt0aGlzLCBj
b21wbGV0aW9uSGFuZGxlcl0geworICAgICAgICAgICAgaWYgKC0tbV9wYWdlc01hcmtpbmdMYXll
cnNBc1ZvbGF0aWxlKQorICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CisgICAg
ICAgIH0pOworICAgIH0KIH0KIAotdm9pZCBXZWJQcm9jZXNzOjpzZXRBbGxMYXllclRyZWVTdGF0
ZXNGcm96ZW4oYm9vbCBmcm96ZW4pCit2b2lkIFdlYlByb2Nlc3M6OmNhbmNlbE1hcmtBbGxMYXll
cnNWb2xhdGlsZSgpCiB7CisgICAgaWYgKCFtX3BhZ2VzTWFya2luZ0xheWVyc0FzVm9sYXRpbGUp
CisgICAgICAgIHJldHVybjsKKwogICAgIGZvciAoYXV0byYgcGFnZSA6IG1fcGFnZU1hcC52YWx1
ZXMoKSkKLSAgICAgICAgcGFnZS0+c2V0TGF5ZXJUcmVlU3RhdGVJc0Zyb3plbihmcm96ZW4pOwor
ICAgICAgICBwYWdlLT5jYW5jZWxNYXJrTGF5ZXJzVm9sYXRpbGUoKTsKKyAgICBtX3BhZ2VzTWFy
a2luZ0xheWVyc0FzVm9sYXRpbGUgPSAwOwogfQogCi12b2lkIFdlYlByb2Nlc3M6OnByb2Nlc3NT
dXNwZW5zaW9uQ2xlYW51cFRpbWVyRmlyZWQoKQordm9pZCBXZWJQcm9jZXNzOjpzZXRBbGxMYXll
clRyZWVTdGF0ZXNGcm96ZW4oYm9vbCBmcm96ZW4pCiB7Ci0gICAgaWYgKCFtYXJrQWxsTGF5ZXJz
Vm9sYXRpbGVJZlBvc3NpYmxlKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBtX3Byb2Nlc3NTdXNw
ZW5zaW9uQ2xlYW51cFRpbWVyLnN0b3AoKTsKLSAgICBpZiAobV9zaG91bGRBY2tub3dsZWRnZVdo
ZW5SZWFkeVRvU3VzcGVuZCA9PSBTaG91bGRBY2tub3dsZWRnZVdoZW5SZWFkeVRvU3VzcGVuZDo6
WWVzKQotICAgICAgICBwYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpX
ZWJQcm9jZXNzUHJveHk6OlByb2Nlc3NSZWFkeVRvU3VzcGVuZCgpLCAwKTsKKyAgICBmb3IgKGF1
dG8mIHBhZ2UgOiBtX3BhZ2VNYXAudmFsdWVzKCkpCisgICAgICAgIHBhZ2UtPnNldExheWVyVHJl
ZVN0YXRlSXNGcm96ZW4oZnJvemVuKTsKIH0KICAgICAKIHZvaWQgV2ViUHJvY2Vzczo6cHJvY2Vz
c0RpZFJlc3VtZSgpCiB7Ci0gICAgbV9wcm9jZXNzU3VzcGVuc2lvbkNsZWFudXBUaW1lci5zdG9w
KCk7CisgICAgV0VCUFJPQ0VTU19MT0dfQUxXQVlTKCIlcCAtIFdlYlByb2Nlc3M6OnByb2Nlc3NE
aWRSZXN1bWUoKSIsIHRoaXMpOworCisgICAgY2FuY2VsTWFya0FsbExheWVyc1ZvbGF0aWxlKCk7
CiAgICAgc2V0QWxsTGF5ZXJUcmVlU3RhdGVzRnJvemVuKGZhbHNlKTsKIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmggYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuaAppbmRleCAzYTkzYzE5ZDM5ZGZkMTU1ZmFhMzVjOGQ0
NmI5YjY4ZjRlMWUxYjUyLi5lMTZhMjJkYzY4ODQ0NDQwZjE0NmQ1NTNlNWU4ZDBiZmJmNGJkOTI3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuaAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuaApAQCAtMTg2LDcgKzE4Niw4
IEBAIHB1YmxpYzoKICAgICB2b2lkIHByb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHkoYm9vbCYg
aGFuZGxlZCk7CiAgICAgdm9pZCBwcmVwYXJlVG9TdXNwZW5kKCk7CiAgICAgdm9pZCBjYW5jZWxQ
cmVwYXJlVG9TdXNwZW5kKCk7Ci0gICAgYm9vbCBtYXJrQWxsTGF5ZXJzVm9sYXRpbGVJZlBvc3Np
YmxlKCk7CisgICAgdm9pZCBtYXJrQWxsTGF5ZXJzVm9sYXRpbGUoc3RkOjpmdW5jdGlvbjx2b2lk
KCk+IGNvbXBsZXRpb25IYW5kbGVyKTsKKyAgICB2b2lkIGNhbmNlbE1hcmtBbGxMYXllcnNWb2xh
dGlsZSgpOwogICAgIHZvaWQgc2V0QWxsTGF5ZXJUcmVlU3RhdGVzRnJvemVuKGJvb2wpOwogICAg
IHZvaWQgcHJvY2Vzc1N1c3BlbnNpb25DbGVhbnVwVGltZXJGaXJlZCgpOwogICAgIHZvaWQgcHJv
Y2Vzc0RpZFJlc3VtZSgpOwpAQCAtMzI3LDcgKzMyOCw2IEBAIHByaXZhdGU6CiAjaWYgUExBVEZP
Uk0oSU9TKQogICAgIFJlZlB0cjxWaWV3VXBkYXRlRGlzcGF0Y2hlcj4gbV92aWV3VXBkYXRlRGlz
cGF0Y2hlcjsKICNlbmRpZgotICAgIFdlYkNvcmU6OlRpbWVyIG1fcHJvY2Vzc1N1c3BlbnNpb25D
bGVhbnVwVGltZXI7CiAKICAgICBib29sIG1faW5EaWRDbG9zZTsKIApAQCAtMzg2LDcgKzM4Niw3
IEBAIHByaXZhdGU6CiAKICAgICBSZWY8V2ViQ29yZTo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlPiBtX3Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yYWdlOwogCi0gICAgU2hvdWxkQWNrbm93
bGVkZ2VXaGVuUmVhZHlUb1N1c3BlbmQgbV9zaG91bGRBY2tub3dsZWRnZVdoZW5SZWFkeVRvU3Vz
cGVuZDsKKyAgICB1bnNpZ25lZCBtX3BhZ2VzTWFya2luZ0xheWVyc0FzVm9sYXRpbGUgeyAwIH07
CiAgICAgYm9vbCBtX3N1cHByZXNzTWVtb3J5UHJlc3N1cmVIYW5kbGVyIHsgZmFsc2UgfTsKIH07
CiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>275344</attachid>
            <date>2016-03-31 15:42:12 -0700</date>
            <delta_ts>2016-03-31 16:33:54 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-156065-20160331154216.patch</filename>
            <type>text/plain</type>
            <size>19122</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk4OTE3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNWU1ZTRhYWYyMGQ0ODZk
OTQ5NTA0ZWE1ZmQxOTA4ZGNlNzEyZjk1YS4uODBhYWZiYjEwYmI5N2IxOTA2MWZkOTc0M2RjNDY5
MzkwZmY3MDYyMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDE3IEBACiAyMDE2LTAzLTMxICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKKyAgICAgICAgW2lPU10gQm90aCBXZWJQYWdl
J3Mgdm9sYXRpbGl0eSB0aW1lciBhbmQgV2ViUHJvY2VzcydzIHByb2Nlc3NTdXNwZW5zaW9uQ2xl
YW51cFRpbWVyIGFyZSB0cnlpbmcgdG8gbWFrZSBzdXJmYWNlcyB2b2xhdGlsZSB3aXRoIHZlcnkg
c2hvcnQgaW50ZXJ2YWwKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE1NjA2NQorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMjU0NTIwMDQ+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgU2ltb24gRnJhc2VyLgorCisgICAgICAgIEV4cG9ydCBhIHN5bWJvbCBz
byBpdCBjYW4gYmUgdXNlZCBmcm9tIFdlYktpdDIuCisKKyAgICAgICAgKiBwYWdlL1BhZ2UuaDoK
KworMjAxNi0wMy0zMSAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgorCiAgICAgICAg
IFJFR1JFU1NJT04gKHIxOTExODApOiBTYWZhcmkgZG9lcyBub3Qgc2VuZCBSZWZlcmVyIEhlYWRl
ciB0byBpZnJhbWUgc3JjIGluIGNlcnRhaW4gc2l0dWF0aW9ucwogICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU1NzU0CiAgICAgICAgIDxyZGFyOi8vcHJv
YmxlbS8yNTI5NjQ0NT4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCAyYTQ1ODA2NDNlZjE2OWQxOWNjNDNiNTlmMTQw
OTZkMDRjYjczZTc0Li5hYzVlY2FmNDgwODg2ZTI4YjRhYTA0NDAxOTBhN2IwYzZjMjc4ODVhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsNDggQEAKKzIwMTYtMDMtMzEgIENocmlzIER1bWV6ICA8Y2R1
bWV6QGFwcGxlLmNvbT4KKworICAgICAgICBbaU9TXSBCb3RoIFdlYlBhZ2UncyB2b2xhdGlsaXR5
IHRpbWVyIGFuZCBXZWJQcm9jZXNzJ3MgcHJvY2Vzc1N1c3BlbnNpb25DbGVhbnVwVGltZXIgYXJl
IHRyeWluZyB0byBtYWtlIHN1cmZhY2VzIHZvbGF0aWxlIHdpdGggdmVyeSBzaG9ydCBpbnRlcnZh
bAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU2MDY1
CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8yNTQ1MjAwND4KKworICAgICAgICBSZXZpZXdlZCBi
eSBTaW1vbiBGcmFzZXIuCisKKyAgICAgICAgVXBvbiBwcm9jZXNzIHN1c3BlbnNpb24sIGJvdGgg
dGhlIFdlYlBhZ2UncyB2b2xhdGlsaXR5IHRpbWVyIGFuZAorICAgICAgICBXZWJQcm9jZXNzJyBw
cm9jZXNzU3VzcGVuc2lvbkNsZWFudXBUaW1lciBhcmUgdHJ5aW5nIHRvIG1ha2Ugc3VyZmFjZXMK
KyAgICAgICAgdm9sYXRpbGUgd2l0aCBhIHZlcnkgc2hvcnQgaW50ZXJ2YWwuIFRoaXMgaXMgb3Zl
cmx5IGFnZ3Jlc3NpdmUgZ2l2ZW4KKyAgICAgICAgdGhhdCB0aGlzIG9wZXJhdGlvbiBub3JtYWxs
eSBzdWNjZWVkcyB2ZXJ5IHF1aWNrbHkgb3IgZG9lcyBub3QgKGR1ZQorICAgICAgICB0byB1bmRl
cmx5aW5nIGJ1Z3MpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggZG9lcyB0aGUgZm9sbG93aW5nOgor
ICAgICAgICAtIERyb3AgdGhlIFdlYlByb2Nlc3MnIHByb2Nlc3NTdXNwZW5zaW9uQ2xlYW51cFRp
bWVyIGFuZCBoYXZlIHRoZQorICAgICAgICAgIFdlYlByb2Nlc3MgZHJpdmUgdGhlIFdlYlBhZ2Vz
JyB2b2xhdGlsaXR5IHRpbWVyIGluc3RlYWQuCisgICAgICAgIC0gVXBkYXRlIHRoZSBXZWJQYWdl
cycgdm9sYXRpbGl0eSB0aW1lciB0byBkbyBleHBvbmVudGlhbCBiYWNrIG9mZi4KKworICAgICAg
ICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2Vi
UGFnZTo6bGF5ZXJWb2xhdGlsaXR5VGltZXJGaXJlZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBh
Z2U6Om1hcmtMYXllcnNWb2xhdGlsZUltbWVkaWF0ZWx5SWZQb3NzaWJsZSk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlBhZ2U6Om1hcmtMYXllcnNWb2xhdGlsZSk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlBhZ2U6OmNhbmNlbE1hcmtMYXllcnNWb2xhdGlsZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBh
Z2U6OmlzQWx3YXlzT25Mb2dnaW5nQWxsb3dlZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6
OnNldExheWVyVHJlZVN0YXRlSXNGcm96ZW4pOiBEZWxldGVkLgorICAgICAgICAqIFdlYlByb2Nl
c3MvV2ViUGFnZS9XZWJQYWdlLmg6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6Om1hcmtMYXll
cnNWb2xhdGlsZSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9T
Lm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjphcHBsaWNhdGlvbkRpZEVudGVyQmFja2dy
b3VuZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmFwcGxpY2F0aW9uV2lsbEVudGVyRm9y
ZWdyb3VuZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmFwcGxpY2F0aW9uRGlkQmVjb21l
QWN0aXZlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6YWRqdXN0VmVsb2NpdHlEYXRhRm9y
Qm91bmRlZFNjYWxlKTogRGVsZXRlZC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlByb2Nlc3Mu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzOjphY3R1YWxQcmVwYXJlVG9TdXNwZW5k
KToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzczo6cHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5l
bnRseSk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3M6OnByZXBhcmVUb1N1c3BlbmQpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzOjpjYW5jZWxQcmVwYXJlVG9TdXNwZW5kKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzczo6bWFya0FsbExheWVyc1ZvbGF0aWxlKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViUHJvY2Vzczo6Y2FuY2VsTWFya0FsbExheWVyc1ZvbGF0aWxlKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzczo6c2V0QWxsTGF5ZXJUcmVlU3RhdGVzRnJvemVuKToK
KyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzczo6cHJvY2Vzc0RpZFJlc3VtZSk6CisgICAgICAg
IChXZWJLaXQ6OldlYlByb2Nlc3M6OldlYlByb2Nlc3MpOiBEZWxldGVkLgorICAgICAgICAqIFdl
YlByb2Nlc3MvV2ViUHJvY2Vzcy5oOgorCiAyMDE2LTAzLTMxICBUaW1vdGh5IEhhdGNoZXIgIDx0
aW1vdGh5QGFwcGxlLmNvbT4KIAogICAgICAgICBXZWIgQXV0b21hdGlvbjogQWRkIHN1cHBvcnQg
Zm9yIHNjcmlwdCB0aW1lb3V0cyB0byB0aGUgZXZhbHVhdGVKYXZhU2NyaXB0RnVuY3Rpb24gY29t
bWFuZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL1BhZ2UuaAppbmRleCAzMTdhZDYzZmNmNzI2MDU2ZGFmZjQzYzM0ZGUxOGJlZGVh
N2NkOWY1Li41MDU2MjVhODEyMzU5OTNkYjk3ZjAwYjdmODI3NjZmMTAxYmMwZmJmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L1BhZ2UuaApAQCAtNTA5LDcgKzUwOSw3IEBAIHB1YmxpYzoKICAgICBib29sIGlzQ29udHJvbGxl
ZEJ5QXV0b21hdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fY29udHJvbGxlZEJ5QXV0b21hdGlvbjsg
fQogICAgIHZvaWQgc2V0Q29udHJvbGxlZEJ5QXV0b21hdGlvbihib29sIGNvbnRyb2xsZWQpIHsg
bV9jb250cm9sbGVkQnlBdXRvbWF0aW9uID0gY29udHJvbGxlZDsgfQogCi0gICAgYm9vbCBpc0Fs
d2F5c09uTG9nZ2luZ0FsbG93ZWQoKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCBib29sIGlz
QWx3YXlzT25Mb2dnaW5nQWxsb3dlZCgpIGNvbnN0OwogCiAgICAgU3RyaW5nIGNhcHRpb25Vc2Vy
UHJlZmVyZW5jZXNTdHlsZVNoZWV0KCk7CiAgICAgdm9pZCBzZXRDYXB0aW9uVXNlclByZWZlcmVu
Y2VzU3R5bGVTaGVldChjb25zdCBTdHJpbmcmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9XZWJQYWdlLmNwcAppbmRleCAyN2RkZWNkYmQyMTdhOTViYWI4YzM1NzZlMmYx
MDk2OTZhZGE5MjM5Li4xZTUwMDM1NGMwOWEyYzc2ZjkzNGRlYjkzZjJmZjM3YmM1MDQxOWZjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAK
KysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCkBAIC0y
NDMsNiArMjQzLDExIEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogbmFtZXNwYWNlIFdlYktp
dCB7CiAKIHN0YXRpYyBjb25zdCBkb3VibGUgcGFnZVNjcm9sbEh5c3RlcmVzaXNTZWNvbmRzID0g
MC4zOworc3RhdGljIGNvbnN0IHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMgaW5pdGlhbExheWVy
Vm9sYXRpbGl0eVRpbWVySW50ZXJ2YWwgeyAyMCB9Oworc3RhdGljIGNvbnN0IHN0ZDo6Y2hyb25v
OjpzZWNvbmRzIG1heGltdW1MYXllclZvbGF0aWxpdHlUaW1lckludGVydmFsIHsgMTAgfTsKKwor
I2RlZmluZSBXRUJQQUdFX0xPR19BTFdBWVMoLi4uKSBMT0dfQUxXQVlTKGlzQWx3YXlzT25Mb2dn
aW5nQWxsb3dlZCgpLCBfX1ZBX0FSR1NfXykKKyNkZWZpbmUgV0VCUEFHRV9MT0dfQUxXQVlTX0VS
Uk9SKC4uLikgTE9HX0FMV0FZU19FUlJPUihpc0Fsd2F5c09uTG9nZ2luZ0FsbG93ZWQoKSwgX19W
QV9BUkdTX18pCiAKIGNsYXNzIFNlbmRTdG9wUmVzcG9uc2l2ZW5lc3NUaW1lciB7CiBwdWJsaWM6
CkBAIC0zNTEsOCArMzU2LDggQEAgV2ViUGFnZTo6V2ViUGFnZSh1aW50NjRfdCBwYWdlSUQsIGNv
bnN0IFdlYlBhZ2VDcmVhdGlvblBhcmFtZXRlcnMmIHBhcmFtZXRlcnMpCiAgICAgLCBtX2F2YWls
YWJsZVNjcmVlblNpemUocGFyYW1ldGVycy5hdmFpbGFibGVTY3JlZW5TaXplKQogICAgICwgbV9k
ZXZpY2VPcmllbnRhdGlvbigwKQogICAgICwgbV9pbkR5bmFtaWNTaXplVXBkYXRlKGZhbHNlKQot
ICAgICwgbV92b2xhdGlsaXR5VGltZXIoKnRoaXMsICZXZWJQYWdlOjp2b2xhdGlsaXR5VGltZXJG
aXJlZCkKICNlbmRpZgorICAgICwgbV9sYXllclZvbGF0aWxpdHlUaW1lcigqdGhpcywgJldlYlBh
Z2U6OmxheWVyVm9sYXRpbGl0eVRpbWVyRmlyZWQpCiAgICAgLCBtX2JhY2tncm91bmRDb2xvcihD
b2xvcjo6d2hpdGUpCiAgICAgLCBtX21heGltdW1SZW5kZXJpbmdTdXBwcmVzc2lvblRva2VuKDAp
CiAgICAgLCBtX3Njcm9sbFBpbm5pbmdCZWhhdmlvcihEb05vdFBpbikKQEAgLTIwMjYsMTMgKzIw
MzEsNTMgQEAgdm9pZCBXZWJQYWdlOjpzZXRMYXllclRyZWVTdGF0ZUlzRnJvemVuKGJvb2wgZnJv
emVuKQogICAgIGRyYXdpbmdBcmVhLT5zZXRMYXllclRyZWVTdGF0ZUlzRnJvemVuKGZyb3plbik7
CiB9CiAKK3ZvaWQgV2ViUGFnZTo6bGF5ZXJWb2xhdGlsaXR5VGltZXJGaXJlZCgpCit7CisgICAg
aWYgKG1hcmtMYXllcnNWb2xhdGlsZUltbWVkaWF0ZWx5SWZQb3NzaWJsZSgpKSB7CisgICAgICAg
IG1fbGF5ZXJWb2xhdGlsaXR5VGltZXIuc3RvcCgpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgYXV0byBuZXdJbnRlcnZhbCA9IHN0ZDo6bWluKDIgKiBtX2xheWVyVm9sYXRpbGl0eVRp
bWVyLnJlcGVhdEludGVydmFsTVMoKSwgc3RkOjpjaHJvbm86OmR1cmF0aW9uX2Nhc3Q8c3RkOjpj
aHJvbm86Om1pbGxpc2Vjb25kcz4obWF4aW11bUxheWVyVm9sYXRpbGl0eVRpbWVySW50ZXJ2YWwp
KTsKKyAgICBXRUJQQUdFX0xPR19BTFdBWVNfRVJST1IoIiVwIC0gV2ViUGFnZSAtIEZhaWxlZCB0
byBtYXJrIGFsbCBsYXllcnMgYXMgdm9sYXRpbGUsIHdpbGwgcmV0cnkgaW4gJWxsZCBtcyIsIHRo
aXMsIG5ld0ludGVydmFsLmNvdW50KCkpOworICAgIG1fbGF5ZXJWb2xhdGlsaXR5VGltZXIuc3Rh
cnRSZXBlYXRpbmcobmV3SW50ZXJ2YWwpOworfQorCiBib29sIFdlYlBhZ2U6Om1hcmtMYXllcnNW
b2xhdGlsZUltbWVkaWF0ZWx5SWZQb3NzaWJsZSgpCiB7Ci0gICAgYXV0byogZHJhd2luZ0FyZWEg
PSB0aGlzLT5kcmF3aW5nQXJlYSgpOwotICAgIGlmICghZHJhd2luZ0FyZWEpCi0gICAgICAgIHJl
dHVybiB0cnVlOworICAgIGJvb2wgc3VjY2VzcyA9ICFkcmF3aW5nQXJlYSgpIHx8IGRyYXdpbmdB
cmVhKCktPm1hcmtMYXllcnNWb2xhdGlsZUltbWVkaWF0ZWx5SWZQb3NzaWJsZSgpOworICAgIGlm
IChzdWNjZXNzKSB7CisgICAgICAgIFdFQlBBR0VfTE9HX0FMV0FZUygiJXAgLSBXZWJQYWdlIC0g
U3VjY2Vzc2Z1bGx5IG1hcmtlZCBsYXllcnMgYXMgdm9sYXRpbGUiLCB0aGlzKTsKKyAgICAgICAg
YXV0byBjb21wbGV0aW9uSGFuZGxlcnMgPSBXVEZNb3ZlKG1fbWFya0xheWVyc0FzVm9sYXRpbGVD
b21wbGV0aW9uSGFuZGxlcnMpOworICAgICAgICBmb3IgKGF1dG8mIGNvbXBsZXRpb25IYW5kbGVy
IDogY29tcGxldGlvbkhhbmRsZXJzKQorICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsK
KyAgICB9CiAKLSAgICByZXR1cm4gZHJhd2luZ0FyZWEtPm1hcmtMYXllcnNWb2xhdGlsZUltbWVk
aWF0ZWx5SWZQb3NzaWJsZSgpOworICAgIHJldHVybiBzdWNjZXNzOworfQorCit2b2lkIFdlYlBh
Z2U6Om1hcmtMYXllcnNWb2xhdGlsZShzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gY29tcGxldGlvbkhh
bmRsZXIpCit7CisgICAgV0VCUEFHRV9MT0dfQUxXQVlTKCIlcCAtIFdlYlBhZ2U6Om1hcmtMYXll
cnNWb2xhdGlsZSgpIiwgdGhpcyk7CisKKyAgICBpZiAobV9sYXllclZvbGF0aWxpdHlUaW1lci5p
c0FjdGl2ZSgpKQorICAgICAgICBtX2xheWVyVm9sYXRpbGl0eVRpbWVyLnN0b3AoKTsKKworICAg
IGlmIChjb21wbGV0aW9uSGFuZGxlcikKKyAgICAgICAgbV9tYXJrTGF5ZXJzQXNWb2xhdGlsZUNv
bXBsZXRpb25IYW5kbGVycy5hcHBlbmQoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOworCisg
ICAgaWYgKG1hcmtMYXllcnNWb2xhdGlsZUltbWVkaWF0ZWx5SWZQb3NzaWJsZSgpKQorICAgICAg
ICByZXR1cm47CisKKyAgICBXRUJQQUdFX0xPR19BTFdBWVMoIiVwIC0gRmFpbGVkIHRvIG1hcmsg
YWxsIGxheWVycyBhcyB2b2xhdGlsZSwgd2lsbCByZXRyeSBpbiAlbGxkIG1zIiwgdGhpcywgaW5p
dGlhbExheWVyVm9sYXRpbGl0eVRpbWVySW50ZXJ2YWwuY291bnQoKSk7CisgICAgbV9sYXllclZv
bGF0aWxpdHlUaW1lci5zdGFydFJlcGVhdGluZyhpbml0aWFsTGF5ZXJWb2xhdGlsaXR5VGltZXJJ
bnRlcnZhbCk7Cit9CisKK3ZvaWQgV2ViUGFnZTo6Y2FuY2VsTWFya0xheWVyc1ZvbGF0aWxlKCkK
K3sKKyAgICBXRUJQQUdFX0xPR19BTFdBWVMoIiVwIC0gV2ViUGFnZTo6Y2FuY2VsTWFya0xheWVy
c1ZvbGF0aWxlKCkiLCB0aGlzKTsKKyAgICBtX2xheWVyVm9sYXRpbGl0eVRpbWVyLnN0b3AoKTsK
KyAgICBtX21hcmtMYXllcnNBc1ZvbGF0aWxlQ29tcGxldGlvbkhhbmRsZXJzLmNsZWFyKCk7CiB9
CiAKIGNsYXNzIEN1cnJlbnRFdmVudCB7CkBAIC0zMzM3LDYgKzMzODIsMTEgQEAgdm9pZCBXZWJQ
YWdlOjpyZW1vdmVXZWJFZGl0Q29tbWFuZCh1aW50NjRfdCBzdGVwSUQpCiAgICAgbV91bmRvU3Rl
cE1hcC5yZW1vdmUoc3RlcElEKTsKIH0KIAorYm9vbCBXZWJQYWdlOjppc0Fsd2F5c09uTG9nZ2lu
Z0FsbG93ZWQoKSBjb25zdAoreworICAgIHJldHVybiBjb3JlUGFnZSgpICYmIGNvcmVQYWdlKCkt
PmlzQWx3YXlzT25Mb2dnaW5nQWxsb3dlZCgpOworfQorCiB2b2lkIFdlYlBhZ2U6OnVuYXBwbHlF
ZGl0Q29tbWFuZCh1aW50NjRfdCBzdGVwSUQpCiB7CiAgICAgV2ViVW5kb1N0ZXAqIHN0ZXAgPSB3
ZWJVbmRvU3RlcChzdGVwSUQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQYWdlL1dlYlBhZ2UuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9X
ZWJQYWdlLmgKaW5kZXggZTM1YWQ5ZGIyYjdlZjNlYmRkZDNjNDAwYjBhNTM1ODk2OWI2YzczNi4u
MzBjNTc0YzUxNzA5ZThlMjdiNmZkNDNiYjc3MmU1N2UwYmM4NTQxMSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCkBAIC0yODcsNiArMjg3LDcgQEAgcHVi
bGljOgogICAgIHZvaWQgcmVtb3ZlV2ViRWRpdENvbW1hbmQodWludDY0X3QpOwogICAgIGJvb2wg
aXNJblJlZG8oKSBjb25zdCB7IHJldHVybiBtX2lzSW5SZWRvOyB9CiAKKyAgICBib29sIGlzQWx3
YXlzT25Mb2dnaW5nQWxsb3dlZCgpIGNvbnN0OwogICAgIHZvaWQgc2V0QWN0aXZlUG9wdXBNZW51
KFdlYlBvcHVwTWVudSopOwogCiAgICAgdm9pZCBzZXRIaWRkZW5QYWdlVGltZXJUaHJvdHRsaW5n
SW5jcmVhc2VMaW1pdChzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzIGxpbWl0KQpAQCAtNTc5LDcg
KzU4MCw4IEBAIHB1YmxpYzoKICNlbmRpZgogCiAgICAgdm9pZCBzZXRMYXllclRyZWVTdGF0ZUlz
RnJvemVuKGJvb2wpOwotICAgIGJvb2wgbWFya0xheWVyc1ZvbGF0aWxlSW1tZWRpYXRlbHlJZlBv
c3NpYmxlKCk7CisgICAgdm9pZCBtYXJrTGF5ZXJzVm9sYXRpbGUoc3RkOjpmdW5jdGlvbjx2b2lk
KCk+IGNvbXBsZXRpb25IYW5kbGVyID0ge30pOworICAgIHZvaWQgY2FuY2VsTWFya0xheWVyc1Zv
bGF0aWxlKCk7CiAKICAgICBOb3RpZmljYXRpb25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXIqIG5v
dGlmaWNhdGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlcigpOwogCkBAIC05NzQsNyArOTc2LDYg
QEAgcHJpdmF0ZToKICAgICB2b2lkIHJlc2V0VGV4dEF1dG9zaXppbmdCZWZvcmVMYXlvdXRJZk5l
ZWRlZChjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmIG9sZFNpemUsIGNvbnN0IFdlYkNvcmU6OkZs
b2F0U2l6ZSYgbmV3U2l6ZSk7CiAgICAgV2ViQ29yZTo6VmlzaWJsZVBvc2l0aW9uIHZpc2libGVQ
b3NpdGlvbkluRm9jdXNlZE5vZGVGb3JQb2ludChjb25zdCBXZWJDb3JlOjpGcmFtZSYsIGNvbnN0
IFdlYkNvcmU6OkludFBvaW50JiwgYm9vbCBpc0ludGVyYWN0aW5nV2l0aEFzc2lzdGVkTm9kZSk7
CiAgICAgUGFzc1JlZlB0cjxXZWJDb3JlOjpSYW5nZT4gcmFuZ2VGb3JHcmFudWxhcml0eUF0UG9p
bnQoY29uc3QgV2ViQ29yZTo6RnJhbWUmLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYsIHVpbnQz
Ml90IGdyYW51bGFyaXR5LCBib29sIGlzSW50ZXJhY3RpbmdXaXRoQXNzaXN0ZWROb2RlKTsKLSAg
ICB2b2lkIHZvbGF0aWxpdHlUaW1lckZpcmVkKCk7CiAjZW5kaWYKICNpZiAhUExBVEZPUk0oQ09D
T0EpCiAgICAgc3RhdGljIGNvbnN0IGNoYXIqIGludGVycHJldEtleUV2ZW50KGNvbnN0IFdlYkNv
cmU6OktleWJvYXJkRXZlbnQqKTsKQEAgLTk4NSw2ICs5ODYsOSBAQCBwcml2YXRlOgogICAgIGJv
b2wgZXhlY3V0ZUtleXByZXNzQ29tbWFuZHNJbnRlcm5hbChjb25zdCBWZWN0b3I8V2ViQ29yZTo6
S2V5cHJlc3NDb21tYW5kPiYsIFdlYkNvcmU6OktleWJvYXJkRXZlbnQqKTsKICNlbmRpZgogCisg
ICAgYm9vbCBtYXJrTGF5ZXJzVm9sYXRpbGVJbW1lZGlhdGVseUlmUG9zc2libGUoKTsKKyAgICB2
b2lkIGxheWVyVm9sYXRpbGl0eVRpbWVyRmlyZWQoKTsKKwogICAgIFN0cmluZyBzb3VyY2VGb3JG
cmFtZShXZWJGcmFtZSopOwogCiAgICAgdm9pZCBsb2FkRGF0YUltcGwodWludDY0X3QgbmF2aWdh
dGlvbklELCBQYXNzUmVmUHRyPFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4sIGNvbnN0IFN0cmluZyYg
TUlNRVR5cGUsIGNvbnN0IFN0cmluZyYgZW5jb2RpbmdOYW1lLCBjb25zdCBXZWJDb3JlOjpVUkwm
IGJhc2VVUkwsIGNvbnN0IFdlYkNvcmU6OlVSTCYgZmFpbGluZ1VSTCwgY29uc3QgVXNlckRhdGEm
KTsKQEAgLTE0MTIsOSArMTQxNiwxMSBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxXZWJDb3JlOjpO
b2RlPiBtX3BlbmRpbmdTeW50aGV0aWNDbGlja05vZGU7CiAgICAgV2ViQ29yZTo6RmxvYXRQb2lu
dCBtX3BlbmRpbmdTeW50aGV0aWNDbGlja0xvY2F0aW9uOwogICAgIFdlYkNvcmU6OkZsb2F0UmVj
dCBtX3ByZXZpb3VzRXhwb3NlZENvbnRlbnRSZWN0OwotICAgIFdlYkNvcmU6OlRpbWVyIG1fdm9s
YXRpbGl0eVRpbWVyOwogI2VuZGlmCiAKKyAgICBXZWJDb3JlOjpUaW1lciBtX2xheWVyVm9sYXRp
bGl0eVRpbWVyOworICAgIFZlY3RvcjxzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4+IG1fbWFya0xheWVy
c0FzVm9sYXRpbGVDb21wbGV0aW9uSGFuZGxlcnM7CisKICAgICBIYXNoU2V0PFN0cmluZywgQVND
SUlDYXNlSW5zZW5zaXRpdmVIYXNoPiBtX21pbWVUeXBlc1dpdGhDdXN0b21Db250ZW50UHJvdmlk
ZXJzOwogICAgIFdlYkNvcmU6OkNvbG9yIG1fYmFja2dyb3VuZENvbG9yOwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0gYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0KaW5kZXgg
MTE4YWNiMGNlYTgwMTc1NzdiYWVjYmY2OGJmYTkzNTIxOTAzNjJjOS4uNmUzMTE2MmQzMDQzYWUw
ZWE3ZDc3M2M1OGZhOTcyMjY2YzM2N2I0MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbQpAQCAtMjg2NiwyOCArMjg2NiwxNyBA
QCB2b2lkIFdlYlBhZ2U6OmFwcGxpY2F0aW9uV2lsbFJlc2lnbkFjdGl2ZSgpCiAgICAgW1tOU05v
dGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSBwb3N0Tm90aWZpY2F0aW9uTmFtZTpXZWJV
SUFwcGxpY2F0aW9uV2lsbFJlc2lnbkFjdGl2ZU5vdGlmaWNhdGlvbiBvYmplY3Q6bmlsXTsKIH0K
IAotdm9pZCBXZWJQYWdlOjp2b2xhdGlsaXR5VGltZXJGaXJlZCgpCi17Ci0gICAgaWYgKCFtYXJr
TGF5ZXJzVm9sYXRpbGVJbW1lZGlhdGVseUlmUG9zc2libGUoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgbV92b2xhdGlsaXR5VGltZXIuc3RvcCgpOwotfQotCiB2b2lkIFdlYlBhZ2U6OmFwcGxp
Y2F0aW9uRGlkRW50ZXJCYWNrZ3JvdW5kKGJvb2wgaXNTdXNwZW5kZWRVbmRlckxvY2spCiB7CiAg
ICAgW1tOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSBwb3N0Tm90aWZpY2F0aW9u
TmFtZTpXZWJVSUFwcGxpY2F0aW9uRGlkRW50ZXJCYWNrZ3JvdW5kTm90aWZpY2F0aW9uIG9iamVj
dDpuaWwgdXNlckluZm86QHtAImlzU3VzcGVuZGVkVW5kZXJMb2NrIjogW05TTnVtYmVyIG51bWJl
cldpdGhCb29sOmlzU3VzcGVuZGVkVW5kZXJMb2NrXX1dOwogCiAgICAgc2V0TGF5ZXJUcmVlU3Rh
dGVJc0Zyb3plbih0cnVlKTsKLSAgICBpZiAobWFya0xheWVyc1ZvbGF0aWxlSW1tZWRpYXRlbHlJ
ZlBvc3NpYmxlKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fdm9sYXRpbGl0eVRpbWVyLnN0
YXJ0UmVwZWF0aW5nKHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMoMjAwKSk7CisgICAgbWFya0xh
eWVyc1ZvbGF0aWxlKCk7CiB9CiAKIHZvaWQgV2ViUGFnZTo6YXBwbGljYXRpb25XaWxsRW50ZXJG
b3JlZ3JvdW5kKGJvb2wgaXNTdXNwZW5kZWRVbmRlckxvY2spCiB7Ci0gICAgbV92b2xhdGlsaXR5
VGltZXIuc3RvcCgpOworICAgIGNhbmNlbE1hcmtMYXllcnNWb2xhdGlsZSgpOwogICAgIHNldExh
eWVyVHJlZVN0YXRlSXNGcm96ZW4oZmFsc2UpOwogCiAgICAgW1tOU05vdGlmaWNhdGlvbkNlbnRl
ciBkZWZhdWx0Q2VudGVyXSBwb3N0Tm90aWZpY2F0aW9uTmFtZTpXZWJVSUFwcGxpY2F0aW9uV2ls
bEVudGVyRm9yZWdyb3VuZE5vdGlmaWNhdGlvbiBvYmplY3Q6bmlsIHVzZXJJbmZvOkB7QCJpc1N1
c3BlbmRlZFVuZGVyTG9jayI6IEAoaXNTdXNwZW5kZWRVbmRlckxvY2spfV07CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcAppbmRleCBmMmM4Yzc0ZmRkNTA4MTQ2MzEzNzRm
OTE1YzQxNmQ5MWM2OGQwNGIyLi4yYzIxNjBhOGYyMDkwNTc0OGIxZmYyYmZjNDQxMjZlMjRlYzVk
Yjg5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHAKQEAgLTE0MCw2
ICsxNDAsOCBAQCBzdGF0aWMgY29uc3QgZG91YmxlIHBsdWdJbkF1dG9TdGFydEV4cGlyYXRpb25U
aW1lVXBkYXRlVGhyZXNob2xkID0gMjkgKiAyNCAqIDYwCiAvLyBUaGlzIHNob3VsZCBiZSBncmVh
dGVyIHRoYW4gdGlsZVJldmFsaWRhdGlvblRpbWVvdXQgaW4gVGlsZUNvbnRyb2xsZXIuCiBzdGF0
aWMgY29uc3QgZG91YmxlIG5vblZpc2libGVQcm9jZXNzQ2xlYW51cERlbGF5ID0gMTA7CiAKKyNk
ZWZpbmUgV0VCUFJPQ0VTU19MT0dfQUxXQVlTKC4uLikgTE9HX0FMV0FZUyh0cnVlLCBfX1ZBX0FS
R1NfXykKKwogbmFtZXNwYWNlIFdlYktpdCB7CiAKIFdlYlByb2Nlc3MmIFdlYlByb2Nlc3M6OnNp
bmdsZXRvbigpCkBAIC0xNTMsNyArMTU1LDYgQEAgV2ViUHJvY2Vzczo6V2ViUHJvY2VzcygpCiAj
aWYgUExBVEZPUk0oSU9TKQogICAgICwgbV92aWV3VXBkYXRlRGlzcGF0Y2hlcihWaWV3VXBkYXRl
RGlzcGF0Y2hlcjo6Y3JlYXRlKCkpCiAjZW5kaWYKLSAgICAsIG1fcHJvY2Vzc1N1c3BlbnNpb25D
bGVhbnVwVGltZXIoKnRoaXMsICZXZWJQcm9jZXNzOjpwcm9jZXNzU3VzcGVuc2lvbkNsZWFudXBU
aW1lckZpcmVkKQogICAgICwgbV9pbkRpZENsb3NlKGZhbHNlKQogICAgICwgbV9oYXNTZXRDYWNo
ZU1vZGVsKGZhbHNlKQogICAgICwgbV9jYWNoZU1vZGVsKENhY2hlTW9kZWxEb2N1bWVudFZpZXdl
cikKQEAgLTEyMDksMTMgKzEyMTAsMTQgQEAgdm9pZCBXZWJQcm9jZXNzOjphY3R1YWxQcmVwYXJl
VG9TdXNwZW5kKFNob3VsZEFja25vd2xlZGdlV2hlblJlYWR5VG9TdXNwZW5kIHNob3UKIAogICAg
IHNldEFsbExheWVyVHJlZVN0YXRlc0Zyb3plbih0cnVlKTsKIAotICAgIGlmIChtYXJrQWxsTGF5
ZXJzVm9sYXRpbGVJZlBvc3NpYmxlKCkpIHsKLSAgICAgICAgaWYgKHNob3VsZEFja25vd2xlZGdl
V2hlblJlYWR5VG9TdXNwZW5kID09IFNob3VsZEFja25vd2xlZGdlV2hlblJlYWR5VG9TdXNwZW5k
OjpZZXMpCisgICAgbWFya0FsbExheWVyc1ZvbGF0aWxlKFt0aGlzLCBzaG91bGRBY2tub3dsZWRn
ZVdoZW5SZWFkeVRvU3VzcGVuZF0geworICAgICAgICBXRUJQUk9DRVNTX0xPR19BTFdBWVMoIiVw
IC0gV2ViUHJvY2Vzczo6bWFya0FsbExheWVyc1ZvbGF0aWxlKCkgU3VjY2Vzc2Z1bHkgbWFya2Vk
IGFsbCBsYXllcnMgYXMgdm9sYXRpbGUiLCB0aGlzKTsKKworICAgICAgICBpZiAoc2hvdWxkQWNr
bm93bGVkZ2VXaGVuUmVhZHlUb1N1c3BlbmQgPT0gU2hvdWxkQWNrbm93bGVkZ2VXaGVuUmVhZHlU
b1N1c3BlbmQ6OlllcykgeworICAgICAgICAgICAgV0VCUFJPQ0VTU19MT0dfQUxXQVlTKCIlcCAt
IFdlYlByb2Nlc3M6OmFjdHVhbFByZXBhcmVUb1N1c3BlbmQoKSBTZW5kaW5nIFByb2Nlc3NSZWFk
eVRvU3VzcGVuZCBJUEMgbWVzc2FnZSIsIHRoaXMpOwogICAgICAgICAgICAgcGFyZW50UHJvY2Vz
c0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViUHJvY2Vzc1Byb3h5OjpQcm9jZXNzUmVh
ZHlUb1N1c3BlbmQoKSwgMCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgbV9zaG91bGRB
Y2tub3dsZWRnZVdoZW5SZWFkeVRvU3VzcGVuZCA9IHNob3VsZEFja25vd2xlZGdlV2hlblJlYWR5
VG9TdXNwZW5kOwotICAgIG1fcHJvY2Vzc1N1c3BlbnNpb25DbGVhbnVwVGltZXIuc3RhcnRSZXBl
YXRpbmcoc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcygyMCkpOworICAgICAgICB9CisgICAgfSk7
CiB9CiAKIHZvaWQgV2ViUHJvY2Vzczo6cHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseShib29s
JiBoYW5kbGVkKQpAQCAtMTIyOCw2ICsxMjMwLDcgQEAgdm9pZCBXZWJQcm9jZXNzOjpwcm9jZXNz
V2lsbFN1c3BlbmRJbW1pbmVudGx5KGJvb2wmIGhhbmRsZWQpCiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKKyAgICBXRUJQUk9DRVNTX0xPR19BTFdBWVMoIiVwIC0gV2ViUHJvY2Vzczo6cHJvY2Vz
c1dpbGxTdXNwZW5kSW1taW5lbnRseSgpIiwgdGhpcyk7CiAgICAgRGF0YWJhc2VUcmFja2VyOjp0
cmFja2VyKCkuY2xvc2VBbGxEYXRhYmFzZXMoKTsKICAgICBhY3R1YWxQcmVwYXJlVG9TdXNwZW5k
KFNob3VsZEFja25vd2xlZGdlV2hlblJlYWR5VG9TdXNwZW5kOjpObyk7CiAgICAgaGFuZGxlZCA9
IHRydWU7CkBAIC0xMjM1LDQ5ICsxMjM4LDY0IEBAIHZvaWQgV2ViUHJvY2Vzczo6cHJvY2Vzc1dp
bGxTdXNwZW5kSW1taW5lbnRseShib29sJiBoYW5kbGVkKQogCiB2b2lkIFdlYlByb2Nlc3M6OnBy
ZXBhcmVUb1N1c3BlbmQoKQogeworICAgIFdFQlBST0NFU1NfTE9HX0FMV0FZUygiJXAgLSBXZWJQ
cm9jZXNzOjpwcmVwYXJlVG9TdXNwZW5kKCkiLCB0aGlzKTsKICAgICBhY3R1YWxQcmVwYXJlVG9T
dXNwZW5kKFNob3VsZEFja25vd2xlZGdlV2hlblJlYWR5VG9TdXNwZW5kOjpZZXMpOwogfQogCiB2
b2lkIFdlYlByb2Nlc3M6OmNhbmNlbFByZXBhcmVUb1N1c3BlbmQoKQogeworICAgIFdFQlBST0NF
U1NfTE9HX0FMV0FZUygiJXAgLSBXZWJQcm9jZXNzOjpjYW5jZWxQcmVwYXJlVG9TdXNwZW5kKCki
LCB0aGlzKTsKICAgICBzZXRBbGxMYXllclRyZWVTdGF0ZXNGcm96ZW4oZmFsc2UpOwogCiAgICAg
Ly8gSWYgd2UndmUgYWxyZWFkeSBmaW5pc2hlZCBjbGVhbmluZyB1cCBhbmQgc2VudCBQcm9jZXNz
UmVhZHlUb1N1c3BlbmQsIHdlCiAgICAgLy8gc2hvdWxkbid0IHNlbmQgRGlkQ2FuY2VsUHJvY2Vz
c1N1c3BlbnNpb247IHRoZSBVSSBwcm9jZXNzIHN0cmljdGx5IGV4cGVjdHMgb25lIG9yIHRoZSBv
dGhlci4KLSAgICBpZiAoIW1fcHJvY2Vzc1N1c3BlbnNpb25DbGVhbnVwVGltZXIuaXNBY3RpdmUo
KSkKKyAgICBpZiAoIW1fcGFnZXNNYXJraW5nTGF5ZXJzQXNWb2xhdGlsZSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgbV9wcm9jZXNzU3VzcGVuc2lvbkNsZWFudXBUaW1lci5zdG9wKCk7CisgICAg
Y2FuY2VsTWFya0FsbExheWVyc1ZvbGF0aWxlKCk7CisKKyAgICBXRUJQUk9DRVNTX0xPR19BTFdB
WVMoIiVwIC0gV2ViUHJvY2Vzczo6Y2FuY2VsUHJlcGFyZVRvU3VzcGVuZCgpIFNlbmRpbmcgRGlk
Q2FuY2VsUHJvY2Vzc1N1c3BlbnNpb24gSVBDIG1lc3NhZ2UiLCB0aGlzKTsKICAgICBwYXJlbnRQ
cm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJQcm9jZXNzUHJveHk6OkRpZENh
bmNlbFByb2Nlc3NTdXNwZW5zaW9uKCksIDApOwogfQogCi1ib29sIFdlYlByb2Nlc3M6Om1hcmtB
bGxMYXllcnNWb2xhdGlsZUlmUG9zc2libGUoKQordm9pZCBXZWJQcm9jZXNzOjptYXJrQWxsTGF5
ZXJzVm9sYXRpbGUoc3RkOjpmdW5jdGlvbjx2b2lkKCk+IGNvbXBsZXRpb25IYW5kbGVyKQogewot
ICAgIGJvb2wgc3VjY2Vzc2Z1bGx5TWFya2VkQWxsTGF5ZXJzVm9sYXRpbGUgPSB0cnVlOwotICAg
IGZvciAoYXV0byYgcGFnZSA6IG1fcGFnZU1hcC52YWx1ZXMoKSkKLSAgICAgICAgc3VjY2Vzc2Z1
bGx5TWFya2VkQWxsTGF5ZXJzVm9sYXRpbGUgJj0gcGFnZS0+bWFya0xheWVyc1ZvbGF0aWxlSW1t
ZWRpYXRlbHlJZlBvc3NpYmxlKCk7Ci0KLSAgICByZXR1cm4gc3VjY2Vzc2Z1bGx5TWFya2VkQWxs
TGF5ZXJzVm9sYXRpbGU7CisgICAgV0VCUFJPQ0VTU19MT0dfQUxXQVlTKCIlcCAtIFdlYlByb2Nl
c3M6Om1hcmtBbGxMYXllcnNWb2xhdGlsZSgpIiwgdGhpcyk7CisgICAgbV9wYWdlc01hcmtpbmdM
YXllcnNBc1ZvbGF0aWxlID0gbV9wYWdlTWFwLnNpemUoKTsKKyAgICBpZiAoIW1fcGFnZXNNYXJr
aW5nTGF5ZXJzQXNWb2xhdGlsZSkgeworICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIGZvciAoYXV0byYgcGFnZSA6IG1fcGFnZU1hcC52YWx1
ZXMoKSkgeworICAgICAgICBwYWdlLT5tYXJrTGF5ZXJzVm9sYXRpbGUoW3RoaXMsIGNvbXBsZXRp
b25IYW5kbGVyXSB7CisgICAgICAgICAgICBBU1NFUlQobV9wYWdlc01hcmtpbmdMYXllcnNBc1Zv
bGF0aWxlKTsKKyAgICAgICAgICAgIGlmICghLS1tX3BhZ2VzTWFya2luZ0xheWVyc0FzVm9sYXRp
bGUpCisgICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKKyAgICAgICAgfSk7Cisg
ICAgfQogfQogCi12b2lkIFdlYlByb2Nlc3M6OnNldEFsbExheWVyVHJlZVN0YXRlc0Zyb3plbihi
b29sIGZyb3plbikKK3ZvaWQgV2ViUHJvY2Vzczo6Y2FuY2VsTWFya0FsbExheWVyc1ZvbGF0aWxl
KCkKIHsKKyAgICBpZiAoIW1fcGFnZXNNYXJraW5nTGF5ZXJzQXNWb2xhdGlsZSkKKyAgICAgICAg
cmV0dXJuOworCiAgICAgZm9yIChhdXRvJiBwYWdlIDogbV9wYWdlTWFwLnZhbHVlcygpKQotICAg
ICAgICBwYWdlLT5zZXRMYXllclRyZWVTdGF0ZUlzRnJvemVuKGZyb3plbik7CisgICAgICAgIHBh
Z2UtPmNhbmNlbE1hcmtMYXllcnNWb2xhdGlsZSgpOworICAgIG1fcGFnZXNNYXJraW5nTGF5ZXJz
QXNWb2xhdGlsZSA9IDA7CiB9CiAKLXZvaWQgV2ViUHJvY2Vzczo6cHJvY2Vzc1N1c3BlbnNpb25D
bGVhbnVwVGltZXJGaXJlZCgpCit2b2lkIFdlYlByb2Nlc3M6OnNldEFsbExheWVyVHJlZVN0YXRl
c0Zyb3plbihib29sIGZyb3plbikKIHsKLSAgICBpZiAoIW1hcmtBbGxMYXllcnNWb2xhdGlsZUlm
UG9zc2libGUoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fcHJvY2Vzc1N1c3BlbnNpb25DbGVh
bnVwVGltZXIuc3RvcCgpOwotICAgIGlmIChtX3Nob3VsZEFja25vd2xlZGdlV2hlblJlYWR5VG9T
dXNwZW5kID09IFNob3VsZEFja25vd2xlZGdlV2hlblJlYWR5VG9TdXNwZW5kOjpZZXMpCi0gICAg
ICAgIHBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYlByb2Nlc3NQ
cm94eTo6UHJvY2Vzc1JlYWR5VG9TdXNwZW5kKCksIDApOworICAgIGZvciAoYXV0byYgcGFnZSA6
IG1fcGFnZU1hcC52YWx1ZXMoKSkKKyAgICAgICAgcGFnZS0+c2V0TGF5ZXJUcmVlU3RhdGVJc0Zy
b3plbihmcm96ZW4pOwogfQogICAgIAogdm9pZCBXZWJQcm9jZXNzOjpwcm9jZXNzRGlkUmVzdW1l
KCkKIHsKLSAgICBtX3Byb2Nlc3NTdXNwZW5zaW9uQ2xlYW51cFRpbWVyLnN0b3AoKTsKKyAgICBX
RUJQUk9DRVNTX0xPR19BTFdBWVMoIiVwIC0gV2ViUHJvY2Vzczo6cHJvY2Vzc0RpZFJlc3VtZSgp
IiwgdGhpcyk7CisKKyAgICBjYW5jZWxNYXJrQWxsTGF5ZXJzVm9sYXRpbGUoKTsKICAgICBzZXRB
bGxMYXllclRyZWVTdGF0ZXNGcm96ZW4oZmFsc2UpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUHJvY2Vzcy5oCmluZGV4IDNhOTNjMTlkMzlkZmQxNTVmYWEzNWM4ZDQ2YjliNjhmNGUx
ZTFiNTIuLjhmY2MwMmViYjAzYmQ2Nzk4ZTRlMTVlYTBiMDY2M2Y0Y2VmMDNjY2MgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5oCkBAIC0xODYsOSArMTg2LDYgQEAgcHVibGlj
OgogICAgIHZvaWQgcHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseShib29sJiBoYW5kbGVkKTsK
ICAgICB2b2lkIHByZXBhcmVUb1N1c3BlbmQoKTsKICAgICB2b2lkIGNhbmNlbFByZXBhcmVUb1N1
c3BlbmQoKTsKLSAgICBib29sIG1hcmtBbGxMYXllcnNWb2xhdGlsZUlmUG9zc2libGUoKTsKLSAg
ICB2b2lkIHNldEFsbExheWVyVHJlZVN0YXRlc0Zyb3plbihib29sKTsKLSAgICB2b2lkIHByb2Nl
c3NTdXNwZW5zaW9uQ2xlYW51cFRpbWVyRmlyZWQoKTsKICAgICB2b2lkIHByb2Nlc3NEaWRSZXN1
bWUoKTsKIAogI2lmIFBMQVRGT1JNKElPUykKQEAgLTIyNCw2ICsyMjEsMTEgQEAgcHJpdmF0ZToK
ICAgICB2b2lkIHJlZ2lzdGVyV2l0aFN0YXRlRHVtcGVyKCk7CiAjZW5kaWYKIAorICAgIHZvaWQg
bWFya0FsbExheWVyc1ZvbGF0aWxlKHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBjb21wbGV0aW9uSGFu
ZGxlcik7CisgICAgdm9pZCBjYW5jZWxNYXJrQWxsTGF5ZXJzVm9sYXRpbGUoKTsKKyAgICB2b2lk
IHNldEFsbExheWVyVHJlZVN0YXRlc0Zyb3plbihib29sKTsKKyAgICB2b2lkIHByb2Nlc3NTdXNw
ZW5zaW9uQ2xlYW51cFRpbWVyRmlyZWQoKTsKKwogICAgIHZvaWQgY2xlYXJDYWNoZWRDcmVkZW50
aWFscygpOwogCiAgICAgdm9pZCBwbGF0Zm9ybVRlcm1pbmF0ZSgpOwpAQCAtMzI3LDcgKzMyOSw2
IEBAIHByaXZhdGU6CiAjaWYgUExBVEZPUk0oSU9TKQogICAgIFJlZlB0cjxWaWV3VXBkYXRlRGlz
cGF0Y2hlcj4gbV92aWV3VXBkYXRlRGlzcGF0Y2hlcjsKICNlbmRpZgotICAgIFdlYkNvcmU6OlRp
bWVyIG1fcHJvY2Vzc1N1c3BlbnNpb25DbGVhbnVwVGltZXI7CiAKICAgICBib29sIG1faW5EaWRD
bG9zZTsKIApAQCAtMzg2LDcgKzM4Nyw3IEBAIHByaXZhdGU6CiAKICAgICBSZWY8V2ViQ29yZTo6
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlPiBtX3Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
YWdlOwogCi0gICAgU2hvdWxkQWNrbm93bGVkZ2VXaGVuUmVhZHlUb1N1c3BlbmQgbV9zaG91bGRB
Y2tub3dsZWRnZVdoZW5SZWFkeVRvU3VzcGVuZDsKKyAgICB1bnNpZ25lZCBtX3BhZ2VzTWFya2lu
Z0xheWVyc0FzVm9sYXRpbGUgeyAwIH07CiAgICAgYm9vbCBtX3N1cHByZXNzTWVtb3J5UHJlc3N1
cmVIYW5kbGVyIHsgZmFsc2UgfTsKIH07CiAK
</data>

          </attachment>
      

    </bug>

</bugzilla>