<?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>204531</bug_id>
          
          <creation_ts>2019-11-22 12:13:08 -0800</creation_ts>
          <short_desc>Web Inspector: TabActivity diagnostic event should sample the active tab uniformly</short_desc>
          <delta_ts>2019-12-06 11:34:46 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Inspector</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</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="Blaze Burg">bburg</reporter>
          <assigned_to name="Blaze Burg">bburg</assigned_to>
          <cc>bburg</cc>
    
    <cc>hi</cc>
    
    <cc>inspector-bugzilla-changes</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1592950</commentid>
    <comment_count>0</comment_count>
    <who name="Blaze Burg">bburg</who>
    <bug_when>2019-11-22 12:13:08 -0800</bug_when>
    <thetext>Currently, it will record an event every time a tab is switched (recording it as an interaction with the outgoing tab), which is wrong.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1593039</commentid>
    <comment_count>1</comment_count>
      <attachid>384204</attachid>
    <who name="Blaze Burg">bburg</who>
    <bug_when>2019-11-22 15:07:50 -0800</bug_when>
    <thetext>Created attachment 384204
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1593052</commentid>
    <comment_count>2</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-11-22 15:15:17 -0800</bug_when>
    <thetext>&lt;rdar://problem/57442539&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1593114</commentid>
    <comment_count>3</comment_count>
      <attachid>384204</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2019-11-22 17:31:46 -0800</bug_when>
    <thetext>Comment on attachment 384204
Patch

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

r=me

&gt; Source/WebInspectorUI/UserInterface/Controllers/TabActivityDiagnosticEventRecorder.js:36
&gt; +        this._eventSamplingTimerIdentifier = 0;
&gt; +        this._initialDelayBeforeSamplingTimerIdentifier = 0;

Given that we reset to `undefined`, we should start out with `undefined`.

&gt; Source/WebInspectorUI/UserInterface/Controllers/TabActivityDiagnosticEventRecorder.js:51
&gt; +        this._startInitialDelayBeforeSamplingTimer();

NIT: shouldn&apos;t this use `_startEventSamplingTimer` if `setup` is called way after Web Inspector is opened?

&gt; Source/WebInspectorUI/UserInterface/Controllers/TabActivityDiagnosticEventRecorder.js:98
&gt; +        this._initialDelayBeforeSamplingTimerIdentifier = setTimeout(this._sampleCurrentTabActivity.bind(this), WI.TabActivityDiagnosticEventRecorder.InitialDelayBeforeSamplingInterval);

NIT: you can drop the `WI`

&gt; Source/WebInspectorUI/UserInterface/Controllers/TabActivityDiagnosticEventRecorder.js:116
&gt; +        this._eventSamplingTimerIdentifier = setTimeout(this._sampleCurrentTabActivity.bind(this), WI.TabActivityDiagnosticEventRecorder.EventSamplingInterval);

Ditto (98)

&gt; Source/WebInspectorUI/UserInterface/Controllers/TabActivityDiagnosticEventRecorder.js:134
&gt; +        let intervalSinceLastUserInteraction = Date.now() - this._lastUserInteractionTimestamp;

Should we use `performance.now()` instead?

