<?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>240231</bug_id>
          
          <creation_ts>2022-05-09 06:22:12 -0700</creation_ts>
          <short_desc>Add a better mock for audio units used by CoreAudioSharedUnit</short_desc>
          <delta_ts>2022-05-12 07:29:03 -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>WebRTC</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="youenn fablet">youennf</reporter>
          <assigned_to name="youenn fablet">youennf</assigned_to>
          <cc>eric.carlson</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>glenn</cc>
    
    <cc>hta</cc>
    
    <cc>jer.noble</cc>
    
    <cc>philipj</cc>
    
    <cc>sergio</cc>
    
    <cc>tommyw</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>youennf</cc>
    
    <cc>youssefdevelops</cc>
    
    <cc>y_soliman</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1867612</commentid>
    <comment_count>0</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2022-05-09 06:22:12 -0700</bug_when>
    <thetext>Add a better mock for audio units used by CoreAudioSharedUnit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1867616</commentid>
    <comment_count>1</comment_count>
      <attachid>459041</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2022-05-09 06:55:29 -0700</bug_when>
    <thetext>Created attachment 459041
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1867905</commentid>
    <comment_count>2</comment_count>
      <attachid>459111</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2022-05-10 05:32:39 -0700</bug_when>
    <thetext>Created attachment 459111
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1867907</commentid>
    <comment_count>3</comment_count>
      <attachid>459112</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2022-05-10 05:48:14 -0700</bug_when>
    <thetext>Created attachment 459112
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1867908</commentid>
    <comment_count>4</comment_count>
      <attachid>459113</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2022-05-10 05:53:51 -0700</bug_when>
    <thetext>Created attachment 459113
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1867915</commentid>
    <comment_count>5</comment_count>
      <attachid>459113</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2022-05-10 06:28:21 -0700</bug_when>
    <thetext>Comment on attachment 459113
Patch

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

&gt; Source/WebCore/platform/mediastream/mac/MockAudioSharedUnit.mm:266
&gt; +    auto sampleTime = PAL::toMediaTime(startTime).toFloat();

Can you just use `sampleTime = PAL::CMTimeGetSeconds(startTime)`?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1868066</commentid>
    <comment_count>6</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2022-05-11 00:11:22 -0700</bug_when>
    <thetext>(In reply to Eric Carlson from comment #5)
&gt; Comment on attachment 459113 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=459113&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/mediastream/mac/MockAudioSharedUnit.mm:266
&gt; &gt; +    auto sampleTime = PAL::toMediaTime(startTime).toFloat();
&gt; 
&gt; Can you just use `sampleTime = PAL::CMTimeGetSeconds(startTime)`?

Yes, that seems better.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1868068</commentid>
    <comment_count>7</comment_count>
      <attachid>459113</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2022-05-11 00:12:24 -0700</bug_when>
    <thetext>Comment on attachment 459113
Patch

win failure is unrelated. Marking as r?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1868346</commentid>
    <comment_count>8</comment_count>
      <attachid>459221</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2022-05-12 04:16:17 -0700</bug_when>
    <thetext>Created attachment 459221
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1868392</commentid>
    <comment_count>9</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2022-05-12 06:57:29 -0700</bug_when>
    <thetext>Committed r294102 (250487@main): &lt;https://commits.webkit.org/250487@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 459221.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1868393</commentid>
    <comment_count>10</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2022-05-12 06:58:13 -0700</bug_when>
    <thetext>&lt;rdar://problem/93171741&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>459041</attachid>
            <date>2022-05-09 06:55:29 -0700</date>
            <delta_ts>2022-05-10 05:32:34 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-240231-20220509155528.patch</filename>
            <type>text/plain</type>
            <size>83950</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkzOTU4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDY0ZWMxNmFhM2EwZjdj
YjdmOGIwMjJiNTY4ZTZmZDZiYTA0YWZkOS4uZjkzZGIyMjUzZGFiZGY2NGNhNjkxYmQzMzAxZTI4
MTRjNWZhODA0NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI5IEBACisyMDIyLTA1LTA5ICBZb3Vl
bm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgYSBiZXR0ZXIgbW9j
ayBmb3IgYXVkaW8gdW5pdHMgdXNlZCBieSBDb3JlQXVkaW9TaGFyZWRVbml0CisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNDAyMzEKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNb3ZlIENvcmVBdWRpb1NoYXJl
ZFVuaXQgdG8gaXRzIG93biBmaWxlLCBDb3JlQXVkaW9TaGFyZWRVbml0LmgvQ29yZUF1ZGlvU2hh
cmVkVW5pdC5jcHAuCisgICAgICAgIEludHJvZHVjZSBhbiBpbnRlcm5hbCB1bml0IHRvIGFic3Ry
YWN0IG91dCBDb3JlQXVkaW9TaGFyZWRVbml0IGZyb20gYWN0dWFsIENvcmVBdWRpbyB1bml0cy4K
KyAgICAgICAgSW1wbGVtZW50IGEgQ29yZUF1ZGlvIGJhc2VkIGludGVybmFsIHVuaXQgaW4gQ29y
ZUF1ZGlvU2hhcmVkVW5pdC5jcHAuCisgICAgICAgIEltcGxlbWVudCBhIE1vY2sgYmFzZWQgaW50
ZXJuYWwgdW5pdCBpbiBNb2NrQXVkaW9TaGFyZWRVbml0LmgvTW9ja0F1ZGlvU2hhcmVkVW5pdC5t
bS4KKyAgICAgICAgQWRkIGlucHV0cHV0L291cHV0IHNhbXBsZSByYXRlIHZhbGlkYXRpb24gKGRl
YnVnIGFzc2VydCBhbmQgcmVsZWFzZSBlcnJvciByZXR1cm5lZCkuCisgICAgICAgIEFkZCBhIHRl
c3QgdGhhdCB1c2VzIHRoaXMgdmFsaWRhdGlvbi4KKworICAgICAgICBUZXN0OiBmYXN0L21lZGlh
c3RyZWFtL2F1ZGlvLXVuaXQtcmVjb25maWd1cmUuaHRtbAorCisgICAgICAgICogU291cmNlc0Nv
Y29hLnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6Cisg
ICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0Jhc2VBdWRpb1NoYXJlZFVuaXQuY3Bw
OgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9CYXNlQXVkaW9TaGFyZWRVbml0
Lmg6CisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0NvcmVBdWRpb0NhcHR1cmVT
b3VyY2UuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9Db3JlQXVkaW9T
aGFyZWRVbml0LmNwcDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFj
L0NvcmVBdWRpb1NoYXJlZFVuaXQuaDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vbWVkaWFz
dHJlYW0vbWFjL01vY2tBdWRpb1NoYXJlZFVuaXQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRp
YXN0cmVhbS9tYWMvTW9ja0F1ZGlvU2hhcmVkVW5pdC5tbToKKwogMjAyMi0wNS0wOSAgWW91ZW5u
IEZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+CiAKICAgICAgICAgQ29yZUF1ZGlvQ2FwdHVyZVNv
dXJjZTo6c2V0dGluZ3NEaWRDaGFuZ2Ugc2hvdWxkIG5vdCByZWNvbmZpZ3VyZSB0aGUgYXVkaW8g
dW5pdCBpZiBDb3JlQXVkaW9DYXB0dXJlU291cmNlIGlzIG5vdCBzdGFydGVkCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0IGIvU291cmNlL1dlYkNvcmUvU291cmNl
c0NvY29hLnR4dAppbmRleCBjOTkzYzA2Y2QwMDkxZTQzMDExOWI4ZGY0ODRjM2VmZDY1M2U2ZDZm
Li5kYWVhMTBiNjFkMTU4NWQ4NTUzZWRkZDI2MDE0YjllNWQxY2MxMjU1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJj
ZXNDb2NvYS50eHQKQEAgLTU2NSw2ICs1NjUsNyBAQCBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMv
Q0dEaXNwbGF5U3RyZWFtU2NyZWVuQ2FwdHVyZVNvdXJjZS5tbQogcGxhdGZvcm0vbWVkaWFzdHJl
YW0vbWFjL0NvcmVBdWRpb0NhcHR1cmVEZXZpY2UuY3BwCiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9t
YWMvQ29yZUF1ZGlvQ2FwdHVyZURldmljZU1hbmFnZXIuY3BwCiBwbGF0Zm9ybS9tZWRpYXN0cmVh
bS9tYWMvQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZS5jcHAKK3BsYXRmb3JtL21lZGlhc3RyZWFtL21h
Yy9Db3JlQXVkaW9TaGFyZWRVbml0LmNwcAogcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0Rpc3Bs
YXlDYXB0dXJlTWFuYWdlckNvY29hLmNwcAogcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL01lZGlh
U3RyZWFtVHJhY2tBdWRpb1NvdXJjZVByb3ZpZGVyQ29jb2EuY3BwCiBwbGF0Zm9ybS9tZWRpYXN0
cmVhbS9tYWMvTW9ja0F1ZGlvU2hhcmVkVW5pdC5tbQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDRmNDJiYTM3OWNlZjZmMTEyN2Q1
OTJkZDI0ZTcyOGI2ODhmYjg4NzcuLjE3ZTg4OWM3ZjU2ZjFjZDJjZTY1YzU5NzM5ZWZiOTk0OTdi
OTZjYTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKQEAgLTg1NjUsNiArODU2NSw4IEBACiAJCTQxMEE4RUY3MjRGOEYzRjYwMDRGOTA3
MCAvKiBUZXh0RW5jb2RlclN0cmVhbUVuY29kZXIuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFRleHRFbmNvZGVyU3RyZWFt
RW5jb2Rlci5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxMEE4RUY4MjRGOEY0
N0EwMDRGOTA3MCAvKiBUZXh0RW5jb2RlclN0cmVhbUVuY29kZXIuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gVGV4dEVuY29kZXJTdHJlYW1FbmNvZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNDEwQThFRjkyNEY4RjQ3QjAwNEY5MDcwIC8qIFRleHRFbmNvZGVyU3RyZWFtRW5j
b2Rlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBUZXh0RW5jb2RlclN0cmVhbUVuY29kZXIuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDEwQUQyREUyODIyQkJGNjAwOUM5M0M4IC8qIENvcmVB
dWRpb1NoYXJlZFVuaXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29yZUF1
ZGlvU2hhcmVkVW5pdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0MTBBRDJERjI4
MjJCQkY2MDA5QzkzQzggLyogQ29yZUF1ZGlvU2hhcmVkVW5pdC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDb3JlQXVkaW9TaGFyZWRVbml0LmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDEwQjdFNzExMDQ1RkFCMDAwRDgyMjRGIC8qIEpTTWVzc2Fn
ZUV2ZW50Q3VzdG9tLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpT
TWVzc2FnZUV2ZW50Q3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDEw
QkExMzEyNTcwRkU1NzAwMkUyRjhBIC8qIExpYldlYlJUQ1J0cFRyYW5zZm9ybWFibGVGcmFtZS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBMaWJXZWJSVENSdHBUcmFu
c2Zvcm1hYmxlRnJhbWUuY3BwOyBwYXRoID0gbGlid2VicnRjL0xpYldlYlJUQ1J0cFRyYW5zZm9y
bWFibGVGcmFtZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxMEJDRjUzMjZG
MENEOEIwMDQwQjEyNCAvKiBSVENMb2NhbFNlc3Npb25EZXNjcmlwdGlvbkluaXQuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUlRDTG9jYWxTZXNzaW9uRGVzY3JpcHRpb25Jbml0
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xODgxNCw2ICsxODgxNiw4IEBACiAJ
CQkJM0Y4MDIwMzQxRTlFMzgxRDAwREVDNjFEIC8qIENvcmVBdWRpb0NhcHR1cmVEZXZpY2VNYW5h
Z2VyLmggKi8sCiAJCQkJM0YzQkI1ODIxRTcwOUVFNDAwQzcwMUYyIC8qIENvcmVBdWRpb0NhcHR1
cmVTb3VyY2UuY3BwICovLAogCQkJCTNGM0JCNTgzMUU3MDlFRTQwMEM3MDFGMiAvKiBDb3JlQXVk
aW9DYXB0dXJlU291cmNlLmggKi8sCisJCQkJNDEwQUQyREYyODIyQkJGNjAwOUM5M0M4IC8qIENv
cmVBdWRpb1NoYXJlZFVuaXQuY3BwICovLAorCQkJCTQxMEFEMkRFMjgyMkJCRjYwMDlDOTNDOCAv
KiBDb3JlQXVkaW9TaGFyZWRVbml0LmggKi8sCiAJCQkJMDdBNkQ4NDgxRkVCNzAwQjAwNjQ0MURF
IC8qIERpc3BsYXlDYXB0dXJlTWFuYWdlckNvY29hLmNwcCAqLywKIAkJCQkwN0E2RDg0OTFGRUI3
MDBDMDA2NDQxREUgLyogRGlzcGxheUNhcHR1cmVNYW5hZ2VyQ29jb2EuaCAqLywKIAkJCQk0MTc0
RTkyMDI1MzVEQ0REMDBGRTQyMDIgLyogTWVkaWFTdHJlYW1UcmFja0F1ZGlvU291cmNlUHJvdmlk
ZXJDb2NvYS5jcHAgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRp
YXN0cmVhbS9tYWMvQmFzZUF1ZGlvU2hhcmVkVW5pdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQmFzZUF1ZGlvU2hhcmVkVW5pdC5jcHAKaW5kZXggNDE3MGZm
NjU2M2NmYTdiYjkzZDcxZGNmMzJkYjhhMzZiYjcwYjczNi4uYjhlNWIxZGU3NGFiZTg0N2EwNzAz
NjRmNTRhNTJlNDMwOTk5OTFmZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWVkaWFzdHJlYW0vbWFjL0Jhc2VBdWRpb1NoYXJlZFVuaXQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9CYXNlQXVkaW9TaGFyZWRVbml0LmNwcApAQCAt
MTEzLDExICsxMTMsNiBAQCBPU1N0YXR1cyBCYXNlQXVkaW9TaGFyZWRVbml0OjpzdGFydFVuaXQo
KQogICAgIHJldHVybiAwOwogfQogCi12b2lkIEJhc2VBdWRpb1NoYXJlZFVuaXQ6OnJlc2V0U2Ft
cGxlUmF0ZSgpCi17Ci0gICAgbV9zYW1wbGVSYXRlID0gQXVkaW9TZXNzaW9uOjpzaGFyZWRTZXNz
aW9uKCkuc2FtcGxlUmF0ZSgpOwotfQotCiB2b2lkIEJhc2VBdWRpb1NoYXJlZFVuaXQ6OnByZXBh
cmVGb3JOZXdDYXB0dXJlKCkKIHsKICAgICBtX3ZvbHVtZSA9IDE7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQmFzZUF1ZGlvU2hhcmVkVW5pdC5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0Jhc2VBdWRpb1NoYXJl
ZFVuaXQuaAppbmRleCBmNjE2YzAzOGZiZGFmY2E2NWE2OTNiNjJkY2EwZThhZmY1NzE2ZWQzLi42
NmIzM2E0ZTM5ODkyMzVjNDY1ZDE0ODQ1ZTI0ODZiZWU4ZDZhNjM4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQmFzZUF1ZGlvU2hhcmVkVW5pdC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9CYXNlQXVkaW9T
aGFyZWRVbml0LmgKQEAgLTgzLDYgKzgzLDggQEAgcHVibGljOgogICAgIHZvaWQgd2hlbkF1ZGlv
Q2FwdHVyZVVuaXRJc05vdFJ1bm5pbmcoRnVuY3Rpb248dm9pZCgpPiYmKTsKICAgICBib29sIGlz
UmVuZGVyaW5nQXVkaW8oKSBjb25zdCB7IHJldHVybiBtX2lzUmVuZGVyaW5nQXVkaW87IH0KIAor
ICAgIGNvbnN0IFN0cmluZyYgcGVyc2lzdGVudElERm9yVGVzdGluZygpIGNvbnN0IHsgcmV0dXJu
IG1fY2FwdHVyaW5nRGV2aWNlID8gbV9jYXB0dXJpbmdEZXZpY2UtPmZpcnN0IDogZW1wdHlTdHJp
bmcoKTsgfQorCiBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBmb3JFYWNoQ2xpZW50KGNvbnN0IEZ1bmN0
aW9uPHZvaWQoQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZSYpPiYpIGNvbnN0OwogICAgIGJvb2wgaGFz
Q2xpZW50cygpIGNvbnN0IHsgcmV0dXJuICFtX2NsaWVudHMuaXNFbXB0eSgpOyB9CkBAIC05Miw3
ICs5NCw3IEBAIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIE9TU3RhdHVzIHN0YXJ0SW50ZXJuYWwo
KSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHN0b3BJbnRlcm5hbCgpID0gMDsKICAgICB2aXJ0dWFs
IE9TU3RhdHVzIHJlY29uZmlndXJlQXVkaW9Vbml0KCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBy
ZXNldFNhbXBsZVJhdGUoKTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVzZXRTYW1wbGVSYXRlKCkgPSAw
OwogICAgIHZpcnR1YWwgdm9pZCBjYXB0dXJlRGV2aWNlQ2hhbmdlZCgpID0gMDsKIAogICAgIHZv
aWQgc2V0U3VzcGVuZGVkKGJvb2wgdmFsdWUpIHsgbV9zdXNwZW5kZWQgPSB2YWx1ZTsgfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0NvcmVBdWRp
b0NhcHR1cmVTb3VyY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0v
bWFjL0NvcmVBdWRpb0NhcHR1cmVTb3VyY2UuY3BwCmluZGV4IGI2ODdiMjhkZGQxNjI4Mjc0Y2Uy
NDM3ZjhmN2VkMzhiYzQ0MGZkZGYuLjM4ODc0YjgyZGZlMDI2OGMzMTRjNmNmZTU4MGMwMjc0YmM1
MjYyYzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21h
Yy9Db3JlQXVkaW9DYXB0dXJlU291cmNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tZWRpYXN0cmVhbS9tYWMvQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZS5jcHAKQEAgLTMxLDkgKzMx
LDkgQEAKICNpbmNsdWRlICJBdWRpb1NhbXBsZUJ1ZmZlckxpc3QuaCIKICNpbmNsdWRlICJBdWRp
b1NhbXBsZURhdGFTb3VyY2UuaCIKICNpbmNsdWRlICJBdWRpb1Nlc3Npb24uaCIKLSNpbmNsdWRl
ICJCYXNlQXVkaW9TaGFyZWRVbml0LmgiCiAjaW5jbHVkZSAiQ29yZUF1ZGlvQ2FwdHVyZURldmlj
ZS5oIgogI2luY2x1ZGUgIkNvcmVBdWRpb0NhcHR1cmVEZXZpY2VNYW5hZ2VyLmgiCisjaW5jbHVk
ZSAiQ29yZUF1ZGlvU2hhcmVkVW5pdC5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRl
ICJQbGF0Zm9ybU1lZGlhU2Vzc2lvbk1hbmFnZXIuaCIKICNpbmNsdWRlICJUaW1lci5oIgpAQCAt
NTEsMTUgKzUxLDE1IEBACiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CiAjaW5jbHVk
ZSA8d3RmL1Njb3BlLmg+CiAKLSNpbmNsdWRlIDxwYWwvY2YvQXVkaW9Ub29sYm94U29mdExpbmsu
aD4KLSNpbmNsdWRlIDxwYWwvY2YvQ29yZU1lZGlhU29mdExpbmsuaD4KLQogI2lmIFBMQVRGT1JN
KElPU19GQU1JTFkpCiAjaW5jbHVkZSAiQVZBdWRpb1Nlc3Npb25DYXB0dXJlRGV2aWNlLmgiCiAj
aW5jbHVkZSAiQVZBdWRpb1Nlc3Npb25DYXB0dXJlRGV2aWNlTWFuYWdlci5oIgogI2luY2x1ZGUg
IkNvcmVBdWRpb0NhcHR1cmVTb3VyY2VJT1MuaCIKICNlbmRpZgogCisjaW5jbHVkZSA8cGFsL2Nm
L0F1ZGlvVG9vbGJveFNvZnRMaW5rLmg+CisjaW5jbHVkZSA8cGFsL2NmL0NvcmVNZWRpYVNvZnRM
aW5rLmg+CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogI2lmIFBMQVRGT1JNKE1BQykKQEAgLTcw
LDYxNCArNzAsNiBAQCBDb3JlQXVkaW9DYXB0dXJlU291cmNlRmFjdG9yeSYgQ29yZUF1ZGlvQ2Fw
dHVyZVNvdXJjZUZhY3Rvcnk6OnNpbmdsZXRvbigpCiB9CiAjZW5kaWYKIAotY29uc3QgVUludDMy
IG91dHB1dEJ1cyA9IDA7Ci1jb25zdCBVSW50MzIgaW5wdXRCdXMgPSAxOwotCi1jbGFzcyBDb3Jl
QXVkaW9TaGFyZWRVbml0IGZpbmFsIDogcHVibGljIEJhc2VBdWRpb1NoYXJlZFVuaXQgewotcHVi
bGljOgotICAgIHN0YXRpYyBDb3JlQXVkaW9TaGFyZWRVbml0JiB1bml0KCk7Ci0gICAgc3RhdGlj
IEJhc2VBdWRpb1NoYXJlZFVuaXQmIHNpbmdsZXRvbigpICB7IHJldHVybiB1bml0KCk7IH0KLSAg
ICBDb3JlQXVkaW9TaGFyZWRVbml0KCk7Ci0KLSAgICB2b2lkIHJlZ2lzdGVyU3BlYWtlclNhbXBs
ZXNQcm9kdWNlcihDb3JlQXVkaW9TcGVha2VyU2FtcGxlc1Byb2R1Y2VyJik7Ci0gICAgdm9pZCB1
bnJlZ2lzdGVyU3BlYWtlclNhbXBsZXNQcm9kdWNlcihDb3JlQXVkaW9TcGVha2VyU2FtcGxlc1By
b2R1Y2VyJik7Ci0gICAgYm9vbCBpc1J1bm5pbmcoKSBjb25zdCB7IHJldHVybiBtX2lvVW5pdFN0
YXJ0ZWQ7IH0KLQotcHJpdmF0ZToKLSAgICBzdGF0aWMgc2l6ZV90IHByZWZlcnJlZElPQnVmZmVy
U2l6ZSgpOwotCi0gICAgQ2FwYWJpbGl0eVZhbHVlT3JSYW5nZSBzYW1wbGVSYXRlQ2FwYWNpdGll
cygpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIENhcGFiaWxpdHlWYWx1ZU9yUmFuZ2UoODAwMCwgOTYw
MDApOyB9Ci0gICAgY29uc3QgQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uJiBtaWNyb3Bob25lRm9y
bWF0KCkgY29uc3QgeyByZXR1cm4gbV9taWNyb3Bob25lUHJvY0Zvcm1hdDsgfQotCi0gICAgYm9v
bCBoYXNBdWRpb1VuaXQoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2lvVW5pdDsgfQotICAgIHZv
aWQgY2FwdHVyZURldmljZUNoYW5nZWQoKSBmaW5hbDsKLSAgICBPU1N0YXR1cyByZWNvbmZpZ3Vy
ZUF1ZGlvVW5pdCgpIGZpbmFsOwotCi0gICAgT1NTdGF0dXMgc2V0dXBBdWRpb1VuaXQoKTsKLSAg
ICB2b2lkIGNsZWFudXBBdWRpb1VuaXQoKSBmaW5hbDsKLQotICAgIE9TU3RhdHVzIHN0YXJ0SW50
ZXJuYWwoKSBmaW5hbDsKLSAgICB2b2lkIHN0b3BJbnRlcm5hbCgpIGZpbmFsOwotICAgIGJvb2wg
aXNQcm9kdWNpbmdEYXRhKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9pb1VuaXRTdGFydGVkOyB9
Ci0gICAgdm9pZCBpc1Byb2R1Y2luZ01pY3JvcGhvbmVTYW1wbGVzQ2hhbmdlZCgpIGZpbmFsOwot
ICAgIHZvaWQgdmFsaWRhdGVPdXRwdXREZXZpY2UodWludDMyX3QgZGV2aWNlSUQpIGZpbmFsOwot
ICAgIGludCBhY3R1YWxTYW1wbGVSYXRlKCkgY29uc3QgZmluYWw7Ci0KLSAgICBPU1N0YXR1cyBj
b25maWd1cmVTcGVha2VyUHJvYyhpbnQgc2FtcGxlUmF0ZSk7Ci0gICAgT1NTdGF0dXMgY29uZmln
dXJlTWljcm9waG9uZVByb2MoaW50IHNhbXBsZVJhdGUpOwotICAgIE9TU3RhdHVzIGRlZmF1bHRP
dXRwdXREZXZpY2UodWludDMyX3QqKTsKLSAgICBPU1N0YXR1cyBkZWZhdWx0SW5wdXREZXZpY2Uo
dWludDMyX3QqKTsKLQotICAgIHN0YXRpYyBPU1N0YXR1cyBtaWNyb3Bob25lQ2FsbGJhY2sodm9p
ZCosIEF1ZGlvVW5pdFJlbmRlckFjdGlvbkZsYWdzKiwgY29uc3QgQXVkaW9UaW1lU3RhbXAqLCBV
SW50MzIsIFVJbnQzMiwgQXVkaW9CdWZmZXJMaXN0Kik7Ci0gICAgT1NTdGF0dXMgcHJvY2Vzc01p
Y3JvcGhvbmVTYW1wbGVzKEF1ZGlvVW5pdFJlbmRlckFjdGlvbkZsYWdzJiwgY29uc3QgQXVkaW9U
aW1lU3RhbXAmLCBVSW50MzIsIFVJbnQzMiwgQXVkaW9CdWZmZXJMaXN0Kik7Ci0KLSAgICBzdGF0
aWMgT1NTdGF0dXMgc3BlYWtlckNhbGxiYWNrKHZvaWQqLCBBdWRpb1VuaXRSZW5kZXJBY3Rpb25G
bGFncyosIGNvbnN0IEF1ZGlvVGltZVN0YW1wKiwgVUludDMyLCBVSW50MzIsIEF1ZGlvQnVmZmVy
TGlzdCopOwotICAgIE9TU3RhdHVzIHByb3ZpZGVTcGVha2VyRGF0YShBdWRpb1VuaXRSZW5kZXJB
Y3Rpb25GbGFncyYsIGNvbnN0IEF1ZGlvVGltZVN0YW1wJiwgVUludDMyLCBVSW50MzIsIEF1ZGlv
QnVmZmVyTGlzdCYpOwotCi0gICAgdm9pZCB1bmR1Y2soKTsKLQotICAgIHZvaWQgdmVyaWZ5SXND
YXB0dXJpbmcoKTsKLQotICAgIFNlY29uZHMgdmVyaWZ5Q2FwdHVyZUludGVydmFsKCkgeyByZXR1
cm4gaXNQcm9kdWNpbmdNaWNyb3Bob25lU2FtcGxlcygpID8gMTBfcyA6IDJfczsgfQotCi0gICAg
QXVkaW9Vbml0IG1faW9Vbml0IHsgbnVsbHB0ciB9OwotCi0gICAgLy8gT25seSByZWFkL21vZGlm
aWVkIGZyb20gdGhlIElPIHRocmVhZC4KLSAgICBWZWN0b3I8UmVmPEF1ZGlvU2FtcGxlRGF0YVNv
dXJjZT4+IG1fYWN0aXZlU291cmNlczsKLQotICAgIENBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbiBt
X21pY3JvcGhvbmVQcm9jRm9ybWF0OwotICAgIFJlZlB0cjxBdWRpb1NhbXBsZUJ1ZmZlckxpc3Q+
IG1fbWljcm9waG9uZVNhbXBsZUJ1ZmZlcjsKLSAgICB1aW50NjRfdCBtX2xhdGVzdE1pY1RpbWVT
dGFtcCB7IDAgfTsKLQotICAgIENBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbiBtX3NwZWFrZXJQcm9j
Rm9ybWF0OwotCi0gICAgZG91YmxlIG1fRFRTQ29udmVyc2lvblJhdGlvIHsgMCB9OwotCi0gICAg
Ym9vbCBtX2lvVW5pdEluaXRpYWxpemVkIHsgZmFsc2UgfTsKLSAgICBib29sIG1faW9Vbml0U3Rh
cnRlZCB7IGZhbHNlIH07Ci0KLSAgICBtdXRhYmxlIHN0ZDo6dW5pcXVlX3B0cjxSZWFsdGltZU1l
ZGlhU291cmNlQ2FwYWJpbGl0aWVzPiBtX2NhcGFiaWxpdGllczsKLSAgICBtdXRhYmxlIHN0ZDo6
b3B0aW9uYWw8UmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzPiBtX2N1cnJlbnRTZXR0aW5nczsK
LQotI2lmICFMT0dfRElTQUJMRUQKLSAgICB2b2lkIGNoZWNrVGltZXN0YW1wcyhjb25zdCBBdWRp
b1RpbWVTdGFtcCYsIHVpbnQ2NF90LCBkb3VibGUpOwotCi0gICAgU3RyaW5nIG1faW9Vbml0TmFt
ZTsKLSNlbmRpZgotCi0gICAgdWludDY0X3QgbV9taWNyb3Bob25lUHJvY3NDYWxsZWQgeyAwIH07
Ci0gICAgdWludDY0X3QgbV9taWNyb3Bob25lUHJvY3NDYWxsZWRMYXN0VGltZSB7IDAgfTsKLSAg
ICBUaW1lciBtX3ZlcmlmeUNhcHR1cmluZ1RpbWVyOwotCi0gICAgYm9vbCBtX2lzUmVjb25maWd1
cmluZyB7IGZhbHNlIH07Ci0gICAgbXV0YWJsZSBMb2NrIG1fc3BlYWtlclNhbXBsZXNQcm9kdWNl
ckxvY2s7Ci0gICAgQ29yZUF1ZGlvU3BlYWtlclNhbXBsZXNQcm9kdWNlciogbV9zcGVha2VyU2Ft
cGxlc1Byb2R1Y2VyIFdURl9HVUFSREVEX0JZX0xPQ0sobV9zcGVha2VyU2FtcGxlc1Byb2R1Y2Vy
TG9jaykgeyBudWxscHRyIH07Ci19OwotCi1Db3JlQXVkaW9TaGFyZWRVbml0JiBDb3JlQXVkaW9T
aGFyZWRVbml0Ojp1bml0KCkKLXsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Q29yZUF1ZGlv
U2hhcmVkVW5pdD4gc2luZ2xldG9uOwotICAgIHJldHVybiBzaW5nbGV0b247Ci19Ci0KLUNvcmVB
dWRpb1NoYXJlZFVuaXQ6OkNvcmVBdWRpb1NoYXJlZFVuaXQoKQotICAgIDogbV92ZXJpZnlDYXB0
dXJpbmdUaW1lcigqdGhpcywgJkNvcmVBdWRpb1NoYXJlZFVuaXQ6OnZlcmlmeUlzQ2FwdHVyaW5n
KQotewotfQotCi12b2lkIENvcmVBdWRpb1NoYXJlZFVuaXQ6OmNhcHR1cmVEZXZpY2VDaGFuZ2Vk
KCkKLXsKLSNpZiBQTEFURk9STShNQUMpCi0gICAgcmVjb25maWd1cmVBdWRpb1VuaXQoKTsKLSNl
bHNlCi0gICAgQVZBdWRpb1Nlc3Npb25DYXB0dXJlRGV2aWNlTWFuYWdlcjo6c2luZ2xldG9uKCku
c2V0UHJlZmVycmVkQXVkaW9TZXNzaW9uRGV2aWNlVUlEKHBlcnNpc3RlbnRJRCgpKTsKLSNlbmRp
ZgotfQotCi1zaXplX3QgQ29yZUF1ZGlvU2hhcmVkVW5pdDo6cHJlZmVycmVkSU9CdWZmZXJTaXpl
KCkKLXsKLSAgICByZXR1cm4gQXVkaW9TZXNzaW9uOjpzaGFyZWRTZXNzaW9uKCkuYnVmZmVyU2l6
ZSgpOwotfQotCi1PU1N0YXR1cyBDb3JlQXVkaW9TaGFyZWRVbml0OjpzZXR1cEF1ZGlvVW5pdCgp
Ci17Ci0gICAgaWYgKG1faW9Vbml0KQotICAgICAgICByZXR1cm4gMDsKLQotICAgIEFTU0VSVCho
YXNDbGllbnRzKCkpOwotCi0gICAgbWFjaF90aW1lYmFzZV9pbmZvX2RhdGFfdCB0aW1lYmFzZUlu
Zm87Ci0gICAgbWFjaF90aW1lYmFzZV9pbmZvKCZ0aW1lYmFzZUluZm8pOwotICAgIG1fRFRTQ29u
dmVyc2lvblJhdGlvID0gMWUtOSAqIHN0YXRpY19jYXN0PGRvdWJsZT4odGltZWJhc2VJbmZvLm51
bWVyKSAvIHN0YXRpY19jYXN0PGRvdWJsZT4odGltZWJhc2VJbmZvLmRlbm9tKTsKLQotICAgIEF1
ZGlvQ29tcG9uZW50RGVzY3JpcHRpb24gaW9Vbml0RGVzY3JpcHRpb24gPSB7IGtBdWRpb1VuaXRU
eXBlX091dHB1dCwga0F1ZGlvVW5pdFN1YlR5cGVfVm9pY2VQcm9jZXNzaW5nSU8sIGtBdWRpb1Vu
aXRNYW51ZmFjdHVyZXJfQXBwbGUsIDAsIDAgfTsKLSAgICBBdWRpb0NvbXBvbmVudCBpb0NvbXBv
bmVudCA9IFBBTDo6QXVkaW9Db21wb25lbnRGaW5kTmV4dChudWxscHRyLCAmaW9Vbml0RGVzY3Jp
cHRpb24pOwotICAgIEFTU0VSVChpb0NvbXBvbmVudCk7Ci0gICAgaWYgKCFpb0NvbXBvbmVudCkg
ewotICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihXZWJSVEMsICJDb3JlQXVkaW9TaGFyZWRVbml0
OjpzZXR1cEF1ZGlvVW5pdCglcCkgdW5hYmxlIHRvIGZpbmQgdnBpbyB1bml0IGNvbXBvbmVudCIs
IHRoaXMpOwotICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQotCi0jaWYgIUxPR19ESVNBQkxFRAot
ICAgIENGU3RyaW5nUmVmIG5hbWUgPSBudWxscHRyOwotICAgIFBBTDo6QXVkaW9Db21wb25lbnRD
b3B5TmFtZShpb0NvbXBvbmVudCwgJm5hbWUpOwotICAgIGlmIChuYW1lKSB7Ci0gICAgICAgIG1f
aW9Vbml0TmFtZSA9IG5hbWU7Ci0gICAgICAgIENGUmVsZWFzZShuYW1lKTsKLSAgICAgICAgUkVM
RUFTRV9MT0coV2ViUlRDLCAiQ29yZUF1ZGlvU2hhcmVkVW5pdDo6c2V0dXBBdWRpb1VuaXQoJXAp
IGNyZWF0ZWQgXCIlc1wiIGNvbXBvbmVudCIsIHRoaXMsIG1faW9Vbml0TmFtZS51dGY4KCkuZGF0
YSgpKTsKLSAgICB9Ci0jZW5kaWYKLQotICAgIGF1dG8gZXJyID0gUEFMOjpBdWRpb0NvbXBvbmVu
dEluc3RhbmNlTmV3KGlvQ29tcG9uZW50LCAmbV9pb1VuaXQpOwotICAgIGlmIChlcnIpIHsKLSAg
ICAgICAgUkVMRUFTRV9MT0dfRVJST1IoV2ViUlRDLCAiQ29yZUF1ZGlvU2hhcmVkVW5pdDo6c2V0
dXBBdWRpb1VuaXQoJXApIHVuYWJsZSB0byBvcGVuIHZwaW8gdW5pdCwgZXJyb3IgJWQgKCUuNHMp
IiwgdGhpcywgKGludCllcnIsIChjaGFyKikmZXJyKTsKLSAgICAgICAgcmV0dXJuIGVycjsKLSAg
ICB9Ci0KLSAgICBpZiAoIWVuYWJsZUVjaG9DYW5jZWxsYXRpb24oKSkgewotICAgICAgICB1aW50
MzJfdCBwYXJhbSA9IDA7Ci0gICAgICAgIGVyciA9IFBBTDo6QXVkaW9Vbml0U2V0UHJvcGVydHko
bV9pb1VuaXQsIGtBVVZvaWNlSU9Qcm9wZXJ0eV9Wb2ljZVByb2Nlc3NpbmdFbmFibGVBR0MsIGtB
dWRpb1VuaXRTY29wZV9HbG9iYWwsIGlucHV0QnVzLCAmcGFyYW0sIHNpemVvZihwYXJhbSkpOwot
ICAgICAgICBpZiAoZXJyKSB7Ci0gICAgICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihXZWJSVEMs
ICJDb3JlQXVkaW9TaGFyZWRVbml0OjpzZXR1cEF1ZGlvVW5pdCglcCkgdW5hYmxlIHRvIHNldCB2
cGlvIGF1dG9tYXRpYyBnYWluIGNvbnRyb2wsIGVycm9yICVkICglLjRzKSIsIHRoaXMsIChpbnQp
ZXJyLCAoY2hhciopJmVycik7Ci0gICAgICAgICAgICByZXR1cm4gZXJyOwotICAgICAgICB9Ci0g
ICAgICAgIHBhcmFtID0gMTsKLSAgICAgICAgZXJyID0gUEFMOjpBdWRpb1VuaXRTZXRQcm9wZXJ0
eShtX2lvVW5pdCwga0FVVm9pY2VJT1Byb3BlcnR5X0J5cGFzc1ZvaWNlUHJvY2Vzc2luZywga0F1
ZGlvVW5pdFNjb3BlX0dsb2JhbCwgaW5wdXRCdXMsICZwYXJhbSwgc2l6ZW9mKHBhcmFtKSk7Ci0g
ICAgICAgIGlmIChlcnIpIHsKLSAgICAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFdlYlJUQywg
IkNvcmVBdWRpb1NoYXJlZFVuaXQ6OnNldHVwQXVkaW9Vbml0KCVwKSB1bmFibGUgdG8gc2V0IHZw
aW8gdW5pdCBlY2hvIGNhbmNlbGxhdGlvbiwgZXJyb3IgJWQgKCUuNHMpIiwgdGhpcywgKGludCll
cnIsIChjaGFyKikmZXJyKTsKLSAgICAgICAgICAgIHJldHVybiBlcnI7Ci0gICAgICAgIH0KLSAg
ICB9Ci0KLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgIHVpbnQzMl90IHBhcmFtID0gMTsK
LSAgICBlcnIgPSBQQUw6OkF1ZGlvVW5pdFNldFByb3BlcnR5KG1faW9Vbml0LCBrQXVkaW9PdXRw
dXRVbml0UHJvcGVydHlfRW5hYmxlSU8sIGtBdWRpb1VuaXRTY29wZV9JbnB1dCwgaW5wdXRCdXMs
ICZwYXJhbSwgc2l6ZW9mKHBhcmFtKSk7Ci0gICAgaWYgKGVycikgewotICAgICAgICBSRUxFQVNF
X0xPR19FUlJPUihXZWJSVEMsICJDb3JlQXVkaW9TaGFyZWRVbml0OjpzZXR1cEF1ZGlvVW5pdCgl
cCkgdW5hYmxlIHRvIGVuYWJsZSB2cGlvIHVuaXQgaW5wdXQsIGVycm9yICVkICglLjRzKSIsIHRo
aXMsIChpbnQpZXJyLCAoY2hhciopJmVycik7Ci0gICAgICAgIHJldHVybiBlcnI7Ci0gICAgfQot
I2Vsc2UKLSAgICBhdXRvIGRldmljZUlEID0gY2FwdHVyZURldmljZUlEKCk7Ci0gICAgaWYgKCFk
ZXZpY2VJRCkgewotICAgICAgICBlcnIgPSBkZWZhdWx0SW5wdXREZXZpY2UoJmRldmljZUlEKTsK
LSAgICAgICAgaWYgKGVycikKLSAgICAgICAgICAgIHJldHVybiBlcnI7Ci0gICAgfQotCi0gICAg
ZXJyID0gUEFMOjpBdWRpb1VuaXRTZXRQcm9wZXJ0eShtX2lvVW5pdCwga0F1ZGlvT3V0cHV0VW5p
dFByb3BlcnR5X0N1cnJlbnREZXZpY2UsIGtBdWRpb1VuaXRTY29wZV9HbG9iYWwsIGlucHV0QnVz
LCAmZGV2aWNlSUQsIHNpemVvZihkZXZpY2VJRCkpOwotICAgIGlmIChlcnIpIHsKLSAgICAgICAg
UkVMRUFTRV9MT0dfRVJST1IoV2ViUlRDLCAiQ29yZUF1ZGlvU2hhcmVkVW5pdDo6c2V0dXBBdWRp
b1VuaXQoJXApIHVuYWJsZSB0byBzZXQgdnBpbyB1bml0IGNhcHR1cmUgZGV2aWNlIElEICVkLCBl
cnJvciAlZCAoJS40cykiLCB0aGlzLCAoaW50KWRldmljZUlELCAoaW50KWVyciwgKGNoYXIqKSZl
cnIpOwotICAgICAgICByZXR1cm4gZXJyOwotICAgIH0KLQotICAgIHVpbnQzMl90IGRlZmF1bHRP
dXRwdXREZXZpY2VJRDsKLSAgICBlcnIgPSBkZWZhdWx0T3V0cHV0RGV2aWNlKCZkZWZhdWx0T3V0
cHV0RGV2aWNlSUQpOwotICAgIGlmICghZXJyKSB7Ci0gICAgICAgIGVyciA9IFBBTDo6QXVkaW9V
bml0U2V0UHJvcGVydHkobV9pb1VuaXQsIGtBdWRpb091dHB1dFVuaXRQcm9wZXJ0eV9DdXJyZW50
RGV2aWNlLCBrQXVkaW9Vbml0U2NvcGVfR2xvYmFsLCBvdXRwdXRCdXMsICZkZWZhdWx0T3V0cHV0
RGV2aWNlSUQsIHNpemVvZihkZWZhdWx0T3V0cHV0RGV2aWNlSUQpKTsKLSAgICAgICAgUkVMRUFT
RV9MT0dfRVJST1JfSUYoZXJyLCBXZWJSVEMsICJDb3JlQXVkaW9TaGFyZWRVbml0OjpzZXR1cEF1
ZGlvVW5pdCglcCkgdW5hYmxlIHRvIHNldCB2cGlvIHVuaXQgb3V0cHV0IGRldmljZSBJRCAlZCwg
ZXJyb3IgJWQgKCUuNHMpIiwgdGhpcywgKGludClkZWZhdWx0T3V0cHV0RGV2aWNlSUQsIChpbnQp
ZXJyLCAoY2hhciopJmVycik7Ci0gICAgfQotICAgIHNldE91dHB1dERldmljZUlEKCFlcnIgPyBk
ZWZhdWx0T3V0cHV0RGV2aWNlSUQgOiAwKTsKLSNlbmRpZgotCi0gICAgLy8gRklYTUU6IEFkZCBz
dXBwb3J0IGZvciBkaWZmZXJlbnQgc3BlYWtlci9taWNyb3Bob25lIHNhbXBsZSByYXRlcy4KLSAg
ICBpbnQgYWN0dWFsU2FtcGxlUmF0ZSA9IHRoaXMtPmFjdHVhbFNhbXBsZVJhdGUoKTsKLSAgICBl
cnIgPSBjb25maWd1cmVNaWNyb3Bob25lUHJvYyhhY3R1YWxTYW1wbGVSYXRlKTsKLSAgICBpZiAo
ZXJyKQotICAgICAgICByZXR1cm4gZXJyOwotCi0gICAgZXJyID0gY29uZmlndXJlU3BlYWtlclBy
b2MoYWN0dWFsU2FtcGxlUmF0ZSk7Ci0gICAgaWYgKGVycikKLSAgICAgICAgcmV0dXJuIGVycjsK
LQotICAgIGVyciA9IFBBTDo6QXVkaW9Vbml0SW5pdGlhbGl6ZShtX2lvVW5pdCk7Ci0gICAgaWYg
KGVycikgewotICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihXZWJSVEMsICJDb3JlQXVkaW9TaGFy
ZWRVbml0OjpzZXR1cEF1ZGlvVW5pdCglcCkgQXVkaW9Vbml0SW5pdGlhbGl6ZSgpIGZhaWxlZCwg
ZXJyb3IgJWQgKCUuNHMpIiwgdGhpcywgKGludCllcnIsIChjaGFyKikmZXJyKTsKLSAgICAgICAg
cmV0dXJuIGVycjsKLSAgICB9Ci0gICAgbV9pb1VuaXRJbml0aWFsaXplZCA9IHRydWU7Ci0KLSAg
ICB1bmR1Y2soKTsKLQotICAgIHJldHVybiBlcnI7Ci19Ci0KLXZvaWQgQ29yZUF1ZGlvU2hhcmVk
VW5pdDo6dW5kdWNrKCkKLXsKLSAgICB1aW50MzJfdCBvdXRwdXREZXZpY2U7Ci0gICAgaWYgKCFk
ZWZhdWx0T3V0cHV0RGV2aWNlKCZvdXRwdXREZXZpY2UpKQotICAgICAgICBBdWRpb0RldmljZUR1
Y2sob3V0cHV0RGV2aWNlLCAxLjAsIG51bGxwdHIsIDApOwotfQotCi1pbnQgQ29yZUF1ZGlvU2hh
cmVkVW5pdDo6YWN0dWFsU2FtcGxlUmF0ZSgpIGNvbnN0Ci17Ci0gICAgTG9ja2VyIGxvY2tlciB7
IG1fc3BlYWtlclNhbXBsZXNQcm9kdWNlckxvY2sgfTsKLSAgICByZXR1cm4gbV9zcGVha2VyU2Ft
cGxlc1Byb2R1Y2VyID8gbV9zcGVha2VyU2FtcGxlc1Byb2R1Y2VyLT5mb3JtYXQoKS5zdHJlYW1E
ZXNjcmlwdGlvbigpLm1TYW1wbGVSYXRlIDogc2FtcGxlUmF0ZSgpOwotfQotCi1PU1N0YXR1cyBD
b3JlQXVkaW9TaGFyZWRVbml0Ojpjb25maWd1cmVNaWNyb3Bob25lUHJvYyhpbnQgc2FtcGxlUmF0
ZSkKLXsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotCi0gICAgQVVSZW5kZXJDYWxsYmFj
a1N0cnVjdCBjYWxsYmFjayA9IHsgbWljcm9waG9uZUNhbGxiYWNrLCB0aGlzIH07Ci0gICAgYXV0
byBlcnIgPSBQQUw6OkF1ZGlvVW5pdFNldFByb3BlcnR5KG1faW9Vbml0LCBrQXVkaW9PdXRwdXRV
bml0UHJvcGVydHlfU2V0SW5wdXRDYWxsYmFjaywga0F1ZGlvVW5pdFNjb3BlX0dsb2JhbCwgaW5w
dXRCdXMsICZjYWxsYmFjaywgc2l6ZW9mKGNhbGxiYWNrKSk7Ci0gICAgaWYgKGVycikgewotICAg
ICAgICBSRUxFQVNFX0xPR19FUlJPUihXZWJSVEMsICJDb3JlQXVkaW9TaGFyZWRVbml0Ojpjb25m
aWd1cmVNaWNyb3Bob25lUHJvYyglcCkgdW5hYmxlIHRvIHNldCB2cGlvIHVuaXQgbWljIHByb2Ms
IGVycm9yICVkICglLjRzKSIsIHRoaXMsIChpbnQpZXJyLCAoY2hhciopJmVycik7Ci0gICAgICAg
IHJldHVybiBlcnI7Ci0gICAgfQotCi0gICAgQXVkaW9TdHJlYW1CYXNpY0Rlc2NyaXB0aW9uIG1p
Y3JvcGhvbmVQcm9jRm9ybWF0ID0geyB9OwotCi0gICAgVUludDMyIHNpemUgPSBzaXplb2YobWlj
cm9waG9uZVByb2NGb3JtYXQpOwotICAgIGVyciA9IFBBTDo6QXVkaW9Vbml0R2V0UHJvcGVydHko
bV9pb1VuaXQsIGtBdWRpb1VuaXRQcm9wZXJ0eV9TdHJlYW1Gb3JtYXQsIGtBdWRpb1VuaXRTY29w
ZV9PdXRwdXQsIGlucHV0QnVzLCAmbWljcm9waG9uZVByb2NGb3JtYXQsICZzaXplKTsKLSAgICBp
ZiAoZXJyKSB7Ci0gICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFdlYlJUQywgIkNvcmVBdWRpb1No
YXJlZFVuaXQ6OmNvbmZpZ3VyZU1pY3JvcGhvbmVQcm9jKCVwKSB1bmFibGUgdG8gZ2V0IG91dHB1
dCBzdHJlYW0gZm9ybWF0LCBlcnJvciAlZCAoJS40cykiLCB0aGlzLCAoaW50KWVyciwgKGNoYXIq
KSZlcnIpOwotICAgICAgICByZXR1cm4gZXJyOwotICAgIH0KLQotICAgIG1pY3JvcGhvbmVQcm9j
Rm9ybWF0Lm1TYW1wbGVSYXRlID0gc2FtcGxlUmF0ZTsKLSAgICBlcnIgPSBQQUw6OkF1ZGlvVW5p
dFNldFByb3BlcnR5KG1faW9Vbml0LCBrQXVkaW9Vbml0UHJvcGVydHlfU3RyZWFtRm9ybWF0LCBr
QXVkaW9Vbml0U2NvcGVfT3V0cHV0LCBpbnB1dEJ1cywgJm1pY3JvcGhvbmVQcm9jRm9ybWF0LCBz
aXplKTsKLSAgICBpZiAoZXJyKSB7Ci0gICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFdlYlJUQywg
IkNvcmVBdWRpb1NoYXJlZFVuaXQ6OmNvbmZpZ3VyZU1pY3JvcGhvbmVQcm9jKCVwKSB1bmFibGUg
dG8gc2V0IG91dHB1dCBzdHJlYW0gZm9ybWF0LCBlcnJvciAlZCAoJS40cykiLCB0aGlzLCAoaW50
KWVyciwgKGNoYXIqKSZlcnIpOwotICAgICAgICByZXR1cm4gZXJyOwotICAgIH0KLQotICAgIG1f
bWljcm9waG9uZVNhbXBsZUJ1ZmZlciA9IEF1ZGlvU2FtcGxlQnVmZmVyTGlzdDo6Y3JlYXRlKG1p
Y3JvcGhvbmVQcm9jRm9ybWF0LCBwcmVmZXJyZWRJT0J1ZmZlclNpemUoKSAqIDIpOwotICAgIG1f
bWljcm9waG9uZVByb2NGb3JtYXQgPSBtaWNyb3Bob25lUHJvY0Zvcm1hdDsKLQotICAgIHJldHVy
biBlcnI7Ci19Ci0KLU9TU3RhdHVzIENvcmVBdWRpb1NoYXJlZFVuaXQ6OmNvbmZpZ3VyZVNwZWFr
ZXJQcm9jKGludCBzYW1wbGVSYXRlKQotewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0K
LSAgICBBVVJlbmRlckNhbGxiYWNrU3RydWN0IGNhbGxiYWNrID0geyBzcGVha2VyQ2FsbGJhY2ss
IHRoaXMgfTsKLSAgICBhdXRvIGVyciA9IFBBTDo6QXVkaW9Vbml0U2V0UHJvcGVydHkobV9pb1Vu
aXQsIGtBdWRpb1VuaXRQcm9wZXJ0eV9TZXRSZW5kZXJDYWxsYmFjaywga0F1ZGlvVW5pdFNjb3Bl
X0lucHV0LCBvdXRwdXRCdXMsICZjYWxsYmFjaywgc2l6ZW9mKGNhbGxiYWNrKSk7Ci0gICAgaWYg
KGVycikgewotICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihXZWJSVEMsICJDb3JlQXVkaW9TaGFy
ZWRVbml0Ojpjb25maWd1cmVTcGVha2VyUHJvYyglcCkgdW5hYmxlIHRvIHNldCB2cGlvIHVuaXQg
c3BlYWtlciBwcm9jLCBlcnJvciAlZCAoJS40cykiLCB0aGlzLCAoaW50KWVyciwgKGNoYXIqKSZl
cnIpOwotICAgICAgICByZXR1cm4gZXJyOwotICAgIH0KLQotICAgIEF1ZGlvU3RyZWFtQmFzaWNE
ZXNjcmlwdGlvbiBzcGVha2VyUHJvY0Zvcm1hdDsKLSAgICBVSW50MzIgc2l6ZSA9IHNpemVvZihz
cGVha2VyUHJvY0Zvcm1hdCk7Ci0gICAgewotICAgICAgICBMb2NrZXIgbG9ja2VyIHsgbV9zcGVh
a2VyU2FtcGxlc1Byb2R1Y2VyTG9jayB9OwotICAgICAgICBpZiAobV9zcGVha2VyU2FtcGxlc1By
b2R1Y2VyKSB7Ci0gICAgICAgICAgICBzcGVha2VyUHJvY0Zvcm1hdCA9IG1fc3BlYWtlclNhbXBs
ZXNQcm9kdWNlci0+Zm9ybWF0KCkuc3RyZWFtRGVzY3JpcHRpb24oKTsKLSAgICAgICAgICAgIEFT
U0VSVChzcGVha2VyUHJvY0Zvcm1hdC5tU2FtcGxlUmF0ZSA9PSBzYW1wbGVSYXRlKTsKLSAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGVyciA9IFBBTDo6QXVkaW9Vbml0R2V0UHJvcGVydHko
bV9pb1VuaXQsIGtBdWRpb1VuaXRQcm9wZXJ0eV9TdHJlYW1Gb3JtYXQsIGtBdWRpb1VuaXRTY29w
ZV9JbnB1dCwgb3V0cHV0QnVzLCAmc3BlYWtlclByb2NGb3JtYXQsICZzaXplKTsKLSAgICAgICAg
ICAgIGlmIChlcnIpIHsKLSAgICAgICAgICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihXZWJSVEMs
ICJDb3JlQXVkaW9TaGFyZWRVbml0Ojpjb25maWd1cmVTcGVha2VyUHJvYyglcCkgdW5hYmxlIHRv
IGdldCBpbnB1dCBzdHJlYW0gZm9ybWF0LCBlcnJvciAlZCAoJS40cykiLCB0aGlzLCAoaW50KWVy
ciwgKGNoYXIqKSZlcnIpOwotICAgICAgICAgICAgICAgIHJldHVybiBlcnI7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgc3BlYWtlclByb2NGb3JtYXQubVNhbXBsZVJhdGUg
PSBzYW1wbGVSYXRlOwotCi0gICAgZXJyID0gUEFMOjpBdWRpb1VuaXRTZXRQcm9wZXJ0eShtX2lv
VW5pdCwga0F1ZGlvVW5pdFByb3BlcnR5X1N0cmVhbUZvcm1hdCwga0F1ZGlvVW5pdFNjb3BlX0lu
cHV0LCBvdXRwdXRCdXMsICZzcGVha2VyUHJvY0Zvcm1hdCwgc2l6ZSk7Ci0gICAgaWYgKGVycikg
ewotICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihXZWJSVEMsICJDb3JlQXVkaW9TaGFyZWRVbml0
Ojpjb25maWd1cmVTcGVha2VyUHJvYyglcCkgdW5hYmxlIHRvIGdldCBpbnB1dCBzdHJlYW0gZm9y
bWF0LCBlcnJvciAlZCAoJS40cykiLCB0aGlzLCAoaW50KWVyciwgKGNoYXIqKSZlcnIpOwotICAg
ICAgICByZXR1cm4gZXJyOwotICAgIH0KLQotICAgIG1fc3BlYWtlclByb2NGb3JtYXQgPSBzcGVh
a2VyUHJvY0Zvcm1hdDsKLQotICAgIHJldHVybiBlcnI7Ci19Ci0KLSNpZiAhTE9HX0RJU0FCTEVE
Ci12b2lkIENvcmVBdWRpb1NoYXJlZFVuaXQ6OmNoZWNrVGltZXN0YW1wcyhjb25zdCBBdWRpb1Rp
bWVTdGFtcCYgdGltZVN0YW1wLCB1aW50NjRfdCBzYW1wbGVUaW1lLCBkb3VibGUgaG9zdFRpbWUp
Ci17Ci0gICAgaWYgKCF0aW1lU3RhbXAubVNhbXBsZVRpbWUgfHwgc2FtcGxlVGltZSA9PSBtX2xh
dGVzdE1pY1RpbWVTdGFtcCB8fCAhaG9zdFRpbWUpCi0gICAgICAgIFJFTEVBU0VfTE9HX0VSUk9S
KFdlYlJUQywgIkNvcmVBdWRpb1NoYXJlZFVuaXQ6OmNoZWNrVGltZXN0YW1wczogdW51c3VhbCB0
aW1lc3RhbXBzLCBzYW1wbGUgdGltZSA9ICVsbGQsIHByZXZpb3VzIHNhbXBsZSB0aW1lID0gJWxs
ZCwgaG9zdFRpbWUgJWYiLCBzYW1wbGVUaW1lLCBtX2xhdGVzdE1pY1RpbWVTdGFtcCwgaG9zdFRp
bWUpOwotfQotI2VuZGlmCi0KLU9TU3RhdHVzIENvcmVBdWRpb1NoYXJlZFVuaXQ6OnByb3ZpZGVT
cGVha2VyRGF0YShBdWRpb1VuaXRSZW5kZXJBY3Rpb25GbGFncyYgZmxhZ3MsIGNvbnN0IEF1ZGlv
VGltZVN0YW1wJiB0aW1lU3RhbXAsIFVJbnQzMiAvKmluQnVzTnVtYmVyKi8sIFVJbnQzMiBpbk51
bWJlckZyYW1lcywgQXVkaW9CdWZmZXJMaXN0JiBpb0RhdGEpCi17Ci0gICAgaWYgKG1faXNSZWNv
bmZpZ3VyaW5nIHx8ICFtX3NwZWFrZXJTYW1wbGVzUHJvZHVjZXJMb2NrLnRyeUxvY2soKSkgewot
ICAgICAgICBBdWRpb1NhbXBsZUJ1ZmZlckxpc3Q6Onplcm9BQkwoaW9EYXRhLCBzdGF0aWNfY2Fz
dDxzaXplX3Q+KGluTnVtYmVyRnJhbWVzICogbV9zcGVha2VyUHJvY0Zvcm1hdC5ieXRlc1BlckZy
YW1lKCkpKTsKLSAgICAgICAgZmxhZ3MgPSBrQXVkaW9Vbml0UmVuZGVyQWN0aW9uX091dHB1dElz
U2lsZW5jZTsKLSAgICAgICAgcmV0dXJuIG5vRXJyOwotICAgIH0KLQotICAgIExvY2tlciBsb2Nr
ZXIgeyBBZG9wdExvY2ssIG1fc3BlYWtlclNhbXBsZXNQcm9kdWNlckxvY2sgfTsKLSAgICBpZiAo
IW1fc3BlYWtlclNhbXBsZXNQcm9kdWNlcikgewotICAgICAgICBBdWRpb1NhbXBsZUJ1ZmZlckxp
c3Q6Onplcm9BQkwoaW9EYXRhLCBzdGF0aWNfY2FzdDxzaXplX3Q+KGluTnVtYmVyRnJhbWVzICog
bV9zcGVha2VyUHJvY0Zvcm1hdC5ieXRlc1BlckZyYW1lKCkpKTsKLSAgICAgICAgZmxhZ3MgPSBr
QXVkaW9Vbml0UmVuZGVyQWN0aW9uX091dHB1dElzU2lsZW5jZTsKLSAgICAgICAgcmV0dXJuIG5v
RXJyOwotICAgIH0KLSAgICByZXR1cm4gbV9zcGVha2VyU2FtcGxlc1Byb2R1Y2VyLT5wcm9kdWNl
U3BlYWtlclNhbXBsZXMoaW5OdW1iZXJGcmFtZXMsIGlvRGF0YSwgdGltZVN0YW1wLm1TYW1wbGVU
aW1lLCB0aW1lU3RhbXAubUhvc3RUaW1lLCBmbGFncyk7Ci19Ci0KLU9TU3RhdHVzIENvcmVBdWRp
b1NoYXJlZFVuaXQ6OnNwZWFrZXJDYWxsYmFjayh2b2lkICppblJlZkNvbiwgQXVkaW9Vbml0UmVu
ZGVyQWN0aW9uRmxhZ3MqIGlvQWN0aW9uRmxhZ3MsIGNvbnN0IEF1ZGlvVGltZVN0YW1wKiBpblRp
bWVTdGFtcCwgVUludDMyIGluQnVzTnVtYmVyLCBVSW50MzIgaW5OdW1iZXJGcmFtZXMsIEF1ZGlv
QnVmZmVyTGlzdCogaW9EYXRhKQotewotICAgIEFTU0VSVChpb0FjdGlvbkZsYWdzKTsKLSAgICBB
U1NFUlQoaW5UaW1lU3RhbXApOwotICAgIGF1dG8gZGF0YVNvdXJjZSA9IHN0YXRpY19jYXN0PENv
cmVBdWRpb1NoYXJlZFVuaXQqPihpblJlZkNvbik7Ci0gICAgcmV0dXJuIGRhdGFTb3VyY2UtPnBy
b3ZpZGVTcGVha2VyRGF0YSgqaW9BY3Rpb25GbGFncywgKmluVGltZVN0YW1wLCBpbkJ1c051bWJl
ciwgaW5OdW1iZXJGcmFtZXMsICppb0RhdGEpOwotfQotCi1PU1N0YXR1cyBDb3JlQXVkaW9TaGFy
ZWRVbml0Ojpwcm9jZXNzTWljcm9waG9uZVNhbXBsZXMoQXVkaW9Vbml0UmVuZGVyQWN0aW9uRmxh
Z3MmIGlvQWN0aW9uRmxhZ3MsIGNvbnN0IEF1ZGlvVGltZVN0YW1wJiB0aW1lU3RhbXAsIFVJbnQz
MiBpbkJ1c051bWJlciwgVUludDMyIGluTnVtYmVyRnJhbWVzLCBBdWRpb0J1ZmZlckxpc3QqIC8q
aW9EYXRhKi8pCi17Ci0gICAgKyttX21pY3JvcGhvbmVQcm9jc0NhbGxlZDsKLQotICAgIGlmICht
X2lzUmVjb25maWd1cmluZykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gUHVsbCB0
aHJvdWdoIHRoZSB2cGlvIHVuaXQgdG8gb3VyIG1pYyBidWZmZXIuCi0gICAgbV9taWNyb3Bob25l
U2FtcGxlQnVmZmVyLT5yZXNldCgpOwotICAgIEF1ZGlvQnVmZmVyTGlzdCYgYnVmZmVyTGlzdCA9
IG1fbWljcm9waG9uZVNhbXBsZUJ1ZmZlci0+YnVmZmVyTGlzdCgpOwotICAgIGF1dG8gZXJyID0g
QXVkaW9Vbml0UmVuZGVyKG1faW9Vbml0LCAmaW9BY3Rpb25GbGFncywgJnRpbWVTdGFtcCwgaW5C
dXNOdW1iZXIsIGluTnVtYmVyRnJhbWVzLCAmYnVmZmVyTGlzdCk7Ci0gICAgaWYgKGVycikgewot
ICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihXZWJSVEMsICJDb3JlQXVkaW9TaGFyZWRVbml0Ojpw
cm9jZXNzTWljcm9waG9uZVNhbXBsZXMoJXApIEF1ZGlvVW5pdFJlbmRlciBmYWlsZWQgd2l0aCBl
cnJvciAlZCAoJS40cyksIGJ1ZmZlckxpc3Qgc2l6ZSAlZCwgaW5OdW1iZXJGcmFtZXMgJWQgIiwg
dGhpcywgKGludCllcnIsIChjaGFyKikmZXJyLCAoaW50KWJ1ZmZlckxpc3QubUJ1ZmZlcnNbMF0u
bURhdGFCeXRlU2l6ZSwgKGludClpbk51bWJlckZyYW1lcyk7Ci0gICAgICAgIGlmIChlcnIgPT0g
a0F1ZGlvX1BhcmFtRXJyb3IpIHsKLSAgICAgICAgICAgIC8vIE91ciBidWZmZXIgbWlnaHQgYmUg
dG9vIHNtYWxsLCB0aGUgcHJlZmVycmVkIGJ1ZmZlciBzaXplIG9yIHNhbXBsZSByYXRlIG1pZ2h0
IGhhdmUgY2hhbmdlZC4KLSAgICAgICAgICAgIGNhbGxPbk1haW5UaHJlYWQoW10gewotICAgICAg
ICAgICAgICAgIENvcmVBdWRpb1NoYXJlZFVuaXQ6OnNpbmdsZXRvbigpLnJlY29uZmlndXJlKCk7
Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgfQotICAgICAgICAvLyBXZSByZXR1cm4gZWFybHkg
c28gdGhhdCBpZiB0aGlzIGVycm9yIGhhcHBlbnMsIHdlIGRvIG5vdCBpbmNyZW1lbnQgbV9taWNy
b3Bob25lUHJvY3NDYWxsZWQgYW5kIGZhaWwgdGhlIGNhcHR1cmUgb25jZSB0aW1lciBraWNrcyBp
bi4KLSAgICAgICAgcmV0dXJuIGVycjsKLSAgICB9Ci0KLSAgICBpZiAoIWlzUHJvZHVjaW5nTWlj
cm9waG9uZVNhbXBsZXMoKSkKLSAgICAgICAgcmV0dXJuIG5vRXJyOwotCi0gICAgZG91YmxlIGFk
anVzdGVkSG9zdFRpbWUgPSBtX0RUU0NvbnZlcnNpb25SYXRpbyAqIHRpbWVTdGFtcC5tSG9zdFRp
bWU7Ci0gICAgdWludDY0X3Qgc2FtcGxlVGltZSA9IHRpbWVTdGFtcC5tU2FtcGxlVGltZTsKLSNp
ZiAhTE9HX0RJU0FCTEVECi0gICAgY2hlY2tUaW1lc3RhbXBzKHRpbWVTdGFtcCwgc2FtcGxlVGlt
ZSwgYWRqdXN0ZWRIb3N0VGltZSk7Ci0jZW5kaWYKLSAgICBtX2xhdGVzdE1pY1RpbWVTdGFtcCA9
IHNhbXBsZVRpbWU7Ci0gICAgbV9taWNyb3Bob25lU2FtcGxlQnVmZmVyLT5zZXRUaW1lcyhhZGp1
c3RlZEhvc3RUaW1lLCBzYW1wbGVUaW1lKTsKLQotICAgIGlmICh2b2x1bWUoKSAhPSAxLjApCi0g
ICAgICAgIG1fbWljcm9waG9uZVNhbXBsZUJ1ZmZlci0+YXBwbHlHYWluKHZvbHVtZSgpKTsKLQot
ICAgIGF1ZGlvU2FtcGxlc0F2YWlsYWJsZShNZWRpYVRpbWUoc2FtcGxlVGltZSwgbV9taWNyb3Bo
b25lUHJvY0Zvcm1hdC5zYW1wbGVSYXRlKCkpLCBtX21pY3JvcGhvbmVTYW1wbGVCdWZmZXItPmJ1
ZmZlckxpc3QoKSwgbV9taWNyb3Bob25lUHJvY0Zvcm1hdCwgaW5OdW1iZXJGcmFtZXMpOwotICAg
IHJldHVybiBub0VycjsKLX0KLQotT1NTdGF0dXMgQ29yZUF1ZGlvU2hhcmVkVW5pdDo6bWljcm9w
aG9uZUNhbGxiYWNrKHZvaWQgKmluUmVmQ29uLCBBdWRpb1VuaXRSZW5kZXJBY3Rpb25GbGFncyog
aW9BY3Rpb25GbGFncywgY29uc3QgQXVkaW9UaW1lU3RhbXAqIGluVGltZVN0YW1wLCBVSW50MzIg
aW5CdXNOdW1iZXIsIFVJbnQzMiBpbk51bWJlckZyYW1lcywgQXVkaW9CdWZmZXJMaXN0KiBpb0Rh
dGEpCi17Ci0gICAgQVNTRVJUKGlvQWN0aW9uRmxhZ3MpOwotICAgIEFTU0VSVChpblRpbWVTdGFt
cCk7Ci0gICAgQ29yZUF1ZGlvU2hhcmVkVW5pdCogZGF0YVNvdXJjZSA9IHN0YXRpY19jYXN0PENv
cmVBdWRpb1NoYXJlZFVuaXQqPihpblJlZkNvbik7Ci0gICAgcmV0dXJuIGRhdGFTb3VyY2UtPnBy
b2Nlc3NNaWNyb3Bob25lU2FtcGxlcygqaW9BY3Rpb25GbGFncywgKmluVGltZVN0YW1wLCBpbkJ1
c051bWJlciwgaW5OdW1iZXJGcmFtZXMsIGlvRGF0YSk7Ci19Ci0KLXZvaWQgQ29yZUF1ZGlvU2hh
cmVkVW5pdDo6Y2xlYW51cEF1ZGlvVW5pdCgpCi17Ci0gICAgaWYgKG1faW9Vbml0SW5pdGlhbGl6
ZWQpIHsKLSAgICAgICAgQVNTRVJUKG1faW9Vbml0KTsKLSAgICAgICAgYXV0byBlcnIgPSBBdWRp
b1VuaXRVbmluaXRpYWxpemUobV9pb1VuaXQpOwotICAgICAgICBpZiAoZXJyKQotICAgICAgICAg
ICAgUkVMRUFTRV9MT0dfRVJST1IoV2ViUlRDLCAiQ29yZUF1ZGlvU2hhcmVkVW5pdDo6Y2xlYW51
cEF1ZGlvVW5pdCglcCkgQXVkaW9Vbml0VW5pbml0aWFsaXplIGZhaWxlZCB3aXRoIGVycm9yICVk
ICglLjRzKSIsIHRoaXMsIChpbnQpZXJyLCAoY2hhciopJmVycik7Ci0gICAgICAgIG1faW9Vbml0
SW5pdGlhbGl6ZWQgPSBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAobV9pb1VuaXQpIHsKLSAgICAg
ICAgUEFMOjpBdWRpb0NvbXBvbmVudEluc3RhbmNlRGlzcG9zZShtX2lvVW5pdCk7Ci0gICAgICAg
IG1faW9Vbml0ID0gbnVsbHB0cjsKLSAgICB9Ci0KLSAgICBtX21pY3JvcGhvbmVTYW1wbGVCdWZm
ZXIgPSBudWxscHRyOwotI2lmICFMT0dfRElTQUJMRUQKLSAgICBtX2lvVW5pdE5hbWUgPSBlbXB0
eVN0cmluZygpOwotI2VuZGlmCi19Ci0KLU9TU3RhdHVzIENvcmVBdWRpb1NoYXJlZFVuaXQ6OnJl
Y29uZmlndXJlQXVkaW9Vbml0KCkKLXsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAg
IE9TU3RhdHVzIGVycjsKLSAgICBpZiAoIWhhc0F1ZGlvVW5pdCgpKQotICAgICAgICByZXR1cm4g
MDsKLQotICAgIG1faXNSZWNvbmZpZ3VyaW5nID0gdHJ1ZTsKLSAgICBhdXRvIHNjb3BlID0gbWFr
ZVNjb3BlRXhpdChbdGhpc10geyBtX2lzUmVjb25maWd1cmluZyA9IGZhbHNlOyB9KTsKLQotICAg
IGlmIChtX2lvVW5pdFN0YXJ0ZWQpIHsKLSAgICAgICAgZXJyID0gUEFMOjpBdWRpb091dHB1dFVu
aXRTdG9wKG1faW9Vbml0KTsKLSAgICAgICAgaWYgKGVycikgewotICAgICAgICAgICAgUkVMRUFT
RV9MT0dfRVJST1IoV2ViUlRDLCAiQ29yZUF1ZGlvU2hhcmVkVW5pdDo6cmVjb25maWd1cmVBdWRp
b1VuaXQoJXApIEF1ZGlvT3V0cHV0VW5pdFN0b3AgZmFpbGVkIHdpdGggZXJyb3IgJWQgKCUuNHMp
IiwgdGhpcywgKGludCllcnIsIChjaGFyKikmZXJyKTsKLSAgICAgICAgICAgIHJldHVybiBlcnI7
Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBjbGVhbnVwQXVkaW9Vbml0KCk7Ci0gICAgZXJyID0g
c2V0dXBBdWRpb1VuaXQoKTsKLSAgICBpZiAoZXJyKQotICAgICAgICByZXR1cm4gZXJyOwotCi0g
ICAgaWYgKG1faW9Vbml0U3RhcnRlZCkgewotICAgICAgICBlcnIgPSBQQUw6OkF1ZGlvT3V0cHV0
VW5pdFN0YXJ0KG1faW9Vbml0KTsKLSAgICAgICAgaWYgKGVycikgewotICAgICAgICAgICAgUkVM
RUFTRV9MT0dfRVJST1IoV2ViUlRDLCAiQ29yZUF1ZGlvU2hhcmVkVW5pdDo6cmVjb25maWd1cmVB
dWRpb1VuaXQoJXApIEF1ZGlvT3V0cHV0VW5pdFN0YXJ0IGZhaWxlZCB3aXRoIGVycm9yICVkICgl
LjRzKSIsIHRoaXMsIChpbnQpZXJyLCAoY2hhciopJmVycik7Ci0gICAgICAgICAgICByZXR1cm4g
ZXJyOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiBlcnI7Ci19Ci0KLU9TU3RhdHVzIENv
cmVBdWRpb1NoYXJlZFVuaXQ6OnN0YXJ0SW50ZXJuYWwoKQotewotICAgIEFTU0VSVChpc01haW5U
aHJlYWQoKSk7Ci0KLSAgICBzZXRJc1Byb2R1Y2luZ01pY3JvcGhvbmVTYW1wbGVzKHRydWUpOwot
Ci0gICAgT1NTdGF0dXMgZXJyOwotICAgIGlmICghbV9pb1VuaXQpIHsKLSAgICAgICAgZXJyID0g
c2V0dXBBdWRpb1VuaXQoKTsKLSAgICAgICAgaWYgKGVycikgewotICAgICAgICAgICAgY2xlYW51
cEF1ZGlvVW5pdCgpOwotICAgICAgICAgICAgQVNTRVJUKCFtX2lvVW5pdCk7Ci0gICAgICAgICAg
ICByZXR1cm4gZXJyOwotICAgICAgICB9Ci0gICAgICAgIEFTU0VSVChtX2lvVW5pdCk7Ci0gICAg
fQotCi0gICAgdW5kdWNrKCk7Ci0KLSAgICB7Ci0gICAgICAgIExvY2tlciBsb2NrZXIgeyBtX3Nw
ZWFrZXJTYW1wbGVzUHJvZHVjZXJMb2NrIH07Ci0gICAgICAgIGlmIChtX3NwZWFrZXJTYW1wbGVz
UHJvZHVjZXIpCi0gICAgICAgICAgICBtX3NwZWFrZXJTYW1wbGVzUHJvZHVjZXItPmNhcHR1cmVV
bml0SXNTdGFydGluZygpOwotICAgIH0KLQotICAgIGVyciA9IFBBTDo6QXVkaW9PdXRwdXRVbml0
U3RhcnQobV9pb1VuaXQpOwotICAgIGlmIChlcnIpIHsKLSAgICAgICAgewotICAgICAgICAgICAg
TG9ja2VyIGxvY2tlciB7IG1fc3BlYWtlclNhbXBsZXNQcm9kdWNlckxvY2sgfTsKLSAgICAgICAg
ICAgIGlmIChtX3NwZWFrZXJTYW1wbGVzUHJvZHVjZXIpCi0gICAgICAgICAgICAgICAgbV9zcGVh
a2VyU2FtcGxlc1Byb2R1Y2VyLT5jYXB0dXJlVW5pdEhhc1N0b3BwZWQoKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFdlYlJUQywgIkNvcmVBdWRpb1NoYXJlZFVuaXQ6
OnN0YXJ0KCVwKSBBdWRpb091dHB1dFVuaXRTdGFydCBmYWlsZWQgd2l0aCBlcnJvciAlZCAoJS40
cykiLCB0aGlzLCAoaW50KWVyciwgKGNoYXIqKSZlcnIpOwotICAgICAgICBjbGVhbnVwQXVkaW9V
bml0KCk7Ci0gICAgICAgIEFTU0VSVCghbV9pb1VuaXQpOwotICAgICAgICByZXR1cm4gZXJyOwot
ICAgIH0KLQotICAgIG1faW9Vbml0U3RhcnRlZCA9IHRydWU7Ci0KLSAgICBtX3ZlcmlmeUNhcHR1
cmluZ1RpbWVyLnN0YXJ0UmVwZWF0aW5nKHZlcmlmeUNhcHR1cmVJbnRlcnZhbCgpKTsKLSAgICBt
X21pY3JvcGhvbmVQcm9jc0NhbGxlZCA9IDA7Ci0gICAgbV9taWNyb3Bob25lUHJvY3NDYWxsZWRM
YXN0VGltZSA9IDA7Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotdm9pZCBDb3JlQXVkaW9TaGFyZWRV
bml0Ojppc1Byb2R1Y2luZ01pY3JvcGhvbmVTYW1wbGVzQ2hhbmdlZCgpCi17Ci0gICAgaWYgKCFp
c1Byb2R1Y2luZ0RhdGEoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fdmVyaWZ5Q2FwdHVyaW5n
VGltZXIuc3RhcnRSZXBlYXRpbmcodmVyaWZ5Q2FwdHVyZUludGVydmFsKCkpOwotfQotCi12b2lk
IENvcmVBdWRpb1NoYXJlZFVuaXQ6OnZhbGlkYXRlT3V0cHV0RGV2aWNlKHVpbnQzMl90IGN1cnJl
bnRPdXRwdXREZXZpY2VJRCkKLXsKLSNpZiBQTEFURk9STShNQUMpCi0gICAgdWludDMyX3QgY3Vy
cmVudERlZmF1bHRPdXRwdXREZXZpY2VJRCA9IDA7Ci0gICAgaWYgKGF1dG8gZXJyID0gZGVmYXVs
dE91dHB1dERldmljZSgmY3VycmVudERlZmF1bHRPdXRwdXREZXZpY2VJRCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGlmICghY3VycmVudERlZmF1bHRPdXRwdXREZXZpY2VJRCB8fCBjdXJyZW50
T3V0cHV0RGV2aWNlSUQgPT0gY3VycmVudERlZmF1bHRPdXRwdXREZXZpY2VJRCkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgcmVjb25maWd1cmUoKTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKGN1
cnJlbnRPdXRwdXREZXZpY2VJRCk7Ci0jZW5kaWYKLX0KLQotdm9pZCBDb3JlQXVkaW9TaGFyZWRV
bml0Ojp2ZXJpZnlJc0NhcHR1cmluZygpCi17Ci0gICAgaWYgKG1fbWljcm9waG9uZVByb2NzQ2Fs
bGVkTGFzdFRpbWUgIT0gbV9taWNyb3Bob25lUHJvY3NDYWxsZWQpIHsKLSAgICAgICAgbV9taWNy
b3Bob25lUHJvY3NDYWxsZWRMYXN0VGltZSA9IG1fbWljcm9waG9uZVByb2NzQ2FsbGVkOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgUkVMRUFTRV9MT0dfRVJST1IoV2ViUlRDLCAiQ29y
ZUF1ZGlvU2hhcmVkVW5pdDo6dmVyaWZ5SXNDYXB0dXJpbmcgLSBubyBhdWRpbyByZWNlaXZlZCBp
biAlZCBzZWNvbmRzLCBmYWlsaW5nIiwgc3RhdGljX2Nhc3Q8aW50PihtX3ZlcmlmeUNhcHR1cmlu
Z1RpbWVyLnJlcGVhdEludGVydmFsKCkudmFsdWUoKSkpOwotICAgIGNhcHR1cmVGYWlsZWQoKTsK
LX0KLQotdm9pZCBDb3JlQXVkaW9TaGFyZWRVbml0OjpzdG9wSW50ZXJuYWwoKQotewotICAgIEFT
U0VSVChpc01haW5UaHJlYWQoKSk7Ci0KLSAgICBtX3ZlcmlmeUNhcHR1cmluZ1RpbWVyLnN0b3Ao
KTsKLQotICAgIGlmICghbV9pb1VuaXQgfHwgIW1faW9Vbml0U3RhcnRlZCkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgYXV0byBlcnIgPSBQQUw6OkF1ZGlvT3V0cHV0VW5pdFN0b3AobV9pb1VuaXQp
OwotICAgIGlmIChlcnIpIHsKLSAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoV2ViUlRDLCAiQ29y
ZUF1ZGlvU2hhcmVkVW5pdDo6c3RvcCglcCkgQXVkaW9PdXRwdXRVbml0U3RvcCBmYWlsZWQgd2l0
aCBlcnJvciAlZCAoJS40cykiLCB0aGlzLCAoaW50KWVyciwgKGNoYXIqKSZlcnIpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotICAgIHsKLSAgICAgICAgTG9ja2VyIGxvY2tlciB7IG1fc3BlYWtl
clNhbXBsZXNQcm9kdWNlckxvY2sgfTsKLSAgICAgICAgaWYgKG1fc3BlYWtlclNhbXBsZXNQcm9k
dWNlcikKLSAgICAgICAgICAgIG1fc3BlYWtlclNhbXBsZXNQcm9kdWNlci0+Y2FwdHVyZVVuaXRI
YXNTdG9wcGVkKCk7Ci0gICAgfQotCi0gICAgbV9pb1VuaXRTdGFydGVkID0gZmFsc2U7Ci19Ci0K
LU9TU3RhdHVzIENvcmVBdWRpb1NoYXJlZFVuaXQ6OmRlZmF1bHRJbnB1dERldmljZSh1aW50MzJf
dCogZGV2aWNlSUQpCi17Ci0gICAgQVNTRVJUKG1faW9Vbml0KTsKLQotICAgIFVJbnQzMiBwcm9w
ZXJ0eVNpemUgPSBzaXplb2YoKmRldmljZUlEKTsKLSAgICBhdXRvIGVyciA9IFBBTDo6QXVkaW9V
bml0R2V0UHJvcGVydHkobV9pb1VuaXQsIGtBdWRpb091dHB1dFVuaXRQcm9wZXJ0eV9DdXJyZW50
RGV2aWNlLCBrQXVkaW9Vbml0U2NvcGVfR2xvYmFsLCBpbnB1dEJ1cywgZGV2aWNlSUQsICZwcm9w
ZXJ0eVNpemUpOwotICAgIGlmIChlcnIpCi0gICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFdlYlJU
QywgIkNvcmVBdWRpb1NoYXJlZFVuaXQ6OmRlZmF1bHRJbnB1dERldmljZSglcCkgdW5hYmxlIHRv
IGdldCBkZWZhdWx0IGlucHV0IGRldmljZSBJRCwgZXJyb3IgJWQgKCUuNHMpIiwgdGhpcywgKGlu
dCllcnIsIChjaGFyKikmZXJyKTsKLQotICAgIHJldHVybiBlcnI7Ci19Ci0KLU9TU3RhdHVzIENv
cmVBdWRpb1NoYXJlZFVuaXQ6OmRlZmF1bHRPdXRwdXREZXZpY2UodWludDMyX3QqIGRldmljZUlE
KQotewotICAgIE9TRXJyIGVyciA9IC0xOwotI2lmIFBMQVRGT1JNKE1BQykKLSAgICBBdWRpb09i
amVjdFByb3BlcnR5QWRkcmVzcyBhZGRyZXNzID0gewotICAgICAgICBrQXVkaW9IYXJkd2FyZVBy
b3BlcnR5RGVmYXVsdE91dHB1dERldmljZSwKLSAgICAgICAga0F1ZGlvT2JqZWN0UHJvcGVydHlT
Y29wZUdsb2JhbCwKLSNpZiBIQVZFKEFVRElPX09CSkVDVF9QUk9QRVJUWV9FTEVNRU5UX01BSU4p
Ci0gICAgICAgIGtBdWRpb09iamVjdFByb3BlcnR5RWxlbWVudE1haW4KLSNlbHNlCi0gICAgICAg
IEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0JFR0lOCi0gICAgICAgIGtBdWRpb09iamVj
dFByb3BlcnR5RWxlbWVudE1hc3RlcgotICAgICAgICBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFU
SU9OU19FTkQKLSNlbmRpZgotICAgIH07Ci0KLSAgICBpZiAoQXVkaW9PYmplY3RIYXNQcm9wZXJ0
eShrQXVkaW9PYmplY3RTeXN0ZW1PYmplY3QsICZhZGRyZXNzKSkgewotICAgICAgICBVSW50MzIg
cHJvcGVydHlTaXplID0gc2l6ZW9mKEF1ZGlvRGV2aWNlSUQpOwotICAgICAgICBlcnIgPSBBdWRp
b09iamVjdEdldFByb3BlcnR5RGF0YShrQXVkaW9PYmplY3RTeXN0ZW1PYmplY3QsICZhZGRyZXNz
LCAwLCBudWxscHRyLCAmcHJvcGVydHlTaXplLCBkZXZpY2VJRCk7Ci0gICAgfQotI2Vsc2UKLSAg
ICBVTlVTRURfUEFSQU0oZGV2aWNlSUQpOwotI2VuZGlmCi0gICAgcmV0dXJuIGVycjsKLX0KLQot
dm9pZCBDb3JlQXVkaW9TaGFyZWRVbml0OjpyZWdpc3RlclNwZWFrZXJTYW1wbGVzUHJvZHVjZXIo
Q29yZUF1ZGlvU3BlYWtlclNhbXBsZXNQcm9kdWNlciYgcHJvZHVjZXIpCi17Ci0gICAgQVNTRVJU
KGlzTWFpblRocmVhZCgpKTsKLQotICAgIHNldElzUmVuZGVyaW5nQXVkaW8odHJ1ZSk7Ci0KLSAg
ICBDb3JlQXVkaW9TcGVha2VyU2FtcGxlc1Byb2R1Y2VyKiBvbGRQcm9kdWNlcjsKLSAgICB7Ci0g
ICAgICAgIExvY2tlciBsb2NrZXIgeyBtX3NwZWFrZXJTYW1wbGVzUHJvZHVjZXJMb2NrIH07Ci0g
ICAgICAgIG9sZFByb2R1Y2VyID0gbV9zcGVha2VyU2FtcGxlc1Byb2R1Y2VyOwotICAgICAgICBt
X3NwZWFrZXJTYW1wbGVzUHJvZHVjZXIgPSAmcHJvZHVjZXI7Ci0gICAgfQotICAgIGlmIChvbGRQ
cm9kdWNlciAmJiBvbGRQcm9kdWNlciAhPSAmcHJvZHVjZXIpCi0gICAgICAgIG9sZFByb2R1Y2Vy
LT5jYXB0dXJlVW5pdEhhc1N0b3BwZWQoKTsKLQotICAgIGlmIChoYXNBdWRpb1VuaXQoKSAmJiBw
cm9kdWNlci5mb3JtYXQoKSAhPSBtX3NwZWFrZXJQcm9jRm9ybWF0KQotICAgICAgICByZWNvbmZp
Z3VyZSgpOwotfQotCi12b2lkIENvcmVBdWRpb1NoYXJlZFVuaXQ6OnVucmVnaXN0ZXJTcGVha2Vy
U2FtcGxlc1Byb2R1Y2VyKENvcmVBdWRpb1NwZWFrZXJTYW1wbGVzUHJvZHVjZXImIHByb2R1Y2Vy
KQotewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0KLSAgICB7Ci0gICAgICAgIExvY2tl
ciBsb2NrZXIgeyBtX3NwZWFrZXJTYW1wbGVzUHJvZHVjZXJMb2NrIH07Ci0gICAgICAgIGlmICht
X3NwZWFrZXJTYW1wbGVzUHJvZHVjZXIgIT0gJnByb2R1Y2VyKQotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICBtX3NwZWFrZXJTYW1wbGVzUHJvZHVjZXIgPSBudWxscHRyOwotICAgIH0KLQot
ICAgIHNldElzUmVuZGVyaW5nQXVkaW8oZmFsc2UpOwotfQotCiBzdGF0aWMgQ2FwdHVyZVNvdXJj
ZU9yRXJyb3IgaW5pdGlhbGl6ZUNvcmVBdWRpb0NhcHR1cmVTb3VyY2UoUmVmPENvcmVBdWRpb0Nh
cHR1cmVTb3VyY2U+JiYgc291cmNlLCBjb25zdCBNZWRpYUNvbnN0cmFpbnRzKiBjb25zdHJhaW50
cykKIHsKICAgICBpZiAoY29uc3RyYWludHMpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9Db3JlQXVkaW9TaGFyZWRVbml0LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9Db3JlQXVkaW9TaGFyZWRVbml0LmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5hNDQ4MTE2ZjQ1ZWQyZDJiODkyMTkyMWJhZDM3NGFmM2NmMzFlZTBkCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFj
L0NvcmVBdWRpb1NoYXJlZFVuaXQuY3BwCkBAIC0wLDAgKzEsNjQ5IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE3LTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiQ29yZUF1ZGlvU2hhcmVkVW5pdC5oIgorCisjaWYgRU5BQkxFKE1FRElBX1NU
UkVBTSkKKworI2luY2x1ZGUgIkF1ZGlvU2FtcGxlQnVmZmVyTGlzdC5oIgorI2luY2x1ZGUgIkF1
ZGlvU2Vzc2lvbi5oIgorI2luY2x1ZGUgIkNvcmVBdWRpb0NhcHR1cmVTb3VyY2UuaCIKKyNpbmNs
dWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSA8QXVkaW9Ub29sYm94L0F1ZGlvQ29udmVydGVyLmg+
CisjaW5jbHVkZSA8QXVkaW9Vbml0L0F1ZGlvVW5pdC5oPgorI2luY2x1ZGUgPENvcmVNZWRpYS9D
TVN5bmMuaD4KKyNpbmNsdWRlIDxtYWNoL21hY2hfdGltZS5oPgorI2luY2x1ZGUgPHBhbC9hdmZv
dW5kYXRpb24vTWVkaWFUaW1lQVZGb3VuZGF0aW9uLmg+CisjaW5jbHVkZSA8cGFsL3NwaS9jZi9D
b3JlQXVkaW9TUEkuaD4KKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorI2luY2x1ZGUgPHd0Zi9BbGdv
cml0aG1zLmg+CisjaW5jbHVkZSA8d3RmL0xvY2suaD4KKyNpbmNsdWRlIDx3dGYvTWFpblRocmVh
ZC5oPgorI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorI2luY2x1ZGUgPHd0Zi9TY29w
ZS5oPgorCisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyNpbmNsdWRlICJBVkF1ZGlvU2Vzc2lv
bkNhcHR1cmVEZXZpY2VNYW5hZ2VyLmgiCisjZW5kaWYKKworI2luY2x1ZGUgPHBhbC9jZi9BdWRp
b1Rvb2xib3hTb2Z0TGluay5oPgorI2luY2x1ZGUgPHBhbC9jZi9Db3JlTWVkaWFTb2Z0TGluay5o
PgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NvbnN0IFVJbnQzMiBvdXRwdXRCdXMgPSAwOwor
Y29uc3QgVUludDMyIGlucHV0QnVzID0gMTsKKworY2xhc3MgQ29yZUF1ZGlvU2hhcmVkSW50ZXJu
YWxVbml0IDogIHB1YmxpYyBDb3JlQXVkaW9TaGFyZWRVbml0OjpJbnRlcm5hbFVuaXQgeworICAg
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIHN0YXRpYyBFeHBlY3RlZDxV
bmlxdWVSZWY8SW50ZXJuYWxVbml0PiwgT1NTdGF0dXM+IGNyZWF0ZSgpOworICAgIGV4cGxpY2l0
IENvcmVBdWRpb1NoYXJlZEludGVybmFsVW5pdChBdWRpb1VuaXQpOworICAgIH5Db3JlQXVkaW9T
aGFyZWRJbnRlcm5hbFVuaXQoKSBmaW5hbDsKKworcHJpdmF0ZToKKyAgICBPU1N0YXR1cyBpbml0
aWFsaXplKCkgZmluYWw7CisgICAgT1NTdGF0dXMgdW5pbml0aWFsaXplKCkgZmluYWw7CisgICAg
T1NTdGF0dXMgc3RhcnQoKSBmaW5hbDsKKyAgICBPU1N0YXR1cyBzdG9wKCkgZmluYWw7CisgICAg
T1NTdGF0dXMgc2V0KEF1ZGlvVW5pdFByb3BlcnR5SUQsIEF1ZGlvVW5pdFNjb3BlLCBBdWRpb1Vu
aXRFbGVtZW50LCBjb25zdCB2b2lkKiwgVUludDMyKSBmaW5hbDsKKyAgICBPU1N0YXR1cyBnZXQo
QXVkaW9Vbml0UHJvcGVydHlJRCwgQXVkaW9Vbml0U2NvcGUsIEF1ZGlvVW5pdEVsZW1lbnQsIHZv
aWQqLCBVSW50MzIqKSBmaW5hbDsKKyAgICBPU1N0YXR1cyByZW5kZXIoQXVkaW9Vbml0UmVuZGVy
QWN0aW9uRmxhZ3MqLCBjb25zdCBBdWRpb1RpbWVTdGFtcCosIFVJbnQzMiwgVUludDMyLCBBdWRp
b0J1ZmZlckxpc3QqKSBmaW5hbDsKKyAgICBPU1N0YXR1cyBkZWZhdWx0SW5wdXREZXZpY2UodWlu
dDMyX3QqKSBmaW5hbDsKKyAgICBPU1N0YXR1cyBkZWZhdWx0T3V0cHV0RGV2aWNlKHVpbnQzMl90
KikgZmluYWw7CisKKyAgICBBdWRpb1VuaXQgbV9pb1VuaXQgeyBudWxscHRyIH07Cit9OworCitF
eHBlY3RlZDxVbmlxdWVSZWY8Q29yZUF1ZGlvU2hhcmVkVW5pdDo6SW50ZXJuYWxVbml0PiwgT1NT
dGF0dXM+IENvcmVBdWRpb1NoYXJlZEludGVybmFsVW5pdDo6Y3JlYXRlKCkKK3sKKyAgICBBdWRp
b0NvbXBvbmVudERlc2NyaXB0aW9uIGlvVW5pdERlc2NyaXB0aW9uID0geyBrQXVkaW9Vbml0VHlw
ZV9PdXRwdXQsIGtBdWRpb1VuaXRTdWJUeXBlX1ZvaWNlUHJvY2Vzc2luZ0lPLCBrQXVkaW9Vbml0
TWFudWZhY3R1cmVyX0FwcGxlLCAwLCAwIH07CisgICAgQXVkaW9Db21wb25lbnQgaW9Db21wb25l
bnQgPSBQQUw6OkF1ZGlvQ29tcG9uZW50RmluZE5leHQobnVsbHB0ciwgJmlvVW5pdERlc2NyaXB0
aW9uKTsKKyAgICBBU1NFUlQoaW9Db21wb25lbnQpOworICAgIGlmICghaW9Db21wb25lbnQpIHsK
KyAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoV2ViUlRDLCAiQ29yZUF1ZGlvU2hhcmVkSW50ZXJu
YWxVbml0IHVuYWJsZSB0byBmaW5kIHZwaW8gdW5pdCBjb21wb25lbnQiKTsKKyAgICAgICAgcmV0
dXJuIG1ha2VVbmV4cGVjdGVkKC0xKTsKKyAgICB9CisKKyNpZiAhTE9HX0RJU0FCTEVECisgICAg
Q0ZTdHJpbmdSZWYgbmFtZSA9IG51bGxwdHI7CisgICAgUEFMOjpBdWRpb0NvbXBvbmVudENvcHlO
YW1lKGlvQ29tcG9uZW50LCAmbmFtZSk7CisgICAgaWYgKG5hbWUpIHsKKyAgICAgICAgU3RyaW5n
IGlvVW5pdE5hbWUgPSBuYW1lOworICAgICAgICBDRlJlbGVhc2UobmFtZSk7CisgICAgICAgIFJF
TEVBU0VfTE9HKFdlYlJUQywgIkNvcmVBdWRpb1NoYXJlZEludGVybmFsVW5pdCBjcmVhdGVkIFwi
JXtwcml2YXRlfXNcIiBjb21wb25lbnQiLCBpb1VuaXROYW1lLnV0ZjgoKS5kYXRhKCkpOworICAg
IH0KKyNlbmRpZgorCisgICAgQXVkaW9Vbml0IGlvVW5pdDsKKyAgICBhdXRvIGVyciA9IFBBTDo6
QXVkaW9Db21wb25lbnRJbnN0YW5jZU5ldyhpb0NvbXBvbmVudCwgJmlvVW5pdCk7CisgICAgaWYg
KGVycikgeworICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihXZWJSVEMsICJDb3JlQXVkaW9TaGFy
ZWRJbnRlcm5hbFVuaXQgdW5hYmxlIHRvIG9wZW4gdnBpbyB1bml0LCBlcnJvciAlZCAoJS40cyki
LCAoaW50KWVyciwgKGNoYXIqKSZlcnIpOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQo
ZXJyKTsKKyAgICB9CisKKyAgICBSRUxFQVNFX0xPRyhXZWJSVEMsICJTdWNjZXNzZnVsbHkgY3Jl
YXRlZCBhIENvcmVBdWRpb1NoYXJlZEludGVybmFsVW5pdCIpOworCisgICAgVW5pcXVlUmVmPENv
cmVBdWRpb1NoYXJlZFVuaXQ6OkludGVybmFsVW5pdD4gcmVzdWx0ID0gbWFrZVVuaXF1ZVJlZjxD
b3JlQXVkaW9TaGFyZWRJbnRlcm5hbFVuaXQ+KGlvVW5pdCk7CisgICAgcmV0dXJuIHJlc3VsdDsK
K30KKworQ29yZUF1ZGlvU2hhcmVkSW50ZXJuYWxVbml0OjpDb3JlQXVkaW9TaGFyZWRJbnRlcm5h
bFVuaXQoQXVkaW9Vbml0IGlvVW5pdCkKKyAgICA6IG1faW9Vbml0KGlvVW5pdCkKK3sKK30KKwor
Q29yZUF1ZGlvU2hhcmVkSW50ZXJuYWxVbml0Ojp+Q29yZUF1ZGlvU2hhcmVkSW50ZXJuYWxVbml0
KCkKK3sKKyAgICBQQUw6OkF1ZGlvQ29tcG9uZW50SW5zdGFuY2VEaXNwb3NlKG1faW9Vbml0KTsK
K30KKworT1NTdGF0dXMgQ29yZUF1ZGlvU2hhcmVkSW50ZXJuYWxVbml0Ojppbml0aWFsaXplKCkK
K3sKKyAgICByZXR1cm4gUEFMOjpBdWRpb1VuaXRJbml0aWFsaXplKG1faW9Vbml0KTsKK30KKwor
T1NTdGF0dXMgQ29yZUF1ZGlvU2hhcmVkSW50ZXJuYWxVbml0Ojp1bmluaXRpYWxpemUoKQorewor
ICAgIHJldHVybiBBdWRpb1VuaXRVbmluaXRpYWxpemUobV9pb1VuaXQpOworfQorCitPU1N0YXR1
cyBDb3JlQXVkaW9TaGFyZWRJbnRlcm5hbFVuaXQ6OnN0YXJ0KCkKK3sKKyAgICByZXR1cm4gUEFM
OjpBdWRpb091dHB1dFVuaXRTdGFydChtX2lvVW5pdCk7Cit9CisKK09TU3RhdHVzIENvcmVBdWRp
b1NoYXJlZEludGVybmFsVW5pdDo6c3RvcCgpCit7CisgICAgcmV0dXJuIFBBTDo6QXVkaW9PdXRw
dXRVbml0U3RvcChtX2lvVW5pdCk7Cit9CisKK09TU3RhdHVzIENvcmVBdWRpb1NoYXJlZEludGVy
bmFsVW5pdDo6c2V0KEF1ZGlvVW5pdFByb3BlcnR5SUQgcHJvcGVydHlJRCwgQXVkaW9Vbml0U2Nv
cGUgc2NvcGUsIEF1ZGlvVW5pdEVsZW1lbnQgZWxlbWVudCwgY29uc3Qgdm9pZCogdmFsdWUsIFVJ
bnQzMiBzaXplKQoreworICAgIHJldHVybiBQQUw6OkF1ZGlvVW5pdFNldFByb3BlcnR5KG1faW9V
bml0LCBwcm9wZXJ0eUlELCBzY29wZSwgZWxlbWVudCwgJnZhbHVlLCBzaXplKTsKK30KKworT1NT
dGF0dXMgQ29yZUF1ZGlvU2hhcmVkSW50ZXJuYWxVbml0OjpnZXQoQXVkaW9Vbml0UHJvcGVydHlJ
RCBwcm9wZXJ0eUlELCBBdWRpb1VuaXRTY29wZSBzY29wZSwgQXVkaW9Vbml0RWxlbWVudCBlbGVt
ZW50LCB2b2lkKiB2YWx1ZSwgVUludDMyKiBzaXplKQoreworICAgIHJldHVybiBQQUw6OkF1ZGlv
VW5pdEdldFByb3BlcnR5KG1faW9Vbml0LCBwcm9wZXJ0eUlELCBzY29wZSwgZWxlbWVudCwgdmFs
dWUsIHNpemUpOworfQorCitPU1N0YXR1cyBDb3JlQXVkaW9TaGFyZWRJbnRlcm5hbFVuaXQ6OnJl
bmRlcihBdWRpb1VuaXRSZW5kZXJBY3Rpb25GbGFncyogaW9BY3Rpb25GbGFncywgY29uc3QgQXVk
aW9UaW1lU3RhbXAqIGluVGltZVN0YW1wLCBVSW50MzIgaW5PdXRwdXRCdXNOdW1iZXIsIFVJbnQz
MiBpbk51bWJlckZyYW1lcywgQXVkaW9CdWZmZXJMaXN0KiBsaXN0KQoreworICAgIHJldHVybiBB
dWRpb1VuaXRSZW5kZXIobV9pb1VuaXQsIGlvQWN0aW9uRmxhZ3MsIGluVGltZVN0YW1wLCBpbk91
dHB1dEJ1c051bWJlciwgaW5OdW1iZXJGcmFtZXMsIGxpc3QpOworfQorCisjaWYgUExBVEZPUk0o
TUFDKQorT1NTdGF0dXMgQ29yZUF1ZGlvU2hhcmVkSW50ZXJuYWxVbml0OjpkZWZhdWx0SW5wdXRE
ZXZpY2UodWludDMyX3QqIGRldmljZUlEKQoreworICAgIFVJbnQzMiBwcm9wZXJ0eVNpemUgPSBz
aXplb2YoKmRldmljZUlEKTsKKyAgICBhdXRvIGVyciA9IGdldChrQXVkaW9PdXRwdXRVbml0UHJv
cGVydHlfQ3VycmVudERldmljZSwga0F1ZGlvVW5pdFNjb3BlX0dsb2JhbCwgaW5wdXRCdXMsIGRl
dmljZUlELCAmcHJvcGVydHlTaXplKTsKKyAgICBSRUxFQVNFX0xPR19FUlJPUl9JRihlcnIsIFdl
YlJUQywgIkNvcmVBdWRpb1NoYXJlZEludGVybmFsVW5pdCB1bmFibGUgdG8gZ2V0IGRlZmF1bHQg
aW5wdXQgZGV2aWNlIElELCBlcnJvciAlZCAoJS40cykiLCAoaW50KWVyciwgKGNoYXIqKSZlcnIp
OworICAgIHJldHVybiBlcnI7Cit9CisKK09TU3RhdHVzIENvcmVBdWRpb1NoYXJlZEludGVybmFs
VW5pdDo6ZGVmYXVsdE91dHB1dERldmljZSh1aW50MzJfdCogZGV2aWNlSUQpCit7CisjaWYgUExB
VEZPUk0oTUFDKQorICAgIEF1ZGlvT2JqZWN0UHJvcGVydHlBZGRyZXNzIGFkZHJlc3MgPSB7Cisg
ICAgICAgIGtBdWRpb0hhcmR3YXJlUHJvcGVydHlEZWZhdWx0T3V0cHV0RGV2aWNlLAorICAgICAg
ICBrQXVkaW9PYmplY3RQcm9wZXJ0eVNjb3BlR2xvYmFsLAorI2lmIEhBVkUoQVVESU9fT0JKRUNU
X1BST1BFUlRZX0VMRU1FTlRfTUFJTikKKyAgICAgICAga0F1ZGlvT2JqZWN0UHJvcGVydHlFbGVt
ZW50TWFpbgorI2Vsc2UKKyAgICAgICAgQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfQkVH
SU4KKyAgICAgICAga0F1ZGlvT2JqZWN0UHJvcGVydHlFbGVtZW50TWFzdGVyCisgICAgICAgIEFM
TE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0VORAorI2VuZGlmCisgICAgfTsKKworICAgIGlm
IChBdWRpb09iamVjdEhhc1Byb3BlcnR5KGtBdWRpb09iamVjdFN5c3RlbU9iamVjdCwgJmFkZHJl
c3MpKSB7CisgICAgICAgIFVJbnQzMiBwcm9wZXJ0eVNpemUgPSBzaXplb2YoQXVkaW9EZXZpY2VJ
RCk7CisgICAgICAgIHJldHVybiBBdWRpb09iamVjdEdldFByb3BlcnR5RGF0YShrQXVkaW9PYmpl
Y3RTeXN0ZW1PYmplY3QsICZhZGRyZXNzLCAwLCBudWxscHRyLCAmcHJvcGVydHlTaXplLCBkZXZp
Y2VJRCk7CisgICAgfQorI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oZGV2aWNlSUQpOworI2VuZGlm
CisgICAgcmV0dXJuIC0xOworfQorI2VuZGlmCisKK0NvcmVBdWRpb1NoYXJlZFVuaXQmIENvcmVB
dWRpb1NoYXJlZFVuaXQ6OnVuaXQoKQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxDb3Jl
QXVkaW9TaGFyZWRVbml0PiBzaW5nbGV0b247CisgICAgcmV0dXJuIHNpbmdsZXRvbjsKK30KKwor
Q29yZUF1ZGlvU2hhcmVkVW5pdDo6Q29yZUF1ZGlvU2hhcmVkVW5pdCgpCisgICAgOiBtX3NhbXBs
ZVJhdGVDYXBhYmlsaXRpZXMoODAwMCwgOTYwMDApCisgICAgLCBtX3ZlcmlmeUNhcHR1cmluZ1Rp
bWVyKCp0aGlzLCAmQ29yZUF1ZGlvU2hhcmVkVW5pdDo6dmVyaWZ5SXNDYXB0dXJpbmcpCit7Cit9
CisKK3ZvaWQgQ29yZUF1ZGlvU2hhcmVkVW5pdDo6cmVzZXRTYW1wbGVSYXRlKCkKK3sKKyAgICBz
ZXRTYW1wbGVSYXRlKG1fZ2V0U2FtcGxlUmF0ZUNhbGxiYWNrID8gbV9nZXRTYW1wbGVSYXRlQ2Fs
bGJhY2soKSA6IEF1ZGlvU2Vzc2lvbjo6c2hhcmVkU2Vzc2lvbigpLnNhbXBsZVJhdGUoKSk7Cit9
CisKK3ZvaWQgQ29yZUF1ZGlvU2hhcmVkVW5pdDo6Y2FwdHVyZURldmljZUNoYW5nZWQoKQorewor
I2lmIFBMQVRGT1JNKE1BQykKKyAgICByZWNvbmZpZ3VyZUF1ZGlvVW5pdCgpOworI2Vsc2UKKyAg
ICBBVkF1ZGlvU2Vzc2lvbkNhcHR1cmVEZXZpY2VNYW5hZ2VyOjpzaW5nbGV0b24oKS5zZXRQcmVm
ZXJyZWRBdWRpb1Nlc3Npb25EZXZpY2VVSUQocGVyc2lzdGVudElEKCkpOworI2VuZGlmCit9CisK
K3NpemVfdCBDb3JlQXVkaW9TaGFyZWRVbml0OjpwcmVmZXJyZWRJT0J1ZmZlclNpemUoKQorewor
ICAgIHJldHVybiBBdWRpb1Nlc3Npb246OnNoYXJlZFNlc3Npb24oKS5idWZmZXJTaXplKCk7Cit9
CisKK09TU3RhdHVzIENvcmVBdWRpb1NoYXJlZFVuaXQ6OnNldHVwQXVkaW9Vbml0KCkKK3sKKyAg
ICBpZiAobV9pb1VuaXQpCisgICAgICAgIHJldHVybiAwOworCisgICAgQVNTRVJUKGhhc0NsaWVu
dHMoKSk7CisKKyAgICBtYWNoX3RpbWViYXNlX2luZm9fZGF0YV90IHRpbWViYXNlSW5mbzsKKyAg
ICBtYWNoX3RpbWViYXNlX2luZm8oJnRpbWViYXNlSW5mbyk7CisgICAgbV9EVFNDb252ZXJzaW9u
UmF0aW8gPSAxZS05ICogc3RhdGljX2Nhc3Q8ZG91YmxlPih0aW1lYmFzZUluZm8ubnVtZXIpIC8g
c3RhdGljX2Nhc3Q8ZG91YmxlPih0aW1lYmFzZUluZm8uZGVub20pOworCisgICAgYXV0byByZXN1
bHQgPSBtX2NyZWF0aW9uQ2FsbGJhY2sgPyBtX2NyZWF0aW9uQ2FsbGJhY2soKSA6IENvcmVBdWRp
b1NoYXJlZEludGVybmFsVW5pdDo6Y3JlYXRlKCk7CisgICAgaWYgKCFyZXN1bHQuaGFzX3ZhbHVl
KCkpCisgICAgICAgIHJldHVybiByZXN1bHQuZXJyb3IoKTsKKworICAgIG1faW9Vbml0ID0gV1RG
TW92ZShyZXN1bHQudmFsdWUoKSkubW92ZVRvVW5pcXVlUHRyKCk7CisgICAgaWYgKCFlbmFibGVF
Y2hvQ2FuY2VsbGF0aW9uKCkpIHsKKyAgICAgICAgdWludDMyX3QgcGFyYW0gPSAwOworICAgICAg
ICBpZiAoYXV0byBlcnIgPSBtX2lvVW5pdC0+c2V0KGtBVVZvaWNlSU9Qcm9wZXJ0eV9Wb2ljZVBy
b2Nlc3NpbmdFbmFibGVBR0MsIGtBdWRpb1VuaXRTY29wZV9HbG9iYWwsIGlucHV0QnVzLCAmcGFy
YW0sIHNpemVvZihwYXJhbSkpKSB7CisgICAgICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihXZWJS
VEMsICJDb3JlQXVkaW9TaGFyZWRVbml0OjpzZXR1cEF1ZGlvVW5pdCglcCkgdW5hYmxlIHRvIHNl
dCB2cGlvIGF1dG9tYXRpYyBnYWluIGNvbnRyb2wsIGVycm9yICVkICglLjRzKSIsIHRoaXMsIChp
bnQpZXJyLCAoY2hhciopJmVycik7CisgICAgICAgICAgICByZXR1cm4gZXJyOworICAgICAgICB9
CisgICAgICAgIHBhcmFtID0gMTsKKyAgICAgICAgaWYgKGF1dG8gZXJyID0gbV9pb1VuaXQtPnNl
dChrQVVWb2ljZUlPUHJvcGVydHlfQnlwYXNzVm9pY2VQcm9jZXNzaW5nLCBrQXVkaW9Vbml0U2Nv
cGVfR2xvYmFsLCBpbnB1dEJ1cywgJnBhcmFtLCBzaXplb2YocGFyYW0pKSkgeworICAgICAgICAg
ICAgUkVMRUFTRV9MT0dfRVJST1IoV2ViUlRDLCAiQ29yZUF1ZGlvU2hhcmVkVW5pdDo6c2V0dXBB
dWRpb1VuaXQoJXApIHVuYWJsZSB0byBzZXQgdnBpbyB1bml0IGVjaG8gY2FuY2VsbGF0aW9uLCBl
cnJvciAlZCAoJS40cykiLCB0aGlzLCAoaW50KWVyciwgKGNoYXIqKSZlcnIpOworICAgICAgICAg
ICAgcmV0dXJuIGVycjsKKyAgICAgICAgfQorICAgIH0KKworI2lmIFBMQVRGT1JNKElPU19GQU1J
TFkpCisgICAgdWludDMyX3QgcGFyYW0gPSAxOworICAgIGlmIChhdXRvIGVyciA9IG1faW9Vbml0
LT5zZXQoa0F1ZGlvT3V0cHV0VW5pdFByb3BlcnR5X0VuYWJsZUlPLCBrQXVkaW9Vbml0U2NvcGVf
SW5wdXQsIGlucHV0QnVzLCAmcGFyYW0sIHNpemVvZihwYXJhbSkpKSB7CisgICAgICAgIFJFTEVB
U0VfTE9HX0VSUk9SKFdlYlJUQywgIkNvcmVBdWRpb1NoYXJlZFVuaXQ6OnNldHVwQXVkaW9Vbml0
KCVwKSB1bmFibGUgdG8gZW5hYmxlIHZwaW8gdW5pdCBpbnB1dCwgZXJyb3IgJWQgKCUuNHMpIiwg
dGhpcywgKGludCllcnIsIChjaGFyKikmZXJyKTsKKyAgICAgICAgcmV0dXJuIGVycjsKKyAgICB9
CisjZWxzZQorICAgIGF1dG8gZGV2aWNlSUQgPSBjYXB0dXJlRGV2aWNlSUQoKTsKKyAgICAvLyBG
SVhNRTogV2UgcHJvYmFibHkgd2FudCB0byBtYWtlIGRlZmF1bHQgaW5wdXQvb3V0cHV0IGRldmlj
ZXMuCisgICAgaWYgKCFkZXZpY2VJRCkgeworICAgICAgICBpZiAoYXV0byBlcnIgPSBtX2lvVW5p
dC0+ZGVmYXVsdElucHV0RGV2aWNlKCZkZXZpY2VJRCkpCisgICAgICAgICAgICByZXR1cm4gZXJy
OworICAgIH0KKworICAgIGlmIChhdXRvIGVyciA9IG1faW9Vbml0LT5zZXQoa0F1ZGlvT3V0cHV0
VW5pdFByb3BlcnR5X0N1cnJlbnREZXZpY2UsIGtBdWRpb1VuaXRTY29wZV9HbG9iYWwsIGlucHV0
QnVzLCAmZGV2aWNlSUQsIHNpemVvZihkZXZpY2VJRCkpKSB7CisgICAgICAgIFJFTEVBU0VfTE9H
X0VSUk9SKFdlYlJUQywgIkNvcmVBdWRpb1NoYXJlZFVuaXQ6OnNldHVwQXVkaW9Vbml0KCVwKSB1
bmFibGUgdG8gc2V0IHZwaW8gdW5pdCBjYXB0dXJlIGRldmljZSBJRCAlZCwgZXJyb3IgJWQgKCUu
NHMpIiwgdGhpcywgKGludClkZXZpY2VJRCwgKGludCllcnIsIChjaGFyKikmZXJyKTsKKyAgICAg
ICAgcmV0dXJuIGVycjsKKyAgICB9CisKKyAgICB1aW50MzJfdCBkZWZhdWx0T3V0cHV0RGV2aWNl
SUQ7CisgICAgYXV0byBlcnIgPSBtX2lvVW5pdC0+ZGVmYXVsdE91dHB1dERldmljZSgmZGVmYXVs
dE91dHB1dERldmljZUlEKTsKKyAgICBpZiAoIWVycikgeworICAgICAgICBlcnIgPSBtX2lvVW5p
dC0+c2V0KGtBdWRpb091dHB1dFVuaXRQcm9wZXJ0eV9DdXJyZW50RGV2aWNlLCBrQXVkaW9Vbml0
U2NvcGVfR2xvYmFsLCBvdXRwdXRCdXMsICZkZWZhdWx0T3V0cHV0RGV2aWNlSUQsIHNpemVvZihk
ZWZhdWx0T3V0cHV0RGV2aWNlSUQpKTsKKyAgICAgICAgUkVMRUFTRV9MT0dfRVJST1JfSUYoZXJy
LCBXZWJSVEMsICJDb3JlQXVkaW9TaGFyZWRVbml0OjpzZXR1cEF1ZGlvVW5pdCglcCkgdW5hYmxl
IHRvIHNldCB2cGlvIHVuaXQgb3V0cHV0IGRldmljZSBJRCAlZCwgZXJyb3IgJWQgKCUuNHMpIiwg
dGhpcywgKGludClkZWZhdWx0T3V0cHV0RGV2aWNlSUQsIChpbnQpZXJyLCAoY2hhciopJmVycik7
CisgICAgfQorICAgIHNldE91dHB1dERldmljZUlEKCFlcnIgPyBkZWZhdWx0T3V0cHV0RGV2aWNl
SUQgOiAwKTsKKyNlbmRpZgorCisgICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0IGZvciBkaWZmZXJl
bnQgc3BlYWtlci9taWNyb3Bob25lIHNhbXBsZSByYXRlcy4KKyAgICBpbnQgYWN0dWFsU2FtcGxl
UmF0ZSA9IHRoaXMtPmFjdHVhbFNhbXBsZVJhdGUoKTsKKyAgICBpZiAoYXV0byBlcnIgPSBjb25m
aWd1cmVNaWNyb3Bob25lUHJvYyhhY3R1YWxTYW1wbGVSYXRlKSkKKyAgICAgICAgcmV0dXJuIGVy
cjsKKworICAgIGlmIChhdXRvIGVyciA9IGNvbmZpZ3VyZVNwZWFrZXJQcm9jKGFjdHVhbFNhbXBs
ZVJhdGUpKQorICAgICAgICByZXR1cm4gZXJyOworCisgICAgaWYgKGF1dG8gZXJyID0gbV9pb1Vu
aXQtPmluaXRpYWxpemUoKSkgeworICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihXZWJSVEMsICJD
b3JlQXVkaW9TaGFyZWRVbml0OjpzZXR1cEF1ZGlvVW5pdCglcCkgQXVkaW9Vbml0SW5pdGlhbGl6
ZSgpIGZhaWxlZCwgZXJyb3IgJWQgKCUuNHMpIiwgdGhpcywgKGludCllcnIsIChjaGFyKikmZXJy
KTsKKyAgICAgICAgcmV0dXJuIGVycjsKKyAgICB9CisgICAgbV9pb1VuaXRJbml0aWFsaXplZCA9
IHRydWU7CisKKyAgICB1bmR1Y2soKTsKKworICAgIHJldHVybiBlcnI7Cit9CisKK3ZvaWQgQ29y
ZUF1ZGlvU2hhcmVkVW5pdDo6dW5kdWNrKCkKK3sKKyAgICB1aW50MzJfdCBvdXRwdXREZXZpY2U7
CisgICAgaWYgKG1faW9Vbml0ICYmICFtX2lvVW5pdC0+ZGVmYXVsdE91dHB1dERldmljZSgmb3V0
cHV0RGV2aWNlKSkKKyAgICAgICAgQXVkaW9EZXZpY2VEdWNrKG91dHB1dERldmljZSwgMS4wLCBu
dWxscHRyLCAwKTsKK30KKworaW50IENvcmVBdWRpb1NoYXJlZFVuaXQ6OmFjdHVhbFNhbXBsZVJh
dGUoKSBjb25zdAoreworICAgIExvY2tlciBsb2NrZXIgeyBtX3NwZWFrZXJTYW1wbGVzUHJvZHVj
ZXJMb2NrIH07CisgICAgcmV0dXJuIG1fc3BlYWtlclNhbXBsZXNQcm9kdWNlciA/IG1fc3BlYWtl
clNhbXBsZXNQcm9kdWNlci0+Zm9ybWF0KCkuc3RyZWFtRGVzY3JpcHRpb24oKS5tU2FtcGxlUmF0
ZSA6IHNhbXBsZVJhdGUoKTsKK30KKworT1NTdGF0dXMgQ29yZUF1ZGlvU2hhcmVkVW5pdDo6Y29u
ZmlndXJlTWljcm9waG9uZVByb2MoaW50IHNhbXBsZVJhdGUpCit7CisgICAgQVNTRVJUKGlzTWFp
blRocmVhZCgpKTsKKworICAgIEFVUmVuZGVyQ2FsbGJhY2tTdHJ1Y3QgY2FsbGJhY2sgPSB7IG1p
Y3JvcGhvbmVDYWxsYmFjaywgdGhpcyB9OworICAgIGlmIChhdXRvIGVyciA9IG1faW9Vbml0LT5z
ZXQoa0F1ZGlvT3V0cHV0VW5pdFByb3BlcnR5X1NldElucHV0Q2FsbGJhY2ssIGtBdWRpb1VuaXRT
Y29wZV9HbG9iYWwsIGlucHV0QnVzLCAmY2FsbGJhY2ssIHNpemVvZihjYWxsYmFjaykpKSB7Cisg
ICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFdlYlJUQywgIkNvcmVBdWRpb1NoYXJlZFVuaXQ6OmNv
bmZpZ3VyZU1pY3JvcGhvbmVQcm9jKCVwKSB1bmFibGUgdG8gc2V0IHZwaW8gdW5pdCBtaWMgcHJv
YywgZXJyb3IgJWQgKCUuNHMpIiwgdGhpcywgKGludCllcnIsIChjaGFyKikmZXJyKTsKKyAgICAg
ICAgcmV0dXJuIGVycjsKKyAgICB9CisKKyAgICBBdWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRpb24g
bWljcm9waG9uZVByb2NGb3JtYXQgPSB7IH07CisKKyAgICBVSW50MzIgc2l6ZSA9IHNpemVvZiht
aWNyb3Bob25lUHJvY0Zvcm1hdCk7CisgICAgaWYgKGF1dG8gZXJyID0gbV9pb1VuaXQtPmdldChr
QXVkaW9Vbml0UHJvcGVydHlfU3RyZWFtRm9ybWF0LCBrQXVkaW9Vbml0U2NvcGVfT3V0cHV0LCBp
bnB1dEJ1cywgJm1pY3JvcGhvbmVQcm9jRm9ybWF0LCAmc2l6ZSkpIHsKKyAgICAgICAgUkVMRUFT
RV9MT0dfRVJST1IoV2ViUlRDLCAiQ29yZUF1ZGlvU2hhcmVkVW5pdDo6Y29uZmlndXJlTWljcm9w
aG9uZVByb2MoJXApIHVuYWJsZSB0byBnZXQgb3V0cHV0IHN0cmVhbSBmb3JtYXQsIGVycm9yICVk
ICglLjRzKSIsIHRoaXMsIChpbnQpZXJyLCAoY2hhciopJmVycik7CisgICAgICAgIHJldHVybiBl
cnI7CisgICAgfQorCisgICAgbWljcm9waG9uZVByb2NGb3JtYXQubVNhbXBsZVJhdGUgPSBzYW1w
bGVSYXRlOworICAgIGlmIChhdXRvIGVyciA9IG1faW9Vbml0LT5zZXQoa0F1ZGlvVW5pdFByb3Bl
cnR5X1N0cmVhbUZvcm1hdCwga0F1ZGlvVW5pdFNjb3BlX091dHB1dCwgaW5wdXRCdXMsICZtaWNy
b3Bob25lUHJvY0Zvcm1hdCwgc2l6ZSkpIHsKKyAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoV2Vi
UlRDLCAiQ29yZUF1ZGlvU2hhcmVkVW5pdDo6Y29uZmlndXJlTWljcm9waG9uZVByb2MoJXApIHVu
YWJsZSB0byBzZXQgb3V0cHV0IHN0cmVhbSBmb3JtYXQsIGVycm9yICVkICglLjRzKSIsIHRoaXMs
IChpbnQpZXJyLCAoY2hhciopJmVycik7CisgICAgICAgIHJldHVybiBlcnI7CisgICAgfQorCisg
ICAgbV9taWNyb3Bob25lU2FtcGxlQnVmZmVyID0gQXVkaW9TYW1wbGVCdWZmZXJMaXN0OjpjcmVh
dGUobWljcm9waG9uZVByb2NGb3JtYXQsIHByZWZlcnJlZElPQnVmZmVyU2l6ZSgpICogMik7Cisg
ICAgbV9taWNyb3Bob25lUHJvY0Zvcm1hdCA9IG1pY3JvcGhvbmVQcm9jRm9ybWF0OworCisgICAg
cmV0dXJuIG5vRXJyOworfQorCitPU1N0YXR1cyBDb3JlQXVkaW9TaGFyZWRVbml0Ojpjb25maWd1
cmVTcGVha2VyUHJvYyhpbnQgc2FtcGxlUmF0ZSkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFk
KCkpOworCisgICAgQVVSZW5kZXJDYWxsYmFja1N0cnVjdCBjYWxsYmFjayA9IHsgc3BlYWtlckNh
bGxiYWNrLCB0aGlzIH07CisgICAgaWYgKGF1dG8gZXJyID0gbV9pb1VuaXQtPnNldChrQXVkaW9V
bml0UHJvcGVydHlfU2V0UmVuZGVyQ2FsbGJhY2ssIGtBdWRpb1VuaXRTY29wZV9JbnB1dCwgb3V0
cHV0QnVzLCAmY2FsbGJhY2ssIHNpemVvZihjYWxsYmFjaykpKSB7CisgICAgICAgIFJFTEVBU0Vf
TE9HX0VSUk9SKFdlYlJUQywgIkNvcmVBdWRpb1NoYXJlZFVuaXQ6OmNvbmZpZ3VyZVNwZWFrZXJQ
cm9jKCVwKSB1bmFibGUgdG8gc2V0IHZwaW8gdW5pdCBzcGVha2VyIHByb2MsIGVycm9yICVkICgl
LjRzKSIsIHRoaXMsIChpbnQpZXJyLCAoY2hhciopJmVycik7CisgICAgICAgIHJldHVybiBlcnI7
CisgICAgfQorCisgICAgQXVkaW9TdHJlYW1CYXNpY0Rlc2NyaXB0aW9uIHNwZWFrZXJQcm9jRm9y
bWF0OworICAgIFVJbnQzMiBzaXplID0gc2l6ZW9mKHNwZWFrZXJQcm9jRm9ybWF0KTsKKyAgICB7
CisgICAgICAgIExvY2tlciBsb2NrZXIgeyBtX3NwZWFrZXJTYW1wbGVzUHJvZHVjZXJMb2NrIH07
CisgICAgICAgIGlmIChtX3NwZWFrZXJTYW1wbGVzUHJvZHVjZXIpIHsKKyAgICAgICAgICAgIHNw
ZWFrZXJQcm9jRm9ybWF0ID0gbV9zcGVha2VyU2FtcGxlc1Byb2R1Y2VyLT5mb3JtYXQoKS5zdHJl
YW1EZXNjcmlwdGlvbigpOworICAgICAgICAgICAgQVNTRVJUKHNwZWFrZXJQcm9jRm9ybWF0Lm1T
YW1wbGVSYXRlID09IHNhbXBsZVJhdGUpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
aWYgKGF1dG8gZXJyID0gbV9pb1VuaXQtPmdldChrQXVkaW9Vbml0UHJvcGVydHlfU3RyZWFtRm9y
bWF0LCBrQXVkaW9Vbml0U2NvcGVfSW5wdXQsIG91dHB1dEJ1cywgJnNwZWFrZXJQcm9jRm9ybWF0
LCAmc2l6ZSkpIHsKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihXZWJSVEMsICJD
b3JlQXVkaW9TaGFyZWRVbml0Ojpjb25maWd1cmVTcGVha2VyUHJvYyglcCkgdW5hYmxlIHRvIGdl
dCBpbnB1dCBzdHJlYW0gZm9ybWF0LCBlcnJvciAlZCAoJS40cykiLCB0aGlzLCAoaW50KWVyciwg
KGNoYXIqKSZlcnIpOworICAgICAgICAgICAgICAgIHJldHVybiBlcnI7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICB9CisgICAgc3BlYWtlclByb2NGb3JtYXQubVNhbXBsZVJhdGUgPSBz
YW1wbGVSYXRlOworCisgICAgaWYgKGF1dG8gZXJyID0gbV9pb1VuaXQtPnNldChrQXVkaW9Vbml0
UHJvcGVydHlfU3RyZWFtRm9ybWF0LCBrQXVkaW9Vbml0U2NvcGVfSW5wdXQsIG91dHB1dEJ1cywg
JnNwZWFrZXJQcm9jRm9ybWF0LCBzaXplKSkgeworICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihX
ZWJSVEMsICJDb3JlQXVkaW9TaGFyZWRVbml0Ojpjb25maWd1cmVTcGVha2VyUHJvYyglcCkgdW5h
YmxlIHRvIGdldCBpbnB1dCBzdHJlYW0gZm9ybWF0LCBlcnJvciAlZCAoJS40cykiLCB0aGlzLCAo
aW50KWVyciwgKGNoYXIqKSZlcnIpOworICAgICAgICByZXR1cm4gZXJyOworICAgIH0KKworICAg
IG1fc3BlYWtlclByb2NGb3JtYXQgPSBzcGVha2VyUHJvY0Zvcm1hdDsKKworICAgIHJldHVybiBu
b0VycjsKK30KKworI2lmICFMT0dfRElTQUJMRUQKK3ZvaWQgQ29yZUF1ZGlvU2hhcmVkVW5pdDo6
Y2hlY2tUaW1lc3RhbXBzKGNvbnN0IEF1ZGlvVGltZVN0YW1wJiB0aW1lU3RhbXAsIHVpbnQ2NF90
IHNhbXBsZVRpbWUsIGRvdWJsZSBob3N0VGltZSkKK3sKKyAgICBpZiAoIXRpbWVTdGFtcC5tU2Ft
cGxlVGltZSB8fCBzYW1wbGVUaW1lID09IG1fbGF0ZXN0TWljVGltZVN0YW1wIHx8ICFob3N0VGlt
ZSkKKyAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoV2ViUlRDLCAiQ29yZUF1ZGlvU2hhcmVkVW5p
dDo6Y2hlY2tUaW1lc3RhbXBzOiB1bnVzdWFsIHRpbWVzdGFtcHMsIHNhbXBsZSB0aW1lID0gJWxs
ZCwgcHJldmlvdXMgc2FtcGxlIHRpbWUgPSAlbGxkLCBob3N0VGltZSAlZiIsIHNhbXBsZVRpbWUs
IG1fbGF0ZXN0TWljVGltZVN0YW1wLCBob3N0VGltZSk7Cit9CisjZW5kaWYKKworT1NTdGF0dXMg
Q29yZUF1ZGlvU2hhcmVkVW5pdDo6cHJvdmlkZVNwZWFrZXJEYXRhKEF1ZGlvVW5pdFJlbmRlckFj
dGlvbkZsYWdzJiBmbGFncywgY29uc3QgQXVkaW9UaW1lU3RhbXAmIHRpbWVTdGFtcCwgVUludDMy
IC8qaW5CdXNOdW1iZXIqLywgVUludDMyIGluTnVtYmVyRnJhbWVzLCBBdWRpb0J1ZmZlckxpc3Qm
IGlvRGF0YSkKK3sKKyAgICBpZiAobV9pc1JlY29uZmlndXJpbmcgfHwgIW1fc3BlYWtlclNhbXBs
ZXNQcm9kdWNlckxvY2sudHJ5TG9jaygpKSB7CisgICAgICAgIEF1ZGlvU2FtcGxlQnVmZmVyTGlz
dDo6emVyb0FCTChpb0RhdGEsIHN0YXRpY19jYXN0PHNpemVfdD4oaW5OdW1iZXJGcmFtZXMgKiBt
X3NwZWFrZXJQcm9jRm9ybWF0LmJ5dGVzUGVyRnJhbWUoKSkpOworICAgICAgICBmbGFncyA9IGtB
dWRpb1VuaXRSZW5kZXJBY3Rpb25fT3V0cHV0SXNTaWxlbmNlOworICAgICAgICByZXR1cm4gbm9F
cnI7CisgICAgfQorCisgICAgTG9ja2VyIGxvY2tlciB7IEFkb3B0TG9jaywgbV9zcGVha2VyU2Ft
cGxlc1Byb2R1Y2VyTG9jayB9OworICAgIGlmICghbV9zcGVha2VyU2FtcGxlc1Byb2R1Y2VyKSB7
CisgICAgICAgIEF1ZGlvU2FtcGxlQnVmZmVyTGlzdDo6emVyb0FCTChpb0RhdGEsIHN0YXRpY19j
YXN0PHNpemVfdD4oaW5OdW1iZXJGcmFtZXMgKiBtX3NwZWFrZXJQcm9jRm9ybWF0LmJ5dGVzUGVy
RnJhbWUoKSkpOworICAgICAgICBmbGFncyA9IGtBdWRpb1VuaXRSZW5kZXJBY3Rpb25fT3V0cHV0
SXNTaWxlbmNlOworICAgICAgICByZXR1cm4gbm9FcnI7CisgICAgfQorICAgIHJldHVybiBtX3Nw
ZWFrZXJTYW1wbGVzUHJvZHVjZXItPnByb2R1Y2VTcGVha2VyU2FtcGxlcyhpbk51bWJlckZyYW1l
cywgaW9EYXRhLCB0aW1lU3RhbXAubVNhbXBsZVRpbWUsIHRpbWVTdGFtcC5tSG9zdFRpbWUsIGZs
YWdzKTsKK30KKworT1NTdGF0dXMgQ29yZUF1ZGlvU2hhcmVkVW5pdDo6c3BlYWtlckNhbGxiYWNr
KHZvaWQgKmluUmVmQ29uLCBBdWRpb1VuaXRSZW5kZXJBY3Rpb25GbGFncyogaW9BY3Rpb25GbGFn
cywgY29uc3QgQXVkaW9UaW1lU3RhbXAqIGluVGltZVN0YW1wLCBVSW50MzIgaW5CdXNOdW1iZXIs
IFVJbnQzMiBpbk51bWJlckZyYW1lcywgQXVkaW9CdWZmZXJMaXN0KiBpb0RhdGEpCit7CisgICAg
QVNTRVJUKGlvQWN0aW9uRmxhZ3MpOworICAgIEFTU0VSVChpblRpbWVTdGFtcCk7CisgICAgYXV0
byBkYXRhU291cmNlID0gc3RhdGljX2Nhc3Q8Q29yZUF1ZGlvU2hhcmVkVW5pdCo+KGluUmVmQ29u
KTsKKyAgICByZXR1cm4gZGF0YVNvdXJjZS0+cHJvdmlkZVNwZWFrZXJEYXRhKCppb0FjdGlvbkZs
YWdzLCAqaW5UaW1lU3RhbXAsIGluQnVzTnVtYmVyLCBpbk51bWJlckZyYW1lcywgKmlvRGF0YSk7
Cit9CisKK09TU3RhdHVzIENvcmVBdWRpb1NoYXJlZFVuaXQ6OnByb2Nlc3NNaWNyb3Bob25lU2Ft
cGxlcyhBdWRpb1VuaXRSZW5kZXJBY3Rpb25GbGFncyYgaW9BY3Rpb25GbGFncywgY29uc3QgQXVk
aW9UaW1lU3RhbXAmIHRpbWVTdGFtcCwgVUludDMyIGluQnVzTnVtYmVyLCBVSW50MzIgaW5OdW1i
ZXJGcmFtZXMsIEF1ZGlvQnVmZmVyTGlzdCogLyppb0RhdGEqLykKK3sKKyAgICArK21fbWljcm9w
aG9uZVByb2NzQ2FsbGVkOworCisgICAgaWYgKG1faXNSZWNvbmZpZ3VyaW5nKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICAvLyBQdWxsIHRocm91Z2ggdGhlIHZwaW8gdW5pdCB0byBvdXIg
bWljIGJ1ZmZlci4KKyAgICBtX21pY3JvcGhvbmVTYW1wbGVCdWZmZXItPnJlc2V0KCk7CisgICAg
QXVkaW9CdWZmZXJMaXN0JiBidWZmZXJMaXN0ID0gbV9taWNyb3Bob25lU2FtcGxlQnVmZmVyLT5i
dWZmZXJMaXN0KCk7CisgICAgaWYgKGF1dG8gZXJyID0gbV9pb1VuaXQtPnJlbmRlcigmaW9BY3Rp
b25GbGFncywgJnRpbWVTdGFtcCwgaW5CdXNOdW1iZXIsIGluTnVtYmVyRnJhbWVzLCAmYnVmZmVy
TGlzdCkpIHsKKyAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoV2ViUlRDLCAiQ29yZUF1ZGlvU2hh
cmVkVW5pdDo6cHJvY2Vzc01pY3JvcGhvbmVTYW1wbGVzKCVwKSBBdWRpb1VuaXRSZW5kZXIgZmFp
bGVkIHdpdGggZXJyb3IgJWQgKCUuNHMpLCBidWZmZXJMaXN0IHNpemUgJWQsIGluTnVtYmVyRnJh
bWVzICVkICIsIHRoaXMsIChpbnQpZXJyLCAoY2hhciopJmVyciwgKGludClidWZmZXJMaXN0Lm1C
dWZmZXJzWzBdLm1EYXRhQnl0ZVNpemUsIChpbnQpaW5OdW1iZXJGcmFtZXMpOworICAgICAgICBp
ZiAoZXJyID09IGtBdWRpb19QYXJhbUVycm9yKSB7CisgICAgICAgICAgICAvLyBPdXIgYnVmZmVy
IG1pZ2h0IGJlIHRvbyBzbWFsbCwgdGhlIHByZWZlcnJlZCBidWZmZXIgc2l6ZSBvciBzYW1wbGUg
cmF0ZSBtaWdodCBoYXZlIGNoYW5nZWQuCisgICAgICAgICAgICBjYWxsT25NYWluVGhyZWFkKFtd
IHsKKyAgICAgICAgICAgICAgICBDb3JlQXVkaW9TaGFyZWRVbml0OjpzaW5nbGV0b24oKS5yZWNv
bmZpZ3VyZSgpOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKyAgICAgICAgLy8gV2UgcmV0
dXJuIGVhcmx5IHNvIHRoYXQgaWYgdGhpcyBlcnJvciBoYXBwZW5zLCB3ZSBkbyBub3QgaW5jcmVt
ZW50IG1fbWljcm9waG9uZVByb2NzQ2FsbGVkIGFuZCBmYWlsIHRoZSBjYXB0dXJlIG9uY2UgdGlt
ZXIga2lja3MgaW4uCisgICAgICAgIHJldHVybiBlcnI7CisgICAgfQorCisgICAgaWYgKCFpc1By
b2R1Y2luZ01pY3JvcGhvbmVTYW1wbGVzKCkpCisgICAgICAgIHJldHVybiBub0VycjsKKworICAg
IGRvdWJsZSBhZGp1c3RlZEhvc3RUaW1lID0gbV9EVFNDb252ZXJzaW9uUmF0aW8gKiB0aW1lU3Rh
bXAubUhvc3RUaW1lOworICAgIHVpbnQ2NF90IHNhbXBsZVRpbWUgPSB0aW1lU3RhbXAubVNhbXBs
ZVRpbWU7CisjaWYgIUxPR19ESVNBQkxFRAorICAgIGNoZWNrVGltZXN0YW1wcyh0aW1lU3RhbXAs
IHNhbXBsZVRpbWUsIGFkanVzdGVkSG9zdFRpbWUpOworI2VuZGlmCisgICAgbV9sYXRlc3RNaWNU
aW1lU3RhbXAgPSBzYW1wbGVUaW1lOworICAgIG1fbWljcm9waG9uZVNhbXBsZUJ1ZmZlci0+c2V0
VGltZXMoYWRqdXN0ZWRIb3N0VGltZSwgc2FtcGxlVGltZSk7CisKKyAgICBpZiAodm9sdW1lKCkg
IT0gMS4wKQorICAgICAgICBtX21pY3JvcGhvbmVTYW1wbGVCdWZmZXItPmFwcGx5R2Fpbih2b2x1
bWUoKSk7CisKKyAgICBhdWRpb1NhbXBsZXNBdmFpbGFibGUoTWVkaWFUaW1lKHNhbXBsZVRpbWUs
IG1fbWljcm9waG9uZVByb2NGb3JtYXQuc2FtcGxlUmF0ZSgpKSwgbV9taWNyb3Bob25lU2FtcGxl
QnVmZmVyLT5idWZmZXJMaXN0KCksIG1fbWljcm9waG9uZVByb2NGb3JtYXQsIGluTnVtYmVyRnJh
bWVzKTsKKyAgICByZXR1cm4gbm9FcnI7Cit9CisKK09TU3RhdHVzIENvcmVBdWRpb1NoYXJlZFVu
aXQ6Om1pY3JvcGhvbmVDYWxsYmFjayh2b2lkICppblJlZkNvbiwgQXVkaW9Vbml0UmVuZGVyQWN0
aW9uRmxhZ3MqIGlvQWN0aW9uRmxhZ3MsIGNvbnN0IEF1ZGlvVGltZVN0YW1wKiBpblRpbWVTdGFt
cCwgVUludDMyIGluQnVzTnVtYmVyLCBVSW50MzIgaW5OdW1iZXJGcmFtZXMsIEF1ZGlvQnVmZmVy
TGlzdCogaW9EYXRhKQoreworICAgIEFTU0VSVChpb0FjdGlvbkZsYWdzKTsKKyAgICBBU1NFUlQo
aW5UaW1lU3RhbXApOworICAgIENvcmVBdWRpb1NoYXJlZFVuaXQqIGRhdGFTb3VyY2UgPSBzdGF0
aWNfY2FzdDxDb3JlQXVkaW9TaGFyZWRVbml0Kj4oaW5SZWZDb24pOworICAgIHJldHVybiBkYXRh
U291cmNlLT5wcm9jZXNzTWljcm9waG9uZVNhbXBsZXMoKmlvQWN0aW9uRmxhZ3MsICppblRpbWVT
dGFtcCwgaW5CdXNOdW1iZXIsIGluTnVtYmVyRnJhbWVzLCBpb0RhdGEpOworfQorCit2b2lkIENv
cmVBdWRpb1NoYXJlZFVuaXQ6OmNsZWFudXBBdWRpb1VuaXQoKQoreworICAgIGlmIChtX2lvVW5p
dEluaXRpYWxpemVkKSB7CisgICAgICAgIEFTU0VSVChtX2lvVW5pdCk7CisgICAgICAgIGlmIChh
dXRvIGVyciA9IG1faW9Vbml0LT51bmluaXRpYWxpemUoKSkKKyAgICAgICAgICAgIFJFTEVBU0Vf
TE9HX0VSUk9SKFdlYlJUQywgIkNvcmVBdWRpb1NoYXJlZFVuaXQ6OmNsZWFudXBBdWRpb1VuaXQo
JXApIEF1ZGlvVW5pdFVuaW5pdGlhbGl6ZSBmYWlsZWQgd2l0aCBlcnJvciAlZCAoJS40cykiLCB0
aGlzLCAoaW50KWVyciwgKGNoYXIqKSZlcnIpOworICAgICAgICBtX2lvVW5pdEluaXRpYWxpemVk
ID0gZmFsc2U7CisgICAgfQorCisgICAgbV9pb1VuaXQgPSBudWxscHRyOworCisgICAgbV9taWNy
b3Bob25lU2FtcGxlQnVmZmVyID0gbnVsbHB0cjsKK30KKwordm9pZCBDb3JlQXVkaW9TaGFyZWRV
bml0OjpkZWxheVNhbXBsZXMoU2Vjb25kcyBzZWNvbmRzKQoreworICAgIGlmIChtX2lvVW5pdCkK
KyAgICAgICAgbV9pb1VuaXQtPmRlbGF5U2FtcGxlcyhzZWNvbmRzKTsKK30KKworT1NTdGF0dXMg
Q29yZUF1ZGlvU2hhcmVkVW5pdDo6cmVjb25maWd1cmVBdWRpb1VuaXQoKQoreworICAgIEFTU0VS
VChpc01haW5UaHJlYWQoKSk7CisgICAgaWYgKCFoYXNBdWRpb1VuaXQoKSkKKyAgICAgICAgcmV0
dXJuIDA7CisKKyAgICBtX2lzUmVjb25maWd1cmluZyA9IHRydWU7CisgICAgYXV0byBzY29wZSA9
IG1ha2VTY29wZUV4aXQoW3RoaXNdIHsgbV9pc1JlY29uZmlndXJpbmcgPSBmYWxzZTsgfSk7CisK
KyAgICBpZiAobV9pb1VuaXRTdGFydGVkKSB7CisgICAgICAgIGlmIChhdXRvIGVyciA9IG1faW9V
bml0LT5zdG9wKCkpIHsKKyAgICAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFdlYlJUQywgIkNv
cmVBdWRpb1NoYXJlZFVuaXQ6OnJlY29uZmlndXJlQXVkaW9Vbml0KCVwKSBBdWRpb091dHB1dFVu
aXRTdG9wIGZhaWxlZCB3aXRoIGVycm9yICVkICglLjRzKSIsIHRoaXMsIChpbnQpZXJyLCAoY2hh
ciopJmVycik7CisgICAgICAgICAgICByZXR1cm4gZXJyOworICAgICAgICB9CisgICAgfQorCisg
ICAgY2xlYW51cEF1ZGlvVW5pdCgpOworICAgIGlmIChhdXRvIGVyciA9IHNldHVwQXVkaW9Vbml0
KCkpCisgICAgICAgIHJldHVybiBlcnI7CisKKyAgICBpZiAobV9pb1VuaXRTdGFydGVkKSB7Cisg
ICAgICAgIGlmIChhdXRvIGVyciA9IG1faW9Vbml0LT5zdGFydCgpKSB7CisgICAgICAgICAgICBS
RUxFQVNFX0xPR19FUlJPUihXZWJSVEMsICJDb3JlQXVkaW9TaGFyZWRVbml0OjpyZWNvbmZpZ3Vy
ZUF1ZGlvVW5pdCglcCkgQXVkaW9PdXRwdXRVbml0U3RhcnQgZmFpbGVkIHdpdGggZXJyb3IgJWQg
KCUuNHMpIiwgdGhpcywgKGludCllcnIsIChjaGFyKikmZXJyKTsKKyAgICAgICAgICAgIHJldHVy
biBlcnI7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIG5vRXJyOworfQorCitPU1N0YXR1
cyBDb3JlQXVkaW9TaGFyZWRVbml0OjpzdGFydEludGVybmFsKCkKK3sKKyAgICBBU1NFUlQoaXNN
YWluVGhyZWFkKCkpOworCisgICAgc2V0SXNQcm9kdWNpbmdNaWNyb3Bob25lU2FtcGxlcyh0cnVl
KTsKKworICAgIGlmICghbV9pb1VuaXQpIHsKKyAgICAgICAgaWYgKGF1dG8gZXJyID0gc2V0dXBB
dWRpb1VuaXQoKSkgeworICAgICAgICAgICAgY2xlYW51cEF1ZGlvVW5pdCgpOworICAgICAgICAg
ICAgQVNTRVJUKCFtX2lvVW5pdCk7CisgICAgICAgICAgICByZXR1cm4gZXJyOworICAgICAgICB9
CisgICAgICAgIEFTU0VSVChtX2lvVW5pdCk7CisgICAgfQorCisgICAgdW5kdWNrKCk7CisKKyAg
ICB7CisgICAgICAgIExvY2tlciBsb2NrZXIgeyBtX3NwZWFrZXJTYW1wbGVzUHJvZHVjZXJMb2Nr
IH07CisgICAgICAgIGlmIChtX3NwZWFrZXJTYW1wbGVzUHJvZHVjZXIpCisgICAgICAgICAgICBt
X3NwZWFrZXJTYW1wbGVzUHJvZHVjZXItPmNhcHR1cmVVbml0SXNTdGFydGluZygpOworICAgIH0K
KworICAgIGlmIChhdXRvIGVyciA9IG1faW9Vbml0LT5zdGFydCgpKSB7CisgICAgICAgIHsKKyAg
ICAgICAgICAgIExvY2tlciBsb2NrZXIgeyBtX3NwZWFrZXJTYW1wbGVzUHJvZHVjZXJMb2NrIH07
CisgICAgICAgICAgICBpZiAobV9zcGVha2VyU2FtcGxlc1Byb2R1Y2VyKQorICAgICAgICAgICAg
ICAgIG1fc3BlYWtlclNhbXBsZXNQcm9kdWNlci0+Y2FwdHVyZVVuaXRIYXNTdG9wcGVkKCk7Cisg
ICAgICAgIH0KKworICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihXZWJSVEMsICJDb3JlQXVkaW9T
aGFyZWRVbml0OjpzdGFydCglcCkgQXVkaW9PdXRwdXRVbml0U3RhcnQgZmFpbGVkIHdpdGggZXJy
b3IgJWQgKCUuNHMpIiwgdGhpcywgKGludCllcnIsIChjaGFyKikmZXJyKTsKKyAgICAgICAgY2xl
YW51cEF1ZGlvVW5pdCgpOworICAgICAgICBBU1NFUlQoIW1faW9Vbml0KTsKKyAgICAgICAgcmV0
dXJuIGVycjsKKyAgICB9CisKKyAgICBtX2lvVW5pdFN0YXJ0ZWQgPSB0cnVlOworCisgICAgbV92
ZXJpZnlDYXB0dXJpbmdUaW1lci5zdGFydFJlcGVhdGluZyh2ZXJpZnlDYXB0dXJlSW50ZXJ2YWwo
KSk7CisgICAgbV9taWNyb3Bob25lUHJvY3NDYWxsZWQgPSAwOworICAgIG1fbWljcm9waG9uZVBy
b2NzQ2FsbGVkTGFzdFRpbWUgPSAwOworCisgICAgcmV0dXJuIG5vRXJyOworfQorCit2b2lkIENv
cmVBdWRpb1NoYXJlZFVuaXQ6OmlzUHJvZHVjaW5nTWljcm9waG9uZVNhbXBsZXNDaGFuZ2VkKCkK
K3sKKyAgICBpZiAoIWlzUHJvZHVjaW5nRGF0YSgpKQorICAgICAgICByZXR1cm47CisgICAgbV92
ZXJpZnlDYXB0dXJpbmdUaW1lci5zdGFydFJlcGVhdGluZyh2ZXJpZnlDYXB0dXJlSW50ZXJ2YWwo
KSk7Cit9CisKK3ZvaWQgQ29yZUF1ZGlvU2hhcmVkVW5pdDo6dmFsaWRhdGVPdXRwdXREZXZpY2Uo
dWludDMyX3QgY3VycmVudE91dHB1dERldmljZUlEKQoreworI2lmIFBMQVRGT1JNKE1BQykKKyAg
ICBpZiAoIW1faW9Vbml0KQorICAgICAgICByZXR1cm47CisKKyAgICB1aW50MzJfdCBjdXJyZW50
RGVmYXVsdE91dHB1dERldmljZUlEID0gMDsKKyAgICBpZiAoYXV0byBlcnIgPSBtX2lvVW5pdC0+
ZGVmYXVsdE91dHB1dERldmljZSgmY3VycmVudERlZmF1bHRPdXRwdXREZXZpY2VJRCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIGlmICghY3VycmVudERlZmF1bHRPdXRwdXREZXZpY2VJRCB8fCBj
dXJyZW50T3V0cHV0RGV2aWNlSUQgPT0gY3VycmVudERlZmF1bHRPdXRwdXREZXZpY2VJRCkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgcmVjb25maWd1cmUoKTsKKyNlbHNlCisgICAgVU5VU0VEX1BB
UkFNKGN1cnJlbnRPdXRwdXREZXZpY2VJRCk7CisjZW5kaWYKK30KKwordm9pZCBDb3JlQXVkaW9T
aGFyZWRVbml0Ojp2ZXJpZnlJc0NhcHR1cmluZygpCit7CisgICAgaWYgKG1fbWljcm9waG9uZVBy
b2NzQ2FsbGVkTGFzdFRpbWUgIT0gbV9taWNyb3Bob25lUHJvY3NDYWxsZWQpIHsKKyAgICAgICAg
bV9taWNyb3Bob25lUHJvY3NDYWxsZWRMYXN0VGltZSA9IG1fbWljcm9waG9uZVByb2NzQ2FsbGVk
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgUkVMRUFTRV9MT0dfRVJST1IoV2ViUlRD
LCAiQ29yZUF1ZGlvU2hhcmVkVW5pdDo6dmVyaWZ5SXNDYXB0dXJpbmcgLSBubyBhdWRpbyByZWNl
aXZlZCBpbiAlZCBzZWNvbmRzLCBmYWlsaW5nIiwgc3RhdGljX2Nhc3Q8aW50PihtX3ZlcmlmeUNh
cHR1cmluZ1RpbWVyLnJlcGVhdEludGVydmFsKCkudmFsdWUoKSkpOworICAgIGNhcHR1cmVGYWls
ZWQoKTsKK30KKwordm9pZCBDb3JlQXVkaW9TaGFyZWRVbml0OjpzdG9wSW50ZXJuYWwoKQorewor
ICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisKKyAgICBtX3ZlcmlmeUNhcHR1cmluZ1RpbWVy
LnN0b3AoKTsKKworICAgIGlmICghbV9pb1VuaXQgfHwgIW1faW9Vbml0U3RhcnRlZCkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgaWYgKGF1dG8gZXJyID0gbV9pb1VuaXQtPnN0b3AoKSkgeworICAg
ICAgICBSRUxFQVNFX0xPR19FUlJPUihXZWJSVEMsICJDb3JlQXVkaW9TaGFyZWRVbml0OjpzdG9w
KCVwKSBBdWRpb091dHB1dFVuaXRTdG9wIGZhaWxlZCB3aXRoIGVycm9yICVkICglLjRzKSIsIHRo
aXMsIChpbnQpZXJyLCAoY2hhciopJmVycik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
eworICAgICAgICBMb2NrZXIgbG9ja2VyIHsgbV9zcGVha2VyU2FtcGxlc1Byb2R1Y2VyTG9jayB9
OworICAgICAgICBpZiAobV9zcGVha2VyU2FtcGxlc1Byb2R1Y2VyKQorICAgICAgICAgICAgbV9z
cGVha2VyU2FtcGxlc1Byb2R1Y2VyLT5jYXB0dXJlVW5pdEhhc1N0b3BwZWQoKTsKKyAgICB9CisK
KyAgICBtX2lvVW5pdFN0YXJ0ZWQgPSBmYWxzZTsKK30KKwordm9pZCBDb3JlQXVkaW9TaGFyZWRV
bml0OjpyZWdpc3RlclNwZWFrZXJTYW1wbGVzUHJvZHVjZXIoQ29yZUF1ZGlvU3BlYWtlclNhbXBs
ZXNQcm9kdWNlciYgcHJvZHVjZXIpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKwor
ICAgIHNldElzUmVuZGVyaW5nQXVkaW8odHJ1ZSk7CisKKyAgICBDb3JlQXVkaW9TcGVha2VyU2Ft
cGxlc1Byb2R1Y2VyKiBvbGRQcm9kdWNlcjsKKyAgICB7CisgICAgICAgIExvY2tlciBsb2NrZXIg
eyBtX3NwZWFrZXJTYW1wbGVzUHJvZHVjZXJMb2NrIH07CisgICAgICAgIG9sZFByb2R1Y2VyID0g
bV9zcGVha2VyU2FtcGxlc1Byb2R1Y2VyOworICAgICAgICBtX3NwZWFrZXJTYW1wbGVzUHJvZHVj
ZXIgPSAmcHJvZHVjZXI7CisgICAgfQorICAgIGlmIChvbGRQcm9kdWNlciAmJiBvbGRQcm9kdWNl
ciAhPSAmcHJvZHVjZXIpCisgICAgICAgIG9sZFByb2R1Y2VyLT5jYXB0dXJlVW5pdEhhc1N0b3Bw
ZWQoKTsKKworICAgIGlmIChoYXNBdWRpb1VuaXQoKSAmJiBwcm9kdWNlci5mb3JtYXQoKSAhPSBt
X3NwZWFrZXJQcm9jRm9ybWF0KQorICAgICAgICByZWNvbmZpZ3VyZSgpOworfQorCit2b2lkIENv
cmVBdWRpb1NoYXJlZFVuaXQ6OnVucmVnaXN0ZXJTcGVha2VyU2FtcGxlc1Byb2R1Y2VyKENvcmVB
dWRpb1NwZWFrZXJTYW1wbGVzUHJvZHVjZXImIHByb2R1Y2VyKQoreworICAgIEFTU0VSVChpc01h
aW5UaHJlYWQoKSk7CisKKyAgICB7CisgICAgICAgIExvY2tlciBsb2NrZXIgeyBtX3NwZWFrZXJT
YW1wbGVzUHJvZHVjZXJMb2NrIH07CisgICAgICAgIGlmIChtX3NwZWFrZXJTYW1wbGVzUHJvZHVj
ZXIgIT0gJnByb2R1Y2VyKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBtX3NwZWFrZXJT
YW1wbGVzUHJvZHVjZXIgPSBudWxscHRyOworICAgIH0KKworICAgIHNldElzUmVuZGVyaW5nQXVk
aW8oZmFsc2UpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFC
TEUoTUVESUFfU1RSRUFNKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVk
aWFzdHJlYW0vbWFjL0NvcmVBdWRpb1NoYXJlZFVuaXQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21lZGlhc3RyZWFtL21hYy9Db3JlQXVkaW9TaGFyZWRVbml0LmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZmI0
YjhjYmNiMGE1YzYwYmY4NzcxMjUwMmYyMTVmNTM2MWFmM2NjOAotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9Db3JlQXVkaW9TaGFyZWRV
bml0LmgKQEAgLTAsMCArMSwxNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKE1FRElBX1NUUkVB
TSkKKworI2luY2x1ZGUgIkF1ZGlvU2FtcGxlRGF0YVNvdXJjZS5oIgorI2luY2x1ZGUgIkJhc2VB
dWRpb1NoYXJlZFVuaXQuaCIKKyNpbmNsdWRlICJDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24uaCIK
KyNpbmNsdWRlICJUaW1lci5oIgorCit0eXBlZGVmIFVJbnQzMiBBdWRpb1VuaXRQcm9wZXJ0eUlE
OwordHlwZWRlZiBVSW50MzIgQXVkaW9Vbml0U2NvcGU7Cit0eXBlZGVmIFVJbnQzMiBBdWRpb1Vu
aXRFbGVtZW50OwordHlwZWRlZiBVSW50MzIgQXVkaW9Vbml0UmVuZGVyQWN0aW9uRmxhZ3M7CisK
K3N0cnVjdCBBdWRpb0J1ZmZlckxpc3Q7CitzdHJ1Y3QgQXVkaW9UaW1lU3RhbXA7CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ29yZUF1ZGlvU3BlYWtlclNhbXBsZXNQcm9kdWNlcjsK
KworY2xhc3MgQ29yZUF1ZGlvU2hhcmVkVW5pdCBmaW5hbCA6IHB1YmxpYyBCYXNlQXVkaW9TaGFy
ZWRVbml0IHsKK3B1YmxpYzoKKyAgICBjbGFzcyBJbnRlcm5hbFVuaXQgeworICAgIHB1YmxpYzoK
KyAgICAgICAgdmlydHVhbCB+SW50ZXJuYWxVbml0KCkgPSBkZWZhdWx0OworICAgICAgICB2aXJ0
dWFsIE9TU3RhdHVzIGluaXRpYWxpemUoKSA9IDA7CisgICAgICAgIHZpcnR1YWwgT1NTdGF0dXMg
dW5pbml0aWFsaXplKCkgPSAwOworICAgICAgICB2aXJ0dWFsIE9TU3RhdHVzIHN0YXJ0KCkgPSAw
OworICAgICAgICB2aXJ0dWFsIE9TU3RhdHVzIHN0b3AoKSA9IDA7CisgICAgICAgIHZpcnR1YWwg
T1NTdGF0dXMgc2V0KEF1ZGlvVW5pdFByb3BlcnR5SUQsIEF1ZGlvVW5pdFNjb3BlLCBBdWRpb1Vu
aXRFbGVtZW50LCBjb25zdCB2b2lkKiwgVUludDMyKSA9IDA7CisgICAgICAgIHZpcnR1YWwgT1NT
dGF0dXMgZ2V0KEF1ZGlvVW5pdFByb3BlcnR5SUQsIEF1ZGlvVW5pdFNjb3BlLCBBdWRpb1VuaXRF
bGVtZW50LCB2b2lkKiwgVUludDMyKikgPSAwOworICAgICAgICB2aXJ0dWFsIE9TU3RhdHVzIHJl
bmRlcihBdWRpb1VuaXRSZW5kZXJBY3Rpb25GbGFncyosIGNvbnN0IEF1ZGlvVGltZVN0YW1wKiwg
VUludDMyLCBVSW50MzIsIEF1ZGlvQnVmZmVyTGlzdCopID0gMDsKKyAgICAgICAgdmlydHVhbCBP
U1N0YXR1cyBkZWZhdWx0SW5wdXREZXZpY2UodWludDMyX3QqKSA9IDA7CisgICAgICAgIHZpcnR1
YWwgT1NTdGF0dXMgZGVmYXVsdE91dHB1dERldmljZSh1aW50MzJfdCopID0gMDsKKyAgICAgICAg
dmlydHVhbCB2b2lkIGRlbGF5U2FtcGxlcyhTZWNvbmRzKSB7IH0KKyAgICB9OworCisgICAgc3Rh
dGljIENvcmVBdWRpb1NoYXJlZFVuaXQmIHVuaXQoKTsKKyAgICBzdGF0aWMgQmFzZUF1ZGlvU2hh
cmVkVW5pdCYgc2luZ2xldG9uKCkgIHsgcmV0dXJuIHVuaXQoKTsgfQorICAgIENvcmVBdWRpb1No
YXJlZFVuaXQoKTsKKworICAgIHVzaW5nIENyZWF0aW9uQ2FsbGJhY2sgPSBGdW5jdGlvbjxFeHBl
Y3RlZDxVbmlxdWVSZWY8SW50ZXJuYWxVbml0PiwgT1NTdGF0dXM+KCk+OworICAgIHZvaWQgc2V0
SW50ZXJuYWxVbml0Q3JlYXRpb25DYWxsYmFjayhDcmVhdGlvbkNhbGxiYWNrJiYgY2FsbGJhY2sp
IHsgbV9jcmVhdGlvbkNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayk7IH0KKyAgICB1c2luZyBH
ZXRTYW1wbGVSYXRlQ2FsbGJhY2sgPSBGdW5jdGlvbjxpbnQoKT47CisgICAgdm9pZCBzZXRJbnRl
cm5hbFVuaXRHZXRTYW1wbGVSYXRlQ2FsbGJhY2soR2V0U2FtcGxlUmF0ZUNhbGxiYWNrJiYgY2Fs
bGJhY2spIHsgbV9nZXRTYW1wbGVSYXRlQ2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKTsgfQor
CisgICAgdm9pZCByZWdpc3RlclNwZWFrZXJTYW1wbGVzUHJvZHVjZXIoQ29yZUF1ZGlvU3BlYWtl
clNhbXBsZXNQcm9kdWNlciYpOworICAgIHZvaWQgdW5yZWdpc3RlclNwZWFrZXJTYW1wbGVzUHJv
ZHVjZXIoQ29yZUF1ZGlvU3BlYWtlclNhbXBsZXNQcm9kdWNlciYpOworICAgIGJvb2wgaXNSdW5u
aW5nKCkgY29uc3QgeyByZXR1cm4gbV9pb1VuaXRTdGFydGVkOyB9CisgICAgdm9pZCBzZXRTYW1w
bGVSYXRlUmFuZ2UoQ2FwYWJpbGl0eVZhbHVlT3JSYW5nZSByYW5nZSkgeyBtX3NhbXBsZVJhdGVD
YXBhYmlsaXRpZXMgPSByYW5nZTsgfQorCitwcml2YXRlOgorICAgIHN0YXRpYyBzaXplX3QgcHJl
ZmVycmVkSU9CdWZmZXJTaXplKCk7CisKKyAgICBDYXBhYmlsaXR5VmFsdWVPclJhbmdlIHNhbXBs
ZVJhdGVDYXBhY2l0aWVzKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9zYW1wbGVSYXRlQ2FwYWJp
bGl0aWVzOyB9CisgICAgY29uc3QgQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uJiBtaWNyb3Bob25l
Rm9ybWF0KCkgY29uc3QgeyByZXR1cm4gbV9taWNyb3Bob25lUHJvY0Zvcm1hdDsgfQorCisgICAg
Ym9vbCBoYXNBdWRpb1VuaXQoKSBjb25zdCBmaW5hbCB7IHJldHVybiAhIW1faW9Vbml0OyB9Cisg
ICAgdm9pZCBjYXB0dXJlRGV2aWNlQ2hhbmdlZCgpIGZpbmFsOworICAgIE9TU3RhdHVzIHJlY29u
ZmlndXJlQXVkaW9Vbml0KCkgZmluYWw7CisgICAgdm9pZCBkZWxheVNhbXBsZXMoU2Vjb25kcykg
ZmluYWw7CisKKyAgICBPU1N0YXR1cyBzZXR1cEF1ZGlvVW5pdCgpOworICAgIHZvaWQgY2xlYW51
cEF1ZGlvVW5pdCgpIGZpbmFsOworCisgICAgT1NTdGF0dXMgc3RhcnRJbnRlcm5hbCgpIGZpbmFs
OworICAgIHZvaWQgc3RvcEludGVybmFsKCkgZmluYWw7CisgICAgYm9vbCBpc1Byb2R1Y2luZ0Rh
dGEoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2lvVW5pdFN0YXJ0ZWQ7IH0KKyAgICB2b2lkIGlz
UHJvZHVjaW5nTWljcm9waG9uZVNhbXBsZXNDaGFuZ2VkKCkgZmluYWw7CisgICAgdm9pZCB2YWxp
ZGF0ZU91dHB1dERldmljZSh1aW50MzJfdCBkZXZpY2VJRCkgZmluYWw7CisgICAgaW50IGFjdHVh
bFNhbXBsZVJhdGUoKSBjb25zdCBmaW5hbDsKKyAgICB2b2lkIHJlc2V0U2FtcGxlUmF0ZSgpOwor
CisgICAgT1NTdGF0dXMgY29uZmlndXJlU3BlYWtlclByb2MoaW50IHNhbXBsZVJhdGUpOworICAg
IE9TU3RhdHVzIGNvbmZpZ3VyZU1pY3JvcGhvbmVQcm9jKGludCBzYW1wbGVSYXRlKTsKKworICAg
IHN0YXRpYyBPU1N0YXR1cyBtaWNyb3Bob25lQ2FsbGJhY2sodm9pZCosIEF1ZGlvVW5pdFJlbmRl
ckFjdGlvbkZsYWdzKiwgY29uc3QgQXVkaW9UaW1lU3RhbXAqLCBVSW50MzIsIFVJbnQzMiwgQXVk
aW9CdWZmZXJMaXN0Kik7CisgICAgT1NTdGF0dXMgcHJvY2Vzc01pY3JvcGhvbmVTYW1wbGVzKEF1
ZGlvVW5pdFJlbmRlckFjdGlvbkZsYWdzJiwgY29uc3QgQXVkaW9UaW1lU3RhbXAmLCBVSW50MzIs
IFVJbnQzMiwgQXVkaW9CdWZmZXJMaXN0Kik7CisKKyAgICBzdGF0aWMgT1NTdGF0dXMgc3BlYWtl
ckNhbGxiYWNrKHZvaWQqLCBBdWRpb1VuaXRSZW5kZXJBY3Rpb25GbGFncyosIGNvbnN0IEF1ZGlv
VGltZVN0YW1wKiwgVUludDMyLCBVSW50MzIsIEF1ZGlvQnVmZmVyTGlzdCopOworICAgIE9TU3Rh
dHVzIHByb3ZpZGVTcGVha2VyRGF0YShBdWRpb1VuaXRSZW5kZXJBY3Rpb25GbGFncyYsIGNvbnN0
IEF1ZGlvVGltZVN0YW1wJiwgVUludDMyLCBVSW50MzIsIEF1ZGlvQnVmZmVyTGlzdCYpOworCisg
ICAgdm9pZCB1bmR1Y2soKTsKKworICAgIHZvaWQgdmVyaWZ5SXNDYXB0dXJpbmcoKTsKKworICAg
IFNlY29uZHMgdmVyaWZ5Q2FwdHVyZUludGVydmFsKCkgeyByZXR1cm4gaXNQcm9kdWNpbmdNaWNy
b3Bob25lU2FtcGxlcygpID8gMTBfcyA6IDJfczsgfQorCisgICAgQ3JlYXRpb25DYWxsYmFjayBt
X2NyZWF0aW9uQ2FsbGJhY2s7CisgICAgR2V0U2FtcGxlUmF0ZUNhbGxiYWNrIG1fZ2V0U2FtcGxl
UmF0ZUNhbGxiYWNrOworICAgIHN0ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbFVuaXQ+IG1faW9Vbml0
OworCisgICAgLy8gT25seSByZWFkL21vZGlmaWVkIGZyb20gdGhlIElPIHRocmVhZC4KKyAgICBW
ZWN0b3I8UmVmPEF1ZGlvU2FtcGxlRGF0YVNvdXJjZT4+IG1fYWN0aXZlU291cmNlczsKKworICAg
IENBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbiBtX21pY3JvcGhvbmVQcm9jRm9ybWF0OworICAgIFJl
ZlB0cjxBdWRpb1NhbXBsZUJ1ZmZlckxpc3Q+IG1fbWljcm9waG9uZVNhbXBsZUJ1ZmZlcjsKKyAg
ICB1aW50NjRfdCBtX2xhdGVzdE1pY1RpbWVTdGFtcCB7IDAgfTsKKworICAgIENBQXVkaW9TdHJl
YW1EZXNjcmlwdGlvbiBtX3NwZWFrZXJQcm9jRm9ybWF0OworCisgICAgZG91YmxlIG1fRFRTQ29u
dmVyc2lvblJhdGlvIHsgMCB9OworCisgICAgYm9vbCBtX2lvVW5pdEluaXRpYWxpemVkIHsgZmFs
c2UgfTsKKyAgICBib29sIG1faW9Vbml0U3RhcnRlZCB7IGZhbHNlIH07CisKKyAgICBtdXRhYmxl
IHN0ZDo6dW5pcXVlX3B0cjxSZWFsdGltZU1lZGlhU291cmNlQ2FwYWJpbGl0aWVzPiBtX2NhcGFi
aWxpdGllczsKKyAgICBtdXRhYmxlIHN0ZDo6b3B0aW9uYWw8UmVhbHRpbWVNZWRpYVNvdXJjZVNl
dHRpbmdzPiBtX2N1cnJlbnRTZXR0aW5nczsKKworI2lmICFMT0dfRElTQUJMRUQKKyAgICB2b2lk
IGNoZWNrVGltZXN0YW1wcyhjb25zdCBBdWRpb1RpbWVTdGFtcCYsIHVpbnQ2NF90LCBkb3VibGUp
OworCisgICAgU3RyaW5nIG1faW9Vbml0TmFtZTsKKyNlbmRpZgorCisgICAgQ2FwYWJpbGl0eVZh
bHVlT3JSYW5nZSBtX3NhbXBsZVJhdGVDYXBhYmlsaXRpZXM7CisKKyAgICB1aW50NjRfdCBtX21p
Y3JvcGhvbmVQcm9jc0NhbGxlZCB7IDAgfTsKKyAgICB1aW50NjRfdCBtX21pY3JvcGhvbmVQcm9j
c0NhbGxlZExhc3RUaW1lIHsgMCB9OworICAgIFRpbWVyIG1fdmVyaWZ5Q2FwdHVyaW5nVGltZXI7
CisKKyAgICBib29sIG1faXNSZWNvbmZpZ3VyaW5nIHsgZmFsc2UgfTsKKyAgICBtdXRhYmxlIExv
Y2sgbV9zcGVha2VyU2FtcGxlc1Byb2R1Y2VyTG9jazsKKyAgICBDb3JlQXVkaW9TcGVha2VyU2Ft
cGxlc1Byb2R1Y2VyKiBtX3NwZWFrZXJTYW1wbGVzUHJvZHVjZXIgV1RGX0dVQVJERURfQllfTE9D
SyhtX3NwZWFrZXJTYW1wbGVzUHJvZHVjZXJMb2NrKSB7IG51bGxwdHIgfTsKK307CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0pCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvTW9ja0F1ZGlv
U2hhcmVkVW5pdC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL01v
Y2tBdWRpb1NoYXJlZFVuaXQuaAppbmRleCAxYTg5NmFiNzM4NTI4NTRiYTc3N2JjNGQxNjZmOWNh
MmU1ZGEyYWY4Li45OWE5ZGZkZmRlMzdiMWMxYWFjMWQ4N2RjZmZlMDBhMzBkOWE4Y2JmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvTW9ja0F1ZGlv
U2hhcmVkVW5pdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21h
Yy9Nb2NrQXVkaW9TaGFyZWRVbml0LmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDE2LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE2LTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNyw3MiArMjcsMTUgQEAKIAogI2lmIEVOQUJM
RShNRURJQV9TVFJFQU0pCiAKLSNpbmNsdWRlICJCYXNlQXVkaW9TaGFyZWRVbml0LmgiCi0jaW5j
bHVkZSA8Q29yZUF1ZGlvL0NvcmVBdWRpb1R5cGVzLmg+Ci0jaW5jbHVkZSA8d3RmL1J1bkxvb3Au
aD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0jaW5jbHVkZSA8d3RmL1dvcmtRdWV1ZS5oPgot
Ci1PQkpDX0NMQVNTIEFWQXVkaW9QQ01CdWZmZXI7Ci10eXBlZGVmIHN0cnVjdCBPcGFxdWVDTUNs
b2NrKiBDTUNsb2NrUmVmOwotdHlwZWRlZiBjb25zdCBzdHJ1Y3Qgb3BhcXVlQ01Gb3JtYXREZXNj
cmlwdGlvbiogQ01Gb3JtYXREZXNjcmlwdGlvblJlZjsKKyNpbmNsdWRlICJDb3JlQXVkaW9TaGFy
ZWRVbml0LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgV2ViQXVkaW9CdWZmZXJM
aXN0OwotY2xhc3MgV2ViQXVkaW9Tb3VyY2VQcm92aWRlckNvY29hOwotCi1jbGFzcyBNb2NrQXVk
aW9TaGFyZWRVbml0IGZpbmFsIDogcHVibGljIEJhc2VBdWRpb1NoYXJlZFVuaXQgewotcHVibGlj
OgotICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBNb2NrQXVkaW9TaGFyZWRVbml0JiBzaW5nbGV0
b24oKTsKLSAgICBNb2NrQXVkaW9TaGFyZWRVbml0KCk7Ci0KLSAgICB2b2lkIHNldERldmljZUlE
KGNvbnN0IFN0cmluZyYgZGV2aWNlSUQpIHsgc2V0Q2FwdHVyZURldmljZShTdHJpbmcgeyBkZXZp
Y2VJRCB9LCAwKTsgfQotCi1wcml2YXRlOgotICAgIGJvb2wgaGFzQXVkaW9Vbml0KCkgY29uc3Qg
ZmluYWw7Ci0gICAgdm9pZCBjYXB0dXJlRGV2aWNlQ2hhbmdlZCgpIGZpbmFsOwotICAgIE9TU3Rh
dHVzIHJlY29uZmlndXJlQXVkaW9Vbml0KCkgZmluYWw7Ci0gICAgdm9pZCByZXNldFNhbXBsZVJh
dGUoKSBmaW5hbDsKLQotICAgIHZvaWQgY2xlYW51cEF1ZGlvVW5pdCgpIGZpbmFsOwotICAgIE9T
U3RhdHVzIHN0YXJ0SW50ZXJuYWwoKSBmaW5hbDsKLSAgICB2b2lkIHN0b3BJbnRlcm5hbCgpIGZp
bmFsOwotICAgIGJvb2wgaXNQcm9kdWNpbmdEYXRhKCkgY29uc3QgZmluYWw7Ci0KLSAgICB2b2lk
IGRlbGF5U2FtcGxlcyhTZWNvbmRzKSBmaW5hbDsKLQotICAgIHZvaWQgc3RhcnQoKTsKLSAgICBD
YXBhYmlsaXR5VmFsdWVPclJhbmdlIHNhbXBsZVJhdGVDYXBhY2l0aWVzKCkgY29uc3QgZmluYWwg
eyByZXR1cm4gQ2FwYWJpbGl0eVZhbHVlT3JSYW5nZSg0NDEwMCwgNDgwMDApOyB9Ci0KLSAgICB2
b2lkIHRpY2soKTsKLQotICAgIHZvaWQgcmVuZGVyKE1vbm90b25pY1RpbWUpOwotICAgIHZvaWQg
ZW1pdFNhbXBsZUJ1ZmZlcnModWludDMyX3QgZnJhbWVDb3VudCk7Ci0gICAgdm9pZCByZWNvbmZp
Z3VyZSgpOwotCi0gICAgc3RhdGljIFNlY29uZHMgcmVuZGVySW50ZXJ2YWwoKSB7IHJldHVybiAy
MF9tczsgfQotCi0gICAgc3RkOjp1bmlxdWVfcHRyPFdlYkF1ZGlvQnVmZmVyTGlzdD4gbV9hdWRp
b0J1ZmZlckxpc3Q7Ci0KLSAgICB1aW50MzJfdCBtX21heGltaXVtRnJhbWVDb3VudDsKLSAgICB1
aW50NjRfdCBtX3NhbXBsZXNFbWl0dGVkIHsgMCB9OwotICAgIHVpbnQ2NF90IG1fc2FtcGxlc1Jl
bmRlcmVkIHsgMCB9OwotCi0gICAgUmV0YWluUHRyPENNRm9ybWF0RGVzY3JpcHRpb25SZWY+IG1f
Zm9ybWF0RGVzY3JpcHRpb247Ci0gICAgQXVkaW9TdHJlYW1CYXNpY0Rlc2NyaXB0aW9uIG1fc3Ry
ZWFtRm9ybWF0OwotCi0gICAgVmVjdG9yPGZsb2F0PiBtX2JpcEJvcEJ1ZmZlcjsKLSAgICBib29s
IG1faGFzQXVkaW9Vbml0IHsgZmFsc2UgfTsKLSAgICBib29sIG1faXNQcm9kdWNpbmdEYXRhIHsg
ZmFsc2UgfTsKK25hbWVzcGFjZSBNb2NrQXVkaW9TaGFyZWRVbml0IHsKIAotICAgIFJ1bkxvb3A6
OlRpbWVyPE1vY2tBdWRpb1NoYXJlZFVuaXQ+IG1fdGltZXI7Ci0gICAgTW9ub3RvbmljVGltZSBt
X2xhc3RSZW5kZXJUaW1lIHsgTW9ub3RvbmljVGltZTo6bmFuKCkgfTsKLSAgICBNb25vdG9uaWNU
aW1lIG1fZGVsYXlVbnRpbDsKK0NvcmVBdWRpb1NoYXJlZFVuaXQmIHNpbmdsZXRvbigpOwogCi0g
ICAgUmVmPFdvcmtRdWV1ZT4gbV93b3JrUXVldWU7Ci0gICAgdW5zaWduZWQgbV9jaGFubmVsQ291
bnQgeyAyIH07Ci19OworfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9Nb2NrQXVkaW9TaGFyZWRV
bml0Lm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL01vY2tBdWRp
b1NoYXJlZFVuaXQubW0KaW5kZXggN2YxYWM4MzU5ODM2ZWVhZDgyMjUxN2YzYmEzZWU1NTAxZmNl
ZDc4ZS4uOGJkYjVkZTI0NmZiYjcyOGNlZTMyMmQ1OGQ3Yjc5ZTE5NWY2Njk3OSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL01vY2tBdWRpb1NoYXJl
ZFVuaXQubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL01v
Y2tBdWRpb1NoYXJlZFVuaXQubW0KQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDE2LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE2LTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00Myw2ICs0Myw5IEBACiAjaW1wb3J0IDxBVkZvdW5k
YXRpb24vQVZBdWRpb0J1ZmZlci5oPgogI2ltcG9ydCA8QXVkaW9Ub29sYm94L0F1ZGlvQ29udmVy
dGVyLmg+CiAjaW1wb3J0IDxDb3JlQXVkaW8vQ29yZUF1ZGlvVHlwZXMuaD4KKyNpbmNsdWRlIDx3
dGYvUnVuTG9vcC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvV29y
a1F1ZXVlLmg+CiAKICNpbXBvcnQgPHBhbC9jZi9BdWRpb1Rvb2xib3hTb2Z0TGluay5oPgogI2lt
cG9ydCA8cGFsL2NmL0NvcmVNZWRpYVNvZnRMaW5rLmg+CkBAIC05MCw2NyArOTMsMTExIEBAIENh
cHR1cmVTb3VyY2VPckVycm9yIE1vY2tSZWFsdGltZUF1ZGlvU291cmNlOjpjcmVhdGUoU3RyaW5n
JiYgZGV2aWNlSUQsIEF0b21TdHJpCiAgICAgaWYgKCFkZXZpY2UpCiAgICAgICAgIHJldHVybiB7
ICJObyBtb2NrIG1pY3JvcGhvbmUgZGV2aWNlIl9zIH07CiAKLSAgICBNb2NrQXVkaW9TaGFyZWRV
bml0OjpzaW5nbGV0b24oKS5zZXREZXZpY2VJRChkZXZpY2VJRCk7CisgICAgTW9ja0F1ZGlvU2hh
cmVkVW5pdDo6c2luZ2xldG9uKCkuc2V0Q2FwdHVyZURldmljZShTdHJpbmcgeyBkZXZpY2VJRCB9
LCAwKTsKICAgICByZXR1cm4gQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZTo6Y3JlYXRlRm9yVGVzdGlu
ZyhXVEZNb3ZlKGRldmljZUlEKSwgV1RGTW92ZShuYW1lKSwgV1RGTW92ZShoYXNoU2FsdCksIGNv
bnN0cmFpbnRzLCBNb2NrQXVkaW9TaGFyZWRVbml0OjpzaW5nbGV0b24oKSwgcGFnZUlkZW50aWZp
ZXIpOwogfQogCi1Nb2NrQXVkaW9TaGFyZWRVbml0JiBNb2NrQXVkaW9TaGFyZWRVbml0OjpzaW5n
bGV0b24oKQotewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxNb2NrQXVkaW9TaGFyZWRVbml0
PiBzaW5nbGV0b247Ci0gICAgcmV0dXJuIHNpbmdsZXRvbjsKLX0KLQotTW9ja0F1ZGlvU2hhcmVk
VW5pdDo6TW9ja0F1ZGlvU2hhcmVkVW5pdCgpCi0gICAgOiBtX3RpbWVyKFJ1bkxvb3A6OmN1cnJl
bnQoKSwgdGhpcywgJk1vY2tBdWRpb1NoYXJlZFVuaXQ6OnN0YXJ0KQotICAgICwgbV93b3JrUXVl
dWUoV29ya1F1ZXVlOjpjcmVhdGUoIk1vY2tBdWRpb1NoYXJlZFVuaXQgQ2FwdHVyZSBRdWV1ZSIs
IFdvcmtRdWV1ZTo6UU9TOjpVc2VySW50ZXJhY3RpdmUpKQorY2xhc3MgTW9ja0F1ZGlvU2hhcmVk
SW50ZXJuYWxVbml0IDogIHB1YmxpYyBDb3JlQXVkaW9TaGFyZWRVbml0OjpJbnRlcm5hbFVuaXQg
eworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIE1vY2tBdWRpb1No
YXJlZEludGVybmFsVW5pdCgpOworICAgIH5Nb2NrQXVkaW9TaGFyZWRJbnRlcm5hbFVuaXQoKTsK
KworcHJpdmF0ZToKKyAgICBPU1N0YXR1cyBpbml0aWFsaXplKCkgZmluYWw7CisgICAgT1NTdGF0
dXMgdW5pbml0aWFsaXplKCkgZmluYWwgeyByZXR1cm4gMDsgfQorICAgIE9TU3RhdHVzIHN0YXJ0
KCkgZmluYWw7CisgICAgT1NTdGF0dXMgc3RvcCgpIGZpbmFsOworICAgIE9TU3RhdHVzIHNldChB
dWRpb1VuaXRQcm9wZXJ0eUlELCBBdWRpb1VuaXRTY29wZSwgQXVkaW9Vbml0RWxlbWVudCwgY29u
c3Qgdm9pZCosIFVJbnQzMikgZmluYWw7CisgICAgT1NTdGF0dXMgZ2V0KEF1ZGlvVW5pdFByb3Bl
cnR5SUQsIEF1ZGlvVW5pdFNjb3BlLCBBdWRpb1VuaXRFbGVtZW50LCB2b2lkKiwgVUludDMyKikg
ZmluYWw7CisgICAgT1NTdGF0dXMgcmVuZGVyKEF1ZGlvVW5pdFJlbmRlckFjdGlvbkZsYWdzKiwg
Y29uc3QgQXVkaW9UaW1lU3RhbXAqLCBVSW50MzIsIFVJbnQzMiwgQXVkaW9CdWZmZXJMaXN0Kikg
ZmluYWw7CisgICAgT1NTdGF0dXMgZGVmYXVsdElucHV0RGV2aWNlKHVpbnQzMl90KikgZmluYWw7
CisgICAgT1NTdGF0dXMgZGVmYXVsdE91dHB1dERldmljZSh1aW50MzJfdCopIGZpbmFsOworICAg
IHZvaWQgZGVsYXlTYW1wbGVzKFNlY29uZHMpIGZpbmFsOworCisgICAgaW50IHNhbXBsZVJhdGUo
KSBjb25zdCB7IHJldHVybiBtX3N0cmVhbUZvcm1hdC5tU2FtcGxlUmF0ZTsgfQorICAgIHZvaWQg
dGljaygpOworCisgICAgdm9pZCBnZW5lcmF0ZVNhbXBsZUJ1ZmZlcnMoTW9ub3RvbmljVGltZSk7
CisgICAgdm9pZCBlbWl0U2FtcGxlQnVmZmVycyh1aW50MzJfdCBmcmFtZUNvdW50KTsKKyAgICB2
b2lkIHJlY29uZmlndXJlKCk7CisKKyAgICBzdGF0aWMgU2Vjb25kcyByZW5kZXJJbnRlcnZhbCgp
IHsgcmV0dXJuIDIwX21zOyB9CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQXVkaW9CdWZmZXJM
aXN0PiBtX2F1ZGlvQnVmZmVyTGlzdDsKKworICAgIHVpbnQzMl90IG1fbWF4aW1pdW1GcmFtZUNv
dW50OworICAgIHVpbnQ2NF90IG1fc2FtcGxlc0VtaXR0ZWQgeyAwIH07CisgICAgdWludDY0X3Qg
bV9zYW1wbGVzUmVuZGVyZWQgeyAwIH07CisKKyAgICBSZXRhaW5QdHI8Q01Gb3JtYXREZXNjcmlw
dGlvblJlZj4gbV9mb3JtYXREZXNjcmlwdGlvbjsKKyAgICBBdWRpb1N0cmVhbUJhc2ljRGVzY3Jp
cHRpb24gbV9vdXRwdXRTdHJlYW1Gb3JtYXQ7CisgICAgQXVkaW9TdHJlYW1CYXNpY0Rlc2NyaXB0
aW9uIG1fc3RyZWFtRm9ybWF0OworCisgICAgVmVjdG9yPGZsb2F0PiBtX2JpcEJvcEJ1ZmZlcjsK
KyAgICBib29sIG1faGFzQXVkaW9Vbml0IHsgZmFsc2UgfTsKKyAgICBib29sIG1faXNQcm9kdWNp
bmdEYXRhIHsgZmFsc2UgfTsKKyAgICBib29sIG1fZW5hYmxlRWNob0NhbmNlbGxhdGlvbiB7IHRy
dWUgfTsKKyAgICBSdW5Mb29wOjpUaW1lcjxNb2NrQXVkaW9TaGFyZWRJbnRlcm5hbFVuaXQ+IG1f
dGltZXI7CisgICAgTW9ub3RvbmljVGltZSBtX2xhc3RSZW5kZXJUaW1lIHsgTW9ub3RvbmljVGlt
ZTo6bmFuKCkgfTsKKyAgICBNb25vdG9uaWNUaW1lIG1fZGVsYXlVbnRpbDsKKworICAgIFJlZjxX
b3JrUXVldWU+IG1fd29ya1F1ZXVlOworICAgIHVuc2lnbmVkIG1fY2hhbm5lbENvdW50IHsgMiB9
OworICAgIAorICAgIEFVUmVuZGVyQ2FsbGJhY2tTdHJ1Y3QgbV9taWNyb3Bob25lQ2FsbGJhY2s7
CisgICAgQVVSZW5kZXJDYWxsYmFja1N0cnVjdCBtX3NwZWFrZXJDYWxsYmFjazsKK307CisKK0Nv
cmVBdWRpb1NoYXJlZFVuaXQmIE1vY2tBdWRpb1NoYXJlZFVuaXQ6OnNpbmdsZXRvbigpCiB7Cisg
ICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPENvcmVBdWRpb1NoYXJlZFVuaXQ+IHVuaXQ7CisgICAg
c3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2VGbGFnOworICAgIHN0ZDo6Y2FsbF9vbmNlKG9uY2VG
bGFnLCBbJl0gKCkgeworICAgICAgICB1bml0LT5zZXRTYW1wbGVSYXRlUmFuZ2UoQ2FwYWJpbGl0
eVZhbHVlT3JSYW5nZSg0NDEwMCwgNDgwMDApKTsKKyAgICAgICAgdW5pdC0+c2V0SW50ZXJuYWxV
bml0Q3JlYXRpb25DYWxsYmFjayhbXSB7CisgICAgICAgICAgICBVbmlxdWVSZWY8Q29yZUF1ZGlv
U2hhcmVkVW5pdDo6SW50ZXJuYWxVbml0PiByZXN1bHQgPSBtYWtlVW5pcXVlUmVmPE1vY2tBdWRp
b1NoYXJlZEludGVybmFsVW5pdD4oKTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAg
ICAgIH0pOworICAgICAgICB1bml0LT5zZXRJbnRlcm5hbFVuaXRHZXRTYW1wbGVSYXRlQ2FsbGJh
Y2soW10geyByZXR1cm4gNDQxMDA7IH0pOworICAgIH0pOworICAgIHJldHVybiB1bml0OwogfQog
Ci12b2lkIE1vY2tBdWRpb1NoYXJlZFVuaXQ6OnJlc2V0U2FtcGxlUmF0ZSgpCitzdGF0aWMgQXVk
aW9TdHJlYW1CYXNpY0Rlc2NyaXB0aW9uIGNyZWF0ZUF1ZGlvRm9ybWF0KEZsb2F0NjQgc2FtcGxl
UmF0ZSwgVUludDMyIGNoYW5uZWxDb3VudCkKIHsKLSAgICBpZiAoYXV0byBkZXZpY2UgPSBNb2Nr
UmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlcjo6bW9ja0RldmljZVdpdGhQZXJzaXN0ZW50SUQocGVy
c2lzdGVudElEKCkpKQotICAgICAgICBzZXRTYW1wbGVSYXRlKHN0ZDo6Z2V0PE1vY2tNaWNyb3Bo
b25lUHJvcGVydGllcz4oZGV2aWNlLT5wcm9wZXJ0aWVzKS5kZWZhdWx0U2FtcGxlUmF0ZSk7Cisg
ICAgQXVkaW9TdHJlYW1CYXNpY0Rlc2NyaXB0aW9uIGZvcm1hdDsKKyAgICBjb25zdCBpbnQgYnl0
ZXNQZXJGbG9hdCA9IHNpemVvZihGbG9hdDMyKTsKKyAgICBjb25zdCBpbnQgYml0c1BlckJ5dGUg
PSA4OworICAgIGNvbnN0IGJvb2wgaXNGbG9hdCA9IHRydWU7CisgICAgY29uc3QgYm9vbCBpc0Jp
Z0VuZGlhbiA9IGZhbHNlOworICAgIGNvbnN0IGJvb2wgaXNOb25JbnRlcmxlYXZlZCA9IHRydWU7
CisgICAgRmlsbE91dEFTQkRGb3JMUENNKGZvcm1hdCwgc2FtcGxlUmF0ZSwgY2hhbm5lbENvdW50
LCBiaXRzUGVyQnl0ZSAqIGJ5dGVzUGVyRmxvYXQsIGJpdHNQZXJCeXRlICogYnl0ZXNQZXJGbG9h
dCwgaXNGbG9hdCwgaXNCaWdFbmRpYW4sIGlzTm9uSW50ZXJsZWF2ZWQpOworICAgIHJldHVybiBm
b3JtYXQ7CiB9CiAKLWJvb2wgTW9ja0F1ZGlvU2hhcmVkVW5pdDo6aGFzQXVkaW9Vbml0KCkgY29u
c3QKK01vY2tBdWRpb1NoYXJlZEludGVybmFsVW5pdDo6TW9ja0F1ZGlvU2hhcmVkSW50ZXJuYWxV
bml0KCkKKyAgICA6IG1fdGltZXIoUnVuTG9vcDo6Y3VycmVudCgpLCBbdGhpc10geyB0aGlzLT5z
dGFydCgpOyB9KQorICAgICwgbV93b3JrUXVldWUoV29ya1F1ZXVlOjpjcmVhdGUoIk1vY2tBdWRp
b1NoYXJlZEludGVybmFsVW5pdCBDYXB0dXJlIFF1ZXVlIiwgV29ya1F1ZXVlOjpRT1M6OlVzZXJJ
bnRlcmFjdGl2ZSkpCiB7Ci0gICAgcmV0dXJuIG1faGFzQXVkaW9Vbml0OworICAgIG1fc3RyZWFt
Rm9ybWF0ID0gbV9vdXRwdXRTdHJlYW1Gb3JtYXQgPSBjcmVhdGVBdWRpb0Zvcm1hdCg0NDEwMCwg
Mik7CiB9CiAKLXZvaWQgTW9ja0F1ZGlvU2hhcmVkVW5pdDo6Y2FwdHVyZURldmljZUNoYW5nZWQo
KQorTW9ja0F1ZGlvU2hhcmVkSW50ZXJuYWxVbml0Ojp+TW9ja0F1ZGlvU2hhcmVkSW50ZXJuYWxV
bml0KCkKIHsKLSAgICByZWNvbmZpZ3VyZUF1ZGlvVW5pdCgpOworICAgIEFTU0VSVCghbV9pc1By
b2R1Y2luZ0RhdGEpOwogfQogCi1PU1N0YXR1cyBNb2NrQXVkaW9TaGFyZWRVbml0OjpyZWNvbmZp
Z3VyZUF1ZGlvVW5pdCgpCitPU1N0YXR1cyBNb2NrQXVkaW9TaGFyZWRJbnRlcm5hbFVuaXQ6Omlu
aXRpYWxpemUoKQogewotICAgIGlmICghaGFzQXVkaW9Vbml0KCkpCi0gICAgICAgIHJldHVybiAw
OworICAgIEFTU0VSVChtX291dHB1dFN0cmVhbUZvcm1hdC5tU2FtcGxlUmF0ZSA9PSBtX3N0cmVh
bUZvcm1hdC5tU2FtcGxlUmF0ZSk7CisgICAgaWYgKG1fb3V0cHV0U3RyZWFtRm9ybWF0Lm1TYW1w
bGVSYXRlICE9IG1fc3RyZWFtRm9ybWF0Lm1TYW1wbGVSYXRlKQorICAgICAgICByZXR1cm4gLTE7
CiAKLSAgICBtX2xhc3RSZW5kZXJUaW1lID0gTW9ub3RvbmljVGltZTo6bmFuKCk7Ci0gICAgbV93
b3JrUXVldWUtPmRpc3BhdGNoKFt0aGlzXSB7Ci0gICAgICAgIHJlY29uZmlndXJlKCk7Ci0gICAg
ICAgIGNhbGxPbk1haW5UaHJlYWQoW3RoaXNdIHsKLSAgICAgICAgICAgIHN0YXJ0SW50ZXJuYWwo
KTsKLSAgICAgICAgfSk7Ci0gICAgfSk7CiAgICAgcmV0dXJuIDA7CiB9CiAKLXZvaWQgTW9ja0F1
ZGlvU2hhcmVkVW5pdDo6Y2xlYW51cEF1ZGlvVW5pdCgpCi17Ci0gICAgbV9oYXNBdWRpb1VuaXQg
PSBmYWxzZTsKLSAgICBtX2lzUHJvZHVjaW5nRGF0YSA9IGZhbHNlOwotICAgIG1fbGFzdFJlbmRl
clRpbWUgPSBNb25vdG9uaWNUaW1lOjpuYW4oKTsKLX0KLQotT1NTdGF0dXMgTW9ja0F1ZGlvU2hh
cmVkVW5pdDo6c3RhcnRJbnRlcm5hbCgpCi17Ci0gICAgc3RhcnQoKTsKLSAgICByZXR1cm4gMDsK
LX0KLQotdm9pZCBNb2NrQXVkaW9TaGFyZWRVbml0OjpzdGFydCgpCitPU1N0YXR1cyBNb2NrQXVk
aW9TaGFyZWRJbnRlcm5hbFVuaXQ6OnN0YXJ0KCkKIHsKICAgICBpZiAoIW1faGFzQXVkaW9Vbml0
KQogICAgICAgICBtX2hhc0F1ZGlvVW5pdCA9IHRydWU7CkBAIC0xNTgsMzAgKzIwNSwyOSBAQCB2
b2lkIE1vY2tBdWRpb1NoYXJlZFVuaXQ6OnN0YXJ0KCkKICAgICBtX2xhc3RSZW5kZXJUaW1lID0g
TW9ub3RvbmljVGltZTo6bm93KCk7CiAgICAgbV9pc1Byb2R1Y2luZ0RhdGEgPSB0cnVlOwogICAg
IG1fd29ya1F1ZXVlLT5kaXNwYXRjaChbdGhpcywgcmVuZGVyVGltZSA9IG1fbGFzdFJlbmRlclRp
bWVdIHsKLSAgICAgICAgcmVuZGVyKHJlbmRlclRpbWUpOworICAgICAgICBnZW5lcmF0ZVNhbXBs
ZUJ1ZmZlcnMocmVuZGVyVGltZSk7CiAgICAgfSk7CisgICAgcmV0dXJuIDA7CiB9CiAKLXZvaWQg
TW9ja0F1ZGlvU2hhcmVkVW5pdDo6c3RvcEludGVybmFsKCkKK09TU3RhdHVzIE1vY2tBdWRpb1No
YXJlZEludGVybmFsVW5pdDo6c3RvcCgpCiB7CiAgICAgbV9pc1Byb2R1Y2luZ0RhdGEgPSBmYWxz
ZTsKLSAgICBpZiAoIW1faGFzQXVkaW9Vbml0KQotICAgICAgICByZXR1cm47Ci0gICAgbV9sYXN0
UmVuZGVyVGltZSA9IE1vbm90b25pY1RpbWU6Om5hbigpOwotfQorICAgIGlmIChtX2hhc0F1ZGlv
VW5pdCkKKyAgICAgICAgbV9sYXN0UmVuZGVyVGltZSA9IE1vbm90b25pY1RpbWU6Om5hbigpOwog
Ci1ib29sIE1vY2tBdWRpb1NoYXJlZFVuaXQ6OmlzUHJvZHVjaW5nRGF0YSgpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIG1faXNQcm9kdWNpbmdEYXRhOworICAgIG1fd29ya1F1ZXVlLT5kaXNwYXRjaFN5
bmMoW10geyB9KTsKKworICAgIHJldHVybiAwOwogfQogCi12b2lkIE1vY2tBdWRpb1NoYXJlZFVu
aXQ6OmRlbGF5U2FtcGxlcyhTZWNvbmRzIGRlbHRhKQordm9pZCBNb2NrQXVkaW9TaGFyZWRJbnRl
cm5hbFVuaXQ6OmRlbGF5U2FtcGxlcyhTZWNvbmRzIGRlbHRhKQogewotICAgIHN0b3BJbnRlcm5h
bCgpOworICAgIHN0b3AoKTsKICAgICBtX3RpbWVyLnN0YXJ0T25lU2hvdChkZWx0YSk7CiB9CiAK
LXZvaWQgTW9ja0F1ZGlvU2hhcmVkVW5pdDo6cmVjb25maWd1cmUoKQordm9pZCBNb2NrQXVkaW9T
aGFyZWRJbnRlcm5hbFVuaXQ6OnJlY29uZmlndXJlKCkKIHsKICAgICBBU1NFUlQoIWlzTWFpblRo
cmVhZCgpKTsKIApAQCAtMTkxLDE0ICsyMzcsNiBAQCB2b2lkIE1vY2tBdWRpb1NoYXJlZFVuaXQ6
OnJlY29uZmlndXJlKCkKICAgICBtX21heGltaXVtRnJhbWVDb3VudCA9IFdURjo6cm91bmRVcFRv
UG93ZXJPZlR3byhyZW5kZXJJbnRlcnZhbCgpLnNlY29uZHMoKSAqIHJhdGUgKiAyKTsKICAgICBB
U1NFUlQobV9tYXhpbWl1bUZyYW1lQ291bnQpOwogCi0gICAgY29uc3QgaW50IGJ5dGVzUGVyRmxv
YXQgPSBzaXplb2YoRmxvYXQzMik7Ci0gICAgY29uc3QgaW50IGJpdHNQZXJCeXRlID0gODsKLSAg
ICBjb25zdCBpbnQgY2hhbm5lbENvdW50ID0gbV9jaGFubmVsQ291bnQ7Ci0gICAgY29uc3QgYm9v
bCBpc0Zsb2F0ID0gdHJ1ZTsKLSAgICBjb25zdCBib29sIGlzQmlnRW5kaWFuID0gZmFsc2U7Ci0g
ICAgY29uc3QgYm9vbCBpc05vbkludGVybGVhdmVkID0gdHJ1ZTsKLSAgICBGaWxsT3V0QVNCREZv
ckxQQ00obV9zdHJlYW1Gb3JtYXQsIHJhdGUsIGNoYW5uZWxDb3VudCwgYml0c1BlckJ5dGUgKiBi
eXRlc1BlckZsb2F0LCBiaXRzUGVyQnl0ZSAqIGJ5dGVzUGVyRmxvYXQsIGlzRmxvYXQsIGlzQmln
RW5kaWFuLCBpc05vbkludGVybGVhdmVkKTsKLQogICAgIG1fYXVkaW9CdWZmZXJMaXN0ID0gbWFr
ZVVuaXF1ZTxXZWJBdWRpb0J1ZmZlckxpc3Q+KG1fc3RyZWFtRm9ybWF0LCBtX21heGltaXVtRnJh
bWVDb3VudCk7CiAKICAgICBDTUZvcm1hdERlc2NyaXB0aW9uUmVmIGZvcm1hdERlc2NyaXB0aW9u
OwpAQCAtMjE1LDI1ICsyNTMsMzggQEAgdm9pZCBNb2NrQXVkaW9TaGFyZWRVbml0OjpyZWNvbmZp
Z3VyZSgpCiAKICAgICBhZGRIdW0oQmlwQm9wVm9sdW1lLCBCaXBGcmVxdWVuY3ksIHJhdGUsIDAs
IG1fYmlwQm9wQnVmZmVyLmRhdGEoKSArIGJpcFN0YXJ0LCBiaXBCb3BTYW1wbGVDb3VudCk7CiAg
ICAgYWRkSHVtKEJpcEJvcFZvbHVtZSwgQm9wRnJlcXVlbmN5LCByYXRlLCAwLCBtX2JpcEJvcEJ1
ZmZlci5kYXRhKCkgKyBib3BTdGFydCwgYmlwQm9wU2FtcGxlQ291bnQpOwotICAgIGlmICghZW5h
YmxlRWNob0NhbmNlbGxhdGlvbigpKQorICAgIGlmICghbV9lbmFibGVFY2hvQ2FuY2VsbGF0aW9u
KQogICAgICAgICBhZGRIdW0oTm9pc2VWb2x1bWUsIE5vaXNlRnJlcXVlbmN5LCByYXRlLCAwLCBt
X2JpcEJvcEJ1ZmZlci5kYXRhKCksIHNhbXBsZUNvdW50KTsKIH0KIAotdm9pZCBNb2NrQXVkaW9T
aGFyZWRVbml0OjplbWl0U2FtcGxlQnVmZmVycyh1aW50MzJfdCBmcmFtZUNvdW50KQordm9pZCBN
b2NrQXVkaW9TaGFyZWRJbnRlcm5hbFVuaXQ6OmVtaXRTYW1wbGVCdWZmZXJzKHVpbnQzMl90IGZy
YW1lQ291bnQpCiB7CiAgICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CiAgICAgQVNTRVJUKG1f
Zm9ybWF0RGVzY3JpcHRpb24pOwogCiAgICAgQ01UaW1lIHN0YXJ0VGltZSA9IFBBTDo6Q01UaW1l
TWFrZShtX3NhbXBsZXNFbWl0dGVkLCBzYW1wbGVSYXRlKCkpOworICAgIGF1dG8gc2FtcGxlVGlt
ZSA9IFBBTDo6dG9NZWRpYVRpbWUoc3RhcnRUaW1lKS50b0Zsb2F0KCk7CiAgICAgbV9zYW1wbGVz
RW1pdHRlZCArPSBmcmFtZUNvdW50OwogCi0gICAgYXVkaW9TYW1wbGVzQXZhaWxhYmxlKFBBTDo6
dG9NZWRpYVRpbWUoc3RhcnRUaW1lKSwgKm1fYXVkaW9CdWZmZXJMaXN0LCBDQUF1ZGlvU3RyZWFt
RGVzY3JpcHRpb24obV9zdHJlYW1Gb3JtYXQpLCBmcmFtZUNvdW50KTsKKyAgICBhdXRvKiBidWZm
ZXJMaXN0ID0gbV9hdWRpb0J1ZmZlckxpc3QtPmxpc3QoKTsKKyAgICBBdWRpb1VuaXRSZW5kZXJB
Y3Rpb25GbGFncyBpb0FjdGlvbkZsYWdzID0gMDsKKyAgICAKKyAgICBBdWRpb1RpbWVTdGFtcCB0
aW1lU3RhbXA7CisgICAgbWVtc2V0KCZ0aW1lU3RhbXAsIDAsIHNpemVvZihBdWRpb1RpbWVTdGFt
cCkpOworICAgIHRpbWVTdGFtcC5tU2FtcGxlVGltZSA9IHNhbXBsZVRpbWU7CisgICAgdGltZVN0
YW1wLm1Ib3N0VGltZSA9IHN0YXRpY19jYXN0PFVJbnQ2ND4oc2FtcGxlVGltZSk7CisgICAgaWYg
KG1fbWljcm9waG9uZUNhbGxiYWNrLmlucHV0UHJvYykKKyAgICAgICAgbV9taWNyb3Bob25lQ2Fs
bGJhY2suaW5wdXRQcm9jKG1fbWljcm9waG9uZUNhbGxiYWNrLmlucHV0UHJvY1JlZkNvbiwgJmlv
QWN0aW9uRmxhZ3MsICZ0aW1lU3RhbXAsIDEsIGZyYW1lQ291bnQsIGJ1ZmZlckxpc3QpOworCisg
ICAgaW9BY3Rpb25GbGFncyA9IDA7CisgICAgaWYgKG1fc3BlYWtlckNhbGxiYWNrLmlucHV0UHJv
YykKKyAgICAgICAgbV9zcGVha2VyQ2FsbGJhY2suaW5wdXRQcm9jKG1fc3BlYWtlckNhbGxiYWNr
LmlucHV0UHJvY1JlZkNvbiwgJmlvQWN0aW9uRmxhZ3MsICZ0aW1lU3RhbXAsIDEsIGZyYW1lQ291
bnQsIGJ1ZmZlckxpc3QpOwogfQogCi12b2lkIE1vY2tBdWRpb1NoYXJlZFVuaXQ6OnJlbmRlcihN
b25vdG9uaWNUaW1lIHJlbmRlclRpbWUpCit2b2lkIE1vY2tBdWRpb1NoYXJlZEludGVybmFsVW5p
dDo6Z2VuZXJhdGVTYW1wbGVCdWZmZXJzKE1vbm90b25pY1RpbWUgcmVuZGVyVGltZSkKIHsKICAg
ICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKLSAgICBpZiAoIWlzUHJvZHVjaW5nRGF0YSgpKQor
ICAgIGlmICghbV9pc1Byb2R1Y2luZ0RhdGEpCiAgICAgICAgIHJldHVybjsKIAogICAgIGF1dG8g
ZGVsdGEgPSByZW5kZXJJbnRlcnZhbCgpOwpAQCAtMjQ1LDcgKzI5Niw3IEBAIHZvaWQgTW9ja0F1
ZGlvU2hhcmVkVW5pdDo6cmVuZGVyKE1vbm90b25pY1RpbWUgcmVuZGVyVGltZSkKICAgICAgICAg
bmV4dFJlbmRlckRlbGF5ID0gMF9zOwogICAgIH0KICAgICBtX3dvcmtRdWV1ZS0+ZGlzcGF0Y2hB
ZnRlcihuZXh0UmVuZGVyRGVsYXksIFt0aGlzLCBuZXh0UmVuZGVyVGltZV0gewotICAgICAgICBy
ZW5kZXIobmV4dFJlbmRlclRpbWUpOworICAgICAgICBnZW5lcmF0ZVNhbXBsZUJ1ZmZlcnMobmV4
dFJlbmRlclRpbWUpOwogICAgIH0pOwogCiAgICAgaWYgKCFtX2F1ZGlvQnVmZmVyTGlzdCB8fCAh
bV9iaXBCb3BCdWZmZXIuc2l6ZSgpKQpAQCAtMjcwLDYgKzMyMSw4MCBAQCB2b2lkIE1vY2tBdWRp
b1NoYXJlZFVuaXQ6OnJlbmRlcihNb25vdG9uaWNUaW1lIHJlbmRlclRpbWUpCiAgICAgfQogfQog
CitPU1N0YXR1cyBNb2NrQXVkaW9TaGFyZWRJbnRlcm5hbFVuaXQ6OnJlbmRlcihBdWRpb1VuaXRS
ZW5kZXJBY3Rpb25GbGFncyosIGNvbnN0IEF1ZGlvVGltZVN0YW1wKiwgVUludDMyLCBVSW50MzIg
ZnJhbWVDb3VudCwgQXVkaW9CdWZmZXJMaXN0KiBidWZmZXIpCit7CisgICAgYXV0byogc291cmNl
QnVmZmVyID0gbV9hdWRpb0J1ZmZlckxpc3QtPmxpc3QoKTsKKyAgICBpZiAoYnVmZmVyLT5tTnVt
YmVyQnVmZmVycyA+IHNvdXJjZUJ1ZmZlci0+bU51bWJlckJ1ZmZlcnMpCisgICAgICAgIHJldHVy
biBrQXVkaW9fUGFyYW1FcnJvcjsKKworICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBidWZm
ZXItPm1OdW1iZXJCdWZmZXJzOyBpKyspIHsKKyAgICAgICAgYXV0byogc291cmNlID0gc3RhdGlj
X2Nhc3Q8dWludDhfdCo+KHNvdXJjZUJ1ZmZlci0+bUJ1ZmZlcnNbaV0ubURhdGEpOworICAgICAg
ICBhdXRvKiBkZXN0aW5hdGlvbiA9IHN0YXRpY19jYXN0PHVpbnQ4X3QqPihidWZmZXItPm1CdWZm
ZXJzW2ldLm1EYXRhKTsKKyAgICAgICAgbWVtY3B5KGRlc3RpbmF0aW9uLCBzb3VyY2UsIGZyYW1l
Q291bnQgKiBtX3N0cmVhbUZvcm1hdC5tQnl0ZXNQZXJQYWNrZXQpOworICAgIH0KKworICAgIHJl
dHVybiAwOworfQorCitPU1N0YXR1cyBNb2NrQXVkaW9TaGFyZWRJbnRlcm5hbFVuaXQ6OnNldChB
dWRpb1VuaXRQcm9wZXJ0eUlEIHByb3BlcnR5LCBBdWRpb1VuaXRTY29wZSBzY29wZSwgQXVkaW9V
bml0RWxlbWVudCwgY29uc3Qgdm9pZCogdmFsdWUsIFVJbnQzMikKK3sKKyAgICBpZiAocHJvcGVy
dHkgPT0ga0F1ZGlvVW5pdFByb3BlcnR5X1N0cmVhbUZvcm1hdCkgeworICAgICAgICBhdXRvJiB0
eXBlZFZhbHVlID0gKnN0YXRpY19jYXN0PGNvbnN0IEF1ZGlvU3RyZWFtQmFzaWNEZXNjcmlwdGlv
bio+KHZhbHVlKTsKKyAgICAgICAgaWYgKHNjb3BlID09IGtBdWRpb1VuaXRTY29wZV9JbnB1dCkK
KyAgICAgICAgICAgIG1fc3RyZWFtRm9ybWF0ID0gdHlwZWRWYWx1ZTsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgbV9vdXRwdXRTdHJlYW1Gb3JtYXQgPSB0eXBlZFZhbHVlOworICAgICAgICBy
ZXR1cm4gMDsKKyAgICB9CisgICAgaWYgKHByb3BlcnR5ID09IGtBVVZvaWNlSU9Qcm9wZXJ0eV9W
b2ljZVByb2Nlc3NpbmdFbmFibGVBR0MpIHsKKyAgICAgICAgbV9lbmFibGVFY2hvQ2FuY2VsbGF0
aW9uID0gISEqc3RhdGljX2Nhc3Q8Y29uc3QgdWludDMyX3QqPih2YWx1ZSk7CisgICAgICAgIHJl
dHVybiAwOworICAgIH0KKyAgICBpZiAocHJvcGVydHkgPT0ga0F1ZGlvT3V0cHV0VW5pdFByb3Bl
cnR5X1NldElucHV0Q2FsbGJhY2spIHsKKyAgICAgICAgbV9taWNyb3Bob25lQ2FsbGJhY2sgPSAq
c3RhdGljX2Nhc3Q8Y29uc3QgQVVSZW5kZXJDYWxsYmFja1N0cnVjdCo+KHZhbHVlKTsKKyAgICAg
ICAgcmV0dXJuIDA7CisgICAgfQorICAgIGlmIChwcm9wZXJ0eSA9PSBrQXVkaW9Vbml0UHJvcGVy
dHlfU2V0UmVuZGVyQ2FsbGJhY2spIHsKKyAgICAgICAgbV9zcGVha2VyQ2FsbGJhY2sgPSAqc3Rh
dGljX2Nhc3Q8Y29uc3QgQVVSZW5kZXJDYWxsYmFja1N0cnVjdCo+KHZhbHVlKTsKKyAgICAgICAg
cmV0dXJuIDA7CisgICAgfQorICAgIGlmIChwcm9wZXJ0eSA9PSBrQXVkaW9PdXRwdXRVbml0UHJv
cGVydHlfQ3VycmVudERldmljZSkgeworICAgICAgICBBU1NFUlQoISpzdGF0aWNfY2FzdDxjb25z
dCB1aW50MzJfdCo+KHZhbHVlKSk7CisgICAgICAgIGlmIChhdXRvIGRldmljZSA9IE1vY2tSZWFs
dGltZU1lZGlhU291cmNlQ2VudGVyOjptb2NrRGV2aWNlV2l0aFBlcnNpc3RlbnRJRChNb2NrQXVk
aW9TaGFyZWRVbml0OjpzaW5nbGV0b24oKS5wZXJzaXN0ZW50SURGb3JUZXN0aW5nKCkpKQorICAg
ICAgICAgICAgbV9zdHJlYW1Gb3JtYXQubVNhbXBsZVJhdGUgPSBtX291dHB1dFN0cmVhbUZvcm1h
dC5tU2FtcGxlUmF0ZSA9IHN0ZDo6Z2V0PE1vY2tNaWNyb3Bob25lUHJvcGVydGllcz4oZGV2aWNl
LT5wcm9wZXJ0aWVzKS5kZWZhdWx0U2FtcGxlUmF0ZTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAg
fQorICAgIAorICAgIHJldHVybiAwOworfQorCitPU1N0YXR1cyBNb2NrQXVkaW9TaGFyZWRJbnRl
cm5hbFVuaXQ6OmdldChBdWRpb1VuaXRQcm9wZXJ0eUlEIHByb3BlcnR5LCBBdWRpb1VuaXRTY29w
ZSBzY29wZSwgQXVkaW9Vbml0RWxlbWVudCwgdm9pZCogdmFsdWUsIFVJbnQzMiogdmFsdWVTaXpl
KQoreworICAgIGlmIChwcm9wZXJ0eSA9PSBrQXVkaW9Vbml0UHJvcGVydHlfU3RyZWFtRm9ybWF0
KSB7CisgICAgICAgIGF1dG8mIHR5cGVkVmFsdWUgPSAqc3RhdGljX2Nhc3Q8QXVkaW9TdHJlYW1C
YXNpY0Rlc2NyaXB0aW9uKj4odmFsdWUpOworICAgICAgICBpZiAoc2NvcGUgPT0ga0F1ZGlvVW5p
dFNjb3BlX0lucHV0KQorICAgICAgICAgICAgdHlwZWRWYWx1ZSA9IG1fc3RyZWFtRm9ybWF0Owor
ICAgICAgICBlbHNlCisgICAgICAgICAgICB0eXBlZFZhbHVlID0gbV9vdXRwdXRTdHJlYW1Gb3Jt
YXQ7CisgICAgICAgICp2YWx1ZVNpemUgPSBzaXplb2YoQXVkaW9TdHJlYW1CYXNpY0Rlc2NyaXB0
aW9uKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK09T
U3RhdHVzIE1vY2tBdWRpb1NoYXJlZEludGVybmFsVW5pdDo6ZGVmYXVsdElucHV0RGV2aWNlKHVp
bnQzMl90KiBkZXZpY2UpCit7CisgICAgKmRldmljZSA9IDA7CisgICAgcmV0dXJuIDA7Cit9CisK
K09TU3RhdHVzIE1vY2tBdWRpb1NoYXJlZEludGVybmFsVW5pdDo6ZGVmYXVsdE91dHB1dERldmlj
ZSh1aW50MzJfdCogZGV2aWNlKQoreworICAgICpkZXZpY2UgPSAwOworICAgIHJldHVybiAwOwor
fQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU1RS
RUFNKQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nCmluZGV4IGRiMjRhYmQ5NDU2NGQxZDdhOWIxYjQ0NzFlODIzYjM1MTFlZjNkZGUuLjcw
YzA4MzZhOGQ5NWY4ZWNhMDE2NTg2MjcwMTk0YzEzMWRmNTE2OWMgMTAwNjQ0Ci0tLSBhL0xheW91
dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwx
MyBAQAorMjAyMi0wNS0wOSAgWW91ZW5uIEZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+CisKKyAg
ICAgICAgQWRkIGEgYmV0dGVyIG1vY2sgZm9yIGF1ZGlvIHVuaXRzIHVzZWQgYnkgQ29yZUF1ZGlv
U2hhcmVkVW5pdAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjQwMjMxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgKiBmYXN0L21lZGlhc3RyZWFtL2F1ZGlvLXVuaXQtcmVjb25maWd1cmUtZXhwZWN0ZWQudHh0
OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L21lZGlhc3RyZWFtL2F1ZGlvLXVuaXQtcmVjb25maWd1
cmUuaHRtbDogQWRkZWQuCisKIDIwMjItMDUtMDggIEZ1amlpIEhpcm9ub3JpICA8SGlyb25vcmku
RnVqaWlAc29ueS5jb20+CiAKICAgICAgICAgW1dpbkNhaXJvXVtXSzFdIGFjY2Vzc2liaWxpdHkv
YXJpYS1jb21ib2JveC1jb250cm9sLW93bnMtZWxlbWVudHMuaHRtbCBpcyBjcmFzaGluZyBhZnRl
ciAyNTAzMjVAbWFpbgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9tZWRpYXN0cmVhbS9h
dWRpby11bml0LXJlY29uZmlndXJlLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvbWVk
aWFzdHJlYW0vYXVkaW8tdW5pdC1yZWNvbmZpZ3VyZS1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
YWM5NjIzODJjN2I1N2FjNGUxZTM4ZWJlNzZmYzg0ZTAwNzY4YTc3MAotLS0gL2Rldi9udWxsCisr
KyBiL0xheW91dFRlc3RzL2Zhc3QvbWVkaWFzdHJlYW0vYXVkaW8tdW5pdC1yZWNvbmZpZ3VyZS1l
eHBlY3RlZC50eHQKQEAgLTAsMCArMSw1IEBACisKKworUEFTUyBSZWNvbmZpZ3VyZSBhdWRpbyBz
YW1wbGUgcmF0ZQorUEFTUyBSZWNvbmZpZ3VyZSBhdWRpbyB1bml0IHdoZW4gYmVpbmcgaW4gcmVu
ZGVyLW9ubHkgbW9kZQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L21lZGlhc3RyZWFt
L2F1ZGlvLXVuaXQtcmVjb25maWd1cmUuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvbWVkaWFzdHJl
YW0vYXVkaW8tdW5pdC1yZWNvbmZpZ3VyZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY2NDM1N2JmNGRjYzY2
MGQyZjJjZmRlMTI5MjMxMzEwNmQ4NGU3OWEKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0
cy9mYXN0L21lZGlhc3RyZWFtL2F1ZGlvLXVuaXQtcmVjb25maWd1cmUuaHRtbApAQCAtMCwwICsx
LDcwIEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+CisgICAgPG1ldGEgY2hhcnNl
dD0idXRmLTgiPgorICAgIDxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvdGVzdGhhcm5lc3Mu
anMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvdGVzdGhhcm5l
c3NyZXBvcnQuanMiPjwvc2NyaXB0PgorIDwvaGVhZD4KKzxib2R5PgorPHZpZGVvIGlkPSJ2aWRl
bzEiIGF1dG9wbGF5IHBsYXlzSW5saW5lIGNvbnRyb2xzPjwvdmlkZW8+Cis8dmlkZW8gaWQ9InZp
ZGVvMiIgYXV0b3BsYXkgcGxheXNJbmxpbmUgY29udHJvbHM+PC92aWRlbz4KKzxzY3JpcHQ+Citw
cm9taXNlX3Rlc3QoYXN5bmMgKHRlc3QpID0+IHsKKyAgICBjb25zdCBjb250ZXh0ID0gbmV3IEF1
ZGlvQ29udGV4dCgpOworICAgIGNvbnN0IG9zY2lsbGF0b3IgPSBjb250ZXh0LmNyZWF0ZU9zY2ls
bGF0b3IoKTsKKyAgICBjb25zdCBzdHJlYW1EZXN0aW5hdGlvbiA9IGNvbnRleHQuY3JlYXRlTWVk
aWFTdHJlYW1EZXN0aW5hdGlvbigpOworICAgIG9zY2lsbGF0b3IuY29ubmVjdChzdHJlYW1EZXN0
aW5hdGlvbik7CisgICAgdmlkZW8xLnNyY09iamVjdCA9IHN0cmVhbURlc3RpbmF0aW9uLnN0cmVh
bTsKKyAgICAvLyB2aWRlbzEgd2lsbCBiZSBwbGF5ZWQgdGhyb3VnaCBWUElPIHdpbGwgZml4IHRo
ZSByYXRlIHRvIGEgc2luZ2xlIHZhbHVlLgorICAgIGF3YWl0IHZpZGVvMS5wbGF5KCk7CisgICAg
b3NjaWxsYXRvci5zdGFydCgpOworCisgICAgY29uc3Qgc3RyZWFtID0gYXdhaXQgbmF2aWdhdG9y
Lm1lZGlhRGV2aWNlcy5nZXRVc2VyTWVkaWEoeyBhdWRpbzogeyBzYW1wbGVSYXRlOiA0ODAwMCB9
fSk7CisgICAgc3RyZWFtLmdldEF1ZGlvVHJhY2tzKClbMF0ub25lbmRlZCA9ICgpID0+IGFzc2Vy
dF9ub3RfcmVhY2hlZCgic2hvdWxkIG5vdCBlbmQiKTsKKyAgICBhd2FpdCBuZXcgUHJvbWlzZShy
ZXNvbHZlID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgMTAwKSk7CisgICAgc3RyZWFtLmdldEF1ZGlv
VHJhY2tzKClbMF0uc3RvcCgpOworCisgICAgY29uc3Qgc3RyZWFtMiA9IGF3YWl0IG5hdmlnYXRv
ci5tZWRpYURldmljZXMuZ2V0VXNlck1lZGlhKHsgYXVkaW86IHsgc2FtcGxlUmF0ZTogNDQxMDAg
fX0pOworICAgIHN0cmVhbTIuZ2V0QXVkaW9UcmFja3MoKVswXS5vbmVuZGVkID0gKCkgPT4gYXNz
ZXJ0X25vdF9yZWFjaGVkKCJzaG91bGQgbm90IGVuZCIpOworICAgIGF3YWl0IG5ldyBQcm9taXNl
KHJlc29sdmUgPT4gc2V0VGltZW91dChyZXNvbHZlLCAxMDApKTsKK30sICJSZWNvbmZpZ3VyZSBh
dWRpbyBzYW1wbGUgcmF0ZSIpOworCitwcm9taXNlX3Rlc3QoYXN5bmMgKHRlc3QpID0+IHsKKyAg
ICBjb25zdCBjb250ZXh0ID0gbmV3IEF1ZGlvQ29udGV4dCgpOworICAgIGNvbnN0IG9zY2lsbGF0
b3IgPSBjb250ZXh0LmNyZWF0ZU9zY2lsbGF0b3IoKTsKKyAgICBjb25zdCBzdHJlYW1EZXN0aW5h
dGlvbiA9IGNvbnRleHQuY3JlYXRlTWVkaWFTdHJlYW1EZXN0aW5hdGlvbigpOworICAgIG9zY2ls
bGF0b3IuY29ubmVjdChzdHJlYW1EZXN0aW5hdGlvbik7CisgICAgdmlkZW8xLnNyY09iamVjdCA9
IHN0cmVhbURlc3RpbmF0aW9uLnN0cmVhbTsKKyAgICBhd2FpdCB2aWRlbzEucGxheSgpOworICAg
IG9zY2lsbGF0b3Iuc3RhcnQoKTsKKworICAgIGNvbnN0IGRlZmF1bHRBdWRpb0NvbnN0cmFpbnRz
ID0geworICAgICAgICBzYW1wbGVSYXRlOiA0ODAwMCwKKyAgICAgICAgc2FtcGxlU2l6ZTogMTYs
CisgICAgICAgIGNoYW5uZWxDb3VudDogMSwKKyAgICAgICAgZWNob0NhbmNlbGxhdGlvbjogdHJ1
ZSwKKyAgICAgICAgbm9pc2VTdXBwcmVzc2lvbjogdHJ1ZQorICAgIH07CisgICAgY29uc3QgbXVz
aWNNb2RlQXVkaW9Db25zdHJhaW50cyA9IHsKKyAgICAgICAgc2FtcGxlUmF0ZTogNDgwMDAsCisg
ICAgICAgIHNhbXBsZVNpemU6IDE2LAorICAgICAgICBjaGFubmVsQ291bnQ6IDIsCisgICAgICAg
IGVjaG9DYW5jZWxsYXRpb246IGZhbHNlLAorICAgICAgICBub2lzZVN1cHByZXNzaW9uOiBmYWxz
ZQorICAgIH07CisKKyAgICBjb25zdCBzdHJlYW0xID0gYXdhaXQgbmF2aWdhdG9yLm1lZGlhRGV2
aWNlcy5nZXRVc2VyTWVkaWEoeyBhdWRpbzogZGVmYXVsdEF1ZGlvQ29uc3RyYWludHMgfSk7Cisg
ICAgdmlkZW8yLnNyY09iamVjdCA9IHN0cmVhbTE7CisgICAgYXdhaXQgdmlkZW8yLnBsYXkoKTsK
KyAgICBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgMTAw
MCkpOworCisgICAgLy8gQnkgc3RvcHBpbmcgdGhlIGNhcHR1cmUgYXVkaW8gdHJhY2ssIHRoZSBW
UElPIHVuaXQgd2lsbCBnbyBpbiByZW5kZXIgb25seSBtb2RlIGFzIGl0IG5lZWRzIHRvIHBsYXkg
dmlkZW8gMS4KKyAgICBzdHJlYW0xLmdldEF1ZGlvVHJhY2tzKClbMF0uc3RvcCgpOworCisgICAg
Y29uc3Qgc3RyZWFtMiA9IGF3YWl0IG5hdmlnYXRvci5tZWRpYURldmljZXMuZ2V0VXNlck1lZGlh
KHsgYXVkaW86IG11c2ljTW9kZUF1ZGlvQ29uc3RyYWludHMgfSk7CisgICAgc3RyZWFtMi5nZXRB
dWRpb1RyYWNrcygpWzBdLm9uZW5kZWQgPSAoKSA9PiBsb2cuaW5uZXJIVE1MICs9ICd0cmFjayBl
bmRlZCc7CisgICAgYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiBzZXRUaW1lb3V0KHJlc29s
dmUsIDEwMDApKTsKK30sICJSZWNvbmZpZ3VyZSBhdWRpbyB1bml0IHdoZW4gYmVpbmcgaW4gcmVu
ZGVyLW9ubHkgbW9kZSIpOworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>459111</attachid>
            <date>2022-05-10 05:32:39 -0700</date>
            <delta_ts>2022-05-10 06:12:03 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-240231-20220510143236.patch</filename>
            <type>text/plain</type>
            <size>83876</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjk0MDA1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTJiMTVhNmYwZGU5YTVk
ZTdlMWUxODM3Mzg4OTZmMDQ4YmIzMmZhNy4uYmYwZGE0YTNjYmFhODExMDBmOWE2ZGM4NzBmNmEz
NzNiZTBlMmMxNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI5IEBACisyMDIyLTA1LTEwICBZb3Vl
bm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgYSBiZXR0ZXIgbW9j
ayBmb3IgYXVkaW8gdW5pdHMgdXNlZCBieSBDb3JlQXVkaW9TaGFyZWRVbml0CisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNDAyMzEKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNb3ZlIENvcmVBdWRpb1NoYXJl
ZFVuaXQgdG8gaXRzIG93biBmaWxlLCBDb3JlQXVkaW9TaGFyZWRVbml0LmgvQ29yZUF1ZGlvU2hh
cmVkVW5pdC5jcHAuCisgICAgICAgIEludHJvZHVjZSBhbiBpbnRlcm5hbCB1bml0IHRvIGFic3Ry
YWN0IG91dCBDb3JlQXVkaW9TaGFyZWRVbml0IGZyb20gYWN0dWFsIENvcmVBdWRpbyB1bml0cy4K
KyAgICAgICAgSW1wbGVtZW50IGEgQ29yZUF1ZGlvIGJhc2VkIGludGVybmFsIHVuaXQgaW4gQ29y
ZUF1ZGlvU2hhcmVkVW5pdC5jcHAuCisgICAgICAgIEltcGxlbWVudCBhIE1vY2sgYmFzZWQgaW50
ZXJuYWwgdW5pdCBpbiBNb2NrQXVkaW9TaGFyZWRVbml0LmgvTW9ja0F1ZGlvU2hhcmVkVW5pdC5t
bS4KKyAgICAgICAgQWRkIGlucHV0cHV0L291cHV0IHNhbXBsZSByYXRlIHZhbGlkYXRpb24gKGRl
YnVnIGFzc2VydCBhbmQgcmVsZWFzZSBlcnJvciByZXR1cm5lZCkuCisgICAgICAgIEFkZCBhIHRl
c3QgdGhhdCB1c2VzIHRoaXMgdmFsaWRhdGlvbi4KKworICAgICAgICBUZXN0OiBmYXN0L21lZGlh
c3RyZWFtL2F1ZGlvLXVuaXQtcmVjb25maWd1cmUuaHRtbAorCisgICAgICAgICogU291cmNlc0Nv
Y29hLnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6Cisg
ICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0Jhc2VBdWRpb1NoYXJlZFVuaXQuY3Bw
OgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9CYXNlQXVkaW9TaGFyZWRVbml0
Lmg6CisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0NvcmVBdWRpb0NhcHR1cmVT
b3VyY2UuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9Db3JlQXVkaW9T
aGFyZWRVbml0LmNwcDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFj
L0NvcmVBdWRpb1NoYXJlZFVuaXQuaDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vbWVkaWFz
dHJlYW0vbWFjL01vY2tBdWRpb1NoYXJlZFVuaXQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRp
YXN0cmVhbS9tYWMvTW9ja0F1ZGlvU2hhcmVkVW5pdC5tbToKKwogMjAyMi0wNS0xMCAgWW91ZW5u
IEZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+CiAKICAgICAgICAgSW50cm9kdWNlIGEgY2FudmFz
LWRyYXdJbWFnZSBzcGVjaWZpYyBtZXRob2QgdG8gZ2V0IGEgTmF0aXZlSW1hZ2UgZnJvbSBhIHZp
ZGVvIGVsZW1lbnQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQg
Yi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0CmluZGV4IGM5OTNjMDZjZDAwOTFlNDMw
MTE5YjhkZjQ4NGMzZWZkNjUzZTZkNmYuLmRhZWExMGI2MWQxNTg1ZDg1NTNlZGRkMjYwMTRiOWU1
ZDFjYzEyNTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQKKysr
IGIvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4dApAQCAtNTY1LDYgKzU2NSw3IEBAIHBs
YXRmb3JtL21lZGlhc3RyZWFtL21hYy9DR0Rpc3BsYXlTdHJlYW1TY3JlZW5DYXB0dXJlU291cmNl
Lm1tCiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQ29yZUF1ZGlvQ2FwdHVyZURldmljZS5jcHAK
IHBsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9Db3JlQXVkaW9DYXB0dXJlRGV2aWNlTWFuYWdlci5j
cHAKIHBsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9Db3JlQXVkaW9DYXB0dXJlU291cmNlLmNwcAor
cGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0NvcmVBdWRpb1NoYXJlZFVuaXQuY3BwCiBwbGF0Zm9y
bS9tZWRpYXN0cmVhbS9tYWMvRGlzcGxheUNhcHR1cmVNYW5hZ2VyQ29jb2EuY3BwCiBwbGF0Zm9y
bS9tZWRpYXN0cmVhbS9tYWMvTWVkaWFTdHJlYW1UcmFja0F1ZGlvU291cmNlUHJvdmlkZXJDb2Nv
YS5jcHAKIHBsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9Nb2NrQXVkaW9TaGFyZWRVbml0Lm1tCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5k
ZXggMTNjZDFhYzNmN2JjYWRhOTRlNDM3MmJhN2U1ZGU0ZWM2ZTk1ZmQzOC4uNzY3MzMxODY1NWQ1
OWJjOGVkNzllYWU3YTM4YTVhNjM4NTZmZDk3NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtODU2Niw2ICs4NTY2LDggQEAKIAkJ
NDEwQThFRjcyNEY4RjNGNjAwNEY5MDcwIC8qIFRleHRFbmNvZGVyU3RyZWFtRW5jb2Rlci5pZGwg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBw
YXRoID0gVGV4dEVuY29kZXJTdHJlYW1FbmNvZGVyLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNDEwQThFRjgyNEY4RjQ3QTAwNEY5MDcwIC8qIFRleHRFbmNvZGVyU3RyZWFtRW5j
b2Rlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUZXh0RW5jb2RlclN0cmVhbUVuY29kZXIuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MTBBOEVGOTI0RjhGNDdCMDA0RjkwNzAg
LyogVGV4dEVuY29kZXJTdHJlYW1FbmNvZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRleHRFbmNvZGVy
U3RyZWFtRW5jb2Rlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0MTBBRDJERTI4
MjJCQkY2MDA5QzkzQzggLyogQ29yZUF1ZGlvU2hhcmVkVW5pdC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBDb3JlQXVkaW9TaGFyZWRVbml0Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTQxMEFEMkRGMjgyMkJCRjYwMDlDOTNDOCAvKiBDb3JlQXVkaW9TaGFyZWRV
bml0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvcmVBdWRpb1No
YXJlZFVuaXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MTBCN0U3MTEwNDVG
QUIwMDBEODIyNEYgLyogSlNNZXNzYWdlRXZlbnRDdXN0b20uY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gSlNNZXNzYWdlRXZlbnRDdXN0b20uY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk0MTBCQTEzMTI1NzBGRTU3MDAyRTJGOEEgLyogTGliV2ViUlRD
UnRwVHJhbnNmb3JtYWJsZUZyYW1lLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
bmFtZSA9IExpYldlYlJUQ1J0cFRyYW5zZm9ybWFibGVGcmFtZS5jcHA7IHBhdGggPSBsaWJ3ZWJy
dGMvTGliV2ViUlRDUnRwVHJhbnNmb3JtYWJsZUZyYW1lLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNDEwQkNGNTMyNkYwQ0Q4QjAwNDBCMTI0IC8qIFJUQ0xvY2FsU2Vzc2lvbkRl
c2NyaXB0aW9uSW5pdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSVENMb2Nh
bFNlc3Npb25EZXNjcmlwdGlvbkluaXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTE4ODE1LDYgKzE4ODE3LDggQEAKIAkJCQkzRjgwMjAzNDFFOUUzODFEMDBERUM2MUQgLyogQ29y
ZUF1ZGlvQ2FwdHVyZURldmljZU1hbmFnZXIuaCAqLywKIAkJCQkzRjNCQjU4MjFFNzA5RUU0MDBD
NzAxRjIgLyogQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZS5jcHAgKi8sCiAJCQkJM0YzQkI1ODMxRTcw
OUVFNDAwQzcwMUYyIC8qIENvcmVBdWRpb0NhcHR1cmVTb3VyY2UuaCAqLywKKwkJCQk0MTBBRDJE
RjI4MjJCQkY2MDA5QzkzQzggLyogQ29yZUF1ZGlvU2hhcmVkVW5pdC5jcHAgKi8sCisJCQkJNDEw
QUQyREUyODIyQkJGNjAwOUM5M0M4IC8qIENvcmVBdWRpb1NoYXJlZFVuaXQuaCAqLywKIAkJCQkw
N0E2RDg0ODFGRUI3MDBCMDA2NDQxREUgLyogRGlzcGxheUNhcHR1cmVNYW5hZ2VyQ29jb2EuY3Bw
ICovLAogCQkJCTA3QTZEODQ5MUZFQjcwMEMwMDY0NDFERSAvKiBEaXNwbGF5Q2FwdHVyZU1hbmFn
ZXJDb2NvYS5oICovLAogCQkJCTQxNzRFOTIwMjUzNURDREQwMEZFNDIwMiAvKiBNZWRpYVN0cmVh
bVRyYWNrQXVkaW9Tb3VyY2VQcm92aWRlckNvY29hLmNwcCAqLywKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9CYXNlQXVkaW9TaGFyZWRVbml0LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9CYXNlQXVkaW9TaGFy
ZWRVbml0LmNwcAppbmRleCA0MTcwZmY2NTYzY2ZhN2JiOTNkNzFkY2YzMmRiOGEzNmJiNzBiNzM2
Li5iOGU1YjFkZTc0YWJlODQ3YTA3MDM2NGY1NGE1MmU0MzA5OTk5MWZlIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQmFzZUF1ZGlvU2hhcmVkVW5p
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0Jhc2VB
dWRpb1NoYXJlZFVuaXQuY3BwCkBAIC0xMTMsMTEgKzExMyw2IEBAIE9TU3RhdHVzIEJhc2VBdWRp
b1NoYXJlZFVuaXQ6OnN0YXJ0VW5pdCgpCiAgICAgcmV0dXJuIDA7CiB9CiAKLXZvaWQgQmFzZUF1
ZGlvU2hhcmVkVW5pdDo6cmVzZXRTYW1wbGVSYXRlKCkKLXsKLSAgICBtX3NhbXBsZVJhdGUgPSBB
dWRpb1Nlc3Npb246OnNoYXJlZFNlc3Npb24oKS5zYW1wbGVSYXRlKCk7Ci19Ci0KIHZvaWQgQmFz
ZUF1ZGlvU2hhcmVkVW5pdDo6cHJlcGFyZUZvck5ld0NhcHR1cmUoKQogewogICAgIG1fdm9sdW1l
ID0gMTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21h
Yy9CYXNlQXVkaW9TaGFyZWRVbml0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0
cmVhbS9tYWMvQmFzZUF1ZGlvU2hhcmVkVW5pdC5oCmluZGV4IGY2MTZjMDM4ZmJkYWZjYTY1YTY5
M2I2MmRjYTBlOGFmZjU3MTZlZDMuLjY2YjMzYTRlMzk4OTIzNWM0NjVkMTQ4NDVlMjQ4NmJlZThk
NmE2MzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21h
Yy9CYXNlQXVkaW9TaGFyZWRVbml0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVk
aWFzdHJlYW0vbWFjL0Jhc2VBdWRpb1NoYXJlZFVuaXQuaApAQCAtODMsNiArODMsOCBAQCBwdWJs
aWM6CiAgICAgdm9pZCB3aGVuQXVkaW9DYXB0dXJlVW5pdElzTm90UnVubmluZyhGdW5jdGlvbjx2
b2lkKCk+JiYpOwogICAgIGJvb2wgaXNSZW5kZXJpbmdBdWRpbygpIGNvbnN0IHsgcmV0dXJuIG1f
aXNSZW5kZXJpbmdBdWRpbzsgfQogCisgICAgY29uc3QgU3RyaW5nJiBwZXJzaXN0ZW50SURGb3JU
ZXN0aW5nKCkgY29uc3QgeyByZXR1cm4gbV9jYXB0dXJpbmdEZXZpY2UgPyBtX2NhcHR1cmluZ0Rl
dmljZS0+Zmlyc3QgOiBlbXB0eVN0cmluZygpOyB9CisKIHByb3RlY3RlZDoKICAgICB2b2lkIGZv
ckVhY2hDbGllbnQoY29uc3QgRnVuY3Rpb248dm9pZChDb3JlQXVkaW9DYXB0dXJlU291cmNlJik+
JikgY29uc3Q7CiAgICAgYm9vbCBoYXNDbGllbnRzKCkgY29uc3QgeyByZXR1cm4gIW1fY2xpZW50
cy5pc0VtcHR5KCk7IH0KQEAgLTkyLDcgKzk0LDcgQEAgcHJvdGVjdGVkOgogICAgIHZpcnR1YWwg
T1NTdGF0dXMgc3RhcnRJbnRlcm5hbCgpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgc3RvcEludGVy
bmFsKCkgPSAwOwogICAgIHZpcnR1YWwgT1NTdGF0dXMgcmVjb25maWd1cmVBdWRpb1VuaXQoKSA9
IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlc2V0U2FtcGxlUmF0ZSgpOworICAgIHZpcnR1YWwgdm9p
ZCByZXNldFNhbXBsZVJhdGUoKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGNhcHR1cmVEZXZpY2VD
aGFuZ2VkKCkgPSAwOwogCiAgICAgdm9pZCBzZXRTdXNwZW5kZWQoYm9vbCB2YWx1ZSkgeyBtX3N1
c3BlbmRlZCA9IHZhbHVlOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
ZWRpYXN0cmVhbS9tYWMvQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZS5jcHAKaW5k
ZXggYjY4N2IyOGRkZDE2MjgyNzRjZTI0MzdmOGY3ZWQzOGJjNDQwZmRkZi4uMzg4NzRiODJkZmUw
MjY4YzMxNGM2Y2ZlNTgwYzAyNzRiYzUyNjJjNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0NvcmVBdWRpb0NhcHR1cmVTb3VyY2UuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9Db3JlQXVkaW9DYXB0dXJl
U291cmNlLmNwcApAQCAtMzEsOSArMzEsOSBAQAogI2luY2x1ZGUgIkF1ZGlvU2FtcGxlQnVmZmVy
TGlzdC5oIgogI2luY2x1ZGUgIkF1ZGlvU2FtcGxlRGF0YVNvdXJjZS5oIgogI2luY2x1ZGUgIkF1
ZGlvU2Vzc2lvbi5oIgotI2luY2x1ZGUgIkJhc2VBdWRpb1NoYXJlZFVuaXQuaCIKICNpbmNsdWRl
ICJDb3JlQXVkaW9DYXB0dXJlRGV2aWNlLmgiCiAjaW5jbHVkZSAiQ29yZUF1ZGlvQ2FwdHVyZURl
dmljZU1hbmFnZXIuaCIKKyNpbmNsdWRlICJDb3JlQXVkaW9TaGFyZWRVbml0LmgiCiAjaW5jbHVk
ZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIlBsYXRmb3JtTWVkaWFTZXNzaW9uTWFuYWdlci5oIgog
I2luY2x1ZGUgIlRpbWVyLmgiCkBAIC01MSwxNSArNTEsMTUgQEAKICNpbmNsdWRlIDx3dGYvTmV2
ZXJEZXN0cm95ZWQuaD4KICNpbmNsdWRlIDx3dGYvU2NvcGUuaD4KIAotI2luY2x1ZGUgPHBhbC9j
Zi9BdWRpb1Rvb2xib3hTb2Z0TGluay5oPgotI2luY2x1ZGUgPHBhbC9jZi9Db3JlTWVkaWFTb2Z0
TGluay5oPgotCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICNpbmNsdWRlICJBVkF1ZGlvU2Vz
c2lvbkNhcHR1cmVEZXZpY2UuaCIKICNpbmNsdWRlICJBVkF1ZGlvU2Vzc2lvbkNhcHR1cmVEZXZp
Y2VNYW5hZ2VyLmgiCiAjaW5jbHVkZSAiQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZUlPUy5oIgogI2Vu
ZGlmCiAKKyNpbmNsdWRlIDxwYWwvY2YvQXVkaW9Ub29sYm94U29mdExpbmsuaD4KKyNpbmNsdWRl
IDxwYWwvY2YvQ29yZU1lZGlhU29mdExpbmsuaD4KKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiAj
aWYgUExBVEZPUk0oTUFDKQpAQCAtNzAsNjE0ICs3MCw2IEBAIENvcmVBdWRpb0NhcHR1cmVTb3Vy
Y2VGYWN0b3J5JiBDb3JlQXVkaW9DYXB0dXJlU291cmNlRmFjdG9yeTo6c2luZ2xldG9uKCkKIH0K
ICNlbmRpZgogCi1jb25zdCBVSW50MzIgb3V0cHV0QnVzID0gMDsKLWNvbnN0IFVJbnQzMiBpbnB1
dEJ1cyA9IDE7Ci0KLWNsYXNzIENvcmVBdWRpb1NoYXJlZFVuaXQgZmluYWwgOiBwdWJsaWMgQmFz
ZUF1ZGlvU2hhcmVkVW5pdCB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIENvcmVBdWRpb1NoYXJlZFVu
aXQmIHVuaXQoKTsKLSAgICBzdGF0aWMgQmFzZUF1ZGlvU2hhcmVkVW5pdCYgc2luZ2xldG9uKCkg
IHsgcmV0dXJuIHVuaXQoKTsgfQotICAgIENvcmVBdWRpb1NoYXJlZFVuaXQoKTsKLQotICAgIHZv
aWQgcmVnaXN0ZXJTcGVha2VyU2FtcGxlc1Byb2R1Y2VyKENvcmVBdWRpb1NwZWFrZXJTYW1wbGVz
UHJvZHVjZXImKTsKLSAgICB2b2lkIHVucmVnaXN0ZXJTcGVha2VyU2FtcGxlc1Byb2R1Y2VyKENv
cmVBdWRpb1NwZWFrZXJTYW1wbGVzUHJvZHVjZXImKTsKLSAgICBib29sIGlzUnVubmluZygpIGNv
bnN0IHsgcmV0dXJuIG1faW9Vbml0U3RhcnRlZDsgfQotCi1wcml2YXRlOgotICAgIHN0YXRpYyBz
aXplX3QgcHJlZmVycmVkSU9CdWZmZXJTaXplKCk7Ci0KLSAgICBDYXBhYmlsaXR5VmFsdWVPclJh
bmdlIHNhbXBsZVJhdGVDYXBhY2l0aWVzKCkgY29uc3QgZmluYWwgeyByZXR1cm4gQ2FwYWJpbGl0
eVZhbHVlT3JSYW5nZSg4MDAwLCA5NjAwMCk7IH0KLSAgICBjb25zdCBDQUF1ZGlvU3RyZWFtRGVz
Y3JpcHRpb24mIG1pY3JvcGhvbmVGb3JtYXQoKSBjb25zdCB7IHJldHVybiBtX21pY3JvcGhvbmVQ
cm9jRm9ybWF0OyB9Ci0KLSAgICBib29sIGhhc0F1ZGlvVW5pdCgpIGNvbnN0IGZpbmFsIHsgcmV0
dXJuIG1faW9Vbml0OyB9Ci0gICAgdm9pZCBjYXB0dXJlRGV2aWNlQ2hhbmdlZCgpIGZpbmFsOwot
ICAgIE9TU3RhdHVzIHJlY29uZmlndXJlQXVkaW9Vbml0KCkgZmluYWw7Ci0KLSAgICBPU1N0YXR1
cyBzZXR1cEF1ZGlvVW5pdCgpOwotICAgIHZvaWQgY2xlYW51cEF1ZGlvVW5pdCgpIGZpbmFsOwot
Ci0gICAgT1NTdGF0dXMgc3RhcnRJbnRlcm5hbCgpIGZpbmFsOwotICAgIHZvaWQgc3RvcEludGVy
bmFsKCkgZmluYWw7Ci0gICAgYm9vbCBpc1Byb2R1Y2luZ0RhdGEoKSBjb25zdCBmaW5hbCB7IHJl
dHVybiBtX2lvVW5pdFN0YXJ0ZWQ7IH0KLSAgICB2b2lkIGlzUHJvZHVjaW5nTWljcm9waG9uZVNh
bXBsZXNDaGFuZ2VkKCkgZmluYWw7Ci0gICAgdm9pZCB2YWxpZGF0ZU91dHB1dERldmljZSh1aW50
MzJfdCBkZXZpY2VJRCkgZmluYWw7Ci0gICAgaW50IGFjdHVhbFNhbXBsZVJhdGUoKSBjb25zdCBm
aW5hbDsKLQotICAgIE9TU3RhdHVzIGNvbmZpZ3VyZVNwZWFrZXJQcm9jKGludCBzYW1wbGVSYXRl
KTsKLSAgICBPU1N0YXR1cyBjb25maWd1cmVNaWNyb3Bob25lUHJvYyhpbnQgc2FtcGxlUmF0ZSk7
Ci0gICAgT1NTdGF0dXMgZGVmYXVsdE91dHB1dERldmljZSh1aW50MzJfdCopOwotICAgIE9TU3Rh
dHVzIGRlZmF1bHRJbnB1dERldmljZSh1aW50MzJfdCopOwotCi0gICAgc3RhdGljIE9TU3RhdHVz
IG1pY3JvcGhvbmVDYWxsYmFjayh2b2lkKiwgQXVkaW9Vbml0UmVuZGVyQWN0aW9uRmxhZ3MqLCBj
b25zdCBBdWRpb1RpbWVTdGFtcCosIFVJbnQzMiwgVUludDMyLCBBdWRpb0J1ZmZlckxpc3QqKTsK
LSAgICBPU1N0YXR1cyBwcm9jZXNzTWljcm9waG9uZVNhbXBsZXMoQXVkaW9Vbml0UmVuZGVyQWN0
aW9uRmxhZ3MmLCBjb25zdCBBdWRpb1RpbWVTdGFtcCYsIFVJbnQzMiwgVUludDMyLCBBdWRpb0J1
ZmZlckxpc3QqKTsKLQotICAgIHN0YXRpYyBPU1N0YXR1cyBzcGVha2VyQ2FsbGJhY2sodm9pZCos
IEF1ZGlvVW5pdFJlbmRlckFjdGlvbkZsYWdzKiwgY29uc3QgQXVkaW9UaW1lU3RhbXAqLCBVSW50
MzIsIFVJbnQzMiwgQXVkaW9CdWZmZXJMaXN0Kik7Ci0gICAgT1NTdGF0dXMgcHJvdmlkZVNwZWFr
ZXJEYXRhKEF1ZGlvVW5pdFJlbmRlckFjdGlvbkZsYWdzJiwgY29uc3QgQXVkaW9UaW1lU3RhbXAm
LCBVSW50MzIsIFVJbnQzMiwgQXVkaW9CdWZmZXJMaXN0Jik7Ci0KLSAgICB2b2lkIHVuZHVjaygp
OwotCi0gICAgdm9pZCB2ZXJpZnlJc0NhcHR1cmluZygpOwotCi0gICAgU2Vjb25kcyB2ZXJpZnlD
YXB0dXJlSW50ZXJ2YWwoKSB7IHJldHVybiBpc1Byb2R1Y2luZ01pY3JvcGhvbmVTYW1wbGVzKCkg
PyAxMF9zIDogMl9zOyB9Ci0KLSAgICBBdWRpb1VuaXQgbV9pb1VuaXQgeyBudWxscHRyIH07Ci0K
LSAgICAvLyBPbmx5IHJlYWQvbW9kaWZpZWQgZnJvbSB0aGUgSU8gdGhyZWFkLgotICAgIFZlY3Rv
cjxSZWY8QXVkaW9TYW1wbGVEYXRhU291cmNlPj4gbV9hY3RpdmVTb3VyY2VzOwotCi0gICAgQ0FB
dWRpb1N0cmVhbURlc2NyaXB0aW9uIG1fbWljcm9waG9uZVByb2NGb3JtYXQ7Ci0gICAgUmVmUHRy
PEF1ZGlvU2FtcGxlQnVmZmVyTGlzdD4gbV9taWNyb3Bob25lU2FtcGxlQnVmZmVyOwotICAgIHVp
bnQ2NF90IG1fbGF0ZXN0TWljVGltZVN0YW1wIHsgMCB9OwotCi0gICAgQ0FBdWRpb1N0cmVhbURl
c2NyaXB0aW9uIG1fc3BlYWtlclByb2NGb3JtYXQ7Ci0KLSAgICBkb3VibGUgbV9EVFNDb252ZXJz
aW9uUmF0aW8geyAwIH07Ci0KLSAgICBib29sIG1faW9Vbml0SW5pdGlhbGl6ZWQgeyBmYWxzZSB9
OwotICAgIGJvb2wgbV9pb1VuaXRTdGFydGVkIHsgZmFsc2UgfTsKLQotICAgIG11dGFibGUgc3Rk
Ojp1bmlxdWVfcHRyPFJlYWx0aW1lTWVkaWFTb3VyY2VDYXBhYmlsaXRpZXM+IG1fY2FwYWJpbGl0
aWVzOwotICAgIG11dGFibGUgc3RkOjpvcHRpb25hbDxSZWFsdGltZU1lZGlhU291cmNlU2V0dGlu
Z3M+IG1fY3VycmVudFNldHRpbmdzOwotCi0jaWYgIUxPR19ESVNBQkxFRAotICAgIHZvaWQgY2hl
Y2tUaW1lc3RhbXBzKGNvbnN0IEF1ZGlvVGltZVN0YW1wJiwgdWludDY0X3QsIGRvdWJsZSk7Ci0K
LSAgICBTdHJpbmcgbV9pb1VuaXROYW1lOwotI2VuZGlmCi0KLSAgICB1aW50NjRfdCBtX21pY3Jv
cGhvbmVQcm9jc0NhbGxlZCB7IDAgfTsKLSAgICB1aW50NjRfdCBtX21pY3JvcGhvbmVQcm9jc0Nh
bGxlZExhc3RUaW1lIHsgMCB9OwotICAgIFRpbWVyIG1fdmVyaWZ5Q2FwdHVyaW5nVGltZXI7Ci0K
LSAgICBib29sIG1faXNSZWNvbmZpZ3VyaW5nIHsgZmFsc2UgfTsKLSAgICBtdXRhYmxlIExvY2sg
bV9zcGVha2VyU2FtcGxlc1Byb2R1Y2VyTG9jazsKLSAgICBDb3JlQXVkaW9TcGVha2VyU2FtcGxl
c1Byb2R1Y2VyKiBtX3NwZWFrZXJTYW1wbGVzUHJvZHVjZXIgV1RGX0dVQVJERURfQllfTE9DSyht
X3NwZWFrZXJTYW1wbGVzUHJvZHVjZXJMb2NrKSB7IG51bGxwdHIgfTsKLX07Ci0KLUNvcmVBdWRp
b1NoYXJlZFVuaXQmIENvcmVBdWRpb1NoYXJlZFVuaXQ6OnVuaXQoKQotewotICAgIHN0YXRpYyBO
ZXZlckRlc3Ryb3llZDxDb3JlQXVkaW9TaGFyZWRVbml0PiBzaW5nbGV0b247Ci0gICAgcmV0dXJu
IHNpbmdsZXRvbjsKLX0KLQotQ29yZUF1ZGlvU2hhcmVkVW5pdDo6Q29yZUF1ZGlvU2hhcmVkVW5p
dCgpCi0gICAgOiBtX3ZlcmlmeUNhcHR1cmluZ1RpbWVyKCp0aGlzLCAmQ29yZUF1ZGlvU2hhcmVk
VW5pdDo6dmVyaWZ5SXNDYXB0dXJpbmcpCi17Ci19Ci0KLXZvaWQgQ29yZUF1ZGlvU2hhcmVkVW5p
dDo6Y2FwdHVyZURldmljZUNoYW5nZWQoKQotewotI2lmIFBMQVRGT1JNKE1BQykKLSAgICByZWNv
bmZpZ3VyZUF1ZGlvVW5pdCgpOwotI2Vsc2UKLSAgICBBVkF1ZGlvU2Vzc2lvbkNhcHR1cmVEZXZp
Y2VNYW5hZ2VyOjpzaW5nbGV0b24oKS5zZXRQcmVmZXJyZWRBdWRpb1Nlc3Npb25EZXZpY2VVSUQo
cGVyc2lzdGVudElEKCkpOwotI2VuZGlmCi19Ci0KLXNpemVfdCBDb3JlQXVkaW9TaGFyZWRVbml0
OjpwcmVmZXJyZWRJT0J1ZmZlclNpemUoKQotewotICAgIHJldHVybiBBdWRpb1Nlc3Npb246OnNo
YXJlZFNlc3Npb24oKS5idWZmZXJTaXplKCk7Ci19Ci0KLU9TU3RhdHVzIENvcmVBdWRpb1NoYXJl
ZFVuaXQ6OnNldHVwQXVkaW9Vbml0KCkKLXsKLSAgICBpZiAobV9pb1VuaXQpCi0gICAgICAgIHJl
dHVybiAwOwotCi0gICAgQVNTRVJUKGhhc0NsaWVudHMoKSk7Ci0KLSAgICBtYWNoX3RpbWViYXNl
X2luZm9fZGF0YV90IHRpbWViYXNlSW5mbzsKLSAgICBtYWNoX3RpbWViYXNlX2luZm8oJnRpbWVi
YXNlSW5mbyk7Ci0gICAgbV9EVFNDb252ZXJzaW9uUmF0aW8gPSAxZS05ICogc3RhdGljX2Nhc3Q8
ZG91YmxlPih0aW1lYmFzZUluZm8ubnVtZXIpIC8gc3RhdGljX2Nhc3Q8ZG91YmxlPih0aW1lYmFz
ZUluZm8uZGVub20pOwotCi0gICAgQXVkaW9Db21wb25lbnREZXNjcmlwdGlvbiBpb1VuaXREZXNj
cmlwdGlvbiA9IHsga0F1ZGlvVW5pdFR5cGVfT3V0cHV0LCBrQXVkaW9Vbml0U3ViVHlwZV9Wb2lj
ZVByb2Nlc3NpbmdJTywga0F1ZGlvVW5pdE1hbnVmYWN0dXJlcl9BcHBsZSwgMCwgMCB9OwotICAg
IEF1ZGlvQ29tcG9uZW50IGlvQ29tcG9uZW50ID0gUEFMOjpBdWRpb0NvbXBvbmVudEZpbmROZXh0
KG51bGxwdHIsICZpb1VuaXREZXNjcmlwdGlvbik7Ci0gICAgQVNTRVJUKGlvQ29tcG9uZW50KTsK
LSAgICBpZiAoIWlvQ29tcG9uZW50KSB7Ci0gICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFdlYlJU
QywgIkNvcmVBdWRpb1NoYXJlZFVuaXQ6OnNldHVwQXVkaW9Vbml0KCVwKSB1bmFibGUgdG8gZmlu
ZCB2cGlvIHVuaXQgY29tcG9uZW50IiwgdGhpcyk7Ci0gICAgICAgIHJldHVybiAtMTsKLSAgICB9
Ci0KLSNpZiAhTE9HX0RJU0FCTEVECi0gICAgQ0ZTdHJpbmdSZWYgbmFtZSA9IG51bGxwdHI7Ci0g
ICAgUEFMOjpBdWRpb0NvbXBvbmVudENvcHlOYW1lKGlvQ29tcG9uZW50LCAmbmFtZSk7Ci0gICAg
aWYgKG5hbWUpIHsKLSAgICAgICAgbV9pb1VuaXROYW1lID0gbmFtZTsKLSAgICAgICAgQ0ZSZWxl
YXNlKG5hbWUpOwotICAgICAgICBSRUxFQVNFX0xPRyhXZWJSVEMsICJDb3JlQXVkaW9TaGFyZWRV
bml0OjpzZXR1cEF1ZGlvVW5pdCglcCkgY3JlYXRlZCBcIiVzXCIgY29tcG9uZW50IiwgdGhpcywg
bV9pb1VuaXROYW1lLnV0ZjgoKS5kYXRhKCkpOwotICAgIH0KLSNlbmRpZgotCi0gICAgYXV0byBl
cnIgPSBQQUw6OkF1ZGlvQ29tcG9uZW50SW5zdGFuY2VOZXcoaW9Db21wb25lbnQsICZtX2lvVW5p
dCk7Ci0gICAgaWYgKGVycikgewotICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihXZWJSVEMsICJD
b3JlQXVkaW9TaGFyZWRVbml0OjpzZXR1cEF1ZGlvVW5pdCglcCkgdW5hYmxlIHRvIG9wZW4gdnBp
byB1bml0LCBlcnJvciAlZCAoJS40cykiLCB0aGlzLCAoaW50KWVyciwgKGNoYXIqKSZlcnIpOwot
ICAgICAgICByZXR1cm4gZXJyOwotICAgIH0KLQotICAgIGlmICghZW5hYmxlRWNob0NhbmNlbGxh
dGlvbigpKSB7Ci0gICAgICAgIHVpbnQzMl90IHBhcmFtID0gMDsKLSAgICAgICAgZXJyID0gUEFM
OjpBdWRpb1VuaXRTZXRQcm9wZXJ0eShtX2lvVW5pdCwga0FVVm9pY2VJT1Byb3BlcnR5X1ZvaWNl
UHJvY2Vzc2luZ0VuYWJsZUFHQywga0F1ZGlvVW5pdFNjb3BlX0dsb2JhbCwgaW5wdXRCdXMsICZw
YXJhbSwgc2l6ZW9mKHBhcmFtKSk7Ci0gICAgICAgIGlmIChlcnIpIHsKLSAgICAgICAgICAgIFJF
TEVBU0VfTE9HX0VSUk9SKFdlYlJUQywgIkNvcmVBdWRpb1NoYXJlZFVuaXQ6OnNldHVwQXVkaW9V
bml0KCVwKSB1bmFibGUgdG8gc2V0IHZwaW8gYXV0b21hdGljIGdhaW4gY29udHJvbCwgZXJyb3Ig
JWQgKCUuNHMpIiwgdGhpcywgKGludCllcnIsIChjaGFyKikmZXJyKTsKLSAgICAgICAgICAgIHJl
dHVybiBlcnI7Ci0gICAgICAgIH0KLSAgICAgICAgcGFyYW0gPSAxOwotICAgICAgICBlcnIgPSBQ
QUw6OkF1ZGlvVW5pdFNldFByb3BlcnR5KG1faW9Vbml0LCBrQVVWb2ljZUlPUHJvcGVydHlfQnlw
YXNzVm9pY2VQcm9jZXNzaW5nLCBrQXVkaW9Vbml0U2NvcGVfR2xvYmFsLCBpbnB1dEJ1cywgJnBh
cmFtLCBzaXplb2YocGFyYW0pKTsKLSAgICAgICAgaWYgKGVycikgewotICAgICAgICAgICAgUkVM
RUFTRV9MT0dfRVJST1IoV2ViUlRDLCAiQ29yZUF1ZGlvU2hhcmVkVW5pdDo6c2V0dXBBdWRpb1Vu
aXQoJXApIHVuYWJsZSB0byBzZXQgdnBpbyB1bml0IGVjaG8gY2FuY2VsbGF0aW9uLCBlcnJvciAl
ZCAoJS40cykiLCB0aGlzLCAoaW50KWVyciwgKGNoYXIqKSZlcnIpOwotICAgICAgICAgICAgcmV0
dXJuIGVycjsKLSAgICAgICAgfQotICAgIH0KLQotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0g
ICAgdWludDMyX3QgcGFyYW0gPSAxOwotICAgIGVyciA9IFBBTDo6QXVkaW9Vbml0U2V0UHJvcGVy
dHkobV9pb1VuaXQsIGtBdWRpb091dHB1dFVuaXRQcm9wZXJ0eV9FbmFibGVJTywga0F1ZGlvVW5p
dFNjb3BlX0lucHV0LCBpbnB1dEJ1cywgJnBhcmFtLCBzaXplb2YocGFyYW0pKTsKLSAgICBpZiAo
ZXJyKSB7Ci0gICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFdlYlJUQywgIkNvcmVBdWRpb1NoYXJl
ZFVuaXQ6OnNldHVwQXVkaW9Vbml0KCVwKSB1bmFibGUgdG8gZW5hYmxlIHZwaW8gdW5pdCBpbnB1
dCwgZXJyb3IgJWQgKCUuNHMpIiwgdGhpcywgKGludCllcnIsIChjaGFyKikmZXJyKTsKLSAgICAg
ICAgcmV0dXJuIGVycjsKLSAgICB9Ci0jZWxzZQotICAgIGF1dG8gZGV2aWNlSUQgPSBjYXB0dXJl
RGV2aWNlSUQoKTsKLSAgICBpZiAoIWRldmljZUlEKSB7Ci0gICAgICAgIGVyciA9IGRlZmF1bHRJ
bnB1dERldmljZSgmZGV2aWNlSUQpOwotICAgICAgICBpZiAoZXJyKQotICAgICAgICAgICAgcmV0
dXJuIGVycjsKLSAgICB9Ci0KLSAgICBlcnIgPSBQQUw6OkF1ZGlvVW5pdFNldFByb3BlcnR5KG1f
aW9Vbml0LCBrQXVkaW9PdXRwdXRVbml0UHJvcGVydHlfQ3VycmVudERldmljZSwga0F1ZGlvVW5p
dFNjb3BlX0dsb2JhbCwgaW5wdXRCdXMsICZkZXZpY2VJRCwgc2l6ZW9mKGRldmljZUlEKSk7Ci0g
ICAgaWYgKGVycikgewotICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihXZWJSVEMsICJDb3JlQXVk
aW9TaGFyZWRVbml0OjpzZXR1cEF1ZGlvVW5pdCglcCkgdW5hYmxlIHRvIHNldCB2cGlvIHVuaXQg
Y2FwdHVyZSBkZXZpY2UgSUQgJWQsIGVycm9yICVkICglLjRzKSIsIHRoaXMsIChpbnQpZGV2aWNl
SUQsIChpbnQpZXJyLCAoY2hhciopJmVycik7Ci0gICAgICAgIHJldHVybiBlcnI7Ci0gICAgfQot
Ci0gICAgdWludDMyX3QgZGVmYXVsdE91dHB1dERldmljZUlEOwotICAgIGVyciA9IGRlZmF1bHRP
dXRwdXREZXZpY2UoJmRlZmF1bHRPdXRwdXREZXZpY2VJRCk7Ci0gICAgaWYgKCFlcnIpIHsKLSAg
ICAgICAgZXJyID0gUEFMOjpBdWRpb1VuaXRTZXRQcm9wZXJ0eShtX2lvVW5pdCwga0F1ZGlvT3V0
cHV0VW5pdFByb3BlcnR5X0N1cnJlbnREZXZpY2UsIGtBdWRpb1VuaXRTY29wZV9HbG9iYWwsIG91
dHB1dEJ1cywgJmRlZmF1bHRPdXRwdXREZXZpY2VJRCwgc2l6ZW9mKGRlZmF1bHRPdXRwdXREZXZp
Y2VJRCkpOwotICAgICAgICBSRUxFQVNFX0xPR19FUlJPUl9JRihlcnIsIFdlYlJUQywgIkNvcmVB
dWRpb1NoYXJlZFVuaXQ6OnNldHVwQXVkaW9Vbml0KCVwKSB1bmFibGUgdG8gc2V0IHZwaW8gdW5p
dCBvdXRwdXQgZGV2aWNlIElEICVkLCBlcnJvciAlZCAoJS40cykiLCB0aGlzLCAoaW50KWRlZmF1
bHRPdXRwdXREZXZpY2VJRCwgKGludCllcnIsIChjaGFyKikmZXJyKTsKLSAgICB9Ci0gICAgc2V0
T3V0cHV0RGV2aWNlSUQoIWVyciA/IGRlZmF1bHRPdXRwdXREZXZpY2VJRCA6IDApOwotI2VuZGlm
Ci0KLSAgICAvLyBGSVhNRTogQWRkIHN1cHBvcnQgZm9yIGRpZmZlcmVudCBzcGVha2VyL21pY3Jv
cGhvbmUgc2FtcGxlIHJhdGVzLgotICAgIGludCBhY3R1YWxTYW1wbGVSYXRlID0gdGhpcy0+YWN0
dWFsU2FtcGxlUmF0ZSgpOwotICAgIGVyciA9IGNvbmZpZ3VyZU1pY3JvcGhvbmVQcm9jKGFjdHVh
bFNhbXBsZVJhdGUpOwotICAgIGlmIChlcnIpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLSAgICBl
cnIgPSBjb25maWd1cmVTcGVha2VyUHJvYyhhY3R1YWxTYW1wbGVSYXRlKTsKLSAgICBpZiAoZXJy
KQotICAgICAgICByZXR1cm4gZXJyOwotCi0gICAgZXJyID0gUEFMOjpBdWRpb1VuaXRJbml0aWFs
aXplKG1faW9Vbml0KTsKLSAgICBpZiAoZXJyKSB7Ci0gICAgICAgIFJFTEVBU0VfTE9HX0VSUk9S
KFdlYlJUQywgIkNvcmVBdWRpb1NoYXJlZFVuaXQ6OnNldHVwQXVkaW9Vbml0KCVwKSBBdWRpb1Vu
aXRJbml0aWFsaXplKCkgZmFpbGVkLCBlcnJvciAlZCAoJS40cykiLCB0aGlzLCAoaW50KWVyciwg
KGNoYXIqKSZlcnIpOwotICAgICAgICByZXR1cm4gZXJyOwotICAgIH0KLSAgICBtX2lvVW5pdElu
aXRpYWxpemVkID0gdHJ1ZTsKLQotICAgIHVuZHVjaygpOwotCi0gICAgcmV0dXJuIGVycjsKLX0K
LQotdm9pZCBDb3JlQXVkaW9TaGFyZWRVbml0Ojp1bmR1Y2soKQotewotICAgIHVpbnQzMl90IG91
dHB1dERldmljZTsKLSAgICBpZiAoIWRlZmF1bHRPdXRwdXREZXZpY2UoJm91dHB1dERldmljZSkp
Ci0gICAgICAgIEF1ZGlvRGV2aWNlRHVjayhvdXRwdXREZXZpY2UsIDEuMCwgbnVsbHB0ciwgMCk7
Ci19Ci0KLWludCBDb3JlQXVkaW9TaGFyZWRVbml0OjphY3R1YWxTYW1wbGVSYXRlKCkgY29uc3QK
LXsKLSAgICBMb2NrZXIgbG9ja2VyIHsgbV9zcGVha2VyU2FtcGxlc1Byb2R1Y2VyTG9jayB9Owot
ICAgIHJldHVybiBtX3NwZWFrZXJTYW1wbGVzUHJvZHVjZXIgPyBtX3NwZWFrZXJTYW1wbGVzUHJv
ZHVjZXItPmZvcm1hdCgpLnN0cmVhbURlc2NyaXB0aW9uKCkubVNhbXBsZVJhdGUgOiBzYW1wbGVS
YXRlKCk7Ci19Ci0KLU9TU3RhdHVzIENvcmVBdWRpb1NoYXJlZFVuaXQ6OmNvbmZpZ3VyZU1pY3Jv
cGhvbmVQcm9jKGludCBzYW1wbGVSYXRlKQotewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7
Ci0KLSAgICBBVVJlbmRlckNhbGxiYWNrU3RydWN0IGNhbGxiYWNrID0geyBtaWNyb3Bob25lQ2Fs
bGJhY2ssIHRoaXMgfTsKLSAgICBhdXRvIGVyciA9IFBBTDo6QXVkaW9Vbml0U2V0UHJvcGVydHko
bV9pb1VuaXQsIGtBdWRpb091dHB1dFVuaXRQcm9wZXJ0eV9TZXRJbnB1dENhbGxiYWNrLCBrQXVk
aW9Vbml0U2NvcGVfR2xvYmFsLCBpbnB1dEJ1cywgJmNhbGxiYWNrLCBzaXplb2YoY2FsbGJhY2sp
KTsKLSAgICBpZiAoZXJyKSB7Ci0gICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFdlYlJUQywgIkNv
cmVBdWRpb1NoYXJlZFVuaXQ6OmNvbmZpZ3VyZU1pY3JvcGhvbmVQcm9jKCVwKSB1bmFibGUgdG8g
c2V0IHZwaW8gdW5pdCBtaWMgcHJvYywgZXJyb3IgJWQgKCUuNHMpIiwgdGhpcywgKGludCllcnIs
IChjaGFyKikmZXJyKTsKLSAgICAgICAgcmV0dXJuIGVycjsKLSAgICB9Ci0KLSAgICBBdWRpb1N0
cmVhbUJhc2ljRGVzY3JpcHRpb24gbWljcm9waG9uZVByb2NGb3JtYXQgPSB7IH07Ci0KLSAgICBV
SW50MzIgc2l6ZSA9IHNpemVvZihtaWNyb3Bob25lUHJvY0Zvcm1hdCk7Ci0gICAgZXJyID0gUEFM
OjpBdWRpb1VuaXRHZXRQcm9wZXJ0eShtX2lvVW5pdCwga0F1ZGlvVW5pdFByb3BlcnR5X1N0cmVh
bUZvcm1hdCwga0F1ZGlvVW5pdFNjb3BlX091dHB1dCwgaW5wdXRCdXMsICZtaWNyb3Bob25lUHJv
Y0Zvcm1hdCwgJnNpemUpOwotICAgIGlmIChlcnIpIHsKLSAgICAgICAgUkVMRUFTRV9MT0dfRVJS
T1IoV2ViUlRDLCAiQ29yZUF1ZGlvU2hhcmVkVW5pdDo6Y29uZmlndXJlTWljcm9waG9uZVByb2Mo
JXApIHVuYWJsZSB0byBnZXQgb3V0cHV0IHN0cmVhbSBmb3JtYXQsIGVycm9yICVkICglLjRzKSIs
IHRoaXMsIChpbnQpZXJyLCAoY2hhciopJmVycik7Ci0gICAgICAgIHJldHVybiBlcnI7Ci0gICAg
fQotCi0gICAgbWljcm9waG9uZVByb2NGb3JtYXQubVNhbXBsZVJhdGUgPSBzYW1wbGVSYXRlOwot
ICAgIGVyciA9IFBBTDo6QXVkaW9Vbml0U2V0UHJvcGVydHkobV9pb1VuaXQsIGtBdWRpb1VuaXRQ
cm9wZXJ0eV9TdHJlYW1Gb3JtYXQsIGtBdWRpb1VuaXRTY29wZV9PdXRwdXQsIGlucHV0QnVzLCAm
bWljcm9waG9uZVByb2NGb3JtYXQsIHNpemUpOwotICAgIGlmIChlcnIpIHsKLSAgICAgICAgUkVM
RUFTRV9MT0dfRVJST1IoV2ViUlRDLCAiQ29yZUF1ZGlvU2hhcmVkVW5pdDo6Y29uZmlndXJlTWlj
cm9waG9uZVByb2MoJXApIHVuYWJsZSB0byBzZXQgb3V0cHV0IHN0cmVhbSBmb3JtYXQsIGVycm9y
ICVkICglLjRzKSIsIHRoaXMsIChpbnQpZXJyLCAoY2hhciopJmVycik7Ci0gICAgICAgIHJldHVy
biBlcnI7Ci0gICAgfQotCi0gICAgbV9taWNyb3Bob25lU2FtcGxlQnVmZmVyID0gQXVkaW9TYW1w
bGVCdWZmZXJMaXN0OjpjcmVhdGUobWljcm9waG9uZVByb2NGb3JtYXQsIHByZWZlcnJlZElPQnVm
ZmVyU2l6ZSgpICogMik7Ci0gICAgbV9taWNyb3Bob25lUHJvY0Zvcm1hdCA9IG1pY3JvcGhvbmVQ
cm9jRm9ybWF0OwotCi0gICAgcmV0dXJuIGVycjsKLX0KLQotT1NTdGF0dXMgQ29yZUF1ZGlvU2hh
cmVkVW5pdDo6Y29uZmlndXJlU3BlYWtlclByb2MoaW50IHNhbXBsZVJhdGUpCi17Ci0gICAgQVNT
RVJUKGlzTWFpblRocmVhZCgpKTsKLQotICAgIEFVUmVuZGVyQ2FsbGJhY2tTdHJ1Y3QgY2FsbGJh
Y2sgPSB7IHNwZWFrZXJDYWxsYmFjaywgdGhpcyB9OwotICAgIGF1dG8gZXJyID0gUEFMOjpBdWRp
b1VuaXRTZXRQcm9wZXJ0eShtX2lvVW5pdCwga0F1ZGlvVW5pdFByb3BlcnR5X1NldFJlbmRlckNh
bGxiYWNrLCBrQXVkaW9Vbml0U2NvcGVfSW5wdXQsIG91dHB1dEJ1cywgJmNhbGxiYWNrLCBzaXpl
b2YoY2FsbGJhY2spKTsKLSAgICBpZiAoZXJyKSB7Ci0gICAgICAgIFJFTEVBU0VfTE9HX0VSUk9S
KFdlYlJUQywgIkNvcmVBdWRpb1NoYXJlZFVuaXQ6OmNvbmZpZ3VyZVNwZWFrZXJQcm9jKCVwKSB1
bmFibGUgdG8gc2V0IHZwaW8gdW5pdCBzcGVha2VyIHByb2MsIGVycm9yICVkICglLjRzKSIsIHRo
aXMsIChpbnQpZXJyLCAoY2hhciopJmVycik7Ci0gICAgICAgIHJldHVybiBlcnI7Ci0gICAgfQot
Ci0gICAgQXVkaW9TdHJlYW1CYXNpY0Rlc2NyaXB0aW9uIHNwZWFrZXJQcm9jRm9ybWF0OwotICAg
IFVJbnQzMiBzaXplID0gc2l6ZW9mKHNwZWFrZXJQcm9jRm9ybWF0KTsKLSAgICB7Ci0gICAgICAg
IExvY2tlciBsb2NrZXIgeyBtX3NwZWFrZXJTYW1wbGVzUHJvZHVjZXJMb2NrIH07Ci0gICAgICAg
IGlmIChtX3NwZWFrZXJTYW1wbGVzUHJvZHVjZXIpIHsKLSAgICAgICAgICAgIHNwZWFrZXJQcm9j
Rm9ybWF0ID0gbV9zcGVha2VyU2FtcGxlc1Byb2R1Y2VyLT5mb3JtYXQoKS5zdHJlYW1EZXNjcmlw
dGlvbigpOwotICAgICAgICAgICAgQVNTRVJUKHNwZWFrZXJQcm9jRm9ybWF0Lm1TYW1wbGVSYXRl
ID09IHNhbXBsZVJhdGUpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgZXJyID0gUEFM
OjpBdWRpb1VuaXRHZXRQcm9wZXJ0eShtX2lvVW5pdCwga0F1ZGlvVW5pdFByb3BlcnR5X1N0cmVh
bUZvcm1hdCwga0F1ZGlvVW5pdFNjb3BlX0lucHV0LCBvdXRwdXRCdXMsICZzcGVha2VyUHJvY0Zv
cm1hdCwgJnNpemUpOwotICAgICAgICAgICAgaWYgKGVycikgewotICAgICAgICAgICAgICAgIFJF
TEVBU0VfTE9HX0VSUk9SKFdlYlJUQywgIkNvcmVBdWRpb1NoYXJlZFVuaXQ6OmNvbmZpZ3VyZVNw
ZWFrZXJQcm9jKCVwKSB1bmFibGUgdG8gZ2V0IGlucHV0IHN0cmVhbSBmb3JtYXQsIGVycm9yICVk
ICglLjRzKSIsIHRoaXMsIChpbnQpZXJyLCAoY2hhciopJmVycik7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIGVycjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBzcGVha2Vy
UHJvY0Zvcm1hdC5tU2FtcGxlUmF0ZSA9IHNhbXBsZVJhdGU7Ci0KLSAgICBlcnIgPSBQQUw6OkF1
ZGlvVW5pdFNldFByb3BlcnR5KG1faW9Vbml0LCBrQXVkaW9Vbml0UHJvcGVydHlfU3RyZWFtRm9y
bWF0LCBrQXVkaW9Vbml0U2NvcGVfSW5wdXQsIG91dHB1dEJ1cywgJnNwZWFrZXJQcm9jRm9ybWF0
LCBzaXplKTsKLSAgICBpZiAoZXJyKSB7Ci0gICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFdlYlJU
QywgIkNvcmVBdWRpb1NoYXJlZFVuaXQ6OmNvbmZpZ3VyZVNwZWFrZXJQcm9jKCVwKSB1bmFibGUg
dG8gZ2V0IGlucHV0IHN0cmVhbSBmb3JtYXQsIGVycm9yICVkICglLjRzKSIsIHRoaXMsIChpbnQp
ZXJyLCAoY2hhciopJmVycik7Ci0gICAgICAgIHJldHVybiBlcnI7Ci0gICAgfQotCi0gICAgbV9z
cGVha2VyUHJvY0Zvcm1hdCA9IHNwZWFrZXJQcm9jRm9ybWF0OwotCi0gICAgcmV0dXJuIGVycjsK
LX0KLQotI2lmICFMT0dfRElTQUJMRUQKLXZvaWQgQ29yZUF1ZGlvU2hhcmVkVW5pdDo6Y2hlY2tU
aW1lc3RhbXBzKGNvbnN0IEF1ZGlvVGltZVN0YW1wJiB0aW1lU3RhbXAsIHVpbnQ2NF90IHNhbXBs
ZVRpbWUsIGRvdWJsZSBob3N0VGltZSkKLXsKLSAgICBpZiAoIXRpbWVTdGFtcC5tU2FtcGxlVGlt
ZSB8fCBzYW1wbGVUaW1lID09IG1fbGF0ZXN0TWljVGltZVN0YW1wIHx8ICFob3N0VGltZSkKLSAg
ICAgICAgUkVMRUFTRV9MT0dfRVJST1IoV2ViUlRDLCAiQ29yZUF1ZGlvU2hhcmVkVW5pdDo6Y2hl
Y2tUaW1lc3RhbXBzOiB1bnVzdWFsIHRpbWVzdGFtcHMsIHNhbXBsZSB0aW1lID0gJWxsZCwgcHJl
dmlvdXMgc2FtcGxlIHRpbWUgPSAlbGxkLCBob3N0VGltZSAlZiIsIHNhbXBsZVRpbWUsIG1fbGF0
ZXN0TWljVGltZVN0YW1wLCBob3N0VGltZSk7Ci19Ci0jZW5kaWYKLQotT1NTdGF0dXMgQ29yZUF1
ZGlvU2hhcmVkVW5pdDo6cHJvdmlkZVNwZWFrZXJEYXRhKEF1ZGlvVW5pdFJlbmRlckFjdGlvbkZs
YWdzJiBmbGFncywgY29uc3QgQXVkaW9UaW1lU3RhbXAmIHRpbWVTdGFtcCwgVUludDMyIC8qaW5C
dXNOdW1iZXIqLywgVUludDMyIGluTnVtYmVyRnJhbWVzLCBBdWRpb0J1ZmZlckxpc3QmIGlvRGF0
YSkKLXsKLSAgICBpZiAobV9pc1JlY29uZmlndXJpbmcgfHwgIW1fc3BlYWtlclNhbXBsZXNQcm9k
dWNlckxvY2sudHJ5TG9jaygpKSB7Ci0gICAgICAgIEF1ZGlvU2FtcGxlQnVmZmVyTGlzdDo6emVy
b0FCTChpb0RhdGEsIHN0YXRpY19jYXN0PHNpemVfdD4oaW5OdW1iZXJGcmFtZXMgKiBtX3NwZWFr
ZXJQcm9jRm9ybWF0LmJ5dGVzUGVyRnJhbWUoKSkpOwotICAgICAgICBmbGFncyA9IGtBdWRpb1Vu
aXRSZW5kZXJBY3Rpb25fT3V0cHV0SXNTaWxlbmNlOwotICAgICAgICByZXR1cm4gbm9FcnI7Ci0g
ICAgfQotCi0gICAgTG9ja2VyIGxvY2tlciB7IEFkb3B0TG9jaywgbV9zcGVha2VyU2FtcGxlc1By
b2R1Y2VyTG9jayB9OwotICAgIGlmICghbV9zcGVha2VyU2FtcGxlc1Byb2R1Y2VyKSB7Ci0gICAg
ICAgIEF1ZGlvU2FtcGxlQnVmZmVyTGlzdDo6emVyb0FCTChpb0RhdGEsIHN0YXRpY19jYXN0PHNp
emVfdD4oaW5OdW1iZXJGcmFtZXMgKiBtX3NwZWFrZXJQcm9jRm9ybWF0LmJ5dGVzUGVyRnJhbWUo
KSkpOwotICAgICAgICBmbGFncyA9IGtBdWRpb1VuaXRSZW5kZXJBY3Rpb25fT3V0cHV0SXNTaWxl
bmNlOwotICAgICAgICByZXR1cm4gbm9FcnI7Ci0gICAgfQotICAgIHJldHVybiBtX3NwZWFrZXJT
YW1wbGVzUHJvZHVjZXItPnByb2R1Y2VTcGVha2VyU2FtcGxlcyhpbk51bWJlckZyYW1lcywgaW9E
YXRhLCB0aW1lU3RhbXAubVNhbXBsZVRpbWUsIHRpbWVTdGFtcC5tSG9zdFRpbWUsIGZsYWdzKTsK
LX0KLQotT1NTdGF0dXMgQ29yZUF1ZGlvU2hhcmVkVW5pdDo6c3BlYWtlckNhbGxiYWNrKHZvaWQg
KmluUmVmQ29uLCBBdWRpb1VuaXRSZW5kZXJBY3Rpb25GbGFncyogaW9BY3Rpb25GbGFncywgY29u
c3QgQXVkaW9UaW1lU3RhbXAqIGluVGltZVN0YW1wLCBVSW50MzIgaW5CdXNOdW1iZXIsIFVJbnQz
MiBpbk51bWJlckZyYW1lcywgQXVkaW9CdWZmZXJMaXN0KiBpb0RhdGEpCi17Ci0gICAgQVNTRVJU
KGlvQWN0aW9uRmxhZ3MpOwotICAgIEFTU0VSVChpblRpbWVTdGFtcCk7Ci0gICAgYXV0byBkYXRh
U291cmNlID0gc3RhdGljX2Nhc3Q8Q29yZUF1ZGlvU2hhcmVkVW5pdCo+KGluUmVmQ29uKTsKLSAg
ICByZXR1cm4gZGF0YVNvdXJjZS0+cHJvdmlkZVNwZWFrZXJEYXRhKCppb0FjdGlvbkZsYWdzLCAq
aW5UaW1lU3RhbXAsIGluQnVzTnVtYmVyLCBpbk51bWJlckZyYW1lcywgKmlvRGF0YSk7Ci19Ci0K
LU9TU3RhdHVzIENvcmVBdWRpb1NoYXJlZFVuaXQ6OnByb2Nlc3NNaWNyb3Bob25lU2FtcGxlcyhB
dWRpb1VuaXRSZW5kZXJBY3Rpb25GbGFncyYgaW9BY3Rpb25GbGFncywgY29uc3QgQXVkaW9UaW1l
U3RhbXAmIHRpbWVTdGFtcCwgVUludDMyIGluQnVzTnVtYmVyLCBVSW50MzIgaW5OdW1iZXJGcmFt
ZXMsIEF1ZGlvQnVmZmVyTGlzdCogLyppb0RhdGEqLykKLXsKLSAgICArK21fbWljcm9waG9uZVBy
b2NzQ2FsbGVkOwotCi0gICAgaWYgKG1faXNSZWNvbmZpZ3VyaW5nKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICAvLyBQdWxsIHRocm91Z2ggdGhlIHZwaW8gdW5pdCB0byBvdXIgbWljIGJ1
ZmZlci4KLSAgICBtX21pY3JvcGhvbmVTYW1wbGVCdWZmZXItPnJlc2V0KCk7Ci0gICAgQXVkaW9C
dWZmZXJMaXN0JiBidWZmZXJMaXN0ID0gbV9taWNyb3Bob25lU2FtcGxlQnVmZmVyLT5idWZmZXJM
aXN0KCk7Ci0gICAgYXV0byBlcnIgPSBBdWRpb1VuaXRSZW5kZXIobV9pb1VuaXQsICZpb0FjdGlv
bkZsYWdzLCAmdGltZVN0YW1wLCBpbkJ1c051bWJlciwgaW5OdW1iZXJGcmFtZXMsICZidWZmZXJM
aXN0KTsKLSAgICBpZiAoZXJyKSB7Ci0gICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFdlYlJUQywg
IkNvcmVBdWRpb1NoYXJlZFVuaXQ6OnByb2Nlc3NNaWNyb3Bob25lU2FtcGxlcyglcCkgQXVkaW9V
bml0UmVuZGVyIGZhaWxlZCB3aXRoIGVycm9yICVkICglLjRzKSwgYnVmZmVyTGlzdCBzaXplICVk
LCBpbk51bWJlckZyYW1lcyAlZCAiLCB0aGlzLCAoaW50KWVyciwgKGNoYXIqKSZlcnIsIChpbnQp
YnVmZmVyTGlzdC5tQnVmZmVyc1swXS5tRGF0YUJ5dGVTaXplLCAoaW50KWluTnVtYmVyRnJhbWVz
KTsKLSAgICAgICAgaWYgKGVyciA9PSBrQXVkaW9fUGFyYW1FcnJvcikgewotICAgICAgICAgICAg
Ly8gT3VyIGJ1ZmZlciBtaWdodCBiZSB0b28gc21hbGwsIHRoZSBwcmVmZXJyZWQgYnVmZmVyIHNp
emUgb3Igc2FtcGxlIHJhdGUgbWlnaHQgaGF2ZSBjaGFuZ2VkLgotICAgICAgICAgICAgY2FsbE9u
TWFpblRocmVhZChbXSB7Ci0gICAgICAgICAgICAgICAgQ29yZUF1ZGlvU2hhcmVkVW5pdDo6c2lu
Z2xldG9uKCkucmVjb25maWd1cmUoKTsKLSAgICAgICAgICAgIH0pOwotICAgICAgICB9Ci0gICAg
ICAgIC8vIFdlIHJldHVybiBlYXJseSBzbyB0aGF0IGlmIHRoaXMgZXJyb3IgaGFwcGVucywgd2Ug
ZG8gbm90IGluY3JlbWVudCBtX21pY3JvcGhvbmVQcm9jc0NhbGxlZCBhbmQgZmFpbCB0aGUgY2Fw
dHVyZSBvbmNlIHRpbWVyIGtpY2tzIGluLgotICAgICAgICByZXR1cm4gZXJyOwotICAgIH0KLQot
ICAgIGlmICghaXNQcm9kdWNpbmdNaWNyb3Bob25lU2FtcGxlcygpKQotICAgICAgICByZXR1cm4g
bm9FcnI7Ci0KLSAgICBkb3VibGUgYWRqdXN0ZWRIb3N0VGltZSA9IG1fRFRTQ29udmVyc2lvblJh
dGlvICogdGltZVN0YW1wLm1Ib3N0VGltZTsKLSAgICB1aW50NjRfdCBzYW1wbGVUaW1lID0gdGlt
ZVN0YW1wLm1TYW1wbGVUaW1lOwotI2lmICFMT0dfRElTQUJMRUQKLSAgICBjaGVja1RpbWVzdGFt
cHModGltZVN0YW1wLCBzYW1wbGVUaW1lLCBhZGp1c3RlZEhvc3RUaW1lKTsKLSNlbmRpZgotICAg
IG1fbGF0ZXN0TWljVGltZVN0YW1wID0gc2FtcGxlVGltZTsKLSAgICBtX21pY3JvcGhvbmVTYW1w
bGVCdWZmZXItPnNldFRpbWVzKGFkanVzdGVkSG9zdFRpbWUsIHNhbXBsZVRpbWUpOwotCi0gICAg
aWYgKHZvbHVtZSgpICE9IDEuMCkKLSAgICAgICAgbV9taWNyb3Bob25lU2FtcGxlQnVmZmVyLT5h
cHBseUdhaW4odm9sdW1lKCkpOwotCi0gICAgYXVkaW9TYW1wbGVzQXZhaWxhYmxlKE1lZGlhVGlt
ZShzYW1wbGVUaW1lLCBtX21pY3JvcGhvbmVQcm9jRm9ybWF0LnNhbXBsZVJhdGUoKSksIG1fbWlj
cm9waG9uZVNhbXBsZUJ1ZmZlci0+YnVmZmVyTGlzdCgpLCBtX21pY3JvcGhvbmVQcm9jRm9ybWF0
LCBpbk51bWJlckZyYW1lcyk7Ci0gICAgcmV0dXJuIG5vRXJyOwotfQotCi1PU1N0YXR1cyBDb3Jl
QXVkaW9TaGFyZWRVbml0OjptaWNyb3Bob25lQ2FsbGJhY2sodm9pZCAqaW5SZWZDb24sIEF1ZGlv
VW5pdFJlbmRlckFjdGlvbkZsYWdzKiBpb0FjdGlvbkZsYWdzLCBjb25zdCBBdWRpb1RpbWVTdGFt
cCogaW5UaW1lU3RhbXAsIFVJbnQzMiBpbkJ1c051bWJlciwgVUludDMyIGluTnVtYmVyRnJhbWVz
LCBBdWRpb0J1ZmZlckxpc3QqIGlvRGF0YSkKLXsKLSAgICBBU1NFUlQoaW9BY3Rpb25GbGFncyk7
Ci0gICAgQVNTRVJUKGluVGltZVN0YW1wKTsKLSAgICBDb3JlQXVkaW9TaGFyZWRVbml0KiBkYXRh
U291cmNlID0gc3RhdGljX2Nhc3Q8Q29yZUF1ZGlvU2hhcmVkVW5pdCo+KGluUmVmQ29uKTsKLSAg
ICByZXR1cm4gZGF0YVNvdXJjZS0+cHJvY2Vzc01pY3JvcGhvbmVTYW1wbGVzKCppb0FjdGlvbkZs
YWdzLCAqaW5UaW1lU3RhbXAsIGluQnVzTnVtYmVyLCBpbk51bWJlckZyYW1lcywgaW9EYXRhKTsK
LX0KLQotdm9pZCBDb3JlQXVkaW9TaGFyZWRVbml0OjpjbGVhbnVwQXVkaW9Vbml0KCkKLXsKLSAg
ICBpZiAobV9pb1VuaXRJbml0aWFsaXplZCkgewotICAgICAgICBBU1NFUlQobV9pb1VuaXQpOwot
ICAgICAgICBhdXRvIGVyciA9IEF1ZGlvVW5pdFVuaW5pdGlhbGl6ZShtX2lvVW5pdCk7Ci0gICAg
ICAgIGlmIChlcnIpCi0gICAgICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihXZWJSVEMsICJDb3Jl
QXVkaW9TaGFyZWRVbml0OjpjbGVhbnVwQXVkaW9Vbml0KCVwKSBBdWRpb1VuaXRVbmluaXRpYWxp
emUgZmFpbGVkIHdpdGggZXJyb3IgJWQgKCUuNHMpIiwgdGhpcywgKGludCllcnIsIChjaGFyKikm
ZXJyKTsKLSAgICAgICAgbV9pb1VuaXRJbml0aWFsaXplZCA9IGZhbHNlOwotICAgIH0KLQotICAg
IGlmIChtX2lvVW5pdCkgewotICAgICAgICBQQUw6OkF1ZGlvQ29tcG9uZW50SW5zdGFuY2VEaXNw
b3NlKG1faW9Vbml0KTsKLSAgICAgICAgbV9pb1VuaXQgPSBudWxscHRyOwotICAgIH0KLQotICAg
IG1fbWljcm9waG9uZVNhbXBsZUJ1ZmZlciA9IG51bGxwdHI7Ci0jaWYgIUxPR19ESVNBQkxFRAot
ICAgIG1faW9Vbml0TmFtZSA9IGVtcHR5U3RyaW5nKCk7Ci0jZW5kaWYKLX0KLQotT1NTdGF0dXMg
Q29yZUF1ZGlvU2hhcmVkVW5pdDo6cmVjb25maWd1cmVBdWRpb1VuaXQoKQotewotICAgIEFTU0VS
VChpc01haW5UaHJlYWQoKSk7Ci0gICAgT1NTdGF0dXMgZXJyOwotICAgIGlmICghaGFzQXVkaW9V
bml0KCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgbV9pc1JlY29uZmlndXJpbmcgPSB0cnVl
OwotICAgIGF1dG8gc2NvcGUgPSBtYWtlU2NvcGVFeGl0KFt0aGlzXSB7IG1faXNSZWNvbmZpZ3Vy
aW5nID0gZmFsc2U7IH0pOwotCi0gICAgaWYgKG1faW9Vbml0U3RhcnRlZCkgewotICAgICAgICBl
cnIgPSBQQUw6OkF1ZGlvT3V0cHV0VW5pdFN0b3AobV9pb1VuaXQpOwotICAgICAgICBpZiAoZXJy
KSB7Ci0gICAgICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihXZWJSVEMsICJDb3JlQXVkaW9TaGFy
ZWRVbml0OjpyZWNvbmZpZ3VyZUF1ZGlvVW5pdCglcCkgQXVkaW9PdXRwdXRVbml0U3RvcCBmYWls
ZWQgd2l0aCBlcnJvciAlZCAoJS40cykiLCB0aGlzLCAoaW50KWVyciwgKGNoYXIqKSZlcnIpOwot
ICAgICAgICAgICAgcmV0dXJuIGVycjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGNsZWFudXBB
dWRpb1VuaXQoKTsKLSAgICBlcnIgPSBzZXR1cEF1ZGlvVW5pdCgpOwotICAgIGlmIChlcnIpCi0g
ICAgICAgIHJldHVybiBlcnI7Ci0KLSAgICBpZiAobV9pb1VuaXRTdGFydGVkKSB7Ci0gICAgICAg
IGVyciA9IFBBTDo6QXVkaW9PdXRwdXRVbml0U3RhcnQobV9pb1VuaXQpOwotICAgICAgICBpZiAo
ZXJyKSB7Ci0gICAgICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihXZWJSVEMsICJDb3JlQXVkaW9T
aGFyZWRVbml0OjpyZWNvbmZpZ3VyZUF1ZGlvVW5pdCglcCkgQXVkaW9PdXRwdXRVbml0U3RhcnQg
ZmFpbGVkIHdpdGggZXJyb3IgJWQgKCUuNHMpIiwgdGhpcywgKGludCllcnIsIChjaGFyKikmZXJy
KTsKLSAgICAgICAgICAgIHJldHVybiBlcnI7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJu
IGVycjsKLX0KLQotT1NTdGF0dXMgQ29yZUF1ZGlvU2hhcmVkVW5pdDo6c3RhcnRJbnRlcm5hbCgp
Ci17Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLQotICAgIHNldElzUHJvZHVjaW5nTWlj
cm9waG9uZVNhbXBsZXModHJ1ZSk7Ci0KLSAgICBPU1N0YXR1cyBlcnI7Ci0gICAgaWYgKCFtX2lv
VW5pdCkgewotICAgICAgICBlcnIgPSBzZXR1cEF1ZGlvVW5pdCgpOwotICAgICAgICBpZiAoZXJy
KSB7Ci0gICAgICAgICAgICBjbGVhbnVwQXVkaW9Vbml0KCk7Ci0gICAgICAgICAgICBBU1NFUlQo
IW1faW9Vbml0KTsKLSAgICAgICAgICAgIHJldHVybiBlcnI7Ci0gICAgICAgIH0KLSAgICAgICAg
QVNTRVJUKG1faW9Vbml0KTsKLSAgICB9Ci0KLSAgICB1bmR1Y2soKTsKLQotICAgIHsKLSAgICAg
ICAgTG9ja2VyIGxvY2tlciB7IG1fc3BlYWtlclNhbXBsZXNQcm9kdWNlckxvY2sgfTsKLSAgICAg
ICAgaWYgKG1fc3BlYWtlclNhbXBsZXNQcm9kdWNlcikKLSAgICAgICAgICAgIG1fc3BlYWtlclNh
bXBsZXNQcm9kdWNlci0+Y2FwdHVyZVVuaXRJc1N0YXJ0aW5nKCk7Ci0gICAgfQotCi0gICAgZXJy
ID0gUEFMOjpBdWRpb091dHB1dFVuaXRTdGFydChtX2lvVW5pdCk7Ci0gICAgaWYgKGVycikgewot
ICAgICAgICB7Ci0gICAgICAgICAgICBMb2NrZXIgbG9ja2VyIHsgbV9zcGVha2VyU2FtcGxlc1By
b2R1Y2VyTG9jayB9OwotICAgICAgICAgICAgaWYgKG1fc3BlYWtlclNhbXBsZXNQcm9kdWNlcikK
LSAgICAgICAgICAgICAgICBtX3NwZWFrZXJTYW1wbGVzUHJvZHVjZXItPmNhcHR1cmVVbml0SGFz
U3RvcHBlZCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoV2ViUlRD
LCAiQ29yZUF1ZGlvU2hhcmVkVW5pdDo6c3RhcnQoJXApIEF1ZGlvT3V0cHV0VW5pdFN0YXJ0IGZh
aWxlZCB3aXRoIGVycm9yICVkICglLjRzKSIsIHRoaXMsIChpbnQpZXJyLCAoY2hhciopJmVycik7
Ci0gICAgICAgIGNsZWFudXBBdWRpb1VuaXQoKTsKLSAgICAgICAgQVNTRVJUKCFtX2lvVW5pdCk7
Ci0gICAgICAgIHJldHVybiBlcnI7Ci0gICAgfQotCi0gICAgbV9pb1VuaXRTdGFydGVkID0gdHJ1
ZTsKLQotICAgIG1fdmVyaWZ5Q2FwdHVyaW5nVGltZXIuc3RhcnRSZXBlYXRpbmcodmVyaWZ5Q2Fw
dHVyZUludGVydmFsKCkpOwotICAgIG1fbWljcm9waG9uZVByb2NzQ2FsbGVkID0gMDsKLSAgICBt
X21pY3JvcGhvbmVQcm9jc0NhbGxlZExhc3RUaW1lID0gMDsKLQotICAgIHJldHVybiAwOwotfQot
Ci12b2lkIENvcmVBdWRpb1NoYXJlZFVuaXQ6OmlzUHJvZHVjaW5nTWljcm9waG9uZVNhbXBsZXND
aGFuZ2VkKCkKLXsKLSAgICBpZiAoIWlzUHJvZHVjaW5nRGF0YSgpKQotICAgICAgICByZXR1cm47
Ci0gICAgbV92ZXJpZnlDYXB0dXJpbmdUaW1lci5zdGFydFJlcGVhdGluZyh2ZXJpZnlDYXB0dXJl
SW50ZXJ2YWwoKSk7Ci19Ci0KLXZvaWQgQ29yZUF1ZGlvU2hhcmVkVW5pdDo6dmFsaWRhdGVPdXRw
dXREZXZpY2UodWludDMyX3QgY3VycmVudE91dHB1dERldmljZUlEKQotewotI2lmIFBMQVRGT1JN
KE1BQykKLSAgICB1aW50MzJfdCBjdXJyZW50RGVmYXVsdE91dHB1dERldmljZUlEID0gMDsKLSAg
ICBpZiAoYXV0byBlcnIgPSBkZWZhdWx0T3V0cHV0RGV2aWNlKCZjdXJyZW50RGVmYXVsdE91dHB1
dERldmljZUlEKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFjdXJyZW50RGVmYXVsdE91
dHB1dERldmljZUlEIHx8IGN1cnJlbnRPdXRwdXREZXZpY2VJRCA9PSBjdXJyZW50RGVmYXVsdE91
dHB1dERldmljZUlEKQotICAgICAgICByZXR1cm47Ci0KLSAgICByZWNvbmZpZ3VyZSgpOwotI2Vs
c2UKLSAgICBVTlVTRURfUEFSQU0oY3VycmVudE91dHB1dERldmljZUlEKTsKLSNlbmRpZgotfQot
Ci12b2lkIENvcmVBdWRpb1NoYXJlZFVuaXQ6OnZlcmlmeUlzQ2FwdHVyaW5nKCkKLXsKLSAgICBp
ZiAobV9taWNyb3Bob25lUHJvY3NDYWxsZWRMYXN0VGltZSAhPSBtX21pY3JvcGhvbmVQcm9jc0Nh
bGxlZCkgewotICAgICAgICBtX21pY3JvcGhvbmVQcm9jc0NhbGxlZExhc3RUaW1lID0gbV9taWNy
b3Bob25lUHJvY3NDYWxsZWQ7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBSRUxFQVNF
X0xPR19FUlJPUihXZWJSVEMsICJDb3JlQXVkaW9TaGFyZWRVbml0Ojp2ZXJpZnlJc0NhcHR1cmlu
ZyAtIG5vIGF1ZGlvIHJlY2VpdmVkIGluICVkIHNlY29uZHMsIGZhaWxpbmciLCBzdGF0aWNfY2Fz
dDxpbnQ+KG1fdmVyaWZ5Q2FwdHVyaW5nVGltZXIucmVwZWF0SW50ZXJ2YWwoKS52YWx1ZSgpKSk7
Ci0gICAgY2FwdHVyZUZhaWxlZCgpOwotfQotCi12b2lkIENvcmVBdWRpb1NoYXJlZFVuaXQ6OnN0
b3BJbnRlcm5hbCgpCi17Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLQotICAgIG1fdmVy
aWZ5Q2FwdHVyaW5nVGltZXIuc3RvcCgpOwotCi0gICAgaWYgKCFtX2lvVW5pdCB8fCAhbV9pb1Vu
aXRTdGFydGVkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvIGVyciA9IFBBTDo6QXVkaW9P
dXRwdXRVbml0U3RvcChtX2lvVW5pdCk7Ci0gICAgaWYgKGVycikgewotICAgICAgICBSRUxFQVNF
X0xPR19FUlJPUihXZWJSVEMsICJDb3JlQXVkaW9TaGFyZWRVbml0OjpzdG9wKCVwKSBBdWRpb091
dHB1dFVuaXRTdG9wIGZhaWxlZCB3aXRoIGVycm9yICVkICglLjRzKSIsIHRoaXMsIChpbnQpZXJy
LCAoY2hhciopJmVycik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgewotICAgICAgICBM
b2NrZXIgbG9ja2VyIHsgbV9zcGVha2VyU2FtcGxlc1Byb2R1Y2VyTG9jayB9OwotICAgICAgICBp
ZiAobV9zcGVha2VyU2FtcGxlc1Byb2R1Y2VyKQotICAgICAgICAgICAgbV9zcGVha2VyU2FtcGxl
c1Byb2R1Y2VyLT5jYXB0dXJlVW5pdEhhc1N0b3BwZWQoKTsKLSAgICB9Ci0KLSAgICBtX2lvVW5p
dFN0YXJ0ZWQgPSBmYWxzZTsKLX0KLQotT1NTdGF0dXMgQ29yZUF1ZGlvU2hhcmVkVW5pdDo6ZGVm
YXVsdElucHV0RGV2aWNlKHVpbnQzMl90KiBkZXZpY2VJRCkKLXsKLSAgICBBU1NFUlQobV9pb1Vu
aXQpOwotCi0gICAgVUludDMyIHByb3BlcnR5U2l6ZSA9IHNpemVvZigqZGV2aWNlSUQpOwotICAg
IGF1dG8gZXJyID0gUEFMOjpBdWRpb1VuaXRHZXRQcm9wZXJ0eShtX2lvVW5pdCwga0F1ZGlvT3V0
cHV0VW5pdFByb3BlcnR5X0N1cnJlbnREZXZpY2UsIGtBdWRpb1VuaXRTY29wZV9HbG9iYWwsIGlu
cHV0QnVzLCBkZXZpY2VJRCwgJnByb3BlcnR5U2l6ZSk7Ci0gICAgaWYgKGVycikKLSAgICAgICAg
UkVMRUFTRV9MT0dfRVJST1IoV2ViUlRDLCAiQ29yZUF1ZGlvU2hhcmVkVW5pdDo6ZGVmYXVsdElu
cHV0RGV2aWNlKCVwKSB1bmFibGUgdG8gZ2V0IGRlZmF1bHQgaW5wdXQgZGV2aWNlIElELCBlcnJv
ciAlZCAoJS40cykiLCB0aGlzLCAoaW50KWVyciwgKGNoYXIqKSZlcnIpOwotCi0gICAgcmV0dXJu
IGVycjsKLX0KLQotT1NTdGF0dXMgQ29yZUF1ZGlvU2hhcmVkVW5pdDo6ZGVmYXVsdE91dHB1dERl
dmljZSh1aW50MzJfdCogZGV2aWNlSUQpCi17Ci0gICAgT1NFcnIgZXJyID0gLTE7Ci0jaWYgUExB
VEZPUk0oTUFDKQotICAgIEF1ZGlvT2JqZWN0UHJvcGVydHlBZGRyZXNzIGFkZHJlc3MgPSB7Ci0g
ICAgICAgIGtBdWRpb0hhcmR3YXJlUHJvcGVydHlEZWZhdWx0T3V0cHV0RGV2aWNlLAotICAgICAg
ICBrQXVkaW9PYmplY3RQcm9wZXJ0eVNjb3BlR2xvYmFsLAotI2lmIEhBVkUoQVVESU9fT0JKRUNU
X1BST1BFUlRZX0VMRU1FTlRfTUFJTikKLSAgICAgICAga0F1ZGlvT2JqZWN0UHJvcGVydHlFbGVt
ZW50TWFpbgotI2Vsc2UKLSAgICAgICAgQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfQkVH
SU4KLSAgICAgICAga0F1ZGlvT2JqZWN0UHJvcGVydHlFbGVtZW50TWFzdGVyCi0gICAgICAgIEFM
TE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0VORAotI2VuZGlmCi0gICAgfTsKLQotICAgIGlm
IChBdWRpb09iamVjdEhhc1Byb3BlcnR5KGtBdWRpb09iamVjdFN5c3RlbU9iamVjdCwgJmFkZHJl
c3MpKSB7Ci0gICAgICAgIFVJbnQzMiBwcm9wZXJ0eVNpemUgPSBzaXplb2YoQXVkaW9EZXZpY2VJ
RCk7Ci0gICAgICAgIGVyciA9IEF1ZGlvT2JqZWN0R2V0UHJvcGVydHlEYXRhKGtBdWRpb09iamVj
dFN5c3RlbU9iamVjdCwgJmFkZHJlc3MsIDAsIG51bGxwdHIsICZwcm9wZXJ0eVNpemUsIGRldmlj
ZUlEKTsKLSAgICB9Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShkZXZpY2VJRCk7Ci0jZW5kaWYK
LSAgICByZXR1cm4gZXJyOwotfQotCi12b2lkIENvcmVBdWRpb1NoYXJlZFVuaXQ6OnJlZ2lzdGVy
U3BlYWtlclNhbXBsZXNQcm9kdWNlcihDb3JlQXVkaW9TcGVha2VyU2FtcGxlc1Byb2R1Y2VyJiBw
cm9kdWNlcikKLXsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotCi0gICAgc2V0SXNSZW5k
ZXJpbmdBdWRpbyh0cnVlKTsKLQotICAgIENvcmVBdWRpb1NwZWFrZXJTYW1wbGVzUHJvZHVjZXIq
IG9sZFByb2R1Y2VyOwotICAgIHsKLSAgICAgICAgTG9ja2VyIGxvY2tlciB7IG1fc3BlYWtlclNh
bXBsZXNQcm9kdWNlckxvY2sgfTsKLSAgICAgICAgb2xkUHJvZHVjZXIgPSBtX3NwZWFrZXJTYW1w
bGVzUHJvZHVjZXI7Ci0gICAgICAgIG1fc3BlYWtlclNhbXBsZXNQcm9kdWNlciA9ICZwcm9kdWNl
cjsKLSAgICB9Ci0gICAgaWYgKG9sZFByb2R1Y2VyICYmIG9sZFByb2R1Y2VyICE9ICZwcm9kdWNl
cikKLSAgICAgICAgb2xkUHJvZHVjZXItPmNhcHR1cmVVbml0SGFzU3RvcHBlZCgpOwotCi0gICAg
aWYgKGhhc0F1ZGlvVW5pdCgpICYmIHByb2R1Y2VyLmZvcm1hdCgpICE9IG1fc3BlYWtlclByb2NG
b3JtYXQpCi0gICAgICAgIHJlY29uZmlndXJlKCk7Ci19Ci0KLXZvaWQgQ29yZUF1ZGlvU2hhcmVk
VW5pdDo6dW5yZWdpc3RlclNwZWFrZXJTYW1wbGVzUHJvZHVjZXIoQ29yZUF1ZGlvU3BlYWtlclNh
bXBsZXNQcm9kdWNlciYgcHJvZHVjZXIpCi17Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsK
LQotICAgIHsKLSAgICAgICAgTG9ja2VyIGxvY2tlciB7IG1fc3BlYWtlclNhbXBsZXNQcm9kdWNl
ckxvY2sgfTsKLSAgICAgICAgaWYgKG1fc3BlYWtlclNhbXBsZXNQcm9kdWNlciAhPSAmcHJvZHVj
ZXIpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIG1fc3BlYWtlclNhbXBsZXNQcm9kdWNl
ciA9IG51bGxwdHI7Ci0gICAgfQotCi0gICAgc2V0SXNSZW5kZXJpbmdBdWRpbyhmYWxzZSk7Ci19
Ci0KIHN0YXRpYyBDYXB0dXJlU291cmNlT3JFcnJvciBpbml0aWFsaXplQ29yZUF1ZGlvQ2FwdHVy
ZVNvdXJjZShSZWY8Q29yZUF1ZGlvQ2FwdHVyZVNvdXJjZT4mJiBzb3VyY2UsIGNvbnN0IE1lZGlh
Q29uc3RyYWludHMqIGNvbnN0cmFpbnRzKQogewogICAgIGlmIChjb25zdHJhaW50cykgewpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0NvcmVBdWRp
b1NoYXJlZFVuaXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFj
L0NvcmVBdWRpb1NoYXJlZFVuaXQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZjZWI1ZTA3ZmI2NTgyYzI3NTE2
YjAxMjg3Y2M1N2M1MDZjMDAzMWYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQ29yZUF1ZGlvU2hhcmVkVW5pdC5jcHAKQEAgLTAsMCAr
MSw2NDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDb3JlQXVkaW9TaGFyZWRVbml0Lmgi
CisKKyNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQorCisjaW5jbHVkZSAiQXVkaW9TYW1wbGVCdWZm
ZXJMaXN0LmgiCisjaW5jbHVkZSAiQXVkaW9TZXNzaW9uLmgiCisjaW5jbHVkZSAiQ29yZUF1ZGlv
Q2FwdHVyZVNvdXJjZS5oIgorI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRlIDxBdWRpb1Rv
b2xib3gvQXVkaW9Db252ZXJ0ZXIuaD4KKyNpbmNsdWRlIDxBdWRpb1VuaXQvQXVkaW9Vbml0Lmg+
CisjaW5jbHVkZSA8Q29yZU1lZGlhL0NNU3luYy5oPgorI2luY2x1ZGUgPG1hY2gvbWFjaF90aW1l
Lmg+CisjaW5jbHVkZSA8cGFsL2F2Zm91bmRhdGlvbi9NZWRpYVRpbWVBVkZvdW5kYXRpb24uaD4K
KyNpbmNsdWRlIDxwYWwvc3BpL2NmL0NvcmVBdWRpb1NQSS5oPgorI2luY2x1ZGUgPHN5cy90aW1l
Lmg+CisjaW5jbHVkZSA8d3RmL0FsZ29yaXRobXMuaD4KKyNpbmNsdWRlIDx3dGYvTG9jay5oPgor
I2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVk
Lmg+CisjaW5jbHVkZSA8d3RmL1Njb3BlLmg+CisKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQor
I2luY2x1ZGUgIkFWQXVkaW9TZXNzaW9uQ2FwdHVyZURldmljZU1hbmFnZXIuaCIKKyNlbmRpZgor
CisjaW5jbHVkZSA8cGFsL2NmL0F1ZGlvVG9vbGJveFNvZnRMaW5rLmg+CisjaW5jbHVkZSA8cGFs
L2NmL0NvcmVNZWRpYVNvZnRMaW5rLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY29uc3Qg
VUludDMyIG91dHB1dEJ1cyA9IDA7Citjb25zdCBVSW50MzIgaW5wdXRCdXMgPSAxOworCitjbGFz
cyBDb3JlQXVkaW9TaGFyZWRJbnRlcm5hbFVuaXQgOiAgcHVibGljIENvcmVBdWRpb1NoYXJlZFVu
aXQ6OkludGVybmFsVW5pdCB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6
CisgICAgc3RhdGljIEV4cGVjdGVkPFVuaXF1ZVJlZjxJbnRlcm5hbFVuaXQ+LCBPU1N0YXR1cz4g
Y3JlYXRlKCk7CisgICAgZXhwbGljaXQgQ29yZUF1ZGlvU2hhcmVkSW50ZXJuYWxVbml0KEF1ZGlv
VW5pdCk7CisgICAgfkNvcmVBdWRpb1NoYXJlZEludGVybmFsVW5pdCgpIGZpbmFsOworCitwcml2
YXRlOgorICAgIE9TU3RhdHVzIGluaXRpYWxpemUoKSBmaW5hbDsKKyAgICBPU1N0YXR1cyB1bmlu
aXRpYWxpemUoKSBmaW5hbDsKKyAgICBPU1N0YXR1cyBzdGFydCgpIGZpbmFsOworICAgIE9TU3Rh
dHVzIHN0b3AoKSBmaW5hbDsKKyAgICBPU1N0YXR1cyBzZXQoQXVkaW9Vbml0UHJvcGVydHlJRCwg
QXVkaW9Vbml0U2NvcGUsIEF1ZGlvVW5pdEVsZW1lbnQsIGNvbnN0IHZvaWQqLCBVSW50MzIpIGZp
bmFsOworICAgIE9TU3RhdHVzIGdldChBdWRpb1VuaXRQcm9wZXJ0eUlELCBBdWRpb1VuaXRTY29w
ZSwgQXVkaW9Vbml0RWxlbWVudCwgdm9pZCosIFVJbnQzMiopIGZpbmFsOworICAgIE9TU3RhdHVz
IHJlbmRlcihBdWRpb1VuaXRSZW5kZXJBY3Rpb25GbGFncyosIGNvbnN0IEF1ZGlvVGltZVN0YW1w
KiwgVUludDMyLCBVSW50MzIsIEF1ZGlvQnVmZmVyTGlzdCopIGZpbmFsOworICAgIE9TU3RhdHVz
IGRlZmF1bHRJbnB1dERldmljZSh1aW50MzJfdCopIGZpbmFsOworICAgIE9TU3RhdHVzIGRlZmF1
bHRPdXRwdXREZXZpY2UodWludDMyX3QqKSBmaW5hbDsKKworICAgIEF1ZGlvVW5pdCBtX2lvVW5p
dCB7IG51bGxwdHIgfTsKK307CisKK0V4cGVjdGVkPFVuaXF1ZVJlZjxDb3JlQXVkaW9TaGFyZWRV
bml0OjpJbnRlcm5hbFVuaXQ+LCBPU1N0YXR1cz4gQ29yZUF1ZGlvU2hhcmVkSW50ZXJuYWxVbml0
OjpjcmVhdGUoKQoreworICAgIEF1ZGlvQ29tcG9uZW50RGVzY3JpcHRpb24gaW9Vbml0RGVzY3Jp
cHRpb24gPSB7IGtBdWRpb1VuaXRUeXBlX091dHB1dCwga0F1ZGlvVW5pdFN1YlR5cGVfVm9pY2VQ
cm9jZXNzaW5nSU8sIGtBdWRpb1VuaXRNYW51ZmFjdHVyZXJfQXBwbGUsIDAsIDAgfTsKKyAgICBB
dWRpb0NvbXBvbmVudCBpb0NvbXBvbmVudCA9IFBBTDo6QXVkaW9Db21wb25lbnRGaW5kTmV4dChu
dWxscHRyLCAmaW9Vbml0RGVzY3JpcHRpb24pOworICAgIEFTU0VSVChpb0NvbXBvbmVudCk7Cisg
ICAgaWYgKCFpb0NvbXBvbmVudCkgeworICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihXZWJSVEMs
ICJDb3JlQXVkaW9TaGFyZWRJbnRlcm5hbFVuaXQgdW5hYmxlIHRvIGZpbmQgdnBpbyB1bml0IGNv
bXBvbmVudCIpOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoLTEpOworICAgIH0KKwor
I2lmICFMT0dfRElTQUJMRUQKKyAgICBDRlN0cmluZ1JlZiBuYW1lID0gbnVsbHB0cjsKKyAgICBQ
QUw6OkF1ZGlvQ29tcG9uZW50Q29weU5hbWUoaW9Db21wb25lbnQsICZuYW1lKTsKKyAgICBpZiAo
bmFtZSkgeworICAgICAgICBTdHJpbmcgaW9Vbml0TmFtZSA9IG5hbWU7CisgICAgICAgIENGUmVs
ZWFzZShuYW1lKTsKKyAgICAgICAgUkVMRUFTRV9MT0coV2ViUlRDLCAiQ29yZUF1ZGlvU2hhcmVk
SW50ZXJuYWxVbml0IGNyZWF0ZWQgXCIle3ByaXZhdGV9c1wiIGNvbXBvbmVudCIsIGlvVW5pdE5h
bWUudXRmOCgpLmRhdGEoKSk7CisgICAgfQorI2VuZGlmCisKKyAgICBBdWRpb1VuaXQgaW9Vbml0
OworICAgIGF1dG8gZXJyID0gUEFMOjpBdWRpb0NvbXBvbmVudEluc3RhbmNlTmV3KGlvQ29tcG9u
ZW50LCAmaW9Vbml0KTsKKyAgICBpZiAoZXJyKSB7CisgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9S
KFdlYlJUQywgIkNvcmVBdWRpb1NoYXJlZEludGVybmFsVW5pdCB1bmFibGUgdG8gb3BlbiB2cGlv
IHVuaXQsIGVycm9yICVkICglLjRzKSIsIChpbnQpZXJyLCAoY2hhciopJmVycik7CisgICAgICAg
IHJldHVybiBtYWtlVW5leHBlY3RlZChlcnIpOworICAgIH0KKworICAgIFJFTEVBU0VfTE9HKFdl
YlJUQywgIlN1Y2Nlc3NmdWxseSBjcmVhdGVkIGEgQ29yZUF1ZGlvU2hhcmVkSW50ZXJuYWxVbml0
Iik7CisKKyAgICBVbmlxdWVSZWY8Q29yZUF1ZGlvU2hhcmVkVW5pdDo6SW50ZXJuYWxVbml0PiBy
ZXN1bHQgPSBtYWtlVW5pcXVlUmVmPENvcmVBdWRpb1NoYXJlZEludGVybmFsVW5pdD4oaW9Vbml0
KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitDb3JlQXVkaW9TaGFyZWRJbnRlcm5hbFVuaXQ6
OkNvcmVBdWRpb1NoYXJlZEludGVybmFsVW5pdChBdWRpb1VuaXQgaW9Vbml0KQorICAgIDogbV9p
b1VuaXQoaW9Vbml0KQoreworfQorCitDb3JlQXVkaW9TaGFyZWRJbnRlcm5hbFVuaXQ6On5Db3Jl
QXVkaW9TaGFyZWRJbnRlcm5hbFVuaXQoKQoreworICAgIFBBTDo6QXVkaW9Db21wb25lbnRJbnN0
YW5jZURpc3Bvc2UobV9pb1VuaXQpOworfQorCitPU1N0YXR1cyBDb3JlQXVkaW9TaGFyZWRJbnRl
cm5hbFVuaXQ6OmluaXRpYWxpemUoKQoreworICAgIHJldHVybiBQQUw6OkF1ZGlvVW5pdEluaXRp
YWxpemUobV9pb1VuaXQpOworfQorCitPU1N0YXR1cyBDb3JlQXVkaW9TaGFyZWRJbnRlcm5hbFVu
aXQ6OnVuaW5pdGlhbGl6ZSgpCit7CisgICAgcmV0dXJuIEF1ZGlvVW5pdFVuaW5pdGlhbGl6ZSht
X2lvVW5pdCk7Cit9CisKK09TU3RhdHVzIENvcmVBdWRpb1NoYXJlZEludGVybmFsVW5pdDo6c3Rh
cnQoKQoreworICAgIHJldHVybiBQQUw6OkF1ZGlvT3V0cHV0VW5pdFN0YXJ0KG1faW9Vbml0KTsK
K30KKworT1NTdGF0dXMgQ29yZUF1ZGlvU2hhcmVkSW50ZXJuYWxVbml0OjpzdG9wKCkKK3sKKyAg
ICByZXR1cm4gUEFMOjpBdWRpb091dHB1dFVuaXRTdG9wKG1faW9Vbml0KTsKK30KKworT1NTdGF0
dXMgQ29yZUF1ZGlvU2hhcmVkSW50ZXJuYWxVbml0OjpzZXQoQXVkaW9Vbml0UHJvcGVydHlJRCBw
cm9wZXJ0eUlELCBBdWRpb1VuaXRTY29wZSBzY29wZSwgQXVkaW9Vbml0RWxlbWVudCBlbGVtZW50
LCBjb25zdCB2b2lkKiB2YWx1ZSwgVUludDMyIHNpemUpCit7CisgICAgcmV0dXJuIFBBTDo6QXVk
aW9Vbml0U2V0UHJvcGVydHkobV9pb1VuaXQsIHByb3BlcnR5SUQsIHNjb3BlLCBlbGVtZW50LCAm
dmFsdWUsIHNpemUpOworfQorCitPU1N0YXR1cyBDb3JlQXVkaW9TaGFyZWRJbnRlcm5hbFVuaXQ6
OmdldChBdWRpb1VuaXRQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIEF1ZGlvVW5pdFNjb3BlIHNjb3Bl
LCBBdWRpb1VuaXRFbGVtZW50IGVsZW1lbnQsIHZvaWQqIHZhbHVlLCBVSW50MzIqIHNpemUpCit7
CisgICAgcmV0dXJuIFBBTDo6QXVkaW9Vbml0R2V0UHJvcGVydHkobV9pb1VuaXQsIHByb3BlcnR5
SUQsIHNjb3BlLCBlbGVtZW50LCB2YWx1ZSwgc2l6ZSk7Cit9CisKK09TU3RhdHVzIENvcmVBdWRp
b1NoYXJlZEludGVybmFsVW5pdDo6cmVuZGVyKEF1ZGlvVW5pdFJlbmRlckFjdGlvbkZsYWdzKiBp
b0FjdGlvbkZsYWdzLCBjb25zdCBBdWRpb1RpbWVTdGFtcCogaW5UaW1lU3RhbXAsIFVJbnQzMiBp
bk91dHB1dEJ1c051bWJlciwgVUludDMyIGluTnVtYmVyRnJhbWVzLCBBdWRpb0J1ZmZlckxpc3Qq
IGxpc3QpCit7CisgICAgcmV0dXJuIEF1ZGlvVW5pdFJlbmRlcihtX2lvVW5pdCwgaW9BY3Rpb25G
bGFncywgaW5UaW1lU3RhbXAsIGluT3V0cHV0QnVzTnVtYmVyLCBpbk51bWJlckZyYW1lcywgbGlz
dCk7Cit9CisKKyNpZiBQTEFURk9STShNQUMpCitPU1N0YXR1cyBDb3JlQXVkaW9TaGFyZWRJbnRl
cm5hbFVuaXQ6OmRlZmF1bHRJbnB1dERldmljZSh1aW50MzJfdCogZGV2aWNlSUQpCit7CisgICAg
VUludDMyIHByb3BlcnR5U2l6ZSA9IHNpemVvZigqZGV2aWNlSUQpOworICAgIGF1dG8gZXJyID0g
Z2V0KGtBdWRpb091dHB1dFVuaXRQcm9wZXJ0eV9DdXJyZW50RGV2aWNlLCBrQXVkaW9Vbml0U2Nv
cGVfR2xvYmFsLCBpbnB1dEJ1cywgZGV2aWNlSUQsICZwcm9wZXJ0eVNpemUpOworICAgIFJFTEVB
U0VfTE9HX0VSUk9SX0lGKGVyciwgV2ViUlRDLCAiQ29yZUF1ZGlvU2hhcmVkSW50ZXJuYWxVbml0
IHVuYWJsZSB0byBnZXQgZGVmYXVsdCBpbnB1dCBkZXZpY2UgSUQsIGVycm9yICVkICglLjRzKSIs
IChpbnQpZXJyLCAoY2hhciopJmVycik7CisgICAgcmV0dXJuIGVycjsKK30KKworT1NTdGF0dXMg
Q29yZUF1ZGlvU2hhcmVkSW50ZXJuYWxVbml0OjpkZWZhdWx0T3V0cHV0RGV2aWNlKHVpbnQzMl90
KiBkZXZpY2VJRCkKK3sKKyNpZiBQTEFURk9STShNQUMpCisgICAgQXVkaW9PYmplY3RQcm9wZXJ0
eUFkZHJlc3MgYWRkcmVzcyA9IHsKKyAgICAgICAga0F1ZGlvSGFyZHdhcmVQcm9wZXJ0eURlZmF1
bHRPdXRwdXREZXZpY2UsCisgICAgICAgIGtBdWRpb09iamVjdFByb3BlcnR5U2NvcGVHbG9iYWws
CisjaWYgSEFWRShBVURJT19PQkpFQ1RfUFJPUEVSVFlfRUxFTUVOVF9NQUlOKQorICAgICAgICBr
QXVkaW9PYmplY3RQcm9wZXJ0eUVsZW1lbnRNYWluCisjZWxzZQorICAgICAgICBBTExPV19ERVBS
RUNBVEVEX0RFQ0xBUkFUSU9OU19CRUdJTgorICAgICAgICBrQXVkaW9PYmplY3RQcm9wZXJ0eUVs
ZW1lbnRNYXN0ZXIKKyAgICAgICAgQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfRU5ECisj
ZW5kaWYKKyAgICB9OworCisgICAgaWYgKEF1ZGlvT2JqZWN0SGFzUHJvcGVydHkoa0F1ZGlvT2Jq
ZWN0U3lzdGVtT2JqZWN0LCAmYWRkcmVzcykpIHsKKyAgICAgICAgVUludDMyIHByb3BlcnR5U2l6
ZSA9IHNpemVvZihBdWRpb0RldmljZUlEKTsKKyAgICAgICAgcmV0dXJuIEF1ZGlvT2JqZWN0R2V0
UHJvcGVydHlEYXRhKGtBdWRpb09iamVjdFN5c3RlbU9iamVjdCwgJmFkZHJlc3MsIDAsIG51bGxw
dHIsICZwcm9wZXJ0eVNpemUsIGRldmljZUlEKTsKKyAgICB9CisjZWxzZQorICAgIFVOVVNFRF9Q
QVJBTShkZXZpY2VJRCk7CisjZW5kaWYKKyAgICByZXR1cm4gLTE7Cit9CisjZW5kaWYKKworQ29y
ZUF1ZGlvU2hhcmVkVW5pdCYgQ29yZUF1ZGlvU2hhcmVkVW5pdDo6dW5pdCgpCit7CisgICAgc3Rh
dGljIE5ldmVyRGVzdHJveWVkPENvcmVBdWRpb1NoYXJlZFVuaXQ+IHNpbmdsZXRvbjsKKyAgICBy
ZXR1cm4gc2luZ2xldG9uOworfQorCitDb3JlQXVkaW9TaGFyZWRVbml0OjpDb3JlQXVkaW9TaGFy
ZWRVbml0KCkKKyAgICA6IG1fc2FtcGxlUmF0ZUNhcGFiaWxpdGllcyg4MDAwLCA5NjAwMCkKKyAg
ICAsIG1fdmVyaWZ5Q2FwdHVyaW5nVGltZXIoKnRoaXMsICZDb3JlQXVkaW9TaGFyZWRVbml0Ojp2
ZXJpZnlJc0NhcHR1cmluZykKK3sKK30KKwordm9pZCBDb3JlQXVkaW9TaGFyZWRVbml0OjpyZXNl
dFNhbXBsZVJhdGUoKQoreworICAgIHNldFNhbXBsZVJhdGUobV9nZXRTYW1wbGVSYXRlQ2FsbGJh
Y2sgPyBtX2dldFNhbXBsZVJhdGVDYWxsYmFjaygpIDogQXVkaW9TZXNzaW9uOjpzaGFyZWRTZXNz
aW9uKCkuc2FtcGxlUmF0ZSgpKTsKK30KKwordm9pZCBDb3JlQXVkaW9TaGFyZWRVbml0OjpjYXB0
dXJlRGV2aWNlQ2hhbmdlZCgpCit7CisjaWYgUExBVEZPUk0oTUFDKQorICAgIHJlY29uZmlndXJl
QXVkaW9Vbml0KCk7CisjZWxzZQorICAgIEFWQXVkaW9TZXNzaW9uQ2FwdHVyZURldmljZU1hbmFn
ZXI6OnNpbmdsZXRvbigpLnNldFByZWZlcnJlZEF1ZGlvU2Vzc2lvbkRldmljZVVJRChwZXJzaXN0
ZW50SUQoKSk7CisjZW5kaWYKK30KKworc2l6ZV90IENvcmVBdWRpb1NoYXJlZFVuaXQ6OnByZWZl
cnJlZElPQnVmZmVyU2l6ZSgpCit7CisgICAgcmV0dXJuIEF1ZGlvU2Vzc2lvbjo6c2hhcmVkU2Vz
c2lvbigpLmJ1ZmZlclNpemUoKTsKK30KKworT1NTdGF0dXMgQ29yZUF1ZGlvU2hhcmVkVW5pdDo6
c2V0dXBBdWRpb1VuaXQoKQoreworICAgIGlmIChtX2lvVW5pdCkKKyAgICAgICAgcmV0dXJuIDA7
CisKKyAgICBBU1NFUlQoaGFzQ2xpZW50cygpKTsKKworICAgIG1hY2hfdGltZWJhc2VfaW5mb19k
YXRhX3QgdGltZWJhc2VJbmZvOworICAgIG1hY2hfdGltZWJhc2VfaW5mbygmdGltZWJhc2VJbmZv
KTsKKyAgICBtX0RUU0NvbnZlcnNpb25SYXRpbyA9IDFlLTkgKiBzdGF0aWNfY2FzdDxkb3VibGU+
KHRpbWViYXNlSW5mby5udW1lcikgLyBzdGF0aWNfY2FzdDxkb3VibGU+KHRpbWViYXNlSW5mby5k
ZW5vbSk7CisKKyAgICBhdXRvIHJlc3VsdCA9IG1fY3JlYXRpb25DYWxsYmFjayA/IG1fY3JlYXRp
b25DYWxsYmFjaygpIDogQ29yZUF1ZGlvU2hhcmVkSW50ZXJuYWxVbml0OjpjcmVhdGUoKTsKKyAg
ICBpZiAoIXJlc3VsdC5oYXNfdmFsdWUoKSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdC5lcnJvcigp
OworCisgICAgbV9pb1VuaXQgPSBXVEZNb3ZlKHJlc3VsdC52YWx1ZSgpKS5tb3ZlVG9VbmlxdWVQ
dHIoKTsKKyAgICBpZiAoIWVuYWJsZUVjaG9DYW5jZWxsYXRpb24oKSkgeworICAgICAgICB1aW50
MzJfdCBwYXJhbSA9IDA7CisgICAgICAgIGlmIChhdXRvIGVyciA9IG1faW9Vbml0LT5zZXQoa0FV
Vm9pY2VJT1Byb3BlcnR5X1ZvaWNlUHJvY2Vzc2luZ0VuYWJsZUFHQywga0F1ZGlvVW5pdFNjb3Bl
X0dsb2JhbCwgaW5wdXRCdXMsICZwYXJhbSwgc2l6ZW9mKHBhcmFtKSkpIHsKKyAgICAgICAgICAg
IFJFTEVBU0VfTE9HX0VSUk9SKFdlYlJUQywgIkNvcmVBdWRpb1NoYXJlZFVuaXQ6OnNldHVwQXVk
aW9Vbml0KCVwKSB1bmFibGUgdG8gc2V0IHZwaW8gYXV0b21hdGljIGdhaW4gY29udHJvbCwgZXJy
b3IgJWQgKCUuNHMpIiwgdGhpcywgKGludCllcnIsIChjaGFyKikmZXJyKTsKKyAgICAgICAgICAg
IHJldHVybiBlcnI7CisgICAgICAgIH0KKyAgICAgICAgcGFyYW0gPSAxOworICAgICAgICBpZiAo
YXV0byBlcnIgPSBtX2lvVW5pdC0+c2V0KGtBVVZvaWNlSU9Qcm9wZXJ0eV9CeXBhc3NWb2ljZVBy
b2Nlc3NpbmcsIGtBdWRpb1VuaXRTY29wZV9HbG9iYWwsIGlucHV0QnVzLCAmcGFyYW0sIHNpemVv
ZihwYXJhbSkpKSB7CisgICAgICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihXZWJSVEMsICJDb3Jl
QXVkaW9TaGFyZWRVbml0OjpzZXR1cEF1ZGlvVW5pdCglcCkgdW5hYmxlIHRvIHNldCB2cGlvIHVu
aXQgZWNobyBjYW5jZWxsYXRpb24sIGVycm9yICVkICglLjRzKSIsIHRoaXMsIChpbnQpZXJyLCAo
Y2hhciopJmVycik7CisgICAgICAgICAgICByZXR1cm4gZXJyOworICAgICAgICB9CisgICAgfQor
CisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICB1aW50MzJfdCBwYXJhbSA9IDE7CisgICAg
aWYgKGF1dG8gZXJyID0gbV9pb1VuaXQtPnNldChrQXVkaW9PdXRwdXRVbml0UHJvcGVydHlfRW5h
YmxlSU8sIGtBdWRpb1VuaXRTY29wZV9JbnB1dCwgaW5wdXRCdXMsICZwYXJhbSwgc2l6ZW9mKHBh
cmFtKSkpIHsKKyAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoV2ViUlRDLCAiQ29yZUF1ZGlvU2hh
cmVkVW5pdDo6c2V0dXBBdWRpb1VuaXQoJXApIHVuYWJsZSB0byBlbmFibGUgdnBpbyB1bml0IGlu
cHV0LCBlcnJvciAlZCAoJS40cykiLCB0aGlzLCAoaW50KWVyciwgKGNoYXIqKSZlcnIpOworICAg
ICAgICByZXR1cm4gZXJyOworICAgIH0KKyNlbHNlCisgICAgYXV0byBkZXZpY2VJRCA9IGNhcHR1
cmVEZXZpY2VJRCgpOworICAgIC8vIEZJWE1FOiBXZSBwcm9iYWJseSB3YW50IHRvIG1ha2UgZGVm
YXVsdCBpbnB1dC9vdXRwdXQgZGV2aWNlcy4KKyAgICBpZiAoIWRldmljZUlEKSB7CisgICAgICAg
IGlmIChhdXRvIGVyciA9IG1faW9Vbml0LT5kZWZhdWx0SW5wdXREZXZpY2UoJmRldmljZUlEKSkK
KyAgICAgICAgICAgIHJldHVybiBlcnI7CisgICAgfQorCisgICAgaWYgKGF1dG8gZXJyID0gbV9p
b1VuaXQtPnNldChrQXVkaW9PdXRwdXRVbml0UHJvcGVydHlfQ3VycmVudERldmljZSwga0F1ZGlv
VW5pdFNjb3BlX0dsb2JhbCwgaW5wdXRCdXMsICZkZXZpY2VJRCwgc2l6ZW9mKGRldmljZUlEKSkp
IHsKKyAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoV2ViUlRDLCAiQ29yZUF1ZGlvU2hhcmVkVW5p
dDo6c2V0dXBBdWRpb1VuaXQoJXApIHVuYWJsZSB0byBzZXQgdnBpbyB1bml0IGNhcHR1cmUgZGV2
aWNlIElEICVkLCBlcnJvciAlZCAoJS40cykiLCB0aGlzLCAoaW50KWRldmljZUlELCAoaW50KWVy
ciwgKGNoYXIqKSZlcnIpOworICAgICAgICByZXR1cm4gZXJyOworICAgIH0KKworICAgIHVpbnQz
Ml90IGRlZmF1bHRPdXRwdXREZXZpY2VJRDsKKyAgICBhdXRvIGVyciA9IG1faW9Vbml0LT5kZWZh
dWx0T3V0cHV0RGV2aWNlKCZkZWZhdWx0T3V0cHV0RGV2aWNlSUQpOworICAgIGlmICghZXJyKSB7
CisgICAgICAgIGVyciA9IG1faW9Vbml0LT5zZXQoa0F1ZGlvT3V0cHV0VW5pdFByb3BlcnR5X0N1
cnJlbnREZXZpY2UsIGtBdWRpb1VuaXRTY29wZV9HbG9iYWwsIG91dHB1dEJ1cywgJmRlZmF1bHRP
dXRwdXREZXZpY2VJRCwgc2l6ZW9mKGRlZmF1bHRPdXRwdXREZXZpY2VJRCkpOworICAgICAgICBS
RUxFQVNFX0xPR19FUlJPUl9JRihlcnIsIFdlYlJUQywgIkNvcmVBdWRpb1NoYXJlZFVuaXQ6OnNl
dHVwQXVkaW9Vbml0KCVwKSB1bmFibGUgdG8gc2V0IHZwaW8gdW5pdCBvdXRwdXQgZGV2aWNlIElE
ICVkLCBlcnJvciAlZCAoJS40cykiLCB0aGlzLCAoaW50KWRlZmF1bHRPdXRwdXREZXZpY2VJRCwg
KGludCllcnIsIChjaGFyKikmZXJyKTsKKyAgICB9CisgICAgc2V0T3V0cHV0RGV2aWNlSUQoIWVy
ciA/IGRlZmF1bHRPdXRwdXREZXZpY2VJRCA6IDApOworI2VuZGlmCisKKyAgICAvLyBGSVhNRTog
QWRkIHN1cHBvcnQgZm9yIGRpZmZlcmVudCBzcGVha2VyL21pY3JvcGhvbmUgc2FtcGxlIHJhdGVz
LgorICAgIGludCBhY3R1YWxTYW1wbGVSYXRlID0gdGhpcy0+YWN0dWFsU2FtcGxlUmF0ZSgpOwor
ICAgIGlmIChhdXRvIGVyciA9IGNvbmZpZ3VyZU1pY3JvcGhvbmVQcm9jKGFjdHVhbFNhbXBsZVJh
dGUpKQorICAgICAgICByZXR1cm4gZXJyOworCisgICAgaWYgKGF1dG8gZXJyID0gY29uZmlndXJl
U3BlYWtlclByb2MoYWN0dWFsU2FtcGxlUmF0ZSkpCisgICAgICAgIHJldHVybiBlcnI7CisKKyAg
ICBpZiAoYXV0byBlcnIgPSBtX2lvVW5pdC0+aW5pdGlhbGl6ZSgpKSB7CisgICAgICAgIFJFTEVB
U0VfTE9HX0VSUk9SKFdlYlJUQywgIkNvcmVBdWRpb1NoYXJlZFVuaXQ6OnNldHVwQXVkaW9Vbml0
KCVwKSBBdWRpb1VuaXRJbml0aWFsaXplKCkgZmFpbGVkLCBlcnJvciAlZCAoJS40cykiLCB0aGlz
LCAoaW50KWVyciwgKGNoYXIqKSZlcnIpOworICAgICAgICByZXR1cm4gZXJyOworICAgIH0KKyAg
ICBtX2lvVW5pdEluaXRpYWxpemVkID0gdHJ1ZTsKKworICAgIHVuZHVjaygpOworCisgICAgcmV0
dXJuIDA7Cit9CisKK3ZvaWQgQ29yZUF1ZGlvU2hhcmVkVW5pdDo6dW5kdWNrKCkKK3sKKyAgICB1
aW50MzJfdCBvdXRwdXREZXZpY2U7CisgICAgaWYgKG1faW9Vbml0ICYmICFtX2lvVW5pdC0+ZGVm
YXVsdE91dHB1dERldmljZSgmb3V0cHV0RGV2aWNlKSkKKyAgICAgICAgQXVkaW9EZXZpY2VEdWNr
KG91dHB1dERldmljZSwgMS4wLCBudWxscHRyLCAwKTsKK30KKworaW50IENvcmVBdWRpb1NoYXJl
ZFVuaXQ6OmFjdHVhbFNhbXBsZVJhdGUoKSBjb25zdAoreworICAgIExvY2tlciBsb2NrZXIgeyBt
X3NwZWFrZXJTYW1wbGVzUHJvZHVjZXJMb2NrIH07CisgICAgcmV0dXJuIG1fc3BlYWtlclNhbXBs
ZXNQcm9kdWNlciA/IG1fc3BlYWtlclNhbXBsZXNQcm9kdWNlci0+Zm9ybWF0KCkuc3RyZWFtRGVz
Y3JpcHRpb24oKS5tU2FtcGxlUmF0ZSA6IHNhbXBsZVJhdGUoKTsKK30KKworT1NTdGF0dXMgQ29y
ZUF1ZGlvU2hhcmVkVW5pdDo6Y29uZmlndXJlTWljcm9waG9uZVByb2MoaW50IHNhbXBsZVJhdGUp
Cit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKworICAgIEFVUmVuZGVyQ2FsbGJhY2tT
dHJ1Y3QgY2FsbGJhY2sgPSB7IG1pY3JvcGhvbmVDYWxsYmFjaywgdGhpcyB9OworICAgIGlmIChh
dXRvIGVyciA9IG1faW9Vbml0LT5zZXQoa0F1ZGlvT3V0cHV0VW5pdFByb3BlcnR5X1NldElucHV0
Q2FsbGJhY2ssIGtBdWRpb1VuaXRTY29wZV9HbG9iYWwsIGlucHV0QnVzLCAmY2FsbGJhY2ssIHNp
emVvZihjYWxsYmFjaykpKSB7CisgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFdlYlJUQywgIkNv
cmVBdWRpb1NoYXJlZFVuaXQ6OmNvbmZpZ3VyZU1pY3JvcGhvbmVQcm9jKCVwKSB1bmFibGUgdG8g
c2V0IHZwaW8gdW5pdCBtaWMgcHJvYywgZXJyb3IgJWQgKCUuNHMpIiwgdGhpcywgKGludCllcnIs
IChjaGFyKikmZXJyKTsKKyAgICAgICAgcmV0dXJuIGVycjsKKyAgICB9CisKKyAgICBBdWRpb1N0
cmVhbUJhc2ljRGVzY3JpcHRpb24gbWljcm9waG9uZVByb2NGb3JtYXQgPSB7IH07CisKKyAgICBV
SW50MzIgc2l6ZSA9IHNpemVvZihtaWNyb3Bob25lUHJvY0Zvcm1hdCk7CisgICAgaWYgKGF1dG8g
ZXJyID0gbV9pb1VuaXQtPmdldChrQXVkaW9Vbml0UHJvcGVydHlfU3RyZWFtRm9ybWF0LCBrQXVk
aW9Vbml0U2NvcGVfT3V0cHV0LCBpbnB1dEJ1cywgJm1pY3JvcGhvbmVQcm9jRm9ybWF0LCAmc2l6
ZSkpIHsKKyAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoV2ViUlRDLCAiQ29yZUF1ZGlvU2hhcmVk
VW5pdDo6Y29uZmlndXJlTWljcm9waG9uZVByb2MoJXApIHVuYWJsZSB0byBnZXQgb3V0cHV0IHN0
cmVhbSBmb3JtYXQsIGVycm9yICVkICglLjRzKSIsIHRoaXMsIChpbnQpZXJyLCAoY2hhciopJmVy
cik7CisgICAgICAgIHJldHVybiBlcnI7CisgICAgfQorCisgICAgbWljcm9waG9uZVByb2NGb3Jt
YXQubVNhbXBsZVJhdGUgPSBzYW1wbGVSYXRlOworICAgIGlmIChhdXRvIGVyciA9IG1faW9Vbml0
LT5zZXQoa0F1ZGlvVW5pdFByb3BlcnR5X1N0cmVhbUZvcm1hdCwga0F1ZGlvVW5pdFNjb3BlX091
dHB1dCwgaW5wdXRCdXMsICZtaWNyb3Bob25lUHJvY0Zvcm1hdCwgc2l6ZSkpIHsKKyAgICAgICAg
UkVMRUFTRV9MT0dfRVJST1IoV2ViUlRDLCAiQ29yZUF1ZGlvU2hhcmVkVW5pdDo6Y29uZmlndXJl
TWljcm9waG9uZVByb2MoJXApIHVuYWJsZSB0byBzZXQgb3V0cHV0IHN0cmVhbSBmb3JtYXQsIGVy
cm9yICVkICglLjRzKSIsIHRoaXMsIChpbnQpZXJyLCAoY2hhciopJmVycik7CisgICAgICAgIHJl
dHVybiBlcnI7CisgICAgfQorCisgICAgbV9taWNyb3Bob25lU2FtcGxlQnVmZmVyID0gQXVkaW9T
YW1wbGVCdWZmZXJMaXN0OjpjcmVhdGUobWljcm9waG9uZVByb2NGb3JtYXQsIHByZWZlcnJlZElP
QnVmZmVyU2l6ZSgpICogMik7CisgICAgbV9taWNyb3Bob25lUHJvY0Zvcm1hdCA9IG1pY3JvcGhv
bmVQcm9jRm9ybWF0OworCisgICAgcmV0dXJuIG5vRXJyOworfQorCitPU1N0YXR1cyBDb3JlQXVk
aW9TaGFyZWRVbml0Ojpjb25maWd1cmVTcGVha2VyUHJvYyhpbnQgc2FtcGxlUmF0ZSkKK3sKKyAg
ICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworCisgICAgQVVSZW5kZXJDYWxsYmFja1N0cnVjdCBj
YWxsYmFjayA9IHsgc3BlYWtlckNhbGxiYWNrLCB0aGlzIH07CisgICAgaWYgKGF1dG8gZXJyID0g
bV9pb1VuaXQtPnNldChrQXVkaW9Vbml0UHJvcGVydHlfU2V0UmVuZGVyQ2FsbGJhY2ssIGtBdWRp
b1VuaXRTY29wZV9JbnB1dCwgb3V0cHV0QnVzLCAmY2FsbGJhY2ssIHNpemVvZihjYWxsYmFjaykp
KSB7CisgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFdlYlJUQywgIkNvcmVBdWRpb1NoYXJlZFVu
aXQ6OmNvbmZpZ3VyZVNwZWFrZXJQcm9jKCVwKSB1bmFibGUgdG8gc2V0IHZwaW8gdW5pdCBzcGVh
a2VyIHByb2MsIGVycm9yICVkICglLjRzKSIsIHRoaXMsIChpbnQpZXJyLCAoY2hhciopJmVycik7
CisgICAgICAgIHJldHVybiBlcnI7CisgICAgfQorCisgICAgQXVkaW9TdHJlYW1CYXNpY0Rlc2Ny
aXB0aW9uIHNwZWFrZXJQcm9jRm9ybWF0OworICAgIFVJbnQzMiBzaXplID0gc2l6ZW9mKHNwZWFr
ZXJQcm9jRm9ybWF0KTsKKyAgICB7CisgICAgICAgIExvY2tlciBsb2NrZXIgeyBtX3NwZWFrZXJT
YW1wbGVzUHJvZHVjZXJMb2NrIH07CisgICAgICAgIGlmIChtX3NwZWFrZXJTYW1wbGVzUHJvZHVj
ZXIpIHsKKyAgICAgICAgICAgIHNwZWFrZXJQcm9jRm9ybWF0ID0gbV9zcGVha2VyU2FtcGxlc1By
b2R1Y2VyLT5mb3JtYXQoKS5zdHJlYW1EZXNjcmlwdGlvbigpOworICAgICAgICAgICAgQVNTRVJU
KHNwZWFrZXJQcm9jRm9ybWF0Lm1TYW1wbGVSYXRlID09IHNhbXBsZVJhdGUpOworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgaWYgKGF1dG8gZXJyID0gbV9pb1VuaXQtPmdldChrQXVkaW9V
bml0UHJvcGVydHlfU3RyZWFtRm9ybWF0LCBrQXVkaW9Vbml0U2NvcGVfSW5wdXQsIG91dHB1dEJ1
cywgJnNwZWFrZXJQcm9jRm9ybWF0LCAmc2l6ZSkpIHsKKyAgICAgICAgICAgICAgICBSRUxFQVNF
X0xPR19FUlJPUihXZWJSVEMsICJDb3JlQXVkaW9TaGFyZWRVbml0Ojpjb25maWd1cmVTcGVha2Vy
UHJvYyglcCkgdW5hYmxlIHRvIGdldCBpbnB1dCBzdHJlYW0gZm9ybWF0LCBlcnJvciAlZCAoJS40
cykiLCB0aGlzLCAoaW50KWVyciwgKGNoYXIqKSZlcnIpOworICAgICAgICAgICAgICAgIHJldHVy
biBlcnI7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgc3BlYWtlclByb2NG
b3JtYXQubVNhbXBsZVJhdGUgPSBzYW1wbGVSYXRlOworCisgICAgaWYgKGF1dG8gZXJyID0gbV9p
b1VuaXQtPnNldChrQXVkaW9Vbml0UHJvcGVydHlfU3RyZWFtRm9ybWF0LCBrQXVkaW9Vbml0U2Nv
cGVfSW5wdXQsIG91dHB1dEJ1cywgJnNwZWFrZXJQcm9jRm9ybWF0LCBzaXplKSkgeworICAgICAg
ICBSRUxFQVNFX0xPR19FUlJPUihXZWJSVEMsICJDb3JlQXVkaW9TaGFyZWRVbml0Ojpjb25maWd1
cmVTcGVha2VyUHJvYyglcCkgdW5hYmxlIHRvIGdldCBpbnB1dCBzdHJlYW0gZm9ybWF0LCBlcnJv
ciAlZCAoJS40cykiLCB0aGlzLCAoaW50KWVyciwgKGNoYXIqKSZlcnIpOworICAgICAgICByZXR1
cm4gZXJyOworICAgIH0KKworICAgIG1fc3BlYWtlclByb2NGb3JtYXQgPSBzcGVha2VyUHJvY0Zv
cm1hdDsKKworICAgIHJldHVybiBub0VycjsKK30KKworI2lmICFMT0dfRElTQUJMRUQKK3ZvaWQg
Q29yZUF1ZGlvU2hhcmVkVW5pdDo6Y2hlY2tUaW1lc3RhbXBzKGNvbnN0IEF1ZGlvVGltZVN0YW1w
JiB0aW1lU3RhbXAsIHVpbnQ2NF90IHNhbXBsZVRpbWUsIGRvdWJsZSBob3N0VGltZSkKK3sKKyAg
ICBpZiAoIXRpbWVTdGFtcC5tU2FtcGxlVGltZSB8fCBzYW1wbGVUaW1lID09IG1fbGF0ZXN0TWlj
VGltZVN0YW1wIHx8ICFob3N0VGltZSkKKyAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoV2ViUlRD
LCAiQ29yZUF1ZGlvU2hhcmVkVW5pdDo6Y2hlY2tUaW1lc3RhbXBzOiB1bnVzdWFsIHRpbWVzdGFt
cHMsIHNhbXBsZSB0aW1lID0gJWxsZCwgcHJldmlvdXMgc2FtcGxlIHRpbWUgPSAlbGxkLCBob3N0
VGltZSAlZiIsIHNhbXBsZVRpbWUsIG1fbGF0ZXN0TWljVGltZVN0YW1wLCBob3N0VGltZSk7Cit9
CisjZW5kaWYKKworT1NTdGF0dXMgQ29yZUF1ZGlvU2hhcmVkVW5pdDo6cHJvdmlkZVNwZWFrZXJE
YXRhKEF1ZGlvVW5pdFJlbmRlckFjdGlvbkZsYWdzJiBmbGFncywgY29uc3QgQXVkaW9UaW1lU3Rh
bXAmIHRpbWVTdGFtcCwgVUludDMyIC8qaW5CdXNOdW1iZXIqLywgVUludDMyIGluTnVtYmVyRnJh
bWVzLCBBdWRpb0J1ZmZlckxpc3QmIGlvRGF0YSkKK3sKKyAgICBpZiAobV9pc1JlY29uZmlndXJp
bmcgfHwgIW1fc3BlYWtlclNhbXBsZXNQcm9kdWNlckxvY2sudHJ5TG9jaygpKSB7CisgICAgICAg
IEF1ZGlvU2FtcGxlQnVmZmVyTGlzdDo6emVyb0FCTChpb0RhdGEsIHN0YXRpY19jYXN0PHNpemVf
dD4oaW5OdW1iZXJGcmFtZXMgKiBtX3NwZWFrZXJQcm9jRm9ybWF0LmJ5dGVzUGVyRnJhbWUoKSkp
OworICAgICAgICBmbGFncyA9IGtBdWRpb1VuaXRSZW5kZXJBY3Rpb25fT3V0cHV0SXNTaWxlbmNl
OworICAgICAgICByZXR1cm4gbm9FcnI7CisgICAgfQorCisgICAgTG9ja2VyIGxvY2tlciB7IEFk
b3B0TG9jaywgbV9zcGVha2VyU2FtcGxlc1Byb2R1Y2VyTG9jayB9OworICAgIGlmICghbV9zcGVh
a2VyU2FtcGxlc1Byb2R1Y2VyKSB7CisgICAgICAgIEF1ZGlvU2FtcGxlQnVmZmVyTGlzdDo6emVy
b0FCTChpb0RhdGEsIHN0YXRpY19jYXN0PHNpemVfdD4oaW5OdW1iZXJGcmFtZXMgKiBtX3NwZWFr
ZXJQcm9jRm9ybWF0LmJ5dGVzUGVyRnJhbWUoKSkpOworICAgICAgICBmbGFncyA9IGtBdWRpb1Vu
aXRSZW5kZXJBY3Rpb25fT3V0cHV0SXNTaWxlbmNlOworICAgICAgICByZXR1cm4gbm9FcnI7Cisg
ICAgfQorICAgIHJldHVybiBtX3NwZWFrZXJTYW1wbGVzUHJvZHVjZXItPnByb2R1Y2VTcGVha2Vy
U2FtcGxlcyhpbk51bWJlckZyYW1lcywgaW9EYXRhLCB0aW1lU3RhbXAubVNhbXBsZVRpbWUsIHRp
bWVTdGFtcC5tSG9zdFRpbWUsIGZsYWdzKTsKK30KKworT1NTdGF0dXMgQ29yZUF1ZGlvU2hhcmVk
VW5pdDo6c3BlYWtlckNhbGxiYWNrKHZvaWQgKmluUmVmQ29uLCBBdWRpb1VuaXRSZW5kZXJBY3Rp
b25GbGFncyogaW9BY3Rpb25GbGFncywgY29uc3QgQXVkaW9UaW1lU3RhbXAqIGluVGltZVN0YW1w
LCBVSW50MzIgaW5CdXNOdW1iZXIsIFVJbnQzMiBpbk51bWJlckZyYW1lcywgQXVkaW9CdWZmZXJM
aXN0KiBpb0RhdGEpCit7CisgICAgQVNTRVJUKGlvQWN0aW9uRmxhZ3MpOworICAgIEFTU0VSVChp
blRpbWVTdGFtcCk7CisgICAgYXV0byBkYXRhU291cmNlID0gc3RhdGljX2Nhc3Q8Q29yZUF1ZGlv
U2hhcmVkVW5pdCo+KGluUmVmQ29uKTsKKyAgICByZXR1cm4gZGF0YVNvdXJjZS0+cHJvdmlkZVNw
ZWFrZXJEYXRhKCppb0FjdGlvbkZsYWdzLCAqaW5UaW1lU3RhbXAsIGluQnVzTnVtYmVyLCBpbk51
bWJlckZyYW1lcywgKmlvRGF0YSk7Cit9CisKK09TU3RhdHVzIENvcmVBdWRpb1NoYXJlZFVuaXQ6
OnByb2Nlc3NNaWNyb3Bob25lU2FtcGxlcyhBdWRpb1VuaXRSZW5kZXJBY3Rpb25GbGFncyYgaW9B
Y3Rpb25GbGFncywgY29uc3QgQXVkaW9UaW1lU3RhbXAmIHRpbWVTdGFtcCwgVUludDMyIGluQnVz
TnVtYmVyLCBVSW50MzIgaW5OdW1iZXJGcmFtZXMsIEF1ZGlvQnVmZmVyTGlzdCogLyppb0RhdGEq
LykKK3sKKyAgICArK21fbWljcm9waG9uZVByb2NzQ2FsbGVkOworCisgICAgaWYgKG1faXNSZWNv
bmZpZ3VyaW5nKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBQdWxsIHRocm91Z2gg
dGhlIHZwaW8gdW5pdCB0byBvdXIgbWljIGJ1ZmZlci4KKyAgICBtX21pY3JvcGhvbmVTYW1wbGVC
dWZmZXItPnJlc2V0KCk7CisgICAgQXVkaW9CdWZmZXJMaXN0JiBidWZmZXJMaXN0ID0gbV9taWNy
b3Bob25lU2FtcGxlQnVmZmVyLT5idWZmZXJMaXN0KCk7CisgICAgaWYgKGF1dG8gZXJyID0gbV9p
b1VuaXQtPnJlbmRlcigmaW9BY3Rpb25GbGFncywgJnRpbWVTdGFtcCwgaW5CdXNOdW1iZXIsIGlu
TnVtYmVyRnJhbWVzLCAmYnVmZmVyTGlzdCkpIHsKKyAgICAgICAgUkVMRUFTRV9MT0dfRVJST1Io
V2ViUlRDLCAiQ29yZUF1ZGlvU2hhcmVkVW5pdDo6cHJvY2Vzc01pY3JvcGhvbmVTYW1wbGVzKCVw
KSBBdWRpb1VuaXRSZW5kZXIgZmFpbGVkIHdpdGggZXJyb3IgJWQgKCUuNHMpLCBidWZmZXJMaXN0
IHNpemUgJWQsIGluTnVtYmVyRnJhbWVzICVkICIsIHRoaXMsIChpbnQpZXJyLCAoY2hhciopJmVy
ciwgKGludClidWZmZXJMaXN0Lm1CdWZmZXJzWzBdLm1EYXRhQnl0ZVNpemUsIChpbnQpaW5OdW1i
ZXJGcmFtZXMpOworICAgICAgICBpZiAoZXJyID09IGtBdWRpb19QYXJhbUVycm9yKSB7CisgICAg
ICAgICAgICAvLyBPdXIgYnVmZmVyIG1pZ2h0IGJlIHRvbyBzbWFsbCwgdGhlIHByZWZlcnJlZCBi
dWZmZXIgc2l6ZSBvciBzYW1wbGUgcmF0ZSBtaWdodCBoYXZlIGNoYW5nZWQuCisgICAgICAgICAg
ICBjYWxsT25NYWluVGhyZWFkKFtdIHsKKyAgICAgICAgICAgICAgICBDb3JlQXVkaW9TaGFyZWRV
bml0OjpzaW5nbGV0b24oKS5yZWNvbmZpZ3VyZSgpOworICAgICAgICAgICAgfSk7CisgICAgICAg
IH0KKyAgICAgICAgLy8gV2UgcmV0dXJuIGVhcmx5IHNvIHRoYXQgaWYgdGhpcyBlcnJvciBoYXBw
ZW5zLCB3ZSBkbyBub3QgaW5jcmVtZW50IG1fbWljcm9waG9uZVByb2NzQ2FsbGVkIGFuZCBmYWls
IHRoZSBjYXB0dXJlIG9uY2UgdGltZXIga2lja3MgaW4uCisgICAgICAgIHJldHVybiBlcnI7Cisg
ICAgfQorCisgICAgaWYgKCFpc1Byb2R1Y2luZ01pY3JvcGhvbmVTYW1wbGVzKCkpCisgICAgICAg
IHJldHVybiBub0VycjsKKworICAgIGRvdWJsZSBhZGp1c3RlZEhvc3RUaW1lID0gbV9EVFNDb252
ZXJzaW9uUmF0aW8gKiB0aW1lU3RhbXAubUhvc3RUaW1lOworICAgIHVpbnQ2NF90IHNhbXBsZVRp
bWUgPSB0aW1lU3RhbXAubVNhbXBsZVRpbWU7CisjaWYgIUxPR19ESVNBQkxFRAorICAgIGNoZWNr
VGltZXN0YW1wcyh0aW1lU3RhbXAsIHNhbXBsZVRpbWUsIGFkanVzdGVkSG9zdFRpbWUpOworI2Vu
ZGlmCisgICAgbV9sYXRlc3RNaWNUaW1lU3RhbXAgPSBzYW1wbGVUaW1lOworICAgIG1fbWljcm9w
aG9uZVNhbXBsZUJ1ZmZlci0+c2V0VGltZXMoYWRqdXN0ZWRIb3N0VGltZSwgc2FtcGxlVGltZSk7
CisKKyAgICBpZiAodm9sdW1lKCkgIT0gMS4wKQorICAgICAgICBtX21pY3JvcGhvbmVTYW1wbGVC
dWZmZXItPmFwcGx5R2Fpbih2b2x1bWUoKSk7CisKKyAgICBhdWRpb1NhbXBsZXNBdmFpbGFibGUo
TWVkaWFUaW1lKHNhbXBsZVRpbWUsIG1fbWljcm9waG9uZVByb2NGb3JtYXQuc2FtcGxlUmF0ZSgp
KSwgbV9taWNyb3Bob25lU2FtcGxlQnVmZmVyLT5idWZmZXJMaXN0KCksIG1fbWljcm9waG9uZVBy
b2NGb3JtYXQsIGluTnVtYmVyRnJhbWVzKTsKKyAgICByZXR1cm4gbm9FcnI7Cit9CisKK09TU3Rh
dHVzIENvcmVBdWRpb1NoYXJlZFVuaXQ6Om1pY3JvcGhvbmVDYWxsYmFjayh2b2lkICppblJlZkNv
biwgQXVkaW9Vbml0UmVuZGVyQWN0aW9uRmxhZ3MqIGlvQWN0aW9uRmxhZ3MsIGNvbnN0IEF1ZGlv
VGltZVN0YW1wKiBpblRpbWVTdGFtcCwgVUludDMyIGluQnVzTnVtYmVyLCBVSW50MzIgaW5OdW1i
ZXJGcmFtZXMsIEF1ZGlvQnVmZmVyTGlzdCogaW9EYXRhKQoreworICAgIEFTU0VSVChpb0FjdGlv
bkZsYWdzKTsKKyAgICBBU1NFUlQoaW5UaW1lU3RhbXApOworICAgIENvcmVBdWRpb1NoYXJlZFVu
aXQqIGRhdGFTb3VyY2UgPSBzdGF0aWNfY2FzdDxDb3JlQXVkaW9TaGFyZWRVbml0Kj4oaW5SZWZD
b24pOworICAgIHJldHVybiBkYXRhU291cmNlLT5wcm9jZXNzTWljcm9waG9uZVNhbXBsZXMoKmlv
QWN0aW9uRmxhZ3MsICppblRpbWVTdGFtcCwgaW5CdXNOdW1iZXIsIGluTnVtYmVyRnJhbWVzLCBp
b0RhdGEpOworfQorCit2b2lkIENvcmVBdWRpb1NoYXJlZFVuaXQ6OmNsZWFudXBBdWRpb1VuaXQo
KQoreworICAgIGlmIChtX2lvVW5pdEluaXRpYWxpemVkKSB7CisgICAgICAgIEFTU0VSVChtX2lv
VW5pdCk7CisgICAgICAgIGlmIChhdXRvIGVyciA9IG1faW9Vbml0LT51bmluaXRpYWxpemUoKSkK
KyAgICAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFdlYlJUQywgIkNvcmVBdWRpb1NoYXJlZFVu
aXQ6OmNsZWFudXBBdWRpb1VuaXQoJXApIEF1ZGlvVW5pdFVuaW5pdGlhbGl6ZSBmYWlsZWQgd2l0
aCBlcnJvciAlZCAoJS40cykiLCB0aGlzLCAoaW50KWVyciwgKGNoYXIqKSZlcnIpOworICAgICAg
ICBtX2lvVW5pdEluaXRpYWxpemVkID0gZmFsc2U7CisgICAgfQorCisgICAgbV9pb1VuaXQgPSBu
dWxscHRyOworCisgICAgbV9taWNyb3Bob25lU2FtcGxlQnVmZmVyID0gbnVsbHB0cjsKK30KKwor
dm9pZCBDb3JlQXVkaW9TaGFyZWRVbml0OjpkZWxheVNhbXBsZXMoU2Vjb25kcyBzZWNvbmRzKQor
eworICAgIGlmIChtX2lvVW5pdCkKKyAgICAgICAgbV9pb1VuaXQtPmRlbGF5U2FtcGxlcyhzZWNv
bmRzKTsKK30KKworT1NTdGF0dXMgQ29yZUF1ZGlvU2hhcmVkVW5pdDo6cmVjb25maWd1cmVBdWRp
b1VuaXQoKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgaWYgKCFoYXNBdWRp
b1VuaXQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBtX2lzUmVjb25maWd1cmluZyA9IHRy
dWU7CisgICAgYXV0byBzY29wZSA9IG1ha2VTY29wZUV4aXQoW3RoaXNdIHsgbV9pc1JlY29uZmln
dXJpbmcgPSBmYWxzZTsgfSk7CisKKyAgICBpZiAobV9pb1VuaXRTdGFydGVkKSB7CisgICAgICAg
IGlmIChhdXRvIGVyciA9IG1faW9Vbml0LT5zdG9wKCkpIHsKKyAgICAgICAgICAgIFJFTEVBU0Vf
TE9HX0VSUk9SKFdlYlJUQywgIkNvcmVBdWRpb1NoYXJlZFVuaXQ6OnJlY29uZmlndXJlQXVkaW9V
bml0KCVwKSBBdWRpb091dHB1dFVuaXRTdG9wIGZhaWxlZCB3aXRoIGVycm9yICVkICglLjRzKSIs
IHRoaXMsIChpbnQpZXJyLCAoY2hhciopJmVycik7CisgICAgICAgICAgICByZXR1cm4gZXJyOwor
ICAgICAgICB9CisgICAgfQorCisgICAgY2xlYW51cEF1ZGlvVW5pdCgpOworICAgIGlmIChhdXRv
IGVyciA9IHNldHVwQXVkaW9Vbml0KCkpCisgICAgICAgIHJldHVybiBlcnI7CisKKyAgICBpZiAo
bV9pb1VuaXRTdGFydGVkKSB7CisgICAgICAgIGlmIChhdXRvIGVyciA9IG1faW9Vbml0LT5zdGFy
dCgpKSB7CisgICAgICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihXZWJSVEMsICJDb3JlQXVkaW9T
aGFyZWRVbml0OjpyZWNvbmZpZ3VyZUF1ZGlvVW5pdCglcCkgQXVkaW9PdXRwdXRVbml0U3RhcnQg
ZmFpbGVkIHdpdGggZXJyb3IgJWQgKCUuNHMpIiwgdGhpcywgKGludCllcnIsIChjaGFyKikmZXJy
KTsKKyAgICAgICAgICAgIHJldHVybiBlcnI7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJu
IG5vRXJyOworfQorCitPU1N0YXR1cyBDb3JlQXVkaW9TaGFyZWRVbml0OjpzdGFydEludGVybmFs
KCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworCisgICAgc2V0SXNQcm9kdWNpbmdN
aWNyb3Bob25lU2FtcGxlcyh0cnVlKTsKKworICAgIGlmICghbV9pb1VuaXQpIHsKKyAgICAgICAg
aWYgKGF1dG8gZXJyID0gc2V0dXBBdWRpb1VuaXQoKSkgeworICAgICAgICAgICAgY2xlYW51cEF1
ZGlvVW5pdCgpOworICAgICAgICAgICAgQVNTRVJUKCFtX2lvVW5pdCk7CisgICAgICAgICAgICBy
ZXR1cm4gZXJyOworICAgICAgICB9CisgICAgICAgIEFTU0VSVChtX2lvVW5pdCk7CisgICAgfQor
CisgICAgdW5kdWNrKCk7CisKKyAgICB7CisgICAgICAgIExvY2tlciBsb2NrZXIgeyBtX3NwZWFr
ZXJTYW1wbGVzUHJvZHVjZXJMb2NrIH07CisgICAgICAgIGlmIChtX3NwZWFrZXJTYW1wbGVzUHJv
ZHVjZXIpCisgICAgICAgICAgICBtX3NwZWFrZXJTYW1wbGVzUHJvZHVjZXItPmNhcHR1cmVVbml0
SXNTdGFydGluZygpOworICAgIH0KKworICAgIGlmIChhdXRvIGVyciA9IG1faW9Vbml0LT5zdGFy
dCgpKSB7CisgICAgICAgIHsKKyAgICAgICAgICAgIExvY2tlciBsb2NrZXIgeyBtX3NwZWFrZXJT
YW1wbGVzUHJvZHVjZXJMb2NrIH07CisgICAgICAgICAgICBpZiAobV9zcGVha2VyU2FtcGxlc1By
b2R1Y2VyKQorICAgICAgICAgICAgICAgIG1fc3BlYWtlclNhbXBsZXNQcm9kdWNlci0+Y2FwdHVy
ZVVuaXRIYXNTdG9wcGVkKCk7CisgICAgICAgIH0KKworICAgICAgICBSRUxFQVNFX0xPR19FUlJP
UihXZWJSVEMsICJDb3JlQXVkaW9TaGFyZWRVbml0OjpzdGFydCglcCkgQXVkaW9PdXRwdXRVbml0
U3RhcnQgZmFpbGVkIHdpdGggZXJyb3IgJWQgKCUuNHMpIiwgdGhpcywgKGludCllcnIsIChjaGFy
KikmZXJyKTsKKyAgICAgICAgY2xlYW51cEF1ZGlvVW5pdCgpOworICAgICAgICBBU1NFUlQoIW1f
aW9Vbml0KTsKKyAgICAgICAgcmV0dXJuIGVycjsKKyAgICB9CisKKyAgICBtX2lvVW5pdFN0YXJ0
ZWQgPSB0cnVlOworCisgICAgbV92ZXJpZnlDYXB0dXJpbmdUaW1lci5zdGFydFJlcGVhdGluZyh2
ZXJpZnlDYXB0dXJlSW50ZXJ2YWwoKSk7CisgICAgbV9taWNyb3Bob25lUHJvY3NDYWxsZWQgPSAw
OworICAgIG1fbWljcm9waG9uZVByb2NzQ2FsbGVkTGFzdFRpbWUgPSAwOworCisgICAgcmV0dXJu
IG5vRXJyOworfQorCit2b2lkIENvcmVBdWRpb1NoYXJlZFVuaXQ6OmlzUHJvZHVjaW5nTWljcm9w
aG9uZVNhbXBsZXNDaGFuZ2VkKCkKK3sKKyAgICBpZiAoIWlzUHJvZHVjaW5nRGF0YSgpKQorICAg
ICAgICByZXR1cm47CisgICAgbV92ZXJpZnlDYXB0dXJpbmdUaW1lci5zdGFydFJlcGVhdGluZyh2
ZXJpZnlDYXB0dXJlSW50ZXJ2YWwoKSk7Cit9CisKK3ZvaWQgQ29yZUF1ZGlvU2hhcmVkVW5pdDo6
dmFsaWRhdGVPdXRwdXREZXZpY2UodWludDMyX3QgY3VycmVudE91dHB1dERldmljZUlEKQorewor
I2lmIFBMQVRGT1JNKE1BQykKKyAgICBpZiAoIW1faW9Vbml0KQorICAgICAgICByZXR1cm47CisK
KyAgICB1aW50MzJfdCBjdXJyZW50RGVmYXVsdE91dHB1dERldmljZUlEID0gMDsKKyAgICBpZiAo
YXV0byBlcnIgPSBtX2lvVW5pdC0+ZGVmYXVsdE91dHB1dERldmljZSgmY3VycmVudERlZmF1bHRP
dXRwdXREZXZpY2VJRCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghY3VycmVudERlZmF1
bHRPdXRwdXREZXZpY2VJRCB8fCBjdXJyZW50T3V0cHV0RGV2aWNlSUQgPT0gY3VycmVudERlZmF1
bHRPdXRwdXREZXZpY2VJRCkKKyAgICAgICAgcmV0dXJuOworCisgICAgcmVjb25maWd1cmUoKTsK
KyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGN1cnJlbnRPdXRwdXREZXZpY2VJRCk7CisjZW5kaWYK
K30KKwordm9pZCBDb3JlQXVkaW9TaGFyZWRVbml0Ojp2ZXJpZnlJc0NhcHR1cmluZygpCit7Cisg
ICAgaWYgKG1fbWljcm9waG9uZVByb2NzQ2FsbGVkTGFzdFRpbWUgIT0gbV9taWNyb3Bob25lUHJv
Y3NDYWxsZWQpIHsKKyAgICAgICAgbV9taWNyb3Bob25lUHJvY3NDYWxsZWRMYXN0VGltZSA9IG1f
bWljcm9waG9uZVByb2NzQ2FsbGVkOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgUkVM
RUFTRV9MT0dfRVJST1IoV2ViUlRDLCAiQ29yZUF1ZGlvU2hhcmVkVW5pdDo6dmVyaWZ5SXNDYXB0
dXJpbmcgLSBubyBhdWRpbyByZWNlaXZlZCBpbiAlZCBzZWNvbmRzLCBmYWlsaW5nIiwgc3RhdGlj
X2Nhc3Q8aW50PihtX3ZlcmlmeUNhcHR1cmluZ1RpbWVyLnJlcGVhdEludGVydmFsKCkudmFsdWUo
KSkpOworICAgIGNhcHR1cmVGYWlsZWQoKTsKK30KKwordm9pZCBDb3JlQXVkaW9TaGFyZWRVbml0
OjpzdG9wSW50ZXJuYWwoKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisKKyAgICBt
X3ZlcmlmeUNhcHR1cmluZ1RpbWVyLnN0b3AoKTsKKworICAgIGlmICghbV9pb1VuaXQgfHwgIW1f
aW9Vbml0U3RhcnRlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKGF1dG8gZXJyID0gbV9p
b1VuaXQtPnN0b3AoKSkgeworICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihXZWJSVEMsICJDb3Jl
QXVkaW9TaGFyZWRVbml0OjpzdG9wKCVwKSBBdWRpb091dHB1dFVuaXRTdG9wIGZhaWxlZCB3aXRo
IGVycm9yICVkICglLjRzKSIsIHRoaXMsIChpbnQpZXJyLCAoY2hhciopJmVycik7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgeworICAgICAgICBMb2NrZXIgbG9ja2VyIHsgbV9zcGVha2Vy
U2FtcGxlc1Byb2R1Y2VyTG9jayB9OworICAgICAgICBpZiAobV9zcGVha2VyU2FtcGxlc1Byb2R1
Y2VyKQorICAgICAgICAgICAgbV9zcGVha2VyU2FtcGxlc1Byb2R1Y2VyLT5jYXB0dXJlVW5pdEhh
c1N0b3BwZWQoKTsKKyAgICB9CisKKyAgICBtX2lvVW5pdFN0YXJ0ZWQgPSBmYWxzZTsKK30KKwor
dm9pZCBDb3JlQXVkaW9TaGFyZWRVbml0OjpyZWdpc3RlclNwZWFrZXJTYW1wbGVzUHJvZHVjZXIo
Q29yZUF1ZGlvU3BlYWtlclNhbXBsZXNQcm9kdWNlciYgcHJvZHVjZXIpCit7CisgICAgQVNTRVJU
KGlzTWFpblRocmVhZCgpKTsKKworICAgIHNldElzUmVuZGVyaW5nQXVkaW8odHJ1ZSk7CisKKyAg
ICBDb3JlQXVkaW9TcGVha2VyU2FtcGxlc1Byb2R1Y2VyKiBvbGRQcm9kdWNlcjsKKyAgICB7Cisg
ICAgICAgIExvY2tlciBsb2NrZXIgeyBtX3NwZWFrZXJTYW1wbGVzUHJvZHVjZXJMb2NrIH07Cisg
ICAgICAgIG9sZFByb2R1Y2VyID0gbV9zcGVha2VyU2FtcGxlc1Byb2R1Y2VyOworICAgICAgICBt
X3NwZWFrZXJTYW1wbGVzUHJvZHVjZXIgPSAmcHJvZHVjZXI7CisgICAgfQorICAgIGlmIChvbGRQ
cm9kdWNlciAmJiBvbGRQcm9kdWNlciAhPSAmcHJvZHVjZXIpCisgICAgICAgIG9sZFByb2R1Y2Vy
LT5jYXB0dXJlVW5pdEhhc1N0b3BwZWQoKTsKKworICAgIGlmIChoYXNBdWRpb1VuaXQoKSAmJiBw
cm9kdWNlci5mb3JtYXQoKSAhPSBtX3NwZWFrZXJQcm9jRm9ybWF0KQorICAgICAgICByZWNvbmZp
Z3VyZSgpOworfQorCit2b2lkIENvcmVBdWRpb1NoYXJlZFVuaXQ6OnVucmVnaXN0ZXJTcGVha2Vy
U2FtcGxlc1Byb2R1Y2VyKENvcmVBdWRpb1NwZWFrZXJTYW1wbGVzUHJvZHVjZXImIHByb2R1Y2Vy
KQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisKKyAgICB7CisgICAgICAgIExvY2tl
ciBsb2NrZXIgeyBtX3NwZWFrZXJTYW1wbGVzUHJvZHVjZXJMb2NrIH07CisgICAgICAgIGlmICht
X3NwZWFrZXJTYW1wbGVzUHJvZHVjZXIgIT0gJnByb2R1Y2VyKQorICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICBtX3NwZWFrZXJTYW1wbGVzUHJvZHVjZXIgPSBudWxscHRyOworICAgIH0KKwor
ICAgIHNldElzUmVuZGVyaW5nQXVkaW8oZmFsc2UpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFNKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0NvcmVBdWRpb1NoYXJlZFVuaXQuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9Db3JlQXVkaW9TaGFyZWRV
bml0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uZmI0YjhjYmNiMGE1YzYwYmY4NzcxMjUwMmYyMTVmNTM2MWFmM2Nj
OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFt
L21hYy9Db3JlQXVkaW9TaGFyZWRVbml0LmgKQEAgLTAsMCArMSwxNTUgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTctMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisj
aWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKKworI2luY2x1ZGUgIkF1ZGlvU2FtcGxlRGF0YVNvdXJj
ZS5oIgorI2luY2x1ZGUgIkJhc2VBdWRpb1NoYXJlZFVuaXQuaCIKKyNpbmNsdWRlICJDQUF1ZGlv
U3RyZWFtRGVzY3JpcHRpb24uaCIKKyNpbmNsdWRlICJUaW1lci5oIgorCit0eXBlZGVmIFVJbnQz
MiBBdWRpb1VuaXRQcm9wZXJ0eUlEOwordHlwZWRlZiBVSW50MzIgQXVkaW9Vbml0U2NvcGU7Cit0
eXBlZGVmIFVJbnQzMiBBdWRpb1VuaXRFbGVtZW50OwordHlwZWRlZiBVSW50MzIgQXVkaW9Vbml0
UmVuZGVyQWN0aW9uRmxhZ3M7CisKK3N0cnVjdCBBdWRpb0J1ZmZlckxpc3Q7CitzdHJ1Y3QgQXVk
aW9UaW1lU3RhbXA7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ29yZUF1ZGlvU3Bl
YWtlclNhbXBsZXNQcm9kdWNlcjsKKworY2xhc3MgQ29yZUF1ZGlvU2hhcmVkVW5pdCBmaW5hbCA6
IHB1YmxpYyBCYXNlQXVkaW9TaGFyZWRVbml0IHsKK3B1YmxpYzoKKyAgICBjbGFzcyBJbnRlcm5h
bFVuaXQgeworICAgIHB1YmxpYzoKKyAgICAgICAgdmlydHVhbCB+SW50ZXJuYWxVbml0KCkgPSBk
ZWZhdWx0OworICAgICAgICB2aXJ0dWFsIE9TU3RhdHVzIGluaXRpYWxpemUoKSA9IDA7CisgICAg
ICAgIHZpcnR1YWwgT1NTdGF0dXMgdW5pbml0aWFsaXplKCkgPSAwOworICAgICAgICB2aXJ0dWFs
IE9TU3RhdHVzIHN0YXJ0KCkgPSAwOworICAgICAgICB2aXJ0dWFsIE9TU3RhdHVzIHN0b3AoKSA9
IDA7CisgICAgICAgIHZpcnR1YWwgT1NTdGF0dXMgc2V0KEF1ZGlvVW5pdFByb3BlcnR5SUQsIEF1
ZGlvVW5pdFNjb3BlLCBBdWRpb1VuaXRFbGVtZW50LCBjb25zdCB2b2lkKiwgVUludDMyKSA9IDA7
CisgICAgICAgIHZpcnR1YWwgT1NTdGF0dXMgZ2V0KEF1ZGlvVW5pdFByb3BlcnR5SUQsIEF1ZGlv
VW5pdFNjb3BlLCBBdWRpb1VuaXRFbGVtZW50LCB2b2lkKiwgVUludDMyKikgPSAwOworICAgICAg
ICB2aXJ0dWFsIE9TU3RhdHVzIHJlbmRlcihBdWRpb1VuaXRSZW5kZXJBY3Rpb25GbGFncyosIGNv
bnN0IEF1ZGlvVGltZVN0YW1wKiwgVUludDMyLCBVSW50MzIsIEF1ZGlvQnVmZmVyTGlzdCopID0g
MDsKKyAgICAgICAgdmlydHVhbCBPU1N0YXR1cyBkZWZhdWx0SW5wdXREZXZpY2UodWludDMyX3Qq
KSA9IDA7CisgICAgICAgIHZpcnR1YWwgT1NTdGF0dXMgZGVmYXVsdE91dHB1dERldmljZSh1aW50
MzJfdCopID0gMDsKKyAgICAgICAgdmlydHVhbCB2b2lkIGRlbGF5U2FtcGxlcyhTZWNvbmRzKSB7
IH0KKyAgICB9OworCisgICAgc3RhdGljIENvcmVBdWRpb1NoYXJlZFVuaXQmIHVuaXQoKTsKKyAg
ICBzdGF0aWMgQmFzZUF1ZGlvU2hhcmVkVW5pdCYgc2luZ2xldG9uKCkgIHsgcmV0dXJuIHVuaXQo
KTsgfQorICAgIENvcmVBdWRpb1NoYXJlZFVuaXQoKTsKKworICAgIHVzaW5nIENyZWF0aW9uQ2Fs
bGJhY2sgPSBGdW5jdGlvbjxFeHBlY3RlZDxVbmlxdWVSZWY8SW50ZXJuYWxVbml0PiwgT1NTdGF0
dXM+KCk+OworICAgIHZvaWQgc2V0SW50ZXJuYWxVbml0Q3JlYXRpb25DYWxsYmFjayhDcmVhdGlv
bkNhbGxiYWNrJiYgY2FsbGJhY2spIHsgbV9jcmVhdGlvbkNhbGxiYWNrID0gV1RGTW92ZShjYWxs
YmFjayk7IH0KKyAgICB1c2luZyBHZXRTYW1wbGVSYXRlQ2FsbGJhY2sgPSBGdW5jdGlvbjxpbnQo
KT47CisgICAgdm9pZCBzZXRJbnRlcm5hbFVuaXRHZXRTYW1wbGVSYXRlQ2FsbGJhY2soR2V0U2Ft
cGxlUmF0ZUNhbGxiYWNrJiYgY2FsbGJhY2spIHsgbV9nZXRTYW1wbGVSYXRlQ2FsbGJhY2sgPSBX
VEZNb3ZlKGNhbGxiYWNrKTsgfQorCisgICAgdm9pZCByZWdpc3RlclNwZWFrZXJTYW1wbGVzUHJv
ZHVjZXIoQ29yZUF1ZGlvU3BlYWtlclNhbXBsZXNQcm9kdWNlciYpOworICAgIHZvaWQgdW5yZWdp
c3RlclNwZWFrZXJTYW1wbGVzUHJvZHVjZXIoQ29yZUF1ZGlvU3BlYWtlclNhbXBsZXNQcm9kdWNl
ciYpOworICAgIGJvb2wgaXNSdW5uaW5nKCkgY29uc3QgeyByZXR1cm4gbV9pb1VuaXRTdGFydGVk
OyB9CisgICAgdm9pZCBzZXRTYW1wbGVSYXRlUmFuZ2UoQ2FwYWJpbGl0eVZhbHVlT3JSYW5nZSBy
YW5nZSkgeyBtX3NhbXBsZVJhdGVDYXBhYmlsaXRpZXMgPSByYW5nZTsgfQorCitwcml2YXRlOgor
ICAgIHN0YXRpYyBzaXplX3QgcHJlZmVycmVkSU9CdWZmZXJTaXplKCk7CisKKyAgICBDYXBhYmls
aXR5VmFsdWVPclJhbmdlIHNhbXBsZVJhdGVDYXBhY2l0aWVzKCkgY29uc3QgZmluYWwgeyByZXR1
cm4gbV9zYW1wbGVSYXRlQ2FwYWJpbGl0aWVzOyB9CisgICAgY29uc3QgQ0FBdWRpb1N0cmVhbURl
c2NyaXB0aW9uJiBtaWNyb3Bob25lRm9ybWF0KCkgY29uc3QgeyByZXR1cm4gbV9taWNyb3Bob25l
UHJvY0Zvcm1hdDsgfQorCisgICAgYm9vbCBoYXNBdWRpb1VuaXQoKSBjb25zdCBmaW5hbCB7IHJl
dHVybiAhIW1faW9Vbml0OyB9CisgICAgdm9pZCBjYXB0dXJlRGV2aWNlQ2hhbmdlZCgpIGZpbmFs
OworICAgIE9TU3RhdHVzIHJlY29uZmlndXJlQXVkaW9Vbml0KCkgZmluYWw7CisgICAgdm9pZCBk
ZWxheVNhbXBsZXMoU2Vjb25kcykgZmluYWw7CisKKyAgICBPU1N0YXR1cyBzZXR1cEF1ZGlvVW5p
dCgpOworICAgIHZvaWQgY2xlYW51cEF1ZGlvVW5pdCgpIGZpbmFsOworCisgICAgT1NTdGF0dXMg
c3RhcnRJbnRlcm5hbCgpIGZpbmFsOworICAgIHZvaWQgc3RvcEludGVybmFsKCkgZmluYWw7Cisg
ICAgYm9vbCBpc1Byb2R1Y2luZ0RhdGEoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2lvVW5pdFN0
YXJ0ZWQ7IH0KKyAgICB2b2lkIGlzUHJvZHVjaW5nTWljcm9waG9uZVNhbXBsZXNDaGFuZ2VkKCkg
ZmluYWw7CisgICAgdm9pZCB2YWxpZGF0ZU91dHB1dERldmljZSh1aW50MzJfdCBkZXZpY2VJRCkg
ZmluYWw7CisgICAgaW50IGFjdHVhbFNhbXBsZVJhdGUoKSBjb25zdCBmaW5hbDsKKyAgICB2b2lk
IHJlc2V0U2FtcGxlUmF0ZSgpOworCisgICAgT1NTdGF0dXMgY29uZmlndXJlU3BlYWtlclByb2Mo
aW50IHNhbXBsZVJhdGUpOworICAgIE9TU3RhdHVzIGNvbmZpZ3VyZU1pY3JvcGhvbmVQcm9jKGlu
dCBzYW1wbGVSYXRlKTsKKworICAgIHN0YXRpYyBPU1N0YXR1cyBtaWNyb3Bob25lQ2FsbGJhY2so
dm9pZCosIEF1ZGlvVW5pdFJlbmRlckFjdGlvbkZsYWdzKiwgY29uc3QgQXVkaW9UaW1lU3RhbXAq
LCBVSW50MzIsIFVJbnQzMiwgQXVkaW9CdWZmZXJMaXN0Kik7CisgICAgT1NTdGF0dXMgcHJvY2Vz
c01pY3JvcGhvbmVTYW1wbGVzKEF1ZGlvVW5pdFJlbmRlckFjdGlvbkZsYWdzJiwgY29uc3QgQXVk
aW9UaW1lU3RhbXAmLCBVSW50MzIsIFVJbnQzMiwgQXVkaW9CdWZmZXJMaXN0Kik7CisKKyAgICBz
dGF0aWMgT1NTdGF0dXMgc3BlYWtlckNhbGxiYWNrKHZvaWQqLCBBdWRpb1VuaXRSZW5kZXJBY3Rp
b25GbGFncyosIGNvbnN0IEF1ZGlvVGltZVN0YW1wKiwgVUludDMyLCBVSW50MzIsIEF1ZGlvQnVm
ZmVyTGlzdCopOworICAgIE9TU3RhdHVzIHByb3ZpZGVTcGVha2VyRGF0YShBdWRpb1VuaXRSZW5k
ZXJBY3Rpb25GbGFncyYsIGNvbnN0IEF1ZGlvVGltZVN0YW1wJiwgVUludDMyLCBVSW50MzIsIEF1
ZGlvQnVmZmVyTGlzdCYpOworCisgICAgdm9pZCB1bmR1Y2soKTsKKworICAgIHZvaWQgdmVyaWZ5
SXNDYXB0dXJpbmcoKTsKKworICAgIFNlY29uZHMgdmVyaWZ5Q2FwdHVyZUludGVydmFsKCkgeyBy
ZXR1cm4gaXNQcm9kdWNpbmdNaWNyb3Bob25lU2FtcGxlcygpID8gMTBfcyA6IDJfczsgfQorCisg
ICAgQ3JlYXRpb25DYWxsYmFjayBtX2NyZWF0aW9uQ2FsbGJhY2s7CisgICAgR2V0U2FtcGxlUmF0
ZUNhbGxiYWNrIG1fZ2V0U2FtcGxlUmF0ZUNhbGxiYWNrOworICAgIHN0ZDo6dW5pcXVlX3B0cjxJ
bnRlcm5hbFVuaXQ+IG1faW9Vbml0OworCisgICAgLy8gT25seSByZWFkL21vZGlmaWVkIGZyb20g
dGhlIElPIHRocmVhZC4KKyAgICBWZWN0b3I8UmVmPEF1ZGlvU2FtcGxlRGF0YVNvdXJjZT4+IG1f
YWN0aXZlU291cmNlczsKKworICAgIENBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbiBtX21pY3JvcGhv
bmVQcm9jRm9ybWF0OworICAgIFJlZlB0cjxBdWRpb1NhbXBsZUJ1ZmZlckxpc3Q+IG1fbWljcm9w
aG9uZVNhbXBsZUJ1ZmZlcjsKKyAgICB1aW50NjRfdCBtX2xhdGVzdE1pY1RpbWVTdGFtcCB7IDAg
fTsKKworICAgIENBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbiBtX3NwZWFrZXJQcm9jRm9ybWF0Owor
CisgICAgZG91YmxlIG1fRFRTQ29udmVyc2lvblJhdGlvIHsgMCB9OworCisgICAgYm9vbCBtX2lv
VW5pdEluaXRpYWxpemVkIHsgZmFsc2UgfTsKKyAgICBib29sIG1faW9Vbml0U3RhcnRlZCB7IGZh
bHNlIH07CisKKyAgICBtdXRhYmxlIHN0ZDo6dW5pcXVlX3B0cjxSZWFsdGltZU1lZGlhU291cmNl
Q2FwYWJpbGl0aWVzPiBtX2NhcGFiaWxpdGllczsKKyAgICBtdXRhYmxlIHN0ZDo6b3B0aW9uYWw8
UmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzPiBtX2N1cnJlbnRTZXR0aW5nczsKKworI2lmICFM
T0dfRElTQUJMRUQKKyAgICB2b2lkIGNoZWNrVGltZXN0YW1wcyhjb25zdCBBdWRpb1RpbWVTdGFt
cCYsIHVpbnQ2NF90LCBkb3VibGUpOworCisgICAgU3RyaW5nIG1faW9Vbml0TmFtZTsKKyNlbmRp
ZgorCisgICAgQ2FwYWJpbGl0eVZhbHVlT3JSYW5nZSBtX3NhbXBsZVJhdGVDYXBhYmlsaXRpZXM7
CisKKyAgICB1aW50NjRfdCBtX21pY3JvcGhvbmVQcm9jc0NhbGxlZCB7IDAgfTsKKyAgICB1aW50
NjRfdCBtX21pY3JvcGhvbmVQcm9jc0NhbGxlZExhc3RUaW1lIHsgMCB9OworICAgIFRpbWVyIG1f
dmVyaWZ5Q2FwdHVyaW5nVGltZXI7CisKKyAgICBib29sIG1faXNSZWNvbmZpZ3VyaW5nIHsgZmFs
c2UgfTsKKyAgICBtdXRhYmxlIExvY2sgbV9zcGVha2VyU2FtcGxlc1Byb2R1Y2VyTG9jazsKKyAg
ICBDb3JlQXVkaW9TcGVha2VyU2FtcGxlc1Byb2R1Y2VyKiBtX3NwZWFrZXJTYW1wbGVzUHJvZHVj
ZXIgV1RGX0dVQVJERURfQllfTE9DSyhtX3NwZWFrZXJTYW1wbGVzUHJvZHVjZXJMb2NrKSB7IG51
bGxwdHIgfTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJM
RShNRURJQV9TVFJFQU0pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRp
YXN0cmVhbS9tYWMvTW9ja0F1ZGlvU2hhcmVkVW5pdC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWVkaWFzdHJlYW0vbWFjL01vY2tBdWRpb1NoYXJlZFVuaXQuaAppbmRleCAxYTg5NmFiNzM4
NTI4NTRiYTc3N2JjNGQxNjZmOWNhMmU1ZGEyYWY4Li45OWE5ZGZkZmRlMzdiMWMxYWFjMWQ4N2Rj
ZmZlMDBhMzBkOWE4Y2JmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRp
YXN0cmVhbS9tYWMvTW9ja0F1ZGlvU2hhcmVkVW5pdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21lZGlhc3RyZWFtL21hYy9Nb2NrQXVkaW9TaGFyZWRVbml0LmgKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjIgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNyw3MiAr
MjcsMTUgQEAKIAogI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCiAKLSNpbmNsdWRlICJCYXNlQXVk
aW9TaGFyZWRVbml0LmgiCi0jaW5jbHVkZSA8Q29yZUF1ZGlvL0NvcmVBdWRpb1R5cGVzLmg+Ci0j
aW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0jaW5jbHVk
ZSA8d3RmL1dvcmtRdWV1ZS5oPgotCi1PQkpDX0NMQVNTIEFWQXVkaW9QQ01CdWZmZXI7Ci10eXBl
ZGVmIHN0cnVjdCBPcGFxdWVDTUNsb2NrKiBDTUNsb2NrUmVmOwotdHlwZWRlZiBjb25zdCBzdHJ1
Y3Qgb3BhcXVlQ01Gb3JtYXREZXNjcmlwdGlvbiogQ01Gb3JtYXREZXNjcmlwdGlvblJlZjsKKyNp
bmNsdWRlICJDb3JlQXVkaW9TaGFyZWRVbml0LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
Y2xhc3MgV2ViQXVkaW9CdWZmZXJMaXN0OwotY2xhc3MgV2ViQXVkaW9Tb3VyY2VQcm92aWRlckNv
Y29hOwotCi1jbGFzcyBNb2NrQXVkaW9TaGFyZWRVbml0IGZpbmFsIDogcHVibGljIEJhc2VBdWRp
b1NoYXJlZFVuaXQgewotcHVibGljOgotICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBNb2NrQXVk
aW9TaGFyZWRVbml0JiBzaW5nbGV0b24oKTsKLSAgICBNb2NrQXVkaW9TaGFyZWRVbml0KCk7Ci0K
LSAgICB2b2lkIHNldERldmljZUlEKGNvbnN0IFN0cmluZyYgZGV2aWNlSUQpIHsgc2V0Q2FwdHVy
ZURldmljZShTdHJpbmcgeyBkZXZpY2VJRCB9LCAwKTsgfQotCi1wcml2YXRlOgotICAgIGJvb2wg
aGFzQXVkaW9Vbml0KCkgY29uc3QgZmluYWw7Ci0gICAgdm9pZCBjYXB0dXJlRGV2aWNlQ2hhbmdl
ZCgpIGZpbmFsOwotICAgIE9TU3RhdHVzIHJlY29uZmlndXJlQXVkaW9Vbml0KCkgZmluYWw7Ci0g
ICAgdm9pZCByZXNldFNhbXBsZVJhdGUoKSBmaW5hbDsKLQotICAgIHZvaWQgY2xlYW51cEF1ZGlv
VW5pdCgpIGZpbmFsOwotICAgIE9TU3RhdHVzIHN0YXJ0SW50ZXJuYWwoKSBmaW5hbDsKLSAgICB2
b2lkIHN0b3BJbnRlcm5hbCgpIGZpbmFsOwotICAgIGJvb2wgaXNQcm9kdWNpbmdEYXRhKCkgY29u
c3QgZmluYWw7Ci0KLSAgICB2b2lkIGRlbGF5U2FtcGxlcyhTZWNvbmRzKSBmaW5hbDsKLQotICAg
IHZvaWQgc3RhcnQoKTsKLSAgICBDYXBhYmlsaXR5VmFsdWVPclJhbmdlIHNhbXBsZVJhdGVDYXBh
Y2l0aWVzKCkgY29uc3QgZmluYWwgeyByZXR1cm4gQ2FwYWJpbGl0eVZhbHVlT3JSYW5nZSg0NDEw
MCwgNDgwMDApOyB9Ci0KLSAgICB2b2lkIHRpY2soKTsKLQotICAgIHZvaWQgcmVuZGVyKE1vbm90
b25pY1RpbWUpOwotICAgIHZvaWQgZW1pdFNhbXBsZUJ1ZmZlcnModWludDMyX3QgZnJhbWVDb3Vu
dCk7Ci0gICAgdm9pZCByZWNvbmZpZ3VyZSgpOwotCi0gICAgc3RhdGljIFNlY29uZHMgcmVuZGVy
SW50ZXJ2YWwoKSB7IHJldHVybiAyMF9tczsgfQotCi0gICAgc3RkOjp1bmlxdWVfcHRyPFdlYkF1
ZGlvQnVmZmVyTGlzdD4gbV9hdWRpb0J1ZmZlckxpc3Q7Ci0KLSAgICB1aW50MzJfdCBtX21heGlt
aXVtRnJhbWVDb3VudDsKLSAgICB1aW50NjRfdCBtX3NhbXBsZXNFbWl0dGVkIHsgMCB9OwotICAg
IHVpbnQ2NF90IG1fc2FtcGxlc1JlbmRlcmVkIHsgMCB9OwotCi0gICAgUmV0YWluUHRyPENNRm9y
bWF0RGVzY3JpcHRpb25SZWY+IG1fZm9ybWF0RGVzY3JpcHRpb247Ci0gICAgQXVkaW9TdHJlYW1C
YXNpY0Rlc2NyaXB0aW9uIG1fc3RyZWFtRm9ybWF0OwotCi0gICAgVmVjdG9yPGZsb2F0PiBtX2Jp
cEJvcEJ1ZmZlcjsKLSAgICBib29sIG1faGFzQXVkaW9Vbml0IHsgZmFsc2UgfTsKLSAgICBib29s
IG1faXNQcm9kdWNpbmdEYXRhIHsgZmFsc2UgfTsKK25hbWVzcGFjZSBNb2NrQXVkaW9TaGFyZWRV
bml0IHsKIAotICAgIFJ1bkxvb3A6OlRpbWVyPE1vY2tBdWRpb1NoYXJlZFVuaXQ+IG1fdGltZXI7
Ci0gICAgTW9ub3RvbmljVGltZSBtX2xhc3RSZW5kZXJUaW1lIHsgTW9ub3RvbmljVGltZTo6bmFu
KCkgfTsKLSAgICBNb25vdG9uaWNUaW1lIG1fZGVsYXlVbnRpbDsKK0NvcmVBdWRpb1NoYXJlZFVu
aXQmIHNpbmdsZXRvbigpOwogCi0gICAgUmVmPFdvcmtRdWV1ZT4gbV93b3JrUXVldWU7Ci0gICAg
dW5zaWduZWQgbV9jaGFubmVsQ291bnQgeyAyIH07Ci19OworfQogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFt
L21hYy9Nb2NrQXVkaW9TaGFyZWRVbml0Lm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVk
aWFzdHJlYW0vbWFjL01vY2tBdWRpb1NoYXJlZFVuaXQubW0KaW5kZXggN2YxYWM4MzU5ODM2ZWVh
ZDgyMjUxN2YzYmEzZWU1NTAxZmNlZDc4ZS4uOGJkYjVkZTI0NmZiYjcyOGNlZTMyMmQ1OGQ3Yjc5
ZTE5NWY2Njk3OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJl
YW0vbWFjL01vY2tBdWRpb1NoYXJlZFVuaXQubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWVkaWFzdHJlYW0vbWFjL01vY2tBdWRpb1NoYXJlZFVuaXQubW0KQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00Myw2ICs0Myw5
IEBACiAjaW1wb3J0IDxBVkZvdW5kYXRpb24vQVZBdWRpb0J1ZmZlci5oPgogI2ltcG9ydCA8QXVk
aW9Ub29sYm94L0F1ZGlvQ29udmVydGVyLmg+CiAjaW1wb3J0IDxDb3JlQXVkaW8vQ29yZUF1ZGlv
VHlwZXMuaD4KKyNpbmNsdWRlIDx3dGYvUnVuTG9vcC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3Iu
aD4KKyNpbmNsdWRlIDx3dGYvV29ya1F1ZXVlLmg+CiAKICNpbXBvcnQgPHBhbC9jZi9BdWRpb1Rv
b2xib3hTb2Z0TGluay5oPgogI2ltcG9ydCA8cGFsL2NmL0NvcmVNZWRpYVNvZnRMaW5rLmg+CkBA
IC05MCw2NyArOTMsMTExIEBAIENhcHR1cmVTb3VyY2VPckVycm9yIE1vY2tSZWFsdGltZUF1ZGlv
U291cmNlOjpjcmVhdGUoU3RyaW5nJiYgZGV2aWNlSUQsIEF0b21TdHJpCiAgICAgaWYgKCFkZXZp
Y2UpCiAgICAgICAgIHJldHVybiB7ICJObyBtb2NrIG1pY3JvcGhvbmUgZGV2aWNlIl9zIH07CiAK
LSAgICBNb2NrQXVkaW9TaGFyZWRVbml0OjpzaW5nbGV0b24oKS5zZXREZXZpY2VJRChkZXZpY2VJ
RCk7CisgICAgTW9ja0F1ZGlvU2hhcmVkVW5pdDo6c2luZ2xldG9uKCkuc2V0Q2FwdHVyZURldmlj
ZShTdHJpbmcgeyBkZXZpY2VJRCB9LCAwKTsKICAgICByZXR1cm4gQ29yZUF1ZGlvQ2FwdHVyZVNv
dXJjZTo6Y3JlYXRlRm9yVGVzdGluZyhXVEZNb3ZlKGRldmljZUlEKSwgV1RGTW92ZShuYW1lKSwg
V1RGTW92ZShoYXNoU2FsdCksIGNvbnN0cmFpbnRzLCBNb2NrQXVkaW9TaGFyZWRVbml0OjpzaW5n
bGV0b24oKSwgcGFnZUlkZW50aWZpZXIpOwogfQogCi1Nb2NrQXVkaW9TaGFyZWRVbml0JiBNb2Nr
QXVkaW9TaGFyZWRVbml0OjpzaW5nbGV0b24oKQotewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3ll
ZDxNb2NrQXVkaW9TaGFyZWRVbml0PiBzaW5nbGV0b247Ci0gICAgcmV0dXJuIHNpbmdsZXRvbjsK
LX0KLQotTW9ja0F1ZGlvU2hhcmVkVW5pdDo6TW9ja0F1ZGlvU2hhcmVkVW5pdCgpCi0gICAgOiBt
X3RpbWVyKFJ1bkxvb3A6OmN1cnJlbnQoKSwgdGhpcywgJk1vY2tBdWRpb1NoYXJlZFVuaXQ6OnN0
YXJ0KQotICAgICwgbV93b3JrUXVldWUoV29ya1F1ZXVlOjpjcmVhdGUoIk1vY2tBdWRpb1NoYXJl
ZFVuaXQgQ2FwdHVyZSBRdWV1ZSIsIFdvcmtRdWV1ZTo6UU9TOjpVc2VySW50ZXJhY3RpdmUpKQor
Y2xhc3MgTW9ja0F1ZGlvU2hhcmVkSW50ZXJuYWxVbml0IDogIHB1YmxpYyBDb3JlQXVkaW9TaGFy
ZWRVbml0OjpJbnRlcm5hbFVuaXQgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVi
bGljOgorICAgIE1vY2tBdWRpb1NoYXJlZEludGVybmFsVW5pdCgpOworICAgIH5Nb2NrQXVkaW9T
aGFyZWRJbnRlcm5hbFVuaXQoKTsKKworcHJpdmF0ZToKKyAgICBPU1N0YXR1cyBpbml0aWFsaXpl
KCkgZmluYWw7CisgICAgT1NTdGF0dXMgdW5pbml0aWFsaXplKCkgZmluYWwgeyByZXR1cm4gMDsg
fQorICAgIE9TU3RhdHVzIHN0YXJ0KCkgZmluYWw7CisgICAgT1NTdGF0dXMgc3RvcCgpIGZpbmFs
OworICAgIE9TU3RhdHVzIHNldChBdWRpb1VuaXRQcm9wZXJ0eUlELCBBdWRpb1VuaXRTY29wZSwg
QXVkaW9Vbml0RWxlbWVudCwgY29uc3Qgdm9pZCosIFVJbnQzMikgZmluYWw7CisgICAgT1NTdGF0
dXMgZ2V0KEF1ZGlvVW5pdFByb3BlcnR5SUQsIEF1ZGlvVW5pdFNjb3BlLCBBdWRpb1VuaXRFbGVt
ZW50LCB2b2lkKiwgVUludDMyKikgZmluYWw7CisgICAgT1NTdGF0dXMgcmVuZGVyKEF1ZGlvVW5p
dFJlbmRlckFjdGlvbkZsYWdzKiwgY29uc3QgQXVkaW9UaW1lU3RhbXAqLCBVSW50MzIsIFVJbnQz
MiwgQXVkaW9CdWZmZXJMaXN0KikgZmluYWw7CisgICAgT1NTdGF0dXMgZGVmYXVsdElucHV0RGV2
aWNlKHVpbnQzMl90KikgZmluYWw7CisgICAgT1NTdGF0dXMgZGVmYXVsdE91dHB1dERldmljZSh1
aW50MzJfdCopIGZpbmFsOworICAgIHZvaWQgZGVsYXlTYW1wbGVzKFNlY29uZHMpIGZpbmFsOwor
CisgICAgaW50IHNhbXBsZVJhdGUoKSBjb25zdCB7IHJldHVybiBtX3N0cmVhbUZvcm1hdC5tU2Ft
cGxlUmF0ZTsgfQorICAgIHZvaWQgdGljaygpOworCisgICAgdm9pZCBnZW5lcmF0ZVNhbXBsZUJ1
ZmZlcnMoTW9ub3RvbmljVGltZSk7CisgICAgdm9pZCBlbWl0U2FtcGxlQnVmZmVycyh1aW50MzJf
dCBmcmFtZUNvdW50KTsKKyAgICB2b2lkIHJlY29uZmlndXJlKCk7CisKKyAgICBzdGF0aWMgU2Vj
b25kcyByZW5kZXJJbnRlcnZhbCgpIHsgcmV0dXJuIDIwX21zOyB9CisKKyAgICBzdGQ6OnVuaXF1
ZV9wdHI8V2ViQXVkaW9CdWZmZXJMaXN0PiBtX2F1ZGlvQnVmZmVyTGlzdDsKKworICAgIHVpbnQz
Ml90IG1fbWF4aW1pdW1GcmFtZUNvdW50OworICAgIHVpbnQ2NF90IG1fc2FtcGxlc0VtaXR0ZWQg
eyAwIH07CisgICAgdWludDY0X3QgbV9zYW1wbGVzUmVuZGVyZWQgeyAwIH07CisKKyAgICBSZXRh
aW5QdHI8Q01Gb3JtYXREZXNjcmlwdGlvblJlZj4gbV9mb3JtYXREZXNjcmlwdGlvbjsKKyAgICBB
dWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRpb24gbV9vdXRwdXRTdHJlYW1Gb3JtYXQ7CisgICAgQXVk
aW9TdHJlYW1CYXNpY0Rlc2NyaXB0aW9uIG1fc3RyZWFtRm9ybWF0OworCisgICAgVmVjdG9yPGZs
b2F0PiBtX2JpcEJvcEJ1ZmZlcjsKKyAgICBib29sIG1faGFzQXVkaW9Vbml0IHsgZmFsc2UgfTsK
KyAgICBib29sIG1faXNQcm9kdWNpbmdEYXRhIHsgZmFsc2UgfTsKKyAgICBib29sIG1fZW5hYmxl
RWNob0NhbmNlbGxhdGlvbiB7IHRydWUgfTsKKyAgICBSdW5Mb29wOjpUaW1lcjxNb2NrQXVkaW9T
aGFyZWRJbnRlcm5hbFVuaXQ+IG1fdGltZXI7CisgICAgTW9ub3RvbmljVGltZSBtX2xhc3RSZW5k
ZXJUaW1lIHsgTW9ub3RvbmljVGltZTo6bmFuKCkgfTsKKyAgICBNb25vdG9uaWNUaW1lIG1fZGVs
YXlVbnRpbDsKKworICAgIFJlZjxXb3JrUXVldWU+IG1fd29ya1F1ZXVlOworICAgIHVuc2lnbmVk
IG1fY2hhbm5lbENvdW50IHsgMiB9OworICAgIAorICAgIEFVUmVuZGVyQ2FsbGJhY2tTdHJ1Y3Qg
bV9taWNyb3Bob25lQ2FsbGJhY2s7CisgICAgQVVSZW5kZXJDYWxsYmFja1N0cnVjdCBtX3NwZWFr
ZXJDYWxsYmFjazsKK307CisKK0NvcmVBdWRpb1NoYXJlZFVuaXQmIE1vY2tBdWRpb1NoYXJlZFVu
aXQ6OnNpbmdsZXRvbigpCiB7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPENvcmVBdWRpb1No
YXJlZFVuaXQ+IHVuaXQ7CisgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2VGbGFnOworICAg
IHN0ZDo6Y2FsbF9vbmNlKG9uY2VGbGFnLCBbJl0gKCkgeworICAgICAgICB1bml0LT5zZXRTYW1w
bGVSYXRlUmFuZ2UoQ2FwYWJpbGl0eVZhbHVlT3JSYW5nZSg0NDEwMCwgNDgwMDApKTsKKyAgICAg
ICAgdW5pdC0+c2V0SW50ZXJuYWxVbml0Q3JlYXRpb25DYWxsYmFjayhbXSB7CisgICAgICAgICAg
ICBVbmlxdWVSZWY8Q29yZUF1ZGlvU2hhcmVkVW5pdDo6SW50ZXJuYWxVbml0PiByZXN1bHQgPSBt
YWtlVW5pcXVlUmVmPE1vY2tBdWRpb1NoYXJlZEludGVybmFsVW5pdD4oKTsKKyAgICAgICAgICAg
IHJldHVybiByZXN1bHQ7CisgICAgICAgIH0pOworICAgICAgICB1bml0LT5zZXRJbnRlcm5hbFVu
aXRHZXRTYW1wbGVSYXRlQ2FsbGJhY2soW10geyByZXR1cm4gNDQxMDA7IH0pOworICAgIH0pOwor
ICAgIHJldHVybiB1bml0OwogfQogCi12b2lkIE1vY2tBdWRpb1NoYXJlZFVuaXQ6OnJlc2V0U2Ft
cGxlUmF0ZSgpCitzdGF0aWMgQXVkaW9TdHJlYW1CYXNpY0Rlc2NyaXB0aW9uIGNyZWF0ZUF1ZGlv
Rm9ybWF0KEZsb2F0NjQgc2FtcGxlUmF0ZSwgVUludDMyIGNoYW5uZWxDb3VudCkKIHsKLSAgICBp
ZiAoYXV0byBkZXZpY2UgPSBNb2NrUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlcjo6bW9ja0Rldmlj
ZVdpdGhQZXJzaXN0ZW50SUQocGVyc2lzdGVudElEKCkpKQotICAgICAgICBzZXRTYW1wbGVSYXRl
KHN0ZDo6Z2V0PE1vY2tNaWNyb3Bob25lUHJvcGVydGllcz4oZGV2aWNlLT5wcm9wZXJ0aWVzKS5k
ZWZhdWx0U2FtcGxlUmF0ZSk7CisgICAgQXVkaW9TdHJlYW1CYXNpY0Rlc2NyaXB0aW9uIGZvcm1h
dDsKKyAgICBjb25zdCBpbnQgYnl0ZXNQZXJGbG9hdCA9IHNpemVvZihGbG9hdDMyKTsKKyAgICBj
b25zdCBpbnQgYml0c1BlckJ5dGUgPSA4OworICAgIGNvbnN0IGJvb2wgaXNGbG9hdCA9IHRydWU7
CisgICAgY29uc3QgYm9vbCBpc0JpZ0VuZGlhbiA9IGZhbHNlOworICAgIGNvbnN0IGJvb2wgaXNO
b25JbnRlcmxlYXZlZCA9IHRydWU7CisgICAgRmlsbE91dEFTQkRGb3JMUENNKGZvcm1hdCwgc2Ft
cGxlUmF0ZSwgY2hhbm5lbENvdW50LCBiaXRzUGVyQnl0ZSAqIGJ5dGVzUGVyRmxvYXQsIGJpdHNQ
ZXJCeXRlICogYnl0ZXNQZXJGbG9hdCwgaXNGbG9hdCwgaXNCaWdFbmRpYW4sIGlzTm9uSW50ZXJs
ZWF2ZWQpOworICAgIHJldHVybiBmb3JtYXQ7CiB9CiAKLWJvb2wgTW9ja0F1ZGlvU2hhcmVkVW5p
dDo6aGFzQXVkaW9Vbml0KCkgY29uc3QKK01vY2tBdWRpb1NoYXJlZEludGVybmFsVW5pdDo6TW9j
a0F1ZGlvU2hhcmVkSW50ZXJuYWxVbml0KCkKKyAgICA6IG1fdGltZXIoUnVuTG9vcDo6Y3VycmVu
dCgpLCBbdGhpc10geyB0aGlzLT5zdGFydCgpOyB9KQorICAgICwgbV93b3JrUXVldWUoV29ya1F1
ZXVlOjpjcmVhdGUoIk1vY2tBdWRpb1NoYXJlZEludGVybmFsVW5pdCBDYXB0dXJlIFF1ZXVlIiwg
V29ya1F1ZXVlOjpRT1M6OlVzZXJJbnRlcmFjdGl2ZSkpCiB7Ci0gICAgcmV0dXJuIG1faGFzQXVk
aW9Vbml0OworICAgIG1fc3RyZWFtRm9ybWF0ID0gbV9vdXRwdXRTdHJlYW1Gb3JtYXQgPSBjcmVh
dGVBdWRpb0Zvcm1hdCg0NDEwMCwgMik7CiB9CiAKLXZvaWQgTW9ja0F1ZGlvU2hhcmVkVW5pdDo6
Y2FwdHVyZURldmljZUNoYW5nZWQoKQorTW9ja0F1ZGlvU2hhcmVkSW50ZXJuYWxVbml0Ojp+TW9j
a0F1ZGlvU2hhcmVkSW50ZXJuYWxVbml0KCkKIHsKLSAgICByZWNvbmZpZ3VyZUF1ZGlvVW5pdCgp
OworICAgIEFTU0VSVCghbV9pc1Byb2R1Y2luZ0RhdGEpOwogfQogCi1PU1N0YXR1cyBNb2NrQXVk
aW9TaGFyZWRVbml0OjpyZWNvbmZpZ3VyZUF1ZGlvVW5pdCgpCitPU1N0YXR1cyBNb2NrQXVkaW9T
aGFyZWRJbnRlcm5hbFVuaXQ6OmluaXRpYWxpemUoKQogewotICAgIGlmICghaGFzQXVkaW9Vbml0
KCkpCi0gICAgICAgIHJldHVybiAwOworICAgIEFTU0VSVChtX291dHB1dFN0cmVhbUZvcm1hdC5t
U2FtcGxlUmF0ZSA9PSBtX3N0cmVhbUZvcm1hdC5tU2FtcGxlUmF0ZSk7CisgICAgaWYgKG1fb3V0
cHV0U3RyZWFtRm9ybWF0Lm1TYW1wbGVSYXRlICE9IG1fc3RyZWFtRm9ybWF0Lm1TYW1wbGVSYXRl
KQorICAgICAgICByZXR1cm4gLTE7CiAKLSAgICBtX2xhc3RSZW5kZXJUaW1lID0gTW9ub3Rvbmlj
VGltZTo6bmFuKCk7Ci0gICAgbV93b3JrUXVldWUtPmRpc3BhdGNoKFt0aGlzXSB7Ci0gICAgICAg
IHJlY29uZmlndXJlKCk7Ci0gICAgICAgIGNhbGxPbk1haW5UaHJlYWQoW3RoaXNdIHsKLSAgICAg
ICAgICAgIHN0YXJ0SW50ZXJuYWwoKTsKLSAgICAgICAgfSk7Ci0gICAgfSk7CiAgICAgcmV0dXJu
IDA7CiB9CiAKLXZvaWQgTW9ja0F1ZGlvU2hhcmVkVW5pdDo6Y2xlYW51cEF1ZGlvVW5pdCgpCi17
Ci0gICAgbV9oYXNBdWRpb1VuaXQgPSBmYWxzZTsKLSAgICBtX2lzUHJvZHVjaW5nRGF0YSA9IGZh
bHNlOwotICAgIG1fbGFzdFJlbmRlclRpbWUgPSBNb25vdG9uaWNUaW1lOjpuYW4oKTsKLX0KLQot
T1NTdGF0dXMgTW9ja0F1ZGlvU2hhcmVkVW5pdDo6c3RhcnRJbnRlcm5hbCgpCi17Ci0gICAgc3Rh
cnQoKTsKLSAgICByZXR1cm4gMDsKLX0KLQotdm9pZCBNb2NrQXVkaW9TaGFyZWRVbml0OjpzdGFy
dCgpCitPU1N0YXR1cyBNb2NrQXVkaW9TaGFyZWRJbnRlcm5hbFVuaXQ6OnN0YXJ0KCkKIHsKICAg
ICBpZiAoIW1faGFzQXVkaW9Vbml0KQogICAgICAgICBtX2hhc0F1ZGlvVW5pdCA9IHRydWU7CkBA
IC0xNTgsMzAgKzIwNSwyOSBAQCB2b2lkIE1vY2tBdWRpb1NoYXJlZFVuaXQ6OnN0YXJ0KCkKICAg
ICBtX2xhc3RSZW5kZXJUaW1lID0gTW9ub3RvbmljVGltZTo6bm93KCk7CiAgICAgbV9pc1Byb2R1
Y2luZ0RhdGEgPSB0cnVlOwogICAgIG1fd29ya1F1ZXVlLT5kaXNwYXRjaChbdGhpcywgcmVuZGVy
VGltZSA9IG1fbGFzdFJlbmRlclRpbWVdIHsKLSAgICAgICAgcmVuZGVyKHJlbmRlclRpbWUpOwor
ICAgICAgICBnZW5lcmF0ZVNhbXBsZUJ1ZmZlcnMocmVuZGVyVGltZSk7CiAgICAgfSk7CisgICAg
cmV0dXJuIDA7CiB9CiAKLXZvaWQgTW9ja0F1ZGlvU2hhcmVkVW5pdDo6c3RvcEludGVybmFsKCkK
K09TU3RhdHVzIE1vY2tBdWRpb1NoYXJlZEludGVybmFsVW5pdDo6c3RvcCgpCiB7CiAgICAgbV9p
c1Byb2R1Y2luZ0RhdGEgPSBmYWxzZTsKLSAgICBpZiAoIW1faGFzQXVkaW9Vbml0KQotICAgICAg
ICByZXR1cm47Ci0gICAgbV9sYXN0UmVuZGVyVGltZSA9IE1vbm90b25pY1RpbWU6Om5hbigpOwot
fQorICAgIGlmIChtX2hhc0F1ZGlvVW5pdCkKKyAgICAgICAgbV9sYXN0UmVuZGVyVGltZSA9IE1v
bm90b25pY1RpbWU6Om5hbigpOwogCi1ib29sIE1vY2tBdWRpb1NoYXJlZFVuaXQ6OmlzUHJvZHVj
aW5nRGF0YSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1faXNQcm9kdWNpbmdEYXRhOworICAgIG1f
d29ya1F1ZXVlLT5kaXNwYXRjaFN5bmMoW10geyB9KTsKKworICAgIHJldHVybiAwOwogfQogCi12
b2lkIE1vY2tBdWRpb1NoYXJlZFVuaXQ6OmRlbGF5U2FtcGxlcyhTZWNvbmRzIGRlbHRhKQordm9p
ZCBNb2NrQXVkaW9TaGFyZWRJbnRlcm5hbFVuaXQ6OmRlbGF5U2FtcGxlcyhTZWNvbmRzIGRlbHRh
KQogewotICAgIHN0b3BJbnRlcm5hbCgpOworICAgIHN0b3AoKTsKICAgICBtX3RpbWVyLnN0YXJ0
T25lU2hvdChkZWx0YSk7CiB9CiAKLXZvaWQgTW9ja0F1ZGlvU2hhcmVkVW5pdDo6cmVjb25maWd1
cmUoKQordm9pZCBNb2NrQXVkaW9TaGFyZWRJbnRlcm5hbFVuaXQ6OnJlY29uZmlndXJlKCkKIHsK
ICAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKIApAQCAtMTkxLDE0ICsyMzcsNiBAQCB2b2lk
IE1vY2tBdWRpb1NoYXJlZFVuaXQ6OnJlY29uZmlndXJlKCkKICAgICBtX21heGltaXVtRnJhbWVD
b3VudCA9IFdURjo6cm91bmRVcFRvUG93ZXJPZlR3byhyZW5kZXJJbnRlcnZhbCgpLnNlY29uZHMo
KSAqIHJhdGUgKiAyKTsKICAgICBBU1NFUlQobV9tYXhpbWl1bUZyYW1lQ291bnQpOwogCi0gICAg
Y29uc3QgaW50IGJ5dGVzUGVyRmxvYXQgPSBzaXplb2YoRmxvYXQzMik7Ci0gICAgY29uc3QgaW50
IGJpdHNQZXJCeXRlID0gODsKLSAgICBjb25zdCBpbnQgY2hhbm5lbENvdW50ID0gbV9jaGFubmVs
Q291bnQ7Ci0gICAgY29uc3QgYm9vbCBpc0Zsb2F0ID0gdHJ1ZTsKLSAgICBjb25zdCBib29sIGlz
QmlnRW5kaWFuID0gZmFsc2U7Ci0gICAgY29uc3QgYm9vbCBpc05vbkludGVybGVhdmVkID0gdHJ1
ZTsKLSAgICBGaWxsT3V0QVNCREZvckxQQ00obV9zdHJlYW1Gb3JtYXQsIHJhdGUsIGNoYW5uZWxD
b3VudCwgYml0c1BlckJ5dGUgKiBieXRlc1BlckZsb2F0LCBiaXRzUGVyQnl0ZSAqIGJ5dGVzUGVy
RmxvYXQsIGlzRmxvYXQsIGlzQmlnRW5kaWFuLCBpc05vbkludGVybGVhdmVkKTsKLQogICAgIG1f
YXVkaW9CdWZmZXJMaXN0ID0gbWFrZVVuaXF1ZTxXZWJBdWRpb0J1ZmZlckxpc3Q+KG1fc3RyZWFt
Rm9ybWF0LCBtX21heGltaXVtRnJhbWVDb3VudCk7CiAKICAgICBDTUZvcm1hdERlc2NyaXB0aW9u
UmVmIGZvcm1hdERlc2NyaXB0aW9uOwpAQCAtMjE1LDI1ICsyNTMsMzggQEAgdm9pZCBNb2NrQXVk
aW9TaGFyZWRVbml0OjpyZWNvbmZpZ3VyZSgpCiAKICAgICBhZGRIdW0oQmlwQm9wVm9sdW1lLCBC
aXBGcmVxdWVuY3ksIHJhdGUsIDAsIG1fYmlwQm9wQnVmZmVyLmRhdGEoKSArIGJpcFN0YXJ0LCBi
aXBCb3BTYW1wbGVDb3VudCk7CiAgICAgYWRkSHVtKEJpcEJvcFZvbHVtZSwgQm9wRnJlcXVlbmN5
LCByYXRlLCAwLCBtX2JpcEJvcEJ1ZmZlci5kYXRhKCkgKyBib3BTdGFydCwgYmlwQm9wU2FtcGxl
Q291bnQpOwotICAgIGlmICghZW5hYmxlRWNob0NhbmNlbGxhdGlvbigpKQorICAgIGlmICghbV9l
bmFibGVFY2hvQ2FuY2VsbGF0aW9uKQogICAgICAgICBhZGRIdW0oTm9pc2VWb2x1bWUsIE5vaXNl
RnJlcXVlbmN5LCByYXRlLCAwLCBtX2JpcEJvcEJ1ZmZlci5kYXRhKCksIHNhbXBsZUNvdW50KTsK
IH0KIAotdm9pZCBNb2NrQXVkaW9TaGFyZWRVbml0OjplbWl0U2FtcGxlQnVmZmVycyh1aW50MzJf
dCBmcmFtZUNvdW50KQordm9pZCBNb2NrQXVkaW9TaGFyZWRJbnRlcm5hbFVuaXQ6OmVtaXRTYW1w
bGVCdWZmZXJzKHVpbnQzMl90IGZyYW1lQ291bnQpCiB7CiAgICAgQVNTRVJUKCFpc01haW5UaHJl
YWQoKSk7CiAgICAgQVNTRVJUKG1fZm9ybWF0RGVzY3JpcHRpb24pOwogCiAgICAgQ01UaW1lIHN0
YXJ0VGltZSA9IFBBTDo6Q01UaW1lTWFrZShtX3NhbXBsZXNFbWl0dGVkLCBzYW1wbGVSYXRlKCkp
OworICAgIGF1dG8gc2FtcGxlVGltZSA9IFBBTDo6dG9NZWRpYVRpbWUoc3RhcnRUaW1lKS50b0Zs
b2F0KCk7CiAgICAgbV9zYW1wbGVzRW1pdHRlZCArPSBmcmFtZUNvdW50OwogCi0gICAgYXVkaW9T
YW1wbGVzQXZhaWxhYmxlKFBBTDo6dG9NZWRpYVRpbWUoc3RhcnRUaW1lKSwgKm1fYXVkaW9CdWZm
ZXJMaXN0LCBDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24obV9zdHJlYW1Gb3JtYXQpLCBmcmFtZUNv
dW50KTsKKyAgICBhdXRvKiBidWZmZXJMaXN0ID0gbV9hdWRpb0J1ZmZlckxpc3QtPmxpc3QoKTsK
KyAgICBBdWRpb1VuaXRSZW5kZXJBY3Rpb25GbGFncyBpb0FjdGlvbkZsYWdzID0gMDsKKyAgICAK
KyAgICBBdWRpb1RpbWVTdGFtcCB0aW1lU3RhbXA7CisgICAgbWVtc2V0KCZ0aW1lU3RhbXAsIDAs
IHNpemVvZihBdWRpb1RpbWVTdGFtcCkpOworICAgIHRpbWVTdGFtcC5tU2FtcGxlVGltZSA9IHNh
bXBsZVRpbWU7CisgICAgdGltZVN0YW1wLm1Ib3N0VGltZSA9IHN0YXRpY19jYXN0PFVJbnQ2ND4o
c2FtcGxlVGltZSk7CisgICAgaWYgKG1fbWljcm9waG9uZUNhbGxiYWNrLmlucHV0UHJvYykKKyAg
ICAgICAgbV9taWNyb3Bob25lQ2FsbGJhY2suaW5wdXRQcm9jKG1fbWljcm9waG9uZUNhbGxiYWNr
LmlucHV0UHJvY1JlZkNvbiwgJmlvQWN0aW9uRmxhZ3MsICZ0aW1lU3RhbXAsIDEsIGZyYW1lQ291
bnQsIGJ1ZmZlckxpc3QpOworCisgICAgaW9BY3Rpb25GbGFncyA9IDA7CisgICAgaWYgKG1fc3Bl
YWtlckNhbGxiYWNrLmlucHV0UHJvYykKKyAgICAgICAgbV9zcGVha2VyQ2FsbGJhY2suaW5wdXRQ
cm9jKG1fc3BlYWtlckNhbGxiYWNrLmlucHV0UHJvY1JlZkNvbiwgJmlvQWN0aW9uRmxhZ3MsICZ0
aW1lU3RhbXAsIDEsIGZyYW1lQ291bnQsIGJ1ZmZlckxpc3QpOwogfQogCi12b2lkIE1vY2tBdWRp
b1NoYXJlZFVuaXQ6OnJlbmRlcihNb25vdG9uaWNUaW1lIHJlbmRlclRpbWUpCit2b2lkIE1vY2tB
dWRpb1NoYXJlZEludGVybmFsVW5pdDo6Z2VuZXJhdGVTYW1wbGVCdWZmZXJzKE1vbm90b25pY1Rp
bWUgcmVuZGVyVGltZSkKIHsKICAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKLSAgICBpZiAo
IWlzUHJvZHVjaW5nRGF0YSgpKQorICAgIGlmICghbV9pc1Byb2R1Y2luZ0RhdGEpCiAgICAgICAg
IHJldHVybjsKIAogICAgIGF1dG8gZGVsdGEgPSByZW5kZXJJbnRlcnZhbCgpOwpAQCAtMjQ1LDcg
KzI5Niw3IEBAIHZvaWQgTW9ja0F1ZGlvU2hhcmVkVW5pdDo6cmVuZGVyKE1vbm90b25pY1RpbWUg
cmVuZGVyVGltZSkKICAgICAgICAgbmV4dFJlbmRlckRlbGF5ID0gMF9zOwogICAgIH0KICAgICBt
X3dvcmtRdWV1ZS0+ZGlzcGF0Y2hBZnRlcihuZXh0UmVuZGVyRGVsYXksIFt0aGlzLCBuZXh0UmVu
ZGVyVGltZV0gewotICAgICAgICByZW5kZXIobmV4dFJlbmRlclRpbWUpOworICAgICAgICBnZW5l
cmF0ZVNhbXBsZUJ1ZmZlcnMobmV4dFJlbmRlclRpbWUpOwogICAgIH0pOwogCiAgICAgaWYgKCFt
X2F1ZGlvQnVmZmVyTGlzdCB8fCAhbV9iaXBCb3BCdWZmZXIuc2l6ZSgpKQpAQCAtMjcwLDYgKzMy
MSw4MCBAQCB2b2lkIE1vY2tBdWRpb1NoYXJlZFVuaXQ6OnJlbmRlcihNb25vdG9uaWNUaW1lIHJl
bmRlclRpbWUpCiAgICAgfQogfQogCitPU1N0YXR1cyBNb2NrQXVkaW9TaGFyZWRJbnRlcm5hbFVu
aXQ6OnJlbmRlcihBdWRpb1VuaXRSZW5kZXJBY3Rpb25GbGFncyosIGNvbnN0IEF1ZGlvVGltZVN0
YW1wKiwgVUludDMyLCBVSW50MzIgZnJhbWVDb3VudCwgQXVkaW9CdWZmZXJMaXN0KiBidWZmZXIp
Cit7CisgICAgYXV0byogc291cmNlQnVmZmVyID0gbV9hdWRpb0J1ZmZlckxpc3QtPmxpc3QoKTsK
KyAgICBpZiAoYnVmZmVyLT5tTnVtYmVyQnVmZmVycyA+IHNvdXJjZUJ1ZmZlci0+bU51bWJlckJ1
ZmZlcnMpCisgICAgICAgIHJldHVybiBrQXVkaW9fUGFyYW1FcnJvcjsKKworICAgIGZvciAodWlu
dDMyX3QgaSA9IDA7IGkgPCBidWZmZXItPm1OdW1iZXJCdWZmZXJzOyBpKyspIHsKKyAgICAgICAg
YXV0byogc291cmNlID0gc3RhdGljX2Nhc3Q8dWludDhfdCo+KHNvdXJjZUJ1ZmZlci0+bUJ1ZmZl
cnNbaV0ubURhdGEpOworICAgICAgICBhdXRvKiBkZXN0aW5hdGlvbiA9IHN0YXRpY19jYXN0PHVp
bnQ4X3QqPihidWZmZXItPm1CdWZmZXJzW2ldLm1EYXRhKTsKKyAgICAgICAgbWVtY3B5KGRlc3Rp
bmF0aW9uLCBzb3VyY2UsIGZyYW1lQ291bnQgKiBtX3N0cmVhbUZvcm1hdC5tQnl0ZXNQZXJQYWNr
ZXQpOworICAgIH0KKworICAgIHJldHVybiAwOworfQorCitPU1N0YXR1cyBNb2NrQXVkaW9TaGFy
ZWRJbnRlcm5hbFVuaXQ6OnNldChBdWRpb1VuaXRQcm9wZXJ0eUlEIHByb3BlcnR5LCBBdWRpb1Vu
aXRTY29wZSBzY29wZSwgQXVkaW9Vbml0RWxlbWVudCwgY29uc3Qgdm9pZCogdmFsdWUsIFVJbnQz
MikKK3sKKyAgICBpZiAocHJvcGVydHkgPT0ga0F1ZGlvVW5pdFByb3BlcnR5X1N0cmVhbUZvcm1h
dCkgeworICAgICAgICBhdXRvJiB0eXBlZFZhbHVlID0gKnN0YXRpY19jYXN0PGNvbnN0IEF1ZGlv
U3RyZWFtQmFzaWNEZXNjcmlwdGlvbio+KHZhbHVlKTsKKyAgICAgICAgaWYgKHNjb3BlID09IGtB
dWRpb1VuaXRTY29wZV9JbnB1dCkKKyAgICAgICAgICAgIG1fc3RyZWFtRm9ybWF0ID0gdHlwZWRW
YWx1ZTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9vdXRwdXRTdHJlYW1Gb3JtYXQgPSB0
eXBlZFZhbHVlOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgaWYgKHByb3BlcnR5ID09
IGtBVVZvaWNlSU9Qcm9wZXJ0eV9Wb2ljZVByb2Nlc3NpbmdFbmFibGVBR0MpIHsKKyAgICAgICAg
bV9lbmFibGVFY2hvQ2FuY2VsbGF0aW9uID0gISEqc3RhdGljX2Nhc3Q8Y29uc3QgdWludDMyX3Qq
Pih2YWx1ZSk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBpZiAocHJvcGVydHkgPT0g
a0F1ZGlvT3V0cHV0VW5pdFByb3BlcnR5X1NldElucHV0Q2FsbGJhY2spIHsKKyAgICAgICAgbV9t
aWNyb3Bob25lQ2FsbGJhY2sgPSAqc3RhdGljX2Nhc3Q8Y29uc3QgQVVSZW5kZXJDYWxsYmFja1N0
cnVjdCo+KHZhbHVlKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIGlmIChwcm9wZXJ0
eSA9PSBrQXVkaW9Vbml0UHJvcGVydHlfU2V0UmVuZGVyQ2FsbGJhY2spIHsKKyAgICAgICAgbV9z
cGVha2VyQ2FsbGJhY2sgPSAqc3RhdGljX2Nhc3Q8Y29uc3QgQVVSZW5kZXJDYWxsYmFja1N0cnVj
dCo+KHZhbHVlKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIGlmIChwcm9wZXJ0eSA9
PSBrQXVkaW9PdXRwdXRVbml0UHJvcGVydHlfQ3VycmVudERldmljZSkgeworICAgICAgICBBU1NF
UlQoISpzdGF0aWNfY2FzdDxjb25zdCB1aW50MzJfdCo+KHZhbHVlKSk7CisgICAgICAgIGlmIChh
dXRvIGRldmljZSA9IE1vY2tSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyOjptb2NrRGV2aWNlV2l0
aFBlcnNpc3RlbnRJRChNb2NrQXVkaW9TaGFyZWRVbml0OjpzaW5nbGV0b24oKS5wZXJzaXN0ZW50
SURGb3JUZXN0aW5nKCkpKQorICAgICAgICAgICAgbV9zdHJlYW1Gb3JtYXQubVNhbXBsZVJhdGUg
PSBtX291dHB1dFN0cmVhbUZvcm1hdC5tU2FtcGxlUmF0ZSA9IHN0ZDo6Z2V0PE1vY2tNaWNyb3Bo
b25lUHJvcGVydGllcz4oZGV2aWNlLT5wcm9wZXJ0aWVzKS5kZWZhdWx0U2FtcGxlUmF0ZTsKKyAg
ICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIAorICAgIHJldHVybiAwOworfQorCitPU1N0YXR1
cyBNb2NrQXVkaW9TaGFyZWRJbnRlcm5hbFVuaXQ6OmdldChBdWRpb1VuaXRQcm9wZXJ0eUlEIHBy
b3BlcnR5LCBBdWRpb1VuaXRTY29wZSBzY29wZSwgQXVkaW9Vbml0RWxlbWVudCwgdm9pZCogdmFs
dWUsIFVJbnQzMiogdmFsdWVTaXplKQoreworICAgIGlmIChwcm9wZXJ0eSA9PSBrQXVkaW9Vbml0
UHJvcGVydHlfU3RyZWFtRm9ybWF0KSB7CisgICAgICAgIGF1dG8mIHR5cGVkVmFsdWUgPSAqc3Rh
dGljX2Nhc3Q8QXVkaW9TdHJlYW1CYXNpY0Rlc2NyaXB0aW9uKj4odmFsdWUpOworICAgICAgICBp
ZiAoc2NvcGUgPT0ga0F1ZGlvVW5pdFNjb3BlX0lucHV0KQorICAgICAgICAgICAgdHlwZWRWYWx1
ZSA9IG1fc3RyZWFtRm9ybWF0OworICAgICAgICBlbHNlCisgICAgICAgICAgICB0eXBlZFZhbHVl
ID0gbV9vdXRwdXRTdHJlYW1Gb3JtYXQ7CisgICAgICAgICp2YWx1ZVNpemUgPSBzaXplb2YoQXVk
aW9TdHJlYW1CYXNpY0Rlc2NyaXB0aW9uKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisg
ICAgcmV0dXJuIDA7Cit9CisKK09TU3RhdHVzIE1vY2tBdWRpb1NoYXJlZEludGVybmFsVW5pdDo6
ZGVmYXVsdElucHV0RGV2aWNlKHVpbnQzMl90KiBkZXZpY2UpCit7CisgICAgKmRldmljZSA9IDA7
CisgICAgcmV0dXJuIDA7Cit9CisKK09TU3RhdHVzIE1vY2tBdWRpb1NoYXJlZEludGVybmFsVW5p
dDo6ZGVmYXVsdE91dHB1dERldmljZSh1aW50MzJfdCogZGV2aWNlKQoreworICAgICpkZXZpY2Ug
PSAwOworICAgIHJldHVybiAwOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRp
ZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFNKQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IGFiYzgwZmMyMWI2Mzk4N2EwMDM1MGNm
MjAzZDA3NGVkZWMzNjAxOTguLjc1NDUxY2Q0ZjVhYjMwMWFkNjA4NTJlN2Y2ODgyOWUzMmE1ODY0
NWYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9D
aGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBAQAorMjAyMi0wNS0xMCAgWW91ZW5uIEZhYmxldCAgPHlv
dWVubkBhcHBsZS5jb20+CisKKyAgICAgICAgQWRkIGEgYmV0dGVyIG1vY2sgZm9yIGF1ZGlvIHVu
aXRzIHVzZWQgYnkgQ29yZUF1ZGlvU2hhcmVkVW5pdAorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjQwMjMxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiBmYXN0L21lZGlhc3RyZWFtL2F1ZGlvLXVuaXQtcmVj
b25maWd1cmUtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L21lZGlhc3RyZWFt
L2F1ZGlvLXVuaXQtcmVjb25maWd1cmUuaHRtbDogQWRkZWQuCisKIDIwMjItMDUtMDkgIE9yaW9s
IEJydWZhdSAgPG9icnVmYXVAaWdhbGlhLmNvbT4KIAogICAgICAgICBbY3Nzb21dIERvbid0IGlu
ZGV4IHBlcnNwZWN0aXZlL3RyYW5zZm9ybS1vcmlnaW4tKiBpbiBjb21wdXRlZCBzdHlsZXMKZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvbWVkaWFzdHJlYW0vYXVkaW8tdW5pdC1yZWNvbmZp
Z3VyZS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L21lZGlhc3RyZWFtL2F1ZGlvLXVu
aXQtcmVjb25maWd1cmUtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmFjOTYyMzgyYzdiNTdhYzRl
MWUzOGViZTc2ZmM4NGUwMDc2OGE3NzAKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9m
YXN0L21lZGlhc3RyZWFtL2F1ZGlvLXVuaXQtcmVjb25maWd1cmUtZXhwZWN0ZWQudHh0CkBAIC0w
LDAgKzEsNSBAQAorCisKK1BBU1MgUmVjb25maWd1cmUgYXVkaW8gc2FtcGxlIHJhdGUKK1BBU1Mg
UmVjb25maWd1cmUgYXVkaW8gdW5pdCB3aGVuIGJlaW5nIGluIHJlbmRlci1vbmx5IG1vZGUKKwpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9tZWRpYXN0cmVhbS9hdWRpby11bml0LXJlY29u
ZmlndXJlLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L21lZGlhc3RyZWFtL2F1ZGlvLXVuaXQtcmVj
b25maWd1cmUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mNjQzNTdiZjRkY2M2NjBkMmYyY2ZkZTEyOTIzMTMx
MDZkODRlNzlhCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9tZWRpYXN0cmVh
bS9hdWRpby11bml0LXJlY29uZmlndXJlLmh0bWwKQEAgLTAsMCArMSw3MCBAQAorPCFET0NUWVBF
IGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorICAgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KKyAgICA8
c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KKyAg
ICA8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3Nj
cmlwdD4KKyA8L2hlYWQ+Cis8Ym9keT4KKzx2aWRlbyBpZD0idmlkZW8xIiBhdXRvcGxheSBwbGF5
c0lubGluZSBjb250cm9scz48L3ZpZGVvPgorPHZpZGVvIGlkPSJ2aWRlbzIiIGF1dG9wbGF5IHBs
YXlzSW5saW5lIGNvbnRyb2xzPjwvdmlkZW8+Cis8c2NyaXB0PgorcHJvbWlzZV90ZXN0KGFzeW5j
ICh0ZXN0KSA9PiB7CisgICAgY29uc3QgY29udGV4dCA9IG5ldyBBdWRpb0NvbnRleHQoKTsKKyAg
ICBjb25zdCBvc2NpbGxhdG9yID0gY29udGV4dC5jcmVhdGVPc2NpbGxhdG9yKCk7CisgICAgY29u
c3Qgc3RyZWFtRGVzdGluYXRpb24gPSBjb250ZXh0LmNyZWF0ZU1lZGlhU3RyZWFtRGVzdGluYXRp
b24oKTsKKyAgICBvc2NpbGxhdG9yLmNvbm5lY3Qoc3RyZWFtRGVzdGluYXRpb24pOworICAgIHZp
ZGVvMS5zcmNPYmplY3QgPSBzdHJlYW1EZXN0aW5hdGlvbi5zdHJlYW07CisgICAgLy8gdmlkZW8x
IHdpbGwgYmUgcGxheWVkIHRocm91Z2ggVlBJTyB3aWxsIGZpeCB0aGUgcmF0ZSB0byBhIHNpbmds
ZSB2YWx1ZS4KKyAgICBhd2FpdCB2aWRlbzEucGxheSgpOworICAgIG9zY2lsbGF0b3Iuc3RhcnQo
KTsKKworICAgIGNvbnN0IHN0cmVhbSA9IGF3YWl0IG5hdmlnYXRvci5tZWRpYURldmljZXMuZ2V0
VXNlck1lZGlhKHsgYXVkaW86IHsgc2FtcGxlUmF0ZTogNDgwMDAgfX0pOworICAgIHN0cmVhbS5n
ZXRBdWRpb1RyYWNrcygpWzBdLm9uZW5kZWQgPSAoKSA9PiBhc3NlcnRfbm90X3JlYWNoZWQoInNo
b3VsZCBub3QgZW5kIik7CisgICAgYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiBzZXRUaW1l
b3V0KHJlc29sdmUsIDEwMCkpOworICAgIHN0cmVhbS5nZXRBdWRpb1RyYWNrcygpWzBdLnN0b3Ao
KTsKKworICAgIGNvbnN0IHN0cmVhbTIgPSBhd2FpdCBuYXZpZ2F0b3IubWVkaWFEZXZpY2VzLmdl
dFVzZXJNZWRpYSh7IGF1ZGlvOiB7IHNhbXBsZVJhdGU6IDQ0MTAwIH19KTsKKyAgICBzdHJlYW0y
LmdldEF1ZGlvVHJhY2tzKClbMF0ub25lbmRlZCA9ICgpID0+IGFzc2VydF9ub3RfcmVhY2hlZCgi
c2hvdWxkIG5vdCBlbmQiKTsKKyAgICBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHNldFRp
bWVvdXQocmVzb2x2ZSwgMTAwKSk7Cit9LCAiUmVjb25maWd1cmUgYXVkaW8gc2FtcGxlIHJhdGUi
KTsKKworcHJvbWlzZV90ZXN0KGFzeW5jICh0ZXN0KSA9PiB7CisgICAgY29uc3QgY29udGV4dCA9
IG5ldyBBdWRpb0NvbnRleHQoKTsKKyAgICBjb25zdCBvc2NpbGxhdG9yID0gY29udGV4dC5jcmVh
dGVPc2NpbGxhdG9yKCk7CisgICAgY29uc3Qgc3RyZWFtRGVzdGluYXRpb24gPSBjb250ZXh0LmNy
ZWF0ZU1lZGlhU3RyZWFtRGVzdGluYXRpb24oKTsKKyAgICBvc2NpbGxhdG9yLmNvbm5lY3Qoc3Ry
ZWFtRGVzdGluYXRpb24pOworICAgIHZpZGVvMS5zcmNPYmplY3QgPSBzdHJlYW1EZXN0aW5hdGlv
bi5zdHJlYW07CisgICAgYXdhaXQgdmlkZW8xLnBsYXkoKTsKKyAgICBvc2NpbGxhdG9yLnN0YXJ0
KCk7CisKKyAgICBjb25zdCBkZWZhdWx0QXVkaW9Db25zdHJhaW50cyA9IHsKKyAgICAgICAgc2Ft
cGxlUmF0ZTogNDgwMDAsCisgICAgICAgIHNhbXBsZVNpemU6IDE2LAorICAgICAgICBjaGFubmVs
Q291bnQ6IDEsCisgICAgICAgIGVjaG9DYW5jZWxsYXRpb246IHRydWUsCisgICAgICAgIG5vaXNl
U3VwcHJlc3Npb246IHRydWUKKyAgICB9OworICAgIGNvbnN0IG11c2ljTW9kZUF1ZGlvQ29uc3Ry
YWludHMgPSB7CisgICAgICAgIHNhbXBsZVJhdGU6IDQ4MDAwLAorICAgICAgICBzYW1wbGVTaXpl
OiAxNiwKKyAgICAgICAgY2hhbm5lbENvdW50OiAyLAorICAgICAgICBlY2hvQ2FuY2VsbGF0aW9u
OiBmYWxzZSwKKyAgICAgICAgbm9pc2VTdXBwcmVzc2lvbjogZmFsc2UKKyAgICB9OworCisgICAg
Y29uc3Qgc3RyZWFtMSA9IGF3YWl0IG5hdmlnYXRvci5tZWRpYURldmljZXMuZ2V0VXNlck1lZGlh
KHsgYXVkaW86IGRlZmF1bHRBdWRpb0NvbnN0cmFpbnRzIH0pOworICAgIHZpZGVvMi5zcmNPYmpl
Y3QgPSBzdHJlYW0xOworICAgIGF3YWl0IHZpZGVvMi5wbGF5KCk7CisgICAgYXdhaXQgbmV3IFBy
b21pc2UocmVzb2x2ZSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIDEwMDApKTsKKworICAgIC8vIEJ5
IHN0b3BwaW5nIHRoZSBjYXB0dXJlIGF1ZGlvIHRyYWNrLCB0aGUgVlBJTyB1bml0IHdpbGwgZ28g
aW4gcmVuZGVyIG9ubHkgbW9kZSBhcyBpdCBuZWVkcyB0byBwbGF5IHZpZGVvIDEuCisgICAgc3Ry
ZWFtMS5nZXRBdWRpb1RyYWNrcygpWzBdLnN0b3AoKTsKKworICAgIGNvbnN0IHN0cmVhbTIgPSBh
d2FpdCBuYXZpZ2F0b3IubWVkaWFEZXZpY2VzLmdldFVzZXJNZWRpYSh7IGF1ZGlvOiBtdXNpY01v
ZGVBdWRpb0NvbnN0cmFpbnRzIH0pOworICAgIHN0cmVhbTIuZ2V0QXVkaW9UcmFja3MoKVswXS5v
bmVuZGVkID0gKCkgPT4gbG9nLmlubmVySFRNTCArPSAndHJhY2sgZW5kZWQnOworICAgIGF3YWl0
IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gc2V0VGltZW91dChyZXNvbHZlLCAxMDAwKSk7Cit9LCAi
UmVjb25maWd1cmUgYXVkaW8gdW5pdCB3aGVuIGJlaW5nIGluIHJlbmRlci1vbmx5IG1vZGUiKTsK
Kzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgo=
</data>
<flag name="commit-queue"
          id="488125"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>459112</attachid>
            <date>2022-05-10 05:48:14 -0700</date>
            <delta_ts>2022-05-10 06:20:25 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-240231-20220510144812.patch</filename>
            <type>text/plain</type>
            <size>83899</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjk0MDA1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTJiMTVhNmYwZGU5YTVk
ZTdlMWUxODM3Mzg4OTZmMDQ4YmIzMmZhNy4uYmYwZGE0YTNjYmFhODExMDBmOWE2ZGM4NzBmNmEz
NzNiZTBlMmMxNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI5IEBACisyMDIyLTA1LTEwICBZb3Vl
bm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgYSBiZXR0ZXIgbW9j
ayBmb3IgYXVkaW8gdW5pdHMgdXNlZCBieSBDb3JlQXVkaW9TaGFyZWRVbml0CisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNDAyMzEKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNb3ZlIENvcmVBdWRpb1NoYXJl
ZFVuaXQgdG8gaXRzIG93biBmaWxlLCBDb3JlQXVkaW9TaGFyZWRVbml0LmgvQ29yZUF1ZGlvU2hh
cmVkVW5pdC5jcHAuCisgICAgICAgIEludHJvZHVjZSBhbiBpbnRlcm5hbCB1bml0IHRvIGFic3Ry
YWN0IG91dCBDb3JlQXVkaW9TaGFyZWRVbml0IGZyb20gYWN0dWFsIENvcmVBdWRpbyB1bml0cy4K
KyAgICAgICAgSW1wbGVtZW50IGEgQ29yZUF1ZGlvIGJhc2VkIGludGVybmFsIHVuaXQgaW4gQ29y
ZUF1ZGlvU2hhcmVkVW5pdC5jcHAuCisgICAgICAgIEltcGxlbWVudCBhIE1vY2sgYmFzZWQgaW50
ZXJuYWwgdW5pdCBpbiBNb2NrQXVkaW9TaGFyZWRVbml0LmgvTW9ja0F1ZGlvU2hhcmVkVW5pdC5t
bS4KKyAgICAgICAgQWRkIGlucHV0cHV0L291cHV0IHNhbXBsZSByYXRlIHZhbGlkYXRpb24gKGRl
YnVnIGFzc2VydCBhbmQgcmVsZWFzZSBlcnJvciByZXR1cm5lZCkuCisgICAgICAgIEFkZCBhIHRl
c3QgdGhhdCB1c2VzIHRoaXMgdmFsaWRhdGlvbi4KKworICAgICAgICBUZXN0OiBmYXN0L21lZGlh
c3RyZWFtL2F1ZGlvLXVuaXQtcmVjb25maWd1cmUuaHRtbAorCisgICAgICAgICogU291cmNlc0Nv
Y29hLnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6Cisg
ICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0Jhc2VBdWRpb1NoYXJlZFVuaXQuY3Bw
OgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9CYXNlQXVkaW9TaGFyZWRVbml0
Lmg6CisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0NvcmVBdWRpb0NhcHR1cmVT
b3VyY2UuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9Db3JlQXVkaW9T
aGFyZWRVbml0LmNwcDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFj
L0NvcmVBdWRpb1NoYXJlZFVuaXQuaDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vbWVkaWFz
dHJlYW0vbWFjL01vY2tBdWRpb1NoYXJlZFVuaXQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRp
YXN0cmVhbS9tYWMvTW9ja0F1ZGlvU2hhcmVkVW5pdC5tbToKKwogMjAyMi0wNS0xMCAgWW91ZW5u
IEZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+CiAKICAgICAgICAgSW50cm9kdWNlIGEgY2FudmFz
LWRyYXdJbWFnZSBzcGVjaWZpYyBtZXRob2QgdG8gZ2V0IGEgTmF0aXZlSW1hZ2UgZnJvbSBhIHZp
ZGVvIGVsZW1lbnQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQg
Yi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0CmluZGV4IGM5OTNjMDZjZDAwOTFlNDMw
MTE5YjhkZjQ4NGMzZWZkNjUzZTZkNmYuLmRhZWExMGI2MWQxNTg1ZDg1NTNlZGRkMjYwMTRiOWU1
ZDFjYzEyNTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQKKysr
IGIvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4dApAQCAtNTY1LDYgKzU2NSw3IEBAIHBs
YXRmb3JtL21lZGlhc3RyZWFtL21hYy9DR0Rpc3BsYXlTdHJlYW1TY3JlZW5DYXB0dXJlU291cmNl
Lm1tCiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQ29yZUF1ZGlvQ2FwdHVyZURldmljZS5jcHAK
IHBsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9Db3JlQXVkaW9DYXB0dXJlRGV2aWNlTWFuYWdlci5j
cHAKIHBsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9Db3JlQXVkaW9DYXB0dXJlU291cmNlLmNwcAor
cGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0NvcmVBdWRpb1NoYXJlZFVuaXQuY3BwCiBwbGF0Zm9y
bS9tZWRpYXN0cmVhbS9tYWMvRGlzcGxheUNhcHR1cmVNYW5hZ2VyQ29jb2EuY3BwCiBwbGF0Zm9y
bS9tZWRpYXN0cmVhbS9tYWMvTWVkaWFTdHJlYW1UcmFja0F1ZGlvU291cmNlUHJvdmlkZXJDb2Nv
YS5jcHAKIHBsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9Nb2NrQXVkaW9TaGFyZWRVbml0Lm1tCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5k
ZXggMTNjZDFhYzNmN2JjYWRhOTRlNDM3MmJhN2U1ZGU0ZWM2ZTk1ZmQzOC4uNzY3MzMxODY1NWQ1
OWJjOGVkNzllYWU3YTM4YTVhNjM4NTZmZDk3NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtODU2Niw2ICs4NTY2LDggQEAKIAkJ
NDEwQThFRjcyNEY4RjNGNjAwNEY5MDcwIC8qIFRleHRFbmNvZGVyU3RyZWFtRW5jb2Rlci5pZGwg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBw
YXRoID0gVGV4dEVuY29kZXJTdHJlYW1FbmNvZGVyLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNDEwQThFRjgyNEY4RjQ3QTAwNEY5MDcwIC8qIFRleHRFbmNvZGVyU3RyZWFtRW5j
b2Rlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUZXh0RW5jb2RlclN0cmVhbUVuY29kZXIuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MTBBOEVGOTI0RjhGNDdCMDA0RjkwNzAg
LyogVGV4dEVuY29kZXJTdHJlYW1FbmNvZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRleHRFbmNvZGVy
U3RyZWFtRW5jb2Rlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0MTBBRDJERTI4
MjJCQkY2MDA5QzkzQzggLyogQ29yZUF1ZGlvU2hhcmVkVW5pdC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBDb3JlQXVkaW9TaGFyZWRVbml0Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTQxMEFEMkRGMjgyMkJCRjYwMDlDOTNDOCAvKiBDb3JlQXVkaW9TaGFyZWRV
bml0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvcmVBdWRpb1No
YXJlZFVuaXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MTBCN0U3MTEwNDVG
QUIwMDBEODIyNEYgLyogSlNNZXNzYWdlRXZlbnRDdXN0b20uY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gSlNNZXNzYWdlRXZlbnRDdXN0b20uY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk0MTBCQTEzMTI1NzBGRTU3MDAyRTJGOEEgLyogTGliV2ViUlRD
UnRwVHJhbnNmb3JtYWJsZUZyYW1lLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
bmFtZSA9IExpYldlYlJUQ1J0cFRyYW5zZm9ybWFibGVGcmFtZS5jcHA7IHBhdGggPSBsaWJ3ZWJy
dGMvTGliV2ViUlRDUnRwVHJhbnNmb3JtYWJsZUZyYW1lLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNDEwQkNGNTMyNkYwQ0Q4QjAwNDBCMTI0IC8qIFJUQ0xvY2FsU2Vzc2lvbkRl
c2NyaXB0aW9uSW5pdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSVENMb2Nh
bFNlc3Npb25EZXNjcmlwdGlvbkluaXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTE4ODE1LDYgKzE4ODE3LDggQEAKIAkJCQkzRjgwMjAzNDFFOUUzODFEMDBERUM2MUQgLyogQ29y
ZUF1ZGlvQ2FwdHVyZURldmljZU1hbmFnZXIuaCAqLywKIAkJCQkzRjNCQjU4MjFFNzA5RUU0MDBD
NzAxRjIgLyogQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZS5jcHAgKi8sCiAJCQkJM0YzQkI1ODMxRTcw
OUVFNDAwQzcwMUYyIC8qIENvcmVBdWRpb0NhcHR1cmVTb3VyY2UuaCAqLywKKwkJCQk0MTBBRDJE
RjI4MjJCQkY2MDA5QzkzQzggLyogQ29yZUF1ZGlvU2hhcmVkVW5pdC5jcHAgKi8sCisJCQkJNDEw
QUQyREUyODIyQkJGNjAwOUM5M0M4IC8qIENvcmVBdWRpb1NoYXJlZFVuaXQuaCAqLywKIAkJCQkw
N0E2RDg0ODFGRUI3MDBCMDA2NDQxREUgLyogRGlzcGxheUNhcHR1cmVNYW5hZ2VyQ29jb2EuY3Bw
ICovLAogCQkJCTA3QTZEODQ5MUZFQjcwMEMwMDY0NDFERSAvKiBEaXNwbGF5Q2FwdHVyZU1hbmFn
ZXJDb2NvYS5oICovLAogCQkJCTQxNzRFOTIwMjUzNURDREQwMEZFNDIwMiAvKiBNZWRpYVN0cmVh
bVRyYWNrQXVkaW9Tb3VyY2VQcm92aWRlckNvY29hLmNwcCAqLywKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9CYXNlQXVkaW9TaGFyZWRVbml0LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9CYXNlQXVkaW9TaGFy
ZWRVbml0LmNwcAppbmRleCA0MTcwZmY2NTYzY2ZhN2JiOTNkNzFkY2YzMmRiOGEzNmJiNzBiNzM2
Li5iOGU1YjFkZTc0YWJlODQ3YTA3MDM2NGY1NGE1MmU0MzA5OTk5MWZlIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQmFzZUF1ZGlvU2hhcmVkVW5p
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0Jhc2VB
dWRpb1NoYXJlZFVuaXQuY3BwCkBAIC0xMTMsMTEgKzExMyw2IEBAIE9TU3RhdHVzIEJhc2VBdWRp
b1NoYXJlZFVuaXQ6OnN0YXJ0VW5pdCgpCiAgICAgcmV0dXJuIDA7CiB9CiAKLXZvaWQgQmFzZUF1
ZGlvU2hhcmVkVW5pdDo6cmVzZXRTYW1wbGVSYXRlKCkKLXsKLSAgICBtX3NhbXBsZVJhdGUgPSBB
dWRpb1Nlc3Npb246OnNoYXJlZFNlc3Npb24oKS5zYW1wbGVSYXRlKCk7Ci19Ci0KIHZvaWQgQmFz
ZUF1ZGlvU2hhcmVkVW5pdDo6cHJlcGFyZUZvck5ld0NhcHR1cmUoKQogewogICAgIG1fdm9sdW1l
ID0gMTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21h
Yy9CYXNlQXVkaW9TaGFyZWRVbml0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0
cmVhbS9tYWMvQmFzZUF1ZGlvU2hhcmVkVW5pdC5oCmluZGV4IGY2MTZjMDM4ZmJkYWZjYTY1YTY5
M2I2MmRjYTBlOGFmZjU3MTZlZDMuLjY2YjMzYTRlMzk4OTIzNWM0NjVkMTQ4NDVlMjQ4NmJlZThk
NmE2MzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21h
Yy9CYXNlQXVkaW9TaGFyZWRVbml0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVk
aWFzdHJlYW0vbWFjL0Jhc2VBdWRpb1NoYXJlZFVuaXQuaApAQCAtODMsNiArODMsOCBAQCBwdWJs
aWM6CiAgICAgdm9pZCB3aGVuQXVkaW9DYXB0dXJlVW5pdElzTm90UnVubmluZyhGdW5jdGlvbjx2
b2lkKCk+JiYpOwogICAgIGJvb2wgaXNSZW5kZXJpbmdBdWRpbygpIGNvbnN0IHsgcmV0dXJuIG1f
aXNSZW5kZXJpbmdBdWRpbzsgfQogCisgICAgY29uc3QgU3RyaW5nJiBwZXJzaXN0ZW50SURGb3JU
ZXN0aW5nKCkgY29uc3QgeyByZXR1cm4gbV9jYXB0dXJpbmdEZXZpY2UgPyBtX2NhcHR1cmluZ0Rl
dmljZS0+Zmlyc3QgOiBlbXB0eVN0cmluZygpOyB9CisKIHByb3RlY3RlZDoKICAgICB2b2lkIGZv
ckVhY2hDbGllbnQoY29uc3QgRnVuY3Rpb248dm9pZChDb3JlQXVkaW9DYXB0dXJlU291cmNlJik+
JikgY29uc3Q7CiAgICAgYm9vbCBoYXNDbGllbnRzKCkgY29uc3QgeyByZXR1cm4gIW1fY2xpZW50
cy5pc0VtcHR5KCk7IH0KQEAgLTkyLDcgKzk0LDcgQEAgcHJvdGVjdGVkOgogICAgIHZpcnR1YWwg
T1NTdGF0dXMgc3RhcnRJbnRlcm5hbCgpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgc3RvcEludGVy
bmFsKCkgPSAwOwogICAgIHZpcnR1YWwgT1NTdGF0dXMgcmVjb25maWd1cmVBdWRpb1VuaXQoKSA9
IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlc2V0U2FtcGxlUmF0ZSgpOworICAgIHZpcnR1YWwgdm9p
ZCByZXNldFNhbXBsZVJhdGUoKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGNhcHR1cmVEZXZpY2VD
aGFuZ2VkKCkgPSAwOwogCiAgICAgdm9pZCBzZXRTdXNwZW5kZWQoYm9vbCB2YWx1ZSkgeyBtX3N1
c3BlbmRlZCA9IHZhbHVlOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
ZWRpYXN0cmVhbS9tYWMvQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZS5jcHAKaW5k
ZXggYjY4N2IyOGRkZDE2MjgyNzRjZTI0MzdmOGY3ZWQzOGJjNDQwZmRkZi4uMzg4NzRiODJkZmUw
MjY4YzMxNGM2Y2ZlNTgwYzAyNzRiYzUyNjJjNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0NvcmVBdWRpb0NhcHR1cmVTb3VyY2UuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9Db3JlQXVkaW9DYXB0dXJl
U291cmNlLmNwcApAQCAtMzEsOSArMzEsOSBAQAogI2luY2x1ZGUgIkF1ZGlvU2FtcGxlQnVmZmVy
TGlzdC5oIgogI2luY2x1ZGUgIkF1ZGlvU2FtcGxlRGF0YVNvdXJjZS5oIgogI2luY2x1ZGUgIkF1
ZGlvU2Vzc2lvbi5oIgotI2luY2x1ZGUgIkJhc2VBdWRpb1NoYXJlZFVuaXQuaCIKICNpbmNsdWRl
ICJDb3JlQXVkaW9DYXB0dXJlRGV2aWNlLmgiCiAjaW5jbHVkZSAiQ29yZUF1ZGlvQ2FwdHVyZURl
dmljZU1hbmFnZXIuaCIKKyNpbmNsdWRlICJDb3JlQXVkaW9TaGFyZWRVbml0LmgiCiAjaW5jbHVk
ZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIlBsYXRmb3JtTWVkaWFTZXNzaW9uTWFuYWdlci5oIgog
I2luY2x1ZGUgIlRpbWVyLmgiCkBAIC01MSwxNSArNTEsMTUgQEAKICNpbmNsdWRlIDx3dGYvTmV2
ZXJEZXN0cm95ZWQuaD4KICNpbmNsdWRlIDx3dGYvU2NvcGUuaD4KIAotI2luY2x1ZGUgPHBhbC9j
Zi9BdWRpb1Rvb2xib3hTb2Z0TGluay5oPgotI2luY2x1ZGUgPHBhbC9jZi9Db3JlTWVkaWFTb2Z0
TGluay5oPgotCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICNpbmNsdWRlICJBVkF1ZGlvU2Vz
c2lvbkNhcHR1cmVEZXZpY2UuaCIKICNpbmNsdWRlICJBVkF1ZGlvU2Vzc2lvbkNhcHR1cmVEZXZp
Y2VNYW5hZ2VyLmgiCiAjaW5jbHVkZSAiQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZUlPUy5oIgogI2Vu
ZGlmCiAKKyNpbmNsdWRlIDxwYWwvY2YvQXVkaW9Ub29sYm94U29mdExpbmsuaD4KKyNpbmNsdWRl
IDxwYWwvY2YvQ29yZU1lZGlhU29mdExpbmsuaD4KKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiAj
aWYgUExBVEZPUk0oTUFDKQpAQCAtNzAsNjE0ICs3MCw2IEBAIENvcmVBdWRpb0NhcHR1cmVTb3Vy
Y2VGYWN0b3J5JiBDb3JlQXVkaW9DYXB0dXJlU291cmNlRmFjdG9yeTo6c2luZ2xldG9uKCkKIH0K
ICNlbmRpZgogCi1jb25zdCBVSW50MzIgb3V0cHV0QnVzID0gMDsKLWNvbnN0IFVJbnQzMiBpbnB1
dEJ1cyA9IDE7Ci0KLWNsYXNzIENvcmVBdWRpb1NoYXJlZFVuaXQgZmluYWwgOiBwdWJsaWMgQmFz
ZUF1ZGlvU2hhcmVkVW5pdCB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIENvcmVBdWRpb1NoYXJlZFVu
aXQmIHVuaXQoKTsKLSAgICBzdGF0aWMgQmFzZUF1ZGlvU2hhcmVkVW5pdCYgc2luZ2xldG9uKCkg
IHsgcmV0dXJuIHVuaXQoKTsgfQotICAgIENvcmVBdWRpb1NoYXJlZFVuaXQoKTsKLQotICAgIHZv
aWQgcmVnaXN0ZXJTcGVha2VyU2FtcGxlc1Byb2R1Y2VyKENvcmVBdWRpb1NwZWFrZXJTYW1wbGVz
UHJvZHVjZXImKTsKLSAgICB2b2lkIHVucmVnaXN0ZXJTcGVha2VyU2FtcGxlc1Byb2R1Y2VyKENv
cmVBdWRpb1NwZWFrZXJTYW1wbGVzUHJvZHVjZXImKTsKLSAgICBib29sIGlzUnVubmluZygpIGNv
bnN0IHsgcmV0dXJuIG1faW9Vbml0U3RhcnRlZDsgfQotCi1wcml2YXRlOgotICAgIHN0YXRpYyBz
aXplX3QgcHJlZmVycmVkSU9CdWZmZXJTaXplKCk7Ci0KLSAgICBDYXBhYmlsaXR5VmFsdWVPclJh
bmdlIHNhbXBsZVJhdGVDYXBhY2l0aWVzKCkgY29uc3QgZmluYWwgeyByZXR1cm4gQ2FwYWJpbGl0
eVZhbHVlT3JSYW5nZSg4MDAwLCA5NjAwMCk7IH0KLSAgICBjb25zdCBDQUF1ZGlvU3RyZWFtRGVz
Y3JpcHRpb24mIG1pY3JvcGhvbmVGb3JtYXQoKSBjb25zdCB7IHJldHVybiBtX21pY3JvcGhvbmVQ
cm9jRm9ybWF0OyB9Ci0KLSAgICBib29sIGhhc0F1ZGlvVW5pdCgpIGNvbnN0IGZpbmFsIHsgcmV0
dXJuIG1faW9Vbml0OyB9Ci0gICAgdm9pZCBjYXB0dXJlRGV2aWNlQ2hhbmdlZCgpIGZpbmFsOwot
ICAgIE9TU3RhdHVzIHJlY29uZmlndXJlQXVkaW9Vbml0KCkgZmluYWw7Ci0KLSAgICBPU1N0YXR1
cyBzZXR1cEF1ZGlvVW5pdCgpOwotICAgIHZvaWQgY2xlYW51cEF1ZGlvVW5pdCgpIGZpbmFsOwot
Ci0gICAgT1NTdGF0dXMgc3RhcnRJbnRlcm5hbCgpIGZpbmFsOwotICAgIHZvaWQgc3RvcEludGVy
bmFsKCkgZmluYWw7Ci0gICAgYm9vbCBpc1Byb2R1Y2luZ0RhdGEoKSBjb25zdCBmaW5hbCB7IHJl
dHVybiBtX2lvVW5pdFN0YXJ0ZWQ7IH0KLSAgICB2b2lkIGlzUHJvZHVjaW5nTWljcm9waG9uZVNh
bXBsZXNDaGFuZ2VkKCkgZmluYWw7Ci0gICAgdm9pZCB2YWxpZGF0ZU91dHB1dERldmljZSh1aW50
MzJfdCBkZXZpY2VJRCkgZmluYWw7Ci0gICAgaW50IGFjdHVhbFNhbXBsZVJhdGUoKSBjb25zdCBm
aW5hbDsKLQotICAgIE9TU3RhdHVzIGNvbmZpZ3VyZVNwZWFrZXJQcm9jKGludCBzYW1wbGVSYXRl
KTsKLSAgICBPU1N0YXR1cyBjb25maWd1cmVNaWNyb3Bob25lUHJvYyhpbnQgc2FtcGxlUmF0ZSk7
Ci0gICAgT1NTdGF0dXMgZGVmYXVsdE91dHB1dERldmljZSh1aW50MzJfdCopOwotICAgIE9TU3Rh
dHVzIGRlZmF1bHRJbnB1dERldmljZSh1aW50MzJfdCopOwotCi0gICAgc3RhdGljIE9TU3RhdHVz
IG1pY3JvcGhvbmVDYWxsYmFjayh2b2lkKiwgQXVkaW9Vbml0UmVuZGVyQWN0aW9uRmxhZ3MqLCBj
b25zdCBBdWRpb1RpbWVTdGFtcCosIFVJbnQzMiwgVUludDMyLCBBdWRpb0J1ZmZlckxpc3QqKTsK
LSAgICBPU1N0YXR1cyBwcm9jZXNzTWljcm9waG9uZVNhbXBsZXMoQXVkaW9Vbml0UmVuZGVyQWN0
aW9uRmxhZ3MmLCBjb25zdCBBdWRpb1RpbWVTdGFtcCYsIFVJbnQzMiwgVUludDMyLCBBdWRpb0J1
ZmZlckxpc3QqKTsKLQotICAgIHN0YXRpYyBPU1N0YXR1cyBzcGVha2VyQ2FsbGJhY2sodm9pZCos
IEF1ZGlvVW5pdFJlbmRlckFjdGlvbkZsYWdzKiwgY29uc3QgQXVkaW9UaW1lU3RhbXAqLCBVSW50
MzIsIFVJbnQzMiwgQXVkaW9CdWZmZXJMaXN0Kik7Ci0gICAgT1NTdGF0dXMgcHJvdmlkZVNwZWFr
ZXJEYXRhKEF1ZGlvVW5pdFJlbmRlckFjdGlvbkZsYWdzJiwgY29uc3QgQXVkaW9UaW1lU3RhbXAm
LCBVSW50MzIsIFVJbnQzMiwgQXVkaW9CdWZmZXJMaXN0Jik7Ci0KLSAgICB2b2lkIHVuZHVjaygp
OwotCi0gICAgdm9pZCB2ZXJpZnlJc0NhcHR1cmluZygpOwotCi0gICAgU2Vjb25kcyB2ZXJpZnlD
YXB0dXJlSW50ZXJ2YWwoKSB7IHJldHVybiBpc1Byb2R1Y2luZ01pY3JvcGhvbmVTYW1wbGVzKCkg
PyAxMF9zIDogMl9zOyB9Ci0KLSAgICBBdWRpb1VuaXQgbV9pb1VuaXQgeyBudWxscHRyIH07Ci0K
LSAgICAvLyBPbmx5IHJlYWQvbW9kaWZpZWQgZnJvbSB0aGUgSU8gdGhyZWFkLgotICAgIFZlY3Rv
cjxSZWY8QXVkaW9TYW1wbGVEYXRhU291cmNlPj4gbV9hY3RpdmVTb3VyY2VzOwotCi0gICAgQ0FB
dWRpb1N0cmVhbURlc2NyaXB0aW9uIG1fbWljcm9waG9uZVByb2NGb3JtYXQ7Ci0gICAgUmVmUHRy
PEF1ZGlvU2FtcGxlQnVmZmVyTGlzdD4gbV9taWNyb3Bob25lU2FtcGxlQnVmZmVyOwotICAgIHVp
bnQ2NF90IG1fbGF0ZXN0TWljVGltZVN0YW1wIHsgMCB9OwotCi0gICAgQ0FBdWRpb1N0cmVhbURl
c2NyaXB0aW9uIG1fc3BlYWtlclByb2NGb3JtYXQ7Ci0KLSAgICBkb3VibGUgbV9EVFNDb252ZXJz
aW9uUmF0aW8geyAwIH07Ci0KLSAgICBib29sIG1faW9Vbml0SW5pdGlhbGl6ZWQgeyBmYWxzZSB9
OwotICAgIGJvb2wgbV9pb1VuaXRTdGFydGVkIHsgZmFsc2UgfTsKLQotICAgIG11dGFibGUgc3Rk
Ojp1bmlxdWVfcHRyPFJlYWx0aW1lTWVkaWFTb3VyY2VDYXBhYmlsaXRpZXM+IG1fY2FwYWJpbGl0
aWVzOwotICAgIG11dGFibGUgc3RkOjpvcHRpb25hbDxSZWFsdGltZU1lZGlhU291cmNlU2V0dGlu
Z3M+IG1fY3VycmVudFNldHRpbmdzOwotCi0jaWYgIUxPR19ESVNBQkxFRAotICAgIHZvaWQgY2hl
Y2tUaW1lc3RhbXBzKGNvbnN0IEF1ZGlvVGltZVN0YW1wJiwgdWludDY0X3QsIGRvdWJsZSk7Ci0K
LSAgICBTdHJpbmcgbV9pb1VuaXROYW1lOwotI2VuZGlmCi0KLSAgICB1aW50NjRfdCBtX21pY3Jv
cGhvbmVQcm9jc0NhbGxlZCB7IDAgfTsKLSAgICB1aW50NjRfdCBtX21pY3JvcGhvbmVQcm9jc0Nh
bGxlZExhc3RUaW1lIHsgMCB9OwotICAgIFRpbWVyIG1fdmVyaWZ5Q2FwdHVyaW5nVGltZXI7Ci0K
LSAgICBib29sIG1faXNSZWNvbmZpZ3VyaW5nIHsgZmFsc2UgfTsKLSAgICBtdXRhYmxlIExvY2sg
bV9zcGVha2VyU2FtcGxlc1Byb2R1Y2VyTG9jazsKLSAgICBDb3JlQXVkaW9TcGVha2VyU2FtcGxl
c1Byb2R1Y2VyKiBtX3NwZWFrZXJTYW1wbGVzUHJvZHVjZXIgV1RGX0dVQVJERURfQllfTE9DSyht
X3NwZWFrZXJTYW1wbGVzUHJvZHVjZXJMb2NrKSB7IG51bGxwdHIgfTsKLX07Ci0KLUNvcmVBdWRp
b1NoYXJlZFVuaXQmIENvcmVBdWRpb1NoYXJlZFVuaXQ6OnVuaXQoKQotewotICAgIHN0YXRpYyBO
ZXZlckRlc3Ryb3llZDxDb3JlQXVkaW9TaGFyZWRVbml0PiBzaW5nbGV0b247Ci0gICAgcmV0dXJu
IHNpbmdsZXRvbjsKLX0KLQotQ29yZUF1ZGlvU2hhcmVkVW5pdDo6Q29yZUF1ZGlvU2hhcmVkVW5p
dCgpCi0gICAgOiBtX3ZlcmlmeUNhcHR1cmluZ1RpbWVyKCp0aGlzLCAmQ29yZUF1ZGlvU2hhcmVk
VW5pdDo6dmVyaWZ5SXNDYXB0dXJpbmcpCi17Ci19Ci0KLXZvaWQgQ29yZUF1ZGlvU2hhcmVkVW5p
dDo6Y2FwdHVyZURldmljZUNoYW5nZWQoKQotewotI2lmIFBMQVRGT1JNKE1BQykKLSAgICByZWNv
bmZpZ3VyZUF1ZGlvVW5pdCgpOwotI2Vsc2UKLSAgICBBVkF1ZGlvU2Vzc2lvbkNhcHR1cmVEZXZp
Y2VNYW5hZ2VyOjpzaW5nbGV0b24oKS5zZXRQcmVmZXJyZWRBdWRpb1Nlc3Npb25EZXZpY2VVSUQo
cGVyc2lzdGVudElEKCkpOwotI2VuZGlmCi19Ci0KLXNpemVfdCBDb3JlQXVkaW9TaGFyZWRVbml0
OjpwcmVmZXJyZWRJT0J1ZmZlclNpemUoKQotewotICAgIHJldHVybiBBdWRpb1Nlc3Npb246OnNo
YXJlZFNlc3Npb24oKS5idWZmZXJTaXplKCk7Ci19Ci0KLU9TU3RhdHVzIENvcmVBdWRpb1NoYXJl
ZFVuaXQ6OnNldHVwQXVkaW9Vbml0KCkKLXsKLSAgICBpZiAobV9pb1VuaXQpCi0gICAgICAgIHJl
dHVybiAwOwotCi0gICAgQVNTRVJUKGhhc0NsaWVudHMoKSk7Ci0KLSAgICBtYWNoX3RpbWViYXNl
X2luZm9fZGF0YV90IHRpbWViYXNlSW5mbzsKLSAgICBtYWNoX3RpbWViYXNlX2luZm8oJnRpbWVi
YXNlSW5mbyk7Ci0gICAgbV9EVFNDb252ZXJzaW9uUmF0aW8gPSAxZS05ICogc3RhdGljX2Nhc3Q8
ZG91YmxlPih0aW1lYmFzZUluZm8ubnVtZXIpIC8gc3RhdGljX2Nhc3Q8ZG91YmxlPih0aW1lYmFz
ZUluZm8uZGVub20pOwotCi0gICAgQXVkaW9Db21wb25lbnREZXNjcmlwdGlvbiBpb1VuaXREZXNj
cmlwdGlvbiA9IHsga0F1ZGlvVW5pdFR5cGVfT3V0cHV0LCBrQXVkaW9Vbml0U3ViVHlwZV9Wb2lj
ZVByb2Nlc3NpbmdJTywga0F1ZGlvVW5pdE1hbnVmYWN0dXJlcl9BcHBsZSwgMCwgMCB9OwotICAg
IEF1ZGlvQ29tcG9uZW50IGlvQ29tcG9uZW50ID0gUEFMOjpBdWRpb0NvbXBvbmVudEZpbmROZXh0
KG51bGxwdHIsICZpb1VuaXREZXNjcmlwdGlvbik7Ci0gICAgQVNTRVJUKGlvQ29tcG9uZW50KTsK
LSAgICBpZiAoIWlvQ29tcG9uZW50KSB7Ci0gICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFdlYlJU
QywgIkNvcmVBdWRpb1NoYXJlZFVuaXQ6OnNldHVwQXVkaW9Vbml0KCVwKSB1bmFibGUgdG8gZmlu
ZCB2cGlvIHVuaXQgY29tcG9uZW50IiwgdGhpcyk7Ci0gICAgICAgIHJldHVybiAtMTsKLSAgICB9
Ci0KLSNpZiAhTE9HX0RJU0FCTEVECi0gICAgQ0ZTdHJpbmdSZWYgbmFtZSA9IG51bGxwdHI7Ci0g
ICAgUEFMOjpBdWRpb0NvbXBvbmVudENvcHlOYW1lKGlvQ29tcG9uZW50LCAmbmFtZSk7Ci0gICAg
aWYgKG5hbWUpIHsKLSAgICAgICAgbV9pb1VuaXROYW1lID0gbmFtZTsKLSAgICAgICAgQ0ZSZWxl
YXNlKG5hbWUpOwotICAgICAgICBSRUxFQVNFX0xPRyhXZWJSVEMsICJDb3JlQXVkaW9TaGFyZWRV
bml0OjpzZXR1cEF1ZGlvVW5pdCglcCkgY3JlYXRlZCBcIiVzXCIgY29tcG9uZW50IiwgdGhpcywg
bV9pb1VuaXROYW1lLnV0ZjgoKS5kYXRhKCkpOwotICAgIH0KLSNlbmRpZgotCi0gICAgYXV0byBl
cnIgPSBQQUw6OkF1ZGlvQ29tcG9uZW50SW5zdGFuY2VOZXcoaW9Db21wb25lbnQsICZtX2lvVW5p
dCk7Ci0gICAgaWYgKGVycikgewotICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihXZWJSVEMsICJD
b3JlQXVkaW9TaGFyZWRVbml0OjpzZXR1cEF1ZGlvVW5pdCglcCkgdW5hYmxlIHRvIG9wZW4gdnBp
byB1bml0LCBlcnJvciAlZCAoJS40cykiLCB0aGlzLCAoaW50KWVyciwgKGNoYXIqKSZlcnIpOwot
ICAgICAgICByZXR1cm4gZXJyOwotICAgIH0KLQotICAgIGlmICghZW5hYmxlRWNob0NhbmNlbGxh
dGlvbigpKSB7Ci0gICAgICAgIHVpbnQzMl90IHBhcmFtID0gMDsKLSAgICAgICAgZXJyID0gUEFM
OjpBdWRpb1VuaXRTZXRQcm9wZXJ0eShtX2lvVW5pdCwga0FVVm9pY2VJT1Byb3BlcnR5X1ZvaWNl
UHJvY2Vzc2luZ0VuYWJsZUFHQywga0F1ZGlvVW5pdFNjb3BlX0dsb2JhbCwgaW5wdXRCdXMsICZw
YXJhbSwgc2l6ZW9mKHBhcmFtKSk7Ci0gICAgICAgIGlmIChlcnIpIHsKLSAgICAgICAgICAgIFJF
TEVBU0VfTE9HX0VSUk9SKFdlYlJUQywgIkNvcmVBdWRpb1NoYXJlZFVuaXQ6OnNldHVwQXVkaW9V
bml0KCVwKSB1bmFibGUgdG8gc2V0IHZwaW8gYXV0b21hdGljIGdhaW4gY29udHJvbCwgZXJyb3Ig
JWQgKCUuNHMpIiwgdGhpcywgKGludCllcnIsIChjaGFyKikmZXJyKTsKLSAgICAgICAgICAgIHJl
dHVybiBlcnI7Ci0gICAgICAgIH0KLSAgICAgICAgcGFyYW0gPSAxOwotICAgICAgICBlcnIgPSBQ
QUw6OkF1ZGlvVW5pdFNldFByb3BlcnR5KG1faW9Vbml0LCBrQVVWb2ljZUlPUHJvcGVydHlfQnlw
YXNzVm9pY2VQcm9jZXNzaW5nLCBrQXVkaW9Vbml0U2NvcGVfR2xvYmFsLCBpbnB1dEJ1cywgJnBh
cmFtLCBzaXplb2YocGFyYW0pKTsKLSAgICAgICAgaWYgKGVycikgewotICAgICAgICAgICAgUkVM
RUFTRV9MT0dfRVJST1IoV2ViUlRDLCAiQ29yZUF1ZGlvU2hhcmVkVW5pdDo6c2V0dXBBdWRpb1Vu
aXQoJXApIHVuYWJsZSB0byBzZXQgdnBpbyB1bml0IGVjaG8gY2FuY2VsbGF0aW9uLCBlcnJvciAl
ZCAoJS40cykiLCB0aGlzLCAoaW50KWVyciwgKGNoYXIqKSZlcnIpOwotICAgICAgICAgICAgcmV0
dXJuIGVycjsKLSAgICAgICAgfQotICAgIH0KLQotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0g
ICAgdWludDMyX3QgcGFyYW0gPSAxOwotICAgIGVyciA9IFBBTDo6QXVkaW9Vbml0U2V0UHJvcGVy
dHkobV9pb1VuaXQsIGtBdWRpb091dHB1dFVuaXRQcm9wZXJ0eV9FbmFibGVJTywga0F1ZGlvVW5p
dFNjb3BlX0lucHV0LCBpbnB1dEJ1cywgJnBhcmFtLCBzaXplb2YocGFyYW0pKTsKLSAgICBpZiAo
ZXJyKSB7Ci0gICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFdlYlJUQywgIkNvcmVBdWRpb1NoYXJl
ZFVuaXQ6OnNldHVwQXVkaW9Vbml0KCVwKSB1bmFibGUgdG8gZW5hYmxlIHZwaW8gdW5pdCBpbnB1
dCwgZXJyb3IgJWQgKCUuNHMpIiwgdGhpcywgKGludCllcnIsIChjaGFyKikmZXJyKTsKLSAgICAg
ICAgcmV0dXJuIGVycjsKLSAgICB9Ci0jZWxzZQotICAgIGF1dG8gZGV2aWNlSUQgPSBjYXB0dXJl
RGV2aWNlSUQoKTsKLSAgICBpZiAoIWRldmljZUlEKSB7Ci0gICAgICAgIGVyciA9IGRlZmF1bHRJ
bnB1dERldmljZSgmZGV2aWNlSUQpOwotICAgICAgICBpZiAoZXJyKQotICAgICAgICAgICAgcmV0
dXJuIGVycjsKLSAgICB9Ci0KLSAgICBlcnIgPSBQQUw6OkF1ZGlvVW5pdFNldFByb3BlcnR5KG1f
aW9Vbml0LCBrQXVkaW9PdXRwdXRVbml0UHJvcGVydHlfQ3VycmVudERldmljZSwga0F1ZGlvVW5p
dFNjb3BlX0dsb2JhbCwgaW5wdXRCdXMsICZkZXZpY2VJRCwgc2l6ZW9mKGRldmljZUlEKSk7Ci0g
ICAgaWYgKGVycikgewotICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihXZWJSVEMsICJDb3JlQXVk
aW9TaGFyZWRVbml0OjpzZXR1cEF1ZGlvVW5pdCglcCkgdW5hYmxlIHRvIHNldCB2cGlvIHVuaXQg
Y2FwdHVyZSBkZXZpY2UgSUQgJWQsIGVycm9yICVkICglLjRzKSIsIHRoaXMsIChpbnQpZGV2aWNl
SUQsIChpbnQpZXJyLCAoY2hhciopJmVycik7Ci0gICAgICAgIHJldHVybiBlcnI7Ci0gICAgfQot
Ci0gICAgdWludDMyX3QgZGVmYXVsdE91dHB1dERldmljZUlEOwotICAgIGVyciA9IGRlZmF1bHRP
dXRwdXREZXZpY2UoJmRlZmF1bHRPdXRwdXREZXZpY2VJRCk7Ci0gICAgaWYgKCFlcnIpIHsKLSAg
ICAgICAgZXJyID0gUEFMOjpBdWRpb1VuaXRTZXRQcm9wZXJ0eShtX2lvVW5pdCwga0F1ZGlvT3V0
cHV0VW5pdFByb3BlcnR5X0N1cnJlbnREZXZpY2UsIGtBdWRpb1VuaXRTY29wZV9HbG9iYWwsIG91
dHB1dEJ1cywgJmRlZmF1bHRPdXRwdXREZXZpY2VJRCwgc2l6ZW9mKGRlZmF1bHRPdXRwdXREZXZp
Y2VJRCkpOwotICAgICAgICBSRUxFQVNFX0xPR19FUlJPUl9JRihlcnIsIFdlYlJUQywgIkNvcmVB
dWRpb1NoYXJlZFVuaXQ6OnNldHVwQXVkaW9Vbml0KCVwKSB1bmFibGUgdG8gc2V0IHZwaW8gdW5p
dCBvdXRwdXQgZGV2aWNlIElEICVkLCBlcnJvciAlZCAoJS40cykiLCB0aGlzLCAoaW50KWRlZmF1
bHRPdXRwdXREZXZpY2VJRCwgKGludCllcnIsIChjaGFyKikmZXJyKTsKLSAgICB9Ci0gICAgc2V0
T3V0cHV0RGV2aWNlSUQoIWVyciA/IGRlZmF1bHRPdXRwdXREZXZpY2VJRCA6IDApOwotI2VuZGlm
Ci0KLSAgICAvLyBGSVhNRTogQWRkIHN1cHBvcnQgZm9yIGRpZmZlcmVudCBzcGVha2VyL21pY3Jv
cGhvbmUgc2FtcGxlIHJhdGVzLgotICAgIGludCBhY3R1YWxTYW1wbGVSYXRlID0gdGhpcy0+YWN0
dWFsU2FtcGxlUmF0ZSgpOwotICAgIGVyciA9IGNvbmZpZ3VyZU1pY3JvcGhvbmVQcm9jKGFjdHVh
bFNhbXBsZVJhdGUpOwotICAgIGlmIChlcnIpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLSAgICBl
cnIgPSBjb25maWd1cmVTcGVha2VyUHJvYyhhY3R1YWxTYW1wbGVSYXRlKTsKLSAgICBpZiAoZXJy
KQotICAgICAgICByZXR1cm4gZXJyOwotCi0gICAgZXJyID0gUEFMOjpBdWRpb1VuaXRJbml0aWFs
aXplKG1faW9Vbml0KTsKLSAgICBpZiAoZXJyKSB7Ci0gICAgICAgIFJFTEVBU0VfTE9HX0VSUk9S
KFdlYlJUQywgIkNvcmVBdWRpb1NoYXJlZFVuaXQ6OnNldHVwQXVkaW9Vbml0KCVwKSBBdWRpb1Vu
aXRJbml0aWFsaXplKCkgZmFpbGVkLCBlcnJvciAlZCAoJS40cykiLCB0aGlzLCAoaW50KWVyciwg
KGNoYXIqKSZlcnIpOwotICAgICAgICByZXR1cm4gZXJyOwotICAgIH0KLSAgICBtX2lvVW5pdElu
aXRpYWxpemVkID0gdHJ1ZTsKLQotICAgIHVuZHVjaygpOwotCi0gICAgcmV0dXJuIGVycjsKLX0K
LQotdm9pZCBDb3JlQXVkaW9TaGFyZWRVbml0Ojp1bmR1Y2soKQotewotICAgIHVpbnQzMl90IG91
dHB1dERldmljZTsKLSAgICBpZiAoIWRlZmF1bHRPdXRwdXREZXZpY2UoJm91dHB1dERldmljZSkp
Ci0gICAgICAgIEF1ZGlvRGV2aWNlRHVjayhvdXRwdXREZXZpY2UsIDEuMCwgbnVsbHB0ciwgMCk7
Ci19Ci0KLWludCBDb3JlQXVkaW9TaGFyZWRVbml0OjphY3R1YWxTYW1wbGVSYXRlKCkgY29uc3QK
LXsKLSAgICBMb2NrZXIgbG9ja2VyIHsgbV9zcGVha2VyU2FtcGxlc1Byb2R1Y2VyTG9jayB9Owot
ICAgIHJldHVybiBtX3NwZWFrZXJTYW1wbGVzUHJvZHVjZXIgPyBtX3NwZWFrZXJTYW1wbGVzUHJv
ZHVjZXItPmZvcm1hdCgpLnN0cmVhbURlc2NyaXB0aW9uKCkubVNhbXBsZVJhdGUgOiBzYW1wbGVS
YXRlKCk7Ci19Ci0KLU9TU3RhdHVzIENvcmVBdWRpb1NoYXJlZFVuaXQ6OmNvbmZpZ3VyZU1pY3Jv
cGhvbmVQcm9jKGludCBzYW1wbGVSYXRlKQotewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7
Ci0KLSAgICBBVVJlbmRlckNhbGxiYWNrU3RydWN0IGNhbGxiYWNrID0geyBtaWNyb3Bob25lQ2Fs
bGJhY2ssIHRoaXMgfTsKLSAgICBhdXRvIGVyciA9IFBBTDo6QXVkaW9Vbml0U2V0UHJvcGVydHko
bV9pb1VuaXQsIGtBdWRpb091dHB1dFVuaXRQcm9wZXJ0eV9TZXRJbnB1dENhbGxiYWNrLCBrQXVk
aW9Vbml0U2NvcGVfR2xvYmFsLCBpbnB1dEJ1cywgJmNhbGxiYWNrLCBzaXplb2YoY2FsbGJhY2sp
KTsKLSAgICBpZiAoZXJyKSB7Ci0gICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFdlYlJUQywgIkNv
cmVBdWRpb1NoYXJlZFVuaXQ6OmNvbmZpZ3VyZU1pY3JvcGhvbmVQcm9jKCVwKSB1bmFibGUgdG8g
c2V0IHZwaW8gdW5pdCBtaWMgcHJvYywgZXJyb3IgJWQgKCUuNHMpIiwgdGhpcywgKGludCllcnIs
IChjaGFyKikmZXJyKTsKLSAgICAgICAgcmV0dXJuIGVycjsKLSAgICB9Ci0KLSAgICBBdWRpb1N0
cmVhbUJhc2ljRGVzY3JpcHRpb24gbWljcm9waG9uZVByb2NGb3JtYXQgPSB7IH07Ci0KLSAgICBV
SW50MzIgc2l6ZSA9IHNpemVvZihtaWNyb3Bob25lUHJvY0Zvcm1hdCk7Ci0gICAgZXJyID0gUEFM
OjpBdWRpb1VuaXRHZXRQcm9wZXJ0eShtX2lvVW5pdCwga0F1ZGlvVW5pdFByb3BlcnR5X1N0cmVh
bUZvcm1hdCwga0F1ZGlvVW5pdFNjb3BlX091dHB1dCwgaW5wdXRCdXMsICZtaWNyb3Bob25lUHJv
Y0Zvcm1hdCwgJnNpemUpOwotICAgIGlmIChlcnIpIHsKLSAgICAgICAgUkVMRUFTRV9MT0dfRVJS
T1IoV2ViUlRDLCAiQ29yZUF1ZGlvU2hhcmVkVW5pdDo6Y29uZmlndXJlTWljcm9waG9uZVByb2Mo
JXApIHVuYWJsZSB0byBnZXQgb3V0cHV0IHN0cmVhbSBmb3JtYXQsIGVycm9yICVkICglLjRzKSIs
IHRoaXMsIChpbnQpZXJyLCAoY2hhciopJmVycik7Ci0gICAgICAgIHJldHVybiBlcnI7Ci0gICAg
fQotCi0gICAgbWljcm9waG9uZVByb2NGb3JtYXQubVNhbXBsZVJhdGUgPSBzYW1wbGVSYXRlOwot
ICAgIGVyciA9IFBBTDo6QXVkaW9Vbml0U2V0UHJvcGVydHkobV9pb1VuaXQsIGtBdWRpb1VuaXRQ
cm9wZXJ0eV9TdHJlYW1Gb3JtYXQsIGtBdWRpb1VuaXRTY29wZV9PdXRwdXQsIGlucHV0QnVzLCAm
bWljcm9waG9uZVByb2NGb3JtYXQsIHNpemUpOwotICAgIGlmIChlcnIpIHsKLSAgICAgICAgUkVM
RUFTRV9MT0dfRVJST1IoV2ViUlRDLCAiQ29yZUF1ZGlvU2hhcmVkVW5pdDo6Y29uZmlndXJlTWlj
cm9waG9uZVByb2MoJXApIHVuYWJsZSB0byBzZXQgb3V0cHV0IHN0cmVhbSBmb3JtYXQsIGVycm9y
ICVkICglLjRzKSIsIHRoaXMsIChpbnQpZXJyLCAoY2hhciopJmVycik7Ci0gICAgICAgIHJldHVy
biBlcnI7Ci0gICAgfQotCi0gICAgbV9taWNyb3Bob25lU2FtcGxlQnVmZmVyID0gQXVkaW9TYW1w
bGVCdWZmZXJMaXN0OjpjcmVhdGUobWljcm9waG9uZVByb2NGb3JtYXQsIHByZWZlcnJlZElPQnVm
ZmVyU2l6ZSgpICogMik7Ci0gICAgbV9taWNyb3Bob25lUHJvY0Zvcm1hdCA9IG1pY3JvcGhvbmVQ
cm9jRm9ybWF0OwotCi0gICAgcmV0dXJuIGVycjsKLX0KLQotT1NTdGF0dXMgQ29yZUF1ZGlvU2hh
cmVkVW5pdDo6Y29uZmlndXJlU3BlYWtlclByb2MoaW50IHNhbXBsZVJhdGUpCi17Ci0gICAgQVNT
RVJUKGlzTWFpblRocmVhZCgpKTsKLQotICAgIEFVUmVuZGVyQ2FsbGJhY2tTdHJ1Y3QgY2FsbGJh
Y2sgPSB7IHNwZWFrZXJDYWxsYmFjaywgdGhpcyB9OwotICAgIGF1dG8gZXJyID0gUEFMOjpBdWRp
b1VuaXRTZXRQcm9wZXJ0eShtX2lvVW5pdCwga0F1ZGlvVW5pdFByb3BlcnR5X1NldFJlbmRlckNh
bGxiYWNrLCBrQXVkaW9Vbml0U2NvcGVfSW5wdXQsIG91dHB1dEJ1cywgJmNhbGxiYWNrLCBzaXpl
b2YoY2FsbGJhY2spKTsKLSAgICBpZiAoZXJyKSB7Ci0gICAgICAgIFJFTEVBU0VfTE9HX0VSUk9S
KFdlYlJUQywgIkNvcmVBdWRpb1NoYXJlZFVuaXQ6OmNvbmZpZ3VyZVNwZWFrZXJQcm9jKCVwKSB1
bmFibGUgdG8gc2V0IHZwaW8gdW5pdCBzcGVha2VyIHByb2MsIGVycm9yICVkICglLjRzKSIsIHRo
aXMsIChpbnQpZXJyLCAoY2hhciopJmVycik7Ci0gICAgICAgIHJldHVybiBlcnI7Ci0gICAgfQot
Ci0gICAgQXVkaW9TdHJlYW1CYXNpY0Rlc2NyaXB0aW9uIHNwZWFrZXJQcm9jRm9ybWF0OwotICAg
IFVJbnQzMiBzaXplID0gc2l6ZW9mKHNwZWFrZXJQcm9jRm9ybWF0KTsKLSAgICB7Ci0gICAgICAg
IExvY2tlciBsb2NrZXIgeyBtX3NwZWFrZXJTYW1wbGVzUHJvZHVjZXJMb2NrIH07Ci0gICAgICAg
IGlmIChtX3NwZWFrZXJTYW1wbGVzUHJvZHVjZXIpIHsKLSAgICAgICAgICAgIHNwZWFrZXJQcm9j
Rm9ybWF0ID0gbV9zcGVha2VyU2FtcGxlc1Byb2R1Y2VyLT5mb3JtYXQoKS5zdHJlYW1EZXNjcmlw
dGlvbigpOwotICAgICAgICAgICAgQVNTRVJUKHNwZWFrZXJQcm9jRm9ybWF0Lm1TYW1wbGVSYXRl
ID09IHNhbXBsZVJhdGUpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgZXJyID0gUEFM
OjpBdWRpb1VuaXRHZXRQcm9wZXJ0eShtX2lvVW5pdCwga0F1ZGlvVW5pdFByb3BlcnR5X1N0cmVh
bUZvcm1hdCwga0F1ZGlvVW5pdFNjb3BlX0lucHV0LCBvdXRwdXRCdXMsICZzcGVha2VyUHJvY0Zv
cm1hdCwgJnNpemUpOwotICAgICAgICAgICAgaWYgKGVycikgewotICAgICAgICAgICAgICAgIFJF
TEVBU0VfTE9HX0VSUk9SKFdlYlJUQywgIkNvcmVBdWRpb1NoYXJlZFVuaXQ6OmNvbmZpZ3VyZVNw
ZWFrZXJQcm9jKCVwKSB1bmFibGUgdG8gZ2V0IGlucHV0IHN0cmVhbSBmb3JtYXQsIGVycm9yICVk
ICglLjRzKSIsIHRoaXMsIChpbnQpZXJyLCAoY2hhciopJmVycik7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIGVycjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBzcGVha2Vy
UHJvY0Zvcm1hdC5tU2FtcGxlUmF0ZSA9IHNhbXBsZVJhdGU7Ci0KLSAgICBlcnIgPSBQQUw6OkF1
ZGlvVW5pdFNldFByb3BlcnR5KG1faW9Vbml0LCBrQXVkaW9Vbml0UHJvcGVydHlfU3RyZWFtRm9y
bWF0LCBrQXVkaW9Vbml0U2NvcGVfSW5wdXQsIG91dHB1dEJ1cywgJnNwZWFrZXJQcm9jRm9ybWF0
LCBzaXplKTsKLSAgICBpZiAoZXJyKSB7Ci0gICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFdlYlJU
QywgIkNvcmVBdWRpb1NoYXJlZFVuaXQ6OmNvbmZpZ3VyZVNwZWFrZXJQcm9jKCVwKSB1bmFibGUg
dG8gZ2V0IGlucHV0IHN0cmVhbSBmb3JtYXQsIGVycm9yICVkICglLjRzKSIsIHRoaXMsIChpbnQp
ZXJyLCAoY2hhciopJmVycik7Ci0gICAgICAgIHJldHVybiBlcnI7Ci0gICAgfQotCi0gICAgbV9z
cGVha2VyUHJvY0Zvcm1hdCA9IHNwZWFrZXJQcm9jRm9ybWF0OwotCi0gICAgcmV0dXJuIGVycjsK
LX0KLQotI2lmICFMT0dfRElTQUJMRUQKLXZvaWQgQ29yZUF1ZGlvU2hhcmVkVW5pdDo6Y2hlY2tU
aW1lc3RhbXBzKGNvbnN0IEF1ZGlvVGltZVN0YW1wJiB0aW1lU3RhbXAsIHVpbnQ2NF90IHNhbXBs
ZVRpbWUsIGRvdWJsZSBob3N0VGltZSkKLXsKLSAgICBpZiAoIXRpbWVTdGFtcC5tU2FtcGxlVGlt
ZSB8fCBzYW1wbGVUaW1lID09IG1fbGF0ZXN0TWljVGltZVN0YW1wIHx8ICFob3N0VGltZSkKLSAg
ICAgICAgUkVMRUFTRV9MT0dfRVJST1IoV2ViUlRDLCAiQ29yZUF1ZGlvU2hhcmVkVW5pdDo6Y2hl
Y2tUaW1lc3RhbXBzOiB1bnVzdWFsIHRpbWVzdGFtcHMsIHNhbXBsZSB0aW1lID0gJWxsZCwgcHJl
dmlvdXMgc2FtcGxlIHRpbWUgPSAlbGxkLCBob3N0VGltZSAlZiIsIHNhbXBsZVRpbWUsIG1fbGF0
ZXN0TWljVGltZVN0YW1wLCBob3N0VGltZSk7Ci19Ci0jZW5kaWYKLQotT1NTdGF0dXMgQ29yZUF1
ZGlvU2hhcmVkVW5pdDo6cHJvdmlkZVNwZWFrZXJEYXRhKEF1ZGlvVW5pdFJlbmRlckFjdGlvbkZs
YWdzJiBmbGFncywgY29uc3QgQXVkaW9UaW1lU3RhbXAmIHRpbWVTdGFtcCwgVUludDMyIC8qaW5C
dXNOdW1iZXIqLywgVUludDMyIGluTnVtYmVyRnJhbWVzLCBBdWRpb0J1ZmZlckxpc3QmIGlvRGF0
YSkKLXsKLSAgICBpZiAobV9pc1JlY29uZmlndXJpbmcgfHwgIW1fc3BlYWtlclNhbXBsZXNQcm9k
dWNlckxvY2sudHJ5TG9jaygpKSB7Ci0gICAgICAgIEF1ZGlvU2FtcGxlQnVmZmVyTGlzdDo6emVy
b0FCTChpb0RhdGEsIHN0YXRpY19jYXN0PHNpemVfdD4oaW5OdW1iZXJGcmFtZXMgKiBtX3NwZWFr
ZXJQcm9jRm9ybWF0LmJ5dGVzUGVyRnJhbWUoKSkpOwotICAgICAgICBmbGFncyA9IGtBdWRpb1Vu
aXRSZW5kZXJBY3Rpb25fT3V0cHV0SXNTaWxlbmNlOwotICAgICAgICByZXR1cm4gbm9FcnI7Ci0g
ICAgfQotCi0gICAgTG9ja2VyIGxvY2tlciB7IEFkb3B0TG9jaywgbV9zcGVha2VyU2FtcGxlc1By
b2R1Y2VyTG9jayB9OwotICAgIGlmICghbV9zcGVha2VyU2FtcGxlc1Byb2R1Y2VyKSB7Ci0gICAg
ICAgIEF1ZGlvU2FtcGxlQnVmZmVyTGlzdDo6emVyb0FCTChpb0RhdGEsIHN0YXRpY19jYXN0PHNp
emVfdD4oaW5OdW1iZXJGcmFtZXMgKiBtX3NwZWFrZXJQcm9jRm9ybWF0LmJ5dGVzUGVyRnJhbWUo
KSkpOwotICAgICAgICBmbGFncyA9IGtBdWRpb1VuaXRSZW5kZXJBY3Rpb25fT3V0cHV0SXNTaWxl
bmNlOwotICAgICAgICByZXR1cm4gbm9FcnI7Ci0gICAgfQotICAgIHJldHVybiBtX3NwZWFrZXJT
YW1wbGVzUHJvZHVjZXItPnByb2R1Y2VTcGVha2VyU2FtcGxlcyhpbk51bWJlckZyYW1lcywgaW9E
YXRhLCB0aW1lU3RhbXAubVNhbXBsZVRpbWUsIHRpbWVTdGFtcC5tSG9zdFRpbWUsIGZsYWdzKTsK
LX0KLQotT1NTdGF0dXMgQ29yZUF1ZGlvU2hhcmVkVW5pdDo6c3BlYWtlckNhbGxiYWNrKHZvaWQg
KmluUmVmQ29uLCBBdWRpb1VuaXRSZW5kZXJBY3Rpb25GbGFncyogaW9BY3Rpb25GbGFncywgY29u
c3QgQXVkaW9UaW1lU3RhbXAqIGluVGltZVN0YW1wLCBVSW50MzIgaW5CdXNOdW1iZXIsIFVJbnQz
MiBpbk51bWJlckZyYW1lcywgQXVkaW9CdWZmZXJMaXN0KiBpb0RhdGEpCi17Ci0gICAgQVNTRVJU
KGlvQWN0aW9uRmxhZ3MpOwotICAgIEFTU0VSVChpblRpbWVTdGFtcCk7Ci0gICAgYXV0byBkYXRh
U291cmNlID0gc3RhdGljX2Nhc3Q8Q29yZUF1ZGlvU2hhcmVkVW5pdCo+KGluUmVmQ29uKTsKLSAg
ICByZXR1cm4gZGF0YVNvdXJjZS0+cHJvdmlkZVNwZWFrZXJEYXRhKCppb0FjdGlvbkZsYWdzLCAq
aW5UaW1lU3RhbXAsIGluQnVzTnVtYmVyLCBpbk51bWJlckZyYW1lcywgKmlvRGF0YSk7Ci19Ci0K
LU9TU3RhdHVzIENvcmVBdWRpb1NoYXJlZFVuaXQ6OnByb2Nlc3NNaWNyb3Bob25lU2FtcGxlcyhB
dWRpb1VuaXRSZW5kZXJBY3Rpb25GbGFncyYgaW9BY3Rpb25GbGFncywgY29uc3QgQXVkaW9UaW1l
U3RhbXAmIHRpbWVTdGFtcCwgVUludDMyIGluQnVzTnVtYmVyLCBVSW50MzIgaW5OdW1iZXJGcmFt
ZXMsIEF1ZGlvQnVmZmVyTGlzdCogLyppb0RhdGEqLykKLXsKLSAgICArK21fbWljcm9waG9uZVBy
b2NzQ2FsbGVkOwotCi0gICAgaWYgKG1faXNSZWNvbmZpZ3VyaW5nKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICAvLyBQdWxsIHRocm91Z2ggdGhlIHZwaW8gdW5pdCB0byBvdXIgbWljIGJ1
ZmZlci4KLSAgICBtX21pY3JvcGhvbmVTYW1wbGVCdWZmZXItPnJlc2V0KCk7Ci0gICAgQXVkaW9C
dWZmZXJMaXN0JiBidWZmZXJMaXN0ID0gbV9taWNyb3Bob25lU2FtcGxlQnVmZmVyLT5idWZmZXJM
aXN0KCk7Ci0gICAgYXV0byBlcnIgPSBBdWRpb1VuaXRSZW5kZXIobV9pb1VuaXQsICZpb0FjdGlv
bkZsYWdzLCAmdGltZVN0YW1wLCBpbkJ1c051bWJlciwgaW5OdW1iZXJGcmFtZXMsICZidWZmZXJM
aXN0KTsKLSAgICBpZiAoZXJyKSB7Ci0gICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFdlYlJUQywg
IkNvcmVBdWRpb1NoYXJlZFVuaXQ6OnByb2Nlc3NNaWNyb3Bob25lU2FtcGxlcyglcCkgQXVkaW9V
bml0UmVuZGVyIGZhaWxlZCB3aXRoIGVycm9yICVkICglLjRzKSwgYnVmZmVyTGlzdCBzaXplICVk
LCBpbk51bWJlckZyYW1lcyAlZCAiLCB0aGlzLCAoaW50KWVyciwgKGNoYXIqKSZlcnIsIChpbnQp
YnVmZmVyTGlzdC5tQnVmZmVyc1swXS5tRGF0YUJ5dGVTaXplLCAoaW50KWluTnVtYmVyRnJhbWVz
KTsKLSAgICAgICAgaWYgKGVyciA9PSBrQXVkaW9fUGFyYW1FcnJvcikgewotICAgICAgICAgICAg
Ly8gT3VyIGJ1ZmZlciBtaWdodCBiZSB0b28gc21hbGwsIHRoZSBwcmVmZXJyZWQgYnVmZmVyIHNp
emUgb3Igc2FtcGxlIHJhdGUgbWlnaHQgaGF2ZSBjaGFuZ2VkLgotICAgICAgICAgICAgY2FsbE9u
TWFpblRocmVhZChbXSB7Ci0gICAgICAgICAgICAgICAgQ29yZUF1ZGlvU2hhcmVkVW5pdDo6c2lu
Z2xldG9uKCkucmVjb25maWd1cmUoKTsKLSAgICAgICAgICAgIH0pOwotICAgICAgICB9Ci0gICAg
ICAgIC8vIFdlIHJldHVybiBlYXJseSBzbyB0aGF0IGlmIHRoaXMgZXJyb3IgaGFwcGVucywgd2Ug
ZG8gbm90IGluY3JlbWVudCBtX21pY3JvcGhvbmVQcm9jc0NhbGxlZCBhbmQgZmFpbCB0aGUgY2Fw
dHVyZSBvbmNlIHRpbWVyIGtpY2tzIGluLgotICAgICAgICByZXR1cm4gZXJyOwotICAgIH0KLQot
ICAgIGlmICghaXNQcm9kdWNpbmdNaWNyb3Bob25lU2FtcGxlcygpKQotICAgICAgICByZXR1cm4g
bm9FcnI7Ci0KLSAgICBkb3VibGUgYWRqdXN0ZWRIb3N0VGltZSA9IG1fRFRTQ29udmVyc2lvblJh
dGlvICogdGltZVN0YW1wLm1Ib3N0VGltZTsKLSAgICB1aW50NjRfdCBzYW1wbGVUaW1lID0gdGlt
ZVN0YW1wLm1TYW1wbGVUaW1lOwotI2lmICFMT0dfRElTQUJMRUQKLSAgICBjaGVja1RpbWVzdGFt
cHModGltZVN0YW1wLCBzYW1wbGVUaW1lLCBhZGp1c3RlZEhvc3RUaW1lKTsKLSNlbmRpZgotICAg
IG1fbGF0ZXN0TWljVGltZVN0YW1wID0gc2FtcGxlVGltZTsKLSAgICBtX21pY3JvcGhvbmVTYW1w
bGVCdWZmZXItPnNldFRpbWVzKGFkanVzdGVkSG9zdFRpbWUsIHNhbXBsZVRpbWUpOwotCi0gICAg
aWYgKHZvbHVtZSgpICE9IDEuMCkKLSAgICAgICAgbV9taWNyb3Bob25lU2FtcGxlQnVmZmVyLT5h
cHBseUdhaW4odm9sdW1lKCkpOwotCi0gICAgYXVkaW9TYW1wbGVzQXZhaWxhYmxlKE1lZGlhVGlt
ZShzYW1wbGVUaW1lLCBtX21pY3JvcGhvbmVQcm9jRm9ybWF0LnNhbXBsZVJhdGUoKSksIG1fbWlj
cm9waG9uZVNhbXBsZUJ1ZmZlci0+YnVmZmVyTGlzdCgpLCBtX21pY3JvcGhvbmVQcm9jRm9ybWF0
LCBpbk51bWJlckZyYW1lcyk7Ci0gICAgcmV0dXJuIG5vRXJyOwotfQotCi1PU1N0YXR1cyBDb3Jl
QXVkaW9TaGFyZWRVbml0OjptaWNyb3Bob25lQ2FsbGJhY2sodm9pZCAqaW5SZWZDb24sIEF1ZGlv
VW5pdFJlbmRlckFjdGlvbkZsYWdzKiBpb0FjdGlvbkZsYWdzLCBjb25zdCBBdWRpb1RpbWVTdGFt
cCogaW5UaW1lU3RhbXAsIFVJbnQzMiBpbkJ1c051bWJlciwgVUludDMyIGluTnVtYmVyRnJhbWVz
LCBBdWRpb0J1ZmZlckxpc3QqIGlvRGF0YSkKLXsKLSAgICBBU1NFUlQoaW9BY3Rpb25GbGFncyk7
Ci0gICAgQVNTRVJUKGluVGltZVN0YW1wKTsKLSAgICBDb3JlQXVkaW9TaGFyZWRVbml0KiBkYXRh
U291cmNlID0gc3RhdGljX2Nhc3Q8Q29yZUF1ZGlvU2hhcmVkVW5pdCo+KGluUmVmQ29uKTsKLSAg
ICByZXR1cm4gZGF0YVNvdXJjZS0+cHJvY2Vzc01pY3JvcGhvbmVTYW1wbGVzKCppb0FjdGlvbkZs
YWdzLCAqaW5UaW1lU3RhbXAsIGluQnVzTnVtYmVyLCBpbk51bWJlckZyYW1lcywgaW9EYXRhKTsK
LX0KLQotdm9pZCBDb3JlQXVkaW9TaGFyZWRVbml0OjpjbGVhbnVwQXVkaW9Vbml0KCkKLXsKLSAg
ICBpZiAobV9pb1VuaXRJbml0aWFsaXplZCkgewotICAgICAgICBBU1NFUlQobV9pb1VuaXQpOwot
ICAgICAgICBhdXRvIGVyciA9IEF1ZGlvVW5pdFVuaW5pdGlhbGl6ZShtX2lvVW5pdCk7Ci0gICAg
ICAgIGlmIChlcnIpCi0gICAgICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihXZWJSVEMsICJDb3Jl
QXVkaW9TaGFyZWRVbml0OjpjbGVhbnVwQXVkaW9Vbml0KCVwKSBBdWRpb1VuaXRVbmluaXRpYWxp
emUgZmFpbGVkIHdpdGggZXJyb3IgJWQgKCUuNHMpIiwgdGhpcywgKGludCllcnIsIChjaGFyKikm
ZXJyKTsKLSAgICAgICAgbV9pb1VuaXRJbml0aWFsaXplZCA9IGZhbHNlOwotICAgIH0KLQotICAg
IGlmIChtX2lvVW5pdCkgewotICAgICAgICBQQUw6OkF1ZGlvQ29tcG9uZW50SW5zdGFuY2VEaXNw
b3NlKG1faW9Vbml0KTsKLSAgICAgICAgbV9pb1VuaXQgPSBudWxscHRyOwotICAgIH0KLQotICAg
IG1fbWljcm9waG9uZVNhbXBsZUJ1ZmZlciA9IG51bGxwdHI7Ci0jaWYgIUxPR19ESVNBQkxFRAot
ICAgIG1faW9Vbml0TmFtZSA9IGVtcHR5U3RyaW5nKCk7Ci0jZW5kaWYKLX0KLQotT1NTdGF0dXMg
Q29yZUF1ZGlvU2hhcmVkVW5pdDo6cmVjb25maWd1cmVBdWRpb1VuaXQoKQotewotICAgIEFTU0VS
VChpc01haW5UaHJlYWQoKSk7Ci0gICAgT1NTdGF0dXMgZXJyOwotICAgIGlmICghaGFzQXVkaW9V
bml0KCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgbV9pc1JlY29uZmlndXJpbmcgPSB0cnVl
OwotICAgIGF1dG8gc2NvcGUgPSBtYWtlU2NvcGVFeGl0KFt0aGlzXSB7IG1faXNSZWNvbmZpZ3Vy
aW5nID0gZmFsc2U7IH0pOwotCi0gICAgaWYgKG1faW9Vbml0U3RhcnRlZCkgewotICAgICAgICBl
cnIgPSBQQUw6OkF1ZGlvT3V0cHV0VW5pdFN0b3AobV9pb1VuaXQpOwotICAgICAgICBpZiAoZXJy
KSB7Ci0gICAgICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihXZWJSVEMsICJDb3JlQXVkaW9TaGFy
ZWRVbml0OjpyZWNvbmZpZ3VyZUF1ZGlvVW5pdCglcCkgQXVkaW9PdXRwdXRVbml0U3RvcCBmYWls
ZWQgd2l0aCBlcnJvciAlZCAoJS40cykiLCB0aGlzLCAoaW50KWVyciwgKGNoYXIqKSZlcnIpOwot
ICAgICAgICAgICAgcmV0dXJuIGVycjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGNsZWFudXBB
dWRpb1VuaXQoKTsKLSAgICBlcnIgPSBzZXR1cEF1ZGlvVW5pdCgpOwotICAgIGlmIChlcnIpCi0g
ICAgICAgIHJldHVybiBlcnI7Ci0KLSAgICBpZiAobV9pb1VuaXRTdGFydGVkKSB7Ci0gICAgICAg
IGVyciA9IFBBTDo6QXVkaW9PdXRwdXRVbml0U3RhcnQobV9pb1VuaXQpOwotICAgICAgICBpZiAo
ZXJyKSB7Ci0gICAgICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihXZWJSVEMsICJDb3JlQXVkaW9T
aGFyZWRVbml0OjpyZWNvbmZpZ3VyZUF1ZGlvVW5pdCglcCkgQXVkaW9PdXRwdXRVbml0U3RhcnQg
ZmFpbGVkIHdpdGggZXJyb3IgJWQgKCUuNHMpIiwgdGhpcywgKGludCllcnIsIChjaGFyKikmZXJy
KTsKLSAgICAgICAgICAgIHJldHVybiBlcnI7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJu
IGVycjsKLX0KLQotT1NTdGF0dXMgQ29yZUF1ZGlvU2hhcmVkVW5pdDo6c3RhcnRJbnRlcm5hbCgp
Ci17Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLQotICAgIHNldElzUHJvZHVjaW5nTWlj
cm9waG9uZVNhbXBsZXModHJ1ZSk7Ci0KLSAgICBPU1N0YXR1cyBlcnI7Ci0gICAgaWYgKCFtX2lv
VW5pdCkgewotICAgICAgICBlcnIgPSBzZXR1cEF1ZGlvVW5pdCgpOwotICAgICAgICBpZiAoZXJy
KSB7Ci0gICAgICAgICAgICBjbGVhbnVwQXVkaW9Vbml0KCk7Ci0gICAgICAgICAgICBBU1NFUlQo
IW1faW9Vbml0KTsKLSAgICAgICAgICAgIHJldHVybiBlcnI7Ci0gICAgICAgIH0KLSAgICAgICAg
QVNTRVJUKG1faW9Vbml0KTsKLSAgICB9Ci0KLSAgICB1bmR1Y2soKTsKLQotICAgIHsKLSAgICAg
ICAgTG9ja2VyIGxvY2tlciB7IG1fc3BlYWtlclNhbXBsZXNQcm9kdWNlckxvY2sgfTsKLSAgICAg
ICAgaWYgKG1fc3BlYWtlclNhbXBsZXNQcm9kdWNlcikKLSAgICAgICAgICAgIG1fc3BlYWtlclNh
bXBsZXNQcm9kdWNlci0+Y2FwdHVyZVVuaXRJc1N0YXJ0aW5nKCk7Ci0gICAgfQotCi0gICAgZXJy
ID0gUEFMOjpBdWRpb091dHB1dFVuaXRTdGFydChtX2lvVW5pdCk7Ci0gICAgaWYgKGVycikgewot
ICAgICAgICB7Ci0gICAgICAgICAgICBMb2NrZXIgbG9ja2VyIHsgbV9zcGVha2VyU2FtcGxlc1By
b2R1Y2VyTG9jayB9OwotICAgICAgICAgICAgaWYgKG1fc3BlYWtlclNhbXBsZXNQcm9kdWNlcikK
LSAgICAgICAgICAgICAgICBtX3NwZWFrZXJTYW1wbGVzUHJvZHVjZXItPmNhcHR1cmVVbml0SGFz
U3RvcHBlZCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoV2ViUlRD
LCAiQ29yZUF1ZGlvU2hhcmVkVW5pdDo6c3RhcnQoJXApIEF1ZGlvT3V0cHV0VW5pdFN0YXJ0IGZh
aWxlZCB3aXRoIGVycm9yICVkICglLjRzKSIsIHRoaXMsIChpbnQpZXJyLCAoY2hhciopJmVycik7
Ci0gICAgICAgIGNsZWFudXBBdWRpb1VuaXQoKTsKLSAgICAgICAgQVNTRVJUKCFtX2lvVW5pdCk7
Ci0gICAgICAgIHJldHVybiBlcnI7Ci0gICAgfQotCi0gICAgbV9pb1VuaXRTdGFydGVkID0gdHJ1
ZTsKLQotICAgIG1fdmVyaWZ5Q2FwdHVyaW5nVGltZXIuc3RhcnRSZXBlYXRpbmcodmVyaWZ5Q2Fw
dHVyZUludGVydmFsKCkpOwotICAgIG1fbWljcm9waG9uZVByb2NzQ2FsbGVkID0gMDsKLSAgICBt
X21pY3JvcGhvbmVQcm9jc0NhbGxlZExhc3RUaW1lID0gMDsKLQotICAgIHJldHVybiAwOwotfQot
Ci12b2lkIENvcmVBdWRpb1NoYXJlZFVuaXQ6OmlzUHJvZHVjaW5nTWljcm9waG9uZVNhbXBsZXND
aGFuZ2VkKCkKLXsKLSAgICBpZiAoIWlzUHJvZHVjaW5nRGF0YSgpKQotICAgICAgICByZXR1cm47
Ci0gICAgbV92ZXJpZnlDYXB0dXJpbmdUaW1lci5zdGFydFJlcGVhdGluZyh2ZXJpZnlDYXB0dXJl
SW50ZXJ2YWwoKSk7Ci19Ci0KLXZvaWQgQ29yZUF1ZGlvU2hhcmVkVW5pdDo6dmFsaWRhdGVPdXRw
dXREZXZpY2UodWludDMyX3QgY3VycmVudE91dHB1dERldmljZUlEKQotewotI2lmIFBMQVRGT1JN
KE1BQykKLSAgICB1aW50MzJfdCBjdXJyZW50RGVmYXVsdE91dHB1dERldmljZUlEID0gMDsKLSAg
ICBpZiAoYXV0byBlcnIgPSBkZWZhdWx0T3V0cHV0RGV2aWNlKCZjdXJyZW50RGVmYXVsdE91dHB1
dERldmljZUlEKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFjdXJyZW50RGVmYXVsdE91
dHB1dERldmljZUlEIHx8IGN1cnJlbnRPdXRwdXREZXZpY2VJRCA9PSBjdXJyZW50RGVmYXVsdE91
dHB1dERldmljZUlEKQotICAgICAgICByZXR1cm47Ci0KLSAgICByZWNvbmZpZ3VyZSgpOwotI2Vs
c2UKLSAgICBVTlVTRURfUEFSQU0oY3VycmVudE91dHB1dERldmljZUlEKTsKLSNlbmRpZgotfQot
Ci12b2lkIENvcmVBdWRpb1NoYXJlZFVuaXQ6OnZlcmlmeUlzQ2FwdHVyaW5nKCkKLXsKLSAgICBp
ZiAobV9taWNyb3Bob25lUHJvY3NDYWxsZWRMYXN0VGltZSAhPSBtX21pY3JvcGhvbmVQcm9jc0Nh
bGxlZCkgewotICAgICAgICBtX21pY3JvcGhvbmVQcm9jc0NhbGxlZExhc3RUaW1lID0gbV9taWNy
b3Bob25lUHJvY3NDYWxsZWQ7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBSRUxFQVNF
X0xPR19FUlJPUihXZWJSVEMsICJDb3JlQXVkaW9TaGFyZWRVbml0Ojp2ZXJpZnlJc0NhcHR1cmlu
ZyAtIG5vIGF1ZGlvIHJlY2VpdmVkIGluICVkIHNlY29uZHMsIGZhaWxpbmciLCBzdGF0aWNfY2Fz
dDxpbnQ+KG1fdmVyaWZ5Q2FwdHVyaW5nVGltZXIucmVwZWF0SW50ZXJ2YWwoKS52YWx1ZSgpKSk7
Ci0gICAgY2FwdHVyZUZhaWxlZCgpOwotfQotCi12b2lkIENvcmVBdWRpb1NoYXJlZFVuaXQ6OnN0
b3BJbnRlcm5hbCgpCi17Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLQotICAgIG1fdmVy
aWZ5Q2FwdHVyaW5nVGltZXIuc3RvcCgpOwotCi0gICAgaWYgKCFtX2lvVW5pdCB8fCAhbV9pb1Vu
aXRTdGFydGVkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvIGVyciA9IFBBTDo6QXVkaW9P
dXRwdXRVbml0U3RvcChtX2lvVW5pdCk7Ci0gICAgaWYgKGVycikgewotICAgICAgICBSRUxFQVNF
X0xPR19FUlJPUihXZWJSVEMsICJDb3JlQXVkaW9TaGFyZWRVbml0OjpzdG9wKCVwKSBBdWRpb091
dHB1dFVuaXRTdG9wIGZhaWxlZCB3aXRoIGVycm9yICVkICglLjRzKSIsIHRoaXMsIChpbnQpZXJy
LCAoY2hhciopJmVycik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgewotICAgICAgICBM
b2NrZXIgbG9ja2VyIHsgbV9zcGVha2VyU2FtcGxlc1Byb2R1Y2VyTG9jayB9OwotICAgICAgICBp
ZiAobV9zcGVha2VyU2FtcGxlc1Byb2R1Y2VyKQotICAgICAgICAgICAgbV9zcGVha2VyU2FtcGxl
c1Byb2R1Y2VyLT5jYXB0dXJlVW5pdEhhc1N0b3BwZWQoKTsKLSAgICB9Ci0KLSAgICBtX2lvVW5p
dFN0YXJ0ZWQgPSBmYWxzZTsKLX0KLQotT1NTdGF0dXMgQ29yZUF1ZGlvU2hhcmVkVW5pdDo6ZGVm
YXVsdElucHV0RGV2aWNlKHVpbnQzMl90KiBkZXZpY2VJRCkKLXsKLSAgICBBU1NFUlQobV9pb1Vu
aXQpOwotCi0gICAgVUludDMyIHByb3BlcnR5U2l6ZSA9IHNpemVvZigqZGV2aWNlSUQpOwotICAg
IGF1dG8gZXJyID0gUEFMOjpBdWRpb1VuaXRHZXRQcm9wZXJ0eShtX2lvVW5pdCwga0F1ZGlvT3V0
cHV0VW5pdFByb3BlcnR5X0N1cnJlbnREZXZpY2UsIGtBdWRpb1VuaXRTY29wZV9HbG9iYWwsIGlu
cHV0QnVzLCBkZXZpY2VJRCwgJnByb3BlcnR5U2l6ZSk7Ci0gICAgaWYgKGVycikKLSAgICAgICAg
UkVMRUFTRV9MT0dfRVJST1IoV2ViUlRDLCAiQ29yZUF1ZGlvU2hhcmVkVW5pdDo6ZGVmYXVsdElu
cHV0RGV2aWNlKCVwKSB1bmFibGUgdG8gZ2V0IGRlZmF1bHQgaW5wdXQgZGV2aWNlIElELCBlcnJv
ciAlZCAoJS40cykiLCB0aGlzLCAoaW50KWVyciwgKGNoYXIqKSZlcnIpOwotCi0gICAgcmV0dXJu
IGVycjsKLX0KLQotT1NTdGF0dXMgQ29yZUF1ZGlvU2hhcmVkVW5pdDo6ZGVmYXVsdE91dHB1dERl
dmljZSh1aW50MzJfdCogZGV2aWNlSUQpCi17Ci0gICAgT1NFcnIgZXJyID0gLTE7Ci0jaWYgUExB
VEZPUk0oTUFDKQotICAgIEF1ZGlvT2JqZWN0UHJvcGVydHlBZGRyZXNzIGFkZHJlc3MgPSB7Ci0g
ICAgICAgIGtBdWRpb0hhcmR3YXJlUHJvcGVydHlEZWZhdWx0T3V0cHV0RGV2aWNlLAotICAgICAg
ICBrQXVkaW9PYmplY3RQcm9wZXJ0eVNjb3BlR2xvYmFsLAotI2lmIEhBVkUoQVVESU9fT0JKRUNU
X1BST1BFUlRZX0VMRU1FTlRfTUFJTikKLSAgICAgICAga0F1ZGlvT2JqZWN0UHJvcGVydHlFbGVt
ZW50TWFpbgotI2Vsc2UKLSAgICAgICAgQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfQkVH
SU4KLSAgICAgICAga0F1ZGlvT2JqZWN0UHJvcGVydHlFbGVtZW50TWFzdGVyCi0gICAgICAgIEFM
TE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0VORAotI2VuZGlmCi0gICAgfTsKLQotICAgIGlm
IChBdWRpb09iamVjdEhhc1Byb3BlcnR5KGtBdWRpb09iamVjdFN5c3RlbU9iamVjdCwgJmFkZHJl
c3MpKSB7Ci0gICAgICAgIFVJbnQzMiBwcm9wZXJ0eVNpemUgPSBzaXplb2YoQXVkaW9EZXZpY2VJ
RCk7Ci0gICAgICAgIGVyciA9IEF1ZGlvT2JqZWN0R2V0UHJvcGVydHlEYXRhKGtBdWRpb09iamVj
dFN5c3RlbU9iamVjdCwgJmFkZHJlc3MsIDAsIG51bGxwdHIsICZwcm9wZXJ0eVNpemUsIGRldmlj
ZUlEKTsKLSAgICB9Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShkZXZpY2VJRCk7Ci0jZW5kaWYK
LSAgICByZXR1cm4gZXJyOwotfQotCi12b2lkIENvcmVBdWRpb1NoYXJlZFVuaXQ6OnJlZ2lzdGVy
U3BlYWtlclNhbXBsZXNQcm9kdWNlcihDb3JlQXVkaW9TcGVha2VyU2FtcGxlc1Byb2R1Y2VyJiBw
cm9kdWNlcikKLXsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotCi0gICAgc2V0SXNSZW5k
ZXJpbmdBdWRpbyh0cnVlKTsKLQotICAgIENvcmVBdWRpb1NwZWFrZXJTYW1wbGVzUHJvZHVjZXIq
IG9sZFByb2R1Y2VyOwotICAgIHsKLSAgICAgICAgTG9ja2VyIGxvY2tlciB7IG1fc3BlYWtlclNh
bXBsZXNQcm9kdWNlckxvY2sgfTsKLSAgICAgICAgb2xkUHJvZHVjZXIgPSBtX3NwZWFrZXJTYW1w
bGVzUHJvZHVjZXI7Ci0gICAgICAgIG1fc3BlYWtlclNhbXBsZXNQcm9kdWNlciA9ICZwcm9kdWNl
cjsKLSAgICB9Ci0gICAgaWYgKG9sZFByb2R1Y2VyICYmIG9sZFByb2R1Y2VyICE9ICZwcm9kdWNl
cikKLSAgICAgICAgb2xkUHJvZHVjZXItPmNhcHR1cmVVbml0SGFzU3RvcHBlZCgpOwotCi0gICAg
aWYgKGhhc0F1ZGlvVW5pdCgpICYmIHByb2R1Y2VyLmZvcm1hdCgpICE9IG1fc3BlYWtlclByb2NG
b3JtYXQpCi0gICAgICAgIHJlY29uZmlndXJlKCk7Ci19Ci0KLXZvaWQgQ29yZUF1ZGlvU2hhcmVk
VW5pdDo6dW5yZWdpc3RlclNwZWFrZXJTYW1wbGVzUHJvZHVjZXIoQ29yZUF1ZGlvU3BlYWtlclNh
bXBsZXNQcm9kdWNlciYgcHJvZHVjZXIpCi17Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsK
LQotICAgIHsKLSAgICAgICAgTG9ja2VyIGxvY2tlciB7IG1fc3BlYWtlclNhbXBsZXNQcm9kdWNl
ckxvY2sgfTsKLSAgICAgICAgaWYgKG1fc3BlYWtlclNhbXBsZXNQcm9kdWNlciAhPSAmcHJvZHVj
ZXIpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIG1fc3BlYWtlclNhbXBsZXNQcm9kdWNl
ciA9IG51bGxwdHI7Ci0gICAgfQotCi0gICAgc2V0SXNSZW5kZXJpbmdBdWRpbyhmYWxzZSk7Ci19
Ci0KIHN0YXRpYyBDYXB0dXJlU291cmNlT3JFcnJvciBpbml0aWFsaXplQ29yZUF1ZGlvQ2FwdHVy
ZVNvdXJjZShSZWY8Q29yZUF1ZGlvQ2FwdHVyZVNvdXJjZT4mJiBzb3VyY2UsIGNvbnN0IE1lZGlh
Q29uc3RyYWludHMqIGNvbnN0cmFpbnRzKQogewogICAgIGlmIChjb25zdHJhaW50cykgewpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0NvcmVBdWRp
b1NoYXJlZFVuaXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFj
L0NvcmVBdWRpb1NoYXJlZFVuaXQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmZjYzE2ZWY1NzY1NmNjMTgwNzY3
NDA3YjRmMTkwYTM1N2YwMDU0ZmYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQ29yZUF1ZGlvU2hhcmVkVW5pdC5jcHAKQEAgLTAsMCAr
MSw2NTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDb3JlQXVkaW9TaGFyZWRVbml0Lmgi
CisKKyNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQorCisjaW5jbHVkZSAiQXVkaW9TYW1wbGVCdWZm
ZXJMaXN0LmgiCisjaW5jbHVkZSAiQXVkaW9TZXNzaW9uLmgiCisjaW5jbHVkZSAiQ29yZUF1ZGlv
Q2FwdHVyZVNvdXJjZS5oIgorI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRlIDxBdWRpb1Rv
b2xib3gvQXVkaW9Db252ZXJ0ZXIuaD4KKyNpbmNsdWRlIDxBdWRpb1VuaXQvQXVkaW9Vbml0Lmg+
CisjaW5jbHVkZSA8Q29yZU1lZGlhL0NNU3luYy5oPgorI2luY2x1ZGUgPG1hY2gvbWFjaF90aW1l
Lmg+CisjaW5jbHVkZSA8cGFsL2F2Zm91bmRhdGlvbi9NZWRpYVRpbWVBVkZvdW5kYXRpb24uaD4K
KyNpbmNsdWRlIDxwYWwvc3BpL2NmL0NvcmVBdWRpb1NQSS5oPgorI2luY2x1ZGUgPHN5cy90aW1l
Lmg+CisjaW5jbHVkZSA8d3RmL0FsZ29yaXRobXMuaD4KKyNpbmNsdWRlIDx3dGYvTG9jay5oPgor
I2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVk
Lmg+CisjaW5jbHVkZSA8d3RmL1Njb3BlLmg+CisKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQor
I2luY2x1ZGUgIkFWQXVkaW9TZXNzaW9uQ2FwdHVyZURldmljZU1hbmFnZXIuaCIKKyNlbmRpZgor
CisjaW5jbHVkZSA8cGFsL2NmL0F1ZGlvVG9vbGJveFNvZnRMaW5rLmg+CisjaW5jbHVkZSA8cGFs
L2NmL0NvcmVNZWRpYVNvZnRMaW5rLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY29uc3Qg
VUludDMyIG91dHB1dEJ1cyA9IDA7Citjb25zdCBVSW50MzIgaW5wdXRCdXMgPSAxOworCitjbGFz
cyBDb3JlQXVkaW9TaGFyZWRJbnRlcm5hbFVuaXQgOiAgcHVibGljIENvcmVBdWRpb1NoYXJlZFVu
aXQ6OkludGVybmFsVW5pdCB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6
CisgICAgc3RhdGljIEV4cGVjdGVkPFVuaXF1ZVJlZjxJbnRlcm5hbFVuaXQ+LCBPU1N0YXR1cz4g
Y3JlYXRlKCk7CisgICAgZXhwbGljaXQgQ29yZUF1ZGlvU2hhcmVkSW50ZXJuYWxVbml0KEF1ZGlv
VW5pdCk7CisgICAgfkNvcmVBdWRpb1NoYXJlZEludGVybmFsVW5pdCgpIGZpbmFsOworCitwcml2
YXRlOgorICAgIE9TU3RhdHVzIGluaXRpYWxpemUoKSBmaW5hbDsKKyAgICBPU1N0YXR1cyB1bmlu
aXRpYWxpemUoKSBmaW5hbDsKKyAgICBPU1N0YXR1cyBzdGFydCgpIGZpbmFsOworICAgIE9TU3Rh
dHVzIHN0b3AoKSBmaW5hbDsKKyAgICBPU1N0YXR1cyBzZXQoQXVkaW9Vbml0UHJvcGVydHlJRCwg
QXVkaW9Vbml0U2NvcGUsIEF1ZGlvVW5pdEVsZW1lbnQsIGNvbnN0IHZvaWQqLCBVSW50MzIpIGZp
bmFsOworICAgIE9TU3RhdHVzIGdldChBdWRpb1VuaXRQcm9wZXJ0eUlELCBBdWRpb1VuaXRTY29w
ZSwgQXVkaW9Vbml0RWxlbWVudCwgdm9pZCosIFVJbnQzMiopIGZpbmFsOworICAgIE9TU3RhdHVz
IHJlbmRlcihBdWRpb1VuaXRSZW5kZXJBY3Rpb25GbGFncyosIGNvbnN0IEF1ZGlvVGltZVN0YW1w
KiwgVUludDMyLCBVSW50MzIsIEF1ZGlvQnVmZmVyTGlzdCopIGZpbmFsOworICAgIE9TU3RhdHVz
IGRlZmF1bHRJbnB1dERldmljZSh1aW50MzJfdCopIGZpbmFsOworICAgIE9TU3RhdHVzIGRlZmF1
bHRPdXRwdXREZXZpY2UodWludDMyX3QqKSBmaW5hbDsKKworICAgIEF1ZGlvVW5pdCBtX2lvVW5p
dCB7IG51bGxwdHIgfTsKK307CisKK0V4cGVjdGVkPFVuaXF1ZVJlZjxDb3JlQXVkaW9TaGFyZWRV
bml0OjpJbnRlcm5hbFVuaXQ+LCBPU1N0YXR1cz4gQ29yZUF1ZGlvU2hhcmVkSW50ZXJuYWxVbml0
OjpjcmVhdGUoKQoreworICAgIEF1ZGlvQ29tcG9uZW50RGVzY3JpcHRpb24gaW9Vbml0RGVzY3Jp
cHRpb24gPSB7IGtBdWRpb1VuaXRUeXBlX091dHB1dCwga0F1ZGlvVW5pdFN1YlR5cGVfVm9pY2VQ
cm9jZXNzaW5nSU8sIGtBdWRpb1VuaXRNYW51ZmFjdHVyZXJfQXBwbGUsIDAsIDAgfTsKKyAgICBB
dWRpb0NvbXBvbmVudCBpb0NvbXBvbmVudCA9IFBBTDo6QXVkaW9Db21wb25lbnRGaW5kTmV4dChu
dWxscHRyLCAmaW9Vbml0RGVzY3JpcHRpb24pOworICAgIEFTU0VSVChpb0NvbXBvbmVudCk7Cisg
ICAgaWYgKCFpb0NvbXBvbmVudCkgeworICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihXZWJSVEMs
ICJDb3JlQXVkaW9TaGFyZWRJbnRlcm5hbFVuaXQgdW5hYmxlIHRvIGZpbmQgdnBpbyB1bml0IGNv
bXBvbmVudCIpOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoLTEpOworICAgIH0KKwor
I2lmICFMT0dfRElTQUJMRUQKKyAgICBDRlN0cmluZ1JlZiBuYW1lID0gbnVsbHB0cjsKKyAgICBQ
QUw6OkF1ZGlvQ29tcG9uZW50Q29weU5hbWUoaW9Db21wb25lbnQsICZuYW1lKTsKKyAgICBpZiAo
bmFtZSkgeworICAgICAgICBTdHJpbmcgaW9Vbml0TmFtZSA9IG5hbWU7CisgICAgICAgIENGUmVs
ZWFzZShuYW1lKTsKKyAgICAgICAgUkVMRUFTRV9MT0coV2ViUlRDLCAiQ29yZUF1ZGlvU2hhcmVk
SW50ZXJuYWxVbml0IGNyZWF0ZWQgXCIle3ByaXZhdGV9c1wiIGNvbXBvbmVudCIsIGlvVW5pdE5h
bWUudXRmOCgpLmRhdGEoKSk7CisgICAgfQorI2VuZGlmCisKKyAgICBBdWRpb1VuaXQgaW9Vbml0
OworICAgIGF1dG8gZXJyID0gUEFMOjpBdWRpb0NvbXBvbmVudEluc3RhbmNlTmV3KGlvQ29tcG9u
ZW50LCAmaW9Vbml0KTsKKyAgICBpZiAoZXJyKSB7CisgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9S
KFdlYlJUQywgIkNvcmVBdWRpb1NoYXJlZEludGVybmFsVW5pdCB1bmFibGUgdG8gb3BlbiB2cGlv
IHVuaXQsIGVycm9yICVkICglLjRzKSIsIChpbnQpZXJyLCAoY2hhciopJmVycik7CisgICAgICAg
IHJldHVybiBtYWtlVW5leHBlY3RlZChlcnIpOworICAgIH0KKworICAgIFJFTEVBU0VfTE9HKFdl
YlJUQywgIlN1Y2Nlc3NmdWxseSBjcmVhdGVkIGEgQ29yZUF1ZGlvU2hhcmVkSW50ZXJuYWxVbml0
Iik7CisKKyAgICBVbmlxdWVSZWY8Q29yZUF1ZGlvU2hhcmVkVW5pdDo6SW50ZXJuYWxVbml0PiBy
ZXN1bHQgPSBtYWtlVW5pcXVlUmVmPENvcmVBdWRpb1NoYXJlZEludGVybmFsVW5pdD4oaW9Vbml0
KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitDb3JlQXVkaW9TaGFyZWRJbnRlcm5hbFVuaXQ6
OkNvcmVBdWRpb1NoYXJlZEludGVybmFsVW5pdChBdWRpb1VuaXQgaW9Vbml0KQorICAgIDogbV9p
b1VuaXQoaW9Vbml0KQoreworfQorCitDb3JlQXVkaW9TaGFyZWRJbnRlcm5hbFVuaXQ6On5Db3Jl
QXVkaW9TaGFyZWRJbnRlcm5hbFVuaXQoKQoreworICAgIFBBTDo6QXVkaW9Db21wb25lbnRJbnN0
YW5jZURpc3Bvc2UobV9pb1VuaXQpOworfQorCitPU1N0YXR1cyBDb3JlQXVkaW9TaGFyZWRJbnRl
cm5hbFVuaXQ6OmluaXRpYWxpemUoKQoreworICAgIHJldHVybiBQQUw6OkF1ZGlvVW5pdEluaXRp
YWxpemUobV9pb1VuaXQpOworfQorCitPU1N0YXR1cyBDb3JlQXVkaW9TaGFyZWRJbnRlcm5hbFVu
aXQ6OnVuaW5pdGlhbGl6ZSgpCit7CisgICAgcmV0dXJuIEF1ZGlvVW5pdFVuaW5pdGlhbGl6ZSht
X2lvVW5pdCk7Cit9CisKK09TU3RhdHVzIENvcmVBdWRpb1NoYXJlZEludGVybmFsVW5pdDo6c3Rh
cnQoKQoreworICAgIHJldHVybiBQQUw6OkF1ZGlvT3V0cHV0VW5pdFN0YXJ0KG1faW9Vbml0KTsK
K30KKworT1NTdGF0dXMgQ29yZUF1ZGlvU2hhcmVkSW50ZXJuYWxVbml0OjpzdG9wKCkKK3sKKyAg
ICByZXR1cm4gUEFMOjpBdWRpb091dHB1dFVuaXRTdG9wKG1faW9Vbml0KTsKK30KKworT1NTdGF0
dXMgQ29yZUF1ZGlvU2hhcmVkSW50ZXJuYWxVbml0OjpzZXQoQXVkaW9Vbml0UHJvcGVydHlJRCBw
cm9wZXJ0eUlELCBBdWRpb1VuaXRTY29wZSBzY29wZSwgQXVkaW9Vbml0RWxlbWVudCBlbGVtZW50
LCBjb25zdCB2b2lkKiB2YWx1ZSwgVUludDMyIHNpemUpCit7CisgICAgcmV0dXJuIFBBTDo6QXVk
aW9Vbml0U2V0UHJvcGVydHkobV9pb1VuaXQsIHByb3BlcnR5SUQsIHNjb3BlLCBlbGVtZW50LCAm
dmFsdWUsIHNpemUpOworfQorCitPU1N0YXR1cyBDb3JlQXVkaW9TaGFyZWRJbnRlcm5hbFVuaXQ6
OmdldChBdWRpb1VuaXRQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIEF1ZGlvVW5pdFNjb3BlIHNjb3Bl
LCBBdWRpb1VuaXRFbGVtZW50IGVsZW1lbnQsIHZvaWQqIHZhbHVlLCBVSW50MzIqIHNpemUpCit7
CisgICAgcmV0dXJuIFBBTDo6QXVkaW9Vbml0R2V0UHJvcGVydHkobV9pb1VuaXQsIHByb3BlcnR5
SUQsIHNjb3BlLCBlbGVtZW50LCB2YWx1ZSwgc2l6ZSk7Cit9CisKK09TU3RhdHVzIENvcmVBdWRp
b1NoYXJlZEludGVybmFsVW5pdDo6cmVuZGVyKEF1ZGlvVW5pdFJlbmRlckFjdGlvbkZsYWdzKiBp
b0FjdGlvbkZsYWdzLCBjb25zdCBBdWRpb1RpbWVTdGFtcCogaW5UaW1lU3RhbXAsIFVJbnQzMiBp
bk91dHB1dEJ1c051bWJlciwgVUludDMyIGluTnVtYmVyRnJhbWVzLCBBdWRpb0J1ZmZlckxpc3Qq
IGxpc3QpCit7CisgICAgcmV0dXJuIEF1ZGlvVW5pdFJlbmRlcihtX2lvVW5pdCwgaW9BY3Rpb25G
bGFncywgaW5UaW1lU3RhbXAsIGluT3V0cHV0QnVzTnVtYmVyLCBpbk51bWJlckZyYW1lcywgbGlz
dCk7Cit9CisKK09TU3RhdHVzIENvcmVBdWRpb1NoYXJlZEludGVybmFsVW5pdDo6ZGVmYXVsdElu
cHV0RGV2aWNlKHVpbnQzMl90KiBkZXZpY2VJRCkKK3sKKyNpZiBQTEFURk9STShNQUMpCisgICAg
VUludDMyIHByb3BlcnR5U2l6ZSA9IHNpemVvZigqZGV2aWNlSUQpOworICAgIGF1dG8gZXJyID0g
Z2V0KGtBdWRpb091dHB1dFVuaXRQcm9wZXJ0eV9DdXJyZW50RGV2aWNlLCBrQXVkaW9Vbml0U2Nv
cGVfR2xvYmFsLCBpbnB1dEJ1cywgZGV2aWNlSUQsICZwcm9wZXJ0eVNpemUpOworICAgIFJFTEVB
U0VfTE9HX0VSUk9SX0lGKGVyciwgV2ViUlRDLCAiQ29yZUF1ZGlvU2hhcmVkSW50ZXJuYWxVbml0
IHVuYWJsZSB0byBnZXQgZGVmYXVsdCBpbnB1dCBkZXZpY2UgSUQsIGVycm9yICVkICglLjRzKSIs
IChpbnQpZXJyLCAoY2hhciopJmVycik7CisgICAgcmV0dXJuIGVycjsKKyNlbHNlCisgICAgcmV0
dXJuIC0xOworI2VuZGlmCit9CisKK09TU3RhdHVzIENvcmVBdWRpb1NoYXJlZEludGVybmFsVW5p
dDo6ZGVmYXVsdE91dHB1dERldmljZSh1aW50MzJfdCogZGV2aWNlSUQpCit7CisjaWYgUExBVEZP
Uk0oTUFDKQorICAgIEF1ZGlvT2JqZWN0UHJvcGVydHlBZGRyZXNzIGFkZHJlc3MgPSB7CisgICAg
ICAgIGtBdWRpb0hhcmR3YXJlUHJvcGVydHlEZWZhdWx0T3V0cHV0RGV2aWNlLAorICAgICAgICBr
QXVkaW9PYmplY3RQcm9wZXJ0eVNjb3BlR2xvYmFsLAorI2lmIEhBVkUoQVVESU9fT0JKRUNUX1BS
T1BFUlRZX0VMRU1FTlRfTUFJTikKKyAgICAgICAga0F1ZGlvT2JqZWN0UHJvcGVydHlFbGVtZW50
TWFpbgorI2Vsc2UKKyAgICAgICAgQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfQkVHSU4K
KyAgICAgICAga0F1ZGlvT2JqZWN0UHJvcGVydHlFbGVtZW50TWFzdGVyCisgICAgICAgIEFMTE9X
X0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0VORAorI2VuZGlmCisgICAgfTsKKworICAgIGlmIChB
dWRpb09iamVjdEhhc1Byb3BlcnR5KGtBdWRpb09iamVjdFN5c3RlbU9iamVjdCwgJmFkZHJlc3Mp
KSB7CisgICAgICAgIFVJbnQzMiBwcm9wZXJ0eVNpemUgPSBzaXplb2YoQXVkaW9EZXZpY2VJRCk7
CisgICAgICAgIHJldHVybiBBdWRpb09iamVjdEdldFByb3BlcnR5RGF0YShrQXVkaW9PYmplY3RT
eXN0ZW1PYmplY3QsICZhZGRyZXNzLCAwLCBudWxscHRyLCAmcHJvcGVydHlTaXplLCBkZXZpY2VJ
RCk7CisgICAgfQorI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oZGV2aWNlSUQpOworI2VuZGlmCisg
ICAgcmV0dXJuIC0xOworfQorCitDb3JlQXVkaW9TaGFyZWRVbml0JiBDb3JlQXVkaW9TaGFyZWRV
bml0Ojp1bml0KCkKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Q29yZUF1ZGlvU2hhcmVk
VW5pdD4gc2luZ2xldG9uOworICAgIHJldHVybiBzaW5nbGV0b247Cit9CisKK0NvcmVBdWRpb1No
YXJlZFVuaXQ6OkNvcmVBdWRpb1NoYXJlZFVuaXQoKQorICAgIDogbV9zYW1wbGVSYXRlQ2FwYWJp
bGl0aWVzKDgwMDAsIDk2MDAwKQorICAgICwgbV92ZXJpZnlDYXB0dXJpbmdUaW1lcigqdGhpcywg
JkNvcmVBdWRpb1NoYXJlZFVuaXQ6OnZlcmlmeUlzQ2FwdHVyaW5nKQoreworfQorCit2b2lkIENv
cmVBdWRpb1NoYXJlZFVuaXQ6OnJlc2V0U2FtcGxlUmF0ZSgpCit7CisgICAgc2V0U2FtcGxlUmF0
ZShtX2dldFNhbXBsZVJhdGVDYWxsYmFjayA/IG1fZ2V0U2FtcGxlUmF0ZUNhbGxiYWNrKCkgOiBB
dWRpb1Nlc3Npb246OnNoYXJlZFNlc3Npb24oKS5zYW1wbGVSYXRlKCkpOworfQorCit2b2lkIENv
cmVBdWRpb1NoYXJlZFVuaXQ6OmNhcHR1cmVEZXZpY2VDaGFuZ2VkKCkKK3sKKyNpZiBQTEFURk9S
TShNQUMpCisgICAgcmVjb25maWd1cmVBdWRpb1VuaXQoKTsKKyNlbHNlCisgICAgQVZBdWRpb1Nl
c3Npb25DYXB0dXJlRGV2aWNlTWFuYWdlcjo6c2luZ2xldG9uKCkuc2V0UHJlZmVycmVkQXVkaW9T
ZXNzaW9uRGV2aWNlVUlEKHBlcnNpc3RlbnRJRCgpKTsKKyNlbmRpZgorfQorCitzaXplX3QgQ29y
ZUF1ZGlvU2hhcmVkVW5pdDo6cHJlZmVycmVkSU9CdWZmZXJTaXplKCkKK3sKKyAgICByZXR1cm4g
QXVkaW9TZXNzaW9uOjpzaGFyZWRTZXNzaW9uKCkuYnVmZmVyU2l6ZSgpOworfQorCitPU1N0YXR1
cyBDb3JlQXVkaW9TaGFyZWRVbml0OjpzZXR1cEF1ZGlvVW5pdCgpCit7CisgICAgaWYgKG1faW9V
bml0KQorICAgICAgICByZXR1cm4gMDsKKworICAgIEFTU0VSVChoYXNDbGllbnRzKCkpOworCisg
ICAgbWFjaF90aW1lYmFzZV9pbmZvX2RhdGFfdCB0aW1lYmFzZUluZm87CisgICAgbWFjaF90aW1l
YmFzZV9pbmZvKCZ0aW1lYmFzZUluZm8pOworICAgIG1fRFRTQ29udmVyc2lvblJhdGlvID0gMWUt
OSAqIHN0YXRpY19jYXN0PGRvdWJsZT4odGltZWJhc2VJbmZvLm51bWVyKSAvIHN0YXRpY19jYXN0
PGRvdWJsZT4odGltZWJhc2VJbmZvLmRlbm9tKTsKKworICAgIGF1dG8gcmVzdWx0ID0gbV9jcmVh
dGlvbkNhbGxiYWNrID8gbV9jcmVhdGlvbkNhbGxiYWNrKCkgOiBDb3JlQXVkaW9TaGFyZWRJbnRl
cm5hbFVuaXQ6OmNyZWF0ZSgpOworICAgIGlmICghcmVzdWx0Lmhhc192YWx1ZSgpKQorICAgICAg
ICByZXR1cm4gcmVzdWx0LmVycm9yKCk7CisKKyAgICBtX2lvVW5pdCA9IFdURk1vdmUocmVzdWx0
LnZhbHVlKCkpLm1vdmVUb1VuaXF1ZVB0cigpOworICAgIGlmICghZW5hYmxlRWNob0NhbmNlbGxh
dGlvbigpKSB7CisgICAgICAgIHVpbnQzMl90IHBhcmFtID0gMDsKKyAgICAgICAgaWYgKGF1dG8g
ZXJyID0gbV9pb1VuaXQtPnNldChrQVVWb2ljZUlPUHJvcGVydHlfVm9pY2VQcm9jZXNzaW5nRW5h
YmxlQUdDLCBrQXVkaW9Vbml0U2NvcGVfR2xvYmFsLCBpbnB1dEJ1cywgJnBhcmFtLCBzaXplb2Yo
cGFyYW0pKSkgeworICAgICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoV2ViUlRDLCAiQ29yZUF1
ZGlvU2hhcmVkVW5pdDo6c2V0dXBBdWRpb1VuaXQoJXApIHVuYWJsZSB0byBzZXQgdnBpbyBhdXRv
bWF0aWMgZ2FpbiBjb250cm9sLCBlcnJvciAlZCAoJS40cykiLCB0aGlzLCAoaW50KWVyciwgKGNo
YXIqKSZlcnIpOworICAgICAgICAgICAgcmV0dXJuIGVycjsKKyAgICAgICAgfQorICAgICAgICBw
YXJhbSA9IDE7CisgICAgICAgIGlmIChhdXRvIGVyciA9IG1faW9Vbml0LT5zZXQoa0FVVm9pY2VJ
T1Byb3BlcnR5X0J5cGFzc1ZvaWNlUHJvY2Vzc2luZywga0F1ZGlvVW5pdFNjb3BlX0dsb2JhbCwg
aW5wdXRCdXMsICZwYXJhbSwgc2l6ZW9mKHBhcmFtKSkpIHsKKyAgICAgICAgICAgIFJFTEVBU0Vf
TE9HX0VSUk9SKFdlYlJUQywgIkNvcmVBdWRpb1NoYXJlZFVuaXQ6OnNldHVwQXVkaW9Vbml0KCVw
KSB1bmFibGUgdG8gc2V0IHZwaW8gdW5pdCBlY2hvIGNhbmNlbGxhdGlvbiwgZXJyb3IgJWQgKCUu
NHMpIiwgdGhpcywgKGludCllcnIsIChjaGFyKikmZXJyKTsKKyAgICAgICAgICAgIHJldHVybiBl
cnI7CisgICAgICAgIH0KKyAgICB9CisKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorICAgIHVp
bnQzMl90IHBhcmFtID0gMTsKKyAgICBpZiAoYXV0byBlcnIgPSBtX2lvVW5pdC0+c2V0KGtBdWRp
b091dHB1dFVuaXRQcm9wZXJ0eV9FbmFibGVJTywga0F1ZGlvVW5pdFNjb3BlX0lucHV0LCBpbnB1
dEJ1cywgJnBhcmFtLCBzaXplb2YocGFyYW0pKSkgeworICAgICAgICBSRUxFQVNFX0xPR19FUlJP
UihXZWJSVEMsICJDb3JlQXVkaW9TaGFyZWRVbml0OjpzZXR1cEF1ZGlvVW5pdCglcCkgdW5hYmxl
IHRvIGVuYWJsZSB2cGlvIHVuaXQgaW5wdXQsIGVycm9yICVkICglLjRzKSIsIHRoaXMsIChpbnQp
ZXJyLCAoY2hhciopJmVycik7CisgICAgICAgIHJldHVybiBlcnI7CisgICAgfQorI2Vsc2UKKyAg
ICBhdXRvIGRldmljZUlEID0gY2FwdHVyZURldmljZUlEKCk7CisgICAgLy8gRklYTUU6IFdlIHBy
b2JhYmx5IHdhbnQgdG8gbWFrZSBkZWZhdWx0IGlucHV0L291dHB1dCBkZXZpY2VzLgorICAgIGlm
ICghZGV2aWNlSUQpIHsKKyAgICAgICAgaWYgKGF1dG8gZXJyID0gbV9pb1VuaXQtPmRlZmF1bHRJ
bnB1dERldmljZSgmZGV2aWNlSUQpKQorICAgICAgICAgICAgcmV0dXJuIGVycjsKKyAgICB9CisK
KyAgICBpZiAoYXV0byBlcnIgPSBtX2lvVW5pdC0+c2V0KGtBdWRpb091dHB1dFVuaXRQcm9wZXJ0
eV9DdXJyZW50RGV2aWNlLCBrQXVkaW9Vbml0U2NvcGVfR2xvYmFsLCBpbnB1dEJ1cywgJmRldmlj
ZUlELCBzaXplb2YoZGV2aWNlSUQpKSkgeworICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihXZWJS
VEMsICJDb3JlQXVkaW9TaGFyZWRVbml0OjpzZXR1cEF1ZGlvVW5pdCglcCkgdW5hYmxlIHRvIHNl
dCB2cGlvIHVuaXQgY2FwdHVyZSBkZXZpY2UgSUQgJWQsIGVycm9yICVkICglLjRzKSIsIHRoaXMs
IChpbnQpZGV2aWNlSUQsIChpbnQpZXJyLCAoY2hhciopJmVycik7CisgICAgICAgIHJldHVybiBl
cnI7CisgICAgfQorCisgICAgdWludDMyX3QgZGVmYXVsdE91dHB1dERldmljZUlEOworICAgIGF1
dG8gZXJyID0gbV9pb1VuaXQtPmRlZmF1bHRPdXRwdXREZXZpY2UoJmRlZmF1bHRPdXRwdXREZXZp
Y2VJRCk7CisgICAgaWYgKCFlcnIpIHsKKyAgICAgICAgZXJyID0gbV9pb1VuaXQtPnNldChrQXVk
aW9PdXRwdXRVbml0UHJvcGVydHlfQ3VycmVudERldmljZSwga0F1ZGlvVW5pdFNjb3BlX0dsb2Jh
bCwgb3V0cHV0QnVzLCAmZGVmYXVsdE91dHB1dERldmljZUlELCBzaXplb2YoZGVmYXVsdE91dHB1
dERldmljZUlEKSk7CisgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SX0lGKGVyciwgV2ViUlRDLCAi
Q29yZUF1ZGlvU2hhcmVkVW5pdDo6c2V0dXBBdWRpb1VuaXQoJXApIHVuYWJsZSB0byBzZXQgdnBp
byB1bml0IG91dHB1dCBkZXZpY2UgSUQgJWQsIGVycm9yICVkICglLjRzKSIsIHRoaXMsIChpbnQp
ZGVmYXVsdE91dHB1dERldmljZUlELCAoaW50KWVyciwgKGNoYXIqKSZlcnIpOworICAgIH0KKyAg
ICBzZXRPdXRwdXREZXZpY2VJRCghZXJyID8gZGVmYXVsdE91dHB1dERldmljZUlEIDogMCk7Cisj
ZW5kaWYKKworICAgIC8vIEZJWE1FOiBBZGQgc3VwcG9ydCBmb3IgZGlmZmVyZW50IHNwZWFrZXIv
bWljcm9waG9uZSBzYW1wbGUgcmF0ZXMuCisgICAgaW50IGFjdHVhbFNhbXBsZVJhdGUgPSB0aGlz
LT5hY3R1YWxTYW1wbGVSYXRlKCk7CisgICAgaWYgKGF1dG8gZXJyID0gY29uZmlndXJlTWljcm9w
aG9uZVByb2MoYWN0dWFsU2FtcGxlUmF0ZSkpCisgICAgICAgIHJldHVybiBlcnI7CisKKyAgICBp
ZiAoYXV0byBlcnIgPSBjb25maWd1cmVTcGVha2VyUHJvYyhhY3R1YWxTYW1wbGVSYXRlKSkKKyAg
ICAgICAgcmV0dXJuIGVycjsKKworICAgIGlmIChhdXRvIGVyciA9IG1faW9Vbml0LT5pbml0aWFs
aXplKCkpIHsKKyAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoV2ViUlRDLCAiQ29yZUF1ZGlvU2hh
cmVkVW5pdDo6c2V0dXBBdWRpb1VuaXQoJXApIEF1ZGlvVW5pdEluaXRpYWxpemUoKSBmYWlsZWQs
IGVycm9yICVkICglLjRzKSIsIHRoaXMsIChpbnQpZXJyLCAoY2hhciopJmVycik7CisgICAgICAg
IHJldHVybiBlcnI7CisgICAgfQorICAgIG1faW9Vbml0SW5pdGlhbGl6ZWQgPSB0cnVlOworCisg
ICAgdW5kdWNrKCk7CisKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBDb3JlQXVkaW9TaGFyZWRV
bml0Ojp1bmR1Y2soKQoreworICAgIHVpbnQzMl90IG91dHB1dERldmljZTsKKyAgICBpZiAobV9p
b1VuaXQgJiYgIW1faW9Vbml0LT5kZWZhdWx0T3V0cHV0RGV2aWNlKCZvdXRwdXREZXZpY2UpKQor
ICAgICAgICBBdWRpb0RldmljZUR1Y2sob3V0cHV0RGV2aWNlLCAxLjAsIG51bGxwdHIsIDApOwor
fQorCitpbnQgQ29yZUF1ZGlvU2hhcmVkVW5pdDo6YWN0dWFsU2FtcGxlUmF0ZSgpIGNvbnN0Cit7
CisgICAgTG9ja2VyIGxvY2tlciB7IG1fc3BlYWtlclNhbXBsZXNQcm9kdWNlckxvY2sgfTsKKyAg
ICByZXR1cm4gbV9zcGVha2VyU2FtcGxlc1Byb2R1Y2VyID8gbV9zcGVha2VyU2FtcGxlc1Byb2R1
Y2VyLT5mb3JtYXQoKS5zdHJlYW1EZXNjcmlwdGlvbigpLm1TYW1wbGVSYXRlIDogc2FtcGxlUmF0
ZSgpOworfQorCitPU1N0YXR1cyBDb3JlQXVkaW9TaGFyZWRVbml0Ojpjb25maWd1cmVNaWNyb3Bo
b25lUHJvYyhpbnQgc2FtcGxlUmF0ZSkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwor
CisgICAgQVVSZW5kZXJDYWxsYmFja1N0cnVjdCBjYWxsYmFjayA9IHsgbWljcm9waG9uZUNhbGxi
YWNrLCB0aGlzIH07CisgICAgaWYgKGF1dG8gZXJyID0gbV9pb1VuaXQtPnNldChrQXVkaW9PdXRw
dXRVbml0UHJvcGVydHlfU2V0SW5wdXRDYWxsYmFjaywga0F1ZGlvVW5pdFNjb3BlX0dsb2JhbCwg
aW5wdXRCdXMsICZjYWxsYmFjaywgc2l6ZW9mKGNhbGxiYWNrKSkpIHsKKyAgICAgICAgUkVMRUFT
RV9MT0dfRVJST1IoV2ViUlRDLCAiQ29yZUF1ZGlvU2hhcmVkVW5pdDo6Y29uZmlndXJlTWljcm9w
aG9uZVByb2MoJXApIHVuYWJsZSB0byBzZXQgdnBpbyB1bml0IG1pYyBwcm9jLCBlcnJvciAlZCAo
JS40cykiLCB0aGlzLCAoaW50KWVyciwgKGNoYXIqKSZlcnIpOworICAgICAgICByZXR1cm4gZXJy
OworICAgIH0KKworICAgIEF1ZGlvU3RyZWFtQmFzaWNEZXNjcmlwdGlvbiBtaWNyb3Bob25lUHJv
Y0Zvcm1hdCA9IHsgfTsKKworICAgIFVJbnQzMiBzaXplID0gc2l6ZW9mKG1pY3JvcGhvbmVQcm9j
Rm9ybWF0KTsKKyAgICBpZiAoYXV0byBlcnIgPSBtX2lvVW5pdC0+Z2V0KGtBdWRpb1VuaXRQcm9w
ZXJ0eV9TdHJlYW1Gb3JtYXQsIGtBdWRpb1VuaXRTY29wZV9PdXRwdXQsIGlucHV0QnVzLCAmbWlj
cm9waG9uZVByb2NGb3JtYXQsICZzaXplKSkgeworICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihX
ZWJSVEMsICJDb3JlQXVkaW9TaGFyZWRVbml0Ojpjb25maWd1cmVNaWNyb3Bob25lUHJvYyglcCkg
dW5hYmxlIHRvIGdldCBvdXRwdXQgc3RyZWFtIGZvcm1hdCwgZXJyb3IgJWQgKCUuNHMpIiwgdGhp
cywgKGludCllcnIsIChjaGFyKikmZXJyKTsKKyAgICAgICAgcmV0dXJuIGVycjsKKyAgICB9CisK
KyAgICBtaWNyb3Bob25lUHJvY0Zvcm1hdC5tU2FtcGxlUmF0ZSA9IHNhbXBsZVJhdGU7CisgICAg
aWYgKGF1dG8gZXJyID0gbV9pb1VuaXQtPnNldChrQXVkaW9Vbml0UHJvcGVydHlfU3RyZWFtRm9y
bWF0LCBrQXVkaW9Vbml0U2NvcGVfT3V0cHV0LCBpbnB1dEJ1cywgJm1pY3JvcGhvbmVQcm9jRm9y
bWF0LCBzaXplKSkgeworICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihXZWJSVEMsICJDb3JlQXVk
aW9TaGFyZWRVbml0Ojpjb25maWd1cmVNaWNyb3Bob25lUHJvYyglcCkgdW5hYmxlIHRvIHNldCBv
dXRwdXQgc3RyZWFtIGZvcm1hdCwgZXJyb3IgJWQgKCUuNHMpIiwgdGhpcywgKGludCllcnIsIChj
aGFyKikmZXJyKTsKKyAgICAgICAgcmV0dXJuIGVycjsKKyAgICB9CisKKyAgICBtX21pY3JvcGhv
bmVTYW1wbGVCdWZmZXIgPSBBdWRpb1NhbXBsZUJ1ZmZlckxpc3Q6OmNyZWF0ZShtaWNyb3Bob25l
UHJvY0Zvcm1hdCwgcHJlZmVycmVkSU9CdWZmZXJTaXplKCkgKiAyKTsKKyAgICBtX21pY3JvcGhv
bmVQcm9jRm9ybWF0ID0gbWljcm9waG9uZVByb2NGb3JtYXQ7CisKKyAgICByZXR1cm4gbm9FcnI7
Cit9CisKK09TU3RhdHVzIENvcmVBdWRpb1NoYXJlZFVuaXQ6OmNvbmZpZ3VyZVNwZWFrZXJQcm9j
KGludCBzYW1wbGVSYXRlKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisKKyAgICBB
VVJlbmRlckNhbGxiYWNrU3RydWN0IGNhbGxiYWNrID0geyBzcGVha2VyQ2FsbGJhY2ssIHRoaXMg
fTsKKyAgICBpZiAoYXV0byBlcnIgPSBtX2lvVW5pdC0+c2V0KGtBdWRpb1VuaXRQcm9wZXJ0eV9T
ZXRSZW5kZXJDYWxsYmFjaywga0F1ZGlvVW5pdFNjb3BlX0lucHV0LCBvdXRwdXRCdXMsICZjYWxs
YmFjaywgc2l6ZW9mKGNhbGxiYWNrKSkpIHsKKyAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoV2Vi
UlRDLCAiQ29yZUF1ZGlvU2hhcmVkVW5pdDo6Y29uZmlndXJlU3BlYWtlclByb2MoJXApIHVuYWJs
ZSB0byBzZXQgdnBpbyB1bml0IHNwZWFrZXIgcHJvYywgZXJyb3IgJWQgKCUuNHMpIiwgdGhpcywg
KGludCllcnIsIChjaGFyKikmZXJyKTsKKyAgICAgICAgcmV0dXJuIGVycjsKKyAgICB9CisKKyAg
ICBBdWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRpb24gc3BlYWtlclByb2NGb3JtYXQ7CisgICAgVUlu
dDMyIHNpemUgPSBzaXplb2Yoc3BlYWtlclByb2NGb3JtYXQpOworICAgIHsKKyAgICAgICAgTG9j
a2VyIGxvY2tlciB7IG1fc3BlYWtlclNhbXBsZXNQcm9kdWNlckxvY2sgfTsKKyAgICAgICAgaWYg
KG1fc3BlYWtlclNhbXBsZXNQcm9kdWNlcikgeworICAgICAgICAgICAgc3BlYWtlclByb2NGb3Jt
YXQgPSBtX3NwZWFrZXJTYW1wbGVzUHJvZHVjZXItPmZvcm1hdCgpLnN0cmVhbURlc2NyaXB0aW9u
KCk7CisgICAgICAgICAgICBBU1NFUlQoc3BlYWtlclByb2NGb3JtYXQubVNhbXBsZVJhdGUgPT0g
c2FtcGxlUmF0ZSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAoYXV0byBlcnIg
PSBtX2lvVW5pdC0+Z2V0KGtBdWRpb1VuaXRQcm9wZXJ0eV9TdHJlYW1Gb3JtYXQsIGtBdWRpb1Vu
aXRTY29wZV9JbnB1dCwgb3V0cHV0QnVzLCAmc3BlYWtlclByb2NGb3JtYXQsICZzaXplKSkgewor
ICAgICAgICAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFdlYlJUQywgIkNvcmVBdWRpb1NoYXJl
ZFVuaXQ6OmNvbmZpZ3VyZVNwZWFrZXJQcm9jKCVwKSB1bmFibGUgdG8gZ2V0IGlucHV0IHN0cmVh
bSBmb3JtYXQsIGVycm9yICVkICglLjRzKSIsIHRoaXMsIChpbnQpZXJyLCAoY2hhciopJmVycik7
CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgIH0KKyAgICBzcGVha2VyUHJvY0Zvcm1hdC5tU2FtcGxlUmF0ZSA9IHNhbXBsZVJhdGU7CisK
KyAgICBpZiAoYXV0byBlcnIgPSBtX2lvVW5pdC0+c2V0KGtBdWRpb1VuaXRQcm9wZXJ0eV9TdHJl
YW1Gb3JtYXQsIGtBdWRpb1VuaXRTY29wZV9JbnB1dCwgb3V0cHV0QnVzLCAmc3BlYWtlclByb2NG
b3JtYXQsIHNpemUpKSB7CisgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFdlYlJUQywgIkNvcmVB
dWRpb1NoYXJlZFVuaXQ6OmNvbmZpZ3VyZVNwZWFrZXJQcm9jKCVwKSB1bmFibGUgdG8gZ2V0IGlu
cHV0IHN0cmVhbSBmb3JtYXQsIGVycm9yICVkICglLjRzKSIsIHRoaXMsIChpbnQpZXJyLCAoY2hh
ciopJmVycik7CisgICAgICAgIHJldHVybiBlcnI7CisgICAgfQorCisgICAgbV9zcGVha2VyUHJv
Y0Zvcm1hdCA9IHNwZWFrZXJQcm9jRm9ybWF0OworCisgICAgcmV0dXJuIG5vRXJyOworfQorCisj
aWYgIUxPR19ESVNBQkxFRAordm9pZCBDb3JlQXVkaW9TaGFyZWRVbml0OjpjaGVja1RpbWVzdGFt
cHMoY29uc3QgQXVkaW9UaW1lU3RhbXAmIHRpbWVTdGFtcCwgdWludDY0X3Qgc2FtcGxlVGltZSwg
ZG91YmxlIGhvc3RUaW1lKQoreworICAgIGlmICghdGltZVN0YW1wLm1TYW1wbGVUaW1lIHx8IHNh
bXBsZVRpbWUgPT0gbV9sYXRlc3RNaWNUaW1lU3RhbXAgfHwgIWhvc3RUaW1lKQorICAgICAgICBS
RUxFQVNFX0xPR19FUlJPUihXZWJSVEMsICJDb3JlQXVkaW9TaGFyZWRVbml0OjpjaGVja1RpbWVz
dGFtcHM6IHVudXN1YWwgdGltZXN0YW1wcywgc2FtcGxlIHRpbWUgPSAlbGxkLCBwcmV2aW91cyBz
YW1wbGUgdGltZSA9ICVsbGQsIGhvc3RUaW1lICVmIiwgc2FtcGxlVGltZSwgbV9sYXRlc3RNaWNU
aW1lU3RhbXAsIGhvc3RUaW1lKTsKK30KKyNlbmRpZgorCitPU1N0YXR1cyBDb3JlQXVkaW9TaGFy
ZWRVbml0Ojpwcm92aWRlU3BlYWtlckRhdGEoQXVkaW9Vbml0UmVuZGVyQWN0aW9uRmxhZ3MmIGZs
YWdzLCBjb25zdCBBdWRpb1RpbWVTdGFtcCYgdGltZVN0YW1wLCBVSW50MzIgLyppbkJ1c051bWJl
ciovLCBVSW50MzIgaW5OdW1iZXJGcmFtZXMsIEF1ZGlvQnVmZmVyTGlzdCYgaW9EYXRhKQorewor
ICAgIGlmIChtX2lzUmVjb25maWd1cmluZyB8fCAhbV9zcGVha2VyU2FtcGxlc1Byb2R1Y2VyTG9j
ay50cnlMb2NrKCkpIHsKKyAgICAgICAgQXVkaW9TYW1wbGVCdWZmZXJMaXN0Ojp6ZXJvQUJMKGlv
RGF0YSwgc3RhdGljX2Nhc3Q8c2l6ZV90Pihpbk51bWJlckZyYW1lcyAqIG1fc3BlYWtlclByb2NG
b3JtYXQuYnl0ZXNQZXJGcmFtZSgpKSk7CisgICAgICAgIGZsYWdzID0ga0F1ZGlvVW5pdFJlbmRl
ckFjdGlvbl9PdXRwdXRJc1NpbGVuY2U7CisgICAgICAgIHJldHVybiBub0VycjsKKyAgICB9CisK
KyAgICBMb2NrZXIgbG9ja2VyIHsgQWRvcHRMb2NrLCBtX3NwZWFrZXJTYW1wbGVzUHJvZHVjZXJM
b2NrIH07CisgICAgaWYgKCFtX3NwZWFrZXJTYW1wbGVzUHJvZHVjZXIpIHsKKyAgICAgICAgQXVk
aW9TYW1wbGVCdWZmZXJMaXN0Ojp6ZXJvQUJMKGlvRGF0YSwgc3RhdGljX2Nhc3Q8c2l6ZV90Pihp
bk51bWJlckZyYW1lcyAqIG1fc3BlYWtlclByb2NGb3JtYXQuYnl0ZXNQZXJGcmFtZSgpKSk7Cisg
ICAgICAgIGZsYWdzID0ga0F1ZGlvVW5pdFJlbmRlckFjdGlvbl9PdXRwdXRJc1NpbGVuY2U7Cisg
ICAgICAgIHJldHVybiBub0VycjsKKyAgICB9CisgICAgcmV0dXJuIG1fc3BlYWtlclNhbXBsZXNQ
cm9kdWNlci0+cHJvZHVjZVNwZWFrZXJTYW1wbGVzKGluTnVtYmVyRnJhbWVzLCBpb0RhdGEsIHRp
bWVTdGFtcC5tU2FtcGxlVGltZSwgdGltZVN0YW1wLm1Ib3N0VGltZSwgZmxhZ3MpOworfQorCitP
U1N0YXR1cyBDb3JlQXVkaW9TaGFyZWRVbml0OjpzcGVha2VyQ2FsbGJhY2sodm9pZCAqaW5SZWZD
b24sIEF1ZGlvVW5pdFJlbmRlckFjdGlvbkZsYWdzKiBpb0FjdGlvbkZsYWdzLCBjb25zdCBBdWRp
b1RpbWVTdGFtcCogaW5UaW1lU3RhbXAsIFVJbnQzMiBpbkJ1c051bWJlciwgVUludDMyIGluTnVt
YmVyRnJhbWVzLCBBdWRpb0J1ZmZlckxpc3QqIGlvRGF0YSkKK3sKKyAgICBBU1NFUlQoaW9BY3Rp
b25GbGFncyk7CisgICAgQVNTRVJUKGluVGltZVN0YW1wKTsKKyAgICBhdXRvIGRhdGFTb3VyY2Ug
PSBzdGF0aWNfY2FzdDxDb3JlQXVkaW9TaGFyZWRVbml0Kj4oaW5SZWZDb24pOworICAgIHJldHVy
biBkYXRhU291cmNlLT5wcm92aWRlU3BlYWtlckRhdGEoKmlvQWN0aW9uRmxhZ3MsICppblRpbWVT
dGFtcCwgaW5CdXNOdW1iZXIsIGluTnVtYmVyRnJhbWVzLCAqaW9EYXRhKTsKK30KKworT1NTdGF0
dXMgQ29yZUF1ZGlvU2hhcmVkVW5pdDo6cHJvY2Vzc01pY3JvcGhvbmVTYW1wbGVzKEF1ZGlvVW5p
dFJlbmRlckFjdGlvbkZsYWdzJiBpb0FjdGlvbkZsYWdzLCBjb25zdCBBdWRpb1RpbWVTdGFtcCYg
dGltZVN0YW1wLCBVSW50MzIgaW5CdXNOdW1iZXIsIFVJbnQzMiBpbk51bWJlckZyYW1lcywgQXVk
aW9CdWZmZXJMaXN0KiAvKmlvRGF0YSovKQoreworICAgICsrbV9taWNyb3Bob25lUHJvY3NDYWxs
ZWQ7CisKKyAgICBpZiAobV9pc1JlY29uZmlndXJpbmcpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIC8vIFB1bGwgdGhyb3VnaCB0aGUgdnBpbyB1bml0IHRvIG91ciBtaWMgYnVmZmVyLgor
ICAgIG1fbWljcm9waG9uZVNhbXBsZUJ1ZmZlci0+cmVzZXQoKTsKKyAgICBBdWRpb0J1ZmZlckxp
c3QmIGJ1ZmZlckxpc3QgPSBtX21pY3JvcGhvbmVTYW1wbGVCdWZmZXItPmJ1ZmZlckxpc3QoKTsK
KyAgICBpZiAoYXV0byBlcnIgPSBtX2lvVW5pdC0+cmVuZGVyKCZpb0FjdGlvbkZsYWdzLCAmdGlt
ZVN0YW1wLCBpbkJ1c051bWJlciwgaW5OdW1iZXJGcmFtZXMsICZidWZmZXJMaXN0KSkgeworICAg
ICAgICBSRUxFQVNFX0xPR19FUlJPUihXZWJSVEMsICJDb3JlQXVkaW9TaGFyZWRVbml0Ojpwcm9j
ZXNzTWljcm9waG9uZVNhbXBsZXMoJXApIEF1ZGlvVW5pdFJlbmRlciBmYWlsZWQgd2l0aCBlcnJv
ciAlZCAoJS40cyksIGJ1ZmZlckxpc3Qgc2l6ZSAlZCwgaW5OdW1iZXJGcmFtZXMgJWQgIiwgdGhp
cywgKGludCllcnIsIChjaGFyKikmZXJyLCAoaW50KWJ1ZmZlckxpc3QubUJ1ZmZlcnNbMF0ubURh
dGFCeXRlU2l6ZSwgKGludClpbk51bWJlckZyYW1lcyk7CisgICAgICAgIGlmIChlcnIgPT0ga0F1
ZGlvX1BhcmFtRXJyb3IpIHsKKyAgICAgICAgICAgIC8vIE91ciBidWZmZXIgbWlnaHQgYmUgdG9v
IHNtYWxsLCB0aGUgcHJlZmVycmVkIGJ1ZmZlciBzaXplIG9yIHNhbXBsZSByYXRlIG1pZ2h0IGhh
dmUgY2hhbmdlZC4KKyAgICAgICAgICAgIGNhbGxPbk1haW5UaHJlYWQoW10geworICAgICAgICAg
ICAgICAgIENvcmVBdWRpb1NoYXJlZFVuaXQ6OnNpbmdsZXRvbigpLnJlY29uZmlndXJlKCk7Cisg
ICAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAgICAgICAvLyBXZSByZXR1cm4gZWFybHkgc28g
dGhhdCBpZiB0aGlzIGVycm9yIGhhcHBlbnMsIHdlIGRvIG5vdCBpbmNyZW1lbnQgbV9taWNyb3Bo
b25lUHJvY3NDYWxsZWQgYW5kIGZhaWwgdGhlIGNhcHR1cmUgb25jZSB0aW1lciBraWNrcyBpbi4K
KyAgICAgICAgcmV0dXJuIGVycjsKKyAgICB9CisKKyAgICBpZiAoIWlzUHJvZHVjaW5nTWljcm9w
aG9uZVNhbXBsZXMoKSkKKyAgICAgICAgcmV0dXJuIG5vRXJyOworCisgICAgZG91YmxlIGFkanVz
dGVkSG9zdFRpbWUgPSBtX0RUU0NvbnZlcnNpb25SYXRpbyAqIHRpbWVTdGFtcC5tSG9zdFRpbWU7
CisgICAgdWludDY0X3Qgc2FtcGxlVGltZSA9IHRpbWVTdGFtcC5tU2FtcGxlVGltZTsKKyNpZiAh
TE9HX0RJU0FCTEVECisgICAgY2hlY2tUaW1lc3RhbXBzKHRpbWVTdGFtcCwgc2FtcGxlVGltZSwg
YWRqdXN0ZWRIb3N0VGltZSk7CisjZW5kaWYKKyAgICBtX2xhdGVzdE1pY1RpbWVTdGFtcCA9IHNh
bXBsZVRpbWU7CisgICAgbV9taWNyb3Bob25lU2FtcGxlQnVmZmVyLT5zZXRUaW1lcyhhZGp1c3Rl
ZEhvc3RUaW1lLCBzYW1wbGVUaW1lKTsKKworICAgIGlmICh2b2x1bWUoKSAhPSAxLjApCisgICAg
ICAgIG1fbWljcm9waG9uZVNhbXBsZUJ1ZmZlci0+YXBwbHlHYWluKHZvbHVtZSgpKTsKKworICAg
IGF1ZGlvU2FtcGxlc0F2YWlsYWJsZShNZWRpYVRpbWUoc2FtcGxlVGltZSwgbV9taWNyb3Bob25l
UHJvY0Zvcm1hdC5zYW1wbGVSYXRlKCkpLCBtX21pY3JvcGhvbmVTYW1wbGVCdWZmZXItPmJ1ZmZl
ckxpc3QoKSwgbV9taWNyb3Bob25lUHJvY0Zvcm1hdCwgaW5OdW1iZXJGcmFtZXMpOworICAgIHJl
dHVybiBub0VycjsKK30KKworT1NTdGF0dXMgQ29yZUF1ZGlvU2hhcmVkVW5pdDo6bWljcm9waG9u
ZUNhbGxiYWNrKHZvaWQgKmluUmVmQ29uLCBBdWRpb1VuaXRSZW5kZXJBY3Rpb25GbGFncyogaW9B
Y3Rpb25GbGFncywgY29uc3QgQXVkaW9UaW1lU3RhbXAqIGluVGltZVN0YW1wLCBVSW50MzIgaW5C
dXNOdW1iZXIsIFVJbnQzMiBpbk51bWJlckZyYW1lcywgQXVkaW9CdWZmZXJMaXN0KiBpb0RhdGEp
Cit7CisgICAgQVNTRVJUKGlvQWN0aW9uRmxhZ3MpOworICAgIEFTU0VSVChpblRpbWVTdGFtcCk7
CisgICAgQ29yZUF1ZGlvU2hhcmVkVW5pdCogZGF0YVNvdXJjZSA9IHN0YXRpY19jYXN0PENvcmVB
dWRpb1NoYXJlZFVuaXQqPihpblJlZkNvbik7CisgICAgcmV0dXJuIGRhdGFTb3VyY2UtPnByb2Nl
c3NNaWNyb3Bob25lU2FtcGxlcygqaW9BY3Rpb25GbGFncywgKmluVGltZVN0YW1wLCBpbkJ1c051
bWJlciwgaW5OdW1iZXJGcmFtZXMsIGlvRGF0YSk7Cit9CisKK3ZvaWQgQ29yZUF1ZGlvU2hhcmVk
VW5pdDo6Y2xlYW51cEF1ZGlvVW5pdCgpCit7CisgICAgaWYgKG1faW9Vbml0SW5pdGlhbGl6ZWQp
IHsKKyAgICAgICAgQVNTRVJUKG1faW9Vbml0KTsKKyAgICAgICAgaWYgKGF1dG8gZXJyID0gbV9p
b1VuaXQtPnVuaW5pdGlhbGl6ZSgpKQorICAgICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoV2Vi
UlRDLCAiQ29yZUF1ZGlvU2hhcmVkVW5pdDo6Y2xlYW51cEF1ZGlvVW5pdCglcCkgQXVkaW9Vbml0
VW5pbml0aWFsaXplIGZhaWxlZCB3aXRoIGVycm9yICVkICglLjRzKSIsIHRoaXMsIChpbnQpZXJy
LCAoY2hhciopJmVycik7CisgICAgICAgIG1faW9Vbml0SW5pdGlhbGl6ZWQgPSBmYWxzZTsKKyAg
ICB9CisKKyAgICBtX2lvVW5pdCA9IG51bGxwdHI7CisKKyAgICBtX21pY3JvcGhvbmVTYW1wbGVC
dWZmZXIgPSBudWxscHRyOworfQorCit2b2lkIENvcmVBdWRpb1NoYXJlZFVuaXQ6OmRlbGF5U2Ft
cGxlcyhTZWNvbmRzIHNlY29uZHMpCit7CisgICAgaWYgKG1faW9Vbml0KQorICAgICAgICBtX2lv
VW5pdC0+ZGVsYXlTYW1wbGVzKHNlY29uZHMpOworfQorCitPU1N0YXR1cyBDb3JlQXVkaW9TaGFy
ZWRVbml0OjpyZWNvbmZpZ3VyZUF1ZGlvVW5pdCgpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVh
ZCgpKTsKKyAgICBpZiAoIWhhc0F1ZGlvVW5pdCgpKQorICAgICAgICByZXR1cm4gMDsKKworICAg
IG1faXNSZWNvbmZpZ3VyaW5nID0gdHJ1ZTsKKyAgICBhdXRvIHNjb3BlID0gbWFrZVNjb3BlRXhp
dChbdGhpc10geyBtX2lzUmVjb25maWd1cmluZyA9IGZhbHNlOyB9KTsKKworICAgIGlmIChtX2lv
VW5pdFN0YXJ0ZWQpIHsKKyAgICAgICAgaWYgKGF1dG8gZXJyID0gbV9pb1VuaXQtPnN0b3AoKSkg
eworICAgICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoV2ViUlRDLCAiQ29yZUF1ZGlvU2hhcmVk
VW5pdDo6cmVjb25maWd1cmVBdWRpb1VuaXQoJXApIEF1ZGlvT3V0cHV0VW5pdFN0b3AgZmFpbGVk
IHdpdGggZXJyb3IgJWQgKCUuNHMpIiwgdGhpcywgKGludCllcnIsIChjaGFyKikmZXJyKTsKKyAg
ICAgICAgICAgIHJldHVybiBlcnI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBjbGVhbnVwQXVk
aW9Vbml0KCk7CisgICAgaWYgKGF1dG8gZXJyID0gc2V0dXBBdWRpb1VuaXQoKSkKKyAgICAgICAg
cmV0dXJuIGVycjsKKworICAgIGlmIChtX2lvVW5pdFN0YXJ0ZWQpIHsKKyAgICAgICAgaWYgKGF1
dG8gZXJyID0gbV9pb1VuaXQtPnN0YXJ0KCkpIHsKKyAgICAgICAgICAgIFJFTEVBU0VfTE9HX0VS
Uk9SKFdlYlJUQywgIkNvcmVBdWRpb1NoYXJlZFVuaXQ6OnJlY29uZmlndXJlQXVkaW9Vbml0KCVw
KSBBdWRpb091dHB1dFVuaXRTdGFydCBmYWlsZWQgd2l0aCBlcnJvciAlZCAoJS40cykiLCB0aGlz
LCAoaW50KWVyciwgKGNoYXIqKSZlcnIpOworICAgICAgICAgICAgcmV0dXJuIGVycjsKKyAgICAg
ICAgfQorICAgIH0KKyAgICByZXR1cm4gbm9FcnI7Cit9CisKK09TU3RhdHVzIENvcmVBdWRpb1No
YXJlZFVuaXQ6OnN0YXJ0SW50ZXJuYWwoKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7
CisKKyAgICBzZXRJc1Byb2R1Y2luZ01pY3JvcGhvbmVTYW1wbGVzKHRydWUpOworCisgICAgaWYg
KCFtX2lvVW5pdCkgeworICAgICAgICBpZiAoYXV0byBlcnIgPSBzZXR1cEF1ZGlvVW5pdCgpKSB7
CisgICAgICAgICAgICBjbGVhbnVwQXVkaW9Vbml0KCk7CisgICAgICAgICAgICBBU1NFUlQoIW1f
aW9Vbml0KTsKKyAgICAgICAgICAgIHJldHVybiBlcnI7CisgICAgICAgIH0KKyAgICAgICAgQVNT
RVJUKG1faW9Vbml0KTsKKyAgICB9CisKKyAgICB1bmR1Y2soKTsKKworICAgIHsKKyAgICAgICAg
TG9ja2VyIGxvY2tlciB7IG1fc3BlYWtlclNhbXBsZXNQcm9kdWNlckxvY2sgfTsKKyAgICAgICAg
aWYgKG1fc3BlYWtlclNhbXBsZXNQcm9kdWNlcikKKyAgICAgICAgICAgIG1fc3BlYWtlclNhbXBs
ZXNQcm9kdWNlci0+Y2FwdHVyZVVuaXRJc1N0YXJ0aW5nKCk7CisgICAgfQorCisgICAgaWYgKGF1
dG8gZXJyID0gbV9pb1VuaXQtPnN0YXJ0KCkpIHsKKyAgICAgICAgeworICAgICAgICAgICAgTG9j
a2VyIGxvY2tlciB7IG1fc3BlYWtlclNhbXBsZXNQcm9kdWNlckxvY2sgfTsKKyAgICAgICAgICAg
IGlmIChtX3NwZWFrZXJTYW1wbGVzUHJvZHVjZXIpCisgICAgICAgICAgICAgICAgbV9zcGVha2Vy
U2FtcGxlc1Byb2R1Y2VyLT5jYXB0dXJlVW5pdEhhc1N0b3BwZWQoKTsKKyAgICAgICAgfQorCisg
ICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFdlYlJUQywgIkNvcmVBdWRpb1NoYXJlZFVuaXQ6OnN0
YXJ0KCVwKSBBdWRpb091dHB1dFVuaXRTdGFydCBmYWlsZWQgd2l0aCBlcnJvciAlZCAoJS40cyki
LCB0aGlzLCAoaW50KWVyciwgKGNoYXIqKSZlcnIpOworICAgICAgICBjbGVhbnVwQXVkaW9Vbml0
KCk7CisgICAgICAgIEFTU0VSVCghbV9pb1VuaXQpOworICAgICAgICByZXR1cm4gZXJyOworICAg
IH0KKworICAgIG1faW9Vbml0U3RhcnRlZCA9IHRydWU7CisKKyAgICBtX3ZlcmlmeUNhcHR1cmlu
Z1RpbWVyLnN0YXJ0UmVwZWF0aW5nKHZlcmlmeUNhcHR1cmVJbnRlcnZhbCgpKTsKKyAgICBtX21p
Y3JvcGhvbmVQcm9jc0NhbGxlZCA9IDA7CisgICAgbV9taWNyb3Bob25lUHJvY3NDYWxsZWRMYXN0
VGltZSA9IDA7CisKKyAgICByZXR1cm4gbm9FcnI7Cit9CisKK3ZvaWQgQ29yZUF1ZGlvU2hhcmVk
VW5pdDo6aXNQcm9kdWNpbmdNaWNyb3Bob25lU2FtcGxlc0NoYW5nZWQoKQoreworICAgIGlmICgh
aXNQcm9kdWNpbmdEYXRhKCkpCisgICAgICAgIHJldHVybjsKKyAgICBtX3ZlcmlmeUNhcHR1cmlu
Z1RpbWVyLnN0YXJ0UmVwZWF0aW5nKHZlcmlmeUNhcHR1cmVJbnRlcnZhbCgpKTsKK30KKwordm9p
ZCBDb3JlQXVkaW9TaGFyZWRVbml0Ojp2YWxpZGF0ZU91dHB1dERldmljZSh1aW50MzJfdCBjdXJy
ZW50T3V0cHV0RGV2aWNlSUQpCit7CisjaWYgUExBVEZPUk0oTUFDKQorICAgIGlmICghbV9pb1Vu
aXQpCisgICAgICAgIHJldHVybjsKKworICAgIHVpbnQzMl90IGN1cnJlbnREZWZhdWx0T3V0cHV0
RGV2aWNlSUQgPSAwOworICAgIGlmIChhdXRvIGVyciA9IG1faW9Vbml0LT5kZWZhdWx0T3V0cHV0
RGV2aWNlKCZjdXJyZW50RGVmYXVsdE91dHB1dERldmljZUlEKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgaWYgKCFjdXJyZW50RGVmYXVsdE91dHB1dERldmljZUlEIHx8IGN1cnJlbnRPdXRwdXRE
ZXZpY2VJRCA9PSBjdXJyZW50RGVmYXVsdE91dHB1dERldmljZUlEKQorICAgICAgICByZXR1cm47
CisKKyAgICByZWNvbmZpZ3VyZSgpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oY3VycmVudE91
dHB1dERldmljZUlEKTsKKyNlbmRpZgorfQorCit2b2lkIENvcmVBdWRpb1NoYXJlZFVuaXQ6OnZl
cmlmeUlzQ2FwdHVyaW5nKCkKK3sKKyAgICBpZiAobV9taWNyb3Bob25lUHJvY3NDYWxsZWRMYXN0
VGltZSAhPSBtX21pY3JvcGhvbmVQcm9jc0NhbGxlZCkgeworICAgICAgICBtX21pY3JvcGhvbmVQ
cm9jc0NhbGxlZExhc3RUaW1lID0gbV9taWNyb3Bob25lUHJvY3NDYWxsZWQ7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBSRUxFQVNFX0xPR19FUlJPUihXZWJSVEMsICJDb3JlQXVkaW9T
aGFyZWRVbml0Ojp2ZXJpZnlJc0NhcHR1cmluZyAtIG5vIGF1ZGlvIHJlY2VpdmVkIGluICVkIHNl
Y29uZHMsIGZhaWxpbmciLCBzdGF0aWNfY2FzdDxpbnQ+KG1fdmVyaWZ5Q2FwdHVyaW5nVGltZXIu
cmVwZWF0SW50ZXJ2YWwoKS52YWx1ZSgpKSk7CisgICAgY2FwdHVyZUZhaWxlZCgpOworfQorCit2
b2lkIENvcmVBdWRpb1NoYXJlZFVuaXQ6OnN0b3BJbnRlcm5hbCgpCit7CisgICAgQVNTRVJUKGlz
TWFpblRocmVhZCgpKTsKKworICAgIG1fdmVyaWZ5Q2FwdHVyaW5nVGltZXIuc3RvcCgpOworCisg
ICAgaWYgKCFtX2lvVW5pdCB8fCAhbV9pb1VuaXRTdGFydGVkKQorICAgICAgICByZXR1cm47CisK
KyAgICBpZiAoYXV0byBlcnIgPSBtX2lvVW5pdC0+c3RvcCgpKSB7CisgICAgICAgIFJFTEVBU0Vf
TE9HX0VSUk9SKFdlYlJUQywgIkNvcmVBdWRpb1NoYXJlZFVuaXQ6OnN0b3AoJXApIEF1ZGlvT3V0
cHV0VW5pdFN0b3AgZmFpbGVkIHdpdGggZXJyb3IgJWQgKCUuNHMpIiwgdGhpcywgKGludCllcnIs
IChjaGFyKikmZXJyKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICB7CisgICAgICAgIExv
Y2tlciBsb2NrZXIgeyBtX3NwZWFrZXJTYW1wbGVzUHJvZHVjZXJMb2NrIH07CisgICAgICAgIGlm
IChtX3NwZWFrZXJTYW1wbGVzUHJvZHVjZXIpCisgICAgICAgICAgICBtX3NwZWFrZXJTYW1wbGVz
UHJvZHVjZXItPmNhcHR1cmVVbml0SGFzU3RvcHBlZCgpOworICAgIH0KKworICAgIG1faW9Vbml0
U3RhcnRlZCA9IGZhbHNlOworfQorCit2b2lkIENvcmVBdWRpb1NoYXJlZFVuaXQ6OnJlZ2lzdGVy
U3BlYWtlclNhbXBsZXNQcm9kdWNlcihDb3JlQXVkaW9TcGVha2VyU2FtcGxlc1Byb2R1Y2VyJiBw
cm9kdWNlcikKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworCisgICAgc2V0SXNSZW5k
ZXJpbmdBdWRpbyh0cnVlKTsKKworICAgIENvcmVBdWRpb1NwZWFrZXJTYW1wbGVzUHJvZHVjZXIq
IG9sZFByb2R1Y2VyOworICAgIHsKKyAgICAgICAgTG9ja2VyIGxvY2tlciB7IG1fc3BlYWtlclNh
bXBsZXNQcm9kdWNlckxvY2sgfTsKKyAgICAgICAgb2xkUHJvZHVjZXIgPSBtX3NwZWFrZXJTYW1w
bGVzUHJvZHVjZXI7CisgICAgICAgIG1fc3BlYWtlclNhbXBsZXNQcm9kdWNlciA9ICZwcm9kdWNl
cjsKKyAgICB9CisgICAgaWYgKG9sZFByb2R1Y2VyICYmIG9sZFByb2R1Y2VyICE9ICZwcm9kdWNl
cikKKyAgICAgICAgb2xkUHJvZHVjZXItPmNhcHR1cmVVbml0SGFzU3RvcHBlZCgpOworCisgICAg
aWYgKGhhc0F1ZGlvVW5pdCgpICYmIHByb2R1Y2VyLmZvcm1hdCgpICE9IG1fc3BlYWtlclByb2NG
b3JtYXQpCisgICAgICAgIHJlY29uZmlndXJlKCk7Cit9CisKK3ZvaWQgQ29yZUF1ZGlvU2hhcmVk
VW5pdDo6dW5yZWdpc3RlclNwZWFrZXJTYW1wbGVzUHJvZHVjZXIoQ29yZUF1ZGlvU3BlYWtlclNh
bXBsZXNQcm9kdWNlciYgcHJvZHVjZXIpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsK
KworICAgIHsKKyAgICAgICAgTG9ja2VyIGxvY2tlciB7IG1fc3BlYWtlclNhbXBsZXNQcm9kdWNl
ckxvY2sgfTsKKyAgICAgICAgaWYgKG1fc3BlYWtlclNhbXBsZXNQcm9kdWNlciAhPSAmcHJvZHVj
ZXIpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIG1fc3BlYWtlclNhbXBsZXNQcm9kdWNl
ciA9IG51bGxwdHI7CisgICAgfQorCisgICAgc2V0SXNSZW5kZXJpbmdBdWRpbyhmYWxzZSk7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJF
QU0pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMv
Q29yZUF1ZGlvU2hhcmVkVW5pdC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJl
YW0vbWFjL0NvcmVBdWRpb1NoYXJlZFVuaXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mYjRiOGNiY2IwYTVjNjBi
Zjg3NzEyNTAyZjIxNWY1MzYxYWYzY2M4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0NvcmVBdWRpb1NoYXJlZFVuaXQuaApAQCAtMCww
ICsxLDE1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIyIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQorCisjaW5jbHVk
ZSAiQXVkaW9TYW1wbGVEYXRhU291cmNlLmgiCisjaW5jbHVkZSAiQmFzZUF1ZGlvU2hhcmVkVW5p
dC5oIgorI2luY2x1ZGUgIkNBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbi5oIgorI2luY2x1ZGUgIlRp
bWVyLmgiCisKK3R5cGVkZWYgVUludDMyIEF1ZGlvVW5pdFByb3BlcnR5SUQ7Cit0eXBlZGVmIFVJ
bnQzMiBBdWRpb1VuaXRTY29wZTsKK3R5cGVkZWYgVUludDMyIEF1ZGlvVW5pdEVsZW1lbnQ7Cit0
eXBlZGVmIFVJbnQzMiBBdWRpb1VuaXRSZW5kZXJBY3Rpb25GbGFnczsKKworc3RydWN0IEF1ZGlv
QnVmZmVyTGlzdDsKK3N0cnVjdCBBdWRpb1RpbWVTdGFtcDsKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitjbGFzcyBDb3JlQXVkaW9TcGVha2VyU2FtcGxlc1Byb2R1Y2VyOworCitjbGFzcyBDb3Jl
QXVkaW9TaGFyZWRVbml0IGZpbmFsIDogcHVibGljIEJhc2VBdWRpb1NoYXJlZFVuaXQgeworcHVi
bGljOgorICAgIGNsYXNzIEludGVybmFsVW5pdCB7CisgICAgcHVibGljOgorICAgICAgICB2aXJ0
dWFsIH5JbnRlcm5hbFVuaXQoKSA9IGRlZmF1bHQ7CisgICAgICAgIHZpcnR1YWwgT1NTdGF0dXMg
aW5pdGlhbGl6ZSgpID0gMDsKKyAgICAgICAgdmlydHVhbCBPU1N0YXR1cyB1bmluaXRpYWxpemUo
KSA9IDA7CisgICAgICAgIHZpcnR1YWwgT1NTdGF0dXMgc3RhcnQoKSA9IDA7CisgICAgICAgIHZp
cnR1YWwgT1NTdGF0dXMgc3RvcCgpID0gMDsKKyAgICAgICAgdmlydHVhbCBPU1N0YXR1cyBzZXQo
QXVkaW9Vbml0UHJvcGVydHlJRCwgQXVkaW9Vbml0U2NvcGUsIEF1ZGlvVW5pdEVsZW1lbnQsIGNv
bnN0IHZvaWQqLCBVSW50MzIpID0gMDsKKyAgICAgICAgdmlydHVhbCBPU1N0YXR1cyBnZXQoQXVk
aW9Vbml0UHJvcGVydHlJRCwgQXVkaW9Vbml0U2NvcGUsIEF1ZGlvVW5pdEVsZW1lbnQsIHZvaWQq
LCBVSW50MzIqKSA9IDA7CisgICAgICAgIHZpcnR1YWwgT1NTdGF0dXMgcmVuZGVyKEF1ZGlvVW5p
dFJlbmRlckFjdGlvbkZsYWdzKiwgY29uc3QgQXVkaW9UaW1lU3RhbXAqLCBVSW50MzIsIFVJbnQz
MiwgQXVkaW9CdWZmZXJMaXN0KikgPSAwOworICAgICAgICB2aXJ0dWFsIE9TU3RhdHVzIGRlZmF1
bHRJbnB1dERldmljZSh1aW50MzJfdCopID0gMDsKKyAgICAgICAgdmlydHVhbCBPU1N0YXR1cyBk
ZWZhdWx0T3V0cHV0RGV2aWNlKHVpbnQzMl90KikgPSAwOworICAgICAgICB2aXJ0dWFsIHZvaWQg
ZGVsYXlTYW1wbGVzKFNlY29uZHMpIHsgfQorICAgIH07CisKKyAgICBzdGF0aWMgQ29yZUF1ZGlv
U2hhcmVkVW5pdCYgdW5pdCgpOworICAgIHN0YXRpYyBCYXNlQXVkaW9TaGFyZWRVbml0JiBzaW5n
bGV0b24oKSAgeyByZXR1cm4gdW5pdCgpOyB9CisgICAgQ29yZUF1ZGlvU2hhcmVkVW5pdCgpOwor
CisgICAgdXNpbmcgQ3JlYXRpb25DYWxsYmFjayA9IEZ1bmN0aW9uPEV4cGVjdGVkPFVuaXF1ZVJl
ZjxJbnRlcm5hbFVuaXQ+LCBPU1N0YXR1cz4oKT47CisgICAgdm9pZCBzZXRJbnRlcm5hbFVuaXRD
cmVhdGlvbkNhbGxiYWNrKENyZWF0aW9uQ2FsbGJhY2smJiBjYWxsYmFjaykgeyBtX2NyZWF0aW9u
Q2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKTsgfQorICAgIHVzaW5nIEdldFNhbXBsZVJhdGVD
YWxsYmFjayA9IEZ1bmN0aW9uPGludCgpPjsKKyAgICB2b2lkIHNldEludGVybmFsVW5pdEdldFNh
bXBsZVJhdGVDYWxsYmFjayhHZXRTYW1wbGVSYXRlQ2FsbGJhY2smJiBjYWxsYmFjaykgeyBtX2dl
dFNhbXBsZVJhdGVDYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spOyB9CisKKyAgICB2b2lkIHJl
Z2lzdGVyU3BlYWtlclNhbXBsZXNQcm9kdWNlcihDb3JlQXVkaW9TcGVha2VyU2FtcGxlc1Byb2R1
Y2VyJik7CisgICAgdm9pZCB1bnJlZ2lzdGVyU3BlYWtlclNhbXBsZXNQcm9kdWNlcihDb3JlQXVk
aW9TcGVha2VyU2FtcGxlc1Byb2R1Y2VyJik7CisgICAgYm9vbCBpc1J1bm5pbmcoKSBjb25zdCB7
IHJldHVybiBtX2lvVW5pdFN0YXJ0ZWQ7IH0KKyAgICB2b2lkIHNldFNhbXBsZVJhdGVSYW5nZShD
YXBhYmlsaXR5VmFsdWVPclJhbmdlIHJhbmdlKSB7IG1fc2FtcGxlUmF0ZUNhcGFiaWxpdGllcyA9
IHJhbmdlOyB9CisKK3ByaXZhdGU6CisgICAgc3RhdGljIHNpemVfdCBwcmVmZXJyZWRJT0J1ZmZl
clNpemUoKTsKKworICAgIENhcGFiaWxpdHlWYWx1ZU9yUmFuZ2Ugc2FtcGxlUmF0ZUNhcGFjaXRp
ZXMoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3NhbXBsZVJhdGVDYXBhYmlsaXRpZXM7IH0KKyAg
ICBjb25zdCBDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24mIG1pY3JvcGhvbmVGb3JtYXQoKSBjb25z
dCB7IHJldHVybiBtX21pY3JvcGhvbmVQcm9jRm9ybWF0OyB9CisKKyAgICBib29sIGhhc0F1ZGlv
VW5pdCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICEhbV9pb1VuaXQ7IH0KKyAgICB2b2lkIGNhcHR1
cmVEZXZpY2VDaGFuZ2VkKCkgZmluYWw7CisgICAgT1NTdGF0dXMgcmVjb25maWd1cmVBdWRpb1Vu
aXQoKSBmaW5hbDsKKyAgICB2b2lkIGRlbGF5U2FtcGxlcyhTZWNvbmRzKSBmaW5hbDsKKworICAg
IE9TU3RhdHVzIHNldHVwQXVkaW9Vbml0KCk7CisgICAgdm9pZCBjbGVhbnVwQXVkaW9Vbml0KCkg
ZmluYWw7CisKKyAgICBPU1N0YXR1cyBzdGFydEludGVybmFsKCkgZmluYWw7CisgICAgdm9pZCBz
dG9wSW50ZXJuYWwoKSBmaW5hbDsKKyAgICBib29sIGlzUHJvZHVjaW5nRGF0YSgpIGNvbnN0IGZp
bmFsIHsgcmV0dXJuIG1faW9Vbml0U3RhcnRlZDsgfQorICAgIHZvaWQgaXNQcm9kdWNpbmdNaWNy
b3Bob25lU2FtcGxlc0NoYW5nZWQoKSBmaW5hbDsKKyAgICB2b2lkIHZhbGlkYXRlT3V0cHV0RGV2
aWNlKHVpbnQzMl90IGRldmljZUlEKSBmaW5hbDsKKyAgICBpbnQgYWN0dWFsU2FtcGxlUmF0ZSgp
IGNvbnN0IGZpbmFsOworICAgIHZvaWQgcmVzZXRTYW1wbGVSYXRlKCk7CisKKyAgICBPU1N0YXR1
cyBjb25maWd1cmVTcGVha2VyUHJvYyhpbnQgc2FtcGxlUmF0ZSk7CisgICAgT1NTdGF0dXMgY29u
ZmlndXJlTWljcm9waG9uZVByb2MoaW50IHNhbXBsZVJhdGUpOworCisgICAgc3RhdGljIE9TU3Rh
dHVzIG1pY3JvcGhvbmVDYWxsYmFjayh2b2lkKiwgQXVkaW9Vbml0UmVuZGVyQWN0aW9uRmxhZ3Mq
LCBjb25zdCBBdWRpb1RpbWVTdGFtcCosIFVJbnQzMiwgVUludDMyLCBBdWRpb0J1ZmZlckxpc3Qq
KTsKKyAgICBPU1N0YXR1cyBwcm9jZXNzTWljcm9waG9uZVNhbXBsZXMoQXVkaW9Vbml0UmVuZGVy
QWN0aW9uRmxhZ3MmLCBjb25zdCBBdWRpb1RpbWVTdGFtcCYsIFVJbnQzMiwgVUludDMyLCBBdWRp
b0J1ZmZlckxpc3QqKTsKKworICAgIHN0YXRpYyBPU1N0YXR1cyBzcGVha2VyQ2FsbGJhY2sodm9p
ZCosIEF1ZGlvVW5pdFJlbmRlckFjdGlvbkZsYWdzKiwgY29uc3QgQXVkaW9UaW1lU3RhbXAqLCBV
SW50MzIsIFVJbnQzMiwgQXVkaW9CdWZmZXJMaXN0Kik7CisgICAgT1NTdGF0dXMgcHJvdmlkZVNw
ZWFrZXJEYXRhKEF1ZGlvVW5pdFJlbmRlckFjdGlvbkZsYWdzJiwgY29uc3QgQXVkaW9UaW1lU3Rh
bXAmLCBVSW50MzIsIFVJbnQzMiwgQXVkaW9CdWZmZXJMaXN0Jik7CisKKyAgICB2b2lkIHVuZHVj
aygpOworCisgICAgdm9pZCB2ZXJpZnlJc0NhcHR1cmluZygpOworCisgICAgU2Vjb25kcyB2ZXJp
ZnlDYXB0dXJlSW50ZXJ2YWwoKSB7IHJldHVybiBpc1Byb2R1Y2luZ01pY3JvcGhvbmVTYW1wbGVz
KCkgPyAxMF9zIDogMl9zOyB9CisKKyAgICBDcmVhdGlvbkNhbGxiYWNrIG1fY3JlYXRpb25DYWxs
YmFjazsKKyAgICBHZXRTYW1wbGVSYXRlQ2FsbGJhY2sgbV9nZXRTYW1wbGVSYXRlQ2FsbGJhY2s7
CisgICAgc3RkOjp1bmlxdWVfcHRyPEludGVybmFsVW5pdD4gbV9pb1VuaXQ7CisKKyAgICAvLyBP
bmx5IHJlYWQvbW9kaWZpZWQgZnJvbSB0aGUgSU8gdGhyZWFkLgorICAgIFZlY3RvcjxSZWY8QXVk
aW9TYW1wbGVEYXRhU291cmNlPj4gbV9hY3RpdmVTb3VyY2VzOworCisgICAgQ0FBdWRpb1N0cmVh
bURlc2NyaXB0aW9uIG1fbWljcm9waG9uZVByb2NGb3JtYXQ7CisgICAgUmVmUHRyPEF1ZGlvU2Ft
cGxlQnVmZmVyTGlzdD4gbV9taWNyb3Bob25lU2FtcGxlQnVmZmVyOworICAgIHVpbnQ2NF90IG1f
bGF0ZXN0TWljVGltZVN0YW1wIHsgMCB9OworCisgICAgQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9u
IG1fc3BlYWtlclByb2NGb3JtYXQ7CisKKyAgICBkb3VibGUgbV9EVFNDb252ZXJzaW9uUmF0aW8g
eyAwIH07CisKKyAgICBib29sIG1faW9Vbml0SW5pdGlhbGl6ZWQgeyBmYWxzZSB9OworICAgIGJv
b2wgbV9pb1VuaXRTdGFydGVkIHsgZmFsc2UgfTsKKworICAgIG11dGFibGUgc3RkOjp1bmlxdWVf
cHRyPFJlYWx0aW1lTWVkaWFTb3VyY2VDYXBhYmlsaXRpZXM+IG1fY2FwYWJpbGl0aWVzOworICAg
IG11dGFibGUgc3RkOjpvcHRpb25hbDxSZWFsdGltZU1lZGlhU291cmNlU2V0dGluZ3M+IG1fY3Vy
cmVudFNldHRpbmdzOworCisjaWYgIUxPR19ESVNBQkxFRAorICAgIHZvaWQgY2hlY2tUaW1lc3Rh
bXBzKGNvbnN0IEF1ZGlvVGltZVN0YW1wJiwgdWludDY0X3QsIGRvdWJsZSk7CisKKyAgICBTdHJp
bmcgbV9pb1VuaXROYW1lOworI2VuZGlmCisKKyAgICBDYXBhYmlsaXR5VmFsdWVPclJhbmdlIG1f
c2FtcGxlUmF0ZUNhcGFiaWxpdGllczsKKworICAgIHVpbnQ2NF90IG1fbWljcm9waG9uZVByb2Nz
Q2FsbGVkIHsgMCB9OworICAgIHVpbnQ2NF90IG1fbWljcm9waG9uZVByb2NzQ2FsbGVkTGFzdFRp
bWUgeyAwIH07CisgICAgVGltZXIgbV92ZXJpZnlDYXB0dXJpbmdUaW1lcjsKKworICAgIGJvb2wg
bV9pc1JlY29uZmlndXJpbmcgeyBmYWxzZSB9OworICAgIG11dGFibGUgTG9jayBtX3NwZWFrZXJT
YW1wbGVzUHJvZHVjZXJMb2NrOworICAgIENvcmVBdWRpb1NwZWFrZXJTYW1wbGVzUHJvZHVjZXIq
IG1fc3BlYWtlclNhbXBsZXNQcm9kdWNlciBXVEZfR1VBUkRFRF9CWV9MT0NLKG1fc3BlYWtlclNh
bXBsZXNQcm9kdWNlckxvY2spIHsgbnVsbHB0ciB9OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCisjZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVBTSkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9Nb2NrQXVkaW9TaGFyZWRVbml0Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvTW9ja0F1ZGlvU2hhcmVk
VW5pdC5oCmluZGV4IDFhODk2YWI3Mzg1Mjg1NGJhNzc3YmM0ZDE2NmY5Y2EyZTVkYTJhZjguLjk5
YTlkZmRmZGUzN2IxYzFhYWMxZDg3ZGNmZmUwMGEzMGQ5YThjYmYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9Nb2NrQXVkaW9TaGFyZWRVbml0LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL01vY2tBdWRpb1No
YXJlZFVuaXQuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAx
OSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYt
MjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTI3LDcyICsyNywxNSBAQAogCiAjaWYgRU5BQkxFKE1FRElBX1NUUkVB
TSkKIAotI2luY2x1ZGUgIkJhc2VBdWRpb1NoYXJlZFVuaXQuaCIKLSNpbmNsdWRlIDxDb3JlQXVk
aW8vQ29yZUF1ZGlvVHlwZXMuaD4KLSNpbmNsdWRlIDx3dGYvUnVuTG9vcC5oPgotI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KLSNpbmNsdWRlIDx3dGYvV29ya1F1ZXVlLmg+Ci0KLU9CSkNfQ0xBU1Mg
QVZBdWRpb1BDTUJ1ZmZlcjsKLXR5cGVkZWYgc3RydWN0IE9wYXF1ZUNNQ2xvY2sqIENNQ2xvY2tS
ZWY7Ci10eXBlZGVmIGNvbnN0IHN0cnVjdCBvcGFxdWVDTUZvcm1hdERlc2NyaXB0aW9uKiBDTUZv
cm1hdERlc2NyaXB0aW9uUmVmOworI2luY2x1ZGUgIkNvcmVBdWRpb1NoYXJlZFVuaXQuaCIKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBXZWJBdWRpb0J1ZmZlckxpc3Q7Ci1jbGFzcyBX
ZWJBdWRpb1NvdXJjZVByb3ZpZGVyQ29jb2E7Ci0KLWNsYXNzIE1vY2tBdWRpb1NoYXJlZFVuaXQg
ZmluYWwgOiBwdWJsaWMgQmFzZUF1ZGlvU2hhcmVkVW5pdCB7Ci1wdWJsaWM6Ci0gICAgV0VCQ09S
RV9FWFBPUlQgc3RhdGljIE1vY2tBdWRpb1NoYXJlZFVuaXQmIHNpbmdsZXRvbigpOwotICAgIE1v
Y2tBdWRpb1NoYXJlZFVuaXQoKTsKLQotICAgIHZvaWQgc2V0RGV2aWNlSUQoY29uc3QgU3RyaW5n
JiBkZXZpY2VJRCkgeyBzZXRDYXB0dXJlRGV2aWNlKFN0cmluZyB7IGRldmljZUlEIH0sIDApOyB9
Ci0KLXByaXZhdGU6Ci0gICAgYm9vbCBoYXNBdWRpb1VuaXQoKSBjb25zdCBmaW5hbDsKLSAgICB2
b2lkIGNhcHR1cmVEZXZpY2VDaGFuZ2VkKCkgZmluYWw7Ci0gICAgT1NTdGF0dXMgcmVjb25maWd1
cmVBdWRpb1VuaXQoKSBmaW5hbDsKLSAgICB2b2lkIHJlc2V0U2FtcGxlUmF0ZSgpIGZpbmFsOwot
Ci0gICAgdm9pZCBjbGVhbnVwQXVkaW9Vbml0KCkgZmluYWw7Ci0gICAgT1NTdGF0dXMgc3RhcnRJ
bnRlcm5hbCgpIGZpbmFsOwotICAgIHZvaWQgc3RvcEludGVybmFsKCkgZmluYWw7Ci0gICAgYm9v
bCBpc1Byb2R1Y2luZ0RhdGEoKSBjb25zdCBmaW5hbDsKLQotICAgIHZvaWQgZGVsYXlTYW1wbGVz
KFNlY29uZHMpIGZpbmFsOwotCi0gICAgdm9pZCBzdGFydCgpOwotICAgIENhcGFiaWxpdHlWYWx1
ZU9yUmFuZ2Ugc2FtcGxlUmF0ZUNhcGFjaXRpZXMoKSBjb25zdCBmaW5hbCB7IHJldHVybiBDYXBh
YmlsaXR5VmFsdWVPclJhbmdlKDQ0MTAwLCA0ODAwMCk7IH0KLQotICAgIHZvaWQgdGljaygpOwot
Ci0gICAgdm9pZCByZW5kZXIoTW9ub3RvbmljVGltZSk7Ci0gICAgdm9pZCBlbWl0U2FtcGxlQnVm
ZmVycyh1aW50MzJfdCBmcmFtZUNvdW50KTsKLSAgICB2b2lkIHJlY29uZmlndXJlKCk7Ci0KLSAg
ICBzdGF0aWMgU2Vjb25kcyByZW5kZXJJbnRlcnZhbCgpIHsgcmV0dXJuIDIwX21zOyB9Ci0KLSAg
ICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQXVkaW9CdWZmZXJMaXN0PiBtX2F1ZGlvQnVmZmVyTGlzdDsK
LQotICAgIHVpbnQzMl90IG1fbWF4aW1pdW1GcmFtZUNvdW50OwotICAgIHVpbnQ2NF90IG1fc2Ft
cGxlc0VtaXR0ZWQgeyAwIH07Ci0gICAgdWludDY0X3QgbV9zYW1wbGVzUmVuZGVyZWQgeyAwIH07
Ci0KLSAgICBSZXRhaW5QdHI8Q01Gb3JtYXREZXNjcmlwdGlvblJlZj4gbV9mb3JtYXREZXNjcmlw
dGlvbjsKLSAgICBBdWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRpb24gbV9zdHJlYW1Gb3JtYXQ7Ci0K
LSAgICBWZWN0b3I8ZmxvYXQ+IG1fYmlwQm9wQnVmZmVyOwotICAgIGJvb2wgbV9oYXNBdWRpb1Vu
aXQgeyBmYWxzZSB9OwotICAgIGJvb2wgbV9pc1Byb2R1Y2luZ0RhdGEgeyBmYWxzZSB9OworbmFt
ZXNwYWNlIE1vY2tBdWRpb1NoYXJlZFVuaXQgewogCi0gICAgUnVuTG9vcDo6VGltZXI8TW9ja0F1
ZGlvU2hhcmVkVW5pdD4gbV90aW1lcjsKLSAgICBNb25vdG9uaWNUaW1lIG1fbGFzdFJlbmRlclRp
bWUgeyBNb25vdG9uaWNUaW1lOjpuYW4oKSB9OwotICAgIE1vbm90b25pY1RpbWUgbV9kZWxheVVu
dGlsOworQ29yZUF1ZGlvU2hhcmVkVW5pdCYgc2luZ2xldG9uKCk7CiAKLSAgICBSZWY8V29ya1F1
ZXVlPiBtX3dvcmtRdWV1ZTsKLSAgICB1bnNpZ25lZCBtX2NoYW5uZWxDb3VudCB7IDIgfTsKLX07
Cit9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL01vY2tBdWRpb1NoYXJlZFVuaXQubW0gYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvTW9ja0F1ZGlvU2hhcmVkVW5pdC5t
bQppbmRleCA3ZjFhYzgzNTk4MzZlZWFkODIyNTE3ZjNiYTNlZTU1MDFmY2VkNzhlLi44YmRiNWRl
MjQ2ZmJiNzI4Y2VlMzIyZDU4ZDdiNzllMTk1ZjY2OTc5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvTW9ja0F1ZGlvU2hhcmVkVW5pdC5tbQorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvTW9ja0F1ZGlvU2hhcmVk
VW5pdC5tbQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAy
MiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTQzLDYgKzQzLDkgQEAKICNpbXBvcnQgPEFWRm91bmRhdGlvbi9BVkF1ZGlv
QnVmZmVyLmg+CiAjaW1wb3J0IDxBdWRpb1Rvb2xib3gvQXVkaW9Db252ZXJ0ZXIuaD4KICNpbXBv
cnQgPENvcmVBdWRpby9Db3JlQXVkaW9UeXBlcy5oPgorI2luY2x1ZGUgPHd0Zi9SdW5Mb29wLmg+
CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi9Xb3JrUXVldWUuaD4KIAog
I2ltcG9ydCA8cGFsL2NmL0F1ZGlvVG9vbGJveFNvZnRMaW5rLmg+CiAjaW1wb3J0IDxwYWwvY2Yv
Q29yZU1lZGlhU29mdExpbmsuaD4KQEAgLTkwLDY3ICs5MywxMTEgQEAgQ2FwdHVyZVNvdXJjZU9y
RXJyb3IgTW9ja1JlYWx0aW1lQXVkaW9Tb3VyY2U6OmNyZWF0ZShTdHJpbmcmJiBkZXZpY2VJRCwg
QXRvbVN0cmkKICAgICBpZiAoIWRldmljZSkKICAgICAgICAgcmV0dXJuIHsgIk5vIG1vY2sgbWlj
cm9waG9uZSBkZXZpY2UiX3MgfTsKIAotICAgIE1vY2tBdWRpb1NoYXJlZFVuaXQ6OnNpbmdsZXRv
bigpLnNldERldmljZUlEKGRldmljZUlEKTsKKyAgICBNb2NrQXVkaW9TaGFyZWRVbml0OjpzaW5n
bGV0b24oKS5zZXRDYXB0dXJlRGV2aWNlKFN0cmluZyB7IGRldmljZUlEIH0sIDApOwogICAgIHJl
dHVybiBDb3JlQXVkaW9DYXB0dXJlU291cmNlOjpjcmVhdGVGb3JUZXN0aW5nKFdURk1vdmUoZGV2
aWNlSUQpLCBXVEZNb3ZlKG5hbWUpLCBXVEZNb3ZlKGhhc2hTYWx0KSwgY29uc3RyYWludHMsIE1v
Y2tBdWRpb1NoYXJlZFVuaXQ6OnNpbmdsZXRvbigpLCBwYWdlSWRlbnRpZmllcik7CiB9CiAKLU1v
Y2tBdWRpb1NoYXJlZFVuaXQmIE1vY2tBdWRpb1NoYXJlZFVuaXQ6OnNpbmdsZXRvbigpCi17Ci0g
ICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPE1vY2tBdWRpb1NoYXJlZFVuaXQ+IHNpbmdsZXRvbjsK
LSAgICByZXR1cm4gc2luZ2xldG9uOwotfQotCi1Nb2NrQXVkaW9TaGFyZWRVbml0OjpNb2NrQXVk
aW9TaGFyZWRVbml0KCkKLSAgICA6IG1fdGltZXIoUnVuTG9vcDo6Y3VycmVudCgpLCB0aGlzLCAm
TW9ja0F1ZGlvU2hhcmVkVW5pdDo6c3RhcnQpCi0gICAgLCBtX3dvcmtRdWV1ZShXb3JrUXVldWU6
OmNyZWF0ZSgiTW9ja0F1ZGlvU2hhcmVkVW5pdCBDYXB0dXJlIFF1ZXVlIiwgV29ya1F1ZXVlOjpR
T1M6OlVzZXJJbnRlcmFjdGl2ZSkpCitjbGFzcyBNb2NrQXVkaW9TaGFyZWRJbnRlcm5hbFVuaXQg
OiAgcHVibGljIENvcmVBdWRpb1NoYXJlZFVuaXQ6OkludGVybmFsVW5pdCB7CisgICAgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgTW9ja0F1ZGlvU2hhcmVkSW50ZXJuYWxV
bml0KCk7CisgICAgfk1vY2tBdWRpb1NoYXJlZEludGVybmFsVW5pdCgpOworCitwcml2YXRlOgor
ICAgIE9TU3RhdHVzIGluaXRpYWxpemUoKSBmaW5hbDsKKyAgICBPU1N0YXR1cyB1bmluaXRpYWxp
emUoKSBmaW5hbCB7IHJldHVybiAwOyB9CisgICAgT1NTdGF0dXMgc3RhcnQoKSBmaW5hbDsKKyAg
ICBPU1N0YXR1cyBzdG9wKCkgZmluYWw7CisgICAgT1NTdGF0dXMgc2V0KEF1ZGlvVW5pdFByb3Bl
cnR5SUQsIEF1ZGlvVW5pdFNjb3BlLCBBdWRpb1VuaXRFbGVtZW50LCBjb25zdCB2b2lkKiwgVUlu
dDMyKSBmaW5hbDsKKyAgICBPU1N0YXR1cyBnZXQoQXVkaW9Vbml0UHJvcGVydHlJRCwgQXVkaW9V
bml0U2NvcGUsIEF1ZGlvVW5pdEVsZW1lbnQsIHZvaWQqLCBVSW50MzIqKSBmaW5hbDsKKyAgICBP
U1N0YXR1cyByZW5kZXIoQXVkaW9Vbml0UmVuZGVyQWN0aW9uRmxhZ3MqLCBjb25zdCBBdWRpb1Rp
bWVTdGFtcCosIFVJbnQzMiwgVUludDMyLCBBdWRpb0J1ZmZlckxpc3QqKSBmaW5hbDsKKyAgICBP
U1N0YXR1cyBkZWZhdWx0SW5wdXREZXZpY2UodWludDMyX3QqKSBmaW5hbDsKKyAgICBPU1N0YXR1
cyBkZWZhdWx0T3V0cHV0RGV2aWNlKHVpbnQzMl90KikgZmluYWw7CisgICAgdm9pZCBkZWxheVNh
bXBsZXMoU2Vjb25kcykgZmluYWw7CisKKyAgICBpbnQgc2FtcGxlUmF0ZSgpIGNvbnN0IHsgcmV0
dXJuIG1fc3RyZWFtRm9ybWF0Lm1TYW1wbGVSYXRlOyB9CisgICAgdm9pZCB0aWNrKCk7CisKKyAg
ICB2b2lkIGdlbmVyYXRlU2FtcGxlQnVmZmVycyhNb25vdG9uaWNUaW1lKTsKKyAgICB2b2lkIGVt
aXRTYW1wbGVCdWZmZXJzKHVpbnQzMl90IGZyYW1lQ291bnQpOworICAgIHZvaWQgcmVjb25maWd1
cmUoKTsKKworICAgIHN0YXRpYyBTZWNvbmRzIHJlbmRlckludGVydmFsKCkgeyByZXR1cm4gMjBf
bXM7IH0KKworICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJBdWRpb0J1ZmZlckxpc3Q+IG1fYXVkaW9C
dWZmZXJMaXN0OworCisgICAgdWludDMyX3QgbV9tYXhpbWl1bUZyYW1lQ291bnQ7CisgICAgdWlu
dDY0X3QgbV9zYW1wbGVzRW1pdHRlZCB7IDAgfTsKKyAgICB1aW50NjRfdCBtX3NhbXBsZXNSZW5k
ZXJlZCB7IDAgfTsKKworICAgIFJldGFpblB0cjxDTUZvcm1hdERlc2NyaXB0aW9uUmVmPiBtX2Zv
cm1hdERlc2NyaXB0aW9uOworICAgIEF1ZGlvU3RyZWFtQmFzaWNEZXNjcmlwdGlvbiBtX291dHB1
dFN0cmVhbUZvcm1hdDsKKyAgICBBdWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRpb24gbV9zdHJlYW1G
b3JtYXQ7CisKKyAgICBWZWN0b3I8ZmxvYXQ+IG1fYmlwQm9wQnVmZmVyOworICAgIGJvb2wgbV9o
YXNBdWRpb1VuaXQgeyBmYWxzZSB9OworICAgIGJvb2wgbV9pc1Byb2R1Y2luZ0RhdGEgeyBmYWxz
ZSB9OworICAgIGJvb2wgbV9lbmFibGVFY2hvQ2FuY2VsbGF0aW9uIHsgdHJ1ZSB9OworICAgIFJ1
bkxvb3A6OlRpbWVyPE1vY2tBdWRpb1NoYXJlZEludGVybmFsVW5pdD4gbV90aW1lcjsKKyAgICBN
b25vdG9uaWNUaW1lIG1fbGFzdFJlbmRlclRpbWUgeyBNb25vdG9uaWNUaW1lOjpuYW4oKSB9Owor
ICAgIE1vbm90b25pY1RpbWUgbV9kZWxheVVudGlsOworCisgICAgUmVmPFdvcmtRdWV1ZT4gbV93
b3JrUXVldWU7CisgICAgdW5zaWduZWQgbV9jaGFubmVsQ291bnQgeyAyIH07CisgICAgCisgICAg
QVVSZW5kZXJDYWxsYmFja1N0cnVjdCBtX21pY3JvcGhvbmVDYWxsYmFjazsKKyAgICBBVVJlbmRl
ckNhbGxiYWNrU3RydWN0IG1fc3BlYWtlckNhbGxiYWNrOworfTsKKworQ29yZUF1ZGlvU2hhcmVk
VW5pdCYgTW9ja0F1ZGlvU2hhcmVkVW5pdDo6c2luZ2xldG9uKCkKIHsKKyAgICBzdGF0aWMgTmV2
ZXJEZXN0cm95ZWQ8Q29yZUF1ZGlvU2hhcmVkVW5pdD4gdW5pdDsKKyAgICBzdGF0aWMgc3RkOjpv
bmNlX2ZsYWcgb25jZUZsYWc7CisgICAgc3RkOjpjYWxsX29uY2Uob25jZUZsYWcsIFsmXSAoKSB7
CisgICAgICAgIHVuaXQtPnNldFNhbXBsZVJhdGVSYW5nZShDYXBhYmlsaXR5VmFsdWVPclJhbmdl
KDQ0MTAwLCA0ODAwMCkpOworICAgICAgICB1bml0LT5zZXRJbnRlcm5hbFVuaXRDcmVhdGlvbkNh
bGxiYWNrKFtdIHsKKyAgICAgICAgICAgIFVuaXF1ZVJlZjxDb3JlQXVkaW9TaGFyZWRVbml0OjpJ
bnRlcm5hbFVuaXQ+IHJlc3VsdCA9IG1ha2VVbmlxdWVSZWY8TW9ja0F1ZGlvU2hhcmVkSW50ZXJu
YWxVbml0PigpOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfSk7CisgICAg
ICAgIHVuaXQtPnNldEludGVybmFsVW5pdEdldFNhbXBsZVJhdGVDYWxsYmFjayhbXSB7IHJldHVy
biA0NDEwMDsgfSk7CisgICAgfSk7CisgICAgcmV0dXJuIHVuaXQ7CiB9CiAKLXZvaWQgTW9ja0F1
ZGlvU2hhcmVkVW5pdDo6cmVzZXRTYW1wbGVSYXRlKCkKK3N0YXRpYyBBdWRpb1N0cmVhbUJhc2lj
RGVzY3JpcHRpb24gY3JlYXRlQXVkaW9Gb3JtYXQoRmxvYXQ2NCBzYW1wbGVSYXRlLCBVSW50MzIg
Y2hhbm5lbENvdW50KQogewotICAgIGlmIChhdXRvIGRldmljZSA9IE1vY2tSZWFsdGltZU1lZGlh
U291cmNlQ2VudGVyOjptb2NrRGV2aWNlV2l0aFBlcnNpc3RlbnRJRChwZXJzaXN0ZW50SUQoKSkp
Ci0gICAgICAgIHNldFNhbXBsZVJhdGUoc3RkOjpnZXQ8TW9ja01pY3JvcGhvbmVQcm9wZXJ0aWVz
PihkZXZpY2UtPnByb3BlcnRpZXMpLmRlZmF1bHRTYW1wbGVSYXRlKTsKKyAgICBBdWRpb1N0cmVh
bUJhc2ljRGVzY3JpcHRpb24gZm9ybWF0OworICAgIGNvbnN0IGludCBieXRlc1BlckZsb2F0ID0g
c2l6ZW9mKEZsb2F0MzIpOworICAgIGNvbnN0IGludCBiaXRzUGVyQnl0ZSA9IDg7CisgICAgY29u
c3QgYm9vbCBpc0Zsb2F0ID0gdHJ1ZTsKKyAgICBjb25zdCBib29sIGlzQmlnRW5kaWFuID0gZmFs
c2U7CisgICAgY29uc3QgYm9vbCBpc05vbkludGVybGVhdmVkID0gdHJ1ZTsKKyAgICBGaWxsT3V0
QVNCREZvckxQQ00oZm9ybWF0LCBzYW1wbGVSYXRlLCBjaGFubmVsQ291bnQsIGJpdHNQZXJCeXRl
ICogYnl0ZXNQZXJGbG9hdCwgYml0c1BlckJ5dGUgKiBieXRlc1BlckZsb2F0LCBpc0Zsb2F0LCBp
c0JpZ0VuZGlhbiwgaXNOb25JbnRlcmxlYXZlZCk7CisgICAgcmV0dXJuIGZvcm1hdDsKIH0KIAot
Ym9vbCBNb2NrQXVkaW9TaGFyZWRVbml0OjpoYXNBdWRpb1VuaXQoKSBjb25zdAorTW9ja0F1ZGlv
U2hhcmVkSW50ZXJuYWxVbml0OjpNb2NrQXVkaW9TaGFyZWRJbnRlcm5hbFVuaXQoKQorICAgIDog
bV90aW1lcihSdW5Mb29wOjpjdXJyZW50KCksIFt0aGlzXSB7IHRoaXMtPnN0YXJ0KCk7IH0pCisg
ICAgLCBtX3dvcmtRdWV1ZShXb3JrUXVldWU6OmNyZWF0ZSgiTW9ja0F1ZGlvU2hhcmVkSW50ZXJu
YWxVbml0IENhcHR1cmUgUXVldWUiLCBXb3JrUXVldWU6OlFPUzo6VXNlckludGVyYWN0aXZlKSkK
IHsKLSAgICByZXR1cm4gbV9oYXNBdWRpb1VuaXQ7CisgICAgbV9zdHJlYW1Gb3JtYXQgPSBtX291
dHB1dFN0cmVhbUZvcm1hdCA9IGNyZWF0ZUF1ZGlvRm9ybWF0KDQ0MTAwLCAyKTsKIH0KIAotdm9p
ZCBNb2NrQXVkaW9TaGFyZWRVbml0OjpjYXB0dXJlRGV2aWNlQ2hhbmdlZCgpCitNb2NrQXVkaW9T
aGFyZWRJbnRlcm5hbFVuaXQ6On5Nb2NrQXVkaW9TaGFyZWRJbnRlcm5hbFVuaXQoKQogewotICAg
IHJlY29uZmlndXJlQXVkaW9Vbml0KCk7CisgICAgQVNTRVJUKCFtX2lzUHJvZHVjaW5nRGF0YSk7
CiB9CiAKLU9TU3RhdHVzIE1vY2tBdWRpb1NoYXJlZFVuaXQ6OnJlY29uZmlndXJlQXVkaW9Vbml0
KCkKK09TU3RhdHVzIE1vY2tBdWRpb1NoYXJlZEludGVybmFsVW5pdDo6aW5pdGlhbGl6ZSgpCiB7
Ci0gICAgaWYgKCFoYXNBdWRpb1VuaXQoKSkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgQVNTRVJU
KG1fb3V0cHV0U3RyZWFtRm9ybWF0Lm1TYW1wbGVSYXRlID09IG1fc3RyZWFtRm9ybWF0Lm1TYW1w
bGVSYXRlKTsKKyAgICBpZiAobV9vdXRwdXRTdHJlYW1Gb3JtYXQubVNhbXBsZVJhdGUgIT0gbV9z
dHJlYW1Gb3JtYXQubVNhbXBsZVJhdGUpCisgICAgICAgIHJldHVybiAtMTsKIAotICAgIG1fbGFz
dFJlbmRlclRpbWUgPSBNb25vdG9uaWNUaW1lOjpuYW4oKTsKLSAgICBtX3dvcmtRdWV1ZS0+ZGlz
cGF0Y2goW3RoaXNdIHsKLSAgICAgICAgcmVjb25maWd1cmUoKTsKLSAgICAgICAgY2FsbE9uTWFp
blRocmVhZChbdGhpc10gewotICAgICAgICAgICAgc3RhcnRJbnRlcm5hbCgpOwotICAgICAgICB9
KTsKLSAgICB9KTsKICAgICByZXR1cm4gMDsKIH0KIAotdm9pZCBNb2NrQXVkaW9TaGFyZWRVbml0
OjpjbGVhbnVwQXVkaW9Vbml0KCkKLXsKLSAgICBtX2hhc0F1ZGlvVW5pdCA9IGZhbHNlOwotICAg
IG1faXNQcm9kdWNpbmdEYXRhID0gZmFsc2U7Ci0gICAgbV9sYXN0UmVuZGVyVGltZSA9IE1vbm90
b25pY1RpbWU6Om5hbigpOwotfQotCi1PU1N0YXR1cyBNb2NrQXVkaW9TaGFyZWRVbml0OjpzdGFy
dEludGVybmFsKCkKLXsKLSAgICBzdGFydCgpOwotICAgIHJldHVybiAwOwotfQotCi12b2lkIE1v
Y2tBdWRpb1NoYXJlZFVuaXQ6OnN0YXJ0KCkKK09TU3RhdHVzIE1vY2tBdWRpb1NoYXJlZEludGVy
bmFsVW5pdDo6c3RhcnQoKQogewogICAgIGlmICghbV9oYXNBdWRpb1VuaXQpCiAgICAgICAgIG1f
aGFzQXVkaW9Vbml0ID0gdHJ1ZTsKQEAgLTE1OCwzMCArMjA1LDI5IEBAIHZvaWQgTW9ja0F1ZGlv
U2hhcmVkVW5pdDo6c3RhcnQoKQogICAgIG1fbGFzdFJlbmRlclRpbWUgPSBNb25vdG9uaWNUaW1l
Ojpub3coKTsKICAgICBtX2lzUHJvZHVjaW5nRGF0YSA9IHRydWU7CiAgICAgbV93b3JrUXVldWUt
PmRpc3BhdGNoKFt0aGlzLCByZW5kZXJUaW1lID0gbV9sYXN0UmVuZGVyVGltZV0gewotICAgICAg
ICByZW5kZXIocmVuZGVyVGltZSk7CisgICAgICAgIGdlbmVyYXRlU2FtcGxlQnVmZmVycyhyZW5k
ZXJUaW1lKTsKICAgICB9KTsKKyAgICByZXR1cm4gMDsKIH0KIAotdm9pZCBNb2NrQXVkaW9TaGFy
ZWRVbml0OjpzdG9wSW50ZXJuYWwoKQorT1NTdGF0dXMgTW9ja0F1ZGlvU2hhcmVkSW50ZXJuYWxV
bml0OjpzdG9wKCkKIHsKICAgICBtX2lzUHJvZHVjaW5nRGF0YSA9IGZhbHNlOwotICAgIGlmICgh
bV9oYXNBdWRpb1VuaXQpCi0gICAgICAgIHJldHVybjsKLSAgICBtX2xhc3RSZW5kZXJUaW1lID0g
TW9ub3RvbmljVGltZTo6bmFuKCk7Ci19CisgICAgaWYgKG1faGFzQXVkaW9Vbml0KQorICAgICAg
ICBtX2xhc3RSZW5kZXJUaW1lID0gTW9ub3RvbmljVGltZTo6bmFuKCk7CiAKLWJvb2wgTW9ja0F1
ZGlvU2hhcmVkVW5pdDo6aXNQcm9kdWNpbmdEYXRhKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9p
c1Byb2R1Y2luZ0RhdGE7CisgICAgbV93b3JrUXVldWUtPmRpc3BhdGNoU3luYyhbXSB7IH0pOwor
CisgICAgcmV0dXJuIDA7CiB9CiAKLXZvaWQgTW9ja0F1ZGlvU2hhcmVkVW5pdDo6ZGVsYXlTYW1w
bGVzKFNlY29uZHMgZGVsdGEpCit2b2lkIE1vY2tBdWRpb1NoYXJlZEludGVybmFsVW5pdDo6ZGVs
YXlTYW1wbGVzKFNlY29uZHMgZGVsdGEpCiB7Ci0gICAgc3RvcEludGVybmFsKCk7CisgICAgc3Rv
cCgpOwogICAgIG1fdGltZXIuc3RhcnRPbmVTaG90KGRlbHRhKTsKIH0KIAotdm9pZCBNb2NrQXVk
aW9TaGFyZWRVbml0OjpyZWNvbmZpZ3VyZSgpCit2b2lkIE1vY2tBdWRpb1NoYXJlZEludGVybmFs
VW5pdDo6cmVjb25maWd1cmUoKQogewogICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOwogCkBA
IC0xOTEsMTQgKzIzNyw2IEBAIHZvaWQgTW9ja0F1ZGlvU2hhcmVkVW5pdDo6cmVjb25maWd1cmUo
KQogICAgIG1fbWF4aW1pdW1GcmFtZUNvdW50ID0gV1RGOjpyb3VuZFVwVG9Qb3dlck9mVHdvKHJl
bmRlckludGVydmFsKCkuc2Vjb25kcygpICogcmF0ZSAqIDIpOwogICAgIEFTU0VSVChtX21heGlt
aXVtRnJhbWVDb3VudCk7CiAKLSAgICBjb25zdCBpbnQgYnl0ZXNQZXJGbG9hdCA9IHNpemVvZihG
bG9hdDMyKTsKLSAgICBjb25zdCBpbnQgYml0c1BlckJ5dGUgPSA4OwotICAgIGNvbnN0IGludCBj
aGFubmVsQ291bnQgPSBtX2NoYW5uZWxDb3VudDsKLSAgICBjb25zdCBib29sIGlzRmxvYXQgPSB0
cnVlOwotICAgIGNvbnN0IGJvb2wgaXNCaWdFbmRpYW4gPSBmYWxzZTsKLSAgICBjb25zdCBib29s
IGlzTm9uSW50ZXJsZWF2ZWQgPSB0cnVlOwotICAgIEZpbGxPdXRBU0JERm9yTFBDTShtX3N0cmVh
bUZvcm1hdCwgcmF0ZSwgY2hhbm5lbENvdW50LCBiaXRzUGVyQnl0ZSAqIGJ5dGVzUGVyRmxvYXQs
IGJpdHNQZXJCeXRlICogYnl0ZXNQZXJGbG9hdCwgaXNGbG9hdCwgaXNCaWdFbmRpYW4sIGlzTm9u
SW50ZXJsZWF2ZWQpOwotCiAgICAgbV9hdWRpb0J1ZmZlckxpc3QgPSBtYWtlVW5pcXVlPFdlYkF1
ZGlvQnVmZmVyTGlzdD4obV9zdHJlYW1Gb3JtYXQsIG1fbWF4aW1pdW1GcmFtZUNvdW50KTsKIAog
ICAgIENNRm9ybWF0RGVzY3JpcHRpb25SZWYgZm9ybWF0RGVzY3JpcHRpb247CkBAIC0yMTUsMjUg
KzI1MywzOCBAQCB2b2lkIE1vY2tBdWRpb1NoYXJlZFVuaXQ6OnJlY29uZmlndXJlKCkKIAogICAg
IGFkZEh1bShCaXBCb3BWb2x1bWUsIEJpcEZyZXF1ZW5jeSwgcmF0ZSwgMCwgbV9iaXBCb3BCdWZm
ZXIuZGF0YSgpICsgYmlwU3RhcnQsIGJpcEJvcFNhbXBsZUNvdW50KTsKICAgICBhZGRIdW0oQmlw
Qm9wVm9sdW1lLCBCb3BGcmVxdWVuY3ksIHJhdGUsIDAsIG1fYmlwQm9wQnVmZmVyLmRhdGEoKSAr
IGJvcFN0YXJ0LCBiaXBCb3BTYW1wbGVDb3VudCk7Ci0gICAgaWYgKCFlbmFibGVFY2hvQ2FuY2Vs
bGF0aW9uKCkpCisgICAgaWYgKCFtX2VuYWJsZUVjaG9DYW5jZWxsYXRpb24pCiAgICAgICAgIGFk
ZEh1bShOb2lzZVZvbHVtZSwgTm9pc2VGcmVxdWVuY3ksIHJhdGUsIDAsIG1fYmlwQm9wQnVmZmVy
LmRhdGEoKSwgc2FtcGxlQ291bnQpOwogfQogCi12b2lkIE1vY2tBdWRpb1NoYXJlZFVuaXQ6OmVt
aXRTYW1wbGVCdWZmZXJzKHVpbnQzMl90IGZyYW1lQ291bnQpCit2b2lkIE1vY2tBdWRpb1NoYXJl
ZEludGVybmFsVW5pdDo6ZW1pdFNhbXBsZUJ1ZmZlcnModWludDMyX3QgZnJhbWVDb3VudCkKIHsK
ICAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKICAgICBBU1NFUlQobV9mb3JtYXREZXNjcmlw
dGlvbik7CiAKICAgICBDTVRpbWUgc3RhcnRUaW1lID0gUEFMOjpDTVRpbWVNYWtlKG1fc2FtcGxl
c0VtaXR0ZWQsIHNhbXBsZVJhdGUoKSk7CisgICAgYXV0byBzYW1wbGVUaW1lID0gUEFMOjp0b01l
ZGlhVGltZShzdGFydFRpbWUpLnRvRmxvYXQoKTsKICAgICBtX3NhbXBsZXNFbWl0dGVkICs9IGZy
YW1lQ291bnQ7CiAKLSAgICBhdWRpb1NhbXBsZXNBdmFpbGFibGUoUEFMOjp0b01lZGlhVGltZShz
dGFydFRpbWUpLCAqbV9hdWRpb0J1ZmZlckxpc3QsIENBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbiht
X3N0cmVhbUZvcm1hdCksIGZyYW1lQ291bnQpOworICAgIGF1dG8qIGJ1ZmZlckxpc3QgPSBtX2F1
ZGlvQnVmZmVyTGlzdC0+bGlzdCgpOworICAgIEF1ZGlvVW5pdFJlbmRlckFjdGlvbkZsYWdzIGlv
QWN0aW9uRmxhZ3MgPSAwOworICAgIAorICAgIEF1ZGlvVGltZVN0YW1wIHRpbWVTdGFtcDsKKyAg
ICBtZW1zZXQoJnRpbWVTdGFtcCwgMCwgc2l6ZW9mKEF1ZGlvVGltZVN0YW1wKSk7CisgICAgdGlt
ZVN0YW1wLm1TYW1wbGVUaW1lID0gc2FtcGxlVGltZTsKKyAgICB0aW1lU3RhbXAubUhvc3RUaW1l
ID0gc3RhdGljX2Nhc3Q8VUludDY0PihzYW1wbGVUaW1lKTsKKyAgICBpZiAobV9taWNyb3Bob25l
Q2FsbGJhY2suaW5wdXRQcm9jKQorICAgICAgICBtX21pY3JvcGhvbmVDYWxsYmFjay5pbnB1dFBy
b2MobV9taWNyb3Bob25lQ2FsbGJhY2suaW5wdXRQcm9jUmVmQ29uLCAmaW9BY3Rpb25GbGFncywg
JnRpbWVTdGFtcCwgMSwgZnJhbWVDb3VudCwgYnVmZmVyTGlzdCk7CisKKyAgICBpb0FjdGlvbkZs
YWdzID0gMDsKKyAgICBpZiAobV9zcGVha2VyQ2FsbGJhY2suaW5wdXRQcm9jKQorICAgICAgICBt
X3NwZWFrZXJDYWxsYmFjay5pbnB1dFByb2MobV9zcGVha2VyQ2FsbGJhY2suaW5wdXRQcm9jUmVm
Q29uLCAmaW9BY3Rpb25GbGFncywgJnRpbWVTdGFtcCwgMSwgZnJhbWVDb3VudCwgYnVmZmVyTGlz
dCk7CiB9CiAKLXZvaWQgTW9ja0F1ZGlvU2hhcmVkVW5pdDo6cmVuZGVyKE1vbm90b25pY1RpbWUg
cmVuZGVyVGltZSkKK3ZvaWQgTW9ja0F1ZGlvU2hhcmVkSW50ZXJuYWxVbml0OjpnZW5lcmF0ZVNh
bXBsZUJ1ZmZlcnMoTW9ub3RvbmljVGltZSByZW5kZXJUaW1lKQogewogICAgIEFTU0VSVCghaXNN
YWluVGhyZWFkKCkpOwotICAgIGlmICghaXNQcm9kdWNpbmdEYXRhKCkpCisgICAgaWYgKCFtX2lz
UHJvZHVjaW5nRGF0YSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgYXV0byBkZWx0YSA9IHJlbmRl
ckludGVydmFsKCk7CkBAIC0yNDUsNyArMjk2LDcgQEAgdm9pZCBNb2NrQXVkaW9TaGFyZWRVbml0
OjpyZW5kZXIoTW9ub3RvbmljVGltZSByZW5kZXJUaW1lKQogICAgICAgICBuZXh0UmVuZGVyRGVs
YXkgPSAwX3M7CiAgICAgfQogICAgIG1fd29ya1F1ZXVlLT5kaXNwYXRjaEFmdGVyKG5leHRSZW5k
ZXJEZWxheSwgW3RoaXMsIG5leHRSZW5kZXJUaW1lXSB7Ci0gICAgICAgIHJlbmRlcihuZXh0UmVu
ZGVyVGltZSk7CisgICAgICAgIGdlbmVyYXRlU2FtcGxlQnVmZmVycyhuZXh0UmVuZGVyVGltZSk7
CiAgICAgfSk7CiAKICAgICBpZiAoIW1fYXVkaW9CdWZmZXJMaXN0IHx8ICFtX2JpcEJvcEJ1ZmZl
ci5zaXplKCkpCkBAIC0yNzAsNiArMzIxLDgwIEBAIHZvaWQgTW9ja0F1ZGlvU2hhcmVkVW5pdDo6
cmVuZGVyKE1vbm90b25pY1RpbWUgcmVuZGVyVGltZSkKICAgICB9CiB9CiAKK09TU3RhdHVzIE1v
Y2tBdWRpb1NoYXJlZEludGVybmFsVW5pdDo6cmVuZGVyKEF1ZGlvVW5pdFJlbmRlckFjdGlvbkZs
YWdzKiwgY29uc3QgQXVkaW9UaW1lU3RhbXAqLCBVSW50MzIsIFVJbnQzMiBmcmFtZUNvdW50LCBB
dWRpb0J1ZmZlckxpc3QqIGJ1ZmZlcikKK3sKKyAgICBhdXRvKiBzb3VyY2VCdWZmZXIgPSBtX2F1
ZGlvQnVmZmVyTGlzdC0+bGlzdCgpOworICAgIGlmIChidWZmZXItPm1OdW1iZXJCdWZmZXJzID4g
c291cmNlQnVmZmVyLT5tTnVtYmVyQnVmZmVycykKKyAgICAgICAgcmV0dXJuIGtBdWRpb19QYXJh
bUVycm9yOworCisgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IGJ1ZmZlci0+bU51bWJlckJ1
ZmZlcnM7IGkrKykgeworICAgICAgICBhdXRvKiBzb3VyY2UgPSBzdGF0aWNfY2FzdDx1aW50OF90
Kj4oc291cmNlQnVmZmVyLT5tQnVmZmVyc1tpXS5tRGF0YSk7CisgICAgICAgIGF1dG8qIGRlc3Rp
bmF0aW9uID0gc3RhdGljX2Nhc3Q8dWludDhfdCo+KGJ1ZmZlci0+bUJ1ZmZlcnNbaV0ubURhdGEp
OworICAgICAgICBtZW1jcHkoZGVzdGluYXRpb24sIHNvdXJjZSwgZnJhbWVDb3VudCAqIG1fc3Ry
ZWFtRm9ybWF0Lm1CeXRlc1BlclBhY2tldCk7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisK
K09TU3RhdHVzIE1vY2tBdWRpb1NoYXJlZEludGVybmFsVW5pdDo6c2V0KEF1ZGlvVW5pdFByb3Bl
cnR5SUQgcHJvcGVydHksIEF1ZGlvVW5pdFNjb3BlIHNjb3BlLCBBdWRpb1VuaXRFbGVtZW50LCBj
b25zdCB2b2lkKiB2YWx1ZSwgVUludDMyKQoreworICAgIGlmIChwcm9wZXJ0eSA9PSBrQXVkaW9V
bml0UHJvcGVydHlfU3RyZWFtRm9ybWF0KSB7CisgICAgICAgIGF1dG8mIHR5cGVkVmFsdWUgPSAq
c3RhdGljX2Nhc3Q8Y29uc3QgQXVkaW9TdHJlYW1CYXNpY0Rlc2NyaXB0aW9uKj4odmFsdWUpOwor
ICAgICAgICBpZiAoc2NvcGUgPT0ga0F1ZGlvVW5pdFNjb3BlX0lucHV0KQorICAgICAgICAgICAg
bV9zdHJlYW1Gb3JtYXQgPSB0eXBlZFZhbHVlOworICAgICAgICBlbHNlCisgICAgICAgICAgICBt
X291dHB1dFN0cmVhbUZvcm1hdCA9IHR5cGVkVmFsdWU7CisgICAgICAgIHJldHVybiAwOworICAg
IH0KKyAgICBpZiAocHJvcGVydHkgPT0ga0FVVm9pY2VJT1Byb3BlcnR5X1ZvaWNlUHJvY2Vzc2lu
Z0VuYWJsZUFHQykgeworICAgICAgICBtX2VuYWJsZUVjaG9DYW5jZWxsYXRpb24gPSAhISpzdGF0
aWNfY2FzdDxjb25zdCB1aW50MzJfdCo+KHZhbHVlKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAg
fQorICAgIGlmIChwcm9wZXJ0eSA9PSBrQXVkaW9PdXRwdXRVbml0UHJvcGVydHlfU2V0SW5wdXRD
YWxsYmFjaykgeworICAgICAgICBtX21pY3JvcGhvbmVDYWxsYmFjayA9ICpzdGF0aWNfY2FzdDxj
b25zdCBBVVJlbmRlckNhbGxiYWNrU3RydWN0Kj4odmFsdWUpOworICAgICAgICByZXR1cm4gMDsK
KyAgICB9CisgICAgaWYgKHByb3BlcnR5ID09IGtBdWRpb1VuaXRQcm9wZXJ0eV9TZXRSZW5kZXJD
YWxsYmFjaykgeworICAgICAgICBtX3NwZWFrZXJDYWxsYmFjayA9ICpzdGF0aWNfY2FzdDxjb25z
dCBBVVJlbmRlckNhbGxiYWNrU3RydWN0Kj4odmFsdWUpOworICAgICAgICByZXR1cm4gMDsKKyAg
ICB9CisgICAgaWYgKHByb3BlcnR5ID09IGtBdWRpb091dHB1dFVuaXRQcm9wZXJ0eV9DdXJyZW50
RGV2aWNlKSB7CisgICAgICAgIEFTU0VSVCghKnN0YXRpY19jYXN0PGNvbnN0IHVpbnQzMl90Kj4o
dmFsdWUpKTsKKyAgICAgICAgaWYgKGF1dG8gZGV2aWNlID0gTW9ja1JlYWx0aW1lTWVkaWFTb3Vy
Y2VDZW50ZXI6Om1vY2tEZXZpY2VXaXRoUGVyc2lzdGVudElEKE1vY2tBdWRpb1NoYXJlZFVuaXQ6
OnNpbmdsZXRvbigpLnBlcnNpc3RlbnRJREZvclRlc3RpbmcoKSkpCisgICAgICAgICAgICBtX3N0
cmVhbUZvcm1hdC5tU2FtcGxlUmF0ZSA9IG1fb3V0cHV0U3RyZWFtRm9ybWF0Lm1TYW1wbGVSYXRl
ID0gc3RkOjpnZXQ8TW9ja01pY3JvcGhvbmVQcm9wZXJ0aWVzPihkZXZpY2UtPnByb3BlcnRpZXMp
LmRlZmF1bHRTYW1wbGVSYXRlOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgCisgICAg
cmV0dXJuIDA7Cit9CisKK09TU3RhdHVzIE1vY2tBdWRpb1NoYXJlZEludGVybmFsVW5pdDo6Z2V0
KEF1ZGlvVW5pdFByb3BlcnR5SUQgcHJvcGVydHksIEF1ZGlvVW5pdFNjb3BlIHNjb3BlLCBBdWRp
b1VuaXRFbGVtZW50LCB2b2lkKiB2YWx1ZSwgVUludDMyKiB2YWx1ZVNpemUpCit7CisgICAgaWYg
KHByb3BlcnR5ID09IGtBdWRpb1VuaXRQcm9wZXJ0eV9TdHJlYW1Gb3JtYXQpIHsKKyAgICAgICAg
YXV0byYgdHlwZWRWYWx1ZSA9ICpzdGF0aWNfY2FzdDxBdWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRp
b24qPih2YWx1ZSk7CisgICAgICAgIGlmIChzY29wZSA9PSBrQXVkaW9Vbml0U2NvcGVfSW5wdXQp
CisgICAgICAgICAgICB0eXBlZFZhbHVlID0gbV9zdHJlYW1Gb3JtYXQ7CisgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIHR5cGVkVmFsdWUgPSBtX291dHB1dFN0cmVhbUZvcm1hdDsKKyAgICAgICAg
KnZhbHVlU2l6ZSA9IHNpemVvZihBdWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRpb24pOworICAgICAg
ICByZXR1cm4gMDsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworT1NTdGF0dXMgTW9ja0F1
ZGlvU2hhcmVkSW50ZXJuYWxVbml0OjpkZWZhdWx0SW5wdXREZXZpY2UodWludDMyX3QqIGRldmlj
ZSkKK3sKKyAgICAqZGV2aWNlID0gMDsKKyAgICByZXR1cm4gMDsKK30KKworT1NTdGF0dXMgTW9j
a0F1ZGlvU2hhcmVkSW50ZXJuYWxVbml0OjpkZWZhdWx0T3V0cHV0RGV2aWNlKHVpbnQzMl90KiBk
ZXZpY2UpCit7CisgICAgKmRldmljZSA9IDA7CisgICAgcmV0dXJuIDA7Cit9CisKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0pCmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXgg
YWJjODBmYzIxYjYzOTg3YTAwMzUwY2YyMDNkMDc0ZWRlYzM2MDE5OC4uNzU0NTFjZDRmNWFiMzAx
YWQ2MDg1MmU3ZjY4ODI5ZTMyYTU4NjQ1ZiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDIyLTA1
LTEwICBZb3Vlbm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgYSBi
ZXR0ZXIgbW9jayBmb3IgYXVkaW8gdW5pdHMgdXNlZCBieSBDb3JlQXVkaW9TaGFyZWRVbml0Cisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNDAyMzEKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGZhc3QvbWVk
aWFzdHJlYW0vYXVkaW8tdW5pdC1yZWNvbmZpZ3VyZS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAg
ICAgICAqIGZhc3QvbWVkaWFzdHJlYW0vYXVkaW8tdW5pdC1yZWNvbmZpZ3VyZS5odG1sOiBBZGRl
ZC4KKwogMjAyMi0wNS0wOSAgT3Jpb2wgQnJ1ZmF1ICA8b2JydWZhdUBpZ2FsaWEuY29tPgogCiAg
ICAgICAgIFtjc3NvbV0gRG9uJ3QgaW5kZXggcGVyc3BlY3RpdmUvdHJhbnNmb3JtLW9yaWdpbi0q
IGluIGNvbXB1dGVkIHN0eWxlcwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9tZWRpYXN0
cmVhbS9hdWRpby11bml0LXJlY29uZmlndXJlLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zh
c3QvbWVkaWFzdHJlYW0vYXVkaW8tdW5pdC1yZWNvbmZpZ3VyZS1leHBlY3RlZC50eHQKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uYWM5NjIzODJjN2I1N2FjNGUxZTM4ZWJlNzZmYzg0ZTAwNzY4YTc3MAotLS0gL2Rldi9u
dWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvbWVkaWFzdHJlYW0vYXVkaW8tdW5pdC1yZWNvbmZp
Z3VyZS1leHBlY3RlZC50eHQKQEAgLTAsMCArMSw1IEBACisKKworUEFTUyBSZWNvbmZpZ3VyZSBh
dWRpbyBzYW1wbGUgcmF0ZQorUEFTUyBSZWNvbmZpZ3VyZSBhdWRpbyB1bml0IHdoZW4gYmVpbmcg
aW4gcmVuZGVyLW9ubHkgbW9kZQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L21lZGlh
c3RyZWFtL2F1ZGlvLXVuaXQtcmVjb25maWd1cmUuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvbWVk
aWFzdHJlYW0vYXVkaW8tdW5pdC1yZWNvbmZpZ3VyZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY2NDM1N2Jm
NGRjYzY2MGQyZjJjZmRlMTI5MjMxMzEwNmQ4NGU3OWEKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlv
dXRUZXN0cy9mYXN0L21lZGlhc3RyZWFtL2F1ZGlvLXVuaXQtcmVjb25maWd1cmUuaHRtbApAQCAt
MCwwICsxLDcwIEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+CisgICAgPG1ldGEg
Y2hhcnNldD0idXRmLTgiPgorICAgIDxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvdGVzdGhh
cm5lc3MuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvdGVz
dGhhcm5lc3NyZXBvcnQuanMiPjwvc2NyaXB0PgorIDwvaGVhZD4KKzxib2R5PgorPHZpZGVvIGlk
PSJ2aWRlbzEiIGF1dG9wbGF5IHBsYXlzSW5saW5lIGNvbnRyb2xzPjwvdmlkZW8+Cis8dmlkZW8g
aWQ9InZpZGVvMiIgYXV0b3BsYXkgcGxheXNJbmxpbmUgY29udHJvbHM+PC92aWRlbz4KKzxzY3Jp
cHQ+Citwcm9taXNlX3Rlc3QoYXN5bmMgKHRlc3QpID0+IHsKKyAgICBjb25zdCBjb250ZXh0ID0g
bmV3IEF1ZGlvQ29udGV4dCgpOworICAgIGNvbnN0IG9zY2lsbGF0b3IgPSBjb250ZXh0LmNyZWF0
ZU9zY2lsbGF0b3IoKTsKKyAgICBjb25zdCBzdHJlYW1EZXN0aW5hdGlvbiA9IGNvbnRleHQuY3Jl
YXRlTWVkaWFTdHJlYW1EZXN0aW5hdGlvbigpOworICAgIG9zY2lsbGF0b3IuY29ubmVjdChzdHJl
YW1EZXN0aW5hdGlvbik7CisgICAgdmlkZW8xLnNyY09iamVjdCA9IHN0cmVhbURlc3RpbmF0aW9u
LnN0cmVhbTsKKyAgICAvLyB2aWRlbzEgd2lsbCBiZSBwbGF5ZWQgdGhyb3VnaCBWUElPIHdpbGwg
Zml4IHRoZSByYXRlIHRvIGEgc2luZ2xlIHZhbHVlLgorICAgIGF3YWl0IHZpZGVvMS5wbGF5KCk7
CisgICAgb3NjaWxsYXRvci5zdGFydCgpOworCisgICAgY29uc3Qgc3RyZWFtID0gYXdhaXQgbmF2
aWdhdG9yLm1lZGlhRGV2aWNlcy5nZXRVc2VyTWVkaWEoeyBhdWRpbzogeyBzYW1wbGVSYXRlOiA0
ODAwMCB9fSk7CisgICAgc3RyZWFtLmdldEF1ZGlvVHJhY2tzKClbMF0ub25lbmRlZCA9ICgpID0+
IGFzc2VydF9ub3RfcmVhY2hlZCgic2hvdWxkIG5vdCBlbmQiKTsKKyAgICBhd2FpdCBuZXcgUHJv
bWlzZShyZXNvbHZlID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgMTAwKSk7CisgICAgc3RyZWFtLmdl
dEF1ZGlvVHJhY2tzKClbMF0uc3RvcCgpOworCisgICAgY29uc3Qgc3RyZWFtMiA9IGF3YWl0IG5h
dmlnYXRvci5tZWRpYURldmljZXMuZ2V0VXNlck1lZGlhKHsgYXVkaW86IHsgc2FtcGxlUmF0ZTog
NDQxMDAgfX0pOworICAgIHN0cmVhbTIuZ2V0QXVkaW9UcmFja3MoKVswXS5vbmVuZGVkID0gKCkg
PT4gYXNzZXJ0X25vdF9yZWFjaGVkKCJzaG91bGQgbm90IGVuZCIpOworICAgIGF3YWl0IG5ldyBQ
cm9taXNlKHJlc29sdmUgPT4gc2V0VGltZW91dChyZXNvbHZlLCAxMDApKTsKK30sICJSZWNvbmZp
Z3VyZSBhdWRpbyBzYW1wbGUgcmF0ZSIpOworCitwcm9taXNlX3Rlc3QoYXN5bmMgKHRlc3QpID0+
IHsKKyAgICBjb25zdCBjb250ZXh0ID0gbmV3IEF1ZGlvQ29udGV4dCgpOworICAgIGNvbnN0IG9z
Y2lsbGF0b3IgPSBjb250ZXh0LmNyZWF0ZU9zY2lsbGF0b3IoKTsKKyAgICBjb25zdCBzdHJlYW1E
ZXN0aW5hdGlvbiA9IGNvbnRleHQuY3JlYXRlTWVkaWFTdHJlYW1EZXN0aW5hdGlvbigpOworICAg
IG9zY2lsbGF0b3IuY29ubmVjdChzdHJlYW1EZXN0aW5hdGlvbik7CisgICAgdmlkZW8xLnNyY09i
amVjdCA9IHN0cmVhbURlc3RpbmF0aW9uLnN0cmVhbTsKKyAgICBhd2FpdCB2aWRlbzEucGxheSgp
OworICAgIG9zY2lsbGF0b3Iuc3RhcnQoKTsKKworICAgIGNvbnN0IGRlZmF1bHRBdWRpb0NvbnN0
cmFpbnRzID0geworICAgICAgICBzYW1wbGVSYXRlOiA0ODAwMCwKKyAgICAgICAgc2FtcGxlU2l6
ZTogMTYsCisgICAgICAgIGNoYW5uZWxDb3VudDogMSwKKyAgICAgICAgZWNob0NhbmNlbGxhdGlv
bjogdHJ1ZSwKKyAgICAgICAgbm9pc2VTdXBwcmVzc2lvbjogdHJ1ZQorICAgIH07CisgICAgY29u
c3QgbXVzaWNNb2RlQXVkaW9Db25zdHJhaW50cyA9IHsKKyAgICAgICAgc2FtcGxlUmF0ZTogNDgw
MDAsCisgICAgICAgIHNhbXBsZVNpemU6IDE2LAorICAgICAgICBjaGFubmVsQ291bnQ6IDIsCisg
ICAgICAgIGVjaG9DYW5jZWxsYXRpb246IGZhbHNlLAorICAgICAgICBub2lzZVN1cHByZXNzaW9u
OiBmYWxzZQorICAgIH07CisKKyAgICBjb25zdCBzdHJlYW0xID0gYXdhaXQgbmF2aWdhdG9yLm1l
ZGlhRGV2aWNlcy5nZXRVc2VyTWVkaWEoeyBhdWRpbzogZGVmYXVsdEF1ZGlvQ29uc3RyYWludHMg
fSk7CisgICAgdmlkZW8yLnNyY09iamVjdCA9IHN0cmVhbTE7CisgICAgYXdhaXQgdmlkZW8yLnBs
YXkoKTsKKyAgICBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHNldFRpbWVvdXQocmVzb2x2
ZSwgMTAwMCkpOworCisgICAgLy8gQnkgc3RvcHBpbmcgdGhlIGNhcHR1cmUgYXVkaW8gdHJhY2ss
IHRoZSBWUElPIHVuaXQgd2lsbCBnbyBpbiByZW5kZXIgb25seSBtb2RlIGFzIGl0IG5lZWRzIHRv
IHBsYXkgdmlkZW8gMS4KKyAgICBzdHJlYW0xLmdldEF1ZGlvVHJhY2tzKClbMF0uc3RvcCgpOwor
CisgICAgY29uc3Qgc3RyZWFtMiA9IGF3YWl0IG5hdmlnYXRvci5tZWRpYURldmljZXMuZ2V0VXNl
ck1lZGlhKHsgYXVkaW86IG11c2ljTW9kZUF1ZGlvQ29uc3RyYWludHMgfSk7CisgICAgc3RyZWFt
Mi5nZXRBdWRpb1RyYWNrcygpWzBdLm9uZW5kZWQgPSAoKSA9PiBsb2cuaW5uZXJIVE1MICs9ICd0
cmFjayBlbmRlZCc7CisgICAgYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiBzZXRUaW1lb3V0
KHJlc29sdmUsIDEwMDApKTsKK30sICJSZWNvbmZpZ3VyZSBhdWRpbyB1bml0IHdoZW4gYmVpbmcg
aW4gcmVuZGVyLW9ubHkgbW9kZSIpOworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+Cg==
</data>
<flag name="commit-queue"
          id="488126"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>459113</attachid>
            <date>2022-05-10 05:53:51 -0700</date>
            <delta_ts>2022-05-12 04:16:12 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-240231-20220510145349.patch</filename>
            <type>text/plain</type>
            <size>83928</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjk0MDA1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTJiMTVhNmYwZGU5YTVk
ZTdlMWUxODM3Mzg4OTZmMDQ4YmIzMmZhNy4uYmYwZGE0YTNjYmFhODExMDBmOWE2ZGM4NzBmNmEz
NzNiZTBlMmMxNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI5IEBACisyMDIyLTA1LTEwICBZb3Vl
bm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgYSBiZXR0ZXIgbW9j
ayBmb3IgYXVkaW8gdW5pdHMgdXNlZCBieSBDb3JlQXVkaW9TaGFyZWRVbml0CisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNDAyMzEKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNb3ZlIENvcmVBdWRpb1NoYXJl
ZFVuaXQgdG8gaXRzIG93biBmaWxlLCBDb3JlQXVkaW9TaGFyZWRVbml0LmgvQ29yZUF1ZGlvU2hh
cmVkVW5pdC5jcHAuCisgICAgICAgIEludHJvZHVjZSBhbiBpbnRlcm5hbCB1bml0IHRvIGFic3Ry
YWN0IG91dCBDb3JlQXVkaW9TaGFyZWRVbml0IGZyb20gYWN0dWFsIENvcmVBdWRpbyB1bml0cy4K
KyAgICAgICAgSW1wbGVtZW50IGEgQ29yZUF1ZGlvIGJhc2VkIGludGVybmFsIHVuaXQgaW4gQ29y
ZUF1ZGlvU2hhcmVkVW5pdC5jcHAuCisgICAgICAgIEltcGxlbWVudCBhIE1vY2sgYmFzZWQgaW50
ZXJuYWwgdW5pdCBpbiBNb2NrQXVkaW9TaGFyZWRVbml0LmgvTW9ja0F1ZGlvU2hhcmVkVW5pdC5t
bS4KKyAgICAgICAgQWRkIGlucHV0cHV0L291cHV0IHNhbXBsZSByYXRlIHZhbGlkYXRpb24gKGRl
YnVnIGFzc2VydCBhbmQgcmVsZWFzZSBlcnJvciByZXR1cm5lZCkuCisgICAgICAgIEFkZCBhIHRl
c3QgdGhhdCB1c2VzIHRoaXMgdmFsaWRhdGlvbi4KKworICAgICAgICBUZXN0OiBmYXN0L21lZGlh
c3RyZWFtL2F1ZGlvLXVuaXQtcmVjb25maWd1cmUuaHRtbAorCisgICAgICAgICogU291cmNlc0Nv
Y29hLnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6Cisg
ICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0Jhc2VBdWRpb1NoYXJlZFVuaXQuY3Bw
OgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9CYXNlQXVkaW9TaGFyZWRVbml0
Lmg6CisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0NvcmVBdWRpb0NhcHR1cmVT
b3VyY2UuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9Db3JlQXVkaW9T
aGFyZWRVbml0LmNwcDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFj
L0NvcmVBdWRpb1NoYXJlZFVuaXQuaDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vbWVkaWFz
dHJlYW0vbWFjL01vY2tBdWRpb1NoYXJlZFVuaXQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRp
YXN0cmVhbS9tYWMvTW9ja0F1ZGlvU2hhcmVkVW5pdC5tbToKKwogMjAyMi0wNS0xMCAgWW91ZW5u
IEZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+CiAKICAgICAgICAgSW50cm9kdWNlIGEgY2FudmFz
LWRyYXdJbWFnZSBzcGVjaWZpYyBtZXRob2QgdG8gZ2V0IGEgTmF0aXZlSW1hZ2UgZnJvbSBhIHZp
ZGVvIGVsZW1lbnQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQg
Yi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0CmluZGV4IGM5OTNjMDZjZDAwOTFlNDMw
MTE5YjhkZjQ4NGMzZWZkNjUzZTZkNmYuLmRhZWExMGI2MWQxNTg1ZDg1NTNlZGRkMjYwMTRiOWU1
ZDFjYzEyNTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQKKysr
IGIvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4dApAQCAtNTY1LDYgKzU2NSw3IEBAIHBs
YXRmb3JtL21lZGlhc3RyZWFtL21hYy9DR0Rpc3BsYXlTdHJlYW1TY3JlZW5DYXB0dXJlU291cmNl
Lm1tCiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQ29yZUF1ZGlvQ2FwdHVyZURldmljZS5jcHAK
IHBsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9Db3JlQXVkaW9DYXB0dXJlRGV2aWNlTWFuYWdlci5j
cHAKIHBsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9Db3JlQXVkaW9DYXB0dXJlU291cmNlLmNwcAor
cGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0NvcmVBdWRpb1NoYXJlZFVuaXQuY3BwCiBwbGF0Zm9y
bS9tZWRpYXN0cmVhbS9tYWMvRGlzcGxheUNhcHR1cmVNYW5hZ2VyQ29jb2EuY3BwCiBwbGF0Zm9y
bS9tZWRpYXN0cmVhbS9tYWMvTWVkaWFTdHJlYW1UcmFja0F1ZGlvU291cmNlUHJvdmlkZXJDb2Nv
YS5jcHAKIHBsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9Nb2NrQXVkaW9TaGFyZWRVbml0Lm1tCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5k
ZXggMTNjZDFhYzNmN2JjYWRhOTRlNDM3MmJhN2U1ZGU0ZWM2ZTk1ZmQzOC4uNzY3MzMxODY1NWQ1
OWJjOGVkNzllYWU3YTM4YTVhNjM4NTZmZDk3NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtODU2Niw2ICs4NTY2LDggQEAKIAkJ
NDEwQThFRjcyNEY4RjNGNjAwNEY5MDcwIC8qIFRleHRFbmNvZGVyU3RyZWFtRW5jb2Rlci5pZGwg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBw
YXRoID0gVGV4dEVuY29kZXJTdHJlYW1FbmNvZGVyLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNDEwQThFRjgyNEY4RjQ3QTAwNEY5MDcwIC8qIFRleHRFbmNvZGVyU3RyZWFtRW5j
b2Rlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUZXh0RW5jb2RlclN0cmVhbUVuY29kZXIuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MTBBOEVGOTI0RjhGNDdCMDA0RjkwNzAg
LyogVGV4dEVuY29kZXJTdHJlYW1FbmNvZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRleHRFbmNvZGVy
U3RyZWFtRW5jb2Rlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0MTBBRDJERTI4
MjJCQkY2MDA5QzkzQzggLyogQ29yZUF1ZGlvU2hhcmVkVW5pdC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBDb3JlQXVkaW9TaGFyZWRVbml0Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTQxMEFEMkRGMjgyMkJCRjYwMDlDOTNDOCAvKiBDb3JlQXVkaW9TaGFyZWRV
bml0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvcmVBdWRpb1No
YXJlZFVuaXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MTBCN0U3MTEwNDVG
QUIwMDBEODIyNEYgLyogSlNNZXNzYWdlRXZlbnRDdXN0b20uY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gSlNNZXNzYWdlRXZlbnRDdXN0b20uY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk0MTBCQTEzMTI1NzBGRTU3MDAyRTJGOEEgLyogTGliV2ViUlRD
UnRwVHJhbnNmb3JtYWJsZUZyYW1lLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
bmFtZSA9IExpYldlYlJUQ1J0cFRyYW5zZm9ybWFibGVGcmFtZS5jcHA7IHBhdGggPSBsaWJ3ZWJy
dGMvTGliV2ViUlRDUnRwVHJhbnNmb3JtYWJsZUZyYW1lLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNDEwQkNGNTMyNkYwQ0Q4QjAwNDBCMTI0IC8qIFJUQ0xvY2FsU2Vzc2lvbkRl
c2NyaXB0aW9uSW5pdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSVENMb2Nh
bFNlc3Npb25EZXNjcmlwdGlvbkluaXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTE4ODE1LDYgKzE4ODE3LDggQEAKIAkJCQkzRjgwMjAzNDFFOUUzODFEMDBERUM2MUQgLyogQ29y
ZUF1ZGlvQ2FwdHVyZURldmljZU1hbmFnZXIuaCAqLywKIAkJCQkzRjNCQjU4MjFFNzA5RUU0MDBD
NzAxRjIgLyogQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZS5jcHAgKi8sCiAJCQkJM0YzQkI1ODMxRTcw
OUVFNDAwQzcwMUYyIC8qIENvcmVBdWRpb0NhcHR1cmVTb3VyY2UuaCAqLywKKwkJCQk0MTBBRDJE
RjI4MjJCQkY2MDA5QzkzQzggLyogQ29yZUF1ZGlvU2hhcmVkVW5pdC5jcHAgKi8sCisJCQkJNDEw
QUQyREUyODIyQkJGNjAwOUM5M0M4IC8qIENvcmVBdWRpb1NoYXJlZFVuaXQuaCAqLywKIAkJCQkw
N0E2RDg0ODFGRUI3MDBCMDA2NDQxREUgLyogRGlzcGxheUNhcHR1cmVNYW5hZ2VyQ29jb2EuY3Bw
ICovLAogCQkJCTA3QTZEODQ5MUZFQjcwMEMwMDY0NDFERSAvKiBEaXNwbGF5Q2FwdHVyZU1hbmFn
ZXJDb2NvYS5oICovLAogCQkJCTQxNzRFOTIwMjUzNURDREQwMEZFNDIwMiAvKiBNZWRpYVN0cmVh
bVRyYWNrQXVkaW9Tb3VyY2VQcm92aWRlckNvY29hLmNwcCAqLywKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9CYXNlQXVkaW9TaGFyZWRVbml0LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9CYXNlQXVkaW9TaGFy
ZWRVbml0LmNwcAppbmRleCA0MTcwZmY2NTYzY2ZhN2JiOTNkNzFkY2YzMmRiOGEzNmJiNzBiNzM2
Li5iOGU1YjFkZTc0YWJlODQ3YTA3MDM2NGY1NGE1MmU0MzA5OTk5MWZlIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQmFzZUF1ZGlvU2hhcmVkVW5p
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0Jhc2VB
dWRpb1NoYXJlZFVuaXQuY3BwCkBAIC0xMTMsMTEgKzExMyw2IEBAIE9TU3RhdHVzIEJhc2VBdWRp
b1NoYXJlZFVuaXQ6OnN0YXJ0VW5pdCgpCiAgICAgcmV0dXJuIDA7CiB9CiAKLXZvaWQgQmFzZUF1
ZGlvU2hhcmVkVW5pdDo6cmVzZXRTYW1wbGVSYXRlKCkKLXsKLSAgICBtX3NhbXBsZVJhdGUgPSBB
dWRpb1Nlc3Npb246OnNoYXJlZFNlc3Npb24oKS5zYW1wbGVSYXRlKCk7Ci19Ci0KIHZvaWQgQmFz
ZUF1ZGlvU2hhcmVkVW5pdDo6cHJlcGFyZUZvck5ld0NhcHR1cmUoKQogewogICAgIG1fdm9sdW1l
ID0gMTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21h
Yy9CYXNlQXVkaW9TaGFyZWRVbml0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0
cmVhbS9tYWMvQmFzZUF1ZGlvU2hhcmVkVW5pdC5oCmluZGV4IGY2MTZjMDM4ZmJkYWZjYTY1YTY5
M2I2MmRjYTBlOGFmZjU3MTZlZDMuLjY2YjMzYTRlMzk4OTIzNWM0NjVkMTQ4NDVlMjQ4NmJlZThk
NmE2MzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21h
Yy9CYXNlQXVkaW9TaGFyZWRVbml0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVk
aWFzdHJlYW0vbWFjL0Jhc2VBdWRpb1NoYXJlZFVuaXQuaApAQCAtODMsNiArODMsOCBAQCBwdWJs
aWM6CiAgICAgdm9pZCB3aGVuQXVkaW9DYXB0dXJlVW5pdElzTm90UnVubmluZyhGdW5jdGlvbjx2
b2lkKCk+JiYpOwogICAgIGJvb2wgaXNSZW5kZXJpbmdBdWRpbygpIGNvbnN0IHsgcmV0dXJuIG1f
aXNSZW5kZXJpbmdBdWRpbzsgfQogCisgICAgY29uc3QgU3RyaW5nJiBwZXJzaXN0ZW50SURGb3JU
ZXN0aW5nKCkgY29uc3QgeyByZXR1cm4gbV9jYXB0dXJpbmdEZXZpY2UgPyBtX2NhcHR1cmluZ0Rl
dmljZS0+Zmlyc3QgOiBlbXB0eVN0cmluZygpOyB9CisKIHByb3RlY3RlZDoKICAgICB2b2lkIGZv
ckVhY2hDbGllbnQoY29uc3QgRnVuY3Rpb248dm9pZChDb3JlQXVkaW9DYXB0dXJlU291cmNlJik+
JikgY29uc3Q7CiAgICAgYm9vbCBoYXNDbGllbnRzKCkgY29uc3QgeyByZXR1cm4gIW1fY2xpZW50
cy5pc0VtcHR5KCk7IH0KQEAgLTkyLDcgKzk0LDcgQEAgcHJvdGVjdGVkOgogICAgIHZpcnR1YWwg
T1NTdGF0dXMgc3RhcnRJbnRlcm5hbCgpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgc3RvcEludGVy
bmFsKCkgPSAwOwogICAgIHZpcnR1YWwgT1NTdGF0dXMgcmVjb25maWd1cmVBdWRpb1VuaXQoKSA9
IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlc2V0U2FtcGxlUmF0ZSgpOworICAgIHZpcnR1YWwgdm9p
ZCByZXNldFNhbXBsZVJhdGUoKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGNhcHR1cmVEZXZpY2VD
aGFuZ2VkKCkgPSAwOwogCiAgICAgdm9pZCBzZXRTdXNwZW5kZWQoYm9vbCB2YWx1ZSkgeyBtX3N1
c3BlbmRlZCA9IHZhbHVlOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
ZWRpYXN0cmVhbS9tYWMvQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZS5jcHAKaW5k
ZXggYjY4N2IyOGRkZDE2MjgyNzRjZTI0MzdmOGY3ZWQzOGJjNDQwZmRkZi4uMzg4NzRiODJkZmUw
MjY4YzMxNGM2Y2ZlNTgwYzAyNzRiYzUyNjJjNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0NvcmVBdWRpb0NhcHR1cmVTb3VyY2UuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9Db3JlQXVkaW9DYXB0dXJl
U291cmNlLmNwcApAQCAtMzEsOSArMzEsOSBAQAogI2luY2x1ZGUgIkF1ZGlvU2FtcGxlQnVmZmVy
TGlzdC5oIgogI2luY2x1ZGUgIkF1ZGlvU2FtcGxlRGF0YVNvdXJjZS5oIgogI2luY2x1ZGUgIkF1
ZGlvU2Vzc2lvbi5oIgotI2luY2x1ZGUgIkJhc2VBdWRpb1NoYXJlZFVuaXQuaCIKICNpbmNsdWRl
ICJDb3JlQXVkaW9DYXB0dXJlRGV2aWNlLmgiCiAjaW5jbHVkZSAiQ29yZUF1ZGlvQ2FwdHVyZURl
dmljZU1hbmFnZXIuaCIKKyNpbmNsdWRlICJDb3JlQXVkaW9TaGFyZWRVbml0LmgiCiAjaW5jbHVk
ZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIlBsYXRmb3JtTWVkaWFTZXNzaW9uTWFuYWdlci5oIgog
I2luY2x1ZGUgIlRpbWVyLmgiCkBAIC01MSwxNSArNTEsMTUgQEAKICNpbmNsdWRlIDx3dGYvTmV2
ZXJEZXN0cm95ZWQuaD4KICNpbmNsdWRlIDx3dGYvU2NvcGUuaD4KIAotI2luY2x1ZGUgPHBhbC9j
Zi9BdWRpb1Rvb2xib3hTb2Z0TGluay5oPgotI2luY2x1ZGUgPHBhbC9jZi9Db3JlTWVkaWFTb2Z0
TGluay5oPgotCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICNpbmNsdWRlICJBVkF1ZGlvU2Vz
c2lvbkNhcHR1cmVEZXZpY2UuaCIKICNpbmNsdWRlICJBVkF1ZGlvU2Vzc2lvbkNhcHR1cmVEZXZp
Y2VNYW5hZ2VyLmgiCiAjaW5jbHVkZSAiQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZUlPUy5oIgogI2Vu
ZGlmCiAKKyNpbmNsdWRlIDxwYWwvY2YvQXVkaW9Ub29sYm94U29mdExpbmsuaD4KKyNpbmNsdWRl
IDxwYWwvY2YvQ29yZU1lZGlhU29mdExpbmsuaD4KKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiAj
aWYgUExBVEZPUk0oTUFDKQpAQCAtNzAsNjE0ICs3MCw2IEBAIENvcmVBdWRpb0NhcHR1cmVTb3Vy
Y2VGYWN0b3J5JiBDb3JlQXVkaW9DYXB0dXJlU291cmNlRmFjdG9yeTo6c2luZ2xldG9uKCkKIH0K
ICNlbmRpZgogCi1jb25zdCBVSW50MzIgb3V0cHV0QnVzID0gMDsKLWNvbnN0IFVJbnQzMiBpbnB1
dEJ1cyA9IDE7Ci0KLWNsYXNzIENvcmVBdWRpb1NoYXJlZFVuaXQgZmluYWwgOiBwdWJsaWMgQmFz
ZUF1ZGlvU2hhcmVkVW5pdCB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIENvcmVBdWRpb1NoYXJlZFVu
aXQmIHVuaXQoKTsKLSAgICBzdGF0aWMgQmFzZUF1ZGlvU2hhcmVkVW5pdCYgc2luZ2xldG9uKCkg
IHsgcmV0dXJuIHVuaXQoKTsgfQotICAgIENvcmVBdWRpb1NoYXJlZFVuaXQoKTsKLQotICAgIHZv
aWQgcmVnaXN0ZXJTcGVha2VyU2FtcGxlc1Byb2R1Y2VyKENvcmVBdWRpb1NwZWFrZXJTYW1wbGVz
UHJvZHVjZXImKTsKLSAgICB2b2lkIHVucmVnaXN0ZXJTcGVha2VyU2FtcGxlc1Byb2R1Y2VyKENv
cmVBdWRpb1NwZWFrZXJTYW1wbGVzUHJvZHVjZXImKTsKLSAgICBib29sIGlzUnVubmluZygpIGNv
bnN0IHsgcmV0dXJuIG1faW9Vbml0U3RhcnRlZDsgfQotCi1wcml2YXRlOgotICAgIHN0YXRpYyBz
aXplX3QgcHJlZmVycmVkSU9CdWZmZXJTaXplKCk7Ci0KLSAgICBDYXBhYmlsaXR5VmFsdWVPclJh
bmdlIHNhbXBsZVJhdGVDYXBhY2l0aWVzKCkgY29uc3QgZmluYWwgeyByZXR1cm4gQ2FwYWJpbGl0
eVZhbHVlT3JSYW5nZSg4MDAwLCA5NjAwMCk7IH0KLSAgICBjb25zdCBDQUF1ZGlvU3RyZWFtRGVz
Y3JpcHRpb24mIG1pY3JvcGhvbmVGb3JtYXQoKSBjb25zdCB7IHJldHVybiBtX21pY3JvcGhvbmVQ
cm9jRm9ybWF0OyB9Ci0KLSAgICBib29sIGhhc0F1ZGlvVW5pdCgpIGNvbnN0IGZpbmFsIHsgcmV0
dXJuIG1faW9Vbml0OyB9Ci0gICAgdm9pZCBjYXB0dXJlRGV2aWNlQ2hhbmdlZCgpIGZpbmFsOwot
ICAgIE9TU3RhdHVzIHJlY29uZmlndXJlQXVkaW9Vbml0KCkgZmluYWw7Ci0KLSAgICBPU1N0YXR1
cyBzZXR1cEF1ZGlvVW5pdCgpOwotICAgIHZvaWQgY2xlYW51cEF1ZGlvVW5pdCgpIGZpbmFsOwot
Ci0gICAgT1NTdGF0dXMgc3RhcnRJbnRlcm5hbCgpIGZpbmFsOwotICAgIHZvaWQgc3RvcEludGVy
bmFsKCkgZmluYWw7Ci0gICAgYm9vbCBpc1Byb2R1Y2luZ0RhdGEoKSBjb25zdCBmaW5hbCB7IHJl
dHVybiBtX2lvVW5pdFN0YXJ0ZWQ7IH0KLSAgICB2b2lkIGlzUHJvZHVjaW5nTWljcm9waG9uZVNh
bXBsZXNDaGFuZ2VkKCkgZmluYWw7Ci0gICAgdm9pZCB2YWxpZGF0ZU91dHB1dERldmljZSh1aW50
MzJfdCBkZXZpY2VJRCkgZmluYWw7Ci0gICAgaW50IGFjdHVhbFNhbXBsZVJhdGUoKSBjb25zdCBm
aW5hbDsKLQotICAgIE9TU3RhdHVzIGNvbmZpZ3VyZVNwZWFrZXJQcm9jKGludCBzYW1wbGVSYXRl
KTsKLSAgICBPU1N0YXR1cyBjb25maWd1cmVNaWNyb3Bob25lUHJvYyhpbnQgc2FtcGxlUmF0ZSk7
Ci0gICAgT1NTdGF0dXMgZGVmYXVsdE91dHB1dERldmljZSh1aW50MzJfdCopOwotICAgIE9TU3Rh
dHVzIGRlZmF1bHRJbnB1dERldmljZSh1aW50MzJfdCopOwotCi0gICAgc3RhdGljIE9TU3RhdHVz
IG1pY3JvcGhvbmVDYWxsYmFjayh2b2lkKiwgQXVkaW9Vbml0UmVuZGVyQWN0aW9uRmxhZ3MqLCBj
b25zdCBBdWRpb1RpbWVTdGFtcCosIFVJbnQzMiwgVUludDMyLCBBdWRpb0J1ZmZlckxpc3QqKTsK
LSAgICBPU1N0YXR1cyBwcm9jZXNzTWljcm9waG9uZVNhbXBsZXMoQXVkaW9Vbml0UmVuZGVyQWN0
aW9uRmxhZ3MmLCBjb25zdCBBdWRpb1RpbWVTdGFtcCYsIFVJbnQzMiwgVUludDMyLCBBdWRpb0J1
ZmZlckxpc3QqKTsKLQotICAgIHN0YXRpYyBPU1N0YXR1cyBzcGVha2VyQ2FsbGJhY2sodm9pZCos
IEF1ZGlvVW5pdFJlbmRlckFjdGlvbkZsYWdzKiwgY29uc3QgQXVkaW9UaW1lU3RhbXAqLCBVSW50
MzIsIFVJbnQzMiwgQXVkaW9CdWZmZXJMaXN0Kik7Ci0gICAgT1NTdGF0dXMgcHJvdmlkZVNwZWFr
ZXJEYXRhKEF1ZGlvVW5pdFJlbmRlckFjdGlvbkZsYWdzJiwgY29uc3QgQXVkaW9UaW1lU3RhbXAm
LCBVSW50MzIsIFVJbnQzMiwgQXVkaW9CdWZmZXJMaXN0Jik7Ci0KLSAgICB2b2lkIHVuZHVjaygp
OwotCi0gICAgdm9pZCB2ZXJpZnlJc0NhcHR1cmluZygpOwotCi0gICAgU2Vjb25kcyB2ZXJpZnlD
YXB0dXJlSW50ZXJ2YWwoKSB7IHJldHVybiBpc1Byb2R1Y2luZ01pY3JvcGhvbmVTYW1wbGVzKCkg
PyAxMF9zIDogMl9zOyB9Ci0KLSAgICBBdWRpb1VuaXQgbV9pb1VuaXQgeyBudWxscHRyIH07Ci0K
LSAgICAvLyBPbmx5IHJlYWQvbW9kaWZpZWQgZnJvbSB0aGUgSU8gdGhyZWFkLgotICAgIFZlY3Rv
cjxSZWY8QXVkaW9TYW1wbGVEYXRhU291cmNlPj4gbV9hY3RpdmVTb3VyY2VzOwotCi0gICAgQ0FB
dWRpb1N0cmVhbURlc2NyaXB0aW9uIG1fbWljcm9waG9uZVByb2NGb3JtYXQ7Ci0gICAgUmVmUHRy
PEF1ZGlvU2FtcGxlQnVmZmVyTGlzdD4gbV9taWNyb3Bob25lU2FtcGxlQnVmZmVyOwotICAgIHVp
bnQ2NF90IG1fbGF0ZXN0TWljVGltZVN0YW1wIHsgMCB9OwotCi0gICAgQ0FBdWRpb1N0cmVhbURl
c2NyaXB0aW9uIG1fc3BlYWtlclByb2NGb3JtYXQ7Ci0KLSAgICBkb3VibGUgbV9EVFNDb252ZXJz
aW9uUmF0aW8geyAwIH07Ci0KLSAgICBib29sIG1faW9Vbml0SW5pdGlhbGl6ZWQgeyBmYWxzZSB9
OwotICAgIGJvb2wgbV9pb1VuaXRTdGFydGVkIHsgZmFsc2UgfTsKLQotICAgIG11dGFibGUgc3Rk
Ojp1bmlxdWVfcHRyPFJlYWx0aW1lTWVkaWFTb3VyY2VDYXBhYmlsaXRpZXM+IG1fY2FwYWJpbGl0
aWVzOwotICAgIG11dGFibGUgc3RkOjpvcHRpb25hbDxSZWFsdGltZU1lZGlhU291cmNlU2V0dGlu
Z3M+IG1fY3VycmVudFNldHRpbmdzOwotCi0jaWYgIUxPR19ESVNBQkxFRAotICAgIHZvaWQgY2hl
Y2tUaW1lc3RhbXBzKGNvbnN0IEF1ZGlvVGltZVN0YW1wJiwgdWludDY0X3QsIGRvdWJsZSk7Ci0K
LSAgICBTdHJpbmcgbV9pb1VuaXROYW1lOwotI2VuZGlmCi0KLSAgICB1aW50NjRfdCBtX21pY3Jv
cGhvbmVQcm9jc0NhbGxlZCB7IDAgfTsKLSAgICB1aW50NjRfdCBtX21pY3JvcGhvbmVQcm9jc0Nh
bGxlZExhc3RUaW1lIHsgMCB9OwotICAgIFRpbWVyIG1fdmVyaWZ5Q2FwdHVyaW5nVGltZXI7Ci0K
LSAgICBib29sIG1faXNSZWNvbmZpZ3VyaW5nIHsgZmFsc2UgfTsKLSAgICBtdXRhYmxlIExvY2sg
bV9zcGVha2VyU2FtcGxlc1Byb2R1Y2VyTG9jazsKLSAgICBDb3JlQXVkaW9TcGVha2VyU2FtcGxl
c1Byb2R1Y2VyKiBtX3NwZWFrZXJTYW1wbGVzUHJvZHVjZXIgV1RGX0dVQVJERURfQllfTE9DSyht
X3NwZWFrZXJTYW1wbGVzUHJvZHVjZXJMb2NrKSB7IG51bGxwdHIgfTsKLX07Ci0KLUNvcmVBdWRp
b1NoYXJlZFVuaXQmIENvcmVBdWRpb1NoYXJlZFVuaXQ6OnVuaXQoKQotewotICAgIHN0YXRpYyBO
ZXZlckRlc3Ryb3llZDxDb3JlQXVkaW9TaGFyZWRVbml0PiBzaW5nbGV0b247Ci0gICAgcmV0dXJu
IHNpbmdsZXRvbjsKLX0KLQotQ29yZUF1ZGlvU2hhcmVkVW5pdDo6Q29yZUF1ZGlvU2hhcmVkVW5p
dCgpCi0gICAgOiBtX3ZlcmlmeUNhcHR1cmluZ1RpbWVyKCp0aGlzLCAmQ29yZUF1ZGlvU2hhcmVk
VW5pdDo6dmVyaWZ5SXNDYXB0dXJpbmcpCi17Ci19Ci0KLXZvaWQgQ29yZUF1ZGlvU2hhcmVkVW5p
dDo6Y2FwdHVyZURldmljZUNoYW5nZWQoKQotewotI2lmIFBMQVRGT1JNKE1BQykKLSAgICByZWNv
bmZpZ3VyZUF1ZGlvVW5pdCgpOwotI2Vsc2UKLSAgICBBVkF1ZGlvU2Vzc2lvbkNhcHR1cmVEZXZp
Y2VNYW5hZ2VyOjpzaW5nbGV0b24oKS5zZXRQcmVmZXJyZWRBdWRpb1Nlc3Npb25EZXZpY2VVSUQo
cGVyc2lzdGVudElEKCkpOwotI2VuZGlmCi19Ci0KLXNpemVfdCBDb3JlQXVkaW9TaGFyZWRVbml0
OjpwcmVmZXJyZWRJT0J1ZmZlclNpemUoKQotewotICAgIHJldHVybiBBdWRpb1Nlc3Npb246OnNo
YXJlZFNlc3Npb24oKS5idWZmZXJTaXplKCk7Ci19Ci0KLU9TU3RhdHVzIENvcmVBdWRpb1NoYXJl
ZFVuaXQ6OnNldHVwQXVkaW9Vbml0KCkKLXsKLSAgICBpZiAobV9pb1VuaXQpCi0gICAgICAgIHJl
dHVybiAwOwotCi0gICAgQVNTRVJUKGhhc0NsaWVudHMoKSk7Ci0KLSAgICBtYWNoX3RpbWViYXNl
X2luZm9fZGF0YV90IHRpbWViYXNlSW5mbzsKLSAgICBtYWNoX3RpbWViYXNlX2luZm8oJnRpbWVi
YXNlSW5mbyk7Ci0gICAgbV9EVFNDb252ZXJzaW9uUmF0aW8gPSAxZS05ICogc3RhdGljX2Nhc3Q8
ZG91YmxlPih0aW1lYmFzZUluZm8ubnVtZXIpIC8gc3RhdGljX2Nhc3Q8ZG91YmxlPih0aW1lYmFz
ZUluZm8uZGVub20pOwotCi0gICAgQXVkaW9Db21wb25lbnREZXNjcmlwdGlvbiBpb1VuaXREZXNj
cmlwdGlvbiA9IHsga0F1ZGlvVW5pdFR5cGVfT3V0cHV0LCBrQXVkaW9Vbml0U3ViVHlwZV9Wb2lj
ZVByb2Nlc3NpbmdJTywga0F1ZGlvVW5pdE1hbnVmYWN0dXJlcl9BcHBsZSwgMCwgMCB9OwotICAg
IEF1ZGlvQ29tcG9uZW50IGlvQ29tcG9uZW50ID0gUEFMOjpBdWRpb0NvbXBvbmVudEZpbmROZXh0
KG51bGxwdHIsICZpb1VuaXREZXNjcmlwdGlvbik7Ci0gICAgQVNTRVJUKGlvQ29tcG9uZW50KTsK
LSAgICBpZiAoIWlvQ29tcG9uZW50KSB7Ci0gICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFdlYlJU
QywgIkNvcmVBdWRpb1NoYXJlZFVuaXQ6OnNldHVwQXVkaW9Vbml0KCVwKSB1bmFibGUgdG8gZmlu
ZCB2cGlvIHVuaXQgY29tcG9uZW50IiwgdGhpcyk7Ci0gICAgICAgIHJldHVybiAtMTsKLSAgICB9
Ci0KLSNpZiAhTE9HX0RJU0FCTEVECi0gICAgQ0ZTdHJpbmdSZWYgbmFtZSA9IG51bGxwdHI7Ci0g
ICAgUEFMOjpBdWRpb0NvbXBvbmVudENvcHlOYW1lKGlvQ29tcG9uZW50LCAmbmFtZSk7Ci0gICAg
aWYgKG5hbWUpIHsKLSAgICAgICAgbV9pb1VuaXROYW1lID0gbmFtZTsKLSAgICAgICAgQ0ZSZWxl
YXNlKG5hbWUpOwotICAgICAgICBSRUxFQVNFX0xPRyhXZWJSVEMsICJDb3JlQXVkaW9TaGFyZWRV
bml0OjpzZXR1cEF1ZGlvVW5pdCglcCkgY3JlYXRlZCBcIiVzXCIgY29tcG9uZW50IiwgdGhpcywg
bV9pb1VuaXROYW1lLnV0ZjgoKS5kYXRhKCkpOwotICAgIH0KLSNlbmRpZgotCi0gICAgYXV0byBl
cnIgPSBQQUw6OkF1ZGlvQ29tcG9uZW50SW5zdGFuY2VOZXcoaW9Db21wb25lbnQsICZtX2lvVW5p
dCk7Ci0gICAgaWYgKGVycikgewotICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihXZWJSVEMsICJD
b3JlQXVkaW9TaGFyZWRVbml0OjpzZXR1cEF1ZGlvVW5pdCglcCkgdW5hYmxlIHRvIG9wZW4gdnBp
byB1bml0LCBlcnJvciAlZCAoJS40cykiLCB0aGlzLCAoaW50KWVyciwgKGNoYXIqKSZlcnIpOwot
ICAgICAgICByZXR1cm4gZXJyOwotICAgIH0KLQotICAgIGlmICghZW5hYmxlRWNob0NhbmNlbGxh
dGlvbigpKSB7Ci0gICAgICAgIHVpbnQzMl90IHBhcmFtID0gMDsKLSAgICAgICAgZXJyID0gUEFM
OjpBdWRpb1VuaXRTZXRQcm9wZXJ0eShtX2lvVW5pdCwga0FVVm9pY2VJT1Byb3BlcnR5X1ZvaWNl
UHJvY2Vzc2luZ0VuYWJsZUFHQywga0F1ZGlvVW5pdFNjb3BlX0dsb2JhbCwgaW5wdXRCdXMsICZw
YXJhbSwgc2l6ZW9mKHBhcmFtKSk7Ci0gICAgICAgIGlmIChlcnIpIHsKLSAgICAgICAgICAgIFJF
TEVBU0VfTE9HX0VSUk9SKFdlYlJUQywgIkNvcmVBdWRpb1NoYXJlZFVuaXQ6OnNldHVwQXVkaW9V
bml0KCVwKSB1bmFibGUgdG8gc2V0IHZwaW8gYXV0b21hdGljIGdhaW4gY29udHJvbCwgZXJyb3Ig
JWQgKCUuNHMpIiwgdGhpcywgKGludCllcnIsIChjaGFyKikmZXJyKTsKLSAgICAgICAgICAgIHJl
dHVybiBlcnI7Ci0gICAgICAgIH0KLSAgICAgICAgcGFyYW0gPSAxOwotICAgICAgICBlcnIgPSBQ
QUw6OkF1ZGlvVW5pdFNldFByb3BlcnR5KG1faW9Vbml0LCBrQVVWb2ljZUlPUHJvcGVydHlfQnlw
YXNzVm9pY2VQcm9jZXNzaW5nLCBrQXVkaW9Vbml0U2NvcGVfR2xvYmFsLCBpbnB1dEJ1cywgJnBh
cmFtLCBzaXplb2YocGFyYW0pKTsKLSAgICAgICAgaWYgKGVycikgewotICAgICAgICAgICAgUkVM
RUFTRV9MT0dfRVJST1IoV2ViUlRDLCAiQ29yZUF1ZGlvU2hhcmVkVW5pdDo6c2V0dXBBdWRpb1Vu
aXQoJXApIHVuYWJsZSB0byBzZXQgdnBpbyB1bml0IGVjaG8gY2FuY2VsbGF0aW9uLCBlcnJvciAl
ZCAoJS40cykiLCB0aGlzLCAoaW50KWVyciwgKGNoYXIqKSZlcnIpOwotICAgICAgICAgICAgcmV0
dXJuIGVycjsKLSAgICAgICAgfQotICAgIH0KLQotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0g
ICAgdWludDMyX3QgcGFyYW0gPSAxOwotICAgIGVyciA9IFBBTDo6QXVkaW9Vbml0U2V0UHJvcGVy
dHkobV9pb1VuaXQsIGtBdWRpb091dHB1dFVuaXRQcm9wZXJ0eV9FbmFibGVJTywga0F1ZGlvVW5p
dFNjb3BlX0lucHV0LCBpbnB1dEJ1cywgJnBhcmFtLCBzaXplb2YocGFyYW0pKTsKLSAgICBpZiAo
ZXJyKSB7Ci0gICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFdlYlJUQywgIkNvcmVBdWRpb1NoYXJl
ZFVuaXQ6OnNldHVwQXVkaW9Vbml0KCVwKSB1bmFibGUgdG8gZW5hYmxlIHZwaW8gdW5pdCBpbnB1
dCwgZXJyb3IgJWQgKCUuNHMpIiwgdGhpcywgKGludCllcnIsIChjaGFyKikmZXJyKTsKLSAgICAg
ICAgcmV0dXJuIGVycjsKLSAgICB9Ci0jZWxzZQotICAgIGF1dG8gZGV2aWNlSUQgPSBjYXB0dXJl
RGV2aWNlSUQoKTsKLSAgICBpZiAoIWRldmljZUlEKSB7Ci0gICAgICAgIGVyciA9IGRlZmF1bHRJ
bnB1dERldmljZSgmZGV2aWNlSUQpOwotICAgICAgICBpZiAoZXJyKQotICAgICAgICAgICAgcmV0
dXJuIGVycjsKLSAgICB9Ci0KLSAgICBlcnIgPSBQQUw6OkF1ZGlvVW5pdFNldFByb3BlcnR5KG1f
aW9Vbml0LCBrQXVkaW9PdXRwdXRVbml0UHJvcGVydHlfQ3VycmVudERldmljZSwga0F1ZGlvVW5p
dFNjb3BlX0dsb2JhbCwgaW5wdXRCdXMsICZkZXZpY2VJRCwgc2l6ZW9mKGRldmljZUlEKSk7Ci0g
ICAgaWYgKGVycikgewotICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihXZWJSVEMsICJDb3JlQXVk
aW9TaGFyZWRVbml0OjpzZXR1cEF1ZGlvVW5pdCglcCkgdW5hYmxlIHRvIHNldCB2cGlvIHVuaXQg
Y2FwdHVyZSBkZXZpY2UgSUQgJWQsIGVycm9yICVkICglLjRzKSIsIHRoaXMsIChpbnQpZGV2aWNl
SUQsIChpbnQpZXJyLCAoY2hhciopJmVycik7Ci0gICAgICAgIHJldHVybiBlcnI7Ci0gICAgfQot
Ci0gICAgdWludDMyX3QgZGVmYXVsdE91dHB1dERldmljZUlEOwotICAgIGVyciA9IGRlZmF1bHRP
dXRwdXREZXZpY2UoJmRlZmF1bHRPdXRwdXREZXZpY2VJRCk7Ci0gICAgaWYgKCFlcnIpIHsKLSAg
ICAgICAgZXJyID0gUEFMOjpBdWRpb1VuaXRTZXRQcm9wZXJ0eShtX2lvVW5pdCwga0F1ZGlvT3V0
cHV0VW5pdFByb3BlcnR5X0N1cnJlbnREZXZpY2UsIGtBdWRpb1VuaXRTY29wZV9HbG9iYWwsIG91
dHB1dEJ1cywgJmRlZmF1bHRPdXRwdXREZXZpY2VJRCwgc2l6ZW9mKGRlZmF1bHRPdXRwdXREZXZp
Y2VJRCkpOwotICAgICAgICBSRUxFQVNFX0xPR19FUlJPUl9JRihlcnIsIFdlYlJUQywgIkNvcmVB
dWRpb1NoYXJlZFVuaXQ6OnNldHVwQXVkaW9Vbml0KCVwKSB1bmFibGUgdG8gc2V0IHZwaW8gdW5p
dCBvdXRwdXQgZGV2aWNlIElEICVkLCBlcnJvciAlZCAoJS40cykiLCB0aGlzLCAoaW50KWRlZmF1
bHRPdXRwdXREZXZpY2VJRCwgKGludCllcnIsIChjaGFyKikmZXJyKTsKLSAgICB9Ci0gICAgc2V0
T3V0cHV0RGV2aWNlSUQoIWVyciA/IGRlZmF1bHRPdXRwdXREZXZpY2VJRCA6IDApOwotI2VuZGlm
Ci0KLSAgICAvLyBGSVhNRTogQWRkIHN1cHBvcnQgZm9yIGRpZmZlcmVudCBzcGVha2VyL21pY3Jv
cGhvbmUgc2FtcGxlIHJhdGVzLgotICAgIGludCBhY3R1YWxTYW1wbGVSYXRlID0gdGhpcy0+YWN0
dWFsU2FtcGxlUmF0ZSgpOwotICAgIGVyciA9IGNvbmZpZ3VyZU1pY3JvcGhvbmVQcm9jKGFjdHVh
bFNhbXBsZVJhdGUpOwotICAgIGlmIChlcnIpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLSAgICBl
cnIgPSBjb25maWd1cmVTcGVha2VyUHJvYyhhY3R1YWxTYW1wbGVSYXRlKTsKLSAgICBpZiAoZXJy
KQotICAgICAgICByZXR1cm4gZXJyOwotCi0gICAgZXJyID0gUEFMOjpBdWRpb1VuaXRJbml0aWFs
aXplKG1faW9Vbml0KTsKLSAgICBpZiAoZXJyKSB7Ci0gICAgICAgIFJFTEVBU0VfTE9HX0VSUk9S
KFdlYlJUQywgIkNvcmVBdWRpb1NoYXJlZFVuaXQ6OnNldHVwQXVkaW9Vbml0KCVwKSBBdWRpb1Vu
aXRJbml0aWFsaXplKCkgZmFpbGVkLCBlcnJvciAlZCAoJS40cykiLCB0aGlzLCAoaW50KWVyciwg
KGNoYXIqKSZlcnIpOwotICAgICAgICByZXR1cm4gZXJyOwotICAgIH0KLSAgICBtX2lvVW5pdElu
aXRpYWxpemVkID0gdHJ1ZTsKLQotICAgIHVuZHVjaygpOwotCi0gICAgcmV0dXJuIGVycjsKLX0K
LQotdm9pZCBDb3JlQXVkaW9TaGFyZWRVbml0Ojp1bmR1Y2soKQotewotICAgIHVpbnQzMl90IG91
dHB1dERldmljZTsKLSAgICBpZiAoIWRlZmF1bHRPdXRwdXREZXZpY2UoJm91dHB1dERldmljZSkp
Ci0gICAgICAgIEF1ZGlvRGV2aWNlRHVjayhvdXRwdXREZXZpY2UsIDEuMCwgbnVsbHB0ciwgMCk7
Ci19Ci0KLWludCBDb3JlQXVkaW9TaGFyZWRVbml0OjphY3R1YWxTYW1wbGVSYXRlKCkgY29uc3QK
LXsKLSAgICBMb2NrZXIgbG9ja2VyIHsgbV9zcGVha2VyU2FtcGxlc1Byb2R1Y2VyTG9jayB9Owot
ICAgIHJldHVybiBtX3NwZWFrZXJTYW1wbGVzUHJvZHVjZXIgPyBtX3NwZWFrZXJTYW1wbGVzUHJv
ZHVjZXItPmZvcm1hdCgpLnN0cmVhbURlc2NyaXB0aW9uKCkubVNhbXBsZVJhdGUgOiBzYW1wbGVS
YXRlKCk7Ci19Ci0KLU9TU3RhdHVzIENvcmVBdWRpb1NoYXJlZFVuaXQ6OmNvbmZpZ3VyZU1pY3Jv
cGhvbmVQcm9jKGludCBzYW1wbGVSYXRlKQotewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7
Ci0KLSAgICBBVVJlbmRlckNhbGxiYWNrU3RydWN0IGNhbGxiYWNrID0geyBtaWNyb3Bob25lQ2Fs
bGJhY2ssIHRoaXMgfTsKLSAgICBhdXRvIGVyciA9IFBBTDo6QXVkaW9Vbml0U2V0UHJvcGVydHko
bV9pb1VuaXQsIGtBdWRpb091dHB1dFVuaXRQcm9wZXJ0eV9TZXRJbnB1dENhbGxiYWNrLCBrQXVk
aW9Vbml0U2NvcGVfR2xvYmFsLCBpbnB1dEJ1cywgJmNhbGxiYWNrLCBzaXplb2YoY2FsbGJhY2sp
KTsKLSAgICBpZiAoZXJyKSB7Ci0gICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFdlYlJUQywgIkNv
cmVBdWRpb1NoYXJlZFVuaXQ6OmNvbmZpZ3VyZU1pY3JvcGhvbmVQcm9jKCVwKSB1bmFibGUgdG8g
c2V0IHZwaW8gdW5pdCBtaWMgcHJvYywgZXJyb3IgJWQgKCUuNHMpIiwgdGhpcywgKGludCllcnIs
IChjaGFyKikmZXJyKTsKLSAgICAgICAgcmV0dXJuIGVycjsKLSAgICB9Ci0KLSAgICBBdWRpb1N0
cmVhbUJhc2ljRGVzY3JpcHRpb24gbWljcm9waG9uZVByb2NGb3JtYXQgPSB7IH07Ci0KLSAgICBV
SW50MzIgc2l6ZSA9IHNpemVvZihtaWNyb3Bob25lUHJvY0Zvcm1hdCk7Ci0gICAgZXJyID0gUEFM
OjpBdWRpb1VuaXRHZXRQcm9wZXJ0eShtX2lvVW5pdCwga0F1ZGlvVW5pdFByb3BlcnR5X1N0cmVh
bUZvcm1hdCwga0F1ZGlvVW5pdFNjb3BlX091dHB1dCwgaW5wdXRCdXMsICZtaWNyb3Bob25lUHJv
Y0Zvcm1hdCwgJnNpemUpOwotICAgIGlmIChlcnIpIHsKLSAgICAgICAgUkVMRUFTRV9MT0dfRVJS
T1IoV2ViUlRDLCAiQ29yZUF1ZGlvU2hhcmVkVW5pdDo6Y29uZmlndXJlTWljcm9waG9uZVByb2Mo
JXApIHVuYWJsZSB0byBnZXQgb3V0cHV0IHN0cmVhbSBmb3JtYXQsIGVycm9yICVkICglLjRzKSIs
IHRoaXMsIChpbnQpZXJyLCAoY2hhciopJmVycik7Ci0gICAgICAgIHJldHVybiBlcnI7Ci0gICAg
fQotCi0gICAgbWljcm9waG9uZVByb2NGb3JtYXQubVNhbXBsZVJhdGUgPSBzYW1wbGVSYXRlOwot
ICAgIGVyciA9IFBBTDo6QXVkaW9Vbml0U2V0UHJvcGVydHkobV9pb1VuaXQsIGtBdWRpb1VuaXRQ
cm9wZXJ0eV9TdHJlYW1Gb3JtYXQsIGtBdWRpb1VuaXRTY29wZV9PdXRwdXQsIGlucHV0QnVzLCAm
bWljcm9waG9uZVByb2NGb3JtYXQsIHNpemUpOwotICAgIGlmIChlcnIpIHsKLSAgICAgICAgUkVM
RUFTRV9MT0dfRVJST1IoV2ViUlRDLCAiQ29yZUF1ZGlvU2hhcmVkVW5pdDo6Y29uZmlndXJlTWlj
cm9waG9uZVByb2MoJXApIHVuYWJsZSB0byBzZXQgb3V0cHV0IHN0cmVhbSBmb3JtYXQsIGVycm9y
ICVkICglLjRzKSIsIHRoaXMsIChpbnQpZXJyLCAoY2hhciopJmVycik7Ci0gICAgICAgIHJldHVy
biBlcnI7Ci0gICAgfQotCi0gICAgbV9taWNyb3Bob25lU2FtcGxlQnVmZmVyID0gQXVkaW9TYW1w
bGVCdWZmZXJMaXN0OjpjcmVhdGUobWljcm9waG9uZVByb2NGb3JtYXQsIHByZWZlcnJlZElPQnVm
ZmVyU2l6ZSgpICogMik7Ci0gICAgbV9taWNyb3Bob25lUHJvY0Zvcm1hdCA9IG1pY3JvcGhvbmVQ
cm9jRm9ybWF0OwotCi0gICAgcmV0dXJuIGVycjsKLX0KLQotT1NTdGF0dXMgQ29yZUF1ZGlvU2hh
cmVkVW5pdDo6Y29uZmlndXJlU3BlYWtlclByb2MoaW50IHNhbXBsZVJhdGUpCi17Ci0gICAgQVNT
RVJUKGlzTWFpblRocmVhZCgpKTsKLQotICAgIEFVUmVuZGVyQ2FsbGJhY2tTdHJ1Y3QgY2FsbGJh
Y2sgPSB7IHNwZWFrZXJDYWxsYmFjaywgdGhpcyB9OwotICAgIGF1dG8gZXJyID0gUEFMOjpBdWRp
b1VuaXRTZXRQcm9wZXJ0eShtX2lvVW5pdCwga0F1ZGlvVW5pdFByb3BlcnR5X1NldFJlbmRlckNh
bGxiYWNrLCBrQXVkaW9Vbml0U2NvcGVfSW5wdXQsIG91dHB1dEJ1cywgJmNhbGxiYWNrLCBzaXpl
b2YoY2FsbGJhY2spKTsKLSAgICBpZiAoZXJyKSB7Ci0gICAgICAgIFJFTEVBU0VfTE9HX0VSUk9S
KFdlYlJUQywgIkNvcmVBdWRpb1NoYXJlZFVuaXQ6OmNvbmZpZ3VyZVNwZWFrZXJQcm9jKCVwKSB1
bmFibGUgdG8gc2V0IHZwaW8gdW5pdCBzcGVha2VyIHByb2MsIGVycm9yICVkICglLjRzKSIsIHRo
aXMsIChpbnQpZXJyLCAoY2hhciopJmVycik7Ci0gICAgICAgIHJldHVybiBlcnI7Ci0gICAgfQot
Ci0gICAgQXVkaW9TdHJlYW1CYXNpY0Rlc2NyaXB0aW9uIHNwZWFrZXJQcm9jRm9ybWF0OwotICAg
IFVJbnQzMiBzaXplID0gc2l6ZW9mKHNwZWFrZXJQcm9jRm9ybWF0KTsKLSAgICB7Ci0gICAgICAg
IExvY2tlciBsb2NrZXIgeyBtX3NwZWFrZXJTYW1wbGVzUHJvZHVjZXJMb2NrIH07Ci0gICAgICAg
IGlmIChtX3NwZWFrZXJTYW1wbGVzUHJvZHVjZXIpIHsKLSAgICAgICAgICAgIHNwZWFrZXJQcm9j
Rm9ybWF0ID0gbV9zcGVha2VyU2FtcGxlc1Byb2R1Y2VyLT5mb3JtYXQoKS5zdHJlYW1EZXNjcmlw
dGlvbigpOwotICAgICAgICAgICAgQVNTRVJUKHNwZWFrZXJQcm9jRm9ybWF0Lm1TYW1wbGVSYXRl
ID09IHNhbXBsZVJhdGUpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgZXJyID0gUEFM
OjpBdWRpb1VuaXRHZXRQcm9wZXJ0eShtX2lvVW5pdCwga0F1ZGlvVW5pdFByb3BlcnR5X1N0cmVh
bUZvcm1hdCwga0F1ZGlvVW5pdFNjb3BlX0lucHV0LCBvdXRwdXRCdXMsICZzcGVha2VyUHJvY0Zv
cm1hdCwgJnNpemUpOwotICAgICAgICAgICAgaWYgKGVycikgewotICAgICAgICAgICAgICAgIFJF
TEVBU0VfTE9HX0VSUk9SKFdlYlJUQywgIkNvcmVBdWRpb1NoYXJlZFVuaXQ6OmNvbmZpZ3VyZVNw
ZWFrZXJQcm9jKCVwKSB1bmFibGUgdG8gZ2V0IGlucHV0IHN0cmVhbSBmb3JtYXQsIGVycm9yICVk
ICglLjRzKSIsIHRoaXMsIChpbnQpZXJyLCAoY2hhciopJmVycik7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIGVycjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBzcGVha2Vy
UHJvY0Zvcm1hdC5tU2FtcGxlUmF0ZSA9IHNhbXBsZVJhdGU7Ci0KLSAgICBlcnIgPSBQQUw6OkF1
ZGlvVW5pdFNldFByb3BlcnR5KG1faW9Vbml0LCBrQXVkaW9Vbml0UHJvcGVydHlfU3RyZWFtRm9y
bWF0LCBrQXVkaW9Vbml0U2NvcGVfSW5wdXQsIG91dHB1dEJ1cywgJnNwZWFrZXJQcm9jRm9ybWF0
LCBzaXplKTsKLSAgICBpZiAoZXJyKSB7Ci0gICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFdlYlJU
QywgIkNvcmVBdWRpb1NoYXJlZFVuaXQ6OmNvbmZpZ3VyZVNwZWFrZXJQcm9jKCVwKSB1bmFibGUg
dG8gZ2V0IGlucHV0IHN0cmVhbSBmb3JtYXQsIGVycm9yICVkICglLjRzKSIsIHRoaXMsIChpbnQp
ZXJyLCAoY2hhciopJmVycik7Ci0gICAgICAgIHJldHVybiBlcnI7Ci0gICAgfQotCi0gICAgbV9z
cGVha2VyUHJvY0Zvcm1hdCA9IHNwZWFrZXJQcm9jRm9ybWF0OwotCi0gICAgcmV0dXJuIGVycjsK
LX0KLQotI2lmICFMT0dfRElTQUJMRUQKLXZvaWQgQ29yZUF1ZGlvU2hhcmVkVW5pdDo6Y2hlY2tU
aW1lc3RhbXBzKGNvbnN0IEF1ZGlvVGltZVN0YW1wJiB0aW1lU3RhbXAsIHVpbnQ2NF90IHNhbXBs
ZVRpbWUsIGRvdWJsZSBob3N0VGltZSkKLXsKLSAgICBpZiAoIXRpbWVTdGFtcC5tU2FtcGxlVGlt
ZSB8fCBzYW1wbGVUaW1lID09IG1fbGF0ZXN0TWljVGltZVN0YW1wIHx8ICFob3N0VGltZSkKLSAg
ICAgICAgUkVMRUFTRV9MT0dfRVJST1IoV2ViUlRDLCAiQ29yZUF1ZGlvU2hhcmVkVW5pdDo6Y2hl
Y2tUaW1lc3RhbXBzOiB1bnVzdWFsIHRpbWVzdGFtcHMsIHNhbXBsZSB0aW1lID0gJWxsZCwgcHJl
dmlvdXMgc2FtcGxlIHRpbWUgPSAlbGxkLCBob3N0VGltZSAlZiIsIHNhbXBsZVRpbWUsIG1fbGF0
ZXN0TWljVGltZVN0YW1wLCBob3N0VGltZSk7Ci19Ci0jZW5kaWYKLQotT1NTdGF0dXMgQ29yZUF1
ZGlvU2hhcmVkVW5pdDo6cHJvdmlkZVNwZWFrZXJEYXRhKEF1ZGlvVW5pdFJlbmRlckFjdGlvbkZs
YWdzJiBmbGFncywgY29uc3QgQXVkaW9UaW1lU3RhbXAmIHRpbWVTdGFtcCwgVUludDMyIC8qaW5C
dXNOdW1iZXIqLywgVUludDMyIGluTnVtYmVyRnJhbWVzLCBBdWRpb0J1ZmZlckxpc3QmIGlvRGF0
YSkKLXsKLSAgICBpZiAobV9pc1JlY29uZmlndXJpbmcgfHwgIW1fc3BlYWtlclNhbXBsZXNQcm9k
dWNlckxvY2sudHJ5TG9jaygpKSB7Ci0gICAgICAgIEF1ZGlvU2FtcGxlQnVmZmVyTGlzdDo6emVy
b0FCTChpb0RhdGEsIHN0YXRpY19jYXN0PHNpemVfdD4oaW5OdW1iZXJGcmFtZXMgKiBtX3NwZWFr
ZXJQcm9jRm9ybWF0LmJ5dGVzUGVyRnJhbWUoKSkpOwotICAgICAgICBmbGFncyA9IGtBdWRpb1Vu
aXRSZW5kZXJBY3Rpb25fT3V0cHV0SXNTaWxlbmNlOwotICAgICAgICByZXR1cm4gbm9FcnI7Ci0g
ICAgfQotCi0gICAgTG9ja2VyIGxvY2tlciB7IEFkb3B0TG9jaywgbV9zcGVha2VyU2FtcGxlc1By
b2R1Y2VyTG9jayB9OwotICAgIGlmICghbV9zcGVha2VyU2FtcGxlc1Byb2R1Y2VyKSB7Ci0gICAg
ICAgIEF1ZGlvU2FtcGxlQnVmZmVyTGlzdDo6emVyb0FCTChpb0RhdGEsIHN0YXRpY19jYXN0PHNp
emVfdD4oaW5OdW1iZXJGcmFtZXMgKiBtX3NwZWFrZXJQcm9jRm9ybWF0LmJ5dGVzUGVyRnJhbWUo
KSkpOwotICAgICAgICBmbGFncyA9IGtBdWRpb1VuaXRSZW5kZXJBY3Rpb25fT3V0cHV0SXNTaWxl
bmNlOwotICAgICAgICByZXR1cm4gbm9FcnI7Ci0gICAgfQotICAgIHJldHVybiBtX3NwZWFrZXJT
YW1wbGVzUHJvZHVjZXItPnByb2R1Y2VTcGVha2VyU2FtcGxlcyhpbk51bWJlckZyYW1lcywgaW9E
YXRhLCB0aW1lU3RhbXAubVNhbXBsZVRpbWUsIHRpbWVTdGFtcC5tSG9zdFRpbWUsIGZsYWdzKTsK
LX0KLQotT1NTdGF0dXMgQ29yZUF1ZGlvU2hhcmVkVW5pdDo6c3BlYWtlckNhbGxiYWNrKHZvaWQg
KmluUmVmQ29uLCBBdWRpb1VuaXRSZW5kZXJBY3Rpb25GbGFncyogaW9BY3Rpb25GbGFncywgY29u
c3QgQXVkaW9UaW1lU3RhbXAqIGluVGltZVN0YW1wLCBVSW50MzIgaW5CdXNOdW1iZXIsIFVJbnQz
MiBpbk51bWJlckZyYW1lcywgQXVkaW9CdWZmZXJMaXN0KiBpb0RhdGEpCi17Ci0gICAgQVNTRVJU
KGlvQWN0aW9uRmxhZ3MpOwotICAgIEFTU0VSVChpblRpbWVTdGFtcCk7Ci0gICAgYXV0byBkYXRh
U291cmNlID0gc3RhdGljX2Nhc3Q8Q29yZUF1ZGlvU2hhcmVkVW5pdCo+KGluUmVmQ29uKTsKLSAg
ICByZXR1cm4gZGF0YVNvdXJjZS0+cHJvdmlkZVNwZWFrZXJEYXRhKCppb0FjdGlvbkZsYWdzLCAq
aW5UaW1lU3RhbXAsIGluQnVzTnVtYmVyLCBpbk51bWJlckZyYW1lcywgKmlvRGF0YSk7Ci19Ci0K
LU9TU3RhdHVzIENvcmVBdWRpb1NoYXJlZFVuaXQ6OnByb2Nlc3NNaWNyb3Bob25lU2FtcGxlcyhB
dWRpb1VuaXRSZW5kZXJBY3Rpb25GbGFncyYgaW9BY3Rpb25GbGFncywgY29uc3QgQXVkaW9UaW1l
U3RhbXAmIHRpbWVTdGFtcCwgVUludDMyIGluQnVzTnVtYmVyLCBVSW50MzIgaW5OdW1iZXJGcmFt
ZXMsIEF1ZGlvQnVmZmVyTGlzdCogLyppb0RhdGEqLykKLXsKLSAgICArK21fbWljcm9waG9uZVBy
b2NzQ2FsbGVkOwotCi0gICAgaWYgKG1faXNSZWNvbmZpZ3VyaW5nKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICAvLyBQdWxsIHRocm91Z2ggdGhlIHZwaW8gdW5pdCB0byBvdXIgbWljIGJ1
ZmZlci4KLSAgICBtX21pY3JvcGhvbmVTYW1wbGVCdWZmZXItPnJlc2V0KCk7Ci0gICAgQXVkaW9C
dWZmZXJMaXN0JiBidWZmZXJMaXN0ID0gbV9taWNyb3Bob25lU2FtcGxlQnVmZmVyLT5idWZmZXJM
aXN0KCk7Ci0gICAgYXV0byBlcnIgPSBBdWRpb1VuaXRSZW5kZXIobV9pb1VuaXQsICZpb0FjdGlv
bkZsYWdzLCAmdGltZVN0YW1wLCBpbkJ1c051bWJlciwgaW5OdW1iZXJGcmFtZXMsICZidWZmZXJM
aXN0KTsKLSAgICBpZiAoZXJyKSB7Ci0gICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFdlYlJUQywg
IkNvcmVBdWRpb1NoYXJlZFVuaXQ6OnByb2Nlc3NNaWNyb3Bob25lU2FtcGxlcyglcCkgQXVkaW9V
bml0UmVuZGVyIGZhaWxlZCB3aXRoIGVycm9yICVkICglLjRzKSwgYnVmZmVyTGlzdCBzaXplICVk
LCBpbk51bWJlckZyYW1lcyAlZCAiLCB0aGlzLCAoaW50KWVyciwgKGNoYXIqKSZlcnIsIChpbnQp
YnVmZmVyTGlzdC5tQnVmZmVyc1swXS5tRGF0YUJ5dGVTaXplLCAoaW50KWluTnVtYmVyRnJhbWVz
KTsKLSAgICAgICAgaWYgKGVyciA9PSBrQXVkaW9fUGFyYW1FcnJvcikgewotICAgICAgICAgICAg
Ly8gT3VyIGJ1ZmZlciBtaWdodCBiZSB0b28gc21hbGwsIHRoZSBwcmVmZXJyZWQgYnVmZmVyIHNp
emUgb3Igc2FtcGxlIHJhdGUgbWlnaHQgaGF2ZSBjaGFuZ2VkLgotICAgICAgICAgICAgY2FsbE9u
TWFpblRocmVhZChbXSB7Ci0gICAgICAgICAgICAgICAgQ29yZUF1ZGlvU2hhcmVkVW5pdDo6c2lu
Z2xldG9uKCkucmVjb25maWd1cmUoKTsKLSAgICAgICAgICAgIH0pOwotICAgICAgICB9Ci0gICAg
ICAgIC8vIFdlIHJldHVybiBlYXJseSBzbyB0aGF0IGlmIHRoaXMgZXJyb3IgaGFwcGVucywgd2Ug
ZG8gbm90IGluY3JlbWVudCBtX21pY3JvcGhvbmVQcm9jc0NhbGxlZCBhbmQgZmFpbCB0aGUgY2Fw
dHVyZSBvbmNlIHRpbWVyIGtpY2tzIGluLgotICAgICAgICByZXR1cm4gZXJyOwotICAgIH0KLQot
ICAgIGlmICghaXNQcm9kdWNpbmdNaWNyb3Bob25lU2FtcGxlcygpKQotICAgICAgICByZXR1cm4g
bm9FcnI7Ci0KLSAgICBkb3VibGUgYWRqdXN0ZWRIb3N0VGltZSA9IG1fRFRTQ29udmVyc2lvblJh
dGlvICogdGltZVN0YW1wLm1Ib3N0VGltZTsKLSAgICB1aW50NjRfdCBzYW1wbGVUaW1lID0gdGlt
ZVN0YW1wLm1TYW1wbGVUaW1lOwotI2lmICFMT0dfRElTQUJMRUQKLSAgICBjaGVja1RpbWVzdGFt
cHModGltZVN0YW1wLCBzYW1wbGVUaW1lLCBhZGp1c3RlZEhvc3RUaW1lKTsKLSNlbmRpZgotICAg
IG1fbGF0ZXN0TWljVGltZVN0YW1wID0gc2FtcGxlVGltZTsKLSAgICBtX21pY3JvcGhvbmVTYW1w
bGVCdWZmZXItPnNldFRpbWVzKGFkanVzdGVkSG9zdFRpbWUsIHNhbXBsZVRpbWUpOwotCi0gICAg
aWYgKHZvbHVtZSgpICE9IDEuMCkKLSAgICAgICAgbV9taWNyb3Bob25lU2FtcGxlQnVmZmVyLT5h
cHBseUdhaW4odm9sdW1lKCkpOwotCi0gICAgYXVkaW9TYW1wbGVzQXZhaWxhYmxlKE1lZGlhVGlt
ZShzYW1wbGVUaW1lLCBtX21pY3JvcGhvbmVQcm9jRm9ybWF0LnNhbXBsZVJhdGUoKSksIG1fbWlj
cm9waG9uZVNhbXBsZUJ1ZmZlci0+YnVmZmVyTGlzdCgpLCBtX21pY3JvcGhvbmVQcm9jRm9ybWF0
LCBpbk51bWJlckZyYW1lcyk7Ci0gICAgcmV0dXJuIG5vRXJyOwotfQotCi1PU1N0YXR1cyBDb3Jl
QXVkaW9TaGFyZWRVbml0OjptaWNyb3Bob25lQ2FsbGJhY2sodm9pZCAqaW5SZWZDb24sIEF1ZGlv
VW5pdFJlbmRlckFjdGlvbkZsYWdzKiBpb0FjdGlvbkZsYWdzLCBjb25zdCBBdWRpb1RpbWVTdGFt
cCogaW5UaW1lU3RhbXAsIFVJbnQzMiBpbkJ1c051bWJlciwgVUludDMyIGluTnVtYmVyRnJhbWVz
LCBBdWRpb0J1ZmZlckxpc3QqIGlvRGF0YSkKLXsKLSAgICBBU1NFUlQoaW9BY3Rpb25GbGFncyk7
Ci0gICAgQVNTRVJUKGluVGltZVN0YW1wKTsKLSAgICBDb3JlQXVkaW9TaGFyZWRVbml0KiBkYXRh
U291cmNlID0gc3RhdGljX2Nhc3Q8Q29yZUF1ZGlvU2hhcmVkVW5pdCo+KGluUmVmQ29uKTsKLSAg
ICByZXR1cm4gZGF0YVNvdXJjZS0+cHJvY2Vzc01pY3JvcGhvbmVTYW1wbGVzKCppb0FjdGlvbkZs
YWdzLCAqaW5UaW1lU3RhbXAsIGluQnVzTnVtYmVyLCBpbk51bWJlckZyYW1lcywgaW9EYXRhKTsK
LX0KLQotdm9pZCBDb3JlQXVkaW9TaGFyZWRVbml0OjpjbGVhbnVwQXVkaW9Vbml0KCkKLXsKLSAg
ICBpZiAobV9pb1VuaXRJbml0aWFsaXplZCkgewotICAgICAgICBBU1NFUlQobV9pb1VuaXQpOwot
ICAgICAgICBhdXRvIGVyciA9IEF1ZGlvVW5pdFVuaW5pdGlhbGl6ZShtX2lvVW5pdCk7Ci0gICAg
ICAgIGlmIChlcnIpCi0gICAgICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihXZWJSVEMsICJDb3Jl
QXVkaW9TaGFyZWRVbml0OjpjbGVhbnVwQXVkaW9Vbml0KCVwKSBBdWRpb1VuaXRVbmluaXRpYWxp
emUgZmFpbGVkIHdpdGggZXJyb3IgJWQgKCUuNHMpIiwgdGhpcywgKGludCllcnIsIChjaGFyKikm
ZXJyKTsKLSAgICAgICAgbV9pb1VuaXRJbml0aWFsaXplZCA9IGZhbHNlOwotICAgIH0KLQotICAg
IGlmIChtX2lvVW5pdCkgewotICAgICAgICBQQUw6OkF1ZGlvQ29tcG9uZW50SW5zdGFuY2VEaXNw
b3NlKG1faW9Vbml0KTsKLSAgICAgICAgbV9pb1VuaXQgPSBudWxscHRyOwotICAgIH0KLQotICAg
IG1fbWljcm9waG9uZVNhbXBsZUJ1ZmZlciA9IG51bGxwdHI7Ci0jaWYgIUxPR19ESVNBQkxFRAot
ICAgIG1faW9Vbml0TmFtZSA9IGVtcHR5U3RyaW5nKCk7Ci0jZW5kaWYKLX0KLQotT1NTdGF0dXMg
Q29yZUF1ZGlvU2hhcmVkVW5pdDo6cmVjb25maWd1cmVBdWRpb1VuaXQoKQotewotICAgIEFTU0VS
VChpc01haW5UaHJlYWQoKSk7Ci0gICAgT1NTdGF0dXMgZXJyOwotICAgIGlmICghaGFzQXVkaW9V
bml0KCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgbV9pc1JlY29uZmlndXJpbmcgPSB0cnVl
OwotICAgIGF1dG8gc2NvcGUgPSBtYWtlU2NvcGVFeGl0KFt0aGlzXSB7IG1faXNSZWNvbmZpZ3Vy
aW5nID0gZmFsc2U7IH0pOwotCi0gICAgaWYgKG1faW9Vbml0U3RhcnRlZCkgewotICAgICAgICBl
cnIgPSBQQUw6OkF1ZGlvT3V0cHV0VW5pdFN0b3AobV9pb1VuaXQpOwotICAgICAgICBpZiAoZXJy
KSB7Ci0gICAgICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihXZWJSVEMsICJDb3JlQXVkaW9TaGFy
ZWRVbml0OjpyZWNvbmZpZ3VyZUF1ZGlvVW5pdCglcCkgQXVkaW9PdXRwdXRVbml0U3RvcCBmYWls
ZWQgd2l0aCBlcnJvciAlZCAoJS40cykiLCB0aGlzLCAoaW50KWVyciwgKGNoYXIqKSZlcnIpOwot
ICAgICAgICAgICAgcmV0dXJuIGVycjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGNsZWFudXBB
dWRpb1VuaXQoKTsKLSAgICBlcnIgPSBzZXR1cEF1ZGlvVW5pdCgpOwotICAgIGlmIChlcnIpCi0g
ICAgICAgIHJldHVybiBlcnI7Ci0KLSAgICBpZiAobV9pb1VuaXRTdGFydGVkKSB7Ci0gICAgICAg
IGVyciA9IFBBTDo6QXVkaW9PdXRwdXRVbml0U3RhcnQobV9pb1VuaXQpOwotICAgICAgICBpZiAo
ZXJyKSB7Ci0gICAgICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihXZWJSVEMsICJDb3JlQXVkaW9T
aGFyZWRVbml0OjpyZWNvbmZpZ3VyZUF1ZGlvVW5pdCglcCkgQXVkaW9PdXRwdXRVbml0U3RhcnQg
ZmFpbGVkIHdpdGggZXJyb3IgJWQgKCUuNHMpIiwgdGhpcywgKGludCllcnIsIChjaGFyKikmZXJy
KTsKLSAgICAgICAgICAgIHJldHVybiBlcnI7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJu
IGVycjsKLX0KLQotT1NTdGF0dXMgQ29yZUF1ZGlvU2hhcmVkVW5pdDo6c3RhcnRJbnRlcm5hbCgp
Ci17Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLQotICAgIHNldElzUHJvZHVjaW5nTWlj
cm9waG9uZVNhbXBsZXModHJ1ZSk7Ci0KLSAgICBPU1N0YXR1cyBlcnI7Ci0gICAgaWYgKCFtX2lv
VW5pdCkgewotICAgICAgICBlcnIgPSBzZXR1cEF1ZGlvVW5pdCgpOwotICAgICAgICBpZiAoZXJy
KSB7Ci0gICAgICAgICAgICBjbGVhbnVwQXVkaW9Vbml0KCk7Ci0gICAgICAgICAgICBBU1NFUlQo
IW1faW9Vbml0KTsKLSAgICAgICAgICAgIHJldHVybiBlcnI7Ci0gICAgICAgIH0KLSAgICAgICAg
QVNTRVJUKG1faW9Vbml0KTsKLSAgICB9Ci0KLSAgICB1bmR1Y2soKTsKLQotICAgIHsKLSAgICAg
ICAgTG9ja2VyIGxvY2tlciB7IG1fc3BlYWtlclNhbXBsZXNQcm9kdWNlckxvY2sgfTsKLSAgICAg
ICAgaWYgKG1fc3BlYWtlclNhbXBsZXNQcm9kdWNlcikKLSAgICAgICAgICAgIG1fc3BlYWtlclNh
bXBsZXNQcm9kdWNlci0+Y2FwdHVyZVVuaXRJc1N0YXJ0aW5nKCk7Ci0gICAgfQotCi0gICAgZXJy
ID0gUEFMOjpBdWRpb091dHB1dFVuaXRTdGFydChtX2lvVW5pdCk7Ci0gICAgaWYgKGVycikgewot
ICAgICAgICB7Ci0gICAgICAgICAgICBMb2NrZXIgbG9ja2VyIHsgbV9zcGVha2VyU2FtcGxlc1By
b2R1Y2VyTG9jayB9OwotICAgICAgICAgICAgaWYgKG1fc3BlYWtlclNhbXBsZXNQcm9kdWNlcikK
LSAgICAgICAgICAgICAgICBtX3NwZWFrZXJTYW1wbGVzUHJvZHVjZXItPmNhcHR1cmVVbml0SGFz
U3RvcHBlZCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoV2ViUlRD
LCAiQ29yZUF1ZGlvU2hhcmVkVW5pdDo6c3RhcnQoJXApIEF1ZGlvT3V0cHV0VW5pdFN0YXJ0IGZh
aWxlZCB3aXRoIGVycm9yICVkICglLjRzKSIsIHRoaXMsIChpbnQpZXJyLCAoY2hhciopJmVycik7
Ci0gICAgICAgIGNsZWFudXBBdWRpb1VuaXQoKTsKLSAgICAgICAgQVNTRVJUKCFtX2lvVW5pdCk7
Ci0gICAgICAgIHJldHVybiBlcnI7Ci0gICAgfQotCi0gICAgbV9pb1VuaXRTdGFydGVkID0gdHJ1
ZTsKLQotICAgIG1fdmVyaWZ5Q2FwdHVyaW5nVGltZXIuc3RhcnRSZXBlYXRpbmcodmVyaWZ5Q2Fw
dHVyZUludGVydmFsKCkpOwotICAgIG1fbWljcm9waG9uZVByb2NzQ2FsbGVkID0gMDsKLSAgICBt
X21pY3JvcGhvbmVQcm9jc0NhbGxlZExhc3RUaW1lID0gMDsKLQotICAgIHJldHVybiAwOwotfQot
Ci12b2lkIENvcmVBdWRpb1NoYXJlZFVuaXQ6OmlzUHJvZHVjaW5nTWljcm9waG9uZVNhbXBsZXND
aGFuZ2VkKCkKLXsKLSAgICBpZiAoIWlzUHJvZHVjaW5nRGF0YSgpKQotICAgICAgICByZXR1cm47
Ci0gICAgbV92ZXJpZnlDYXB0dXJpbmdUaW1lci5zdGFydFJlcGVhdGluZyh2ZXJpZnlDYXB0dXJl
SW50ZXJ2YWwoKSk7Ci19Ci0KLXZvaWQgQ29yZUF1ZGlvU2hhcmVkVW5pdDo6dmFsaWRhdGVPdXRw
dXREZXZpY2UodWludDMyX3QgY3VycmVudE91dHB1dERldmljZUlEKQotewotI2lmIFBMQVRGT1JN
KE1BQykKLSAgICB1aW50MzJfdCBjdXJyZW50RGVmYXVsdE91dHB1dERldmljZUlEID0gMDsKLSAg
ICBpZiAoYXV0byBlcnIgPSBkZWZhdWx0T3V0cHV0RGV2aWNlKCZjdXJyZW50RGVmYXVsdE91dHB1
dERldmljZUlEKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFjdXJyZW50RGVmYXVsdE91
dHB1dERldmljZUlEIHx8IGN1cnJlbnRPdXRwdXREZXZpY2VJRCA9PSBjdXJyZW50RGVmYXVsdE91
dHB1dERldmljZUlEKQotICAgICAgICByZXR1cm47Ci0KLSAgICByZWNvbmZpZ3VyZSgpOwotI2Vs
c2UKLSAgICBVTlVTRURfUEFSQU0oY3VycmVudE91dHB1dERldmljZUlEKTsKLSNlbmRpZgotfQot
Ci12b2lkIENvcmVBdWRpb1NoYXJlZFVuaXQ6OnZlcmlmeUlzQ2FwdHVyaW5nKCkKLXsKLSAgICBp
ZiAobV9taWNyb3Bob25lUHJvY3NDYWxsZWRMYXN0VGltZSAhPSBtX21pY3JvcGhvbmVQcm9jc0Nh
bGxlZCkgewotICAgICAgICBtX21pY3JvcGhvbmVQcm9jc0NhbGxlZExhc3RUaW1lID0gbV9taWNy
b3Bob25lUHJvY3NDYWxsZWQ7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBSRUxFQVNF
X0xPR19FUlJPUihXZWJSVEMsICJDb3JlQXVkaW9TaGFyZWRVbml0Ojp2ZXJpZnlJc0NhcHR1cmlu
ZyAtIG5vIGF1ZGlvIHJlY2VpdmVkIGluICVkIHNlY29uZHMsIGZhaWxpbmciLCBzdGF0aWNfY2Fz
dDxpbnQ+KG1fdmVyaWZ5Q2FwdHVyaW5nVGltZXIucmVwZWF0SW50ZXJ2YWwoKS52YWx1ZSgpKSk7
Ci0gICAgY2FwdHVyZUZhaWxlZCgpOwotfQotCi12b2lkIENvcmVBdWRpb1NoYXJlZFVuaXQ6OnN0
b3BJbnRlcm5hbCgpCi17Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLQotICAgIG1fdmVy
aWZ5Q2FwdHVyaW5nVGltZXIuc3RvcCgpOwotCi0gICAgaWYgKCFtX2lvVW5pdCB8fCAhbV9pb1Vu
aXRTdGFydGVkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvIGVyciA9IFBBTDo6QXVkaW9P
dXRwdXRVbml0U3RvcChtX2lvVW5pdCk7Ci0gICAgaWYgKGVycikgewotICAgICAgICBSRUxFQVNF
X0xPR19FUlJPUihXZWJSVEMsICJDb3JlQXVkaW9TaGFyZWRVbml0OjpzdG9wKCVwKSBBdWRpb091
dHB1dFVuaXRTdG9wIGZhaWxlZCB3aXRoIGVycm9yICVkICglLjRzKSIsIHRoaXMsIChpbnQpZXJy
LCAoY2hhciopJmVycik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgewotICAgICAgICBM
b2NrZXIgbG9ja2VyIHsgbV9zcGVha2VyU2FtcGxlc1Byb2R1Y2VyTG9jayB9OwotICAgICAgICBp
ZiAobV9zcGVha2VyU2FtcGxlc1Byb2R1Y2VyKQotICAgICAgICAgICAgbV9zcGVha2VyU2FtcGxl
c1Byb2R1Y2VyLT5jYXB0dXJlVW5pdEhhc1N0b3BwZWQoKTsKLSAgICB9Ci0KLSAgICBtX2lvVW5p
dFN0YXJ0ZWQgPSBmYWxzZTsKLX0KLQotT1NTdGF0dXMgQ29yZUF1ZGlvU2hhcmVkVW5pdDo6ZGVm
YXVsdElucHV0RGV2aWNlKHVpbnQzMl90KiBkZXZpY2VJRCkKLXsKLSAgICBBU1NFUlQobV9pb1Vu
aXQpOwotCi0gICAgVUludDMyIHByb3BlcnR5U2l6ZSA9IHNpemVvZigqZGV2aWNlSUQpOwotICAg
IGF1dG8gZXJyID0gUEFMOjpBdWRpb1VuaXRHZXRQcm9wZXJ0eShtX2lvVW5pdCwga0F1ZGlvT3V0
cHV0VW5pdFByb3BlcnR5X0N1cnJlbnREZXZpY2UsIGtBdWRpb1VuaXRTY29wZV9HbG9iYWwsIGlu
cHV0QnVzLCBkZXZpY2VJRCwgJnByb3BlcnR5U2l6ZSk7Ci0gICAgaWYgKGVycikKLSAgICAgICAg
UkVMRUFTRV9MT0dfRVJST1IoV2ViUlRDLCAiQ29yZUF1ZGlvU2hhcmVkVW5pdDo6ZGVmYXVsdElu
cHV0RGV2aWNlKCVwKSB1bmFibGUgdG8gZ2V0IGRlZmF1bHQgaW5wdXQgZGV2aWNlIElELCBlcnJv
ciAlZCAoJS40cykiLCB0aGlzLCAoaW50KWVyciwgKGNoYXIqKSZlcnIpOwotCi0gICAgcmV0dXJu
IGVycjsKLX0KLQotT1NTdGF0dXMgQ29yZUF1ZGlvU2hhcmVkVW5pdDo6ZGVmYXVsdE91dHB1dERl
dmljZSh1aW50MzJfdCogZGV2aWNlSUQpCi17Ci0gICAgT1NFcnIgZXJyID0gLTE7Ci0jaWYgUExB
VEZPUk0oTUFDKQotICAgIEF1ZGlvT2JqZWN0UHJvcGVydHlBZGRyZXNzIGFkZHJlc3MgPSB7Ci0g
ICAgICAgIGtBdWRpb0hhcmR3YXJlUHJvcGVydHlEZWZhdWx0T3V0cHV0RGV2aWNlLAotICAgICAg
ICBrQXVkaW9PYmplY3RQcm9wZXJ0eVNjb3BlR2xvYmFsLAotI2lmIEhBVkUoQVVESU9fT0JKRUNU
X1BST1BFUlRZX0VMRU1FTlRfTUFJTikKLSAgICAgICAga0F1ZGlvT2JqZWN0UHJvcGVydHlFbGVt
ZW50TWFpbgotI2Vsc2UKLSAgICAgICAgQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfQkVH
SU4KLSAgICAgICAga0F1ZGlvT2JqZWN0UHJvcGVydHlFbGVtZW50TWFzdGVyCi0gICAgICAgIEFM
TE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0VORAotI2VuZGlmCi0gICAgfTsKLQotICAgIGlm
IChBdWRpb09iamVjdEhhc1Byb3BlcnR5KGtBdWRpb09iamVjdFN5c3RlbU9iamVjdCwgJmFkZHJl
c3MpKSB7Ci0gICAgICAgIFVJbnQzMiBwcm9wZXJ0eVNpemUgPSBzaXplb2YoQXVkaW9EZXZpY2VJ
RCk7Ci0gICAgICAgIGVyciA9IEF1ZGlvT2JqZWN0R2V0UHJvcGVydHlEYXRhKGtBdWRpb09iamVj
dFN5c3RlbU9iamVjdCwgJmFkZHJlc3MsIDAsIG51bGxwdHIsICZwcm9wZXJ0eVNpemUsIGRldmlj
ZUlEKTsKLSAgICB9Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShkZXZpY2VJRCk7Ci0jZW5kaWYK
LSAgICByZXR1cm4gZXJyOwotfQotCi12b2lkIENvcmVBdWRpb1NoYXJlZFVuaXQ6OnJlZ2lzdGVy
U3BlYWtlclNhbXBsZXNQcm9kdWNlcihDb3JlQXVkaW9TcGVha2VyU2FtcGxlc1Byb2R1Y2VyJiBw
cm9kdWNlcikKLXsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotCi0gICAgc2V0SXNSZW5k
ZXJpbmdBdWRpbyh0cnVlKTsKLQotICAgIENvcmVBdWRpb1NwZWFrZXJTYW1wbGVzUHJvZHVjZXIq
IG9sZFByb2R1Y2VyOwotICAgIHsKLSAgICAgICAgTG9ja2VyIGxvY2tlciB7IG1fc3BlYWtlclNh
bXBsZXNQcm9kdWNlckxvY2sgfTsKLSAgICAgICAgb2xkUHJvZHVjZXIgPSBtX3NwZWFrZXJTYW1w
bGVzUHJvZHVjZXI7Ci0gICAgICAgIG1fc3BlYWtlclNhbXBsZXNQcm9kdWNlciA9ICZwcm9kdWNl
cjsKLSAgICB9Ci0gICAgaWYgKG9sZFByb2R1Y2VyICYmIG9sZFByb2R1Y2VyICE9ICZwcm9kdWNl
cikKLSAgICAgICAgb2xkUHJvZHVjZXItPmNhcHR1cmVVbml0SGFzU3RvcHBlZCgpOwotCi0gICAg
aWYgKGhhc0F1ZGlvVW5pdCgpICYmIHByb2R1Y2VyLmZvcm1hdCgpICE9IG1fc3BlYWtlclByb2NG
b3JtYXQpCi0gICAgICAgIHJlY29uZmlndXJlKCk7Ci19Ci0KLXZvaWQgQ29yZUF1ZGlvU2hhcmVk
VW5pdDo6dW5yZWdpc3RlclNwZWFrZXJTYW1wbGVzUHJvZHVjZXIoQ29yZUF1ZGlvU3BlYWtlclNh
bXBsZXNQcm9kdWNlciYgcHJvZHVjZXIpCi17Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsK
LQotICAgIHsKLSAgICAgICAgTG9ja2VyIGxvY2tlciB7IG1fc3BlYWtlclNhbXBsZXNQcm9kdWNl
ckxvY2sgfTsKLSAgICAgICAgaWYgKG1fc3BlYWtlclNhbXBsZXNQcm9kdWNlciAhPSAmcHJvZHVj
ZXIpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIG1fc3BlYWtlclNhbXBsZXNQcm9kdWNl
ciA9IG51bGxwdHI7Ci0gICAgfQotCi0gICAgc2V0SXNSZW5kZXJpbmdBdWRpbyhmYWxzZSk7Ci19
Ci0KIHN0YXRpYyBDYXB0dXJlU291cmNlT3JFcnJvciBpbml0aWFsaXplQ29yZUF1ZGlvQ2FwdHVy
ZVNvdXJjZShSZWY8Q29yZUF1ZGlvQ2FwdHVyZVNvdXJjZT4mJiBzb3VyY2UsIGNvbnN0IE1lZGlh
Q29uc3RyYWludHMqIGNvbnN0cmFpbnRzKQogewogICAgIGlmIChjb25zdHJhaW50cykgewpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0NvcmVBdWRp
b1NoYXJlZFVuaXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFj
L0NvcmVBdWRpb1NoYXJlZFVuaXQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjlmYjEwNGQzZDVjYzgzZDNlMTQ4
ZjRkYmZiMzM3ZjBhNjkzZTMyNTAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQ29yZUF1ZGlvU2hhcmVkVW5pdC5jcHAKQEAgLTAsMCAr
MSw2NTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDb3JlQXVkaW9TaGFyZWRVbml0Lmgi
CisKKyNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQorCisjaW5jbHVkZSAiQXVkaW9TYW1wbGVCdWZm
ZXJMaXN0LmgiCisjaW5jbHVkZSAiQXVkaW9TZXNzaW9uLmgiCisjaW5jbHVkZSAiQ29yZUF1ZGlv
Q2FwdHVyZVNvdXJjZS5oIgorI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRlIDxBdWRpb1Rv
b2xib3gvQXVkaW9Db252ZXJ0ZXIuaD4KKyNpbmNsdWRlIDxBdWRpb1VuaXQvQXVkaW9Vbml0Lmg+
CisjaW5jbHVkZSA8Q29yZU1lZGlhL0NNU3luYy5oPgorI2luY2x1ZGUgPG1hY2gvbWFjaF90aW1l
Lmg+CisjaW5jbHVkZSA8cGFsL2F2Zm91bmRhdGlvbi9NZWRpYVRpbWVBVkZvdW5kYXRpb24uaD4K
KyNpbmNsdWRlIDxwYWwvc3BpL2NmL0NvcmVBdWRpb1NQSS5oPgorI2luY2x1ZGUgPHN5cy90aW1l
Lmg+CisjaW5jbHVkZSA8d3RmL0FsZ29yaXRobXMuaD4KKyNpbmNsdWRlIDx3dGYvTG9jay5oPgor
I2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVk
Lmg+CisjaW5jbHVkZSA8d3RmL1Njb3BlLmg+CisKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQor
I2luY2x1ZGUgIkFWQXVkaW9TZXNzaW9uQ2FwdHVyZURldmljZU1hbmFnZXIuaCIKKyNlbmRpZgor
CisjaW5jbHVkZSA8cGFsL2NmL0F1ZGlvVG9vbGJveFNvZnRMaW5rLmg+CisjaW5jbHVkZSA8cGFs
L2NmL0NvcmVNZWRpYVNvZnRMaW5rLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY29uc3Qg
VUludDMyIG91dHB1dEJ1cyA9IDA7Citjb25zdCBVSW50MzIgaW5wdXRCdXMgPSAxOworCitjbGFz
cyBDb3JlQXVkaW9TaGFyZWRJbnRlcm5hbFVuaXQgOiAgcHVibGljIENvcmVBdWRpb1NoYXJlZFVu
aXQ6OkludGVybmFsVW5pdCB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6
CisgICAgc3RhdGljIEV4cGVjdGVkPFVuaXF1ZVJlZjxJbnRlcm5hbFVuaXQ+LCBPU1N0YXR1cz4g
Y3JlYXRlKCk7CisgICAgZXhwbGljaXQgQ29yZUF1ZGlvU2hhcmVkSW50ZXJuYWxVbml0KEF1ZGlv
VW5pdCk7CisgICAgfkNvcmVBdWRpb1NoYXJlZEludGVybmFsVW5pdCgpIGZpbmFsOworCitwcml2
YXRlOgorICAgIE9TU3RhdHVzIGluaXRpYWxpemUoKSBmaW5hbDsKKyAgICBPU1N0YXR1cyB1bmlu
aXRpYWxpemUoKSBmaW5hbDsKKyAgICBPU1N0YXR1cyBzdGFydCgpIGZpbmFsOworICAgIE9TU3Rh
dHVzIHN0b3AoKSBmaW5hbDsKKyAgICBPU1N0YXR1cyBzZXQoQXVkaW9Vbml0UHJvcGVydHlJRCwg
QXVkaW9Vbml0U2NvcGUsIEF1ZGlvVW5pdEVsZW1lbnQsIGNvbnN0IHZvaWQqLCBVSW50MzIpIGZp
bmFsOworICAgIE9TU3RhdHVzIGdldChBdWRpb1VuaXRQcm9wZXJ0eUlELCBBdWRpb1VuaXRTY29w
ZSwgQXVkaW9Vbml0RWxlbWVudCwgdm9pZCosIFVJbnQzMiopIGZpbmFsOworICAgIE9TU3RhdHVz
IHJlbmRlcihBdWRpb1VuaXRSZW5kZXJBY3Rpb25GbGFncyosIGNvbnN0IEF1ZGlvVGltZVN0YW1w
KiwgVUludDMyLCBVSW50MzIsIEF1ZGlvQnVmZmVyTGlzdCopIGZpbmFsOworICAgIE9TU3RhdHVz
IGRlZmF1bHRJbnB1dERldmljZSh1aW50MzJfdCopIGZpbmFsOworICAgIE9TU3RhdHVzIGRlZmF1
bHRPdXRwdXREZXZpY2UodWludDMyX3QqKSBmaW5hbDsKKworICAgIEF1ZGlvVW5pdCBtX2lvVW5p
dCB7IG51bGxwdHIgfTsKK307CisKK0V4cGVjdGVkPFVuaXF1ZVJlZjxDb3JlQXVkaW9TaGFyZWRV
bml0OjpJbnRlcm5hbFVuaXQ+LCBPU1N0YXR1cz4gQ29yZUF1ZGlvU2hhcmVkSW50ZXJuYWxVbml0
OjpjcmVhdGUoKQoreworICAgIEF1ZGlvQ29tcG9uZW50RGVzY3JpcHRpb24gaW9Vbml0RGVzY3Jp
cHRpb24gPSB7IGtBdWRpb1VuaXRUeXBlX091dHB1dCwga0F1ZGlvVW5pdFN1YlR5cGVfVm9pY2VQ
cm9jZXNzaW5nSU8sIGtBdWRpb1VuaXRNYW51ZmFjdHVyZXJfQXBwbGUsIDAsIDAgfTsKKyAgICBB
dWRpb0NvbXBvbmVudCBpb0NvbXBvbmVudCA9IFBBTDo6QXVkaW9Db21wb25lbnRGaW5kTmV4dChu
dWxscHRyLCAmaW9Vbml0RGVzY3JpcHRpb24pOworICAgIEFTU0VSVChpb0NvbXBvbmVudCk7Cisg
ICAgaWYgKCFpb0NvbXBvbmVudCkgeworICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihXZWJSVEMs
ICJDb3JlQXVkaW9TaGFyZWRJbnRlcm5hbFVuaXQgdW5hYmxlIHRvIGZpbmQgdnBpbyB1bml0IGNv
bXBvbmVudCIpOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoLTEpOworICAgIH0KKwor
I2lmICFMT0dfRElTQUJMRUQKKyAgICBDRlN0cmluZ1JlZiBuYW1lID0gbnVsbHB0cjsKKyAgICBQ
QUw6OkF1ZGlvQ29tcG9uZW50Q29weU5hbWUoaW9Db21wb25lbnQsICZuYW1lKTsKKyAgICBpZiAo
bmFtZSkgeworICAgICAgICBTdHJpbmcgaW9Vbml0TmFtZSA9IG5hbWU7CisgICAgICAgIENGUmVs
ZWFzZShuYW1lKTsKKyAgICAgICAgUkVMRUFTRV9MT0coV2ViUlRDLCAiQ29yZUF1ZGlvU2hhcmVk
SW50ZXJuYWxVbml0IGNyZWF0ZWQgXCIle3ByaXZhdGV9c1wiIGNvbXBvbmVudCIsIGlvVW5pdE5h
bWUudXRmOCgpLmRhdGEoKSk7CisgICAgfQorI2VuZGlmCisKKyAgICBBdWRpb1VuaXQgaW9Vbml0
OworICAgIGF1dG8gZXJyID0gUEFMOjpBdWRpb0NvbXBvbmVudEluc3RhbmNlTmV3KGlvQ29tcG9u
ZW50LCAmaW9Vbml0KTsKKyAgICBpZiAoZXJyKSB7CisgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9S
KFdlYlJUQywgIkNvcmVBdWRpb1NoYXJlZEludGVybmFsVW5pdCB1bmFibGUgdG8gb3BlbiB2cGlv
IHVuaXQsIGVycm9yICVkICglLjRzKSIsIChpbnQpZXJyLCAoY2hhciopJmVycik7CisgICAgICAg
IHJldHVybiBtYWtlVW5leHBlY3RlZChlcnIpOworICAgIH0KKworICAgIFJFTEVBU0VfTE9HKFdl
YlJUQywgIlN1Y2Nlc3NmdWxseSBjcmVhdGVkIGEgQ29yZUF1ZGlvU2hhcmVkSW50ZXJuYWxVbml0
Iik7CisKKyAgICBVbmlxdWVSZWY8Q29yZUF1ZGlvU2hhcmVkVW5pdDo6SW50ZXJuYWxVbml0PiBy
ZXN1bHQgPSBtYWtlVW5pcXVlUmVmPENvcmVBdWRpb1NoYXJlZEludGVybmFsVW5pdD4oaW9Vbml0
KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitDb3JlQXVkaW9TaGFyZWRJbnRlcm5hbFVuaXQ6
OkNvcmVBdWRpb1NoYXJlZEludGVybmFsVW5pdChBdWRpb1VuaXQgaW9Vbml0KQorICAgIDogbV9p
b1VuaXQoaW9Vbml0KQoreworfQorCitDb3JlQXVkaW9TaGFyZWRJbnRlcm5hbFVuaXQ6On5Db3Jl
QXVkaW9TaGFyZWRJbnRlcm5hbFVuaXQoKQoreworICAgIFBBTDo6QXVkaW9Db21wb25lbnRJbnN0
YW5jZURpc3Bvc2UobV9pb1VuaXQpOworfQorCitPU1N0YXR1cyBDb3JlQXVkaW9TaGFyZWRJbnRl
cm5hbFVuaXQ6OmluaXRpYWxpemUoKQoreworICAgIHJldHVybiBQQUw6OkF1ZGlvVW5pdEluaXRp
YWxpemUobV9pb1VuaXQpOworfQorCitPU1N0YXR1cyBDb3JlQXVkaW9TaGFyZWRJbnRlcm5hbFVu
aXQ6OnVuaW5pdGlhbGl6ZSgpCit7CisgICAgcmV0dXJuIEF1ZGlvVW5pdFVuaW5pdGlhbGl6ZSht
X2lvVW5pdCk7Cit9CisKK09TU3RhdHVzIENvcmVBdWRpb1NoYXJlZEludGVybmFsVW5pdDo6c3Rh
cnQoKQoreworICAgIHJldHVybiBQQUw6OkF1ZGlvT3V0cHV0VW5pdFN0YXJ0KG1faW9Vbml0KTsK
K30KKworT1NTdGF0dXMgQ29yZUF1ZGlvU2hhcmVkSW50ZXJuYWxVbml0OjpzdG9wKCkKK3sKKyAg
ICByZXR1cm4gUEFMOjpBdWRpb091dHB1dFVuaXRTdG9wKG1faW9Vbml0KTsKK30KKworT1NTdGF0
dXMgQ29yZUF1ZGlvU2hhcmVkSW50ZXJuYWxVbml0OjpzZXQoQXVkaW9Vbml0UHJvcGVydHlJRCBw
cm9wZXJ0eUlELCBBdWRpb1VuaXRTY29wZSBzY29wZSwgQXVkaW9Vbml0RWxlbWVudCBlbGVtZW50
LCBjb25zdCB2b2lkKiB2YWx1ZSwgVUludDMyIHNpemUpCit7CisgICAgcmV0dXJuIFBBTDo6QXVk
aW9Vbml0U2V0UHJvcGVydHkobV9pb1VuaXQsIHByb3BlcnR5SUQsIHNjb3BlLCBlbGVtZW50LCAm
dmFsdWUsIHNpemUpOworfQorCitPU1N0YXR1cyBDb3JlQXVkaW9TaGFyZWRJbnRlcm5hbFVuaXQ6
OmdldChBdWRpb1VuaXRQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIEF1ZGlvVW5pdFNjb3BlIHNjb3Bl
LCBBdWRpb1VuaXRFbGVtZW50IGVsZW1lbnQsIHZvaWQqIHZhbHVlLCBVSW50MzIqIHNpemUpCit7
CisgICAgcmV0dXJuIFBBTDo6QXVkaW9Vbml0R2V0UHJvcGVydHkobV9pb1VuaXQsIHByb3BlcnR5
SUQsIHNjb3BlLCBlbGVtZW50LCB2YWx1ZSwgc2l6ZSk7Cit9CisKK09TU3RhdHVzIENvcmVBdWRp
b1NoYXJlZEludGVybmFsVW5pdDo6cmVuZGVyKEF1ZGlvVW5pdFJlbmRlckFjdGlvbkZsYWdzKiBp
b0FjdGlvbkZsYWdzLCBjb25zdCBBdWRpb1RpbWVTdGFtcCogaW5UaW1lU3RhbXAsIFVJbnQzMiBp
bk91dHB1dEJ1c051bWJlciwgVUludDMyIGluTnVtYmVyRnJhbWVzLCBBdWRpb0J1ZmZlckxpc3Qq
IGxpc3QpCit7CisgICAgcmV0dXJuIEF1ZGlvVW5pdFJlbmRlcihtX2lvVW5pdCwgaW9BY3Rpb25G
bGFncywgaW5UaW1lU3RhbXAsIGluT3V0cHV0QnVzTnVtYmVyLCBpbk51bWJlckZyYW1lcywgbGlz
dCk7Cit9CisKK09TU3RhdHVzIENvcmVBdWRpb1NoYXJlZEludGVybmFsVW5pdDo6ZGVmYXVsdElu
cHV0RGV2aWNlKHVpbnQzMl90KiBkZXZpY2VJRCkKK3sKKyNpZiBQTEFURk9STShNQUMpCisgICAg
VUludDMyIHByb3BlcnR5U2l6ZSA9IHNpemVvZigqZGV2aWNlSUQpOworICAgIGF1dG8gZXJyID0g
Z2V0KGtBdWRpb091dHB1dFVuaXRQcm9wZXJ0eV9DdXJyZW50RGV2aWNlLCBrQXVkaW9Vbml0U2Nv
cGVfR2xvYmFsLCBpbnB1dEJ1cywgZGV2aWNlSUQsICZwcm9wZXJ0eVNpemUpOworICAgIFJFTEVB
U0VfTE9HX0VSUk9SX0lGKGVyciwgV2ViUlRDLCAiQ29yZUF1ZGlvU2hhcmVkSW50ZXJuYWxVbml0
IHVuYWJsZSB0byBnZXQgZGVmYXVsdCBpbnB1dCBkZXZpY2UgSUQsIGVycm9yICVkICglLjRzKSIs
IChpbnQpZXJyLCAoY2hhciopJmVycik7CisgICAgcmV0dXJuIGVycjsKKyNlbHNlCisgICAgVU5V
U0VEX1BBUkFNKGRldmljZUlEKTsKKyAgICByZXR1cm4gLTE7CisjZW5kaWYKK30KKworT1NTdGF0
dXMgQ29yZUF1ZGlvU2hhcmVkSW50ZXJuYWxVbml0OjpkZWZhdWx0T3V0cHV0RGV2aWNlKHVpbnQz
Ml90KiBkZXZpY2VJRCkKK3sKKyNpZiBQTEFURk9STShNQUMpCisgICAgQXVkaW9PYmplY3RQcm9w
ZXJ0eUFkZHJlc3MgYWRkcmVzcyA9IHsKKyAgICAgICAga0F1ZGlvSGFyZHdhcmVQcm9wZXJ0eURl
ZmF1bHRPdXRwdXREZXZpY2UsCisgICAgICAgIGtBdWRpb09iamVjdFByb3BlcnR5U2NvcGVHbG9i
YWwsCisjaWYgSEFWRShBVURJT19PQkpFQ1RfUFJPUEVSVFlfRUxFTUVOVF9NQUlOKQorICAgICAg
ICBrQXVkaW9PYmplY3RQcm9wZXJ0eUVsZW1lbnRNYWluCisjZWxzZQorICAgICAgICBBTExPV19E
RVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19CRUdJTgorICAgICAgICBrQXVkaW9PYmplY3RQcm9wZXJ0
eUVsZW1lbnRNYXN0ZXIKKyAgICAgICAgQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfRU5E
CisjZW5kaWYKKyAgICB9OworCisgICAgaWYgKEF1ZGlvT2JqZWN0SGFzUHJvcGVydHkoa0F1ZGlv
T2JqZWN0U3lzdGVtT2JqZWN0LCAmYWRkcmVzcykpIHsKKyAgICAgICAgVUludDMyIHByb3BlcnR5
U2l6ZSA9IHNpemVvZihBdWRpb0RldmljZUlEKTsKKyAgICAgICAgcmV0dXJuIEF1ZGlvT2JqZWN0
R2V0UHJvcGVydHlEYXRhKGtBdWRpb09iamVjdFN5c3RlbU9iamVjdCwgJmFkZHJlc3MsIDAsIG51
bGxwdHIsICZwcm9wZXJ0eVNpemUsIGRldmljZUlEKTsKKyAgICB9CisjZWxzZQorICAgIFVOVVNF
RF9QQVJBTShkZXZpY2VJRCk7CisjZW5kaWYKKyAgICByZXR1cm4gLTE7Cit9CisKK0NvcmVBdWRp
b1NoYXJlZFVuaXQmIENvcmVBdWRpb1NoYXJlZFVuaXQ6OnVuaXQoKQoreworICAgIHN0YXRpYyBO
ZXZlckRlc3Ryb3llZDxDb3JlQXVkaW9TaGFyZWRVbml0PiBzaW5nbGV0b247CisgICAgcmV0dXJu
IHNpbmdsZXRvbjsKK30KKworQ29yZUF1ZGlvU2hhcmVkVW5pdDo6Q29yZUF1ZGlvU2hhcmVkVW5p
dCgpCisgICAgOiBtX3NhbXBsZVJhdGVDYXBhYmlsaXRpZXMoODAwMCwgOTYwMDApCisgICAgLCBt
X3ZlcmlmeUNhcHR1cmluZ1RpbWVyKCp0aGlzLCAmQ29yZUF1ZGlvU2hhcmVkVW5pdDo6dmVyaWZ5
SXNDYXB0dXJpbmcpCit7Cit9CisKK3ZvaWQgQ29yZUF1ZGlvU2hhcmVkVW5pdDo6cmVzZXRTYW1w
bGVSYXRlKCkKK3sKKyAgICBzZXRTYW1wbGVSYXRlKG1fZ2V0U2FtcGxlUmF0ZUNhbGxiYWNrID8g
bV9nZXRTYW1wbGVSYXRlQ2FsbGJhY2soKSA6IEF1ZGlvU2Vzc2lvbjo6c2hhcmVkU2Vzc2lvbigp
LnNhbXBsZVJhdGUoKSk7Cit9CisKK3ZvaWQgQ29yZUF1ZGlvU2hhcmVkVW5pdDo6Y2FwdHVyZURl
dmljZUNoYW5nZWQoKQoreworI2lmIFBMQVRGT1JNKE1BQykKKyAgICByZWNvbmZpZ3VyZUF1ZGlv
VW5pdCgpOworI2Vsc2UKKyAgICBBVkF1ZGlvU2Vzc2lvbkNhcHR1cmVEZXZpY2VNYW5hZ2VyOjpz
aW5nbGV0b24oKS5zZXRQcmVmZXJyZWRBdWRpb1Nlc3Npb25EZXZpY2VVSUQocGVyc2lzdGVudElE
KCkpOworI2VuZGlmCit9CisKK3NpemVfdCBDb3JlQXVkaW9TaGFyZWRVbml0OjpwcmVmZXJyZWRJ
T0J1ZmZlclNpemUoKQoreworICAgIHJldHVybiBBdWRpb1Nlc3Npb246OnNoYXJlZFNlc3Npb24o
KS5idWZmZXJTaXplKCk7Cit9CisKK09TU3RhdHVzIENvcmVBdWRpb1NoYXJlZFVuaXQ6OnNldHVw
QXVkaW9Vbml0KCkKK3sKKyAgICBpZiAobV9pb1VuaXQpCisgICAgICAgIHJldHVybiAwOworCisg
ICAgQVNTRVJUKGhhc0NsaWVudHMoKSk7CisKKyAgICBtYWNoX3RpbWViYXNlX2luZm9fZGF0YV90
IHRpbWViYXNlSW5mbzsKKyAgICBtYWNoX3RpbWViYXNlX2luZm8oJnRpbWViYXNlSW5mbyk7Cisg
ICAgbV9EVFNDb252ZXJzaW9uUmF0aW8gPSAxZS05ICogc3RhdGljX2Nhc3Q8ZG91YmxlPih0aW1l
YmFzZUluZm8ubnVtZXIpIC8gc3RhdGljX2Nhc3Q8ZG91YmxlPih0aW1lYmFzZUluZm8uZGVub20p
OworCisgICAgYXV0byByZXN1bHQgPSBtX2NyZWF0aW9uQ2FsbGJhY2sgPyBtX2NyZWF0aW9uQ2Fs
bGJhY2soKSA6IENvcmVBdWRpb1NoYXJlZEludGVybmFsVW5pdDo6Y3JlYXRlKCk7CisgICAgaWYg
KCFyZXN1bHQuaGFzX3ZhbHVlKCkpCisgICAgICAgIHJldHVybiByZXN1bHQuZXJyb3IoKTsKKwor
ICAgIG1faW9Vbml0ID0gV1RGTW92ZShyZXN1bHQudmFsdWUoKSkubW92ZVRvVW5pcXVlUHRyKCk7
CisgICAgaWYgKCFlbmFibGVFY2hvQ2FuY2VsbGF0aW9uKCkpIHsKKyAgICAgICAgdWludDMyX3Qg
cGFyYW0gPSAwOworICAgICAgICBpZiAoYXV0byBlcnIgPSBtX2lvVW5pdC0+c2V0KGtBVVZvaWNl
SU9Qcm9wZXJ0eV9Wb2ljZVByb2Nlc3NpbmdFbmFibGVBR0MsIGtBdWRpb1VuaXRTY29wZV9HbG9i
YWwsIGlucHV0QnVzLCAmcGFyYW0sIHNpemVvZihwYXJhbSkpKSB7CisgICAgICAgICAgICBSRUxF
QVNFX0xPR19FUlJPUihXZWJSVEMsICJDb3JlQXVkaW9TaGFyZWRVbml0OjpzZXR1cEF1ZGlvVW5p
dCglcCkgdW5hYmxlIHRvIHNldCB2cGlvIGF1dG9tYXRpYyBnYWluIGNvbnRyb2wsIGVycm9yICVk
ICglLjRzKSIsIHRoaXMsIChpbnQpZXJyLCAoY2hhciopJmVycik7CisgICAgICAgICAgICByZXR1
cm4gZXJyOworICAgICAgICB9CisgICAgICAgIHBhcmFtID0gMTsKKyAgICAgICAgaWYgKGF1dG8g
ZXJyID0gbV9pb1VuaXQtPnNldChrQVVWb2ljZUlPUHJvcGVydHlfQnlwYXNzVm9pY2VQcm9jZXNz
aW5nLCBrQXVkaW9Vbml0U2NvcGVfR2xvYmFsLCBpbnB1dEJ1cywgJnBhcmFtLCBzaXplb2YocGFy
YW0pKSkgeworICAgICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoV2ViUlRDLCAiQ29yZUF1ZGlv
U2hhcmVkVW5pdDo6c2V0dXBBdWRpb1VuaXQoJXApIHVuYWJsZSB0byBzZXQgdnBpbyB1bml0IGVj
aG8gY2FuY2VsbGF0aW9uLCBlcnJvciAlZCAoJS40cykiLCB0aGlzLCAoaW50KWVyciwgKGNoYXIq
KSZlcnIpOworICAgICAgICAgICAgcmV0dXJuIGVycjsKKyAgICAgICAgfQorICAgIH0KKworI2lm
IFBMQVRGT1JNKElPU19GQU1JTFkpCisgICAgdWludDMyX3QgcGFyYW0gPSAxOworICAgIGlmIChh
dXRvIGVyciA9IG1faW9Vbml0LT5zZXQoa0F1ZGlvT3V0cHV0VW5pdFByb3BlcnR5X0VuYWJsZUlP
LCBrQXVkaW9Vbml0U2NvcGVfSW5wdXQsIGlucHV0QnVzLCAmcGFyYW0sIHNpemVvZihwYXJhbSkp
KSB7CisgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFdlYlJUQywgIkNvcmVBdWRpb1NoYXJlZFVu
aXQ6OnNldHVwQXVkaW9Vbml0KCVwKSB1bmFibGUgdG8gZW5hYmxlIHZwaW8gdW5pdCBpbnB1dCwg
ZXJyb3IgJWQgKCUuNHMpIiwgdGhpcywgKGludCllcnIsIChjaGFyKikmZXJyKTsKKyAgICAgICAg
cmV0dXJuIGVycjsKKyAgICB9CisjZWxzZQorICAgIGF1dG8gZGV2aWNlSUQgPSBjYXB0dXJlRGV2
aWNlSUQoKTsKKyAgICAvLyBGSVhNRTogV2UgcHJvYmFibHkgd2FudCB0byBtYWtlIGRlZmF1bHQg
aW5wdXQvb3V0cHV0IGRldmljZXMuCisgICAgaWYgKCFkZXZpY2VJRCkgeworICAgICAgICBpZiAo
YXV0byBlcnIgPSBtX2lvVW5pdC0+ZGVmYXVsdElucHV0RGV2aWNlKCZkZXZpY2VJRCkpCisgICAg
ICAgICAgICByZXR1cm4gZXJyOworICAgIH0KKworICAgIGlmIChhdXRvIGVyciA9IG1faW9Vbml0
LT5zZXQoa0F1ZGlvT3V0cHV0VW5pdFByb3BlcnR5X0N1cnJlbnREZXZpY2UsIGtBdWRpb1VuaXRT
Y29wZV9HbG9iYWwsIGlucHV0QnVzLCAmZGV2aWNlSUQsIHNpemVvZihkZXZpY2VJRCkpKSB7Cisg
ICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFdlYlJUQywgIkNvcmVBdWRpb1NoYXJlZFVuaXQ6OnNl
dHVwQXVkaW9Vbml0KCVwKSB1bmFibGUgdG8gc2V0IHZwaW8gdW5pdCBjYXB0dXJlIGRldmljZSBJ
RCAlZCwgZXJyb3IgJWQgKCUuNHMpIiwgdGhpcywgKGludClkZXZpY2VJRCwgKGludCllcnIsIChj
aGFyKikmZXJyKTsKKyAgICAgICAgcmV0dXJuIGVycjsKKyAgICB9CisKKyAgICB1aW50MzJfdCBk
ZWZhdWx0T3V0cHV0RGV2aWNlSUQ7CisgICAgYXV0byBlcnIgPSBtX2lvVW5pdC0+ZGVmYXVsdE91
dHB1dERldmljZSgmZGVmYXVsdE91dHB1dERldmljZUlEKTsKKyAgICBpZiAoIWVycikgeworICAg
ICAgICBlcnIgPSBtX2lvVW5pdC0+c2V0KGtBdWRpb091dHB1dFVuaXRQcm9wZXJ0eV9DdXJyZW50
RGV2aWNlLCBrQXVkaW9Vbml0U2NvcGVfR2xvYmFsLCBvdXRwdXRCdXMsICZkZWZhdWx0T3V0cHV0
RGV2aWNlSUQsIHNpemVvZihkZWZhdWx0T3V0cHV0RGV2aWNlSUQpKTsKKyAgICAgICAgUkVMRUFT
RV9MT0dfRVJST1JfSUYoZXJyLCBXZWJSVEMsICJDb3JlQXVkaW9TaGFyZWRVbml0OjpzZXR1cEF1
ZGlvVW5pdCglcCkgdW5hYmxlIHRvIHNldCB2cGlvIHVuaXQgb3V0cHV0IGRldmljZSBJRCAlZCwg
ZXJyb3IgJWQgKCUuNHMpIiwgdGhpcywgKGludClkZWZhdWx0T3V0cHV0RGV2aWNlSUQsIChpbnQp
ZXJyLCAoY2hhciopJmVycik7CisgICAgfQorICAgIHNldE91dHB1dERldmljZUlEKCFlcnIgPyBk
ZWZhdWx0T3V0cHV0RGV2aWNlSUQgOiAwKTsKKyNlbmRpZgorCisgICAgLy8gRklYTUU6IEFkZCBz
dXBwb3J0IGZvciBkaWZmZXJlbnQgc3BlYWtlci9taWNyb3Bob25lIHNhbXBsZSByYXRlcy4KKyAg
ICBpbnQgYWN0dWFsU2FtcGxlUmF0ZSA9IHRoaXMtPmFjdHVhbFNhbXBsZVJhdGUoKTsKKyAgICBp
ZiAoYXV0byBlcnIgPSBjb25maWd1cmVNaWNyb3Bob25lUHJvYyhhY3R1YWxTYW1wbGVSYXRlKSkK
KyAgICAgICAgcmV0dXJuIGVycjsKKworICAgIGlmIChhdXRvIGVyciA9IGNvbmZpZ3VyZVNwZWFr
ZXJQcm9jKGFjdHVhbFNhbXBsZVJhdGUpKQorICAgICAgICByZXR1cm4gZXJyOworCisgICAgaWYg
KGF1dG8gZXJyID0gbV9pb1VuaXQtPmluaXRpYWxpemUoKSkgeworICAgICAgICBSRUxFQVNFX0xP
R19FUlJPUihXZWJSVEMsICJDb3JlQXVkaW9TaGFyZWRVbml0OjpzZXR1cEF1ZGlvVW5pdCglcCkg
QXVkaW9Vbml0SW5pdGlhbGl6ZSgpIGZhaWxlZCwgZXJyb3IgJWQgKCUuNHMpIiwgdGhpcywgKGlu
dCllcnIsIChjaGFyKikmZXJyKTsKKyAgICAgICAgcmV0dXJuIGVycjsKKyAgICB9CisgICAgbV9p
b1VuaXRJbml0aWFsaXplZCA9IHRydWU7CisKKyAgICB1bmR1Y2soKTsKKworICAgIHJldHVybiAw
OworfQorCit2b2lkIENvcmVBdWRpb1NoYXJlZFVuaXQ6OnVuZHVjaygpCit7CisgICAgdWludDMy
X3Qgb3V0cHV0RGV2aWNlOworICAgIGlmIChtX2lvVW5pdCAmJiAhbV9pb1VuaXQtPmRlZmF1bHRP
dXRwdXREZXZpY2UoJm91dHB1dERldmljZSkpCisgICAgICAgIEF1ZGlvRGV2aWNlRHVjayhvdXRw
dXREZXZpY2UsIDEuMCwgbnVsbHB0ciwgMCk7Cit9CisKK2ludCBDb3JlQXVkaW9TaGFyZWRVbml0
OjphY3R1YWxTYW1wbGVSYXRlKCkgY29uc3QKK3sKKyAgICBMb2NrZXIgbG9ja2VyIHsgbV9zcGVh
a2VyU2FtcGxlc1Byb2R1Y2VyTG9jayB9OworICAgIHJldHVybiBtX3NwZWFrZXJTYW1wbGVzUHJv
ZHVjZXIgPyBtX3NwZWFrZXJTYW1wbGVzUHJvZHVjZXItPmZvcm1hdCgpLnN0cmVhbURlc2NyaXB0
aW9uKCkubVNhbXBsZVJhdGUgOiBzYW1wbGVSYXRlKCk7Cit9CisKK09TU3RhdHVzIENvcmVBdWRp
b1NoYXJlZFVuaXQ6OmNvbmZpZ3VyZU1pY3JvcGhvbmVQcm9jKGludCBzYW1wbGVSYXRlKQorewor
ICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisKKyAgICBBVVJlbmRlckNhbGxiYWNrU3RydWN0
IGNhbGxiYWNrID0geyBtaWNyb3Bob25lQ2FsbGJhY2ssIHRoaXMgfTsKKyAgICBpZiAoYXV0byBl
cnIgPSBtX2lvVW5pdC0+c2V0KGtBdWRpb091dHB1dFVuaXRQcm9wZXJ0eV9TZXRJbnB1dENhbGxi
YWNrLCBrQXVkaW9Vbml0U2NvcGVfR2xvYmFsLCBpbnB1dEJ1cywgJmNhbGxiYWNrLCBzaXplb2Yo
Y2FsbGJhY2spKSkgeworICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihXZWJSVEMsICJDb3JlQXVk
aW9TaGFyZWRVbml0Ojpjb25maWd1cmVNaWNyb3Bob25lUHJvYyglcCkgdW5hYmxlIHRvIHNldCB2
cGlvIHVuaXQgbWljIHByb2MsIGVycm9yICVkICglLjRzKSIsIHRoaXMsIChpbnQpZXJyLCAoY2hh
ciopJmVycik7CisgICAgICAgIHJldHVybiBlcnI7CisgICAgfQorCisgICAgQXVkaW9TdHJlYW1C
YXNpY0Rlc2NyaXB0aW9uIG1pY3JvcGhvbmVQcm9jRm9ybWF0ID0geyB9OworCisgICAgVUludDMy
IHNpemUgPSBzaXplb2YobWljcm9waG9uZVByb2NGb3JtYXQpOworICAgIGlmIChhdXRvIGVyciA9
IG1faW9Vbml0LT5nZXQoa0F1ZGlvVW5pdFByb3BlcnR5X1N0cmVhbUZvcm1hdCwga0F1ZGlvVW5p
dFNjb3BlX091dHB1dCwgaW5wdXRCdXMsICZtaWNyb3Bob25lUHJvY0Zvcm1hdCwgJnNpemUpKSB7
CisgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFdlYlJUQywgIkNvcmVBdWRpb1NoYXJlZFVuaXQ6
OmNvbmZpZ3VyZU1pY3JvcGhvbmVQcm9jKCVwKSB1bmFibGUgdG8gZ2V0IG91dHB1dCBzdHJlYW0g
Zm9ybWF0LCBlcnJvciAlZCAoJS40cykiLCB0aGlzLCAoaW50KWVyciwgKGNoYXIqKSZlcnIpOwor
ICAgICAgICByZXR1cm4gZXJyOworICAgIH0KKworICAgIG1pY3JvcGhvbmVQcm9jRm9ybWF0Lm1T
YW1wbGVSYXRlID0gc2FtcGxlUmF0ZTsKKyAgICBpZiAoYXV0byBlcnIgPSBtX2lvVW5pdC0+c2V0
KGtBdWRpb1VuaXRQcm9wZXJ0eV9TdHJlYW1Gb3JtYXQsIGtBdWRpb1VuaXRTY29wZV9PdXRwdXQs
IGlucHV0QnVzLCAmbWljcm9waG9uZVByb2NGb3JtYXQsIHNpemUpKSB7CisgICAgICAgIFJFTEVB
U0VfTE9HX0VSUk9SKFdlYlJUQywgIkNvcmVBdWRpb1NoYXJlZFVuaXQ6OmNvbmZpZ3VyZU1pY3Jv
cGhvbmVQcm9jKCVwKSB1bmFibGUgdG8gc2V0IG91dHB1dCBzdHJlYW0gZm9ybWF0LCBlcnJvciAl
ZCAoJS40cykiLCB0aGlzLCAoaW50KWVyciwgKGNoYXIqKSZlcnIpOworICAgICAgICByZXR1cm4g
ZXJyOworICAgIH0KKworICAgIG1fbWljcm9waG9uZVNhbXBsZUJ1ZmZlciA9IEF1ZGlvU2FtcGxl
QnVmZmVyTGlzdDo6Y3JlYXRlKG1pY3JvcGhvbmVQcm9jRm9ybWF0LCBwcmVmZXJyZWRJT0J1ZmZl
clNpemUoKSAqIDIpOworICAgIG1fbWljcm9waG9uZVByb2NGb3JtYXQgPSBtaWNyb3Bob25lUHJv
Y0Zvcm1hdDsKKworICAgIHJldHVybiBub0VycjsKK30KKworT1NTdGF0dXMgQ29yZUF1ZGlvU2hh
cmVkVW5pdDo6Y29uZmlndXJlU3BlYWtlclByb2MoaW50IHNhbXBsZVJhdGUpCit7CisgICAgQVNT
RVJUKGlzTWFpblRocmVhZCgpKTsKKworICAgIEFVUmVuZGVyQ2FsbGJhY2tTdHJ1Y3QgY2FsbGJh
Y2sgPSB7IHNwZWFrZXJDYWxsYmFjaywgdGhpcyB9OworICAgIGlmIChhdXRvIGVyciA9IG1faW9V
bml0LT5zZXQoa0F1ZGlvVW5pdFByb3BlcnR5X1NldFJlbmRlckNhbGxiYWNrLCBrQXVkaW9Vbml0
U2NvcGVfSW5wdXQsIG91dHB1dEJ1cywgJmNhbGxiYWNrLCBzaXplb2YoY2FsbGJhY2spKSkgewor
ICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihXZWJSVEMsICJDb3JlQXVkaW9TaGFyZWRVbml0Ojpj
b25maWd1cmVTcGVha2VyUHJvYyglcCkgdW5hYmxlIHRvIHNldCB2cGlvIHVuaXQgc3BlYWtlciBw
cm9jLCBlcnJvciAlZCAoJS40cykiLCB0aGlzLCAoaW50KWVyciwgKGNoYXIqKSZlcnIpOworICAg
ICAgICByZXR1cm4gZXJyOworICAgIH0KKworICAgIEF1ZGlvU3RyZWFtQmFzaWNEZXNjcmlwdGlv
biBzcGVha2VyUHJvY0Zvcm1hdDsKKyAgICBVSW50MzIgc2l6ZSA9IHNpemVvZihzcGVha2VyUHJv
Y0Zvcm1hdCk7CisgICAgeworICAgICAgICBMb2NrZXIgbG9ja2VyIHsgbV9zcGVha2VyU2FtcGxl
c1Byb2R1Y2VyTG9jayB9OworICAgICAgICBpZiAobV9zcGVha2VyU2FtcGxlc1Byb2R1Y2VyKSB7
CisgICAgICAgICAgICBzcGVha2VyUHJvY0Zvcm1hdCA9IG1fc3BlYWtlclNhbXBsZXNQcm9kdWNl
ci0+Zm9ybWF0KCkuc3RyZWFtRGVzY3JpcHRpb24oKTsKKyAgICAgICAgICAgIEFTU0VSVChzcGVh
a2VyUHJvY0Zvcm1hdC5tU2FtcGxlUmF0ZSA9PSBzYW1wbGVSYXRlKTsKKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIGlmIChhdXRvIGVyciA9IG1faW9Vbml0LT5nZXQoa0F1ZGlvVW5pdFBy
b3BlcnR5X1N0cmVhbUZvcm1hdCwga0F1ZGlvVW5pdFNjb3BlX0lucHV0LCBvdXRwdXRCdXMsICZz
cGVha2VyUHJvY0Zvcm1hdCwgJnNpemUpKSB7CisgICAgICAgICAgICAgICAgUkVMRUFTRV9MT0df
RVJST1IoV2ViUlRDLCAiQ29yZUF1ZGlvU2hhcmVkVW5pdDo6Y29uZmlndXJlU3BlYWtlclByb2Mo
JXApIHVuYWJsZSB0byBnZXQgaW5wdXQgc3RyZWFtIGZvcm1hdCwgZXJyb3IgJWQgKCUuNHMpIiwg
dGhpcywgKGludCllcnIsIChjaGFyKikmZXJyKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJy
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIHNwZWFrZXJQcm9jRm9ybWF0
Lm1TYW1wbGVSYXRlID0gc2FtcGxlUmF0ZTsKKworICAgIGlmIChhdXRvIGVyciA9IG1faW9Vbml0
LT5zZXQoa0F1ZGlvVW5pdFByb3BlcnR5X1N0cmVhbUZvcm1hdCwga0F1ZGlvVW5pdFNjb3BlX0lu
cHV0LCBvdXRwdXRCdXMsICZzcGVha2VyUHJvY0Zvcm1hdCwgc2l6ZSkpIHsKKyAgICAgICAgUkVM
RUFTRV9MT0dfRVJST1IoV2ViUlRDLCAiQ29yZUF1ZGlvU2hhcmVkVW5pdDo6Y29uZmlndXJlU3Bl
YWtlclByb2MoJXApIHVuYWJsZSB0byBnZXQgaW5wdXQgc3RyZWFtIGZvcm1hdCwgZXJyb3IgJWQg
KCUuNHMpIiwgdGhpcywgKGludCllcnIsIChjaGFyKikmZXJyKTsKKyAgICAgICAgcmV0dXJuIGVy
cjsKKyAgICB9CisKKyAgICBtX3NwZWFrZXJQcm9jRm9ybWF0ID0gc3BlYWtlclByb2NGb3JtYXQ7
CisKKyAgICByZXR1cm4gbm9FcnI7Cit9CisKKyNpZiAhTE9HX0RJU0FCTEVECit2b2lkIENvcmVB
dWRpb1NoYXJlZFVuaXQ6OmNoZWNrVGltZXN0YW1wcyhjb25zdCBBdWRpb1RpbWVTdGFtcCYgdGlt
ZVN0YW1wLCB1aW50NjRfdCBzYW1wbGVUaW1lLCBkb3VibGUgaG9zdFRpbWUpCit7CisgICAgaWYg
KCF0aW1lU3RhbXAubVNhbXBsZVRpbWUgfHwgc2FtcGxlVGltZSA9PSBtX2xhdGVzdE1pY1RpbWVT
dGFtcCB8fCAhaG9zdFRpbWUpCisgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFdlYlJUQywgIkNv
cmVBdWRpb1NoYXJlZFVuaXQ6OmNoZWNrVGltZXN0YW1wczogdW51c3VhbCB0aW1lc3RhbXBzLCBz
YW1wbGUgdGltZSA9ICVsbGQsIHByZXZpb3VzIHNhbXBsZSB0aW1lID0gJWxsZCwgaG9zdFRpbWUg
JWYiLCBzYW1wbGVUaW1lLCBtX2xhdGVzdE1pY1RpbWVTdGFtcCwgaG9zdFRpbWUpOworfQorI2Vu
ZGlmCisKK09TU3RhdHVzIENvcmVBdWRpb1NoYXJlZFVuaXQ6OnByb3ZpZGVTcGVha2VyRGF0YShB
dWRpb1VuaXRSZW5kZXJBY3Rpb25GbGFncyYgZmxhZ3MsIGNvbnN0IEF1ZGlvVGltZVN0YW1wJiB0
aW1lU3RhbXAsIFVJbnQzMiAvKmluQnVzTnVtYmVyKi8sIFVJbnQzMiBpbk51bWJlckZyYW1lcywg
QXVkaW9CdWZmZXJMaXN0JiBpb0RhdGEpCit7CisgICAgaWYgKG1faXNSZWNvbmZpZ3VyaW5nIHx8
ICFtX3NwZWFrZXJTYW1wbGVzUHJvZHVjZXJMb2NrLnRyeUxvY2soKSkgeworICAgICAgICBBdWRp
b1NhbXBsZUJ1ZmZlckxpc3Q6Onplcm9BQkwoaW9EYXRhLCBzdGF0aWNfY2FzdDxzaXplX3Q+KGlu
TnVtYmVyRnJhbWVzICogbV9zcGVha2VyUHJvY0Zvcm1hdC5ieXRlc1BlckZyYW1lKCkpKTsKKyAg
ICAgICAgZmxhZ3MgPSBrQXVkaW9Vbml0UmVuZGVyQWN0aW9uX091dHB1dElzU2lsZW5jZTsKKyAg
ICAgICAgcmV0dXJuIG5vRXJyOworICAgIH0KKworICAgIExvY2tlciBsb2NrZXIgeyBBZG9wdExv
Y2ssIG1fc3BlYWtlclNhbXBsZXNQcm9kdWNlckxvY2sgfTsKKyAgICBpZiAoIW1fc3BlYWtlclNh
bXBsZXNQcm9kdWNlcikgeworICAgICAgICBBdWRpb1NhbXBsZUJ1ZmZlckxpc3Q6Onplcm9BQkwo
aW9EYXRhLCBzdGF0aWNfY2FzdDxzaXplX3Q+KGluTnVtYmVyRnJhbWVzICogbV9zcGVha2VyUHJv
Y0Zvcm1hdC5ieXRlc1BlckZyYW1lKCkpKTsKKyAgICAgICAgZmxhZ3MgPSBrQXVkaW9Vbml0UmVu
ZGVyQWN0aW9uX091dHB1dElzU2lsZW5jZTsKKyAgICAgICAgcmV0dXJuIG5vRXJyOworICAgIH0K
KyAgICByZXR1cm4gbV9zcGVha2VyU2FtcGxlc1Byb2R1Y2VyLT5wcm9kdWNlU3BlYWtlclNhbXBs
ZXMoaW5OdW1iZXJGcmFtZXMsIGlvRGF0YSwgdGltZVN0YW1wLm1TYW1wbGVUaW1lLCB0aW1lU3Rh
bXAubUhvc3RUaW1lLCBmbGFncyk7Cit9CisKK09TU3RhdHVzIENvcmVBdWRpb1NoYXJlZFVuaXQ6
OnNwZWFrZXJDYWxsYmFjayh2b2lkICppblJlZkNvbiwgQXVkaW9Vbml0UmVuZGVyQWN0aW9uRmxh
Z3MqIGlvQWN0aW9uRmxhZ3MsIGNvbnN0IEF1ZGlvVGltZVN0YW1wKiBpblRpbWVTdGFtcCwgVUlu
dDMyIGluQnVzTnVtYmVyLCBVSW50MzIgaW5OdW1iZXJGcmFtZXMsIEF1ZGlvQnVmZmVyTGlzdCog
aW9EYXRhKQoreworICAgIEFTU0VSVChpb0FjdGlvbkZsYWdzKTsKKyAgICBBU1NFUlQoaW5UaW1l
U3RhbXApOworICAgIGF1dG8gZGF0YVNvdXJjZSA9IHN0YXRpY19jYXN0PENvcmVBdWRpb1NoYXJl
ZFVuaXQqPihpblJlZkNvbik7CisgICAgcmV0dXJuIGRhdGFTb3VyY2UtPnByb3ZpZGVTcGVha2Vy
RGF0YSgqaW9BY3Rpb25GbGFncywgKmluVGltZVN0YW1wLCBpbkJ1c051bWJlciwgaW5OdW1iZXJG
cmFtZXMsICppb0RhdGEpOworfQorCitPU1N0YXR1cyBDb3JlQXVkaW9TaGFyZWRVbml0Ojpwcm9j
ZXNzTWljcm9waG9uZVNhbXBsZXMoQXVkaW9Vbml0UmVuZGVyQWN0aW9uRmxhZ3MmIGlvQWN0aW9u
RmxhZ3MsIGNvbnN0IEF1ZGlvVGltZVN0YW1wJiB0aW1lU3RhbXAsIFVJbnQzMiBpbkJ1c051bWJl
ciwgVUludDMyIGluTnVtYmVyRnJhbWVzLCBBdWRpb0J1ZmZlckxpc3QqIC8qaW9EYXRhKi8pCit7
CisgICAgKyttX21pY3JvcGhvbmVQcm9jc0NhbGxlZDsKKworICAgIGlmIChtX2lzUmVjb25maWd1
cmluZykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gUHVsbCB0aHJvdWdoIHRoZSB2
cGlvIHVuaXQgdG8gb3VyIG1pYyBidWZmZXIuCisgICAgbV9taWNyb3Bob25lU2FtcGxlQnVmZmVy
LT5yZXNldCgpOworICAgIEF1ZGlvQnVmZmVyTGlzdCYgYnVmZmVyTGlzdCA9IG1fbWljcm9waG9u
ZVNhbXBsZUJ1ZmZlci0+YnVmZmVyTGlzdCgpOworICAgIGlmIChhdXRvIGVyciA9IG1faW9Vbml0
LT5yZW5kZXIoJmlvQWN0aW9uRmxhZ3MsICZ0aW1lU3RhbXAsIGluQnVzTnVtYmVyLCBpbk51bWJl
ckZyYW1lcywgJmJ1ZmZlckxpc3QpKSB7CisgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFdlYlJU
QywgIkNvcmVBdWRpb1NoYXJlZFVuaXQ6OnByb2Nlc3NNaWNyb3Bob25lU2FtcGxlcyglcCkgQXVk
aW9Vbml0UmVuZGVyIGZhaWxlZCB3aXRoIGVycm9yICVkICglLjRzKSwgYnVmZmVyTGlzdCBzaXpl
ICVkLCBpbk51bWJlckZyYW1lcyAlZCAiLCB0aGlzLCAoaW50KWVyciwgKGNoYXIqKSZlcnIsIChp
bnQpYnVmZmVyTGlzdC5tQnVmZmVyc1swXS5tRGF0YUJ5dGVTaXplLCAoaW50KWluTnVtYmVyRnJh
bWVzKTsKKyAgICAgICAgaWYgKGVyciA9PSBrQXVkaW9fUGFyYW1FcnJvcikgeworICAgICAgICAg
ICAgLy8gT3VyIGJ1ZmZlciBtaWdodCBiZSB0b28gc21hbGwsIHRoZSBwcmVmZXJyZWQgYnVmZmVy
IHNpemUgb3Igc2FtcGxlIHJhdGUgbWlnaHQgaGF2ZSBjaGFuZ2VkLgorICAgICAgICAgICAgY2Fs
bE9uTWFpblRocmVhZChbXSB7CisgICAgICAgICAgICAgICAgQ29yZUF1ZGlvU2hhcmVkVW5pdDo6
c2luZ2xldG9uKCkucmVjb25maWd1cmUoKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9Cisg
ICAgICAgIC8vIFdlIHJldHVybiBlYXJseSBzbyB0aGF0IGlmIHRoaXMgZXJyb3IgaGFwcGVucywg
d2UgZG8gbm90IGluY3JlbWVudCBtX21pY3JvcGhvbmVQcm9jc0NhbGxlZCBhbmQgZmFpbCB0aGUg
Y2FwdHVyZSBvbmNlIHRpbWVyIGtpY2tzIGluLgorICAgICAgICByZXR1cm4gZXJyOworICAgIH0K
KworICAgIGlmICghaXNQcm9kdWNpbmdNaWNyb3Bob25lU2FtcGxlcygpKQorICAgICAgICByZXR1
cm4gbm9FcnI7CisKKyAgICBkb3VibGUgYWRqdXN0ZWRIb3N0VGltZSA9IG1fRFRTQ29udmVyc2lv
blJhdGlvICogdGltZVN0YW1wLm1Ib3N0VGltZTsKKyAgICB1aW50NjRfdCBzYW1wbGVUaW1lID0g
dGltZVN0YW1wLm1TYW1wbGVUaW1lOworI2lmICFMT0dfRElTQUJMRUQKKyAgICBjaGVja1RpbWVz
dGFtcHModGltZVN0YW1wLCBzYW1wbGVUaW1lLCBhZGp1c3RlZEhvc3RUaW1lKTsKKyNlbmRpZgor
ICAgIG1fbGF0ZXN0TWljVGltZVN0YW1wID0gc2FtcGxlVGltZTsKKyAgICBtX21pY3JvcGhvbmVT
YW1wbGVCdWZmZXItPnNldFRpbWVzKGFkanVzdGVkSG9zdFRpbWUsIHNhbXBsZVRpbWUpOworCisg
ICAgaWYgKHZvbHVtZSgpICE9IDEuMCkKKyAgICAgICAgbV9taWNyb3Bob25lU2FtcGxlQnVmZmVy
LT5hcHBseUdhaW4odm9sdW1lKCkpOworCisgICAgYXVkaW9TYW1wbGVzQXZhaWxhYmxlKE1lZGlh
VGltZShzYW1wbGVUaW1lLCBtX21pY3JvcGhvbmVQcm9jRm9ybWF0LnNhbXBsZVJhdGUoKSksIG1f
bWljcm9waG9uZVNhbXBsZUJ1ZmZlci0+YnVmZmVyTGlzdCgpLCBtX21pY3JvcGhvbmVQcm9jRm9y
bWF0LCBpbk51bWJlckZyYW1lcyk7CisgICAgcmV0dXJuIG5vRXJyOworfQorCitPU1N0YXR1cyBD
b3JlQXVkaW9TaGFyZWRVbml0OjptaWNyb3Bob25lQ2FsbGJhY2sodm9pZCAqaW5SZWZDb24sIEF1
ZGlvVW5pdFJlbmRlckFjdGlvbkZsYWdzKiBpb0FjdGlvbkZsYWdzLCBjb25zdCBBdWRpb1RpbWVT
dGFtcCogaW5UaW1lU3RhbXAsIFVJbnQzMiBpbkJ1c051bWJlciwgVUludDMyIGluTnVtYmVyRnJh
bWVzLCBBdWRpb0J1ZmZlckxpc3QqIGlvRGF0YSkKK3sKKyAgICBBU1NFUlQoaW9BY3Rpb25GbGFn
cyk7CisgICAgQVNTRVJUKGluVGltZVN0YW1wKTsKKyAgICBDb3JlQXVkaW9TaGFyZWRVbml0KiBk
YXRhU291cmNlID0gc3RhdGljX2Nhc3Q8Q29yZUF1ZGlvU2hhcmVkVW5pdCo+KGluUmVmQ29uKTsK
KyAgICByZXR1cm4gZGF0YVNvdXJjZS0+cHJvY2Vzc01pY3JvcGhvbmVTYW1wbGVzKCppb0FjdGlv
bkZsYWdzLCAqaW5UaW1lU3RhbXAsIGluQnVzTnVtYmVyLCBpbk51bWJlckZyYW1lcywgaW9EYXRh
KTsKK30KKwordm9pZCBDb3JlQXVkaW9TaGFyZWRVbml0OjpjbGVhbnVwQXVkaW9Vbml0KCkKK3sK
KyAgICBpZiAobV9pb1VuaXRJbml0aWFsaXplZCkgeworICAgICAgICBBU1NFUlQobV9pb1VuaXQp
OworICAgICAgICBpZiAoYXV0byBlcnIgPSBtX2lvVW5pdC0+dW5pbml0aWFsaXplKCkpCisgICAg
ICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihXZWJSVEMsICJDb3JlQXVkaW9TaGFyZWRVbml0Ojpj
bGVhbnVwQXVkaW9Vbml0KCVwKSBBdWRpb1VuaXRVbmluaXRpYWxpemUgZmFpbGVkIHdpdGggZXJy
b3IgJWQgKCUuNHMpIiwgdGhpcywgKGludCllcnIsIChjaGFyKikmZXJyKTsKKyAgICAgICAgbV9p
b1VuaXRJbml0aWFsaXplZCA9IGZhbHNlOworICAgIH0KKworICAgIG1faW9Vbml0ID0gbnVsbHB0
cjsKKworICAgIG1fbWljcm9waG9uZVNhbXBsZUJ1ZmZlciA9IG51bGxwdHI7Cit9CisKK3ZvaWQg
Q29yZUF1ZGlvU2hhcmVkVW5pdDo6ZGVsYXlTYW1wbGVzKFNlY29uZHMgc2Vjb25kcykKK3sKKyAg
ICBpZiAobV9pb1VuaXQpCisgICAgICAgIG1faW9Vbml0LT5kZWxheVNhbXBsZXMoc2Vjb25kcyk7
Cit9CisKK09TU3RhdHVzIENvcmVBdWRpb1NoYXJlZFVuaXQ6OnJlY29uZmlndXJlQXVkaW9Vbml0
KCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIGlmICghaGFzQXVkaW9Vbml0
KCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgbV9pc1JlY29uZmlndXJpbmcgPSB0cnVlOwor
ICAgIGF1dG8gc2NvcGUgPSBtYWtlU2NvcGVFeGl0KFt0aGlzXSB7IG1faXNSZWNvbmZpZ3VyaW5n
ID0gZmFsc2U7IH0pOworCisgICAgaWYgKG1faW9Vbml0U3RhcnRlZCkgeworICAgICAgICBpZiAo
YXV0byBlcnIgPSBtX2lvVW5pdC0+c3RvcCgpKSB7CisgICAgICAgICAgICBSRUxFQVNFX0xPR19F
UlJPUihXZWJSVEMsICJDb3JlQXVkaW9TaGFyZWRVbml0OjpyZWNvbmZpZ3VyZUF1ZGlvVW5pdCgl
cCkgQXVkaW9PdXRwdXRVbml0U3RvcCBmYWlsZWQgd2l0aCBlcnJvciAlZCAoJS40cykiLCB0aGlz
LCAoaW50KWVyciwgKGNoYXIqKSZlcnIpOworICAgICAgICAgICAgcmV0dXJuIGVycjsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIGNsZWFudXBBdWRpb1VuaXQoKTsKKyAgICBpZiAoYXV0byBlcnIg
PSBzZXR1cEF1ZGlvVW5pdCgpKQorICAgICAgICByZXR1cm4gZXJyOworCisgICAgaWYgKG1faW9V
bml0U3RhcnRlZCkgeworICAgICAgICBpZiAoYXV0byBlcnIgPSBtX2lvVW5pdC0+c3RhcnQoKSkg
eworICAgICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoV2ViUlRDLCAiQ29yZUF1ZGlvU2hhcmVk
VW5pdDo6cmVjb25maWd1cmVBdWRpb1VuaXQoJXApIEF1ZGlvT3V0cHV0VW5pdFN0YXJ0IGZhaWxl
ZCB3aXRoIGVycm9yICVkICglLjRzKSIsIHRoaXMsIChpbnQpZXJyLCAoY2hhciopJmVycik7Cisg
ICAgICAgICAgICByZXR1cm4gZXJyOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBub0Vy
cjsKK30KKworT1NTdGF0dXMgQ29yZUF1ZGlvU2hhcmVkVW5pdDo6c3RhcnRJbnRlcm5hbCgpCit7
CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKworICAgIHNldElzUHJvZHVjaW5nTWljcm9w
aG9uZVNhbXBsZXModHJ1ZSk7CisKKyAgICBpZiAoIW1faW9Vbml0KSB7CisgICAgICAgIGlmIChh
dXRvIGVyciA9IHNldHVwQXVkaW9Vbml0KCkpIHsKKyAgICAgICAgICAgIGNsZWFudXBBdWRpb1Vu
aXQoKTsKKyAgICAgICAgICAgIEFTU0VSVCghbV9pb1VuaXQpOworICAgICAgICAgICAgcmV0dXJu
IGVycjsKKyAgICAgICAgfQorICAgICAgICBBU1NFUlQobV9pb1VuaXQpOworICAgIH0KKworICAg
IHVuZHVjaygpOworCisgICAgeworICAgICAgICBMb2NrZXIgbG9ja2VyIHsgbV9zcGVha2VyU2Ft
cGxlc1Byb2R1Y2VyTG9jayB9OworICAgICAgICBpZiAobV9zcGVha2VyU2FtcGxlc1Byb2R1Y2Vy
KQorICAgICAgICAgICAgbV9zcGVha2VyU2FtcGxlc1Byb2R1Y2VyLT5jYXB0dXJlVW5pdElzU3Rh
cnRpbmcoKTsKKyAgICB9CisKKyAgICBpZiAoYXV0byBlcnIgPSBtX2lvVW5pdC0+c3RhcnQoKSkg
eworICAgICAgICB7CisgICAgICAgICAgICBMb2NrZXIgbG9ja2VyIHsgbV9zcGVha2VyU2FtcGxl
c1Byb2R1Y2VyTG9jayB9OworICAgICAgICAgICAgaWYgKG1fc3BlYWtlclNhbXBsZXNQcm9kdWNl
cikKKyAgICAgICAgICAgICAgICBtX3NwZWFrZXJTYW1wbGVzUHJvZHVjZXItPmNhcHR1cmVVbml0
SGFzU3RvcHBlZCgpOworICAgICAgICB9CisKKyAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoV2Vi
UlRDLCAiQ29yZUF1ZGlvU2hhcmVkVW5pdDo6c3RhcnQoJXApIEF1ZGlvT3V0cHV0VW5pdFN0YXJ0
IGZhaWxlZCB3aXRoIGVycm9yICVkICglLjRzKSIsIHRoaXMsIChpbnQpZXJyLCAoY2hhciopJmVy
cik7CisgICAgICAgIGNsZWFudXBBdWRpb1VuaXQoKTsKKyAgICAgICAgQVNTRVJUKCFtX2lvVW5p
dCk7CisgICAgICAgIHJldHVybiBlcnI7CisgICAgfQorCisgICAgbV9pb1VuaXRTdGFydGVkID0g
dHJ1ZTsKKworICAgIG1fdmVyaWZ5Q2FwdHVyaW5nVGltZXIuc3RhcnRSZXBlYXRpbmcodmVyaWZ5
Q2FwdHVyZUludGVydmFsKCkpOworICAgIG1fbWljcm9waG9uZVByb2NzQ2FsbGVkID0gMDsKKyAg
ICBtX21pY3JvcGhvbmVQcm9jc0NhbGxlZExhc3RUaW1lID0gMDsKKworICAgIHJldHVybiBub0Vy
cjsKK30KKwordm9pZCBDb3JlQXVkaW9TaGFyZWRVbml0Ojppc1Byb2R1Y2luZ01pY3JvcGhvbmVT
YW1wbGVzQ2hhbmdlZCgpCit7CisgICAgaWYgKCFpc1Byb2R1Y2luZ0RhdGEoKSkKKyAgICAgICAg
cmV0dXJuOworICAgIG1fdmVyaWZ5Q2FwdHVyaW5nVGltZXIuc3RhcnRSZXBlYXRpbmcodmVyaWZ5
Q2FwdHVyZUludGVydmFsKCkpOworfQorCit2b2lkIENvcmVBdWRpb1NoYXJlZFVuaXQ6OnZhbGlk
YXRlT3V0cHV0RGV2aWNlKHVpbnQzMl90IGN1cnJlbnRPdXRwdXREZXZpY2VJRCkKK3sKKyNpZiBQ
TEFURk9STShNQUMpCisgICAgaWYgKCFtX2lvVW5pdCkKKyAgICAgICAgcmV0dXJuOworCisgICAg
dWludDMyX3QgY3VycmVudERlZmF1bHRPdXRwdXREZXZpY2VJRCA9IDA7CisgICAgaWYgKGF1dG8g
ZXJyID0gbV9pb1VuaXQtPmRlZmF1bHRPdXRwdXREZXZpY2UoJmN1cnJlbnREZWZhdWx0T3V0cHV0
RGV2aWNlSUQpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIWN1cnJlbnREZWZhdWx0T3V0
cHV0RGV2aWNlSUQgfHwgY3VycmVudE91dHB1dERldmljZUlEID09IGN1cnJlbnREZWZhdWx0T3V0
cHV0RGV2aWNlSUQpCisgICAgICAgIHJldHVybjsKKworICAgIHJlY29uZmlndXJlKCk7CisjZWxz
ZQorICAgIFVOVVNFRF9QQVJBTShjdXJyZW50T3V0cHV0RGV2aWNlSUQpOworI2VuZGlmCit9CisK
K3ZvaWQgQ29yZUF1ZGlvU2hhcmVkVW5pdDo6dmVyaWZ5SXNDYXB0dXJpbmcoKQoreworICAgIGlm
IChtX21pY3JvcGhvbmVQcm9jc0NhbGxlZExhc3RUaW1lICE9IG1fbWljcm9waG9uZVByb2NzQ2Fs
bGVkKSB7CisgICAgICAgIG1fbWljcm9waG9uZVByb2NzQ2FsbGVkTGFzdFRpbWUgPSBtX21pY3Jv
cGhvbmVQcm9jc0NhbGxlZDsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFJFTEVBU0Vf
TE9HX0VSUk9SKFdlYlJUQywgIkNvcmVBdWRpb1NoYXJlZFVuaXQ6OnZlcmlmeUlzQ2FwdHVyaW5n
IC0gbm8gYXVkaW8gcmVjZWl2ZWQgaW4gJWQgc2Vjb25kcywgZmFpbGluZyIsIHN0YXRpY19jYXN0
PGludD4obV92ZXJpZnlDYXB0dXJpbmdUaW1lci5yZXBlYXRJbnRlcnZhbCgpLnZhbHVlKCkpKTsK
KyAgICBjYXB0dXJlRmFpbGVkKCk7Cit9CisKK3ZvaWQgQ29yZUF1ZGlvU2hhcmVkVW5pdDo6c3Rv
cEludGVybmFsKCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworCisgICAgbV92ZXJp
ZnlDYXB0dXJpbmdUaW1lci5zdG9wKCk7CisKKyAgICBpZiAoIW1faW9Vbml0IHx8ICFtX2lvVW5p
dFN0YXJ0ZWQpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChhdXRvIGVyciA9IG1faW9Vbml0
LT5zdG9wKCkpIHsKKyAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoV2ViUlRDLCAiQ29yZUF1ZGlv
U2hhcmVkVW5pdDo6c3RvcCglcCkgQXVkaW9PdXRwdXRVbml0U3RvcCBmYWlsZWQgd2l0aCBlcnJv
ciAlZCAoJS40cykiLCB0aGlzLCAoaW50KWVyciwgKGNoYXIqKSZlcnIpOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIHsKKyAgICAgICAgTG9ja2VyIGxvY2tlciB7IG1fc3BlYWtlclNhbXBs
ZXNQcm9kdWNlckxvY2sgfTsKKyAgICAgICAgaWYgKG1fc3BlYWtlclNhbXBsZXNQcm9kdWNlcikK
KyAgICAgICAgICAgIG1fc3BlYWtlclNhbXBsZXNQcm9kdWNlci0+Y2FwdHVyZVVuaXRIYXNTdG9w
cGVkKCk7CisgICAgfQorCisgICAgbV9pb1VuaXRTdGFydGVkID0gZmFsc2U7Cit9CisKK3ZvaWQg
Q29yZUF1ZGlvU2hhcmVkVW5pdDo6cmVnaXN0ZXJTcGVha2VyU2FtcGxlc1Byb2R1Y2VyKENvcmVB
dWRpb1NwZWFrZXJTYW1wbGVzUHJvZHVjZXImIHByb2R1Y2VyKQoreworICAgIEFTU0VSVChpc01h
aW5UaHJlYWQoKSk7CisKKyAgICBzZXRJc1JlbmRlcmluZ0F1ZGlvKHRydWUpOworCisgICAgQ29y
ZUF1ZGlvU3BlYWtlclNhbXBsZXNQcm9kdWNlciogb2xkUHJvZHVjZXI7CisgICAgeworICAgICAg
ICBMb2NrZXIgbG9ja2VyIHsgbV9zcGVha2VyU2FtcGxlc1Byb2R1Y2VyTG9jayB9OworICAgICAg
ICBvbGRQcm9kdWNlciA9IG1fc3BlYWtlclNhbXBsZXNQcm9kdWNlcjsKKyAgICAgICAgbV9zcGVh
a2VyU2FtcGxlc1Byb2R1Y2VyID0gJnByb2R1Y2VyOworICAgIH0KKyAgICBpZiAob2xkUHJvZHVj
ZXIgJiYgb2xkUHJvZHVjZXIgIT0gJnByb2R1Y2VyKQorICAgICAgICBvbGRQcm9kdWNlci0+Y2Fw
dHVyZVVuaXRIYXNTdG9wcGVkKCk7CisKKyAgICBpZiAoaGFzQXVkaW9Vbml0KCkgJiYgcHJvZHVj
ZXIuZm9ybWF0KCkgIT0gbV9zcGVha2VyUHJvY0Zvcm1hdCkKKyAgICAgICAgcmVjb25maWd1cmUo
KTsKK30KKwordm9pZCBDb3JlQXVkaW9TaGFyZWRVbml0Ojp1bnJlZ2lzdGVyU3BlYWtlclNhbXBs
ZXNQcm9kdWNlcihDb3JlQXVkaW9TcGVha2VyU2FtcGxlc1Byb2R1Y2VyJiBwcm9kdWNlcikKK3sK
KyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworCisgICAgeworICAgICAgICBMb2NrZXIgbG9j
a2VyIHsgbV9zcGVha2VyU2FtcGxlc1Byb2R1Y2VyTG9jayB9OworICAgICAgICBpZiAobV9zcGVh
a2VyU2FtcGxlc1Byb2R1Y2VyICE9ICZwcm9kdWNlcikKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgbV9zcGVha2VyU2FtcGxlc1Byb2R1Y2VyID0gbnVsbHB0cjsKKyAgICB9CisKKyAgICBz
ZXRJc1JlbmRlcmluZ0F1ZGlvKGZhbHNlKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CisjZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVBTSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9Db3JlQXVkaW9TaGFyZWRVbml0LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQ29yZUF1ZGlvU2hhcmVkVW5pdC5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmZiNGI4Y2JjYjBhNWM2MGJmODc3MTI1MDJmMjE1ZjUzNjFhZjNjYzgKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMv
Q29yZUF1ZGlvU2hhcmVkVW5pdC5oCkBAIC0wLDAgKzEsMTU1IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE3LTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVO
QUJMRShNRURJQV9TVFJFQU0pCisKKyNpbmNsdWRlICJBdWRpb1NhbXBsZURhdGFTb3VyY2UuaCIK
KyNpbmNsdWRlICJCYXNlQXVkaW9TaGFyZWRVbml0LmgiCisjaW5jbHVkZSAiQ0FBdWRpb1N0cmVh
bURlc2NyaXB0aW9uLmgiCisjaW5jbHVkZSAiVGltZXIuaCIKKwordHlwZWRlZiBVSW50MzIgQXVk
aW9Vbml0UHJvcGVydHlJRDsKK3R5cGVkZWYgVUludDMyIEF1ZGlvVW5pdFNjb3BlOwordHlwZWRl
ZiBVSW50MzIgQXVkaW9Vbml0RWxlbWVudDsKK3R5cGVkZWYgVUludDMyIEF1ZGlvVW5pdFJlbmRl
ckFjdGlvbkZsYWdzOworCitzdHJ1Y3QgQXVkaW9CdWZmZXJMaXN0Oworc3RydWN0IEF1ZGlvVGlt
ZVN0YW1wOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENvcmVBdWRpb1NwZWFrZXJT
YW1wbGVzUHJvZHVjZXI7CisKK2NsYXNzIENvcmVBdWRpb1NoYXJlZFVuaXQgZmluYWwgOiBwdWJs
aWMgQmFzZUF1ZGlvU2hhcmVkVW5pdCB7CitwdWJsaWM6CisgICAgY2xhc3MgSW50ZXJuYWxVbml0
IHsKKyAgICBwdWJsaWM6CisgICAgICAgIHZpcnR1YWwgfkludGVybmFsVW5pdCgpID0gZGVmYXVs
dDsKKyAgICAgICAgdmlydHVhbCBPU1N0YXR1cyBpbml0aWFsaXplKCkgPSAwOworICAgICAgICB2
aXJ0dWFsIE9TU3RhdHVzIHVuaW5pdGlhbGl6ZSgpID0gMDsKKyAgICAgICAgdmlydHVhbCBPU1N0
YXR1cyBzdGFydCgpID0gMDsKKyAgICAgICAgdmlydHVhbCBPU1N0YXR1cyBzdG9wKCkgPSAwOwor
ICAgICAgICB2aXJ0dWFsIE9TU3RhdHVzIHNldChBdWRpb1VuaXRQcm9wZXJ0eUlELCBBdWRpb1Vu
aXRTY29wZSwgQXVkaW9Vbml0RWxlbWVudCwgY29uc3Qgdm9pZCosIFVJbnQzMikgPSAwOworICAg
ICAgICB2aXJ0dWFsIE9TU3RhdHVzIGdldChBdWRpb1VuaXRQcm9wZXJ0eUlELCBBdWRpb1VuaXRT
Y29wZSwgQXVkaW9Vbml0RWxlbWVudCwgdm9pZCosIFVJbnQzMiopID0gMDsKKyAgICAgICAgdmly
dHVhbCBPU1N0YXR1cyByZW5kZXIoQXVkaW9Vbml0UmVuZGVyQWN0aW9uRmxhZ3MqLCBjb25zdCBB
dWRpb1RpbWVTdGFtcCosIFVJbnQzMiwgVUludDMyLCBBdWRpb0J1ZmZlckxpc3QqKSA9IDA7Cisg
ICAgICAgIHZpcnR1YWwgT1NTdGF0dXMgZGVmYXVsdElucHV0RGV2aWNlKHVpbnQzMl90KikgPSAw
OworICAgICAgICB2aXJ0dWFsIE9TU3RhdHVzIGRlZmF1bHRPdXRwdXREZXZpY2UodWludDMyX3Qq
KSA9IDA7CisgICAgICAgIHZpcnR1YWwgdm9pZCBkZWxheVNhbXBsZXMoU2Vjb25kcykgeyB9Cisg
ICAgfTsKKworICAgIHN0YXRpYyBDb3JlQXVkaW9TaGFyZWRVbml0JiB1bml0KCk7CisgICAgc3Rh
dGljIEJhc2VBdWRpb1NoYXJlZFVuaXQmIHNpbmdsZXRvbigpICB7IHJldHVybiB1bml0KCk7IH0K
KyAgICBDb3JlQXVkaW9TaGFyZWRVbml0KCk7CisKKyAgICB1c2luZyBDcmVhdGlvbkNhbGxiYWNr
ID0gRnVuY3Rpb248RXhwZWN0ZWQ8VW5pcXVlUmVmPEludGVybmFsVW5pdD4sIE9TU3RhdHVzPigp
PjsKKyAgICB2b2lkIHNldEludGVybmFsVW5pdENyZWF0aW9uQ2FsbGJhY2soQ3JlYXRpb25DYWxs
YmFjayYmIGNhbGxiYWNrKSB7IG1fY3JlYXRpb25DYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2sp
OyB9CisgICAgdXNpbmcgR2V0U2FtcGxlUmF0ZUNhbGxiYWNrID0gRnVuY3Rpb248aW50KCk+Owor
ICAgIHZvaWQgc2V0SW50ZXJuYWxVbml0R2V0U2FtcGxlUmF0ZUNhbGxiYWNrKEdldFNhbXBsZVJh
dGVDYWxsYmFjayYmIGNhbGxiYWNrKSB7IG1fZ2V0U2FtcGxlUmF0ZUNhbGxiYWNrID0gV1RGTW92
ZShjYWxsYmFjayk7IH0KKworICAgIHZvaWQgcmVnaXN0ZXJTcGVha2VyU2FtcGxlc1Byb2R1Y2Vy
KENvcmVBdWRpb1NwZWFrZXJTYW1wbGVzUHJvZHVjZXImKTsKKyAgICB2b2lkIHVucmVnaXN0ZXJT
cGVha2VyU2FtcGxlc1Byb2R1Y2VyKENvcmVBdWRpb1NwZWFrZXJTYW1wbGVzUHJvZHVjZXImKTsK
KyAgICBib29sIGlzUnVubmluZygpIGNvbnN0IHsgcmV0dXJuIG1faW9Vbml0U3RhcnRlZDsgfQor
ICAgIHZvaWQgc2V0U2FtcGxlUmF0ZVJhbmdlKENhcGFiaWxpdHlWYWx1ZU9yUmFuZ2UgcmFuZ2Up
IHsgbV9zYW1wbGVSYXRlQ2FwYWJpbGl0aWVzID0gcmFuZ2U7IH0KKworcHJpdmF0ZToKKyAgICBz
dGF0aWMgc2l6ZV90IHByZWZlcnJlZElPQnVmZmVyU2l6ZSgpOworCisgICAgQ2FwYWJpbGl0eVZh
bHVlT3JSYW5nZSBzYW1wbGVSYXRlQ2FwYWNpdGllcygpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1f
c2FtcGxlUmF0ZUNhcGFiaWxpdGllczsgfQorICAgIGNvbnN0IENBQXVkaW9TdHJlYW1EZXNjcmlw
dGlvbiYgbWljcm9waG9uZUZvcm1hdCgpIGNvbnN0IHsgcmV0dXJuIG1fbWljcm9waG9uZVByb2NG
b3JtYXQ7IH0KKworICAgIGJvb2wgaGFzQXVkaW9Vbml0KCkgY29uc3QgZmluYWwgeyByZXR1cm4g
ISFtX2lvVW5pdDsgfQorICAgIHZvaWQgY2FwdHVyZURldmljZUNoYW5nZWQoKSBmaW5hbDsKKyAg
ICBPU1N0YXR1cyByZWNvbmZpZ3VyZUF1ZGlvVW5pdCgpIGZpbmFsOworICAgIHZvaWQgZGVsYXlT
YW1wbGVzKFNlY29uZHMpIGZpbmFsOworCisgICAgT1NTdGF0dXMgc2V0dXBBdWRpb1VuaXQoKTsK
KyAgICB2b2lkIGNsZWFudXBBdWRpb1VuaXQoKSBmaW5hbDsKKworICAgIE9TU3RhdHVzIHN0YXJ0
SW50ZXJuYWwoKSBmaW5hbDsKKyAgICB2b2lkIHN0b3BJbnRlcm5hbCgpIGZpbmFsOworICAgIGJv
b2wgaXNQcm9kdWNpbmdEYXRhKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9pb1VuaXRTdGFydGVk
OyB9CisgICAgdm9pZCBpc1Byb2R1Y2luZ01pY3JvcGhvbmVTYW1wbGVzQ2hhbmdlZCgpIGZpbmFs
OworICAgIHZvaWQgdmFsaWRhdGVPdXRwdXREZXZpY2UodWludDMyX3QgZGV2aWNlSUQpIGZpbmFs
OworICAgIGludCBhY3R1YWxTYW1wbGVSYXRlKCkgY29uc3QgZmluYWw7CisgICAgdm9pZCByZXNl
dFNhbXBsZVJhdGUoKTsKKworICAgIE9TU3RhdHVzIGNvbmZpZ3VyZVNwZWFrZXJQcm9jKGludCBz
YW1wbGVSYXRlKTsKKyAgICBPU1N0YXR1cyBjb25maWd1cmVNaWNyb3Bob25lUHJvYyhpbnQgc2Ft
cGxlUmF0ZSk7CisKKyAgICBzdGF0aWMgT1NTdGF0dXMgbWljcm9waG9uZUNhbGxiYWNrKHZvaWQq
LCBBdWRpb1VuaXRSZW5kZXJBY3Rpb25GbGFncyosIGNvbnN0IEF1ZGlvVGltZVN0YW1wKiwgVUlu
dDMyLCBVSW50MzIsIEF1ZGlvQnVmZmVyTGlzdCopOworICAgIE9TU3RhdHVzIHByb2Nlc3NNaWNy
b3Bob25lU2FtcGxlcyhBdWRpb1VuaXRSZW5kZXJBY3Rpb25GbGFncyYsIGNvbnN0IEF1ZGlvVGlt
ZVN0YW1wJiwgVUludDMyLCBVSW50MzIsIEF1ZGlvQnVmZmVyTGlzdCopOworCisgICAgc3RhdGlj
IE9TU3RhdHVzIHNwZWFrZXJDYWxsYmFjayh2b2lkKiwgQXVkaW9Vbml0UmVuZGVyQWN0aW9uRmxh
Z3MqLCBjb25zdCBBdWRpb1RpbWVTdGFtcCosIFVJbnQzMiwgVUludDMyLCBBdWRpb0J1ZmZlckxp
c3QqKTsKKyAgICBPU1N0YXR1cyBwcm92aWRlU3BlYWtlckRhdGEoQXVkaW9Vbml0UmVuZGVyQWN0
aW9uRmxhZ3MmLCBjb25zdCBBdWRpb1RpbWVTdGFtcCYsIFVJbnQzMiwgVUludDMyLCBBdWRpb0J1
ZmZlckxpc3QmKTsKKworICAgIHZvaWQgdW5kdWNrKCk7CisKKyAgICB2b2lkIHZlcmlmeUlzQ2Fw
dHVyaW5nKCk7CisKKyAgICBTZWNvbmRzIHZlcmlmeUNhcHR1cmVJbnRlcnZhbCgpIHsgcmV0dXJu
IGlzUHJvZHVjaW5nTWljcm9waG9uZVNhbXBsZXMoKSA/IDEwX3MgOiAyX3M7IH0KKworICAgIENy
ZWF0aW9uQ2FsbGJhY2sgbV9jcmVhdGlvbkNhbGxiYWNrOworICAgIEdldFNhbXBsZVJhdGVDYWxs
YmFjayBtX2dldFNhbXBsZVJhdGVDYWxsYmFjazsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJu
YWxVbml0PiBtX2lvVW5pdDsKKworICAgIC8vIE9ubHkgcmVhZC9tb2RpZmllZCBmcm9tIHRoZSBJ
TyB0aHJlYWQuCisgICAgVmVjdG9yPFJlZjxBdWRpb1NhbXBsZURhdGFTb3VyY2U+PiBtX2FjdGl2
ZVNvdXJjZXM7CisKKyAgICBDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24gbV9taWNyb3Bob25lUHJv
Y0Zvcm1hdDsKKyAgICBSZWZQdHI8QXVkaW9TYW1wbGVCdWZmZXJMaXN0PiBtX21pY3JvcGhvbmVT
YW1wbGVCdWZmZXI7CisgICAgdWludDY0X3QgbV9sYXRlc3RNaWNUaW1lU3RhbXAgeyAwIH07CisK
KyAgICBDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24gbV9zcGVha2VyUHJvY0Zvcm1hdDsKKworICAg
IGRvdWJsZSBtX0RUU0NvbnZlcnNpb25SYXRpbyB7IDAgfTsKKworICAgIGJvb2wgbV9pb1VuaXRJ
bml0aWFsaXplZCB7IGZhbHNlIH07CisgICAgYm9vbCBtX2lvVW5pdFN0YXJ0ZWQgeyBmYWxzZSB9
OworCisgICAgbXV0YWJsZSBzdGQ6OnVuaXF1ZV9wdHI8UmVhbHRpbWVNZWRpYVNvdXJjZUNhcGFi
aWxpdGllcz4gbV9jYXBhYmlsaXRpZXM7CisgICAgbXV0YWJsZSBzdGQ6Om9wdGlvbmFsPFJlYWx0
aW1lTWVkaWFTb3VyY2VTZXR0aW5ncz4gbV9jdXJyZW50U2V0dGluZ3M7CisKKyNpZiAhTE9HX0RJ
U0FCTEVECisgICAgdm9pZCBjaGVja1RpbWVzdGFtcHMoY29uc3QgQXVkaW9UaW1lU3RhbXAmLCB1
aW50NjRfdCwgZG91YmxlKTsKKworICAgIFN0cmluZyBtX2lvVW5pdE5hbWU7CisjZW5kaWYKKwor
ICAgIENhcGFiaWxpdHlWYWx1ZU9yUmFuZ2UgbV9zYW1wbGVSYXRlQ2FwYWJpbGl0aWVzOworCisg
ICAgdWludDY0X3QgbV9taWNyb3Bob25lUHJvY3NDYWxsZWQgeyAwIH07CisgICAgdWludDY0X3Qg
bV9taWNyb3Bob25lUHJvY3NDYWxsZWRMYXN0VGltZSB7IDAgfTsKKyAgICBUaW1lciBtX3Zlcmlm
eUNhcHR1cmluZ1RpbWVyOworCisgICAgYm9vbCBtX2lzUmVjb25maWd1cmluZyB7IGZhbHNlIH07
CisgICAgbXV0YWJsZSBMb2NrIG1fc3BlYWtlclNhbXBsZXNQcm9kdWNlckxvY2s7CisgICAgQ29y
ZUF1ZGlvU3BlYWtlclNhbXBsZXNQcm9kdWNlciogbV9zcGVha2VyU2FtcGxlc1Byb2R1Y2VyIFdU
Rl9HVUFSREVEX0JZX0xPQ0sobV9zcGVha2VyU2FtcGxlc1Byb2R1Y2VyTG9jaykgeyBudWxscHRy
IH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoTUVE
SUFfU1RSRUFNKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJl
YW0vbWFjL01vY2tBdWRpb1NoYXJlZFVuaXQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21l
ZGlhc3RyZWFtL21hYy9Nb2NrQXVkaW9TaGFyZWRVbml0LmgKaW5kZXggMWE4OTZhYjczODUyODU0
YmE3NzdiYzRkMTY2ZjljYTJlNWRhMmFmOC4uOTlhOWRmZGZkZTM3YjFjMWFhYzFkODdkY2ZmZTAw
YTMwZDlhOGNiZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJl
YW0vbWFjL01vY2tBdWRpb1NoYXJlZFVuaXQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tZWRpYXN0cmVhbS9tYWMvTW9ja0F1ZGlvU2hhcmVkVW5pdC5oCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjcsNzIgKzI3LDE1
IEBACiAKICNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQogCi0jaW5jbHVkZSAiQmFzZUF1ZGlvU2hh
cmVkVW5pdC5oIgotI2luY2x1ZGUgPENvcmVBdWRpby9Db3JlQXVkaW9UeXBlcy5oPgotI2luY2x1
ZGUgPHd0Zi9SdW5Mb29wLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotI2luY2x1ZGUgPHd0
Zi9Xb3JrUXVldWUuaD4KLQotT0JKQ19DTEFTUyBBVkF1ZGlvUENNQnVmZmVyOwotdHlwZWRlZiBz
dHJ1Y3QgT3BhcXVlQ01DbG9jayogQ01DbG9ja1JlZjsKLXR5cGVkZWYgY29uc3Qgc3RydWN0IG9w
YXF1ZUNNRm9ybWF0RGVzY3JpcHRpb24qIENNRm9ybWF0RGVzY3JpcHRpb25SZWY7CisjaW5jbHVk
ZSAiQ29yZUF1ZGlvU2hhcmVkVW5pdC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNz
IFdlYkF1ZGlvQnVmZmVyTGlzdDsKLWNsYXNzIFdlYkF1ZGlvU291cmNlUHJvdmlkZXJDb2NvYTsK
LQotY2xhc3MgTW9ja0F1ZGlvU2hhcmVkVW5pdCBmaW5hbCA6IHB1YmxpYyBCYXNlQXVkaW9TaGFy
ZWRVbml0IHsKLXB1YmxpYzoKLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgTW9ja0F1ZGlvU2hh
cmVkVW5pdCYgc2luZ2xldG9uKCk7Ci0gICAgTW9ja0F1ZGlvU2hhcmVkVW5pdCgpOwotCi0gICAg
dm9pZCBzZXREZXZpY2VJRChjb25zdCBTdHJpbmcmIGRldmljZUlEKSB7IHNldENhcHR1cmVEZXZp
Y2UoU3RyaW5nIHsgZGV2aWNlSUQgfSwgMCk7IH0KLQotcHJpdmF0ZToKLSAgICBib29sIGhhc0F1
ZGlvVW5pdCgpIGNvbnN0IGZpbmFsOwotICAgIHZvaWQgY2FwdHVyZURldmljZUNoYW5nZWQoKSBm
aW5hbDsKLSAgICBPU1N0YXR1cyByZWNvbmZpZ3VyZUF1ZGlvVW5pdCgpIGZpbmFsOwotICAgIHZv
aWQgcmVzZXRTYW1wbGVSYXRlKCkgZmluYWw7Ci0KLSAgICB2b2lkIGNsZWFudXBBdWRpb1VuaXQo
KSBmaW5hbDsKLSAgICBPU1N0YXR1cyBzdGFydEludGVybmFsKCkgZmluYWw7Ci0gICAgdm9pZCBz
dG9wSW50ZXJuYWwoKSBmaW5hbDsKLSAgICBib29sIGlzUHJvZHVjaW5nRGF0YSgpIGNvbnN0IGZp
bmFsOwotCi0gICAgdm9pZCBkZWxheVNhbXBsZXMoU2Vjb25kcykgZmluYWw7Ci0KLSAgICB2b2lk
IHN0YXJ0KCk7Ci0gICAgQ2FwYWJpbGl0eVZhbHVlT3JSYW5nZSBzYW1wbGVSYXRlQ2FwYWNpdGll
cygpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIENhcGFiaWxpdHlWYWx1ZU9yUmFuZ2UoNDQxMDAsIDQ4
MDAwKTsgfQotCi0gICAgdm9pZCB0aWNrKCk7Ci0KLSAgICB2b2lkIHJlbmRlcihNb25vdG9uaWNU
aW1lKTsKLSAgICB2b2lkIGVtaXRTYW1wbGVCdWZmZXJzKHVpbnQzMl90IGZyYW1lQ291bnQpOwot
ICAgIHZvaWQgcmVjb25maWd1cmUoKTsKLQotICAgIHN0YXRpYyBTZWNvbmRzIHJlbmRlckludGVy
dmFsKCkgeyByZXR1cm4gMjBfbXM7IH0KLQotICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJBdWRpb0J1
ZmZlckxpc3Q+IG1fYXVkaW9CdWZmZXJMaXN0OwotCi0gICAgdWludDMyX3QgbV9tYXhpbWl1bUZy
YW1lQ291bnQ7Ci0gICAgdWludDY0X3QgbV9zYW1wbGVzRW1pdHRlZCB7IDAgfTsKLSAgICB1aW50
NjRfdCBtX3NhbXBsZXNSZW5kZXJlZCB7IDAgfTsKLQotICAgIFJldGFpblB0cjxDTUZvcm1hdERl
c2NyaXB0aW9uUmVmPiBtX2Zvcm1hdERlc2NyaXB0aW9uOwotICAgIEF1ZGlvU3RyZWFtQmFzaWNE
ZXNjcmlwdGlvbiBtX3N0cmVhbUZvcm1hdDsKLQotICAgIFZlY3RvcjxmbG9hdD4gbV9iaXBCb3BC
dWZmZXI7Ci0gICAgYm9vbCBtX2hhc0F1ZGlvVW5pdCB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX2lz
UHJvZHVjaW5nRGF0YSB7IGZhbHNlIH07CituYW1lc3BhY2UgTW9ja0F1ZGlvU2hhcmVkVW5pdCB7
CiAKLSAgICBSdW5Mb29wOjpUaW1lcjxNb2NrQXVkaW9TaGFyZWRVbml0PiBtX3RpbWVyOwotICAg
IE1vbm90b25pY1RpbWUgbV9sYXN0UmVuZGVyVGltZSB7IE1vbm90b25pY1RpbWU6Om5hbigpIH07
Ci0gICAgTW9ub3RvbmljVGltZSBtX2RlbGF5VW50aWw7CitDb3JlQXVkaW9TaGFyZWRVbml0JiBz
aW5nbGV0b24oKTsKIAotICAgIFJlZjxXb3JrUXVldWU+IG1fd29ya1F1ZXVlOwotICAgIHVuc2ln
bmVkIG1fY2hhbm5lbENvdW50IHsgMiB9OwotfTsKK30KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMv
TW9ja0F1ZGlvU2hhcmVkVW5pdC5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3Ry
ZWFtL21hYy9Nb2NrQXVkaW9TaGFyZWRVbml0Lm1tCmluZGV4IDdmMWFjODM1OTgzNmVlYWQ4MjI1
MTdmM2JhM2VlNTUwMWZjZWQ3OGUuLjhiZGI1ZGUyNDZmYmI3MjhjZWUzMjJkNThkN2I3OWUxOTVm
NjY5NzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21h
Yy9Nb2NrQXVkaW9TaGFyZWRVbml0Lm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21l
ZGlhc3RyZWFtL21hYy9Nb2NrQXVkaW9TaGFyZWRVbml0Lm1tCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDMsNiArNDMsOSBAQAog
I2ltcG9ydCA8QVZGb3VuZGF0aW9uL0FWQXVkaW9CdWZmZXIuaD4KICNpbXBvcnQgPEF1ZGlvVG9v
bGJveC9BdWRpb0NvbnZlcnRlci5oPgogI2ltcG9ydCA8Q29yZUF1ZGlvL0NvcmVBdWRpb1R5cGVz
Lmg+CisjaW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Cisj
aW5jbHVkZSA8d3RmL1dvcmtRdWV1ZS5oPgogCiAjaW1wb3J0IDxwYWwvY2YvQXVkaW9Ub29sYm94
U29mdExpbmsuaD4KICNpbXBvcnQgPHBhbC9jZi9Db3JlTWVkaWFTb2Z0TGluay5oPgpAQCAtOTAs
NjcgKzkzLDExMSBAQCBDYXB0dXJlU291cmNlT3JFcnJvciBNb2NrUmVhbHRpbWVBdWRpb1NvdXJj
ZTo6Y3JlYXRlKFN0cmluZyYmIGRldmljZUlELCBBdG9tU3RyaQogICAgIGlmICghZGV2aWNlKQog
ICAgICAgICByZXR1cm4geyAiTm8gbW9jayBtaWNyb3Bob25lIGRldmljZSJfcyB9OwogCi0gICAg
TW9ja0F1ZGlvU2hhcmVkVW5pdDo6c2luZ2xldG9uKCkuc2V0RGV2aWNlSUQoZGV2aWNlSUQpOwor
ICAgIE1vY2tBdWRpb1NoYXJlZFVuaXQ6OnNpbmdsZXRvbigpLnNldENhcHR1cmVEZXZpY2UoU3Ry
aW5nIHsgZGV2aWNlSUQgfSwgMCk7CiAgICAgcmV0dXJuIENvcmVBdWRpb0NhcHR1cmVTb3VyY2U6
OmNyZWF0ZUZvclRlc3RpbmcoV1RGTW92ZShkZXZpY2VJRCksIFdURk1vdmUobmFtZSksIFdURk1v
dmUoaGFzaFNhbHQpLCBjb25zdHJhaW50cywgTW9ja0F1ZGlvU2hhcmVkVW5pdDo6c2luZ2xldG9u
KCksIHBhZ2VJZGVudGlmaWVyKTsKIH0KIAotTW9ja0F1ZGlvU2hhcmVkVW5pdCYgTW9ja0F1ZGlv
U2hhcmVkVW5pdDo6c2luZ2xldG9uKCkKLXsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8TW9j
a0F1ZGlvU2hhcmVkVW5pdD4gc2luZ2xldG9uOwotICAgIHJldHVybiBzaW5nbGV0b247Ci19Ci0K
LU1vY2tBdWRpb1NoYXJlZFVuaXQ6Ok1vY2tBdWRpb1NoYXJlZFVuaXQoKQotICAgIDogbV90aW1l
cihSdW5Mb29wOjpjdXJyZW50KCksIHRoaXMsICZNb2NrQXVkaW9TaGFyZWRVbml0OjpzdGFydCkK
LSAgICAsIG1fd29ya1F1ZXVlKFdvcmtRdWV1ZTo6Y3JlYXRlKCJNb2NrQXVkaW9TaGFyZWRVbml0
IENhcHR1cmUgUXVldWUiLCBXb3JrUXVldWU6OlFPUzo6VXNlckludGVyYWN0aXZlKSkKK2NsYXNz
IE1vY2tBdWRpb1NoYXJlZEludGVybmFsVW5pdCA6ICBwdWJsaWMgQ29yZUF1ZGlvU2hhcmVkVW5p
dDo6SW50ZXJuYWxVbml0IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoK
KyAgICBNb2NrQXVkaW9TaGFyZWRJbnRlcm5hbFVuaXQoKTsKKyAgICB+TW9ja0F1ZGlvU2hhcmVk
SW50ZXJuYWxVbml0KCk7CisKK3ByaXZhdGU6CisgICAgT1NTdGF0dXMgaW5pdGlhbGl6ZSgpIGZp
bmFsOworICAgIE9TU3RhdHVzIHVuaW5pdGlhbGl6ZSgpIGZpbmFsIHsgcmV0dXJuIDA7IH0KKyAg
ICBPU1N0YXR1cyBzdGFydCgpIGZpbmFsOworICAgIE9TU3RhdHVzIHN0b3AoKSBmaW5hbDsKKyAg
ICBPU1N0YXR1cyBzZXQoQXVkaW9Vbml0UHJvcGVydHlJRCwgQXVkaW9Vbml0U2NvcGUsIEF1ZGlv
VW5pdEVsZW1lbnQsIGNvbnN0IHZvaWQqLCBVSW50MzIpIGZpbmFsOworICAgIE9TU3RhdHVzIGdl
dChBdWRpb1VuaXRQcm9wZXJ0eUlELCBBdWRpb1VuaXRTY29wZSwgQXVkaW9Vbml0RWxlbWVudCwg
dm9pZCosIFVJbnQzMiopIGZpbmFsOworICAgIE9TU3RhdHVzIHJlbmRlcihBdWRpb1VuaXRSZW5k
ZXJBY3Rpb25GbGFncyosIGNvbnN0IEF1ZGlvVGltZVN0YW1wKiwgVUludDMyLCBVSW50MzIsIEF1
ZGlvQnVmZmVyTGlzdCopIGZpbmFsOworICAgIE9TU3RhdHVzIGRlZmF1bHRJbnB1dERldmljZSh1
aW50MzJfdCopIGZpbmFsOworICAgIE9TU3RhdHVzIGRlZmF1bHRPdXRwdXREZXZpY2UodWludDMy
X3QqKSBmaW5hbDsKKyAgICB2b2lkIGRlbGF5U2FtcGxlcyhTZWNvbmRzKSBmaW5hbDsKKworICAg
IGludCBzYW1wbGVSYXRlKCkgY29uc3QgeyByZXR1cm4gbV9zdHJlYW1Gb3JtYXQubVNhbXBsZVJh
dGU7IH0KKyAgICB2b2lkIHRpY2soKTsKKworICAgIHZvaWQgZ2VuZXJhdGVTYW1wbGVCdWZmZXJz
KE1vbm90b25pY1RpbWUpOworICAgIHZvaWQgZW1pdFNhbXBsZUJ1ZmZlcnModWludDMyX3QgZnJh
bWVDb3VudCk7CisgICAgdm9pZCByZWNvbmZpZ3VyZSgpOworCisgICAgc3RhdGljIFNlY29uZHMg
cmVuZGVySW50ZXJ2YWwoKSB7IHJldHVybiAyMF9tczsgfQorCisgICAgc3RkOjp1bmlxdWVfcHRy
PFdlYkF1ZGlvQnVmZmVyTGlzdD4gbV9hdWRpb0J1ZmZlckxpc3Q7CisKKyAgICB1aW50MzJfdCBt
X21heGltaXVtRnJhbWVDb3VudDsKKyAgICB1aW50NjRfdCBtX3NhbXBsZXNFbWl0dGVkIHsgMCB9
OworICAgIHVpbnQ2NF90IG1fc2FtcGxlc1JlbmRlcmVkIHsgMCB9OworCisgICAgUmV0YWluUHRy
PENNRm9ybWF0RGVzY3JpcHRpb25SZWY+IG1fZm9ybWF0RGVzY3JpcHRpb247CisgICAgQXVkaW9T
dHJlYW1CYXNpY0Rlc2NyaXB0aW9uIG1fb3V0cHV0U3RyZWFtRm9ybWF0OworICAgIEF1ZGlvU3Ry
ZWFtQmFzaWNEZXNjcmlwdGlvbiBtX3N0cmVhbUZvcm1hdDsKKworICAgIFZlY3RvcjxmbG9hdD4g
bV9iaXBCb3BCdWZmZXI7CisgICAgYm9vbCBtX2hhc0F1ZGlvVW5pdCB7IGZhbHNlIH07CisgICAg
Ym9vbCBtX2lzUHJvZHVjaW5nRGF0YSB7IGZhbHNlIH07CisgICAgYm9vbCBtX2VuYWJsZUVjaG9D
YW5jZWxsYXRpb24geyB0cnVlIH07CisgICAgUnVuTG9vcDo6VGltZXI8TW9ja0F1ZGlvU2hhcmVk
SW50ZXJuYWxVbml0PiBtX3RpbWVyOworICAgIE1vbm90b25pY1RpbWUgbV9sYXN0UmVuZGVyVGlt
ZSB7IE1vbm90b25pY1RpbWU6Om5hbigpIH07CisgICAgTW9ub3RvbmljVGltZSBtX2RlbGF5VW50
aWw7CisKKyAgICBSZWY8V29ya1F1ZXVlPiBtX3dvcmtRdWV1ZTsKKyAgICB1bnNpZ25lZCBtX2No
YW5uZWxDb3VudCB7IDIgfTsKKyAgICAKKyAgICBBVVJlbmRlckNhbGxiYWNrU3RydWN0IG1fbWlj
cm9waG9uZUNhbGxiYWNrOworICAgIEFVUmVuZGVyQ2FsbGJhY2tTdHJ1Y3QgbV9zcGVha2VyQ2Fs
bGJhY2s7Cit9OworCitDb3JlQXVkaW9TaGFyZWRVbml0JiBNb2NrQXVkaW9TaGFyZWRVbml0Ojpz
aW5nbGV0b24oKQogeworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxDb3JlQXVkaW9TaGFyZWRV
bml0PiB1bml0OworICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBvbmNlRmxhZzsKKyAgICBzdGQ6
OmNhbGxfb25jZShvbmNlRmxhZywgWyZdICgpIHsKKyAgICAgICAgdW5pdC0+c2V0U2FtcGxlUmF0
ZVJhbmdlKENhcGFiaWxpdHlWYWx1ZU9yUmFuZ2UoNDQxMDAsIDQ4MDAwKSk7CisgICAgICAgIHVu
aXQtPnNldEludGVybmFsVW5pdENyZWF0aW9uQ2FsbGJhY2soW10geworICAgICAgICAgICAgVW5p
cXVlUmVmPENvcmVBdWRpb1NoYXJlZFVuaXQ6OkludGVybmFsVW5pdD4gcmVzdWx0ID0gbWFrZVVu
aXF1ZVJlZjxNb2NrQXVkaW9TaGFyZWRJbnRlcm5hbFVuaXQ+KCk7CisgICAgICAgICAgICByZXR1
cm4gcmVzdWx0OworICAgICAgICB9KTsKKyAgICAgICAgdW5pdC0+c2V0SW50ZXJuYWxVbml0R2V0
U2FtcGxlUmF0ZUNhbGxiYWNrKFtdIHsgcmV0dXJuIDQ0MTAwOyB9KTsKKyAgICB9KTsKKyAgICBy
ZXR1cm4gdW5pdDsKIH0KIAotdm9pZCBNb2NrQXVkaW9TaGFyZWRVbml0OjpyZXNldFNhbXBsZVJh
dGUoKQorc3RhdGljIEF1ZGlvU3RyZWFtQmFzaWNEZXNjcmlwdGlvbiBjcmVhdGVBdWRpb0Zvcm1h
dChGbG9hdDY0IHNhbXBsZVJhdGUsIFVJbnQzMiBjaGFubmVsQ291bnQpCiB7Ci0gICAgaWYgKGF1
dG8gZGV2aWNlID0gTW9ja1JlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXI6Om1vY2tEZXZpY2VXaXRo
UGVyc2lzdGVudElEKHBlcnNpc3RlbnRJRCgpKSkKLSAgICAgICAgc2V0U2FtcGxlUmF0ZShzdGQ6
OmdldDxNb2NrTWljcm9waG9uZVByb3BlcnRpZXM+KGRldmljZS0+cHJvcGVydGllcykuZGVmYXVs
dFNhbXBsZVJhdGUpOworICAgIEF1ZGlvU3RyZWFtQmFzaWNEZXNjcmlwdGlvbiBmb3JtYXQ7Cisg
ICAgY29uc3QgaW50IGJ5dGVzUGVyRmxvYXQgPSBzaXplb2YoRmxvYXQzMik7CisgICAgY29uc3Qg
aW50IGJpdHNQZXJCeXRlID0gODsKKyAgICBjb25zdCBib29sIGlzRmxvYXQgPSB0cnVlOworICAg
IGNvbnN0IGJvb2wgaXNCaWdFbmRpYW4gPSBmYWxzZTsKKyAgICBjb25zdCBib29sIGlzTm9uSW50
ZXJsZWF2ZWQgPSB0cnVlOworICAgIEZpbGxPdXRBU0JERm9yTFBDTShmb3JtYXQsIHNhbXBsZVJh
dGUsIGNoYW5uZWxDb3VudCwgYml0c1BlckJ5dGUgKiBieXRlc1BlckZsb2F0LCBiaXRzUGVyQnl0
ZSAqIGJ5dGVzUGVyRmxvYXQsIGlzRmxvYXQsIGlzQmlnRW5kaWFuLCBpc05vbkludGVybGVhdmVk
KTsKKyAgICByZXR1cm4gZm9ybWF0OwogfQogCi1ib29sIE1vY2tBdWRpb1NoYXJlZFVuaXQ6Omhh
c0F1ZGlvVW5pdCgpIGNvbnN0CitNb2NrQXVkaW9TaGFyZWRJbnRlcm5hbFVuaXQ6Ok1vY2tBdWRp
b1NoYXJlZEludGVybmFsVW5pdCgpCisgICAgOiBtX3RpbWVyKFJ1bkxvb3A6OmN1cnJlbnQoKSwg
W3RoaXNdIHsgdGhpcy0+c3RhcnQoKTsgfSkKKyAgICAsIG1fd29ya1F1ZXVlKFdvcmtRdWV1ZTo6
Y3JlYXRlKCJNb2NrQXVkaW9TaGFyZWRJbnRlcm5hbFVuaXQgQ2FwdHVyZSBRdWV1ZSIsIFdvcmtR
dWV1ZTo6UU9TOjpVc2VySW50ZXJhY3RpdmUpKQogewotICAgIHJldHVybiBtX2hhc0F1ZGlvVW5p
dDsKKyAgICBtX3N0cmVhbUZvcm1hdCA9IG1fb3V0cHV0U3RyZWFtRm9ybWF0ID0gY3JlYXRlQXVk
aW9Gb3JtYXQoNDQxMDAsIDIpOwogfQogCi12b2lkIE1vY2tBdWRpb1NoYXJlZFVuaXQ6OmNhcHR1
cmVEZXZpY2VDaGFuZ2VkKCkKK01vY2tBdWRpb1NoYXJlZEludGVybmFsVW5pdDo6fk1vY2tBdWRp
b1NoYXJlZEludGVybmFsVW5pdCgpCiB7Ci0gICAgcmVjb25maWd1cmVBdWRpb1VuaXQoKTsKKyAg
ICBBU1NFUlQoIW1faXNQcm9kdWNpbmdEYXRhKTsKIH0KIAotT1NTdGF0dXMgTW9ja0F1ZGlvU2hh
cmVkVW5pdDo6cmVjb25maWd1cmVBdWRpb1VuaXQoKQorT1NTdGF0dXMgTW9ja0F1ZGlvU2hhcmVk
SW50ZXJuYWxVbml0Ojppbml0aWFsaXplKCkKIHsKLSAgICBpZiAoIWhhc0F1ZGlvVW5pdCgpKQot
ICAgICAgICByZXR1cm4gMDsKKyAgICBBU1NFUlQobV9vdXRwdXRTdHJlYW1Gb3JtYXQubVNhbXBs
ZVJhdGUgPT0gbV9zdHJlYW1Gb3JtYXQubVNhbXBsZVJhdGUpOworICAgIGlmIChtX291dHB1dFN0
cmVhbUZvcm1hdC5tU2FtcGxlUmF0ZSAhPSBtX3N0cmVhbUZvcm1hdC5tU2FtcGxlUmF0ZSkKKyAg
ICAgICAgcmV0dXJuIC0xOwogCi0gICAgbV9sYXN0UmVuZGVyVGltZSA9IE1vbm90b25pY1RpbWU6
Om5hbigpOwotICAgIG1fd29ya1F1ZXVlLT5kaXNwYXRjaChbdGhpc10gewotICAgICAgICByZWNv
bmZpZ3VyZSgpOwotICAgICAgICBjYWxsT25NYWluVGhyZWFkKFt0aGlzXSB7Ci0gICAgICAgICAg
ICBzdGFydEludGVybmFsKCk7Ci0gICAgICAgIH0pOwotICAgIH0pOwogICAgIHJldHVybiAwOwog
fQogCi12b2lkIE1vY2tBdWRpb1NoYXJlZFVuaXQ6OmNsZWFudXBBdWRpb1VuaXQoKQotewotICAg
IG1faGFzQXVkaW9Vbml0ID0gZmFsc2U7Ci0gICAgbV9pc1Byb2R1Y2luZ0RhdGEgPSBmYWxzZTsK
LSAgICBtX2xhc3RSZW5kZXJUaW1lID0gTW9ub3RvbmljVGltZTo6bmFuKCk7Ci19Ci0KLU9TU3Rh
dHVzIE1vY2tBdWRpb1NoYXJlZFVuaXQ6OnN0YXJ0SW50ZXJuYWwoKQotewotICAgIHN0YXJ0KCk7
Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLXZvaWQgTW9ja0F1ZGlvU2hhcmVkVW5pdDo6c3RhcnQoKQor
T1NTdGF0dXMgTW9ja0F1ZGlvU2hhcmVkSW50ZXJuYWxVbml0OjpzdGFydCgpCiB7CiAgICAgaWYg
KCFtX2hhc0F1ZGlvVW5pdCkKICAgICAgICAgbV9oYXNBdWRpb1VuaXQgPSB0cnVlOwpAQCAtMTU4
LDMwICsyMDUsMjkgQEAgdm9pZCBNb2NrQXVkaW9TaGFyZWRVbml0OjpzdGFydCgpCiAgICAgbV9s
YXN0UmVuZGVyVGltZSA9IE1vbm90b25pY1RpbWU6Om5vdygpOwogICAgIG1faXNQcm9kdWNpbmdE
YXRhID0gdHJ1ZTsKICAgICBtX3dvcmtRdWV1ZS0+ZGlzcGF0Y2goW3RoaXMsIHJlbmRlclRpbWUg
PSBtX2xhc3RSZW5kZXJUaW1lXSB7Ci0gICAgICAgIHJlbmRlcihyZW5kZXJUaW1lKTsKKyAgICAg
ICAgZ2VuZXJhdGVTYW1wbGVCdWZmZXJzKHJlbmRlclRpbWUpOwogICAgIH0pOworICAgIHJldHVy
biAwOwogfQogCi12b2lkIE1vY2tBdWRpb1NoYXJlZFVuaXQ6OnN0b3BJbnRlcm5hbCgpCitPU1N0
YXR1cyBNb2NrQXVkaW9TaGFyZWRJbnRlcm5hbFVuaXQ6OnN0b3AoKQogewogICAgIG1faXNQcm9k
dWNpbmdEYXRhID0gZmFsc2U7Ci0gICAgaWYgKCFtX2hhc0F1ZGlvVW5pdCkKLSAgICAgICAgcmV0
dXJuOwotICAgIG1fbGFzdFJlbmRlclRpbWUgPSBNb25vdG9uaWNUaW1lOjpuYW4oKTsKLX0KKyAg
ICBpZiAobV9oYXNBdWRpb1VuaXQpCisgICAgICAgIG1fbGFzdFJlbmRlclRpbWUgPSBNb25vdG9u
aWNUaW1lOjpuYW4oKTsKIAotYm9vbCBNb2NrQXVkaW9TaGFyZWRVbml0Ojppc1Byb2R1Y2luZ0Rh
dGEoKSBjb25zdAotewotICAgIHJldHVybiBtX2lzUHJvZHVjaW5nRGF0YTsKKyAgICBtX3dvcmtR
dWV1ZS0+ZGlzcGF0Y2hTeW5jKFtdIHsgfSk7CisKKyAgICByZXR1cm4gMDsKIH0KIAotdm9pZCBN
b2NrQXVkaW9TaGFyZWRVbml0OjpkZWxheVNhbXBsZXMoU2Vjb25kcyBkZWx0YSkKK3ZvaWQgTW9j
a0F1ZGlvU2hhcmVkSW50ZXJuYWxVbml0OjpkZWxheVNhbXBsZXMoU2Vjb25kcyBkZWx0YSkKIHsK
LSAgICBzdG9wSW50ZXJuYWwoKTsKKyAgICBzdG9wKCk7CiAgICAgbV90aW1lci5zdGFydE9uZVNo
b3QoZGVsdGEpOwogfQogCi12b2lkIE1vY2tBdWRpb1NoYXJlZFVuaXQ6OnJlY29uZmlndXJlKCkK
K3ZvaWQgTW9ja0F1ZGlvU2hhcmVkSW50ZXJuYWxVbml0OjpyZWNvbmZpZ3VyZSgpCiB7CiAgICAg
QVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CiAKQEAgLTE5MSwxNCArMjM3LDYgQEAgdm9pZCBNb2Nr
QXVkaW9TaGFyZWRVbml0OjpyZWNvbmZpZ3VyZSgpCiAgICAgbV9tYXhpbWl1bUZyYW1lQ291bnQg
PSBXVEY6OnJvdW5kVXBUb1Bvd2VyT2ZUd28ocmVuZGVySW50ZXJ2YWwoKS5zZWNvbmRzKCkgKiBy
YXRlICogMik7CiAgICAgQVNTRVJUKG1fbWF4aW1pdW1GcmFtZUNvdW50KTsKIAotICAgIGNvbnN0
IGludCBieXRlc1BlckZsb2F0ID0gc2l6ZW9mKEZsb2F0MzIpOwotICAgIGNvbnN0IGludCBiaXRz
UGVyQnl0ZSA9IDg7Ci0gICAgY29uc3QgaW50IGNoYW5uZWxDb3VudCA9IG1fY2hhbm5lbENvdW50
OwotICAgIGNvbnN0IGJvb2wgaXNGbG9hdCA9IHRydWU7Ci0gICAgY29uc3QgYm9vbCBpc0JpZ0Vu
ZGlhbiA9IGZhbHNlOwotICAgIGNvbnN0IGJvb2wgaXNOb25JbnRlcmxlYXZlZCA9IHRydWU7Ci0g
ICAgRmlsbE91dEFTQkRGb3JMUENNKG1fc3RyZWFtRm9ybWF0LCByYXRlLCBjaGFubmVsQ291bnQs
IGJpdHNQZXJCeXRlICogYnl0ZXNQZXJGbG9hdCwgYml0c1BlckJ5dGUgKiBieXRlc1BlckZsb2F0
LCBpc0Zsb2F0LCBpc0JpZ0VuZGlhbiwgaXNOb25JbnRlcmxlYXZlZCk7Ci0KICAgICBtX2F1ZGlv
QnVmZmVyTGlzdCA9IG1ha2VVbmlxdWU8V2ViQXVkaW9CdWZmZXJMaXN0PihtX3N0cmVhbUZvcm1h
dCwgbV9tYXhpbWl1bUZyYW1lQ291bnQpOwogCiAgICAgQ01Gb3JtYXREZXNjcmlwdGlvblJlZiBm
b3JtYXREZXNjcmlwdGlvbjsKQEAgLTIxNSwyNSArMjUzLDM4IEBAIHZvaWQgTW9ja0F1ZGlvU2hh
cmVkVW5pdDo6cmVjb25maWd1cmUoKQogCiAgICAgYWRkSHVtKEJpcEJvcFZvbHVtZSwgQmlwRnJl
cXVlbmN5LCByYXRlLCAwLCBtX2JpcEJvcEJ1ZmZlci5kYXRhKCkgKyBiaXBTdGFydCwgYmlwQm9w
U2FtcGxlQ291bnQpOwogICAgIGFkZEh1bShCaXBCb3BWb2x1bWUsIEJvcEZyZXF1ZW5jeSwgcmF0
ZSwgMCwgbV9iaXBCb3BCdWZmZXIuZGF0YSgpICsgYm9wU3RhcnQsIGJpcEJvcFNhbXBsZUNvdW50
KTsKLSAgICBpZiAoIWVuYWJsZUVjaG9DYW5jZWxsYXRpb24oKSkKKyAgICBpZiAoIW1fZW5hYmxl
RWNob0NhbmNlbGxhdGlvbikKICAgICAgICAgYWRkSHVtKE5vaXNlVm9sdW1lLCBOb2lzZUZyZXF1
ZW5jeSwgcmF0ZSwgMCwgbV9iaXBCb3BCdWZmZXIuZGF0YSgpLCBzYW1wbGVDb3VudCk7CiB9CiAK
LXZvaWQgTW9ja0F1ZGlvU2hhcmVkVW5pdDo6ZW1pdFNhbXBsZUJ1ZmZlcnModWludDMyX3QgZnJh
bWVDb3VudCkKK3ZvaWQgTW9ja0F1ZGlvU2hhcmVkSW50ZXJuYWxVbml0OjplbWl0U2FtcGxlQnVm
ZmVycyh1aW50MzJfdCBmcmFtZUNvdW50KQogewogICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkp
OwogICAgIEFTU0VSVChtX2Zvcm1hdERlc2NyaXB0aW9uKTsKIAogICAgIENNVGltZSBzdGFydFRp
bWUgPSBQQUw6OkNNVGltZU1ha2UobV9zYW1wbGVzRW1pdHRlZCwgc2FtcGxlUmF0ZSgpKTsKKyAg
ICBhdXRvIHNhbXBsZVRpbWUgPSBQQUw6OnRvTWVkaWFUaW1lKHN0YXJ0VGltZSkudG9GbG9hdCgp
OwogICAgIG1fc2FtcGxlc0VtaXR0ZWQgKz0gZnJhbWVDb3VudDsKIAotICAgIGF1ZGlvU2FtcGxl
c0F2YWlsYWJsZShQQUw6OnRvTWVkaWFUaW1lKHN0YXJ0VGltZSksICptX2F1ZGlvQnVmZmVyTGlz
dCwgQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uKG1fc3RyZWFtRm9ybWF0KSwgZnJhbWVDb3VudCk7
CisgICAgYXV0byogYnVmZmVyTGlzdCA9IG1fYXVkaW9CdWZmZXJMaXN0LT5saXN0KCk7CisgICAg
QXVkaW9Vbml0UmVuZGVyQWN0aW9uRmxhZ3MgaW9BY3Rpb25GbGFncyA9IDA7CisgICAgCisgICAg
QXVkaW9UaW1lU3RhbXAgdGltZVN0YW1wOworICAgIG1lbXNldCgmdGltZVN0YW1wLCAwLCBzaXpl
b2YoQXVkaW9UaW1lU3RhbXApKTsKKyAgICB0aW1lU3RhbXAubVNhbXBsZVRpbWUgPSBzYW1wbGVU
aW1lOworICAgIHRpbWVTdGFtcC5tSG9zdFRpbWUgPSBzdGF0aWNfY2FzdDxVSW50NjQ+KHNhbXBs
ZVRpbWUpOworICAgIGlmIChtX21pY3JvcGhvbmVDYWxsYmFjay5pbnB1dFByb2MpCisgICAgICAg
IG1fbWljcm9waG9uZUNhbGxiYWNrLmlucHV0UHJvYyhtX21pY3JvcGhvbmVDYWxsYmFjay5pbnB1
dFByb2NSZWZDb24sICZpb0FjdGlvbkZsYWdzLCAmdGltZVN0YW1wLCAxLCBmcmFtZUNvdW50LCBi
dWZmZXJMaXN0KTsKKworICAgIGlvQWN0aW9uRmxhZ3MgPSAwOworICAgIGlmIChtX3NwZWFrZXJD
YWxsYmFjay5pbnB1dFByb2MpCisgICAgICAgIG1fc3BlYWtlckNhbGxiYWNrLmlucHV0UHJvYyht
X3NwZWFrZXJDYWxsYmFjay5pbnB1dFByb2NSZWZDb24sICZpb0FjdGlvbkZsYWdzLCAmdGltZVN0
YW1wLCAxLCBmcmFtZUNvdW50LCBidWZmZXJMaXN0KTsKIH0KIAotdm9pZCBNb2NrQXVkaW9TaGFy
ZWRVbml0OjpyZW5kZXIoTW9ub3RvbmljVGltZSByZW5kZXJUaW1lKQordm9pZCBNb2NrQXVkaW9T
aGFyZWRJbnRlcm5hbFVuaXQ6OmdlbmVyYXRlU2FtcGxlQnVmZmVycyhNb25vdG9uaWNUaW1lIHJl
bmRlclRpbWUpCiB7CiAgICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7Ci0gICAgaWYgKCFpc1By
b2R1Y2luZ0RhdGEoKSkKKyAgICBpZiAoIW1faXNQcm9kdWNpbmdEYXRhKQogICAgICAgICByZXR1
cm47CiAKICAgICBhdXRvIGRlbHRhID0gcmVuZGVySW50ZXJ2YWwoKTsKQEAgLTI0NSw3ICsyOTYs
NyBAQCB2b2lkIE1vY2tBdWRpb1NoYXJlZFVuaXQ6OnJlbmRlcihNb25vdG9uaWNUaW1lIHJlbmRl
clRpbWUpCiAgICAgICAgIG5leHRSZW5kZXJEZWxheSA9IDBfczsKICAgICB9CiAgICAgbV93b3Jr
UXVldWUtPmRpc3BhdGNoQWZ0ZXIobmV4dFJlbmRlckRlbGF5LCBbdGhpcywgbmV4dFJlbmRlclRp
bWVdIHsKLSAgICAgICAgcmVuZGVyKG5leHRSZW5kZXJUaW1lKTsKKyAgICAgICAgZ2VuZXJhdGVT
YW1wbGVCdWZmZXJzKG5leHRSZW5kZXJUaW1lKTsKICAgICB9KTsKIAogICAgIGlmICghbV9hdWRp
b0J1ZmZlckxpc3QgfHwgIW1fYmlwQm9wQnVmZmVyLnNpemUoKSkKQEAgLTI3MCw2ICszMjEsODAg
QEAgdm9pZCBNb2NrQXVkaW9TaGFyZWRVbml0OjpyZW5kZXIoTW9ub3RvbmljVGltZSByZW5kZXJU
aW1lKQogICAgIH0KIH0KIAorT1NTdGF0dXMgTW9ja0F1ZGlvU2hhcmVkSW50ZXJuYWxVbml0Ojpy
ZW5kZXIoQXVkaW9Vbml0UmVuZGVyQWN0aW9uRmxhZ3MqLCBjb25zdCBBdWRpb1RpbWVTdGFtcCos
IFVJbnQzMiwgVUludDMyIGZyYW1lQ291bnQsIEF1ZGlvQnVmZmVyTGlzdCogYnVmZmVyKQorewor
ICAgIGF1dG8qIHNvdXJjZUJ1ZmZlciA9IG1fYXVkaW9CdWZmZXJMaXN0LT5saXN0KCk7CisgICAg
aWYgKGJ1ZmZlci0+bU51bWJlckJ1ZmZlcnMgPiBzb3VyY2VCdWZmZXItPm1OdW1iZXJCdWZmZXJz
KQorICAgICAgICByZXR1cm4ga0F1ZGlvX1BhcmFtRXJyb3I7CisKKyAgICBmb3IgKHVpbnQzMl90
IGkgPSAwOyBpIDwgYnVmZmVyLT5tTnVtYmVyQnVmZmVyczsgaSsrKSB7CisgICAgICAgIGF1dG8q
IHNvdXJjZSA9IHN0YXRpY19jYXN0PHVpbnQ4X3QqPihzb3VyY2VCdWZmZXItPm1CdWZmZXJzW2ld
Lm1EYXRhKTsKKyAgICAgICAgYXV0byogZGVzdGluYXRpb24gPSBzdGF0aWNfY2FzdDx1aW50OF90
Kj4oYnVmZmVyLT5tQnVmZmVyc1tpXS5tRGF0YSk7CisgICAgICAgIG1lbWNweShkZXN0aW5hdGlv
biwgc291cmNlLCBmcmFtZUNvdW50ICogbV9zdHJlYW1Gb3JtYXQubUJ5dGVzUGVyUGFja2V0KTsK
KyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworT1NTdGF0dXMgTW9ja0F1ZGlvU2hhcmVkSW50
ZXJuYWxVbml0OjpzZXQoQXVkaW9Vbml0UHJvcGVydHlJRCBwcm9wZXJ0eSwgQXVkaW9Vbml0U2Nv
cGUgc2NvcGUsIEF1ZGlvVW5pdEVsZW1lbnQsIGNvbnN0IHZvaWQqIHZhbHVlLCBVSW50MzIpCit7
CisgICAgaWYgKHByb3BlcnR5ID09IGtBdWRpb1VuaXRQcm9wZXJ0eV9TdHJlYW1Gb3JtYXQpIHsK
KyAgICAgICAgYXV0byYgdHlwZWRWYWx1ZSA9ICpzdGF0aWNfY2FzdDxjb25zdCBBdWRpb1N0cmVh
bUJhc2ljRGVzY3JpcHRpb24qPih2YWx1ZSk7CisgICAgICAgIGlmIChzY29wZSA9PSBrQXVkaW9V
bml0U2NvcGVfSW5wdXQpCisgICAgICAgICAgICBtX3N0cmVhbUZvcm1hdCA9IHR5cGVkVmFsdWU7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fb3V0cHV0U3RyZWFtRm9ybWF0ID0gdHlwZWRW
YWx1ZTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIGlmIChwcm9wZXJ0eSA9PSBrQVVW
b2ljZUlPUHJvcGVydHlfVm9pY2VQcm9jZXNzaW5nRW5hYmxlQUdDKSB7CisgICAgICAgIG1fZW5h
YmxlRWNob0NhbmNlbGxhdGlvbiA9ICEhKnN0YXRpY19jYXN0PGNvbnN0IHVpbnQzMl90Kj4odmFs
dWUpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgaWYgKHByb3BlcnR5ID09IGtBdWRp
b091dHB1dFVuaXRQcm9wZXJ0eV9TZXRJbnB1dENhbGxiYWNrKSB7CisgICAgICAgIG1fbWljcm9w
aG9uZUNhbGxiYWNrID0gKnN0YXRpY19jYXN0PGNvbnN0IEFVUmVuZGVyQ2FsbGJhY2tTdHJ1Y3Qq
Pih2YWx1ZSk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBpZiAocHJvcGVydHkgPT0g
a0F1ZGlvVW5pdFByb3BlcnR5X1NldFJlbmRlckNhbGxiYWNrKSB7CisgICAgICAgIG1fc3BlYWtl
ckNhbGxiYWNrID0gKnN0YXRpY19jYXN0PGNvbnN0IEFVUmVuZGVyQ2FsbGJhY2tTdHJ1Y3QqPih2
YWx1ZSk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBpZiAocHJvcGVydHkgPT0ga0F1
ZGlvT3V0cHV0VW5pdFByb3BlcnR5X0N1cnJlbnREZXZpY2UpIHsKKyAgICAgICAgQVNTRVJUKCEq
c3RhdGljX2Nhc3Q8Y29uc3QgdWludDMyX3QqPih2YWx1ZSkpOworICAgICAgICBpZiAoYXV0byBk
ZXZpY2UgPSBNb2NrUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlcjo6bW9ja0RldmljZVdpdGhQZXJz
aXN0ZW50SUQoTW9ja0F1ZGlvU2hhcmVkVW5pdDo6c2luZ2xldG9uKCkucGVyc2lzdGVudElERm9y
VGVzdGluZygpKSkKKyAgICAgICAgICAgIG1fc3RyZWFtRm9ybWF0Lm1TYW1wbGVSYXRlID0gbV9v
dXRwdXRTdHJlYW1Gb3JtYXQubVNhbXBsZVJhdGUgPSBzdGQ6OmdldDxNb2NrTWljcm9waG9uZVBy
b3BlcnRpZXM+KGRldmljZS0+cHJvcGVydGllcykuZGVmYXVsdFNhbXBsZVJhdGU7CisgICAgICAg
IHJldHVybiAwOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gMDsKK30KKworT1NTdGF0dXMgTW9j
a0F1ZGlvU2hhcmVkSW50ZXJuYWxVbml0OjpnZXQoQXVkaW9Vbml0UHJvcGVydHlJRCBwcm9wZXJ0
eSwgQXVkaW9Vbml0U2NvcGUgc2NvcGUsIEF1ZGlvVW5pdEVsZW1lbnQsIHZvaWQqIHZhbHVlLCBV
SW50MzIqIHZhbHVlU2l6ZSkKK3sKKyAgICBpZiAocHJvcGVydHkgPT0ga0F1ZGlvVW5pdFByb3Bl
cnR5X1N0cmVhbUZvcm1hdCkgeworICAgICAgICBhdXRvJiB0eXBlZFZhbHVlID0gKnN0YXRpY19j
YXN0PEF1ZGlvU3RyZWFtQmFzaWNEZXNjcmlwdGlvbio+KHZhbHVlKTsKKyAgICAgICAgaWYgKHNj
b3BlID09IGtBdWRpb1VuaXRTY29wZV9JbnB1dCkKKyAgICAgICAgICAgIHR5cGVkVmFsdWUgPSBt
X3N0cmVhbUZvcm1hdDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdHlwZWRWYWx1ZSA9IG1f
b3V0cHV0U3RyZWFtRm9ybWF0OworICAgICAgICAqdmFsdWVTaXplID0gc2l6ZW9mKEF1ZGlvU3Ry
ZWFtQmFzaWNEZXNjcmlwdGlvbik7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIHJl
dHVybiAwOworfQorCitPU1N0YXR1cyBNb2NrQXVkaW9TaGFyZWRJbnRlcm5hbFVuaXQ6OmRlZmF1
bHRJbnB1dERldmljZSh1aW50MzJfdCogZGV2aWNlKQoreworICAgICpkZXZpY2UgPSAwOworICAg
IHJldHVybiAwOworfQorCitPU1N0YXR1cyBNb2NrQXVkaW9TaGFyZWRJbnRlcm5hbFVuaXQ6OmRl
ZmF1bHRPdXRwdXREZXZpY2UodWludDMyX3QqIGRldmljZSkKK3sKKyAgICAqZGV2aWNlID0gMDsK
KyAgICByZXR1cm4gMDsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8g
RU5BQkxFKE1FRElBX1NUUkVBTSkKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBi
L0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCBhYmM4MGZjMjFiNjM5ODdhMDAzNTBjZjIwM2Qw
NzRlZGVjMzYwMTk4Li43NTQ1MWNkNGY1YWIzMDFhZDYwODUyZTdmNjg4MjllMzJhNTg2NDVmIDEw
MDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMjItMDUtMTAgIFlvdWVubiBGYWJsZXQgIDx5b3Vlbm5A
YXBwbGUuY29tPgorCisgICAgICAgIEFkZCBhIGJldHRlciBtb2NrIGZvciBhdWRpbyB1bml0cyB1
c2VkIGJ5IENvcmVBdWRpb1NoYXJlZFVuaXQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTI0MDIzMQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgICogZmFzdC9tZWRpYXN0cmVhbS9hdWRpby11bml0LXJlY29uZmln
dXJlLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9tZWRpYXN0cmVhbS9hdWRp
by11bml0LXJlY29uZmlndXJlLmh0bWw6IEFkZGVkLgorCiAyMDIyLTA1LTA5ICBPcmlvbCBCcnVm
YXUgIDxvYnJ1ZmF1QGlnYWxpYS5jb20+CiAKICAgICAgICAgW2Nzc29tXSBEb24ndCBpbmRleCBw
ZXJzcGVjdGl2ZS90cmFuc2Zvcm0tb3JpZ2luLSogaW4gY29tcHV0ZWQgc3R5bGVzCmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9mYXN0L21lZGlhc3RyZWFtL2F1ZGlvLXVuaXQtcmVjb25maWd1cmUt
ZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9tZWRpYXN0cmVhbS9hdWRpby11bml0LXJl
Y29uZmlndXJlLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hYzk2MjM4MmM3YjU3YWM0ZTFlMzhl
YmU3NmZjODRlMDA3NjhhNzcwCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9t
ZWRpYXN0cmVhbS9hdWRpby11bml0LXJlY29uZmlndXJlLWV4cGVjdGVkLnR4dApAQCAtMCwwICsx
LDUgQEAKKworCitQQVNTIFJlY29uZmlndXJlIGF1ZGlvIHNhbXBsZSByYXRlCitQQVNTIFJlY29u
ZmlndXJlIGF1ZGlvIHVuaXQgd2hlbiBiZWluZyBpbiByZW5kZXItb25seSBtb2RlCisKZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvbWVkaWFzdHJlYW0vYXVkaW8tdW5pdC1yZWNvbmZpZ3Vy
ZS5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9tZWRpYXN0cmVhbS9hdWRpby11bml0LXJlY29uZmln
dXJlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uZjY0MzU3YmY0ZGNjNjYwZDJmMmNmZGUxMjkyMzEzMTA2ZDg0
ZTc5YQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvbWVkaWFzdHJlYW0vYXVk
aW8tdW5pdC1yZWNvbmZpZ3VyZS5odG1sCkBAIC0wLDAgKzEsNzAgQEAKKzwhRE9DVFlQRSBodG1s
PgorPGh0bWw+Cis8aGVhZD4KKyAgICA8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+CisgICAgPHNjcmlw
dCBzcmM9Ii4uLy4uL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+CisgICAgPHNj
cmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy90ZXN0aGFybmVzc3JlcG9ydC5qcyI+PC9zY3JpcHQ+
CisgPC9oZWFkPgorPGJvZHk+Cis8dmlkZW8gaWQ9InZpZGVvMSIgYXV0b3BsYXkgcGxheXNJbmxp
bmUgY29udHJvbHM+PC92aWRlbz4KKzx2aWRlbyBpZD0idmlkZW8yIiBhdXRvcGxheSBwbGF5c0lu
bGluZSBjb250cm9scz48L3ZpZGVvPgorPHNjcmlwdD4KK3Byb21pc2VfdGVzdChhc3luYyAodGVz
dCkgPT4geworICAgIGNvbnN0IGNvbnRleHQgPSBuZXcgQXVkaW9Db250ZXh0KCk7CisgICAgY29u
c3Qgb3NjaWxsYXRvciA9IGNvbnRleHQuY3JlYXRlT3NjaWxsYXRvcigpOworICAgIGNvbnN0IHN0
cmVhbURlc3RpbmF0aW9uID0gY29udGV4dC5jcmVhdGVNZWRpYVN0cmVhbURlc3RpbmF0aW9uKCk7
CisgICAgb3NjaWxsYXRvci5jb25uZWN0KHN0cmVhbURlc3RpbmF0aW9uKTsKKyAgICB2aWRlbzEu
c3JjT2JqZWN0ID0gc3RyZWFtRGVzdGluYXRpb24uc3RyZWFtOworICAgIC8vIHZpZGVvMSB3aWxs
IGJlIHBsYXllZCB0aHJvdWdoIFZQSU8gd2lsbCBmaXggdGhlIHJhdGUgdG8gYSBzaW5nbGUgdmFs
dWUuCisgICAgYXdhaXQgdmlkZW8xLnBsYXkoKTsKKyAgICBvc2NpbGxhdG9yLnN0YXJ0KCk7CisK
KyAgICBjb25zdCBzdHJlYW0gPSBhd2FpdCBuYXZpZ2F0b3IubWVkaWFEZXZpY2VzLmdldFVzZXJN
ZWRpYSh7IGF1ZGlvOiB7IHNhbXBsZVJhdGU6IDQ4MDAwIH19KTsKKyAgICBzdHJlYW0uZ2V0QXVk
aW9UcmFja3MoKVswXS5vbmVuZGVkID0gKCkgPT4gYXNzZXJ0X25vdF9yZWFjaGVkKCJzaG91bGQg
bm90IGVuZCIpOworICAgIGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gc2V0VGltZW91dChy
ZXNvbHZlLCAxMDApKTsKKyAgICBzdHJlYW0uZ2V0QXVkaW9UcmFja3MoKVswXS5zdG9wKCk7CisK
KyAgICBjb25zdCBzdHJlYW0yID0gYXdhaXQgbmF2aWdhdG9yLm1lZGlhRGV2aWNlcy5nZXRVc2Vy
TWVkaWEoeyBhdWRpbzogeyBzYW1wbGVSYXRlOiA0NDEwMCB9fSk7CisgICAgc3RyZWFtMi5nZXRB
dWRpb1RyYWNrcygpWzBdLm9uZW5kZWQgPSAoKSA9PiBhc3NlcnRfbm90X3JlYWNoZWQoInNob3Vs
ZCBub3QgZW5kIik7CisgICAgYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiBzZXRUaW1lb3V0
KHJlc29sdmUsIDEwMCkpOworfSwgIlJlY29uZmlndXJlIGF1ZGlvIHNhbXBsZSByYXRlIik7CisK
K3Byb21pc2VfdGVzdChhc3luYyAodGVzdCkgPT4geworICAgIGNvbnN0IGNvbnRleHQgPSBuZXcg
QXVkaW9Db250ZXh0KCk7CisgICAgY29uc3Qgb3NjaWxsYXRvciA9IGNvbnRleHQuY3JlYXRlT3Nj
aWxsYXRvcigpOworICAgIGNvbnN0IHN0cmVhbURlc3RpbmF0aW9uID0gY29udGV4dC5jcmVhdGVN
ZWRpYVN0cmVhbURlc3RpbmF0aW9uKCk7CisgICAgb3NjaWxsYXRvci5jb25uZWN0KHN0cmVhbURl
c3RpbmF0aW9uKTsKKyAgICB2aWRlbzEuc3JjT2JqZWN0ID0gc3RyZWFtRGVzdGluYXRpb24uc3Ry
ZWFtOworICAgIGF3YWl0IHZpZGVvMS5wbGF5KCk7CisgICAgb3NjaWxsYXRvci5zdGFydCgpOwor
CisgICAgY29uc3QgZGVmYXVsdEF1ZGlvQ29uc3RyYWludHMgPSB7CisgICAgICAgIHNhbXBsZVJh
dGU6IDQ4MDAwLAorICAgICAgICBzYW1wbGVTaXplOiAxNiwKKyAgICAgICAgY2hhbm5lbENvdW50
OiAxLAorICAgICAgICBlY2hvQ2FuY2VsbGF0aW9uOiB0cnVlLAorICAgICAgICBub2lzZVN1cHBy
ZXNzaW9uOiB0cnVlCisgICAgfTsKKyAgICBjb25zdCBtdXNpY01vZGVBdWRpb0NvbnN0cmFpbnRz
ID0geworICAgICAgICBzYW1wbGVSYXRlOiA0ODAwMCwKKyAgICAgICAgc2FtcGxlU2l6ZTogMTYs
CisgICAgICAgIGNoYW5uZWxDb3VudDogMiwKKyAgICAgICAgZWNob0NhbmNlbGxhdGlvbjogZmFs
c2UsCisgICAgICAgIG5vaXNlU3VwcHJlc3Npb246IGZhbHNlCisgICAgfTsKKworICAgIGNvbnN0
IHN0cmVhbTEgPSBhd2FpdCBuYXZpZ2F0b3IubWVkaWFEZXZpY2VzLmdldFVzZXJNZWRpYSh7IGF1
ZGlvOiBkZWZhdWx0QXVkaW9Db25zdHJhaW50cyB9KTsKKyAgICB2aWRlbzIuc3JjT2JqZWN0ID0g
c3RyZWFtMTsKKyAgICBhd2FpdCB2aWRlbzIucGxheSgpOworICAgIGF3YWl0IG5ldyBQcm9taXNl
KHJlc29sdmUgPT4gc2V0VGltZW91dChyZXNvbHZlLCAxMDAwKSk7CisKKyAgICAvLyBCeSBzdG9w
cGluZyB0aGUgY2FwdHVyZSBhdWRpbyB0cmFjaywgdGhlIFZQSU8gdW5pdCB3aWxsIGdvIGluIHJl
bmRlciBvbmx5IG1vZGUgYXMgaXQgbmVlZHMgdG8gcGxheSB2aWRlbyAxLgorICAgIHN0cmVhbTEu
Z2V0QXVkaW9UcmFja3MoKVswXS5zdG9wKCk7CisKKyAgICBjb25zdCBzdHJlYW0yID0gYXdhaXQg
bmF2aWdhdG9yLm1lZGlhRGV2aWNlcy5nZXRVc2VyTWVkaWEoeyBhdWRpbzogbXVzaWNNb2RlQXVk
aW9Db25zdHJhaW50cyB9KTsKKyAgICBzdHJlYW0yLmdldEF1ZGlvVHJhY2tzKClbMF0ub25lbmRl
ZCA9ICgpID0+IGxvZy5pbm5lckhUTUwgKz0gJ3RyYWNrIGVuZGVkJzsKKyAgICBhd2FpdCBuZXcg
UHJvbWlzZShyZXNvbHZlID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgMTAwMCkpOworfSwgIlJlY29u
ZmlndXJlIGF1ZGlvIHVuaXQgd2hlbiBiZWluZyBpbiByZW5kZXItb25seSBtb2RlIik7Cis8L3Nj
cmlwdD4KKzwvYm9keT4KKzwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>459221</attachid>
            <date>2022-05-12 04:16:17 -0700</date>
            <delta_ts>2022-05-12 07:29:03 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-240231-20220512131614.patch</filename>
            <type>text/plain</type>
            <size>83893</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjk0MDUwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjM5MjdjMjQyMWUzZTVh
MjU5ZDQ4MDJiYzliM2U5NmRhYThlZTFiZS4uOTcyNzE2MmNiZWUzZDg1MzFmMzZmNmM1ZWIwNTM0
ZjI2MTIzY2VkNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI5IEBACisyMDIyLTA1LTEyICBZb3Vl
bm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgYSBiZXR0ZXIgbW9j
ayBmb3IgYXVkaW8gdW5pdHMgdXNlZCBieSBDb3JlQXVkaW9TaGFyZWRVbml0CisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNDAyMzEKKworICAgICAgICBS
ZXZpZXdlZCBieSBFcmljIENhcmxzb24uCisKKyAgICAgICAgTW92ZSBDb3JlQXVkaW9TaGFyZWRV
bml0IHRvIGl0cyBvd24gZmlsZSwgQ29yZUF1ZGlvU2hhcmVkVW5pdC5oL0NvcmVBdWRpb1NoYXJl
ZFVuaXQuY3BwLgorICAgICAgICBJbnRyb2R1Y2UgYW4gaW50ZXJuYWwgdW5pdCB0byBhYnN0cmFj
dCBvdXQgQ29yZUF1ZGlvU2hhcmVkVW5pdCBmcm9tIGFjdHVhbCBDb3JlQXVkaW8gdW5pdHMuCisg
ICAgICAgIEltcGxlbWVudCBhIENvcmVBdWRpbyBiYXNlZCBpbnRlcm5hbCB1bml0IGluIENvcmVB
dWRpb1NoYXJlZFVuaXQuY3BwLgorICAgICAgICBJbXBsZW1lbnQgYSBNb2NrIGJhc2VkIGludGVy
bmFsIHVuaXQgaW4gTW9ja0F1ZGlvU2hhcmVkVW5pdC5oL01vY2tBdWRpb1NoYXJlZFVuaXQubW0u
CisgICAgICAgIEFkZCBpbnB1dHB1dC9vdXB1dCBzYW1wbGUgcmF0ZSB2YWxpZGF0aW9uIChkZWJ1
ZyBhc3NlcnQgYW5kIHJlbGVhc2UgZXJyb3IgcmV0dXJuZWQpLgorICAgICAgICBBZGQgYSB0ZXN0
IHRoYXQgdXNlcyB0aGlzIHZhbGlkYXRpb24uCisKKyAgICAgICAgVGVzdDogZmFzdC9tZWRpYXN0
cmVhbS9hdWRpby11bml0LXJlY29uZmlndXJlLmh0bWwKKworICAgICAgICAqIFNvdXJjZXNDb2Nv
YS50eHQ6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAg
ICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9CYXNlQXVkaW9TaGFyZWRVbml0LmNwcDoK
KyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQmFzZUF1ZGlvU2hhcmVkVW5pdC5o
OgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9Db3JlQXVkaW9DYXB0dXJlU291
cmNlLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQ29yZUF1ZGlvU2hh
cmVkVW5pdC5jcHA6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9D
b3JlQXVkaW9TaGFyZWRVbml0Lmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3Ry
ZWFtL21hYy9Nb2NrQXVkaW9TaGFyZWRVbml0Lmg6CisgICAgICAgICogcGxhdGZvcm0vbWVkaWFz
dHJlYW0vbWFjL01vY2tBdWRpb1NoYXJlZFVuaXQubW06CisKIDIwMjItMDUtMTIgIFlvdWVubiBG
YWJsZXQgIDx5b3Vlbm5AYXBwbGUuY29tPgogCiAgICAgICAgIEF1ZGlvIHBsYXliYWNrIHJhdGUg
c3BlZCB1cCBmb3IgZmV3IHNlY29uZHMgd2hlbiB1c2luZyBjcmVhdGVNZWRpYUVsZW1lbnRTb3Vy
Y2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQgYi9Tb3VyY2Uv
V2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0CmluZGV4IGM5OTNjMDZjZDAwOTFlNDMwMTE5YjhkZjQ4
NGMzZWZkNjUzZTZkNmYuLmRhZWExMGI2MWQxNTg1ZDg1NTNlZGRkMjYwMTRiOWU1ZDFjYzEyNTUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQKKysrIGIvU291cmNl
L1dlYkNvcmUvU291cmNlc0NvY29hLnR4dApAQCAtNTY1LDYgKzU2NSw3IEBAIHBsYXRmb3JtL21l
ZGlhc3RyZWFtL21hYy9DR0Rpc3BsYXlTdHJlYW1TY3JlZW5DYXB0dXJlU291cmNlLm1tCiBwbGF0
Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQ29yZUF1ZGlvQ2FwdHVyZURldmljZS5jcHAKIHBsYXRmb3Jt
L21lZGlhc3RyZWFtL21hYy9Db3JlQXVkaW9DYXB0dXJlRGV2aWNlTWFuYWdlci5jcHAKIHBsYXRm
b3JtL21lZGlhc3RyZWFtL21hYy9Db3JlQXVkaW9DYXB0dXJlU291cmNlLmNwcAorcGxhdGZvcm0v
bWVkaWFzdHJlYW0vbWFjL0NvcmVBdWRpb1NoYXJlZFVuaXQuY3BwCiBwbGF0Zm9ybS9tZWRpYXN0
cmVhbS9tYWMvRGlzcGxheUNhcHR1cmVNYW5hZ2VyQ29jb2EuY3BwCiBwbGF0Zm9ybS9tZWRpYXN0
cmVhbS9tYWMvTWVkaWFTdHJlYW1UcmFja0F1ZGlvU291cmNlUHJvdmlkZXJDb2NvYS5jcHAKIHBs
YXRmb3JtL21lZGlhc3RyZWFtL21hYy9Nb2NrQXVkaW9TaGFyZWRVbml0Lm1tCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggNDA5NTM0
NmY3YWJjODc1ZGM2NWExOGE3YmFhNjNmZmU0MzVhM2VkNC4uMzlhZjc0ODc5Mzg4NjNiNjhmMGJj
ZDU3ODVmYzc2YTc2YmI0ZjBlYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtODU2NSw2ICs4NTY1LDggQEAKIAkJNDEwQThFRjcy
NEY4RjNGNjAwNEY5MDcwIC8qIFRleHRFbmNvZGVyU3RyZWFtRW5jb2Rlci5pZGwgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gVGV4
dEVuY29kZXJTdHJlYW1FbmNvZGVyLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NDEwQThFRjgyNEY4RjQ3QTAwNEY5MDcwIC8qIFRleHRFbmNvZGVyU3RyZWFtRW5jb2Rlci5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBUZXh0RW5jb2RlclN0cmVhbUVuY29kZXIuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk0MTBBOEVGOTI0RjhGNDdCMDA0RjkwNzAgLyogVGV4dEVu
Y29kZXJTdHJlYW1FbmNvZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRleHRFbmNvZGVyU3RyZWFtRW5j
b2Rlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0MTBBRDJERTI4MjJCQkY2MDA5
QzkzQzggLyogQ29yZUF1ZGlvU2hhcmVkVW5pdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBDb3JlQXVkaW9TaGFyZWRVbml0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTQxMEFEMkRGMjgyMkJCRjYwMDlDOTNDOCAvKiBDb3JlQXVkaW9TaGFyZWRVbml0LmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvcmVBdWRpb1NoYXJlZFVuaXQu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MTBCN0U3MTEwNDVGQUIwMDBEODIy
NEYgLyogSlNNZXNzYWdlRXZlbnRDdXN0b20uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSlNNZXNzYWdlRXZlbnRDdXN0b20uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk0MTBCQTEzMTI1NzBGRTU3MDAyRTJGOEEgLyogTGliV2ViUlRDUnRwVHJhbnNm
b3JtYWJsZUZyYW1lLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IExp
YldlYlJUQ1J0cFRyYW5zZm9ybWFibGVGcmFtZS5jcHA7IHBhdGggPSBsaWJ3ZWJydGMvTGliV2Vi
UlRDUnRwVHJhbnNmb3JtYWJsZUZyYW1lLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNDEwQkNGNTMyNkYwQ0Q4QjAwNDBCMTI0IC8qIFJUQ0xvY2FsU2Vzc2lvbkRlc2NyaXB0aW9u
SW5pdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSVENMb2NhbFNlc3Npb25E
ZXNjcmlwdGlvbkluaXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE4ODEyLDYg
KzE4ODE0LDggQEAKIAkJCQkzRjgwMjAzNDFFOUUzODFEMDBERUM2MUQgLyogQ29yZUF1ZGlvQ2Fw
dHVyZURldmljZU1hbmFnZXIuaCAqLywKIAkJCQkzRjNCQjU4MjFFNzA5RUU0MDBDNzAxRjIgLyog
Q29yZUF1ZGlvQ2FwdHVyZVNvdXJjZS5jcHAgKi8sCiAJCQkJM0YzQkI1ODMxRTcwOUVFNDAwQzcw
MUYyIC8qIENvcmVBdWRpb0NhcHR1cmVTb3VyY2UuaCAqLywKKwkJCQk0MTBBRDJERjI4MjJCQkY2
MDA5QzkzQzggLyogQ29yZUF1ZGlvU2hhcmVkVW5pdC5jcHAgKi8sCisJCQkJNDEwQUQyREUyODIy
QkJGNjAwOUM5M0M4IC8qIENvcmVBdWRpb1NoYXJlZFVuaXQuaCAqLywKIAkJCQkwN0E2RDg0ODFG
RUI3MDBCMDA2NDQxREUgLyogRGlzcGxheUNhcHR1cmVNYW5hZ2VyQ29jb2EuY3BwICovLAogCQkJ
CTA3QTZEODQ5MUZFQjcwMEMwMDY0NDFERSAvKiBEaXNwbGF5Q2FwdHVyZU1hbmFnZXJDb2NvYS5o
ICovLAogCQkJCTQxNzRFOTIwMjUzNURDREQwMEZFNDIwMiAvKiBNZWRpYVN0cmVhbVRyYWNrQXVk
aW9Tb3VyY2VQcm92aWRlckNvY29hLmNwcCAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9CYXNlQXVkaW9TaGFyZWRVbml0LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9CYXNlQXVkaW9TaGFyZWRVbml0LmNw
cAppbmRleCA0MTcwZmY2NTYzY2ZhN2JiOTNkNzFkY2YzMmRiOGEzNmJiNzBiNzM2Li5iOGU1YjFk
ZTc0YWJlODQ3YTA3MDM2NGY1NGE1MmU0MzA5OTk5MWZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQmFzZUF1ZGlvU2hhcmVkVW5pdC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0Jhc2VBdWRpb1NoYXJl
ZFVuaXQuY3BwCkBAIC0xMTMsMTEgKzExMyw2IEBAIE9TU3RhdHVzIEJhc2VBdWRpb1NoYXJlZFVu
aXQ6OnN0YXJ0VW5pdCgpCiAgICAgcmV0dXJuIDA7CiB9CiAKLXZvaWQgQmFzZUF1ZGlvU2hhcmVk
VW5pdDo6cmVzZXRTYW1wbGVSYXRlKCkKLXsKLSAgICBtX3NhbXBsZVJhdGUgPSBBdWRpb1Nlc3Np
b246OnNoYXJlZFNlc3Npb24oKS5zYW1wbGVSYXRlKCk7Ci19Ci0KIHZvaWQgQmFzZUF1ZGlvU2hh
cmVkVW5pdDo6cHJlcGFyZUZvck5ld0NhcHR1cmUoKQogewogICAgIG1fdm9sdW1lID0gMTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9CYXNlQXVk
aW9TaGFyZWRVbml0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMv
QmFzZUF1ZGlvU2hhcmVkVW5pdC5oCmluZGV4IGY2MTZjMDM4ZmJkYWZjYTY1YTY5M2I2MmRjYTBl
OGFmZjU3MTZlZDMuLjY2YjMzYTRlMzk4OTIzNWM0NjVkMTQ4NDVlMjQ4NmJlZThkNmE2MzggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9CYXNlQXVk
aW9TaGFyZWRVbml0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0v
bWFjL0Jhc2VBdWRpb1NoYXJlZFVuaXQuaApAQCAtODMsNiArODMsOCBAQCBwdWJsaWM6CiAgICAg
dm9pZCB3aGVuQXVkaW9DYXB0dXJlVW5pdElzTm90UnVubmluZyhGdW5jdGlvbjx2b2lkKCk+JiYp
OwogICAgIGJvb2wgaXNSZW5kZXJpbmdBdWRpbygpIGNvbnN0IHsgcmV0dXJuIG1faXNSZW5kZXJp
bmdBdWRpbzsgfQogCisgICAgY29uc3QgU3RyaW5nJiBwZXJzaXN0ZW50SURGb3JUZXN0aW5nKCkg
Y29uc3QgeyByZXR1cm4gbV9jYXB0dXJpbmdEZXZpY2UgPyBtX2NhcHR1cmluZ0RldmljZS0+Zmly
c3QgOiBlbXB0eVN0cmluZygpOyB9CisKIHByb3RlY3RlZDoKICAgICB2b2lkIGZvckVhY2hDbGll
bnQoY29uc3QgRnVuY3Rpb248dm9pZChDb3JlQXVkaW9DYXB0dXJlU291cmNlJik+JikgY29uc3Q7
CiAgICAgYm9vbCBoYXNDbGllbnRzKCkgY29uc3QgeyByZXR1cm4gIW1fY2xpZW50cy5pc0VtcHR5
KCk7IH0KQEAgLTkyLDcgKzk0LDcgQEAgcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgT1NTdGF0dXMg
c3RhcnRJbnRlcm5hbCgpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgc3RvcEludGVybmFsKCkgPSAw
OwogICAgIHZpcnR1YWwgT1NTdGF0dXMgcmVjb25maWd1cmVBdWRpb1VuaXQoKSA9IDA7Ci0gICAg
dmlydHVhbCB2b2lkIHJlc2V0U2FtcGxlUmF0ZSgpOworICAgIHZpcnR1YWwgdm9pZCByZXNldFNh
bXBsZVJhdGUoKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGNhcHR1cmVEZXZpY2VDaGFuZ2VkKCkg
PSAwOwogCiAgICAgdm9pZCBzZXRTdXNwZW5kZWQoYm9vbCB2YWx1ZSkgeyBtX3N1c3BlbmRlZCA9
IHZhbHVlOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVh
bS9tYWMvQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tZWRpYXN0cmVhbS9tYWMvQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZS5jcHAKaW5kZXggYjY4N2Iy
OGRkZDE2MjgyNzRjZTI0MzdmOGY3ZWQzOGJjNDQwZmRkZi4uMzg4NzRiODJkZmUwMjY4YzMxNGM2
Y2ZlNTgwYzAyNzRiYzUyNjJjNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWVkaWFzdHJlYW0vbWFjL0NvcmVBdWRpb0NhcHR1cmVTb3VyY2UuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9Db3JlQXVkaW9DYXB0dXJlU291cmNlLmNw
cApAQCAtMzEsOSArMzEsOSBAQAogI2luY2x1ZGUgIkF1ZGlvU2FtcGxlQnVmZmVyTGlzdC5oIgog
I2luY2x1ZGUgIkF1ZGlvU2FtcGxlRGF0YVNvdXJjZS5oIgogI2luY2x1ZGUgIkF1ZGlvU2Vzc2lv
bi5oIgotI2luY2x1ZGUgIkJhc2VBdWRpb1NoYXJlZFVuaXQuaCIKICNpbmNsdWRlICJDb3JlQXVk
aW9DYXB0dXJlRGV2aWNlLmgiCiAjaW5jbHVkZSAiQ29yZUF1ZGlvQ2FwdHVyZURldmljZU1hbmFn
ZXIuaCIKKyNpbmNsdWRlICJDb3JlQXVkaW9TaGFyZWRVbml0LmgiCiAjaW5jbHVkZSAiTG9nZ2lu
Zy5oIgogI2luY2x1ZGUgIlBsYXRmb3JtTWVkaWFTZXNzaW9uTWFuYWdlci5oIgogI2luY2x1ZGUg
IlRpbWVyLmgiCkBAIC01MSwxNSArNTEsMTUgQEAKICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95
ZWQuaD4KICNpbmNsdWRlIDx3dGYvU2NvcGUuaD4KIAotI2luY2x1ZGUgPHBhbC9jZi9BdWRpb1Rv
b2xib3hTb2Z0TGluay5oPgotI2luY2x1ZGUgPHBhbC9jZi9Db3JlTWVkaWFTb2Z0TGluay5oPgot
CiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICNpbmNsdWRlICJBVkF1ZGlvU2Vzc2lvbkNhcHR1
cmVEZXZpY2UuaCIKICNpbmNsdWRlICJBVkF1ZGlvU2Vzc2lvbkNhcHR1cmVEZXZpY2VNYW5hZ2Vy
LmgiCiAjaW5jbHVkZSAiQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZUlPUy5oIgogI2VuZGlmCiAKKyNp
bmNsdWRlIDxwYWwvY2YvQXVkaW9Ub29sYm94U29mdExpbmsuaD4KKyNpbmNsdWRlIDxwYWwvY2Yv
Q29yZU1lZGlhU29mdExpbmsuaD4KKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiAjaWYgUExBVEZP
Uk0oTUFDKQpAQCAtNzAsNjE0ICs3MCw2IEBAIENvcmVBdWRpb0NhcHR1cmVTb3VyY2VGYWN0b3J5
JiBDb3JlQXVkaW9DYXB0dXJlU291cmNlRmFjdG9yeTo6c2luZ2xldG9uKCkKIH0KICNlbmRpZgog
Ci1jb25zdCBVSW50MzIgb3V0cHV0QnVzID0gMDsKLWNvbnN0IFVJbnQzMiBpbnB1dEJ1cyA9IDE7
Ci0KLWNsYXNzIENvcmVBdWRpb1NoYXJlZFVuaXQgZmluYWwgOiBwdWJsaWMgQmFzZUF1ZGlvU2hh
cmVkVW5pdCB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIENvcmVBdWRpb1NoYXJlZFVuaXQmIHVuaXQo
KTsKLSAgICBzdGF0aWMgQmFzZUF1ZGlvU2hhcmVkVW5pdCYgc2luZ2xldG9uKCkgIHsgcmV0dXJu
IHVuaXQoKTsgfQotICAgIENvcmVBdWRpb1NoYXJlZFVuaXQoKTsKLQotICAgIHZvaWQgcmVnaXN0
ZXJTcGVha2VyU2FtcGxlc1Byb2R1Y2VyKENvcmVBdWRpb1NwZWFrZXJTYW1wbGVzUHJvZHVjZXIm
KTsKLSAgICB2b2lkIHVucmVnaXN0ZXJTcGVha2VyU2FtcGxlc1Byb2R1Y2VyKENvcmVBdWRpb1Nw
ZWFrZXJTYW1wbGVzUHJvZHVjZXImKTsKLSAgICBib29sIGlzUnVubmluZygpIGNvbnN0IHsgcmV0
dXJuIG1faW9Vbml0U3RhcnRlZDsgfQotCi1wcml2YXRlOgotICAgIHN0YXRpYyBzaXplX3QgcHJl
ZmVycmVkSU9CdWZmZXJTaXplKCk7Ci0KLSAgICBDYXBhYmlsaXR5VmFsdWVPclJhbmdlIHNhbXBs
ZVJhdGVDYXBhY2l0aWVzKCkgY29uc3QgZmluYWwgeyByZXR1cm4gQ2FwYWJpbGl0eVZhbHVlT3JS
YW5nZSg4MDAwLCA5NjAwMCk7IH0KLSAgICBjb25zdCBDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24m
IG1pY3JvcGhvbmVGb3JtYXQoKSBjb25zdCB7IHJldHVybiBtX21pY3JvcGhvbmVQcm9jRm9ybWF0
OyB9Ci0KLSAgICBib29sIGhhc0F1ZGlvVW5pdCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1faW9V
bml0OyB9Ci0gICAgdm9pZCBjYXB0dXJlRGV2aWNlQ2hhbmdlZCgpIGZpbmFsOwotICAgIE9TU3Rh
dHVzIHJlY29uZmlndXJlQXVkaW9Vbml0KCkgZmluYWw7Ci0KLSAgICBPU1N0YXR1cyBzZXR1cEF1
ZGlvVW5pdCgpOwotICAgIHZvaWQgY2xlYW51cEF1ZGlvVW5pdCgpIGZpbmFsOwotCi0gICAgT1NT
dGF0dXMgc3RhcnRJbnRlcm5hbCgpIGZpbmFsOwotICAgIHZvaWQgc3RvcEludGVybmFsKCkgZmlu
YWw7Ci0gICAgYm9vbCBpc1Byb2R1Y2luZ0RhdGEoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2lv
VW5pdFN0YXJ0ZWQ7IH0KLSAgICB2b2lkIGlzUHJvZHVjaW5nTWljcm9waG9uZVNhbXBsZXNDaGFu
Z2VkKCkgZmluYWw7Ci0gICAgdm9pZCB2YWxpZGF0ZU91dHB1dERldmljZSh1aW50MzJfdCBkZXZp
Y2VJRCkgZmluYWw7Ci0gICAgaW50IGFjdHVhbFNhbXBsZVJhdGUoKSBjb25zdCBmaW5hbDsKLQot
ICAgIE9TU3RhdHVzIGNvbmZpZ3VyZVNwZWFrZXJQcm9jKGludCBzYW1wbGVSYXRlKTsKLSAgICBP
U1N0YXR1cyBjb25maWd1cmVNaWNyb3Bob25lUHJvYyhpbnQgc2FtcGxlUmF0ZSk7Ci0gICAgT1NT
dGF0dXMgZGVmYXVsdE91dHB1dERldmljZSh1aW50MzJfdCopOwotICAgIE9TU3RhdHVzIGRlZmF1
bHRJbnB1dERldmljZSh1aW50MzJfdCopOwotCi0gICAgc3RhdGljIE9TU3RhdHVzIG1pY3JvcGhv
bmVDYWxsYmFjayh2b2lkKiwgQXVkaW9Vbml0UmVuZGVyQWN0aW9uRmxhZ3MqLCBjb25zdCBBdWRp
b1RpbWVTdGFtcCosIFVJbnQzMiwgVUludDMyLCBBdWRpb0J1ZmZlckxpc3QqKTsKLSAgICBPU1N0
YXR1cyBwcm9jZXNzTWljcm9waG9uZVNhbXBsZXMoQXVkaW9Vbml0UmVuZGVyQWN0aW9uRmxhZ3Mm
LCBjb25zdCBBdWRpb1RpbWVTdGFtcCYsIFVJbnQzMiwgVUludDMyLCBBdWRpb0J1ZmZlckxpc3Qq
KTsKLQotICAgIHN0YXRpYyBPU1N0YXR1cyBzcGVha2VyQ2FsbGJhY2sodm9pZCosIEF1ZGlvVW5p
dFJlbmRlckFjdGlvbkZsYWdzKiwgY29uc3QgQXVkaW9UaW1lU3RhbXAqLCBVSW50MzIsIFVJbnQz
MiwgQXVkaW9CdWZmZXJMaXN0Kik7Ci0gICAgT1NTdGF0dXMgcHJvdmlkZVNwZWFrZXJEYXRhKEF1
ZGlvVW5pdFJlbmRlckFjdGlvbkZsYWdzJiwgY29uc3QgQXVkaW9UaW1lU3RhbXAmLCBVSW50MzIs
IFVJbnQzMiwgQXVkaW9CdWZmZXJMaXN0Jik7Ci0KLSAgICB2b2lkIHVuZHVjaygpOwotCi0gICAg
dm9pZCB2ZXJpZnlJc0NhcHR1cmluZygpOwotCi0gICAgU2Vjb25kcyB2ZXJpZnlDYXB0dXJlSW50
ZXJ2YWwoKSB7IHJldHVybiBpc1Byb2R1Y2luZ01pY3JvcGhvbmVTYW1wbGVzKCkgPyAxMF9zIDog
Ml9zOyB9Ci0KLSAgICBBdWRpb1VuaXQgbV9pb1VuaXQgeyBudWxscHRyIH07Ci0KLSAgICAvLyBP
bmx5IHJlYWQvbW9kaWZpZWQgZnJvbSB0aGUgSU8gdGhyZWFkLgotICAgIFZlY3RvcjxSZWY8QXVk
aW9TYW1wbGVEYXRhU291cmNlPj4gbV9hY3RpdmVTb3VyY2VzOwotCi0gICAgQ0FBdWRpb1N0cmVh
bURlc2NyaXB0aW9uIG1fbWljcm9waG9uZVByb2NGb3JtYXQ7Ci0gICAgUmVmUHRyPEF1ZGlvU2Ft
cGxlQnVmZmVyTGlzdD4gbV9taWNyb3Bob25lU2FtcGxlQnVmZmVyOwotICAgIHVpbnQ2NF90IG1f
bGF0ZXN0TWljVGltZVN0YW1wIHsgMCB9OwotCi0gICAgQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9u
IG1fc3BlYWtlclByb2NGb3JtYXQ7Ci0KLSAgICBkb3VibGUgbV9EVFNDb252ZXJzaW9uUmF0aW8g
eyAwIH07Ci0KLSAgICBib29sIG1faW9Vbml0SW5pdGlhbGl6ZWQgeyBmYWxzZSB9OwotICAgIGJv
b2wgbV9pb1VuaXRTdGFydGVkIHsgZmFsc2UgfTsKLQotICAgIG11dGFibGUgc3RkOjp1bmlxdWVf
cHRyPFJlYWx0aW1lTWVkaWFTb3VyY2VDYXBhYmlsaXRpZXM+IG1fY2FwYWJpbGl0aWVzOwotICAg
IG11dGFibGUgc3RkOjpvcHRpb25hbDxSZWFsdGltZU1lZGlhU291cmNlU2V0dGluZ3M+IG1fY3Vy
cmVudFNldHRpbmdzOwotCi0jaWYgIUxPR19ESVNBQkxFRAotICAgIHZvaWQgY2hlY2tUaW1lc3Rh
bXBzKGNvbnN0IEF1ZGlvVGltZVN0YW1wJiwgdWludDY0X3QsIGRvdWJsZSk7Ci0KLSAgICBTdHJp
bmcgbV9pb1VuaXROYW1lOwotI2VuZGlmCi0KLSAgICB1aW50NjRfdCBtX21pY3JvcGhvbmVQcm9j
c0NhbGxlZCB7IDAgfTsKLSAgICB1aW50NjRfdCBtX21pY3JvcGhvbmVQcm9jc0NhbGxlZExhc3RU
aW1lIHsgMCB9OwotICAgIFRpbWVyIG1fdmVyaWZ5Q2FwdHVyaW5nVGltZXI7Ci0KLSAgICBib29s
IG1faXNSZWNvbmZpZ3VyaW5nIHsgZmFsc2UgfTsKLSAgICBtdXRhYmxlIExvY2sgbV9zcGVha2Vy
U2FtcGxlc1Byb2R1Y2VyTG9jazsKLSAgICBDb3JlQXVkaW9TcGVha2VyU2FtcGxlc1Byb2R1Y2Vy
KiBtX3NwZWFrZXJTYW1wbGVzUHJvZHVjZXIgV1RGX0dVQVJERURfQllfTE9DSyhtX3NwZWFrZXJT
YW1wbGVzUHJvZHVjZXJMb2NrKSB7IG51bGxwdHIgfTsKLX07Ci0KLUNvcmVBdWRpb1NoYXJlZFVu
aXQmIENvcmVBdWRpb1NoYXJlZFVuaXQ6OnVuaXQoKQotewotICAgIHN0YXRpYyBOZXZlckRlc3Ry
b3llZDxDb3JlQXVkaW9TaGFyZWRVbml0PiBzaW5nbGV0b247Ci0gICAgcmV0dXJuIHNpbmdsZXRv
bjsKLX0KLQotQ29yZUF1ZGlvU2hhcmVkVW5pdDo6Q29yZUF1ZGlvU2hhcmVkVW5pdCgpCi0gICAg
OiBtX3ZlcmlmeUNhcHR1cmluZ1RpbWVyKCp0aGlzLCAmQ29yZUF1ZGlvU2hhcmVkVW5pdDo6dmVy
aWZ5SXNDYXB0dXJpbmcpCi17Ci19Ci0KLXZvaWQgQ29yZUF1ZGlvU2hhcmVkVW5pdDo6Y2FwdHVy
ZURldmljZUNoYW5nZWQoKQotewotI2lmIFBMQVRGT1JNKE1BQykKLSAgICByZWNvbmZpZ3VyZUF1
ZGlvVW5pdCgpOwotI2Vsc2UKLSAgICBBVkF1ZGlvU2Vzc2lvbkNhcHR1cmVEZXZpY2VNYW5hZ2Vy
OjpzaW5nbGV0b24oKS5zZXRQcmVmZXJyZWRBdWRpb1Nlc3Npb25EZXZpY2VVSUQocGVyc2lzdGVu
dElEKCkpOwotI2VuZGlmCi19Ci0KLXNpemVfdCBDb3JlQXVkaW9TaGFyZWRVbml0OjpwcmVmZXJy
ZWRJT0J1ZmZlclNpemUoKQotewotICAgIHJldHVybiBBdWRpb1Nlc3Npb246OnNoYXJlZFNlc3Np
b24oKS5idWZmZXJTaXplKCk7Ci19Ci0KLU9TU3RhdHVzIENvcmVBdWRpb1NoYXJlZFVuaXQ6OnNl
dHVwQXVkaW9Vbml0KCkKLXsKLSAgICBpZiAobV9pb1VuaXQpCi0gICAgICAgIHJldHVybiAwOwot
Ci0gICAgQVNTRVJUKGhhc0NsaWVudHMoKSk7Ci0KLSAgICBtYWNoX3RpbWViYXNlX2luZm9fZGF0
YV90IHRpbWViYXNlSW5mbzsKLSAgICBtYWNoX3RpbWViYXNlX2luZm8oJnRpbWViYXNlSW5mbyk7
Ci0gICAgbV9EVFNDb252ZXJzaW9uUmF0aW8gPSAxZS05ICogc3RhdGljX2Nhc3Q8ZG91YmxlPih0
aW1lYmFzZUluZm8ubnVtZXIpIC8gc3RhdGljX2Nhc3Q8ZG91YmxlPih0aW1lYmFzZUluZm8uZGVu
b20pOwotCi0gICAgQXVkaW9Db21wb25lbnREZXNjcmlwdGlvbiBpb1VuaXREZXNjcmlwdGlvbiA9
IHsga0F1ZGlvVW5pdFR5cGVfT3V0cHV0LCBrQXVkaW9Vbml0U3ViVHlwZV9Wb2ljZVByb2Nlc3Np
bmdJTywga0F1ZGlvVW5pdE1hbnVmYWN0dXJlcl9BcHBsZSwgMCwgMCB9OwotICAgIEF1ZGlvQ29t
cG9uZW50IGlvQ29tcG9uZW50ID0gUEFMOjpBdWRpb0NvbXBvbmVudEZpbmROZXh0KG51bGxwdHIs
ICZpb1VuaXREZXNjcmlwdGlvbik7Ci0gICAgQVNTRVJUKGlvQ29tcG9uZW50KTsKLSAgICBpZiAo
IWlvQ29tcG9uZW50KSB7Ci0gICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFdlYlJUQywgIkNvcmVB
dWRpb1NoYXJlZFVuaXQ6OnNldHVwQXVkaW9Vbml0KCVwKSB1bmFibGUgdG8gZmluZCB2cGlvIHVu
aXQgY29tcG9uZW50IiwgdGhpcyk7Ci0gICAgICAgIHJldHVybiAtMTsKLSAgICB9Ci0KLSNpZiAh
TE9HX0RJU0FCTEVECi0gICAgQ0ZTdHJpbmdSZWYgbmFtZSA9IG51bGxwdHI7Ci0gICAgUEFMOjpB
dWRpb0NvbXBvbmVudENvcHlOYW1lKGlvQ29tcG9uZW50LCAmbmFtZSk7Ci0gICAgaWYgKG5hbWUp
IHsKLSAgICAgICAgbV9pb1VuaXROYW1lID0gbmFtZTsKLSAgICAgICAgQ0ZSZWxlYXNlKG5hbWUp
OwotICAgICAgICBSRUxFQVNFX0xPRyhXZWJSVEMsICJDb3JlQXVkaW9TaGFyZWRVbml0OjpzZXR1
cEF1ZGlvVW5pdCglcCkgY3JlYXRlZCBcIiVzXCIgY29tcG9uZW50IiwgdGhpcywgbV9pb1VuaXRO
YW1lLnV0ZjgoKS5kYXRhKCkpOwotICAgIH0KLSNlbmRpZgotCi0gICAgYXV0byBlcnIgPSBQQUw6
OkF1ZGlvQ29tcG9uZW50SW5zdGFuY2VOZXcoaW9Db21wb25lbnQsICZtX2lvVW5pdCk7Ci0gICAg
aWYgKGVycikgewotICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihXZWJSVEMsICJDb3JlQXVkaW9T
aGFyZWRVbml0OjpzZXR1cEF1ZGlvVW5pdCglcCkgdW5hYmxlIHRvIG9wZW4gdnBpbyB1bml0LCBl
cnJvciAlZCAoJS40cykiLCB0aGlzLCAoaW50KWVyciwgKGNoYXIqKSZlcnIpOwotICAgICAgICBy
ZXR1cm4gZXJyOwotICAgIH0KLQotICAgIGlmICghZW5hYmxlRWNob0NhbmNlbGxhdGlvbigpKSB7
Ci0gICAgICAgIHVpbnQzMl90IHBhcmFtID0gMDsKLSAgICAgICAgZXJyID0gUEFMOjpBdWRpb1Vu
aXRTZXRQcm9wZXJ0eShtX2lvVW5pdCwga0FVVm9pY2VJT1Byb3BlcnR5X1ZvaWNlUHJvY2Vzc2lu
Z0VuYWJsZUFHQywga0F1ZGlvVW5pdFNjb3BlX0dsb2JhbCwgaW5wdXRCdXMsICZwYXJhbSwgc2l6
ZW9mKHBhcmFtKSk7Ci0gICAgICAgIGlmIChlcnIpIHsKLSAgICAgICAgICAgIFJFTEVBU0VfTE9H
X0VSUk9SKFdlYlJUQywgIkNvcmVBdWRpb1NoYXJlZFVuaXQ6OnNldHVwQXVkaW9Vbml0KCVwKSB1
bmFibGUgdG8gc2V0IHZwaW8gYXV0b21hdGljIGdhaW4gY29udHJvbCwgZXJyb3IgJWQgKCUuNHMp
IiwgdGhpcywgKGludCllcnIsIChjaGFyKikmZXJyKTsKLSAgICAgICAgICAgIHJldHVybiBlcnI7
Ci0gICAgICAgIH0KLSAgICAgICAgcGFyYW0gPSAxOwotICAgICAgICBlcnIgPSBQQUw6OkF1ZGlv
VW5pdFNldFByb3BlcnR5KG1faW9Vbml0LCBrQVVWb2ljZUlPUHJvcGVydHlfQnlwYXNzVm9pY2VQ
cm9jZXNzaW5nLCBrQXVkaW9Vbml0U2NvcGVfR2xvYmFsLCBpbnB1dEJ1cywgJnBhcmFtLCBzaXpl
b2YocGFyYW0pKTsKLSAgICAgICAgaWYgKGVycikgewotICAgICAgICAgICAgUkVMRUFTRV9MT0df
RVJST1IoV2ViUlRDLCAiQ29yZUF1ZGlvU2hhcmVkVW5pdDo6c2V0dXBBdWRpb1VuaXQoJXApIHVu
YWJsZSB0byBzZXQgdnBpbyB1bml0IGVjaG8gY2FuY2VsbGF0aW9uLCBlcnJvciAlZCAoJS40cyki
LCB0aGlzLCAoaW50KWVyciwgKGNoYXIqKSZlcnIpOwotICAgICAgICAgICAgcmV0dXJuIGVycjsK
LSAgICAgICAgfQotICAgIH0KLQotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgdWludDMy
X3QgcGFyYW0gPSAxOwotICAgIGVyciA9IFBBTDo6QXVkaW9Vbml0U2V0UHJvcGVydHkobV9pb1Vu
aXQsIGtBdWRpb091dHB1dFVuaXRQcm9wZXJ0eV9FbmFibGVJTywga0F1ZGlvVW5pdFNjb3BlX0lu
cHV0LCBpbnB1dEJ1cywgJnBhcmFtLCBzaXplb2YocGFyYW0pKTsKLSAgICBpZiAoZXJyKSB7Ci0g
ICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFdlYlJUQywgIkNvcmVBdWRpb1NoYXJlZFVuaXQ6OnNl
dHVwQXVkaW9Vbml0KCVwKSB1bmFibGUgdG8gZW5hYmxlIHZwaW8gdW5pdCBpbnB1dCwgZXJyb3Ig
JWQgKCUuNHMpIiwgdGhpcywgKGludCllcnIsIChjaGFyKikmZXJyKTsKLSAgICAgICAgcmV0dXJu
IGVycjsKLSAgICB9Ci0jZWxzZQotICAgIGF1dG8gZGV2aWNlSUQgPSBjYXB0dXJlRGV2aWNlSUQo
KTsKLSAgICBpZiAoIWRldmljZUlEKSB7Ci0gICAgICAgIGVyciA9IGRlZmF1bHRJbnB1dERldmlj
ZSgmZGV2aWNlSUQpOwotICAgICAgICBpZiAoZXJyKQotICAgICAgICAgICAgcmV0dXJuIGVycjsK
LSAgICB9Ci0KLSAgICBlcnIgPSBQQUw6OkF1ZGlvVW5pdFNldFByb3BlcnR5KG1faW9Vbml0LCBr
QXVkaW9PdXRwdXRVbml0UHJvcGVydHlfQ3VycmVudERldmljZSwga0F1ZGlvVW5pdFNjb3BlX0ds
b2JhbCwgaW5wdXRCdXMsICZkZXZpY2VJRCwgc2l6ZW9mKGRldmljZUlEKSk7Ci0gICAgaWYgKGVy
cikgewotICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihXZWJSVEMsICJDb3JlQXVkaW9TaGFyZWRV
bml0OjpzZXR1cEF1ZGlvVW5pdCglcCkgdW5hYmxlIHRvIHNldCB2cGlvIHVuaXQgY2FwdHVyZSBk
ZXZpY2UgSUQgJWQsIGVycm9yICVkICglLjRzKSIsIHRoaXMsIChpbnQpZGV2aWNlSUQsIChpbnQp
ZXJyLCAoY2hhciopJmVycik7Ci0gICAgICAgIHJldHVybiBlcnI7Ci0gICAgfQotCi0gICAgdWlu
dDMyX3QgZGVmYXVsdE91dHB1dERldmljZUlEOwotICAgIGVyciA9IGRlZmF1bHRPdXRwdXREZXZp
Y2UoJmRlZmF1bHRPdXRwdXREZXZpY2VJRCk7Ci0gICAgaWYgKCFlcnIpIHsKLSAgICAgICAgZXJy
ID0gUEFMOjpBdWRpb1VuaXRTZXRQcm9wZXJ0eShtX2lvVW5pdCwga0F1ZGlvT3V0cHV0VW5pdFBy
b3BlcnR5X0N1cnJlbnREZXZpY2UsIGtBdWRpb1VuaXRTY29wZV9HbG9iYWwsIG91dHB1dEJ1cywg
JmRlZmF1bHRPdXRwdXREZXZpY2VJRCwgc2l6ZW9mKGRlZmF1bHRPdXRwdXREZXZpY2VJRCkpOwot
ICAgICAgICBSRUxFQVNFX0xPR19FUlJPUl9JRihlcnIsIFdlYlJUQywgIkNvcmVBdWRpb1NoYXJl
ZFVuaXQ6OnNldHVwQXVkaW9Vbml0KCVwKSB1bmFibGUgdG8gc2V0IHZwaW8gdW5pdCBvdXRwdXQg
ZGV2aWNlIElEICVkLCBlcnJvciAlZCAoJS40cykiLCB0aGlzLCAoaW50KWRlZmF1bHRPdXRwdXRE
ZXZpY2VJRCwgKGludCllcnIsIChjaGFyKikmZXJyKTsKLSAgICB9Ci0gICAgc2V0T3V0cHV0RGV2
aWNlSUQoIWVyciA/IGRlZmF1bHRPdXRwdXREZXZpY2VJRCA6IDApOwotI2VuZGlmCi0KLSAgICAv
LyBGSVhNRTogQWRkIHN1cHBvcnQgZm9yIGRpZmZlcmVudCBzcGVha2VyL21pY3JvcGhvbmUgc2Ft
cGxlIHJhdGVzLgotICAgIGludCBhY3R1YWxTYW1wbGVSYXRlID0gdGhpcy0+YWN0dWFsU2FtcGxl
UmF0ZSgpOwotICAgIGVyciA9IGNvbmZpZ3VyZU1pY3JvcGhvbmVQcm9jKGFjdHVhbFNhbXBsZVJh
dGUpOwotICAgIGlmIChlcnIpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLSAgICBlcnIgPSBjb25m
aWd1cmVTcGVha2VyUHJvYyhhY3R1YWxTYW1wbGVSYXRlKTsKLSAgICBpZiAoZXJyKQotICAgICAg
ICByZXR1cm4gZXJyOwotCi0gICAgZXJyID0gUEFMOjpBdWRpb1VuaXRJbml0aWFsaXplKG1faW9V
bml0KTsKLSAgICBpZiAoZXJyKSB7Ci0gICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFdlYlJUQywg
IkNvcmVBdWRpb1NoYXJlZFVuaXQ6OnNldHVwQXVkaW9Vbml0KCVwKSBBdWRpb1VuaXRJbml0aWFs
aXplKCkgZmFpbGVkLCBlcnJvciAlZCAoJS40cykiLCB0aGlzLCAoaW50KWVyciwgKGNoYXIqKSZl
cnIpOwotICAgICAgICByZXR1cm4gZXJyOwotICAgIH0KLSAgICBtX2lvVW5pdEluaXRpYWxpemVk
ID0gdHJ1ZTsKLQotICAgIHVuZHVjaygpOwotCi0gICAgcmV0dXJuIGVycjsKLX0KLQotdm9pZCBD
b3JlQXVkaW9TaGFyZWRVbml0Ojp1bmR1Y2soKQotewotICAgIHVpbnQzMl90IG91dHB1dERldmlj
ZTsKLSAgICBpZiAoIWRlZmF1bHRPdXRwdXREZXZpY2UoJm91dHB1dERldmljZSkpCi0gICAgICAg
IEF1ZGlvRGV2aWNlRHVjayhvdXRwdXREZXZpY2UsIDEuMCwgbnVsbHB0ciwgMCk7Ci19Ci0KLWlu
dCBDb3JlQXVkaW9TaGFyZWRVbml0OjphY3R1YWxTYW1wbGVSYXRlKCkgY29uc3QKLXsKLSAgICBM
b2NrZXIgbG9ja2VyIHsgbV9zcGVha2VyU2FtcGxlc1Byb2R1Y2VyTG9jayB9OwotICAgIHJldHVy
biBtX3NwZWFrZXJTYW1wbGVzUHJvZHVjZXIgPyBtX3NwZWFrZXJTYW1wbGVzUHJvZHVjZXItPmZv
cm1hdCgpLnN0cmVhbURlc2NyaXB0aW9uKCkubVNhbXBsZVJhdGUgOiBzYW1wbGVSYXRlKCk7Ci19
Ci0KLU9TU3RhdHVzIENvcmVBdWRpb1NoYXJlZFVuaXQ6OmNvbmZpZ3VyZU1pY3JvcGhvbmVQcm9j
KGludCBzYW1wbGVSYXRlKQotewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0KLSAgICBB
VVJlbmRlckNhbGxiYWNrU3RydWN0IGNhbGxiYWNrID0geyBtaWNyb3Bob25lQ2FsbGJhY2ssIHRo
aXMgfTsKLSAgICBhdXRvIGVyciA9IFBBTDo6QXVkaW9Vbml0U2V0UHJvcGVydHkobV9pb1VuaXQs
IGtBdWRpb091dHB1dFVuaXRQcm9wZXJ0eV9TZXRJbnB1dENhbGxiYWNrLCBrQXVkaW9Vbml0U2Nv
cGVfR2xvYmFsLCBpbnB1dEJ1cywgJmNhbGxiYWNrLCBzaXplb2YoY2FsbGJhY2spKTsKLSAgICBp
ZiAoZXJyKSB7Ci0gICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFdlYlJUQywgIkNvcmVBdWRpb1No
YXJlZFVuaXQ6OmNvbmZpZ3VyZU1pY3JvcGhvbmVQcm9jKCVwKSB1bmFibGUgdG8gc2V0IHZwaW8g
dW5pdCBtaWMgcHJvYywgZXJyb3IgJWQgKCUuNHMpIiwgdGhpcywgKGludCllcnIsIChjaGFyKikm
ZXJyKTsKLSAgICAgICAgcmV0dXJuIGVycjsKLSAgICB9Ci0KLSAgICBBdWRpb1N0cmVhbUJhc2lj
RGVzY3JpcHRpb24gbWljcm9waG9uZVByb2NGb3JtYXQgPSB7IH07Ci0KLSAgICBVSW50MzIgc2l6
ZSA9IHNpemVvZihtaWNyb3Bob25lUHJvY0Zvcm1hdCk7Ci0gICAgZXJyID0gUEFMOjpBdWRpb1Vu
aXRHZXRQcm9wZXJ0eShtX2lvVW5pdCwga0F1ZGlvVW5pdFByb3BlcnR5X1N0cmVhbUZvcm1hdCwg
a0F1ZGlvVW5pdFNjb3BlX091dHB1dCwgaW5wdXRCdXMsICZtaWNyb3Bob25lUHJvY0Zvcm1hdCwg
JnNpemUpOwotICAgIGlmIChlcnIpIHsKLSAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoV2ViUlRD
LCAiQ29yZUF1ZGlvU2hhcmVkVW5pdDo6Y29uZmlndXJlTWljcm9waG9uZVByb2MoJXApIHVuYWJs
ZSB0byBnZXQgb3V0cHV0IHN0cmVhbSBmb3JtYXQsIGVycm9yICVkICglLjRzKSIsIHRoaXMsIChp
bnQpZXJyLCAoY2hhciopJmVycik7Ci0gICAgICAgIHJldHVybiBlcnI7Ci0gICAgfQotCi0gICAg
bWljcm9waG9uZVByb2NGb3JtYXQubVNhbXBsZVJhdGUgPSBzYW1wbGVSYXRlOwotICAgIGVyciA9
IFBBTDo6QXVkaW9Vbml0U2V0UHJvcGVydHkobV9pb1VuaXQsIGtBdWRpb1VuaXRQcm9wZXJ0eV9T
dHJlYW1Gb3JtYXQsIGtBdWRpb1VuaXRTY29wZV9PdXRwdXQsIGlucHV0QnVzLCAmbWljcm9waG9u
ZVByb2NGb3JtYXQsIHNpemUpOwotICAgIGlmIChlcnIpIHsKLSAgICAgICAgUkVMRUFTRV9MT0df
RVJST1IoV2ViUlRDLCAiQ29yZUF1ZGlvU2hhcmVkVW5pdDo6Y29uZmlndXJlTWljcm9waG9uZVBy
b2MoJXApIHVuYWJsZSB0byBzZXQgb3V0cHV0IHN0cmVhbSBmb3JtYXQsIGVycm9yICVkICglLjRz
KSIsIHRoaXMsIChpbnQpZXJyLCAoY2hhciopJmVycik7Ci0gICAgICAgIHJldHVybiBlcnI7Ci0g
ICAgfQotCi0gICAgbV9taWNyb3Bob25lU2FtcGxlQnVmZmVyID0gQXVkaW9TYW1wbGVCdWZmZXJM
aXN0OjpjcmVhdGUobWljcm9waG9uZVByb2NGb3JtYXQsIHByZWZlcnJlZElPQnVmZmVyU2l6ZSgp
ICogMik7Ci0gICAgbV9taWNyb3Bob25lUHJvY0Zvcm1hdCA9IG1pY3JvcGhvbmVQcm9jRm9ybWF0
OwotCi0gICAgcmV0dXJuIGVycjsKLX0KLQotT1NTdGF0dXMgQ29yZUF1ZGlvU2hhcmVkVW5pdDo6
Y29uZmlndXJlU3BlYWtlclByb2MoaW50IHNhbXBsZVJhdGUpCi17Ci0gICAgQVNTRVJUKGlzTWFp
blRocmVhZCgpKTsKLQotICAgIEFVUmVuZGVyQ2FsbGJhY2tTdHJ1Y3QgY2FsbGJhY2sgPSB7IHNw
ZWFrZXJDYWxsYmFjaywgdGhpcyB9OwotICAgIGF1dG8gZXJyID0gUEFMOjpBdWRpb1VuaXRTZXRQ
cm9wZXJ0eShtX2lvVW5pdCwga0F1ZGlvVW5pdFByb3BlcnR5X1NldFJlbmRlckNhbGxiYWNrLCBr
QXVkaW9Vbml0U2NvcGVfSW5wdXQsIG91dHB1dEJ1cywgJmNhbGxiYWNrLCBzaXplb2YoY2FsbGJh
Y2spKTsKLSAgICBpZiAoZXJyKSB7Ci0gICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFdlYlJUQywg
IkNvcmVBdWRpb1NoYXJlZFVuaXQ6OmNvbmZpZ3VyZVNwZWFrZXJQcm9jKCVwKSB1bmFibGUgdG8g
c2V0IHZwaW8gdW5pdCBzcGVha2VyIHByb2MsIGVycm9yICVkICglLjRzKSIsIHRoaXMsIChpbnQp
ZXJyLCAoY2hhciopJmVycik7Ci0gICAgICAgIHJldHVybiBlcnI7Ci0gICAgfQotCi0gICAgQXVk
aW9TdHJlYW1CYXNpY0Rlc2NyaXB0aW9uIHNwZWFrZXJQcm9jRm9ybWF0OwotICAgIFVJbnQzMiBz
aXplID0gc2l6ZW9mKHNwZWFrZXJQcm9jRm9ybWF0KTsKLSAgICB7Ci0gICAgICAgIExvY2tlciBs
b2NrZXIgeyBtX3NwZWFrZXJTYW1wbGVzUHJvZHVjZXJMb2NrIH07Ci0gICAgICAgIGlmIChtX3Nw
ZWFrZXJTYW1wbGVzUHJvZHVjZXIpIHsKLSAgICAgICAgICAgIHNwZWFrZXJQcm9jRm9ybWF0ID0g
bV9zcGVha2VyU2FtcGxlc1Byb2R1Y2VyLT5mb3JtYXQoKS5zdHJlYW1EZXNjcmlwdGlvbigpOwot
ICAgICAgICAgICAgQVNTRVJUKHNwZWFrZXJQcm9jRm9ybWF0Lm1TYW1wbGVSYXRlID09IHNhbXBs
ZVJhdGUpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgZXJyID0gUEFMOjpBdWRpb1Vu
aXRHZXRQcm9wZXJ0eShtX2lvVW5pdCwga0F1ZGlvVW5pdFByb3BlcnR5X1N0cmVhbUZvcm1hdCwg
a0F1ZGlvVW5pdFNjb3BlX0lucHV0LCBvdXRwdXRCdXMsICZzcGVha2VyUHJvY0Zvcm1hdCwgJnNp
emUpOwotICAgICAgICAgICAgaWYgKGVycikgewotICAgICAgICAgICAgICAgIFJFTEVBU0VfTE9H
X0VSUk9SKFdlYlJUQywgIkNvcmVBdWRpb1NoYXJlZFVuaXQ6OmNvbmZpZ3VyZVNwZWFrZXJQcm9j
KCVwKSB1bmFibGUgdG8gZ2V0IGlucHV0IHN0cmVhbSBmb3JtYXQsIGVycm9yICVkICglLjRzKSIs
IHRoaXMsIChpbnQpZXJyLCAoY2hhciopJmVycik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVy
cjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBzcGVha2VyUHJvY0Zvcm1h
dC5tU2FtcGxlUmF0ZSA9IHNhbXBsZVJhdGU7Ci0KLSAgICBlcnIgPSBQQUw6OkF1ZGlvVW5pdFNl
dFByb3BlcnR5KG1faW9Vbml0LCBrQXVkaW9Vbml0UHJvcGVydHlfU3RyZWFtRm9ybWF0LCBrQXVk
aW9Vbml0U2NvcGVfSW5wdXQsIG91dHB1dEJ1cywgJnNwZWFrZXJQcm9jRm9ybWF0LCBzaXplKTsK
LSAgICBpZiAoZXJyKSB7Ci0gICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFdlYlJUQywgIkNvcmVB
dWRpb1NoYXJlZFVuaXQ6OmNvbmZpZ3VyZVNwZWFrZXJQcm9jKCVwKSB1bmFibGUgdG8gZ2V0IGlu
cHV0IHN0cmVhbSBmb3JtYXQsIGVycm9yICVkICglLjRzKSIsIHRoaXMsIChpbnQpZXJyLCAoY2hh
ciopJmVycik7Ci0gICAgICAgIHJldHVybiBlcnI7Ci0gICAgfQotCi0gICAgbV9zcGVha2VyUHJv
Y0Zvcm1hdCA9IHNwZWFrZXJQcm9jRm9ybWF0OwotCi0gICAgcmV0dXJuIGVycjsKLX0KLQotI2lm
ICFMT0dfRElTQUJMRUQKLXZvaWQgQ29yZUF1ZGlvU2hhcmVkVW5pdDo6Y2hlY2tUaW1lc3RhbXBz
KGNvbnN0IEF1ZGlvVGltZVN0YW1wJiB0aW1lU3RhbXAsIHVpbnQ2NF90IHNhbXBsZVRpbWUsIGRv
dWJsZSBob3N0VGltZSkKLXsKLSAgICBpZiAoIXRpbWVTdGFtcC5tU2FtcGxlVGltZSB8fCBzYW1w
bGVUaW1lID09IG1fbGF0ZXN0TWljVGltZVN0YW1wIHx8ICFob3N0VGltZSkKLSAgICAgICAgUkVM
RUFTRV9MT0dfRVJST1IoV2ViUlRDLCAiQ29yZUF1ZGlvU2hhcmVkVW5pdDo6Y2hlY2tUaW1lc3Rh
bXBzOiB1bnVzdWFsIHRpbWVzdGFtcHMsIHNhbXBsZSB0aW1lID0gJWxsZCwgcHJldmlvdXMgc2Ft
cGxlIHRpbWUgPSAlbGxkLCBob3N0VGltZSAlZiIsIHNhbXBsZVRpbWUsIG1fbGF0ZXN0TWljVGlt
ZVN0YW1wLCBob3N0VGltZSk7Ci19Ci0jZW5kaWYKLQotT1NTdGF0dXMgQ29yZUF1ZGlvU2hhcmVk
VW5pdDo6cHJvdmlkZVNwZWFrZXJEYXRhKEF1ZGlvVW5pdFJlbmRlckFjdGlvbkZsYWdzJiBmbGFn
cywgY29uc3QgQXVkaW9UaW1lU3RhbXAmIHRpbWVTdGFtcCwgVUludDMyIC8qaW5CdXNOdW1iZXIq
LywgVUludDMyIGluTnVtYmVyRnJhbWVzLCBBdWRpb0J1ZmZlckxpc3QmIGlvRGF0YSkKLXsKLSAg
ICBpZiAobV9pc1JlY29uZmlndXJpbmcgfHwgIW1fc3BlYWtlclNhbXBsZXNQcm9kdWNlckxvY2su
dHJ5TG9jaygpKSB7Ci0gICAgICAgIEF1ZGlvU2FtcGxlQnVmZmVyTGlzdDo6emVyb0FCTChpb0Rh
dGEsIHN0YXRpY19jYXN0PHNpemVfdD4oaW5OdW1iZXJGcmFtZXMgKiBtX3NwZWFrZXJQcm9jRm9y
bWF0LmJ5dGVzUGVyRnJhbWUoKSkpOwotICAgICAgICBmbGFncyA9IGtBdWRpb1VuaXRSZW5kZXJB
Y3Rpb25fT3V0cHV0SXNTaWxlbmNlOwotICAgICAgICByZXR1cm4gbm9FcnI7Ci0gICAgfQotCi0g
ICAgTG9ja2VyIGxvY2tlciB7IEFkb3B0TG9jaywgbV9zcGVha2VyU2FtcGxlc1Byb2R1Y2VyTG9j
ayB9OwotICAgIGlmICghbV9zcGVha2VyU2FtcGxlc1Byb2R1Y2VyKSB7Ci0gICAgICAgIEF1ZGlv
U2FtcGxlQnVmZmVyTGlzdDo6emVyb0FCTChpb0RhdGEsIHN0YXRpY19jYXN0PHNpemVfdD4oaW5O
dW1iZXJGcmFtZXMgKiBtX3NwZWFrZXJQcm9jRm9ybWF0LmJ5dGVzUGVyRnJhbWUoKSkpOwotICAg
ICAgICBmbGFncyA9IGtBdWRpb1VuaXRSZW5kZXJBY3Rpb25fT3V0cHV0SXNTaWxlbmNlOwotICAg
ICAgICByZXR1cm4gbm9FcnI7Ci0gICAgfQotICAgIHJldHVybiBtX3NwZWFrZXJTYW1wbGVzUHJv
ZHVjZXItPnByb2R1Y2VTcGVha2VyU2FtcGxlcyhpbk51bWJlckZyYW1lcywgaW9EYXRhLCB0aW1l
U3RhbXAubVNhbXBsZVRpbWUsIHRpbWVTdGFtcC5tSG9zdFRpbWUsIGZsYWdzKTsKLX0KLQotT1NT
dGF0dXMgQ29yZUF1ZGlvU2hhcmVkVW5pdDo6c3BlYWtlckNhbGxiYWNrKHZvaWQgKmluUmVmQ29u
LCBBdWRpb1VuaXRSZW5kZXJBY3Rpb25GbGFncyogaW9BY3Rpb25GbGFncywgY29uc3QgQXVkaW9U
aW1lU3RhbXAqIGluVGltZVN0YW1wLCBVSW50MzIgaW5CdXNOdW1iZXIsIFVJbnQzMiBpbk51bWJl
ckZyYW1lcywgQXVkaW9CdWZmZXJMaXN0KiBpb0RhdGEpCi17Ci0gICAgQVNTRVJUKGlvQWN0aW9u
RmxhZ3MpOwotICAgIEFTU0VSVChpblRpbWVTdGFtcCk7Ci0gICAgYXV0byBkYXRhU291cmNlID0g
c3RhdGljX2Nhc3Q8Q29yZUF1ZGlvU2hhcmVkVW5pdCo+KGluUmVmQ29uKTsKLSAgICByZXR1cm4g
ZGF0YVNvdXJjZS0+cHJvdmlkZVNwZWFrZXJEYXRhKCppb0FjdGlvbkZsYWdzLCAqaW5UaW1lU3Rh
bXAsIGluQnVzTnVtYmVyLCBpbk51bWJlckZyYW1lcywgKmlvRGF0YSk7Ci19Ci0KLU9TU3RhdHVz
IENvcmVBdWRpb1NoYXJlZFVuaXQ6OnByb2Nlc3NNaWNyb3Bob25lU2FtcGxlcyhBdWRpb1VuaXRS
ZW5kZXJBY3Rpb25GbGFncyYgaW9BY3Rpb25GbGFncywgY29uc3QgQXVkaW9UaW1lU3RhbXAmIHRp
bWVTdGFtcCwgVUludDMyIGluQnVzTnVtYmVyLCBVSW50MzIgaW5OdW1iZXJGcmFtZXMsIEF1ZGlv
QnVmZmVyTGlzdCogLyppb0RhdGEqLykKLXsKLSAgICArK21fbWljcm9waG9uZVByb2NzQ2FsbGVk
OwotCi0gICAgaWYgKG1faXNSZWNvbmZpZ3VyaW5nKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICAvLyBQdWxsIHRocm91Z2ggdGhlIHZwaW8gdW5pdCB0byBvdXIgbWljIGJ1ZmZlci4KLSAg
ICBtX21pY3JvcGhvbmVTYW1wbGVCdWZmZXItPnJlc2V0KCk7Ci0gICAgQXVkaW9CdWZmZXJMaXN0
JiBidWZmZXJMaXN0ID0gbV9taWNyb3Bob25lU2FtcGxlQnVmZmVyLT5idWZmZXJMaXN0KCk7Ci0g
ICAgYXV0byBlcnIgPSBBdWRpb1VuaXRSZW5kZXIobV9pb1VuaXQsICZpb0FjdGlvbkZsYWdzLCAm
dGltZVN0YW1wLCBpbkJ1c051bWJlciwgaW5OdW1iZXJGcmFtZXMsICZidWZmZXJMaXN0KTsKLSAg
ICBpZiAoZXJyKSB7Ci0gICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFdlYlJUQywgIkNvcmVBdWRp
b1NoYXJlZFVuaXQ6OnByb2Nlc3NNaWNyb3Bob25lU2FtcGxlcyglcCkgQXVkaW9Vbml0UmVuZGVy
IGZhaWxlZCB3aXRoIGVycm9yICVkICglLjRzKSwgYnVmZmVyTGlzdCBzaXplICVkLCBpbk51bWJl
ckZyYW1lcyAlZCAiLCB0aGlzLCAoaW50KWVyciwgKGNoYXIqKSZlcnIsIChpbnQpYnVmZmVyTGlz
dC5tQnVmZmVyc1swXS5tRGF0YUJ5dGVTaXplLCAoaW50KWluTnVtYmVyRnJhbWVzKTsKLSAgICAg
ICAgaWYgKGVyciA9PSBrQXVkaW9fUGFyYW1FcnJvcikgewotICAgICAgICAgICAgLy8gT3VyIGJ1
ZmZlciBtaWdodCBiZSB0b28gc21hbGwsIHRoZSBwcmVmZXJyZWQgYnVmZmVyIHNpemUgb3Igc2Ft
cGxlIHJhdGUgbWlnaHQgaGF2ZSBjaGFuZ2VkLgotICAgICAgICAgICAgY2FsbE9uTWFpblRocmVh
ZChbXSB7Ci0gICAgICAgICAgICAgICAgQ29yZUF1ZGlvU2hhcmVkVW5pdDo6c2luZ2xldG9uKCku
cmVjb25maWd1cmUoKTsKLSAgICAgICAgICAgIH0pOwotICAgICAgICB9Ci0gICAgICAgIC8vIFdl
IHJldHVybiBlYXJseSBzbyB0aGF0IGlmIHRoaXMgZXJyb3IgaGFwcGVucywgd2UgZG8gbm90IGlu
Y3JlbWVudCBtX21pY3JvcGhvbmVQcm9jc0NhbGxlZCBhbmQgZmFpbCB0aGUgY2FwdHVyZSBvbmNl
IHRpbWVyIGtpY2tzIGluLgotICAgICAgICByZXR1cm4gZXJyOwotICAgIH0KLQotICAgIGlmICgh
aXNQcm9kdWNpbmdNaWNyb3Bob25lU2FtcGxlcygpKQotICAgICAgICByZXR1cm4gbm9FcnI7Ci0K
LSAgICBkb3VibGUgYWRqdXN0ZWRIb3N0VGltZSA9IG1fRFRTQ29udmVyc2lvblJhdGlvICogdGlt
ZVN0YW1wLm1Ib3N0VGltZTsKLSAgICB1aW50NjRfdCBzYW1wbGVUaW1lID0gdGltZVN0YW1wLm1T
YW1wbGVUaW1lOwotI2lmICFMT0dfRElTQUJMRUQKLSAgICBjaGVja1RpbWVzdGFtcHModGltZVN0
YW1wLCBzYW1wbGVUaW1lLCBhZGp1c3RlZEhvc3RUaW1lKTsKLSNlbmRpZgotICAgIG1fbGF0ZXN0
TWljVGltZVN0YW1wID0gc2FtcGxlVGltZTsKLSAgICBtX21pY3JvcGhvbmVTYW1wbGVCdWZmZXIt
PnNldFRpbWVzKGFkanVzdGVkSG9zdFRpbWUsIHNhbXBsZVRpbWUpOwotCi0gICAgaWYgKHZvbHVt
ZSgpICE9IDEuMCkKLSAgICAgICAgbV9taWNyb3Bob25lU2FtcGxlQnVmZmVyLT5hcHBseUdhaW4o
dm9sdW1lKCkpOwotCi0gICAgYXVkaW9TYW1wbGVzQXZhaWxhYmxlKE1lZGlhVGltZShzYW1wbGVU
aW1lLCBtX21pY3JvcGhvbmVQcm9jRm9ybWF0LnNhbXBsZVJhdGUoKSksIG1fbWljcm9waG9uZVNh
bXBsZUJ1ZmZlci0+YnVmZmVyTGlzdCgpLCBtX21pY3JvcGhvbmVQcm9jRm9ybWF0LCBpbk51bWJl
ckZyYW1lcyk7Ci0gICAgcmV0dXJuIG5vRXJyOwotfQotCi1PU1N0YXR1cyBDb3JlQXVkaW9TaGFy
ZWRVbml0OjptaWNyb3Bob25lQ2FsbGJhY2sodm9pZCAqaW5SZWZDb24sIEF1ZGlvVW5pdFJlbmRl
ckFjdGlvbkZsYWdzKiBpb0FjdGlvbkZsYWdzLCBjb25zdCBBdWRpb1RpbWVTdGFtcCogaW5UaW1l
U3RhbXAsIFVJbnQzMiBpbkJ1c051bWJlciwgVUludDMyIGluTnVtYmVyRnJhbWVzLCBBdWRpb0J1
ZmZlckxpc3QqIGlvRGF0YSkKLXsKLSAgICBBU1NFUlQoaW9BY3Rpb25GbGFncyk7Ci0gICAgQVNT
RVJUKGluVGltZVN0YW1wKTsKLSAgICBDb3JlQXVkaW9TaGFyZWRVbml0KiBkYXRhU291cmNlID0g
c3RhdGljX2Nhc3Q8Q29yZUF1ZGlvU2hhcmVkVW5pdCo+KGluUmVmQ29uKTsKLSAgICByZXR1cm4g
ZGF0YVNvdXJjZS0+cHJvY2Vzc01pY3JvcGhvbmVTYW1wbGVzKCppb0FjdGlvbkZsYWdzLCAqaW5U
aW1lU3RhbXAsIGluQnVzTnVtYmVyLCBpbk51bWJlckZyYW1lcywgaW9EYXRhKTsKLX0KLQotdm9p
ZCBDb3JlQXVkaW9TaGFyZWRVbml0OjpjbGVhbnVwQXVkaW9Vbml0KCkKLXsKLSAgICBpZiAobV9p
b1VuaXRJbml0aWFsaXplZCkgewotICAgICAgICBBU1NFUlQobV9pb1VuaXQpOwotICAgICAgICBh
dXRvIGVyciA9IEF1ZGlvVW5pdFVuaW5pdGlhbGl6ZShtX2lvVW5pdCk7Ci0gICAgICAgIGlmIChl
cnIpCi0gICAgICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihXZWJSVEMsICJDb3JlQXVkaW9TaGFy
ZWRVbml0OjpjbGVhbnVwQXVkaW9Vbml0KCVwKSBBdWRpb1VuaXRVbmluaXRpYWxpemUgZmFpbGVk
IHdpdGggZXJyb3IgJWQgKCUuNHMpIiwgdGhpcywgKGludCllcnIsIChjaGFyKikmZXJyKTsKLSAg
ICAgICAgbV9pb1VuaXRJbml0aWFsaXplZCA9IGZhbHNlOwotICAgIH0KLQotICAgIGlmIChtX2lv
VW5pdCkgewotICAgICAgICBQQUw6OkF1ZGlvQ29tcG9uZW50SW5zdGFuY2VEaXNwb3NlKG1faW9V
bml0KTsKLSAgICAgICAgbV9pb1VuaXQgPSBudWxscHRyOwotICAgIH0KLQotICAgIG1fbWljcm9w
aG9uZVNhbXBsZUJ1ZmZlciA9IG51bGxwdHI7Ci0jaWYgIUxPR19ESVNBQkxFRAotICAgIG1faW9V
bml0TmFtZSA9IGVtcHR5U3RyaW5nKCk7Ci0jZW5kaWYKLX0KLQotT1NTdGF0dXMgQ29yZUF1ZGlv
U2hhcmVkVW5pdDo6cmVjb25maWd1cmVBdWRpb1VuaXQoKQotewotICAgIEFTU0VSVChpc01haW5U
aHJlYWQoKSk7Ci0gICAgT1NTdGF0dXMgZXJyOwotICAgIGlmICghaGFzQXVkaW9Vbml0KCkpCi0g
ICAgICAgIHJldHVybiAwOwotCi0gICAgbV9pc1JlY29uZmlndXJpbmcgPSB0cnVlOwotICAgIGF1
dG8gc2NvcGUgPSBtYWtlU2NvcGVFeGl0KFt0aGlzXSB7IG1faXNSZWNvbmZpZ3VyaW5nID0gZmFs
c2U7IH0pOwotCi0gICAgaWYgKG1faW9Vbml0U3RhcnRlZCkgewotICAgICAgICBlcnIgPSBQQUw6
OkF1ZGlvT3V0cHV0VW5pdFN0b3AobV9pb1VuaXQpOwotICAgICAgICBpZiAoZXJyKSB7Ci0gICAg
ICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihXZWJSVEMsICJDb3JlQXVkaW9TaGFyZWRVbml0Ojpy
ZWNvbmZpZ3VyZUF1ZGlvVW5pdCglcCkgQXVkaW9PdXRwdXRVbml0U3RvcCBmYWlsZWQgd2l0aCBl
cnJvciAlZCAoJS40cykiLCB0aGlzLCAoaW50KWVyciwgKGNoYXIqKSZlcnIpOwotICAgICAgICAg
ICAgcmV0dXJuIGVycjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGNsZWFudXBBdWRpb1VuaXQo
KTsKLSAgICBlcnIgPSBzZXR1cEF1ZGlvVW5pdCgpOwotICAgIGlmIChlcnIpCi0gICAgICAgIHJl
dHVybiBlcnI7Ci0KLSAgICBpZiAobV9pb1VuaXRTdGFydGVkKSB7Ci0gICAgICAgIGVyciA9IFBB
TDo6QXVkaW9PdXRwdXRVbml0U3RhcnQobV9pb1VuaXQpOwotICAgICAgICBpZiAoZXJyKSB7Ci0g
ICAgICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihXZWJSVEMsICJDb3JlQXVkaW9TaGFyZWRVbml0
OjpyZWNvbmZpZ3VyZUF1ZGlvVW5pdCglcCkgQXVkaW9PdXRwdXRVbml0U3RhcnQgZmFpbGVkIHdp
dGggZXJyb3IgJWQgKCUuNHMpIiwgdGhpcywgKGludCllcnIsIChjaGFyKikmZXJyKTsKLSAgICAg
ICAgICAgIHJldHVybiBlcnI7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGVycjsKLX0K
LQotT1NTdGF0dXMgQ29yZUF1ZGlvU2hhcmVkVW5pdDo6c3RhcnRJbnRlcm5hbCgpCi17Ci0gICAg
QVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLQotICAgIHNldElzUHJvZHVjaW5nTWljcm9waG9uZVNh
bXBsZXModHJ1ZSk7Ci0KLSAgICBPU1N0YXR1cyBlcnI7Ci0gICAgaWYgKCFtX2lvVW5pdCkgewot
ICAgICAgICBlcnIgPSBzZXR1cEF1ZGlvVW5pdCgpOwotICAgICAgICBpZiAoZXJyKSB7Ci0gICAg
ICAgICAgICBjbGVhbnVwQXVkaW9Vbml0KCk7Ci0gICAgICAgICAgICBBU1NFUlQoIW1faW9Vbml0
KTsKLSAgICAgICAgICAgIHJldHVybiBlcnI7Ci0gICAgICAgIH0KLSAgICAgICAgQVNTRVJUKG1f
aW9Vbml0KTsKLSAgICB9Ci0KLSAgICB1bmR1Y2soKTsKLQotICAgIHsKLSAgICAgICAgTG9ja2Vy
IGxvY2tlciB7IG1fc3BlYWtlclNhbXBsZXNQcm9kdWNlckxvY2sgfTsKLSAgICAgICAgaWYgKG1f
c3BlYWtlclNhbXBsZXNQcm9kdWNlcikKLSAgICAgICAgICAgIG1fc3BlYWtlclNhbXBsZXNQcm9k
dWNlci0+Y2FwdHVyZVVuaXRJc1N0YXJ0aW5nKCk7Ci0gICAgfQotCi0gICAgZXJyID0gUEFMOjpB
dWRpb091dHB1dFVuaXRTdGFydChtX2lvVW5pdCk7Ci0gICAgaWYgKGVycikgewotICAgICAgICB7
Ci0gICAgICAgICAgICBMb2NrZXIgbG9ja2VyIHsgbV9zcGVha2VyU2FtcGxlc1Byb2R1Y2VyTG9j
ayB9OwotICAgICAgICAgICAgaWYgKG1fc3BlYWtlclNhbXBsZXNQcm9kdWNlcikKLSAgICAgICAg
ICAgICAgICBtX3NwZWFrZXJTYW1wbGVzUHJvZHVjZXItPmNhcHR1cmVVbml0SGFzU3RvcHBlZCgp
OwotICAgICAgICB9Ci0KLSAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoV2ViUlRDLCAiQ29yZUF1
ZGlvU2hhcmVkVW5pdDo6c3RhcnQoJXApIEF1ZGlvT3V0cHV0VW5pdFN0YXJ0IGZhaWxlZCB3aXRo
IGVycm9yICVkICglLjRzKSIsIHRoaXMsIChpbnQpZXJyLCAoY2hhciopJmVycik7Ci0gICAgICAg
IGNsZWFudXBBdWRpb1VuaXQoKTsKLSAgICAgICAgQVNTRVJUKCFtX2lvVW5pdCk7Ci0gICAgICAg
IHJldHVybiBlcnI7Ci0gICAgfQotCi0gICAgbV9pb1VuaXRTdGFydGVkID0gdHJ1ZTsKLQotICAg
IG1fdmVyaWZ5Q2FwdHVyaW5nVGltZXIuc3RhcnRSZXBlYXRpbmcodmVyaWZ5Q2FwdHVyZUludGVy
dmFsKCkpOwotICAgIG1fbWljcm9waG9uZVByb2NzQ2FsbGVkID0gMDsKLSAgICBtX21pY3JvcGhv
bmVQcm9jc0NhbGxlZExhc3RUaW1lID0gMDsKLQotICAgIHJldHVybiAwOwotfQotCi12b2lkIENv
cmVBdWRpb1NoYXJlZFVuaXQ6OmlzUHJvZHVjaW5nTWljcm9waG9uZVNhbXBsZXNDaGFuZ2VkKCkK
LXsKLSAgICBpZiAoIWlzUHJvZHVjaW5nRGF0YSgpKQotICAgICAgICByZXR1cm47Ci0gICAgbV92
ZXJpZnlDYXB0dXJpbmdUaW1lci5zdGFydFJlcGVhdGluZyh2ZXJpZnlDYXB0dXJlSW50ZXJ2YWwo
KSk7Ci19Ci0KLXZvaWQgQ29yZUF1ZGlvU2hhcmVkVW5pdDo6dmFsaWRhdGVPdXRwdXREZXZpY2Uo
dWludDMyX3QgY3VycmVudE91dHB1dERldmljZUlEKQotewotI2lmIFBMQVRGT1JNKE1BQykKLSAg
ICB1aW50MzJfdCBjdXJyZW50RGVmYXVsdE91dHB1dERldmljZUlEID0gMDsKLSAgICBpZiAoYXV0
byBlcnIgPSBkZWZhdWx0T3V0cHV0RGV2aWNlKCZjdXJyZW50RGVmYXVsdE91dHB1dERldmljZUlE
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFjdXJyZW50RGVmYXVsdE91dHB1dERldmlj
ZUlEIHx8IGN1cnJlbnRPdXRwdXREZXZpY2VJRCA9PSBjdXJyZW50RGVmYXVsdE91dHB1dERldmlj
ZUlEKQotICAgICAgICByZXR1cm47Ci0KLSAgICByZWNvbmZpZ3VyZSgpOwotI2Vsc2UKLSAgICBV
TlVTRURfUEFSQU0oY3VycmVudE91dHB1dERldmljZUlEKTsKLSNlbmRpZgotfQotCi12b2lkIENv
cmVBdWRpb1NoYXJlZFVuaXQ6OnZlcmlmeUlzQ2FwdHVyaW5nKCkKLXsKLSAgICBpZiAobV9taWNy
b3Bob25lUHJvY3NDYWxsZWRMYXN0VGltZSAhPSBtX21pY3JvcGhvbmVQcm9jc0NhbGxlZCkgewot
ICAgICAgICBtX21pY3JvcGhvbmVQcm9jc0NhbGxlZExhc3RUaW1lID0gbV9taWNyb3Bob25lUHJv
Y3NDYWxsZWQ7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBSRUxFQVNFX0xPR19FUlJP
UihXZWJSVEMsICJDb3JlQXVkaW9TaGFyZWRVbml0Ojp2ZXJpZnlJc0NhcHR1cmluZyAtIG5vIGF1
ZGlvIHJlY2VpdmVkIGluICVkIHNlY29uZHMsIGZhaWxpbmciLCBzdGF0aWNfY2FzdDxpbnQ+KG1f
dmVyaWZ5Q2FwdHVyaW5nVGltZXIucmVwZWF0SW50ZXJ2YWwoKS52YWx1ZSgpKSk7Ci0gICAgY2Fw
dHVyZUZhaWxlZCgpOwotfQotCi12b2lkIENvcmVBdWRpb1NoYXJlZFVuaXQ6OnN0b3BJbnRlcm5h
bCgpCi17Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLQotICAgIG1fdmVyaWZ5Q2FwdHVy
aW5nVGltZXIuc3RvcCgpOwotCi0gICAgaWYgKCFtX2lvVW5pdCB8fCAhbV9pb1VuaXRTdGFydGVk
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvIGVyciA9IFBBTDo6QXVkaW9PdXRwdXRVbml0
U3RvcChtX2lvVW5pdCk7Ci0gICAgaWYgKGVycikgewotICAgICAgICBSRUxFQVNFX0xPR19FUlJP
UihXZWJSVEMsICJDb3JlQXVkaW9TaGFyZWRVbml0OjpzdG9wKCVwKSBBdWRpb091dHB1dFVuaXRT
dG9wIGZhaWxlZCB3aXRoIGVycm9yICVkICglLjRzKSIsIHRoaXMsIChpbnQpZXJyLCAoY2hhciop
JmVycik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgewotICAgICAgICBMb2NrZXIgbG9j
a2VyIHsgbV9zcGVha2VyU2FtcGxlc1Byb2R1Y2VyTG9jayB9OwotICAgICAgICBpZiAobV9zcGVh
a2VyU2FtcGxlc1Byb2R1Y2VyKQotICAgICAgICAgICAgbV9zcGVha2VyU2FtcGxlc1Byb2R1Y2Vy
LT5jYXB0dXJlVW5pdEhhc1N0b3BwZWQoKTsKLSAgICB9Ci0KLSAgICBtX2lvVW5pdFN0YXJ0ZWQg
PSBmYWxzZTsKLX0KLQotT1NTdGF0dXMgQ29yZUF1ZGlvU2hhcmVkVW5pdDo6ZGVmYXVsdElucHV0
RGV2aWNlKHVpbnQzMl90KiBkZXZpY2VJRCkKLXsKLSAgICBBU1NFUlQobV9pb1VuaXQpOwotCi0g
ICAgVUludDMyIHByb3BlcnR5U2l6ZSA9IHNpemVvZigqZGV2aWNlSUQpOwotICAgIGF1dG8gZXJy
ID0gUEFMOjpBdWRpb1VuaXRHZXRQcm9wZXJ0eShtX2lvVW5pdCwga0F1ZGlvT3V0cHV0VW5pdFBy
b3BlcnR5X0N1cnJlbnREZXZpY2UsIGtBdWRpb1VuaXRTY29wZV9HbG9iYWwsIGlucHV0QnVzLCBk
ZXZpY2VJRCwgJnByb3BlcnR5U2l6ZSk7Ci0gICAgaWYgKGVycikKLSAgICAgICAgUkVMRUFTRV9M
T0dfRVJST1IoV2ViUlRDLCAiQ29yZUF1ZGlvU2hhcmVkVW5pdDo6ZGVmYXVsdElucHV0RGV2aWNl
KCVwKSB1bmFibGUgdG8gZ2V0IGRlZmF1bHQgaW5wdXQgZGV2aWNlIElELCBlcnJvciAlZCAoJS40
cykiLCB0aGlzLCAoaW50KWVyciwgKGNoYXIqKSZlcnIpOwotCi0gICAgcmV0dXJuIGVycjsKLX0K
LQotT1NTdGF0dXMgQ29yZUF1ZGlvU2hhcmVkVW5pdDo6ZGVmYXVsdE91dHB1dERldmljZSh1aW50
MzJfdCogZGV2aWNlSUQpCi17Ci0gICAgT1NFcnIgZXJyID0gLTE7Ci0jaWYgUExBVEZPUk0oTUFD
KQotICAgIEF1ZGlvT2JqZWN0UHJvcGVydHlBZGRyZXNzIGFkZHJlc3MgPSB7Ci0gICAgICAgIGtB
dWRpb0hhcmR3YXJlUHJvcGVydHlEZWZhdWx0T3V0cHV0RGV2aWNlLAotICAgICAgICBrQXVkaW9P
YmplY3RQcm9wZXJ0eVNjb3BlR2xvYmFsLAotI2lmIEhBVkUoQVVESU9fT0JKRUNUX1BST1BFUlRZ
X0VMRU1FTlRfTUFJTikKLSAgICAgICAga0F1ZGlvT2JqZWN0UHJvcGVydHlFbGVtZW50TWFpbgot
I2Vsc2UKLSAgICAgICAgQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfQkVHSU4KLSAgICAg
ICAga0F1ZGlvT2JqZWN0UHJvcGVydHlFbGVtZW50TWFzdGVyCi0gICAgICAgIEFMTE9XX0RFUFJF
Q0FURURfREVDTEFSQVRJT05TX0VORAotI2VuZGlmCi0gICAgfTsKLQotICAgIGlmIChBdWRpb09i
amVjdEhhc1Byb3BlcnR5KGtBdWRpb09iamVjdFN5c3RlbU9iamVjdCwgJmFkZHJlc3MpKSB7Ci0g
ICAgICAgIFVJbnQzMiBwcm9wZXJ0eVNpemUgPSBzaXplb2YoQXVkaW9EZXZpY2VJRCk7Ci0gICAg
ICAgIGVyciA9IEF1ZGlvT2JqZWN0R2V0UHJvcGVydHlEYXRhKGtBdWRpb09iamVjdFN5c3RlbU9i
amVjdCwgJmFkZHJlc3MsIDAsIG51bGxwdHIsICZwcm9wZXJ0eVNpemUsIGRldmljZUlEKTsKLSAg
ICB9Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShkZXZpY2VJRCk7Ci0jZW5kaWYKLSAgICByZXR1
cm4gZXJyOwotfQotCi12b2lkIENvcmVBdWRpb1NoYXJlZFVuaXQ6OnJlZ2lzdGVyU3BlYWtlclNh
bXBsZXNQcm9kdWNlcihDb3JlQXVkaW9TcGVha2VyU2FtcGxlc1Byb2R1Y2VyJiBwcm9kdWNlcikK
LXsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotCi0gICAgc2V0SXNSZW5kZXJpbmdBdWRp
byh0cnVlKTsKLQotICAgIENvcmVBdWRpb1NwZWFrZXJTYW1wbGVzUHJvZHVjZXIqIG9sZFByb2R1
Y2VyOwotICAgIHsKLSAgICAgICAgTG9ja2VyIGxvY2tlciB7IG1fc3BlYWtlclNhbXBsZXNQcm9k
dWNlckxvY2sgfTsKLSAgICAgICAgb2xkUHJvZHVjZXIgPSBtX3NwZWFrZXJTYW1wbGVzUHJvZHVj
ZXI7Ci0gICAgICAgIG1fc3BlYWtlclNhbXBsZXNQcm9kdWNlciA9ICZwcm9kdWNlcjsKLSAgICB9
Ci0gICAgaWYgKG9sZFByb2R1Y2VyICYmIG9sZFByb2R1Y2VyICE9ICZwcm9kdWNlcikKLSAgICAg
ICAgb2xkUHJvZHVjZXItPmNhcHR1cmVVbml0SGFzU3RvcHBlZCgpOwotCi0gICAgaWYgKGhhc0F1
ZGlvVW5pdCgpICYmIHByb2R1Y2VyLmZvcm1hdCgpICE9IG1fc3BlYWtlclByb2NGb3JtYXQpCi0g
ICAgICAgIHJlY29uZmlndXJlKCk7Ci19Ci0KLXZvaWQgQ29yZUF1ZGlvU2hhcmVkVW5pdDo6dW5y
ZWdpc3RlclNwZWFrZXJTYW1wbGVzUHJvZHVjZXIoQ29yZUF1ZGlvU3BlYWtlclNhbXBsZXNQcm9k
dWNlciYgcHJvZHVjZXIpCi17Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLQotICAgIHsK
LSAgICAgICAgTG9ja2VyIGxvY2tlciB7IG1fc3BlYWtlclNhbXBsZXNQcm9kdWNlckxvY2sgfTsK
LSAgICAgICAgaWYgKG1fc3BlYWtlclNhbXBsZXNQcm9kdWNlciAhPSAmcHJvZHVjZXIpCi0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIG1fc3BlYWtlclNhbXBsZXNQcm9kdWNlciA9IG51bGxw
dHI7Ci0gICAgfQotCi0gICAgc2V0SXNSZW5kZXJpbmdBdWRpbyhmYWxzZSk7Ci19Ci0KIHN0YXRp
YyBDYXB0dXJlU291cmNlT3JFcnJvciBpbml0aWFsaXplQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZShS
ZWY8Q29yZUF1ZGlvQ2FwdHVyZVNvdXJjZT4mJiBzb3VyY2UsIGNvbnN0IE1lZGlhQ29uc3RyYWlu
dHMqIGNvbnN0cmFpbnRzKQogewogICAgIGlmIChjb25zdHJhaW50cykgewpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0NvcmVBdWRpb1NoYXJlZFVu
aXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0NvcmVBdWRp
b1NoYXJlZFVuaXQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjlmYjEwNGQzZDVjYzgzZDNlMTQ4ZjRkYmZiMzM3
ZjBhNjkzZTMyNTAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
ZWRpYXN0cmVhbS9tYWMvQ29yZUF1ZGlvU2hhcmVkVW5pdC5jcHAKQEAgLTAsMCArMSw2NTIgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDb3JlQXVkaW9TaGFyZWRVbml0LmgiCisKKyNpZiBF
TkFCTEUoTUVESUFfU1RSRUFNKQorCisjaW5jbHVkZSAiQXVkaW9TYW1wbGVCdWZmZXJMaXN0Lmgi
CisjaW5jbHVkZSAiQXVkaW9TZXNzaW9uLmgiCisjaW5jbHVkZSAiQ29yZUF1ZGlvQ2FwdHVyZVNv
dXJjZS5oIgorI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRlIDxBdWRpb1Rvb2xib3gvQXVk
aW9Db252ZXJ0ZXIuaD4KKyNpbmNsdWRlIDxBdWRpb1VuaXQvQXVkaW9Vbml0Lmg+CisjaW5jbHVk
ZSA8Q29yZU1lZGlhL0NNU3luYy5oPgorI2luY2x1ZGUgPG1hY2gvbWFjaF90aW1lLmg+CisjaW5j
bHVkZSA8cGFsL2F2Zm91bmRhdGlvbi9NZWRpYVRpbWVBVkZvdW5kYXRpb24uaD4KKyNpbmNsdWRl
IDxwYWwvc3BpL2NmL0NvcmVBdWRpb1NQSS5oPgorI2luY2x1ZGUgPHN5cy90aW1lLmg+CisjaW5j
bHVkZSA8d3RmL0FsZ29yaXRobXMuaD4KKyNpbmNsdWRlIDx3dGYvTG9jay5oPgorI2luY2x1ZGUg
PHd0Zi9NYWluVGhyZWFkLmg+CisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisjaW5j
bHVkZSA8d3RmL1Njb3BlLmg+CisKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorI2luY2x1ZGUg
IkFWQXVkaW9TZXNzaW9uQ2FwdHVyZURldmljZU1hbmFnZXIuaCIKKyNlbmRpZgorCisjaW5jbHVk
ZSA8cGFsL2NmL0F1ZGlvVG9vbGJveFNvZnRMaW5rLmg+CisjaW5jbHVkZSA8cGFsL2NmL0NvcmVN
ZWRpYVNvZnRMaW5rLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY29uc3QgVUludDMyIG91
dHB1dEJ1cyA9IDA7Citjb25zdCBVSW50MzIgaW5wdXRCdXMgPSAxOworCitjbGFzcyBDb3JlQXVk
aW9TaGFyZWRJbnRlcm5hbFVuaXQgOiAgcHVibGljIENvcmVBdWRpb1NoYXJlZFVuaXQ6OkludGVy
bmFsVW5pdCB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgc3Rh
dGljIEV4cGVjdGVkPFVuaXF1ZVJlZjxJbnRlcm5hbFVuaXQ+LCBPU1N0YXR1cz4gY3JlYXRlKCk7
CisgICAgZXhwbGljaXQgQ29yZUF1ZGlvU2hhcmVkSW50ZXJuYWxVbml0KEF1ZGlvVW5pdCk7Cisg
ICAgfkNvcmVBdWRpb1NoYXJlZEludGVybmFsVW5pdCgpIGZpbmFsOworCitwcml2YXRlOgorICAg
IE9TU3RhdHVzIGluaXRpYWxpemUoKSBmaW5hbDsKKyAgICBPU1N0YXR1cyB1bmluaXRpYWxpemUo
KSBmaW5hbDsKKyAgICBPU1N0YXR1cyBzdGFydCgpIGZpbmFsOworICAgIE9TU3RhdHVzIHN0b3Ao
KSBmaW5hbDsKKyAgICBPU1N0YXR1cyBzZXQoQXVkaW9Vbml0UHJvcGVydHlJRCwgQXVkaW9Vbml0
U2NvcGUsIEF1ZGlvVW5pdEVsZW1lbnQsIGNvbnN0IHZvaWQqLCBVSW50MzIpIGZpbmFsOworICAg
IE9TU3RhdHVzIGdldChBdWRpb1VuaXRQcm9wZXJ0eUlELCBBdWRpb1VuaXRTY29wZSwgQXVkaW9V
bml0RWxlbWVudCwgdm9pZCosIFVJbnQzMiopIGZpbmFsOworICAgIE9TU3RhdHVzIHJlbmRlcihB
dWRpb1VuaXRSZW5kZXJBY3Rpb25GbGFncyosIGNvbnN0IEF1ZGlvVGltZVN0YW1wKiwgVUludDMy
LCBVSW50MzIsIEF1ZGlvQnVmZmVyTGlzdCopIGZpbmFsOworICAgIE9TU3RhdHVzIGRlZmF1bHRJ
bnB1dERldmljZSh1aW50MzJfdCopIGZpbmFsOworICAgIE9TU3RhdHVzIGRlZmF1bHRPdXRwdXRE
ZXZpY2UodWludDMyX3QqKSBmaW5hbDsKKworICAgIEF1ZGlvVW5pdCBtX2lvVW5pdCB7IG51bGxw
dHIgfTsKK307CisKK0V4cGVjdGVkPFVuaXF1ZVJlZjxDb3JlQXVkaW9TaGFyZWRVbml0OjpJbnRl
cm5hbFVuaXQ+LCBPU1N0YXR1cz4gQ29yZUF1ZGlvU2hhcmVkSW50ZXJuYWxVbml0OjpjcmVhdGUo
KQoreworICAgIEF1ZGlvQ29tcG9uZW50RGVzY3JpcHRpb24gaW9Vbml0RGVzY3JpcHRpb24gPSB7
IGtBdWRpb1VuaXRUeXBlX091dHB1dCwga0F1ZGlvVW5pdFN1YlR5cGVfVm9pY2VQcm9jZXNzaW5n
SU8sIGtBdWRpb1VuaXRNYW51ZmFjdHVyZXJfQXBwbGUsIDAsIDAgfTsKKyAgICBBdWRpb0NvbXBv
bmVudCBpb0NvbXBvbmVudCA9IFBBTDo6QXVkaW9Db21wb25lbnRGaW5kTmV4dChudWxscHRyLCAm
aW9Vbml0RGVzY3JpcHRpb24pOworICAgIEFTU0VSVChpb0NvbXBvbmVudCk7CisgICAgaWYgKCFp
b0NvbXBvbmVudCkgeworICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihXZWJSVEMsICJDb3JlQXVk
aW9TaGFyZWRJbnRlcm5hbFVuaXQgdW5hYmxlIHRvIGZpbmQgdnBpbyB1bml0IGNvbXBvbmVudCIp
OworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoLTEpOworICAgIH0KKworI2lmICFMT0df
RElTQUJMRUQKKyAgICBDRlN0cmluZ1JlZiBuYW1lID0gbnVsbHB0cjsKKyAgICBQQUw6OkF1ZGlv
Q29tcG9uZW50Q29weU5hbWUoaW9Db21wb25lbnQsICZuYW1lKTsKKyAgICBpZiAobmFtZSkgewor
ICAgICAgICBTdHJpbmcgaW9Vbml0TmFtZSA9IG5hbWU7CisgICAgICAgIENGUmVsZWFzZShuYW1l
KTsKKyAgICAgICAgUkVMRUFTRV9MT0coV2ViUlRDLCAiQ29yZUF1ZGlvU2hhcmVkSW50ZXJuYWxV
bml0IGNyZWF0ZWQgXCIle3ByaXZhdGV9c1wiIGNvbXBvbmVudCIsIGlvVW5pdE5hbWUudXRmOCgp
LmRhdGEoKSk7CisgICAgfQorI2VuZGlmCisKKyAgICBBdWRpb1VuaXQgaW9Vbml0OworICAgIGF1
dG8gZXJyID0gUEFMOjpBdWRpb0NvbXBvbmVudEluc3RhbmNlTmV3KGlvQ29tcG9uZW50LCAmaW9V
bml0KTsKKyAgICBpZiAoZXJyKSB7CisgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFdlYlJUQywg
IkNvcmVBdWRpb1NoYXJlZEludGVybmFsVW5pdCB1bmFibGUgdG8gb3BlbiB2cGlvIHVuaXQsIGVy
cm9yICVkICglLjRzKSIsIChpbnQpZXJyLCAoY2hhciopJmVycik7CisgICAgICAgIHJldHVybiBt
YWtlVW5leHBlY3RlZChlcnIpOworICAgIH0KKworICAgIFJFTEVBU0VfTE9HKFdlYlJUQywgIlN1
Y2Nlc3NmdWxseSBjcmVhdGVkIGEgQ29yZUF1ZGlvU2hhcmVkSW50ZXJuYWxVbml0Iik7CisKKyAg
ICBVbmlxdWVSZWY8Q29yZUF1ZGlvU2hhcmVkVW5pdDo6SW50ZXJuYWxVbml0PiByZXN1bHQgPSBt
YWtlVW5pcXVlUmVmPENvcmVBdWRpb1NoYXJlZEludGVybmFsVW5pdD4oaW9Vbml0KTsKKyAgICBy
ZXR1cm4gcmVzdWx0OworfQorCitDb3JlQXVkaW9TaGFyZWRJbnRlcm5hbFVuaXQ6OkNvcmVBdWRp
b1NoYXJlZEludGVybmFsVW5pdChBdWRpb1VuaXQgaW9Vbml0KQorICAgIDogbV9pb1VuaXQoaW9V
bml0KQoreworfQorCitDb3JlQXVkaW9TaGFyZWRJbnRlcm5hbFVuaXQ6On5Db3JlQXVkaW9TaGFy
ZWRJbnRlcm5hbFVuaXQoKQoreworICAgIFBBTDo6QXVkaW9Db21wb25lbnRJbnN0YW5jZURpc3Bv
c2UobV9pb1VuaXQpOworfQorCitPU1N0YXR1cyBDb3JlQXVkaW9TaGFyZWRJbnRlcm5hbFVuaXQ6
OmluaXRpYWxpemUoKQoreworICAgIHJldHVybiBQQUw6OkF1ZGlvVW5pdEluaXRpYWxpemUobV9p
b1VuaXQpOworfQorCitPU1N0YXR1cyBDb3JlQXVkaW9TaGFyZWRJbnRlcm5hbFVuaXQ6OnVuaW5p
dGlhbGl6ZSgpCit7CisgICAgcmV0dXJuIEF1ZGlvVW5pdFVuaW5pdGlhbGl6ZShtX2lvVW5pdCk7
Cit9CisKK09TU3RhdHVzIENvcmVBdWRpb1NoYXJlZEludGVybmFsVW5pdDo6c3RhcnQoKQorewor
ICAgIHJldHVybiBQQUw6OkF1ZGlvT3V0cHV0VW5pdFN0YXJ0KG1faW9Vbml0KTsKK30KKworT1NT
dGF0dXMgQ29yZUF1ZGlvU2hhcmVkSW50ZXJuYWxVbml0OjpzdG9wKCkKK3sKKyAgICByZXR1cm4g
UEFMOjpBdWRpb091dHB1dFVuaXRTdG9wKG1faW9Vbml0KTsKK30KKworT1NTdGF0dXMgQ29yZUF1
ZGlvU2hhcmVkSW50ZXJuYWxVbml0OjpzZXQoQXVkaW9Vbml0UHJvcGVydHlJRCBwcm9wZXJ0eUlE
LCBBdWRpb1VuaXRTY29wZSBzY29wZSwgQXVkaW9Vbml0RWxlbWVudCBlbGVtZW50LCBjb25zdCB2
b2lkKiB2YWx1ZSwgVUludDMyIHNpemUpCit7CisgICAgcmV0dXJuIFBBTDo6QXVkaW9Vbml0U2V0
UHJvcGVydHkobV9pb1VuaXQsIHByb3BlcnR5SUQsIHNjb3BlLCBlbGVtZW50LCAmdmFsdWUsIHNp
emUpOworfQorCitPU1N0YXR1cyBDb3JlQXVkaW9TaGFyZWRJbnRlcm5hbFVuaXQ6OmdldChBdWRp
b1VuaXRQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIEF1ZGlvVW5pdFNjb3BlIHNjb3BlLCBBdWRpb1Vu
aXRFbGVtZW50IGVsZW1lbnQsIHZvaWQqIHZhbHVlLCBVSW50MzIqIHNpemUpCit7CisgICAgcmV0
dXJuIFBBTDo6QXVkaW9Vbml0R2V0UHJvcGVydHkobV9pb1VuaXQsIHByb3BlcnR5SUQsIHNjb3Bl
LCBlbGVtZW50LCB2YWx1ZSwgc2l6ZSk7Cit9CisKK09TU3RhdHVzIENvcmVBdWRpb1NoYXJlZElu
dGVybmFsVW5pdDo6cmVuZGVyKEF1ZGlvVW5pdFJlbmRlckFjdGlvbkZsYWdzKiBpb0FjdGlvbkZs
YWdzLCBjb25zdCBBdWRpb1RpbWVTdGFtcCogaW5UaW1lU3RhbXAsIFVJbnQzMiBpbk91dHB1dEJ1
c051bWJlciwgVUludDMyIGluTnVtYmVyRnJhbWVzLCBBdWRpb0J1ZmZlckxpc3QqIGxpc3QpCit7
CisgICAgcmV0dXJuIEF1ZGlvVW5pdFJlbmRlcihtX2lvVW5pdCwgaW9BY3Rpb25GbGFncywgaW5U
aW1lU3RhbXAsIGluT3V0cHV0QnVzTnVtYmVyLCBpbk51bWJlckZyYW1lcywgbGlzdCk7Cit9CisK
K09TU3RhdHVzIENvcmVBdWRpb1NoYXJlZEludGVybmFsVW5pdDo6ZGVmYXVsdElucHV0RGV2aWNl
KHVpbnQzMl90KiBkZXZpY2VJRCkKK3sKKyNpZiBQTEFURk9STShNQUMpCisgICAgVUludDMyIHBy
b3BlcnR5U2l6ZSA9IHNpemVvZigqZGV2aWNlSUQpOworICAgIGF1dG8gZXJyID0gZ2V0KGtBdWRp
b091dHB1dFVuaXRQcm9wZXJ0eV9DdXJyZW50RGV2aWNlLCBrQXVkaW9Vbml0U2NvcGVfR2xvYmFs
LCBpbnB1dEJ1cywgZGV2aWNlSUQsICZwcm9wZXJ0eVNpemUpOworICAgIFJFTEVBU0VfTE9HX0VS
Uk9SX0lGKGVyciwgV2ViUlRDLCAiQ29yZUF1ZGlvU2hhcmVkSW50ZXJuYWxVbml0IHVuYWJsZSB0
byBnZXQgZGVmYXVsdCBpbnB1dCBkZXZpY2UgSUQsIGVycm9yICVkICglLjRzKSIsIChpbnQpZXJy
LCAoY2hhciopJmVycik7CisgICAgcmV0dXJuIGVycjsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFN
KGRldmljZUlEKTsKKyAgICByZXR1cm4gLTE7CisjZW5kaWYKK30KKworT1NTdGF0dXMgQ29yZUF1
ZGlvU2hhcmVkSW50ZXJuYWxVbml0OjpkZWZhdWx0T3V0cHV0RGV2aWNlKHVpbnQzMl90KiBkZXZp
Y2VJRCkKK3sKKyNpZiBQTEFURk9STShNQUMpCisgICAgQXVkaW9PYmplY3RQcm9wZXJ0eUFkZHJl
c3MgYWRkcmVzcyA9IHsKKyAgICAgICAga0F1ZGlvSGFyZHdhcmVQcm9wZXJ0eURlZmF1bHRPdXRw
dXREZXZpY2UsCisgICAgICAgIGtBdWRpb09iamVjdFByb3BlcnR5U2NvcGVHbG9iYWwsCisjaWYg
SEFWRShBVURJT19PQkpFQ1RfUFJPUEVSVFlfRUxFTUVOVF9NQUlOKQorICAgICAgICBrQXVkaW9P
YmplY3RQcm9wZXJ0eUVsZW1lbnRNYWluCisjZWxzZQorICAgICAgICBBTExPV19ERVBSRUNBVEVE
X0RFQ0xBUkFUSU9OU19CRUdJTgorICAgICAgICBrQXVkaW9PYmplY3RQcm9wZXJ0eUVsZW1lbnRN
YXN0ZXIKKyAgICAgICAgQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfRU5ECisjZW5kaWYK
KyAgICB9OworCisgICAgaWYgKEF1ZGlvT2JqZWN0SGFzUHJvcGVydHkoa0F1ZGlvT2JqZWN0U3lz
dGVtT2JqZWN0LCAmYWRkcmVzcykpIHsKKyAgICAgICAgVUludDMyIHByb3BlcnR5U2l6ZSA9IHNp
emVvZihBdWRpb0RldmljZUlEKTsKKyAgICAgICAgcmV0dXJuIEF1ZGlvT2JqZWN0R2V0UHJvcGVy
dHlEYXRhKGtBdWRpb09iamVjdFN5c3RlbU9iamVjdCwgJmFkZHJlc3MsIDAsIG51bGxwdHIsICZw
cm9wZXJ0eVNpemUsIGRldmljZUlEKTsKKyAgICB9CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShk
ZXZpY2VJRCk7CisjZW5kaWYKKyAgICByZXR1cm4gLTE7Cit9CisKK0NvcmVBdWRpb1NoYXJlZFVu
aXQmIENvcmVBdWRpb1NoYXJlZFVuaXQ6OnVuaXQoKQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ry
b3llZDxDb3JlQXVkaW9TaGFyZWRVbml0PiBzaW5nbGV0b247CisgICAgcmV0dXJuIHNpbmdsZXRv
bjsKK30KKworQ29yZUF1ZGlvU2hhcmVkVW5pdDo6Q29yZUF1ZGlvU2hhcmVkVW5pdCgpCisgICAg
OiBtX3NhbXBsZVJhdGVDYXBhYmlsaXRpZXMoODAwMCwgOTYwMDApCisgICAgLCBtX3ZlcmlmeUNh
cHR1cmluZ1RpbWVyKCp0aGlzLCAmQ29yZUF1ZGlvU2hhcmVkVW5pdDo6dmVyaWZ5SXNDYXB0dXJp
bmcpCit7Cit9CisKK3ZvaWQgQ29yZUF1ZGlvU2hhcmVkVW5pdDo6cmVzZXRTYW1wbGVSYXRlKCkK
K3sKKyAgICBzZXRTYW1wbGVSYXRlKG1fZ2V0U2FtcGxlUmF0ZUNhbGxiYWNrID8gbV9nZXRTYW1w
bGVSYXRlQ2FsbGJhY2soKSA6IEF1ZGlvU2Vzc2lvbjo6c2hhcmVkU2Vzc2lvbigpLnNhbXBsZVJh
dGUoKSk7Cit9CisKK3ZvaWQgQ29yZUF1ZGlvU2hhcmVkVW5pdDo6Y2FwdHVyZURldmljZUNoYW5n
ZWQoKQoreworI2lmIFBMQVRGT1JNKE1BQykKKyAgICByZWNvbmZpZ3VyZUF1ZGlvVW5pdCgpOwor
I2Vsc2UKKyAgICBBVkF1ZGlvU2Vzc2lvbkNhcHR1cmVEZXZpY2VNYW5hZ2VyOjpzaW5nbGV0b24o
KS5zZXRQcmVmZXJyZWRBdWRpb1Nlc3Npb25EZXZpY2VVSUQocGVyc2lzdGVudElEKCkpOworI2Vu
ZGlmCit9CisKK3NpemVfdCBDb3JlQXVkaW9TaGFyZWRVbml0OjpwcmVmZXJyZWRJT0J1ZmZlclNp
emUoKQoreworICAgIHJldHVybiBBdWRpb1Nlc3Npb246OnNoYXJlZFNlc3Npb24oKS5idWZmZXJT
aXplKCk7Cit9CisKK09TU3RhdHVzIENvcmVBdWRpb1NoYXJlZFVuaXQ6OnNldHVwQXVkaW9Vbml0
KCkKK3sKKyAgICBpZiAobV9pb1VuaXQpCisgICAgICAgIHJldHVybiAwOworCisgICAgQVNTRVJU
KGhhc0NsaWVudHMoKSk7CisKKyAgICBtYWNoX3RpbWViYXNlX2luZm9fZGF0YV90IHRpbWViYXNl
SW5mbzsKKyAgICBtYWNoX3RpbWViYXNlX2luZm8oJnRpbWViYXNlSW5mbyk7CisgICAgbV9EVFND
b252ZXJzaW9uUmF0aW8gPSAxZS05ICogc3RhdGljX2Nhc3Q8ZG91YmxlPih0aW1lYmFzZUluZm8u
bnVtZXIpIC8gc3RhdGljX2Nhc3Q8ZG91YmxlPih0aW1lYmFzZUluZm8uZGVub20pOworCisgICAg
YXV0byByZXN1bHQgPSBtX2NyZWF0aW9uQ2FsbGJhY2sgPyBtX2NyZWF0aW9uQ2FsbGJhY2soKSA6
IENvcmVBdWRpb1NoYXJlZEludGVybmFsVW5pdDo6Y3JlYXRlKCk7CisgICAgaWYgKCFyZXN1bHQu
aGFzX3ZhbHVlKCkpCisgICAgICAgIHJldHVybiByZXN1bHQuZXJyb3IoKTsKKworICAgIG1faW9V
bml0ID0gV1RGTW92ZShyZXN1bHQudmFsdWUoKSkubW92ZVRvVW5pcXVlUHRyKCk7CisgICAgaWYg
KCFlbmFibGVFY2hvQ2FuY2VsbGF0aW9uKCkpIHsKKyAgICAgICAgdWludDMyX3QgcGFyYW0gPSAw
OworICAgICAgICBpZiAoYXV0byBlcnIgPSBtX2lvVW5pdC0+c2V0KGtBVVZvaWNlSU9Qcm9wZXJ0
eV9Wb2ljZVByb2Nlc3NpbmdFbmFibGVBR0MsIGtBdWRpb1VuaXRTY29wZV9HbG9iYWwsIGlucHV0
QnVzLCAmcGFyYW0sIHNpemVvZihwYXJhbSkpKSB7CisgICAgICAgICAgICBSRUxFQVNFX0xPR19F
UlJPUihXZWJSVEMsICJDb3JlQXVkaW9TaGFyZWRVbml0OjpzZXR1cEF1ZGlvVW5pdCglcCkgdW5h
YmxlIHRvIHNldCB2cGlvIGF1dG9tYXRpYyBnYWluIGNvbnRyb2wsIGVycm9yICVkICglLjRzKSIs
IHRoaXMsIChpbnQpZXJyLCAoY2hhciopJmVycik7CisgICAgICAgICAgICByZXR1cm4gZXJyOwor
ICAgICAgICB9CisgICAgICAgIHBhcmFtID0gMTsKKyAgICAgICAgaWYgKGF1dG8gZXJyID0gbV9p
b1VuaXQtPnNldChrQVVWb2ljZUlPUHJvcGVydHlfQnlwYXNzVm9pY2VQcm9jZXNzaW5nLCBrQXVk
aW9Vbml0U2NvcGVfR2xvYmFsLCBpbnB1dEJ1cywgJnBhcmFtLCBzaXplb2YocGFyYW0pKSkgewor
ICAgICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoV2ViUlRDLCAiQ29yZUF1ZGlvU2hhcmVkVW5p
dDo6c2V0dXBBdWRpb1VuaXQoJXApIHVuYWJsZSB0byBzZXQgdnBpbyB1bml0IGVjaG8gY2FuY2Vs
bGF0aW9uLCBlcnJvciAlZCAoJS40cykiLCB0aGlzLCAoaW50KWVyciwgKGNoYXIqKSZlcnIpOwor
ICAgICAgICAgICAgcmV0dXJuIGVycjsKKyAgICAgICAgfQorICAgIH0KKworI2lmIFBMQVRGT1JN
KElPU19GQU1JTFkpCisgICAgdWludDMyX3QgcGFyYW0gPSAxOworICAgIGlmIChhdXRvIGVyciA9
IG1faW9Vbml0LT5zZXQoa0F1ZGlvT3V0cHV0VW5pdFByb3BlcnR5X0VuYWJsZUlPLCBrQXVkaW9V
bml0U2NvcGVfSW5wdXQsIGlucHV0QnVzLCAmcGFyYW0sIHNpemVvZihwYXJhbSkpKSB7CisgICAg
ICAgIFJFTEVBU0VfTE9HX0VSUk9SKFdlYlJUQywgIkNvcmVBdWRpb1NoYXJlZFVuaXQ6OnNldHVw
QXVkaW9Vbml0KCVwKSB1bmFibGUgdG8gZW5hYmxlIHZwaW8gdW5pdCBpbnB1dCwgZXJyb3IgJWQg
KCUuNHMpIiwgdGhpcywgKGludCllcnIsIChjaGFyKikmZXJyKTsKKyAgICAgICAgcmV0dXJuIGVy
cjsKKyAgICB9CisjZWxzZQorICAgIGF1dG8gZGV2aWNlSUQgPSBjYXB0dXJlRGV2aWNlSUQoKTsK
KyAgICAvLyBGSVhNRTogV2UgcHJvYmFibHkgd2FudCB0byBtYWtlIGRlZmF1bHQgaW5wdXQvb3V0
cHV0IGRldmljZXMuCisgICAgaWYgKCFkZXZpY2VJRCkgeworICAgICAgICBpZiAoYXV0byBlcnIg
PSBtX2lvVW5pdC0+ZGVmYXVsdElucHV0RGV2aWNlKCZkZXZpY2VJRCkpCisgICAgICAgICAgICBy
ZXR1cm4gZXJyOworICAgIH0KKworICAgIGlmIChhdXRvIGVyciA9IG1faW9Vbml0LT5zZXQoa0F1
ZGlvT3V0cHV0VW5pdFByb3BlcnR5X0N1cnJlbnREZXZpY2UsIGtBdWRpb1VuaXRTY29wZV9HbG9i
YWwsIGlucHV0QnVzLCAmZGV2aWNlSUQsIHNpemVvZihkZXZpY2VJRCkpKSB7CisgICAgICAgIFJF
TEVBU0VfTE9HX0VSUk9SKFdlYlJUQywgIkNvcmVBdWRpb1NoYXJlZFVuaXQ6OnNldHVwQXVkaW9V
bml0KCVwKSB1bmFibGUgdG8gc2V0IHZwaW8gdW5pdCBjYXB0dXJlIGRldmljZSBJRCAlZCwgZXJy
b3IgJWQgKCUuNHMpIiwgdGhpcywgKGludClkZXZpY2VJRCwgKGludCllcnIsIChjaGFyKikmZXJy
KTsKKyAgICAgICAgcmV0dXJuIGVycjsKKyAgICB9CisKKyAgICB1aW50MzJfdCBkZWZhdWx0T3V0
cHV0RGV2aWNlSUQ7CisgICAgYXV0byBlcnIgPSBtX2lvVW5pdC0+ZGVmYXVsdE91dHB1dERldmlj
ZSgmZGVmYXVsdE91dHB1dERldmljZUlEKTsKKyAgICBpZiAoIWVycikgeworICAgICAgICBlcnIg
PSBtX2lvVW5pdC0+c2V0KGtBdWRpb091dHB1dFVuaXRQcm9wZXJ0eV9DdXJyZW50RGV2aWNlLCBr
QXVkaW9Vbml0U2NvcGVfR2xvYmFsLCBvdXRwdXRCdXMsICZkZWZhdWx0T3V0cHV0RGV2aWNlSUQs
IHNpemVvZihkZWZhdWx0T3V0cHV0RGV2aWNlSUQpKTsKKyAgICAgICAgUkVMRUFTRV9MT0dfRVJS
T1JfSUYoZXJyLCBXZWJSVEMsICJDb3JlQXVkaW9TaGFyZWRVbml0OjpzZXR1cEF1ZGlvVW5pdCgl
cCkgdW5hYmxlIHRvIHNldCB2cGlvIHVuaXQgb3V0cHV0IGRldmljZSBJRCAlZCwgZXJyb3IgJWQg
KCUuNHMpIiwgdGhpcywgKGludClkZWZhdWx0T3V0cHV0RGV2aWNlSUQsIChpbnQpZXJyLCAoY2hh
ciopJmVycik7CisgICAgfQorICAgIHNldE91dHB1dERldmljZUlEKCFlcnIgPyBkZWZhdWx0T3V0
cHV0RGV2aWNlSUQgOiAwKTsKKyNlbmRpZgorCisgICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0IGZv
ciBkaWZmZXJlbnQgc3BlYWtlci9taWNyb3Bob25lIHNhbXBsZSByYXRlcy4KKyAgICBpbnQgYWN0
dWFsU2FtcGxlUmF0ZSA9IHRoaXMtPmFjdHVhbFNhbXBsZVJhdGUoKTsKKyAgICBpZiAoYXV0byBl
cnIgPSBjb25maWd1cmVNaWNyb3Bob25lUHJvYyhhY3R1YWxTYW1wbGVSYXRlKSkKKyAgICAgICAg
cmV0dXJuIGVycjsKKworICAgIGlmIChhdXRvIGVyciA9IGNvbmZpZ3VyZVNwZWFrZXJQcm9jKGFj
dHVhbFNhbXBsZVJhdGUpKQorICAgICAgICByZXR1cm4gZXJyOworCisgICAgaWYgKGF1dG8gZXJy
ID0gbV9pb1VuaXQtPmluaXRpYWxpemUoKSkgeworICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihX
ZWJSVEMsICJDb3JlQXVkaW9TaGFyZWRVbml0OjpzZXR1cEF1ZGlvVW5pdCglcCkgQXVkaW9Vbml0
SW5pdGlhbGl6ZSgpIGZhaWxlZCwgZXJyb3IgJWQgKCUuNHMpIiwgdGhpcywgKGludCllcnIsIChj
aGFyKikmZXJyKTsKKyAgICAgICAgcmV0dXJuIGVycjsKKyAgICB9CisgICAgbV9pb1VuaXRJbml0
aWFsaXplZCA9IHRydWU7CisKKyAgICB1bmR1Y2soKTsKKworICAgIHJldHVybiAwOworfQorCit2
b2lkIENvcmVBdWRpb1NoYXJlZFVuaXQ6OnVuZHVjaygpCit7CisgICAgdWludDMyX3Qgb3V0cHV0
RGV2aWNlOworICAgIGlmIChtX2lvVW5pdCAmJiAhbV9pb1VuaXQtPmRlZmF1bHRPdXRwdXREZXZp
Y2UoJm91dHB1dERldmljZSkpCisgICAgICAgIEF1ZGlvRGV2aWNlRHVjayhvdXRwdXREZXZpY2Us
IDEuMCwgbnVsbHB0ciwgMCk7Cit9CisKK2ludCBDb3JlQXVkaW9TaGFyZWRVbml0OjphY3R1YWxT
YW1wbGVSYXRlKCkgY29uc3QKK3sKKyAgICBMb2NrZXIgbG9ja2VyIHsgbV9zcGVha2VyU2FtcGxl
c1Byb2R1Y2VyTG9jayB9OworICAgIHJldHVybiBtX3NwZWFrZXJTYW1wbGVzUHJvZHVjZXIgPyBt
X3NwZWFrZXJTYW1wbGVzUHJvZHVjZXItPmZvcm1hdCgpLnN0cmVhbURlc2NyaXB0aW9uKCkubVNh
bXBsZVJhdGUgOiBzYW1wbGVSYXRlKCk7Cit9CisKK09TU3RhdHVzIENvcmVBdWRpb1NoYXJlZFVu
aXQ6OmNvbmZpZ3VyZU1pY3JvcGhvbmVQcm9jKGludCBzYW1wbGVSYXRlKQoreworICAgIEFTU0VS
VChpc01haW5UaHJlYWQoKSk7CisKKyAgICBBVVJlbmRlckNhbGxiYWNrU3RydWN0IGNhbGxiYWNr
ID0geyBtaWNyb3Bob25lQ2FsbGJhY2ssIHRoaXMgfTsKKyAgICBpZiAoYXV0byBlcnIgPSBtX2lv
VW5pdC0+c2V0KGtBdWRpb091dHB1dFVuaXRQcm9wZXJ0eV9TZXRJbnB1dENhbGxiYWNrLCBrQXVk
aW9Vbml0U2NvcGVfR2xvYmFsLCBpbnB1dEJ1cywgJmNhbGxiYWNrLCBzaXplb2YoY2FsbGJhY2sp
KSkgeworICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihXZWJSVEMsICJDb3JlQXVkaW9TaGFyZWRV
bml0Ojpjb25maWd1cmVNaWNyb3Bob25lUHJvYyglcCkgdW5hYmxlIHRvIHNldCB2cGlvIHVuaXQg
bWljIHByb2MsIGVycm9yICVkICglLjRzKSIsIHRoaXMsIChpbnQpZXJyLCAoY2hhciopJmVycik7
CisgICAgICAgIHJldHVybiBlcnI7CisgICAgfQorCisgICAgQXVkaW9TdHJlYW1CYXNpY0Rlc2Ny
aXB0aW9uIG1pY3JvcGhvbmVQcm9jRm9ybWF0ID0geyB9OworCisgICAgVUludDMyIHNpemUgPSBz
aXplb2YobWljcm9waG9uZVByb2NGb3JtYXQpOworICAgIGlmIChhdXRvIGVyciA9IG1faW9Vbml0
LT5nZXQoa0F1ZGlvVW5pdFByb3BlcnR5X1N0cmVhbUZvcm1hdCwga0F1ZGlvVW5pdFNjb3BlX091
dHB1dCwgaW5wdXRCdXMsICZtaWNyb3Bob25lUHJvY0Zvcm1hdCwgJnNpemUpKSB7CisgICAgICAg
IFJFTEVBU0VfTE9HX0VSUk9SKFdlYlJUQywgIkNvcmVBdWRpb1NoYXJlZFVuaXQ6OmNvbmZpZ3Vy
ZU1pY3JvcGhvbmVQcm9jKCVwKSB1bmFibGUgdG8gZ2V0IG91dHB1dCBzdHJlYW0gZm9ybWF0LCBl
cnJvciAlZCAoJS40cykiLCB0aGlzLCAoaW50KWVyciwgKGNoYXIqKSZlcnIpOworICAgICAgICBy
ZXR1cm4gZXJyOworICAgIH0KKworICAgIG1pY3JvcGhvbmVQcm9jRm9ybWF0Lm1TYW1wbGVSYXRl
ID0gc2FtcGxlUmF0ZTsKKyAgICBpZiAoYXV0byBlcnIgPSBtX2lvVW5pdC0+c2V0KGtBdWRpb1Vu
aXRQcm9wZXJ0eV9TdHJlYW1Gb3JtYXQsIGtBdWRpb1VuaXRTY29wZV9PdXRwdXQsIGlucHV0QnVz
LCAmbWljcm9waG9uZVByb2NGb3JtYXQsIHNpemUpKSB7CisgICAgICAgIFJFTEVBU0VfTE9HX0VS
Uk9SKFdlYlJUQywgIkNvcmVBdWRpb1NoYXJlZFVuaXQ6OmNvbmZpZ3VyZU1pY3JvcGhvbmVQcm9j
KCVwKSB1bmFibGUgdG8gc2V0IG91dHB1dCBzdHJlYW0gZm9ybWF0LCBlcnJvciAlZCAoJS40cyki
LCB0aGlzLCAoaW50KWVyciwgKGNoYXIqKSZlcnIpOworICAgICAgICByZXR1cm4gZXJyOworICAg
IH0KKworICAgIG1fbWljcm9waG9uZVNhbXBsZUJ1ZmZlciA9IEF1ZGlvU2FtcGxlQnVmZmVyTGlz
dDo6Y3JlYXRlKG1pY3JvcGhvbmVQcm9jRm9ybWF0LCBwcmVmZXJyZWRJT0J1ZmZlclNpemUoKSAq
IDIpOworICAgIG1fbWljcm9waG9uZVByb2NGb3JtYXQgPSBtaWNyb3Bob25lUHJvY0Zvcm1hdDsK
KworICAgIHJldHVybiBub0VycjsKK30KKworT1NTdGF0dXMgQ29yZUF1ZGlvU2hhcmVkVW5pdDo6
Y29uZmlndXJlU3BlYWtlclByb2MoaW50IHNhbXBsZVJhdGUpCit7CisgICAgQVNTRVJUKGlzTWFp
blRocmVhZCgpKTsKKworICAgIEFVUmVuZGVyQ2FsbGJhY2tTdHJ1Y3QgY2FsbGJhY2sgPSB7IHNw
ZWFrZXJDYWxsYmFjaywgdGhpcyB9OworICAgIGlmIChhdXRvIGVyciA9IG1faW9Vbml0LT5zZXQo
a0F1ZGlvVW5pdFByb3BlcnR5X1NldFJlbmRlckNhbGxiYWNrLCBrQXVkaW9Vbml0U2NvcGVfSW5w
dXQsIG91dHB1dEJ1cywgJmNhbGxiYWNrLCBzaXplb2YoY2FsbGJhY2spKSkgeworICAgICAgICBS
RUxFQVNFX0xPR19FUlJPUihXZWJSVEMsICJDb3JlQXVkaW9TaGFyZWRVbml0Ojpjb25maWd1cmVT
cGVha2VyUHJvYyglcCkgdW5hYmxlIHRvIHNldCB2cGlvIHVuaXQgc3BlYWtlciBwcm9jLCBlcnJv
ciAlZCAoJS40cykiLCB0aGlzLCAoaW50KWVyciwgKGNoYXIqKSZlcnIpOworICAgICAgICByZXR1
cm4gZXJyOworICAgIH0KKworICAgIEF1ZGlvU3RyZWFtQmFzaWNEZXNjcmlwdGlvbiBzcGVha2Vy
UHJvY0Zvcm1hdDsKKyAgICBVSW50MzIgc2l6ZSA9IHNpemVvZihzcGVha2VyUHJvY0Zvcm1hdCk7
CisgICAgeworICAgICAgICBMb2NrZXIgbG9ja2VyIHsgbV9zcGVha2VyU2FtcGxlc1Byb2R1Y2Vy
TG9jayB9OworICAgICAgICBpZiAobV9zcGVha2VyU2FtcGxlc1Byb2R1Y2VyKSB7CisgICAgICAg
ICAgICBzcGVha2VyUHJvY0Zvcm1hdCA9IG1fc3BlYWtlclNhbXBsZXNQcm9kdWNlci0+Zm9ybWF0
KCkuc3RyZWFtRGVzY3JpcHRpb24oKTsKKyAgICAgICAgICAgIEFTU0VSVChzcGVha2VyUHJvY0Zv
cm1hdC5tU2FtcGxlUmF0ZSA9PSBzYW1wbGVSYXRlKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgIGlmIChhdXRvIGVyciA9IG1faW9Vbml0LT5nZXQoa0F1ZGlvVW5pdFByb3BlcnR5X1N0
cmVhbUZvcm1hdCwga0F1ZGlvVW5pdFNjb3BlX0lucHV0LCBvdXRwdXRCdXMsICZzcGVha2VyUHJv
Y0Zvcm1hdCwgJnNpemUpKSB7CisgICAgICAgICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoV2Vi
UlRDLCAiQ29yZUF1ZGlvU2hhcmVkVW5pdDo6Y29uZmlndXJlU3BlYWtlclByb2MoJXApIHVuYWJs
ZSB0byBnZXQgaW5wdXQgc3RyZWFtIGZvcm1hdCwgZXJyb3IgJWQgKCUuNHMpIiwgdGhpcywgKGlu
dCllcnIsIChjaGFyKikmZXJyKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIHNwZWFrZXJQcm9jRm9ybWF0Lm1TYW1wbGVS
YXRlID0gc2FtcGxlUmF0ZTsKKworICAgIGlmIChhdXRvIGVyciA9IG1faW9Vbml0LT5zZXQoa0F1
ZGlvVW5pdFByb3BlcnR5X1N0cmVhbUZvcm1hdCwga0F1ZGlvVW5pdFNjb3BlX0lucHV0LCBvdXRw
dXRCdXMsICZzcGVha2VyUHJvY0Zvcm1hdCwgc2l6ZSkpIHsKKyAgICAgICAgUkVMRUFTRV9MT0df
RVJST1IoV2ViUlRDLCAiQ29yZUF1ZGlvU2hhcmVkVW5pdDo6Y29uZmlndXJlU3BlYWtlclByb2Mo
JXApIHVuYWJsZSB0byBnZXQgaW5wdXQgc3RyZWFtIGZvcm1hdCwgZXJyb3IgJWQgKCUuNHMpIiwg
dGhpcywgKGludCllcnIsIChjaGFyKikmZXJyKTsKKyAgICAgICAgcmV0dXJuIGVycjsKKyAgICB9
CisKKyAgICBtX3NwZWFrZXJQcm9jRm9ybWF0ID0gc3BlYWtlclByb2NGb3JtYXQ7CisKKyAgICBy
ZXR1cm4gbm9FcnI7Cit9CisKKyNpZiAhTE9HX0RJU0FCTEVECit2b2lkIENvcmVBdWRpb1NoYXJl
ZFVuaXQ6OmNoZWNrVGltZXN0YW1wcyhjb25zdCBBdWRpb1RpbWVTdGFtcCYgdGltZVN0YW1wLCB1
aW50NjRfdCBzYW1wbGVUaW1lLCBkb3VibGUgaG9zdFRpbWUpCit7CisgICAgaWYgKCF0aW1lU3Rh
bXAubVNhbXBsZVRpbWUgfHwgc2FtcGxlVGltZSA9PSBtX2xhdGVzdE1pY1RpbWVTdGFtcCB8fCAh
aG9zdFRpbWUpCisgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFdlYlJUQywgIkNvcmVBdWRpb1No
YXJlZFVuaXQ6OmNoZWNrVGltZXN0YW1wczogdW51c3VhbCB0aW1lc3RhbXBzLCBzYW1wbGUgdGlt
ZSA9ICVsbGQsIHByZXZpb3VzIHNhbXBsZSB0aW1lID0gJWxsZCwgaG9zdFRpbWUgJWYiLCBzYW1w
bGVUaW1lLCBtX2xhdGVzdE1pY1RpbWVTdGFtcCwgaG9zdFRpbWUpOworfQorI2VuZGlmCisKK09T
U3RhdHVzIENvcmVBdWRpb1NoYXJlZFVuaXQ6OnByb3ZpZGVTcGVha2VyRGF0YShBdWRpb1VuaXRS
ZW5kZXJBY3Rpb25GbGFncyYgZmxhZ3MsIGNvbnN0IEF1ZGlvVGltZVN0YW1wJiB0aW1lU3RhbXAs
IFVJbnQzMiAvKmluQnVzTnVtYmVyKi8sIFVJbnQzMiBpbk51bWJlckZyYW1lcywgQXVkaW9CdWZm
ZXJMaXN0JiBpb0RhdGEpCit7CisgICAgaWYgKG1faXNSZWNvbmZpZ3VyaW5nIHx8ICFtX3NwZWFr
ZXJTYW1wbGVzUHJvZHVjZXJMb2NrLnRyeUxvY2soKSkgeworICAgICAgICBBdWRpb1NhbXBsZUJ1
ZmZlckxpc3Q6Onplcm9BQkwoaW9EYXRhLCBzdGF0aWNfY2FzdDxzaXplX3Q+KGluTnVtYmVyRnJh
bWVzICogbV9zcGVha2VyUHJvY0Zvcm1hdC5ieXRlc1BlckZyYW1lKCkpKTsKKyAgICAgICAgZmxh
Z3MgPSBrQXVkaW9Vbml0UmVuZGVyQWN0aW9uX091dHB1dElzU2lsZW5jZTsKKyAgICAgICAgcmV0
dXJuIG5vRXJyOworICAgIH0KKworICAgIExvY2tlciBsb2NrZXIgeyBBZG9wdExvY2ssIG1fc3Bl
YWtlclNhbXBsZXNQcm9kdWNlckxvY2sgfTsKKyAgICBpZiAoIW1fc3BlYWtlclNhbXBsZXNQcm9k
dWNlcikgeworICAgICAgICBBdWRpb1NhbXBsZUJ1ZmZlckxpc3Q6Onplcm9BQkwoaW9EYXRhLCBz
dGF0aWNfY2FzdDxzaXplX3Q+KGluTnVtYmVyRnJhbWVzICogbV9zcGVha2VyUHJvY0Zvcm1hdC5i
eXRlc1BlckZyYW1lKCkpKTsKKyAgICAgICAgZmxhZ3MgPSBrQXVkaW9Vbml0UmVuZGVyQWN0aW9u
X091dHB1dElzU2lsZW5jZTsKKyAgICAgICAgcmV0dXJuIG5vRXJyOworICAgIH0KKyAgICByZXR1
cm4gbV9zcGVha2VyU2FtcGxlc1Byb2R1Y2VyLT5wcm9kdWNlU3BlYWtlclNhbXBsZXMoaW5OdW1i
ZXJGcmFtZXMsIGlvRGF0YSwgdGltZVN0YW1wLm1TYW1wbGVUaW1lLCB0aW1lU3RhbXAubUhvc3RU
aW1lLCBmbGFncyk7Cit9CisKK09TU3RhdHVzIENvcmVBdWRpb1NoYXJlZFVuaXQ6OnNwZWFrZXJD
YWxsYmFjayh2b2lkICppblJlZkNvbiwgQXVkaW9Vbml0UmVuZGVyQWN0aW9uRmxhZ3MqIGlvQWN0
aW9uRmxhZ3MsIGNvbnN0IEF1ZGlvVGltZVN0YW1wKiBpblRpbWVTdGFtcCwgVUludDMyIGluQnVz
TnVtYmVyLCBVSW50MzIgaW5OdW1iZXJGcmFtZXMsIEF1ZGlvQnVmZmVyTGlzdCogaW9EYXRhKQor
eworICAgIEFTU0VSVChpb0FjdGlvbkZsYWdzKTsKKyAgICBBU1NFUlQoaW5UaW1lU3RhbXApOwor
ICAgIGF1dG8gZGF0YVNvdXJjZSA9IHN0YXRpY19jYXN0PENvcmVBdWRpb1NoYXJlZFVuaXQqPihp
blJlZkNvbik7CisgICAgcmV0dXJuIGRhdGFTb3VyY2UtPnByb3ZpZGVTcGVha2VyRGF0YSgqaW9B
Y3Rpb25GbGFncywgKmluVGltZVN0YW1wLCBpbkJ1c051bWJlciwgaW5OdW1iZXJGcmFtZXMsICpp
b0RhdGEpOworfQorCitPU1N0YXR1cyBDb3JlQXVkaW9TaGFyZWRVbml0Ojpwcm9jZXNzTWljcm9w
aG9uZVNhbXBsZXMoQXVkaW9Vbml0UmVuZGVyQWN0aW9uRmxhZ3MmIGlvQWN0aW9uRmxhZ3MsIGNv
bnN0IEF1ZGlvVGltZVN0YW1wJiB0aW1lU3RhbXAsIFVJbnQzMiBpbkJ1c051bWJlciwgVUludDMy
IGluTnVtYmVyRnJhbWVzLCBBdWRpb0J1ZmZlckxpc3QqIC8qaW9EYXRhKi8pCit7CisgICAgKytt
X21pY3JvcGhvbmVQcm9jc0NhbGxlZDsKKworICAgIGlmIChtX2lzUmVjb25maWd1cmluZykKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gUHVsbCB0aHJvdWdoIHRoZSB2cGlvIHVuaXQg
dG8gb3VyIG1pYyBidWZmZXIuCisgICAgbV9taWNyb3Bob25lU2FtcGxlQnVmZmVyLT5yZXNldCgp
OworICAgIEF1ZGlvQnVmZmVyTGlzdCYgYnVmZmVyTGlzdCA9IG1fbWljcm9waG9uZVNhbXBsZUJ1
ZmZlci0+YnVmZmVyTGlzdCgpOworICAgIGlmIChhdXRvIGVyciA9IG1faW9Vbml0LT5yZW5kZXIo
JmlvQWN0aW9uRmxhZ3MsICZ0aW1lU3RhbXAsIGluQnVzTnVtYmVyLCBpbk51bWJlckZyYW1lcywg
JmJ1ZmZlckxpc3QpKSB7CisgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFdlYlJUQywgIkNvcmVB
dWRpb1NoYXJlZFVuaXQ6OnByb2Nlc3NNaWNyb3Bob25lU2FtcGxlcyglcCkgQXVkaW9Vbml0UmVu
ZGVyIGZhaWxlZCB3aXRoIGVycm9yICVkICglLjRzKSwgYnVmZmVyTGlzdCBzaXplICVkLCBpbk51
bWJlckZyYW1lcyAlZCAiLCB0aGlzLCAoaW50KWVyciwgKGNoYXIqKSZlcnIsIChpbnQpYnVmZmVy
TGlzdC5tQnVmZmVyc1swXS5tRGF0YUJ5dGVTaXplLCAoaW50KWluTnVtYmVyRnJhbWVzKTsKKyAg
ICAgICAgaWYgKGVyciA9PSBrQXVkaW9fUGFyYW1FcnJvcikgeworICAgICAgICAgICAgLy8gT3Vy
IGJ1ZmZlciBtaWdodCBiZSB0b28gc21hbGwsIHRoZSBwcmVmZXJyZWQgYnVmZmVyIHNpemUgb3Ig
c2FtcGxlIHJhdGUgbWlnaHQgaGF2ZSBjaGFuZ2VkLgorICAgICAgICAgICAgY2FsbE9uTWFpblRo
cmVhZChbXSB7CisgICAgICAgICAgICAgICAgQ29yZUF1ZGlvU2hhcmVkVW5pdDo6c2luZ2xldG9u
KCkucmVjb25maWd1cmUoKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9CisgICAgICAgIC8v
IFdlIHJldHVybiBlYXJseSBzbyB0aGF0IGlmIHRoaXMgZXJyb3IgaGFwcGVucywgd2UgZG8gbm90
IGluY3JlbWVudCBtX21pY3JvcGhvbmVQcm9jc0NhbGxlZCBhbmQgZmFpbCB0aGUgY2FwdHVyZSBv
bmNlIHRpbWVyIGtpY2tzIGluLgorICAgICAgICByZXR1cm4gZXJyOworICAgIH0KKworICAgIGlm
ICghaXNQcm9kdWNpbmdNaWNyb3Bob25lU2FtcGxlcygpKQorICAgICAgICByZXR1cm4gbm9FcnI7
CisKKyAgICBkb3VibGUgYWRqdXN0ZWRIb3N0VGltZSA9IG1fRFRTQ29udmVyc2lvblJhdGlvICog
dGltZVN0YW1wLm1Ib3N0VGltZTsKKyAgICB1aW50NjRfdCBzYW1wbGVUaW1lID0gdGltZVN0YW1w
Lm1TYW1wbGVUaW1lOworI2lmICFMT0dfRElTQUJMRUQKKyAgICBjaGVja1RpbWVzdGFtcHModGlt
ZVN0YW1wLCBzYW1wbGVUaW1lLCBhZGp1c3RlZEhvc3RUaW1lKTsKKyNlbmRpZgorICAgIG1fbGF0
ZXN0TWljVGltZVN0YW1wID0gc2FtcGxlVGltZTsKKyAgICBtX21pY3JvcGhvbmVTYW1wbGVCdWZm
ZXItPnNldFRpbWVzKGFkanVzdGVkSG9zdFRpbWUsIHNhbXBsZVRpbWUpOworCisgICAgaWYgKHZv
bHVtZSgpICE9IDEuMCkKKyAgICAgICAgbV9taWNyb3Bob25lU2FtcGxlQnVmZmVyLT5hcHBseUdh
aW4odm9sdW1lKCkpOworCisgICAgYXVkaW9TYW1wbGVzQXZhaWxhYmxlKE1lZGlhVGltZShzYW1w
bGVUaW1lLCBtX21pY3JvcGhvbmVQcm9jRm9ybWF0LnNhbXBsZVJhdGUoKSksIG1fbWljcm9waG9u
ZVNhbXBsZUJ1ZmZlci0+YnVmZmVyTGlzdCgpLCBtX21pY3JvcGhvbmVQcm9jRm9ybWF0LCBpbk51
bWJlckZyYW1lcyk7CisgICAgcmV0dXJuIG5vRXJyOworfQorCitPU1N0YXR1cyBDb3JlQXVkaW9T
aGFyZWRVbml0OjptaWNyb3Bob25lQ2FsbGJhY2sodm9pZCAqaW5SZWZDb24sIEF1ZGlvVW5pdFJl
bmRlckFjdGlvbkZsYWdzKiBpb0FjdGlvbkZsYWdzLCBjb25zdCBBdWRpb1RpbWVTdGFtcCogaW5U
aW1lU3RhbXAsIFVJbnQzMiBpbkJ1c051bWJlciwgVUludDMyIGluTnVtYmVyRnJhbWVzLCBBdWRp
b0J1ZmZlckxpc3QqIGlvRGF0YSkKK3sKKyAgICBBU1NFUlQoaW9BY3Rpb25GbGFncyk7CisgICAg
QVNTRVJUKGluVGltZVN0YW1wKTsKKyAgICBDb3JlQXVkaW9TaGFyZWRVbml0KiBkYXRhU291cmNl
ID0gc3RhdGljX2Nhc3Q8Q29yZUF1ZGlvU2hhcmVkVW5pdCo+KGluUmVmQ29uKTsKKyAgICByZXR1
cm4gZGF0YVNvdXJjZS0+cHJvY2Vzc01pY3JvcGhvbmVTYW1wbGVzKCppb0FjdGlvbkZsYWdzLCAq
aW5UaW1lU3RhbXAsIGluQnVzTnVtYmVyLCBpbk51bWJlckZyYW1lcywgaW9EYXRhKTsKK30KKwor
dm9pZCBDb3JlQXVkaW9TaGFyZWRVbml0OjpjbGVhbnVwQXVkaW9Vbml0KCkKK3sKKyAgICBpZiAo
bV9pb1VuaXRJbml0aWFsaXplZCkgeworICAgICAgICBBU1NFUlQobV9pb1VuaXQpOworICAgICAg
ICBpZiAoYXV0byBlcnIgPSBtX2lvVW5pdC0+dW5pbml0aWFsaXplKCkpCisgICAgICAgICAgICBS
RUxFQVNFX0xPR19FUlJPUihXZWJSVEMsICJDb3JlQXVkaW9TaGFyZWRVbml0OjpjbGVhbnVwQXVk
aW9Vbml0KCVwKSBBdWRpb1VuaXRVbmluaXRpYWxpemUgZmFpbGVkIHdpdGggZXJyb3IgJWQgKCUu
NHMpIiwgdGhpcywgKGludCllcnIsIChjaGFyKikmZXJyKTsKKyAgICAgICAgbV9pb1VuaXRJbml0
aWFsaXplZCA9IGZhbHNlOworICAgIH0KKworICAgIG1faW9Vbml0ID0gbnVsbHB0cjsKKworICAg
IG1fbWljcm9waG9uZVNhbXBsZUJ1ZmZlciA9IG51bGxwdHI7Cit9CisKK3ZvaWQgQ29yZUF1ZGlv
U2hhcmVkVW5pdDo6ZGVsYXlTYW1wbGVzKFNlY29uZHMgc2Vjb25kcykKK3sKKyAgICBpZiAobV9p
b1VuaXQpCisgICAgICAgIG1faW9Vbml0LT5kZWxheVNhbXBsZXMoc2Vjb25kcyk7Cit9CisKK09T
U3RhdHVzIENvcmVBdWRpb1NoYXJlZFVuaXQ6OnJlY29uZmlndXJlQXVkaW9Vbml0KCkKK3sKKyAg
ICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIGlmICghaGFzQXVkaW9Vbml0KCkpCisgICAg
ICAgIHJldHVybiAwOworCisgICAgbV9pc1JlY29uZmlndXJpbmcgPSB0cnVlOworICAgIGF1dG8g
c2NvcGUgPSBtYWtlU2NvcGVFeGl0KFt0aGlzXSB7IG1faXNSZWNvbmZpZ3VyaW5nID0gZmFsc2U7
IH0pOworCisgICAgaWYgKG1faW9Vbml0U3RhcnRlZCkgeworICAgICAgICBpZiAoYXV0byBlcnIg
PSBtX2lvVW5pdC0+c3RvcCgpKSB7CisgICAgICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihXZWJS
VEMsICJDb3JlQXVkaW9TaGFyZWRVbml0OjpyZWNvbmZpZ3VyZUF1ZGlvVW5pdCglcCkgQXVkaW9P
dXRwdXRVbml0U3RvcCBmYWlsZWQgd2l0aCBlcnJvciAlZCAoJS40cykiLCB0aGlzLCAoaW50KWVy
ciwgKGNoYXIqKSZlcnIpOworICAgICAgICAgICAgcmV0dXJuIGVycjsKKyAgICAgICAgfQorICAg
IH0KKworICAgIGNsZWFudXBBdWRpb1VuaXQoKTsKKyAgICBpZiAoYXV0byBlcnIgPSBzZXR1cEF1
ZGlvVW5pdCgpKQorICAgICAgICByZXR1cm4gZXJyOworCisgICAgaWYgKG1faW9Vbml0U3RhcnRl
ZCkgeworICAgICAgICBpZiAoYXV0byBlcnIgPSBtX2lvVW5pdC0+c3RhcnQoKSkgeworICAgICAg
ICAgICAgUkVMRUFTRV9MT0dfRVJST1IoV2ViUlRDLCAiQ29yZUF1ZGlvU2hhcmVkVW5pdDo6cmVj
b25maWd1cmVBdWRpb1VuaXQoJXApIEF1ZGlvT3V0cHV0VW5pdFN0YXJ0IGZhaWxlZCB3aXRoIGVy
cm9yICVkICglLjRzKSIsIHRoaXMsIChpbnQpZXJyLCAoY2hhciopJmVycik7CisgICAgICAgICAg
ICByZXR1cm4gZXJyOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBub0VycjsKK30KKwor
T1NTdGF0dXMgQ29yZUF1ZGlvU2hhcmVkVW5pdDo6c3RhcnRJbnRlcm5hbCgpCit7CisgICAgQVNT
RVJUKGlzTWFpblRocmVhZCgpKTsKKworICAgIHNldElzUHJvZHVjaW5nTWljcm9waG9uZVNhbXBs
ZXModHJ1ZSk7CisKKyAgICBpZiAoIW1faW9Vbml0KSB7CisgICAgICAgIGlmIChhdXRvIGVyciA9
IHNldHVwQXVkaW9Vbml0KCkpIHsKKyAgICAgICAgICAgIGNsZWFudXBBdWRpb1VuaXQoKTsKKyAg
ICAgICAgICAgIEFTU0VSVCghbV9pb1VuaXQpOworICAgICAgICAgICAgcmV0dXJuIGVycjsKKyAg
ICAgICAgfQorICAgICAgICBBU1NFUlQobV9pb1VuaXQpOworICAgIH0KKworICAgIHVuZHVjaygp
OworCisgICAgeworICAgICAgICBMb2NrZXIgbG9ja2VyIHsgbV9zcGVha2VyU2FtcGxlc1Byb2R1
Y2VyTG9jayB9OworICAgICAgICBpZiAobV9zcGVha2VyU2FtcGxlc1Byb2R1Y2VyKQorICAgICAg
ICAgICAgbV9zcGVha2VyU2FtcGxlc1Byb2R1Y2VyLT5jYXB0dXJlVW5pdElzU3RhcnRpbmcoKTsK
KyAgICB9CisKKyAgICBpZiAoYXV0byBlcnIgPSBtX2lvVW5pdC0+c3RhcnQoKSkgeworICAgICAg
ICB7CisgICAgICAgICAgICBMb2NrZXIgbG9ja2VyIHsgbV9zcGVha2VyU2FtcGxlc1Byb2R1Y2Vy
TG9jayB9OworICAgICAgICAgICAgaWYgKG1fc3BlYWtlclNhbXBsZXNQcm9kdWNlcikKKyAgICAg
ICAgICAgICAgICBtX3NwZWFrZXJTYW1wbGVzUHJvZHVjZXItPmNhcHR1cmVVbml0SGFzU3RvcHBl
ZCgpOworICAgICAgICB9CisKKyAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoV2ViUlRDLCAiQ29y
ZUF1ZGlvU2hhcmVkVW5pdDo6c3RhcnQoJXApIEF1ZGlvT3V0cHV0VW5pdFN0YXJ0IGZhaWxlZCB3
aXRoIGVycm9yICVkICglLjRzKSIsIHRoaXMsIChpbnQpZXJyLCAoY2hhciopJmVycik7CisgICAg
ICAgIGNsZWFudXBBdWRpb1VuaXQoKTsKKyAgICAgICAgQVNTRVJUKCFtX2lvVW5pdCk7CisgICAg
ICAgIHJldHVybiBlcnI7CisgICAgfQorCisgICAgbV9pb1VuaXRTdGFydGVkID0gdHJ1ZTsKKwor
ICAgIG1fdmVyaWZ5Q2FwdHVyaW5nVGltZXIuc3RhcnRSZXBlYXRpbmcodmVyaWZ5Q2FwdHVyZUlu
dGVydmFsKCkpOworICAgIG1fbWljcm9waG9uZVByb2NzQ2FsbGVkID0gMDsKKyAgICBtX21pY3Jv
cGhvbmVQcm9jc0NhbGxlZExhc3RUaW1lID0gMDsKKworICAgIHJldHVybiBub0VycjsKK30KKwor
dm9pZCBDb3JlQXVkaW9TaGFyZWRVbml0Ojppc1Byb2R1Y2luZ01pY3JvcGhvbmVTYW1wbGVzQ2hh
bmdlZCgpCit7CisgICAgaWYgKCFpc1Byb2R1Y2luZ0RhdGEoKSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIG1fdmVyaWZ5Q2FwdHVyaW5nVGltZXIuc3RhcnRSZXBlYXRpbmcodmVyaWZ5Q2FwdHVyZUlu
dGVydmFsKCkpOworfQorCit2b2lkIENvcmVBdWRpb1NoYXJlZFVuaXQ6OnZhbGlkYXRlT3V0cHV0
RGV2aWNlKHVpbnQzMl90IGN1cnJlbnRPdXRwdXREZXZpY2VJRCkKK3sKKyNpZiBQTEFURk9STShN
QUMpCisgICAgaWYgKCFtX2lvVW5pdCkKKyAgICAgICAgcmV0dXJuOworCisgICAgdWludDMyX3Qg
Y3VycmVudERlZmF1bHRPdXRwdXREZXZpY2VJRCA9IDA7CisgICAgaWYgKGF1dG8gZXJyID0gbV9p
b1VuaXQtPmRlZmF1bHRPdXRwdXREZXZpY2UoJmN1cnJlbnREZWZhdWx0T3V0cHV0RGV2aWNlSUQp
KQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIWN1cnJlbnREZWZhdWx0T3V0cHV0RGV2aWNl
SUQgfHwgY3VycmVudE91dHB1dERldmljZUlEID09IGN1cnJlbnREZWZhdWx0T3V0cHV0RGV2aWNl
SUQpCisgICAgICAgIHJldHVybjsKKworICAgIHJlY29uZmlndXJlKCk7CisjZWxzZQorICAgIFVO
VVNFRF9QQVJBTShjdXJyZW50T3V0cHV0RGV2aWNlSUQpOworI2VuZGlmCit9CisKK3ZvaWQgQ29y
ZUF1ZGlvU2hhcmVkVW5pdDo6dmVyaWZ5SXNDYXB0dXJpbmcoKQoreworICAgIGlmIChtX21pY3Jv
cGhvbmVQcm9jc0NhbGxlZExhc3RUaW1lICE9IG1fbWljcm9waG9uZVByb2NzQ2FsbGVkKSB7Cisg
ICAgICAgIG1fbWljcm9waG9uZVByb2NzQ2FsbGVkTGFzdFRpbWUgPSBtX21pY3JvcGhvbmVQcm9j
c0NhbGxlZDsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFJFTEVBU0VfTE9HX0VSUk9S
KFdlYlJUQywgIkNvcmVBdWRpb1NoYXJlZFVuaXQ6OnZlcmlmeUlzQ2FwdHVyaW5nIC0gbm8gYXVk
aW8gcmVjZWl2ZWQgaW4gJWQgc2Vjb25kcywgZmFpbGluZyIsIHN0YXRpY19jYXN0PGludD4obV92
ZXJpZnlDYXB0dXJpbmdUaW1lci5yZXBlYXRJbnRlcnZhbCgpLnZhbHVlKCkpKTsKKyAgICBjYXB0
dXJlRmFpbGVkKCk7Cit9CisKK3ZvaWQgQ29yZUF1ZGlvU2hhcmVkVW5pdDo6c3RvcEludGVybmFs
KCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworCisgICAgbV92ZXJpZnlDYXB0dXJp
bmdUaW1lci5zdG9wKCk7CisKKyAgICBpZiAoIW1faW9Vbml0IHx8ICFtX2lvVW5pdFN0YXJ0ZWQp
CisgICAgICAgIHJldHVybjsKKworICAgIGlmIChhdXRvIGVyciA9IG1faW9Vbml0LT5zdG9wKCkp
IHsKKyAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoV2ViUlRDLCAiQ29yZUF1ZGlvU2hhcmVkVW5p
dDo6c3RvcCglcCkgQXVkaW9PdXRwdXRVbml0U3RvcCBmYWlsZWQgd2l0aCBlcnJvciAlZCAoJS40
cykiLCB0aGlzLCAoaW50KWVyciwgKGNoYXIqKSZlcnIpOworICAgICAgICByZXR1cm47CisgICAg
fQorICAgIHsKKyAgICAgICAgTG9ja2VyIGxvY2tlciB7IG1fc3BlYWtlclNhbXBsZXNQcm9kdWNl
ckxvY2sgfTsKKyAgICAgICAgaWYgKG1fc3BlYWtlclNhbXBsZXNQcm9kdWNlcikKKyAgICAgICAg
ICAgIG1fc3BlYWtlclNhbXBsZXNQcm9kdWNlci0+Y2FwdHVyZVVuaXRIYXNTdG9wcGVkKCk7Cisg
ICAgfQorCisgICAgbV9pb1VuaXRTdGFydGVkID0gZmFsc2U7Cit9CisKK3ZvaWQgQ29yZUF1ZGlv
U2hhcmVkVW5pdDo6cmVnaXN0ZXJTcGVha2VyU2FtcGxlc1Byb2R1Y2VyKENvcmVBdWRpb1NwZWFr
ZXJTYW1wbGVzUHJvZHVjZXImIHByb2R1Y2VyKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQo
KSk7CisKKyAgICBzZXRJc1JlbmRlcmluZ0F1ZGlvKHRydWUpOworCisgICAgQ29yZUF1ZGlvU3Bl
YWtlclNhbXBsZXNQcm9kdWNlciogb2xkUHJvZHVjZXI7CisgICAgeworICAgICAgICBMb2NrZXIg
bG9ja2VyIHsgbV9zcGVha2VyU2FtcGxlc1Byb2R1Y2VyTG9jayB9OworICAgICAgICBvbGRQcm9k
dWNlciA9IG1fc3BlYWtlclNhbXBsZXNQcm9kdWNlcjsKKyAgICAgICAgbV9zcGVha2VyU2FtcGxl
c1Byb2R1Y2VyID0gJnByb2R1Y2VyOworICAgIH0KKyAgICBpZiAob2xkUHJvZHVjZXIgJiYgb2xk
UHJvZHVjZXIgIT0gJnByb2R1Y2VyKQorICAgICAgICBvbGRQcm9kdWNlci0+Y2FwdHVyZVVuaXRI
YXNTdG9wcGVkKCk7CisKKyAgICBpZiAoaGFzQXVkaW9Vbml0KCkgJiYgcHJvZHVjZXIuZm9ybWF0
KCkgIT0gbV9zcGVha2VyUHJvY0Zvcm1hdCkKKyAgICAgICAgcmVjb25maWd1cmUoKTsKK30KKwor
dm9pZCBDb3JlQXVkaW9TaGFyZWRVbml0Ojp1bnJlZ2lzdGVyU3BlYWtlclNhbXBsZXNQcm9kdWNl
cihDb3JlQXVkaW9TcGVha2VyU2FtcGxlc1Byb2R1Y2VyJiBwcm9kdWNlcikKK3sKKyAgICBBU1NF
UlQoaXNNYWluVGhyZWFkKCkpOworCisgICAgeworICAgICAgICBMb2NrZXIgbG9ja2VyIHsgbV9z
cGVha2VyU2FtcGxlc1Byb2R1Y2VyTG9jayB9OworICAgICAgICBpZiAobV9zcGVha2VyU2FtcGxl
c1Byb2R1Y2VyICE9ICZwcm9kdWNlcikKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgbV9z
cGVha2VyU2FtcGxlc1Byb2R1Y2VyID0gbnVsbHB0cjsKKyAgICB9CisKKyAgICBzZXRJc1JlbmRl
cmluZ0F1ZGlvKGZhbHNlKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYg
Ly8gRU5BQkxFKE1FRElBX1NUUkVBTSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21lZGlhc3RyZWFtL21hYy9Db3JlQXVkaW9TaGFyZWRVbml0LmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQ29yZUF1ZGlvU2hhcmVkVW5pdC5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmZiNGI4Y2JjYjBhNWM2MGJmODc3MTI1MDJmMjE1ZjUzNjFhZjNjYzgKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQ29yZUF1ZGlv
U2hhcmVkVW5pdC5oCkBAIC0wLDAgKzEsMTU1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3
LTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShNRURJ
QV9TVFJFQU0pCisKKyNpbmNsdWRlICJBdWRpb1NhbXBsZURhdGFTb3VyY2UuaCIKKyNpbmNsdWRl
ICJCYXNlQXVkaW9TaGFyZWRVbml0LmgiCisjaW5jbHVkZSAiQ0FBdWRpb1N0cmVhbURlc2NyaXB0
aW9uLmgiCisjaW5jbHVkZSAiVGltZXIuaCIKKwordHlwZWRlZiBVSW50MzIgQXVkaW9Vbml0UHJv
cGVydHlJRDsKK3R5cGVkZWYgVUludDMyIEF1ZGlvVW5pdFNjb3BlOwordHlwZWRlZiBVSW50MzIg
QXVkaW9Vbml0RWxlbWVudDsKK3R5cGVkZWYgVUludDMyIEF1ZGlvVW5pdFJlbmRlckFjdGlvbkZs
YWdzOworCitzdHJ1Y3QgQXVkaW9CdWZmZXJMaXN0Oworc3RydWN0IEF1ZGlvVGltZVN0YW1wOwor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENvcmVBdWRpb1NwZWFrZXJTYW1wbGVzUHJv
ZHVjZXI7CisKK2NsYXNzIENvcmVBdWRpb1NoYXJlZFVuaXQgZmluYWwgOiBwdWJsaWMgQmFzZUF1
ZGlvU2hhcmVkVW5pdCB7CitwdWJsaWM6CisgICAgY2xhc3MgSW50ZXJuYWxVbml0IHsKKyAgICBw
dWJsaWM6CisgICAgICAgIHZpcnR1YWwgfkludGVybmFsVW5pdCgpID0gZGVmYXVsdDsKKyAgICAg
ICAgdmlydHVhbCBPU1N0YXR1cyBpbml0aWFsaXplKCkgPSAwOworICAgICAgICB2aXJ0dWFsIE9T
U3RhdHVzIHVuaW5pdGlhbGl6ZSgpID0gMDsKKyAgICAgICAgdmlydHVhbCBPU1N0YXR1cyBzdGFy
dCgpID0gMDsKKyAgICAgICAgdmlydHVhbCBPU1N0YXR1cyBzdG9wKCkgPSAwOworICAgICAgICB2
aXJ0dWFsIE9TU3RhdHVzIHNldChBdWRpb1VuaXRQcm9wZXJ0eUlELCBBdWRpb1VuaXRTY29wZSwg
QXVkaW9Vbml0RWxlbWVudCwgY29uc3Qgdm9pZCosIFVJbnQzMikgPSAwOworICAgICAgICB2aXJ0
dWFsIE9TU3RhdHVzIGdldChBdWRpb1VuaXRQcm9wZXJ0eUlELCBBdWRpb1VuaXRTY29wZSwgQXVk
aW9Vbml0RWxlbWVudCwgdm9pZCosIFVJbnQzMiopID0gMDsKKyAgICAgICAgdmlydHVhbCBPU1N0
YXR1cyByZW5kZXIoQXVkaW9Vbml0UmVuZGVyQWN0aW9uRmxhZ3MqLCBjb25zdCBBdWRpb1RpbWVT
dGFtcCosIFVJbnQzMiwgVUludDMyLCBBdWRpb0J1ZmZlckxpc3QqKSA9IDA7CisgICAgICAgIHZp
cnR1YWwgT1NTdGF0dXMgZGVmYXVsdElucHV0RGV2aWNlKHVpbnQzMl90KikgPSAwOworICAgICAg
ICB2aXJ0dWFsIE9TU3RhdHVzIGRlZmF1bHRPdXRwdXREZXZpY2UodWludDMyX3QqKSA9IDA7Cisg
ICAgICAgIHZpcnR1YWwgdm9pZCBkZWxheVNhbXBsZXMoU2Vjb25kcykgeyB9CisgICAgfTsKKwor
ICAgIHN0YXRpYyBDb3JlQXVkaW9TaGFyZWRVbml0JiB1bml0KCk7CisgICAgc3RhdGljIEJhc2VB
dWRpb1NoYXJlZFVuaXQmIHNpbmdsZXRvbigpICB7IHJldHVybiB1bml0KCk7IH0KKyAgICBDb3Jl
QXVkaW9TaGFyZWRVbml0KCk7CisKKyAgICB1c2luZyBDcmVhdGlvbkNhbGxiYWNrID0gRnVuY3Rp
b248RXhwZWN0ZWQ8VW5pcXVlUmVmPEludGVybmFsVW5pdD4sIE9TU3RhdHVzPigpPjsKKyAgICB2
b2lkIHNldEludGVybmFsVW5pdENyZWF0aW9uQ2FsbGJhY2soQ3JlYXRpb25DYWxsYmFjayYmIGNh
bGxiYWNrKSB7IG1fY3JlYXRpb25DYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spOyB9CisgICAg
dXNpbmcgR2V0U2FtcGxlUmF0ZUNhbGxiYWNrID0gRnVuY3Rpb248aW50KCk+OworICAgIHZvaWQg
c2V0SW50ZXJuYWxVbml0R2V0U2FtcGxlUmF0ZUNhbGxiYWNrKEdldFNhbXBsZVJhdGVDYWxsYmFj
ayYmIGNhbGxiYWNrKSB7IG1fZ2V0U2FtcGxlUmF0ZUNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFj
ayk7IH0KKworICAgIHZvaWQgcmVnaXN0ZXJTcGVha2VyU2FtcGxlc1Byb2R1Y2VyKENvcmVBdWRp
b1NwZWFrZXJTYW1wbGVzUHJvZHVjZXImKTsKKyAgICB2b2lkIHVucmVnaXN0ZXJTcGVha2VyU2Ft
cGxlc1Byb2R1Y2VyKENvcmVBdWRpb1NwZWFrZXJTYW1wbGVzUHJvZHVjZXImKTsKKyAgICBib29s
IGlzUnVubmluZygpIGNvbnN0IHsgcmV0dXJuIG1faW9Vbml0U3RhcnRlZDsgfQorICAgIHZvaWQg
c2V0U2FtcGxlUmF0ZVJhbmdlKENhcGFiaWxpdHlWYWx1ZU9yUmFuZ2UgcmFuZ2UpIHsgbV9zYW1w
bGVSYXRlQ2FwYWJpbGl0aWVzID0gcmFuZ2U7IH0KKworcHJpdmF0ZToKKyAgICBzdGF0aWMgc2l6
ZV90IHByZWZlcnJlZElPQnVmZmVyU2l6ZSgpOworCisgICAgQ2FwYWJpbGl0eVZhbHVlT3JSYW5n
ZSBzYW1wbGVSYXRlQ2FwYWNpdGllcygpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fc2FtcGxlUmF0
ZUNhcGFiaWxpdGllczsgfQorICAgIGNvbnN0IENBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbiYgbWlj
cm9waG9uZUZvcm1hdCgpIGNvbnN0IHsgcmV0dXJuIG1fbWljcm9waG9uZVByb2NGb3JtYXQ7IH0K
KworICAgIGJvb2wgaGFzQXVkaW9Vbml0KCkgY29uc3QgZmluYWwgeyByZXR1cm4gISFtX2lvVW5p
dDsgfQorICAgIHZvaWQgY2FwdHVyZURldmljZUNoYW5nZWQoKSBmaW5hbDsKKyAgICBPU1N0YXR1
cyByZWNvbmZpZ3VyZUF1ZGlvVW5pdCgpIGZpbmFsOworICAgIHZvaWQgZGVsYXlTYW1wbGVzKFNl
Y29uZHMpIGZpbmFsOworCisgICAgT1NTdGF0dXMgc2V0dXBBdWRpb1VuaXQoKTsKKyAgICB2b2lk
IGNsZWFudXBBdWRpb1VuaXQoKSBmaW5hbDsKKworICAgIE9TU3RhdHVzIHN0YXJ0SW50ZXJuYWwo
KSBmaW5hbDsKKyAgICB2b2lkIHN0b3BJbnRlcm5hbCgpIGZpbmFsOworICAgIGJvb2wgaXNQcm9k
dWNpbmdEYXRhKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9pb1VuaXRTdGFydGVkOyB9CisgICAg
dm9pZCBpc1Byb2R1Y2luZ01pY3JvcGhvbmVTYW1wbGVzQ2hhbmdlZCgpIGZpbmFsOworICAgIHZv
aWQgdmFsaWRhdGVPdXRwdXREZXZpY2UodWludDMyX3QgZGV2aWNlSUQpIGZpbmFsOworICAgIGlu
dCBhY3R1YWxTYW1wbGVSYXRlKCkgY29uc3QgZmluYWw7CisgICAgdm9pZCByZXNldFNhbXBsZVJh
dGUoKTsKKworICAgIE9TU3RhdHVzIGNvbmZpZ3VyZVNwZWFrZXJQcm9jKGludCBzYW1wbGVSYXRl
KTsKKyAgICBPU1N0YXR1cyBjb25maWd1cmVNaWNyb3Bob25lUHJvYyhpbnQgc2FtcGxlUmF0ZSk7
CisKKyAgICBzdGF0aWMgT1NTdGF0dXMgbWljcm9waG9uZUNhbGxiYWNrKHZvaWQqLCBBdWRpb1Vu
aXRSZW5kZXJBY3Rpb25GbGFncyosIGNvbnN0IEF1ZGlvVGltZVN0YW1wKiwgVUludDMyLCBVSW50
MzIsIEF1ZGlvQnVmZmVyTGlzdCopOworICAgIE9TU3RhdHVzIHByb2Nlc3NNaWNyb3Bob25lU2Ft
cGxlcyhBdWRpb1VuaXRSZW5kZXJBY3Rpb25GbGFncyYsIGNvbnN0IEF1ZGlvVGltZVN0YW1wJiwg
VUludDMyLCBVSW50MzIsIEF1ZGlvQnVmZmVyTGlzdCopOworCisgICAgc3RhdGljIE9TU3RhdHVz
IHNwZWFrZXJDYWxsYmFjayh2b2lkKiwgQXVkaW9Vbml0UmVuZGVyQWN0aW9uRmxhZ3MqLCBjb25z
dCBBdWRpb1RpbWVTdGFtcCosIFVJbnQzMiwgVUludDMyLCBBdWRpb0J1ZmZlckxpc3QqKTsKKyAg
ICBPU1N0YXR1cyBwcm92aWRlU3BlYWtlckRhdGEoQXVkaW9Vbml0UmVuZGVyQWN0aW9uRmxhZ3Mm
LCBjb25zdCBBdWRpb1RpbWVTdGFtcCYsIFVJbnQzMiwgVUludDMyLCBBdWRpb0J1ZmZlckxpc3Qm
KTsKKworICAgIHZvaWQgdW5kdWNrKCk7CisKKyAgICB2b2lkIHZlcmlmeUlzQ2FwdHVyaW5nKCk7
CisKKyAgICBTZWNvbmRzIHZlcmlmeUNhcHR1cmVJbnRlcnZhbCgpIHsgcmV0dXJuIGlzUHJvZHVj
aW5nTWljcm9waG9uZVNhbXBsZXMoKSA/IDEwX3MgOiAyX3M7IH0KKworICAgIENyZWF0aW9uQ2Fs
bGJhY2sgbV9jcmVhdGlvbkNhbGxiYWNrOworICAgIEdldFNhbXBsZVJhdGVDYWxsYmFjayBtX2dl
dFNhbXBsZVJhdGVDYWxsYmFjazsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxVbml0PiBt
X2lvVW5pdDsKKworICAgIC8vIE9ubHkgcmVhZC9tb2RpZmllZCBmcm9tIHRoZSBJTyB0aHJlYWQu
CisgICAgVmVjdG9yPFJlZjxBdWRpb1NhbXBsZURhdGFTb3VyY2U+PiBtX2FjdGl2ZVNvdXJjZXM7
CisKKyAgICBDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24gbV9taWNyb3Bob25lUHJvY0Zvcm1hdDsK
KyAgICBSZWZQdHI8QXVkaW9TYW1wbGVCdWZmZXJMaXN0PiBtX21pY3JvcGhvbmVTYW1wbGVCdWZm
ZXI7CisgICAgdWludDY0X3QgbV9sYXRlc3RNaWNUaW1lU3RhbXAgeyAwIH07CisKKyAgICBDQUF1
ZGlvU3RyZWFtRGVzY3JpcHRpb24gbV9zcGVha2VyUHJvY0Zvcm1hdDsKKworICAgIGRvdWJsZSBt
X0RUU0NvbnZlcnNpb25SYXRpbyB7IDAgfTsKKworICAgIGJvb2wgbV9pb1VuaXRJbml0aWFsaXpl
ZCB7IGZhbHNlIH07CisgICAgYm9vbCBtX2lvVW5pdFN0YXJ0ZWQgeyBmYWxzZSB9OworCisgICAg
bXV0YWJsZSBzdGQ6OnVuaXF1ZV9wdHI8UmVhbHRpbWVNZWRpYVNvdXJjZUNhcGFiaWxpdGllcz4g
bV9jYXBhYmlsaXRpZXM7CisgICAgbXV0YWJsZSBzdGQ6Om9wdGlvbmFsPFJlYWx0aW1lTWVkaWFT
b3VyY2VTZXR0aW5ncz4gbV9jdXJyZW50U2V0dGluZ3M7CisKKyNpZiAhTE9HX0RJU0FCTEVECisg
ICAgdm9pZCBjaGVja1RpbWVzdGFtcHMoY29uc3QgQXVkaW9UaW1lU3RhbXAmLCB1aW50NjRfdCwg
ZG91YmxlKTsKKworICAgIFN0cmluZyBtX2lvVW5pdE5hbWU7CisjZW5kaWYKKworICAgIENhcGFi
aWxpdHlWYWx1ZU9yUmFuZ2UgbV9zYW1wbGVSYXRlQ2FwYWJpbGl0aWVzOworCisgICAgdWludDY0
X3QgbV9taWNyb3Bob25lUHJvY3NDYWxsZWQgeyAwIH07CisgICAgdWludDY0X3QgbV9taWNyb3Bo
b25lUHJvY3NDYWxsZWRMYXN0VGltZSB7IDAgfTsKKyAgICBUaW1lciBtX3ZlcmlmeUNhcHR1cmlu
Z1RpbWVyOworCisgICAgYm9vbCBtX2lzUmVjb25maWd1cmluZyB7IGZhbHNlIH07CisgICAgbXV0
YWJsZSBMb2NrIG1fc3BlYWtlclNhbXBsZXNQcm9kdWNlckxvY2s7CisgICAgQ29yZUF1ZGlvU3Bl
YWtlclNhbXBsZXNQcm9kdWNlciogbV9zcGVha2VyU2FtcGxlc1Byb2R1Y2VyIFdURl9HVUFSREVE
X0JZX0xPQ0sobV9zcGVha2VyU2FtcGxlc1Byb2R1Y2VyTG9jaykgeyBudWxscHRyIH07Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFN
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL01v
Y2tBdWRpb1NoYXJlZFVuaXQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFt
L21hYy9Nb2NrQXVkaW9TaGFyZWRVbml0LmgKaW5kZXggMWE4OTZhYjczODUyODU0YmE3NzdiYzRk
MTY2ZjljYTJlNWRhMmFmOC4uOTlhOWRmZGZkZTM3YjFjMWFhYzFkODdkY2ZmZTAwYTMwZDlhOGNi
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL01v
Y2tBdWRpb1NoYXJlZFVuaXQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0
cmVhbS9tYWMvTW9ja0F1ZGlvU2hhcmVkVW5pdC5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxNi0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNi0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjcsNzIgKzI3LDE1IEBACiAKICNp
ZiBFTkFCTEUoTUVESUFfU1RSRUFNKQogCi0jaW5jbHVkZSAiQmFzZUF1ZGlvU2hhcmVkVW5pdC5o
IgotI2luY2x1ZGUgPENvcmVBdWRpby9Db3JlQXVkaW9UeXBlcy5oPgotI2luY2x1ZGUgPHd0Zi9S
dW5Mb29wLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotI2luY2x1ZGUgPHd0Zi9Xb3JrUXVl
dWUuaD4KLQotT0JKQ19DTEFTUyBBVkF1ZGlvUENNQnVmZmVyOwotdHlwZWRlZiBzdHJ1Y3QgT3Bh
cXVlQ01DbG9jayogQ01DbG9ja1JlZjsKLXR5cGVkZWYgY29uc3Qgc3RydWN0IG9wYXF1ZUNNRm9y
bWF0RGVzY3JpcHRpb24qIENNRm9ybWF0RGVzY3JpcHRpb25SZWY7CisjaW5jbHVkZSAiQ29yZUF1
ZGlvU2hhcmVkVW5pdC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIFdlYkF1ZGlv
QnVmZmVyTGlzdDsKLWNsYXNzIFdlYkF1ZGlvU291cmNlUHJvdmlkZXJDb2NvYTsKLQotY2xhc3Mg
TW9ja0F1ZGlvU2hhcmVkVW5pdCBmaW5hbCA6IHB1YmxpYyBCYXNlQXVkaW9TaGFyZWRVbml0IHsK
LXB1YmxpYzoKLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgTW9ja0F1ZGlvU2hhcmVkVW5pdCYg
c2luZ2xldG9uKCk7Ci0gICAgTW9ja0F1ZGlvU2hhcmVkVW5pdCgpOwotCi0gICAgdm9pZCBzZXRE
ZXZpY2VJRChjb25zdCBTdHJpbmcmIGRldmljZUlEKSB7IHNldENhcHR1cmVEZXZpY2UoU3RyaW5n
IHsgZGV2aWNlSUQgfSwgMCk7IH0KLQotcHJpdmF0ZToKLSAgICBib29sIGhhc0F1ZGlvVW5pdCgp
IGNvbnN0IGZpbmFsOwotICAgIHZvaWQgY2FwdHVyZURldmljZUNoYW5nZWQoKSBmaW5hbDsKLSAg
ICBPU1N0YXR1cyByZWNvbmZpZ3VyZUF1ZGlvVW5pdCgpIGZpbmFsOwotICAgIHZvaWQgcmVzZXRT
YW1wbGVSYXRlKCkgZmluYWw7Ci0KLSAgICB2b2lkIGNsZWFudXBBdWRpb1VuaXQoKSBmaW5hbDsK
LSAgICBPU1N0YXR1cyBzdGFydEludGVybmFsKCkgZmluYWw7Ci0gICAgdm9pZCBzdG9wSW50ZXJu
YWwoKSBmaW5hbDsKLSAgICBib29sIGlzUHJvZHVjaW5nRGF0YSgpIGNvbnN0IGZpbmFsOwotCi0g
ICAgdm9pZCBkZWxheVNhbXBsZXMoU2Vjb25kcykgZmluYWw7Ci0KLSAgICB2b2lkIHN0YXJ0KCk7
Ci0gICAgQ2FwYWJpbGl0eVZhbHVlT3JSYW5nZSBzYW1wbGVSYXRlQ2FwYWNpdGllcygpIGNvbnN0
IGZpbmFsIHsgcmV0dXJuIENhcGFiaWxpdHlWYWx1ZU9yUmFuZ2UoNDQxMDAsIDQ4MDAwKTsgfQot
Ci0gICAgdm9pZCB0aWNrKCk7Ci0KLSAgICB2b2lkIHJlbmRlcihNb25vdG9uaWNUaW1lKTsKLSAg
ICB2b2lkIGVtaXRTYW1wbGVCdWZmZXJzKHVpbnQzMl90IGZyYW1lQ291bnQpOwotICAgIHZvaWQg
cmVjb25maWd1cmUoKTsKLQotICAgIHN0YXRpYyBTZWNvbmRzIHJlbmRlckludGVydmFsKCkgeyBy
ZXR1cm4gMjBfbXM7IH0KLQotICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJBdWRpb0J1ZmZlckxpc3Q+
IG1fYXVkaW9CdWZmZXJMaXN0OwotCi0gICAgdWludDMyX3QgbV9tYXhpbWl1bUZyYW1lQ291bnQ7
Ci0gICAgdWludDY0X3QgbV9zYW1wbGVzRW1pdHRlZCB7IDAgfTsKLSAgICB1aW50NjRfdCBtX3Nh
bXBsZXNSZW5kZXJlZCB7IDAgfTsKLQotICAgIFJldGFpblB0cjxDTUZvcm1hdERlc2NyaXB0aW9u
UmVmPiBtX2Zvcm1hdERlc2NyaXB0aW9uOwotICAgIEF1ZGlvU3RyZWFtQmFzaWNEZXNjcmlwdGlv
biBtX3N0cmVhbUZvcm1hdDsKLQotICAgIFZlY3RvcjxmbG9hdD4gbV9iaXBCb3BCdWZmZXI7Ci0g
ICAgYm9vbCBtX2hhc0F1ZGlvVW5pdCB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX2lzUHJvZHVjaW5n
RGF0YSB7IGZhbHNlIH07CituYW1lc3BhY2UgTW9ja0F1ZGlvU2hhcmVkVW5pdCB7CiAKLSAgICBS
dW5Mb29wOjpUaW1lcjxNb2NrQXVkaW9TaGFyZWRVbml0PiBtX3RpbWVyOwotICAgIE1vbm90b25p
Y1RpbWUgbV9sYXN0UmVuZGVyVGltZSB7IE1vbm90b25pY1RpbWU6Om5hbigpIH07Ci0gICAgTW9u
b3RvbmljVGltZSBtX2RlbGF5VW50aWw7CitDb3JlQXVkaW9TaGFyZWRVbml0JiBzaW5nbGV0b24o
KTsKIAotICAgIFJlZjxXb3JrUXVldWU+IG1fd29ya1F1ZXVlOwotICAgIHVuc2lnbmVkIG1fY2hh
bm5lbENvdW50IHsgMiB9OwotfTsKK30KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvTW9ja0F1ZGlv
U2hhcmVkVW5pdC5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9N
b2NrQXVkaW9TaGFyZWRVbml0Lm1tCmluZGV4IDdmMWFjODM1OTgzNmVlYWQ4MjI1MTdmM2JhM2Vl
NTUwMWZjZWQ3OGUuLmUzYzYxZmI3ZGM5NmUxYWYyYmYxNTA3YjY5ZjBiNWNmZTVkYzU5ZTkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9Nb2NrQXVk
aW9TaGFyZWRVbml0Lm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFt
L21hYy9Nb2NrQXVkaW9TaGFyZWRVbml0Lm1tCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxNi0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNi0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDMsNiArNDMsOSBAQAogI2ltcG9ydCA8
QVZGb3VuZGF0aW9uL0FWQXVkaW9CdWZmZXIuaD4KICNpbXBvcnQgPEF1ZGlvVG9vbGJveC9BdWRp
b0NvbnZlcnRlci5oPgogI2ltcG9ydCA8Q29yZUF1ZGlvL0NvcmVBdWRpb1R5cGVzLmg+CisjaW5j
bHVkZSA8d3RmL1J1bkxvb3AuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8
d3RmL1dvcmtRdWV1ZS5oPgogCiAjaW1wb3J0IDxwYWwvY2YvQXVkaW9Ub29sYm94U29mdExpbmsu
aD4KICNpbXBvcnQgPHBhbC9jZi9Db3JlTWVkaWFTb2Z0TGluay5oPgpAQCAtOTAsNjcgKzkzLDEx
MSBAQCBDYXB0dXJlU291cmNlT3JFcnJvciBNb2NrUmVhbHRpbWVBdWRpb1NvdXJjZTo6Y3JlYXRl
KFN0cmluZyYmIGRldmljZUlELCBBdG9tU3RyaQogICAgIGlmICghZGV2aWNlKQogICAgICAgICBy
ZXR1cm4geyAiTm8gbW9jayBtaWNyb3Bob25lIGRldmljZSJfcyB9OwogCi0gICAgTW9ja0F1ZGlv
U2hhcmVkVW5pdDo6c2luZ2xldG9uKCkuc2V0RGV2aWNlSUQoZGV2aWNlSUQpOworICAgIE1vY2tB
dWRpb1NoYXJlZFVuaXQ6OnNpbmdsZXRvbigpLnNldENhcHR1cmVEZXZpY2UoU3RyaW5nIHsgZGV2
aWNlSUQgfSwgMCk7CiAgICAgcmV0dXJuIENvcmVBdWRpb0NhcHR1cmVTb3VyY2U6OmNyZWF0ZUZv
clRlc3RpbmcoV1RGTW92ZShkZXZpY2VJRCksIFdURk1vdmUobmFtZSksIFdURk1vdmUoaGFzaFNh
bHQpLCBjb25zdHJhaW50cywgTW9ja0F1ZGlvU2hhcmVkVW5pdDo6c2luZ2xldG9uKCksIHBhZ2VJ
ZGVudGlmaWVyKTsKIH0KIAotTW9ja0F1ZGlvU2hhcmVkVW5pdCYgTW9ja0F1ZGlvU2hhcmVkVW5p
dDo6c2luZ2xldG9uKCkKLXsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8TW9ja0F1ZGlvU2hh
cmVkVW5pdD4gc2luZ2xldG9uOwotICAgIHJldHVybiBzaW5nbGV0b247Ci19Ci0KLU1vY2tBdWRp
b1NoYXJlZFVuaXQ6Ok1vY2tBdWRpb1NoYXJlZFVuaXQoKQotICAgIDogbV90aW1lcihSdW5Mb29w
OjpjdXJyZW50KCksIHRoaXMsICZNb2NrQXVkaW9TaGFyZWRVbml0OjpzdGFydCkKLSAgICAsIG1f
d29ya1F1ZXVlKFdvcmtRdWV1ZTo6Y3JlYXRlKCJNb2NrQXVkaW9TaGFyZWRVbml0IENhcHR1cmUg
UXVldWUiLCBXb3JrUXVldWU6OlFPUzo6VXNlckludGVyYWN0aXZlKSkKK2NsYXNzIE1vY2tBdWRp
b1NoYXJlZEludGVybmFsVW5pdCA6ICBwdWJsaWMgQ29yZUF1ZGlvU2hhcmVkVW5pdDo6SW50ZXJu
YWxVbml0IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBNb2Nr
QXVkaW9TaGFyZWRJbnRlcm5hbFVuaXQoKTsKKyAgICB+TW9ja0F1ZGlvU2hhcmVkSW50ZXJuYWxV
bml0KCk7CisKK3ByaXZhdGU6CisgICAgT1NTdGF0dXMgaW5pdGlhbGl6ZSgpIGZpbmFsOworICAg
IE9TU3RhdHVzIHVuaW5pdGlhbGl6ZSgpIGZpbmFsIHsgcmV0dXJuIDA7IH0KKyAgICBPU1N0YXR1
cyBzdGFydCgpIGZpbmFsOworICAgIE9TU3RhdHVzIHN0b3AoKSBmaW5hbDsKKyAgICBPU1N0YXR1
cyBzZXQoQXVkaW9Vbml0UHJvcGVydHlJRCwgQXVkaW9Vbml0U2NvcGUsIEF1ZGlvVW5pdEVsZW1l
bnQsIGNvbnN0IHZvaWQqLCBVSW50MzIpIGZpbmFsOworICAgIE9TU3RhdHVzIGdldChBdWRpb1Vu
aXRQcm9wZXJ0eUlELCBBdWRpb1VuaXRTY29wZSwgQXVkaW9Vbml0RWxlbWVudCwgdm9pZCosIFVJ
bnQzMiopIGZpbmFsOworICAgIE9TU3RhdHVzIHJlbmRlcihBdWRpb1VuaXRSZW5kZXJBY3Rpb25G
bGFncyosIGNvbnN0IEF1ZGlvVGltZVN0YW1wKiwgVUludDMyLCBVSW50MzIsIEF1ZGlvQnVmZmVy
TGlzdCopIGZpbmFsOworICAgIE9TU3RhdHVzIGRlZmF1bHRJbnB1dERldmljZSh1aW50MzJfdCop
IGZpbmFsOworICAgIE9TU3RhdHVzIGRlZmF1bHRPdXRwdXREZXZpY2UodWludDMyX3QqKSBmaW5h
bDsKKyAgICB2b2lkIGRlbGF5U2FtcGxlcyhTZWNvbmRzKSBmaW5hbDsKKworICAgIGludCBzYW1w
bGVSYXRlKCkgY29uc3QgeyByZXR1cm4gbV9zdHJlYW1Gb3JtYXQubVNhbXBsZVJhdGU7IH0KKyAg
ICB2b2lkIHRpY2soKTsKKworICAgIHZvaWQgZ2VuZXJhdGVTYW1wbGVCdWZmZXJzKE1vbm90b25p
Y1RpbWUpOworICAgIHZvaWQgZW1pdFNhbXBsZUJ1ZmZlcnModWludDMyX3QgZnJhbWVDb3VudCk7
CisgICAgdm9pZCByZWNvbmZpZ3VyZSgpOworCisgICAgc3RhdGljIFNlY29uZHMgcmVuZGVySW50
ZXJ2YWwoKSB7IHJldHVybiAyMF9tczsgfQorCisgICAgc3RkOjp1bmlxdWVfcHRyPFdlYkF1ZGlv
QnVmZmVyTGlzdD4gbV9hdWRpb0J1ZmZlckxpc3Q7CisKKyAgICB1aW50MzJfdCBtX21heGltaXVt
RnJhbWVDb3VudDsKKyAgICB1aW50NjRfdCBtX3NhbXBsZXNFbWl0dGVkIHsgMCB9OworICAgIHVp
bnQ2NF90IG1fc2FtcGxlc1JlbmRlcmVkIHsgMCB9OworCisgICAgUmV0YWluUHRyPENNRm9ybWF0
RGVzY3JpcHRpb25SZWY+IG1fZm9ybWF0RGVzY3JpcHRpb247CisgICAgQXVkaW9TdHJlYW1CYXNp
Y0Rlc2NyaXB0aW9uIG1fb3V0cHV0U3RyZWFtRm9ybWF0OworICAgIEF1ZGlvU3RyZWFtQmFzaWNE
ZXNjcmlwdGlvbiBtX3N0cmVhbUZvcm1hdDsKKworICAgIFZlY3RvcjxmbG9hdD4gbV9iaXBCb3BC
dWZmZXI7CisgICAgYm9vbCBtX2hhc0F1ZGlvVW5pdCB7IGZhbHNlIH07CisgICAgYm9vbCBtX2lz
UHJvZHVjaW5nRGF0YSB7IGZhbHNlIH07CisgICAgYm9vbCBtX2VuYWJsZUVjaG9DYW5jZWxsYXRp
b24geyB0cnVlIH07CisgICAgUnVuTG9vcDo6VGltZXI8TW9ja0F1ZGlvU2hhcmVkSW50ZXJuYWxV
bml0PiBtX3RpbWVyOworICAgIE1vbm90b25pY1RpbWUgbV9sYXN0UmVuZGVyVGltZSB7IE1vbm90
b25pY1RpbWU6Om5hbigpIH07CisgICAgTW9ub3RvbmljVGltZSBtX2RlbGF5VW50aWw7CisKKyAg
ICBSZWY8V29ya1F1ZXVlPiBtX3dvcmtRdWV1ZTsKKyAgICB1bnNpZ25lZCBtX2NoYW5uZWxDb3Vu
dCB7IDIgfTsKKyAgICAKKyAgICBBVVJlbmRlckNhbGxiYWNrU3RydWN0IG1fbWljcm9waG9uZUNh
bGxiYWNrOworICAgIEFVUmVuZGVyQ2FsbGJhY2tTdHJ1Y3QgbV9zcGVha2VyQ2FsbGJhY2s7Cit9
OworCitDb3JlQXVkaW9TaGFyZWRVbml0JiBNb2NrQXVkaW9TaGFyZWRVbml0OjpzaW5nbGV0b24o
KQogeworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxDb3JlQXVkaW9TaGFyZWRVbml0PiB1bml0
OworICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBvbmNlRmxhZzsKKyAgICBzdGQ6OmNhbGxfb25j
ZShvbmNlRmxhZywgWyZdICgpIHsKKyAgICAgICAgdW5pdC0+c2V0U2FtcGxlUmF0ZVJhbmdlKENh
cGFiaWxpdHlWYWx1ZU9yUmFuZ2UoNDQxMDAsIDQ4MDAwKSk7CisgICAgICAgIHVuaXQtPnNldElu
dGVybmFsVW5pdENyZWF0aW9uQ2FsbGJhY2soW10geworICAgICAgICAgICAgVW5pcXVlUmVmPENv
cmVBdWRpb1NoYXJlZFVuaXQ6OkludGVybmFsVW5pdD4gcmVzdWx0ID0gbWFrZVVuaXF1ZVJlZjxN
b2NrQXVkaW9TaGFyZWRJbnRlcm5hbFVuaXQ+KCk7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0
OworICAgICAgICB9KTsKKyAgICAgICAgdW5pdC0+c2V0SW50ZXJuYWxVbml0R2V0U2FtcGxlUmF0
ZUNhbGxiYWNrKFtdIHsgcmV0dXJuIDQ0MTAwOyB9KTsKKyAgICB9KTsKKyAgICByZXR1cm4gdW5p
dDsKIH0KIAotdm9pZCBNb2NrQXVkaW9TaGFyZWRVbml0OjpyZXNldFNhbXBsZVJhdGUoKQorc3Rh
dGljIEF1ZGlvU3RyZWFtQmFzaWNEZXNjcmlwdGlvbiBjcmVhdGVBdWRpb0Zvcm1hdChGbG9hdDY0
IHNhbXBsZVJhdGUsIFVJbnQzMiBjaGFubmVsQ291bnQpCiB7Ci0gICAgaWYgKGF1dG8gZGV2aWNl
ID0gTW9ja1JlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXI6Om1vY2tEZXZpY2VXaXRoUGVyc2lzdGVu
dElEKHBlcnNpc3RlbnRJRCgpKSkKLSAgICAgICAgc2V0U2FtcGxlUmF0ZShzdGQ6OmdldDxNb2Nr
TWljcm9waG9uZVByb3BlcnRpZXM+KGRldmljZS0+cHJvcGVydGllcykuZGVmYXVsdFNhbXBsZVJh
dGUpOworICAgIEF1ZGlvU3RyZWFtQmFzaWNEZXNjcmlwdGlvbiBmb3JtYXQ7CisgICAgY29uc3Qg
aW50IGJ5dGVzUGVyRmxvYXQgPSBzaXplb2YoRmxvYXQzMik7CisgICAgY29uc3QgaW50IGJpdHNQ
ZXJCeXRlID0gODsKKyAgICBjb25zdCBib29sIGlzRmxvYXQgPSB0cnVlOworICAgIGNvbnN0IGJv
b2wgaXNCaWdFbmRpYW4gPSBmYWxzZTsKKyAgICBjb25zdCBib29sIGlzTm9uSW50ZXJsZWF2ZWQg
PSB0cnVlOworICAgIEZpbGxPdXRBU0JERm9yTFBDTShmb3JtYXQsIHNhbXBsZVJhdGUsIGNoYW5u
ZWxDb3VudCwgYml0c1BlckJ5dGUgKiBieXRlc1BlckZsb2F0LCBiaXRzUGVyQnl0ZSAqIGJ5dGVz
UGVyRmxvYXQsIGlzRmxvYXQsIGlzQmlnRW5kaWFuLCBpc05vbkludGVybGVhdmVkKTsKKyAgICBy
ZXR1cm4gZm9ybWF0OwogfQogCi1ib29sIE1vY2tBdWRpb1NoYXJlZFVuaXQ6Omhhc0F1ZGlvVW5p
dCgpIGNvbnN0CitNb2NrQXVkaW9TaGFyZWRJbnRlcm5hbFVuaXQ6Ok1vY2tBdWRpb1NoYXJlZElu
dGVybmFsVW5pdCgpCisgICAgOiBtX3RpbWVyKFJ1bkxvb3A6OmN1cnJlbnQoKSwgW3RoaXNdIHsg
dGhpcy0+c3RhcnQoKTsgfSkKKyAgICAsIG1fd29ya1F1ZXVlKFdvcmtRdWV1ZTo6Y3JlYXRlKCJN
b2NrQXVkaW9TaGFyZWRJbnRlcm5hbFVuaXQgQ2FwdHVyZSBRdWV1ZSIsIFdvcmtRdWV1ZTo6UU9T
OjpVc2VySW50ZXJhY3RpdmUpKQogewotICAgIHJldHVybiBtX2hhc0F1ZGlvVW5pdDsKKyAgICBt
X3N0cmVhbUZvcm1hdCA9IG1fb3V0cHV0U3RyZWFtRm9ybWF0ID0gY3JlYXRlQXVkaW9Gb3JtYXQo
NDQxMDAsIDIpOwogfQogCi12b2lkIE1vY2tBdWRpb1NoYXJlZFVuaXQ6OmNhcHR1cmVEZXZpY2VD
aGFuZ2VkKCkKK01vY2tBdWRpb1NoYXJlZEludGVybmFsVW5pdDo6fk1vY2tBdWRpb1NoYXJlZElu
dGVybmFsVW5pdCgpCiB7Ci0gICAgcmVjb25maWd1cmVBdWRpb1VuaXQoKTsKKyAgICBBU1NFUlQo
IW1faXNQcm9kdWNpbmdEYXRhKTsKIH0KIAotT1NTdGF0dXMgTW9ja0F1ZGlvU2hhcmVkVW5pdDo6
cmVjb25maWd1cmVBdWRpb1VuaXQoKQorT1NTdGF0dXMgTW9ja0F1ZGlvU2hhcmVkSW50ZXJuYWxV
bml0Ojppbml0aWFsaXplKCkKIHsKLSAgICBpZiAoIWhhc0F1ZGlvVW5pdCgpKQotICAgICAgICBy
ZXR1cm4gMDsKKyAgICBBU1NFUlQobV9vdXRwdXRTdHJlYW1Gb3JtYXQubVNhbXBsZVJhdGUgPT0g
bV9zdHJlYW1Gb3JtYXQubVNhbXBsZVJhdGUpOworICAgIGlmIChtX291dHB1dFN0cmVhbUZvcm1h
dC5tU2FtcGxlUmF0ZSAhPSBtX3N0cmVhbUZvcm1hdC5tU2FtcGxlUmF0ZSkKKyAgICAgICAgcmV0
dXJuIC0xOwogCi0gICAgbV9sYXN0UmVuZGVyVGltZSA9IE1vbm90b25pY1RpbWU6Om5hbigpOwot
ICAgIG1fd29ya1F1ZXVlLT5kaXNwYXRjaChbdGhpc10gewotICAgICAgICByZWNvbmZpZ3VyZSgp
OwotICAgICAgICBjYWxsT25NYWluVGhyZWFkKFt0aGlzXSB7Ci0gICAgICAgICAgICBzdGFydElu
dGVybmFsKCk7Ci0gICAgICAgIH0pOwotICAgIH0pOwogICAgIHJldHVybiAwOwogfQogCi12b2lk
IE1vY2tBdWRpb1NoYXJlZFVuaXQ6OmNsZWFudXBBdWRpb1VuaXQoKQotewotICAgIG1faGFzQXVk
aW9Vbml0ID0gZmFsc2U7Ci0gICAgbV9pc1Byb2R1Y2luZ0RhdGEgPSBmYWxzZTsKLSAgICBtX2xh
c3RSZW5kZXJUaW1lID0gTW9ub3RvbmljVGltZTo6bmFuKCk7Ci19Ci0KLU9TU3RhdHVzIE1vY2tB
dWRpb1NoYXJlZFVuaXQ6OnN0YXJ0SW50ZXJuYWwoKQotewotICAgIHN0YXJ0KCk7Ci0gICAgcmV0
dXJuIDA7Ci19Ci0KLXZvaWQgTW9ja0F1ZGlvU2hhcmVkVW5pdDo6c3RhcnQoKQorT1NTdGF0dXMg
TW9ja0F1ZGlvU2hhcmVkSW50ZXJuYWxVbml0OjpzdGFydCgpCiB7CiAgICAgaWYgKCFtX2hhc0F1
ZGlvVW5pdCkKICAgICAgICAgbV9oYXNBdWRpb1VuaXQgPSB0cnVlOwpAQCAtMTU4LDMwICsyMDUs
MjkgQEAgdm9pZCBNb2NrQXVkaW9TaGFyZWRVbml0OjpzdGFydCgpCiAgICAgbV9sYXN0UmVuZGVy
VGltZSA9IE1vbm90b25pY1RpbWU6Om5vdygpOwogICAgIG1faXNQcm9kdWNpbmdEYXRhID0gdHJ1
ZTsKICAgICBtX3dvcmtRdWV1ZS0+ZGlzcGF0Y2goW3RoaXMsIHJlbmRlclRpbWUgPSBtX2xhc3RS
ZW5kZXJUaW1lXSB7Ci0gICAgICAgIHJlbmRlcihyZW5kZXJUaW1lKTsKKyAgICAgICAgZ2VuZXJh
dGVTYW1wbGVCdWZmZXJzKHJlbmRlclRpbWUpOwogICAgIH0pOworICAgIHJldHVybiAwOwogfQog
Ci12b2lkIE1vY2tBdWRpb1NoYXJlZFVuaXQ6OnN0b3BJbnRlcm5hbCgpCitPU1N0YXR1cyBNb2Nr
QXVkaW9TaGFyZWRJbnRlcm5hbFVuaXQ6OnN0b3AoKQogewogICAgIG1faXNQcm9kdWNpbmdEYXRh
ID0gZmFsc2U7Ci0gICAgaWYgKCFtX2hhc0F1ZGlvVW5pdCkKLSAgICAgICAgcmV0dXJuOwotICAg
IG1fbGFzdFJlbmRlclRpbWUgPSBNb25vdG9uaWNUaW1lOjpuYW4oKTsKLX0KKyAgICBpZiAobV9o
YXNBdWRpb1VuaXQpCisgICAgICAgIG1fbGFzdFJlbmRlclRpbWUgPSBNb25vdG9uaWNUaW1lOjpu
YW4oKTsKIAotYm9vbCBNb2NrQXVkaW9TaGFyZWRVbml0Ojppc1Byb2R1Y2luZ0RhdGEoKSBjb25z
dAotewotICAgIHJldHVybiBtX2lzUHJvZHVjaW5nRGF0YTsKKyAgICBtX3dvcmtRdWV1ZS0+ZGlz
cGF0Y2hTeW5jKFtdIHsgfSk7CisKKyAgICByZXR1cm4gMDsKIH0KIAotdm9pZCBNb2NrQXVkaW9T
aGFyZWRVbml0OjpkZWxheVNhbXBsZXMoU2Vjb25kcyBkZWx0YSkKK3ZvaWQgTW9ja0F1ZGlvU2hh
cmVkSW50ZXJuYWxVbml0OjpkZWxheVNhbXBsZXMoU2Vjb25kcyBkZWx0YSkKIHsKLSAgICBzdG9w
SW50ZXJuYWwoKTsKKyAgICBzdG9wKCk7CiAgICAgbV90aW1lci5zdGFydE9uZVNob3QoZGVsdGEp
OwogfQogCi12b2lkIE1vY2tBdWRpb1NoYXJlZFVuaXQ6OnJlY29uZmlndXJlKCkKK3ZvaWQgTW9j
a0F1ZGlvU2hhcmVkSW50ZXJuYWxVbml0OjpyZWNvbmZpZ3VyZSgpCiB7CiAgICAgQVNTRVJUKCFp
c01haW5UaHJlYWQoKSk7CiAKQEAgLTE5MSwxNCArMjM3LDYgQEAgdm9pZCBNb2NrQXVkaW9TaGFy
ZWRVbml0OjpyZWNvbmZpZ3VyZSgpCiAgICAgbV9tYXhpbWl1bUZyYW1lQ291bnQgPSBXVEY6OnJv
dW5kVXBUb1Bvd2VyT2ZUd28ocmVuZGVySW50ZXJ2YWwoKS5zZWNvbmRzKCkgKiByYXRlICogMik7
CiAgICAgQVNTRVJUKG1fbWF4aW1pdW1GcmFtZUNvdW50KTsKIAotICAgIGNvbnN0IGludCBieXRl
c1BlckZsb2F0ID0gc2l6ZW9mKEZsb2F0MzIpOwotICAgIGNvbnN0IGludCBiaXRzUGVyQnl0ZSA9
IDg7Ci0gICAgY29uc3QgaW50IGNoYW5uZWxDb3VudCA9IG1fY2hhbm5lbENvdW50OwotICAgIGNv
bnN0IGJvb2wgaXNGbG9hdCA9IHRydWU7Ci0gICAgY29uc3QgYm9vbCBpc0JpZ0VuZGlhbiA9IGZh
bHNlOwotICAgIGNvbnN0IGJvb2wgaXNOb25JbnRlcmxlYXZlZCA9IHRydWU7Ci0gICAgRmlsbE91
dEFTQkRGb3JMUENNKG1fc3RyZWFtRm9ybWF0LCByYXRlLCBjaGFubmVsQ291bnQsIGJpdHNQZXJC
eXRlICogYnl0ZXNQZXJGbG9hdCwgYml0c1BlckJ5dGUgKiBieXRlc1BlckZsb2F0LCBpc0Zsb2F0
LCBpc0JpZ0VuZGlhbiwgaXNOb25JbnRlcmxlYXZlZCk7Ci0KICAgICBtX2F1ZGlvQnVmZmVyTGlz
dCA9IG1ha2VVbmlxdWU8V2ViQXVkaW9CdWZmZXJMaXN0PihtX3N0cmVhbUZvcm1hdCwgbV9tYXhp
bWl1bUZyYW1lQ291bnQpOwogCiAgICAgQ01Gb3JtYXREZXNjcmlwdGlvblJlZiBmb3JtYXREZXNj
cmlwdGlvbjsKQEAgLTIxNSwyNSArMjUzLDM4IEBAIHZvaWQgTW9ja0F1ZGlvU2hhcmVkVW5pdDo6
cmVjb25maWd1cmUoKQogCiAgICAgYWRkSHVtKEJpcEJvcFZvbHVtZSwgQmlwRnJlcXVlbmN5LCBy
YXRlLCAwLCBtX2JpcEJvcEJ1ZmZlci5kYXRhKCkgKyBiaXBTdGFydCwgYmlwQm9wU2FtcGxlQ291
bnQpOwogICAgIGFkZEh1bShCaXBCb3BWb2x1bWUsIEJvcEZyZXF1ZW5jeSwgcmF0ZSwgMCwgbV9i
aXBCb3BCdWZmZXIuZGF0YSgpICsgYm9wU3RhcnQsIGJpcEJvcFNhbXBsZUNvdW50KTsKLSAgICBp
ZiAoIWVuYWJsZUVjaG9DYW5jZWxsYXRpb24oKSkKKyAgICBpZiAoIW1fZW5hYmxlRWNob0NhbmNl
bGxhdGlvbikKICAgICAgICAgYWRkSHVtKE5vaXNlVm9sdW1lLCBOb2lzZUZyZXF1ZW5jeSwgcmF0
ZSwgMCwgbV9iaXBCb3BCdWZmZXIuZGF0YSgpLCBzYW1wbGVDb3VudCk7CiB9CiAKLXZvaWQgTW9j
a0F1ZGlvU2hhcmVkVW5pdDo6ZW1pdFNhbXBsZUJ1ZmZlcnModWludDMyX3QgZnJhbWVDb3VudCkK
K3ZvaWQgTW9ja0F1ZGlvU2hhcmVkSW50ZXJuYWxVbml0OjplbWl0U2FtcGxlQnVmZmVycyh1aW50
MzJfdCBmcmFtZUNvdW50KQogewogICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOwogICAgIEFT
U0VSVChtX2Zvcm1hdERlc2NyaXB0aW9uKTsKIAogICAgIENNVGltZSBzdGFydFRpbWUgPSBQQUw6
OkNNVGltZU1ha2UobV9zYW1wbGVzRW1pdHRlZCwgc2FtcGxlUmF0ZSgpKTsKKyAgICBhdXRvIHNh
bXBsZVRpbWUgPSBQQUw6OkNNVGltZUdldFNlY29uZHMoc3RhcnRUaW1lKTsKICAgICBtX3NhbXBs
ZXNFbWl0dGVkICs9IGZyYW1lQ291bnQ7CiAKLSAgICBhdWRpb1NhbXBsZXNBdmFpbGFibGUoUEFM
Ojp0b01lZGlhVGltZShzdGFydFRpbWUpLCAqbV9hdWRpb0J1ZmZlckxpc3QsIENBQXVkaW9TdHJl
YW1EZXNjcmlwdGlvbihtX3N0cmVhbUZvcm1hdCksIGZyYW1lQ291bnQpOworICAgIGF1dG8qIGJ1
ZmZlckxpc3QgPSBtX2F1ZGlvQnVmZmVyTGlzdC0+bGlzdCgpOworICAgIEF1ZGlvVW5pdFJlbmRl
ckFjdGlvbkZsYWdzIGlvQWN0aW9uRmxhZ3MgPSAwOworICAgIAorICAgIEF1ZGlvVGltZVN0YW1w
IHRpbWVTdGFtcDsKKyAgICBtZW1zZXQoJnRpbWVTdGFtcCwgMCwgc2l6ZW9mKEF1ZGlvVGltZVN0
YW1wKSk7CisgICAgdGltZVN0YW1wLm1TYW1wbGVUaW1lID0gc2FtcGxlVGltZTsKKyAgICB0aW1l
U3RhbXAubUhvc3RUaW1lID0gc3RhdGljX2Nhc3Q8VUludDY0PihzYW1wbGVUaW1lKTsKKyAgICBp
ZiAobV9taWNyb3Bob25lQ2FsbGJhY2suaW5wdXRQcm9jKQorICAgICAgICBtX21pY3JvcGhvbmVD
YWxsYmFjay5pbnB1dFByb2MobV9taWNyb3Bob25lQ2FsbGJhY2suaW5wdXRQcm9jUmVmQ29uLCAm
aW9BY3Rpb25GbGFncywgJnRpbWVTdGFtcCwgMSwgZnJhbWVDb3VudCwgYnVmZmVyTGlzdCk7CisK
KyAgICBpb0FjdGlvbkZsYWdzID0gMDsKKyAgICBpZiAobV9zcGVha2VyQ2FsbGJhY2suaW5wdXRQ
cm9jKQorICAgICAgICBtX3NwZWFrZXJDYWxsYmFjay5pbnB1dFByb2MobV9zcGVha2VyQ2FsbGJh
Y2suaW5wdXRQcm9jUmVmQ29uLCAmaW9BY3Rpb25GbGFncywgJnRpbWVTdGFtcCwgMSwgZnJhbWVD
b3VudCwgYnVmZmVyTGlzdCk7CiB9CiAKLXZvaWQgTW9ja0F1ZGlvU2hhcmVkVW5pdDo6cmVuZGVy
KE1vbm90b25pY1RpbWUgcmVuZGVyVGltZSkKK3ZvaWQgTW9ja0F1ZGlvU2hhcmVkSW50ZXJuYWxV
bml0OjpnZW5lcmF0ZVNhbXBsZUJ1ZmZlcnMoTW9ub3RvbmljVGltZSByZW5kZXJUaW1lKQogewog
ICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOwotICAgIGlmICghaXNQcm9kdWNpbmdEYXRhKCkp
CisgICAgaWYgKCFtX2lzUHJvZHVjaW5nRGF0YSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgYXV0
byBkZWx0YSA9IHJlbmRlckludGVydmFsKCk7CkBAIC0yNDUsNyArMjk2LDcgQEAgdm9pZCBNb2Nr
QXVkaW9TaGFyZWRVbml0OjpyZW5kZXIoTW9ub3RvbmljVGltZSByZW5kZXJUaW1lKQogICAgICAg
ICBuZXh0UmVuZGVyRGVsYXkgPSAwX3M7CiAgICAgfQogICAgIG1fd29ya1F1ZXVlLT5kaXNwYXRj
aEFmdGVyKG5leHRSZW5kZXJEZWxheSwgW3RoaXMsIG5leHRSZW5kZXJUaW1lXSB7Ci0gICAgICAg
IHJlbmRlcihuZXh0UmVuZGVyVGltZSk7CisgICAgICAgIGdlbmVyYXRlU2FtcGxlQnVmZmVycyhu
ZXh0UmVuZGVyVGltZSk7CiAgICAgfSk7CiAKICAgICBpZiAoIW1fYXVkaW9CdWZmZXJMaXN0IHx8
ICFtX2JpcEJvcEJ1ZmZlci5zaXplKCkpCkBAIC0yNzAsNiArMzIxLDgwIEBAIHZvaWQgTW9ja0F1
ZGlvU2hhcmVkVW5pdDo6cmVuZGVyKE1vbm90b25pY1RpbWUgcmVuZGVyVGltZSkKICAgICB9CiB9
CiAKK09TU3RhdHVzIE1vY2tBdWRpb1NoYXJlZEludGVybmFsVW5pdDo6cmVuZGVyKEF1ZGlvVW5p
dFJlbmRlckFjdGlvbkZsYWdzKiwgY29uc3QgQXVkaW9UaW1lU3RhbXAqLCBVSW50MzIsIFVJbnQz
MiBmcmFtZUNvdW50LCBBdWRpb0J1ZmZlckxpc3QqIGJ1ZmZlcikKK3sKKyAgICBhdXRvKiBzb3Vy
Y2VCdWZmZXIgPSBtX2F1ZGlvQnVmZmVyTGlzdC0+bGlzdCgpOworICAgIGlmIChidWZmZXItPm1O
dW1iZXJCdWZmZXJzID4gc291cmNlQnVmZmVyLT5tTnVtYmVyQnVmZmVycykKKyAgICAgICAgcmV0
dXJuIGtBdWRpb19QYXJhbUVycm9yOworCisgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IGJ1
ZmZlci0+bU51bWJlckJ1ZmZlcnM7IGkrKykgeworICAgICAgICBhdXRvKiBzb3VyY2UgPSBzdGF0
aWNfY2FzdDx1aW50OF90Kj4oc291cmNlQnVmZmVyLT5tQnVmZmVyc1tpXS5tRGF0YSk7CisgICAg
ICAgIGF1dG8qIGRlc3RpbmF0aW9uID0gc3RhdGljX2Nhc3Q8dWludDhfdCo+KGJ1ZmZlci0+bUJ1
ZmZlcnNbaV0ubURhdGEpOworICAgICAgICBtZW1jcHkoZGVzdGluYXRpb24sIHNvdXJjZSwgZnJh
bWVDb3VudCAqIG1fc3RyZWFtRm9ybWF0Lm1CeXRlc1BlclBhY2tldCk7CisgICAgfQorCisgICAg
cmV0dXJuIDA7Cit9CisKK09TU3RhdHVzIE1vY2tBdWRpb1NoYXJlZEludGVybmFsVW5pdDo6c2V0
KEF1ZGlvVW5pdFByb3BlcnR5SUQgcHJvcGVydHksIEF1ZGlvVW5pdFNjb3BlIHNjb3BlLCBBdWRp
b1VuaXRFbGVtZW50LCBjb25zdCB2b2lkKiB2YWx1ZSwgVUludDMyKQoreworICAgIGlmIChwcm9w
ZXJ0eSA9PSBrQXVkaW9Vbml0UHJvcGVydHlfU3RyZWFtRm9ybWF0KSB7CisgICAgICAgIGF1dG8m
IHR5cGVkVmFsdWUgPSAqc3RhdGljX2Nhc3Q8Y29uc3QgQXVkaW9TdHJlYW1CYXNpY0Rlc2NyaXB0
aW9uKj4odmFsdWUpOworICAgICAgICBpZiAoc2NvcGUgPT0ga0F1ZGlvVW5pdFNjb3BlX0lucHV0
KQorICAgICAgICAgICAgbV9zdHJlYW1Gb3JtYXQgPSB0eXBlZFZhbHVlOworICAgICAgICBlbHNl
CisgICAgICAgICAgICBtX291dHB1dFN0cmVhbUZvcm1hdCA9IHR5cGVkVmFsdWU7CisgICAgICAg
IHJldHVybiAwOworICAgIH0KKyAgICBpZiAocHJvcGVydHkgPT0ga0FVVm9pY2VJT1Byb3BlcnR5
X1ZvaWNlUHJvY2Vzc2luZ0VuYWJsZUFHQykgeworICAgICAgICBtX2VuYWJsZUVjaG9DYW5jZWxs
YXRpb24gPSAhISpzdGF0aWNfY2FzdDxjb25zdCB1aW50MzJfdCo+KHZhbHVlKTsKKyAgICAgICAg
cmV0dXJuIDA7CisgICAgfQorICAgIGlmIChwcm9wZXJ0eSA9PSBrQXVkaW9PdXRwdXRVbml0UHJv
cGVydHlfU2V0SW5wdXRDYWxsYmFjaykgeworICAgICAgICBtX21pY3JvcGhvbmVDYWxsYmFjayA9
ICpzdGF0aWNfY2FzdDxjb25zdCBBVVJlbmRlckNhbGxiYWNrU3RydWN0Kj4odmFsdWUpOworICAg
ICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgaWYgKHByb3BlcnR5ID09IGtBdWRpb1VuaXRQcm9w
ZXJ0eV9TZXRSZW5kZXJDYWxsYmFjaykgeworICAgICAgICBtX3NwZWFrZXJDYWxsYmFjayA9ICpz
dGF0aWNfY2FzdDxjb25zdCBBVVJlbmRlckNhbGxiYWNrU3RydWN0Kj4odmFsdWUpOworICAgICAg
ICByZXR1cm4gMDsKKyAgICB9CisgICAgaWYgKHByb3BlcnR5ID09IGtBdWRpb091dHB1dFVuaXRQ
cm9wZXJ0eV9DdXJyZW50RGV2aWNlKSB7CisgICAgICAgIEFTU0VSVCghKnN0YXRpY19jYXN0PGNv
bnN0IHVpbnQzMl90Kj4odmFsdWUpKTsKKyAgICAgICAgaWYgKGF1dG8gZGV2aWNlID0gTW9ja1Jl
YWx0aW1lTWVkaWFTb3VyY2VDZW50ZXI6Om1vY2tEZXZpY2VXaXRoUGVyc2lzdGVudElEKE1vY2tB
dWRpb1NoYXJlZFVuaXQ6OnNpbmdsZXRvbigpLnBlcnNpc3RlbnRJREZvclRlc3RpbmcoKSkpCisg
ICAgICAgICAgICBtX3N0cmVhbUZvcm1hdC5tU2FtcGxlUmF0ZSA9IG1fb3V0cHV0U3RyZWFtRm9y
bWF0Lm1TYW1wbGVSYXRlID0gc3RkOjpnZXQ8TW9ja01pY3JvcGhvbmVQcm9wZXJ0aWVzPihkZXZp
Y2UtPnByb3BlcnRpZXMpLmRlZmF1bHRTYW1wbGVSYXRlOworICAgICAgICByZXR1cm4gMDsKKyAg
ICB9CisgICAgCisgICAgcmV0dXJuIDA7Cit9CisKK09TU3RhdHVzIE1vY2tBdWRpb1NoYXJlZElu
dGVybmFsVW5pdDo6Z2V0KEF1ZGlvVW5pdFByb3BlcnR5SUQgcHJvcGVydHksIEF1ZGlvVW5pdFNj
b3BlIHNjb3BlLCBBdWRpb1VuaXRFbGVtZW50LCB2b2lkKiB2YWx1ZSwgVUludDMyKiB2YWx1ZVNp
emUpCit7CisgICAgaWYgKHByb3BlcnR5ID09IGtBdWRpb1VuaXRQcm9wZXJ0eV9TdHJlYW1Gb3Jt
YXQpIHsKKyAgICAgICAgYXV0byYgdHlwZWRWYWx1ZSA9ICpzdGF0aWNfY2FzdDxBdWRpb1N0cmVh
bUJhc2ljRGVzY3JpcHRpb24qPih2YWx1ZSk7CisgICAgICAgIGlmIChzY29wZSA9PSBrQXVkaW9V
bml0U2NvcGVfSW5wdXQpCisgICAgICAgICAgICB0eXBlZFZhbHVlID0gbV9zdHJlYW1Gb3JtYXQ7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHR5cGVkVmFsdWUgPSBtX291dHB1dFN0cmVhbUZv
cm1hdDsKKyAgICAgICAgKnZhbHVlU2l6ZSA9IHNpemVvZihBdWRpb1N0cmVhbUJhc2ljRGVzY3Jp
cHRpb24pOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKwor
T1NTdGF0dXMgTW9ja0F1ZGlvU2hhcmVkSW50ZXJuYWxVbml0OjpkZWZhdWx0SW5wdXREZXZpY2Uo
dWludDMyX3QqIGRldmljZSkKK3sKKyAgICAqZGV2aWNlID0gMDsKKyAgICByZXR1cm4gMDsKK30K
KworT1NTdGF0dXMgTW9ja0F1ZGlvU2hhcmVkSW50ZXJuYWxVbml0OjpkZWZhdWx0T3V0cHV0RGV2
aWNlKHVpbnQzMl90KiBkZXZpY2UpCit7CisgICAgKmRldmljZSA9IDA7CisgICAgcmV0dXJuIDA7
Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShNRURJQV9T
VFJFQU0pCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9D
aGFuZ2VMb2cKaW5kZXggMWYxYTA3NGQ5MGI5Nzk2NmUzMjdhNmE2NDAzYTVkZjE5NDI3YjFkMS4u
MjdjNmFlZTBlMjcyODg0MDIwMGFiYmZmMTA4OWU2YmRiMDFlMjFlNCAxMDA2NDQKLS0tIGEvTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDEzIEBACisyMDIyLTA1LTEyICBZb3Vlbm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KKwor
ICAgICAgICBBZGQgYSBiZXR0ZXIgbW9jayBmb3IgYXVkaW8gdW5pdHMgdXNlZCBieSBDb3JlQXVk
aW9TaGFyZWRVbml0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yNDAyMzEKKworICAgICAgICBSZXZpZXdlZCBieSBFcmljIENhcmxzb24uCisKKyAgICAg
ICAgKiBmYXN0L21lZGlhc3RyZWFtL2F1ZGlvLXVuaXQtcmVjb25maWd1cmUtZXhwZWN0ZWQudHh0
OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L21lZGlhc3RyZWFtL2F1ZGlvLXVuaXQtcmVjb25maWd1
cmUuaHRtbDogQWRkZWQuCisKIDIwMjItMDUtMTAgIFRydWl0dCBTYXZlbGwgIDx0c2F2ZWxsQGFw
cGxlLmNvbT4KIAogICAgICAgICBSZWJhc2UgaW5zcGVjdG9yL3RpbWVsaW5lL2xpbmUtY29sdW1u
Lmh0bWwgZm9yIE1hYwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9tZWRpYXN0cmVhbS9h
dWRpby11bml0LXJlY29uZmlndXJlLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvbWVk
aWFzdHJlYW0vYXVkaW8tdW5pdC1yZWNvbmZpZ3VyZS1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
YWM5NjIzODJjN2I1N2FjNGUxZTM4ZWJlNzZmYzg0ZTAwNzY4YTc3MAotLS0gL2Rldi9udWxsCisr
KyBiL0xheW91dFRlc3RzL2Zhc3QvbWVkaWFzdHJlYW0vYXVkaW8tdW5pdC1yZWNvbmZpZ3VyZS1l
eHBlY3RlZC50eHQKQEAgLTAsMCArMSw1IEBACisKKworUEFTUyBSZWNvbmZpZ3VyZSBhdWRpbyBz
YW1wbGUgcmF0ZQorUEFTUyBSZWNvbmZpZ3VyZSBhdWRpbyB1bml0IHdoZW4gYmVpbmcgaW4gcmVu
ZGVyLW9ubHkgbW9kZQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L21lZGlhc3RyZWFt
L2F1ZGlvLXVuaXQtcmVjb25maWd1cmUuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvbWVkaWFzdHJl
YW0vYXVkaW8tdW5pdC1yZWNvbmZpZ3VyZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY2NDM1N2JmNGRjYzY2
MGQyZjJjZmRlMTI5MjMxMzEwNmQ4NGU3OWEKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0
cy9mYXN0L21lZGlhc3RyZWFtL2F1ZGlvLXVuaXQtcmVjb25maWd1cmUuaHRtbApAQCAtMCwwICsx
LDcwIEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+CisgICAgPG1ldGEgY2hhcnNl
dD0idXRmLTgiPgorICAgIDxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvdGVzdGhhcm5lc3Mu
anMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvdGVzdGhhcm5l
c3NyZXBvcnQuanMiPjwvc2NyaXB0PgorIDwvaGVhZD4KKzxib2R5PgorPHZpZGVvIGlkPSJ2aWRl
bzEiIGF1dG9wbGF5IHBsYXlzSW5saW5lIGNvbnRyb2xzPjwvdmlkZW8+Cis8dmlkZW8gaWQ9InZp
ZGVvMiIgYXV0b3BsYXkgcGxheXNJbmxpbmUgY29udHJvbHM+PC92aWRlbz4KKzxzY3JpcHQ+Citw
cm9taXNlX3Rlc3QoYXN5bmMgKHRlc3QpID0+IHsKKyAgICBjb25zdCBjb250ZXh0ID0gbmV3IEF1
ZGlvQ29udGV4dCgpOworICAgIGNvbnN0IG9zY2lsbGF0b3IgPSBjb250ZXh0LmNyZWF0ZU9zY2ls
bGF0b3IoKTsKKyAgICBjb25zdCBzdHJlYW1EZXN0aW5hdGlvbiA9IGNvbnRleHQuY3JlYXRlTWVk
aWFTdHJlYW1EZXN0aW5hdGlvbigpOworICAgIG9zY2lsbGF0b3IuY29ubmVjdChzdHJlYW1EZXN0
aW5hdGlvbik7CisgICAgdmlkZW8xLnNyY09iamVjdCA9IHN0cmVhbURlc3RpbmF0aW9uLnN0cmVh
bTsKKyAgICAvLyB2aWRlbzEgd2lsbCBiZSBwbGF5ZWQgdGhyb3VnaCBWUElPIHdpbGwgZml4IHRo
ZSByYXRlIHRvIGEgc2luZ2xlIHZhbHVlLgorICAgIGF3YWl0IHZpZGVvMS5wbGF5KCk7CisgICAg
b3NjaWxsYXRvci5zdGFydCgpOworCisgICAgY29uc3Qgc3RyZWFtID0gYXdhaXQgbmF2aWdhdG9y
Lm1lZGlhRGV2aWNlcy5nZXRVc2VyTWVkaWEoeyBhdWRpbzogeyBzYW1wbGVSYXRlOiA0ODAwMCB9
fSk7CisgICAgc3RyZWFtLmdldEF1ZGlvVHJhY2tzKClbMF0ub25lbmRlZCA9ICgpID0+IGFzc2Vy
dF9ub3RfcmVhY2hlZCgic2hvdWxkIG5vdCBlbmQiKTsKKyAgICBhd2FpdCBuZXcgUHJvbWlzZShy
ZXNvbHZlID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgMTAwKSk7CisgICAgc3RyZWFtLmdldEF1ZGlv
VHJhY2tzKClbMF0uc3RvcCgpOworCisgICAgY29uc3Qgc3RyZWFtMiA9IGF3YWl0IG5hdmlnYXRv
ci5tZWRpYURldmljZXMuZ2V0VXNlck1lZGlhKHsgYXVkaW86IHsgc2FtcGxlUmF0ZTogNDQxMDAg
fX0pOworICAgIHN0cmVhbTIuZ2V0QXVkaW9UcmFja3MoKVswXS5vbmVuZGVkID0gKCkgPT4gYXNz
ZXJ0X25vdF9yZWFjaGVkKCJzaG91bGQgbm90IGVuZCIpOworICAgIGF3YWl0IG5ldyBQcm9taXNl
KHJlc29sdmUgPT4gc2V0VGltZW91dChyZXNvbHZlLCAxMDApKTsKK30sICJSZWNvbmZpZ3VyZSBh
dWRpbyBzYW1wbGUgcmF0ZSIpOworCitwcm9taXNlX3Rlc3QoYXN5bmMgKHRlc3QpID0+IHsKKyAg
ICBjb25zdCBjb250ZXh0ID0gbmV3IEF1ZGlvQ29udGV4dCgpOworICAgIGNvbnN0IG9zY2lsbGF0
b3IgPSBjb250ZXh0LmNyZWF0ZU9zY2lsbGF0b3IoKTsKKyAgICBjb25zdCBzdHJlYW1EZXN0aW5h
dGlvbiA9IGNvbnRleHQuY3JlYXRlTWVkaWFTdHJlYW1EZXN0aW5hdGlvbigpOworICAgIG9zY2ls
bGF0b3IuY29ubmVjdChzdHJlYW1EZXN0aW5hdGlvbik7CisgICAgdmlkZW8xLnNyY09iamVjdCA9
IHN0cmVhbURlc3RpbmF0aW9uLnN0cmVhbTsKKyAgICBhd2FpdCB2aWRlbzEucGxheSgpOworICAg
IG9zY2lsbGF0b3Iuc3RhcnQoKTsKKworICAgIGNvbnN0IGRlZmF1bHRBdWRpb0NvbnN0cmFpbnRz
ID0geworICAgICAgICBzYW1wbGVSYXRlOiA0ODAwMCwKKyAgICAgICAgc2FtcGxlU2l6ZTogMTYs
CisgICAgICAgIGNoYW5uZWxDb3VudDogMSwKKyAgICAgICAgZWNob0NhbmNlbGxhdGlvbjogdHJ1
ZSwKKyAgICAgICAgbm9pc2VTdXBwcmVzc2lvbjogdHJ1ZQorICAgIH07CisgICAgY29uc3QgbXVz
aWNNb2RlQXVkaW9Db25zdHJhaW50cyA9IHsKKyAgICAgICAgc2FtcGxlUmF0ZTogNDgwMDAsCisg
ICAgICAgIHNhbXBsZVNpemU6IDE2LAorICAgICAgICBjaGFubmVsQ291bnQ6IDIsCisgICAgICAg
IGVjaG9DYW5jZWxsYXRpb246IGZhbHNlLAorICAgICAgICBub2lzZVN1cHByZXNzaW9uOiBmYWxz
ZQorICAgIH07CisKKyAgICBjb25zdCBzdHJlYW0xID0gYXdhaXQgbmF2aWdhdG9yLm1lZGlhRGV2
aWNlcy5nZXRVc2VyTWVkaWEoeyBhdWRpbzogZGVmYXVsdEF1ZGlvQ29uc3RyYWludHMgfSk7Cisg
ICAgdmlkZW8yLnNyY09iamVjdCA9IHN0cmVhbTE7CisgICAgYXdhaXQgdmlkZW8yLnBsYXkoKTsK
KyAgICBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgMTAw
MCkpOworCisgICAgLy8gQnkgc3RvcHBpbmcgdGhlIGNhcHR1cmUgYXVkaW8gdHJhY2ssIHRoZSBW
UElPIHVuaXQgd2lsbCBnbyBpbiByZW5kZXIgb25seSBtb2RlIGFzIGl0IG5lZWRzIHRvIHBsYXkg
dmlkZW8gMS4KKyAgICBzdHJlYW0xLmdldEF1ZGlvVHJhY2tzKClbMF0uc3RvcCgpOworCisgICAg
Y29uc3Qgc3RyZWFtMiA9IGF3YWl0IG5hdmlnYXRvci5tZWRpYURldmljZXMuZ2V0VXNlck1lZGlh
KHsgYXVkaW86IG11c2ljTW9kZUF1ZGlvQ29uc3RyYWludHMgfSk7CisgICAgc3RyZWFtMi5nZXRB
dWRpb1RyYWNrcygpWzBdLm9uZW5kZWQgPSAoKSA9PiBsb2cuaW5uZXJIVE1MICs9ICd0cmFjayBl
bmRlZCc7CisgICAgYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiBzZXRUaW1lb3V0KHJlc29s
dmUsIDEwMDApKTsKK30sICJSZWNvbmZpZ3VyZSBhdWRpbyB1bml0IHdoZW4gYmVpbmcgaW4gcmVu
ZGVyLW9ubHkgbW9kZSIpOworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+Cg==
</data>
<flag name="commit-queue"
          id="488259"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
      

    </bug>

</bugzilla>