<?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>22328</bug_id>
          
          <creation_ts>2008-11-17 21:43:20 -0800</creation_ts>
          <short_desc>Worker object should implement WindowTimers interface as per HTML5 spec</short_desc>
          <delta_ts>2008-12-08 00:49:27 -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>WebCore JavaScript</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>DUPLICATE</resolution>
          <dup_id>22718</dup_id>
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Dmitry Titov">dimich</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>ap</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>99134</commentid>
    <comment_count>0</comment_count>
    <who name="Dmitry Titov">dimich</who>
    <bug_when>2008-11-17 21:43:20 -0800</bug_when>
    <thetext>Workers should get setTimeout/clearTimeout/setInterval/clearInterval implemented on them. working on a patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>99437</commentid>
    <comment_count>1</comment_count>
      <attachid>25304</attachid>
    <who name="Dmitry Titov">dimich</who>
    <bug_when>2008-11-20 01:31:32 -0800</bug_when>
    <thetext>Created attachment 25304
Initial Refactoring of code</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>99438</commentid>
    <comment_count>2</comment_count>
    <who name="Dmitry Titov">dimich</who>
    <bug_when>2008-11-20 01:34:07 -0800</bug_when>
    <thetext>Refactored timeout code (set/clearTimeout,set/clearInterval) in preparation for implementing them on Workers.
Most of implementation moved from JSDOMWindowBase to ScriptExecutionContext, including the storage for timers.
Timers are now instances of new class DOMTimer. 
ScriptExecutionContext has a virtual method &apos;executeTimoutCallback&apos; which is called when a timer fires. Subclasses of SEC (Document and WorkerContext) implement this differently. For now, only Document has implementation - depending on whether a callback is a JS function or a string of JS code, it either delegates back to JSDOMGlobalObject that captured the function and arguments, or asks FrameLoader to execute the script.
ScheduledAction is now just a collection of data for timer callback.

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>99451</commentid>
    <comment_count>3</comment_count>
      <attachid>25304</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2008-11-20 03:34:39 -0800</bug_when>
    <thetext>Comment on attachment 25304
Initial Refactoring of code

Aside from code style issues, I have two comments. First, DOMTimer inherits from TimerBase, which is not thread safe, and doesn&apos;t work in non-main threads anyway (on Mac OS X, it uses CFRunLoopTimerCreate on main run loop). Second, clearAllTimeouts and related functions need to be modified to take advantage of DOMTimer being an ActiveDOMObject. Pausing and resuming timers will probably require support for pausing/resuming active DOM objects, which is needed anyway.

You may want to discuss this with someone who actually knows how timers used to work though!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>101797</commentid>
    <comment_count>4</comment_count>
    <who name="Dmitry Titov">dimich</who>
    <bug_when>2008-12-08 00:49:27 -0800</bug_when>
    <thetext>

*** This bug has been marked as a duplicate of 22718 ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>25304</attachid>
            <date>2008-11-20 01:31:32 -0800</date>
            <delta_ts>2008-11-20 03:34:39 -0800</delta_ts>
            <desc>Initial Refactoring of code</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>50632</size>
            <attacher name="Dmitry Titov">dimich</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzODYxNikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsODcgQEAKKzIwMDgtMTEtMjAgIERtaXRyeSBUaXRvdiAgPGRpbWljaEBjaHJvbWl1
bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMzI4CisJCVJlZmFjdG9y
ZWQgdGltZW91dCBjb2RlIChzZXQvY2xlYXJUaW1lb3V0LHNldC9jbGVhckludGVydmFsKSBpbiBw
cmVwYXJhdGlvbiBmb3IgaW1wbGVtZW50aW5nIHRoZW0gb24gV29ya2Vycy4KKwkJTW9zdCBvZiBp
bXBsZW1lbnRhdGlvbiBtb3ZlZCBmcm9tIEpTRE9NV2luZG93QmFzZSB0byBTY3JpcHRFeGVjdXRp
b25Db250ZXh0LCBpbmNsdWRpbmcgdGhlIHN0b3JhZ2UgZm9yIHRpbWVycy4KKwkJVGltZXJzIGFy
ZSBub3cgaW5zdGFuY2VzIG9mIG5ldyBjbGFzcyBET01UaW1lci4KKwkJU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCBoYXMgYSB2aXJ0dWFsIG1ldGhvZCAnZXhlY3V0ZVRpbW91dENhbGxiYWNrJyB3aGlj
aCBpcyBjYWxsZWQgd2hlbiBhIHRpbWVyIGZpcmVzLiBTdWJjbGFzc2VzIAorCQlvZiBTRUMgKERv
Y3VtZW50IGFuZCBXb3JrZXJDb250ZXh0KSBpbXBsZW1lbnQgdGhpcyBkaWZmZXJlbnRseS4gCisJ
CUZvciBub3csIG9ubHkgRG9jdW1lbnQgaGFzIGltcGxlbWVudGF0aW9uIC0gZGVwZW5kaW5nIG9u
IHdoZXRoZXIgYSBjYWxsYmFjayBpcyBhIEpTIGZ1bmN0aW9uIG9yIAorCQlhIHN0cmluZyBvZiBK
UyBjb2RlLCBpdCBlaXRoZXIgZGVsZWdhdGVzIGJhY2sgdG8gSlNET01HbG9iYWxPYmplY3QgdGhh
dCBjYXB0dXJlZCB0aGUgZnVuY3Rpb24gYW5kIGFyZ3VtZW50cywgCisJCW9yIGFza3MgRnJhbWVM
b2FkZXIgdG8gZXhlY3V0ZSB0aGUgc2NyaXB0LgorCQlTY2hlZHVsZWRBY3Rpb24gaXMgbm93IGp1
c3QgYSBjb2xsZWN0aW9uIG9mIGRhdGEgZm9yIHRpbWVyIGNhbGxiYWNrLgorCQlObyBmdW5jdGlv
bmFsL0RPTSBjaGFuZ2VzLgorCQkKKworICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOgorICAgICAg
ICAqIFdlYkNvcmUucHJvOgorICAgICAgICAqIFdlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9q
OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAg
KiBXZWJDb3JlU291cmNlcy5ia2w6CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01HbG9iYWxP
YmplY3QuaDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2UuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SlNET01XaW5kb3dCYXNlOjp+SlNET01XaW5kb3dCYXNlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkpTRE9NV2luZG93QmFzZTo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6
SlNET01XaW5kb3dCYXNlOjpleGVjdXRlVGltZXJDYWxsYmFja0Z1bmN0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OkpTRE9NV2luZG93QmFzZTo6ZGlzY29ubmVjdEZyYW1lKToKKyAgICAgICAgKiBi
aW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2UuaDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RP
TVdpbmRvd0N1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzZXRUaW1lb3V0T3JJbnRlcnZh
bCk6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTVdpbmRvdzo6Y2xlYXJUaW1lb3V0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkpTRE9NV2luZG93OjpjbGVhckludGVydmFsKToKKyAgICAgICAgKiBiaW5k
aW5ncy9qcy9KU1dvcmtlckNvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNXb3JrZXJD
b250ZXh0OjpleGVjdXRlVGltZXJDYWxsYmFja0Z1bmN0aW9uKToKKyAgICAgICAgKiBiaW5kaW5n
cy9qcy9KU1dvcmtlckNvbnRleHQuaDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TY2hlZHVsZWRB
Y3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NoZWR1bGVkQWN0aW9uOjpTY2hlZHVsZWRB
Y3Rpb24pOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NjaGVkdWxlZEFjdGlvbi5oOgorICAgICAg
ICAoV2ViQ29yZTo6U2NoZWR1bGVkQWN0aW9uOjpTY2hlZHVsZWRBY3Rpb24pOgorICAgICAgICAq
IGJpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Ny
aXB0Q29udHJvbGxlcjo6cGF1c2VUaW1lb3V0cyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRD
b250cm9sbGVyOjpyZXN1bWVUaW1lb3V0cyk6CisgICAgICAgICogYmluZGluZ3MvanMvU2NyaXB0
Q29udHJvbGxlci5oOgorICAgICAgICAqIGRvbS9ET01UaW1lci5jcHA6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RE9NVGltZXI6OkRPTVRpbWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRPTVRp
bWVyOjp+RE9NVGltZXIpOgorICAgICAgICAoV2ViQ29yZTo6ZXhlY3V0ZUNhbGxiYWNrSW5Db250
ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkRPTVRpbWVyOjpmaXJlSW50ZXJ2YWwpOgorICAgICAg
ICAoV2ViQ29yZTo6RE9NVGltZXI6OmZpcmVUaW1lb3V0KToKKyAgICAgICAgKFdlYkNvcmU6OkRP
TVRpbWVyOjpmaXJlZCk6CisgICAgICAgICogZG9tL0RPTVRpbWVyLmg6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RE9NVGltZXI6Om5lc3RpbmdMZXZlbCk6CisgICAgICAgIChXZWJDb3JlOjpE
T01UaW1lcjo6c2V0TmVzdGluZ0xldmVsKToKKyAgICAgICAgKFdlYkNvcmU6OkRPTVRpbWVyOjph
Y3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6RE9NVGltZXI6OnRha2VBY3Rpb24pOgorICAgICAg
ICAqIGRvbS9Eb2N1bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6ZXhlY3V0
ZVRpbWVyQ2FsbGJhY2spOgorICAgICAgICAqIGRvbS9Eb2N1bWVudC5oOgorICAgICAgICAqIGRv
bS9TY3JpcHRFeGVjdXRpb25Db250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQ6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpOgorICAgICAgICAoV2ViQ29y
ZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6Y2xlYXJBbGxUaW1lb3V0cyk6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0OjppbnN0YWxsVGltZW91dCk6CisgICAgICAg
IChXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpwYXVzZVRpbWVvdXRzKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OnJlc3VtZVRpbWVvdXRzKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OnJlbW92ZVRpbWVvdXQpOgor
ICAgICAgICAqIGRvbS9TY3JpcHRFeGVjdXRpb25Db250ZXh0Lmg6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpnZXRUaW1lb3V0KToKKyAgICAgICAgKFdlYkNvcmU6
OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6Omhhc1RpbWVvdXRzKToKKyAgICAgICAgKFdlYkNvcmU6
OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OnNldFRpbWVyTmVzdGluZ0xldmVsKToKKyAgICAgICAg
KFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OnRpbWVyTmVzdGluZ0xldmVsKToKKyAg
ICAgICAgKiBkb20vV29ya2VyQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJD
b250ZXh0OjpoYXNQZW5kaW5nQWN0aXZpdHkpOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyQ29u
dGV4dDo6ZXhlY3V0ZVRpbWVyQ2FsbGJhY2spOgorICAgICAgICAqIGRvbS9Xb3JrZXJDb250ZXh0
Lmg6CisgICAgICAgICogaGlzdG9yeS9DYWNoZWRQYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkNhY2hlZFBhZ2U6OkNhY2hlZFBhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkUGFnZTo6
cmVzdG9yZSk6CisgICAgICAgICogaW5zcGVjdG9yL0phdmFTY3JpcHREZWJ1Z1NlcnZlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpKYXZhU2NyaXB0RGVidWdTZXJ2ZXI6OnNldEphdmFTY3JpcHRQ
YXVzZWQpOgorICAgICAgICAqIGxvYWRlci9GcmFtZUxvYWRlci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpGcmFtZUxvYWRlcjo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6
OmNvbW1pdFByb3Zpc2lvbmFsTG9hZCk6CisKIDIwMDgtMTEtMTkgIERhcmluIEZpc2hlciAgPGRh
cmluQGNocm9taXVtLm9yZz4KIAogICAgICAgICBGaXggYnVzdGFnZS4KSW5kZXg6IFdlYkNvcmUv
R05VbWFrZWZpbGUuYW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQkocmV2
aXNpb24gMzg2MTYpCisrKyBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtCSh3b3JraW5nIGNvcHkpCkBA
IC01NDcsNiArNTQ3LDggQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlXZWJDb3JlL2RvbS9Eb2N1
bWVudE1hcmtlci5oIFwKIAlXZWJDb3JlL2RvbS9Eb2N1bWVudFR5cGUuY3BwIFwKIAlXZWJDb3Jl
L2RvbS9Eb2N1bWVudFR5cGUuaCBcCisJV2ViQ29yZS9kb20vRE9NVGltZXIuY3BwIFwKKwlXZWJD
b3JlL2RvbS9ET01UaW1lci5oIFwKIAlXZWJDb3JlL2RvbS9EeW5hbWljTm9kZUxpc3QuY3BwIFwK
IAlXZWJDb3JlL2RvbS9EeW5hbWljTm9kZUxpc3QuaCBcCiAJV2ViQ29yZS9kb20vRWRpdGluZ1Rl
eHQuY3BwIFwKSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5wcm8KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9XZWJDb3JlLnBybwkocmV2aXNpb24gMzg2MTYpCisrKyBXZWJDb3JlL1dlYkNvcmUucHJvCSh3
b3JraW5nIGNvcHkpCkBAIC01NDEsNiArNTQxLDcgQEAgU09VUkNFUyArPSBcCiAgICAgZG9tL0Rv
Y3VtZW50RnJhZ21lbnQuY3BwIFwKICAgICBkb20vRG9jdW1lbnRUeXBlLmNwcCBcCiAgICAgZG9t
L0RPTUltcGxlbWVudGF0aW9uLmNwcCBcCisgICAgZG9tL0RPTVRpbWVyLmNwcCBcCiAgICAgZG9t
L0R5bmFtaWNOb2RlTGlzdC5jcHAgXAogICAgIGRvbS9FZGl0aW5nVGV4dC5jcHAgXAogICAgIGRv
bS9FbGVtZW50LmNwcCBcCkluZGV4OiBXZWJDb3JlL1dlYkNvcmVTb3VyY2VzLmJrbAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmVTb3VyY2VzLmJrbAkocmV2aXNpb24gMzg2MTYpCisrKyBX
ZWJDb3JlL1dlYkNvcmVTb3VyY2VzLmJrbAkod29ya2luZyBjb3B5KQpAQCAtMzkzLDYgKzM5Myw3
IEBAIFRoaXMgZmlsZSBjb250YWlucyB0aGUgbGlzdCBvZiBmaWxlcyBuZWUKICAgICAgICAgZG9t
L0RvY3VtZW50LmNwcAogICAgICAgICBkb20vRG9jdW1lbnRGcmFnbWVudC5jcHAKICAgICAgICAg
ZG9tL0RvY3VtZW50VHlwZS5jcHAKKyAgICAgICAgZG9tL0RPTVRpbWVyLmNwcAogICAgICAgICBk
b20vRHluYW1pY05vZGVMaXN0LmNwcAogICAgICAgICBkb20vRWRpdGluZ1RleHQuY3BwCiAgICAg
ICAgIGRvbS9FbGVtZW50LmNwcApJbmRleDogV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3Jl
LnZjcHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNw
cm9qCShyZXZpc2lvbiAzODYxNikKKysrIFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52
Y3Byb2oJKHdvcmtpbmcgY29weSkKQEAgLTEwNTcwLDYgKzEwNTcwLDIyIEBACiAJCQkJPg0KIAkJ
CTwvRmlsZT4NCiAJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGRvbVxET01UaW1lci5j
cHAiDQorCQkJCT4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNl
X1BHT3xXaW4zMiINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBp
bGVyVG9vbCINCisJCQkJCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249InRydWUiDQorCQkJCQkv
Pg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJ
CQlSZWxhdGl2ZVBhdGg9Ii4uXGRvbVxET01UaW1lci5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0K
KwkJCTxGaWxlDQogCQkJCVJlbGF0aXZlUGF0aD0iLi5cZG9tXER5bmFtaWNOb2RlTGlzdC5jcHAi
DQogCQkJCT4NCiAJCQkJPEZpbGVDb25maWd1cmF0aW9uDQpJbmRleDogV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDM4NjE2KQorKysgV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTEwMiw2
ICsxMDIsOCBAQAogCQkxNEVDMjY4MDA5Q0EwN0UwMDBFMUVFRUMgLyogRXZlbnRUYXJnZXROb2Rl
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0RUMy
NjdFMDlDQTA3RTAwMEUxRUVFQyAvKiBFdmVudFRhcmdldE5vZGUuY3BwICovOyB9OwogCQkxNEZG
RTMxRDBBRTE5NjMzMDAxMzZCRjUgLyogSFRNTEZyYW1lRWxlbWVudEJhc2UuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0RkZFMzFCMEFFMTk2MzMwMDEz
NkJGNSAvKiBIVE1MRnJhbWVFbGVtZW50QmFzZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTE0RkZFMzFFMEFFMTk2MzMwMDEzNkJGNSAvKiBIVE1M
RnJhbWVFbGVtZW50QmFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAxNEZGRTMxQzBBRTE5NjMzMDAxMzZCRjUgLyogSFRNTEZyYW1lRWxlbWVudEJh
c2UuY3BwICovOyB9OworCQkxOEVCQjQ4OTBFRDRBMkQ3MDBCMjI0OUEgLyogRE9NVGltZXIuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMThFQkI0ODcw
RUQ0QTJENzAwQjIyNDlBIC8qIERPTVRpbWVyLmNwcCAqLzsgfTsKKwkJMThFQkI0OEEwRUQ0QTJE
NzAwQjIyNDlBIC8qIERPTVRpbWVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAxOEVCQjQ4ODBFRDRBMkQ3MDBCMjI0OUEgLyogRE9NVGltZXIuaCAqLzsg
fTsKIAkJMUEwRDU3MzYwQTVDNzdGRTAwN0VERDRDIC8qIE92ZXJmbG93RXZlbnQuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUEwRDU3MzQwQTVDNzdG
RTAwN0VERDRDIC8qIE92ZXJmbG93RXZlbnQuY3BwICovOyB9OwogCQkxQTBENTczNzBBNUM3N0ZF
MDA3RURENEMgLyogT3ZlcmZsb3dFdmVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMUEwRDU3MzUwQTVDNzdGRTAwN0VERDRDIC8qIE92ZXJmbG93RXZl
bnQuaCAqLzsgfTsKIAkJMUEwRDU3NDAwQTVDNzg2NzAwN0VERDRDIC8qIEpTT3ZlcmZsb3dFdmVu
dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTBE
NTczRTBBNUM3ODY3MDA3RURENEMgLyogSlNPdmVyZmxvd0V2ZW50LmNwcCAqLzsgfTsKQEAgLTQ4
MzcsNiArNDgzOSw4IEBACiAJCTE0RUMyNjdFMDlDQTA3RTAwMEUxRUVFQyAvKiBFdmVudFRhcmdl
dE5vZGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRXZlbnRUYXJn
ZXROb2RlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTRGRkUzMUIwQUUxOTYz
MzAwMTM2QkY1IC8qIEhUTUxGcmFtZUVsZW1lbnRCYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEhUTUxGcmFtZUVsZW1lbnRCYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTE0RkZFMzFDMEFFMTk2MzMwMDEzNkJGNSAvKiBIVE1MRnJhbWVFbGVtZW50QmFz
ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBIVE1MRnJhbWVFbGVt
ZW50QmFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTE4RUJCNDg3MEVENEEy
RDcwMEIyMjQ5QSAvKiBET01UaW1lci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBET01UaW1lci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTE4RUJC
NDg4MEVENEEyRDcwMEIyMjQ5QSAvKiBET01UaW1lci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBET01UaW1lci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQTBE
NTczNDBBNUM3N0ZFMDA3RURENEMgLyogT3ZlcmZsb3dFdmVudC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gT3ZlcmZsb3dFdmVudC5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTFBMEQ1NzM1MEE1Qzc3RkUwMDdFREQ0QyAvKiBPdmVyZmxvd0V2ZW50
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBPdmVyZmxvd0V2ZW50Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBMEQ1NzM4MEE1Qzc4MTIwMDdFREQ0QyAvKiBP
dmVyZmxvd0V2ZW50LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gT3ZlcmZsb3dFdmVudC5p
ZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMzkzOCw2ICsxMzk0Miw4IEBACiAJ
CUY1MjNEMzI0MDJERTQ0NzgwMTg2MzVDQSAvKiBkb20gKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91
cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCTE4RUJCNDg3MEVENEEyRDcwMEIyMjQ5QSAvKiBET01U
aW1lci5jcHAgKi8sCisJCQkJMThFQkI0ODgwRUQ0QTJENzAwQjIyNDlBIC8qIERPTVRpbWVyLmgg
Ki8sCiAJCQkJRTFDNERFNkQwRUE3NUM2NTAwMjNDQ0Q2IC8qIEFjdGl2ZURPTU9iamVjdC5jcHAg
Ki8sCiAJCQkJRTFDNERFNjgwRUE3NUMxRTAwMjNDQ0Q2IC8qIEFjdGl2ZURPTU9iamVjdC5oICov
LAogCQkJCUE4QzRBN0ZDMDlENTYzMjcwMDAzQUM4RCAvKiBBdHRyLmNwcCAqLywKQEAgLTE2MzA4
LDYgKzE2MzE0LDcgQEAKIAkJCQlFMTA4MjI0QjBFQzMxNTNBMDBFOTM5NTMgLyogV29ya2VyVGFz
ay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZENzIzODIwRUM4QkQ5MzAwQ0E1REQ3IC8qIEZsb2F0
UXVhZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTE0Nzk5QTcwRUNERTNBNDAwMjkyQkYzIC8qIFdv
cmtlck1lc3NhZ2luZ1Byb3h5LmggaW4gSGVhZGVycyAqLywKKwkJCQkxOEVCQjQ4QTBFRDRBMkQ3
MDBCMjI0OUEgLyogRE9NVGltZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzNENDMEUyMEVEMzlE
NkYwMEE2NThGMiAvKiBTY3JpcHRWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDg5N0MxNEQw
RUQyRUJBNTAwQUUwNkRCIC8qIFdNTEJSRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwpA
QCAtMTgyMzEsNiArMTgyMzgsNyBAQAogCQkJCUUxNDc5OUI0MEVDREU5RDgwMDI5MkJGMyAvKiBX
b3JrZXJNZXNzYWdpbmdQcm94eS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwODk3QzE0QzBFRDJF
QkE1MDBBRTA2REIgLyogV01MQlJFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUxODI1
MDRGMEVEMkYyMDIwMDQ5OUE4RiAvKiBGcmFtZUxvYWRlckNsaWVudC5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQkxOEVCQjQ4OTBFRDRBMkQ3MDBCMjI0OUEgLyogRE9NVGltZXIuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJOTM0Q0MwRTEwRUQzOUQ2RjAwQTY1OEYyIC8qIFNjcmlwdFZhbHVlLmNwcCBp
biBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3Np
bmcgPSAwOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3QuaAkocmV2
aXNpb24gMzg2MTYpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAg
IGNsYXNzIEV2ZW50OwogICAgIGNsYXNzIEpTRXZlbnRMaXN0ZW5lcjsKICAgICBjbGFzcyBKU1Vu
cHJvdGVjdGVkRXZlbnRMaXN0ZW5lcjsKKyAgICBzdHJ1Y3QgU2NoZWR1bGVkQWN0aW9uOwogICAg
IGNsYXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7CiAKICAgICB0eXBlZGVmIEhhc2hNYXA8Y29u
c3QgSlNDOjpDbGFzc0luZm8qLCBSZWZQdHI8SlNDOjpTdHJ1Y3R1cmU+ID4gSlNET01TdHJ1Y3R1
cmVNYXA7CkBAIC03OCw2ICs3OSw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICB2
aXJ0dWFsIHZvaWQgbWFyaygpOwogCisgICAgICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlVGltZXJD
YWxsYmFja0Z1bmN0aW9uKFNjaGVkdWxlZEFjdGlvbiogYWN0aW9uKSA9IDA7CisgICAgICAgIAog
ICAgIHByb3RlY3RlZDoKICAgICAgICAgc3RydWN0IEpTRE9NR2xvYmFsT2JqZWN0RGF0YSA6IHB1
YmxpYyBKU0M6OkpTR2xvYmFsT2JqZWN0OjpKU0dsb2JhbE9iamVjdERhdGEgewogICAgICAgICAg
ICAgSlNET01HbG9iYWxPYmplY3REYXRhKCk7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pT
RE9NV2luZG93QmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RP
TVdpbmRvd0Jhc2UuY3BwCShyZXZpc2lvbiAzODYxNikKKysrIFdlYkNvcmUvYmluZGluZ3MvanMv
SlNET01XaW5kb3dCYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTIsNyArNTIsNiBAQAogI2lu
Y2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJNZWRpYVBsYXllci5oIgogI2luY2x1ZGUgIlBh
Z2UuaCIKLSNpbmNsdWRlICJQYXVzZWRUaW1lb3V0cy5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU2Ny
ZWVuLmgiCiAjaW5jbHVkZSAiUGx1Z2luSW5mb1N0b3JlLmgiCiAjaW5jbHVkZSAiUmVuZGVyVmll
dy5oIgpAQCAtOTcsNDcgKzk2LDYgQEAgc3RhdGljIHZvaWQgc2V0SlNET01XaW5kb3dCYXNlWFNM
VFByb2NlcwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRpYyBpbnQgbGFzdFVzZWRUaW1l
b3V0SWQ7Ci0KLXN0YXRpYyBpbnQgdGltZXJOZXN0aW5nTGV2ZWwgPSAwOwotY29uc3QgaW50IGNN
YXhUaW1lck5lc3RpbmdMZXZlbCA9IDU7Ci1jb25zdCBkb3VibGUgY01pbmltdW1UaW1lckludGVy
dmFsID0gMC4wMTA7Ci0KLWNsYXNzIERPTVdpbmRvd1RpbWVyIDogcHVibGljIFRpbWVyQmFzZSB7
Ci1wdWJsaWM6Ci0gICAgRE9NV2luZG93VGltZXIoaW50IHRpbWVvdXRJZCwgaW50IG5lc3RpbmdM
ZXZlbCwgSlNET01XaW5kb3dCYXNlKiBvYmplY3QsIFNjaGVkdWxlZEFjdGlvbiogYWN0aW9uKQot
ICAgICAgICA6IG1fdGltZW91dElkKHRpbWVvdXRJZCkKLSAgICAgICAgLCBtX25lc3RpbmdMZXZl
bChuZXN0aW5nTGV2ZWwpCi0gICAgICAgICwgbV9vYmplY3Qob2JqZWN0KQotICAgICAgICAsIG1f
YWN0aW9uKGFjdGlvbikKLSAgICB7Ci0gICAgfQotCi0gICAgdmlydHVhbCB+RE9NV2luZG93VGlt
ZXIoKQotICAgIHsKLSAgICAgICAgSlNMb2NrIGxvY2soZmFsc2UpOwotICAgICAgICBkZWxldGUg
bV9hY3Rpb247Ci0gICAgfQotCi0gICAgaW50IHRpbWVvdXRJZCgpIGNvbnN0IHsgcmV0dXJuIG1f
dGltZW91dElkOyB9Ci0KLSAgICBpbnQgbmVzdGluZ0xldmVsKCkgY29uc3QgeyByZXR1cm4gbV9u
ZXN0aW5nTGV2ZWw7IH0KLSAgICB2b2lkIHNldE5lc3RpbmdMZXZlbChpbnQgbikgeyBtX25lc3Rp
bmdMZXZlbCA9IG47IH0KLQotICAgIFNjaGVkdWxlZEFjdGlvbiogYWN0aW9uKCkgY29uc3QgeyBy
ZXR1cm4gbV9hY3Rpb247IH0KLSAgICBTY2hlZHVsZWRBY3Rpb24qIHRha2VBY3Rpb24oKSB7IFNj
aGVkdWxlZEFjdGlvbiogYSA9IG1fYWN0aW9uOyBtX2FjdGlvbiA9IDA7IHJldHVybiBhOyB9Ci0K
LXByaXZhdGU6Ci0gICAgdmlydHVhbCB2b2lkIGZpcmVkKCk7Ci0KLSAgICBpbnQgbV90aW1lb3V0
SWQ7Ci0gICAgaW50IG1fbmVzdGluZ0xldmVsOwotICAgIEpTRE9NV2luZG93QmFzZSogbV9vYmpl
Y3Q7Ci0gICAgU2NoZWR1bGVkQWN0aW9uKiBtX2FjdGlvbjsKLX07Ci0KLS8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8gSlNET01XaW5kb3dCYXNlIE9iamVjdCAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8K
LQogY29uc3QgQ2xhc3NJbmZvIEpTRE9NV2luZG93QmFzZTo6c19pbmZvID0geyAiV2luZG93Iiwg
MCwgJkpTRE9NV2luZG93QmFzZVRhYmxlLCAwIH07CiAKIC8qCkBAIC0xOTQsOCArMTUyLDYgQEAg
SlNET01XaW5kb3dCYXNlOjp+SlNET01XaW5kb3dCYXNlKCkKIHsKICAgICBpZiAoZCgpLT5pbXBs
LT5mcmFtZSgpKQogICAgICAgICBkKCktPmltcGwtPmZyYW1lKCktPnNjcmlwdCgpLT5jbGVhckZv
cm1lcldpbmRvdyhhc0pTRE9NV2luZG93KHRoaXMpKTsKLQotICAgIGNsZWFyQWxsVGltZW91dHMo
KTsKIH0KIAogU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogSlNET01XaW5kb3dCYXNlOjpzY3JpcHRF
eGVjdXRpb25Db250ZXh0KCkgY29uc3QKQEAgLTczNSw3ICs2OTEsNiBAQCB2b2lkIEpTRE9NV2lu
ZG93QmFzZTo6Y2xlYXIoKQogICAgIGlmIChkKCktPnJldHVyblZhbHVlU2xvdCAmJiAhKmQoKS0+
cmV0dXJuVmFsdWVTbG90KQogICAgICAgICAqZCgpLT5yZXR1cm5WYWx1ZVNsb3QgPSBnZXREaXJl
Y3QoSWRlbnRpZmllcihnbG9iYWxFeGVjKCksICJyZXR1cm5WYWx1ZSIpKTsKIAotICAgIGNsZWFy
QWxsVGltZW91dHMoKTsKICAgICBjbGVhckhlbHBlck9iamVjdFByb3BlcnRpZXMoKTsKIH0KIApA
QCAtNzU1LDYgKzcxMCwzNCBAQCBKU0dsb2JhbERhdGEqIEpTRE9NV2luZG93QmFzZTo6Y29tbW9u
SlNHCiAgICAgcmV0dXJuIGdsb2JhbERhdGE7CiB9CiAKK3ZvaWQgSlNET01XaW5kb3dCYXNlOjpl
eGVjdXRlVGltZXJDYWxsYmFja0Z1bmN0aW9uKFNjaGVkdWxlZEFjdGlvbiogYWN0aW9uKQorewor
ICAgIEFTU0VSVChhY3Rpb24tPmZ1bmN0aW9uKTsKKyAgICAKKyAgICBSZWZQdHI8RnJhbWU+IGZy
YW1lID0gaW1wbCgpLT5mcmFtZSgpOworICAgIEFTU0VSVChmcmFtZSk7CisKKyAgICBKU0xvY2sg
bG9jayhmYWxzZSk7CisKKyAgICBDYWxsRGF0YSBjYWxsRGF0YTsKKyAgICBDYWxsVHlwZSBjYWxs
VHlwZSA9IGFjdGlvbi0+ZnVuY3Rpb24tPmdldENhbGxEYXRhKGNhbGxEYXRhKTsKKyAgICBpZiAo
Y2FsbFR5cGUgIT0gQ2FsbFR5cGVOb25lKSB7CisgICAgICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGds
b2JhbEV4ZWMoKTsKKworICAgICAgICBBcmdMaXN0IGFyZ3M7CisgICAgICAgIHNpemVfdCBzaXpl
ID0gYWN0aW9uLT5hcmd1bWVudHMuc2l6ZSgpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IHNpemU7ICsraSkKKyAgICAgICAgICAgIGFyZ3MuYXBwZW5kKGFjdGlvbi0+YXJndW1lbnRz
W2ldKTsKKworICAgICAgICBzdGFydFRpbWVvdXRDaGVjaygpOworICAgICAgICBjYWxsKGV4ZWMs
IGFjdGlvbi0+ZnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSwgc2hlbGwoKSwgYXJncyk7Cisg
ICAgICAgIHN0b3BUaW1lb3V0Q2hlY2soKTsKKworICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpCisgICAgICAgICAgICByZXBvcnRDdXJyZW50RXhjZXB0aW9uKGV4ZWMpOworICAgIH0K
K30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsK
QEAgLTg1OSwxNDQgKzg0Miw4IEBAIHZvaWQgSlNET01XaW5kb3dCYXNlOjpzZXRSZXR1cm5WYWx1
ZVNsb3QKICAgICBkKCktPnJldHVyblZhbHVlU2xvdCA9IHNsb3Q7CiB9CiAKLS8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8gdGltZW91dHMgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0KLXZvaWQgSlNE
T01XaW5kb3dCYXNlOjpjbGVhckFsbFRpbWVvdXRzKCkKLXsKLSAgICBkZWxldGVBbGxWYWx1ZXMo
ZCgpLT50aW1lb3V0cyk7Ci0gICAgZCgpLT50aW1lb3V0cy5jbGVhcigpOwotfQotCi1pbnQgSlNE
T01XaW5kb3dCYXNlOjppbnN0YWxsVGltZW91dChTY2hlZHVsZWRBY3Rpb24qIGEsIGludCB0LCBi
b29sIHNpbmdsZVNob3QpCi17Ci0gICAgaW50IHRpbWVvdXRJZCA9ICsrbGFzdFVzZWRUaW1lb3V0
SWQ7Ci0KLSAgICAvLyBhdm9pZCB3cmFwYXJvdW5kIGdvaW5nIG5lZ2F0aXZlIG9uIHVzCi0gICAg
aWYgKHRpbWVvdXRJZCA8PSAwKQotICAgICAgICB0aW1lb3V0SWQgPSAxOwotCi0gICAgaW50IG5l
c3RMZXZlbCA9IHRpbWVyTmVzdGluZ0xldmVsICsgMTsKLSAgICBET01XaW5kb3dUaW1lciogdGlt
ZXIgPSBuZXcgRE9NV2luZG93VGltZXIodGltZW91dElkLCBuZXN0TGV2ZWwsIHRoaXMsIGEpOwot
ICAgIEFTU0VSVCghZCgpLT50aW1lb3V0cy5nZXQodGltZW91dElkKSk7Ci0gICAgZCgpLT50aW1l
b3V0cy5zZXQodGltZW91dElkLCB0aW1lcik7Ci0gICAgLy8gVXNlIGEgbWluaW11bSBpbnRlcnZh
bCBvZiAxMCBtcyB0byBtYXRjaCBvdGhlciBicm93c2VycywgYnV0IG9ubHkgb25jZSB3ZSd2ZQot
ICAgIC8vIG5lc3RlZCBlbm91Z2ggdG8gbm90aWNlIHRoYXQgd2UncmUgcmVwZWF0aW5nLgotICAg
IC8vIEZhc3RlciB0aW1lcnMgbWlnaHQgYmUgImJldHRlciIsIGJ1dCB0aGV5J3JlIGluY29tcGF0
aWJsZS4KLSAgICBkb3VibGUgaW50ZXJ2YWwgPSBtYXgoMC4wMDEsIHQgKiAwLjAwMSk7Ci0gICAg
aWYgKGludGVydmFsIDwgY01pbmltdW1UaW1lckludGVydmFsICYmIG5lc3RMZXZlbCA+PSBjTWF4
VGltZXJOZXN0aW5nTGV2ZWwpCi0gICAgICAgIGludGVydmFsID0gY01pbmltdW1UaW1lckludGVy
dmFsOwotICAgIGlmIChzaW5nbGVTaG90KQotICAgICAgICB0aW1lci0+c3RhcnRPbmVTaG90KGlu
dGVydmFsKTsKLSAgICBlbHNlCi0gICAgICAgIHRpbWVyLT5zdGFydFJlcGVhdGluZyhpbnRlcnZh
bCk7Ci0gICAgcmV0dXJuIHRpbWVvdXRJZDsKLX0KLQotaW50IEpTRE9NV2luZG93QmFzZTo6aW5z
dGFsbFRpbWVvdXQoY29uc3QgVVN0cmluZyYgaGFuZGxlciwgaW50IHQsIGJvb2wgc2luZ2xlU2hv
dCkKLXsKLSAgICByZXR1cm4gaW5zdGFsbFRpbWVvdXQobmV3IFNjaGVkdWxlZEFjdGlvbihoYW5k
bGVyKSwgdCwgc2luZ2xlU2hvdCk7Ci19Ci0KLWludCBKU0RPTVdpbmRvd0Jhc2U6Omluc3RhbGxU
aW1lb3V0KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSogZnVuYywgY29uc3QgQXJnTGlzdCYgYXJn
cywgaW50IHQsIGJvb2wgc2luZ2xlU2hvdCkKLXsKLSAgICByZXR1cm4gaW5zdGFsbFRpbWVvdXQo
bmV3IFNjaGVkdWxlZEFjdGlvbihleGVjLCBmdW5jLCBhcmdzKSwgdCwgc2luZ2xlU2hvdCk7Ci19
Ci0KLXZvaWQgSlNET01XaW5kb3dCYXNlOjpwYXVzZVRpbWVvdXRzKE93blB0cjxQYXVzZWRUaW1l
b3V0cz4mIHJlc3VsdCkKLXsKLSAgICBzaXplX3QgdGltZW91dHNDb3VudCA9IGQoKS0+dGltZW91
dHMuc2l6ZSgpOwotICAgIGlmICghdGltZW91dHNDb3VudCkgewotICAgICAgICByZXN1bHQuY2xl
YXIoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIFBhdXNlZFRpbWVvdXQqIHQgPSBu
ZXcgUGF1c2VkVGltZW91dFt0aW1lb3V0c0NvdW50XTsKLSAgICByZXN1bHQuc2V0KG5ldyBQYXVz
ZWRUaW1lb3V0cyh0LCB0aW1lb3V0c0NvdW50KSk7Ci0KLSAgICBKU0RPTVdpbmRvd0Jhc2VEYXRh
OjpUaW1lb3V0c01hcDo6aXRlcmF0b3IgaXQgPSBkKCktPnRpbWVvdXRzLmJlZ2luKCk7Ci0gICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgIT0gdGltZW91dHNDb3VudDsgKytpLCArK2l0KSB7Ci0gICAg
ICAgIGludCB0aW1lb3V0SWQgPSBpdC0+Zmlyc3Q7Ci0gICAgICAgIERPTVdpbmRvd1RpbWVyKiB0
aW1lciA9IGl0LT5zZWNvbmQ7Ci0gICAgICAgIHRbaV0udGltZW91dElkID0gdGltZW91dElkOwot
ICAgICAgICB0W2ldLm5lc3RpbmdMZXZlbCA9IHRpbWVyLT5uZXN0aW5nTGV2ZWwoKTsKLSAgICAg
ICAgdFtpXS5uZXh0RmlyZUludGVydmFsID0gdGltZXItPm5leHRGaXJlSW50ZXJ2YWwoKTsKLSAg
ICAgICAgdFtpXS5yZXBlYXRJbnRlcnZhbCA9IHRpbWVyLT5yZXBlYXRJbnRlcnZhbCgpOwotICAg
ICAgICB0W2ldLmFjdGlvbiA9IHRpbWVyLT50YWtlQWN0aW9uKCk7Ci0gICAgfQotICAgIEFTU0VS
VChpdCA9PSBkKCktPnRpbWVvdXRzLmVuZCgpKTsKLQotICAgIGRlbGV0ZUFsbFZhbHVlcyhkKCkt
PnRpbWVvdXRzKTsKLSAgICBkKCktPnRpbWVvdXRzLmNsZWFyKCk7Ci19Ci0KLXZvaWQgSlNET01X
aW5kb3dCYXNlOjpyZXN1bWVUaW1lb3V0cyhPd25QdHI8UGF1c2VkVGltZW91dHM+JiB0aW1lb3V0
cykKLXsKLSAgICBpZiAoIXRpbWVvdXRzKQotICAgICAgICByZXR1cm47Ci0gICAgc2l6ZV90IGNv
dW50ID0gdGltZW91dHMtPm51bVRpbWVvdXRzKCk7Ci0gICAgUGF1c2VkVGltZW91dCogYXJyYXkg
PSB0aW1lb3V0cy0+dGFrZVRpbWVvdXRzKCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgIT0g
Y291bnQ7ICsraSkgewotICAgICAgICBpbnQgdGltZW91dElkID0gYXJyYXlbaV0udGltZW91dElk
OwotICAgICAgICBET01XaW5kb3dUaW1lciogdGltZXIgPSBuZXcgRE9NV2luZG93VGltZXIodGlt
ZW91dElkLCBhcnJheVtpXS5uZXN0aW5nTGV2ZWwsIHRoaXMsIGFycmF5W2ldLmFjdGlvbik7Ci0g
ICAgICAgIGQoKS0+dGltZW91dHMuc2V0KHRpbWVvdXRJZCwgdGltZXIpOwotICAgICAgICB0aW1l
ci0+c3RhcnQoYXJyYXlbaV0ubmV4dEZpcmVJbnRlcnZhbCwgYXJyYXlbaV0ucmVwZWF0SW50ZXJ2
YWwpOwotICAgIH0KLSAgICBkZWxldGUgW10gYXJyYXk7Ci0gICAgdGltZW91dHMuY2xlYXIoKTsK
LX0KLQotdm9pZCBKU0RPTVdpbmRvd0Jhc2U6OnJlbW92ZVRpbWVvdXQoaW50IHRpbWVvdXRJZCwg
Ym9vbCBkZWxBY3Rpb24pCi17Ci0gICAgLy8gdGltZW91dCBJRHMgaGF2ZSB0byBiZSBwb3NpdGl2
ZSwgYW5kIDAgYW5kIC0xIGFyZSB1bnNhZmUgdG8KLSAgICAvLyBldmVuIGxvb2sgdXAgc2luY2Ug
dGhleSBhcmUgdGhlIGVtcHR5IGFuZCBkZWxldGVkIHZhbHVlCi0gICAgLy8gcmVzcGVjdGl2ZWx5
Ci0gICAgaWYgKHRpbWVvdXRJZCA8PSAwKQotICAgICAgICByZXR1cm47Ci0KLSAgICBkZWxldGUg
ZCgpLT50aW1lb3V0cy50YWtlKHRpbWVvdXRJZCk7Ci19Ci0KLXZvaWQgSlNET01XaW5kb3dCYXNl
Ojp0aW1lckZpcmVkKERPTVdpbmRvd1RpbWVyKiB0aW1lcikKLXsKLSAgICAvLyBTaW1wbGUgY2Fz
ZSBmb3Igbm9uLW9uZS1zaG90IHRpbWVycy4KLSAgICBpZiAodGltZXItPmlzQWN0aXZlKCkpIHsK
LSAgICAgICAgaW50IHRpbWVvdXRJZCA9IHRpbWVyLT50aW1lb3V0SWQoKTsKLQotICAgICAgICB0
aW1lci0+YWN0aW9uKCktPmV4ZWN1dGUoc2hlbGwoKSk7Ci0gICAgICAgIC8vIFRoZSBET01XaW5k
b3dUaW1lciBvYmplY3QgbWF5IGhhdmUgYmVlbiBkZWxldGVkIG9yIHJlcGxhY2VkIGR1cmluZyBl
eGVjdXRpb24sCi0gICAgICAgIC8vIHNvIHdlIHJlLWZldGNoIGl0LgotICAgICAgICB0aW1lciA9
IGQoKS0+dGltZW91dHMuZ2V0KHRpbWVvdXRJZCk7Ci0gICAgICAgIGlmICghdGltZXIpCi0gICAg
ICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgaWYgKHRpbWVyLT5yZXBlYXRJbnRlcnZhbCgpICYm
IHRpbWVyLT5yZXBlYXRJbnRlcnZhbCgpIDwgY01pbmltdW1UaW1lckludGVydmFsKSB7Ci0gICAg
ICAgICAgICB0aW1lci0+c2V0TmVzdGluZ0xldmVsKHRpbWVyLT5uZXN0aW5nTGV2ZWwoKSArIDEp
OwotICAgICAgICAgICAgaWYgKHRpbWVyLT5uZXN0aW5nTGV2ZWwoKSA+PSBjTWF4VGltZXJOZXN0
aW5nTGV2ZWwpCi0gICAgICAgICAgICAgICAgdGltZXItPmF1Z21lbnRSZXBlYXRJbnRlcnZhbChj
TWluaW11bVRpbWVySW50ZXJ2YWwgLSB0aW1lci0+cmVwZWF0SW50ZXJ2YWwoKSk7Ci0gICAgICAg
IH0KLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIERlbGV0ZSB0aW1lciBiZWZvcmUg
ZXhlY3V0aW5nIHRoZSBhY3Rpb24gZm9yIG9uZS1zaG90IHRpbWVycy4KLSAgICBTY2hlZHVsZWRB
Y3Rpb24qIGFjdGlvbiA9IHRpbWVyLT50YWtlQWN0aW9uKCk7Ci0gICAgZCgpLT50aW1lb3V0cy5y
ZW1vdmUodGltZXItPnRpbWVvdXRJZCgpKTsKLSAgICBkZWxldGUgdGltZXI7Ci0gICAgYWN0aW9u
LT5leGVjdXRlKHNoZWxsKCkpOwotCi0gICAgSlNMb2NrIGxvY2soZmFsc2UpOwotICAgIGRlbGV0
ZSBhY3Rpb247Ci19Ci0KIHZvaWQgSlNET01XaW5kb3dCYXNlOjpkaXNjb25uZWN0RnJhbWUoKQog
ewotICAgIGNsZWFyQWxsVGltZW91dHMoKTsKLX0KLQotdm9pZCBET01XaW5kb3dUaW1lcjo6Zmly
ZWQoKQotewotICAgIHRpbWVyTmVzdGluZ0xldmVsID0gbV9uZXN0aW5nTGV2ZWw7Ci0gICAgbV9v
YmplY3QtPnRpbWVyRmlyZWQodGhpcyk7Ci0gICAgdGltZXJOZXN0aW5nTGV2ZWwgPSAwOwogfQog
CiBKU1ZhbHVlKiB0b0pTKEV4ZWNTdGF0ZSosIERPTVdpbmRvdyogZG9tV2luZG93KQpJbmRleDog
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2UuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93QmFzZS5oCShyZXZpc2lvbiAzODYxNikKKysrIFdl
YkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dCYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMw
LDcgKzMwLDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgY2xhc3MgQXRvbWljU3RyaW5n
OwogICAgIGNsYXNzIERPTVdpbmRvdzsKLSAgICBjbGFzcyBET01XaW5kb3dUaW1lcjsKICAgICBj
bGFzcyBFdmVudDsKICAgICBjbGFzcyBGcmFtZTsKICAgICBjbGFzcyBKU0RPTVdpbmRvdzsKQEAg
LTM4LDggKzM3LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNzIEpTRXZlbnRMaXN0
ZW5lcjsKICAgICBjbGFzcyBKU0xvY2F0aW9uOwogICAgIGNsYXNzIEpTVW5wcm90ZWN0ZWRFdmVu
dExpc3RlbmVyOwotICAgIGNsYXNzIFBhdXNlZFRpbWVvdXRzOwotICAgIGNsYXNzIFNjaGVkdWxl
ZEFjdGlvbjsKICAgICBjbGFzcyBTZWN1cml0eU9yaWdpbjsKIAogICAgIGNsYXNzIEpTRE9NV2lu
ZG93QmFzZVByaXZhdGU7CkBAIC00OCw3ICs0NSw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAg
ICBjbGFzcyBKU0RPTVdpbmRvd0Jhc2UgOiBwdWJsaWMgSlNET01HbG9iYWxPYmplY3QgewogICAg
ICAgICB0eXBlZGVmIEpTRE9NR2xvYmFsT2JqZWN0IEJhc2U7CiAKLSAgICAgICAgZnJpZW5kIGNs
YXNzIFNjaGVkdWxlZEFjdGlvbjsKICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIEpTRE9NV2luZG93
QmFzZShQYXNzUmVmUHRyPEpTQzo6U3RydWN0dXJlPiwgUGFzc1JlZlB0cjxET01XaW5kb3c+LCBK
U0RPTVdpbmRvd1NoZWxsKik7CiAKQEAgLTY1LDE1ICs2MSw2IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKICAgICAgICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5U2xvdChKU0M6OkV4ZWNTdGF0
ZSosIGNvbnN0IEpTQzo6SWRlbnRpZmllciYsIEpTQzo6UHJvcGVydHlTbG90Jik7CiAgICAgICAg
IHZpcnR1YWwgdm9pZCBwdXQoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBKU0M6OklkZW50aWZpZXIm
IHByb3BlcnR5TmFtZSwgSlNDOjpKU1ZhbHVlKiwgSlNDOjpQdXRQcm9wZXJ0eVNsb3QmKTsKIAot
ICAgICAgICBpbnQgaW5zdGFsbFRpbWVvdXQoY29uc3QgSlNDOjpVU3RyaW5nJiBoYW5kbGVyLCBp
bnQgdCwgYm9vbCBzaW5nbGVTaG90KTsKLSAgICAgICAgaW50IGluc3RhbGxUaW1lb3V0KEpTQzo6
RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlKiBmdW5jdGlvbiwgY29uc3QgSlNDOjpBcmdMaXN0JiBh
cmdzLCBpbnQgdCwgYm9vbCBzaW5nbGVTaG90KTsKLSAgICAgICAgdm9pZCByZW1vdmVUaW1lb3V0
KGludCB0aW1lcklkLCBib29sIGRlbEFjdGlvbiA9IHRydWUpOwotCi0gICAgICAgIHZvaWQgcGF1
c2VUaW1lb3V0cyhPd25QdHI8UGF1c2VkVGltZW91dHM+Jik7Ci0gICAgICAgIHZvaWQgcmVzdW1l
VGltZW91dHMoT3duUHRyPFBhdXNlZFRpbWVvdXRzPiYpOwotCi0gICAgICAgIHZvaWQgdGltZXJG
aXJlZChET01XaW5kb3dUaW1lciopOwotCiAgICAgICAgIHZvaWQgY2xlYXIoKTsKIAogICAgICAg
ICAvLyBTZXQgYSBwbGFjZSB0byBwdXQgYSBkaWFsb2cgcmV0dXJuIHZhbHVlIHdoZW4gdGhlIHdp
bmRvdyBpcyBjbGVhcmVkLgpAQCAtMTAyLDcgKzg5LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
CiAgICAgICAgIHN0YXRpYyBKU0M6OkpTR2xvYmFsRGF0YSogY29tbW9uSlNHbG9iYWxEYXRhKCk7
CiAKLSAgICAgICAgdm9pZCBjbGVhckFsbFRpbWVvdXRzKCk7CisgICAgICAgIHZpcnR1YWwgdm9p
ZCBleGVjdXRlVGltZXJDYWxsYmFja0Z1bmN0aW9uKFNjaGVkdWxlZEFjdGlvbiogYWN0aW9uKTsK
IAogICAgIHByaXZhdGU6CiAgICAgICAgIHN0cnVjdCBKU0RPTVdpbmRvd0Jhc2VEYXRhIDogcHVi
bGljIEpTRE9NR2xvYmFsT2JqZWN0RGF0YSB7CkBAIC0xMTIsOSArOTksNiBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKICAgICAgICAgICAgIEpTQzo6SlNWYWx1ZSoqIHJldHVyblZhbHVlU2xvdDsK
ICAgICAgICAgICAgIEpTRE9NV2luZG93U2hlbGwqIHNoZWxsOwotCi0gICAgICAgICAgICB0eXBl
ZGVmIEhhc2hNYXA8aW50LCBET01XaW5kb3dUaW1lcio+IFRpbWVvdXRzTWFwOwotICAgICAgICAg
ICAgVGltZW91dHNNYXAgdGltZW91dHM7CiAgICAgICAgIH07CiAKICAgICAgICAgc3RhdGljIEpT
Qzo6SlNWYWx1ZSogY2hpbGRGcmFtZUdldHRlcihKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6
SWRlbnRpZmllciYsIGNvbnN0IEpTQzo6UHJvcGVydHlTbG90Jik7CkBAIC0xMjIsNyArMTA2LDYg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlKiBuYW1l
ZEl0ZW1HZXR0ZXIoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBKU0M6OklkZW50aWZpZXImLCBjb25z
dCBKU0M6OlByb3BlcnR5U2xvdCYpOwogCiAgICAgICAgIHZvaWQgY2xlYXJIZWxwZXJPYmplY3RQ
cm9wZXJ0aWVzKCk7Ci0gICAgICAgIGludCBpbnN0YWxsVGltZW91dChTY2hlZHVsZWRBY3Rpb24q
LCBpbnQgaW50ZXJ2YWwsIGJvb2wgc2luZ2xlU2hvdCk7CiAKICAgICAgICAgYm9vbCBhbGxvd3NB
Y2Nlc3NGcm9tUHJpdmF0ZShjb25zdCBKU0M6OkpTR2xvYmFsT2JqZWN0KikgY29uc3Q7CiAgICAg
ICAgIFN0cmluZyBjcm9zc0RvbWFpbkFjY2Vzc0Vycm9yTWVzc2FnZShjb25zdCBKU0M6OkpTR2xv
YmFsT2JqZWN0KikgY29uc3Q7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93
Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93
Q3VzdG9tLmNwcAkocmV2aXNpb24gMzg2MTYpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9N
V2luZG93Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1
ZGUgIkpTRXZlbnRMaXN0ZW5lci5oIgogI2luY2x1ZGUgIkpTTWVzc2FnZVBvcnQuaCIKICNpbmNs
dWRlICJNZXNzYWdlUG9ydC5oIgorI2luY2x1ZGUgIlNjaGVkdWxlZEFjdGlvbi5oIgogI2luY2x1
ZGUgIlNjcmlwdENvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgogI2luY2x1ZGUg
PHJ1bnRpbWUvSlNPYmplY3QuaD4KQEAgLTE3OSwxNCArMTgwLDE3IEBAIHN0YXRpYyBKU1ZhbHVl
KiBzZXRUaW1lb3V0T3JJbnRlcnZhbChFeGUKIHsKICAgICBKU1ZhbHVlKiB2ID0gYXJncy5hdChl
eGVjLCAwKTsKICAgICBpbnQgZGVsYXkgPSBhcmdzLmF0KGV4ZWMsIDEpLT50b0ludDMyKGV4ZWMp
OwotICAgIGlmICh2LT5pc1N0cmluZygpKQotICAgICAgICByZXR1cm4ganNOdW1iZXIoZXhlYywg
d2luZG93LT5pbnN0YWxsVGltZW91dChhc1N0cmluZyh2KS0+dmFsdWUoKSwgZGVsYXksIHRpbWVv
dXQpKTsKKyAgICBpZiAodi0+aXNTdHJpbmcoKSkgeworICAgICAgICBTY2hlZHVsZWRBY3Rpb24q
IGFjdGlvbiA9IG5ldyBTY2hlZHVsZWRBY3Rpb24oYXNTdHJpbmcodiktPnZhbHVlKCkpOworICAg
ICAgICByZXR1cm4ganNOdW1iZXIoZXhlYywgd2luZG93LT5pbXBsKCktPmRvY3VtZW50KCktPmlu
c3RhbGxUaW1lb3V0KGFjdGlvbiwgZGVsYXksIHRpbWVvdXQpKTsKKyAgICB9CiAgICAgQ2FsbERh
dGEgY2FsbERhdGE7CiAgICAgaWYgKHYtPmdldENhbGxEYXRhKGNhbGxEYXRhKSA9PSBDYWxsVHlw
ZU5vbmUpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIEFyZ0xpc3QgYXJnc1Rh
aWw7CiAgICAgYXJncy5nZXRTbGljZSgyLCBhcmdzVGFpbCk7Ci0gICAgcmV0dXJuIGpzTnVtYmVy
KGV4ZWMsIHdpbmRvdy0+aW5zdGFsbFRpbWVvdXQoZXhlYywgdiwgYXJnc1RhaWwsIGRlbGF5LCB0
aW1lb3V0KSk7CisgICAgU2NoZWR1bGVkQWN0aW9uKiBhY3Rpb24gPSBuZXcgU2NoZWR1bGVkQWN0
aW9uKGV4ZWMsIHdpbmRvdywgdiwgYXJnc1RhaWwpOworICAgIHJldHVybiBqc051bWJlcihleGVj
LCB3aW5kb3ctPmltcGwoKS0+ZG9jdW1lbnQoKS0+aW5zdGFsbFRpbWVvdXQoYWN0aW9uLCBkZWxh
eSwgdGltZW91dCkpOwogfQogCiBKU1ZhbHVlKiBKU0RPTVdpbmRvdzo6c2V0VGltZW91dChFeGVj
U3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCkBAIC0xOTYsNyArMjAwLDcgQEAgSlNW
YWx1ZSogSlNET01XaW5kb3c6OnNldFRpbWVvdXQoRXhlY1N0YQogCiBKU1ZhbHVlKiBKU0RPTVdp
bmRvdzo6Y2xlYXJUaW1lb3V0KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykK
IHsKLSAgICByZW1vdmVUaW1lb3V0KGFyZ3MuYXQoZXhlYywgMCktPnRvSW50MzIoZXhlYykpOwor
ICAgIGltcGwoKS0+ZG9jdW1lbnQoKS0+cmVtb3ZlVGltZW91dChhcmdzLmF0KGV4ZWMsIDApLT50
b0ludDMyKGV4ZWMpKTsKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIApAQCAtMjA3LDcg
KzIxMSw3IEBAIEpTVmFsdWUqIEpTRE9NV2luZG93OjpzZXRJbnRlcnZhbChFeGVjU3QKIAogSlNW
YWx1ZSogSlNET01XaW5kb3c6OmNsZWFySW50ZXJ2YWwoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBB
cmdMaXN0JiBhcmdzKQogewotICAgIHJlbW92ZVRpbWVvdXQoYXJncy5hdChleGVjLCAwKS0+dG9J
bnQzMihleGVjKSk7CisgICAgaW1wbCgpLT5kb2N1bWVudCgpLT5yZW1vdmVUaW1lb3V0KGFyZ3Mu
YXQoZXhlYywgMCktPnRvSW50MzIoZXhlYykpOwogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwog
fQogCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyQ29udGV4dC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckNvbnRleHQuY3BwCShyZXZpc2lv
biAzODYxNikKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJDb250ZXh0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUgIkpTTWVzc2FnZUV2ZW50Lmgi
CiAjaW5jbHVkZSAiSlNNZXNzYWdlUG9ydC5oIgogI2luY2x1ZGUgIkpTV29ya2VyTG9jYXRpb24u
aCIKKyNpbmNsdWRlICJTY2hlZHVsZWRBY3Rpb24uaCIKICNpbmNsdWRlICJXb3JrZXJDb250ZXh0
LmgiCiAjaW5jbHVkZSAiV29ya2VyTG9jYXRpb24uaCIKIApAQCAtMTI4LDYgKzEyOSwxMSBAQCB2
b2lkIEpTV29ya2VyQ29udGV4dDo6bWFyaygpCiAgICAgfQogfQogCit2b2lkIEpTV29ya2VyQ29u
dGV4dDo6ZXhlY3V0ZVRpbWVyQ2FsbGJhY2tGdW5jdGlvbihTY2hlZHVsZWRBY3Rpb24qIGFjdGlv
bikKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMuCit9CisKIHN0YXRpYyBjb25zdCBI
YXNoVGFibGUqIGdldEpTV29ya2VyQ29udGV4dFRhYmxlKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAg
ICByZXR1cm4gZ2V0SGFzaFRhYmxlRm9yR2xvYmFsRGF0YShleGVjLT5nbG9iYWxEYXRhKCksICZK
U1dvcmtlckNvbnRleHRUYWJsZSk7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2Vy
Q29udGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJDb250
ZXh0LmgJKHJldmlzaW9uIDM4NjE2KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckNv
bnRleHQuaAkod29ya2luZyBjb3B5KQpAQCAtNTYsNiArNTYsOCBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKICAgICAgICAgdmlydHVhbCB2b2lkIG1hcmsoKTsKIAorICAgICAgICB2aXJ0dWFsIHZv
aWQgZXhlY3V0ZVRpbWVyQ2FsbGJhY2tGdW5jdGlvbihTY2hlZHVsZWRBY3Rpb24qIGFjdGlvbik7
CisgICAgICAgIAogICAgIHByaXZhdGU6CiAgICAgICAgIFJlZlB0cjxXb3JrZXJDb250ZXh0PiBt
X2ltcGw7CiAgICAgfTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvU2NoZWR1bGVkQWN0aW9u
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL1NjaGVkdWxlZEFjdGlvbi5j
cHAJKHJldmlzaW9uIDM4NjE2KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9TY2hlZHVsZWRBY3Rp
b24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw3MiArMjMsMjMgQEAKICNpbmNsdWRlICJjb25m
aWcuaCIKICNpbmNsdWRlICJTY2hlZHVsZWRBY3Rpb24uaCIKIAotI2luY2x1ZGUgIkNTdHJpbmcu
aCIKLSNpbmNsdWRlICJET01XaW5kb3cuaCIKLSNpbmNsdWRlICJEb2N1bWVudC5oIgotI2luY2x1
ZGUgIkZyYW1lLmgiCi0jaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKLSNpbmNsdWRlICJKU0RPTUJp
bmRpbmcuaCIKLSNpbmNsdWRlICJKU0RPTVdpbmRvdy5oIgotI2luY2x1ZGUgIlNjcmlwdENvbnRy
b2xsZXIuaCIKLSNpbmNsdWRlICJTY3JpcHRWYWx1ZS5oIgorI2luY2x1ZGUgPGludGVycHJldGVy
L0NhbGxGcmFtZS5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvQXJnTGlzdC5oPgogI2luY2x1ZGUgPHJ1
bnRpbWUvSlNMb2NrLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBKU0M7CisjaW5jbHVkZSA8cnVudGlt
ZS9KU1ZhbHVlLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotU2NoZWR1bGVkQWN0aW9uOjpT
Y2hlZHVsZWRBY3Rpb24oRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlKiBmdW5jdGlvbiwgY29uc3Qg
QXJnTGlzdCYgYXJncykKLSAgICA6IG1fZnVuY3Rpb24oZnVuY3Rpb24pCi17Ci0gICAgQXJnTGlz
dDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gYXJncy5lbmQoKTsKLSAgICBmb3IgKEFyZ0xpc3Q6OmNv
bnN0X2l0ZXJhdG9yIGl0ID0gYXJncy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAg
IG1fYXJncy5hcHBlbmQoKCppdCkuanNWYWx1ZShleGVjKSk7Ci19Ci0KLXZvaWQgU2NoZWR1bGVk
QWN0aW9uOjpleGVjdXRlKEpTRE9NV2luZG93U2hlbGwqIHdpbmRvd1NoZWxsKQorU2NoZWR1bGVk
QWN0aW9uOjpTY2hlZHVsZWRBY3Rpb24oSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSogZnVuY3Rpb24sIGNvbnN0IEpTQzo6
QXJnTGlzdCYgYXJncykKKyAgICA6IGdsb2JhbE9iamVjdChnbG9iYWxPYmplY3QpCisgICAgLCBm
dW5jdGlvbihmdW5jdGlvbikKIHsKLSAgICBSZWZQdHI8RnJhbWU+IGZyYW1lID0gd2luZG93U2hl
bGwtPndpbmRvdygpLT5pbXBsKCktPmZyYW1lKCk7Ci0gICAgaWYgKCFmcmFtZSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgaWYgKCFmcmFtZS0+c2NyaXB0KCktPmlzRW5hYmxlZCgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBmcmFtZS0+c2NyaXB0KCktPnNldFByb2Nlc3NpbmdUaW1lckNhbGxi
YWNrKHRydWUpOwotCi0gICAgSlNMb2NrIGxvY2soZmFsc2UpOwotCi0gICAgaWYgKG1fZnVuY3Rp
b24pIHsKLSAgICAgICAgQ2FsbERhdGEgY2FsbERhdGE7Ci0gICAgICAgIENhbGxUeXBlIGNhbGxU
eXBlID0gbV9mdW5jdGlvbi0+Z2V0Q2FsbERhdGEoY2FsbERhdGEpOwotICAgICAgICBpZiAoY2Fs
bFR5cGUgIT0gQ2FsbFR5cGVOb25lKSB7Ci0gICAgICAgICAgICBKU0RPTVdpbmRvdyogd2luZG93
ID0gd2luZG93U2hlbGwtPndpbmRvdygpOwotICAgICAgICAgICAgRXhlY1N0YXRlKiBleGVjID0g
d2luZG93LT5nbG9iYWxFeGVjKCk7Ci0KLSAgICAgICAgICAgIEFyZ0xpc3QgYXJnczsKLSAgICAg
ICAgICAgIHNpemVfdCBzaXplID0gbV9hcmdzLnNpemUoKTsKLSAgICAgICAgICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKQotICAgICAgICAgICAgICAgIGFyZ3MuYXBwZW5kKG1f
YXJnc1tpXSk7Ci0KLSAgICAgICAgICAgIHdpbmRvdy0+c3RhcnRUaW1lb3V0Q2hlY2soKTsKLSAg
ICAgICAgICAgIGNhbGwoZXhlYywgbV9mdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhLCB3aW5k
b3dTaGVsbCwgYXJncyk7Ci0gICAgICAgICAgICB3aW5kb3ctPnN0b3BUaW1lb3V0Q2hlY2soKTsK
LSAgICAgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKLSAgICAgICAgICAgICAgICBy
ZXBvcnRDdXJyZW50RXhjZXB0aW9uKGV4ZWMpOwotICAgICAgICB9Ci0gICAgfSBlbHNlCi0gICAg
ICAgIGZyYW1lLT5sb2FkZXIoKS0+ZXhlY3V0ZVNjcmlwdChtX2NvZGUpOwotCi0gICAgLy8gVXBk
YXRlIG91ciBkb2N1bWVudCdzIHJlbmRlcmluZyBmb2xsb3dpbmcgdGhlIGV4ZWN1dGlvbiBvZiB0
aGUgdGltZW91dCBjYWxsYmFjay4KLSAgICAvLyBGSVhNRTogV2h5IG5vdCB1c2UgdXBkYXRlRG9j
dW1lbnRzUmVuZGVyaW5nIHRvIHVwZGF0ZSByZW5kZXJpbmcgb2YgYWxsIGRvY3VtZW50cz8KLSAg
ICAvLyBGSVhNRTogSXMgdGhpcyByZWFsbHkgdGhlIHJpZ2h0IHBvaW50IHRvIGRvIHRoZSB1cGRh
dGU/IFdlIG5lZWQgYSBwbGFjZSB0aGF0IHdvcmtzCi0gICAgLy8gZm9yIGFsbCBwb3NzaWJsZSBl
bnRyeSBwb2ludHMgdGhhdCBtaWdodCBwb3NzaWJseSBleGVjdXRlIHNjcmlwdCwgYnV0IHRoaXMg
c2VlbXMKLSAgICAvLyB0byBiZSBhIGJpdCB0b28gbG93LWxldmVsLgotICAgIGlmIChEb2N1bWVu
dCogZG9jdW1lbnQgPSBmcmFtZS0+ZG9jdW1lbnQoKSkKLSAgICAgICAgZG9jdW1lbnQtPnVwZGF0
ZVJlbmRlcmluZygpOwotCi0gICAgZnJhbWUtPnNjcmlwdCgpLT5zZXRQcm9jZXNzaW5nVGltZXJD
YWxsYmFjayhmYWxzZSk7CisgICAgQVNTRVJUKGV4ZWMpOworICAgIEFTU0VSVChnbG9iYWxPYmpl
Y3QpOworICAgIEFTU0VSVChmdW5jdGlvbik7CisgICAgSlNDOjpBcmdMaXN0Ojpjb25zdF9pdGVy
YXRvciBlbmQgPSBhcmdzLmVuZCgpOworICAgIGZvciAoSlNDOjpBcmdMaXN0Ojpjb25zdF9pdGVy
YXRvciBpdCA9IGFyZ3MuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICBhcmd1bWVu
dHMuYXBwZW5kKCgqaXQpLmpzVmFsdWUoZXhlYykpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL1NjaGVkdWxlZEFjdGlvbi5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvU2NoZWR1bGVkQWN0aW9uLmgJKHJldmlzaW9uIDM4
NjE2KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9TY2hlZHVsZWRBY3Rpb24uaAkod29ya2luZyBj
b3B5KQpAQCAtMjAsMzIgKzIwLDI5IEBACiAjaWZuZGVmIFNjaGVkdWxlZEFjdGlvbl9oCiAjZGVm
aW5lIFNjaGVkdWxlZEFjdGlvbl9oCiAKKyNpbmNsdWRlICJKU0RPTUdsb2JhbE9iamVjdC5oIgog
I2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAjaW5jbHVkZSA8cnVudGltZS9Qcm90ZWN0Lmg+
CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi0gICAgY2xhc3MgSlNET01XaW5kb3dTaGVsbDsKLQogICAgLyog
QW4gYWN0aW9uIChlaXRoZXIgZnVuY3Rpb24gb3Igc3RyaW5nKSB0byBiZSBleGVjdXRlZCBhZnRl
ciBhIHNwZWNpZmllZAotICAgICogdGltZSBpbnRlcnZhbCwgZWl0aGVyIG9uY2Ugb3IgcmVwZWF0
ZWRseS4gVXNlZCBmb3Igd2luZG93LnNldFRpbWVvdXQoKQotICAgICogYW5kIHdpbmRvdy5zZXRJ
bnRlcnZhbCgpCisgICAgKiB0aW1lIGludGVydmFsLCBlaXRoZXIgb25jZSBvciByZXBlYXRlZGx5
LiBVc2VkIGZvciBzZXRUaW1lb3V0KCksCisgICAgKiBzZXRJbnRlcnZhbCgpIG9uIHdpbmRvdyBh
bmQgaW4gd29ya2Vycy4KICAgICAqLwotICAgIGNsYXNzIFNjaGVkdWxlZEFjdGlvbiB7Ci0gICAg
cHVibGljOgotICAgICAgICBTY2hlZHVsZWRBY3Rpb24oSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpT
Qzo6SlNWYWx1ZSogZnVuY3Rpb24sIGNvbnN0IEpTQzo6QXJnTGlzdCYpOworICAgIHN0cnVjdCBT
Y2hlZHVsZWRBY3Rpb24geworICAgICAgICBTY2hlZHVsZWRBY3Rpb24oSlNDOjpFeGVjU3RhdGUq
IGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSogZnVu
Y3Rpb24sIGNvbnN0IEpTQzo6QXJnTGlzdCYpOwogICAgICAgICBTY2hlZHVsZWRBY3Rpb24oY29u
c3QgU3RyaW5nJiBjb2RlKQotICAgICAgICAgICAgOiBtX2NvZGUoY29kZSkKKyAgICAgICAgICAg
IDogY29kZShjb2RlKQogICAgICAgICB7CiAgICAgICAgIH0KIAotICAgICAgICB2b2lkIGV4ZWN1
dGUoSlNET01XaW5kb3dTaGVsbCopOwotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgSlNDOjpQcm90
ZWN0ZWRQdHI8SlNDOjpKU1ZhbHVlPiBtX2Z1bmN0aW9uOwotICAgICAgICBWZWN0b3I8SlNDOjpQ
cm90ZWN0ZWRQdHI8SlNDOjpKU1ZhbHVlPiA+IG1fYXJnczsKLSAgICAgICAgU3RyaW5nIG1fY29k
ZTsKKyAgICAgICAgSlNDOjpQcm90ZWN0ZWRQdHI8SlNET01HbG9iYWxPYmplY3Q+IGdsb2JhbE9i
amVjdDsKKyAgICAgICAgSlNDOjpQcm90ZWN0ZWRQdHI8SlNDOjpKU1ZhbHVlPiBmdW5jdGlvbjsK
KyAgICAgICAgVmVjdG9yPEpTQzo6UHJvdGVjdGVkUHRyPEpTQzo6SlNWYWx1ZT4gPiBhcmd1bWVu
dHM7CisgICAgICAgIFN0cmluZyBjb2RlOwogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmNwcAkocmV2aXNp
b24gMzg2MTYpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zNTAsMjMgKzM1MCwyMyBAQCB2b2lkIFNjcmlwdENvbnRyb2xsZXI6
OmNsZWFyU2NyaXB0T2JqZWN0CiAKIHZvaWQgU2NyaXB0Q29udHJvbGxlcjo6cGF1c2VUaW1lb3V0
cyhPd25QdHI8UGF1c2VkVGltZW91dHM+JiByZXN1bHQpCiB7Ci0gICAgaWYgKCFoYXZlV2luZG93
U2hlbGwoKSkgeworICAgIGlmICghbV9mcmFtZS0+ZG9jdW1lbnQoKSkgewogICAgICAgICByZXN1
bHQuY2xlYXIoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIHdpbmRvd1NoZWxsKCkt
PndpbmRvdygpLT5wYXVzZVRpbWVvdXRzKHJlc3VsdCk7CisgICAgbV9mcmFtZS0+ZG9jdW1lbnQo
KS0+cGF1c2VUaW1lb3V0cyhyZXN1bHQpOwogfQogCiB2b2lkIFNjcmlwdENvbnRyb2xsZXI6OnJl
c3VtZVRpbWVvdXRzKE93blB0cjxQYXVzZWRUaW1lb3V0cz4mIHBhdXNlZFRpbWVvdXRzKQogewot
ICAgIGlmICghaGF2ZVdpbmRvd1NoZWxsKCkpIHsKKyAgICBpZiAoIW1fZnJhbWUtPmRvY3VtZW50
KCkpIHsKICAgICAgICAgLy8gQ2FsbGVycyBjYW4gYXNzdW1lIHdlIHdpbGwgYWx3YXlzIGNsZWFy
IHRoZSBwYXNzZWQgaW4gdGltZW91dHMKICAgICAgICAgcGF1c2VkVGltZW91dHMuY2xlYXIoKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIHdpbmRvd1NoZWxsKCktPndpbmRvdygpLT5y
ZXN1bWVUaW1lb3V0cyhwYXVzZWRUaW1lb3V0cyk7CisgICAgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+
cmVzdW1lVGltZW91dHMocGF1c2VkVGltZW91dHMpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuaAkocmV2aXNpb24g
Mzg2MTYpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNTQsNiArNTQsNyBAQCBjbGFzcyBFdmVudExpc3RlbmVyOwogY2xhc3MgSFRN
TFBsdWdJbkVsZW1lbnQ7CiBjbGFzcyBGcmFtZTsKIGNsYXNzIE5vZGU7CitjbGFzcyBQYXVzZWRU
aW1lb3V0czsKIGNsYXNzIFNjcmlwdFZhbHVlOwogY2xhc3MgU3RyaW5nOwogY2xhc3MgV2lkZ2V0
OwpJbmRleDogV2ViQ29yZS9kb20vRE9NVGltZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
ZG9tL0RPTVRpbWVyLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvZG9tL0RPTVRpbWVyLmNw
cAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDggQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICoKKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiRE9NVGltZXIuaCIKKworI2luY2x1ZGUgIlNjaGVkdWxlZEFj
dGlvbi5oIgorI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKKyNpbmNsdWRlIDxy
dW50aW1lL0pTTG9jay5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0RPTVRpbWVyOjpET01U
aW1lcihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBpbnQgdGltZW91dElkLCBpbnQg
bmVzdGluZ0xldmVsLCBTY2hlZHVsZWRBY3Rpb24qIGFjdGlvbikKKyAgICA6IG1fY29udGV4dChj
b250ZXh0KQorICAgICwgbV90aW1lb3V0SWQodGltZW91dElkKQorICAgICwgbV9uZXN0aW5nTGV2
ZWwobmVzdGluZ0xldmVsKQorICAgICwgbV9hY3Rpb24oYWN0aW9uKQoreworICAgIEFTU0VSVChj
b250ZXh0KTsKKyAgICBBU1NFUlQoYWN0aW9uKTsKK30KKworRE9NVGltZXI6On5ET01UaW1lcigp
Cit7CisgICAgSlNDOjpKU0xvY2sgbG9jayhmYWxzZSk7CisgICAgZGVsZXRlIG1fYWN0aW9uOwor
fQorCitzdGF0aWMgdm9pZCBleGVjdXRlQ2FsbGJhY2tJbkNvbnRleHQoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCogY29udGV4dCwgU2NoZWR1bGVkQWN0aW9uKiBhY3Rpb24sIGludCBuZXN0aW5nTGV2
ZWwpCit7CisgICAgY29udGV4dC0+c2V0VGltZXJOZXN0aW5nTGV2ZWwobmVzdGluZ0xldmVsKTsK
KyAgICBjb250ZXh0LT5leGVjdXRlVGltZXJDYWxsYmFjayhhY3Rpb24pOworICAgIGNvbnRleHQt
PnNldFRpbWVyTmVzdGluZ0xldmVsKDApOworfQorCit2b2lkIERPTVRpbWVyOjpmaXJlSW50ZXJ2
YWwoKQoreworICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0ID0gbV9jb250ZXh0Owor
ICBpbnQgdGltZW91dElkID0gbV90aW1lb3V0SWQ7CisgIC8vIFRoZSBET01UaW1lciBvYmplY3Qg
bWF5IGhhdmUgYmVlbiBkZWxldGVkIG9yIHJlcGxhY2VkIGR1cmluZyBleGVjdXRpb24sCisgIC8v
IHNvIHdlIHJlLWZldGNoIGl0LgorICBleGVjdXRlQ2FsbGJhY2tJbkNvbnRleHQoY29udGV4dCwg
bV9hY3Rpb24sIG1fbmVzdGluZ0xldmVsKTsKKyAgLy8gTm8gYWNjZXNzIHRvIG1lbWJlciB2YXJp
YWJsZXMgYmV5b25kIHRoaXMgcG9pbnQhCisgIERPTVRpbWVyKiB0aW1lciA9IGNvbnRleHQtPmdl
dFRpbWVvdXQodGltZW91dElkKTsKKyAgaWYgKCF0aW1lcikKKyAgICAgIHJldHVybjsKKworICBp
ZiAodGltZXItPnJlcGVhdEludGVydmFsKCkgJiYgdGltZXItPnJlcGVhdEludGVydmFsKCkgPCBj
TWluaW11bVRpbWVySW50ZXJ2YWwpIHsKKyAgICAgIHRpbWVyLT5zZXROZXN0aW5nTGV2ZWwodGlt
ZXItPm5lc3RpbmdMZXZlbCgpICsgMSk7CisgICAgICBpZiAodGltZXItPm5lc3RpbmdMZXZlbCgp
ID49IGNNYXhUaW1lck5lc3RpbmdMZXZlbCkKKyAgICAgICAgICB0aW1lci0+YXVnbWVudFJlcGVh
dEludGVydmFsKGNNaW5pbXVtVGltZXJJbnRlcnZhbCAtIHRpbWVyLT5yZXBlYXRJbnRlcnZhbCgp
KTsKKyAgfQorfQorCit2b2lkIERPTVRpbWVyOjpmaXJlVGltZW91dCgpCit7CisgIFNjaGVkdWxl
ZEFjdGlvbiogYWN0aW9uID0gdGFrZUFjdGlvbigpOworICBTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiBjb250ZXh0ID0gbV9jb250ZXh0OworICAvLyBEZWxldGUgdGltZXIgYmVmb3JlIGV4ZWN1dGlu
ZyB0aGUgYWN0aW9uIGZvciBvbmUtc2hvdCB0aW1lcnMuCisgIGNvbnRleHQtPnJlbW92ZVRpbWVv
dXQobV90aW1lb3V0SWQpOworICAvLyBObyBhY2Nlc3MgdG8gbWVtYmVyIHZhcmlhYmxlcyBiZXlv
bmQgdGhpcyBwb2ludCEKKworICBleGVjdXRlQ2FsbGJhY2tJbkNvbnRleHQoY29udGV4dCwgYWN0
aW9uLCBtX25lc3RpbmdMZXZlbCk7CisKKyAgSlNDOjpKU0xvY2sgbG9jayhmYWxzZSk7CisgIGRl
bGV0ZSBhY3Rpb247Cit9CisKK3ZvaWQgRE9NVGltZXI6OmZpcmVkKCkKK3sKKyAgICBpZiAoaXNB
Y3RpdmUoKSkKKyAgICAgIGZpcmVJbnRlcnZhbCgpOyAgLy8gcmVwZWF0aW5nCisgICAgZWxzZQor
ICAgICAgZmlyZVRpbWVvdXQoKTsgICAvLyBvbmUtdGltZQorfQorCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCkluZGV4OiBXZWJDb3JlL2RvbS9ET01UaW1lci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvZG9tL0RPTVRpbWVyLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL2RvbS9ET01UaW1lci5o
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDY3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4
IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKi8KKworI2lmbmRlZiBET01U
aW1lcl9oCisjZGVmaW5lIERPTVRpbWVyX2gKKworI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5o
IgorI2luY2x1ZGUgIlRpbWVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RydWN0IFNj
aGVkdWxlZEFjdGlvbjsKK2NsYXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7CisKK2NvbnN0IGlu
dCBjTWF4VGltZXJOZXN0aW5nTGV2ZWwgPSA1OworY29uc3QgZG91YmxlIGNNaW5pbXVtVGltZXJJ
bnRlcnZhbCA9IDAuMDEwOworCitjbGFzcyBET01UaW1lciA6IHB1YmxpYyBUaW1lckJhc2Ugewor
cHVibGljOgorICAgIERPTVRpbWVyKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGlu
dCB0aW1lb3V0SWQsIGludCBuZXN0aW5nTGV2ZWwsIFNjaGVkdWxlZEFjdGlvbiogYWN0aW9uKTsK
KyAgICB2aXJ0dWFsIH5ET01UaW1lcigpOworCisgICAgdm9pZCBmaXJlSW50ZXJ2YWwoKTsKKyAg
ICB2b2lkIGZpcmVUaW1lb3V0KCk7CisKKyAgICBpbnQgbmVzdGluZ0xldmVsKCkgY29uc3QgeyBy
ZXR1cm4gbV9uZXN0aW5nTGV2ZWw7IH0KKyAgICB2b2lkIHNldE5lc3RpbmdMZXZlbChpbnQgbikg
eyBtX25lc3RpbmdMZXZlbCA9IG47IH0KKworICAgIFNjaGVkdWxlZEFjdGlvbiogYWN0aW9uKCkg
Y29uc3QgeyByZXR1cm4gbV9hY3Rpb247IH0KKyAgICBTY2hlZHVsZWRBY3Rpb24qIHRha2VBY3Rp
b24oKSB7IFNjaGVkdWxlZEFjdGlvbiogdGVtcCA9IG1fYWN0aW9uOyBtX2FjdGlvbiA9IDA7IHJl
dHVybiB0ZW1wOyB9CisKK3ByaXZhdGU6CisgICAgdmlydHVhbCB2b2lkIGZpcmVkKCk7CisKKyAg
ICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBtX2NvbnRleHQ7CisgICAgaW50IG1fdGltZW91dElk
OworICAgIGludCBtX25lc3RpbmdMZXZlbDsKKyAgICBTY2hlZHVsZWRBY3Rpb24qIG1fYWN0aW9u
OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRE9NVGltZXJfaAor
CkluZGV4OiBXZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9k
b20vRG9jdW1lbnQuY3BwCShyZXZpc2lvbiAzODYxNikKKysrIFdlYkNvcmUvZG9tL0RvY3VtZW50
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTUsNiArOTUsOCBAQAogI2luY2x1ZGUgIlJlbmRlckFy
ZW5hLmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgogI2luY2x1ZGUgIlJlbmRlcldpZGdldC5o
IgorI2luY2x1ZGUgIlNjaGVkdWxlZEFjdGlvbi5oIgorI2luY2x1ZGUgIlNjcmlwdFZhbHVlLmgi
CiAjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKICNpbmNsdWRlICJTZWdtZW50ZWRTdHJpbmcu
aCIKICNpbmNsdWRlICJTZWxlY3Rpb25Db250cm9sbGVyLmgiCkBAIC00MzQ0LDYgKzQzNDYsMzQg
QEAgdm9pZCBEb2N1bWVudDo6c3RvcERhdGFiYXNlcygpCiAKICNlbmRpZgogCit2b2lkIERvY3Vt
ZW50OjpleGVjdXRlVGltZXJDYWxsYmFjayhTY2hlZHVsZWRBY3Rpb24qIGFjdGlvbikKK3sKKyAg
ICBSZWZQdHI8RnJhbWU+IGZyYW1lID0gbV9mcmFtZTsKKyAgICBpZiAoIWZyYW1lKQorICAgICAg
ICByZXR1cm47CisKKyAgICBpZiAoIWZyYW1lLT5zY3JpcHQoKS0+aXNFbmFibGVkKCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIGZyYW1lLT5zY3JpcHQoKS0+c2V0UHJvY2Vzc2luZ1RpbWVyQ2Fs
bGJhY2sodHJ1ZSk7CisKKyAgICBpZiAoYWN0aW9uLT5mdW5jdGlvbikgeworICAgICAgICBBU1NF
UlQoYWN0aW9uLT5nbG9iYWxPYmplY3QuZ2V0KCkpOworICAgICAgICBhY3Rpb24tPmdsb2JhbE9i
amVjdC5nZXQoKS0+ZXhlY3V0ZVRpbWVyQ2FsbGJhY2tGdW5jdGlvbihhY3Rpb24pOworICAgIH0g
ZWxzZSB7CisgICAgICAgIGZyYW1lLT5sb2FkZXIoKS0+ZXhlY3V0ZVNjcmlwdChhY3Rpb24tPmNv
ZGUpOworICAgIH0KKworICAgIC8vIFVwZGF0ZSBvdXIgZG9jdW1lbnQncyByZW5kZXJpbmcgZm9s
bG93aW5nIHRoZSBleGVjdXRpb24gb2YgdGhlIHRpbWVvdXQgY2FsbGJhY2suCisgICAgLy8gRklY
TUU6IFdoeSBub3QgdXNlIHVwZGF0ZURvY3VtZW50c1JlbmRlcmluZyB0byB1cGRhdGUgcmVuZGVy
aW5nIG9mIGFsbCBkb2N1bWVudHM/CisgICAgLy8gRklYTUU6IElzIHRoaXMgcmVhbGx5IHRoZSBy
aWdodCBwb2ludCB0byBkbyB0aGUgdXBkYXRlPyBXZSBuZWVkIGEgcGxhY2UgdGhhdCB3b3Jrcwor
ICAgIC8vIGZvciBhbGwgcG9zc2libGUgZW50cnkgcG9pbnRzIHRoYXQgbWlnaHQgcG9zc2libHkg
ZXhlY3V0ZSBzY3JpcHQsIGJ1dCB0aGlzIHNlZW1zCisgICAgLy8gdG8gYmUgYSBiaXQgdG9vIGxv
dy1sZXZlbC4KKyAgICB1cGRhdGVSZW5kZXJpbmcoKTsKKworICAgIGZyYW1lLT5zY3JpcHQoKS0+
c2V0UHJvY2Vzc2luZ1RpbWVyQ2FsbGJhY2soZmFsc2UpOworfQorCiB2b2lkIERvY3VtZW50Ojph
dHRhY2hSYW5nZShSYW5nZSogcmFuZ2UpCiB7CiAgICAgQVNTRVJUKCFtX3Jhbmdlcy5jb250YWlu
cyhyYW5nZSkpOwpJbmRleDogV2ViQ29yZS9kb20vRG9jdW1lbnQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2RvbS9Eb2N1bWVudC5oCShyZXZpc2lvbiAzODYxNikKKysrIFdlYkNvcmUvZG9tL0Rv
Y3VtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTk3LDYgKzk3LDcgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogICAgIGNsYXNzIFJhbmdlOwogICAgIGNsYXNzIFJlZ2lzdGVyZWRFdmVudExpc3RlbmVy
OwogICAgIGNsYXNzIFJlbmRlckFyZW5hOworICAgIHN0cnVjdCBTY2hlZHVsZWRBY3Rpb247CiAg
ICAgY2xhc3MgU2VjdXJpdHlPcmlnaW47CiAgICAgY2xhc3MgU2V0dGluZ3M7CiAgICAgY2xhc3Mg
U3R5bGVTaGVldDsKQEAgLTEwMDMsNiArMTAwNCw4IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFVz
aW5nR2VvbG9jYXRpb24oYm9vbCBmKSB7IG1fdXNpbmdHZW9sb2NhdGlvbiA9IGY7IH0KICAgICBi
b29sIHVzaW5nR2VvbG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX3VzaW5nR2VvbG9jYXRpb247
IH07CiAgICAgCisgICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVUaW1lckNhbGxiYWNrKFNjaGVkdWxl
ZEFjdGlvbiogYWN0aW9uKTsKKwogcHJvdGVjdGVkOgogICAgIHZvaWQgY2xlYXJYTUxWZXJzaW9u
KCkgeyBtX3htbFZlcnNpb24gPSBTdHJpbmcoKTsgfQogCkluZGV4OiBXZWJDb3JlL2RvbS9TY3Jp
cHRFeGVjdXRpb25Db250ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9TY3JpcHRF
eGVjdXRpb25Db250ZXh0LmNwcAkocmV2aXNpb24gMzg2MTYpCisrKyBXZWJDb3JlL2RvbS9TY3Jp
cHRFeGVjdXRpb25Db250ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsOSArMjgsMTEgQEAK
ICNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCiAKICNpbmNsdWRlICJBY3RpdmVE
T01PYmplY3QuaCIKKyNpbmNsdWRlICJTY2hlZHVsZWRBY3Rpb24uaCIKICNpbmNsdWRlICJEb2N1
bWVudC5oIgorI2luY2x1ZGUgIkRPTVRpbWVyLmgiCiAjaW5jbHVkZSAiTWVzc2FnZVBvcnQuaCIK
LSNpbmNsdWRlICJUaW1lci5oIgorI2luY2x1ZGUgIlBhdXNlZFRpbWVvdXRzLmgiCiAjaW5jbHVk
ZSAiV29ya2VyQ29udGV4dC5oIgogI2luY2x1ZGUgIldvcmtlclRhc2suaCIKICNpbmNsdWRlICJX
b3JrZXJUaHJlYWQuaCIKQEAgLTUzLDYgKzU1LDggQEAgcHVibGljOgogfTsKIAogU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dDo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpCisgICAgOiBtX2xhc3RVc2Vk
VGltZW91dElkKDApCisgICAgLCBtX3RpbWVyTmVzdGluZ0xldmVsKDApCiB7CiB9CiAKQEAgLTIx
OSw0ICsyMjMsOTIgQEAgdm9pZCBTY3JpcHRFeGVjdXRpb25Db250ZXh0Ojpwb3N0VGFzayhQYQog
ICAgIH0KIH0KIAordm9pZCBTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpjbGVhckFsbFRpbWVvdXRz
KCkKK3sKKyAgICBkZWxldGVBbGxWYWx1ZXMobV90aW1lb3V0cyk7CisgICAgbV90aW1lb3V0cy5j
bGVhcigpOworfQorCitpbnQgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6aW5zdGFsbFRpbWVvdXQo
U2NoZWR1bGVkQWN0aW9uKiBhLCBpbnQgdCwgYm9vbCBzaW5nbGVTaG90KQoreworICAgIGludCB0
aW1lb3V0SWQgPSArK21fbGFzdFVzZWRUaW1lb3V0SWQ7CisKKyAgICAvLyBhdm9pZCB3cmFwYXJv
dW5kIGdvaW5nIG5lZ2F0aXZlIG9uIHVzCisgICAgaWYgKHRpbWVvdXRJZCA8PSAwKQorICAgICAg
ICB0aW1lb3V0SWQgPSBtX2xhc3RVc2VkVGltZW91dElkID0gMTsKKworICAgIGludCBuZXN0TGV2
ZWwgPSBtX3RpbWVyTmVzdGluZ0xldmVsICsgMTsKKyAgICBET01UaW1lciogdGltZXIgPSBuZXcg
RE9NVGltZXIodGhpcywgdGltZW91dElkLCBuZXN0TGV2ZWwsIGEpOworICAgIEFTU0VSVCghbV90
aW1lb3V0cy5nZXQodGltZW91dElkKSk7CisgICAgbV90aW1lb3V0cy5zZXQodGltZW91dElkLCB0
aW1lcik7CisgICAgLy8gVXNlIGEgbWluaW11bSBpbnRlcnZhbCBvZiAxMCBtcyB0byBtYXRjaCBv
dGhlciBicm93c2VycywgYnV0IG9ubHkgb25jZSB3ZSd2ZQorICAgIC8vIG5lc3RlZCBlbm91Z2gg
dG8gbm90aWNlIHRoYXQgd2UncmUgcmVwZWF0aW5nLgorICAgIC8vIEZhc3RlciB0aW1lcnMgbWln
aHQgYmUgImJldHRlciIsIGJ1dCB0aGV5J3JlIGluY29tcGF0aWJsZS4KKyAgICBpZiAodCA8IDEp
CisgICAgICB0ID0gMTsKKyAgICBkb3VibGUgaW50ZXJ2YWwgPSB0ICogMC4wMDE7CisKKyAgICBp
ZiAoaW50ZXJ2YWwgPCBjTWluaW11bVRpbWVySW50ZXJ2YWwgJiYgbmVzdExldmVsID49IGNNYXhU
aW1lck5lc3RpbmdMZXZlbCkKKyAgICAgICAgaW50ZXJ2YWwgPSBjTWluaW11bVRpbWVySW50ZXJ2
YWw7CisgICAgaWYgKHNpbmdsZVNob3QpCisgICAgICAgIHRpbWVyLT5zdGFydE9uZVNob3QoaW50
ZXJ2YWwpOworICAgIGVsc2UKKyAgICAgICAgdGltZXItPnN0YXJ0UmVwZWF0aW5nKGludGVydmFs
KTsKKyAgICByZXR1cm4gdGltZW91dElkOworfQorCit2b2lkIFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQ6OnBhdXNlVGltZW91dHMoT3duUHRyPFBhdXNlZFRpbWVvdXRzPiYgcmVzdWx0KQoreworICAg
IHNpemVfdCB0aW1lb3V0c0NvdW50ID0gbV90aW1lb3V0cy5zaXplKCk7CisgICAgaWYgKCF0aW1l
b3V0c0NvdW50KSB7CisgICAgICAgIHJlc3VsdC5jbGVhcigpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgUGF1c2VkVGltZW91dCogdCA9IG5ldyBQYXVzZWRUaW1lb3V0W3RpbWVvdXRz
Q291bnRdOworICAgIHJlc3VsdC5zZXQobmV3IFBhdXNlZFRpbWVvdXRzKHQsIHRpbWVvdXRzQ291
bnQpKTsKKworICAgIFRpbWVvdXRzTWFwOjppdGVyYXRvciBpdCA9IG1fdGltZW91dHMuYmVnaW4o
KTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSAhPSB0aW1lb3V0c0NvdW50OyArK2ksICsraXQp
IHsKKyAgICAgICAgaW50IHRpbWVvdXRJZCA9IGl0LT5maXJzdDsKKyAgICAgICAgRE9NVGltZXIq
IHRpbWVyID0gaXQtPnNlY29uZDsKKyAgICAgICAgdFtpXS50aW1lb3V0SWQgPSB0aW1lb3V0SWQ7
CisgICAgICAgIHRbaV0ubmVzdGluZ0xldmVsID0gdGltZXItPm5lc3RpbmdMZXZlbCgpOworICAg
ICAgICB0W2ldLm5leHRGaXJlSW50ZXJ2YWwgPSB0aW1lci0+bmV4dEZpcmVJbnRlcnZhbCgpOwor
ICAgICAgICB0W2ldLnJlcGVhdEludGVydmFsID0gdGltZXItPnJlcGVhdEludGVydmFsKCk7Cisg
ICAgICAgIHRbaV0uYWN0aW9uID0gdGltZXItPnRha2VBY3Rpb24oKTsKKyAgICB9CisgICAgQVNT
RVJUKGl0ID09IG1fdGltZW91dHMuZW5kKCkpOworCisgICAgZGVsZXRlQWxsVmFsdWVzKG1fdGlt
ZW91dHMpOworICAgIG1fdGltZW91dHMuY2xlYXIoKTsKK30KKwordm9pZCBTY3JpcHRFeGVjdXRp
b25Db250ZXh0OjpyZXN1bWVUaW1lb3V0cyhPd25QdHI8UGF1c2VkVGltZW91dHM+JiB0aW1lb3V0
cykKK3sKKyAgICBpZiAoIXRpbWVvdXRzKQorICAgICAgICByZXR1cm47CisgICAgc2l6ZV90IGNv
dW50ID0gdGltZW91dHMtPm51bVRpbWVvdXRzKCk7CisgICAgUGF1c2VkVGltZW91dCogYXJyYXkg
PSB0aW1lb3V0cy0+dGFrZVRpbWVvdXRzKCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgIT0g
Y291bnQ7ICsraSkgeworICAgICAgICBpbnQgdGltZW91dElkID0gYXJyYXlbaV0udGltZW91dElk
OworICAgICAgICBET01UaW1lciogdGltZXIgPSBuZXcgRE9NVGltZXIodGhpcywgdGltZW91dElk
LCBhcnJheVtpXS5uZXN0aW5nTGV2ZWwsIGFycmF5W2ldLmFjdGlvbik7CisgICAgICAgIG1fdGlt
ZW91dHMuc2V0KHRpbWVvdXRJZCwgdGltZXIpOworICAgICAgICB0aW1lci0+c3RhcnQoYXJyYXlb
aV0ubmV4dEZpcmVJbnRlcnZhbCwgYXJyYXlbaV0ucmVwZWF0SW50ZXJ2YWwpOworICAgIH0KKyAg
ICBkZWxldGUgW10gYXJyYXk7CisgICAgdGltZW91dHMuY2xlYXIoKTsKK30KKwordm9pZCBTY3Jp
cHRFeGVjdXRpb25Db250ZXh0OjpyZW1vdmVUaW1lb3V0KGludCB0aW1lb3V0SWQpCit7CisgICAg
Ly8gdGltZW91dCBJRHMgaGF2ZSB0byBiZSBwb3NpdGl2ZSwgYW5kIDAgYW5kIC0xIGFyZSB1bnNh
ZmUgdG8KKyAgICAvLyBldmVuIGxvb2sgdXAgc2luY2UgdGhleSBhcmUgdGhlIGVtcHR5IGFuZCBk
ZWxldGVkIHZhbHVlCisgICAgLy8gcmVzcGVjdGl2ZWx5CisgICAgaWYgKHRpbWVvdXRJZCA8PSAw
KQorICAgICAgICByZXR1cm47CisKKyAgICBkZWxldGUgbV90aW1lb3V0cy50YWtlKHRpbWVvdXRJ
ZCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvZG9tL1Njcmlw
dEV4ZWN1dGlvbkNvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9TY3JpcHRFeGVj
dXRpb25Db250ZXh0LmgJKHJldmlzaW9uIDM4NjE2KQorKysgV2ViQ29yZS9kb20vU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAjaWZuZGVm
IFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRfaAogI2RlZmluZSBTY3JpcHRFeGVjdXRpb25Db250ZXh0
X2gKIAorI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+
CiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgpA
QCAtMzUsOCArMzYsMTEgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgIGNsYXNzIEFjdGl2
ZURPTU9iamVjdDsKKyAgICBjbGFzcyBET01UaW1lcjsKICAgICBjbGFzcyBNZXNzYWdlUG9ydDsK
ICAgICBjbGFzcyBLVVJMOworICAgIGNsYXNzIFBhdXNlZFRpbWVvdXRzOworICAgIHN0cnVjdCBT
Y2hlZHVsZWRBY3Rpb247CiAgICAgY2xhc3MgU2VjdXJpdHlPcmlnaW47CiAgICAgY2xhc3MgU3Ry
aW5nOwogCkBAIC03Nyw2ICs4MSwyMiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAg
dm9pZCBwb3N0VGFzayhQYXNzUmVmUHRyPFRhc2s+KTsgLy8gRXhlY3V0ZXMgdGhlIHRhc2sgb24g
Y29udGV4dCdzIHRocmVhZCBhc3luY2hyb25vdXNseS4KIAorICAgICAgICAvLyBJbXBsZW1lbnRh
dGlvbiBvZiBzZXRUaW1lb3V0L3NldEludGVydmFsL2NsZWFyVGltZW91dC9jbGFlckludGVydmFs
LgorICAgICAgICBpbnQgaW5zdGFsbFRpbWVvdXQoU2NoZWR1bGVkQWN0aW9uKiBhLCBpbnQgdCwg
Ym9vbCBzaW5nbGVTaG90KTsKKyAgICAgICAgdm9pZCByZW1vdmVUaW1lb3V0KGludCB0aW1lb3V0
SWQpOworCisgICAgICAgIHZvaWQgcGF1c2VUaW1lb3V0cyhPd25QdHI8UGF1c2VkVGltZW91dHM+
Jik7CisgICAgICAgIHZvaWQgcmVzdW1lVGltZW91dHMoT3duUHRyPFBhdXNlZFRpbWVvdXRzPiYp
OworICAgICAgICB2b2lkIGNsZWFyQWxsVGltZW91dHMoKTsKKworICAgICAgICBET01UaW1lciog
Z2V0VGltZW91dChpbnQgdGltZW91dElkKSB7IHJldHVybiBtX3RpbWVvdXRzLmdldCh0aW1lb3V0
SWQpOyB9CisgICAgICAgIGJvb2wgaGFzVGltZW91dHMoKSBjb25zdCB7IHJldHVybiAhbV90aW1l
b3V0cy5pc0VtcHR5KCk7IH0KKyAgICAgICAgdm9pZCBzZXRUaW1lck5lc3RpbmdMZXZlbChpbnQg
bGV2ZWwpIHsgbV90aW1lck5lc3RpbmdMZXZlbCA9IGxldmVsOyB9CisgICAgICAgIGludCB0aW1l
ck5lc3RpbmdMZXZlbCgpIHsgcmV0dXJuIG1fdGltZXJOZXN0aW5nTGV2ZWw7IH0KKworICAgICAg
ICAvLyBDYWxsYmFjayBmb3Igc2V0VGltZXIvc2V0SW50ZXJ2YWwuCisgICAgICAgIHZpcnR1YWwg
dm9pZCBleGVjdXRlVGltZXJDYWxsYmFjayhTY2hlZHVsZWRBY3Rpb24qIGFjdGlvbikgPSAwOwor
CiAgICAgcHJpdmF0ZToKICAgICAgICAgdmlydHVhbCBjb25zdCBLVVJMJiB2aXJ0dWFsVVJMKCkg
Y29uc3QgPSAwOwogCkBAIC04NCw2ICsxMDQsMTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAg
ICAgICAgIEhhc2hNYXA8QWN0aXZlRE9NT2JqZWN0Kiwgdm9pZCo+IG1fYWN0aXZlRE9NT2JqZWN0
czsKIAorICAgICAgICB0eXBlZGVmIEhhc2hNYXA8aW50LCBET01UaW1lcio+IFRpbWVvdXRzTWFw
OworICAgICAgICBUaW1lb3V0c01hcCBtX3RpbWVvdXRzOworICAgICAgICBpbnQgbV9sYXN0VXNl
ZFRpbWVvdXRJZDsKKyAgICAgICAgaW50IG1fdGltZXJOZXN0aW5nTGV2ZWw7CisKICAgICAgICAg
dmlydHVhbCB2b2lkIHJlZlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSA9IDA7CiAgICAgICAgIHZp
cnR1YWwgdm9pZCBkZXJlZlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSA9IDA7CiAgICAgfTsKSW5k
ZXg6IFdlYkNvcmUvZG9tL1dvcmtlckNvbnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
ZG9tL1dvcmtlckNvbnRleHQuY3BwCShyZXZpc2lvbiAzODYxNikKKysrIFdlYkNvcmUvZG9tL1dv
cmtlckNvbnRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MCw2ICs4MCwxMCBAQCBLVVJMIFdv
cmtlckNvbnRleHQ6OmNvbXBsZXRlVVJMKGNvbnN0IFN0CiAKIGJvb2wgV29ya2VyQ29udGV4dDo6
aGFzUGVuZGluZ0FjdGl2aXR5KCkgY29uc3QKIHsKKyAgICAvLyBBbnkgb3V0c3RhbmRpbmcgdGlt
ZW91dHMgcHJvdGVjdCBXb3JrZXJDb250ZXh0IGZyb20gR0MuCisgICAgaWYgKGhhc1RpbWVvdXRz
KCkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIAogICAgIEFjdGl2ZURPTU9iamVjdHNNYXAm
IGFjdGl2ZU9iamVjdHMgPSBhY3RpdmVET01PYmplY3RzKCk7CiAgICAgQWN0aXZlRE9NT2JqZWN0
c01hcDo6Y29uc3RfaXRlcmF0b3IgYWN0aXZlT2JqZWN0c0VuZCA9IGFjdGl2ZU9iamVjdHMuZW5k
KCk7CiAgICAgZm9yIChBY3RpdmVET01PYmplY3RzTWFwOjpjb25zdF9pdGVyYXRvciBpdGVyID0g
YWN0aXZlT2JqZWN0cy5iZWdpbigpOyBpdGVyICE9IGFjdGl2ZU9iamVjdHNFbmQ7ICsraXRlcikg
ewpAQCAtOTksNiArMTAzLDExIEBAIHZvaWQgV29ya2VyQ29udGV4dDo6cG9zdE1lc3NhZ2UoY29u
c3QgU3QKICAgICBtX3RocmVhZC0+bWVzc2FnaW5nUHJveHkoKS0+cG9zdE1lc3NhZ2VUb1dvcmtl
ck9iamVjdChtZXNzYWdlKTsKIH0KIAordm9pZCBXb3JrZXJDb250ZXh0OjpleGVjdXRlVGltZXJD
YWxsYmFjayhTY2hlZHVsZWRBY3Rpb24qIGFjdGlvbikKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVt
ZW50IHRoaXMuCit9CisKIHZvaWQgV29ya2VyQ29udGV4dDo6YWRkRXZlbnRMaXN0ZW5lcihjb25z
dCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBldmVu
dExpc3RlbmVyLCBib29sKQogewogICAgIEV2ZW50TGlzdGVuZXJzTWFwOjppdGVyYXRvciBpdGVy
ID0gbV9ldmVudExpc3RlbmVycy5maW5kKGV2ZW50VHlwZSk7CkluZGV4OiBXZWJDb3JlL2RvbS9X
b3JrZXJDb250ZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vV29ya2VyQ29udGV4dC5o
CShyZXZpc2lvbiAzODYxNikKKysrIFdlYkNvcmUvZG9tL1dvcmtlckNvbnRleHQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDEsNiArNDEsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKKyAgICBz
dHJ1Y3QgU2NoZWR1bGVkQWN0aW9uOwogICAgIGNsYXNzIFdvcmtlckxvY2F0aW9uOwogICAgIGNs
YXNzIFdvcmtlclRhc2s7CiAgICAgY2xhc3MgV29ya2VyVGhyZWFkOwpAQCAtNzUsNiArNzYsOCBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgdm9pZCBwb3N0TWVzc2FnZShjb25zdCBT
dHJpbmcmIG1lc3NhZ2UpOwogCisgICAgICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlVGltZXJDYWxs
YmFjayhTY2hlZHVsZWRBY3Rpb24qIGFjdGlvbik7CisgICAgICAgIAogICAgICAgICB2aXJ0dWFs
IHZvaWQgYWRkRXZlbnRMaXN0ZW5lcihjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgUGFz
c1JlZlB0cjxFdmVudExpc3RlbmVyPiwgYm9vbCB1c2VDYXB0dXJlKTsKICAgICAgICAgdmlydHVh
bCB2b2lkIHJlbW92ZUV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUs
IEV2ZW50TGlzdGVuZXIqLCBib29sIHVzZUNhcHR1cmUpOwogICAgICAgICB2aXJ0dWFsIGJvb2wg
ZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50PiwgRXhjZXB0aW9uQ29kZSYpOwpJbmRleDog
V2ViQ29yZS9oaXN0b3J5L0NhY2hlZFBhZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaGlz
dG9yeS9DYWNoZWRQYWdlLmNwcAkocmV2aXNpb24gMzg2MTYpCisrKyBXZWJDb3JlL2hpc3Rvcnkv
Q2FjaGVkUGFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg2LDcgKzg2LDcgQEAgQ2FjaGVkUGFn
ZTo6Q2FjaGVkUGFnZShQYWdlKiBwYWdlKQogICAgIFNjcmlwdENvbnRyb2xsZXIqIHByb3h5ID0g
bWFpbkZyYW1lLT5zY3JpcHQoKTsKICAgICBpZiAocHJveHktPmhhdmVXaW5kb3dTaGVsbCgpKSB7
CiAgICAgICAgIG1fd2luZG93ID0gcHJveHktPndpbmRvd1NoZWxsKCktPndpbmRvdygpOwotICAg
ICAgICBtX3dpbmRvdy0+cGF1c2VUaW1lb3V0cyhtX3BhdXNlZFRpbWVvdXRzKTsKKyAgICAgICAg
bWFpbkZyYW1lLT5kb2N1bWVudCgpLT5wYXVzZVRpbWVvdXRzKG1fcGF1c2VkVGltZW91dHMpOwog
ICAgIH0KIAogICAgIG1fZG9jdW1lbnQtPnNldEluUGFnZUNhY2hlKHRydWUpOwpAQCAtMTE0LDcg
KzExNCw3IEBAIHZvaWQgQ2FjaGVkUGFnZTo6cmVzdG9yZShQYWdlKiBwYWdlKQogICAgICAgICBK
U0RPTVdpbmRvd1NoZWxsKiB3aW5kb3dTaGVsbCA9IHByb3h5LT53aW5kb3dTaGVsbCgpOwogICAg
ICAgICBpZiAobV93aW5kb3cpIHsKICAgICAgICAgICAgIHdpbmRvd1NoZWxsLT5zZXRXaW5kb3co
bV93aW5kb3cuZ2V0KCkpOwotICAgICAgICAgICAgd2luZG93U2hlbGwtPndpbmRvdygpLT5yZXN1
bWVUaW1lb3V0cyhtX3BhdXNlZFRpbWVvdXRzKTsKKyAgICAgICAgICAgIG1haW5GcmFtZS0+ZG9j
dW1lbnQoKS0+cmVzdW1lVGltZW91dHMobV9wYXVzZWRUaW1lb3V0cyk7CiAgICAgICAgIH0gZWxz
ZSB7CiAgICAgICAgICAgICB3aW5kb3dTaGVsbC0+c2V0V2luZG93KG1haW5GcmFtZS0+ZG9tV2lu
ZG93KCkpOwogICAgICAgICAgICAgcHJveHktPmF0dGFjaERlYnVnZ2VyKHBhZ2UtPmRlYnVnZ2Vy
KCkpOwpJbmRleDogV2ViQ29yZS9pbnNwZWN0b3IvSmF2YVNjcmlwdERlYnVnU2VydmVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2luc3BlY3Rvci9KYXZhU2NyaXB0RGVidWdTZXJ2ZXIuY3Bw
CShyZXZpc2lvbiAzODYxNikKKysrIFdlYkNvcmUvaW5zcGVjdG9yL0phdmFTY3JpcHREZWJ1Z1Nl
cnZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2NSwxNCArMzY1LDE0IEBAIHZvaWQgSmF2YVNj
cmlwdERlYnVnU2VydmVyOjpzZXRKYXZhU2NyaXAKIAogICAgIGZyYW1lLT5zY3JpcHQoKS0+c2V0
UGF1c2VkKHBhdXNlZCk7CiAKLSAgICBpZiAoSlNET01XaW5kb3cqIHdpbmRvdyA9IHRvSlNET01X
aW5kb3coZnJhbWUpKSB7CisgICAgaWYgKGZyYW1lLT5kb2N1bWVudCgpKSB7CiAgICAgICAgIGlm
IChwYXVzZWQpIHsKICAgICAgICAgICAgIE93blB0cjxQYXVzZWRUaW1lb3V0cz4gdGltZW91dHM7
Ci0gICAgICAgICAgICB3aW5kb3ctPnBhdXNlVGltZW91dHModGltZW91dHMpOworICAgICAgICAg
ICAgZnJhbWUtPmRvY3VtZW50KCktPnBhdXNlVGltZW91dHModGltZW91dHMpOwogICAgICAgICAg
ICAgbV9wYXVzZWRUaW1lb3V0cy5zZXQoZnJhbWUsIHRpbWVvdXRzLnJlbGVhc2UoKSk7CiAgICAg
ICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBPd25QdHI8UGF1c2VkVGltZW91dHM+IHRpbWVvdXRz
KG1fcGF1c2VkVGltZW91dHMudGFrZShmcmFtZSkpOwotICAgICAgICAgICAgd2luZG93LT5yZXN1
bWVUaW1lb3V0cyh0aW1lb3V0cyk7CisgICAgICAgICAgICBmcmFtZS0+ZG9jdW1lbnQoKS0+cmVz
dW1lVGltZW91dHModGltZW91dHMpOwogICAgICAgICB9CiAgICAgfQogCkluZGV4OiBXZWJDb3Jl
L2xvYWRlci9GcmFtZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvRnJh
bWVMb2FkZXIuY3BwCShyZXZpc2lvbiAzODYxNikKKysrIFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9h
ZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODMzLDYgKzgzMyw5IEBAIHZvaWQgRnJhbWVMb2Fk
ZXI6OmNsZWFyKGJvb2wgY2xlYXJXaW5kb3cKICAgICAgICAgbV9mcmFtZS0+c2NyaXB0KCktPmNs
ZWFyV2luZG93U2hlbGwoKTsKICAgICB9CiAKKyAgICBpZiAobV9mcmFtZS0+ZG9jdW1lbnQoKSkK
KyAgICAgICAgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+Y2xlYXJBbGxUaW1lb3V0cygpOworCiAgICAg
bV9mcmFtZS0+c2VsZWN0aW9uKCktPmNsZWFyKCk7CiAgICAgbV9mcmFtZS0+ZXZlbnRIYW5kbGVy
KCktPmNsZWFyKCk7CiAgICAgaWYgKG1fZnJhbWUtPnZpZXcoKSkKQEAgLTI2OTQsOSArMjY5Nyw4
IEBAIHZvaWQgRnJhbWVMb2FkZXI6OmNvbW1pdFByb3Zpc2lvbmFsTG9hZCgKICAgICAgICAgLy8g
aXQgY291bGQgc29tZXRpbWVzIGZpcmUgd2hlbiB0cmFuc2l0aW9uaW5nIHRvIGEgbm9uLUhUTUwg
ZG9jdW1lbnQgcmVwcmVzZW50YXRpb24gKHN1Y2ggYXMgdGhlIE1hYyBib29rbWFya3Mgdmlldyku
CiAgICAgICAgIC8vIFRvIGF2b2lkIHRoaXMsIHdlIGNsZWFyIGFsbCB0aW1lb3V0cyBpZiB0aGUg
cGFnZSBpcyBub3QgdG8gYmUgY2FjaGVkIGluIHRoZSBiYWNrIGZvcndhcmQgbGlzdC4KICAgICAg
ICAgLy8gQ2FjaGVkIHBhZ2VzIGhhdmUgdGhlaXIgdGltZXJzIHBhdXNlZCBzbyB0aGV5IGFyZSBm
aW5lLgotICAgICAgICBTY3JpcHRDb250cm9sbGVyKiBwcm94eSA9IG1fZnJhbWUtPnNjcmlwdCgp
OwotICAgICAgICBpZiAocHJveHktPmhhdmVXaW5kb3dTaGVsbCgpKQotICAgICAgICAgICAgcHJv
eHktPndpbmRvd1NoZWxsKCktPndpbmRvdygpLT5jbGVhckFsbFRpbWVvdXRzKCk7CisgICAgaWYg
KG1fZnJhbWUtPmRvY3VtZW50KCkpCisgICAgICAgIG1fZnJhbWUtPmRvY3VtZW50KCktPmNsZWFy
QWxsVGltZW91dHMoKTsKICAgICB9CiAgICAgCiAgICAgaWYgKG1fbG9hZFR5cGUgIT0gRnJhbWVM
b2FkVHlwZVJlcGxhY2UpCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>