&gt; Source/WebInspectorUI/UserInterface/Controllers/TabActivityDiagnosticEventRecorder.js:135
&gt; +        if (intervalSinceLastUserInteraction &gt; WI.TabActivityDiagnosticEventRecorder.EventSamplingInterval) {

Ditto (98)

&gt; Source/WebInspectorUI/UserInterface/Controllers/TabActivityDiagnosticEventRecorder.js:136
&gt; +            if (WI.settings.debugAutoLogDiagnosticEvents.valueRespectingDebugUIAvailability)

Please add another check for `WI.isDebugUIEnabled()`.

&gt; Source/WebInspectorUI/UserInterface/Controllers/TabActivityDiagnosticEventRecorder.js:156
&gt; +        this._lastUserInteractionTimestamp = Date.now();

Ditto (134)

&gt; Source/WebInspectorUI/UserInterface/Controllers/TabActivityDiagnosticEventRecorder.js:187
&gt; +WI.TabActivityDiagnosticEventRecorder.InitialDelayBeforeSamplingInterval = 10 * 1000;

Rather than add logic to wait 10s, could we just move the `setup()` call to right after `InspectorFrontendAPI.loadCompleted();` in `WI.contentLoaded`?  That&apos;s when we start receiving messages anyways, so it&apos;s when Web Inspector could be considered &quot;usable&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1593892</commentid>
    <comment_count>4</comment_count>
      <attachid>384204</attachid>
    <who name="Blaze Burg">bburg</who>
    <bug_when>2019-11-27 10:40:35 -0800</bug_when>
    <thetext>Comment on attachment 384204
Patch

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

&gt;&gt; Source/WebInspectorUI/UserInterface/Controllers/TabActivityDiagnosticEventRecorder.js:36
&gt;&gt; +        this._initialDelayBeforeSamplingTimerIdentifier = 0;
&gt; 
&gt; Given that we reset to `undefined`, we should start out with `undefined`.

I find 0 to be a more useful sentinel value when debugging, as it is not a real timer identifier.

&gt;&gt; Source/WebInspectorUI/UserInterface/Controllers/TabActivityDiagnosticEventRecorder.js:51
&gt;&gt; +        this._startInitialDelayBeforeSamplingTimer();
&gt; 
&gt; NIT: shouldn&apos;t this use `_startEventSamplingTimer` if `setup` is called way after Web Inspector is opened?

Yes. The trick is how to tell whether it&apos;s been a long time or not.

&gt;&gt; Source/WebInspectorUI/UserInterface/Controllers/TabActivityDiagnosticEventRecorder.js:134
&gt;&gt; +        let intervalSinceLastUserInteraction = Date.now() - this._lastUserInteractionTimestamp;
&gt; 
&gt; Should we use `performance.now()` instead?

Sure ¯\_(ツ)_/¯

&gt;&gt; Source/WebInspectorUI/UserInterface/Controllers/TabActivityDiagnosticEventRecorder.js:136
&gt;&gt; +            if (WI.settings.debugAutoLogDiagnosticEvents.valueRespectingDebugUIAvailability)
&gt; 
&gt; Please add another check for `WI.isDebugUIEnabled()`.

This check is rolled into the property getter.

&gt;&gt; Source/WebInspectorUI/UserInterface/Controllers/TabActivityDiagnosticEventRecorder.js:187
&gt;&gt; +WI.TabActivityDiagnosticEventRecorder.InitialDelayBeforeSamplingInterval = 10 * 1000;
&gt; 
&gt; Rather than add logic to wait 10s, could we just move the `setup()` call to right after `InspectorFrontendAPI.loadCompleted();` in `WI.contentLoaded`?  That&apos;s when we start receiving messages anyways, so it&apos;s when Web Inspector could be considered &quot;usable&quot;.

Yes, it should use that to account for frontend loading delays. However, the initial delay (10 seconds) is not just to account for the delay while the frontend loads. It also accounts for the user needing a moment to look at the UI and make their initial action before we sample. I hypothesize that tab switching is often performed in the first few seconds of a user&apos;s session. If we sample immediately after the frontend is done loading, the sample will count the initial tab (which did not receive meaningful user interaction). 

TL;DR I worry the samples will be heavily biased towards whatever the default selected tab is.

One way to examine this more analytically would be to somehow log or compute a sampleIteration with each diagnostic event. If the distribution of active tabs looks way different when sampleIteration=1 than when sampleIteration&gt;1, then this would indicate the first sample is being influenced by something.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1594111</commentid>
    <comment_count>5</comment_count>
      <attachid>384473</attachid>
    <who name="Blaze Burg">bburg</who>
    <bug_when>2019-11-28 13:58:44 -0800</bug_when>
    <thetext>Created attachment 384473
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1594862</commentid>
    <comment_count>6</comment_count>
      <attachid>384473</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2019-12-02 17:12:23 -0800</bug_when>
    <thetext>Comment on attachment 384473
Patch

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

r=me

&gt; Source/WebInspectorUI/UserInterface/Controllers/TabActivityDiagnosticEventRecorder.js:106
&gt; +        let initialDelay = remainingTime &gt; 0 ? remainingTime : maximumInitialDelay;

`Math.max(remainingTime, maximumInitialDelay)`

NIT: you could inline also this

&gt; Source/WebInspectorUI/UserInterface/Controllers/TabActivityDiagnosticEventRecorder.js:196
&gt; +WI.TabActivityDiagnosticEventRecorder.EventSamplingInterval = 60 * 1000;
&gt; +WI.TabActivityDiagnosticEventRecorder.InitialDelayBeforeSamplingInterval = 10 * 1000;

NIT: I&apos;ve started using `static get` instead of creating these as a named property after the class&apos; structure is defined.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1595948</commentid>
    <comment_count>7</comment_count>
    <who name="Blaze Burg">bburg</who>
    <bug_when>2019-12-05 12:50:29 -0800</bug_when>
    <thetext>(In reply to Devin Rousso from comment #6)
&gt; Comment on attachment 384473 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=384473&amp;action=review
&gt; 
&gt; r=me
&gt; 
&gt; &gt; Source/WebInspectorUI/UserInterface/Controllers/TabActivityDiagnosticEventRecorder.js:106
&gt; &gt; +        let initialDelay = remainingTime &gt; 0 ? remainingTime : maximumInitialDelay;
&gt; 
&gt; `Math.max(remainingTime, maximumInitialDelay)`

This will always choose maximumInitialDelay. Instead it should be Math.min(Math.max(0, remainingTime), maximumInitialDelay). I suppose it could also be Number.constrain(remainingTime, 0, maximumInitialDelay).

&gt; 
&gt; NIT: you could inline also this
&gt; 
&gt; &gt; Source/WebInspectorUI/UserInterface/Controllers/TabActivityDiagnosticEventRecorder.js:196
&gt; &gt; +WI.TabActivityDiagnosticEventRecorder.EventSamplingInterval = 60 * 1000;
&gt; &gt; +WI.TabActivityDiagnosticEventRecorder.InitialDelayBeforeSamplingInterval = 10 * 1000;
&gt; 
&gt; NIT: I&apos;ve started using `static get` instead of creating these as a named
&gt; property after the class&apos; structure is defined.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1596303</commentid>
    <comment_count>8</comment_count>
    <who name="Blaze Burg">bburg</who>
    <bug_when>2019-12-06 11:34:46 -0800</bug_when>
    <thetext>Committed r253211: &lt;https://trac.webkit.org/changeset/253211&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>384204</attachid>
            <date>2019-11-22 15:07:50 -0800</date>
            <delta_ts>2019-11-28 13:58:43 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-204531-20191122150749.patch</filename>
            <type>text/plain</type>
            <size>10627</size>
            <attacher name="Blaze Burg">bburg</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUyNzkwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVj
dG9yVUkvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkluc3BlY3RvclVJL0NoYW5nZUxvZwppbmRleCA3
MGIzZWM0N2RjZjU5OWQxZGUyMjMyMjk5MWZjY2NjOTFjOWQzYjUzLi4zN2FhMWU1YThiNzQyNWI3
ODIwMzcxMjQ5ZGU4NDBlYjVkYTRlNTgzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9y
VUkvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0MiBAQAorMjAxOS0xMS0yMiAgQnJpYW4gQnVyZyAgPGJidXJnQGFwcGxlLmNvbT4KKwor
ICAgICAgICBXZWIgSW5zcGVjdG9yOiBUYWJBY3Rpdml0eSBkaWFnbm9zdGljIGV2ZW50IHNob3Vs
ZCBzYW1wbGUgdGhlIGFjdGl2ZSB0YWIgdW5pZm9ybWx5CisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDQ1MzEKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZXdyaXRlIHRoaXMgY2xhc3MgdG8gdXNlIGEgdW5p
Zm9ybSBzYW1wbGluZyBhcHByb2FjaC4gRXZlcnkgbiBzZWNvbmRzLCBhIHRpbWVyIGZpcmVzIGFu
ZAorICAgICAgICBzYW1wbGVzIHdoYXQgdGhlIGN1cnJlbnQgdGFiIGlzLiBJZiB0aGUgbGFzdCB1
c2VyIGludGVyYWN0aW9uIGhhcHBlbmVkIHVwIHRvIG4gc2Vjb25kcyBhZ28sCisgICAgICAgIHJl
cG9ydCBhIFRhYkFjdGl2aXR5IGRpYWdub3N0aWMgZXZlbnQuIEtlZXBpbmcgd2l0aCB0aGUgcHJl
dmlvdXMgaW1wbGVtZW50YXRpb24sIHNhbXBsZXMKKyAgICAgICAgYXJlIHRha2VuIGV2ZXJ5IG49
NjAgc2Vjb25kcy4KKworICAgICAgICBUbyBhY2NvdW50IGZvciBiaWFzIGluIHRoZSBpbml0aWFs
IHNhbXBsZSB3aGVuIFdlYiBJbnNwZWN0b3IgaXMgb3Blbiwgd2FpdCBtIHNlY29uZHMgZm9yCisg
ICAgICAgIHRoZSBmaXJzdCBzYW1wbGUuIFRoaXMgYWNjb3VudHMgZm9yIHRoZSB0aW1lIGJldHdl
ZW4gb3BlbmluZyBXZWIgSW5zcGVjdG9yIGFuZCBjaG9vc2luZyB0aGUKKyAgICAgICAgZGVzaXJl
ZCB0YWIuIEluIG15IHRlc3RpbmcsIG09MTAgaXMgZW5vdWdoIHRpbWUgdG8gbG9hZCBXZWIgSW5z
cGVjdG9yIGFuZCBzd2l0Y2gKKyAgICAgICAgaW1tZWRpYXRlbHkgdG8gYSBkaWZmZXJlbnQgdGFi
LiBJbiB0aGF0IGNhc2UsIHRoZSBpbml0aWFsIHRhYiB3b3VsZCBub3QgYmUgc2FtcGxlZCBhcyB0
aGUKKyAgICAgICAgYWN0aXZlIHRhYiBldmVuIGlmIHRoZSBsYXN0IHVzZXIgaW50ZXJhY3Rpb24g
KGNsaWNraW5nIHRhYiBiYXIpIGhhcHBlbmVkIHdoaWxlIHRoZSBpbml0aWFsCisgICAgICAgIHRh
YiB3YXMgZGlzcGxheWVkLgorCisgICAgICAgICogVXNlckludGVyZmFjZS9Db250cm9sbGVycy9U
YWJBY3Rpdml0eURpYWdub3N0aWNFdmVudFJlY29yZGVyLmpzOgorICAgICAgICAoV0kuVGFiQWN0
aXZpdHlEaWFnbm9zdGljRXZlbnRSZWNvcmRlcik6CisgICAgICAgIChXSS5UYWJBY3Rpdml0eURp
YWdub3N0aWNFdmVudFJlY29yZGVyLnByb3RvdHlwZS5zZXR1cCk6CisgICAgICAgIChXSS5UYWJB
Y3Rpdml0eURpYWdub3N0aWNFdmVudFJlY29yZGVyLnByb3RvdHlwZS50ZWFyZG93bik6CisgICAg
ICAgIChXSS5UYWJBY3Rpdml0eURpYWdub3N0aWNFdmVudFJlY29yZGVyLnByb3RvdHlwZS5fc3Rh
cnRJbml0aWFsRGVsYXlCZWZvcmVTYW1wbGluZ1RpbWVyKToKKyAgICAgICAgKFdJLlRhYkFjdGl2
aXR5RGlhZ25vc3RpY0V2ZW50UmVjb3JkZXIucHJvdG90eXBlLl9zdG9wSW5pdGlhbERlbGF5QmVm
b3JlU2FtcGxpbmdUaW1lcik6CisgICAgICAgIChXSS5UYWJBY3Rpdml0eURpYWdub3N0aWNFdmVu
dFJlY29yZGVyLnByb3RvdHlwZS5fc3RhcnRFdmVudFNhbXBsaW5nVGltZXIpOgorICAgICAgICAo
V0kuVGFiQWN0aXZpdHlEaWFnbm9zdGljRXZlbnRSZWNvcmRlci5wcm90b3R5cGUuX3N0b3BFdmVu
dFNhbXBsaW5nVGltZXIpOgorICAgICAgICAoV0kuVGFiQWN0aXZpdHlEaWFnbm9zdGljRXZlbnRS
ZWNvcmRlci5wcm90b3R5cGUuX3NhbXBsZUN1cnJlbnRUYWJBY3Rpdml0eSk6CisgICAgICAgIChX
SS5UYWJBY3Rpdml0eURpYWdub3N0aWNFdmVudFJlY29yZGVyLnByb3RvdHlwZS5fZGlkT2JzZXJ2
ZVVzZXJJbnRlcmFjdGlvbik6CisgICAgICAgIChXSS5UYWJBY3Rpdml0eURpYWdub3N0aWNFdmVu
dFJlY29yZGVyLnByb3RvdHlwZS5faGFuZGxlV2luZG93Rm9jdXMpOgorICAgICAgICAoV0kuVGFi
QWN0aXZpdHlEaWFnbm9zdGljRXZlbnRSZWNvcmRlci5wcm90b3R5cGUuX2hhbmRsZVdpbmRvd0Js
dXIpOgorICAgICAgICAoV0kuVGFiQWN0aXZpdHlEaWFnbm9zdGljRXZlbnRSZWNvcmRlci5wcm90
b3R5cGUuX2hhbmRsZVdpbmRvd0tleURvd24pOgorICAgICAgICAoV0kuVGFiQWN0aXZpdHlEaWFn
bm9zdGljRXZlbnRSZWNvcmRlci5wcm90b3R5cGUuX2hhbmRsZVdpbmRvd01vdXNlRG93bik6Cisg
ICAgICAgIChXSS5UYWJBY3Rpdml0eURpYWdub3N0aWNFdmVudFJlY29yZGVyLnByb3RvdHlwZS5f
ZGlkSW50ZXJhY3RXaXRoVGFiQ29udGVudCk6IERlbGV0ZWQuCisgICAgICAgIChXSS5UYWJBY3Rp
dml0eURpYWdub3N0aWNFdmVudFJlY29yZGVyLnByb3RvdHlwZS5fY2xlYXJUYWJBY3Rpdml0eVRp
bWVvdXQpOiBEZWxldGVkLgorICAgICAgICAoV0kuVGFiQWN0aXZpdHlEaWFnbm9zdGljRXZlbnRS
ZWNvcmRlci5wcm90b3R5cGUuX2JlZ2luVGFiQWN0aXZpdHlUaW1lb3V0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdJLlRhYkFjdGl2aXR5RGlhZ25vc3RpY0V2ZW50UmVjb3JkZXIucHJvdG90eXBlLl9z
dG9wVHJhY2tpbmdUYWJBY3Rpdml0eSk6IERlbGV0ZWQuCisgICAgICAgIChXSS5UYWJBY3Rpdml0
eURpYWdub3N0aWNFdmVudFJlY29yZGVyLnByb3RvdHlwZS5faGFuZGxlVGFiQnJvd3NlclNlbGVj
dGVkVGFiQ29udGVudFZpZXdEaWRDaGFuZ2UpOiBEZWxldGVkLgorCiAyMDE5LTExLTIwICBCcmlh
biBCdXJnICA8YmJ1cmdAYXBwbGUuY29tPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IGFkZCBz
dXBwb3J0IGZvciBuZXcga2luZHMgb2YgZGlhZ25vc3RpYyBldmVudHMKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL1RhYkFjdGl2aXR5
RGlhZ25vc3RpY0V2ZW50UmVjb3JkZXIuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlcklu
dGVyZmFjZS9Db250cm9sbGVycy9UYWJBY3Rpdml0eURpYWdub3N0aWNFdmVudFJlY29yZGVyLmpz
CmluZGV4IGI4ZWU5NDU2N2M0MmY1Nzg3NmNkZDNhYjU5ODkwMTNlMTM2ZThlMTkuLjU0ZjJjOGM4
OGVmZjJmYzk5Nzk2YzcwY2U4YjY3MzQyOWE3MGJjNjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJ
bnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL1RhYkFjdGl2aXR5RGlhZ25vc3Rp
Y0V2ZW50UmVjb3JkZXIuanMKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZh
Y2UvQ29udHJvbGxlcnMvVGFiQWN0aXZpdHlEaWFnbm9zdGljRXZlbnRSZWNvcmRlci5qcwpAQCAt
MjksMTYgKzI5LDE3IEBAIFdJLlRhYkFjdGl2aXR5RGlhZ25vc3RpY0V2ZW50UmVjb3JkZXIgPSBj
bGFzcyBUYWJBY3Rpdml0eURpYWdub3N0aWNFdmVudFJlY29yZGVyCiAgICAgewogICAgICAgICBz
dXBlcigiVGFiQWN0aXZpdHkiLCBjb250cm9sbGVyKTsKIAotICAgICAgICB0aGlzLl9zaG91bGRM
b2dUYWJDb250ZW50QWN0aXZpdHkgPSBmYWxzZTsKLSAgICAgICAgdGhpcy5fdGFiQWN0aXZpdHlU
aW1lb3V0SWRlbnRpZmllciA9IDA7CisgICAgICAgIHRoaXMuX2luc3BlY3Rvckhhc0ZvY3VzID0g
dHJ1ZTsKKyAgICAgICAgdGhpcy5fbGFzdFVzZXJJbnRlcmFjdGlvblRpbWVzdGFtcCA9IDA7CisK
KyAgICAgICAgdGhpcy5fZXZlbnRTYW1wbGluZ1RpbWVySWRlbnRpZmllciA9IDA7CisgICAgICAg
IHRoaXMuX2luaXRpYWxEZWxheUJlZm9yZVNhbXBsaW5nVGltZXJJZGVudGlmaWVyID0gMDsKICAg
ICB9CiAKICAgICAvLyBQcm90ZWN0ZWQKIAogICAgIHNldHVwKCkKICAgICB7Ci0gICAgICAgIFdJ
LlRhYkJyb3dzZXIuYWRkRXZlbnRMaXN0ZW5lcihXSS5UYWJCcm93c2VyLkV2ZW50LlNlbGVjdGVk
VGFiQ29udGVudFZpZXdEaWRDaGFuZ2UsIHRoaXMuX2hhbmRsZVRhYkJyb3dzZXJTZWxlY3RlZFRh
YkNvbnRlbnRWaWV3RGlkQ2hhbmdlLCB0aGlzKTsKLQogICAgICAgICBjb25zdCBvcHRpb25zID0g
ewogICAgICAgICAgICAgY2FwdHVyZTogdHJ1ZSwKICAgICAgICAgfTsKQEAgLTQ3LDEzICs0OCwx
MSBAQCBXSS5UYWJBY3Rpdml0eURpYWdub3N0aWNFdmVudFJlY29yZGVyID0gY2xhc3MgVGFiQWN0
aXZpdHlEaWFnbm9zdGljRXZlbnRSZWNvcmRlcgogICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0
ZW5lcigia2V5ZG93biIsIHRoaXMsIG9wdGlvbnMpOwogICAgICAgICB3aW5kb3cuYWRkRXZlbnRM
aXN0ZW5lcigibW91c2Vkb3duIiwgdGhpcywgb3B0aW9ucyk7CiAKLSAgICAgICAgdGhpcy5fc2hv
dWxkTG9nVGFiQ29udGVudEFjdGl2aXR5ID0gdHJ1ZTsKKyAgICAgICAgdGhpcy5fc3RhcnRJbml0
aWFsRGVsYXlCZWZvcmVTYW1wbGluZ1RpbWVyKCk7CiAgICAgfQogCiAgICAgdGVhcmRvd24oKQog
ICAgIHsKLSAgICAgICAgV0kuVGFiQnJvd3Nlci5yZW1vdmVFdmVudExpc3RlbmVyKFdJLlRhYkJy
b3dzZXIuRXZlbnQuU2VsZWN0ZWRUYWJDb250ZW50Vmlld0RpZENoYW5nZSwgdGhpcy5faGFuZGxl
VGFiQnJvd3NlclNlbGVjdGVkVGFiQ29udGVudFZpZXdEaWRDaGFuZ2UsIHRoaXMpOwotCiAgICAg
ICAgIGNvbnN0IG9wdGlvbnMgPSB7CiAgICAgICAgICAgICBjYXB0dXJlOiB0cnVlLAogICAgICAg
ICB9OwpAQCAtNjIsNyArNjEsOSBAQCBXSS5UYWJBY3Rpdml0eURpYWdub3N0aWNFdmVudFJlY29y
ZGVyID0gY2xhc3MgVGFiQWN0aXZpdHlEaWFnbm9zdGljRXZlbnRSZWNvcmRlcgogICAgICAgICB3
aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsIHRoaXMsIG9wdGlvbnMpOwogICAg
ICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIiwgdGhpcywgb3B0aW9u
cyk7CiAKLSAgICAgICAgdGhpcy5fc3RvcFRyYWNraW5nVGFiQWN0aXZpdHkoKTsKKyAgICAgICAg
dGhpcy5fc3RvcEluaXRpYWxEZWxheUJlZm9yZVNhbXBsaW5nVGltZXIoKTsKKyAgICAgICAgdGhp
cy5fc3RvcEV2ZW50U2FtcGxpbmdUaW1lcigpOworCiAgICAgfQogCiAgICAgLy8gUHVibGljCkBA
IC04Nyw0NSArODgsNzIgQEAgV0kuVGFiQWN0aXZpdHlEaWFnbm9zdGljRXZlbnRSZWNvcmRlciA9
IGNsYXNzIFRhYkFjdGl2aXR5RGlhZ25vc3RpY0V2ZW50UmVjb3JkZXIKIAogICAgIC8vIFByaXZh
dGUKIAotICAgIF9kaWRJbnRlcmFjdFdpdGhUYWJDb250ZW50KCkKKyAgICBfc3RhcnRJbml0aWFs
RGVsYXlCZWZvcmVTYW1wbGluZ1RpbWVyKCkKICAgICB7Ci0gICAgICAgIGlmICghdGhpcy5fc2hv
dWxkTG9nVGFiQ29udGVudEFjdGl2aXR5KQotICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBp
ZiAodGhpcy5faW5pdGlhbERlbGF5QmVmb3JlU2FtcGxpbmdUaW1lcklkZW50aWZpZXIpIHsKKyAg
ICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLl9pbml0aWFsRGVsYXlCZWZvcmVTYW1wbGluZ1Rp
bWVySWRlbnRpZmllcik7CisgICAgICAgICAgICB0aGlzLl9pbml0aWFsRGVsYXlCZWZvcmVTYW1w
bGluZ1RpbWVySWRlbnRpZmllciA9IHVuZGVmaW5lZDsKKyAgICAgICAgfQogCi0gICAgICAgIGxl
dCBzZWxlY3RlZFRhYkNvbnRlbnRWaWV3ID0gV0kudGFiQnJvd3Nlci5zZWxlY3RlZFRhYkNvbnRl
bnRWaWV3OwotICAgICAgICBjb25zb2xlLmFzc2VydChzZWxlY3RlZFRhYkNvbnRlbnRWaWV3KTsK
LSAgICAgICAgaWYgKCFzZWxlY3RlZFRhYkNvbnRlbnRWaWV3KQotICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB0aGlzLl9pbml0aWFsRGVsYXlCZWZvcmVTYW1wbGluZ1RpbWVySWRlbnRpZmll
ciA9IHNldFRpbWVvdXQodGhpcy5fc2FtcGxlQ3VycmVudFRhYkFjdGl2aXR5LmJpbmQodGhpcyks
IFdJLlRhYkFjdGl2aXR5RGlhZ25vc3RpY0V2ZW50UmVjb3JkZXIuSW5pdGlhbERlbGF5QmVmb3Jl
U2FtcGxpbmdJbnRlcnZhbCk7CisgICAgfQogCi0gICAgICAgIGxldCB0YWJUeXBlID0gc2VsZWN0
ZWRUYWJDb250ZW50Vmlldy50eXBlOwotICAgICAgICBsZXQgaW50ZXJ2YWwgPSBUYWJBY3Rpdml0
eURpYWdub3N0aWNFdmVudFJlY29yZGVyLkFjdGl2aXR5VGltaW5nUmVzb2x1dGlvbjsKLSAgICAg
ICAgdGhpcy5sb2dEaWFnbm9zdGljRXZlbnQodGhpcy5uYW1lLCB7dGFiVHlwZSwgaW50ZXJ2YWx9
KTsKKyAgICBfc3RvcEluaXRpYWxEZWxheUJlZm9yZVNhbXBsaW5nVGltZXIoKQorICAgIHsKKyAg
ICAgICAgaWYgKHRoaXMuX2luaXRpYWxEZWxheUJlZm9yZVNhbXBsaW5nVGltZXJJZGVudGlmaWVy
KSB7CisgICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5faW5pdGlhbERlbGF5QmVmb3JlU2Ft
cGxpbmdUaW1lcklkZW50aWZpZXIpOworICAgICAgICAgICAgdGhpcy5faW5pdGlhbERlbGF5QmVm
b3JlU2FtcGxpbmdUaW1lcklkZW50aWZpZXIgPSB1bmRlZmluZWQ7CisgICAgICAgIH0KKyAgICB9
CiAKLSAgICAgICAgdGhpcy5fYmVnaW5UYWJBY3Rpdml0eVRpbWVvdXQoKTsKKyAgICBfc3RhcnRF
dmVudFNhbXBsaW5nVGltZXIoKQorICAgIHsKKyAgICAgICAgaWYgKHRoaXMuX2V2ZW50U2FtcGxp
bmdUaW1lcklkZW50aWZpZXIpIHsKKyAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLl9ldmVu
dFNhbXBsaW5nVGltZXJJZGVudGlmaWVyKTsKKyAgICAgICAgICAgIHRoaXMuX2V2ZW50U2FtcGxp
bmdUaW1lcklkZW50aWZpZXIgPSB1bmRlZmluZWQ7CisgICAgICAgIH0KKworICAgICAgICB0aGlz
Ll9ldmVudFNhbXBsaW5nVGltZXJJZGVudGlmaWVyID0gc2V0VGltZW91dCh0aGlzLl9zYW1wbGVD
dXJyZW50VGFiQWN0aXZpdHkuYmluZCh0aGlzKSwgV0kuVGFiQWN0aXZpdHlEaWFnbm9zdGljRXZl
bnRSZWNvcmRlci5FdmVudFNhbXBsaW5nSW50ZXJ2YWwpOwogICAgIH0KIAotICAgIF9jbGVhclRh
YkFjdGl2aXR5VGltZW91dCgpCisgICAgX3N0b3BFdmVudFNhbXBsaW5nVGltZXIoKQogICAgIHsK
LSAgICAgICAgaWYgKHRoaXMuX3RhYkFjdGl2aXR5VGltZW91dElkZW50aWZpZXIpIHsKLSAgICAg
ICAgICAgIGNsZWFyVGltZW91dCh0aGlzLl90YWJBY3Rpdml0eVRpbWVvdXRJZGVudGlmaWVyKTsK
LSAgICAgICAgICAgIHRoaXMuX3RhYkFjdGl2aXR5VGltZW91dElkZW50aWZpZXIgPSAwOworICAg
ICAgICBpZiAodGhpcy5fZXZlbnRTYW1wbGluZ1RpbWVySWRlbnRpZmllcikgeworICAgICAgICAg
ICAgY2xlYXJUaW1lb3V0KHRoaXMuX2V2ZW50U2FtcGxpbmdUaW1lcklkZW50aWZpZXIpOworICAg
ICAgICAgICAgdGhpcy5fZXZlbnRTYW1wbGluZ1RpbWVySWRlbnRpZmllciA9IHVuZGVmaW5lZDsK
ICAgICAgICAgfQogICAgIH0KIAotICAgIF9iZWdpblRhYkFjdGl2aXR5VGltZW91dCgpCisgICAg
X3NhbXBsZUN1cnJlbnRUYWJBY3Rpdml0eSgpCiAgICAgewotICAgICAgICB0aGlzLl9zdG9wVHJh
Y2tpbmdUYWJBY3Rpdml0eSgpOworICAgICAgICAvLyBTZXQgdXAgdGhlIG5leHQgdGltZXIgZmly
c3Qgc28gbGF0ZXIgY29kZSBjYW4gYmFpbCBvdXQgaWYgdGhlcmUncyBub3RoaW5nIHRvIGRvLgor
ICAgICAgICB0aGlzLl9zdG9wRXZlbnRTYW1wbGluZ1RpbWVyKCk7CisgICAgICAgIHRoaXMuX3N0
b3BJbml0aWFsRGVsYXlCZWZvcmVTYW1wbGluZ1RpbWVyKCk7CisgICAgICAgIHRoaXMuX3N0YXJ0
RXZlbnRTYW1wbGluZ1RpbWVyKCk7CisKKyAgICAgICAgbGV0IGludGVydmFsU2luY2VMYXN0VXNl
ckludGVyYWN0aW9uID0gRGF0ZS5ub3coKSAtIHRoaXMuX2xhc3RVc2VySW50ZXJhY3Rpb25UaW1l
c3RhbXA7CisgICAgICAgIGlmIChpbnRlcnZhbFNpbmNlTGFzdFVzZXJJbnRlcmFjdGlvbiA+IFdJ
LlRhYkFjdGl2aXR5RGlhZ25vc3RpY0V2ZW50UmVjb3JkZXIuRXZlbnRTYW1wbGluZ0ludGVydmFs
KSB7CisgICAgICAgICAgICBpZiAoV0kuc2V0dGluZ3MuZGVidWdBdXRvTG9nRGlhZ25vc3RpY0V2
ZW50cy52YWx1ZVJlc3BlY3RpbmdEZWJ1Z1VJQXZhaWxhYmlsaXR5KQorICAgICAgICAgICAgICAg
IGNvbnNvbGUubG9nKCJUYWJBY3Rpdml0eTogc2FtcGxlIG5vdCByZXBvcnRlZCwgbGFzdCB1c2Vy
IGludGVyYWN0aW9uIHdhcyAlLjFmIHNlY29uZHMgYWdvLiIuZm9ybWF0KGludGVydmFsU2luY2VM
YXN0VXNlckludGVyYWN0aW9uIC8gMTAwMCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisKKyAgICAgICAgbGV0IHNlbGVjdGVkVGFiQ29udGVudFZpZXcgPSBXSS50YWJCcm93c2Vy
LnNlbGVjdGVkVGFiQ29udGVudFZpZXc7CisgICAgICAgIGNvbnNvbGUuYXNzZXJ0KHNlbGVjdGVk
VGFiQ29udGVudFZpZXcpOworICAgICAgICBpZiAoIXNlbGVjdGVkVGFiQ29udGVudFZpZXcpCisg
ICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgdGhpcy5fdGFiQWN0aXZpdHlUaW1lb3V0SWRl
bnRpZmllciA9IHNldFRpbWVvdXQoKCkgPT4gewotICAgICAgICAgICAgdGhpcy5fc2hvdWxkTG9n
VGFiQ29udGVudEFjdGl2aXR5ID0gdHJ1ZTsKLSAgICAgICAgICAgIHRoaXMuX3RhYkFjdGl2aXR5
VGltZW91dElkZW50aWZpZXIgPSAwOwotICAgICAgICB9LCBUYWJBY3Rpdml0eURpYWdub3N0aWNF
dmVudFJlY29yZGVyLkFjdGl2aXR5VGltaW5nUmVzb2x1dGlvbik7CisgICAgICAgIGxldCB0YWJU
eXBlID0gc2VsZWN0ZWRUYWJDb250ZW50Vmlldy50eXBlOworICAgICAgICBsZXQgaW50ZXJ2YWwg
PSBUYWJBY3Rpdml0eURpYWdub3N0aWNFdmVudFJlY29yZGVyLkV2ZW50U2FtcGxpbmdJbnRlcnZh
bCAvIDEwMDA7CisgICAgICAgIHRoaXMubG9nRGlhZ25vc3RpY0V2ZW50KHRoaXMubmFtZSwge3Rh
YlR5cGUsIGludGVydmFsfSk7CiAgICAgfQogCi0gICAgX3N0b3BUcmFja2luZ1RhYkFjdGl2aXR5
KCkKKyAgICBfZGlkT2JzZXJ2ZVVzZXJJbnRlcmFjdGlvbigpCiAgICAgewotICAgICAgICB0aGlz
Ll9jbGVhclRhYkFjdGl2aXR5VGltZW91dCgpOwotICAgICAgICB0aGlzLl9zaG91bGRMb2dUYWJD
b250ZW50QWN0aXZpdHkgPSBmYWxzZTsKKyAgICAgICAgaWYgKCF0aGlzLl9pbnNwZWN0b3JIYXNG
b2N1cykKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICB0aGlzLl9sYXN0VXNlckludGVy
YWN0aW9uVGltZXN0YW1wID0gRGF0ZS5ub3coKTsKICAgICB9CiAKICAgICBfaGFuZGxlV2luZG93
Rm9jdXMoZXZlbnQpCkBAIC0xMzMsNyArMTYxLDcgQEAgV0kuVGFiQWN0aXZpdHlEaWFnbm9zdGlj
RXZlbnRSZWNvcmRlciA9IGNsYXNzIFRhYkFjdGl2aXR5RGlhZ25vc3RpY0V2ZW50UmVjb3JkZXIK
ICAgICAgICAgaWYgKGV2ZW50LnRhcmdldCAhPT0gd2luZG93KQogICAgICAgICAgICAgcmV0dXJu
OwogCi0gICAgICAgIHRoaXMuX3Nob3VsZExvZ1RhYkNvbnRlbnRBY3Rpdml0eSA9IHRydWU7Cisg
ICAgICAgIHRoaXMuX2luc3BlY3Rvckhhc0ZvY3VzID0gdHJ1ZTsKICAgICB9CiAKICAgICBfaGFu
ZGxlV2luZG93Qmx1cihldmVudCkKQEAgLTE0MSwyNCArMTY5LDE5IEBAIFdJLlRhYkFjdGl2aXR5
RGlhZ25vc3RpY0V2ZW50UmVjb3JkZXIgPSBjbGFzcyBUYWJBY3Rpdml0eURpYWdub3N0aWNFdmVu
dFJlY29yZGVyCiAgICAgICAgIGlmIChldmVudC50YXJnZXQgIT09IHdpbmRvdykKICAgICAgICAg
ICAgIHJldHVybjsKIAotICAgICAgICB0aGlzLl9zdG9wVHJhY2tpbmdUYWJBY3Rpdml0eSgpOwor
ICAgICAgICB0aGlzLl9pbnNwZWN0b3JIYXNGb2N1cyA9IGZhbHNlOwogICAgIH0KIAogICAgIF9o
YW5kbGVXaW5kb3dLZXlEb3duKGV2ZW50KQogICAgIHsKLSAgICAgICAgdGhpcy5fZGlkSW50ZXJh
Y3RXaXRoVGFiQ29udGVudCgpOworICAgICAgICB0aGlzLl9kaWRPYnNlcnZlVXNlckludGVyYWN0
aW9uKCk7CiAgICAgfQogCiAgICAgX2hhbmRsZVdpbmRvd01vdXNlRG93bihldmVudCkKICAgICB7
Ci0gICAgICAgIHRoaXMuX2RpZEludGVyYWN0V2l0aFRhYkNvbnRlbnQoKTsKLSAgICB9Ci0KLSAg
ICBfaGFuZGxlVGFiQnJvd3NlclNlbGVjdGVkVGFiQ29udGVudFZpZXdEaWRDaGFuZ2UoZXZlbnQp
Ci0gICAgewotICAgICAgICB0aGlzLl9jbGVhclRhYkFjdGl2aXR5VGltZW91dCgpOwotICAgICAg
ICB0aGlzLl9zaG91bGRMb2dUYWJDb250ZW50QWN0aXZpdHkgPSB0cnVlOworICAgICAgICB0aGlz
Ll9kaWRPYnNlcnZlVXNlckludGVyYWN0aW9uKCk7CiAgICAgfQogfTsKIAotV0kuVGFiQWN0aXZp
dHlEaWFnbm9zdGljRXZlbnRSZWNvcmRlci5BY3Rpdml0eVRpbWluZ1Jlc29sdXRpb24gPSA2MCAq
IDEwMDA7CitXSS5UYWJBY3Rpdml0eURpYWdub3N0aWNFdmVudFJlY29yZGVyLkV2ZW50U2FtcGxp
bmdJbnRlcnZhbCA9IDYwICogMTAwMDsKK1dJLlRhYkFjdGl2aXR5RGlhZ25vc3RpY0V2ZW50UmVj
b3JkZXIuSW5pdGlhbERlbGF5QmVmb3JlU2FtcGxpbmdJbnRlcnZhbCA9IDEwICogMTAwMDsKXCBO
byBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>384473</attachid>
            <date>2019-11-28 13:58:44 -0800</date>
            <delta_ts>2019-12-02 17:12:23 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-204531-20191128135844.patch</filename>
            <type>text/plain</type>
            <size>12268</size>
            <attacher name="Blaze Burg">bburg</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUyODY3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVj
dG9yVUkvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkluc3BlY3RvclVJL0NoYW5nZUxvZwppbmRleCA4
ZGQ4YjEwN2MwYzhhYWVjYTA3MmQ1ZDVjMDMzNjk4OTNkNjk4MmViLi41ODhmYjIyOTM5MDUwNWFi
MzA3YjQ5Mjc0ZTUwNTYwNjEyNTQ1N2MyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9y
VUkvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0NyBAQAorMjAxOS0xMS0yNSAgQnJpYW4gQnVyZyAgPGJidXJnQGFwcGxlLmNvbT4KKwor
ICAgICAgICBXZWIgSW5zcGVjdG9yOiBUYWJBY3Rpdml0eSBkaWFnbm9zdGljIGV2ZW50IHNob3Vs
ZCBzYW1wbGUgdGhlIGFjdGl2ZSB0YWIgdW5pZm9ybWx5CisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDQ1MzEKKworICAgICAgICBSZXZpZXdlZCBieSBE
ZXZpbiBSb3Vzc28uCisKKyAgICAgICAgUmV3cml0ZSB0aGlzIGNsYXNzIHRvIHVzZSBhIHVuaWZv
cm0gc2FtcGxpbmcgYXBwcm9hY2guIEV2ZXJ5IG4gc2Vjb25kcywgYSB0aW1lciBmaXJlcyBhbmQK
KyAgICAgICAgc2FtcGxlcyB3aGF0IHRoZSBjdXJyZW50IHRhYiBpcy4gSWYgdGhlIGxhc3QgdXNl
ciBpbnRlcmFjdGlvbiBoYXBwZW5lZCB1cCB0byBuIHNlY29uZHMgYWdvLAorICAgICAgICByZXBv
cnQgYSBUYWJBY3Rpdml0eSBkaWFnbm9zdGljIGV2ZW50LiBLZWVwaW5nIHdpdGggdGhlIHByZXZp
b3VzIGltcGxlbWVudGF0aW9uLCBzYW1wbGVzCisgICAgICAgIGFyZSB0YWtlbiBldmVyeSBuPTYw
IHNlY29uZHMuCisKKyAgICAgICAgVG8gYWNjb3VudCBmb3IgYmlhcyBpbiB0aGUgaW5pdGlhbCBz
YW1wbGUgd2hlbiBXZWIgSW5zcGVjdG9yIGlzIG9wZW4sIHdhaXQgbSBzZWNvbmRzIGZvcgorICAg
ICAgICB0aGUgZmlyc3Qgc2FtcGxlLiBUaGlzIGFjY291bnRzIGZvciB0aGUgdGltZSBiZXR3ZWVu
IG9wZW5pbmcgV2ViIEluc3BlY3RvciBhbmQgY2hvb3NpbmcgdGhlCisgICAgICAgIGRlc2lyZWQg
dGFiLiBJbiBteSB0ZXN0aW5nLCBtPTEwIGlzIGVub3VnaCB0aW1lIHRvIGxvYWQgV2ViIEluc3Bl
Y3RvciBhbmQgc3dpdGNoCisgICAgICAgIGltbWVkaWF0ZWx5IHRvIGEgZGlmZmVyZW50IHRhYi4g
SW4gdGhhdCBjYXNlLCB0aGUgaW5pdGlhbCB0YWIgd291bGQgbm90IGJlIHNhbXBsZWQgYXMgdGhl
CisgICAgICAgIGFjdGl2ZSB0YWIgZXZlbiBpZiB0aGUgbGFzdCB1c2VyIGludGVyYWN0aW9uIChj
bGlja2luZyB0YWIgYmFyKSBoYXBwZW5lZCB3aGlsZSB0aGUgaW5pdGlhbAorICAgICAgICB0YWIg
d2FzIGRpc3BsYXllZC4gSWYgdGhlIHJlY29yZGVyJ3Mgc2V0dXAoKSBtZXRob2QgaXMgY2FsbGVk
IHNvbWUgdGltZSBhZnRlciBXZWIgSW5zcGVjdG9yIGlzCisgICAgICAgIG9wZW5lZCwgdGhlbiB0
aGUgaW5pdGlhbCBkZWxheSB3aWxsIHNocmluayB0byBlbnN1cmUgYXQgbGVhc3QgMTBzIGhhcyBl
bGFwc2VkIHNpbmNlIHRoZSBmcm9udGVuZAorICAgICAgICBmaW5pc2hlZCBsb2FkaW5nLgorCisg
ICAgICAgICogVXNlckludGVyZmFjZS9CYXNlL01haW4uanM6CisgICAgICAgIChXSS5jb250ZW50
TG9hZGVkKTogS2VlcCBhIHRpbWVzdGFtcCBvZiB3aGVuIHRoZSBmcm9udGVuZCBmaW5pc2hlZCBs
b2FkaW5nLgorCisgICAgICAgICogVXNlckludGVyZmFjZS9Db250cm9sbGVycy9UYWJBY3Rpdml0
eURpYWdub3N0aWNFdmVudFJlY29yZGVyLmpzOgorICAgICAgICAoV0kuVGFiQWN0aXZpdHlEaWFn
bm9zdGljRXZlbnRSZWNvcmRlcik6CisgICAgICAgIChXSS5UYWJBY3Rpdml0eURpYWdub3N0aWNF
dmVudFJlY29yZGVyLnByb3RvdHlwZS5zZXR1cCk6CisgICAgICAgIChXSS5UYWJBY3Rpdml0eURp
YWdub3N0aWNFdmVudFJlY29yZGVyLnByb3RvdHlwZS50ZWFyZG93bik6CisgICAgICAgIChXSS5U
YWJBY3Rpdml0eURpYWdub3N0aWNFdmVudFJlY29yZGVyLnByb3RvdHlwZS5fc3RhcnRJbml0aWFs
RGVsYXlCZWZvcmVTYW1wbGluZ1RpbWVyKToKKyAgICAgICAgKFdJLlRhYkFjdGl2aXR5RGlhZ25v
c3RpY0V2ZW50UmVjb3JkZXIucHJvdG90eXBlLl9zdG9wSW5pdGlhbERlbGF5QmVmb3JlU2FtcGxp
bmdUaW1lcik6CisgICAgICAgIChXSS5UYWJBY3Rpdml0eURpYWdub3N0aWNFdmVudFJlY29yZGVy
LnByb3RvdHlwZS5fc3RhcnRFdmVudFNhbXBsaW5nVGltZXIpOgorICAgICAgICAoV0kuVGFiQWN0
aXZpdHlEaWFnbm9zdGljRXZlbnRSZWNvcmRlci5wcm90b3R5cGUuX3N0b3BFdmVudFNhbXBsaW5n
VGltZXIpOgorICAgICAgICAoV0kuVGFiQWN0aXZpdHlEaWFnbm9zdGljRXZlbnRSZWNvcmRlci5w
cm90b3R5cGUuX3NhbXBsZUN1cnJlbnRUYWJBY3Rpdml0eSk6CisgICAgICAgIChXSS5UYWJBY3Rp
dml0eURpYWdub3N0aWNFdmVudFJlY29yZGVyLnByb3RvdHlwZS5fZGlkT2JzZXJ2ZVVzZXJJbnRl
cmFjdGlvbik6CisgICAgICAgIChXSS5UYWJBY3Rpdml0eURpYWdub3N0aWNFdmVudFJlY29yZGVy
LnByb3RvdHlwZS5faGFuZGxlV2luZG93Rm9jdXMpOgorICAgICAgICAoV0kuVGFiQWN0aXZpdHlE
aWFnbm9zdGljRXZlbnRSZWNvcmRlci5wcm90b3R5cGUuX2hhbmRsZVdpbmRvd0JsdXIpOgorICAg
ICAgICAoV0kuVGFiQWN0aXZpdHlEaWFnbm9zdGljRXZlbnRSZWNvcmRlci5wcm90b3R5cGUuX2hh
bmRsZVdpbmRvd0tleURvd24pOgorICAgICAgICAoV0kuVGFiQWN0aXZpdHlEaWFnbm9zdGljRXZl
bnRSZWNvcmRlci5wcm90b3R5cGUuX2hhbmRsZVdpbmRvd01vdXNlRG93bik6CisgICAgICAgIChX
SS5UYWJBY3Rpdml0eURpYWdub3N0aWNFdmVudFJlY29yZGVyLnByb3RvdHlwZS5fZGlkSW50ZXJh
Y3RXaXRoVGFiQ29udGVudCk6IERlbGV0ZWQuCisgICAgICAgIChXSS5UYWJBY3Rpdml0eURpYWdu
b3N0aWNFdmVudFJlY29yZGVyLnByb3RvdHlwZS5fY2xlYXJUYWJBY3Rpdml0eVRpbWVvdXQpOiBE
ZWxldGVkLgorICAgICAgICAoV0kuVGFiQWN0aXZpdHlEaWFnbm9zdGljRXZlbnRSZWNvcmRlci5w
cm90b3R5cGUuX2JlZ2luVGFiQWN0aXZpdHlUaW1lb3V0KTogRGVsZXRlZC4KKyAgICAgICAgKFdJ
LlRhYkFjdGl2aXR5RGlhZ25vc3RpY0V2ZW50UmVjb3JkZXIucHJvdG90eXBlLl9zdG9wVHJhY2tp
bmdUYWJBY3Rpdml0eSk6IERlbGV0ZWQuCisgICAgICAgIChXSS5UYWJBY3Rpdml0eURpYWdub3N0
aWNFdmVudFJlY29yZGVyLnByb3RvdHlwZS5faGFuZGxlVGFiQnJvd3NlclNlbGVjdGVkVGFiQ29u
dGVudFZpZXdEaWRDaGFuZ2UpOiBEZWxldGVkLgorCiAyMDE5LTExLTIyICBEZXZpbiBSb3Vzc28g
IDxkcm91c3NvQGFwcGxlLmNvbT4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBVbmNhdWdodCBF
eGNlcHRpb246IFR5cGVFcnJvcjogdW5kZWZpbmVkIGlzIG5vdCBhbiBvYmplY3QgKGV2YWx1YXRp
bmcgJ3RhcmdldC5QYWdlQWdlbnQuZ2V0Q29tcG9zaXRpbmdCb3JkZXJzVmlzaWJsZScpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9CYXNlL01haW4uanMg
Yi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9CYXNlL01haW4uanMKaW5kZXgg
MzcxMWIyYWViMzBlNjdiNjAyMDcwN2ZkNjlmODJkMGU5NGIwNWU2ZS4uMmQzMTQwMTM0NzIyNGI2
ZDkzMDg4YzczOGVlNzk3YzI2NTQ1ZTk5ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3Rv
clVJL1VzZXJJbnRlcmZhY2UvQmFzZS9NYWluLmpzCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JV
SS9Vc2VySW50ZXJmYWNlL0Jhc2UvTWFpbi5qcwpAQCAtNTQ1LDYgKzU0NSw4IEBAIFdJLmNvbnRl
bnRMb2FkZWQgPSBmdW5jdGlvbigpCiAgICAgLy8gU3RvcmUgV0kgb24gdGhlIHdpbmRvdyBpbiBj
YXNlIHRoZSBXZWJJbnNwZWN0b3IgZ2xvYmFsIGdldHMgY29ycnVwdGVkLgogICAgIHdpbmRvdy5f
X2Zyb250ZW5kQ29tcGxldGVkTG9hZCA9IHRydWU7CiAKKyAgICBXSS5mcm9udGVuZENvbXBsZXRl
ZExvYWRUaW1lc3RhbXAgPSBwZXJmb3JtYW5jZS5ub3coKTsKKwogICAgIGlmIChXSS5ydW5Cb290
c3RyYXBPcGVyYXRpb25zKQogICAgICAgICBXSS5ydW5Cb290c3RyYXBPcGVyYXRpb25zKCk7CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xs
ZXJzL1RhYkFjdGl2aXR5RGlhZ25vc3RpY0V2ZW50UmVjb3JkZXIuanMgYi9Tb3VyY2UvV2ViSW5z
cGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250cm9sbGVycy9UYWJBY3Rpdml0eURpYWdub3N0aWNF
dmVudFJlY29yZGVyLmpzCmluZGV4IGI4ZWU5NDU2N2M0MmY1Nzg3NmNkZDNhYjU5ODkwMTNlMTM2
ZThlMTkuLjRlY2RhYzI4MjIyODhjZWEzZGM2ZDZkNjVjMjJiNTU0YmMwOWU3MTYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL1RhYkFj
dGl2aXR5RGlhZ25vc3RpY0V2ZW50UmVjb3JkZXIuanMKKysrIGIvU291cmNlL1dlYkluc3BlY3Rv
clVJL1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvVGFiQWN0aXZpdHlEaWFnbm9zdGljRXZlbnRS
ZWNvcmRlci5qcwpAQCAtMjksMTYgKzI5LDE3IEBAIFdJLlRhYkFjdGl2aXR5RGlhZ25vc3RpY0V2
ZW50UmVjb3JkZXIgPSBjbGFzcyBUYWJBY3Rpdml0eURpYWdub3N0aWNFdmVudFJlY29yZGVyCiAg
ICAgewogICAgICAgICBzdXBlcigiVGFiQWN0aXZpdHkiLCBjb250cm9sbGVyKTsKIAotICAgICAg
ICB0aGlzLl9zaG91bGRMb2dUYWJDb250ZW50QWN0aXZpdHkgPSBmYWxzZTsKLSAgICAgICAgdGhp
cy5fdGFiQWN0aXZpdHlUaW1lb3V0SWRlbnRpZmllciA9IDA7CisgICAgICAgIHRoaXMuX2luc3Bl
Y3Rvckhhc0ZvY3VzID0gdHJ1ZTsKKyAgICAgICAgdGhpcy5fbGFzdFVzZXJJbnRlcmFjdGlvblRp
bWVzdGFtcCA9IHVuZGVmaW5lZDsKKworICAgICAgICB0aGlzLl9ldmVudFNhbXBsaW5nVGltZXJJ
ZGVudGlmaWVyID0gdW5kZWZpbmVkOworICAgICAgICB0aGlzLl9pbml0aWFsRGVsYXlCZWZvcmVT
YW1wbGluZ1RpbWVySWRlbnRpZmllciA9IHVuZGVmaW5lZDsKICAgICB9CiAKICAgICAvLyBQcm90
ZWN0ZWQKIAogICAgIHNldHVwKCkKICAgICB7Ci0gICAgICAgIFdJLlRhYkJyb3dzZXIuYWRkRXZl
bnRMaXN0ZW5lcihXSS5UYWJCcm93c2VyLkV2ZW50LlNlbGVjdGVkVGFiQ29udGVudFZpZXdEaWRD
aGFuZ2UsIHRoaXMuX2hhbmRsZVRhYkJyb3dzZXJTZWxlY3RlZFRhYkNvbnRlbnRWaWV3RGlkQ2hh
bmdlLCB0aGlzKTsKLQogICAgICAgICBjb25zdCBvcHRpb25zID0gewogICAgICAgICAgICAgY2Fw
dHVyZTogdHJ1ZSwKICAgICAgICAgfTsKQEAgLTQ3LDEzICs0OCwxNiBAQCBXSS5UYWJBY3Rpdml0
eURpYWdub3N0aWNFdmVudFJlY29yZGVyID0gY2xhc3MgVGFiQWN0aXZpdHlEaWFnbm9zdGljRXZl
bnRSZWNvcmRlcgogICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsIHRo
aXMsIG9wdGlvbnMpOwogICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3du
IiwgdGhpcywgb3B0aW9ucyk7CiAKLSAgICAgICAgdGhpcy5fc2hvdWxkTG9nVGFiQ29udGVudEFj
dGl2aXR5ID0gdHJ1ZTsKKyAgICAgICAgLy8gSWYgaXQncyBiZWVuIGxlc3MgdGhhbiAxMCBzZWNv
bmRzIHNpbmNlIHRoZSBmcm9udGVuZCBsb2FkZWQsIHdhaXQgYSBiaXQuCisgICAgICAgIGlmIChw
ZXJmb3JtYW5jZS5ub3coKSAtIFdJLmZyb250ZW5kQ29tcGxldGVkTG9hZFRpbWVzdGFtcCA8IFRh
YkFjdGl2aXR5RGlhZ25vc3RpY0V2ZW50UmVjb3JkZXIuSW5pdGlhbERlbGF5QmVmb3JlU2FtcGxp
bmdJbnRlcnZhbCkKKyAgICAgICAgICAgIHRoaXMuX3N0YXJ0SW5pdGlhbERlbGF5QmVmb3JlU2Ft
cGxpbmdUaW1lcigpOworICAgICAgICBlbHNlCisgICAgICAgICAgICB0aGlzLl9zdGFydEV2ZW50
U2FtcGxpbmdUaW1lcigpOworCiAgICAgfQogCiAgICAgdGVhcmRvd24oKQogICAgIHsKLSAgICAg
ICAgV0kuVGFiQnJvd3Nlci5yZW1vdmVFdmVudExpc3RlbmVyKFdJLlRhYkJyb3dzZXIuRXZlbnQu
U2VsZWN0ZWRUYWJDb250ZW50Vmlld0RpZENoYW5nZSwgdGhpcy5faGFuZGxlVGFiQnJvd3NlclNl
bGVjdGVkVGFiQ29udGVudFZpZXdEaWRDaGFuZ2UsIHRoaXMpOwotCiAgICAgICAgIGNvbnN0IG9w
dGlvbnMgPSB7CiAgICAgICAgICAgICBjYXB0dXJlOiB0cnVlLAogICAgICAgICB9OwpAQCAtNjIs
NyArNjYsOSBAQCBXSS5UYWJBY3Rpdml0eURpYWdub3N0aWNFdmVudFJlY29yZGVyID0gY2xhc3Mg
VGFiQWN0aXZpdHlEaWFnbm9zdGljRXZlbnRSZWNvcmRlcgogICAgICAgICB3aW5kb3cucmVtb3Zl
RXZlbnRMaXN0ZW5lcigia2V5ZG93biIsIHRoaXMsIG9wdGlvbnMpOwogICAgICAgICB3aW5kb3cu
cmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIiwgdGhpcywgb3B0aW9ucyk7CiAKLSAgICAg
ICAgdGhpcy5fc3RvcFRyYWNraW5nVGFiQWN0aXZpdHkoKTsKKyAgICAgICAgdGhpcy5fc3RvcElu
aXRpYWxEZWxheUJlZm9yZVNhbXBsaW5nVGltZXIoKTsKKyAgICAgICAgdGhpcy5fc3RvcEV2ZW50
U2FtcGxpbmdUaW1lcigpOworCiAgICAgfQogCiAgICAgLy8gUHVibGljCkBAIC04Nyw0NSArOTMs
NzYgQEAgV0kuVGFiQWN0aXZpdHlEaWFnbm9zdGljRXZlbnRSZWNvcmRlciA9IGNsYXNzIFRhYkFj
dGl2aXR5RGlhZ25vc3RpY0V2ZW50UmVjb3JkZXIKIAogICAgIC8vIFByaXZhdGUKIAotICAgIF9k
aWRJbnRlcmFjdFdpdGhUYWJDb250ZW50KCkKKyAgICBfc3RhcnRJbml0aWFsRGVsYXlCZWZvcmVT
YW1wbGluZ1RpbWVyKCkKICAgICB7Ci0gICAgICAgIGlmICghdGhpcy5fc2hvdWxkTG9nVGFiQ29u
dGVudEFjdGl2aXR5KQotICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBpZiAodGhpcy5faW5p
dGlhbERlbGF5QmVmb3JlU2FtcGxpbmdUaW1lcklkZW50aWZpZXIpIHsKKyAgICAgICAgICAgIGNs
ZWFyVGltZW91dCh0aGlzLl9pbml0aWFsRGVsYXlCZWZvcmVTYW1wbGluZ1RpbWVySWRlbnRpZmll
cik7CisgICAgICAgICAgICB0aGlzLl9pbml0aWFsRGVsYXlCZWZvcmVTYW1wbGluZ1RpbWVySWRl
bnRpZmllciA9IHVuZGVmaW5lZDsKKyAgICAgICAgfQogCi0gICAgICAgIGxldCBzZWxlY3RlZFRh
YkNvbnRlbnRWaWV3ID0gV0kudGFiQnJvd3Nlci5zZWxlY3RlZFRhYkNvbnRlbnRWaWV3OwotICAg
ICAgICBjb25zb2xlLmFzc2VydChzZWxlY3RlZFRhYkNvbnRlbnRWaWV3KTsKLSAgICAgICAgaWYg
KCFzZWxlY3RlZFRhYkNvbnRlbnRWaWV3KQotICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBs
ZXQgbWF4aW11bUluaXRpYWxEZWxheSA9IFRhYkFjdGl2aXR5RGlhZ25vc3RpY0V2ZW50UmVjb3Jk
ZXIuSW5pdGlhbERlbGF5QmVmb3JlU2FtcGxpbmdJbnRlcnZhbDsKKyAgICAgICAgbGV0IGVsYXBz
ZWRUaW1lID0gcGVyZm9ybWFuY2Uubm93KCkgLSBXSS5mcm9udGVuZENvbXBsZXRlZExvYWRUaW1l
c3RhbXA7CisgICAgICAgIGxldCByZW1haW5pbmdUaW1lID0gbWF4aW11bUluaXRpYWxEZWxheSAt
IGVsYXBzZWRUaW1lOworICAgICAgICBsZXQgaW5pdGlhbERlbGF5ID0gcmVtYWluaW5nVGltZSA+
IDAgPyByZW1haW5pbmdUaW1lIDogbWF4aW11bUluaXRpYWxEZWxheTsKKyAgICAgICAgdGhpcy5f
aW5pdGlhbERlbGF5QmVmb3JlU2FtcGxpbmdUaW1lcklkZW50aWZpZXIgPSBzZXRUaW1lb3V0KHRo
aXMuX3NhbXBsZUN1cnJlbnRUYWJBY3Rpdml0eS5iaW5kKHRoaXMpLCBpbml0aWFsRGVsYXkpOwor
ICAgIH0KIAotICAgICAgICBsZXQgdGFiVHlwZSA9IHNlbGVjdGVkVGFiQ29udGVudFZpZXcudHlw
ZTsKLSAgICAgICAgbGV0IGludGVydmFsID0gVGFiQWN0aXZpdHlEaWFnbm9zdGljRXZlbnRSZWNv
cmRlci5BY3Rpdml0eVRpbWluZ1Jlc29sdXRpb247Ci0gICAgICAgIHRoaXMubG9nRGlhZ25vc3Rp
Y0V2ZW50KHRoaXMubmFtZSwge3RhYlR5cGUsIGludGVydmFsfSk7CisgICAgX3N0b3BJbml0aWFs
RGVsYXlCZWZvcmVTYW1wbGluZ1RpbWVyKCkKKyAgICB7CisgICAgICAgIGlmICh0aGlzLl9pbml0
aWFsRGVsYXlCZWZvcmVTYW1wbGluZ1RpbWVySWRlbnRpZmllcikgeworICAgICAgICAgICAgY2xl
YXJUaW1lb3V0KHRoaXMuX2luaXRpYWxEZWxheUJlZm9yZVNhbXBsaW5nVGltZXJJZGVudGlmaWVy
KTsKKyAgICAgICAgICAgIHRoaXMuX2luaXRpYWxEZWxheUJlZm9yZVNhbXBsaW5nVGltZXJJZGVu
dGlmaWVyID0gdW5kZWZpbmVkOworICAgICAgICB9CisgICAgfQogCi0gICAgICAgIHRoaXMuX2Jl
Z2luVGFiQWN0aXZpdHlUaW1lb3V0KCk7CisgICAgX3N0YXJ0RXZlbnRTYW1wbGluZ1RpbWVyKCkK
KyAgICB7CisgICAgICAgIGlmICh0aGlzLl9ldmVudFNhbXBsaW5nVGltZXJJZGVudGlmaWVyKSB7
CisgICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5fZXZlbnRTYW1wbGluZ1RpbWVySWRlbnRp
Zmllcik7CisgICAgICAgICAgICB0aGlzLl9ldmVudFNhbXBsaW5nVGltZXJJZGVudGlmaWVyID0g
dW5kZWZpbmVkOworICAgICAgICB9CisKKyAgICAgICAgdGhpcy5fZXZlbnRTYW1wbGluZ1RpbWVy
SWRlbnRpZmllciA9IHNldFRpbWVvdXQodGhpcy5fc2FtcGxlQ3VycmVudFRhYkFjdGl2aXR5LmJp
bmQodGhpcyksIFRhYkFjdGl2aXR5RGlhZ25vc3RpY0V2ZW50UmVjb3JkZXIuRXZlbnRTYW1wbGlu
Z0ludGVydmFsKTsKICAgICB9CiAKLSAgICBfY2xlYXJUYWJBY3Rpdml0eVRpbWVvdXQoKQorICAg
IF9zdG9wRXZlbnRTYW1wbGluZ1RpbWVyKCkKICAgICB7Ci0gICAgICAgIGlmICh0aGlzLl90YWJB
Y3Rpdml0eVRpbWVvdXRJZGVudGlmaWVyKSB7Ci0gICAgICAgICAgICBjbGVhclRpbWVvdXQodGhp
cy5fdGFiQWN0aXZpdHlUaW1lb3V0SWRlbnRpZmllcik7Ci0gICAgICAgICAgICB0aGlzLl90YWJB
Y3Rpdml0eVRpbWVvdXRJZGVudGlmaWVyID0gMDsKKyAgICAgICAgaWYgKHRoaXMuX2V2ZW50U2Ft
cGxpbmdUaW1lcklkZW50aWZpZXIpIHsKKyAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLl9l
dmVudFNhbXBsaW5nVGltZXJJZGVudGlmaWVyKTsKKyAgICAgICAgICAgIHRoaXMuX2V2ZW50U2Ft
cGxpbmdUaW1lcklkZW50aWZpZXIgPSB1bmRlZmluZWQ7CiAgICAgICAgIH0KICAgICB9CiAKLSAg
ICBfYmVnaW5UYWJBY3Rpdml0eVRpbWVvdXQoKQorICAgIF9zYW1wbGVDdXJyZW50VGFiQWN0aXZp
dHkoKQogICAgIHsKLSAgICAgICAgdGhpcy5fc3RvcFRyYWNraW5nVGFiQWN0aXZpdHkoKTsKKyAg
ICAgICAgLy8gU2V0IHVwIHRoZSBuZXh0IHRpbWVyIGZpcnN0IHNvIGxhdGVyIGNvZGUgY2FuIGJh
aWwgb3V0IGlmIHRoZXJlJ3Mgbm90aGluZyB0byBkby4KKyAgICAgICAgdGhpcy5fc3RvcEV2ZW50
U2FtcGxpbmdUaW1lcigpOworICAgICAgICB0aGlzLl9zdG9wSW5pdGlhbERlbGF5QmVmb3JlU2Ft
cGxpbmdUaW1lcigpOworICAgICAgICB0aGlzLl9zdGFydEV2ZW50U2FtcGxpbmdUaW1lcigpOwor
CisgICAgICAgIGxldCBpbnRlcnZhbFNpbmNlTGFzdFVzZXJJbnRlcmFjdGlvbiA9IHBlcmZvcm1h
bmNlLm5vdygpIC0gdGhpcy5fbGFzdFVzZXJJbnRlcmFjdGlvblRpbWVzdGFtcDsKKyAgICAgICAg
aWYgKGludGVydmFsU2luY2VMYXN0VXNlckludGVyYWN0aW9uID4gVGFiQWN0aXZpdHlEaWFnbm9z
dGljRXZlbnRSZWNvcmRlci5FdmVudFNhbXBsaW5nSW50ZXJ2YWwpIHsKKyAgICAgICAgICAgIGlm
IChXSS5zZXR0aW5ncy5kZWJ1Z0F1dG9Mb2dEaWFnbm9zdGljRXZlbnRzLnZhbHVlUmVzcGVjdGlu
Z0RlYnVnVUlBdmFpbGFiaWxpdHkpCisgICAgICAgICAgICAgICAgY29uc29sZS5sb2coIlRhYkFj
dGl2aXR5OiBzYW1wbGUgbm90IHJlcG9ydGVkLCBsYXN0IHVzZXIgaW50ZXJhY3Rpb24gd2FzICUu
MWYgc2Vjb25kcyBhZ28uIi5mb3JtYXQoaW50ZXJ2YWxTaW5jZUxhc3RVc2VySW50ZXJhY3Rpb24g
LyAxMDAwKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KIAotICAgICAgICB0aGlz
Ll90YWJBY3Rpdml0eVRpbWVvdXRJZGVudGlmaWVyID0gc2V0VGltZW91dCgoKSA9PiB7Ci0gICAg
ICAgICAgICB0aGlzLl9zaG91bGRMb2dUYWJDb250ZW50QWN0aXZpdHkgPSB0cnVlOwotICAgICAg
ICAgICAgdGhpcy5fdGFiQWN0aXZpdHlUaW1lb3V0SWRlbnRpZmllciA9IDA7Ci0gICAgICAgIH0s
IFRhYkFjdGl2aXR5RGlhZ25vc3RpY0V2ZW50UmVjb3JkZXIuQWN0aXZpdHlUaW1pbmdSZXNvbHV0
aW9uKTsKKyAgICAgICAgbGV0IHNlbGVjdGVkVGFiQ29udGVudFZpZXcgPSBXSS50YWJCcm93c2Vy
LnNlbGVjdGVkVGFiQ29udGVudFZpZXc7CisgICAgICAgIGNvbnNvbGUuYXNzZXJ0KHNlbGVjdGVk
VGFiQ29udGVudFZpZXcpOworICAgICAgICBpZiAoIXNlbGVjdGVkVGFiQ29udGVudFZpZXcpCisg
ICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgbGV0IHRhYlR5cGUgPSBzZWxlY3RlZFRhYkNv
bnRlbnRWaWV3LnR5cGU7CisgICAgICAgIGxldCBpbnRlcnZhbCA9IFRhYkFjdGl2aXR5RGlhZ25v
c3RpY0V2ZW50UmVjb3JkZXIuRXZlbnRTYW1wbGluZ0ludGVydmFsIC8gMTAwMDsKKyAgICAgICAg
dGhpcy5sb2dEaWFnbm9zdGljRXZlbnQodGhpcy5uYW1lLCB7dGFiVHlwZSwgaW50ZXJ2YWx9KTsK
ICAgICB9CiAKLSAgICBfc3RvcFRyYWNraW5nVGFiQWN0aXZpdHkoKQorICAgIF9kaWRPYnNlcnZl
VXNlckludGVyYWN0aW9uKCkKICAgICB7Ci0gICAgICAgIHRoaXMuX2NsZWFyVGFiQWN0aXZpdHlU
aW1lb3V0KCk7Ci0gICAgICAgIHRoaXMuX3Nob3VsZExvZ1RhYkNvbnRlbnRBY3Rpdml0eSA9IGZh
bHNlOworICAgICAgICBpZiAoIXRoaXMuX2luc3BlY3Rvckhhc0ZvY3VzKQorICAgICAgICAgICAg
cmV0dXJuOworCisgICAgICAgIHRoaXMuX2xhc3RVc2VySW50ZXJhY3Rpb25UaW1lc3RhbXAgPSBw
ZXJmb3JtYW5jZS5ub3coKTsKICAgICB9CiAKICAgICBfaGFuZGxlV2luZG93Rm9jdXMoZXZlbnQp
CkBAIC0xMzMsNyArMTcwLDcgQEAgV0kuVGFiQWN0aXZpdHlEaWFnbm9zdGljRXZlbnRSZWNvcmRl
ciA9IGNsYXNzIFRhYkFjdGl2aXR5RGlhZ25vc3RpY0V2ZW50UmVjb3JkZXIKICAgICAgICAgaWYg
KGV2ZW50LnRhcmdldCAhPT0gd2luZG93KQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAg
IHRoaXMuX3Nob3VsZExvZ1RhYkNvbnRlbnRBY3Rpdml0eSA9IHRydWU7CisgICAgICAgIHRoaXMu
X2luc3BlY3Rvckhhc0ZvY3VzID0gdHJ1ZTsKICAgICB9CiAKICAgICBfaGFuZGxlV2luZG93Qmx1
cihldmVudCkKQEAgLTE0MSwyNCArMTc4LDE5IEBAIFdJLlRhYkFjdGl2aXR5RGlhZ25vc3RpY0V2
ZW50UmVjb3JkZXIgPSBjbGFzcyBUYWJBY3Rpdml0eURpYWdub3N0aWNFdmVudFJlY29yZGVyCiAg
ICAgICAgIGlmIChldmVudC50YXJnZXQgIT09IHdpbmRvdykKICAgICAgICAgICAgIHJldHVybjsK
IAotICAgICAgICB0aGlzLl9zdG9wVHJhY2tpbmdUYWJBY3Rpdml0eSgpOworICAgICAgICB0aGlz
Ll9pbnNwZWN0b3JIYXNGb2N1cyA9IGZhbHNlOwogICAgIH0KIAogICAgIF9oYW5kbGVXaW5kb3dL
ZXlEb3duKGV2ZW50KQogICAgIHsKLSAgICAgICAgdGhpcy5fZGlkSW50ZXJhY3RXaXRoVGFiQ29u
dGVudCgpOworICAgICAgICB0aGlzLl9kaWRPYnNlcnZlVXNlckludGVyYWN0aW9uKCk7CiAgICAg
fQogCiAgICAgX2hhbmRsZVdpbmRvd01vdXNlRG93bihldmVudCkKICAgICB7Ci0gICAgICAgIHRo
aXMuX2RpZEludGVyYWN0V2l0aFRhYkNvbnRlbnQoKTsKLSAgICB9Ci0KLSAgICBfaGFuZGxlVGFi
QnJvd3NlclNlbGVjdGVkVGFiQ29udGVudFZpZXdEaWRDaGFuZ2UoZXZlbnQpCi0gICAgewotICAg
ICAgICB0aGlzLl9jbGVhclRhYkFjdGl2aXR5VGltZW91dCgpOwotICAgICAgICB0aGlzLl9zaG91
bGRMb2dUYWJDb250ZW50QWN0aXZpdHkgPSB0cnVlOworICAgICAgICB0aGlzLl9kaWRPYnNlcnZl
VXNlckludGVyYWN0aW9uKCk7CiAgICAgfQogfTsKIAotV0kuVGFiQWN0aXZpdHlEaWFnbm9zdGlj
RXZlbnRSZWNvcmRlci5BY3Rpdml0eVRpbWluZ1Jlc29sdXRpb24gPSA2MCAqIDEwMDA7CitXSS5U
YWJBY3Rpdml0eURpYWdub3N0aWNFdmVudFJlY29yZGVyLkV2ZW50U2FtcGxpbmdJbnRlcnZhbCA9
IDYwICogMTAwMDsKK1dJLlRhYkFjdGl2aXR5RGlhZ25vc3RpY0V2ZW50UmVjb3JkZXIuSW5pdGlh
bERlbGF5QmVmb3JlU2FtcGxpbmdJbnRlcnZhbCA9IDEwICogMTAwMDsKXCBObyBuZXdsaW5lIGF0
IGVuZCBvZiBmaWxlCg==
</data>
<flag name="review"
          id="400272"
          type_id="1"
          status="+"
          setter="hi"
    />
          </attachment>
      

    </bug>

</bugzilla>