<?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>88970</bug_id>
          
          <creation_ts>2012-06-13 00:16:18 -0700</creation_ts>
          <short_desc>[Form] Multiple fields time input UI</short_desc>
          <delta_ts>2012-09-06 18:12:06 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Forms</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc>http://jsfiddle.net/zR3uW/</bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>96035</dependson>
    
    <dependson>89425</dependson>
    
    <dependson>89439</dependson>
    
    <dependson>89963</dependson>
    
    <dependson>89965</dependson>
    
    <dependson>90036</dependson>
    
    <dependson>90236</dependson>
    
    <dependson>90956</dependson>
    
    <dependson>92230</dependson>
    
    <dependson>92339</dependson>
    
    <dependson>92822</dependson>
    
    <dependson>92834</dependson>
    
    <dependson>92960</dependson>
    
    <dependson>93929</dependson>
    
    <dependson>94166</dependson>
    
    <dependson>94195</dependson>
    
    <dependson>96032</dependson>
          <blocked>86990</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter>yosin</reporter>
          <assigned_to>yosin</assigned_to>
          <cc>cmarcelo</cc>
    
    <cc>dglazkov</cc>
    
    <cc>donggwan.kim</cc>
    
    <cc>haizhang</cc>
    
    <cc>macpherson</cc>
    
    <cc>menard</cc>
    
    <cc>mifenton</cc>
    
    <cc>tkent</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>647757</commentid>
    <comment_count>0</comment_count>
    <who name="">yosin</who>
    <bug_when>2012-06-13 00:16:18 -0700</bug_when>
    <thetext>This is one of UI for input type &quot;time&quot; using fields for each time parts, e.g. hour, minute, second, millisecond.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>647768</commentid>
    <comment_count>1</comment_count>
      <attachid>147250</attachid>
    <who name="">yosin</who>
    <bug_when>2012-06-13 00:27:32 -0700</bug_when>
    <thetext>Created attachment 147250
Patch 1 - WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>647774</commentid>
    <comment_count>2</comment_count>
      <attachid>147253</attachid>
    <who name="">yosin</who>
    <bug_when>2012-06-13 00:35:35 -0700</bug_when>
    <thetext>Created attachment 147253
Patch 2 - WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>656463</commentid>
    <comment_count>3</comment_count>
      <attachid>149269</attachid>
    <who name="">yosin</who>
    <bug_when>2012-06-25 03:38:54 -0700</bug_when>
    <thetext>Created attachment 149269
Patch 3 - Code Complete</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>657442</commentid>
    <comment_count>4</comment_count>
      <attachid>149496</attachid>
    <who name="">yosin</who>
    <bug_when>2012-06-26 02:42:16 -0700</bug_when>
    <thetext>Created attachment 149496
Patch 4 - Code Complete</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>658218</commentid>
    <comment_count>5</comment_count>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2012-06-26 18:34:05 -0700</bug_when>
    <thetext>Because you&apos;ll add new ENABLE flag, you had better announce it and your plan to webkit-dev.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>666506</commentid>
    <comment_count>6</comment_count>
      <attachid>151641</attachid>
    <who name="">yosin</who>
    <bug_when>2012-07-11 01:28:57 -0700</bug_when>
    <thetext>Created attachment 151641
Patch 5 - Code Complete</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>682795</commentid>
    <comment_count>7</comment_count>
      <attachid>155459</attachid>
    <who name="">yosin</who>
    <bug_when>2012-07-31 00:50:49 -0700</bug_when>
    <thetext>Created attachment 155459
Patch 6</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>682797</commentid>
    <comment_count>8</comment_count>
      <attachid>155459</attachid>
    <who name="">yosin</who>
    <bug_when>2012-07-31 00:54:43 -0700</bug_when>
    <thetext>Comment on attachment 155459
Patch 6

Could you review this patch?

Tests will be uploaded into another bug for reducing size of patch.

ChangeLogs isn&apos;t incomplete.

Thanks in advance.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>682816</commentid>
    <comment_count>9</comment_count>
      <attachid>155459</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-07-31 01:26:06 -0700</bug_when>
    <thetext>Comment on attachment 155459
Patch 6

Attachment 155459 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/13385816</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>682874</commentid>
    <comment_count>10</comment_count>
      <attachid>155459</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2012-07-31 02:45:46 -0700</bug_when>
    <thetext>Comment on attachment 155459
Patch 6

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

Ok, I agree with the design and the rough structure. Let&apos;s split this into multiple patches like:

1. Enable ENABLE_INPUT_TYPE_TIME_MULTIPLE_FIELDS and touch source files with ENABLE(INPUT_TYPE_TIME_MULTIPLE_FIELDS)  (Only DateTimeFormat.h?)
2. WebCore/css/html.css part
3. WebCore/html/shadow/ part
4. WebCore/html/ part
5. RuntimeEnabledFeatures.cpp part

&gt; Source/WebCore/html/shadow/DateTimeFieldElements.h:88
&gt; +class DateTimeNumericFieldElement : public DateTimeFieldElement {

Please make its own source files.  This class is not small.

&gt; Source/WebCore/html/shadow/DateTimeFieldElements.h:136
&gt; +class DateTimeHourFieldElement : public DateTimeNumericFieldElement {

ditto.

&gt; Source/WebCore/html/shadow/DateTimeFieldElements.h:153
&gt; +class DateTimeSymbolicFieldElement : public DateTimeFieldElement {

ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>699133</commentid>
    <comment_count>11</comment_count>
    <who name="">yosin</who>
    <bug_when>2012-08-19 18:22:09 -0700</bug_when>
    <thetext>Multiple fields time input UI is enabled for Chromium port, except for Android:
http://trac.webkit.org/changeset/125868</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>147250</attachid>
            <date>2012-06-13 00:27:32 -0700</date>
            <delta_ts>2012-06-13 00:35:30 -0700</delta_ts>
            <desc>Patch 1 - WIP</desc>
            <filename>bug-88970-20120613162731.patch</filename>
            <type>text/plain</type>
            <size>22788</size>
            <attacher>yosin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIwMDI0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTAyYTA2ZDRmMDA2Nzkz
YWU1YTQxYWI1YTYzODk5OTZhNjAxZGVhMC4uMDU0Y2IwNmMyNWE2M2QxMGM3YjFkNTFhMTkzNTY4
MDJlOTdhNTg0MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU5IEBACisyMDEyLTA2LTEzICBZb3No
aWZ1bWkgSW5vdWUgIDx5b3NpbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW0Zvcm1dIFRpbWUg
aW5wdXQgZmllbGRzIFVJCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD04ODk3MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFdJUDogRm9yIGFyY2hpdGVjdHVyZSByZXZpZXdpbmcuCisKKyAgICAgICAgTm8gbmV3
IHRlc3RzLiBJJ2xsIHByb3ZpZGUgdGVzdHMuCisKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6Cisg
ICAgICAgICogaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxJbnB1dEVsZW1lbnQ6OmlzTW91c2VGb2N1c2FibGUpOgorICAgICAgICAqIGh0bWwvVGltZUlu
cHV0VHlwZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUaW1lSW5wdXRUeXBlOjpjcmVhdGVTdGVw
UmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6VGltZUlucHV0VHlwZTo6aXNUaW1lRmllbGQpOgor
ICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpUaW1lTW9kZWw6OmRlZmF1bHRW
YWx1ZUZvclN0ZXBVcCk6CisgICAgICAgIChXZWJDb3JlOjpUaW1lSW5wdXRUeXBlOjpjb250cm9s
VmFsdWVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlRpbWVJbnB1dFR5cGU6OmNyZWF0ZVNo
YWRvd1N1YnRyZWUpOgorICAgICAgICAoV2ViQ29yZTo6VGltZUlucHV0VHlwZTo6ZGVzdHJveVNo
YWRvd1N1YnRyZWUpOgorICAgICAgICAoV2ViQ29yZTo6VGltZUlucHV0VHlwZTo6Zm9yd2FyZEV2
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlRpbWVJbnB1dFR5cGU6OmRpc2FibGVkQXR0cmlidXRl
Q2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpUaW1lSW5wdXRUeXBlOjpoYW5kbGVET01BY3Rp
dmF0ZUV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlRpbWVJbnB1dFR5cGU6OnJlYWRvbmx5QXR0
cmlidXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpCYXNlRGF0ZUFuZFRpbWVXaXRob3V0
VGV4dEZpZWxkSW5wdXRUeXBlOjpjb252ZXJ0RnJvbVZpc2libGVWYWx1ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpCYXNlRGF0ZUFuZFRpbWVXaXRob3V0VGV4dEZpZWxkSW5wdXRUeXBlOjpkZWZhdWx0
VmFsdWVGb3JTdGVwVXApOgorICAgICAgICAoV2ViQ29yZTo6QmFzZURhdGVBbmRUaW1lV2l0aG91
dFRleHRGaWVsZElucHV0VHlwZTo6bG9jYWxpemVWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpC
YXNlRGF0ZUFuZFRpbWVXaXRob3V0VGV4dEZpZWxkSW5wdXRUeXBlOjpwYXJzZVRvTnVtYmVyKToK
KyAgICAgICAgKFdlYkNvcmU6OkJhc2VEYXRlQW5kVGltZVdpdGhvdXRUZXh0RmllbGRJbnB1dFR5
cGU6OnNhbml0aXplVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QmFzZURhdGVBbmRUaW1lV2l0
aG91dFRleHRGaWVsZElucHV0VHlwZTo6c2VyaWFsaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkJh
c2VEYXRlQW5kVGltZVdpdGhvdXRUZXh0RmllbGRJbnB1dFR5cGU6OnNldFZhbHVlQXNEYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkJhc2VEYXRlQW5kVGltZVdpdGhvdXRUZXh0RmllbGRJbnB1dFR5
cGU6OnNldFZhbHVlQXNJbnB1dE51bWJlcik6CisgICAgICAgIChXZWJDb3JlOjpCYXNlRGF0ZUFu
ZFRpbWVXaXRob3V0VGV4dEZpZWxkSW5wdXRUeXBlOjp0eXBlTWlzbWF0Y2gpOgorICAgICAgICAo
V2ViQ29yZTo6QmFzZURhdGVBbmRUaW1lV2l0aG91dFRleHRGaWVsZElucHV0VHlwZTo6dmFsdWVB
c0RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6QmFzZURhdGVBbmRUaW1lV2l0aG91dFRleHRGaWVs
ZElucHV0VHlwZTo6dmFsdWVBc0RvdWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpCYXNlRGF0ZUFu
ZFRpbWVXaXRob3V0VGV4dEZpZWxkSW5wdXRUeXBlOjp2aXNpYmxlVmFsdWUpOgorICAgICAgICAo
V2ViQ29yZTo6VGltZUlucHV0VHlwZTo6ZGF0ZVR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6VGlt
ZUlucHV0VHlwZTo6ZGVmYXVsdFZhbHVlRm9yU3RlcFVwKToKKyAgICAgICAgKiBodG1sL1RpbWVJ
bnB1dFR5cGUuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoQmFzZURhdGVBbmRUaW1l
V2l0aG91dFRleHRGaWVsZElucHV0VHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpCYXNlRGF0ZUFu
ZFRpbWVXaXRob3V0VGV4dEZpZWxkSW5wdXRUeXBlOjpCYXNlRGF0ZUFuZFRpbWVXaXRob3V0VGV4
dEZpZWxkSW5wdXRUeXBlKToKKyAgICAgICAgKFRpbWVNb2RlbCk6CisgICAgICAgIChXZWJDb3Jl
OjpUaW1lTW9kZWw6OlRpbWVNb2RlbCk6CisgICAgICAgIChUaW1lSW5wdXRUeXBlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlRpbWVJbnB1dFR5cGU6OlRpbWVJbnB1dFR5cGUpOgorICAgICAgICAqIGh0
bWwvc2hhZG93L1RleHRDb250cm9sSW5uZXJFbGVtZW50cy5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTcGluQnV0dG9uRWxlbWVudDo6U3BpbkJ1dHRvbkVsZW1lbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6U3BpbkJ1dHRvbkVsZW1lbnQ6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTcGluQnV0
dG9uRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcik6CisgICAgICAgICogaHRtbC9zaGFkb3cv
VGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmg6CisgICAgICAgIChDYWxsYmFjayk6CisgICAgICAg
IChTcGluQnV0dG9uRWxlbWVudCk6CisKIDIwMTItMDYtMTEgIEphbWVzIFJvYmluc29uICA8amFt
ZXNyQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbY2hyb21pdW1dIFBvcnQgRHJhd2luZ0J1ZmZl
ckNocm9taXVtIGZyb20gVGV4dHVyZUxheWVyQ2hyb21pdW0gb3ZlciB0byBXZWJFeHRlcm5hbFRl
eHR1cmVMYXllcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCAyY2U3OGFmODNlNmYyMDZk
NGViYWE0OWU2NDQyZjU4MWQ5OTdkYTFmLi42ODNlYWJkMjhlZTUwZDc3NjFhZWJiMjFlMDQ1ODI3
ZDg2MDk4OGM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwor
KysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyIEBACisy
MDEyLTA2LTEzICBZb3NoaWZ1bWkgSW5vdWUgIDx5b3NpbkBjaHJvbWl1bS5vcmc+CisKKyAgICAg
ICAgW0Zvcm1dIFRpbWUgaW5wdXQgZmllbGRzIFVJCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD04ODk3MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgICogZmVhdHVyZXMuZ3lwaToKKwogMjAxMi0wNS0xMSAgSmFt
ZXMgUm9iaW5zb24gIDxqYW1lc3JAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtjaHJvbWl1bV0g
UG9ydCBEcmF3aW5nQnVmZmVyQ2hyb21pdW0gZnJvbSBUZXh0dXJlTGF5ZXJDaHJvbWl1bSBvdmVy
IHRvIFdlYkV4dGVybmFsVGV4dHVyZUxheWVyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggNTIzNTEyMmY5
MWNjOWIxYmNlNjhlM2NlYWI0YjAzZDBlZTE4NzUxMC4uNDk3N2ZiMTFjY2E3NmU3ODNiNTc0YjEy
MTA2ZTNkYWU2MDYxMTg1YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBp
CisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtNTQ2OCw2ICs1NDY4LDggQEAK
ICAgICAgICAgICAgICdodG1sL0RhdGVUaW1lSW5wdXRUeXBlLmgnLAogICAgICAgICAgICAgJ2h0
bWwvRGF0ZVRpbWVMb2NhbElucHV0VHlwZS5jcHAnLAogICAgICAgICAgICAgJ2h0bWwvRGF0ZVRp
bWVMb2NhbElucHV0VHlwZS5oJywKKyAgICAgICAgICAgICdodG1sL0RhdGVUaW1lTW9kZWwuY3Bw
JywKKyAgICAgICAgICAgICdodG1sL0RhdGVUaW1lTW9kZWwuaCcsCiAgICAgICAgICAgICAnaHRt
bC9FbWFpbElucHV0VHlwZS5jcHAnLAogICAgICAgICAgICAgJ2h0bWwvRW1haWxJbnB1dFR5cGUu
aCcsCiAgICAgICAgICAgICAnaHRtbC9GVFBEaXJlY3RvcnlEb2N1bWVudC5jcHAnLApAQCAtNTgy
NCw2ICs1ODI2LDggQEAKICAgICAgICAgICAgICdodG1sL3NoYWRvdy9Db250ZW50RGlzdHJpYnV0
b3IuaCcsCiAgICAgICAgICAgICAnaHRtbC9zaGFkb3cvQ29udGVudFNlbGVjdG9yUXVlcnkuY3Bw
JywKICAgICAgICAgICAgICdodG1sL3NoYWRvdy9Db250ZW50U2VsZWN0b3JRdWVyeS5oJywKKyAg
ICAgICAgICAgICdodG1sL3NoYWRvdy9EYXRlVGltZUVkaXRFbGVtZW50LmNwcCcsCisgICAgICAg
ICAgICAnaHRtbC9zaGFkb3cvRGF0ZVRpbWVFZGl0RWxlbWVudC5oJywKICAgICAgICAgICAgICdo
dG1sL3NoYWRvdy9EZXRhaWxzTWFya2VyQ29udHJvbC5jcHAnLAogICAgICAgICAgICAgJ2h0bWwv
c2hhZG93L0RldGFpbHNNYXJrZXJDb250cm9sLmgnLAogICAgICAgICAgICAgJ2h0bWwvc2hhZG93
L0hUTUxDb250ZW50RWxlbWVudC5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MSW5wdXRFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxl
bWVudC5jcHAKaW5kZXggYzZjZjFmNDk3MWU2YWQ2MmRkYmM1ZjM3OWRkYjc4YjkzYzM0Y2U4Yy4u
MjRjZDlhZDE3MWNiZDFlNTBiM2FkZTE3NGQ3MmQ5NzY1ODJiMDA1ZSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwCkBAIC0zMDMsNyArMzAzLDcgQEAgYm9vbCBIVE1M
SW5wdXRFbGVtZW50Ojppc0tleWJvYXJkRm9jdXNhYmxlKEtleWJvYXJkRXZlbnQqIGV2ZW50KSBj
b25zdAogCiBib29sIEhUTUxJbnB1dEVsZW1lbnQ6OmlzTW91c2VGb2N1c2FibGUoKSBjb25zdAog
ewotICAgIGlmIChpc1RleHRGaWVsZCgpKQorICAgIGlmIChpc1RleHRGaWVsZCgpIHx8IGlzVGlt
ZUZpZWxkKCkpCiAgICAgICAgIHJldHVybiBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6aXNG
b2N1c2FibGUoKTsKICAgICByZXR1cm4gSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6OmlzTW91
c2VGb2N1c2FibGUoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvVGltZUlu
cHV0VHlwZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL1RpbWVJbnB1dFR5cGUuY3BwCmluZGV4
IDUzNzkyYTk5OGE5Mjg5MzJhNWMyYjc0NGU0NTgzNWE0OWI2M2FjZGUuLjU5YzY1MjJjNGJmNmFl
ZWIzZGZiYTFiNTJjODk3ZTAwYTVlNjRiNzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvVGltZUlucHV0VHlwZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9UaW1lSW5wdXRU
eXBlLmNwcApAQCAtNDEsNiArNDEsMTIgQEAKIAogI2lmIEVOQUJMRShJTlBVVF9UWVBFX1RJTUUp
CiAKKyNpbmNsdWRlICJDaHJvbWUuaCIKKyNpbmNsdWRlICJDaHJvbWVDbGllbnQuaCIKKyNpbmNs
dWRlICJFbGVtZW50U2hhZG93LmgiCisjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIlNoYWRv
d1Jvb3QuaCIKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2UgSFRNTE5h
bWVzOwpAQCAtNTksMTIgKzY1LDMwIEBAIGNvbnN0IEF0b21pY1N0cmluZyYgVGltZUlucHV0VHlw
ZTo6Zm9ybUNvbnRyb2xUeXBlKCkgY29uc3QKICAgICByZXR1cm4gSW5wdXRUeXBlTmFtZXM6OnRp
bWUoKTsKIH0KIAotRGF0ZUNvbXBvbmVudHM6OlR5cGUgVGltZUlucHV0VHlwZTo6ZGF0ZVR5cGUo
KSBjb25zdAorU3RlcFJhbmdlIFRpbWVJbnB1dFR5cGU6OmNyZWF0ZVN0ZXBSYW5nZShBbnlTdGVw
SGFuZGxpbmcgYW55U3RlcEhhbmRsaW5nKSBjb25zdAogewotICAgIHJldHVybiBEYXRlQ29tcG9u
ZW50czo6VGltZTsKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IFN0ZXBSYW5nZTo6U3Rl
cERlc2NyaXB0aW9uLCBzdGVwRGVzY3JpcHRpb24sICh0aW1lRGVmYXVsdFN0ZXAsIHRpbWVEZWZh
dWx0U3RlcEJhc2UsIHRpbWVTdGVwU2NhbGVGYWN0b3IsIFN0ZXBSYW5nZTo6U2NhbGVkU3RlcFZh
bHVlU2hvdWxkQmVJbnRlZ2VyKSk7CisKKyAgICBjb25zdCBJbnB1dE51bWJlciBzdGVwQmFzZSA9
IHBhcnNlVG9OdW1iZXIoZWxlbWVudCgpLT5mYXN0R2V0QXR0cmlidXRlKG1pbkF0dHIpLCAwKTsK
KyAgICBjb25zdCBJbnB1dE51bWJlciBtaW5pbXVtID0gcGFyc2VUb051bWJlcihlbGVtZW50KCkt
PmZhc3RHZXRBdHRyaWJ1dGUobWluQXR0ciksIGNvbnZlcnREb3VibGVUb0lucHV0TnVtYmVyKERh
dGVDb21wb25lbnRzOjptaW5pbXVtVGltZSgpKSk7CisgICAgY29uc3QgSW5wdXROdW1iZXIgbWF4
aW11bSA9IHBhcnNlVG9OdW1iZXIoZWxlbWVudCgpLT5mYXN0R2V0QXR0cmlidXRlKG1heEF0dHIp
LCBjb252ZXJ0RG91YmxlVG9JbnB1dE51bWJlcihEYXRlQ29tcG9uZW50czo6bWF4aW11bVRpbWUo
KSkpOworICAgIGNvbnN0IElucHV0TnVtYmVyIHN0ZXAgPSBTdGVwUmFuZ2U6OnBhcnNlU3RlcChh
bnlTdGVwSGFuZGxpbmcsIHN0ZXBEZXNjcmlwdGlvbiwgZWxlbWVudCgpLT5mYXN0R2V0QXR0cmli
dXRlKHN0ZXBBdHRyKSk7CisgICAgcmV0dXJuIFN0ZXBSYW5nZShzdGVwQmFzZSwgbWluaW11bSwg
bWF4aW11bSwgc3RlcCwgc3RlcERlc2NyaXB0aW9uKTsKIH0KIAotSW5wdXROdW1iZXIgVGltZUlu
cHV0VHlwZTo6ZGVmYXVsdFZhbHVlRm9yU3RlcFVwKCkgY29uc3QKK2Jvb2wgVGltZUlucHV0VHlw
ZTo6aXNUaW1lRmllbGQoKSBjb25zdAoreworICAgIHJldHVybiB0cnVlOworfQorCisjaWYgRU5B
QkxFKFRJTUVfSU5QVVRfRklFTERTKQorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vCisvLyBUaW1lTW9kZWwKKy8vICh0aGlz
IGJhbm5lciBjb21tZW50IHdpbGwgYmUgcmVtb3ZlZC4pCisKK0lucHV0TnVtYmVyIFRpbWVNb2Rl
bDo6ZGVmYXVsdFZhbHVlRm9yU3RlcFVwKCkgY29uc3QKIHsKICAgICBkb3VibGUgY3VycmVudCA9
IGN1cnJlbnRUaW1lTVMoKTsKICAgICBkb3VibGUgdXRjT2Zmc2V0ID0gY2FsY3VsYXRlVVRDT2Zm
c2V0KCk7CkBAIC03OSwxNSArMTAzLDE3MSBAQCBJbnB1dE51bWJlciBUaW1lSW5wdXRUeXBlOjpk
ZWZhdWx0VmFsdWVGb3JTdGVwVXAoKSBjb25zdAogICAgIHJldHVybiBjb252ZXJ0RG91YmxlVG9J
bnB1dE51bWJlcihtaWxsaXNlY29uZHMpOwogfQogCi1TdGVwUmFuZ2UgVGltZUlucHV0VHlwZTo6
Y3JlYXRlU3RlcFJhbmdlKEFueVN0ZXBIYW5kbGluZyBhbnlTdGVwSGFuZGxpbmcpIGNvbnN0Citi
b29sIFRpbWVNb2RlbDo6cGFyc2VUb0RhdGVDb21wb25lbnRzSW50ZXJuYWwoY29uc3QgVUNoYXIq
IGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCwgRGF0ZUNvbXBvbmVudHMqIG91dCkgY29uc3QK
IHsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IFN0ZXBSYW5nZTo6U3RlcERlc2NyaXB0
aW9uLCBzdGVwRGVzY3JpcHRpb24sICh0aW1lRGVmYXVsdFN0ZXAsIHRpbWVEZWZhdWx0U3RlcEJh
c2UsIHRpbWVTdGVwU2NhbGVGYWN0b3IsIFN0ZXBSYW5nZTo6U2NhbGVkU3RlcFZhbHVlU2hvdWxk
QmVJbnRlZ2VyKSk7CisgICAgQVNTRVJUKG91dCk7CisgICAgdW5zaWduZWQgZW5kOworICAgIHJl
dHVybiBvdXQtPnBhcnNlVGltZShjaGFyYWN0ZXJzLCBsZW5ndGgsIDAsIGVuZCkgJiYgZW5kID09
IGxlbmd0aDsKK30KIAotICAgIGNvbnN0IElucHV0TnVtYmVyIHN0ZXBCYXNlID0gcGFyc2VUb051
bWJlcihlbGVtZW50KCktPmZhc3RHZXRBdHRyaWJ1dGUobWluQXR0ciksIDApOwotICAgIGNvbnN0
IElucHV0TnVtYmVyIG1pbmltdW0gPSBwYXJzZVRvTnVtYmVyKGVsZW1lbnQoKS0+ZmFzdEdldEF0
dHJpYnV0ZShtaW5BdHRyKSwgY29udmVydERvdWJsZVRvSW5wdXROdW1iZXIoRGF0ZUNvbXBvbmVu
dHM6Om1pbmltdW1UaW1lKCkpKTsKLSAgICBjb25zdCBJbnB1dE51bWJlciBtYXhpbXVtID0gcGFy
c2VUb051bWJlcihlbGVtZW50KCktPmZhc3RHZXRBdHRyaWJ1dGUobWF4QXR0ciksIGNvbnZlcnRE
b3VibGVUb0lucHV0TnVtYmVyKERhdGVDb21wb25lbnRzOjptYXhpbXVtVGltZSgpKSk7Ci0gICAg
Y29uc3QgSW5wdXROdW1iZXIgc3RlcCA9IFN0ZXBSYW5nZTo6cGFyc2VTdGVwKGFueVN0ZXBIYW5k
bGluZywgc3RlcERlc2NyaXB0aW9uLCBlbGVtZW50KCktPmZhc3RHZXRBdHRyaWJ1dGUoc3RlcEF0
dHIpKTsKLSAgICByZXR1cm4gU3RlcFJhbmdlKHN0ZXBCYXNlLCBtaW5pbXVtLCBtYXhpbXVtLCBz
dGVwLCBzdGVwRGVzY3JpcHRpb24pOworYm9vbCBUaW1lTW9kZWw6OnNldE1pbGxpc2Vjb25kVG9E
YXRlQ29tcG9uZW50cyhkb3VibGUgdmFsdWUsIERhdGVDb21wb25lbnRzKiBkYXRlKSBjb25zdAor
eworICAgIEFTU0VSVChkYXRlKTsKKyAgICByZXR1cm4gZGF0ZS0+c2V0TWlsbGlzZWNvbmRzU2lu
Y2VNaWRuaWdodCh2YWx1ZSk7Cit9CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8KKy8vIFRpbWVJbnB1dFR5cGUKKy8vICh0
aGlzIGJhbm5lciBjb21tZW50IHdpbGwgYmUgcmVtb3ZlZC4pCisKK3ZvaWQgVGltZUlucHV0VHlw
ZTo6Y29udHJvbFZhbHVlQ2hhbmdlZCgpCit7CisgICAgY29uc3QgU3RyaW5nIHN0cmluZ1ZhbHVl
ID0gc2FuaXRpemVWYWx1ZShtX2RhdGVUaW1lRWRpdEVsZW1lbnQtPnZhbHVlKCkpOworICAgIFJl
ZlB0cjxIVE1MSW5wdXRFbGVtZW50PiBpbnB1dChlbGVtZW50KCkpOworICAgIElucHV0VHlwZTo6
c2V0VmFsdWUoc3RyaW5nVmFsdWUsIHRydWUsIERpc3BhdGNoTm9FdmVudCk7CisgICAgaW5wdXQt
PmRpc3BhdGNoRm9ybUNvbnRyb2xJbnB1dEV2ZW50KCk7CisgICAgaW5wdXQtPmRpc3BhdGNoRm9y
bUNvbnRyb2xDaGFuZ2VFdmVudCgpOworfQorCit2b2lkIFRpbWVJbnB1dFR5cGU6OmNyZWF0ZVNo
YWRvd1N1YnRyZWUoKQoreworICAgIEFTU0VSVChlbGVtZW50KCktPnNoYWRvdygpKTsKKworICAg
IERvY3VtZW50KiBkb2N1bWVudCA9IGVsZW1lbnQoKS0+ZG9jdW1lbnQoKTsKKyAgICBtX2RhdGVU
aW1lRWRpdEVsZW1lbnQgPSBEYXRlVGltZUVkaXRFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQsICp0
aGlzKTsKKyAgICBlbGVtZW50KCktPnNoYWRvdygpLT5vbGRlc3RTaGFkb3dSb290KCktPmFwcGVu
ZENoaWxkKG1fZGF0ZVRpbWVFZGl0RWxlbWVudCk7CisKKyAgICBDaHJvbWVDbGllbnQqIGNocm9t
ZUNsaWVudCA9IGRvY3VtZW50LT5wYWdlKCkgPyBkb2N1bWVudC0+cGFnZSgpLT5jaHJvbWUoKS0+
Y2xpZW50KCkgOiAwOworICAgIGJvb2wgc2hvdWxkQWRkRGVjb3JhdGlvbnMgPSBjaHJvbWVDbGll
bnQgJiYgY2hyb21lQ2xpZW50LT53aWxsQWRkVGV4dEZpZWxkRGVjb3JhdGlvbnNUbyhlbGVtZW50
KCkpOworCisgICAgaWYgKHNob3VsZEFkZERlY29yYXRpb25zKQorICAgICAgICBjaHJvbWVDbGll
bnQtPmFkZFRleHRGaWVsZERlY29yYXRpb25zVG8oZWxlbWVudCgpKTsKK30KKwordm9pZCBUaW1l
SW5wdXRUeXBlOjpkZXN0cm95U2hhZG93U3VidHJlZSgpCit7CisgICAgbV9kYXRlVGltZUVkaXRF
bGVtZW50LmNsZWFyKCk7Cit9CisKK3ZvaWQgVGltZUlucHV0VHlwZTo6Zm9yd2FyZEV2ZW50KEV2
ZW50KiBldmVudCkKK3sKKyAgICBpZiAobV9kYXRlVGltZUVkaXRFbGVtZW50KQorICAgICAgICBt
X2RhdGVUaW1lRWRpdEVsZW1lbnQtPmRlZmF1bHRFdmVudEhhbmRsZXIoZXZlbnQpOworfQorCit2
b2lkIFRpbWVJbnB1dFR5cGU6OmRpc2FibGVkQXR0cmlidXRlQ2hhbmdlZCgpCit7CisgICAgaWYg
KG1fZGF0ZVRpbWVFZGl0RWxlbWVudCkKKyAgICAgICAgbV9kYXRlVGltZUVkaXRFbGVtZW50LT5k
aXNhYmxlZEF0dHJpYnV0ZUNoYW5nZWQoKTsKK30KKwordm9pZCBUaW1lSW5wdXRUeXBlOjpoYW5k
bGVET01BY3RpdmF0ZUV2ZW50KEV2ZW50KiBldmVudCkKK3sKKyAgICBpZiAoZWxlbWVudCgpLT5k
aXNhYmxlZCgpIHx8IGVsZW1lbnQoKS0+cmVhZE9ubHkoKSB8fCAhZWxlbWVudCgpLT5yZW5kZXJl
cigpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV9kYXRlVGltZUVkaXRFbGVtZW50KQor
ICAgICAgICBtX2RhdGVUaW1lRWRpdEVsZW1lbnQtPmZvY3VzKCk7CisKKyAgICBldmVudC0+c2V0
RGVmYXVsdEhhbmRsZWQoKTsKK30KKwordm9pZCBUaW1lSW5wdXRUeXBlOjpyZWFkb25seUF0dHJp
YnV0ZUNoYW5nZWQoKQoreworICAgIGlmIChtX2RhdGVUaW1lRWRpdEVsZW1lbnQpCisgICAgICAg
IG1fZGF0ZVRpbWVFZGl0RWxlbWVudC0+cmVhZG9ubHlBdHRyaWJ1dGVDaGFuZ2VkKCk7Cit9CisK
Ky8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLworLy8KKy8vIFRoZXNlIG1ldGhvZHMgc2hvdWxkIGJlIGluIEJhc2VEYXRlQW5kVGltZUlu
cHV0VHlwZS5jcHAKKy8vCitTdHJpbmcgQmFzZURhdGVBbmRUaW1lV2l0aG91dFRleHRGaWVsZElu
cHV0VHlwZTo6Y29udmVydEZyb21WaXNpYmxlVmFsdWUoY29uc3QgU3RyaW5nJiB2aXNpYmxlVmFs
dWUpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZGF0ZVRpbWVNb2RlbC5jb252ZXJ0RnJvbVZpc2li
bGVWYWx1ZSh2aXNpYmxlVmFsdWUpOworfQorCitJbnB1dE51bWJlciBCYXNlRGF0ZUFuZFRpbWVX
aXRob3V0VGV4dEZpZWxkSW5wdXRUeXBlOjpkZWZhdWx0VmFsdWVGb3JTdGVwVXAoKSBjb25zdAor
eworICAgIGRvdWJsZSBtcyA9IGN1cnJlbnRUaW1lTVMoKTsKKyAgICBkb3VibGUgdXRjT2Zmc2V0
ID0gY2FsY3VsYXRlVVRDT2Zmc2V0KCk7CisgICAgZG91YmxlIGRzdE9mZnNldCA9IGNhbGN1bGF0
ZURTVE9mZnNldChtcywgdXRjT2Zmc2V0KTsKKyAgICBpbnQgb2Zmc2V0ID0gc3RhdGljX2Nhc3Q8
aW50PigodXRjT2Zmc2V0ICsgZHN0T2Zmc2V0KSAvIG1zUGVyTWludXRlKTsKKyAgICByZXR1cm4g
Y29udmVydERvdWJsZVRvSW5wdXROdW1iZXIobXMgKyAob2Zmc2V0ICogbXNQZXJNaW51dGUpKTsK
K30KKworU3RyaW5nIEJhc2VEYXRlQW5kVGltZVdpdGhvdXRUZXh0RmllbGRJbnB1dFR5cGU6Omxv
Y2FsaXplVmFsdWUoY29uc3QgU3RyaW5nJiBwcm9wb3NlZFZhbHVlKSBjb25zdAoreworICAgIHJl
dHVybiBtX2RhdGVUaW1lTW9kZWwubG9jYWxpemVWYWx1ZShwcm9wb3NlZFZhbHVlKTsKK30KKwor
SW5wdXROdW1iZXIgQmFzZURhdGVBbmRUaW1lV2l0aG91dFRleHRGaWVsZElucHV0VHlwZTo6cGFy
c2VUb051bWJlcihjb25zdCBTdHJpbmcmIHNvdXJjZSwgY29uc3QgSW5wdXROdW1iZXImIGRlZmF1
bHRWYWx1ZSkgY29uc3QKK3sKKyAgICBjb25zdCBkb3VibGUgZG91YmxlVmFsdWUgPSBtX2RhdGVU
aW1lTW9kZWwucGFyc2VUb0RvdWJsZShzb3VyY2UpOworICAgIHJldHVybiBpc2Zpbml0ZShkb3Vi
bGVWYWx1ZSkgPyBjb252ZXJ0RG91YmxlVG9JbnB1dE51bWJlcihkb3VibGVWYWx1ZSkgOiBkZWZh
dWx0VmFsdWU7Cit9CisKK1N0cmluZyBCYXNlRGF0ZUFuZFRpbWVXaXRob3V0VGV4dEZpZWxkSW5w
dXRUeXBlOjpzYW5pdGl6ZVZhbHVlKGNvbnN0IFN0cmluZyYgcHJvcG9zZWRWYWx1ZSkgY29uc3QK
K3sKKyAgICByZXR1cm4gbV9kYXRlVGltZU1vZGVsLnNhbml0aXplVmFsdWUocHJvcG9zZWRWYWx1
ZSk7Cit9CisKK1N0cmluZyBCYXNlRGF0ZUFuZFRpbWVXaXRob3V0VGV4dEZpZWxkSW5wdXRUeXBl
OjpzZXJpYWxpemUoY29uc3QgSW5wdXROdW1iZXImIHZhbHVlKSBjb25zdAoreworICAgIHJldHVy
biBtX2RhdGVUaW1lTW9kZWwuc2VyaWFsaXplKHZhbHVlKTsKK30KKwordm9pZCBCYXNlRGF0ZUFu
ZFRpbWVXaXRob3V0VGV4dEZpZWxkSW5wdXRUeXBlOjpzZXRWYWx1ZUFzRGF0ZShkb3VibGUgdmFs
dWUsIEV4Y2VwdGlvbkNvZGUmKSBjb25zdAoreworICAgIGVsZW1lbnQoKS0+c2V0VmFsdWUobV9k
YXRlVGltZU1vZGVsLnNlcmlhbGl6ZVdpdGhNaWxsaXNlY29uZHModmFsdWUpKTsKK30KKwordm9p
ZCBCYXNlRGF0ZUFuZFRpbWVXaXRob3V0VGV4dEZpZWxkSW5wdXRUeXBlOjpzZXRWYWx1ZUFzSW5w
dXROdW1iZXIoY29uc3QgSW5wdXROdW1iZXImIG5ld1ZhbHVlLCBUZXh0RmllbGRFdmVudEJlaGF2
aW9yIGV2ZW50QmVoYXZpb3IsIEV4Y2VwdGlvbkNvZGUmKSBjb25zdAoreworICAgIGVsZW1lbnQo
KS0+c2V0VmFsdWUoc2VyaWFsaXplKG5ld1ZhbHVlKSwgZXZlbnRCZWhhdmlvcik7Cit9CisKK2Jv
b2wgQmFzZURhdGVBbmRUaW1lV2l0aG91dFRleHRGaWVsZElucHV0VHlwZTo6dHlwZU1pc21hdGNo
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9kYXRlVGltZU1vZGVsLnR5cGVNaXNtYXRjaEZvcihl
bGVtZW50KCktPnZhbHVlKCkpOworfQorCitkb3VibGUgQmFzZURhdGVBbmRUaW1lV2l0aG91dFRl
eHRGaWVsZElucHV0VHlwZTo6dmFsdWVBc0RhdGUoKSBjb25zdAoreworICAgIHJldHVybiB2YWx1
ZUFzRG91YmxlKCk7Cit9CisKK2RvdWJsZSBCYXNlRGF0ZUFuZFRpbWVXaXRob3V0VGV4dEZpZWxk
SW5wdXRUeXBlOjp2YWx1ZUFzRG91YmxlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9kYXRlVGlt
ZU1vZGVsLnBhcnNlVG9Eb3VibGUoZWxlbWVudCgpLT52YWx1ZSgpKTsKK30KKworU3RyaW5nIEJh
c2VEYXRlQW5kVGltZVdpdGhvdXRUZXh0RmllbGRJbnB1dFR5cGU6OnZpc2libGVWYWx1ZSgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIGxvY2FsaXplVmFsdWUoZWxlbWVudCgpLT52YWx1ZSgpKTsKK30K
KworI2Vsc2UKKworRGF0ZUNvbXBvbmVudHM6OlR5cGUgVGltZUlucHV0VHlwZTo6ZGF0ZVR5cGUo
KSBjb25zdAoreworICAgIHJldHVybiBEYXRlQ29tcG9uZW50czo6VGltZTsKK30KKworSW5wdXRO
dW1iZXIgVGltZUlucHV0VHlwZTo6ZGVmYXVsdFZhbHVlRm9yU3RlcFVwKCkgY29uc3QKK3sKKyAg
ICBkb3VibGUgY3VycmVudCA9IGN1cnJlbnRUaW1lTVMoKTsKKyAgICBkb3VibGUgdXRjT2Zmc2V0
ID0gY2FsY3VsYXRlVVRDT2Zmc2V0KCk7CisgICAgZG91YmxlIGRzdE9mZnNldCA9IGNhbGN1bGF0
ZURTVE9mZnNldChjdXJyZW50LCB1dGNPZmZzZXQpOworICAgIGludCBvZmZzZXQgPSBzdGF0aWNf
Y2FzdDxpbnQ+KCh1dGNPZmZzZXQgKyBkc3RPZmZzZXQpIC8gbXNQZXJNaW51dGUpOworICAgIGN1
cnJlbnQgKz0gb2Zmc2V0ICogbXNQZXJNaW51dGU7CisKKyAgICBEYXRlQ29tcG9uZW50cyBkYXRl
OworICAgIGRhdGUuc2V0TWlsbGlzZWNvbmRzU2luY2VNaWRuaWdodChjdXJyZW50KTsKKyAgICBk
b3VibGUgbWlsbGlzZWNvbmRzID0gZGF0ZS5taWxsaXNlY29uZHNTaW5jZUVwb2NoKCk7CisgICAg
QVNTRVJUKGlzZmluaXRlKG1pbGxpc2Vjb25kcykpOworICAgIHJldHVybiBjb252ZXJ0RG91Ymxl
VG9JbnB1dE51bWJlcihtaWxsaXNlY29uZHMpOwogfQogCiBib29sIFRpbWVJbnB1dFR5cGU6OnBh
cnNlVG9EYXRlQ29tcG9uZW50c0ludGVybmFsKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNp
Z25lZCBsZW5ndGgsIERhdGVDb21wb25lbnRzKiBvdXQpIGNvbnN0CkBAIC0xMDMsMTAgKzI4Myw3
IEBAIGJvb2wgVGltZUlucHV0VHlwZTo6c2V0TWlsbGlzZWNvbmRUb0RhdGVDb21wb25lbnRzKGRv
dWJsZSB2YWx1ZSwgRGF0ZUNvbXBvbmVudHMqCiAgICAgcmV0dXJuIGRhdGUtPnNldE1pbGxpc2Vj
b25kc1NpbmNlTWlkbmlnaHQodmFsdWUpOwogfQogCi1ib29sIFRpbWVJbnB1dFR5cGU6OmlzVGlt
ZUZpZWxkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KKyNlbmRpZgogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvVGltZUlu
cHV0VHlwZS5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9UaW1lSW5wdXRUeXBlLmgKaW5kZXggODI4
NzVlNTc0MDNiMWE4MmNmMzFkZjRkOWI2YTJmOTQ0YmE4ZGM5YS4uNjhiYzkzNDdhNDc1ZDE5NDQ4
MzlmZDhkMDkzYzMyZDg4N2E4M2I5NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9U
aW1lSW5wdXRUeXBlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9UaW1lSW5wdXRUeXBlLmgK
QEAgLTMxLDEyICszMSw5OSBAQAogI2lmbmRlZiBUaW1lSW5wdXRUeXBlX2gKICNkZWZpbmUgVGlt
ZUlucHV0VHlwZV9oCiAKKyNpZm5kZWYgRU5BQkxFX1RJTUVfSU5QVVRfRklFTERTCisjZXJyb3Ig
WW91IG11c3QgZGVmaW5lIEVOQUJMRV9USU1FX0lOUFVUX0ZJRUxEUworI2VuZGlmCisKICNpbmNs
dWRlICJCYXNlRGF0ZUFuZFRpbWVJbnB1dFR5cGUuaCIKIAogI2lmIEVOQUJMRShJTlBVVF9UWVBF
X1RJTUUpCiAKKyNpZiBFTkFCTEUoVElNRV9JTlBVVF9GSUVMRFMpCisjaW5jbHVkZSAiRGF0ZVRp
bWVFZGl0RWxlbWVudC5oIgorI2luY2x1ZGUgIkRhdGVUaW1lTW9kZWwuaCIKKyNlbmRpZgorCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKKyNpZiBFTkFCTEUoVElNRV9JTlBVVF9GSUVMRFMpCisKKy8v
IFdlIHNob3VsZCBzaGFyZSB0aGlzIG1ldGhvZCBiZXR3ZWVuCisvLyAgQmFzZURhdGVBbmRUaW1l
SW5wdXRUeXBlLCBhbmQKKy8vICBCYXNlRGF0ZUFuZFRpbWVXaXRob3V0VGV4dEZpZWxkSW5wdXRU
eXBlLgorLy8gV2UgbWF5IHdhbnQgdG8gdXNlIHRlbXBsYXRlCisvLyAgY2xhc3MgQmFzZURhdGVB
bmRUaW1lSW5wdXRUeXBlCisvLyAgICAgIDogcHVibGljIFRlbXBsYXRlRGF0ZUFuZFRpbWVJbnB1
dFR5cGU8VGV4dEZpZWxkSW5wdXRUeXBlPgorLy8KKy8vICBjbGFzcyBCYXNlRGF0ZUFuZFRpbWVX
aXRob3V0VGV4dEZpZWxkSW5wdXRUeXBlCisvLyAgICAgIDogcHVibGljIFRlbXBsYXRlRGF0ZUFu
ZFRpbWVJbnB1dFR5cGU8SW5wdXRUeXBlPgorLy8KK2NsYXNzIEJhc2VEYXRlQW5kVGltZVdpdGhv
dXRUZXh0RmllbGRJbnB1dFR5cGUgOiBwdWJsaWMgSW5wdXRUeXBlIHsKK3B1YmxpYzoKKyAgICB2
aXJ0dWFsIFN0cmluZyBzYW5pdGl6ZVZhbHVlKGNvbnN0IFN0cmluZyYpIGNvbnN0IE9WRVJSSURF
IEZJTkFMOworCitwcm90ZWN0ZWQ6CisgICAgQmFzZURhdGVBbmRUaW1lV2l0aG91dFRleHRGaWVs
ZElucHV0VHlwZShIVE1MSW5wdXRFbGVtZW50KiBlbGVtZW50LCBjb25zdCBEYXRlVGltZU1vZGVs
JiBkYXRlVGltZU1vZGVsKQorICAgICAgICA6IElucHV0VHlwZShlbGVtZW50KQorICAgICAgICAs
IG1fZGF0ZVRpbWVNb2RlbChkYXRlVGltZU1vZGVsKQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0
dWFsIElucHV0TnVtYmVyIHBhcnNlVG9OdW1iZXIoY29uc3QgU3RyaW5nJiwgY29uc3QgSW5wdXRO
dW1iZXImKSBjb25zdCBPVkVSUklERSBGSU5BTDsKKworcHJpdmF0ZToKKyAgICB2aXJ0dWFsIFN0
cmluZyBjb252ZXJ0RnJvbVZpc2libGVWYWx1ZShjb25zdCBTdHJpbmcmKSBjb25zdCBPVkVSUklE
RSBGSU5BTDsKKyAgICB2aXJ0dWFsIElucHV0TnVtYmVyIGRlZmF1bHRWYWx1ZUZvclN0ZXBVcCgp
IGNvbnN0IE9WRVJSSURFIEZJTkFMOworICAgIHZpcnR1YWwgYm9vbCBpc1N0ZXBwYWJsZSgpIGNv
bnN0IE9WRVJSSURFIHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIFN0cmluZyBsb2NhbGl6
ZVZhbHVlKGNvbnN0IFN0cmluZyYpIGNvbnN0IE9WRVJSSURFIEZJTkFMOworICAgIHZpcnR1YWwg
U3RyaW5nIHNlcmlhbGl6ZShjb25zdCBJbnB1dE51bWJlciYpIGNvbnN0IE9WRVJSSURFIEZJTkFM
OworICAgIHZpcnR1YWwgdm9pZCBzZXRWYWx1ZUFzRGF0ZShkb3VibGUsIEV4Y2VwdGlvbkNvZGUm
KSBjb25zdCBPVkVSUklERSBGSU5BTDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0VmFsdWVBc0lucHV0
TnVtYmVyKGNvbnN0IElucHV0TnVtYmVyJiwgVGV4dEZpZWxkRXZlbnRCZWhhdmlvciwgRXhjZXB0
aW9uQ29kZSYpIGNvbnN0IE9WRVJSSURFIEZJTkFMOworICAgIHZpcnR1YWwgYm9vbCB0eXBlTWlz
bWF0Y2goKSBjb25zdCBPVkVSUklERSBGSU5BTDsKKyAgICB2aXJ0dWFsIGRvdWJsZSB2YWx1ZUFz
RGF0ZSgpIGNvbnN0IE9WRVJSSURFIEZJTkFMOworICAgIHZpcnR1YWwgZG91YmxlIHZhbHVlQXNE
b3VibGUoKSBjb25zdCBPVkVSUklERSBGSU5BTDsKKyAgICB2aXJ0dWFsIFN0cmluZyB2aXNpYmxl
VmFsdWUoKSBjb25zdCBPVkVSUklERSBGSU5BTDsKKworICAgIGNvbnN0IERhdGVUaW1lTW9kZWwm
IG1fZGF0ZVRpbWVNb2RlbDsKK307CisKKy8vIFRpbWVNb2RlbCB3aWxsIGJlIHNoYXJlZCBiZXR3
ZWVuCisvLyAgLSBUaW1lSW5wdXRUeXBlIHcvIFRleHRGaWVsZElucHV0IGFuZAorLy8gIC0gVGlt
ZUlucHV0VHlwZSB3L28gVGV4dEZpZWxkSW5wdXQKK2NsYXNzIFRpbWVNb2RlbCA6IHB1YmxpYyBE
YXRlVGltZU1vZGVsIHsKK3B1YmxpYzoKKyAgICBUaW1lTW9kZWwoSFRNTElucHV0RWxlbWVudCog
ZWxlbWVudCkgOiBEYXRlVGltZU1vZGVsKGVsZW1lbnQpIHsgfQorCitwcml2YXRlOgorICAgIHZp
cnR1YWwgRGF0ZUNvbXBvbmVudHM6OlR5cGUgZGF0ZVR5cGUoKSBjb25zdCBPVkVSUklERSBGSU5B
TCB7IHJldHVybiBEYXRlQ29tcG9uZW50czo6VGltZTsgfQorICAgIHZpcnR1YWwgSW5wdXROdW1i
ZXIgZGVmYXVsdFZhbHVlRm9yU3RlcFVwKCkgY29uc3QgT1ZFUlJJREUgRklOQUw7CisgICAgdmly
dHVhbCBib29sIHBhcnNlVG9EYXRlQ29tcG9uZW50c0ludGVybmFsKGNvbnN0IFVDaGFyKiBjaGFy
YWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgsIERhdGVDb21wb25lbnRzKiBvdXQpIGNvbnN0IE9WRVJS
SURFIEZJTkFMOworICAgIHZpcnR1YWwgYm9vbCBzZXRNaWxsaXNlY29uZFRvRGF0ZUNvbXBvbmVu
dHMoZG91YmxlLCBEYXRlQ29tcG9uZW50cyopIGNvbnN0IE9WRVJSSURFIEZJTkFMOworfTsKKwor
Y2xhc3MgVGltZUlucHV0VHlwZSA6IHB1YmxpYyBCYXNlRGF0ZUFuZFRpbWVXaXRob3V0VGV4dEZp
ZWxkSW5wdXRUeXBlLCBwcml2YXRlIERhdGVUaW1lRWRpdEVsZW1lbnQ6OkNhbGxiYWNrIHsKK3B1
YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxJbnB1dFR5cGU+IGNyZWF0ZShIVE1MSW5wdXRF
bGVtZW50Kik7CisKK3ByaXZhdGU6CisgICAgVGltZUlucHV0VHlwZShIVE1MSW5wdXRFbGVtZW50
KiBlbGVtZW50KSA6IEJhc2VEYXRlQW5kVGltZVdpdGhvdXRUZXh0RmllbGRJbnB1dFR5cGUoZWxl
bWVudCwgbV9tb2RlbCksIG1fbW9kZWwoZWxlbWVudCkgeyB9CisgICAgdmlydHVhbCBjb25zdCBB
dG9taWNTdHJpbmcmIGZvcm1Db250cm9sVHlwZSgpIGNvbnN0IE9WRVJSSURFIEZJTkFMOworICAg
IHZpcnR1YWwgU3RlcFJhbmdlIGNyZWF0ZVN0ZXBSYW5nZShBbnlTdGVwSGFuZGxpbmcpIGNvbnN0
IE9WRVJSSURFIEZJTkFMOworICAgIHZpcnR1YWwgYm9vbCBpc1RpbWVGaWVsZCgpIGNvbnN0IE9W
RVJSSURFIEZJTkFMOworCisgICAgdmlydHVhbCB2b2lkIGNvbnRyb2xWYWx1ZUNoYW5nZWQoKSBP
VkVSUklERSBGSU5BTDsKKyAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlU2hhZG93U3VidHJlZSgpIE9W
RVJSSURFIEZJTkFMOworICAgIHZpcnR1YWwgdm9pZCBkZXN0cm95U2hhZG93U3VidHJlZSgpIE9W
RVJSSURFIEZJTkFMOworICAgIHZpcnR1YWwgdm9pZCBkaXNhYmxlZEF0dHJpYnV0ZUNoYW5nZWQo
KSBPVkVSUklERSBGSU5BTDsKKyAgICB2aXJ0dWFsIHZpcnR1YWwgdm9pZCBmb3J3YXJkRXZlbnQo
RXZlbnQqKSBPVkVSUklERSBGSU5BTDsKKyAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlRE9NQWN0aXZh
dGVFdmVudChFdmVudCopIE9WRVJSSURFIEZJTkFMOworICAgIHZpcnR1YWwgdm9pZCByZWFkb25s
eUF0dHJpYnV0ZUNoYW5nZWQoKSBPVkVSUklERSBGSU5BTDsKKworICAgIFRpbWVNb2RlbCBtX21v
ZGVsOworICAgIFJlZlB0cjxEYXRlVGltZUVkaXRFbGVtZW50PiBtX2RhdGVUaW1lRWRpdEVsZW1l
bnQ7Cit9OworCisjZWxzZQogY2xhc3MgVGltZUlucHV0VHlwZSA6IHB1YmxpYyBCYXNlRGF0ZUFu
ZFRpbWVJbnB1dFR5cGUgewogcHVibGljOgogICAgIHN0YXRpYyBQYXNzT3duUHRyPElucHV0VHlw
ZT4gY3JlYXRlKEhUTUxJbnB1dEVsZW1lbnQqKTsKQEAgLTUxLDYgKzEzOCw3IEBAIHByaXZhdGU6
CiAgICAgdmlydHVhbCBib29sIHNldE1pbGxpc2Vjb25kVG9EYXRlQ29tcG9uZW50cyhkb3VibGUs
IERhdGVDb21wb25lbnRzKikgY29uc3QgT1ZFUlJJREU7CiAgICAgdmlydHVhbCBib29sIGlzVGlt
ZUZpZWxkKCkgY29uc3QgT1ZFUlJJREU7CiB9OworI2VuZGlmCiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvVGV4dENvbnRy
b2xJbm5lckVsZW1lbnRzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L1RleHRDb250
cm9sSW5uZXJFbGVtZW50cy5jcHAKaW5kZXggMTAwZGFlYjY0N2I5ZDc3YWE0YzFiNDMxMmJjOWM1
ZTVmYjE4N2FkNi4uZmE4NjA0MGI2NGY5MTZmY2U5OTNmYTYzNWE1YTYwZWY5Mjk2NjE1ZiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvVGV4dENvbnRyb2xJbm5lckVsZW1l
bnRzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9UZXh0Q29udHJvbElubmVy
RWxlbWVudHMuY3BwCkBAIC0yMzQsMTggKzIzNCwxOSBAQCB2b2lkIFNlYXJjaEZpZWxkQ2FuY2Vs
QnV0dG9uRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCogZXZlbnQpCiAKIC8vIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotaW5saW5lIFNwaW5CdXR0b25FbGVtZW50OjpT
cGluQnV0dG9uRWxlbWVudChEb2N1bWVudCogZG9jdW1lbnQpCitpbmxpbmUgU3BpbkJ1dHRvbkVs
ZW1lbnQ6OlNwaW5CdXR0b25FbGVtZW50KERvY3VtZW50KiBkb2N1bWVudCwgQ2FsbGJhY2sqIGNh
bGxiYWNrKQogICAgIDogSFRNTERpdkVsZW1lbnQoZGl2VGFnLCBkb2N1bWVudCkKICAgICAsIG1f
Y2FwdHVyaW5nKGZhbHNlKQogICAgICwgbV91cERvd25TdGF0ZShJbmRldGVybWluYXRlKQogICAg
ICwgbV9wcmVzc1N0YXJ0aW5nU3RhdGUoSW5kZXRlcm1pbmF0ZSkKICAgICAsIG1fcmVwZWF0aW5n
VGltZXIodGhpcywgJlNwaW5CdXR0b25FbGVtZW50OjpyZXBlYXRpbmdUaW1lckZpcmVkKQorICAg
ICwgbV9jYWxsYmFjayhjYWxsYmFjaykKIHsKIH0KIAotUGFzc1JlZlB0cjxTcGluQnV0dG9uRWxl
bWVudD4gU3BpbkJ1dHRvbkVsZW1lbnQ6OmNyZWF0ZShEb2N1bWVudCogZG9jdW1lbnQpCitQYXNz
UmVmUHRyPFNwaW5CdXR0b25FbGVtZW50PiBTcGluQnV0dG9uRWxlbWVudDo6Y3JlYXRlKERvY3Vt
ZW50KiBkb2N1bWVudCwgQ2FsbGJhY2sqIGNhbGxiYWNrKQogewotICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgU3BpbkJ1dHRvbkVsZW1lbnQoZG9jdW1lbnQpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IFNwaW5CdXR0b25FbGVtZW50KGRvY3VtZW50LCBjYWxsYmFjaykpOwogfQogCiBjb25zdCBB
dG9taWNTdHJpbmcmIFNwaW5CdXR0b25FbGVtZW50OjpzaGFkb3dQc2V1ZG9JZCgpIGNvbnN0CkBA
IC0yOTQsNyArMjk1LDEzIEBAIHZvaWQgU3BpbkJ1dHRvbkVsZW1lbnQ6OmRlZmF1bHRFdmVudEhh
bmRsZXIoRXZlbnQqIGV2ZW50KQogICAgICAgICAgICAgaW5wdXQtPnNlbGVjdCgpOwogICAgICAg
ICAgICAgaWYgKHJlbmRlcmVyKCkpIHsKICAgICAgICAgICAgICAgICBpZiAobV91cERvd25TdGF0
ZSAhPSBJbmRldGVybWluYXRlKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlucHV0LT5zdGVwVXBG
cm9tUmVuZGVyZXIobV91cERvd25TdGF0ZSA9PSBVcCA/IDEgOiAtMSk7CisgICAgICAgICAgICAg
ICAgICAgIGlmIChtX2NhbGxiYWNrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobV91
cERvd25TdGF0ZSA9PSBVcCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2NhbGxiYWNr
LT5zdGVwVXAoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbV9jYWxsYmFjay0+c3RlcERvd24oKTsKKyAgICAgICAgICAgICAgICAg
ICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dC0+c3RlcFVwRnJvbVJlbmRl
cmVyKG1fdXBEb3duU3RhdGUgPT0gVXAgPyAxIDogLTEpOwogICAgICAgICAgICAgICAgICAgICBp
ZiAocmVuZGVyZXIoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0UmVwZWF0aW5nVGlt
ZXIoKTsKICAgICAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L3NoYWRvdy9UZXh0Q29udHJvbElubmVyRWxlbWVudHMuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
c2hhZG93L1RleHRDb250cm9sSW5uZXJFbGVtZW50cy5oCmluZGV4IGMyMjgwZjFlODM3ZWUzNTRm
MmIxMTE4NjhmNjY0M2FlODgzY2I0YzQuLmFiMTNiMDAyYzQ1ODc3YmMxZjEzZjk2OWJmOGMzMTgx
NGQ5NjYwNDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L1RleHRDb250
cm9sSW5uZXJFbGVtZW50cy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L1RleHRD
b250cm9sSW5uZXJFbGVtZW50cy5oCkBAIC05NiwxNCArOTYsMTkgQEAgcHVibGljOgogICAgICAg
ICBVcCwKICAgICB9OwogCi0gICAgc3RhdGljIFBhc3NSZWZQdHI8U3BpbkJ1dHRvbkVsZW1lbnQ+
IGNyZWF0ZShEb2N1bWVudCopOworICAgIGNsYXNzIENhbGxiYWNrIHsKKyAgICAgICAgcHVibGlj
OiB2aXJ0dWFsIHZvaWQgc3RlcERvd24oKSA9IDA7CisgICAgICAgIHB1YmxpYzogdmlydHVhbCB2
b2lkIHN0ZXBVcCgpID0gMDsKKyAgICB9OworCisgICAgc3RhdGljIFBhc3NSZWZQdHI8U3BpbkJ1
dHRvbkVsZW1lbnQ+IGNyZWF0ZShEb2N1bWVudCosIENhbGxiYWNrKiA9IDApOwogICAgIFVwRG93
blN0YXRlIHVwRG93blN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV91cERvd25TdGF0ZTsgfQogICAg
IHZpcnR1YWwgdm9pZCByZWxlYXNlQ2FwdHVyZSgpOwogCiAgICAgdm9pZCBzdGVwKGludCBhbW91
bnQpOwogICAgIAogcHJpdmF0ZToKLSAgICBTcGluQnV0dG9uRWxlbWVudChEb2N1bWVudCopOwor
ICAgIFNwaW5CdXR0b25FbGVtZW50KERvY3VtZW50KiwgQ2FsbGJhY2sqKTsKIAogICAgIHZpcnR1
YWwgY29uc3QgQXRvbWljU3RyaW5nJiBzaGFkb3dQc2V1ZG9JZCgpIGNvbnN0OwogICAgIHZpcnR1
YWwgdm9pZCBkZXRhY2goKTsKQEAgLTEyMSw2ICsxMjYsNyBAQCBwcml2YXRlOgogICAgIFVwRG93
blN0YXRlIG1fdXBEb3duU3RhdGU7CiAgICAgVXBEb3duU3RhdGUgbV9wcmVzc1N0YXJ0aW5nU3Rh
dGU7CiAgICAgVGltZXI8U3BpbkJ1dHRvbkVsZW1lbnQ+IG1fcmVwZWF0aW5nVGltZXI7CisgICAg
Q2FsbGJhY2sqIG1fY2FsbGJhY2s7CiB9OwogCiAjaWYgRU5BQkxFKElOUFVUX1NQRUVDSCkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vZmVhdHVyZXMuZ3lwaSBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vZmVhdHVyZXMuZ3lwaQppbmRleCAwY2U0NjgyMTdkNTllZjNlYTEzNDJm
NzUzYmQ5NjFjZjdkNDVjMTUwLi4yNjRmOGQyMDFhMDRmZTdhZjlkMTI2MmFmMDc1MThhOGJlNTNk
NWY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL2ZlYXR1cmVzLmd5cGkKKysr
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9mZWF0dXJlcy5neXBpCkBAIC0xNjIsMTEgKzE2Miwx
MSBAQAogICAgICAgICAgICdFTkFCTEVfRk9OVF9CT09TVElORz0wJywKICAgICAgICAgICAnRU5B
QkxFX0ZVTExTQ1JFRU5fTUVESUFfQ09OVFJPTFM9MCcsCiAgICAgICAgICAgJ0VOQUJMRV9JTlBV
VF9TUEVFQ0g9MScsCi0gICAgICAgICAgJ0VOQUJMRV9JTlBVVF9UWVBFX0RBVEVUSU1FPTAnLAot
ICAgICAgICAgICdFTkFCTEVfSU5QVVRfVFlQRV9EQVRFVElNRUxPQ0FMPTAnLAotICAgICAgICAg
ICdFTkFCTEVfSU5QVVRfVFlQRV9NT05USD0wJywKLSAgICAgICAgICAnRU5BQkxFX0lOUFVUX1RZ
UEVfVElNRT0wJywKLSAgICAgICAgICAnRU5BQkxFX0lOUFVUX1RZUEVfV0VFSz0wJywKKyAgICAg
ICAgICAnRU5BQkxFX0lOUFVUX1RZUEVfREFURVRJTUU9MScsCisgICAgICAgICAgJ0VOQUJMRV9J
TlBVVF9UWVBFX0RBVEVUSU1FTE9DQUw9MScsCisgICAgICAgICAgJ0VOQUJMRV9JTlBVVF9UWVBF
X01PTlRIPTEnLAorICAgICAgICAgICdFTkFCTEVfSU5QVVRfVFlQRV9USU1FPTEnLAorICAgICAg
ICAgICdFTkFCTEVfSU5QVVRfVFlQRV9XRUVLPTEnLAogICAgICAgICAgICdFTkFCTEVfSkFWQVND
UklQVF9JMThOX0FQST0xJywKICAgICAgICAgICAnRU5BQkxFX0xFR0FDWV9OT1RJRklDQVRJT05T
PTEnLAogICAgICAgICAgICdFTkFCTEVfTUVESUFfQ0FQVFVSRT0wJywKQEAgLTE3Niw2ICsxNzYs
NyBAQAogICAgICAgICAgICdFTkFCTEVfT1ZFUkZMT1dfU0NST0xMSU5HPTAnLAogICAgICAgICAg
ICdFTkFCTEVfUEFHRV9QT1BVUD0xJywKICAgICAgICAgICAnRU5BQkxFX1NIQVJFRF9XT1JLRVJT
PTEnLAorICAgICAgICAgICdFTkFCTEVfVElNRV9JTlBVVF9GSUVMRFM9MScsCiAgICAgICAgICAg
J0VOQUJMRV9XRUJfQVVESU89MScsCiAgICAgICAgIF0sCiAgICAgICB9XSwK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>147253</attachid>
            <date>2012-06-13 00:35:35 -0700</date>
            <delta_ts>2012-06-25 03:38:49 -0700</delta_ts>
            <desc>Patch 2 - WIP</desc>
            <filename>bug-88970-20120613163534.patch</filename>
            <type>text/plain</type>
            <size>52110</size>
            <attacher>yosin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIwMDI0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTAyYTA2ZDRmMDA2Nzkz
YWU1YTQxYWI1YTYzODk5OTZhNjAxZGVhMC4uMDU0Y2IwNmMyNWE2M2QxMGM3YjFkNTFhMTkzNTY4
MDJlOTdhNTg0MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU5IEBACisyMDEyLTA2LTEzICBZb3No
aWZ1bWkgSW5vdWUgIDx5b3NpbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW0Zvcm1dIFRpbWUg
aW5wdXQgZmllbGRzIFVJCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD04ODk3MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFdJUDogRm9yIGFyY2hpdGVjdHVyZSByZXZpZXdpbmcuCisKKyAgICAgICAgTm8gbmV3
IHRlc3RzLiBJJ2xsIHByb3ZpZGUgdGVzdHMuCisKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6Cisg
ICAgICAgICogaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxJbnB1dEVsZW1lbnQ6OmlzTW91c2VGb2N1c2FibGUpOgorICAgICAgICAqIGh0bWwvVGltZUlu
cHV0VHlwZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUaW1lSW5wdXRUeXBlOjpjcmVhdGVTdGVw
UmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6VGltZUlucHV0VHlwZTo6aXNUaW1lRmllbGQpOgor
ICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpUaW1lTW9kZWw6OmRlZmF1bHRW
YWx1ZUZvclN0ZXBVcCk6CisgICAgICAgIChXZWJDb3JlOjpUaW1lSW5wdXRUeXBlOjpjb250cm9s
VmFsdWVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlRpbWVJbnB1dFR5cGU6OmNyZWF0ZVNo
YWRvd1N1YnRyZWUpOgorICAgICAgICAoV2ViQ29yZTo6VGltZUlucHV0VHlwZTo6ZGVzdHJveVNo
YWRvd1N1YnRyZWUpOgorICAgICAgICAoV2ViQ29yZTo6VGltZUlucHV0VHlwZTo6Zm9yd2FyZEV2
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlRpbWVJbnB1dFR5cGU6OmRpc2FibGVkQXR0cmlidXRl
Q2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpUaW1lSW5wdXRUeXBlOjpoYW5kbGVET01BY3Rp
dmF0ZUV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlRpbWVJbnB1dFR5cGU6OnJlYWRvbmx5QXR0
cmlidXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpCYXNlRGF0ZUFuZFRpbWVXaXRob3V0
VGV4dEZpZWxkSW5wdXRUeXBlOjpjb252ZXJ0RnJvbVZpc2libGVWYWx1ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpCYXNlRGF0ZUFuZFRpbWVXaXRob3V0VGV4dEZpZWxkSW5wdXRUeXBlOjpkZWZhdWx0
VmFsdWVGb3JTdGVwVXApOgorICAgICAgICAoV2ViQ29yZTo6QmFzZURhdGVBbmRUaW1lV2l0aG91
dFRleHRGaWVsZElucHV0VHlwZTo6bG9jYWxpemVWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpC
YXNlRGF0ZUFuZFRpbWVXaXRob3V0VGV4dEZpZWxkSW5wdXRUeXBlOjpwYXJzZVRvTnVtYmVyKToK
KyAgICAgICAgKFdlYkNvcmU6OkJhc2VEYXRlQW5kVGltZVdpdGhvdXRUZXh0RmllbGRJbnB1dFR5
cGU6OnNhbml0aXplVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QmFzZURhdGVBbmRUaW1lV2l0
aG91dFRleHRGaWVsZElucHV0VHlwZTo6c2VyaWFsaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkJh
c2VEYXRlQW5kVGltZVdpdGhvdXRUZXh0RmllbGRJbnB1dFR5cGU6OnNldFZhbHVlQXNEYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkJhc2VEYXRlQW5kVGltZVdpdGhvdXRUZXh0RmllbGRJbnB1dFR5
cGU6OnNldFZhbHVlQXNJbnB1dE51bWJlcik6CisgICAgICAgIChXZWJDb3JlOjpCYXNlRGF0ZUFu
ZFRpbWVXaXRob3V0VGV4dEZpZWxkSW5wdXRUeXBlOjp0eXBlTWlzbWF0Y2gpOgorICAgICAgICAo
V2ViQ29yZTo6QmFzZURhdGVBbmRUaW1lV2l0aG91dFRleHRGaWVsZElucHV0VHlwZTo6dmFsdWVB
c0RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6QmFzZURhdGVBbmRUaW1lV2l0aG91dFRleHRGaWVs
ZElucHV0VHlwZTo6dmFsdWVBc0RvdWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpCYXNlRGF0ZUFu
ZFRpbWVXaXRob3V0VGV4dEZpZWxkSW5wdXRUeXBlOjp2aXNpYmxlVmFsdWUpOgorICAgICAgICAo
V2ViQ29yZTo6VGltZUlucHV0VHlwZTo6ZGF0ZVR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6VGlt
ZUlucHV0VHlwZTo6ZGVmYXVsdFZhbHVlRm9yU3RlcFVwKToKKyAgICAgICAgKiBodG1sL1RpbWVJ
bnB1dFR5cGUuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoQmFzZURhdGVBbmRUaW1l
V2l0aG91dFRleHRGaWVsZElucHV0VHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpCYXNlRGF0ZUFu
ZFRpbWVXaXRob3V0VGV4dEZpZWxkSW5wdXRUeXBlOjpCYXNlRGF0ZUFuZFRpbWVXaXRob3V0VGV4
dEZpZWxkSW5wdXRUeXBlKToKKyAgICAgICAgKFRpbWVNb2RlbCk6CisgICAgICAgIChXZWJDb3Jl
OjpUaW1lTW9kZWw6OlRpbWVNb2RlbCk6CisgICAgICAgIChUaW1lSW5wdXRUeXBlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlRpbWVJbnB1dFR5cGU6OlRpbWVJbnB1dFR5cGUpOgorICAgICAgICAqIGh0
bWwvc2hhZG93L1RleHRDb250cm9sSW5uZXJFbGVtZW50cy5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTcGluQnV0dG9uRWxlbWVudDo6U3BpbkJ1dHRvbkVsZW1lbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6U3BpbkJ1dHRvbkVsZW1lbnQ6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTcGluQnV0
dG9uRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcik6CisgICAgICAgICogaHRtbC9zaGFkb3cv
VGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmg6CisgICAgICAgIChDYWxsYmFjayk6CisgICAgICAg
IChTcGluQnV0dG9uRWxlbWVudCk6CisKIDIwMTItMDYtMTEgIEphbWVzIFJvYmluc29uICA8amFt
ZXNyQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbY2hyb21pdW1dIFBvcnQgRHJhd2luZ0J1ZmZl
ckNocm9taXVtIGZyb20gVGV4dHVyZUxheWVyQ2hyb21pdW0gb3ZlciB0byBXZWJFeHRlcm5hbFRl
eHR1cmVMYXllcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCAyY2U3OGFmODNlNmYyMDZk
NGViYWE0OWU2NDQyZjU4MWQ5OTdkYTFmLi42ODNlYWJkMjhlZTUwZDc3NjFhZWJiMjFlMDQ1ODI3
ZDg2MDk4OGM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwor
KysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyIEBACisy
MDEyLTA2LTEzICBZb3NoaWZ1bWkgSW5vdWUgIDx5b3NpbkBjaHJvbWl1bS5vcmc+CisKKyAgICAg
ICAgW0Zvcm1dIFRpbWUgaW5wdXQgZmllbGRzIFVJCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD04ODk3MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgICogZmVhdHVyZXMuZ3lwaToKKwogMjAxMi0wNS0xMSAgSmFt
ZXMgUm9iaW5zb24gIDxqYW1lc3JAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtjaHJvbWl1bV0g
UG9ydCBEcmF3aW5nQnVmZmVyQ2hyb21pdW0gZnJvbSBUZXh0dXJlTGF5ZXJDaHJvbWl1bSBvdmVy
IHRvIFdlYkV4dGVybmFsVGV4dHVyZUxheWVyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggNTIzNTEyMmY5
MWNjOWIxYmNlNjhlM2NlYWI0YjAzZDBlZTE4NzUxMC4uNDk3N2ZiMTFjY2E3NmU3ODNiNTc0YjEy
MTA2ZTNkYWU2MDYxMTg1YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBp
CisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtNTQ2OCw2ICs1NDY4LDggQEAK
ICAgICAgICAgICAgICdodG1sL0RhdGVUaW1lSW5wdXRUeXBlLmgnLAogICAgICAgICAgICAgJ2h0
bWwvRGF0ZVRpbWVMb2NhbElucHV0VHlwZS5jcHAnLAogICAgICAgICAgICAgJ2h0bWwvRGF0ZVRp
bWVMb2NhbElucHV0VHlwZS5oJywKKyAgICAgICAgICAgICdodG1sL0RhdGVUaW1lTW9kZWwuY3Bw
JywKKyAgICAgICAgICAgICdodG1sL0RhdGVUaW1lTW9kZWwuaCcsCiAgICAgICAgICAgICAnaHRt
bC9FbWFpbElucHV0VHlwZS5jcHAnLAogICAgICAgICAgICAgJ2h0bWwvRW1haWxJbnB1dFR5cGUu
aCcsCiAgICAgICAgICAgICAnaHRtbC9GVFBEaXJlY3RvcnlEb2N1bWVudC5jcHAnLApAQCAtNTgy
NCw2ICs1ODI2LDggQEAKICAgICAgICAgICAgICdodG1sL3NoYWRvdy9Db250ZW50RGlzdHJpYnV0
b3IuaCcsCiAgICAgICAgICAgICAnaHRtbC9zaGFkb3cvQ29udGVudFNlbGVjdG9yUXVlcnkuY3Bw
JywKICAgICAgICAgICAgICdodG1sL3NoYWRvdy9Db250ZW50U2VsZWN0b3JRdWVyeS5oJywKKyAg
ICAgICAgICAgICdodG1sL3NoYWRvdy9EYXRlVGltZUVkaXRFbGVtZW50LmNwcCcsCisgICAgICAg
ICAgICAnaHRtbC9zaGFkb3cvRGF0ZVRpbWVFZGl0RWxlbWVudC5oJywKICAgICAgICAgICAgICdo
dG1sL3NoYWRvdy9EZXRhaWxzTWFya2VyQ29udHJvbC5jcHAnLAogICAgICAgICAgICAgJ2h0bWwv
c2hhZG93L0RldGFpbHNNYXJrZXJDb250cm9sLmgnLAogICAgICAgICAgICAgJ2h0bWwvc2hhZG93
L0hUTUxDb250ZW50RWxlbWVudC5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRt
bC9EYXRlVGltZU1vZGVsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvRGF0ZVRpbWVNb2RlbC5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uMmE5ZjhhMTljZTc5MzMyZTM1MDkzYjllMzljNjk4NmE3ZmE2NWE5Nwot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvRGF0ZVRpbWVNb2RlbC5jcHAK
QEAgLTAsMCArMSwxNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUK
KyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJp
Z2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUg
bmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20K
KyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICog
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
CisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRGF0ZVRpbWVN
b2RlbC5oIgorCisjaW5jbHVkZSAiSFRNTElucHV0RWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxO
YW1lcy5oIgorI2luY2x1ZGUgIktleWJvYXJkRXZlbnQuaCIKKyNpbmNsdWRlICJMb2NhbGl6ZWRE
YXRlLmgiCisjaW5jbHVkZSA8bGltaXRzPgorI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgor
I2luY2x1ZGUgPHd0Zi9EYXRlTWF0aC5oPgorI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Cisj
aW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcu
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwor
dXNpbmcgbmFtZXNwYWNlIHN0ZDsKKworc3RhdGljIGNvbnN0IGludCBtc2VjUGVyTWludXRlID0g
NjAgKiAxMDAwOworc3RhdGljIGNvbnN0IGludCBtc2VjUGVyU2Vjb25kID0gMTAwMDsKKworU3Ry
aW5nIERhdGVUaW1lTW9kZWw6OmNvbnZlcnRGcm9tVmlzaWJsZVZhbHVlKGNvbnN0IFN0cmluZyYg
dmlzaWJsZVZhbHVlKSBjb25zdAoreworICAgIGlmICh2aXNpYmxlVmFsdWUuaXNFbXB0eSgpKQor
ICAgICAgICByZXR1cm4gdmlzaWJsZVZhbHVlOworCisgICAgZG91YmxlIHBhcnNlZFZhbHVlID0g
cGFyc2VMb2NhbGl6ZWREYXRlKHZpc2libGVWYWx1ZSwgZGF0ZVR5cGUoKSk7CisgICAgaWYgKCFp
c2Zpbml0ZShwYXJzZWRWYWx1ZSkpCisgICAgICAgIHJldHVybiB2aXNpYmxlVmFsdWU7CisKKyAg
ICByZXR1cm4gc2VyaWFsaXplV2l0aE1pbGxpc2Vjb25kcyhwYXJzZWRWYWx1ZSk7Cit9CisKK0lu
cHV0TnVtYmVyIERhdGVUaW1lTW9kZWw6OmRlZmF1bHRWYWx1ZUZvclN0ZXBVcCgpIGNvbnN0Cit7
CisgICAgZG91YmxlIG1zID0gY3VycmVudFRpbWVNUygpOworICAgIGRvdWJsZSB1dGNPZmZzZXQg
PSBjYWxjdWxhdGVVVENPZmZzZXQoKTsKKyAgICBkb3VibGUgZHN0T2Zmc2V0ID0gY2FsY3VsYXRl
RFNUT2Zmc2V0KG1zLCB1dGNPZmZzZXQpOworICAgIGludCBvZmZzZXQgPSBzdGF0aWNfY2FzdDxp
bnQ+KCh1dGNPZmZzZXQgKyBkc3RPZmZzZXQpIC8gbXNQZXJNaW51dGUpOworICAgIHJldHVybiBj
b252ZXJ0RG91YmxlVG9JbnB1dE51bWJlcihtcyArIChvZmZzZXQgKiBtc1Blck1pbnV0ZSkpOwor
fQorCitTdHJpbmcgRGF0ZVRpbWVNb2RlbDo6bG9jYWxpemVWYWx1ZShjb25zdCBTdHJpbmcmIHBy
b3Bvc2VkVmFsdWUpIGNvbnN0Cit7CisgICAgRGF0ZUNvbXBvbmVudHMgZGF0ZTsKKyAgICBpZiAo
IXBhcnNlVG9EYXRlQ29tcG9uZW50cyhwcm9wb3NlZFZhbHVlLCAmZGF0ZSkpCisgICAgICAgIHJl
dHVybiBwcm9wb3NlZFZhbHVlOworCisgICAgU3RyaW5nIGxvY2FsaXplZCA9IGZvcm1hdExvY2Fs
aXplZERhdGUoZGF0ZSk7CisgICAgcmV0dXJuIGxvY2FsaXplZC5pc0VtcHR5KCkgPyBwcm9wb3Nl
ZFZhbHVlIDogbG9jYWxpemVkOworfQorCitib29sIERhdGVUaW1lTW9kZWw6OnBhcnNlVG9EYXRl
Q29tcG9uZW50cyhjb25zdCBTdHJpbmcmIHNvdXJjZSwgRGF0ZUNvbXBvbmVudHMqIG91dCkgY29u
c3QKK3sKKyAgICBpZiAoc291cmNlLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIERhdGVDb21wb25lbnRzIGlnbm9yZWRSZXN1bHQ7CisgICAgaWYgKCFvdXQpCisgICAgICAg
IG91dCA9ICZpZ25vcmVkUmVzdWx0OworICAgIHJldHVybiBwYXJzZVRvRGF0ZUNvbXBvbmVudHNJ
bnRlcm5hbChzb3VyY2UuY2hhcmFjdGVycygpLCBzb3VyY2UubGVuZ3RoKCksIG91dCk7Cit9CisK
K2RvdWJsZSBEYXRlVGltZU1vZGVsOjpwYXJzZVRvRG91YmxlKGNvbnN0IFN0cmluZyYgc291cmNl
KSBjb25zdAoreworICAgIERhdGVDb21wb25lbnRzIGRhdGU7CisgICAgaWYgKCFwYXJzZVRvRGF0
ZUNvbXBvbmVudHMoc291cmNlLCAmZGF0ZSkpCisgICAgICAgIHJldHVybiBEYXRlQ29tcG9uZW50
czo6aW52YWxpZE1pbGxpc2Vjb25kcygpOworICAgIGRvdWJsZSBtc2VjID0gZGF0ZS5taWxsaXNl
Y29uZHNTaW5jZUVwb2NoKCk7CisgICAgQVNTRVJUKGlzZmluaXRlKG1zZWMpKTsKKyAgICByZXR1
cm4gbXNlYzsKK30KKworU3RyaW5nIERhdGVUaW1lTW9kZWw6OnNhbml0aXplVmFsdWUoY29uc3Qg
U3RyaW5nJiBwcm9wb3NlZFZhbHVlKSBjb25zdAoreworICAgIHJldHVybiB0eXBlTWlzbWF0Y2hG
b3IocHJvcG9zZWRWYWx1ZSkgPyBTdHJpbmcoKSA6IHByb3Bvc2VkVmFsdWU7Cit9CisKK1N0cmlu
ZyBEYXRlVGltZU1vZGVsOjpzZXJpYWxpemUoY29uc3QgSW5wdXROdW1iZXImIHZhbHVlKSBjb25z
dAoreworICAgIGlmICghdmFsdWUuaXNGaW5pdGUoKSkKKyAgICAgICAgcmV0dXJuIFN0cmluZygp
OworICAgIERhdGVDb21wb25lbnRzIGRhdGU7CisgICAgaWYgKCFzZXRNaWxsaXNlY29uZFRvRGF0
ZUNvbXBvbmVudHMoY29udmVydElucHV0TnVtYmVyVG9Eb3VibGUodmFsdWUpLCAmZGF0ZSkpCisg
ICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICByZXR1cm4gc2VyaWFsaXplV2l0aENvbXBvbmVu
dHMoZGF0ZSk7Cit9CisKK1N0cmluZyBEYXRlVGltZU1vZGVsOjpzZXJpYWxpemVXaXRoQ29tcG9u
ZW50cyhjb25zdCBEYXRlQ29tcG9uZW50cyYgZGF0ZSkgY29uc3QKK3sKKyAgICBJbnB1dE51bWJl
ciBzdGVwOworICAgIGlmICghbV9lbGVtZW50LT5nZXRBbGxvd2VkVmFsdWVTdGVwKCZzdGVwKSkK
KyAgICAgICAgcmV0dXJuIGRhdGUudG9TdHJpbmcoKTsKKyAgICBpZiAoc3RlcC5yZW1haW5kZXIo
bXNlY1Blck1pbnV0ZSkuaXNaZXJvKCkpCisgICAgICAgIHJldHVybiBkYXRlLnRvU3RyaW5nKERh
dGVDb21wb25lbnRzOjpOb25lKTsKKyAgICBpZiAoc3RlcC5yZW1haW5kZXIobXNlY1BlclNlY29u
ZCkuaXNaZXJvKCkpCisgICAgICAgIHJldHVybiBkYXRlLnRvU3RyaW5nKERhdGVDb21wb25lbnRz
OjpTZWNvbmQpOworICAgIHJldHVybiBkYXRlLnRvU3RyaW5nKERhdGVDb21wb25lbnRzOjpNaWxs
aXNlY29uZCk7Cit9CisKK1N0cmluZyBEYXRlVGltZU1vZGVsOjpzZXJpYWxpemVXaXRoTWlsbGlz
ZWNvbmRzKGRvdWJsZSB2YWx1ZSkgY29uc3QKK3sKKyAgICByZXR1cm4gc2VyaWFsaXplKGNvbnZl
cnREb3VibGVUb0lucHV0TnVtYmVyKHZhbHVlKSk7Cit9CisKK2Jvb2wgRGF0ZVRpbWVNb2RlbDo6
dHlwZU1pc21hdGNoRm9yKGNvbnN0IFN0cmluZyYgdmFsdWUpIGNvbnN0Cit7CisgICAgcmV0dXJu
ICF2YWx1ZS5pc0VtcHR5KCkgJiYgIXBhcnNlVG9EYXRlQ29tcG9uZW50cyh2YWx1ZSwgMCk7Cit9
CisKK1N0cmluZyBEYXRlVGltZU1vZGVsOjp2aXNpYmxlVmFsdWUoY29uc3QgU3RyaW5nJiB2YWx1
ZSkgY29uc3QKK3sKKyAgICByZXR1cm4gbG9jYWxpemVWYWx1ZSh2YWx1ZSk7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvRGF0ZVRp
bWVNb2RlbC5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9EYXRlVGltZU1vZGVsLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uMTRhZmU1NmNjZjhkNmQ1MjhlN2Y4YzU5ZTRjZDJiNDIwMGVkMTQ2ZQotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvRGF0ZVRpbWVNb2RlbC5oCkBAIC0wLDAgKzEsNjkg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisg
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUg
SW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRS
SUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAq
IE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaWZuZGVmIERhdGVUaW1lTW9kZWxfaAorI2RlZmluZSBEYXRlVGltZU1vZGVsX2gKKworI2lu
Y2x1ZGUgIkRhdGVDb21wb25lbnRzLmgiCisjaW5jbHVkZSAiU3RlcFJhbmdlLmgiIC8vIEZJWE1F
OiBXZSBzaG91bGQgcmVtb3ZlIG9uY2UgSW5wdU51bWJlciBpcyByZW1vdmVkLgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKKy8vIERhdGVUaW1lTW9kZWwgaXMgYW4gYWJzdHJhY3QgY2xhc3MgZm9y
IGNvbnZlcnRpbmcgZnJvbS90byBEYXRlQ29tcG9uZW50cworLy8gdG8vZnJvbSBTdHJpbmcsIGRv
dWJsZS4KK2NsYXNzIERhdGVUaW1lTW9kZWwgeworcHVibGljOgorICAgIFN0cmluZyBjb252ZXJ0
RnJvbVZpc2libGVWYWx1ZShjb25zdCBTdHJpbmcmKSBjb25zdDsKKyAgICB2aXJ0dWFsIElucHV0
TnVtYmVyIGRlZmF1bHRWYWx1ZUZvclN0ZXBVcCgpIGNvbnN0OworICAgIFN0cmluZyBsb2NhbGl6
ZVZhbHVlKGNvbnN0IFN0cmluZyYpIGNvbnN0OworICAgIGJvb2wgcGFyc2VUb0RhdGVDb21wb25l
bnRzKGNvbnN0IFN0cmluZyYsIERhdGVDb21wb25lbnRzKikgY29uc3Q7CisgICAgZG91YmxlIHBh
cnNlVG9Eb3VibGUoY29uc3QgU3RyaW5nJikgY29uc3Q7CisgICAgU3RyaW5nIHNhbml0aXplVmFs
dWUoY29uc3QgU3RyaW5nJikgY29uc3Q7CisgICAgU3RyaW5nIHNlcmlhbGl6ZShjb25zdCBJbnB1
dE51bWJlciYgdmFsdWUpIGNvbnN0OworICAgIHZpcnR1YWwgU3RyaW5nIHNlcmlhbGl6ZVdpdGhN
aWxsaXNlY29uZHMoZG91YmxlKSBjb25zdDsKKyAgICBib29sIHR5cGVNaXNtYXRjaEZvcihjb25z
dCBTdHJpbmcmIHZhbHVlKSBjb25zdDsKKyAgICBTdHJpbmcgdmlzaWJsZVZhbHVlKGNvbnN0IFN0
cmluZyYpIGNvbnN0OworCitwcm90ZWN0ZWQ6CisgICAgRGF0ZVRpbWVNb2RlbChIVE1MSW5wdXRF
bGVtZW50KiBlbGVtZW50KSA6IG1fZWxlbWVudChlbGVtZW50KSB7fQorCisgICAgU3RyaW5nIHNl
cmlhbGl6ZVdpdGhDb21wb25lbnRzKGNvbnN0IERhdGVDb21wb25lbnRzJiBkYXRlKSBjb25zdDsK
KyAgICB2aXJ0dWFsIERhdGVDb21wb25lbnRzOjpUeXBlIGRhdGVUeXBlKCkgY29uc3QgPSAwOwor
ICAgIHZpcnR1YWwgYm9vbCBwYXJzZVRvRGF0ZUNvbXBvbmVudHNJbnRlcm5hbChjb25zdCBVQ2hh
ciosIHVuc2lnbmVkIGxlbmd0aCwgRGF0ZUNvbXBvbmVudHMqKSBjb25zdCA9IDA7CisgICAgdmly
dHVhbCBib29sIHNldE1pbGxpc2Vjb25kVG9EYXRlQ29tcG9uZW50cyhkb3VibGUsIERhdGVDb21w
b25lbnRzKikgY29uc3QgPSAwOworCitwcml2YXRlOgorICAgIC8vIEZvciBIVE1MSW5wdXRFbGVt
ZW50OjpnZXRBbGxvd2VkVmFsdWVTdGVwCisgICAgSFRNTElucHV0RWxlbWVudCogbV9lbGVtZW50
OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRGF0ZVRpbWVNb2Rl
bF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcAppbmRleCBjNmNmMWY0
OTcxZTZhZDYyZGRiYzVmMzc5ZGRiNzhiOTNjMzRjZThjLi4yNGNkOWFkMTcxY2JkMWU1MGIzYWRl
MTc0ZDcyZDk3NjU4MmIwMDVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJ
bnB1dEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVu
dC5jcHAKQEAgLTMwMyw3ICszMDMsNyBAQCBib29sIEhUTUxJbnB1dEVsZW1lbnQ6OmlzS2V5Ym9h
cmRGb2N1c2FibGUoS2V5Ym9hcmRFdmVudCogZXZlbnQpIGNvbnN0CiAKIGJvb2wgSFRNTElucHV0
RWxlbWVudDo6aXNNb3VzZUZvY3VzYWJsZSgpIGNvbnN0CiB7Ci0gICAgaWYgKGlzVGV4dEZpZWxk
KCkpCisgICAgaWYgKGlzVGV4dEZpZWxkKCkgfHwgaXNUaW1lRmllbGQoKSkKICAgICAgICAgcmV0
dXJuIEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50Ojppc0ZvY3VzYWJsZSgpOwogICAgIHJldHVy
biBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6aXNNb3VzZUZvY3VzYWJsZSgpOwogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9UaW1lSW5wdXRUeXBlLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvVGltZUlucHV0VHlwZS5jcHAKaW5kZXggNTM3OTJhOTk4YTkyODkzMmE1YzJi
NzQ0ZTQ1ODM1YTQ5YjYzYWNkZS4uNTljNjUyMmM0YmY2YWVlYjNkZmJhMWI1MmM4OTdlMDBhNWU2
NGI3NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9UaW1lSW5wdXRUeXBlLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL1RpbWVJbnB1dFR5cGUuY3BwCkBAIC00MSw2ICs0MSwx
MiBAQAogCiAjaWYgRU5BQkxFKElOUFVUX1RZUEVfVElNRSkKIAorI2luY2x1ZGUgIkNocm9tZS5o
IgorI2luY2x1ZGUgIkNocm9tZUNsaWVudC5oIgorI2luY2x1ZGUgIkVsZW1lbnRTaGFkb3cuaCIK
KyNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAiU2hhZG93Um9vdC5oIgorCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CkBAIC01OSwxMiArNjUsMzAg
QEAgY29uc3QgQXRvbWljU3RyaW5nJiBUaW1lSW5wdXRUeXBlOjpmb3JtQ29udHJvbFR5cGUoKSBj
b25zdAogICAgIHJldHVybiBJbnB1dFR5cGVOYW1lczo6dGltZSgpOwogfQogCi1EYXRlQ29tcG9u
ZW50czo6VHlwZSBUaW1lSW5wdXRUeXBlOjpkYXRlVHlwZSgpIGNvbnN0CitTdGVwUmFuZ2UgVGlt
ZUlucHV0VHlwZTo6Y3JlYXRlU3RlcFJhbmdlKEFueVN0ZXBIYW5kbGluZyBhbnlTdGVwSGFuZGxp
bmcpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIERhdGVDb21wb25lbnRzOjpUaW1lOworICAgIERFRklO
RV9TVEFUSUNfTE9DQUwoY29uc3QgU3RlcFJhbmdlOjpTdGVwRGVzY3JpcHRpb24sIHN0ZXBEZXNj
cmlwdGlvbiwgKHRpbWVEZWZhdWx0U3RlcCwgdGltZURlZmF1bHRTdGVwQmFzZSwgdGltZVN0ZXBT
Y2FsZUZhY3RvciwgU3RlcFJhbmdlOjpTY2FsZWRTdGVwVmFsdWVTaG91bGRCZUludGVnZXIpKTsK
KworICAgIGNvbnN0IElucHV0TnVtYmVyIHN0ZXBCYXNlID0gcGFyc2VUb051bWJlcihlbGVtZW50
KCktPmZhc3RHZXRBdHRyaWJ1dGUobWluQXR0ciksIDApOworICAgIGNvbnN0IElucHV0TnVtYmVy
IG1pbmltdW0gPSBwYXJzZVRvTnVtYmVyKGVsZW1lbnQoKS0+ZmFzdEdldEF0dHJpYnV0ZShtaW5B
dHRyKSwgY29udmVydERvdWJsZVRvSW5wdXROdW1iZXIoRGF0ZUNvbXBvbmVudHM6Om1pbmltdW1U
aW1lKCkpKTsKKyAgICBjb25zdCBJbnB1dE51bWJlciBtYXhpbXVtID0gcGFyc2VUb051bWJlcihl
bGVtZW50KCktPmZhc3RHZXRBdHRyaWJ1dGUobWF4QXR0ciksIGNvbnZlcnREb3VibGVUb0lucHV0
TnVtYmVyKERhdGVDb21wb25lbnRzOjptYXhpbXVtVGltZSgpKSk7CisgICAgY29uc3QgSW5wdXRO
dW1iZXIgc3RlcCA9IFN0ZXBSYW5nZTo6cGFyc2VTdGVwKGFueVN0ZXBIYW5kbGluZywgc3RlcERl
c2NyaXB0aW9uLCBlbGVtZW50KCktPmZhc3RHZXRBdHRyaWJ1dGUoc3RlcEF0dHIpKTsKKyAgICBy
ZXR1cm4gU3RlcFJhbmdlKHN0ZXBCYXNlLCBtaW5pbXVtLCBtYXhpbXVtLCBzdGVwLCBzdGVwRGVz
Y3JpcHRpb24pOwogfQogCi1JbnB1dE51bWJlciBUaW1lSW5wdXRUeXBlOjpkZWZhdWx0VmFsdWVG
b3JTdGVwVXAoKSBjb25zdAorYm9vbCBUaW1lSW5wdXRUeXBlOjppc1RpbWVGaWVsZCgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIHRydWU7Cit9CisKKyNpZiBFTkFCTEUoVElNRV9JTlBVVF9GSUVMRFMp
CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLworLy8KKy8vIFRpbWVNb2RlbAorLy8gKHRoaXMgYmFubmVyIGNvbW1lbnQgd2lsbCBi
ZSByZW1vdmVkLikKKworSW5wdXROdW1iZXIgVGltZU1vZGVsOjpkZWZhdWx0VmFsdWVGb3JTdGVw
VXAoKSBjb25zdAogewogICAgIGRvdWJsZSBjdXJyZW50ID0gY3VycmVudFRpbWVNUygpOwogICAg
IGRvdWJsZSB1dGNPZmZzZXQgPSBjYWxjdWxhdGVVVENPZmZzZXQoKTsKQEAgLTc5LDE1ICsxMDMs
MTcxIEBAIElucHV0TnVtYmVyIFRpbWVJbnB1dFR5cGU6OmRlZmF1bHRWYWx1ZUZvclN0ZXBVcCgp
IGNvbnN0CiAgICAgcmV0dXJuIGNvbnZlcnREb3VibGVUb0lucHV0TnVtYmVyKG1pbGxpc2Vjb25k
cyk7CiB9CiAKLVN0ZXBSYW5nZSBUaW1lSW5wdXRUeXBlOjpjcmVhdGVTdGVwUmFuZ2UoQW55U3Rl
cEhhbmRsaW5nIGFueVN0ZXBIYW5kbGluZykgY29uc3QKK2Jvb2wgVGltZU1vZGVsOjpwYXJzZVRv
RGF0ZUNvbXBvbmVudHNJbnRlcm5hbChjb25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQg
bGVuZ3RoLCBEYXRlQ29tcG9uZW50cyogb3V0KSBjb25zdAogewotICAgIERFRklORV9TVEFUSUNf
TE9DQUwoY29uc3QgU3RlcFJhbmdlOjpTdGVwRGVzY3JpcHRpb24sIHN0ZXBEZXNjcmlwdGlvbiwg
KHRpbWVEZWZhdWx0U3RlcCwgdGltZURlZmF1bHRTdGVwQmFzZSwgdGltZVN0ZXBTY2FsZUZhY3Rv
ciwgU3RlcFJhbmdlOjpTY2FsZWRTdGVwVmFsdWVTaG91bGRCZUludGVnZXIpKTsKKyAgICBBU1NF
UlQob3V0KTsKKyAgICB1bnNpZ25lZCBlbmQ7CisgICAgcmV0dXJuIG91dC0+cGFyc2VUaW1lKGNo
YXJhY3RlcnMsIGxlbmd0aCwgMCwgZW5kKSAmJiBlbmQgPT0gbGVuZ3RoOworfQogCi0gICAgY29u
c3QgSW5wdXROdW1iZXIgc3RlcEJhc2UgPSBwYXJzZVRvTnVtYmVyKGVsZW1lbnQoKS0+ZmFzdEdl
dEF0dHJpYnV0ZShtaW5BdHRyKSwgMCk7Ci0gICAgY29uc3QgSW5wdXROdW1iZXIgbWluaW11bSA9
IHBhcnNlVG9OdW1iZXIoZWxlbWVudCgpLT5mYXN0R2V0QXR0cmlidXRlKG1pbkF0dHIpLCBjb252
ZXJ0RG91YmxlVG9JbnB1dE51bWJlcihEYXRlQ29tcG9uZW50czo6bWluaW11bVRpbWUoKSkpOwot
ICAgIGNvbnN0IElucHV0TnVtYmVyIG1heGltdW0gPSBwYXJzZVRvTnVtYmVyKGVsZW1lbnQoKS0+
ZmFzdEdldEF0dHJpYnV0ZShtYXhBdHRyKSwgY29udmVydERvdWJsZVRvSW5wdXROdW1iZXIoRGF0
ZUNvbXBvbmVudHM6Om1heGltdW1UaW1lKCkpKTsKLSAgICBjb25zdCBJbnB1dE51bWJlciBzdGVw
ID0gU3RlcFJhbmdlOjpwYXJzZVN0ZXAoYW55U3RlcEhhbmRsaW5nLCBzdGVwRGVzY3JpcHRpb24s
IGVsZW1lbnQoKS0+ZmFzdEdldEF0dHJpYnV0ZShzdGVwQXR0cikpOwotICAgIHJldHVybiBTdGVw
UmFuZ2Uoc3RlcEJhc2UsIG1pbmltdW0sIG1heGltdW0sIHN0ZXAsIHN0ZXBEZXNjcmlwdGlvbik7
Citib29sIFRpbWVNb2RlbDo6c2V0TWlsbGlzZWNvbmRUb0RhdGVDb21wb25lbnRzKGRvdWJsZSB2
YWx1ZSwgRGF0ZUNvbXBvbmVudHMqIGRhdGUpIGNvbnN0Cit7CisgICAgQVNTRVJUKGRhdGUpOwor
ICAgIHJldHVybiBkYXRlLT5zZXRNaWxsaXNlY29uZHNTaW5jZU1pZG5pZ2h0KHZhbHVlKTsKK30K
KworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vCisvLworLy8gVGltZUlucHV0VHlwZQorLy8gKHRoaXMgYmFubmVyIGNvbW1lbnQgd2ls
bCBiZSByZW1vdmVkLikKKwordm9pZCBUaW1lSW5wdXRUeXBlOjpjb250cm9sVmFsdWVDaGFuZ2Vk
KCkKK3sKKyAgICBjb25zdCBTdHJpbmcgc3RyaW5nVmFsdWUgPSBzYW5pdGl6ZVZhbHVlKG1fZGF0
ZVRpbWVFZGl0RWxlbWVudC0+dmFsdWUoKSk7CisgICAgUmVmUHRyPEhUTUxJbnB1dEVsZW1lbnQ+
IGlucHV0KGVsZW1lbnQoKSk7CisgICAgSW5wdXRUeXBlOjpzZXRWYWx1ZShzdHJpbmdWYWx1ZSwg
dHJ1ZSwgRGlzcGF0Y2hOb0V2ZW50KTsKKyAgICBpbnB1dC0+ZGlzcGF0Y2hGb3JtQ29udHJvbElu
cHV0RXZlbnQoKTsKKyAgICBpbnB1dC0+ZGlzcGF0Y2hGb3JtQ29udHJvbENoYW5nZUV2ZW50KCk7
Cit9CisKK3ZvaWQgVGltZUlucHV0VHlwZTo6Y3JlYXRlU2hhZG93U3VidHJlZSgpCit7CisgICAg
QVNTRVJUKGVsZW1lbnQoKS0+c2hhZG93KCkpOworCisgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0g
ZWxlbWVudCgpLT5kb2N1bWVudCgpOworICAgIG1fZGF0ZVRpbWVFZGl0RWxlbWVudCA9IERhdGVU
aW1lRWRpdEVsZW1lbnQ6OmNyZWF0ZShkb2N1bWVudCwgKnRoaXMpOworICAgIGVsZW1lbnQoKS0+
c2hhZG93KCktPm9sZGVzdFNoYWRvd1Jvb3QoKS0+YXBwZW5kQ2hpbGQobV9kYXRlVGltZUVkaXRF
bGVtZW50KTsKKworICAgIENocm9tZUNsaWVudCogY2hyb21lQ2xpZW50ID0gZG9jdW1lbnQtPnBh
Z2UoKSA/IGRvY3VtZW50LT5wYWdlKCktPmNocm9tZSgpLT5jbGllbnQoKSA6IDA7CisgICAgYm9v
bCBzaG91bGRBZGREZWNvcmF0aW9ucyA9IGNocm9tZUNsaWVudCAmJiBjaHJvbWVDbGllbnQtPndp
bGxBZGRUZXh0RmllbGREZWNvcmF0aW9uc1RvKGVsZW1lbnQoKSk7CisKKyAgICBpZiAoc2hvdWxk
QWRkRGVjb3JhdGlvbnMpCisgICAgICAgIGNocm9tZUNsaWVudC0+YWRkVGV4dEZpZWxkRGVjb3Jh
dGlvbnNUbyhlbGVtZW50KCkpOworfQorCit2b2lkIFRpbWVJbnB1dFR5cGU6OmRlc3Ryb3lTaGFk
b3dTdWJ0cmVlKCkKK3sKKyAgICBtX2RhdGVUaW1lRWRpdEVsZW1lbnQuY2xlYXIoKTsKK30KKwor
dm9pZCBUaW1lSW5wdXRUeXBlOjpmb3J3YXJkRXZlbnQoRXZlbnQqIGV2ZW50KQoreworICAgIGlm
IChtX2RhdGVUaW1lRWRpdEVsZW1lbnQpCisgICAgICAgIG1fZGF0ZVRpbWVFZGl0RWxlbWVudC0+
ZGVmYXVsdEV2ZW50SGFuZGxlcihldmVudCk7Cit9CisKK3ZvaWQgVGltZUlucHV0VHlwZTo6ZGlz
YWJsZWRBdHRyaWJ1dGVDaGFuZ2VkKCkKK3sKKyAgICBpZiAobV9kYXRlVGltZUVkaXRFbGVtZW50
KQorICAgICAgICBtX2RhdGVUaW1lRWRpdEVsZW1lbnQtPmRpc2FibGVkQXR0cmlidXRlQ2hhbmdl
ZCgpOworfQorCit2b2lkIFRpbWVJbnB1dFR5cGU6OmhhbmRsZURPTUFjdGl2YXRlRXZlbnQoRXZl
bnQqIGV2ZW50KQoreworICAgIGlmIChlbGVtZW50KCktPmRpc2FibGVkKCkgfHwgZWxlbWVudCgp
LT5yZWFkT25seSgpIHx8ICFlbGVtZW50KCktPnJlbmRlcmVyKCkpCisgICAgICAgIHJldHVybjsK
KworICAgIGlmIChtX2RhdGVUaW1lRWRpdEVsZW1lbnQpCisgICAgICAgIG1fZGF0ZVRpbWVFZGl0
RWxlbWVudC0+Zm9jdXMoKTsKKworICAgIGV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOworfQor
Cit2b2lkIFRpbWVJbnB1dFR5cGU6OnJlYWRvbmx5QXR0cmlidXRlQ2hhbmdlZCgpCit7CisgICAg
aWYgKG1fZGF0ZVRpbWVFZGl0RWxlbWVudCkKKyAgICAgICAgbV9kYXRlVGltZUVkaXRFbGVtZW50
LT5yZWFkb25seUF0dHJpYnV0ZUNoYW5nZWQoKTsKK30KKworLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLworLy8gVGhlc2UgbWV0
aG9kcyBzaG91bGQgYmUgaW4gQmFzZURhdGVBbmRUaW1lSW5wdXRUeXBlLmNwcAorLy8KK1N0cmlu
ZyBCYXNlRGF0ZUFuZFRpbWVXaXRob3V0VGV4dEZpZWxkSW5wdXRUeXBlOjpjb252ZXJ0RnJvbVZp
c2libGVWYWx1ZShjb25zdCBTdHJpbmcmIHZpc2libGVWYWx1ZSkgY29uc3QKK3sKKyAgICByZXR1
cm4gbV9kYXRlVGltZU1vZGVsLmNvbnZlcnRGcm9tVmlzaWJsZVZhbHVlKHZpc2libGVWYWx1ZSk7
Cit9CisKK0lucHV0TnVtYmVyIEJhc2VEYXRlQW5kVGltZVdpdGhvdXRUZXh0RmllbGRJbnB1dFR5
cGU6OmRlZmF1bHRWYWx1ZUZvclN0ZXBVcCgpIGNvbnN0Cit7CisgICAgZG91YmxlIG1zID0gY3Vy
cmVudFRpbWVNUygpOworICAgIGRvdWJsZSB1dGNPZmZzZXQgPSBjYWxjdWxhdGVVVENPZmZzZXQo
KTsKKyAgICBkb3VibGUgZHN0T2Zmc2V0ID0gY2FsY3VsYXRlRFNUT2Zmc2V0KG1zLCB1dGNPZmZz
ZXQpOworICAgIGludCBvZmZzZXQgPSBzdGF0aWNfY2FzdDxpbnQ+KCh1dGNPZmZzZXQgKyBkc3RP
ZmZzZXQpIC8gbXNQZXJNaW51dGUpOworICAgIHJldHVybiBjb252ZXJ0RG91YmxlVG9JbnB1dE51
bWJlcihtcyArIChvZmZzZXQgKiBtc1Blck1pbnV0ZSkpOworfQorCitTdHJpbmcgQmFzZURhdGVB
bmRUaW1lV2l0aG91dFRleHRGaWVsZElucHV0VHlwZTo6bG9jYWxpemVWYWx1ZShjb25zdCBTdHJp
bmcmIHByb3Bvc2VkVmFsdWUpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZGF0ZVRpbWVNb2RlbC5s
b2NhbGl6ZVZhbHVlKHByb3Bvc2VkVmFsdWUpOworfQorCitJbnB1dE51bWJlciBCYXNlRGF0ZUFu
ZFRpbWVXaXRob3V0VGV4dEZpZWxkSW5wdXRUeXBlOjpwYXJzZVRvTnVtYmVyKGNvbnN0IFN0cmlu
ZyYgc291cmNlLCBjb25zdCBJbnB1dE51bWJlciYgZGVmYXVsdFZhbHVlKSBjb25zdAoreworICAg
IGNvbnN0IGRvdWJsZSBkb3VibGVWYWx1ZSA9IG1fZGF0ZVRpbWVNb2RlbC5wYXJzZVRvRG91Ymxl
KHNvdXJjZSk7CisgICAgcmV0dXJuIGlzZmluaXRlKGRvdWJsZVZhbHVlKSA/IGNvbnZlcnREb3Vi
bGVUb0lucHV0TnVtYmVyKGRvdWJsZVZhbHVlKSA6IGRlZmF1bHRWYWx1ZTsKK30KKworU3RyaW5n
IEJhc2VEYXRlQW5kVGltZVdpdGhvdXRUZXh0RmllbGRJbnB1dFR5cGU6OnNhbml0aXplVmFsdWUo
Y29uc3QgU3RyaW5nJiBwcm9wb3NlZFZhbHVlKSBjb25zdAoreworICAgIHJldHVybiBtX2RhdGVU
aW1lTW9kZWwuc2FuaXRpemVWYWx1ZShwcm9wb3NlZFZhbHVlKTsKK30KKworU3RyaW5nIEJhc2VE
YXRlQW5kVGltZVdpdGhvdXRUZXh0RmllbGRJbnB1dFR5cGU6OnNlcmlhbGl6ZShjb25zdCBJbnB1
dE51bWJlciYgdmFsdWUpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZGF0ZVRpbWVNb2RlbC5zZXJp
YWxpemUodmFsdWUpOworfQorCit2b2lkIEJhc2VEYXRlQW5kVGltZVdpdGhvdXRUZXh0RmllbGRJ
bnB1dFR5cGU6OnNldFZhbHVlQXNEYXRlKGRvdWJsZSB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYpIGNv
bnN0Cit7CisgICAgZWxlbWVudCgpLT5zZXRWYWx1ZShtX2RhdGVUaW1lTW9kZWwuc2VyaWFsaXpl
V2l0aE1pbGxpc2Vjb25kcyh2YWx1ZSkpOworfQorCit2b2lkIEJhc2VEYXRlQW5kVGltZVdpdGhv
dXRUZXh0RmllbGRJbnB1dFR5cGU6OnNldFZhbHVlQXNJbnB1dE51bWJlcihjb25zdCBJbnB1dE51
bWJlciYgbmV3VmFsdWUsIFRleHRGaWVsZEV2ZW50QmVoYXZpb3IgZXZlbnRCZWhhdmlvciwgRXhj
ZXB0aW9uQ29kZSYpIGNvbnN0Cit7CisgICAgZWxlbWVudCgpLT5zZXRWYWx1ZShzZXJpYWxpemUo
bmV3VmFsdWUpLCBldmVudEJlaGF2aW9yKTsKK30KKworYm9vbCBCYXNlRGF0ZUFuZFRpbWVXaXRo
b3V0VGV4dEZpZWxkSW5wdXRUeXBlOjp0eXBlTWlzbWF0Y2goKSBjb25zdAoreworICAgIHJldHVy
biBtX2RhdGVUaW1lTW9kZWwudHlwZU1pc21hdGNoRm9yKGVsZW1lbnQoKS0+dmFsdWUoKSk7Cit9
CisKK2RvdWJsZSBCYXNlRGF0ZUFuZFRpbWVXaXRob3V0VGV4dEZpZWxkSW5wdXRUeXBlOjp2YWx1
ZUFzRGF0ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHZhbHVlQXNEb3VibGUoKTsKK30KKworZG91
YmxlIEJhc2VEYXRlQW5kVGltZVdpdGhvdXRUZXh0RmllbGRJbnB1dFR5cGU6OnZhbHVlQXNEb3Vi
bGUoKSBjb25zdAoreworICAgIHJldHVybiBtX2RhdGVUaW1lTW9kZWwucGFyc2VUb0RvdWJsZShl
bGVtZW50KCktPnZhbHVlKCkpOworfQorCitTdHJpbmcgQmFzZURhdGVBbmRUaW1lV2l0aG91dFRl
eHRGaWVsZElucHV0VHlwZTo6dmlzaWJsZVZhbHVlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbG9j
YWxpemVWYWx1ZShlbGVtZW50KCktPnZhbHVlKCkpOworfQorCisjZWxzZQorCitEYXRlQ29tcG9u
ZW50czo6VHlwZSBUaW1lSW5wdXRUeXBlOjpkYXRlVHlwZSgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IERhdGVDb21wb25lbnRzOjpUaW1lOworfQorCitJbnB1dE51bWJlciBUaW1lSW5wdXRUeXBlOjpk
ZWZhdWx0VmFsdWVGb3JTdGVwVXAoKSBjb25zdAoreworICAgIGRvdWJsZSBjdXJyZW50ID0gY3Vy
cmVudFRpbWVNUygpOworICAgIGRvdWJsZSB1dGNPZmZzZXQgPSBjYWxjdWxhdGVVVENPZmZzZXQo
KTsKKyAgICBkb3VibGUgZHN0T2Zmc2V0ID0gY2FsY3VsYXRlRFNUT2Zmc2V0KGN1cnJlbnQsIHV0
Y09mZnNldCk7CisgICAgaW50IG9mZnNldCA9IHN0YXRpY19jYXN0PGludD4oKHV0Y09mZnNldCAr
IGRzdE9mZnNldCkgLyBtc1Blck1pbnV0ZSk7CisgICAgY3VycmVudCArPSBvZmZzZXQgKiBtc1Bl
ck1pbnV0ZTsKKworICAgIERhdGVDb21wb25lbnRzIGRhdGU7CisgICAgZGF0ZS5zZXRNaWxsaXNl
Y29uZHNTaW5jZU1pZG5pZ2h0KGN1cnJlbnQpOworICAgIGRvdWJsZSBtaWxsaXNlY29uZHMgPSBk
YXRlLm1pbGxpc2Vjb25kc1NpbmNlRXBvY2goKTsKKyAgICBBU1NFUlQoaXNmaW5pdGUobWlsbGlz
ZWNvbmRzKSk7CisgICAgcmV0dXJuIGNvbnZlcnREb3VibGVUb0lucHV0TnVtYmVyKG1pbGxpc2Vj
b25kcyk7CiB9CiAKIGJvb2wgVGltZUlucHV0VHlwZTo6cGFyc2VUb0RhdGVDb21wb25lbnRzSW50
ZXJuYWwoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCwgRGF0ZUNvbXBv
bmVudHMqIG91dCkgY29uc3QKQEAgLTEwMywxMCArMjgzLDcgQEAgYm9vbCBUaW1lSW5wdXRUeXBl
OjpzZXRNaWxsaXNlY29uZFRvRGF0ZUNvbXBvbmVudHMoZG91YmxlIHZhbHVlLCBEYXRlQ29tcG9u
ZW50cyoKICAgICByZXR1cm4gZGF0ZS0+c2V0TWlsbGlzZWNvbmRzU2luY2VNaWRuaWdodCh2YWx1
ZSk7CiB9CiAKLWJvb2wgVGltZUlucHV0VHlwZTo6aXNUaW1lRmllbGQoKSBjb25zdAotewotICAg
IHJldHVybiB0cnVlOwotfQorI2VuZGlmCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9UaW1lSW5wdXRUeXBlLmggYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL1RpbWVJbnB1dFR5cGUuaAppbmRleCA4Mjg3NWU1NzQwM2IxYTgyY2YzMWRmNGQ5
YjZhMmY5NDRiYThkYzlhLi42OGJjOTM0N2E0NzVkMTk0NDgzOWZkOGQwOTNjMzJkODg3YTgzYjk3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL1RpbWVJbnB1dFR5cGUuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL1RpbWVJbnB1dFR5cGUuaApAQCAtMzEsMTIgKzMxLDk5IEBACiAj
aWZuZGVmIFRpbWVJbnB1dFR5cGVfaAogI2RlZmluZSBUaW1lSW5wdXRUeXBlX2gKIAorI2lmbmRl
ZiBFTkFCTEVfVElNRV9JTlBVVF9GSUVMRFMKKyNlcnJvciBZb3UgbXVzdCBkZWZpbmUgRU5BQkxF
X1RJTUVfSU5QVVRfRklFTERTCisjZW5kaWYKKwogI2luY2x1ZGUgIkJhc2VEYXRlQW5kVGltZUlu
cHV0VHlwZS5oIgogCiAjaWYgRU5BQkxFKElOUFVUX1RZUEVfVElNRSkKIAorI2lmIEVOQUJMRShU
SU1FX0lOUFVUX0ZJRUxEUykKKyNpbmNsdWRlICJEYXRlVGltZUVkaXRFbGVtZW50LmgiCisjaW5j
bHVkZSAiRGF0ZVRpbWVNb2RlbC5oIgorI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAor
I2lmIEVOQUJMRShUSU1FX0lOUFVUX0ZJRUxEUykKKworLy8gV2Ugc2hvdWxkIHNoYXJlIHRoaXMg
bWV0aG9kIGJldHdlZW4KKy8vICBCYXNlRGF0ZUFuZFRpbWVJbnB1dFR5cGUsIGFuZAorLy8gIEJh
c2VEYXRlQW5kVGltZVdpdGhvdXRUZXh0RmllbGRJbnB1dFR5cGUuCisvLyBXZSBtYXkgd2FudCB0
byB1c2UgdGVtcGxhdGUKKy8vICBjbGFzcyBCYXNlRGF0ZUFuZFRpbWVJbnB1dFR5cGUKKy8vICAg
ICAgOiBwdWJsaWMgVGVtcGxhdGVEYXRlQW5kVGltZUlucHV0VHlwZTxUZXh0RmllbGRJbnB1dFR5
cGU+CisvLworLy8gIGNsYXNzIEJhc2VEYXRlQW5kVGltZVdpdGhvdXRUZXh0RmllbGRJbnB1dFR5
cGUKKy8vICAgICAgOiBwdWJsaWMgVGVtcGxhdGVEYXRlQW5kVGltZUlucHV0VHlwZTxJbnB1dFR5
cGU+CisvLworY2xhc3MgQmFzZURhdGVBbmRUaW1lV2l0aG91dFRleHRGaWVsZElucHV0VHlwZSA6
IHB1YmxpYyBJbnB1dFR5cGUgeworcHVibGljOgorICAgIHZpcnR1YWwgU3RyaW5nIHNhbml0aXpl
VmFsdWUoY29uc3QgU3RyaW5nJikgY29uc3QgT1ZFUlJJREUgRklOQUw7CisKK3Byb3RlY3RlZDoK
KyAgICBCYXNlRGF0ZUFuZFRpbWVXaXRob3V0VGV4dEZpZWxkSW5wdXRUeXBlKEhUTUxJbnB1dEVs
ZW1lbnQqIGVsZW1lbnQsIGNvbnN0IERhdGVUaW1lTW9kZWwmIGRhdGVUaW1lTW9kZWwpCisgICAg
ICAgIDogSW5wdXRUeXBlKGVsZW1lbnQpCisgICAgICAgICwgbV9kYXRlVGltZU1vZGVsKGRhdGVU
aW1lTW9kZWwpCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwgSW5wdXROdW1iZXIgcGFyc2VU
b051bWJlcihjb25zdCBTdHJpbmcmLCBjb25zdCBJbnB1dE51bWJlciYpIGNvbnN0IE9WRVJSSURF
IEZJTkFMOworCitwcml2YXRlOgorICAgIHZpcnR1YWwgU3RyaW5nIGNvbnZlcnRGcm9tVmlzaWJs
ZVZhbHVlKGNvbnN0IFN0cmluZyYpIGNvbnN0IE9WRVJSSURFIEZJTkFMOworICAgIHZpcnR1YWwg
SW5wdXROdW1iZXIgZGVmYXVsdFZhbHVlRm9yU3RlcFVwKCkgY29uc3QgT1ZFUlJJREUgRklOQUw7
CisgICAgdmlydHVhbCBib29sIGlzU3RlcHBhYmxlKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4g
dHJ1ZTsgfQorICAgIHZpcnR1YWwgU3RyaW5nIGxvY2FsaXplVmFsdWUoY29uc3QgU3RyaW5nJikg
Y29uc3QgT1ZFUlJJREUgRklOQUw7CisgICAgdmlydHVhbCBTdHJpbmcgc2VyaWFsaXplKGNvbnN0
IElucHV0TnVtYmVyJikgY29uc3QgT1ZFUlJJREUgRklOQUw7CisgICAgdmlydHVhbCB2b2lkIHNl
dFZhbHVlQXNEYXRlKGRvdWJsZSwgRXhjZXB0aW9uQ29kZSYpIGNvbnN0IE9WRVJSSURFIEZJTkFM
OworICAgIHZpcnR1YWwgdm9pZCBzZXRWYWx1ZUFzSW5wdXROdW1iZXIoY29uc3QgSW5wdXROdW1i
ZXImLCBUZXh0RmllbGRFdmVudEJlaGF2aW9yLCBFeGNlcHRpb25Db2RlJikgY29uc3QgT1ZFUlJJ
REUgRklOQUw7CisgICAgdmlydHVhbCBib29sIHR5cGVNaXNtYXRjaCgpIGNvbnN0IE9WRVJSSURF
IEZJTkFMOworICAgIHZpcnR1YWwgZG91YmxlIHZhbHVlQXNEYXRlKCkgY29uc3QgT1ZFUlJJREUg
RklOQUw7CisgICAgdmlydHVhbCBkb3VibGUgdmFsdWVBc0RvdWJsZSgpIGNvbnN0IE9WRVJSSURF
IEZJTkFMOworICAgIHZpcnR1YWwgU3RyaW5nIHZpc2libGVWYWx1ZSgpIGNvbnN0IE9WRVJSSURF
IEZJTkFMOworCisgICAgY29uc3QgRGF0ZVRpbWVNb2RlbCYgbV9kYXRlVGltZU1vZGVsOworfTsK
KworLy8gVGltZU1vZGVsIHdpbGwgYmUgc2hhcmVkIGJldHdlZW4KKy8vICAtIFRpbWVJbnB1dFR5
cGUgdy8gVGV4dEZpZWxkSW5wdXQgYW5kCisvLyAgLSBUaW1lSW5wdXRUeXBlIHcvbyBUZXh0Rmll
bGRJbnB1dAorY2xhc3MgVGltZU1vZGVsIDogcHVibGljIERhdGVUaW1lTW9kZWwgeworcHVibGlj
OgorICAgIFRpbWVNb2RlbChIVE1MSW5wdXRFbGVtZW50KiBlbGVtZW50KSA6IERhdGVUaW1lTW9k
ZWwoZWxlbWVudCkgeyB9CisKK3ByaXZhdGU6CisgICAgdmlydHVhbCBEYXRlQ29tcG9uZW50czo6
VHlwZSBkYXRlVHlwZSgpIGNvbnN0IE9WRVJSSURFIEZJTkFMIHsgcmV0dXJuIERhdGVDb21wb25l
bnRzOjpUaW1lOyB9CisgICAgdmlydHVhbCBJbnB1dE51bWJlciBkZWZhdWx0VmFsdWVGb3JTdGVw
VXAoKSBjb25zdCBPVkVSUklERSBGSU5BTDsKKyAgICB2aXJ0dWFsIGJvb2wgcGFyc2VUb0RhdGVD
b21wb25lbnRzSW50ZXJuYWwoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0
aCwgRGF0ZUNvbXBvbmVudHMqIG91dCkgY29uc3QgT1ZFUlJJREUgRklOQUw7CisgICAgdmlydHVh
bCBib29sIHNldE1pbGxpc2Vjb25kVG9EYXRlQ29tcG9uZW50cyhkb3VibGUsIERhdGVDb21wb25l
bnRzKikgY29uc3QgT1ZFUlJJREUgRklOQUw7Cit9OworCitjbGFzcyBUaW1lSW5wdXRUeXBlIDog
cHVibGljIEJhc2VEYXRlQW5kVGltZVdpdGhvdXRUZXh0RmllbGRJbnB1dFR5cGUsIHByaXZhdGUg
RGF0ZVRpbWVFZGl0RWxlbWVudDo6Q2FsbGJhY2sgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNz
T3duUHRyPElucHV0VHlwZT4gY3JlYXRlKEhUTUxJbnB1dEVsZW1lbnQqKTsKKworcHJpdmF0ZToK
KyAgICBUaW1lSW5wdXRUeXBlKEhUTUxJbnB1dEVsZW1lbnQqIGVsZW1lbnQpIDogQmFzZURhdGVB
bmRUaW1lV2l0aG91dFRleHRGaWVsZElucHV0VHlwZShlbGVtZW50LCBtX21vZGVsKSwgbV9tb2Rl
bChlbGVtZW50KSB7IH0KKyAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgZm9ybUNvbnRy
b2xUeXBlKCkgY29uc3QgT1ZFUlJJREUgRklOQUw7CisgICAgdmlydHVhbCBTdGVwUmFuZ2UgY3Jl
YXRlU3RlcFJhbmdlKEFueVN0ZXBIYW5kbGluZykgY29uc3QgT1ZFUlJJREUgRklOQUw7CisgICAg
dmlydHVhbCBib29sIGlzVGltZUZpZWxkKCkgY29uc3QgT1ZFUlJJREUgRklOQUw7CisKKyAgICB2
aXJ0dWFsIHZvaWQgY29udHJvbFZhbHVlQ2hhbmdlZCgpIE9WRVJSSURFIEZJTkFMOworICAgIHZp
cnR1YWwgdm9pZCBjcmVhdGVTaGFkb3dTdWJ0cmVlKCkgT1ZFUlJJREUgRklOQUw7CisgICAgdmly
dHVhbCB2b2lkIGRlc3Ryb3lTaGFkb3dTdWJ0cmVlKCkgT1ZFUlJJREUgRklOQUw7CisgICAgdmly
dHVhbCB2b2lkIGRpc2FibGVkQXR0cmlidXRlQ2hhbmdlZCgpIE9WRVJSSURFIEZJTkFMOworICAg
IHZpcnR1YWwgdmlydHVhbCB2b2lkIGZvcndhcmRFdmVudChFdmVudCopIE9WRVJSSURFIEZJTkFM
OworICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVET01BY3RpdmF0ZUV2ZW50KEV2ZW50KikgT1ZFUlJJ
REUgRklOQUw7CisgICAgdmlydHVhbCB2b2lkIHJlYWRvbmx5QXR0cmlidXRlQ2hhbmdlZCgpIE9W
RVJSSURFIEZJTkFMOworCisgICAgVGltZU1vZGVsIG1fbW9kZWw7CisgICAgUmVmUHRyPERhdGVU
aW1lRWRpdEVsZW1lbnQ+IG1fZGF0ZVRpbWVFZGl0RWxlbWVudDsKK307CisKKyNlbHNlCiBjbGFz
cyBUaW1lSW5wdXRUeXBlIDogcHVibGljIEJhc2VEYXRlQW5kVGltZUlucHV0VHlwZSB7CiBwdWJs
aWM6CiAgICAgc3RhdGljIFBhc3NPd25QdHI8SW5wdXRUeXBlPiBjcmVhdGUoSFRNTElucHV0RWxl
bWVudCopOwpAQCAtNTEsNiArMTM4LDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIGJvb2wgc2V0
TWlsbGlzZWNvbmRUb0RhdGVDb21wb25lbnRzKGRvdWJsZSwgRGF0ZUNvbXBvbmVudHMqKSBjb25z
dCBPVkVSUklERTsKICAgICB2aXJ0dWFsIGJvb2wgaXNUaW1lRmllbGQoKSBjb25zdCBPVkVSUklE
RTsKIH07CisjZW5kaWYKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9EYXRlVGltZUVkaXRFbGVtZW50LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvc2hhZG93L0RhdGVUaW1lRWRpdEVsZW1lbnQuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjA3ZDc0MWY1NjA5NDBlZmEzYzU4OTZhZWMyOTYxZGZjNjk4YTdjN2UKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9EYXRlVGltZUVkaXRFbGVtZW50LmNwcApA
QCAtMCwwICsxLDQ2NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQor
ICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmln
aHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBu
YW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQor
ICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
KyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJEYXRlVGltZUVk
aXRFbGVtZW50LmgiCisKKyNpZiBFTkFCTEUoVElNRV9JTlBVVF9GSUVMRFMpCisKKyNpbmNsdWRl
ICJFbGVtZW50U2hhZG93LmgiCisjaW5jbHVkZSAiRXZlbnRIYW5kbGVyLmgiCisjaW5jbHVkZSAi
SFRNTElucHV0RWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIktl
eWJvYXJkRXZlbnQuaCIKKyNpbmNsdWRlICJNb3VzZUV2ZW50LmgiCisjaW5jbHVkZSAiVGV4dC5o
IgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCit1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOworCitEYXRlVGltZUZpZWxkRWxlbWVu
dDo6RGF0ZVRpbWVGaWVsZEVsZW1lbnQoRG9jdW1lbnQqIGRvY3VtZW50LCBGaWVsZFR5cGUgZmll
bGRUeXBlLCBDYWxsYmFjayYgY2FsbGJhY2spCisgICAgOiBIVE1MRWxlbWVudChzcGFuVGFnLCBk
b2N1bWVudCkKKyAgICAsIG1fY2FsbGJhY2soY2FsbGJhY2spCisgICAgLCBtX2ZpZWxkVHlwZShm
aWVsZFR5cGUpCit7Cit9CisKK3ZvaWQgRGF0ZVRpbWVGaWVsZEVsZW1lbnQ6OmRlZmF1bHRFdmVu
dEhhbmRsZXIoRXZlbnQqIGV2ZW50KQoreworICAgIGlmIChldmVudC0+aXNLZXlib2FyZEV2ZW50
KCkgJiYgZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkua2V5ZG93bkV2ZW50KSB7CisgICAg
ICAgIEtleWJvYXJkRXZlbnQqIGtleWJvYXJkRXZlbnQgPSBzdGF0aWNfY2FzdDxLZXlib2FyZEV2
ZW50Kj4oZXZlbnQpOworCisgICAgICAgIGNvbnN0IFN0cmluZyYga2V5SWRlbnRpZmllciA9IGtl
eWJvYXJkRXZlbnQtPmtleUlkZW50aWZpZXIoKTsKKworICAgICAgICBpZiAoa2V5SWRlbnRpZmll
ciA9PSAiQmFja3NwYWNlIikgeworICAgICAgICAgICAga2V5Ym9hcmRFdmVudC0+c2V0RGVmYXVs
dEhhbmRsZWQoKTsKKyAgICAgICAgICAgIHNldFZvaWQoKTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorCisgICAgICAgIGlmIChrZXlJZGVudGlmaWVyID09ICJEb3duIikgeworICAg
ICAgICAgICAga2V5Ym9hcmRFdmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKKyAgICAgICAgICAg
IHN0ZXBEb3duKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBp
ZiAoa2V5SWRlbnRpZmllciA9PSAiVXAiKSB7CisgICAgICAgICAgICBrZXlib2FyZEV2ZW50LT5z
ZXREZWZhdWx0SGFuZGxlZCgpOworICAgICAgICAgICAgc3RlcFVwKCk7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoIWV2ZW50LT5kZWZhdWx0SGFuZGxl
ZCgpKQorICAgICAgICBIVE1MRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihldmVudCk7Cit9
CisKK3ZvaWQgRGF0ZVRpbWVGaWVsZEVsZW1lbnQ6OnNldFRleHQoY29uc3QgU3RyaW5nJiB0ZXh0
KQoreworICAgIFRleHQqIHRleHROb2RlID0gc3RhdGljX2Nhc3Q8VGV4dCo+KGZpcnN0Q2hpbGQo
KSk7CisKKyAgICBpZiAodGV4dE5vZGUtPndob2xlVGV4dCgpID09IHRleHQpCisgICAgICAgIHJl
dHVybjsKKworICAgIEV4Y2VwdGlvbkNvZGUgZWM7CisgICAgdGV4dE5vZGUtPnJlcGxhY2VXaG9s
ZVRleHQodGV4dCwgZWMpOworCisgICAgbV9jYWxsYmFjay5jb250cm9sVmFsdWVDaGFuZ2VkKCk7
Cit9CisKK0RhdGVUaW1lTnVtZXJpY0ZpZWxkRWxlbWVudDo6RGF0ZVRpbWVOdW1lcmljRmllbGRF
bGVtZW50KERvY3VtZW50KiBkb2N1bWVudCwgRmllbGRUeXBlIGZpZWxkVHlwZSwgQ2FsbGJhY2sm
IGNhbGxiYWNrLCBpbnQgbWluaW11bSwgaW50IG1heGltdW0pCisgICAgOiBEYXRlVGltZUZpZWxk
RWxlbWVudChkb2N1bWVudCwgZmllbGRUeXBlLCBjYWxsYmFjaykKKyAgICAsIG1fbGFzdFNldENo
YXJUaW1lKDApCisgICAgLCBtX21heGltdW0obWF4aW11bSkKKyAgICAsIG1fbWluaW11bShtaW5p
bXVtKQorICAgICwgbV92YWx1ZSgwKQorICAgICwgbV9oYXNWYWx1ZShmYWxzZSkKK3sKKyAgICBB
U1NFUlQobWluaW11bSA8IG1heGltdW0pOworICAgIEFTU0VSVChtYXhpbXVtIDw9IDk5OSk7Cisg
ICAgQVNTRVJUKG1pbmltdW0gPD0gMSk7CisgICAgQVNTRVJUKG1pbmltdW0gPj0gMCk7CisgICAg
c2V0QXR0cmlidXRlKHN0eWxlQXR0ciwKKyAgICAgICAgImRpc3BsYXk6IGlubGluZWJsb2NrOyIK
KyAgICAgICAgImJvcmRlcjogbm9uZTsiCisgICAgICAgICJ0ZXh0LWFsaWduOiByaWdodDsiCisg
ICAgICAgICJ3aWR0aDogMS4yZW07IgorICAgICAgICAicGFkZGluZzogMnB4Iik7Cit9CisKK1Bh
c3NSZWZQdHI8RGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50PiBEYXRlVGltZU51bWVyaWNGaWVs
ZEVsZW1lbnQ6OmNyZWF0ZShEb2N1bWVudCogZG9jdW1lbnQsIEZpZWxkVHlwZSBmaWVsZFR5cGUs
IENhbGxiYWNrJiBjYWxsYmFjaywgaW50IG1pbmltdW0sIGludCBtYXhpbXVtKQoreworICAgIFJl
ZlB0cjxEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQ+IGZpZWxkID0gYWRvcHRSZWYobmV3IERh
dGVUaW1lTnVtZXJpY0ZpZWxkRWxlbWVudChkb2N1bWVudCwgZmllbGRUeXBlLCBjYWxsYmFjaywg
bWluaW11bSwgbWF4aW11bSkpOworICAgIGZpZWxkLT5tX3ZhbHVlID0gMDsKKyAgICBmaWVsZC0+
bV9oYXNWYWx1ZSA9IHRydWU7CisgICAgUmVmUHRyPFRleHQ+IHRleHROb2RlID0gVGV4dDo6Y3Jl
YXRlKGRvY3VtZW50LCBtYXhpbXVtID4gMTAwID8gIjAwMCIgOiAiMDAiKTsKKyAgICBmaWVsZC0+
YXBwZW5kQ2hpbGQodGV4dE5vZGUpOworICAgIHJldHVybiBmaWVsZDsKK30KKwordm9pZCBEYXRl
VGltZU51bWVyaWNGaWVsZEVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2ZW50
KQoreworCisgICAgaWYgKGV2ZW50LT5pc0tleWJvYXJkRXZlbnQoKSAmJiBldmVudC0+dHlwZSgp
ID09IGV2ZW50TmFtZXMoKS5rZXlkb3duRXZlbnQpIHsKKyAgICAgICAgY29uc3QgdW5zaWduZWQg
TWVyZ2VUaHJlc2hvbGQgPSA3MDA7CisgICAgICAgIEtleWJvYXJkRXZlbnQqIGNvbnN0IGtleWJv
YXJkRXZlbnQgPSBzdGF0aWNfY2FzdDxLZXlib2FyZEV2ZW50Kj4oZXZlbnQpOworICAgICAgICBj
b25zdCBpbnQgZGlnaXQgPSBrZXlib2FyZEV2ZW50LT5rZXlDb2RlKCkgLSAnMCc7CisKKyAgICAg
ICAgaWYgKGRpZ2l0ID49IDAgJiYgZGlnaXQgPD0gOSkgeworICAgICAgICAgICAga2V5Ym9hcmRF
dmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKKyAgICAgICAgICAgIGNvbnN0IERPTVRpbWVTdGFt
cCB0aW1lU3RhbXAgPSBldmVudC0+dGltZVN0YW1wKCk7CisgICAgICAgICAgICBpZiAobV9oYXNW
YWx1ZSAmJiB0aW1lU3RhbXAgLSBtX2xhc3RTZXRDaGFyVGltZSA8IE1lcmdlVGhyZXNob2xkKSB7
CisgICAgICAgICAgICAgICAgbV92YWx1ZSA9IGVuc3VyZUluUmFuZ2UobV92YWx1ZSAqIDEwICsg
ZGlnaXQpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBtX3ZhbHVlID0g
ZW5zdXJlSW5SYW5nZShkaWdpdCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtX2xhc3RT
ZXRDaGFyVGltZSA9IHRpbWVTdGFtcDsKKyAgICAgICAgICAgIG1faGFzVmFsdWUgPSB0cnVlOwor
ICAgICAgICAgICAgdXBkYXRlVGV4dCgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisgICAgfQorCisgICAgRGF0ZVRpbWVGaWVsZEVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIo
ZXZlbnQpOworfQorCitpbnQgRGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50OjplbnN1cmVJblJh
bmdlKGludCB2YWx1ZSkKK3sKKyAgICByZXR1cm4gc3RkOjptaW4oc3RkOjptYXgodmFsdWUsIG1f
bWluaW11bSksIG1fbWF4aW11bSk7Cit9CisKK3ZvaWQgRGF0ZVRpbWVOdW1lcmljRmllbGRFbGVt
ZW50OjpzZXRWb2lkKCkKK3sKKyAgICBtX3ZhbHVlID0gMDsKKyAgICBtX2hhc1ZhbHVlID0gZmFs
c2U7CisgICAgdXBkYXRlVGV4dCgpOworfQorCit2b2lkIERhdGVUaW1lTnVtZXJpY0ZpZWxkRWxl
bWVudDo6dXBkYXRlVGV4dCgpCit7CisgICAgaWYgKG1faGFzVmFsdWUpIHsKKyAgICAgICAgc2V0
VGV4dCh2YWx1ZSgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIEZJWE1FOiBI
b3cgZG8gd2UgaGFuZGxlIEhUTUw1IG1heGltdW0geWVhciAyNzU3NjA/CisgICAgc2V0VGV4dCht
X21heGltdW0gPiA5OSA/ICItLS0iIDogIi0tIik7Cit9CisKK3ZvaWQgRGF0ZVRpbWVOdW1lcmlj
RmllbGRFbGVtZW50OjpzdGVwRG93bigpCit7CisgICAgaWYgKG1faGFzVmFsdWUpCisgICAgICAg
IG1fdmFsdWUgPSBtX3ZhbHVlID09IG1fbWluaW11bSA/IG1fbWF4aW11bSA6IGVuc3VyZUluUmFu
Z2UobV92YWx1ZSAtIDEpOworICAgIGVsc2UKKyAgICAgICAgbV92YWx1ZSA9IG1fbWF4aW11bTsK
KworICAgIG1faGFzVmFsdWUgPSB0cnVlOworICAgIHVwZGF0ZVRleHQoKTsKK30KKwordm9pZCBE
YXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQ6OnN0ZXBVcCgpCit7CisgICAgaWYgKG1faGFzVmFs
dWUpCisgICAgICAgIG1fdmFsdWUgPSBtX3ZhbHVlID09IG1fbWF4aW11bSA/IG1fbWluaW11bSA6
IGVuc3VyZUluUmFuZ2UobV92YWx1ZSArIDEpOworICAgIGVsc2UKKyAgICAgICAgbV92YWx1ZSA9
IG1fbWluaW11bTsKKworICAgIG1faGFzVmFsdWUgPSB0cnVlOworICAgIHVwZGF0ZVRleHQoKTsK
K30KKworU3RyaW5nIERhdGVUaW1lTnVtZXJpY0ZpZWxkRWxlbWVudDo6dmFsdWUoKSBjb25zdAor
eworICAgIGlmICghbV9oYXNWYWx1ZSkKKyAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CisK
KyAgICAvLyBGSVhNRTogSG93IGRvIHdlIGhhbmRsZSBIVE1MNSBtYXhpbXVtIHllYXIgMjc1NzYw
PworICAgIGNoYXIgdGV4dFs0XTsKKyAgICB0ZXh0WzBdID0gKChtX3ZhbHVlIC8gMTAwKSAlIDEw
KSArICcwJzsKKyAgICB0ZXh0WzFdID0gKChtX3ZhbHVlIC8gMTApICUgMTApICsgJzAnOworICAg
IHRleHRbMl0gPSAobV92YWx1ZSAlIDEwKSArICcwJzsKKyAgICB0ZXh0WzNdID0gMDsKKyAgICBy
ZXR1cm4gU3RyaW5nKG1fbWF4aW11bSA+IDk5ID8gdGV4dCA6IHRleHQgKyAxKTsKK30KKworRGF0
ZVRpbWVFZGl0RWxlbWVudDo6RGF0ZVRpbWVFZGl0RWxlbWVudChEb2N1bWVudCogZG9jdW1lbnQs
IENhbGxiYWNrJiBjYWxsYmFjaykKKyAgICA6IEhUTUxEaXZFbGVtZW50KGRpdlRhZywgZG9jdW1l
bnQpCisgICAgLCBtX2NhbGxiYWNrKGNhbGxiYWNrKQorICAgICwgbV9mb2N1c0ZpZWxkSW5kZXgo
SW52YWxpZEZpZWxkSW5kZXgpCisgICAgLCBtX251bWJlck9mRmllbGRzKDApCit7Cit9CisKK3Zv
aWQgRGF0ZVRpbWVFZGl0RWxlbWVudDo6Y29udHJvbFZhbHVlQ2hhbmdlZCgpCit7CisgICAgbV9j
YWxsYmFjay5jb250cm9sVmFsdWVDaGFuZ2VkKCk7Cit9CisKK1Bhc3NSZWZQdHI8RGF0ZVRpbWVF
ZGl0RWxlbWVudD4gRGF0ZVRpbWVFZGl0RWxlbWVudDo6Y3JlYXRlKERvY3VtZW50KiBkb2N1bWVu
dCwgQ2FsbGJhY2smIGNhbGxiYWNrKQoreworICAgIFJlZlB0cjxEYXRlVGltZUVkaXRFbGVtZW50
PiBjb250YWluZXIgPSBhZG9wdFJlZihuZXcgRGF0ZVRpbWVFZGl0RWxlbWVudChkb2N1bWVudCwg
Y2FsbGJhY2spKTsKKyAgICBjb250YWluZXItPnNldFNoYWRvd1BzZXVkb0lkKCItd2Via2l0LXRl
eHRmaWVsZC1kZWNvcmF0aW9uLWNvbnRhaW5lciIpOworCisgICAgLy8gRklYTUU6IE5ZSTogQ29u
dHJvbCBvd25lciBjYW4gc3BlY2lmeSBkYXRlIHRpbWUgZm9ybWF0LgorICAgIGNvbnRhaW5lci0+
bV9udW1iZXJPZkZpZWxkcyA9IDQ7CisgICAgY29udGFpbmVyLT5tX2ZpZWxkc1swXSA9IERhdGVU
aW1lTnVtZXJpY0ZpZWxkRWxlbWVudDo6Y3JlYXRlKGRvY3VtZW50LCBEYXRlVGltZUZpZWxkRWxl
bWVudDo6SG91ciwgKmNvbnRhaW5lci5nZXQoKSwgMCwgMjMpOworICAgIGNvbnRhaW5lci0+bV9m
aWVsZHNbMV0gPSBEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQ6OmNyZWF0ZShkb2N1bWVudCwg
RGF0ZVRpbWVGaWVsZEVsZW1lbnQ6Ok1pbnV0ZSwgKmNvbnRhaW5lci5nZXQoKSwgMCwgNTkpOwor
ICAgIGNvbnRhaW5lci0+bV9maWVsZHNbMl0gPSBEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQ6
OmNyZWF0ZShkb2N1bWVudCwgRGF0ZVRpbWVGaWVsZEVsZW1lbnQ6OlNlY29uZCwgKmNvbnRhaW5l
ci5nZXQoKSwgMCwgNTkpOworICAgIGNvbnRhaW5lci0+bV9maWVsZHNbM10gPSBEYXRlVGltZU51
bWVyaWNGaWVsZEVsZW1lbnQ6OmNyZWF0ZShkb2N1bWVudCwgRGF0ZVRpbWVGaWVsZEVsZW1lbnQ6
Ok1pbGxpc2Vjb25kLCAqY29udGFpbmVyLmdldCgpLCAwLCA5OTkpOworICAgIGNvbnRhaW5lci0+
YXBwZW5kQ2hpbGQoY29udGFpbmVyLT5tX2ZpZWxkc1swXSk7CisgICAgY29udGFpbmVyLT5hcHBl
bmRDaGlsZChUZXh0OjpjcmVhdGUoZG9jdW1lbnQsICI6IikpOworICAgIGNvbnRhaW5lci0+YXBw
ZW5kQ2hpbGQoY29udGFpbmVyLT5tX2ZpZWxkc1sxXSk7CisgICAgY29udGFpbmVyLT5hcHBlbmRD
aGlsZChUZXh0OjpjcmVhdGUoZG9jdW1lbnQsICI6IikpOworICAgIGNvbnRhaW5lci0+YXBwZW5k
Q2hpbGQoY29udGFpbmVyLT5tX2ZpZWxkc1syXSk7CisgICAgY29udGFpbmVyLT5hcHBlbmRDaGls
ZChUZXh0OjpjcmVhdGUoZG9jdW1lbnQsICIuIikpOworICAgIGNvbnRhaW5lci0+YXBwZW5kQ2hp
bGQoY29udGFpbmVyLT5tX2ZpZWxkc1szXSk7CisKKyAgICBjb250YWluZXItPm1fc3BpbkJ1dHRv
biA9IFNwaW5CdXR0b25FbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQsIGNvbnRhaW5lci5nZXQoKSk7
CisKKyAgICAvLyBGSVhNRTogU3BpbkJ1dHRvbiBzaG91bGQgaGF2ZSB3aWR0aCBieSBpdHNlbGYu
CisgICAgRXhjZXB0aW9uQ29kZSBlYzsKKyAgICBjb250YWluZXItPm1fc3BpbkJ1dHRvbi0+c2V0
SW5uZXJUZXh0KCIuIiwgZWMpOworCisgICAgY29udGFpbmVyLT5hcHBlbmRDaGlsZChjb250YWlu
ZXItPm1fc3BpbkJ1dHRvbik7CisKKyAgICByZXR1cm4gY29udGFpbmVyOworfQorCit2b2lkIERh
dGVUaW1lRWRpdEVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2ZW50KQorewor
ICAgIGlmICghZXZlbnQtPmlzTW91c2VFdmVudCgpKQorICAgICAgICBMT0dfRVJST1IoIkRhdGVU
aW1lRWRpdEVsZW1lbnQ6IGV2ZW50PSVzIiwgc3RhdGljX2Nhc3Q8U3RyaW5nPihldmVudC0+dHlw
ZSgpKS5hc2NpaSgpLmRhdGEoKSk7CisKKyAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5h
bWVzKCkuZm9jdXNFdmVudCkgeworICAgICAgICBpZiAoIWRpc2FibGVkKCkgJiYgIXJlYWRPbmx5
KCkgJiYgbV9mb2N1c0ZpZWxkSW5kZXggPT0gSW52YWxpZEZpZWxkSW5kZXgpCisgICAgICAgICAg
ICBzZXRGb2N1c0ZpZWxkKDApOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGV2
ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmJsdXJFdmVudCkgeworICAgICAgICBzZXRGb2N1
c0ZpZWxkKEludmFsaWRGaWVsZEluZGV4KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IGlmIChldmVudC0+aXNNb3VzZUV2ZW50KCkpIHsKKyAgICAgICAgaGFuZGxlTW91c2VFdmVudChz
dGF0aWNfY2FzdDxNb3VzZUV2ZW50Kj4oZXZlbnQpKTsKKyAgICB9IGVsc2UgaWYgKGV2ZW50LT5p
c0tleWJvYXJkRXZlbnQoKSkgeworICAgICAgICBoYW5kbGVLZXlib2FyZEV2ZW50KHN0YXRpY19j
YXN0PEtleWJvYXJkRXZlbnQqPihldmVudCkpOworICAgIH0KKworICAgIGlmIChldmVudC0+ZGVm
YXVsdEhhbmRsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgRGF0ZVRpbWVGaWVsZEVsZW1l
bnQqIGZvY3VzRmllbGQgPSBmaWVsZEF0KG1fZm9jdXNGaWVsZEluZGV4KTsKKyAgICBpZiAoIWZv
Y3VzRmllbGQpCisgICAgICAgIHJldHVybjsKKworICAgIGZvY3VzRmllbGQtPmRlZmF1bHRFdmVu
dEhhbmRsZXIoZXZlbnQpOworfQorCitib29sIERhdGVUaW1lRWRpdEVsZW1lbnQ6OmRpc2FibGVk
KCkgY29uc3QKK3sKKyAgICBOb2RlKiBob3N0ID0gc2hhZG93QW5jZXN0b3JOb2RlKCk7CisgICAg
cmV0dXJuICFob3N0IHx8IGhvc3QtPmRpc2FibGVkKCk7Cit9CisKK3ZvaWQgRGF0ZVRpbWVFZGl0
RWxlbWVudDo6ZGlzYWJsZWRBdHRyaWJ1dGVDaGFuZ2VkKCkKK3sKKyAgICAvLyBGSVhNRSBJdCBz
ZWVtcyBib2R5IG9mIGRpc2FibGVkQXR0cmlidXRlQ2hhbmdlZCBhbmQgcmVhZG9ubHlkQXR0cmli
dXRlQ2hhbmdlZCBhcmUgc2FtZS4KKyAgICBpZiAoZGlzYWJsZWQoKSB8fCByZWFkT25seSgpKSB7
CisgICAgICBpZiAobV9zcGluQnV0dG9uKQorICAgICAgICAgIG1fc3BpbkJ1dHRvbi0+cmVsZWFz
ZUNhcHR1cmUoKTsKKworICAgICAgc2V0Rm9jdXNGaWVsZChJbnZhbGlkRmllbGRJbmRleCk7Cisg
ICAgfQorfQorCitEYXRlVGltZUZpZWxkRWxlbWVudCogRGF0ZVRpbWVFZGl0RWxlbWVudDo6Zmll
bGRBdChpbnQgaW5kZXgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGluZGV4ID49IDAgJiYgaW5kZXgg
PCBtX251bWJlck9mRmllbGRzID8gbV9maWVsZHNbaW5kZXhdLmdldCgpIDogMDsKK30KKwordm9p
ZCBEYXRlVGltZUVkaXRFbGVtZW50OjpoYW5kbGVLZXlib2FyZEV2ZW50KEtleWJvYXJkRXZlbnQq
IGtleWJvYXJkRXZlbnQpCit7CisgICAgaWYgKGtleWJvYXJkRXZlbnQtPnR5cGUoKSA9PSBldmVu
dE5hbWVzKCkua2V5ZG93bkV2ZW50ICYmIGZpZWxkQXQobV9mb2N1c0ZpZWxkSW5kZXgpICYmICFk
aXNhYmxlZCgpICYmICFyZWFkT25seSgpKSB7CisgICAgICAgIGNvbnN0IFN0cmluZyYga2V5SWRl
bnRpZmllciA9IGtleWJvYXJkRXZlbnQtPmtleUlkZW50aWZpZXIoKTsKKworICAgICAgICBpZiAo
a2V5SWRlbnRpZmllciA9PSAiTGVmdCIpIHsKKyAgICAgICAgICAgIGtleWJvYXJkRXZlbnQtPnNl
dERlZmF1bHRIYW5kbGVkKCk7CisgICAgICAgICAgICBzZXRGb2N1c0ZpZWxkKHByZXZpb3VzRmll
bGRJbmRleChtX2ZvY3VzRmllbGRJbmRleCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisKKyAgICAgICAgaWYgKGtleUlkZW50aWZpZXIgPT0gIlJpZ2h0IikgeworICAgICAgICAg
ICAga2V5Ym9hcmRFdmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKKyAgICAgICAgICAgIHNldEZv
Y3VzRmllbGQobmV4dEZpZWxkSW5kZXgobV9mb2N1c0ZpZWxkSW5kZXgpKTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBEYXRlVGltZUVkaXRFbGVtZW50
OjpoYW5kbGVNb3VzZUV2ZW50KE1vdXNlRXZlbnQqIG1vdXNlRXZlbnQpCit7CisgICAgaWYgKG1v
dXNlRXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2Vkb3duRXZlbnQgJiYgbW91c2VF
dmVudC0+YnV0dG9uKCkgPT0gTGVmdEJ1dHRvbiAmJiAhZGlzYWJsZWQoKSAmJiAhcmVhZE9ubHko
KSkgeworICAgICAgICBOb2RlKiBjb25zdCByZWxhdGVkVGFyZ2V0ID0gbW91c2VFdmVudC0+dGFy
Z2V0KCktPnRvTm9kZSgpOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG1fbnVtYmVyT2ZG
aWVsZHM7ICsraSkgeworICAgICAgICAgICAgaWYgKG1fZmllbGRzW2ldLmdldCgpID09IHJlbGF0
ZWRUYXJnZXQpIHsKKyAgICAgICAgICAgICAgICBtb3VzZUV2ZW50LT5zZXREZWZhdWx0SGFuZGxl
ZCgpOworICAgICAgICAgICAgICAgIHNldEZvY3VzRmllbGQoaSk7CisgICAgICAgICAgICAgICAg
Tm9kZSogaG9zdCA9IHNoYWRvd0FuY2VzdG9yTm9kZSgpOworICAgICAgICAgICAgICAgIHRvSFRN
TEVsZW1lbnQoaG9zdCktPmZvY3VzKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKK2ludCBEYXRlVGltZUVkaXRFbGVtZW50Ojpu
ZXh0RmllbGRJbmRleChpbnQgaW5kZXgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHN0ZDo6bWF4KHN0
ZDo6bWluKGluZGV4ICsgMSwgbV9udW1iZXJPZkZpZWxkcyAtIDEpLCAwKTsKK30KKworaW50IERh
dGVUaW1lRWRpdEVsZW1lbnQ6OnByZXZpb3VzRmllbGRJbmRleChpbnQgaW5kZXgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIHN0ZDo6bWF4KHN0ZDo6bWluKGluZGV4IC0gMSwgbV9udW1iZXJPZkZpZWxk
cyAtIDEpLCAwKTsKK30KKworYm9vbCBEYXRlVGltZUVkaXRFbGVtZW50OjpyZWFkT25seSgpIGNv
bnN0Cit7CisgICAgTm9kZSogaG9zdCA9IHNoYWRvd0FuY2VzdG9yTm9kZSgpOworICAgIGlmICgh
aG9zdCkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1
dCA9IGhvc3QtPnRvSW5wdXRFbGVtZW50KCk7CisgICAgcmV0dXJuICFpbnB1dCB8fCBpbnB1dC0+
cmVhZE9ubHkoKTsKK30KKwordm9pZCBEYXRlVGltZUVkaXRFbGVtZW50OjpyZWFkb25seUF0dHJp
YnV0ZUNoYW5nZWQoKQoreworICAgIGlmIChkaXNhYmxlZCgpIHx8IHJlYWRPbmx5KCkpIHsKKyAg
ICAgIGlmIChtX3NwaW5CdXR0b24pCisgICAgICAgICAgbV9zcGluQnV0dG9uLT5yZWxlYXNlQ2Fw
dHVyZSgpOworCisgICAgICBzZXRGb2N1c0ZpZWxkKEludmFsaWRGaWVsZEluZGV4KTsKKyAgICB9
Cit9CisKK3ZvaWQgRGF0ZVRpbWVFZGl0RWxlbWVudDo6c2V0Rm9jdXNGaWVsZChpbnQgbmV3Rm9j
dXNGaWVsZEluZGV4KQoreworICAgIERhdGVUaW1lRmllbGRFbGVtZW50KiBjb25zdCBuZXdGb2N1
c0ZpZWxkID0gZmllbGRBdChuZXdGb2N1c0ZpZWxkSW5kZXgpOworICAgIGlmIChuZXdGb2N1c0Zp
ZWxkICYmIG5ld0ZvY3VzRmllbGQtPmRpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAg
IERhdGVUaW1lRmllbGRFbGVtZW50KiBjb25zdCBjdXJyZW50Rm9jdXNGaWVsZCA9IGZpZWxkQXQo
bV9mb2N1c0ZpZWxkSW5kZXgpOworCisgICAgaWYgKGN1cnJlbnRGb2N1c0ZpZWxkKSB7CisgICAg
ICAgIGN1cnJlbnRGb2N1c0ZpZWxkLT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5
QmFja2dyb3VuZENvbG9yLCAid2hpdGUiKTsKKyAgICAgICAgY3VycmVudEZvY3VzRmllbGQtPnNl
dElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlDb2xvciwgImluaXRpYWwiKTsKKyAgICB9
CisKKyAgICBpZiAoIW5ld0ZvY3VzRmllbGQpIHsKKyAgICAgICAgbV9mb2N1c0ZpZWxkSW5kZXgg
PSAtMTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1fZm9jdXNGaWVsZEluZGV4ID0g
bmV3Rm9jdXNGaWVsZEluZGV4OworICAgIG5ld0ZvY3VzRmllbGQtPnNldElubGluZVN0eWxlUHJv
cGVydHkoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IsICIjMzI5N0ZEIik7CisgICAgbmV3Rm9j
dXNGaWVsZC0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eUNvbG9yLCAid2hpdGUi
KTsKK30KKwordm9pZCBEYXRlVGltZUVkaXRFbGVtZW50OjpzdGVwRG93bigpCit7CisgICAgaWYg
KERhdGVUaW1lRmllbGRFbGVtZW50KiBjb25zdCBmb2N1c0ZpZWxkID0gZmllbGRBdChtX2ZvY3Vz
RmllbGRJbmRleCkpCisgICAgICAgIGZvY3VzRmllbGQtPnN0ZXBEb3duKCk7Cit9CisKK3ZvaWQg
RGF0ZVRpbWVFZGl0RWxlbWVudDo6c3RlcFVwKCkKK3sKKyAgICBpZiAoRGF0ZVRpbWVGaWVsZEVs
ZW1lbnQqIGNvbnN0IGZvY3VzRmllbGQgPSBmaWVsZEF0KG1fZm9jdXNGaWVsZEluZGV4KSkKKyAg
ICAgICAgZm9jdXNGaWVsZC0+c3RlcFVwKCk7Cit9CisKK1N0cmluZyBEYXRlVGltZUVkaXRFbGVt
ZW50Ojp2YWx1ZSgpIGNvbnN0Cit7CisgICAgU3RyaW5nIGhvdXI7CisgICAgU3RyaW5nIG1pbnV0
ZTsKKyAgICBTdHJpbmcgc2Vjb25kOworICAgIFN0cmluZyBtaWxsaXNlY29uZDsKKworICAgIGZv
ciAoaW50IGZpZWxkSW5kZXggPSAwOyBmaWVsZEluZGV4IDwgbV9udW1iZXJPZkZpZWxkczsgKytm
aWVsZEluZGV4KSB7CisgICAgICAgIERhdGVUaW1lRmllbGRFbGVtZW50KiBmaWVsZCA9IGZpZWxk
QXQoZmllbGRJbmRleCk7CisgICAgICAgIGlmICghZmllbGQtPmhhc1ZhbHVlKCkpCisgICAgICAg
ICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKKyAgICAgICAgc3dpdGNoIChmaWVsZC0+ZmllbGRU
eXBlKCkpIHsKKyAgICAgICAgY2FzZSBEYXRlVGltZUZpZWxkRWxlbWVudDo6SG91cjoKKyAgICAg
ICAgICAgIGhvdXIgPSBmaWVsZC0+dmFsdWUoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIERhdGVUaW1lRmllbGRFbGVtZW50OjpNaW51dGU6CisgICAgICAgICAgICBtaW51dGUg
PSBmaWVsZC0+dmFsdWUoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIERhdGVU
aW1lRmllbGRFbGVtZW50OjpTZWNvbmQ6CisgICAgICAgICAgICBzZWNvbmQgPSBmaWVsZC0+dmFs
dWUoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIERhdGVUaW1lRmllbGRFbGVt
ZW50OjpNaWxsaXNlY29uZDoKKyAgICAgICAgICAgIG1pbGxpc2Vjb25kID0gZmllbGQtPnZhbHVl
KCk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIERhdGVUaW1lRmllbGRFbGVt
ZW50OjpZZWFyOgorICAgICAgICBjYXNlIERhdGVUaW1lRmllbGRFbGVtZW50OjpNb250aDoKKyAg
ICAgICAgY2FzZSBEYXRlVGltZUZpZWxkRWxlbWVudDo6RGF5T2ZNb250aDoKKyAgICAgICAgY2Fz
ZSBEYXRlVGltZUZpZWxkRWxlbWVudDo6Tm9vbjoKKyAgICAgICAgY2FzZSBEYXRlVGltZUZpZWxk
RWxlbWVudDo6V2VlazoKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgICAgICB9CisgICAgfQorCisgICAgU3RyaW5nQnVpbGRlciBidWlsZGVy
OworICAgIGJ1aWxkZXIuYXBwZW5kKGhvdXIpOworICAgIGJ1aWxkZXIuYXBwZW5kKCc6Jyk7Cisg
ICAgYnVpbGRlci5hcHBlbmQobWludXRlLmlzRW1wdHkoKSA/ICIwMCIgOiBtaW51dGUpOworICAg
IGJ1aWxkZXIuYXBwZW5kKCc6Jyk7CisgICAgYnVpbGRlci5hcHBlbmQoc2Vjb25kLmlzRW1wdHko
KSA/ICIwMCIgOiBzZWNvbmQpOworCisgICAgaWYgKCFtaWxsaXNlY29uZC5pc0VtcHR5KCkpIHsK
KyAgICAgICAgYnVpbGRlci5hcHBlbmQoJy4nKTsKKyAgICAgICAgYnVpbGRlci5hcHBlbmQobWls
bGlzZWNvbmQpOworICAgIH0KKworICAgIExPR19FUlJPUigidmFsdWU9JXMiLCBidWlsZGVyLnRv
U3RyaW5nKCkuYXNjaWkoKS5kYXRhKCkpOworCisgICAgLy8gRklYTUU6IE5ZSTogV2UgbmVlZCB0
byBoYW5kbGUgbm9vbihBTS9QTSkKKyAgICByZXR1cm4gYnVpbGRlci50b1N0cmluZygpOworfQor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaHRtbC9zaGFkb3cvRGF0ZVRpbWVFZGl0RWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9zaGFkb3cvRGF0ZVRpbWVFZGl0RWxlbWVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmYxYjdkZTJjZjgy
NWQ2NTg1ZGVmZjMyMzg2NmI0YmJmMWRmYjFlZWYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL3NoYWRvdy9EYXRlVGltZUVkaXRFbGVtZW50LmgKQEAgLTAsMCArMSwxNjAg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisg
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUg
SW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRS
SUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAq
IE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaWZuZGVmIERhdGVUaW1lRWRpdEVsZW1lbnRfaAorI2RlZmluZSBEYXRlVGltZUVkaXRFbGVt
ZW50X2gKKworI2lmIEVOQUJMRShUSU1FX0lOUFVUX0ZJRUxEUykKKworI2luY2x1ZGUgIkhUTUxE
aXZFbGVtZW50LmgiCisjaW5jbHVkZSAiVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmgiCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgS2V5Ym9hcmRFdmVudDsKK2NsYXNzIE1vdXNlRXZl
bnQ7CisKK2NsYXNzIERhdGVUaW1lRmllbGRFbGVtZW50IDogcHVibGljIEhUTUxFbGVtZW50IHsK
KyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShEYXRlVGltZUZpZWxkRWxlbWVudCk7CisKK3B1Ymxp
YzoKKyAgICBjbGFzcyBDYWxsYmFjayB7CisgICAgcHVibGljOgorICAgICAgICB2aXJ0dWFsIHZv
aWQgY29udHJvbFZhbHVlQ2hhbmdlZCgpID0gMDsKKyAgICB9OworCisgICAgZW51bSBGaWVsZFR5
cGUgeworICAgICAgICBZZWFyLAorICAgICAgICBNb250aCwKKyAgICAgICAgRGF5T2ZNb250aCwK
KyAgICAgICAgSG91ciwKKyAgICAgICAgTWludXRlLAorICAgICAgICBTZWNvbmQsCisgICAgICAg
IE1pbGxpc2Vjb25kLAorICAgICAgICBOb29uLAorICAgICAgICBXZWVrLAorICAgIH07CisKKyAg
ICB2aXJ0dWFsIHZvaWQgZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCopOworICAgIEZpZWxkVHlw
ZSBmaWVsZFR5cGUoKSBjb25zdCB7IHJldHVybiBtX2ZpZWxkVHlwZTsgfQorICAgIHZpcnR1YWwg
Ym9vbCBoYXNWYWx1ZSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Vm9pZCgpID0g
MDsKKyAgICB2aXJ0dWFsIHZvaWQgc3RlcERvd24oKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHN0
ZXBVcCgpID0gMDsKKyAgICB2aXJ0dWFsIFN0cmluZyB2YWx1ZSgpIGNvbnN0ID0gMDsKKworcHJv
dGVjdGVkOgorICAgIERhdGVUaW1lRmllbGRFbGVtZW50KERvY3VtZW50KiwgRmllbGRUeXBlLCBD
YWxsYmFjayYpOworCisgICAgdm9pZCBzZXRUZXh0KGNvbnN0IFN0cmluZyYpOworCisgICAgQ2Fs
bGJhY2smIG1fY2FsbGJhY2s7CisgICAgY29uc3QgRmllbGRUeXBlIG1fZmllbGRUeXBlOworfTsK
KworY2xhc3MgRGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50IDogcHVibGljIERhdGVUaW1lRmll
bGRFbGVtZW50IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShEYXRlVGltZU51bWVyaWNGaWVs
ZEVsZW1lbnQpOworCitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8RGF0ZVRpbWVOdW1l
cmljRmllbGRFbGVtZW50PiBjcmVhdGUoRG9jdW1lbnQqLCBGaWVsZFR5cGUsIENhbGxiYWNrJiwg
aW50IG1pbmltdW0sIGludCBtYXhpbXVtKTsKKworcHJpdmF0ZToKKyAgICBEYXRlVGltZU51bWVy
aWNGaWVsZEVsZW1lbnQoRG9jdW1lbnQqIGRvY3VtZW50LCBGaWVsZFR5cGUsIENhbGxiYWNrJiwg
aW50IG1pbmltdW0sIGludCBtYXhpbXVtKTsKKworICAgIGludCBlbnN1cmVJblJhbmdlKGludCk7
CisgICAgdm9pZCB1cGRhdGVUZXh0KCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgZGVmYXVsdEV2ZW50
SGFuZGxlcihFdmVudCopIE9WRVJSSURFIEZJTkFMOworICAgIHZpcnR1YWwgYm9vbCBoYXNWYWx1
ZSgpIGNvbnN0IHsgcmV0dXJuIG1faGFzVmFsdWU7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0Vm9p
ZCgpIE9WRVJSSURFIEZJTkFMOworICAgIHZpcnR1YWwgdm9pZCBzdGVwVXAoKSBPVkVSUklERSBG
SU5BTDsKKyAgICB2aXJ0dWFsIHZvaWQgc3RlcERvd24oKSBPVkVSUklERSBGSU5BTDsKKyAgICB2
aXJ0dWFsIFN0cmluZyB2YWx1ZSgpIGNvbnN0IE9WRVJSSURFIEZJTkFMOworCisgICAgRE9NVGlt
ZVN0YW1wIG1fbGFzdFNldENoYXJUaW1lOworICAgIGNvbnN0IGludCBtX21heGltdW07CisgICAg
Y29uc3QgaW50IG1fbWluaW11bTsKKyAgICBpbnQgbV92YWx1ZTsKKyAgICBib29sIG1faGFzVmFs
dWU7Cit9OworCisvLyBEYXRlVGltZUVkaXRFbGVtZW50IGNsYXNzIGNvbnRhaW5zIG51bWJlcmlj
IGZpZWxkIGFuZCBzeW1ib2xjIGZpZWxkIGZvcgorLy8gcmVwcmVzZW50aW5nIGRhdGUgYW5kIHRp
bWUsIHN1Y2ggYXMKKy8vICAtIFllYXIsIE1vbnRoLCBEYXkgT2YgTW9udGgKKy8vICAtIEhvdXIs
IE1pbnV0ZSwgU2Vjb25kLCBNaWxsaXNlY29uZCwgTm9vbgorY2xhc3MgRGF0ZVRpbWVFZGl0RWxl
bWVudCA6IHB1YmxpYyBIVE1MRGl2RWxlbWVudCwgcHJpdmF0ZSBEYXRlVGltZUZpZWxkRWxlbWVu
dDo6Q2FsbGJhY2ssIHByaXZhdGUgU3BpbkJ1dHRvbkVsZW1lbnQ6OkNhbGxiYWNrIHsKKyAgICBX
VEZfTUFLRV9OT05DT1BZQUJMRShEYXRlVGltZUVkaXRFbGVtZW50KTsKK3B1YmxpYzoKKyAgICBj
bGFzcyBDYWxsYmFjayB7CisgICAgcHVibGljOgorICAgICAgICB2aXJ0dWFsIHZvaWQgY29udHJv
bFZhbHVlQ2hhbmdlZCgpID0gMDsKKyAgICB9OworCisgICAgc3RhdGljIFBhc3NSZWZQdHI8RGF0
ZVRpbWVFZGl0RWxlbWVudD4gY3JlYXRlKERvY3VtZW50KiwgQ2FsbGJhY2smKTsKKworICAgIHZp
cnR1YWwgdm9pZCBkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KikgT1ZFUlJJREU7CisgICAgdm9p
ZCBkaXNhYmxlZEF0dHJpYnV0ZUNoYW5nZWQoKTsKKyAgICB2b2lkIHJlYWRvbmx5QXR0cmlidXRl
Q2hhbmdlZCgpOworICAgIFN0cmluZyB2YWx1ZSgpIGNvbnN0OworCitwcml2YXRlOgorICAgIHN0
YXRpYyBjb25zdCBpbnQgSW52YWxpZEZpZWxkSW5kZXggPSAtMTsKKworICAgIERhdGVUaW1lRWRp
dEVsZW1lbnQoRG9jdW1lbnQqLCBDYWxsYmFjayYpOworCisgICAgdmlydHVhbCB2b2lkIGNvbnRy
b2xWYWx1ZUNoYW5nZWQoKSBPVkVSUklERSBGSU5BTDsKKyAgICBib29sIGRpc2FibGVkKCkgY29u
c3Q7CisgICAgRGF0ZVRpbWVGaWVsZEVsZW1lbnQqIGZpZWxkQXQoaW50KSBjb25zdDsKKyAgICB2
b2lkIGhhbmRsZUtleWJvYXJkRXZlbnQoS2V5Ym9hcmRFdmVudCopOworICAgIHZvaWQgaGFuZGxl
TW91c2VFdmVudChNb3VzZUV2ZW50Kik7CisgICAgaW50IG5leHRGaWVsZEluZGV4KGludCkgY29u
c3Q7CisgICAgaW50IHByZXZpb3VzRmllbGRJbmRleChpbnQpIGNvbnN0OworICAgIGJvb2wgcmVh
ZE9ubHkoKSBjb25zdDsKKyAgICB2b2lkIHNldEZvY3VzRmllbGQoaW50KTsKKyAgICB2aXJ0dWFs
IHZvaWQgc3RlcERvd24oKSBPVkVSUklERSBGSU5BTDsKKyAgICB2aXJ0dWFsIHZvaWQgc3RlcFVw
KCkgT1ZFUlJJREUgRklOQUw7CisKKyAgICBDYWxsYmFjayYgbV9jYWxsYmFjazsKKyAgICAvLyBJ
biBFbmdsaXNoLCAxMiBob3VycyB0aW1lCisgICAgLy8gbV9maWVsZHNbMF0gPSBob3VyCisgICAg
Ly8gbV9maWVsZHNbMV0gPSBtaW51dGUKKyAgICAvLyBtX2ZpZWxkc1syXSA9IHNlY29uZAorICAg
IC8vIG1fZmllbGRzWzNdID0gbWlsbGlzZWNvbmQKKyAgICAvLyBtX2ZpZWxkc1s0XSA9IG5vb24g
KEFNL1BNKQorICAgIFJlZlB0cjxEYXRlVGltZUZpZWxkRWxlbWVudD4gbV9maWVsZHNbNF07Cisg
ICAgUmVmUHRyPFNwaW5CdXR0b25FbGVtZW50PiBtX3NwaW5CdXR0b247CisgICAgaW50IG1fZm9j
dXNGaWVsZEluZGV4OworICAgIGludCBtX251bWJlck9mRmllbGRzOworfTsKKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCisjZW5kaWYKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaHRtbC9zaGFkb3cvVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvc2hhZG93L1RleHRDb250cm9sSW5uZXJFbGVtZW50cy5jcHAKaW5kZXggMTAwZGFl
YjY0N2I5ZDc3YWE0YzFiNDMxMmJjOWM1ZTVmYjE4N2FkNi4uZmE4NjA0MGI2NGY5MTZmY2U5OTNm
YTYzNWE1YTYwZWY5Mjk2NjE1ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFk
b3cvVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L3NoYWRvdy9UZXh0Q29udHJvbElubmVyRWxlbWVudHMuY3BwCkBAIC0yMzQsMTggKzIzNCwxOSBA
QCB2b2lkIFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxl
cihFdmVudCogZXZlbnQpCiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotaW5s
aW5lIFNwaW5CdXR0b25FbGVtZW50OjpTcGluQnV0dG9uRWxlbWVudChEb2N1bWVudCogZG9jdW1l
bnQpCitpbmxpbmUgU3BpbkJ1dHRvbkVsZW1lbnQ6OlNwaW5CdXR0b25FbGVtZW50KERvY3VtZW50
KiBkb2N1bWVudCwgQ2FsbGJhY2sqIGNhbGxiYWNrKQogICAgIDogSFRNTERpdkVsZW1lbnQoZGl2
VGFnLCBkb2N1bWVudCkKICAgICAsIG1fY2FwdHVyaW5nKGZhbHNlKQogICAgICwgbV91cERvd25T
dGF0ZShJbmRldGVybWluYXRlKQogICAgICwgbV9wcmVzc1N0YXJ0aW5nU3RhdGUoSW5kZXRlcm1p
bmF0ZSkKICAgICAsIG1fcmVwZWF0aW5nVGltZXIodGhpcywgJlNwaW5CdXR0b25FbGVtZW50Ojpy
ZXBlYXRpbmdUaW1lckZpcmVkKQorICAgICwgbV9jYWxsYmFjayhjYWxsYmFjaykKIHsKIH0KIAot
UGFzc1JlZlB0cjxTcGluQnV0dG9uRWxlbWVudD4gU3BpbkJ1dHRvbkVsZW1lbnQ6OmNyZWF0ZShE
b2N1bWVudCogZG9jdW1lbnQpCitQYXNzUmVmUHRyPFNwaW5CdXR0b25FbGVtZW50PiBTcGluQnV0
dG9uRWxlbWVudDo6Y3JlYXRlKERvY3VtZW50KiBkb2N1bWVudCwgQ2FsbGJhY2sqIGNhbGxiYWNr
KQogewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgU3BpbkJ1dHRvbkVsZW1lbnQoZG9jdW1lbnQp
KTsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNwaW5CdXR0b25FbGVtZW50KGRvY3VtZW50LCBj
YWxsYmFjaykpOwogfQogCiBjb25zdCBBdG9taWNTdHJpbmcmIFNwaW5CdXR0b25FbGVtZW50Ojpz
aGFkb3dQc2V1ZG9JZCgpIGNvbnN0CkBAIC0yOTQsNyArMjk1LDEzIEBAIHZvaWQgU3BpbkJ1dHRv
bkVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2ZW50KQogICAgICAgICAgICAg
aW5wdXQtPnNlbGVjdCgpOwogICAgICAgICAgICAgaWYgKHJlbmRlcmVyKCkpIHsKICAgICAgICAg
ICAgICAgICBpZiAobV91cERvd25TdGF0ZSAhPSBJbmRldGVybWluYXRlKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIGlucHV0LT5zdGVwVXBGcm9tUmVuZGVyZXIobV91cERvd25TdGF0ZSA9PSBVcCA/
IDEgOiAtMSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChtX2NhbGxiYWNrKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAobV91cERvd25TdGF0ZSA9PSBVcCkKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBtX2NhbGxiYWNrLT5zdGVwVXAoKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9jYWxsYmFjay0+c3RlcERv
d24oKTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgICAg
ICBpbnB1dC0+c3RlcFVwRnJvbVJlbmRlcmVyKG1fdXBEb3duU3RhdGUgPT0gVXAgPyAxIDogLTEp
OwogICAgICAgICAgICAgICAgICAgICBpZiAocmVuZGVyZXIoKSkKICAgICAgICAgICAgICAgICAg
ICAgICAgIHN0YXJ0UmVwZWF0aW5nVGltZXIoKTsKICAgICAgICAgICAgICAgICB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9UZXh0Q29udHJvbElubmVyRWxlbWVudHMu
aCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L1RleHRDb250cm9sSW5uZXJFbGVtZW50cy5o
CmluZGV4IGMyMjgwZjFlODM3ZWUzNTRmMmIxMTE4NjhmNjY0M2FlODgzY2I0YzQuLmFiMTNiMDAy
YzQ1ODc3YmMxZjEzZjk2OWJmOGMzMTgxNGQ5NjYwNDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvc2hhZG93L1RleHRDb250cm9sSW5uZXJFbGVtZW50cy5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvc2hhZG93L1RleHRDb250cm9sSW5uZXJFbGVtZW50cy5oCkBAIC05NiwxNCAr
OTYsMTkgQEAgcHVibGljOgogICAgICAgICBVcCwKICAgICB9OwogCi0gICAgc3RhdGljIFBhc3NS
ZWZQdHI8U3BpbkJ1dHRvbkVsZW1lbnQ+IGNyZWF0ZShEb2N1bWVudCopOworICAgIGNsYXNzIENh
bGxiYWNrIHsKKyAgICAgICAgcHVibGljOiB2aXJ0dWFsIHZvaWQgc3RlcERvd24oKSA9IDA7Cisg
ICAgICAgIHB1YmxpYzogdmlydHVhbCB2b2lkIHN0ZXBVcCgpID0gMDsKKyAgICB9OworCisgICAg
c3RhdGljIFBhc3NSZWZQdHI8U3BpbkJ1dHRvbkVsZW1lbnQ+IGNyZWF0ZShEb2N1bWVudCosIENh
bGxiYWNrKiA9IDApOwogICAgIFVwRG93blN0YXRlIHVwRG93blN0YXRlKCkgY29uc3QgeyByZXR1
cm4gbV91cERvd25TdGF0ZTsgfQogICAgIHZpcnR1YWwgdm9pZCByZWxlYXNlQ2FwdHVyZSgpOwog
CiAgICAgdm9pZCBzdGVwKGludCBhbW91bnQpOwogICAgIAogcHJpdmF0ZToKLSAgICBTcGluQnV0
dG9uRWxlbWVudChEb2N1bWVudCopOworICAgIFNwaW5CdXR0b25FbGVtZW50KERvY3VtZW50Kiwg
Q2FsbGJhY2sqKTsKIAogICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBzaGFkb3dQc2V1
ZG9JZCgpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBkZXRhY2goKTsKQEAgLTEyMSw2ICsxMjYs
NyBAQCBwcml2YXRlOgogICAgIFVwRG93blN0YXRlIG1fdXBEb3duU3RhdGU7CiAgICAgVXBEb3du
U3RhdGUgbV9wcmVzc1N0YXJ0aW5nU3RhdGU7CiAgICAgVGltZXI8U3BpbkJ1dHRvbkVsZW1lbnQ+
IG1fcmVwZWF0aW5nVGltZXI7CisgICAgQ2FsbGJhY2sqIG1fY2FsbGJhY2s7CiB9OwogCiAjaWYg
RU5BQkxFKElOUFVUX1NQRUVDSCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
ZmVhdHVyZXMuZ3lwaSBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vZmVhdHVyZXMuZ3lwaQppbmRl
eCAwY2U0NjgyMTdkNTllZjNlYTEzNDJmNzUzYmQ5NjFjZjdkNDVjMTUwLi4yNjRmOGQyMDFhMDRm
ZTdhZjlkMTI2MmFmMDc1MThhOGJlNTNkNWY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL2ZlYXR1cmVzLmd5cGkKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9mZWF0dXJl
cy5neXBpCkBAIC0xNjIsMTEgKzE2MiwxMSBAQAogICAgICAgICAgICdFTkFCTEVfRk9OVF9CT09T
VElORz0wJywKICAgICAgICAgICAnRU5BQkxFX0ZVTExTQ1JFRU5fTUVESUFfQ09OVFJPTFM9MCcs
CiAgICAgICAgICAgJ0VOQUJMRV9JTlBVVF9TUEVFQ0g9MScsCi0gICAgICAgICAgJ0VOQUJMRV9J
TlBVVF9UWVBFX0RBVEVUSU1FPTAnLAotICAgICAgICAgICdFTkFCTEVfSU5QVVRfVFlQRV9EQVRF
VElNRUxPQ0FMPTAnLAotICAgICAgICAgICdFTkFCTEVfSU5QVVRfVFlQRV9NT05USD0wJywKLSAg
ICAgICAgICAnRU5BQkxFX0lOUFVUX1RZUEVfVElNRT0wJywKLSAgICAgICAgICAnRU5BQkxFX0lO
UFVUX1RZUEVfV0VFSz0wJywKKyAgICAgICAgICAnRU5BQkxFX0lOUFVUX1RZUEVfREFURVRJTUU9
MScsCisgICAgICAgICAgJ0VOQUJMRV9JTlBVVF9UWVBFX0RBVEVUSU1FTE9DQUw9MScsCisgICAg
ICAgICAgJ0VOQUJMRV9JTlBVVF9UWVBFX01PTlRIPTEnLAorICAgICAgICAgICdFTkFCTEVfSU5Q
VVRfVFlQRV9USU1FPTEnLAorICAgICAgICAgICdFTkFCTEVfSU5QVVRfVFlQRV9XRUVLPTEnLAog
ICAgICAgICAgICdFTkFCTEVfSkFWQVNDUklQVF9JMThOX0FQST0xJywKICAgICAgICAgICAnRU5B
QkxFX0xFR0FDWV9OT1RJRklDQVRJT05TPTEnLAogICAgICAgICAgICdFTkFCTEVfTUVESUFfQ0FQ
VFVSRT0wJywKQEAgLTE3Niw2ICsxNzYsNyBAQAogICAgICAgICAgICdFTkFCTEVfT1ZFUkZMT1df
U0NST0xMSU5HPTAnLAogICAgICAgICAgICdFTkFCTEVfUEFHRV9QT1BVUD0xJywKICAgICAgICAg
ICAnRU5BQkxFX1NIQVJFRF9XT1JLRVJTPTEnLAorICAgICAgICAgICdFTkFCTEVfVElNRV9JTlBV
VF9GSUVMRFM9MScsCiAgICAgICAgICAgJ0VOQUJMRV9XRUJfQVVESU89MScsCiAgICAgICAgIF0s
CiAgICAgICB9XSwK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>149269</attachid>
            <date>2012-06-25 03:38:54 -0700</date>
            <delta_ts>2012-06-26 02:42:11 -0700</delta_ts>
            <desc>Patch 3 - Code Complete</desc>
            <filename>bug-88970-20120625193853.patch</filename>
            <type>text/plain</type>
            <size>87071</size>
            <attacher>yosin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIxMTI2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODkzNTg3ZTBlMWViNTNh
MmE0NTA4YzE4ZjI4M2M5ZjNmNDUxMzQyNS4uZGMwY2EyOTAxMTdjZjU1YTZmM2QzZjRiMzQ3NzY0
NGQ0YWY0MDgzYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU5IEBACisyMDEyLTA2LTEzICBZb3No
aWZ1bWkgSW5vdWUgIDx5b3NpbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW0Zvcm1dIFRpbWUg
aW5wdXQgZmllbGRzIFVJCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD04ODk3MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFdJUDogRm9yIGFyY2hpdGVjdHVyZSByZXZpZXdpbmcuCisKKyAgICAgICAgTm8gbmV3
IHRlc3RzLiBJJ2xsIHByb3ZpZGUgdGVzdHMuCisKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6Cisg
ICAgICAgICogaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxJbnB1dEVsZW1lbnQ6OmlzTW91c2VGb2N1c2FibGUpOgorICAgICAgICAqIGh0bWwvVGltZUlu
cHV0VHlwZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUaW1lSW5wdXRUeXBlOjpjcmVhdGVTdGVw
UmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6VGltZUlucHV0VHlwZTo6aXNUaW1lRmllbGQpOgor
ICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpUaW1lTW9kZWw6OmRlZmF1bHRW
YWx1ZUZvclN0ZXBVcCk6CisgICAgICAgIChXZWJDb3JlOjpUaW1lSW5wdXRUeXBlOjpjb250cm9s
VmFsdWVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlRpbWVJbnB1dFR5cGU6OmNyZWF0ZVNo
YWRvd1N1YnRyZWUpOgorICAgICAgICAoV2ViQ29yZTo6VGltZUlucHV0VHlwZTo6ZGVzdHJveVNo
YWRvd1N1YnRyZWUpOgorICAgICAgICAoV2ViQ29yZTo6VGltZUlucHV0VHlwZTo6Zm9yd2FyZEV2
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlRpbWVJbnB1dFR5cGU6OmRpc2FibGVkQXR0cmlidXRl
Q2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpUaW1lSW5wdXRUeXBlOjpoYW5kbGVET01BY3Rp
dmF0ZUV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlRpbWVJbnB1dFR5cGU6OnJlYWRvbmx5QXR0
cmlidXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpCYXNlRGF0ZUFuZFRpbWVXaXRob3V0
VGV4dEZpZWxkSW5wdXRUeXBlOjpjb252ZXJ0RnJvbVZpc2libGVWYWx1ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpCYXNlRGF0ZUFuZFRpbWVXaXRob3V0VGV4dEZpZWxkSW5wdXRUeXBlOjpkZWZhdWx0
VmFsdWVGb3JTdGVwVXApOgorICAgICAgICAoV2ViQ29yZTo6QmFzZURhdGVBbmRUaW1lV2l0aG91
dFRleHRGaWVsZElucHV0VHlwZTo6bG9jYWxpemVWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpC
YXNlRGF0ZUFuZFRpbWVXaXRob3V0VGV4dEZpZWxkSW5wdXRUeXBlOjpwYXJzZVRvTnVtYmVyKToK
KyAgICAgICAgKFdlYkNvcmU6OkJhc2VEYXRlQW5kVGltZVdpdGhvdXRUZXh0RmllbGRJbnB1dFR5
cGU6OnNhbml0aXplVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QmFzZURhdGVBbmRUaW1lV2l0
aG91dFRleHRGaWVsZElucHV0VHlwZTo6c2VyaWFsaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkJh
c2VEYXRlQW5kVGltZVdpdGhvdXRUZXh0RmllbGRJbnB1dFR5cGU6OnNldFZhbHVlQXNEYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkJhc2VEYXRlQW5kVGltZVdpdGhvdXRUZXh0RmllbGRJbnB1dFR5
cGU6OnNldFZhbHVlQXNJbnB1dE51bWJlcik6CisgICAgICAgIChXZWJDb3JlOjpCYXNlRGF0ZUFu
ZFRpbWVXaXRob3V0VGV4dEZpZWxkSW5wdXRUeXBlOjp0eXBlTWlzbWF0Y2gpOgorICAgICAgICAo
V2ViQ29yZTo6QmFzZURhdGVBbmRUaW1lV2l0aG91dFRleHRGaWVsZElucHV0VHlwZTo6dmFsdWVB
c0RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6QmFzZURhdGVBbmRUaW1lV2l0aG91dFRleHRGaWVs
ZElucHV0VHlwZTo6dmFsdWVBc0RvdWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpCYXNlRGF0ZUFu
ZFRpbWVXaXRob3V0VGV4dEZpZWxkSW5wdXRUeXBlOjp2aXNpYmxlVmFsdWUpOgorICAgICAgICAo
V2ViQ29yZTo6VGltZUlucHV0VHlwZTo6ZGF0ZVR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6VGlt
ZUlucHV0VHlwZTo6ZGVmYXVsdFZhbHVlRm9yU3RlcFVwKToKKyAgICAgICAgKiBodG1sL1RpbWVJ
bnB1dFR5cGUuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoQmFzZURhdGVBbmRUaW1l
V2l0aG91dFRleHRGaWVsZElucHV0VHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpCYXNlRGF0ZUFu
ZFRpbWVXaXRob3V0VGV4dEZpZWxkSW5wdXRUeXBlOjpCYXNlRGF0ZUFuZFRpbWVXaXRob3V0VGV4
dEZpZWxkSW5wdXRUeXBlKToKKyAgICAgICAgKFRpbWVNb2RlbCk6CisgICAgICAgIChXZWJDb3Jl
OjpUaW1lTW9kZWw6OlRpbWVNb2RlbCk6CisgICAgICAgIChUaW1lSW5wdXRUeXBlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlRpbWVJbnB1dFR5cGU6OlRpbWVJbnB1dFR5cGUpOgorICAgICAgICAqIGh0
bWwvc2hhZG93L1RleHRDb250cm9sSW5uZXJFbGVtZW50cy5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTcGluQnV0dG9uRWxlbWVudDo6U3BpbkJ1dHRvbkVsZW1lbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6U3BpbkJ1dHRvbkVsZW1lbnQ6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTcGluQnV0
dG9uRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcik6CisgICAgICAgICogaHRtbC9zaGFkb3cv
VGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmg6CisgICAgICAgIChDYWxsYmFjayk6CisgICAgICAg
IChTcGluQnV0dG9uRWxlbWVudCk6CisKIDIwMTItMDYtMjQgIFNoZXJpZmYgQm90ICA8d2Via2l0
LnJldmlldy5ib3RAZ21haWwuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0
IHIxMjExMDYuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggYjNkYTcwYmE0OGJkMjYxNjE3NjQzODgyMzcx
OTc1ODUzMzQ1MGJlYi4uYTkwZmI4MWQ0OWE1MmVkMTc2MjhkZDM2YmMwM2RkN2RlMzZhZGY0NyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUuZ3lwaQpAQCAtNDkzLDYgKzQ5Myw3IEBACiAgICAgICAgICAgICAncGxhdGZv
cm0vdGV4dC9CaWRpUnVuTGlzdC5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS90ZXh0L0JpZGlD
b250ZXh0LmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL3RleHQvQmlkaVJlc29sdmVyLmgnLAor
ICAgICAgICAgICAgJ3BsYXRmb3JtL3RleHQvRGF0ZVRpbWVGb3JtYXQuaCcsCiAgICAgICAgICAg
ICAncGxhdGZvcm0vdGV4dC9EZWNvZGVFc2NhcGVTZXF1ZW5jZXMuaCcsCiAgICAgICAgICAgICAn
cGxhdGZvcm0vdGV4dC9MaW5lQnJlYWtJdGVyYXRvclBvb2xJQ1UuaCcsCiAgICAgICAgICAgICAn
cGxhdGZvcm0vdGV4dC9MaW5lRW5kaW5nLmgnLApAQCAtNDU1Miw2ICs0NTUzLDcgQEAKICAgICAg
ICAgICAgICdwbGF0Zm9ybS90ZXh0L0F0b21pY1N0cmluZ0tleWVkTVJVQ2FjaGUuaCcsCiAgICAg
ICAgICAgICAncGxhdGZvcm0vdGV4dC9CYXNlNjQuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9y
bS90ZXh0L0JpZGlDb250ZXh0LmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vdGV4dC9EYXRl
VGltZUZvcm1hdC5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL3RleHQvSHlwaGVuYXRpb24u
Y3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS90ZXh0L0h5cGhlbmF0aW9uLmgnLAogICAgICAg
ICAgICAgJ3BsYXRmb3JtL3RleHQvTGluZUVuZGluZy5jcHAnLApAQCAtNTg2MSw2ICs1ODYzLDgg
QEAKICAgICAgICAgICAgICdodG1sL3NoYWRvdy9Db250ZW50RGlzdHJpYnV0b3IuaCcsCiAgICAg
ICAgICAgICAnaHRtbC9zaGFkb3cvQ29udGVudFNlbGVjdG9yUXVlcnkuY3BwJywKICAgICAgICAg
ICAgICdodG1sL3NoYWRvdy9Db250ZW50U2VsZWN0b3JRdWVyeS5oJywKKyAgICAgICAgICAgICdo
dG1sL3NoYWRvdy9EYXRlVGltZUVkaXRFbGVtZW50LmNwcCcsCisgICAgICAgICAgICAnaHRtbC9z
aGFkb3cvRGF0ZVRpbWVFZGl0RWxlbWVudC5oJywKICAgICAgICAgICAgICdodG1sL3NoYWRvdy9E
ZXRhaWxzTWFya2VyQ29udHJvbC5jcHAnLAogICAgICAgICAgICAgJ2h0bWwvc2hhZG93L0RldGFp
bHNNYXJrZXJDb250cm9sLmgnLAogICAgICAgICAgICAgJ2h0bWwvc2hhZG93L0hUTUxDb250ZW50
RWxlbWVudC5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL2h0bWwuY3NzIGIv
U291cmNlL1dlYkNvcmUvY3NzL2h0bWwuY3NzCmluZGV4IDE3NjlkNDlmMTk0YzU1ZmJmMjQ2Mzhk
N2I4ZWEwYmZjMzY2NzgxZWEuLmI4NTBhNTZkYTQ0MjI1YzVhYWU2NTBhNTkxNjA2Y2FmZGFhNTY2
OTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9odG1sLmNzcworKysgYi9Tb3VyY2Uv
V2ViQ29yZS9jc3MvaHRtbC5jc3MKQEAgLTQ1OCw2ICs0NTgsNTkgQEAgZGF0YWxpc3QgewogfQog
I2VuZGlmCiAKKworI2lmIGRlZmluZWQoRU5BQkxFX1RJTUVfSU5QVVRfRklFTERTKSAmJiBFTkFC
TEVfVElNRV9JTlBVVF9GSUVMRFMKK2lucHV0Ojotd2Via2l0LWRhdGV0aW1lLWVkaXQtaG91ci1m
aWVsZDpmb2N1cywKK2lucHV0Ojotd2Via2l0LWRhdGV0aW1lLWVkaXQtbWlsbGlzZWNvbmQtZmll
bGQ6Zm9jdXMsCitpbnB1dDo6LXdlYmtpdC1kYXRldGltZS1lZGl0LW1pbnV0ZS1maWVsZDpmb2N1
cywKK2lucHV0Ojotd2Via2l0LWRhdGV0aW1lLWVkaXQtbm9vbi1maWVsZDpmb2N1cywKK2lucHV0
Ojotd2Via2l0LWRhdGV0aW1lLWVkaXQtc2Vjb25kLWZpZWxkOmZvY3VzIHsKKyAgICBjb2xvcjog
d2hpdGU7CisgICAgYmFja2dyb3VuZDogIzMyOTdmZDsKK30KKworaW5wdXQ6Oi13ZWJraXQtZGF0
ZXRpbWUtZWRpdC1taW51dGUtZmllbGRbZGlzYWJsZWRdIHsKKyAgICBjb2xvcjogR3JheVRleHQ7
Cit9CisKK2lucHV0Ojotd2Via2l0LWRhdGV0aW1lLWVkaXQtaG91ci1maWVsZCB7CisgICAgZGlz
cGxheTogaW5saW5lLWJsb2NrOworICAgIGJvcmRlcjogbm9uZTsKKyAgICB0ZXh0LWFsaWduOiBy
aWdodDsKKyAgICB3aWR0aDogMWVtOworICAgIHBhZGRpbmc6IDJweDsKK30KKworaW5wdXQ6Oi13
ZWJraXQtZGF0ZXRpbWUtZWRpdC1taWxsaXNlY29uZC1maWVsZCB7CisgICAgZGlzcGxheTogaW5s
aW5lLWJsb2NrOworICAgIGJvcmRlcjogbm9uZTsKKyAgICB0ZXh0LWFsaWduOiByaWdodDsKKyAg
ICB3aWR0aDogMS41ZW07CisgICAgcGFkZGluZzogMnB4OworfQorCitpbnB1dDo6LXdlYmtpdC1k
YXRldGltZS1lZGl0LW1pbnV0ZS1maWVsZCB7CisgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwor
ICAgIGJvcmRlcjogbm9uZTsKKyAgICB0ZXh0LWFsaWduOiByaWdodDsKKyAgICB3aWR0aDogMWVt
OworICAgIHBhZGRpbmc6IDJweDsKK30KKworaW5wdXQ6Oi13ZWJraXQtZGF0ZXRpbWUtZWRpdC1u
b29uLWZpZWxkIHsKKyAgICBib3JkZXI6IG5vbmU7CisgICAgcGFkZGluZzogMnB4OworfQorCitp
bnB1dDo6LXdlYmtpdC1kYXRldGltZS1lZGl0LXNlY29uZC1maWVsZCB7CisgICAgZGlzcGxheTog
aW5saW5lLWJsb2NrOworICAgIGJvcmRlcjogbm9uZTsKKyAgICB0ZXh0LWFsaWduOiByaWdodDsK
KyAgICB3aWR0aDogMWVtOworICAgIHBhZGRpbmc6IDJweDsKK30KKyNlbmRpZgorCiBpbnB1dDo6
LXdlYmtpdC1pbm5lci1zcGluLWJ1dHRvbiB7CiAgICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBpbm5l
ci1zcGluLWJ1dHRvbjsKICAgICBkaXNwbGF5OiBibG9jazsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxJbnB1dEVsZW1lbnQuY3BwCmluZGV4IDZmY2QxNThmMDMxYzYzYjI2ZjM1NDVmZmNjOWFhY2Q3
NDhiMmFjNWIuLjQ3YTU4MjRhY2MzODUwM2E1YzM1ZmRhNTRiM2UzNWVlMDgyYWM0OTQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcApAQCAtNjcyLDYgKzY3MiwxMCBA
QCB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKGNvbnN0IEF0dHJpYnV0ZSYg
YXR0cmlidXRlKQogICAgIH0gZWxzZSBpZiAoYXR0cmlidXRlLm5hbWUoKSA9PSBvbndlYmtpdHNw
ZWVjaGNoYW5nZUF0dHIpCiAgICAgICAgIHNldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoZXZlbnRO
YW1lcygpLndlYmtpdHNwZWVjaGNoYW5nZUV2ZW50LCBjcmVhdGVBdHRyaWJ1dGVFdmVudExpc3Rl
bmVyKHRoaXMsIGF0dHJpYnV0ZSkpOwogI2VuZGlmCisjaWYgRU5BQkxFKFRJTUVfSU5QVVRfRklF
TERTKQorICAgIGlmIChhdHRyaWJ1dGUubmFtZSgpID09IG1heEF0dHIgfHwgYXR0cmlidXRlLm5h
bWUoKSA9PSBtaW5BdHRyIHx8IGF0dHJpYnV0ZS5uYW1lKCkgPT0gc3RlcEF0dHIpCisgICAgICAg
IG1faW5wdXRUeXBlLT5zdGVwUmFuZ2VDaGFuZ2VkKCk7CisjZW5kaWYKICAgICBlbHNlCiAgICAg
ICAgIEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZShhdHRyaWJ1dGUp
OwogICAgIHVwZGF0ZUlubmVyVGV4dFZhbHVlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0lucHV0VHlwZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0lucHV0VHlwZS5jcHAK
aW5kZXggMzA2MDJhMDA5NWU2MmU4MDg0OWQ0ZTQyMmMyYzc4MzBhMTA0YzM2OS4uMTIxZmIwMjFl
MzEzOGViYjE2MzNiNTc1YjM5MTFmODFjMmE3OWRiMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvaHRtbC9JbnB1dFR5cGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSW5wdXRUeXBl
LmNwcApAQCAtMjcyLDYgKzI3Miw3IEBAIGJvb2wgSW5wdXRUeXBlOjpyYW5nZU92ZXJmbG93KGNv
bnN0IFN0cmluZyYgdmFsdWUpIGNvbnN0CiAgICAgaWYgKCFudW1lcmljVmFsdWUuaXNGaW5pdGUo
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCitMT0dfRVJST1IoInJhbmdlT3ZlcmZsb3c6IHY9
JWQgbT0lZCIsIGludChudW1lcmljVmFsdWUudG9Eb3VibGUoKSksIGludChjcmVhdGVTdGVwUmFu
Z2UoUmVqZWN0QW55KS5tYXhpbXVtKCkudG9Eb3VibGUoKSkpOwogICAgIHJldHVybiBudW1lcmlj
VmFsdWUgPiBjcmVhdGVTdGVwUmFuZ2UoUmVqZWN0QW55KS5tYXhpbXVtKCk7CiB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSW5wdXRUeXBlLmggYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0lucHV0VHlwZS5oCmluZGV4IDQ1MTMwM2QxM2M0MjQwZmVjNzVhZDBlZjAwOTczMjNkMGUz
MTNkYjkuLjFmNGE5ZDY1ZTEzOWY3ZGUyNmY0MzUxNWNkMTg5NTMwNDZkYmQ3NzcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSW5wdXRUeXBlLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9JbnB1dFR5cGUuaApAQCAtMjkxLDYgKzI5MSwxMCBAQCBwdWJsaWM6CiAgICAgdmlydHVh
bCB1bnNpZ25lZCBoZWlnaHQoKSBjb25zdDsKICAgICB2aXJ0dWFsIHVuc2lnbmVkIHdpZHRoKCkg
Y29uc3Q7CiAKKyNpZiBFTkFCTEUoVElNRV9JTlBVVF9GSUVMRFMpCisgICAgdmlydHVhbCB2b2lk
IHN0ZXBSYW5nZUNoYW5nZWQoKSB7IH0KKyNlbmRpZgorCiBwcm90ZWN0ZWQ6CiAgICAgSW5wdXRU
eXBlKEhUTUxJbnB1dEVsZW1lbnQqIGVsZW1lbnQpIDogbV9lbGVtZW50KGVsZW1lbnQpIHsgfQog
ICAgIEhUTUxJbnB1dEVsZW1lbnQqIGVsZW1lbnQoKSBjb25zdCB7IHJldHVybiBtX2VsZW1lbnQ7
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvVGltZUlucHV0VHlwZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL1RpbWVJbnB1dFR5cGUuY3BwCmluZGV4IDA1MmI4ODc1NjE3M2Vj
YTkyOTkyZWE1OTk3YWJkNTk2MjE3NzI1OGUuLjNlNjQxZDNkNGE3NjYwMDk3YWU1YWMxNmU1Mjky
ZjZhOGViOGY2ZGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvVGltZUlucHV0VHlw
ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9UaW1lSW5wdXRUeXBlLmNwcApAQCAtNDEs
NiArNDEsMTUgQEAKIAogI2lmIEVOQUJMRShJTlBVVF9UWVBFX1RJTUUpCiAKKyNpZiBFTkFCTEUo
VElNRV9JTlBVVF9GSUVMRFMpCisjaW5jbHVkZSAiQ2hyb21lLmgiCisjaW5jbHVkZSAiQ2hyb21l
Q2xpZW50LmgiCisjaW5jbHVkZSAiRWxlbWVudFNoYWRvdy5oIgorI2luY2x1ZGUgIktleWJvYXJk
RXZlbnQuaCIKKyNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAiU2hhZG93Um9vdC5oIgorI2Vu
ZGlmCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsK
QEAgLTEwOCw2ICsxMTcsMTE3IEBAIGJvb2wgVGltZUlucHV0VHlwZTo6aXNUaW1lRmllbGQoKSBj
b25zdAogICAgIHJldHVybiB0cnVlOwogfQogCisjaWYgRU5BQkxFKFRJTUVfSU5QVVRfRklFTERT
KQorCitUaW1lSW5wdXRUeXBlOjp+VGltZUlucHV0VHlwZSgpCit7CisgICAgaWYgKG1fZGF0ZVRp
bWVFZGl0RWxlbWVudCkKKyAgICAgICAgbV9kYXRlVGltZUVkaXRFbGVtZW50LT5yZW1vdmVFdmVu
dEhhbmRsZXIoKTsKK30KKwordm9pZCBUaW1lSW5wdXRUeXBlOjplZGl0Q29udHJvbFZhbHVlQ2hh
bmdlZCgpCit7CisgICAgUmVmUHRyPEhUTUxJbnB1dEVsZW1lbnQ+IGlucHV0KGVsZW1lbnQoKSk7
CisgICAgRXhjZXB0aW9uQ29kZSBlYzsKKyAgICBJbnB1dFR5cGU6OnNldFZhbHVlQXNEb3VibGUo
bV9kYXRlVGltZUVkaXRFbGVtZW50LT52YWx1ZUFzRG91YmxlKCksIERpc3BhdGNoTm9FdmVudCwg
ZWMpOworICAgIGlucHV0LT5kaXNwYXRjaEZvcm1Db250cm9sSW5wdXRFdmVudCgpOworICAgIGlu
cHV0LT5kaXNwYXRjaEZvcm1Db250cm9sQ2hhbmdlRXZlbnQoKTsKK30KKworUmVuZGVyT2JqZWN0
KiBUaW1lSW5wdXRUeXBlOjpjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSogYXJlbmEsIFJlbmRl
clN0eWxlKiBzdHlsZSkgY29uc3QKK3sKKyAgICByZXR1cm4gSW5wdXRUeXBlOjpjcmVhdGVSZW5k
ZXJlcihhcmVuYSwgc3R5bGUpOworfQorCit2b2lkIFRpbWVJbnB1dFR5cGU6OmNyZWF0ZVNoYWRv
d1N1YnRyZWUoKQoreworICAgIEFTU0VSVChlbGVtZW50KCktPnNoYWRvdygpKTsKKworICAgIERv
Y3VtZW50KiBkb2N1bWVudCA9IGVsZW1lbnQoKS0+ZG9jdW1lbnQoKTsKKyAgICBtX2RhdGVUaW1l
RWRpdEVsZW1lbnQgPSBEYXRlVGltZUVkaXRFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQsICp0aGlz
LCBjcmVhdGVTdGVwUmFuZ2UoQW55SXNEZWZhdWx0U3RlcCkpOworICAgIGVsZW1lbnQoKS0+c2hh
ZG93KCktPm9sZGVzdFNoYWRvd1Jvb3QoKS0+YXBwZW5kQ2hpbGQobV9kYXRlVGltZUVkaXRFbGVt
ZW50KTsKKworICAgIENocm9tZUNsaWVudCogY2hyb21lQ2xpZW50ID0gZG9jdW1lbnQtPnBhZ2Uo
KSA/IGRvY3VtZW50LT5wYWdlKCktPmNocm9tZSgpLT5jbGllbnQoKSA6IDA7CisgICAgYm9vbCBz
aG91bGRBZGREZWNvcmF0aW9ucyA9IGNocm9tZUNsaWVudCAmJiBjaHJvbWVDbGllbnQtPndpbGxB
ZGRUZXh0RmllbGREZWNvcmF0aW9uc1RvKGVsZW1lbnQoKSk7CisKKyAgICBpZiAoc2hvdWxkQWRk
RGVjb3JhdGlvbnMpCisgICAgICAgIGNocm9tZUNsaWVudC0+YWRkVGV4dEZpZWxkRGVjb3JhdGlv
bnNUbyhlbGVtZW50KCkpOworCisgICAgRGF0ZUNvbXBvbmVudHMgZGF0ZTsKKyAgICBpZiAocGFy
c2VUb0RhdGVDb21wb25lbnRzKGVsZW1lbnQoKS0+dmFsdWUoKSwgJmRhdGUpKQorICAgICAgICBt
X2RhdGVUaW1lRWRpdEVsZW1lbnQtPnNldFZhbHVlQXNEYXRlKGRhdGUpOworfQorCit2b2lkIFRp
bWVJbnB1dFR5cGU6OmRlc3Ryb3lTaGFkb3dTdWJ0cmVlKCkKK3sKKyAgICBtX2RhdGVUaW1lRWRp
dEVsZW1lbnQtPnJlbW92ZUV2ZW50SGFuZGxlcigpOworICAgIG1fZGF0ZVRpbWVFZGl0RWxlbWVu
dC5jbGVhcigpOworfQorCit2b2lkIFRpbWVJbnB1dFR5cGU6OmZvcndhcmRFdmVudChFdmVudCog
ZXZlbnQpCit7CisgICAgaWYgKG1fZGF0ZVRpbWVFZGl0RWxlbWVudCkKKyAgICAgICAgbV9kYXRl
VGltZUVkaXRFbGVtZW50LT5kZWZhdWx0RXZlbnRIYW5kbGVyKGV2ZW50KTsKK30KKwordm9pZCBU
aW1lSW5wdXRUeXBlOjpkaXNhYmxlZEF0dHJpYnV0ZUNoYW5nZWQoKQoreworICAgIGlmIChtX2Rh
dGVUaW1lRWRpdEVsZW1lbnQpCisgICAgICAgIG1fZGF0ZVRpbWVFZGl0RWxlbWVudC0+ZGlzYWJs
ZWRBdHRyaWJ1dGVDaGFuZ2VkKCk7Cit9CisKK3ZvaWQgVGltZUlucHV0VHlwZTo6aGFuZGxlS2V5
ZG93bkV2ZW50KEtleWJvYXJkRXZlbnQqIGV2ZW50KQoreworICAgIGZvcndhcmRFdmVudChldmVu
dCk7Cit9CisKK3ZvaWQgVGltZUlucHV0VHlwZTo6aGFuZGxlRE9NQWN0aXZhdGVFdmVudChFdmVu
dCogZXZlbnQpCit7CisgICAgaWYgKGVsZW1lbnQoKS0+ZGlzYWJsZWQoKSB8fCBlbGVtZW50KCkt
PnJlYWRPbmx5KCkgfHwgIWVsZW1lbnQoKS0+cmVuZGVyZXIoKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgaWYgKG1fZGF0ZVRpbWVFZGl0RWxlbWVudCkKKyAgICAgICAgbV9kYXRlVGltZUVkaXRF
bGVtZW50LT5mb2N1cygpOworCisgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7Cit9CisK
K2Jvb2wgVGltZUlucHV0VHlwZTo6aXNLZXlib2FyZEZvY3VzYWJsZShLZXlib2FyZEV2ZW50Kikg
Y29uc3QKK3sKKyAgICByZXR1cm4gZWxlbWVudCgpLT5pc1RleHRGb3JtQ29udHJvbEZvY3VzYWJs
ZSgpOworfQorCitib29sIFRpbWVJbnB1dFR5cGU6OmlzTW91c2VGb2N1c2FibGUoKSBjb25zdAor
eworICAgIHJldHVybiBlbGVtZW50KCktPmlzVGV4dEZvcm1Db250cm9sRm9jdXNhYmxlKCk7Cit9
CisKK3ZvaWQgVGltZUlucHV0VHlwZTo6cmVhZG9ubHlBdHRyaWJ1dGVDaGFuZ2VkKCkKK3sKKyAg
ICBpZiAobV9kYXRlVGltZUVkaXRFbGVtZW50KQorICAgICAgICBtX2RhdGVUaW1lRWRpdEVsZW1l
bnQtPnJlYWRvbmx5QXR0cmlidXRlQ2hhbmdlZCgpOworfQorCit2b2lkIFRpbWVJbnB1dFR5cGU6
OnNldFZhbHVlKGNvbnN0IFN0cmluZyYgc2FuaXRpemVkVmFsdWUsIGJvb2wgdmFsdWVDaGFuZ2Vk
LCBUZXh0RmllbGRFdmVudEJlaGF2aW9yIGV2ZW50QmVoYXZpb3IpCit7CisgICAgSW5wdXRUeXBl
OjpzZXRWYWx1ZShzYW5pdGl6ZWRWYWx1ZSwgdmFsdWVDaGFuZ2VkLCBldmVudEJlaGF2aW9yKTsK
KyAgICBpZiAodmFsdWVDaGFuZ2VkICYmIG1fZGF0ZVRpbWVFZGl0RWxlbWVudCkgeworICAgICAg
ICBEYXRlQ29tcG9uZW50cyBkYXRlOworICAgICAgICBpZiAocGFyc2VUb0RhdGVDb21wb25lbnRz
KHNhbml0aXplZFZhbHVlLCAmZGF0ZSkpCisgICAgICAgICAgICBtX2RhdGVUaW1lRWRpdEVsZW1l
bnQtPnNldFZhbHVlQXNEYXRlKGRhdGUpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX2Rh
dGVUaW1lRWRpdEVsZW1lbnQtPnNldFZhbHVlQXNFbXB0eSgpOworICAgIH0KK30KKwordm9pZCBU
aW1lSW5wdXRUeXBlOjpzdGVwUmFuZ2VDaGFuZ2VkKCkKK3sKKyAgICBpZiAobV9kYXRlVGltZUVk
aXRFbGVtZW50KQorICAgICAgICBtX2RhdGVUaW1lRWRpdEVsZW1lbnQtPnNldExheW91dChjcmVh
dGVTdGVwUmFuZ2UoQW55SXNEZWZhdWx0U3RlcCkpOworfQorCisjZW5kaWYgLy8gRU5BQkxFKFRJ
TUVfSU5QVVRfRklFTERTKQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9UaW1lSW5wdXRUeXBlLmggYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL1RpbWVJbnB1dFR5cGUuaAppbmRleCBjOWQ1YjBjZGQwNzcxMmI4NzdlYWE3YzE5
MmM2ZWE4NDFkYTUwZGRkLi5lNDhiMzkxZjlmYWU1NjFjMWU5NzEyYTI3ZTY4MjdiMTcwNmNmZTlm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL1RpbWVJbnB1dFR5cGUuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL1RpbWVJbnB1dFR5cGUuaApAQCAtMzUsMTIgKzM1LDIzIEBACiAK
ICNpZiBFTkFCTEUoSU5QVVRfVFlQRV9USU1FKQogCisjaWYgRU5BQkxFKFRJTUVfSU5QVVRfRklF
TERTKQorI2luY2x1ZGUgIkRhdGVUaW1lRWRpdEVsZW1lbnQuaCIKKyNkZWZpbmUgVElNRV9JTlBV
VF9UWVBFX0JBU0VfQ0xBU1NfTElTVCBwdWJsaWMgQmFzZURhdGVBbmRUaW1lSW5wdXRUeXBlLCBw
cml2YXRlIERhdGVUaW1lRWRpdEVsZW1lbnQ6OkVkaXRDb250cm9sRXZlbnRIYW5kbGVyCisjZWxz
ZQorI2RlZmluZSBUSU1FX0lOUFVUX1RZUEVfQkFTRV9DTEFTU19MSVNUIHB1YmxpYyBCYXNlRGF0
ZUFuZFRpbWVJbnB1dFR5cGUKKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNz
IFRpbWVJbnB1dFR5cGUgOiBwdWJsaWMgQmFzZURhdGVBbmRUaW1lSW5wdXRUeXBlIHsKK2NsYXNz
IFRpbWVJbnB1dFR5cGUgOiBUSU1FX0lOUFVUX1RZUEVfQkFTRV9DTEFTU19MSVNUIHsKIHB1Ymxp
YzoKICAgICBzdGF0aWMgUGFzc093blB0cjxJbnB1dFR5cGU+IGNyZWF0ZShIVE1MSW5wdXRFbGVt
ZW50Kik7CiAKKyNpZiBFTkFCTEUoVElNRV9JTlBVVF9GSUVMRFMpCisgICAgdmlydHVhbCB+VGlt
ZUlucHV0VHlwZSgpOworI2VuZGlmCisKIHByaXZhdGU6CiAgICAgVGltZUlucHV0VHlwZShIVE1M
SW5wdXRFbGVtZW50KiBlbGVtZW50KSA6IEJhc2VEYXRlQW5kVGltZUlucHV0VHlwZShlbGVtZW50
KSB7IH0KICAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgZm9ybUNvbnRyb2xUeXBlKCkg
Y29uc3QgT1ZFUlJJREU7CkBAIC01MCw2ICs2MSwzMCBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwg
Ym9vbCBwYXJzZVRvRGF0ZUNvbXBvbmVudHNJbnRlcm5hbChjb25zdCBVQ2hhciosIHVuc2lnbmVk
IGxlbmd0aCwgRGF0ZUNvbXBvbmVudHMqKSBjb25zdCBPVkVSUklERTsKICAgICB2aXJ0dWFsIGJv
b2wgc2V0TWlsbGlzZWNvbmRUb0RhdGVDb21wb25lbnRzKGRvdWJsZSwgRGF0ZUNvbXBvbmVudHMq
KSBjb25zdCBPVkVSUklERTsKICAgICB2aXJ0dWFsIGJvb2wgaXNUaW1lRmllbGQoKSBjb25zdCBP
VkVSUklERTsKKworI2lmIEVOQUJMRShUSU1FX0lOUFVUX0ZJRUxEUykKKyAgICAvLyBEYXRlVGlt
ZUVkaXRFbGVtZW50OjpFZGl0Q29udHJvbEV2ZW50SGFuZGxlciBtZXRob2RzCisgICAgdmlydHVh
bCB2b2lkIGVkaXRDb250cm9sVmFsdWVDaGFuZ2VkKCkgT1ZFUlJJREUgRklOQUw7CisKKyAgICAv
LyBJbnB1dFR5cGUgbWV0aG9kcworICAgIHZpcnR1YWwgUmVuZGVyT2JqZWN0KiBjcmVhdGVSZW5k
ZXJlcihSZW5kZXJBcmVuYSosIFJlbmRlclN0eWxlKikgY29uc3QgT1ZFUlJJREUgRklOQUw7Cisg
ICAgdmlydHVhbCB2b2lkIGNyZWF0ZVNoYWRvd1N1YnRyZWUoKSBPVkVSUklERSBGSU5BTDsKKyAg
ICB2aXJ0dWFsIHZvaWQgZGVzdHJveVNoYWRvd1N1YnRyZWUoKSBPVkVSUklERSBGSU5BTDsKKyAg
ICB2aXJ0dWFsIHZvaWQgZGlzYWJsZWRBdHRyaWJ1dGVDaGFuZ2VkKCkgT1ZFUlJJREUgRklOQUw7
CisgICAgdmlydHVhbCB2aXJ0dWFsIHZvaWQgZm9yd2FyZEV2ZW50KEV2ZW50KikgT1ZFUlJJREUg
RklOQUw7CisgICAgdmlydHVhbCB2b2lkIGhhbmRsZURPTUFjdGl2YXRlRXZlbnQoRXZlbnQqKSBP
VkVSUklERSBGSU5BTDsKKyAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlS2V5ZG93bkV2ZW50KEtleWJv
YXJkRXZlbnQqKSBPVkVSUklERSBGSU5BTDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNLZXlib2FyZEZv
Y3VzYWJsZShLZXlib2FyZEV2ZW50KikgY29uc3QgT1ZFUlJJREUgRklOQUw7CisgICAgdmlydHVh
bCBib29sIGlzTW91c2VGb2N1c2FibGUoKSBjb25zdCBPVkVSUklERSBGSU5BTDsKKyAgICB2aXJ0
dWFsIGJvb2wgaXNUZXh0RmllbGQoKSBjb25zdCBPVkVSUklERSBGSU5BTCB7IHJldHVybiBmYWxz
ZTsgfQorICAgIHZpcnR1YWwgdm9pZCByZWFkb25seUF0dHJpYnV0ZUNoYW5nZWQoKSBPVkVSUklE
RSBGSU5BTDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0VmFsdWUoY29uc3QgU3RyaW5nJiwgYm9vbCB2
YWx1ZUNoYW5nZWQsIFRleHRGaWVsZEV2ZW50QmVoYXZpb3IpIE9WRVJSSURFIEZJTkFMOworICAg
IHZpcnR1YWwgYm9vbCBzaG91bGRVc2VJbnB1dE1ldGhvZCgpIGNvbnN0IE9WRVJSSURFIEZJTkFM
IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCB2b2lkIHN0ZXBSYW5nZUNoYW5nZWQoKSBP
VkVSUklERSBGSU5BTDsKKworICAgIFJlZlB0cjxEYXRlVGltZUVkaXRFbGVtZW50PiBtX2RhdGVU
aW1lRWRpdEVsZW1lbnQ7CisjZW5kaWYKKwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvRGF0ZVRpbWVFZGl0RWxlbWVu
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9EYXRlVGltZUVkaXRFbGVtZW50LmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5lYzk3OTExMGIwMjFjOGNkMzk5NGI4Yjk5YzgzZTk0Y2U0NWIyYThkCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvRGF0ZVRpbWVFZGl0
RWxlbWVudC5jcHAKQEAgLTAsMCArMSw4MzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICog
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICog
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICog
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiRGF0ZVRpbWVFZGl0RWxlbWVudC5oIgorCisjaWYgRU5BQkxFKFRJTUVfSU5QVVRfRklFTERT
KQorCisjaW5jbHVkZSAiRGF0ZUNvbXBvbmVudHMuaCIKKyNpbmNsdWRlICJEYXRlVGltZUZvcm1h
dC5oIgorI2luY2x1ZGUgIkVsZW1lbnRTaGFkb3cuaCIKKyNpbmNsdWRlICJFdmVudEhhbmRsZXIu
aCIKKyNpbmNsdWRlICJIVE1MSW5wdXRFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTE5hbWVzLmgi
CisjaW5jbHVkZSAiS2V5Ym9hcmRFdmVudC5oIgorI2luY2x1ZGUgIkxvY2FsaXplZERhdGUuaCIK
KyNpbmNsdWRlICJNb3VzZUV2ZW50LmgiCisjaW5jbHVkZSAiU3RlcFJhbmdlLmgiCisjaW5jbHVk
ZSAiVGV4dC5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCit1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOworCitzdGF0aWMgY29u
c3QgaW50IGhvdXJJbk1pbGxpc2Vjb25kID0gMzYwMCAqIDEwMDA7CitzdGF0aWMgY29uc3QgaW50
IG1pbnV0ZUluTWlsbGlzZWNvbmQgPSA2MCAqIDEwMDA7CitzdGF0aWMgY29uc3QgaW50IHNlY29u
ZEluTWlsbGlzZWNvbmQgPSAxMDAwOworCitzdGF0aWMgc2l6ZV90IGRpc3BsYXlTaXplT2ZOdW1i
ZXIoaW50IHZhbHVlKQoreworICAgIEFTU0VSVCh2YWx1ZSA+PSAwKTsKKworICAgIGlmICghdmFs
dWUpCisgICAgICAgIHJldHVybiAxOworCisgICAgaW50IG51bWJlck9mRGlnaXRzID0gMDsKKyAg
ICB3aGlsZSAodmFsdWUpIHsKKyAgICAgICAgdmFsdWUgLz0gMTA7CisgICAgICAgICsrbnVtYmVy
T2ZEaWdpdHM7CisgICAgfQorCisgICAgcmV0dXJuIG51bWJlck9mRGlnaXRzOworfQorCitjbGFz
cyBEYXRlVGltZUVkaXRMYXlvdXRCdWlsZGVyIDogcHVibGljIERhdGVUaW1lRm9ybWF0OjpUb2tl
bkhhbmRsZXIgeworcHVibGljOgorICAgIERhdGVUaW1lRWRpdExheW91dEJ1aWxkZXIoRGF0ZVRp
bWVFZGl0RWxlbWVudCogZWxlbW50LCBjb25zdCBTdGVwUmFuZ2UmIHN0ZXBSYW5nZSkKKyAgICAg
ICAgOiBtX2VsZW1lbnQoZWxlbW50KQorICAgICAgICAsIG1fc3RlcFJhbmdlKHN0ZXBSYW5nZSkK
KyAgICB7CisgICAgfQorCisgICAgYm9vbCBidWlsZChjb25zdCBTdHJpbmcmKTsKKworcHJpdmF0
ZToKKyAgICB2b2lkIGFkZEZpZWxkKERhdGVUaW1lRmllbGRFbGVtZW50KiBmaWVsZCkgY29uc3QK
KyAgICB7CisgICAgICAgIGlmIChzdGF0aWNfY2FzdDxzaXplX3Q+KG1fZWxlbWVudC0+bV9udW1i
ZXJPZkZpZWxkcykgPj0gV1RGX0FSUkFZX0xFTkdUSChtX2VsZW1lbnQtPm1fZmllbGRzKSkKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgbV9lbGVtZW50LT5tX2ZpZWxkc1ttX2VsZW1lbnQt
Pm1fbnVtYmVyT2ZGaWVsZHNdID0gZmllbGQ7CisgICAgICAgICsrbV9lbGVtZW50LT5tX251bWJl
ck9mRmllbGRzOworICAgIH0KKworICAgIGJvb2wgbmVlZE1pbGxpc2Vjb25kRmllbGQoKSBjb25z
dAorICAgIHsKKyAgICAgICAgcmV0dXJuICFtX3N0ZXBSYW5nZS5jbGFtcFZhbHVlKG1fc3RlcFJh
bmdlLm1heGltdW0oKSkucmVtYWluZGVyKHNlY29uZEluTWlsbGlzZWNvbmQpLmlzWmVybygpCisg
ICAgICAgICAgICB8fCAhbV9zdGVwUmFuZ2UubWluaW11bSgpLnJlbWFpbmRlcihzZWNvbmRJbk1p
bGxpc2Vjb25kKS5pc1plcm8oKQorICAgICAgICAgICAgfHwgIW1fc3RlcFJhbmdlLnN0ZXAoKS5y
ZW1haW5kZXIoc2Vjb25kSW5NaWxsaXNlY29uZCkuaXNaZXJvKCk7CisgICAgfQorCisgICAgYm9v
bCBuZWVkTWludXRlRmllbGQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICFtX3N0ZXBS
YW5nZS5jbGFtcFZhbHVlKG1fc3RlcFJhbmdlLm1heGltdW0oKSkucmVtYWluZGVyKGhvdXJJbk1p
bGxpc2Vjb25kKS5pc1plcm8oKQorICAgICAgICAgICAgfHwgIW1fc3RlcFJhbmdlLm1pbmltdW0o
KS5yZW1haW5kZXIoaG91ckluTWlsbGlzZWNvbmQpLmlzWmVybygpCisgICAgICAgICAgICB8fCAh
bV9zdGVwUmFuZ2Uuc3RlcCgpLnJlbWFpbmRlcihob3VySW5NaWxsaXNlY29uZCkuaXNaZXJvKCk7
CisgICAgfQorCisgICAgYm9vbCBuZWVkU2Vjb25kRmllbGQoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuICFtX3N0ZXBSYW5nZS5jbGFtcFZhbHVlKG1fc3RlcFJhbmdlLm1heGltdW0oKSku
cmVtYWluZGVyKG1pbnV0ZUluTWlsbGlzZWNvbmQpLmlzWmVybygpCisgICAgICAgICAgICB8fCAh
bV9zdGVwUmFuZ2UubWluaW11bSgpLnJlbWFpbmRlcihtaW51dGVJbk1pbGxpc2Vjb25kKS5pc1pl
cm8oKQorICAgICAgICAgICAgfHwgIW1fc3RlcFJhbmdlLnN0ZXAoKS5yZW1haW5kZXIobWludXRl
SW5NaWxsaXNlY29uZCkuaXNaZXJvKCk7CisgICAgfQorCisgICAgLy8gRGF0ZVRpbWVGb3JtYXQ6
OlRva2VuSGFuZGxlciBmdW5jdGlvbnMuCisgICAgdm9pZCBnb3RGaWVsZChEYXRlVGltZUZvcm1h
dDo6RmllbGRUeXBlLCBpbnQpOworICAgIHZvaWQgZ290TGl0ZXJhbChjb25zdCBTdHJpbmcmKTsK
KworICAgIERhdGVUaW1lRWRpdEVsZW1lbnQqIG1fZWxlbWVudDsKKyAgICBjb25zdCBTdGVwUmFu
Z2UmIG1fc3RlcFJhbmdlOworfTsKKworYm9vbCBEYXRlVGltZUVkaXRMYXlvdXRCdWlsZGVyOjpi
dWlsZChjb25zdCBTdHJpbmcmIGZvcm1hdFN0cmluZykKK3sKKyAgICBtX2VsZW1lbnQtPnJlc2V0
TGF5b3V0KCk7CisgICAgRGF0ZVRpbWVGb3JtYXQgZm9ybWF0KCp0aGlzKTsKKyAgICByZXR1cm4g
Zm9ybWF0LnBhcnNlKGZvcm1hdFN0cmluZyk7Cit9CisKK3ZvaWQgRGF0ZVRpbWVFZGl0TGF5b3V0
QnVpbGRlcjo6Z290RmllbGQoRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZSBmaWVsZFR5cGUsIGlu
dCkKK3sKKyAgICBzd2l0Y2ggKGZpZWxkVHlwZSkgeworICAgIGNhc2UgRGF0ZVRpbWVGb3JtYXQ6
OkZpZWxkVHlwZUhvdXIxMToKKyAgICAgICAgYWRkRmllbGQobV9lbGVtZW50LT5tX2hvdXIxMUZp
ZWxkLmdldCgpKTsKKyAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSBEYXRlVGltZUZvcm1hdDo6
RmllbGRUeXBlSG91cjEyOgorICAgICAgICBhZGRGaWVsZChtX2VsZW1lbnQtPm1faG91cjEyRmll
bGQuZ2V0KCkpOworICAgICAgICByZXR1cm47CisKKyAgICBjYXNlIERhdGVUaW1lRm9ybWF0OjpG
aWVsZFR5cGVIb3VyMjM6CisgICAgICAgIGFkZEZpZWxkKG1fZWxlbWVudC0+bV9ob3VyMjNGaWVs
ZC5nZXQoKSk7CisgICAgICAgIHJldHVybjsKKworICAgIGNhc2UgRGF0ZVRpbWVGb3JtYXQ6OkZp
ZWxkVHlwZUhvdXIyNDoKKyAgICAgICAgYWRkRmllbGQobV9lbGVtZW50LT5tX2hvdXIyNEZpZWxk
LmdldCgpKTsKKyAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSBEYXRlVGltZUZvcm1hdDo6Rmll
bGRUeXBlTWludXRlOgorICAgICAgICBhZGRGaWVsZChtX2VsZW1lbnQtPm1fbWludXRlRmllbGQu
Z2V0KCkpOworCisgICAgICAgIGlmICghbmVlZE1pbnV0ZUZpZWxkKCkpIHsKKyAgICAgICAgICAg
IG1fZWxlbWVudC0+bV9taW51dGVGaWVsZC0+ZGlzYWJsZSgpOworICAgICAgICAgICAgbV9lbGVt
ZW50LT5tX21pbnV0ZUZpZWxkLT5zZXRWYWx1ZUFzSW50ZWdlcigwLCBEYXRlVGltZUZpZWxkRWxl
bWVudDo6RGlzcGF0Y2hOb0V2ZW50KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm47CisKKyAg
ICBjYXNlIERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVQZXJpb2Q6CisgICAgICAgIGFkZEZpZWxk
KG1fZWxlbWVudC0+bV9wZXJpb2RGaWVsZC5nZXQoKSk7CisgICAgICAgIHJldHVybjsKKworICAg
IGNhc2UgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZVNlY29uZDoKKyAgICAgICAgaWYgKG5lZWRT
ZWNvbmRGaWVsZCgpKQorICAgICAgICAgICAgYWRkRmllbGQobV9lbGVtZW50LT5tX3NlY29uZEZp
ZWxkLmdldCgpKTsKKyAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSBEYXRlVGltZUZvcm1hdDo6
RmllbGRUeXBlRnJhY3Rpb25hbFNlY29uZDoKKyAgICAgICAgaWYgKG5lZWRNaWxsaXNlY29uZEZp
ZWxkKCkpCisgICAgICAgICAgICBhZGRGaWVsZChtX2VsZW1lbnQtPm1fbWlsbGlzZWNvbmRGaWVs
ZC5nZXQoKSk7CisgICAgICAgIHJldHVybjsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVy
bjsKKyAgICB9Cit9CisKK3ZvaWQgRGF0ZVRpbWVFZGl0TGF5b3V0QnVpbGRlcjo6Z290TGl0ZXJh
bChjb25zdCBTdHJpbmcmIHRleHQpCit7CisgICAgbV9lbGVtZW50LT5hcHBlbmRDaGlsZChUZXh0
OjpjcmVhdGUobV9lbGVtZW50LT5kb2N1bWVudCgpLCAiOiIpKTsKK30KKworRGF0ZVRpbWVGaWVs
ZEVsZW1lbnQ6OkRhdGVUaW1lRmllbGRFbGVtZW50KERvY3VtZW50KiBkb2N1bWVudCwgRmllbGRU
eXBlIGZpZWxkVHlwZSwgRmllbGRFdmVudEhhbmRsZXImIGZpZWxkRXZlbnRIYW5kbGVyKQorICAg
IDogSFRNTEVsZW1lbnQoc3BhblRhZywgZG9jdW1lbnQpCisgICAgLCBtX2ZpZWxkRXZlbnRIYW5k
bGVyKCZmaWVsZEV2ZW50SGFuZGxlcikKKyAgICAsIG1fZmllbGRUeXBlKGZpZWxkVHlwZSkKK3sK
K30KKwordm9pZCBEYXRlVGltZUZpZWxkRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVu
dCogZXZlbnQpCit7CisgICAgaWYgKGV2ZW50LT5pc0tleWJvYXJkRXZlbnQoKSAmJiBldmVudC0+
dHlwZSgpID09IGV2ZW50TmFtZXMoKS5rZXlkb3duRXZlbnQpIHsKKyAgICAgICAgS2V5Ym9hcmRF
dmVudCoga2V5Ym9hcmRFdmVudCA9IHN0YXRpY19jYXN0PEtleWJvYXJkRXZlbnQqPihldmVudCk7
CisKKyAgICAgICAgY29uc3QgU3RyaW5nJiBrZXlJZGVudGlmaWVyID0ga2V5Ym9hcmRFdmVudC0+
a2V5SWRlbnRpZmllcigpOworCisgICAgICAgIGlmIChrZXlJZGVudGlmaWVyID09ICJEb3duIikg
eworICAgICAgICAgICAga2V5Ym9hcmRFdmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKKyAgICAg
ICAgICAgIHN0ZXBEb3duKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAg
ICAgICBpZiAoa2V5SWRlbnRpZmllciA9PSAiVXAiKSB7CisgICAgICAgICAgICBrZXlib2FyZEV2
ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOworICAgICAgICAgICAgc3RlcFVwKCk7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoa2V5SWRlbnRpZmllciA9PSAi
VSswMDA4IikgeworICAgICAgICAgICAga2V5Ym9hcmRFdmVudC0+c2V0RGVmYXVsdEhhbmRsZWQo
KTsKKyAgICAgICAgICAgIHNldFZhbHVlQXNFbXB0eShEaXNwYXRjaEV2ZW50KTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICghZXZlbnQtPmRlZmF1bHRI
YW5kbGVkKCkpCisgICAgICAgIEhUTUxFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKGV2ZW50
KTsKK30KKwordm9pZCBEYXRlVGltZUZpZWxkRWxlbWVudDo6ZGlzYWJsZSgpCit7CisgICAgLy8g
U2V0IGRpc2FibGVkIEhUTUwgYXR0cmlidXRlIHRvIGNoYW5nZSBhcHBlcmFuY2UuCisgICAgc2V0
QXR0cmlidXRlKGRpc2FibGVkQXR0ciwgZW1wdHlTdHJpbmcoKSk7CisgICAgc2V0TmVlZHNTdHls
ZVJlY2FsYygpOworfQorCitib29sIERhdGVUaW1lRmllbGRFbGVtZW50OjpkaXNhYmxlZCgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIGZhc3RIYXNBdHRyaWJ1dGUoZGlzYWJsZWRBdHRyKTsKK30KKwor
Y29uc3QgQXRvbWljU3RyaW5nJiBEYXRlVGltZUZpZWxkRWxlbWVudDo6c2hhZG93UHNldWRvSWQo
KSBjb25zdAoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoQXRvbWljU3RyaW5nLCBob3VyUHN1
ZWRvSWQsICgiLXdlYmtpdC1kYXRldGltZS1lZGl0LWhvdXItZmllbGQiKSk7CisgICAgREVGSU5F
X1NUQVRJQ19MT0NBTChBdG9taWNTdHJpbmcsIG1pbGxpc2Vjb25kUHN1ZWRvSWQsICgiLXdlYmtp
dC1kYXRldGltZS1lZGl0LW1pbGxpc2Vjb25kLWZpZWxkIikpOworICAgIERFRklORV9TVEFUSUNf
TE9DQUwoQXRvbWljU3RyaW5nLCBtaW51dGVQc3VlZG9JZCwgKCItd2Via2l0LWRhdGV0aW1lLWVk
aXQtbWludXRlLWZpZWxkIikpOworICAgIERFRklORV9TVEFUSUNfTE9DQUwoQXRvbWljU3RyaW5n
LCBub29uUHN1ZWRvSWQsICgiLXdlYmtpdC1kYXRldGltZS1lZGl0LW5vb24tZmllbGQiKSk7Cisg
ICAgREVGSU5FX1NUQVRJQ19MT0NBTChBdG9taWNTdHJpbmcsIHNlY29uZFBzdWVkb0lkLCAoIi13
ZWJraXQtZGF0ZXRpbWUtZWRpdC1zZWNvbmQtZmllbGQiKSk7CisKKyAgICBzd2l0Y2ggKG1fZmll
bGRUeXBlKSB7CisgICAgY2FzZSBEYXRlVGltZUZpZWxkRWxlbWVudDo6SG91cjExOgorICAgIGNh
c2UgRGF0ZVRpbWVGaWVsZEVsZW1lbnQ6OkhvdXIxMjoKKyAgICBjYXNlIERhdGVUaW1lRmllbGRF
bGVtZW50OjpIb3VyMjM6CisgICAgY2FzZSBEYXRlVGltZUZpZWxkRWxlbWVudDo6SG91cjI0Ogor
ICAgICAgICByZXR1cm4gaG91clBzdWVkb0lkOworICAgIGNhc2UgRGF0ZVRpbWVGaWVsZEVsZW1l
bnQ6Ok1pbnV0ZToKKyAgICAgICAgcmV0dXJuIG1pbnV0ZVBzdWVkb0lkOworICAgIGNhc2UgRGF0
ZVRpbWVGaWVsZEVsZW1lbnQ6OlNlY29uZDoKKyAgICAgICAgcmV0dXJuIHNlY29uZFBzdWVkb0lk
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIERhdGVUaW1lRmllbGRFbGVtZW50OjpNaWxsaXNl
Y29uZDoKKyAgICAgICAgcmV0dXJuIG1pbGxpc2Vjb25kUHN1ZWRvSWQ7CisgICAgY2FzZSBEYXRl
VGltZUZpZWxkRWxlbWVudDo6UGVyaW9kOgorICAgICAgICByZXR1cm4gbm9vblBzdWVkb0lkOwor
ICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KK30KK3Zv
aWQgRGF0ZVRpbWVGaWVsZEVsZW1lbnQ6OnVwZGF0ZVZpc2libGVWYWx1ZShFdmVudEJlaGF2aW9y
IGV2ZW50QmVoYXZpb3IpCit7CisgICAgVGV4dCogdGV4dE5vZGUgPSBzdGF0aWNfY2FzdDxUZXh0
Kj4oZmlyc3RDaGlsZCgpKTsKKyAgICBjb25zdCBTdHJpbmcgbmV3VmlzaWJsZVZhbHVlID0gdmlz
aWJsZVZhbHVlKCk7CisKKyAgICBpZiAodGV4dE5vZGUtPndob2xlVGV4dCgpID09IG5ld1Zpc2li
bGVWYWx1ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgRXhjZXB0aW9uQ29kZSBlYzsKKyAgICB0
ZXh0Tm9kZS0+cmVwbGFjZVdob2xlVGV4dChuZXdWaXNpYmxlVmFsdWUsIGVjKTsKKworICAgIGlm
IChldmVudEJlaGF2aW9yID09IERpc3BhdGNoRXZlbnQgJiYgbV9maWVsZEV2ZW50SGFuZGxlcikK
KyAgICAgICAgbV9maWVsZEV2ZW50SGFuZGxlci0+ZmllbGRWYWx1ZUNoYW5nZWQoKTsKK30KKwor
RGF0ZVRpbWVFZGl0RWxlbWVudDo6RGF0ZVRpbWVFZGl0RWxlbWVudChEb2N1bWVudCogZG9jdW1l
bnQsIEVkaXRDb250cm9sRXZlbnRIYW5kbGVyJiBlZGl0Q29udHJvbEV2ZW50SGFuZGxlcikKKyAg
ICA6IEhUTUxEaXZFbGVtZW50KGRpdlRhZywgZG9jdW1lbnQpCisgICAgLCBtX2VkaXRDb250cm9s
RXZlbnRIYW5kbGVyKCZlZGl0Q29udHJvbEV2ZW50SGFuZGxlcikKKyAgICAsIG1fZm9jdXNGaWVs
ZEluZGV4KEludmFsaWRGaWVsZEluZGV4KQorICAgICwgbV9udW1iZXJPZkZpZWxkcygwKQorewor
ICAgIG1faG91cjExRmllbGQgPSBEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQ6OmNyZWF0ZShk
b2N1bWVudCwgRGF0ZVRpbWVGaWVsZEVsZW1lbnQ6OkhvdXIxMSwgKnRoaXMpOworICAgIG1faG91
cjEyRmllbGQgPSBEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQ6OmNyZWF0ZShkb2N1bWVudCwg
RGF0ZVRpbWVGaWVsZEVsZW1lbnQ6OkhvdXIxMiwgKnRoaXMpOworICAgIG1faG91cjIzRmllbGQg
PSBEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQ6OmNyZWF0ZShkb2N1bWVudCwgRGF0ZVRpbWVG
aWVsZEVsZW1lbnQ6OkhvdXIyMywgKnRoaXMpOworICAgIG1faG91cjI0RmllbGQgPSBEYXRlVGlt
ZU51bWVyaWNGaWVsZEVsZW1lbnQ6OmNyZWF0ZShkb2N1bWVudCwgRGF0ZVRpbWVGaWVsZEVsZW1l
bnQ6OkhvdXIyNCwgKnRoaXMpOworICAgIG1fbWlsbGlzZWNvbmRGaWVsZCA9IERhdGVUaW1lTnVt
ZXJpY0ZpZWxkRWxlbWVudDo6Y3JlYXRlKGRvY3VtZW50LCBEYXRlVGltZUZpZWxkRWxlbWVudDo6
TWlsbGlzZWNvbmQsICp0aGlzKTsKKyAgICBtX21pbnV0ZUZpZWxkID0gRGF0ZVRpbWVOdW1lcmlj
RmllbGRFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQsIERhdGVUaW1lRmllbGRFbGVtZW50OjpNaW51
dGUsICp0aGlzKTsKKyAgICBtX3BlcmlvZEZpZWxkID0gRGF0ZVRpbWVTeW1ib2xpY0ZpZWxkRWxl
bWVudDo6Y3JlYXRlKGRvY3VtZW50LCBEYXRlVGltZUZpZWxkRWxlbWVudDo6UGVyaW9kLCAqdGhp
cyk7CisgICAgbV9zZWNvbmRGaWVsZCA9IERhdGVUaW1lTnVtZXJpY0ZpZWxkRWxlbWVudDo6Y3Jl
YXRlKGRvY3VtZW50LCBEYXRlVGltZUZpZWxkRWxlbWVudDo6U2Vjb25kLCAqdGhpcyk7CisgICAg
bV9zcGluQnV0dG9uID0gU3BpbkJ1dHRvbkVsZW1lbnQ6OmNyZWF0ZShkb2N1bWVudCwgKnRoaXMp
OworICAgIC8vIEZJWE1FOiBTcGluQnV0dG9uIHNob3VsZCBoYXZlIHdpZHRoIGJ5IGl0c2VsZi4K
KyAgICBFeGNlcHRpb25Db2RlIGVjOworICAgIG1fc3BpbkJ1dHRvbi0+c2V0SW5uZXJUZXh0KCIu
IiwgZWMpOworfQorCitEYXRlVGltZUVkaXRFbGVtZW50Ojp+RGF0ZVRpbWVFZGl0RWxlbWVudCgp
Cit7CisgICAgaWYgKG1faG91cjExRmllbGQpCisgICAgICAgIG1faG91cjExRmllbGQtPnJlbW92
ZUV2ZW50SGFuZGxlcigpOworCisgICAgaWYgKG1faG91cjEyRmllbGQpCisgICAgICAgIG1faG91
cjEyRmllbGQtPnJlbW92ZUV2ZW50SGFuZGxlcigpOworCisgICAgaWYgKG1faG91cjIzRmllbGQp
CisgICAgICAgIG1faG91cjIzRmllbGQtPnJlbW92ZUV2ZW50SGFuZGxlcigpOworCisgICAgaWYg
KG1faG91cjI0RmllbGQpCisgICAgICAgIG1faG91cjI0RmllbGQtPnJlbW92ZUV2ZW50SGFuZGxl
cigpOworCisgICAgaWYgKG1fbWlsbGlzZWNvbmRGaWVsZCkKKyAgICAgICAgbV9taWxsaXNlY29u
ZEZpZWxkLT5yZW1vdmVFdmVudEhhbmRsZXIoKTsKKworICAgIGlmIChtX21pbnV0ZUZpZWxkKQor
ICAgICAgICBtX21pbnV0ZUZpZWxkLT5yZW1vdmVFdmVudEhhbmRsZXIoKTsKKworICAgIGlmICht
X3BlcmlvZEZpZWxkKQorICAgICAgICBtX3BlcmlvZEZpZWxkLT5yZW1vdmVFdmVudEhhbmRsZXIo
KTsKKworICAgIGlmIChtX3NlY29uZEZpZWxkKQorICAgICAgICBtX3NlY29uZEZpZWxkLT5yZW1v
dmVFdmVudEhhbmRsZXIoKTsKKworICAgIGlmIChtX3NwaW5CdXR0b24pCisgICAgICAgIG1fc3Bp
bkJ1dHRvbi0+cmVtb3ZlU3RlcEFjdGlvbkhhbmRsZXIoKTsKK30KKworUGFzc1JlZlB0cjxEYXRl
VGltZUVkaXRFbGVtZW50PiBEYXRlVGltZUVkaXRFbGVtZW50OjpjcmVhdGUoRG9jdW1lbnQqIGRv
Y3VtZW50LCBFZGl0Q29udHJvbEV2ZW50SGFuZGxlciYgZWRpdENvbnRyb2xFdmVudEhhbmRsZXIs
IGNvbnN0IFN0ZXBSYW5nZSYgc3RlcFJhbmdlKQoreworICAgIFJlZlB0cjxEYXRlVGltZUVkaXRF
bGVtZW50PiBjb250YWluZXIgPSBhZG9wdFJlZihuZXcgRGF0ZVRpbWVFZGl0RWxlbWVudChkb2N1
bWVudCwgZWRpdENvbnRyb2xFdmVudEhhbmRsZXIpKTsKKyAgICBjb250YWluZXItPnNldFNoYWRv
d1BzZXVkb0lkKCItd2Via2l0LXRleHRmaWVsZC1kZWNvcmF0aW9uLWNvbnRhaW5lciIpOworICAg
IGNvbnRhaW5lci0+c2V0TGF5b3V0KHN0ZXBSYW5nZSk7CisgICAgcmV0dXJuIGNvbnRhaW5lcjsK
K30KKworYm9vbCBEYXRlVGltZUVkaXRFbGVtZW50OjpkaXNhYmxlZCgpIGNvbnN0Cit7CisgICAg
Tm9kZSogaG9zdCA9IHNoYWRvd0FuY2VzdG9yTm9kZSgpOworICAgIHJldHVybiAhaG9zdCB8fCBo
b3N0LT5kaXNhYmxlZCgpOworfQorCitEYXRlVGltZUZpZWxkRWxlbWVudCogRGF0ZVRpbWVFZGl0
RWxlbWVudDo6ZmllbGRBdChpbnQgaW5kZXgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGluZGV4ID49
IDAgJiYgaW5kZXggPCBtX251bWJlck9mRmllbGRzID8gbV9maWVsZHNbaW5kZXhdIDogMDsKK30K
Kwordm9pZCBEYXRlVGltZUVkaXRFbGVtZW50OjpoYW5kbGVLZXlib2FyZEV2ZW50KEtleWJvYXJk
RXZlbnQqIGtleWJvYXJkRXZlbnQpCit7CisgICAgaWYgKGtleWJvYXJkRXZlbnQtPnR5cGUoKSA9
PSBldmVudE5hbWVzKCkua2V5ZG93bkV2ZW50ICYmIGZpZWxkQXQobV9mb2N1c0ZpZWxkSW5kZXgp
ICYmICFkaXNhYmxlZCgpICYmICFyZWFkT25seSgpKSB7CisgICAgICAgIGNvbnN0IFN0cmluZyYg
a2V5SWRlbnRpZmllciA9IGtleWJvYXJkRXZlbnQtPmtleUlkZW50aWZpZXIoKTsKKworICAgICAg
ICAvLyBGSVhNRTogV2Ugc2hvdWxkIHJlbW92ZSB0aGlzIGRlYnVnIGxvZ2dpbmcgYmVmb3JlIHJl
dmlldworICAgICAgICBMT0dfRVJST1IoImtleUlkZW50aWZpZXI9JXMiLCBrZXlJZGVudGlmaWVy
LmFzY2lpKCkuZGF0YSgpKTsKKworICAgICAgICBpZiAoa2V5SWRlbnRpZmllciA9PSAiTGVmdCIp
IHsKKyAgICAgICAgICAgIGtleWJvYXJkRXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7CisgICAg
ICAgICAgICBzZXRGb2N1c0ZpZWxkKHByZXZpb3VzRmllbGRJbmRleChtX2ZvY3VzRmllbGRJbmRl
eCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGtleUlk
ZW50aWZpZXIgPT0gIlJpZ2h0IikgeworICAgICAgICAgICAga2V5Ym9hcmRFdmVudC0+c2V0RGVm
YXVsdEhhbmRsZWQoKTsKKyAgICAgICAgICAgIHNldEZvY3VzRmllbGQobmV4dEZpZWxkSW5kZXgo
bV9mb2N1c0ZpZWxkSW5kZXgpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisg
ICAgICAgIGlmIChrZXlJZGVudGlmaWVyID09ICJVKzAwMDkiKSB7CisgICAgICAgICAgICBjb25z
dCBpbnQgZmllbGRJbmRleCA9IG1fZm9jdXNGaWVsZEluZGV4ICsgKGtleWJvYXJkRXZlbnQtPmdl
dE1vZGlmaWVyU3RhdGUoIlNoaWZ0IikgPyAtMSA6IDEpOworICAgICAgICAgICAgaWYgKGZpZWxk
QXQoZmllbGRJbmRleCkpIHsKKyAgICAgICAgICAgICAgICBrZXlib2FyZEV2ZW50LT5zZXREZWZh
dWx0SGFuZGxlZCgpOworICAgICAgICAgICAgICAgIHNldEZvY3VzRmllbGQoZmllbGRJbmRleCk7
CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
fQorfQorCit2b2lkIERhdGVUaW1lRWRpdEVsZW1lbnQ6OmZpZWxkVmFsdWVDaGFuZ2VkKCkKK3sK
KyAgICBpZiAobV9lZGl0Q29udHJvbEV2ZW50SGFuZGxlcikKKyAgICAgICAgbV9lZGl0Q29udHJv
bEV2ZW50SGFuZGxlci0+ZWRpdENvbnRyb2xWYWx1ZUNoYW5nZWQoKTsKK30KKwordm9pZCBEYXRl
VGltZUVkaXRFbGVtZW50OjpoYW5kbGVNb3VzZUV2ZW50KE1vdXNlRXZlbnQqIG1vdXNlRXZlbnQp
Cit7CisgICAgaWYgKG1vdXNlRXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2Vkb3du
RXZlbnQgJiYgbW91c2VFdmVudC0+YnV0dG9uKCkgPT0gTGVmdEJ1dHRvbiAmJiAhZGlzYWJsZWQo
KSAmJiAhcmVhZE9ubHkoKSkgeworICAgICAgICBOb2RlKiBjb25zdCByZWxhdGVkVGFyZ2V0ID0g
bW91c2VFdmVudC0+dGFyZ2V0KCktPnRvTm9kZSgpOworICAgICAgICBmb3IgKGludCBpID0gMDsg
aSA8IG1fbnVtYmVyT2ZGaWVsZHM7ICsraSkgeworICAgICAgICAgICAgaWYgKG1fZmllbGRzW2ld
ID09IHJlbGF0ZWRUYXJnZXQpIHsKKyAgICAgICAgICAgICAgICBtb3VzZUV2ZW50LT5zZXREZWZh
dWx0SGFuZGxlZCgpOworICAgICAgICAgICAgICAgIHNldEZvY3VzRmllbGQoaSk7CisgICAgICAg
ICAgICAgICAgTm9kZSogaG9zdCA9IHNoYWRvd0FuY2VzdG9yTm9kZSgpOworICAgICAgICAgICAg
ICAgIHRvSFRNTEVsZW1lbnQoaG9zdCktPmZvY3VzKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgRGF0ZVRpbWVFZGl0
RWxlbWVudDo6bW92ZVRvTmV4dEZpZWxkKCkKK3sKKyAgICBpZiAobV9mb2N1c0ZpZWxkSW5kZXgg
IT0gSW52YWxpZEZpZWxkSW5kZXgpCisgICAgICAgIHNldEZvY3VzRmllbGQobmV4dEZpZWxkSW5k
ZXgobV9mb2N1c0ZpZWxkSW5kZXgpKTsKK30KKworaW50IERhdGVUaW1lRWRpdEVsZW1lbnQ6Om5l
eHRGaWVsZEluZGV4KGludCBpbmRleCkgY29uc3QKK3sKKyAgICByZXR1cm4gc3RkOjptYXgoc3Rk
OjptaW4oaW5kZXggKyAxLCBtX251bWJlck9mRmllbGRzIC0gMSksIDApOworfQorCitpbnQgRGF0
ZVRpbWVFZGl0RWxlbWVudDo6cHJldmlvdXNGaWVsZEluZGV4KGludCBpbmRleCkgY29uc3QKK3sK
KyAgICByZXR1cm4gc3RkOjptYXgoc3RkOjptaW4oaW5kZXggLSAxLCBtX251bWJlck9mRmllbGRz
IC0gMSksIDApOworfQorCitib29sIERhdGVUaW1lRWRpdEVsZW1lbnQ6OnJlYWRPbmx5KCkgY29u
c3QKK3sKKyAgICBOb2RlKiBob3N0ID0gc2hhZG93QW5jZXN0b3JOb2RlKCk7CisgICAgaWYgKCFo
b3N0KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0
ID0gaG9zdC0+dG9JbnB1dEVsZW1lbnQoKTsKKyAgICByZXR1cm4gIWlucHV0IHx8IGlucHV0LT5y
ZWFkT25seSgpOworfQorCit2b2lkIERhdGVUaW1lRWRpdEVsZW1lbnQ6OnJlc2V0TGF5b3V0KCkK
K3sKKyAgICB3aGlsZSAoTm9kZSogbm9kZSA9IGZpcnN0Q2hpbGQoKSkKKyAgICAgICAgcmVtb3Zl
Q2hpbGQobm9kZSk7CisKKyAgICBtX251bWJlck9mRmllbGRzID0gMDsKK30KKwordm9pZCBEYXRl
VGltZUVkaXRFbGVtZW50OjpzZXRGb2N1c0ZpZWxkKGludCBuZXdGb2N1c0ZpZWxkSW5kZXgpCit7
CisgICAgaWYgKG1fZm9jdXNGaWVsZEluZGV4ID09IG5ld0ZvY3VzRmllbGRJbmRleCkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgRGF0ZVRpbWVGaWVsZEVsZW1lbnQqIGNvbnN0IG5ld0ZvY3VzRmll
bGQgPSBmaWVsZEF0KG5ld0ZvY3VzRmllbGRJbmRleCk7CisgICAgaWYgKG5ld0ZvY3VzRmllbGQg
JiYgbmV3Rm9jdXNGaWVsZC0+ZGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgRGF0
ZVRpbWVGaWVsZEVsZW1lbnQqIGNvbnN0IGN1cnJlbnRGb2N1c0ZpZWxkID0gZmllbGRBdChtX2Zv
Y3VzRmllbGRJbmRleCk7CisKKyAgICBpZiAoY3VycmVudEZvY3VzRmllbGQpCisgICAgICAgIGN1
cnJlbnRGb2N1c0ZpZWxkLT5zZXRGb2N1cyhmYWxzZSk7CisKKyAgICBpZiAoIW5ld0ZvY3VzRmll
bGQpIHsKKyAgICAgICAgbV9mb2N1c0ZpZWxkSW5kZXggPSBJbnZhbGlkRmllbGRJbmRleDsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1fZm9jdXNGaWVsZEluZGV4ID0gbmV3Rm9jdXNG
aWVsZEluZGV4OworICAgIG5ld0ZvY3VzRmllbGQtPnNldEZvY3VzKHRydWUpOworfQorCit2b2lk
IERhdGVUaW1lRWRpdEVsZW1lbnQ6OnNldExheW91dChjb25zdCBTdGVwUmFuZ2UmIHN0ZXBSYW5n
ZSkKK3sKKyAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHJlbW92ZSB0aGlzIGRlYnVnIGxvZ2dpbmcg
YmVmb3JlIHJldmlldworICAgIExPR19FUlJPUigibWluPSVkIG1heD0lZCBjbWF4PSVkIHN0ZXA9
JWQiLAorICAgICAgICBpbnQoc3RlcFJhbmdlLm1pbmltdW0oKS50b0RvdWJsZSgpKSwKKyAgICAg
ICAgaW50KHN0ZXBSYW5nZS5tYXhpbXVtKCkudG9Eb3VibGUoKSksCisgICAgICAgIGludChzdGVw
UmFuZ2UuY2xhbXBWYWx1ZShzdGVwUmFuZ2UubWF4aW11bSgpKS50b0RvdWJsZSgpKSwKKyAgICAg
ICAgaW50KHN0ZXBSYW5nZS5zdGVwKCkudG9Eb3VibGUoKSkpOworCisgICAgRGF0ZVRpbWVGaWVs
ZEVsZW1lbnQqIGNvbnN0IGZvY3VzRmllbGQgPSBmaWVsZEF0KG1fZm9jdXNGaWVsZEluZGV4KTsK
KyAgICBzZXRGb2N1c0ZpZWxkKEludmFsaWRGaWVsZEluZGV4KTsKKworICAgIERhdGVUaW1lRWRp
dExheW91dEJ1aWxkZXIgYnVpbGRlcih0aGlzLCBzdGVwUmFuZ2UpOworICAgIC8vIEZJWE1FOiBX
ZSBzaG91bGQgcmVtb3ZlIHRoaXMgZGVidWcgbG9nZ2luZyBiZWZvcmUgcmV2aWV3CisgICAgTE9H
X0VSUk9SKCJ0aW1lRm9ybWF0PSclcyciLCBsb2NhbGl6ZWRUaW1lRm9ybWF0VGV4dCgpLmFzY2lp
KCkuZGF0YSgpKTsKKyAgICBpZiAoIWJ1aWxkZXIuYnVpbGQobG9jYWxpemVkVGltZUZvcm1hdFRl
eHQoKSkgfHwgIW1fbnVtYmVyT2ZGaWVsZHMpIHsKKyAgICAgICAgcmVzZXRMYXlvdXQoKTsKKyAg
ICAgICAgYnVpbGRlci5idWlsZCgiSEg6TU06c3MuU1NTIik7CisgICAgfQorCisgICAgYXBwZW5k
Q2hpbGQobV9zcGluQnV0dG9uKTsKKworICAgIGlmIChmb2N1c0ZpZWxkKSB7CisgICAgICAgIGZv
ciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBtX251bWJlck9mRmllbGRzOyArK2luZGV4KSB7Cisg
ICAgICAgICAgICBpZiAoZm9jdXNGaWVsZCA9PSBmaWVsZEF0KGluZGV4KSkgeworICAgICAgICAg
ICAgICAgIHNldEZvY3VzRmllbGQoaW5kZXgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCit2b2lkIERhdGVUaW1lRWRpdEVsZW1l
bnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2ZW50KQoreworICAgIC8vIEZJWE1FOiBX
ZSBzaG91bGQgcmVtb3ZlIHRoaXMgZGVidWcgbG9nZ2luZyBiZWZvcmUgcmV2aWV3CisgICAgaWYg
KCFldmVudC0+aXNNb3VzZUV2ZW50KCkpCisgICAgICAgIExPR19FUlJPUigiRGF0ZVRpbWVFZGl0
RWxlbWVudDogZXZlbnQ9JXMiLCBzdGF0aWNfY2FzdDxTdHJpbmc+KGV2ZW50LT50eXBlKCkpLmFz
Y2lpKCkuZGF0YSgpKTsKKworICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5m
b2N1c0V2ZW50KSB7CisgICAgICAgIGlmICghZGlzYWJsZWQoKSAmJiAhcmVhZE9ubHkoKSAmJiBt
X2ZvY3VzRmllbGRJbmRleCA9PSBJbnZhbGlkRmllbGRJbmRleCkKKyAgICAgICAgICAgIHNldEZv
Y3VzRmllbGQoMCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoZXZlbnQtPnR5
cGUoKSA9PSBldmVudE5hbWVzKCkuYmx1ckV2ZW50KSB7CisgICAgICAgIHNldEZvY3VzRmllbGQo
SW52YWxpZEZpZWxkSW5kZXgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGV2
ZW50LT5pc01vdXNlRXZlbnQoKSkgeworICAgICAgICBoYW5kbGVNb3VzZUV2ZW50KHN0YXRpY19j
YXN0PE1vdXNlRXZlbnQqPihldmVudCkpOworICAgIH0gZWxzZSBpZiAoZXZlbnQtPmlzS2V5Ym9h
cmRFdmVudCgpKSB7CisgICAgICAgIGhhbmRsZUtleWJvYXJkRXZlbnQoc3RhdGljX2Nhc3Q8S2V5
Ym9hcmRFdmVudCo+KGV2ZW50KSk7CisgICAgfQorCisgICAgaWYgKGV2ZW50LT5kZWZhdWx0SGFu
ZGxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBEYXRlVGltZUZpZWxkRWxlbWVudCogZm9j
dXNGaWVsZCA9IGZpZWxkQXQobV9mb2N1c0ZpZWxkSW5kZXgpOworICAgIGlmICghZm9jdXNGaWVs
ZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgZm9jdXNGaWVsZC0+ZGVmYXVsdEV2ZW50SGFuZGxl
cihldmVudCk7Cit9CisKK3ZvaWQgRGF0ZVRpbWVFZGl0RWxlbWVudDo6ZGlzYWJsZSgpCit7Cisg
ICAgaWYgKGRpc2FibGVkKCkgfHwgcmVhZE9ubHkoKSkgeworICAgICAgaWYgKG1fc3BpbkJ1dHRv
bikKKyAgICAgICAgICBtX3NwaW5CdXR0b24tPnJlbGVhc2VDYXB0dXJlKCk7CisKKyAgICAgIHNl
dEZvY3VzRmllbGQoSW52YWxpZEZpZWxkSW5kZXgpOworICAgIH0KK30KKwordm9pZCBEYXRlVGlt
ZUVkaXRFbGVtZW50OjpzZXRWYWx1ZUFzRGF0ZShjb25zdCBEYXRlQ29tcG9uZW50cyYgZGF0ZSkK
K3sKKyAgICBmb3IgKGludCBmaWVsZEluZGV4ID0gMDsgZmllbGRJbmRleCA8IG1fbnVtYmVyT2ZG
aWVsZHM7ICsrZmllbGRJbmRleCkgeworICAgICAgICBEYXRlVGltZUZpZWxkRWxlbWVudCogY29u
c3QgZmllbGQgPSBmaWVsZEF0KGZpZWxkSW5kZXgpOworICAgICAgICBzd2l0Y2ggKGZpZWxkLT5m
aWVsZFR5cGUoKSkgeworICAgICAgICBjYXNlIERhdGVUaW1lRmllbGRFbGVtZW50OjpIb3VyMTE6
CisgICAgICAgICAgICBmaWVsZC0+c2V0VmFsdWVBc0ludGVnZXIoZGF0ZS5ob3VyKCkgJSAxMiwg
RGF0ZVRpbWVGaWVsZEVsZW1lbnQ6OkRpc3BhdGNoTm9FdmVudCk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBEYXRlVGltZUZpZWxkRWxlbWVudDo6SG91cjEyOgorICAgICAgICAg
ICAgZmllbGQtPnNldFZhbHVlQXNJbnRlZ2VyKGRhdGUuaG91cigpICUgMTIgKyAxLCBEYXRlVGlt
ZUZpZWxkRWxlbWVudDo6RGlzcGF0Y2hOb0V2ZW50KTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIERhdGVUaW1lRmllbGRFbGVtZW50OjpIb3VyMjM6CisgICAgICAgICAgICBmaWVs
ZC0+c2V0VmFsdWVBc0ludGVnZXIoZGF0ZS5ob3VyKCksIERhdGVUaW1lRmllbGRFbGVtZW50OjpE
aXNwYXRjaE5vRXZlbnQpOworICAgICAgICBjYXNlIERhdGVUaW1lRmllbGRFbGVtZW50OjpIb3Vy
MjQ6CisgICAgICAgICAgICBmaWVsZC0+c2V0VmFsdWVBc0ludGVnZXIoZGF0ZS5ob3VyKCkgKyAx
LCBEYXRlVGltZUZpZWxkRWxlbWVudDo6RGlzcGF0Y2hOb0V2ZW50KTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIERhdGVUaW1lRmllbGRFbGVtZW50OjpNaW51dGU6CisgICAgICAg
ICAgICBmaWVsZC0+c2V0VmFsdWVBc0ludGVnZXIoZGF0ZS5taW51dGUoKSwgRGF0ZVRpbWVGaWVs
ZEVsZW1lbnQ6OkRpc3BhdGNoTm9FdmVudCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBEYXRlVGltZUZpZWxkRWxlbWVudDo6TWlsbGlzZWNvbmQ6CisgICAgICAgICAgICBmaWVs
ZC0+c2V0VmFsdWVBc0ludGVnZXIoZGF0ZS5taWxsaXNlY29uZCgpLCBEYXRlVGltZUZpZWxkRWxl
bWVudDo6RGlzcGF0Y2hOb0V2ZW50KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IERhdGVUaW1lRmllbGRFbGVtZW50OjpQZXJpb2Q6CisgICAgICAgICAgICBmaWVsZC0+c2V0VmFs
dWVBc0ludGVnZXIoZGF0ZS5ob3VyKCkgPj0gMTIgPyAxIDogMCwgRGF0ZVRpbWVGaWVsZEVsZW1l
bnQ6OkRpc3BhdGNoTm9FdmVudCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBE
YXRlVGltZUZpZWxkRWxlbWVudDo6U2Vjb25kOgorICAgICAgICAgICAgZmllbGQtPnNldFZhbHVl
QXNJbnRlZ2VyKGRhdGUuc2Vjb25kKCksIERhdGVUaW1lRmllbGRFbGVtZW50OjpEaXNwYXRjaE5v
RXZlbnQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBEYXRl
VGltZUVkaXRFbGVtZW50OjpzZXRWYWx1ZUFzRW1wdHkoKQoreworICAgIGZvciAoaW50IGZpZWxk
SW5kZXggPSAwOyBmaWVsZEluZGV4IDwgbV9udW1iZXJPZkZpZWxkczsgKytmaWVsZEluZGV4KQor
ICAgICAgICBmaWVsZEF0KGZpZWxkSW5kZXgpLT5zZXRWYWx1ZUFzRW1wdHkoRGF0ZVRpbWVGaWVs
ZEVsZW1lbnQ6OkRpc3BhdGNoTm9FdmVudCk7Cit9CisKK3ZvaWQgRGF0ZVRpbWVFZGl0RWxlbWVu
dDo6c3BpbkJ1dHRvblN0ZXBEb3duKCkKK3sKKyAgICBpZiAoRGF0ZVRpbWVGaWVsZEVsZW1lbnQq
IGNvbnN0IGZvY3VzRmllbGQgPSBmaWVsZEF0KG1fZm9jdXNGaWVsZEluZGV4KSkKKyAgICAgICAg
Zm9jdXNGaWVsZC0+c3RlcERvd24oKTsKK30KKwordm9pZCBEYXRlVGltZUVkaXRFbGVtZW50Ojpz
cGluQnV0dG9uU3RlcFVwKCkKK3sKKyAgICBpZiAoRGF0ZVRpbWVGaWVsZEVsZW1lbnQqIGNvbnN0
IGZvY3VzRmllbGQgPSBmaWVsZEF0KG1fZm9jdXNGaWVsZEluZGV4KSkKKyAgICAgICAgZm9jdXNG
aWVsZC0+c3RlcFVwKCk7Cit9CisKK2RvdWJsZSBEYXRlVGltZUVkaXRFbGVtZW50Ojp2YWx1ZUFz
RG91YmxlKCkgY29uc3QKK3sKKyAgICBkb3VibGUgdmFsdWUgPSAwOworCisgICAgZm9yIChpbnQg
ZmllbGRJbmRleCA9IDA7IGZpZWxkSW5kZXggPCBtX251bWJlck9mRmllbGRzOyArK2ZpZWxkSW5k
ZXgpIHsKKyAgICAgICAgY29uc3QgRGF0ZVRpbWVGaWVsZEVsZW1lbnQqIGNvbnN0IGZpZWxkID0g
ZmllbGRBdChmaWVsZEluZGV4KTsKKyAgICAgICAgaWYgKCFmaWVsZC0+aGFzVmFsdWUoKSkKKyAg
ICAgICAgICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OnF1aWV0X05hTigp
OworICAgICAgICBzd2l0Y2ggKGZpZWxkLT5maWVsZFR5cGUoKSkgeworICAgICAgICBjYXNlIERh
dGVUaW1lRmllbGRFbGVtZW50OjpIb3VyMTE6CisgICAgICAgIGNhc2UgRGF0ZVRpbWVGaWVsZEVs
ZW1lbnQ6OkhvdXIxMjoKKyAgICAgICAgY2FzZSBEYXRlVGltZUZpZWxkRWxlbWVudDo6SG91cjIz
OgorICAgICAgICBjYXNlIERhdGVUaW1lRmllbGRFbGVtZW50OjpIb3VyMjQ6CisgICAgICAgICAg
ICB2YWx1ZSArPSBmaWVsZC0+dmFsdWVBc0ludGVnZXIoKSAqIGhvdXJJbk1pbGxpc2Vjb25kOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRGF0ZVRpbWVGaWVsZEVsZW1lbnQ6Ok1p
bGxpc2Vjb25kOgorICAgICAgICAgICAgdmFsdWUgKz0gZmllbGQtPnZhbHVlQXNJbnRlZ2VyKCk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBEYXRlVGltZUZpZWxkRWxlbWVudDo6
TWludXRlOgorICAgICAgICAgICAgdmFsdWUgKz0gZmllbGQtPnZhbHVlQXNJbnRlZ2VyKCkgKiBt
aW51dGVJbk1pbGxpc2Vjb25kOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRGF0
ZVRpbWVGaWVsZEVsZW1lbnQ6OlBlcmlvZDoKKyAgICAgICAgICAgIHZhbHVlICs9IGZpZWxkLT52
YWx1ZUFzSW50ZWdlcigpICogMTIgKiBob3VySW5NaWxsaXNlY29uZDsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIERhdGVUaW1lRmllbGRFbGVtZW50OjpTZWNvbmQ6CisgICAgICAg
ICAgICB2YWx1ZSArPSBmaWVsZC0+dmFsdWVBc0ludGVnZXIoKSAqIHNlY29uZEluTWlsbGlzZWNv
bmQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHZhbHVl
OworfQorCitEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQ6OlJhbmdlOjpSYW5nZShpbnQgbWlu
aW11bSwgaW50IG1heGltdW0pCisgICAgOiBtYXhpbXVtKG1heGltdW0pCisgICAgLCBtaW5pbXVt
KG1pbmltdW0pCit7CisgICAgQVNTRVJUKG1pbmltdW0gPD0gbWF4aW11bSk7Cit9CisKK2ludCBE
YXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQ6OlJhbmdlOjplbnN1cmVJblJhbmdlKGludCB2YWx1
ZSkgY29uc3QKK3sKKyAgICByZXR1cm4gc3RkOjptaW4oc3RkOjptYXgodmFsdWUsIG1pbmltdW0p
LCBtYXhpbXVtKTsKK30KKworRGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50OjpEYXRlVGltZU51
bWVyaWNGaWVsZEVsZW1lbnQoRG9jdW1lbnQqIGRvY3VtZW50LCBGaWVsZFR5cGUgZmllbGRUeXBl
LCBGaWVsZEV2ZW50SGFuZGxlciYgZmllbGRFdmVudEhhbmRsZXIpCisgICAgOiBEYXRlVGltZUZp
ZWxkRWxlbWVudChkb2N1bWVudCwgZmllbGRUeXBlLCBmaWVsZEV2ZW50SGFuZGxlcikKKyAgICAs
IG1fbGFzdFNldENoYXJUaW1lKDApCisgICAgLCBtX3JhbmdlKHJhbmdlT2ZGaWVsZFR5cGUoZmll
bGRUeXBlKSkKKyAgICAsIG1fdmFsdWUoMCkKKyAgICAsIG1faGFzVmFsdWUoZmFsc2UpCit7Cit9
CisKK1Bhc3NSZWZQdHI8RGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50PiBEYXRlVGltZU51bWVy
aWNGaWVsZEVsZW1lbnQ6OmNyZWF0ZShEb2N1bWVudCogZG9jdW1lbnQsIEZpZWxkVHlwZSBmaWVs
ZFR5cGUsIEZpZWxkRXZlbnRIYW5kbGVyJiBmaWVsZEV2ZW50SGFuZGxlcikKK3sKKyAgICBSZWZQ
dHI8RGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50PiBmaWVsZCA9IGFkb3B0UmVmKG5ldyBEYXRl
VGltZU51bWVyaWNGaWVsZEVsZW1lbnQoZG9jdW1lbnQsIGZpZWxkVHlwZSwgZmllbGRFdmVudEhh
bmRsZXIpKTsKKyAgICBmaWVsZC0+c2V0U2hhZG93UHNldWRvSWQoZmllbGQtPnNoYWRvd1BzZXVk
b0lkKCkpOworICAgIGZpZWxkLT5hcHBlbmRDaGlsZChUZXh0OjpjcmVhdGUoZG9jdW1lbnQsIGZp
ZWxkLT52aXNpYmxlVmFsdWUoKSkpOworICAgIHJldHVybiBmaWVsZDsKK30KKwordm9pZCBEYXRl
VGltZU51bWVyaWNGaWVsZEVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2ZW50
KQoreworICAgIGlmIChldmVudC0+aXNLZXlib2FyZEV2ZW50KCkgJiYgZXZlbnQtPnR5cGUoKSA9
PSBldmVudE5hbWVzKCkua2V5ZG93bkV2ZW50KSB7CisgICAgICAgIEtleWJvYXJkRXZlbnQqIGNv
bnN0IGtleWJvYXJkRXZlbnQgPSBzdGF0aWNfY2FzdDxLZXlib2FyZEV2ZW50Kj4oZXZlbnQpOwor
ICAgICAgICBjb25zdCBpbnQgZGlnaXQgPSBrZXlib2FyZEV2ZW50LT5rZXlDb2RlKCkgLSAnMCc7
CisgICAgICAgIGlmIChkaWdpdCA+PSAwICYmIGRpZ2l0IDw9IDkpIHsKKyAgICAgICAgICAgIGtl
eWJvYXJkRXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7CisgICAgICAgICAgICBtX3ZhbHVlID0g
ZW5zdXJlSW5SYW5nZShpc0NvbnRpbnVvc0tleWJvYXJkRXZlbnQoa2V5Ym9hcmRFdmVudCkgPyBt
X3ZhbHVlICogMTAgKyBkaWdpdCA6IGRpZ2l0KTsKKyAgICAgICAgICAgIG1fbGFzdFNldENoYXJU
aW1lID0gZXZlbnQtPnRpbWVTdGFtcCgpOworICAgICAgICAgICAgbV9oYXNWYWx1ZSA9IHRydWU7
CisgICAgICAgICAgICB1cGRhdGVWaXNpYmxlVmFsdWUoRGlzcGF0Y2hFdmVudCk7CisgICAgICAg
ICAgICBpZiAobV92YWx1ZSAqIDEwID4gbV9yYW5nZS5tYXhpbXVtICYmIG1fZmllbGRFdmVudEhh
bmRsZXIpCisgICAgICAgICAgICAgICAgbV9maWVsZEV2ZW50SGFuZGxlci0+bW92ZVRvTmV4dEZp
ZWxkKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisKKyAgICBEYXRl
VGltZUZpZWxkRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihldmVudCk7Cit9CisKK2Jvb2wg
RGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50Ojppc0NvbnRpbnVvc0tleWJvYXJkRXZlbnQoS2V5
Ym9hcmRFdmVudCogZXZlbnQpIGNvbnN0Cit7CisgICAgY29uc3QgdW5zaWduZWQgQ29udGludW91
c0tleWJvYXJkRXZlbnRUaHJlc2hvbGQgPSA3MDA7CisgICAgcmV0dXJuIG1faGFzVmFsdWUgJiYg
ZXZlbnQtPnRpbWVTdGFtcCgpIC0gbV9sYXN0U2V0Q2hhclRpbWUgPCBDb250aW51b3VzS2V5Ym9h
cmRFdmVudFRocmVzaG9sZDsKK30KKwordm9pZCBEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQ6
OnNldFZhbHVlQXNFbXB0eShFdmVudEJlaGF2aW9yIGV2ZW50QmVoYXZpb3IpCit7CisgICAgbV92
YWx1ZSA9IDA7CisgICAgbV9oYXNWYWx1ZSA9IGZhbHNlOworICAgIHVwZGF0ZVZpc2libGVWYWx1
ZShldmVudEJlaGF2aW9yKTsKK30KKworRGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50OjpSYW5n
ZSBEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQ6OnJhbmdlT2ZGaWVsZFR5cGUoRmllbGRUeXBl
IGZpZWxkVHlwZSkKK3sKKyAgICBzd2l0Y2ggKGZpZWxkVHlwZSkgeworICAgIGNhc2UgRGF0ZVRp
bWVGaWVsZEVsZW1lbnQ6OkhvdXIxMToKKyAgICAgICAgcmV0dXJuIFJhbmdlKDAsIDExKTsKKyAg
ICBjYXNlIERhdGVUaW1lRmllbGRFbGVtZW50OjpIb3VyMTI6CisgICAgICAgIHJldHVybiBSYW5n
ZSgxLCAxMik7CisgICAgY2FzZSBEYXRlVGltZUZpZWxkRWxlbWVudDo6SG91cjIzOgorICAgICAg
ICByZXR1cm4gUmFuZ2UoMCwgMjMpOworICAgIGNhc2UgRGF0ZVRpbWVGaWVsZEVsZW1lbnQ6Okhv
dXIyNDoKKyAgICAgICAgcmV0dXJuIFJhbmdlKDEsIDI0KTsKKyAgICBjYXNlIERhdGVUaW1lRmll
bGRFbGVtZW50OjpNaWxsaXNlY29uZDoKKyAgICAgICAgcmV0dXJuIFJhbmdlKDAsIDk5OSk7Cisg
ICAgY2FzZSBEYXRlVGltZUZpZWxkRWxlbWVudDo6TWludXRlOgorICAgICAgICByZXR1cm4gUmFu
Z2UoMCwgNTkpOworICAgIGNhc2UgRGF0ZVRpbWVGaWVsZEVsZW1lbnQ6OlNlY29uZDoKKyAgICAg
ICAgcmV0dXJuIFJhbmdlKDAsIDU5KTsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIFJhbmdlKDAsIDEpOworICAgIH0KK30KKwordm9p
ZCBEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQ6OnNldFZhbHVlQXNJbnRlZ2VyKGludCB2YWx1
ZSwgRXZlbnRCZWhhdmlvciBldmVudEJlaGF2aW9yKQoreworICAgIG1fdmFsdWUgPSBlbnN1cmVJ
blJhbmdlKHZhbHVlKTsKKyAgICBtX2hhc1ZhbHVlID0gdHJ1ZTsKKyAgICB1cGRhdGVWaXNpYmxl
VmFsdWUoZXZlbnRCZWhhdmlvcik7Cit9CisKK3ZvaWQgRGF0ZVRpbWVOdW1lcmljRmllbGRFbGVt
ZW50OjpzdGVwRG93bigpCit7CisgICAgaWYgKG1faGFzVmFsdWUpCisgICAgICAgIG1fdmFsdWUg
PSBtX3ZhbHVlID09IG1fcmFuZ2UubWluaW11bSA/IG1fcmFuZ2UubWF4aW11bSA6IGVuc3VyZUlu
UmFuZ2UobV92YWx1ZSAtIDEpOworICAgIGVsc2UKKyAgICAgICAgbV92YWx1ZSA9IG1fcmFuZ2Uu
bWF4aW11bTsKKworICAgIG1faGFzVmFsdWUgPSB0cnVlOworICAgIHVwZGF0ZVZpc2libGVWYWx1
ZShEaXNwYXRjaEV2ZW50KTsKK30KKwordm9pZCBEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQ6
OnN0ZXBVcCgpCit7CisgICAgaWYgKG1faGFzVmFsdWUpCisgICAgICAgIG1fdmFsdWUgPSBtX3Zh
bHVlID09IG1fcmFuZ2UubWF4aW11bSA/IG1fcmFuZ2UubWluaW11bSA6IGVuc3VyZUluUmFuZ2Uo
bV92YWx1ZSArIDEpOworICAgIGVsc2UKKyAgICAgICAgbV92YWx1ZSA9IG1fcmFuZ2UubWluaW11
bTsKKworICAgIG1faGFzVmFsdWUgPSB0cnVlOworICAgIHVwZGF0ZVZpc2libGVWYWx1ZShEaXNw
YXRjaEV2ZW50KTsKK30KKworU3RyaW5nIERhdGVUaW1lTnVtZXJpY0ZpZWxkRWxlbWVudDo6dmFs
dWUoKSBjb25zdAoreworICAgIGlmICghbV9oYXNWYWx1ZSkKKyAgICAgICAgcmV0dXJuIGVtcHR5
U3RyaW5nKCk7CisKKyAgICBpZiAobV9yYW5nZS5tYXhpbXVtID4gOTk5KQorICAgICAgICByZXR1
cm4gU3RyaW5nOjpudW1iZXIobV92YWx1ZSk7CisKKyAgICBpZiAobV9yYW5nZS5tYXhpbXVtID4g
OTkpCisgICAgICAgIHJldHVybiBTdHJpbmc6OmZvcm1hdCgiJTAzZCIsIG1fdmFsdWUpOworCisg
ICAgcmV0dXJuIFN0cmluZzo6Zm9ybWF0KCIlMDJkIiwgbV92YWx1ZSk7Cit9CisKK2ludCBEYXRl
VGltZU51bWVyaWNGaWVsZEVsZW1lbnQ6OnZhbHVlQXNJbnRlZ2VyKCkgY29uc3QKK3sKKyAgICBp
ZiAoIW1faGFzVmFsdWUpCisgICAgICAgIHJldHVybiAtMTsKKworICAgIHJldHVybiBmaWVsZFR5
cGUoKSA9PSBIb3VyMTIgfHwgZmllbGRUeXBlKCkgPT0gSG91cjI0ID8gbV92YWx1ZSAtIDEgOiBt
X3ZhbHVlOworfQorCitTdHJpbmcgRGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50Ojp2aXNpYmxl
VmFsdWUoKSBjb25zdAoreworICAgIGlmIChtX2hhc1ZhbHVlKQorICAgICAgICByZXR1cm4gdmFs
dWUoKTsKKworICAgIC8vIE5vdGU6IFRoZXJlIGFyZSA2IGRhc2hzIGZvciBIVE1MNSBtYXhpbXVt
IHllYXIgMjc1NzYwLgorICAgIGNvbnN0IGNoYXIgZGFzaHNbXSA9ICItLS0tLS0iOworICAgIHJl
dHVybiBTdHJpbmcoZGFzaHMsIHN0ZDo6bWluKHNpemVvZihkYXNocyksIHN0ZDo6bWF4KGRpc3Bs
YXlTaXplT2ZOdW1iZXIobV9yYW5nZS5tYXhpbXVtKSwgZGlzcGxheVNpemVPZk51bWJlcihtX3Jh
bmdlLm1pbmltdW0pKSkpOworfQorCitEYXRlVGltZVN5bWJvbGljRmllbGRFbGVtZW50OjpEYXRl
VGltZVN5bWJvbGljRmllbGRFbGVtZW50KERvY3VtZW50KiBkb2N1bWVudCwgRmllbGRUeXBlIGZp
ZWxkVHlwZSwgRmllbGRFdmVudEhhbmRsZXImIGZpZWxkRXZlbnRIYW5kbGVyLCBjb25zdCBWZWN0
b3I8U3RyaW5nPiYgc3ltYm9scykKKyAgICA6IERhdGVUaW1lRmllbGRFbGVtZW50KGRvY3VtZW50
LCBmaWVsZFR5cGUsIGZpZWxkRXZlbnRIYW5kbGVyKQorICAgICwgbV9zZWxlY3RlZEluZGV4KC0x
KQorICAgICwgbV9zeW1ib2xzKHN5bWJvbHMpCit7CisgICAgQVNTRVJUKCFzeW1ib2xzLmlzRW1w
dHkoKSk7Cit9CisKK1Bhc3NSZWZQdHI8RGF0ZVRpbWVTeW1ib2xpY0ZpZWxkRWxlbWVudD4gRGF0
ZVRpbWVTeW1ib2xpY0ZpZWxkRWxlbWVudDo6Y3JlYXRlKERvY3VtZW50KiBkb2N1bWVudCwgRmll
bGRUeXBlIGZpZWxkVHlwZSwgRmllbGRFdmVudEhhbmRsZXImIGZpZWxkRXZlbnRIYW5kbGVyKQor
eworICAgIFJlZlB0cjxEYXRlVGltZVN5bWJvbGljRmllbGRFbGVtZW50PiBmaWVsZCA9IGFkb3B0
UmVmKG5ldyBEYXRlVGltZVN5bWJvbGljRmllbGRFbGVtZW50KGRvY3VtZW50LCBmaWVsZFR5cGUs
IGZpZWxkRXZlbnRIYW5kbGVyLCBwZXJpb2RMYWJlbHMoKSkpOworICAgIGZpZWxkLT5zZXRTaGFk
b3dQc2V1ZG9JZChmaWVsZC0+c2hhZG93UHNldWRvSWQoKSk7CisgICAgZmllbGQtPmFwcGVuZENo
aWxkKFRleHQ6OmNyZWF0ZShkb2N1bWVudCwgZmllbGQtPnZpc2libGVWYWx1ZSgpKSk7CisgICAg
cmV0dXJuIGZpZWxkOworfQorCit2b2lkIERhdGVUaW1lU3ltYm9saWNGaWVsZEVsZW1lbnQ6OmRl
ZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2ZW50KQoreworICAgIGlmIChldmVudC0+aXNLZXli
b2FyZEV2ZW50KCkgJiYgZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkua2V5cHJlc3NFdmVu
dCkgeworICAgICAgICBLZXlib2FyZEV2ZW50KiBrZXlib2FyZEV2ZW50ID0gc3RhdGljX2Nhc3Q8
S2V5Ym9hcmRFdmVudCo+KGV2ZW50KTsKKyAgICAgICAgY29uc3QgaW50IHJhd0NoYXJDb2RlID0g
a2V5Ym9hcmRFdmVudC0+Y2hhckNvZGUoKTsKKyAgICAgICAgY29uc3QgaW50IGNoYXJDb2RlID0g
cmF3Q2hhckNvZGUgPj0gJ2EnICYmIHJhd0NoYXJDb2RlIDw9ICd6JyA/IHJhd0NoYXJDb2RlICsg
J0EnIC0gJ2EnIDogcmF3Q2hhckNvZGU7CisgICAgICAgIGlmIChjaGFyQ29kZSA+PSAnQScgJiYg
Y2hhckNvZGUgPD0gJ1onKSB7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gMDsg
aW5kZXggPCBtX3N5bWJvbHMuc2l6ZSgpOyArK2luZGV4KSB7CisgICAgICAgICAgICAgICAgaWYg
KG1fc3ltYm9sc1tpbmRleF1bMF0gPT0gY2hhckNvZGUpIHsKKyAgICAgICAgICAgICAgICAgICAg
ZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7CisgICAgICAgICAgICAgICAgICAgIHNldFZhbHVl
QXNJbnRlZ2VyKGluZGV4LCBEaXNwYXRjaEV2ZW50KTsKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0K
KworICAgIERhdGVUaW1lRmllbGRFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKGV2ZW50KTsK
K30KKwordm9pZCBEYXRlVGltZVN5bWJvbGljRmllbGRFbGVtZW50OjpzZXRWYWx1ZUFzRW1wdHko
RXZlbnRCZWhhdmlvciBldmVudEJlaGF2aW9yKQoreworICAgIG1fc2VsZWN0ZWRJbmRleCA9IElu
dmFsaWRJbmRleDsKKyAgICB1cGRhdGVWaXNpYmxlVmFsdWUoZXZlbnRCZWhhdmlvcik7Cit9CisK
K3ZvaWQgRGF0ZVRpbWVTeW1ib2xpY0ZpZWxkRWxlbWVudDo6c2V0VmFsdWVBc0ludGVnZXIoaW50
IG5ld1NlbGVjdGVkSW5kZXgsIEV2ZW50QmVoYXZpb3IgZXZlbnRCZWhhdmlvcikKK3sKKyAgICBt
X3NlbGVjdGVkSW5kZXggPSBzdGQ6Om1heCgwLCBzdGQ6Om1pbihuZXdTZWxlY3RlZEluZGV4LCBz
dGF0aWNfY2FzdDxpbnQ+KG1fc3ltYm9scy5zaXplKCkgLSAxKSkpOworICAgIHVwZGF0ZVZpc2li
bGVWYWx1ZShldmVudEJlaGF2aW9yKTsKK30KKwordm9pZCBEYXRlVGltZVN5bWJvbGljRmllbGRF
bGVtZW50OjpzdGVwRG93bigpCit7CisgICAgY29uc3QgaW50IHNpemUgPSBtX3N5bWJvbHMuc2l6
ZSgpOworICAgIG1fc2VsZWN0ZWRJbmRleCA9IGhhc1ZhbHVlKCkgPyAobV9zZWxlY3RlZEluZGV4
ICsgc2l6ZSAtIDEpICUgc2l6ZSA6IHNpemUgLSAxOworICAgIHVwZGF0ZVZpc2libGVWYWx1ZShE
aXNwYXRjaEV2ZW50KTsKK30KKwordm9pZCBEYXRlVGltZVN5bWJvbGljRmllbGRFbGVtZW50Ojpz
dGVwVXAoKQoreworICAgIG1fc2VsZWN0ZWRJbmRleCA9IGhhc1ZhbHVlKCkgPyAobV9zZWxlY3Rl
ZEluZGV4ICsgMSkgJSBtX3N5bWJvbHMuc2l6ZSgpIDogMDsKKyAgICB1cGRhdGVWaXNpYmxlVmFs
dWUoRGlzcGF0Y2hFdmVudCk7Cit9CisKK1N0cmluZyBEYXRlVGltZVN5bWJvbGljRmllbGRFbGVt
ZW50Ojp2YWx1ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGhhc1ZhbHVlKCkgPyBtX3N5bWJvbHNb
bV9zZWxlY3RlZEluZGV4XSA6IGVtcHR5U3RyaW5nKCk7Cit9CisKK2ludCBEYXRlVGltZVN5bWJv
bGljRmllbGRFbGVtZW50Ojp2YWx1ZUFzSW50ZWdlcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1f
c2VsZWN0ZWRJbmRleDsKK30KKworU3RyaW5nIERhdGVUaW1lU3ltYm9saWNGaWVsZEVsZW1lbnQ6
OnZpc2libGVWYWx1ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGhhc1ZhbHVlKCkgPyBtX3N5bWJv
bHNbbV9zZWxlY3RlZEluZGV4XSA6ICItLSI7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
KworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9EYXRlVGlt
ZUVkaXRFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9EYXRlVGltZUVkaXRF
bGVtZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uYmQ4Mjk1NTQ4YTA5ZmJjYmU3ZWZlN2M1NzhmMjY1YzhmMDM1
MTAyYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0RhdGVU
aW1lRWRpdEVsZW1lbnQuaApAQCAtMCwwICsxLDIzNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAg
ICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRz
CisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICog
TElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
CisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgRGF0ZVRpbWVFZGl0RWxl
bWVudF9oCisjZGVmaW5lIERhdGVUaW1lRWRpdEVsZW1lbnRfaAorCisjaWYgRU5BQkxFKFRJTUVf
SU5QVVRfRklFTERTKQorCisjaW5jbHVkZSAiSFRNTERpdkVsZW1lbnQuaCIKKyNpbmNsdWRlICJU
ZXh0Q29udHJvbElubmVyRWxlbWVudHMuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFz
cyBEYXRlQ29tcG9uZW50czsKK2NsYXNzIERhdGVUaW1lRWRpdExheW91dEJ1aWxkZXI7CitjbGFz
cyBLZXlib2FyZEV2ZW50OworY2xhc3MgTW91c2VFdmVudDsKK2NsYXNzIFN0ZXBSYW5nZTsKKwor
Y2xhc3MgRGF0ZVRpbWVGaWVsZEVsZW1lbnQgOiBwdWJsaWMgSFRNTEVsZW1lbnQgeworICAgIFdU
Rl9NQUtFX05PTkNPUFlBQkxFKERhdGVUaW1lRmllbGRFbGVtZW50KTsKKworcHVibGljOgorICAg
IGVudW0gRXZlbnRCZWhhdmlvciB7CisgICAgICAgIERpc3BhdGNoTm9FdmVudCwKKyAgICAgICAg
RGlzcGF0Y2hFdmVudCwKKyAgICB9OworCisgICAgLy8gRmllbGRFdmVudEhhbmRsZXIgaW1wbGVt
ZW50ZXIgbXVzdCBjYWxsIHJlbW92ZUV2ZW50SGFuZGxlciB3aGVuCisgICAgLy8gaXQgZG9lc24n
dCBoYW5kbGUgZXZlbnQsIGUuZy4gYXQgZGVzdHJ1Y3Rpb24uCisgICAgY2xhc3MgRmllbGRFdmVu
dEhhbmRsZXIgeworICAgIHB1YmxpYzoKKyAgICAgICAgdmlydHVhbCB+RmllbGRFdmVudEhhbmRs
ZXIoKSB7IH0KKyAgICAgICAgdmlydHVhbCB2b2lkIGZpZWxkVmFsdWVDaGFuZ2VkKCkgPSAwOwor
ICAgICAgICB2aXJ0dWFsIHZvaWQgbW92ZVRvTmV4dEZpZWxkKCkgPSAwOworICAgIH07CisKKyAg
ICBlbnVtIEZpZWxkVHlwZSB7CisgICAgICAgIEhvdXIxMSwKKyAgICAgICAgSG91cjEyLAorICAg
ICAgICBIb3VyMjMsCisgICAgICAgIEhvdXIyNCwKKyAgICAgICAgTWludXRlLAorICAgICAgICBT
ZWNvbmQsCisgICAgICAgIE1pbGxpc2Vjb25kLAorICAgICAgICBQZXJpb2QsCisgICAgfTsKKwor
ICAgIHZpcnR1YWwgdm9pZCBkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50Kik7CisgICAgdm9pZCBk
aXNhYmxlKCk7CisgICAgdmlydHVhbCBib29sIGRpc2FibGVkKCkgY29uc3QgT1ZFUlJJREU7Cisg
ICAgRmllbGRUeXBlIGZpZWxkVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fZmllbGRUeXBlOyB9Cisg
ICAgdmlydHVhbCBib29sIGhhc1ZhbHVlKCkgY29uc3QgPSAwOworICAgIHZvaWQgcmVtb3ZlRXZl
bnRIYW5kbGVyKCkgeyBtX2ZpZWxkRXZlbnRIYW5kbGVyID0gMDsgfQorICAgIHZpcnR1YWwgdm9p
ZCBzZXRWYWx1ZUFzRW1wdHkoRXZlbnRCZWhhdmlvcikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBz
ZXRWYWx1ZUFzSW50ZWdlcihpbnQsIEV2ZW50QmVoYXZpb3IpID0gMDsKKyAgICB2aXJ0dWFsIHZv
aWQgc3RlcERvd24oKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHN0ZXBVcCgpID0gMDsKKyAgICB2
aXJ0dWFsIFN0cmluZyB2YWx1ZSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGludCB2YWx1ZUFz
SW50ZWdlcigpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIFN0cmluZyB2aXNpYmxlVmFsdWUoKSBj
b25zdCA9IDA7CisKK3Byb3RlY3RlZDoKKyAgICBEYXRlVGltZUZpZWxkRWxlbWVudChEb2N1bWVu
dCosIEZpZWxkVHlwZSwgRmllbGRFdmVudEhhbmRsZXImKTsKKworICAgIGNvbnN0IEF0b21pY1N0
cmluZyYgc2hhZG93UHNldWRvSWQoKSBjb25zdDsKKyAgICB2b2lkIHVwZGF0ZVZpc2libGVWYWx1
ZShFdmVudEJlaGF2aW9yKTsKKworICAgIEZpZWxkRXZlbnRIYW5kbGVyKiBtX2ZpZWxkRXZlbnRI
YW5kbGVyOworICAgIGNvbnN0IEZpZWxkVHlwZSBtX2ZpZWxkVHlwZTsKK307CisKK2NsYXNzIERh
dGVUaW1lTnVtZXJpY0ZpZWxkRWxlbWVudCA6IHB1YmxpYyBEYXRlVGltZUZpZWxkRWxlbWVudCB7
CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50KTsK
KworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPERhdGVUaW1lTnVtZXJpY0ZpZWxkRWxl
bWVudD4gY3JlYXRlKERvY3VtZW50KiwgRmllbGRUeXBlLCBGaWVsZEV2ZW50SGFuZGxlciYpOwor
Citwcml2YXRlOgorICAgIHN0cnVjdCBSYW5nZSB7CisgICAgICAgIFJhbmdlKGludCBtaW5pbXVt
LCBpbnQgbWF4aW11bSk7CisgICAgICAgIGludCBlbnN1cmVJblJhbmdlKGludCkgY29uc3Q7CisK
KyAgICAgICAgaW50IG1heGltdW07CisgICAgICAgIGludCBtaW5pbXVtOworICAgIH07CisKKyAg
ICBEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQoRG9jdW1lbnQqIGRvY3VtZW50LCBGaWVsZFR5
cGUsIEZpZWxkRXZlbnRIYW5kbGVyJik7CisKKyAgICBpbnQgZW5zdXJlSW5SYW5nZShpbnQgdmFs
dWUpIGNvbnN0IHsgcmV0dXJuIG1fcmFuZ2UuZW5zdXJlSW5SYW5nZSh2YWx1ZSk7IH0KKyAgICBi
b29sIGlzQ29udGludW9zS2V5Ym9hcmRFdmVudChLZXlib2FyZEV2ZW50KikgY29uc3Q7CisgICAg
c3RhdGljIFJhbmdlIHJhbmdlT2ZGaWVsZFR5cGUoRmllbGRUeXBlKTsKKworICAgIC8vIERhdGVU
aW1lRmllbGRFbGVtZW50IGZ1bmN0aW9ucy4KKyAgICB2aXJ0dWFsIHZvaWQgZGVmYXVsdEV2ZW50
SGFuZGxlcihFdmVudCopIE9WRVJSSURFIEZJTkFMOworICAgIHZpcnR1YWwgYm9vbCBoYXNWYWx1
ZSgpIGNvbnN0IHsgcmV0dXJuIG1faGFzVmFsdWU7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0VmFs
dWVBc0VtcHR5KEV2ZW50QmVoYXZpb3IpIE9WRVJSSURFIEZJTkFMOworICAgIHZpcnR1YWwgdm9p
ZCBzZXRWYWx1ZUFzSW50ZWdlcihpbnQsIEV2ZW50QmVoYXZpb3IpIE9WRVJSSURFIEZJTkFMOwor
ICAgIHZpcnR1YWwgdm9pZCBzdGVwRG93bigpIE9WRVJSSURFIEZJTkFMOworICAgIHZpcnR1YWwg
dm9pZCBzdGVwVXAoKSBPVkVSUklERSBGSU5BTDsKKyAgICB2aXJ0dWFsIFN0cmluZyB2YWx1ZSgp
IGNvbnN0IE9WRVJSSURFIEZJTkFMOworICAgIHZpcnR1YWwgaW50IHZhbHVlQXNJbnRlZ2VyKCkg
Y29uc3QgT1ZFUlJJREUgRklOQUw7CisgICAgdmlydHVhbCBTdHJpbmcgdmlzaWJsZVZhbHVlKCkg
Y29uc3QgT1ZFUlJJREUgRklOQUw7CisKKyAgICBET01UaW1lU3RhbXAgbV9sYXN0U2V0Q2hhclRp
bWU7CisgICAgY29uc3QgUmFuZ2UgbV9yYW5nZTsKKyAgICBpbnQgbV92YWx1ZTsKKyAgICBib29s
IG1faGFzVmFsdWU7Cit9OworCitjbGFzcyBEYXRlVGltZVN5bWJvbGljRmllbGRFbGVtZW50IDog
cHVibGljIERhdGVUaW1lRmllbGRFbGVtZW50IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShE
YXRlVGltZVN5bWJvbGljRmllbGRFbGVtZW50KTsKKworcHVibGljOgorICAgIHN0YXRpYyBQYXNz
UmVmUHRyPERhdGVUaW1lU3ltYm9saWNGaWVsZEVsZW1lbnQ+IGNyZWF0ZShEb2N1bWVudCosIEZp
ZWxkVHlwZSwgRmllbGRFdmVudEhhbmRsZXImKTsKKworcHJpdmF0ZToKKyAgICBzdGF0aWMgY29u
c3QgaW50IEludmFsaWRJbmRleCA9IC0xOworCisgICAgRGF0ZVRpbWVTeW1ib2xpY0ZpZWxkRWxl
bWVudChEb2N1bWVudCogZG9jdW1lbnQsIEZpZWxkVHlwZSwgRmllbGRFdmVudEhhbmRsZXImLCBj
b25zdCBWZWN0b3I8U3RyaW5nPiYpOworCisgICAgLy8gRGF0ZVRpbWVGaWVsZEVsZW1lbnQgZnVu
Y3Rpb25zLgorICAgIHZpcnR1YWwgdm9pZCBkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KikgT1ZF
UlJJREUgRklOQUw7CisgICAgdmlydHVhbCBib29sIGhhc1ZhbHVlKCkgY29uc3QgeyByZXR1cm4g
bV9zZWxlY3RlZEluZGV4ID49IDA7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0VmFsdWVBc0VtcHR5
KEV2ZW50QmVoYXZpb3IpIE9WRVJSSURFIEZJTkFMOworICAgIHZpcnR1YWwgdm9pZCBzZXRWYWx1
ZUFzSW50ZWdlcihpbnQsIEV2ZW50QmVoYXZpb3IpIE9WRVJSSURFIEZJTkFMOworICAgIHZpcnR1
YWwgdm9pZCBzdGVwRG93bigpIE9WRVJSSURFIEZJTkFMOworICAgIHZpcnR1YWwgdm9pZCBzdGVw
VXAoKSBPVkVSUklERSBGSU5BTDsKKyAgICB2aXJ0dWFsIFN0cmluZyB2YWx1ZSgpIGNvbnN0IE9W
RVJSSURFIEZJTkFMOworICAgIHZpcnR1YWwgaW50IHZhbHVlQXNJbnRlZ2VyKCkgY29uc3QgT1ZF
UlJJREUgRklOQUw7CisgICAgdmlydHVhbCBTdHJpbmcgdmlzaWJsZVZhbHVlKCkgY29uc3QgT1ZF
UlJJREUgRklOQUw7CisKKyAgICBpbnQgbV9zZWxlY3RlZEluZGV4OworICAgIFZlY3RvcjxTdHJp
bmc+IG1fc3ltYm9sczsKK307CisKKy8vIERhdGVUaW1lRWRpdEVsZW1lbnQgY2xhc3MgY29udGFp
bnMgbnVtYmVyaWMgZmllbGQgYW5kIHN5bWJvbGMgZmllbGQgZm9yCisvLyByZXByZXNlbnRpbmcg
ZGF0ZSBhbmQgdGltZSwgc3VjaCBhcworLy8gIC0gWWVhciwgTW9udGgsIERheSBPZiBNb250aAor
Ly8gIC0gSG91ciwgTWludXRlLCBTZWNvbmQsIE1pbGxpc2Vjb25kLCBQZXJpb2QKK2NsYXNzIERh
dGVUaW1lRWRpdEVsZW1lbnQgOiBwdWJsaWMgSFRNTERpdkVsZW1lbnQsIHByaXZhdGUgRGF0ZVRp
bWVGaWVsZEVsZW1lbnQ6OkZpZWxkRXZlbnRIYW5kbGVyLCBwcml2YXRlIFNwaW5CdXR0b25FbGVt
ZW50OjpTdGVwQWN0aW9uSGFuZGxlciB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRGF0ZVRp
bWVFZGl0RWxlbWVudCk7CitwdWJsaWM6CisgICAgZnJpZW5kIGNsYXNzIERhdGVUaW1lRWRpdExh
eW91dEJ1aWxkZXI7CisKKyAgICAvLyBFZGl0Q29udHJvbEV2ZW50SGFuZGxlciBpbXBsZW1lbnRl
ciBtdXN0IGNhbGwgcmVtb3ZlRXZlbnRIYW5kbGVyIHdoZW4KKyAgICAvLyBpdCBkb2Vzbid0IGhh
bmRsZSBldmVudCwgZS5nLiBhdCBkZXN0cnVjdGlvbi4KKyAgICBjbGFzcyBFZGl0Q29udHJvbEV2
ZW50SGFuZGxlciB7CisgICAgcHVibGljOgorICAgICAgICB2aXJ0dWFsIH5FZGl0Q29udHJvbEV2
ZW50SGFuZGxlcigpIHsgfQorICAgICAgICB2aXJ0dWFsIHZvaWQgZWRpdENvbnRyb2xWYWx1ZUNo
YW5nZWQoKSA9IDA7CisgICAgfTsKKworICAgIHN0YXRpYyBQYXNzUmVmUHRyPERhdGVUaW1lRWRp
dEVsZW1lbnQ+IGNyZWF0ZShEb2N1bWVudCosIEVkaXRDb250cm9sRXZlbnRIYW5kbGVyJiwgY29u
c3QgU3RlcFJhbmdlJik7CisKKyAgICB2aXJ0dWFsIH5EYXRlVGltZUVkaXRFbGVtZW50KCk7Cisg
ICAgdmlydHVhbCB2b2lkIGRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqKSBPVkVSUklERTsKKyAg
ICB2b2lkIGRpc2FibGVkQXR0cmlidXRlQ2hhbmdlZCgpIHsgZGlzYWJsZSgpOyB9CisgICAgdm9p
ZCByZWFkb25seUF0dHJpYnV0ZUNoYW5nZWQoKSB7IGRpc2FibGUoKTsgfQorICAgIHZvaWQgcmVt
b3ZlRXZlbnRIYW5kbGVyKCkgeyBtX2VkaXRDb250cm9sRXZlbnRIYW5kbGVyID0gMDsgfQorICAg
IHZvaWQgc2V0TGF5b3V0KGNvbnN0IFN0ZXBSYW5nZSYpOworICAgIHZvaWQgc2V0VmFsdWVBc0Vt
cHR5KCk7CisgICAgdm9pZCBzZXRWYWx1ZUFzRGF0ZShjb25zdCBEYXRlQ29tcG9uZW50cyYpOwor
ICAgIGRvdWJsZSB2YWx1ZUFzRG91YmxlKCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgc3RhdGlj
IGNvbnN0IGludCBJbnZhbGlkRmllbGRJbmRleCA9IC0xOworCisgICAgRGF0ZVRpbWVFZGl0RWxl
bWVudChEb2N1bWVudCosIEVkaXRDb250cm9sRXZlbnRIYW5kbGVyJik7CisKKyAgICB2b2lkIGRp
c2FibGUoKTsKKyAgICB2aXJ0dWFsIGJvb2wgZGlzYWJsZWQoKSBjb25zdCBPVkVSUklERTsKKyAg
ICBEYXRlVGltZUZpZWxkRWxlbWVudCogZmllbGRBdChpbnQpIGNvbnN0OworICAgIHZvaWQgaGFu
ZGxlS2V5Ym9hcmRFdmVudChLZXlib2FyZEV2ZW50Kik7CisgICAgdm9pZCBoYW5kbGVNb3VzZUV2
ZW50KE1vdXNlRXZlbnQqKTsKKyAgICBpbnQgbmV4dEZpZWxkSW5kZXgoaW50KSBjb25zdDsKKyAg
ICBpbnQgcHJldmlvdXNGaWVsZEluZGV4KGludCkgY29uc3Q7CisgICAgYm9vbCByZWFkT25seSgp
IGNvbnN0OworICAgIHZvaWQgcmVzZXRMYXlvdXQoKTsKKyAgICB2b2lkIHNldEZvY3VzRmllbGQo
aW50KTsKKworICAgIC8vIERhdGVUaW1lRmllbGRFbGVtZW50OjpGaWVsZEV2ZW50SGFuZGxlciBm
dW5jdGlvbnMuCisgICAgdmlydHVhbCB2b2lkIG1vdmVUb05leHRGaWVsZCgpIE9WRVJSSURFIEZJ
TkFMOworICAgIHZpcnR1YWwgdm9pZCBmaWVsZFZhbHVlQ2hhbmdlZCgpIE9WRVJSSURFIEZJTkFM
OworCisgICAgLy8gU3BpbkJ1dHRvbkVsZW1lbnQ6OlN0ZXBBY3Rpb25IYW5kbGVyIGZ1bmN0aW9u
cy4KKyAgICB2aXJ0dWFsIHZvaWQgc3BpbkJ1dHRvblN0ZXBEb3duKCkgT1ZFUlJJREUgRklOQUw7
CisgICAgdmlydHVhbCB2b2lkIHNwaW5CdXR0b25TdGVwVXAoKSBPVkVSUklERSBGSU5BTDsKKwor
ICAgIEVkaXRDb250cm9sRXZlbnRIYW5kbGVyKiBtX2VkaXRDb250cm9sRXZlbnRIYW5kbGVyOwor
ICAgIFJlZlB0cjxEYXRlVGltZUZpZWxkRWxlbWVudD4gbV9ob3VyMTFGaWVsZDsKKyAgICBSZWZQ
dHI8RGF0ZVRpbWVGaWVsZEVsZW1lbnQ+IG1faG91cjEyRmllbGQ7CisgICAgUmVmUHRyPERhdGVU
aW1lRmllbGRFbGVtZW50PiBtX2hvdXIyNEZpZWxkOworICAgIFJlZlB0cjxEYXRlVGltZUZpZWxk
RWxlbWVudD4gbV9ob3VyMjNGaWVsZDsKKyAgICBSZWZQdHI8RGF0ZVRpbWVGaWVsZEVsZW1lbnQ+
IG1fbWlsbGlzZWNvbmRGaWVsZDsKKyAgICBSZWZQdHI8RGF0ZVRpbWVGaWVsZEVsZW1lbnQ+IG1f
bWludXRlRmllbGQ7CisgICAgUmVmUHRyPERhdGVUaW1lRmllbGRFbGVtZW50PiBtX3BlcmlvZEZp
ZWxkOworICAgIFJlZlB0cjxEYXRlVGltZUZpZWxkRWxlbWVudD4gbV9zZWNvbmRGaWVsZDsKKyAg
ICBSZWZQdHI8U3BpbkJ1dHRvbkVsZW1lbnQ+IG1fc3BpbkJ1dHRvbjsKKyAgICBEYXRlVGltZUZp
ZWxkRWxlbWVudCogbV9maWVsZHNbNV07CisgICAgaW50IG1fZm9jdXNGaWVsZEluZGV4OworICAg
IGludCBtX251bWJlck9mRmllbGRzOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisj
ZW5kaWYKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9E
YXRlVGltZUZvcm1hdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0RhdGVUaW1l
Rm9ybWF0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xMTRiOWY0OThlMmFjMDdjYzVkOTVhYmJiOGFiN2U4ODk1
YTYzNTU1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9E
YXRlVGltZUZvcm1hdC5jcHAKQEAgLTAsMCArMSwyNzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICog
ICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0
cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAq
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisK
KyNpZiBFTkFCTEUoVElNRV9JTlBVVF9GSUVMRFMpCisKKyNpbmNsdWRlICJEYXRlVGltZUZvcm1h
dC5oIgorCisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK3N0YXRpYyBjb25zdCBEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlIGxvd2Vy
Q2FzZVRvRmllbGRUeXBlTWFwWzI2XSA9IHsKKyAgICBEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBl
UGVyaW9kLCAvLyBhCisgICAgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZUludmFsaWQsIC8vIGIK
KyAgICBEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlTG9jYWxEYXlPZldlZWtTdGFuZEFsb24sIC8v
IGMKKyAgICBEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlRGF5T2ZNb250aCwgLy8gZAorICAgIERh
dGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVMb2NhbERheU9mV2VlaywgLy8gZQorICAgIERhdGVUaW1l
Rm9ybWF0OjpGaWVsZFR5cGVJbnZhbGlkLCAvLyBmCisgICAgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxk
VHlwZU1vZGlmaWVkSnVsaWFuRGF5LCAvLyBnCisgICAgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlw
ZUhvdXIxMiwgLy8gaAorICAgIERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVJbnZhbGlkLCAvLyBp
CisgICAgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZUludmFsaWQsIC8vIGoKKyAgICBEYXRlVGlt
ZUZvcm1hdDo6RmllbGRUeXBlSG91cjI0LCAvLyBrCisgICAgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxk
VHlwZUludmFsaWQsIC8vIGwKKyAgICBEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlTWludXRlLCAv
LyBtCisgICAgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZUludmFsaWQsIC8vIG4KKyAgICBEYXRl
VGltZUZvcm1hdDo6RmllbGRUeXBlSW52YWxpZCwgLy8gbworICAgIERhdGVUaW1lRm9ybWF0OjpG
aWVsZFR5cGVJbnZhbGlkLCAvLyBwCisgICAgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZVF1YXRl
clN0YW5kQWxvbmUsIC8vIHEKKyAgICBEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlSW52YWxpZCwg
Ly8gcgorICAgIERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVTZWNvbmQsIC8vIHMKKyAgICBEYXRl
VGltZUZvcm1hdDo6RmllbGRUeXBlSW52YWxpZCwgLy8gdAorICAgIERhdGVUaW1lRm9ybWF0OjpG
aWVsZFR5cGVFeHRlbmRlZFllYXIsIC8vIHUKKyAgICBEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBl
Tm9uTG9jYXRpb25ab25lLCAvLyB2CisgICAgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZVdlZWtP
Zk1vbnRoLCAvLyB3CisgICAgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZUludmFsaWQsIC8vIHgK
KyAgICBEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlWWVhciwgLy8geQorICAgIERhdGVUaW1lRm9y
bWF0OjpGaWVsZFR5cGVab25lLCAvLyB6Cit9OworCitzdGF0aWMgY29uc3QgRGF0ZVRpbWVGb3Jt
YXQ6OkZpZWxkVHlwZSB1cHBlckNhc2VUb0ZpZWxkVHlwZU1hcFsyNl0gPSB7CisgICAgRGF0ZVRp
bWVGb3JtYXQ6OkZpZWxkVHlwZU1pbGxpc2Vjb25kc0luRGF5LCAvLyBBCisgICAgRGF0ZVRpbWVG
b3JtYXQ6OkZpZWxkVHlwZUludmFsaWQsIC8vIEIKKyAgICBEYXRlVGltZUZvcm1hdDo6RmllbGRU
eXBlSW52YWxpZCwgLy8gQworICAgIERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVEYXlPZlllYXIs
IC8vIEQKKyAgICBEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlRGF5T2ZXZWVrLCAvLyBFCisgICAg
RGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZURheU9mV2Vla0luTW9udGgsIC8vIEYKKyAgICBEYXRl
VGltZUZvcm1hdDo6RmllbGRUeXBlRXJhLCAvLyBHCisgICAgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxk
VHlwZUhvdXIyMywgLy8gSAorICAgIERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVJbnZhbGlkLCAv
LyBJCisgICAgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZUludmFsaWQsIC8vIEoKKyAgICBEYXRl
VGltZUZvcm1hdDo6RmllbGRUeXBlSG91cjExLCAvLyBLCisgICAgRGF0ZVRpbWVGb3JtYXQ6OkZp
ZWxkVHlwZU1vbnRoU3RhbmRBbG9uZSwgLy8gTAorICAgIERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5
cGVNb250aCwgLy8gTQorICAgIERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVJbnZhbGlkLCAvLyBO
CisgICAgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZUludmFsaWQsIC8vIE8KKyAgICBEYXRlVGlt
ZUZvcm1hdDo6RmllbGRUeXBlSW52YWxpZCwgLy8gUAorICAgIERhdGVUaW1lRm9ybWF0OjpGaWVs
ZFR5cGVRdWF0ZXIsIC8vIFEKKyAgICBEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlSW52YWxpZCwg
Ly8gUgorICAgIERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVGcmFjdGlvbmFsU2Vjb25kLCAvLyBT
CisgICAgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZUludmFsaWQsIC8vIFQKKyAgICBEYXRlVGlt
ZUZvcm1hdDo6RmllbGRUeXBlSW52YWxpZCwgLy8gVQorICAgIERhdGVUaW1lRm9ybWF0OjpGaWVs
ZFR5cGVMb2NhdGlvblpvbmUsIC8vIFYKKyAgICBEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlV2Vl
a09mWWVhciwgLy8gVworICAgIERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVJbnZhbGlkLCAvLyBY
CisgICAgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZVllYXJPZldlZWtPZlllYXIsIC8vIFkKKyAg
ICBEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlUkZDODIyWm9uZSwgLy8gWgorfTsKKworc3RhdGlj
IERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGUgbWFwQ2hhcmFjdGVyVG9GaWVsZFR5cGVJbnRlcm5h
bChjb25zdCBVQ2hhciBjaCkKK3sKKyAgICBpZiAoY2ggPj0gJ0EnICYmIGNoIDw9ICdaJykKKyAg
ICAgICAgcmV0dXJuIHVwcGVyQ2FzZVRvRmllbGRUeXBlTWFwW2NoIC0gJ0EnXTsKKworICAgIGlm
IChjaCA+PSAnYScgJiYgY2ggPD0gJ3onKQorICAgICAgICByZXR1cm4gbG93ZXJDYXNlVG9GaWVs
ZFR5cGVNYXBbY2ggLSAnYSddOworCisgICAgcmV0dXJuIERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5
cGVMaXRlcmFsOworfQorCitEYXRlVGltZUZvcm1hdDo6RGF0ZVRpbWVGb3JtYXQoVG9rZW5IYW5k
bGVyJiB0b2tlbkhhbmRsZXIsIEZvcm1hdFR5cGUgZm9ybWF0VHlwZSkKKyAgICA6IG1fdG9rZW5I
YW5kbGVyKHRva2VuSGFuZGxlcikKKyAgICAsIG1fZm9ybWF0VHlwZShmb3JtYXRUeXBlKQorewor
fQorCitEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlIERhdGVUaW1lRm9ybWF0OjptYXBDaGFyYWN0
ZXJUb0ZpZWxkVHlwZShVQ2hhciBjaCkgY29uc3QgeworICAgIGNvbnN0IEZpZWxkVHlwZSBmaWVs
ZFR5cGUgPSBtYXBDaGFyYWN0ZXJUb0ZpZWxkVHlwZUludGVybmFsKGNoKTsKKyAgICBzd2l0Y2gg
KG1fZm9ybWF0VHlwZSkgeworICAgIGNhc2UgRm9ybWF0VHlwZUlDVToKKyAgICAgICAgcmV0dXJu
IGZpZWxkVHlwZSA9PSBGaWVsZFR5cGVMb2NhbERheU9mV2Vla1N0YW5kQWxvbiA/IEZpZWxkVHlw
ZUludmFsaWQgOiBmaWVsZFR5cGU7CisgICAgY2FzZSBGb3JtYXRUeXBlVW5pY29kZToKKyAgICAg
ICAgcmV0dXJuIGZpZWxkVHlwZSA9PSBGaWVsZFR5cGVMb2NhdGlvblpvbmUgPyBGaWVsZFR5cGVJ
bnZhbGlkIDogZmllbGRUeXBlOworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgICAgICByZXR1cm4gZmllbGRUeXBlOworICAgIH0KK30KKworYm9vbCBEYXRl
VGltZUZvcm1hdDo6cGFyc2UoY29uc3QgU3RyaW5nJiBzb3VyY2UpIGNvbnN0Cit7CisgICAgZW51
bSBTdGF0ZSB7CisgICAgICAgIFN0YXRlTGl0ZXJhbCwKKworICAgICAgICBTdGF0ZVF1b3RlLAor
ICAgICAgICBTdGF0ZVF1b3RlTm90UXVvdGUsCisgICAgICAgIFN0YXRlUXVvdGVRdW90ZSwKKwor
ICAgICAgICBTdGF0ZVN5bWJvbCwKKyAgICB9IHN0YXRlID0gU3RhdGVMaXRlcmFsOworCisgICAg
RmllbGRUeXBlIGZpZWxkVHlwZSA9IEZpZWxkVHlwZUxpdGVyYWw7CisgICAgU3RyaW5nQnVpbGRl
ciBsaXRlcmFsQnVmZmVyOworICAgIGludCBmaWVsZENvdW50ZXIgPSAwOworCisgICAgZm9yICh1
bnNpZ25lZCBpbnQgaW5kZXggPSAwOyBpbmRleCA8IHNvdXJjZS5sZW5ndGgoKTsgKytpbmRleCkg
eworICAgICAgICBjb25zdCBVQ2hhciBjaCA9IHNvdXJjZVtpbmRleF07CisgICAgICAgIHN3aXRj
aCAoc3RhdGUpIHsKKyAgICAgICAgY2FzZSBTdGF0ZUxpdGVyYWw6CisgICAgICAgICAgICBpZiAo
Y2ggPT0gJ1wnJykgeworICAgICAgICAgICAgICAgIHN0YXRlID0gU3RhdGVRdW90ZTsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZmllbGRUeXBl
ID0gbWFwQ2hhcmFjdGVyVG9GaWVsZFR5cGUoY2gpOworICAgICAgICAgICAgaWYgKGZpZWxkVHlw
ZSA9PSBGaWVsZFR5cGVJbnZhbGlkKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgICAgICAgICAgaWYoZmllbGRUeXBlID09IEZpZWxkVHlwZUxpdGVyYWwpIHsKKyAgICAgICAg
ICAgICAgICBsaXRlcmFsQnVmZmVyLmFwcGVuZChjaCk7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChsaXRlcmFsQnVmZmVyLmxlbmd0aCgp
KSB7CisgICAgICAgICAgICAgICAgbV90b2tlbkhhbmRsZXIuZ290TGl0ZXJhbChsaXRlcmFsQnVm
ZmVyLnRvU3RyaW5nKCkpOworICAgICAgICAgICAgICAgIGxpdGVyYWxCdWZmZXIuY2xlYXIoKTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZmllbGRDb3VudGVyID0gMTsKKyAgICAgICAg
ICAgIHN0YXRlID0gU3RhdGVTeW1ib2w7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBj
YXNlIFN0YXRlUXVvdGU6CisgICAgICAgICAgICBsaXRlcmFsQnVmZmVyLmFwcGVuZChjaCk7Cisg
ICAgICAgICAgICBzdGF0ZSA9IGNoID09ICdcJycgPyBTdGF0ZUxpdGVyYWwgOiBTdGF0ZVF1b3Rl
Tm90UXVvdGU7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFN0YXRlUXVvdGVO
b3RRdW90ZToKKyAgICAgICAgICAgIGlmIChjaCA9PSAnXCcnKSB7CisgICAgICAgICAgICAgICAg
c3RhdGUgPSBTdGF0ZVF1b3RlUXVvdGU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIGxpdGVyYWxCdWZmZXIuYXBwZW5kKGNoKTsKKyAgICAgICAg
ICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgU3RhdGVRdW90ZVF1b3RlOgorICAgICAgICAgICAg
aWYgKGNoID09ICdcJycpIHsKKyAgICAgICAgICAgICAgICBsaXRlcmFsQnVmZmVyLmFwcGVuZCgn
XCcnKTsKKyAgICAgICAgICAgICAgICBzdGF0ZSA9IFN0YXRlUXVvdGVOb3RRdW90ZTsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZmllbGRUeXBl
ID0gbWFwQ2hhcmFjdGVyVG9GaWVsZFR5cGUoY2gpOworICAgICAgICAgICAgaWYgKGZpZWxkVHlw
ZSA9PSBGaWVsZFR5cGVJbnZhbGlkKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgICAgICAgICAgaWYoZmllbGRUeXBlID09IEZpZWxkVHlwZUxpdGVyYWwpIHsKKyAgICAgICAg
ICAgICAgICBsaXRlcmFsQnVmZmVyLmFwcGVuZChjaCk7CisgICAgICAgICAgICAgICAgc3RhdGUg
PSBTdGF0ZUxpdGVyYWw7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIGlmIChsaXRlcmFsQnVmZmVyLmxlbmd0aCgpKSB7CisgICAgICAgICAgICAg
ICAgbV90b2tlbkhhbmRsZXIuZ290TGl0ZXJhbChsaXRlcmFsQnVmZmVyLnRvU3RyaW5nKCkpOwor
ICAgICAgICAgICAgICAgIGxpdGVyYWxCdWZmZXIuY2xlYXIoKTsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgZmllbGRDb3VudGVyID0gMTsKKyAgICAgICAgICAgIHN0YXRlID0gU3RhdGVT
eW1ib2w7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFN0YXRlU3ltYm9sOiB7
CisgICAgICAgICAgICBBU1NFUlQoZmllbGRUeXBlICE9IEZpZWxkVHlwZUludmFsaWQpOworICAg
ICAgICAgICAgQVNTRVJUKGZpZWxkVHlwZSAhPSBGaWVsZFR5cGVMaXRlcmFsKTsKKworICAgICAg
ICAgICAgRmllbGRUeXBlIGZpZWxkVHlwZTIgPSBtYXBDaGFyYWN0ZXJUb0ZpZWxkVHlwZShjaCk7
CisgICAgICAgICAgICBpZiAoZmllbGRUeXBlMiA9PSBGaWVsZFR5cGVJbnZhbGlkKQorICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAgICAgaWYgKGZpZWxkVHlwZSA9PSBm
aWVsZFR5cGUyKSB7CisgICAgICAgICAgICAgICAgKytmaWVsZENvdW50ZXI7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG1fdG9rZW5IYW5kbGVy
LmdvdEZpZWxkKGZpZWxkVHlwZSwgZmllbGRDb3VudGVyKTsKKworICAgICAgICAgICAgaWYoZmll
bGRUeXBlMiA9PSBGaWVsZFR5cGVMaXRlcmFsKSB7CisgICAgICAgICAgICAgICAgaWYgKGNoID09
ICdcJycpCisgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gU3RhdGVRdW90ZTsKKyAgICAgICAg
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgbGl0ZXJhbEJ1ZmZlci5hcHBlbmQo
Y2gpOworICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9IFN0YXRlTGl0ZXJhbDsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIGZpZWxkQ291bnRlciA9IDE7CisgICAgICAgICAgICBmaWVsZFR5cGUgPSBmaWVsZFR5
cGUyOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgTE9HX0VSUk9SKCJJbnZsaWFkIHN0YXRlPSVkIiwgc3RhdGUpOworICAgICAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBBU1NFUlQoZmllbGRUeXBlICE9IEZpZWxkVHlwZUludmFs
aWQpOworCisgICAgc3dpdGNoIChzdGF0ZSkgeworICAgIGNhc2UgU3RhdGVMaXRlcmFsOgorICAg
IGNhc2UgU3RhdGVRdW90ZVF1b3RlOgorICAgICAgICBpZiAobGl0ZXJhbEJ1ZmZlci5sZW5ndGgo
KSkKKyAgICAgICAgICAgIG1fdG9rZW5IYW5kbGVyLmdvdExpdGVyYWwobGl0ZXJhbEJ1ZmZlci50
b1N0cmluZygpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBjYXNlIFN0YXRlUXVvdGU6
CisgICAgY2FzZSBTdGF0ZVF1b3RlTm90UXVvdGU6CisgICAgICAgIGlmIChsaXRlcmFsQnVmZmVy
Lmxlbmd0aCgpKQorICAgICAgICAgICAgbV90b2tlbkhhbmRsZXIuZ290TGl0ZXJhbChsaXRlcmFs
QnVmZmVyLnRvU3RyaW5nKCkpOworICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBjYXNlIFN0
YXRlU3ltYm9sOgorICAgICAgICBBU1NFUlQoZmllbGRUeXBlICE9IEZpZWxkVHlwZUxpdGVyYWwp
OworICAgICAgICBBU1NFUlQoIWxpdGVyYWxCdWZmZXIubGVuZ3RoKCkpOworICAgICAgICBtX3Rv
a2VuSGFuZGxlci5nb3RGaWVsZChmaWVsZFR5cGUsIGZpZWxkQ291bnRlcik7CisgICAgICAgIHJl
dHVybiB0cnVlOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgTE9HX0VSUk9SKCJJbnZsaWFkIHN0
YXRlPSVkIiwgc3RhdGUpOworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5k
aWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvRGF0ZVRpbWVGb3Jt
YXQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvRGF0ZVRpbWVGb3JtYXQuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi45NDRkM2EwMjkyNjFmODM2M2JiZTc5NDNiMzRmZDc2NTEwMThkNmFiCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9EYXRlVGltZUZvcm1hdC5o
CkBAIC0wLDAgKzEsMTM5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
CisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhl
IG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
CisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAq
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBEYXRlVGltZUZvcm1hdF9oCisjZGVmaW5lIERhdGVU
aW1lRm9ybWF0X2gKKworI2lmIEVOQUJMRShUSU1FX0lOUFVUX0ZJRUxEUykKKworI2luY2x1ZGUg
PHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIERhdGVU
aW1lRm9ybWF0IHBhcnNlcyBkYXRlIHRpbWUgZm9ybWF0IGRlZmluZWQgaW4gVW5pY29kZSBUZWNo
bmljYWwKKy8vIHN0YW5kYXJkIDM1LCBMb2NhbGUgRGF0YSBNYXJrdXAgTGFuZ3VhZ2UgKExETUwp
WzFdLCBhbmQgSUNVIHZhcmlhbnRbMl0uCisvLworLy8gRGlmZmVyZW5jZXMgYmV0d2VlbiBMRE1M
IGFuZCBJQ1UgYXJlOgorLy8gIC0gTERNTCBzdXBwb3J0IHN5bWJvbCAiYyIsIGJ1dCBJQ1UgZG9l
c24ndC4KKy8vICAtIElDVSBzdXBwb3J0IHN5bWJvbCAiViIsIGJ1dCBMRE1MIGRvZXNuJ3QuCisv
LworLy8gWzFdIExETUwgaHR0cDovL3VuaWNvZGUub3JnL3JlcG9ydHMvdHIzNS90cjM1LTYuaHRt
bCNEYXRlX0Zvcm1hdF9QYXR0ZXJucworLy8gWzJdIGh0dHA6Ly91c2VyZ3VpZGUuaWN1LXByb2pl
Y3Qub3JnL2Zvcm1hdHBhcnNlL2RhdGV0aW1lCitjbGFzcyBEYXRlVGltZUZvcm1hdCB7CisgICAg
V1RGX01BS0VfTk9OQ09QWUFCTEUoRGF0ZVRpbWVGb3JtYXQpOworcHVibGljOgorICAgIGVudW0g
RmllbGRUeXBlIHsKKyAgICAgICAgRmllbGRUeXBlSW52YWxpZCwKKyAgICAgICAgRmllbGRUeXBl
TGl0ZXJhbCwKKworICAgICAgICAvLyBFcmE6IEFECisgICAgICAgIEZpZWxkVHlwZUVyYSA9ICdH
JywKKworICAgICAgICAvLyBZZWFyOiAxOTk2CisgICAgICAgIEZpZWxkVHlwZVllYXIgPSAneScs
CisgICAgICAgIEZpZWxkVHlwZVllYXJPZldlZWtPZlllYXIgPSAnWScsCisgICAgICAgIEZpZWxk
VHlwZUV4dGVuZGVkWWVhciA9ICd1JywKKworICAgICAgICAvLyBRdWF0ZXI6IFEyCisgICAgICAg
IEZpZWxkVHlwZVF1YXRlciA9ICdRJywKKyAgICAgICAgRmllbGRUeXBlUXVhdGVyU3RhbmRBbG9u
ZSA9ICdxJywKKworICAgICAgICAvLyBNb250aDogU2VwdGVtYmVyCisgICAgICAgIEZpZWxkVHlw
ZU1vbnRoID0gJ00nLAorICAgICAgICBGaWVsZFR5cGVNb250aFN0YW5kQWxvbmUgPSAnTCcsCisK
KyAgICAgICAgLy8gV2VlazogNDIKKyAgICAgICAgRmllbGRUeXBlV2Vla09mWWVhciA9ICdXJywK
KyAgICAgICAgRmllbGRUeXBlV2Vla09mTW9udGggPSAndycsCisKKyAgICAgICAgLy8gRGF5OiAx
MgorICAgICAgICBGaWVsZFR5cGVEYXlPZk1vbnRoID0gJ2QnLAorICAgICAgICBGaWVsZFR5cGVE
YXlPZlllYXIgPSAnRCcsCisgICAgICAgIEZpZWxkVHlwZURheU9mV2Vla0luTW9udGggPSAnRics
CisgICAgICAgIEZpZWxkVHlwZU1vZGlmaWVkSnVsaWFuRGF5ID0gJ2cnLAorCisgICAgICAgIC8v
IFdlZWsgRGF5OiBUdWVzZGF5CisgICAgICAgIEZpZWxkVHlwZURheU9mV2VlayA9ICdFJywKKyAg
ICAgICAgRmllbGRUeXBlTG9jYWxEYXlPZldlZWsgPSAnZScsCisgICAgICAgIEZpZWxkVHlwZUxv
Y2FsRGF5T2ZXZWVrU3RhbmRBbG9uID0gJ2MnLCAvLyBJQ1UgZG9lc24ndCBzdXBwb3J0IHRoaXMu
CisKKyAgICAgICAgLy8gUGVyaW9kOiBBTSBvciBQTQorICAgICAgICBGaWVsZFR5cGVQZXJpb2Qg
PSAnYScsCisKKyAgICAgICAgLy8gSG91cjogNworICAgICAgICBGaWVsZFR5cGVIb3VyMTIgPSAn
aCcsCisgICAgICAgIEZpZWxkVHlwZUhvdXIyMyA9ICdIJywKKyAgICAgICAgRmllbGRUeXBlSG91
cjExID0gJ0snLAorICAgICAgICBGaWVsZFR5cGVIb3VyMjQgPSAnaycsCisKKyAgICAgICAgLy8g
TWludXRlOiA1OQorICAgICAgICBGaWVsZFR5cGVNaW51dGUgPSAnbScsCisKKyAgICAgICAgLy8g
U2Vjb25kOiAxMgorICAgICAgICBGaWVsZFR5cGVTZWNvbmQgPSAncycsCisgICAgICAgIEZpZWxk
VHlwZUZyYWN0aW9uYWxTZWNvbmQgPSAnUycsCisgICAgICAgIEZpZWxkVHlwZU1pbGxpc2Vjb25k
c0luRGF5ID0gJ0EnLAorCisgICAgICAgIC8vIFpvbmU6IFBEVAorICAgICAgICBGaWVsZFR5cGVa
b25lID0gJ3onLAorICAgICAgICBGaWVsZFR5cGVSRkM4MjJab25lID0gJ1onLAorICAgICAgICBG
aWVsZFR5cGVOb25Mb2NhdGlvblpvbmUgPSAndicsCisgICAgICAgIEZpZWxkVHlwZUxvY2F0aW9u
Wm9uZSA9ICdWJywgLy8gSUNVIG9ubHkuCisgICAgfTsKKworICAgIGVudW0gRm9ybWF0VHlwZSB7
CisgICAgICAgIEZvcm1hdFR5cGVJQ1UsCisgICAgICAgIEZvcm1hdFR5cGVVbmljb2RlLAorICAg
IH07CisKKyAgICBjbGFzcyBUb2tlbkhhbmRsZXIgeworICAgIHB1YmxpYzoKKyAgICAgICAgdmly
dHVhbCB+VG9rZW5IYW5kbGVyKCkgeyB9CisgICAgICAgIHZpcnR1YWwgdm9pZCBnb3RGaWVsZChG
aWVsZFR5cGUsIGludCkgPSAwOworICAgICAgICB2aXJ0dWFsIHZvaWQgZ290TGl0ZXJhbChjb25z
dCBTdHJpbmcmKSA9IDA7CisgICAgfTsKKworICAgIGV4cGxpY2l0IERhdGVUaW1lRm9ybWF0KFRv
a2VuSGFuZGxlciYsIEZvcm1hdFR5cGUgPSBGb3JtYXRUeXBlVW5pY29kZSk7CisKKyAgICAvLyBS
ZXR1cm5zIHRydWUgaWYgc3VjY2VlZGVkLCBmYWxzZSBpZiBmYWlsZWQuCisgICAgYm9vbCBwYXJz
ZShjb25zdCBTdHJpbmcmKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBGaWVsZFR5cGUgbWFwQ2hh
cmFjdGVyVG9GaWVsZFR5cGUoVUNoYXIpIGNvbnN0OworCisgICAgVG9rZW5IYW5kbGVyJiBtX3Rv
a2VuSGFuZGxlcjsKKyAgICBGb3JtYXRUeXBlIGNvbnN0IG1fZm9ybWF0VHlwZTsKK307CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCisKKyNlbmRpZiAvLyBEYXRlVGltZUZvcm1h
dF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0xvY2FsZUlDVS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0xvY2FsZUlDVS5jcHAKaW5kZXggNTZk
NmE3NzYwZDJiMDViN2E4NTYyYjBiMDNmMjA3NTQyMzRhNDUxNy4uZTY1MDllMjk4YWUwYTU0MDNj
MTM5M2FjMDVkNDMxYTg5ZWE3NmQxYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vdGV4dC9Mb2NhbGVJQ1UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQv
TG9jYWxlSUNVLmNwcApAQCAtNTEsNiArNTEsMTAgQEAgTG9jYWxlSUNVOjpMb2NhbGVJQ1UoY29u
c3QgY2hhciogbG9jYWxlKQogI2lmIEVOQUJMRShDQUxFTkRBUl9QSUNLRVIpCiAgICAgLCBtX2Zp
cnN0RGF5T2ZXZWVrKDApCiAjZW5kaWYKKyNpZiBFTkFCTEUoVElNRV9JTlBVVF9GSUVMRFMpCisg
ICAgLCBtX2xvbmdUaW1lRm9ybWF0KDApCisgICAgLCBtX2RpZENyZWF0ZUxvbmdUaW1lRm9ybWF0
KGZhbHNlKQorI2VuZGlmCiB7CiB9CiAKQEAgLTM5MiwzMCArMzk2LDYgQEAgU3RyaW5nIExvY2Fs
ZUlDVTo6bG9jYWxpemVkRGF0ZUZvcm1hdFRleHQoKQogICAgIHJldHVybiBtX2xvY2FsaXplZERh
dGVGb3JtYXRUZXh0OwogfQogCi1QYXNzT3duUHRyPFZlY3RvcjxTdHJpbmc+ID4gTG9jYWxlSUNV
OjpjcmVhdGVMYWJlbFZlY3RvcihVRGF0ZUZvcm1hdFN5bWJvbFR5cGUgdHlwZSwgaW50MzJfdCBz
dGFydEluZGV4LCBpbnQzMl90IHNpemUpCi17Ci0gICAgaWYgKCFtX3Nob3J0RGF0ZUZvcm1hdCkK
LSAgICAgICAgcmV0dXJuIFBhc3NPd25QdHI8VmVjdG9yPFN0cmluZz4gPigpOwotICAgIGlmICh1
ZGF0X2NvdW50U3ltYm9scyhtX3Nob3J0RGF0ZUZvcm1hdCwgdHlwZSkgIT0gc3RhcnRJbmRleCAr
IHNpemUpCi0gICAgICAgIHJldHVybiBQYXNzT3duUHRyPFZlY3RvcjxTdHJpbmc+ID4oKTsKLQot
ICAgIE93blB0cjxWZWN0b3I8U3RyaW5nPiA+IGxhYmVscyA9IGFkb3B0UHRyKG5ldyBWZWN0b3I8
U3RyaW5nPigpKTsKLSAgICBsYWJlbHMtPnJlc2VydmVDYXBhY2l0eShzaXplKTsKLSAgICBmb3Ig
KGludDMyX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAgVUVycm9yQ29kZSBzdGF0
dXMgPSBVX1pFUk9fRVJST1I7Ci0gICAgICAgIGludDMyX3QgbGVuZ3RoID0gdWRhdF9nZXRTeW1i
b2xzKG1fc2hvcnREYXRlRm9ybWF0LCB0eXBlLCBzdGFydEluZGV4ICsgaSwgMCwgMCwgJnN0YXR1
cyk7Ci0gICAgICAgIGlmIChzdGF0dXMgIT0gVV9CVUZGRVJfT1ZFUkZMT1dfRVJST1IpCi0gICAg
ICAgICAgICByZXR1cm4gUGFzc093blB0cjxWZWN0b3I8U3RyaW5nPiA+KCk7Ci0gICAgICAgIFZl
Y3RvcjxVQ2hhcj4gYnVmZmVyKGxlbmd0aCk7Ci0gICAgICAgIHN0YXR1cyA9IFVfWkVST19FUlJP
UjsKLSAgICAgICAgdWRhdF9nZXRTeW1ib2xzKG1fc2hvcnREYXRlRm9ybWF0LCB0eXBlLCBzdGFy
dEluZGV4ICsgaSwgYnVmZmVyLmRhdGEoKSwgbGVuZ3RoLCAmc3RhdHVzKTsKLSAgICAgICAgaWYg
KFVfRkFJTFVSRShzdGF0dXMpKQotICAgICAgICAgICAgcmV0dXJuIFBhc3NPd25QdHI8VmVjdG9y
PFN0cmluZz4gPigpOwotICAgICAgICBsYWJlbHMtPmFwcGVuZChTdHJpbmc6OmFkb3B0KGJ1ZmZl
cikpOwotICAgIH0KLSAgICByZXR1cm4gbGFiZWxzLnJlbGVhc2UoKTsKLX0KLQogc3RhdGljIFBh
c3NPd25QdHI8VmVjdG9yPFN0cmluZz4gPiBjcmVhdGVGYWxsYmFja01vbnRoTGFiZWxzKCkKIHsK
ICAgICBPd25QdHI8VmVjdG9yPFN0cmluZz4gPiBsYWJlbHMgPSBhZG9wdFB0cihuZXcgVmVjdG9y
PFN0cmluZz4oKSk7CkBAIC00NTIsMTEgKzQzMiwxMSBAQCB2b2lkIExvY2FsZUlDVTo6aW5pdGlh
bGl6ZUNhbGVuZGFyKCkKICAgICB9CiAgICAgbV9maXJzdERheU9mV2VlayA9IHVjYWxfZ2V0QXR0
cmlidXRlKHVkYXRfZ2V0Q2FsZW5kYXIobV9zaG9ydERhdGVGb3JtYXQpLCBVQ0FMX0ZJUlNUX0RB
WV9PRl9XRUVLKSAtIFVDQUxfU1VOREFZOwogCi0gICAgbV9tb250aExhYmVscyA9IGNyZWF0ZUxh
YmVsVmVjdG9yKFVEQVRfTU9OVEhTLCBVQ0FMX0pBTlVBUlksIDEyKTsKKyAgICBtX21vbnRoTGFi
ZWxzID0gY3JlYXRlTGFiZWxWZWN0b3IobV9zaG9ydERhdGVGb3JtYXQsIFVEQVRfTU9OVEhTLCBV
Q0FMX0pBTlVBUlksIDEyKTsKICAgICBpZiAoIW1fbW9udGhMYWJlbHMpCiAgICAgICAgIG1fbW9u
dGhMYWJlbHMgPSBjcmVhdGVGYWxsYmFja01vbnRoTGFiZWxzKCk7CiAKLSAgICBtX3dlZWtEYXlT
aG9ydExhYmVscyA9IGNyZWF0ZUxhYmVsVmVjdG9yKFVEQVRfU0hPUlRfV0VFS0RBWVMsIFVDQUxf
U1VOREFZLCA3KTsKKyAgICBtX3dlZWtEYXlTaG9ydExhYmVscyA9IGNyZWF0ZUxhYmVsVmVjdG9y
KG1fc2hvcnREYXRlRm9ybWF0LCBVREFUX1NIT1JUX1dFRUtEQVlTLCBVQ0FMX1NVTkRBWSwgNyk7
CiAgICAgaWYgKCFtX3dlZWtEYXlTaG9ydExhYmVscykKICAgICAgICAgbV93ZWVrRGF5U2hvcnRM
YWJlbHMgPSBjcmVhdGVGYWxsYmFja1dlZWtEYXlTaG9ydExhYmVscygpOwogfQpAQCAtNDgwLDUg
KzQ2MCw2NSBAQCB1bnNpZ25lZCBMb2NhbGVJQ1U6OmZpcnN0RGF5T2ZXZWVrKCkKIH0KICNlbmRp
ZgogCisjaWYgRU5BQkxFKENBTEVOREFSX1BJQ0tFUikgfHwgRU5BQkxFKFRJTUVfSU5QVVRfRklF
TERTKQorCitQYXNzT3duUHRyPFZlY3RvcjxTdHJpbmc+ID4gTG9jYWxlSUNVOjpjcmVhdGVMYWJl
bFZlY3Rvcihjb25zdCBVRGF0ZUZvcm1hdCogZGF0ZUZvcm1hdCwgVURhdGVGb3JtYXRTeW1ib2xU
eXBlIHR5cGUsIGludDMyX3Qgc3RhcnRJbmRleCwgaW50MzJfdCBzaXplKQoreworICAgIGlmICgh
ZGF0ZUZvcm1hdCkKKyAgICAgICAgcmV0dXJuIFBhc3NPd25QdHI8VmVjdG9yPFN0cmluZz4gPigp
OworICAgIGlmICh1ZGF0X2NvdW50U3ltYm9scyhtX3Nob3J0RGF0ZUZvcm1hdCwgdHlwZSkgIT0g
c3RhcnRJbmRleCArIHNpemUpCisgICAgICAgIHJldHVybiBQYXNzT3duUHRyPFZlY3RvcjxTdHJp
bmc+ID4oKTsKKworICAgIE93blB0cjxWZWN0b3I8U3RyaW5nPiA+IGxhYmVscyA9IGFkb3B0UHRy
KG5ldyBWZWN0b3I8U3RyaW5nPigpKTsKKyAgICBsYWJlbHMtPnJlc2VydmVDYXBhY2l0eShzaXpl
KTsKKyAgICBmb3IgKGludDMyX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKKyAgICAgICAgVUVy
cm9yQ29kZSBzdGF0dXMgPSBVX1pFUk9fRVJST1I7CisgICAgICAgIGludDMyX3QgbGVuZ3RoID0g
dWRhdF9nZXRTeW1ib2xzKGRhdGVGb3JtYXQsIHR5cGUsIHN0YXJ0SW5kZXggKyBpLCAwLCAwLCAm
c3RhdHVzKTsKKyAgICAgICAgaWYgKHN0YXR1cyAhPSBVX0JVRkZFUl9PVkVSRkxPV19FUlJPUikK
KyAgICAgICAgICAgIHJldHVybiBQYXNzT3duUHRyPFZlY3RvcjxTdHJpbmc+ID4oKTsKKyAgICAg
ICAgVmVjdG9yPFVDaGFyPiBidWZmZXIobGVuZ3RoKTsKKyAgICAgICAgc3RhdHVzID0gVV9aRVJP
X0VSUk9SOworICAgICAgICB1ZGF0X2dldFN5bWJvbHMoZGF0ZUZvcm1hdCwgdHlwZSwgc3RhcnRJ
bmRleCArIGksIGJ1ZmZlci5kYXRhKCksIGxlbmd0aCwgJnN0YXR1cyk7CisgICAgICAgIGlmIChV
X0ZBSUxVUkUoc3RhdHVzKSkKKyAgICAgICAgICAgIHJldHVybiBQYXNzT3duUHRyPFZlY3RvcjxT
dHJpbmc+ID4oKTsKKyAgICAgICAgbGFiZWxzLT5hcHBlbmQoU3RyaW5nOjphZG9wdChidWZmZXIp
KTsKKyAgICB9CisgICAgcmV0dXJuIGxhYmVscy5yZWxlYXNlKCk7Cit9CisKKyNlbmRpZgorCisj
aWYgRU5BQkxFKFRJTUVfSU5QVVRfRklFTERTKQorCit2b2lkIExvY2FsZUlDVTo6aW5pdGlhbGl6
ZURhdGVUaW1lRm9ybWF0KCkKK3sKKyAgICBpZiAoIW1fZGlkQ3JlYXRlTG9uZ1RpbWVGb3JtYXQp
IHsKKyAgICAgICAgY29uc3QgVUNoYXIgZ210VGltZXpvbmVbM10gPSB7J0cnLCAnTScsICdUJ307
CisgICAgICAgIFVFcnJvckNvZGUgc3RhdHVzID0gVV9aRVJPX0VSUk9SOworICAgICAgICBtX2xv
bmdUaW1lRm9ybWF0ID0gdWRhdF9vcGVuKFVEQVRfTE9ORywgVURBVF9OT05FLCBtX2xvY2FsZS5k
YXRhKCksIGdtdFRpbWV6b25lLCBXVEZfQVJSQVlfTEVOR1RIKGdtdFRpbWV6b25lKSwgMCwgLTEs
ICZzdGF0dXMpOworICAgICAgICBtX2RpZENyZWF0ZUxvbmdUaW1lRm9ybWF0ID0gdHJ1ZTsKKyAg
ICB9CisKKyAgICBtX3BlcmlvZExhYmVscyA9IGNyZWF0ZUxhYmVsVmVjdG9yKG1fbG9uZ1RpbWVG
b3JtYXQsIFVEQVRfQU1fUE1TLCAwLCAyKTsKKyAgICBpZiAoIW1fcGVyaW9kTGFiZWxzKSB7Cisg
ICAgICAgIG1fcGVyaW9kTGFiZWxzID0gYWRvcHRQdHIobmV3IFZlY3RvcjxTdHJpbmc+KDIpKTsK
KyAgICAgICAgbV9wZXJpb2RMYWJlbHMtPmFwcGVuZCgiQU0iKTsKKyAgICAgICAgbV9wZXJpb2RM
YWJlbHMtPmFwcGVuZCgiUE0iKTsKKyAgICB9Cit9CisKK1N0cmluZyBMb2NhbGVJQ1U6OmxvY2Fs
aXplZFRpbWVGb3JtYXRUZXh0KCkKK3sKKyAgICBpbml0aWFsaXplRGF0ZVRpbWVGb3JtYXQoKTsK
KyAgICByZXR1cm4gbV9sb2NhbGl6ZWRUaW1lRm9ybWF0VGV4dDsKK30KKworY29uc3QgVmVjdG9y
PFN0cmluZz4mIExvY2FsZUlDVTo6cGVyaW9kTGFiZWxzKCkKK3sKKyAgICBpbml0aWFsaXplRGF0
ZVRpbWVGb3JtYXQoKTsKKyAgICByZXR1cm4gKm1fcGVyaW9kTGFiZWxzOworfQorI2VuZGlmCisK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vdGV4dC9Mb2NhbGVJQ1UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvTG9j
YWxlSUNVLmgKaW5kZXggNzczNjBhMmFhODNiZDgwNTE1MjdmNDQ5NGZkM2Q0ZTkxMTU3OGI1Yy4u
OWIyZTZmYjZjYjlhZjhhNDE5MWJkYmVjNDc3YTNlZTk5YTRhYzVmZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9Mb2NhbGVJQ1UuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS90ZXh0L0xvY2FsZUlDVS5oCkBAIC02NCw2ICs2NCwxMSBAQCBwdWJsaWM6CiAg
ICAgdW5zaWduZWQgZmlyc3REYXlPZldlZWsoKTsKICNlbmRpZgogCisjaWYgRU5BQkxFKFRJTUVf
SU5QVVRfRklFTERTKQorICAgIFN0cmluZyBsb2NhbGl6ZWRUaW1lRm9ybWF0VGV4dCgpOworICAg
IGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwZXJpb2RMYWJlbHMoKTsKKyNlbmRpZgorCiBwcml2YXRl
OgogICAgIHN0YXRpYyBQYXNzT3duUHRyPExvY2FsZUlDVT4gY3JlYXRlRm9yQ3VycmVudExvY2Fs
ZSgpOwogICAgIGV4cGxpY2l0IExvY2FsZUlDVShjb25zdCBjaGFyKik7CkBAIC03OCwxMCArODMs
MTcgQEAgcHJpdmF0ZToKIAogI2lmIEVOQUJMRShDQUxFTkRBUl9QSUNLRVIpCiAgICAgdm9pZCBp
bml0aWFsaXplTG9jYWxpemVkRGF0ZUZvcm1hdFRleHQoKTsKLSAgICBQYXNzT3duUHRyPFZlY3Rv
cjxTdHJpbmc+ID4gY3JlYXRlTGFiZWxWZWN0b3IoVURhdGVGb3JtYXRTeW1ib2xUeXBlLCBpbnQz
Ml90IHN0YXJ0SW5kZXgsIGludDMyX3Qgc2l6ZSk7CiAgICAgdm9pZCBpbml0aWFsaXplQ2FsZW5k
YXIoKTsKICNlbmRpZgogCisjaWYgRU5BQkxFKENBTEVOREFSX1BJQ0tFUikgfHwgRU5BQkxFKFRJ
TUVfSU5QVVRfRklFTERTKQorICAgIFBhc3NPd25QdHI8VmVjdG9yPFN0cmluZz4gPiBjcmVhdGVM
YWJlbFZlY3Rvcihjb25zdCBVRGF0ZUZvcm1hdCosIFVEYXRlRm9ybWF0U3ltYm9sVHlwZSwgaW50
MzJfdCBzdGFydEluZGV4LCBpbnQzMl90IHNpemUpOworI2VuZGlmCisKKyNpZiBFTkFCTEUoVElN
RV9JTlBVVF9GSUVMRFMpCisgICAgdm9pZCBpbml0aWFsaXplRGF0ZVRpbWVGb3JtYXQoKTsKKyNl
bmRpZgorCiAgICAgQ1N0cmluZyBtX2xvY2FsZTsKICAgICBVTnVtYmVyRm9ybWF0KiBtX251bWJl
ckZvcm1hdDsKICAgICBVRGF0ZUZvcm1hdCogbV9zaG9ydERhdGVGb3JtYXQ7CkBAIC0xMDUsNiAr
MTE3LDE0IEBAIHByaXZhdGU6CiAgICAgT3duUHRyPFZlY3RvcjxTdHJpbmc+ID4gbV93ZWVrRGF5
U2hvcnRMYWJlbHM7CiAgICAgdW5zaWduZWQgbV9maXJzdERheU9mV2VlazsKICNlbmRpZgorCisj
aWYgRU5BQkxFKFRJTUVfSU5QVVRfRklFTERTKQorICAgIFVEYXRlRm9ybWF0KiBtX2xvbmdUaW1l
Rm9ybWF0OworICAgIFN0cmluZyBtX2xvY2FsaXplZFRpbWVGb3JtYXRUZXh0OworICAgIE93blB0
cjxWZWN0b3I8U3RyaW5nPiA+IG1fcGVyaW9kTGFiZWxzOworICAgIGJvb2wgbV9kaWRDcmVhdGVM
b25nVGltZUZvcm1hdDsKKyNlbmRpZgorCiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS90ZXh0L0xvY2FsaXplZERhdGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3RleHQvTG9jYWxpemVkRGF0ZS5oCmluZGV4IDRkYjVlYWM4ZTM1Yjc1NGI5ZDgzNTAyN2U0
MjA3NThhMDRmOGY5ZDUuLjg5Y2RiNmEwMjk1NmE3OWUxNzFmMTlkMTVmNGE5YTdiOGZjNzA2YTcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvTG9jYWxpemVkRGF0ZS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvTG9jYWxpemVkRGF0ZS5oCkBAIC02
MCw2ICs2MCwxNSBAQCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgd2Vla0RheVNob3J0TGFiZWxzKCk7
CiAKIC8vIFRoZSBmaXJzdCBkYXkgb2YgYSB3ZWVrLiAwIGlzIFN1bmRheSwgYW5kIDYgaXMgU2F0
dXJkYXkuCiB1bnNpZ25lZCBmaXJzdERheU9mV2VlaygpOworCisjZW5kaWYKKworI2lmIEVOQUJM
RShUSU1FX0lOUFVUX0ZJRUxEUykKKy8vIFJldHVybnMgdGltZSBmb3JtYXQgaW4gVW5pY29kZSBU
UjM1IExETUwuCitTdHJpbmcgbG9jYWxpemVkVGltZUZvcm1hdFRleHQoKTsKKworLy8gUmV0dXJu
cyBsb2NhbGl6ZWQgQU0vUE0gc3RyaW5ncy4KK2NvbnN0IFZlY3RvcjxTdHJpbmc+JiBwZXJpb2RM
YWJlbHMoKTsKICNlbmRpZgogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0xvY2FsaXplZERhdGVJQ1UuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9Mb2NhbGl6ZWREYXRlSUNVLmNwcAppbmRleCAxMGNiNmYx
MzJjZTM5M2VmZTliZGE0ZjBkNzcwYzBjOGY5ZWNiN2Y4Li4wY2NhNDg3NWFhY2NhZWI2MGU4Y2Yw
NjVhYmFhZDQ2MWVlOTUwMDk4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90
ZXh0L0xvY2FsaXplZERhdGVJQ1UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3Rl
eHQvTG9jYWxpemVkRGF0ZUlDVS5jcHAKQEAgLTkyLDQgKzkyLDE2IEBAIHVuc2lnbmVkIGZpcnN0
RGF5T2ZXZWVrKCkKIH0KICNlbmRpZgogCisjaWYgRU5BQkxFKFRJTUVfSU5QVVRfRklFTERTKQor
U3RyaW5nIGxvY2FsaXplZFRpbWVGb3JtYXRUZXh0KCkKK3sKKyAgICByZXR1cm4gTG9jYWxlSUNV
OjpjdXJyZW50TG9jYWxlKCktPmxvY2FsaXplZFRpbWVGb3JtYXRUZXh0KCk7Cit9CisKK2NvbnN0
IFZlY3RvcjxTdHJpbmc+JiBwZXJpb2RMYWJlbHMoKQoreworICAgIHJldHVybiBMb2NhbGVJQ1U6
OmN1cnJlbnRMb2NhbGUoKS0+cGVyaW9kTGFiZWxzKCk7Cit9CisjZW5kaWYKKwogfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaSBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vV2ViS2l0Lmd5cGkKaW5kZXggNTQ5ZmRmYTQ0Yjg0YWUxY2E3NTFhZGU0NDI3YzNk
N2M4Y2M5OGE1NS4uYjc4Y2FkNzAzOTczZjUzN2I0Zjg2Y2QyMmQ1Y2U1NWM2YTY4N2MzYSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQorKysgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCkBAIC05OSw2ICs5OSw3IEBACiAgICAgICAgICAg
ICAndGVzdHMvQ2xpcGJvYXJkQ2hyb21pdW1UZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMv
Q29tcG9zaXRvckZha2VHcmFwaGljc0NvbnRleHQzRC5oJywKICAgICAgICAgICAgICd0ZXN0cy9D
b21wb3NpdG9yRmFrZVdlYkdyYXBoaWNzQ29udGV4dDNELmgnLAorICAgICAgICAgICAgJ3Rlc3Rz
L0RhdGVUaW1lRm9ybWF0VGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0RlY2ltYWxUZXN0
LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvRHJhZ0ltYWdlVGVzdC5jcHAnLAogICAgICAgICAg
ICAgJ3Rlc3RzL0RyYXdpbmdCdWZmZXJDaHJvbWl1bVRlc3QuY3BwJywKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvRGF0ZVRpbWVGb3JtYXRUZXN0LmNwcCBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvRGF0ZVRpbWVGb3JtYXRUZXN0LmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li4yMmVmNzVhMzNjNTNiZjM2ZGRmODc4ZTc5YjEwMDI5ODVlMmQ2YzhlCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9EYXRlVGltZUZvcm1hdFRlc3QuY3Bw
CkBAIC0wLDAgKzEsMzQ1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
CisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhl
IG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
CisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAq
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKFRJTUVf
SU5QVVRfRklFTERTKQorCisjaW5jbHVkZSAiRGF0ZVRpbWVGb3JtYXQuaCIKKworI2luY2x1ZGUg
PGd0ZXN0L2d0ZXN0Lmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorI2luY2x1ZGUg
PHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisK
K2NsYXNzIERhdGVUaW1lRm9ybWF0VGVzdCA6IHB1YmxpYyA6OnRlc3Rpbmc6OlRlc3QgeworcHVi
bGljOgorICAgIHR5cGVkZWYgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZSBGaWVsZFR5cGU7CisK
KyAgICBzdHJ1Y3QgVG9rZW4geworICAgICAgICBTdHJpbmcgc3RyaW5nOworICAgICAgICBpbnQg
Y291bnQ7CisgICAgICAgIEZpZWxkVHlwZSBmaWVsZFR5cGU7CisKKyAgICAgICAgVG9rZW4oRmll
bGRUeXBlIGZpZWxkVHlwZSwgaW50IGNvdW50ID0gMSkKKyAgICAgICAgICAgIDogY291bnQoY291
bnQpCisgICAgICAgICAgICAsIGZpZWxkVHlwZShmaWVsZFR5cGUpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIEFTU0VSVChmaWVsZFR5cGUgIT0gRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZUxpdGVy
YWwpOworICAgICAgICB9CisKKyAgICAgICAgVG9rZW4oY29uc3QgU3RyaW5nJiBzdHJpbmcpCisg
ICAgICAgICAgICA6IHN0cmluZyhzdHJpbmcpCisgICAgICAgICAgICAsIGNvdW50KDApCisgICAg
ICAgICAgICAsIGZpZWxkVHlwZShEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlTGl0ZXJhbCkKKyAg
ICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFRva2Vu
JiBvdGhlcikgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGZpZWxkVHlwZSA9
PSBvdGhlci5maWVsZFR5cGUgJiYgY291bnQgPT0gb3RoZXIuY291bnQgJiYgc3RyaW5nID09IG90
aGVyLnN0cmluZzsKKyAgICAgICAgfQorCisgICAgICAgIFN0cmluZyB0b1N0cmluZygpIGNvbnN0
CisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCAoZmllbGRUeXBlKSB7CisgICAgICAgICAg
ICBjYXNlIERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVJbnZhbGlkOgorICAgICAgICAgICAgICAg
IHJldHVybiAiKmludmFsaWQqIjsKKyAgICAgICAgICAgIGNhc2UgRGF0ZVRpbWVGb3JtYXQ6OkZp
ZWxkVHlwZUxpdGVyYWw6IHsKKyAgICAgICAgICAgICAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7
CisgICAgICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoJyInKTsKKyAgICAgICAgICAgICAgICBi
dWlsZGVyLmFwcGVuZChzdHJpbmcpOworICAgICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCci
Jyk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGJ1aWxkZXIudG9TdHJpbmcoKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIFN0cmlu
Zzo6Zm9ybWF0KCJUb2tlbiglZCwgJWQpIiwgZmllbGRUeXBlLCBjb3VudCk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICB9OworCisgICAgY2xhc3MgVG9rZW5zIHsKKyAgICBwdWJsaWM6
CisgICAgICAgIFRva2VucygpIHsgfQorCisgICAgICAgIGV4cGxpY2l0IFRva2Vucyhjb25zdCBW
ZWN0b3I8VG9rZW4+IHRva2VucykKKyAgICAgICAgICAgIDogbV90b2tlbnModG9rZW5zKQorICAg
ICAgICB7CisgICAgICAgIH0KKworICAgICAgICBleHBsaWNpdCBUb2tlbnMoY29uc3QgU3RyaW5n
JiBzdHJpbmcpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1fdG9rZW5zLmFwcGVuZChUb2tlbihz
dHJpbmcpKTsKKyAgICAgICAgfQorCisgICAgICAgIGV4cGxpY2l0IFRva2VucyhUb2tlbiB0b2tl
bjEpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1fdG9rZW5zLmFwcGVuZCh0b2tlbjEpOworICAg
ICAgICB9CisKKyAgICAgICAgVG9rZW5zKFRva2VuIHRva2VuMSwgVG9rZW4gdG9rZW4yKQorICAg
ICAgICB7CisgICAgICAgICAgICBtX3Rva2Vucy5hcHBlbmQodG9rZW4xKTsKKyAgICAgICAgICAg
IG1fdG9rZW5zLmFwcGVuZCh0b2tlbjIpOworICAgICAgICB9CisKKyAgICAgICAgVG9rZW5zKFRv
a2VuIHRva2VuMSwgVG9rZW4gdG9rZW4yLCBUb2tlbiB0b2tlbjMpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIG1fdG9rZW5zLmFwcGVuZCh0b2tlbjEpOworICAgICAgICAgICAgbV90b2tlbnMuYXBw
ZW5kKHRva2VuMik7CisgICAgICAgICAgICBtX3Rva2Vucy5hcHBlbmQodG9rZW4zKTsKKyAgICAg
ICAgfQorCisgICAgICAgIFRva2VucyhUb2tlbiB0b2tlbjEsIFRva2VuIHRva2VuMiwgVG9rZW4g
dG9rZW4zLCBUb2tlbiB0b2tlbjQpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1fdG9rZW5zLmFw
cGVuZCh0b2tlbjEpOworICAgICAgICAgICAgbV90b2tlbnMuYXBwZW5kKHRva2VuMik7CisgICAg
ICAgICAgICBtX3Rva2Vucy5hcHBlbmQodG9rZW4zKTsKKyAgICAgICAgICAgIG1fdG9rZW5zLmFw
cGVuZCh0b2tlbjQpOworICAgICAgICB9CisKKyAgICAgICAgVG9rZW5zKFRva2VuIHRva2VuMSwg
VG9rZW4gdG9rZW4yLCBUb2tlbiB0b2tlbjMsIFRva2VuIHRva2VuNCwgVG9rZW4gdG9rZW41KQor
ICAgICAgICB7CisgICAgICAgICAgICBtX3Rva2Vucy5hcHBlbmQodG9rZW4xKTsKKyAgICAgICAg
ICAgIG1fdG9rZW5zLmFwcGVuZCh0b2tlbjIpOworICAgICAgICAgICAgbV90b2tlbnMuYXBwZW5k
KHRva2VuMyk7CisgICAgICAgICAgICBtX3Rva2Vucy5hcHBlbmQodG9rZW40KTsKKyAgICAgICAg
ICAgIG1fdG9rZW5zLmFwcGVuZCh0b2tlbjUpOworICAgICAgICB9CisKKyAgICAgICAgVG9rZW5z
KFRva2VuIHRva2VuMSwgVG9rZW4gdG9rZW4yLCBUb2tlbiB0b2tlbjMsIFRva2VuIHRva2VuNCwg
VG9rZW4gdG9rZW41LCBUb2tlbiB0b2tlbjYpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1fdG9r
ZW5zLmFwcGVuZCh0b2tlbjEpOworICAgICAgICAgICAgbV90b2tlbnMuYXBwZW5kKHRva2VuMik7
CisgICAgICAgICAgICBtX3Rva2Vucy5hcHBlbmQodG9rZW4zKTsKKyAgICAgICAgICAgIG1fdG9r
ZW5zLmFwcGVuZCh0b2tlbjQpOworICAgICAgICAgICAgbV90b2tlbnMuYXBwZW5kKHRva2VuNSk7
CisgICAgICAgICAgICBtX3Rva2Vucy5hcHBlbmQodG9rZW42KTsKKyAgICAgICAgfQorCisgICAg
ICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBUb2tlbnMmIG90aGVyKSBjb25zdAorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gbV90b2tlbnMgPT0gb3RoZXIubV90b2tlbnM7CisgICAgICAg
IH0KKworICAgICAgICBTdHJpbmcgdG9TdHJpbmcoKSBjb25zdCB7CisgICAgICAgICAgICBTdHJp
bmdCdWlsZGVyIGJ1aWxkZXI7CisgICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgiVG9rZW5zKCIp
OworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4IDwgbV90b2tlbnMu
c2l6ZSgpOyArK2luZGV4KSB7CisgICAgICAgICAgICAgICAgaWYgKGluZGV4KQorICAgICAgICAg
ICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgiLCIpOworICAgICAgICAgICAgICAgIGJ1aWxkZXIu
YXBwZW5kKG1fdG9rZW5zW2luZGV4XS50b1N0cmluZygpKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGJ1aWxkZXIuYXBwZW5kKCIpIik7CisgICAgICAgICAgICByZXR1cm4gYnVpbGRlci50
b1N0cmluZygpOworICAgICAgICB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBWZWN0b3I8VG9r
ZW4+IG1fdG9rZW5zOworICAgIH07CisKK3Byb3RlY3RlZDoKKyAgICBUb2tlbnMgcGFyc2UoY29u
c3QgU3RyaW5nJiBmb3JtYXRTdHJpbmcpCisgICAgeworICAgICAgICBUb2tlbkhhbmRsZXIgaGFu
ZGxlcjsKKyAgICAgICAgRGF0ZVRpbWVGb3JtYXQgZm9ybWF0KGhhbmRsZXIpOworICAgICAgICBp
ZiAoIWZvcm1hdC5wYXJzZShmb3JtYXRTdHJpbmcpKQorICAgICAgICAgICAgcmV0dXJuIFRva2Vu
cyhUb2tlbigiKmZhaWxlZCoiKSk7CisgICAgICAgIHJldHVybiBoYW5kbGVyLnRva2VucygpOwor
ICAgIH0KKworICAgIEZpZWxkVHlwZSBzaW5nbGUoY29uc3QgY2hhciBjaCkKKyAgICB7CisgICAg
ICAgIGNoYXIgZm9ybWF0U3RyaW5nWzJdOworICAgICAgICBmb3JtYXRTdHJpbmdbMF0gPSBjaDsK
KyAgICAgICAgZm9ybWF0U3RyaW5nWzFdID0gMDsKKyAgICAgICAgVG9rZW5IYW5kbGVyIGhhbmRs
ZXI7CisgICAgICAgIERhdGVUaW1lRm9ybWF0IGZvcm1hdChoYW5kbGVyKTsKKyAgICAgICAgaWYg
KCFmb3JtYXQucGFyc2UoZm9ybWF0U3RyaW5nKSkKKyAgICAgICAgICAgIHJldHVybiBEYXRlVGlt
ZUZvcm1hdDo6RmllbGRUeXBlSW52YWxpZDsKKyAgICAgICAgcmV0dXJuIGhhbmRsZXIuZmllbGRU
eXBlKDApOworICAgIH0KKworcHJpdmF0ZToKKyAgICBjbGFzcyBUb2tlbkhhbmRsZXIgOiBwdWJs
aWMgRGF0ZVRpbWVGb3JtYXQ6OlRva2VuSGFuZGxlciB7CisgICAgcHVibGljOgorICAgICAgICB2
aXJ0dWFsIH5Ub2tlbkhhbmRsZXIoKSB7IH0KKworICAgICAgICBGaWVsZFR5cGUgZmllbGRUeXBl
KGludCBpbmRleCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGluZGV4ID49
MCAmJiBpbmRleCA8IHN0YXRpY19jYXN0PGludD4obV90b2tlbnMuc2l6ZSgpKSA/IG1fdG9rZW5z
W2luZGV4XS5maWVsZFR5cGUgOiBEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlSW52YWxpZDsKKyAg
ICAgICAgfQorCisgICAgICAgIFRva2VucyB0b2tlbnMoKSBjb25zdCB7IHJldHVybiBUb2tlbnMo
bV90b2tlbnMpOyB9CisKKyAgICBwcml2YXRlOgorICAgICAgICB2aXJ0dWFsIHZvaWQgZ290Rmll
bGQoRmllbGRUeXBlIGZpZWxkVHlwZSwgaW50IGNvdW50KQorICAgICAgICB7CisgICAgICAgICAg
ICBtX3Rva2Vucy5hcHBlbmQoVG9rZW4oZmllbGRUeXBlLCBjb3VudCkpOworICAgICAgICB9CisK
KyAgICAgICAgdmlydHVhbCB2b2lkIGdvdExpdGVyYWwoY29uc3QgU3RyaW5nJiBzdHJpbmcpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIG1fdG9rZW5zLmFwcGVuZChUb2tlbihzdHJpbmcpKTsKKyAg
ICAgICAgfQorCisgICAgICAgIFZlY3RvcjxUb2tlbj4gbV90b2tlbnM7CisgICAgfTsKK307CisK
K3N0ZDo6b3N0cmVhbSYgb3BlcmF0b3I8PChzdGQ6Om9zdHJlYW0mIG9zLCBjb25zdCBEYXRlVGlt
ZUZvcm1hdFRlc3Q6OlRva2VucyYgdG9rZW5zKQoreworICAgIHJldHVybiBvcyA8PCB0b2tlbnMu
dG9TdHJpbmcoKS5hc2NpaSgpLmRhdGEoKTsKK30KKworVEVTVF9GKERhdGVUaW1lRm9ybWF0VGVz
dCwgQ29tbW9uUGF0dGVybikKK3sKKyAgICBFWFBFQ1RfRVEoVG9rZW5zKCksIHBhcnNlKCIiKSk7
CisKKyAgICBFWFBFQ1RfRVEoCisgICAgICAgIFRva2VucygKKyAgICAgICAgICAgIFRva2VuKERh
dGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVZZWFyLCA0KSwgVG9rZW4oIi0iKSwKKyAgICAgICAgICAg
IFRva2VuKERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVNb250aCwgMiksIFRva2VuKCItIiksCisg
ICAgICAgICAgICBUb2tlbihEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlRGF5T2ZNb250aCwgMikp
LAorICAgICAgICBwYXJzZSgieXl5eS1NTS1kZCIpKTsKKworICAgIEVYUEVDVF9FUSgKKyAgICAg
ICAgVG9rZW5zKAorICAgICAgICAgICAgVG9rZW4oRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZUhv
dXIyNCwgMiksIFRva2VuKCI6IiksCisgICAgICAgICAgICBUb2tlbihEYXRlVGltZUZvcm1hdDo6
RmllbGRUeXBlTWludXRlLCAyKSwgVG9rZW4oIjoiKSwKKyAgICAgICAgICAgIFRva2VuKERhdGVU
aW1lRm9ybWF0OjpGaWVsZFR5cGVTZWNvbmQsIDIpKSwKKyAgICAgICAgcGFyc2UoImtrOm1tOnNz
IikpOworCisgICAgRVhQRUNUX0VRKAorICAgICAgICBUb2tlbnMoCisgICAgICAgICAgICBUb2tl
bihEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlSG91cjEyKSwgVG9rZW4oIjoiKSwKKyAgICAgICAg
ICAgIFRva2VuKERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVNaW51dGUpLCBUb2tlbigiICIpLAor
ICAgICAgICAgICAgVG9rZW4oRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZVBlcmlvZCkpLAorICAg
ICAgICBwYXJzZSgiaDptIGEiKSk7CisKKyAgICBFWFBFQ1RfRVEoCisgICAgICAgIFRva2VucygK
KyAgICAgICAgICAgIFRva2VuKERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVZZWFyKSwgVG9rZW4o
Ik5lbiAiKSwKKyAgICAgICAgICAgIFRva2VuKERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVNb250
aCksIFRva2VuKCJHZXRzdSAiKSwKKyAgICAgICAgICAgIFRva2VuKERhdGVUaW1lRm9ybWF0OjpG
aWVsZFR5cGVEYXlPZk1vbnRoKSwgVG9rZW4oIk5pY2hpIikpLAorICAgICAgICBwYXJzZSgieSdO
ZW4nIE0nR2V0c3UnIGQnTmljaGknIikpOworfQorCitURVNUX0YoRGF0ZVRpbWVGb3JtYXRUZXN0
LCBNaXNzaW5nQ2xvc2luZ1F1b3RlKQoreworICAgIEVYUEVDVF9FUShUb2tlbnMoIipmYWlsZWQq
IiksIHBhcnNlKCInZm9vIikpOworICAgIEVYUEVDVF9FUShUb2tlbnMoIipmYWlsZWQqIiksIHBh
cnNlKCJmbydvIikpOworICAgIEVYUEVDVF9FUShUb2tlbnMoIipmYWlsZWQqIiksIHBhcnNlKCJm
b28nIikpOworfQorCitURVNUX0YoRGF0ZVRpbWVGb3JtYXRUZXN0LCBRdW90ZSkKK3sKKyAgICBF
WFBFQ1RfRVEoVG9rZW5zKCJGb29CYXIiKSwgcGFyc2UoIidGb29CYXInIikpOworICAgIEVYUEVD
VF9FUShUb2tlbnMoIiciKSwgcGFyc2UoIicnIikpOworICAgIEVYUEVDVF9FUShUb2tlbnMoIict
JyIpLCBwYXJzZSgiJyctJyciKSk7CisgICAgRVhQRUNUX0VRKFRva2VucygiRm9vJ0JhciIpLCBw
YXJzZSgiJ0ZvbycnQmFyJyIpKTsKKyAgICBFWFBFQ1RfRVEoCisgICAgICAgIFRva2VucyhUb2tl
bihEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlRXJhKSwgVG9rZW4oIidzIikpLAorICAgICAgICBw
YXJzZSgiRycnJ3MnIikpOworICAgIEVYUEVDVF9FUSgKKyAgICAgICAgVG9rZW5zKFRva2VuKERh
dGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVFcmEpLCBUb2tlbigiJyIpLCBUb2tlbihEYXRlVGltZUZv
cm1hdDo6RmllbGRUeXBlU2Vjb25kKSksCisgICAgICAgIHBhcnNlKCJHJydzIikpOworfQorCitU
RVNUX0YoRGF0ZVRpbWVGb3JtYXRUZXN0LCBTaW5nbGVMb3dlckNhc2VDaGFyYWN0ZXIpCit7Cisg
ICAgRVhQRUNUX0VRKERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVJbnZhbGlkLCBzaW5nbGUoJ2In
KSk7CisgICAgRVhQRUNUX0VRKERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVMb2NhbERheU9mV2Vl
a1N0YW5kQWxvbiwgc2luZ2xlKCdjJykpOworICAgIEVYUEVDVF9FUShEYXRlVGltZUZvcm1hdDo6
RmllbGRUeXBlRGF5T2ZNb250aCwgc2luZ2xlKCdkJykpOworICAgIEVYUEVDVF9FUShEYXRlVGlt
ZUZvcm1hdDo6RmllbGRUeXBlTG9jYWxEYXlPZldlZWssIHNpbmdsZSgnZScpKTsKKyAgICBFWFBF
Q1RfRVEoRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZU1vZGlmaWVkSnVsaWFuRGF5LCBzaW5nbGUo
J2cnKSk7CisgICAgRVhQRUNUX0VRKERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVIb3VyMTIsIHNp
bmdsZSgnaCcpKTsKKyAgICBFWFBFQ1RfRVEoRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZUhvdXIy
NCwgc2luZ2xlKCdrJykpOworICAgIEVYUEVDVF9FUShEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBl
TWludXRlLCBzaW5nbGUoJ20nKSk7CisgICAgRVhQRUNUX0VRKERhdGVUaW1lRm9ybWF0OjpGaWVs
ZFR5cGVRdWF0ZXJTdGFuZEFsb25lLCBzaW5nbGUoJ3EnKSk7CisgICAgRVhQRUNUX0VRKERhdGVU
aW1lRm9ybWF0OjpGaWVsZFR5cGVTZWNvbmQsIHNpbmdsZSgncycpKTsKKyAgICBFWFBFQ1RfRVEo
RGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZUV4dGVuZGVkWWVhciwgc2luZ2xlKCd1JykpOworICAg
IEVYUEVDVF9FUShEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlTm9uTG9jYXRpb25ab25lLCBzaW5n
bGUoJ3YnKSk7CisgICAgRVhQRUNUX0VRKERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVXZWVrT2ZN
b250aCwgc2luZ2xlKCd3JykpOworICAgIEVYUEVDVF9FUShEYXRlVGltZUZvcm1hdDo6RmllbGRU
eXBlWWVhciwgc2luZ2xlKCd5JykpOworICAgIEVYUEVDVF9FUShEYXRlVGltZUZvcm1hdDo6Rmll
bGRUeXBlWm9uZSwgc2luZ2xlKCd6JykpOworfQorCitURVNUX0YoRGF0ZVRpbWVGb3JtYXRUZXN0
LCBTaW5nbGVMb3dlckNhc2VJbnZhbGlkKQoreworICAgIEVYUEVDVF9FUShEYXRlVGltZUZvcm1h
dDo6RmllbGRUeXBlUGVyaW9kLCBzaW5nbGUoJ2EnKSk7CisgICAgRVhQRUNUX0VRKERhdGVUaW1l
Rm9ybWF0OjpGaWVsZFR5cGVJbnZhbGlkLCBzaW5nbGUoJ2YnKSk7CisgICAgRVhQRUNUX0VRKERh
dGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVJbnZhbGlkLCBzaW5nbGUoJ2knKSk7CisgICAgRVhQRUNU
X0VRKERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVJbnZhbGlkLCBzaW5nbGUoJ2onKSk7CisgICAg
RVhQRUNUX0VRKERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVJbnZhbGlkLCBzaW5nbGUoJ2wnKSk7
CisgICAgRVhQRUNUX0VRKERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVJbnZhbGlkLCBzaW5nbGUo
J24nKSk7CisgICAgRVhQRUNUX0VRKERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVJbnZhbGlkLCBz
aW5nbGUoJ28nKSk7CisgICAgRVhQRUNUX0VRKERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVJbnZh
bGlkLCBzaW5nbGUoJ3AnKSk7CisgICAgRVhQRUNUX0VRKERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5
cGVJbnZhbGlkLCBzaW5nbGUoJ3InKSk7CisgICAgRVhQRUNUX0VRKERhdGVUaW1lRm9ybWF0OjpG
aWVsZFR5cGVJbnZhbGlkLCBzaW5nbGUoJ3QnKSk7CisgICAgRVhQRUNUX0VRKERhdGVUaW1lRm9y
bWF0OjpGaWVsZFR5cGVJbnZhbGlkLCBzaW5nbGUoJ3gnKSk7Cit9CisKK1RFU1RfRihEYXRlVGlt
ZUZvcm1hdFRlc3QsIFNpbmdsZVVwcGVyQ2FzZUNoYXJhY3RlcikKK3sKKyAgICBFWFBFQ1RfRVEo
RGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZU1pbGxpc2Vjb25kc0luRGF5LCBzaW5nbGUoJ0EnKSk7
CisgICAgRVhQRUNUX0VRKERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVEYXlPZlllYXIsIHNpbmds
ZSgnRCcpKTsKKyAgICBFWFBFQ1RfRVEoRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZURheU9mV2Vl
aywgc2luZ2xlKCdFJykpOworICAgIEVYUEVDVF9FUShEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBl
RGF5T2ZXZWVrSW5Nb250aCwgc2luZ2xlKCdGJykpOworICAgIEVYUEVDVF9FUShEYXRlVGltZUZv
cm1hdDo6RmllbGRUeXBlRXJhLCBzaW5nbGUoJ0cnKSk7CisgICAgRVhQRUNUX0VRKERhdGVUaW1l
Rm9ybWF0OjpGaWVsZFR5cGVIb3VyMjMsIHNpbmdsZSgnSCcpKTsKKyAgICBFWFBFQ1RfRVEoRGF0
ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZUhvdXIxMSwgc2luZ2xlKCdLJykpOworICAgIEVYUEVDVF9F
UShEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlTW9udGhTdGFuZEFsb25lLCBzaW5nbGUoJ0wnKSk7
CisgICAgRVhQRUNUX0VRKERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVNb250aCwgc2luZ2xlKCdN
JykpOworICAgIEVYUEVDVF9FUShEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlUXVhdGVyLCBzaW5n
bGUoJ1EnKSk7CisgICAgRVhQRUNUX0VRKERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVGcmFjdGlv
bmFsU2Vjb25kLCBzaW5nbGUoJ1MnKSk7CisgICAgRVhQRUNUX0VRKERhdGVUaW1lRm9ybWF0OjpG
aWVsZFR5cGVXZWVrT2ZZZWFyLCBzaW5nbGUoJ1cnKSk7CisgICAgRVhQRUNUX0VRKERhdGVUaW1l
Rm9ybWF0OjpGaWVsZFR5cGVZZWFyT2ZXZWVrT2ZZZWFyLCBzaW5nbGUoJ1knKSk7CisgICAgRVhQ
RUNUX0VRKERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVSRkM4MjJab25lLCBzaW5nbGUoJ1onKSk7
Cit9CisKK1RFU1RfRihEYXRlVGltZUZvcm1hdFRlc3QsIFNpbmdsZVVwcGVyQ2FzZUludmFsaWQp
Cit7CisgICAgRVhQRUNUX0VRKERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVJbnZhbGlkLCBzaW5n
bGUoJ0InKSk7CisgICAgRVhQRUNUX0VRKERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVJbnZhbGlk
LCBzaW5nbGUoJ0MnKSk7CisgICAgRVhQRUNUX0VRKERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVJ
bnZhbGlkLCBzaW5nbGUoJ0knKSk7CisgICAgRVhQRUNUX0VRKERhdGVUaW1lRm9ybWF0OjpGaWVs
ZFR5cGVJbnZhbGlkLCBzaW5nbGUoJ0onKSk7CisgICAgRVhQRUNUX0VRKERhdGVUaW1lRm9ybWF0
OjpGaWVsZFR5cGVJbnZhbGlkLCBzaW5nbGUoJ04nKSk7CisgICAgRVhQRUNUX0VRKERhdGVUaW1l
Rm9ybWF0OjpGaWVsZFR5cGVJbnZhbGlkLCBzaW5nbGUoJ08nKSk7CisgICAgRVhQRUNUX0VRKERh
dGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVJbnZhbGlkLCBzaW5nbGUoJ1AnKSk7CisgICAgRVhQRUNU
X0VRKERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVJbnZhbGlkLCBzaW5nbGUoJ1InKSk7CisgICAg
RVhQRUNUX0VRKERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVJbnZhbGlkLCBzaW5nbGUoJ1QnKSk7
CisgICAgRVhQRUNUX0VRKERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVJbnZhbGlkLCBzaW5nbGUo
J1UnKSk7CisgICAgRVhQRUNUX0VRKERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVJbnZhbGlkLCBz
aW5nbGUoJ1YnKSk7CisgICAgRVhQRUNUX0VRKERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVJbnZh
bGlkLCBzaW5nbGUoJ1gnKSk7Cit9CisKKyNlbmRpZgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>149496</attachid>
            <date>2012-06-26 02:42:16 -0700</date>
            <delta_ts>2012-07-11 01:28:51 -0700</delta_ts>
            <desc>Patch 4 - Code Complete</desc>
            <filename>bug-88970-20120626184216.patch</filename>
            <type>text/plain</type>
            <size>111406</size>
            <attacher>yosin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIxMjA1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYWE4Y2MzMjM3NzQ3NjJl
ZGEzZDA5YmU1YzQwOGI2YTNiZmM1ZTcyZi4uOGUyYTc5YWI3YWEwODY4MWYzNmI5MmJlMzkyMTRj
Yjk2OWU3OTNhYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDcyIEBACisyMDEyLTA2LTEzICBZb3No
aWZ1bWkgSW5vdWUgIDx5b3NpbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW0Zvcm1dIFRpbWUg
aW5wdXQgZmllbGRzIFVJCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD04ODk3MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFdJUDogRm9yIGFyY2hpdGVjdHVyZSByZXZpZXdpbmcuCisKKyAgICAgICAgTm8gbmV3
IHRlc3RzLiBJJ2xsIHByb3ZpZGUgdGVzdHMuCisKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6Cisg
ICAgICAgICogaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxJbnB1dEVsZW1lbnQ6OmlzTW91c2VGb2N1c2FibGUpOgorICAgICAgICAqIGh0bWwvVGltZUlu
cHV0VHlwZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUaW1lSW5wdXRUeXBlOjpjcmVhdGVTdGVw
UmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6VGltZUlucHV0VHlwZTo6aXNUaW1lRmllbGQpOgor
ICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpUaW1lTW9kZWw6OmRlZmF1bHRW
YWx1ZUZvclN0ZXBVcCk6CisgICAgICAgIChXZWJDb3JlOjpUaW1lSW5wdXRUeXBlOjpjb250cm9s
VmFsdWVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlRpbWVJbnB1dFR5cGU6OmNyZWF0ZVNo
YWRvd1N1YnRyZWUpOgorICAgICAgICAoV2ViQ29yZTo6VGltZUlucHV0VHlwZTo6ZGVzdHJveVNo
YWRvd1N1YnRyZWUpOgorICAgICAgICAoV2ViQ29yZTo6VGltZUlucHV0VHlwZTo6Zm9yd2FyZEV2
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlRpbWVJbnB1dFR5cGU6OmRpc2FibGVkQXR0cmlidXRl
Q2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpUaW1lSW5wdXRUeXBlOjpoYW5kbGVET01BY3Rp
dmF0ZUV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlRpbWVJbnB1dFR5cGU6OnJlYWRvbmx5QXR0
cmlidXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpCYXNlRGF0ZUFuZFRpbWVXaXRob3V0
VGV4dEZpZWxkSW5wdXRUeXBlOjpjb252ZXJ0RnJvbVZpc2libGVWYWx1ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpCYXNlRGF0ZUFuZFRpbWVXaXRob3V0VGV4dEZpZWxkSW5wdXRUeXBlOjpkZWZhdWx0
VmFsdWVGb3JTdGVwVXApOgorICAgICAgICAoV2ViQ29yZTo6QmFzZURhdGVBbmRUaW1lV2l0aG91
dFRleHRGaWVsZElucHV0VHlwZTo6bG9jYWxpemVWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpC
YXNlRGF0ZUFuZFRpbWVXaXRob3V0VGV4dEZpZWxkSW5wdXRUeXBlOjpwYXJzZVRvTnVtYmVyKToK
KyAgICAgICAgKFdlYkNvcmU6OkJhc2VEYXRlQW5kVGltZVdpdGhvdXRUZXh0RmllbGRJbnB1dFR5
cGU6OnNhbml0aXplVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QmFzZURhdGVBbmRUaW1lV2l0
aG91dFRleHRGaWVsZElucHV0VHlwZTo6c2VyaWFsaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkJh
c2VEYXRlQW5kVGltZVdpdGhvdXRUZXh0RmllbGRJbnB1dFR5cGU6OnNldFZhbHVlQXNEYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkJhc2VEYXRlQW5kVGltZVdpdGhvdXRUZXh0RmllbGRJbnB1dFR5
cGU6OnNldFZhbHVlQXNJbnB1dE51bWJlcik6CisgICAgICAgIChXZWJDb3JlOjpCYXNlRGF0ZUFu
ZFRpbWVXaXRob3V0VGV4dEZpZWxkSW5wdXRUeXBlOjp0eXBlTWlzbWF0Y2gpOgorICAgICAgICAo
V2ViQ29yZTo6QmFzZURhdGVBbmRUaW1lV2l0aG91dFRleHRGaWVsZElucHV0VHlwZTo6dmFsdWVB
c0RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6QmFzZURhdGVBbmRUaW1lV2l0aG91dFRleHRGaWVs
ZElucHV0VHlwZTo6dmFsdWVBc0RvdWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpCYXNlRGF0ZUFu
ZFRpbWVXaXRob3V0VGV4dEZpZWxkSW5wdXRUeXBlOjp2aXNpYmxlVmFsdWUpOgorICAgICAgICAo
V2ViQ29yZTo6VGltZUlucHV0VHlwZTo6ZGF0ZVR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6VGlt
ZUlucHV0VHlwZTo6ZGVmYXVsdFZhbHVlRm9yU3RlcFVwKToKKyAgICAgICAgKiBodG1sL1RpbWVJ
bnB1dFR5cGUuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoQmFzZURhdGVBbmRUaW1l
V2l0aG91dFRleHRGaWVsZElucHV0VHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpCYXNlRGF0ZUFu
ZFRpbWVXaXRob3V0VGV4dEZpZWxkSW5wdXRUeXBlOjpCYXNlRGF0ZUFuZFRpbWVXaXRob3V0VGV4
dEZpZWxkSW5wdXRUeXBlKToKKyAgICAgICAgKFRpbWVNb2RlbCk6CisgICAgICAgIChXZWJDb3Jl
OjpUaW1lTW9kZWw6OlRpbWVNb2RlbCk6CisgICAgICAgIChUaW1lSW5wdXRUeXBlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlRpbWVJbnB1dFR5cGU6OlRpbWVJbnB1dFR5cGUpOgorICAgICAgICAqIGh0
bWwvc2hhZG93L1RleHRDb250cm9sSW5uZXJFbGVtZW50cy5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTcGluQnV0dG9uRWxlbWVudDo6U3BpbkJ1dHRvbkVsZW1lbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6U3BpbkJ1dHRvbkVsZW1lbnQ6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTcGluQnV0
dG9uRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcik6CisgICAgICAgICogaHRtbC9zaGFkb3cv
VGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmg6CisgICAgICAgIChDYWxsYmFjayk6CisgICAgICAg
IChTcGluQnV0dG9uRWxlbWVudCk6CisKKzIwMTItMDYtMjUgIEpheSBDaXZlbGxpICA8amNpdmVs
bGlAY2hyb21pdW0ub3JnPgorCisgICAgICAgIEZpeCBwcm9ncmVzcyBsb2FkIHJlcG9ydGluZyBm
b3IgTUhUTUwgZG9jdW1lbnRzLgorCisgICAgICAgIE1IVE1MIGRvY3VtZW50cyBjb250YWluaW5n
IHJlZmVyZW5jZXMgdG8gcmVzb3VyY2VzIHRoZXkgZG9uJ3QgaW5jbHVkZQorICAgICAgICBuZXZl
ciBmaW5pc2ggbG9hZGluZy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTcxODU5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTmF0ZSBDaGFwaW4uCisKKyAg
ICAgICAgKiBsb2FkZXIvRG9jdW1lbnRMb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9j
dW1lbnRMb2FkZXI6OnNjaGVkdWxlQXJjaGl2ZUxvYWQpOgorCiAyMDEyLTA2LTI1ICBKYW1lcyBS
b2JpbnNvbiAgPGphbWVzckBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW2Nocm9taXVtXSBVc2Ug
V2ViR3JhcGhpY3NDb250ZXh0M0QgaW4gY29tcG9zaXRvciBpbXBsZW1lbnRhdGlvbgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZwppbmRleCAxOTYzZjgxNzYzYjNmYjQ5ZTAxNTE4MGVhM2UzMzdkMjFh
YTViMTc2Li5lYWI4YzQ2NjRmZGI0NDcwYzY3ZGMxNDk1MzZlMmYzMzJmMThiZGY2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQwIEBACisyMDEyLTA2LTI1ICBKYXkgQ2l2
ZWxsaSAgPGpjaXZlbGxpQGNocm9taXVtLm9yZz4KKworICAgICAgICBGaXggcHJvZ3Jlc3MgbG9h
ZCByZXBvcnRpbmcgZm9yIE1IVE1MIGRvY3VtZW50cy4KKworICAgICAgICBNSFRNTCBkb2N1bWVu
dHMgY29udGFpbmluZyByZWZlcmVuY2VzIHRvIHJlc291cmNlcyB0aGV5IGRvbid0IGluY2x1ZGUK
KyAgICAgICAgbmV2ZXIgZmluaXNoIGxvYWRpbmcuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MTg1OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5hdGUg
Q2hhcGluLgorCisgICAgICAgICogdGVzdHMvRXZlbnRMaXN0ZW5lclRlc3QuY3BwOgorICAgICAg
ICAqIHRlc3RzL0ZyYW1lVGVzdEhlbHBlcnMuY3BwOgorICAgICAgICAoRnJhbWVUZXN0SGVscGVy
cyk6CisgICAgICAgIChXZWJLaXQ6OkZyYW1lVGVzdEhlbHBlcnM6OnJlZ2lzdGVyTW9ja2VkVVJM
TG9hZCk6CisgICAgICAgIChXZWJLaXQ6OkZyYW1lVGVzdEhlbHBlcnM6OnJlZ2lzdGVyTW9ja2Vk
VVJMTG9hZEFzSFRNTCk6CisgICAgICAgIChXZWJLaXQ6OkZyYW1lVGVzdEhlbHBlcnM6OmNyZWF0
ZVdlYlZpZXdBbmRMb2FkKToKKyAgICAgICAgKiB0ZXN0cy9GcmFtZVRlc3RIZWxwZXJzLmg6Cisg
ICAgICAgIChGcmFtZVRlc3RIZWxwZXJzKToKKyAgICAgICAgKiB0ZXN0cy9MaXN0ZW5lckxlYWtU
ZXN0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6TGlzdGVuZXJMZWFrVGVzdDo6UnVuVGVzdCk6Cisg
ICAgICAgICogdGVzdHMvV2ViRnJhbWVUZXN0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViRnJh
bWVUZXN0OjpyZWdpc3Rlck1vY2tlZEh0dHBVUkxMb2FkKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
RnJhbWVUZXN0OjpyZWdpc3Rlck1vY2tlZENocm9tZVVSTExvYWQpOgorICAgICAgICAqIHRlc3Rz
L1dlYlZpZXdUZXN0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6VEVTVF9GKToKKyAgICAgICAgKFdl
YktpdDo6V2ViVmlld1Rlc3Q6OnRlc3RBdXRvUmVzaXplKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
Vmlld1Rlc3Q6OnRlc3RUZXh0SW5wdXRUeXBlKToKKyAgICAgICAgKFRlc3RXZWJWaWV3Q2xpZW50
KToKKyAgICAgICAgKFdlYktpdDo6VGVzdFdlYlZpZXdDbGllbnQ6OlRlc3RXZWJWaWV3Q2xpZW50
KToKKyAgICAgICAgKFdlYktpdDo6VGVzdFdlYlZpZXdDbGllbnQ6OmRpZFN0YXJ0TG9hZGluZyk6
CisgICAgICAgIChXZWJLaXQ6OlRlc3RXZWJWaWV3Q2xpZW50OjpkaWRTdG9wTG9hZGluZyk6Cisg
ICAgICAgIChXZWJLaXQ6OlRlc3RXZWJWaWV3Q2xpZW50OjpkaWRDaGFuZ2VMb2FkUHJvZ3Jlc3Mp
OgorICAgICAgICAoV2ViS2l0OjpUZXN0V2ViVmlld0NsaWVudDo6bG9hZGluZ1N0YXJ0ZWQpOgor
ICAgICAgICAoV2ViS2l0OjpUZXN0V2ViVmlld0NsaWVudDo6bG9hZGluZ1N0b3BwZWQpOgorICAg
ICAgICAoV2ViS2l0OjpUZXN0V2ViVmlld0NsaWVudDo6bG9hZFByb2dyZXNzKToKKyAgICAgICAg
KFdlYktpdCk6CisKIDIwMTItMDYtMjUgIEphbWVzIFJvYmluc29uICA8amFtZXNyQGNocm9taXVt
Lm9yZz4KIAogICAgICAgICBbY2hyb21pdW1dIFVzZSBXZWJHcmFwaGljc0NvbnRleHQzRCBpbiBj
b21wb3NpdG9yIGltcGxlbWVudGF0aW9uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggZTllYmQ2YzFmNGUz
OGRkODI1MDQ0ZWUxNDEwOWM0MWMzOWFlOWI0Mi4uMzVkNDE0MWYyZTVkNjcxNGQwYTYzNDVhZWQw
NWYwN2EyNDVjZTQxZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisr
KyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtNDkzLDYgKzQ5Myw3IEBACiAgICAg
ICAgICAgICAncGxhdGZvcm0vdGV4dC9CaWRpUnVuTGlzdC5oJywKICAgICAgICAgICAgICdwbGF0
Zm9ybS90ZXh0L0JpZGlDb250ZXh0LmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL3RleHQvQmlk
aVJlc29sdmVyLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL3RleHQvRGF0ZVRpbWVGb3JtYXQu
aCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vdGV4dC9EZWNvZGVFc2NhcGVTZXF1ZW5jZXMuaCcs
CiAgICAgICAgICAgICAncGxhdGZvcm0vdGV4dC9MaW5lQnJlYWtJdGVyYXRvclBvb2xJQ1UuaCcs
CiAgICAgICAgICAgICAncGxhdGZvcm0vdGV4dC9MaW5lRW5kaW5nLmgnLApAQCAtNDU1NCw2ICs0
NTU1LDcgQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS90ZXh0L0F0b21pY1N0cmluZ0tleWVkTVJV
Q2FjaGUuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vdGV4dC9CYXNlNjQuY3BwJywKICAgICAg
ICAgICAgICdwbGF0Zm9ybS90ZXh0L0JpZGlDb250ZXh0LmNwcCcsCisgICAgICAgICAgICAncGxh
dGZvcm0vdGV4dC9EYXRlVGltZUZvcm1hdC5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL3Rl
eHQvSHlwaGVuYXRpb24uY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS90ZXh0L0h5cGhlbmF0
aW9uLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL3RleHQvTGluZUVuZGluZy5jcHAnLApAQCAt
NTg2Myw2ICs1ODY1LDEwIEBACiAgICAgICAgICAgICAnaHRtbC9zaGFkb3cvQ29udGVudERpc3Ry
aWJ1dG9yLmgnLAogICAgICAgICAgICAgJ2h0bWwvc2hhZG93L0NvbnRlbnRTZWxlY3RvclF1ZXJ5
LmNwcCcsCiAgICAgICAgICAgICAnaHRtbC9zaGFkb3cvQ29udGVudFNlbGVjdG9yUXVlcnkuaCcs
CisgICAgICAgICAgICAnaHRtbC9zaGFkb3cvRGF0ZVRpbWVFZGl0RWxlbWVudC5jcHAnLAorICAg
ICAgICAgICAgJ2h0bWwvc2hhZG93L0RhdGVUaW1lRWRpdEVsZW1lbnQuaCcsCisgICAgICAgICAg
ICAnaHRtbC9zaGFkb3cvRGF0ZVRpbWVGaWVsZEVsZW1lbnRzLmNwcCcsCisgICAgICAgICAgICAn
aHRtbC9zaGFkb3cvRGF0ZVRpbWVGaWVsZEVsZW1lbnRzLmgnLAogICAgICAgICAgICAgJ2h0bWwv
c2hhZG93L0RldGFpbHNNYXJrZXJDb250cm9sLmNwcCcsCiAgICAgICAgICAgICAnaHRtbC9zaGFk
b3cvRGV0YWlsc01hcmtlckNvbnRyb2wuaCcsCiAgICAgICAgICAgICAnaHRtbC9zaGFkb3cvSFRN
TENvbnRlbnRFbGVtZW50LmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvaHRt
bC5jc3MgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvaHRtbC5jc3MKaW5kZXggMTc2OWQ0OWYxOTRjNTVm
YmYyNDYzOGQ3YjhlYTBiZmMzNjY3ODFlYS4uM2FmOGNkZGRmYzA5YmRiMWQzNjJkNDEzMjBjODA3
NTQ0ZTI4Y2Q0NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL2h0bWwuY3NzCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2Nzcy9odG1sLmNzcwpAQCAtNDU4LDYgKzQ1OCw2NCBAQCBkYXRhbGlz
dCB7CiB9CiAjZW5kaWYKIAorCisjaWYgZGVmaW5lZChFTkFCTEVfVElNRV9JTlBVVF9GSUVMRFMp
ICYmIEVOQUJMRV9USU1FX0lOUFVUX0ZJRUxEUworaW5wdXQ6Oi13ZWJraXQtZGF0ZXRpbWUtZWRp
dCB7CisgICAgZGlzcGxheTogLXdlYmtpdC1ib3g7CisgICAgLXdlYmtpdC1ib3gtYWxpZ246IGNl
bnRlcjsKK30KKworaW5wdXQ6Oi13ZWJraXQtZGF0ZXRpbWUtZWRpdC1ob3VyLWZpZWxkOmZvY3Vz
LAoraW5wdXQ6Oi13ZWJraXQtZGF0ZXRpbWUtZWRpdC1taWxsaXNlY29uZC1maWVsZDpmb2N1cywK
K2lucHV0Ojotd2Via2l0LWRhdGV0aW1lLWVkaXQtbWludXRlLWZpZWxkOmZvY3VzLAoraW5wdXQ6
Oi13ZWJraXQtZGF0ZXRpbWUtZWRpdC1ub29uLWZpZWxkOmZvY3VzLAoraW5wdXQ6Oi13ZWJraXQt
ZGF0ZXRpbWUtZWRpdC1zZWNvbmQtZmllbGQ6Zm9jdXMgeworICAgIGNvbG9yOiB3aGl0ZTsKKyAg
ICBiYWNrZ3JvdW5kOiAjMzI5N2ZkOworfQorCitpbnB1dDo6LXdlYmtpdC1kYXRldGltZS1lZGl0
LW1pbnV0ZS1maWVsZFtkaXNhYmxlZF0geworICAgIGNvbG9yOiBHcmF5VGV4dDsKK30KKworaW5w
dXQ6Oi13ZWJraXQtZGF0ZXRpbWUtZWRpdC1ob3VyLWZpZWxkIHsKKyAgICBkaXNwbGF5OiBpbmxp
bmUtYmxvY2s7CisgICAgYm9yZGVyOiBub25lOworICAgIHRleHQtYWxpZ246IHJpZ2h0OworICAg
IHdpZHRoOiAxZW07CisgICAgcGFkZGluZzogMnB4OworfQorCitpbnB1dDo6LXdlYmtpdC1kYXRl
dGltZS1lZGl0LW1pbGxpc2Vjb25kLWZpZWxkIHsKKyAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7
CisgICAgYm9yZGVyOiBub25lOworICAgIHRleHQtYWxpZ246IHJpZ2h0OworICAgIHdpZHRoOiAx
LjVlbTsKKyAgICBwYWRkaW5nOiAycHg7Cit9CisKK2lucHV0Ojotd2Via2l0LWRhdGV0aW1lLWVk
aXQtbWludXRlLWZpZWxkIHsKKyAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CisgICAgYm9yZGVy
OiBub25lOworICAgIHRleHQtYWxpZ246IHJpZ2h0OworICAgIHdpZHRoOiAxZW07CisgICAgcGFk
ZGluZzogMnB4OworfQorCitpbnB1dDo6LXdlYmtpdC1kYXRldGltZS1lZGl0LW5vb24tZmllbGQg
eworICAgIGJvcmRlcjogbm9uZTsKKyAgICBwYWRkaW5nOiAycHg7Cit9CisKK2lucHV0Ojotd2Vi
a2l0LWRhdGV0aW1lLWVkaXQtc2Vjb25kLWZpZWxkIHsKKyAgICBkaXNwbGF5OiBpbmxpbmUtYmxv
Y2s7CisgICAgYm9yZGVyOiBub25lOworICAgIHRleHQtYWxpZ246IHJpZ2h0OworICAgIHdpZHRo
OiAxZW07CisgICAgcGFkZGluZzogMnB4OworfQorI2VuZGlmCisKIGlucHV0Ojotd2Via2l0LWlu
bmVyLXNwaW4tYnV0dG9uIHsKICAgICAtd2Via2l0LWFwcGVhcmFuY2U6IGlubmVyLXNwaW4tYnV0
dG9uOwogICAgIGRpc3BsYXk6IGJsb2NrOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MSW5wdXRFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxl
bWVudC5jcHAKaW5kZXggNmZjZDE1OGYwMzFjNjNiMjZmMzU0NWZmY2M5YWFjZDc0OGIyYWM1Yi4u
NDdhNTgyNGFjYzM4NTAzYTVjMzVmZGE1NGIzZTM1ZWUwODJhYzQ5NCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwCkBAIC02NzIsNiArNjcyLDEwIEBAIHZvaWQgSFRN
TElucHV0RWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUoY29uc3QgQXR0cmlidXRlJiBhdHRyaWJ1dGUp
CiAgICAgfSBlbHNlIGlmIChhdHRyaWJ1dGUubmFtZSgpID09IG9ud2Via2l0c3BlZWNoY2hhbmdl
QXR0cikKICAgICAgICAgc2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkud2Vi
a2l0c3BlZWNoY2hhbmdlRXZlbnQsIGNyZWF0ZUF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIodGhpcywg
YXR0cmlidXRlKSk7CiAjZW5kaWYKKyNpZiBFTkFCTEUoVElNRV9JTlBVVF9GSUVMRFMpCisgICAg
aWYgKGF0dHJpYnV0ZS5uYW1lKCkgPT0gbWF4QXR0ciB8fCBhdHRyaWJ1dGUubmFtZSgpID09IG1p
bkF0dHIgfHwgYXR0cmlidXRlLm5hbWUoKSA9PSBzdGVwQXR0cikKKyAgICAgICAgbV9pbnB1dFR5
cGUtPnN0ZXBSYW5nZUNoYW5nZWQoKTsKKyNlbmRpZgogICAgIGVsc2UKICAgICAgICAgSFRNTFRl
eHRGb3JtQ29udHJvbEVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKGF0dHJpYnV0ZSk7CiAgICAgdXBk
YXRlSW5uZXJUZXh0VmFsdWUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSW5w
dXRUeXBlLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0lucHV0VHlwZS5oCmluZGV4IDQ1MTMwM2Qx
M2M0MjQwZmVjNzVhZDBlZjAwOTczMjNkMGUzMTNkYjkuLjFmNGE5ZDY1ZTEzOWY3ZGUyNmY0MzUx
NWNkMTg5NTMwNDZkYmQ3NzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSW5wdXRU
eXBlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9JbnB1dFR5cGUuaApAQCAtMjkxLDYgKzI5
MSwxMCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB1bnNpZ25lZCBoZWlnaHQoKSBjb25zdDsKICAg
ICB2aXJ0dWFsIHVuc2lnbmVkIHdpZHRoKCkgY29uc3Q7CiAKKyNpZiBFTkFCTEUoVElNRV9JTlBV
VF9GSUVMRFMpCisgICAgdmlydHVhbCB2b2lkIHN0ZXBSYW5nZUNoYW5nZWQoKSB7IH0KKyNlbmRp
ZgorCiBwcm90ZWN0ZWQ6CiAgICAgSW5wdXRUeXBlKEhUTUxJbnB1dEVsZW1lbnQqIGVsZW1lbnQp
IDogbV9lbGVtZW50KGVsZW1lbnQpIHsgfQogICAgIEhUTUxJbnB1dEVsZW1lbnQqIGVsZW1lbnQo
KSBjb25zdCB7IHJldHVybiBtX2VsZW1lbnQ7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvVGltZUlucHV0VHlwZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL1RpbWVJbnB1dFR5
cGUuY3BwCmluZGV4IDA1MmI4ODc1NjE3M2VjYTkyOTkyZWE1OTk3YWJkNTk2MjE3NzI1OGUuLjNl
NjQxZDNkNGE3NjYwMDk3YWU1YWMxNmU1MjkyZjZhOGViOGY2ZGQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvVGltZUlucHV0VHlwZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9UaW1lSW5wdXRUeXBlLmNwcApAQCAtNDEsNiArNDEsMTUgQEAKIAogI2lmIEVOQUJMRShJTlBV
VF9UWVBFX1RJTUUpCiAKKyNpZiBFTkFCTEUoVElNRV9JTlBVVF9GSUVMRFMpCisjaW5jbHVkZSAi
Q2hyb21lLmgiCisjaW5jbHVkZSAiQ2hyb21lQ2xpZW50LmgiCisjaW5jbHVkZSAiRWxlbWVudFNo
YWRvdy5oIgorI2luY2x1ZGUgIktleWJvYXJkRXZlbnQuaCIKKyNpbmNsdWRlICJQYWdlLmgiCisj
aW5jbHVkZSAiU2hhZG93Um9vdC5oIgorI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
dXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKQEAgLTEwOCw2ICsxMTcsMTE3IEBAIGJvb2wgVGlt
ZUlucHV0VHlwZTo6aXNUaW1lRmllbGQoKSBjb25zdAogICAgIHJldHVybiB0cnVlOwogfQogCisj
aWYgRU5BQkxFKFRJTUVfSU5QVVRfRklFTERTKQorCitUaW1lSW5wdXRUeXBlOjp+VGltZUlucHV0
VHlwZSgpCit7CisgICAgaWYgKG1fZGF0ZVRpbWVFZGl0RWxlbWVudCkKKyAgICAgICAgbV9kYXRl
VGltZUVkaXRFbGVtZW50LT5yZW1vdmVFdmVudEhhbmRsZXIoKTsKK30KKwordm9pZCBUaW1lSW5w
dXRUeXBlOjplZGl0Q29udHJvbFZhbHVlQ2hhbmdlZCgpCit7CisgICAgUmVmUHRyPEhUTUxJbnB1
dEVsZW1lbnQ+IGlucHV0KGVsZW1lbnQoKSk7CisgICAgRXhjZXB0aW9uQ29kZSBlYzsKKyAgICBJ
bnB1dFR5cGU6OnNldFZhbHVlQXNEb3VibGUobV9kYXRlVGltZUVkaXRFbGVtZW50LT52YWx1ZUFz
RG91YmxlKCksIERpc3BhdGNoTm9FdmVudCwgZWMpOworICAgIGlucHV0LT5kaXNwYXRjaEZvcm1D
b250cm9sSW5wdXRFdmVudCgpOworICAgIGlucHV0LT5kaXNwYXRjaEZvcm1Db250cm9sQ2hhbmdl
RXZlbnQoKTsKK30KKworUmVuZGVyT2JqZWN0KiBUaW1lSW5wdXRUeXBlOjpjcmVhdGVSZW5kZXJl
cihSZW5kZXJBcmVuYSogYXJlbmEsIFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gSW5wdXRUeXBlOjpjcmVhdGVSZW5kZXJlcihhcmVuYSwgc3R5bGUpOworfQorCit2b2lk
IFRpbWVJbnB1dFR5cGU6OmNyZWF0ZVNoYWRvd1N1YnRyZWUoKQoreworICAgIEFTU0VSVChlbGVt
ZW50KCktPnNoYWRvdygpKTsKKworICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGVsZW1lbnQoKS0+
ZG9jdW1lbnQoKTsKKyAgICBtX2RhdGVUaW1lRWRpdEVsZW1lbnQgPSBEYXRlVGltZUVkaXRFbGVt
ZW50OjpjcmVhdGUoZG9jdW1lbnQsICp0aGlzLCBjcmVhdGVTdGVwUmFuZ2UoQW55SXNEZWZhdWx0
U3RlcCkpOworICAgIGVsZW1lbnQoKS0+c2hhZG93KCktPm9sZGVzdFNoYWRvd1Jvb3QoKS0+YXBw
ZW5kQ2hpbGQobV9kYXRlVGltZUVkaXRFbGVtZW50KTsKKworICAgIENocm9tZUNsaWVudCogY2hy
b21lQ2xpZW50ID0gZG9jdW1lbnQtPnBhZ2UoKSA/IGRvY3VtZW50LT5wYWdlKCktPmNocm9tZSgp
LT5jbGllbnQoKSA6IDA7CisgICAgYm9vbCBzaG91bGRBZGREZWNvcmF0aW9ucyA9IGNocm9tZUNs
aWVudCAmJiBjaHJvbWVDbGllbnQtPndpbGxBZGRUZXh0RmllbGREZWNvcmF0aW9uc1RvKGVsZW1l
bnQoKSk7CisKKyAgICBpZiAoc2hvdWxkQWRkRGVjb3JhdGlvbnMpCisgICAgICAgIGNocm9tZUNs
aWVudC0+YWRkVGV4dEZpZWxkRGVjb3JhdGlvbnNUbyhlbGVtZW50KCkpOworCisgICAgRGF0ZUNv
bXBvbmVudHMgZGF0ZTsKKyAgICBpZiAocGFyc2VUb0RhdGVDb21wb25lbnRzKGVsZW1lbnQoKS0+
dmFsdWUoKSwgJmRhdGUpKQorICAgICAgICBtX2RhdGVUaW1lRWRpdEVsZW1lbnQtPnNldFZhbHVl
QXNEYXRlKGRhdGUpOworfQorCit2b2lkIFRpbWVJbnB1dFR5cGU6OmRlc3Ryb3lTaGFkb3dTdWJ0
cmVlKCkKK3sKKyAgICBtX2RhdGVUaW1lRWRpdEVsZW1lbnQtPnJlbW92ZUV2ZW50SGFuZGxlcigp
OworICAgIG1fZGF0ZVRpbWVFZGl0RWxlbWVudC5jbGVhcigpOworfQorCit2b2lkIFRpbWVJbnB1
dFR5cGU6OmZvcndhcmRFdmVudChFdmVudCogZXZlbnQpCit7CisgICAgaWYgKG1fZGF0ZVRpbWVF
ZGl0RWxlbWVudCkKKyAgICAgICAgbV9kYXRlVGltZUVkaXRFbGVtZW50LT5kZWZhdWx0RXZlbnRI
YW5kbGVyKGV2ZW50KTsKK30KKwordm9pZCBUaW1lSW5wdXRUeXBlOjpkaXNhYmxlZEF0dHJpYnV0
ZUNoYW5nZWQoKQoreworICAgIGlmIChtX2RhdGVUaW1lRWRpdEVsZW1lbnQpCisgICAgICAgIG1f
ZGF0ZVRpbWVFZGl0RWxlbWVudC0+ZGlzYWJsZWRBdHRyaWJ1dGVDaGFuZ2VkKCk7Cit9CisKK3Zv
aWQgVGltZUlucHV0VHlwZTo6aGFuZGxlS2V5ZG93bkV2ZW50KEtleWJvYXJkRXZlbnQqIGV2ZW50
KQoreworICAgIGZvcndhcmRFdmVudChldmVudCk7Cit9CisKK3ZvaWQgVGltZUlucHV0VHlwZTo6
aGFuZGxlRE9NQWN0aXZhdGVFdmVudChFdmVudCogZXZlbnQpCit7CisgICAgaWYgKGVsZW1lbnQo
KS0+ZGlzYWJsZWQoKSB8fCBlbGVtZW50KCktPnJlYWRPbmx5KCkgfHwgIWVsZW1lbnQoKS0+cmVu
ZGVyZXIoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1fZGF0ZVRpbWVFZGl0RWxlbWVu
dCkKKyAgICAgICAgbV9kYXRlVGltZUVkaXRFbGVtZW50LT5mb2N1cygpOworCisgICAgZXZlbnQt
PnNldERlZmF1bHRIYW5kbGVkKCk7Cit9CisKK2Jvb2wgVGltZUlucHV0VHlwZTo6aXNLZXlib2Fy
ZEZvY3VzYWJsZShLZXlib2FyZEV2ZW50KikgY29uc3QKK3sKKyAgICByZXR1cm4gZWxlbWVudCgp
LT5pc1RleHRGb3JtQ29udHJvbEZvY3VzYWJsZSgpOworfQorCitib29sIFRpbWVJbnB1dFR5cGU6
OmlzTW91c2VGb2N1c2FibGUoKSBjb25zdAoreworICAgIHJldHVybiBlbGVtZW50KCktPmlzVGV4
dEZvcm1Db250cm9sRm9jdXNhYmxlKCk7Cit9CisKK3ZvaWQgVGltZUlucHV0VHlwZTo6cmVhZG9u
bHlBdHRyaWJ1dGVDaGFuZ2VkKCkKK3sKKyAgICBpZiAobV9kYXRlVGltZUVkaXRFbGVtZW50KQor
ICAgICAgICBtX2RhdGVUaW1lRWRpdEVsZW1lbnQtPnJlYWRvbmx5QXR0cmlidXRlQ2hhbmdlZCgp
OworfQorCit2b2lkIFRpbWVJbnB1dFR5cGU6OnNldFZhbHVlKGNvbnN0IFN0cmluZyYgc2FuaXRp
emVkVmFsdWUsIGJvb2wgdmFsdWVDaGFuZ2VkLCBUZXh0RmllbGRFdmVudEJlaGF2aW9yIGV2ZW50
QmVoYXZpb3IpCit7CisgICAgSW5wdXRUeXBlOjpzZXRWYWx1ZShzYW5pdGl6ZWRWYWx1ZSwgdmFs
dWVDaGFuZ2VkLCBldmVudEJlaGF2aW9yKTsKKyAgICBpZiAodmFsdWVDaGFuZ2VkICYmIG1fZGF0
ZVRpbWVFZGl0RWxlbWVudCkgeworICAgICAgICBEYXRlQ29tcG9uZW50cyBkYXRlOworICAgICAg
ICBpZiAocGFyc2VUb0RhdGVDb21wb25lbnRzKHNhbml0aXplZFZhbHVlLCAmZGF0ZSkpCisgICAg
ICAgICAgICBtX2RhdGVUaW1lRWRpdEVsZW1lbnQtPnNldFZhbHVlQXNEYXRlKGRhdGUpOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICBtX2RhdGVUaW1lRWRpdEVsZW1lbnQtPnNldFZhbHVlQXNF
bXB0eSgpOworICAgIH0KK30KKwordm9pZCBUaW1lSW5wdXRUeXBlOjpzdGVwUmFuZ2VDaGFuZ2Vk
KCkKK3sKKyAgICBpZiAobV9kYXRlVGltZUVkaXRFbGVtZW50KQorICAgICAgICBtX2RhdGVUaW1l
RWRpdEVsZW1lbnQtPnNldExheW91dChjcmVhdGVTdGVwUmFuZ2UoQW55SXNEZWZhdWx0U3RlcCkp
OworfQorCisjZW5kaWYgLy8gRU5BQkxFKFRJTUVfSU5QVVRfRklFTERTKQorCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9U
aW1lSW5wdXRUeXBlLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL1RpbWVJbnB1dFR5cGUuaAppbmRl
eCBjOWQ1YjBjZGQwNzcxMmI4NzdlYWE3YzE5MmM2ZWE4NDFkYTUwZGRkLi4wZTA4OTRiNzVlNzBk
NWQwN2NiN2U1ZjA1Y2IzYjQyMTgzMzVjMTY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL1RpbWVJbnB1dFR5cGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL1RpbWVJbnB1dFR5
cGUuaApAQCAtMzUsMTIgKzM1LDIzIEBACiAKICNpZiBFTkFCTEUoSU5QVVRfVFlQRV9USU1FKQog
CisjaWYgRU5BQkxFKFRJTUVfSU5QVVRfRklFTERTKQorI2luY2x1ZGUgIkRhdGVUaW1lRWRpdEVs
ZW1lbnQuaCIKKyNkZWZpbmUgVElNRV9JTlBVVF9UWVBFX0JBU0VfQ0xBU1NfTElTVCBwdWJsaWMg
QmFzZURhdGVBbmRUaW1lSW5wdXRUeXBlLCBwcml2YXRlIERhdGVUaW1lRWRpdEVsZW1lbnQ6OkVk
aXRDb250cm9sRXZlbnRIYW5kbGVyCisjZWxzZQorI2RlZmluZSBUSU1FX0lOUFVUX1RZUEVfQkFT
RV9DTEFTU19MSVNUIHB1YmxpYyBCYXNlRGF0ZUFuZFRpbWVJbnB1dFR5cGUKKyNlbmRpZgorCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIFRpbWVJbnB1dFR5cGUgOiBwdWJsaWMgQmFzZURh
dGVBbmRUaW1lSW5wdXRUeXBlIHsKK2NsYXNzIFRpbWVJbnB1dFR5cGUgOiBUSU1FX0lOUFVUX1RZ
UEVfQkFTRV9DTEFTU19MSVNUIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc093blB0cjxJbnB1
dFR5cGU+IGNyZWF0ZShIVE1MSW5wdXRFbGVtZW50Kik7CiAKKyNpZiBFTkFCTEUoVElNRV9JTlBV
VF9GSUVMRFMpCisgICAgdmlydHVhbCB+VGltZUlucHV0VHlwZSgpOworI2VuZGlmCisKIHByaXZh
dGU6CiAgICAgVGltZUlucHV0VHlwZShIVE1MSW5wdXRFbGVtZW50KiBlbGVtZW50KSA6IEJhc2VE
YXRlQW5kVGltZUlucHV0VHlwZShlbGVtZW50KSB7IH0KICAgICB2aXJ0dWFsIGNvbnN0IEF0b21p
Y1N0cmluZyYgZm9ybUNvbnRyb2xUeXBlKCkgY29uc3QgT1ZFUlJJREU7CkBAIC01MCw2ICs2MSwz
MCBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCBwYXJzZVRvRGF0ZUNvbXBvbmVudHNJbnRl
cm5hbChjb25zdCBVQ2hhciosIHVuc2lnbmVkIGxlbmd0aCwgRGF0ZUNvbXBvbmVudHMqKSBjb25z
dCBPVkVSUklERTsKICAgICB2aXJ0dWFsIGJvb2wgc2V0TWlsbGlzZWNvbmRUb0RhdGVDb21wb25l
bnRzKGRvdWJsZSwgRGF0ZUNvbXBvbmVudHMqKSBjb25zdCBPVkVSUklERTsKICAgICB2aXJ0dWFs
IGJvb2wgaXNUaW1lRmllbGQoKSBjb25zdCBPVkVSUklERTsKKworI2lmIEVOQUJMRShUSU1FX0lO
UFVUX0ZJRUxEUykKKyAgICAvLyBEYXRlVGltZUVkaXRFbGVtZW50OjpFZGl0Q29udHJvbEV2ZW50
SGFuZGxlciBmdW5jdGlvbnMuCisgICAgdmlydHVhbCB2b2lkIGVkaXRDb250cm9sVmFsdWVDaGFu
Z2VkKCkgT1ZFUlJJREUgRklOQUw7CisKKyAgICAvLyBJbnB1dFR5cGUgbWV0aG9kcworICAgIHZp
cnR1YWwgUmVuZGVyT2JqZWN0KiBjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSosIFJlbmRlclN0
eWxlKikgY29uc3QgT1ZFUlJJREUgRklOQUw7CisgICAgdmlydHVhbCB2b2lkIGNyZWF0ZVNoYWRv
d1N1YnRyZWUoKSBPVkVSUklERSBGSU5BTDsKKyAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveVNoYWRv
d1N1YnRyZWUoKSBPVkVSUklERSBGSU5BTDsKKyAgICB2aXJ0dWFsIHZvaWQgZGlzYWJsZWRBdHRy
aWJ1dGVDaGFuZ2VkKCkgT1ZFUlJJREUgRklOQUw7CisgICAgdmlydHVhbCB2aXJ0dWFsIHZvaWQg
Zm9yd2FyZEV2ZW50KEV2ZW50KikgT1ZFUlJJREUgRklOQUw7CisgICAgdmlydHVhbCB2b2lkIGhh
bmRsZURPTUFjdGl2YXRlRXZlbnQoRXZlbnQqKSBPVkVSUklERSBGSU5BTDsKKyAgICB2aXJ0dWFs
IHZvaWQgaGFuZGxlS2V5ZG93bkV2ZW50KEtleWJvYXJkRXZlbnQqKSBPVkVSUklERSBGSU5BTDsK
KyAgICB2aXJ0dWFsIGJvb2wgaXNLZXlib2FyZEZvY3VzYWJsZShLZXlib2FyZEV2ZW50KikgY29u
c3QgT1ZFUlJJREUgRklOQUw7CisgICAgdmlydHVhbCBib29sIGlzTW91c2VGb2N1c2FibGUoKSBj
b25zdCBPVkVSUklERSBGSU5BTDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNUZXh0RmllbGQoKSBjb25z
dCBPVkVSUklERSBGSU5BTCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgdm9pZCByZWFk
b25seUF0dHJpYnV0ZUNoYW5nZWQoKSBPVkVSUklERSBGSU5BTDsKKyAgICB2aXJ0dWFsIHZvaWQg
c2V0VmFsdWUoY29uc3QgU3RyaW5nJiwgYm9vbCB2YWx1ZUNoYW5nZWQsIFRleHRGaWVsZEV2ZW50
QmVoYXZpb3IpIE9WRVJSSURFIEZJTkFMOworICAgIHZpcnR1YWwgYm9vbCBzaG91bGRVc2VJbnB1
dE1ldGhvZCgpIGNvbnN0IE9WRVJSSURFIEZJTkFMIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmly
dHVhbCB2b2lkIHN0ZXBSYW5nZUNoYW5nZWQoKSBPVkVSUklERSBGSU5BTDsKKworICAgIFJlZlB0
cjxEYXRlVGltZUVkaXRFbGVtZW50PiBtX2RhdGVUaW1lRWRpdEVsZW1lbnQ7CisjZW5kaWYKKwog
fTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aHRtbC9zaGFkb3cvRGF0ZVRpbWVFZGl0RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L3NoYWRvdy9EYXRlVGltZUVkaXRFbGVtZW50LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40NDRjYWE3Y2IzZTQx
Y2U1MWFiNWE3OWQyMzQ3YWY5MmFiNjIxNWQyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9zaGFkb3cvRGF0ZVRpbWVFZGl0RWxlbWVudC5jcHAKQEAgLTAsMCArMSw1MzYg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisg
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUg
SW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRS
SUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAq
IE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRGF0ZVRpbWVFZGl0RWxlbWVudC5oIgor
CisjaWYgRU5BQkxFKFRJTUVfSU5QVVRfRklFTERTKQorCisjaW5jbHVkZSAiRGF0ZUNvbXBvbmVu
dHMuaCIKKyNpbmNsdWRlICJEYXRlVGltZUZpZWxkRWxlbWVudHMuaCIKKyNpbmNsdWRlICJEYXRl
VGltZUZvcm1hdC5oIgorI2luY2x1ZGUgIkVsZW1lbnRTaGFkb3cuaCIKKyNpbmNsdWRlICJFdmVu
dEhhbmRsZXIuaCIKKyNpbmNsdWRlICJIVE1MSW5wdXRFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRN
TE5hbWVzLmgiCisjaW5jbHVkZSAiS2V5Ym9hcmRFdmVudC5oIgorI2luY2x1ZGUgIkxvY2FsaXpl
ZERhdGUuaCIKKyNpbmNsdWRlICJMb2NhbGl6ZWROdW1iZXIuaCIKKyNpbmNsdWRlICJNb3VzZUV2
ZW50LmgiCisjaW5jbHVkZSAiU3RlcFJhbmdlLmgiCisjaW5jbHVkZSAiVGV4dC5oIgorI2luY2x1
ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit1
c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOworCitzdGF0aWMgY29uc3QgaW50IGhvdXJJbk1pbGxp
c2Vjb25kID0gMzYwMCAqIDEwMDA7CitzdGF0aWMgY29uc3QgaW50IG1pbnV0ZUluTWlsbGlzZWNv
bmQgPSA2MCAqIDEwMDA7CitzdGF0aWMgY29uc3QgaW50IHNlY29uZEluTWlsbGlzZWNvbmQgPSAx
MDAwOworCitjbGFzcyBEYXRlVGltZUVkaXRMYXlvdXRlciA6IHB1YmxpYyBEYXRlVGltZUZvcm1h
dDo6VG9rZW5IYW5kbGVyIHsKK3B1YmxpYzoKKyAgICBEYXRlVGltZUVkaXRMYXlvdXRlcihEYXRl
VGltZUVkaXRFbGVtZW50KiBlbGVtbnQsIGNvbnN0IFN0ZXBSYW5nZSYgc3RlcFJhbmdlKQorICAg
ICAgICA6IG1fZWxlbWVudChlbGVtbnQpCisgICAgICAgICwgbV9kYXRlVGltZUZvcm1hdCgqdGhp
cykKKyAgICAgICAgLCBtX3N0ZXBSYW5nZShzdGVwUmFuZ2UpCisgICAgICAgICwgbV9oYXNNaWxs
aXNlY29uZEZpZWxkKGZhbHNlKQorICAgICAgICAsIG1faGFzU2Vjb25kRmllbGQoZmFsc2UpCisg
ICAgeworICAgIH0KKworICAgIGJvb2wgYnVpbGQoY29uc3QgU3RyaW5nJik7CisKKworICAgIGJv
b2wgbmVlZFNlY29uZEZpZWxkKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhbV9zdGVw
UmFuZ2UuY2xhbXBWYWx1ZShtX3N0ZXBSYW5nZS5tYXhpbXVtKCkpLnJlbWFpbmRlcihtaW51dGVJ
bk1pbGxpc2Vjb25kKS5pc1plcm8oKQorICAgICAgICAgICAgfHwgIW1fc3RlcFJhbmdlLm1pbmlt
dW0oKS5yZW1haW5kZXIobWludXRlSW5NaWxsaXNlY29uZCkuaXNaZXJvKCkKKyAgICAgICAgICAg
IHx8ICFtX3N0ZXBSYW5nZS5zdGVwKCkucmVtYWluZGVyKG1pbnV0ZUluTWlsbGlzZWNvbmQpLmlz
WmVybygpOworICAgIH0KKworcHJpdmF0ZToKKyAgICB2b2lkIGFkZEZpZWxkKERhdGVUaW1lRmll
bGRFbGVtZW50KiBmaWVsZCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChzdGF0aWNfY2FzdDxz
aXplX3Q+KG1fZWxlbWVudC0+bV9udW1iZXJPZkZpZWxkcykgPj0gV1RGX0FSUkFZX0xFTkdUSCht
X2VsZW1lbnQtPm1fZmllbGRzKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgbV9lbGVt
ZW50LT5hcHBlbmRDaGlsZChmaWVsZCk7CisgICAgICAgIG1fZWxlbWVudC0+bV9maWVsZHNbbV9l
bGVtZW50LT5tX251bWJlck9mRmllbGRzXSA9IGZpZWxkOworICAgICAgICArK21fZWxlbWVudC0+
bV9udW1iZXJPZkZpZWxkczsKKyAgICB9CisKKyAgICB2b2lkIGFkZE1pbGxpc2Vjb25kRmllbGRJ
Zk5lZWRlZCgpOworCisgICAgYm9vbCBuZWVkTWlsbGlzZWNvbmRGaWVsZCgpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gIW1fc3RlcFJhbmdlLmNsYW1wVmFsdWUobV9zdGVwUmFuZ2UubWF4
aW11bSgpKS5yZW1haW5kZXIoc2Vjb25kSW5NaWxsaXNlY29uZCkuaXNaZXJvKCkKKyAgICAgICAg
ICAgIHx8ICFtX3N0ZXBSYW5nZS5taW5pbXVtKCkucmVtYWluZGVyKHNlY29uZEluTWlsbGlzZWNv
bmQpLmlzWmVybygpCisgICAgICAgICAgICB8fCAhbV9zdGVwUmFuZ2Uuc3RlcCgpLnJlbWFpbmRl
cihzZWNvbmRJbk1pbGxpc2Vjb25kKS5pc1plcm8oKTsKKyAgICB9CisKKyAgICBib29sIG5lZWRN
aW51dGVGaWVsZCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gIW1fc3RlcFJhbmdlLmNs
YW1wVmFsdWUobV9zdGVwUmFuZ2UubWF4aW11bSgpKS5yZW1haW5kZXIoaG91ckluTWlsbGlzZWNv
bmQpLmlzWmVybygpCisgICAgICAgICAgICB8fCAhbV9zdGVwUmFuZ2UubWluaW11bSgpLnJlbWFp
bmRlcihob3VySW5NaWxsaXNlY29uZCkuaXNaZXJvKCkKKyAgICAgICAgICAgIHx8ICFtX3N0ZXBS
YW5nZS5zdGVwKCkucmVtYWluZGVyKGhvdXJJbk1pbGxpc2Vjb25kKS5pc1plcm8oKTsKKyAgICB9
CisKKyAgICAvLyBEYXRlVGltZUZvcm1hdDo6VG9rZW5IYW5kbGVyIGZ1bmN0aW9ucy4KKyAgICB2
b2lkIGdvdEZpZWxkKERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGUsIGludCk7CisgICAgdm9pZCBn
b3RMaXRlcmFsKGNvbnN0IFN0cmluZyYpOworCisgICAgRGF0ZVRpbWVFZGl0RWxlbWVudCogbV9l
bGVtZW50OworICAgIGNvbnN0IERhdGVUaW1lRm9ybWF0IG1fZGF0ZVRpbWVGb3JtYXQ7CisgICAg
Y29uc3QgU3RlcFJhbmdlJiBtX3N0ZXBSYW5nZTsKKyAgICBib29sIG1faGFzTWlsbGlzZWNvbmRG
aWVsZDsKKyAgICBib29sIG1faGFzU2Vjb25kRmllbGQ7Cit9OworCitib29sIERhdGVUaW1lRWRp
dExheW91dGVyOjpidWlsZChjb25zdCBTdHJpbmcmIGZvcm1hdFN0cmluZykKK3sKKyAgICAvLyBG
SVhNRTogV2Ugc2hvdWxkIHJlbW92ZSBkZWJ1ZyBwcmludCBiZWZvcmUgcmV2aWV3LgorICAgIExP
R19FUlJPUigiRGF0ZVRpbWVFZGl0TGF5b3V0ZXI6OmJ1aWxkKCclcycpIiwgZm9ybWF0U3RyaW5n
LmFzY2lpKCkuZGF0YSgpKTsKKyAgICBtX2VsZW1lbnQtPnJlc2V0TGF5b3V0KCk7CisgICAgaWYg
KCFtX2RhdGVUaW1lRm9ybWF0LnBhcnNlKGZvcm1hdFN0cmluZykpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIGFkZE1pbGxpc2Vjb25kRmllbGRJZk5lZWRlZCgpOworICAgIHJldHVybiB0
cnVlOworfQorCit2b2lkIERhdGVUaW1lRWRpdExheW91dGVyOjphZGRNaWxsaXNlY29uZEZpZWxk
SWZOZWVkZWQoKQoreworICAgIGlmIChtX2hhc01pbGxpc2Vjb25kRmllbGQpCisgICAgICAgIHJl
dHVybjsKKworICAgIGlmICghbmVlZE1pbGxpc2Vjb25kRmllbGQoKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgY29uc3QgU3RyaW5nIG51bWJlciA9IGNvbnZlcnRUb0xvY2FsaXplZE51bWJlcigi
MS41IiwgMSk7CisgICAgVUNoYXIgZGVjaW1hbFBvaW50WzJdOworICAgIGRlY2ltYWxQb2ludFsw
XSA9IG51bWJlclsxXTsKKyAgICBkZWNpbWFsUG9pbnRbMV0gPSAwOworICAgIGdvdExpdGVyYWwo
ZGVjaW1hbFBvaW50KTsKKyAgICBnb3RGaWVsZChEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlRnJh
Y3Rpb25hbFNlY29uZCwgMyk7Cit9CisKK3ZvaWQgRGF0ZVRpbWVFZGl0TGF5b3V0ZXI6OmdvdEZp
ZWxkKERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGUgZmllbGRUeXBlLCBpbnQpCit7CisgICAgREVG
SU5FX1NUQVRJQ19MT0NBTChBdG9taWNTdHJpbmcsIGhvdXJQc3VlZG9JZCwgKCItd2Via2l0LWRh
dGV0aW1lLWVkaXQtaG91ci1maWVsZCIpKTsKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEF0b21p
Y1N0cmluZywgbWlsbGlzZWNvbmRQc3VlZG9JZCwgKCItd2Via2l0LWRhdGV0aW1lLWVkaXQtbWls
bGlzZWNvbmQtZmllbGQiKSk7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChBdG9taWNTdHJpbmcs
IG1pbnV0ZVBzdWVkb0lkLCAoIi13ZWJraXQtZGF0ZXRpbWUtZWRpdC1taW51dGUtZmllbGQiKSk7
CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChBdG9taWNTdHJpbmcsIHBlcmlvZFBzdWVkb0lkLCAo
Ii13ZWJraXQtZGF0ZXRpbWUtZWRpdC1ub29uLWZpZWxkIikpOworICAgIERFRklORV9TVEFUSUNf
TE9DQUwoQXRvbWljU3RyaW5nLCBzZWNvbmRQc3VlZG9JZCwgKCItd2Via2l0LWRhdGV0aW1lLWVk
aXQtc2Vjb25kLWZpZWxkIikpOworCisgICAgaWYgKG1faGFzU2Vjb25kRmllbGQgJiYgZmllbGRU
eXBlICE9IERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVGcmFjdGlvbmFsU2Vjb25kKQorICAgICAg
ICBhZGRNaWxsaXNlY29uZEZpZWxkSWZOZWVkZWQoKTsKKworICAgIHN3aXRjaCAoZmllbGRUeXBl
KSB7CisgICAgY2FzZSBEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlSG91cjExOgorICAgICAgICBp
ZiAoIW1fZWxlbWVudC0+bV9ob3VyMTFGaWVsZCkKKyAgICAgICAgICAgIG1fZWxlbWVudC0+bV9o
b3VyMTFGaWVsZCA9IERhdGVUaW1lSG91ckZpZWxkRWxlbWVudDo6Y3JlYXRlKG1fZWxlbWVudC0+
ZG9jdW1lbnQoKSwgKm1fZWxlbWVudCwgaG91clBzdWVkb0lkLCAwLCAxMSk7CisgICAgICAgIGFk
ZEZpZWxkKG1fZWxlbWVudC0+bV9ob3VyMTFGaWVsZC5nZXQoKSk7CisgICAgICAgIHJldHVybjsK
KworICAgIGNhc2UgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZUhvdXIxMjoKKyAgICAgICAgaWYg
KCFtX2VsZW1lbnQtPm1faG91cjEyRmllbGQpCisgICAgICAgICAgICBtX2VsZW1lbnQtPm1faG91
cjEyRmllbGQgPSBEYXRlVGltZUhvdXJGaWVsZEVsZW1lbnQ6OmNyZWF0ZShtX2VsZW1lbnQtPmRv
Y3VtZW50KCksICptX2VsZW1lbnQsIGhvdXJQc3VlZG9JZCwgMSwgMTIpOworICAgICAgICBhZGRG
aWVsZChtX2VsZW1lbnQtPm1faG91cjEyRmllbGQuZ2V0KCkpOworICAgICAgICByZXR1cm47CisK
KyAgICBjYXNlIERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVIb3VyMjM6CisgICAgICAgIGlmICgh
bV9lbGVtZW50LT5tX2hvdXIyM0ZpZWxkKQorICAgICAgICAgICAgbV9lbGVtZW50LT5tX2hvdXIy
M0ZpZWxkID0gRGF0ZVRpbWVIb3VyRmllbGRFbGVtZW50OjpjcmVhdGUobV9lbGVtZW50LT5kb2N1
bWVudCgpLCAqbV9lbGVtZW50LCBob3VyUHN1ZWRvSWQsIDAsIDIzKTsKKyAgICAgICAgYWRkRmll
bGQobV9lbGVtZW50LT5tX2hvdXIyM0ZpZWxkLmdldCgpKTsKKyAgICAgICAgcmV0dXJuOworCisg
ICAgY2FzZSBEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlSG91cjI0OgorICAgICAgICBpZiAoIW1f
ZWxlbWVudC0+bV9ob3VyMjRGaWVsZCkKKyAgICAgICAgICAgIG1fZWxlbWVudC0+bV9ob3VyMjRG
aWVsZCA9IERhdGVUaW1lSG91ckZpZWxkRWxlbWVudDo6Y3JlYXRlKG1fZWxlbWVudC0+ZG9jdW1l
bnQoKSwgKm1fZWxlbWVudCwgaG91clBzdWVkb0lkLCAxLCAyNCk7CisgICAgICAgIGFkZEZpZWxk
KG1fZWxlbWVudC0+bV9ob3VyMjRGaWVsZC5nZXQoKSk7CisgICAgICAgIHJldHVybjsKKworICAg
IGNhc2UgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZU1pbnV0ZToKKyAgICAgICAgaWYgKCFtX2Vs
ZW1lbnQtPm1fbWludXRlRmllbGQpCisgICAgICAgICAgICBtX2VsZW1lbnQtPm1fbWludXRlRmll
bGQgPSBEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQ6OmNyZWF0ZShtX2VsZW1lbnQtPmRvY3Vt
ZW50KCksICptX2VsZW1lbnQsIG1pbnV0ZVBzdWVkb0lkLCBtaW51dGVJbk1pbGxpc2Vjb25kLCAw
LCA1OSk7CisgICAgICAgIGFkZEZpZWxkKG1fZWxlbWVudC0+bV9taW51dGVGaWVsZC5nZXQoKSk7
CisKKyAgICAgICAgaWYgKCFuZWVkTWludXRlRmllbGQoKSkgeworICAgICAgICAgICAgbV9lbGVt
ZW50LT5tX21pbnV0ZUZpZWxkLT5kaXNhYmxlKCk7CisgICAgICAgICAgICBtX2VsZW1lbnQtPm1f
bWludXRlRmllbGQtPnNldFZhbHVlQXNJbnRlZ2VyKDAsIERhdGVUaW1lRmllbGRFbGVtZW50OjpE
aXNwYXRjaE5vRXZlbnQpOworICAgICAgICB9CisgICAgICAgIHJldHVybjsKKworICAgIGNhc2Ug
RGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZVBlcmlvZDoKKyAgICAgICAgaWYgKCFtX2VsZW1lbnQt
Pm1fcGVyaW9kRmllbGQpCisgICAgICAgICAgICBtX2VsZW1lbnQtPm1fcGVyaW9kRmllbGQgPSBE
YXRlVGltZVN5bWJvbGljRmllbGRFbGVtZW50OjpjcmVhdGUobV9lbGVtZW50LT5kb2N1bWVudCgp
LCAqbV9lbGVtZW50LCBwZXJpb2RQc3VlZG9JZCwgaG91ckluTWlsbGlzZWNvbmQgKiAxMiwgcGVy
aW9kTGFiZWxzKCkpOworICAgICAgICBhZGRGaWVsZChtX2VsZW1lbnQtPm1fcGVyaW9kRmllbGQu
Z2V0KCkpOworICAgICAgICByZXR1cm47CisKKyAgICBjYXNlIERhdGVUaW1lRm9ybWF0OjpGaWVs
ZFR5cGVTZWNvbmQ6CisgICAgICAgIGlmIChuZWVkU2Vjb25kRmllbGQoKSkgeworICAgICAgICAg
ICAgaWYgKCFtX2VsZW1lbnQtPm1fc2Vjb25kRmllbGQpCisgICAgICAgICAgICAgICAgbV9lbGVt
ZW50LT5tX3NlY29uZEZpZWxkID0gRGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50OjpjcmVhdGUo
bV9lbGVtZW50LT5kb2N1bWVudCgpLCAqbV9lbGVtZW50LCBzZWNvbmRQc3VlZG9JZCwgc2Vjb25k
SW5NaWxsaXNlY29uZCwgMCwgNTkpOworICAgICAgICAgICAgYWRkRmllbGQobV9lbGVtZW50LT5t
X3NlY29uZEZpZWxkLmdldCgpKTsKKyAgICAgICAgICAgIG1faGFzU2Vjb25kRmllbGQgPSB0cnVl
OworICAgICAgICB9CisgICAgICAgIHJldHVybjsKKworICAgIGNhc2UgRGF0ZVRpbWVGb3JtYXQ6
OkZpZWxkVHlwZUZyYWN0aW9uYWxTZWNvbmQ6CisgICAgICAgIGlmIChuZWVkTWlsbGlzZWNvbmRG
aWVsZCgpKSB7CisgICAgICAgICAgICBpZiAoIW1fZWxlbWVudC0+bV9taWxsaXNlY29uZEZpZWxk
KQorICAgICAgICAgICAgICAgIG1fZWxlbWVudC0+bV9taWxsaXNlY29uZEZpZWxkID0gRGF0ZVRp
bWVOdW1lcmljRmllbGRFbGVtZW50OjpjcmVhdGUobV9lbGVtZW50LT5kb2N1bWVudCgpLCAqbV9l
bGVtZW50LCBtaWxsaXNlY29uZFBzdWVkb0lkLCAxLCAwLCA5OTkpOworICAgICAgICAgICAgYWRk
RmllbGQobV9lbGVtZW50LT5tX21pbGxpc2Vjb25kRmllbGQuZ2V0KCkpOworICAgICAgICAgICAg
bV9oYXNNaWxsaXNlY29uZEZpZWxkID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm47
CisKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm47CisgICAgfQorfQorCit2b2lkIERhdGVU
aW1lRWRpdExheW91dGVyOjpnb3RMaXRlcmFsKGNvbnN0IFN0cmluZyYgdGV4dCkKK3sKKyAgICBM
T0dfRVJST1IoImdvdExpdGVyYWwoJXMpIiwgdGV4dC5hc2NpaSgpLmRhdGEoKSk7CisgICAgQVNT
RVJUKHRleHQubGVuZ3RoKCkpOworICAgIG1fZWxlbWVudC0+YXBwZW5kQ2hpbGQoVGV4dDo6Y3Jl
YXRlKG1fZWxlbWVudC0+ZG9jdW1lbnQoKSwgdGV4dCkpOworfQorCitEYXRlVGltZUVkaXRFbGVt
ZW50OjpEYXRlVGltZUVkaXRFbGVtZW50KERvY3VtZW50KiBkb2N1bWVudCwgRWRpdENvbnRyb2xF
dmVudEhhbmRsZXImIGVkaXRDb250cm9sRXZlbnRIYW5kbGVyKQorICAgIDogSFRNTERpdkVsZW1l
bnQoZGl2VGFnLCBkb2N1bWVudCkKKyAgICAsIG1fZWRpdENvbnRyb2xFdmVudEhhbmRsZXIoJmVk
aXRDb250cm9sRXZlbnRIYW5kbGVyKQorICAgICwgbV9mb2N1c0ZpZWxkSW5kZXgoSW52YWxpZEZp
ZWxkSW5kZXgpCisgICAgLCBtX251bWJlck9mRmllbGRzKDApCit7CisgICAgREVGSU5FX1NUQVRJ
Q19MT0NBTChBdG9taWNTdHJpbmcsIGRhdGVUaW1lRWRpdFBzZXVkb0lkLCAoIi13ZWJraXQtZGF0
ZXRpbWUtZWRpdCIpKTsKKyAgICBzZXRTaGFkb3dQc2V1ZG9JZChkYXRlVGltZUVkaXRQc2V1ZG9J
ZCk7CisKKyAgICBtX3NwaW5CdXR0b24gPSBTcGluQnV0dG9uRWxlbWVudDo6Y3JlYXRlKGRvY3Vt
ZW50LCAqdGhpcyk7CisKKyAgICAvLyBGSVhNRTogU3BpbkJ1dHRvbiBzaG91bGQgaGF2ZSB3aWR0
aCBieSBpdHNlbGYuCisgICAgRXhjZXB0aW9uQ29kZSBlYzsKKyAgICBtX3NwaW5CdXR0b24tPnNl
dElubmVyVGV4dCgiLiIsIGVjKTsKK30KKworRGF0ZVRpbWVFZGl0RWxlbWVudDo6fkRhdGVUaW1l
RWRpdEVsZW1lbnQoKQoreworICAgIGlmIChtX2hvdXIxMUZpZWxkKQorICAgICAgICBtX2hvdXIx
MUZpZWxkLT5yZW1vdmVFdmVudEhhbmRsZXIoKTsKKworICAgIGlmIChtX2hvdXIxMkZpZWxkKQor
ICAgICAgICBtX2hvdXIxMkZpZWxkLT5yZW1vdmVFdmVudEhhbmRsZXIoKTsKKworICAgIGlmICht
X2hvdXIyM0ZpZWxkKQorICAgICAgICBtX2hvdXIyM0ZpZWxkLT5yZW1vdmVFdmVudEhhbmRsZXIo
KTsKKworICAgIGlmIChtX2hvdXIyNEZpZWxkKQorICAgICAgICBtX2hvdXIyNEZpZWxkLT5yZW1v
dmVFdmVudEhhbmRsZXIoKTsKKworICAgIGlmIChtX21pbGxpc2Vjb25kRmllbGQpCisgICAgICAg
IG1fbWlsbGlzZWNvbmRGaWVsZC0+cmVtb3ZlRXZlbnRIYW5kbGVyKCk7CisKKyAgICBpZiAobV9t
aW51dGVGaWVsZCkKKyAgICAgICAgbV9taW51dGVGaWVsZC0+cmVtb3ZlRXZlbnRIYW5kbGVyKCk7
CisKKyAgICBpZiAobV9wZXJpb2RGaWVsZCkKKyAgICAgICAgbV9wZXJpb2RGaWVsZC0+cmVtb3Zl
RXZlbnRIYW5kbGVyKCk7CisKKyAgICBpZiAobV9zZWNvbmRGaWVsZCkKKyAgICAgICAgbV9zZWNv
bmRGaWVsZC0+cmVtb3ZlRXZlbnRIYW5kbGVyKCk7CisKKyAgICBpZiAobV9zcGluQnV0dG9uKQor
ICAgICAgICBtX3NwaW5CdXR0b24tPnJlbW92ZVN0ZXBBY3Rpb25IYW5kbGVyKCk7Cit9CisKK1Bh
c3NSZWZQdHI8RGF0ZVRpbWVFZGl0RWxlbWVudD4gRGF0ZVRpbWVFZGl0RWxlbWVudDo6Y3JlYXRl
KERvY3VtZW50KiBkb2N1bWVudCwgRWRpdENvbnRyb2xFdmVudEhhbmRsZXImIGVkaXRDb250cm9s
RXZlbnRIYW5kbGVyLCBjb25zdCBTdGVwUmFuZ2UmIHN0ZXBSYW5nZSkKK3sKKyAgICBSZWZQdHI8
RGF0ZVRpbWVFZGl0RWxlbWVudD4gY29udGFpbmVyID0gYWRvcHRSZWYobmV3IERhdGVUaW1lRWRp
dEVsZW1lbnQoZG9jdW1lbnQsIGVkaXRDb250cm9sRXZlbnRIYW5kbGVyKSk7CisgICAgY29udGFp
bmVyLT5zZXRMYXlvdXQoc3RlcFJhbmdlKTsKKyAgICByZXR1cm4gY29udGFpbmVyOworfQorCiti
b29sIERhdGVUaW1lRWRpdEVsZW1lbnQ6OmRpc2FibGVkKCkgY29uc3QKK3sKKyAgICBOb2RlKiBo
b3N0ID0gc2hhZG93QW5jZXN0b3JOb2RlKCk7CisgICAgcmV0dXJuICFob3N0IHx8IGhvc3QtPmRp
c2FibGVkKCk7Cit9CisKK0RhdGVUaW1lRmllbGRFbGVtZW50KiBEYXRlVGltZUVkaXRFbGVtZW50
OjpmaWVsZEF0KGludCBpbmRleCkgY29uc3QKK3sKKyAgICByZXR1cm4gaW5kZXggPj0gMCAmJiBp
bmRleCA8IG1fbnVtYmVyT2ZGaWVsZHMgPyBtX2ZpZWxkc1tpbmRleF0gOiAwOworfQorCit2b2lk
IERhdGVUaW1lRWRpdEVsZW1lbnQ6OmhhbmRsZUtleWJvYXJkRXZlbnQoS2V5Ym9hcmRFdmVudCog
a2V5Ym9hcmRFdmVudCkKK3sKKyAgICBpZiAoa2V5Ym9hcmRFdmVudC0+dHlwZSgpID09IGV2ZW50
TmFtZXMoKS5rZXlkb3duRXZlbnQgJiYgZmllbGRBdChtX2ZvY3VzRmllbGRJbmRleCkgJiYgIWRp
c2FibGVkKCkgJiYgIXJlYWRPbmx5KCkpIHsKKyAgICAgICAgY29uc3QgU3RyaW5nJiBrZXlJZGVu
dGlmaWVyID0ga2V5Ym9hcmRFdmVudC0+a2V5SWRlbnRpZmllcigpOworCisgICAgICAgIC8vIEZJ
WE1FOiBXZSBzaG91bGQgcmVtb3ZlIHRoaXMgZGVidWcgbG9nZ2luZyBiZWZvcmUgcmV2aWV3Cisg
ICAgICAgIExPR19FUlJPUigia2V5SWRlbnRpZmllcj0lcyIsIGtleUlkZW50aWZpZXIuYXNjaWko
KS5kYXRhKCkpOworCisgICAgICAgIGlmIChrZXlJZGVudGlmaWVyID09ICJMZWZ0IikgeworICAg
ICAgICAgICAga2V5Ym9hcmRFdmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKKyAgICAgICAgICAg
IHNldEZvY3VzRmllbGQocHJldmlvdXNGaWVsZEluZGV4KG1fZm9jdXNGaWVsZEluZGV4KSk7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoa2V5SWRlbnRpZmll
ciA9PSAiUmlnaHQiKSB7CisgICAgICAgICAgICBrZXlib2FyZEV2ZW50LT5zZXREZWZhdWx0SGFu
ZGxlZCgpOworICAgICAgICAgICAgc2V0Rm9jdXNGaWVsZChuZXh0RmllbGRJbmRleChtX2ZvY3Vz
RmllbGRJbmRleCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAg
aWYgKGtleUlkZW50aWZpZXIgPT0gIlUrMDAwOSIpIHsKKyAgICAgICAgICAgIGNvbnN0IGludCBm
aWVsZEluZGV4ID0gbV9mb2N1c0ZpZWxkSW5kZXggKyAoa2V5Ym9hcmRFdmVudC0+Z2V0TW9kaWZp
ZXJTdGF0ZSgiU2hpZnQiKSA/IC0xIDogMSk7CisgICAgICAgICAgICBpZiAoZmllbGRBdChmaWVs
ZEluZGV4KSkgeworICAgICAgICAgICAgICAgIGtleWJvYXJkRXZlbnQtPnNldERlZmF1bHRIYW5k
bGVkKCk7CisgICAgICAgICAgICAgICAgc2V0Rm9jdXNGaWVsZChmaWVsZEluZGV4KTsKKyAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisK
K3ZvaWQgRGF0ZVRpbWVFZGl0RWxlbWVudDo6ZmllbGRWYWx1ZUNoYW5nZWQoKQoreworICAgIGlm
IChtX2VkaXRDb250cm9sRXZlbnRIYW5kbGVyKQorICAgICAgICBtX2VkaXRDb250cm9sRXZlbnRI
YW5kbGVyLT5lZGl0Q29udHJvbFZhbHVlQ2hhbmdlZCgpOworfQorCit2b2lkIERhdGVUaW1lRWRp
dEVsZW1lbnQ6OmhhbmRsZU1vdXNlRXZlbnQoTW91c2VFdmVudCogbW91c2VFdmVudCkKK3sKKyAg
ICBpZiAobW91c2VFdmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZWRvd25FdmVudCAm
JiBtb3VzZUV2ZW50LT5idXR0b24oKSA9PSBMZWZ0QnV0dG9uICYmICFkaXNhYmxlZCgpICYmICFy
ZWFkT25seSgpKSB7CisgICAgICAgIE5vZGUqIGNvbnN0IHJlbGF0ZWRUYXJnZXQgPSBtb3VzZUV2
ZW50LT50YXJnZXQoKS0+dG9Ob2RlKCk7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbV9u
dW1iZXJPZkZpZWxkczsgKytpKSB7CisgICAgICAgICAgICBpZiAobV9maWVsZHNbaV0gPT0gcmVs
YXRlZFRhcmdldCkgeworICAgICAgICAgICAgICAgIG1vdXNlRXZlbnQtPnNldERlZmF1bHRIYW5k
bGVkKCk7CisgICAgICAgICAgICAgICAgc2V0Rm9jdXNGaWVsZChpKTsKKyAgICAgICAgICAgICAg
ICBOb2RlKiBob3N0ID0gc2hhZG93QW5jZXN0b3JOb2RlKCk7CisgICAgICAgICAgICAgICAgdG9I
VE1MRWxlbWVudChob3N0KS0+Zm9jdXMoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBEYXRlVGltZUVkaXRFbGVtZW50
Ojptb3ZlVG9OZXh0RmllbGQoKQoreworICAgIGlmIChtX2ZvY3VzRmllbGRJbmRleCAhPSBJbnZh
bGlkRmllbGRJbmRleCkKKyAgICAgICAgc2V0Rm9jdXNGaWVsZChuZXh0RmllbGRJbmRleChtX2Zv
Y3VzRmllbGRJbmRleCkpOworfQorCitpbnQgRGF0ZVRpbWVFZGl0RWxlbWVudDo6bmV4dEZpZWxk
SW5kZXgoaW50IGluZGV4KSBjb25zdAoreworICAgIHJldHVybiBzdGQ6Om1heChzdGQ6Om1pbihp
bmRleCArIDEsIG1fbnVtYmVyT2ZGaWVsZHMgLSAxKSwgMCk7Cit9CisKK2ludCBEYXRlVGltZUVk
aXRFbGVtZW50OjpwcmV2aW91c0ZpZWxkSW5kZXgoaW50IGluZGV4KSBjb25zdAoreworICAgIHJl
dHVybiBzdGQ6Om1heChzdGQ6Om1pbihpbmRleCAtIDEsIG1fbnVtYmVyT2ZGaWVsZHMgLSAxKSwg
MCk7Cit9CisKK2Jvb2wgRGF0ZVRpbWVFZGl0RWxlbWVudDo6cmVhZE9ubHkoKSBjb25zdAorewor
ICAgIE5vZGUqIGNvbnN0IGhvc3QgPSBzaGFkb3dBbmNlc3Rvck5vZGUoKTsKKyAgICBpZiAoIWhv
c3QpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEhUTUxJbnB1dEVsZW1lbnQqIGNvbnN0
IGlucHV0ID0gaG9zdC0+dG9JbnB1dEVsZW1lbnQoKTsKKyAgICByZXR1cm4gaW5wdXQgJiYgaW5w
dXQtPnJlYWRPbmx5KCk7Cit9CisKK3ZvaWQgRGF0ZVRpbWVFZGl0RWxlbWVudDo6cmVzZXRMYXlv
dXQoKQoreworICAgIHdoaWxlIChOb2RlKiBub2RlID0gZmlyc3RDaGlsZCgpKQorICAgICAgICBy
ZW1vdmVDaGlsZChub2RlKTsKKworICAgIG1fbnVtYmVyT2ZGaWVsZHMgPSAwOworfQorCit2b2lk
IERhdGVUaW1lRWRpdEVsZW1lbnQ6OnNldEZvY3VzRmllbGQoaW50IG5ld0ZvY3VzRmllbGRJbmRl
eCkKK3sKKyAgICBpZiAobV9mb2N1c0ZpZWxkSW5kZXggPT0gbmV3Rm9jdXNGaWVsZEluZGV4KQor
ICAgICAgICByZXR1cm47CisKKyAgICBEYXRlVGltZUZpZWxkRWxlbWVudCogY29uc3QgbmV3Rm9j
dXNGaWVsZCA9IGZpZWxkQXQobmV3Rm9jdXNGaWVsZEluZGV4KTsKKyAgICBpZiAobmV3Rm9jdXNG
aWVsZCAmJiBuZXdGb2N1c0ZpZWxkLT5kaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAg
ICBEYXRlVGltZUZpZWxkRWxlbWVudCogY29uc3QgY3VycmVudEZvY3VzRmllbGQgPSBmaWVsZEF0
KG1fZm9jdXNGaWVsZEluZGV4KTsKKworICAgIGlmIChjdXJyZW50Rm9jdXNGaWVsZCkKKyAgICAg
ICAgY3VycmVudEZvY3VzRmllbGQtPnNldEZvY3VzKGZhbHNlKTsKKworICAgIGlmICghbmV3Rm9j
dXNGaWVsZCkgeworICAgICAgICBtX2ZvY3VzRmllbGRJbmRleCA9IEludmFsaWRGaWVsZEluZGV4
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9mb2N1c0ZpZWxkSW5kZXggPSBuZXdG
b2N1c0ZpZWxkSW5kZXg7CisgICAgbmV3Rm9jdXNGaWVsZC0+c2V0Rm9jdXModHJ1ZSk7Cit9CisK
K3ZvaWQgRGF0ZVRpbWVFZGl0RWxlbWVudDo6c2V0TGF5b3V0KGNvbnN0IFN0ZXBSYW5nZSYgc3Rl
cFJhbmdlKQoreworICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgcmVtb3ZlIHRoaXMgZGVidWcgbG9n
Z2luZyBiZWZvcmUgcmV2aWV3CisgICAgTE9HX0VSUk9SKCJtaW49JWQgbWF4PSVkIGNtYXg9JWQg
c3RlcD0lZCIsCisgICAgICAgIGludChzdGVwUmFuZ2UubWluaW11bSgpLnRvRG91YmxlKCkpLAor
ICAgICAgICBpbnQoc3RlcFJhbmdlLm1heGltdW0oKS50b0RvdWJsZSgpKSwKKyAgICAgICAgaW50
KHN0ZXBSYW5nZS5jbGFtcFZhbHVlKHN0ZXBSYW5nZS5tYXhpbXVtKCkpLnRvRG91YmxlKCkpLAor
ICAgICAgICBpbnQoc3RlcFJhbmdlLnN0ZXAoKS50b0RvdWJsZSgpKSk7CisKKyAgICBEYXRlVGlt
ZUZpZWxkRWxlbWVudCogY29uc3QgZm9jdXNGaWVsZCA9IGZpZWxkQXQobV9mb2N1c0ZpZWxkSW5k
ZXgpOworICAgIHNldEZvY3VzRmllbGQoSW52YWxpZEZpZWxkSW5kZXgpOworCisgICAgRGF0ZVRp
bWVFZGl0TGF5b3V0ZXIgYnVpbGRlcih0aGlzLCBzdGVwUmFuZ2UpOworICAgIGNvbnN0IFN0cmlu
ZyBkYXRlVGltZUZvcm1hdCA9IGJ1aWxkZXIubmVlZFNlY29uZEZpZWxkKCkgPyBsb2NhbGl6ZWRU
aW1lRm9ybWF0VGV4dCgpIDogbG9jYWxpemVkU2hvcnRUaW1lRm9ybWF0VGV4dCgpOworICAgIGlm
ICghYnVpbGRlci5idWlsZChkYXRlVGltZUZvcm1hdCkgfHwgIW1fbnVtYmVyT2ZGaWVsZHMpIHsK
KyAgICAgICAgcmVzZXRMYXlvdXQoKTsKKyAgICAgICAgYnVpbGRlci5idWlsZChidWlsZGVyLm5l
ZWRTZWNvbmRGaWVsZCgpID8gIkhIOm1tOnNzIiA6ICJISDptbSIpOworICAgIH0KKworICAgIGFw
cGVuZENoaWxkKG1fc3BpbkJ1dHRvbik7CisKKyAgICBpZiAoZm9jdXNGaWVsZCkgeworICAgICAg
ICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgbV9udW1iZXJPZkZpZWxkczsgKytpbmRleCkg
eworICAgICAgICAgICAgaWYgKGZvY3VzRmllbGQgPT0gZmllbGRBdChpbmRleCkpIHsKKyAgICAg
ICAgICAgICAgICBzZXRGb2N1c0ZpZWxkKGluZGV4KTsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBEYXRlVGltZUVkaXRF
bGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBldmVudCkKK3sKKyAgICAvLyBGSVhN
RTogV2Ugc2hvdWxkIHJlbW92ZSB0aGlzIGRlYnVnIGxvZ2dpbmcgYmVmb3JlIHJldmlldworICAg
IGlmICghZXZlbnQtPmlzTW91c2VFdmVudCgpKQorICAgICAgICBMT0dfRVJST1IoIkRhdGVUaW1l
RWRpdEVsZW1lbnQ6IGV2ZW50PSVzIiwgc3RhdGljX2Nhc3Q8U3RyaW5nPihldmVudC0+dHlwZSgp
KS5hc2NpaSgpLmRhdGEoKSk7CisKKyAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVz
KCkuZm9jdXNFdmVudCkgeworICAgICAgICBpZiAoIWRpc2FibGVkKCkgJiYgIXJlYWRPbmx5KCkg
JiYgbV9mb2N1c0ZpZWxkSW5kZXggPT0gSW52YWxpZEZpZWxkSW5kZXgpCisgICAgICAgICAgICBz
ZXRGb2N1c0ZpZWxkKDApOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGV2ZW50
LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmJsdXJFdmVudCkgeworICAgICAgICBzZXRGb2N1c0Zp
ZWxkKEludmFsaWRGaWVsZEluZGV4KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlm
IChldmVudC0+aXNNb3VzZUV2ZW50KCkpIHsKKyAgICAgICAgaGFuZGxlTW91c2VFdmVudChzdGF0
aWNfY2FzdDxNb3VzZUV2ZW50Kj4oZXZlbnQpKTsKKyAgICB9IGVsc2UgaWYgKGV2ZW50LT5pc0tl
eWJvYXJkRXZlbnQoKSkKKyAgICAgICAgaGFuZGxlS2V5Ym9hcmRFdmVudChzdGF0aWNfY2FzdDxL
ZXlib2FyZEV2ZW50Kj4oZXZlbnQpKTsKKworICAgIGlmIChldmVudC0+ZGVmYXVsdEhhbmRsZWQo
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgRGF0ZVRpbWVGaWVsZEVsZW1lbnQqIGNvbnN0IGZv
Y3VzRmllbGQgPSBmaWVsZEF0KG1fZm9jdXNGaWVsZEluZGV4KTsKKyAgICBpZiAoIWZvY3VzRmll
bGQpCisgICAgICAgIHJldHVybjsKKworICAgIGZvY3VzRmllbGQtPmRlZmF1bHRFdmVudEhhbmRs
ZXIoZXZlbnQpOworfQorCit2b2lkIERhdGVUaW1lRWRpdEVsZW1lbnQ6OmRpc2FibGUoKQorewor
ICAgIGlmIChkaXNhYmxlZCgpIHx8IHJlYWRPbmx5KCkpIHsKKyAgICAgIGlmIChtX3NwaW5CdXR0
b24pCisgICAgICAgICAgbV9zcGluQnV0dG9uLT5yZWxlYXNlQ2FwdHVyZSgpOworCisgICAgICBz
ZXRGb2N1c0ZpZWxkKEludmFsaWRGaWVsZEluZGV4KTsKKyAgICB9Cit9CisKK3ZvaWQgRGF0ZVRp
bWVFZGl0RWxlbWVudDo6c2V0VmFsdWVBc0RhdGUoY29uc3QgRGF0ZUNvbXBvbmVudHMmIGRhdGUp
Cit7CisgICAgaWYgKG1faG91cjExRmllbGQpCisgICAgICAgIG1faG91cjExRmllbGQtPnNldFZh
bHVlQXNJbnRlZ2VyKGRhdGUuaG91cigpKTsKKworICAgIGlmIChtX2hvdXIxMkZpZWxkKQorICAg
ICAgICBtX2hvdXIxMkZpZWxkLT5zZXRWYWx1ZUFzSW50ZWdlcihkYXRlLmhvdXIoKSk7CisKKyAg
ICBpZiAobV9ob3VyMjNGaWVsZCkKKyAgICAgICAgbV9ob3VyMjNGaWVsZC0+c2V0VmFsdWVBc0lu
dGVnZXIoZGF0ZS5ob3VyKCkpOworCisgICAgaWYgKG1faG91cjI0RmllbGQpCisgICAgICAgIG1f
aG91cjI0RmllbGQtPnNldFZhbHVlQXNJbnRlZ2VyKGRhdGUuaG91cigpKTsKKworICAgIGlmICht
X21pbGxpc2Vjb25kRmllbGQpCisgICAgICAgIG1fbWlsbGlzZWNvbmRGaWVsZC0+c2V0VmFsdWVB
c0ludGVnZXIoZGF0ZS5taWxsaXNlY29uZCgpKTsKKworICAgIGlmIChtX21pbnV0ZUZpZWxkKQor
ICAgICAgICBtX21pbnV0ZUZpZWxkLT5zZXRWYWx1ZUFzSW50ZWdlcihkYXRlLm1pbnV0ZSgpKTsK
KworICAgIGlmIChtX3BlcmlvZEZpZWxkKQorICAgICAgICBtX3BlcmlvZEZpZWxkLT5zZXRWYWx1
ZUFzSW50ZWdlcihkYXRlLmhvdXIoKSA+PSAxMiA/IDEgOiAwKTsKKworICAgIGlmIChtX3NlY29u
ZEZpZWxkKQorICAgICAgICBtX3NlY29uZEZpZWxkLT5zZXRWYWx1ZUFzSW50ZWdlcihkYXRlLnNl
Y29uZCgpKTsKK30KKwordm9pZCBEYXRlVGltZUVkaXRFbGVtZW50OjpzZXRWYWx1ZUFzRW1wdHko
KQoreworICAgIGZvciAoaW50IGZpZWxkSW5kZXggPSAwOyBmaWVsZEluZGV4IDwgbV9udW1iZXJP
ZkZpZWxkczsgKytmaWVsZEluZGV4KQorICAgICAgICBmaWVsZEF0KGZpZWxkSW5kZXgpLT5zZXRW
YWx1ZUFzRW1wdHkoRGF0ZVRpbWVGaWVsZEVsZW1lbnQ6OkRpc3BhdGNoTm9FdmVudCk7Cit9CisK
K3ZvaWQgRGF0ZVRpbWVFZGl0RWxlbWVudDo6c3BpbkJ1dHRvblN0ZXBEb3duKCkKK3sKKyAgICBp
ZiAoRGF0ZVRpbWVGaWVsZEVsZW1lbnQqIGNvbnN0IGZvY3VzRmllbGQgPSBmaWVsZEF0KG1fZm9j
dXNGaWVsZEluZGV4KSkKKyAgICAgICAgZm9jdXNGaWVsZC0+c3RlcERvd24oKTsKK30KKwordm9p
ZCBEYXRlVGltZUVkaXRFbGVtZW50OjpzcGluQnV0dG9uU3RlcFVwKCkKK3sKKyAgICBpZiAoRGF0
ZVRpbWVGaWVsZEVsZW1lbnQqIGNvbnN0IGZvY3VzRmllbGQgPSBmaWVsZEF0KG1fZm9jdXNGaWVs
ZEluZGV4KSkKKyAgICAgICAgZm9jdXNGaWVsZC0+c3RlcFVwKCk7Cit9CisKK2RvdWJsZSBEYXRl
VGltZUVkaXRFbGVtZW50Ojp2YWx1ZUFzRG91YmxlKCkgY29uc3QKK3sKKyAgICBkb3VibGUgdmFs
dWUgPSAwOworCisgICAgZm9yIChpbnQgZmllbGRJbmRleCA9IDA7IGZpZWxkSW5kZXggPCBtX251
bWJlck9mRmllbGRzOyArK2ZpZWxkSW5kZXgpIHsKKyAgICAgICAgY29uc3QgRGF0ZVRpbWVGaWVs
ZEVsZW1lbnQqIGNvbnN0IGZpZWxkID0gZmllbGRBdChmaWVsZEluZGV4KTsKKyAgICAgICAgaWYg
KCFmaWVsZC0+aGFzVmFsdWUoKSkKKyAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGlt
aXRzPGRvdWJsZT46OnF1aWV0X05hTigpOworICAgICAgICB2YWx1ZSArPSBmaWVsZC0+dmFsdWVB
c0RvdWJsZSgpOworICAgIH0KKworICAgIHJldHVybiB2YWx1ZTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hh
ZG93L0RhdGVUaW1lRWRpdEVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0Rh
dGVUaW1lRWRpdEVsZW1lbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wMGJkMDc5ZTQyZjljYjc3OGY5ODNjYzA0
MGQ2YjRjNWNmOWM5MWY3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9z
aGFkb3cvRGF0ZVRpbWVFZGl0RWxlbWVudC5oCkBAIC0wLDAgKzEsMTI3IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1
dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
KyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBEYXRl
VGltZUVkaXRFbGVtZW50X2gKKyNkZWZpbmUgRGF0ZVRpbWVFZGl0RWxlbWVudF9oCisKKyNpZiBF
TkFCTEUoVElNRV9JTlBVVF9GSUVMRFMpCisKKyNpbmNsdWRlICJEYXRlVGltZUZpZWxkRWxlbWVu
dHMuaCIKKworI2luY2x1ZGUgIlRleHRDb250cm9sSW5uZXJFbGVtZW50cy5oIgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK2NsYXNzIERhdGVDb21wb25lbnRzOworY2xhc3MgRGF0ZVRpbWVFZGl0
TGF5b3V0ZXI7CitjbGFzcyBLZXlib2FyZEV2ZW50OworY2xhc3MgTW91c2VFdmVudDsKK2NsYXNz
IFN0ZXBSYW5nZTsKKworLy8gRGF0ZVRpbWVFZGl0RWxlbWVudCBjbGFzcyBjb250YWlucyBudW1i
ZXJpYyBmaWVsZCBhbmQgc3ltYm9sYyBmaWVsZCBmb3IKKy8vIHJlcHJlc2VudGluZyBkYXRlIGFu
ZCB0aW1lLCBzdWNoIGFzCisvLyAgLSBZZWFyLCBNb250aCwgRGF5IE9mIE1vbnRoCisvLyAgLSBI
b3VyLCBNaW51dGUsIFNlY29uZCwgTWlsbGlzZWNvbmQsIFBlcmlvZAorY2xhc3MgRGF0ZVRpbWVF
ZGl0RWxlbWVudCA6IHB1YmxpYyBIVE1MRGl2RWxlbWVudCwgcHJpdmF0ZSBEYXRlVGltZUZpZWxk
RWxlbWVudDo6RmllbGRFdmVudEhhbmRsZXIsIHByaXZhdGUgU3BpbkJ1dHRvbkVsZW1lbnQ6OlN0
ZXBBY3Rpb25IYW5kbGVyIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShEYXRlVGltZUVkaXRF
bGVtZW50KTsKK3B1YmxpYzoKKyAgICBmcmllbmQgY2xhc3MgRGF0ZVRpbWVFZGl0TGF5b3V0ZXI7
CisKKyAgICAvLyBFZGl0Q29udHJvbEV2ZW50SGFuZGxlciBpbXBsZW1lbnRlciBtdXN0IGNhbGwg
cmVtb3ZlRXZlbnRIYW5kbGVyIHdoZW4KKyAgICAvLyBpdCBkb2Vzbid0IGhhbmRsZSBldmVudCwg
ZS5nLiBhdCBkZXN0cnVjdGlvbi4KKyAgICBjbGFzcyBFZGl0Q29udHJvbEV2ZW50SGFuZGxlciB7
CisgICAgcHVibGljOgorICAgICAgICB2aXJ0dWFsIH5FZGl0Q29udHJvbEV2ZW50SGFuZGxlcigp
IHsgfQorICAgICAgICB2aXJ0dWFsIHZvaWQgZWRpdENvbnRyb2xWYWx1ZUNoYW5nZWQoKSA9IDA7
CisgICAgfTsKKworICAgIHN0YXRpYyBQYXNzUmVmUHRyPERhdGVUaW1lRWRpdEVsZW1lbnQ+IGNy
ZWF0ZShEb2N1bWVudCosIEVkaXRDb250cm9sRXZlbnRIYW5kbGVyJiwgY29uc3QgU3RlcFJhbmdl
Jik7CisKKyAgICB2aXJ0dWFsIH5EYXRlVGltZUVkaXRFbGVtZW50KCk7CisgICAgdmlydHVhbCB2
b2lkIGRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqKSBPVkVSUklERTsKKyAgICB2b2lkIGRpc2Fi
bGVkQXR0cmlidXRlQ2hhbmdlZCgpIHsgZGlzYWJsZSgpOyB9CisgICAgdm9pZCByZWFkb25seUF0
dHJpYnV0ZUNoYW5nZWQoKSB7IGRpc2FibGUoKTsgfQorICAgIHZvaWQgcmVtb3ZlRXZlbnRIYW5k
bGVyKCkgeyBtX2VkaXRDb250cm9sRXZlbnRIYW5kbGVyID0gMDsgfQorICAgIHZvaWQgc2V0TGF5
b3V0KGNvbnN0IFN0ZXBSYW5nZSYpOworICAgIHZvaWQgc2V0VmFsdWVBc0VtcHR5KCk7CisgICAg
dm9pZCBzZXRWYWx1ZUFzRGF0ZShjb25zdCBEYXRlQ29tcG9uZW50cyYpOworICAgIGRvdWJsZSB2
YWx1ZUFzRG91YmxlKCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgc3RhdGljIGNvbnN0IGludCBJ
bnZhbGlkRmllbGRJbmRleCA9IC0xOworCisgICAgLy8gVGltZSBjYW4gYmUgcmVwcmVzZW50IGF0
IG1vc3QgZml2ZSBmaWVsZHMsIHN1Y2ggYXMKKyAgICAvLyAgMS4gaG91cgorICAgIC8vICAyLiBt
aW51dGUKKyAgICAvLyAgMy4gc2Vjb25kCisgICAgLy8gIDQuIG1pbGxpc2Vjb25kCisgICAgLy8g
IDUuIHBlcmlvZChBTS9QTSkKKyAgICBzdGF0aWMgY29uc3QgaW50IG1heGltdW1OdW1iZXJPZkZp
ZWxkcyA9IDU7CisKKyAgICBEYXRlVGltZUVkaXRFbGVtZW50KERvY3VtZW50KiwgRWRpdENvbnRy
b2xFdmVudEhhbmRsZXImKTsKKworICAgIHZvaWQgZGlzYWJsZSgpOworICAgIHZpcnR1YWwgYm9v
bCBkaXNhYmxlZCgpIGNvbnN0IE9WRVJSSURFOworICAgIERhdGVUaW1lRmllbGRFbGVtZW50KiBm
aWVsZEF0KGludCkgY29uc3Q7CisgICAgdm9pZCBoYW5kbGVLZXlib2FyZEV2ZW50KEtleWJvYXJk
RXZlbnQqKTsKKyAgICB2b2lkIGhhbmRsZU1vdXNlRXZlbnQoTW91c2VFdmVudCopOworICAgIGlu
dCBuZXh0RmllbGRJbmRleChpbnQpIGNvbnN0OworICAgIGludCBwcmV2aW91c0ZpZWxkSW5kZXgo
aW50KSBjb25zdDsKKyAgICBib29sIHJlYWRPbmx5KCkgY29uc3Q7CisgICAgdm9pZCByZXNldExh
eW91dCgpOworICAgIHZvaWQgc2V0Rm9jdXNGaWVsZChpbnQpOworCisgICAgLy8gRGF0ZVRpbWVG
aWVsZEVsZW1lbnQ6OkZpZWxkRXZlbnRIYW5kbGVyIGZ1bmN0aW9ucy4KKyAgICB2aXJ0dWFsIHZv
aWQgbW92ZVRvTmV4dEZpZWxkKCkgT1ZFUlJJREUgRklOQUw7CisgICAgdmlydHVhbCB2b2lkIGZp
ZWxkVmFsdWVDaGFuZ2VkKCkgT1ZFUlJJREUgRklOQUw7CisKKyAgICAvLyBTcGluQnV0dG9uRWxl
bWVudDo6U3RlcEFjdGlvbkhhbmRsZXIgZnVuY3Rpb25zLgorICAgIHZpcnR1YWwgdm9pZCBzcGlu
QnV0dG9uU3RlcERvd24oKSBPVkVSUklERSBGSU5BTDsKKyAgICB2aXJ0dWFsIHZvaWQgc3BpbkJ1
dHRvblN0ZXBVcCgpIE9WRVJSSURFIEZJTkFMOworCisgICAgRWRpdENvbnRyb2xFdmVudEhhbmRs
ZXIqIG1fZWRpdENvbnRyb2xFdmVudEhhbmRsZXI7CisgICAgUmVmUHRyPERhdGVUaW1lRmllbGRF
bGVtZW50PiBtX2hvdXIxMUZpZWxkOworICAgIFJlZlB0cjxEYXRlVGltZUZpZWxkRWxlbWVudD4g
bV9ob3VyMTJGaWVsZDsKKyAgICBSZWZQdHI8RGF0ZVRpbWVGaWVsZEVsZW1lbnQ+IG1faG91cjI0
RmllbGQ7CisgICAgUmVmUHRyPERhdGVUaW1lRmllbGRFbGVtZW50PiBtX2hvdXIyM0ZpZWxkOwor
ICAgIFJlZlB0cjxEYXRlVGltZUZpZWxkRWxlbWVudD4gbV9taWxsaXNlY29uZEZpZWxkOworICAg
IFJlZlB0cjxEYXRlVGltZUZpZWxkRWxlbWVudD4gbV9taW51dGVGaWVsZDsKKyAgICBSZWZQdHI8
RGF0ZVRpbWVGaWVsZEVsZW1lbnQ+IG1fcGVyaW9kRmllbGQ7CisgICAgUmVmUHRyPERhdGVUaW1l
RmllbGRFbGVtZW50PiBtX3NlY29uZEZpZWxkOworICAgIFJlZlB0cjxTcGluQnV0dG9uRWxlbWVu
dD4gbV9zcGluQnV0dG9uOworICAgIERhdGVUaW1lRmllbGRFbGVtZW50KiBtX2ZpZWxkc1ttYXhp
bXVtTnVtYmVyT2ZGaWVsZHNdOworICAgIGludCBtX2ZvY3VzRmllbGRJbmRleDsKKyAgICBpbnQg
bV9udW1iZXJPZkZpZWxkczsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlm
CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0RhdGVUaW1l
RmllbGRFbGVtZW50cy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9EYXRlVGltZUZp
ZWxkRWxlbWVudHMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjE0MWY4MjA0YTFkNDI2YjA1YzlkZTM0NDMwN2Y5
NGUyYTA0NmEzNTQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRv
dy9EYXRlVGltZUZpZWxkRWxlbWVudHMuY3BwCkBAIC0wLDAgKzEsMzY0IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1
dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
KyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkRhdGVUaW1lRmllbGRFbGVtZW50cy5oIgorCisjaWYgRU5BQkxF
KFRJTUVfSU5QVVRfRklFTERTKQorCisjaW5jbHVkZSAiRGF0ZUNvbXBvbmVudHMuaCIKKyNpbmNs
dWRlICJEYXRlVGltZUZvcm1hdC5oIgorI2luY2x1ZGUgIkVsZW1lbnRTaGFkb3cuaCIKKyNpbmNs
dWRlICJFdmVudEhhbmRsZXIuaCIKKyNpbmNsdWRlICJIVE1MSW5wdXRFbGVtZW50LmgiCisjaW5j
bHVkZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVkZSAiS2V5Ym9hcmRFdmVudC5oIgorI2luY2x1ZGUg
Ik1vdXNlRXZlbnQuaCIKKyNpbmNsdWRlICJUZXh0LmgiCisjaW5jbHVkZSA8d3RmL3RleHQvU3Ry
aW5nQnVpbGRlci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3VzaW5nIG5hbWVzcGFjZSBI
VE1MTmFtZXM7CisKK3N0YXRpYyBjb25zdCBpbnQgaG91ckluTWlsbGlzZWNvbmQgPSAzNjAwICog
MTAwMDsKK3N0YXRpYyBjb25zdCBpbnQgbWludXRlSW5NaWxsaXNlY29uZCA9IDYwICogMTAwMDsK
K3N0YXRpYyBjb25zdCBpbnQgc2Vjb25kSW5NaWxsaXNlY29uZCA9IDEwMDA7CisKK3N0YXRpYyBz
aXplX3QgZGlzcGxheVNpemVPZk51bWJlcihpbnQgdmFsdWUpCit7CisgICAgQVNTRVJUKHZhbHVl
ID49IDApOworCisgICAgaWYgKCF2YWx1ZSkKKyAgICAgICAgcmV0dXJuIDE7CisKKyAgICBpbnQg
bnVtYmVyT2ZEaWdpdHMgPSAwOworICAgIHdoaWxlICh2YWx1ZSkgeworICAgICAgICB2YWx1ZSAv
PSAxMDsKKyAgICAgICAgKytudW1iZXJPZkRpZ2l0czsKKyAgICB9CisKKyAgICByZXR1cm4gbnVt
YmVyT2ZEaWdpdHM7Cit9CisKK0RhdGVUaW1lRmllbGRFbGVtZW50OjpEYXRlVGltZUZpZWxkRWxl
bWVudChEb2N1bWVudCogZG9jdW1lbnQsIEZpZWxkRXZlbnRIYW5kbGVyJiBmaWVsZEV2ZW50SGFu
ZGxlciwgY29uc3QgQXRvbWljU3RyaW5nJiBzaGFkb3dQc2V1ZG9JZCwgaW50IHVuaXRJbk1pbGxp
c2Vjb25kICkKKyAgICA6IEhUTUxFbGVtZW50KHNwYW5UYWcsIGRvY3VtZW50KQorICAgICwgbV9m
aWVsZEV2ZW50SGFuZGxlcigmZmllbGRFdmVudEhhbmRsZXIpCisgICAgLCBtX3VuaXRJbk1pbGxp
c2Vjb25kKHVuaXRJbk1pbGxpc2Vjb25kKQoreworICAgIHNldFNoYWRvd1BzZXVkb0lkKHNoYWRv
d1BzZXVkb0lkKTsKK30KKwordm9pZCBEYXRlVGltZUZpZWxkRWxlbWVudDo6ZGVmYXVsdEV2ZW50
SGFuZGxlcihFdmVudCogZXZlbnQpCit7CisgICAgaWYgKGV2ZW50LT5pc0tleWJvYXJkRXZlbnQo
KSAmJiBldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5rZXlkb3duRXZlbnQpIHsKKyAgICAg
ICAgS2V5Ym9hcmRFdmVudCoga2V5Ym9hcmRFdmVudCA9IHN0YXRpY19jYXN0PEtleWJvYXJkRXZl
bnQqPihldmVudCk7CisKKyAgICAgICAgY29uc3QgU3RyaW5nJiBrZXlJZGVudGlmaWVyID0ga2V5
Ym9hcmRFdmVudC0+a2V5SWRlbnRpZmllcigpOworCisgICAgICAgIGlmIChrZXlJZGVudGlmaWVy
ID09ICJEb3duIikgeworICAgICAgICAgICAga2V5Ym9hcmRFdmVudC0+c2V0RGVmYXVsdEhhbmRs
ZWQoKTsKKyAgICAgICAgICAgIHN0ZXBEb3duKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKworICAgICAgICBpZiAoa2V5SWRlbnRpZmllciA9PSAiVXAiKSB7CisgICAgICAgICAg
ICBrZXlib2FyZEV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOworICAgICAgICAgICAgc3RlcFVw
KCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoa2V5SWRl
bnRpZmllciA9PSAiVSswMDA4IikgeworICAgICAgICAgICAga2V5Ym9hcmRFdmVudC0+c2V0RGVm
YXVsdEhhbmRsZWQoKTsKKyAgICAgICAgICAgIHNldFZhbHVlQXNFbXB0eShEaXNwYXRjaEV2ZW50
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICghZXZl
bnQtPmRlZmF1bHRIYW5kbGVkKCkpCisgICAgICAgIEhUTUxFbGVtZW50OjpkZWZhdWx0RXZlbnRI
YW5kbGVyKGV2ZW50KTsKK30KKwordm9pZCBEYXRlVGltZUZpZWxkRWxlbWVudDo6ZGlzYWJsZSgp
Cit7CisgICAgLy8gU2V0IGRpc2FibGVkIEhUTUwgYXR0cmlidXRlIHRvIGNoYW5nZSBhcHBlcmFu
Y2UuCisgICAgc2V0QXR0cmlidXRlKGRpc2FibGVkQXR0ciwgZW1wdHlTdHJpbmcoKSk7CisgICAg
c2V0TmVlZHNTdHlsZVJlY2FsYygpOworfQorCitib29sIERhdGVUaW1lRmllbGRFbGVtZW50Ojpk
aXNhYmxlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZhc3RIYXNBdHRyaWJ1dGUoZGlzYWJsZWRB
dHRyKTsKK30KKwordm9pZCBEYXRlVGltZUZpZWxkRWxlbWVudDo6dXBkYXRlVmlzaWJsZVZhbHVl
KEV2ZW50QmVoYXZpb3IgZXZlbnRCZWhhdmlvcikKK3sKKyAgICBUZXh0KiBjb25zdCB0ZXh0Tm9k
ZSA9IHRvVGV4dChmaXJzdENoaWxkKCkpOworICAgIGNvbnN0IFN0cmluZyBuZXdWaXNpYmxlVmFs
dWUgPSB2aXNpYmxlVmFsdWUoKTsKKyAgICBBU1NFUlQobmV3VmlzaWJsZVZhbHVlLmxlbmd0aCgp
ID4gMCk7CisKKyAgICBpZiAodGV4dE5vZGUtPndob2xlVGV4dCgpID09IG5ld1Zpc2libGVWYWx1
ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgRXhjZXB0aW9uQ29kZSBlYzsKKyAgICB0ZXh0Tm9k
ZS0+cmVwbGFjZVdob2xlVGV4dChuZXdWaXNpYmxlVmFsdWUsIGVjKTsKKworICAgIGlmIChldmVu
dEJlaGF2aW9yID09IERpc3BhdGNoRXZlbnQgJiYgbV9maWVsZEV2ZW50SGFuZGxlcikKKyAgICAg
ICAgbV9maWVsZEV2ZW50SGFuZGxlci0+ZmllbGRWYWx1ZUNoYW5nZWQoKTsKK30KKworZG91Ymxl
IERhdGVUaW1lRmllbGRFbGVtZW50Ojp2YWx1ZUFzRG91YmxlKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gaGFzVmFsdWUoKSA/IHN0YXRpY19jYXN0PGRvdWJsZT4odmFsdWVBc0ludGVnZXIoKSkgKiBt
X3VuaXRJbk1pbGxpc2Vjb25kIDogc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjpxdWlldF9O
YU4oKTsKK30KKworRGF0ZVRpbWVIb3VyRmllbGRFbGVtZW50OjpEYXRlVGltZUhvdXJGaWVsZEVs
ZW1lbnQoRG9jdW1lbnQqIGRvY3VtZW50LCBGaWVsZEV2ZW50SGFuZGxlciYgZmllbGRFdmVudEhh
bmRsZXIsIGNvbnN0IEF0b21pY1N0cmluZyYgc2hhZG93UHNldWRvSWQsIGludCBtaW5pbXVtLCBp
bnQgbWF4aW11bSkKKyAgICA6IERhdGVUaW1lTnVtZXJpY0ZpZWxkRWxlbWVudChkb2N1bWVudCwg
ZmllbGRFdmVudEhhbmRsZXIsIHNoYWRvd1BzZXVkb0lkLCBob3VySW5NaWxsaXNlY29uZCwgbWlu
aW11bSwgbWF4aW11bSkKKyAgICAsIG1fYWxpZ25tZW50KG1heGltdW0gKyBtYXhpbXVtICUgMikK
K3sKKyAgICBBU1NFUlQoKCFtaW5pbXVtICYmIChtYXhpbXVtID09IDExIHx8IG1heGltdW0gPT0g
MjMpKSB8fCAobWluaW11bSA9PSAxICYmIChtYXhpbXVtID09IDEyIHx8IG1heGltdW0gPT0gMjQp
KSk7Cit9CisKK1Bhc3NSZWZQdHI8RGF0ZVRpbWVIb3VyRmllbGRFbGVtZW50PiBEYXRlVGltZUhv
dXJGaWVsZEVsZW1lbnQ6OmNyZWF0ZShEb2N1bWVudCogZG9jdW1lbnQsIEZpZWxkRXZlbnRIYW5k
bGVyJiBmaWVsZEV2ZW50SGFuZGxlciwgY29uc3QgQXRvbWljU3RyaW5nJiBzaGFkb3dQc2V1ZG9J
ZCwgaW50IG1pbmltdW0sIGludCBtYXhpbXVtKQoreworICAgIFJlZlB0cjxEYXRlVGltZUhvdXJG
aWVsZEVsZW1lbnQ+IGZpZWxkID0gYWRvcHRSZWYobmV3IERhdGVUaW1lSG91ckZpZWxkRWxlbWVu
dChkb2N1bWVudCwgZmllbGRFdmVudEhhbmRsZXIsIHNoYWRvd1BzZXVkb0lkLCBtaW5pbXVtLCBt
YXhpbXVtKSk7CisgICAgZmllbGQtPmFwcGVuZENoaWxkKFRleHQ6OmNyZWF0ZShkb2N1bWVudCwg
ZmllbGQtPnZpc2libGVWYWx1ZSgpKSk7CisgICAgcmV0dXJuIGZpZWxkOworfQorCit2b2lkIERh
dGVUaW1lSG91ckZpZWxkRWxlbWVudDo6c2V0VmFsdWVBc0ludGVnZXIoaW50IHZhbHVlQXNIb3Vy
MjMsIEV2ZW50QmVoYXZpb3IgZXZlbnRCZWhhdmlvcikKK3sKKyAgICBjb25zdCBpbnQgdmFsdWUg
PSBSYW5nZSgwLCAyMykuZW5zdXJlSW5SYW5nZSh2YWx1ZUFzSG91cjIzKSAlIG1fYWxpZ25tZW50
OworICAgIERhdGVUaW1lTnVtZXJpY0ZpZWxkRWxlbWVudDo6c2V0VmFsdWVBc0ludGVnZXIocmFu
Z2UoKS5taW5pbXVtICYmICF2YWx1ZSA/IG1fYWxpZ25tZW50IDogdmFsdWUsIGV2ZW50QmVoYXZp
b3IpOworfQorCitpbnQgRGF0ZVRpbWVIb3VyRmllbGRFbGVtZW50Ojp2YWx1ZUFzSW50ZWdlcigp
IGNvbnN0Cit7CisgICAgcmV0dXJuIGhhc1ZhbHVlKCkgPyBEYXRlVGltZU51bWVyaWNGaWVsZEVs
ZW1lbnQ6OnZhbHVlQXNJbnRlZ2VyKCkgJSBtX2FsaWdubWVudCA6IC0xOworfQorCitEYXRlVGlt
ZU51bWVyaWNGaWVsZEVsZW1lbnQ6OlJhbmdlOjpSYW5nZShpbnQgbWluaW11bSwgaW50IG1heGlt
dW0pCisgICAgOiBtYXhpbXVtKG1heGltdW0pCisgICAgLCBtaW5pbXVtKG1pbmltdW0pCit7Cisg
ICAgQVNTRVJUKG1pbmltdW0gPD0gbWF4aW11bSk7Cit9CisKK2ludCBEYXRlVGltZU51bWVyaWNG
aWVsZEVsZW1lbnQ6OlJhbmdlOjplbnN1cmVJblJhbmdlKGludCB2YWx1ZSkgY29uc3QKK3sKKyAg
ICByZXR1cm4gc3RkOjptaW4oc3RkOjptYXgodmFsdWUsIG1pbmltdW0pLCBtYXhpbXVtKTsKK30K
KworRGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50OjpEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1l
bnQoRG9jdW1lbnQqIGRvY3VtZW50LCBGaWVsZEV2ZW50SGFuZGxlciYgZmllbGRFdmVudEhhbmRs
ZXIsIGNvbnN0IEF0b21pY1N0cmluZyYgc2hhZG93UHNldWRvSWQsIGludCB1bml0SW5NaWxsaXNl
Y29uZCwgaW50IG1pbmltdW0sIGludCBtYXhpbXVtKQorICAgIDogRGF0ZVRpbWVGaWVsZEVsZW1l
bnQoZG9jdW1lbnQsIGZpZWxkRXZlbnRIYW5kbGVyLCBzaGFkb3dQc2V1ZG9JZCwgdW5pdEluTWls
bGlzZWNvbmQpCisgICAgLCBtX2xhc3RTZXRDaGFyVGltZSgwKQorICAgICwgbV9yYW5nZShtaW5p
bXVtLCBtYXhpbXVtKQorICAgICwgbV92YWx1ZSgwKQorICAgICwgbV9oYXNWYWx1ZShmYWxzZSkK
K3sKK30KKworUGFzc1JlZlB0cjxEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQ+IERhdGVUaW1l
TnVtZXJpY0ZpZWxkRWxlbWVudDo6Y3JlYXRlKERvY3VtZW50KiBkb2N1bWVudCwgRmllbGRFdmVu
dEhhbmRsZXImIGZpZWxkRXZlbnRIYW5kbGVyLCBjb25zdCBBdG9taWNTdHJpbmcmIHNoYWRvd1Bz
ZXVkb0lkLCBpbnQgdW5pdEluTWlsbGlzZWNvbmQsIGludCBtaW5pbXVtLCBpbnQgbWF4aW11bSkK
K3sKKyAgICBSZWZQdHI8RGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50PiBmaWVsZCA9IGFkb3B0
UmVmKG5ldyBEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQoZG9jdW1lbnQsIGZpZWxkRXZlbnRI
YW5kbGVyLCBzaGFkb3dQc2V1ZG9JZCwgdW5pdEluTWlsbGlzZWNvbmQsIG1pbmltdW0sIG1heGlt
dW0pKTsKKyAgICBmaWVsZC0+YXBwZW5kQ2hpbGQoVGV4dDo6Y3JlYXRlKGRvY3VtZW50LCBmaWVs
ZC0+dmlzaWJsZVZhbHVlKCkpKTsKKyAgICByZXR1cm4gZmllbGQ7Cit9CisKK3ZvaWQgRGF0ZVRp
bWVOdW1lcmljRmllbGRFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBldmVudCkK
K3sKKyAgICBpZiAoZXZlbnQtPmlzS2V5Ym9hcmRFdmVudCgpICYmIGV2ZW50LT50eXBlKCkgPT0g
ZXZlbnROYW1lcygpLmtleWRvd25FdmVudCkgeworICAgICAgICBLZXlib2FyZEV2ZW50KiBjb25z
dCBrZXlib2FyZEV2ZW50ID0gc3RhdGljX2Nhc3Q8S2V5Ym9hcmRFdmVudCo+KGV2ZW50KTsKKyAg
ICAgICAgY29uc3QgaW50IGRpZ2l0ID0ga2V5Ym9hcmRFdmVudC0+a2V5Q29kZSgpIC0gJzAnOwor
ICAgICAgICBpZiAoZGlnaXQgPj0gMCAmJiBkaWdpdCA8PSA5KSB7CisgICAgICAgICAgICBrZXli
b2FyZEV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOworICAgICAgICAgICAgbV92YWx1ZSA9IGVu
c3VyZUluUmFuZ2UoaXNDb250aW51b3NLZXlib2FyZEV2ZW50KGtleWJvYXJkRXZlbnQpID8gbV92
YWx1ZSAqIDEwICsgZGlnaXQgOiBkaWdpdCk7CisgICAgICAgICAgICBtX2xhc3RTZXRDaGFyVGlt
ZSA9IGV2ZW50LT50aW1lU3RhbXAoKTsKKyAgICAgICAgICAgIG1faGFzVmFsdWUgPSB0cnVlOwor
ICAgICAgICAgICAgdXBkYXRlVmlzaWJsZVZhbHVlKERpc3BhdGNoRXZlbnQpOworICAgICAgICAg
ICAgaWYgKG1fdmFsdWUgKiAxMCA+IG1fcmFuZ2UubWF4aW11bSAmJiBtX2ZpZWxkRXZlbnRIYW5k
bGVyKQorICAgICAgICAgICAgICAgIG1fZmllbGRFdmVudEhhbmRsZXItPm1vdmVUb05leHRGaWVs
ZCgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCisgICAgRGF0ZVRp
bWVGaWVsZEVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoZXZlbnQpOworfQorCitib29sIERh
dGVUaW1lTnVtZXJpY0ZpZWxkRWxlbWVudDo6aXNDb250aW51b3NLZXlib2FyZEV2ZW50KEtleWJv
YXJkRXZlbnQqIGV2ZW50KSBjb25zdAoreworICAgIGNvbnN0IHVuc2lnbmVkIENvbnRpbnVvdXNL
ZXlib2FyZEV2ZW50VGhyZXNob2xkID0gNzAwOworICAgIHJldHVybiBtX2hhc1ZhbHVlICYmIGV2
ZW50LT50aW1lU3RhbXAoKSAtIG1fbGFzdFNldENoYXJUaW1lIDwgQ29udGludW91c0tleWJvYXJk
RXZlbnRUaHJlc2hvbGQ7Cit9CisKK3ZvaWQgRGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50Ojpz
ZXRWYWx1ZUFzRW1wdHkoRXZlbnRCZWhhdmlvciBldmVudEJlaGF2aW9yKQoreworICAgIG1fdmFs
dWUgPSAwOworICAgIG1faGFzVmFsdWUgPSBmYWxzZTsKKyAgICB1cGRhdGVWaXNpYmxlVmFsdWUo
ZXZlbnRCZWhhdmlvcik7Cit9CisKK3ZvaWQgRGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50Ojpz
ZXRWYWx1ZUFzSW50ZWdlcihpbnQgdmFsdWUsIEV2ZW50QmVoYXZpb3IgZXZlbnRCZWhhdmlvcikK
K3sKKyAgICBtX3ZhbHVlID0gZW5zdXJlSW5SYW5nZSh2YWx1ZSk7CisgICAgbV9oYXNWYWx1ZSA9
IHRydWU7CisgICAgdXBkYXRlVmlzaWJsZVZhbHVlKGV2ZW50QmVoYXZpb3IpOworfQorCit2b2lk
IERhdGVUaW1lTnVtZXJpY0ZpZWxkRWxlbWVudDo6c3RlcERvd24oKQoreworICAgIGlmIChtX2hh
c1ZhbHVlKQorICAgICAgICBtX3ZhbHVlID0gbV92YWx1ZSA9PSBtX3JhbmdlLm1pbmltdW0gPyBt
X3JhbmdlLm1heGltdW0gOiBlbnN1cmVJblJhbmdlKG1fdmFsdWUgLSAxKTsKKyAgICBlbHNlCisg
ICAgICAgIG1fdmFsdWUgPSBtX3JhbmdlLm1heGltdW07CisKKyAgICBtX2hhc1ZhbHVlID0gdHJ1
ZTsKKyAgICB1cGRhdGVWaXNpYmxlVmFsdWUoRGlzcGF0Y2hFdmVudCk7Cit9CisKK3ZvaWQgRGF0
ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50OjpzdGVwVXAoKQoreworICAgIGlmIChtX2hhc1ZhbHVl
KQorICAgICAgICBtX3ZhbHVlID0gbV92YWx1ZSA9PSBtX3JhbmdlLm1heGltdW0gPyBtX3Jhbmdl
Lm1pbmltdW0gOiBlbnN1cmVJblJhbmdlKG1fdmFsdWUgKyAxKTsKKyAgICBlbHNlCisgICAgICAg
IG1fdmFsdWUgPSBtX3JhbmdlLm1pbmltdW07CisKKyAgICBtX2hhc1ZhbHVlID0gdHJ1ZTsKKyAg
ICB1cGRhdGVWaXNpYmxlVmFsdWUoRGlzcGF0Y2hFdmVudCk7Cit9CisKK1N0cmluZyBEYXRlVGlt
ZU51bWVyaWNGaWVsZEVsZW1lbnQ6OnZhbHVlKCkgY29uc3QKK3sKKyAgICBpZiAoIW1faGFzVmFs
dWUpCisgICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOworCisgICAgaWYgKG1fcmFuZ2UubWF4
aW11bSA+IDk5OSkKKyAgICAgICAgcmV0dXJuIFN0cmluZzo6bnVtYmVyKG1fdmFsdWUpOworCisg
ICAgaWYgKG1fcmFuZ2UubWF4aW11bSA+IDk5KQorICAgICAgICByZXR1cm4gU3RyaW5nOjpmb3Jt
YXQoIiUwM2QiLCBtX3ZhbHVlKTsKKworICAgIHJldHVybiBTdHJpbmc6OmZvcm1hdCgiJTAyZCIs
IG1fdmFsdWUpOworfQorCitpbnQgRGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50Ojp2YWx1ZUFz
SW50ZWdlcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1faGFzVmFsdWUgPyBtX3ZhbHVlIDogLTE7
Cit9CisKK1N0cmluZyBEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQ6OnZpc2libGVWYWx1ZSgp
IGNvbnN0Cit7CisgICAgaWYgKG1faGFzVmFsdWUpCisgICAgICAgIHJldHVybiB2YWx1ZSgpOwor
CisgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOworICAgIGZvciAoaW50IG51bWJlck9mRGFzaHMg
PSBzdGQ6Om1heChkaXNwbGF5U2l6ZU9mTnVtYmVyKG1fcmFuZ2UubWF4aW11bSksIGRpc3BsYXlT
aXplT2ZOdW1iZXIobV9yYW5nZS5taW5pbXVtKSk7IG51bWJlck9mRGFzaHM7IC0tbnVtYmVyT2ZE
YXNocykKKyAgICAgICAgYnVpbGRlci5hcHBlbmQoJy0nKTsKKyAgICByZXR1cm4gYnVpbGRlci50
b1N0cmluZygpOworfQorCitEYXRlVGltZVN5bWJvbGljRmllbGRFbGVtZW50OjpEYXRlVGltZVN5
bWJvbGljRmllbGRFbGVtZW50KERvY3VtZW50KiBkb2N1bWVudCwgRmllbGRFdmVudEhhbmRsZXIm
IGZpZWxkRXZlbnRIYW5kbGVyLCBjb25zdCBBdG9taWNTdHJpbmcmIHNoYWRvd1BzZXVkb0lkLCBp
bnQgdW5pdEluTWlsbGlzZWNvbmQsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBzeW1ib2xzKQorICAg
IDogRGF0ZVRpbWVGaWVsZEVsZW1lbnQoZG9jdW1lbnQsIGZpZWxkRXZlbnRIYW5kbGVyLCBzaGFk
b3dQc2V1ZG9JZCwgdW5pdEluTWlsbGlzZWNvbmQpCisgICAgLCBtX3NlbGVjdGVkSW5kZXgoLTEp
CisgICAgLCBtX3N5bWJvbHMoc3ltYm9scykKK3sKKyAgICBBU1NFUlQoIXN5bWJvbHMuaXNFbXB0
eSgpKTsKK30KKworUGFzc1JlZlB0cjxEYXRlVGltZVN5bWJvbGljRmllbGRFbGVtZW50PiBEYXRl
VGltZVN5bWJvbGljRmllbGRFbGVtZW50OjpjcmVhdGUoRG9jdW1lbnQqIGRvY3VtZW50LCBGaWVs
ZEV2ZW50SGFuZGxlciYgZmllbGRFdmVudEhhbmRsZXIsIGNvbnN0IEF0b21pY1N0cmluZyYgc2hh
ZG93UHNldWRvSWQsIGludCB1bml0SW5NaWxsaXNlY29uZCwgY29uc3QgVmVjdG9yPFN0cmluZz4m
IHN5bWJvbHMpCit7CisgICAgUmVmUHRyPERhdGVUaW1lU3ltYm9saWNGaWVsZEVsZW1lbnQ+IGZp
ZWxkID0gYWRvcHRSZWYobmV3IERhdGVUaW1lU3ltYm9saWNGaWVsZEVsZW1lbnQoZG9jdW1lbnQs
IGZpZWxkRXZlbnRIYW5kbGVyLCBzaGFkb3dQc2V1ZG9JZCwgdW5pdEluTWlsbGlzZWNvbmQsIHN5
bWJvbHMpKTsKKyAgICBmaWVsZC0+YXBwZW5kQ2hpbGQoVGV4dDo6Y3JlYXRlKGRvY3VtZW50LCBm
aWVsZC0+dmlzaWJsZVZhbHVlKCkpKTsKKyAgICByZXR1cm4gZmllbGQ7Cit9CisKK3ZvaWQgRGF0
ZVRpbWVTeW1ib2xpY0ZpZWxkRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCogZXZl
bnQpCit7CisgICAgaWYgKGV2ZW50LT5pc0tleWJvYXJkRXZlbnQoKSAmJiBldmVudC0+dHlwZSgp
ID09IGV2ZW50TmFtZXMoKS5rZXlwcmVzc0V2ZW50KSB7CisgICAgICAgIEtleWJvYXJkRXZlbnQq
IGtleWJvYXJkRXZlbnQgPSBzdGF0aWNfY2FzdDxLZXlib2FyZEV2ZW50Kj4oZXZlbnQpOworICAg
ICAgICBjb25zdCBpbnQgcmF3Q2hhckNvZGUgPSBrZXlib2FyZEV2ZW50LT5jaGFyQ29kZSgpOwor
ICAgICAgICBjb25zdCBpbnQgY2hhckNvZGUgPSByYXdDaGFyQ29kZSA+PSAnYScgJiYgcmF3Q2hh
ckNvZGUgPD0gJ3onID8gcmF3Q2hhckNvZGUgKyAnQScgLSAnYScgOiByYXdDaGFyQ29kZTsKKyAg
ICAgICAgaWYgKGNoYXJDb2RlID49ICdBJyAmJiBjaGFyQ29kZSA8PSAnWicpIHsKKyAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaW5kZXggPSAwOyBpbmRleCA8IG1fc3ltYm9scy5zaXplKCk7ICsr
aW5kZXgpIHsKKyAgICAgICAgICAgICAgICBpZiAobV9zeW1ib2xzW2luZGV4XVswXSA9PSBjaGFy
Q29kZSkgeworICAgICAgICAgICAgICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsK
KyAgICAgICAgICAgICAgICAgICAgc2V0VmFsdWVBc0ludGVnZXIoaW5kZXgsIERpc3BhdGNoRXZl
bnQpOworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgRGF0ZVRpbWVGaWVsZEVsZW1lbnQ6
OmRlZmF1bHRFdmVudEhhbmRsZXIoZXZlbnQpOworfQorCit2b2lkIERhdGVUaW1lU3ltYm9saWNG
aWVsZEVsZW1lbnQ6OnNldFZhbHVlQXNFbXB0eShFdmVudEJlaGF2aW9yIGV2ZW50QmVoYXZpb3Ip
Cit7CisgICAgbV9zZWxlY3RlZEluZGV4ID0gSW52YWxpZEluZGV4OworICAgIHVwZGF0ZVZpc2li
bGVWYWx1ZShldmVudEJlaGF2aW9yKTsKK30KKwordm9pZCBEYXRlVGltZVN5bWJvbGljRmllbGRF
bGVtZW50OjpzZXRWYWx1ZUFzSW50ZWdlcihpbnQgbmV3U2VsZWN0ZWRJbmRleCwgRXZlbnRCZWhh
dmlvciBldmVudEJlaGF2aW9yKQoreworICAgIG1fc2VsZWN0ZWRJbmRleCA9IHN0ZDo6bWF4KDAs
IHN0ZDo6bWluKG5ld1NlbGVjdGVkSW5kZXgsIHN0YXRpY19jYXN0PGludD4obV9zeW1ib2xzLnNp
emUoKSAtIDEpKSk7CisgICAgdXBkYXRlVmlzaWJsZVZhbHVlKGV2ZW50QmVoYXZpb3IpOworfQor
Cit2b2lkIERhdGVUaW1lU3ltYm9saWNGaWVsZEVsZW1lbnQ6OnN0ZXBEb3duKCkKK3sKKyAgICBj
b25zdCBpbnQgc2l6ZSA9IG1fc3ltYm9scy5zaXplKCk7CisgICAgbV9zZWxlY3RlZEluZGV4ID0g
aGFzVmFsdWUoKSA/IChtX3NlbGVjdGVkSW5kZXggKyBzaXplIC0gMSkgJSBzaXplIDogc2l6ZSAt
IDE7CisgICAgdXBkYXRlVmlzaWJsZVZhbHVlKERpc3BhdGNoRXZlbnQpOworfQorCit2b2lkIERh
dGVUaW1lU3ltYm9saWNGaWVsZEVsZW1lbnQ6OnN0ZXBVcCgpCit7CisgICAgbV9zZWxlY3RlZElu
ZGV4ID0gaGFzVmFsdWUoKSA/IChtX3NlbGVjdGVkSW5kZXggKyAxKSAlIG1fc3ltYm9scy5zaXpl
KCkgOiAwOworICAgIHVwZGF0ZVZpc2libGVWYWx1ZShEaXNwYXRjaEV2ZW50KTsKK30KKworU3Ry
aW5nIERhdGVUaW1lU3ltYm9saWNGaWVsZEVsZW1lbnQ6OnZhbHVlKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gaGFzVmFsdWUoKSA/IG1fc3ltYm9sc1ttX3NlbGVjdGVkSW5kZXhdIDogZW1wdHlTdHJp
bmcoKTsKK30KKworaW50IERhdGVUaW1lU3ltYm9saWNGaWVsZEVsZW1lbnQ6OnZhbHVlQXNJbnRl
Z2VyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zZWxlY3RlZEluZGV4OworfQorCitTdHJpbmcg
RGF0ZVRpbWVTeW1ib2xpY0ZpZWxkRWxlbWVudDo6dmlzaWJsZVZhbHVlKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gaGFzVmFsdWUoKSA/IG1fc3ltYm9sc1ttX3NlbGVjdGVkSW5kZXhdIDogIi0tIjsK
K30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvc2hhZG93L0RhdGVUaW1lRmllbGRFbGVtZW50cy5oIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9zaGFkb3cvRGF0ZVRpbWVGaWVsZEVsZW1lbnRzLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzU2
MWE0NTI4OTI5MTQ2OWZjZDQyOGRhMWY0ZDc5NzllOTQ1MGM5YwotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0RhdGVUaW1lRmllbGRFbGVtZW50cy5oCkBAIC0w
LDAgKzEsMTg3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBt
ZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUg
b2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICog
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2lmbmRlZiBEYXRlVGltZUZpZWxkRWxlbWVudHNfaAorI2RlZmluZSBEYXRl
VGltZUZpZWxkRWxlbWVudHNfaAorCisjaWYgRU5BQkxFKFRJTUVfSU5QVVRfRklFTERTKQorCisj
aW5jbHVkZSAiSFRNTERpdkVsZW1lbnQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFz
cyBLZXlib2FyZEV2ZW50OworY2xhc3MgTW91c2VFdmVudDsKKworLy8gRGF0ZVRpbWVGaWVsZEVs
ZW1lbnQgaXMgYmFzZSBjbGFzcyBvZiBkYXRlIHRpbWUgZmllbGQgZWxlbWVudC4KK2NsYXNzIERh
dGVUaW1lRmllbGRFbGVtZW50IDogcHVibGljIEhUTUxFbGVtZW50IHsKKyAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShEYXRlVGltZUZpZWxkRWxlbWVudCk7CisKK3B1YmxpYzoKKyAgICBlbnVtIEV2
ZW50QmVoYXZpb3IgeworICAgICAgICBEaXNwYXRjaE5vRXZlbnQsCisgICAgICAgIERpc3BhdGNo
RXZlbnQsCisgICAgfTsKKworICAgIC8vIEZpZWxkRXZlbnRIYW5kbGVyIGltcGxlbWVudGVyIG11
c3QgY2FsbCByZW1vdmVFdmVudEhhbmRsZXIgd2hlbgorICAgIC8vIGl0IGRvZXNuJ3QgaGFuZGxl
IGV2ZW50LCBlLmcuIGF0IGRlc3RydWN0aW9uLgorICAgIGNsYXNzIEZpZWxkRXZlbnRIYW5kbGVy
IHsKKyAgICBwdWJsaWM6CisgICAgICAgIHZpcnR1YWwgfkZpZWxkRXZlbnRIYW5kbGVyKCkgeyB9
CisgICAgICAgIHZpcnR1YWwgdm9pZCBmaWVsZFZhbHVlQ2hhbmdlZCgpID0gMDsKKyAgICAgICAg
dmlydHVhbCB2b2lkIG1vdmVUb05leHRGaWVsZCgpID0gMDsKKyAgICB9OworCisgICAgdmlydHVh
bCB2b2lkIGRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqKTsKKyAgICB2b2lkIGRpc2FibGUoKTsK
KyAgICB2aXJ0dWFsIGJvb2wgZGlzYWJsZWQoKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFs
IGJvb2wgaGFzVmFsdWUoKSBjb25zdCA9IDA7CisgICAgdm9pZCByZW1vdmVFdmVudEhhbmRsZXIo
KSB7IG1fZmllbGRFdmVudEhhbmRsZXIgPSAwOyB9CisgICAgdmlydHVhbCB2b2lkIHNldFZhbHVl
QXNFbXB0eShFdmVudEJlaGF2aW9yID0gRGlzcGF0Y2hOb0V2ZW50KSA9IDA7CisgICAgdmlydHVh
bCB2b2lkIHNldFZhbHVlQXNJbnRlZ2VyKGludCwgRXZlbnRCZWhhdmlvciA9IERpc3BhdGNoTm9F
dmVudCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzdGVwRG93bigpID0gMDsKKyAgICB2aXJ0dWFs
IHZvaWQgc3RlcFVwKCkgPSAwOworICAgIHZpcnR1YWwgU3RyaW5nIHZhbHVlKCkgY29uc3QgPSAw
OworICAgIGRvdWJsZSB2YWx1ZUFzRG91YmxlKCkgY29uc3Q7CisgICAgdmlydHVhbCBpbnQgdmFs
dWVBc0ludGVnZXIoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBTdHJpbmcgdmlzaWJsZVZhbHVl
KCkgY29uc3QgPSAwOworCitwcm90ZWN0ZWQ6CisgICAgRGF0ZVRpbWVGaWVsZEVsZW1lbnQoRG9j
dW1lbnQqLCBGaWVsZEV2ZW50SGFuZGxlciYsIGNvbnN0IEF0b21pY1N0cmluZyYsIGludCk7CisK
KyAgICBpbnQgdW5pdEluTWlsbGlzZWNvbmQoKSBjb25zdCB7IHJldHVybiBtX3VuaXRJbk1pbGxp
c2Vjb25kOyB9CisgICAgdm9pZCB1cGRhdGVWaXNpYmxlVmFsdWUoRXZlbnRCZWhhdmlvcik7CisK
KyAgICBGaWVsZEV2ZW50SGFuZGxlciogbV9maWVsZEV2ZW50SGFuZGxlcjsKKyAgICBjb25zdCBp
bnQgbV91bml0SW5NaWxsaXNlY29uZDsKK307CisKKy8vIERhdGVUaW1lTnVtZXJpY0ZpZWxkRWxl
bWVudCByZXByZXNlbnRzIG51bWVyaWMgZmllbGQgb2YgZGF0ZSB0aW1lIGZvcm1hdC4KKy8vIFRo
aXMgY2xhc3MgbWF5IGJlIHVzZWQgZm9yOgorLy8gIC0gbWludXRlCisvLyAgLSBtaWxsaXNlY29u
ZAorLy8gIC0gbW9udGgKKy8vICAtIHNlY29uZAorLy8gIC0geWVhcgorY2xhc3MgRGF0ZVRpbWVO
dW1lcmljRmllbGRFbGVtZW50IDogcHVibGljIERhdGVUaW1lRmllbGRFbGVtZW50IHsKKyAgICBX
VEZfTUFLRV9OT05DT1BZQUJMRShEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQpOworCitwdWJs
aWM6CisgICAgc3RydWN0IFJhbmdlIHsKKyAgICAgICAgUmFuZ2UoaW50IG1pbmltdW0sIGludCBt
YXhpbXVtKTsKKyAgICAgICAgaW50IGVuc3VyZUluUmFuZ2UoaW50KSBjb25zdDsKKworICAgICAg
ICBpbnQgbWF4aW11bTsKKyAgICAgICAgaW50IG1pbmltdW07CisgICAgfTsKKworICAgIHN0YXRp
YyBQYXNzUmVmUHRyPERhdGVUaW1lTnVtZXJpY0ZpZWxkRWxlbWVudD4gY3JlYXRlKERvY3VtZW50
KiwgRmllbGRFdmVudEhhbmRsZXImLCBjb25zdCBBdG9taWNTdHJpbmcmLCBpbnQgdW5pdEluTWls
bGlzZWNvbmQsIGludCBtaW5pbXVtLCBpbnQgbWF4aW11bSk7CisKK3Byb3RlY3RlZDoKKyAgICBE
YXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQoRG9jdW1lbnQqLCBGaWVsZEV2ZW50SGFuZGxlciYs
IGNvbnN0IEF0b21pY1N0cmluZyYsIGludCB1bml0SW5NaWxsaXNlY29uZCwgaW50IG1pbmltdW0s
IGludCBtYXhpbXVtKTsKKworICAgIGludCBlbnN1cmVJblJhbmdlKGludCB2YWx1ZSkgY29uc3Qg
eyByZXR1cm4gbV9yYW5nZS5lbnN1cmVJblJhbmdlKHZhbHVlKTsgfQorICAgIGNvbnN0IFJhbmdl
JiByYW5nZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmFuZ2U7IH0KKworICAgIC8vIERhdGVUaW1lRmll
bGRFbGVtZW50IGZ1bmN0aW9ucy4KKyAgICB2aXJ0dWFsIGJvb2wgaGFzVmFsdWUoKSBjb25zdCBP
VkVSUklERSBGSU5BTCB7IHJldHVybiBtX2hhc1ZhbHVlOyB9CisgICAgdmlydHVhbCB2b2lkIHNl
dFZhbHVlQXNJbnRlZ2VyKGludCwgRXZlbnRCZWhhdmlvcikgT1ZFUlJJREU7CisgICAgdmlydHVh
bCBpbnQgdmFsdWVBc0ludGVnZXIoKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIFN0cmlu
ZyB2aXNpYmxlVmFsdWUoKSBjb25zdCBPVkVSUklERSBGSU5BTDsKKworcHJpdmF0ZToKKyAgICBi
b29sIGlzQ29udGludW9zS2V5Ym9hcmRFdmVudChLZXlib2FyZEV2ZW50KikgY29uc3Q7CisKKyAg
ICAvLyBEYXRlVGltZUZpZWxkRWxlbWVudCBmdW5jdGlvbnMuCisgICAgdmlydHVhbCB2b2lkIGRl
ZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqKSBPVkVSUklERSBGSU5BTDsKKyAgICB2aXJ0dWFsIHZv
aWQgc2V0VmFsdWVBc0VtcHR5KEV2ZW50QmVoYXZpb3IpIE9WRVJSSURFIEZJTkFMOworICAgIHZp
cnR1YWwgdm9pZCBzdGVwRG93bigpIE9WRVJSSURFIEZJTkFMOworICAgIHZpcnR1YWwgdm9pZCBz
dGVwVXAoKSBPVkVSUklERSBGSU5BTDsKKyAgICB2aXJ0dWFsIFN0cmluZyB2YWx1ZSgpIGNvbnN0
IE9WRVJSSURFIEZJTkFMOworCisgICAgRE9NVGltZVN0YW1wIG1fbGFzdFNldENoYXJUaW1lOwor
ICAgIGNvbnN0IFJhbmdlIG1fcmFuZ2U7CisgICAgaW50IG1fdmFsdWU7CisgICAgYm9vbCBtX2hh
c1ZhbHVlOworfTsKKworLy8gRGF0ZVRpbWVIb3VyRmllbGRFbGVtZW50IGlzIHVzZWQgZm9yIGhv
dXIgZmllbGQgb2YgZGF0ZSB0aW1lIGZvcm1hdAorLy8gc3VwcG9ydGluZyBmb2xsb3dpbmcgcGF0
dGVybnM6CisvLyAgLSAwIHRvIDExCisvLyAgLSAxIHRvIDEyCisvLyAgLSAwIHRvIDIzCisvLyAg
LSAxIHRvIDI0CitjbGFzcyBEYXRlVGltZUhvdXJGaWVsZEVsZW1lbnQgOiBwdWJsaWMgRGF0ZVRp
bWVOdW1lcmljRmllbGRFbGVtZW50IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShEYXRlVGlt
ZUhvdXJGaWVsZEVsZW1lbnQpOworCitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8RGF0
ZVRpbWVIb3VyRmllbGRFbGVtZW50PiBjcmVhdGUoRG9jdW1lbnQqLCBGaWVsZEV2ZW50SGFuZGxl
ciYsIGNvbnN0IEF0b21pY1N0cmluZyYsIGludCBtaW5pbXVtLCBpbnQgbWF4aW11bSk7CisKK3By
aXZhdGU6CisgICAgRGF0ZVRpbWVIb3VyRmllbGRFbGVtZW50KERvY3VtZW50KiwgRmllbGRFdmVu
dEhhbmRsZXImLCBjb25zdCBBdG9taWNTdHJpbmcmLCBpbnQgbWluaW11bSwgaW50IG1heGltdW0p
OworCisgICAgLy8gRGF0ZVRpbWVGaWVsZEVsZW1lbnQgZnVuY3Rpb25zLgorICAgIHZpcnR1YWwg
dm9pZCBzZXRWYWx1ZUFzSW50ZWdlcihpbnQsIEV2ZW50QmVoYXZpb3IpIE9WRVJSSURFIEZJTkFM
OworICAgIHZpcnR1YWwgaW50IHZhbHVlQXNJbnRlZ2VyKCkgY29uc3QgT1ZFUlJJREUgRklOQUw7
CisKKyAgICBjb25zdCBpbnQgbV9hbGlnbm1lbnQ7Cit9OworCisvLyBEYXRlVGltZVN5bWJvbGlj
RmllbGRFbGVtZW50IGlzIHVzZWQgZm9yIHBlcmlvZCBmaWVsZCBvZiBkYXRhIHRpbWUgZm9ybWF0
LgorY2xhc3MgRGF0ZVRpbWVTeW1ib2xpY0ZpZWxkRWxlbWVudCA6IHB1YmxpYyBEYXRlVGltZUZp
ZWxkRWxlbWVudCB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRGF0ZVRpbWVTeW1ib2xpY0Zp
ZWxkRWxlbWVudCk7CisKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxEYXRlVGltZVN5
bWJvbGljRmllbGRFbGVtZW50PiBjcmVhdGUoRG9jdW1lbnQqLCBGaWVsZEV2ZW50SGFuZGxlciYs
IGNvbnN0IEF0b21pY1N0cmluZyYsIGludCwgY29uc3QgVmVjdG9yPFN0cmluZz4mKTsKKworcHJp
dmF0ZToKKyAgICBzdGF0aWMgY29uc3QgaW50IEludmFsaWRJbmRleCA9IC0xOworCisgICAgRGF0
ZVRpbWVTeW1ib2xpY0ZpZWxkRWxlbWVudChEb2N1bWVudCosIEZpZWxkRXZlbnRIYW5kbGVyJiwg
Y29uc3QgQXRvbWljU3RyaW5nJiwgaW50LCBjb25zdCBWZWN0b3I8U3RyaW5nPiYpOworCisgICAg
Ly8gRGF0ZVRpbWVGaWVsZEVsZW1lbnQgZnVuY3Rpb25zLgorICAgIHZpcnR1YWwgdm9pZCBkZWZh
dWx0RXZlbnRIYW5kbGVyKEV2ZW50KikgT1ZFUlJJREUgRklOQUw7CisgICAgdmlydHVhbCBib29s
IGhhc1ZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV9zZWxlY3RlZEluZGV4ID49IDA7IH0KKyAgICB2
aXJ0dWFsIHZvaWQgc2V0VmFsdWVBc0VtcHR5KEV2ZW50QmVoYXZpb3IgPSBEaXNwYXRjaE5vRXZl
bnQpIE9WRVJSSURFIEZJTkFMOworICAgIHZpcnR1YWwgdm9pZCBzZXRWYWx1ZUFzSW50ZWdlcihp
bnQsIEV2ZW50QmVoYXZpb3IpIE9WRVJSSURFIEZJTkFMOworICAgIHZpcnR1YWwgdm9pZCBzdGVw
RG93bigpIE9WRVJSSURFIEZJTkFMOworICAgIHZpcnR1YWwgdm9pZCBzdGVwVXAoKSBPVkVSUklE
RSBGSU5BTDsKKyAgICB2aXJ0dWFsIFN0cmluZyB2YWx1ZSgpIGNvbnN0IE9WRVJSSURFIEZJTkFM
OworICAgIHZpcnR1YWwgaW50IHZhbHVlQXNJbnRlZ2VyKCkgY29uc3QgT1ZFUlJJREUgRklOQUw7
CisgICAgdmlydHVhbCBTdHJpbmcgdmlzaWJsZVZhbHVlKCkgY29uc3QgT1ZFUlJJREUgRklOQUw7
CisKKyAgICBpbnQgbV9zZWxlY3RlZEluZGV4OworICAgIGNvbnN0IFZlY3RvcjxTdHJpbmc+IG1f
c3ltYm9sczsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCisjZW5kaWYK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9Eb2N1bWVudExvYWRlci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRMb2FkZXIuY3BwCmluZGV4IDMwMmE3YWQyODVk
MTFlMWViMDM0YWMwYWE3Y2E1MjJjZTliNmM5YWUuLjFjNGRlYmY5ZjhkMjdmODk4Mzg3YzVjMmZh
YzM0NDliZTk5YTA4ODMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9Eb2N1bWVu
dExvYWRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0RvY3VtZW50TG9hZGVyLmNw
cApAQCAtNjg5LDYgKzY4OSw5IEBAIGJvb2wgRG9jdW1lbnRMb2FkZXI6OnNjaGVkdWxlQXJjaGl2
ZUxvYWQoUmVzb3VyY2VMb2FkZXIqIGxvYWRlciwgY29uc3QgUmVzb3VyY2VSCiAjZW5kaWYKICNp
ZiBFTkFCTEUoTUhUTUwpCiAgICAgY2FzZSBBcmNoaXZlOjpNSFRNTDoKKyAgICAgICAgLy8gU2No
ZWR1bGUgdGhpcyBsb2FkZXIgd2l0aG91dCBhIHJlc291cmNlIHNvIHRoYXQgcmVzb3VyY2UgY29t
cGxldGlvbi9mYWlsdXJlIG5vdGlmaWNhdGlvbnMgYXJlIHN0aWxsIGZpcmVkICh3aGljaCB3aWxs
IHRyaWdnZXIgYSBjYWxsIHRvIFJlc291cmNlTG9hZGVyLmRpZEZhaWwpLgorICAgICAgICBtX3Bl
bmRpbmdTdWJzdGl0dXRlUmVzb3VyY2VzLnNldChsb2FkZXIsIDApOworICAgICAgICBkZWxpdmVy
U3Vic3RpdHV0ZVJlc291cmNlc0FmdGVyRGVsYXkoKTsKICAgICAgICAgcmV0dXJuIHRydWU7IC8v
IEFsd2F5cyBmYWlsIHRoZSBsb2FkIGZvciByZXNvdXJjZXMgbm90IGluY2x1ZGVkIGluIHRoZSBN
SFRNTC4KICNlbmRpZgogICAgIGRlZmF1bHQ6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS90ZXh0L0RhdGVUaW1lRm9ybWF0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3RleHQvRGF0ZVRpbWVGb3JtYXQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmRiMjM5MmRmYmQ5MjE2MGZiNTZl
OGQ2ZTJmN2Q2ZDE5NjIzZDA2OGQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS90ZXh0L0RhdGVUaW1lRm9ybWF0LmNwcApAQCAtMCwwICsxLDI3OSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0
cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0
aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisg
KiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKworI2lmIEVOQUJMRShUSU1FX0lOUFVUX0ZJRUxEUykKKworI2luY2x1ZGUg
IkRhdGVUaW1lRm9ybWF0LmgiCisKKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIGNvbnN0IERhdGVUaW1lRm9ybWF0OjpG
aWVsZFR5cGUgbG93ZXJDYXNlVG9GaWVsZFR5cGVNYXBbMjZdID0geworICAgIERhdGVUaW1lRm9y
bWF0OjpGaWVsZFR5cGVQZXJpb2QsIC8vIGEKKyAgICBEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBl
SW52YWxpZCwgLy8gYgorICAgIERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVMb2NhbERheU9mV2Vl
a1N0YW5kQWxvbiwgLy8gYworICAgIERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVEYXlPZk1vbnRo
LCAvLyBkCisgICAgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZUxvY2FsRGF5T2ZXZWVrLCAvLyBl
CisgICAgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZUludmFsaWQsIC8vIGYKKyAgICBEYXRlVGlt
ZUZvcm1hdDo6RmllbGRUeXBlTW9kaWZpZWRKdWxpYW5EYXksIC8vIGcKKyAgICBEYXRlVGltZUZv
cm1hdDo6RmllbGRUeXBlSG91cjEyLCAvLyBoCisgICAgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlw
ZUludmFsaWQsIC8vIGkKKyAgICBEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlSW52YWxpZCwgLy8g
agorICAgIERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVIb3VyMjQsIC8vIGsKKyAgICBEYXRlVGlt
ZUZvcm1hdDo6RmllbGRUeXBlSW52YWxpZCwgLy8gbAorICAgIERhdGVUaW1lRm9ybWF0OjpGaWVs
ZFR5cGVNaW51dGUsIC8vIG0KKyAgICBEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlSW52YWxpZCwg
Ly8gbgorICAgIERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVJbnZhbGlkLCAvLyBvCisgICAgRGF0
ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZUludmFsaWQsIC8vIHAKKyAgICBEYXRlVGltZUZvcm1hdDo6
RmllbGRUeXBlUXVhdGVyU3RhbmRBbG9uZSwgLy8gcQorICAgIERhdGVUaW1lRm9ybWF0OjpGaWVs
ZFR5cGVJbnZhbGlkLCAvLyByCisgICAgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZVNlY29uZCwg
Ly8gcworICAgIERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVJbnZhbGlkLCAvLyB0CisgICAgRGF0
ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZUV4dGVuZGVkWWVhciwgLy8gdQorICAgIERhdGVUaW1lRm9y
bWF0OjpGaWVsZFR5cGVOb25Mb2NhdGlvblpvbmUsIC8vIHYKKyAgICBEYXRlVGltZUZvcm1hdDo6
RmllbGRUeXBlV2Vla09mTW9udGgsIC8vIHcKKyAgICBEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBl
SW52YWxpZCwgLy8geAorICAgIERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVZZWFyLCAvLyB5Cisg
ICAgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZVpvbmUsIC8vIHoKK307CisKK3N0YXRpYyBjb25z
dCBEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlIHVwcGVyQ2FzZVRvRmllbGRUeXBlTWFwWzI2XSA9
IHsKKyAgICBEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlTWlsbGlzZWNvbmRzSW5EYXksIC8vIEEK
KyAgICBEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlSW52YWxpZCwgLy8gQgorICAgIERhdGVUaW1l
Rm9ybWF0OjpGaWVsZFR5cGVJbnZhbGlkLCAvLyBDCisgICAgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxk
VHlwZURheU9mWWVhciwgLy8gRAorICAgIERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVEYXlPZldl
ZWssIC8vIEUKKyAgICBEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlRGF5T2ZXZWVrSW5Nb250aCwg
Ly8gRgorICAgIERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVFcmEsIC8vIEcKKyAgICBEYXRlVGlt
ZUZvcm1hdDo6RmllbGRUeXBlSG91cjIzLCAvLyBICisgICAgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxk
VHlwZUludmFsaWQsIC8vIEkKKyAgICBEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlSW52YWxpZCwg
Ly8gSgorICAgIERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVIb3VyMTEsIC8vIEsKKyAgICBEYXRl
VGltZUZvcm1hdDo6RmllbGRUeXBlTW9udGhTdGFuZEFsb25lLCAvLyBMCisgICAgRGF0ZVRpbWVG
b3JtYXQ6OkZpZWxkVHlwZU1vbnRoLCAvLyBNCisgICAgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlw
ZUludmFsaWQsIC8vIE4KKyAgICBEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlSW52YWxpZCwgLy8g
TworICAgIERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVJbnZhbGlkLCAvLyBQCisgICAgRGF0ZVRp
bWVGb3JtYXQ6OkZpZWxkVHlwZVF1YXRlciwgLy8gUQorICAgIERhdGVUaW1lRm9ybWF0OjpGaWVs
ZFR5cGVJbnZhbGlkLCAvLyBSCisgICAgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZUZyYWN0aW9u
YWxTZWNvbmQsIC8vIFMKKyAgICBEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlSW52YWxpZCwgLy8g
VAorICAgIERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVJbnZhbGlkLCAvLyBVCisgICAgRGF0ZVRp
bWVGb3JtYXQ6OkZpZWxkVHlwZUxvY2F0aW9uWm9uZSwgLy8gVgorICAgIERhdGVUaW1lRm9ybWF0
OjpGaWVsZFR5cGVXZWVrT2ZZZWFyLCAvLyBXCisgICAgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlw
ZUludmFsaWQsIC8vIFgKKyAgICBEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlWWVhck9mV2Vla09m
WWVhciwgLy8gWQorICAgIERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVSRkM4MjJab25lLCAvLyBa
Cit9OworCitzdGF0aWMgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZSBtYXBDaGFyYWN0ZXJUb0Zp
ZWxkVHlwZUludGVybmFsKGNvbnN0IFVDaGFyIGNoKQoreworICAgIGlmIChjaCA+PSAnQScgJiYg
Y2ggPD0gJ1onKQorICAgICAgICByZXR1cm4gdXBwZXJDYXNlVG9GaWVsZFR5cGVNYXBbY2ggLSAn
QSddOworCisgICAgaWYgKGNoID49ICdhJyAmJiBjaCA8PSAneicpCisgICAgICAgIHJldHVybiBs
b3dlckNhc2VUb0ZpZWxkVHlwZU1hcFtjaCAtICdhJ107CisKKyAgICByZXR1cm4gRGF0ZVRpbWVG
b3JtYXQ6OkZpZWxkVHlwZUxpdGVyYWw7Cit9CisKK0RhdGVUaW1lRm9ybWF0OjpEYXRlVGltZUZv
cm1hdChUb2tlbkhhbmRsZXImIHRva2VuSGFuZGxlciwgRm9ybWF0VHlwZSBmb3JtYXRUeXBlKQor
ICAgIDogbV90b2tlbkhhbmRsZXIodG9rZW5IYW5kbGVyKQorICAgICwgbV9mb3JtYXRUeXBlKGZv
cm1hdFR5cGUpCit7Cit9CisKK0RhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGUgRGF0ZVRpbWVGb3Jt
YXQ6Om1hcENoYXJhY3RlclRvRmllbGRUeXBlKFVDaGFyIGNoKSBjb25zdAoreworICAgIGNvbnN0
IEZpZWxkVHlwZSBmaWVsZFR5cGUgPSBtYXBDaGFyYWN0ZXJUb0ZpZWxkVHlwZUludGVybmFsKGNo
KTsKKyAgICBzd2l0Y2ggKG1fZm9ybWF0VHlwZSkgeworICAgIGNhc2UgRm9ybWF0VHlwZUlDVToK
KyAgICAgICAgcmV0dXJuIGZpZWxkVHlwZSA9PSBGaWVsZFR5cGVMb2NhbERheU9mV2Vla1N0YW5k
QWxvbiA/IEZpZWxkVHlwZUludmFsaWQgOiBmaWVsZFR5cGU7CisgICAgY2FzZSBGb3JtYXRUeXBl
VW5pY29kZToKKyAgICAgICAgcmV0dXJuIGZpZWxkVHlwZSA9PSBGaWVsZFR5cGVMb2NhdGlvblpv
bmUgPyBGaWVsZFR5cGVJbnZhbGlkIDogZmllbGRUeXBlOworICAgIGRlZmF1bHQ6CisgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gZmllbGRUeXBlOworICAgIH0K
K30KKworYm9vbCBEYXRlVGltZUZvcm1hdDo6cGFyc2UoY29uc3QgU3RyaW5nJiBzb3VyY2UpIGNv
bnN0Cit7CisgICAgZW51bSBTdGF0ZSB7CisgICAgICAgIFN0YXRlSW5RdW90ZSwKKyAgICAgICAg
U3RhdGVJblF1b3RlUXVvdGUsCisgICAgICAgIFN0YXRlTGl0ZXJhbCwKKyAgICAgICAgU3RhdGVR
dW90ZSwKKyAgICAgICAgU3RhdGVTeW1ib2wsCisgICAgfSBzdGF0ZSA9IFN0YXRlTGl0ZXJhbDsK
KworICAgIEZpZWxkVHlwZSBmaWVsZFR5cGUgPSBGaWVsZFR5cGVMaXRlcmFsOworICAgIFN0cmlu
Z0J1aWxkZXIgbGl0ZXJhbEJ1ZmZlcjsKKyAgICBpbnQgZmllbGRDb3VudGVyID0gMDsKKworICAg
IGZvciAodW5zaWduZWQgaW50IGluZGV4ID0gMDsgaW5kZXggPCBzb3VyY2UubGVuZ3RoKCk7ICsr
aW5kZXgpIHsKKyAgICAgICAgY29uc3QgVUNoYXIgY2ggPSBzb3VyY2VbaW5kZXhdOworICAgICAg
ICBzd2l0Y2ggKHN0YXRlKSB7CisgICAgICAgIGNhc2UgU3RhdGVJblF1b3RlOgorICAgICAgICAg
ICAgaWYgKGNoID09ICdcJycpIHsKKyAgICAgICAgICAgICAgICBzdGF0ZSA9IFN0YXRlSW5RdW90
ZVF1b3RlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBsaXRlcmFsQnVmZmVyLmFwcGVuZChjaCk7CisgICAgICAgICAgICBicmVhazsKKworICAg
ICAgICBjYXNlIFN0YXRlSW5RdW90ZVF1b3RlOgorICAgICAgICAgICAgaWYgKGNoID09ICdcJycp
IHsKKyAgICAgICAgICAgICAgICBsaXRlcmFsQnVmZmVyLmFwcGVuZCgnXCcnKTsKKyAgICAgICAg
ICAgICAgICBzdGF0ZSA9IFN0YXRlSW5RdW90ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgZmllbGRUeXBlID0gbWFwQ2hhcmFjdGVyVG9GaWVs
ZFR5cGUoY2gpOworICAgICAgICAgICAgaWYgKGZpZWxkVHlwZSA9PSBGaWVsZFR5cGVJbnZhbGlk
KQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAgICAgaWYgKGZpZWxk
VHlwZSA9PSBGaWVsZFR5cGVMaXRlcmFsKSB7CisgICAgICAgICAgICAgICAgbGl0ZXJhbEJ1ZmZl
ci5hcHBlbmQoY2gpOworICAgICAgICAgICAgICAgIHN0YXRlID0gU3RhdGVMaXRlcmFsOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAobGl0
ZXJhbEJ1ZmZlci5sZW5ndGgoKSkgeworICAgICAgICAgICAgICAgIG1fdG9rZW5IYW5kbGVyLmdv
dExpdGVyYWwobGl0ZXJhbEJ1ZmZlci50b1N0cmluZygpKTsKKyAgICAgICAgICAgICAgICBsaXRl
cmFsQnVmZmVyLmNsZWFyKCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGZpZWxkQ291
bnRlciA9IDE7CisgICAgICAgICAgICBzdGF0ZSA9IFN0YXRlU3ltYm9sOworICAgICAgICAgICAg
YnJlYWs7CisKKyAgICAgICAgY2FzZSBTdGF0ZUxpdGVyYWw6CisgICAgICAgICAgICBpZiAoY2gg
PT0gJ1wnJykgeworICAgICAgICAgICAgICAgIHN0YXRlID0gU3RhdGVRdW90ZTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZmllbGRUeXBlID0g
bWFwQ2hhcmFjdGVyVG9GaWVsZFR5cGUoY2gpOworICAgICAgICAgICAgaWYgKGZpZWxkVHlwZSA9
PSBGaWVsZFR5cGVJbnZhbGlkKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
ICAgICAgICAgaWYgKGZpZWxkVHlwZSA9PSBGaWVsZFR5cGVMaXRlcmFsKSB7CisgICAgICAgICAg
ICAgICAgbGl0ZXJhbEJ1ZmZlci5hcHBlbmQoY2gpOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAobGl0ZXJhbEJ1ZmZlci5sZW5ndGgoKSkg
eworICAgICAgICAgICAgICAgIG1fdG9rZW5IYW5kbGVyLmdvdExpdGVyYWwobGl0ZXJhbEJ1ZmZl
ci50b1N0cmluZygpKTsKKyAgICAgICAgICAgICAgICBsaXRlcmFsQnVmZmVyLmNsZWFyKCk7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGZpZWxkQ291bnRlciA9IDE7CisgICAgICAgICAg
ICBzdGF0ZSA9IFN0YXRlU3ltYm9sOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2Fz
ZSBTdGF0ZVF1b3RlOgorICAgICAgICAgICAgbGl0ZXJhbEJ1ZmZlci5hcHBlbmQoY2gpOworICAg
ICAgICAgICAgc3RhdGUgPSBjaCA9PSAnXCcnID8gU3RhdGVMaXRlcmFsIDogU3RhdGVJblF1b3Rl
OworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBTdGF0ZVN5bWJvbDogeworICAg
ICAgICAgICAgQVNTRVJUKGZpZWxkVHlwZSAhPSBGaWVsZFR5cGVJbnZhbGlkKTsKKyAgICAgICAg
ICAgIEFTU0VSVChmaWVsZFR5cGUgIT0gRmllbGRUeXBlTGl0ZXJhbCk7CisgICAgICAgICAgICBB
U1NFUlQobGl0ZXJhbEJ1ZmZlci5pc0VtcHR5KCkpOworCisgICAgICAgICAgICBGaWVsZFR5cGUg
ZmllbGRUeXBlMiA9IG1hcENoYXJhY3RlclRvRmllbGRUeXBlKGNoKTsKKyAgICAgICAgICAgIGlm
IChmaWVsZFR5cGUyID09IEZpZWxkVHlwZUludmFsaWQpCisgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgICAgICAgICBpZiAoZmllbGRUeXBlID09IGZpZWxkVHlwZTIpIHsKKyAg
ICAgICAgICAgICAgICArK2ZpZWxkQ291bnRlcjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgbV90b2tlbkhhbmRsZXIuZ290RmllbGQoZmllbGRU
eXBlLCBmaWVsZENvdW50ZXIpOworCisgICAgICAgICAgICBpZiAoZmllbGRUeXBlMiA9PSBGaWVs
ZFR5cGVMaXRlcmFsKSB7CisgICAgICAgICAgICAgICAgaWYgKGNoID09ICdcJycpCisgICAgICAg
ICAgICAgICAgICAgIHN0YXRlID0gU3RhdGVRdW90ZTsKKyAgICAgICAgICAgICAgICBlbHNlIHsK
KyAgICAgICAgICAgICAgICAgICAgbGl0ZXJhbEJ1ZmZlci5hcHBlbmQoY2gpOworICAgICAgICAg
ICAgICAgICAgICBzdGF0ZSA9IFN0YXRlTGl0ZXJhbDsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGZpZWxkQ291
bnRlciA9IDE7CisgICAgICAgICAgICBmaWVsZFR5cGUgPSBmaWVsZFR5cGUyOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgTE9H
X0VSUk9SKCJJbnZsaWFkIHN0YXRlPSVkIiwgc3RhdGUpOworICAgICAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBBU1NFUlQoZmllbGRUeXBlICE9IEZpZWxkVHlwZUludmFsaWQpOworCisgICAgc3dp
dGNoIChzdGF0ZSkgeworICAgIGNhc2UgU3RhdGVMaXRlcmFsOgorICAgIGNhc2UgU3RhdGVJblF1
b3RlUXVvdGU6CisgICAgICAgIGlmIChsaXRlcmFsQnVmZmVyLmxlbmd0aCgpKQorICAgICAgICAg
ICAgbV90b2tlbkhhbmRsZXIuZ290TGl0ZXJhbChsaXRlcmFsQnVmZmVyLnRvU3RyaW5nKCkpOwor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGNhc2UgU3RhdGVRdW90ZToKKyAgICBjYXNlIFN0
YXRlSW5RdW90ZToKKyAgICAgICAgaWYgKGxpdGVyYWxCdWZmZXIubGVuZ3RoKCkpCisgICAgICAg
ICAgICBtX3Rva2VuSGFuZGxlci5nb3RMaXRlcmFsKGxpdGVyYWxCdWZmZXIudG9TdHJpbmcoKSk7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGNhc2UgU3RhdGVTeW1ib2w6CisgICAgICAg
IEFTU0VSVChmaWVsZFR5cGUgIT0gRmllbGRUeXBlTGl0ZXJhbCk7CisgICAgICAgIEFTU0VSVCgh
bGl0ZXJhbEJ1ZmZlci5sZW5ndGgoKSk7CisgICAgICAgIG1fdG9rZW5IYW5kbGVyLmdvdEZpZWxk
KGZpZWxkVHlwZSwgZmllbGRDb3VudGVyKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBk
ZWZhdWx0OgorICAgICAgICBMT0dfRVJST1IoIkludmxpYWQgc3RhdGU9JWQiLCBzdGF0ZSk7Cisg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9EYXRlVGltZUZvcm1hdC5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vdGV4dC9EYXRlVGltZUZvcm1hdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjk0NGQzYTAyOTI2
MWY4MzYzYmJlNzk0M2IzNGZkNzY1MTAxOGQ2YWIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0RhdGVUaW1lRm9ybWF0LmgKQEAgLTAsMCArMSwxMzkgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQor
ICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5j
LiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
KyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aWZuZGVmIERhdGVUaW1lRm9ybWF0X2gKKyNkZWZpbmUgRGF0ZVRpbWVGb3JtYXRfaAorCisjaWYg
RU5BQkxFKFRJTUVfSU5QVVRfRklFTERTKQorCisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5n
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gRGF0ZVRpbWVGb3JtYXQgcGFyc2VzIGRh
dGUgdGltZSBmb3JtYXQgZGVmaW5lZCBpbiBVbmljb2RlIFRlY2huaWNhbAorLy8gc3RhbmRhcmQg
MzUsIExvY2FsZSBEYXRhIE1hcmt1cCBMYW5ndWFnZSAoTERNTClbMV0sIGFuZCBJQ1UgdmFyaWFu
dFsyXS4KKy8vCisvLyBEaWZmZXJlbmNlcyBiZXR3ZWVuIExETUwgYW5kIElDVSBhcmU6CisvLyAg
LSBMRE1MIHN1cHBvcnQgc3ltYm9sICJjIiwgYnV0IElDVSBkb2Vzbid0LgorLy8gIC0gSUNVIHN1
cHBvcnQgc3ltYm9sICJWIiwgYnV0IExETUwgZG9lc24ndC4KKy8vCisvLyBbMV0gTERNTCBodHRw
Oi8vdW5pY29kZS5vcmcvcmVwb3J0cy90cjM1L3RyMzUtNi5odG1sI0RhdGVfRm9ybWF0X1BhdHRl
cm5zCisvLyBbMl0gaHR0cDovL3VzZXJndWlkZS5pY3UtcHJvamVjdC5vcmcvZm9ybWF0cGFyc2Uv
ZGF0ZXRpbWUKK2NsYXNzIERhdGVUaW1lRm9ybWF0IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJM
RShEYXRlVGltZUZvcm1hdCk7CitwdWJsaWM6CisgICAgZW51bSBGaWVsZFR5cGUgeworICAgICAg
ICBGaWVsZFR5cGVJbnZhbGlkLAorICAgICAgICBGaWVsZFR5cGVMaXRlcmFsLAorCisgICAgICAg
IC8vIEVyYTogQUQKKyAgICAgICAgRmllbGRUeXBlRXJhID0gJ0cnLAorCisgICAgICAgIC8vIFll
YXI6IDE5OTYKKyAgICAgICAgRmllbGRUeXBlWWVhciA9ICd5JywKKyAgICAgICAgRmllbGRUeXBl
WWVhck9mV2Vla09mWWVhciA9ICdZJywKKyAgICAgICAgRmllbGRUeXBlRXh0ZW5kZWRZZWFyID0g
J3UnLAorCisgICAgICAgIC8vIFF1YXRlcjogUTIKKyAgICAgICAgRmllbGRUeXBlUXVhdGVyID0g
J1EnLAorICAgICAgICBGaWVsZFR5cGVRdWF0ZXJTdGFuZEFsb25lID0gJ3EnLAorCisgICAgICAg
IC8vIE1vbnRoOiBTZXB0ZW1iZXIKKyAgICAgICAgRmllbGRUeXBlTW9udGggPSAnTScsCisgICAg
ICAgIEZpZWxkVHlwZU1vbnRoU3RhbmRBbG9uZSA9ICdMJywKKworICAgICAgICAvLyBXZWVrOiA0
MgorICAgICAgICBGaWVsZFR5cGVXZWVrT2ZZZWFyID0gJ1cnLAorICAgICAgICBGaWVsZFR5cGVX
ZWVrT2ZNb250aCA9ICd3JywKKworICAgICAgICAvLyBEYXk6IDEyCisgICAgICAgIEZpZWxkVHlw
ZURheU9mTW9udGggPSAnZCcsCisgICAgICAgIEZpZWxkVHlwZURheU9mWWVhciA9ICdEJywKKyAg
ICAgICAgRmllbGRUeXBlRGF5T2ZXZWVrSW5Nb250aCA9ICdGJywKKyAgICAgICAgRmllbGRUeXBl
TW9kaWZpZWRKdWxpYW5EYXkgPSAnZycsCisKKyAgICAgICAgLy8gV2VlayBEYXk6IFR1ZXNkYXkK
KyAgICAgICAgRmllbGRUeXBlRGF5T2ZXZWVrID0gJ0UnLAorICAgICAgICBGaWVsZFR5cGVMb2Nh
bERheU9mV2VlayA9ICdlJywKKyAgICAgICAgRmllbGRUeXBlTG9jYWxEYXlPZldlZWtTdGFuZEFs
b24gPSAnYycsIC8vIElDVSBkb2Vzbid0IHN1cHBvcnQgdGhpcy4KKworICAgICAgICAvLyBQZXJp
b2Q6IEFNIG9yIFBNCisgICAgICAgIEZpZWxkVHlwZVBlcmlvZCA9ICdhJywKKworICAgICAgICAv
LyBIb3VyOiA3CisgICAgICAgIEZpZWxkVHlwZUhvdXIxMiA9ICdoJywKKyAgICAgICAgRmllbGRU
eXBlSG91cjIzID0gJ0gnLAorICAgICAgICBGaWVsZFR5cGVIb3VyMTEgPSAnSycsCisgICAgICAg
IEZpZWxkVHlwZUhvdXIyNCA9ICdrJywKKworICAgICAgICAvLyBNaW51dGU6IDU5CisgICAgICAg
IEZpZWxkVHlwZU1pbnV0ZSA9ICdtJywKKworICAgICAgICAvLyBTZWNvbmQ6IDEyCisgICAgICAg
IEZpZWxkVHlwZVNlY29uZCA9ICdzJywKKyAgICAgICAgRmllbGRUeXBlRnJhY3Rpb25hbFNlY29u
ZCA9ICdTJywKKyAgICAgICAgRmllbGRUeXBlTWlsbGlzZWNvbmRzSW5EYXkgPSAnQScsCisKKyAg
ICAgICAgLy8gWm9uZTogUERUCisgICAgICAgIEZpZWxkVHlwZVpvbmUgPSAneicsCisgICAgICAg
IEZpZWxkVHlwZVJGQzgyMlpvbmUgPSAnWicsCisgICAgICAgIEZpZWxkVHlwZU5vbkxvY2F0aW9u
Wm9uZSA9ICd2JywKKyAgICAgICAgRmllbGRUeXBlTG9jYXRpb25ab25lID0gJ1YnLCAvLyBJQ1Ug
b25seS4KKyAgICB9OworCisgICAgZW51bSBGb3JtYXRUeXBlIHsKKyAgICAgICAgRm9ybWF0VHlw
ZUlDVSwKKyAgICAgICAgRm9ybWF0VHlwZVVuaWNvZGUsCisgICAgfTsKKworICAgIGNsYXNzIFRv
a2VuSGFuZGxlciB7CisgICAgcHVibGljOgorICAgICAgICB2aXJ0dWFsIH5Ub2tlbkhhbmRsZXIo
KSB7IH0KKyAgICAgICAgdmlydHVhbCB2b2lkIGdvdEZpZWxkKEZpZWxkVHlwZSwgaW50KSA9IDA7
CisgICAgICAgIHZpcnR1YWwgdm9pZCBnb3RMaXRlcmFsKGNvbnN0IFN0cmluZyYpID0gMDsKKyAg
ICB9OworCisgICAgZXhwbGljaXQgRGF0ZVRpbWVGb3JtYXQoVG9rZW5IYW5kbGVyJiwgRm9ybWF0
VHlwZSA9IEZvcm1hdFR5cGVVbmljb2RlKTsKKworICAgIC8vIFJldHVybnMgdHJ1ZSBpZiBzdWNj
ZWVkZWQsIGZhbHNlIGlmIGZhaWxlZC4KKyAgICBib29sIHBhcnNlKGNvbnN0IFN0cmluZyYpIGNv
bnN0OworCitwcml2YXRlOgorICAgIEZpZWxkVHlwZSBtYXBDaGFyYWN0ZXJUb0ZpZWxkVHlwZShV
Q2hhcikgY29uc3Q7CisKKyAgICBUb2tlbkhhbmRsZXImIG1fdG9rZW5IYW5kbGVyOworICAgIEZv
cm1hdFR5cGUgY29uc3QgbV9mb3JtYXRUeXBlOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCisjZW5kaWYKKworI2VuZGlmIC8vIERhdGVUaW1lRm9ybWF0X2gKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvTG9jYWxlSUNVLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3RleHQvTG9jYWxlSUNVLmNwcAppbmRleCA1NmQ2YTc3NjBkMmIwNWI3YTg1NjJi
MGIwM2YyMDc1NDIzNGE0NTE3Li4zNDllNWQ5MzlhZTlhMWVmNmQwZTZmMmRjNDc2N2RiOTFlZjFk
YmRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0xvY2FsZUlDVS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9Mb2NhbGVJQ1UuY3BwCkBAIC00
Miw2ICs0MiwyMyBAQCB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKK3N0YXRpYyBTdHJpbmcgZ2V0RGF0ZUZvcm1hdFBhdHRlcm4oY29uc3QgVURhdGVGb3JtYXQq
IGRhdGVGb3JtYXQpCit7CisgICAgaWYgKCFkYXRlRm9ybWF0KQorICAgICAgICByZXR1cm4gZW1w
dHlTdHJpbmcoKTsKKworICAgIFVFcnJvckNvZGUgc3RhdHVzID0gVV9aRVJPX0VSUk9SOworICAg
IGludDMyX3QgbGVuZ3RoID0gdWRhdF90b1BhdHRlcm4oZGF0ZUZvcm1hdCwgVFJVRSwgMCwgMCwg
JnN0YXR1cyk7CisgICAgaWYgKHN0YXR1cyAhPSBVX0JVRkZFUl9PVkVSRkxPV19FUlJPUiB8fCAh
bGVuZ3RoKQorICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKKyAgICBWZWN0b3I8VUNoYXI+
IGJ1ZmZlcihsZW5ndGgpOworICAgIHN0YXR1cyA9IFVfWkVST19FUlJPUjsKKyAgICB1ZGF0X3Rv
UGF0dGVybihkYXRlRm9ybWF0LCBUUlVFLCBidWZmZXIuZGF0YSgpLCBsZW5ndGgsICZzdGF0dXMp
OworICAgIGlmIChVX0ZBSUxVUkUoc3RhdHVzKSkKKyAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5n
KCk7CisgICAgcmV0dXJuIFN0cmluZzo6YWRvcHQoYnVmZmVyKTsKK30KKwogTG9jYWxlSUNVOjpM
b2NhbGVJQ1UoY29uc3QgY2hhciogbG9jYWxlKQogICAgIDogbV9sb2NhbGUobG9jYWxlKQogICAg
ICwgbV9udW1iZXJGb3JtYXQoMCkKQEAgLTUxLDYgKzY4LDEwIEBAIExvY2FsZUlDVTo6TG9jYWxl
SUNVKGNvbnN0IGNoYXIqIGxvY2FsZSkKICNpZiBFTkFCTEUoQ0FMRU5EQVJfUElDS0VSKQogICAg
ICwgbV9maXJzdERheU9mV2VlaygwKQogI2VuZGlmCisjaWYgRU5BQkxFKFRJTUVfSU5QVVRfRklF
TERTKQorICAgICwgbV9tZWRpdW1UaW1lRm9ybWF0KDApCisgICAgLCBtX2RpZENyZWF0ZUxvbmdU
aW1lRm9ybWF0KGZhbHNlKQorI2VuZGlmCiB7CiB9CiAKQEAgLTI3MiwxMyArMjkzLDE4IEBAIGJv
b2wgTG9jYWxlSUNVOjppbml0aWFsaXplU2hvcnREYXRlRm9ybWF0KCkKIHsKICAgICBpZiAobV9k
aWRDcmVhdGVTaG9ydERhdGVGb3JtYXQpCiAgICAgICAgIHJldHVybiBtX3Nob3J0RGF0ZUZvcm1h
dDsKLSAgICBjb25zdCBVQ2hhciBnbXRUaW1lem9uZVszXSA9IHsnRycsICdNJywgJ1QnfTsKLSAg
ICBVRXJyb3JDb2RlIHN0YXR1cyA9IFVfWkVST19FUlJPUjsKLSAgICBtX3Nob3J0RGF0ZUZvcm1h
dCA9IHVkYXRfb3BlbihVREFUX05PTkUsIFVEQVRfU0hPUlQsIG1fbG9jYWxlLmRhdGEoKSwgZ210
VGltZXpvbmUsIFdURl9BUlJBWV9MRU5HVEgoZ210VGltZXpvbmUpLCAwLCAtMSwgJnN0YXR1cyk7
CisgICAgbV9zaG9ydERhdGVGb3JtYXQgPSBvcGVuRGF0ZUZvcm1hdChVREFUX05PTkUsIFVEQVRf
U0hPUlQpOwogICAgIG1fZGlkQ3JlYXRlU2hvcnREYXRlRm9ybWF0ID0gdHJ1ZTsKICAgICByZXR1
cm4gbV9zaG9ydERhdGVGb3JtYXQ7CiB9CiAKK1VEYXRlRm9ybWF0KiBMb2NhbGVJQ1U6Om9wZW5E
YXRlRm9ybWF0KFVEYXRlRm9ybWF0U3R5bGUgdGltZVN0eWxlLCBVRGF0ZUZvcm1hdFN0eWxlIGRh
dGVTdHlsZSkgY29uc3QKK3sKKyAgICBjb25zdCBVQ2hhciBnbXRUaW1lem9uZVszXSA9IHsnRycs
ICdNJywgJ1QnfTsKKyAgICBVRXJyb3JDb2RlIHN0YXR1cyA9IFVfWkVST19FUlJPUjsKKyAgICBy
ZXR1cm4gdWRhdF9vcGVuKHRpbWVTdHlsZSwgZGF0ZVN0eWxlLCBtX2xvY2FsZS5kYXRhKCksIGdt
dFRpbWV6b25lLCBXVEZfQVJSQVlfTEVOR1RIKGdtdFRpbWV6b25lKSwgMCwgLTEsICZzdGF0dXMp
OworfQorCiBkb3VibGUgTG9jYWxlSUNVOjpwYXJzZUxvY2FsaXplZERhdGUoY29uc3QgU3RyaW5n
JiBpbnB1dCkKIHsKICAgICBpZiAoIWluaXRpYWxpemVTaG9ydERhdGVGb3JtYXQoKSkKQEAgLTMz
MCwxMiArMzU2LDEyIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpc0lDVURheUluTW9udGhTeW1ib2wo
VUNoYXIgbGV0dGVyKQogCiAvLyBTcGVjaWZpY2F0aW9uIG9mIHRoZSBpbnB1dDoKIC8vIGh0dHA6
Ly9pY3UtcHJvamVjdC5vcmcvYXBpcmVmL2ljdTRjL2NsYXNzU2ltcGxlRGF0ZUZvcm1hdC5odG1s
I2RldGFpbHMKLXN0YXRpYyBTdHJpbmcgbG9jYWxpemVGb3JtYXQoY29uc3QgVmVjdG9yPFVDaGFy
PiYgYnVmZmVyKQorc3RhdGljIFN0cmluZyBsb2NhbGl6ZUZvcm1hdChjb25zdCBTdHJpbmcmIGJ1
ZmZlcikKIHsKICAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7CiAgICAgVUNoYXIgbGFzdENoYXIg
PSAwOwogICAgIGJvb2wgaW5RdW90ZSA9IGZhbHNlOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBidWZmZXIuc2l6ZSgpOyArK2kpIHsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
YnVmZmVyLmxlbmd0aCgpOyArK2kpIHsKICAgICAgICAgaWYgKGluUXVvdGUpIHsKICAgICAgICAg
ICAgIGlmIChidWZmZXJbaV0gPT0gJ1wnJykgewogICAgICAgICAgICAgICAgIGluUXVvdGUgPSBm
YWxzZTsKQEAgLTM3NCwxNiArNDAwLDcgQEAgdm9pZCBMb2NhbGVJQ1U6OmluaXRpYWxpemVMb2Nh
bGl6ZWREYXRlRm9ybWF0VGV4dCgpCiAgICAgbV9sb2NhbGl6ZWREYXRlRm9ybWF0VGV4dCA9IGVt
cHR5U3RyaW5nKCk7CiAgICAgaWYgKCFpbml0aWFsaXplU2hvcnREYXRlRm9ybWF0KCkpCiAgICAg
ICAgIHJldHVybjsKLSAgICBVRXJyb3JDb2RlIHN0YXR1cyA9IFVfWkVST19FUlJPUjsKLSAgICBp
bnQzMl90IGxlbmd0aCA9IHVkYXRfdG9QYXR0ZXJuKG1fc2hvcnREYXRlRm9ybWF0LCBUUlVFLCAw
LCAwLCAmc3RhdHVzKTsKLSAgICBpZiAoc3RhdHVzICE9IFVfQlVGRkVSX09WRVJGTE9XX0VSUk9S
KQotICAgICAgICByZXR1cm47Ci0gICAgVmVjdG9yPFVDaGFyPiBidWZmZXIobGVuZ3RoKTsKLSAg
ICBzdGF0dXMgPSBVX1pFUk9fRVJST1I7Ci0gICAgdWRhdF90b1BhdHRlcm4obV9zaG9ydERhdGVG
b3JtYXQsIFRSVUUsIGJ1ZmZlci5kYXRhKCksIGxlbmd0aCwgJnN0YXR1cyk7Ci0gICAgaWYgKFVf
RkFJTFVSRShzdGF0dXMpKQotICAgICAgICByZXR1cm47Ci0gICAgbV9sb2NhbGl6ZWREYXRlRm9y
bWF0VGV4dCA9IGxvY2FsaXplRm9ybWF0KGJ1ZmZlcik7CisgICAgbV9sb2NhbGl6ZWREYXRlRm9y
bWF0VGV4dCA9IGxvY2FsaXplRm9ybWF0KGdldERhdGVGb3JtYXRQYXR0ZXJuKG1fc2hvcnREYXRl
Rm9ybWF0KSk7CiB9CiAKIFN0cmluZyBMb2NhbGVJQ1U6OmxvY2FsaXplZERhdGVGb3JtYXRUZXh0
KCkKQEAgLTM5MiwzMCArNDA5LDYgQEAgU3RyaW5nIExvY2FsZUlDVTo6bG9jYWxpemVkRGF0ZUZv
cm1hdFRleHQoKQogICAgIHJldHVybiBtX2xvY2FsaXplZERhdGVGb3JtYXRUZXh0OwogfQogCi1Q
YXNzT3duUHRyPFZlY3RvcjxTdHJpbmc+ID4gTG9jYWxlSUNVOjpjcmVhdGVMYWJlbFZlY3RvcihV
RGF0ZUZvcm1hdFN5bWJvbFR5cGUgdHlwZSwgaW50MzJfdCBzdGFydEluZGV4LCBpbnQzMl90IHNp
emUpCi17Ci0gICAgaWYgKCFtX3Nob3J0RGF0ZUZvcm1hdCkKLSAgICAgICAgcmV0dXJuIFBhc3NP
d25QdHI8VmVjdG9yPFN0cmluZz4gPigpOwotICAgIGlmICh1ZGF0X2NvdW50U3ltYm9scyhtX3No
b3J0RGF0ZUZvcm1hdCwgdHlwZSkgIT0gc3RhcnRJbmRleCArIHNpemUpCi0gICAgICAgIHJldHVy
biBQYXNzT3duUHRyPFZlY3RvcjxTdHJpbmc+ID4oKTsKLQotICAgIE93blB0cjxWZWN0b3I8U3Ry
aW5nPiA+IGxhYmVscyA9IGFkb3B0UHRyKG5ldyBWZWN0b3I8U3RyaW5nPigpKTsKLSAgICBsYWJl
bHMtPnJlc2VydmVDYXBhY2l0eShzaXplKTsKLSAgICBmb3IgKGludDMyX3QgaSA9IDA7IGkgPCBz
aXplOyArK2kpIHsKLSAgICAgICAgVUVycm9yQ29kZSBzdGF0dXMgPSBVX1pFUk9fRVJST1I7Ci0g
ICAgICAgIGludDMyX3QgbGVuZ3RoID0gdWRhdF9nZXRTeW1ib2xzKG1fc2hvcnREYXRlRm9ybWF0
LCB0eXBlLCBzdGFydEluZGV4ICsgaSwgMCwgMCwgJnN0YXR1cyk7Ci0gICAgICAgIGlmIChzdGF0
dXMgIT0gVV9CVUZGRVJfT1ZFUkZMT1dfRVJST1IpCi0gICAgICAgICAgICByZXR1cm4gUGFzc093
blB0cjxWZWN0b3I8U3RyaW5nPiA+KCk7Ci0gICAgICAgIFZlY3RvcjxVQ2hhcj4gYnVmZmVyKGxl
bmd0aCk7Ci0gICAgICAgIHN0YXR1cyA9IFVfWkVST19FUlJPUjsKLSAgICAgICAgdWRhdF9nZXRT
eW1ib2xzKG1fc2hvcnREYXRlRm9ybWF0LCB0eXBlLCBzdGFydEluZGV4ICsgaSwgYnVmZmVyLmRh
dGEoKSwgbGVuZ3RoLCAmc3RhdHVzKTsKLSAgICAgICAgaWYgKFVfRkFJTFVSRShzdGF0dXMpKQot
ICAgICAgICAgICAgcmV0dXJuIFBhc3NPd25QdHI8VmVjdG9yPFN0cmluZz4gPigpOwotICAgICAg
ICBsYWJlbHMtPmFwcGVuZChTdHJpbmc6OmFkb3B0KGJ1ZmZlcikpOwotICAgIH0KLSAgICByZXR1
cm4gbGFiZWxzLnJlbGVhc2UoKTsKLX0KLQogc3RhdGljIFBhc3NPd25QdHI8VmVjdG9yPFN0cmlu
Zz4gPiBjcmVhdGVGYWxsYmFja01vbnRoTGFiZWxzKCkKIHsKICAgICBPd25QdHI8VmVjdG9yPFN0
cmluZz4gPiBsYWJlbHMgPSBhZG9wdFB0cihuZXcgVmVjdG9yPFN0cmluZz4oKSk7CkBAIC00NTIs
MTEgKzQ0NSwxMSBAQCB2b2lkIExvY2FsZUlDVTo6aW5pdGlhbGl6ZUNhbGVuZGFyKCkKICAgICB9
CiAgICAgbV9maXJzdERheU9mV2VlayA9IHVjYWxfZ2V0QXR0cmlidXRlKHVkYXRfZ2V0Q2FsZW5k
YXIobV9zaG9ydERhdGVGb3JtYXQpLCBVQ0FMX0ZJUlNUX0RBWV9PRl9XRUVLKSAtIFVDQUxfU1VO
REFZOwogCi0gICAgbV9tb250aExhYmVscyA9IGNyZWF0ZUxhYmVsVmVjdG9yKFVEQVRfTU9OVEhT
LCBVQ0FMX0pBTlVBUlksIDEyKTsKKyAgICBtX21vbnRoTGFiZWxzID0gY3JlYXRlTGFiZWxWZWN0
b3IobV9zaG9ydERhdGVGb3JtYXQsIFVEQVRfTU9OVEhTLCBVQ0FMX0pBTlVBUlksIDEyKTsKICAg
ICBpZiAoIW1fbW9udGhMYWJlbHMpCiAgICAgICAgIG1fbW9udGhMYWJlbHMgPSBjcmVhdGVGYWxs
YmFja01vbnRoTGFiZWxzKCk7CiAKLSAgICBtX3dlZWtEYXlTaG9ydExhYmVscyA9IGNyZWF0ZUxh
YmVsVmVjdG9yKFVEQVRfU0hPUlRfV0VFS0RBWVMsIFVDQUxfU1VOREFZLCA3KTsKKyAgICBtX3dl
ZWtEYXlTaG9ydExhYmVscyA9IGNyZWF0ZUxhYmVsVmVjdG9yKG1fc2hvcnREYXRlRm9ybWF0LCBV
REFUX1NIT1JUX1dFRUtEQVlTLCBVQ0FMX1NVTkRBWSwgNyk7CiAgICAgaWYgKCFtX3dlZWtEYXlT
aG9ydExhYmVscykKICAgICAgICAgbV93ZWVrRGF5U2hvcnRMYWJlbHMgPSBjcmVhdGVGYWxsYmFj
a1dlZWtEYXlTaG9ydExhYmVscygpOwogfQpAQCAtNDgwLDUgKzQ3Myw4MSBAQCB1bnNpZ25lZCBM
b2NhbGVJQ1U6OmZpcnN0RGF5T2ZXZWVrKCkKIH0KICNlbmRpZgogCi19IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisjaWYgRU5BQkxFKENBTEVOREFSX1BJQ0tFUikgfHwgRU5BQkxFKFRJTUVfSU5QVVRf
RklFTERTKQogCitQYXNzT3duUHRyPFZlY3RvcjxTdHJpbmc+ID4gTG9jYWxlSUNVOjpjcmVhdGVM
YWJlbFZlY3Rvcihjb25zdCBVRGF0ZUZvcm1hdCogZGF0ZUZvcm1hdCwgVURhdGVGb3JtYXRTeW1i
b2xUeXBlIHR5cGUsIGludDMyX3Qgc3RhcnRJbmRleCwgaW50MzJfdCBzaXplKQoreworICAgIGlm
ICghZGF0ZUZvcm1hdCkKKyAgICAgICAgcmV0dXJuIFBhc3NPd25QdHI8VmVjdG9yPFN0cmluZz4g
PigpOworICAgIGlmICh1ZGF0X2NvdW50U3ltYm9scyhkYXRlRm9ybWF0LCB0eXBlKSAhPSBzdGFy
dEluZGV4ICsgc2l6ZSkKKyAgICAgICAgcmV0dXJuIFBhc3NPd25QdHI8VmVjdG9yPFN0cmluZz4g
PigpOworCisgICAgT3duUHRyPFZlY3RvcjxTdHJpbmc+ID4gbGFiZWxzID0gYWRvcHRQdHIobmV3
IFZlY3RvcjxTdHJpbmc+KCkpOworICAgIGxhYmVscy0+cmVzZXJ2ZUNhcGFjaXR5KHNpemUpOwor
ICAgIGZvciAoaW50MzJfdCBpID0gMDsgaSA8IHNpemU7ICsraSkgeworICAgICAgICBVRXJyb3JD
b2RlIHN0YXR1cyA9IFVfWkVST19FUlJPUjsKKyAgICAgICAgaW50MzJfdCBsZW5ndGggPSB1ZGF0
X2dldFN5bWJvbHMoZGF0ZUZvcm1hdCwgdHlwZSwgc3RhcnRJbmRleCArIGksIDAsIDAsICZzdGF0
dXMpOworICAgICAgICBpZiAoc3RhdHVzICE9IFVfQlVGRkVSX09WRVJGTE9XX0VSUk9SKQorICAg
ICAgICAgICAgcmV0dXJuIFBhc3NPd25QdHI8VmVjdG9yPFN0cmluZz4gPigpOworICAgICAgICBW
ZWN0b3I8VUNoYXI+IGJ1ZmZlcihsZW5ndGgpOworICAgICAgICBzdGF0dXMgPSBVX1pFUk9fRVJS
T1I7CisgICAgICAgIHVkYXRfZ2V0U3ltYm9scyhkYXRlRm9ybWF0LCB0eXBlLCBzdGFydEluZGV4
ICsgaSwgYnVmZmVyLmRhdGEoKSwgbGVuZ3RoLCAmc3RhdHVzKTsKKyAgICAgICAgaWYgKFVfRkFJ
TFVSRShzdGF0dXMpKQorICAgICAgICAgICAgcmV0dXJuIFBhc3NPd25QdHI8VmVjdG9yPFN0cmlu
Zz4gPigpOworICAgICAgICBsYWJlbHMtPmFwcGVuZChTdHJpbmc6OmFkb3B0KGJ1ZmZlcikpOwor
ICAgIH0KKyAgICByZXR1cm4gbGFiZWxzLnJlbGVhc2UoKTsKK30KKworI2VuZGlmCisKKyNpZiBF
TkFCTEUoVElNRV9JTlBVVF9GSUVMRFMpCisKK3N0YXRpYyBQYXNzT3duUHRyPFZlY3RvcjxTdHJp
bmc+ID4gY3JlYXRlRmFsbGJhY2tQZXJpb2RMYWJlbHMoKQoreworICAgIE93blB0cjxWZWN0b3I8
U3RyaW5nPiA+IGxhYmVscyA9IGFkb3B0UHRyKG5ldyBWZWN0b3I8U3RyaW5nPigpKTsKKyAgICBs
YWJlbHMtPnJlc2VydmVDYXBhY2l0eSgyKTsKKyAgICBsYWJlbHMtPmFwcGVuZCgiQU0iKTsKKyAg
ICBsYWJlbHMtPmFwcGVuZCgiUE0iKTsKKyAgICByZXR1cm4gbGFiZWxzLnJlbGVhc2UoKTsKK30K
Kwordm9pZCBMb2NhbGVJQ1U6OmluaXRpYWxpemVEYXRlVGltZUZvcm1hdCgpCit7CisgICAgaWYg
KG1fZGlkQ3JlYXRlTG9uZ1RpbWVGb3JtYXQpCisgICAgICAgIHJldHVybjsKKworICAgIG1fbWVk
aXVtVGltZUZvcm1hdCA9IG9wZW5EYXRlRm9ybWF0KFVEQVRfTUVESVVNLCBVREFUX05PTkUpOwor
ICAgIG1fbG9jYWxpemVkVGltZUZvcm1hdFRleHQgPSBnZXREYXRlRm9ybWF0UGF0dGVybihtX21l
ZGl1bVRpbWVGb3JtYXQpOworCisgICAgbV9zaG9ydFRpbWVGb3JtYXQgPSBvcGVuRGF0ZUZvcm1h
dChVREFUX1NIT1JULCBVREFUX05PTkUpOworICAgIG1fbG9jYWxpemVkU2hvcnRUaW1lRm9ybWF0
VGV4dCA9IGdldERhdGVGb3JtYXRQYXR0ZXJuKG1fc2hvcnRUaW1lRm9ybWF0KTsKKworICAgIG1f
cGVyaW9kTGFiZWxzID0gY3JlYXRlTGFiZWxWZWN0b3IobV9tZWRpdW1UaW1lRm9ybWF0LCBVREFU
X0FNX1BNUywgVUNBTF9BTSwgMik7CisgICAgaWYgKCFtX3BlcmlvZExhYmVscykKKyAgICAgICAg
bV9wZXJpb2RMYWJlbHMgPSBjcmVhdGVGYWxsYmFja1BlcmlvZExhYmVscygpOworCisgICAgbV9k
aWRDcmVhdGVMb25nVGltZUZvcm1hdCA9IHRydWU7Cit9CisKK1N0cmluZyBMb2NhbGVJQ1U6Omxv
Y2FsaXplZFRpbWVGb3JtYXRUZXh0KCkKK3sKKyAgICBpbml0aWFsaXplRGF0ZVRpbWVGb3JtYXQo
KTsKKyAgICByZXR1cm4gbV9sb2NhbGl6ZWRUaW1lRm9ybWF0VGV4dDsKK30KKworCitTdHJpbmcg
TG9jYWxlSUNVOjpsb2NhbGl6ZWRTaG9ydFRpbWVGb3JtYXRUZXh0KCkKK3sKKyAgICBpbml0aWFs
aXplRGF0ZVRpbWVGb3JtYXQoKTsKKyAgICByZXR1cm4gbV9sb2NhbGl6ZWRTaG9ydFRpbWVGb3Jt
YXRUZXh0OworfQorCitjb25zdCBWZWN0b3I8U3RyaW5nPiYgTG9jYWxlSUNVOjpwZXJpb2RMYWJl
bHMoKQoreworICAgIGluaXRpYWxpemVEYXRlVGltZUZvcm1hdCgpOworICAgIHJldHVybiAqbV9w
ZXJpb2RMYWJlbHM7Cit9CisjZW5kaWYKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9Mb2NhbGVJQ1UuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3RleHQvTG9jYWxlSUNVLmgKaW5kZXggNzczNjBhMmFhODNiZDgwNTE1
MjdmNDQ5NGZkM2Q0ZTkxMTU3OGI1Yy4uZmMxMmE4MjdmMDFiYjE1MDA0NjA0ZmU5Njk1MWE4MjEx
OThhNTQ4ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9Mb2NhbGVJ
Q1UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0xvY2FsZUlDVS5oCkBAIC02
NCw2ICs2NCwxMiBAQCBwdWJsaWM6CiAgICAgdW5zaWduZWQgZmlyc3REYXlPZldlZWsoKTsKICNl
bmRpZgogCisjaWYgRU5BQkxFKFRJTUVfSU5QVVRfRklFTERTKQorICAgIFN0cmluZyBsb2NhbGl6
ZWRUaW1lRm9ybWF0VGV4dCgpOworICAgIFN0cmluZyBsb2NhbGl6ZWRTaG9ydFRpbWVGb3JtYXRU
ZXh0KCk7CisgICAgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBlcmlvZExhYmVscygpOworI2VuZGlm
CisKIHByaXZhdGU6CiAgICAgc3RhdGljIFBhc3NPd25QdHI8TG9jYWxlSUNVPiBjcmVhdGVGb3JD
dXJyZW50TG9jYWxlKCk7CiAgICAgZXhwbGljaXQgTG9jYWxlSUNVKGNvbnN0IGNoYXIqKTsKQEAg
LTc1LDEzICs4MSwyMSBAQCBwcml2YXRlOgogICAgIHVuc2lnbmVkIG1hdGNoZWREZWNpbWFsU3lt
Ym9sSW5kZXgoY29uc3QgU3RyaW5nJiBpbnB1dCwgdW5zaWduZWQmIHBvc2l0aW9uKTsKIAogICAg
IGJvb2wgaW5pdGlhbGl6ZVNob3J0RGF0ZUZvcm1hdCgpOworICAgIFVEYXRlRm9ybWF0KiBvcGVu
RGF0ZUZvcm1hdChVRGF0ZUZvcm1hdFN0eWxlIHRpbWVTdHlsZSwgVURhdGVGb3JtYXRTdHlsZSBk
YXRlU3R5bGUpIGNvbnN0OwogCiAjaWYgRU5BQkxFKENBTEVOREFSX1BJQ0tFUikKICAgICB2b2lk
IGluaXRpYWxpemVMb2NhbGl6ZWREYXRlRm9ybWF0VGV4dCgpOwotICAgIFBhc3NPd25QdHI8VmVj
dG9yPFN0cmluZz4gPiBjcmVhdGVMYWJlbFZlY3RvcihVRGF0ZUZvcm1hdFN5bWJvbFR5cGUsIGlu
dDMyX3Qgc3RhcnRJbmRleCwgaW50MzJfdCBzaXplKTsKICAgICB2b2lkIGluaXRpYWxpemVDYWxl
bmRhcigpOwogI2VuZGlmCiAKKyNpZiBFTkFCTEUoQ0FMRU5EQVJfUElDS0VSKSB8fCBFTkFCTEUo
VElNRV9JTlBVVF9GSUVMRFMpCisgICAgUGFzc093blB0cjxWZWN0b3I8U3RyaW5nPiA+IGNyZWF0
ZUxhYmVsVmVjdG9yKGNvbnN0IFVEYXRlRm9ybWF0KiwgVURhdGVGb3JtYXRTeW1ib2xUeXBlLCBp
bnQzMl90IHN0YXJ0SW5kZXgsIGludDMyX3Qgc2l6ZSk7CisjZW5kaWYKKworI2lmIEVOQUJMRShU
SU1FX0lOUFVUX0ZJRUxEUykKKyAgICB2b2lkIGluaXRpYWxpemVEYXRlVGltZUZvcm1hdCgpOwor
I2VuZGlmCisKICAgICBDU3RyaW5nIG1fbG9jYWxlOwogICAgIFVOdW1iZXJGb3JtYXQqIG1fbnVt
YmVyRm9ybWF0OwogICAgIFVEYXRlRm9ybWF0KiBtX3Nob3J0RGF0ZUZvcm1hdDsKQEAgLTEwNSw2
ICsxMTksMTYgQEAgcHJpdmF0ZToKICAgICBPd25QdHI8VmVjdG9yPFN0cmluZz4gPiBtX3dlZWtE
YXlTaG9ydExhYmVsczsKICAgICB1bnNpZ25lZCBtX2ZpcnN0RGF5T2ZXZWVrOwogI2VuZGlmCisK
KyNpZiBFTkFCTEUoVElNRV9JTlBVVF9GSUVMRFMpCisgICAgVURhdGVGb3JtYXQqIG1fbWVkaXVt
VGltZUZvcm1hdDsKKyAgICBVRGF0ZUZvcm1hdCogbV9zaG9ydFRpbWVGb3JtYXQ7CisgICAgU3Ry
aW5nIG1fbG9jYWxpemVkVGltZUZvcm1hdFRleHQ7CisgICAgU3RyaW5nIG1fbG9jYWxpemVkU2hv
cnRUaW1lRm9ybWF0VGV4dDsKKyAgICBPd25QdHI8VmVjdG9yPFN0cmluZz4gPiBtX3BlcmlvZExh
YmVsczsKKyAgICBib29sIG1fZGlkQ3JlYXRlTG9uZ1RpbWVGb3JtYXQ7CisjZW5kaWYKKwogfTsK
IAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9Mb2NhbGl6ZWRE
YXRlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0xvY2FsaXplZERhdGUuaAppbmRl
eCA0ZGI1ZWFjOGUzNWI3NTRiOWQ4MzUwMjdlNDIwNzU4YTA0ZjhmOWQ1Li5iYmNlYmMxYjhmYTE2
ODJmZjE5MzQ5ZTcxNDdlOGRkMzQyOGMxN2EwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS90ZXh0L0xvY2FsaXplZERhdGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS90ZXh0L0xvY2FsaXplZERhdGUuaApAQCAtNjAsNiArNjAsMjEgQEAgY29uc3QgVmVjdG9yPFN0
cmluZz4mIHdlZWtEYXlTaG9ydExhYmVscygpOwogCiAvLyBUaGUgZmlyc3QgZGF5IG9mIGEgd2Vl
ay4gMCBpcyBTdW5kYXksIGFuZCA2IGlzIFNhdHVyZGF5LgogdW5zaWduZWQgZmlyc3REYXlPZldl
ZWsoKTsKKworI2VuZGlmCisKKyNpZiBFTkFCTEUoVElNRV9JTlBVVF9GSUVMRFMpCisvLyBSZXR1
cm5zIHRpbWUgZm9ybWF0IGluIFVuaWNvZGUgVFIzNSBMRE1MIGNvbnRhaW5pbmcgaG91ciwgbWlu
dXRlLCBhbmQKKy8vIHNlY29uZCB3aXRoIG9wdGlvbmFsIHBlcmlvZChBTS9QTSksIGUuZy4gImg6
bW06c3MgYSIKK1N0cmluZyBsb2NhbGl6ZWRUaW1lRm9ybWF0VGV4dCgpOworCisvLyBSZXR1cm5z
IHRpbWUgZm9ybWF0IGluIFVuaWNvZGUgVFIzNSBMRE1MIGNvbnRhaW5pbmcgaG91ciwgYW5kIG1p
bnV0ZQorLy8gd2l0aCBvcHRpb25hbCBwZXJpb2QoQU0vUE0pLCBlLmcuICJoOm1tIGEiCisvLyBO
b3RlOiBTb21lIHBsYXRmb3JtcyByZXR1cm4gc2FtZSB2YWx1ZSBhcyBsb2NhbGl6ZWRUaW1lRm9y
bWF0VGV4dCgpLgorU3RyaW5nIGxvY2FsaXplZFNob3J0VGltZUZvcm1hdFRleHQoKTsKKworLy8g
UmV0dXJucyBsb2NhbGl6ZWQgcGVyaW9kIGZpZWxkKEFNL1BNKSBzdHJpbmdzLgorY29uc3QgVmVj
dG9yPFN0cmluZz4mIHBlcmlvZExhYmVscygpOwogI2VuZGlmCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvTG9jYWxpemVk
RGF0ZUlDVS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0xvY2FsaXplZERhdGVJ
Q1UuY3BwCmluZGV4IDEwY2I2ZjEzMmNlMzkzZWZlOWJkYTRmMGQ3NzBjMGM4ZjllY2I3ZjguLmNk
NWE1OTIyZWQwMzZmZjZlZTI4MWZjOWNiMTk3Njc5MzA1NTA1YzYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvTG9jYWxpemVkRGF0ZUlDVS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9Mb2NhbGl6ZWREYXRlSUNVLmNwcApAQCAtOTIsNCArOTIs
MjEgQEAgdW5zaWduZWQgZmlyc3REYXlPZldlZWsoKQogfQogI2VuZGlmCiAKKyNpZiBFTkFCTEUo
VElNRV9JTlBVVF9GSUVMRFMpCitTdHJpbmcgbG9jYWxpemVkVGltZUZvcm1hdFRleHQoKQorewor
ICAgIHJldHVybiBMb2NhbGVJQ1U6OmN1cnJlbnRMb2NhbGUoKS0+bG9jYWxpemVkVGltZUZvcm1h
dFRleHQoKTsKK30KKworU3RyaW5nIGxvY2FsaXplZFNob3J0VGltZUZvcm1hdFRleHQoKQorewor
ICAgIHJldHVybiBMb2NhbGVJQ1U6OmN1cnJlbnRMb2NhbGUoKS0+bG9jYWxpemVkU2hvcnRUaW1l
Rm9ybWF0VGV4dCgpOworfQorCitjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGVyaW9kTGFiZWxzKCkK
K3sKKyAgICByZXR1cm4gTG9jYWxlSUNVOjpjdXJyZW50TG9jYWxlKCktPnBlcmlvZExhYmVscygp
OworfQorI2VuZGlmCisKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2Vi
S2l0Lmd5cGkgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCmluZGV4IGRkMmJm
YjJlZTYwZmU0YTIxZTEzZjQxYzNhODc2NThjZDU3NjkxOWIuLjA3Mzk3ZGI0NzVkMDYzZTQ2ZWRl
ZTNkNWE4M2NjMDU3NTk3MTM2NjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
V2ViS2l0Lmd5cGkKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQpAQCAt
OTgsNiArOTgsNyBAQAogICAgICAgICAgICAgJ3Rlc3RzL0NDVGltZXJUZXN0LmNwcCcsCiAgICAg
ICAgICAgICAndGVzdHMvQ2xpcGJvYXJkQ2hyb21pdW1UZXN0LmNwcCcsCiAgICAgICAgICAgICAn
dGVzdHMvQ29tcG9zaXRvckZha2VXZWJHcmFwaGljc0NvbnRleHQzRC5oJywKKyAgICAgICAgICAg
ICd0ZXN0cy9EYXRlVGltZUZvcm1hdFRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9EZWNp
bWFsVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0RyYWdJbWFnZVRlc3QuY3BwJywKICAg
ICAgICAgICAgICd0ZXN0cy9FdmVudExpc3RlbmVyVGVzdC5jcHAnLApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9EYXRlVGltZUZvcm1hdFRlc3QuY3BwIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS90ZXN0cy9EYXRlVGltZUZvcm1hdFRlc3QuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjA5MzI2MmEzNmMxNjRjMTk2NmM2MjRlYjkwNDQ5YTIxY2YzMGNlNzMKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0RhdGVUaW1lRm9ybWF0VGVzdC5jcHAK
QEAgLTAsMCArMSwzNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUK
KyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJp
Z2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUg
bmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20K
KyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICog
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
CisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoVElNRV9J
TlBVVF9GSUVMRFMpCisKKyNpbmNsdWRlICJEYXRlVGltZUZvcm1hdC5oIgorCisjaW5jbHVkZSA8
Z3Rlc3QvZ3Rlc3QuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisjaW5jbHVkZSA8
d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKwor
Y2xhc3MgRGF0ZVRpbWVGb3JtYXRUZXN0IDogcHVibGljIDo6dGVzdGluZzo6VGVzdCB7CitwdWJs
aWM6CisgICAgdHlwZWRlZiBEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlIEZpZWxkVHlwZTsKKwor
ICAgIHN0cnVjdCBUb2tlbiB7CisgICAgICAgIFN0cmluZyBzdHJpbmc7CisgICAgICAgIGludCBj
b3VudDsKKyAgICAgICAgRmllbGRUeXBlIGZpZWxkVHlwZTsKKworICAgICAgICBUb2tlbihGaWVs
ZFR5cGUgZmllbGRUeXBlLCBpbnQgY291bnQgPSAxKQorICAgICAgICAgICAgOiBjb3VudChjb3Vu
dCkKKyAgICAgICAgICAgICwgZmllbGRUeXBlKGZpZWxkVHlwZSkKKyAgICAgICAgeworICAgICAg
ICAgICAgQVNTRVJUKGZpZWxkVHlwZSAhPSBEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlTGl0ZXJh
bCk7CisgICAgICAgIH0KKworICAgICAgICBUb2tlbihjb25zdCBTdHJpbmcmIHN0cmluZykKKyAg
ICAgICAgICAgIDogc3RyaW5nKHN0cmluZykKKyAgICAgICAgICAgICwgY291bnQoMCkKKyAgICAg
ICAgICAgICwgZmllbGRUeXBlKERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVMaXRlcmFsKQorICAg
ICAgICB7CisgICAgICAgIH0KKworICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgVG9rZW4m
IG90aGVyKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZmllbGRUeXBlID09
IG90aGVyLmZpZWxkVHlwZSAmJiBjb3VudCA9PSBvdGhlci5jb3VudCAmJiBzdHJpbmcgPT0gb3Ro
ZXIuc3RyaW5nOworICAgICAgICB9CisKKyAgICAgICAgU3RyaW5nIHRvU3RyaW5nKCkgY29uc3QK
KyAgICAgICAgeworICAgICAgICAgICAgc3dpdGNoIChmaWVsZFR5cGUpIHsKKyAgICAgICAgICAg
IGNhc2UgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZUludmFsaWQ6CisgICAgICAgICAgICAgICAg
cmV0dXJuICIqaW52YWxpZCoiOworICAgICAgICAgICAgY2FzZSBEYXRlVGltZUZvcm1hdDo6Rmll
bGRUeXBlTGl0ZXJhbDogeworICAgICAgICAgICAgICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsK
KyAgICAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgnIicpOworICAgICAgICAgICAgICAgIGJ1
aWxkZXIuYXBwZW5kKHN0cmluZyk7CisgICAgICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoJyIn
KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gYnVpbGRlci50b1N0cmluZygpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gU3RyaW5n
Ojpmb3JtYXQoIlRva2VuKCVkLCAlZCkiLCBmaWVsZFR5cGUsIGNvdW50KTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgIH07CisKKyAgICBjbGFzcyBUb2tlbnMgeworICAgIHB1YmxpYzoK
KyAgICAgICAgVG9rZW5zKCkgeyB9CisKKyAgICAgICAgZXhwbGljaXQgVG9rZW5zKGNvbnN0IFZl
Y3RvcjxUb2tlbj4gdG9rZW5zKQorICAgICAgICAgICAgOiBtX3Rva2Vucyh0b2tlbnMpCisgICAg
ICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIGV4cGxpY2l0IFRva2Vucyhjb25zdCBTdHJpbmcm
IHN0cmluZykKKyAgICAgICAgeworICAgICAgICAgICAgbV90b2tlbnMuYXBwZW5kKFRva2VuKHN0
cmluZykpOworICAgICAgICB9CisKKyAgICAgICAgZXhwbGljaXQgVG9rZW5zKFRva2VuIHRva2Vu
MSkKKyAgICAgICAgeworICAgICAgICAgICAgbV90b2tlbnMuYXBwZW5kKHRva2VuMSk7CisgICAg
ICAgIH0KKworICAgICAgICBUb2tlbnMoVG9rZW4gdG9rZW4xLCBUb2tlbiB0b2tlbjIpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIG1fdG9rZW5zLmFwcGVuZCh0b2tlbjEpOworICAgICAgICAgICAg
bV90b2tlbnMuYXBwZW5kKHRva2VuMik7CisgICAgICAgIH0KKworICAgICAgICBUb2tlbnMoVG9r
ZW4gdG9rZW4xLCBUb2tlbiB0b2tlbjIsIFRva2VuIHRva2VuMykKKyAgICAgICAgeworICAgICAg
ICAgICAgbV90b2tlbnMuYXBwZW5kKHRva2VuMSk7CisgICAgICAgICAgICBtX3Rva2Vucy5hcHBl
bmQodG9rZW4yKTsKKyAgICAgICAgICAgIG1fdG9rZW5zLmFwcGVuZCh0b2tlbjMpOworICAgICAg
ICB9CisKKyAgICAgICAgVG9rZW5zKFRva2VuIHRva2VuMSwgVG9rZW4gdG9rZW4yLCBUb2tlbiB0
b2tlbjMsIFRva2VuIHRva2VuNCkKKyAgICAgICAgeworICAgICAgICAgICAgbV90b2tlbnMuYXBw
ZW5kKHRva2VuMSk7CisgICAgICAgICAgICBtX3Rva2Vucy5hcHBlbmQodG9rZW4yKTsKKyAgICAg
ICAgICAgIG1fdG9rZW5zLmFwcGVuZCh0b2tlbjMpOworICAgICAgICAgICAgbV90b2tlbnMuYXBw
ZW5kKHRva2VuNCk7CisgICAgICAgIH0KKworICAgICAgICBUb2tlbnMoVG9rZW4gdG9rZW4xLCBU
b2tlbiB0b2tlbjIsIFRva2VuIHRva2VuMywgVG9rZW4gdG9rZW40LCBUb2tlbiB0b2tlbjUpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIG1fdG9rZW5zLmFwcGVuZCh0b2tlbjEpOworICAgICAgICAg
ICAgbV90b2tlbnMuYXBwZW5kKHRva2VuMik7CisgICAgICAgICAgICBtX3Rva2Vucy5hcHBlbmQo
dG9rZW4zKTsKKyAgICAgICAgICAgIG1fdG9rZW5zLmFwcGVuZCh0b2tlbjQpOworICAgICAgICAg
ICAgbV90b2tlbnMuYXBwZW5kKHRva2VuNSk7CisgICAgICAgIH0KKworICAgICAgICBUb2tlbnMo
VG9rZW4gdG9rZW4xLCBUb2tlbiB0b2tlbjIsIFRva2VuIHRva2VuMywgVG9rZW4gdG9rZW40LCBU
b2tlbiB0b2tlbjUsIFRva2VuIHRva2VuNikKKyAgICAgICAgeworICAgICAgICAgICAgbV90b2tl
bnMuYXBwZW5kKHRva2VuMSk7CisgICAgICAgICAgICBtX3Rva2Vucy5hcHBlbmQodG9rZW4yKTsK
KyAgICAgICAgICAgIG1fdG9rZW5zLmFwcGVuZCh0b2tlbjMpOworICAgICAgICAgICAgbV90b2tl
bnMuYXBwZW5kKHRva2VuNCk7CisgICAgICAgICAgICBtX3Rva2Vucy5hcHBlbmQodG9rZW41KTsK
KyAgICAgICAgICAgIG1fdG9rZW5zLmFwcGVuZCh0b2tlbjYpOworICAgICAgICB9CisKKyAgICAg
ICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFRva2VucyYgb3RoZXIpIGNvbnN0CisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybiBtX3Rva2VucyA9PSBvdGhlci5tX3Rva2VuczsKKyAgICAgICAg
fQorCisgICAgICAgIFN0cmluZyB0b1N0cmluZygpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAg
ICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKKyAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCJU
b2tlbnMoIik7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gMDsgaW5kZXggPCBt
X3Rva2Vucy5zaXplKCk7ICsraW5kZXgpIHsKKyAgICAgICAgICAgICAgICBpZiAoaW5kZXgpCisg
ICAgICAgICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCIsIik7CisgICAgICAgICAgICAgICAg
YnVpbGRlci5hcHBlbmQobV90b2tlbnNbaW5kZXhdLnRvU3RyaW5nKCkpOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoIikiKTsKKyAgICAgICAgICAgIHJldHVybiBi
dWlsZGVyLnRvU3RyaW5nKCk7CisgICAgICAgIH0KKworICAgIHByaXZhdGU6CisgICAgICAgIFZl
Y3RvcjxUb2tlbj4gbV90b2tlbnM7CisgICAgfTsKKworcHJvdGVjdGVkOgorICAgIFRva2VucyBw
YXJzZShjb25zdCBTdHJpbmcmIGZvcm1hdFN0cmluZykKKyAgICB7CisgICAgICAgIFRva2VuSGFu
ZGxlciBoYW5kbGVyOworICAgICAgICBEYXRlVGltZUZvcm1hdCBmb3JtYXQoaGFuZGxlcik7Cisg
ICAgICAgIGlmICghZm9ybWF0LnBhcnNlKGZvcm1hdFN0cmluZykpCisgICAgICAgICAgICByZXR1
cm4gVG9rZW5zKFRva2VuKCIqZmFpbGVkKiIpKTsKKyAgICAgICAgcmV0dXJuIGhhbmRsZXIudG9r
ZW5zKCk7CisgICAgfQorCisgICAgRmllbGRUeXBlIHNpbmdsZShjb25zdCBjaGFyIGNoKQorICAg
IHsKKyAgICAgICAgY2hhciBmb3JtYXRTdHJpbmdbMl07CisgICAgICAgIGZvcm1hdFN0cmluZ1sw
XSA9IGNoOworICAgICAgICBmb3JtYXRTdHJpbmdbMV0gPSAwOworICAgICAgICBUb2tlbkhhbmRs
ZXIgaGFuZGxlcjsKKyAgICAgICAgRGF0ZVRpbWVGb3JtYXQgZm9ybWF0KGhhbmRsZXIpOworICAg
ICAgICBpZiAoIWZvcm1hdC5wYXJzZShmb3JtYXRTdHJpbmcpKQorICAgICAgICAgICAgcmV0dXJu
IERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVJbnZhbGlkOworICAgICAgICByZXR1cm4gaGFuZGxl
ci5maWVsZFR5cGUoMCk7CisgICAgfQorCitwcml2YXRlOgorICAgIGNsYXNzIFRva2VuSGFuZGxl
ciA6IHB1YmxpYyBEYXRlVGltZUZvcm1hdDo6VG9rZW5IYW5kbGVyIHsKKyAgICBwdWJsaWM6Cisg
ICAgICAgIHZpcnR1YWwgflRva2VuSGFuZGxlcigpIHsgfQorCisgICAgICAgIEZpZWxkVHlwZSBm
aWVsZFR5cGUoaW50IGluZGV4KSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
aW5kZXggPj0wICYmIGluZGV4IDwgc3RhdGljX2Nhc3Q8aW50PihtX3Rva2Vucy5zaXplKCkpID8g
bV90b2tlbnNbaW5kZXhdLmZpZWxkVHlwZSA6IERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVJbnZh
bGlkOworICAgICAgICB9CisKKyAgICAgICAgVG9rZW5zIHRva2VucygpIGNvbnN0IHsgcmV0dXJu
IFRva2VucyhtX3Rva2Vucyk7IH0KKworICAgIHByaXZhdGU6CisgICAgICAgIHZpcnR1YWwgdm9p
ZCBnb3RGaWVsZChGaWVsZFR5cGUgZmllbGRUeXBlLCBpbnQgY291bnQpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIG1fdG9rZW5zLmFwcGVuZChUb2tlbihmaWVsZFR5cGUsIGNvdW50KSk7CisgICAg
ICAgIH0KKworICAgICAgICB2aXJ0dWFsIHZvaWQgZ290TGl0ZXJhbChjb25zdCBTdHJpbmcmIHN0
cmluZykKKyAgICAgICAgeworICAgICAgICAgICAgbV90b2tlbnMuYXBwZW5kKFRva2VuKHN0cmlu
ZykpOworICAgICAgICB9CisKKyAgICAgICAgVmVjdG9yPFRva2VuPiBtX3Rva2VuczsKKyAgICB9
OworfTsKKworc3RkOjpvc3RyZWFtJiBvcGVyYXRvcjw8KHN0ZDo6b3N0cmVhbSYgb3MsIGNvbnN0
IERhdGVUaW1lRm9ybWF0VGVzdDo6VG9rZW5zJiB0b2tlbnMpCit7CisgICAgcmV0dXJuIG9zIDw8
IHRva2Vucy50b1N0cmluZygpLmFzY2lpKCkuZGF0YSgpOworfQorCitURVNUX0YoRGF0ZVRpbWVG
b3JtYXRUZXN0LCBDb21tb25QYXR0ZXJuKQoreworICAgIEVYUEVDVF9FUShUb2tlbnMoKSwgcGFy
c2UoIiIpKTsKKworICAgIEVYUEVDVF9FUSgKKyAgICAgICAgVG9rZW5zKAorICAgICAgICAgICAg
VG9rZW4oRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZVllYXIsIDQpLCBUb2tlbigiLSIpLAorICAg
ICAgICAgICAgVG9rZW4oRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZU1vbnRoLCAyKSwgVG9rZW4o
Ii0iKSwKKyAgICAgICAgICAgIFRva2VuKERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVEYXlPZk1v
bnRoLCAyKSksCisgICAgICAgIHBhcnNlKCJ5eXl5LU1NLWRkIikpOworCisgICAgRVhQRUNUX0VR
KAorICAgICAgICBUb2tlbnMoCisgICAgICAgICAgICBUb2tlbihEYXRlVGltZUZvcm1hdDo6Rmll
bGRUeXBlSG91cjI0LCAyKSwgVG9rZW4oIjoiKSwKKyAgICAgICAgICAgIFRva2VuKERhdGVUaW1l
Rm9ybWF0OjpGaWVsZFR5cGVNaW51dGUsIDIpLCBUb2tlbigiOiIpLAorICAgICAgICAgICAgVG9r
ZW4oRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZVNlY29uZCwgMikpLAorICAgICAgICBwYXJzZSgi
a2s6bW06c3MiKSk7CisKKyAgICBFWFBFQ1RfRVEoCisgICAgICAgIFRva2VucygKKyAgICAgICAg
ICAgIFRva2VuKERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVIb3VyMTIpLCBUb2tlbigiOiIpLAor
ICAgICAgICAgICAgVG9rZW4oRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZU1pbnV0ZSksIFRva2Vu
KCIgIiksCisgICAgICAgICAgICBUb2tlbihEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlUGVyaW9k
KSksCisgICAgICAgIHBhcnNlKCJoOm0gYSIpKTsKKworICAgIEVYUEVDVF9FUSgKKyAgICAgICAg
VG9rZW5zKAorICAgICAgICAgICAgVG9rZW4oRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZVllYXIp
LCBUb2tlbigiTmVuICIpLAorICAgICAgICAgICAgVG9rZW4oRGF0ZVRpbWVGb3JtYXQ6OkZpZWxk
VHlwZU1vbnRoKSwgVG9rZW4oIkdldHN1ICIpLAorICAgICAgICAgICAgVG9rZW4oRGF0ZVRpbWVG
b3JtYXQ6OkZpZWxkVHlwZURheU9mTW9udGgpLCBUb2tlbigiTmljaGkiKSksCisgICAgICAgIHBh
cnNlKCJ5J05lbicgTSdHZXRzdScgZCdOaWNoaSciKSk7Cit9CisKK1RFU1RfRihEYXRlVGltZUZv
cm1hdFRlc3QsIE1pc3NpbmdDbG9zaW5nUXVvdGUpCit7CisgICAgRVhQRUNUX0VRKFRva2Vucygi
KmZhaWxlZCoiKSwgcGFyc2UoIidmb28iKSk7CisgICAgRVhQRUNUX0VRKFRva2VucygiKmZhaWxl
ZCoiKSwgcGFyc2UoImZvJ28iKSk7CisgICAgRVhQRUNUX0VRKFRva2VucygiKmZhaWxlZCoiKSwg
cGFyc2UoImZvbyciKSk7Cit9CisKK1RFU1RfRihEYXRlVGltZUZvcm1hdFRlc3QsIFF1b3RlKQor
eworICAgIEVYUEVDVF9FUShUb2tlbnMoIkZvb0JhciIpLCBwYXJzZSgiJ0Zvb0JhciciKSk7Cisg
ICAgRVhQRUNUX0VRKFRva2VucygiJyIpLCBwYXJzZSgiJyciKSk7CisgICAgRVhQRUNUX0VRKFRv
a2VucygiJy0nIiksIHBhcnNlKCInJy0nJyIpKTsKKyAgICBFWFBFQ1RfRVEoVG9rZW5zKCJGb28n
QmFyIiksIHBhcnNlKCInRm9vJydCYXInIikpOworICAgIEVYUEVDVF9FUSgKKyAgICAgICAgVG9r
ZW5zKFRva2VuKERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVFcmEpLCBUb2tlbigiJ3MiKSksCisg
ICAgICAgIHBhcnNlKCJHJycncyciKSk7CisgICAgRVhQRUNUX0VRKAorICAgICAgICBUb2tlbnMo
VG9rZW4oRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZUVyYSksIFRva2VuKCInIiksIFRva2VuKERh
dGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVTZWNvbmQpKSwKKyAgICAgICAgcGFyc2UoIkcnJ3MiKSk7
Cit9CisKK1RFU1RfRihEYXRlVGltZUZvcm1hdFRlc3QsIFNpbmdsZUxvd2VyQ2FzZUNoYXJhY3Rl
cikKK3sKKyAgICBFWFBFQ1RfRVEoRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZUludmFsaWQsIHNp
bmdsZSgnYicpKTsKKyAgICBFWFBFQ1RfRVEoRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZUxvY2Fs
RGF5T2ZXZWVrU3RhbmRBbG9uLCBzaW5nbGUoJ2MnKSk7CisgICAgRVhQRUNUX0VRKERhdGVUaW1l
Rm9ybWF0OjpGaWVsZFR5cGVEYXlPZk1vbnRoLCBzaW5nbGUoJ2QnKSk7CisgICAgRVhQRUNUX0VR
KERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVMb2NhbERheU9mV2Vlaywgc2luZ2xlKCdlJykpOwor
ICAgIEVYUEVDVF9FUShEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlTW9kaWZpZWRKdWxpYW5EYXks
IHNpbmdsZSgnZycpKTsKKyAgICBFWFBFQ1RfRVEoRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZUhv
dXIxMiwgc2luZ2xlKCdoJykpOworICAgIEVYUEVDVF9FUShEYXRlVGltZUZvcm1hdDo6RmllbGRU
eXBlSG91cjI0LCBzaW5nbGUoJ2snKSk7CisgICAgRVhQRUNUX0VRKERhdGVUaW1lRm9ybWF0OjpG
aWVsZFR5cGVNaW51dGUsIHNpbmdsZSgnbScpKTsKKyAgICBFWFBFQ1RfRVEoRGF0ZVRpbWVGb3Jt
YXQ6OkZpZWxkVHlwZVF1YXRlclN0YW5kQWxvbmUsIHNpbmdsZSgncScpKTsKKyAgICBFWFBFQ1Rf
RVEoRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZVNlY29uZCwgc2luZ2xlKCdzJykpOworICAgIEVY
UEVDVF9FUShEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlRXh0ZW5kZWRZZWFyLCBzaW5nbGUoJ3Un
KSk7CisgICAgRVhQRUNUX0VRKERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVOb25Mb2NhdGlvblpv
bmUsIHNpbmdsZSgndicpKTsKKyAgICBFWFBFQ1RfRVEoRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlw
ZVdlZWtPZk1vbnRoLCBzaW5nbGUoJ3cnKSk7CisgICAgRVhQRUNUX0VRKERhdGVUaW1lRm9ybWF0
OjpGaWVsZFR5cGVZZWFyLCBzaW5nbGUoJ3knKSk7CisgICAgRVhQRUNUX0VRKERhdGVUaW1lRm9y
bWF0OjpGaWVsZFR5cGVab25lLCBzaW5nbGUoJ3onKSk7Cit9CisKK1RFU1RfRihEYXRlVGltZUZv
cm1hdFRlc3QsIFNpbmdsZUxvd2VyQ2FzZUludmFsaWQpCit7CisgICAgRVhQRUNUX0VRKERhdGVU
aW1lRm9ybWF0OjpGaWVsZFR5cGVQZXJpb2QsIHNpbmdsZSgnYScpKTsKKyAgICBFWFBFQ1RfRVEo
RGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZUludmFsaWQsIHNpbmdsZSgnZicpKTsKKyAgICBFWFBF
Q1RfRVEoRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZUludmFsaWQsIHNpbmdsZSgnaScpKTsKKyAg
ICBFWFBFQ1RfRVEoRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZUludmFsaWQsIHNpbmdsZSgnaicp
KTsKKyAgICBFWFBFQ1RfRVEoRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZUludmFsaWQsIHNpbmds
ZSgnbCcpKTsKKyAgICBFWFBFQ1RfRVEoRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZUludmFsaWQs
IHNpbmdsZSgnbicpKTsKKyAgICBFWFBFQ1RfRVEoRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZUlu
dmFsaWQsIHNpbmdsZSgnbycpKTsKKyAgICBFWFBFQ1RfRVEoRGF0ZVRpbWVGb3JtYXQ6OkZpZWxk
VHlwZUludmFsaWQsIHNpbmdsZSgncCcpKTsKKyAgICBFWFBFQ1RfRVEoRGF0ZVRpbWVGb3JtYXQ6
OkZpZWxkVHlwZUludmFsaWQsIHNpbmdsZSgncicpKTsKKyAgICBFWFBFQ1RfRVEoRGF0ZVRpbWVG
b3JtYXQ6OkZpZWxkVHlwZUludmFsaWQsIHNpbmdsZSgndCcpKTsKKyAgICBFWFBFQ1RfRVEoRGF0
ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZUludmFsaWQsIHNpbmdsZSgneCcpKTsKK30KKworVEVTVF9G
KERhdGVUaW1lRm9ybWF0VGVzdCwgU2luZ2xlVXBwZXJDYXNlQ2hhcmFjdGVyKQoreworICAgIEVY
UEVDVF9FUShEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlTWlsbGlzZWNvbmRzSW5EYXksIHNpbmds
ZSgnQScpKTsKKyAgICBFWFBFQ1RfRVEoRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZURheU9mWWVh
ciwgc2luZ2xlKCdEJykpOworICAgIEVYUEVDVF9FUShEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBl
RGF5T2ZXZWVrLCBzaW5nbGUoJ0UnKSk7CisgICAgRVhQRUNUX0VRKERhdGVUaW1lRm9ybWF0OjpG
aWVsZFR5cGVEYXlPZldlZWtJbk1vbnRoLCBzaW5nbGUoJ0YnKSk7CisgICAgRVhQRUNUX0VRKERh
dGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVFcmEsIHNpbmdsZSgnRycpKTsKKyAgICBFWFBFQ1RfRVEo
RGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZUhvdXIyMywgc2luZ2xlKCdIJykpOworICAgIEVYUEVD
VF9FUShEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlSG91cjExLCBzaW5nbGUoJ0snKSk7CisgICAg
RVhQRUNUX0VRKERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVNb250aFN0YW5kQWxvbmUsIHNpbmds
ZSgnTCcpKTsKKyAgICBFWFBFQ1RfRVEoRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZU1vbnRoLCBz
aW5nbGUoJ00nKSk7CisgICAgRVhQRUNUX0VRKERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVRdWF0
ZXIsIHNpbmdsZSgnUScpKTsKKyAgICBFWFBFQ1RfRVEoRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlw
ZUZyYWN0aW9uYWxTZWNvbmQsIHNpbmdsZSgnUycpKTsKKyAgICBFWFBFQ1RfRVEoRGF0ZVRpbWVG
b3JtYXQ6OkZpZWxkVHlwZVdlZWtPZlllYXIsIHNpbmdsZSgnVycpKTsKKyAgICBFWFBFQ1RfRVEo
RGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZVllYXJPZldlZWtPZlllYXIsIHNpbmdsZSgnWScpKTsK
KyAgICBFWFBFQ1RfRVEoRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZVJGQzgyMlpvbmUsIHNpbmds
ZSgnWicpKTsKK30KKworVEVTVF9GKERhdGVUaW1lRm9ybWF0VGVzdCwgU2luZ2xlVXBwZXJDYXNl
SW52YWxpZCkKK3sKKyAgICBFWFBFQ1RfRVEoRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZUludmFs
aWQsIHNpbmdsZSgnQicpKTsKKyAgICBFWFBFQ1RfRVEoRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlw
ZUludmFsaWQsIHNpbmdsZSgnQycpKTsKKyAgICBFWFBFQ1RfRVEoRGF0ZVRpbWVGb3JtYXQ6OkZp
ZWxkVHlwZUludmFsaWQsIHNpbmdsZSgnSScpKTsKKyAgICBFWFBFQ1RfRVEoRGF0ZVRpbWVGb3Jt
YXQ6OkZpZWxkVHlwZUludmFsaWQsIHNpbmdsZSgnSicpKTsKKyAgICBFWFBFQ1RfRVEoRGF0ZVRp
bWVGb3JtYXQ6OkZpZWxkVHlwZUludmFsaWQsIHNpbmdsZSgnTicpKTsKKyAgICBFWFBFQ1RfRVEo
RGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZUludmFsaWQsIHNpbmdsZSgnTycpKTsKKyAgICBFWFBF
Q1RfRVEoRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZUludmFsaWQsIHNpbmdsZSgnUCcpKTsKKyAg
ICBFWFBFQ1RfRVEoRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZUludmFsaWQsIHNpbmdsZSgnUicp
KTsKKyAgICBFWFBFQ1RfRVEoRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZUludmFsaWQsIHNpbmds
ZSgnVCcpKTsKKyAgICBFWFBFQ1RfRVEoRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZUludmFsaWQs
IHNpbmdsZSgnVScpKTsKKyAgICBFWFBFQ1RfRVEoRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZUlu
dmFsaWQsIHNpbmdsZSgnVicpKTsKKyAgICBFWFBFQ1RfRVEoRGF0ZVRpbWVGb3JtYXQ6OkZpZWxk
VHlwZUludmFsaWQsIHNpbmdsZSgnWCcpKTsKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0V2ZW50TGlzdGVuZXJUZXN0LmNwcCBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vdGVzdHMvRXZlbnRMaXN0ZW5lclRlc3QuY3BwCmluZGV4IDc5OWFjNDAw
N2M1YzkxZTYwNGZjNzNmZDZkZDljMDEyMGJhNGNkMmEuLjQ5MTZiNjUxMTE3NTNiY2Y5ZGE1NjYz
ZTQxZDA4ODI1ZmJkZGYwMTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVz
dHMvRXZlbnRMaXN0ZW5lclRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVz
dHMvRXZlbnRMaXN0ZW5lclRlc3QuY3BwCkBAIC03OCw3ICs3OCw3IEBAIHB1YmxpYzoKICAgICAg
ICAgc3RkOjpzdHJpbmcgYmFzZVVSTCgiaHR0cDovL3d3dy5leGFtcGxlLmNvbS8iKTsKICAgICAg
ICAgc3RkOjpzdHJpbmcgZmlsZU5hbWUoImxpc3RlbmVyL211dGF0aW9uX2V2ZW50X2xpc3RlbmVy
Lmh0bWwiKTsKICAgICAgICAgYm9vbCBleGVjdXRlU2NyaXB0ID0gdHJ1ZTsKLSAgICAgICAgRnJh
bWVUZXN0SGVscGVyczo6cmVnaXN0ZXJNb2NrZWRVUkxMb2FkKGJhc2VVUkwsIGZpbGVOYW1lKTsK
KyAgICAgICAgRnJhbWVUZXN0SGVscGVyczo6cmVnaXN0ZXJNb2NrZWRVUkxMb2FkQXNIVE1MKGJh
c2VVUkwsIGZpbGVOYW1lKTsKICAgICAgICAgbV93ZWJWaWV3ID0gRnJhbWVUZXN0SGVscGVyczo6
Y3JlYXRlV2ViVmlld0FuZExvYWQoYmFzZVVSTCArIGZpbGVOYW1lLCBleGVjdXRlU2NyaXB0KTsK
ICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvRnJhbWVU
ZXN0SGVscGVycy5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0ZyYW1lVGVzdEhl
bHBlcnMuY3BwCmluZGV4IGU0MDY0MTNkZDk1ZWIzMmMzZTAyYWEzNzUyNmEzM2M1NzMzZDI2OWIu
LjZmYTM4M2U2NDBiMDcwZWMxOTEwMjAxYmQyYTBkMzk3MWZkNDgwNWEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvRnJhbWVUZXN0SGVscGVycy5jcHAKKysrIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9GcmFtZVRlc3RIZWxwZXJzLmNwcApAQCAtNDYsMTYg
KzQ2LDE2IEBACiBuYW1lc3BhY2UgV2ViS2l0IHsKIG5hbWVzcGFjZSBGcmFtZVRlc3RIZWxwZXJz
IHsKIAotdm9pZCByZWdpc3Rlck1vY2tlZFVSTExvYWQoY29uc3Qgc3RkOjpzdHJpbmcmIGJhc2Us
IGNvbnN0IHN0ZDo6c3RyaW5nJiBmaWxlTmFtZSkKKwordm9pZCByZWdpc3Rlck1vY2tlZFVSTExv
YWQoY29uc3Qgc3RkOjpzdHJpbmcmIGJhc2UsIGNvbnN0IHN0ZDo6c3RyaW5nJiBmaWxlTmFtZSwg
Y29uc3Qgc3RkOjpzdHJpbmcmIG1pbWVUeXBlKQogewotICAgIHJlZ2lzdGVyTW9ja2VkVVJMTG9h
ZChHVVJMKGJhc2UgKyBmaWxlTmFtZSksIGZpbGVOYW1lKTsKKyAgICByZWdpc3Rlck1vY2tlZFVS
TExvYWQoR1VSTChiYXNlICsgZmlsZU5hbWUpLCBmaWxlTmFtZSwgbWltZVR5cGUpOwogfQogCi12
b2lkIHJlZ2lzdGVyTW9ja2VkVVJMTG9hZChHVVJMIHVybCwgY29uc3Qgc3RkOjpzdHJpbmcmIGZp
bGVOYW1lKQordm9pZCByZWdpc3Rlck1vY2tlZFVSTExvYWQoY29uc3QgR1VSTCYgdXJsLCBjb25z
dCBzdGQ6OnN0cmluZyYgZmlsZU5hbWUsIGNvbnN0IHN0ZDo6c3RyaW5nJiBtaW1lVHlwZSkKIHsK
LSAgICBXZWJVUkxSZXNwb25zZSByZXNwb25zZTsKLSAgICByZXNwb25zZS5pbml0aWFsaXplKCk7
Ci0gICAgcmVzcG9uc2Uuc2V0TUlNRVR5cGUoInRleHQvaHRtbCIpOworICAgIFdlYlVSTFJlc3Bv
bnNlIHJlc3BvbnNlKHVybCk7CisgICAgcmVzcG9uc2Uuc2V0TUlNRVR5cGUoV2ViU3RyaW5nOjpm
cm9tVVRGOChtaW1lVHlwZSkpOwogCiAgICAgc3RkOjpzdHJpbmcgZmlsZVBhdGggPSB3ZWJraXRf
c3VwcG9ydDo6R2V0V2ViS2l0Um9vdERpcigpLnV0ZjgoKTsKICAgICBmaWxlUGF0aCArPSAiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS8iOwpAQCAtNjQsNiArNjQsMTYgQEAgdm9p
ZCByZWdpc3Rlck1vY2tlZFVSTExvYWQoR1VSTCB1cmwsIGNvbnN0IHN0ZDo6c3RyaW5nJiBmaWxl
TmFtZSkKICAgICB3ZWJraXRfc3VwcG9ydDo6UmVnaXN0ZXJNb2NrZWRVUkwodXJsLCByZXNwb25z
ZSwgV2ViU3RyaW5nOjpmcm9tVVRGOChmaWxlUGF0aCkpOwogfQogCit2b2lkIHJlZ2lzdGVyTW9j
a2VkVVJMTG9hZEFzSFRNTChjb25zdCBzdGQ6OnN0cmluZyYgYmFzZSwgY29uc3Qgc3RkOjpzdHJp
bmcmIGZpbGVOYW1lKQoreworICAgIHJlZ2lzdGVyTW9ja2VkVVJMTG9hZEFzSFRNTChHVVJMKGJh
c2UgKyBmaWxlTmFtZSksIGZpbGVOYW1lKTsKK30KKwordm9pZCByZWdpc3Rlck1vY2tlZFVSTExv
YWRBc0hUTUwoY29uc3QgR1VSTCYgdXJsLCBjb25zdCBzdGQ6OnN0cmluZyYgZmlsZU5hbWUpCit7
CisgICAgcmVnaXN0ZXJNb2NrZWRVUkxMb2FkKHVybCwgZmlsZU5hbWUsICJ0ZXh0L2h0bWwiKTsK
K30KKwogdm9pZCBsb2FkRnJhbWUoV2ViRnJhbWUqIGZyYW1lLCBjb25zdCBzdGQ6OnN0cmluZyYg
dXJsKQogewogICAgIFdlYlVSTFJlcXVlc3QgdXJsUmVxdWVzdDsKQEAgLTk3LDYgKzEwNyw4IEBA
IFdlYlZpZXcqIGNyZWF0ZVdlYlZpZXdBbmRMb2FkKGNvbnN0IHN0ZDo6c3RyaW5nJiB1cmwsIGJv
b2wgZW5hYmxlSmF2YXNjcmlwdCwgV2ViCiAgICAgaWYgKCF3ZWJWaWV3Q2xpZW50KQogICAgICAg
ICB3ZWJWaWV3Q2xpZW50ID0gZGVmYXVsdFdlYlZpZXdDbGllbnQoKTsKICAgICBXZWJWaWV3KiB3
ZWJWaWV3ID0gV2ViVmlldzo6Y3JlYXRlKHdlYlZpZXdDbGllbnQpOworICAgIHdlYlZpZXctPnNl
dHRpbmdzKCktPnNldEltYWdlc0VuYWJsZWQodHJ1ZSk7CisgICAgd2ViVmlldy0+c2V0dGluZ3Mo
KS0+c2V0TG9hZHNJbWFnZXNBdXRvbWF0aWNhbGx5KHRydWUpOwogICAgIHdlYlZpZXctPnNldHRp
bmdzKCktPnNldEphdmFTY3JpcHRFbmFibGVkKGVuYWJsZUphdmFzY3JpcHQpOwogICAgIHdlYlZp
ZXctPmluaXRpYWxpemVNYWluRnJhbWUod2ViRnJhbWVDbGllbnQpOwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0ZyYW1lVGVzdEhlbHBlcnMuaCBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vdGVzdHMvRnJhbWVUZXN0SGVscGVycy5oCmluZGV4IGZjMmZhMmQzNjFi
MDFlMGI4YWIzMTAyZDYwZTcwNDJhMzBkMGUzOGMuLjlmNzMxNDI5YjFmNzdmNjI4Yzk3OTFhMzY1
NjdkM2RiM2Q0YTZmNTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMv
RnJhbWVUZXN0SGVscGVycy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvRnJh
bWVUZXN0SGVscGVycy5oCkBAIC00NCw5ICs0NCwxMSBAQCBjbGFzcyBXZWJWaWV3Q2xpZW50Owog
CiBuYW1lc3BhY2UgRnJhbWVUZXN0SGVscGVycyB7CiAKLXZvaWQgcmVnaXN0ZXJNb2NrZWRVUkxM
b2FkKGNvbnN0IHN0ZDo6c3RyaW5nJiBiYXNlLCBjb25zdCBzdGQ6OnN0cmluZyYgZmlsZU5hbWUp
Owordm9pZCByZWdpc3Rlck1vY2tlZFVSTExvYWRBc0hUTUwoY29uc3Qgc3RkOjpzdHJpbmcmIGJh
c2UsIGNvbnN0IHN0ZDo6c3RyaW5nJiBmaWxlTmFtZSk7CiAvLyBMaWtlIHRoZSBwcmV2aW91cyBv
dmVybG9hZCwgYnV0IGl0IGFsbG93cyBtb3JlIGZsZXhpYmlsaXR5IGluIHRoZSB1cmwgc2luY2Ug
aXQgaXMgZ2l2ZW4gYnkgdGhlIGNhbGxlci4KLXZvaWQgcmVnaXN0ZXJNb2NrZWRVUkxMb2FkKEdV
UkwsIGNvbnN0IHN0ZDo6c3RyaW5nJiBmaWxlTmFtZSk7Cit2b2lkIHJlZ2lzdGVyTW9ja2VkVVJM
TG9hZEFzSFRNTChjb25zdCBHVVJMJiwgY29uc3Qgc3RkOjpzdHJpbmcmIGZpbGVOYW1lKTsKK3Zv
aWQgcmVnaXN0ZXJNb2NrZWRVUkxMb2FkKGNvbnN0IHN0ZDo6c3RyaW5nJiBiYXNlLCBjb25zdCBz
dGQ6OnN0cmluZyYgZmlsZU5hbWUsIGNvbnN0IHN0ZDo6c3RyaW5nJiBtaW1lVHlwZSk7Cit2b2lk
IHJlZ2lzdGVyTW9ja2VkVVJMTG9hZChjb25zdCBHVVJMJiwgY29uc3Qgc3RkOjpzdHJpbmcmIGZp
bGVOYW1lLCBjb25zdCBzdGQ6OnN0cmluZyYgbWltZVR5cGUpOwogCiB2b2lkIGxvYWRGcmFtZShX
ZWJGcmFtZSosIGNvbnN0IHN0ZDo6c3RyaW5nJiB1cmwpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3Rlc3RzL0xpc3RlbmVyTGVha1Rlc3QuY3BwIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS90ZXN0cy9MaXN0ZW5lckxlYWtUZXN0LmNwcAppbmRleCA1ZTMyMWM3MGQ4YTY3
ODBjYjMyMWUwODAyZTM4OWY5ZTFkNTdlNzg3Li5kNmFjMjZhNzkyODczMzVkNzQzY2U4NjM4ZTUx
YTEzMzg4NjM1ZGQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0xp
c3RlbmVyTGVha1Rlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvTGlz
dGVuZXJMZWFrVGVzdC5jcHAKQEAgLTkwLDcgKzkwLDcgQEAgcHVibGljOgogICAgICAgICBzdGQ6
OnN0cmluZyBiYXNlVVJMKCJodHRwOi8vd3d3LmV4YW1wbGUuY29tLyIpOwogICAgICAgICBzdGQ6
OnN0cmluZyBmaWxlTmFtZShmaWxlbmFtZSk7CiAgICAgICAgIGJvb2wgZXhlY3V0ZVNjcmlwdCA9
IHRydWU7Ci0gICAgICAgIEZyYW1lVGVzdEhlbHBlcnM6OnJlZ2lzdGVyTW9ja2VkVVJMTG9hZChi
YXNlVVJMLCBmaWxlTmFtZSk7CisgICAgICAgIEZyYW1lVGVzdEhlbHBlcnM6OnJlZ2lzdGVyTW9j
a2VkVVJMTG9hZEFzSFRNTChiYXNlVVJMLCBmaWxlTmFtZSk7CiAgICAgICAgIG1fd2ViVmlldyA9
IEZyYW1lVGVzdEhlbHBlcnM6OmNyZWF0ZVdlYlZpZXdBbmRMb2FkKGJhc2VVUkwgKyBmaWxlTmFt
ZSwgZXhlY3V0ZVNjcmlwdCk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3Rlc3RzL1dlYkZyYW1lVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rl
c3RzL1dlYkZyYW1lVGVzdC5jcHAKaW5kZXggNDA3MDU4MDhkODViYTBkZTAwNzg5OGFmZTZhMmM3
NjE2NWNjMjQ0NC4uYjg4NDczMzE3MWRlMjdkZmYwMzk0MDQwYzk2MDgyMmY0OGM0ZGFjZiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9XZWJGcmFtZVRlc3QuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvV2ViRnJhbWVUZXN0LmNwcApAQCAtNzMs
MTIgKzczLDEyIEBAIHB1YmxpYzoKIAogICAgIHZvaWQgcmVnaXN0ZXJNb2NrZWRIdHRwVVJMTG9h
ZChjb25zdCBzdGQ6OnN0cmluZyYgZmlsZU5hbWUpCiAgICAgewotICAgICAgICBGcmFtZVRlc3RI
ZWxwZXJzOjpyZWdpc3Rlck1vY2tlZFVSTExvYWQobV9iYXNlVVJMLCBmaWxlTmFtZSk7CisgICAg
ICAgIEZyYW1lVGVzdEhlbHBlcnM6OnJlZ2lzdGVyTW9ja2VkVVJMTG9hZEFzSFRNTChtX2Jhc2VV
UkwsIGZpbGVOYW1lKTsKICAgICB9CiAKICAgICB2b2lkIHJlZ2lzdGVyTW9ja2VkQ2hyb21lVVJM
TG9hZChjb25zdCBzdGQ6OnN0cmluZyYgZmlsZU5hbWUpCiAgICAgewotICAgICAgICBGcmFtZVRl
c3RIZWxwZXJzOjpyZWdpc3Rlck1vY2tlZFVSTExvYWQobV9jaHJvbWVVUkwsIGZpbGVOYW1lKTsK
KyAgICAgICAgRnJhbWVUZXN0SGVscGVyczo6cmVnaXN0ZXJNb2NrZWRVUkxMb2FkQXNIVE1MKG1f
Y2hyb21lVVJMLCBmaWxlTmFtZSk7CiAgICAgfQogCiBwcm90ZWN0ZWQ6CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1dlYlZpZXdUZXN0LmNwcCBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vdGVzdHMvV2ViVmlld1Rlc3QuY3BwCmluZGV4IGY4NThmZTdiNTgxZTdiMTgz
YzRiNGJkNWEzMzcyNzRiZTA2MTljNTkuLmE2YzllMDRjNWU0N2MwZDk3NTUyY2VjODc2NDczNTAw
NzY0NTZlZTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvV2ViVmll
d1Rlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvV2ViVmlld1Rlc3Qu
Y3BwCkBAIC0xMTcsNyArMTE3LDcgQEAgcHJvdGVjdGVkOgogCiBURVNUX0YoV2ViVmlld1Rlc3Qs
IEZvY3VzSXNJbmFjdGl2ZSkKIHsKLSAgICBGcmFtZVRlc3RIZWxwZXJzOjpyZWdpc3Rlck1vY2tl
ZFVSTExvYWQobV9iYXNlVVJMLCAidmlzaWJsZV9pZnJhbWUuaHRtbCIpOworICAgIEZyYW1lVGVz
dEhlbHBlcnM6OnJlZ2lzdGVyTW9ja2VkVVJMTG9hZEFzSFRNTChtX2Jhc2VVUkwsICJ2aXNpYmxl
X2lmcmFtZS5odG1sIik7CiAgICAgV2ViVmlldyogd2ViVmlldyA9IEZyYW1lVGVzdEhlbHBlcnM6
OmNyZWF0ZVdlYlZpZXdBbmRMb2FkKG1fYmFzZVVSTCArICJ2aXNpYmxlX2lmcmFtZS5odG1sIik7
CiAKICAgICB3ZWJWaWV3LT5zZXRGb2N1cyh0cnVlKTsKQEAgLTE0NSw3ICsxNDUsNyBAQCBURVNU
X0YoV2ViVmlld1Rlc3QsIEZvY3VzSXNJbmFjdGl2ZSkKIAogVEVTVF9GKFdlYlZpZXdUZXN0LCBB
Y3RpdmVTdGF0ZSkKIHsKLSAgICBGcmFtZVRlc3RIZWxwZXJzOjpyZWdpc3Rlck1vY2tlZFVSTExv
YWQobV9iYXNlVVJMLCAidmlzaWJsZV9pZnJhbWUuaHRtbCIpOworICAgIEZyYW1lVGVzdEhlbHBl
cnM6OnJlZ2lzdGVyTW9ja2VkVVJMTG9hZEFzSFRNTChtX2Jhc2VVUkwsICJ2aXNpYmxlX2lmcmFt
ZS5odG1sIik7CiAgICAgV2ViVmlldyogd2ViVmlldyA9IEZyYW1lVGVzdEhlbHBlcnM6OmNyZWF0
ZVdlYlZpZXdBbmRMb2FkKG1fYmFzZVVSTCArICJ2aXNpYmxlX2lmcmFtZS5odG1sIik7CiAKICAg
ICBBU1NFUlRfVFJVRSh3ZWJWaWV3KTsKQEAgLTE2OSw3ICsxNjksNyBAQCB2b2lkIFdlYlZpZXdU
ZXN0Ojp0ZXN0QXV0b1Jlc2l6ZShjb25zdCBXZWJTaXplJiBtaW5BdXRvUmVzaXplLCBjb25zdCBX
ZWJTaXplJiBtYQogewogICAgIEF1dG9SZXNpemVXZWJWaWV3Q2xpZW50IGNsaWVudDsKICAgICBz
dGQ6OnN0cmluZyB1cmwgPSBtX2Jhc2VVUkwgKyAic3BlY2lmeV9zaXplLmh0bWw/IiArIHBhZ2VX
aWR0aCArICI6IiArIHBhZ2VIZWlnaHQ7Ci0gICAgRnJhbWVUZXN0SGVscGVyczo6cmVnaXN0ZXJN
b2NrZWRVUkxMb2FkKEdVUkwodXJsKSwgInNwZWNpZnlfc2l6ZS5odG1sIik7CisgICAgRnJhbWVU
ZXN0SGVscGVyczo6cmVnaXN0ZXJNb2NrZWRVUkxMb2FkQXNIVE1MKEdVUkwodXJsKSwgInNwZWNp
Znlfc2l6ZS5odG1sIik7CiAgICAgV2ViVmlldyogd2ViVmlldyA9IEZyYW1lVGVzdEhlbHBlcnM6
OmNyZWF0ZVdlYlZpZXdBbmRMb2FkKHVybCwgdHJ1ZSwgMCwgJmNsaWVudCk7CiAgICAgY2xpZW50
LnRlc3REYXRhKCkuc2V0V2ViVmlldyh3ZWJWaWV3KTsKIApAQCAtMjY4LDcgKzI2OCw3IEBAIFRF
U1RfRihXZWJWaWV3VGVzdCwgQXV0b1Jlc2l6ZU1heFNpemUpCiAKIHZvaWQgV2ViVmlld1Rlc3Q6
OnRlc3RUZXh0SW5wdXRUeXBlKFdlYlRleHRJbnB1dFR5cGUgZXhwZWN0ZWRUeXBlLCBjb25zdCBz
dGQ6OnN0cmluZyYgaHRtbEZpbGUpCiB7Ci0gICAgRnJhbWVUZXN0SGVscGVyczo6cmVnaXN0ZXJN
b2NrZWRVUkxMb2FkKG1fYmFzZVVSTCwgaHRtbEZpbGUpOworICAgIEZyYW1lVGVzdEhlbHBlcnM6
OnJlZ2lzdGVyTW9ja2VkVVJMTG9hZEFzSFRNTChtX2Jhc2VVUkwsIGh0bWxGaWxlKTsKICAgICBX
ZWJWaWV3KiB3ZWJWaWV3ID0gRnJhbWVUZXN0SGVscGVyczo6Y3JlYXRlV2ViVmlld0FuZExvYWQo
bV9iYXNlVVJMICsgaHRtbEZpbGUpOwogICAgIHdlYlZpZXctPnNldEluaXRpYWxGb2N1cyhmYWxz
ZSk7CiAgICAgRVhQRUNUX0VRKGV4cGVjdGVkVHlwZSwgd2ViVmlldy0+dGV4dElucHV0VHlwZSgp
KTsKQEAgLTMwOCw3ICszMDgsNyBAQCBURVNUX0YoV2ViVmlld1Rlc3QsIERJU0FCTEVEX1RleHRJ
bnB1dFR5cGUpCiAKIFRFU1RfRihXZWJWaWV3VGVzdCwgU2V0RWRpdGFibGVTZWxlY3Rpb25PZmZz
ZXRzKQogewotICAgIEZyYW1lVGVzdEhlbHBlcnM6OnJlZ2lzdGVyTW9ja2VkVVJMTG9hZChtX2Jh
c2VVUkwsICJpbnB1dF9maWVsZF9wb3B1bGF0ZWQuaHRtbCIpOworICAgIEZyYW1lVGVzdEhlbHBl
cnM6OnJlZ2lzdGVyTW9ja2VkVVJMTG9hZEFzSFRNTChtX2Jhc2VVUkwsICJpbnB1dF9maWVsZF9w
b3B1bGF0ZWQuaHRtbCIpOwogICAgIFdlYlZpZXcqIHdlYlZpZXcgPSBGcmFtZVRlc3RIZWxwZXJz
OjpjcmVhdGVXZWJWaWV3QW5kTG9hZChtX2Jhc2VVUkwgKyAiaW5wdXRfZmllbGRfcG9wdWxhdGVk
Lmh0bWwiKTsKICAgICB3ZWJWaWV3LT5zZXRJbml0aWFsRm9jdXMoZmFsc2UpOwogICAgIHdlYlZp
ZXctPnNldEVkaXRhYmxlU2VsZWN0aW9uT2Zmc2V0cyg1LCAxMyk7CkBAIC0zMTYsNyArMzE2LDcg
QEAgVEVTVF9GKFdlYlZpZXdUZXN0LCBTZXRFZGl0YWJsZVNlbGVjdGlvbk9mZnNldHMpCiAgICAg
RVhQRUNUX0VRKCI1Njc4OWFiYyIsIGZyYW1lLT5zZWxlY3Rpb25Bc1RleHQoKSk7CiAgICAgd2Vi
Vmlldy0+Y2xvc2UoKTsKIAotICAgIEZyYW1lVGVzdEhlbHBlcnM6OnJlZ2lzdGVyTW9ja2VkVVJM
TG9hZChtX2Jhc2VVUkwsICJjb250ZW50X2VkaXRhYmxlX3BvcHVsYXRlZC5odG1sIik7CisgICAg
RnJhbWVUZXN0SGVscGVyczo6cmVnaXN0ZXJNb2NrZWRVUkxMb2FkQXNIVE1MKG1fYmFzZVVSTCwg
ImNvbnRlbnRfZWRpdGFibGVfcG9wdWxhdGVkLmh0bWwiKTsKICAgICB3ZWJWaWV3ID0gRnJhbWVU
ZXN0SGVscGVyczo6Y3JlYXRlV2ViVmlld0FuZExvYWQobV9iYXNlVVJMICsgImNvbnRlbnRfZWRp
dGFibGVfcG9wdWxhdGVkLmh0bWwiKTsKICAgICB3ZWJWaWV3LT5zZXRJbml0aWFsRm9jdXMoZmFs
c2UpOwogICAgIHdlYlZpZXctPnNldEVkaXRhYmxlU2VsZWN0aW9uT2Zmc2V0cyg4LCAxOSk7CkBA
IC0zMjUsNCArMzI1LDQyIEBAIFRFU1RfRihXZWJWaWV3VGVzdCwgU2V0RWRpdGFibGVTZWxlY3Rp
b25PZmZzZXRzKQogICAgIHdlYlZpZXctPmNsb3NlKCk7CiB9CiAKK2NsYXNzIFRlc3RXZWJWaWV3
Q2xpZW50IDogcHVibGljIFdlYlZpZXdDbGllbnQgeworcHVibGljOgorICAgIFRlc3RXZWJWaWV3
Q2xpZW50KCkgOiBtX2RpZFN0YXJ0TG9hZGluZyhmYWxzZSksIG1fZGlkU3RvcExvYWRpbmcoZmFs
c2UpLCBtX2xvYWRQcm9ncmVzcygwKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGlkU3RhcnRMb2Fk
aW5nKCkgeyBtX2RpZFN0YXJ0TG9hZGluZyA9IHRydWU7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGlk
U3RvcExvYWRpbmcoKSB7IG1fZGlkU3RvcExvYWRpbmcgPSB0cnVlOyB9CisgICAgdmlydHVhbCB2
b2lkIGRpZENoYW5nZUxvYWRQcm9ncmVzcyhXZWJGcmFtZSosIGRvdWJsZSBsb2FkUHJvZ3Jlc3Mp
IHsgbV9sb2FkUHJvZ3Jlc3MgPSBsb2FkUHJvZ3Jlc3M7IH0KKworICAgIGJvb2wgbG9hZGluZ1N0
YXJ0ZWQoKSBjb25zdCB7IHJldHVybiBtX2RpZFN0YXJ0TG9hZGluZzsgfQorICAgIGJvb2wgbG9h
ZGluZ1N0b3BwZWQoKSBjb25zdCB7IHJldHVybiBtX2RpZFN0b3BMb2FkaW5nOyB9CisgICAgZG91
YmxlIGxvYWRQcm9ncmVzcygpIGNvbnN0IHsgcmV0dXJuIG1fbG9hZFByb2dyZXNzOyB9CisKK3By
aXZhdGU6CisgICAgYm9vbCBtX2RpZFN0YXJ0TG9hZGluZzsKKyAgICBib29sIG1fZGlkU3RvcExv
YWRpbmc7CisgICAgZG91YmxlIG1fbG9hZFByb2dyZXNzOworfTsKKworVEVTVF9GKFdlYlZpZXdU
ZXN0LCBNSFRNTFdpdGhNaXNzaW5nUmVzb3VyY2VGaW5pc2hlc0xvYWRpbmcpCit7CisgICAgVGVz
dFdlYlZpZXdDbGllbnQgd2ViVmlld0NsaWVudDsKKworICAgIHN0ZDo6c3RyaW5nIGZpbGVOYW1l
ID0gInBhZ2Vfd2l0aF9pbWFnZS5taHQiOworICAgIHN0ZDo6c3RyaW5nIGZpbGVEaXIgPSB3ZWJr
aXRfc3VwcG9ydDo6R2V0V2ViS2l0Um9vdERpcigpLnV0ZjgoKTsKKyAgICBmaWxlRGlyLmFwcGVu
ZCgiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS8iKTsKKyAgICAvLyBNYWtpbmcg
ZmlsZSBsb2FkaW5nIHdvcmtzIGluIHVuaXQtdGVzdHMgd291bGQgcmVxdWlyZSBzb21lIGFkZGl0
aW9uYWwgd29yay4KKyAgICAvLyBNb2NraW5nIHRoZW0gYXMgcmVndWxhciBVUkxzIHdvcmtzIGZp
bmUgaW4gdGhlIG1lYW50aW1lLgorICAgIEZyYW1lVGVzdEhlbHBlcnM6OnJlZ2lzdGVyTW9ja2Vk
VVJMTG9hZCgiZmlsZTovLyIgKyBmaWxlRGlyLCBmaWxlTmFtZSwgIm11bHRpcGFydC9yZWxhdGVk
Iik7CisgICAgV2ViVmlldyogd2ViVmlldyA9IEZyYW1lVGVzdEhlbHBlcnM6OmNyZWF0ZVdlYlZp
ZXdBbmRMb2FkKCJmaWxlOi8vIiArIGZpbGVEaXIgKyBmaWxlTmFtZSwgdHJ1ZSwgMCwgJndlYlZp
ZXdDbGllbnQpOworICAgIHdlYmtpdF9zdXBwb3J0OjpSdW5BbGxQZW5kaW5nTWVzc2FnZXMoKTsK
KworICAgIEVYUEVDVF9UUlVFKHdlYlZpZXdDbGllbnQubG9hZGluZ1N0YXJ0ZWQoKSk7CisgICAg
RVhQRUNUX1RSVUUod2ViVmlld0NsaWVudC5sb2FkaW5nU3RvcHBlZCgpKTsKKyAgICBFWFBFQ1Rf
RVEoMS4wLCB3ZWJWaWV3Q2xpZW50LmxvYWRQcm9ncmVzcygpKTsKKworICAgIC8vIENsb3NlIHRo
ZSBXZWJWaWV3IGFmdGVyIGNoZWNraW5nIHRoZSBsb2FkaW5nIHN0YXRlIGFuZCBwcm9ncmVzcywg
YXMgdGhlIGNsb3NlKCkgY2FsbCB0cmlnZ2VycyBhIHN0b3AgbG9hZGluZyBjYWxsYmFjay4KKyAg
ICB3ZWJWaWV3LT5jbG9zZSgpOworfQorCiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>151641</attachid>
            <date>2012-07-11 01:28:57 -0700</date>
            <delta_ts>2012-07-31 00:50:43 -0700</delta_ts>
            <desc>Patch 5 - Code Complete</desc>
            <filename>bug-88970-20120711172855.patch</filename>
            <type>text/plain</type>
            <size>61235</size>
            <attacher>yosin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIyMzAzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzkzZTg1NGVlMTU5Yzll
OWNlZTQ5OTQ1NDk0MjliMTI2MGIyMzMzZS4uY2MxM2ViMzc4MDVhODhkMTAyZTRkMzc5OGYwYjcz
MDJkNmI4ODY5NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0MSBAQAorMjAxMi0wNy0xMSAgWW9z
aGlmdW1pIElub3VlICA8eW9zaW5AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtGb3JtXSBUaW1l
IGlucHV0IGZpZWxkcyBVSQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9ODg5NzAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBUaGlzIHBhdGNoIGludHJvZHVjZXMgbXVsdGlwbGUgZmllbGRzIFVJIGZvciBpbnB1
dCB0eXBlICJ0aW1lIiB3aXRoCisgICAgICAgIGZlYXR1cmUgZmxhZyBFTkFCTEVfSU5QVVRfVFlQ
RV9USU1FX01VTFRJUExFX0ZJRUxEUy4KKworICAgICAgICBObyBuZXcgdGVzdHMgKE9PUFMhKS4K
KworICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBjc3MvaHRtbC5jc3M6CisgICAg
ICAgIChpbnB1dDo6LXdlYmtpdC1kYXRldGltZS1lZGl0KToKKyAgICAgICAgKGlucHV0Ojotd2Vi
a2l0LWRhdGV0aW1lLWVkaXQtc2Vjb25kLWZpZWxkOmZvY3VzKToKKyAgICAgICAgKGlucHV0Ojot
d2Via2l0LWRhdGV0aW1lLWVkaXQtbWludXRlLWZpZWxkW2Rpc2FibGVkXSk6CisgICAgICAgIChp
bnB1dDo6LXdlYmtpdC1kYXRldGltZS1lZGl0LWhvdXItZmllbGQpOgorICAgICAgICAoaW5wdXQ6
Oi13ZWJraXQtZGF0ZXRpbWUtZWRpdC1taWxsaXNlY29uZC1maWVsZCk6CisgICAgICAgIChpbnB1
dDo6LXdlYmtpdC1kYXRldGltZS1lZGl0LW1pbnV0ZS1maWVsZCk6CisgICAgICAgIChpbnB1dDo6
LXdlYmtpdC1kYXRldGltZS1lZGl0LW5vb24tZmllbGQpOgorICAgICAgICAoaW5wdXQ6Oi13ZWJr
aXQtZGF0ZXRpbWUtZWRpdC1zZWNvbmQtZmllbGQpOgorICAgICAgICAqIGh0bWwvSFRNTElucHV0
RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50OjpwYXJzZUF0
dHJpYnV0ZSk6CisgICAgICAgICogaHRtbC9JbnB1dFR5cGUuaDoKKyAgICAgICAgKElucHV0VHlw
ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnB1dFR5cGU6OnN0ZXBSYW5nZUNoYW5nZWQpOgorICAg
ICAgICAqIGh0bWwvVGltZUlucHV0VHlwZS5jcHA6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlRpbWVJbnB1dFR5cGU6On5UaW1lSW5wdXRUeXBlKToKKyAgICAgICAgKFdl
YkNvcmU6OlRpbWVJbnB1dFR5cGU6OmVkaXRDb250cm9sVmFsdWVDaGFuZ2VkKToKKyAgICAgICAg
KFdlYkNvcmU6OlRpbWVJbnB1dFR5cGU6OmNyZWF0ZVJlbmRlcmVyKToKKyAgICAgICAgKFdlYkNv
cmU6OlRpbWVJbnB1dFR5cGU6OmNyZWF0ZVNoYWRvd1N1YnRyZWUpOgorICAgICAgICAoV2ViQ29y
ZTo6VGltZUlucHV0VHlwZTo6ZGVzdHJveVNoYWRvd1N1YnRyZWUpOgorICAgICAgICAoV2ViQ29y
ZTo6VGltZUlucHV0VHlwZTo6Zm9yd2FyZEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlRpbWVJ
bnB1dFR5cGU6OmRpc2FibGVkQXR0cmlidXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpU
aW1lSW5wdXRUeXBlOjpoYW5kbGVLZXlkb3duRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6VGlt
ZUlucHV0VHlwZTo6aGFuZGxlRE9NQWN0aXZhdGVFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpU
aW1lSW5wdXRUeXBlOjppc0tleWJvYXJkRm9jdXNhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OlRp
bWVJbnB1dFR5cGU6OmlzTW91c2VGb2N1c2FibGUpOgorICAgICAgICAoV2ViQ29yZTo6VGltZUlu
cHV0VHlwZTo6cmVhZG9ubHlBdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlRp
bWVJbnB1dFR5cGU6OnNldFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlRpbWVJbnB1dFR5cGU6
OnN0ZXBSYW5nZUNoYW5nZWQpOgorICAgICAgICAqIGh0bWwvVGltZUlucHV0VHlwZS5oOgorICAg
ICAgICAoVGltZUlucHV0VHlwZSk6CisgICAgICAgICogaHRtbC9zaGFkb3cvRGF0ZVRpbWVFZGl0
RWxlbWVudC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChEYXRlVGlt
ZUVkaXRMYXlvdXRlcik6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZUVkaXRMYXlvdXRlcjo6
RGF0ZVRpbWVFZGl0TGF5b3V0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVFZGl0TGF5
b3V0ZXI6Om5lZWRTZWNvbmRGaWVsZCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZUVkaXRM
YXlvdXRlcjo6YWRkRmllbGQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVFZGl0TGF5b3V0
ZXI6Om5lZWRNaWxsaXNlY29uZEZpZWxkKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lRWRp
dExheW91dGVyOjpuZWVkTWludXRlRmllbGQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVF
ZGl0TGF5b3V0ZXI6OmJ1aWxkKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lRWRpdExheW91
dGVyOjphZGRNaWxsaXNlY29uZEZpZWxkSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0
ZVRpbWVFZGl0TGF5b3V0ZXI6OnZpc2l0RmllbGQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRp
bWVFZGl0TGF5b3V0ZXI6OnZpc2l0TGl0ZXJhbCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGlt
ZUVkaXRFbGVtZW50OjpEYXRlVGltZUVkaXRFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkRh
dGVUaW1lRWRpdEVsZW1lbnQ6On5EYXRlVGltZUVkaXRFbGVtZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OkRhdGVUaW1lRWRpdEVsZW1lbnQ6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRl
VGltZUVkaXRFbGVtZW50OjpkaXNhYmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZUVk
aXRFbGVtZW50OjpmaWVsZEF0KToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lRWRpdEVsZW1l
bnQ6OmhhbmRsZUtleWJvYXJkRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVFZGl0
RWxlbWVudDo6ZmllbGRWYWx1ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVF
ZGl0RWxlbWVudDo6aGFuZGxlTW91c2VFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGlt
ZUVkaXRFbGVtZW50Ojptb3ZlVG9OZXh0RmllbGQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRp
bWVFZGl0RWxlbWVudDo6bmV4dEZpZWxkSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRp
bWVFZGl0RWxlbWVudDo6cHJldmlvdXNGaWVsZEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkRh
dGVUaW1lRWRpdEVsZW1lbnQ6OnJlYWRPbmx5KToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1l
RWRpdEVsZW1lbnQ6OnJlc2V0TGF5b3V0KToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lRWRp
dEVsZW1lbnQ6OnNldEZvY3VzRmllbGQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVFZGl0
RWxlbWVudDo6c2V0TGF5b3V0KToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lRWRpdEVsZW1l
bnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVFZGl0
RWxlbWVudDo6ZGlzYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZUVkaXRFbGVtZW50
OjpzZXRWYWx1ZUFzRGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZUVkaXRFbGVtZW50
OjpzZXRWYWx1ZUFzRW1wdHkpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVFZGl0RWxlbWVu
dDo6c3BpbkJ1dHRvblN0ZXBEb3duKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lRWRpdEVs
ZW1lbnQ6OnNwaW5CdXR0b25TdGVwVXApOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVFZGl0
RWxlbWVudDo6dmFsdWVBc0RvdWJsZSk6CisgICAgICAgICogaHRtbC9zaGFkb3cvRGF0ZVRpbWVF
ZGl0RWxlbWVudC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoRGF0ZVRp
bWVFZGl0RWxlbWVudCk6CisgICAgICAgIChFZGl0Q29udHJvbEV2ZW50SGFuZGxlcik6CisgICAg
ICAgIChXZWJDb3JlOjpEYXRlVGltZUVkaXRFbGVtZW50OjpFZGl0Q29udHJvbEV2ZW50SGFuZGxl
cjo6fkVkaXRDb250cm9sRXZlbnRIYW5kbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1l
RWRpdEVsZW1lbnQ6OmRpc2FibGVkQXR0cmlidXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3Jl
OjpEYXRlVGltZUVkaXRFbGVtZW50OjpyZWFkb25seUF0dHJpYnV0ZUNoYW5nZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6RGF0ZVRpbWVFZGl0RWxlbWVudDo6cmVtb3ZlRXZlbnRIYW5kbGVyKToKKyAg
ICAgICAgKiBodG1sL3NoYWRvdy9EYXRlVGltZUZpZWxkRWxlbWVudHMuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6ZGlzcGxheVNpemVPZk51bWJlcik6
CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZUZpZWxkRWxlbWVudDo6RGF0ZVRpbWVGaWVsZEVs
ZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVGaWVsZEVsZW1lbnQ6OmRlZmF1bHRF
dmVudEhhbmRsZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVGaWVsZEVsZW1lbnQ6OmRp
c2FibGUpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVGaWVsZEVsZW1lbnQ6OmRpc2FibGVk
KToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lRmllbGRFbGVtZW50Ojp1cGRhdGVWaXNpYmxl
VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVGaWVsZEVsZW1lbnQ6OnZhbHVlQXNE
b3VibGUpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVIb3VyRmllbGRFbGVtZW50OjpEYXRl
VGltZUhvdXJGaWVsZEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVIb3VyRmll
bGRFbGVtZW50OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVIb3VyRmllbGRF
bGVtZW50OjpzZXRWYWx1ZUFzSW50ZWdlcik6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZUhv
dXJGaWVsZEVsZW1lbnQ6OnZhbHVlQXNJbnRlZ2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVU
aW1lTnVtZXJpY0ZpZWxkRWxlbWVudDo6UmFuZ2U6OlJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6
OkRhdGVUaW1lTnVtZXJpY0ZpZWxkRWxlbWVudDo6UmFuZ2U6OmVuc3VyZUluUmFuZ2UpOgorICAg
ICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50OjpEYXRlVGltZU51bWVy
aWNGaWVsZEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVOdW1lcmljRmllbGRF
bGVtZW50OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVOdW1lcmljRmllbGRF
bGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1l
TnVtZXJpY0ZpZWxkRWxlbWVudDo6aXNDb250aW51b3NLZXlib2FyZEV2ZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OkRhdGVUaW1lTnVtZXJpY0ZpZWxkRWxlbWVudDo6c2V0VmFsdWVBc0VtcHR5KToK
KyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lTnVtZXJpY0ZpZWxkRWxlbWVudDo6c2V0VmFsdWVB
c0ludGVnZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50
OjpzdGVwRG93bik6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1l
bnQ6OnN0ZXBVcCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1l
bnQ6OnZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lTnVtZXJpY0ZpZWxkRWxlbWVu
dDo6dmFsdWVBc0ludGVnZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVOdW1lcmljRmll
bGRFbGVtZW50Ojp2aXNpYmxlVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVTeW1i
b2xpY0ZpZWxkRWxlbWVudDo6RGF0ZVRpbWVTeW1ib2xpY0ZpZWxkRWxlbWVudCk6CisgICAgICAg
IChXZWJDb3JlOjpEYXRlVGltZVN5bWJvbGljRmllbGRFbGVtZW50OjpjcmVhdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6RGF0ZVRpbWVTeW1ib2xpY0ZpZWxkRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFu
ZGxlcik6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZVN5bWJvbGljRmllbGRFbGVtZW50Ojpz
ZXRWYWx1ZUFzRW1wdHkpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVTeW1ib2xpY0ZpZWxk
RWxlbWVudDo6c2V0VmFsdWVBc0ludGVnZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVT
eW1ib2xpY0ZpZWxkRWxlbWVudDo6c3RlcERvd24pOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRp
bWVTeW1ib2xpY0ZpZWxkRWxlbWVudDo6c3RlcFVwKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVU
aW1lU3ltYm9saWNGaWVsZEVsZW1lbnQ6OnZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVU
aW1lU3ltYm9saWNGaWVsZEVsZW1lbnQ6OnZhbHVlQXNJbnRlZ2VyKToKKyAgICAgICAgKFdlYkNv
cmU6OkRhdGVUaW1lU3ltYm9saWNGaWVsZEVsZW1lbnQ6OnZpc2libGVWYWx1ZSk6CisgICAgICAg
ICogaHRtbC9zaGFkb3cvRGF0ZVRpbWVGaWVsZEVsZW1lbnRzLmg6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZSk6CisgICAgICAgIChEYXRlVGltZUZpZWxkRWxlbWVudCk6CisgICAgICAgIChGaWVs
ZEV2ZW50SGFuZGxlcik6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZUZpZWxkRWxlbWVudDo6
RmllbGRFdmVudEhhbmRsZXI6On5GaWVsZEV2ZW50SGFuZGxlcik6CisgICAgICAgIChXZWJDb3Jl
OjpEYXRlVGltZUZpZWxkRWxlbWVudDo6cmVtb3ZlRXZlbnRIYW5kbGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OkRhdGVUaW1lRmllbGRFbGVtZW50Ojp1bml0SW5NaWxsaXNlY29uZCk6CisgICAgICAg
IChEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQpOgorICAgICAgICAoUmFuZ2UpOgorICAgICAg
ICAoV2ViQ29yZTo6RGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50OjplbnN1cmVJblJhbmdlKToK
KyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lTnVtZXJpY0ZpZWxkRWxlbWVudDo6cmFuZ2UpOgor
ICAgICAgICAoRGF0ZVRpbWVIb3VyRmllbGRFbGVtZW50KToKKyAgICAgICAgKERhdGVUaW1lU3lt
Ym9saWNGaWVsZEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVTeW1ib2xpY0Zp
ZWxkRWxlbWVudDo6aGFzVmFsdWUpOgorCiAyMDEyLTA3LTEwICBZb3NoaWZ1bWkgSW5vdWUgIDx5
b3NpbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW0Nocm9taXVtLVdpbmRvd3NdIEltcGxlbWVu
dCBmdW5jdGlvbnMgZm9yIGxvY2FsaXplZCB0aW1lIGZvcm1hdCBpbmZvcm1hdGlvbgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS5neXBpCmluZGV4IGNmYjgyYTE2NzJkNGExYTMyNjNjNTNhZDJmNDIzNTc4NDc4MmU0YzguLjhj
MzFlMDRiMWExNzBhYjE3MjFkYTc0NDdlNjhlNTI3MmZmZDY2MWYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkK
QEAgLTU2OTksNiArNTY5OSwxMCBAQAogICAgICAgICAgICAgJ2h0bWwvc2hhZG93L0NvbnRlbnRE
aXN0cmlidXRvci5oJywKICAgICAgICAgICAgICdodG1sL3NoYWRvdy9Db250ZW50U2VsZWN0b3JR
dWVyeS5jcHAnLAogICAgICAgICAgICAgJ2h0bWwvc2hhZG93L0NvbnRlbnRTZWxlY3RvclF1ZXJ5
LmgnLAorICAgICAgICAgICAgJ2h0bWwvc2hhZG93L0RhdGVUaW1lRWRpdEVsZW1lbnQuY3BwJywK
KyAgICAgICAgICAgICdodG1sL3NoYWRvdy9EYXRlVGltZUVkaXRFbGVtZW50LmgnLAorICAgICAg
ICAgICAgJ2h0bWwvc2hhZG93L0RhdGVUaW1lRmllbGRFbGVtZW50cy5jcHAnLAorICAgICAgICAg
ICAgJ2h0bWwvc2hhZG93L0RhdGVUaW1lRmllbGRFbGVtZW50cy5oJywKICAgICAgICAgICAgICdo
dG1sL3NoYWRvdy9EZXRhaWxzTWFya2VyQ29udHJvbC5jcHAnLAogICAgICAgICAgICAgJ2h0bWwv
c2hhZG93L0RldGFpbHNNYXJrZXJDb250cm9sLmgnLAogICAgICAgICAgICAgJ2h0bWwvc2hhZG93
L0hUTUxDb250ZW50RWxlbWVudC5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3Nz
L2h0bWwuY3NzIGIvU291cmNlL1dlYkNvcmUvY3NzL2h0bWwuY3NzCmluZGV4IDE3NjlkNDlmMTk0
YzU1ZmJmMjQ2MzhkN2I4ZWEwYmZjMzY2NzgxZWEuLjFjYzU4ODVlOTM0N2YyNDg0NTAxOGE1MTE2
NDA3ZWE2OWUyOTM3MzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9odG1sLmNzcwor
KysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvaHRtbC5jc3MKQEAgLTQ1OCw2ICs0NTgsNjYgQEAgZGF0
YWxpc3QgewogfQogI2VuZGlmCiAKKworI2lmIGRlZmluZWQoRU5BQkxFX0lOUFVUX1RZUEVfVElN
RV9NVUxUSVBMRV9GSUVMRFMpICYmIEVOQUJMRV9JTlBVVF9UWVBFX1RJTUVfTVVMVElQTEVfRklF
TERTCitpbnB1dDo6LXdlYmtpdC1kYXRldGltZS1lZGl0IHsKKyAgICBkaXNwbGF5OiAtd2Via2l0
LWJveDsKKyAgICAtd2Via2l0LWJveC1hbGlnbjogY2VudGVyOworfQorCisjaWYgMAoraW5wdXQ6
Oi13ZWJraXQtZGF0ZXRpbWUtZWRpdC1ob3VyLWZpZWxkOmZvY3VzLAoraW5wdXQ6Oi13ZWJraXQt
ZGF0ZXRpbWUtZWRpdC1taWxsaXNlY29uZC1maWVsZDpmb2N1cywKK2lucHV0Ojotd2Via2l0LWRh
dGV0aW1lLWVkaXQtbWludXRlLWZpZWxkOmZvY3VzLAoraW5wdXQ6Oi13ZWJraXQtZGF0ZXRpbWUt
ZWRpdC1ub29uLWZpZWxkOmZvY3VzLAoraW5wdXQ6Oi13ZWJraXQtZGF0ZXRpbWUtZWRpdC1zZWNv
bmQtZmllbGQ6Zm9jdXMgeworICAgIGNvbG9yOiB3aGl0ZTsKKyAgICBiYWNrZ3JvdW5kOiAjMzI5
N2ZkOworfQorI2VuZGlmCisKK2lucHV0Ojotd2Via2l0LWRhdGV0aW1lLWVkaXQtbWludXRlLWZp
ZWxkW2Rpc2FibGVkXSB7CisgICAgY29sb3I6IEdyYXlUZXh0OworfQorCitpbnB1dDo6LXdlYmtp
dC1kYXRldGltZS1lZGl0LWhvdXItZmllbGQgeworICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsK
KyAgICBib3JkZXI6IG5vbmU7CisgICAgdGV4dC1hbGlnbjogcmlnaHQ7CisgICAgd2lkdGg6IDFl
bTsKKyAgICBwYWRkaW5nOiAycHg7Cit9CisKK2lucHV0Ojotd2Via2l0LWRhdGV0aW1lLWVkaXQt
bWlsbGlzZWNvbmQtZmllbGQgeworICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKKyAgICBib3Jk
ZXI6IG5vbmU7CisgICAgdGV4dC1hbGlnbjogcmlnaHQ7CisgICAgd2lkdGg6IDEuNWVtOworICAg
IHBhZGRpbmc6IDJweDsKK30KKworaW5wdXQ6Oi13ZWJraXQtZGF0ZXRpbWUtZWRpdC1taW51dGUt
ZmllbGQgeworICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKKyAgICBib3JkZXI6IG5vbmU7Cisg
ICAgdGV4dC1hbGlnbjogcmlnaHQ7CisgICAgd2lkdGg6IDFlbTsKKyAgICBwYWRkaW5nOiAycHg7
Cit9CisKK2lucHV0Ojotd2Via2l0LWRhdGV0aW1lLWVkaXQtbm9vbi1maWVsZCB7CisgICAgYm9y
ZGVyOiBub25lOworICAgIHBhZGRpbmc6IDJweDsKK30KKworaW5wdXQ6Oi13ZWJraXQtZGF0ZXRp
bWUtZWRpdC1zZWNvbmQtZmllbGQgeworICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKKyAgICBi
b3JkZXI6IG5vbmU7CisgICAgdGV4dC1hbGlnbjogcmlnaHQ7CisgICAgd2lkdGg6IDFlbTsKKyAg
ICBwYWRkaW5nOiAycHg7Cit9CisjZW5kaWYKKwogaW5wdXQ6Oi13ZWJraXQtaW5uZXItc3Bpbi1i
dXR0b24gewogICAgIC13ZWJraXQtYXBwZWFyYW5jZTogaW5uZXItc3Bpbi1idXR0b247CiAgICAg
ZGlzcGxheTogYmxvY2s7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1
dEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcApp
bmRleCBhMTJiYTc4NDk1YjdlMDQ5NTZhZmU3NzQ1YTkyZTAzNTk1NjdiZjA0Li4yMWJhNGJiODQ0
NjA3YzM1ZDYyOGYwYWNkNDU0ZDExN2YwNTA0OTI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TElucHV0RWxlbWVudC5jcHAKQEAgLTY5NSw2ICs2OTUsMTAgQEAgdm9pZCBIVE1MSW5wdXRFbGVt
ZW50OjpwYXJzZUF0dHJpYnV0ZShjb25zdCBBdHRyaWJ1dGUmIGF0dHJpYnV0ZSkKICAgICB9IGVs
c2UgaWYgKGF0dHJpYnV0ZS5uYW1lKCkgPT0gb253ZWJraXRzcGVlY2hjaGFuZ2VBdHRyKQogICAg
ICAgICBzZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS53ZWJraXRzcGVlY2hj
aGFuZ2VFdmVudCwgY3JlYXRlQXR0cmlidXRlRXZlbnRMaXN0ZW5lcih0aGlzLCBhdHRyaWJ1dGUp
KTsKICNlbmRpZgorI2lmIEVOQUJMRShJTlBVVF9UWVBFX1RJTUVfTVVMVElQTEVfRklFTERTKQor
ICAgIGlmIChhdHRyaWJ1dGUubmFtZSgpID09IG1heEF0dHIgfHwgYXR0cmlidXRlLm5hbWUoKSA9
PSBtaW5BdHRyIHx8IGF0dHJpYnV0ZS5uYW1lKCkgPT0gc3RlcEF0dHIpCisgICAgICAgIG1faW5w
dXRUeXBlLT5zdGVwUmFuZ2VDaGFuZ2VkKCk7CisjZW5kaWYKICAgICBlbHNlCiAgICAgICAgIEhU
TUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZShhdHRyaWJ1dGUpOwogICAg
IHVwZGF0ZUlubmVyVGV4dFZhbHVlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L0lucHV0VHlwZS5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9JbnB1dFR5cGUuaAppbmRleCBmYTQx
ZmY4NTcwMDExZWY0YzA0MWQ2YzAzYWE4ZmZmMGUxNDg4NDI3Li5hZDFjYWYwNmRiZThhMzU5NmFk
NTQ0YTFhZDU4OGZlY2MzZjcxNzJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0lu
cHV0VHlwZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSW5wdXRUeXBlLmgKQEAgLTI5OSw2
ICsyOTksMTAgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdW5zaWduZWQgaGVpZ2h0KCkgY29uc3Q7
CiAgICAgdmlydHVhbCB1bnNpZ25lZCB3aWR0aCgpIGNvbnN0OwogCisjaWYgRU5BQkxFKElOUFVU
X1RZUEVfVElNRV9NVUxUSVBMRV9GSUVMRFMpCisgICAgdmlydHVhbCB2b2lkIHN0ZXBSYW5nZUNo
YW5nZWQoKSB7IH0KKyNlbmRpZgorCiBwcm90ZWN0ZWQ6CiAgICAgSW5wdXRUeXBlKEhUTUxJbnB1
dEVsZW1lbnQqIGVsZW1lbnQpIDogbV9lbGVtZW50KGVsZW1lbnQpIHsgfQogICAgIEhUTUxJbnB1
dEVsZW1lbnQqIGVsZW1lbnQoKSBjb25zdCB7IHJldHVybiBtX2VsZW1lbnQ7IH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvVGltZUlucHV0VHlwZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL1RpbWVJbnB1dFR5cGUuY3BwCmluZGV4IDA1MmI4ODc1NjE3M2VjYTkyOTkyZWE1OTk3
YWJkNTk2MjE3NzI1OGUuLjI0MjU3ZmQ5MWM1NTkwOGQzODYwMGU2NTg3YTg5MWEyNDE4MGFkM2Eg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvVGltZUlucHV0VHlwZS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9UaW1lSW5wdXRUeXBlLmNwcApAQCAtNDEsNiArNDEsMTUgQEAK
IAogI2lmIEVOQUJMRShJTlBVVF9UWVBFX1RJTUUpCiAKKyNpZiBFTkFCTEUoSU5QVVRfVFlQRV9U
SU1FX01VTFRJUExFX0ZJRUxEUykKKyNpbmNsdWRlICJDaHJvbWUuaCIKKyNpbmNsdWRlICJDaHJv
bWVDbGllbnQuaCIKKyNpbmNsdWRlICJFbGVtZW50U2hhZG93LmgiCisjaW5jbHVkZSAiS2V5Ym9h
cmRFdmVudC5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJTaGFkb3dSb290LmgiCisj
ZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVz
OwpAQCAtMTA4LDYgKzExNywxMTcgQEAgYm9vbCBUaW1lSW5wdXRUeXBlOjppc1RpbWVGaWVsZCgp
IGNvbnN0CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKKyNpZiBFTkFCTEUoSU5QVVRfVFlQRV9USU1F
X01VTFRJUExFX0ZJRUxEUykKKworVGltZUlucHV0VHlwZTo6flRpbWVJbnB1dFR5cGUoKQorewor
ICAgIGlmIChtX2RhdGVUaW1lRWRpdEVsZW1lbnQpCisgICAgICAgIG1fZGF0ZVRpbWVFZGl0RWxl
bWVudC0+cmVtb3ZlRXZlbnRIYW5kbGVyKCk7Cit9CisKK3ZvaWQgVGltZUlucHV0VHlwZTo6ZWRp
dENvbnRyb2xWYWx1ZUNoYW5nZWQoKQoreworICAgIFJlZlB0cjxIVE1MSW5wdXRFbGVtZW50PiBp
bnB1dChlbGVtZW50KCkpOworICAgIEV4Y2VwdGlvbkNvZGUgZWM7CisgICAgSW5wdXRUeXBlOjpz
ZXRWYWx1ZUFzRG91YmxlKG1fZGF0ZVRpbWVFZGl0RWxlbWVudC0+dmFsdWVBc0RvdWJsZSgpLCBE
aXNwYXRjaE5vRXZlbnQsIGVjKTsKKyAgICBpbnB1dC0+ZGlzcGF0Y2hGb3JtQ29udHJvbElucHV0
RXZlbnQoKTsKKyAgICBpbnB1dC0+ZGlzcGF0Y2hGb3JtQ29udHJvbENoYW5nZUV2ZW50KCk7Cit9
CisKK1JlbmRlck9iamVjdCogVGltZUlucHV0VHlwZTo6Y3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJl
bmEqIGFyZW5hLCBSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0Cit7CisgICAgcmV0dXJuIElucHV0
VHlwZTo6Y3JlYXRlUmVuZGVyZXIoYXJlbmEsIHN0eWxlKTsKK30KKwordm9pZCBUaW1lSW5wdXRU
eXBlOjpjcmVhdGVTaGFkb3dTdWJ0cmVlKCkKK3sKKyAgICBBU1NFUlQoZWxlbWVudCgpLT5zaGFk
b3coKSk7CisKKyAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBlbGVtZW50KCktPmRvY3VtZW50KCk7
CisgICAgbV9kYXRlVGltZUVkaXRFbGVtZW50ID0gRGF0ZVRpbWVFZGl0RWxlbWVudDo6Y3JlYXRl
KGRvY3VtZW50LCAqdGhpcywgY3JlYXRlU3RlcFJhbmdlKEFueUlzRGVmYXVsdFN0ZXApKTsKKyAg
ICBlbGVtZW50KCktPnNoYWRvdygpLT5vbGRlc3RTaGFkb3dSb290KCktPmFwcGVuZENoaWxkKG1f
ZGF0ZVRpbWVFZGl0RWxlbWVudCk7CisKKyAgICBDaHJvbWVDbGllbnQqIGNocm9tZUNsaWVudCA9
IGRvY3VtZW50LT5wYWdlKCkgPyBkb2N1bWVudC0+cGFnZSgpLT5jaHJvbWUoKS0+Y2xpZW50KCkg
OiAwOworICAgIGJvb2wgc2hvdWxkQWRkRGVjb3JhdGlvbnMgPSBjaHJvbWVDbGllbnQgJiYgY2hy
b21lQ2xpZW50LT53aWxsQWRkVGV4dEZpZWxkRGVjb3JhdGlvbnNUbyhlbGVtZW50KCkpOworCisg
ICAgaWYgKHNob3VsZEFkZERlY29yYXRpb25zKQorICAgICAgICBjaHJvbWVDbGllbnQtPmFkZFRl
eHRGaWVsZERlY29yYXRpb25zVG8oZWxlbWVudCgpKTsKKworICAgIERhdGVDb21wb25lbnRzIGRh
dGU7CisgICAgaWYgKHBhcnNlVG9EYXRlQ29tcG9uZW50cyhlbGVtZW50KCktPnZhbHVlKCksICZk
YXRlKSkKKyAgICAgICAgbV9kYXRlVGltZUVkaXRFbGVtZW50LT5zZXRWYWx1ZUFzRGF0ZShkYXRl
KTsKK30KKwordm9pZCBUaW1lSW5wdXRUeXBlOjpkZXN0cm95U2hhZG93U3VidHJlZSgpCit7Cisg
ICAgbV9kYXRlVGltZUVkaXRFbGVtZW50LT5yZW1vdmVFdmVudEhhbmRsZXIoKTsKKyAgICBtX2Rh
dGVUaW1lRWRpdEVsZW1lbnQuY2xlYXIoKTsKK30KKwordm9pZCBUaW1lSW5wdXRUeXBlOjpmb3J3
YXJkRXZlbnQoRXZlbnQqIGV2ZW50KQoreworICAgIGlmIChtX2RhdGVUaW1lRWRpdEVsZW1lbnQp
CisgICAgICAgIG1fZGF0ZVRpbWVFZGl0RWxlbWVudC0+ZGVmYXVsdEV2ZW50SGFuZGxlcihldmVu
dCk7Cit9CisKK3ZvaWQgVGltZUlucHV0VHlwZTo6ZGlzYWJsZWRBdHRyaWJ1dGVDaGFuZ2VkKCkK
K3sKKyAgICBpZiAobV9kYXRlVGltZUVkaXRFbGVtZW50KQorICAgICAgICBtX2RhdGVUaW1lRWRp
dEVsZW1lbnQtPmRpc2FibGVkQXR0cmlidXRlQ2hhbmdlZCgpOworfQorCit2b2lkIFRpbWVJbnB1
dFR5cGU6OmhhbmRsZUtleWRvd25FdmVudChLZXlib2FyZEV2ZW50KiBldmVudCkKK3sKKyAgICBm
b3J3YXJkRXZlbnQoZXZlbnQpOworfQorCit2b2lkIFRpbWVJbnB1dFR5cGU6OmhhbmRsZURPTUFj
dGl2YXRlRXZlbnQoRXZlbnQqIGV2ZW50KQoreworICAgIGlmIChlbGVtZW50KCktPmRpc2FibGVk
KCkgfHwgZWxlbWVudCgpLT5yZWFkT25seSgpIHx8ICFlbGVtZW50KCktPnJlbmRlcmVyKCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIGlmIChtX2RhdGVUaW1lRWRpdEVsZW1lbnQpCisgICAgICAg
IG1fZGF0ZVRpbWVFZGl0RWxlbWVudC0+Zm9jdXMoKTsKKworICAgIGV2ZW50LT5zZXREZWZhdWx0
SGFuZGxlZCgpOworfQorCitib29sIFRpbWVJbnB1dFR5cGU6OmlzS2V5Ym9hcmRGb2N1c2FibGUo
S2V5Ym9hcmRFdmVudCopIGNvbnN0Cit7CisgICAgcmV0dXJuIGVsZW1lbnQoKS0+aXNUZXh0Rm9y
bUNvbnRyb2xGb2N1c2FibGUoKTsKK30KKworYm9vbCBUaW1lSW5wdXRUeXBlOjppc01vdXNlRm9j
dXNhYmxlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZWxlbWVudCgpLT5pc1RleHRGb3JtQ29udHJv
bEZvY3VzYWJsZSgpOworfQorCit2b2lkIFRpbWVJbnB1dFR5cGU6OnJlYWRvbmx5QXR0cmlidXRl
Q2hhbmdlZCgpCit7CisgICAgaWYgKG1fZGF0ZVRpbWVFZGl0RWxlbWVudCkKKyAgICAgICAgbV9k
YXRlVGltZUVkaXRFbGVtZW50LT5yZWFkb25seUF0dHJpYnV0ZUNoYW5nZWQoKTsKK30KKwordm9p
ZCBUaW1lSW5wdXRUeXBlOjpzZXRWYWx1ZShjb25zdCBTdHJpbmcmIHNhbml0aXplZFZhbHVlLCBi
b29sIHZhbHVlQ2hhbmdlZCwgVGV4dEZpZWxkRXZlbnRCZWhhdmlvciBldmVudEJlaGF2aW9yKQor
eworICAgIElucHV0VHlwZTo6c2V0VmFsdWUoc2FuaXRpemVkVmFsdWUsIHZhbHVlQ2hhbmdlZCwg
ZXZlbnRCZWhhdmlvcik7CisgICAgaWYgKHZhbHVlQ2hhbmdlZCAmJiBtX2RhdGVUaW1lRWRpdEVs
ZW1lbnQpIHsKKyAgICAgICAgRGF0ZUNvbXBvbmVudHMgZGF0ZTsKKyAgICAgICAgaWYgKHBhcnNl
VG9EYXRlQ29tcG9uZW50cyhzYW5pdGl6ZWRWYWx1ZSwgJmRhdGUpKQorICAgICAgICAgICAgbV9k
YXRlVGltZUVkaXRFbGVtZW50LT5zZXRWYWx1ZUFzRGF0ZShkYXRlKTsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgbV9kYXRlVGltZUVkaXRFbGVtZW50LT5zZXRWYWx1ZUFzRW1wdHkoKTsKKyAg
ICB9Cit9CisKK3ZvaWQgVGltZUlucHV0VHlwZTo6c3RlcFJhbmdlQ2hhbmdlZCgpCit7CisgICAg
aWYgKG1fZGF0ZVRpbWVFZGl0RWxlbWVudCkKKyAgICAgICAgbV9kYXRlVGltZUVkaXRFbGVtZW50
LT5zZXRMYXlvdXQoY3JlYXRlU3RlcFJhbmdlKEFueUlzRGVmYXVsdFN0ZXApKTsKK30KKworI2Vu
ZGlmIC8vIEVOQUJMRShJTlBVVF9UWVBFX1RJTUVfTVVMVElQTEVfRklFTERTKQorCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRt
bC9UaW1lSW5wdXRUeXBlLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL1RpbWVJbnB1dFR5cGUuaApp
bmRleCBjOWQ1YjBjZGQwNzcxMmI4NzdlYWE3YzE5MmM2ZWE4NDFkYTUwZGRkLi4yYTU2ZmU3NjY1
ZGJlZTZlNTZkMjBmNzg3MGI3MTQ3ODRkYjFlZTYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL1RpbWVJbnB1dFR5cGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL1RpbWVJbnB1
dFR5cGUuaApAQCAtMzUsMTIgKzM1LDIzIEBACiAKICNpZiBFTkFCTEUoSU5QVVRfVFlQRV9USU1F
KQogCisjaWYgRU5BQkxFKElOUFVUX1RZUEVfVElNRV9NVUxUSVBMRV9GSUVMRFMpCisjaW5jbHVk
ZSAiRGF0ZVRpbWVFZGl0RWxlbWVudC5oIgorI2RlZmluZSBUSU1FX0lOUFVUX1RZUEVfQkFTRV9D
TEFTU19MSVNUIHB1YmxpYyBCYXNlRGF0ZUFuZFRpbWVJbnB1dFR5cGUsIHByaXZhdGUgRGF0ZVRp
bWVFZGl0RWxlbWVudDo6RWRpdENvbnRyb2xFdmVudEhhbmRsZXIKKyNlbHNlCisjZGVmaW5lIFRJ
TUVfSU5QVVRfVFlQRV9CQVNFX0NMQVNTX0xJU1QgcHVibGljIEJhc2VEYXRlQW5kVGltZUlucHV0
VHlwZQorI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgVGltZUlucHV0VHlw
ZSA6IHB1YmxpYyBCYXNlRGF0ZUFuZFRpbWVJbnB1dFR5cGUgeworY2xhc3MgVGltZUlucHV0VHlw
ZSA6IFRJTUVfSU5QVVRfVFlQRV9CQVNFX0NMQVNTX0xJU1QgewogcHVibGljOgogICAgIHN0YXRp
YyBQYXNzT3duUHRyPElucHV0VHlwZT4gY3JlYXRlKEhUTUxJbnB1dEVsZW1lbnQqKTsKIAorI2lm
IEVOQUJMRShJTlBVVF9UWVBFX1RJTUVfTVVMVElQTEVfRklFTERTKQorICAgIHZpcnR1YWwgflRp
bWVJbnB1dFR5cGUoKTsKKyNlbmRpZgorCiBwcml2YXRlOgogICAgIFRpbWVJbnB1dFR5cGUoSFRN
TElucHV0RWxlbWVudCogZWxlbWVudCkgOiBCYXNlRGF0ZUFuZFRpbWVJbnB1dFR5cGUoZWxlbWVu
dCkgeyB9CiAgICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIGZvcm1Db250cm9sVHlwZSgp
IGNvbnN0IE9WRVJSSURFOwpAQCAtNTAsNiArNjEsMzAgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFs
IGJvb2wgcGFyc2VUb0RhdGVDb21wb25lbnRzSW50ZXJuYWwoY29uc3QgVUNoYXIqLCB1bnNpZ25l
ZCBsZW5ndGgsIERhdGVDb21wb25lbnRzKikgY29uc3QgT1ZFUlJJREU7CiAgICAgdmlydHVhbCBi
b29sIHNldE1pbGxpc2Vjb25kVG9EYXRlQ29tcG9uZW50cyhkb3VibGUsIERhdGVDb21wb25lbnRz
KikgY29uc3QgT1ZFUlJJREU7CiAgICAgdmlydHVhbCBib29sIGlzVGltZUZpZWxkKCkgY29uc3Qg
T1ZFUlJJREU7CisKKyNpZiBFTkFCTEUoSU5QVVRfVFlQRV9USU1FX01VTFRJUExFX0ZJRUxEUykK
KyAgICAvLyBEYXRlVGltZUVkaXRFbGVtZW50OjpFZGl0Q29udHJvbEV2ZW50SGFuZGxlciBtZXRo
b2RzCisgICAgdmlydHVhbCB2b2lkIGVkaXRDb250cm9sVmFsdWVDaGFuZ2VkKCkgT1ZFUlJJREUg
RklOQUw7CisKKyAgICAvLyBJbnB1dFR5cGUgbWV0aG9kcworICAgIHZpcnR1YWwgUmVuZGVyT2Jq
ZWN0KiBjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSosIFJlbmRlclN0eWxlKikgY29uc3QgT1ZF
UlJJREUgRklOQUw7CisgICAgdmlydHVhbCB2b2lkIGNyZWF0ZVNoYWRvd1N1YnRyZWUoKSBPVkVS
UklERSBGSU5BTDsKKyAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveVNoYWRvd1N1YnRyZWUoKSBPVkVS
UklERSBGSU5BTDsKKyAgICB2aXJ0dWFsIHZvaWQgZGlzYWJsZWRBdHRyaWJ1dGVDaGFuZ2VkKCkg
T1ZFUlJJREUgRklOQUw7CisgICAgdmlydHVhbCB2aXJ0dWFsIHZvaWQgZm9yd2FyZEV2ZW50KEV2
ZW50KikgT1ZFUlJJREUgRklOQUw7CisgICAgdmlydHVhbCB2b2lkIGhhbmRsZURPTUFjdGl2YXRl
RXZlbnQoRXZlbnQqKSBPVkVSUklERSBGSU5BTDsKKyAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlS2V5
ZG93bkV2ZW50KEtleWJvYXJkRXZlbnQqKSBPVkVSUklERSBGSU5BTDsKKyAgICB2aXJ0dWFsIGJv
b2wgaXNLZXlib2FyZEZvY3VzYWJsZShLZXlib2FyZEV2ZW50KikgY29uc3QgT1ZFUlJJREUgRklO
QUw7CisgICAgdmlydHVhbCBib29sIGlzTW91c2VGb2N1c2FibGUoKSBjb25zdCBPVkVSUklERSBG
SU5BTDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNUZXh0RmllbGQoKSBjb25zdCBPVkVSUklERSBGSU5B
TCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgdm9pZCByZWFkb25seUF0dHJpYnV0ZUNo
YW5nZWQoKSBPVkVSUklERSBGSU5BTDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0VmFsdWUoY29uc3Qg
U3RyaW5nJiwgYm9vbCB2YWx1ZUNoYW5nZWQsIFRleHRGaWVsZEV2ZW50QmVoYXZpb3IpIE9WRVJS
SURFIEZJTkFMOworICAgIHZpcnR1YWwgYm9vbCBzaG91bGRVc2VJbnB1dE1ldGhvZCgpIGNvbnN0
IE9WRVJSSURFIEZJTkFMIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCB2b2lkIHN0ZXBS
YW5nZUNoYW5nZWQoKSBPVkVSUklERSBGSU5BTDsKKworICAgIFJlZlB0cjxEYXRlVGltZUVkaXRF
bGVtZW50PiBtX2RhdGVUaW1lRWRpdEVsZW1lbnQ7CisjZW5kaWYKKwogfTsKIAogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvRGF0
ZVRpbWVFZGl0RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9EYXRlVGlt
ZUVkaXRFbGVtZW50LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jZmVkMWZiYmMyYjUzNjQ2OTgxNjE1ODdlYmJk
NGYyZWNjYzc1NzJiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFk
b3cvRGF0ZVRpbWVFZGl0RWxlbWVudC5jcHAKQEAgLTAsMCArMSw1MjQgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwK
KyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SCisgKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorICogQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
CisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoSU5QVVRfVFlQRV9USU1F
X01VTFRJUExFX0ZJRUxEUykKKworI2luY2x1ZGUgIkRhdGVUaW1lRWRpdEVsZW1lbnQuaCIKKwor
I2luY2x1ZGUgIkRhdGVDb21wb25lbnRzLmgiCisjaW5jbHVkZSAiRGF0ZVRpbWVGaWVsZEVsZW1l
bnRzLmgiCisjaW5jbHVkZSAiRGF0ZVRpbWVGb3JtYXQuaCIKKyNpbmNsdWRlICJFbGVtZW50U2hh
ZG93LmgiCisjaW5jbHVkZSAiRXZlbnRIYW5kbGVyLmgiCisjaW5jbHVkZSAiSFRNTElucHV0RWxl
bWVudC5oIgorI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIktleWJvYXJkRXZlbnQu
aCIKKyNpbmNsdWRlICJMb2NhbGl6ZWREYXRlLmgiCisjaW5jbHVkZSAiTG9jYWxpemVkTnVtYmVy
LmgiCisjaW5jbHVkZSAiTW91c2VFdmVudC5oIgorI2luY2x1ZGUgIlN0ZXBSYW5nZS5oIgorI2lu
Y2x1ZGUgIlRleHQuaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKwordXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKKworc3RhdGlj
IGNvbnN0IGludCBob3VySW5NaWxsaXNlY29uZCA9IDM2MDAgKiAxMDAwOworc3RhdGljIGNvbnN0
IGludCBtaW51dGVJbk1pbGxpc2Vjb25kID0gNjAgKiAxMDAwOworc3RhdGljIGNvbnN0IGludCBz
ZWNvbmRJbk1pbGxpc2Vjb25kID0gMTAwMDsKKworY2xhc3MgRGF0ZVRpbWVFZGl0TGF5b3V0ZXIg
OiBwdWJsaWMgRGF0ZVRpbWVGb3JtYXQ6OlRva2VuSGFuZGxlciB7CitwdWJsaWM6CisgICAgRGF0
ZVRpbWVFZGl0TGF5b3V0ZXIoRGF0ZVRpbWVFZGl0RWxlbWVudCogZWxlbW50LCBjb25zdCBTdGVw
UmFuZ2UmIHN0ZXBSYW5nZSkKKyAgICAgICAgOiBtX2VsZW1lbnQoZWxlbW50KQorICAgICAgICAs
IG1fc3RlcFJhbmdlKHN0ZXBSYW5nZSkKKyAgICAgICAgLCBtX2hhc01pbGxpc2Vjb25kRmllbGQo
ZmFsc2UpCisgICAgICAgICwgbV9oYXNTZWNvbmRGaWVsZChmYWxzZSkKKyAgICB7CisgICAgfQor
CisgICAgYm9vbCBidWlsZChjb25zdCBTdHJpbmcmKTsKKworCisgICAgYm9vbCBuZWVkU2Vjb25k
RmllbGQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICFtX3N0ZXBSYW5nZS5jbGFtcFZh
bHVlKG1fc3RlcFJhbmdlLm1heGltdW0oKSkucmVtYWluZGVyKG1pbnV0ZUluTWlsbGlzZWNvbmQp
LmlzWmVybygpCisgICAgICAgICAgICB8fCAhbV9zdGVwUmFuZ2UubWluaW11bSgpLnJlbWFpbmRl
cihtaW51dGVJbk1pbGxpc2Vjb25kKS5pc1plcm8oKQorICAgICAgICAgICAgfHwgIW1fc3RlcFJh
bmdlLnN0ZXAoKS5yZW1haW5kZXIobWludXRlSW5NaWxsaXNlY29uZCkuaXNaZXJvKCk7CisgICAg
fQorCitwcml2YXRlOgorICAgIHZvaWQgYWRkRmllbGQoRGF0ZVRpbWVGaWVsZEVsZW1lbnQqIGZp
ZWxkKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKHN0YXRpY19jYXN0PHNpemVfdD4obV9lbGVt
ZW50LT5tX251bWJlck9mRmllbGRzKSA+PSBXVEZfQVJSQVlfTEVOR1RIKG1fZWxlbWVudC0+bV9m
aWVsZHMpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBtX2VsZW1lbnQtPmFwcGVuZENo
aWxkKGZpZWxkKTsKKyAgICAgICAgbV9lbGVtZW50LT5tX2ZpZWxkc1ttX2VsZW1lbnQtPm1fbnVt
YmVyT2ZGaWVsZHNdID0gZmllbGQ7CisgICAgICAgICsrbV9lbGVtZW50LT5tX251bWJlck9mRmll
bGRzOworICAgIH0KKworICAgIHZvaWQgYWRkTWlsbGlzZWNvbmRGaWVsZElmTmVlZGVkKCk7CisK
KyAgICBib29sIG5lZWRNaWxsaXNlY29uZEZpZWxkKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiAhbV9zdGVwUmFuZ2UuY2xhbXBWYWx1ZShtX3N0ZXBSYW5nZS5tYXhpbXVtKCkpLnJlbWFp
bmRlcihzZWNvbmRJbk1pbGxpc2Vjb25kKS5pc1plcm8oKQorICAgICAgICAgICAgfHwgIW1fc3Rl
cFJhbmdlLm1pbmltdW0oKS5yZW1haW5kZXIoc2Vjb25kSW5NaWxsaXNlY29uZCkuaXNaZXJvKCkK
KyAgICAgICAgICAgIHx8ICFtX3N0ZXBSYW5nZS5zdGVwKCkucmVtYWluZGVyKHNlY29uZEluTWls
bGlzZWNvbmQpLmlzWmVybygpOworICAgIH0KKworICAgIGJvb2wgbmVlZE1pbnV0ZUZpZWxkKCkg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhbV9zdGVwUmFuZ2UuY2xhbXBWYWx1ZShtX3N0
ZXBSYW5nZS5tYXhpbXVtKCkpLnJlbWFpbmRlcihob3VySW5NaWxsaXNlY29uZCkuaXNaZXJvKCkK
KyAgICAgICAgICAgIHx8ICFtX3N0ZXBSYW5nZS5taW5pbXVtKCkucmVtYWluZGVyKGhvdXJJbk1p
bGxpc2Vjb25kKS5pc1plcm8oKQorICAgICAgICAgICAgfHwgIW1fc3RlcFJhbmdlLnN0ZXAoKS5y
ZW1haW5kZXIoaG91ckluTWlsbGlzZWNvbmQpLmlzWmVybygpOworICAgIH0KKworICAgIC8vIERh
dGVUaW1lRm9ybWF0OjpUb2tlbkhhbmRsZXIgZnVuY3Rpb25zLgorICAgIHZvaWQgdmlzaXRGaWVs
ZChEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlLCBpbnQpOworICAgIHZvaWQgdmlzaXRMaXRlcmFs
KGNvbnN0IFN0cmluZyYpOworCisgICAgRGF0ZVRpbWVFZGl0RWxlbWVudCogbV9lbGVtZW50Owor
ICAgIGNvbnN0IFN0ZXBSYW5nZSYgbV9zdGVwUmFuZ2U7CisgICAgYm9vbCBtX2hhc01pbGxpc2Vj
b25kRmllbGQ7CisgICAgYm9vbCBtX2hhc1NlY29uZEZpZWxkOworfTsKKworYm9vbCBEYXRlVGlt
ZUVkaXRMYXlvdXRlcjo6YnVpbGQoY29uc3QgU3RyaW5nJiBmb3JtYXRTdHJpbmcpCit7CisgICAg
Ly8gRklYTUU6IFdlIHNob3VsZCByZW1vdmUgZGVidWcgcHJpbnQgYmVmb3JlIHJldmlldy4KKyAg
ICBMT0dfRVJST1IoIkRhdGVUaW1lRWRpdExheW91dGVyOjpidWlsZCgnJXMnKSIsIGZvcm1hdFN0
cmluZy5hc2NpaSgpLmRhdGEoKSk7CisgICAgbV9lbGVtZW50LT5yZXNldExheW91dCgpOworICAg
IGlmICghRGF0ZVRpbWVGb3JtYXQ6OnBhcnNlKGZvcm1hdFN0cmluZywgKnRoaXMpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBhZGRNaWxsaXNlY29uZEZpZWxkSWZOZWVkZWQoKTsKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBEYXRlVGltZUVkaXRMYXlvdXRlcjo6YWRkTWlsbGlz
ZWNvbmRGaWVsZElmTmVlZGVkKCkKK3sKKyAgICBpZiAobV9oYXNNaWxsaXNlY29uZEZpZWxkKQor
ICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIW5lZWRNaWxsaXNlY29uZEZpZWxkKCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIHZpc2l0TGl0ZXJhbChsb2NhbGl6ZWREZWNpbWFsU2VwYXJhdG9y
KCkpOworICAgIHZpc2l0RmllbGQoRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZUZyYWN0aW9uYWxT
ZWNvbmQsIDMpOworfQorCit2b2lkIERhdGVUaW1lRWRpdExheW91dGVyOjp2aXNpdEZpZWxkKERh
dGVUaW1lRm9ybWF0OjpGaWVsZFR5cGUgZmllbGRUeXBlLCBpbnQpCit7CisgICAgREVGSU5FX1NU
QVRJQ19MT0NBTChBdG9taWNTdHJpbmcsIGhvdXJQc3VlZG9JZCwgKCItd2Via2l0LWRhdGV0aW1l
LWVkaXQtaG91ci1maWVsZCIpKTsKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEF0b21pY1N0cmlu
ZywgbWlsbGlzZWNvbmRQc3VlZG9JZCwgKCItd2Via2l0LWRhdGV0aW1lLWVkaXQtbWlsbGlzZWNv
bmQtZmllbGQiKSk7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChBdG9taWNTdHJpbmcsIG1pbnV0
ZVBzdWVkb0lkLCAoIi13ZWJraXQtZGF0ZXRpbWUtZWRpdC1taW51dGUtZmllbGQiKSk7CisgICAg
REVGSU5FX1NUQVRJQ19MT0NBTChBdG9taWNTdHJpbmcsIHBlcmlvZFBzdWVkb0lkLCAoIi13ZWJr
aXQtZGF0ZXRpbWUtZWRpdC1ub29uLWZpZWxkIikpOworICAgIERFRklORV9TVEFUSUNfTE9DQUwo
QXRvbWljU3RyaW5nLCBzZWNvbmRQc3VlZG9JZCwgKCItd2Via2l0LWRhdGV0aW1lLWVkaXQtc2Vj
b25kLWZpZWxkIikpOworCisgICAgaWYgKG1faGFzU2Vjb25kRmllbGQgJiYgZmllbGRUeXBlICE9
IERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVGcmFjdGlvbmFsU2Vjb25kKQorICAgICAgICBhZGRN
aWxsaXNlY29uZEZpZWxkSWZOZWVkZWQoKTsKKworICAgIHN3aXRjaCAoZmllbGRUeXBlKSB7Cisg
ICAgY2FzZSBEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlSG91cjExOgorICAgICAgICBpZiAoIW1f
ZWxlbWVudC0+bV9ob3VyMTFGaWVsZCkKKyAgICAgICAgICAgIG1fZWxlbWVudC0+bV9ob3VyMTFG
aWVsZCA9IERhdGVUaW1lSG91ckZpZWxkRWxlbWVudDo6Y3JlYXRlKG1fZWxlbWVudC0+ZG9jdW1l
bnQoKSwgKm1fZWxlbWVudCwgaG91clBzdWVkb0lkLCAwLCAxMSk7CisgICAgICAgIGFkZEZpZWxk
KG1fZWxlbWVudC0+bV9ob3VyMTFGaWVsZC5nZXQoKSk7CisgICAgICAgIHJldHVybjsKKworICAg
IGNhc2UgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZUhvdXIxMjoKKyAgICAgICAgaWYgKCFtX2Vs
ZW1lbnQtPm1faG91cjEyRmllbGQpCisgICAgICAgICAgICBtX2VsZW1lbnQtPm1faG91cjEyRmll
bGQgPSBEYXRlVGltZUhvdXJGaWVsZEVsZW1lbnQ6OmNyZWF0ZShtX2VsZW1lbnQtPmRvY3VtZW50
KCksICptX2VsZW1lbnQsIGhvdXJQc3VlZG9JZCwgMSwgMTIpOworICAgICAgICBhZGRGaWVsZCht
X2VsZW1lbnQtPm1faG91cjEyRmllbGQuZ2V0KCkpOworICAgICAgICByZXR1cm47CisKKyAgICBj
YXNlIERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVIb3VyMjM6CisgICAgICAgIGlmICghbV9lbGVt
ZW50LT5tX2hvdXIyM0ZpZWxkKQorICAgICAgICAgICAgbV9lbGVtZW50LT5tX2hvdXIyM0ZpZWxk
ID0gRGF0ZVRpbWVIb3VyRmllbGRFbGVtZW50OjpjcmVhdGUobV9lbGVtZW50LT5kb2N1bWVudCgp
LCAqbV9lbGVtZW50LCBob3VyUHN1ZWRvSWQsIDAsIDIzKTsKKyAgICAgICAgYWRkRmllbGQobV9l
bGVtZW50LT5tX2hvdXIyM0ZpZWxkLmdldCgpKTsKKyAgICAgICAgcmV0dXJuOworCisgICAgY2Fz
ZSBEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlSG91cjI0OgorICAgICAgICBpZiAoIW1fZWxlbWVu
dC0+bV9ob3VyMjRGaWVsZCkKKyAgICAgICAgICAgIG1fZWxlbWVudC0+bV9ob3VyMjRGaWVsZCA9
IERhdGVUaW1lSG91ckZpZWxkRWxlbWVudDo6Y3JlYXRlKG1fZWxlbWVudC0+ZG9jdW1lbnQoKSwg
Km1fZWxlbWVudCwgaG91clBzdWVkb0lkLCAxLCAyNCk7CisgICAgICAgIGFkZEZpZWxkKG1fZWxl
bWVudC0+bV9ob3VyMjRGaWVsZC5nZXQoKSk7CisgICAgICAgIHJldHVybjsKKworICAgIGNhc2Ug
RGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZU1pbnV0ZToKKyAgICAgICAgaWYgKCFtX2VsZW1lbnQt
Pm1fbWludXRlRmllbGQpCisgICAgICAgICAgICBtX2VsZW1lbnQtPm1fbWludXRlRmllbGQgPSBE
YXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQ6OmNyZWF0ZShtX2VsZW1lbnQtPmRvY3VtZW50KCks
ICptX2VsZW1lbnQsIG1pbnV0ZVBzdWVkb0lkLCBtaW51dGVJbk1pbGxpc2Vjb25kLCAwLCA1OSk7
CisgICAgICAgIGFkZEZpZWxkKG1fZWxlbWVudC0+bV9taW51dGVGaWVsZC5nZXQoKSk7CisKKyAg
ICAgICAgaWYgKCFuZWVkTWludXRlRmllbGQoKSkgeworICAgICAgICAgICAgbV9lbGVtZW50LT5t
X21pbnV0ZUZpZWxkLT5kaXNhYmxlKCk7CisgICAgICAgICAgICBtX2VsZW1lbnQtPm1fbWludXRl
RmllbGQtPnNldFZhbHVlQXNJbnRlZ2VyKDAsIERhdGVUaW1lRmllbGRFbGVtZW50OjpEaXNwYXRj
aE5vRXZlbnQpOworICAgICAgICB9CisgICAgICAgIHJldHVybjsKKworICAgIGNhc2UgRGF0ZVRp
bWVGb3JtYXQ6OkZpZWxkVHlwZVBlcmlvZDoKKyAgICAgICAgaWYgKCFtX2VsZW1lbnQtPm1fcGVy
aW9kRmllbGQpCisgICAgICAgICAgICBtX2VsZW1lbnQtPm1fcGVyaW9kRmllbGQgPSBEYXRlVGlt
ZVN5bWJvbGljRmllbGRFbGVtZW50OjpjcmVhdGUobV9lbGVtZW50LT5kb2N1bWVudCgpLCAqbV9l
bGVtZW50LCBwZXJpb2RQc3VlZG9JZCwgaG91ckluTWlsbGlzZWNvbmQgKiAxMiwgdGltZUFNUE1M
YWJlbHMoKSk7CisgICAgICAgIGFkZEZpZWxkKG1fZWxlbWVudC0+bV9wZXJpb2RGaWVsZC5nZXQo
KSk7CisgICAgICAgIHJldHVybjsKKworICAgIGNhc2UgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlw
ZVNlY29uZDoKKyAgICAgICAgaWYgKG5lZWRTZWNvbmRGaWVsZCgpKSB7CisgICAgICAgICAgICBp
ZiAoIW1fZWxlbWVudC0+bV9zZWNvbmRGaWVsZCkKKyAgICAgICAgICAgICAgICBtX2VsZW1lbnQt
Pm1fc2Vjb25kRmllbGQgPSBEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQ6OmNyZWF0ZShtX2Vs
ZW1lbnQtPmRvY3VtZW50KCksICptX2VsZW1lbnQsIHNlY29uZFBzdWVkb0lkLCBzZWNvbmRJbk1p
bGxpc2Vjb25kLCAwLCA1OSk7CisgICAgICAgICAgICBhZGRGaWVsZChtX2VsZW1lbnQtPm1fc2Vj
b25kRmllbGQuZ2V0KCkpOworICAgICAgICAgICAgbV9oYXNTZWNvbmRGaWVsZCA9IHRydWU7Cisg
ICAgICAgIH0KKyAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSBEYXRlVGltZUZvcm1hdDo6Rmll
bGRUeXBlRnJhY3Rpb25hbFNlY29uZDoKKyAgICAgICAgaWYgKG5lZWRNaWxsaXNlY29uZEZpZWxk
KCkpIHsKKyAgICAgICAgICAgIGlmICghbV9lbGVtZW50LT5tX21pbGxpc2Vjb25kRmllbGQpCisg
ICAgICAgICAgICAgICAgbV9lbGVtZW50LT5tX21pbGxpc2Vjb25kRmllbGQgPSBEYXRlVGltZU51
bWVyaWNGaWVsZEVsZW1lbnQ6OmNyZWF0ZShtX2VsZW1lbnQtPmRvY3VtZW50KCksICptX2VsZW1l
bnQsIG1pbGxpc2Vjb25kUHN1ZWRvSWQsIDEsIDAsIDk5OSk7CisgICAgICAgICAgICBhZGRGaWVs
ZChtX2VsZW1lbnQtPm1fbWlsbGlzZWNvbmRGaWVsZC5nZXQoKSk7CisgICAgICAgICAgICBtX2hh
c01pbGxpc2Vjb25kRmllbGQgPSB0cnVlOworICAgICAgICB9CisgICAgICAgIHJldHVybjsKKwor
ICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybjsKKyAgICB9Cit9CisKK3ZvaWQgRGF0ZVRpbWVF
ZGl0TGF5b3V0ZXI6OnZpc2l0TGl0ZXJhbChjb25zdCBTdHJpbmcmIHRleHQpCit7CisgICAgTE9H
X0VSUk9SKCJ2aXNpdExpdGVyYWwoJXMpIiwgdGV4dC5hc2NpaSgpLmRhdGEoKSk7CisgICAgQVNT
RVJUKHRleHQubGVuZ3RoKCkpOworICAgIG1fZWxlbWVudC0+YXBwZW5kQ2hpbGQoVGV4dDo6Y3Jl
YXRlKG1fZWxlbWVudC0+ZG9jdW1lbnQoKSwgdGV4dCkpOworfQorCitEYXRlVGltZUVkaXRFbGVt
ZW50OjpEYXRlVGltZUVkaXRFbGVtZW50KERvY3VtZW50KiBkb2N1bWVudCwgRWRpdENvbnRyb2xF
dmVudEhhbmRsZXImIGVkaXRDb250cm9sRXZlbnRIYW5kbGVyKQorICAgIDogSFRNTERpdkVsZW1l
bnQoZGl2VGFnLCBkb2N1bWVudCkKKyAgICAsIG1fZWRpdENvbnRyb2xFdmVudEhhbmRsZXIoJmVk
aXRDb250cm9sRXZlbnRIYW5kbGVyKQorICAgICwgbV9mb2N1c0ZpZWxkSW5kZXgoSW52YWxpZEZp
ZWxkSW5kZXgpCisgICAgLCBtX251bWJlck9mRmllbGRzKDApCit7CisgICAgREVGSU5FX1NUQVRJ
Q19MT0NBTChBdG9taWNTdHJpbmcsIGRhdGVUaW1lRWRpdFBzZXVkb0lkLCAoIi13ZWJraXQtZGF0
ZXRpbWUtZWRpdCIpKTsKKyAgICBzZXRTaGFkb3dQc2V1ZG9JZChkYXRlVGltZUVkaXRQc2V1ZG9J
ZCk7CisKKyAgICBtX3NwaW5CdXR0b24gPSBTcGluQnV0dG9uRWxlbWVudDo6Y3JlYXRlKGRvY3Vt
ZW50LCAqdGhpcyk7CisKKyAgICAvLyBGSVhNRTogU3BpbkJ1dHRvbiBzaG91bGQgaGF2ZSB3aWR0
aCBieSBpdHNlbGYuCisgICAgRXhjZXB0aW9uQ29kZSBlYzsKKyAgICBtX3NwaW5CdXR0b24tPnNl
dElubmVyVGV4dCgiLiIsIGVjKTsKK30KKworRGF0ZVRpbWVFZGl0RWxlbWVudDo6fkRhdGVUaW1l
RWRpdEVsZW1lbnQoKQoreworICAgIGlmIChtX2hvdXIxMUZpZWxkKQorICAgICAgICBtX2hvdXIx
MUZpZWxkLT5yZW1vdmVFdmVudEhhbmRsZXIoKTsKKworICAgIGlmIChtX2hvdXIxMkZpZWxkKQor
ICAgICAgICBtX2hvdXIxMkZpZWxkLT5yZW1vdmVFdmVudEhhbmRsZXIoKTsKKworICAgIGlmICht
X2hvdXIyM0ZpZWxkKQorICAgICAgICBtX2hvdXIyM0ZpZWxkLT5yZW1vdmVFdmVudEhhbmRsZXIo
KTsKKworICAgIGlmIChtX2hvdXIyNEZpZWxkKQorICAgICAgICBtX2hvdXIyNEZpZWxkLT5yZW1v
dmVFdmVudEhhbmRsZXIoKTsKKworICAgIGlmIChtX21pbGxpc2Vjb25kRmllbGQpCisgICAgICAg
IG1fbWlsbGlzZWNvbmRGaWVsZC0+cmVtb3ZlRXZlbnRIYW5kbGVyKCk7CisKKyAgICBpZiAobV9t
aW51dGVGaWVsZCkKKyAgICAgICAgbV9taW51dGVGaWVsZC0+cmVtb3ZlRXZlbnRIYW5kbGVyKCk7
CisKKyAgICBpZiAobV9wZXJpb2RGaWVsZCkKKyAgICAgICAgbV9wZXJpb2RGaWVsZC0+cmVtb3Zl
RXZlbnRIYW5kbGVyKCk7CisKKyAgICBpZiAobV9zZWNvbmRGaWVsZCkKKyAgICAgICAgbV9zZWNv
bmRGaWVsZC0+cmVtb3ZlRXZlbnRIYW5kbGVyKCk7CisKKyAgICBpZiAobV9zcGluQnV0dG9uKQor
ICAgICAgICBtX3NwaW5CdXR0b24tPnJlbW92ZVN0ZXBBY3Rpb25IYW5kbGVyKCk7Cit9CisKK1Bh
c3NSZWZQdHI8RGF0ZVRpbWVFZGl0RWxlbWVudD4gRGF0ZVRpbWVFZGl0RWxlbWVudDo6Y3JlYXRl
KERvY3VtZW50KiBkb2N1bWVudCwgRWRpdENvbnRyb2xFdmVudEhhbmRsZXImIGVkaXRDb250cm9s
RXZlbnRIYW5kbGVyLCBjb25zdCBTdGVwUmFuZ2UmIHN0ZXBSYW5nZSkKK3sKKyAgICBSZWZQdHI8
RGF0ZVRpbWVFZGl0RWxlbWVudD4gY29udGFpbmVyID0gYWRvcHRSZWYobmV3IERhdGVUaW1lRWRp
dEVsZW1lbnQoZG9jdW1lbnQsIGVkaXRDb250cm9sRXZlbnRIYW5kbGVyKSk7CisgICAgY29udGFp
bmVyLT5zZXRMYXlvdXQoc3RlcFJhbmdlKTsKKyAgICByZXR1cm4gY29udGFpbmVyOworfQorCiti
b29sIERhdGVUaW1lRWRpdEVsZW1lbnQ6OmRpc2FibGVkKCkgY29uc3QKK3sKKyAgICBOb2RlKiBo
b3N0ID0gc2hhZG93QW5jZXN0b3JOb2RlKCk7CisgICAgcmV0dXJuICFob3N0IHx8IGhvc3QtPmRp
c2FibGVkKCk7Cit9CisKK0RhdGVUaW1lRmllbGRFbGVtZW50KiBEYXRlVGltZUVkaXRFbGVtZW50
OjpmaWVsZEF0KGludCBpbmRleCkgY29uc3QKK3sKKyAgICByZXR1cm4gaW5kZXggPj0gMCAmJiBp
bmRleCA8IG1fbnVtYmVyT2ZGaWVsZHMgPyBtX2ZpZWxkc1tpbmRleF0gOiAwOworfQorCit2b2lk
IERhdGVUaW1lRWRpdEVsZW1lbnQ6OmhhbmRsZUtleWJvYXJkRXZlbnQoS2V5Ym9hcmRFdmVudCog
a2V5Ym9hcmRFdmVudCkKK3sKKyAgICBpZiAoa2V5Ym9hcmRFdmVudC0+dHlwZSgpID09IGV2ZW50
TmFtZXMoKS5rZXlkb3duRXZlbnQgJiYgZmllbGRBdChtX2ZvY3VzRmllbGRJbmRleCkgJiYgIWRp
c2FibGVkKCkgJiYgIXJlYWRPbmx5KCkpIHsKKyAgICAgICAgY29uc3QgU3RyaW5nJiBrZXlJZGVu
dGlmaWVyID0ga2V5Ym9hcmRFdmVudC0+a2V5SWRlbnRpZmllcigpOworCisgICAgICAgIC8vIEZJ
WE1FOiBXZSBzaG91bGQgcmVtb3ZlIHRoaXMgZGVidWcgbG9nZ2luZyBiZWZvcmUgcmV2aWV3Cisg
ICAgICAgIExPR19FUlJPUigia2V5SWRlbnRpZmllcj0lcyIsIGtleUlkZW50aWZpZXIuYXNjaWko
KS5kYXRhKCkpOworCisgICAgICAgIGlmIChrZXlJZGVudGlmaWVyID09ICJMZWZ0IikgeworICAg
ICAgICAgICAga2V5Ym9hcmRFdmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKKyAgICAgICAgICAg
IHNldEZvY3VzRmllbGQocHJldmlvdXNGaWVsZEluZGV4KG1fZm9jdXNGaWVsZEluZGV4KSk7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoa2V5SWRlbnRpZmll
ciA9PSAiUmlnaHQiKSB7CisgICAgICAgICAgICBrZXlib2FyZEV2ZW50LT5zZXREZWZhdWx0SGFu
ZGxlZCgpOworICAgICAgICAgICAgc2V0Rm9jdXNGaWVsZChuZXh0RmllbGRJbmRleChtX2ZvY3Vz
RmllbGRJbmRleCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAg
aWYgKGtleUlkZW50aWZpZXIgPT0gIlUrMDAwOSIpIHsKKyAgICAgICAgICAgIGNvbnN0IGludCBm
aWVsZEluZGV4ID0gbV9mb2N1c0ZpZWxkSW5kZXggKyAoa2V5Ym9hcmRFdmVudC0+Z2V0TW9kaWZp
ZXJTdGF0ZSgiU2hpZnQiKSA/IC0xIDogMSk7CisgICAgICAgICAgICBpZiAoZmllbGRBdChmaWVs
ZEluZGV4KSkgeworICAgICAgICAgICAgICAgIGtleWJvYXJkRXZlbnQtPnNldERlZmF1bHRIYW5k
bGVkKCk7CisgICAgICAgICAgICAgICAgc2V0Rm9jdXNGaWVsZChmaWVsZEluZGV4KTsKKyAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisK
K3ZvaWQgRGF0ZVRpbWVFZGl0RWxlbWVudDo6ZmllbGRWYWx1ZUNoYW5nZWQoKQoreworICAgIGlm
IChtX2VkaXRDb250cm9sRXZlbnRIYW5kbGVyKQorICAgICAgICBtX2VkaXRDb250cm9sRXZlbnRI
YW5kbGVyLT5lZGl0Q29udHJvbFZhbHVlQ2hhbmdlZCgpOworfQorCit2b2lkIERhdGVUaW1lRWRp
dEVsZW1lbnQ6OmhhbmRsZU1vdXNlRXZlbnQoTW91c2VFdmVudCogbW91c2VFdmVudCkKK3sKKyAg
ICBpZiAobW91c2VFdmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZWRvd25FdmVudCAm
JiBtb3VzZUV2ZW50LT5idXR0b24oKSA9PSBMZWZ0QnV0dG9uICYmICFkaXNhYmxlZCgpICYmICFy
ZWFkT25seSgpKSB7CisgICAgICAgIE5vZGUqIGNvbnN0IHJlbGF0ZWRUYXJnZXQgPSBtb3VzZUV2
ZW50LT50YXJnZXQoKS0+dG9Ob2RlKCk7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbV9u
dW1iZXJPZkZpZWxkczsgKytpKSB7CisgICAgICAgICAgICBpZiAobV9maWVsZHNbaV0gPT0gcmVs
YXRlZFRhcmdldCkgeworICAgICAgICAgICAgICAgIG1vdXNlRXZlbnQtPnNldERlZmF1bHRIYW5k
bGVkKCk7CisgICAgICAgICAgICAgICAgc2V0Rm9jdXNGaWVsZChpKTsKKyAgICAgICAgICAgICAg
ICBOb2RlKiBob3N0ID0gc2hhZG93QW5jZXN0b3JOb2RlKCk7CisgICAgICAgICAgICAgICAgdG9I
VE1MRWxlbWVudChob3N0KS0+Zm9jdXMoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBEYXRlVGltZUVkaXRFbGVtZW50
Ojptb3ZlVG9OZXh0RmllbGQoKQoreworICAgIGlmIChtX2ZvY3VzRmllbGRJbmRleCAhPSBJbnZh
bGlkRmllbGRJbmRleCkKKyAgICAgICAgc2V0Rm9jdXNGaWVsZChuZXh0RmllbGRJbmRleChtX2Zv
Y3VzRmllbGRJbmRleCkpOworfQorCitpbnQgRGF0ZVRpbWVFZGl0RWxlbWVudDo6bmV4dEZpZWxk
SW5kZXgoaW50IGluZGV4KSBjb25zdAoreworICAgIHJldHVybiBzdGQ6Om1heChzdGQ6Om1pbihp
bmRleCArIDEsIG1fbnVtYmVyT2ZGaWVsZHMgLSAxKSwgMCk7Cit9CisKK2ludCBEYXRlVGltZUVk
aXRFbGVtZW50OjpwcmV2aW91c0ZpZWxkSW5kZXgoaW50IGluZGV4KSBjb25zdAoreworICAgIHJl
dHVybiBzdGQ6Om1heChzdGQ6Om1pbihpbmRleCAtIDEsIG1fbnVtYmVyT2ZGaWVsZHMgLSAxKSwg
MCk7Cit9CisKK2Jvb2wgRGF0ZVRpbWVFZGl0RWxlbWVudDo6cmVhZE9ubHkoKSBjb25zdAorewor
ICAgIE5vZGUqIGNvbnN0IGhvc3QgPSBzaGFkb3dBbmNlc3Rvck5vZGUoKTsKKyAgICBpZiAoIWhv
c3QpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEhUTUxJbnB1dEVsZW1lbnQqIGNvbnN0
IGlucHV0ID0gaG9zdC0+dG9JbnB1dEVsZW1lbnQoKTsKKyAgICByZXR1cm4gaW5wdXQgJiYgaW5w
dXQtPnJlYWRPbmx5KCk7Cit9CisKK3ZvaWQgRGF0ZVRpbWVFZGl0RWxlbWVudDo6cmVzZXRMYXlv
dXQoKQoreworICAgIHdoaWxlIChOb2RlKiBub2RlID0gZmlyc3RDaGlsZCgpKQorICAgICAgICBy
ZW1vdmVDaGlsZChub2RlKTsKKworICAgIG1fbnVtYmVyT2ZGaWVsZHMgPSAwOworfQorCit2b2lk
IERhdGVUaW1lRWRpdEVsZW1lbnQ6OnNldEZvY3VzRmllbGQoaW50IG5ld0ZvY3VzRmllbGRJbmRl
eCkKK3sKKyAgICBpZiAobV9mb2N1c0ZpZWxkSW5kZXggPT0gbmV3Rm9jdXNGaWVsZEluZGV4KQor
ICAgICAgICByZXR1cm47CisKKyAgICBEYXRlVGltZUZpZWxkRWxlbWVudCogY29uc3QgbmV3Rm9j
dXNGaWVsZCA9IGZpZWxkQXQobmV3Rm9jdXNGaWVsZEluZGV4KTsKKyAgICBpZiAobmV3Rm9jdXNG
aWVsZCAmJiBuZXdGb2N1c0ZpZWxkLT5kaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAg
ICBEYXRlVGltZUZpZWxkRWxlbWVudCogY29uc3QgY3VycmVudEZvY3VzRmllbGQgPSBmaWVsZEF0
KG1fZm9jdXNGaWVsZEluZGV4KTsKKworICAgIGlmIChjdXJyZW50Rm9jdXNGaWVsZCkKKyAgICAg
ICAgY3VycmVudEZvY3VzRmllbGQtPnNldEZvY3VzKGZhbHNlKTsKKworICAgIGlmICghbmV3Rm9j
dXNGaWVsZCkgeworICAgICAgICBtX2ZvY3VzRmllbGRJbmRleCA9IEludmFsaWRGaWVsZEluZGV4
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9mb2N1c0ZpZWxkSW5kZXggPSBuZXdG
b2N1c0ZpZWxkSW5kZXg7CisgICAgbmV3Rm9jdXNGaWVsZC0+c2V0Rm9jdXModHJ1ZSk7Cit9CisK
K3ZvaWQgRGF0ZVRpbWVFZGl0RWxlbWVudDo6c2V0TGF5b3V0KGNvbnN0IFN0ZXBSYW5nZSYgc3Rl
cFJhbmdlKQoreworICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgcmVtb3ZlIHRoaXMgZGVidWcgbG9n
Z2luZyBiZWZvcmUgcmV2aWV3CisgICAgTE9HX0VSUk9SKCJtaW49JWQgbWF4PSVkIGNtYXg9JWQg
c3RlcD0lZCIsCisgICAgICAgIGludChzdGVwUmFuZ2UubWluaW11bSgpLnRvRG91YmxlKCkpLAor
ICAgICAgICBpbnQoc3RlcFJhbmdlLm1heGltdW0oKS50b0RvdWJsZSgpKSwKKyAgICAgICAgaW50
KHN0ZXBSYW5nZS5jbGFtcFZhbHVlKHN0ZXBSYW5nZS5tYXhpbXVtKCkpLnRvRG91YmxlKCkpLAor
ICAgICAgICBpbnQoc3RlcFJhbmdlLnN0ZXAoKS50b0RvdWJsZSgpKSk7CisKKyAgICBEYXRlVGlt
ZUZpZWxkRWxlbWVudCogY29uc3QgZm9jdXNGaWVsZCA9IGZpZWxkQXQobV9mb2N1c0ZpZWxkSW5k
ZXgpOworICAgIHNldEZvY3VzRmllbGQoSW52YWxpZEZpZWxkSW5kZXgpOworCisgICAgRGF0ZVRp
bWVFZGl0TGF5b3V0ZXIgYnVpbGRlcih0aGlzLCBzdGVwUmFuZ2UpOworICAgIGNvbnN0IFN0cmlu
ZyBkYXRlVGltZUZvcm1hdCA9IGJ1aWxkZXIubmVlZFNlY29uZEZpZWxkKCkgPyBsb2NhbGl6ZWRU
aW1lRm9ybWF0VGV4dCgpIDogbG9jYWxpemVkU2hvcnRUaW1lRm9ybWF0VGV4dCgpOworICAgIGlm
ICghYnVpbGRlci5idWlsZChkYXRlVGltZUZvcm1hdCkgfHwgIW1fbnVtYmVyT2ZGaWVsZHMpCisg
ICAgICAgIGJ1aWxkZXIuYnVpbGQoYnVpbGRlci5uZWVkU2Vjb25kRmllbGQoKSA/ICJISDptbTpz
cyIgOiAiSEg6bW0iKTsKKworICAgIGFwcGVuZENoaWxkKG1fc3BpbkJ1dHRvbik7CisKKyAgICBp
ZiAoZm9jdXNGaWVsZCkgeworICAgICAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgbV9u
dW1iZXJPZkZpZWxkczsgKytpbmRleCkgeworICAgICAgICAgICAgaWYgKGZvY3VzRmllbGQgPT0g
ZmllbGRBdChpbmRleCkpIHsKKyAgICAgICAgICAgICAgICBzZXRGb2N1c0ZpZWxkKGluZGV4KTsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0K
K30KKwordm9pZCBEYXRlVGltZUVkaXRFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50
KiBldmVudCkKK3sKKyAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHJlbW92ZSB0aGlzIGRlYnVnIGxv
Z2dpbmcgYmVmb3JlIHJldmlldworICAgIGlmICghZXZlbnQtPmlzTW91c2VFdmVudCgpKQorICAg
ICAgICBMT0dfRVJST1IoIkRhdGVUaW1lRWRpdEVsZW1lbnQ6IGV2ZW50PSVzIiwgc3RhdGljX2Nh
c3Q8U3RyaW5nPihldmVudC0+dHlwZSgpKS5hc2NpaSgpLmRhdGEoKSk7CisKKyAgICBpZiAoZXZl
bnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkuZm9jdXNFdmVudCkgeworICAgICAgICBpZiAoIWRp
c2FibGVkKCkgJiYgIXJlYWRPbmx5KCkgJiYgbV9mb2N1c0ZpZWxkSW5kZXggPT0gSW52YWxpZEZp
ZWxkSW5kZXgpCisgICAgICAgICAgICBzZXRGb2N1c0ZpZWxkKDApOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmJsdXJFdmVu
dCkgeworICAgICAgICBzZXRGb2N1c0ZpZWxkKEludmFsaWRGaWVsZEluZGV4KTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIGlmIChldmVudC0+aXNNb3VzZUV2ZW50KCkpIHsKKyAgICAg
ICAgaGFuZGxlTW91c2VFdmVudChzdGF0aWNfY2FzdDxNb3VzZUV2ZW50Kj4oZXZlbnQpKTsKKyAg
ICB9IGVsc2UgaWYgKGV2ZW50LT5pc0tleWJvYXJkRXZlbnQoKSkKKyAgICAgICAgaGFuZGxlS2V5
Ym9hcmRFdmVudChzdGF0aWNfY2FzdDxLZXlib2FyZEV2ZW50Kj4oZXZlbnQpKTsKKworICAgIGlm
IChldmVudC0+ZGVmYXVsdEhhbmRsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgRGF0ZVRp
bWVGaWVsZEVsZW1lbnQqIGNvbnN0IGZvY3VzRmllbGQgPSBmaWVsZEF0KG1fZm9jdXNGaWVsZElu
ZGV4KTsKKyAgICBpZiAoIWZvY3VzRmllbGQpCisgICAgICAgIHJldHVybjsKKworICAgIGZvY3Vz
RmllbGQtPmRlZmF1bHRFdmVudEhhbmRsZXIoZXZlbnQpOworfQorCit2b2lkIERhdGVUaW1lRWRp
dEVsZW1lbnQ6OmRpc2FibGUoKQoreworICAgIGlmIChkaXNhYmxlZCgpIHx8IHJlYWRPbmx5KCkp
IHsKKyAgICAgIGlmIChtX3NwaW5CdXR0b24pCisgICAgICAgICAgbV9zcGluQnV0dG9uLT5yZWxl
YXNlQ2FwdHVyZSgpOworCisgICAgICBzZXRGb2N1c0ZpZWxkKEludmFsaWRGaWVsZEluZGV4KTsK
KyAgICB9Cit9CisKK3ZvaWQgRGF0ZVRpbWVFZGl0RWxlbWVudDo6c2V0VmFsdWVBc0RhdGUoY29u
c3QgRGF0ZUNvbXBvbmVudHMmIGRhdGUpCit7CisgICAgaWYgKG1faG91cjExRmllbGQpCisgICAg
ICAgIG1faG91cjExRmllbGQtPnNldFZhbHVlQXNJbnRlZ2VyKGRhdGUuaG91cigpKTsKKworICAg
IGlmIChtX2hvdXIxMkZpZWxkKQorICAgICAgICBtX2hvdXIxMkZpZWxkLT5zZXRWYWx1ZUFzSW50
ZWdlcihkYXRlLmhvdXIoKSk7CisKKyAgICBpZiAobV9ob3VyMjNGaWVsZCkKKyAgICAgICAgbV9o
b3VyMjNGaWVsZC0+c2V0VmFsdWVBc0ludGVnZXIoZGF0ZS5ob3VyKCkpOworCisgICAgaWYgKG1f
aG91cjI0RmllbGQpCisgICAgICAgIG1faG91cjI0RmllbGQtPnNldFZhbHVlQXNJbnRlZ2VyKGRh
dGUuaG91cigpKTsKKworICAgIGlmIChtX21pbGxpc2Vjb25kRmllbGQpCisgICAgICAgIG1fbWls
bGlzZWNvbmRGaWVsZC0+c2V0VmFsdWVBc0ludGVnZXIoZGF0ZS5taWxsaXNlY29uZCgpKTsKKwor
ICAgIGlmIChtX21pbnV0ZUZpZWxkKQorICAgICAgICBtX21pbnV0ZUZpZWxkLT5zZXRWYWx1ZUFz
SW50ZWdlcihkYXRlLm1pbnV0ZSgpKTsKKworICAgIGlmIChtX3BlcmlvZEZpZWxkKQorICAgICAg
ICBtX3BlcmlvZEZpZWxkLT5zZXRWYWx1ZUFzSW50ZWdlcihkYXRlLmhvdXIoKSA+PSAxMiA/IDEg
OiAwKTsKKworICAgIGlmIChtX3NlY29uZEZpZWxkKQorICAgICAgICBtX3NlY29uZEZpZWxkLT5z
ZXRWYWx1ZUFzSW50ZWdlcihkYXRlLnNlY29uZCgpKTsKK30KKwordm9pZCBEYXRlVGltZUVkaXRF
bGVtZW50OjpzZXRWYWx1ZUFzRW1wdHkoKQoreworICAgIGZvciAoaW50IGZpZWxkSW5kZXggPSAw
OyBmaWVsZEluZGV4IDwgbV9udW1iZXJPZkZpZWxkczsgKytmaWVsZEluZGV4KQorICAgICAgICBm
aWVsZEF0KGZpZWxkSW5kZXgpLT5zZXRWYWx1ZUFzRW1wdHkoRGF0ZVRpbWVGaWVsZEVsZW1lbnQ6
OkRpc3BhdGNoTm9FdmVudCk7Cit9CisKK3ZvaWQgRGF0ZVRpbWVFZGl0RWxlbWVudDo6c3BpbkJ1
dHRvblN0ZXBEb3duKCkKK3sKKyAgICBpZiAoRGF0ZVRpbWVGaWVsZEVsZW1lbnQqIGNvbnN0IGZv
Y3VzRmllbGQgPSBmaWVsZEF0KG1fZm9jdXNGaWVsZEluZGV4KSkKKyAgICAgICAgZm9jdXNGaWVs
ZC0+c3RlcERvd24oKTsKK30KKwordm9pZCBEYXRlVGltZUVkaXRFbGVtZW50OjpzcGluQnV0dG9u
U3RlcFVwKCkKK3sKKyAgICBpZiAoRGF0ZVRpbWVGaWVsZEVsZW1lbnQqIGNvbnN0IGZvY3VzRmll
bGQgPSBmaWVsZEF0KG1fZm9jdXNGaWVsZEluZGV4KSkKKyAgICAgICAgZm9jdXNGaWVsZC0+c3Rl
cFVwKCk7Cit9CisKK2RvdWJsZSBEYXRlVGltZUVkaXRFbGVtZW50Ojp2YWx1ZUFzRG91YmxlKCkg
Y29uc3QKK3sKKyAgICBkb3VibGUgdmFsdWUgPSAwOworCisgICAgZm9yIChpbnQgZmllbGRJbmRl
eCA9IDA7IGZpZWxkSW5kZXggPCBtX251bWJlck9mRmllbGRzOyArK2ZpZWxkSW5kZXgpIHsKKyAg
ICAgICAgY29uc3QgRGF0ZVRpbWVGaWVsZEVsZW1lbnQqIGNvbnN0IGZpZWxkID0gZmllbGRBdChm
aWVsZEluZGV4KTsKKyAgICAgICAgaWYgKCFmaWVsZC0+aGFzVmFsdWUoKSkKKyAgICAgICAgICAg
IHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OnF1aWV0X05hTigpOworICAgICAg
ICB2YWx1ZSArPSBmaWVsZC0+dmFsdWVBc0RvdWJsZSgpOworICAgIH0KKworICAgIHJldHVybiB2
YWx1ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0RhdGVUaW1lRWRpdEVsZW1lbnQuaCBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvc2hhZG93L0RhdGVUaW1lRWRpdEVsZW1lbnQuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5k
MGFiODA5ZWQ0YmFiYzczNDcyYTM4ODA2MTJiYzM2NDc0NDRlOTNiCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvRGF0ZVRpbWVFZGl0RWxlbWVudC5oCkBAIC0w
LDAgKzEsMTIyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAor
ICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorICogU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIKKyAqIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBEYXRlVGltZUVkaXRFbGVt
ZW50X2gKKyNkZWZpbmUgRGF0ZVRpbWVFZGl0RWxlbWVudF9oCisKKyNpZiBFTkFCTEUoSU5QVVRf
VFlQRV9USU1FX01VTFRJUExFX0ZJRUxEUykKKworI2luY2x1ZGUgIkRhdGVUaW1lRmllbGRFbGVt
ZW50cy5oIgorCisjaW5jbHVkZSAiVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmgiCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRGF0ZUNvbXBvbmVudHM7CitjbGFzcyBEYXRlVGltZUVk
aXRMYXlvdXRlcjsKK2NsYXNzIEtleWJvYXJkRXZlbnQ7CitjbGFzcyBNb3VzZUV2ZW50OworY2xh
c3MgU3RlcFJhbmdlOworCisvLyBEYXRlVGltZUVkaXRFbGVtZW50IGNsYXNzIGNvbnRhaW5zIG51
bWJlcmljIGZpZWxkIGFuZCBzeW1ib2xjIGZpZWxkIGZvcgorLy8gcmVwcmVzZW50aW5nIGRhdGUg
YW5kIHRpbWUsIHN1Y2ggYXMKKy8vICAtIFllYXIsIE1vbnRoLCBEYXkgT2YgTW9udGgKKy8vICAt
IEhvdXIsIE1pbnV0ZSwgU2Vjb25kLCBNaWxsaXNlY29uZCwgUGVyaW9kCitjbGFzcyBEYXRlVGlt
ZUVkaXRFbGVtZW50IDogcHVibGljIEhUTUxEaXZFbGVtZW50LCBwcml2YXRlIERhdGVUaW1lRmll
bGRFbGVtZW50OjpGaWVsZEV2ZW50SGFuZGxlciwgcHJpdmF0ZSBTcGluQnV0dG9uRWxlbWVudDo6
U3RlcEFjdGlvbkhhbmRsZXIgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKERhdGVUaW1lRWRp
dEVsZW1lbnQpOworcHVibGljOgorICAgIGZyaWVuZCBjbGFzcyBEYXRlVGltZUVkaXRMYXlvdXRl
cjsKKworICAgIC8vIEVkaXRDb250cm9sRXZlbnRIYW5kbGVyIGltcGxlbWVudGVyIG11c3QgY2Fs
bCByZW1vdmVFdmVudEhhbmRsZXIgd2hlbgorICAgIC8vIGl0IGRvZXNuJ3QgaGFuZGxlIGV2ZW50
LCBlLmcuIGF0IGRlc3RydWN0aW9uLgorICAgIGNsYXNzIEVkaXRDb250cm9sRXZlbnRIYW5kbGVy
IHsKKyAgICBwdWJsaWM6CisgICAgICAgIHZpcnR1YWwgfkVkaXRDb250cm9sRXZlbnRIYW5kbGVy
KCkgeyB9CisgICAgICAgIHZpcnR1YWwgdm9pZCBlZGl0Q29udHJvbFZhbHVlQ2hhbmdlZCgpID0g
MDsKKyAgICB9OworCisgICAgc3RhdGljIFBhc3NSZWZQdHI8RGF0ZVRpbWVFZGl0RWxlbWVudD4g
Y3JlYXRlKERvY3VtZW50KiwgRWRpdENvbnRyb2xFdmVudEhhbmRsZXImLCBjb25zdCBTdGVwUmFu
Z2UmKTsKKworICAgIHZpcnR1YWwgfkRhdGVUaW1lRWRpdEVsZW1lbnQoKTsKKyAgICB2aXJ0dWFs
IHZvaWQgZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCopIE9WRVJSSURFOworICAgIHZvaWQgZGlz
YWJsZWRBdHRyaWJ1dGVDaGFuZ2VkKCkgeyBkaXNhYmxlKCk7IH0KKyAgICB2b2lkIHJlYWRvbmx5
QXR0cmlidXRlQ2hhbmdlZCgpIHsgZGlzYWJsZSgpOyB9CisgICAgdm9pZCByZW1vdmVFdmVudEhh
bmRsZXIoKSB7IG1fZWRpdENvbnRyb2xFdmVudEhhbmRsZXIgPSAwOyB9CisgICAgdm9pZCBzZXRM
YXlvdXQoY29uc3QgU3RlcFJhbmdlJik7CisgICAgdm9pZCBzZXRWYWx1ZUFzRW1wdHkoKTsKKyAg
ICB2b2lkIHNldFZhbHVlQXNEYXRlKGNvbnN0IERhdGVDb21wb25lbnRzJik7CisgICAgZG91Ymxl
IHZhbHVlQXNEb3VibGUoKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBzdGF0aWMgY29uc3QgaW50
IEludmFsaWRGaWVsZEluZGV4ID0gLTE7CisKKyAgICAvLyBUaW1lIGNhbiBiZSByZXByZXNlbnQg
YXQgbW9zdCBmaXZlIGZpZWxkcywgc3VjaCBhcworICAgIC8vICAxLiBob3VyCisgICAgLy8gIDIu
IG1pbnV0ZQorICAgIC8vICAzLiBzZWNvbmQKKyAgICAvLyAgNC4gbWlsbGlzZWNvbmQKKyAgICAv
LyAgNS4gcGVyaW9kKEFNL1BNKQorICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4aW11bU51bWJlck9m
RmllbGRzID0gNTsKKworICAgIERhdGVUaW1lRWRpdEVsZW1lbnQoRG9jdW1lbnQqLCBFZGl0Q29u
dHJvbEV2ZW50SGFuZGxlciYpOworCisgICAgdm9pZCBkaXNhYmxlKCk7CisgICAgdmlydHVhbCBi
b29sIGRpc2FibGVkKCkgY29uc3QgT1ZFUlJJREU7CisgICAgRGF0ZVRpbWVGaWVsZEVsZW1lbnQq
IGZpZWxkQXQoaW50KSBjb25zdDsKKyAgICB2b2lkIGhhbmRsZUtleWJvYXJkRXZlbnQoS2V5Ym9h
cmRFdmVudCopOworICAgIHZvaWQgaGFuZGxlTW91c2VFdmVudChNb3VzZUV2ZW50Kik7CisgICAg
aW50IG5leHRGaWVsZEluZGV4KGludCkgY29uc3Q7CisgICAgaW50IHByZXZpb3VzRmllbGRJbmRl
eChpbnQpIGNvbnN0OworICAgIGJvb2wgcmVhZE9ubHkoKSBjb25zdDsKKyAgICB2b2lkIHJlc2V0
TGF5b3V0KCk7CisgICAgdm9pZCBzZXRGb2N1c0ZpZWxkKGludCk7CisKKyAgICAvLyBEYXRlVGlt
ZUZpZWxkRWxlbWVudDo6RmllbGRFdmVudEhhbmRsZXIgZnVuY3Rpb25zLgorICAgIHZpcnR1YWwg
dm9pZCBtb3ZlVG9OZXh0RmllbGQoKSBPVkVSUklERSBGSU5BTDsKKyAgICB2aXJ0dWFsIHZvaWQg
ZmllbGRWYWx1ZUNoYW5nZWQoKSBPVkVSUklERSBGSU5BTDsKKworICAgIC8vIFNwaW5CdXR0b25F
bGVtZW50OjpTdGVwQWN0aW9uSGFuZGxlciBmdW5jdGlvbnMuCisgICAgdmlydHVhbCB2b2lkIHNw
aW5CdXR0b25TdGVwRG93bigpIE9WRVJSSURFIEZJTkFMOworICAgIHZpcnR1YWwgdm9pZCBzcGlu
QnV0dG9uU3RlcFVwKCkgT1ZFUlJJREUgRklOQUw7CisKKyAgICBFZGl0Q29udHJvbEV2ZW50SGFu
ZGxlciogbV9lZGl0Q29udHJvbEV2ZW50SGFuZGxlcjsKKyAgICBSZWZQdHI8RGF0ZVRpbWVGaWVs
ZEVsZW1lbnQ+IG1faG91cjExRmllbGQ7CisgICAgUmVmUHRyPERhdGVUaW1lRmllbGRFbGVtZW50
PiBtX2hvdXIxMkZpZWxkOworICAgIFJlZlB0cjxEYXRlVGltZUZpZWxkRWxlbWVudD4gbV9ob3Vy
MjRGaWVsZDsKKyAgICBSZWZQdHI8RGF0ZVRpbWVGaWVsZEVsZW1lbnQ+IG1faG91cjIzRmllbGQ7
CisgICAgUmVmUHRyPERhdGVUaW1lRmllbGRFbGVtZW50PiBtX21pbGxpc2Vjb25kRmllbGQ7Cisg
ICAgUmVmUHRyPERhdGVUaW1lRmllbGRFbGVtZW50PiBtX21pbnV0ZUZpZWxkOworICAgIFJlZlB0
cjxEYXRlVGltZUZpZWxkRWxlbWVudD4gbV9wZXJpb2RGaWVsZDsKKyAgICBSZWZQdHI8RGF0ZVRp
bWVGaWVsZEVsZW1lbnQ+IG1fc2Vjb25kRmllbGQ7CisgICAgUmVmUHRyPFNwaW5CdXR0b25FbGVt
ZW50PiBtX3NwaW5CdXR0b247CisgICAgRGF0ZVRpbWVGaWVsZEVsZW1lbnQqIG1fZmllbGRzW21h
eGltdW1OdW1iZXJPZkZpZWxkc107CisgICAgaW50IG1fZm9jdXNGaWVsZEluZGV4OworICAgIGlu
dCBtX251bWJlck9mRmllbGRzOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5k
aWYKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvRGF0ZVRp
bWVGaWVsZEVsZW1lbnRzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0RhdGVUaW1l
RmllbGRFbGVtZW50cy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDU1NTA2Y2JjNGZiMTY3OWUzYmM4MzI5MDc3
YTdjOWU0YjQ1OTAwYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hh
ZG93L0RhdGVUaW1lRmllbGRFbGVtZW50cy5jcHAKQEAgLTAsMCArMSwzNjAgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisgKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorICogQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoSU5QVVRfVFlQRV9U
SU1FX01VTFRJUExFX0ZJRUxEUykKKworI2luY2x1ZGUgIkRhdGVUaW1lRmllbGRFbGVtZW50cy5o
IgorCisjaW5jbHVkZSAiRGF0ZUNvbXBvbmVudHMuaCIKKyNpbmNsdWRlICJEYXRlVGltZUZvcm1h
dC5oIgorI2luY2x1ZGUgIkVsZW1lbnRTaGFkb3cuaCIKKyNpbmNsdWRlICJFdmVudEhhbmRsZXIu
aCIKKyNpbmNsdWRlICJIVE1MSW5wdXRFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTE5hbWVzLmgi
CisjaW5jbHVkZSAiS2V5Ym9hcmRFdmVudC5oIgorI2luY2x1ZGUgIk1vdXNlRXZlbnQuaCIKKyNp
bmNsdWRlICJUZXh0LmgiCisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK3VzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CisKK3N0YXRp
YyBjb25zdCBpbnQgaG91ckluTWlsbGlzZWNvbmQgPSAzNjAwICogMTAwMDsKK3N0YXRpYyBjb25z
dCBpbnQgbWludXRlSW5NaWxsaXNlY29uZCA9IDYwICogMTAwMDsKK3N0YXRpYyBjb25zdCBpbnQg
c2Vjb25kSW5NaWxsaXNlY29uZCA9IDEwMDA7CisKK3N0YXRpYyBzaXplX3QgZGlzcGxheVNpemVP
Zk51bWJlcihpbnQgdmFsdWUpCit7CisgICAgQVNTRVJUKHZhbHVlID49IDApOworCisgICAgaWYg
KCF2YWx1ZSkKKyAgICAgICAgcmV0dXJuIDE7CisKKyAgICBpbnQgbnVtYmVyT2ZEaWdpdHMgPSAw
OworICAgIHdoaWxlICh2YWx1ZSkgeworICAgICAgICB2YWx1ZSAvPSAxMDsKKyAgICAgICAgKytu
dW1iZXJPZkRpZ2l0czsKKyAgICB9CisKKyAgICByZXR1cm4gbnVtYmVyT2ZEaWdpdHM7Cit9CisK
K0RhdGVUaW1lRmllbGRFbGVtZW50OjpEYXRlVGltZUZpZWxkRWxlbWVudChEb2N1bWVudCogZG9j
dW1lbnQsIEZpZWxkRXZlbnRIYW5kbGVyJiBmaWVsZEV2ZW50SGFuZGxlciwgY29uc3QgQXRvbWlj
U3RyaW5nJiBzaGFkb3dQc2V1ZG9JZCwgaW50IHVuaXRJbk1pbGxpc2Vjb25kICkKKyAgICA6IEhU
TUxFbGVtZW50KHNwYW5UYWcsIGRvY3VtZW50KQorICAgICwgbV9maWVsZEV2ZW50SGFuZGxlcigm
ZmllbGRFdmVudEhhbmRsZXIpCisgICAgLCBtX3VuaXRJbk1pbGxpc2Vjb25kKHVuaXRJbk1pbGxp
c2Vjb25kKQoreworICAgIHNldFNoYWRvd1BzZXVkb0lkKHNoYWRvd1BzZXVkb0lkKTsKK30KKwor
dm9pZCBEYXRlVGltZUZpZWxkRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCogZXZl
bnQpCit7CisgICAgaWYgKGV2ZW50LT5pc0tleWJvYXJkRXZlbnQoKSAmJiBldmVudC0+dHlwZSgp
ID09IGV2ZW50TmFtZXMoKS5rZXlkb3duRXZlbnQpIHsKKyAgICAgICAgS2V5Ym9hcmRFdmVudCog
a2V5Ym9hcmRFdmVudCA9IHN0YXRpY19jYXN0PEtleWJvYXJkRXZlbnQqPihldmVudCk7CisKKyAg
ICAgICAgY29uc3QgU3RyaW5nJiBrZXlJZGVudGlmaWVyID0ga2V5Ym9hcmRFdmVudC0+a2V5SWRl
bnRpZmllcigpOworCisgICAgICAgIGlmIChrZXlJZGVudGlmaWVyID09ICJEb3duIikgeworICAg
ICAgICAgICAga2V5Ym9hcmRFdmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKKyAgICAgICAgICAg
IHN0ZXBEb3duKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBp
ZiAoa2V5SWRlbnRpZmllciA9PSAiVXAiKSB7CisgICAgICAgICAgICBrZXlib2FyZEV2ZW50LT5z
ZXREZWZhdWx0SGFuZGxlZCgpOworICAgICAgICAgICAgc3RlcFVwKCk7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoa2V5SWRlbnRpZmllciA9PSAiVSswMDA4
IikgeworICAgICAgICAgICAga2V5Ym9hcmRFdmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKKyAg
ICAgICAgICAgIHNldFZhbHVlQXNFbXB0eShEaXNwYXRjaEV2ZW50KTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICghZXZlbnQtPmRlZmF1bHRIYW5kbGVk
KCkpCisgICAgICAgIEhUTUxFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKGV2ZW50KTsKK30K
Kwordm9pZCBEYXRlVGltZUZpZWxkRWxlbWVudDo6ZGlzYWJsZSgpCit7CisgICAgLy8gU2V0IGRp
c2FibGVkIEhUTUwgYXR0cmlidXRlIHRvIGNoYW5nZSBhcHBlcmFuY2UuCisgICAgc2V0QXR0cmli
dXRlKGRpc2FibGVkQXR0ciwgZW1wdHlTdHJpbmcoKSk7CisgICAgc2V0TmVlZHNTdHlsZVJlY2Fs
YygpOworfQorCitib29sIERhdGVUaW1lRmllbGRFbGVtZW50OjpkaXNhYmxlZCgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIGZhc3RIYXNBdHRyaWJ1dGUoZGlzYWJsZWRBdHRyKTsKK30KKwordm9pZCBE
YXRlVGltZUZpZWxkRWxlbWVudDo6dXBkYXRlVmlzaWJsZVZhbHVlKEV2ZW50QmVoYXZpb3IgZXZl
bnRCZWhhdmlvcikKK3sKKyAgICBUZXh0KiBjb25zdCB0ZXh0Tm9kZSA9IHRvVGV4dChmaXJzdENo
aWxkKCkpOworICAgIGNvbnN0IFN0cmluZyBuZXdWaXNpYmxlVmFsdWUgPSB2aXNpYmxlVmFsdWUo
KTsKKyAgICBBU1NFUlQobmV3VmlzaWJsZVZhbHVlLmxlbmd0aCgpID4gMCk7CisKKyAgICBpZiAo
dGV4dE5vZGUtPndob2xlVGV4dCgpID09IG5ld1Zpc2libGVWYWx1ZSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgRXhjZXB0aW9uQ29kZSBlYzsKKyAgICB0ZXh0Tm9kZS0+cmVwbGFjZVdob2xlVGV4
dChuZXdWaXNpYmxlVmFsdWUsIGVjKTsKKworICAgIGlmIChldmVudEJlaGF2aW9yID09IERpc3Bh
dGNoRXZlbnQgJiYgbV9maWVsZEV2ZW50SGFuZGxlcikKKyAgICAgICAgbV9maWVsZEV2ZW50SGFu
ZGxlci0+ZmllbGRWYWx1ZUNoYW5nZWQoKTsKK30KKworZG91YmxlIERhdGVUaW1lRmllbGRFbGVt
ZW50Ojp2YWx1ZUFzRG91YmxlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gaGFzVmFsdWUoKSA/IHN0
YXRpY19jYXN0PGRvdWJsZT4odmFsdWVBc0ludGVnZXIoKSkgKiBtX3VuaXRJbk1pbGxpc2Vjb25k
IDogc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjpxdWlldF9OYU4oKTsKK30KKworRGF0ZVRp
bWVIb3VyRmllbGRFbGVtZW50OjpEYXRlVGltZUhvdXJGaWVsZEVsZW1lbnQoRG9jdW1lbnQqIGRv
Y3VtZW50LCBGaWVsZEV2ZW50SGFuZGxlciYgZmllbGRFdmVudEhhbmRsZXIsIGNvbnN0IEF0b21p
Y1N0cmluZyYgc2hhZG93UHNldWRvSWQsIGludCBtaW5pbXVtLCBpbnQgbWF4aW11bSkKKyAgICA6
IERhdGVUaW1lTnVtZXJpY0ZpZWxkRWxlbWVudChkb2N1bWVudCwgZmllbGRFdmVudEhhbmRsZXIs
IHNoYWRvd1BzZXVkb0lkLCBob3VySW5NaWxsaXNlY29uZCwgbWluaW11bSwgbWF4aW11bSkKKyAg
ICAsIG1fYWxpZ25tZW50KG1heGltdW0gKyBtYXhpbXVtICUgMikKK3sKKyAgICBBU1NFUlQoKCFt
aW5pbXVtICYmIChtYXhpbXVtID09IDExIHx8IG1heGltdW0gPT0gMjMpKSB8fCAobWluaW11bSA9
PSAxICYmIChtYXhpbXVtID09IDEyIHx8IG1heGltdW0gPT0gMjQpKSk7Cit9CisKK1Bhc3NSZWZQ
dHI8RGF0ZVRpbWVIb3VyRmllbGRFbGVtZW50PiBEYXRlVGltZUhvdXJGaWVsZEVsZW1lbnQ6OmNy
ZWF0ZShEb2N1bWVudCogZG9jdW1lbnQsIEZpZWxkRXZlbnRIYW5kbGVyJiBmaWVsZEV2ZW50SGFu
ZGxlciwgY29uc3QgQXRvbWljU3RyaW5nJiBzaGFkb3dQc2V1ZG9JZCwgaW50IG1pbmltdW0sIGlu
dCBtYXhpbXVtKQoreworICAgIFJlZlB0cjxEYXRlVGltZUhvdXJGaWVsZEVsZW1lbnQ+IGZpZWxk
ID0gYWRvcHRSZWYobmV3IERhdGVUaW1lSG91ckZpZWxkRWxlbWVudChkb2N1bWVudCwgZmllbGRF
dmVudEhhbmRsZXIsIHNoYWRvd1BzZXVkb0lkLCBtaW5pbXVtLCBtYXhpbXVtKSk7CisgICAgZmll
bGQtPmFwcGVuZENoaWxkKFRleHQ6OmNyZWF0ZShkb2N1bWVudCwgZmllbGQtPnZpc2libGVWYWx1
ZSgpKSk7CisgICAgcmV0dXJuIGZpZWxkOworfQorCit2b2lkIERhdGVUaW1lSG91ckZpZWxkRWxl
bWVudDo6c2V0VmFsdWVBc0ludGVnZXIoaW50IHZhbHVlQXNIb3VyMjMsIEV2ZW50QmVoYXZpb3Ig
ZXZlbnRCZWhhdmlvcikKK3sKKyAgICBjb25zdCBpbnQgdmFsdWUgPSBSYW5nZSgwLCAyMykuZW5z
dXJlSW5SYW5nZSh2YWx1ZUFzSG91cjIzKSAlIG1fYWxpZ25tZW50OworICAgIERhdGVUaW1lTnVt
ZXJpY0ZpZWxkRWxlbWVudDo6c2V0VmFsdWVBc0ludGVnZXIocmFuZ2UoKS5taW5pbXVtICYmICF2
YWx1ZSA/IG1fYWxpZ25tZW50IDogdmFsdWUsIGV2ZW50QmVoYXZpb3IpOworfQorCitpbnQgRGF0
ZVRpbWVIb3VyRmllbGRFbGVtZW50Ojp2YWx1ZUFzSW50ZWdlcigpIGNvbnN0Cit7CisgICAgcmV0
dXJuIGhhc1ZhbHVlKCkgPyBEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQ6OnZhbHVlQXNJbnRl
Z2VyKCkgJSBtX2FsaWdubWVudCA6IC0xOworfQorCitEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1l
bnQ6OlJhbmdlOjpSYW5nZShpbnQgbWluaW11bSwgaW50IG1heGltdW0pCisgICAgOiBtYXhpbXVt
KG1heGltdW0pCisgICAgLCBtaW5pbXVtKG1pbmltdW0pCit7CisgICAgQVNTRVJUKG1pbmltdW0g
PD0gbWF4aW11bSk7Cit9CisKK2ludCBEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQ6OlJhbmdl
OjplbnN1cmVJblJhbmdlKGludCB2YWx1ZSkgY29uc3QKK3sKKyAgICByZXR1cm4gc3RkOjptaW4o
c3RkOjptYXgodmFsdWUsIG1pbmltdW0pLCBtYXhpbXVtKTsKK30KKworRGF0ZVRpbWVOdW1lcmlj
RmllbGRFbGVtZW50OjpEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQoRG9jdW1lbnQqIGRvY3Vt
ZW50LCBGaWVsZEV2ZW50SGFuZGxlciYgZmllbGRFdmVudEhhbmRsZXIsIGNvbnN0IEF0b21pY1N0
cmluZyYgc2hhZG93UHNldWRvSWQsIGludCB1bml0SW5NaWxsaXNlY29uZCwgaW50IG1pbmltdW0s
IGludCBtYXhpbXVtKQorICAgIDogRGF0ZVRpbWVGaWVsZEVsZW1lbnQoZG9jdW1lbnQsIGZpZWxk
RXZlbnRIYW5kbGVyLCBzaGFkb3dQc2V1ZG9JZCwgdW5pdEluTWlsbGlzZWNvbmQpCisgICAgLCBt
X2xhc3RTZXRDaGFyVGltZSgwKQorICAgICwgbV9yYW5nZShtaW5pbXVtLCBtYXhpbXVtKQorICAg
ICwgbV92YWx1ZSgwKQorICAgICwgbV9oYXNWYWx1ZShmYWxzZSkKK3sKK30KKworUGFzc1JlZlB0
cjxEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQ+IERhdGVUaW1lTnVtZXJpY0ZpZWxkRWxlbWVu
dDo6Y3JlYXRlKERvY3VtZW50KiBkb2N1bWVudCwgRmllbGRFdmVudEhhbmRsZXImIGZpZWxkRXZl
bnRIYW5kbGVyLCBjb25zdCBBdG9taWNTdHJpbmcmIHNoYWRvd1BzZXVkb0lkLCBpbnQgdW5pdElu
TWlsbGlzZWNvbmQsIGludCBtaW5pbXVtLCBpbnQgbWF4aW11bSkKK3sKKyAgICBSZWZQdHI8RGF0
ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50PiBmaWVsZCA9IGFkb3B0UmVmKG5ldyBEYXRlVGltZU51
bWVyaWNGaWVsZEVsZW1lbnQoZG9jdW1lbnQsIGZpZWxkRXZlbnRIYW5kbGVyLCBzaGFkb3dQc2V1
ZG9JZCwgdW5pdEluTWlsbGlzZWNvbmQsIG1pbmltdW0sIG1heGltdW0pKTsKKyAgICBmaWVsZC0+
YXBwZW5kQ2hpbGQoVGV4dDo6Y3JlYXRlKGRvY3VtZW50LCBmaWVsZC0+dmlzaWJsZVZhbHVlKCkp
KTsKKyAgICByZXR1cm4gZmllbGQ7Cit9CisKK3ZvaWQgRGF0ZVRpbWVOdW1lcmljRmllbGRFbGVt
ZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBldmVudCkKK3sKKyAgICBpZiAoZXZlbnQt
PmlzS2V5Ym9hcmRFdmVudCgpICYmIGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmtleWRv
d25FdmVudCkgeworICAgICAgICBLZXlib2FyZEV2ZW50KiBjb25zdCBrZXlib2FyZEV2ZW50ID0g
c3RhdGljX2Nhc3Q8S2V5Ym9hcmRFdmVudCo+KGV2ZW50KTsKKyAgICAgICAgY29uc3QgaW50IGRp
Z2l0ID0ga2V5Ym9hcmRFdmVudC0+a2V5Q29kZSgpIC0gJzAnOworICAgICAgICBpZiAoZGlnaXQg
Pj0gMCAmJiBkaWdpdCA8PSA5KSB7CisgICAgICAgICAgICBrZXlib2FyZEV2ZW50LT5zZXREZWZh
dWx0SGFuZGxlZCgpOworICAgICAgICAgICAgbV92YWx1ZSA9IGVuc3VyZUluUmFuZ2UoaXNDb250
aW51b3NLZXlib2FyZEV2ZW50KGtleWJvYXJkRXZlbnQpID8gbV92YWx1ZSAqIDEwICsgZGlnaXQg
OiBkaWdpdCk7CisgICAgICAgICAgICBtX2xhc3RTZXRDaGFyVGltZSA9IGV2ZW50LT50aW1lU3Rh
bXAoKTsKKyAgICAgICAgICAgIG1faGFzVmFsdWUgPSB0cnVlOworICAgICAgICAgICAgdXBkYXRl
VmlzaWJsZVZhbHVlKERpc3BhdGNoRXZlbnQpOworICAgICAgICAgICAgaWYgKG1fdmFsdWUgKiAx
MCA+IG1fcmFuZ2UubWF4aW11bSAmJiBtX2ZpZWxkRXZlbnRIYW5kbGVyKQorICAgICAgICAgICAg
ICAgIG1fZmllbGRFdmVudEhhbmRsZXItPm1vdmVUb05leHRGaWVsZCgpOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisgICAgfQorCisgICAgRGF0ZVRpbWVGaWVsZEVsZW1lbnQ6OmRl
ZmF1bHRFdmVudEhhbmRsZXIoZXZlbnQpOworfQorCitib29sIERhdGVUaW1lTnVtZXJpY0ZpZWxk
RWxlbWVudDo6aXNDb250aW51b3NLZXlib2FyZEV2ZW50KEtleWJvYXJkRXZlbnQqIGV2ZW50KSBj
b25zdAoreworICAgIGNvbnN0IHVuc2lnbmVkIENvbnRpbnVvdXNLZXlib2FyZEV2ZW50VGhyZXNo
b2xkID0gNzAwOworICAgIHJldHVybiBtX2hhc1ZhbHVlICYmIGV2ZW50LT50aW1lU3RhbXAoKSAt
IG1fbGFzdFNldENoYXJUaW1lIDwgQ29udGludW91c0tleWJvYXJkRXZlbnRUaHJlc2hvbGQ7Cit9
CisKK3ZvaWQgRGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50OjpzZXRWYWx1ZUFzRW1wdHkoRXZl
bnRCZWhhdmlvciBldmVudEJlaGF2aW9yKQoreworICAgIG1fdmFsdWUgPSAwOworICAgIG1faGFz
VmFsdWUgPSBmYWxzZTsKKyAgICB1cGRhdGVWaXNpYmxlVmFsdWUoZXZlbnRCZWhhdmlvcik7Cit9
CisKK3ZvaWQgRGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50OjpzZXRWYWx1ZUFzSW50ZWdlcihp
bnQgdmFsdWUsIEV2ZW50QmVoYXZpb3IgZXZlbnRCZWhhdmlvcikKK3sKKyAgICBtX3ZhbHVlID0g
ZW5zdXJlSW5SYW5nZSh2YWx1ZSk7CisgICAgbV9oYXNWYWx1ZSA9IHRydWU7CisgICAgdXBkYXRl
VmlzaWJsZVZhbHVlKGV2ZW50QmVoYXZpb3IpOworfQorCit2b2lkIERhdGVUaW1lTnVtZXJpY0Zp
ZWxkRWxlbWVudDo6c3RlcERvd24oKQoreworICAgIGlmIChtX2hhc1ZhbHVlKQorICAgICAgICBt
X3ZhbHVlID0gbV92YWx1ZSA9PSBtX3JhbmdlLm1pbmltdW0gPyBtX3JhbmdlLm1heGltdW0gOiBl
bnN1cmVJblJhbmdlKG1fdmFsdWUgLSAxKTsKKyAgICBlbHNlCisgICAgICAgIG1fdmFsdWUgPSBt
X3JhbmdlLm1heGltdW07CisKKyAgICBtX2hhc1ZhbHVlID0gdHJ1ZTsKKyAgICB1cGRhdGVWaXNp
YmxlVmFsdWUoRGlzcGF0Y2hFdmVudCk7Cit9CisKK3ZvaWQgRGF0ZVRpbWVOdW1lcmljRmllbGRF
bGVtZW50OjpzdGVwVXAoKQoreworICAgIGlmIChtX2hhc1ZhbHVlKQorICAgICAgICBtX3ZhbHVl
ID0gbV92YWx1ZSA9PSBtX3JhbmdlLm1heGltdW0gPyBtX3JhbmdlLm1pbmltdW0gOiBlbnN1cmVJ
blJhbmdlKG1fdmFsdWUgKyAxKTsKKyAgICBlbHNlCisgICAgICAgIG1fdmFsdWUgPSBtX3Jhbmdl
Lm1pbmltdW07CisKKyAgICBtX2hhc1ZhbHVlID0gdHJ1ZTsKKyAgICB1cGRhdGVWaXNpYmxlVmFs
dWUoRGlzcGF0Y2hFdmVudCk7Cit9CisKK1N0cmluZyBEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1l
bnQ6OnZhbHVlKCkgY29uc3QKK3sKKyAgICBpZiAoIW1faGFzVmFsdWUpCisgICAgICAgIHJldHVy
biBlbXB0eVN0cmluZygpOworCisgICAgaWYgKG1fcmFuZ2UubWF4aW11bSA+IDk5OSkKKyAgICAg
ICAgcmV0dXJuIFN0cmluZzo6bnVtYmVyKG1fdmFsdWUpOworCisgICAgaWYgKG1fcmFuZ2UubWF4
aW11bSA+IDk5KQorICAgICAgICByZXR1cm4gU3RyaW5nOjpmb3JtYXQoIiUwM2QiLCBtX3ZhbHVl
KTsKKworICAgIHJldHVybiBTdHJpbmc6OmZvcm1hdCgiJTAyZCIsIG1fdmFsdWUpOworfQorCitp
bnQgRGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50Ojp2YWx1ZUFzSW50ZWdlcigpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1faGFzVmFsdWUgPyBtX3ZhbHVlIDogLTE7Cit9CisKK1N0cmluZyBEYXRl
VGltZU51bWVyaWNGaWVsZEVsZW1lbnQ6OnZpc2libGVWYWx1ZSgpIGNvbnN0Cit7CisgICAgaWYg
KG1faGFzVmFsdWUpCisgICAgICAgIHJldHVybiB2YWx1ZSgpOworCisgICAgU3RyaW5nQnVpbGRl
ciBidWlsZGVyOworICAgIGZvciAoaW50IG51bWJlck9mRGFzaHMgPSBzdGQ6Om1heChkaXNwbGF5
U2l6ZU9mTnVtYmVyKG1fcmFuZ2UubWF4aW11bSksIGRpc3BsYXlTaXplT2ZOdW1iZXIobV9yYW5n
ZS5taW5pbXVtKSk7IG51bWJlck9mRGFzaHM7IC0tbnVtYmVyT2ZEYXNocykKKyAgICAgICAgYnVp
bGRlci5hcHBlbmQoJy0nKTsKKyAgICByZXR1cm4gYnVpbGRlci50b1N0cmluZygpOworfQorCitE
YXRlVGltZVN5bWJvbGljRmllbGRFbGVtZW50OjpEYXRlVGltZVN5bWJvbGljRmllbGRFbGVtZW50
KERvY3VtZW50KiBkb2N1bWVudCwgRmllbGRFdmVudEhhbmRsZXImIGZpZWxkRXZlbnRIYW5kbGVy
LCBjb25zdCBBdG9taWNTdHJpbmcmIHNoYWRvd1BzZXVkb0lkLCBpbnQgdW5pdEluTWlsbGlzZWNv
bmQsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBzeW1ib2xzKQorICAgIDogRGF0ZVRpbWVGaWVsZEVs
ZW1lbnQoZG9jdW1lbnQsIGZpZWxkRXZlbnRIYW5kbGVyLCBzaGFkb3dQc2V1ZG9JZCwgdW5pdElu
TWlsbGlzZWNvbmQpCisgICAgLCBtX3NlbGVjdGVkSW5kZXgoLTEpCisgICAgLCBtX3N5bWJvbHMo
c3ltYm9scykKK3sKKyAgICBBU1NFUlQoIXN5bWJvbHMuaXNFbXB0eSgpKTsKK30KKworUGFzc1Jl
ZlB0cjxEYXRlVGltZVN5bWJvbGljRmllbGRFbGVtZW50PiBEYXRlVGltZVN5bWJvbGljRmllbGRF
bGVtZW50OjpjcmVhdGUoRG9jdW1lbnQqIGRvY3VtZW50LCBGaWVsZEV2ZW50SGFuZGxlciYgZmll
bGRFdmVudEhhbmRsZXIsIGNvbnN0IEF0b21pY1N0cmluZyYgc2hhZG93UHNldWRvSWQsIGludCB1
bml0SW5NaWxsaXNlY29uZCwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHN5bWJvbHMpCit7CisgICAg
UmVmUHRyPERhdGVUaW1lU3ltYm9saWNGaWVsZEVsZW1lbnQ+IGZpZWxkID0gYWRvcHRSZWYobmV3
IERhdGVUaW1lU3ltYm9saWNGaWVsZEVsZW1lbnQoZG9jdW1lbnQsIGZpZWxkRXZlbnRIYW5kbGVy
LCBzaGFkb3dQc2V1ZG9JZCwgdW5pdEluTWlsbGlzZWNvbmQsIHN5bWJvbHMpKTsKKyAgICBmaWVs
ZC0+YXBwZW5kQ2hpbGQoVGV4dDo6Y3JlYXRlKGRvY3VtZW50LCBmaWVsZC0+dmlzaWJsZVZhbHVl
KCkpKTsKKyAgICByZXR1cm4gZmllbGQ7Cit9CisKK3ZvaWQgRGF0ZVRpbWVTeW1ib2xpY0ZpZWxk
RWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCogZXZlbnQpCit7CisgICAgaWYgKGV2
ZW50LT5pc0tleWJvYXJkRXZlbnQoKSAmJiBldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5r
ZXlwcmVzc0V2ZW50KSB7CisgICAgICAgIEtleWJvYXJkRXZlbnQqIGtleWJvYXJkRXZlbnQgPSBz
dGF0aWNfY2FzdDxLZXlib2FyZEV2ZW50Kj4oZXZlbnQpOworICAgICAgICBjb25zdCBpbnQgcmF3
Q2hhckNvZGUgPSBrZXlib2FyZEV2ZW50LT5jaGFyQ29kZSgpOworICAgICAgICBjb25zdCBpbnQg
Y2hhckNvZGUgPSByYXdDaGFyQ29kZSA+PSAnYScgJiYgcmF3Q2hhckNvZGUgPD0gJ3onID8gcmF3
Q2hhckNvZGUgKyAnQScgLSAnYScgOiByYXdDaGFyQ29kZTsKKyAgICAgICAgaWYgKGNoYXJDb2Rl
ID49ICdBJyAmJiBjaGFyQ29kZSA8PSAnWicpIHsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQg
aW5kZXggPSAwOyBpbmRleCA8IG1fc3ltYm9scy5zaXplKCk7ICsraW5kZXgpIHsKKyAgICAgICAg
ICAgICAgICBpZiAobV9zeW1ib2xzW2luZGV4XVswXSA9PSBjaGFyQ29kZSkgeworICAgICAgICAg
ICAgICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKKyAgICAgICAgICAgICAgICAg
ICAgc2V0VmFsdWVBc0ludGVnZXIoaW5kZXgsIERpc3BhdGNoRXZlbnQpOworICAgICAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgfQorCisgICAgRGF0ZVRpbWVGaWVsZEVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRs
ZXIoZXZlbnQpOworfQorCit2b2lkIERhdGVUaW1lU3ltYm9saWNGaWVsZEVsZW1lbnQ6OnNldFZh
bHVlQXNFbXB0eShFdmVudEJlaGF2aW9yIGV2ZW50QmVoYXZpb3IpCit7CisgICAgbV9zZWxlY3Rl
ZEluZGV4ID0gSW52YWxpZEluZGV4OworICAgIHVwZGF0ZVZpc2libGVWYWx1ZShldmVudEJlaGF2
aW9yKTsKK30KKwordm9pZCBEYXRlVGltZVN5bWJvbGljRmllbGRFbGVtZW50OjpzZXRWYWx1ZUFz
SW50ZWdlcihpbnQgbmV3U2VsZWN0ZWRJbmRleCwgRXZlbnRCZWhhdmlvciBldmVudEJlaGF2aW9y
KQoreworICAgIG1fc2VsZWN0ZWRJbmRleCA9IHN0ZDo6bWF4KDAsIHN0ZDo6bWluKG5ld1NlbGVj
dGVkSW5kZXgsIHN0YXRpY19jYXN0PGludD4obV9zeW1ib2xzLnNpemUoKSAtIDEpKSk7CisgICAg
dXBkYXRlVmlzaWJsZVZhbHVlKGV2ZW50QmVoYXZpb3IpOworfQorCit2b2lkIERhdGVUaW1lU3lt
Ym9saWNGaWVsZEVsZW1lbnQ6OnN0ZXBEb3duKCkKK3sKKyAgICBjb25zdCBpbnQgc2l6ZSA9IG1f
c3ltYm9scy5zaXplKCk7CisgICAgbV9zZWxlY3RlZEluZGV4ID0gaGFzVmFsdWUoKSA/IChtX3Nl
bGVjdGVkSW5kZXggKyBzaXplIC0gMSkgJSBzaXplIDogc2l6ZSAtIDE7CisgICAgdXBkYXRlVmlz
aWJsZVZhbHVlKERpc3BhdGNoRXZlbnQpOworfQorCit2b2lkIERhdGVUaW1lU3ltYm9saWNGaWVs
ZEVsZW1lbnQ6OnN0ZXBVcCgpCit7CisgICAgbV9zZWxlY3RlZEluZGV4ID0gaGFzVmFsdWUoKSA/
IChtX3NlbGVjdGVkSW5kZXggKyAxKSAlIG1fc3ltYm9scy5zaXplKCkgOiAwOworICAgIHVwZGF0
ZVZpc2libGVWYWx1ZShEaXNwYXRjaEV2ZW50KTsKK30KKworU3RyaW5nIERhdGVUaW1lU3ltYm9s
aWNGaWVsZEVsZW1lbnQ6OnZhbHVlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gaGFzVmFsdWUoKSA/
IG1fc3ltYm9sc1ttX3NlbGVjdGVkSW5kZXhdIDogZW1wdHlTdHJpbmcoKTsKK30KKworaW50IERh
dGVUaW1lU3ltYm9saWNGaWVsZEVsZW1lbnQ6OnZhbHVlQXNJbnRlZ2VyKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbV9zZWxlY3RlZEluZGV4OworfQorCitTdHJpbmcgRGF0ZVRpbWVTeW1ib2xpY0Zp
ZWxkRWxlbWVudDo6dmlzaWJsZVZhbHVlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gaGFzVmFsdWUo
KSA/IG1fc3ltYm9sc1ttX3NlbGVjdGVkSW5kZXhdIDogIi0tIjsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hh
ZG93L0RhdGVUaW1lRmllbGRFbGVtZW50cy5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cv
RGF0ZVRpbWVGaWVsZEVsZW1lbnRzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODkwMGViNDM5MTMzMjFkZDIxMDQ2
MjA0MjQ3ZTM1YzZmMzMyMGFhNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvc2hhZG93L0RhdGVUaW1lRmllbGRFbGVtZW50cy5oCkBAIC0wLDAgKzEsMTgyIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyAqIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBE
QU1BR0UuCisgKi8KKworI2lmbmRlZiBEYXRlVGltZUZpZWxkRWxlbWVudHNfaAorI2RlZmluZSBE
YXRlVGltZUZpZWxkRWxlbWVudHNfaAorCisjaWYgRU5BQkxFKElOUFVUX1RZUEVfVElNRV9NVUxU
SVBMRV9GSUVMRFMpCisKKyNpbmNsdWRlICJIVE1MRGl2RWxlbWVudC5oIgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK2NsYXNzIEtleWJvYXJkRXZlbnQ7CitjbGFzcyBNb3VzZUV2ZW50OworCisv
LyBEYXRlVGltZUZpZWxkRWxlbWVudCBpcyBiYXNlIGNsYXNzIG9mIGRhdGUgdGltZSBmaWVsZCBl
bGVtZW50LgorY2xhc3MgRGF0ZVRpbWVGaWVsZEVsZW1lbnQgOiBwdWJsaWMgSFRNTEVsZW1lbnQg
eworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKERhdGVUaW1lRmllbGRFbGVtZW50KTsKKworcHVi
bGljOgorICAgIGVudW0gRXZlbnRCZWhhdmlvciB7CisgICAgICAgIERpc3BhdGNoTm9FdmVudCwK
KyAgICAgICAgRGlzcGF0Y2hFdmVudCwKKyAgICB9OworCisgICAgLy8gRmllbGRFdmVudEhhbmRs
ZXIgaW1wbGVtZW50ZXIgbXVzdCBjYWxsIHJlbW92ZUV2ZW50SGFuZGxlciB3aGVuCisgICAgLy8g
aXQgZG9lc24ndCBoYW5kbGUgZXZlbnQsIGUuZy4gYXQgZGVzdHJ1Y3Rpb24uCisgICAgY2xhc3Mg
RmllbGRFdmVudEhhbmRsZXIgeworICAgIHB1YmxpYzoKKyAgICAgICAgdmlydHVhbCB+RmllbGRF
dmVudEhhbmRsZXIoKSB7IH0KKyAgICAgICAgdmlydHVhbCB2b2lkIGZpZWxkVmFsdWVDaGFuZ2Vk
KCkgPSAwOworICAgICAgICB2aXJ0dWFsIHZvaWQgbW92ZVRvTmV4dEZpZWxkKCkgPSAwOworICAg
IH07CisKKyAgICB2aXJ0dWFsIHZvaWQgZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCopOworICAg
IHZvaWQgZGlzYWJsZSgpOworICAgIHZpcnR1YWwgYm9vbCBkaXNhYmxlZCgpIGNvbnN0IE9WRVJS
SURFOworICAgIHZpcnR1YWwgYm9vbCBoYXNWYWx1ZSgpIGNvbnN0ID0gMDsKKyAgICB2b2lkIHJl
bW92ZUV2ZW50SGFuZGxlcigpIHsgbV9maWVsZEV2ZW50SGFuZGxlciA9IDA7IH0KKyAgICB2aXJ0
dWFsIHZvaWQgc2V0VmFsdWVBc0VtcHR5KEV2ZW50QmVoYXZpb3IgPSBEaXNwYXRjaE5vRXZlbnQp
ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0VmFsdWVBc0ludGVnZXIoaW50LCBFdmVudEJlaGF2
aW9yID0gRGlzcGF0Y2hOb0V2ZW50KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHN0ZXBEb3duKCkg
PSAwOworICAgIHZpcnR1YWwgdm9pZCBzdGVwVXAoKSA9IDA7CisgICAgdmlydHVhbCBTdHJpbmcg
dmFsdWUoKSBjb25zdCA9IDA7CisgICAgZG91YmxlIHZhbHVlQXNEb3VibGUoKSBjb25zdDsKKyAg
ICB2aXJ0dWFsIGludCB2YWx1ZUFzSW50ZWdlcigpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIFN0
cmluZyB2aXNpYmxlVmFsdWUoKSBjb25zdCA9IDA7CisKK3Byb3RlY3RlZDoKKyAgICBEYXRlVGlt
ZUZpZWxkRWxlbWVudChEb2N1bWVudCosIEZpZWxkRXZlbnRIYW5kbGVyJiwgY29uc3QgQXRvbWlj
U3RyaW5nJiwgaW50KTsKKworICAgIGludCB1bml0SW5NaWxsaXNlY29uZCgpIGNvbnN0IHsgcmV0
dXJuIG1fdW5pdEluTWlsbGlzZWNvbmQ7IH0KKyAgICB2b2lkIHVwZGF0ZVZpc2libGVWYWx1ZShF
dmVudEJlaGF2aW9yKTsKKworICAgIEZpZWxkRXZlbnRIYW5kbGVyKiBtX2ZpZWxkRXZlbnRIYW5k
bGVyOworICAgIGNvbnN0IGludCBtX3VuaXRJbk1pbGxpc2Vjb25kOworfTsKKworLy8gRGF0ZVRp
bWVOdW1lcmljRmllbGRFbGVtZW50IHJlcHJlc2VudHMgbnVtZXJpYyBmaWVsZCBvZiBkYXRlIHRp
bWUgZm9ybWF0LgorLy8gVGhpcyBjbGFzcyBtYXkgYmUgdXNlZCBmb3I6CisvLyAgLSBtaW51dGUK
Ky8vICAtIG1pbGxpc2Vjb25kCisvLyAgLSBtb250aAorLy8gIC0gc2Vjb25kCisvLyAgLSB5ZWFy
CitjbGFzcyBEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQgOiBwdWJsaWMgRGF0ZVRpbWVGaWVs
ZEVsZW1lbnQgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKERhdGVUaW1lTnVtZXJpY0ZpZWxk
RWxlbWVudCk7CisKK3B1YmxpYzoKKyAgICBzdHJ1Y3QgUmFuZ2UgeworICAgICAgICBSYW5nZShp
bnQgbWluaW11bSwgaW50IG1heGltdW0pOworICAgICAgICBpbnQgZW5zdXJlSW5SYW5nZShpbnQp
IGNvbnN0OworCisgICAgICAgIGludCBtYXhpbXVtOworICAgICAgICBpbnQgbWluaW11bTsKKyAg
ICB9OworCisgICAgc3RhdGljIFBhc3NSZWZQdHI8RGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50
PiBjcmVhdGUoRG9jdW1lbnQqLCBGaWVsZEV2ZW50SGFuZGxlciYsIGNvbnN0IEF0b21pY1N0cmlu
ZyYsIGludCB1bml0SW5NaWxsaXNlY29uZCwgaW50IG1pbmltdW0sIGludCBtYXhpbXVtKTsKKwor
cHJvdGVjdGVkOgorICAgIERhdGVUaW1lTnVtZXJpY0ZpZWxkRWxlbWVudChEb2N1bWVudCosIEZp
ZWxkRXZlbnRIYW5kbGVyJiwgY29uc3QgQXRvbWljU3RyaW5nJiwgaW50IHVuaXRJbk1pbGxpc2Vj
b25kLCBpbnQgbWluaW11bSwgaW50IG1heGltdW0pOworCisgICAgaW50IGVuc3VyZUluUmFuZ2Uo
aW50IHZhbHVlKSBjb25zdCB7IHJldHVybiBtX3JhbmdlLmVuc3VyZUluUmFuZ2UodmFsdWUpOyB9
CisgICAgY29uc3QgUmFuZ2UmIHJhbmdlKCkgY29uc3QgeyByZXR1cm4gbV9yYW5nZTsgfQorCisg
ICAgLy8gRGF0ZVRpbWVGaWVsZEVsZW1lbnQgZnVuY3Rpb25zLgorICAgIHZpcnR1YWwgYm9vbCBo
YXNWYWx1ZSgpIGNvbnN0IE9WRVJSSURFIEZJTkFMIHsgcmV0dXJuIG1faGFzVmFsdWU7IH0KKyAg
ICB2aXJ0dWFsIHZvaWQgc2V0VmFsdWVBc0ludGVnZXIoaW50LCBFdmVudEJlaGF2aW9yKSBPVkVS
UklERTsKKyAgICB2aXJ0dWFsIGludCB2YWx1ZUFzSW50ZWdlcigpIGNvbnN0IE9WRVJSSURFOwor
ICAgIHZpcnR1YWwgU3RyaW5nIHZpc2libGVWYWx1ZSgpIGNvbnN0IE9WRVJSSURFIEZJTkFMOwor
Citwcml2YXRlOgorICAgIGJvb2wgaXNDb250aW51b3NLZXlib2FyZEV2ZW50KEtleWJvYXJkRXZl
bnQqKSBjb25zdDsKKworICAgIC8vIERhdGVUaW1lRmllbGRFbGVtZW50IGZ1bmN0aW9ucy4KKyAg
ICB2aXJ0dWFsIHZvaWQgZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCopIE9WRVJSSURFIEZJTkFM
OworICAgIHZpcnR1YWwgdm9pZCBzZXRWYWx1ZUFzRW1wdHkoRXZlbnRCZWhhdmlvcikgT1ZFUlJJ
REUgRklOQUw7CisgICAgdmlydHVhbCB2b2lkIHN0ZXBEb3duKCkgT1ZFUlJJREUgRklOQUw7Cisg
ICAgdmlydHVhbCB2b2lkIHN0ZXBVcCgpIE9WRVJSSURFIEZJTkFMOworICAgIHZpcnR1YWwgU3Ry
aW5nIHZhbHVlKCkgY29uc3QgT1ZFUlJJREUgRklOQUw7CisKKyAgICBET01UaW1lU3RhbXAgbV9s
YXN0U2V0Q2hhclRpbWU7CisgICAgY29uc3QgUmFuZ2UgbV9yYW5nZTsKKyAgICBpbnQgbV92YWx1
ZTsKKyAgICBib29sIG1faGFzVmFsdWU7Cit9OworCisvLyBEYXRlVGltZUhvdXJGaWVsZEVsZW1l
bnQgaXMgdXNlZCBmb3IgaG91ciBmaWVsZCBvZiBkYXRlIHRpbWUgZm9ybWF0CisvLyBzdXBwb3J0
aW5nIGZvbGxvd2luZyBwYXR0ZXJuczoKKy8vICAtIDAgdG8gMTEKKy8vICAtIDEgdG8gMTIKKy8v
ICAtIDAgdG8gMjMKKy8vICAtIDEgdG8gMjQKK2NsYXNzIERhdGVUaW1lSG91ckZpZWxkRWxlbWVu
dCA6IHB1YmxpYyBEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQgeworICAgIFdURl9NQUtFX05P
TkNPUFlBQkxFKERhdGVUaW1lSG91ckZpZWxkRWxlbWVudCk7CisKK3B1YmxpYzoKKyAgICBzdGF0
aWMgUGFzc1JlZlB0cjxEYXRlVGltZUhvdXJGaWVsZEVsZW1lbnQ+IGNyZWF0ZShEb2N1bWVudCos
IEZpZWxkRXZlbnRIYW5kbGVyJiwgY29uc3QgQXRvbWljU3RyaW5nJiwgaW50IG1pbmltdW0sIGlu
dCBtYXhpbXVtKTsKKworcHJpdmF0ZToKKyAgICBEYXRlVGltZUhvdXJGaWVsZEVsZW1lbnQoRG9j
dW1lbnQqLCBGaWVsZEV2ZW50SGFuZGxlciYsIGNvbnN0IEF0b21pY1N0cmluZyYsIGludCBtaW5p
bXVtLCBpbnQgbWF4aW11bSk7CisKKyAgICAvLyBEYXRlVGltZUZpZWxkRWxlbWVudCBmdW5jdGlv
bnMuCisgICAgdmlydHVhbCB2b2lkIHNldFZhbHVlQXNJbnRlZ2VyKGludCwgRXZlbnRCZWhhdmlv
cikgT1ZFUlJJREUgRklOQUw7CisgICAgdmlydHVhbCBpbnQgdmFsdWVBc0ludGVnZXIoKSBjb25z
dCBPVkVSUklERSBGSU5BTDsKKworICAgIGNvbnN0IGludCBtX2FsaWdubWVudDsKK307CisKKy8v
IERhdGVUaW1lU3ltYm9saWNGaWVsZEVsZW1lbnQgaXMgdXNlZCBmb3IgcGVyaW9kIGZpZWxkIG9m
IGRhdGEgdGltZSBmb3JtYXQuCitjbGFzcyBEYXRlVGltZVN5bWJvbGljRmllbGRFbGVtZW50IDog
cHVibGljIERhdGVUaW1lRmllbGRFbGVtZW50IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShE
YXRlVGltZVN5bWJvbGljRmllbGRFbGVtZW50KTsKKworcHVibGljOgorICAgIHN0YXRpYyBQYXNz
UmVmUHRyPERhdGVUaW1lU3ltYm9saWNGaWVsZEVsZW1lbnQ+IGNyZWF0ZShEb2N1bWVudCosIEZp
ZWxkRXZlbnRIYW5kbGVyJiwgY29uc3QgQXRvbWljU3RyaW5nJiwgaW50LCBjb25zdCBWZWN0b3I8
U3RyaW5nPiYpOworCitwcml2YXRlOgorICAgIHN0YXRpYyBjb25zdCBpbnQgSW52YWxpZEluZGV4
ID0gLTE7CisKKyAgICBEYXRlVGltZVN5bWJvbGljRmllbGRFbGVtZW50KERvY3VtZW50KiwgRmll
bGRFdmVudEhhbmRsZXImLCBjb25zdCBBdG9taWNTdHJpbmcmLCBpbnQsIGNvbnN0IFZlY3RvcjxT
dHJpbmc+Jik7CisKKyAgICAvLyBEYXRlVGltZUZpZWxkRWxlbWVudCBmdW5jdGlvbnMuCisgICAg
dmlydHVhbCB2b2lkIGRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqKSBPVkVSUklERSBGSU5BTDsK
KyAgICB2aXJ0dWFsIGJvb2wgaGFzVmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3NlbGVjdGVkSW5k
ZXggPj0gMDsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRWYWx1ZUFzRW1wdHkoRXZlbnRCZWhhdmlv
ciA9IERpc3BhdGNoTm9FdmVudCkgT1ZFUlJJREUgRklOQUw7CisgICAgdmlydHVhbCB2b2lkIHNl
dFZhbHVlQXNJbnRlZ2VyKGludCwgRXZlbnRCZWhhdmlvcikgT1ZFUlJJREUgRklOQUw7CisgICAg
dmlydHVhbCB2b2lkIHN0ZXBEb3duKCkgT1ZFUlJJREUgRklOQUw7CisgICAgdmlydHVhbCB2b2lk
IHN0ZXBVcCgpIE9WRVJSSURFIEZJTkFMOworICAgIHZpcnR1YWwgU3RyaW5nIHZhbHVlKCkgY29u
c3QgT1ZFUlJJREUgRklOQUw7CisgICAgdmlydHVhbCBpbnQgdmFsdWVBc0ludGVnZXIoKSBjb25z
dCBPVkVSUklERSBGSU5BTDsKKyAgICB2aXJ0dWFsIFN0cmluZyB2aXNpYmxlVmFsdWUoKSBjb25z
dCBPVkVSUklERSBGSU5BTDsKKworICAgIGludCBtX3NlbGVjdGVkSW5kZXg7CisgICAgY29uc3Qg
VmVjdG9yPFN0cmluZz4gbV9zeW1ib2xzOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CisjZW5kaWYKKyNlbmRpZgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>155459</attachid>
            <date>2012-07-31 00:50:49 -0700</date>
            <delta_ts>2012-07-31 02:45:46 -0700</delta_ts>
            <desc>Patch 6</desc>
            <filename>bug-88970-20120731165032.patch</filename>
            <type>text/plain</type>
            <size>68204</size>
            <attacher>yosin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI0MTc5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzJhMGFiNmZhM2IzZjQ0
NGRjYThjZWMzOTYxNzY2M2ZmMzlhMGU3NS4uMmI2N2Q3Y2Y2MjZkZmFhYTkyMjFlZDhkNmNjYTkx
YmVjYmE5NGQ3YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3MSBAQAorMjAxMi0wNy0zMSAgWW9z
aGlmdW1pIElub3VlICA8eW9zaW5AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtGb3JtXSBNdWx0
aXBsZSBmaWVsZHMgdGltZSBpbnB1dCBVSQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9ODg5NzAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIGludHJvZHVjZXMgbXVsdGlwbGUgZmllbGQgdGlt
ZSBpbnB1dCBVSSBmb3IgaW5wdXQgdHlwZSB0aW1lCisgICAgICAgIGluc2lkZSBvZiBFTkFCTEVf
SU5QVVRfVFlQRV9NVUxUSVBMRV9GSUxFRFMuCisKKyAgICAgICAgVGhlIG11bHRpcGxlIGZpZWxk
IHRpbWUgaW5wdXQgVUkgaXMgaW1wbGVtZW50ZWQgdXNpbmcgc2hhZG93IERPTSB3aXRoCisgICAg
ICAgIERhdGVUaW1lRWRpdEVsZW1lbnQgY2xhc3MgYW5kIERhdGVUaW1lRmllbGRFbGVtZW50IGNs
YXNzLgorCisgICAgICAgIFRpbWVJbnB1dFR5cGUgY2xhc3MgdXNlcyBEYXRlVGltZUVkaXRFbGVt
ZW50IGNsYXNzIGFzIGEgY29udGFpbmVyIG9mCisgICAgICAgIERhdGVUaW1lRmllbGRFbGVtZW50
IGluc3RhbmNlcyBpbnN0ZWFkIG9mIFRleHRDb250cm9sSW5uZXJFbGVtZW50LgorCisgICAgICAg
IFRoZXJlIGFyZSB0aHJlZSBkZXJpdmVkIGNsYXNzZXMgb2YgRGF0ZVRpbWVGaWVsZEVsZW1lbnQg
Y2xhc3MsCisgICAgICAgIERhdGVUaW1lTnVtZXJpY0ZpZWxkRWxlbWVudCwgbWludXRlLCBzZWNv
bmQsIG1pbGxpc2Vjb25kCisgICAgICAgIGZpZWxkcywgRGF0ZVRpbWVIb3VyRmllbGRFbGVtZW50
IGZvciBob3VyLCBhbmQgRGF0ZVRpbWVTeW1ib2xpY0ZpZWxkRWxlbWVudCwKKyAgICAgICAgZm9y
IEFNL1BNLgorCisgICAgICAgIFRlc3RzOiBmYXN0L2Zvcm1zL3RpbWUtbXVsdGlwbGUtZmllbGRz
L3RpbWUtbXVsdGlwbGUtZmllbGRzLWFwcGVyYW5jZS1iYXNpYy5odG1sCisgICAgICAgICAgICAg
ICBmYXN0L2Zvcm1zL3RpbWUtbXVsdGlwbGUtZmllbGRzL3RpbWUtbXVsdGlwbGUtZmllbGRzLWFw
cGVyYW5jZS1wc2V1ZG8tY2xhc3Nlcy5odG1sCisgICAgICAgICAgICAgICBmYXN0L2Zvcm1zL3Rp
bWUtbXVsdGlwbGUtZmllbGRzL3RpbWUtbXVsdGlwbGUtZmllbGRzLWFwcGVyYW5jZS1wc2V1ZG8t
ZWxlbWVudHMuaHRtbAorICAgICAgICAgICAgICAgZmFzdC9mb3Jtcy90aW1lLW11bHRpcGxlLWZp
ZWxkcy90aW1lLW11bHRpcGxlLWZpZWxkcy1hcHBlcmFuY2Utc3R5bGUuaHRtbAorICAgICAgICAg
ICAgICAgZmFzdC9mb3Jtcy90aW1lLW11bHRpcGxlLWZpZWxkcy90aW1lLW11bHRpcGxlLWZpZWxk
cy1rZXlib2FyZC1ldmVudHMuaHRtbAorICAgICAgICAgICAgICAgZmFzdC9mb3Jtcy90aW1lLW11
bHRpcGxlLWZpZWxkcy90aW1lLW11bHRpcGxlLWZpZWxkcy1zcGluYnV0dG9uLWNoYW5nZS1hbmQt
aW5wdXQtZXZlbnRzLmh0bWwKKworICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBi
aW5kaW5ncy9nZW5lcmljL1J1bnRpbWVFbmFibGVkRmVhdHVyZXMuY3BwOgorICAgICAgICAoV2Vi
Q29yZSk6CisgICAgICAgICogY3NzL2h0bWwuY3NzOgorICAgICAgICAoaW5wdXQ6Oi13ZWJraXQt
ZGF0ZXRpbWUtZWRpdCk6CisgICAgICAgIChpbnB1dDo6LXdlYmtpdC1kYXRldGltZS1lZGl0LW1p
bnV0ZS1maWVsZFtkaXNhYmxlZF0pOgorICAgICAgICAoaW5wdXQ6Oi13ZWJraXQtZGF0ZXRpbWUt
ZWRpdC1zZWNvbmQtZmllbGRbZGlzYWJsZWRdKToKKyAgICAgICAgKGlucHV0Ojotd2Via2l0LWRh
dGV0aW1lLWVkaXQtaG91ci1maWVsZCk6CisgICAgICAgIChpbnB1dDo6LXdlYmtpdC1kYXRldGlt
ZS1lZGl0LW1pbGxpc2Vjb25kLWZpZWxkKToKKyAgICAgICAgKGlucHV0Ojotd2Via2l0LWRhdGV0
aW1lLWVkaXQtbWludXRlLWZpZWxkKToKKyAgICAgICAgKGlucHV0Ojotd2Via2l0LWRhdGV0aW1l
LWVkaXQtYW1wbS1maWVsZCk6CisgICAgICAgIChpbnB1dDo6LXdlYmtpdC1kYXRldGltZS1lZGl0
LXNlY29uZC1maWVsZCk6CisgICAgICAgIChpbnB1dDo6LXdlYmtpdC1pbm5lci1zcGluLWJ1dHRv
bik6CisgICAgICAgICogaHRtbC9CYXNlRGF0ZUFuZFRpbWVJbnB1dFR5cGUuaDoKKyAgICAgICAg
KEJhc2VEYXRlQW5kVGltZUlucHV0VHlwZSk6CisgICAgICAgICogaHRtbC9IVE1MSW5wdXRFbGVt
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ6OnBhcnNlQXR0cmli
dXRlKToKKyAgICAgICAgKiBodG1sL0lucHV0VHlwZS5jcHA6CisgICAgICAgIChXZWJDb3JlKToK
KyAgICAgICAgKFdlYkNvcmU6OklucHV0VHlwZTo6c3RlcFJhbmdlQ2hhbmdlZCk6CisgICAgICAg
ICogaHRtbC9JbnB1dFR5cGUuaDoKKyAgICAgICAgKElucHV0VHlwZSk6CisgICAgICAgICogaHRt
bC9UaW1lSW5wdXRUeXBlLmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29y
ZTo6VGltZUlucHV0VHlwZTo6flRpbWVJbnB1dFR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6VGlt
ZUlucHV0VHlwZTo6ZWRpdENvbnRyb2xWYWx1ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6
VGltZUlucHV0VHlwZTo6Y3JlYXRlUmVuZGVyZXIpOgorICAgICAgICAoV2ViQ29yZTo6VGltZUlu
cHV0VHlwZTo6Y3JlYXRlU2hhZG93U3VidHJlZSk6CisgICAgICAgIChXZWJDb3JlOjpUaW1lSW5w
dXRUeXBlOjpkZXN0cm95U2hhZG93U3VidHJlZSk6CisgICAgICAgIChXZWJDb3JlOjpUaW1lSW5w
dXRUeXBlOjpmb3J3YXJkRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6VGltZUlucHV0VHlwZTo6
ZGlzYWJsZWRBdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlRpbWVJbnB1dFR5
cGU6OmhhbmRsZUtleWRvd25FdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpUaW1lSW5wdXRUeXBl
OjpoYW5kbGVET01BY3RpdmF0ZUV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlRpbWVJbnB1dFR5
cGU6OmlzS2V5Ym9hcmRGb2N1c2FibGUpOgorICAgICAgICAoV2ViQ29yZTo6VGltZUlucHV0VHlw
ZTo6aXNNb3VzZUZvY3VzYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpUaW1lSW5wdXRUeXBlOjpy
ZWFkb25seUF0dHJpYnV0ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6VGltZUlucHV0VHlw
ZTo6c2V0VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6VGltZUlucHV0VHlwZTo6c3RlcFJhbmdl
Q2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpUaW1lSW5wdXRUeXBlOjp1cGRhdGVJbm5lclRl
eHRWYWx1ZSk6CisgICAgICAgICogaHRtbC9UaW1lSW5wdXRUeXBlLmg6CisgICAgICAgIChUaW1l
SW5wdXRUeXBlKToKKyAgICAgICAgKiBodG1sL3NoYWRvdy9EYXRlVGltZUVkaXRFbGVtZW50LmNw
cDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKERhdGVUaW1lRWRpdExheW91
dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lRWRpdExheW91dGVyOjpEYXRlVGltZUVk
aXRMYXlvdXRlcik6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZUVkaXRMYXlvdXRlcjo6bmVl
ZFNlY29uZEZpZWxkKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lRWRpdExheW91dGVyOjpE
YXRlVGltZUZvcm1hdERldGFpbDo6RGF0ZVRpbWVGb3JtYXREZXRhaWwpOgorICAgICAgICAoRGF0
ZVRpbWVGb3JtYXREZXRhaWwpOgorICAgICAgICAoRGF0ZVRpbWVGb3JtYXRBbmFseXplcik6Cisg
ICAgICAgIChXZWJDb3JlOjpEYXRlVGltZUVkaXRMYXlvdXRlcjo6RGF0ZVRpbWVGb3JtYXRBbmFs
eXplcjo6YW5hbHl6ZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZUVkaXRMYXlvdXRlcjo6
RGF0ZVRpbWVGb3JtYXRBbmFseXplcjo6dmlzaXRGaWVsZCk6CisgICAgICAgIChXZWJDb3JlOjpE
YXRlVGltZUVkaXRMYXlvdXRlcjo6RGF0ZVRpbWVGb3JtYXRBbmFseXplcjo6dmlzaXRMaXRlcmFs
KToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lRWRpdExheW91dGVyOjphZGRGaWVsZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpEYXRlVGltZUVkaXRMYXlvdXRlcjo6bmVlZE1pbGxpc2Vjb25kRmll
bGQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVFZGl0TGF5b3V0ZXI6Om5lZWRNaW51dGVG
aWVsZCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZUVkaXRMYXlvdXRlcjo6YnVpbGQpOgor
ICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVFZGl0TGF5b3V0ZXI6OnZpc2l0RmllbGQpOgorICAg
ICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVFZGl0TGF5b3V0ZXI6OnZpc2l0TGl0ZXJhbCk6CisgICAg
ICAgIChXZWJDb3JlOjpEYXRlVGltZUVkaXRFbGVtZW50OjpEYXRlVGltZUVkaXRFbGVtZW50KToK
KyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lRWRpdEVsZW1lbnQ6On5EYXRlVGltZUVkaXRFbGVt
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lRWRpdEVsZW1lbnQ6OmNyZWF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpEYXRlVGltZUVkaXRFbGVtZW50OjpkaXNhYmxlZCk6CisgICAgICAg
IChXZWJDb3JlOjpEYXRlVGltZUVkaXRFbGVtZW50OjpmaWVsZEF0KToKKyAgICAgICAgKFdlYkNv
cmU6OkRhdGVUaW1lRWRpdEVsZW1lbnQ6OmhhbmRsZUtleWJvYXJkRXZlbnQpOgorICAgICAgICAo
V2ViQ29yZTo6RGF0ZVRpbWVFZGl0RWxlbWVudDo6ZmllbGRWYWx1ZUNoYW5nZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6RGF0ZVRpbWVFZGl0RWxlbWVudDo6aGFuZGxlTW91c2VFdmVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpEYXRlVGltZUVkaXRFbGVtZW50Ojptb3ZlVG9OZXh0RmllbGQpOgorICAg
ICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVFZGl0RWxlbWVudDo6bmV4dEZpZWxkSW5kZXgpOgorICAg
ICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVFZGl0RWxlbWVudDo6cHJldmlvdXNGaWVsZEluZGV4KToK
KyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lRWRpdEVsZW1lbnQ6OnJlYWRPbmx5KToKKyAgICAg
ICAgKFdlYkNvcmU6OkRhdGVUaW1lRWRpdEVsZW1lbnQ6OnJlc2V0TGF5b3V0KToKKyAgICAgICAg
KFdlYkNvcmU6OkRhdGVUaW1lRWRpdEVsZW1lbnQ6OnNldEZvY3VzRmllbGQpOgorICAgICAgICAo
V2ViQ29yZTo6RGF0ZVRpbWVFZGl0RWxlbWVudDo6c2V0TGF5b3V0KToKKyAgICAgICAgKFdlYkNv
cmU6OkRhdGVUaW1lRWRpdEVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIpOgorICAgICAgICAo
V2ViQ29yZTo6RGF0ZVRpbWVFZGl0RWxlbWVudDo6ZGlzYWJsZSk6CisgICAgICAgIChXZWJDb3Jl
OjpEYXRlVGltZUVkaXRFbGVtZW50OjpzZXRWYWx1ZUFzRGF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpEYXRlVGltZUVkaXRFbGVtZW50OjpzZXRWYWx1ZUFzRW1wdHkpOgorICAgICAgICAoV2ViQ29y
ZTo6RGF0ZVRpbWVFZGl0RWxlbWVudDo6c3BpbkJ1dHRvblN0ZXBEb3duKToKKyAgICAgICAgKFdl
YkNvcmU6OkRhdGVUaW1lRWRpdEVsZW1lbnQ6OnNwaW5CdXR0b25TdGVwVXApOgorICAgICAgICAo
V2ViQ29yZTo6RGF0ZVRpbWVFZGl0RWxlbWVudDo6dmFsdWVBc0RvdWJsZSk6CisgICAgICAgICog
aHRtbC9zaGFkb3cvRGF0ZVRpbWVFZGl0RWxlbWVudC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmUpOgorICAgICAgICAoRGF0ZVRpbWVFZGl0RWxlbWVudCk6CisgICAgICAgIChFZGl0Q29udHJv
bEV2ZW50SGFuZGxlcik6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZUVkaXRFbGVtZW50OjpF
ZGl0Q29udHJvbEV2ZW50SGFuZGxlcjo6fkVkaXRDb250cm9sRXZlbnRIYW5kbGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRhdGVUaW1lRWRpdEVsZW1lbnQ6OmRpc2FibGVkQXR0cmlidXRlQ2hhbmdl
ZCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZUVkaXRFbGVtZW50OjpyZWFkb25seUF0dHJp
YnV0ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVFZGl0RWxlbWVudDo6cmVt
b3ZlRXZlbnRIYW5kbGVyKToKKyAgICAgICAgKiBodG1sL3NoYWRvdy9EYXRlVGltZUZpZWxkRWxl
bWVudHMuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6
ZGlzcGxheVNpemVPZk51bWJlcik6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZUZpZWxkRWxl
bWVudDo6RGF0ZVRpbWVGaWVsZEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVG
aWVsZEVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGF0
ZVRpbWVGaWVsZEVsZW1lbnQ6OmRpc2FibGUpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVG
aWVsZEVsZW1lbnQ6OmRpc2FibGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lRmllbGRF
bGVtZW50Ojp1cGRhdGVWaXNpYmxlVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVG
aWVsZEVsZW1lbnQ6OnZhbHVlQXNEb3VibGUpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVI
b3VyRmllbGRFbGVtZW50OjpEYXRlVGltZUhvdXJGaWVsZEVsZW1lbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6RGF0ZVRpbWVIb3VyRmllbGRFbGVtZW50OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6RGF0ZVRpbWVIb3VyRmllbGRFbGVtZW50OjpzZXRWYWx1ZUFzSW50ZWdlcik6CisgICAgICAg
IChXZWJDb3JlOjpEYXRlVGltZUhvdXJGaWVsZEVsZW1lbnQ6OnZhbHVlQXNJbnRlZ2VyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lTnVtZXJpY0ZpZWxkRWxlbWVudDo6UmFuZ2U6OlJhbmdl
KToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lTnVtZXJpY0ZpZWxkRWxlbWVudDo6UmFuZ2U6
OmVuc3VyZUluUmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVOdW1lcmljRmllbGRF
bGVtZW50OjpEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6
RGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
bWFwRXZlbnRUb0RpZ2l0KToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lTnVtZXJpY0ZpZWxk
RWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcik6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGlt
ZU51bWVyaWNGaWVsZEVsZW1lbnQ6OmlzQ29udGludW9zRXZlbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6RGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50OjpzZXRWYWx1ZUFzRW1wdHkpOgorICAgICAg
ICAoV2ViQ29yZTo6RGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50OjpzZXRWYWx1ZUFzSW50ZWdl
cik6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQ6OnN0ZXBE
b3duKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lTnVtZXJpY0ZpZWxkRWxlbWVudDo6c3Rl
cFVwKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lTnVtZXJpY0ZpZWxkRWxlbWVudDo6dmFs
dWUpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50Ojp2YWx1
ZUFzSW50ZWdlcik6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1l
bnQ6OnZpc2libGVWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZVN5bWJvbGljRmll
bGRFbGVtZW50OjpEYXRlVGltZVN5bWJvbGljRmllbGRFbGVtZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OkRhdGVUaW1lU3ltYm9saWNGaWVsZEVsZW1lbnQ6OmNyZWF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpEYXRlVGltZVN5bWJvbGljRmllbGRFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKToK
KyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lU3ltYm9saWNGaWVsZEVsZW1lbnQ6OnNldFZhbHVl
QXNFbXB0eSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZVN5bWJvbGljRmllbGRFbGVtZW50
OjpzZXRWYWx1ZUFzSW50ZWdlcik6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZVN5bWJvbGlj
RmllbGRFbGVtZW50OjpzdGVwRG93bik6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZVN5bWJv
bGljRmllbGRFbGVtZW50OjpzdGVwVXApOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVTeW1i
b2xpY0ZpZWxkRWxlbWVudDo6dmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVTeW1i
b2xpY0ZpZWxkRWxlbWVudDo6dmFsdWVBc0ludGVnZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGF0
ZVRpbWVTeW1ib2xpY0ZpZWxkRWxlbWVudDo6dmlzaWJsZVZhbHVlKToKKyAgICAgICAgKiBodG1s
L3NoYWRvdy9EYXRlVGltZUZpZWxkRWxlbWVudHMuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3Jl
KToKKyAgICAgICAgKERhdGVUaW1lRmllbGRFbGVtZW50KToKKyAgICAgICAgKEZpZWxkRXZlbnRI
YW5kbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lRmllbGRFbGVtZW50OjpGaWVsZEV2
ZW50SGFuZGxlcjo6fkZpZWxkRXZlbnRIYW5kbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVU
aW1lRmllbGRFbGVtZW50OjpyZW1vdmVFdmVudEhhbmRsZXIpOgorICAgICAgICAoV2ViQ29yZTo6
RGF0ZVRpbWVGaWVsZEVsZW1lbnQ6OnVuaXRJbk1pbGxpc2Vjb25kKToKKyAgICAgICAgKERhdGVU
aW1lTnVtZXJpY0ZpZWxkRWxlbWVudCk6CisgICAgICAgIChSYW5nZSk6CisgICAgICAgIChXZWJD
b3JlOjpEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQ6OmVuc3VyZUluUmFuZ2UpOgorICAgICAg
ICAoV2ViQ29yZTo6RGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50OjpyYW5nZSk6CisgICAgICAg
IChEYXRlVGltZUhvdXJGaWVsZEVsZW1lbnQpOgorICAgICAgICAoRGF0ZVRpbWVTeW1ib2xpY0Zp
ZWxkRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZVN5bWJvbGljRmllbGRFbGVt
ZW50OjpoYXNWYWx1ZSk6CisKIDIwMTItMDctMzEgIFhpbmduYW4gV2FuZyAgPHhpbmduYW4ud2Fu
Z0BpbnRlbC5jb20+CiAKICAgICAgICAgSW5kZXhlZERCOiBTaXplIHRoZSBWZWN0b3IgaW4gZW5j
b2RlSW50L2VuY29kZVZhckludC9lbmNvZGVTdHJpbmcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cK
aW5kZXggZjNhNWQ3ZDNhNTA2YmY0YjViZWQ5YTE5NjllZDkzZDA4Yzk5ZTU3ZS4uNGMwNDRkYmY1
ZmYxMDE2Njc4ZWZhMGExYTFmNTViOTBmYzhiODgxMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VM
b2cKQEAgLTEsMyArMSwxNSBAQAorMjAxMi0wNy0zMCAgWW9zaGlmdW1pIElub3VlICA8eW9zaW5A
Y2hyb21pdW0ub3JnPgorCisgICAgICAgIFtGb3JtXSBUaW1lIGlucHV0IGZpZWxkcyBVSQorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODg5NzAKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIGVu
YWJsZXMgSU5QVVRfVFlQRV9USU1FX01VTFRJUExFX0ZJRUxEUyBmb3IKKyAgICAgICAgQ2hyb21p
dW0gb3RoZXIgdGhhbiBBbmRyb2lkLgorCisgICAgICAgICogZmVhdHVyZXMuZ3lwaToKKwogMjAx
Mi0wNy0zMCAgS2Vpc2hpIEhhdHRvcmkgIDxrZWlzaGlAd2Via2l0Lm9yZz4KIAogICAgICAgICBJ
bXBsZW1lbnQgZGF0YWxpc3QgVUkgZm9yIGlucHV0IHR5cGUgY29sb3IgZm9yIENocm9taXVtCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLmd5cGkKaW5kZXggNjFmNzhkY2I3Nzc1ZDI1MmVlZmE1NjA4MDc3NzgxZWJkZmVmMjQ4
MS4uNjUwNzVjYjYzN2NmMDM3MDNmYmE5YzU0MzFjOWQ2NDg5NTM4OTYzMSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
Z3lwaQpAQCAtNTcyNyw2ICs1NzI3LDEwIEBACiAgICAgICAgICAgICAnaHRtbC9zaGFkb3cvQ29u
dGVudERpc3RyaWJ1dG9yLmgnLAogICAgICAgICAgICAgJ2h0bWwvc2hhZG93L0NvbnRlbnRTZWxl
Y3RvclF1ZXJ5LmNwcCcsCiAgICAgICAgICAgICAnaHRtbC9zaGFkb3cvQ29udGVudFNlbGVjdG9y
UXVlcnkuaCcsCisgICAgICAgICAgICAnaHRtbC9zaGFkb3cvRGF0ZVRpbWVFZGl0RWxlbWVudC5j
cHAnLAorICAgICAgICAgICAgJ2h0bWwvc2hhZG93L0RhdGVUaW1lRWRpdEVsZW1lbnQuaCcsCisg
ICAgICAgICAgICAnaHRtbC9zaGFkb3cvRGF0ZVRpbWVGaWVsZEVsZW1lbnRzLmNwcCcsCisgICAg
ICAgICAgICAnaHRtbC9zaGFkb3cvRGF0ZVRpbWVGaWVsZEVsZW1lbnRzLmgnLAogICAgICAgICAg
ICAgJ2h0bWwvc2hhZG93L0RldGFpbHNNYXJrZXJDb250cm9sLmNwcCcsCiAgICAgICAgICAgICAn
aHRtbC9zaGFkb3cvRGV0YWlsc01hcmtlckNvbnRyb2wuaCcsCiAgICAgICAgICAgICAnaHRtbC9z
aGFkb3cvSFRNTENvbnRlbnRFbGVtZW50LmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9nZW5lcmljL1J1bnRpbWVFbmFibGVkRmVhdHVyZXMuY3BwIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvZ2VuZXJpYy9SdW50aW1lRW5hYmxlZEZlYXR1cmVzLmNwcAppbmRleCA1
OWVjMDYyOGQzOTdjMjU4OTdjOWRiODRmMjIxNTU4NDdhYzhiNDJmLi5kYTc4NDlkZGFiZGFiYjBi
M2NjNjM2YjFlZjY5YjNmYmE3NWNlZmRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9nZW5lcmljL1J1bnRpbWVFbmFibGVkRmVhdHVyZXMuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2dlbmVyaWMvUnVudGltZUVuYWJsZWRGZWF0dXJlcy5jcHAKQEAgLTIyNSwx
MiArMjI1LDggQEAgYm9vbCBSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjppc0lucHV0VHlwZU1vbnRo
RW5hYmxlZCA9IHRydWU7CiAjZW5kaWYKIAogI2lmIEVOQUJMRShJTlBVVF9UWVBFX1RJTUUpCi0j
aWYgUExBVEZPUk0oQ0hST01JVU0pICYmICFPUyhBTkRST0lEKQotYm9vbCBSdW50aW1lRW5hYmxl
ZEZlYXR1cmVzOjppc0lucHV0VHlwZVRpbWVFbmFibGVkID0gZmFsc2U7Ci0jZWxzZQogYm9vbCBS
dW50aW1lRW5hYmxlZEZlYXR1cmVzOjppc0lucHV0VHlwZVRpbWVFbmFibGVkID0gdHJ1ZTsKICNl
bmRpZgotI2VuZGlmCiAKICNpZiBFTkFCTEUoSU5QVVRfVFlQRV9XRUVLKQogI2lmIFBMQVRGT1JN
KENIUk9NSVVNKSAmJiAhT1MoQU5EUk9JRCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nz
cy9odG1sLmNzcyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9odG1sLmNzcwppbmRleCBlNWFkNzhjZmYx
ZTUxZDMxYTJhYTU5OTJiMjRhOTVhYzQ1ODRiOTdiLi5kNzk3NDZmZjM2MjhlZGY2ODYwNmVkZjgz
NDVkYjllMzMyOWQ4ZWU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvaHRtbC5jc3MK
KysrIGIvU291cmNlL1dlYkNvcmUvY3NzL2h0bWwuY3NzCkBAIC00NzEsMTEgKzQ3MSw3MSBAQCBk
YXRhbGlzdCB7CiB9CiAjZW5kaWYKIAorI2lmIGRlZmluZWQoRU5BQkxFX0lOUFVUX1RZUEVfVElN
RV9NVUxUSVBMRV9GSUVMRFMpICYmIEVOQUJMRV9JTlBVVF9UWVBFX1RJTUVfTVVMVElQTEVfRklF
TERTCitpbnB1dDo6LXdlYmtpdC1kYXRldGltZS1lZGl0IHsKKyAgICAtd2Via2l0LXVzZXItbW9k
aWZ5OiByZWFkLW9ubHkgIWltcG9ydGFudDsKKyAgICBkaXNwbGF5OiAtd2Via2l0LWJveDsKKyAg
ICAtd2Via2l0LWJveC1hbGlnbjogY2VudGVyOworfQorCitpbnB1dDo6LXdlYmtpdC1kYXRldGlt
ZS1lZGl0LW1pbnV0ZS1maWVsZFtkaXNhYmxlZF0geworICAgIGNvbG9yOiBHcmF5VGV4dDsKK30K
KworaW5wdXQ6Oi13ZWJraXQtZGF0ZXRpbWUtZWRpdC1zZWNvbmQtZmllbGRbZGlzYWJsZWRdIHsK
KyAgICBjb2xvcjogR3JheVRleHQ7Cit9CisKK2lucHV0Ojotd2Via2l0LWRhdGV0aW1lLWVkaXQt
aG91ci1maWVsZCB7CisgICAgLXdlYmtpdC11c2VyLW1vZGlmeTogcmVhZC1vbmx5ICFpbXBvcnRh
bnQ7CisgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOworICAgIGJvcmRlcjogbm9uZTsKKyAgICB0
ZXh0LWFsaWduOiBjZW50ZXI7CisgICAgd2lkdGg6IDEuMmVtOworICAgIHBhZGRpbmc6IDJweDsK
K30KKworaW5wdXQ6Oi13ZWJraXQtZGF0ZXRpbWUtZWRpdC1taWxsaXNlY29uZC1maWVsZCB7Cisg
ICAgLXdlYmtpdC11c2VyLW1vZGlmeTogcmVhZC1vbmx5ICFpbXBvcnRhbnQ7CisgICAgZGlzcGxh
eTogaW5saW5lLWJsb2NrOworICAgIGJvcmRlcjogbm9uZTsKKyAgICB0ZXh0LWFsaWduOiBjZW50
ZXI7CisgICAgd2lkdGg6IDEuNmVtOworICAgIHBhZGRpbmc6IDJweDsKK30KKworaW5wdXQ6Oi13
ZWJraXQtZGF0ZXRpbWUtZWRpdC1taW51dGUtZmllbGQgeworICAgIC13ZWJraXQtdXNlci1tb2Rp
Znk6IHJlYWQtb25seSAhaW1wb3J0YW50OworICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKKyAg
ICBib3JkZXI6IG5vbmU7CisgICAgdGV4dC1hbGlnbjogY2VudGVyOworICAgIHdpZHRoOiAxLjJl
bTsKKyAgICBwYWRkaW5nOiAycHg7Cit9CisKK2lucHV0Ojotd2Via2l0LWRhdGV0aW1lLWVkaXQt
YW1wbS1maWVsZCB7CisgICAgLXdlYmtpdC11c2VyLW1vZGlmeTogcmVhZC1vbmx5ICFpbXBvcnRh
bnQ7CisgICAgYm9yZGVyOiBub25lOworICAgIHdpZHRoOiAyLjVlbTsKKyAgICBwYWRkaW5nOiAy
cHg7Cit9CisKK2lucHV0Ojotd2Via2l0LWRhdGV0aW1lLWVkaXQtc2Vjb25kLWZpZWxkIHsKKyAg
ICAtd2Via2l0LXVzZXItbW9kaWZ5OiByZWFkLW9ubHkgIWltcG9ydGFudDsKKyAgICBkaXNwbGF5
OiBpbmxpbmUtYmxvY2s7CisgICAgYm9yZGVyOiBub25lOworICAgIHRleHQtYWxpZ246IGNlbnRl
cjsKKyAgICB3aWR0aDogMS4yZW07CisgICAgcGFkZGluZzogMnB4OworfQorI2VuZGlmCisKIGlu
cHV0Ojotd2Via2l0LWlubmVyLXNwaW4tYnV0dG9uIHsKICAgICAtd2Via2l0LWFwcGVhcmFuY2U6
IGlubmVyLXNwaW4tYnV0dG9uOwogICAgIGRpc3BsYXk6IGJsb2NrOwogICAgIHBvc2l0aW9uOiBy
ZWxhdGl2ZTsKICAgICBjdXJzb3I6IGRlZmF1bHQ7CisgICAgaGVpZ2h0OiAxLjVlbTsKICAgICB2
ZXJ0aWNhbC1hbGlnbjogdG9wOwogICAgIC13ZWJraXQtYm94LWZsZXg6IDA7CiAgICAgLXdlYmtp
dC11c2VyLXNlbGVjdDogbm9uZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvQmFz
ZURhdGVBbmRUaW1lSW5wdXRUeXBlLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0Jhc2VEYXRlQW5k
VGltZUlucHV0VHlwZS5oCmluZGV4IGFmMzM1ZmE0MjA4NDA4ZjIxYTYxZWJjYTY0ZjE5YjE4MDNm
NjhlZTcuLmUzMDNjNGM3YWQyNTMxYzQ2MmYxNTE1MWYxMTg0ODdhNDllNGU1ZTEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvQmFzZURhdGVBbmRUaW1lSW5wdXRUeXBlLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9CYXNlRGF0ZUFuZFRpbWVJbnB1dFR5cGUuaApAQCAtNDQsNiAr
NDQsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB2b2lkIGhhbmRsZUtleWRvd25FdmVudChL
ZXlib2FyZEV2ZW50KikgT1ZFUlJJREU7CiAgICAgdmlydHVhbCBEZWNpbWFsIHBhcnNlVG9OdW1i
ZXIoY29uc3QgU3RyaW5nJiwgY29uc3QgRGVjaW1hbCYpIGNvbnN0IE9WRVJSSURFOwogICAgIHZp
cnR1YWwgYm9vbCBwYXJzZVRvRGF0ZUNvbXBvbmVudHMoY29uc3QgU3RyaW5nJiwgRGF0ZUNvbXBv
bmVudHMqKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIFN0cmluZyBzZXJpYWxpemUoY29u
c3QgRGVjaW1hbCYpIGNvbnN0IE9WRVJSSURFOwogICAgIFN0cmluZyBzZXJpYWxpemVXaXRoQ29t
cG9uZW50cyhjb25zdCBEYXRlQ29tcG9uZW50cyYpIGNvbnN0OwogCiBwcml2YXRlOgpAQCAtNTks
NyArNjAsNiBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgRGVjaW1hbCBkZWZhdWx0VmFsdWVGb3JT
dGVwVXAoKSBjb25zdCBPVkVSUklERTsKICAgICB2aXJ0dWFsIGJvb2wgaXNTdGVwcGFibGUoKSBj
b25zdCBPVkVSUklERTsKICAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlV2hlZWxFdmVudChXaGVlbEV2
ZW50KikgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBTdHJpbmcgc2VyaWFsaXplKGNvbnN0IERlY2lt
YWwmKSBjb25zdCBPVkVSUklERTsKICAgICB2aXJ0dWFsIFN0cmluZyBzZXJpYWxpemVXaXRoTWls
bGlzZWNvbmRzKGRvdWJsZSkgY29uc3Q7CiAgICAgdmlydHVhbCBTdHJpbmcgbG9jYWxpemVWYWx1
ZShjb25zdCBTdHJpbmcmKSBjb25zdCBPVkVSUklERTsKICAgICB2aXJ0dWFsIFN0cmluZyB2aXNp
YmxlVmFsdWUoKSBjb25zdCBPVkVSUklERTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTElucHV0RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVs
ZW1lbnQuY3BwCmluZGV4IDIxNmQxNzI5ZjQwZDUwMmU5YWY3NzZmZGQwZTljZTc3YjI1MzliZjUu
LmJiOTYzMDBiYzk4OTg4YzE4YzkzMzkxNzA2Y2VlOGEzOTYwOThhZTggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcApAQCAtNzA5LDYgKzcwOSwxMCBAQCB2b2lkIEhU
TUxJbnB1dEVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKGNvbnN0IEF0dHJpYnV0ZSYgYXR0cmlidXRl
KQogICAgIH0gZWxzZSBpZiAoYXR0cmlidXRlLm5hbWUoKSA9PSBvbndlYmtpdHNwZWVjaGNoYW5n
ZUF0dHIpCiAgICAgICAgIHNldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLndl
YmtpdHNwZWVjaGNoYW5nZUV2ZW50LCBjcmVhdGVBdHRyaWJ1dGVFdmVudExpc3RlbmVyKHRoaXMs
IGF0dHJpYnV0ZSkpOwogI2VuZGlmCisjaWYgRU5BQkxFKElOUFVUX1RZUEVfVElNRV9NVUxUSVBM
RV9GSUVMRFMpCisgICAgaWYgKGF0dHJpYnV0ZS5uYW1lKCkgPT0gbWF4QXR0ciB8fCBhdHRyaWJ1
dGUubmFtZSgpID09IG1pbkF0dHIgfHwgYXR0cmlidXRlLm5hbWUoKSA9PSBzdGVwQXR0cikKKyAg
ICAgICAgbV9pbnB1dFR5cGUtPnN0ZXBSYW5nZUNoYW5nZWQoKTsKKyNlbmRpZgogICAgIGVsc2UK
ICAgICAgICAgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKGF0dHJp
YnV0ZSk7CiAgICAgbV9pbnB1dFR5cGUtPnVwZGF0ZUlubmVyVGV4dFZhbHVlKCk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0lucHV0VHlwZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0lucHV0VHlwZS5jcHAKaW5kZXggMDlhODk1YjUwMjg5YzVhYTFlMjI5ZjdmNGQ1ODMyNTc2
ZTE5ODRkMi4uNDg3ZGY4MWYwN2JlNTJmMmU4NzY2MWEwZDBlMDQxY2VmNmYwNzA3MCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9JbnB1dFR5cGUuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvSW5wdXRUeXBlLmNwcApAQCAtOTgyLDYgKzk4MiwxMiBAQCBTdGVwUmFuZ2UgSW5w
dXRUeXBlOjpjcmVhdGVTdGVwUmFuZ2UoQW55U3RlcEhhbmRsaW5nKSBjb25zdAogICAgIHJldHVy
biBTdGVwUmFuZ2UoKTsKIH0KIAorI2lmIEVOQUJMRShJTlBVVF9UWVBFX1RJTUVfTVVMVElQTEVf
RklFTERTKQordm9pZCBJbnB1dFR5cGU6OnN0ZXBSYW5nZUNoYW5nZWQoKQoreworfQorI2VuZGlm
CisKIHZvaWQgSW5wdXRUeXBlOjpzdGVwVXAoaW50IG4sIEV4Y2VwdGlvbkNvZGUmIGVjKQogewog
ICAgIGlmICghaXNTdGVwcGFibGUoKSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRt
bC9JbnB1dFR5cGUuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSW5wdXRUeXBlLmgKaW5kZXggMDI0
NWJhODg4MGIzZjA3MWM2MTU5YmJiZGE4YWYzNWIyZWIwMGRjNi4uZDE5ZTRiZjMzNzQ5YjY0YTZk
OTEyZmI3MmMxYWIxNzQ0NGVjZjg2YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9J
bnB1dFR5cGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0lucHV0VHlwZS5oCkBAIC0xNjks
NiArMTY5LDkgQEAgcHVibGljOgogICAgIGJvb2wgc3RlcE1pc21hdGNoKGNvbnN0IFN0cmluZyYp
IGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBnZXRBbGxvd2VkVmFsdWVTdGVwKERlY2ltYWwqKSBj
b25zdDsKICAgICB2aXJ0dWFsIFN0ZXBSYW5nZSBjcmVhdGVTdGVwUmFuZ2UoQW55U3RlcEhhbmRs
aW5nKSBjb25zdDsKKyNpZiBFTkFCTEUoSU5QVVRfVFlQRV9USU1FX01VTFRJUExFX0ZJRUxEUykK
KyAgICB2aXJ0dWFsIHZvaWQgc3RlcFJhbmdlQ2hhbmdlZCgpOworI2VuZGlmCiAgICAgdmlydHVh
bCB2b2lkIHN0ZXBVcChpbnQsIEV4Y2VwdGlvbkNvZGUmKTsKICAgICB2aXJ0dWFsIHZvaWQgc3Rl
cFVwRnJvbVJlbmRlcmVyKGludCk7CiAgICAgdmlydHVhbCBTdHJpbmcgdHlwZU1pc21hdGNoVGV4
dCgpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9UaW1lSW5wdXRUeXBl
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvVGltZUlucHV0VHlwZS5jcHAKaW5kZXggMDUyYjg4
NzU2MTczZWNhOTI5OTJlYTU5OTdhYmQ1OTYyMTc3MjU4ZS4uMzViNjUxZDlmNTE5NTQ1NTc0NWI0
YThiYTQ5Y2FiMTUwODMwOThkYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9UaW1l
SW5wdXRUeXBlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL1RpbWVJbnB1dFR5cGUuY3Bw
CkBAIC00MSw2ICs0MSwxNSBAQAogCiAjaWYgRU5BQkxFKElOUFVUX1RZUEVfVElNRSkKIAorI2lm
IEVOQUJMRShJTlBVVF9UWVBFX1RJTUVfTVVMVElQTEVfRklFTERTKQorI2luY2x1ZGUgIkNocm9t
ZS5oIgorI2luY2x1ZGUgIkNocm9tZUNsaWVudC5oIgorI2luY2x1ZGUgIkVsZW1lbnRTaGFkb3cu
aCIKKyNpbmNsdWRlICJLZXlib2FyZEV2ZW50LmgiCisjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1
ZGUgIlNoYWRvd1Jvb3QuaCIKKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5n
IG5hbWVzcGFjZSBIVE1MTmFtZXM7CkBAIC0xMDgsNiArMTE3LDEzNCBAQCBib29sIFRpbWVJbnB1
dFR5cGU6OmlzVGltZUZpZWxkKCkgY29uc3QKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorI2lmIEVO
QUJMRShJTlBVVF9UWVBFX1RJTUVfTVVMVElQTEVfRklFTERTKQorCitUaW1lSW5wdXRUeXBlOjp+
VGltZUlucHV0VHlwZSgpCit7CisgICAgaWYgKG1fZGF0ZVRpbWVFZGl0RWxlbWVudCkKKyAgICAg
ICAgbV9kYXRlVGltZUVkaXRFbGVtZW50LT5yZW1vdmVFdmVudEhhbmRsZXIoKTsKK30KKwordm9p
ZCBUaW1lSW5wdXRUeXBlOjplZGl0Q29udHJvbFZhbHVlQ2hhbmdlZCgpCit7CisgICAgUmVmUHRy
PEhUTUxJbnB1dEVsZW1lbnQ+IGlucHV0KGVsZW1lbnQoKSk7CisgICAgaW5wdXQtPnNldFZhbHVl
SW50ZXJuYWwoc2VyaWFsaXplKERlY2ltYWw6OmZyb21Eb3VibGUobV9kYXRlVGltZUVkaXRFbGVt
ZW50LT52YWx1ZUFzRG91YmxlKCkpKSwgRGlzcGF0Y2hOb0V2ZW50KTsKKyAgICBpbnB1dC0+c2V0
TmVlZHNTdHlsZVJlY2FsYygpOworICAgIGlucHV0LT5kaXNwYXRjaEZvcm1Db250cm9sSW5wdXRF
dmVudCgpOworICAgIGlucHV0LT5kaXNwYXRjaEZvcm1Db250cm9sQ2hhbmdlRXZlbnQoKTsKK30K
KworUmVuZGVyT2JqZWN0KiBUaW1lSW5wdXRUeXBlOjpjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVu
YSogYXJlbmEsIFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKK3sKKyAgICByZXR1cm4gSW5wdXRU
eXBlOjpjcmVhdGVSZW5kZXJlcihhcmVuYSwgc3R5bGUpOworfQorCit2b2lkIFRpbWVJbnB1dFR5
cGU6OmNyZWF0ZVNoYWRvd1N1YnRyZWUoKQoreworICAgIEFTU0VSVChlbGVtZW50KCktPnNoYWRv
dygpKTsKKworICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGVsZW1lbnQoKS0+ZG9jdW1lbnQoKTsK
KyAgICBtX2RhdGVUaW1lRWRpdEVsZW1lbnQgPSBEYXRlVGltZUVkaXRFbGVtZW50OjpjcmVhdGUo
ZG9jdW1lbnQsICp0aGlzLCBjcmVhdGVTdGVwUmFuZ2UoQW55SXNEZWZhdWx0U3RlcCkpOworICAg
IGVsZW1lbnQoKS0+c2hhZG93KCktPm9sZGVzdFNoYWRvd1Jvb3QoKS0+YXBwZW5kQ2hpbGQobV9k
YXRlVGltZUVkaXRFbGVtZW50KTsKKworICAgIENocm9tZUNsaWVudCogY2hyb21lQ2xpZW50ID0g
ZG9jdW1lbnQtPnBhZ2UoKSA/IGRvY3VtZW50LT5wYWdlKCktPmNocm9tZSgpLT5jbGllbnQoKSA6
IDA7CisgICAgYm9vbCBzaG91bGRBZGREZWNvcmF0aW9ucyA9IGNocm9tZUNsaWVudCAmJiBjaHJv
bWVDbGllbnQtPndpbGxBZGRUZXh0RmllbGREZWNvcmF0aW9uc1RvKGVsZW1lbnQoKSk7CisKKyAg
ICBpZiAoc2hvdWxkQWRkRGVjb3JhdGlvbnMpCisgICAgICAgIGNocm9tZUNsaWVudC0+YWRkVGV4
dEZpZWxkRGVjb3JhdGlvbnNUbyhlbGVtZW50KCkpOworCisgICAgRGF0ZUNvbXBvbmVudHMgZGF0
ZTsKKyAgICBpZiAocGFyc2VUb0RhdGVDb21wb25lbnRzKGVsZW1lbnQoKS0+dmFsdWUoKSwgJmRh
dGUpKQorICAgICAgICBtX2RhdGVUaW1lRWRpdEVsZW1lbnQtPnNldFZhbHVlQXNEYXRlKGRhdGUp
OworfQorCit2b2lkIFRpbWVJbnB1dFR5cGU6OmRlc3Ryb3lTaGFkb3dTdWJ0cmVlKCkKK3sKKyAg
ICBtX2RhdGVUaW1lRWRpdEVsZW1lbnQtPnJlbW92ZUV2ZW50SGFuZGxlcigpOworICAgIG1fZGF0
ZVRpbWVFZGl0RWxlbWVudC5jbGVhcigpOworfQorCit2b2lkIFRpbWVJbnB1dFR5cGU6OmZvcndh
cmRFdmVudChFdmVudCogZXZlbnQpCit7CisgICAgaWYgKG1fZGF0ZVRpbWVFZGl0RWxlbWVudCkK
KyAgICAgICAgbV9kYXRlVGltZUVkaXRFbGVtZW50LT5kZWZhdWx0RXZlbnRIYW5kbGVyKGV2ZW50
KTsKK30KKwordm9pZCBUaW1lSW5wdXRUeXBlOjpkaXNhYmxlZEF0dHJpYnV0ZUNoYW5nZWQoKQor
eworICAgIGlmIChtX2RhdGVUaW1lRWRpdEVsZW1lbnQpCisgICAgICAgIG1fZGF0ZVRpbWVFZGl0
RWxlbWVudC0+ZGlzYWJsZWRBdHRyaWJ1dGVDaGFuZ2VkKCk7Cit9CisKK3ZvaWQgVGltZUlucHV0
VHlwZTo6aGFuZGxlS2V5ZG93bkV2ZW50KEtleWJvYXJkRXZlbnQqIGV2ZW50KQoreworICAgIGZv
cndhcmRFdmVudChldmVudCk7Cit9CisKK3ZvaWQgVGltZUlucHV0VHlwZTo6aGFuZGxlRE9NQWN0
aXZhdGVFdmVudChFdmVudCogZXZlbnQpCit7CisgICAgaWYgKGVsZW1lbnQoKS0+ZGlzYWJsZWQo
KSB8fCBlbGVtZW50KCktPnJlYWRPbmx5KCkgfHwgIWVsZW1lbnQoKS0+cmVuZGVyZXIoKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgaWYgKG1fZGF0ZVRpbWVFZGl0RWxlbWVudCkKKyAgICAgICAg
bV9kYXRlVGltZUVkaXRFbGVtZW50LT5mb2N1cygpOworCisgICAgZXZlbnQtPnNldERlZmF1bHRI
YW5kbGVkKCk7Cit9CisKK2Jvb2wgVGltZUlucHV0VHlwZTo6aXNLZXlib2FyZEZvY3VzYWJsZShL
ZXlib2FyZEV2ZW50KikgY29uc3QKK3sKKyAgICByZXR1cm4gZWxlbWVudCgpLT5pc1RleHRGb3Jt
Q29udHJvbEZvY3VzYWJsZSgpOworfQorCitib29sIFRpbWVJbnB1dFR5cGU6OmlzTW91c2VGb2N1
c2FibGUoKSBjb25zdAoreworICAgIHJldHVybiBlbGVtZW50KCktPmlzVGV4dEZvcm1Db250cm9s
Rm9jdXNhYmxlKCk7Cit9CisKK3ZvaWQgVGltZUlucHV0VHlwZTo6cmVhZG9ubHlBdHRyaWJ1dGVD
aGFuZ2VkKCkKK3sKKyAgICBpZiAobV9kYXRlVGltZUVkaXRFbGVtZW50KQorICAgICAgICBtX2Rh
dGVUaW1lRWRpdEVsZW1lbnQtPnJlYWRvbmx5QXR0cmlidXRlQ2hhbmdlZCgpOworfQorCitib29s
IFRpbWVJbnB1dFR5cGU6OmlzVGV4dEZpZWxkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKK3ZvaWQgVGltZUlucHV0VHlwZTo6c2V0VmFsdWUoY29uc3QgU3RyaW5nJiBzYW5pdGl6
ZWRWYWx1ZSwgYm9vbCB2YWx1ZUNoYW5nZWQsIFRleHRGaWVsZEV2ZW50QmVoYXZpb3IgZXZlbnRC
ZWhhdmlvcikKK3sKKyAgICBJbnB1dFR5cGU6OnNldFZhbHVlKHNhbml0aXplZFZhbHVlLCB2YWx1
ZUNoYW5nZWQsIGV2ZW50QmVoYXZpb3IpOworICAgIGlmICh2YWx1ZUNoYW5nZWQpCisgICAgICAg
IHVwZGF0ZUlubmVyVGV4dFZhbHVlKCk7Cit9CisKK2Jvb2wgVGltZUlucHV0VHlwZTo6c2hvdWxk
VXNlSW5wdXRNZXRob2QoKSBjb25zdAoreworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBU
aW1lSW5wdXRUeXBlOjpzdGVwUmFuZ2VDaGFuZ2VkKCkKK3sKKyAgICBpZiAobV9kYXRlVGltZUVk
aXRFbGVtZW50KQorICAgICAgICBtX2RhdGVUaW1lRWRpdEVsZW1lbnQtPnNldExheW91dChjcmVh
dGVTdGVwUmFuZ2UoQW55SXNEZWZhdWx0U3RlcCkpOworfQorCit2b2lkIFRpbWVJbnB1dFR5cGU6
OnVwZGF0ZUlubmVyVGV4dFZhbHVlKCkKK3sKKyAgICBpZiAoIW1fZGF0ZVRpbWVFZGl0RWxlbWVu
dCkKKyAgICAgICAgcmV0dXJuOworCisgICAgRGF0ZUNvbXBvbmVudHMgZGF0ZTsKKyAgICBpZiAo
cGFyc2VUb0RhdGVDb21wb25lbnRzKGVsZW1lbnQoKS0+dmFsdWUoKSwgJmRhdGUpKQorICAgICAg
ICBtX2RhdGVUaW1lRWRpdEVsZW1lbnQtPnNldFZhbHVlQXNEYXRlKGRhdGUpOworICAgIGVsc2UK
KyAgICAgICAgbV9kYXRlVGltZUVkaXRFbGVtZW50LT5zZXRWYWx1ZUFzRW1wdHkoKTsKK30KKwor
I2VuZGlmIC8vIEVOQUJMRShJTlBVVF9UWVBFX1RJTUVfTVVMVElQTEVfRklFTERTKQorCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aHRtbC9UaW1lSW5wdXRUeXBlLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL1RpbWVJbnB1dFR5cGUu
aAppbmRleCBjOWQ1YjBjZGQwNzcxMmI4NzdlYWE3YzE5MmM2ZWE4NDFkYTUwZGRkLi44MGU1Nzli
ZGI5ZDUzMjIwNWU0ZjA5NDZiZGUzYzI3YmE4ODU5MzAzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL1RpbWVJbnB1dFR5cGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL1RpbWVJ
bnB1dFR5cGUuaApAQCAtMzUsMTIgKzM1LDIzIEBACiAKICNpZiBFTkFCTEUoSU5QVVRfVFlQRV9U
SU1FKQogCisjaWYgRU5BQkxFKElOUFVUX1RZUEVfVElNRV9NVUxUSVBMRV9GSUVMRFMpCisjaW5j
bHVkZSAiRGF0ZVRpbWVFZGl0RWxlbWVudC5oIgorI2RlZmluZSBUSU1FX0lOUFVUX1RZUEVfQkFT
RV9DTEFTU19MSVNUIHB1YmxpYyBCYXNlRGF0ZUFuZFRpbWVJbnB1dFR5cGUsIHByaXZhdGUgRGF0
ZVRpbWVFZGl0RWxlbWVudDo6RWRpdENvbnRyb2xFdmVudEhhbmRsZXIKKyNlbHNlCisjZGVmaW5l
IFRJTUVfSU5QVVRfVFlQRV9CQVNFX0NMQVNTX0xJU1QgcHVibGljIEJhc2VEYXRlQW5kVGltZUlu
cHV0VHlwZQorI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgVGltZUlucHV0
VHlwZSA6IHB1YmxpYyBCYXNlRGF0ZUFuZFRpbWVJbnB1dFR5cGUgeworY2xhc3MgVGltZUlucHV0
VHlwZSA6IFRJTUVfSU5QVVRfVFlQRV9CQVNFX0NMQVNTX0xJU1QgewogcHVibGljOgogICAgIHN0
YXRpYyBQYXNzT3duUHRyPElucHV0VHlwZT4gY3JlYXRlKEhUTUxJbnB1dEVsZW1lbnQqKTsKIAor
I2lmIEVOQUJMRShJTlBVVF9UWVBFX1RJTUVfTVVMVElQTEVfRklFTERTKQorICAgIHZpcnR1YWwg
flRpbWVJbnB1dFR5cGUoKTsKKyNlbmRpZgorCiBwcml2YXRlOgogICAgIFRpbWVJbnB1dFR5cGUo
SFRNTElucHV0RWxlbWVudCogZWxlbWVudCkgOiBCYXNlRGF0ZUFuZFRpbWVJbnB1dFR5cGUoZWxl
bWVudCkgeyB9CiAgICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIGZvcm1Db250cm9sVHlw
ZSgpIGNvbnN0IE9WRVJSSURFOwpAQCAtNTAsNiArNjEsMzAgQEAgcHJpdmF0ZToKICAgICB2aXJ0
dWFsIGJvb2wgcGFyc2VUb0RhdGVDb21wb25lbnRzSW50ZXJuYWwoY29uc3QgVUNoYXIqLCB1bnNp
Z25lZCBsZW5ndGgsIERhdGVDb21wb25lbnRzKikgY29uc3QgT1ZFUlJJREU7CiAgICAgdmlydHVh
bCBib29sIHNldE1pbGxpc2Vjb25kVG9EYXRlQ29tcG9uZW50cyhkb3VibGUsIERhdGVDb21wb25l
bnRzKikgY29uc3QgT1ZFUlJJREU7CiAgICAgdmlydHVhbCBib29sIGlzVGltZUZpZWxkKCkgY29u
c3QgT1ZFUlJJREU7CisKKyNpZiBFTkFCTEUoSU5QVVRfVFlQRV9USU1FX01VTFRJUExFX0ZJRUxE
UykKKyAgICAvLyBEYXRlVGltZUVkaXRFbGVtZW50OjpFZGl0Q29udHJvbEV2ZW50SGFuZGxlciBt
ZXRob2RzCisgICAgdmlydHVhbCB2b2lkIGVkaXRDb250cm9sVmFsdWVDaGFuZ2VkKCkgT1ZFUlJJ
REUgRklOQUw7CisKKyAgICAvLyBJbnB1dFR5cGUgbWV0aG9kcworICAgIHZpcnR1YWwgUmVuZGVy
T2JqZWN0KiBjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSosIFJlbmRlclN0eWxlKikgY29uc3Qg
T1ZFUlJJREUgRklOQUw7CisgICAgdmlydHVhbCB2b2lkIGNyZWF0ZVNoYWRvd1N1YnRyZWUoKSBP
VkVSUklERSBGSU5BTDsKKyAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveVNoYWRvd1N1YnRyZWUoKSBP
VkVSUklERSBGSU5BTDsKKyAgICB2aXJ0dWFsIHZvaWQgZGlzYWJsZWRBdHRyaWJ1dGVDaGFuZ2Vk
KCkgT1ZFUlJJREUgRklOQUw7CisgICAgdmlydHVhbCB2aXJ0dWFsIHZvaWQgZm9yd2FyZEV2ZW50
KEV2ZW50KikgT1ZFUlJJREUgRklOQUw7CisgICAgdmlydHVhbCB2b2lkIGhhbmRsZURPTUFjdGl2
YXRlRXZlbnQoRXZlbnQqKSBPVkVSUklERSBGSU5BTDsKKyAgICB2aXJ0dWFsIHZvaWQgaGFuZGxl
S2V5ZG93bkV2ZW50KEtleWJvYXJkRXZlbnQqKSBPVkVSUklERSBGSU5BTDsKKyAgICB2aXJ0dWFs
IGJvb2wgaXNLZXlib2FyZEZvY3VzYWJsZShLZXlib2FyZEV2ZW50KikgY29uc3QgT1ZFUlJJREUg
RklOQUw7CisgICAgdmlydHVhbCBib29sIGlzTW91c2VGb2N1c2FibGUoKSBjb25zdCBPVkVSUklE
RSBGSU5BTDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNUZXh0RmllbGQoKSBjb25zdCBPVkVSUklERSBG
SU5BTDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVhZG9ubHlBdHRyaWJ1dGVDaGFuZ2VkKCkgT1ZFUlJJ
REUgRklOQUw7CisgICAgdmlydHVhbCB2b2lkIHNldFZhbHVlKGNvbnN0IFN0cmluZyYsIGJvb2wg
dmFsdWVDaGFuZ2VkLCBUZXh0RmllbGRFdmVudEJlaGF2aW9yKSBPVkVSUklERSBGSU5BTDsKKyAg
ICB2aXJ0dWFsIGJvb2wgc2hvdWxkVXNlSW5wdXRNZXRob2QoKSBjb25zdCBPVkVSUklERSBGSU5B
TDsKKyAgICB2aXJ0dWFsIHZvaWQgc3RlcFJhbmdlQ2hhbmdlZCgpIE9WRVJSSURFIEZJTkFMOwor
ICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVJbm5lclRleHRWYWx1ZSgpIE9WRVJSSURFIEZJTkFMOwor
CisgICAgUmVmUHRyPERhdGVUaW1lRWRpdEVsZW1lbnQ+IG1fZGF0ZVRpbWVFZGl0RWxlbWVudDsK
KyNlbmRpZgogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaHRtbC9zaGFkb3cvRGF0ZVRpbWVFZGl0RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL3NoYWRvdy9EYXRlVGltZUVkaXRFbGVtZW50LmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42NWU0
YzVmNTYyMzQzYTBlYjA2MTIyMzdkOTc4MDM4NzU5Y2ViOGNhCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvRGF0ZVRpbWVFZGl0RWxlbWVudC5jcHAKQEAgLTAs
MCArMSw1NDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisg
KiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisgKiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUgorICogQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNp
ZiBFTkFCTEUoSU5QVVRfVFlQRV9USU1FX01VTFRJUExFX0ZJRUxEUykKKworI2luY2x1ZGUgIkRh
dGVUaW1lRWRpdEVsZW1lbnQuaCIKKworI2luY2x1ZGUgIkRhdGVDb21wb25lbnRzLmgiCisjaW5j
bHVkZSAiRGF0ZVRpbWVGaWVsZEVsZW1lbnRzLmgiCisjaW5jbHVkZSAiRGF0ZVRpbWVGb3JtYXQu
aCIKKyNpbmNsdWRlICJFbGVtZW50U2hhZG93LmgiCisjaW5jbHVkZSAiRXZlbnRIYW5kbGVyLmgi
CisjaW5jbHVkZSAiSFRNTElucHV0RWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgor
I2luY2x1ZGUgIktleWJvYXJkRXZlbnQuaCIKKyNpbmNsdWRlICJMb2NhbGl6ZWREYXRlLmgiCisj
aW5jbHVkZSAiTG9jYWxpemVkTnVtYmVyLmgiCisjaW5jbHVkZSAiTW91c2VFdmVudC5oIgorI2lu
Y2x1ZGUgIlN0ZXBSYW5nZS5oIgorI2luY2x1ZGUgIlRleHQuaCIKKyNpbmNsdWRlIDx3dGYvdGV4
dC9TdHJpbmdCdWlsZGVyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordXNpbmcgbmFtZXNw
YWNlIEhUTUxOYW1lczsKKworc3RhdGljIGNvbnN0IGludCBob3VySW5NaWxsaXNlY29uZCA9IDM2
MDAgKiAxMDAwOworc3RhdGljIGNvbnN0IGludCBtaW51dGVJbk1pbGxpc2Vjb25kID0gNjAgKiAx
MDAwOworc3RhdGljIGNvbnN0IGludCBzZWNvbmRJbk1pbGxpc2Vjb25kID0gMTAwMDsKKworY2xh
c3MgRGF0ZVRpbWVFZGl0TGF5b3V0ZXIgOiBwcml2YXRlIERhdGVUaW1lRm9ybWF0OjpUb2tlbkhh
bmRsZXIgeworcHVibGljOgorICAgIERhdGVUaW1lRWRpdExheW91dGVyKERhdGVUaW1lRWRpdEVs
ZW1lbnQqIGVsZW1udCwgY29uc3QgU3RlcFJhbmdlJiBzdGVwUmFuZ2UpCisgICAgICAgIDogbV9l
ZGl0RWxlbWVudChlbGVtbnQpCisgICAgICAgICwgbV9zdGVwUmFuZ2Uoc3RlcFJhbmdlKQorICAg
IHsKKyAgICB9CisKKyAgICBib29sIGJ1aWxkKGNvbnN0IFN0cmluZyYpOworCisgICAgYm9vbCBu
ZWVkU2Vjb25kRmllbGQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICFtX3N0ZXBSYW5n
ZS5taW5pbXVtKCkucmVtYWluZGVyKG1pbnV0ZUluTWlsbGlzZWNvbmQpLmlzWmVybygpCisgICAg
ICAgICAgICB8fCAhbV9zdGVwUmFuZ2Uuc3RlcCgpLnJlbWFpbmRlcihtaW51dGVJbk1pbGxpc2Vj
b25kKS5pc1plcm8oKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgc3RydWN0IERhdGVUaW1lRm9y
bWF0RGV0YWlsIHsKKyAgICAgICAgRGF0ZVRpbWVGb3JtYXREZXRhaWwoKQorICAgICAgICAgICAg
OiBoYXNNaWxsaXNlY29uZEZpZWxkKGZhbHNlKQorICAgICAgICAgICAgLCBoYXNTZWNvbmRGaWVs
ZChmYWxzZSkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBoYXNNaWxsaXNl
Y29uZEZpZWxkOworICAgICAgICBib29sIGhhc1NlY29uZEZpZWxkOworICAgIH07CisKKyAgICBj
bGFzcyBEYXRlVGltZUZvcm1hdEFuYWx5emVyIDogcHJpdmF0ZSBEYXRlVGltZUZvcm1hdDo6VG9r
ZW5IYW5kbGVyIHsKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBEYXRlVGltZUZvcm1hdERl
dGFpbCBhbmFseXplKGNvbnN0IFN0cmluZyYgZm9ybWF0U3RyaW5nKQorICAgICAgICB7CisgICAg
ICAgICAgICBEYXRlVGltZUZvcm1hdEFuYWx5emVyIGFuYWx5emVyOworICAgICAgICAgICAgRGF0
ZVRpbWVGb3JtYXQ6OnBhcnNlKGZvcm1hdFN0cmluZywgYW5hbHl6ZXIpOworICAgICAgICAgICAg
cmV0dXJuIGFuYWx5emVyLm1fZm9ybWF0RGV0YWlsOworICAgICAgICB9CisKKyAgICBwcml2YXRl
OgorICAgICAgICAvLyBEYXRlVGltZUZvcm1hdDo6VG9rZW5IYW5kbGVyIGZ1bmN0aW9ucy4KKyAg
ICAgICAgdm9pZCB2aXNpdEZpZWxkKERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGUgZmllbGRUeXBl
LCBpbnQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChmaWVsZFR5cGUgPT0gRGF0ZVRpbWVG
b3JtYXQ6OkZpZWxkVHlwZUZyYWN0aW9uYWxTZWNvbmQpIHsKKyAgICAgICAgICAgICAgICBtX2Zv
cm1hdERldGFpbC5oYXNNaWxsaXNlY29uZEZpZWxkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChmaWVsZFR5cGUgPT0gRGF0
ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZVNlY29uZCkgeworICAgICAgICAgICAgICAgIG1fZm9ybWF0
RGV0YWlsLmhhc1NlY29uZEZpZWxkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICB2b2lkIHZpc2l0TGl0ZXJhbChjb25z
dCBTdHJpbmcmKSB7IH0KKworICAgICAgICBEYXRlVGltZUZvcm1hdERldGFpbCBtX2Zvcm1hdERl
dGFpbDsKKyAgICB9OworCisgICAgdm9pZCBhZGRGaWVsZChEYXRlVGltZUZpZWxkRWxlbWVudCog
ZmllbGQpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8c2l6ZV90PihtX2Vk
aXRFbGVtZW50LT5tX251bWJlck9mRmllbGRzKSA+PSBXVEZfQVJSQVlfTEVOR1RIKG1fZWRpdEVs
ZW1lbnQtPm1fZmllbGRzKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgbV9lZGl0RWxl
bWVudC0+YXBwZW5kQ2hpbGQoZmllbGQpOworICAgICAgICBtX2VkaXRFbGVtZW50LT5tX2ZpZWxk
c1ttX2VkaXRFbGVtZW50LT5tX251bWJlck9mRmllbGRzXSA9IGZpZWxkOworICAgICAgICArK21f
ZWRpdEVsZW1lbnQtPm1fbnVtYmVyT2ZGaWVsZHM7CisgICAgfQorCisgICAgYm9vbCBuZWVkTWls
bGlzZWNvbmRGaWVsZCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gIW1fc3RlcFJhbmdl
Lm1pbmltdW0oKS5yZW1haW5kZXIoc2Vjb25kSW5NaWxsaXNlY29uZCkuaXNaZXJvKCkKKyAgICAg
ICAgICAgIHx8ICFtX3N0ZXBSYW5nZS5zdGVwKCkucmVtYWluZGVyKHNlY29uZEluTWlsbGlzZWNv
bmQpLmlzWmVybygpOworICAgIH0KKworICAgIGJvb2wgbmVlZE1pbnV0ZUZpZWxkKCkgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiAhbV9zdGVwUmFuZ2UubWluaW11bSgpLnJlbWFpbmRlciho
b3VySW5NaWxsaXNlY29uZCkuaXNaZXJvKCkKKyAgICAgICAgICAgIHx8ICFtX3N0ZXBSYW5nZS5z
dGVwKCkucmVtYWluZGVyKGhvdXJJbk1pbGxpc2Vjb25kKS5pc1plcm8oKTsKKyAgICB9CisKKyAg
ICAvLyBEYXRlVGltZUZvcm1hdDo6VG9rZW5IYW5kbGVyIGZ1bmN0aW9ucy4KKyAgICB2b2lkIHZp
c2l0RmllbGQoRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZSwgaW50KTsKKyAgICB2b2lkIHZpc2l0
TGl0ZXJhbChjb25zdCBTdHJpbmcmKTsKKworICAgIERhdGVUaW1lRm9ybWF0RGV0YWlsIG1fZm9y
bWF0RGV0YWlsOworICAgIERhdGVUaW1lRWRpdEVsZW1lbnQqIG1fZWRpdEVsZW1lbnQ7CisgICAg
Y29uc3QgU3RlcFJhbmdlJiBtX3N0ZXBSYW5nZTsKK307CisKK2Jvb2wgRGF0ZVRpbWVFZGl0TGF5
b3V0ZXI6OmJ1aWxkKGNvbnN0IFN0cmluZyYgZm9ybWF0U3RyaW5nKQoreworICAgIG1fZm9ybWF0
RGV0YWlsID0gRGF0ZVRpbWVGb3JtYXRBbmFseXplcjo6YW5hbHl6ZShmb3JtYXRTdHJpbmcpOwor
ICAgIG1fZWRpdEVsZW1lbnQtPnJlc2V0TGF5b3V0KCk7CisgICAgcmV0dXJuIERhdGVUaW1lRm9y
bWF0OjpwYXJzZShmb3JtYXRTdHJpbmcsICp0aGlzKTsKK30KKwordm9pZCBEYXRlVGltZUVkaXRM
YXlvdXRlcjo6dmlzaXRGaWVsZChEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlIGZpZWxkVHlwZSwg
aW50KQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoQXRvbWljU3RyaW5nLCBob3VyUHN1ZWRv
SWQsICgiLXdlYmtpdC1kYXRldGltZS1lZGl0LWhvdXItZmllbGQiKSk7CisgICAgREVGSU5FX1NU
QVRJQ19MT0NBTChBdG9taWNTdHJpbmcsIG1pbGxpc2Vjb25kUHN1ZWRvSWQsICgiLXdlYmtpdC1k
YXRldGltZS1lZGl0LW1pbGxpc2Vjb25kLWZpZWxkIikpOworICAgIERFRklORV9TVEFUSUNfTE9D
QUwoQXRvbWljU3RyaW5nLCBtaW51dGVQc3VlZG9JZCwgKCItd2Via2l0LWRhdGV0aW1lLWVkaXQt
bWludXRlLWZpZWxkIikpOworICAgIERFRklORV9TVEFUSUNfTE9DQUwoQXRvbWljU3RyaW5nLCBh
bXBtUHN1ZWRvSWQsICgiLXdlYmtpdC1kYXRldGltZS1lZGl0LWFtcG0tZmllbGQiKSk7CisgICAg
REVGSU5FX1NUQVRJQ19MT0NBTChBdG9taWNTdHJpbmcsIHNlY29uZFBzdWVkb0lkLCAoIi13ZWJr
aXQtZGF0ZXRpbWUtZWRpdC1zZWNvbmQtZmllbGQiKSk7CisKKyAgICBzd2l0Y2ggKGZpZWxkVHlw
ZSkgeworICAgIGNhc2UgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZUhvdXIxMToKKyAgICAgICAg
aWYgKCFtX2VkaXRFbGVtZW50LT5tX2hvdXIxMUZpZWxkKQorICAgICAgICAgICAgbV9lZGl0RWxl
bWVudC0+bV9ob3VyMTFGaWVsZCA9IERhdGVUaW1lSG91ckZpZWxkRWxlbWVudDo6Y3JlYXRlKG1f
ZWRpdEVsZW1lbnQtPmRvY3VtZW50KCksICptX2VkaXRFbGVtZW50LCBob3VyUHN1ZWRvSWQsIDAs
IDExKTsKKyAgICAgICAgYWRkRmllbGQobV9lZGl0RWxlbWVudC0+bV9ob3VyMTFGaWVsZC5nZXQo
KSk7CisgICAgICAgIHJldHVybjsKKworICAgIGNhc2UgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlw
ZUhvdXIxMjoKKyAgICAgICAgaWYgKCFtX2VkaXRFbGVtZW50LT5tX2hvdXIxMkZpZWxkKQorICAg
ICAgICAgICAgbV9lZGl0RWxlbWVudC0+bV9ob3VyMTJGaWVsZCA9IERhdGVUaW1lSG91ckZpZWxk
RWxlbWVudDo6Y3JlYXRlKG1fZWRpdEVsZW1lbnQtPmRvY3VtZW50KCksICptX2VkaXRFbGVtZW50
LCBob3VyUHN1ZWRvSWQsIDEsIDEyKTsKKyAgICAgICAgYWRkRmllbGQobV9lZGl0RWxlbWVudC0+
bV9ob3VyMTJGaWVsZC5nZXQoKSk7CisgICAgICAgIHJldHVybjsKKworICAgIGNhc2UgRGF0ZVRp
bWVGb3JtYXQ6OkZpZWxkVHlwZUhvdXIyMzoKKyAgICAgICAgaWYgKCFtX2VkaXRFbGVtZW50LT5t
X2hvdXIyM0ZpZWxkKQorICAgICAgICAgICAgbV9lZGl0RWxlbWVudC0+bV9ob3VyMjNGaWVsZCA9
IERhdGVUaW1lSG91ckZpZWxkRWxlbWVudDo6Y3JlYXRlKG1fZWRpdEVsZW1lbnQtPmRvY3VtZW50
KCksICptX2VkaXRFbGVtZW50LCBob3VyUHN1ZWRvSWQsIDAsIDIzKTsKKyAgICAgICAgYWRkRmll
bGQobV9lZGl0RWxlbWVudC0+bV9ob3VyMjNGaWVsZC5nZXQoKSk7CisgICAgICAgIHJldHVybjsK
KworICAgIGNhc2UgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZUhvdXIyNDoKKyAgICAgICAgaWYg
KCFtX2VkaXRFbGVtZW50LT5tX2hvdXIyNEZpZWxkKQorICAgICAgICAgICAgbV9lZGl0RWxlbWVu
dC0+bV9ob3VyMjRGaWVsZCA9IERhdGVUaW1lSG91ckZpZWxkRWxlbWVudDo6Y3JlYXRlKG1fZWRp
dEVsZW1lbnQtPmRvY3VtZW50KCksICptX2VkaXRFbGVtZW50LCBob3VyUHN1ZWRvSWQsIDEsIDI0
KTsKKyAgICAgICAgYWRkRmllbGQobV9lZGl0RWxlbWVudC0+bV9ob3VyMjRGaWVsZC5nZXQoKSk7
CisgICAgICAgIHJldHVybjsKKworICAgIGNhc2UgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZU1p
bnV0ZToKKyAgICAgICAgaWYgKCFtX2VkaXRFbGVtZW50LT5tX21pbnV0ZUZpZWxkKQorICAgICAg
ICAgICAgbV9lZGl0RWxlbWVudC0+bV9taW51dGVGaWVsZCA9IERhdGVUaW1lTnVtZXJpY0ZpZWxk
RWxlbWVudDo6Y3JlYXRlKG1fZWRpdEVsZW1lbnQtPmRvY3VtZW50KCksICptX2VkaXRFbGVtZW50
LCBtaW51dGVQc3VlZG9JZCwgbWludXRlSW5NaWxsaXNlY29uZCwgMCwgNTkpOworICAgICAgICBp
ZiAoIW5lZWRNaW51dGVGaWVsZCgpKSB7CisgICAgICAgICAgICBtX2VkaXRFbGVtZW50LT5tX21p
bnV0ZUZpZWxkLT5kaXNhYmxlKCk7CisgICAgICAgICAgICBpZiAoIW1fZWRpdEVsZW1lbnQtPm1f
bWludXRlRmllbGQtPmhhc1ZhbHVlKCkpCisgICAgICAgICAgICAgICAgbV9lZGl0RWxlbWVudC0+
bV9taW51dGVGaWVsZC0+c2V0VmFsdWVBc0ludGVnZXIoMCwgRGF0ZVRpbWVGaWVsZEVsZW1lbnQ6
OkRpc3BhdGNoTm9FdmVudCk7CisgICAgICAgIH0KKyAgICAgICAgYWRkRmllbGQobV9lZGl0RWxl
bWVudC0+bV9taW51dGVGaWVsZC5nZXQoKSk7CisgICAgICAgIHJldHVybjsKKworICAgIGNhc2Ug
RGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZVBlcmlvZDoKKyAgICAgICAgaWYgKCFtX2VkaXRFbGVt
ZW50LT5tX3BlcmlvZEZpZWxkKQorICAgICAgICAgICAgbV9lZGl0RWxlbWVudC0+bV9wZXJpb2RG
aWVsZCA9IERhdGVUaW1lU3ltYm9saWNGaWVsZEVsZW1lbnQ6OmNyZWF0ZShtX2VkaXRFbGVtZW50
LT5kb2N1bWVudCgpLCAqbV9lZGl0RWxlbWVudCwgYW1wbVBzdWVkb0lkLCBob3VySW5NaWxsaXNl
Y29uZCAqIDEyLCB0aW1lQU1QTUxhYmVscygpKTsKKyAgICAgICAgYWRkRmllbGQobV9lZGl0RWxl
bWVudC0+bV9wZXJpb2RGaWVsZC5nZXQoKSk7CisgICAgICAgIHJldHVybjsKKworICAgIGNhc2Ug
RGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZVNlY29uZDoKKyAgICAgICAgaWYgKG5lZWRTZWNvbmRG
aWVsZCgpIHx8IG1fZm9ybWF0RGV0YWlsLmhhc1NlY29uZEZpZWxkKSB7CisgICAgICAgICAgICBp
ZiAoIW1fZWRpdEVsZW1lbnQtPm1fc2Vjb25kRmllbGQpCisgICAgICAgICAgICAgICAgbV9lZGl0
RWxlbWVudC0+bV9zZWNvbmRGaWVsZCA9IERhdGVUaW1lTnVtZXJpY0ZpZWxkRWxlbWVudDo6Y3Jl
YXRlKG1fZWRpdEVsZW1lbnQtPmRvY3VtZW50KCksICptX2VkaXRFbGVtZW50LCBzZWNvbmRQc3Vl
ZG9JZCwgc2Vjb25kSW5NaWxsaXNlY29uZCwgMCwgNTkpOworICAgICAgICAgICAgaWYgKCFuZWVk
U2Vjb25kRmllbGQoKSkgeworICAgICAgICAgICAgICAgIG1fZWRpdEVsZW1lbnQtPm1fc2Vjb25k
RmllbGQtPmRpc2FibGUoKTsKKyAgICAgICAgICAgICAgICBpZiAoIW1fZWRpdEVsZW1lbnQtPm1f
c2Vjb25kRmllbGQtPmhhc1ZhbHVlKCkpCisgICAgICAgICAgICAgICAgICAgIG1fZWRpdEVsZW1l
bnQtPm1fc2Vjb25kRmllbGQtPnNldFZhbHVlQXNJbnRlZ2VyKDAsIERhdGVUaW1lRmllbGRFbGVt
ZW50OjpEaXNwYXRjaE5vRXZlbnQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYWRkRmll
bGQobV9lZGl0RWxlbWVudC0+bV9zZWNvbmRGaWVsZC5nZXQoKSk7CisKKyAgICAgICAgICAgIGlm
IChuZWVkTWlsbGlzZWNvbmRGaWVsZCgpICYmICFtX2Zvcm1hdERldGFpbC5oYXNNaWxsaXNlY29u
ZEZpZWxkKSB7CisgICAgICAgICAgICAgICAgdmlzaXRMaXRlcmFsKGxvY2FsaXplZERlY2ltYWxT
ZXBhcmF0b3IoKSk7CisgICAgICAgICAgICAgICAgdmlzaXRGaWVsZChEYXRlVGltZUZvcm1hdDo6
RmllbGRUeXBlRnJhY3Rpb25hbFNlY29uZCwgMyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSBEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlRnJh
Y3Rpb25hbFNlY29uZDoKKyAgICAgICAgaWYgKG5lZWRNaWxsaXNlY29uZEZpZWxkKCkpIHsKKyAg
ICAgICAgICAgIGlmICghbV9lZGl0RWxlbWVudC0+bV9taWxsaXNlY29uZEZpZWxkKQorICAgICAg
ICAgICAgICAgIG1fZWRpdEVsZW1lbnQtPm1fbWlsbGlzZWNvbmRGaWVsZCA9IERhdGVUaW1lTnVt
ZXJpY0ZpZWxkRWxlbWVudDo6Y3JlYXRlKG1fZWRpdEVsZW1lbnQtPmRvY3VtZW50KCksICptX2Vk
aXRFbGVtZW50LCBtaWxsaXNlY29uZFBzdWVkb0lkLCAxLCAwLCA5OTkpOworICAgICAgICAgICAg
YWRkRmllbGQobV9lZGl0RWxlbWVudC0+bV9taWxsaXNlY29uZEZpZWxkLmdldCgpKTsKKyAgICAg
ICAgfQorICAgICAgICByZXR1cm47CisKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm47Cisg
ICAgfQorfQorCit2b2lkIERhdGVUaW1lRWRpdExheW91dGVyOjp2aXNpdExpdGVyYWwoY29uc3Qg
U3RyaW5nJiB0ZXh0KQoreworICAgIEFTU0VSVCh0ZXh0Lmxlbmd0aCgpKTsKKyAgICBtX2VkaXRF
bGVtZW50LT5hcHBlbmRDaGlsZChUZXh0OjpjcmVhdGUobV9lZGl0RWxlbWVudC0+ZG9jdW1lbnQo
KSwgdGV4dCkpOworfQorCitEYXRlVGltZUVkaXRFbGVtZW50OjpFZGl0Q29udHJvbEV2ZW50SGFu
ZGxlcjo6fkVkaXRDb250cm9sRXZlbnRIYW5kbGVyKCkKK3sKK30KKworRGF0ZVRpbWVFZGl0RWxl
bWVudDo6RGF0ZVRpbWVFZGl0RWxlbWVudChEb2N1bWVudCogZG9jdW1lbnQsIEVkaXRDb250cm9s
RXZlbnRIYW5kbGVyJiBlZGl0Q29udHJvbEV2ZW50SGFuZGxlcikKKyAgICA6IEhUTUxEaXZFbGVt
ZW50KGRpdlRhZywgZG9jdW1lbnQpCisgICAgLCBtX2VkaXRDb250cm9sRXZlbnRIYW5kbGVyKCZl
ZGl0Q29udHJvbEV2ZW50SGFuZGxlcikKKyAgICAsIG1fZm9jdXNGaWVsZEluZGV4KEludmFsaWRG
aWVsZEluZGV4KQorICAgICwgbV9udW1iZXJPZkZpZWxkcygwKQoreworICAgIERFRklORV9TVEFU
SUNfTE9DQUwoQXRvbWljU3RyaW5nLCBkYXRlVGltZUVkaXRQc2V1ZG9JZCwgKCItd2Via2l0LWRh
dGV0aW1lLWVkaXQiKSk7CisgICAgc2V0U2hhZG93UHNldWRvSWQoZGF0ZVRpbWVFZGl0UHNldWRv
SWQpOworCisgICAgbV9zcGluQnV0dG9uID0gU3BpbkJ1dHRvbkVsZW1lbnQ6OmNyZWF0ZShkb2N1
bWVudCwgKnRoaXMpOworfQorCitEYXRlVGltZUVkaXRFbGVtZW50Ojp+RGF0ZVRpbWVFZGl0RWxl
bWVudCgpCit7CisgICAgaWYgKG1faG91cjExRmllbGQpCisgICAgICAgIG1faG91cjExRmllbGQt
PnJlbW92ZUV2ZW50SGFuZGxlcigpOworCisgICAgaWYgKG1faG91cjEyRmllbGQpCisgICAgICAg
IG1faG91cjEyRmllbGQtPnJlbW92ZUV2ZW50SGFuZGxlcigpOworCisgICAgaWYgKG1faG91cjIz
RmllbGQpCisgICAgICAgIG1faG91cjIzRmllbGQtPnJlbW92ZUV2ZW50SGFuZGxlcigpOworCisg
ICAgaWYgKG1faG91cjI0RmllbGQpCisgICAgICAgIG1faG91cjI0RmllbGQtPnJlbW92ZUV2ZW50
SGFuZGxlcigpOworCisgICAgaWYgKG1fbWlsbGlzZWNvbmRGaWVsZCkKKyAgICAgICAgbV9taWxs
aXNlY29uZEZpZWxkLT5yZW1vdmVFdmVudEhhbmRsZXIoKTsKKworICAgIGlmIChtX21pbnV0ZUZp
ZWxkKQorICAgICAgICBtX21pbnV0ZUZpZWxkLT5yZW1vdmVFdmVudEhhbmRsZXIoKTsKKworICAg
IGlmIChtX3BlcmlvZEZpZWxkKQorICAgICAgICBtX3BlcmlvZEZpZWxkLT5yZW1vdmVFdmVudEhh
bmRsZXIoKTsKKworICAgIGlmIChtX3NlY29uZEZpZWxkKQorICAgICAgICBtX3NlY29uZEZpZWxk
LT5yZW1vdmVFdmVudEhhbmRsZXIoKTsKKworICAgIGlmIChtX3NwaW5CdXR0b24pCisgICAgICAg
IG1fc3BpbkJ1dHRvbi0+cmVtb3ZlU3RlcEFjdGlvbkhhbmRsZXIoKTsKK30KKworUGFzc1JlZlB0
cjxEYXRlVGltZUVkaXRFbGVtZW50PiBEYXRlVGltZUVkaXRFbGVtZW50OjpjcmVhdGUoRG9jdW1l
bnQqIGRvY3VtZW50LCBFZGl0Q29udHJvbEV2ZW50SGFuZGxlciYgZWRpdENvbnRyb2xFdmVudEhh
bmRsZXIsIGNvbnN0IFN0ZXBSYW5nZSYgc3RlcFJhbmdlKQoreworICAgIFJlZlB0cjxEYXRlVGlt
ZUVkaXRFbGVtZW50PiBjb250YWluZXIgPSBhZG9wdFJlZihuZXcgRGF0ZVRpbWVFZGl0RWxlbWVu
dChkb2N1bWVudCwgZWRpdENvbnRyb2xFdmVudEhhbmRsZXIpKTsKKyAgICBjb250YWluZXItPnNl
dExheW91dChzdGVwUmFuZ2UpOworICAgIHJldHVybiBjb250YWluZXI7Cit9CisKK2Jvb2wgRGF0
ZVRpbWVFZGl0RWxlbWVudDo6ZGlzYWJsZWQoKSBjb25zdAoreworICAgIE5vZGUqIGhvc3QgPSBz
aGFkb3dBbmNlc3Rvck5vZGUoKTsKKyAgICByZXR1cm4gIWhvc3QgfHwgaG9zdC0+ZGlzYWJsZWQo
KTsKK30KKwordm9pZCBEYXRlVGltZUVkaXRFbGVtZW50OjpkaXNhYmxlZEF0dHJpYnV0ZUNoYW5n
ZWQoKQoreworICAgIHVwZGF0ZVVJU3RhdGUoKTsKK30KKworRGF0ZVRpbWVGaWVsZEVsZW1lbnQq
IERhdGVUaW1lRWRpdEVsZW1lbnQ6OmZpZWxkQXQoaW50IGluZGV4KSBjb25zdAoreworICAgIHJl
dHVybiBpbmRleCA+PSAwICYmIGluZGV4IDwgbV9udW1iZXJPZkZpZWxkcyA/IG1fZmllbGRzW2lu
ZGV4XSA6IDA7Cit9CisKK3ZvaWQgRGF0ZVRpbWVFZGl0RWxlbWVudDo6aGFuZGxlS2V5Ym9hcmRF
dmVudChLZXlib2FyZEV2ZW50KiBrZXlib2FyZEV2ZW50KQoreworICAgIGlmIChrZXlib2FyZEV2
ZW50LT50eXBlKCkgIT0gZXZlbnROYW1lcygpLmtleWRvd25FdmVudCAmJiBmaWVsZEF0KG1fZm9j
dXNGaWVsZEluZGV4KSAmJiAhZGlzYWJsZWQoKSAmICFyZWFkT25seSgpKSB7CisgICAgICAgIGNv
bnN0IFN0cmluZyYga2V5SWRlbnRpZmllciA9IGtleWJvYXJkRXZlbnQtPmtleUlkZW50aWZpZXIo
KTsKKworICAgICAgICBpZiAoa2V5SWRlbnRpZmllciA9PSAiTGVmdCIpIHsKKyAgICAgICAgICAg
IGtleWJvYXJkRXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7CisgICAgICAgICAgICBjb25zdCBp
bnQgZmllbGRJbmRleCA9IHByZXZpb3VzRmllbGRJbmRleCgpOworICAgICAgICAgICAgaWYgKGZp
ZWxkQXQoZmllbGRJbmRleCkpCisgICAgICAgICAgICAgICAgc2V0Rm9jdXNGaWVsZChmaWVsZElu
ZGV4KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChrZXlJ
ZGVudGlmaWVyID09ICJSaWdodCIpIHsKKyAgICAgICAgICAgIGtleWJvYXJkRXZlbnQtPnNldERl
ZmF1bHRIYW5kbGVkKCk7CisgICAgICAgICAgICBjb25zdCBpbnQgZmllbGRJbmRleCA9IG5leHRG
aWVsZEluZGV4KCk7CisgICAgICAgICAgICBpZiAoZmllbGRBdChmaWVsZEluZGV4KSkKKyAgICAg
ICAgICAgICAgICBzZXRGb2N1c0ZpZWxkKGZpZWxkSW5kZXgpOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisKKyAgICAgICAgaWYgKGtleUlkZW50aWZpZXIgPT0gIlUrMDAwOSIpIHsK
KyAgICAgICAgICAgIGNvbnN0IGludCBmaWVsZEluZGV4ID0ga2V5Ym9hcmRFdmVudC0+Z2V0TW9k
aWZpZXJTdGF0ZSgiU2hpZnQiKSA/IHByZXZpb3VzRmllbGRJbmRleCgpIDogbmV4dEZpZWxkSW5k
ZXgoKTsKKyAgICAgICAgICAgIGlmIChmaWVsZEF0KGZpZWxkSW5kZXgpKSB7CisgICAgICAgICAg
ICAgICAga2V5Ym9hcmRFdmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKKyAgICAgICAgICAgICAg
ICBzZXRGb2N1c0ZpZWxkKGZpZWxkSW5kZXgpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBEYXRlVGltZUVkaXRFbGVt
ZW50OjpmaWVsZFZhbHVlQ2hhbmdlZCgpCit7CisgICAgaWYgKG1fZWRpdENvbnRyb2xFdmVudEhh
bmRsZXIpCisgICAgICAgIG1fZWRpdENvbnRyb2xFdmVudEhhbmRsZXItPmVkaXRDb250cm9sVmFs
dWVDaGFuZ2VkKCk7Cit9CisKK3ZvaWQgRGF0ZVRpbWVFZGl0RWxlbWVudDo6aGFuZGxlTW91c2VF
dmVudChNb3VzZUV2ZW50KiBtb3VzZUV2ZW50KQoreworICAgIGlmIChtb3VzZUV2ZW50LT50eXBl
KCkgPT0gZXZlbnROYW1lcygpLm1vdXNlZG93bkV2ZW50ICYmIG1vdXNlRXZlbnQtPmJ1dHRvbigp
ID09IExlZnRCdXR0b24gJiYgIWRpc2FibGVkKCkgJiYgIXJlYWRPbmx5KCkpIHsKKyAgICAgICAg
Tm9kZSogY29uc3QgcmVsYXRlZFRhcmdldCA9IG1vdXNlRXZlbnQtPnRhcmdldCgpLT50b05vZGUo
KTsKKyAgICAgICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IG1fbnVtYmVyT2ZGaWVsZHM7
ICsraW5kZXgpIHsKKyAgICAgICAgICAgIGlmIChtX2ZpZWxkc1tpbmRleF0gPT0gcmVsYXRlZFRh
cmdldCkgeworICAgICAgICAgICAgICAgIG1vdXNlRXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7
CisgICAgICAgICAgICAgICAgc2V0Rm9jdXNGaWVsZChpbmRleCk7CisgICAgICAgICAgICAgICAg
Tm9kZSogaG9zdCA9IHNoYWRvd0FuY2VzdG9yTm9kZSgpOworICAgICAgICAgICAgICAgIHRvSFRN
TEVsZW1lbnQoaG9zdCktPmZvY3VzKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgRGF0ZVRpbWVFZGl0RWxlbWVudDo6
bW92ZVRvTmV4dEZpZWxkKCkKK3sKKyAgICBpZiAobV9mb2N1c0ZpZWxkSW5kZXggIT0gSW52YWxp
ZEZpZWxkSW5kZXgpCisgICAgICAgIHNldEZvY3VzRmllbGQobmV4dEZpZWxkSW5kZXgoKSk7Cit9
CisKK2ludCBEYXRlVGltZUVkaXRFbGVtZW50OjpuZXh0RmllbGRJbmRleCgpIGNvbnN0Cit7Cisg
ICAgZm9yIChpbnQgaW5kZXggPSBtX2ZvY3VzRmllbGRJbmRleCArIDE7IGluZGV4IDwgbV9udW1i
ZXJPZkZpZWxkczsgKytpbmRleCkgeworICAgICAgICBpZiAoIW1fZmllbGRzW2luZGV4XS0+ZGlz
YWJsZWQoKSkKKyAgICAgICAgICAgIHJldHVybiBpbmRleDsKKyAgICB9CisgICAgcmV0dXJuIG1f
bnVtYmVyT2ZGaWVsZHM7Cit9CisKK2ludCBEYXRlVGltZUVkaXRFbGVtZW50OjpwcmV2aW91c0Zp
ZWxkSW5kZXgoKSBjb25zdAoreworICAgIGZvciAoaW50IGluZGV4ID0gbV9mb2N1c0ZpZWxkSW5k
ZXggLSAxOyBpbmRleCA+PSAwOyAtLWluZGV4KSB7CisgICAgICAgIGlmICghbV9maWVsZHNbaW5k
ZXhdLT5kaXNhYmxlZCgpKQorICAgICAgICAgICAgcmV0dXJuIGluZGV4OworICAgIH0KKyAgICBy
ZXR1cm4gLTE7Cit9CisKK2Jvb2wgRGF0ZVRpbWVFZGl0RWxlbWVudDo6cmVhZE9ubHkoKSBjb25z
dAoreworICAgIE5vZGUqIGNvbnN0IGhvc3QgPSBzaGFkb3dBbmNlc3Rvck5vZGUoKTsKKyAgICBp
ZiAoIWhvc3QpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEhUTUxJbnB1dEVsZW1lbnQq
IGNvbnN0IGlucHV0ID0gaG9zdC0+dG9JbnB1dEVsZW1lbnQoKTsKKyAgICByZXR1cm4gaW5wdXQg
JiYgaW5wdXQtPnJlYWRPbmx5KCk7Cit9CisKK3ZvaWQgRGF0ZVRpbWVFZGl0RWxlbWVudDo6cmVh
ZG9ubHlBdHRyaWJ1dGVDaGFuZ2VkKCkKK3sKKyAgICB1cGRhdGVVSVN0YXRlKCk7Cit9CisKK3Zv
aWQgRGF0ZVRpbWVFZGl0RWxlbWVudDo6cmVzZXRMYXlvdXQoKQoreworICAgIHdoaWxlIChOb2Rl
KiBub2RlID0gZmlyc3RDaGlsZCgpKQorICAgICAgICByZW1vdmVDaGlsZChub2RlKTsKKyAgICBt
X251bWJlck9mRmllbGRzID0gMDsKK30KKwordm9pZCBEYXRlVGltZUVkaXRFbGVtZW50OjpzZXRG
b2N1c0ZpZWxkKGludCBuZXdGb2N1c0ZpZWxkSW5kZXgpCit7CisgICAgaWYgKG1fZm9jdXNGaWVs
ZEluZGV4ID09IG5ld0ZvY3VzRmllbGRJbmRleCkKKyAgICAgICAgcmV0dXJuOworCisgICAgRGF0
ZVRpbWVGaWVsZEVsZW1lbnQqIGNvbnN0IG5ld0ZvY3VzRmllbGQgPSBmaWVsZEF0KG5ld0ZvY3Vz
RmllbGRJbmRleCk7CisgICAgaWYgKG5ld0ZvY3VzRmllbGQgJiYgbmV3Rm9jdXNGaWVsZC0+ZGlz
YWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgRGF0ZVRpbWVGaWVsZEVsZW1lbnQqIGNv
bnN0IGN1cnJlbnRGb2N1c0ZpZWxkID0gZmllbGRBdChtX2ZvY3VzRmllbGRJbmRleCk7CisKKyAg
ICBpZiAoY3VycmVudEZvY3VzRmllbGQpCisgICAgICAgIGN1cnJlbnRGb2N1c0ZpZWxkLT5zZXRG
b2N1cyhmYWxzZSk7CisKKyAgICBpZiAoIW5ld0ZvY3VzRmllbGQpIHsKKyAgICAgICAgbV9mb2N1
c0ZpZWxkSW5kZXggPSBJbnZhbGlkRmllbGRJbmRleDsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIG1fZm9jdXNGaWVsZEluZGV4ID0gbmV3Rm9jdXNGaWVsZEluZGV4OworICAgIG5ld0Zv
Y3VzRmllbGQtPnNldEZvY3VzKHRydWUpOworfQorCit2b2lkIERhdGVUaW1lRWRpdEVsZW1lbnQ6
OnNldExheW91dChjb25zdCBTdGVwUmFuZ2UmIHN0ZXBSYW5nZSkKK3sKKyAgICBEYXRlVGltZUZp
ZWxkRWxlbWVudCogY29uc3QgZm9jdXNGaWVsZCA9IGZpZWxkQXQobV9mb2N1c0ZpZWxkSW5kZXgp
OworICAgIHNldEZvY3VzRmllbGQoSW52YWxpZEZpZWxkSW5kZXgpOworCisgICAgRGF0ZVRpbWVF
ZGl0TGF5b3V0ZXIgYnVpbGRlcih0aGlzLCBzdGVwUmFuZ2UpOworICAgIGNvbnN0IFN0cmluZyBk
YXRlVGltZUZvcm1hdCA9IGJ1aWxkZXIubmVlZFNlY29uZEZpZWxkKCkgPyBsb2NhbGl6ZWRUaW1l
Rm9ybWF0VGV4dCgpIDogbG9jYWxpemVkU2hvcnRUaW1lRm9ybWF0VGV4dCgpOworICAgIGlmICgh
YnVpbGRlci5idWlsZChkYXRlVGltZUZvcm1hdCkgfHwgIW1fbnVtYmVyT2ZGaWVsZHMpCisgICAg
ICAgIGJ1aWxkZXIuYnVpbGQoYnVpbGRlci5uZWVkU2Vjb25kRmllbGQoKSA/ICJISDptbTpzcyIg
OiAiSEg6bW0iKTsKKworICAgIGFwcGVuZENoaWxkKG1fc3BpbkJ1dHRvbik7CisKKyAgICBpZiAo
Zm9jdXNGaWVsZCkgeworICAgICAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgbV9udW1i
ZXJPZkZpZWxkczsgKytpbmRleCkgeworICAgICAgICAgICAgaWYgKGZvY3VzRmllbGQgPT0gZmll
bGRBdChpbmRleCkpIHsKKyAgICAgICAgICAgICAgICBzZXRGb2N1c0ZpZWxkKGluZGV4KTsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30K
Kwordm9pZCBEYXRlVGltZUVkaXRFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBl
dmVudCkKK3sKKyAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkuZm9jdXNFdmVu
dCkgeworICAgICAgICBpZiAoIWRpc2FibGVkKCkgJiYgIXJlYWRPbmx5KCkgJiYgbV9mb2N1c0Zp
ZWxkSW5kZXggPT0gSW52YWxpZEZpZWxkSW5kZXgpCisgICAgICAgICAgICBzZXRGb2N1c0ZpZWxk
KDApOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGV2ZW50LT50eXBlKCkgPT0g
ZXZlbnROYW1lcygpLmJsdXJFdmVudCkgeworICAgICAgICBzZXRGb2N1c0ZpZWxkKEludmFsaWRG
aWVsZEluZGV4KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChldmVudC0+aXNN
b3VzZUV2ZW50KCkpIHsKKyAgICAgICAgaGFuZGxlTW91c2VFdmVudChzdGF0aWNfY2FzdDxNb3Vz
ZUV2ZW50Kj4oZXZlbnQpKTsKKyAgICB9IGVsc2UgaWYgKGV2ZW50LT5pc0tleWJvYXJkRXZlbnQo
KSkKKyAgICAgICAgaGFuZGxlS2V5Ym9hcmRFdmVudChzdGF0aWNfY2FzdDxLZXlib2FyZEV2ZW50
Kj4oZXZlbnQpKTsKKworICAgIGlmIChldmVudC0+ZGVmYXVsdEhhbmRsZWQoKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgRGF0ZVRpbWVGaWVsZEVsZW1lbnQqIGNvbnN0IGZvY3VzRmllbGQgPSBm
aWVsZEF0KG1fZm9jdXNGaWVsZEluZGV4KTsKKyAgICBpZiAoIWZvY3VzRmllbGQpCisgICAgICAg
IHJldHVybjsKKworICAgIGZvY3VzRmllbGQtPmRlZmF1bHRFdmVudEhhbmRsZXIoZXZlbnQpOwor
fQorCit2b2lkIERhdGVUaW1lRWRpdEVsZW1lbnQ6OnNldFZhbHVlQXNEYXRlKGNvbnN0IERhdGVD
b21wb25lbnRzJiBkYXRlKQoreworICAgIGlmIChtX2hvdXIxMUZpZWxkKQorICAgICAgICBtX2hv
dXIxMUZpZWxkLT5zZXRWYWx1ZUFzSW50ZWdlcihkYXRlLmhvdXIoKSk7CisKKyAgICBpZiAobV9o
b3VyMTJGaWVsZCkKKyAgICAgICAgbV9ob3VyMTJGaWVsZC0+c2V0VmFsdWVBc0ludGVnZXIoZGF0
ZS5ob3VyKCkpOworCisgICAgaWYgKG1faG91cjIzRmllbGQpCisgICAgICAgIG1faG91cjIzRmll
bGQtPnNldFZhbHVlQXNJbnRlZ2VyKGRhdGUuaG91cigpKTsKKworICAgIGlmIChtX2hvdXIyNEZp
ZWxkKQorICAgICAgICBtX2hvdXIyNEZpZWxkLT5zZXRWYWx1ZUFzSW50ZWdlcihkYXRlLmhvdXIo
KSk7CisKKyAgICBpZiAobV9taWxsaXNlY29uZEZpZWxkKQorICAgICAgICBtX21pbGxpc2Vjb25k
RmllbGQtPnNldFZhbHVlQXNJbnRlZ2VyKGRhdGUubWlsbGlzZWNvbmQoKSk7CisKKyAgICBpZiAo
bV9taW51dGVGaWVsZCkKKyAgICAgICAgbV9taW51dGVGaWVsZC0+c2V0VmFsdWVBc0ludGVnZXIo
ZGF0ZS5taW51dGUoKSk7CisKKyAgICBpZiAobV9wZXJpb2RGaWVsZCkKKyAgICAgICAgbV9wZXJp
b2RGaWVsZC0+c2V0VmFsdWVBc0ludGVnZXIoZGF0ZS5ob3VyKCkgPj0gMTIgPyAxIDogMCk7CisK
KyAgICBpZiAobV9zZWNvbmRGaWVsZCkKKyAgICAgICAgbV9zZWNvbmRGaWVsZC0+c2V0VmFsdWVB
c0ludGVnZXIoZGF0ZS5zZWNvbmQoKSk7Cit9CisKK3ZvaWQgRGF0ZVRpbWVFZGl0RWxlbWVudDo6
c2V0VmFsdWVBc0VtcHR5KCkKK3sKKyAgICBmb3IgKGludCBmaWVsZEluZGV4ID0gMDsgZmllbGRJ
bmRleCA8IG1fbnVtYmVyT2ZGaWVsZHM7ICsrZmllbGRJbmRleCkKKyAgICAgICAgZmllbGRBdChm
aWVsZEluZGV4KS0+c2V0VmFsdWVBc0VtcHR5KERhdGVUaW1lRmllbGRFbGVtZW50OjpEaXNwYXRj
aE5vRXZlbnQpOworfQorCit2b2lkIERhdGVUaW1lRWRpdEVsZW1lbnQ6OnNwaW5CdXR0b25TdGVw
RG93bigpCit7CisgICAgaWYgKERhdGVUaW1lRmllbGRFbGVtZW50KiBjb25zdCBmb2N1c0ZpZWxk
ID0gZmllbGRBdChtX2ZvY3VzRmllbGRJbmRleCkpCisgICAgICAgIGZvY3VzRmllbGQtPnN0ZXBE
b3duKCk7Cit9CisKK3ZvaWQgRGF0ZVRpbWVFZGl0RWxlbWVudDo6c3BpbkJ1dHRvblN0ZXBVcCgp
Cit7CisgICAgaWYgKERhdGVUaW1lRmllbGRFbGVtZW50KiBjb25zdCBmb2N1c0ZpZWxkID0gZmll
bGRBdChtX2ZvY3VzRmllbGRJbmRleCkpCisgICAgICAgIGZvY3VzRmllbGQtPnN0ZXBVcCgpOwor
fQorCit2b2lkIERhdGVUaW1lRWRpdEVsZW1lbnQ6OnVwZGF0ZVVJU3RhdGUoKQoreworICAgIGlm
IChkaXNhYmxlZCgpIHx8IHJlYWRPbmx5KCkpIHsKKyAgICAgIGlmIChtX3NwaW5CdXR0b24pCisg
ICAgICAgICAgbV9zcGluQnV0dG9uLT5yZWxlYXNlQ2FwdHVyZSgpOworCisgICAgICBzZXRGb2N1
c0ZpZWxkKEludmFsaWRGaWVsZEluZGV4KTsKKyAgICB9Cit9CisKK2RvdWJsZSBEYXRlVGltZUVk
aXRFbGVtZW50Ojp2YWx1ZUFzRG91YmxlKCkgY29uc3QKK3sKKyAgICBkb3VibGUgdmFsdWUgPSAw
OworCisgICAgZm9yIChpbnQgZmllbGRJbmRleCA9IDA7IGZpZWxkSW5kZXggPCBtX251bWJlck9m
RmllbGRzOyArK2ZpZWxkSW5kZXgpIHsKKyAgICAgICAgY29uc3QgRGF0ZVRpbWVGaWVsZEVsZW1l
bnQqIGNvbnN0IGZpZWxkID0gZmllbGRBdChmaWVsZEluZGV4KTsKKyAgICAgICAgaWYgKCFmaWVs
ZC0+aGFzVmFsdWUoKSkKKyAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91
YmxlPjo6cXVpZXRfTmFOKCk7CisgICAgICAgIHZhbHVlICs9IGZpZWxkLT52YWx1ZUFzRG91Ymxl
KCk7CisgICAgfQorCisgICAgcmV0dXJuIHZhbHVlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvRGF0
ZVRpbWVFZGl0RWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvRGF0ZVRpbWVF
ZGl0RWxlbWVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmZjZWEwYjI1OWQwYzhhMjJjOGU2NzZmZDM5ODY0ZjI5
NDAyOTVhMmYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9E
YXRlVGltZUVkaXRFbGVtZW50LmgKQEAgLTAsMCArMSwxMjMgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SCisgKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorICogQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaWZuZGVmIERhdGVUaW1lRWRpdEVsZW1lbnRfaAorI2RlZmluZSBEYXRlVGltZUVkaXRFbGVt
ZW50X2gKKworI2lmIEVOQUJMRShJTlBVVF9UWVBFX1RJTUVfTVVMVElQTEVfRklFTERTKQorCisj
aW5jbHVkZSAiRGF0ZVRpbWVGaWVsZEVsZW1lbnRzLmgiCisKKyNpbmNsdWRlICJUZXh0Q29udHJv
bElubmVyRWxlbWVudHMuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBEYXRlQ29t
cG9uZW50czsKK2NsYXNzIERhdGVUaW1lRWRpdExheW91dGVyOworY2xhc3MgS2V5Ym9hcmRFdmVu
dDsKK2NsYXNzIE1vdXNlRXZlbnQ7CitjbGFzcyBTdGVwUmFuZ2U7CisKKy8vIERhdGVUaW1lRWRp
dEVsZW1lbnQgY2xhc3MgY29udGFpbnMgbnVtYmVyaWMgZmllbGQgYW5kIHN5bWJvbGMgZmllbGQg
Zm9yCisvLyByZXByZXNlbnRpbmcgZGF0ZSBhbmQgdGltZSwgc3VjaCBhcworLy8gIC0gWWVhciwg
TW9udGgsIERheSBPZiBNb250aAorLy8gIC0gSG91ciwgTWludXRlLCBTZWNvbmQsIE1pbGxpc2Vj
b25kLCBQZXJpb2QKK2NsYXNzIERhdGVUaW1lRWRpdEVsZW1lbnQgOiBwdWJsaWMgSFRNTERpdkVs
ZW1lbnQsIHByaXZhdGUgRGF0ZVRpbWVGaWVsZEVsZW1lbnQ6OkZpZWxkRXZlbnRIYW5kbGVyLCBw
cml2YXRlIFNwaW5CdXR0b25FbGVtZW50OjpTdGVwQWN0aW9uSGFuZGxlciB7CisgICAgV1RGX01B
S0VfTk9OQ09QWUFCTEUoRGF0ZVRpbWVFZGl0RWxlbWVudCk7CisKK3B1YmxpYzoKKyAgICBmcmll
bmQgY2xhc3MgRGF0ZVRpbWVFZGl0TGF5b3V0ZXI7CisKKyAgICAvLyBFZGl0Q29udHJvbEV2ZW50
SGFuZGxlciBpbXBsZW1lbnRlciBtdXN0IGNhbGwgcmVtb3ZlRXZlbnRIYW5kbGVyIHdoZW4KKyAg
ICAvLyBpdCBkb2Vzbid0IGhhbmRsZSBldmVudCwgZS5nLiBhdCBkZXN0cnVjdGlvbi4KKyAgICBj
bGFzcyBFZGl0Q29udHJvbEV2ZW50SGFuZGxlciB7CisgICAgcHVibGljOgorICAgICAgICB2aXJ0
dWFsIH5FZGl0Q29udHJvbEV2ZW50SGFuZGxlcigpOworICAgICAgICB2aXJ0dWFsIHZvaWQgZWRp
dENvbnRyb2xWYWx1ZUNoYW5nZWQoKSA9IDA7CisgICAgfTsKKworICAgIHN0YXRpYyBQYXNzUmVm
UHRyPERhdGVUaW1lRWRpdEVsZW1lbnQ+IGNyZWF0ZShEb2N1bWVudCosIEVkaXRDb250cm9sRXZl
bnRIYW5kbGVyJiwgY29uc3QgU3RlcFJhbmdlJik7CisKKyAgICB2aXJ0dWFsIH5EYXRlVGltZUVk
aXRFbGVtZW50KCk7CisgICAgdmlydHVhbCB2b2lkIGRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQq
KSBPVkVSUklERTsKKyAgICB2b2lkIGRpc2FibGVkQXR0cmlidXRlQ2hhbmdlZCgpOworICAgIHZv
aWQgcmVhZG9ubHlBdHRyaWJ1dGVDaGFuZ2VkKCk7CisgICAgdm9pZCByZW1vdmVFdmVudEhhbmRs
ZXIoKSB7IG1fZWRpdENvbnRyb2xFdmVudEhhbmRsZXIgPSAwOyB9CisgICAgdm9pZCBzZXRMYXlv
dXQoY29uc3QgU3RlcFJhbmdlJik7CisgICAgdm9pZCBzZXRWYWx1ZUFzRW1wdHkoKTsKKyAgICB2
b2lkIHNldFZhbHVlQXNEYXRlKGNvbnN0IERhdGVDb21wb25lbnRzJik7CisgICAgZG91YmxlIHZh
bHVlQXNEb3VibGUoKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBzdGF0aWMgY29uc3QgaW50IElu
dmFsaWRGaWVsZEluZGV4ID0gLTE7CisKKyAgICAvLyBUaW1lIGNhbiBiZSByZXByZXNlbnQgYXQg
bW9zdCBmaXZlIGZpZWxkcywgc3VjaCBhcworICAgIC8vICAxLiBob3VyCisgICAgLy8gIDIuIG1p
bnV0ZQorICAgIC8vICAzLiBzZWNvbmQKKyAgICAvLyAgNC4gbWlsbGlzZWNvbmQKKyAgICAvLyAg
NS4gQU0vUE0KKyAgICBzdGF0aWMgY29uc3QgaW50IG1heGltdW1OdW1iZXJPZkZpZWxkcyA9IDU7
CisKKyAgICBEYXRlVGltZUVkaXRFbGVtZW50KERvY3VtZW50KiwgRWRpdENvbnRyb2xFdmVudEhh
bmRsZXImKTsKKworICAgIHZpcnR1YWwgYm9vbCBkaXNhYmxlZCgpIGNvbnN0IE9WRVJSSURFOwor
ICAgIERhdGVUaW1lRmllbGRFbGVtZW50KiBmaWVsZEF0KGludCkgY29uc3Q7CisgICAgdm9pZCBo
YW5kbGVLZXlib2FyZEV2ZW50KEtleWJvYXJkRXZlbnQqKTsKKyAgICB2b2lkIGhhbmRsZU1vdXNl
RXZlbnQoTW91c2VFdmVudCopOworICAgIGludCBuZXh0RmllbGRJbmRleCgpIGNvbnN0OworICAg
IGludCBwcmV2aW91c0ZpZWxkSW5kZXgoKSBjb25zdDsKKyAgICBib29sIHJlYWRPbmx5KCkgY29u
c3Q7CisgICAgdm9pZCByZXNldExheW91dCgpOworICAgIHZvaWQgc2V0Rm9jdXNGaWVsZChpbnQp
OworICAgIHZvaWQgdXBkYXRlVUlTdGF0ZSgpOworCisgICAgLy8gRGF0ZVRpbWVGaWVsZEVsZW1l
bnQ6OkZpZWxkRXZlbnRIYW5kbGVyIGZ1bmN0aW9ucy4KKyAgICB2aXJ0dWFsIHZvaWQgbW92ZVRv
TmV4dEZpZWxkKCkgT1ZFUlJJREUgRklOQUw7CisgICAgdmlydHVhbCB2b2lkIGZpZWxkVmFsdWVD
aGFuZ2VkKCkgT1ZFUlJJREUgRklOQUw7CisKKyAgICAvLyBTcGluQnV0dG9uRWxlbWVudDo6U3Rl
cEFjdGlvbkhhbmRsZXIgZnVuY3Rpb25zLgorICAgIHZpcnR1YWwgdm9pZCBzcGluQnV0dG9uU3Rl
cERvd24oKSBPVkVSUklERSBGSU5BTDsKKyAgICB2aXJ0dWFsIHZvaWQgc3BpbkJ1dHRvblN0ZXBV
cCgpIE9WRVJSSURFIEZJTkFMOworCisgICAgRWRpdENvbnRyb2xFdmVudEhhbmRsZXIqIG1fZWRp
dENvbnRyb2xFdmVudEhhbmRsZXI7CisgICAgUmVmUHRyPERhdGVUaW1lRmllbGRFbGVtZW50PiBt
X2hvdXIxMUZpZWxkOworICAgIFJlZlB0cjxEYXRlVGltZUZpZWxkRWxlbWVudD4gbV9ob3VyMTJG
aWVsZDsKKyAgICBSZWZQdHI8RGF0ZVRpbWVGaWVsZEVsZW1lbnQ+IG1faG91cjI0RmllbGQ7Cisg
ICAgUmVmUHRyPERhdGVUaW1lRmllbGRFbGVtZW50PiBtX2hvdXIyM0ZpZWxkOworICAgIFJlZlB0
cjxEYXRlVGltZUZpZWxkRWxlbWVudD4gbV9taWxsaXNlY29uZEZpZWxkOworICAgIFJlZlB0cjxE
YXRlVGltZUZpZWxkRWxlbWVudD4gbV9taW51dGVGaWVsZDsKKyAgICBSZWZQdHI8RGF0ZVRpbWVG
aWVsZEVsZW1lbnQ+IG1fcGVyaW9kRmllbGQ7CisgICAgUmVmUHRyPERhdGVUaW1lRmllbGRFbGVt
ZW50PiBtX3NlY29uZEZpZWxkOworICAgIFJlZlB0cjxTcGluQnV0dG9uRWxlbWVudD4gbV9zcGlu
QnV0dG9uOworICAgIERhdGVUaW1lRmllbGRFbGVtZW50KiBtX2ZpZWxkc1ttYXhpbXVtTnVtYmVy
T2ZGaWVsZHNdOworICAgIGludCBtX2ZvY3VzRmllbGRJbmRleDsKKyAgICBpbnQgbV9udW1iZXJP
ZkZpZWxkczsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCisjZW5kaWYK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0RhdGVUaW1lRmllbGRFbGVt
ZW50cy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9EYXRlVGltZUZpZWxkRWxlbWVu
dHMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjE2MDIzODBjMmE1YTc0ZGM3NDEwOWJjYjM2Yjg1Y2MzNDI1MDE3
YTYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9EYXRlVGlt
ZUZpZWxkRWxlbWVudHMuY3BwCkBAIC0wLDAgKzEsMzc4IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRQorICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUgorICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyAqIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKElOUFVUX1RZUEVfVElNRV9NVUxUSVBM
RV9GSUVMRFMpCisKKyNpbmNsdWRlICJEYXRlVGltZUZpZWxkRWxlbWVudHMuaCIKKworI2luY2x1
ZGUgIkRhdGVDb21wb25lbnRzLmgiCisjaW5jbHVkZSAiRGF0ZVRpbWVGb3JtYXQuaCIKKyNpbmNs
dWRlICJFbGVtZW50U2hhZG93LmgiCisjaW5jbHVkZSAiRXZlbnRIYW5kbGVyLmgiCisjaW5jbHVk
ZSAiSFRNTElucHV0RWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUg
IktleWJvYXJkRXZlbnQuaCIKKyNpbmNsdWRlICJNb3VzZUV2ZW50LmgiCisjaW5jbHVkZSAiVGV4
dC5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCit1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOworCitzdGF0aWMgY29uc3QgaW50
IGhvdXJJbk1pbGxpc2Vjb25kID0gMzYwMCAqIDEwMDA7CitzdGF0aWMgY29uc3QgaW50IG1pbnV0
ZUluTWlsbGlzZWNvbmQgPSA2MCAqIDEwMDA7CitzdGF0aWMgY29uc3QgaW50IHNlY29uZEluTWls
bGlzZWNvbmQgPSAxMDAwOworCitzdGF0aWMgc2l6ZV90IGRpc3BsYXlTaXplT2ZOdW1iZXIoaW50
IHZhbHVlKQoreworICAgIEFTU0VSVCh2YWx1ZSA+PSAwKTsKKworICAgIGlmICghdmFsdWUpCisg
ICAgICAgIHJldHVybiAxOworCisgICAgaW50IG51bWJlck9mRGlnaXRzID0gMDsKKyAgICB3aGls
ZSAodmFsdWUpIHsKKyAgICAgICAgdmFsdWUgLz0gMTA7CisgICAgICAgICsrbnVtYmVyT2ZEaWdp
dHM7CisgICAgfQorCisgICAgcmV0dXJuIG51bWJlck9mRGlnaXRzOworfQorCitEYXRlVGltZUZp
ZWxkRWxlbWVudDo6RmllbGRFdmVudEhhbmRsZXI6On5GaWVsZEV2ZW50SGFuZGxlcigpCit7Cit9
CisKK0RhdGVUaW1lRmllbGRFbGVtZW50OjpEYXRlVGltZUZpZWxkRWxlbWVudChEb2N1bWVudCog
ZG9jdW1lbnQsIEZpZWxkRXZlbnRIYW5kbGVyJiBmaWVsZEV2ZW50SGFuZGxlciwgY29uc3QgQXRv
bWljU3RyaW5nJiBzaGFkb3dQc2V1ZG9JZCwgaW50IHVuaXRJbk1pbGxpc2Vjb25kICkKKyAgICA6
IEhUTUxFbGVtZW50KHNwYW5UYWcsIGRvY3VtZW50KQorICAgICwgbV9maWVsZEV2ZW50SGFuZGxl
cigmZmllbGRFdmVudEhhbmRsZXIpCisgICAgLCBtX3VuaXRJbk1pbGxpc2Vjb25kKHVuaXRJbk1p
bGxpc2Vjb25kKQoreworICAgIHNldFNoYWRvd1BzZXVkb0lkKHNoYWRvd1BzZXVkb0lkKTsKK30K
Kwordm9pZCBEYXRlVGltZUZpZWxkRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCog
ZXZlbnQpCit7CisgICAgaWYgKGV2ZW50LT5pc0tleWJvYXJkRXZlbnQoKSAmJiBldmVudC0+dHlw
ZSgpID09IGV2ZW50TmFtZXMoKS5rZXlkb3duRXZlbnQpIHsKKyAgICAgICAgS2V5Ym9hcmRFdmVu
dCoga2V5Ym9hcmRFdmVudCA9IHN0YXRpY19jYXN0PEtleWJvYXJkRXZlbnQqPihldmVudCk7CisK
KyAgICAgICAgY29uc3QgU3RyaW5nJiBrZXlJZGVudGlmaWVyID0ga2V5Ym9hcmRFdmVudC0+a2V5
SWRlbnRpZmllcigpOworCisgICAgICAgIGlmIChrZXlJZGVudGlmaWVyID09ICJEb3duIikgewor
ICAgICAgICAgICAga2V5Ym9hcmRFdmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKKyAgICAgICAg
ICAgIHN0ZXBEb3duKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAg
ICBpZiAoa2V5SWRlbnRpZmllciA9PSAiVXAiKSB7CisgICAgICAgICAgICBrZXlib2FyZEV2ZW50
LT5zZXREZWZhdWx0SGFuZGxlZCgpOworICAgICAgICAgICAgc3RlcFVwKCk7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoa2V5SWRlbnRpZmllciA9PSAiVSsw
MDA4IikgeworICAgICAgICAgICAga2V5Ym9hcmRFdmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsK
KyAgICAgICAgICAgIHNldFZhbHVlQXNFbXB0eShEaXNwYXRjaEV2ZW50KTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICghZXZlbnQtPmRlZmF1bHRIYW5k
bGVkKCkpCisgICAgICAgIEhUTUxFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKGV2ZW50KTsK
K30KKwordm9pZCBEYXRlVGltZUZpZWxkRWxlbWVudDo6ZGlzYWJsZSgpCit7CisgICAgLy8gU2V0
IGRpc2FibGVkIEhUTUwgYXR0cmlidXRlIHRvIGNoYW5nZSBhcHBlcmFuY2UuCisgICAgc2V0QXR0
cmlidXRlKGRpc2FibGVkQXR0ciwgZW1wdHlTdHJpbmcoKSk7CisgICAgc2V0TmVlZHNTdHlsZVJl
Y2FsYygpOworfQorCitib29sIERhdGVUaW1lRmllbGRFbGVtZW50OjpkaXNhYmxlZCgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIGZhc3RIYXNBdHRyaWJ1dGUoZGlzYWJsZWRBdHRyKTsKK30KKwordm9p
ZCBEYXRlVGltZUZpZWxkRWxlbWVudDo6dXBkYXRlVmlzaWJsZVZhbHVlKEV2ZW50QmVoYXZpb3Ig
ZXZlbnRCZWhhdmlvcikKK3sKKyAgICBUZXh0KiBjb25zdCB0ZXh0Tm9kZSA9IHRvVGV4dChmaXJz
dENoaWxkKCkpOworICAgIGNvbnN0IFN0cmluZyBuZXdWaXNpYmxlVmFsdWUgPSB2aXNpYmxlVmFs
dWUoKTsKKyAgICBBU1NFUlQobmV3VmlzaWJsZVZhbHVlLmxlbmd0aCgpID4gMCk7CisKKyAgICBp
ZiAodGV4dE5vZGUtPndob2xlVGV4dCgpID09IG5ld1Zpc2libGVWYWx1ZSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgRXhjZXB0aW9uQ29kZSBlYzsKKyAgICB0ZXh0Tm9kZS0+cmVwbGFjZVdob2xl
VGV4dChuZXdWaXNpYmxlVmFsdWUsIGVjKTsKKworICAgIGlmIChldmVudEJlaGF2aW9yID09IERp
c3BhdGNoRXZlbnQgJiYgbV9maWVsZEV2ZW50SGFuZGxlcikKKyAgICAgICAgbV9maWVsZEV2ZW50
SGFuZGxlci0+ZmllbGRWYWx1ZUNoYW5nZWQoKTsKK30KKworZG91YmxlIERhdGVUaW1lRmllbGRF
bGVtZW50Ojp2YWx1ZUFzRG91YmxlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gaGFzVmFsdWUoKSA/
IHN0YXRpY19jYXN0PGRvdWJsZT4odmFsdWVBc0ludGVnZXIoKSkgKiBtX3VuaXRJbk1pbGxpc2Vj
b25kIDogc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjpxdWlldF9OYU4oKTsKK30KKworRGF0
ZVRpbWVIb3VyRmllbGRFbGVtZW50OjpEYXRlVGltZUhvdXJGaWVsZEVsZW1lbnQoRG9jdW1lbnQq
IGRvY3VtZW50LCBGaWVsZEV2ZW50SGFuZGxlciYgZmllbGRFdmVudEhhbmRsZXIsIGNvbnN0IEF0
b21pY1N0cmluZyYgc2hhZG93UHNldWRvSWQsIGludCBtaW5pbXVtLCBpbnQgbWF4aW11bSkKKyAg
ICA6IERhdGVUaW1lTnVtZXJpY0ZpZWxkRWxlbWVudChkb2N1bWVudCwgZmllbGRFdmVudEhhbmRs
ZXIsIHNoYWRvd1BzZXVkb0lkLCBob3VySW5NaWxsaXNlY29uZCwgbWluaW11bSwgbWF4aW11bSkK
KyAgICAsIG1fYWxpZ25tZW50KG1heGltdW0gKyBtYXhpbXVtICUgMikKK3sKKyAgICBBU1NFUlQo
KCFtaW5pbXVtICYmIChtYXhpbXVtID09IDExIHx8IG1heGltdW0gPT0gMjMpKSB8fCAobWluaW11
bSA9PSAxICYmIChtYXhpbXVtID09IDEyIHx8IG1heGltdW0gPT0gMjQpKSk7Cit9CisKK1Bhc3NS
ZWZQdHI8RGF0ZVRpbWVIb3VyRmllbGRFbGVtZW50PiBEYXRlVGltZUhvdXJGaWVsZEVsZW1lbnQ6
OmNyZWF0ZShEb2N1bWVudCogZG9jdW1lbnQsIEZpZWxkRXZlbnRIYW5kbGVyJiBmaWVsZEV2ZW50
SGFuZGxlciwgY29uc3QgQXRvbWljU3RyaW5nJiBzaGFkb3dQc2V1ZG9JZCwgaW50IG1pbmltdW0s
IGludCBtYXhpbXVtKQoreworICAgIFJlZlB0cjxEYXRlVGltZUhvdXJGaWVsZEVsZW1lbnQ+IGZp
ZWxkID0gYWRvcHRSZWYobmV3IERhdGVUaW1lSG91ckZpZWxkRWxlbWVudChkb2N1bWVudCwgZmll
bGRFdmVudEhhbmRsZXIsIHNoYWRvd1BzZXVkb0lkLCBtaW5pbXVtLCBtYXhpbXVtKSk7CisgICAg
ZmllbGQtPmFwcGVuZENoaWxkKFRleHQ6OmNyZWF0ZShkb2N1bWVudCwgZmllbGQtPnZpc2libGVW
YWx1ZSgpKSk7CisgICAgcmV0dXJuIGZpZWxkOworfQorCit2b2lkIERhdGVUaW1lSG91ckZpZWxk
RWxlbWVudDo6c2V0VmFsdWVBc0ludGVnZXIoaW50IHZhbHVlQXNIb3VyMjMsIEV2ZW50QmVoYXZp
b3IgZXZlbnRCZWhhdmlvcikKK3sKKyAgICBjb25zdCBpbnQgdmFsdWUgPSBSYW5nZSgwLCAyMyku
ZW5zdXJlSW5SYW5nZSh2YWx1ZUFzSG91cjIzKSAlIG1fYWxpZ25tZW50OworICAgIERhdGVUaW1l
TnVtZXJpY0ZpZWxkRWxlbWVudDo6c2V0VmFsdWVBc0ludGVnZXIocmFuZ2UoKS5taW5pbXVtICYm
ICF2YWx1ZSA/IG1fYWxpZ25tZW50IDogdmFsdWUsIGV2ZW50QmVoYXZpb3IpOworfQorCitpbnQg
RGF0ZVRpbWVIb3VyRmllbGRFbGVtZW50Ojp2YWx1ZUFzSW50ZWdlcigpIGNvbnN0Cit7CisgICAg
cmV0dXJuIGhhc1ZhbHVlKCkgPyBEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQ6OnZhbHVlQXNJ
bnRlZ2VyKCkgJSBtX2FsaWdubWVudCA6IC0xOworfQorCitEYXRlVGltZU51bWVyaWNGaWVsZEVs
ZW1lbnQ6OlJhbmdlOjpSYW5nZShpbnQgbWluaW11bSwgaW50IG1heGltdW0pCisgICAgOiBtYXhp
bXVtKG1heGltdW0pCisgICAgLCBtaW5pbXVtKG1pbmltdW0pCit7CisgICAgQVNTRVJUKG1pbmlt
dW0gPD0gbWF4aW11bSk7Cit9CisKK2ludCBEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQ6OlJh
bmdlOjplbnN1cmVJblJhbmdlKGludCB2YWx1ZSkgY29uc3QKK3sKKyAgICByZXR1cm4gc3RkOjpt
aW4oc3RkOjptYXgodmFsdWUsIG1pbmltdW0pLCBtYXhpbXVtKTsKK30KKworRGF0ZVRpbWVOdW1l
cmljRmllbGRFbGVtZW50OjpEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQoRG9jdW1lbnQqIGRv
Y3VtZW50LCBGaWVsZEV2ZW50SGFuZGxlciYgZmllbGRFdmVudEhhbmRsZXIsIGNvbnN0IEF0b21p
Y1N0cmluZyYgc2hhZG93UHNldWRvSWQsIGludCB1bml0SW5NaWxsaXNlY29uZCwgaW50IG1pbmlt
dW0sIGludCBtYXhpbXVtKQorICAgIDogRGF0ZVRpbWVGaWVsZEVsZW1lbnQoZG9jdW1lbnQsIGZp
ZWxkRXZlbnRIYW5kbGVyLCBzaGFkb3dQc2V1ZG9JZCwgdW5pdEluTWlsbGlzZWNvbmQpCisgICAg
LCBtX2xhc3REaWdpdENoYXJUaW1lKDApCisgICAgLCBtX3JhbmdlKG1pbmltdW0sIG1heGltdW0p
CisgICAgLCBtX3ZhbHVlKDApCisgICAgLCBtX2hhc1ZhbHVlKGZhbHNlKQoreworfQorCitQYXNz
UmVmUHRyPERhdGVUaW1lTnVtZXJpY0ZpZWxkRWxlbWVudD4gRGF0ZVRpbWVOdW1lcmljRmllbGRF
bGVtZW50OjpjcmVhdGUoRG9jdW1lbnQqIGRvY3VtZW50LCBGaWVsZEV2ZW50SGFuZGxlciYgZmll
bGRFdmVudEhhbmRsZXIsIGNvbnN0IEF0b21pY1N0cmluZyYgc2hhZG93UHNldWRvSWQsIGludCB1
bml0SW5NaWxsaXNlY29uZCwgaW50IG1pbmltdW0sIGludCBtYXhpbXVtKQoreworICAgIFJlZlB0
cjxEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQ+IGZpZWxkID0gYWRvcHRSZWYobmV3IERhdGVU
aW1lTnVtZXJpY0ZpZWxkRWxlbWVudChkb2N1bWVudCwgZmllbGRFdmVudEhhbmRsZXIsIHNoYWRv
d1BzZXVkb0lkLCB1bml0SW5NaWxsaXNlY29uZCwgbWluaW11bSwgbWF4aW11bSkpOworICAgIGZp
ZWxkLT5hcHBlbmRDaGlsZChUZXh0OjpjcmVhdGUoZG9jdW1lbnQsIGZpZWxkLT52aXNpYmxlVmFs
dWUoKSkpOworICAgIHJldHVybiBmaWVsZDsKK30KKworc3RhdGljIGludCBtYXBFdmVudFRvRGln
aXQoRXZlbnQqIGV2ZW50KQoreworICAgIGlmICghZXZlbnQtPmlzS2V5Ym9hcmRFdmVudCgpKQor
ICAgICAgICByZXR1cm4gLTE7CisKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8S2V5Ym9hcmRFdmVu
dCo+KGV2ZW50KS0+a2V5Q29kZSgpIC0gJzAnOworfQorCit2b2lkIERhdGVUaW1lTnVtZXJpY0Zp
ZWxkRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCogZXZlbnQpCit7CisgICAgY29u
c3QgaW50IGRpZ2l0ID0gbWFwRXZlbnRUb0RpZ2l0KGV2ZW50KTsKKyAgICBpZiAoZGlnaXQgPj0g
MCAmJiBkaWdpdCA8PSA5KSB7CisgICAgICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFt
ZXMoKS5rZXlkb3duRXZlbnQpIHsKKyAgICAgICAgICAgIGV2ZW50LT5zZXREZWZhdWx0SGFuZGxl
ZCgpOworICAgICAgICAgICAgc2V0VmFsdWVBc0ludGVnZXIobV9oYXNWYWx1ZSAmJiBpc0NvbnRp
bnVvc0V2ZW50KCpldmVudCkgPyBtX3ZhbHVlICogMTAgKyBkaWdpdCA6IGRpZ2l0LCBEaXNwYXRj
aEV2ZW50KTsKKyAgICAgICAgICAgIGlmIChtX3ZhbHVlICogMTAgPiBtX3JhbmdlLm1heGltdW0g
JiYgbV9maWVsZEV2ZW50SGFuZGxlcikgeworICAgICAgICAgICAgICAgIG1fZmllbGRFdmVudEhh
bmRsZXItPm1vdmVUb05leHRGaWVsZCgpOworICAgICAgICAgICAgICAgIG1fbGFzdERpZ2l0Q2hh
clRpbWUgPSAwOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgbV9sYXN0RGln
aXRDaGFyVGltZSA9IGV2ZW50LT50aW1lU3RhbXAoKTsKKyAgICAgICAgfQorICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgbV9sYXN0RGlnaXRDaGFyVGltZSA9IDA7CisgICAgRGF0ZVRpbWVG
aWVsZEVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoZXZlbnQpOworfQorCitib29sIERhdGVU
aW1lTnVtZXJpY0ZpZWxkRWxlbWVudDo6aGFzVmFsdWUoKSBjb25zdAoreworICAgIHJldHVybiBt
X2hhc1ZhbHVlOworfQorCitib29sIERhdGVUaW1lTnVtZXJpY0ZpZWxkRWxlbWVudDo6aXNDb250
aW51b3NFdmVudChjb25zdCBFdmVudCYgZXZlbnQpIGNvbnN0Cit7CisgICAgY29uc3QgdW5zaWdu
ZWQgQ29udGludW91c0V2ZW50VGhyZXNob2xkID0gNzAwOworICAgIHJldHVybiBldmVudC50aW1l
U3RhbXAoKSAtIG1fbGFzdERpZ2l0Q2hhclRpbWUgPCBDb250aW51b3VzRXZlbnRUaHJlc2hvbGQ7
Cit9CisKK3ZvaWQgRGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50OjpzZXRWYWx1ZUFzRW1wdHko
RXZlbnRCZWhhdmlvciBldmVudEJlaGF2aW9yKQoreworICAgIG1fdmFsdWUgPSAwOworICAgIG1f
aGFzVmFsdWUgPSBmYWxzZTsKKyAgICB1cGRhdGVWaXNpYmxlVmFsdWUoZXZlbnRCZWhhdmlvcik7
CisgICAgbV9sYXN0RGlnaXRDaGFyVGltZSA9IDA7Cit9CisKK3ZvaWQgRGF0ZVRpbWVOdW1lcmlj
RmllbGRFbGVtZW50OjpzZXRWYWx1ZUFzSW50ZWdlcihpbnQgdmFsdWUsIEV2ZW50QmVoYXZpb3Ig
ZXZlbnRCZWhhdmlvcikKK3sKKyAgICBtX3ZhbHVlID0gZW5zdXJlSW5SYW5nZSh2YWx1ZSk7Cisg
ICAgbV9oYXNWYWx1ZSA9IHRydWU7CisgICAgdXBkYXRlVmlzaWJsZVZhbHVlKGV2ZW50QmVoYXZp
b3IpOworICAgIG1fbGFzdERpZ2l0Q2hhclRpbWUgPSAwOworfQorCit2b2lkIERhdGVUaW1lTnVt
ZXJpY0ZpZWxkRWxlbWVudDo6c3RlcERvd24oKQoreworICAgIGlmIChtX2hhc1ZhbHVlKQorICAg
ICAgICBzZXRWYWx1ZUFzSW50ZWdlcihtX3ZhbHVlID09IG1fcmFuZ2UubWluaW11bSA/IG1fcmFu
Z2UubWF4aW11bSA6IGVuc3VyZUluUmFuZ2UobV92YWx1ZSAtIDEpLCBEaXNwYXRjaEV2ZW50KTsK
KyAgICBlbHNlCisgICAgICAgIHNldFZhbHVlQXNJbnRlZ2VyKG1fcmFuZ2UubWF4aW11bSwgRGlz
cGF0Y2hFdmVudCk7Cit9CisKK3ZvaWQgRGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50OjpzdGVw
VXAoKQoreworICAgIGlmIChtX2hhc1ZhbHVlKQorICAgICAgICBzZXRWYWx1ZUFzSW50ZWdlciht
X3ZhbHVlID09IG1fcmFuZ2UubWF4aW11bSA/IG1fcmFuZ2UubWluaW11bSA6IGVuc3VyZUluUmFu
Z2UobV92YWx1ZSArIDEpLCBEaXNwYXRjaEV2ZW50KTsKKyAgICBlbHNlCisgICAgICAgIHNldFZh
bHVlQXNJbnRlZ2VyKG1fcmFuZ2UubWluaW11bSwgRGlzcGF0Y2hFdmVudCk7Cit9CisKK1N0cmlu
ZyBEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQ6OnZhbHVlKCkgY29uc3QKK3sKKyAgICBpZiAo
IW1faGFzVmFsdWUpCisgICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOworCisgICAgaWYgKG1f
cmFuZ2UubWF4aW11bSA+IDk5OSkKKyAgICAgICAgcmV0dXJuIFN0cmluZzo6bnVtYmVyKG1fdmFs
dWUpOworCisgICAgaWYgKG1fcmFuZ2UubWF4aW11bSA+IDk5KQorICAgICAgICByZXR1cm4gU3Ry
aW5nOjpmb3JtYXQoIiUwM2QiLCBtX3ZhbHVlKTsKKworICAgIHJldHVybiBTdHJpbmc6OmZvcm1h
dCgiJTAyZCIsIG1fdmFsdWUpOworfQorCitpbnQgRGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50
Ojp2YWx1ZUFzSW50ZWdlcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1faGFzVmFsdWUgPyBtX3Zh
bHVlIDogLTE7Cit9CisKK1N0cmluZyBEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQ6OnZpc2li
bGVWYWx1ZSgpIGNvbnN0Cit7CisgICAgaWYgKG1faGFzVmFsdWUpCisgICAgICAgIHJldHVybiB2
YWx1ZSgpOworCisgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOworICAgIGZvciAoaW50IG51bWJl
ck9mRGFzaHMgPSBzdGQ6Om1heChkaXNwbGF5U2l6ZU9mTnVtYmVyKG1fcmFuZ2UubWF4aW11bSks
IGRpc3BsYXlTaXplT2ZOdW1iZXIobV9yYW5nZS5taW5pbXVtKSk7IG51bWJlck9mRGFzaHM7IC0t
bnVtYmVyT2ZEYXNocykKKyAgICAgICAgYnVpbGRlci5hcHBlbmQoJy0nKTsKKyAgICByZXR1cm4g
YnVpbGRlci50b1N0cmluZygpOworfQorCitEYXRlVGltZVN5bWJvbGljRmllbGRFbGVtZW50OjpE
YXRlVGltZVN5bWJvbGljRmllbGRFbGVtZW50KERvY3VtZW50KiBkb2N1bWVudCwgRmllbGRFdmVu
dEhhbmRsZXImIGZpZWxkRXZlbnRIYW5kbGVyLCBjb25zdCBBdG9taWNTdHJpbmcmIHNoYWRvd1Bz
ZXVkb0lkLCBpbnQgdW5pdEluTWlsbGlzZWNvbmQsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBzeW1i
b2xzKQorICAgIDogRGF0ZVRpbWVGaWVsZEVsZW1lbnQoZG9jdW1lbnQsIGZpZWxkRXZlbnRIYW5k
bGVyLCBzaGFkb3dQc2V1ZG9JZCwgdW5pdEluTWlsbGlzZWNvbmQpCisgICAgLCBtX3N5bWJvbHMo
c3ltYm9scykKKyAgICAsIG1fc2VsZWN0ZWRJbmRleCgtMSkKK3sKKyAgICBBU1NFUlQoIXN5bWJv
bHMuaXNFbXB0eSgpKTsKK30KKworUGFzc1JlZlB0cjxEYXRlVGltZVN5bWJvbGljRmllbGRFbGVt
ZW50PiBEYXRlVGltZVN5bWJvbGljRmllbGRFbGVtZW50OjpjcmVhdGUoRG9jdW1lbnQqIGRvY3Vt
ZW50LCBGaWVsZEV2ZW50SGFuZGxlciYgZmllbGRFdmVudEhhbmRsZXIsIGNvbnN0IEF0b21pY1N0
cmluZyYgc2hhZG93UHNldWRvSWQsIGludCB1bml0SW5NaWxsaXNlY29uZCwgY29uc3QgVmVjdG9y
PFN0cmluZz4mIHN5bWJvbHMpCit7CisgICAgUmVmUHRyPERhdGVUaW1lU3ltYm9saWNGaWVsZEVs
ZW1lbnQ+IGZpZWxkID0gYWRvcHRSZWYobmV3IERhdGVUaW1lU3ltYm9saWNGaWVsZEVsZW1lbnQo
ZG9jdW1lbnQsIGZpZWxkRXZlbnRIYW5kbGVyLCBzaGFkb3dQc2V1ZG9JZCwgdW5pdEluTWlsbGlz
ZWNvbmQsIHN5bWJvbHMpKTsKKyAgICBmaWVsZC0+YXBwZW5kQ2hpbGQoVGV4dDo6Y3JlYXRlKGRv
Y3VtZW50LCBmaWVsZC0+dmlzaWJsZVZhbHVlKCkpKTsKKyAgICByZXR1cm4gZmllbGQ7Cit9CisK
K3ZvaWQgRGF0ZVRpbWVTeW1ib2xpY0ZpZWxkRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihF
dmVudCogZXZlbnQpCit7CisgICAgaWYgKGV2ZW50LT5pc0tleWJvYXJkRXZlbnQoKSAmJiBldmVu
dC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5rZXlwcmVzc0V2ZW50KSB7CisgICAgICAgIEtleWJv
YXJkRXZlbnQqIGtleWJvYXJkRXZlbnQgPSBzdGF0aWNfY2FzdDxLZXlib2FyZEV2ZW50Kj4oZXZl
bnQpOworICAgICAgICBjb25zdCBpbnQgcmF3Q2hhckNvZGUgPSBrZXlib2FyZEV2ZW50LT5jaGFy
Q29kZSgpOworICAgICAgICBjb25zdCBpbnQgY2hhckNvZGUgPSByYXdDaGFyQ29kZSA+PSAnYScg
JiYgcmF3Q2hhckNvZGUgPD0gJ3onID8gcmF3Q2hhckNvZGUgKyAnQScgLSAnYScgOiByYXdDaGFy
Q29kZTsKKyAgICAgICAgaWYgKGNoYXJDb2RlID49ICdBJyAmJiBjaGFyQ29kZSA8PSAnWicpIHsK
KyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW5kZXggPSAwOyBpbmRleCA8IG1fc3ltYm9scy5z
aXplKCk7ICsraW5kZXgpIHsKKyAgICAgICAgICAgICAgICBpZiAobV9zeW1ib2xzW2luZGV4XVsw
XSA9PSBjaGFyQ29kZSkgeworICAgICAgICAgICAgICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhh
bmRsZWQoKTsKKyAgICAgICAgICAgICAgICAgICAgc2V0VmFsdWVBc0ludGVnZXIoaW5kZXgsIERp
c3BhdGNoRXZlbnQpOworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgRGF0ZVRpbWVGaWVs
ZEVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoZXZlbnQpOworfQorCitib29sIERhdGVUaW1l
U3ltYm9saWNGaWVsZEVsZW1lbnQ6Omhhc1ZhbHVlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9z
ZWxlY3RlZEluZGV4ID49IDA7Cit9CisKK3ZvaWQgRGF0ZVRpbWVTeW1ib2xpY0ZpZWxkRWxlbWVu
dDo6c2V0VmFsdWVBc0VtcHR5KEV2ZW50QmVoYXZpb3IgZXZlbnRCZWhhdmlvcikKK3sKKyAgICBt
X3NlbGVjdGVkSW5kZXggPSBJbnZhbGlkSW5kZXg7CisgICAgdXBkYXRlVmlzaWJsZVZhbHVlKGV2
ZW50QmVoYXZpb3IpOworfQorCit2b2lkIERhdGVUaW1lU3ltYm9saWNGaWVsZEVsZW1lbnQ6OnNl
dFZhbHVlQXNJbnRlZ2VyKGludCBuZXdTZWxlY3RlZEluZGV4LCBFdmVudEJlaGF2aW9yIGV2ZW50
QmVoYXZpb3IpCit7CisgICAgbV9zZWxlY3RlZEluZGV4ID0gc3RkOjptYXgoMCwgc3RkOjptaW4o
bmV3U2VsZWN0ZWRJbmRleCwgc3RhdGljX2Nhc3Q8aW50PihtX3N5bWJvbHMuc2l6ZSgpIC0gMSkp
KTsKKyAgICB1cGRhdGVWaXNpYmxlVmFsdWUoZXZlbnRCZWhhdmlvcik7Cit9CisKK3ZvaWQgRGF0
ZVRpbWVTeW1ib2xpY0ZpZWxkRWxlbWVudDo6c3RlcERvd24oKQoreworICAgIGNvbnN0IGludCBz
aXplID0gbV9zeW1ib2xzLnNpemUoKTsKKyAgICBtX3NlbGVjdGVkSW5kZXggPSBoYXNWYWx1ZSgp
ID8gKG1fc2VsZWN0ZWRJbmRleCArIHNpemUgLSAxKSAlIHNpemUgOiBzaXplIC0gMTsKKyAgICB1
cGRhdGVWaXNpYmxlVmFsdWUoRGlzcGF0Y2hFdmVudCk7Cit9CisKK3ZvaWQgRGF0ZVRpbWVTeW1i
b2xpY0ZpZWxkRWxlbWVudDo6c3RlcFVwKCkKK3sKKyAgICBtX3NlbGVjdGVkSW5kZXggPSBoYXNW
YWx1ZSgpID8gKG1fc2VsZWN0ZWRJbmRleCArIDEpICUgbV9zeW1ib2xzLnNpemUoKSA6IDA7Cisg
ICAgdXBkYXRlVmlzaWJsZVZhbHVlKERpc3BhdGNoRXZlbnQpOworfQorCitTdHJpbmcgRGF0ZVRp
bWVTeW1ib2xpY0ZpZWxkRWxlbWVudDo6dmFsdWUoKSBjb25zdAoreworICAgIHJldHVybiBoYXNW
YWx1ZSgpID8gbV9zeW1ib2xzW21fc2VsZWN0ZWRJbmRleF0gOiBlbXB0eVN0cmluZygpOworfQor
CitpbnQgRGF0ZVRpbWVTeW1ib2xpY0ZpZWxkRWxlbWVudDo6dmFsdWVBc0ludGVnZXIoKSBjb25z
dAoreworICAgIHJldHVybiBtX3NlbGVjdGVkSW5kZXg7Cit9CisKK1N0cmluZyBEYXRlVGltZVN5
bWJvbGljRmllbGRFbGVtZW50Ojp2aXNpYmxlVmFsdWUoKSBjb25zdAoreworICAgIHJldHVybiBo
YXNWYWx1ZSgpID8gbV9zeW1ib2xzW21fc2VsZWN0ZWRJbmRleF0gOiAiLS0iOworfQorCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aHRtbC9zaGFkb3cvRGF0ZVRpbWVGaWVsZEVsZW1lbnRzLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L3NoYWRvdy9EYXRlVGltZUZpZWxkRWxlbWVudHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41Nzk5MGFhYWRhZTE5
NzI1NmJmZjkzMTlkMTNjNzI5Nzc1YWQzZWU5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9zaGFkb3cvRGF0ZVRpbWVGaWVsZEVsZW1lbnRzLmgKQEAgLTAsMCArMSwxODIg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
ICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisgKiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UgorICogQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisg
KiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIERhdGVUaW1lRmllbGRFbGVtZW50c19oCisj
ZGVmaW5lIERhdGVUaW1lRmllbGRFbGVtZW50c19oCisKKyNpZiBFTkFCTEUoSU5QVVRfVFlQRV9U
SU1FX01VTFRJUExFX0ZJRUxEUykKKworI2luY2x1ZGUgIkhUTUxEaXZFbGVtZW50LmgiCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgS2V5Ym9hcmRFdmVudDsKK2NsYXNzIE1vdXNlRXZl
bnQ7CisKKy8vIERhdGVUaW1lRmllbGRFbGVtZW50IGlzIGJhc2UgY2xhc3Mgb2YgZGF0ZSB0aW1l
IGZpZWxkIGVsZW1lbnQuCitjbGFzcyBEYXRlVGltZUZpZWxkRWxlbWVudCA6IHB1YmxpYyBIVE1M
RWxlbWVudCB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRGF0ZVRpbWVGaWVsZEVsZW1lbnQp
OworCitwdWJsaWM6CisgICAgZW51bSBFdmVudEJlaGF2aW9yIHsKKyAgICAgICAgRGlzcGF0Y2hO
b0V2ZW50LAorICAgICAgICBEaXNwYXRjaEV2ZW50LAorICAgIH07CisKKyAgICAvLyBGaWVsZEV2
ZW50SGFuZGxlciBpbXBsZW1lbnRlciBtdXN0IGNhbGwgcmVtb3ZlRXZlbnRIYW5kbGVyIHdoZW4K
KyAgICAvLyBpdCBkb2Vzbid0IGhhbmRsZSBldmVudCwgZS5nLiBhdCBkZXN0cnVjdGlvbi4KKyAg
ICBjbGFzcyBGaWVsZEV2ZW50SGFuZGxlciB7CisgICAgcHVibGljOgorICAgICAgICB2aXJ0dWFs
IH5GaWVsZEV2ZW50SGFuZGxlcigpOworICAgICAgICB2aXJ0dWFsIHZvaWQgZmllbGRWYWx1ZUNo
YW5nZWQoKSA9IDA7CisgICAgICAgIHZpcnR1YWwgdm9pZCBtb3ZlVG9OZXh0RmllbGQoKSA9IDA7
CisgICAgfTsKKworICAgIHZpcnR1YWwgdm9pZCBkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50Kik7
CisgICAgdm9pZCBkaXNhYmxlKCk7CisgICAgdmlydHVhbCBib29sIGRpc2FibGVkKCkgY29uc3Qg
T1ZFUlJJREU7CisgICAgdmlydHVhbCBib29sIGhhc1ZhbHVlKCkgY29uc3QgPSAwOworICAgIHZv
aWQgcmVtb3ZlRXZlbnRIYW5kbGVyKCkgeyBtX2ZpZWxkRXZlbnRIYW5kbGVyID0gMDsgfQorICAg
IHZpcnR1YWwgdm9pZCBzZXRWYWx1ZUFzRW1wdHkoRXZlbnRCZWhhdmlvciA9IERpc3BhdGNoTm9F
dmVudCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRWYWx1ZUFzSW50ZWdlcihpbnQsIEV2ZW50
QmVoYXZpb3IgPSBEaXNwYXRjaE5vRXZlbnQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc3RlcERv
d24oKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHN0ZXBVcCgpID0gMDsKKyAgICB2aXJ0dWFsIFN0
cmluZyB2YWx1ZSgpIGNvbnN0ID0gMDsKKyAgICBkb3VibGUgdmFsdWVBc0RvdWJsZSgpIGNvbnN0
OworICAgIHZpcnR1YWwgaW50IHZhbHVlQXNJbnRlZ2VyKCkgY29uc3QgPSAwOworICAgIHZpcnR1
YWwgU3RyaW5nIHZpc2libGVWYWx1ZSgpIGNvbnN0ID0gMDsKKworcHJvdGVjdGVkOgorICAgIERh
dGVUaW1lRmllbGRFbGVtZW50KERvY3VtZW50KiwgRmllbGRFdmVudEhhbmRsZXImLCBjb25zdCBB
dG9taWNTdHJpbmcmLCBpbnQpOworCisgICAgaW50IHVuaXRJbk1pbGxpc2Vjb25kKCkgY29uc3Qg
eyByZXR1cm4gbV91bml0SW5NaWxsaXNlY29uZDsgfQorICAgIHZvaWQgdXBkYXRlVmlzaWJsZVZh
bHVlKEV2ZW50QmVoYXZpb3IpOworCisgICAgRmllbGRFdmVudEhhbmRsZXIqIG1fZmllbGRFdmVu
dEhhbmRsZXI7CisgICAgY29uc3QgaW50IG1fdW5pdEluTWlsbGlzZWNvbmQ7Cit9OworCisvLyBE
YXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQgcmVwcmVzZW50cyBudW1lcmljIGZpZWxkIG9mIGRh
dGUgdGltZSBmb3JtYXQuCisvLyBUaGlzIGNsYXNzIG1heSBiZSB1c2VkIGZvcjoKKy8vICAtIG1p
bnV0ZQorLy8gIC0gbWlsbGlzZWNvbmQKKy8vICAtIG1vbnRoCisvLyAgLSBzZWNvbmQKKy8vICAt
IHllYXIKK2NsYXNzIERhdGVUaW1lTnVtZXJpY0ZpZWxkRWxlbWVudCA6IHB1YmxpYyBEYXRlVGlt
ZUZpZWxkRWxlbWVudCB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRGF0ZVRpbWVOdW1lcmlj
RmllbGRFbGVtZW50KTsKKworcHVibGljOgorICAgIHN0cnVjdCBSYW5nZSB7CisgICAgICAgIFJh
bmdlKGludCBtaW5pbXVtLCBpbnQgbWF4aW11bSk7CisgICAgICAgIGludCBlbnN1cmVJblJhbmdl
KGludCkgY29uc3Q7CisKKyAgICAgICAgaW50IG1heGltdW07CisgICAgICAgIGludCBtaW5pbXVt
OworICAgIH07CisKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxEYXRlVGltZU51bWVyaWNGaWVsZEVs
ZW1lbnQ+IGNyZWF0ZShEb2N1bWVudCosIEZpZWxkRXZlbnRIYW5kbGVyJiwgY29uc3QgQXRvbWlj
U3RyaW5nJiwgaW50IHVuaXRJbk1pbGxpc2Vjb25kLCBpbnQgbWluaW11bSwgaW50IG1heGltdW0p
OworCitwcm90ZWN0ZWQ6CisgICAgRGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50KERvY3VtZW50
KiwgRmllbGRFdmVudEhhbmRsZXImLCBjb25zdCBBdG9taWNTdHJpbmcmLCBpbnQgdW5pdEluTWls
bGlzZWNvbmQsIGludCBtaW5pbXVtLCBpbnQgbWF4aW11bSk7CisKKyAgICBpbnQgZW5zdXJlSW5S
YW5nZShpbnQgdmFsdWUpIGNvbnN0IHsgcmV0dXJuIG1fcmFuZ2UuZW5zdXJlSW5SYW5nZSh2YWx1
ZSk7IH0KKyAgICBjb25zdCBSYW5nZSYgcmFuZ2UoKSBjb25zdCB7IHJldHVybiBtX3JhbmdlOyB9
CisKKyAgICAvLyBEYXRlVGltZUZpZWxkRWxlbWVudCBmdW5jdGlvbnMuCisgICAgdmlydHVhbCBi
b29sIGhhc1ZhbHVlKCkgY29uc3QgT1ZFUlJJREUgRklOQUw7CisgICAgdmlydHVhbCB2b2lkIHNl
dFZhbHVlQXNJbnRlZ2VyKGludCwgRXZlbnRCZWhhdmlvcikgT1ZFUlJJREU7CisgICAgdmlydHVh
bCBpbnQgdmFsdWVBc0ludGVnZXIoKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIFN0cmlu
ZyB2aXNpYmxlVmFsdWUoKSBjb25zdCBPVkVSUklERSBGSU5BTDsKKworcHJpdmF0ZToKKyAgICBi
b29sIGlzQ29udGludW9zRXZlbnQoY29uc3QgRXZlbnQmKSBjb25zdDsKKworICAgIC8vIERhdGVU
aW1lRmllbGRFbGVtZW50IGZ1bmN0aW9ucy4KKyAgICB2aXJ0dWFsIHZvaWQgZGVmYXVsdEV2ZW50
SGFuZGxlcihFdmVudCopIE9WRVJSSURFIEZJTkFMOworICAgIHZpcnR1YWwgdm9pZCBzZXRWYWx1
ZUFzRW1wdHkoRXZlbnRCZWhhdmlvcikgT1ZFUlJJREUgRklOQUw7CisgICAgdmlydHVhbCB2b2lk
IHN0ZXBEb3duKCkgT1ZFUlJJREUgRklOQUw7CisgICAgdmlydHVhbCB2b2lkIHN0ZXBVcCgpIE9W
RVJSSURFIEZJTkFMOworICAgIHZpcnR1YWwgU3RyaW5nIHZhbHVlKCkgY29uc3QgT1ZFUlJJREUg
RklOQUw7CisKKyAgICBET01UaW1lU3RhbXAgbV9sYXN0RGlnaXRDaGFyVGltZTsKKyAgICBjb25z
dCBSYW5nZSBtX3JhbmdlOworICAgIGludCBtX3ZhbHVlOworICAgIGJvb2wgbV9oYXNWYWx1ZTsK
K307CisKKy8vIERhdGVUaW1lSG91ckZpZWxkRWxlbWVudCBpcyB1c2VkIGZvciBob3VyIGZpZWxk
IG9mIGRhdGUgdGltZSBmb3JtYXQKKy8vIHN1cHBvcnRpbmcgZm9sbG93aW5nIHBhdHRlcm5zOgor
Ly8gIC0gMCB0byAxMQorLy8gIC0gMSB0byAxMgorLy8gIC0gMCB0byAyMworLy8gIC0gMSB0byAy
NAorY2xhc3MgRGF0ZVRpbWVIb3VyRmllbGRFbGVtZW50IDogcHVibGljIERhdGVUaW1lTnVtZXJp
Y0ZpZWxkRWxlbWVudCB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRGF0ZVRpbWVIb3VyRmll
bGRFbGVtZW50KTsKKworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPERhdGVUaW1lSG91
ckZpZWxkRWxlbWVudD4gY3JlYXRlKERvY3VtZW50KiwgRmllbGRFdmVudEhhbmRsZXImLCBjb25z
dCBBdG9taWNTdHJpbmcmLCBpbnQgbWluaW11bSwgaW50IG1heGltdW0pOworCitwcml2YXRlOgor
ICAgIERhdGVUaW1lSG91ckZpZWxkRWxlbWVudChEb2N1bWVudCosIEZpZWxkRXZlbnRIYW5kbGVy
JiwgY29uc3QgQXRvbWljU3RyaW5nJiwgaW50IG1pbmltdW0sIGludCBtYXhpbXVtKTsKKworICAg
IC8vIERhdGVUaW1lRmllbGRFbGVtZW50IGZ1bmN0aW9ucy4KKyAgICB2aXJ0dWFsIHZvaWQgc2V0
VmFsdWVBc0ludGVnZXIoaW50LCBFdmVudEJlaGF2aW9yKSBPVkVSUklERSBGSU5BTDsKKyAgICB2
aXJ0dWFsIGludCB2YWx1ZUFzSW50ZWdlcigpIGNvbnN0IE9WRVJSSURFIEZJTkFMOworCisgICAg
Y29uc3QgaW50IG1fYWxpZ25tZW50OworfTsKKworLy8gRGF0ZVRpbWVTeW1ib2xpY0ZpZWxkRWxl
bWVudCBpcyB1c2VkIGZvciBwZXJpb2QgZmllbGQgb2YgZGF0YSB0aW1lIGZvcm1hdC4KK2NsYXNz
IERhdGVUaW1lU3ltYm9saWNGaWVsZEVsZW1lbnQgOiBwdWJsaWMgRGF0ZVRpbWVGaWVsZEVsZW1l
bnQgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKERhdGVUaW1lU3ltYm9saWNGaWVsZEVsZW1l
bnQpOworCitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8RGF0ZVRpbWVTeW1ib2xpY0Zp
ZWxkRWxlbWVudD4gY3JlYXRlKERvY3VtZW50KiwgRmllbGRFdmVudEhhbmRsZXImLCBjb25zdCBB
dG9taWNTdHJpbmcmLCBpbnQsIGNvbnN0IFZlY3RvcjxTdHJpbmc+Jik7CisKK3ByaXZhdGU6Cisg
ICAgc3RhdGljIGNvbnN0IGludCBJbnZhbGlkSW5kZXggPSAtMTsKKworICAgIERhdGVUaW1lU3lt
Ym9saWNGaWVsZEVsZW1lbnQoRG9jdW1lbnQqLCBGaWVsZEV2ZW50SGFuZGxlciYsIGNvbnN0IEF0
b21pY1N0cmluZyYsIGludCwgY29uc3QgVmVjdG9yPFN0cmluZz4mKTsKKworICAgIC8vIERhdGVU
aW1lRmllbGRFbGVtZW50IGZ1bmN0aW9ucy4KKyAgICB2aXJ0dWFsIHZvaWQgZGVmYXVsdEV2ZW50
SGFuZGxlcihFdmVudCopIE9WRVJSSURFIEZJTkFMOworICAgIHZpcnR1YWwgYm9vbCBoYXNWYWx1
ZSgpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBzZXRWYWx1ZUFzRW1wdHkoRXZlbnRCZWhhdmlv
ciA9IERpc3BhdGNoTm9FdmVudCkgT1ZFUlJJREUgRklOQUw7CisgICAgdmlydHVhbCB2b2lkIHNl
dFZhbHVlQXNJbnRlZ2VyKGludCwgRXZlbnRCZWhhdmlvcikgT1ZFUlJJREUgRklOQUw7CisgICAg
dmlydHVhbCB2b2lkIHN0ZXBEb3duKCkgT1ZFUlJJREUgRklOQUw7CisgICAgdmlydHVhbCB2b2lk
IHN0ZXBVcCgpIE9WRVJSSURFIEZJTkFMOworICAgIHZpcnR1YWwgU3RyaW5nIHZhbHVlKCkgY29u
c3QgT1ZFUlJJREUgRklOQUw7CisgICAgdmlydHVhbCBpbnQgdmFsdWVBc0ludGVnZXIoKSBjb25z
dCBPVkVSUklERSBGSU5BTDsKKyAgICB2aXJ0dWFsIFN0cmluZyB2aXNpYmxlVmFsdWUoKSBjb25z
dCBPVkVSUklERSBGSU5BTDsKKworICAgIGNvbnN0IFZlY3RvcjxTdHJpbmc+IG1fc3ltYm9sczsK
KyAgICBpbnQgbV9zZWxlY3RlZEluZGV4OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CisjZW5kaWYKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9mZWF0
dXJlcy5neXBpIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9mZWF0dXJlcy5neXBpCmluZGV4IDZh
YTU3YmUzZGQ5YWY1Y2I0ZWQ1ODc2OTBhNjkwNDFiNDFjZjc2M2MuLmYzY2NlMTNjNzZlNmFkN2M5
MDg5YTgzOTJmYjAwOWEzMmFiYzk2ODIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vZmVhdHVyZXMuZ3lwaQorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL2ZlYXR1cmVzLmd5
cGkKQEAgLTE3MCw2ICsxNzAsNyBAQAogICAgICAgICAgICdFTkFCTEVfQ0FMRU5EQVJfUElDS0VS
PTEnLAogICAgICAgICAgICdFTkFCTEVfSU5QVVRfU1BFRUNIPTEnLAogICAgICAgICAgICdFTkFC
TEVfSU5QVVRfVFlQRV9DT0xPUj0xJywKKyAgICAgICAgICAnRU5BQkxFX0lOUFVUX1RZUEVfVElN
RV9NVUxUSVBMRV9GSUVMRFM9MScsCiAgICAgICAgICAgJ0VOQUJMRV9KQVZBU0NSSVBUX0kxOE5f
QVBJPTEnLAogICAgICAgICAgICdFTkFCTEVfTEVHQUNZX05PVElGSUNBVElPTlM9MScsCiAgICAg
ICAgICAgJ0VOQUJMRV9NRURJQV9DQVBUVVJFPTAnLAo=
</data>
<flag name="review"
          id="164916"
          type_id="1"
          status="-"
          setter="tkent"
    />
    <flag name="commit-queue"
          id="164917"
          type_id="3"
          status="-"
          setter="yosin"
    />
          </attachment>
      

    </bug>

</bugzilla>