<?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>177868</bug_id>
          
          <creation_ts>2017-10-04 05:43:05 -0700</creation_ts>
          <short_desc>Remove OpenWebRTC backend</short_desc>
          <delta_ts>2017-10-09 01:43:01 -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>alex</cc>
    
    <cc>commit-queue</cc>
    
    <cc>olivier.blin</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>youennf</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1356364</commentid>
    <comment_count>0</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2017-10-04 05:43:05 -0700</bug_when>
    <thetext>Remove OpenWebRTC backend</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1356366</commentid>
    <comment_count>1</comment_count>
      <attachid>322657</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2017-10-04 05:44:36 -0700</bug_when>
    <thetext>Created attachment 322657
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1356371</commentid>
    <comment_count>2</comment_count>
      <attachid>322659</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2017-10-04 06:00:35 -0700</bug_when>
    <thetext>Created attachment 322659
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1356378</commentid>
    <comment_count>3</comment_count>
      <attachid>322664</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2017-10-04 06:23:05 -0700</bug_when>
    <thetext>Created attachment 322664
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1356396</commentid>
    <comment_count>4</comment_count>
      <attachid>322667</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2017-10-04 07:24:38 -0700</bug_when>
    <thetext>Created attachment 322667
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1356414</commentid>
    <comment_count>5</comment_count>
      <attachid>322670</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2017-10-04 07:54:48 -0700</bug_when>
    <thetext>Created attachment 322670
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1356426</commentid>
    <comment_count>6</comment_count>
      <attachid>322673</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2017-10-04 08:38:38 -0700</bug_when>
    <thetext>Created attachment 322673
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1356431</commentid>
    <comment_count>7</comment_count>
      <attachid>322676</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2017-10-04 08:54:30 -0700</bug_when>
    <thetext>Created attachment 322676
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1356462</commentid>
    <comment_count>8</comment_count>
      <attachid>322676</attachid>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2017-10-04 09:50:39 -0700</bug_when>
    <thetext>Comment on attachment 322676
Patch

LGTM</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1356463</commentid>
    <comment_count>9</comment_count>
      <attachid>322676</attachid>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2017-10-04 09:51:18 -0700</bug_when>
    <thetext>Comment on attachment 322676
Patch

LGTM</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1356507</commentid>
    <comment_count>10</comment_count>
      <attachid>322676</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-10-04 10:50:12 -0700</bug_when>
    <thetext>Comment on attachment 322676
Patch

Clearing flags on attachment: 322676

Committed r222858: &lt;http://trac.webkit.org/changeset/222858&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1356508</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-10-04 10:50:13 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1356509</commentid>
    <comment_count>12</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-10-04 10:51:03 -0700</bug_when>
    <thetext>&lt;rdar://problem/34815230&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1358194</commentid>
    <comment_count>13</comment_count>
    <who name="Olivier Blin">olivier.blin</who>
    <bug_when>2017-10-09 01:43:01 -0700</bug_when>
    <thetext>There are still a few OpenWebRTC bits:
- Source/cmake/FindOpenWebRTC.cmake
- find_package(OpenWebRTC) blocks in OptionsGTK.cmake and OptionsWPE.cmake</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>322657</attachid>
            <date>2017-10-04 05:44:36 -0700</date>
            <delta_ts>2017-10-04 06:00:30 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-177868-20171004144434.patch</filename>
            <type>text/plain</type>
            <size>249279</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjIyODM0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzIwOWYyMWRiZDdiYWJk
NjQyODZiYTRjMDYzYTU5NWI2YTk1MzVhMi4uNTE5ZTJkYzVhNjVhNWE0YTcwNjgwOWJlOGNmNzg4
MGMwYjQ4NTQ3OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDU0IEBACiAyMDE3LTEwLTA0ICBZb3Vl
bm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KIAorICAgICAgICBSZW1vdmUgT3BlbldlYlJU
QyBiYWNrZW5kCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNzc4NjgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIERlcml2ZWRTb3VyY2VzLm1ha2U6CisgICAg
ICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYUVuZHBvaW50UGVlckNvbm5lY3Rpb24uY3Bw
OiBSZW1vdmVkLgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFFbmRwb2ludFBl
ZXJDb25uZWN0aW9uLmg6IFJlbW92ZWQuCisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9N
ZWRpYUVuZHBvaW50U2Vzc2lvbkRlc2NyaXB0aW9uLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBN
b2R1bGVzL21lZGlhc3RyZWFtL01lZGlhRW5kcG9pbnRTZXNzaW9uRGVzY3JpcHRpb24uaDogUmVt
b3ZlZC4KKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL1NEUFByb2Nlc3Nvci5jcHA6IFJl
bW92ZWQuCisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9TRFBQcm9jZXNzb3IuaDogUmVt
b3ZlZC4KKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL2xpYndlYnJ0Yy9MaWJXZWJSVENN
ZWRpYUVuZHBvaW50LmNwcDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2o6CisgICAgICAgICogcGxhdGZvcm0vR1N0cmVhbWVyLmNtYWtlOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmJ1aWxk
TWVkaWFFbmdpbmVzVmVjdG9yKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFt
ZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c3VwcG9ydHNUeXBlKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyLmNw
cDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyLmg6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0v
bWVkaWFzdHJlYW0vTWVkaWFFbmRwb2ludC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZv
cm0vbWVkaWFzdHJlYW0vTWVkaWFFbmRwb2ludC5oOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRm
b3JtL21lZGlhc3RyZWFtL01lZGlhRW5kcG9pbnRTZXNzaW9uQ29uZmlndXJhdGlvbi5oOiBSZW1v
dmVkLgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL1NEUFByb2Nlc3NvclNjcmlwdFJl
c291cmNlLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9TRFBQ
cm9jZXNzb3JTY3JpcHRSZXNvdXJjZS5oOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL21l
ZGlhc3RyZWFtL29wZW53ZWJydGMvTWVkaWFFbmRwb2ludE93ci5jcHA6IFJlbW92ZWQuCisgICAg
ICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vb3BlbndlYnJ0Yy9NZWRpYUVuZHBvaW50T3dyLmg6
IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vb3BlbndlYnJ0Yy9PcGVu
V2ViUlRDVXRpbGl0aWVzLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0
cmVhbS9vcGVud2VicnRjL09wZW5XZWJSVENVdGlsaXRpZXMuaDogUmVtb3ZlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9vcGVud2VicnRjL1JlYWx0aW1lQXVkaW9Tb3VyY2VPd3Iu
aDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9vcGVud2VicnRjL1Jl
YWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJPd3IuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRm
b3JtL21lZGlhc3RyZWFtL29wZW53ZWJydGMvUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlck93ci5o
OiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL29wZW53ZWJydGMvUmVh
bHRpbWVNZWRpYVNvdXJjZU93ci5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vbWVk
aWFzdHJlYW0vb3BlbndlYnJ0Yy9SZWFsdGltZU1lZGlhU291cmNlT3dyLmg6IFJlbW92ZWQuCisg
ICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vb3BlbndlYnJ0Yy9SZWFsdGltZVZpZGVvU291
cmNlT3dyLmg6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vbW9jay9Nb2NrTWVkaWFFbmRw
b2ludC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vbW9jay9Nb2NrTWVkaWFFbmRw
b2ludC5oOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL21vY2svTW9ja1JlYWx0aW1lTWVk
aWFTb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TW9ja1JlYWx0aW1lTWVkaWFTb3VyY2U6
Ok1vY2tSZWFsdGltZU1lZGlhU291cmNlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tb2NrL01vY2tS
ZWFsdGltZU1lZGlhU291cmNlLmg6CisgICAgICAgICogdGVzdGluZy9JbnRlcm5hbHMuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjpJbnRlcm5hbHMpOgorICAgICAgICAoV2ViQ29y
ZTo6SW50ZXJuYWxzOjplbmFibGVNb2NrTWVkaWFFbmRwb2ludCk6IERlbGV0ZWQuCisgICAgICAg
ICogdGVzdGluZy9JbnRlcm5hbHMuaDoKKworMjAxNy0xMC0wNCAgWW91ZW5uIEZhYmxldCAgPHlv
dWVubkBhcHBsZS5jb20+CisKICAgICAgICAgQWRkIHF1b3RhIHRvIGNhY2hlIEFQSQogICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc3NTUyCiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNvcmUvQ01h
a2VMaXN0cy50eHQKaW5kZXggMWNjMTZjN2QxZmFiZGVmNjU3OGI0MjIxMTFkYmI1NjVlMzkwNDg5
ZC4uYmE5NzY4NmJkZGJhYzIzYzhlZjRlOGI4NzdlZWRjMjRmMjAyM2MwNiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VM
aXN0cy50eHQKQEAgLTEwOTMsOCArMTA5Myw2IEBAIHNldChXZWJDb3JlX1NPVVJDRVMKICAgICBN
b2R1bGVzL21lZGlhc3RyZWFtL01lZGlhRGV2aWNlcy5jcHAKICAgICBNb2R1bGVzL21lZGlhc3Ry
ZWFtL01lZGlhRGV2aWNlc0VudW1lcmF0aW9uUmVxdWVzdC5jcHAKICAgICBNb2R1bGVzL21lZGlh
c3RyZWFtL01lZGlhRGV2aWNlc1JlcXVlc3QuY3BwCi0gICAgTW9kdWxlcy9tZWRpYXN0cmVhbS9N
ZWRpYUVuZHBvaW50UGVlckNvbm5lY3Rpb24uY3BwCi0gICAgTW9kdWxlcy9tZWRpYXN0cmVhbS9N
ZWRpYUVuZHBvaW50U2Vzc2lvbkRlc2NyaXB0aW9uLmNwcAogICAgIE1vZHVsZXMvbWVkaWFzdHJl
YW0vTWVkaWFTdHJlYW0uY3BwCiAgICAgTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbUV2
ZW50LmNwcAogICAgIE1vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1SZWdpc3RyeS5jcHAK
QEAgLTI1NjAsNyArMjU1OCw2IEBAIHNldChXZWJDb3JlX1NPVVJDRVMKIAogICAgIHBsYXRmb3Jt
L21vY2svRGV2aWNlT3JpZW50YXRpb25DbGllbnRNb2NrLmNwcAogICAgIHBsYXRmb3JtL21vY2sv
R2VvbG9jYXRpb25DbGllbnRNb2NrLmNwcAotICAgIHBsYXRmb3JtL21vY2svTW9ja01lZGlhRW5k
cG9pbnQuY3BwCiAgICAgcGxhdGZvcm0vbW9jay9Nb2NrUmVhbHRpbWVBdWRpb1NvdXJjZS5jcHAK
ICAgICBwbGF0Zm9ybS9tb2NrL01vY2tSZWFsdGltZU1lZGlhU291cmNlLmNwcAogICAgIHBsYXRm
b3JtL21vY2svTW9ja1JlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXIuY3BwCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtlIGIvU291cmNlL1dlYkNvcmUvRGVyaXZl
ZFNvdXJjZXMubWFrZQppbmRleCAxZDVlZjAyMGI0YzJlOWZiYjBiZTMxMDFhODA3MjlkN2E2OWU5
ZmVlLi5kMzZhMTk4N2M2ZDA3YWIwYWM1NDQ3NTk2YTFiNGE0ZDNiODE4ZjdmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtlCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L0Rlcml2ZWRTb3VyY2VzLm1ha2UKQEAgLTExODQsMjMgKzExODQsNiBAQCBDb2xvckRhdGEuY3Bw
IDogcGxhdGZvcm0vQ29sb3JEYXRhLmdwZXJmICQoV2ViQ29yZSkvbWFrZS1oYXNoLXRvb2xzLnBs
CiAKICMgLS0tLS0tLS0KIAotIyBXZWJSVEMgc2NyaXB0cwotCi1XRUJDT1JFX1NEUF9QUk9DRVNT
T1JfU0NSSVBUUyA9IAotCi1pZmVxICgkKE9TKSxNQUNPUykKLSAgICBXRUJDT1JFX1NEUF9QUk9D
RVNTT1JfU0NSSVBUUyA6PSAkKFdFQkNPUkVfU0RQX1BST0NFU1NPUl9TQ1JJUFRTKSAkKFdlYkNv
cmUpL01vZHVsZXMvbWVkaWFzdHJlYW0vc2RwLmpzCi1lbmRpZgotCi1pZmRlZiBXRUJDT1JFX1NE
UF9QUk9DRVNTT1JfU0NSSVBUUwotYWxsIDogU0RQUHJvY2Vzc29yU2NyaXB0c0RhdGEuaAotCi1T
RFBQcm9jZXNzb3JTY3JpcHRzRGF0YS5oIDogJChKYXZhU2NyaXB0Q29yZV9TQ1JJUFRTX0RJUikv
bWFrZS1qcy1maWxlLWFycmF5cy5weSAkKFdFQkNPUkVfU0RQX1BST0NFU1NPUl9TQ1JJUFRTKQot
CSQoUFlUSE9OKSAkKEphdmFTY3JpcHRDb3JlX1NDUklQVFNfRElSKS9tYWtlLWpzLWZpbGUtYXJy
YXlzLnB5IC1uIFdlYkNvcmUgJEAgU0RQUHJvY2Vzc29yU2NyaXB0c0RhdGEuY3BwICQoV0VCQ09S
RV9TRFBfUFJPQ0VTU09SX1NDUklQVFMpCi1lbmRpZgotCi0jIC0tLS0tLS0tCi0KICMgdXNlciBh
Z2VudCBzdHlsZSBzaGVldHMKIAogVVNFUl9BR0VOVF9TVFlMRV9TSEVFVFMgPSAkKFdlYkNvcmUp
L2Nzcy9odG1sLmNzcyAkKFdlYkNvcmUpL2Nzcy9xdWlya3MuY3NzICQoV2ViQ29yZSkvY3NzL3Bs
dWdJbnMuY3NzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFt
L01lZGlhRW5kcG9pbnRQZWVyQ29ubmVjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L21lZGlhc3RyZWFtL01lZGlhRW5kcG9pbnRQZWVyQ29ubmVjdGlvbi5jcHAKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDFlOTI1MjdhZTJmZDY3NmE3NzM5ZDRmNzljOTZkZjY2ZmUwNWIw
YTAuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYUVuZHBvaW50UGVlckNvbm5lY3Rpb24u
Y3BwCisrKyAvZGV2L251bGwKQEAgLTEsODkzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTUgRXJpY3Nzb24gQUIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiAgICBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiAgICBkaXN0cmlidXRpb24u
Ci0gKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIEVyaWNzc29uIG5vciB0aGUgbmFtZXMgb2YgaXRz
IGNvbnRyaWJ1dG9ycwotICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0gKiAgICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcu
aCIKLSNpbmNsdWRlICJNZWRpYUVuZHBvaW50UGVlckNvbm5lY3Rpb24uaCIKLQotI2lmIEVOQUJM
RShXRUJfUlRDKQotCi0jaW5jbHVkZSAiRXZlbnROYW1lcy5oIgotI2luY2x1ZGUgIkpTUlRDU2Vz
c2lvbkRlc2NyaXB0aW9uLmgiCi0jaW5jbHVkZSAiTWVkaWFFbmRwb2ludFNlc3Npb25Db25maWd1
cmF0aW9uLmgiCi0jaW5jbHVkZSAiTWVkaWFFbmRwb2ludFNlc3Npb25EZXNjcmlwdGlvbi5oIgot
I2luY2x1ZGUgIk1lZGlhU3RyZWFtLmgiCi0jaW5jbHVkZSAiTWVkaWFTdHJlYW1FdmVudC5oIgot
I2luY2x1ZGUgIk1lZGlhU3RyZWFtVHJhY2suaCIKLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5o
IgotI2luY2x1ZGUgIlBlZXJNZWRpYURlc2NyaXB0aW9uLmgiCi0jaW5jbHVkZSAiUlRDQW5zd2Vy
T3B0aW9ucy5oIgotI2luY2x1ZGUgIlJUQ0NvbmZpZ3VyYXRpb24uaCIKLSNpbmNsdWRlICJSVENJ
Y2VDYW5kaWRhdGUuaCIKLSNpbmNsdWRlICJSVENPZmZlck9wdGlvbnMuaCIKLSNpbmNsdWRlICJS
VENQZWVyQ29ubmVjdGlvbi5oIgotI2luY2x1ZGUgIlJUQ1BlZXJDb25uZWN0aW9uSWNlRXZlbnQu
aCIKLSNpbmNsdWRlICJSVENSdHBUcmFuc2NlaXZlci5oIgotI2luY2x1ZGUgIlJUQ1RyYWNrRXZl
bnQuaCIKLSNpbmNsdWRlICJTRFBQcm9jZXNzb3IuaCIKLSNpbmNsdWRlIDx3dGYvRnVuY3Rpb24u
aD4KLSNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0Jhc2U2
NC5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXVzaW5nIG5hbWVzcGFjZSBQZWVyQ29ubmVj
dGlvbjsKLQotdXNpbmcgTWVkaWFEZXNjcmlwdGlvblZlY3RvciA9IFZlY3RvcjxQZWVyTWVkaWFE
ZXNjcmlwdGlvbj47Ci11c2luZyBSdHBUcmFuc2NlaXZlclZlY3RvciA9IFZlY3RvcjxSZWZQdHI8
UlRDUnRwVHJhbnNjZWl2ZXI+PjsKLQotLy8gV2UgdXNlIGJhc2U2NCB0byBnZW5lcmF0ZSB0aGUg
cmFuZG9tIHN0cmluZ3Mgc28gd2UgbmVlZCBhIHNpemUgdGhhdCBhdm9pZHMgcGFkZGluZyB0byBn
ZXQgaWNlLWNoYXJzLgotc3RhdGljIGNvbnN0IHNpemVfdCBjbmFtZVNpemUgPSAxODsKLS8vIFNp
emUgcmFuZ2UgZnJvbSA0IHRvIDI1NiBpY2UtY2hhcnMgZGVmaW5lZCBpbiBSRkMgNTI0NS4KLXN0
YXRpYyBjb25zdCBzaXplX3QgaWNlVWZyYWdTaXplID0gNjsKLS8vIFNpemUgcmFuZ2UgZnJvbSAy
MiB0byAyNTYgaWNlLWNoYXJzIGRlZmluZWQgaW4gUkZDIDUyNDUuCi1zdGF0aWMgY29uc3Qgc2l6
ZV90IGljZVBhc3N3b3JkU2l6ZSA9IDI0OwotCi0jaWYgIVVTRShMSUJXRUJSVEMpCi1zdGF0aWMg
c3RkOjp1bmlxdWVfcHRyPFBlZXJDb25uZWN0aW9uQmFja2VuZD4gY3JlYXRlTWVkaWFFbmRwb2lu
dFBlZXJDb25uZWN0aW9uKFJUQ1BlZXJDb25uZWN0aW9uJiBwZWVyQ29ubmVjdGlvbikKLXsKLSAg
ICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPFBlZXJDb25uZWN0aW9uQmFja2VuZD4obmV3IE1lZGlh
RW5kcG9pbnRQZWVyQ29ubmVjdGlvbihwZWVyQ29ubmVjdGlvbikpOwotfQotCi1DcmVhdGVQZWVy
Q29ubmVjdGlvbkJhY2tlbmQgUGVlckNvbm5lY3Rpb25CYWNrZW5kOjpjcmVhdGUgPSBjcmVhdGVN
ZWRpYUVuZHBvaW50UGVlckNvbm5lY3Rpb247Ci0jZW5kaWYKLQotc3RhdGljIFN0cmluZyByYW5k
b21TdHJpbmcoc2l6ZV90IHNpemUpCi17Ci0gICAgdW5zaWduZWQgY2hhciByYW5kb21WYWx1ZXNb
c2l6ZV07Ci0gICAgY3J5cHRvZ3JhcGhpY2FsbHlSYW5kb21WYWx1ZXMocmFuZG9tVmFsdWVzLCBz
aXplKTsKLSAgICByZXR1cm4gYmFzZTY0RW5jb2RlKHJhbmRvbVZhbHVlcywgc2l6ZSk7Ci19Ci0K
LU1lZGlhRW5kcG9pbnRQZWVyQ29ubmVjdGlvbjo6TWVkaWFFbmRwb2ludFBlZXJDb25uZWN0aW9u
KFJUQ1BlZXJDb25uZWN0aW9uJiBwZWVyQ29ubmVjdGlvbikKLSAgICA6IFBlZXJDb25uZWN0aW9u
QmFja2VuZChwZWVyQ29ubmVjdGlvbikKLSAgICAsIG1fbWVkaWFFbmRwb2ludChNZWRpYUVuZHBv
aW50OjpjcmVhdGUoKnRoaXMpKQotICAgICwgbV9zZHBQcm9jZXNzb3Ioc3RkOjptYWtlX3VuaXF1
ZTxTRFBQcm9jZXNzb3I+KG1fcGVlckNvbm5lY3Rpb24uc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgp
KSkKLSAgICAsIG1fY25hbWUocmFuZG9tU3RyaW5nKGNuYW1lU2l6ZSkpCi0gICAgLCBtX2ljZVVm
cmFnKHJhbmRvbVN0cmluZyhpY2VVZnJhZ1NpemUpKQotICAgICwgbV9pY2VQYXNzd29yZChyYW5k
b21TdHJpbmcoaWNlUGFzc3dvcmRTaXplKSkKLXsKLSAgICBBU1NFUlQobV9tZWRpYUVuZHBvaW50
KTsKLQotICAgIG1fZGVmYXVsdEF1ZGlvUGF5bG9hZHMgPSBtX21lZGlhRW5kcG9pbnQtPmdldERl
ZmF1bHRBdWRpb1BheWxvYWRzKCk7Ci0gICAgbV9kZWZhdWx0VmlkZW9QYXlsb2FkcyA9IG1fbWVk
aWFFbmRwb2ludC0+Z2V0RGVmYXVsdFZpZGVvUGF5bG9hZHMoKTsKLQotICAgIC8vIFRhc2tzIChz
ZWUgcnVuVGFzaygpKSB3aWxsIGJlIGRlZmVycmVkIHVudGlsIHdlIGdldCB0aGUgRFRMUyBmaW5n
ZXJwcmludC4KLSAgICBtX21lZGlhRW5kcG9pbnQtPmdlbmVyYXRlRHRsc0luZm8oKTsKLX0KLQot
c3RhdGljIFJUQ1J0cFRyYW5zY2VpdmVyKiBtYXRjaFRyYW5zY2VpdmVyKGNvbnN0IFJ0cFRyYW5z
Y2VpdmVyVmVjdG9yJiB0cmFuc2NlaXZlcnMsIGNvbnN0IFdURjo6RnVuY3Rpb248Ym9vbChSVENS
dHBUcmFuc2NlaXZlciYpPiYgbWF0Y2hGdW5jdGlvbikKLXsKLSAgICBmb3IgKGF1dG8mIHRyYW5z
Y2VpdmVyIDogdHJhbnNjZWl2ZXJzKSB7Ci0gICAgICAgIGlmIChtYXRjaEZ1bmN0aW9uKCp0cmFu
c2NlaXZlcikpCi0gICAgICAgICAgICByZXR1cm4gdHJhbnNjZWl2ZXIuZ2V0KCk7Ci0gICAgfQot
ICAgIHJldHVybiBudWxscHRyOwotfQotCi1zdGF0aWMgUlRDUnRwVHJhbnNjZWl2ZXIqIG1hdGNo
VHJhbnNjZWl2ZXJCeU1pZChjb25zdCBSdHBUcmFuc2NlaXZlclZlY3RvciYgdHJhbnNjZWl2ZXJz
LCBjb25zdCBTdHJpbmcmIG1pZCkKLXsKLSAgICByZXR1cm4gbWF0Y2hUcmFuc2NlaXZlcih0cmFu
c2NlaXZlcnMsIFsmbWlkXSAoUlRDUnRwVHJhbnNjZWl2ZXImIGN1cnJlbnQpIHsKLSAgICAgICAg
cmV0dXJuIGN1cnJlbnQubWlkKCkgPT0gbWlkOwotICAgIH0pOwotfQotCi1zdGF0aWMgYm9vbCBo
YXNVbmFzc29jaWF0ZWRUcmFuc2NlaXZlcnMoY29uc3QgUnRwVHJhbnNjZWl2ZXJWZWN0b3ImIHRy
YW5zY2VpdmVycykKLXsKLSAgICByZXR1cm4gbWF0Y2hUcmFuc2NlaXZlcih0cmFuc2NlaXZlcnMs
IFtdIChSVENSdHBUcmFuc2NlaXZlciYgY3VycmVudCkgewotICAgICAgICByZXR1cm4gY3VycmVu
dC5taWQoKS5pc051bGwoKSAmJiAhY3VycmVudC5zdG9wcGVkKCk7Ci0gICAgfSk7Ci19Ci0KLXZv
aWQgTWVkaWFFbmRwb2ludFBlZXJDb25uZWN0aW9uOjpydW5UYXNrKEZ1bmN0aW9uPHZvaWQgKCk+
JiYgdGFzaykKLXsKLSAgICBpZiAobV9kdGxzRmluZ2VycHJpbnQuaXNOdWxsKCkpIHsKLSAgICAg
ICAgLy8gT25seSBvbmUgdGFzayBuZWVkcyB0byBiZSBkZWZlcnJlZCBzaW5jZSBpdCB3aWxsIGhv
bGQgb2ZmIGFueSBvdGhlcnMgdW50aWwgY29tcGxldGVkLgotICAgICAgICBBU1NFUlQoIW1faW5p
dGlhbERlZmVycmVkVGFzayk7Ci0gICAgICAgIG1faW5pdGlhbERlZmVycmVkVGFzayA9IFdURk1v
dmUodGFzayk7Ci0gICAgfSBlbHNlCi0gICAgICAgIGNhbGxPbk1haW5UaHJlYWQoV1RGTW92ZSh0
YXNrKSk7Ci19Ci0KLXZvaWQgTWVkaWFFbmRwb2ludFBlZXJDb25uZWN0aW9uOjpzdGFydFJ1bm5p
bmdUYXNrcygpCi17Ci0gICAgaWYgKCFtX2luaXRpYWxEZWZlcnJlZFRhc2spCi0gICAgICAgIHJl
dHVybjsKLQotICAgIG1faW5pdGlhbERlZmVycmVkVGFzaygpOwotICAgIG1faW5pdGlhbERlZmVy
cmVkVGFzayA9IG51bGxwdHI7Ci19Ci0KLXZvaWQgTWVkaWFFbmRwb2ludFBlZXJDb25uZWN0aW9u
Ojpkb0NyZWF0ZU9mZmVyKFJUQ09mZmVyT3B0aW9ucyYmIG9wdGlvbnMpCi17Ci0gICAgcnVuVGFz
ayhbdGhpcywgcHJvdGVjdGVkT3B0aW9ucyA9IFdURk1vdmUob3B0aW9ucyldKCkgbXV0YWJsZSB7
Ci0gICAgICAgIGNyZWF0ZU9mZmVyVGFzayhwcm90ZWN0ZWRPcHRpb25zKTsKLSAgICB9KTsKLX0K
LQotdm9pZCBNZWRpYUVuZHBvaW50UGVlckNvbm5lY3Rpb246OmNyZWF0ZU9mZmVyVGFzayhjb25z
dCBSVENPZmZlck9wdGlvbnMmKQotewotICAgIEFTU0VSVCghbV9kdGxzRmluZ2VycHJpbnQuaXNF
bXB0eSgpKTsKLQotICAgIE1lZGlhRW5kcG9pbnRTZXNzaW9uRGVzY3JpcHRpb24qIGxvY2FsRGVz
Y3JpcHRpb24gPSBpbnRlcm5hbExvY2FsRGVzY3JpcHRpb24oKTsKLSAgICBSZWZQdHI8TWVkaWFF
bmRwb2ludFNlc3Npb25Db25maWd1cmF0aW9uPiBjb25maWd1cmF0aW9uU25hcHNob3QgPSBsb2Nh
bERlc2NyaXB0aW9uID8KLSAgICAgICAgbG9jYWxEZXNjcmlwdGlvbi0+Y29uZmlndXJhdGlvbigp
LT5jbG9uZSgpIDogTWVkaWFFbmRwb2ludFNlc3Npb25Db25maWd1cmF0aW9uOjpjcmVhdGUoKTsK
LQotICAgIGNvbmZpZ3VyYXRpb25TbmFwc2hvdC0+c2V0QnVuZGxlUG9saWN5KG1fcGVlckNvbm5l
Y3Rpb24uZ2V0Q29uZmlndXJhdGlvbigpLmJ1bmRsZVBvbGljeSk7Ci0gICAgY29uZmlndXJhdGlv
blNuYXBzaG90LT5zZXRTZXNzaW9uVmVyc2lvbihtX3NkcE9mZmVyU2Vzc2lvblZlcnNpb24rKyk7
Ci0KLSAgICBhdXRvIHRyYW5zY2VpdmVycyA9IFJ0cFRyYW5zY2VpdmVyVmVjdG9yKG1fcGVlckNv
bm5lY3Rpb24uZ2V0VHJhbnNjZWl2ZXJzKCkpOwotCi0gICAgLy8gUmVtb3ZlIGFueSB0cmFuc2Nl
aXZlciBvYmplY3RzIGZyb20gdHJhbnNjZWl2ZXJzIHRoYXQgY2FuIGJlIG1hdGNoZWQgdG8gYW4g
ZXhpc3RpbmcgbWVkaWEgZGVzY3JpcHRpb24uCi0gICAgZm9yIChhdXRvJiBtZWRpYURlc2NyaXB0
aW9uIDogY29uZmlndXJhdGlvblNuYXBzaG90LT5tZWRpYURlc2NyaXB0aW9ucygpKSB7Ci0gICAg
ICAgIGlmICghbWVkaWFEZXNjcmlwdGlvbi5wb3J0KSB7Ci0gICAgICAgICAgICAvLyBUaGlzIG1l
ZGlhIGRlc2NyaXB0aW9uIHNob3VsZCBiZSByZWN5Y2xlZC4KLSAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICB9Ci0KLSAgICAgICAgUlRDUnRwVHJhbnNjZWl2ZXIqIHRyYW5zY2VpdmVyID0g
bWF0Y2hUcmFuc2NlaXZlckJ5TWlkKHRyYW5zY2VpdmVycywgbWVkaWFEZXNjcmlwdGlvbi5taWQp
OwotICAgICAgICBpZiAoIXRyYW5zY2VpdmVyKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAg
ICAgICAgbWVkaWFEZXNjcmlwdGlvbi5tb2RlID0gdHJhbnNjZWl2ZXItPmRpcmVjdGlvblN0cmlu
ZygpOwotICAgICAgICBpZiAodHJhbnNjZWl2ZXItPmhhc1NlbmRpbmdEaXJlY3Rpb24oKSkgewot
ICAgICAgICAgICAgYXV0byYgc2VuZGVyID0gdHJhbnNjZWl2ZXItPnNlbmRlcigpOwotCi0gICAg
ICAgICAgICBtZWRpYURlc2NyaXB0aW9uLm1lZGlhU3RyZWFtSWQgPSBzZW5kZXIubWVkaWFTdHJl
YW1JZHMoKVswXTsKLSAgICAgICAgICAgIG1lZGlhRGVzY3JpcHRpb24ubWVkaWFTdHJlYW1UcmFj
a0lkID0gc2VuZGVyLnRyYWNrSWQoKTsKLSAgICAgICAgfQotCi0gICAgICAgIHRyYW5zY2VpdmVy
cy5yZW1vdmVGaXJzdCh0cmFuc2NlaXZlcik7Ci0gICAgfQotCi0gICAgLy8gQWRkIG1lZGlhIGRl
c2NyaXB0aW9ucyBmb3IgcmVtYWluaW5nIHRyYW5zY2VpdmVycy4KLSAgICBmb3IgKGF1dG8mIHRy
YW5zY2VpdmVyIDogdHJhbnNjZWl2ZXJzKSB7Ci0gICAgICAgIFBlZXJNZWRpYURlc2NyaXB0aW9u
IG1lZGlhRGVzY3JpcHRpb247Ci0gICAgICAgIGF1dG8mIHNlbmRlciA9IHRyYW5zY2VpdmVyLT5z
ZW5kZXIoKTsKLQotICAgICAgICBtZWRpYURlc2NyaXB0aW9uLm1vZGUgPSB0cmFuc2NlaXZlci0+
ZGlyZWN0aW9uU3RyaW5nKCk7Ci0gICAgICAgIG1lZGlhRGVzY3JpcHRpb24ubWlkID0gdHJhbnNj
ZWl2ZXItPnByb3Zpc2lvbmFsTWlkKCk7Ci0gICAgICAgIG1lZGlhRGVzY3JpcHRpb24ubWVkaWFT
dHJlYW1JZCA9IHNlbmRlci5tZWRpYVN0cmVhbUlkcygpWzBdOwotICAgICAgICBtZWRpYURlc2Ny
aXB0aW9uLnR5cGUgPSBzZW5kZXIudHJhY2tLaW5kKCk7Ci0gICAgICAgIG1lZGlhRGVzY3JpcHRp
b24ucGF5bG9hZHMgPSBzZW5kZXIudHJhY2tLaW5kKCkgPT0gImF1ZGlvIiA/IG1fZGVmYXVsdEF1
ZGlvUGF5bG9hZHMgOiBtX2RlZmF1bHRWaWRlb1BheWxvYWRzOwotICAgICAgICBtZWRpYURlc2Ny
aXB0aW9uLmR0bHNGaW5nZXJwcmludEhhc2hGdW5jdGlvbiA9IG1fZHRsc0ZpbmdlcnByaW50RnVu
Y3Rpb247Ci0gICAgICAgIG1lZGlhRGVzY3JpcHRpb24uZHRsc0ZpbmdlcnByaW50ID0gbV9kdGxz
RmluZ2VycHJpbnQ7Ci0gICAgICAgIG1lZGlhRGVzY3JpcHRpb24uY25hbWUgPSBtX2NuYW1lOwot
ICAgICAgICBtZWRpYURlc2NyaXB0aW9uLmFkZFNzcmMoY3J5cHRvZ3JhcGhpY2FsbHlSYW5kb21O
dW1iZXIoKSk7Ci0gICAgICAgIG1lZGlhRGVzY3JpcHRpb24uaWNlVWZyYWcgPSBtX2ljZVVmcmFn
OwotICAgICAgICBtZWRpYURlc2NyaXB0aW9uLmljZVBhc3N3b3JkID0gbV9pY2VQYXNzd29yZDsK
LQotICAgICAgICBpZiAoc2VuZGVyLnRyYWNrKCkpCi0gICAgICAgICAgICBtZWRpYURlc2NyaXB0
aW9uLm1lZGlhU3RyZWFtVHJhY2tJZCA9IHNlbmRlci50cmFja0lkKCk7Ci0KLSAgICAgICAgY29u
ZmlndXJhdGlvblNuYXBzaG90LT5hZGRNZWRpYURlc2NyaXB0aW9uKFdURk1vdmUobWVkaWFEZXNj
cmlwdGlvbikpOwotICAgIH0KLQotICAgIFN0cmluZyBzZHA7Ci0gICAgU0RQUHJvY2Vzc29yOjpS
ZXN1bHQgcmVzdWx0ID0gbV9zZHBQcm9jZXNzb3ItPmdlbmVyYXRlKCpjb25maWd1cmF0aW9uU25h
cHNob3QsIHNkcCk7Ci0gICAgaWYgKHJlc3VsdCAhPSBTRFBQcm9jZXNzb3I6OlJlc3VsdDo6U3Vj
Y2VzcykgewotICAgICAgICBjcmVhdGVPZmZlckZhaWxlZChFeGNlcHRpb24geyBPcGVyYXRpb25F
cnJvciwgIlNEUFByb2Nlc3NvciBpbnRlcm5hbCBlcnJvciIgfSk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0gICAgY3JlYXRlT2ZmZXJTdWNjZWVkZWQoV1RGTW92ZShzZHApKTsKLX0KLQotdm9p
ZCBNZWRpYUVuZHBvaW50UGVlckNvbm5lY3Rpb246OmRvQ3JlYXRlQW5zd2VyKFJUQ0Fuc3dlck9w
dGlvbnMmJiBvcHRpb25zKQotewotICAgIHJ1blRhc2soW3RoaXMsIHByb3RlY3RlZE9wdGlvbnMg
PSBXVEZNb3ZlKG9wdGlvbnMpXSgpIG11dGFibGUgewotICAgICAgICBjcmVhdGVBbnN3ZXJUYXNr
KHByb3RlY3RlZE9wdGlvbnMpOwotICAgIH0pOwotfQotCi12b2lkIE1lZGlhRW5kcG9pbnRQZWVy
Q29ubmVjdGlvbjo6Y3JlYXRlQW5zd2VyVGFzayhjb25zdCBSVENBbnN3ZXJPcHRpb25zJikKLXsK
LSAgICBBU1NFUlQoIW1fZHRsc0ZpbmdlcnByaW50LmlzRW1wdHkoKSk7Ci0KLSAgICBpZiAoIWlu
dGVybmFsUmVtb3RlRGVzY3JpcHRpb24oKSkgewotICAgICAgICBjcmVhdGVBbnN3ZXJGYWlsZWQo
RXhjZXB0aW9uIHsgSW52YWxpZFN0YXRlRXJyb3IsICJObyByZW1vdGUgZGVzY3JpcHRpb24gc2V0
IiB9KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIE1lZGlhRW5kcG9pbnRTZXNzaW9u
RGVzY3JpcHRpb24qIGxvY2FsRGVzY3JpcHRpb24gPSBpbnRlcm5hbExvY2FsRGVzY3JpcHRpb24o
KTsKLSAgICBSZWZQdHI8TWVkaWFFbmRwb2ludFNlc3Npb25Db25maWd1cmF0aW9uPiBjb25maWd1
cmF0aW9uU25hcHNob3QgPSBsb2NhbERlc2NyaXB0aW9uID8KLSAgICAgICAgbG9jYWxEZXNjcmlw
dGlvbi0+Y29uZmlndXJhdGlvbigpLT5jbG9uZSgpIDogTWVkaWFFbmRwb2ludFNlc3Npb25Db25m
aWd1cmF0aW9uOjpjcmVhdGUoKTsKLQotICAgIGNvbmZpZ3VyYXRpb25TbmFwc2hvdC0+c2V0QnVu
ZGxlUG9saWN5KG1fcGVlckNvbm5lY3Rpb24uZ2V0Q29uZmlndXJhdGlvbigpLmJ1bmRsZVBvbGlj
eSk7Ci0gICAgY29uZmlndXJhdGlvblNuYXBzaG90LT5zZXRTZXNzaW9uVmVyc2lvbihtX3NkcEFu
c3dlclNlc3Npb25WZXJzaW9uKyspOwotCi0gICAgYXV0byB0cmFuc2NlaXZlcnMgPSBSdHBUcmFu
c2NlaXZlclZlY3RvcihtX3BlZXJDb25uZWN0aW9uLmdldFRyYW5zY2VpdmVycygpKTsKLSAgICBh
dXRvJiByZW1vdGVNZWRpYURlc2NyaXB0aW9ucyA9IGludGVybmFsUmVtb3RlRGVzY3JpcHRpb24o
KS0+Y29uZmlndXJhdGlvbigpLT5tZWRpYURlc2NyaXB0aW9ucygpOwotCi0gICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IHJlbW90ZU1lZGlhRGVzY3JpcHRpb25zLnNpemUoKTsgKytpKSB7Ci0g
ICAgICAgIGF1dG8mIHJlbW90ZU1lZGlhRGVzY3JpcHRpb24gPSByZW1vdGVNZWRpYURlc2NyaXB0
aW9uc1tpXTsKLQotICAgICAgICBhdXRvKiB0cmFuc2NlaXZlciA9IG1hdGNoVHJhbnNjZWl2ZXJC
eU1pZCh0cmFuc2NlaXZlcnMsIHJlbW90ZU1lZGlhRGVzY3JpcHRpb24ubWlkKTsKLSAgICAgICAg
aWYgKCF0cmFuc2NlaXZlcikgewotICAgICAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgZmlu
ZCBhIG1hdGNoaW5nIHRyYW5zY2VpdmVyIGZvciByZW1vdGUgZGVzY3JpcHRpb24gd2hpbGUgY3Jl
YXRpbmcgYW5zd2VyIik7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAg
ICAgIGlmIChpID49IGNvbmZpZ3VyYXRpb25TbmFwc2hvdC0+bWVkaWFEZXNjcmlwdGlvbnMoKS5z
aXplKCkpIHsKLSAgICAgICAgICAgIFBlZXJNZWRpYURlc2NyaXB0aW9uIG5ld01lZGlhRGVzY3Jp
cHRpb247Ci0KLSAgICAgICAgICAgIGF1dG8mIHNlbmRlciA9IHRyYW5zY2VpdmVyLT5zZW5kZXIo
KTsKLSAgICAgICAgICAgIGlmIChzZW5kZXIudHJhY2soKSkgewotICAgICAgICAgICAgICAgIGlm
IChzZW5kZXIubWVkaWFTdHJlYW1JZHMoKS5zaXplKCkpCi0gICAgICAgICAgICAgICAgICAgIG5l
d01lZGlhRGVzY3JpcHRpb24ubWVkaWFTdHJlYW1JZCA9IHNlbmRlci5tZWRpYVN0cmVhbUlkcygp
WzBdOwotICAgICAgICAgICAgICAgIG5ld01lZGlhRGVzY3JpcHRpb24ubWVkaWFTdHJlYW1UcmFj
a0lkID0gc2VuZGVyLnRyYWNrSWQoKTsKLSAgICAgICAgICAgICAgICBuZXdNZWRpYURlc2NyaXB0
aW9uLmFkZFNzcmMoY3J5cHRvZ3JhcGhpY2FsbHlSYW5kb21OdW1iZXIoKSk7Ci0gICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIG5ld01lZGlhRGVzY3JpcHRpb24ubW9kZSA9IHRyYW5zY2VpdmVy
LT5kaXJlY3Rpb25TdHJpbmcoKTsKLSAgICAgICAgICAgIG5ld01lZGlhRGVzY3JpcHRpb24udHlw
ZSA9IHJlbW90ZU1lZGlhRGVzY3JpcHRpb24udHlwZTsKLSAgICAgICAgICAgIG5ld01lZGlhRGVz
Y3JpcHRpb24ubWlkID0gcmVtb3RlTWVkaWFEZXNjcmlwdGlvbi5taWQ7Ci0gICAgICAgICAgICBu
ZXdNZWRpYURlc2NyaXB0aW9uLmR0bHNTZXR1cCA9IHJlbW90ZU1lZGlhRGVzY3JpcHRpb24uZHRs
c1NldHVwID09ICJhY3RpdmUiID8gInBhc3NpdmUiIDogImFjdGl2ZSI7Ci0gICAgICAgICAgICBu
ZXdNZWRpYURlc2NyaXB0aW9uLmR0bHNGaW5nZXJwcmludEhhc2hGdW5jdGlvbiA9IG1fZHRsc0Zp
bmdlcnByaW50RnVuY3Rpb247Ci0gICAgICAgICAgICBuZXdNZWRpYURlc2NyaXB0aW9uLmR0bHNG
aW5nZXJwcmludCA9IG1fZHRsc0ZpbmdlcnByaW50OwotICAgICAgICAgICAgbmV3TWVkaWFEZXNj
cmlwdGlvbi5jbmFtZSA9IG1fY25hbWU7Ci0gICAgICAgICAgICBuZXdNZWRpYURlc2NyaXB0aW9u
LmljZVVmcmFnID0gbV9pY2VVZnJhZzsKLSAgICAgICAgICAgIG5ld01lZGlhRGVzY3JpcHRpb24u
aWNlUGFzc3dvcmQgPSBtX2ljZVBhc3N3b3JkOwotCi0gICAgICAgICAgICBjb25maWd1cmF0aW9u
U25hcHNob3QtPmFkZE1lZGlhRGVzY3JpcHRpb24oV1RGTW92ZShuZXdNZWRpYURlc2NyaXB0aW9u
KSk7Ci0gICAgICAgIH0KLQotICAgICAgICBQZWVyTWVkaWFEZXNjcmlwdGlvbiYgbG9jYWxNZWRp
YURlc2NyaXB0aW9uID0gY29uZmlndXJhdGlvblNuYXBzaG90LT5tZWRpYURlc2NyaXB0aW9ucygp
W2ldOwotCi0gICAgICAgIGxvY2FsTWVkaWFEZXNjcmlwdGlvbi5wYXlsb2FkcyA9IHJlbW90ZU1l
ZGlhRGVzY3JpcHRpb24ucGF5bG9hZHM7Ci0gICAgICAgIGxvY2FsTWVkaWFEZXNjcmlwdGlvbi5y
dGNwTXV4ID0gcmVtb3RlTWVkaWFEZXNjcmlwdGlvbi5ydGNwTXV4OwotCi0gICAgICAgIGlmICgh
bG9jYWxNZWRpYURlc2NyaXB0aW9uLnNzcmNzLnNpemUoKSkKLSAgICAgICAgICAgIGxvY2FsTWVk
aWFEZXNjcmlwdGlvbi5hZGRTc3JjKGNyeXB0b2dyYXBoaWNhbGx5UmFuZG9tTnVtYmVyKCkpOwot
Ci0gICAgICAgIGlmIChsb2NhbE1lZGlhRGVzY3JpcHRpb24uZHRsc1NldHVwID09ICJhY3RwYXNz
IikKLSAgICAgICAgICAgIGxvY2FsTWVkaWFEZXNjcmlwdGlvbi5kdGxzU2V0dXAgPSAicGFzc2l2
ZSI7Ci0KLSAgICAgICAgdHJhbnNjZWl2ZXJzLnJlbW92ZUZpcnN0KHRyYW5zY2VpdmVyKTsKLSAg
ICB9Ci0KLSAgICAvLyBVbmFzc29jaWF0ZWQgKG5vbi1zdG9wcGVkKSB0cmFuc2NlaXZlcnMgbmVl
ZCB0byBiZSBuZWdvdGlhdGVkIGluIGEgZm9sbG93LXVwIG9mZmVyLgotICAgIGlmIChoYXNVbmFz
c29jaWF0ZWRUcmFuc2NlaXZlcnModHJhbnNjZWl2ZXJzKSkKLSAgICAgICAgbWFya0FzTmVlZGlu
Z05lZ290aWF0aW9uKCk7Ci0KLSAgICBTdHJpbmcgc2RwOwotICAgIFNEUFByb2Nlc3Nvcjo6UmVz
dWx0IHJlc3VsdCA9IG1fc2RwUHJvY2Vzc29yLT5nZW5lcmF0ZSgqY29uZmlndXJhdGlvblNuYXBz
aG90LCBzZHApOwotICAgIGlmIChyZXN1bHQgIT0gU0RQUHJvY2Vzc29yOjpSZXN1bHQ6OlN1Y2Nl
c3MpIHsKLSAgICAgICAgY3JlYXRlQW5zd2VyRmFpbGVkKEV4Y2VwdGlvbiB7IE9wZXJhdGlvbkVy
cm9yLCAiU0RQUHJvY2Vzc29yIGludGVybmFsIGVycm9yIiB9KTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLSAgICBjcmVhdGVBbnN3ZXJTdWNjZWVkZWQoV1RGTW92ZShzZHApKTsKLX0KLQotc3Rh
dGljIFJlYWx0aW1lTWVkaWFTb3VyY2VNYXAgY3JlYXRlU291cmNlTWFwKGNvbnN0IE1lZGlhRGVz
Y3JpcHRpb25WZWN0b3ImIHJlbW90ZU1lZGlhRGVzY3JpcHRpb25zLCB1bnNpZ25lZCBsb2NhbE1l
ZGlhRGVzY3JpcHRpb25Db3VudCwgY29uc3QgUnRwVHJhbnNjZWl2ZXJWZWN0b3ImIHRyYW5zY2Vp
dmVycykKLXsKLSAgICBSZWFsdGltZU1lZGlhU291cmNlTWFwIHNvdXJjZU1hcDsKLQotICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCByZW1vdGVNZWRpYURlc2NyaXB0aW9ucy5zaXplKCkgJiYg
aSA8IGxvY2FsTWVkaWFEZXNjcmlwdGlvbkNvdW50OyArK2kpIHsKLSAgICAgICAgYXV0byYgcmVt
b3RlTWVkaWFEZXNjcmlwdGlvbiA9IHJlbW90ZU1lZGlhRGVzY3JpcHRpb25zW2ldOwotICAgICAg
ICBpZiAocmVtb3RlTWVkaWFEZXNjcmlwdGlvbi50eXBlICE9ICJhdWRpbyIgJiYgcmVtb3RlTWVk
aWFEZXNjcmlwdGlvbi50eXBlICE9ICJ2aWRlbyIpCi0gICAgICAgICAgICBjb250aW51ZTsKLQot
ICAgICAgICBSVENSdHBUcmFuc2NlaXZlciogdHJhbnNjZWl2ZXIgPSBtYXRjaFRyYW5zY2VpdmVy
QnlNaWQodHJhbnNjZWl2ZXJzLCByZW1vdGVNZWRpYURlc2NyaXB0aW9uLm1pZCk7Ci0gICAgICAg
IGlmICh0cmFuc2NlaXZlcikgewotICAgICAgICAgICAgaWYgKHRyYW5zY2VpdmVyLT5oYXNTZW5k
aW5nRGlyZWN0aW9uKCkgJiYgdHJhbnNjZWl2ZXItPnNlbmRlcigpLnRyYWNrKCkpCi0gICAgICAg
ICAgICAgICAgc291cmNlTWFwLnNldCh0cmFuc2NlaXZlci0+bWlkKCksICZ0cmFuc2NlaXZlci0+
c2VuZGVyKCkudHJhY2soKS0+c291cmNlKCkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0
dXJuIHNvdXJjZU1hcDsKLX0KLQotdm9pZCBNZWRpYUVuZHBvaW50UGVlckNvbm5lY3Rpb246OmRv
U2V0TG9jYWxEZXNjcmlwdGlvbihSVENTZXNzaW9uRGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uKQot
ewotICAgIHJ1blRhc2soW3RoaXMsIHByb3RlY3RlZERlc2NyaXB0aW9uID0gUmVmUHRyPFJUQ1Nl
c3Npb25EZXNjcmlwdGlvbj4oJmRlc2NyaXB0aW9uKV0oKSBtdXRhYmxlIHsKLSAgICAgICAgc2V0
TG9jYWxEZXNjcmlwdGlvblRhc2soV1RGTW92ZShwcm90ZWN0ZWREZXNjcmlwdGlvbikpOwotICAg
IH0pOwotfQotCi12b2lkIE1lZGlhRW5kcG9pbnRQZWVyQ29ubmVjdGlvbjo6c2V0TG9jYWxEZXNj
cmlwdGlvblRhc2soUmVmUHRyPFJUQ1Nlc3Npb25EZXNjcmlwdGlvbj4mJiBkZXNjcmlwdGlvbikK
LXsKLSAgICBpZiAobV9wZWVyQ29ubmVjdGlvbi5pc0Nsb3NlZCgpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBhdXRvIHJlc3VsdCA9IE1lZGlhRW5kcG9pbnRTZXNzaW9uRGVzY3JpcHRpb246OmNy
ZWF0ZShXVEZNb3ZlKGRlc2NyaXB0aW9uKSwgKm1fc2RwUHJvY2Vzc29yKTsKLSAgICBpZiAocmVz
dWx0Lmhhc0V4Y2VwdGlvbigpKSB7Ci0gICAgICAgIHNldExvY2FsRGVzY3JpcHRpb25GYWlsZWQo
cmVzdWx0LnJlbGVhc2VFeGNlcHRpb24oKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAg
YXV0byBuZXdEZXNjcmlwdGlvbiA9IHJlc3VsdC5yZWxlYXNlUmV0dXJuVmFsdWUoKTsKLQotICAg
IGNvbnN0IFJ0cFRyYW5zY2VpdmVyVmVjdG9yJiB0cmFuc2NlaXZlcnMgPSBtX3BlZXJDb25uZWN0
aW9uLmdldFRyYW5zY2VpdmVycygpOwotICAgIGNvbnN0IE1lZGlhRGVzY3JpcHRpb25WZWN0b3Im
IG1lZGlhRGVzY3JpcHRpb25zID0gbmV3RGVzY3JpcHRpb24tPmNvbmZpZ3VyYXRpb24oKS0+bWVk
aWFEZXNjcmlwdGlvbnMoKTsKLSAgICBNZWRpYUVuZHBvaW50U2Vzc2lvbkRlc2NyaXB0aW9uKiBs
b2NhbERlc2NyaXB0aW9uID0gaW50ZXJuYWxMb2NhbERlc2NyaXB0aW9uKCk7Ci0gICAgdW5zaWdu
ZWQgcHJldmlvdXNOdW1iZXJPZk1lZGlhRGVzY3JpcHRpb25zID0gbG9jYWxEZXNjcmlwdGlvbiA/
IGxvY2FsRGVzY3JpcHRpb24tPmNvbmZpZ3VyYXRpb24oKS0+bWVkaWFEZXNjcmlwdGlvbnMoKS5z
aXplKCkgOiAwOwotICAgIGJvb2wgaGFzTmV3TWVkaWFEZXNjcmlwdGlvbnMgPSBtZWRpYURlc2Ny
aXB0aW9ucy5zaXplKCkgPiBwcmV2aW91c051bWJlck9mTWVkaWFEZXNjcmlwdGlvbnM7Ci0gICAg
Ym9vbCBpc0luaXRpYXRvciA9IG5ld0Rlc2NyaXB0aW9uLT50eXBlKCkgPT0gUlRDU2RwVHlwZTo6
T2ZmZXI7Ci0KLSAgICBpZiAoaGFzTmV3TWVkaWFEZXNjcmlwdGlvbnMpIHsKLSAgICAgICAgTWVk
aWFFbmRwb2ludDo6VXBkYXRlUmVzdWx0IHJlc3VsdCA9IG1fbWVkaWFFbmRwb2ludC0+dXBkYXRl
UmVjZWl2ZUNvbmZpZ3VyYXRpb24obmV3RGVzY3JpcHRpb24tPmNvbmZpZ3VyYXRpb24oKSwgaXNJ
bml0aWF0b3IpOwotCi0gICAgICAgIGlmIChyZXN1bHQgPT0gTWVkaWFFbmRwb2ludDo6VXBkYXRl
UmVzdWx0OjpTdWNjZXNzV2l0aEljZVJlc3RhcnQpIHsKLSAgICAgICAgICAgIGlmIChtX3BlZXJD
b25uZWN0aW9uLmljZUdhdGhlcmluZ1N0YXRlKCkgIT0gUlRDSWNlR2F0aGVyaW5nU3RhdGU6Okdh
dGhlcmluZykKLSAgICAgICAgICAgICAgICBtX3BlZXJDb25uZWN0aW9uLnVwZGF0ZUljZUdhdGhl
cmluZ1N0YXRlKFJUQ0ljZUdhdGhlcmluZ1N0YXRlOjpHYXRoZXJpbmcpOwotCi0gICAgICAgICAg
ICBpZiAobV9wZWVyQ29ubmVjdGlvbi5pY2VDb25uZWN0aW9uU3RhdGUoKSAhPSBSVENJY2VDb25u
ZWN0aW9uU3RhdGU6OkNvbXBsZXRlZCkKLSAgICAgICAgICAgICAgICBtX3BlZXJDb25uZWN0aW9u
LnVwZGF0ZUljZUNvbm5lY3Rpb25TdGF0ZShSVENJY2VDb25uZWN0aW9uU3RhdGU6OkNvbm5lY3Rl
ZCk7Ci0KLSAgICAgICAgICAgIExPR19FUlJPUigiSUNFIHJlc3RhcnQgaXMgbm90IGltcGxlbWVu
dGVkIik7Ci0gICAgICAgICAgICBub3RJbXBsZW1lbnRlZCgpOwotCi0gICAgICAgIH0gZWxzZSBp
ZiAocmVzdWx0ID09IE1lZGlhRW5kcG9pbnQ6OlVwZGF0ZVJlc3VsdDo6RmFpbGVkKSB7Ci0gICAg
ICAgICAgICBzZXRMb2NhbERlc2NyaXB0aW9uRmFpbGVkKEV4Y2VwdGlvbiB7IE9wZXJhdGlvbkVy
cm9yLCAiVW5hYmxlIHRvIGFwcGx5IHNlc3Npb24gZGVzY3JpcHRpb24iIH0pOwotICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gQXNzb2NpYXRlIG1lZGlhIGRlc2Ny
aXB0aW9ucyB3aXRoIHRyYW5zY2VpdmVycyAoc2V0IHByb3Zpc2lvbmFsIG1pZCB0byAnZmluYWwn
IG1pZCkuCi0gICAgICAgIGZvciAoYXV0byYgbWVkaWFEZXNjcmlwdGlvbiA6IG1lZGlhRGVzY3Jp
cHRpb25zKSB7Ci0gICAgICAgICAgICBSVENSdHBUcmFuc2NlaXZlciogdHJhbnNjZWl2ZXIgPSBt
YXRjaFRyYW5zY2VpdmVyKHRyYW5zY2VpdmVycywgWyZtZWRpYURlc2NyaXB0aW9uXSAoUlRDUnRw
VHJhbnNjZWl2ZXImIGN1cnJlbnQpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVudC5w
cm92aXNpb25hbE1pZCgpID09IG1lZGlhRGVzY3JpcHRpb24ubWlkOwotICAgICAgICAgICAgfSk7
Ci0gICAgICAgICAgICBpZiAodHJhbnNjZWl2ZXIpCi0gICAgICAgICAgICAgICAgdHJhbnNjZWl2
ZXItPnNldE1pZCh0cmFuc2NlaXZlci0+cHJvdmlzaW9uYWxNaWQoKSk7Ci0gICAgICAgIH0KLSAg
ICB9Ci0KLSAgICBpZiAoaW50ZXJuYWxSZW1vdGVEZXNjcmlwdGlvbigpKSB7Ci0gICAgICAgIE1l
ZGlhRW5kcG9pbnRTZXNzaW9uQ29uZmlndXJhdGlvbiogcmVtb3RlQ29uZmlndXJhdGlvbiA9IGlu
dGVybmFsUmVtb3RlRGVzY3JpcHRpb24oKS0+Y29uZmlndXJhdGlvbigpOwotICAgICAgICBSZWFs
dGltZU1lZGlhU291cmNlTWFwIHNlbmRTb3VyY2VNYXAgPSBjcmVhdGVTb3VyY2VNYXAocmVtb3Rl
Q29uZmlndXJhdGlvbi0+bWVkaWFEZXNjcmlwdGlvbnMoKSwgbWVkaWFEZXNjcmlwdGlvbnMuc2l6
ZSgpLCB0cmFuc2NlaXZlcnMpOwotCi0gICAgICAgIGlmIChtX21lZGlhRW5kcG9pbnQtPnVwZGF0
ZVNlbmRDb25maWd1cmF0aW9uKHJlbW90ZUNvbmZpZ3VyYXRpb24sIHNlbmRTb3VyY2VNYXAsIGlz
SW5pdGlhdG9yKSA9PSBNZWRpYUVuZHBvaW50OjpVcGRhdGVSZXN1bHQ6OkZhaWxlZCkgewotICAg
ICAgICAgICAgc2V0TG9jYWxEZXNjcmlwdGlvbkZhaWxlZChFeGNlcHRpb24geyBPcGVyYXRpb25F
cnJvciwgIlVuYWJsZSB0byBhcHBseSBzZXNzaW9uIGRlc2NyaXB0aW9uIiB9KTsKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmICghaGFzVW5hc3NvY2lhdGVk
VHJhbnNjZWl2ZXJzKHRyYW5zY2VpdmVycykpCi0gICAgICAgIGNsZWFyTmVnb3RpYXRpb25OZWVk
ZWRTdGF0ZSgpOwotCi0gICAgUlRDU2lnbmFsaW5nU3RhdGUgbmV3U2lnbmFsaW5nU3RhdGU7Ci0K
LSAgICAvLyBVcGRhdGUgc3RhdGUgYW5kIGxvY2FsIGRlc2NyaXB0aW9ucyBhY2NvcmRpbmcgdG8g
c2V0TG9jYWwvUmVtb3RlRGVzY3JpcHRpb24gcHJvY2Vzc2luZyBtb2RlbAotICAgIHN3aXRjaCAo
bmV3RGVzY3JpcHRpb24tPnR5cGUoKSkgewotICAgIGNhc2UgUlRDU2RwVHlwZTo6T2ZmZXI6Ci0g
ICAgICAgIG1fcGVuZGluZ0xvY2FsRGVzY3JpcHRpb24gPSBXVEZNb3ZlKG5ld0Rlc2NyaXB0aW9u
KTsKLSAgICAgICAgbmV3U2lnbmFsaW5nU3RhdGUgPSBSVENTaWduYWxpbmdTdGF0ZTo6SGF2ZUxv
Y2FsT2ZmZXI7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBSVENTZHBUeXBlOjpBbnN3ZXI6
Ci0gICAgICAgIG1fY3VycmVudExvY2FsRGVzY3JpcHRpb24gPSBXVEZNb3ZlKG5ld0Rlc2NyaXB0
aW9uKTsKLSAgICAgICAgbV9jdXJyZW50UmVtb3RlRGVzY3JpcHRpb24gPSBtX3BlbmRpbmdSZW1v
dGVEZXNjcmlwdGlvbjsKLSAgICAgICAgbV9wZW5kaW5nTG9jYWxEZXNjcmlwdGlvbiA9IG51bGxw
dHI7Ci0gICAgICAgIG1fcGVuZGluZ1JlbW90ZURlc2NyaXB0aW9uID0gbnVsbHB0cjsKLSAgICAg
ICAgbmV3U2lnbmFsaW5nU3RhdGUgPSBSVENTaWduYWxpbmdTdGF0ZTo6U3RhYmxlOwotICAgICAg
ICBicmVhazsKLQotICAgIGNhc2UgUlRDU2RwVHlwZTo6Um9sbGJhY2s6Ci0gICAgICAgIG1fcGVu
ZGluZ0xvY2FsRGVzY3JpcHRpb24gPSBudWxscHRyOwotICAgICAgICBuZXdTaWduYWxpbmdTdGF0
ZSA9IFJUQ1NpZ25hbGluZ1N0YXRlOjpTdGFibGU7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2Fz
ZSBSVENTZHBUeXBlOjpQcmFuc3dlcjoKLSAgICAgICAgbV9wZW5kaW5nTG9jYWxEZXNjcmlwdGlv
biA9IFdURk1vdmUobmV3RGVzY3JpcHRpb24pOwotICAgICAgICBuZXdTaWduYWxpbmdTdGF0ZSA9
IFJUQ1NpZ25hbGluZ1N0YXRlOjpIYXZlTG9jYWxQcmFuc3dlcjsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgfQotCi0gICAgdXBkYXRlU2lnbmFsaW5nU3RhdGUobmV3U2lnbmFsaW5nU3RhdGUpOwotCi0g
ICAgaWYgKG1fcGVlckNvbm5lY3Rpb24uaWNlR2F0aGVyaW5nU3RhdGUoKSA9PSBSVENJY2VHYXRo
ZXJpbmdTdGF0ZTo6TmV3ICYmIG1lZGlhRGVzY3JpcHRpb25zLnNpemUoKSkKLSAgICAgICAgbV9w
ZWVyQ29ubmVjdGlvbi51cGRhdGVJY2VHYXRoZXJpbmdTdGF0ZShSVENJY2VHYXRoZXJpbmdTdGF0
ZTo6R2F0aGVyaW5nKTsKLQotICAgIG1hcmtBc05lZWRpbmdOZWdvdGlhdGlvbigpOwotICAgIHNl
dExvY2FsRGVzY3JpcHRpb25TdWNjZWVkZWQoKTsKLX0KLQotUmVmUHRyPFJUQ1Nlc3Npb25EZXNj
cmlwdGlvbj4gTWVkaWFFbmRwb2ludFBlZXJDb25uZWN0aW9uOjpsb2NhbERlc2NyaXB0aW9uKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gY3JlYXRlUlRDU2Vzc2lvbkRlc2NyaXB0aW9uKGludGVybmFs
TG9jYWxEZXNjcmlwdGlvbigpKTsKLX0KLQotUmVmUHRyPFJUQ1Nlc3Npb25EZXNjcmlwdGlvbj4g
TWVkaWFFbmRwb2ludFBlZXJDb25uZWN0aW9uOjpjdXJyZW50TG9jYWxEZXNjcmlwdGlvbigpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIGNyZWF0ZVJUQ1Nlc3Npb25EZXNjcmlwdGlvbihtX2N1cnJlbnRM
b2NhbERlc2NyaXB0aW9uLmdldCgpKTsKLX0KLQotUmVmUHRyPFJUQ1Nlc3Npb25EZXNjcmlwdGlv
bj4gTWVkaWFFbmRwb2ludFBlZXJDb25uZWN0aW9uOjpwZW5kaW5nTG9jYWxEZXNjcmlwdGlvbigp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIGNyZWF0ZVJUQ1Nlc3Npb25EZXNjcmlwdGlvbihtX3BlbmRp
bmdMb2NhbERlc2NyaXB0aW9uLmdldCgpKTsKLX0KLQotdm9pZCBNZWRpYUVuZHBvaW50UGVlckNv
bm5lY3Rpb246OmRvU2V0UmVtb3RlRGVzY3JpcHRpb24oUlRDU2Vzc2lvbkRlc2NyaXB0aW9uJiBk
ZXNjcmlwdGlvbikKLXsKLSAgICBydW5UYXNrKFt0aGlzLCBwcm90ZWN0ZWREZXNjcmlwdGlvbiA9
IFJlZlB0cjxSVENTZXNzaW9uRGVzY3JpcHRpb24+KCZkZXNjcmlwdGlvbildKCkgbXV0YWJsZSB7
Ci0gICAgICAgIHNldFJlbW90ZURlc2NyaXB0aW9uVGFzayhXVEZNb3ZlKHByb3RlY3RlZERlc2Ny
aXB0aW9uKSk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgTWVkaWFFbmRwb2ludFBlZXJDb25uZWN0aW9u
OjpzZXRSZW1vdGVEZXNjcmlwdGlvblRhc2soUmVmUHRyPFJUQ1Nlc3Npb25EZXNjcmlwdGlvbj4m
JiBkZXNjcmlwdGlvbikKLXsKLSAgICBhdXRvIHJlc3VsdCA9IE1lZGlhRW5kcG9pbnRTZXNzaW9u
RGVzY3JpcHRpb246OmNyZWF0ZShXVEZNb3ZlKGRlc2NyaXB0aW9uKSwgKm1fc2RwUHJvY2Vzc29y
KTsKLSAgICBpZiAocmVzdWx0Lmhhc0V4Y2VwdGlvbigpKSB7Ci0gICAgICAgIHNldFJlbW90ZURl
c2NyaXB0aW9uRmFpbGVkKHJlc3VsdC5yZWxlYXNlRXhjZXB0aW9uKCkpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotICAgIGF1dG8gbmV3RGVzY3JpcHRpb24gPSByZXN1bHQucmVsZWFzZVJldHVy
blZhbHVlKCk7Ci0KLSAgICBhdXRvJiBtZWRpYURlc2NyaXB0aW9ucyA9IG5ld0Rlc2NyaXB0aW9u
LT5jb25maWd1cmF0aW9uKCktPm1lZGlhRGVzY3JpcHRpb25zKCk7Ci0gICAgZm9yIChhdXRvJiBt
ZWRpYURlc2NyaXB0aW9uIDogbWVkaWFEZXNjcmlwdGlvbnMpIHsKLSAgICAgICAgaWYgKG1lZGlh
RGVzY3JpcHRpb24udHlwZSAhPSAiYXVkaW8iICYmIG1lZGlhRGVzY3JpcHRpb24udHlwZSAhPSAi
dmlkZW8iKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgbWVkaWFEZXNjcmlwdGlv
bi5wYXlsb2FkcyA9IG1fbWVkaWFFbmRwb2ludC0+ZmlsdGVyUGF5bG9hZHMobWVkaWFEZXNjcmlw
dGlvbi5wYXlsb2FkcywgbWVkaWFEZXNjcmlwdGlvbi50eXBlID09ICJhdWRpbyIgPyBtX2RlZmF1
bHRBdWRpb1BheWxvYWRzIDogbV9kZWZhdWx0VmlkZW9QYXlsb2Fkcyk7Ci0gICAgfQotCi0gICAg
Ym9vbCBpc0luaXRpYXRvciA9IG5ld0Rlc2NyaXB0aW9uLT50eXBlKCkgPT0gUlRDU2RwVHlwZTo6
QW5zd2VyOwotICAgIGNvbnN0IFJ0cFRyYW5zY2VpdmVyVmVjdG9yJiB0cmFuc2NlaXZlcnMgPSBt
X3BlZXJDb25uZWN0aW9uLmdldFRyYW5zY2VpdmVycygpOwotCi0gICAgUmVhbHRpbWVNZWRpYVNv
dXJjZU1hcCBzZW5kU291cmNlTWFwOwotICAgIGlmIChpbnRlcm5hbExvY2FsRGVzY3JpcHRpb24o
KSkKLSAgICAgICAgc2VuZFNvdXJjZU1hcCA9IGNyZWF0ZVNvdXJjZU1hcChtZWRpYURlc2NyaXB0
aW9ucywgaW50ZXJuYWxMb2NhbERlc2NyaXB0aW9uKCktPmNvbmZpZ3VyYXRpb24oKS0+bWVkaWFE
ZXNjcmlwdGlvbnMoKS5zaXplKCksIHRyYW5zY2VpdmVycyk7Ci0KLSAgICBpZiAobV9tZWRpYUVu
ZHBvaW50LT51cGRhdGVTZW5kQ29uZmlndXJhdGlvbihuZXdEZXNjcmlwdGlvbi0+Y29uZmlndXJh
dGlvbigpLCBzZW5kU291cmNlTWFwLCBpc0luaXRpYXRvcikgPT0gTWVkaWFFbmRwb2ludDo6VXBk
YXRlUmVzdWx0OjpGYWlsZWQpIHsKLSAgICAgICAgc2V0UmVtb3RlRGVzY3JpcHRpb25GYWlsZWQo
RXhjZXB0aW9uIHsgT3BlcmF0aW9uRXJyb3IsICJVbmFibGUgdG8gYXBwbHkgc2Vzc2lvbiBkZXNj
cmlwdGlvbiIgfSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBPbmUgbGVnYWN5
IE1lZGlhU3RyZWFtRXZlbnQgd2lsbCBiZSBmaXJlZCBmb3IgZXZlcnkgbmV3IE1lZGlhU3RyZWFt
IGNyZWF0ZWQgYXMgdGhpcyByZW1vdGUgZGVzY3JpcHRpb24gaXMgc2V0LgotICAgIFZlY3RvcjxS
ZWZQdHI8TWVkaWFTdHJlYW1FdmVudD4+IGxlZ2FjeU1lZGlhU3RyZWFtRXZlbnRzOwotCi0gICAg
Zm9yIChhdXRvJiBtZWRpYURlc2NyaXB0aW9uIDogbWVkaWFEZXNjcmlwdGlvbnMpIHsKLSAgICAg
ICAgUlRDUnRwVHJhbnNjZWl2ZXIqIHRyYW5zY2VpdmVyID0gbWF0Y2hUcmFuc2NlaXZlckJ5TWlk
KHRyYW5zY2VpdmVycywgbWVkaWFEZXNjcmlwdGlvbi5taWQpOwotICAgICAgICBpZiAoIXRyYW5z
Y2VpdmVyKSB7Ci0gICAgICAgICAgICBib29sIHJlY2VpdmVPbmx5RmxhZyA9IGZhbHNlOwotCi0g
ICAgICAgICAgICBpZiAobWVkaWFEZXNjcmlwdGlvbi5tb2RlID09ICJzZW5kcmVjdiIgfHwgbWVk
aWFEZXNjcmlwdGlvbi5tb2RlID09ICJyZWN2b25seSIpIHsKLSAgICAgICAgICAgICAgICAvLyBU
cnkgdG8gbWF0Y2ggYW4gZXhpc3RpbmcgdHJhbnNjZWl2ZXIuCi0gICAgICAgICAgICAgICAgdHJh
bnNjZWl2ZXIgPSBtYXRjaFRyYW5zY2VpdmVyKHRyYW5zY2VpdmVycywgWyZtZWRpYURlc2NyaXB0
aW9uXSAoUlRDUnRwVHJhbnNjZWl2ZXImIGN1cnJlbnQpIHsKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuICFjdXJyZW50LnN0b3BwZWQoKSAmJiBjdXJyZW50Lm1pZCgpLmlzTnVsbCgpICYmIGN1
cnJlbnQuc2VuZGVyKCkudHJhY2tLaW5kKCkgPT0gbWVkaWFEZXNjcmlwdGlvbi50eXBlOwotICAg
ICAgICAgICAgICAgIH0pOwotCi0gICAgICAgICAgICAgICAgaWYgKHRyYW5zY2VpdmVyKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgdHJhbnNjZWl2ZXIgd2FzIGNyZWF0ZWQgbG9jYWxs
eSB3aXRoIGEgcHJvdmlzaW9uYWwgbWlkLiBJdHMgcmVhbCBtaWQgd2lsbCBub3cgYmUgc2V0IGJ5
IHRoZSByZW1vdGUKLSAgICAgICAgICAgICAgICAgICAgLy8gZGVzY3JpcHRpb24gc28gd2UgbmVl
ZCB0byB1cGRhdGUgdGhlIG1pZCBvZiB0aGUgdHJhbnNjZWl2ZXIncyBtdXRlZCBzb3VyY2UgdG8g
cHJlc2VydmUgdGhlIGFzc29jaWF0aW9uLgotICAgICAgICAgICAgICAgICAgICB0cmFuc2NlaXZl
ci0+c2V0TWlkKG1lZGlhRGVzY3JpcHRpb24ubWlkKTsKLSAgICAgICAgICAgICAgICAgICAgbV9t
ZWRpYUVuZHBvaW50LT5yZXBsYWNlTXV0ZWRSZW1vdGVTb3VyY2VNaWQodHJhbnNjZWl2ZXItPnBy
b3Zpc2lvbmFsTWlkKCksIG1lZGlhRGVzY3JpcHRpb24ubWlkKTsKLSAgICAgICAgICAgICAgICB9
IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgcmVjZWl2ZU9ubHlGbGFnID0gdHJ1ZTsKLSAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKCF0cmFuc2NlaXZlcikgewotICAgICAgICAgICAg
ICAgIGF1dG8gc2VuZGVyID0gUlRDUnRwU2VuZGVyOjpjcmVhdGUoU3RyaW5nKG1lZGlhRGVzY3Jp
cHRpb24udHlwZSksIFZlY3RvcjxTdHJpbmc+KCksIG1fcGVlckNvbm5lY3Rpb24uc2VuZGVyQmFj
a2VuZCgpKTsKLSAgICAgICAgICAgICAgICBhdXRvIHJlY2VpdmVyID0gY3JlYXRlUmVjZWl2ZXIo
bWVkaWFEZXNjcmlwdGlvbi5taWQsIG1lZGlhRGVzY3JpcHRpb24udHlwZSwgbWVkaWFEZXNjcmlw
dGlvbi5tZWRpYVN0cmVhbVRyYWNrSWQpOwotCi0gICAgICAgICAgICAgICAgYXV0byBuZXdUcmFu
c2NlaXZlciA9IFJUQ1J0cFRyYW5zY2VpdmVyOjpjcmVhdGUoV1RGTW92ZShzZW5kZXIpLCBXVEZN
b3ZlKHJlY2VpdmVyKSk7Ci0gICAgICAgICAgICAgICAgbmV3VHJhbnNjZWl2ZXItPnNldE1pZCht
ZWRpYURlc2NyaXB0aW9uLm1pZCk7Ci0gICAgICAgICAgICAgICAgaWYgKHJlY2VpdmVPbmx5Rmxh
ZykKLSAgICAgICAgICAgICAgICAgICAgbmV3VHJhbnNjZWl2ZXItPmRpc2FibGVTZW5kaW5nRGly
ZWN0aW9uKCk7Ci0KLSAgICAgICAgICAgICAgICB0cmFuc2NlaXZlciA9IG5ld1RyYW5zY2VpdmVy
LnB0cigpOwotICAgICAgICAgICAgICAgIG1fcGVlckNvbm5lY3Rpb24uYWRkVHJhbnNjZWl2ZXIo
V1RGTW92ZShuZXdUcmFuc2NlaXZlcikpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAg
ICAgICAgaWYgKG1lZGlhRGVzY3JpcHRpb24ubW9kZSA9PSAic2VuZHJlY3YiIHx8IG1lZGlhRGVz
Y3JpcHRpb24ubW9kZSA9PSAic2VuZG9ubHkiKSB7Ci0gICAgICAgICAgICBhdXRvJiByZWNlaXZl
ciA9IHRyYW5zY2VpdmVyLT5yZWNlaXZlcigpOwotICAgICAgICAgICAgaWYgKHJlY2VpdmVyLmlz
RGlzcGF0Y2hlZCgpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgcmVj
ZWl2ZXIuc2V0RGlzcGF0Y2hlZCh0cnVlKTsKLQotICAgICAgICAgICAgVmVjdG9yPFN0cmluZz4g
bWVkaWFTdHJlYW1JZHM7Ci0gICAgICAgICAgICBpZiAoIW1lZGlhRGVzY3JpcHRpb24ubWVkaWFT
dHJlYW1JZC5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgbWVkaWFTdHJlYW1JZHMuYXBwZW5k
KG1lZGlhRGVzY3JpcHRpb24ubWVkaWFTdHJlYW1JZCk7Ci0KLSAgICAgICAgICAgIC8vIEEgcmVt
b3RlIHRyYWNrIGNhbiBiZSBhc3NvY2lhdGVkIHdpdGggMC4uKiBNZWRpYVN0cmVhbXMuIFdlIGNy
ZWF0ZSBhIG5ldyBzdHJlYW0gZm9yCi0gICAgICAgICAgICAvLyBhIHRyYWNrIGluIGNhc2Ugb2Yg
YW4gdW5yZWNvZ25pemVkIHN0cmVhbSBpZCwgb3IganVzdCBhZGQgdGhlIHRyYWNrIGlmIHRoZSBz
dHJlYW0KLSAgICAgICAgICAgIC8vIGFscmVhZHkgZXhpc3RzLgotICAgICAgICAgICAgSGFzaE1h
cDxTdHJpbmcsIFJlZlB0cjxNZWRpYVN0cmVhbT4+IHRyYWNrRXZlbnRNZWRpYVN0cmVhbXM7Ci0g
ICAgICAgICAgICBmb3IgKGF1dG8mIGlkIDogbWVkaWFTdHJlYW1JZHMpIHsKLSAgICAgICAgICAg
ICAgICBpZiAobV9yZW1vdGVTdHJlYW1NYXAuY29udGFpbnMoaWQpKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIFJlZlB0cjxNZWRpYVN0cmVhbT4gc3RyZWFtID0gbV9yZW1vdGVTdHJlYW1NYXAuZ2V0
KGlkKTsKLSAgICAgICAgICAgICAgICAgICAgc3RyZWFtLT5hZGRUcmFjaygqcmVjZWl2ZXIudHJh
Y2soKSk7Ci0gICAgICAgICAgICAgICAgICAgIHRyYWNrRXZlbnRNZWRpYVN0cmVhbXMuYWRkKGlk
LCBXVEZNb3ZlKHN0cmVhbSkpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICAgICAgICAgIGF1dG8gbmV3U3RyZWFtID0gTWVkaWFTdHJlYW06OmNyZWF0ZSgqbV9wZWVyQ29u
bmVjdGlvbi5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCksIE1lZGlhU3RyZWFtVHJhY2tWZWN0b3Io
eyByZWNlaXZlci50cmFjaygpIH0pKTsKLSAgICAgICAgICAgICAgICAgICAgbV9yZW1vdGVTdHJl
YW1NYXAuYWRkKGlkLCBuZXdTdHJlYW0uY29weVJlZigpKTsKLSAgICAgICAgICAgICAgICAgICAg
bGVnYWN5TWVkaWFTdHJlYW1FdmVudHMuYXBwZW5kKE1lZGlhU3RyZWFtRXZlbnQ6OmNyZWF0ZShl
dmVudE5hbWVzKCkuYWRkc3RyZWFtRXZlbnQsIGZhbHNlLCBmYWxzZSwgbmV3U3RyZWFtLmNvcHlS
ZWYoKSkpOwotICAgICAgICAgICAgICAgICAgICB0cmFja0V2ZW50TWVkaWFTdHJlYW1zLmFkZChp
ZCwgV1RGTW92ZShuZXdTdHJlYW0pKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgIFZlY3RvcjxSZWZQdHI8TWVkaWFTdHJlYW0+PiBzdHJlYW1zOwotICAg
ICAgICAgICAgY29weVZhbHVlc1RvVmVjdG9yKHRyYWNrRXZlbnRNZWRpYVN0cmVhbXMsIHN0cmVh
bXMpOwotCi0gICAgICAgICAgICBtX3BlZXJDb25uZWN0aW9uLmZpcmVFdmVudChSVENUcmFja0V2
ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLnRyYWNrRXZlbnQsIGZhbHNlLCBmYWxzZSwKLSAgICAg
ICAgICAgICAgICAmcmVjZWl2ZXIsIHJlY2VpdmVyLnRyYWNrKCksIFdURk1vdmUoc3RyZWFtcyks
IHRyYW5zY2VpdmVyKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBGaXJlIGxlZ2FjeSBh
ZGRzdHJlYW0gZXZlbnRzLgotICAgIGZvciAoYXV0byYgZXZlbnQgOiBsZWdhY3lNZWRpYVN0cmVh
bUV2ZW50cykKLSAgICAgICAgbV9wZWVyQ29ubmVjdGlvbi5maXJlRXZlbnQoKmV2ZW50KTsKLQot
ICAgIFJUQ1NpZ25hbGluZ1N0YXRlIG5ld1NpZ25hbGluZ1N0YXRlOwotCi0gICAgLy8gVXBkYXRl
IHN0YXRlIGFuZCBsb2NhbCBkZXNjcmlwdGlvbnMgYWNjb3JkaW5nIHRvIHNldExvY2FsL1JlbW90
ZURlc2NyaXB0aW9uIHByb2Nlc3NpbmcgbW9kZWwKLSAgICBzd2l0Y2ggKG5ld0Rlc2NyaXB0aW9u
LT50eXBlKCkpIHsKLSAgICBjYXNlIFJUQ1NkcFR5cGU6Ok9mZmVyOgotICAgICAgICBtX3BlbmRp
bmdSZW1vdGVEZXNjcmlwdGlvbiA9IFdURk1vdmUobmV3RGVzY3JpcHRpb24pOwotICAgICAgICBu
ZXdTaWduYWxpbmdTdGF0ZSA9IFJUQ1NpZ25hbGluZ1N0YXRlOjpIYXZlUmVtb3RlT2ZmZXI7Ci0g
ICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBSVENTZHBUeXBlOjpBbnN3ZXI6Ci0gICAgICAgIG1f
Y3VycmVudFJlbW90ZURlc2NyaXB0aW9uID0gV1RGTW92ZShuZXdEZXNjcmlwdGlvbik7Ci0gICAg
ICAgIG1fY3VycmVudExvY2FsRGVzY3JpcHRpb24gPSBtX3BlbmRpbmdMb2NhbERlc2NyaXB0aW9u
OwotICAgICAgICBtX3BlbmRpbmdSZW1vdGVEZXNjcmlwdGlvbiA9IG51bGxwdHI7Ci0gICAgICAg
IG1fcGVuZGluZ0xvY2FsRGVzY3JpcHRpb24gPSBudWxscHRyOwotICAgICAgICBuZXdTaWduYWxp
bmdTdGF0ZSA9IFJUQ1NpZ25hbGluZ1N0YXRlOjpTdGFibGU7Ci0gICAgICAgIGJyZWFrOwotCi0g
ICAgY2FzZSBSVENTZHBUeXBlOjpSb2xsYmFjazoKLSAgICAgICAgbV9wZW5kaW5nUmVtb3RlRGVz
Y3JpcHRpb24gPSBudWxscHRyOwotICAgICAgICBuZXdTaWduYWxpbmdTdGF0ZSA9IFJUQ1NpZ25h
bGluZ1N0YXRlOjpTdGFibGU7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBSVENTZHBUeXBl
OjpQcmFuc3dlcjoKLSAgICAgICAgbV9wZW5kaW5nUmVtb3RlRGVzY3JpcHRpb24gPSBXVEZNb3Zl
KG5ld0Rlc2NyaXB0aW9uKTsKLSAgICAgICAgbmV3U2lnbmFsaW5nU3RhdGUgPSBSVENTaWduYWxp
bmdTdGF0ZTo6SGF2ZVJlbW90ZVByYW5zd2VyOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAg
ICB1cGRhdGVTaWduYWxpbmdTdGF0ZShuZXdTaWduYWxpbmdTdGF0ZSk7Ci0gICAgc2V0UmVtb3Rl
RGVzY3JpcHRpb25TdWNjZWVkZWQoKTsKLX0KLQotUmVmUHRyPFJUQ1Nlc3Npb25EZXNjcmlwdGlv
bj4gTWVkaWFFbmRwb2ludFBlZXJDb25uZWN0aW9uOjpyZW1vdGVEZXNjcmlwdGlvbigpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIGNyZWF0ZVJUQ1Nlc3Npb25EZXNjcmlwdGlvbihpbnRlcm5hbFJlbW90
ZURlc2NyaXB0aW9uKCkpOwotfQotCi1SZWZQdHI8UlRDU2Vzc2lvbkRlc2NyaXB0aW9uPiBNZWRp
YUVuZHBvaW50UGVlckNvbm5lY3Rpb246OmN1cnJlbnRSZW1vdGVEZXNjcmlwdGlvbigpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIGNyZWF0ZVJUQ1Nlc3Npb25EZXNjcmlwdGlvbihtX2N1cnJlbnRSZW1v
dGVEZXNjcmlwdGlvbi5nZXQoKSk7Ci19Ci0KLVJlZlB0cjxSVENTZXNzaW9uRGVzY3JpcHRpb24+
IE1lZGlhRW5kcG9pbnRQZWVyQ29ubmVjdGlvbjo6cGVuZGluZ1JlbW90ZURlc2NyaXB0aW9uKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gY3JlYXRlUlRDU2Vzc2lvbkRlc2NyaXB0aW9uKG1fcGVuZGlu
Z1JlbW90ZURlc2NyaXB0aW9uLmdldCgpKTsKLX0KLQotYm9vbCBNZWRpYUVuZHBvaW50UGVlckNv
bm5lY3Rpb246OnNldENvbmZpZ3VyYXRpb24oTWVkaWFFbmRwb2ludENvbmZpZ3VyYXRpb24mJiBj
b25maWd1cmF0aW9uKQotewotICAgIG1fbWVkaWFFbmRwb2ludC0+c2V0Q29uZmlndXJhdGlvbihX
VEZNb3ZlKGNvbmZpZ3VyYXRpb24pKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBNZWRp
YUVuZHBvaW50UGVlckNvbm5lY3Rpb246OmRvQWRkSWNlQ2FuZGlkYXRlKFJUQ0ljZUNhbmRpZGF0
ZSYgcnRjQ2FuZGlkYXRlKQotewotICAgIHJ1blRhc2soW3RoaXMsIHByb3RlY3RlZENhbmRpZGF0
ZSA9IFJlZlB0cjxSVENJY2VDYW5kaWRhdGU+KCZydGNDYW5kaWRhdGUpXSgpIG11dGFibGUgewot
ICAgICAgICBhZGRJY2VDYW5kaWRhdGVUYXNrKCpwcm90ZWN0ZWRDYW5kaWRhdGUpOwotICAgIH0p
OwotfQotCi12b2lkIE1lZGlhRW5kcG9pbnRQZWVyQ29ubmVjdGlvbjo6YWRkSWNlQ2FuZGlkYXRl
VGFzayhSVENJY2VDYW5kaWRhdGUmIHJ0Y0NhbmRpZGF0ZSkKLXsKLSAgICBpZiAoIWludGVybmFs
UmVtb3RlRGVzY3JpcHRpb24oKSkgewotICAgICAgICBhZGRJY2VDYW5kaWRhdGVGYWlsZWQoRXhj
ZXB0aW9uIHsgSW52YWxpZFN0YXRlRXJyb3IsICJObyByZW1vdGUgZGVzY3JpcHRpb24gc2V0IiB9
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGF1dG8mIHJlbW90ZU1lZGlhRGVzY3Jp
cHRpb25zID0gaW50ZXJuYWxSZW1vdGVEZXNjcmlwdGlvbigpLT5jb25maWd1cmF0aW9uKCktPm1l
ZGlhRGVzY3JpcHRpb25zKCk7Ci0gICAgUGVlck1lZGlhRGVzY3JpcHRpb24qIHRhcmdldE1lZGlh
RGVzY3JpcHRpb24gPSBudWxscHRyOwotCi0gICAgLy8gV2hlbiBpZGVudGlmeWluZyB0aGUgdGFy
Z2V0IG1lZGlhIGRlc2NyaXB0aW9uLCBzZHBNaWQgdGFrZXMgcHJlY2VkZW5jZSBvdmVyIHNkcE1M
aW5lSW5kZXgKLSAgICAvLyBpZiBib3RoIGFyZSBwcmVzZW50LgotICAgIGlmICghcnRjQ2FuZGlk
YXRlLnNkcE1pZCgpLmlzTnVsbCgpKSB7Ci0gICAgICAgIGNvbnN0IFN0cmluZyYgbWlkID0gcnRj
Q2FuZGlkYXRlLnNkcE1pZCgpOwotICAgICAgICBmb3IgKGF1dG8mIGRlc2NyaXB0aW9uIDogcmVt
b3RlTWVkaWFEZXNjcmlwdGlvbnMpIHsKLSAgICAgICAgICAgIGlmIChkZXNjcmlwdGlvbi5taWQg
PT0gbWlkKSB7Ci0gICAgICAgICAgICAgICAgdGFyZ2V0TWVkaWFEZXNjcmlwdGlvbiA9ICZkZXNj
cmlwdGlvbjsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotCi0gICAgICAgIGlmICghdGFyZ2V0TWVkaWFEZXNjcmlwdGlvbikgewotICAgICAgICAgICAg
YWRkSWNlQ2FuZGlkYXRlRmFpbGVkKEV4Y2VwdGlvbiB7IE9wZXJhdGlvbkVycm9yLCAic2RwTWlk
IGRpZCBub3QgbWF0Y2ggYW55IG1lZGlhIGRlc2NyaXB0aW9uIiB9KTsKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgfQotICAgIH0gZWxzZSBpZiAocnRjQ2FuZGlkYXRlLnNkcE1MaW5lSW5k
ZXgoKSkgewotICAgICAgICB1bnNpZ25lZCBzaG9ydCBzZHBNTGluZUluZGV4ID0gcnRjQ2FuZGlk
YXRlLnNkcE1MaW5lSW5kZXgoKS52YWx1ZSgpOwotICAgICAgICBpZiAoc2RwTUxpbmVJbmRleCA+
PSByZW1vdGVNZWRpYURlc2NyaXB0aW9ucy5zaXplKCkpIHsKLSAgICAgICAgICAgIGFkZEljZUNh
bmRpZGF0ZUZhaWxlZChFeGNlcHRpb24geyBPcGVyYXRpb25FcnJvciwgInNkcE1MaW5lSW5kZXgg
aXMgb3V0IG9mIHJhbmdlIiB9KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAg
ICAgICB0YXJnZXRNZWRpYURlc2NyaXB0aW9uID0gJnJlbW90ZU1lZGlhRGVzY3JpcHRpb25zW3Nk
cE1MaW5lSW5kZXhdOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgYXV0byByZXN1bHQgPSBtX3NkcFByb2Nl
c3Nvci0+cGFyc2VDYW5kaWRhdGVMaW5lKHJ0Y0NhbmRpZGF0ZS5jYW5kaWRhdGUoKSk7Ci0gICAg
aWYgKHJlc3VsdC5wYXJzaW5nU3RhdHVzKCkgIT0gU0RQUHJvY2Vzc29yOjpSZXN1bHQ6OlN1Y2Nl
c3MpIHsKLSAgICAgICAgaWYgKHJlc3VsdC5wYXJzaW5nU3RhdHVzKCkgPT0gU0RQUHJvY2Vzc29y
OjpSZXN1bHQ6OlBhcnNlRXJyb3IpCi0gICAgICAgICAgICBhZGRJY2VDYW5kaWRhdGVGYWlsZWQo
RXhjZXB0aW9uIHsgT3BlcmF0aW9uRXJyb3IsICJJbnZhbGlkIGNhbmRpZGF0ZSBjb250ZW50IiB9
KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgTE9HX0VSUk9SKCJTRFBQcm9jZXNzb3IgaW50
ZXJuYWwgZXJyb3IiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEFTU0VSVCh0YXJn
ZXRNZWRpYURlc2NyaXB0aW9uKTsKLSAgICBtX21lZGlhRW5kcG9pbnQtPmFkZFJlbW90ZUNhbmRp
ZGF0ZShyZXN1bHQuY2FuZGlkYXRlKCksIHRhcmdldE1lZGlhRGVzY3JpcHRpb24tPm1pZCwgdGFy
Z2V0TWVkaWFEZXNjcmlwdGlvbi0+aWNlVWZyYWcsIHRhcmdldE1lZGlhRGVzY3JpcHRpb24tPmlj
ZVBhc3N3b3JkKTsKLQotICAgIHRhcmdldE1lZGlhRGVzY3JpcHRpb24tPmFkZEljZUNhbmRpZGF0
ZShXVEZNb3ZlKHJlc3VsdC5jYW5kaWRhdGUoKSkpOwotCi0gICAgYWRkSWNlQ2FuZGlkYXRlU3Vj
Y2VlZGVkKCk7Ci19Ci0KLXZvaWQgTWVkaWFFbmRwb2ludFBlZXJDb25uZWN0aW9uOjpnZXRTdGF0
cyhNZWRpYVN0cmVhbVRyYWNrKiB0cmFjaywgUmVmPERlZmVycmVkUHJvbWlzZT4mJiBwcm9taXNl
KQotewotICAgIG1fbWVkaWFFbmRwb2ludC0+Z2V0U3RhdHModHJhY2ssIFdURk1vdmUocHJvbWlz
ZSkpOwotfQotCi1WZWN0b3I8UmVmUHRyPE1lZGlhU3RyZWFtPj4gTWVkaWFFbmRwb2ludFBlZXJD
b25uZWN0aW9uOjpnZXRSZW1vdGVTdHJlYW1zKCkgY29uc3QKLXsKLSAgICBWZWN0b3I8UmVmUHRy
PE1lZGlhU3RyZWFtPj4gcmVtb3RlU3RyZWFtczsKLSAgICBjb3B5VmFsdWVzVG9WZWN0b3IobV9y
ZW1vdGVTdHJlYW1NYXAsIHJlbW90ZVN0cmVhbXMpOwotICAgIHJldHVybiByZW1vdGVTdHJlYW1z
OwotfQotCi1SZWY8UlRDUnRwUmVjZWl2ZXI+IE1lZGlhRW5kcG9pbnRQZWVyQ29ubmVjdGlvbjo6
Y3JlYXRlUmVjZWl2ZXIoY29uc3QgU3RyaW5nJiB0cmFuc2NlaXZlck1pZCwgY29uc3QgU3RyaW5n
JiB0cmFja0tpbmQsIGNvbnN0IFN0cmluZyYgdHJhY2tJZCkKLXsKLSAgICBSZWFsdGltZU1lZGlh
U291cmNlOjpUeXBlIHNvdXJjZVR5cGUgPSB0cmFja0tpbmQgPT0gImF1ZGlvIiA/IFJlYWx0aW1l
TWVkaWFTb3VyY2U6OlR5cGU6OkF1ZGlvIDogUmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlwZTo6Vmlk
ZW87Ci0KLSAgICAvLyBDcmVhdGUgYSBtdXRlZCByZW1vdGUgc291cmNlIHRoYXQgd2lsbCBiZSB1
bm11dGVkIG9uY2UgbWVkaWEgc3RhcnRzIGFycml2aW5nLgotICAgIGF1dG8gcmVtb3RlU291cmNl
ID0gbV9tZWRpYUVuZHBvaW50LT5jcmVhdGVNdXRlZFJlbW90ZVNvdXJjZSh0cmFuc2NlaXZlck1p
ZCwgc291cmNlVHlwZSk7Ci0gICAgYXV0byByZW1vdGVUcmFja1ByaXZhdGUgPSBNZWRpYVN0cmVh
bVRyYWNrUHJpdmF0ZTo6Y3JlYXRlKFdURk1vdmUocmVtb3RlU291cmNlKSwgU3RyaW5nKHRyYWNr
SWQpKTsKLSAgICBhdXRvIHJlbW90ZVRyYWNrID0gTWVkaWFTdHJlYW1UcmFjazo6Y3JlYXRlKCpt
X3BlZXJDb25uZWN0aW9uLnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSwgV1RGTW92ZShyZW1vdGVU
cmFja1ByaXZhdGUpKTsKLQotICAgIHJldHVybiBSVENSdHBSZWNlaXZlcjo6Y3JlYXRlKFdURk1v
dmUocmVtb3RlVHJhY2spKTsKLX0KLQotc3RkOjp1bmlxdWVfcHRyPFJUQ0RhdGFDaGFubmVsSGFu
ZGxlcj4gTWVkaWFFbmRwb2ludFBlZXJDb25uZWN0aW9uOjpjcmVhdGVEYXRhQ2hhbm5lbEhhbmRs
ZXIoY29uc3QgU3RyaW5nJiBsYWJlbCwgY29uc3QgUlRDRGF0YUNoYW5uZWxJbml0JiBvcHRpb25z
KQotewotICAgIHJldHVybiBtX21lZGlhRW5kcG9pbnQtPmNyZWF0ZURhdGFDaGFubmVsSGFuZGxl
cihsYWJlbCwgb3B0aW9ucyk7Ci19Ci0KLXZvaWQgTWVkaWFFbmRwb2ludFBlZXJDb25uZWN0aW9u
OjpyZXBsYWNlVHJhY2soUlRDUnRwU2VuZGVyJiBzZW5kZXIsIFJlZjxNZWRpYVN0cmVhbVRyYWNr
PiYmIHdpdGhUcmFjaywgRE9NUHJvbWlzZURlZmVycmVkPHZvaWQ+JiYgcHJvbWlzZSkKLXsKLSAg
ICBSVENSdHBUcmFuc2NlaXZlciogdHJhbnNjZWl2ZXIgPSBtYXRjaFRyYW5zY2VpdmVyKG1fcGVl
ckNvbm5lY3Rpb24uZ2V0VHJhbnNjZWl2ZXJzKCksIFsmc2VuZGVyXSAoUlRDUnRwVHJhbnNjZWl2
ZXImIGN1cnJlbnQpIHsKLSAgICAgICAgcmV0dXJuICZjdXJyZW50LnNlbmRlcigpID09ICZzZW5k
ZXI7Ci0gICAgfSk7Ci0gICAgQVNTRVJUKHRyYW5zY2VpdmVyKTsKLQotICAgIGNvbnN0IFN0cmlu
ZyYgbWlkID0gdHJhbnNjZWl2ZXItPm1pZCgpOwotICAgIGlmIChtaWQuaXNOdWxsKCkpIHsKLSAg
ICAgICAgLy8gVHJhbnNjZWl2ZXIgaXMgbm90IGFzc29jaWF0ZWQgd2l0aCBhIG1lZGlhIGRlc2Ny
aXB0aW9uIHlldC4KLSAgICAgICAgc2VuZGVyLnNldFRyYWNrKFdURk1vdmUod2l0aFRyYWNrKSk7
Ci0gICAgICAgIHByb21pc2UucmVzb2x2ZSgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgcnVuVGFzayhbdGhpcywgcHJvdGVjdGVkU2VuZGVyID0gUmVmUHRyPFJUQ1J0cFNlbmRlcj4o
JnNlbmRlciksIG1pZCwgcHJvdGVjdGVkVHJhY2sgPSBXVEZNb3ZlKHdpdGhUcmFjayksIHByb3Rl
Y3RlZFByb21pc2UgPSBXVEZNb3ZlKHByb21pc2UpXSgpIG11dGFibGUgewotICAgICAgICByZXBs
YWNlVHJhY2tUYXNrKCpwcm90ZWN0ZWRTZW5kZXIsIG1pZCwgV1RGTW92ZShwcm90ZWN0ZWRUcmFj
ayksIHByb3RlY3RlZFByb21pc2UpOwotICAgIH0pOwotfQotCi12b2lkIE1lZGlhRW5kcG9pbnRQ
ZWVyQ29ubmVjdGlvbjo6cmVwbGFjZVRyYWNrVGFzayhSVENSdHBTZW5kZXImIHNlbmRlciwgY29u
c3QgU3RyaW5nJiBtaWQsIFJlZjxNZWRpYVN0cmVhbVRyYWNrPiYmIHdpdGhUcmFjaywgRE9NUHJv
bWlzZURlZmVycmVkPHZvaWQ+JiBwcm9taXNlKQotewotICAgIGlmIChtX3BlZXJDb25uZWN0aW9u
LmlzQ2xvc2VkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fbWVkaWFFbmRwb2ludC0+cmVw
bGFjZVNlbmRTb3VyY2Uod2l0aFRyYWNrLT5zb3VyY2UoKSwgbWlkKTsKLQotICAgIHNlbmRlci5z
ZXRUcmFjayhXVEZNb3ZlKHdpdGhUcmFjaykpOwotICAgIHByb21pc2UucmVzb2x2ZSgpOwotfQot
Ci12b2lkIE1lZGlhRW5kcG9pbnRQZWVyQ29ubmVjdGlvbjo6ZG9TdG9wKCkKLXsKLSAgICBtX21l
ZGlhRW5kcG9pbnQtPnN0b3AoKTsKLX0KLQotdm9pZCBNZWRpYUVuZHBvaW50UGVlckNvbm5lY3Rp
b246OmVtdWxhdGVQbGF0Zm9ybUV2ZW50KGNvbnN0IFN0cmluZyYgYWN0aW9uKQotewotICAgIG1f
bWVkaWFFbmRwb2ludC0+ZW11bGF0ZVBsYXRmb3JtRXZlbnQoYWN0aW9uKTsKLX0KLQotTWVkaWFF
bmRwb2ludFNlc3Npb25EZXNjcmlwdGlvbiogTWVkaWFFbmRwb2ludFBlZXJDb25uZWN0aW9uOjpp
bnRlcm5hbExvY2FsRGVzY3JpcHRpb24oKSBjb25zdAotewotICAgIHJldHVybiBtX3BlbmRpbmdM
b2NhbERlc2NyaXB0aW9uID8gbV9wZW5kaW5nTG9jYWxEZXNjcmlwdGlvbi5nZXQoKSA6IG1fY3Vy
cmVudExvY2FsRGVzY3JpcHRpb24uZ2V0KCk7Ci19Ci0KLU1lZGlhRW5kcG9pbnRTZXNzaW9uRGVz
Y3JpcHRpb24qIE1lZGlhRW5kcG9pbnRQZWVyQ29ubmVjdGlvbjo6aW50ZXJuYWxSZW1vdGVEZXNj
cmlwdGlvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fcGVuZGluZ1JlbW90ZURlc2NyaXB0aW9u
ID8gbV9wZW5kaW5nUmVtb3RlRGVzY3JpcHRpb24uZ2V0KCkgOiBtX2N1cnJlbnRSZW1vdGVEZXNj
cmlwdGlvbi5nZXQoKTsKLX0KLQotUmVmUHRyPFJUQ1Nlc3Npb25EZXNjcmlwdGlvbj4gTWVkaWFF
bmRwb2ludFBlZXJDb25uZWN0aW9uOjpjcmVhdGVSVENTZXNzaW9uRGVzY3JpcHRpb24oTWVkaWFF
bmRwb2ludFNlc3Npb25EZXNjcmlwdGlvbiogZGVzY3JpcHRpb24pIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIGRlc2NyaXB0aW9uID8gZGVzY3JpcHRpb24tPnRvUlRDU2Vzc2lvbkRlc2NyaXB0aW9uKCpt
X3NkcFByb2Nlc3NvcikgOiBudWxscHRyOwotfQotCi12b2lkIE1lZGlhRW5kcG9pbnRQZWVyQ29u
bmVjdGlvbjo6Z290RHRsc0ZpbmdlcnByaW50KGNvbnN0IFN0cmluZyYgZmluZ2VycHJpbnQsIGNv
bnN0IFN0cmluZyYgZmluZ2VycHJpbnRGdW5jdGlvbikKLXsKLSAgICBBU1NFUlQoaXNNYWluVGhy
ZWFkKCkpOwotCi0gICAgbV9kdGxzRmluZ2VycHJpbnQgPSBmaW5nZXJwcmludDsKLSAgICBtX2R0
bHNGaW5nZXJwcmludEZ1bmN0aW9uID0gZmluZ2VycHJpbnRGdW5jdGlvbjsKLQotICAgIHN0YXJ0
UnVubmluZ1Rhc2tzKCk7Ci19Ci0KLXZvaWQgTWVkaWFFbmRwb2ludFBlZXJDb25uZWN0aW9uOjpn
b3RJY2VDYW5kaWRhdGUoY29uc3QgU3RyaW5nJiBtaWQsIEljZUNhbmRpZGF0ZSYmIGNhbmRpZGF0
ZSkKLXsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotCi0gICAgYXV0byYgbWVkaWFEZXNj
cmlwdGlvbnMgPSBpbnRlcm5hbExvY2FsRGVzY3JpcHRpb24oKS0+Y29uZmlndXJhdGlvbigpLT5t
ZWRpYURlc2NyaXB0aW9ucygpOwotICAgIHNpemVfdCBtZWRpYURlc2NyaXB0aW9uSW5kZXggPSBu
b3RGb3VuZDsKLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbWVkaWFEZXNjcmlwdGlvbnMu
c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKG1lZGlhRGVzY3JpcHRpb25zW2ldLm1pZCA9PSBt
aWQpIHsKLSAgICAgICAgICAgIG1lZGlhRGVzY3JpcHRpb25JbmRleCA9IGk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLSAgICBBU1NFUlQobWVkaWFEZXNjcmlwdGlvbklu
ZGV4ICE9IG5vdEZvdW5kKTsKLQotICAgIFN0cmluZyBjYW5kaWRhdGVMaW5lOwotICAgIGF1dG8g
cmVzdWx0ID0gbV9zZHBQcm9jZXNzb3ItPmdlbmVyYXRlQ2FuZGlkYXRlTGluZShjYW5kaWRhdGUs
IGNhbmRpZGF0ZUxpbmUpOwotICAgIGlmIChyZXN1bHQgIT0gU0RQUHJvY2Vzc29yOjpSZXN1bHQ6
OlN1Y2Nlc3MpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJTRFBQcm9jZXNzb3IgaW50ZXJuYWwgZXJy
b3IiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1lZGlhRGVzY3JpcHRpb25zW21l
ZGlhRGVzY3JpcHRpb25JbmRleF0uYWRkSWNlQ2FuZGlkYXRlKFdURk1vdmUoY2FuZGlkYXRlKSk7
Ci0KLSAgICBmaXJlSUNFQ2FuZGlkYXRlRXZlbnQoUlRDSWNlQ2FuZGlkYXRlOjpjcmVhdGUoY2Fu
ZGlkYXRlTGluZSwgbWlkLCBtZWRpYURlc2NyaXB0aW9uSW5kZXgpKTsKLX0KLQotdm9pZCBNZWRp
YUVuZHBvaW50UGVlckNvbm5lY3Rpb246OmRvbmVHYXRoZXJpbmdDYW5kaWRhdGVzKGNvbnN0IFN0
cmluZyYgbWlkKQotewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0KLSAgICBSdHBUcmFu
c2NlaXZlclZlY3RvciB0cmFuc2NlaXZlcnMgPSBSdHBUcmFuc2NlaXZlclZlY3RvcihtX3BlZXJD
b25uZWN0aW9uLmdldFRyYW5zY2VpdmVycygpKTsKLSAgICBSVENSdHBUcmFuc2NlaXZlciogbm90
aWZ5aW5nVHJhbnNjZWl2ZXIgPSBtYXRjaFRyYW5zY2VpdmVyQnlNaWQodHJhbnNjZWl2ZXJzLCBt
aWQpOwotICAgIEFTU0VSVChub3RpZnlpbmdUcmFuc2NlaXZlcik7Ci0KLSAgICBub3RpZnlpbmdU
cmFuc2NlaXZlci0+aWNlVHJhbnNwb3J0KCkuc2V0R2F0aGVyaW5nU3RhdGUoUlRDSWNlR2F0aGVy
aW5nU3RhdGU6OkNvbXBsZXRlKTsKLQotICAgIC8vIERvbid0IG5vdGlmeSB0aGUgc2NyaXB0IGlm
IHRoZXJlIGFyZSB0cmFuc2NlaXZlcnMgc3RpbGwgZ2F0aGVyaW5nLgotICAgIFJUQ1J0cFRyYW5z
Y2VpdmVyKiBzdGlsbEdhdGhlcmluZ1RyYW5zY2VpdmVyID0gbWF0Y2hUcmFuc2NlaXZlcih0cmFu
c2NlaXZlcnMsIFtdIChSVENSdHBUcmFuc2NlaXZlciYgY3VycmVudCkgewotICAgICAgICByZXR1
cm4gIWN1cnJlbnQuc3RvcHBlZCgpICYmICFjdXJyZW50Lm1pZCgpLmlzTnVsbCgpCi0gICAgICAg
ICAgICAmJiBjdXJyZW50LmljZVRyYW5zcG9ydCgpLmdhdGhlcmluZ1N0YXRlKCkgIT0gUlRDSWNl
R2F0aGVyaW5nU3RhdGU6OkNvbXBsZXRlOwotICAgIH0pOwotICAgIGlmICghc3RpbGxHYXRoZXJp
bmdUcmFuc2NlaXZlcikKLSAgICAgICAgUGVlckNvbm5lY3Rpb25CYWNrZW5kOjpkb25lR2F0aGVy
aW5nQ2FuZGlkYXRlcygpOwotfQotCi1zdGF0aWMgUlRDSWNlQ29ubmVjdGlvblN0YXRlIGRlcml2
ZUFnZ3JlZ2F0ZWRJY2VDb25uZWN0aW9uU3RhdGUoY29uc3QgVmVjdG9yPFJUQ0ljZVRyYW5zcG9y
dFN0YXRlPiYgc3RhdGVzKQotewotICAgIHVuc2lnbmVkIG5ld0NvdW50ID0gMDsKLSAgICB1bnNp
Z25lZCBjaGVja2luZ0NvdW50ID0gMDsKLSAgICB1bnNpZ25lZCBjb25uZWN0ZWRDb3VudCA9IDA7
Ci0gICAgdW5zaWduZWQgY29tcGxldGVkQ291bnQgPSAwOwotICAgIHVuc2lnbmVkIGZhaWxlZENv
dW50ID0gMDsKLSAgICB1bnNpZ25lZCBkaXNjb25uZWN0ZWRDb3VudCA9IDA7Ci0gICAgdW5zaWdu
ZWQgY2xvc2VkQ291bnQgPSAwOwotCi0gICAgZm9yIChhdXRvJiBzdGF0ZSA6IHN0YXRlcykgewot
ICAgICAgICBzd2l0Y2ggKHN0YXRlKSB7Ci0gICAgICAgIGNhc2UgUlRDSWNlVHJhbnNwb3J0U3Rh
dGU6Ok5ldzoKLSAgICAgICAgICAgICsrbmV3Q291bnQ7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgY2FzZSBSVENJY2VUcmFuc3BvcnRTdGF0ZTo6Q2hlY2tpbmc6Ci0gICAgICAgICAgICAr
K2NoZWNraW5nQ291bnQ7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBSVENJY2VU
cmFuc3BvcnRTdGF0ZTo6Q29ubmVjdGVkOgotICAgICAgICAgICAgKytjb25uZWN0ZWRDb3VudDsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFJUQ0ljZVRyYW5zcG9ydFN0YXRlOjpD
b21wbGV0ZWQ6Ci0gICAgICAgICAgICArK2NvbXBsZXRlZENvdW50OwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgUlRDSWNlVHJhbnNwb3J0U3RhdGU6OkZhaWxlZDoKLSAgICAgICAg
ICAgICsrZmFpbGVkQ291bnQ7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBSVENJ
Y2VUcmFuc3BvcnRTdGF0ZTo6RGlzY29ubmVjdGVkOgotICAgICAgICAgICAgKytkaXNjb25uZWN0
ZWRDb3VudDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFJUQ0ljZVRyYW5zcG9y
dFN0YXRlOjpDbG9zZWQ6Ci0gICAgICAgICAgICArK2Nsb3NlZENvdW50OwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBUaGUgYWdncmVnYXRlZCBSVENJY2VD
b25uZWN0aW9uU3RhdGUgaXMgZGVyaXZlZCBmcm9tIHRoZSBSVENJY2VUcmFuc3BvcnRTdGF0ZSBv
ZiBhbGwgUlRDSWNlVHJhbnNwb3J0cy4KLSAgICBpZiAoKG5ld0NvdW50ID4gMCAmJiAhY2hlY2tp
bmdDb3VudCAmJiAhZmFpbGVkQ291bnQgJiYgIWRpc2Nvbm5lY3RlZENvdW50KSB8fCAoY2xvc2Vk
Q291bnQgPT0gc3RhdGVzLnNpemUoKSkpCi0gICAgICAgIHJldHVybiBSVENJY2VDb25uZWN0aW9u
U3RhdGU6Ok5ldzsKLQotICAgIGlmIChjaGVja2luZ0NvdW50ID4gMCAmJiAhZmFpbGVkQ291bnQg
JiYgIWRpc2Nvbm5lY3RlZENvdW50KQotICAgICAgICByZXR1cm4gUlRDSWNlQ29ubmVjdGlvblN0
YXRlOjpDaGVja2luZzsKLQotICAgIGlmICgoY29ubmVjdGVkQ291bnQgKyBjb21wbGV0ZWRDb3Vu
dCArIGNsb3NlZENvdW50KSA9PSBzdGF0ZXMuc2l6ZSgpICYmIGNvbm5lY3RlZENvdW50ID4gMCkK
LSAgICAgICAgcmV0dXJuIFJUQ0ljZUNvbm5lY3Rpb25TdGF0ZTo6Q29ubmVjdGVkOwotCi0gICAg
aWYgKChjb21wbGV0ZWRDb3VudCArIGNsb3NlZENvdW50KSA9PSBzdGF0ZXMuc2l6ZSgpICYmIGNv
bXBsZXRlZENvdW50ID4gMCkKLSAgICAgICAgcmV0dXJuIFJUQ0ljZUNvbm5lY3Rpb25TdGF0ZTo6
Q29tcGxldGVkOwotCi0gICAgaWYgKGZhaWxlZENvdW50ID4gMCkKLSAgICAgICAgcmV0dXJuIFJU
Q0ljZUNvbm5lY3Rpb25TdGF0ZTo6RmFpbGVkOwotCi0gICAgaWYgKGRpc2Nvbm5lY3RlZENvdW50
ID4gMCkgLy8gQW55IGZhaWxlZCBjYXVnaHQgYWJvdmUuCi0gICAgICAgIHJldHVybiBSVENJY2VD
b25uZWN0aW9uU3RhdGU6OkRpc2Nvbm5lY3RlZDsKLQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwotICAgIHJldHVybiBSVENJY2VDb25uZWN0aW9uU3RhdGU6Ok5ldzsKLX0KLQotdm9pZCBNZWRp
YUVuZHBvaW50UGVlckNvbm5lY3Rpb246OmljZVRyYW5zcG9ydFN0YXRlQ2hhbmdlZChjb25zdCBT
dHJpbmcmIG1pZCwgUlRDSWNlVHJhbnNwb3J0U3RhdGUgbWVkaWFFbmRwb2ludEljZVRyYW5zcG9y
dFN0YXRlKQotewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0KLSAgICBSVENSdHBUcmFu
c2NlaXZlciogdHJhbnNjZWl2ZXIgPSBtYXRjaFRyYW5zY2VpdmVyQnlNaWQobV9wZWVyQ29ubmVj
dGlvbi5nZXRUcmFuc2NlaXZlcnMoKSwgbWlkKTsKLSAgICBBU1NFUlQodHJhbnNjZWl2ZXIpOwot
Ci0gICAgUlRDSWNlVHJhbnNwb3J0U3RhdGUgdHJhbnNwb3J0U3RhdGUgPSBzdGF0aWNfY2FzdDxS
VENJY2VUcmFuc3BvcnRTdGF0ZT4obWVkaWFFbmRwb2ludEljZVRyYW5zcG9ydFN0YXRlKTsKLSAg
ICB0cmFuc2NlaXZlci0+aWNlVHJhbnNwb3J0KCkuc2V0U3RhdGUodHJhbnNwb3J0U3RhdGUpOwot
Ci0gICAgLy8gRGV0ZXJtaW5lIGlmIHRoZSBzY3JpcHQgbmVlZHMgdG8gYmUgbm90aWZpZWQuCi0g
ICAgVmVjdG9yPFJUQ0ljZVRyYW5zcG9ydFN0YXRlPiB0cmFuc3BvcnRTdGF0ZXM7Ci0gICAgdHJh
bnNwb3J0U3RhdGVzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobV9wZWVyQ29ubmVjdGlvbi5nZXRU
cmFuc2NlaXZlcnMoKS5zaXplKCkpOwotICAgIGZvciAoYXV0byYgdHJhbnNjZWl2ZXIgOiBtX3Bl
ZXJDb25uZWN0aW9uLmdldFRyYW5zY2VpdmVycygpKQotICAgICAgICB0cmFuc3BvcnRTdGF0ZXMu
dW5jaGVja2VkQXBwZW5kKHRyYW5zY2VpdmVyLT5pY2VUcmFuc3BvcnQoKS5zdGF0ZSgpKTsKLQot
ICAgIG1fcGVlckNvbm5lY3Rpb24udXBkYXRlSWNlQ29ubmVjdGlvblN0YXRlKGRlcml2ZUFnZ3Jl
Z2F0ZWRJY2VDb25uZWN0aW9uU3RhdGUodHJhbnNwb3J0U3RhdGVzKSk7Ci19Ci0KLX0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShXRUJfUlRDKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYUVuZHBvaW50UGVlckNvbm5l
Y3Rpb24uaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFFbmRwb2lu
dFBlZXJDb25uZWN0aW9uLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJiODEzMTIx
YzkyY2QzMWQ2NTY1N2QwNWEzNDliNjI5NjNjNzliZTUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVh
bS9NZWRpYUVuZHBvaW50UGVlckNvbm5lY3Rpb24uaAorKysgL2Rldi9udWxsCkBAIC0xLDEzMyAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE1LCAyMDE2IEVyaWNzc29uIEFCLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqCi0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
cgotICogICAgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZQotICogICAgZGlzdHJpYnV0aW9uLgotICogMy4gTmVpdGhlciB0aGUgbmFt
ZSBvZiBFcmljc3NvbiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhp
cwotICogICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICog
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
Ci0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShXRUJfUlRDKQotCi0j
aW5jbHVkZSAiTWVkaWFFbmRwb2ludC5oIgotI2luY2x1ZGUgIlBlZXJDb25uZWN0aW9uQmFja2Vu
ZC5oIgotI2luY2x1ZGUgIlJUQ1Nlc3Npb25EZXNjcmlwdGlvbi5oIgotI2luY2x1ZGUgPHd0Zi9G
dW5jdGlvbi5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIE1lZGlhRW5kcG9pbnRT
ZXNzaW9uRGVzY3JpcHRpb247Ci1jbGFzcyBTRFBQcm9jZXNzb3I7Ci0KLWNsYXNzIE1lZGlhRW5k
cG9pbnRQZWVyQ29ubmVjdGlvbiBmaW5hbCA6IHB1YmxpYyBQZWVyQ29ubmVjdGlvbkJhY2tlbmQs
IHB1YmxpYyBNZWRpYUVuZHBvaW50Q2xpZW50IHsKLXB1YmxpYzoKLSAgICBXRUJDT1JFX0VYUE9S
VCBleHBsaWNpdCBNZWRpYUVuZHBvaW50UGVlckNvbm5lY3Rpb24oUlRDUGVlckNvbm5lY3Rpb24m
KTsKLQotcHJpdmF0ZToKLSAgICBSZWZQdHI8UlRDU2Vzc2lvbkRlc2NyaXB0aW9uPiBsb2NhbERl
c2NyaXB0aW9uKCkgY29uc3QgZmluYWw7Ci0gICAgUmVmUHRyPFJUQ1Nlc3Npb25EZXNjcmlwdGlv
bj4gY3VycmVudExvY2FsRGVzY3JpcHRpb24oKSBjb25zdCBmaW5hbDsKLSAgICBSZWZQdHI8UlRD
U2Vzc2lvbkRlc2NyaXB0aW9uPiBwZW5kaW5nTG9jYWxEZXNjcmlwdGlvbigpIGNvbnN0IGZpbmFs
OwotCi0gICAgUmVmUHRyPFJUQ1Nlc3Npb25EZXNjcmlwdGlvbj4gcmVtb3RlRGVzY3JpcHRpb24o
KSBjb25zdCBmaW5hbDsKLSAgICBSZWZQdHI8UlRDU2Vzc2lvbkRlc2NyaXB0aW9uPiBjdXJyZW50
UmVtb3RlRGVzY3JpcHRpb24oKSBjb25zdCBmaW5hbDsKLSAgICBSZWZQdHI8UlRDU2Vzc2lvbkRl
c2NyaXB0aW9uPiBwZW5kaW5nUmVtb3RlRGVzY3JpcHRpb24oKSBjb25zdCBmaW5hbDsKLQotICAg
IGJvb2wgc2V0Q29uZmlndXJhdGlvbihNZWRpYUVuZHBvaW50Q29uZmlndXJhdGlvbiYmKSBmaW5h
bDsKLQotICAgIHZvaWQgZ2V0U3RhdHMoTWVkaWFTdHJlYW1UcmFjayosIFJlZjxEZWZlcnJlZFBy
b21pc2U+JiYpIGZpbmFsOwotCi0gICAgVmVjdG9yPFJlZlB0cjxNZWRpYVN0cmVhbT4+IGdldFJl
bW90ZVN0cmVhbXMoKSBjb25zdCBmaW5hbDsKLQotICAgIFJlZjxSVENSdHBSZWNlaXZlcj4gY3Jl
YXRlUmVjZWl2ZXIoY29uc3QgU3RyaW5nJiB0cmFuc2NlaXZlck1pZCwgY29uc3QgU3RyaW5nJiB0
cmFja0tpbmQsIGNvbnN0IFN0cmluZyYgdHJhY2tJZCkgZmluYWw7Ci0gICAgdm9pZCByZXBsYWNl
VHJhY2soUlRDUnRwU2VuZGVyJiwgUmVmPE1lZGlhU3RyZWFtVHJhY2s+JiYsIERPTVByb21pc2VE
ZWZlcnJlZDx2b2lkPiYmKSBmaW5hbDsKLQotICAgIHZvaWQgZW11bGF0ZVBsYXRmb3JtRXZlbnQo
Y29uc3QgU3RyaW5nJiBhY3Rpb24pIGZpbmFsOwotCi0gICAgdm9pZCBydW5UYXNrKEZ1bmN0aW9u
PHZvaWQgKCk+JiYpOwotICAgIHZvaWQgc3RhcnRSdW5uaW5nVGFza3MoKTsKLQotICAgIHZvaWQg
ZG9DcmVhdGVPZmZlcihSVENPZmZlck9wdGlvbnMmJikgZmluYWw7Ci0gICAgdm9pZCBkb0NyZWF0
ZUFuc3dlcihSVENBbnN3ZXJPcHRpb25zJiYpIGZpbmFsOwotICAgIHZvaWQgZG9TZXRMb2NhbERl
c2NyaXB0aW9uKFJUQ1Nlc3Npb25EZXNjcmlwdGlvbiYpIGZpbmFsOwotICAgIHZvaWQgZG9TZXRS
ZW1vdGVEZXNjcmlwdGlvbihSVENTZXNzaW9uRGVzY3JpcHRpb24mKSBmaW5hbDsKLSAgICB2b2lk
IGRvQWRkSWNlQ2FuZGlkYXRlKFJUQ0ljZUNhbmRpZGF0ZSYpIGZpbmFsOwotICAgIHZvaWQgZG9T
dG9wKCkgZmluYWw7Ci0KLSAgICB2b2lkIGNyZWF0ZU9mZmVyVGFzayhjb25zdCBSVENPZmZlck9w
dGlvbnMmKTsKLSAgICB2b2lkIGNyZWF0ZUFuc3dlclRhc2soY29uc3QgUlRDQW5zd2VyT3B0aW9u
cyYpOwotCi0gICAgdm9pZCBzZXRMb2NhbERlc2NyaXB0aW9uVGFzayhSZWZQdHI8UlRDU2Vzc2lv
bkRlc2NyaXB0aW9uPiYmKTsKLSAgICB2b2lkIHNldFJlbW90ZURlc2NyaXB0aW9uVGFzayhSZWZQ
dHI8UlRDU2Vzc2lvbkRlc2NyaXB0aW9uPiYmKTsKLQotICAgIHZvaWQgYWRkSWNlQ2FuZGlkYXRl
VGFzayhSVENJY2VDYW5kaWRhdGUmKTsKLQotICAgIHZvaWQgcmVwbGFjZVRyYWNrVGFzayhSVENS
dHBTZW5kZXImLCBjb25zdCBTdHJpbmcmIG1pZCwgUmVmPE1lZGlhU3RyZWFtVHJhY2s+JiYsIERP
TVByb21pc2VEZWZlcnJlZDx2b2lkPiYpOwotCi0gICAgYm9vbCBsb2NhbERlc2NyaXB0aW9uVHlw
ZVZhbGlkRm9yU3RhdGUoUlRDU2RwVHlwZSkgY29uc3Q7Ci0gICAgYm9vbCByZW1vdGVEZXNjcmlw
dGlvblR5cGVWYWxpZEZvclN0YXRlKFJUQ1NkcFR5cGUpIGNvbnN0OwotCi0gICAgTWVkaWFFbmRw
b2ludFNlc3Npb25EZXNjcmlwdGlvbiogaW50ZXJuYWxMb2NhbERlc2NyaXB0aW9uKCkgY29uc3Q7
Ci0gICAgTWVkaWFFbmRwb2ludFNlc3Npb25EZXNjcmlwdGlvbiogaW50ZXJuYWxSZW1vdGVEZXNj
cmlwdGlvbigpIGNvbnN0OwotICAgIFJlZlB0cjxSVENTZXNzaW9uRGVzY3JpcHRpb24+IGNyZWF0
ZVJUQ1Nlc3Npb25EZXNjcmlwdGlvbihNZWRpYUVuZHBvaW50U2Vzc2lvbkRlc2NyaXB0aW9uKikg
Y29uc3Q7Ci0KLSAgICAvLyBNZWRpYUVuZHBvaW50Q2xpZW50Ci0gICAgdm9pZCBnb3REdGxzRmlu
Z2VycHJpbnQoY29uc3QgU3RyaW5nJiBmaW5nZXJwcmludCwgY29uc3QgU3RyaW5nJiBmaW5nZXJw
cmludEZ1bmN0aW9uKSBmaW5hbDsKLSAgICB2b2lkIGdvdEljZUNhbmRpZGF0ZShjb25zdCBTdHJp
bmcmIG1pZCwgSWNlQ2FuZGlkYXRlJiYpIGZpbmFsOwotICAgIHZvaWQgZG9uZUdhdGhlcmluZ0Nh
bmRpZGF0ZXMoY29uc3QgU3RyaW5nJiBtaWQpIGZpbmFsOwotICAgIHZvaWQgaWNlVHJhbnNwb3J0
U3RhdGVDaGFuZ2VkKGNvbnN0IFN0cmluZyYgbWlkLCBSVENJY2VUcmFuc3BvcnRTdGF0ZSkgZmlu
YWw7Ci0KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8UlRDRGF0YUNoYW5uZWxIYW5kbGVyPiBjcmVhdGVE
YXRhQ2hhbm5lbEhhbmRsZXIoY29uc3QgU3RyaW5nJiwgY29uc3QgUlRDRGF0YUNoYW5uZWxJbml0
JikgZmluYWw7Ci0KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8TWVkaWFFbmRwb2ludD4gbV9tZWRpYUVu
ZHBvaW50OwotCi0gICAgRnVuY3Rpb248dm9pZCAoKT4gbV9pbml0aWFsRGVmZXJyZWRUYXNrOwot
Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFNEUFByb2Nlc3Nvcj4gbV9zZHBQcm9jZXNzb3I7Ci0KLSAg
ICBWZWN0b3I8TWVkaWFQYXlsb2FkPiBtX2RlZmF1bHRBdWRpb1BheWxvYWRzOwotICAgIFZlY3Rv
cjxNZWRpYVBheWxvYWQ+IG1fZGVmYXVsdFZpZGVvUGF5bG9hZHM7Ci0KLSAgICBTdHJpbmcgbV9j
bmFtZTsKLSAgICBTdHJpbmcgbV9pY2VVZnJhZzsKLSAgICBTdHJpbmcgbV9pY2VQYXNzd29yZDsK
LSAgICBTdHJpbmcgbV9kdGxzRmluZ2VycHJpbnQ7Ci0gICAgU3RyaW5nIG1fZHRsc0ZpbmdlcnBy
aW50RnVuY3Rpb247Ci0gICAgdW5zaWduZWQgbV9zZHBPZmZlclNlc3Npb25WZXJzaW9uIHsgMCB9
OwotICAgIHVuc2lnbmVkIG1fc2RwQW5zd2VyU2Vzc2lvblZlcnNpb24geyAwIH07Ci0KLSAgICBS
ZWZQdHI8TWVkaWFFbmRwb2ludFNlc3Npb25EZXNjcmlwdGlvbj4gbV9jdXJyZW50TG9jYWxEZXNj
cmlwdGlvbjsKLSAgICBSZWZQdHI8TWVkaWFFbmRwb2ludFNlc3Npb25EZXNjcmlwdGlvbj4gbV9w
ZW5kaW5nTG9jYWxEZXNjcmlwdGlvbjsKLQotICAgIFJlZlB0cjxNZWRpYUVuZHBvaW50U2Vzc2lv
bkRlc2NyaXB0aW9uPiBtX2N1cnJlbnRSZW1vdGVEZXNjcmlwdGlvbjsKLSAgICBSZWZQdHI8TWVk
aWFFbmRwb2ludFNlc3Npb25EZXNjcmlwdGlvbj4gbV9wZW5kaW5nUmVtb3RlRGVzY3JpcHRpb247
Ci0KLSAgICBIYXNoTWFwPFN0cmluZywgUmVmUHRyPE1lZGlhU3RyZWFtPj4gbV9yZW1vdGVTdHJl
YW1NYXA7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUo
V0VCX1JUQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0v
TWVkaWFFbmRwb2ludFNlc3Npb25EZXNjcmlwdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL21lZGlhc3RyZWFtL01lZGlhRW5kcG9pbnRTZXNzaW9uRGVzY3JpcHRpb24uY3BwCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYzYwNmY1MGMyYTlkZDdlZTgxMjNjYmUzMzlmNzQ3
Zjc0NDBmZTc5Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFFbmRwb2ludFNlc3Npb25E
ZXNjcmlwdGlvbi5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMTcgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxNSwgMjAxNiBFcmljc3NvbiBBQi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqICAgIGluIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAq
ICAgIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgRXJpY3Nzb24gbm9y
IHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0gKiAgICBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSAqICAgIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBP
V05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
Ci0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
I2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIk1lZGlhRW5kcG9pbnRTZXNzaW9uRGVzY3Jp
cHRpb24uaCIKLQotI2lmIEVOQUJMRShXRUJfUlRDKQotCi0jaW5jbHVkZSAiU0RQUHJvY2Vzc29y
LmgiCi0jaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotI2RlZmluZSBTVFJJTkdfRlVOQ1RJT04obmFtZSkgXAotICAgIHN0YXRpYyBjb25zdCBT
dHJpbmcmIG5hbWUjI1N0cmluZygpIFwKLSAgICB7IFwKLSAgICAgICAgc3RhdGljIE5ldmVyRGVz
dHJveWVkPGNvbnN0IFN0cmluZz4gbmFtZShNQUtFX1NUQVRJQ19TVFJJTkdfSU1QTCgjbmFtZSkp
OyBcCi0gICAgICAgIHJldHVybiBuYW1lOyBcCi0gICAgfQotCi1TVFJJTkdfRlVOQ1RJT04ob2Zm
ZXIpCi1TVFJJTkdfRlVOQ1RJT04ocHJhbnN3ZXIpCi1TVFJJTkdfRlVOQ1RJT04oYW5zd2VyKQot
U1RSSU5HX0ZVTkNUSU9OKHJvbGxiYWNrKQotCi1SZWY8TWVkaWFFbmRwb2ludFNlc3Npb25EZXNj
cmlwdGlvbj4gTWVkaWFFbmRwb2ludFNlc3Npb25EZXNjcmlwdGlvbjo6Y3JlYXRlKFJUQ1NkcFR5
cGUgdHlwZSwgUmVmUHRyPE1lZGlhRW5kcG9pbnRTZXNzaW9uQ29uZmlndXJhdGlvbj4mJiBjb25m
aWd1cmF0aW9uKQotewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IE1lZGlhRW5kcG9pbnRTZXNz
aW9uRGVzY3JpcHRpb24odHlwZSwgV1RGTW92ZShjb25maWd1cmF0aW9uKSwgbnVsbHB0cikpOwot
fQotCi1FeGNlcHRpb25PcjxSZWY8TWVkaWFFbmRwb2ludFNlc3Npb25EZXNjcmlwdGlvbj4+IE1l
ZGlhRW5kcG9pbnRTZXNzaW9uRGVzY3JpcHRpb246OmNyZWF0ZShSZWZQdHI8UlRDU2Vzc2lvbkRl
c2NyaXB0aW9uPiYmIHJ0Y0Rlc2NyaXB0aW9uLCBjb25zdCBTRFBQcm9jZXNzb3ImIHNkcFByb2Nl
c3NvcikKLXsKLSAgICBSZWZQdHI8TWVkaWFFbmRwb2ludFNlc3Npb25Db25maWd1cmF0aW9uPiBj
b25maWd1cmF0aW9uOwotICAgIGF1dG8gcmVzdWx0ID0gc2RwUHJvY2Vzc29yLnBhcnNlKHJ0Y0Rl
c2NyaXB0aW9uLT5zZHAoKSwgY29uZmlndXJhdGlvbik7Ci0gICAgaWYgKHJlc3VsdCAhPSBTRFBQ
cm9jZXNzb3I6OlJlc3VsdDo6U3VjY2VzcykgewotICAgICAgICBpZiAocmVzdWx0ID09IFNEUFBy
b2Nlc3Nvcjo6UmVzdWx0OjpQYXJzZUVycm9yKQotICAgICAgICAgICAgcmV0dXJuIEV4Y2VwdGlv
biB7IEludmFsaWRBY2Nlc3NFcnJvciwgQVNDSUlMaXRlcmFsKCJTRFAgY29udGVudCBpcyBpbnZh
bGlkIikgfTsKLSAgICAgICAgTE9HX0VSUk9SKCJTRFBQcm9jZXNzb3IgaW50ZXJuYWwgZXJyb3Ii
KTsKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEFib3J0RXJyb3IsIEFTQ0lJTGl0ZXJhbCgi
SW50ZXJuYWwgZXJyb3IiKSB9OwotICAgIH0KLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBNZWRp
YUVuZHBvaW50U2Vzc2lvbkRlc2NyaXB0aW9uKHJ0Y0Rlc2NyaXB0aW9uLT50eXBlKCksIFdURk1v
dmUoY29uZmlndXJhdGlvbiksIFdURk1vdmUocnRjRGVzY3JpcHRpb24pKSk7Ci19Ci0KLVJlZlB0
cjxSVENTZXNzaW9uRGVzY3JpcHRpb24+IE1lZGlhRW5kcG9pbnRTZXNzaW9uRGVzY3JpcHRpb246
OnRvUlRDU2Vzc2lvbkRlc2NyaXB0aW9uKGNvbnN0IFNEUFByb2Nlc3NvciYgc2RwUHJvY2Vzc29y
KSBjb25zdAotewotICAgIFN0cmluZyBzZHBTdHJpbmc7Ci0gICAgU0RQUHJvY2Vzc29yOjpSZXN1
bHQgcmVzdWx0ID0gc2RwUHJvY2Vzc29yLmdlbmVyYXRlKCptX2NvbmZpZ3VyYXRpb24sIHNkcFN0
cmluZyk7Ci0gICAgaWYgKHJlc3VsdCAhPSBTRFBQcm9jZXNzb3I6OlJlc3VsdDo6U3VjY2Vzcykg
ewotICAgICAgICBMT0dfRVJST1IoIlNEUFByb2Nlc3NvciBpbnRlcm5hbCBlcnJvciIpOwotICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0KLSAgICAvLyBJZiB0aGlzIG9iamVjdCB3YXMg
Y3JlYXRlZCBmcm9tIGFuIFJUQ1Nlc3Npb25EZXNjcmlwdGlvbiwgdG9SVENTZXNzaW9uRGVzY3Jp
cHRpb24gd2lsbCByZXR1cm4KLSAgICAvLyB0aGF0IHNhbWUgaW5zdGFuY2UgYnV0IHdpdGggYW4g
dXBkYXRlZCBzZHAuIEl0IGlzIHVzZWQgZm9yIFJUQ1BlZXJDb25uZWN0aW9uJ3MgZGVzY3JpcHRp
b24KLSAgICAvLyBhdHJpYnV0ZXMgKGUuZy4gbG9jYWxEZXNjcmlwdGlvbiBhbmQgcGVuZGluZ0xv
Y2FsRGVzY3JpcHRpb24pLgotICAgIGlmIChtX3J0Y0Rlc2NyaXB0aW9uKSB7Ci0gICAgICAgIG1f
cnRjRGVzY3JpcHRpb24tPnNldFNkcChXVEZNb3ZlKHNkcFN0cmluZykpOwotICAgICAgICByZXR1
cm4gbV9ydGNEZXNjcmlwdGlvbjsKLSAgICB9Ci0KLSAgICByZXR1cm4gUlRDU2Vzc2lvbkRlc2Ny
aXB0aW9uOjpjcmVhdGUobV90eXBlLCBXVEZNb3ZlKHNkcFN0cmluZykpOwotfQotCi0vLyBGSVhN
RTogdW5pZnkgd2l0aCBMaWJXZWJSVENNZWRpYUVuZHBvaW50IHNlc3Npb25EZXNjcmlwdGlvblR5
cGUoKS4KLWNvbnN0IFN0cmluZyYgTWVkaWFFbmRwb2ludFNlc3Npb25EZXNjcmlwdGlvbjo6dHlw
ZVN0cmluZygpIGNvbnN0Ci17Ci0gICAgc3dpdGNoIChtX3R5cGUpIHsKLSAgICBjYXNlIFJUQ1Nk
cFR5cGU6Ok9mZmVyOgotICAgICAgICByZXR1cm4gb2ZmZXJTdHJpbmcoKTsKLSAgICBjYXNlIFJU
Q1NkcFR5cGU6OlByYW5zd2VyOgotICAgICAgICByZXR1cm4gcHJhbnN3ZXJTdHJpbmcoKTsKLSAg
ICBjYXNlIFJUQ1NkcFR5cGU6OkFuc3dlcjoKLSAgICAgICAgcmV0dXJuIGFuc3dlclN0cmluZygp
OwotICAgIGNhc2UgUlRDU2RwVHlwZTo6Um9sbGJhY2s6Ci0gICAgICAgIHJldHVybiByb2xsYmFj
a1N0cmluZygpOwotICAgIH0KLQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVy
biBlbXB0eVN0cmluZygpOwotfQotCi1ib29sIE1lZGlhRW5kcG9pbnRTZXNzaW9uRGVzY3JpcHRp
b246OmlzTGF0ZXJUaGFuKE1lZGlhRW5kcG9pbnRTZXNzaW9uRGVzY3JpcHRpb24qIG90aGVyKSBj
b25zdAotewotICAgIHJldHVybiAhb3RoZXIgfHwgY29uZmlndXJhdGlvbigpLT5zZXNzaW9uVmVy
c2lvbigpID4gb3RoZXItPmNvbmZpZ3VyYXRpb24oKS0+c2Vzc2lvblZlcnNpb24oKTsKLX0KLQot
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKFdFQl9SVEMpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhRW5kcG9pbnRT
ZXNzaW9uRGVzY3JpcHRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0v
TWVkaWFFbmRwb2ludFNlc3Npb25EZXNjcmlwdGlvbi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAxZDA1YzcyOTJjZWMyOTFkZTlmMTMxMWYxMzg4ZDM3ZGJhYTNjNjc1Li4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFFbmRwb2ludFNlc3Npb25EZXNjcmlwdGlvbi5oCisrKyAv
ZGV2L251bGwKQEAgLTEsNzQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSwgMjAx
NiBFcmljc3NvbiBBQi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogICAgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogICAgZGlzdHJpYnV0aW9uLgot
ICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBFcmljc3NvbiBub3IgdGhlIG5hbWVzIG9mIGl0cyBj
b250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkIGZyb20gdGhpcwotICogICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
LSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lm
IEVOQUJMRShXRUJfUlRDKQotCi0jaW5jbHVkZSAiRXhjZXB0aW9uT3IuaCIKLSNpbmNsdWRlICJS
VENTZXNzaW9uRGVzY3JpcHRpb24uaCIKLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotI2lu
Y2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBNZWRp
YUVuZHBvaW50U2Vzc2lvbkNvbmZpZ3VyYXRpb247Ci1jbGFzcyBTRFBQcm9jZXNzb3I7Ci0KLWNs
YXNzIE1lZGlhRW5kcG9pbnRTZXNzaW9uRGVzY3JpcHRpb24gOiBwdWJsaWMgUmVmQ291bnRlZDxN
ZWRpYUVuZHBvaW50U2Vzc2lvbkRlc2NyaXB0aW9uPiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJl
ZjxNZWRpYUVuZHBvaW50U2Vzc2lvbkRlc2NyaXB0aW9uPiBjcmVhdGUoUlRDU2RwVHlwZSwgUmVm
UHRyPE1lZGlhRW5kcG9pbnRTZXNzaW9uQ29uZmlndXJhdGlvbj4mJik7Ci0gICAgc3RhdGljIEV4
Y2VwdGlvbk9yPFJlZjxNZWRpYUVuZHBvaW50U2Vzc2lvbkRlc2NyaXB0aW9uPj4gY3JlYXRlKFJl
ZlB0cjxSVENTZXNzaW9uRGVzY3JpcHRpb24+JiYsIGNvbnN0IFNEUFByb2Nlc3NvciYpOwotICAg
IHZpcnR1YWwgfk1lZGlhRW5kcG9pbnRTZXNzaW9uRGVzY3JpcHRpb24oKSB7IH0gLy8gRklYTUU6
IFdoeSBpcyB0aGlzIHZpcnR1YWw/IFRoZXJlIGFyZSBubyBvdGhlciB2aXJ0dWFsIGZ1bmN0aW9u
cyBpbiB0aGlzIGNsYXNzLgotCi0gICAgUmVmUHRyPFJUQ1Nlc3Npb25EZXNjcmlwdGlvbj4gdG9S
VENTZXNzaW9uRGVzY3JpcHRpb24oY29uc3QgU0RQUHJvY2Vzc29yJikgY29uc3Q7Ci0KLSAgICBS
VENTZHBUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KLSAgICBjb25zdCBTdHJp
bmcmIHR5cGVTdHJpbmcoKSBjb25zdDsKLSAgICBNZWRpYUVuZHBvaW50U2Vzc2lvbkNvbmZpZ3Vy
YXRpb24qIGNvbmZpZ3VyYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2NvbmZpZ3VyYXRpb24uZ2V0
KCk7IH0KLQotICAgIGJvb2wgaXNMYXRlclRoYW4oTWVkaWFFbmRwb2ludFNlc3Npb25EZXNjcmlw
dGlvbiogb3RoZXIpIGNvbnN0OwotCi1wcml2YXRlOgotICAgIE1lZGlhRW5kcG9pbnRTZXNzaW9u
RGVzY3JpcHRpb24oUlRDU2RwVHlwZSB0eXBlLCBSZWZQdHI8TWVkaWFFbmRwb2ludFNlc3Npb25D
b25maWd1cmF0aW9uPiYmIGNvbmZpZ3VyYXRpb24sIFJlZlB0cjxSVENTZXNzaW9uRGVzY3JpcHRp
b24+JiYgcnRjRGVzY3JpcHRpb24pCi0gICAgICAgIDogbV90eXBlKHR5cGUpCi0gICAgICAgICwg
bV9jb25maWd1cmF0aW9uKGNvbmZpZ3VyYXRpb24pCi0gICAgICAgICwgbV9ydGNEZXNjcmlwdGlv
bihXVEZNb3ZlKHJ0Y0Rlc2NyaXB0aW9uKSkKLSAgICB7IH0KLQotICAgIFJUQ1NkcFR5cGUgbV90
eXBlOwotICAgIFJlZlB0cjxNZWRpYUVuZHBvaW50U2Vzc2lvbkNvbmZpZ3VyYXRpb24+IG1fY29u
ZmlndXJhdGlvbjsKLQotICAgIFJlZlB0cjxSVENTZXNzaW9uRGVzY3JpcHRpb24+IG1fcnRjRGVz
Y3JpcHRpb247Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFC
TEUoV0VCX1JUQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJl
YW0vU0RQUHJvY2Vzc29yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0v
U0RQUHJvY2Vzc29yLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzE1Y2YyZjI4
ODhmZjc0MDdlNWM2NWRjMjhiM2JjZGQ1YjI3ODUxMi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFt
L1NEUFByb2Nlc3Nvci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw1NjIgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxNSwgMjAxNiBFcmljc3NvbiBBQi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogICAg
aW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZQotICogICAgZGlzdHJpYnV0aW9uLgotICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBFcmlj
c3NvbiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotICogICAg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoV0VCX1JUQykKLSNpbmNs
dWRlICJTRFBQcm9jZXNzb3IuaCIKLQotI2luY2x1ZGUgIkNvbW1vblZNLmgiCi0jaW5jbHVkZSAi
RG9jdW1lbnQuaCIKLSNpbmNsdWRlICJGcmFtZS5oIgotI2luY2x1ZGUgIlNEUFByb2Nlc3NvclNj
cmlwdFJlc291cmNlLmgiCi0jaW5jbHVkZSAiU2NyaXB0Q29udHJvbGxlci5oIgotI2luY2x1ZGUg
IlNjcmlwdFNvdXJjZUNvZGUuaCIKLSNpbmNsdWRlICJpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVz
LmgiCi0jaW5jbHVkZSA8YmluZGluZ3MvU2NyaXB0T2JqZWN0Lmg+Ci0jaW5jbHVkZSA8cnVudGlt
ZS9DYXRjaFNjb3BlLmg+Ci0jaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0KLXVzaW5n
IG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotI2RlZmluZSBT
VFJJTkdfRlVOQ1RJT04obmFtZSkgXAotICAgIHN0YXRpYyBjb25zdCBTdHJpbmcmIG5hbWUjI1N0
cmluZygpIFwKLSAgICB7IFwKLSAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPGNvbnN0IFN0
cmluZz4gbmFtZShNQUtFX1NUQVRJQ19TVFJJTkdfSU1QTCgjbmFtZSkpOyBcCi0gICAgICAgIHJl
dHVybiBuYW1lOyBcCi0gICAgfQotCi1TVFJJTkdfRlVOQ1RJT04oYWRkcmVzcykKLVNUUklOR19G
VU5DVElPTihhcHQpCi1TVFJJTkdfRlVOQ1RJT04oYnVuZGxlUG9saWN5KQotU1RSSU5HX0ZVTkNU
SU9OKGNhbmRpZGF0ZXMpCi1TVFJJTkdfRlVOQ1RJT04oY2NtZmlyKQotU1RSSU5HX0ZVTkNUSU9O
KGNoYW5uZWxzKQotU1RSSU5HX0ZVTkNUSU9OKGNsb2NrUmF0ZSkKLVNUUklOR19GVU5DVElPTihj
bmFtZSkKLVNUUklOR19GVU5DVElPTihjb21wb25lbnRJZCkKLVNUUklOR19GVU5DVElPTihkdGxz
KQotU1RSSU5HX0ZVTkNUSU9OKGVuY29kaW5nTmFtZSkKLVNUUklOR19GVU5DVElPTihmaW5nZXJw
cmludCkKLVNUUklOR19GVU5DVElPTihmaW5nZXJwcmludEhhc2hGdW5jdGlvbikKLVNUUklOR19G
VU5DVElPTihmb3VuZGF0aW9uKQotU1RSSU5HX0ZVTkNUSU9OKGljZSkKLVNUUklOR19GVU5DVElP
TihtZWRpYURlc2NyaXB0aW9ucykKLVNUUklOR19GVU5DVElPTihtZWRpYVN0cmVhbUlkKQotU1RS
SU5HX0ZVTkNUSU9OKG1lZGlhU3RyZWFtVHJhY2tJZCkKLVNUUklOR19GVU5DVElPTihtaWQpCi1T
VFJJTkdfRlVOQ1RJT04obW9kZSkKLVNUUklOR19GVU5DVElPTihtdXgpCi1TVFJJTkdfRlVOQ1RJ
T04obmFjaykKLVNUUklOR19GVU5DVElPTihuYWNrcGxpKQotU1RSSU5HX0ZVTkNUSU9OKG9yaWdp
bmF0b3IpCi1TVFJJTkdfRlVOQ1RJT04ocGFja2V0aXphdGlvbk1vZGUpCi1TVFJJTkdfRlVOQ1RJ
T04ocGFyYW1ldGVycykKLVNUUklOR19GVU5DVElPTihwYXNzd29yZCkKLVNUUklOR19GVU5DVElP
TihwYXlsb2FkcykKLVNUUklOR19GVU5DVElPTihwb3J0KQotU1RSSU5HX0ZVTkNUSU9OKHByaW9y
aXR5KQotU1RSSU5HX0ZVTkNUSU9OKHJlbGF0ZWRBZGRyZXNzKQotU1RSSU5HX0ZVTkNUSU9OKHJl
bGF0ZWRQb3J0KQotU1RSSU5HX0ZVTkNUSU9OKHJ0Y3ApCi1TVFJJTkdfRlVOQ1RJT04ocnRjcEFk
ZHJlc3MpCi1TVFJJTkdfRlVOQ1RJT04ocnRjcFBvcnQpCi1TVFJJTkdfRlVOQ1RJT04ocnR4VGlt
ZSkKLVNUUklOR19GVU5DVElPTihzZXNzaW9uSWQpCi1TVFJJTkdfRlVOQ1RJT04oc2Vzc2lvblZl
cnNpb24pCi1TVFJJTkdfRlVOQ1RJT04oc2V0dXApCi1TVFJJTkdfRlVOQ1RJT04oc3NyY3MpCi1T
VFJJTkdfRlVOQ1RJT04odGNwVHlwZSkKLVNUUklOR19GVU5DVElPTih0cmFuc3BvcnQpCi1TVFJJ
TkdfRlVOQ1RJT04odHlwZSkKLVNUUklOR19GVU5DVElPTih1ZnJhZykKLQotU0RQUHJvY2Vzc29y
OjpTRFBQcm9jZXNzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkKLSAgICA6IENv
bnRleHREZXN0cnVjdGlvbk9ic2VydmVyKGNvbnRleHQpCi17Ci19Ci0KLS8vIE5vdGUgdGhhdCBN
ZWRpYUVuZHBvaW50U2Vzc2lvbkNvbmZpZ3VyYXRpb24gaXMgYSAiZmxhdHRlciIgc3RydWN0dXJl
IHRoYXQgdGhlIEpTT04gcmVwcmVzZW50YXRpb24uIEZvcgotLy8gZXhhbXBsZSwgdGhlIEpTT04g
cmVwcmVzZW50YXRpb24gaGFzIGFuICJpY2UiIG9iamVjdCB3aGljaCBjb2xsZWN0cyBhIHNldCBv
ZiBwcm9wZXJ0aWVzIHVuZGVyIGEKLS8vIG5hbWVzcGFjZS4gTWVkaWFFbmRwb2ludFNlc3Npb25D
b25maWd1cmF0aW9uIGhhcyAiaWNlIi1wcmVmaXhlcyBvbiB0aGUgY29ycmVzcG9uZGluZyBwcm9w
ZXJ0aWVzLgotCi1zdGF0aWMgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gY3JlYXRlQ2FuZGlkYXRl
T2JqZWN0KGNvbnN0IEljZUNhbmRpZGF0ZSYgY2FuZGlkYXRlKQotewotICAgIFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IGNhbmRpZGF0ZU9iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7
Ci0KLSAgICBjYW5kaWRhdGVPYmplY3QtPnNldFN0cmluZyh0eXBlU3RyaW5nKCksIGNhbmRpZGF0
ZS50eXBlKTsKLSAgICBjYW5kaWRhdGVPYmplY3QtPnNldFN0cmluZyhmb3VuZGF0aW9uU3RyaW5n
KCksIGNhbmRpZGF0ZS5mb3VuZGF0aW9uKTsKLSAgICBjYW5kaWRhdGVPYmplY3QtPnNldEludGVn
ZXIoY29tcG9uZW50SWRTdHJpbmcoKSwgY2FuZGlkYXRlLmNvbXBvbmVudElkKTsKLSAgICBjYW5k
aWRhdGVPYmplY3QtPnNldFN0cmluZyh0cmFuc3BvcnRTdHJpbmcoKSwgY2FuZGlkYXRlLnRyYW5z
cG9ydCk7Ci0gICAgY2FuZGlkYXRlT2JqZWN0LT5zZXRJbnRlZ2VyKHByaW9yaXR5U3RyaW5nKCks
IGNhbmRpZGF0ZS5wcmlvcml0eSk7Ci0gICAgY2FuZGlkYXRlT2JqZWN0LT5zZXRTdHJpbmcoYWRk
cmVzc1N0cmluZygpLCBjYW5kaWRhdGUuYWRkcmVzcyk7Ci0gICAgY2FuZGlkYXRlT2JqZWN0LT5z
ZXRJbnRlZ2VyKHBvcnRTdHJpbmcoKSwgY2FuZGlkYXRlLnBvcnQpOwotICAgIGlmICghY2FuZGlk
YXRlLnRjcFR5cGUuaXNFbXB0eSgpKQotICAgICAgICBjYW5kaWRhdGVPYmplY3QtPnNldFN0cmlu
Zyh0Y3BUeXBlU3RyaW5nKCksIGNhbmRpZGF0ZS50Y3BUeXBlKTsKLSAgICBpZiAoY2FuZGlkYXRl
LnR5cGUuY29udmVydFRvQVNDSUlVcHBlcmNhc2UoKSAhPSAiSE9TVCIpIHsKLSAgICAgICAgY2Fu
ZGlkYXRlT2JqZWN0LT5zZXRTdHJpbmcocmVsYXRlZEFkZHJlc3NTdHJpbmcoKSwgY2FuZGlkYXRl
LnJlbGF0ZWRBZGRyZXNzKTsKLSAgICAgICAgY2FuZGlkYXRlT2JqZWN0LT5zZXRJbnRlZ2VyKHJl
bGF0ZWRQb3J0U3RyaW5nKCksIGNhbmRpZGF0ZS5yZWxhdGVkUG9ydCk7Ci0gICAgfQotCi0gICAg
cmV0dXJuIGNhbmRpZGF0ZU9iamVjdDsKLX0KLQotc3RhdGljIEljZUNhbmRpZGF0ZSBjcmVhdGVD
YW5kaWRhdGUoY29uc3QgSW5zcGVjdG9yT2JqZWN0JiBjYW5kaWRhdGVPYmplY3QpCi17Ci0gICAg
SWNlQ2FuZGlkYXRlIGNhbmRpZGF0ZTsKLSAgICBTdHJpbmcgc3RyaW5nVmFsdWU7Ci0gICAgdW5z
aWduZWQgaW50VmFsdWU7Ci0KLSAgICBpZiAoY2FuZGlkYXRlT2JqZWN0LmdldFN0cmluZyh0eXBl
U3RyaW5nKCksIHN0cmluZ1ZhbHVlKSkKLSAgICAgICAgY2FuZGlkYXRlLnR5cGUgPSBzdHJpbmdW
YWx1ZTsKLQotICAgIGlmIChjYW5kaWRhdGVPYmplY3QuZ2V0U3RyaW5nKGZvdW5kYXRpb25TdHJp
bmcoKSwgc3RyaW5nVmFsdWUpKQotICAgICAgICBjYW5kaWRhdGUuZm91bmRhdGlvbiA9IHN0cmlu
Z1ZhbHVlOwotCi0gICAgaWYgKGNhbmRpZGF0ZU9iamVjdC5nZXRJbnRlZ2VyKGNvbXBvbmVudElk
U3RyaW5nKCksIGludFZhbHVlKSkKLSAgICAgICAgY2FuZGlkYXRlLmNvbXBvbmVudElkID0gaW50
VmFsdWU7Ci0KLSAgICBpZiAoY2FuZGlkYXRlT2JqZWN0LmdldFN0cmluZyh0cmFuc3BvcnRTdHJp
bmcoKSwgc3RyaW5nVmFsdWUpKQotICAgICAgICBjYW5kaWRhdGUudHJhbnNwb3J0ID0gc3RyaW5n
VmFsdWU7Ci0KLSAgICBpZiAoY2FuZGlkYXRlT2JqZWN0LmdldEludGVnZXIocHJpb3JpdHlTdHJp
bmcoKSwgaW50VmFsdWUpKQotICAgICAgICBjYW5kaWRhdGUucHJpb3JpdHkgPSBpbnRWYWx1ZTsK
LQotICAgIGlmIChjYW5kaWRhdGVPYmplY3QuZ2V0U3RyaW5nKGFkZHJlc3NTdHJpbmcoKSwgc3Ry
aW5nVmFsdWUpKQotICAgICAgICBjYW5kaWRhdGUuYWRkcmVzcyA9IHN0cmluZ1ZhbHVlOwotCi0g
ICAgaWYgKGNhbmRpZGF0ZU9iamVjdC5nZXRJbnRlZ2VyKHBvcnRTdHJpbmcoKSwgaW50VmFsdWUp
KQotICAgICAgICBjYW5kaWRhdGUucG9ydCA9IGludFZhbHVlOwotCi0gICAgaWYgKGNhbmRpZGF0
ZU9iamVjdC5nZXRTdHJpbmcodGNwVHlwZVN0cmluZygpLCBzdHJpbmdWYWx1ZSkpCi0gICAgICAg
IGNhbmRpZGF0ZS50Y3BUeXBlID0gc3RyaW5nVmFsdWU7Ci0KLSAgICBpZiAoY2FuZGlkYXRlT2Jq
ZWN0LmdldFN0cmluZyhyZWxhdGVkQWRkcmVzc1N0cmluZygpLCBzdHJpbmdWYWx1ZSkpCi0gICAg
ICAgIGNhbmRpZGF0ZS5yZWxhdGVkQWRkcmVzcyA9IHN0cmluZ1ZhbHVlOwotCi0gICAgaWYgKGNh
bmRpZGF0ZU9iamVjdC5nZXRJbnRlZ2VyKHJlbGF0ZWRQb3J0U3RyaW5nKCksIGludFZhbHVlKSkK
LSAgICAgICAgY2FuZGlkYXRlLnJlbGF0ZWRQb3J0ID0gaW50VmFsdWU7Ci0KLSAgICByZXR1cm4g
Y2FuZGlkYXRlOwotfQotCi1zdGF0aWMgUmVmUHRyPE1lZGlhRW5kcG9pbnRTZXNzaW9uQ29uZmln
dXJhdGlvbj4gY29uZmlndXJhdGlvbkZyb21KU09OKGNvbnN0IFN0cmluZyYganNvbikKLXsKLSAg
ICBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IHZhbHVlOwotICAgIGlmICghSW5zcGVjdG9yVmFsdWU6
OnBhcnNlSlNPTihqc29uLCB2YWx1ZSkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAg
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gb2JqZWN0OwotICAgIGlmICghdmFsdWUtPmFzT2JqZWN0
KG9iamVjdCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgUmVmUHRyPE1lZGlhRW5k
cG9pbnRTZXNzaW9uQ29uZmlndXJhdGlvbj4gY29uZmlndXJhdGlvbiA9IE1lZGlhRW5kcG9pbnRT
ZXNzaW9uQ29uZmlndXJhdGlvbjo6Y3JlYXRlKCk7Ci0KLSAgICBTdHJpbmcgc3RyaW5nVmFsdWU7
Ci0gICAgdW5zaWduZWQgaW50VmFsdWU7Ci0gICAgYm9vbCBib29sVmFsdWU7Ci0KLSAgICBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiBvcmlnaW5hdG9yT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0Ojpj
cmVhdGUoKTsKLSAgICBpZiAob2JqZWN0LT5nZXRPYmplY3Qob3JpZ2luYXRvclN0cmluZygpLCBv
cmlnaW5hdG9yT2JqZWN0KSkgewotICAgICAgICBpZiAob3JpZ2luYXRvck9iamVjdC0+Z2V0U3Ry
aW5nKHNlc3Npb25JZFN0cmluZygpLCBzdHJpbmdWYWx1ZSkpCi0gICAgICAgICAgICBjb25maWd1
cmF0aW9uLT5zZXRTZXNzaW9uSWQoc3RyaW5nVmFsdWUudG9JbnQ2NCgpKTsKLSAgICAgICAgaWYg
KG9yaWdpbmF0b3JPYmplY3QtPmdldEludGVnZXIoc2Vzc2lvblZlcnNpb25TdHJpbmcoKSwgaW50
VmFsdWUpKQotICAgICAgICAgICAgY29uZmlndXJhdGlvbi0+c2V0U2Vzc2lvblZlcnNpb24oaW50
VmFsdWUpOwotICAgIH0KLQotICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gbWVkaWFEZXNjcmlw
dGlvbnNBcnJheSA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKLSAgICBvYmplY3QtPmdldEFy
cmF5KG1lZGlhRGVzY3JpcHRpb25zU3RyaW5nKCksIG1lZGlhRGVzY3JpcHRpb25zQXJyYXkpOwot
Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1lZGlhRGVzY3JpcHRpb25zQXJyYXktPmxl
bmd0aCgpOyArK2kpIHsKLSAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbWVkaWFEZXNj
cmlwdGlvbk9iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgICAgIG1lZGlh
RGVzY3JpcHRpb25zQXJyYXktPmdldChpKS0+YXNPYmplY3QobWVkaWFEZXNjcmlwdGlvbk9iamVj
dCk7Ci0KLSAgICAgICAgUGVlck1lZGlhRGVzY3JpcHRpb24gbWVkaWFEZXNjcmlwdGlvbjsKLQot
ICAgICAgICBpZiAobWVkaWFEZXNjcmlwdGlvbk9iamVjdC0+Z2V0U3RyaW5nKHR5cGVTdHJpbmco
KSwgc3RyaW5nVmFsdWUpKQotICAgICAgICAgICAgbWVkaWFEZXNjcmlwdGlvbi50eXBlID0gc3Ry
aW5nVmFsdWU7Ci0KLSAgICAgICAgaWYgKG1lZGlhRGVzY3JpcHRpb25PYmplY3QtPmdldEludGVn
ZXIocG9ydFN0cmluZygpLCBpbnRWYWx1ZSkpCi0gICAgICAgICAgICBtZWRpYURlc2NyaXB0aW9u
LnBvcnQgPSBpbnRWYWx1ZTsKLQotICAgICAgICBpZiAobWVkaWFEZXNjcmlwdGlvbk9iamVjdC0+
Z2V0U3RyaW5nKGFkZHJlc3NTdHJpbmcoKSwgc3RyaW5nVmFsdWUpKQotICAgICAgICAgICAgbWVk
aWFEZXNjcmlwdGlvbi5hZGRyZXNzID0gc3RyaW5nVmFsdWU7Ci0KLSAgICAgICAgaWYgKG1lZGlh
RGVzY3JpcHRpb25PYmplY3QtPmdldFN0cmluZyhtb2RlU3RyaW5nKCksIHN0cmluZ1ZhbHVlKSkK
LSAgICAgICAgICAgIG1lZGlhRGVzY3JpcHRpb24ubW9kZSA9IHN0cmluZ1ZhbHVlOwotCi0gICAg
ICAgIGlmIChtZWRpYURlc2NyaXB0aW9uT2JqZWN0LT5nZXRTdHJpbmcobWlkU3RyaW5nKCksIHN0
cmluZ1ZhbHVlKSkKLSAgICAgICAgICAgIG1lZGlhRGVzY3JpcHRpb24ubWlkID0gc3RyaW5nVmFs
dWU7Ci0KLSAgICAgICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwYXlsb2Fkc0FycmF5ID0gSW5z
cGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwotICAgICAgICBtZWRpYURlc2NyaXB0aW9uT2JqZWN0LT5n
ZXRBcnJheShwYXlsb2Fkc1N0cmluZygpLCBwYXlsb2Fkc0FycmF5KTsKLQotICAgICAgICBmb3Ig
KHVuc2lnbmVkIGogPSAwOyBqIDwgcGF5bG9hZHNBcnJheS0+bGVuZ3RoKCk7ICsraikgewotICAg
ICAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGF5bG9hZHNPYmplY3QgPSBJbnNwZWN0
b3JPYmplY3Q6OmNyZWF0ZSgpOwotICAgICAgICAgICAgcGF5bG9hZHNBcnJheS0+Z2V0KGopLT5h
c09iamVjdChwYXlsb2Fkc09iamVjdCk7Ci0KLSAgICAgICAgICAgIE1lZGlhUGF5bG9hZCBwYXls
b2FkOwotCi0gICAgICAgICAgICBpZiAocGF5bG9hZHNPYmplY3QtPmdldEludGVnZXIodHlwZVN0
cmluZygpLCBpbnRWYWx1ZSkpCi0gICAgICAgICAgICAgICAgcGF5bG9hZC50eXBlID0gaW50VmFs
dWU7Ci0KLSAgICAgICAgICAgIGlmIChwYXlsb2Fkc09iamVjdC0+Z2V0U3RyaW5nKGVuY29kaW5n
TmFtZVN0cmluZygpLCBzdHJpbmdWYWx1ZSkpCi0gICAgICAgICAgICAgICAgcGF5bG9hZC5lbmNv
ZGluZ05hbWUgPSBzdHJpbmdWYWx1ZTsKLQotICAgICAgICAgICAgaWYgKHBheWxvYWRzT2JqZWN0
LT5nZXRJbnRlZ2VyKGNsb2NrUmF0ZVN0cmluZygpLCBpbnRWYWx1ZSkpCi0gICAgICAgICAgICAg
ICAgcGF5bG9hZC5jbG9ja1JhdGUgPSBpbnRWYWx1ZTsKLQotICAgICAgICAgICAgaWYgKHBheWxv
YWRzT2JqZWN0LT5nZXRJbnRlZ2VyKGNoYW5uZWxzU3RyaW5nKCksIGludFZhbHVlKSkKLSAgICAg
ICAgICAgICAgICBwYXlsb2FkLmNoYW5uZWxzID0gaW50VmFsdWU7Ci0KLSAgICAgICAgICAgIGlm
IChwYXlsb2Fkc09iamVjdC0+Z2V0Qm9vbGVhbihjY21maXJTdHJpbmcoKSwgYm9vbFZhbHVlKSkK
LSAgICAgICAgICAgICAgICBwYXlsb2FkLmNjbWZpciA9IGJvb2xWYWx1ZTsKLQotICAgICAgICAg
ICAgaWYgKHBheWxvYWRzT2JqZWN0LT5nZXRCb29sZWFuKG5hY2twbGlTdHJpbmcoKSwgYm9vbFZh
bHVlKSkKLSAgICAgICAgICAgICAgICBwYXlsb2FkLm5hY2twbGkgPSBib29sVmFsdWU7Ci0KLSAg
ICAgICAgICAgIGlmIChwYXlsb2Fkc09iamVjdC0+Z2V0Qm9vbGVhbihuYWNrU3RyaW5nKCksIGJv
b2xWYWx1ZSkpCi0gICAgICAgICAgICAgICAgcGF5bG9hZC5uYWNrID0gYm9vbFZhbHVlOwotCi0g
ICAgICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbWV0ZXJzT2JqZWN0ID0gSW5z
cGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKLSAgICAgICAgICAgIGlmIChwYXlsb2Fkc09iamVjdC0+
Z2V0T2JqZWN0KHBhcmFtZXRlcnNTdHJpbmcoKSwgcGFyYW1ldGVyc09iamVjdCkpIHsKLSAgICAg
ICAgICAgICAgICBpZiAocGFyYW1ldGVyc09iamVjdC0+Z2V0SW50ZWdlcihwYWNrZXRpemF0aW9u
TW9kZVN0cmluZygpLCBpbnRWYWx1ZSkpCi0gICAgICAgICAgICAgICAgICAgIHBheWxvYWQuYWRk
UGFyYW1ldGVyKCJwYWNrZXRpemF0aW9uTW9kZSIsIGludFZhbHVlKTsKLQotICAgICAgICAgICAg
ICAgIGlmIChwYXJhbWV0ZXJzT2JqZWN0LT5nZXRJbnRlZ2VyKGFwdFN0cmluZygpLCBpbnRWYWx1
ZSkpCi0gICAgICAgICAgICAgICAgICAgIHBheWxvYWQuYWRkUGFyYW1ldGVyKCJhcHQiLCBpbnRW
YWx1ZSk7Ci0KLSAgICAgICAgICAgICAgICBpZiAocGFyYW1ldGVyc09iamVjdC0+Z2V0SW50ZWdl
cihydHhUaW1lU3RyaW5nKCksIGludFZhbHVlKSkKLSAgICAgICAgICAgICAgICAgICAgcGF5bG9h
ZC5hZGRQYXJhbWV0ZXIoInJ0eFRpbWUiLCBpbnRWYWx1ZSk7Ci0gICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgIG1lZGlhRGVzY3JpcHRpb24uYWRkUGF5bG9hZChXVEZNb3ZlKHBheWxvYWQpKTsK
LSAgICAgICAgfQotCi0gICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJ0Y3BPYmplY3Qg
PSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwotICAgICAgICBpZiAobWVkaWFEZXNjcmlwdGlv
bk9iamVjdC0+Z2V0T2JqZWN0KHJ0Y3BTdHJpbmcoKSwgcnRjcE9iamVjdCkpIHsKLSAgICAgICAg
ICAgIGlmIChydGNwT2JqZWN0LT5nZXRCb29sZWFuKG11eFN0cmluZygpLCBib29sVmFsdWUpKQot
ICAgICAgICAgICAgICAgIG1lZGlhRGVzY3JpcHRpb24ucnRjcE11eCA9IGJvb2xWYWx1ZTsKLQot
ICAgICAgICAgICAgaWYgKHJ0Y3BPYmplY3QtPmdldFN0cmluZyhydGNwQWRkcmVzc1N0cmluZygp
LCBzdHJpbmdWYWx1ZSkpCi0gICAgICAgICAgICAgICAgbWVkaWFEZXNjcmlwdGlvbi5ydGNwQWRk
cmVzcyA9IHN0cmluZ1ZhbHVlOwotCi0gICAgICAgICAgICBpZiAocnRjcE9iamVjdC0+Z2V0SW50
ZWdlcihydGNwUG9ydFN0cmluZygpLCBpbnRWYWx1ZSkpCi0gICAgICAgICAgICAgICAgbWVkaWFE
ZXNjcmlwdGlvbi5ydGNwUG9ydCA9IGludFZhbHVlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYg
KG1lZGlhRGVzY3JpcHRpb25PYmplY3QtPmdldFN0cmluZyhtZWRpYVN0cmVhbUlkU3RyaW5nKCks
IHN0cmluZ1ZhbHVlKSkKLSAgICAgICAgICAgIG1lZGlhRGVzY3JpcHRpb24ubWVkaWFTdHJlYW1J
ZCA9IHN0cmluZ1ZhbHVlOwotCi0gICAgICAgIGlmIChtZWRpYURlc2NyaXB0aW9uT2JqZWN0LT5n
ZXRTdHJpbmcobWVkaWFTdHJlYW1UcmFja0lkU3RyaW5nKCksIHN0cmluZ1ZhbHVlKSkKLSAgICAg
ICAgICAgIG1lZGlhRGVzY3JpcHRpb24ubWVkaWFTdHJlYW1UcmFja0lkID0gc3RyaW5nVmFsdWU7
Ci0KLSAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZHRsc09iamVjdCA9IEluc3BlY3Rv
ck9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgICAgIGlmIChtZWRpYURlc2NyaXB0aW9uT2JqZWN0LT5n
ZXRPYmplY3QoZHRsc1N0cmluZygpLCBkdGxzT2JqZWN0KSkgewotICAgICAgICAgICAgaWYgKGR0
bHNPYmplY3QtPmdldFN0cmluZyhzZXR1cFN0cmluZygpLCBzdHJpbmdWYWx1ZSkpCi0gICAgICAg
ICAgICAgICAgbWVkaWFEZXNjcmlwdGlvbi5kdGxzU2V0dXAgPSBzdHJpbmdWYWx1ZTsKLQotICAg
ICAgICAgICAgaWYgKGR0bHNPYmplY3QtPmdldFN0cmluZyhmaW5nZXJwcmludEhhc2hGdW5jdGlv
blN0cmluZygpLCBzdHJpbmdWYWx1ZSkpCi0gICAgICAgICAgICAgICAgbWVkaWFEZXNjcmlwdGlv
bi5kdGxzRmluZ2VycHJpbnRIYXNoRnVuY3Rpb24gPSBzdHJpbmdWYWx1ZTsKLQotICAgICAgICAg
ICAgaWYgKGR0bHNPYmplY3QtPmdldFN0cmluZyhmaW5nZXJwcmludFN0cmluZygpLCBzdHJpbmdW
YWx1ZSkpCi0gICAgICAgICAgICAgICAgbWVkaWFEZXNjcmlwdGlvbi5kdGxzRmluZ2VycHJpbnQg
PSBzdHJpbmdWYWx1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJh
eT4gc3NyY3NBcnJheSA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKLSAgICAgICAgbWVkaWFE
ZXNjcmlwdGlvbk9iamVjdC0+Z2V0QXJyYXkoc3NyY3NTdHJpbmcoKSwgc3NyY3NBcnJheSk7Ci0K
LSAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IHNzcmNzQXJyYXktPmxlbmd0aCgpOyAr
K2opIHsKLSAgICAgICAgICAgIHNzcmNzQXJyYXktPmdldChqKS0+YXNJbnRlZ2VyKGludFZhbHVl
KTsKLSAgICAgICAgICAgIG1lZGlhRGVzY3JpcHRpb24uYWRkU3NyYyhpbnRWYWx1ZSk7Ci0gICAg
ICAgIH0KLQotICAgICAgICBpZiAobWVkaWFEZXNjcmlwdGlvbk9iamVjdC0+Z2V0U3RyaW5nKGNu
YW1lU3RyaW5nKCksIHN0cmluZ1ZhbHVlKSkKLSAgICAgICAgICAgIG1lZGlhRGVzY3JpcHRpb24u
Y25hbWUgPSBzdHJpbmdWYWx1ZTsKLQotICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBp
Y2VPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwotICAgICAgICBpZiAobWVkaWFE
ZXNjcmlwdGlvbk9iamVjdC0+Z2V0T2JqZWN0KGljZVN0cmluZygpLCBpY2VPYmplY3QpKSB7Ci0g
ICAgICAgICAgICBpZiAoaWNlT2JqZWN0LT5nZXRTdHJpbmcodWZyYWdTdHJpbmcoKSwgc3RyaW5n
VmFsdWUpKQotICAgICAgICAgICAgICAgIG1lZGlhRGVzY3JpcHRpb24uaWNlVWZyYWcgPSBzdHJp
bmdWYWx1ZTsKLQotICAgICAgICAgICAgaWYgKGljZU9iamVjdC0+Z2V0U3RyaW5nKHBhc3N3b3Jk
U3RyaW5nKCksIHN0cmluZ1ZhbHVlKSkKLSAgICAgICAgICAgICAgICBtZWRpYURlc2NyaXB0aW9u
LmljZVBhc3N3b3JkID0gc3RyaW5nVmFsdWU7Ci0KLSAgICAgICAgICAgIFJlZlB0cjxJbnNwZWN0
b3JBcnJheT4gY2FuZGlkYXRlc0FycmF5ID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwotICAg
ICAgICAgICAgaWNlT2JqZWN0LT5nZXRBcnJheShjYW5kaWRhdGVzU3RyaW5nKCksIGNhbmRpZGF0
ZXNBcnJheSk7Ci0KLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGogPCBjYW5kaWRh
dGVzQXJyYXktPmxlbmd0aCgpOyArK2opIHsKLSAgICAgICAgICAgICAgICBSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiBjYW5kaWRhdGVPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwot
ICAgICAgICAgICAgICAgIGNhbmRpZGF0ZXNBcnJheS0+Z2V0KGopLT5hc09iamVjdChjYW5kaWRh
dGVPYmplY3QpOwotCi0gICAgICAgICAgICAgICAgbWVkaWFEZXNjcmlwdGlvbi5hZGRJY2VDYW5k
aWRhdGUoY3JlYXRlQ2FuZGlkYXRlKCpjYW5kaWRhdGVPYmplY3QpKTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotCi0gICAgICAgIGNvbmZpZ3VyYXRpb24tPmFkZE1lZGlhRGVzY3JpcHRpb24o
V1RGTW92ZShtZWRpYURlc2NyaXB0aW9uKSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGNvbmZpZ3Vy
YXRpb247Ci19Ci0KLXN0YXRpYyBzdGQ6Om9wdGlvbmFsPEljZUNhbmRpZGF0ZT4gaWNlQ2FuZGlk
YXRlRnJvbUpTT04oY29uc3QgU3RyaW5nJiBqc29uKQotewotICAgIFJlZlB0cjxJbnNwZWN0b3JW
YWx1ZT4gdmFsdWU7Ci0gICAgaWYgKCFJbnNwZWN0b3JWYWx1ZTo6cGFyc2VKU09OKGpzb24sIHZh
bHVlKSkKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQotICAgIFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IGNhbmRpZGF0ZU9iamVjdDsKLSAgICBpZiAoIXZhbHVlLT5hc09iamVjdChjYW5k
aWRhdGVPYmplY3QpKQotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotCi0gICAgcmV0dXJu
IGNyZWF0ZUNhbmRpZGF0ZSgqY2FuZGlkYXRlT2JqZWN0KTsKLX0KLQotc3RhdGljIFN0cmluZyBn
ZXRCdW5kbGVQb2xpY3lOYW1lKGNvbnN0IFBlZXJDb25uZWN0aW9uU3RhdGVzOjpCdW5kbGVQb2xp
Y3kgYnVuZGxlUG9saWN5KQotewotICAgIHN3aXRjaCAoYnVuZGxlUG9saWN5KSB7Ci0gICAgY2Fz
ZSBQZWVyQ29ubmVjdGlvblN0YXRlczo6QnVuZGxlUG9saWN5OjpNYXhDb21wYXQ6Ci0gICAgICAg
IHJldHVybiAibWF4LWNvbXBhdCI7Ci0gICAgY2FzZSBQZWVyQ29ubmVjdGlvblN0YXRlczo6QnVu
ZGxlUG9saWN5OjpNYXhCdW5kbGU6Ci0gICAgICAgIHJldHVybiAibWF4LWJ1bmRsZSI7Ci0gICAg
Y2FzZSBQZWVyQ29ubmVjdGlvblN0YXRlczo6QnVuZGxlUG9saWN5OjpCYWxhbmNlZDoKLSAgICBk
ZWZhdWx0OgotICAgICAgICByZXR1cm4gImJhbGFuY2VkIjsKLSAgICB9OwotfQotCi1zdGF0aWMg
U3RyaW5nIGNvbmZpZ3VyYXRpb25Ub0pTT04oY29uc3QgTWVkaWFFbmRwb2ludFNlc3Npb25Db25m
aWd1cmF0aW9uJiBjb25maWd1cmF0aW9uKQotewotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IG9iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgb2JqZWN0LT5zZXRTdHJp
bmcoYnVuZGxlUG9saWN5U3RyaW5nKCksIGdldEJ1bmRsZVBvbGljeU5hbWUoY29uZmlndXJhdGlv
bi5idW5kbGVQb2xpY3koKSkpOwotCi0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gb3JpZ2lu
YXRvck9iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgb3JpZ2luYXRvck9i
amVjdC0+c2V0U3RyaW5nKHNlc3Npb25JZFN0cmluZygpLCBTdHJpbmc6Om51bWJlcihjb25maWd1
cmF0aW9uLnNlc3Npb25JZCgpKSk7Ci0gICAgb3JpZ2luYXRvck9iamVjdC0+c2V0SW50ZWdlcihz
ZXNzaW9uVmVyc2lvblN0cmluZygpLCBjb25maWd1cmF0aW9uLnNlc3Npb25WZXJzaW9uKCkpOwot
ICAgIG9iamVjdC0+c2V0T2JqZWN0KG9yaWdpbmF0b3JTdHJpbmcoKSwgb3JpZ2luYXRvck9iamVj
dCk7Ci0KLSAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IG1lZGlhRGVzY3JpcHRpb25zQXJyYXkg
PSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7Ci0KLSAgICBmb3IgKGNvbnN0IGF1dG8mIG1lZGlh
RGVzY3JpcHRpb24gOiBjb25maWd1cmF0aW9uLm1lZGlhRGVzY3JpcHRpb25zKCkpIHsKLSAgICAg
ICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbWVkaWFEZXNjcmlwdGlvbk9iamVjdCA9IEluc3Bl
Y3Rvck9iamVjdDo6Y3JlYXRlKCk7Ci0KLSAgICAgICAgbWVkaWFEZXNjcmlwdGlvbk9iamVjdC0+
c2V0U3RyaW5nKHR5cGVTdHJpbmcoKSwgbWVkaWFEZXNjcmlwdGlvbi50eXBlKTsKLSAgICAgICAg
bWVkaWFEZXNjcmlwdGlvbk9iamVjdC0+c2V0SW50ZWdlcihwb3J0U3RyaW5nKCksIG1lZGlhRGVz
Y3JpcHRpb24ucG9ydCk7Ci0gICAgICAgIG1lZGlhRGVzY3JpcHRpb25PYmplY3QtPnNldFN0cmlu
ZyhhZGRyZXNzU3RyaW5nKCksIG1lZGlhRGVzY3JpcHRpb24uYWRkcmVzcyk7Ci0gICAgICAgIG1l
ZGlhRGVzY3JpcHRpb25PYmplY3QtPnNldFN0cmluZyhtb2RlU3RyaW5nKCksIG1lZGlhRGVzY3Jp
cHRpb24ubW9kZSk7Ci0gICAgICAgIG1lZGlhRGVzY3JpcHRpb25PYmplY3QtPnNldFN0cmluZyht
aWRTdHJpbmcoKSwgbWVkaWFEZXNjcmlwdGlvbi5taWQpOwotCi0gICAgICAgIFJlZlB0cjxJbnNw
ZWN0b3JBcnJheT4gcGF5bG9hZHNBcnJheSA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKLQot
ICAgICAgICBmb3IgKGF1dG8mIHBheWxvYWQgOiBtZWRpYURlc2NyaXB0aW9uLnBheWxvYWRzKSB7
Ci0gICAgICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXlsb2FkT2JqZWN0ID0gSW5z
cGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKLQotICAgICAgICAgICAgcGF5bG9hZE9iamVjdC0+c2V0
SW50ZWdlcih0eXBlU3RyaW5nKCksIHBheWxvYWQudHlwZSk7Ci0gICAgICAgICAgICBwYXlsb2Fk
T2JqZWN0LT5zZXRTdHJpbmcoZW5jb2RpbmdOYW1lU3RyaW5nKCksIHBheWxvYWQuZW5jb2RpbmdO
YW1lKTsKLSAgICAgICAgICAgIHBheWxvYWRPYmplY3QtPnNldEludGVnZXIoY2xvY2tSYXRlU3Ry
aW5nKCksIHBheWxvYWQuY2xvY2tSYXRlKTsKLSAgICAgICAgICAgIHBheWxvYWRPYmplY3QtPnNl
dEludGVnZXIoY2hhbm5lbHNTdHJpbmcoKSwgcGF5bG9hZC5jaGFubmVscyk7Ci0gICAgICAgICAg
ICBwYXlsb2FkT2JqZWN0LT5zZXRCb29sZWFuKGNjbWZpclN0cmluZygpLCBwYXlsb2FkLmNjbWZp
cik7Ci0gICAgICAgICAgICBwYXlsb2FkT2JqZWN0LT5zZXRCb29sZWFuKG5hY2twbGlTdHJpbmco
KSwgcGF5bG9hZC5uYWNrcGxpKTsKLSAgICAgICAgICAgIHBheWxvYWRPYmplY3QtPnNldEJvb2xl
YW4obmFja1N0cmluZygpLCBwYXlsb2FkLm5hY2spOwotCi0gICAgICAgICAgICBpZiAoIXBheWxv
YWQucGFyYW1ldGVycy5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgICAgICBSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiBwYXJhbWV0ZXJzT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsK
LQotICAgICAgICAgICAgICAgIGZvciAoYXV0byYgbmFtZSA6IHBheWxvYWQucGFyYW1ldGVycy5r
ZXlzKCkpCi0gICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlcnNPYmplY3QtPnNldEludGVnZXIo
bmFtZSwgcGF5bG9hZC5wYXJhbWV0ZXJzLmdldChuYW1lKSk7Ci0KLSAgICAgICAgICAgICAgICBw
YXlsb2FkT2JqZWN0LT5zZXRPYmplY3QocGFyYW1ldGVyc1N0cmluZygpLCBwYXJhbWV0ZXJzT2Jq
ZWN0KTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcGF5bG9hZHNBcnJheS0+cHVzaE9i
amVjdChwYXlsb2FkT2JqZWN0KTsKLSAgICAgICAgfQotICAgICAgICBtZWRpYURlc2NyaXB0aW9u
T2JqZWN0LT5zZXRBcnJheShwYXlsb2Fkc1N0cmluZygpLCBwYXlsb2Fkc0FycmF5KTsKLQotICAg
ICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBydGNwT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0
OjpjcmVhdGUoKTsKLSAgICAgICAgcnRjcE9iamVjdC0+c2V0Qm9vbGVhbihtdXhTdHJpbmcoKSwg
bWVkaWFEZXNjcmlwdGlvbi5ydGNwTXV4KTsKLSAgICAgICAgcnRjcE9iamVjdC0+c2V0U3RyaW5n
KGFkZHJlc3NTdHJpbmcoKSwgbWVkaWFEZXNjcmlwdGlvbi5ydGNwQWRkcmVzcyk7Ci0gICAgICAg
IHJ0Y3BPYmplY3QtPnNldEludGVnZXIocG9ydFN0cmluZygpLCBtZWRpYURlc2NyaXB0aW9uLnJ0
Y3BQb3J0KTsKLSAgICAgICAgbWVkaWFEZXNjcmlwdGlvbk9iamVjdC0+c2V0T2JqZWN0KHJ0Y3BT
dHJpbmcoKSwgcnRjcE9iamVjdCk7Ci0KLSAgICAgICAgbWVkaWFEZXNjcmlwdGlvbk9iamVjdC0+
c2V0U3RyaW5nKG1lZGlhU3RyZWFtSWRTdHJpbmcoKSwgbWVkaWFEZXNjcmlwdGlvbi5tZWRpYVN0
cmVhbUlkKTsKLSAgICAgICAgbWVkaWFEZXNjcmlwdGlvbk9iamVjdC0+c2V0U3RyaW5nKG1lZGlh
U3RyZWFtVHJhY2tJZFN0cmluZygpLCBtZWRpYURlc2NyaXB0aW9uLm1lZGlhU3RyZWFtVHJhY2tJ
ZCk7Ci0KLSAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZHRsc09iamVjdCA9IEluc3Bl
Y3Rvck9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgICAgIGR0bHNPYmplY3QtPnNldFN0cmluZyhzZXR1
cFN0cmluZygpLCBtZWRpYURlc2NyaXB0aW9uLmR0bHNTZXR1cCk7Ci0gICAgICAgIGR0bHNPYmpl
Y3QtPnNldFN0cmluZyhmaW5nZXJwcmludEhhc2hGdW5jdGlvblN0cmluZygpLCBtZWRpYURlc2Ny
aXB0aW9uLmR0bHNGaW5nZXJwcmludEhhc2hGdW5jdGlvbik7Ci0gICAgICAgIGR0bHNPYmplY3Qt
PnNldFN0cmluZyhmaW5nZXJwcmludFN0cmluZygpLCBtZWRpYURlc2NyaXB0aW9uLmR0bHNGaW5n
ZXJwcmludCk7Ci0gICAgICAgIG1lZGlhRGVzY3JpcHRpb25PYmplY3QtPnNldE9iamVjdChkdGxz
U3RyaW5nKCksIGR0bHNPYmplY3QpOwotCi0gICAgICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4g
c3NyY3NBcnJheSA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKLQotICAgICAgICBmb3IgKGF1
dG8gc3NyYyA6IG1lZGlhRGVzY3JpcHRpb24uc3NyY3MpCi0gICAgICAgICAgICBzc3Jjc0FycmF5
LT5wdXNoRG91YmxlKHNzcmMpOwotICAgICAgICBtZWRpYURlc2NyaXB0aW9uT2JqZWN0LT5zZXRB
cnJheShzc3Jjc1N0cmluZygpLCBzc3Jjc0FycmF5KTsKLQotICAgICAgICBtZWRpYURlc2NyaXB0
aW9uT2JqZWN0LT5zZXRTdHJpbmcoY25hbWVTdHJpbmcoKSwgbWVkaWFEZXNjcmlwdGlvbi5jbmFt
ZSk7Ci0KLSAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gaWNlT2JqZWN0ID0gSW5zcGVj
dG9yT2JqZWN0OjpjcmVhdGUoKTsKLSAgICAgICAgaWNlT2JqZWN0LT5zZXRTdHJpbmcodWZyYWdT
dHJpbmcoKSwgbWVkaWFEZXNjcmlwdGlvbi5pY2VVZnJhZyk7Ci0gICAgICAgIGljZU9iamVjdC0+
c2V0U3RyaW5nKHBhc3N3b3JkU3RyaW5nKCksIG1lZGlhRGVzY3JpcHRpb24uaWNlUGFzc3dvcmQp
OwotCi0gICAgICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gY2FuZGlkYXRlc0FycmF5ID0gSW5z
cGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwotCi0gICAgICAgIGZvciAoYXV0byYgY2FuZGlkYXRlIDog
bWVkaWFEZXNjcmlwdGlvbi5pY2VDYW5kaWRhdGVzKQotICAgICAgICAgICAgY2FuZGlkYXRlc0Fy
cmF5LT5wdXNoT2JqZWN0KGNyZWF0ZUNhbmRpZGF0ZU9iamVjdChjYW5kaWRhdGUpKTsKLQotICAg
ICAgICBpY2VPYmplY3QtPnNldEFycmF5KGNhbmRpZGF0ZXNTdHJpbmcoKSwgY2FuZGlkYXRlc0Fy
cmF5KTsKLSAgICAgICAgbWVkaWFEZXNjcmlwdGlvbk9iamVjdC0+c2V0T2JqZWN0KGljZVN0cmlu
ZygpLCBpY2VPYmplY3QpOwotCi0gICAgICAgIG1lZGlhRGVzY3JpcHRpb25zQXJyYXktPnB1c2hP
YmplY3QobWVkaWFEZXNjcmlwdGlvbk9iamVjdCk7Ci0gICAgfQotICAgIG9iamVjdC0+c2V0QXJy
YXkobWVkaWFEZXNjcmlwdGlvbnNTdHJpbmcoKSwgbWVkaWFEZXNjcmlwdGlvbnNBcnJheSk7Ci0K
LSAgICByZXR1cm4gb2JqZWN0LT50b0pTT05TdHJpbmcoKTsKLX0KLQotc3RhdGljIFN0cmluZyBp
Y2VDYW5kaWRhdGVUb0pTT04oY29uc3QgSWNlQ2FuZGlkYXRlJiBjYW5kaWRhdGUpCi17Ci0gICAg
cmV0dXJuIGNyZWF0ZUNhbmRpZGF0ZU9iamVjdChjYW5kaWRhdGUpLT50b0pTT05TdHJpbmcoKTsK
LX0KLQotU0RQUHJvY2Vzc29yOjpSZXN1bHQgU0RQUHJvY2Vzc29yOjpnZW5lcmF0ZShjb25zdCBN
ZWRpYUVuZHBvaW50U2Vzc2lvbkNvbmZpZ3VyYXRpb24mIGNvbmZpZ3VyYXRpb24sIFN0cmluZyYg
b3V0U2RwU3RyaW5nKSBjb25zdAotewotICAgIFN0cmluZyBzZHBTdHJpbmc7Ci0gICAgaWYgKCFj
YWxsU2NyaXB0KCJnZW5lcmF0ZSIsIGNvbmZpZ3VyYXRpb25Ub0pTT04oY29uZmlndXJhdGlvbiks
IHNkcFN0cmluZykpCi0gICAgICAgIHJldHVybiBSZXN1bHQ6OkludGVybmFsRXJyb3I7Ci0KLSAg
ICBvdXRTZHBTdHJpbmcgPSBzZHBTdHJpbmc7Ci0gICAgcmV0dXJuIFJlc3VsdDo6U3VjY2VzczsK
LX0KLQotU0RQUHJvY2Vzc29yOjpSZXN1bHQgU0RQUHJvY2Vzc29yOjpwYXJzZShjb25zdCBTdHJp
bmcmIHNkcCwgUmVmUHRyPE1lZGlhRW5kcG9pbnRTZXNzaW9uQ29uZmlndXJhdGlvbj4mIG91dENv
bmZpZ3VyYXRpb24pIGNvbnN0Ci17Ci0gICAgU3RyaW5nIHNjcmlwdE91dHB1dDsKLSAgICBpZiAo
IWNhbGxTY3JpcHQoInBhcnNlIiwgc2RwLCBzY3JpcHRPdXRwdXQpKQotICAgICAgICByZXR1cm4g
UmVzdWx0OjpJbnRlcm5hbEVycm9yOwotCi0gICAgaWYgKHNjcmlwdE91dHB1dCA9PSAiUGFyc2VF
cnJvciIpCi0gICAgICAgIHJldHVybiBSZXN1bHQ6OlBhcnNlRXJyb3I7Ci0KLSAgICBSZWZQdHI8
TWVkaWFFbmRwb2ludFNlc3Npb25Db25maWd1cmF0aW9uPiBjb25maWd1cmF0aW9uID0gY29uZmln
dXJhdGlvbkZyb21KU09OKHNjcmlwdE91dHB1dCk7Ci0gICAgaWYgKCFjb25maWd1cmF0aW9uKQot
ICAgICAgICByZXR1cm4gUmVzdWx0OjpJbnRlcm5hbEVycm9yOwotCi0gICAgb3V0Q29uZmlndXJh
dGlvbiA9IGNvbmZpZ3VyYXRpb247Ci0gICAgcmV0dXJuIFJlc3VsdDo6U3VjY2VzczsKLX0KLQot
U0RQUHJvY2Vzc29yOjpSZXN1bHQgU0RQUHJvY2Vzc29yOjpnZW5lcmF0ZUNhbmRpZGF0ZUxpbmUo
Y29uc3QgSWNlQ2FuZGlkYXRlJiBjYW5kaWRhdGUsIFN0cmluZyYgb3V0Q2FuZGlkYXRlTGluZSkg
Y29uc3QKLXsKLSAgICBTdHJpbmcgY2FuZGlkYXRlTGluZTsKLSAgICBpZiAoIWNhbGxTY3JpcHQo
ImdlbmVyYXRlQ2FuZGlkYXRlTGluZSIsIGljZUNhbmRpZGF0ZVRvSlNPTihjYW5kaWRhdGUpLCBj
YW5kaWRhdGVMaW5lKSkKLSAgICAgICAgcmV0dXJuIFJlc3VsdDo6SW50ZXJuYWxFcnJvcjsKLQot
ICAgIG91dENhbmRpZGF0ZUxpbmUgPSBjYW5kaWRhdGVMaW5lOwotICAgIHJldHVybiBSZXN1bHQ6
OlN1Y2Nlc3M7Ci19Ci0KLVNEUFByb2Nlc3Nvcjo6UGFyc2luZ1Jlc3VsdCBTRFBQcm9jZXNzb3I6
OnBhcnNlQ2FuZGlkYXRlTGluZShjb25zdCBTdHJpbmcmIGNhbmRpZGF0ZUxpbmUpIGNvbnN0Ci17
Ci0gICAgU3RyaW5nIHNjcmlwdE91dHB1dDsKLSAgICBpZiAoIWNhbGxTY3JpcHQoInBhcnNlQ2Fu
ZGlkYXRlTGluZSIsIGNhbmRpZGF0ZUxpbmUsIHNjcmlwdE91dHB1dCkpCi0gICAgICAgIHJldHVy
biB7IFJlc3VsdDo6SW50ZXJuYWxFcnJvciB9OwotCi0gICAgaWYgKHNjcmlwdE91dHB1dCA9PSAi
UGFyc2VFcnJvciIpCi0gICAgICAgIHJldHVybiB7IFJlc3VsdDo6UGFyc2VFcnJvciB9OwotCi0g
ICAgYXV0byBjYW5kaWRhdGUgPSBpY2VDYW5kaWRhdGVGcm9tSlNPTihzY3JpcHRPdXRwdXQpOwot
ICAgIGlmICghY2FuZGlkYXRlKQotICAgICAgICByZXR1cm4geyBSZXN1bHQ6OkludGVybmFsRXJy
b3IgfTsKLSAgICByZXR1cm4geyBXVEZNb3ZlKGNhbmRpZGF0ZS52YWx1ZSgpKSB9OwotfQotCi1i
b29sIFNEUFByb2Nlc3Nvcjo6Y2FsbFNjcmlwdChjb25zdCBTdHJpbmcmIGZ1bmN0aW9uTmFtZSwg
Y29uc3QgU3RyaW5nJiBhcmd1bWVudCwgU3RyaW5nJiBvdXRSZXN1bHQpIGNvbnN0Ci17Ci0gICAg
aWYgKCFzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50PihzY3JpcHRFeGVjdXRp
b25Db250ZXh0KCkpOwotICAgIGlmICghZG9jdW1lbnQtPmZyYW1lKCkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIGlmICghbV9pc29sYXRlZFdvcmxkKQotICAgICAgICBtX2lzb2xhdGVk
V29ybGQgPSBET01XcmFwcGVyV29ybGQ6OmNyZWF0ZShjb21tb25WTSgpKTsKLQotICAgIFNjcmlw
dENvbnRyb2xsZXImIHNjcmlwdENvbnRyb2xsZXIgPSBkb2N1bWVudC0+ZnJhbWUoKS0+c2NyaXB0
KCk7Ci0gICAgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IEpTQzo6anNDYXN0PEpT
RE9NR2xvYmFsT2JqZWN0Kj4oc2NyaXB0Q29udHJvbGxlci5nbG9iYWxPYmplY3QoKm1faXNvbGF0
ZWRXb3JsZCkpOwotICAgIEpTQzo6Vk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwotICAgIEpT
Qzo6SlNMb2NrSG9sZGVyIGxvY2sodm0pOwotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENI
X1NDT1BFKHZtKTsKLSAgICBKU0M6OkV4ZWNTdGF0ZSogZXhlYyA9IGdsb2JhbE9iamVjdC0+Z2xv
YmFsRXhlYygpOwotCi0gICAgSlNDOjpKU1ZhbHVlIHByb2JlRnVuY3Rpb25WYWx1ZSA9IGdsb2Jh
bE9iamVjdC0+Z2V0KGV4ZWMsIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCAiZ2Vu
ZXJhdGUiKSk7Ci0gICAgaWYgKCFwcm9iZUZ1bmN0aW9uVmFsdWUuaXNGdW5jdGlvbigpKSB7Ci0g
ICAgICAgIFVSTCBzY3JpcHRVUkw7Ci0gICAgICAgIHNjcmlwdENvbnRyb2xsZXIuZXZhbHVhdGVJ
bldvcmxkKFNjcmlwdFNvdXJjZUNvZGUoU0RQUHJvY2Vzc29yU2NyaXB0UmVzb3VyY2U6OnNjcmlw
dFN0cmluZygpLCBzY3JpcHRVUkwpLCAqbV9pc29sYXRlZFdvcmxkKTsKLSAgICAgICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkgewotICAgICAgICAgICAgc2NvcGUuY2xlYXJFeGNl
cHRpb24oKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQot
ICAgIEpTQzo6SlNWYWx1ZSBmdW5jdGlvblZhbHVlID0gZ2xvYmFsT2JqZWN0LT5nZXQoZXhlYywg
SlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsIGZ1bmN0aW9uTmFtZSkpOwotICAgIGlm
ICghZnVuY3Rpb25WYWx1ZS5pc0Z1bmN0aW9uKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgIEpTQzo6SlNPYmplY3QqIGZ1bmN0aW9uID0gZnVuY3Rpb25WYWx1ZS50b09iamVjdChleGVj
KTsKLSAgICBKU0M6OkNhbGxEYXRhIGNhbGxEYXRhOwotICAgIEpTQzo6Q2FsbFR5cGUgY2FsbFR5
cGUgPSBmdW5jdGlvbi0+bWV0aG9kVGFibGUodm0pLT5nZXRDYWxsRGF0YShmdW5jdGlvbiwgY2Fs
bERhdGEpOwotICAgIGlmIChjYWxsVHlwZSA9PSBKU0M6OkNhbGxUeXBlOjpOb25lKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICBKU0M6Ok1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ0xpc3Q7
Ci0gICAgYXJnTGlzdC5hcHBlbmQoSlNDOjpqc1N0cmluZyhleGVjLCBhcmd1bWVudCkpOwotCi0g
ICAgSlNDOjpKU1ZhbHVlIHJlc3VsdCA9IEpTQzo6Y2FsbChleGVjLCBmdW5jdGlvbiwgY2FsbFR5
cGUsIGNhbGxEYXRhLCBnbG9iYWxPYmplY3QsIGFyZ0xpc3QpOwotICAgIGlmIChVTkxJS0VMWShz
Y29wZS5leGNlcHRpb24oKSkpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJTRFBQcm9jZXNzb3Igc2Ny
aXB0IHRocmV3IGluIGZ1bmN0aW9uICVzIiwgZnVuY3Rpb25OYW1lLmFzY2lpKCkuZGF0YSgpKTsK
LSAgICAgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLQotICAgIGlmICghcmVzdWx0LmlzU3RyaW5nKCkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIG91dFJlc3VsdCA9IGFzU3RyaW5nKHJlc3VsdCktPnZhbHVlKGV4ZWMpOwotICAg
IHJldHVybiB0cnVlOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBF
TkFCTEUoV0VCX1JUQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFz
dHJlYW0vU0RQUHJvY2Vzc29yLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFt
L1NEUFByb2Nlc3Nvci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYTYxYzlhOTJl
NDdjZTNlOTAxZWMzNjMxYTY4Zjc3YjEyYzkwMmM0Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0v
U0RQUHJvY2Vzc29yLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3OCArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDE1IEVyaWNzc29uIEFCLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiAgICBpbiB0aGUgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiAgICBk
aXN0cmlidXRpb24uCi0gKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIEVyaWNzc29uIG5vciB0aGUg
bmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0gKiAgICBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
Ci0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICog
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFn
bWEgb25jZQotCi0jaWYgRU5BQkxFKFdFQl9SVEMpCi0KLSNpbmNsdWRlICJDb250ZXh0RGVzdHJ1
Y3Rpb25PYnNlcnZlci5oIgotI2luY2x1ZGUgIkljZUNhbmRpZGF0ZS5oIgotI2luY2x1ZGUgIk1l
ZGlhRW5kcG9pbnRTZXNzaW9uQ29uZmlndXJhdGlvbi5oIgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIu
aD4KLSNpbmNsdWRlIDx3dGYvVmFyaWFudC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmlu
Zy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIERPTVdyYXBwZXJXb3JsZDsKLWNs
YXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7Ci0KLWNsYXNzIFNEUFByb2Nlc3NvciA6IHB1Ymxp
YyBDb250ZXh0RGVzdHJ1Y3Rpb25PYnNlcnZlciB7Ci1wdWJsaWM6Ci0gICAgZW51bSBjbGFzcyBS
ZXN1bHQgewotICAgICAgICBTdWNjZXNzID0gMSwKLSAgICAgICAgSW50ZXJuYWxFcnJvciA9IDIs
Ci0gICAgICAgIFBhcnNlRXJyb3IgPSAzCi0gICAgfTsKLQotICAgIFNEUFByb2Nlc3NvcihTY3Jp
cHRFeGVjdXRpb25Db250ZXh0Kik7Ci0KLSAgICBSZXN1bHQgZ2VuZXJhdGUoY29uc3QgTWVkaWFF
bmRwb2ludFNlc3Npb25Db25maWd1cmF0aW9uJiwgU3RyaW5nJiBvdXRTZHBTdHJpbmcpIGNvbnN0
OwotICAgIFJlc3VsdCBwYXJzZShjb25zdCBTdHJpbmcmIHNkcCwgUmVmUHRyPE1lZGlhRW5kcG9p
bnRTZXNzaW9uQ29uZmlndXJhdGlvbj4mKSBjb25zdDsKLQotICAgIFJlc3VsdCBnZW5lcmF0ZUNh
bmRpZGF0ZUxpbmUoY29uc3QgSWNlQ2FuZGlkYXRlJiwgU3RyaW5nJiBvdXRDYW5kaWRhdGVMaW5l
KSBjb25zdDsKLQotICAgIHN0cnVjdCBQYXJzaW5nUmVzdWx0IHsKLSAgICAgICAgVmFyaWFudDxJ
Y2VDYW5kaWRhdGUsIFJlc3VsdD4gcmVzdWx0OwotCi0gICAgICAgIFJlc3VsdCBwYXJzaW5nU3Rh
dHVzKCkgY29uc3QgeyByZXR1cm4gV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxJY2VDYW5kaWRhdGU+
KHJlc3VsdCkgPyBSZXN1bHQ6OlN1Y2Nlc3MgOiBXVEY6OmdldDxTRFBQcm9jZXNzb3I6OlJlc3Vs
dD4ocmVzdWx0KTsgfQotICAgICAgICBJY2VDYW5kaWRhdGUmIGNhbmRpZGF0ZSgpIHsgcmV0dXJu
IFdURjo6Z2V0PEljZUNhbmRpZGF0ZT4ocmVzdWx0KTsgfQotICAgIH07Ci0gICAgUGFyc2luZ1Jl
c3VsdCBwYXJzZUNhbmRpZGF0ZUxpbmUoY29uc3QgU3RyaW5nJiBjYW5kaWRhdGVMaW5lKSBjb25z
dDsKLQotcHJpdmF0ZToKLSAgICBib29sIGNhbGxTY3JpcHQoY29uc3QgU3RyaW5nJiBmdW5jdGlv
bk5hbWUsIGNvbnN0IFN0cmluZyYgYXJndW1lbnQsIFN0cmluZyYgb3V0UmVzdWx0KSBjb25zdDsK
LQotICAgIG11dGFibGUgUmVmUHRyPERPTVdyYXBwZXJXb3JsZD4gbV9pc29sYXRlZFdvcmxkOwot
fTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKFdFQl9SVEMp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2xpYndlYnJ0
Yy9MaWJXZWJSVENNZWRpYUVuZHBvaW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVk
aWFzdHJlYW0vbGlid2VicnRjL0xpYldlYlJUQ01lZGlhRW5kcG9pbnQuY3BwCmluZGV4IDZlYjRh
NzQwNGMyZGI2MmZiYzc1ZDVmNjMwYjBjYTgxZGMzMGNmZDcuLjIzODUxZjk2N2QxYmQ4NzZmZmQx
ZjM5OTNjNTZlZWM3ZmM0ZTZhOGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
bWVkaWFzdHJlYW0vbGlid2VicnRjL0xpYldlYlJUQ01lZGlhRW5kcG9pbnQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vbGlid2VicnRjL0xpYldlYlJUQ01lZGlh
RW5kcG9pbnQuY3BwCkBAIC04MCw3ICs4MCw2IEBAIGJvb2wgTGliV2ViUlRDTWVkaWFFbmRwb2lu
dDo6c2V0Q29uZmlndXJhdGlvbihMaWJXZWJSVENQcm92aWRlciYgY2xpZW50LCB3ZWJydGM6CiAg
ICAgcmV0dXJuIG1fYmFja2VuZC0+U2V0Q29uZmlndXJhdGlvbihXVEZNb3ZlKGNvbmZpZ3VyYXRp
b24pKTsKIH0KIAotLy8gRklYTUU6IHVuaWZ5IHdpdGggTWVkaWFFbmRwb2ludFNlc3Npb25EZXNj
cmlwdGlvbjo6dHlwZVN0cmluZygpCiBzdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIqIHNlc3Npb25E
ZXNjcmlwdGlvblR5cGUoUlRDU2RwVHlwZSBzZHBUeXBlKQogewogICAgIHN3aXRjaCAoc2RwVHlw
ZSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCmluZGV4IGIwZTc1NDk3MGIwNDBiM2M1NTBiMDcxNzA1MDk2MWJkZGQ4NzZmMjUuLjM2YzI1
Mzc1Zjg1OWFkM2JkZGM3M2U1YzQ3OTk0Y2Q0MDZhZjkzN2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTE3OTMsNiArMTc5Myw4
IEBACiAJCTQxQUJFNjdCMUQwNTgwREIwMDZEODYyRCAvKiBDcm9zc09yaWdpblByZWZsaWdodENo
ZWNrZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQx
QUJFNjdBMUQwNTgwRDUwMDZEODYyRCAvKiBDcm9zc09yaWdpblByZWZsaWdodENoZWNrZXIuaCAq
LzsgfTsKIAkJNDFBQkU2N0MxRDA1ODBFMDAwNkQ4NjJEIC8qIENyb3NzT3JpZ2luUHJlZmxpZ2h0
Q2hlY2tlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA0MUFCRTY3OTFEMDU4MEQ1MDA2RDg2MkQgLyogQ3Jvc3NPcmlnaW5QcmVmbGlnaHRDaGVja2Vy
LmNwcCAqLzsgfTsKIAkJNDFBRDc1M0ExQ0VGNkJEMTAwQTMxNDg2IC8qIEZldGNoT3B0aW9ucy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDFBRDc1Mzkx
Q0VGNkJDRTAwQTMxNDg2IC8qIEZldGNoT3B0aW9ucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTQxQjI4QjE0MUY4NTAxQTYwMEZCNTJBQyAvKiBN
ZWRpYUVuZHBvaW50Q29uZmlndXJhdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA0MUIyOEIxMzFGODUwMUE0MDBGQjUyQUMgLyogTWVkaWFFbmRw
b2ludENvbmZpZ3VyYXRpb24uY3BwICovOyB9OworCQk0MUIyOEIxNTFGODUwMUQzMDBGQjUyQUMg
LyogTWVkaWFFbmRwb2ludENvbmZpZ3VyYXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxQjI4QjEyMUY4NTAxQTMwMEZCNTJBQyAvKiBNZWRpYUVu
ZHBvaW50Q29uZmlndXJhdGlvbi5oICovOyB9OwogCQk0MUIyQTYyNjFFRjFCRjZEMDAyQjlEN0Eg
LyogV2ViQXVkaW9Tb3VyY2VQcm92aWRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNDFCMkE2MjUxRUYxQkY2MDAwMkI5RDdBIC8qIFdlYkF1ZGlvU291
cmNlUHJvdmlkZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQk0MUI0NTlFRjFGNTVFQkQxMDAwMEY2RkQgLyogUmVhZGFibGVTdHJlYW0uY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDFCNDU5RUQxRjU1
RUJDNzAwMDBGNkZEIC8qIFJlYWRhYmxlU3RyZWFtLmNwcCAqLzsgfTsKIAkJNDFCRjcwMEMwRkU4
NkY0OTAwNUU4REVDIC8qIE1lc3NhZ2VQb3J0Q2hhbm5lbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDFCRjcwMEEwRkU4NkY0OTAwNUU4REVDIC8qIE1l
c3NhZ2VQb3J0Q2hhbm5lbC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CkBAIC0yNzc5LDggKzI3ODEsNiBAQAogCQk1REZFOEY1NjBEMTY0NzdCMDA3NkU5
MzcgLyogU2NoZWR1bGVkQWN0aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEJDQTM3OEJBMEQxNUY2NDIwMEI3OTNENiAvKiBTY2hlZHVsZWRBY3Rp
b24uY3BwICovOyB9OwogCQk1REZFOEY1NzBEMTY0NzdDMDA3NkU5MzcgLyogU2NoZWR1bGVkQWN0
aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0Ez
NzhCQjBEMTVGNjQyMDBCNzkzRDYgLyogU2NoZWR1bGVkQWN0aW9uLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNURGRUJBQjcxODU5MkI2RDAwQzc1
QkVCIC8qIFdlYktpdEF2YWlsYWJpbGl0eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNURGRUJBQjYxODU5MkI2RDAwQzc1QkVCIC8qIFdlYktpdEF2YWls
YWJpbGl0eS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
Ci0JCTVFMTZBMkU0MUJGQTY1MEIwMDI5QTIxRSAvKiBNZWRpYUVuZHBvaW50UGVlckNvbm5lY3Rp
b24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVFMTZB
MkUzMUJGQTY0RkIwMDI5QTIxRSAvKiBNZWRpYUVuZHBvaW50UGVlckNvbm5lY3Rpb24uaCAqLzsg
fTsKLQkJNUUxNkEyRTUxQkZBNjUwRjAwMjlBMjFFIC8qIE1lZGlhRW5kcG9pbnRQZWVyQ29ubmVj
dGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
RTE2QTJFMjFCRkE2NEZCMDAyOUEyMUUgLyogTWVkaWFFbmRwb2ludFBlZXJDb25uZWN0aW9uLmNw
cCAqLzsgfTsKIAkJNUUyQzQzNTExQkNFRTJGNjAwMDFFMkJDIC8qIFBlZXJDb25uZWN0aW9uQmFj
a2VuZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUUy
QzQzNEQxQkNFRTJFNTAwMDFFMkJDIC8qIFBlZXJDb25uZWN0aW9uQmFja2VuZC5oICovOyB9Owog
CQk1RTJDNDM1RjFCQ0VFMzFFMDAwMUUyQkMgLyogUlRDUnRwU2VuZGVyUmVjZWl2ZXJCYXNlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1RTJDNDM1RDFC
Q0VFMzBEMDAwMUUyQkMgLyogUlRDUnRwU2VuZGVyUmVjZWl2ZXJCYXNlLmggKi87IH07CiAJCTVF
MkM0MzYwMUJDRUUzMjMwMDAxRTJCQyAvKiBSVENSdHBTZW5kZXIuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUUyQzQzNTkxQkNFRTMwRDAwMDFFMkJD
IC8qIFJUQ1J0cFNlbmRlci5jcHAgKi87IH07CkBAIC0yODAxLDI3ICsyODAxLDE0IEBACiAJCTVF
MkM0Mzc0MUJDRjBENzUwMDAxRTJCRSAvKiBKU1JUQ1J0cFBhcmFtZXRlcnMuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVFMkM0MzcwMUJDRjBENjkwMDAx
RTJCRSAvKiBKU1JUQ1J0cFBhcmFtZXRlcnMuaCAqLzsgfTsKIAkJNUUyQzQzN0IxQkNGOUE1NzAw
MDFFMkJDIC8qIFJUQ1BlZXJDb25uZWN0aW9uQnVpbHRpbnMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVFMkM0Mzc2MUJDRjlBMEIwMDAxRTJCQyAvKiBS
VENQZWVyQ29ubmVjdGlvbkJ1aWx0aW5zLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJNUUyQzQzN0MxQkNGOUE4NDAwMDFFMkJDIC8qIFJUQ1BlZXJD
b25uZWN0aW9uSW50ZXJuYWxzQnVpbHRpbnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDVFMkM0Mzc5MUJDRjlBMEIwMDAxRTJCQyAvKiBSVENQZWVyQ29u
bmVjdGlvbkludGVybmFsc0J1aWx0aW5zLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKLQkJNUU0RUFCMDQxRDA3MTY2QTAwMDZBMTg0IC8qIE1lZGlhRW5k
cG9pbnRTZXNzaW9uRGVzY3JpcHRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDVFNEVBQjAzMUQwNzE2NEMwMDA2QTE4NCAvKiBNZWRpYUVuZHBvaW50
U2Vzc2lvbkRlc2NyaXB0aW9uLmggKi87IH07Ci0JCTVFNEVBQjA1MUQwNzE2NkUwMDA2QTE4NCAv
KiBNZWRpYUVuZHBvaW50U2Vzc2lvbkRlc2NyaXB0aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVFNEVBQjAyMUQwNzE2NEMwMDA2QTE4NCAvKiBN
ZWRpYUVuZHBvaW50U2Vzc2lvbkRlc2NyaXB0aW9uLmNwcCAqLzsgfTsKIAkJNUU1RTJCMTMxQ0ZD
M0U3MDAwMEMwRDg1IC8qIFJUQ1J0cFRyYW5zY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVFNUUyQjEwMUNGQzNFNEIwMDBDMEQ4NSAvKiBS
VENSdHBUcmFuc2NlaXZlci5jcHAgKi87IH07CiAJCTVFNUUyQjE0MUNGQzNFNzUwMDBDMEQ4NSAv
KiBSVENSdHBUcmFuc2NlaXZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNUU1RTJCMTExQ0ZDM0U0QjAwMEMwRDg1IC8qIFJUQ1J0cFRyYW5zY2VpdmVy
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJNUVB
M0Q2REYxQzg1OUQ3RjAwMzAwQkJCIC8qIE1vY2tNZWRpYUVuZHBvaW50LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1RUEzRDZERTFDODU5RDUzMDAzMDBC
QkIgLyogTW9ja01lZGlhRW5kcG9pbnQuaCAqLzsgfTsKLQkJNUVBM0Q2RTAxQzg1OUQ4NDAwMzAw
QkJCIC8qIE1vY2tNZWRpYUVuZHBvaW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDVFQTNENkREMUM4NTlENTMwMDMwMEJCQiAvKiBNb2NrTWVkaWFF
bmRwb2ludC5jcHAgKi87IH07Ci0JCTVFQTNENkUzMUM4NTlEQzEwMDMwMEJCQiAvKiBTRFBQcm9j
ZXNzb3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NUVBM0Q2RTExQzg1OURBQTAwMzAwQkJCIC8qIFNEUFByb2Nlc3Nvci5jcHAgKi87IH07Ci0JCTVF
QTNENkU0MUM4NTlEQzEwMDMwMEJCQiAvKiBTRFBQcm9jZXNzb3IuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVFQTNENkUyMUM4NTlEQUEwMDMwMEJCQiAv
KiBTRFBQcm9jZXNzb3IuaCAqLzsgfTsKLQkJNUVBM0Q2RTcxQzg1QTlEQjAwMzAwQkJCIC8qIFNE
UFByb2Nlc3NvclNjcmlwdFJlc291cmNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDVFQTNENkU1MUM4NUE5QzMwMDMwMEJCQiAvKiBTRFBQcm9jZXNz
b3JTY3JpcHRSZXNvdXJjZS5jcHAgKi87IH07Ci0JCTVFQTNENkU4MUM4NUE5REIwMDMwMEJCQiAv
KiBTRFBQcm9jZXNzb3JTY3JpcHRSZXNvdXJjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNUVBM0Q2RTYxQzg1QTlDMzAwMzAwQkJCIC8qIFNEUFByb2Nl
c3NvclNjcmlwdFJlc291cmNlLmggKi87IH07CiAJCTVFQTcyNUQyMUFDQUJENDcwMEVBRDE3QiAv
KiBNZWRpYURldmljZXMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNUVBNzI1Q0QxQUNBQkNEOTAwRUFEMTdCIC8qIE1lZGlhRGV2aWNlcy5jcHAgKi87
IH07CiAJCTVFQTcyNUQzMUFDQUJENDcwMEVBRDE3QiAvKiBNZWRpYURldmljZXMuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVFQTcyNUNFMUFDQUJDRDkw
MEVBRDE3QiAvKiBNZWRpYURldmljZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQk1RUE3MjVENTFBQ0FCRDU3MDBFQUQxN0IgLyogTmF2aWdhdG9y
TWVkaWFEZXZpY2VzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDVFQTcyNUNBMUFDQUJDQjUwMEVBRDE3QiAvKiBOYXZpZ2F0b3JNZWRpYURldmljZXMu
Y3BwICovOyB9OwogCQk1RUE3MjVENjFBQ0FCRDU3MDBFQUQxN0IgLyogTmF2aWdhdG9yTWVkaWFE
ZXZpY2VzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
RUE3MjVDQjFBQ0FCQ0I1MDBFQUQxN0IgLyogTmF2aWdhdG9yTWVkaWFEZXZpY2VzLmggKi87IH07
CiAJCTVFQkI4OTMxMUM3Nzc3RkYwMEM2NUQ0MSAvKiBNZWRpYVBheWxvYWQuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVFQkI4OTJGMUM3Nzc3RDAwMEM2
NUQ0MSAvKiBNZWRpYVBheWxvYWQuaCAqLzsgfTsKLQkJNUVCQjg5MzIxQzc3NzgyMzAwQzY1RDQx
IC8qIE1lZGlhRW5kcG9pbnRTZXNzaW9uQ29uZmlndXJhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUVCQjg5MkUxQzc3NzdEMDAwQzY1RDQxIC8q
IE1lZGlhRW5kcG9pbnRTZXNzaW9uQ29uZmlndXJhdGlvbi5oICovOyB9OwogCQk1RUJCODkzMzFD
Nzc3ODI5MDBDNjVENDEgLyogSWNlQ2FuZGlkYXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1RUJCODkzMDFDNzc3N0UxMDBDNjVENDEgLyogSWNlQ2Fu
ZGlkYXRlLmggKi87IH07Ci0JCTVFQkI4OTM0MUM3Nzc4MjkwMEM2NUQ0MSAvKiBNZWRpYUVuZHBv
aW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVF
QkI4OTJBMUM3Nzc3RDAwMEM2NUQ0MSAvKiBNZWRpYUVuZHBvaW50LmNwcCAqLzsgfTsKLQkJNUVC
Qjg5MzUxQzc3NzgyOTAwQzY1RDQxIC8qIE1lZGlhRW5kcG9pbnQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVFQkI4OTJCMUM3Nzc3RDAwMEM2NUQ0MSAv
KiBNZWRpYUVuZHBvaW50LmggKi87IH07Ci0JCTVFQkI4OTM2MUM3Nzc4MjkwMEM2NUQ0MSAvKiBN
ZWRpYUVuZHBvaW50Q29uZmlndXJhdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1RUJCODkyQzFDNzc3N0QwMDBDNjVENDEgLyogTWVkaWFFbmRw
b2ludENvbmZpZ3VyYXRpb24uY3BwICovOyB9OwotCQk1RUJCODkzNzFDNzc3ODI5MDBDNjVENDEg
LyogTWVkaWFFbmRwb2ludENvbmZpZ3VyYXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVFQkI4OTJEMUM3Nzc3RDAwMEM2NUQ0MSAvKiBNZWRpYUVu
ZHBvaW50Q29uZmlndXJhdGlvbi5oICovOyB9OwogCQk1RUJCODkzOTFDNzdDMzk5MDBDNjVENDEg
LyogUGVlck1lZGlhRGVzY3JpcHRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDVFQkI4OTM4MUM3N0JEQTQwMEM2NUQ0MSAvKiBQZWVyTWVkaWFEZXNj
cmlwdGlvbi5oICovOyB9OwogCQk1RjJEQkJFOTE3OEUzQzgxMDAxNDE0ODYgLyogQ2VydGlmaWNh
dGVJbmZvTWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNUYyREJCRTcxNzhFMzMyRDAwMTQxNDg2IC8qIENlcnRpZmljYXRlSW5mb01hYy5tbSAqLzsg
fTsKIAkJNUZBOTA0Q0ExNzhFNjFGNTAwNEM4QTJEIC8qIENlcnRpZmljYXRlSW5mby5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUYyREJCRTgxNzhFMzM2
OTAwMTQxNDg2IC8qIENlcnRpZmljYXRlSW5mby5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CkBAIC05NjA2LDYgKzk1OTMsOCBAQAogCQk0MUFCRTY3OTFE
MDU4MEQ1MDA2RDg2MkQgLyogQ3Jvc3NPcmlnaW5QcmVmbGlnaHRDaGVja2VyLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENyb3NzT3JpZ2luUHJlZmxpZ2h0Q2hlY2tl
ci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxQUJFNjdBMUQwNTgwRDUwMDZE
ODYyRCAvKiBDcm9zc09yaWdpblByZWZsaWdodENoZWNrZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gQ3Jvc3NPcmlnaW5QcmVmbGlnaHRDaGVja2VyLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTQxQUQ3NTM5MUNFRjZCQ0UwMEEzMTQ4NiAvKiBGZXRjaE9wdGlv
bnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRmV0Y2hPcHRpb25zLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQxQjI4QjEyMUY4NTAxQTMwMEZCNTJBQyAvKiBN
ZWRpYUVuZHBvaW50Q29uZmlndXJhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBNZWRpYUVuZHBvaW50Q29uZmlndXJhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk0MUIyOEIxMzFGODUwMUE0MDBGQjUyQUMgLyogTWVkaWFFbmRwb2ludENvbmZpZ3Vy
YXRpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWVkaWFFbmRw
b2ludENvbmZpZ3VyYXRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MUIy
QTYyNTFFRjFCRjYwMDAyQjlEN0EgLyogV2ViQXVkaW9Tb3VyY2VQcm92aWRlci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBXZWJBdWRpb1NvdXJjZVByb3ZpZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTQxQjQ1OURBMUY0Q0FEQjkwMDAwRjZGRCAvKiBSZWFkYWJsZVN0cmVhbS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZWFkYWJsZVN0cmVhbS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk0MUI0NTlFRDFGNTVFQkM3MDAwMEY2RkQgLyogUmVhZGFibGVT
dHJlYW0uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVhZGFibGVT
dHJlYW0uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTA3MzQsOCArMTA3MjMs
NiBAQAogCQk1REIxQkM2ODEwNzE1QTY0MDBFRkFBNDkgLyogVHJhbnNmb3JtU291cmNlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRyYW5zZm9ybVNvdXJjZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk1REIxQkM2OTEwNzE1QTY0MDBFRkFBNDkgLyogVHJhbnNm
b3JtU291cmNlTGlieHNsdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBUcmFuc2Zvcm1Tb3VyY2VMaWJ4c2x0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNURGRUJBQjYxODU5MkI2RDAwQzc1QkVCIC8qIFdlYktpdEF2YWlsYWJpbGl0eS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJLaXRBdmFpbGFiaWxpdHkuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNUUxNkEyRTIxQkZBNjRGQjAwMjlBMjFFIC8qIE1lZGlh
RW5kcG9pbnRQZWVyQ29ubmVjdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBNZWRpYUVuZHBvaW50UGVlckNvbm5lY3Rpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQk1RTE2QTJFMzFCRkE2NEZCMDAyOUEyMUUgLyogTWVkaWFFbmRwb2ludFBl
ZXJDb25uZWN0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1lZGlhRW5k
cG9pbnRQZWVyQ29ubmVjdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1RTJD
NDM0RDFCQ0VFMkU1MDAwMUUyQkMgLyogUGVlckNvbm5lY3Rpb25CYWNrZW5kLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBlZXJDb25uZWN0aW9uQmFja2VuZC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk1RTJDNDM1NDFCQ0VFMzBEMDAwMUUyQkMgLyogUlRDUGVl
ckNvbm5lY3Rpb24uanMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmphdmFzY3JpcHQ7IHBhdGggPSBS
VENQZWVyQ29ubmVjdGlvbi5qczsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUUyQzQz
NTUxQkNFRTMwRDAwMDFFMkJDIC8qIFJUQ1BlZXJDb25uZWN0aW9uSW50ZXJuYWxzLmpzICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5qYXZhc2NyaXB0OyBwYXRoID0gUlRDUGVlckNvbm5lY3Rpb25JbnRl
cm5hbHMuanM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMDc2MywyOSArMTA3NTAs
MTYgQEAKIAkJNUUyQzQzNzYxQkNGOUEwQjAwMDFFMkJDIC8qIFJUQ1BlZXJDb25uZWN0aW9uQnVp
bHRpbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUlRDUGVlckNvbm5lY3Rp
b25CdWlsdGlucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1RTJDNDM3ODFCQ0Y5
QTBCMDAwMUUyQkMgLyogUlRDUGVlckNvbm5lY3Rpb25JbnRlcm5hbHNCdWlsdGlucy5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSVENQZWVyQ29ubmVjdGlvbkludGVy
bmFsc0J1aWx0aW5zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUUyQzQzNzkx
QkNGOUEwQjAwMDFFMkJDIC8qIFJUQ1BlZXJDb25uZWN0aW9uSW50ZXJuYWxzQnVpbHRpbnMuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUlRDUGVlckNvbm5lY3Rpb25JbnRlcm5h
bHNCdWlsdGlucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1RTRFQUIwMjFEMDcx
NjRDMDAwNkExODQgLyogTWVkaWFFbmRwb2ludFNlc3Npb25EZXNjcmlwdGlvbi5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNZWRpYUVuZHBvaW50U2Vzc2lvbkRlc2Ny
aXB0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNUU0RUFCMDMxRDA3MTY0
QzAwMDZBMTg0IC8qIE1lZGlhRW5kcG9pbnRTZXNzaW9uRGVzY3JpcHRpb24uaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWVkaWFFbmRwb2ludFNlc3Npb25EZXNjcmlwdGlvbi5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1RTVFMkIxMDFDRkMzRTRCMDAwQzBEODUg
LyogUlRDUnRwVHJhbnNjZWl2ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gUlRDUnRwVHJhbnNjZWl2ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk1RTVFMkIxMTFDRkMzRTRCMDAwQzBEODUgLyogUlRDUnRwVHJhbnNjZWl2ZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUlRDUnRwVHJhbnNjZWl2ZXIuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUU1RTJCMTIxQ0ZDM0U0QjAwMEMwRDg1IC8qIFJUQ1J0cFRy
YW5zY2VpdmVyLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBSVENSdHBUcmFuc2NlaXZlci5p
ZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVFNjY1MzA5MURBNDM3QkYwMEZERDg0
QyAvKiBSVENJY2VUcmFuc3BvcnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
UlRDSWNlVHJhbnNwb3J0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTVFQTNENkRE
MUM4NTlENTMwMDMwMEJCQiAvKiBNb2NrTWVkaWFFbmRwb2ludC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNb2NrTWVkaWFFbmRwb2ludC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCTVFQTNENkRFMUM4NTlENTMwMDMwMEJCQiAvKiBNb2NrTWVkaWFF
bmRwb2ludC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNb2NrTWVkaWFFbmRw
b2ludC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1RUEzRDZFMTFDODU5REFBMDAz
MDBCQkIgLyogU0RQUHJvY2Vzc29yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFNEUFByb2Nlc3Nvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTVF
QTNENkUyMUM4NTlEQUEwMDMwMEJCQiAvKiBTRFBQcm9jZXNzb3IuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gU0RQUHJvY2Vzc29yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCTVFQTNENkU1MUM4NUE5QzMwMDMwMEJCQiAvKiBTRFBQcm9jZXNzb3JTY3JpcHRSZXNv
dXJjZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTRFBQcm9jZXNz
b3JTY3JpcHRSZXNvdXJjZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTVFQTNE
NkU2MUM4NUE5QzMwMDMwMEJCQiAvKiBTRFBQcm9jZXNzb3JTY3JpcHRSZXNvdXJjZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTRFBQcm9jZXNzb3JTY3JpcHRSZXNvdXJjZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1RUE3MjVDQTFBQ0FCQ0I1MDBFQUQxN0Ig
LyogTmF2aWdhdG9yTWVkaWFEZXZpY2VzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IE5hdmlnYXRvck1lZGlhRGV2aWNlcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTVFQTcyNUNCMUFDQUJDQjUwMEVBRDE3QiAvKiBOYXZpZ2F0b3JNZWRpYURldmlj
ZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTmF2aWdhdG9yTWVkaWFEZXZp
Y2VzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVFQTcyNUNDMUFDQUJDQjUwMEVB
RDE3QiAvKiBOYXZpZ2F0b3JNZWRpYURldmljZXMuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9
IE5hdmlnYXRvck1lZGlhRGV2aWNlcy5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTVFQTcyNUNEMUFDQUJDRDkwMEVBRDE3QiAvKiBNZWRpYURldmljZXMuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWVkaWFEZXZpY2VzLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNUVBNzI1Q0UxQUNBQkNEOTAwRUFEMTdCIC8qIE1lZGlhRGV2aWNl
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNZWRpYURldmljZXMuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUVBNzI1Q0YxQUNBQkNEOTAwRUFEMTdCIC8qIE1l
ZGlhRGV2aWNlcy5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gTWVkaWFEZXZpY2VzLmlkbDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNUVCQjg5MkExQzc3NzdEMDAwQzY1RDQxIC8q
IE1lZGlhRW5kcG9pbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
TWVkaWFFbmRwb2ludC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTVFQkI4OTJC
MUM3Nzc3RDAwMEM2NUQ0MSAvKiBNZWRpYUVuZHBvaW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IE1lZGlhRW5kcG9pbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJNUVCQjg5MkMxQzc3NzdEMDAwQzY1RDQxIC8qIE1lZGlhRW5kcG9pbnRDb25maWd1cmF0aW9u
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1lZGlhRW5kcG9pbnRD
b25maWd1cmF0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNUVCQjg5MkQx
Qzc3NzdEMDAwQzY1RDQxIC8qIE1lZGlhRW5kcG9pbnRDb25maWd1cmF0aW9uLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1lZGlhRW5kcG9pbnRDb25maWd1cmF0aW9uLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTVFQkI4OTJFMUM3Nzc3RDAwMEM2NUQ0MSAvKiBN
ZWRpYUVuZHBvaW50U2Vzc2lvbkNvbmZpZ3VyYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gTWVkaWFFbmRwb2ludFNlc3Npb25Db25maWd1cmF0aW9uLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVFQkI4OTJGMUM3Nzc3RDAwMEM2NUQ0MSAvKiBNZWRpYVBh
eWxvYWQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWVkaWFQYXlsb2FkLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVFQkI4OTMwMUM3Nzc3RTEwMEM2NUQ0MSAv
KiBJY2VDYW5kaWRhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSWNlQ2Fu
ZGlkYXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVFQkI4OTM4MUM3N0JEQTQw
MEM2NUQ0MSAvKiBQZWVyTWVkaWFEZXNjcmlwdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBQZWVyTWVkaWFEZXNjcmlwdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtMTY0MDMsMTAgKzE2Mzc3LDYgQEAKIAkJCQkwN0FCRUY2RDFEOEExQzc2MDBGMjE5
NzIgLyogTWVkaWFEZXZpY2VzRW51bWVyYXRpb25SZXF1ZXN0LmggKi8sCiAJCQkJMDczOTRFQzcx
QkFCMkNDRDAwQkU5OUNEIC8qIE1lZGlhRGV2aWNlc1JlcXVlc3QuY3BwICovLAogCQkJCTA3Mzk0
RUM5MUJBQjJDRDcwMEJFOTlDRCAvKiBNZWRpYURldmljZXNSZXF1ZXN0LmggKi8sCi0JCQkJNUUx
NkEyRTIxQkZBNjRGQjAwMjlBMjFFIC8qIE1lZGlhRW5kcG9pbnRQZWVyQ29ubmVjdGlvbi5jcHAg
Ki8sCi0JCQkJNUUxNkEyRTMxQkZBNjRGQjAwMjlBMjFFIC8qIE1lZGlhRW5kcG9pbnRQZWVyQ29u
bmVjdGlvbi5oICovLAotCQkJCTVFNEVBQjAyMUQwNzE2NEMwMDA2QTE4NCAvKiBNZWRpYUVuZHBv
aW50U2Vzc2lvbkRlc2NyaXB0aW9uLmNwcCAqLywKLQkJCQk1RTRFQUIwMzFEMDcxNjRDMDAwNkEx
ODQgLyogTWVkaWFFbmRwb2ludFNlc3Npb25EZXNjcmlwdGlvbi5oICovLAogCQkJCTA3MjIxQjRD
MTdDRUMzMjcwMDg0OEU1MSAvKiBNZWRpYVN0cmVhbS5jcHAgKi8sCiAJCQkJMDcyMjFCNEQxN0NF
QzMyNzAwODQ4RTUxIC8qIE1lZGlhU3RyZWFtLmggKi8sCiAJCQkJMDcyMjFCNEUxN0NFQzMyNzAw
ODQ4RTUxIC8qIE1lZGlhU3RyZWFtLmlkbCAqLywKQEAgLTE2NTAxLDggKzE2NDcxLDYgQEAKIAkJ
CQk1RTJDNDM2NDFCQ0VFMzcyMDAwMUUyQkMgLyogUlRDVHJhY2tFdmVudC5jcHAgKi8sCiAJCQkJ
NUUyQzQzNjUxQkNFRTM3MjAwMDFFMkJDIC8qIFJUQ1RyYWNrRXZlbnQuaCAqLywKIAkJCQk1RTJD
NDM2NjFCQ0VFMzcyMDAwMUUyQkMgLyogUlRDVHJhY2tFdmVudC5pZGwgKi8sCi0JCQkJNUVBM0Q2
RTExQzg1OURBQTAwMzAwQkJCIC8qIFNEUFByb2Nlc3Nvci5jcHAgKi8sCi0JCQkJNUVBM0Q2RTIx
Qzg1OURBQTAwMzAwQkJCIC8qIFNEUFByb2Nlc3Nvci5oICovLAogCQkJCTA3MjIxQjhEMTdDRUMz
MjcwMDg0OEU1MSAvKiBVc2VyTWVkaWFDbGllbnQuaCAqLywKIAkJCQkwNzIyMUI4RTE3Q0VDMzI3
MDA4NDhFNTEgLyogVXNlck1lZGlhQ29udHJvbGxlci5jcHAgKi8sCiAJCQkJMDcyMjFCOEYxN0NF
QzMyNzAwODQ4RTUxIC8qIFVzZXJNZWRpYUNvbnRyb2xsZXIuaCAqLywKQEAgLTE2NTI1LDExICsx
NjQ5Myw4IEBACiAJCQkJNUVCQjg5MzAxQzc3NzdFMTAwQzY1RDQxIC8qIEljZUNhbmRpZGF0ZS5o
ICovLAogCQkJCTFCRTVCRkMxMUQ1MTU3MTUwMDE2NjZEOSAvKiBNZWRpYUNvbnN0cmFpbnRzLmNw
cCAqLywKIAkJCQkwNzIyMUI5OTE3Q0YwQUQ0MDA4NDhFNTEgLyogTWVkaWFDb25zdHJhaW50cy5o
ICovLAotCQkJCTVFQkI4OTJBMUM3Nzc3RDAwMEM2NUQ0MSAvKiBNZWRpYUVuZHBvaW50LmNwcCAq
LywKLQkJCQk1RUJCODkyQjFDNzc3N0QwMDBDNjVENDEgLyogTWVkaWFFbmRwb2ludC5oICovLAot
CQkJCTVFQkI4OTJDMUM3Nzc3RDAwMEM2NUQ0MSAvKiBNZWRpYUVuZHBvaW50Q29uZmlndXJhdGlv
bi5jcHAgKi8sCi0JCQkJNUVCQjg5MkQxQzc3NzdEMDAwQzY1RDQxIC8qIE1lZGlhRW5kcG9pbnRD
b25maWd1cmF0aW9uLmggKi8sCi0JCQkJNUVCQjg5MkUxQzc3NzdEMDAwQzY1RDQxIC8qIE1lZGlh
RW5kcG9pbnRTZXNzaW9uQ29uZmlndXJhdGlvbi5oICovLAorCQkJCTQxQjI4QjEzMUY4NTAxQTQw
MEZCNTJBQyAvKiBNZWRpYUVuZHBvaW50Q29uZmlndXJhdGlvbi5jcHAgKi8sCisJCQkJNDFCMjhC
MTIxRjg1MDFBMzAwRkI1MkFDIC8qIE1lZGlhRW5kcG9pbnRDb25maWd1cmF0aW9uLmggKi8sCiAJ
CQkJNUVCQjg5MkYxQzc3NzdEMDAwQzY1RDQxIC8qIE1lZGlhUGF5bG9hZC5oICovLAogCQkJCTA3
MEY1NDk3MTdGMTJGNkIwMDE2OUUwNCAvKiBNZWRpYVN0cmVhbUNvbnN0cmFpbnRzVmFsaWRhdGlv
bkNsaWVudC5oICovLAogCQkJCTA3MTE1ODhGMTdERjYzMzcwMEVERkUyQiAvKiBNZWRpYVN0cmVh
bVByaXZhdGUuY3BwICovLApAQCAtMTY1NjcsOCArMTY1MzIsNiBAQAogCQkJCTA3MjIxQkFEMTdD
RjBBRDQwMDg0OEU1MSAvKiBSVENTZXNzaW9uRGVzY3JpcHRpb25SZXF1ZXN0LmggKi8sCiAJCQkJ
MzEzNTkxMDUxRTdEREM2MDAwRjMwNjMwIC8qIFJUQ1NpZ25hbGluZ1N0YXRlLmggKi8sCiAJCQkJ
MDcyMjFCQjAxN0NGMEFENDAwODQ4RTUxIC8qIFJUQ1ZvaWRSZXF1ZXN0LmggKi8sCi0JCQkJNUVB
M0Q2RTUxQzg1QTlDMzAwMzAwQkJCIC8qIFNEUFByb2Nlc3NvclNjcmlwdFJlc291cmNlLmNwcCAq
LywKLQkJCQk1RUEzRDZFNjFDODVBOUMzMDAzMDBCQkIgLyogU0RQUHJvY2Vzc29yU2NyaXB0UmVz
b3VyY2UuaCAqLywKIAkJCQkwNzBFODFEMDFCRjI3NjU2MDAxRkRBNDggLyogVmlkZW9UcmFja1By
aXZhdGVNZWRpYVN0cmVhbS5oICovLAogCQkJCTQxQjJBNjI1MUVGMUJGNjAwMDJCOUQ3QSAvKiBX
ZWJBdWRpb1NvdXJjZVByb3ZpZGVyLmggKi8sCiAJCQkpOwpAQCAtMTkyNDUsOCArMTkyMDgsNiBA
QAogCQkJCTA3N0I2NDE1MUI5NUY3MDMwMDNFOUFENSAvKiBNZWRpYVBsYXliYWNrVGFyZ2V0TW9j
ay5oICovLAogCQkJCTA3N0I2NDEwMUI5NEYxMkUwMDNFOUFENSAvKiBNZWRpYVBsYXliYWNrVGFy
Z2V0UGlja2VyTW9jay5jcHAgKi8sCiAJCQkJMDc3QjY0MTExQjk0RjEyRTAwM0U5QUQ1IC8qIE1l
ZGlhUGxheWJhY2tUYXJnZXRQaWNrZXJNb2NrLmggKi8sCi0JCQkJNUVBM0Q2REQxQzg1OUQ1MzAw
MzAwQkJCIC8qIE1vY2tNZWRpYUVuZHBvaW50LmNwcCAqLywKLQkJCQk1RUEzRDZERTFDODU5RDUz
MDAzMDBCQkIgLyogTW9ja01lZGlhRW5kcG9pbnQuaCAqLywKIAkJCQkwN0Q2QTRGMTFCRUQ1Rjg4
MDAxNzQxNDYgLyogTW9ja1JlYWx0aW1lQXVkaW9Tb3VyY2UuY3BwICovLAogCQkJCTA3RDZBNEYy
MUJFRDVGODgwMDE3NDE0NiAvKiBNb2NrUmVhbHRpbWVBdWRpb1NvdXJjZS5oICovLAogCQkJCTA3
RDZBNEVEMUJFQ0YyRDIwMDE3NDE0NiAvKiBNb2NrUmVhbHRpbWVNZWRpYVNvdXJjZS5jcHAgKi8s
CkBAIC0yOTA4Myw2ICsyOTA0NCw3IEBACiAJCQkJNDlDN0I5QTUxMDQyRDJEMzAwMDlENDQ3IC8q
IEpTV2ViR0xUZXh0dXJlLmggaW4gSGVhZGVycyAqLywKIAkJCQk2Rjk5NUEzODFBNzA4MzM3MDBB
NzM1RjQgLyogSlNXZWJHTFRyYW5zZm9ybUZlZWRiYWNrLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
QzQ1MzQyODEwQ0RCQkZBMDA4NjkxNTcgLyogSlNXZWJHTFVuaWZvcm1Mb2NhdGlvbi5oIGluIEhl
YWRlcnMgKi8sCisJCQkJNDFCMjhCMTUxRjg1MDFEMzAwRkI1MkFDIC8qIE1lZGlhRW5kcG9pbnRD
b25maWd1cmF0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk2Rjk5NUEzQTFBNzA4MzM3MDBBNzM1
RjQgLyogSlNXZWJHTFZlcnRleEFycmF5T2JqZWN0LmggaW4gSGVhZGVycyAqLywKIAkJCQk3N0VG
NjJGNDEyRjlEQjc0MDBDNzdCRDIgLyogSlNXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTLmggaW4g
SGVhZGVycyAqLywKIAkJCQkzMUEwODk1NjFFNzM4RDU5MDAzQjY2MDkgLyogSlNXZWJHUFVCdWZm
ZXIuaCBpbiBIZWFkZXJzICovLApAQCAtMjkyNTYsMTEgKzI5MjE4LDYgQEAKIAkJCQkwN0ZFOTlE
RDE4ODA3QTdEMDAyNTY2NDggLyogTWVkaWFFbGVtZW50U2Vzc2lvbi5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMkQ5QkY3MDYxREJGQkIyNDAwN0E3RDk5IC8qIE1lZGlhRW5jcnlwdGVkRXZlbnQuaCBp
biBIZWFkZXJzICovLAogCQkJCTJEOUJGNzA4MURCRkJCMjQwMDdBN0Q5OSAvKiBNZWRpYUVuY3J5
cHRlZEV2ZW50SW5pdC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNUVCQjg5MzUxQzc3NzgyOTAwQzY1
RDQxIC8qIE1lZGlhRW5kcG9pbnQuaCBpbiBIZWFkZXJzICovLAotCQkJCTVFQkI4OTM3MUM3Nzc4
MjkwMEM2NUQ0MSAvKiBNZWRpYUVuZHBvaW50Q29uZmlndXJhdGlvbi5oIGluIEhlYWRlcnMgKi8s
Ci0JCQkJNUUxNkEyRTQxQkZBNjUwQjAwMjlBMjFFIC8qIE1lZGlhRW5kcG9pbnRQZWVyQ29ubmVj
dGlvbi5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNUVCQjg5MzIxQzc3NzgyMzAwQzY1RDQxIC8qIE1l
ZGlhRW5kcG9pbnRTZXNzaW9uQ29uZmlndXJhdGlvbi5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNUU0
RUFCMDQxRDA3MTY2QTAwMDZBMTg0IC8qIE1lZGlhRW5kcG9pbnRTZXNzaW9uRGVzY3JpcHRpb24u
aCBpbiBIZWFkZXJzICovLAogCQkJCUU0NDYxM0FEMENENjMzMTAwMEZBREE3NSAvKiBNZWRpYUVy
cm9yLmggaW4gSGVhZGVycyAqLywKIAkJCQk0RTE5NTkyMjBBMzlEQUJBMDAyMjBGRTUgLyogTWVk
aWFGZWF0dXJlTmFtZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTA3QTZEMUVDMTQ5MTEzNzcwMDA1
MUQwQyAvKiBNZWRpYUZyYWdtZW50VVJJUGFyc2VyLmggaW4gSGVhZGVycyAqLywKQEAgLTI5MzQ5
LDcgKzI5MzA2LDYgQEAKIAkJCQlDREY0QjcyMDFFMDNCRjZGMDBFMjM1QTIgLyogTW9ja0NETUZh
Y3RvcnkuaWRsIGluIEhlYWRlcnMgKi8sCiAJCQkJNTEwNThBRTAxRDY3QzIyOTAwOUE1MzhDIC8q
IE1vY2tHYW1lcGFkLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTA1OEFFMjFENjdDMjI5MDA5QTUz
OEMgLyogTW9ja0dhbWVwYWRQcm92aWRlci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNUVBM0Q2REYx
Qzg1OUQ3RjAwMzAwQkJCIC8qIE1vY2tNZWRpYUVuZHBvaW50LmggaW4gSGVhZGVycyAqLywKIAkJ
CQlDREYyQjAxMzE4MjA1NDA2MDBGMkI0MjQgLyogTW9ja01lZGlhUGxheWVyTWVkaWFTb3VyY2Uu
aCBpbiBIZWFkZXJzICovLAogCQkJCUNERjJCMDE1MTgyMDU0MDYwMEYyQjQyNCAvKiBNb2NrTWVk
aWFTb3VyY2VQcml2YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwN0Q2QTRGNDFCRUQ1Rjg4MDAx
NzQxNDYgLyogTW9ja1JlYWx0aW1lQXVkaW9Tb3VyY2UuaCBpbiBIZWFkZXJzICovLApAQCAtMjk5
ODQsOCArMjk5NDAsNiBAQAogCQkJCTgzQzU3OTVEMURBNUMzMDEwMDZGQUNBOCAvKiBTY3JvbGxU
b09wdGlvbnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzQzA5Qzg2MEIwNjU3QUEwMDVBQkQ0RCAv
KiBTY3JvbGxUeXBlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM2RDZFMjYwOUFGOTQzNTAwRjU5
NzU5IC8qIFNjcm9sbFZpZXcuaCBpbiBIZWFkZXJzICovLAotCQkJCTVFQTNENkU0MUM4NTlEQzEw
MDMwMEJCQiAvKiBTRFBQcm9jZXNzb3IuaCBpbiBIZWFkZXJzICovLAotCQkJCTVFQTNENkU4MUM4
NUE5REIwMDMwMEJCQiAvKiBTRFBQcm9jZXNzb3JTY3JpcHRSZXNvdXJjZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJRjU1QjNERDIxMjUxRjEyRDAwM0VGMjY5IC8qIFNlYXJjaElucHV0VHlwZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQUI3MTcwODkwQjMxMTgwODAwMTcxMjNFIC8qIFNlYXJjaFBvcHVw
TWVudS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEU3MDU4RjQxQkM1Q0VEQTAwNDVBNTA3IC8qIFNl
YXJjaFBvcHVwTWVudUNvY29hLmggaW4gSGVhZGVycyAqLywKQEAgLTMzMjAwLDYgKzMzMTU0LDcg
QEAKIAkJCQlFMUMzNkQzNDBFQjBBMDk0MDA3NDEwQkMgLyogSlNXb3JrZXJHbG9iYWxTY29wZUJh
c2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTE4MjU4QUMwRUYzQ0Q3MDAwOTMzMjQyIC8qIEpT
V29ya2VyR2xvYmFsU2NvcGVDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTFDMzYyRjAw
RUFGMkFBOTAwNzQxMEJDIC8qIEpTV29ya2VyTG9jYXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJNDFCMjhCMTQxRjg1MDFBNjAwRkI1MkFDIC8qIE1lZGlhRW5kcG9pbnRDb25maWd1cmF0aW9u
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUxMjcxQTU5MEVFRUNERTQwMEY2MTIxMyAvKiBKU1dv
cmtlck5hdmlnYXRvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MUYxNzUwNzFGMzU4QkY5MDBD
NzQ5NTAgLyogSlNXb3JrZXJUeXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdDNEM5NkRDMUFE
NDQ4MzUwMDM2NUE2MCAvKiBKU1dyaXRhYmxlU3RyZWFtLmNwcCBpbiBTb3VyY2VzICovLApAQCAt
MzMzMzMsMTAgKzMzMjg4LDYgQEAKIAkJCQlGRDZGMjUyQzEzRjVFRjBFMDA2NTE2NUYgLyogTWVk
aWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTA3RkU5OURD
MTg4MDdBN0QwMDI1NjY0OCAvKiBNZWRpYUVsZW1lbnRTZXNzaW9uLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTJEOUJGNzA1MURCRkJCMjQwMDdBN0Q5OSAvKiBNZWRpYUVuY3J5cHRlZEV2ZW50LmNw
cCBpbiBTb3VyY2VzICovLAotCQkJCTVFQkI4OTM0MUM3Nzc4MjkwMEM2NUQ0MSAvKiBNZWRpYUVu
ZHBvaW50LmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTVFQkI4OTM2MUM3Nzc4MjkwMEM2NUQ0MSAv
KiBNZWRpYUVuZHBvaW50Q29uZmlndXJhdGlvbi5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk1RTE2
QTJFNTFCRkE2NTBGMDAyOUEyMUUgLyogTWVkaWFFbmRwb2ludFBlZXJDb25uZWN0aW9uLmNwcCBp
biBTb3VyY2VzICovLAotCQkJCTVFNEVBQjA1MUQwNzE2NkUwMDA2QTE4NCAvKiBNZWRpYUVuZHBv
aW50U2Vzc2lvbkRlc2NyaXB0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTRFMTk1OTIxMEEz
OURBQkEwMDIyMEZFNSAvKiBNZWRpYUZlYXR1cmVOYW1lcy5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkwN0E2RDFFQjE0OTExMzc3MDAwNTFEMEMgLyogTWVkaWFGcmFnbWVudFVSSVBhcnNlci5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkyRDlCRjc0NzFEQkZEQzQ5MDA3QTdEOTkgLyogTWVkaWFLZXlN
ZXNzYWdlRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0zMzQxMSw3ICszMzM2Miw2IEBACiAJ
CQkJQ0RGMkIwMTAxODIwNTQwNjAwRjJCNDI0IC8qIE1vY2tCb3guY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJNTEwNThBREYxRDY3QzIyOTAwOUE1MzhDIC8qIE1vY2tHYW1lcGFkLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTUxMDU4QUUxMUQ2N0MyMjkwMDlBNTM4QyAvKiBNb2NrR2FtZXBhZFByb3Zp
ZGVyLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTVFQTNENkUwMUM4NTlEODQwMDMwMEJCQiAvKiBN
b2NrTWVkaWFFbmRwb2ludC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDREYyQjAxMjE4MjA1NDA2
MDBGMkI0MjQgLyogTW9ja01lZGlhUGxheWVyTWVkaWFTb3VyY2UuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQ0RGMkIwMTQxODIwNTQwNjAwRjJCNDI0IC8qIE1vY2tNZWRpYVNvdXJjZVByaXZhdGUu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMDdENkE0RjMxQkVENUY4ODAwMTc0MTQ2IC8qIE1vY2tS
ZWFsdGltZUF1ZGlvU291cmNlLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMzM5MDYsOCArMzM4NTYs
NiBAQAogCQkJCUJDMjQ0MUM0MEU4QjY1RDAwMDU1MzIwRiAvKiBTY3JvbGxWaWV3LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUU0NTM5MDQ1MEVBRkQ2MzcwMDM2OTVDOCAvKiBTY3JvbGxWaWV3SU9T
Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJOTM1MzY3NkIwOUFFRDg4QjAwRDM1Q0Q2IC8qIFNjcm9s
bFZpZXdNYWMubW0gaW4gU291cmNlcyAqLywKLQkJCQk1RUEzRDZFMzFDODU5REMxMDAzMDBCQkIg
LyogU0RQUHJvY2Vzc29yLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTVFQTNENkU3MUM4NUE5REIw
MDMwMEJCQiAvKiBTRFBQcm9jZXNzb3JTY3JpcHRSZXNvdXJjZS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlDREFCNkQzMjE3QzkyNTk1MDBDNjBCMzUgLyogU0RQUHJvY2Vzc29yU2NyaXB0c0RhdGEu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRjU1QjNERDExMjUxRjEyRDAwM0VGMjY5IC8qIFNlYXJj
aElucHV0VHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRTcwNThFRTFCQzVCQzE5MDA0NUE1
MDcgLyogU2VhcmNoUG9wdXBNZW51Q29jb2EubW0gaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0dTdHJlYW1lci5jbWFrZSBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL0dTdHJlYW1lci5jbWFrZQppbmRleCA5OWNmNWZmYTIwNzM3NmNiNWFiOWVjZGRh
ZmI2Y2E0N2FiMjAzYTQwLi43ZTIyNGQ3NzQ3NTQ0YWQzN2QzODhkN2M3NGI5ZjZlNjI1MDhkODBm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9HU3RyZWFtZXIuY21ha2UKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vR1N0cmVhbWVyLmNtYWtlCkBAIC0xLDI2ICsxLDMg
QEAKLWxpc3QoQVBQRU5EIFdlYkNvcmVfSU5DTFVERV9ESVJFQ1RPUklFUwotICAgICIke1dFQkNP
UkVfRElSfS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9vcGVud2VicnRjIgotKQotCi1pZiAoRU5BQkxF
X01FRElBX1NUUkVBTSkKLSAgICBsaXN0KEFQUEVORCBXZWJDb3JlX1NZU1RFTV9JTkNMVURFX0RJ
UkVDVE9SSUVTCi0gICAgICAgICR7T1BFTldFQlJUQ19JTkNMVURFX0RJUlN9Ci0gICAgKQotCi0g
ICAgbGlzdChBUFBFTkQgV2ViQ29yZV9MSUJSQVJJRVMKLSAgICAgICAgJHtPUEVOV0VCUlRDX0xJ
QlJBUklFU30KLSAgICApCi0KLSAgICBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKLSAgICAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
ck93ci5jcHAKLQotICAgICAgICBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9vcGVud2VicnRjL01lZGlh
RW5kcG9pbnRPd3IuY3BwCi0gICAgICAgIHBsYXRmb3JtL21lZGlhc3RyZWFtL29wZW53ZWJydGMv
T3BlbldlYlJUQ1V0aWxpdGllcy5jcHAKLSAgICAgICAgcGxhdGZvcm0vbWVkaWFzdHJlYW0vb3Bl
bndlYnJ0Yy9SZWFsdGltZU1lZGlhU291cmNlT3dyLmNwcAotICAgICAgICBwbGF0Zm9ybS9tZWRp
YXN0cmVhbS9vcGVud2VicnRjL1JlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJPd3IuY3BwCi0gICAg
KQotZW5kaWYgKCkKLQogaWYgKEVOQUJMRV9WSURFTyBPUiBFTkFCTEVfV0VCX0FVRElPKQogICAg
IGxpc3QoQVBQRU5EIFdlYkNvcmVfSU5DTFVERV9ESVJFQ1RPUklFUwogICAgICAgICAiJHtXRUJD
T1JFX0RJUn0vcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyIgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3BwCmluZGV4IDQ4NzcxNjBjZmFhYjNh
ZWMyNjljOWZiY2Y2YzQ4NmZmMjE3YTIyYTAuLmYwOTNkNDUxYjI1NThhNWE5MWFhODhkMTEzNTk2
NDc4NDQxNzg4NzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L01lZGlhUGxheWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9N
ZWRpYVBsYXllci5jcHAKQEAgLTUzLDkgKzUzLDYgQEAKIAogI2lmIFVTRShHU1RSRUFNRVIpCiAj
aW5jbHVkZSAiTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmgiCi0jaWYgRU5BQkxFKE1FRElB
X1NUUkVBTSkgJiYgVVNFKE9QRU5XRUJSVEMpCi0jaW5jbHVkZSAiTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyT3dyLmgiCi0jZW5kaWYKICNkZWZpbmUgUGxhdGZvcm1NZWRpYUVuZ2luZUNsYXNz
TmFtZSBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIKICNpZiBFTkFCTEUoVklERU8pICYmIEVO
QUJMRShNRURJQV9TT1VSQ0UpICYmIEVOQUJMRShWSURFT19UUkFDSykKICNpbmNsdWRlICJNZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0UuaCIKQEAgLTI2OCwxMSArMjY1LDYgQEAgc3RhdGlj
IHZvaWQgYnVpbGRNZWRpYUVuZ2luZXNWZWN0b3IoKQogICAgICAgICBQbGF0Zm9ybU1lZGlhRW5n
aW5lQ2xhc3NOYW1lOjpyZWdpc3Rlck1lZGlhRW5naW5lKGFkZE1lZGlhRW5naW5lKTsKICNlbmRp
ZgogCi0jaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkgJiYgVVNFKEdTVFJFQU1FUikgJiYgVVNFKE9Q
RU5XRUJSVEMpCi0gICAgaWYgKFNldHRpbmdzOjppc0dTdHJlYW1lckVuYWJsZWQoKSkKLSAgICAg
ICAgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyOjpyZWdpc3Rlck1lZGlhRW5naW5lKGFk
ZE1lZGlhRW5naW5lKTsKLSNlbmRpZgotCiAjaWYgRU5BQkxFKFZJREVPKSAmJiBVU0UoR1NUUkVB
TUVSKSAmJiBFTkFCTEUoTUVESUFfU09VUkNFKSAmJiBFTkFCTEUoVklERU9fVFJBQ0spCiAgICAg
aWYgKFNldHRpbmdzOjppc0dTdHJlYW1lckVuYWJsZWQoKSkKICAgICAgICAgTWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyTVNFOjpyZWdpc3Rlck1lZGlhRW5naW5lKGFkZE1lZGlhRW5naW5lKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9N
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5jcHAKaW5kZXgg
ZjM4ZTYzNzEyOTdhNDk0ZWQ3YWJjMjIwNGMxYjJhYTFkM2Q0YmYxYi4uODQ3OTRmNGM1YmM5MGNl
YTk2ODcyYjBjOGYxMmMyZTFjNGJiYTJiMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lci5jcHAKQEAgLTE5MzEsNyArMTkzMSw2IEBAIE1lZGlhUGxheWVy
OjpTdXBwb3J0c1R5cGUgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpzdXBwb3J0c1R5cGUo
Y29uc3QgTWVkaWFFCiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAjZW5kaWYKIAotICAgIC8vIE1l
ZGlhU3RyZWFtIHBsYXliYWNrIGlzIGhhbmRsZWQgYnkgdGhlIE9wZW5XZWJSVEMgcGxheWVyLgog
ICAgIGlmIChwYXJhbWV0ZXJzLmlzTWVkaWFTdHJlYW0pCiAgICAgICAgIHJldHVybiByZXN1bHQ7
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1l
ci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3IuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93ci5j
cHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU1MWZmNmNmNzdmZTNjMTc2OGJhOTA3
MTA4NmM5NmUyZWRjOWFhOTUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lck93ci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw1MDEgKzAs
MCBAQAotLyoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMTIgQ29sbGFib3JhIEx0ZC4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqICBDb3B5cmlnaHQgKEMpIDIwMTQsIDIwMTUgSWdhbGlhIFMuTC4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqICBDb3B5cmlnaHQgKEMpIDIwMTUgTWV0cm9sb2dpY2FsIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqICBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiAgdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiAgTGVzc2Vy
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1Ymxp
YwotICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8g
dGhlIEZyZWUgU29mdHdhcmUKLSAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKLSAqLwotCi0jaW5j
bHVkZSAiY29uZmlnLmgiCi0KLSNpbmNsdWRlICJNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJP
d3IuaCIKLQotI2lmIEVOQUJMRShWSURFTykgJiYgRU5BQkxFKE1FRElBX1NUUkVBTSkgJiYgVVNF
KEdTVFJFQU1FUikgJiYgVVNFKE9QRU5XRUJSVEMpCi0KLSNpbmNsdWRlICJHU3RyZWFtZXJVdGls
aXRpZXMuaCIKLSNpbmNsdWRlICJNZWRpYVBsYXllci5oIgotI2luY2x1ZGUgIk1lZGlhU3RyZWFt
UHJpdmF0ZS5oIgotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0jaW5jbHVkZSAiUmVhbHRp
bWVNZWRpYVNvdXJjZU93ci5oIgotI2luY2x1ZGUgIlVSTC5oIgotI2luY2x1ZGUgPG93ci9vd3Iu
aD4KLSNpbmNsdWRlIDxvd3Ivb3dyX2dzdF9hdWRpb19yZW5kZXJlci5oPgotI2luY2x1ZGUgPG93
ci9vd3JfZ3N0X3ZpZGVvX3JlbmRlcmVyLmg+Ci0jaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVk
Lmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1HU1RfREVCVUdfQ0FURUdPUlko
d2Via2l0X29wZW53ZWJydGNfZGVidWcpOwotI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgd2Via2l0
X29wZW53ZWJydGNfZGVidWcKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1NZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXJPd3I6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93cihNZWRpYVBs
YXllciogcGxheWVyKQotICAgIDogTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZShwbGF5
ZXIpCi17Ci0gICAgaW5pdGlhbGl6ZUdTdHJlYW1lckFuZEdTdHJlYW1lckRlYnVnZ2luZygpOwot
fQotCi1NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3I6On5NZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXJPd3IoKQotewotICAgIEdTVF9UUkFDRSgiRGVzdHJveWluZyIpOwotCi0gICAgaWYg
KGhhc0F1ZGlvKCkpCi0gICAgICAgIG1fYXVkaW9UcmFjay0+cmVtb3ZlT2JzZXJ2ZXIoKnRoaXMp
OwotICAgIGlmIChoYXNWaWRlbygpKQotICAgICAgICBtX3ZpZGVvVHJhY2stPnJlbW92ZU9ic2Vy
dmVyKCp0aGlzKTsKLQotICAgIG1fYXVkaW9UcmFja01hcC5jbGVhcigpOwotICAgIG1fdmlkZW9U
cmFja01hcC5jbGVhcigpOwotCi0gICAgc3RvcCgpOwotfQotCi12b2lkIE1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lck93cjo6cGxheSgpCi17Ci0gICAgR1NUX0RFQlVHKCJQbGF5Iik7Ci0KLSAg
ICBpZiAoIW1fc3RyZWFtUHJpdmF0ZSB8fCAhbV9zdHJlYW1Qcml2YXRlLT5hY3RpdmUoKSkgewot
ICAgICAgICBtX3JlYWR5U3RhdGUgPSBNZWRpYVBsYXllcjo6SGF2ZU5vdGhpbmc7Ci0gICAgICAg
IGxvYWRpbmdGYWlsZWQoTWVkaWFQbGF5ZXI6OkVtcHR5KTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIG1fZW5kZWQgPSBmYWxzZTsKLSAgICBtX3BhdXNlZCA9IGZhbHNlOwotCi0gICAg
R1NUX0RFQlVHKCJDb25uZWN0aW5nIHRvIGxpdmUgc3RyZWFtLCBkZXNjcmlwdG9yOiAlcCIsIG1f
c3RyZWFtUHJpdmF0ZS5nZXQoKSk7Ci0KLSAgICBpZiAobV92aWRlb1RyYWNrKQotICAgICAgICBt
YXliZUhhbmRsZUNoYW5nZU11dGVkU3RhdGUoKm1fdmlkZW9UcmFjay5nZXQoKSk7Ci0KLSAgICBp
ZiAobV9hdWRpb1RyYWNrKQotICAgICAgICBtYXliZUhhbmRsZUNoYW5nZU11dGVkU3RhdGUoKm1f
YXVkaW9UcmFjay5nZXQoKSk7Ci19Ci0KLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
T3dyOjpwYXVzZSgpCi17Ci0gICAgR1NUX0RFQlVHKCJQYXVzZSIpOwotICAgIG1fcGF1c2VkID0g
dHJ1ZTsKLSAgICBkaXNhYmxlTWVkaWFUcmFja3MoKTsKLX0KLQotYm9vbCBNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXJPd3I6Omhhc1ZpZGVvKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV92aWRl
b1RyYWNrOwotfQotCi1ib29sIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93cjo6aGFzQXVk
aW8oKSBjb25zdAotewotICAgIHJldHVybiBtX2F1ZGlvVHJhY2s7Ci19Ci0KLXZvaWQgTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyOjpzZXRWb2x1bWUoZmxvYXQgdm9sdW1lKQotewotICAg
IGlmICghbV9hdWRpb1RyYWNrKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvJiByZWFsVGlt
ZU1lZGlhU291cmNlID0gc3RhdGljX2Nhc3Q8UmVhbHRpbWVNZWRpYVNvdXJjZU93ciY+KG1fYXVk
aW9UcmFjay0+c291cmNlKCkpOwotICAgIGF1dG8gbWVkaWFTb3VyY2UgPSBPV1JfTUVESUFfU09V
UkNFKHJlYWxUaW1lTWVkaWFTb3VyY2UubWVkaWFTb3VyY2UoKSk7Ci0KLSAgICBHU1RfREVCVUco
IlNldHRpbmcgdm9sdW1lOiAlZiIsIHZvbHVtZSk7Ci0gICAgZ19vYmplY3Rfc2V0KG1lZGlhU291
cmNlLCAidm9sdW1lIiwgc3RhdGljX2Nhc3Q8Z2RvdWJsZT4odm9sdW1lKSwgbnVsbHB0cik7Ci19
Ci0KLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyOjpzZXRNdXRlZChib29sIG11
dGVkKQotewotICAgIGlmICghbV9hdWRpb1RyYWNrKQotICAgICAgICByZXR1cm47Ci0KLSAgICBh
dXRvJiByZWFsVGltZU1lZGlhU291cmNlID0gc3RhdGljX2Nhc3Q8UmVhbHRpbWVNZWRpYVNvdXJj
ZU93ciY+KG1fYXVkaW9UcmFjay0+c291cmNlKCkpOwotICAgIGF1dG8gbWVkaWFTb3VyY2UgPSBP
V1JfTUVESUFfU09VUkNFKHJlYWxUaW1lTWVkaWFTb3VyY2UubWVkaWFTb3VyY2UoKSk7Ci0gICAg
aWYgKCFtZWRpYVNvdXJjZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgR1NUX0RFQlVHKCJTZXR0
aW5nIG11dGU6ICVzIiwgbXV0ZWQgPyAib24iOiJvZmYiKTsKLSAgICBnX29iamVjdF9zZXQobWVk
aWFTb3VyY2UsICJtdXRlIiwgbXV0ZWQsIG51bGxwdHIpOwotfQotCi1mbG9hdCBNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXJPd3I6OmN1cnJlbnRUaW1lKCkgY29uc3QKLXsKLSAgICBnaW50NjQg
cG9zaXRpb24gPSBHU1RfQ0xPQ0tfVElNRV9OT05FOwotICAgIEdzdFF1ZXJ5KiBxdWVyeSA9IGdz
dF9xdWVyeV9uZXdfcG9zaXRpb24oR1NUX0ZPUk1BVF9USU1FKTsKLQotICAgIGlmIChtX3ZpZGVv
VHJhY2sgJiYgZ3N0X2VsZW1lbnRfcXVlcnkobV92aWRlb1NpbmsuZ2V0KCksIHF1ZXJ5KSkKLSAg
ICAgICAgZ3N0X3F1ZXJ5X3BhcnNlX3Bvc2l0aW9uKHF1ZXJ5LCAwLCAmcG9zaXRpb24pOwotICAg
IGVsc2UgaWYgKG1fYXVkaW9UcmFjayAmJiBnc3RfZWxlbWVudF9xdWVyeShtX2F1ZGlvU2luay5n
ZXQoKSwgcXVlcnkpKQotICAgICAgICBnc3RfcXVlcnlfcGFyc2VfcG9zaXRpb24ocXVlcnksIDAs
ICZwb3NpdGlvbik7Ci0KLSAgICBmbG9hdCByZXN1bHQgPSAwOwotICAgIGlmIChzdGF0aWNfY2Fz
dDxHc3RDbG9ja1RpbWU+KHBvc2l0aW9uKSAhPSBHU1RfQ0xPQ0tfVElNRV9OT05FKQotICAgICAg
ICByZXN1bHQgPSBzdGF0aWNfY2FzdDxkb3VibGU+KHBvc2l0aW9uKSAvIEdTVF9TRUNPTkQ7Ci0K
LSAgICBHU1RfTE9HKCJQb3NpdGlvbiAlIiBHU1RfVElNRV9GT1JNQVQsIEdTVF9USU1FX0FSR1Mo
cG9zaXRpb24pKTsKLSAgICBnc3RfcXVlcnlfdW5yZWYocXVlcnkpOwotCi0gICAgcmV0dXJuIHJl
c3VsdDsKLX0KLQotdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3I6OmxvYWQoY29u
c3QgU3RyaW5nICYpCi17Ci0gICAgLy8gUHJvcGVybHkgZmFpbCBzbyB0aGUgZ2xvYmFsIE1lZGlh
UGxheWVyIHRyaWVzIHRvIGZhbGxiYWNrIHRvIHRoZSBuZXh0IE1lZGlhUGxheWVyUHJpdmF0ZS4K
LSAgICBtX25ldHdvcmtTdGF0ZSA9IE1lZGlhUGxheWVyOjpGb3JtYXRFcnJvcjsKLSAgICBtX3Bs
YXllci0+bmV0d29ya1N0YXRlQ2hhbmdlZCgpOwotfQotCi0jaWYgRU5BQkxFKE1FRElBX1NPVVJD
RSkKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyOjpsb2FkKGNvbnN0IFN0cmlu
ZyYsIE1lZGlhU291cmNlUHJpdmF0ZUNsaWVudCopCi17Ci0gICAgLy8gUHJvcGVybHkgZmFpbCBz
byB0aGUgZ2xvYmFsIE1lZGlhUGxheWVyIHRyaWVzIHRvIGZhbGxiYWNrIHRvIHRoZSBuZXh0IE1l
ZGlhUGxheWVyUHJpdmF0ZS4KLSAgICBtX25ldHdvcmtTdGF0ZSA9IE1lZGlhUGxheWVyOjpGb3Jt
YXRFcnJvcjsKLSAgICBtX3BsYXllci0+bmV0d29ya1N0YXRlQ2hhbmdlZCgpOwotfQotI2VuZGlm
Ci0KLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyOjpsb2FkKE1lZGlhU3RyZWFt
UHJpdmF0ZSYgc3RyZWFtUHJpdmF0ZSkKLXsKLSAgICBpZiAoIWluaXRpYWxpemVHU3RyZWFtZXIo
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9zdHJlYW1Qcml2YXRlID0gJnN0cmVhbVByaXZh
dGU7Ci0gICAgaWYgKCFtX3N0cmVhbVByaXZhdGUtPmFjdGl2ZSgpKSB7Ci0gICAgICAgIGxvYWRp
bmdGYWlsZWQoTWVkaWFQbGF5ZXI6Ok5ldHdvcmtFcnJvcik7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0KLSAgICBpZiAoc3RyZWFtUHJpdmF0ZS5oYXNWaWRlbygpICYmICFtX3ZpZGVvU2luaykK
LSAgICAgICAgY3JlYXRlVmlkZW9TaW5rKCk7Ci0KLSAgICBpZiAoc3RyZWFtUHJpdmF0ZS5oYXNB
dWRpbygpICYmICFtX2F1ZGlvU2luaykKLSAgICAgICAgY3JlYXRlR1NUQXVkaW9TaW5rQmluKCk7
Ci0KLSAgICBHU1RfREVCVUcoIkxvYWRpbmcgTWVkaWFTdHJlYW1Qcml2YXRlICVwIHZpZGVvOiAl
cywgYXVkaW86ICVzIiwgJnN0cmVhbVByaXZhdGUsIHN0cmVhbVByaXZhdGUuaGFzVmlkZW8oKSA/
ICJ5ZXMiOiJubyIsIHN0cmVhbVByaXZhdGUuaGFzQXVkaW8oKSA/ICJ5ZXMiOiJubyIpOwotCi0g
ICAgbV9yZWFkeVN0YXRlID0gTWVkaWFQbGF5ZXI6OkhhdmVOb3RoaW5nOwotICAgIG1fbmV0d29y
a1N0YXRlID0gTWVkaWFQbGF5ZXI6OkxvYWRpbmc7Ci0gICAgbV9wbGF5ZXItPm5ldHdvcmtTdGF0
ZUNoYW5nZWQoKTsKLSAgICBtX3BsYXllci0+cmVhZHlTdGF0ZUNoYW5nZWQoKTsKLQotICAgIGZv
ciAoYXV0byB0cmFjayA6IG1fc3RyZWFtUHJpdmF0ZS0+dHJhY2tzKCkpIHsKLSAgICAgICAgaWYg
KCF0cmFjay0+ZW5hYmxlZCgpKSB7Ci0gICAgICAgICAgICBHU1RfREVCVUcoIlRyYWNrICVzIGRp
c2FibGVkIiwgdHJhY2stPmxhYmVsKCkuYXNjaWkoKS5kYXRhKCkpOwotICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICBHU1RfREVCVUcoIlByb2Nlc3NpbmcgdHJhY2sg
JXMiLCB0cmFjay0+bGFiZWwoKS5hc2NpaSgpLmRhdGEoKSk7Ci0KLSAgICAgICAgYm9vbCBvYnNl
cnZlVHJhY2sgPSBmYWxzZTsKLQotICAgICAgICAvLyBUT0RPOiBTdXBwb3J0IGZvciBtdWx0aXBs
ZSB0cmFja3Mgb2YgdGhlIHNhbWUgdHlwZS4KLQotICAgICAgICBzd2l0Y2ggKHRyYWNrLT50eXBl
KCkpIHsKLSAgICAgICAgY2FzZSBSZWFsdGltZU1lZGlhU291cmNlOjpUeXBlOjpBdWRpbzoKLSAg
ICAgICAgICAgIGlmICghbV9hdWRpb1RyYWNrKSB7Ci0gICAgICAgICAgICAgICAgU3RyaW5nIHBy
ZVNlbGVjdGVkRGV2aWNlID0gZ2V0ZW52KCJXRUJLSVRfQVVESU9fREVWSUNFIik7Ci0gICAgICAg
ICAgICAgICAgaWYgKCFwcmVTZWxlY3RlZERldmljZSB8fCAocHJlU2VsZWN0ZWREZXZpY2UgPT0g
dHJhY2stPmxhYmVsKCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1fYXVkaW9UcmFjayA9IHRy
YWNrOwotICAgICAgICAgICAgICAgICAgICBhdXRvIGF1ZGlvVHJhY2sgPSBBdWRpb1RyYWNrUHJp
dmF0ZU1lZGlhU3RyZWFtOjpjcmVhdGUoKm1fYXVkaW9UcmFjay5nZXQoKSk7Ci0gICAgICAgICAg
ICAgICAgICAgIG1fcGxheWVyLT5hZGRBdWRpb1RyYWNrKCphdWRpb1RyYWNrKTsKLSAgICAgICAg
ICAgICAgICAgICAgbV9hdWRpb1RyYWNrTWFwLmFkZCh0cmFjay0+aWQoKSwgYXVkaW9UcmFjayk7
Ci0gICAgICAgICAgICAgICAgICAgIG9ic2VydmVUcmFjayA9IHRydWU7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUmVh
bHRpbWVNZWRpYVNvdXJjZTo6VHlwZTo6VmlkZW86Ci0gICAgICAgICAgICBpZiAoIW1fdmlkZW9U
cmFjaykgewotICAgICAgICAgICAgICAgIFN0cmluZyBwcmVTZWxlY3RlZERldmljZSA9IGdldGVu
digiV0VCS0lUX1ZJREVPX0RFVklDRSIpOwotICAgICAgICAgICAgICAgIGlmICghcHJlU2VsZWN0
ZWREZXZpY2UgfHwgKHByZVNlbGVjdGVkRGV2aWNlID09IHRyYWNrLT5sYWJlbCgpKSkgewotICAg
ICAgICAgICAgICAgICAgICBtX3ZpZGVvVHJhY2sgPSB0cmFjazsKLSAgICAgICAgICAgICAgICAg
ICAgYXV0byB2aWRlb1RyYWNrID0gVmlkZW9UcmFja1ByaXZhdGVNZWRpYVN0cmVhbTo6Y3JlYXRl
KCptX3ZpZGVvVHJhY2suZ2V0KCkpOwotICAgICAgICAgICAgICAgICAgICBtX3BsYXllci0+YWRk
VmlkZW9UcmFjaygqdmlkZW9UcmFjayk7Ci0gICAgICAgICAgICAgICAgICAgIHZpZGVvVHJhY2st
PnNldFNlbGVjdGVkKHRydWUpOwotICAgICAgICAgICAgICAgICAgICBtX3ZpZGVvVHJhY2tNYXAu
YWRkKHRyYWNrLT5pZCgpLCB2aWRlb1RyYWNrKTsKLSAgICAgICAgICAgICAgICAgICAgb2JzZXJ2
ZVRyYWNrID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgY2FzZSBSZWFsdGltZU1lZGlhU291cmNlOjpUeXBlOjpOb25l
OgotICAgICAgICAgICAgR1NUX1dBUk5JTkcoIkxvYWRpbmcgYSB0cmFjayB3aXRoIE5vbmUgdHlw
ZSIpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG9ic2VydmVUcmFjaykKLSAgICAgICAgICAg
IHRyYWNrLT5hZGRPYnNlcnZlcigqdGhpcyk7Ci0gICAgfQotCi0gICAgbV9yZWFkeVN0YXRlID0g
TWVkaWFQbGF5ZXI6OkhhdmVFbm91Z2hEYXRhOwotICAgIG1fcGxheWVyLT5yZWFkeVN0YXRlQ2hh
bmdlZCgpOwotfQotCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93cjo6bG9hZGlu
Z0ZhaWxlZChNZWRpYVBsYXllcjo6TmV0d29ya1N0YXRlIGVycm9yKQotewotICAgIGlmIChtX25l
dHdvcmtTdGF0ZSAhPSBlcnJvcikgewotICAgICAgICBHU1RfV0FSTklORygiTG9hZGluZyBmYWls
ZWQsIGVycm9yOiAlZCIsIGVycm9yKTsKLSAgICAgICAgbV9uZXR3b3JrU3RhdGUgPSBlcnJvcjsK
LSAgICAgICAgbV9wbGF5ZXItPm5ldHdvcmtTdGF0ZUNoYW5nZWQoKTsKLSAgICB9Ci0gICAgaWYg
KG1fcmVhZHlTdGF0ZSAhPSBNZWRpYVBsYXllcjo6SGF2ZU5vdGhpbmcpIHsKLSAgICAgICAgbV9y
ZWFkeVN0YXRlID0gTWVkaWFQbGF5ZXI6OkhhdmVOb3RoaW5nOwotICAgICAgICBtX3BsYXllci0+
cmVhZHlTdGF0ZUNoYW5nZWQoKTsKLSAgICB9Ci19Ci0KLWJvb2wgTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyT3dyOjpkaWRMb2FkaW5nUHJvZ3Jlc3MoKSBjb25zdAotewotICAgIC8vIEZJWE1F
OiBJbXBsZW1lbnQgbG9hZGluZyBwcm9ncmVzcyBzdXBwb3J0LgotICAgIHJldHVybiB0cnVlOwot
fQotCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93cjo6ZGlzYWJsZU1lZGlhVHJh
Y2tzKCkKLXsKLSAgICBpZiAobV9hdWRpb1RyYWNrKSB7Ci0gICAgICAgIEdTVF9ERUJVRygiU3Rv
cDogZGlzY29ubmVjdGluZyBhdWRpbyIpOwotICAgICAgICBnX29iamVjdF9zZXQobV9hdWRpb1Jl
bmRlcmVyLmdldCgpLCAiZGlzYWJsZWQiLCB0cnVlLCBudWxscHRyKTsKLSAgICAgICAgb3dyX21l
ZGlhX3JlbmRlcmVyX3NldF9zb3VyY2UoT1dSX01FRElBX1JFTkRFUkVSKG1fYXVkaW9SZW5kZXJl
ci5nZXQoKSksIG51bGxwdHIpOwotICAgIH0KLQotICAgIGlmIChtX3ZpZGVvVHJhY2spIHsKLSAg
ICAgICAgR1NUX0RFQlVHKCJTdG9wOiBkaXNjb25uZWN0aW5nIHZpZGVvIik7Ci0gICAgICAgIGdf
b2JqZWN0X3NldChtX3ZpZGVvUmVuZGVyZXIuZ2V0KCksICJkaXNhYmxlZCIsIHRydWUsIG51bGxw
dHIpOwotICAgICAgICBvd3JfbWVkaWFfcmVuZGVyZXJfc2V0X3NvdXJjZShPV1JfTUVESUFfUkVO
REVSRVIobV92aWRlb1JlbmRlcmVyLmdldCgpKSwgbnVsbHB0cik7Ci0gICAgfQotfQotCi12b2lk
IE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93cjo6c3RvcCgpCi17Ci0gICAgZGlzYWJsZU1l
ZGlhVHJhY2tzKCk7Ci0gICAgaWYgKG1fdmlkZW9UcmFjaykgewotICAgICAgICBhdXRvIHZpZGVv
VHJhY2sgPSBtX3ZpZGVvVHJhY2tNYXAuZ2V0KG1fdmlkZW9UcmFjay0+aWQoKSk7Ci0gICAgICAg
IGlmICh2aWRlb1RyYWNrKQotICAgICAgICAgICAgdmlkZW9UcmFjay0+c2V0U2VsZWN0ZWQoZmFs
c2UpOwotICAgIH0KLX0KLQotdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3I6OnJl
Z2lzdGVyTWVkaWFFbmdpbmUoTWVkaWFFbmdpbmVSZWdpc3RyYXIgcmVnaXN0cmFyKQotewotICAg
IGlmIChpbml0aWFsaXplR1N0cmVhbWVyQW5kR1N0cmVhbWVyRGVidWdnaW5nKCkpIHsKLSAgICAg
ICAgcmVnaXN0cmFyKFtdKE1lZGlhUGxheWVyKiBwbGF5ZXIpIHsKLSAgICAgICAgICAgIHJldHVy
biBzdGQ6Om1ha2VfdW5pcXVlPE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93cj4ocGxheWVy
KTsKLSAgICAgICAgfSwgZ2V0U3VwcG9ydGVkVHlwZXMsIHN1cHBvcnRzVHlwZSwgbnVsbHB0ciwg
bnVsbHB0ciwgbnVsbHB0ciwgbnVsbHB0cik7Ci0gICAgfQotfQotCi12b2lkIE1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lck93cjo6Z2V0U3VwcG9ydGVkVHlwZXMoSGFzaFNldDxTdHJpbmcsIEFT
Q0lJQ2FzZUluc2Vuc2l0aXZlSGFzaD4mIHR5cGVzKQotewotICAgIC8vIE5vdCBzdXBwb3J0ZWQg
aW4gdGhpcyBtZWRpYSBwbGF5ZXIuCi0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEhhc2hTZXQ8
U3RyaW5nLCBBU0NJSUNhc2VJbnNlbnNpdGl2ZUhhc2g+PiBjYWNoZTsKLSAgICB0eXBlcyA9IGNh
Y2hlOwotfQotCi1NZWRpYVBsYXllcjo6U3VwcG9ydHNUeXBlIE1lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lck93cjo6c3VwcG9ydHNUeXBlKGNvbnN0IE1lZGlhRW5naW5lU3VwcG9ydFBhcmFtZXRl
cnMmIHBhcmFtZXRlcnMpCi17Ci0gICAgaWYgKHBhcmFtZXRlcnMuaXNNZWRpYVN0cmVhbSkKLSAg
ICAgICAgcmV0dXJuIE1lZGlhUGxheWVyOjpJc1N1cHBvcnRlZDsKLSAgICByZXR1cm4gTWVkaWFQ
bGF5ZXI6OklzTm90U3VwcG9ydGVkOwotfQotCi1ib29sIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lck93cjo6aW5pdGlhbGl6ZUdTdHJlYW1lckFuZEdTdHJlYW1lckRlYnVnZ2luZygpCi17Ci0g
ICAgaWYgKCFpbml0aWFsaXplR1N0cmVhbWVyKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBkZWJ1Z1JlZ2lzdGVyZWRGbGFnOwotICAgIHN0ZDo6
Y2FsbF9vbmNlKGRlYnVnUmVnaXN0ZXJlZEZsYWcsIFtdIHsKLSAgICAgICAgR1NUX0RFQlVHX0NB
VEVHT1JZX0lOSVQod2Via2l0X29wZW53ZWJydGNfZGVidWcsICJ3ZWJraXRvd3JwbGF5ZXIiLCAw
LCAiV2ViS2l0IE9wZW5XZWJSVEMgcGxheWVyIik7Ci0gICAgfSk7Ci0KLSAgICByZXR1cm4gdHJ1
ZTsKLX0KLQotdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3I6OmNyZWF0ZUdTVEF1
ZGlvU2lua0JpbigpCi17Ci0gICAgQVNTRVJUKCFtX2F1ZGlvU2luayk7Ci0gICAgR1NUX0RFQlVH
KCJDcmVhdGluZyBhdWRpbyBzaW5rIik7Ci0gICAgLy8gRklYTUU6IHZvbHVtZS9tdXRlIHN1cHBv
cnQ6IGh0dHBzOi8vd2Via2l0Lm9yZy9iLzE1MzgyOC4KLQotICAgIC8vIFByZS1yb2xsIGFuIGF1
dG9hdWRpb3Npbmsgc28gdGhhdCB0aGUgcGxhdGZvcm0gYXVkaW8gc2luayBpcyBjcmVhdGVkIGFu
ZAotICAgIC8vIGNhbiBiZSByZXRyaWV2ZWQgZnJvbSB0aGUgYXV0b2F1ZGlvc2luayBiaW4uCi0g
ICAgR1JlZlB0cjxHc3RFbGVtZW50PiBzaW5rID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlKCJh
dXRvYXVkaW9zaW5rIiwgbnVsbHB0cik7Ci0gICAgR3N0Q2hpbGRQcm94eSogY2hpbGRQcm94eSA9
IEdTVF9DSElMRF9QUk9YWShzaW5rLmdldCgpKTsKLSAgICBnc3RfZWxlbWVudF9zZXRfc3RhdGUo
c2luay5nZXQoKSwgR1NUX1NUQVRFX1JFQURZKTsKLSAgICBHUmVmUHRyPEdzdEVsZW1lbnQ+IHBs
YXRmb3JtU2luayA9IGFkb3B0R1JlZihHU1RfRUxFTUVOVChnc3RfY2hpbGRfcHJveHlfZ2V0X2No
aWxkX2J5X2luZGV4KGNoaWxkUHJveHksIDApKSk7Ci0gICAgR3N0RWxlbWVudEZhY3RvcnkqIGZh
Y3RvcnkgPSBnc3RfZWxlbWVudF9nZXRfZmFjdG9yeShwbGF0Zm9ybVNpbmsuZ2V0KCkpOwotCi0g
ICAgLy8gRGlzcG9zZSBub3cgdW4tbmVlZGVkIGF1dG9hdWRpb3NpbmsuCi0gICAgZ3N0X2VsZW1l
bnRfc2V0X3N0YXRlKHNpbmsuZ2V0KCksIEdTVF9TVEFURV9OVUxMKTsKLQotICAgIC8vIENyZWF0
ZSBhIGZyZXNoIG5ldyBhdWRpbyBzaW5rIGNvbXBhdGlibGUgd2l0aCB0aGUgcGxhdGZvcm0uCi0g
ICAgbV9hdWRpb1NpbmsgPSBnc3RfZWxlbWVudF9mYWN0b3J5X2NyZWF0ZShmYWN0b3J5LCBudWxs
cHRyKTsKLSAgICBtX2F1ZGlvUmVuZGVyZXIgPSBhZG9wdEdSZWYob3dyX2dzdF9hdWRpb19yZW5k
ZXJlcl9uZXcobV9hdWRpb1NpbmsuZ2V0KCkpKTsKLX0KLQotdm9pZCBNZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXJPd3I6OnRyYWNrRW5kZWQoTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUmIHRyYWNr
KQotewotICAgIEdTVF9ERUJVRygiVHJhY2sgZW5kZWQiKTsKLQotICAgIGlmICghbV9zdHJlYW1Q
cml2YXRlIHx8ICFtX3N0cmVhbVByaXZhdGUtPmFjdGl2ZSgpKSB7Ci0gICAgICAgIHN0b3AoKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICgmdHJhY2sgPT0gbV9hdWRpb1RyYWNr
KQotICAgICAgICBnX29iamVjdF9zZXQobV9hdWRpb1JlbmRlcmVyLmdldCgpLCAiZGlzYWJsZWQi
LCB0cnVlLCBudWxscHRyKTsKLSAgICBlbHNlIGlmICgmdHJhY2sgPT0gbV92aWRlb1RyYWNrKSB7
Ci0gICAgICAgIGdfb2JqZWN0X3NldChtX3ZpZGVvUmVuZGVyZXIuZ2V0KCksICJkaXNhYmxlZCIs
IHRydWUsIG51bGxwdHIpOwotICAgICAgICBhdXRvJiByZWFsVGltZU1lZGlhU291cmNlID0gc3Rh
dGljX2Nhc3Q8UmVhbHRpbWVNZWRpYVNvdXJjZU93ciY+KG1fdmlkZW9UcmFjay0+c291cmNlKCkp
OwotICAgICAgICByZWFsVGltZU1lZGlhU291cmNlLnNldFdpZHRoKDApOwotICAgICAgICByZWFs
VGltZU1lZGlhU291cmNlLnNldEhlaWdodCgwKTsKLSAgICAgICAgYXV0byB2aWRlb1RyYWNrID0g
bV92aWRlb1RyYWNrTWFwLmdldChtX3ZpZGVvVHJhY2stPmlkKCkpOwotICAgICAgICBpZiAodmlk
ZW9UcmFjaykKLSAgICAgICAgICAgIHZpZGVvVHJhY2stPnNldFNlbGVjdGVkKGZhbHNlKTsKLSAg
ICB9Ci0KLSAgICBnYm9vbGVhbiBhdWRpb0Rpc2FibGVkOwotICAgIGdib29sZWFuIHZpZGVvRGlz
YWJsZWQ7Ci0gICAgZ19vYmplY3RfZ2V0KG1fYXVkaW9SZW5kZXJlci5nZXQoKSwgImRpc2FibGVk
IiwgJmF1ZGlvRGlzYWJsZWQsIG51bGxwdHIpOwotICAgIGdfb2JqZWN0X2dldChtX3ZpZGVvUmVu
ZGVyZXIuZ2V0KCksICJkaXNhYmxlZCIsICZ2aWRlb0Rpc2FibGVkLCBudWxscHRyKTsKLSAgICBp
ZiAoYXVkaW9EaXNhYmxlZCAmJiB2aWRlb0Rpc2FibGVkKSB7Ci0gICAgICAgIG1fZW5kZWQgPSB0
cnVlOwotICAgICAgICBtX3BsYXllci0+dGltZUNoYW5nZWQoKTsKLSAgICB9Ci19Ci0KLXZvaWQg
TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyOjp0cmFja011dGVkQ2hhbmdlZChNZWRpYVN0
cmVhbVRyYWNrUHJpdmF0ZSYgdHJhY2spCi17Ci0gICAgR1NUX0RFQlVHKCJUcmFjayBtdXRlZCBz
dGF0ZSBjaGFuZ2VkIik7Ci0KLSAgICBtYXliZUhhbmRsZUNoYW5nZU11dGVkU3RhdGUodHJhY2sp
OwotfQotCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93cjo6bWF5YmVIYW5kbGVD
aGFuZ2VNdXRlZFN0YXRlKE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlJiB0cmFjaykKLXsKLSAgICBh
dXRvJiByZWFsVGltZU1lZGlhU291cmNlID0gc3RhdGljX2Nhc3Q8UmVhbHRpbWVNZWRpYVNvdXJj
ZU93ciY+KHRyYWNrLnNvdXJjZSgpKTsKLSAgICBhdXRvIG1lZGlhU291cmNlID0gT1dSX01FRElB
X1NPVVJDRShyZWFsVGltZU1lZGlhU291cmNlLm1lZGlhU291cmNlKCkpOwotCi0gICAgR1NUX0RF
QlVHKCIlcyB0cmFjayBub3cgJXMiLCB0cmFjay50eXBlKCkgPT0gUmVhbHRpbWVNZWRpYVNvdXJj
ZTo6VHlwZTo6QXVkaW8gPyAiYXVkaW8iOiJ2aWRlbyIsIHJlYWxUaW1lTWVkaWFTb3VyY2UubXV0
ZWQoKSA/ICJtdXRlZCI6InVuLW11dGVkIik7Ci0gICAgc3dpdGNoICh0cmFjay50eXBlKCkpIHsK
LSAgICBjYXNlIFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGU6OkF1ZGlvOgotICAgICAgICBpZiAo
IXJlYWxUaW1lTWVkaWFTb3VyY2UubXV0ZWQoKSkgewotICAgICAgICAgICAgZ19vYmplY3Rfc2V0
KG1fYXVkaW9SZW5kZXJlci5nZXQoKSwgImRpc2FibGVkIiwgZmFsc2UsIG51bGxwdHIpOwotICAg
ICAgICAgICAgb3dyX21lZGlhX3JlbmRlcmVyX3NldF9zb3VyY2UoT1dSX01FRElBX1JFTkRFUkVS
KG1fYXVkaW9SZW5kZXJlci5nZXQoKSksIG1lZGlhU291cmNlKTsKLSAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgIGdfb2JqZWN0X3NldChtX2F1ZGlvUmVuZGVyZXIuZ2V0KCksICJkaXNhYmxl
ZCIsIHRydWUsIG51bGxwdHIpOwotICAgICAgICAgICAgb3dyX21lZGlhX3JlbmRlcmVyX3NldF9z
b3VyY2UoT1dSX01FRElBX1JFTkRFUkVSKG1fYXVkaW9SZW5kZXJlci5nZXQoKSksIG51bGxwdHIp
OwotICAgICAgICB9Ci0gICAgICAgIGlmIChtZWRpYVNvdXJjZSkKLSAgICAgICAgICAgIGdfb2Jq
ZWN0X3NldChtZWRpYVNvdXJjZSwgIm11dGUiLCAhdHJhY2suZW5hYmxlZCgpLCBudWxscHRyKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBSZWFsdGltZU1lZGlhU291cmNlOjpUeXBlOjpWaWRl
bzoKLSAgICAgICAgaWYgKCFyZWFsVGltZU1lZGlhU291cmNlLm11dGVkKCkpIHsKLSAgICAgICAg
ICAgIGdfb2JqZWN0X3NldChtX3ZpZGVvUmVuZGVyZXIuZ2V0KCksICJkaXNhYmxlZCIsIGZhbHNl
LCBudWxscHRyKTsKLSAgICAgICAgICAgIG93cl9tZWRpYV9yZW5kZXJlcl9zZXRfc291cmNlKE9X
Ul9NRURJQV9SRU5ERVJFUihtX3ZpZGVvUmVuZGVyZXIuZ2V0KCkpLCBtZWRpYVNvdXJjZSk7Ci0g
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBnX29iamVjdF9zZXQobV92aWRlb1JlbmRlcmVy
LmdldCgpLCAiZGlzYWJsZWQiLCB0cnVlLCBudWxscHRyKTsKLSAgICAgICAgICAgIG93cl9tZWRp
YV9yZW5kZXJlcl9zZXRfc291cmNlKE9XUl9NRURJQV9SRU5ERVJFUihtX3ZpZGVvUmVuZGVyZXIu
Z2V0KCkpLCBudWxscHRyKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICBjYXNlIFJl
YWx0aW1lTWVkaWFTb3VyY2U6OlR5cGU6Ok5vbmU6Ci0gICAgICAgIEdTVF9XQVJOSU5HKCJUcnlp
bmcgdG8gY2hhbmdlIG11dGUgc3RhdGUgb2YgYSB0cmFjayB3aXRoIE5vbmUgdHlwZSIpOwotICAg
IH0KLX0KLQotdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3I6OnRyYWNrU2V0dGlu
Z3NDaGFuZ2VkKE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlJikKLXsKLSAgICBHU1RfREVCVUcoIlRy
YWNrIHNldHRpbmdzIGNoYW5nZWQiKTsKLX0KLQotdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXJPd3I6OnRyYWNrRW5hYmxlZENoYW5nZWQoTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUmIHRy
YWNrKQotewotICAgIEdTVF9ERUJVRygiJXMgdHJhY2sgbm93ICVzIiwgdHJhY2sudHlwZSgpID09
IFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGU6OkF1ZGlvID8gImF1ZGlvIjoidmlkZW8iLCB0cmFj
ay5lbmFibGVkKCkgPyAiZW5hYmxlZCI6ImRpc2FibGVkIik7Ci0KLSAgICBzd2l0Y2ggKHRyYWNr
LnR5cGUoKSkgewotICAgIGNhc2UgUmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlwZTo6QXVkaW86Ci0g
ICAgICAgIGdfb2JqZWN0X3NldChtX2F1ZGlvUmVuZGVyZXIuZ2V0KCksICJkaXNhYmxlZCIsICF0
cmFjay5lbmFibGVkKCksIG51bGxwdHIpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFJlYWx0
aW1lTWVkaWFTb3VyY2U6OlR5cGU6OlZpZGVvOgotICAgICAgICBnX29iamVjdF9zZXQobV92aWRl
b1JlbmRlcmVyLmdldCgpLCAiZGlzYWJsZWQiLCAhdHJhY2suZW5hYmxlZCgpLCBudWxscHRyKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBSZWFsdGltZU1lZGlhU291cmNlOjpUeXBlOjpOb25l
OgotICAgICAgICBHU1RfV0FSTklORygiVHJ5aW5nIHRvIGNoYW5nZSBlbmFibGVkIHN0YXRlIG9m
IGEgdHJhY2sgd2l0aCBOb25lIHR5cGUiKTsKLSAgICB9Ci19Ci0KLUdzdEVsZW1lbnQqIE1lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lck93cjo6Y3JlYXRlVmlkZW9TaW5rKCkKLXsKLSAgICBHc3RF
bGVtZW50KiBzaW5rOwotI2lmIFVTRShHU1RSRUFNRVJfR0wpCi0gICAgLy8gTm8gbmVlZCB0byBj
cmVhdGUgZ2x1cGxvYWQgYW5kIGdsY29sb3Jjb252ZXJ0IGhlcmUgYmVjYXVzZSB0aGV5IGFyZQot
ICAgIC8vIGFscmVhZHkgY3JlYXRlZCBieSB0aGUgdmlkZW8gcmVuZGVyZXIuCi0gICAgLy8gRklY
TUU6IFRoaXMgc2hvdWxkIHByb2JhYmx5IHJldHVybiBhIFJlZlB0ci4gU2VlIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjQ3MDkuCi0gICAgc2luayA9IE1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6OmNyZWF0ZUdMQXBwU2luaygpOwotICAgIG1fdmlkZW9T
aW5rID0gc2luazsKLSNlbHNlCi0gICAgaWYgKG1fc3RyZWFtUHJpdmF0ZS0+Z2V0VmlkZW9SZW5k
ZXJlcigpKSB7Ci0gICAgICAgIG1fdmlkZW9SZW5kZXJlciA9IG1fc3RyZWFtUHJpdmF0ZS0+Z2V0
VmlkZW9SZW5kZXJlcigpOwotICAgICAgICBtX3ZpZGVvU2luayA9IG1fc3RyZWFtUHJpdmF0ZS0+
Z2V0VmlkZW9TaW5rRWxlbWVudCgpOwotICAgICAgICBnX3NpZ25hbF9jb25uZWN0X3N3YXBwZWQo
bV92aWRlb1NpbmsuZ2V0KCksICJyZXBhaW50LXJlcXVlc3RlZCIsIEdfQ0FMTEJBQ0soTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6cmVwYWludENhbGxiYWNrKSwgdGhpcyk7Ci0gICAg
ICAgIGdfb2JqZWN0X2dldChtX3ZpZGVvUmVuZGVyZXIuZ2V0KCksICJzaW5rIiwgJnNpbmssIG51
bGxwdHIpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIEdzdEVsZW1lbnQqIGdsZG93bmxvYWQgPSBn
c3RfZWxlbWVudF9mYWN0b3J5X21ha2UoImdsZG93bmxvYWQiLCBudWxscHRyKTsKLSAgICAgICAg
R3N0RWxlbWVudCogdmlkZW9jb252ZXJ0ID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlKCJ2aWRl
b2NvbnZlcnQiLCBudWxscHRyKTsKLSAgICAgICAgR3N0RWxlbWVudCogd2Via2l0U2luayA9IE1l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6OmNyZWF0ZVZpZGVvU2luaygpOwotICAgICAg
ICBzaW5rID0gZ3N0X2Jpbl9uZXcobnVsbHB0cik7Ci0gICAgICAgIGdzdF9iaW5fYWRkX21hbnko
R1NUX0JJTihzaW5rKSwgZ2xkb3dubG9hZCwgdmlkZW9jb252ZXJ0LCB3ZWJraXRTaW5rLCBudWxs
cHRyKTsKLSAgICAgICAgZ3N0X2VsZW1lbnRfbGlua19tYW55KGdsZG93bmxvYWQsIHZpZGVvY29u
dmVydCwgd2Via2l0U2luaywgbnVsbHB0cik7Ci0gICAgICAgIEdSZWZQdHI8R3N0UGFkPiBwYWQg
PSBhZG9wdEdSZWYoZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQoZ2xkb3dubG9hZCwgInNpbmsi
KSk7Ci0gICAgICAgIGdzdF9lbGVtZW50X2FkZF9wYWQoc2luaywgZ3N0X2dob3N0X3BhZF9uZXco
InNpbmsiLCBwYWQuZ2V0KCkpKTsKLSAgICB9Ci0jZW5kaWYKLSAgICBpZiAoIW1fdmlkZW9SZW5k
ZXJlcikgewotICAgICAgICBtX3ZpZGVvUmVuZGVyZXIgPSBhZG9wdEdSZWYob3dyX2dzdF92aWRl
b19yZW5kZXJlcl9uZXcoc2luaykpOwotI2lmIFVTRShHU1RSRUFNRVJfR0wpCi0gICAgICAgIG93
cl92aWRlb19yZW5kZXJlcl9zZXRfcmVxdWVzdF9jb250ZXh0X2NhbGxiYWNrKE9XUl9WSURFT19S
RU5ERVJFUihtX3ZpZGVvUmVuZGVyZXIuZ2V0KCkpLCAoT3dyVmlkZW9SZW5kZXJlclJlcXVlc3RD
b250ZXh0Q2FsbGJhY2spIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6OnJlcXVlc3RH
TENvbnRleHQsIHRoaXMsIG51bGxwdHIpOwotI2VuZGlmCi0gICAgICAgIG1fc3RyZWFtUHJpdmF0
ZS0+c2V0VmlkZW9SZW5kZXJlcihtX3ZpZGVvUmVuZGVyZXIuZ2V0KCksIHZpZGVvU2luaygpKTsK
LSAgICB9Ci0gICAgcmV0dXJuIHNpbms7Ci19Ci0KLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyT3dyOjpzZXRTaXplKGNvbnN0IEludFNpemUmIHNpemUpCi17Ci0gICAgaWYgKHNpemUg
PT0gbV9zaXplKQotICAgICAgICByZXR1cm47Ci0KLSAgICBNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXJCYXNlOjpzZXRTaXplKHNpemUpOwotICAgIGlmIChtX3ZpZGVvUmVuZGVyZXIpCi0gICAg
ICAgIGdfb2JqZWN0X3NldChtX3ZpZGVvUmVuZGVyZXIuZ2V0KCksICJ3aWR0aCIsIHNpemUud2lk
dGgoKSwgImhlaWdodCIsIHNpemUuaGVpZ2h0KCksIG51bGxwdHIpOwotCi0gICAgaWYgKCFtX3Zp
ZGVvVHJhY2spCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8mIHJlYWxUaW1lTWVkaWFTb3Vy
Y2UgPSBzdGF0aWNfY2FzdDxSZWFsdGltZU1lZGlhU291cmNlT3dyJj4obV92aWRlb1RyYWNrLT5z
b3VyY2UoKSk7Ci0gICAgcmVhbFRpbWVNZWRpYVNvdXJjZS5zZXRXaWR0aChzaXplLndpZHRoKCkp
OwotICAgIHJlYWxUaW1lTWVkaWFTb3VyY2Uuc2V0SGVpZ2h0KHNpemUuaGVpZ2h0KCkpOwotfQot
Ci1GbG9hdFNpemUgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyOjpuYXR1cmFsU2l6ZSgp
IGNvbnN0Ci17Ci0gICAgYXV0byBzaXplID0gTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFz
ZTo6bmF0dXJhbFNpemUoKTsKLQotICAgIC8vIEluIGNhc2Ugd2UgYXJlIG5vdCBwbGF5aW5nIHRo
ZSB2aWRlbyB3ZSByZXR1cm4gdGhlIHNpemUgd2Ugc2V0IHRvIHRoZSBtZWRpYSBzb3VyY2UuCi0g
ICAgaWYgKG1fdmlkZW9UcmFjayAmJiBzaXplLmlzWmVybygpKSB7Ci0gICAgICAgIGF1dG8mIHJl
YWxUaW1lTWVkaWFTb3VyY2UgPSBzdGF0aWNfY2FzdDxSZWFsdGltZU1lZGlhU291cmNlT3dyJj4o
bV92aWRlb1RyYWNrLT5zb3VyY2UoKSk7Ci0gICAgICAgIHJldHVybiByZWFsVGltZU1lZGlhU291
cmNlLnNpemUoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gc2l6ZTsKLX0KLQotfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKFZJREVPKSAmJiBFTkFCTEUoTUVESUFfU1RS
RUFNKSAmJiBVU0UoR1NUUkVBTUVSKSAmJiBVU0UoT1BFTldFQlJUQykKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXJPd3IuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJl
YW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3IuaApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMzM0NjMwZTQ1YzM0ODFiYTdkNDJmNTY2MzdlMGRhYTA1MTU0YmQyZi4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
T3dyLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMjggKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQg
KEMpIDIwMTUgSWdhbGlhIFMuTC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqICBDb3B5cmlnaHQg
KEMpIDIwMTUgTWV0cm9sb2dpY2FsLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqICBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
Ci0gKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFs
IFB1YmxpYwotICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgotICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAgYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
LSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQotICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiAgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIx
MTAtMTMwMSAgVVNBCi0gKi8KLQotI2lmbmRlZiBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJP
d3JfaAotI2RlZmluZSBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3JfaAotCi0jaWYgRU5B
QkxFKFZJREVPKSAmJiBFTkFCTEUoTUVESUFfU1RSRUFNKSAmJiBVU0UoR1NUUkVBTUVSKSAmJiBV
U0UoT1BFTldFQlJUQykKLQotI2luY2x1ZGUgIkF1ZGlvVHJhY2tQcml2YXRlTWVkaWFTdHJlYW0u
aCIKLSNpbmNsdWRlICJNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlLmgiCi0jaW5jbHVk
ZSAiTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUuaCIKLSNpbmNsdWRlICJWaWRlb1RyYWNrUHJpdmF0
ZU1lZGlhU3RyZWFtLmgiCi0KLXR5cGVkZWYgc3RydWN0IF9Pd3JHc3RWaWRlb1JlbmRlcmVyIE93
ckdzdFZpZGVvUmVuZGVyZXI7Ci10eXBlZGVmIHN0cnVjdCBfT3dyR3N0QXVkaW9SZW5kZXJlciBP
d3JHc3RBdWRpb1JlbmRlcmVyOwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIE1lZGlh
U3RyZWFtUHJpdmF0ZTsKLWNsYXNzIFJlYWx0aW1lTWVkaWFTb3VyY2VPd3I7Ci0KLWNsYXNzIE1l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93ciA6IHB1YmxpYyBNZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXJCYXNlLCBwcml2YXRlIE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlOjpPYnNlcnZlciB7
Ci1wdWJsaWM6Ci0gICAgZXhwbGljaXQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyKE1l
ZGlhUGxheWVyKik7Ci0gICAgfk1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93cigpOwotCi0g
ICAgc3RhdGljIHZvaWQgcmVnaXN0ZXJNZWRpYUVuZ2luZShNZWRpYUVuZ2luZVJlZ2lzdHJhcik7
Ci0KLSAgICB2b2lkIHNldFNpemUoY29uc3QgSW50U2l6ZSYpIGZpbmFsOwotCi0gICAgRmxvYXRT
aXplIG5hdHVyYWxTaXplKCkgY29uc3QgZmluYWw7Ci0KLXByaXZhdGU6Ci0gICAgR3N0RWxlbWVu
dCogY3JlYXRlVmlkZW9TaW5rKCkgZmluYWw7Ci0gICAgR3N0RWxlbWVudCogYXVkaW9TaW5rKCkg
Y29uc3QgZmluYWwgeyByZXR1cm4gbV9hdWRpb1NpbmsuZ2V0KCk7IH0KLSAgICBib29sIGlzTGl2
ZVN0cmVhbSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHRydWU7IH0KLQotICAgIFN0cmluZyBlbmdp
bmVEZXNjcmlwdGlvbigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJPcGVuV2ViUlRDIjsgfQotCi0g
ICAgdm9pZCBsb2FkKGNvbnN0IFN0cmluZyYpIGZpbmFsOwotI2lmIEVOQUJMRShNRURJQV9TT1VS
Q0UpCi0gICAgdm9pZCBsb2FkKGNvbnN0IFN0cmluZyYsIE1lZGlhU291cmNlUHJpdmF0ZUNsaWVu
dCopIGZpbmFsOwotI2VuZGlmCi0gICAgdm9pZCBsb2FkKE1lZGlhU3RyZWFtUHJpdmF0ZSYpIGZp
bmFsOwotICAgIHZvaWQgY2FuY2VsTG9hZCgpIGZpbmFsIHsgfQotCi0gICAgdm9pZCBwcmVwYXJl
VG9QbGF5KCkgZmluYWwgeyB9Ci0gICAgdm9pZCBwbGF5KCkgZmluYWw7Ci0gICAgdm9pZCBwYXVz
ZSgpIGZpbmFsOwotCi0gICAgYm9vbCBoYXNWaWRlbygpIGNvbnN0IGZpbmFsOwotICAgIGJvb2wg
aGFzQXVkaW8oKSBjb25zdCBmaW5hbDsKLQotICAgIGZsb2F0IGR1cmF0aW9uKCkgY29uc3QgZmlu
YWwgeyByZXR1cm4gMDsgfQotCi0gICAgZmxvYXQgY3VycmVudFRpbWUoKSBjb25zdCBmaW5hbDsK
LSAgICB2b2lkIHNlZWsoZmxvYXQpIGZpbmFsIHsgfQotICAgIGJvb2wgc2Vla2luZygpIGNvbnN0
IGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9Ci0KLSAgICB2b2lkIHNldFJhdGUoZmxvYXQpIGZpbmFs
IHsgfQotICAgIHZvaWQgc2V0UHJlc2VydmVzUGl0Y2goYm9vbCkgZmluYWwgeyB9Ci0gICAgYm9v
bCBwYXVzZWQoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3BhdXNlZDsgfQotCi0gICAgdm9pZCBz
ZXRWb2x1bWUoZmxvYXQpIGZpbmFsOwotICAgIHZvaWQgc2V0TXV0ZWQoYm9vbCkgZmluYWw7Ci0K
LSAgICBib29sIGhhc0Nsb3NlZENhcHRpb25zKCkgY29uc3QgZmluYWwgeyByZXR1cm4gZmFsc2U7
IH0KLSAgICB2b2lkIHNldENsb3NlZENhcHRpb25zVmlzaWJsZShib29sKSBmaW5hbCB7IH07Ci0K
LSAgICBmbG9hdCBtYXhUaW1lU2Vla2FibGUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAwOyB9Ci0g
ICAgc3RkOjp1bmlxdWVfcHRyPFBsYXRmb3JtVGltZVJhbmdlcz4gYnVmZmVyZWQoKSBjb25zdCBm
aW5hbCB7IHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPFBsYXRmb3JtVGltZVJhbmdlcz4oKTsgfQot
ICAgIGJvb2wgZGlkTG9hZGluZ1Byb2dyZXNzKCkgY29uc3QgZmluYWw7Ci0KLSAgICB1bnNpZ25l
ZCBsb25nIGxvbmcgdG90YWxCeXRlcygpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIDA7IH0KLQotICAg
IGJvb2wgY2FuTG9hZFBvc3RlcigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAg
dm9pZCBzZXRQb3N0ZXIoY29uc3QgU3RyaW5nJikgZmluYWwgeyB9Ci0gICAgYm9vbCBlbmRlZCgp
IGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fZW5kZWQ7IH0KLQotICAgIC8vIE1lZGlhU3RyZWFtVHJh
Y2tQcml2YXRlOjpPYnNlcnZlciBpbXBsZW1lbnRhdGlvbi4KLSAgICB2b2lkIHRyYWNrRW5kZWQo
TWVkaWFTdHJlYW1UcmFja1ByaXZhdGUmKSBmaW5hbDsKLSAgICB2b2lkIHRyYWNrTXV0ZWRDaGFu
Z2VkKE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlJikgZmluYWw7Ci0gICAgdm9pZCB0cmFja1NldHRp
bmdzQ2hhbmdlZChNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZSYpIGZpbmFsOwotICAgIHZvaWQgdHJh
Y2tFbmFibGVkQ2hhbmdlZChNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZSYpIGZpbmFsOwotCi0gICAg
c3RhdGljIHZvaWQgZ2V0U3VwcG9ydGVkVHlwZXMoSGFzaFNldDxTdHJpbmcsIEFTQ0lJQ2FzZUlu
c2Vuc2l0aXZlSGFzaD4mKTsKLSAgICBzdGF0aWMgTWVkaWFQbGF5ZXI6OlN1cHBvcnRzVHlwZSBz
dXBwb3J0c1R5cGUoY29uc3QgTWVkaWFFbmdpbmVTdXBwb3J0UGFyYW1ldGVycyYpOwotICAgIHN0
YXRpYyBib29sIGluaXRpYWxpemVHU3RyZWFtZXJBbmRHU3RyZWFtZXJEZWJ1Z2dpbmcoKTsKLSAg
ICB2b2lkIGNyZWF0ZUdTVEF1ZGlvU2lua0JpbigpOwotICAgIHZvaWQgbG9hZGluZ0ZhaWxlZChN
ZWRpYVBsYXllcjo6TmV0d29ya1N0YXRlIGVycm9yKTsKLSAgICB2b2lkIHN0b3AoKTsKLSAgICB2
b2lkIG1heWJlSGFuZGxlQ2hhbmdlTXV0ZWRTdGF0ZShNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZSYp
OwotICAgIHZvaWQgZGlzYWJsZU1lZGlhVHJhY2tzKCk7Ci0KLSAgICBib29sIG1fcGF1c2VkIHsg
dHJ1ZSB9OwotICAgIGJvb2wgbV9lbmRlZCB7IGZhbHNlIH07Ci0gICAgUmVmUHRyPE1lZGlhU3Ry
ZWFtVHJhY2tQcml2YXRlPiBtX3ZpZGVvVHJhY2s7Ci0gICAgUmVmUHRyPE1lZGlhU3RyZWFtVHJh
Y2tQcml2YXRlPiBtX2F1ZGlvVHJhY2s7Ci0gICAgR1JlZlB0cjxHc3RFbGVtZW50PiBtX2F1ZGlv
U2luazsKLSAgICBSZWZQdHI8TWVkaWFTdHJlYW1Qcml2YXRlPiBtX3N0cmVhbVByaXZhdGU7Ci0g
ICAgR1JlZlB0cjxPd3JHc3RWaWRlb1JlbmRlcmVyPiBtX3ZpZGVvUmVuZGVyZXI7Ci0gICAgR1Jl
ZlB0cjxPd3JHc3RBdWRpb1JlbmRlcmVyPiBtX2F1ZGlvUmVuZGVyZXI7Ci0KLSAgICBIYXNoTWFw
PFN0cmluZywgUmVmUHRyPEF1ZGlvVHJhY2tQcml2YXRlTWVkaWFTdHJlYW0+PiBtX2F1ZGlvVHJh
Y2tNYXA7Ci0gICAgSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxWaWRlb1RyYWNrUHJpdmF0ZU1lZGlh
U3RyZWFtPj4gbV92aWRlb1RyYWNrTWFwOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQot
Ci0jZW5kaWYgLy8gRU5BQkxFKFZJREVPKSAmJiBFTkFCTEUoTUVESUFfU1RSRUFNKSAmJiBVU0Uo
R1NUUkVBTUVSKSAmJiBVU0UoT1BFTldFQlJUQykKLQotI2VuZGlmIC8vIE1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lck93cl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
ZWRpYXN0cmVhbS9NZWRpYUVuZHBvaW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21l
ZGlhc3RyZWFtL01lZGlhRW5kcG9pbnQuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCBkMTM3NWZkNGMwNDEzOGRmZTE2NWMzNTRiMjFlYTliNTYyNWZhZmJjLi4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21lZGlhc3RyZWFtL01lZGlhRW5kcG9pbnQuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsODYgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBFcmljc3NvbiBBQi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICog
ICAgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZQotICogICAgZGlzdHJpYnV0aW9uLgotICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBF
cmljc3NvbiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotICog
ICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoV0VCX1JUQykKLSNp
bmNsdWRlICJNZWRpYUVuZHBvaW50LmgiCi0KLSNpbmNsdWRlICJNZWRpYVBheWxvYWQuaCIKLSNp
bmNsdWRlICJSVENEYXRhQ2hhbm5lbEhhbmRsZXIuaCIKLSNpbmNsdWRlICJSZWFsdGltZU1lZGlh
U291cmNlLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgRW1wdHlSZWFsdGltZU1l
ZGlhU291cmNlIGZpbmFsIDogcHVibGljIFJlYWx0aW1lTWVkaWFTb3VyY2UgewotcHVibGljOgot
ICAgIHN0YXRpYyBSZWY8RW1wdHlSZWFsdGltZU1lZGlhU291cmNlPiBjcmVhdGUoKSB7IHJldHVy
biBhZG9wdFJlZigqbmV3IEVtcHR5UmVhbHRpbWVNZWRpYVNvdXJjZSgpKTsgfQotCi1wcml2YXRl
OgotICAgIEVtcHR5UmVhbHRpbWVNZWRpYVNvdXJjZSgpIDogUmVhbHRpbWVNZWRpYVNvdXJjZShl
bXB0eVN0cmluZygpLCBUeXBlOjpOb25lLCBlbXB0eVN0cmluZygpKSB7IH0KLQotICAgIGNvbnN0
IFJlYWx0aW1lTWVkaWFTb3VyY2VDYXBhYmlsaXRpZXMmIGNhcGFiaWxpdGllcygpIGNvbnN0IGZp
bmFsIHsgcmV0dXJuIFJlYWx0aW1lTWVkaWFTb3VyY2VDYXBhYmlsaXRpZXM6OmVtcHR5Q2FwYWJp
bGl0aWVzKCk7IH0KLSAgICBjb25zdCBSZWFsdGltZU1lZGlhU291cmNlU2V0dGluZ3MmIHNldHRp
bmdzKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9zb3VyY2VTZXR0aW5nczsgfQotCi0gICAgUmVh
bHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzIG1fc291cmNlU2V0dGluZ3M7Ci19OwotCi1jbGFzcyBF
bXB0eU1lZGlhRW5kcG9pbnQgZmluYWwgOiBwdWJsaWMgTWVkaWFFbmRwb2ludCB7Ci1wcml2YXRl
OgotICAgIHZvaWQgc2V0Q29uZmlndXJhdGlvbihNZWRpYUVuZHBvaW50Q29uZmlndXJhdGlvbiYm
KSBmaW5hbCB7IH0KLQotICAgIHZvaWQgZ2VuZXJhdGVEdGxzSW5mbygpIGZpbmFsIHsgfQotICAg
IE1lZGlhUGF5bG9hZFZlY3RvciBnZXREZWZhdWx0QXVkaW9QYXlsb2FkcygpIGZpbmFsIHsgcmV0
dXJuIE1lZGlhUGF5bG9hZFZlY3RvcigpOyB9Ci0gICAgTWVkaWFQYXlsb2FkVmVjdG9yIGdldERl
ZmF1bHRWaWRlb1BheWxvYWRzKCkgZmluYWwgeyByZXR1cm4gTWVkaWFQYXlsb2FkVmVjdG9yKCk7
IH0KLSAgICBNZWRpYVBheWxvYWRWZWN0b3IgZmlsdGVyUGF5bG9hZHMoY29uc3QgTWVkaWFQYXls
b2FkVmVjdG9yJiwgY29uc3QgTWVkaWFQYXlsb2FkVmVjdG9yJikgZmluYWwgeyByZXR1cm4gTWVk
aWFQYXlsb2FkVmVjdG9yKCk7IH0KLQotICAgIFVwZGF0ZVJlc3VsdCB1cGRhdGVSZWNlaXZlQ29u
ZmlndXJhdGlvbihNZWRpYUVuZHBvaW50U2Vzc2lvbkNvbmZpZ3VyYXRpb24qLCBib29sKSBmaW5h
bCB7IHJldHVybiBVcGRhdGVSZXN1bHQ6OkZhaWxlZDsgfQotICAgIFVwZGF0ZVJlc3VsdCB1cGRh
dGVTZW5kQ29uZmlndXJhdGlvbihNZWRpYUVuZHBvaW50U2Vzc2lvbkNvbmZpZ3VyYXRpb24qLCBj
b25zdCBSZWFsdGltZU1lZGlhU291cmNlTWFwJiwgYm9vbCkgZmluYWwgeyByZXR1cm4gVXBkYXRl
UmVzdWx0OjpGYWlsZWQ7IH0KLQotICAgIHZvaWQgYWRkUmVtb3RlQ2FuZGlkYXRlKGNvbnN0IElj
ZUNhbmRpZGF0ZSYsIGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYp
IGZpbmFsIHsgfQotCi0gICAgUmVmPFJlYWx0aW1lTWVkaWFTb3VyY2U+IGNyZWF0ZU11dGVkUmVt
b3RlU291cmNlKGNvbnN0IFN0cmluZyYsIFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGUpIGZpbmFs
IHsgcmV0dXJuIEVtcHR5UmVhbHRpbWVNZWRpYVNvdXJjZTo6Y3JlYXRlKCk7IH0KLSAgICB2b2lk
IHJlcGxhY2VTZW5kU291cmNlKFJlYWx0aW1lTWVkaWFTb3VyY2UmLCBjb25zdCBTdHJpbmcmKSBm
aW5hbCB7IH0KLSAgICB2b2lkIHJlcGxhY2VNdXRlZFJlbW90ZVNvdXJjZU1pZChjb25zdCBTdHJp
bmcmLCBjb25zdCBTdHJpbmcmKSBmaW5hbCB7IH07Ci0KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8UlRD
RGF0YUNoYW5uZWxIYW5kbGVyPiBjcmVhdGVEYXRhQ2hhbm5lbEhhbmRsZXIoY29uc3QgU3RyaW5n
JiwgY29uc3QgUlRDRGF0YUNoYW5uZWxJbml0JikgZmluYWwgeyByZXR1cm4gbnVsbHB0cjsgfQot
ICAgIHZvaWQgc3RvcCgpIGZpbmFsIHsgfQotfTsKLQotc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxN
ZWRpYUVuZHBvaW50PiBjcmVhdGVNZWRpYUVuZHBvaW50KE1lZGlhRW5kcG9pbnRDbGllbnQmKQot
ewotICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPEVtcHR5TWVkaWFFbmRwb2ludD4oKTsKLX0K
LQotQ3JlYXRlTWVkaWFFbmRwb2ludCBNZWRpYUVuZHBvaW50OjpjcmVhdGUgPSBjcmVhdGVNZWRp
YUVuZHBvaW50OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUo
V0VCX1JUQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFt
L01lZGlhRW5kcG9pbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL01l
ZGlhRW5kcG9pbnQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTFiNTFkNGUwOGEz
ZGQzZWZiMDlhMDExZTMyOTc0ZDI4Yjc5ZGY3OC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9N
ZWRpYUVuZHBvaW50LmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMDggKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxNSBFcmljc3NvbiBBQi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqICAgIGluIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqICAgIGRp
c3RyaWJ1dGlvbi4KLSAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgRXJpY3Nzb24gbm9yIHRoZSBu
YW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0gKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSAqICAgIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
LSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdt
YSBvbmNlCi0KLSNpZiBFTkFCTEUoV0VCX1JUQykKLQotI2luY2x1ZGUgIk1lZGlhRW5kcG9pbnRD
b25maWd1cmF0aW9uLmgiCi0jaW5jbHVkZSAiUGVlckNvbm5lY3Rpb25CYWNrZW5kLmgiCi0jaW5j
bHVkZSAiUlRDSWNlVHJhbnNwb3J0U3RhdGUuaCIKLSNpbmNsdWRlICJSZWFsdGltZU1lZGlhU291
cmNlLmgiCi0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZT
dHJpbmcuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBNZWRpYUVuZHBvaW50Owot
Y2xhc3MgTWVkaWFFbmRwb2ludENsaWVudDsKLWNsYXNzIE1lZGlhRW5kcG9pbnRTZXNzaW9uQ29u
ZmlndXJhdGlvbjsKLWNsYXNzIE1lZGlhU3RyZWFtVHJhY2s7Ci1jbGFzcyBSVENEYXRhQ2hhbm5l
bEhhbmRsZXI7Ci1jbGFzcyBSZWFsdGltZU1lZGlhU291cmNlOwotCi1zdHJ1Y3QgSWNlQ2FuZGlk
YXRlOwotc3RydWN0IE1lZGlhUGF5bG9hZDsKLXN0cnVjdCBSVENEYXRhQ2hhbm5lbEluaXQ7Ci0K
LXR5cGVkZWYgc3RkOjp1bmlxdWVfcHRyPE1lZGlhRW5kcG9pbnQ+ICgqQ3JlYXRlTWVkaWFFbmRw
b2ludCkoTWVkaWFFbmRwb2ludENsaWVudCYpOwotdHlwZWRlZiBWZWN0b3I8TWVkaWFQYXlsb2Fk
PiBNZWRpYVBheWxvYWRWZWN0b3I7Ci10eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBSZWFsdGltZU1l
ZGlhU291cmNlKj4gUmVhbHRpbWVNZWRpYVNvdXJjZU1hcDsKLQotY2xhc3MgTWVkaWFFbmRwb2lu
dCB7Ci1wdWJsaWM6Ci0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIENyZWF0ZU1lZGlhRW5kcG9p
bnQgY3JlYXRlOwotICAgIHZpcnR1YWwgfk1lZGlhRW5kcG9pbnQoKSB7IH0KLQotICAgIGVudW0g
Y2xhc3MgVXBkYXRlUmVzdWx0IHsKLSAgICAgICAgU3VjY2VzcywKLSAgICAgICAgU3VjY2Vzc1dp
dGhJY2VSZXN0YXJ0LAotICAgICAgICBGYWlsZWQKLSAgICB9OwotCi0gICAgdmlydHVhbCB2b2lk
IHNldENvbmZpZ3VyYXRpb24oTWVkaWFFbmRwb2ludENvbmZpZ3VyYXRpb24mJikgPSAwOwotCi0g
ICAgdmlydHVhbCB2b2lkIGdlbmVyYXRlRHRsc0luZm8oKSA9IDA7Ci0gICAgdmlydHVhbCBNZWRp
YVBheWxvYWRWZWN0b3IgZ2V0RGVmYXVsdEF1ZGlvUGF5bG9hZHMoKSA9IDA7Ci0gICAgdmlydHVh
bCBNZWRpYVBheWxvYWRWZWN0b3IgZ2V0RGVmYXVsdFZpZGVvUGF5bG9hZHMoKSA9IDA7Ci0gICAg
dmlydHVhbCBNZWRpYVBheWxvYWRWZWN0b3IgZmlsdGVyUGF5bG9hZHMoY29uc3QgTWVkaWFQYXls
b2FkVmVjdG9yJiByZW1vdGVQYXlsb2FkcywgY29uc3QgTWVkaWFQYXlsb2FkVmVjdG9yJiBkZWZh
dWx0UGF5bG9hZHMpID0gMDsKLQotICAgIHZpcnR1YWwgVXBkYXRlUmVzdWx0IHVwZGF0ZVJlY2Vp
dmVDb25maWd1cmF0aW9uKE1lZGlhRW5kcG9pbnRTZXNzaW9uQ29uZmlndXJhdGlvbiosIGJvb2wg
aXNJbml0aWF0b3IpID0gMDsKLSAgICB2aXJ0dWFsIFVwZGF0ZVJlc3VsdCB1cGRhdGVTZW5kQ29u
ZmlndXJhdGlvbihNZWRpYUVuZHBvaW50U2Vzc2lvbkNvbmZpZ3VyYXRpb24qLCBjb25zdCBSZWFs
dGltZU1lZGlhU291cmNlTWFwJiwgYm9vbCBpc0luaXRpYXRvcikgPSAwOwotCi0gICAgdmlydHVh
bCB2b2lkIGFkZFJlbW90ZUNhbmRpZGF0ZShjb25zdCBJY2VDYW5kaWRhdGUmLCBjb25zdCBTdHJp
bmcmIG1pZCwgY29uc3QgU3RyaW5nJiB1ZnJhZywgY29uc3QgU3RyaW5nJiBwYXNzd29yZCkgPSAw
OwotCi0gICAgdmlydHVhbCBSZWY8UmVhbHRpbWVNZWRpYVNvdXJjZT4gY3JlYXRlTXV0ZWRSZW1v
dGVTb3VyY2UoY29uc3QgU3RyaW5nJiBtaWQsIFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGUpID0g
MDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVwbGFjZVNlbmRTb3VyY2UoUmVhbHRpbWVNZWRpYVNvdXJj
ZSYsIGNvbnN0IFN0cmluZyYgbWlkKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlcGxhY2VNdXRl
ZFJlbW90ZVNvdXJjZU1pZChjb25zdCBTdHJpbmcmIG9sZE1pZCwgY29uc3QgU3RyaW5nJiBuZXdN
aWQpID0gMDsKLQotICAgIHZpcnR1YWwgc3RkOjp1bmlxdWVfcHRyPFJUQ0RhdGFDaGFubmVsSGFu
ZGxlcj4gY3JlYXRlRGF0YUNoYW5uZWxIYW5kbGVyKGNvbnN0IFN0cmluZyYsIGNvbnN0IFJUQ0Rh
dGFDaGFubmVsSW5pdCYpID0gMDsKLQotICAgIHZpcnR1YWwgdm9pZCBzdG9wKCkgPSAwOwotCi0g
ICAgdmlydHVhbCB2b2lkIGVtdWxhdGVQbGF0Zm9ybUV2ZW50KGNvbnN0IFN0cmluZyYpIHsgfTsK
LQotICAgIHZpcnR1YWwgdm9pZCBnZXRTdGF0cyhNZWRpYVN0cmVhbVRyYWNrKiwgUGVlckNvbm5l
Y3Rpb246OlN0YXRzUHJvbWlzZSYmIHByb21pc2UpIHsgcHJvbWlzZS5yZWplY3QoTm90U3VwcG9y
dGVkRXJyb3IpOyB9Ci19OwotCi1jbGFzcyBNZWRpYUVuZHBvaW50Q2xpZW50IHsKLXB1YmxpYzoK
LSAgICB2aXJ0dWFsIHZvaWQgZ290RHRsc0ZpbmdlcnByaW50KGNvbnN0IFN0cmluZyYgZmluZ2Vy
cHJpbnQsIGNvbnN0IFN0cmluZyYgZmluZ2VycHJpbnRGdW5jdGlvbikgPSAwOwotICAgIHZpcnR1
YWwgdm9pZCBnb3RJY2VDYW5kaWRhdGUoY29uc3QgU3RyaW5nJiBtaWQsIEljZUNhbmRpZGF0ZSYm
KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRvbmVHYXRoZXJpbmdDYW5kaWRhdGVzKGNvbnN0IFN0
cmluZyYgbWlkKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGljZVRyYW5zcG9ydFN0YXRlQ2hhbmdl
ZChjb25zdCBTdHJpbmcmIG1pZCwgUlRDSWNlVHJhbnNwb3J0U3RhdGUpID0gMDsKLQotICAgIHZp
cnR1YWwgfk1lZGlhRW5kcG9pbnRDbGllbnQoKSB7IH0KLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShXRUJfUlRDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFFbmRwb2ludFNlc3Npb25Db25maWd1cmF0
aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYUVuZHBvaW50
U2Vzc2lvbkNvbmZpZ3VyYXRpb24uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmYy
YmQxZThiOTdjNGU3ODk5MTkxMzEzZGEyYThmZWYyYmIzOGVkOS4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRp
YXN0cmVhbS9NZWRpYUVuZHBvaW50U2Vzc2lvbkNvbmZpZ3VyYXRpb24uaAorKysgL2Rldi9udWxs
CkBAIC0xLDkzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgRXJpY3Nzb24gQUIu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIKLSAqICAgIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqICAgIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIE5laXRoZXIg
dGhlIG5hbWUgb2YgRXJpY3Nzb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0g
KiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tIHRoaXMKLSAqICAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
LSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBNZWRpYUVuZHBvaW50U2Vzc2lvbkNvbmZp
Z3VyYXRpb25faAotI2RlZmluZSBNZWRpYUVuZHBvaW50U2Vzc2lvbkNvbmZpZ3VyYXRpb25faAot
Ci0jaWYgRU5BQkxFKFdFQl9SVEMpCi0KLSNpbmNsdWRlICJQZWVyQ29ubmVjdGlvblN0YXRlcy5o
IgotI2luY2x1ZGUgIlBlZXJNZWRpYURlc2NyaXB0aW9uLmgiCi0jaW5jbHVkZSA8d3RmL0NyeXB0
b2dyYXBoaWNhbGx5UmFuZG9tTnVtYmVyLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xh
c3MgTWVkaWFFbmRwb2ludFNlc3Npb25Db25maWd1cmF0aW9uIDogcHVibGljIFJlZkNvdW50ZWQ8
TWVkaWFFbmRwb2ludFNlc3Npb25Db25maWd1cmF0aW9uPiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGlj
IFJlZlB0cjxNZWRpYUVuZHBvaW50U2Vzc2lvbkNvbmZpZ3VyYXRpb24+IGNyZWF0ZSgpCi0gICAg
ewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IE1lZGlhRW5kcG9pbnRTZXNzaW9uQ29uZmln
dXJhdGlvbigpKTsKLSAgICB9Ci0gICAgdmlydHVhbCB+TWVkaWFFbmRwb2ludFNlc3Npb25Db25m
aWd1cmF0aW9uKCkgeyB9Ci0KLSAgICBpbnQ2NF90IHNlc3Npb25JZCgpIGNvbnN0IHsgcmV0dXJu
IG1fc2Vzc2lvbklkOyB9Ci0gICAgdm9pZCBzZXRTZXNzaW9uSWQoaW50NjRfdCBzZXNzaW9uSWQp
IHsgbV9zZXNzaW9uSWQgPSBzZXNzaW9uSWQ7IH0KLQotICAgIHVuc2lnbmVkIHNlc3Npb25WZXJz
aW9uKCkgY29uc3QgeyByZXR1cm4gbV9zZXNzaW9uVmVyc2lvbjsgfQotICAgIHZvaWQgc2V0U2Vz
c2lvblZlcnNpb24odW5zaWduZWQgc2Vzc2lvblZlcnNpb24pIHsgbV9zZXNzaW9uVmVyc2lvbiA9
IHNlc3Npb25WZXJzaW9uOyB9Ci0KLSAgICBWZWN0b3I8UGVlck1lZGlhRGVzY3JpcHRpb24+JiBt
ZWRpYURlc2NyaXB0aW9ucygpIHsgcmV0dXJuIG1fbWVkaWFEZXNjcmlwdGlvbnM7IH0KLSAgICBj
b25zdCBWZWN0b3I8UGVlck1lZGlhRGVzY3JpcHRpb24+JiBtZWRpYURlc2NyaXB0aW9ucygpIGNv
bnN0IHsgcmV0dXJuIG1fbWVkaWFEZXNjcmlwdGlvbnM7IH0KLSAgICB2b2lkIGFkZE1lZGlhRGVz
Y3JpcHRpb24oUGVlck1lZGlhRGVzY3JpcHRpb24mJiBkZXNjcmlwdGlvbikgeyBtX21lZGlhRGVz
Y3JpcHRpb25zLmFwcGVuZChXVEZNb3ZlKGRlc2NyaXB0aW9uKSk7IH0KLQotICAgIFBlZXJDb25u
ZWN0aW9uU3RhdGVzOjpCdW5kbGVQb2xpY3kgYnVuZGxlUG9saWN5KCkgY29uc3QgeyByZXR1cm4g
bV9idW5kbGVQb2xpY3k7IH0KLSAgICB2b2lkIHNldEJ1bmRsZVBvbGljeShQZWVyQ29ubmVjdGlv
blN0YXRlczo6QnVuZGxlUG9saWN5IGJ1bmRsZVBvbGljeSkgeyBtX2J1bmRsZVBvbGljeSA9IGJ1
bmRsZVBvbGljeTsgfQotCi0gICAgUmVmUHRyPE1lZGlhRW5kcG9pbnRTZXNzaW9uQ29uZmlndXJh
dGlvbj4gY2xvbmUoKSBjb25zdAotICAgIHsKLSAgICAgICAgUmVmUHRyPE1lZGlhRW5kcG9pbnRT
ZXNzaW9uQ29uZmlndXJhdGlvbj4gY29weSA9IGNyZWF0ZSgpOwotICAgICAgICBjb3B5LT5tX3Nl
c3Npb25JZCA9IG1fc2Vzc2lvbklkOwotICAgICAgICBjb3B5LT5tX3Nlc3Npb25WZXJzaW9uID0g
bV9zZXNzaW9uVmVyc2lvbjsKLSAgICAgICAgY29weS0+bV9tZWRpYURlc2NyaXB0aW9ucyA9IG1f
bWVkaWFEZXNjcmlwdGlvbnM7Ci0gICAgICAgIGNvcHktPm1fYnVuZGxlUG9saWN5ID0gbV9idW5k
bGVQb2xpY3k7Ci0KLSAgICAgICAgcmV0dXJuIGNvcHk7Ci0gICAgfQotCi1wcml2YXRlOgotICAg
IE1lZGlhRW5kcG9pbnRTZXNzaW9uQ29uZmlndXJhdGlvbigpCi0gICAgewotICAgICAgICBtX3Nl
c3Npb25JZCA9IGNyeXB0b2dyYXBoaWNhbGx5UmFuZG9tTnVtYmVyKCk7Ci0gICAgICAgIG1fc2Vz
c2lvbklkID0gbV9zZXNzaW9uSWQgPDwgMzEgfCBjcnlwdG9ncmFwaGljYWxseVJhbmRvbU51bWJl
cigpOwotICAgIH0KLQotICAgIGludDY0X3QgbV9zZXNzaW9uSWQ7Ci0gICAgdW5zaWduZWQgbV9z
ZXNzaW9uVmVyc2lvbiB7IDAgfTsKLQotICAgIFZlY3RvcjxQZWVyTWVkaWFEZXNjcmlwdGlvbj4g
bV9tZWRpYURlc2NyaXB0aW9uczsKLQotICAgIFBlZXJDb25uZWN0aW9uU3RhdGVzOjpCdW5kbGVQ
b2xpY3kgbV9idW5kbGVQb2xpY3kgeyBQZWVyQ29ubmVjdGlvblN0YXRlczo6QnVuZGxlUG9saWN5
OjpCYWxhbmNlZCB9OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8g
RU5BQkxFKFdFQl9SVEMpCi0KLSNlbmRpZiAvLyBNZWRpYUVuZHBvaW50U2Vzc2lvbkNvbmZpZ3Vy
YXRpb25faApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0v
U0RQUHJvY2Vzc29yU2NyaXB0UmVzb3VyY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWVkaWFzdHJlYW0vU0RQUHJvY2Vzc29yU2NyaXB0UmVzb3VyY2UuY3BwCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCA2NjllZDJhNzYxNTgxNzI5NzBjMTQ5YzgzMDRjZTBhMzQyZmYwOTYx
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1NEUFByb2Nlc3NvclNjcmlwdFJlc291cmNlLmNw
cAorKysgL2Rldi9udWxsCkBAIC0xLDUzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTUgRXJpY3Nzb24gQUIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqICAgIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqICAgIGRpc3RyaWJ1dGlvbi4K
LSAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgRXJpY3Nzb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMg
Y29udHJpYnV0b3JzCi0gKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSAqICAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
Ci0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5o
IgotCi0jaWYgRU5BQkxFKFdFQl9SVEMpCi0jaW5jbHVkZSAiU0RQUHJvY2Vzc29yU2NyaXB0UmVz
b3VyY2UuaCIKLQotI2luY2x1ZGUgIlNEUFByb2Nlc3NvclNjcmlwdHNEYXRhLmgiCi0jaW5jbHVk
ZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotbmFtZXNw
YWNlIFNEUFByb2Nlc3NvclNjcmlwdFJlc291cmNlIHsKLQotY29uc3QgU3RyaW5nJiBzY3JpcHRT
dHJpbmcoKQotewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxjb25zdCBTdHJpbmc+IHNjcmlw
dChzZHBKYXZhU2NyaXB0LCBzaXplb2Yoc2RwSmF2YVNjcmlwdCkpOwotICAgIHJldHVybiBzY3Jp
cHQ7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFNEUFByb2Nlc3NvclNjcmlwdFJlc291cmNlCi0KLX0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShXRUJfUlRDKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vU0RQUHJvY2Vzc29yU2Ny
aXB0UmVzb3VyY2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1NEUFBy
b2Nlc3NvclNjcmlwdFJlc291cmNlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNi
NTQ0M2JiMDcwY2Y3N2YxYjZlZWYzMGMyM2U1MTJmNmQ0NTU0NjQuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVk
aWFzdHJlYW0vU0RQUHJvY2Vzc29yU2NyaXB0UmVzb3VyY2UuaAorKysgL2Rldi9udWxsCkBAIC0x
LDUwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgRXJpY3Nzb24gQUIuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIKLSAqICAgIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKLSAqICAgIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIE5laXRoZXIgdGhlIG5h
bWUgb2YgRXJpY3Nzb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0gKiAgICBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRo
aXMKLSAqICAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAq
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBTRFBQcm9jZXNzb3JTY3JpcHRSZXNvdXJjZV9oCi0j
ZGVmaW5lIFNEUFByb2Nlc3NvclNjcmlwdFJlc291cmNlX2gKLQotI2lmIEVOQUJMRShXRUJfUlRD
KQotCi0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotbmFtZXNwYWNlIFNEUFByb2Nlc3NvclNjcmlwdFJlc291cmNlIHsKLQotY29uc3QgU3Ry
aW5nJiBzY3JpcHRTdHJpbmcoKTsKLQotfSAvLyBuYW1lc3BhY2UgU0RQUHJvY2Vzc29yU2NyaXB0
UmVzb3VyY2UKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKFdF
Ql9SVEMpCi0KLSNlbmRpZiAvLyBTRFBQcm9jZXNzb3JTY3JpcHRSZXNvdXJjZV9oCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9vcGVud2VicnRjL01lZGlh
RW5kcG9pbnRPd3IuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vb3Bl
bndlYnJ0Yy9NZWRpYUVuZHBvaW50T3dyLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggOGE1ODQ4NjcyNTQ4M2MyZGNlMGE0MjQ0YjRlZGUxNWZiZmFiZDJlOS4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tZWRpYXN0cmVhbS9vcGVud2VicnRjL01lZGlhRW5kcG9pbnRPd3IuY3BwCisrKyAvZGV2L251
bGwKQEAgLTEsNzUwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUsIDIwMTYgRXJp
Y3Nzb24gQUIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIKLSAqICAgIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqICAgIGRpc3RyaWJ1dGlvbi4KLSAqIDMu
IE5laXRoZXIgdGhlIG5hbWUgb2YgRXJpY3Nzb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJp
YnV0b3JzCi0gKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tIHRoaXMKLSAqICAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
LSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0j
aWYgRU5BQkxFKFdFQl9SVEMpCi0jaW5jbHVkZSAiTWVkaWFFbmRwb2ludE93ci5oIgotCi0jaW5j
bHVkZSAiTWVkaWFFbmRwb2ludFNlc3Npb25Db25maWd1cmF0aW9uLmgiCi0jaW5jbHVkZSAiTWVk
aWFQYXlsb2FkLmgiCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlICJPcGVu
V2ViUlRDVXRpbGl0aWVzLmgiCi0jaW5jbHVkZSAiUGVlckNvbm5lY3Rpb25TdGF0ZXMuaCIKLSNp
bmNsdWRlICJSVENEYXRhQ2hhbm5lbEhhbmRsZXIuaCIKLSNpbmNsdWRlICJSZWFsdGltZUF1ZGlv
U291cmNlT3dyLmgiCi0jaW5jbHVkZSAiUmVhbHRpbWVWaWRlb1NvdXJjZU93ci5oIgotI2luY2x1
ZGUgPG93ci9vd3IuaD4KLSNpbmNsdWRlIDxvd3Ivb3dyX2F1ZGlvX3BheWxvYWQuaD4KLSNpbmNs
dWRlIDxvd3Ivb3dyX2NyeXB0b191dGlscy5oPgotI2luY2x1ZGUgPG93ci9vd3JfbWVkaWFfc2Vz
c2lvbi5oPgotI2luY2x1ZGUgPG93ci9vd3JfdHJhbnNwb3J0X2FnZW50Lmg+Ci0jaW5jbHVkZSA8
b3dyL293cl92aWRlb19wYXlsb2FkLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgot
Ci1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0YXRpYyB2b2lkIGdvdENhbmRpZGF0ZShPd3JTZXNz
aW9uKiwgT3dyQ2FuZGlkYXRlKiwgTWVkaWFFbmRwb2ludE93ciopOwotc3RhdGljIHZvaWQgY2Fu
ZGlkYXRlR2F0aGVyaW5nRG9uZShPd3JTZXNzaW9uKiwgTWVkaWFFbmRwb2ludE93ciopOwotc3Rh
dGljIHZvaWQgaWNlQ29ubmVjdGlvblN0YXRlQ2hhbmdlKE93clNlc3Npb24qLCBHUGFyYW1TcGVj
KiwgTWVkaWFFbmRwb2ludE93ciopOwotc3RhdGljIHZvaWQgZ290SW5jb21pbmdTb3VyY2UoT3dy
TWVkaWFTZXNzaW9uKiwgT3dyTWVkaWFTb3VyY2UqLCBNZWRpYUVuZHBvaW50T3dyKik7Ci0KLXN0
YXRpYyBjb25zdCBWZWN0b3I8U3RyaW5nPiBjYW5kaWRhdGVUeXBlcyA9IHsgImhvc3QiLCAic3Jm
bHgiLCAicHJmbHgiLCAicmVsYXkiIH07Ci1zdGF0aWMgY29uc3QgVmVjdG9yPFN0cmluZz4gY2Fu
ZGlkYXRlVGNwVHlwZXMgPSB7ICIiLCAiYWN0aXZlIiwgInBhc3NpdmUiLCAic28iIH07Ci1zdGF0
aWMgY29uc3QgVmVjdG9yPFN0cmluZz4gY29kZWNUeXBlcyA9IHsgIk5PTkUiLCAiUENNVSIsICJQ
Q01BIiwgIk9QVVMiLCAiSDI2NCIsICJWUDgiIH07Ci0KLXN0YXRpYyBjb25zdCBjaGFyKiBoZWxw
ZXJTZXJ2ZXJSZWdFeCA9ICIodHVybnN8dHVybnxzdHVuKTooW1xcd1xcLlxcLV0rfFxcW1tcXHdc
XDpdK1xcXSkoOlxcZCspPyhcXD8uKyk/IjsKLQotc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0
IGhlbHBlclNlcnZlckRlZmF1bHRQb3J0ID0gMzQ3ODsKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBz
aG9ydCBjYW5kaWRhdGVEZWZhdWx0UG9ydCA9IDk7Ci0KLXN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8
TWVkaWFFbmRwb2ludD4gY3JlYXRlTWVkaWFFbmRwb2ludE93cihNZWRpYUVuZHBvaW50Q2xpZW50
JiBjbGllbnQpCi17Ci0gICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxNZWRpYUVuZHBvaW50Pihu
ZXcgTWVkaWFFbmRwb2ludE93cihjbGllbnQpKTsKLX0KLQotQ3JlYXRlTWVkaWFFbmRwb2ludCBN
ZWRpYUVuZHBvaW50OjpjcmVhdGUgPSBjcmVhdGVNZWRpYUVuZHBvaW50T3dyOwotCi1NZWRpYUVu
ZHBvaW50T3dyOjpNZWRpYUVuZHBvaW50T3dyKE1lZGlhRW5kcG9pbnRDbGllbnQmIGNsaWVudCkK
LSAgICA6IG1fdHJhbnNwb3J0QWdlbnQobnVsbHB0cikKLSAgICAsIG1fY2xpZW50KGNsaWVudCkK
LSAgICAsIG1fbnVtYmVyT2ZSZWNlaXZlUHJlcGFyZWRTZXNzaW9ucygwKQotICAgICwgbV9udW1i
ZXJPZlNlbmRQcmVwYXJlZFNlc3Npb25zKDApCi17Ci0gICAgaW5pdGlhbGl6ZU9wZW5XZWJSVEMo
KTsKLQotICAgIEdSZWdleENvbXBpbGVGbGFncyBjb21waWxlRmxhZ3MgPSBHX1JFR0VYX0pBVkFT
Q1JJUFRfQ09NUEFUOwotICAgIEdSZWdleE1hdGNoRmxhZ3MgbWF0Y2hGbGFncyA9IHN0YXRpY19j
YXN0PEdSZWdleE1hdGNoRmxhZ3M+KDApOwotICAgIG1faGVscGVyU2VydmVyUmVnRXggPSBnX3Jl
Z2V4X25ldyhoZWxwZXJTZXJ2ZXJSZWdFeCwgY29tcGlsZUZsYWdzLCBtYXRjaEZsYWdzLCBudWxs
cHRyKTsKLX0KLQotTWVkaWFFbmRwb2ludE93cjo6fk1lZGlhRW5kcG9pbnRPd3IoKQotewotICAg
IHN0b3AoKTsKLQotICAgIGdfcmVnZXhfdW5yZWYobV9oZWxwZXJTZXJ2ZXJSZWdFeCk7Ci19Ci0K
LXZvaWQgTWVkaWFFbmRwb2ludE93cjo6c2V0Q29uZmlndXJhdGlvbihNZWRpYUVuZHBvaW50Q29u
ZmlndXJhdGlvbiYmIGNvbmZpZ3VyYXRpb24pCi17Ci0gICAgbV9jb25maWd1cmF0aW9uID0gV1RG
TW92ZShjb25maWd1cmF0aW9uKTsKLX0KLQotc3RkOjp1bmlxdWVfcHRyPFJUQ0RhdGFDaGFubmVs
SGFuZGxlcj4gTWVkaWFFbmRwb2ludE93cjo6Y3JlYXRlRGF0YUNoYW5uZWxIYW5kbGVyKGNvbnN0
IFN0cmluZyYsIGNvbnN0IFJUQ0RhdGFDaGFubmVsSW5pdCYpCi17Ci0gICAgLy8gRklYTUU6IElt
cGxlbWVudCBkYXRhIGNoYW5uZWwuCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0
dXJuIG51bGxwdHI7Ci19Ci0KLXN0YXRpYyB2b2lkIGNyeXB0b0RhdGFDYWxsYmFjayhnY2hhciog
cHJpdmF0ZUtleSwgZ2NoYXIqIGNlcnRpZmljYXRlLCBnY2hhciogZmluZ2VycHJpbnQsIGdjaGFy
KiBmaW5nZXJwcmludEZ1bmN0aW9uLCBncG9pbnRlciBkYXRhKQotewotICAgIE1lZGlhRW5kcG9p
bnRPd3IqIG1lZGlhRW5kcG9pbnQgPSAoTWVkaWFFbmRwb2ludE93ciopIGRhdGE7Ci0gICAgbWVk
aWFFbmRwb2ludC0+ZGlzcGF0Y2hEdGxzRmluZ2VycHJpbnQoZ19zdHJkdXAocHJpdmF0ZUtleSks
IGdfc3RyZHVwKGNlcnRpZmljYXRlKSwgU3RyaW5nKGZpbmdlcnByaW50KSwgU3RyaW5nKGZpbmdl
cnByaW50RnVuY3Rpb24pKTsKLX0KLQotdm9pZCBNZWRpYUVuZHBvaW50T3dyOjpnZW5lcmF0ZUR0
bHNJbmZvKCkKLXsKLSAgICBvd3JfY3J5cHRvX2NyZWF0ZV9jcnlwdG9fZGF0YShjcnlwdG9EYXRh
Q2FsbGJhY2ssIHRoaXMpOwotfQotCi1NZWRpYVBheWxvYWRWZWN0b3IgTWVkaWFFbmRwb2ludE93
cjo6Z2V0RGVmYXVsdEF1ZGlvUGF5bG9hZHMoKQotewotICAgIE1lZGlhUGF5bG9hZFZlY3RvciBw
YXlsb2FkczsKLQotICAgIC8vIEZJWE1FOiBUaGlzIGxpc3Qgc2hvdWxkIGJlIGJhc2VkIG9uIHdo
YXQgaXMgYXZhaWxhYmxlIGluIHRoZSBwbGF0Zm9ybSAoYnVnOiBodHRwOi8vd2Via2l0Lm9yZy9i
LzE2MzcyMykKLSAgICBNZWRpYVBheWxvYWQgcGF5bG9hZDE7Ci0gICAgcGF5bG9hZDEudHlwZSA9
IDExMTsKLSAgICBwYXlsb2FkMS5lbmNvZGluZ05hbWUgPSAiT1BVUyI7Ci0gICAgcGF5bG9hZDEu
Y2xvY2tSYXRlID0gNDgwMDA7Ci0gICAgcGF5bG9hZDEuY2hhbm5lbHMgPSAyOwotICAgIHBheWxv
YWRzLmFwcGVuZChXVEZNb3ZlKHBheWxvYWQxKSk7Ci0KLSAgICBNZWRpYVBheWxvYWQgcGF5bG9h
ZDI7Ci0gICAgcGF5bG9hZDIudHlwZSA9IDg7Ci0gICAgcGF5bG9hZDIuZW5jb2RpbmdOYW1lID0g
IlBDTUEiOwotICAgIHBheWxvYWQyLmNsb2NrUmF0ZSA9IDgwMDA7Ci0gICAgcGF5bG9hZDIuY2hh
bm5lbHMgPSAxOwotICAgIHBheWxvYWRzLmFwcGVuZChXVEZNb3ZlKHBheWxvYWQyKSk7Ci0KLSAg
ICBNZWRpYVBheWxvYWQgcGF5bG9hZDM7Ci0gICAgcGF5bG9hZDMudHlwZSA9IDA7Ci0gICAgcGF5
bG9hZDMuZW5jb2RpbmdOYW1lID0gIlBDTVUiOwotICAgIHBheWxvYWQzLmNsb2NrUmF0ZSA9IDgw
MDA7Ci0gICAgcGF5bG9hZDMuY2hhbm5lbHMgPSAxOwotICAgIHBheWxvYWRzLmFwcGVuZChXVEZN
b3ZlKHBheWxvYWQzKSk7Ci0KLSAgICByZXR1cm4gcGF5bG9hZHM7Ci19Ci0KLU1lZGlhUGF5bG9h
ZFZlY3RvciBNZWRpYUVuZHBvaW50T3dyOjpnZXREZWZhdWx0VmlkZW9QYXlsb2FkcygpCi17Ci0g
ICAgTWVkaWFQYXlsb2FkVmVjdG9yIHBheWxvYWRzOwotCi0gICAgLy8gRklYTUU6IFRoaXMgbGlz
dCBzaG91bGQgYmUgYmFzZWQgb24gd2hhdCBpcyBhdmFpbGFibGUgaW4gdGhlIHBsYXRmb3JtIChi
dWc6IGh0dHA6Ly93ZWJraXQub3JnL2IvMTYzNzIzKQotICAgIE1lZGlhUGF5bG9hZCBwYXlsb2Fk
MTsKLSAgICBwYXlsb2FkMS50eXBlID0gMTAzOwotICAgIHBheWxvYWQxLmVuY29kaW5nTmFtZSA9
ICJIMjY0IjsKLSAgICBwYXlsb2FkMS5jbG9ja1JhdGUgPSA5MDAwMDsKLSAgICBwYXlsb2FkMS5j
Y21maXIgPSB0cnVlOwotICAgIHBheWxvYWQxLm5hY2twbGkgPSB0cnVlOwotICAgIHBheWxvYWQx
LmFkZFBhcmFtZXRlcigicGFja2V0aXphdGlvbk1vZGUiLCAxKTsKLSAgICBwYXlsb2Fkcy5hcHBl
bmQoV1RGTW92ZShwYXlsb2FkMSkpOwotCi0gICAgTWVkaWFQYXlsb2FkIHBheWxvYWQyOwotICAg
IHBheWxvYWQyLnR5cGUgPSAxMDA7Ci0gICAgcGF5bG9hZDIuZW5jb2RpbmdOYW1lID0gIlZQOCI7
Ci0gICAgcGF5bG9hZDIuY2xvY2tSYXRlID0gOTAwMDA7Ci0gICAgcGF5bG9hZDIuY2NtZmlyID0g
dHJ1ZTsKLSAgICBwYXlsb2FkMi5uYWNrcGxpID0gdHJ1ZTsKLSAgICBwYXlsb2FkMi5uYWNrID0g
dHJ1ZTsKLSAgICBwYXlsb2Fkcy5hcHBlbmQoV1RGTW92ZShwYXlsb2FkMikpOwotCi0gICAgTWVk
aWFQYXlsb2FkIHBheWxvYWQzOwotICAgIHBheWxvYWQzLnR5cGUgPSAxMjA7Ci0gICAgcGF5bG9h
ZDMuZW5jb2RpbmdOYW1lID0gIlJUWCI7Ci0gICAgcGF5bG9hZDMuY2xvY2tSYXRlID0gOTAwMDA7
Ci0gICAgcGF5bG9hZDMuYWRkUGFyYW1ldGVyKCJhcHQiLCAxMDApOwotICAgIHBheWxvYWQzLmFk
ZFBhcmFtZXRlcigicnR4VGltZSIsIDIwMCk7Ci0gICAgcGF5bG9hZHMuYXBwZW5kKFdURk1vdmUo
cGF5bG9hZDMpKTsKLQotICAgIHJldHVybiBwYXlsb2FkczsKLX0KLQotc3RhdGljIGJvb2wgcGF5
bG9hZHNDb250YWluVHlwZShjb25zdCBWZWN0b3I8Y29uc3QgTWVkaWFQYXlsb2FkKj4mIHBheWxv
YWRzLCB1bnNpZ25lZCBwYXlsb2FkVHlwZSkKLXsKLSAgICBmb3IgKGF1dG8gcGF5bG9hZCA6IHBh
eWxvYWRzKSB7Ci0gICAgICAgIEFTU0VSVChwYXlsb2FkKTsKLSAgICAgICAgaWYgKHBheWxvYWQt
PnR5cGUgPT0gcGF5bG9hZFR5cGUpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0g
ICAgcmV0dXJuIGZhbHNlOwotfQotCi1NZWRpYVBheWxvYWRWZWN0b3IgTWVkaWFFbmRwb2ludE93
cjo6ZmlsdGVyUGF5bG9hZHMoY29uc3QgTWVkaWFQYXlsb2FkVmVjdG9yJiByZW1vdGVQYXlsb2Fk
cywgY29uc3QgTWVkaWFQYXlsb2FkVmVjdG9yJiBkZWZhdWx0UGF5bG9hZHMpCi17Ci0gICAgVmVj
dG9yPGNvbnN0IE1lZGlhUGF5bG9hZCo+IGZpbHRlcmVkUGF5bG9hZHM7Ci0KLSAgICBmb3IgKGF1
dG8mIHJlbW90ZVBheWxvYWQgOiByZW1vdGVQYXlsb2FkcykgewotICAgICAgICBjb25zdCBNZWRp
YVBheWxvYWQqIGRlZmF1bHRQYXlsb2FkID0gbnVsbHB0cjsKLSAgICAgICAgZm9yIChhdXRvJiBw
IDogZGVmYXVsdFBheWxvYWRzKSB7Ci0gICAgICAgICAgICBpZiAocC5lbmNvZGluZ05hbWUgPT0g
cmVtb3RlUGF5bG9hZC5lbmNvZGluZ05hbWUuY29udmVydFRvQVNDSUlVcHBlcmNhc2UoKSkgewot
ICAgICAgICAgICAgICAgIGRlZmF1bHRQYXlsb2FkID0gJnA7Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCFkZWZhdWx0UGF5bG9h
ZCkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGlmIChkZWZhdWx0UGF5bG9hZC0+
cGFyYW1ldGVycy5jb250YWlucygicGFja2V0aXphdGlvbk1vZGUiKSAmJiByZW1vdGVQYXlsb2Fk
LnBhcmFtZXRlcnMuY29udGFpbnMoInBhY2tldGl6YXRpb25Nb2RlIikKLSAgICAgICAgICAgICYm
IChkZWZhdWx0UGF5bG9hZC0+cGFyYW1ldGVycy5nZXQoInBhY2tldGl6YXRpb25Nb2RlIikgIT0g
ZGVmYXVsdFBheWxvYWQtPnBhcmFtZXRlcnMuZ2V0KCJwYWNrZXRpemF0aW9uTW9kZSIpKSkKLSAg
ICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGZpbHRlcmVkUGF5bG9hZHMuYXBwZW5kKCZy
ZW1vdGVQYXlsb2FkKTsKLSAgICB9Ci0KLSAgICBNZWRpYVBheWxvYWRWZWN0b3IgZmlsdGVyZWRB
cHRQYXlsb2FkczsKLQotICAgIGZvciAoYXV0byBmaWx0ZXJlZFBheWxvYWQgOiBmaWx0ZXJlZFBh
eWxvYWRzKSB7Ci0gICAgICAgIGlmIChmaWx0ZXJlZFBheWxvYWQtPnBhcmFtZXRlcnMuY29udGFp
bnMoImFwdCIpICYmICghcGF5bG9hZHNDb250YWluVHlwZShmaWx0ZXJlZFBheWxvYWRzLCBmaWx0
ZXJlZFBheWxvYWQtPnBhcmFtZXRlcnMuZ2V0KCJhcHQiKSkpKQotICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgIGZpbHRlcmVkQXB0UGF5bG9hZHMuYXBwZW5kKCpmaWx0ZXJlZFBheWxvYWQp
OwotICAgIH0KLQotICAgIHJldHVybiBmaWx0ZXJlZEFwdFBheWxvYWRzOwotfQotCi1NZWRpYUVu
ZHBvaW50OjpVcGRhdGVSZXN1bHQgTWVkaWFFbmRwb2ludE93cjo6dXBkYXRlUmVjZWl2ZUNvbmZp
Z3VyYXRpb24oTWVkaWFFbmRwb2ludFNlc3Npb25Db25maWd1cmF0aW9uKiBjb25maWd1cmF0aW9u
LCBib29sIGlzSW5pdGlhdG9yKQotewotICAgIFZlY3RvcjxUcmFuc2NlaXZlckNvbmZpZz4gdHJh
bnNjZWl2ZXJDb25maWdzOwotICAgIGZvciAodW5zaWduZWQgaSA9IG1fdHJhbnNjZWl2ZXJzLnNp
emUoKTsgaSA8IGNvbmZpZ3VyYXRpb24tPm1lZGlhRGVzY3JpcHRpb25zKCkuc2l6ZSgpOyArK2kp
IHsKLSAgICAgICAgVHJhbnNjZWl2ZXJDb25maWcgY29uZmlnOwotICAgICAgICBjb25maWcudHlw
ZSA9IFNlc3Npb25UeXBlTWVkaWE7Ci0gICAgICAgIGNvbmZpZy5pc0R0bHNDbGllbnQgPSBjb25m
aWd1cmF0aW9uLT5tZWRpYURlc2NyaXB0aW9ucygpW2ldLmR0bHNTZXR1cCA9PSAiYWN0aXZlIjsK
LSAgICAgICAgY29uZmlnLm1pZCA9IGNvbmZpZ3VyYXRpb24tPm1lZGlhRGVzY3JpcHRpb25zKClb
aV0ubWlkOwotICAgICAgICB0cmFuc2NlaXZlckNvbmZpZ3MuYXBwZW5kKFdURk1vdmUoY29uZmln
KSk7Ci0gICAgfQotCi0gICAgZW5zdXJlVHJhbnNwb3J0QWdlbnRBbmRUcmFuc2NlaXZlcnMoaXNJ
bml0aWF0b3IsIHRyYW5zY2VpdmVyQ29uZmlncyk7Ci0KLSAgICAvLyBQcmVwYXJlIHRoZSBuZXcg
c2Vzc2lvbnMuCi0gICAgZm9yICh1bnNpZ25lZCBpID0gbV9udW1iZXJPZlJlY2VpdmVQcmVwYXJl
ZFNlc3Npb25zOyBpIDwgbV90cmFuc2NlaXZlcnMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgT3dy
U2Vzc2lvbiogc2Vzc2lvbiA9IG1fdHJhbnNjZWl2ZXJzW2ldLT5zZXNzaW9uKCk7Ci0gICAgICAg
IHByZXBhcmVNZWRpYVNlc3Npb24oT1dSX01FRElBX1NFU1NJT04oc2Vzc2lvbiksICZjb25maWd1
cmF0aW9uLT5tZWRpYURlc2NyaXB0aW9ucygpW2ldLCBpc0luaXRpYXRvcik7Ci0gICAgICAgIG93
cl90cmFuc3BvcnRfYWdlbnRfYWRkX3Nlc3Npb24obV90cmFuc3BvcnRBZ2VudCwgc2Vzc2lvbik7
Ci0gICAgfQotCi0gICAgb3dyX3RyYW5zcG9ydF9hZ2VudF9zdGFydChtX3RyYW5zcG9ydEFnZW50
KTsKLSAgICBtX251bWJlck9mUmVjZWl2ZVByZXBhcmVkU2Vzc2lvbnMgPSBtX3RyYW5zY2VpdmVy
cy5zaXplKCk7Ci0KLSAgICByZXR1cm4gVXBkYXRlUmVzdWx0OjpTdWNjZXNzOwotfQotCi1zdGF0
aWMgY29uc3QgTWVkaWFQYXlsb2FkKiBmaW5kUnR4UGF5bG9hZChjb25zdCBNZWRpYVBheWxvYWRW
ZWN0b3ImIHBheWxvYWRzLCB1bnNpZ25lZCBhcHQpCi17Ci0gICAgZm9yIChhdXRvJiBwYXlsb2Fk
IDogcGF5bG9hZHMpIHsKLSAgICAgICAgaWYgKHBheWxvYWQuZW5jb2RpbmdOYW1lLmNvbnZlcnRU
b0FTQ0lJVXBwZXJjYXNlKCkgPT0gIlJUWCIgJiYgcGF5bG9hZC5wYXJhbWV0ZXJzLmNvbnRhaW5z
KCJhcHQiKQotICAgICAgICAgICAgJiYgKHBheWxvYWQucGFyYW1ldGVycy5nZXQoImFwdCIpID09
IGFwdCkpCi0gICAgICAgICAgICByZXR1cm4gJnBheWxvYWQ7Ci0gICAgfQotICAgIHJldHVybiBu
dWxscHRyOwotfQotCi1NZWRpYUVuZHBvaW50OjpVcGRhdGVSZXN1bHQgTWVkaWFFbmRwb2ludE93
cjo6dXBkYXRlU2VuZENvbmZpZ3VyYXRpb24oTWVkaWFFbmRwb2ludFNlc3Npb25Db25maWd1cmF0
aW9uKiBjb25maWd1cmF0aW9uLCBjb25zdCBSZWFsdGltZU1lZGlhU291cmNlTWFwJiBzZW5kU291
cmNlTWFwLCBib29sIGlzSW5pdGlhdG9yKQotewotICAgIFZlY3RvcjxUcmFuc2NlaXZlckNvbmZp
Zz4gdHJhbnNjZWl2ZXJDb25maWdzOwotICAgIGZvciAodW5zaWduZWQgaSA9IG1fdHJhbnNjZWl2
ZXJzLnNpemUoKTsgaSA8IGNvbmZpZ3VyYXRpb24tPm1lZGlhRGVzY3JpcHRpb25zKCkuc2l6ZSgp
OyArK2kpIHsKLSAgICAgICAgVHJhbnNjZWl2ZXJDb25maWcgY29uZmlnOwotICAgICAgICBjb25m
aWcudHlwZSA9IFNlc3Npb25UeXBlTWVkaWE7Ci0gICAgICAgIGNvbmZpZy5pc0R0bHNDbGllbnQg
PSBjb25maWd1cmF0aW9uLT5tZWRpYURlc2NyaXB0aW9ucygpW2ldLmR0bHNTZXR1cCAhPSAiYWN0
aXZlIjsKLSAgICAgICAgY29uZmlnLm1pZCA9IGNvbmZpZ3VyYXRpb24tPm1lZGlhRGVzY3JpcHRp
b25zKClbaV0ubWlkOwotICAgICAgICB0cmFuc2NlaXZlckNvbmZpZ3MuYXBwZW5kKFdURk1vdmUo
Y29uZmlnKSk7Ci0gICAgfQotCi0gICAgZW5zdXJlVHJhbnNwb3J0QWdlbnRBbmRUcmFuc2NlaXZl
cnMoaXNJbml0aWF0b3IsIHRyYW5zY2VpdmVyQ29uZmlncyk7Ci0KLSAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbV90cmFuc2NlaXZlcnMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgYXV0byog
c2Vzc2lvbiA9IG1fdHJhbnNjZWl2ZXJzW2ldLT5zZXNzaW9uKCk7Ci0gICAgICAgIGF1dG8mIG1k
ZXNjID0gY29uZmlndXJhdGlvbi0+bWVkaWFEZXNjcmlwdGlvbnMoKVtpXTsKLQotICAgICAgICBp
ZiAobWRlc2MudHlwZSA9PSAiYXVkaW8iIHx8IG1kZXNjLnR5cGUgPT0gInZpZGVvIikKLSAgICAg
ICAgICAgIGdfb2JqZWN0X3NldChzZXNzaW9uLCAicnRjcC1tdXgiLCBtZGVzYy5ydGNwTXV4LCBu
dWxscHRyKTsKLQotICAgICAgICBpZiAobWRlc2MuaWNlQ2FuZGlkYXRlcy5zaXplKCkpIHsKLSAg
ICAgICAgICAgIGZvciAoYXV0byYgY2FuZGlkYXRlIDogbWRlc2MuaWNlQ2FuZGlkYXRlcykKLSAg
ICAgICAgICAgICAgICBpbnRlcm5hbEFkZFJlbW90ZUNhbmRpZGF0ZShzZXNzaW9uLCBjYW5kaWRh
dGUsIG1kZXNjLmljZVVmcmFnLCBtZGVzYy5pY2VQYXNzd29yZCk7Ci0gICAgICAgIH0KLQotICAg
ICAgICBpZiAoaSA8IG1fbnVtYmVyT2ZTZW5kUHJlcGFyZWRTZXNzaW9ucykKLSAgICAgICAgICAg
IGNvbnRpbnVlOwotCi0gICAgICAgIGlmICghc2VuZFNvdXJjZU1hcC5jb250YWlucyhtZGVzYy5t
aWQpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgY29uc3QgTWVkaWFQYXlsb2Fk
KiBwYXlsb2FkID0gbnVsbHB0cjsKLSAgICAgICAgZm9yIChhdXRvJiBwIDogbWRlc2MucGF5bG9h
ZHMpIHsKLSAgICAgICAgICAgIGlmIChwLmVuY29kaW5nTmFtZS5jb252ZXJ0VG9BU0NJSVVwcGVy
Y2FzZSgpICE9ICJSVFgiKSB7Ci0gICAgICAgICAgICAgICAgcGF5bG9hZCA9ICZwOwotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaWYg
KCFwYXlsb2FkKQotICAgICAgICAgICAgcmV0dXJuIFVwZGF0ZVJlc3VsdDo6RmFpbGVkOwotCi0g
ICAgICAgIGF1dG8qIHJ0eFBheWxvYWQgPSBmaW5kUnR4UGF5bG9hZChtZGVzYy5wYXlsb2Fkcywg
cGF5bG9hZC0+dHlwZSk7Ci0gICAgICAgIGF1dG8qIHNvdXJjZSA9IHN0YXRpY19jYXN0PFJlYWx0
aW1lTWVkaWFTb3VyY2VPd3IqPihzZW5kU291cmNlTWFwLmdldChtZGVzYy5taWQpKTsKLQotICAg
ICAgICBBU1NFUlQoY29kZWNUeXBlcy5maW5kKHBheWxvYWQtPmVuY29kaW5nTmFtZS5jb252ZXJ0
VG9BU0NJSVVwcGVyY2FzZSgpKSAhPSBub3RGb3VuZCk7Ci0gICAgICAgIGF1dG8gY29kZWNUeXBl
ID0gc3RhdGljX2Nhc3Q8T3dyQ29kZWNUeXBlPihjb2RlY1R5cGVzLmZpbmQocGF5bG9hZC0+ZW5j
b2RpbmdOYW1lLmNvbnZlcnRUb0FTQ0lJVXBwZXJjYXNlKCkpKTsKLQotICAgICAgICBPd3JQYXls
b2FkKiBzZW5kUGF5bG9hZDsKLSAgICAgICAgaWYgKG1kZXNjLnR5cGUgPT0gImF1ZGlvIikKLSAg
ICAgICAgICAgIHNlbmRQYXlsb2FkID0gb3dyX2F1ZGlvX3BheWxvYWRfbmV3KGNvZGVjVHlwZSwg
cGF5bG9hZC0+dHlwZSwgcGF5bG9hZC0+Y2xvY2tSYXRlLCBwYXlsb2FkLT5jaGFubmVscyk7Ci0g
ICAgICAgIGVsc2UgewotICAgICAgICAgICAgc2VuZFBheWxvYWQgPSBvd3JfdmlkZW9fcGF5bG9h
ZF9uZXcoY29kZWNUeXBlLCBwYXlsb2FkLT50eXBlLCBwYXlsb2FkLT5jbG9ja1JhdGUsIHBheWxv
YWQtPmNjbWZpciwgcGF5bG9hZC0+bmFja3BsaSk7Ci0gICAgICAgICAgICBnX29iamVjdF9zZXQo
c2VuZFBheWxvYWQsICJydHgtcGF5bG9hZC10eXBlIiwgcnR4UGF5bG9hZCA/IHJ0eFBheWxvYWQt
PnR5cGUgOiAtMSwKLSAgICAgICAgICAgICAgICAicnR4LXRpbWUiLCBydHhQYXlsb2FkICYmIHJ0
eFBheWxvYWQtPnBhcmFtZXRlcnMuY29udGFpbnMoInJ0eFRpbWUiKSA/IHJ0eFBheWxvYWQtPnBh
cmFtZXRlcnMuZ2V0KCJydHhUaW1lIikgOiAwLCBudWxscHRyKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIG93cl9tZWRpYV9zZXNzaW9uX3NldF9zZW5kX3BheWxvYWQoT1dSX01FRElBX1NFU1NJT04o
c2Vzc2lvbiksIHNlbmRQYXlsb2FkKTsKLSAgICAgICAgb3dyX21lZGlhX3Nlc3Npb25fc2V0X3Nl
bmRfc291cmNlKE9XUl9NRURJQV9TRVNTSU9OKHNlc3Npb24pLCBzb3VyY2UtPm1lZGlhU291cmNl
KCkpOwotCi0gICAgICAgIC8vIEZJWE1FOiBTdXBwb3J0IGZvciBncm91cC1zc3JjIFNEUCBsaW5l
IGlzIG1pc3NpbmcuCi0gICAgICAgIGNvbnN0IFZlY3Rvcjx1bnNpZ25lZD4gcmVjZWl2ZVNzcmNz
ID0gbWRlc2Muc3NyY3M7Ci0gICAgICAgIGlmIChyZWNlaXZlU3NyY3Muc2l6ZSgpKSB7Ci0gICAg
ICAgICAgICBnX29iamVjdF9zZXQoc2Vzc2lvbiwgInJlY2VpdmUtc3NyYyIsIHJlY2VpdmVTc3Jj
c1swXSwgbnVsbHB0cik7Ci0gICAgICAgICAgICBpZiAocmVjZWl2ZVNzcmNzLnNpemUoKSA9PSAy
KQotICAgICAgICAgICAgICAgIGdfb2JqZWN0X3NldChzZXNzaW9uLCAicmVjZWl2ZS1ydHgtc3Ny
YyIsIHJlY2VpdmVTc3Jjc1sxXSwgbnVsbHB0cik7Ci0gICAgICAgIH0KLQotICAgICAgICBtX251
bWJlck9mU2VuZFByZXBhcmVkU2Vzc2lvbnMgPSBpICsgMTsKLSAgICB9Ci0KLSAgICByZXR1cm4g
VXBkYXRlUmVzdWx0OjpTdWNjZXNzOwotfQotCi12b2lkIE1lZGlhRW5kcG9pbnRPd3I6OmFkZFJl
bW90ZUNhbmRpZGF0ZShjb25zdCBJY2VDYW5kaWRhdGUmIGNhbmRpZGF0ZSwgY29uc3QgU3RyaW5n
JiBtaWQsIGNvbnN0IFN0cmluZyYgdWZyYWcsIGNvbnN0IFN0cmluZyYgcGFzc3dvcmQpCi17Ci0g
ICAgZm9yIChhdXRvJiB0cmFuc2NlaXZlciA6IG1fdHJhbnNjZWl2ZXJzKSB7Ci0gICAgICAgIGlm
ICh0cmFuc2NlaXZlci0+bWlkKCkgPT0gbWlkKSB7Ci0gICAgICAgICAgICBpbnRlcm5hbEFkZFJl
bW90ZUNhbmRpZGF0ZSh0cmFuc2NlaXZlci0+c2Vzc2lvbigpLCBjYW5kaWRhdGUsIHVmcmFnLCBw
YXNzd29yZCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9p
ZCBNZWRpYUVuZHBvaW50T3dyOjpyZXBsYWNlTXV0ZWRSZW1vdGVTb3VyY2VNaWQoY29uc3QgU3Ry
aW5nJiBvbGRNaWQsIGNvbnN0IFN0cmluZyYgbmV3TWlkKQotewotICAgIFJlZlB0cjxSZWFsdGlt
ZU1lZGlhU291cmNlT3dyPiByZW1vdGVTb3VyY2UgPSBtX211dGVkUmVtb3RlU291cmNlcy50YWtl
KG9sZE1pZCk7Ci0gICAgbV9tdXRlZFJlbW90ZVNvdXJjZXMuc2V0KG5ld01pZCwgcmVtb3RlU291
cmNlKTsKLX0KLQotUmVmPFJlYWx0aW1lTWVkaWFTb3VyY2U+IE1lZGlhRW5kcG9pbnRPd3I6OmNy
ZWF0ZU11dGVkUmVtb3RlU291cmNlKGNvbnN0IFN0cmluZyYgbWlkLCBSZWFsdGltZU1lZGlhU291
cmNlOjpUeXBlIHR5cGUpCi17Ci0gICAgU3RyaW5nIG5hbWU7Ci0gICAgU3RyaW5nIGlkKCJub3Qg
dXNlZCIpOwotICAgIFJlZlB0cjxSZWFsdGltZU1lZGlhU291cmNlT3dyPiBzb3VyY2U7Ci0KLSAg
ICBzd2l0Y2ggKHR5cGUpIHsKLSAgICBjYXNlIFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGU6OkF1
ZGlvOgotICAgICAgICBuYW1lID0gInJlbW90ZSBhdWRpbyI7Ci0gICAgICAgIHNvdXJjZSA9IGFk
b3B0UmVmKG5ldyBSZWFsdGltZUF1ZGlvU291cmNlT3dyKG51bGxwdHIsIGlkLCB0eXBlLCBuYW1l
KSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgUmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlwZTo6
VmlkZW86Ci0gICAgICAgIG5hbWUgPSAicmVtb3RlIHZpZGVvIjsKLSAgICAgICAgc291cmNlID0g
YWRvcHRSZWYobmV3IFJlYWx0aW1lVmlkZW9Tb3VyY2VPd3IobnVsbHB0ciwgaWQsIHR5cGUsIG5h
bWUpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBSZWFsdGltZU1lZGlhU291cmNlOjpUeXBl
OjpOb25lOgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9Ci0KLSAgICBtX211
dGVkUmVtb3RlU291cmNlcy5zZXQobWlkLCBzb3VyY2UpOwotCi0gICAgcmV0dXJuICpzb3VyY2U7
Ci19Ci0KLXZvaWQgTWVkaWFFbmRwb2ludE93cjo6cmVwbGFjZVNlbmRTb3VyY2UoUmVhbHRpbWVN
ZWRpYVNvdXJjZSYgbmV3U291cmNlLCBjb25zdCBTdHJpbmcmIG1pZCkKLXsKLSAgICBVTlVTRURf
UEFSQU0obmV3U291cmNlKTsKLSAgICBVTlVTRURfUEFSQU0obWlkKTsKLQotICAgIC8vIEZJWE1F
OiBXZSB3YW50IHRvIHVzZSBvd3JfbWVkaWFfc2Vzc2lvbl9zZXRfc2VuZF9zb3VyY2UgaGVyZSwg
YnV0IGl0IGRvZXNuJ3Qgd29yayBhcyBpbnRlbmRlZC4KLSAgICAvLyBJc3N1ZSB0cmFja2VkIGJ5
IE9wZW5XZWJSVEMgYnVnOiBodHRwczovL2dpdGh1Yi5jb20vRXJpY3Nzb25SZXNlYXJjaC9vcGVu
d2VicnRjL2lzc3Vlcy81MzMKLQotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgTWVk
aWFFbmRwb2ludE93cjo6c3RvcCgpCi17Ci0gICAgaWYgKCFtX3RyYW5zcG9ydEFnZW50KQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBmb3IgKGF1dG8mIHRyYW5zY2VpdmVyIDogbV90cmFuc2NlaXZl
cnMpCi0gICAgICAgIG93cl9tZWRpYV9zZXNzaW9uX3NldF9zZW5kX3NvdXJjZShPV1JfTUVESUFf
U0VTU0lPTih0cmFuc2NlaXZlci0+c2Vzc2lvbigpKSwgbnVsbHB0cik7Ci0KLSAgICBnX29iamVj
dF91bnJlZihtX3RyYW5zcG9ydEFnZW50KTsKLSAgICBtX3RyYW5zcG9ydEFnZW50ID0gbnVsbHB0
cjsKLX0KLQotc2l6ZV90IE1lZGlhRW5kcG9pbnRPd3I6OnRyYW5zY2VpdmVySW5kZXhGb3JTZXNz
aW9uKE93clNlc3Npb24qIHNlc3Npb24pIGNvbnN0Ci17Ci0gICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IG1fdHJhbnNjZWl2ZXJzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmIChtX3RyYW5z
Y2VpdmVyc1tpXS0+c2Vzc2lvbigpID09IHNlc3Npb24pCi0gICAgICAgICAgICByZXR1cm4gaTsK
LSAgICB9Ci0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gbm90Rm91bmQ7
Ci19Ci0KLWNvbnN0IFN0cmluZyYgTWVkaWFFbmRwb2ludE93cjo6c2Vzc2lvbk1pZChPd3JTZXNz
aW9uKiBzZXNzaW9uKSBjb25zdAotewotICAgIHNpemVfdCBpbmRleCA9IHRyYW5zY2VpdmVySW5k
ZXhGb3JTZXNzaW9uKHNlc3Npb24pOwotICAgIHJldHVybiBtX3RyYW5zY2VpdmVyc1tpbmRleF0t
Pm1pZCgpOwotfQotCi1Pd3JUcmFuc2NlaXZlciogTWVkaWFFbmRwb2ludE93cjo6bWF0Y2hUcmFu
c2NlaXZlckJ5TWlkKGNvbnN0IFN0cmluZyYgbWlkKSBjb25zdAotewotICAgIGZvciAoYXV0byYg
dHJhbnNjZWl2ZXIgOiBtX3RyYW5zY2VpdmVycykgewotICAgICAgICBpZiAodHJhbnNjZWl2ZXIt
Pm1pZCgpID09IG1pZCkKLSAgICAgICAgICAgIHJldHVybiB0cmFuc2NlaXZlci5nZXQoKTsKLSAg
ICB9Ci0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLXZvaWQgTWVkaWFFbmRwb2ludE93cjo6ZGlz
cGF0Y2hOZXdJY2VDYW5kaWRhdGUoY29uc3QgU3RyaW5nJiBtaWQsIEljZUNhbmRpZGF0ZSYmIGlj
ZUNhbmRpZGF0ZSkKLXsKLSAgICBtX2NsaWVudC5nb3RJY2VDYW5kaWRhdGUobWlkLCBXVEZNb3Zl
KGljZUNhbmRpZGF0ZSkpOwotfQotCi12b2lkIE1lZGlhRW5kcG9pbnRPd3I6OmRpc3BhdGNoR2F0
aGVyaW5nRG9uZShjb25zdCBTdHJpbmcmIG1pZCkKLXsKLSAgICBtX2NsaWVudC5kb25lR2F0aGVy
aW5nQ2FuZGlkYXRlcyhtaWQpOwotfQotCi12b2lkIE1lZGlhRW5kcG9pbnRPd3I6OnByb2Nlc3NJ
Y2VUcmFuc3BvcnRTdGF0ZUNoYW5nZShPd3JTZXNzaW9uKiBzZXNzaW9uKQotewotICAgIE93cklj
ZVN0YXRlIG93ckljZVN0YXRlOwotICAgIGdfb2JqZWN0X2dldChzZXNzaW9uLCAiaWNlLWNvbm5l
Y3Rpb24tc3RhdGUiLCAmb3dySWNlU3RhdGUsIG51bGxwdHIpOwotCi0gICAgT3dyVHJhbnNjZWl2
ZXImIHRyYW5zY2VpdmVyID0gKm1fdHJhbnNjZWl2ZXJzW3RyYW5zY2VpdmVySW5kZXhGb3JTZXNz
aW9uKHNlc3Npb24pXTsKLSAgICBpZiAob3dySWNlU3RhdGUgPCB0cmFuc2NlaXZlci5vd3JJY2VT
dGF0ZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICB0cmFuc2NlaXZlci5zZXRPd3JJY2VTdGF0
ZShvd3JJY2VTdGF0ZSk7Ci0KLSAgICAvLyBXZSBjYW5ub3QgZ28gdG8gQ29tcGxldGVkIGlmIHRo
ZXJlIG1heSBiZSBtb3JlIHJlbW90ZSBjYW5kaWRhdGVzLgotICAgIGlmIChvd3JJY2VTdGF0ZSA9
PSBPV1JfSUNFX1NUQVRFX1JFQURZICYmICF0cmFuc2NlaXZlci5nb3RFbmRPZlJlbW90ZUNhbmRp
ZGF0ZXMoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUlRDSWNlVHJhbnNwb3J0U3RhdGUgdHJh
bnNwb3J0U3RhdGU7Ci0gICAgc3dpdGNoIChvd3JJY2VTdGF0ZSkgewotICAgIGNhc2UgT1dSX0lD
RV9TVEFURV9DT05ORUNUSU5HOgotICAgICAgICB0cmFuc3BvcnRTdGF0ZSA9IFJUQ0ljZVRyYW5z
cG9ydFN0YXRlOjpDaGVja2luZzsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBPV1JfSUNFX1NU
QVRFX0NPTk5FQ1RFRDoKLSAgICAgICAgdHJhbnNwb3J0U3RhdGUgPSBSVENJY2VUcmFuc3BvcnRT
dGF0ZTo6Q29ubmVjdGVkOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIE9XUl9JQ0VfU1RBVEVf
UkVBRFk6Ci0gICAgICAgIHRyYW5zcG9ydFN0YXRlID0gUlRDSWNlVHJhbnNwb3J0U3RhdGU6OkNv
bXBsZXRlZDsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBPV1JfSUNFX1NUQVRFX0ZBSUxFRDoK
LSAgICAgICAgdHJhbnNwb3J0U3RhdGUgPSBSVENJY2VUcmFuc3BvcnRTdGF0ZTo6RmFpbGVkOwot
ICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgbV9jbGllbnQuaWNlVHJhbnNwb3J0U3RhdGVDaGFuZ2VkKHRyYW5zY2VpdmVyLm1pZCgpLCB0
cmFuc3BvcnRTdGF0ZSk7Ci19Ci0KLXZvaWQgTWVkaWFFbmRwb2ludE93cjo6ZGlzcGF0Y2hEdGxz
RmluZ2VycHJpbnQoZ2NoYXIqIHByaXZhdGVLZXksIGdjaGFyKiBjZXJ0aWZpY2F0ZSwgY29uc3Qg
U3RyaW5nJiBmaW5nZXJwcmludCwgY29uc3QgU3RyaW5nJiBmaW5nZXJwcmludEZ1bmN0aW9uKQot
ewotICAgIG1fZHRsc1ByaXZhdGVLZXkgPSBTdHJpbmcocHJpdmF0ZUtleSk7Ci0gICAgbV9kdGxz
Q2VydGlmaWNhdGUgPSBTdHJpbmcoY2VydGlmaWNhdGUpOwotCi0gICAgZ19mcmVlKHByaXZhdGVL
ZXkpOwotICAgIGdfZnJlZShjZXJ0aWZpY2F0ZSk7Ci0KLSAgICBtX2NsaWVudC5nb3REdGxzRmlu
Z2VycHJpbnQoZmluZ2VycHJpbnQsIGZpbmdlcnByaW50RnVuY3Rpb24pOwotfQotCi12b2lkIE1l
ZGlhRW5kcG9pbnRPd3I6OnVubXV0ZVJlbW90ZVNvdXJjZShjb25zdCBTdHJpbmcmIG1pZCwgT3dy
TWVkaWFTb3VyY2UqIHJlYWxTb3VyY2UpCi17Ci0gICAgUmVmUHRyPFJlYWx0aW1lTWVkaWFTb3Vy
Y2VPd3I+IHJlbW90ZVNvdXJjZSA9IG1fbXV0ZWRSZW1vdGVTb3VyY2VzLnRha2UobWlkKTsKLSAg
ICBpZiAoIXJlbW90ZVNvdXJjZSkgewotICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBmaW5k
IG11dGVkIHJlbW90ZSBzb3VyY2UuIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBp
ZiAocmVtb3RlU291cmNlLT5pc1Byb2R1Y2luZ0RhdGEoKSkKLSAgICAgICAgcmVtb3RlU291cmNl
LT5zd2FwT3V0U2hhbGxvd1NvdXJjZSgqcmVhbFNvdXJjZSk7Ci19Ci0KLXZvaWQgTWVkaWFFbmRw
b2ludE93cjo6cHJlcGFyZVNlc3Npb24oT3dyU2Vzc2lvbiogc2Vzc2lvbiwgUGVlck1lZGlhRGVz
Y3JpcHRpb24qIG1lZGlhRGVzY3JpcHRpb24pCi17Ci0gICAgZ19vYmplY3Rfc2V0X2RhdGFfZnVs
bChHX09CSkVDVChzZXNzaW9uKSwgImljZS11ZnJhZyIsIGdfc3RyZHVwKG1lZGlhRGVzY3JpcHRp
b24tPmljZVVmcmFnLmFzY2lpKCkuZGF0YSgpKSwgZ19mcmVlKTsKLSAgICBnX29iamVjdF9zZXRf
ZGF0YV9mdWxsKEdfT0JKRUNUKHNlc3Npb24pLCAiaWNlLXBhc3N3b3JkIiwgZ19zdHJkdXAobWVk
aWFEZXNjcmlwdGlvbi0+aWNlUGFzc3dvcmQuYXNjaWkoKS5kYXRhKCkpLCBnX2ZyZWUpOwotCi0g
ICAgZ19zaWduYWxfY29ubmVjdChzZXNzaW9uLCAib24tbmV3LWNhbmRpZGF0ZSIsIEdfQ0FMTEJB
Q0soZ290Q2FuZGlkYXRlKSwgdGhpcyk7Ci0gICAgZ19zaWduYWxfY29ubmVjdChzZXNzaW9uLCAi
b24tY2FuZGlkYXRlLWdhdGhlcmluZy1kb25lIiwgR19DQUxMQkFDSyhjYW5kaWRhdGVHYXRoZXJp
bmdEb25lKSwgdGhpcyk7Ci0gICAgZ19zaWduYWxfY29ubmVjdChzZXNzaW9uLCAibm90aWZ5Ojpp
Y2UtY29ubmVjdGlvbi1zdGF0ZSIsIEdfQ0FMTEJBQ0soaWNlQ29ubmVjdGlvblN0YXRlQ2hhbmdl
KSwgdGhpcyk7Ci19Ci0KLXZvaWQgTWVkaWFFbmRwb2ludE93cjo6cHJlcGFyZU1lZGlhU2Vzc2lv
bihPd3JNZWRpYVNlc3Npb24qIG1lZGlhU2Vzc2lvbiwgUGVlck1lZGlhRGVzY3JpcHRpb24qIG1l
ZGlhRGVzY3JpcHRpb24sIGJvb2wgaXNJbml0aWF0b3IpCi17Ci0gICAgcHJlcGFyZVNlc3Npb24o
T1dSX1NFU1NJT04obWVkaWFTZXNzaW9uKSwgbWVkaWFEZXNjcmlwdGlvbik7Ci0KLSAgICBib29s
IHVzZVJ0Y3BNdXggPSAhaXNJbml0aWF0b3IgJiYgbWVkaWFEZXNjcmlwdGlvbi0+cnRjcE11eDsK
LSAgICBnX29iamVjdF9zZXQobWVkaWFTZXNzaW9uLCAicnRjcC1tdXgiLCB1c2VSdGNwTXV4LCBu
dWxscHRyKTsKLQotICAgIGlmICghbWVkaWFEZXNjcmlwdGlvbi0+Y25hbWUuaXNFbXB0eSgpICYm
IG1lZGlhRGVzY3JpcHRpb24tPnNzcmNzLnNpemUoKSkgewotICAgICAgICBnX29iamVjdF9zZXQo
bWVkaWFTZXNzaW9uLCAiY25hbWUiLCBtZWRpYURlc2NyaXB0aW9uLT5jbmFtZS5hc2NpaSgpLmRh
dGEoKSwKLSAgICAgICAgICAgICJzZW5kLXNzcmMiLCBtZWRpYURlc2NyaXB0aW9uLT5zc3Jjc1sw
XSwKLSAgICAgICAgICAgIG51bGxwdHIpOwotICAgIH0KLQotICAgIGdfc2lnbmFsX2Nvbm5lY3Qo
bWVkaWFTZXNzaW9uLCAib24taW5jb21pbmctc291cmNlIiwgR19DQUxMQkFDSyhnb3RJbmNvbWlu
Z1NvdXJjZSksIHRoaXMpOwotCi0gICAgZm9yIChhdXRvJiBwYXlsb2FkIDogbWVkaWFEZXNjcmlw
dGlvbi0+cGF5bG9hZHMpIHsKLSAgICAgICAgaWYgKHBheWxvYWQuZW5jb2RpbmdOYW1lLmNvbnZl
cnRUb0FTQ0lJVXBwZXJjYXNlKCkgPT0gIlJUWCIpCi0gICAgICAgICAgICBjb250aW51ZTsKLQot
ICAgICAgICBhdXRvKiBydHhQYXlsb2FkID0gZmluZFJ0eFBheWxvYWQobWVkaWFEZXNjcmlwdGlv
bi0+cGF5bG9hZHMsIHBheWxvYWQudHlwZSk7Ci0KLSAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FH
RShjb2RlY1R5cGVzLmZpbmQocGF5bG9hZC5lbmNvZGluZ05hbWUuY29udmVydFRvQVNDSUlVcHBl
cmNhc2UoKSkgIT0gbm90Rm91bmQsICJVbmFibGUgdG8gZmluZCBjb2RlYzogJXMiLCBwYXlsb2Fk
LmVuY29kaW5nTmFtZS51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgT3dyQ29kZWNUeXBlIGNvZGVj
VHlwZSA9IHN0YXRpY19jYXN0PE93ckNvZGVjVHlwZT4oY29kZWNUeXBlcy5maW5kKHBheWxvYWQu
ZW5jb2RpbmdOYW1lLmNvbnZlcnRUb0FTQ0lJVXBwZXJjYXNlKCkpKTsKLQotICAgICAgICBPd3JQ
YXlsb2FkKiByZWNlaXZlUGF5bG9hZDsKLSAgICAgICAgaWYgKG1lZGlhRGVzY3JpcHRpb24tPnR5
cGUgPT0gImF1ZGlvIikKLSAgICAgICAgICAgIHJlY2VpdmVQYXlsb2FkID0gb3dyX2F1ZGlvX3Bh
eWxvYWRfbmV3KGNvZGVjVHlwZSwgcGF5bG9hZC50eXBlLCBwYXlsb2FkLmNsb2NrUmF0ZSwgcGF5
bG9hZC5jaGFubmVscyk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgcmVjZWl2ZVBheWxv
YWQgPSBvd3JfdmlkZW9fcGF5bG9hZF9uZXcoY29kZWNUeXBlLCBwYXlsb2FkLnR5cGUsIHBheWxv
YWQuY2xvY2tSYXRlLCBwYXlsb2FkLmNjbWZpciwgcGF5bG9hZC5uYWNrcGxpKTsKLSAgICAgICAg
ICAgIGdfb2JqZWN0X3NldChyZWNlaXZlUGF5bG9hZCwgInJ0eC1wYXlsb2FkLXR5cGUiLCBydHhQ
YXlsb2FkID8gcnR4UGF5bG9hZC0+dHlwZSA6IC0xLAotICAgICAgICAgICAgICAgICJydHgtdGlt
ZSIsIHJ0eFBheWxvYWQgJiYgcnR4UGF5bG9hZC0+cGFyYW1ldGVycy5jb250YWlucygicnR4VGlt
ZSIpID8gcnR4UGF5bG9hZC0+cGFyYW1ldGVycy5nZXQoInJ0eFRpbWUiKSA6IDAsIG51bGxwdHIp
OwotICAgICAgICB9Ci0KLSAgICAgICAgb3dyX21lZGlhX3Nlc3Npb25fYWRkX3JlY2VpdmVfcGF5
bG9hZChtZWRpYVNlc3Npb24sIHJlY2VpdmVQYXlsb2FkKTsKLSAgICB9Ci19Ci0KLXN0cnVjdCBI
ZWxwZXJTZXJ2ZXJVcmwgewotICAgIFN0cmluZyBwcm90b2NvbDsKLSAgICBTdHJpbmcgaG9zdDsK
LSAgICB1bnNpZ25lZCBzaG9ydCBwb3J0OwotICAgIFN0cmluZyBxdWVyeTsKLX07Ci0KLXN0YXRp
YyB2b2lkIHBhcnNlSGVscGVyU2VydmVyVXJsKEdSZWdleCYgcmVnZXgsIGNvbnN0IFVSTCYgdXJs
LCBIZWxwZXJTZXJ2ZXJVcmwmIG91dFVybCkKLXsKLSAgICBHTWF0Y2hJbmZvKiBtYXRjaEluZm87
Ci0KLSAgICBpZiAoZ19yZWdleF9tYXRjaCgmcmVnZXgsIHVybC5zdHJpbmcoKS5hc2NpaSgpLmRh
dGEoKSwgc3RhdGljX2Nhc3Q8R1JlZ2V4TWF0Y2hGbGFncz4oMCksICZtYXRjaEluZm8pKSB7Ci0g
ICAgICAgIGdjaGFyKiogbWF0Y2hlcyA9ICBnX21hdGNoX2luZm9fZmV0Y2hfYWxsKG1hdGNoSW5m
byk7Ci0gICAgICAgIGdpbnQgbWF0Y2hDb3VudCA9IGdfc3Rydl9sZW5ndGgobWF0Y2hlcyk7Ci0K
LSAgICAgICAgb3V0VXJsLnByb3RvY29sID0gbWF0Y2hlc1sxXTsKLSAgICAgICAgb3V0VXJsLmhv
c3QgPSBtYXRjaGVzWzJdWzBdID09ICdbJyA/IFN0cmluZyhtYXRjaGVzWzJdICsgMSwgc3RybGVu
KG1hdGNoZXNbMl0pIC0gMikgLy8gSVB2NgotICAgICAgICAgICAgOiBtYXRjaGVzWzJdOwotCi0g
ICAgICAgIG91dFVybC5wb3J0ID0gMDsKLSAgICAgICAgaWYgKG1hdGNoQ291bnQgPj0gNCkgewot
ICAgICAgICAgICAgU3RyaW5nIHBvcnRTdHJpbmcgPSBTdHJpbmcobWF0Y2hlc1szXSArIDEpOyAv
LyBTa2lwIHBvcnQgY29sb24KLSAgICAgICAgICAgIG91dFVybC5wb3J0ID0gcG9ydFN0cmluZy50
b1VJbnRTdHJpY3QoKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChtYXRjaENvdW50ID09IDUp
Ci0gICAgICAgICAgICBvdXRVcmwucXVlcnkgPSBTdHJpbmcobWF0Y2hlc1s0XSArIDEpOyAvLyBT
a2lwIHF1ZXN0aW9uIG1hcmsKLQotICAgICAgICBnX3N0cmZyZWV2KG1hdGNoZXMpOwotICAgIH0K
LQotICAgIGdfbWF0Y2hfaW5mb19mcmVlKG1hdGNoSW5mbyk7Ci19Ci0KLXZvaWQgTWVkaWFFbmRw
b2ludE93cjo6ZW5zdXJlVHJhbnNwb3J0QWdlbnRBbmRUcmFuc2NlaXZlcnMoYm9vbCBpc0luaXRp
YXRvciwgY29uc3QgVmVjdG9yPFRyYW5zY2VpdmVyQ29uZmlnPiYgdHJhbnNjZWl2ZXJDb25maWdz
KQotewotICAgIEFTU0VSVChtX2R0bHNQcml2YXRlS2V5KTsKLSAgICBBU1NFUlQobV9kdGxzQ2Vy
dGlmaWNhdGUpOwotCi0gICAgaWYgKCFtX3RyYW5zcG9ydEFnZW50KSB7Ci0gICAgICAgIC8vIEZJ
WE1FOiBIYW5kbGUgU0RQIEJVTkRMRSBsaW5lIGZyb20gdGhlIHJlbW90ZSBzb3VyY2UgaW5zdGVh
ZCBvZiBmYWxsaW5nIGJhY2sgdG8gYmFsYW5jZWQuCi0gICAgICAgIE93ckJ1bmRsZVBvbGljeVR5
cGUgYnVuZGxlUG9saWN5ID0gT1dSX0JVTkRMRV9QT0xJQ1lfVFlQRV9CQUxBTkNFRDsKLQotICAg
ICAgICBzd2l0Y2ggKG1fY29uZmlndXJhdGlvbi0+YnVuZGxlUG9saWN5KSB7Ci0gICAgICAgIGNh
c2UgUGVlckNvbm5lY3Rpb25TdGF0ZXM6OkJ1bmRsZVBvbGljeTo6QmFsYW5jZWQ6Ci0gICAgICAg
ICAgICBidW5kbGVQb2xpY3kgPSBPV1JfQlVORExFX1BPTElDWV9UWVBFX0JBTEFOQ0VEOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUGVlckNvbm5lY3Rpb25TdGF0ZXM6OkJ1bmRs
ZVBvbGljeTo6TWF4Q29tcGF0OgotICAgICAgICAgICAgYnVuZGxlUG9saWN5ID0gT1dSX0JVTkRM
RV9QT0xJQ1lfVFlQRV9NQVhfQ09NUEFUOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNh
c2UgUGVlckNvbm5lY3Rpb25TdGF0ZXM6OkJ1bmRsZVBvbGljeTo6TWF4QnVuZGxlOgotICAgICAg
ICAgICAgYnVuZGxlUG9saWN5ID0gT1dSX0JVTkRMRV9QT0xJQ1lfVFlQRV9NQVhfQlVORExFOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKLSAgICAgICAgfTsKLQotICAgICAgICBtX3RyYW5zcG9ydEFnZW50ID0g
b3dyX3RyYW5zcG9ydF9hZ2VudF9uZXcoZmFsc2UsIGJ1bmRsZVBvbGljeSk7Ci0KLSAgICAgICAg
QVNTRVJUKG1fY29uZmlndXJhdGlvbik7Ci0gICAgICAgIGZvciAoYXV0byYgc2VydmVyIDogbV9j
b25maWd1cmF0aW9uLT5pY2VTZXJ2ZXJzKSB7Ci0gICAgICAgICAgICBmb3IgKGF1dG8mIHdlYmtp
dFVybCA6IHNlcnZlci51cmxzKSB7Ci0gICAgICAgICAgICAgICAgSGVscGVyU2VydmVyVXJsIHVy
bDsKLSAgICAgICAgICAgICAgICAvLyBXZWJLaXQncyBVUkwgY2xhc3MgY2FuJ3QgaGFuZGxlIElD
RSBoZWxwZXIgc2VydmVyIHVybHMgcHJvcGVybHkKLSAgICAgICAgICAgICAgICBwYXJzZUhlbHBl
clNlcnZlclVybCgqbV9oZWxwZXJTZXJ2ZXJSZWdFeCwgd2Via2l0VXJsLCB1cmwpOwotCi0gICAg
ICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgcG9ydCA9IHVybC5wb3J0ID8gdXJsLnBvcnQgOiBo
ZWxwZXJTZXJ2ZXJEZWZhdWx0UG9ydDsKLQotICAgICAgICAgICAgICAgIGlmICh1cmwucHJvdG9j
b2wgPT0gInN0dW4iKSB7Ci0gICAgICAgICAgICAgICAgICAgIG93cl90cmFuc3BvcnRfYWdlbnRf
YWRkX2hlbHBlcl9zZXJ2ZXIobV90cmFuc3BvcnRBZ2VudCwgT1dSX0hFTFBFUl9TRVJWRVJfVFlQ
RV9TVFVOLAotICAgICAgICAgICAgICAgICAgICAgICAgdXJsLmhvc3QuYXNjaWkoKS5kYXRhKCks
IHBvcnQsIG51bGxwdHIsIG51bGxwdHIpOwotCi0gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh1
cmwucHJvdG9jb2wgPT0gInR1cm4iKSB7Ci0gICAgICAgICAgICAgICAgICAgIE93ckhlbHBlclNl
cnZlclR5cGUgc2VydmVyVHlwZSA9IHVybC5xdWVyeSA9PSAidHJhbnNwb3J0PXRjcCIgPyBPV1Jf
SEVMUEVSX1NFUlZFUl9UWVBFX1RVUk5fVENQCi0gICAgICAgICAgICAgICAgICAgICAgICA6IE9X
Ul9IRUxQRVJfU0VSVkVSX1RZUEVfVFVSTl9VRFA7Ci0KLSAgICAgICAgICAgICAgICAgICAgb3dy
X3RyYW5zcG9ydF9hZ2VudF9hZGRfaGVscGVyX3NlcnZlcihtX3RyYW5zcG9ydEFnZW50LCBzZXJ2
ZXJUeXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgdXJsLmhvc3QuYXNjaWkoKS5kYXRhKCks
IHBvcnQsCi0gICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXIudXNlcm5hbWUuYXNjaWkoKS5k
YXRhKCksIHNlcnZlci5jcmVkZW50aWFsLmFzY2lpKCkuZGF0YSgpKTsKLSAgICAgICAgICAgICAg
ICB9IGVsc2UgaWYgKHVybC5wcm90b2NvbCA9PSAidHVybnMiKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIG93cl90cmFuc3BvcnRfYWdlbnRfYWRkX2hlbHBlcl9zZXJ2ZXIobV90cmFuc3BvcnRBZ2Vu
dCwgT1dSX0hFTFBFUl9TRVJWRVJfVFlQRV9UVVJOX1RMUywKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHVybC5ob3N0LmFzY2lpKCkuZGF0YSgpLCBwb3J0LAotICAgICAgICAgICAgICAgICAgICAg
ICAgc2VydmVyLnVzZXJuYW1lLmFzY2lpKCkuZGF0YSgpLCBzZXJ2ZXIuY3JlZGVudGlhbC5hc2Np
aSgpLmRhdGEoKSk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQot
Ci0gICAgZ19vYmplY3Rfc2V0KG1fdHJhbnNwb3J0QWdlbnQsICJpY2UtY29udHJvbGxpbmctbW9k
ZSIsIGlzSW5pdGlhdG9yLCBudWxscHRyKTsKLQotICAgIGZvciAoYXV0byYgY29uZmlnIDogdHJh
bnNjZWl2ZXJDb25maWdzKSB7Ci0gICAgICAgIE93clNlc3Npb24qIHNlc3Npb24gPSBPV1JfU0VT
U0lPTihvd3JfbWVkaWFfc2Vzc2lvbl9uZXcoY29uZmlnLmlzRHRsc0NsaWVudCkpOwotICAgICAg
ICBnX29iamVjdF9zZXQoc2Vzc2lvbiwgImR0bHMtY2VydGlmaWNhdGUiLCBtX2R0bHNDZXJ0aWZp
Y2F0ZS51dGY4KCkuZGF0YSgpLAotICAgICAgICAgICAgImR0bHMta2V5IiwgbV9kdGxzUHJpdmF0
ZUtleS51dGY4KCkuZGF0YSgpLAotICAgICAgICAgICAgbnVsbHB0cik7Ci0KLSAgICAgICAgbV90
cmFuc2NlaXZlcnMuYXBwZW5kKE93clRyYW5zY2VpdmVyOjpjcmVhdGUoY29uZmlnLm1pZCwgc2Vz
c2lvbikpOwotICAgIH0KLX0KLQotdm9pZCBNZWRpYUVuZHBvaW50T3dyOjppbnRlcm5hbEFkZFJl
bW90ZUNhbmRpZGF0ZShPd3JTZXNzaW9uKiBzZXNzaW9uLCBjb25zdCBJY2VDYW5kaWRhdGUmIGNh
bmRpZGF0ZSwgY29uc3QgU3RyaW5nJiB1ZnJhZywgY29uc3QgU3RyaW5nJiBwYXNzd29yZCkKLXsK
LSAgICBnYm9vbGVhbiBydGNwTXV4OwotICAgIGdfb2JqZWN0X2dldChzZXNzaW9uLCAicnRjcC1t
dXgiLCAmcnRjcE11eCwgbnVsbHB0cik7Ci0KLSAgICBpZiAocnRjcE11eCAmJiBjYW5kaWRhdGUu
Y29tcG9uZW50SWQgPT0gT1dSX0NPTVBPTkVOVF9UWVBFX1JUQ1ApCi0gICAgICAgIHJldHVybjsK
LQotICAgIEFTU0VSVChjYW5kaWRhdGVUeXBlcy5maW5kKGNhbmRpZGF0ZS50eXBlKSAhPSBub3RG
b3VuZCk7Ci0KLSAgICBPd3JDYW5kaWRhdGVUeXBlIGNhbmRpZGF0ZVR5cGUgPSBzdGF0aWNfY2Fz
dDxPd3JDYW5kaWRhdGVUeXBlPihjYW5kaWRhdGVUeXBlcy5maW5kKGNhbmRpZGF0ZS50eXBlKSk7
Ci0gICAgT3dyQ29tcG9uZW50VHlwZSBjb21wb25lbnRJZCA9IHN0YXRpY19jYXN0PE93ckNvbXBv
bmVudFR5cGU+KGNhbmRpZGF0ZS5jb21wb25lbnRJZCk7Ci0gICAgT3dyVHJhbnNwb3J0VHlwZSB0
cmFuc3BvcnRUeXBlOwotCi0gICAgaWYgKGNhbmRpZGF0ZS50cmFuc3BvcnQuY29udmVydFRvQVND
SUlVcHBlcmNhc2UoKSA9PSAiVURQIikKLSAgICAgICAgdHJhbnNwb3J0VHlwZSA9IE9XUl9UUkFO
U1BPUlRfVFlQRV9VRFA7Ci0gICAgZWxzZSB7Ci0gICAgICAgIEFTU0VSVChjYW5kaWRhdGVUY3BU
eXBlcy5maW5kKGNhbmRpZGF0ZS50Y3BUeXBlKSAhPSBub3RGb3VuZCk7Ci0gICAgICAgIHRyYW5z
cG9ydFR5cGUgPSBzdGF0aWNfY2FzdDxPd3JUcmFuc3BvcnRUeXBlPihjYW5kaWRhdGVUY3BUeXBl
cy5maW5kKGNhbmRpZGF0ZS50Y3BUeXBlKSk7Ci0gICAgfQotCi0gICAgT3dyQ2FuZGlkYXRlKiBv
d3JDYW5kaWRhdGUgPSBvd3JfY2FuZGlkYXRlX25ldyhjYW5kaWRhdGVUeXBlLCBjb21wb25lbnRJ
ZCk7Ci0gICAgZ19vYmplY3Rfc2V0KG93ckNhbmRpZGF0ZSwgInRyYW5zcG9ydC10eXBlIiwgdHJh
bnNwb3J0VHlwZSwKLSAgICAgICAgImFkZHJlc3MiLCBjYW5kaWRhdGUuYWRkcmVzcy5hc2NpaSgp
LmRhdGEoKSwKLSAgICAgICAgInBvcnQiLCBjYW5kaWRhdGUucG9ydCwKLSAgICAgICAgImJhc2Ut
YWRkcmVzcyIsIGNhbmRpZGF0ZS5yZWxhdGVkQWRkcmVzcy5hc2NpaSgpLmRhdGEoKSwKLSAgICAg
ICAgImJhc2UtcG9ydCIsIGNhbmRpZGF0ZS5yZWxhdGVkUG9ydCwKLSAgICAgICAgInByaW9yaXR5
IiwgY2FuZGlkYXRlLnByaW9yaXR5LAotICAgICAgICAiZm91bmRhdGlvbiIsIGNhbmRpZGF0ZS5m
b3VuZGF0aW9uLmFzY2lpKCkuZGF0YSgpLAotICAgICAgICAidWZyYWciLCB1ZnJhZy5hc2NpaSgp
LmRhdGEoKSwKLSAgICAgICAgInBhc3N3b3JkIiwgcGFzc3dvcmQuYXNjaWkoKS5kYXRhKCksCi0g
ICAgICAgIG51bGxwdHIpOwotCi0gICAgb3dyX3Nlc3Npb25fYWRkX3JlbW90ZV9jYW5kaWRhdGUo
c2Vzc2lvbiwgb3dyQ2FuZGlkYXRlKTsKLX0KLQotc3RhdGljIHZvaWQgZ290Q2FuZGlkYXRlKE93
clNlc3Npb24qIHNlc3Npb24sIE93ckNhbmRpZGF0ZSogY2FuZGlkYXRlLCBNZWRpYUVuZHBvaW50
T3dyKiBtZWRpYUVuZHBvaW50KQotewotICAgIE93ckNhbmRpZGF0ZVR5cGUgY2FuZGlkYXRlVHlw
ZTsKLSAgICBnY2hhciogZm91bmRhdGlvbjsKLSAgICBPd3JDb21wb25lbnRUeXBlIGNvbXBvbmVu
dElkOwotICAgIE93clRyYW5zcG9ydFR5cGUgdHJhbnNwb3J0VHlwZTsKLSAgICBnaW50IHByaW9y
aXR5OwotICAgIGdjaGFyKiBhZGRyZXNzOwotICAgIGd1aW50IHBvcnQ7Ci0gICAgZ2NoYXIqIHJl
bGF0ZWRBZGRyZXNzOwotICAgIGd1aW50IHJlbGF0ZWRQb3J0OwotCi0gICAgZ19vYmplY3RfZ2V0
KGNhbmRpZGF0ZSwgInR5cGUiLCAmY2FuZGlkYXRlVHlwZSwKLSAgICAgICAgImZvdW5kYXRpb24i
LCAmZm91bmRhdGlvbiwKLSAgICAgICAgImNvbXBvbmVudC10eXBlIiwgJmNvbXBvbmVudElkLAot
ICAgICAgICAidHJhbnNwb3J0LXR5cGUiLCAmdHJhbnNwb3J0VHlwZSwKLSAgICAgICAgInByaW9y
aXR5IiwgJnByaW9yaXR5LAotICAgICAgICAiYWRkcmVzcyIsICZhZGRyZXNzLAotICAgICAgICAi
cG9ydCIsICZwb3J0LAotICAgICAgICAiYmFzZS1hZGRyZXNzIiwgJnJlbGF0ZWRBZGRyZXNzLAot
ICAgICAgICAiYmFzZS1wb3J0IiwgJnJlbGF0ZWRQb3J0LAotICAgICAgICBudWxscHRyKTsKLQot
ICAgIEFTU0VSVChjYW5kaWRhdGVUeXBlID49IDAgJiYgY2FuZGlkYXRlVHlwZSA8IGNhbmRpZGF0
ZVR5cGVzLnNpemUoKSk7Ci0gICAgQVNTRVJUKHRyYW5zcG9ydFR5cGUgPj0gMCAmJiB0cmFuc3Bv
cnRUeXBlIDwgY2FuZGlkYXRlVGNwVHlwZXMuc2l6ZSgpKTsKLQotICAgIEljZUNhbmRpZGF0ZSBp
Y2VDYW5kaWRhdGU7Ci0gICAgaWNlQ2FuZGlkYXRlLnR5cGUgPSBjYW5kaWRhdGVUeXBlc1tjYW5k
aWRhdGVUeXBlXTsKLSAgICBpY2VDYW5kaWRhdGUuZm91bmRhdGlvbiA9IGZvdW5kYXRpb247Ci0g
ICAgaWNlQ2FuZGlkYXRlLmNvbXBvbmVudElkID0gY29tcG9uZW50SWQ7Ci0gICAgaWNlQ2FuZGlk
YXRlLnByaW9yaXR5ID0gcHJpb3JpdHk7Ci0gICAgaWNlQ2FuZGlkYXRlLmFkZHJlc3MgPSBhZGRy
ZXNzOwotICAgIGljZUNhbmRpZGF0ZS5wb3J0ID0gcG9ydCA/IHBvcnQgOiBjYW5kaWRhdGVEZWZh
dWx0UG9ydDsKLQotICAgIGlmICh0cmFuc3BvcnRUeXBlID09IE9XUl9UUkFOU1BPUlRfVFlQRV9V
RFApCi0gICAgICAgIGljZUNhbmRpZGF0ZS50cmFuc3BvcnQgPSAiVURQIjsKLSAgICBlbHNlIHsK
LSAgICAgICAgaWNlQ2FuZGlkYXRlLnRyYW5zcG9ydCA9ICJUQ1AiOwotICAgICAgICBpY2VDYW5k
aWRhdGUudGNwVHlwZSA9IGNhbmRpZGF0ZVRjcFR5cGVzW3RyYW5zcG9ydFR5cGVdOwotICAgIH0K
LQotICAgIGlmIChjYW5kaWRhdGVUeXBlICE9IE9XUl9DQU5ESURBVEVfVFlQRV9IT1NUKSB7Ci0g
ICAgICAgIGljZUNhbmRpZGF0ZS5yZWxhdGVkQWRkcmVzcyA9IHJlbGF0ZWRBZGRyZXNzOwotICAg
ICAgICBpY2VDYW5kaWRhdGUucmVsYXRlZFBvcnQgPSByZWxhdGVkUG9ydCA/IHJlbGF0ZWRQb3J0
IDogY2FuZGlkYXRlRGVmYXVsdFBvcnQ7Ci0gICAgfQotCi0gICAgZ19vYmplY3Rfc2V0KEdfT0JK
RUNUKGNhbmRpZGF0ZSksICJ1ZnJhZyIsIGdfb2JqZWN0X2dldF9kYXRhKEdfT0JKRUNUKHNlc3Np
b24pLCAiaWNlLXVmcmFnIiksCi0gICAgICAgICJwYXNzd29yZCIsIGdfb2JqZWN0X2dldF9kYXRh
KEdfT0JKRUNUKHNlc3Npb24pLCAiaWNlLXBhc3N3b3JkIiksCi0gICAgICAgIG51bGxwdHIpOwot
Ci0gICAgbWVkaWFFbmRwb2ludC0+ZGlzcGF0Y2hOZXdJY2VDYW5kaWRhdGUobWVkaWFFbmRwb2lu
dC0+c2Vzc2lvbk1pZChzZXNzaW9uKSwgV1RGTW92ZShpY2VDYW5kaWRhdGUpKTsKLQotICAgIGdf
ZnJlZShmb3VuZGF0aW9uKTsKLSAgICBnX2ZyZWUoYWRkcmVzcyk7Ci0gICAgZ19mcmVlKHJlbGF0
ZWRBZGRyZXNzKTsKLX0KLQotc3RhdGljIHZvaWQgY2FuZGlkYXRlR2F0aGVyaW5nRG9uZShPd3JT
ZXNzaW9uKiBzZXNzaW9uLCBNZWRpYUVuZHBvaW50T3dyKiBtZWRpYUVuZHBvaW50KQotewotICAg
IG1lZGlhRW5kcG9pbnQtPmRpc3BhdGNoR2F0aGVyaW5nRG9uZShtZWRpYUVuZHBvaW50LT5zZXNz
aW9uTWlkKHNlc3Npb24pKTsKLX0KLQotc3RhdGljIHZvaWQgaWNlQ29ubmVjdGlvblN0YXRlQ2hh
bmdlKE93clNlc3Npb24qIHNlc3Npb24sIEdQYXJhbVNwZWMqLCBNZWRpYUVuZHBvaW50T3dyKiBt
ZWRpYUVuZHBvaW50KQotewotICAgIG1lZGlhRW5kcG9pbnQtPnByb2Nlc3NJY2VUcmFuc3BvcnRT
dGF0ZUNoYW5nZShzZXNzaW9uKTsKLX0KLQotc3RhdGljIHZvaWQgZ290SW5jb21pbmdTb3VyY2Uo
T3dyTWVkaWFTZXNzaW9uKiBtZWRpYVNlc3Npb24sIE93ck1lZGlhU291cmNlKiBzb3VyY2UsIE1l
ZGlhRW5kcG9pbnRPd3IqIG1lZGlhRW5kcG9pbnQpCi17Ci0gICAgbWVkaWFFbmRwb2ludC0+dW5t
dXRlUmVtb3RlU291cmNlKG1lZGlhRW5kcG9pbnQtPnNlc3Npb25NaWQoT1dSX1NFU1NJT04obWVk
aWFTZXNzaW9uKSksIHNvdXJjZSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2Vu
ZGlmIC8vIEVOQUJMRShXRUJfUlRDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWVkaWFzdHJlYW0vb3BlbndlYnJ0Yy9NZWRpYUVuZHBvaW50T3dyLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9vcGVud2VicnRjL01lZGlhRW5kcG9pbnRPd3IuaApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjMxMDQ4YzllY2ZlZWUzNTBhYzI5ZjYyMjFh
Y2QwYzJlYWRiOTBmNy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9vcGVud2VicnRjL01lZGlh
RW5kcG9pbnRPd3IuaAorKysgL2Rldi9udWxsCkBAIC0xLDE0OSArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDE1LCAyMDE2IEVyaWNzc29uIEFCLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiAgICBpbiB0aGUg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0g
KiAgICBkaXN0cmlidXRpb24uCi0gKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIEVyaWNzc29uIG5v
ciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICogICAgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0gKiAgICBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICog
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LSNwcmFnbWEgb25jZQotCi0jaWYgRU5BQkxFKFdFQl9SVEMpCi0KLSNpbmNsdWRlICJNZWRpYUVu
ZHBvaW50LmgiCi0jaW5jbHVkZSA8b3dyL293cl9zZXNzaW9uLmg+Ci0jaW5jbHVkZSA8d3RmL1Jl
ZkNvdW50ZWQuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0KLXR5cGVkZWYgc3RydWN0IF9P
d3JNZWRpYVNlc3Npb24gT3dyTWVkaWFTZXNzaW9uOwotdHlwZWRlZiBzdHJ1Y3QgX093ck1lZGlh
U291cmNlIE93ck1lZGlhU291cmNlOwotdHlwZWRlZiBzdHJ1Y3QgX093clRyYW5zcG9ydEFnZW50
IE93clRyYW5zcG9ydEFnZW50OwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFJlYWx0
aW1lTWVkaWFTb3VyY2VPd3I7Ci1jbGFzcyBSVENDb25maWd1cmF0aW9uUHJpdmF0ZTsKLQotc3Ry
dWN0IFBlZXJNZWRpYURlc2NyaXB0aW9uOwotCi1jbGFzcyBPd3JUcmFuc2NlaXZlciA6IHB1Ymxp
YyBSZWZDb3VudGVkPE93clRyYW5zY2VpdmVyPiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxP
d3JUcmFuc2NlaXZlcj4gY3JlYXRlKGNvbnN0IFN0cmluZyYgbWlkLCBPd3JTZXNzaW9uKiBzZXNz
aW9uKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgT3dyVHJhbnNjZWl2ZXIo
bWlkLCBzZXNzaW9uKSk7Ci0gICAgfQotICAgIHZpcnR1YWwgfk93clRyYW5zY2VpdmVyKCkgeyB9
Ci0KLSAgICBjb25zdCBTdHJpbmcmIG1pZCgpIGNvbnN0IHsgcmV0dXJuIG1fbWlkOyB9Ci0gICAg
T3dyU2Vzc2lvbiogc2Vzc2lvbigpIGNvbnN0IHsgcmV0dXJuIG1fc2Vzc2lvbjsgfQotCi0gICAg
T3dySWNlU3RhdGUgb3dySWNlU3RhdGUoKSBjb25zdCB7IHJldHVybiBtX293ckljZVN0YXRlOyB9
Ci0gICAgdm9pZCBzZXRPd3JJY2VTdGF0ZShPd3JJY2VTdGF0ZSBzdGF0ZSkgeyBtX293ckljZVN0
YXRlID0gc3RhdGU7IH0KLQotICAgIGJvb2wgZ290RW5kT2ZSZW1vdGVDYW5kaWRhdGVzKCkgY29u
c3QgeyByZXR1cm4gbV9nb3RFbmRPZlJlbW90ZUNhbmRpZGF0ZXM7IH0KLSAgICB2b2lkIG1hcmtH
b3RFbmRPZlJlbW90ZUNhbmRpZGF0ZXMoKSB7IG1fZ290RW5kT2ZSZW1vdGVDYW5kaWRhdGVzID0g
dHJ1ZTsgfQotCi1wcml2YXRlOgotICAgIE93clRyYW5zY2VpdmVyKGNvbnN0IFN0cmluZyYgbWlk
LCBPd3JTZXNzaW9uKiBzZXNzaW9uKQotICAgICAgICA6IG1fbWlkKG1pZCkKLSAgICAgICAgLCBt
X3Nlc3Npb24oc2Vzc2lvbikKLSAgICB7IH0KLQotICAgIFN0cmluZyBtX21pZDsKLSAgICBPd3JT
ZXNzaW9uKiBtX3Nlc3Npb247Ci0KLSAgICBPd3JJY2VTdGF0ZSBtX293ckljZVN0YXRlIHsgT1dS
X0lDRV9TVEFURV9ESVNDT05ORUNURUQgfTsKLSAgICBib29sIG1fZ290RW5kT2ZSZW1vdGVDYW5k
aWRhdGVzIHsgZmFsc2UgfTsKLX07Ci0KLWNsYXNzIE1lZGlhRW5kcG9pbnRPd3IgOiBwdWJsaWMg
TWVkaWFFbmRwb2ludCB7Ci1wdWJsaWM6Ci0gICAgTWVkaWFFbmRwb2ludE93cihNZWRpYUVuZHBv
aW50Q2xpZW50Jik7Ci0gICAgfk1lZGlhRW5kcG9pbnRPd3IoKTsKLQotICAgIHZvaWQgc2V0Q29u
ZmlndXJhdGlvbihNZWRpYUVuZHBvaW50Q29uZmlndXJhdGlvbiYmKSBvdmVycmlkZTsKLQotICAg
IHZvaWQgZ2VuZXJhdGVEdGxzSW5mbygpIG92ZXJyaWRlOwotICAgIE1lZGlhUGF5bG9hZFZlY3Rv
ciBnZXREZWZhdWx0QXVkaW9QYXlsb2FkcygpIG92ZXJyaWRlOwotICAgIE1lZGlhUGF5bG9hZFZl
Y3RvciBnZXREZWZhdWx0VmlkZW9QYXlsb2FkcygpIG92ZXJyaWRlOwotICAgIE1lZGlhUGF5bG9h
ZFZlY3RvciBmaWx0ZXJQYXlsb2Fkcyhjb25zdCBNZWRpYVBheWxvYWRWZWN0b3ImIHJlbW90ZVBh
eWxvYWRzLCBjb25zdCBNZWRpYVBheWxvYWRWZWN0b3ImIGRlZmF1bHRQYXlsb2Fkcykgb3ZlcnJp
ZGU7Ci0KLSAgICBVcGRhdGVSZXN1bHQgdXBkYXRlUmVjZWl2ZUNvbmZpZ3VyYXRpb24oTWVkaWFF
bmRwb2ludFNlc3Npb25Db25maWd1cmF0aW9uKiwgYm9vbCBpc0luaXRpYXRvcikgb3ZlcnJpZGU7
Ci0gICAgVXBkYXRlUmVzdWx0IHVwZGF0ZVNlbmRDb25maWd1cmF0aW9uKE1lZGlhRW5kcG9pbnRT
ZXNzaW9uQ29uZmlndXJhdGlvbiosIGNvbnN0IFJlYWx0aW1lTWVkaWFTb3VyY2VNYXAmLCBib29s
IGlzSW5pdGlhdG9yKSBvdmVycmlkZTsKLQotICAgIHZvaWQgYWRkUmVtb3RlQ2FuZGlkYXRlKGNv
bnN0IEljZUNhbmRpZGF0ZSYsIGNvbnN0IFN0cmluZyYgbWlkLCBjb25zdCBTdHJpbmcmIHVmcmFn
LCBjb25zdCBTdHJpbmcmIHBhc3N3b3JkKSBvdmVycmlkZTsKLQotICAgIFJlZjxSZWFsdGltZU1l
ZGlhU291cmNlPiBjcmVhdGVNdXRlZFJlbW90ZVNvdXJjZShjb25zdCBTdHJpbmcmIG1pZCwgUmVh
bHRpbWVNZWRpYVNvdXJjZTo6VHlwZSkgb3ZlcnJpZGU7Ci0gICAgdm9pZCByZXBsYWNlTXV0ZWRS
ZW1vdGVTb3VyY2VNaWQoY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJikgZmluYWw7Ci0gICAg
dm9pZCByZXBsYWNlU2VuZFNvdXJjZShSZWFsdGltZU1lZGlhU291cmNlJiwgY29uc3QgU3RyaW5n
JiBtaWQpIG92ZXJyaWRlOwotCi0gICAgdm9pZCBzdG9wKCkgb3ZlcnJpZGU7Ci0KLSAgICBzaXpl
X3QgdHJhbnNjZWl2ZXJJbmRleEZvclNlc3Npb24oT3dyU2Vzc2lvbiopIGNvbnN0OwotICAgIGNv
bnN0IFN0cmluZyYgc2Vzc2lvbk1pZChPd3JTZXNzaW9uKikgY29uc3Q7Ci0gICAgT3dyVHJhbnNj
ZWl2ZXIqIG1hdGNoVHJhbnNjZWl2ZXJCeU1pZChjb25zdCBTdHJpbmcmIG1pZCkgY29uc3Q7Ci0K
LSAgICB2b2lkIGRpc3BhdGNoTmV3SWNlQ2FuZGlkYXRlKGNvbnN0IFN0cmluZyYgbWlkLCBJY2VD
YW5kaWRhdGUmJik7Ci0gICAgdm9pZCBkaXNwYXRjaEdhdGhlcmluZ0RvbmUoY29uc3QgU3RyaW5n
JiBtaWQpOwotICAgIHZvaWQgcHJvY2Vzc0ljZVRyYW5zcG9ydFN0YXRlQ2hhbmdlKE93clNlc3Np
b24qKTsKLSAgICB2b2lkIGRpc3BhdGNoRHRsc0ZpbmdlcnByaW50KGdjaGFyKiBwcml2YXRlS2V5
LCBnY2hhciogY2VydGlmaWNhdGUsIGNvbnN0IFN0cmluZyYgZmluZ2VycHJpbnQsIGNvbnN0IFN0
cmluZyYgZmluZ2VycHJpbnRGdW5jdGlvbik7Ci0gICAgdm9pZCB1bm11dGVSZW1vdGVTb3VyY2Uo
Y29uc3QgU3RyaW5nJiBtaWQsIE93ck1lZGlhU291cmNlKik7Ci0KLXByaXZhdGU6Ci0gICAgZW51
bSBTZXNzaW9uVHlwZSB7IFNlc3Npb25UeXBlTWVkaWEgfTsKLQotICAgIHN0cnVjdCBUcmFuc2Nl
aXZlckNvbmZpZyB7Ci0gICAgICAgIFNlc3Npb25UeXBlIHR5cGU7Ci0gICAgICAgIGJvb2wgaXNE
dGxzQ2xpZW50OwotICAgICAgICBTdHJpbmcgbWlkOwotICAgIH07Ci0KLSAgICBzdGQ6OnVuaXF1
ZV9wdHI8UlRDRGF0YUNoYW5uZWxIYW5kbGVyPiBjcmVhdGVEYXRhQ2hhbm5lbEhhbmRsZXIoY29u
c3QgU3RyaW5nJiwgY29uc3QgUlRDRGF0YUNoYW5uZWxJbml0JikgZmluYWw7Ci0KLSAgICB2b2lk
IHByZXBhcmVTZXNzaW9uKE93clNlc3Npb24qLCBQZWVyTWVkaWFEZXNjcmlwdGlvbiopOwotICAg
IHZvaWQgcHJlcGFyZU1lZGlhU2Vzc2lvbihPd3JNZWRpYVNlc3Npb24qLCBQZWVyTWVkaWFEZXNj
cmlwdGlvbiosIGJvb2wgaXNJbml0aWF0b3IpOwotCi0gICAgdm9pZCBlbnN1cmVUcmFuc3BvcnRB
Z2VudEFuZFRyYW5zY2VpdmVycyhib29sIGlzSW5pdGlhdG9yLCBjb25zdCBWZWN0b3I8VHJhbnNj
ZWl2ZXJDb25maWc+Jik7Ci0gICAgdm9pZCBpbnRlcm5hbEFkZFJlbW90ZUNhbmRpZGF0ZShPd3JT
ZXNzaW9uKiwgY29uc3QgSWNlQ2FuZGlkYXRlJiwgY29uc3QgU3RyaW5nJiB1ZnJhZywgY29uc3Qg
U3RyaW5nJiBwYXNzd29yZCk7Ci0KLSAgICBzdGQ6Om9wdGlvbmFsPE1lZGlhRW5kcG9pbnRDb25m
aWd1cmF0aW9uPiBtX2NvbmZpZ3VyYXRpb247Ci0gICAgR1JlZ2V4KiBtX2hlbHBlclNlcnZlclJl
Z0V4OwotCi0gICAgT3dyVHJhbnNwb3J0QWdlbnQqIG1fdHJhbnNwb3J0QWdlbnQ7Ci0gICAgVmVj
dG9yPFJlZlB0cjxPd3JUcmFuc2NlaXZlcj4+IG1fdHJhbnNjZWl2ZXJzOwotICAgIEhhc2hNYXA8
U3RyaW5nLCBSZWZQdHI8UmVhbHRpbWVNZWRpYVNvdXJjZU93cj4+IG1fbXV0ZWRSZW1vdGVTb3Vy
Y2VzOwotCi0gICAgTWVkaWFFbmRwb2ludENsaWVudCYgbV9jbGllbnQ7Ci0KLSAgICB1bnNpZ25l
ZCBtX251bWJlck9mUmVjZWl2ZVByZXBhcmVkU2Vzc2lvbnM7Ci0gICAgdW5zaWduZWQgbV9udW1i
ZXJPZlNlbmRQcmVwYXJlZFNlc3Npb25zOwotCi0gICAgU3RyaW5nIG1fZHRsc1ByaXZhdGVLZXk7
Ci0gICAgU3RyaW5nIG1fZHRsc0NlcnRpZmljYXRlOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKFdFQl9SVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9vcGVud2VicnRjL09wZW5XZWJSVENVdGlsaXRpZXMu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vb3BlbndlYnJ0Yy9PcGVu
V2ViUlRDVXRpbGl0aWVzLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTRjZmI1
OWRmNTAxZDliMWUxNzRlNzc0MGI3NjQ3YjFhNDhjOTM2MC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0
cmVhbS9vcGVud2VicnRjL09wZW5XZWJSVENVdGlsaXRpZXMuY3BwCisrKyAvZGV2L251bGwKQEAg
LTEsNTcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBJZ2FsaWEgUy5MCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTUgTWV0cm9sb2dpY2FsCi0gKgotICogQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICoKLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBo
b2xkZXIgbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0g
KiBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgVVNFKE9QRU5XRUJSVEMpCi0jaW5jbHVk
ZSAiT3BlbldlYlJUQ1V0aWxpdGllcy5oIgotCi0jaW5jbHVkZSA8b3dyL293ci5oPgotCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci0KLXZvaWQgaW5pdGlhbGl6ZU9wZW5XZWJSVEMoKQotewotICAgIHN0
YXRpYyBib29sIGlzSW5pdGlhbGl6ZWQgPSBmYWxzZTsKLSAgICBpZiAoaXNJbml0aWFsaXplZCkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgb3dyX2luaXQoZ19tYWluX2NvbnRleHRfZGVmYXVsdCgp
KTsKLSAgICBpc0luaXRpYWxpemVkID0gdHJ1ZTsKLX0KLQotfQotCi0jZW5kaWYgLy8gVVNFKE9Q
RU5XRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVh
bS9vcGVud2VicnRjL09wZW5XZWJSVENVdGlsaXRpZXMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21lZGlhc3RyZWFtL29wZW53ZWJydGMvT3BlbldlYlJUQ1V0aWxpdGllcy5oCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZWQ0NzRiYmZhNGM1MzIyN2ZiNTY2OWFiNGIzMzBjNjJm
YWM4OWI4Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL29wZW53ZWJydGMvT3BlbldlYlJUQ1V0
aWxpdGllcy5oCisrKyAvZGV2L251bGwKQEAgLTEsNDAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxNSBJZ2FsaWEgUy5MCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgTWV0cm9sb2dpY2Fs
Ci0gKgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICoKLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIDMuIE5laXRoZXIg
dGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAq
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0g
KiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi12
b2lkIGluaXRpYWxpemVPcGVuV2ViUlRDKCk7Ci0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL29wZW53ZWJydGMvUmVhbHRpbWVBdWRpb1NvdXJjZU93
ci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vb3BlbndlYnJ0Yy9SZWFs
dGltZUF1ZGlvU291cmNlT3dyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNhYjcw
NTA4NGI5NGNmYzhlN2IxOWY3ZDdlODIzMjY4Y2JjZWY0NjYuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFz
dHJlYW0vb3BlbndlYnJ0Yy9SZWFsdGltZUF1ZGlvU291cmNlT3dyLmgKKysrIC9kZXYvbnVsbApA
QCAtMSw3MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE1LDIwMTYgSWdhbGlhIFMu
TAotICogQ29weXJpZ2h0IChDKSAyMDE1IE1ldHJvbG9naWNhbAotICoKLSAqIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0g
KgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5
cmlnaHQgaG9sZGVyIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAotICogSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pICYmIFVT
RShPUEVOV0VCUlRDKQotCi0jaW5jbHVkZSAiUmVhbHRpbWVNZWRpYVNvdXJjZU93ci5oIgotCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFJlYWx0aW1lQXVkaW9Tb3VyY2VPd3IgOiBwdWJs
aWMgUmVhbHRpbWVNZWRpYVNvdXJjZU93ciB7Ci1wdWJsaWM6Ci1SZWFsdGltZUF1ZGlvU291cmNl
T3dyKE93ck1lZGlhU291cmNlKiBtZWRpYVNvdXJjZSwgY29uc3QgU3RyaW5nJiBpZCwgUmVhbHRp
bWVNZWRpYVNvdXJjZTo6VHlwZSB0eXBlLCBjb25zdCBTdHJpbmcmIG5hbWUpCi0gICAgOiBSZWFs
dGltZU1lZGlhU291cmNlT3dyKG1lZGlhU291cmNlLCBpZCwgdHlwZSwgbmFtZSkKLSAgICB7Ci0g
ICAgfQotCi1SZWFsdGltZUF1ZGlvU291cmNlT3dyKGNvbnN0IFN0cmluZyYgaWQsIFJlYWx0aW1l
TWVkaWFTb3VyY2U6OlR5cGUgdHlwZSwgY29uc3QgU3RyaW5nJiBuYW1lKQotICAgIDogUmVhbHRp
bWVNZWRpYVNvdXJjZU93cihpZCwgdHlwZSwgbmFtZSkKLSAgICB7Ci0gICAgfQotCi0gICAgdmly
dHVhbCB+UmVhbHRpbWVBdWRpb1NvdXJjZU93cigpIHsgfQotCi0gICAgYm9vbCBhcHBseVNpemUo
Y29uc3QgSW50U2l6ZSYpIGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9Ci0KLXByb3RlY3RlZDoKLSAg
ICB2b2lkIGluaXRpYWxpemVTZXR0aW5ncygpIGZpbmFsIHsKLSAgICAgICAgaWYgKG1fY3VycmVu
dFNldHRpbmdzLmRldmljZUlkKCkuaXNFbXB0eSgpKQotICAgICAgICAgICAgbV9jdXJyZW50U2V0
dGluZ3Muc2V0U3VwcG9ydGVkQ29uc3RyYWludHMoc3VwcG9ydGVkQ29uc3RyYWludHMoKSk7Ci0K
LSAgICAgICAgbV9jdXJyZW50U2V0dGluZ3Muc2V0RGV2aWNlSWQoaWQoKSk7Ci0gICAgfQotfTsK
LQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVB
TSkgJiYgVVNFKE9QRU5XRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tZWRpYXN0cmVhbS9vcGVud2VicnRjL1JlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJPd3IuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vb3BlbndlYnJ0Yy9SZWFsdGlt
ZU1lZGlhU291cmNlQ2VudGVyT3dyLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
YWFhZDhhMjM5MDI3N2YzNzk3MDE0MTI0OTkxZjRhZGRhOGFkODQzOC4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
ZWRpYXN0cmVhbS9vcGVud2VicnRjL1JlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJPd3IuY3BwCisr
KyAvZGV2L251bGwKQEAgLTEsMTkwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEg
RXJpY3Nzb24gQUIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNSBJ
Z2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE1IE1l
dHJvbG9naWNhbC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgotICogICAgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogICAgZGlzdHJpYnV0aW9uLgotICog
My4gTmVpdGhlciB0aGUgbmFtZSBvZiBFcmljc3NvbiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250
cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkIGZyb20gdGhpcwotICogICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAq
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0K
LSNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKSAmJiBVU0UoT1BFTldFQlJUQykKLSNpbmNsdWRlICJS
ZWFsdGltZU1lZGlhU291cmNlQ2VudGVyT3dyLmgiCi0KLSNpbmNsdWRlICJDYXB0dXJlRGV2aWNl
LmgiCi0jaW5jbHVkZSAiTWVkaWFTdHJlYW1Qcml2YXRlLmgiCi0jaW5jbHVkZSAiTm90SW1wbGVt
ZW50ZWQuaCIKLSNpbmNsdWRlICJPcGVuV2ViUlRDVXRpbGl0aWVzLmgiCi0jaW5jbHVkZSAiUmVh
bHRpbWVBdWRpb1NvdXJjZU93ci5oIgotI2luY2x1ZGUgIlJlYWx0aW1lTWVkaWFTb3VyY2VDYXBh
YmlsaXRpZXMuaCIKLSNpbmNsdWRlICJSZWFsdGltZVZpZGVvU291cmNlT3dyLmgiCi0jaW5jbHVk
ZSA8b3dyL293ci5oPgotI2luY2x1ZGUgPG93ci9vd3JfbG9jYWwuaD4KLSNpbmNsdWRlIDxvd3Iv
b3dyX21lZGlhX3NvdXJjZS5oPgotI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+Ci0jaW5jbHVk
ZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0jaW5jbHVkZSA8d3RmL1VVSUQuaD4KLSNpbmNsdWRl
IDx3dGYvZ2xpYi9HVW5pcXVlUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgot
I2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewot
Ci1SZWFsdGltZU1lZGlhU291cmNlQ2VudGVyJiBSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyOjpw
bGF0Zm9ybUNlbnRlcigpCi17Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBzdGF0
aWMgTmV2ZXJEZXN0cm95ZWQ8UmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlck93cj4gY2VudGVyOwot
ICAgIHJldHVybiBjZW50ZXI7Ci19Ci0KLXN0YXRpYyB2b2lkIG1lZGlhU291cmNlc0F2YWlsYWJs
ZUNhbGxiYWNrKEdMaXN0KiBzb3VyY2VzLCBncG9pbnRlciB1c2VyRGF0YSkKLXsKLSAgICBSZWFs
dGltZU1lZGlhU291cmNlQ2VudGVyT3dyKiBjZW50ZXIgPSByZWludGVycHJldF9jYXN0PFJlYWx0
aW1lTWVkaWFTb3VyY2VDZW50ZXJPd3IqPih1c2VyRGF0YSk7Ci0gICAgY2VudGVyLT5tZWRpYVNv
dXJjZXNBdmFpbGFibGUoc291cmNlcyk7Ci19Ci0KLVJlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJP
d3I6OlJlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJPd3IoKQotewotICAgIGluaXRpYWxpemVPcGVu
V2ViUlRDKCk7Ci19Ci0KLVJlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJPd3I6On5SZWFsdGltZU1l
ZGlhU291cmNlQ2VudGVyT3dyKCkKLXsKLX0KLQotdm9pZCBSZWFsdGltZU1lZGlhU291cmNlQ2Vu
dGVyT3dyOjp2YWxpZGF0ZVJlcXVlc3RDb25zdHJhaW50cyhWYWxpZENvbnN0cmFpbnRzSGFuZGxl
ciYmIHZhbGlkSGFuZGxlciwgSW52YWxpZENvbnN0cmFpbnRzSGFuZGxlciYmIGludmFsaWRIYW5k
bGVyLCBjb25zdCBNZWRpYUNvbnN0cmFpbnRzJiBhdWRpb0NvbnN0cmFpbnRzLCBjb25zdCBNZWRp
YUNvbnN0cmFpbnRzJiB2aWRlb0NvbnN0cmFpbnRzLCBTdHJpbmcmJiBkZXZpY2VJZGVudGlmaWVy
SGFzaFNhbHQpCi17Ci0gICAgbV92YWxpZENvbnN0cmFpbnRzSGFuZGxlciA9IFdURk1vdmUodmFs
aWRIYW5kbGVyKTsKLSAgICBtX2ludmFsaWRDb25zdHJhaW50c0hhbmRsZXIgPSBXVEZNb3ZlKGlu
dmFsaWRIYW5kbGVyKTsKLQotICAgIFZlY3RvcjxTdHJpbmc+IGF1ZGlvU291cmNlczsKLSAgICBW
ZWN0b3I8U3RyaW5nPiB2aWRlb1NvdXJjZXM7Ci0KLSAgICAvLyBGSVhNRTogQWN0dWFsbHkgZG8g
Y29uc3RyYWludHMgdmFsaWRhdGlvbi4gVGhlIE1lZGlhQ29uc3RyYWludHMKLSAgICAvLyBuZWVk
IHRvIGNvbXBseSB3aXRoIHRoZSBhdmFpbGFibGUgYXVkaW8vdmlkZW8gZGV2aWNlKHMpCi0gICAg
Ly8gY2FwYWJpbGl0aWVzLiBTZWUgYnVnICMxMjMzNDUuCi0gICAgaWYgKGF1ZGlvQ29uc3RyYWlu
dHMuaXNWYWxpZCkKLSAgICAgICAgYXVkaW9Tb3VyY2VzLmFwcGVuZChTdHJpbmcoImF1ZGlvIikp
OwotCi0gICAgaWYgKHZpZGVvQ29uc3RyYWludHMuaXNWYWxpZCkKLSAgICAgICAgdmlkZW9Tb3Vy
Y2VzLmFwcGVuZChTdHJpbmcoInZpZGVvIikpOwotCi0gICAgbV92YWxpZENvbnN0cmFpbnRzSGFu
ZGxlcihXVEZNb3ZlKGF1ZGlvU291cmNlcyksIFdURk1vdmUodmlkZW9Tb3VyY2VzKSwgV1RGTW92
ZShkZXZpY2VJZGVudGlmaWVySGFzaFNhbHQpKTsKLSAgICBtX3ZhbGlkQ29uc3RyYWludHNIYW5k
bGVyID0gbnVsbHB0cjsKLSAgICBtX2ludmFsaWRDb25zdHJhaW50c0hhbmRsZXIgPSBudWxscHRy
OwotfQotCi12b2lkIFJlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJPd3I6OmNyZWF0ZU1lZGlhU3Ry
ZWFtKE5ld01lZGlhU3RyZWFtSGFuZGxlciYmIGNvbXBsZXRpb25IYW5kbGVyLCBjb25zdCBTdHJp
bmcmIGF1ZGlvRGV2aWNlSUQsIGNvbnN0IFN0cmluZyYgdmlkZW9EZXZpY2VJRCwgY29uc3QgTWVk
aWFDb25zdHJhaW50cyosIGNvbnN0IE1lZGlhQ29uc3RyYWludHMqKQotewotICAgIGludCB0eXBl
cyA9IE9XUl9NRURJQV9UWVBFX1VOS05PV047Ci0KLSAgICBpZiAoIWF1ZGlvRGV2aWNlSUQuaXNF
bXB0eSgpKQotICAgICAgICB0eXBlcyB8PSBPV1JfTUVESUFfVFlQRV9BVURJTzsKLSAgICBpZiAo
IXZpZGVvRGV2aWNlSUQuaXNFbXB0eSgpKQotICAgICAgICB0eXBlcyB8PSBPV1JfTUVESUFfVFlQ
RV9WSURFTzsKLQotICAgIG1fY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKTsKLQotICAgIG93cl9nZXRfY2FwdHVyZV9zb3VyY2VzKHN0YXRpY19jYXN0PE93ck1l
ZGlhVHlwZT4odHlwZXMpLCBtZWRpYVNvdXJjZXNBdmFpbGFibGVDYWxsYmFjaywgdGhpcyk7Ci19
Ci0KLVZlY3RvcjxDYXB0dXJlRGV2aWNlPiBSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyT3dyOjpn
ZXRNZWRpYVN0cmVhbURldmljZXMoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0
dXJuIFZlY3RvcjxDYXB0dXJlRGV2aWNlPigpOwotfQotCi12b2lkIFJlYWx0aW1lTWVkaWFTb3Vy
Y2VDZW50ZXJPd3I6Om1lZGlhU291cmNlc0F2YWlsYWJsZShHTGlzdCogc291cmNlcykKLXsKLSAg
ICBWZWN0b3I8UmVmPFJlYWx0aW1lTWVkaWFTb3VyY2U+PiBhdWRpb1NvdXJjZXM7Ci0gICAgVmVj
dG9yPFJlZjxSZWFsdGltZU1lZGlhU291cmNlPj4gdmlkZW9Tb3VyY2VzOwotCi0gICAgZm9yIChh
dXRvIGl0ZW0gPSBzb3VyY2VzOyBpdGVtOyBpdGVtID0gaXRlbS0+bmV4dCkgewotICAgICAgICBP
d3JNZWRpYVNvdXJjZSogc291cmNlID0gT1dSX01FRElBX1NPVVJDRShpdGVtLT5kYXRhKTsKLQot
ICAgICAgICBHVW5pcXVlT3V0UHRyPGdjaGFyPiBuYW1lOwotICAgICAgICBPd3JNZWRpYVR5cGUg
bWVkaWFUeXBlOwotICAgICAgICBnX29iamVjdF9nZXQoc291cmNlLCAibWVkaWEtdHlwZSIsICZt
ZWRpYVR5cGUsICJuYW1lIiwgJm5hbWUub3V0UHRyKCksIE5VTEwpOwotICAgICAgICBTdHJpbmcg
c291cmNlTmFtZShuYW1lLmdldCgpKTsKLSAgICAgICAgU3RyaW5nIGlkKGNyZWF0ZUNhbm9uaWNh
bFVVSURTdHJpbmcoKSk7Ci0KLSAgICAgICAgaWYgKGdfZ2V0ZW52KCJPV1JfVVNFX1RFU1RfU09V
UkNFUyIpKSB7Ci0gICAgICAgICAgICBPd3JTb3VyY2VUeXBlIHNvdXJjZVR5cGUgPSBPV1JfU09V
UkNFX1RZUEVfVU5LTk9XTjsKLSAgICAgICAgICAgIGdfb2JqZWN0X2dldChzb3VyY2UsICJ0eXBl
IiwgJnNvdXJjZVR5cGUsIE5VTEwpOwotICAgICAgICAgICAgaWYgKHNvdXJjZVR5cGUgIT0gT1dS
X1NPVVJDRV9UWVBFX1RFU1QpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0K
LQotICAgICAgICBSZWFsdGltZU1lZGlhU291cmNlOjpUeXBlIG1lZGlhU291cmNlVHlwZTsKLSAg
ICAgICAgaWYgKG1lZGlhVHlwZSAmIE9XUl9NRURJQV9UWVBFX0FVRElPKQotICAgICAgICAgICAg
bWVkaWFTb3VyY2VUeXBlID0gUmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlwZTo6QXVkaW87Ci0gICAg
ICAgIGVsc2UgaWYgKG1lZGlhVHlwZSAmIE9XUl9NRURJQV9UWVBFX1ZJREVPKQotICAgICAgICAg
ICAgbWVkaWFTb3VyY2VUeXBlID0gUmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlwZTo6VmlkZW87Ci0g
ICAgICAgIGVsc2UgewotICAgICAgICAgICAgbWVkaWFTb3VyY2VUeXBlID0gUmVhbHRpbWVNZWRp
YVNvdXJjZTo6VHlwZTo6Tm9uZTsKLSAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwot
ICAgICAgICB9Ci0KLSAgICAgICAgUmVmUHRyPFJlYWx0aW1lTWVkaWFTb3VyY2VPd3I+IG1lZGlh
U291cmNlOwotICAgICAgICBpZiAobWVkaWFTb3VyY2VUeXBlID09IFJlYWx0aW1lTWVkaWFTb3Vy
Y2U6OlR5cGU6OkF1ZGlvKQotICAgICAgICAgICAgbWVkaWFTb3VyY2UgPSBhZG9wdFJlZihuZXcg
UmVhbHRpbWVBdWRpb1NvdXJjZU93cihzb3VyY2UsIGlkLCBtZWRpYVNvdXJjZVR5cGUsIHNvdXJj
ZU5hbWUpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgbWVkaWFTb3VyY2UgPSBhZG9wdFJl
ZihuZXcgUmVhbHRpbWVWaWRlb1NvdXJjZU93cihzb3VyY2UsIGlkLCBtZWRpYVNvdXJjZVR5cGUs
IHNvdXJjZU5hbWUpKTsKLQotICAgICAgICBSZWFsdGltZU1lZGlhU291cmNlT3dyTWFwOjppdGVy
YXRvciBzb3VyY2VJdGVyYXRvciA9IG1fc291cmNlTWFwLmZpbmQoaWQpOwotICAgICAgICBpZiAo
c291cmNlSXRlcmF0b3IgPT0gbV9zb3VyY2VNYXAuZW5kKCkpCi0gICAgICAgICAgICBtX3NvdXJj
ZU1hcC5hZGQoaWQsIG1lZGlhU291cmNlLmNvcHlSZWYoKSk7Ci0KLSAgICAgICAgaWYgKG1lZGlh
VHlwZSAmIE9XUl9NRURJQV9UWVBFX0FVRElPKQotICAgICAgICAgICAgYXVkaW9Tb3VyY2VzLmFw
cGVuZChtZWRpYVNvdXJjZS5yZWxlYXNlTm9uTnVsbCgpKTsKLSAgICAgICAgZWxzZSBpZiAobWVk
aWFUeXBlICYgT1dSX01FRElBX1RZUEVfVklERU8pCi0gICAgICAgICAgICB2aWRlb1NvdXJjZXMu
YXBwZW5kKG1lZGlhU291cmNlLnJlbGVhc2VOb25OdWxsKCkpOwotCi0gICAgfQotCi0gICAgaWYg
KHZpZGVvU291cmNlcy5pc0VtcHR5KCkgJiYgYXVkaW9Tb3VyY2VzLmlzRW1wdHkoKSkKLSAgICAg
ICAgbV9jb21wbGV0aW9uSGFuZGxlcihudWxscHRyKTsKLSAgICBlbHNlCi0gICAgICAgIG1fY29t
cGxldGlvbkhhbmRsZXIoTWVkaWFTdHJlYW1Qcml2YXRlOjpjcmVhdGUoYXVkaW9Tb3VyY2VzLCB2
aWRlb1NvdXJjZXMpKTsKLQotfQotCi1SZWFsdGltZU1lZGlhU291cmNlKiBSZWFsdGltZU1lZGlh
U291cmNlQ2VudGVyT3dyOjpmaXJzdFNvdXJjZShSZWFsdGltZU1lZGlhU291cmNlOjpUeXBlIHR5
cGUpCi17Ci0gICAgZm9yIChhdXRvIGl0ZXIgPSBtX3NvdXJjZU1hcC5iZWdpbigpOyBpdGVyICE9
IG1fc291cmNlTWFwLmVuZCgpOyArK2l0ZXIpIHsKLSAgICAgICAgUmVmUHRyPFJlYWx0aW1lTWVk
aWFTb3VyY2U+IHNvdXJjZSA9IGl0ZXItPnZhbHVlOwotICAgICAgICBpZiAoc291cmNlLT50eXBl
KCkgPT0gdHlwZSkKLSAgICAgICAgICAgIHJldHVybiBzb3VyY2UuZ2V0KCk7Ci0gICAgfQotCi0g
ICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlm
IC8vIEVOQUJMRShNRURJQV9TVFJFQU0pICYmIFVTRShPUEVOV0VCUlRDKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vb3BlbndlYnJ0Yy9SZWFsdGltZU1l
ZGlhU291cmNlQ2VudGVyT3dyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVh
bS9vcGVud2VicnRjL1JlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJPd3IuaApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggNjgwZDkxODIxMzAzODJmNDMwMmYxMjc4ZGFiYmZhMjQ4MmEzMzUz
MC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9vcGVud2VicnRjL1JlYWx0aW1lTWVkaWFTb3Vy
Y2VDZW50ZXJPd3IuaAorKysgL2Rldi9udWxsCkBAIC0xLDEwMSArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDExIEVyaWNzc29uIEFCLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTUgSWdhbGlhIFMuTC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxNSBNZXRyb2xvZ2ljYWwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqICAgIGluIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqICAgIGRp
c3RyaWJ1dGlvbi4KLSAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgRXJpY3Nzb24gbm9yIHRoZSBu
YW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0gKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSAqICAgIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
LSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdt
YSBvbmNlCi0KLSNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKSAmJiBVU0UoT1BFTldFQlJUQykKLQot
I2luY2x1ZGUgIkNhcHR1cmVEZXZpY2VNYW5hZ2VyLmgiCi0jaW5jbHVkZSAiUmVhbHRpbWVNZWRp
YVNvdXJjZUNlbnRlci5oIgotI2luY2x1ZGUgIlJlYWx0aW1lTWVkaWFTb3VyY2VPd3IuaCIKLSNp
bmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgQ2Fw
dHVyZURldmljZTsKLWNsYXNzIE1lZGlhU3RyZWFtUHJpdmF0ZTsKLWNsYXNzIFJlYWx0aW1lTWVk
aWFTb3VyY2U7Ci1jbGFzcyBNZWRpYVN0cmVhbVNvdXJjZXNRdWVyeUNsaWVudDsKLWNsYXNzIFRy
YWNrU291cmNlSW5mbzsKLQotY2xhc3MgUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlck93ciBmaW5h
bCA6IHB1YmxpYyBSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyIHsKLXB1YmxpYzoKLSAgICBSZWFs
dGltZU1lZGlhU291cmNlQ2VudGVyT3dyKCk7Ci0gICAgflJlYWx0aW1lTWVkaWFTb3VyY2VDZW50
ZXJPd3IoKTsKLQotICAgIHZvaWQgdmFsaWRhdGVSZXF1ZXN0Q29uc3RyYWludHMoVmFsaWRDb25z
dHJhaW50c0hhbmRsZXImJiB2YWxpZEhhbmRsZXIsIEludmFsaWRDb25zdHJhaW50c0hhbmRsZXIm
JiBpbnZhbGlkSGFuZGxlciwgY29uc3QgTWVkaWFDb25zdHJhaW50cyYgYXVkaW9Db25zdHJhaW50
cywgY29uc3QgTWVkaWFDb25zdHJhaW50cyYgdmlkZW9Db25zdHJhaW50cywgU3RyaW5nJiYpIGZp
bmFsOwotCi0gICAgdm9pZCBjcmVhdGVNZWRpYVN0cmVhbShOZXdNZWRpYVN0cmVhbUhhbmRsZXIm
JiwgY29uc3QgU3RyaW5nJiBhdWRpb0RldmljZUlELCBjb25zdCBTdHJpbmcmIHZpZGVvRGV2aWNl
SUQsIGNvbnN0IE1lZGlhQ29uc3RyYWludHMqIHZpZGVvQ29uc3RyYWludHMsIGNvbnN0IE1lZGlh
Q29uc3RyYWludHMqIGF1ZGlvQ29uc3RyYWludHMpIGZpbmFsOwotCi0gICAgVmVjdG9yPENhcHR1
cmVEZXZpY2U+IGdldE1lZGlhU3RyZWFtRGV2aWNlcygpIGZpbmFsOwotCi0gICAgdm9pZCBtZWRp
YVNvdXJjZXNBdmFpbGFibGUoR0xpc3QqIHNvdXJjZXMpOwotCi1wcml2YXRlOgotICAgIFJlYWx0
aW1lTWVkaWFTb3VyY2U6OkF1ZGlvQ2FwdHVyZUZhY3RvcnkmIGRlZmF1bHRBdWRpb0ZhY3Rvcnko
KSBmaW5hbCB7IHJldHVybiBtX2RlZmF1bHRBdWRpb0ZhY3Rvcnk7IH0KLSAgICBSZWFsdGltZU1l
ZGlhU291cmNlOjpWaWRlb0NhcHR1cmVGYWN0b3J5JiBkZWZhdWx0VmlkZW9GYWN0b3J5KCkgZmlu
YWwgeyByZXR1cm4gbV9kZWZhdWx0VmlkZW9GYWN0b3J5OyB9Ci0gICAgQ2FwdHVyZURldmljZU1h
bmFnZXImIGRlZmF1bHRBdWRpb0NhcHR1cmVEZXZpY2VNYW5hZ2VyKCkgZmluYWwgeyByZXR1cm4g
bV9kZWZhdWx0QXVkaW9DYXB0dXJlRGV2aWNlTWFuYWdlcjsgfQotICAgIENhcHR1cmVEZXZpY2VN
YW5hZ2VyJiBkZWZhdWx0VmlkZW9DYXB0dXJlRGV2aWNlTWFuYWdlcigpIGZpbmFsIHsgcmV0dXJu
IG1fZGVmYXVsdFZpZGVvQ2FwdHVyZURldmljZU1hbmFnZXI7IH0KLQotICAgIFJlYWx0aW1lTWVk
aWFTb3VyY2UqIGZpcnN0U291cmNlKFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGUpOwotICAgIFJl
YWx0aW1lTWVkaWFTb3VyY2VPd3JNYXAgbV9zb3VyY2VNYXA7Ci0gICAgVmFsaWRDb25zdHJhaW50
c0hhbmRsZXIgbV92YWxpZENvbnN0cmFpbnRzSGFuZGxlcjsKLSAgICBJbnZhbGlkQ29uc3RyYWlu
dHNIYW5kbGVyIG1faW52YWxpZENvbnN0cmFpbnRzSGFuZGxlcjsKLSAgICBOZXdNZWRpYVN0cmVh
bUhhbmRsZXIgbV9jb21wbGV0aW9uSGFuZGxlcjsKLQotICAgIGNsYXNzIEF1ZGlvQ2FwdHVyZUZh
Y3RvcnlPd3IgOiBwdWJsaWMgUmVhbHRpbWVNZWRpYVNvdXJjZTo6QXVkaW9DYXB0dXJlRmFjdG9y
eSB7Ci0gICAgcHJpdmF0ZToKLSAgICAgICAgQ2FwdHVyZVNvdXJjZU9yRXJyb3IgY3JlYXRlQXVk
aW9DYXB0dXJlU291cmNlKGNvbnN0IFN0cmluZyYsIGNvbnN0IE1lZGlhQ29uc3RyYWludHMqKSBm
aW5hbCB7IHJldHVybiB7IH07IH0KLSAgICB9OwotCi0gICAgY2xhc3MgVmlkZW9DYXB0dXJlRmFj
dG9yeU93ciA6IHB1YmxpYyBSZWFsdGltZU1lZGlhU291cmNlOjpWaWRlb0NhcHR1cmVGYWN0b3J5
IHsKLSAgICBwcml2YXRlOgotICAgICAgICBDYXB0dXJlU291cmNlT3JFcnJvciBjcmVhdGVWaWRl
b0NhcHR1cmVTb3VyY2UoY29uc3QgU3RyaW5nJiwgY29uc3QgTWVkaWFDb25zdHJhaW50cyopIGZp
bmFsIHsgcmV0dXJuIHsgfTsgfQotICAgIH07Ci0KLSAgICBjbGFzcyBDYXB0dXJlRGV2aWNlTWFu
YWdlck93ciA6IHB1YmxpYyBDYXB0dXJlRGV2aWNlTWFuYWdlciB7Ci0gICAgcHJpdmF0ZToKLSAg
ICAgICAgVmVjdG9yPENhcHR1cmVEZXZpY2U+JiBjYXB0dXJlRGV2aWNlcygpIGZpbmFsIHsgcmV0
dXJuIG1fZGV2aWNlczsgfQotCi0gICAgICAgIFZlY3RvcjxDYXB0dXJlRGV2aWNlPiBtX2Rldmlj
ZXM7Ci0gICAgfTsKLQotICAgIEF1ZGlvQ2FwdHVyZUZhY3RvcnlPd3IgbV9kZWZhdWx0QXVkaW9G
YWN0b3J5OwotICAgIFZpZGVvQ2FwdHVyZUZhY3RvcnlPd3IgbV9kZWZhdWx0VmlkZW9GYWN0b3J5
OwotICAgIENhcHR1cmVEZXZpY2VNYW5hZ2VyT3dyIG1fZGVmYXVsdEF1ZGlvQ2FwdHVyZURldmlj
ZU1hbmFnZXI7Ci0gICAgQ2FwdHVyZURldmljZU1hbmFnZXJPd3IgbV9kZWZhdWx0VmlkZW9DYXB0
dXJlRGV2aWNlTWFuYWdlcjsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlm
IC8vIEVOQUJMRShNRURJQV9TVFJFQU0pICYmIFVTRShPUEVOV0VCUlRDKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vb3BlbndlYnJ0Yy9SZWFsdGltZU1l
ZGlhU291cmNlT3dyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL29w
ZW53ZWJydGMvUmVhbHRpbWVNZWRpYVNvdXJjZU93ci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IGVlNzQ5OWQzODAwNjZmMTRhYjZjOWNiMDA4N2JlNGI2ZGQwODc4NWYuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWVkaWFzdHJlYW0vb3BlbndlYnJ0Yy9SZWFsdGltZU1lZGlhU291cmNlT3dyLmNw
cAorKysgL2Rldi9udWxsCkBAIC0xLDYwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTYgSWdhbGlhIFMuTAotICoKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUgbmFt
ZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMg
SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogSE9MREVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAot
ICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29u
ZmlnLmgiCi0KLSNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKSAmJiBVU0UoT1BFTldFQlJUQykKLSNp
bmNsdWRlICJSZWFsdGltZU1lZGlhU291cmNlT3dyLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsK
LQotY29uc3QgUmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzJiBSZWFsdGltZU1lZGlhU291cmNl
T3dyOjpzZXR0aW5ncygpIGNvbnN0Ci17Ci0gICAgY29uc3RfY2FzdDxSZWFsdGltZU1lZGlhU291
cmNlT3dyJj4oKnRoaXMpLmluaXRpYWxpemVTZXR0aW5ncygpOwotICAgIHJldHVybiBtX2N1cnJl
bnRTZXR0aW5nczsKLX0KLQotUmVhbHRpbWVNZWRpYVNvdXJjZVN1cHBvcnRlZENvbnN0cmFpbnRz
JiBSZWFsdGltZU1lZGlhU291cmNlT3dyOjpzdXBwb3J0ZWRDb25zdHJhaW50cygpCi17Ci0gICAg
aWYgKG1fc3VwcG9ydGVkQ29uc3RyYWludHMuc3VwcG9ydHNEZXZpY2VJZCgpKQotICAgICAgICBy
ZXR1cm4gbV9zdXBwb3J0ZWRDb25zdHJhaW50czsKLQotICAgIG1fc3VwcG9ydGVkQ29uc3RyYWlu
dHMuc2V0U3VwcG9ydHNEZXZpY2VJZCh0cnVlKTsKLSAgICBpbml0aWFsaXplU3VwcG9ydGVkQ29u
c3RyYWludHMobV9zdXBwb3J0ZWRDb25zdHJhaW50cyk7Ci0KLSAgICByZXR1cm4gbV9zdXBwb3J0
ZWRDb25zdHJhaW50czsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8g
RU5BQkxFKE1FRElBX1NUUkVBTSkgJiYgVVNFKE9QRU5XRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9vcGVud2VicnRjL1JlYWx0aW1lTWVkaWFT
b3VyY2VPd3IuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL29wZW53ZWJy
dGMvUmVhbHRpbWVNZWRpYVNvdXJjZU93ci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCA3Y2ZiZjc4ZjI1OGQ5MDhhNTQ0Yjk5YjFlYzk4Mjg0YjUzM2U0YTg0Li4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21lZGlhc3RyZWFtL29wZW53ZWJydGMvUmVhbHRpbWVNZWRpYVNvdXJjZU93ci5oCisrKyAvZGV2
L251bGwKQEAgLTEsOTkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBJZ2FsaWEg
Uy5MCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgTWV0cm9sb2dpY2FsCi0gKgotICogQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoK
LSAqCi0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICoKLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNv
cHlyaWdodCBob2xkZXIgbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUCi0gKiBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAq
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLSNpZm5kZWYgUmVhbHRpbWVNZWRpYVNvdXJjZU93cl9oCi0jZGVmaW5lIFJl
YWx0aW1lTWVkaWFTb3VyY2VPd3JfaAotCi0jaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkgJiYgVVNF
KE9QRU5XRUJSVEMpCi0KLSNpbmNsdWRlICJHUmVmUHRyR1N0cmVhbWVyLmgiCi0jaW5jbHVkZSAi
UmVhbHRpbWVNZWRpYVNvdXJjZS5oIgotI2luY2x1ZGUgPG93ci9vd3JfbWVkaWFfc291cmNlLmg+
Ci0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0jaW5j
bHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xh
c3MgUmVhbHRpbWVNZWRpYVNvdXJjZUNhcGFiaWxpdGllczsKLQotY2xhc3MgUmVhbHRpbWVNZWRp
YVNvdXJjZU93ciA6IHB1YmxpYyBSZWFsdGltZU1lZGlhU291cmNlIHsKLXB1YmxpYzoKLVJlYWx0
aW1lTWVkaWFTb3VyY2VPd3IoT3dyTWVkaWFTb3VyY2UqIG1lZGlhU291cmNlLCBjb25zdCBTdHJp
bmcmIGlkLCBSZWFsdGltZU1lZGlhU291cmNlOjpUeXBlIHR5cGUsIGNvbnN0IFN0cmluZyYgbmFt
ZSkKLSAgICA6IFJlYWx0aW1lTWVkaWFTb3VyY2UoaWQsIHR5cGUsIG5hbWUpCi0gICAgLCBtX21l
ZGlhU291cmNlKG1lZGlhU291cmNlKQotICAgIHsKLSAgICAgICAgaWYgKCFtZWRpYVNvdXJjZSkK
LSAgICAgICAgICAgIG5vdGlmeU11dGVkQ2hhbmdlKHRydWUpOwotICAgIH0KLQotUmVhbHRpbWVN
ZWRpYVNvdXJjZU93cihjb25zdCBTdHJpbmcmIGlkLCBSZWFsdGltZU1lZGlhU291cmNlOjpUeXBl
IHR5cGUsIGNvbnN0IFN0cmluZyYgbmFtZSkKLSAgICA6IFJlYWx0aW1lTWVkaWFTb3VyY2UoaWQs
IHR5cGUsIG5hbWUpCi0gICAgLCBtX21lZGlhU291cmNlKG51bGxwdHIpCi0gICAgewotICAgIH0K
LQotICAgIHZpcnR1YWwgflJlYWx0aW1lTWVkaWFTb3VyY2VPd3IoKSB7IH0KLQotICAgIHZvaWQg
c3dhcE91dFNoYWxsb3dTb3VyY2UoT3dyTWVkaWFTb3VyY2UmIHJlYWxTb3VyY2UpCi0gICAgewot
ICAgICAgICBtX21lZGlhU291cmNlID0gJnJlYWxTb3VyY2U7Ci0gICAgICAgIHNldE11dGVkKGZh
bHNlKTsKLSAgICB9Ci0KLSAgICBjb25zdCBSZWFsdGltZU1lZGlhU291cmNlQ2FwYWJpbGl0aWVz
JiBjYXBhYmlsaXRpZXMoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX2NhcGFiaWxpdGllczsg
fQotICAgIGNvbnN0IFJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5ncyYgc2V0dGluZ3MoKSBjb25z
dCBvdmVycmlkZTsKLQotICAgIE93ck1lZGlhU291cmNlKiBtZWRpYVNvdXJjZSgpIGNvbnN0IHsg
cmV0dXJuIG1fbWVkaWFTb3VyY2U7IH0KLQotcHJvdGVjdGVkOgotICAgIHZpcnR1YWwgdm9pZCBp
bml0aWFsaXplU2V0dGluZ3MoKSB7IH07Ci0gICAgdmlydHVhbCB2b2lkIGluaXRpYWxpemVTdXBw
b3J0ZWRDb25zdHJhaW50cyhSZWFsdGltZU1lZGlhU291cmNlU3VwcG9ydGVkQ29uc3RyYWludHMm
KSB7IH07Ci0gICAgUmVhbHRpbWVNZWRpYVNvdXJjZVN1cHBvcnRlZENvbnN0cmFpbnRzJiBzdXBw
b3J0ZWRDb25zdHJhaW50cygpOwotCi0gICAgUmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzIG1f
Y3VycmVudFNldHRpbmdzOwotCi1wcml2YXRlOgotICAgIFJlYWx0aW1lTWVkaWFTb3VyY2VTdXBw
b3J0ZWRDb25zdHJhaW50cyBtX3N1cHBvcnRlZENvbnN0cmFpbnRzOwotICAgIFJlYWx0aW1lTWVk
aWFTb3VyY2VDYXBhYmlsaXRpZXMgbV9jYXBhYmlsaXRpZXM7Ci0gICAgT3dyTWVkaWFTb3VyY2Uq
IG1fbWVkaWFTb3VyY2U7Ci19OwotCi10eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBSZWZQdHI8UmVh
bHRpbWVNZWRpYVNvdXJjZU93cj4+IFJlYWx0aW1lTWVkaWFTb3VyY2VPd3JNYXA7Ci0KLX0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0pICYmIFVT
RShPUEVOV0VCUlRDKQotCi0jZW5kaWYgLy8gUmVhbHRpbWVNZWRpYVNvdXJjZU93cl9oCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9vcGVud2VicnRjL1Jl
YWx0aW1lVmlkZW9Tb3VyY2VPd3IuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3Ry
ZWFtL29wZW53ZWJydGMvUmVhbHRpbWVWaWRlb1NvdXJjZU93ci5oCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCA0MThlZjg0YTcxYTU3MzQ3ZTg1ZDM1MjgzNjllMjc5YzdhNjZmNDU0Li4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL29wZW53ZWJydGMvUmVhbHRpbWVWaWRlb1NvdXJjZU93
ci5oCisrKyAvZGV2L251bGwKQEAgLTEsODIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxNSwyMDE2IElnYWxpYSBTLkwKLSAqIENvcHlyaWdodCAoQykgMjAxNSBNZXRyb2xvZ2ljYWwK
LSAqCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zIGFyZQotICogbWV0OgotICoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogMy4gTmVpdGhlciB0
aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlIG5hbWVzIG9mIGl0cwotICog
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAq
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUo
TUVESUFfU1RSRUFNKSAmJiBVU0UoT1BFTldFQlJUQykKLQotI2luY2x1ZGUgIlJlYWx0aW1lTWVk
aWFTb3VyY2VPd3IuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBSZWFsdGltZVZp
ZGVvU291cmNlT3dyIDogcHVibGljIFJlYWx0aW1lTWVkaWFTb3VyY2VPd3IgewotcHVibGljOgot
UmVhbHRpbWVWaWRlb1NvdXJjZU93cihPd3JNZWRpYVNvdXJjZSogbWVkaWFTb3VyY2UsIGNvbnN0
IFN0cmluZyYgaWQsIFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGUgdHlwZSwgY29uc3QgU3RyaW5n
JiBuYW1lKQotICAgIDogUmVhbHRpbWVNZWRpYVNvdXJjZU93cihtZWRpYVNvdXJjZSwgaWQsIHR5
cGUsIG5hbWUpCi0gICAgewotICAgIH0KLQotUmVhbHRpbWVWaWRlb1NvdXJjZU93cihjb25zdCBT
dHJpbmcmIGlkLCBSZWFsdGltZU1lZGlhU291cmNlOjpUeXBlIHR5cGUsIGNvbnN0IFN0cmluZyYg
bmFtZSkKLSAgICA6IFJlYWx0aW1lTWVkaWFTb3VyY2VPd3IoaWQsIHR5cGUsIG5hbWUpCi0gICAg
ewotICAgIH0KLQotICAgIHZpcnR1YWwgflJlYWx0aW1lVmlkZW9Tb3VyY2VPd3IoKSB7IH0KLQot
ICAgIGJvb2wgYXBwbHlTaXplKGNvbnN0IEludFNpemUmKSBmaW5hbCB7IHJldHVybiB0cnVlOyB9
Ci0KLXByb3RlY3RlZDoKLSAgICB2b2lkIGluaXRpYWxpemVTZXR0aW5ncygpIGZpbmFsIHsKLSAg
ICAgICAgaWYgKG1fY3VycmVudFNldHRpbmdzLmRldmljZUlkKCkuaXNFbXB0eSgpKQotICAgICAg
ICAgICAgbV9jdXJyZW50U2V0dGluZ3Muc2V0U3VwcG9ydGVkQ29uc3RyYWludHMoc3VwcG9ydGVk
Q29uc3RyYWludHMoKSk7Ci0KLSAgICAgICAgbV9jdXJyZW50U2V0dGluZ3Muc2V0RGV2aWNlSWQo
aWQoKSk7Ci0KLSAgICAgICAgbV9jdXJyZW50U2V0dGluZ3Muc2V0RnJhbWVSYXRlKGZyYW1lUmF0
ZSgpKTsKLSAgICAgICAgbV9jdXJyZW50U2V0dGluZ3Muc2V0V2lkdGgoc2l6ZSgpLndpZHRoKCkp
OwotICAgICAgICBtX2N1cnJlbnRTZXR0aW5ncy5zZXRIZWlnaHQoc2l6ZSgpLmhlaWdodCgpKTsK
LSAgICB9Ci0KLSAgICB2b2lkIGluaXRpYWxpemVTdXBwb3J0ZWRDb25zdHJhaW50cyhSZWFsdGlt
ZU1lZGlhU291cmNlU3VwcG9ydGVkQ29uc3RyYWludHMmIHN1cHBvcnRlZENvbnN0cmFpbnRzKSBm
aW5hbCB7Ci0gICAgICAgIHN1cHBvcnRlZENvbnN0cmFpbnRzLnNldFN1cHBvcnRzRmFjaW5nTW9k
ZShSZWFsdGltZU1lZGlhU291cmNlU2V0dGluZ3M6OlVua25vd24pOwotICAgICAgICBzdXBwb3J0
ZWRDb25zdHJhaW50cy5zZXRTdXBwb3J0c1dpZHRoKHRydWUpOwotICAgICAgICBzdXBwb3J0ZWRD
b25zdHJhaW50cy5zZXRTdXBwb3J0c0hlaWdodCh0cnVlKTsKLSAgICAgICAgc3VwcG9ydGVkQ29u
c3RyYWludHMuc2V0U3VwcG9ydHNBc3BlY3RSYXRpbyh0cnVlKTsKLSAgICAgICAgc3VwcG9ydGVk
Q29uc3RyYWludHMuc2V0U3VwcG9ydHNGcmFtZVJhdGUodHJ1ZSk7Ci0gICAgfQotfTsKLQotfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVBTSkgJiYg
VVNFKE9QRU5XRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2Nr
L01vY2tNZWRpYUVuZHBvaW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svTW9j
a01lZGlhRW5kcG9pbnQuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZTliNDFl
NWMxMTk1YzZlM2VjMTM3MDc1ZWE0ZmZhNjY4NmM3YWFmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svTW9j
a01lZGlhRW5kcG9pbnQuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMzQ2ICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTUgRXJpY3Nzb24gQUIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiAgICBpbiB0aGUgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiAg
ICBkaXN0cmlidXRpb24uCi0gKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIEVyaWNzc29uIG5vciB0
aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0gKiAgICBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dO
RVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQot
ICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNp
bmNsdWRlICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShXRUJfUlRDKQotI2luY2x1ZGUgIk1vY2tN
ZWRpYUVuZHBvaW50LmgiCi0KLSNpbmNsdWRlICJNZWRpYUVuZHBvaW50U2Vzc2lvbkNvbmZpZ3Vy
YXRpb24uaCIKLSNpbmNsdWRlICJNZWRpYVBheWxvYWQuaCIKLSNpbmNsdWRlICJNb2NrUmVhbHRp
bWVBdWRpb1NvdXJjZS5oIgotI2luY2x1ZGUgIk1vY2tSZWFsdGltZVZpZGVvU291cmNlLmgiCi0j
aW5jbHVkZSAiUlRDRGF0YUNoYW5uZWxIYW5kbGVyTW9jay5oIgotI2luY2x1ZGUgIlJlYWx0aW1l
TWVkaWFTb3VyY2UuaCIKLSNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci0KLXN0YXRpYyBjb25zdCBjaGFyKiBmaW5nZXJwcmludCA9ICI4Qjo4NzowOTo4
QTo1RDpDMjpGMzozMzpFRjpDNTpCMTpGNjo4NDozQTozRDpENjpBMzpFMjo5QzoxNzo0QzpFNzo0
NjozQjoxQjpDRTo4NDo5ODpERDo4RTpBRjo3QiI7Ci1zdGF0aWMgY29uc3QgY2hhciogZmluZ2Vy
cHJpbnRGdW5jdGlvbiA9ICJzaGEtMjU2IjsKLQotc3RkOjp1bmlxdWVfcHRyPE1lZGlhRW5kcG9p
bnQ+IE1vY2tNZWRpYUVuZHBvaW50OjpjcmVhdGUoTWVkaWFFbmRwb2ludENsaWVudCYgY2xpZW50
KQotewotICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8TWVkaWFFbmRwb2ludD4obmV3IE1vY2tN
ZWRpYUVuZHBvaW50KGNsaWVudCkpOwotfQotCi1Nb2NrTWVkaWFFbmRwb2ludDo6TW9ja01lZGlh
RW5kcG9pbnQoTWVkaWFFbmRwb2ludENsaWVudCYgY2xpZW50KQotICAgIDogbV9jbGllbnQoY2xp
ZW50KQotICAgICwgbV9pY2VDYW5kaWRhdGVUaW1lcigqdGhpcywgJk1vY2tNZWRpYUVuZHBvaW50
OjppY2VDYW5kaWRhdGVUaW1lckZpcmVkKQotICAgICwgbV9pY2VUcmFuc3BvcnRUaW1lcigqdGhp
cywgJk1vY2tNZWRpYUVuZHBvaW50OjppY2VUcmFuc3BvcnRUaW1lckZpcmVkKQotICAgICwgbV91
bm11dGVUaW1lcigqdGhpcywgJk1vY2tNZWRpYUVuZHBvaW50Ojp1bm11dGVUaW1lckZpcmVkKQot
ewotfQotCi1Nb2NrTWVkaWFFbmRwb2ludDo6fk1vY2tNZWRpYUVuZHBvaW50KCkKLXsKLSAgICBz
dG9wKCk7Ci19Ci0KLXN0ZDo6dW5pcXVlX3B0cjxSVENEYXRhQ2hhbm5lbEhhbmRsZXI+IE1vY2tN
ZWRpYUVuZHBvaW50OjpjcmVhdGVEYXRhQ2hhbm5lbEhhbmRsZXIoY29uc3QgU3RyaW5nJiBsYWJl
bCwgY29uc3QgUlRDRGF0YUNoYW5uZWxJbml0JiBvcHRpb25zKQotewotICAgIHJldHVybiBzdGQ6
Om1ha2VfdW5pcXVlPFJUQ0RhdGFDaGFubmVsSGFuZGxlck1vY2s+KGxhYmVsLCBvcHRpb25zKTsK
LX0KLQotdm9pZCBNb2NrTWVkaWFFbmRwb2ludDo6Z2VuZXJhdGVEdGxzSW5mbygpCi17Ci0gICAg
YXV0byB3ZWFrVGhpcyA9IG1fd2Vha1B0ckZhY3RvcnkuY3JlYXRlV2Vha1B0cigqdGhpcyk7Ci0K
LSAgICBjYWxsT25NYWluVGhyZWFkKFt3ZWFrVGhpc10gewotICAgICAgICBpZiAod2Vha1RoaXMp
Ci0gICAgICAgICAgICB3ZWFrVGhpcy0+bV9jbGllbnQuZ290RHRsc0ZpbmdlcnByaW50KGZpbmdl
cnByaW50LCBmaW5nZXJwcmludEZ1bmN0aW9uKTsKLSAgICB9KTsKLX0KLQotTWVkaWFQYXlsb2Fk
VmVjdG9yIE1vY2tNZWRpYUVuZHBvaW50OjpnZXREZWZhdWx0QXVkaW9QYXlsb2FkcygpCi17Ci0g
ICAgTWVkaWFQYXlsb2FkVmVjdG9yIHBheWxvYWRzOwotCi0gICAgTWVkaWFQYXlsb2FkIHBheWxv
YWQxOwotICAgIHBheWxvYWQxLnR5cGUgPSAxMTE7Ci0gICAgcGF5bG9hZDEuZW5jb2RpbmdOYW1l
ID0gIk9QVVMiOwotICAgIHBheWxvYWQxLmNsb2NrUmF0ZSA9IDQ4MDAwOwotICAgIHBheWxvYWQx
LmNoYW5uZWxzID0gMjsKLSAgICBwYXlsb2Fkcy5hcHBlbmQoV1RGTW92ZShwYXlsb2FkMSkpOwot
Ci0gICAgTWVkaWFQYXlsb2FkIHBheWxvYWQyOwotICAgIHBheWxvYWQyLnR5cGUgPSA4OwotICAg
IHBheWxvYWQyLmVuY29kaW5nTmFtZSA9ICJQQ01BIjsKLSAgICBwYXlsb2FkMi5jbG9ja1JhdGUg
PSA4MDAwOwotICAgIHBheWxvYWQyLmNoYW5uZWxzID0gMTsKLSAgICBwYXlsb2Fkcy5hcHBlbmQo
V1RGTW92ZShwYXlsb2FkMikpOwotCi0gICAgTWVkaWFQYXlsb2FkIHBheWxvYWQzOwotICAgIHBh
eWxvYWQzLnR5cGUgPSAwOwotICAgIHBheWxvYWQzLmVuY29kaW5nTmFtZSA9ICJQQ01VIjsKLSAg
ICBwYXlsb2FkMy5jbG9ja1JhdGUgPSA4MDAwOwotICAgIHBheWxvYWQzLmNoYW5uZWxzID0gMTsK
LSAgICBwYXlsb2Fkcy5hcHBlbmQoV1RGTW92ZShwYXlsb2FkMykpOwotCi0gICAgcmV0dXJuIHBh
eWxvYWRzOwotfQotCi1NZWRpYVBheWxvYWRWZWN0b3IgTW9ja01lZGlhRW5kcG9pbnQ6OmdldERl
ZmF1bHRWaWRlb1BheWxvYWRzKCkKLXsKLSAgICBNZWRpYVBheWxvYWRWZWN0b3IgcGF5bG9hZHM7
Ci0KLSAgICBNZWRpYVBheWxvYWQgcGF5bG9hZDE7Ci0gICAgcGF5bG9hZDEudHlwZSA9IDEwMzsK
LSAgICBwYXlsb2FkMS5lbmNvZGluZ05hbWUgPSAiSDI2NCI7Ci0gICAgcGF5bG9hZDEuY2xvY2tS
YXRlID0gOTAwMDA7Ci0gICAgcGF5bG9hZDEuY2NtZmlyID0gdHJ1ZTsKLSAgICBwYXlsb2FkMS5u
YWNrcGxpID0gdHJ1ZTsKLSAgICBwYXlsb2FkMS5hZGRQYXJhbWV0ZXIoInBhY2tldGl6YXRpb25N
b2RlIiwgMSk7Ci0gICAgcGF5bG9hZHMuYXBwZW5kKFdURk1vdmUocGF5bG9hZDEpKTsKLQotICAg
IE1lZGlhUGF5bG9hZCBwYXlsb2FkMjsKLSAgICBwYXlsb2FkMi50eXBlID0gMTAwOwotICAgIHBh
eWxvYWQyLmVuY29kaW5nTmFtZSA9ICJWUDgiOwotICAgIHBheWxvYWQyLmNsb2NrUmF0ZSA9IDkw
MDAwOwotICAgIHBheWxvYWQyLmNjbWZpciA9IHRydWU7Ci0gICAgcGF5bG9hZDIubmFja3BsaSA9
IHRydWU7Ci0gICAgcGF5bG9hZDIubmFjayA9IHRydWU7Ci0gICAgcGF5bG9hZHMuYXBwZW5kKFdU
Rk1vdmUocGF5bG9hZDIpKTsKLQotICAgIE1lZGlhUGF5bG9hZCBwYXlsb2FkMzsKLSAgICBwYXls
b2FkMy50eXBlID0gMTIwOwotICAgIHBheWxvYWQzLmVuY29kaW5nTmFtZSA9ICJSVFgiOwotICAg
IHBheWxvYWQzLmNsb2NrUmF0ZSA9IDkwMDAwOwotICAgIHBheWxvYWQzLmFkZFBhcmFtZXRlcigi
YXB0IiwgMTAwKTsKLSAgICBwYXlsb2FkMy5hZGRQYXJhbWV0ZXIoInJ0eFRpbWUiLCAyMDApOwot
ICAgIHBheWxvYWRzLmFwcGVuZChXVEZNb3ZlKHBheWxvYWQzKSk7Ci0KLSAgICByZXR1cm4gcGF5
bG9hZHM7Ci19Ci0KLU1lZGlhUGF5bG9hZFZlY3RvciBNb2NrTWVkaWFFbmRwb2ludDo6ZmlsdGVy
UGF5bG9hZHMoY29uc3QgTWVkaWFQYXlsb2FkVmVjdG9yJiByZW1vdGVQYXlsb2FkcywgY29uc3Qg
TWVkaWFQYXlsb2FkVmVjdG9yJiBkZWZhdWx0UGF5bG9hZHMpCi17Ci0gICAgTWVkaWFQYXlsb2Fk
VmVjdG9yIGZpbHRlcmVkUGF5bG9hZHM7Ci0KLSAgICBmb3IgKGF1dG8mIHJlbW90ZVBheWxvYWQg
OiByZW1vdGVQYXlsb2FkcykgewotICAgICAgICBjb25zdCBNZWRpYVBheWxvYWQqIGRlZmF1bHRQ
YXlsb2FkID0gbnVsbHB0cjsKLSAgICAgICAgZm9yIChhdXRvJiBwYXlsb2FkIDogZGVmYXVsdFBh
eWxvYWRzKSB7Ci0gICAgICAgICAgICBpZiAocGF5bG9hZC5lbmNvZGluZ05hbWUgPT0gcmVtb3Rl
UGF5bG9hZC5lbmNvZGluZ05hbWUuY29udmVydFRvQVNDSUlVcHBlcmNhc2UoKSkgewotICAgICAg
ICAgICAgICAgIGRlZmF1bHRQYXlsb2FkID0gJnBheWxvYWQ7Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCFkZWZhdWx0UGF5bG9h
ZCkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGlmIChkZWZhdWx0UGF5bG9hZC0+
cGFyYW1ldGVycy5jb250YWlucygicGFja2V0aXphdGlvbk1vZGUiKSAmJiByZW1vdGVQYXlsb2Fk
LnBhcmFtZXRlcnMuY29udGFpbnMoInBhY2tldGl6YXRpb25Nb2RlIikKLSAgICAgICAgICAgICYm
IChkZWZhdWx0UGF5bG9hZC0+cGFyYW1ldGVycy5nZXQoInBhY2tldGl6YXRpb25Nb2RlIikgIT0g
ZGVmYXVsdFBheWxvYWQtPnBhcmFtZXRlcnMuZ2V0KCJwYWNrZXRpemF0aW9uTW9kZSIpKSkKLSAg
ICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGZpbHRlcmVkUGF5bG9hZHMuYXBwZW5kKHJl
bW90ZVBheWxvYWQpOwotICAgIH0KLQotICAgIHJldHVybiBmaWx0ZXJlZFBheWxvYWRzOwotfQot
Ci1NZWRpYUVuZHBvaW50OjpVcGRhdGVSZXN1bHQgTW9ja01lZGlhRW5kcG9pbnQ6OnVwZGF0ZVJl
Y2VpdmVDb25maWd1cmF0aW9uKE1lZGlhRW5kcG9pbnRTZXNzaW9uQ29uZmlndXJhdGlvbiogY29u
ZmlndXJhdGlvbiwgYm9vbCBpc0luaXRpYXRvcikKLXsKLSAgICBVTlVTRURfUEFSQU0oaXNJbml0
aWF0b3IpOwotCi0gICAgdXBkYXRlQ29uZmlndXJhdGlvbk1pZHMoKmNvbmZpZ3VyYXRpb24pOwot
ICAgIHJldHVybiBVcGRhdGVSZXN1bHQ6OlN1Y2Nlc3M7Ci19Ci0KLU1lZGlhRW5kcG9pbnQ6OlVw
ZGF0ZVJlc3VsdCBNb2NrTWVkaWFFbmRwb2ludDo6dXBkYXRlU2VuZENvbmZpZ3VyYXRpb24oTWVk
aWFFbmRwb2ludFNlc3Npb25Db25maWd1cmF0aW9uKiBjb25maWd1cmF0aW9uLCBjb25zdCBSZWFs
dGltZU1lZGlhU291cmNlTWFwJiBzZW5kU291cmNlTWFwLCBib29sIGlzSW5pdGlhdG9yKQotewot
ICAgIFVOVVNFRF9QQVJBTShzZW5kU291cmNlTWFwKTsKLSAgICBVTlVTRURfUEFSQU0oaXNJbml0
aWF0b3IpOwotCi0gICAgdXBkYXRlQ29uZmlndXJhdGlvbk1pZHMoKmNvbmZpZ3VyYXRpb24pOwot
ICAgIHJldHVybiBVcGRhdGVSZXN1bHQ6OlN1Y2Nlc3M7Ci19Ci0KLXZvaWQgTW9ja01lZGlhRW5k
cG9pbnQ6OmFkZFJlbW90ZUNhbmRpZGF0ZShjb25zdCBJY2VDYW5kaWRhdGUmIGNhbmRpZGF0ZSwg
Y29uc3QgU3RyaW5nJiBtaWQsIGNvbnN0IFN0cmluZyYgdWZyYWcsIGNvbnN0IFN0cmluZyYgcGFz
c3dvcmQpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGNhbmRpZGF0ZSk7Ci0gICAgVU5VU0VEX1BBUkFN
KG1pZCk7Ci0gICAgVU5VU0VEX1BBUkFNKHVmcmFnKTsKLSAgICBVTlVTRURfUEFSQU0ocGFzc3dv
cmQpOwotfQotCi1SZWY8UmVhbHRpbWVNZWRpYVNvdXJjZT4gTW9ja01lZGlhRW5kcG9pbnQ6OmNy
ZWF0ZU11dGVkUmVtb3RlU291cmNlKGNvbnN0IFN0cmluZyYgbWlkLCBSZWFsdGltZU1lZGlhU291
cmNlOjpUeXBlIHR5cGUpCi17Ci0gICAgUmVmUHRyPFJlYWx0aW1lTWVkaWFTb3VyY2U+IHNvdXJj
ZTsKLQotICAgIHN3aXRjaCAodHlwZSkgewotICAgIGNhc2UgUmVhbHRpbWVNZWRpYVNvdXJjZTo6
VHlwZTo6QXVkaW86Ci0gICAgICAgIHNvdXJjZSA9IE1vY2tSZWFsdGltZUF1ZGlvU291cmNlOjpj
cmVhdGVNdXRlZCgicmVtb3RlIGF1ZGlvIik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgUmVh
bHRpbWVNZWRpYVNvdXJjZTo6VHlwZTo6VmlkZW86Ci0gICAgICAgIHNvdXJjZSA9IE1vY2tSZWFs
dGltZVZpZGVvU291cmNlOjpjcmVhdGVNdXRlZCgicmVtb3RlIHZpZGVvIik7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgUmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlwZTo6Tm9uZToKLSAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQotCi0gICAgbV9tdXRlZFJlbW90ZVNvdXJjZXMu
c2V0KG1pZCwgc291cmNlKTsKLSAgICByZXR1cm4gc291cmNlLnJlbGVhc2VOb25OdWxsKCk7Ci19
Ci0KLXZvaWQgTW9ja01lZGlhRW5kcG9pbnQ6OnJlcGxhY2VTZW5kU291cmNlKFJlYWx0aW1lTWVk
aWFTb3VyY2UmIG5ld1NvdXJjZSwgY29uc3QgU3RyaW5nJiBtaWQpCi17Ci0gICAgVU5VU0VEX1BB
UkFNKG5ld1NvdXJjZSk7Ci0gICAgVU5VU0VEX1BBUkFNKG1pZCk7Ci19Ci0KLXZvaWQgTW9ja01l
ZGlhRW5kcG9pbnQ6OnJlcGxhY2VNdXRlZFJlbW90ZVNvdXJjZU1pZChjb25zdCBTdHJpbmcmIG9s
ZE1pZCwgY29uc3QgU3RyaW5nJiBuZXdNaWQpCi17Ci0gICAgUmVmUHRyPFJlYWx0aW1lTWVkaWFT
b3VyY2U+IHJlbW90ZVNvdXJjZSA9IG1fbXV0ZWRSZW1vdGVTb3VyY2VzLnRha2Uob2xkTWlkKTsK
LSAgICBtX211dGVkUmVtb3RlU291cmNlcy5zZXQobmV3TWlkLCBXVEZNb3ZlKHJlbW90ZVNvdXJj
ZSkpOwotfQotCi12b2lkIE1vY2tNZWRpYUVuZHBvaW50OjpzdG9wKCkKLXsKLX0KLQotdm9pZCBN
b2NrTWVkaWFFbmRwb2ludDo6ZW11bGF0ZVBsYXRmb3JtRXZlbnQoY29uc3QgU3RyaW5nJiBhY3Rp
b24pCi17Ci0gICAgaWYgKGFjdGlvbiA9PSAiZGlzcGF0Y2gtZmFrZS1pY2UtY2FuZGlkYXRlcyIp
Ci0gICAgICAgIGRpc3BhdGNoRmFrZUljZUNhbmRpZGF0ZXMoKTsKLSAgICBlbHNlIGlmIChhY3Rp
b24gPT0gInN0ZXAtaWNlLXRyYW5zcG9ydC1zdGF0ZXMiKQotICAgICAgICBzdGVwSWNlVHJhbnNw
b3J0U3RhdGVzKCk7Ci0gICAgZWxzZSBpZiAoYWN0aW9uID09ICJ1bm11dGUtcmVtb3RlLXNvdXJj
ZXMtYnktbWlkIikKLSAgICAgICAgdW5tdXRlUmVtb3RlU291cmNlc0J5TWlkKCk7Ci19Ci0KLXZv
aWQgTW9ja01lZGlhRW5kcG9pbnQ6OnVwZGF0ZUNvbmZpZ3VyYXRpb25NaWRzKGNvbnN0IE1lZGlh
RW5kcG9pbnRTZXNzaW9uQ29uZmlndXJhdGlvbiYgY29uZmlndXJhdGlvbikKLXsKLSAgICBWZWN0
b3I8U3RyaW5nPiBtaWRzOwotICAgIGZvciAoYXV0byYgbWVkaWFEZXNjcmlwdGlvbiA6IGNvbmZp
Z3VyYXRpb24ubWVkaWFEZXNjcmlwdGlvbnMoKSkKLSAgICAgICAgbWlkcy5hcHBlbmQobWVkaWFE
ZXNjcmlwdGlvbi5taWQpOwotICAgIG1fbWlkcy5zd2FwKG1pZHMpOwotfQotCi12b2lkIE1vY2tN
ZWRpYUVuZHBvaW50OjpkaXNwYXRjaEZha2VJY2VDYW5kaWRhdGVzKCkKLXsKLSAgICBtX2Zha2VJ
Y2VDYW5kaWRhdGVzLmFwcGVuZCh7ICJob3N0IiwgIjEiLCAxLCAiVURQIiwgMjAxMzI2NjQzMSwg
IjE5Mi4xNjguMC4xMDAiLCAzODgzOCwgeyB9LCB7IH0sIDAgfSk7Ci0gICAgbV9mYWtlSWNlQ2Fu
ZGlkYXRlcy5hcHBlbmQoeyAiaG9zdCIsICIyIiwgMSwgIlRDUCIsIDEwMTkyMTYzODMsICIxOTIu
MTY4LjAuMTAwIiwgOSwgImFjdGl2ZSIsIHsgfSwgMCB9KTsKLSAgICBtX2Zha2VJY2VDYW5kaWRh
dGVzLmFwcGVuZCh7ICJzcmZseCIsICIzIiwgMSwgIlVEUCIsIDE2Nzc3MjIxMTEsICIxNzIuMTgu
MC4xIiwgNDc5ODksIHsgfSwgIjE5Mi4xNjguMC4xMDAiLCA0Nzk4OSB9KTsKLQotICAgIC8vIFJl
dmVyc2Ugb3JkZXIgdG8gdXNlIHRha2VMYXN0KCkgd2hpbGUga2VlcGluZyB0aGUgYWJvdmUgb3Jk
ZXIKLSAgICBtX2Zha2VJY2VDYW5kaWRhdGVzLnJldmVyc2UoKTsKLQotICAgIG1faWNlQ2FuZGlk
YXRlVGltZXIuc3RhcnRPbmVTaG90KDBfcyk7Ci19Ci0KLXZvaWQgTW9ja01lZGlhRW5kcG9pbnQ6
OmljZUNhbmRpZGF0ZVRpbWVyRmlyZWQoKQotewotICAgIGlmIChtX21pZHMuaXNFbXB0eSgpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIW1fZmFrZUljZUNhbmRpZGF0ZXMuaXNFbXB0eSgp
KSB7Ci0gICAgICAgIG1fY2xpZW50LmdvdEljZUNhbmRpZGF0ZShtX21pZHNbMF0sIG1fZmFrZUlj
ZUNhbmRpZGF0ZXMudGFrZUxhc3QoKSk7Ci0gICAgICAgIG1faWNlQ2FuZGlkYXRlVGltZXIuc3Rh
cnRPbmVTaG90KDBfcyk7Ci0gICAgfSBlbHNlCi0gICAgICAgIG1fY2xpZW50LmRvbmVHYXRoZXJp
bmdDYW5kaWRhdGVzKG1fbWlkc1swXSk7Ci19Ci0KLXZvaWQgTW9ja01lZGlhRW5kcG9pbnQ6OnN0
ZXBJY2VUcmFuc3BvcnRTdGF0ZXMoKQotewotICAgIGlmIChtX21pZHMuc2l6ZSgpICE9IDMpIHsK
LSAgICAgICAgTE9HX0VSUk9SKCJUaGUgJ3N0ZXAtaWNlLXRyYW5zcG9ydC1zdGF0ZXMnIGFjdGlv
biByZXF1aXJlcyAzIHRyYW5zY2VpdmVycyIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgLy8gU2hvdWxkIGdvIHRvOgotICAgIC8vICdjaGVja2luZycKLSAgICBtX2ljZVRyYW5zcG9y
dFN0YXRlQ2hhbmdlcy5hcHBlbmQoc3RkOjptYWtlX3BhaXIobV9taWRzWzBdLCBSVENJY2VUcmFu
c3BvcnRTdGF0ZTo6Q2hlY2tpbmcpKTsKLSAgICBtX2ljZVRyYW5zcG9ydFN0YXRlQ2hhbmdlcy5h
cHBlbmQoc3RkOjptYWtlX3BhaXIobV9taWRzWzFdLCBSVENJY2VUcmFuc3BvcnRTdGF0ZTo6Q2hl
Y2tpbmcpKTsKLSAgICBtX2ljZVRyYW5zcG9ydFN0YXRlQ2hhbmdlcy5hcHBlbmQoc3RkOjptYWtl
X3BhaXIobV9taWRzWzJdLCBSVENJY2VUcmFuc3BvcnRTdGF0ZTo6Q2hlY2tpbmcpKTsKLQotICAg
IC8vICdjb25uZWN0ZWQnCi0gICAgbV9pY2VUcmFuc3BvcnRTdGF0ZUNoYW5nZXMuYXBwZW5kKHN0
ZDo6bWFrZV9wYWlyKG1fbWlkc1swXSwgUlRDSWNlVHJhbnNwb3J0U3RhdGU6OkNvbm5lY3RlZCkp
OwotICAgIG1faWNlVHJhbnNwb3J0U3RhdGVDaGFuZ2VzLmFwcGVuZChzdGQ6Om1ha2VfcGFpciht
X21pZHNbMV0sIFJUQ0ljZVRyYW5zcG9ydFN0YXRlOjpDb21wbGV0ZWQpKTsKLSAgICBtX2ljZVRy
YW5zcG9ydFN0YXRlQ2hhbmdlcy5hcHBlbmQoc3RkOjptYWtlX3BhaXIobV9taWRzWzJdLCBSVENJ
Y2VUcmFuc3BvcnRTdGF0ZTo6Q2xvc2VkKSk7Ci0KLSAgICAvLyAnY29tcGxldGVkJwotICAgIG1f
aWNlVHJhbnNwb3J0U3RhdGVDaGFuZ2VzLmFwcGVuZChzdGQ6Om1ha2VfcGFpcihtX21pZHNbMF0s
IFJUQ0ljZVRyYW5zcG9ydFN0YXRlOjpDb21wbGV0ZWQpKTsKLQotICAgIC8vICdmYWlsZWQnCi0g
ICAgbV9pY2VUcmFuc3BvcnRTdGF0ZUNoYW5nZXMuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKG1fbWlk
c1swXSwgUlRDSWNlVHJhbnNwb3J0U3RhdGU6OkZhaWxlZCkpOwotCi0gICAgLy8gJ2Rpc2Nvbm5l
Y3RlZCcKLSAgICBtX2ljZVRyYW5zcG9ydFN0YXRlQ2hhbmdlcy5hcHBlbmQoc3RkOjptYWtlX3Bh
aXIobV9taWRzWzFdLCBSVENJY2VUcmFuc3BvcnRTdGF0ZTo6RGlzY29ubmVjdGVkKSk7Ci0gICAg
bV9pY2VUcmFuc3BvcnRTdGF0ZUNoYW5nZXMuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKG1fbWlkc1sw
XSwgUlRDSWNlVHJhbnNwb3J0U3RhdGU6OkNsb3NlZCkpOwotCi0gICAgLy8gJ25ldycKLSAgICBt
X2ljZVRyYW5zcG9ydFN0YXRlQ2hhbmdlcy5hcHBlbmQoc3RkOjptYWtlX3BhaXIobV9taWRzWzFd
LCBSVENJY2VUcmFuc3BvcnRTdGF0ZTo6Q2xvc2VkKSk7Ci0KLSAgICAvLyBSZXZlcnNlIG9yZGVy
IHRvIHVzZSB0YWtlTGFzdCgpIHdoaWxlIGtlZXBpbmcgdGhlIGFib3ZlIG9yZGVyCi0gICAgbV9p
Y2VUcmFuc3BvcnRTdGF0ZUNoYW5nZXMucmV2ZXJzZSgpOwotCi0gICAgbV9pY2VUcmFuc3BvcnRU
aW1lci5zdGFydE9uZVNob3QoMF9zKTsKLX0KLQotdm9pZCBNb2NrTWVkaWFFbmRwb2ludDo6aWNl
VHJhbnNwb3J0VGltZXJGaXJlZCgpCi17Ci0gICAgaWYgKG1faWNlVHJhbnNwb3J0U3RhdGVDaGFu
Z2VzLmlzRW1wdHkoKSB8fCBtX21pZHMuc2l6ZSgpICE9IDMpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIGF1dG8gc3RhdGVDaGFuZ2UgPSBtX2ljZVRyYW5zcG9ydFN0YXRlQ2hhbmdlcy50YWtlTGFz
dCgpOwotICAgIG1fY2xpZW50LmljZVRyYW5zcG9ydFN0YXRlQ2hhbmdlZChzdGF0ZUNoYW5nZS5m
aXJzdCwgc3RhdGVDaGFuZ2Uuc2Vjb25kKTsKLQotICAgIG1faWNlVHJhbnNwb3J0VGltZXIuc3Rh
cnRPbmVTaG90KDBfcyk7Ci19Ci0KLXZvaWQgTW9ja01lZGlhRW5kcG9pbnQ6OnVubXV0ZVJlbW90
ZVNvdXJjZXNCeU1pZCgpCi17Ci0gICAgaWYgKG1fbWlkcy5pc0VtcHR5KCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIC8vIExvb2tpbmcgdXAgZWFjaCBzb3VyY2UgYnkgaXRzIG1pZCwgaW5zdGVh
ZCBvZiBzaW1wbHkgaXRlcmF0aW5nIG92ZXIgdGhlIGxpc3Qgb2YgbXV0ZWQgc291cmNlcywKLSAg
ICAvLyBlbXVsYXRlcyByZW1vdGUgbWVkaWEgYXJyaXZpbmcgb24gYSBtZWRpYSBkZXNjcmlwdGlv
biB3aXRoIGEgc3BlY2lmaWMgbWlkIChSVENSdHBUcmFuc2NlaXZlcikuCi0KLSAgICAvLyBDb3B5
IHZhbHVlcyBpbiByZXZlcnNlIG9yZGVyIHRvIG1haW50YWluIHRoZSBvcmlnaW5hbCBvcmRlciB3
aGlsZSB1c2luZyB0YWtlTGFzdCgpCi0gICAgZm9yIChpbnQgaSA9IG1fbWlkcy5zaXplKCkgLSAx
OyBpID49IDA7IC0taSkKLSAgICAgICAgbV9taWRzT2ZTb3VyY2VzVG9Vbm11dGUuYXBwZW5kKG1f
bWlkc1tpXSk7Ci0KLSAgICBtX3VubXV0ZVRpbWVyLnN0YXJ0T25lU2hvdCgwX3MpOwotfQotCi12
b2lkIE1vY2tNZWRpYUVuZHBvaW50Ojp1bm11dGVUaW1lckZpcmVkKCkKLXsKLSAgICBhdXRvKiBz
b3VyY2UgPSBtX211dGVkUmVtb3RlU291cmNlcy5nZXQobV9taWRzT2ZTb3VyY2VzVG9Vbm11dGUu
dGFrZUxhc3QoKSk7Ci0gICAgaWYgKHNvdXJjZSkKLSAgICAgICAgc291cmNlLT5zZXRNdXRlZChm
YWxzZSk7Ci0KLSAgICBpZiAoIW1fbWlkc09mU291cmNlc1RvVW5tdXRlLmlzRW1wdHkoKSkKLSAg
ICAgICAgbV91bm11dGVUaW1lci5zdGFydE9uZVNob3QoMF9zKTsKLX0KLQotfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKFdFQl9SVEMpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL01vY2tNZWRpYUVuZHBvaW50LmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tb2NrL01vY2tNZWRpYUVuZHBvaW50LmgKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDdmNjY2NGZiODg1NjUzNTc1OTU2ZGJiZjU1NDJjNzIyNjE1YjU5NjQuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbW9jay9Nb2NrTWVkaWFFbmRwb2ludC5oCisrKyAvZGV2L251bGwKQEAgLTEs
MTAxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgRXJpY3Nzb24gQUIuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
Ci0gKiAgICBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlCi0gKiAgICBkaXN0cmlidXRpb24uCi0gKiAzLiBOZWl0aGVyIHRoZSBuYW1l
IG9mIEVyaWNzc29uIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICogICAgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlz
Ci0gKiAgICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
LSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaWYgRU5BQkxFKFdFQl9SVEMpCi0KLSNp
bmNsdWRlICJNZWRpYUVuZHBvaW50LmgiCi0jaW5jbHVkZSAiUlRDSWNlVHJhbnNwb3J0U3RhdGUu
aCIKLSNpbmNsdWRlICJUaW1lci5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIE1v
Y2tNZWRpYUVuZHBvaW50IGZpbmFsIDogcHVibGljIE1lZGlhRW5kcG9pbnQgewotcHVibGljOgot
ICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8TWVkaWFFbmRwb2ludD4g
Y3JlYXRlKE1lZGlhRW5kcG9pbnRDbGllbnQmKTsKLQotICAgIE1vY2tNZWRpYUVuZHBvaW50KE1l
ZGlhRW5kcG9pbnRDbGllbnQmKTsKLSAgICB+TW9ja01lZGlhRW5kcG9pbnQoKTsKLQotICAgIHZv
aWQgc2V0Q29uZmlndXJhdGlvbihNZWRpYUVuZHBvaW50Q29uZmlndXJhdGlvbiYmKSBmaW5hbCB7
IH07Ci0KLSAgICB2b2lkIGdlbmVyYXRlRHRsc0luZm8oKSBmaW5hbDsKLSAgICBNZWRpYVBheWxv
YWRWZWN0b3IgZ2V0RGVmYXVsdEF1ZGlvUGF5bG9hZHMoKSBmaW5hbDsKLSAgICBNZWRpYVBheWxv
YWRWZWN0b3IgZ2V0RGVmYXVsdFZpZGVvUGF5bG9hZHMoKSBmaW5hbDsKLSAgICBNZWRpYVBheWxv
YWRWZWN0b3IgZmlsdGVyUGF5bG9hZHMoY29uc3QgTWVkaWFQYXlsb2FkVmVjdG9yJiByZW1vdGVQ
YXlsb2FkcywgY29uc3QgTWVkaWFQYXlsb2FkVmVjdG9yJiBkZWZhdWx0UGF5bG9hZHMpIGZpbmFs
OwotCi0gICAgVXBkYXRlUmVzdWx0IHVwZGF0ZVJlY2VpdmVDb25maWd1cmF0aW9uKE1lZGlhRW5k
cG9pbnRTZXNzaW9uQ29uZmlndXJhdGlvbiosIGJvb2wgaXNJbml0aWF0b3IpIGZpbmFsOwotICAg
IFVwZGF0ZVJlc3VsdCB1cGRhdGVTZW5kQ29uZmlndXJhdGlvbihNZWRpYUVuZHBvaW50U2Vzc2lv
bkNvbmZpZ3VyYXRpb24qLCBjb25zdCBSZWFsdGltZU1lZGlhU291cmNlTWFwJiwgYm9vbCBpc0lu
aXRpYXRvcikgZmluYWw7Ci0KLSAgICB2b2lkIGFkZFJlbW90ZUNhbmRpZGF0ZShjb25zdCBJY2VD
YW5kaWRhdGUmLCBjb25zdCBTdHJpbmcmIG1pZCwgY29uc3QgU3RyaW5nJiB1ZnJhZywgY29uc3Qg
U3RyaW5nJiBwYXNzd29yZCkgZmluYWw7Ci0KLSAgICBSZWY8UmVhbHRpbWVNZWRpYVNvdXJjZT4g
Y3JlYXRlTXV0ZWRSZW1vdGVTb3VyY2UoY29uc3QgU3RyaW5nJiBtaWQsIFJlYWx0aW1lTWVkaWFT
b3VyY2U6OlR5cGUpIGZpbmFsOwotICAgIHZvaWQgcmVwbGFjZVNlbmRTb3VyY2UoUmVhbHRpbWVN
ZWRpYVNvdXJjZSYsIGNvbnN0IFN0cmluZyYgbWlkKSBmaW5hbDsKLSAgICB2b2lkIHJlcGxhY2VN
dXRlZFJlbW90ZVNvdXJjZU1pZChjb25zdCBTdHJpbmcmIG9sZE1pZCwgY29uc3QgU3RyaW5nJiBu
ZXdNaWQpIGZpbmFsOwotCi0gICAgdm9pZCBzdG9wKCkgZmluYWw7Ci0KLSAgICB2b2lkIGVtdWxh
dGVQbGF0Zm9ybUV2ZW50KGNvbnN0IFN0cmluZyYgYWN0aW9uKSBmaW5hbDsKLQotcHJpdmF0ZToK
LSAgICB2b2lkIHVwZGF0ZUNvbmZpZ3VyYXRpb25NaWRzKGNvbnN0IE1lZGlhRW5kcG9pbnRTZXNz
aW9uQ29uZmlndXJhdGlvbiYpOwotCi0gICAgc3RkOjp1bmlxdWVfcHRyPFJUQ0RhdGFDaGFubmVs
SGFuZGxlcj4gY3JlYXRlRGF0YUNoYW5uZWxIYW5kbGVyKGNvbnN0IFN0cmluZyYsIGNvbnN0IFJU
Q0RhdGFDaGFubmVsSW5pdCYpIGZpbmFsOwotCi0gICAgdm9pZCBkaXNwYXRjaEZha2VJY2VDYW5k
aWRhdGVzKCk7Ci0gICAgdm9pZCBpY2VDYW5kaWRhdGVUaW1lckZpcmVkKCk7Ci0KLSAgICB2b2lk
IHN0ZXBJY2VUcmFuc3BvcnRTdGF0ZXMoKTsKLSAgICB2b2lkIGljZVRyYW5zcG9ydFRpbWVyRmly
ZWQoKTsKLQotICAgIHZvaWQgdW5tdXRlUmVtb3RlU291cmNlc0J5TWlkKCk7Ci0gICAgdm9pZCB1
bm11dGVUaW1lckZpcmVkKCk7Ci0KLSAgICBNZWRpYUVuZHBvaW50Q2xpZW50JiBtX2NsaWVudDsK
LSAgICBWZWN0b3I8U3RyaW5nPiBtX21pZHM7Ci0gICAgSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxS
ZWFsdGltZU1lZGlhU291cmNlPj4gbV9tdXRlZFJlbW90ZVNvdXJjZXM7Ci0KLSAgICBWZWN0b3I8
SWNlQ2FuZGlkYXRlPiBtX2Zha2VJY2VDYW5kaWRhdGVzOwotICAgIFRpbWVyIG1faWNlQ2FuZGlk
YXRlVGltZXI7Ci0KLSAgICBWZWN0b3I8c3RkOjpwYWlyPFN0cmluZywgUlRDSWNlVHJhbnNwb3J0
U3RhdGU+PiBtX2ljZVRyYW5zcG9ydFN0YXRlQ2hhbmdlczsKLSAgICBUaW1lciBtX2ljZVRyYW5z
cG9ydFRpbWVyOwotCi0gICAgVmVjdG9yPFN0cmluZz4gbV9taWRzT2ZTb3VyY2VzVG9Vbm11dGU7
Ci0gICAgVGltZXIgbV91bm11dGVUaW1lcjsKLSAgICAKLSAgICBXZWFrUHRyRmFjdG9yeTxNb2Nr
TWVkaWFFbmRwb2ludD4gbV93ZWFrUHRyRmFjdG9yeTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShXRUJfUlRDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbW9jay9Nb2NrUmVhbHRpbWVNZWRpYVNvdXJjZS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tb2NrL01vY2tSZWFsdGltZU1lZGlhU291cmNlLmNwcAppbmRleCBi
NDI0MjdiN2NkZDdkODllMDIwZDZhNWY2MmY0N2VjYTc0N2YwMmU4Li44NzkxOTQ1ZGZmMzEwODkw
ZWUyMGUxZmJmNGViNTRhNjRlZDBkOTA2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tb2NrL01vY2tSZWFsdGltZU1lZGlhU291cmNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tb2NrL01vY2tSZWFsdGltZU1lZGlhU291cmNlLmNwcApAQCAtODIsNyArODIs
NyBAQCBWZWN0b3I8Q2FwdHVyZURldmljZT4mIE1vY2tSZWFsdGltZU1lZGlhU291cmNlOjp2aWRl
b0RldmljZXMoKQogfQogCiBNb2NrUmVhbHRpbWVNZWRpYVNvdXJjZTo6TW9ja1JlYWx0aW1lTWVk
aWFTb3VyY2UoY29uc3QgU3RyaW5nJiBpZCwgUmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlwZSB0eXBl
LCBjb25zdCBTdHJpbmcmIG5hbWUpCi0gICAgOiBCYXNlUmVhbHRpbWVNZWRpYVNvdXJjZUNsYXNz
KGlkLCB0eXBlLCBuYW1lKQorICAgIDogUmVhbHRpbWVNZWRpYVNvdXJjZShpZCwgdHlwZSwgbmFt
ZSkKIHsKICAgICBzd2l0Y2ggKHR5cGUpIHsKICAgICBjYXNlIFJlYWx0aW1lTWVkaWFTb3VyY2U6
OlR5cGU6OkF1ZGlvOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9N
b2NrUmVhbHRpbWVNZWRpYVNvdXJjZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9N
b2NrUmVhbHRpbWVNZWRpYVNvdXJjZS5oCmluZGV4IDk1MDdmMDFhYTNkMzIzMDI2M2ZkNGFmZWI5
ZDE2NTI4Y2Q5OWFjMmMuLjFlYTExNWQ5YjQzM2ZhNGUzMzY5Y2JlZjg0Nzk0ZjlhZjI4ODY3ZWYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svTW9ja1JlYWx0aW1lTWVk
aWFTb3VyY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL01vY2tSZWFsdGlt
ZU1lZGlhU291cmNlLmgKQEAgLTI4LDI4ICsyOCwxNyBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwog
Ci0jaWZuZGVmIE1vY2tSZWFsdGltZU1lZGlhU291cmNlX2gKLSNkZWZpbmUgTW9ja1JlYWx0aW1l
TWVkaWFTb3VyY2VfaAorI3ByYWdtYSBvbmNlCiAKICNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQog
CiAjaW5jbHVkZSAiUmVhbHRpbWVNZWRpYVNvdXJjZS5oIgogCi0jaWYgVVNFKE9QRU5XRUJSVEMp
Ci0jaW5jbHVkZSAiUmVhbHRpbWVNZWRpYVNvdXJjZU93ci5oIgotI2VuZGlmCi0KIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogY2xhc3MgQ2FwdHVyZURldmljZTsKIAotI2lmIFVTRShPUEVOV0VCUlRD
KQotdXNpbmcgQmFzZVJlYWx0aW1lTWVkaWFTb3VyY2VDbGFzcyA9IFJlYWx0aW1lTWVkaWFTb3Vy
Y2VPd3I7Ci0jZWxzZQotdXNpbmcgQmFzZVJlYWx0aW1lTWVkaWFTb3VyY2VDbGFzcyA9IFJlYWx0
aW1lTWVkaWFTb3VyY2U7Ci0jZW5kaWYKLQotY2xhc3MgTW9ja1JlYWx0aW1lTWVkaWFTb3VyY2Ug
OiBwdWJsaWMgQmFzZVJlYWx0aW1lTWVkaWFTb3VyY2VDbGFzcyB7CitjbGFzcyBNb2NrUmVhbHRp
bWVNZWRpYVNvdXJjZSA6IHB1YmxpYyBSZWFsdGltZU1lZGlhU291cmNlIHsKIHB1YmxpYzoKICAg
ICB2aXJ0dWFsIH5Nb2NrUmVhbHRpbWVNZWRpYVNvdXJjZSgpIHsgfQogCkBAIC02MSw5ICs1MCw3
IEBAIHByb3RlY3RlZDoKIAogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVTZXR0aW5ncyhSZWFsdGlt
ZU1lZGlhU291cmNlU2V0dGluZ3MmKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGluaXRpYWxpemVD
YXBhYmlsaXRpZXMoUmVhbHRpbWVNZWRpYVNvdXJjZUNhcGFiaWxpdGllcyYpID0gMDsKLSNpZiAh
VVNFKE9QRU5XRUJSVEMpCiAgICAgdmlydHVhbCB2b2lkIGluaXRpYWxpemVTdXBwb3J0ZWRDb25z
dHJhaW50cyhSZWFsdGltZU1lZGlhU291cmNlU3VwcG9ydGVkQ29uc3RyYWludHMmKSA9IDA7Ci0j
ZW5kaWYKIAogICAgIGNvbnN0IFJlYWx0aW1lTWVkaWFTb3VyY2VDYXBhYmlsaXRpZXMmIGNhcGFi
aWxpdGllcygpIGNvbnN0IG92ZXJyaWRlOwogICAgIGNvbnN0IFJlYWx0aW1lTWVkaWFTb3VyY2VT
ZXR0aW5ncyYgc2V0dGluZ3MoKSBjb25zdCBvdmVycmlkZTsKQEAgLTc0LDExICs2MSw3IEBAIHBy
b3RlY3RlZDoKIAogcHJpdmF0ZToKICAgICB2b2lkIGluaXRpYWxpemVDYXBhYmlsaXRpZXMoKTsK
LSNpZiBVU0UoT1BFTldFQlJUQykKLSAgICB2b2lkIGluaXRpYWxpemVTZXR0aW5ncygpIGZpbmFs
OwotI2Vsc2UKICAgICB2b2lkIGluaXRpYWxpemVTZXR0aW5ncygpOwotI2VuZGlmCiAKICAgICBS
ZWFsdGltZU1lZGlhU291cmNlU2V0dGluZ3MgbV9jdXJyZW50U2V0dGluZ3M7CiAgICAgUmVhbHRp
bWVNZWRpYVNvdXJjZVN1cHBvcnRlZENvbnN0cmFpbnRzIG1fc3VwcG9ydGVkQ29uc3RyYWludHM7
CkBAIC04OSw1ICs3MiwzIEBAIHByaXZhdGU6CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNl
bmRpZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFNKQotCi0jZW5kaWYgLy8gTW9ja1JlYWx0aW1lTWVk
aWFTb3VyY2VfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMu
Y3BwIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCmluZGV4IDIwZWRmOTc0
OGJjZDhmZmVkYzUzMmVlZDM1MjNmNzNjYmQzZDk5NzEuLjNhZDU3ZjUzNmM4MWMyNTM3M2U2NjY0
ZGYyZDdkYzE5ZWI1ODI0YjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50
ZXJuYWxzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAKQEAg
LTIwMCw3ICsyMDAsNiBAQAogI2VuZGlmCiAKICNpZiBFTkFCTEUoV0VCX1JUQykKLSNpbmNsdWRl
ICJNb2NrTWVkaWFFbmRwb2ludC5oIgogI2luY2x1ZGUgIlJUQ1BlZXJDb25uZWN0aW9uLmgiCiAj
ZW5kaWYKIApAQCAtNDg3LDEyICs0ODYsNiBAQCBJbnRlcm5hbHM6OkludGVybmFscyhEb2N1bWVu
dCYgZG9jdW1lbnQpCiAgICAgV2ViQ29yZTo6U2V0dGluZ3M6OnNldE1lZGlhQ2FwdHVyZVJlcXVp
cmVzU2VjdXJlQ29ubmVjdGlvbihmYWxzZSk7CiAjZW5kaWYKIAotI2lmIEVOQUJMRShXRUJfUlRD
KQotI2lmIFVTRShPUEVOV0VCUlRDKQotICAgIGVuYWJsZU1vY2tNZWRpYUVuZHBvaW50KCk7Ci0j
ZW5kaWYKLSNlbmRpZgotCiAjaWYgRU5BQkxFKFdJUkVMRVNTX1BMQVlCQUNLX1RBUkdFVCkKICAg
ICBpZiAoZG9jdW1lbnQucGFnZSgpKQogICAgICAgICBkb2N1bWVudC5wYWdlKCktPnNldE1vY2tN
ZWRpYVBsYXliYWNrVGFyZ2V0UGlja2VyRW5hYmxlZCh0cnVlKTsKQEAgLTEyNTAsMTMgKzEyNDMs
NiBAQCB2b2lkIEludGVybmFsczo6ZW5hYmxlTW9ja1NwZWVjaFN5bnRoZXNpemVyKCkKIAogI2lm
IEVOQUJMRShXRUJfUlRDKQogCi0jaWYgVVNFKE9QRU5XRUJSVEMpCi12b2lkIEludGVybmFsczo6
ZW5hYmxlTW9ja01lZGlhRW5kcG9pbnQoKQotewotICAgIE1lZGlhRW5kcG9pbnQ6OmNyZWF0ZSA9
IE1vY2tNZWRpYUVuZHBvaW50OjpjcmVhdGU7Ci19Ci0jZW5kaWYKLQogdm9pZCBJbnRlcm5hbHM6
OmVtdWxhdGVSVENQZWVyQ29ubmVjdGlvblBsYXRmb3JtRXZlbnQoUlRDUGVlckNvbm5lY3Rpb24m
IGNvbm5lY3Rpb24sIGNvbnN0IFN0cmluZyYgYWN0aW9uKQogewogICAgIGlmICghTGliV2ViUlRD
UHJvdmlkZXI6OndlYlJUQ0F2YWlsYWJsZSgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
dGVzdGluZy9JbnRlcm5hbHMuaCBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmgK
aW5kZXggOWM0MDAzMmE3NWU3MDkxZGFmYTI4ODk0ZWExMDk3MzYzZGYzNjIzOC4uMTY2OTY2ODJh
YmJhMzI1NmY4MzQ1ZGUzMTQ5ZTdhNzBjNmExZjliYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvdGVzdGluZy9JbnRlcm5hbHMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVy
bmFscy5oCkBAIC00MzAsOSArNDMwLDYgQEAgcHVibGljOgogI2VuZGlmCiAKICNpZiBFTkFCTEUo
V0VCX1JUQykKLSNpZiBVU0UoT1BFTldFQlJUQykKLSAgICB2b2lkIGVuYWJsZU1vY2tNZWRpYUVu
ZHBvaW50KCk7Ci0jZW5kaWYKICAgICB2b2lkIGVtdWxhdGVSVENQZWVyQ29ubmVjdGlvblBsYXRm
b3JtRXZlbnQoUlRDUGVlckNvbm5lY3Rpb24mLCBjb25zdCBTdHJpbmcmIGFjdGlvbik7CiAgICAg
dm9pZCB1c2VNb2NrUlRDUGVlckNvbm5lY3Rpb25GYWN0b3J5KGNvbnN0IFN0cmluZyYpOwogICAg
IHZvaWQgc2V0SUNFQ2FuZGlkYXRlRmlsdGVyaW5nKGJvb2wpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDgxNDNmOTY1YmJk
YmM3NzZiNTA3OThjOWRjMjliNzY4MWE3OTE0ZjEuLjcwOWE4ZDhiYWRkNmFkMWRjN2ZmNGY1ZDNk
NTRiMDIyOTU3M2E3NTAgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9M
YXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsNSArMSwxNCBAQAogMjAxNy0xMC0wNCAgWW91ZW5u
IEZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+CiAKKyAgICAgICAgUmVtb3ZlIE9wZW5XZWJSVEMg
YmFja2VuZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTc3ODY4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
KiBwbGF0Zm9ybS9ndGsvVGVzdEV4cGVjdGF0aW9uczoKKworMjAxNy0xMC0wNCAgWW91ZW5uIEZh
YmxldCAgPHlvdWVubkBhcHBsZS5jb20+CisKICAgICAgICAgQWRkIHF1b3RhIHRvIGNhY2hlIEFQ
SQogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc3NTUy
CiAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9UZXN0RXhwZWN0YXRpb25z
IGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1Rlc3RFeHBlY3RhdGlvbnMKaW5kZXggOGM2NmRi
NjQ0NWUzNzI3OGNjOTgxYTU5NzdhNjVmMjJiNDNhMDIzOS4uNDVhMjVkZDAwMWY0MDA0MzVjM2Iz
OTAxYmExMjdhYjYzNzc2MjI3NCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3Rr
L1Rlc3RFeHBlY3RhdGlvbnMKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1Rlc3RFeHBl
Y3RhdGlvbnMKQEAgLTYxMSw4MiArNjExLDExIEBAIHdlYmtpdC5vcmcvYi85OTAzNiBmYXN0L3No
YWRvdy1kb20vcG9pbnRlcmxvY2tlbGVtZW50LWluLXNsb3QuaHRtbCBbIFNraXAgXQogd2Via2l0
Lm9yZy9iLzg1MjExIGlldGVzdGNlbnRlci9jc3MzL2ZsZXhib3gvZmxleGJveC1hbGlnbi1zdHJl
dGNoLTAwMS5odG0gWyBJbWFnZU9ubHlGYWlsdXJlIF0KIHdlYmtpdC5vcmcvYi84NTIxMiBpZXRl
c3RjZW50ZXIvY3NzMy9mbGV4Ym94L2ZsZXhib3gtbGF5b3V0LTAwMi5odG0gWyBJbWFnZU9ubHlG
YWlsdXJlIF0KIAotIyBXZWJSVEMgLyBNZWRpYVN0cmVhbSBpbXBsZW1lbnRhdGlvbiBpcyBub3Qg
Y29tcGxldGUgeWV0LgotIyBTb21lIG9mIHRoaXMgdGVzdHMgYXJlIHNraXBwZWQgb24gdGhlIGdl
bmVyYWwgVGVzdEV4cGVjdGF0aW9ucywKLSMgRW5hYmxlIHRoZW0gaGVyZSBhbmQgbGlzdCB0aGUg
aW5kaXZpZHVhbCBleHBlY3RhdGlvbnMgaW4gb3JkZXIgdG8gZ2V0Ci0jIG5vdGlmaWNhdGlvbnMg
b2YgbmV3IGZhaWx1cmVzLgogZmFzdC9tZWRpYXN0cmVhbSBbIFBhc3MgXQotd2VicnRjIFsgUGFz
cyBdCi0jIEdUSyB1c2VzIE9XUiBpbnN0ZWFkIG9mIGxpYndlYnJ0Ywotd2VicnRjL2xpYndlYnJ0
YyBbIFNraXAgXQotIyBTb21lIFdlYlJUQyBmZWF0dXJlcyBsaWtlIGRhdGFjaGFubmVsIGFyZSBz
dGlsbCBub3QgaW1wbGVtZW50ZWQKLXdlYnJ0Yy9hdWRpby1yZXBsYWNlLXRyYWNrLmh0bWwgWyBG
YWlsdXJlIF0KLXdlYnJ0Yy9hdWRpby1tdXRlZC1zdGF0cy5odG1sIFsgRmFpbHVyZSBdCi13ZWJy
dGMvYXVkaW8tbXV0ZWQtc3RhdHMyLmh0bWwgWyBGYWlsdXJlIF0KLXdlYnJ0Yy9jYXB0dXJlQ2Fu
dmFzLXdlYnJ0Yy5odG1sIFsgRmFpbHVyZSBdCi13ZWJydGMvY2xvc2luZy1wZWVyY29ubmVjdGlv
bi5odG1sIFsgVGltZW91dCBdCi13ZWJydGMvY29ubmVjdGlvbi1zdGF0ZS5odG1sIFsgRmFpbHVy
ZSBdCi13ZWJydGMvZGF0YWNoYW5uZWwgWyBTa2lwIF0KLXdlYnJ0Yy9lcGhlbWVyYWwtY2VydGlm
aWNhdGVzLWFuZC1jbmFtZXMuaHRtbCBbIEZhaWx1cmUgXQotd2VicnRjL211bHRpLXZpZGVvLmh0
bWwgWyBGYWlsdXJlIF0KLXdlYnJ0Yy9uby1wb3J0LXplcm8taW4tdXBkLWNhbmRpZGF0ZXMuaHRt
bCBbIFRpbWVvdXQgXQotd2VicnRjL3BlZXItY29ubmVjdGlvbi1hdWRpby1tdXRlMi5odG1sIFsg
Q3Jhc2ggRmFpbHVyZSBdCi13ZWJydGMvcGVlci1jb25uZWN0aW9uLWF1ZGlvLW11dGUuaHRtbCBb
IEZhaWx1cmUgXQotd2VicnRjL3BlZXItY29ubmVjdGlvbi1hdWRpby11bm11dGUuaHRtbCBbIEZh
aWx1cmUgXQotd2VicnRjL3BlZXItY29ubmVjdGlvbi1yZW1vdGUtYXVkaW8tbXV0ZTIuaHRtbCBb
IENyYXNoIEZhaWx1cmUgXQotd2VicnRjL3BlZXItY29ubmVjdGlvbi1yZW1vdGUtYXVkaW8tbXV0
ZS5odG1sIFsgRmFpbHVyZSBdCi13ZWJydGMvcGVlci1jb25uZWN0aW9uLXRyYWNrLWVuZC5odG1s
IFsgRmFpbHVyZSBdCi13ZWJydGMvdmlkZW8tYWRkVHJhY2suaHRtbCBbIENyYXNoIF0KLXdlYnJ0
Yy92aWRlby1kaXNhYmxlZC1ibGFjay5odG1sIFsgRmFpbHVyZSBdCi13ZWJydGMvdmlkZW8tbWVk
aWFzdHJlYW10cmFjay1zdGF0cy5odG1sIFsgRmFpbHVyZSBdCi13ZWJydGMvdmlkZW8tbXV0ZS5o
dG1sIFsgRmFpbHVyZSBUaW1lb3V0IF0KLXdlYnJ0Yy92aWRlby1yZW1vdGUtbXV0ZS5odG1sIFsg
RmFpbHVyZSBdCi13ZWJydGMvdmlkZW8tcmVwbGFjZS1tdXRlZC10cmFjay5odG1sIFsgRmFpbHVy
ZSBUaW1lb3V0IENyYXNoIF0KLXdlYmtpdC5vcmcvYi8xNzY4MDEgd2VicnRjL3ZpZGVvLXJlcGxh
Y2UtdHJhY2suaHRtbCBbIEZhaWx1cmUgQ3Jhc2ggXQotd2Via2l0Lm9yZy9iLzE3NjgwMSB3ZWJy
dGMvdmlkZW8tZ2V0UGFyYW1ldGVycy5odG1sIFsgRmFpbHVyZSBDcmFzaCBdCi13ZWJraXQub3Jn
L2IvMTc2ODAxIHdlYnJ0Yy92aWRlby5odG1sIFsgRmFpbHVyZSBDcmFzaCBdCi13ZWJydGMvdmlk
ZW8tcmVwbGFjZS10cmFjay10by1udWxsLmh0bWwgWyBGYWlsdXJlIF0KLXdlYnJ0Yy92aWRlby1y
b3RhdGlvbi5odG1sIFsgRmFpbHVyZSBdCi13ZWJydGMvdmlkZW8tc3RhdHMuaHRtbCBbIEZhaWx1
cmUgQ3Jhc2ggXQotd2VicnRjL3ZpZGVvLXVubXV0ZS5odG1sIFsgRmFpbHVyZSBUaW1lb3V0IF0K
LXdlYnJ0Yy92aWRlby13aXRoLWRhdGEtY2hhbm5lbC5odG1sIFsgRmFpbHVyZSBdCi13ZWJydGMv
dmlkZW8td2l0aC1yZWNlaXZlci5odG1sIFsgRmFpbHVyZSBdCi1pbXBvcnRlZC93M2Mvd2ViLXBs
YXRmb3JtLXRlc3RzL3dlYnJ0Yy9SVENQZWVyQ29ubmVjdGlvbi1hZGRJY2VDYW5kaWRhdGUuaHRt
bCBbIEZhaWx1cmUgXQotaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy93ZWJydGMvUlRD
UGVlckNvbm5lY3Rpb24tY3JlYXRlRGF0YUNoYW5uZWwuaHRtbCBbIEZhaWx1cmUgXQotaW1wb3J0
ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy93ZWJydGMvUlRDUGVlckNvbm5lY3Rpb24tc2V0UmVt
b3RlRGVzY3JpcHRpb24uaHRtbCBbIEZhaWx1cmUgXQotaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9y
bS10ZXN0cy93ZWJydGMvUlRDUGVlckNvbm5lY3Rpb24taWRsLmh0bWwgWyBGYWlsdXJlIF0KLWlt
cG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvd2VicnRjL1JUQ1BlZXJDb25uZWN0aW9uLWNy
ZWF0ZUFuc3dlci5odG1sIFsgRmFpbHVyZSBdCi1pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRl
c3RzL3dlYnJ0Yy9SVENQZWVyQ29ubmVjdGlvbi1vbm5lZ290aWF0aW9ubmVlZGVkLmh0bWwgWyBG
YWlsdXJlIF0KLWltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvd2VicnRjL1JUQ0RhdGFD
aGFubmVsLWJ1ZmZlcmVkQW1vdW50Lmh0bWwgWyBGYWlsdXJlIF0KLWltcG9ydGVkL3czYy93ZWIt
cGxhdGZvcm0tdGVzdHMvd2VicnRjL1JUQ0RhdGFDaGFubmVsLXNlbmQuaHRtbCBbIEZhaWx1cmUg
XQotaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy93ZWJydGMvUlRDSWNlVHJhbnNwb3J0
Lmh0bWwgWyBGYWlsdXJlIF0KLWltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvd2VicnRj
L1JUQ1BlZXJDb25uZWN0aW9uLWFkZFRyYW5zY2VpdmVyLmh0bWwgWyBGYWlsdXJlIF0KLWltcG9y
dGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvd2VicnRjL1JUQ1BlZXJDb25uZWN0aW9uLWNvbm5l
Y3Rpb25TdGF0ZS5odG1sIFsgRmFpbHVyZSBdCi1pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRl
c3RzL3dlYnJ0Yy9SVENQZWVyQ29ubmVjdGlvbi1nZXRTdGF0cy5odG1sIFsgRmFpbHVyZSBdCi1p
bXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3dlYnJ0Yy9SVENQZWVyQ29ubmVjdGlvbi1p
Y2VDb25uZWN0aW9uU3RhdGUuaHRtbCBbIEZhaWx1cmUgXQotaW1wb3J0ZWQvdzNjL3dlYi1wbGF0
Zm9ybS10ZXN0cy93ZWJydGMvUlRDUGVlckNvbm5lY3Rpb24taWNlR2F0aGVyaW5nU3RhdGUuaHRt
bCBbIEZhaWx1cmUgXQotaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy93ZWJydGMvUlRD
UGVlckNvbm5lY3Rpb24tb25kYXRhY2hhbm5lbC5odG1sIFsgRmFpbHVyZSBdCi1pbXBvcnRlZC93
M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3dlYnJ0Yy9SVENQZWVyQ29ubmVjdGlvbi1zZXRMb2NhbERl
c2NyaXB0aW9uLWFuc3dlci5odG1sIFsgRmFpbHVyZSBdCi1pbXBvcnRlZC93M2Mvd2ViLXBsYXRm
b3JtLXRlc3RzL3dlYnJ0Yy9SVENQZWVyQ29ubmVjdGlvbi1zZXRMb2NhbERlc2NyaXB0aW9uLW9m
ZmVyLmh0bWwgWyBGYWlsdXJlIF0KLWltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvd2Vi
cnRjL1JUQ1BlZXJDb25uZWN0aW9uLXNldFJlbW90ZURlc2NyaXB0aW9uLW9mZmVyLmh0bWwgWyBG
YWlsdXJlIF0KLWltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvd2VicnRjL1JUQ0RUTUZT
ZW5kZXItaW5zZXJ0RFRNRi5odG1sIFsgQ3Jhc2ggXQotaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9y
bS10ZXN0cy93ZWJydGMvUlRDUGVlckNvbm5lY3Rpb24tb250cmFjay5odG1sIFsgQ3Jhc2ggXQot
aW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy93ZWJydGMvUlRDUGVlckNvbm5lY3Rpb24t
c2V0RGVzY3JpcHRpb24tdHJhbnNjZWl2ZXIuaHRtbCBbIENyYXNoIF0KLWltcG9ydGVkL3czYy93
ZWItcGxhdGZvcm0tdGVzdHMvd2VicnRjL1JUQ1J0cFNlbmRlci1yZXBsYWNlVHJhY2suaHRtbCBb
IENyYXNoIF0KLWltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvd2VicnRjL2RhdGFjaGFu
bmVsLWVtcHR5c3RyaW5nLmh0bWwgWyBGYWlsdXJlIF0KLWltcG9ydGVkL3czYy93ZWItcGxhdGZv
cm0tdGVzdHMvd2VicnRjL25vLW1lZGlhLWNhbGwuaHRtbCBbIEZhaWx1cmUgXQotaW1wb3J0ZWQv
dzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy93ZWJydGMvcHJvbWlzZXMtY2FsbC5odG1sIFsgRmFpbHVy
ZSBdCi1pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3dlYnJ0Yy9ydGNwZWVyY29ubmVj
dGlvbi9zZXRSZW1vdGVEZXNjcmlwdGlvbi5odG1sIFsgRmFpbHVyZSBdCi1odHRwL3Rlc3RzL3dl
YnJ0Yy9maWx0ZXJpbmctaWNlLWNhbmRpZGF0ZS1jcm9zcy1vcmlnaW4tZnJhbWUuaHRtbCBbIFRp
bWVvdXQgXQotaHR0cC90ZXN0cy93ZWJydGMvZmlsdGVyaW5nLWljZS1jYW5kaWRhdGUtc2FtZS1v
cmlnaW4tZnJhbWUuaHRtbCBbIFRpbWVvdXQgXQotaHR0cC90ZXN0cy93ZWJydGMvZmlsdGVyaW5n
LWljZS1jYW5kaWRhdGUtc2FtZS1vcmlnaW4tZnJhbWUyLmh0bWwgWyBUaW1lb3V0IF0KLXdlYnJ0
Yy9maWx0ZXJpbmctaWNlLWNhbmRpZGF0ZS1hZnRlci1yZWxvYWQuaHRtbCBbIFRpbWVvdXQgXQot
d2VicnRjL2ljZS1jYW5kaWRhdGUtc2RwTUxpbmVJbmRleC5odG1sIFsgVGltZW91dCBdCisjIFNr
aXBwaW5nIHVudGlsIGJhY2tlbmQgaXMgaW1wbGVtZW50ZWQKK3dlYnJ0YyBbIFNraXAgXQoraW1w
b3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy93ZWJydGMvIFsgU2tpcCBdCiBodHRwL3Rlc3Rz
L21lZGlhL21lZGlhLXN0cmVhbS9nZXR1c2VybWVkaWEtd2l0aC1jYW52YXMuaHRtbCBbIFRpbWVv
dXQgXQotd2Via2l0Lm9yZy9iLzE2OTExMCB3ZWJydGMvYXVkaW8tcGVlci1jb25uZWN0aW9uLXdl
YmF1ZGlvLmh0bWwgWyBGYWlsdXJlIFRpbWVvdXQgXQotd2Via2l0Lm9yZy9iLzE3MzQ1NiBpbXBv
cnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3dlYnJ0Yy9SVENQZWVyQ29ubmVjdGlvbi1jcmVh
dGVPZmZlci5odG1sIFsgQ3Jhc2ggXQotd2Via2l0Lm9yZy9iLzE3MzQ1NiB3ZWJydGMvY3JlYXRl
T2ZmZXJBbnN3ZXIuaHRtbCAgWyBDcmFzaCBdCi13ZWJraXQub3JnL2IvMTczNDU2IHdlYnJ0Yy92
aWRlby1hZGRUcmFuc2NlaXZlci5odG1sIFsgQ3Jhc2ggXQogIyBUaGUgTWVkaWFTdHJlYW0gaW1w
bGVtZW50YXRpb24gaXMgYWxzbyBzdGlsbCBub3QgY29tcGxldGVkCiB3ZWJraXQub3JnL2IvNzky
MDMgZmFzdC9tZWRpYXN0cmVhbS9tb2NrLW1lZGlhLXNvdXJjZS13ZWJhdWRpby5odG1sIFsgVGlt
ZW91dCBdCiB3ZWJraXQub3JnL2IvNzkyMDMgZmFzdC9tZWRpYXN0cmVhbS9nZXRVc2VyTWVkaWEt
d2ViYXVkaW8uaHRtbCBbIEZhaWx1cmUgXQpAQCAtMTI1Myw3ICsxMTgyLDYgQEAgd2Via2l0Lm9y
Zy9iLzE3NTQxOSBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3N0cmVhbXMvcmVhZGFi
bGUtYnl0ZS1zdHJlYW0KIGZhc3QvaW1hZ2VzL2FuaW1hdGVkLWltYWdlLW1wNC5odG1sIFsgU2tp
cCBdCiAKIHdlYmtpdC5vcmcvYi8xNzc1MzIgYWNjZXNzaWJpbGl0eS9pbWFnZS1sb2FkLW9uLWRl
bGF5Lmh0bWwgWyBGYWlsdXJlIF0KLXdlYmtpdC5vcmcvYi8xNzc1MzMgd2VicnRjL3ZpZGVvLWlu
dGVycnVwdGlvbi5odG1sIFsgRmFpbHVyZSBdCiAKIHdlYmtpdC5vcmcvYi8xNzc2MzIgZmFzdC90
ZXh0L2ZsYWctY29kZXBvaW50Lmh0bWwgWyBJbWFnZU9ubHlGYWlsdXJlIF0KIApAQCAtMTM4Miw3
ICsxMzEwLDYgQEAgd2Via2l0Lm9yZy9iLzE3NjgwNSBtZWRpYS9tZWRpYS1oaWdoZXItcHJpby1h
dWRpby1zdHJlYW0uaHRtbCBbIENyYXNoIF0KIHdlYmtpdC5vcmcvYi8xNzY4MDYgbWVkaWEvdHJh
Y2svdHJhY2stdGV4dC10cmFjay1jdWUtbGlzdC5odG1sIFsgQ3Jhc2ggXQogCiB3ZWJraXQub3Jn
L2IvMTc2ODU2IGZhc3QvbWVkaWFzdHJlYW0vYXBwbHktY29uc3RyYWludHMtdmlkZW8uaHRtbCBb
IENyYXNoIF0KLXdlYmtpdC5vcmcvYi8xNzY4NTAgd2VicnRjL2Nsb25lLWF1ZGlvLXRyYWNrLmh0
bWwgWyBGYWlsdXJlIENyYXNoIF0KIHdlYmtpdC5vcmcvYi8xNzY4NjEgaW1wb3J0ZWQvdzNjL3dl
Yi1wbGF0Zm9ybS10ZXN0cy9tZWRpYS1zb3VyY2UvbWVkaWFzb3VyY2Utc291cmNlYnVmZmVyLW1v
ZGUuaHRtbCBbIENyYXNoIF0KIAogIyBTZWUgYWxzbyB3ZWJraXQub3JnL2IvMTQxNjk5CkBAIC0x
Mzk0LDggKzEzMjEsNiBAQCB3ZWJraXQub3JnL2IvMTc3NTM3IGh0dHAvdGVzdHMvbXVsdGlwYXJ0
L211bHRpcGFydC1odG1sLnBocCBbIENyYXNoIF0KIAogd2Via2l0Lm9yZy9iLzE3NzgxNiB3ZWJn
bC8xLjAuMi9jb25mb3JtYW5jZS9vZ2xlcy9HTC92ZWMvdmVjXzAwMV90b18wMDguaHRtbCBbIENy
YXNoIFBhc3MgXQogCi13ZWJraXQub3JnL2IvMTc3ODE4IHdlYnJ0Yy9uZWdvdGlhdGVkbmVlZGVk
LWV2ZW50LWFkZFN0cmVhbS5odG1sIFsgQ3Jhc2ggUGFzcyBdCi0KICMvLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vCiAjIEVuZCBvZiBDcmFzaGluZyB0ZXN0cwogIy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>322659</attachid>
            <date>2017-10-04 06:00:35 -0700</date>
            <delta_ts>2017-10-04 06:23:00 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-177868-20171004150032.patch</filename>
            <type>text/plain</type>
            <size>260802</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjIyODM0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzIwOWYyMWRiZDdiYWJk
NjQyODZiYTRjMDYzYTU5NWI2YTk1MzVhMi4uNTE5ZTJkYzVhNjVhNWE0YTcwNjgwOWJlOGNmNzg4
MGMwYjQ4NTQ3OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDU0IEBACiAyMDE3LTEwLTA0ICBZb3Vl
bm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KIAorICAgICAgICBSZW1vdmUgT3BlbldlYlJU
QyBiYWNrZW5kCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNzc4NjgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIERlcml2ZWRTb3VyY2VzLm1ha2U6CisgICAg
ICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYUVuZHBvaW50UGVlckNvbm5lY3Rpb24uY3Bw
OiBSZW1vdmVkLgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFFbmRwb2ludFBl
ZXJDb25uZWN0aW9uLmg6IFJlbW92ZWQuCisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9N
ZWRpYUVuZHBvaW50U2Vzc2lvbkRlc2NyaXB0aW9uLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBN
b2R1bGVzL21lZGlhc3RyZWFtL01lZGlhRW5kcG9pbnRTZXNzaW9uRGVzY3JpcHRpb24uaDogUmVt
b3ZlZC4KKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL1NEUFByb2Nlc3Nvci5jcHA6IFJl
bW92ZWQuCisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9TRFBQcm9jZXNzb3IuaDogUmVt
b3ZlZC4KKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL2xpYndlYnJ0Yy9MaWJXZWJSVENN
ZWRpYUVuZHBvaW50LmNwcDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2o6CisgICAgICAgICogcGxhdGZvcm0vR1N0cmVhbWVyLmNtYWtlOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmJ1aWxk
TWVkaWFFbmdpbmVzVmVjdG9yKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFt
ZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c3VwcG9ydHNUeXBlKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyLmNw
cDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyLmg6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0v
bWVkaWFzdHJlYW0vTWVkaWFFbmRwb2ludC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZv
cm0vbWVkaWFzdHJlYW0vTWVkaWFFbmRwb2ludC5oOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRm
b3JtL21lZGlhc3RyZWFtL01lZGlhRW5kcG9pbnRTZXNzaW9uQ29uZmlndXJhdGlvbi5oOiBSZW1v
dmVkLgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL1NEUFByb2Nlc3NvclNjcmlwdFJl
c291cmNlLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9TRFBQ
cm9jZXNzb3JTY3JpcHRSZXNvdXJjZS5oOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL21l
ZGlhc3RyZWFtL29wZW53ZWJydGMvTWVkaWFFbmRwb2ludE93ci5jcHA6IFJlbW92ZWQuCisgICAg
ICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vb3BlbndlYnJ0Yy9NZWRpYUVuZHBvaW50T3dyLmg6
IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vb3BlbndlYnJ0Yy9PcGVu
V2ViUlRDVXRpbGl0aWVzLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0
cmVhbS9vcGVud2VicnRjL09wZW5XZWJSVENVdGlsaXRpZXMuaDogUmVtb3ZlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9vcGVud2VicnRjL1JlYWx0aW1lQXVkaW9Tb3VyY2VPd3Iu
aDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9vcGVud2VicnRjL1Jl
YWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJPd3IuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRm
b3JtL21lZGlhc3RyZWFtL29wZW53ZWJydGMvUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlck93ci5o
OiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL29wZW53ZWJydGMvUmVh
bHRpbWVNZWRpYVNvdXJjZU93ci5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vbWVk
aWFzdHJlYW0vb3BlbndlYnJ0Yy9SZWFsdGltZU1lZGlhU291cmNlT3dyLmg6IFJlbW92ZWQuCisg
ICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vb3BlbndlYnJ0Yy9SZWFsdGltZVZpZGVvU291
cmNlT3dyLmg6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vbW9jay9Nb2NrTWVkaWFFbmRw
b2ludC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vbW9jay9Nb2NrTWVkaWFFbmRw
b2ludC5oOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL21vY2svTW9ja1JlYWx0aW1lTWVk
aWFTb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TW9ja1JlYWx0aW1lTWVkaWFTb3VyY2U6
Ok1vY2tSZWFsdGltZU1lZGlhU291cmNlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tb2NrL01vY2tS
ZWFsdGltZU1lZGlhU291cmNlLmg6CisgICAgICAgICogdGVzdGluZy9JbnRlcm5hbHMuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjpJbnRlcm5hbHMpOgorICAgICAgICAoV2ViQ29y
ZTo6SW50ZXJuYWxzOjplbmFibGVNb2NrTWVkaWFFbmRwb2ludCk6IERlbGV0ZWQuCisgICAgICAg
ICogdGVzdGluZy9JbnRlcm5hbHMuaDoKKworMjAxNy0xMC0wNCAgWW91ZW5uIEZhYmxldCAgPHlv
dWVubkBhcHBsZS5jb20+CisKICAgICAgICAgQWRkIHF1b3RhIHRvIGNhY2hlIEFQSQogICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc3NTUyCiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNvcmUvQ01h
a2VMaXN0cy50eHQKaW5kZXggMWNjMTZjN2QxZmFiZGVmNjU3OGI0MjIxMTFkYmI1NjVlMzkwNDg5
ZC4uN2YyMmU1MTZmOTdhMjk3ZGQ1NDhlNzVjZWUwODc3YTFjNTYyNWYxYSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VM
aXN0cy50eHQKQEAgLTEwOTMsOCArMTA5Myw2IEBAIHNldChXZWJDb3JlX1NPVVJDRVMKICAgICBN
b2R1bGVzL21lZGlhc3RyZWFtL01lZGlhRGV2aWNlcy5jcHAKICAgICBNb2R1bGVzL21lZGlhc3Ry
ZWFtL01lZGlhRGV2aWNlc0VudW1lcmF0aW9uUmVxdWVzdC5jcHAKICAgICBNb2R1bGVzL21lZGlh
c3RyZWFtL01lZGlhRGV2aWNlc1JlcXVlc3QuY3BwCi0gICAgTW9kdWxlcy9tZWRpYXN0cmVhbS9N
ZWRpYUVuZHBvaW50UGVlckNvbm5lY3Rpb24uY3BwCi0gICAgTW9kdWxlcy9tZWRpYXN0cmVhbS9N
ZWRpYUVuZHBvaW50U2Vzc2lvbkRlc2NyaXB0aW9uLmNwcAogICAgIE1vZHVsZXMvbWVkaWFzdHJl
YW0vTWVkaWFTdHJlYW0uY3BwCiAgICAgTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbUV2
ZW50LmNwcAogICAgIE1vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1SZWdpc3RyeS5jcHAK
QEAgLTExMTYsNyArMTExNCw2IEBAIHNldChXZWJDb3JlX1NPVVJDRVMKICAgICBNb2R1bGVzL21l
ZGlhc3RyZWFtL1JUQ1J0cFRyYW5zY2VpdmVyLmNwcAogICAgIE1vZHVsZXMvbWVkaWFzdHJlYW0v
UlRDU2Vzc2lvbkRlc2NyaXB0aW9uLmNwcAogICAgIE1vZHVsZXMvbWVkaWFzdHJlYW0vUlRDVHJh
Y2tFdmVudC5jcHAKLSAgICBNb2R1bGVzL21lZGlhc3RyZWFtL1NEUFByb2Nlc3Nvci5jcHAKICAg
ICBNb2R1bGVzL21lZGlhc3RyZWFtL1VzZXJNZWRpYUNvbnRyb2xsZXIuY3BwCiAgICAgTW9kdWxl
cy9tZWRpYXN0cmVhbS9Vc2VyTWVkaWFSZXF1ZXN0LmNwcAogCkBAIC0yNTU0LDEzICsyNTUxLDEx
IEBAIHNldChXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGlt
ZU1lZGlhU291cmNlLmNwcAogICAgIHBsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lTWVkaWFT
b3VyY2VDZW50ZXIuY3BwCiAgICAgcGxhdGZvcm0vbWVkaWFzdHJlYW0vUmVhbHRpbWVNZWRpYVNv
dXJjZVNldHRpbmdzLmNwcAotICAgIHBsYXRmb3JtL21lZGlhc3RyZWFtL1NEUFByb2Nlc3NvclNj
cmlwdFJlc291cmNlLmNwcAogCiAgICAgcGxhdGZvcm0vbWVkaWFzdHJlYW0vbGlid2VicnRjL0xp
YldlYlJUQ1Byb3ZpZGVyLmNwcAogCiAgICAgcGxhdGZvcm0vbW9jay9EZXZpY2VPcmllbnRhdGlv
bkNsaWVudE1vY2suY3BwCiAgICAgcGxhdGZvcm0vbW9jay9HZW9sb2NhdGlvbkNsaWVudE1vY2su
Y3BwCi0gICAgcGxhdGZvcm0vbW9jay9Nb2NrTWVkaWFFbmRwb2ludC5jcHAKICAgICBwbGF0Zm9y
bS9tb2NrL01vY2tSZWFsdGltZUF1ZGlvU291cmNlLmNwcAogICAgIHBsYXRmb3JtL21vY2svTW9j
a1JlYWx0aW1lTWVkaWFTb3VyY2UuY3BwCiAgICAgcGxhdGZvcm0vbW9jay9Nb2NrUmVhbHRpbWVN
ZWRpYVNvdXJjZUNlbnRlci5jcHAKQEAgLTM4ODIsMjQgKzM4NzcsNiBAQCBpZiAoV2ViQ29yZV9V
U0VSX0FHRU5UX1NDUklQVFMpCiAgICAgbGlzdChBUFBFTkQgV2ViQ29yZV9ERVJJVkVEX1NPVVJD
RVMgJHtERVJJVkVEX1NPVVJDRVNfV0VCQ09SRV9ESVJ9L1VzZXJBZ2VudFNjcmlwdHNEYXRhLmNw
cCkKIGVuZGlmICgpCiAKLWlmIChFTkFCTEVfV0VCX1JUQykKLSAgICAjIE5lY2Vzc2FyeSB2YXJp
YWJsZXM6Ci0gICAgIyBXZWJDb3JlX1NEUF9QUk9DRVNTT1JfU0NSSVBUUyBjb250YWluaW5nIHRo
ZSBKYXZhU2NyaXB0IHNvdXJjZXMgbGlzdAotICAgICMgV2ViQ29yZV9TRFBfUFJPQ0VTU09SX1ND
UklQVFNfREVQRU5ERU5DSUVTIGNvbnRhaW5pbmcgdGhlIHNvdXJjZSBmaWxlIHRoYXQgd2lsbCBs
b2FkIHRoZSBzY3JpcHRzIHRvIGFkZCB0aGUgcHJvcGVyCi0gICAgIyAgIGRlcGVuZGVuY3kgYW5k
IGhhdmluZyB0aGVtIGJ1aWx0IGF0IHRoZSByaWdodCBtb21lbnQKLSAgICBzZXQoV2ViQ29yZV9T
RFBfUFJPQ0VTU09SX1NDUklQVFMgJHtXRUJDT1JFX0RJUn0vTW9kdWxlcy9tZWRpYXN0cmVhbS9z
ZHAuanMpCi0gICAgc2V0KFdlYkNvcmVfU0RQX1BST0NFU1NPUl9TQ1JJUFRTX0RFUEVOREVOQ0lF
UyAke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9TRFBQcm9jZXNzb3JTY3JpcHRS
ZXNvdXJjZS5jcHApCi0KLSAgICBNQUtFX0pTX0ZJTEVfQVJSQVlTKAotICAgICAgICAke0RFUklW
RURfU09VUkNFU19XRUJDT1JFX0RJUn0vU0RQUHJvY2Vzc29yU2NyaXB0c0RhdGEuY3BwCi0gICAg
ICAgICR7REVSSVZFRF9TT1VSQ0VTX1dFQkNPUkVfRElSfS9TRFBQcm9jZXNzb3JTY3JpcHRzRGF0
YS5oCi0gICAgICAgIFdlYkNvcmUKLSAgICAgICAgV2ViQ29yZV9TRFBfUFJPQ0VTU09SX1NDUklQ
VFMKLSAgICAgICAgV2ViQ29yZV9TRFBfUFJPQ0VTU09SX1NDUklQVFNfREVQRU5ERU5DSUVTCi0g
ICAgKQotICAgIGxpc3QoQVBQRU5EIFdlYkNvcmVfREVSSVZFRF9TT1VSQ0VTICR7REVSSVZFRF9T
T1VSQ0VTX1dFQkNPUkVfRElSfS9TRFBQcm9jZXNzb3JTY3JpcHRzRGF0YS5jcHApCi1lbmRpZiAo
KQotCiAjIEdlbmVyYXRlIHBsdWctaW4gcmVzb3VyY2VzCiBhZGRfY3VzdG9tX2NvbW1hbmQoCiAg
ICAgT1VUUFVUICR7REVSSVZFRF9TT1VSQ0VTX1dFQkNPUkVfRElSfS9QbHVnSW5zUmVzb3VyY2Vz
RGF0YS5jcHAgJHtERVJJVkVEX1NPVVJDRVNfV0VCQ09SRV9ESVJ9L1BsdWdJbnNSZXNvdXJjZXMu
aApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZSBiL1NvdXJj
ZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UKaW5kZXggMWQ1ZWYwMjBiNGMyZTlmYmIwYmUz
MTAxYTgwNzI5ZDdhNjllOWZlZS4uZDM2YTE5ODdjNmQwN2FiMGFjNTQ0NzU5NmExYjRhNGQzYjgx
OGY3ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtlCkBAIC0xMTg0LDIzICsxMTg0LDYg
QEAgQ29sb3JEYXRhLmNwcCA6IHBsYXRmb3JtL0NvbG9yRGF0YS5ncGVyZiAkKFdlYkNvcmUpL21h
a2UtaGFzaC10b29scy5wbAogCiAjIC0tLS0tLS0tCiAKLSMgV2ViUlRDIHNjcmlwdHMKLQotV0VC
Q09SRV9TRFBfUFJPQ0VTU09SX1NDUklQVFMgPSAKLQotaWZlcSAoJChPUyksTUFDT1MpCi0gICAg
V0VCQ09SRV9TRFBfUFJPQ0VTU09SX1NDUklQVFMgOj0gJChXRUJDT1JFX1NEUF9QUk9DRVNTT1Jf
U0NSSVBUUykgJChXZWJDb3JlKS9Nb2R1bGVzL21lZGlhc3RyZWFtL3NkcC5qcwotZW5kaWYKLQot
aWZkZWYgV0VCQ09SRV9TRFBfUFJPQ0VTU09SX1NDUklQVFMKLWFsbCA6IFNEUFByb2Nlc3NvclNj
cmlwdHNEYXRhLmgKLQotU0RQUHJvY2Vzc29yU2NyaXB0c0RhdGEuaCA6ICQoSmF2YVNjcmlwdENv
cmVfU0NSSVBUU19ESVIpL21ha2UtanMtZmlsZS1hcnJheXMucHkgJChXRUJDT1JFX1NEUF9QUk9D
RVNTT1JfU0NSSVBUUykKLQkkKFBZVEhPTikgJChKYXZhU2NyaXB0Q29yZV9TQ1JJUFRTX0RJUikv
bWFrZS1qcy1maWxlLWFycmF5cy5weSAtbiBXZWJDb3JlICRAIFNEUFByb2Nlc3NvclNjcmlwdHNE
YXRhLmNwcCAkKFdFQkNPUkVfU0RQX1BST0NFU1NPUl9TQ1JJUFRTKQotZW5kaWYKLQotIyAtLS0t
LS0tLQotCiAjIHVzZXIgYWdlbnQgc3R5bGUgc2hlZXRzCiAKIFVTRVJfQUdFTlRfU1RZTEVfU0hF
RVRTID0gJChXZWJDb3JlKS9jc3MvaHRtbC5jc3MgJChXZWJDb3JlKS9jc3MvcXVpcmtzLmNzcyAk
KFdlYkNvcmUpL2Nzcy9wbHVnSW5zLmNzcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9tZWRpYXN0cmVhbS9NZWRpYUVuZHBvaW50UGVlckNvbm5lY3Rpb24uY3BwIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYUVuZHBvaW50UGVlckNvbm5lY3Rpb24u
Y3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZTkyNTI3YWUyZmQ2NzZhNzczOWQ0
Zjc5Yzk2ZGY2NmZlMDViMGEwLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFFbmRwb2lu
dFBlZXJDb25uZWN0aW9uLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDg5MyArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDE1IEVyaWNzc29uIEFCLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogICAgaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICog
ICAgZGlzdHJpYnV0aW9uLgotICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBFcmljc3NvbiBub3Ig
dGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotICogICAgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
LSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0j
aW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiTWVkaWFFbmRwb2ludFBlZXJDb25uZWN0aW9u
LmgiCi0KLSNpZiBFTkFCTEUoV0VCX1JUQykKLQotI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKLSNp
bmNsdWRlICJKU1JUQ1Nlc3Npb25EZXNjcmlwdGlvbi5oIgotI2luY2x1ZGUgIk1lZGlhRW5kcG9p
bnRTZXNzaW9uQ29uZmlndXJhdGlvbi5oIgotI2luY2x1ZGUgIk1lZGlhRW5kcG9pbnRTZXNzaW9u
RGVzY3JpcHRpb24uaCIKLSNpbmNsdWRlICJNZWRpYVN0cmVhbS5oIgotI2luY2x1ZGUgIk1lZGlh
U3RyZWFtRXZlbnQuaCIKLSNpbmNsdWRlICJNZWRpYVN0cmVhbVRyYWNrLmgiCi0jaW5jbHVkZSAi
Tm90SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlICJQZWVyTWVkaWFEZXNjcmlwdGlvbi5oIgotI2lu
Y2x1ZGUgIlJUQ0Fuc3dlck9wdGlvbnMuaCIKLSNpbmNsdWRlICJSVENDb25maWd1cmF0aW9uLmgi
Ci0jaW5jbHVkZSAiUlRDSWNlQ2FuZGlkYXRlLmgiCi0jaW5jbHVkZSAiUlRDT2ZmZXJPcHRpb25z
LmgiCi0jaW5jbHVkZSAiUlRDUGVlckNvbm5lY3Rpb24uaCIKLSNpbmNsdWRlICJSVENQZWVyQ29u
bmVjdGlvbkljZUV2ZW50LmgiCi0jaW5jbHVkZSAiUlRDUnRwVHJhbnNjZWl2ZXIuaCIKLSNpbmNs
dWRlICJSVENUcmFja0V2ZW50LmgiCi0jaW5jbHVkZSAiU0RQUHJvY2Vzc29yLmgiCi0jaW5jbHVk
ZSA8d3RmL0Z1bmN0aW9uLmg+Ci0jaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KLSNpbmNsdWRl
IDx3dGYvdGV4dC9CYXNlNjQuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi11c2luZyBuYW1l
c3BhY2UgUGVlckNvbm5lY3Rpb247Ci0KLXVzaW5nIE1lZGlhRGVzY3JpcHRpb25WZWN0b3IgPSBW
ZWN0b3I8UGVlck1lZGlhRGVzY3JpcHRpb24+OwotdXNpbmcgUnRwVHJhbnNjZWl2ZXJWZWN0b3Ig
PSBWZWN0b3I8UmVmUHRyPFJUQ1J0cFRyYW5zY2VpdmVyPj47Ci0KLS8vIFdlIHVzZSBiYXNlNjQg
dG8gZ2VuZXJhdGUgdGhlIHJhbmRvbSBzdHJpbmdzIHNvIHdlIG5lZWQgYSBzaXplIHRoYXQgYXZv
aWRzIHBhZGRpbmcgdG8gZ2V0IGljZS1jaGFycy4KLXN0YXRpYyBjb25zdCBzaXplX3QgY25hbWVT
aXplID0gMTg7Ci0vLyBTaXplIHJhbmdlIGZyb20gNCB0byAyNTYgaWNlLWNoYXJzIGRlZmluZWQg
aW4gUkZDIDUyNDUuCi1zdGF0aWMgY29uc3Qgc2l6ZV90IGljZVVmcmFnU2l6ZSA9IDY7Ci0vLyBT
aXplIHJhbmdlIGZyb20gMjIgdG8gMjU2IGljZS1jaGFycyBkZWZpbmVkIGluIFJGQyA1MjQ1Lgot
c3RhdGljIGNvbnN0IHNpemVfdCBpY2VQYXNzd29yZFNpemUgPSAyNDsKLQotI2lmICFVU0UoTElC
V0VCUlRDKQotc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxQZWVyQ29ubmVjdGlvbkJhY2tlbmQ+IGNy
ZWF0ZU1lZGlhRW5kcG9pbnRQZWVyQ29ubmVjdGlvbihSVENQZWVyQ29ubmVjdGlvbiYgcGVlckNv
bm5lY3Rpb24pCi17Ci0gICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxQZWVyQ29ubmVjdGlvbkJh
Y2tlbmQ+KG5ldyBNZWRpYUVuZHBvaW50UGVlckNvbm5lY3Rpb24ocGVlckNvbm5lY3Rpb24pKTsK
LX0KLQotQ3JlYXRlUGVlckNvbm5lY3Rpb25CYWNrZW5kIFBlZXJDb25uZWN0aW9uQmFja2VuZDo6
Y3JlYXRlID0gY3JlYXRlTWVkaWFFbmRwb2ludFBlZXJDb25uZWN0aW9uOwotI2VuZGlmCi0KLXN0
YXRpYyBTdHJpbmcgcmFuZG9tU3RyaW5nKHNpemVfdCBzaXplKQotewotICAgIHVuc2lnbmVkIGNo
YXIgcmFuZG9tVmFsdWVzW3NpemVdOwotICAgIGNyeXB0b2dyYXBoaWNhbGx5UmFuZG9tVmFsdWVz
KHJhbmRvbVZhbHVlcywgc2l6ZSk7Ci0gICAgcmV0dXJuIGJhc2U2NEVuY29kZShyYW5kb21WYWx1
ZXMsIHNpemUpOwotfQotCi1NZWRpYUVuZHBvaW50UGVlckNvbm5lY3Rpb246Ok1lZGlhRW5kcG9p
bnRQZWVyQ29ubmVjdGlvbihSVENQZWVyQ29ubmVjdGlvbiYgcGVlckNvbm5lY3Rpb24pCi0gICAg
OiBQZWVyQ29ubmVjdGlvbkJhY2tlbmQocGVlckNvbm5lY3Rpb24pCi0gICAgLCBtX21lZGlhRW5k
cG9pbnQoTWVkaWFFbmRwb2ludDo6Y3JlYXRlKCp0aGlzKSkKLSAgICAsIG1fc2RwUHJvY2Vzc29y
KHN0ZDo6bWFrZV91bmlxdWU8U0RQUHJvY2Vzc29yPihtX3BlZXJDb25uZWN0aW9uLnNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoKSkpCi0gICAgLCBtX2NuYW1lKHJhbmRvbVN0cmluZyhjbmFtZVNpemUp
KQotICAgICwgbV9pY2VVZnJhZyhyYW5kb21TdHJpbmcoaWNlVWZyYWdTaXplKSkKLSAgICAsIG1f
aWNlUGFzc3dvcmQocmFuZG9tU3RyaW5nKGljZVBhc3N3b3JkU2l6ZSkpCi17Ci0gICAgQVNTRVJU
KG1fbWVkaWFFbmRwb2ludCk7Ci0KLSAgICBtX2RlZmF1bHRBdWRpb1BheWxvYWRzID0gbV9tZWRp
YUVuZHBvaW50LT5nZXREZWZhdWx0QXVkaW9QYXlsb2FkcygpOwotICAgIG1fZGVmYXVsdFZpZGVv
UGF5bG9hZHMgPSBtX21lZGlhRW5kcG9pbnQtPmdldERlZmF1bHRWaWRlb1BheWxvYWRzKCk7Ci0K
LSAgICAvLyBUYXNrcyAoc2VlIHJ1blRhc2soKSkgd2lsbCBiZSBkZWZlcnJlZCB1bnRpbCB3ZSBn
ZXQgdGhlIERUTFMgZmluZ2VycHJpbnQuCi0gICAgbV9tZWRpYUVuZHBvaW50LT5nZW5lcmF0ZUR0
bHNJbmZvKCk7Ci19Ci0KLXN0YXRpYyBSVENSdHBUcmFuc2NlaXZlciogbWF0Y2hUcmFuc2NlaXZl
cihjb25zdCBSdHBUcmFuc2NlaXZlclZlY3RvciYgdHJhbnNjZWl2ZXJzLCBjb25zdCBXVEY6OkZ1
bmN0aW9uPGJvb2woUlRDUnRwVHJhbnNjZWl2ZXImKT4mIG1hdGNoRnVuY3Rpb24pCi17Ci0gICAg
Zm9yIChhdXRvJiB0cmFuc2NlaXZlciA6IHRyYW5zY2VpdmVycykgewotICAgICAgICBpZiAobWF0
Y2hGdW5jdGlvbigqdHJhbnNjZWl2ZXIpKQotICAgICAgICAgICAgcmV0dXJuIHRyYW5zY2VpdmVy
LmdldCgpOwotICAgIH0KLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQotc3RhdGljIFJUQ1J0cFRy
YW5zY2VpdmVyKiBtYXRjaFRyYW5zY2VpdmVyQnlNaWQoY29uc3QgUnRwVHJhbnNjZWl2ZXJWZWN0
b3ImIHRyYW5zY2VpdmVycywgY29uc3QgU3RyaW5nJiBtaWQpCi17Ci0gICAgcmV0dXJuIG1hdGNo
VHJhbnNjZWl2ZXIodHJhbnNjZWl2ZXJzLCBbJm1pZF0gKFJUQ1J0cFRyYW5zY2VpdmVyJiBjdXJy
ZW50KSB7Ci0gICAgICAgIHJldHVybiBjdXJyZW50Lm1pZCgpID09IG1pZDsKLSAgICB9KTsKLX0K
LQotc3RhdGljIGJvb2wgaGFzVW5hc3NvY2lhdGVkVHJhbnNjZWl2ZXJzKGNvbnN0IFJ0cFRyYW5z
Y2VpdmVyVmVjdG9yJiB0cmFuc2NlaXZlcnMpCi17Ci0gICAgcmV0dXJuIG1hdGNoVHJhbnNjZWl2
ZXIodHJhbnNjZWl2ZXJzLCBbXSAoUlRDUnRwVHJhbnNjZWl2ZXImIGN1cnJlbnQpIHsKLSAgICAg
ICAgcmV0dXJuIGN1cnJlbnQubWlkKCkuaXNOdWxsKCkgJiYgIWN1cnJlbnQuc3RvcHBlZCgpOwot
ICAgIH0pOwotfQotCi12b2lkIE1lZGlhRW5kcG9pbnRQZWVyQ29ubmVjdGlvbjo6cnVuVGFzayhG
dW5jdGlvbjx2b2lkICgpPiYmIHRhc2spCi17Ci0gICAgaWYgKG1fZHRsc0ZpbmdlcnByaW50Lmlz
TnVsbCgpKSB7Ci0gICAgICAgIC8vIE9ubHkgb25lIHRhc2sgbmVlZHMgdG8gYmUgZGVmZXJyZWQg
c2luY2UgaXQgd2lsbCBob2xkIG9mZiBhbnkgb3RoZXJzIHVudGlsIGNvbXBsZXRlZC4KLSAgICAg
ICAgQVNTRVJUKCFtX2luaXRpYWxEZWZlcnJlZFRhc2spOwotICAgICAgICBtX2luaXRpYWxEZWZl
cnJlZFRhc2sgPSBXVEZNb3ZlKHRhc2spOwotICAgIH0gZWxzZQotICAgICAgICBjYWxsT25NYWlu
VGhyZWFkKFdURk1vdmUodGFzaykpOwotfQotCi12b2lkIE1lZGlhRW5kcG9pbnRQZWVyQ29ubmVj
dGlvbjo6c3RhcnRSdW5uaW5nVGFza3MoKQotewotICAgIGlmICghbV9pbml0aWFsRGVmZXJyZWRU
YXNrKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2luaXRpYWxEZWZlcnJlZFRhc2soKTsKLSAg
ICBtX2luaXRpYWxEZWZlcnJlZFRhc2sgPSBudWxscHRyOwotfQotCi12b2lkIE1lZGlhRW5kcG9p
bnRQZWVyQ29ubmVjdGlvbjo6ZG9DcmVhdGVPZmZlcihSVENPZmZlck9wdGlvbnMmJiBvcHRpb25z
KQotewotICAgIHJ1blRhc2soW3RoaXMsIHByb3RlY3RlZE9wdGlvbnMgPSBXVEZNb3ZlKG9wdGlv
bnMpXSgpIG11dGFibGUgewotICAgICAgICBjcmVhdGVPZmZlclRhc2socHJvdGVjdGVkT3B0aW9u
cyk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgTWVkaWFFbmRwb2ludFBlZXJDb25uZWN0aW9uOjpjcmVh
dGVPZmZlclRhc2soY29uc3QgUlRDT2ZmZXJPcHRpb25zJikKLXsKLSAgICBBU1NFUlQoIW1fZHRs
c0ZpbmdlcnByaW50LmlzRW1wdHkoKSk7Ci0KLSAgICBNZWRpYUVuZHBvaW50U2Vzc2lvbkRlc2Ny
aXB0aW9uKiBsb2NhbERlc2NyaXB0aW9uID0gaW50ZXJuYWxMb2NhbERlc2NyaXB0aW9uKCk7Ci0g
ICAgUmVmUHRyPE1lZGlhRW5kcG9pbnRTZXNzaW9uQ29uZmlndXJhdGlvbj4gY29uZmlndXJhdGlv
blNuYXBzaG90ID0gbG9jYWxEZXNjcmlwdGlvbiA/Ci0gICAgICAgIGxvY2FsRGVzY3JpcHRpb24t
PmNvbmZpZ3VyYXRpb24oKS0+Y2xvbmUoKSA6IE1lZGlhRW5kcG9pbnRTZXNzaW9uQ29uZmlndXJh
dGlvbjo6Y3JlYXRlKCk7Ci0KLSAgICBjb25maWd1cmF0aW9uU25hcHNob3QtPnNldEJ1bmRsZVBv
bGljeShtX3BlZXJDb25uZWN0aW9uLmdldENvbmZpZ3VyYXRpb24oKS5idW5kbGVQb2xpY3kpOwot
ICAgIGNvbmZpZ3VyYXRpb25TbmFwc2hvdC0+c2V0U2Vzc2lvblZlcnNpb24obV9zZHBPZmZlclNl
c3Npb25WZXJzaW9uKyspOwotCi0gICAgYXV0byB0cmFuc2NlaXZlcnMgPSBSdHBUcmFuc2NlaXZl
clZlY3RvcihtX3BlZXJDb25uZWN0aW9uLmdldFRyYW5zY2VpdmVycygpKTsKLQotICAgIC8vIFJl
bW92ZSBhbnkgdHJhbnNjZWl2ZXIgb2JqZWN0cyBmcm9tIHRyYW5zY2VpdmVycyB0aGF0IGNhbiBi
ZSBtYXRjaGVkIHRvIGFuIGV4aXN0aW5nIG1lZGlhIGRlc2NyaXB0aW9uLgotICAgIGZvciAoYXV0
byYgbWVkaWFEZXNjcmlwdGlvbiA6IGNvbmZpZ3VyYXRpb25TbmFwc2hvdC0+bWVkaWFEZXNjcmlw
dGlvbnMoKSkgewotICAgICAgICBpZiAoIW1lZGlhRGVzY3JpcHRpb24ucG9ydCkgewotICAgICAg
ICAgICAgLy8gVGhpcyBtZWRpYSBkZXNjcmlwdGlvbiBzaG91bGQgYmUgcmVjeWNsZWQuCi0gICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIFJUQ1J0cFRyYW5zY2VpdmVy
KiB0cmFuc2NlaXZlciA9IG1hdGNoVHJhbnNjZWl2ZXJCeU1pZCh0cmFuc2NlaXZlcnMsIG1lZGlh
RGVzY3JpcHRpb24ubWlkKTsKLSAgICAgICAgaWYgKCF0cmFuc2NlaXZlcikKLSAgICAgICAgICAg
IGNvbnRpbnVlOwotCi0gICAgICAgIG1lZGlhRGVzY3JpcHRpb24ubW9kZSA9IHRyYW5zY2VpdmVy
LT5kaXJlY3Rpb25TdHJpbmcoKTsKLSAgICAgICAgaWYgKHRyYW5zY2VpdmVyLT5oYXNTZW5kaW5n
RGlyZWN0aW9uKCkpIHsKLSAgICAgICAgICAgIGF1dG8mIHNlbmRlciA9IHRyYW5zY2VpdmVyLT5z
ZW5kZXIoKTsKLQotICAgICAgICAgICAgbWVkaWFEZXNjcmlwdGlvbi5tZWRpYVN0cmVhbUlkID0g
c2VuZGVyLm1lZGlhU3RyZWFtSWRzKClbMF07Ci0gICAgICAgICAgICBtZWRpYURlc2NyaXB0aW9u
Lm1lZGlhU3RyZWFtVHJhY2tJZCA9IHNlbmRlci50cmFja0lkKCk7Ci0gICAgICAgIH0KLQotICAg
ICAgICB0cmFuc2NlaXZlcnMucmVtb3ZlRmlyc3QodHJhbnNjZWl2ZXIpOwotICAgIH0KLQotICAg
IC8vIEFkZCBtZWRpYSBkZXNjcmlwdGlvbnMgZm9yIHJlbWFpbmluZyB0cmFuc2NlaXZlcnMuCi0g
ICAgZm9yIChhdXRvJiB0cmFuc2NlaXZlciA6IHRyYW5zY2VpdmVycykgewotICAgICAgICBQZWVy
TWVkaWFEZXNjcmlwdGlvbiBtZWRpYURlc2NyaXB0aW9uOwotICAgICAgICBhdXRvJiBzZW5kZXIg
PSB0cmFuc2NlaXZlci0+c2VuZGVyKCk7Ci0KLSAgICAgICAgbWVkaWFEZXNjcmlwdGlvbi5tb2Rl
ID0gdHJhbnNjZWl2ZXItPmRpcmVjdGlvblN0cmluZygpOwotICAgICAgICBtZWRpYURlc2NyaXB0
aW9uLm1pZCA9IHRyYW5zY2VpdmVyLT5wcm92aXNpb25hbE1pZCgpOwotICAgICAgICBtZWRpYURl
c2NyaXB0aW9uLm1lZGlhU3RyZWFtSWQgPSBzZW5kZXIubWVkaWFTdHJlYW1JZHMoKVswXTsKLSAg
ICAgICAgbWVkaWFEZXNjcmlwdGlvbi50eXBlID0gc2VuZGVyLnRyYWNrS2luZCgpOwotICAgICAg
ICBtZWRpYURlc2NyaXB0aW9uLnBheWxvYWRzID0gc2VuZGVyLnRyYWNrS2luZCgpID09ICJhdWRp
byIgPyBtX2RlZmF1bHRBdWRpb1BheWxvYWRzIDogbV9kZWZhdWx0VmlkZW9QYXlsb2FkczsKLSAg
ICAgICAgbWVkaWFEZXNjcmlwdGlvbi5kdGxzRmluZ2VycHJpbnRIYXNoRnVuY3Rpb24gPSBtX2R0
bHNGaW5nZXJwcmludEZ1bmN0aW9uOwotICAgICAgICBtZWRpYURlc2NyaXB0aW9uLmR0bHNGaW5n
ZXJwcmludCA9IG1fZHRsc0ZpbmdlcnByaW50OwotICAgICAgICBtZWRpYURlc2NyaXB0aW9uLmNu
YW1lID0gbV9jbmFtZTsKLSAgICAgICAgbWVkaWFEZXNjcmlwdGlvbi5hZGRTc3JjKGNyeXB0b2dy
YXBoaWNhbGx5UmFuZG9tTnVtYmVyKCkpOwotICAgICAgICBtZWRpYURlc2NyaXB0aW9uLmljZVVm
cmFnID0gbV9pY2VVZnJhZzsKLSAgICAgICAgbWVkaWFEZXNjcmlwdGlvbi5pY2VQYXNzd29yZCA9
IG1faWNlUGFzc3dvcmQ7Ci0KLSAgICAgICAgaWYgKHNlbmRlci50cmFjaygpKQotICAgICAgICAg
ICAgbWVkaWFEZXNjcmlwdGlvbi5tZWRpYVN0cmVhbVRyYWNrSWQgPSBzZW5kZXIudHJhY2tJZCgp
OwotCi0gICAgICAgIGNvbmZpZ3VyYXRpb25TbmFwc2hvdC0+YWRkTWVkaWFEZXNjcmlwdGlvbihX
VEZNb3ZlKG1lZGlhRGVzY3JpcHRpb24pKTsKLSAgICB9Ci0KLSAgICBTdHJpbmcgc2RwOwotICAg
IFNEUFByb2Nlc3Nvcjo6UmVzdWx0IHJlc3VsdCA9IG1fc2RwUHJvY2Vzc29yLT5nZW5lcmF0ZSgq
Y29uZmlndXJhdGlvblNuYXBzaG90LCBzZHApOwotICAgIGlmIChyZXN1bHQgIT0gU0RQUHJvY2Vz
c29yOjpSZXN1bHQ6OlN1Y2Nlc3MpIHsKLSAgICAgICAgY3JlYXRlT2ZmZXJGYWlsZWQoRXhjZXB0
aW9uIHsgT3BlcmF0aW9uRXJyb3IsICJTRFBQcm9jZXNzb3IgaW50ZXJuYWwgZXJyb3IiIH0pOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGNyZWF0ZU9mZmVyU3VjY2VlZGVkKFdURk1vdmUo
c2RwKSk7Ci19Ci0KLXZvaWQgTWVkaWFFbmRwb2ludFBlZXJDb25uZWN0aW9uOjpkb0NyZWF0ZUFu
c3dlcihSVENBbnN3ZXJPcHRpb25zJiYgb3B0aW9ucykKLXsKLSAgICBydW5UYXNrKFt0aGlzLCBw
cm90ZWN0ZWRPcHRpb25zID0gV1RGTW92ZShvcHRpb25zKV0oKSBtdXRhYmxlIHsKLSAgICAgICAg
Y3JlYXRlQW5zd2VyVGFzayhwcm90ZWN0ZWRPcHRpb25zKTsKLSAgICB9KTsKLX0KLQotdm9pZCBN
ZWRpYUVuZHBvaW50UGVlckNvbm5lY3Rpb246OmNyZWF0ZUFuc3dlclRhc2soY29uc3QgUlRDQW5z
d2VyT3B0aW9ucyYpCi17Ci0gICAgQVNTRVJUKCFtX2R0bHNGaW5nZXJwcmludC5pc0VtcHR5KCkp
OwotCi0gICAgaWYgKCFpbnRlcm5hbFJlbW90ZURlc2NyaXB0aW9uKCkpIHsKLSAgICAgICAgY3Jl
YXRlQW5zd2VyRmFpbGVkKEV4Y2VwdGlvbiB7IEludmFsaWRTdGF0ZUVycm9yLCAiTm8gcmVtb3Rl
IGRlc2NyaXB0aW9uIHNldCIgfSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBNZWRp
YUVuZHBvaW50U2Vzc2lvbkRlc2NyaXB0aW9uKiBsb2NhbERlc2NyaXB0aW9uID0gaW50ZXJuYWxM
b2NhbERlc2NyaXB0aW9uKCk7Ci0gICAgUmVmUHRyPE1lZGlhRW5kcG9pbnRTZXNzaW9uQ29uZmln
dXJhdGlvbj4gY29uZmlndXJhdGlvblNuYXBzaG90ID0gbG9jYWxEZXNjcmlwdGlvbiA/Ci0gICAg
ICAgIGxvY2FsRGVzY3JpcHRpb24tPmNvbmZpZ3VyYXRpb24oKS0+Y2xvbmUoKSA6IE1lZGlhRW5k
cG9pbnRTZXNzaW9uQ29uZmlndXJhdGlvbjo6Y3JlYXRlKCk7Ci0KLSAgICBjb25maWd1cmF0aW9u
U25hcHNob3QtPnNldEJ1bmRsZVBvbGljeShtX3BlZXJDb25uZWN0aW9uLmdldENvbmZpZ3VyYXRp
b24oKS5idW5kbGVQb2xpY3kpOwotICAgIGNvbmZpZ3VyYXRpb25TbmFwc2hvdC0+c2V0U2Vzc2lv
blZlcnNpb24obV9zZHBBbnN3ZXJTZXNzaW9uVmVyc2lvbisrKTsKLQotICAgIGF1dG8gdHJhbnNj
ZWl2ZXJzID0gUnRwVHJhbnNjZWl2ZXJWZWN0b3IobV9wZWVyQ29ubmVjdGlvbi5nZXRUcmFuc2Nl
aXZlcnMoKSk7Ci0gICAgYXV0byYgcmVtb3RlTWVkaWFEZXNjcmlwdGlvbnMgPSBpbnRlcm5hbFJl
bW90ZURlc2NyaXB0aW9uKCktPmNvbmZpZ3VyYXRpb24oKS0+bWVkaWFEZXNjcmlwdGlvbnMoKTsK
LQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCByZW1vdGVNZWRpYURlc2NyaXB0aW9ucy5z
aXplKCk7ICsraSkgewotICAgICAgICBhdXRvJiByZW1vdGVNZWRpYURlc2NyaXB0aW9uID0gcmVt
b3RlTWVkaWFEZXNjcmlwdGlvbnNbaV07Ci0KLSAgICAgICAgYXV0byogdHJhbnNjZWl2ZXIgPSBt
YXRjaFRyYW5zY2VpdmVyQnlNaWQodHJhbnNjZWl2ZXJzLCByZW1vdGVNZWRpYURlc2NyaXB0aW9u
Lm1pZCk7Ci0gICAgICAgIGlmICghdHJhbnNjZWl2ZXIpIHsKLSAgICAgICAgICAgIExPR19FUlJP
UigiQ291bGQgbm90IGZpbmQgYSBtYXRjaGluZyB0cmFuc2NlaXZlciBmb3IgcmVtb3RlIGRlc2Ny
aXB0aW9uIHdoaWxlIGNyZWF0aW5nIGFuc3dlciIpOwotICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgIH0KLQotICAgICAgICBpZiAoaSA+PSBjb25maWd1cmF0aW9uU25hcHNob3QtPm1lZGlh
RGVzY3JpcHRpb25zKCkuc2l6ZSgpKSB7Ci0gICAgICAgICAgICBQZWVyTWVkaWFEZXNjcmlwdGlv
biBuZXdNZWRpYURlc2NyaXB0aW9uOwotCi0gICAgICAgICAgICBhdXRvJiBzZW5kZXIgPSB0cmFu
c2NlaXZlci0+c2VuZGVyKCk7Ci0gICAgICAgICAgICBpZiAoc2VuZGVyLnRyYWNrKCkpIHsKLSAg
ICAgICAgICAgICAgICBpZiAoc2VuZGVyLm1lZGlhU3RyZWFtSWRzKCkuc2l6ZSgpKQotICAgICAg
ICAgICAgICAgICAgICBuZXdNZWRpYURlc2NyaXB0aW9uLm1lZGlhU3RyZWFtSWQgPSBzZW5kZXIu
bWVkaWFTdHJlYW1JZHMoKVswXTsKLSAgICAgICAgICAgICAgICBuZXdNZWRpYURlc2NyaXB0aW9u
Lm1lZGlhU3RyZWFtVHJhY2tJZCA9IHNlbmRlci50cmFja0lkKCk7Ci0gICAgICAgICAgICAgICAg
bmV3TWVkaWFEZXNjcmlwdGlvbi5hZGRTc3JjKGNyeXB0b2dyYXBoaWNhbGx5UmFuZG9tTnVtYmVy
KCkpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBuZXdNZWRpYURlc2NyaXB0aW9uLm1v
ZGUgPSB0cmFuc2NlaXZlci0+ZGlyZWN0aW9uU3RyaW5nKCk7Ci0gICAgICAgICAgICBuZXdNZWRp
YURlc2NyaXB0aW9uLnR5cGUgPSByZW1vdGVNZWRpYURlc2NyaXB0aW9uLnR5cGU7Ci0gICAgICAg
ICAgICBuZXdNZWRpYURlc2NyaXB0aW9uLm1pZCA9IHJlbW90ZU1lZGlhRGVzY3JpcHRpb24ubWlk
OwotICAgICAgICAgICAgbmV3TWVkaWFEZXNjcmlwdGlvbi5kdGxzU2V0dXAgPSByZW1vdGVNZWRp
YURlc2NyaXB0aW9uLmR0bHNTZXR1cCA9PSAiYWN0aXZlIiA/ICJwYXNzaXZlIiA6ICJhY3RpdmUi
OwotICAgICAgICAgICAgbmV3TWVkaWFEZXNjcmlwdGlvbi5kdGxzRmluZ2VycHJpbnRIYXNoRnVu
Y3Rpb24gPSBtX2R0bHNGaW5nZXJwcmludEZ1bmN0aW9uOwotICAgICAgICAgICAgbmV3TWVkaWFE
ZXNjcmlwdGlvbi5kdGxzRmluZ2VycHJpbnQgPSBtX2R0bHNGaW5nZXJwcmludDsKLSAgICAgICAg
ICAgIG5ld01lZGlhRGVzY3JpcHRpb24uY25hbWUgPSBtX2NuYW1lOwotICAgICAgICAgICAgbmV3
TWVkaWFEZXNjcmlwdGlvbi5pY2VVZnJhZyA9IG1faWNlVWZyYWc7Ci0gICAgICAgICAgICBuZXdN
ZWRpYURlc2NyaXB0aW9uLmljZVBhc3N3b3JkID0gbV9pY2VQYXNzd29yZDsKLQotICAgICAgICAg
ICAgY29uZmlndXJhdGlvblNuYXBzaG90LT5hZGRNZWRpYURlc2NyaXB0aW9uKFdURk1vdmUobmV3
TWVkaWFEZXNjcmlwdGlvbikpOwotICAgICAgICB9Ci0KLSAgICAgICAgUGVlck1lZGlhRGVzY3Jp
cHRpb24mIGxvY2FsTWVkaWFEZXNjcmlwdGlvbiA9IGNvbmZpZ3VyYXRpb25TbmFwc2hvdC0+bWVk
aWFEZXNjcmlwdGlvbnMoKVtpXTsKLQotICAgICAgICBsb2NhbE1lZGlhRGVzY3JpcHRpb24ucGF5
bG9hZHMgPSByZW1vdGVNZWRpYURlc2NyaXB0aW9uLnBheWxvYWRzOwotICAgICAgICBsb2NhbE1l
ZGlhRGVzY3JpcHRpb24ucnRjcE11eCA9IHJlbW90ZU1lZGlhRGVzY3JpcHRpb24ucnRjcE11eDsK
LQotICAgICAgICBpZiAoIWxvY2FsTWVkaWFEZXNjcmlwdGlvbi5zc3Jjcy5zaXplKCkpCi0gICAg
ICAgICAgICBsb2NhbE1lZGlhRGVzY3JpcHRpb24uYWRkU3NyYyhjcnlwdG9ncmFwaGljYWxseVJh
bmRvbU51bWJlcigpKTsKLQotICAgICAgICBpZiAobG9jYWxNZWRpYURlc2NyaXB0aW9uLmR0bHNT
ZXR1cCA9PSAiYWN0cGFzcyIpCi0gICAgICAgICAgICBsb2NhbE1lZGlhRGVzY3JpcHRpb24uZHRs
c1NldHVwID0gInBhc3NpdmUiOwotCi0gICAgICAgIHRyYW5zY2VpdmVycy5yZW1vdmVGaXJzdCh0
cmFuc2NlaXZlcik7Ci0gICAgfQotCi0gICAgLy8gVW5hc3NvY2lhdGVkIChub24tc3RvcHBlZCkg
dHJhbnNjZWl2ZXJzIG5lZWQgdG8gYmUgbmVnb3RpYXRlZCBpbiBhIGZvbGxvdy11cCBvZmZlci4K
LSAgICBpZiAoaGFzVW5hc3NvY2lhdGVkVHJhbnNjZWl2ZXJzKHRyYW5zY2VpdmVycykpCi0gICAg
ICAgIG1hcmtBc05lZWRpbmdOZWdvdGlhdGlvbigpOwotCi0gICAgU3RyaW5nIHNkcDsKLSAgICBT
RFBQcm9jZXNzb3I6OlJlc3VsdCByZXN1bHQgPSBtX3NkcFByb2Nlc3Nvci0+Z2VuZXJhdGUoKmNv
bmZpZ3VyYXRpb25TbmFwc2hvdCwgc2RwKTsKLSAgICBpZiAocmVzdWx0ICE9IFNEUFByb2Nlc3Nv
cjo6UmVzdWx0OjpTdWNjZXNzKSB7Ci0gICAgICAgIGNyZWF0ZUFuc3dlckZhaWxlZChFeGNlcHRp
b24geyBPcGVyYXRpb25FcnJvciwgIlNEUFByb2Nlc3NvciBpbnRlcm5hbCBlcnJvciIgfSk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgY3JlYXRlQW5zd2VyU3VjY2VlZGVkKFdURk1vdmUo
c2RwKSk7Ci19Ci0KLXN0YXRpYyBSZWFsdGltZU1lZGlhU291cmNlTWFwIGNyZWF0ZVNvdXJjZU1h
cChjb25zdCBNZWRpYURlc2NyaXB0aW9uVmVjdG9yJiByZW1vdGVNZWRpYURlc2NyaXB0aW9ucywg
dW5zaWduZWQgbG9jYWxNZWRpYURlc2NyaXB0aW9uQ291bnQsIGNvbnN0IFJ0cFRyYW5zY2VpdmVy
VmVjdG9yJiB0cmFuc2NlaXZlcnMpCi17Ci0gICAgUmVhbHRpbWVNZWRpYVNvdXJjZU1hcCBzb3Vy
Y2VNYXA7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcmVtb3RlTWVkaWFEZXNjcmlw
dGlvbnMuc2l6ZSgpICYmIGkgPCBsb2NhbE1lZGlhRGVzY3JpcHRpb25Db3VudDsgKytpKSB7Ci0g
ICAgICAgIGF1dG8mIHJlbW90ZU1lZGlhRGVzY3JpcHRpb24gPSByZW1vdGVNZWRpYURlc2NyaXB0
aW9uc1tpXTsKLSAgICAgICAgaWYgKHJlbW90ZU1lZGlhRGVzY3JpcHRpb24udHlwZSAhPSAiYXVk
aW8iICYmIHJlbW90ZU1lZGlhRGVzY3JpcHRpb24udHlwZSAhPSAidmlkZW8iKQotICAgICAgICAg
ICAgY29udGludWU7Ci0KLSAgICAgICAgUlRDUnRwVHJhbnNjZWl2ZXIqIHRyYW5zY2VpdmVyID0g
bWF0Y2hUcmFuc2NlaXZlckJ5TWlkKHRyYW5zY2VpdmVycywgcmVtb3RlTWVkaWFEZXNjcmlwdGlv
bi5taWQpOwotICAgICAgICBpZiAodHJhbnNjZWl2ZXIpIHsKLSAgICAgICAgICAgIGlmICh0cmFu
c2NlaXZlci0+aGFzU2VuZGluZ0RpcmVjdGlvbigpICYmIHRyYW5zY2VpdmVyLT5zZW5kZXIoKS50
cmFjaygpKQotICAgICAgICAgICAgICAgIHNvdXJjZU1hcC5zZXQodHJhbnNjZWl2ZXItPm1pZCgp
LCAmdHJhbnNjZWl2ZXItPnNlbmRlcigpLnRyYWNrKCktPnNvdXJjZSgpKTsKLSAgICAgICAgfQot
ICAgIH0KLQotICAgIHJldHVybiBzb3VyY2VNYXA7Ci19Ci0KLXZvaWQgTWVkaWFFbmRwb2ludFBl
ZXJDb25uZWN0aW9uOjpkb1NldExvY2FsRGVzY3JpcHRpb24oUlRDU2Vzc2lvbkRlc2NyaXB0aW9u
JiBkZXNjcmlwdGlvbikKLXsKLSAgICBydW5UYXNrKFt0aGlzLCBwcm90ZWN0ZWREZXNjcmlwdGlv
biA9IFJlZlB0cjxSVENTZXNzaW9uRGVzY3JpcHRpb24+KCZkZXNjcmlwdGlvbildKCkgbXV0YWJs
ZSB7Ci0gICAgICAgIHNldExvY2FsRGVzY3JpcHRpb25UYXNrKFdURk1vdmUocHJvdGVjdGVkRGVz
Y3JpcHRpb24pKTsKLSAgICB9KTsKLX0KLQotdm9pZCBNZWRpYUVuZHBvaW50UGVlckNvbm5lY3Rp
b246OnNldExvY2FsRGVzY3JpcHRpb25UYXNrKFJlZlB0cjxSVENTZXNzaW9uRGVzY3JpcHRpb24+
JiYgZGVzY3JpcHRpb24pCi17Ci0gICAgaWYgKG1fcGVlckNvbm5lY3Rpb24uaXNDbG9zZWQoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byByZXN1bHQgPSBNZWRpYUVuZHBvaW50U2Vzc2lv
bkRlc2NyaXB0aW9uOjpjcmVhdGUoV1RGTW92ZShkZXNjcmlwdGlvbiksICptX3NkcFByb2Nlc3Nv
cik7Ci0gICAgaWYgKHJlc3VsdC5oYXNFeGNlcHRpb24oKSkgewotICAgICAgICBzZXRMb2NhbERl
c2NyaXB0aW9uRmFpbGVkKHJlc3VsdC5yZWxlYXNlRXhjZXB0aW9uKCkpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotICAgIGF1dG8gbmV3RGVzY3JpcHRpb24gPSByZXN1bHQucmVsZWFzZVJldHVy
blZhbHVlKCk7Ci0KLSAgICBjb25zdCBSdHBUcmFuc2NlaXZlclZlY3RvciYgdHJhbnNjZWl2ZXJz
ID0gbV9wZWVyQ29ubmVjdGlvbi5nZXRUcmFuc2NlaXZlcnMoKTsKLSAgICBjb25zdCBNZWRpYURl
c2NyaXB0aW9uVmVjdG9yJiBtZWRpYURlc2NyaXB0aW9ucyA9IG5ld0Rlc2NyaXB0aW9uLT5jb25m
aWd1cmF0aW9uKCktPm1lZGlhRGVzY3JpcHRpb25zKCk7Ci0gICAgTWVkaWFFbmRwb2ludFNlc3Np
b25EZXNjcmlwdGlvbiogbG9jYWxEZXNjcmlwdGlvbiA9IGludGVybmFsTG9jYWxEZXNjcmlwdGlv
bigpOwotICAgIHVuc2lnbmVkIHByZXZpb3VzTnVtYmVyT2ZNZWRpYURlc2NyaXB0aW9ucyA9IGxv
Y2FsRGVzY3JpcHRpb24gPyBsb2NhbERlc2NyaXB0aW9uLT5jb25maWd1cmF0aW9uKCktPm1lZGlh
RGVzY3JpcHRpb25zKCkuc2l6ZSgpIDogMDsKLSAgICBib29sIGhhc05ld01lZGlhRGVzY3JpcHRp
b25zID0gbWVkaWFEZXNjcmlwdGlvbnMuc2l6ZSgpID4gcHJldmlvdXNOdW1iZXJPZk1lZGlhRGVz
Y3JpcHRpb25zOwotICAgIGJvb2wgaXNJbml0aWF0b3IgPSBuZXdEZXNjcmlwdGlvbi0+dHlwZSgp
ID09IFJUQ1NkcFR5cGU6Ok9mZmVyOwotCi0gICAgaWYgKGhhc05ld01lZGlhRGVzY3JpcHRpb25z
KSB7Ci0gICAgICAgIE1lZGlhRW5kcG9pbnQ6OlVwZGF0ZVJlc3VsdCByZXN1bHQgPSBtX21lZGlh
RW5kcG9pbnQtPnVwZGF0ZVJlY2VpdmVDb25maWd1cmF0aW9uKG5ld0Rlc2NyaXB0aW9uLT5jb25m
aWd1cmF0aW9uKCksIGlzSW5pdGlhdG9yKTsKLQotICAgICAgICBpZiAocmVzdWx0ID09IE1lZGlh
RW5kcG9pbnQ6OlVwZGF0ZVJlc3VsdDo6U3VjY2Vzc1dpdGhJY2VSZXN0YXJ0KSB7Ci0gICAgICAg
ICAgICBpZiAobV9wZWVyQ29ubmVjdGlvbi5pY2VHYXRoZXJpbmdTdGF0ZSgpICE9IFJUQ0ljZUdh
dGhlcmluZ1N0YXRlOjpHYXRoZXJpbmcpCi0gICAgICAgICAgICAgICAgbV9wZWVyQ29ubmVjdGlv
bi51cGRhdGVJY2VHYXRoZXJpbmdTdGF0ZShSVENJY2VHYXRoZXJpbmdTdGF0ZTo6R2F0aGVyaW5n
KTsKLQotICAgICAgICAgICAgaWYgKG1fcGVlckNvbm5lY3Rpb24uaWNlQ29ubmVjdGlvblN0YXRl
KCkgIT0gUlRDSWNlQ29ubmVjdGlvblN0YXRlOjpDb21wbGV0ZWQpCi0gICAgICAgICAgICAgICAg
bV9wZWVyQ29ubmVjdGlvbi51cGRhdGVJY2VDb25uZWN0aW9uU3RhdGUoUlRDSWNlQ29ubmVjdGlv
blN0YXRlOjpDb25uZWN0ZWQpOwotCi0gICAgICAgICAgICBMT0dfRVJST1IoIklDRSByZXN0YXJ0
IGlzIG5vdCBpbXBsZW1lbnRlZCIpOwotICAgICAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKLQot
ICAgICAgICB9IGVsc2UgaWYgKHJlc3VsdCA9PSBNZWRpYUVuZHBvaW50OjpVcGRhdGVSZXN1bHQ6
OkZhaWxlZCkgewotICAgICAgICAgICAgc2V0TG9jYWxEZXNjcmlwdGlvbkZhaWxlZChFeGNlcHRp
b24geyBPcGVyYXRpb25FcnJvciwgIlVuYWJsZSB0byBhcHBseSBzZXNzaW9uIGRlc2NyaXB0aW9u
IiB9KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIEFzc29j
aWF0ZSBtZWRpYSBkZXNjcmlwdGlvbnMgd2l0aCB0cmFuc2NlaXZlcnMgKHNldCBwcm92aXNpb25h
bCBtaWQgdG8gJ2ZpbmFsJyBtaWQpLgotICAgICAgICBmb3IgKGF1dG8mIG1lZGlhRGVzY3JpcHRp
b24gOiBtZWRpYURlc2NyaXB0aW9ucykgewotICAgICAgICAgICAgUlRDUnRwVHJhbnNjZWl2ZXIq
IHRyYW5zY2VpdmVyID0gbWF0Y2hUcmFuc2NlaXZlcih0cmFuc2NlaXZlcnMsIFsmbWVkaWFEZXNj
cmlwdGlvbl0gKFJUQ1J0cFRyYW5zY2VpdmVyJiBjdXJyZW50KSB7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIGN1cnJlbnQucHJvdmlzaW9uYWxNaWQoKSA9PSBtZWRpYURlc2NyaXB0aW9uLm1pZDsK
LSAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgaWYgKHRyYW5zY2VpdmVyKQotICAgICAgICAg
ICAgICAgIHRyYW5zY2VpdmVyLT5zZXRNaWQodHJhbnNjZWl2ZXItPnByb3Zpc2lvbmFsTWlkKCkp
OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGludGVybmFsUmVtb3RlRGVzY3JpcHRpb24o
KSkgewotICAgICAgICBNZWRpYUVuZHBvaW50U2Vzc2lvbkNvbmZpZ3VyYXRpb24qIHJlbW90ZUNv
bmZpZ3VyYXRpb24gPSBpbnRlcm5hbFJlbW90ZURlc2NyaXB0aW9uKCktPmNvbmZpZ3VyYXRpb24o
KTsKLSAgICAgICAgUmVhbHRpbWVNZWRpYVNvdXJjZU1hcCBzZW5kU291cmNlTWFwID0gY3JlYXRl
U291cmNlTWFwKHJlbW90ZUNvbmZpZ3VyYXRpb24tPm1lZGlhRGVzY3JpcHRpb25zKCksIG1lZGlh
RGVzY3JpcHRpb25zLnNpemUoKSwgdHJhbnNjZWl2ZXJzKTsKLQotICAgICAgICBpZiAobV9tZWRp
YUVuZHBvaW50LT51cGRhdGVTZW5kQ29uZmlndXJhdGlvbihyZW1vdGVDb25maWd1cmF0aW9uLCBz
ZW5kU291cmNlTWFwLCBpc0luaXRpYXRvcikgPT0gTWVkaWFFbmRwb2ludDo6VXBkYXRlUmVzdWx0
OjpGYWlsZWQpIHsKLSAgICAgICAgICAgIHNldExvY2FsRGVzY3JpcHRpb25GYWlsZWQoRXhjZXB0
aW9uIHsgT3BlcmF0aW9uRXJyb3IsICJVbmFibGUgdG8gYXBwbHkgc2Vzc2lvbiBkZXNjcmlwdGlv
biIgfSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAo
IWhhc1VuYXNzb2NpYXRlZFRyYW5zY2VpdmVycyh0cmFuc2NlaXZlcnMpKQotICAgICAgICBjbGVh
ck5lZ290aWF0aW9uTmVlZGVkU3RhdGUoKTsKLQotICAgIFJUQ1NpZ25hbGluZ1N0YXRlIG5ld1Np
Z25hbGluZ1N0YXRlOwotCi0gICAgLy8gVXBkYXRlIHN0YXRlIGFuZCBsb2NhbCBkZXNjcmlwdGlv
bnMgYWNjb3JkaW5nIHRvIHNldExvY2FsL1JlbW90ZURlc2NyaXB0aW9uIHByb2Nlc3NpbmcgbW9k
ZWwKLSAgICBzd2l0Y2ggKG5ld0Rlc2NyaXB0aW9uLT50eXBlKCkpIHsKLSAgICBjYXNlIFJUQ1Nk
cFR5cGU6Ok9mZmVyOgotICAgICAgICBtX3BlbmRpbmdMb2NhbERlc2NyaXB0aW9uID0gV1RGTW92
ZShuZXdEZXNjcmlwdGlvbik7Ci0gICAgICAgIG5ld1NpZ25hbGluZ1N0YXRlID0gUlRDU2lnbmFs
aW5nU3RhdGU6OkhhdmVMb2NhbE9mZmVyOwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgUlRD
U2RwVHlwZTo6QW5zd2VyOgotICAgICAgICBtX2N1cnJlbnRMb2NhbERlc2NyaXB0aW9uID0gV1RG
TW92ZShuZXdEZXNjcmlwdGlvbik7Ci0gICAgICAgIG1fY3VycmVudFJlbW90ZURlc2NyaXB0aW9u
ID0gbV9wZW5kaW5nUmVtb3RlRGVzY3JpcHRpb247Ci0gICAgICAgIG1fcGVuZGluZ0xvY2FsRGVz
Y3JpcHRpb24gPSBudWxscHRyOwotICAgICAgICBtX3BlbmRpbmdSZW1vdGVEZXNjcmlwdGlvbiA9
IG51bGxwdHI7Ci0gICAgICAgIG5ld1NpZ25hbGluZ1N0YXRlID0gUlRDU2lnbmFsaW5nU3RhdGU6
OlN0YWJsZTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIFJUQ1NkcFR5cGU6OlJvbGxiYWNr
OgotICAgICAgICBtX3BlbmRpbmdMb2NhbERlc2NyaXB0aW9uID0gbnVsbHB0cjsKLSAgICAgICAg
bmV3U2lnbmFsaW5nU3RhdGUgPSBSVENTaWduYWxpbmdTdGF0ZTo6U3RhYmxlOwotICAgICAgICBi
cmVhazsKLQotICAgIGNhc2UgUlRDU2RwVHlwZTo6UHJhbnN3ZXI6Ci0gICAgICAgIG1fcGVuZGlu
Z0xvY2FsRGVzY3JpcHRpb24gPSBXVEZNb3ZlKG5ld0Rlc2NyaXB0aW9uKTsKLSAgICAgICAgbmV3
U2lnbmFsaW5nU3RhdGUgPSBSVENTaWduYWxpbmdTdGF0ZTo6SGF2ZUxvY2FsUHJhbnN3ZXI7Ci0g
ICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIHVwZGF0ZVNpZ25hbGluZ1N0YXRlKG5ld1NpZ25h
bGluZ1N0YXRlKTsKLQotICAgIGlmIChtX3BlZXJDb25uZWN0aW9uLmljZUdhdGhlcmluZ1N0YXRl
KCkgPT0gUlRDSWNlR2F0aGVyaW5nU3RhdGU6Ok5ldyAmJiBtZWRpYURlc2NyaXB0aW9ucy5zaXpl
KCkpCi0gICAgICAgIG1fcGVlckNvbm5lY3Rpb24udXBkYXRlSWNlR2F0aGVyaW5nU3RhdGUoUlRD
SWNlR2F0aGVyaW5nU3RhdGU6OkdhdGhlcmluZyk7Ci0KLSAgICBtYXJrQXNOZWVkaW5nTmVnb3Rp
YXRpb24oKTsKLSAgICBzZXRMb2NhbERlc2NyaXB0aW9uU3VjY2VlZGVkKCk7Ci19Ci0KLVJlZlB0
cjxSVENTZXNzaW9uRGVzY3JpcHRpb24+IE1lZGlhRW5kcG9pbnRQZWVyQ29ubmVjdGlvbjo6bG9j
YWxEZXNjcmlwdGlvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGNyZWF0ZVJUQ1Nlc3Npb25EZXNj
cmlwdGlvbihpbnRlcm5hbExvY2FsRGVzY3JpcHRpb24oKSk7Ci19Ci0KLVJlZlB0cjxSVENTZXNz
aW9uRGVzY3JpcHRpb24+IE1lZGlhRW5kcG9pbnRQZWVyQ29ubmVjdGlvbjo6Y3VycmVudExvY2Fs
RGVzY3JpcHRpb24oKSBjb25zdAotewotICAgIHJldHVybiBjcmVhdGVSVENTZXNzaW9uRGVzY3Jp
cHRpb24obV9jdXJyZW50TG9jYWxEZXNjcmlwdGlvbi5nZXQoKSk7Ci19Ci0KLVJlZlB0cjxSVENT
ZXNzaW9uRGVzY3JpcHRpb24+IE1lZGlhRW5kcG9pbnRQZWVyQ29ubmVjdGlvbjo6cGVuZGluZ0xv
Y2FsRGVzY3JpcHRpb24oKSBjb25zdAotewotICAgIHJldHVybiBjcmVhdGVSVENTZXNzaW9uRGVz
Y3JpcHRpb24obV9wZW5kaW5nTG9jYWxEZXNjcmlwdGlvbi5nZXQoKSk7Ci19Ci0KLXZvaWQgTWVk
aWFFbmRwb2ludFBlZXJDb25uZWN0aW9uOjpkb1NldFJlbW90ZURlc2NyaXB0aW9uKFJUQ1Nlc3Np
b25EZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24pCi17Ci0gICAgcnVuVGFzayhbdGhpcywgcHJvdGVj
dGVkRGVzY3JpcHRpb24gPSBSZWZQdHI8UlRDU2Vzc2lvbkRlc2NyaXB0aW9uPigmZGVzY3JpcHRp
b24pXSgpIG11dGFibGUgewotICAgICAgICBzZXRSZW1vdGVEZXNjcmlwdGlvblRhc2soV1RGTW92
ZShwcm90ZWN0ZWREZXNjcmlwdGlvbikpOwotICAgIH0pOwotfQotCi12b2lkIE1lZGlhRW5kcG9p
bnRQZWVyQ29ubmVjdGlvbjo6c2V0UmVtb3RlRGVzY3JpcHRpb25UYXNrKFJlZlB0cjxSVENTZXNz
aW9uRGVzY3JpcHRpb24+JiYgZGVzY3JpcHRpb24pCi17Ci0gICAgYXV0byByZXN1bHQgPSBNZWRp
YUVuZHBvaW50U2Vzc2lvbkRlc2NyaXB0aW9uOjpjcmVhdGUoV1RGTW92ZShkZXNjcmlwdGlvbiks
ICptX3NkcFByb2Nlc3Nvcik7Ci0gICAgaWYgKHJlc3VsdC5oYXNFeGNlcHRpb24oKSkgewotICAg
ICAgICBzZXRSZW1vdGVEZXNjcmlwdGlvbkZhaWxlZChyZXN1bHQucmVsZWFzZUV4Y2VwdGlvbigp
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBhdXRvIG5ld0Rlc2NyaXB0aW9uID0gcmVz
dWx0LnJlbGVhc2VSZXR1cm5WYWx1ZSgpOwotCi0gICAgYXV0byYgbWVkaWFEZXNjcmlwdGlvbnMg
PSBuZXdEZXNjcmlwdGlvbi0+Y29uZmlndXJhdGlvbigpLT5tZWRpYURlc2NyaXB0aW9ucygpOwot
ICAgIGZvciAoYXV0byYgbWVkaWFEZXNjcmlwdGlvbiA6IG1lZGlhRGVzY3JpcHRpb25zKSB7Ci0g
ICAgICAgIGlmIChtZWRpYURlc2NyaXB0aW9uLnR5cGUgIT0gImF1ZGlvIiAmJiBtZWRpYURlc2Ny
aXB0aW9uLnR5cGUgIT0gInZpZGVvIikKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAg
IG1lZGlhRGVzY3JpcHRpb24ucGF5bG9hZHMgPSBtX21lZGlhRW5kcG9pbnQtPmZpbHRlclBheWxv
YWRzKG1lZGlhRGVzY3JpcHRpb24ucGF5bG9hZHMsIG1lZGlhRGVzY3JpcHRpb24udHlwZSA9PSAi
YXVkaW8iID8gbV9kZWZhdWx0QXVkaW9QYXlsb2FkcyA6IG1fZGVmYXVsdFZpZGVvUGF5bG9hZHMp
OwotICAgIH0KLQotICAgIGJvb2wgaXNJbml0aWF0b3IgPSBuZXdEZXNjcmlwdGlvbi0+dHlwZSgp
ID09IFJUQ1NkcFR5cGU6OkFuc3dlcjsKLSAgICBjb25zdCBSdHBUcmFuc2NlaXZlclZlY3RvciYg
dHJhbnNjZWl2ZXJzID0gbV9wZWVyQ29ubmVjdGlvbi5nZXRUcmFuc2NlaXZlcnMoKTsKLQotICAg
IFJlYWx0aW1lTWVkaWFTb3VyY2VNYXAgc2VuZFNvdXJjZU1hcDsKLSAgICBpZiAoaW50ZXJuYWxM
b2NhbERlc2NyaXB0aW9uKCkpCi0gICAgICAgIHNlbmRTb3VyY2VNYXAgPSBjcmVhdGVTb3VyY2VN
YXAobWVkaWFEZXNjcmlwdGlvbnMsIGludGVybmFsTG9jYWxEZXNjcmlwdGlvbigpLT5jb25maWd1
cmF0aW9uKCktPm1lZGlhRGVzY3JpcHRpb25zKCkuc2l6ZSgpLCB0cmFuc2NlaXZlcnMpOwotCi0g
ICAgaWYgKG1fbWVkaWFFbmRwb2ludC0+dXBkYXRlU2VuZENvbmZpZ3VyYXRpb24obmV3RGVzY3Jp
cHRpb24tPmNvbmZpZ3VyYXRpb24oKSwgc2VuZFNvdXJjZU1hcCwgaXNJbml0aWF0b3IpID09IE1l
ZGlhRW5kcG9pbnQ6OlVwZGF0ZVJlc3VsdDo6RmFpbGVkKSB7Ci0gICAgICAgIHNldFJlbW90ZURl
c2NyaXB0aW9uRmFpbGVkKEV4Y2VwdGlvbiB7IE9wZXJhdGlvbkVycm9yLCAiVW5hYmxlIHRvIGFw
cGx5IHNlc3Npb24gZGVzY3JpcHRpb24iIH0pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgLy8gT25lIGxlZ2FjeSBNZWRpYVN0cmVhbUV2ZW50IHdpbGwgYmUgZmlyZWQgZm9yIGV2ZXJ5
IG5ldyBNZWRpYVN0cmVhbSBjcmVhdGVkIGFzIHRoaXMgcmVtb3RlIGRlc2NyaXB0aW9uIGlzIHNl
dC4KLSAgICBWZWN0b3I8UmVmUHRyPE1lZGlhU3RyZWFtRXZlbnQ+PiBsZWdhY3lNZWRpYVN0cmVh
bUV2ZW50czsKLQotICAgIGZvciAoYXV0byYgbWVkaWFEZXNjcmlwdGlvbiA6IG1lZGlhRGVzY3Jp
cHRpb25zKSB7Ci0gICAgICAgIFJUQ1J0cFRyYW5zY2VpdmVyKiB0cmFuc2NlaXZlciA9IG1hdGNo
VHJhbnNjZWl2ZXJCeU1pZCh0cmFuc2NlaXZlcnMsIG1lZGlhRGVzY3JpcHRpb24ubWlkKTsKLSAg
ICAgICAgaWYgKCF0cmFuc2NlaXZlcikgewotICAgICAgICAgICAgYm9vbCByZWNlaXZlT25seUZs
YWcgPSBmYWxzZTsKLQotICAgICAgICAgICAgaWYgKG1lZGlhRGVzY3JpcHRpb24ubW9kZSA9PSAi
c2VuZHJlY3YiIHx8IG1lZGlhRGVzY3JpcHRpb24ubW9kZSA9PSAicmVjdm9ubHkiKSB7Ci0gICAg
ICAgICAgICAgICAgLy8gVHJ5IHRvIG1hdGNoIGFuIGV4aXN0aW5nIHRyYW5zY2VpdmVyLgotICAg
ICAgICAgICAgICAgIHRyYW5zY2VpdmVyID0gbWF0Y2hUcmFuc2NlaXZlcih0cmFuc2NlaXZlcnMs
IFsmbWVkaWFEZXNjcmlwdGlvbl0gKFJUQ1J0cFRyYW5zY2VpdmVyJiBjdXJyZW50KSB7Ci0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiAhY3VycmVudC5zdG9wcGVkKCkgJiYgY3VycmVudC5taWQo
KS5pc051bGwoKSAmJiBjdXJyZW50LnNlbmRlcigpLnRyYWNrS2luZCgpID09IG1lZGlhRGVzY3Jp
cHRpb24udHlwZTsKLSAgICAgICAgICAgICAgICB9KTsKLQotICAgICAgICAgICAgICAgIGlmICh0
cmFuc2NlaXZlcikgewotICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIHRyYW5zY2VpdmVyIHdh
cyBjcmVhdGVkIGxvY2FsbHkgd2l0aCBhIHByb3Zpc2lvbmFsIG1pZC4gSXRzIHJlYWwgbWlkIHdp
bGwgbm93IGJlIHNldCBieSB0aGUgcmVtb3RlCi0gICAgICAgICAgICAgICAgICAgIC8vIGRlc2Ny
aXB0aW9uIHNvIHdlIG5lZWQgdG8gdXBkYXRlIHRoZSBtaWQgb2YgdGhlIHRyYW5zY2VpdmVyJ3Mg
bXV0ZWQgc291cmNlIHRvIHByZXNlcnZlIHRoZSBhc3NvY2lhdGlvbi4KLSAgICAgICAgICAgICAg
ICAgICAgdHJhbnNjZWl2ZXItPnNldE1pZChtZWRpYURlc2NyaXB0aW9uLm1pZCk7Ci0gICAgICAg
ICAgICAgICAgICAgIG1fbWVkaWFFbmRwb2ludC0+cmVwbGFjZU11dGVkUmVtb3RlU291cmNlTWlk
KHRyYW5zY2VpdmVyLT5wcm92aXNpb25hbE1pZCgpLCBtZWRpYURlc2NyaXB0aW9uLm1pZCk7Ci0g
ICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHJlY2VpdmVPbmx5Rmxh
ZyA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICghdHJhbnNjZWl2ZXIp
IHsKLSAgICAgICAgICAgICAgICBhdXRvIHNlbmRlciA9IFJUQ1J0cFNlbmRlcjo6Y3JlYXRlKFN0
cmluZyhtZWRpYURlc2NyaXB0aW9uLnR5cGUpLCBWZWN0b3I8U3RyaW5nPigpLCBtX3BlZXJDb25u
ZWN0aW9uLnNlbmRlckJhY2tlbmQoKSk7Ci0gICAgICAgICAgICAgICAgYXV0byByZWNlaXZlciA9
IGNyZWF0ZVJlY2VpdmVyKG1lZGlhRGVzY3JpcHRpb24ubWlkLCBtZWRpYURlc2NyaXB0aW9uLnR5
cGUsIG1lZGlhRGVzY3JpcHRpb24ubWVkaWFTdHJlYW1UcmFja0lkKTsKLQotICAgICAgICAgICAg
ICAgIGF1dG8gbmV3VHJhbnNjZWl2ZXIgPSBSVENSdHBUcmFuc2NlaXZlcjo6Y3JlYXRlKFdURk1v
dmUoc2VuZGVyKSwgV1RGTW92ZShyZWNlaXZlcikpOwotICAgICAgICAgICAgICAgIG5ld1RyYW5z
Y2VpdmVyLT5zZXRNaWQobWVkaWFEZXNjcmlwdGlvbi5taWQpOwotICAgICAgICAgICAgICAgIGlm
IChyZWNlaXZlT25seUZsYWcpCi0gICAgICAgICAgICAgICAgICAgIG5ld1RyYW5zY2VpdmVyLT5k
aXNhYmxlU2VuZGluZ0RpcmVjdGlvbigpOwotCi0gICAgICAgICAgICAgICAgdHJhbnNjZWl2ZXIg
PSBuZXdUcmFuc2NlaXZlci5wdHIoKTsKLSAgICAgICAgICAgICAgICBtX3BlZXJDb25uZWN0aW9u
LmFkZFRyYW5zY2VpdmVyKFdURk1vdmUobmV3VHJhbnNjZWl2ZXIpKTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotCi0gICAgICAgIGlmIChtZWRpYURlc2NyaXB0aW9uLm1vZGUgPT0gInNlbmRy
ZWN2IiB8fCBtZWRpYURlc2NyaXB0aW9uLm1vZGUgPT0gInNlbmRvbmx5IikgewotICAgICAgICAg
ICAgYXV0byYgcmVjZWl2ZXIgPSB0cmFuc2NlaXZlci0+cmVjZWl2ZXIoKTsKLSAgICAgICAgICAg
IGlmIChyZWNlaXZlci5pc0Rpc3BhdGNoZWQoKSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsK
LSAgICAgICAgICAgIHJlY2VpdmVyLnNldERpc3BhdGNoZWQodHJ1ZSk7Ci0KLSAgICAgICAgICAg
IFZlY3RvcjxTdHJpbmc+IG1lZGlhU3RyZWFtSWRzOwotICAgICAgICAgICAgaWYgKCFtZWRpYURl
c2NyaXB0aW9uLm1lZGlhU3RyZWFtSWQuaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgIG1lZGlh
U3RyZWFtSWRzLmFwcGVuZChtZWRpYURlc2NyaXB0aW9uLm1lZGlhU3RyZWFtSWQpOwotCi0gICAg
ICAgICAgICAvLyBBIHJlbW90ZSB0cmFjayBjYW4gYmUgYXNzb2NpYXRlZCB3aXRoIDAuLiogTWVk
aWFTdHJlYW1zLiBXZSBjcmVhdGUgYSBuZXcgc3RyZWFtIGZvcgotICAgICAgICAgICAgLy8gYSB0
cmFjayBpbiBjYXNlIG9mIGFuIHVucmVjb2duaXplZCBzdHJlYW0gaWQsIG9yIGp1c3QgYWRkIHRo
ZSB0cmFjayBpZiB0aGUgc3RyZWFtCi0gICAgICAgICAgICAvLyBhbHJlYWR5IGV4aXN0cy4KLSAg
ICAgICAgICAgIEhhc2hNYXA8U3RyaW5nLCBSZWZQdHI8TWVkaWFTdHJlYW0+PiB0cmFja0V2ZW50
TWVkaWFTdHJlYW1zOwotICAgICAgICAgICAgZm9yIChhdXRvJiBpZCA6IG1lZGlhU3RyZWFtSWRz
KSB7Ci0gICAgICAgICAgICAgICAgaWYgKG1fcmVtb3RlU3RyZWFtTWFwLmNvbnRhaW5zKGlkKSkg
ewotICAgICAgICAgICAgICAgICAgICBSZWZQdHI8TWVkaWFTdHJlYW0+IHN0cmVhbSA9IG1fcmVt
b3RlU3RyZWFtTWFwLmdldChpZCk7Ci0gICAgICAgICAgICAgICAgICAgIHN0cmVhbS0+YWRkVHJh
Y2soKnJlY2VpdmVyLnRyYWNrKCkpOwotICAgICAgICAgICAgICAgICAgICB0cmFja0V2ZW50TWVk
aWFTdHJlYW1zLmFkZChpZCwgV1RGTW92ZShzdHJlYW0pKTsKLSAgICAgICAgICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgICAgICAgICBhdXRvIG5ld1N0cmVhbSA9IE1lZGlhU3RyZWFtOjpj
cmVhdGUoKm1fcGVlckNvbm5lY3Rpb24uc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCBNZWRpYVN0
cmVhbVRyYWNrVmVjdG9yKHsgcmVjZWl2ZXIudHJhY2soKSB9KSk7Ci0gICAgICAgICAgICAgICAg
ICAgIG1fcmVtb3RlU3RyZWFtTWFwLmFkZChpZCwgbmV3U3RyZWFtLmNvcHlSZWYoKSk7Ci0gICAg
ICAgICAgICAgICAgICAgIGxlZ2FjeU1lZGlhU3RyZWFtRXZlbnRzLmFwcGVuZChNZWRpYVN0cmVh
bUV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmFkZHN0cmVhbUV2ZW50LCBmYWxzZSwgZmFsc2Us
IG5ld1N0cmVhbS5jb3B5UmVmKCkpKTsKLSAgICAgICAgICAgICAgICAgICAgdHJhY2tFdmVudE1l
ZGlhU3RyZWFtcy5hZGQoaWQsIFdURk1vdmUobmV3U3RyZWFtKSk7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBWZWN0b3I8UmVmUHRyPE1lZGlhU3RyZWFt
Pj4gc3RyZWFtczsKLSAgICAgICAgICAgIGNvcHlWYWx1ZXNUb1ZlY3Rvcih0cmFja0V2ZW50TWVk
aWFTdHJlYW1zLCBzdHJlYW1zKTsKLQotICAgICAgICAgICAgbV9wZWVyQ29ubmVjdGlvbi5maXJl
RXZlbnQoUlRDVHJhY2tFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS50cmFja0V2ZW50LCBmYWxz
ZSwgZmFsc2UsCi0gICAgICAgICAgICAgICAgJnJlY2VpdmVyLCByZWNlaXZlci50cmFjaygpLCBX
VEZNb3ZlKHN0cmVhbXMpLCB0cmFuc2NlaXZlcikpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAg
Ly8gRmlyZSBsZWdhY3kgYWRkc3RyZWFtIGV2ZW50cy4KLSAgICBmb3IgKGF1dG8mIGV2ZW50IDog
bGVnYWN5TWVkaWFTdHJlYW1FdmVudHMpCi0gICAgICAgIG1fcGVlckNvbm5lY3Rpb24uZmlyZUV2
ZW50KCpldmVudCk7Ci0KLSAgICBSVENTaWduYWxpbmdTdGF0ZSBuZXdTaWduYWxpbmdTdGF0ZTsK
LQotICAgIC8vIFVwZGF0ZSBzdGF0ZSBhbmQgbG9jYWwgZGVzY3JpcHRpb25zIGFjY29yZGluZyB0
byBzZXRMb2NhbC9SZW1vdGVEZXNjcmlwdGlvbiBwcm9jZXNzaW5nIG1vZGVsCi0gICAgc3dpdGNo
IChuZXdEZXNjcmlwdGlvbi0+dHlwZSgpKSB7Ci0gICAgY2FzZSBSVENTZHBUeXBlOjpPZmZlcjoK
LSAgICAgICAgbV9wZW5kaW5nUmVtb3RlRGVzY3JpcHRpb24gPSBXVEZNb3ZlKG5ld0Rlc2NyaXB0
aW9uKTsKLSAgICAgICAgbmV3U2lnbmFsaW5nU3RhdGUgPSBSVENTaWduYWxpbmdTdGF0ZTo6SGF2
ZVJlbW90ZU9mZmVyOwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgUlRDU2RwVHlwZTo6QW5z
d2VyOgotICAgICAgICBtX2N1cnJlbnRSZW1vdGVEZXNjcmlwdGlvbiA9IFdURk1vdmUobmV3RGVz
Y3JpcHRpb24pOwotICAgICAgICBtX2N1cnJlbnRMb2NhbERlc2NyaXB0aW9uID0gbV9wZW5kaW5n
TG9jYWxEZXNjcmlwdGlvbjsKLSAgICAgICAgbV9wZW5kaW5nUmVtb3RlRGVzY3JpcHRpb24gPSBu
dWxscHRyOwotICAgICAgICBtX3BlbmRpbmdMb2NhbERlc2NyaXB0aW9uID0gbnVsbHB0cjsKLSAg
ICAgICAgbmV3U2lnbmFsaW5nU3RhdGUgPSBSVENTaWduYWxpbmdTdGF0ZTo6U3RhYmxlOwotICAg
ICAgICBicmVhazsKLQotICAgIGNhc2UgUlRDU2RwVHlwZTo6Um9sbGJhY2s6Ci0gICAgICAgIG1f
cGVuZGluZ1JlbW90ZURlc2NyaXB0aW9uID0gbnVsbHB0cjsKLSAgICAgICAgbmV3U2lnbmFsaW5n
U3RhdGUgPSBSVENTaWduYWxpbmdTdGF0ZTo6U3RhYmxlOwotICAgICAgICBicmVhazsKLQotICAg
IGNhc2UgUlRDU2RwVHlwZTo6UHJhbnN3ZXI6Ci0gICAgICAgIG1fcGVuZGluZ1JlbW90ZURlc2Ny
aXB0aW9uID0gV1RGTW92ZShuZXdEZXNjcmlwdGlvbik7Ci0gICAgICAgIG5ld1NpZ25hbGluZ1N0
YXRlID0gUlRDU2lnbmFsaW5nU3RhdGU6OkhhdmVSZW1vdGVQcmFuc3dlcjsKLSAgICAgICAgYnJl
YWs7Ci0gICAgfQotCi0gICAgdXBkYXRlU2lnbmFsaW5nU3RhdGUobmV3U2lnbmFsaW5nU3RhdGUp
OwotICAgIHNldFJlbW90ZURlc2NyaXB0aW9uU3VjY2VlZGVkKCk7Ci19Ci0KLVJlZlB0cjxSVENT
ZXNzaW9uRGVzY3JpcHRpb24+IE1lZGlhRW5kcG9pbnRQZWVyQ29ubmVjdGlvbjo6cmVtb3RlRGVz
Y3JpcHRpb24oKSBjb25zdAotewotICAgIHJldHVybiBjcmVhdGVSVENTZXNzaW9uRGVzY3JpcHRp
b24oaW50ZXJuYWxSZW1vdGVEZXNjcmlwdGlvbigpKTsKLX0KLQotUmVmUHRyPFJUQ1Nlc3Npb25E
ZXNjcmlwdGlvbj4gTWVkaWFFbmRwb2ludFBlZXJDb25uZWN0aW9uOjpjdXJyZW50UmVtb3RlRGVz
Y3JpcHRpb24oKSBjb25zdAotewotICAgIHJldHVybiBjcmVhdGVSVENTZXNzaW9uRGVzY3JpcHRp
b24obV9jdXJyZW50UmVtb3RlRGVzY3JpcHRpb24uZ2V0KCkpOwotfQotCi1SZWZQdHI8UlRDU2Vz
c2lvbkRlc2NyaXB0aW9uPiBNZWRpYUVuZHBvaW50UGVlckNvbm5lY3Rpb246OnBlbmRpbmdSZW1v
dGVEZXNjcmlwdGlvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGNyZWF0ZVJUQ1Nlc3Npb25EZXNj
cmlwdGlvbihtX3BlbmRpbmdSZW1vdGVEZXNjcmlwdGlvbi5nZXQoKSk7Ci19Ci0KLWJvb2wgTWVk
aWFFbmRwb2ludFBlZXJDb25uZWN0aW9uOjpzZXRDb25maWd1cmF0aW9uKE1lZGlhRW5kcG9pbnRD
b25maWd1cmF0aW9uJiYgY29uZmlndXJhdGlvbikKLXsKLSAgICBtX21lZGlhRW5kcG9pbnQtPnNl
dENvbmZpZ3VyYXRpb24oV1RGTW92ZShjb25maWd1cmF0aW9uKSk7Ci0gICAgcmV0dXJuIHRydWU7
Ci19Ci0KLXZvaWQgTWVkaWFFbmRwb2ludFBlZXJDb25uZWN0aW9uOjpkb0FkZEljZUNhbmRpZGF0
ZShSVENJY2VDYW5kaWRhdGUmIHJ0Y0NhbmRpZGF0ZSkKLXsKLSAgICBydW5UYXNrKFt0aGlzLCBw
cm90ZWN0ZWRDYW5kaWRhdGUgPSBSZWZQdHI8UlRDSWNlQ2FuZGlkYXRlPigmcnRjQ2FuZGlkYXRl
KV0oKSBtdXRhYmxlIHsKLSAgICAgICAgYWRkSWNlQ2FuZGlkYXRlVGFzaygqcHJvdGVjdGVkQ2Fu
ZGlkYXRlKTsKLSAgICB9KTsKLX0KLQotdm9pZCBNZWRpYUVuZHBvaW50UGVlckNvbm5lY3Rpb246
OmFkZEljZUNhbmRpZGF0ZVRhc2soUlRDSWNlQ2FuZGlkYXRlJiBydGNDYW5kaWRhdGUpCi17Ci0g
ICAgaWYgKCFpbnRlcm5hbFJlbW90ZURlc2NyaXB0aW9uKCkpIHsKLSAgICAgICAgYWRkSWNlQ2Fu
ZGlkYXRlRmFpbGVkKEV4Y2VwdGlvbiB7IEludmFsaWRTdGF0ZUVycm9yLCAiTm8gcmVtb3RlIGRl
c2NyaXB0aW9uIHNldCIgfSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBhdXRvJiBy
ZW1vdGVNZWRpYURlc2NyaXB0aW9ucyA9IGludGVybmFsUmVtb3RlRGVzY3JpcHRpb24oKS0+Y29u
ZmlndXJhdGlvbigpLT5tZWRpYURlc2NyaXB0aW9ucygpOwotICAgIFBlZXJNZWRpYURlc2NyaXB0
aW9uKiB0YXJnZXRNZWRpYURlc2NyaXB0aW9uID0gbnVsbHB0cjsKLQotICAgIC8vIFdoZW4gaWRl
bnRpZnlpbmcgdGhlIHRhcmdldCBtZWRpYSBkZXNjcmlwdGlvbiwgc2RwTWlkIHRha2VzIHByZWNl
ZGVuY2Ugb3ZlciBzZHBNTGluZUluZGV4Ci0gICAgLy8gaWYgYm90aCBhcmUgcHJlc2VudC4KLSAg
ICBpZiAoIXJ0Y0NhbmRpZGF0ZS5zZHBNaWQoKS5pc051bGwoKSkgewotICAgICAgICBjb25zdCBT
dHJpbmcmIG1pZCA9IHJ0Y0NhbmRpZGF0ZS5zZHBNaWQoKTsKLSAgICAgICAgZm9yIChhdXRvJiBk
ZXNjcmlwdGlvbiA6IHJlbW90ZU1lZGlhRGVzY3JpcHRpb25zKSB7Ci0gICAgICAgICAgICBpZiAo
ZGVzY3JpcHRpb24ubWlkID09IG1pZCkgewotICAgICAgICAgICAgICAgIHRhcmdldE1lZGlhRGVz
Y3JpcHRpb24gPSAmZGVzY3JpcHRpb247Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIXRhcmdldE1lZGlhRGVzY3JpcHRpb24p
IHsKLSAgICAgICAgICAgIGFkZEljZUNhbmRpZGF0ZUZhaWxlZChFeGNlcHRpb24geyBPcGVyYXRp
b25FcnJvciwgInNkcE1pZCBkaWQgbm90IG1hdGNoIGFueSBtZWRpYSBkZXNjcmlwdGlvbiIgfSk7
Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKHJ0Y0NhbmRp
ZGF0ZS5zZHBNTGluZUluZGV4KCkpIHsKLSAgICAgICAgdW5zaWduZWQgc2hvcnQgc2RwTUxpbmVJ
bmRleCA9IHJ0Y0NhbmRpZGF0ZS5zZHBNTGluZUluZGV4KCkudmFsdWUoKTsKLSAgICAgICAgaWYg
KHNkcE1MaW5lSW5kZXggPj0gcmVtb3RlTWVkaWFEZXNjcmlwdGlvbnMuc2l6ZSgpKSB7Ci0gICAg
ICAgICAgICBhZGRJY2VDYW5kaWRhdGVGYWlsZWQoRXhjZXB0aW9uIHsgT3BlcmF0aW9uRXJyb3Is
ICJzZHBNTGluZUluZGV4IGlzIG91dCBvZiByYW5nZSIgfSk7Ci0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIH0KLSAgICAgICAgdGFyZ2V0TWVkaWFEZXNjcmlwdGlvbiA9ICZyZW1vdGVNZWRp
YURlc2NyaXB0aW9uc1tzZHBNTGluZUluZGV4XTsKLSAgICB9IGVsc2UgewotICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGF1dG8gcmVz
dWx0ID0gbV9zZHBQcm9jZXNzb3ItPnBhcnNlQ2FuZGlkYXRlTGluZShydGNDYW5kaWRhdGUuY2Fu
ZGlkYXRlKCkpOwotICAgIGlmIChyZXN1bHQucGFyc2luZ1N0YXR1cygpICE9IFNEUFByb2Nlc3Nv
cjo6UmVzdWx0OjpTdWNjZXNzKSB7Ci0gICAgICAgIGlmIChyZXN1bHQucGFyc2luZ1N0YXR1cygp
ID09IFNEUFByb2Nlc3Nvcjo6UmVzdWx0OjpQYXJzZUVycm9yKQotICAgICAgICAgICAgYWRkSWNl
Q2FuZGlkYXRlRmFpbGVkKEV4Y2VwdGlvbiB7IE9wZXJhdGlvbkVycm9yLCAiSW52YWxpZCBjYW5k
aWRhdGUgY29udGVudCIgfSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIExPR19FUlJPUigi
U0RQUHJvY2Vzc29yIGludGVybmFsIGVycm9yIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICBBU1NFUlQodGFyZ2V0TWVkaWFEZXNjcmlwdGlvbik7Ci0gICAgbV9tZWRpYUVuZHBvaW50
LT5hZGRSZW1vdGVDYW5kaWRhdGUocmVzdWx0LmNhbmRpZGF0ZSgpLCB0YXJnZXRNZWRpYURlc2Ny
aXB0aW9uLT5taWQsIHRhcmdldE1lZGlhRGVzY3JpcHRpb24tPmljZVVmcmFnLCB0YXJnZXRNZWRp
YURlc2NyaXB0aW9uLT5pY2VQYXNzd29yZCk7Ci0KLSAgICB0YXJnZXRNZWRpYURlc2NyaXB0aW9u
LT5hZGRJY2VDYW5kaWRhdGUoV1RGTW92ZShyZXN1bHQuY2FuZGlkYXRlKCkpKTsKLQotICAgIGFk
ZEljZUNhbmRpZGF0ZVN1Y2NlZWRlZCgpOwotfQotCi12b2lkIE1lZGlhRW5kcG9pbnRQZWVyQ29u
bmVjdGlvbjo6Z2V0U3RhdHMoTWVkaWFTdHJlYW1UcmFjayogdHJhY2ssIFJlZjxEZWZlcnJlZFBy
b21pc2U+JiYgcHJvbWlzZSkKLXsKLSAgICBtX21lZGlhRW5kcG9pbnQtPmdldFN0YXRzKHRyYWNr
LCBXVEZNb3ZlKHByb21pc2UpKTsKLX0KLQotVmVjdG9yPFJlZlB0cjxNZWRpYVN0cmVhbT4+IE1l
ZGlhRW5kcG9pbnRQZWVyQ29ubmVjdGlvbjo6Z2V0UmVtb3RlU3RyZWFtcygpIGNvbnN0Ci17Ci0g
ICAgVmVjdG9yPFJlZlB0cjxNZWRpYVN0cmVhbT4+IHJlbW90ZVN0cmVhbXM7Ci0gICAgY29weVZh
bHVlc1RvVmVjdG9yKG1fcmVtb3RlU3RyZWFtTWFwLCByZW1vdGVTdHJlYW1zKTsKLSAgICByZXR1
cm4gcmVtb3RlU3RyZWFtczsKLX0KLQotUmVmPFJUQ1J0cFJlY2VpdmVyPiBNZWRpYUVuZHBvaW50
UGVlckNvbm5lY3Rpb246OmNyZWF0ZVJlY2VpdmVyKGNvbnN0IFN0cmluZyYgdHJhbnNjZWl2ZXJN
aWQsIGNvbnN0IFN0cmluZyYgdHJhY2tLaW5kLCBjb25zdCBTdHJpbmcmIHRyYWNrSWQpCi17Ci0g
ICAgUmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlwZSBzb3VyY2VUeXBlID0gdHJhY2tLaW5kID09ICJh
dWRpbyIgPyBSZWFsdGltZU1lZGlhU291cmNlOjpUeXBlOjpBdWRpbyA6IFJlYWx0aW1lTWVkaWFT
b3VyY2U6OlR5cGU6OlZpZGVvOwotCi0gICAgLy8gQ3JlYXRlIGEgbXV0ZWQgcmVtb3RlIHNvdXJj
ZSB0aGF0IHdpbGwgYmUgdW5tdXRlZCBvbmNlIG1lZGlhIHN0YXJ0cyBhcnJpdmluZy4KLSAgICBh
dXRvIHJlbW90ZVNvdXJjZSA9IG1fbWVkaWFFbmRwb2ludC0+Y3JlYXRlTXV0ZWRSZW1vdGVTb3Vy
Y2UodHJhbnNjZWl2ZXJNaWQsIHNvdXJjZVR5cGUpOwotICAgIGF1dG8gcmVtb3RlVHJhY2tQcml2
YXRlID0gTWVkaWFTdHJlYW1UcmFja1ByaXZhdGU6OmNyZWF0ZShXVEZNb3ZlKHJlbW90ZVNvdXJj
ZSksIFN0cmluZyh0cmFja0lkKSk7Ci0gICAgYXV0byByZW1vdGVUcmFjayA9IE1lZGlhU3RyZWFt
VHJhY2s6OmNyZWF0ZSgqbV9wZWVyQ29ubmVjdGlvbi5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCks
IFdURk1vdmUocmVtb3RlVHJhY2tQcml2YXRlKSk7Ci0KLSAgICByZXR1cm4gUlRDUnRwUmVjZWl2
ZXI6OmNyZWF0ZShXVEZNb3ZlKHJlbW90ZVRyYWNrKSk7Ci19Ci0KLXN0ZDo6dW5pcXVlX3B0cjxS
VENEYXRhQ2hhbm5lbEhhbmRsZXI+IE1lZGlhRW5kcG9pbnRQZWVyQ29ubmVjdGlvbjo6Y3JlYXRl
RGF0YUNoYW5uZWxIYW5kbGVyKGNvbnN0IFN0cmluZyYgbGFiZWwsIGNvbnN0IFJUQ0RhdGFDaGFu
bmVsSW5pdCYgb3B0aW9ucykKLXsKLSAgICByZXR1cm4gbV9tZWRpYUVuZHBvaW50LT5jcmVhdGVE
YXRhQ2hhbm5lbEhhbmRsZXIobGFiZWwsIG9wdGlvbnMpOwotfQotCi12b2lkIE1lZGlhRW5kcG9p
bnRQZWVyQ29ubmVjdGlvbjo6cmVwbGFjZVRyYWNrKFJUQ1J0cFNlbmRlciYgc2VuZGVyLCBSZWY8
TWVkaWFTdHJlYW1UcmFjaz4mJiB3aXRoVHJhY2ssIERPTVByb21pc2VEZWZlcnJlZDx2b2lkPiYm
IHByb21pc2UpCi17Ci0gICAgUlRDUnRwVHJhbnNjZWl2ZXIqIHRyYW5zY2VpdmVyID0gbWF0Y2hU
cmFuc2NlaXZlcihtX3BlZXJDb25uZWN0aW9uLmdldFRyYW5zY2VpdmVycygpLCBbJnNlbmRlcl0g
KFJUQ1J0cFRyYW5zY2VpdmVyJiBjdXJyZW50KSB7Ci0gICAgICAgIHJldHVybiAmY3VycmVudC5z
ZW5kZXIoKSA9PSAmc2VuZGVyOwotICAgIH0pOwotICAgIEFTU0VSVCh0cmFuc2NlaXZlcik7Ci0K
LSAgICBjb25zdCBTdHJpbmcmIG1pZCA9IHRyYW5zY2VpdmVyLT5taWQoKTsKLSAgICBpZiAobWlk
LmlzTnVsbCgpKSB7Ci0gICAgICAgIC8vIFRyYW5zY2VpdmVyIGlzIG5vdCBhc3NvY2lhdGVkIHdp
dGggYSBtZWRpYSBkZXNjcmlwdGlvbiB5ZXQuCi0gICAgICAgIHNlbmRlci5zZXRUcmFjayhXVEZN
b3ZlKHdpdGhUcmFjaykpOwotICAgICAgICBwcm9taXNlLnJlc29sdmUoKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIHJ1blRhc2soW3RoaXMsIHByb3RlY3RlZFNlbmRlciA9IFJlZlB0
cjxSVENSdHBTZW5kZXI+KCZzZW5kZXIpLCBtaWQsIHByb3RlY3RlZFRyYWNrID0gV1RGTW92ZSh3
aXRoVHJhY2spLCBwcm90ZWN0ZWRQcm9taXNlID0gV1RGTW92ZShwcm9taXNlKV0oKSBtdXRhYmxl
IHsKLSAgICAgICAgcmVwbGFjZVRyYWNrVGFzaygqcHJvdGVjdGVkU2VuZGVyLCBtaWQsIFdURk1v
dmUocHJvdGVjdGVkVHJhY2spLCBwcm90ZWN0ZWRQcm9taXNlKTsKLSAgICB9KTsKLX0KLQotdm9p
ZCBNZWRpYUVuZHBvaW50UGVlckNvbm5lY3Rpb246OnJlcGxhY2VUcmFja1Rhc2soUlRDUnRwU2Vu
ZGVyJiBzZW5kZXIsIGNvbnN0IFN0cmluZyYgbWlkLCBSZWY8TWVkaWFTdHJlYW1UcmFjaz4mJiB3
aXRoVHJhY2ssIERPTVByb21pc2VEZWZlcnJlZDx2b2lkPiYgcHJvbWlzZSkKLXsKLSAgICBpZiAo
bV9wZWVyQ29ubmVjdGlvbi5pc0Nsb3NlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX21l
ZGlhRW5kcG9pbnQtPnJlcGxhY2VTZW5kU291cmNlKHdpdGhUcmFjay0+c291cmNlKCksIG1pZCk7
Ci0KLSAgICBzZW5kZXIuc2V0VHJhY2soV1RGTW92ZSh3aXRoVHJhY2spKTsKLSAgICBwcm9taXNl
LnJlc29sdmUoKTsKLX0KLQotdm9pZCBNZWRpYUVuZHBvaW50UGVlckNvbm5lY3Rpb246OmRvU3Rv
cCgpCi17Ci0gICAgbV9tZWRpYUVuZHBvaW50LT5zdG9wKCk7Ci19Ci0KLXZvaWQgTWVkaWFFbmRw
b2ludFBlZXJDb25uZWN0aW9uOjplbXVsYXRlUGxhdGZvcm1FdmVudChjb25zdCBTdHJpbmcmIGFj
dGlvbikKLXsKLSAgICBtX21lZGlhRW5kcG9pbnQtPmVtdWxhdGVQbGF0Zm9ybUV2ZW50KGFjdGlv
bik7Ci19Ci0KLU1lZGlhRW5kcG9pbnRTZXNzaW9uRGVzY3JpcHRpb24qIE1lZGlhRW5kcG9pbnRQ
ZWVyQ29ubmVjdGlvbjo6aW50ZXJuYWxMb2NhbERlc2NyaXB0aW9uKCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gbV9wZW5kaW5nTG9jYWxEZXNjcmlwdGlvbiA/IG1fcGVuZGluZ0xvY2FsRGVzY3JpcHRp
b24uZ2V0KCkgOiBtX2N1cnJlbnRMb2NhbERlc2NyaXB0aW9uLmdldCgpOwotfQotCi1NZWRpYUVu
ZHBvaW50U2Vzc2lvbkRlc2NyaXB0aW9uKiBNZWRpYUVuZHBvaW50UGVlckNvbm5lY3Rpb246Omlu
dGVybmFsUmVtb3RlRGVzY3JpcHRpb24oKSBjb25zdAotewotICAgIHJldHVybiBtX3BlbmRpbmdS
ZW1vdGVEZXNjcmlwdGlvbiA/IG1fcGVuZGluZ1JlbW90ZURlc2NyaXB0aW9uLmdldCgpIDogbV9j
dXJyZW50UmVtb3RlRGVzY3JpcHRpb24uZ2V0KCk7Ci19Ci0KLVJlZlB0cjxSVENTZXNzaW9uRGVz
Y3JpcHRpb24+IE1lZGlhRW5kcG9pbnRQZWVyQ29ubmVjdGlvbjo6Y3JlYXRlUlRDU2Vzc2lvbkRl
c2NyaXB0aW9uKE1lZGlhRW5kcG9pbnRTZXNzaW9uRGVzY3JpcHRpb24qIGRlc2NyaXB0aW9uKSBj
b25zdAotewotICAgIHJldHVybiBkZXNjcmlwdGlvbiA/IGRlc2NyaXB0aW9uLT50b1JUQ1Nlc3Np
b25EZXNjcmlwdGlvbigqbV9zZHBQcm9jZXNzb3IpIDogbnVsbHB0cjsKLX0KLQotdm9pZCBNZWRp
YUVuZHBvaW50UGVlckNvbm5lY3Rpb246OmdvdER0bHNGaW5nZXJwcmludChjb25zdCBTdHJpbmcm
IGZpbmdlcnByaW50LCBjb25zdCBTdHJpbmcmIGZpbmdlcnByaW50RnVuY3Rpb24pCi17Ci0gICAg
QVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLQotICAgIG1fZHRsc0ZpbmdlcnByaW50ID0gZmluZ2Vy
cHJpbnQ7Ci0gICAgbV9kdGxzRmluZ2VycHJpbnRGdW5jdGlvbiA9IGZpbmdlcnByaW50RnVuY3Rp
b247Ci0KLSAgICBzdGFydFJ1bm5pbmdUYXNrcygpOwotfQotCi12b2lkIE1lZGlhRW5kcG9pbnRQ
ZWVyQ29ubmVjdGlvbjo6Z290SWNlQ2FuZGlkYXRlKGNvbnN0IFN0cmluZyYgbWlkLCBJY2VDYW5k
aWRhdGUmJiBjYW5kaWRhdGUpCi17Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLQotICAg
IGF1dG8mIG1lZGlhRGVzY3JpcHRpb25zID0gaW50ZXJuYWxMb2NhbERlc2NyaXB0aW9uKCktPmNv
bmZpZ3VyYXRpb24oKS0+bWVkaWFEZXNjcmlwdGlvbnMoKTsKLSAgICBzaXplX3QgbWVkaWFEZXNj
cmlwdGlvbkluZGV4ID0gbm90Rm91bmQ7Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1l
ZGlhRGVzY3JpcHRpb25zLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmIChtZWRpYURlc2NyaXB0
aW9uc1tpXS5taWQgPT0gbWlkKSB7Ci0gICAgICAgICAgICBtZWRpYURlc2NyaXB0aW9uSW5kZXgg
PSBpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgQVNTRVJUKG1l
ZGlhRGVzY3JpcHRpb25JbmRleCAhPSBub3RGb3VuZCk7Ci0KLSAgICBTdHJpbmcgY2FuZGlkYXRl
TGluZTsKLSAgICBhdXRvIHJlc3VsdCA9IG1fc2RwUHJvY2Vzc29yLT5nZW5lcmF0ZUNhbmRpZGF0
ZUxpbmUoY2FuZGlkYXRlLCBjYW5kaWRhdGVMaW5lKTsKLSAgICBpZiAocmVzdWx0ICE9IFNEUFBy
b2Nlc3Nvcjo6UmVzdWx0OjpTdWNjZXNzKSB7Ci0gICAgICAgIExPR19FUlJPUigiU0RQUHJvY2Vz
c29yIGludGVybmFsIGVycm9yIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtZWRp
YURlc2NyaXB0aW9uc1ttZWRpYURlc2NyaXB0aW9uSW5kZXhdLmFkZEljZUNhbmRpZGF0ZShXVEZN
b3ZlKGNhbmRpZGF0ZSkpOwotCi0gICAgZmlyZUlDRUNhbmRpZGF0ZUV2ZW50KFJUQ0ljZUNhbmRp
ZGF0ZTo6Y3JlYXRlKGNhbmRpZGF0ZUxpbmUsIG1pZCwgbWVkaWFEZXNjcmlwdGlvbkluZGV4KSk7
Ci19Ci0KLXZvaWQgTWVkaWFFbmRwb2ludFBlZXJDb25uZWN0aW9uOjpkb25lR2F0aGVyaW5nQ2Fu
ZGlkYXRlcyhjb25zdCBTdHJpbmcmIG1pZCkKLXsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkp
OwotCi0gICAgUnRwVHJhbnNjZWl2ZXJWZWN0b3IgdHJhbnNjZWl2ZXJzID0gUnRwVHJhbnNjZWl2
ZXJWZWN0b3IobV9wZWVyQ29ubmVjdGlvbi5nZXRUcmFuc2NlaXZlcnMoKSk7Ci0gICAgUlRDUnRw
VHJhbnNjZWl2ZXIqIG5vdGlmeWluZ1RyYW5zY2VpdmVyID0gbWF0Y2hUcmFuc2NlaXZlckJ5TWlk
KHRyYW5zY2VpdmVycywgbWlkKTsKLSAgICBBU1NFUlQobm90aWZ5aW5nVHJhbnNjZWl2ZXIpOwot
Ci0gICAgbm90aWZ5aW5nVHJhbnNjZWl2ZXItPmljZVRyYW5zcG9ydCgpLnNldEdhdGhlcmluZ1N0
YXRlKFJUQ0ljZUdhdGhlcmluZ1N0YXRlOjpDb21wbGV0ZSk7Ci0KLSAgICAvLyBEb24ndCBub3Rp
ZnkgdGhlIHNjcmlwdCBpZiB0aGVyZSBhcmUgdHJhbnNjZWl2ZXJzIHN0aWxsIGdhdGhlcmluZy4K
LSAgICBSVENSdHBUcmFuc2NlaXZlciogc3RpbGxHYXRoZXJpbmdUcmFuc2NlaXZlciA9IG1hdGNo
VHJhbnNjZWl2ZXIodHJhbnNjZWl2ZXJzLCBbXSAoUlRDUnRwVHJhbnNjZWl2ZXImIGN1cnJlbnQp
IHsKLSAgICAgICAgcmV0dXJuICFjdXJyZW50LnN0b3BwZWQoKSAmJiAhY3VycmVudC5taWQoKS5p
c051bGwoKQotICAgICAgICAgICAgJiYgY3VycmVudC5pY2VUcmFuc3BvcnQoKS5nYXRoZXJpbmdT
dGF0ZSgpICE9IFJUQ0ljZUdhdGhlcmluZ1N0YXRlOjpDb21wbGV0ZTsKLSAgICB9KTsKLSAgICBp
ZiAoIXN0aWxsR2F0aGVyaW5nVHJhbnNjZWl2ZXIpCi0gICAgICAgIFBlZXJDb25uZWN0aW9uQmFj
a2VuZDo6ZG9uZUdhdGhlcmluZ0NhbmRpZGF0ZXMoKTsKLX0KLQotc3RhdGljIFJUQ0ljZUNvbm5l
Y3Rpb25TdGF0ZSBkZXJpdmVBZ2dyZWdhdGVkSWNlQ29ubmVjdGlvblN0YXRlKGNvbnN0IFZlY3Rv
cjxSVENJY2VUcmFuc3BvcnRTdGF0ZT4mIHN0YXRlcykKLXsKLSAgICB1bnNpZ25lZCBuZXdDb3Vu
dCA9IDA7Ci0gICAgdW5zaWduZWQgY2hlY2tpbmdDb3VudCA9IDA7Ci0gICAgdW5zaWduZWQgY29u
bmVjdGVkQ291bnQgPSAwOwotICAgIHVuc2lnbmVkIGNvbXBsZXRlZENvdW50ID0gMDsKLSAgICB1
bnNpZ25lZCBmYWlsZWRDb3VudCA9IDA7Ci0gICAgdW5zaWduZWQgZGlzY29ubmVjdGVkQ291bnQg
PSAwOwotICAgIHVuc2lnbmVkIGNsb3NlZENvdW50ID0gMDsKLQotICAgIGZvciAoYXV0byYgc3Rh
dGUgOiBzdGF0ZXMpIHsKLSAgICAgICAgc3dpdGNoIChzdGF0ZSkgewotICAgICAgICBjYXNlIFJU
Q0ljZVRyYW5zcG9ydFN0YXRlOjpOZXc6Ci0gICAgICAgICAgICArK25ld0NvdW50OwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUlRDSWNlVHJhbnNwb3J0U3RhdGU6OkNoZWNraW5n
OgotICAgICAgICAgICAgKytjaGVja2luZ0NvdW50OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgUlRDSWNlVHJhbnNwb3J0U3RhdGU6OkNvbm5lY3RlZDoKLSAgICAgICAgICAgICsr
Y29ubmVjdGVkQ291bnQ7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBSVENJY2VU
cmFuc3BvcnRTdGF0ZTo6Q29tcGxldGVkOgotICAgICAgICAgICAgKytjb21wbGV0ZWRDb3VudDsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFJUQ0ljZVRyYW5zcG9ydFN0YXRlOjpG
YWlsZWQ6Ci0gICAgICAgICAgICArK2ZhaWxlZENvdW50OwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgUlRDSWNlVHJhbnNwb3J0U3RhdGU6OkRpc2Nvbm5lY3RlZDoKLSAgICAgICAg
ICAgICsrZGlzY29ubmVjdGVkQ291bnQ7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBSVENJY2VUcmFuc3BvcnRTdGF0ZTo6Q2xvc2VkOgotICAgICAgICAgICAgKytjbG9zZWRDb3Vu
dDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gVGhlIGFn
Z3JlZ2F0ZWQgUlRDSWNlQ29ubmVjdGlvblN0YXRlIGlzIGRlcml2ZWQgZnJvbSB0aGUgUlRDSWNl
VHJhbnNwb3J0U3RhdGUgb2YgYWxsIFJUQ0ljZVRyYW5zcG9ydHMuCi0gICAgaWYgKChuZXdDb3Vu
dCA+IDAgJiYgIWNoZWNraW5nQ291bnQgJiYgIWZhaWxlZENvdW50ICYmICFkaXNjb25uZWN0ZWRD
b3VudCkgfHwgKGNsb3NlZENvdW50ID09IHN0YXRlcy5zaXplKCkpKQotICAgICAgICByZXR1cm4g
UlRDSWNlQ29ubmVjdGlvblN0YXRlOjpOZXc7Ci0KLSAgICBpZiAoY2hlY2tpbmdDb3VudCA+IDAg
JiYgIWZhaWxlZENvdW50ICYmICFkaXNjb25uZWN0ZWRDb3VudCkKLSAgICAgICAgcmV0dXJuIFJU
Q0ljZUNvbm5lY3Rpb25TdGF0ZTo6Q2hlY2tpbmc7Ci0KLSAgICBpZiAoKGNvbm5lY3RlZENvdW50
ICsgY29tcGxldGVkQ291bnQgKyBjbG9zZWRDb3VudCkgPT0gc3RhdGVzLnNpemUoKSAmJiBjb25u
ZWN0ZWRDb3VudCA+IDApCi0gICAgICAgIHJldHVybiBSVENJY2VDb25uZWN0aW9uU3RhdGU6OkNv
bm5lY3RlZDsKLQotICAgIGlmICgoY29tcGxldGVkQ291bnQgKyBjbG9zZWRDb3VudCkgPT0gc3Rh
dGVzLnNpemUoKSAmJiBjb21wbGV0ZWRDb3VudCA+IDApCi0gICAgICAgIHJldHVybiBSVENJY2VD
b25uZWN0aW9uU3RhdGU6OkNvbXBsZXRlZDsKLQotICAgIGlmIChmYWlsZWRDb3VudCA+IDApCi0g
ICAgICAgIHJldHVybiBSVENJY2VDb25uZWN0aW9uU3RhdGU6OkZhaWxlZDsKLQotICAgIGlmIChk
aXNjb25uZWN0ZWRDb3VudCA+IDApIC8vIEFueSBmYWlsZWQgY2F1Z2h0IGFib3ZlLgotICAgICAg
ICByZXR1cm4gUlRDSWNlQ29ubmVjdGlvblN0YXRlOjpEaXNjb25uZWN0ZWQ7Ci0KLSAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gUlRDSWNlQ29ubmVjdGlvblN0YXRlOjpOZXc7
Ci19Ci0KLXZvaWQgTWVkaWFFbmRwb2ludFBlZXJDb25uZWN0aW9uOjppY2VUcmFuc3BvcnRTdGF0
ZUNoYW5nZWQoY29uc3QgU3RyaW5nJiBtaWQsIFJUQ0ljZVRyYW5zcG9ydFN0YXRlIG1lZGlhRW5k
cG9pbnRJY2VUcmFuc3BvcnRTdGF0ZSkKLXsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwot
Ci0gICAgUlRDUnRwVHJhbnNjZWl2ZXIqIHRyYW5zY2VpdmVyID0gbWF0Y2hUcmFuc2NlaXZlckJ5
TWlkKG1fcGVlckNvbm5lY3Rpb24uZ2V0VHJhbnNjZWl2ZXJzKCksIG1pZCk7Ci0gICAgQVNTRVJU
KHRyYW5zY2VpdmVyKTsKLQotICAgIFJUQ0ljZVRyYW5zcG9ydFN0YXRlIHRyYW5zcG9ydFN0YXRl
ID0gc3RhdGljX2Nhc3Q8UlRDSWNlVHJhbnNwb3J0U3RhdGU+KG1lZGlhRW5kcG9pbnRJY2VUcmFu
c3BvcnRTdGF0ZSk7Ci0gICAgdHJhbnNjZWl2ZXItPmljZVRyYW5zcG9ydCgpLnNldFN0YXRlKHRy
YW5zcG9ydFN0YXRlKTsKLQotICAgIC8vIERldGVybWluZSBpZiB0aGUgc2NyaXB0IG5lZWRzIHRv
IGJlIG5vdGlmaWVkLgotICAgIFZlY3RvcjxSVENJY2VUcmFuc3BvcnRTdGF0ZT4gdHJhbnNwb3J0
U3RhdGVzOwotICAgIHRyYW5zcG9ydFN0YXRlcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG1fcGVl
ckNvbm5lY3Rpb24uZ2V0VHJhbnNjZWl2ZXJzKCkuc2l6ZSgpKTsKLSAgICBmb3IgKGF1dG8mIHRy
YW5zY2VpdmVyIDogbV9wZWVyQ29ubmVjdGlvbi5nZXRUcmFuc2NlaXZlcnMoKSkKLSAgICAgICAg
dHJhbnNwb3J0U3RhdGVzLnVuY2hlY2tlZEFwcGVuZCh0cmFuc2NlaXZlci0+aWNlVHJhbnNwb3J0
KCkuc3RhdGUoKSk7Ci0KLSAgICBtX3BlZXJDb25uZWN0aW9uLnVwZGF0ZUljZUNvbm5lY3Rpb25T
dGF0ZShkZXJpdmVBZ2dyZWdhdGVkSWNlQ29ubmVjdGlvblN0YXRlKHRyYW5zcG9ydFN0YXRlcykp
OwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoV0VCX1JU
QykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFF
bmRwb2ludFBlZXJDb25uZWN0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3Ry
ZWFtL01lZGlhRW5kcG9pbnRQZWVyQ29ubmVjdGlvbi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCBiYjgxMzEyMWM5MmNkMzFkNjU2NTdkMDVhMzQ5YjYyOTYzYzc5YmU1Li4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFFbmRwb2ludFBlZXJDb25uZWN0aW9uLmgKKysrIC9kZXYv
bnVsbApAQCAtMSwxMzMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSwgMjAxNiBF
cmljc3NvbiBBQi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIKLSAqICAgIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqICAgIGRpc3RyaWJ1dGlvbi4KLSAqIDMu
IE5laXRoZXIgdGhlIG5hbWUgb2YgRXJpY3Nzb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJp
YnV0b3JzCi0gKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tIHRoaXMKLSAqICAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
LSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBFTkFC
TEUoV0VCX1JUQykKLQotI2luY2x1ZGUgIk1lZGlhRW5kcG9pbnQuaCIKLSNpbmNsdWRlICJQZWVy
Q29ubmVjdGlvbkJhY2tlbmQuaCIKLSNpbmNsdWRlICJSVENTZXNzaW9uRGVzY3JpcHRpb24uaCIK
LSNpbmNsdWRlIDx3dGYvRnVuY3Rpb24uaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFz
cyBNZWRpYUVuZHBvaW50U2Vzc2lvbkRlc2NyaXB0aW9uOwotY2xhc3MgU0RQUHJvY2Vzc29yOwot
Ci1jbGFzcyBNZWRpYUVuZHBvaW50UGVlckNvbm5lY3Rpb24gZmluYWwgOiBwdWJsaWMgUGVlckNv
bm5lY3Rpb25CYWNrZW5kLCBwdWJsaWMgTWVkaWFFbmRwb2ludENsaWVudCB7Ci1wdWJsaWM6Ci0g
ICAgV0VCQ09SRV9FWFBPUlQgZXhwbGljaXQgTWVkaWFFbmRwb2ludFBlZXJDb25uZWN0aW9uKFJU
Q1BlZXJDb25uZWN0aW9uJik7Ci0KLXByaXZhdGU6Ci0gICAgUmVmUHRyPFJUQ1Nlc3Npb25EZXNj
cmlwdGlvbj4gbG9jYWxEZXNjcmlwdGlvbigpIGNvbnN0IGZpbmFsOwotICAgIFJlZlB0cjxSVENT
ZXNzaW9uRGVzY3JpcHRpb24+IGN1cnJlbnRMb2NhbERlc2NyaXB0aW9uKCkgY29uc3QgZmluYWw7
Ci0gICAgUmVmUHRyPFJUQ1Nlc3Npb25EZXNjcmlwdGlvbj4gcGVuZGluZ0xvY2FsRGVzY3JpcHRp
b24oKSBjb25zdCBmaW5hbDsKLQotICAgIFJlZlB0cjxSVENTZXNzaW9uRGVzY3JpcHRpb24+IHJl
bW90ZURlc2NyaXB0aW9uKCkgY29uc3QgZmluYWw7Ci0gICAgUmVmUHRyPFJUQ1Nlc3Npb25EZXNj
cmlwdGlvbj4gY3VycmVudFJlbW90ZURlc2NyaXB0aW9uKCkgY29uc3QgZmluYWw7Ci0gICAgUmVm
UHRyPFJUQ1Nlc3Npb25EZXNjcmlwdGlvbj4gcGVuZGluZ1JlbW90ZURlc2NyaXB0aW9uKCkgY29u
c3QgZmluYWw7Ci0KLSAgICBib29sIHNldENvbmZpZ3VyYXRpb24oTWVkaWFFbmRwb2ludENvbmZp
Z3VyYXRpb24mJikgZmluYWw7Ci0KLSAgICB2b2lkIGdldFN0YXRzKE1lZGlhU3RyZWFtVHJhY2sq
LCBSZWY8RGVmZXJyZWRQcm9taXNlPiYmKSBmaW5hbDsKLQotICAgIFZlY3RvcjxSZWZQdHI8TWVk
aWFTdHJlYW0+PiBnZXRSZW1vdGVTdHJlYW1zKCkgY29uc3QgZmluYWw7Ci0KLSAgICBSZWY8UlRD
UnRwUmVjZWl2ZXI+IGNyZWF0ZVJlY2VpdmVyKGNvbnN0IFN0cmluZyYgdHJhbnNjZWl2ZXJNaWQs
IGNvbnN0IFN0cmluZyYgdHJhY2tLaW5kLCBjb25zdCBTdHJpbmcmIHRyYWNrSWQpIGZpbmFsOwot
ICAgIHZvaWQgcmVwbGFjZVRyYWNrKFJUQ1J0cFNlbmRlciYsIFJlZjxNZWRpYVN0cmVhbVRyYWNr
PiYmLCBET01Qcm9taXNlRGVmZXJyZWQ8dm9pZD4mJikgZmluYWw7Ci0KLSAgICB2b2lkIGVtdWxh
dGVQbGF0Zm9ybUV2ZW50KGNvbnN0IFN0cmluZyYgYWN0aW9uKSBmaW5hbDsKLQotICAgIHZvaWQg
cnVuVGFzayhGdW5jdGlvbjx2b2lkICgpPiYmKTsKLSAgICB2b2lkIHN0YXJ0UnVubmluZ1Rhc2tz
KCk7Ci0KLSAgICB2b2lkIGRvQ3JlYXRlT2ZmZXIoUlRDT2ZmZXJPcHRpb25zJiYpIGZpbmFsOwot
ICAgIHZvaWQgZG9DcmVhdGVBbnN3ZXIoUlRDQW5zd2VyT3B0aW9ucyYmKSBmaW5hbDsKLSAgICB2
b2lkIGRvU2V0TG9jYWxEZXNjcmlwdGlvbihSVENTZXNzaW9uRGVzY3JpcHRpb24mKSBmaW5hbDsK
LSAgICB2b2lkIGRvU2V0UmVtb3RlRGVzY3JpcHRpb24oUlRDU2Vzc2lvbkRlc2NyaXB0aW9uJikg
ZmluYWw7Ci0gICAgdm9pZCBkb0FkZEljZUNhbmRpZGF0ZShSVENJY2VDYW5kaWRhdGUmKSBmaW5h
bDsKLSAgICB2b2lkIGRvU3RvcCgpIGZpbmFsOwotCi0gICAgdm9pZCBjcmVhdGVPZmZlclRhc2so
Y29uc3QgUlRDT2ZmZXJPcHRpb25zJik7Ci0gICAgdm9pZCBjcmVhdGVBbnN3ZXJUYXNrKGNvbnN0
IFJUQ0Fuc3dlck9wdGlvbnMmKTsKLQotICAgIHZvaWQgc2V0TG9jYWxEZXNjcmlwdGlvblRhc2so
UmVmUHRyPFJUQ1Nlc3Npb25EZXNjcmlwdGlvbj4mJik7Ci0gICAgdm9pZCBzZXRSZW1vdGVEZXNj
cmlwdGlvblRhc2soUmVmUHRyPFJUQ1Nlc3Npb25EZXNjcmlwdGlvbj4mJik7Ci0KLSAgICB2b2lk
IGFkZEljZUNhbmRpZGF0ZVRhc2soUlRDSWNlQ2FuZGlkYXRlJik7Ci0KLSAgICB2b2lkIHJlcGxh
Y2VUcmFja1Rhc2soUlRDUnRwU2VuZGVyJiwgY29uc3QgU3RyaW5nJiBtaWQsIFJlZjxNZWRpYVN0
cmVhbVRyYWNrPiYmLCBET01Qcm9taXNlRGVmZXJyZWQ8dm9pZD4mKTsKLQotICAgIGJvb2wgbG9j
YWxEZXNjcmlwdGlvblR5cGVWYWxpZEZvclN0YXRlKFJUQ1NkcFR5cGUpIGNvbnN0OwotICAgIGJv
b2wgcmVtb3RlRGVzY3JpcHRpb25UeXBlVmFsaWRGb3JTdGF0ZShSVENTZHBUeXBlKSBjb25zdDsK
LQotICAgIE1lZGlhRW5kcG9pbnRTZXNzaW9uRGVzY3JpcHRpb24qIGludGVybmFsTG9jYWxEZXNj
cmlwdGlvbigpIGNvbnN0OwotICAgIE1lZGlhRW5kcG9pbnRTZXNzaW9uRGVzY3JpcHRpb24qIGlu
dGVybmFsUmVtb3RlRGVzY3JpcHRpb24oKSBjb25zdDsKLSAgICBSZWZQdHI8UlRDU2Vzc2lvbkRl
c2NyaXB0aW9uPiBjcmVhdGVSVENTZXNzaW9uRGVzY3JpcHRpb24oTWVkaWFFbmRwb2ludFNlc3Np
b25EZXNjcmlwdGlvbiopIGNvbnN0OwotCi0gICAgLy8gTWVkaWFFbmRwb2ludENsaWVudAotICAg
IHZvaWQgZ290RHRsc0ZpbmdlcnByaW50KGNvbnN0IFN0cmluZyYgZmluZ2VycHJpbnQsIGNvbnN0
IFN0cmluZyYgZmluZ2VycHJpbnRGdW5jdGlvbikgZmluYWw7Ci0gICAgdm9pZCBnb3RJY2VDYW5k
aWRhdGUoY29uc3QgU3RyaW5nJiBtaWQsIEljZUNhbmRpZGF0ZSYmKSBmaW5hbDsKLSAgICB2b2lk
IGRvbmVHYXRoZXJpbmdDYW5kaWRhdGVzKGNvbnN0IFN0cmluZyYgbWlkKSBmaW5hbDsKLSAgICB2
b2lkIGljZVRyYW5zcG9ydFN0YXRlQ2hhbmdlZChjb25zdCBTdHJpbmcmIG1pZCwgUlRDSWNlVHJh
bnNwb3J0U3RhdGUpIGZpbmFsOwotCi0gICAgc3RkOjp1bmlxdWVfcHRyPFJUQ0RhdGFDaGFubmVs
SGFuZGxlcj4gY3JlYXRlRGF0YUNoYW5uZWxIYW5kbGVyKGNvbnN0IFN0cmluZyYsIGNvbnN0IFJU
Q0RhdGFDaGFubmVsSW5pdCYpIGZpbmFsOwotCi0gICAgc3RkOjp1bmlxdWVfcHRyPE1lZGlhRW5k
cG9pbnQ+IG1fbWVkaWFFbmRwb2ludDsKLQotICAgIEZ1bmN0aW9uPHZvaWQgKCk+IG1faW5pdGlh
bERlZmVycmVkVGFzazsKLQotICAgIHN0ZDo6dW5pcXVlX3B0cjxTRFBQcm9jZXNzb3I+IG1fc2Rw
UHJvY2Vzc29yOwotCi0gICAgVmVjdG9yPE1lZGlhUGF5bG9hZD4gbV9kZWZhdWx0QXVkaW9QYXls
b2FkczsKLSAgICBWZWN0b3I8TWVkaWFQYXlsb2FkPiBtX2RlZmF1bHRWaWRlb1BheWxvYWRzOwot
Ci0gICAgU3RyaW5nIG1fY25hbWU7Ci0gICAgU3RyaW5nIG1faWNlVWZyYWc7Ci0gICAgU3RyaW5n
IG1faWNlUGFzc3dvcmQ7Ci0gICAgU3RyaW5nIG1fZHRsc0ZpbmdlcnByaW50OwotICAgIFN0cmlu
ZyBtX2R0bHNGaW5nZXJwcmludEZ1bmN0aW9uOwotICAgIHVuc2lnbmVkIG1fc2RwT2ZmZXJTZXNz
aW9uVmVyc2lvbiB7IDAgfTsKLSAgICB1bnNpZ25lZCBtX3NkcEFuc3dlclNlc3Npb25WZXJzaW9u
IHsgMCB9OwotCi0gICAgUmVmUHRyPE1lZGlhRW5kcG9pbnRTZXNzaW9uRGVzY3JpcHRpb24+IG1f
Y3VycmVudExvY2FsRGVzY3JpcHRpb247Ci0gICAgUmVmUHRyPE1lZGlhRW5kcG9pbnRTZXNzaW9u
RGVzY3JpcHRpb24+IG1fcGVuZGluZ0xvY2FsRGVzY3JpcHRpb247Ci0KLSAgICBSZWZQdHI8TWVk
aWFFbmRwb2ludFNlc3Npb25EZXNjcmlwdGlvbj4gbV9jdXJyZW50UmVtb3RlRGVzY3JpcHRpb247
Ci0gICAgUmVmUHRyPE1lZGlhRW5kcG9pbnRTZXNzaW9uRGVzY3JpcHRpb24+IG1fcGVuZGluZ1Jl
bW90ZURlc2NyaXB0aW9uOwotCi0gICAgSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxNZWRpYVN0cmVh
bT4+IG1fcmVtb3RlU3RyZWFtTWFwOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0j
ZW5kaWYgLy8gRU5BQkxFKFdFQl9SVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL21lZGlhc3RyZWFtL01lZGlhRW5kcG9pbnRTZXNzaW9uRGVzY3JpcHRpb24uY3BwIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYUVuZHBvaW50U2Vzc2lvbkRlc2Ny
aXB0aW9uLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWM2MDZmNTBjMmE5ZGQ3
ZWU4MTIzY2JlMzM5Zjc0N2Y3NDQwZmU3OS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlh
RW5kcG9pbnRTZXNzaW9uRGVzY3JpcHRpb24uY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTE3ICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUsIDIwMTYgRXJpY3Nzb24gQUIuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
Ci0gKiAgICBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlCi0gKiAgICBkaXN0cmlidXRpb24uCi0gKiAzLiBOZWl0aGVyIHRoZSBuYW1l
IG9mIEVyaWNzc29uIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICogICAgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlz
Ci0gKiAgICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
LSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJNZWRpYUVuZHBv
aW50U2Vzc2lvbkRlc2NyaXB0aW9uLmgiCi0KLSNpZiBFTkFCTEUoV0VCX1JUQykKLQotI2luY2x1
ZGUgIlNEUFByb2Nlc3Nvci5oIgotI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Ci0KLSNkZWZpbmUgU1RSSU5HX0ZVTkNUSU9OKG5hbWUpIFwKLSAg
ICBzdGF0aWMgY29uc3QgU3RyaW5nJiBuYW1lIyNTdHJpbmcoKSBcCi0gICAgeyBcCi0gICAgICAg
IHN0YXRpYyBOZXZlckRlc3Ryb3llZDxjb25zdCBTdHJpbmc+IG5hbWUoTUFLRV9TVEFUSUNfU1RS
SU5HX0lNUEwoI25hbWUpKTsgXAotICAgICAgICByZXR1cm4gbmFtZTsgXAotICAgIH0KLQotU1RS
SU5HX0ZVTkNUSU9OKG9mZmVyKQotU1RSSU5HX0ZVTkNUSU9OKHByYW5zd2VyKQotU1RSSU5HX0ZV
TkNUSU9OKGFuc3dlcikKLVNUUklOR19GVU5DVElPTihyb2xsYmFjaykKLQotUmVmPE1lZGlhRW5k
cG9pbnRTZXNzaW9uRGVzY3JpcHRpb24+IE1lZGlhRW5kcG9pbnRTZXNzaW9uRGVzY3JpcHRpb246
OmNyZWF0ZShSVENTZHBUeXBlIHR5cGUsIFJlZlB0cjxNZWRpYUVuZHBvaW50U2Vzc2lvbkNvbmZp
Z3VyYXRpb24+JiYgY29uZmlndXJhdGlvbikKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBN
ZWRpYUVuZHBvaW50U2Vzc2lvbkRlc2NyaXB0aW9uKHR5cGUsIFdURk1vdmUoY29uZmlndXJhdGlv
biksIG51bGxwdHIpKTsKLX0KLQotRXhjZXB0aW9uT3I8UmVmPE1lZGlhRW5kcG9pbnRTZXNzaW9u
RGVzY3JpcHRpb24+PiBNZWRpYUVuZHBvaW50U2Vzc2lvbkRlc2NyaXB0aW9uOjpjcmVhdGUoUmVm
UHRyPFJUQ1Nlc3Npb25EZXNjcmlwdGlvbj4mJiBydGNEZXNjcmlwdGlvbiwgY29uc3QgU0RQUHJv
Y2Vzc29yJiBzZHBQcm9jZXNzb3IpCi17Ci0gICAgUmVmUHRyPE1lZGlhRW5kcG9pbnRTZXNzaW9u
Q29uZmlndXJhdGlvbj4gY29uZmlndXJhdGlvbjsKLSAgICBhdXRvIHJlc3VsdCA9IHNkcFByb2Nl
c3Nvci5wYXJzZShydGNEZXNjcmlwdGlvbi0+c2RwKCksIGNvbmZpZ3VyYXRpb24pOwotICAgIGlm
IChyZXN1bHQgIT0gU0RQUHJvY2Vzc29yOjpSZXN1bHQ6OlN1Y2Nlc3MpIHsKLSAgICAgICAgaWYg
KHJlc3VsdCA9PSBTRFBQcm9jZXNzb3I6OlJlc3VsdDo6UGFyc2VFcnJvcikKLSAgICAgICAgICAg
IHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3IsIEFTQ0lJTGl0ZXJhbCgiU0RQ
IGNvbnRlbnQgaXMgaW52YWxpZCIpIH07Ci0gICAgICAgIExPR19FUlJPUigiU0RQUHJvY2Vzc29y
IGludGVybmFsIGVycm9yIik7Ci0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBBYm9ydEVycm9y
LCBBU0NJSUxpdGVyYWwoIkludGVybmFsIGVycm9yIikgfTsKLSAgICB9Ci0gICAgcmV0dXJuIGFk
b3B0UmVmKCpuZXcgTWVkaWFFbmRwb2ludFNlc3Npb25EZXNjcmlwdGlvbihydGNEZXNjcmlwdGlv
bi0+dHlwZSgpLCBXVEZNb3ZlKGNvbmZpZ3VyYXRpb24pLCBXVEZNb3ZlKHJ0Y0Rlc2NyaXB0aW9u
KSkpOwotfQotCi1SZWZQdHI8UlRDU2Vzc2lvbkRlc2NyaXB0aW9uPiBNZWRpYUVuZHBvaW50U2Vz
c2lvbkRlc2NyaXB0aW9uOjp0b1JUQ1Nlc3Npb25EZXNjcmlwdGlvbihjb25zdCBTRFBQcm9jZXNz
b3ImIHNkcFByb2Nlc3NvcikgY29uc3QKLXsKLSAgICBTdHJpbmcgc2RwU3RyaW5nOwotICAgIFNE
UFByb2Nlc3Nvcjo6UmVzdWx0IHJlc3VsdCA9IHNkcFByb2Nlc3Nvci5nZW5lcmF0ZSgqbV9jb25m
aWd1cmF0aW9uLCBzZHBTdHJpbmcpOwotICAgIGlmIChyZXN1bHQgIT0gU0RQUHJvY2Vzc29yOjpS
ZXN1bHQ6OlN1Y2Nlc3MpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJTRFBQcm9jZXNzb3IgaW50ZXJu
YWwgZXJyb3IiKTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAgLy8gSWYg
dGhpcyBvYmplY3Qgd2FzIGNyZWF0ZWQgZnJvbSBhbiBSVENTZXNzaW9uRGVzY3JpcHRpb24sIHRv
UlRDU2Vzc2lvbkRlc2NyaXB0aW9uIHdpbGwgcmV0dXJuCi0gICAgLy8gdGhhdCBzYW1lIGluc3Rh
bmNlIGJ1dCB3aXRoIGFuIHVwZGF0ZWQgc2RwLiBJdCBpcyB1c2VkIGZvciBSVENQZWVyQ29ubmVj
dGlvbidzIGRlc2NyaXB0aW9uCi0gICAgLy8gYXRyaWJ1dGVzIChlLmcuIGxvY2FsRGVzY3JpcHRp
b24gYW5kIHBlbmRpbmdMb2NhbERlc2NyaXB0aW9uKS4KLSAgICBpZiAobV9ydGNEZXNjcmlwdGlv
bikgewotICAgICAgICBtX3J0Y0Rlc2NyaXB0aW9uLT5zZXRTZHAoV1RGTW92ZShzZHBTdHJpbmcp
KTsKLSAgICAgICAgcmV0dXJuIG1fcnRjRGVzY3JpcHRpb247Ci0gICAgfQotCi0gICAgcmV0dXJu
IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbjo6Y3JlYXRlKG1fdHlwZSwgV1RGTW92ZShzZHBTdHJpbmcp
KTsKLX0KLQotLy8gRklYTUU6IHVuaWZ5IHdpdGggTGliV2ViUlRDTWVkaWFFbmRwb2ludCBzZXNz
aW9uRGVzY3JpcHRpb25UeXBlKCkuCi1jb25zdCBTdHJpbmcmIE1lZGlhRW5kcG9pbnRTZXNzaW9u
RGVzY3JpcHRpb246OnR5cGVTdHJpbmcoKSBjb25zdAotewotICAgIHN3aXRjaCAobV90eXBlKSB7
Ci0gICAgY2FzZSBSVENTZHBUeXBlOjpPZmZlcjoKLSAgICAgICAgcmV0dXJuIG9mZmVyU3RyaW5n
KCk7Ci0gICAgY2FzZSBSVENTZHBUeXBlOjpQcmFuc3dlcjoKLSAgICAgICAgcmV0dXJuIHByYW5z
d2VyU3RyaW5nKCk7Ci0gICAgY2FzZSBSVENTZHBUeXBlOjpBbnN3ZXI6Ci0gICAgICAgIHJldHVy
biBhbnN3ZXJTdHJpbmcoKTsKLSAgICBjYXNlIFJUQ1NkcFR5cGU6OlJvbGxiYWNrOgotICAgICAg
ICByZXR1cm4gcm9sbGJhY2tTdHJpbmcoKTsKLSAgICB9Ci0KLSAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKLSAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKLX0KLQotYm9vbCBNZWRpYUVuZHBvaW50
U2Vzc2lvbkRlc2NyaXB0aW9uOjppc0xhdGVyVGhhbihNZWRpYUVuZHBvaW50U2Vzc2lvbkRlc2Ny
aXB0aW9uKiBvdGhlcikgY29uc3QKLXsKLSAgICByZXR1cm4gIW90aGVyIHx8IGNvbmZpZ3VyYXRp
b24oKS0+c2Vzc2lvblZlcnNpb24oKSA+IG90aGVyLT5jb25maWd1cmF0aW9uKCktPnNlc3Npb25W
ZXJzaW9uKCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJM
RShXRUJfUlRDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVh
bS9NZWRpYUVuZHBvaW50U2Vzc2lvbkRlc2NyaXB0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL21lZGlhc3RyZWFtL01lZGlhRW5kcG9pbnRTZXNzaW9uRGVzY3JpcHRpb24uaApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWQwNWM3MjkyY2VjMjkxZGU5ZjEzMTFmMTM4OGQzN2Ri
YWEzYzY3NS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhRW5kcG9pbnRTZXNzaW9uRGVz
Y3JpcHRpb24uaAorKysgL2Rldi9udWxsCkBAIC0xLDc0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTUsIDIwMTYgRXJpY3Nzb24gQUIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqICAgIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqICAg
IGRpc3RyaWJ1dGlvbi4KLSAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgRXJpY3Nzb24gbm9yIHRo
ZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0gKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSAqICAgIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0g
KiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3By
YWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUoV0VCX1JUQykKLQotI2luY2x1ZGUgIkV4Y2VwdGlvbk9y
LmgiCi0jaW5jbHVkZSAiUlRDU2Vzc2lvbkRlc2NyaXB0aW9uLmgiCi0jaW5jbHVkZSA8d3RmL1Jl
ZkNvdW50ZWQuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotY2xhc3MgTWVkaWFFbmRwb2ludFNlc3Npb25Db25maWd1cmF0aW9uOwotY2xhc3MgU0RQ
UHJvY2Vzc29yOwotCi1jbGFzcyBNZWRpYUVuZHBvaW50U2Vzc2lvbkRlc2NyaXB0aW9uIDogcHVi
bGljIFJlZkNvdW50ZWQ8TWVkaWFFbmRwb2ludFNlc3Npb25EZXNjcmlwdGlvbj4gewotcHVibGlj
OgotICAgIHN0YXRpYyBSZWY8TWVkaWFFbmRwb2ludFNlc3Npb25EZXNjcmlwdGlvbj4gY3JlYXRl
KFJUQ1NkcFR5cGUsIFJlZlB0cjxNZWRpYUVuZHBvaW50U2Vzc2lvbkNvbmZpZ3VyYXRpb24+JiYp
OwotICAgIHN0YXRpYyBFeGNlcHRpb25PcjxSZWY8TWVkaWFFbmRwb2ludFNlc3Npb25EZXNjcmlw
dGlvbj4+IGNyZWF0ZShSZWZQdHI8UlRDU2Vzc2lvbkRlc2NyaXB0aW9uPiYmLCBjb25zdCBTRFBQ
cm9jZXNzb3ImKTsKLSAgICB2aXJ0dWFsIH5NZWRpYUVuZHBvaW50U2Vzc2lvbkRlc2NyaXB0aW9u
KCkgeyB9IC8vIEZJWE1FOiBXaHkgaXMgdGhpcyB2aXJ0dWFsPyBUaGVyZSBhcmUgbm8gb3RoZXIg
dmlydHVhbCBmdW5jdGlvbnMgaW4gdGhpcyBjbGFzcy4KLQotICAgIFJlZlB0cjxSVENTZXNzaW9u
RGVzY3JpcHRpb24+IHRvUlRDU2Vzc2lvbkRlc2NyaXB0aW9uKGNvbnN0IFNEUFByb2Nlc3NvciYp
IGNvbnN0OwotCi0gICAgUlRDU2RwVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9
Ci0gICAgY29uc3QgU3RyaW5nJiB0eXBlU3RyaW5nKCkgY29uc3Q7Ci0gICAgTWVkaWFFbmRwb2lu
dFNlc3Npb25Db25maWd1cmF0aW9uKiBjb25maWd1cmF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9j
b25maWd1cmF0aW9uLmdldCgpOyB9Ci0KLSAgICBib29sIGlzTGF0ZXJUaGFuKE1lZGlhRW5kcG9p
bnRTZXNzaW9uRGVzY3JpcHRpb24qIG90aGVyKSBjb25zdDsKLQotcHJpdmF0ZToKLSAgICBNZWRp
YUVuZHBvaW50U2Vzc2lvbkRlc2NyaXB0aW9uKFJUQ1NkcFR5cGUgdHlwZSwgUmVmUHRyPE1lZGlh
RW5kcG9pbnRTZXNzaW9uQ29uZmlndXJhdGlvbj4mJiBjb25maWd1cmF0aW9uLCBSZWZQdHI8UlRD
U2Vzc2lvbkRlc2NyaXB0aW9uPiYmIHJ0Y0Rlc2NyaXB0aW9uKQotICAgICAgICA6IG1fdHlwZSh0
eXBlKQotICAgICAgICAsIG1fY29uZmlndXJhdGlvbihjb25maWd1cmF0aW9uKQotICAgICAgICAs
IG1fcnRjRGVzY3JpcHRpb24oV1RGTW92ZShydGNEZXNjcmlwdGlvbikpCi0gICAgeyB9Ci0KLSAg
ICBSVENTZHBUeXBlIG1fdHlwZTsKLSAgICBSZWZQdHI8TWVkaWFFbmRwb2ludFNlc3Npb25Db25m
aWd1cmF0aW9uPiBtX2NvbmZpZ3VyYXRpb247Ci0KLSAgICBSZWZQdHI8UlRDU2Vzc2lvbkRlc2Ny
aXB0aW9uPiBtX3J0Y0Rlc2NyaXB0aW9uOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQot
Ci0jZW5kaWYgLy8gRU5BQkxFKFdFQl9SVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL21lZGlhc3RyZWFtL1NEUFByb2Nlc3Nvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL21lZGlhc3RyZWFtL1NEUFByb2Nlc3Nvci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDcxNWNmMmYyODg4ZmY3NDA3ZTVjNjVkYzI4YjNiY2RkNWIyNzg1MTIuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9tZWRpYXN0cmVhbS9TRFBQcm9jZXNzb3IuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNTYy
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUsIDIwMTYgRXJpY3Nzb24gQUIuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIKLSAqICAgIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqICAgIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIE5laXRoZXIg
dGhlIG5hbWUgb2YgRXJpY3Nzb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0g
KiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tIHRoaXMKLSAqICAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
LSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxF
KFdFQl9SVEMpCi0jaW5jbHVkZSAiU0RQUHJvY2Vzc29yLmgiCi0KLSNpbmNsdWRlICJDb21tb25W
TS5oIgotI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRl
ICJTRFBQcm9jZXNzb3JTY3JpcHRSZXNvdXJjZS5oIgotI2luY2x1ZGUgIlNjcmlwdENvbnRyb2xs
ZXIuaCIKLSNpbmNsdWRlICJTY3JpcHRTb3VyY2VDb2RlLmgiCi0jaW5jbHVkZSAiaW5zcGVjdG9y
L0luc3BlY3RvclZhbHVlcy5oIgotI2luY2x1ZGUgPGJpbmRpbmdzL1NjcmlwdE9iamVjdC5oPgot
I2luY2x1ZGUgPHJ1bnRpbWUvQ2F0Y2hTY29wZS5oPgotI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ry
b3llZC5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0KLSNkZWZpbmUgU1RSSU5HX0ZVTkNUSU9OKG5hbWUpIFwKLSAgICBzdGF0aWMgY29uc3Qg
U3RyaW5nJiBuYW1lIyNTdHJpbmcoKSBcCi0gICAgeyBcCi0gICAgICAgIHN0YXRpYyBOZXZlckRl
c3Ryb3llZDxjb25zdCBTdHJpbmc+IG5hbWUoTUFLRV9TVEFUSUNfU1RSSU5HX0lNUEwoI25hbWUp
KTsgXAotICAgICAgICByZXR1cm4gbmFtZTsgXAotICAgIH0KLQotU1RSSU5HX0ZVTkNUSU9OKGFk
ZHJlc3MpCi1TVFJJTkdfRlVOQ1RJT04oYXB0KQotU1RSSU5HX0ZVTkNUSU9OKGJ1bmRsZVBvbGlj
eSkKLVNUUklOR19GVU5DVElPTihjYW5kaWRhdGVzKQotU1RSSU5HX0ZVTkNUSU9OKGNjbWZpcikK
LVNUUklOR19GVU5DVElPTihjaGFubmVscykKLVNUUklOR19GVU5DVElPTihjbG9ja1JhdGUpCi1T
VFJJTkdfRlVOQ1RJT04oY25hbWUpCi1TVFJJTkdfRlVOQ1RJT04oY29tcG9uZW50SWQpCi1TVFJJ
TkdfRlVOQ1RJT04oZHRscykKLVNUUklOR19GVU5DVElPTihlbmNvZGluZ05hbWUpCi1TVFJJTkdf
RlVOQ1RJT04oZmluZ2VycHJpbnQpCi1TVFJJTkdfRlVOQ1RJT04oZmluZ2VycHJpbnRIYXNoRnVu
Y3Rpb24pCi1TVFJJTkdfRlVOQ1RJT04oZm91bmRhdGlvbikKLVNUUklOR19GVU5DVElPTihpY2Up
Ci1TVFJJTkdfRlVOQ1RJT04obWVkaWFEZXNjcmlwdGlvbnMpCi1TVFJJTkdfRlVOQ1RJT04obWVk
aWFTdHJlYW1JZCkKLVNUUklOR19GVU5DVElPTihtZWRpYVN0cmVhbVRyYWNrSWQpCi1TVFJJTkdf
RlVOQ1RJT04obWlkKQotU1RSSU5HX0ZVTkNUSU9OKG1vZGUpCi1TVFJJTkdfRlVOQ1RJT04obXV4
KQotU1RSSU5HX0ZVTkNUSU9OKG5hY2spCi1TVFJJTkdfRlVOQ1RJT04obmFja3BsaSkKLVNUUklO
R19GVU5DVElPTihvcmlnaW5hdG9yKQotU1RSSU5HX0ZVTkNUSU9OKHBhY2tldGl6YXRpb25Nb2Rl
KQotU1RSSU5HX0ZVTkNUSU9OKHBhcmFtZXRlcnMpCi1TVFJJTkdfRlVOQ1RJT04ocGFzc3dvcmQp
Ci1TVFJJTkdfRlVOQ1RJT04ocGF5bG9hZHMpCi1TVFJJTkdfRlVOQ1RJT04ocG9ydCkKLVNUUklO
R19GVU5DVElPTihwcmlvcml0eSkKLVNUUklOR19GVU5DVElPTihyZWxhdGVkQWRkcmVzcykKLVNU
UklOR19GVU5DVElPTihyZWxhdGVkUG9ydCkKLVNUUklOR19GVU5DVElPTihydGNwKQotU1RSSU5H
X0ZVTkNUSU9OKHJ0Y3BBZGRyZXNzKQotU1RSSU5HX0ZVTkNUSU9OKHJ0Y3BQb3J0KQotU1RSSU5H
X0ZVTkNUSU9OKHJ0eFRpbWUpCi1TVFJJTkdfRlVOQ1RJT04oc2Vzc2lvbklkKQotU1RSSU5HX0ZV
TkNUSU9OKHNlc3Npb25WZXJzaW9uKQotU1RSSU5HX0ZVTkNUSU9OKHNldHVwKQotU1RSSU5HX0ZV
TkNUSU9OKHNzcmNzKQotU1RSSU5HX0ZVTkNUSU9OKHRjcFR5cGUpCi1TVFJJTkdfRlVOQ1RJT04o
dHJhbnNwb3J0KQotU1RSSU5HX0ZVTkNUSU9OKHR5cGUpCi1TVFJJTkdfRlVOQ1RJT04odWZyYWcp
Ci0KLVNEUFByb2Nlc3Nvcjo6U0RQUHJvY2Vzc29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNv
bnRleHQpCi0gICAgOiBDb250ZXh0RGVzdHJ1Y3Rpb25PYnNlcnZlcihjb250ZXh0KQotewotfQot
Ci0vLyBOb3RlIHRoYXQgTWVkaWFFbmRwb2ludFNlc3Npb25Db25maWd1cmF0aW9uIGlzIGEgImZs
YXR0ZXIiIHN0cnVjdHVyZSB0aGF0IHRoZSBKU09OIHJlcHJlc2VudGF0aW9uLiBGb3IKLS8vIGV4
YW1wbGUsIHRoZSBKU09OIHJlcHJlc2VudGF0aW9uIGhhcyBhbiAiaWNlIiBvYmplY3Qgd2hpY2gg
Y29sbGVjdHMgYSBzZXQgb2YgcHJvcGVydGllcyB1bmRlciBhCi0vLyBuYW1lc3BhY2UuIE1lZGlh
RW5kcG9pbnRTZXNzaW9uQ29uZmlndXJhdGlvbiBoYXMgImljZSItcHJlZml4ZXMgb24gdGhlIGNv
cnJlc3BvbmRpbmcgcHJvcGVydGllcy4KLQotc3RhdGljIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IGNyZWF0ZUNhbmRpZGF0ZU9iamVjdChjb25zdCBJY2VDYW5kaWRhdGUmIGNhbmRpZGF0ZSkKLXsK
LSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBjYW5kaWRhdGVPYmplY3QgPSBJbnNwZWN0b3JP
YmplY3Q6OmNyZWF0ZSgpOwotCi0gICAgY2FuZGlkYXRlT2JqZWN0LT5zZXRTdHJpbmcodHlwZVN0
cmluZygpLCBjYW5kaWRhdGUudHlwZSk7Ci0gICAgY2FuZGlkYXRlT2JqZWN0LT5zZXRTdHJpbmco
Zm91bmRhdGlvblN0cmluZygpLCBjYW5kaWRhdGUuZm91bmRhdGlvbik7Ci0gICAgY2FuZGlkYXRl
T2JqZWN0LT5zZXRJbnRlZ2VyKGNvbXBvbmVudElkU3RyaW5nKCksIGNhbmRpZGF0ZS5jb21wb25l
bnRJZCk7Ci0gICAgY2FuZGlkYXRlT2JqZWN0LT5zZXRTdHJpbmcodHJhbnNwb3J0U3RyaW5nKCks
IGNhbmRpZGF0ZS50cmFuc3BvcnQpOwotICAgIGNhbmRpZGF0ZU9iamVjdC0+c2V0SW50ZWdlcihw
cmlvcml0eVN0cmluZygpLCBjYW5kaWRhdGUucHJpb3JpdHkpOwotICAgIGNhbmRpZGF0ZU9iamVj
dC0+c2V0U3RyaW5nKGFkZHJlc3NTdHJpbmcoKSwgY2FuZGlkYXRlLmFkZHJlc3MpOwotICAgIGNh
bmRpZGF0ZU9iamVjdC0+c2V0SW50ZWdlcihwb3J0U3RyaW5nKCksIGNhbmRpZGF0ZS5wb3J0KTsK
LSAgICBpZiAoIWNhbmRpZGF0ZS50Y3BUeXBlLmlzRW1wdHkoKSkKLSAgICAgICAgY2FuZGlkYXRl
T2JqZWN0LT5zZXRTdHJpbmcodGNwVHlwZVN0cmluZygpLCBjYW5kaWRhdGUudGNwVHlwZSk7Ci0g
ICAgaWYgKGNhbmRpZGF0ZS50eXBlLmNvbnZlcnRUb0FTQ0lJVXBwZXJjYXNlKCkgIT0gIkhPU1Qi
KSB7Ci0gICAgICAgIGNhbmRpZGF0ZU9iamVjdC0+c2V0U3RyaW5nKHJlbGF0ZWRBZGRyZXNzU3Ry
aW5nKCksIGNhbmRpZGF0ZS5yZWxhdGVkQWRkcmVzcyk7Ci0gICAgICAgIGNhbmRpZGF0ZU9iamVj
dC0+c2V0SW50ZWdlcihyZWxhdGVkUG9ydFN0cmluZygpLCBjYW5kaWRhdGUucmVsYXRlZFBvcnQp
OwotICAgIH0KLQotICAgIHJldHVybiBjYW5kaWRhdGVPYmplY3Q7Ci19Ci0KLXN0YXRpYyBJY2VD
YW5kaWRhdGUgY3JlYXRlQ2FuZGlkYXRlKGNvbnN0IEluc3BlY3Rvck9iamVjdCYgY2FuZGlkYXRl
T2JqZWN0KQotewotICAgIEljZUNhbmRpZGF0ZSBjYW5kaWRhdGU7Ci0gICAgU3RyaW5nIHN0cmlu
Z1ZhbHVlOwotICAgIHVuc2lnbmVkIGludFZhbHVlOwotCi0gICAgaWYgKGNhbmRpZGF0ZU9iamVj
dC5nZXRTdHJpbmcodHlwZVN0cmluZygpLCBzdHJpbmdWYWx1ZSkpCi0gICAgICAgIGNhbmRpZGF0
ZS50eXBlID0gc3RyaW5nVmFsdWU7Ci0KLSAgICBpZiAoY2FuZGlkYXRlT2JqZWN0LmdldFN0cmlu
Zyhmb3VuZGF0aW9uU3RyaW5nKCksIHN0cmluZ1ZhbHVlKSkKLSAgICAgICAgY2FuZGlkYXRlLmZv
dW5kYXRpb24gPSBzdHJpbmdWYWx1ZTsKLQotICAgIGlmIChjYW5kaWRhdGVPYmplY3QuZ2V0SW50
ZWdlcihjb21wb25lbnRJZFN0cmluZygpLCBpbnRWYWx1ZSkpCi0gICAgICAgIGNhbmRpZGF0ZS5j
b21wb25lbnRJZCA9IGludFZhbHVlOwotCi0gICAgaWYgKGNhbmRpZGF0ZU9iamVjdC5nZXRTdHJp
bmcodHJhbnNwb3J0U3RyaW5nKCksIHN0cmluZ1ZhbHVlKSkKLSAgICAgICAgY2FuZGlkYXRlLnRy
YW5zcG9ydCA9IHN0cmluZ1ZhbHVlOwotCi0gICAgaWYgKGNhbmRpZGF0ZU9iamVjdC5nZXRJbnRl
Z2VyKHByaW9yaXR5U3RyaW5nKCksIGludFZhbHVlKSkKLSAgICAgICAgY2FuZGlkYXRlLnByaW9y
aXR5ID0gaW50VmFsdWU7Ci0KLSAgICBpZiAoY2FuZGlkYXRlT2JqZWN0LmdldFN0cmluZyhhZGRy
ZXNzU3RyaW5nKCksIHN0cmluZ1ZhbHVlKSkKLSAgICAgICAgY2FuZGlkYXRlLmFkZHJlc3MgPSBz
dHJpbmdWYWx1ZTsKLQotICAgIGlmIChjYW5kaWRhdGVPYmplY3QuZ2V0SW50ZWdlcihwb3J0U3Ry
aW5nKCksIGludFZhbHVlKSkKLSAgICAgICAgY2FuZGlkYXRlLnBvcnQgPSBpbnRWYWx1ZTsKLQot
ICAgIGlmIChjYW5kaWRhdGVPYmplY3QuZ2V0U3RyaW5nKHRjcFR5cGVTdHJpbmcoKSwgc3RyaW5n
VmFsdWUpKQotICAgICAgICBjYW5kaWRhdGUudGNwVHlwZSA9IHN0cmluZ1ZhbHVlOwotCi0gICAg
aWYgKGNhbmRpZGF0ZU9iamVjdC5nZXRTdHJpbmcocmVsYXRlZEFkZHJlc3NTdHJpbmcoKSwgc3Ry
aW5nVmFsdWUpKQotICAgICAgICBjYW5kaWRhdGUucmVsYXRlZEFkZHJlc3MgPSBzdHJpbmdWYWx1
ZTsKLQotICAgIGlmIChjYW5kaWRhdGVPYmplY3QuZ2V0SW50ZWdlcihyZWxhdGVkUG9ydFN0cmlu
ZygpLCBpbnRWYWx1ZSkpCi0gICAgICAgIGNhbmRpZGF0ZS5yZWxhdGVkUG9ydCA9IGludFZhbHVl
OwotCi0gICAgcmV0dXJuIGNhbmRpZGF0ZTsKLX0KLQotc3RhdGljIFJlZlB0cjxNZWRpYUVuZHBv
aW50U2Vzc2lvbkNvbmZpZ3VyYXRpb24+IGNvbmZpZ3VyYXRpb25Gcm9tSlNPTihjb25zdCBTdHJp
bmcmIGpzb24pCi17Ci0gICAgUmVmUHRyPEluc3BlY3RvclZhbHVlPiB2YWx1ZTsKLSAgICBpZiAo
IUluc3BlY3RvclZhbHVlOjpwYXJzZUpTT04oanNvbiwgdmFsdWUpKQotICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLQotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG9iamVjdDsKLSAgICBpZiAo
IXZhbHVlLT5hc09iamVjdChvYmplY3QpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAg
IFJlZlB0cjxNZWRpYUVuZHBvaW50U2Vzc2lvbkNvbmZpZ3VyYXRpb24+IGNvbmZpZ3VyYXRpb24g
PSBNZWRpYUVuZHBvaW50U2Vzc2lvbkNvbmZpZ3VyYXRpb246OmNyZWF0ZSgpOwotCi0gICAgU3Ry
aW5nIHN0cmluZ1ZhbHVlOwotICAgIHVuc2lnbmVkIGludFZhbHVlOwotICAgIGJvb2wgYm9vbFZh
bHVlOwotCi0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gb3JpZ2luYXRvck9iamVjdCA9IElu
c3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgaWYgKG9iamVjdC0+Z2V0T2JqZWN0KG9yaWdp
bmF0b3JTdHJpbmcoKSwgb3JpZ2luYXRvck9iamVjdCkpIHsKLSAgICAgICAgaWYgKG9yaWdpbmF0
b3JPYmplY3QtPmdldFN0cmluZyhzZXNzaW9uSWRTdHJpbmcoKSwgc3RyaW5nVmFsdWUpKQotICAg
ICAgICAgICAgY29uZmlndXJhdGlvbi0+c2V0U2Vzc2lvbklkKHN0cmluZ1ZhbHVlLnRvSW50NjQo
KSk7Ci0gICAgICAgIGlmIChvcmlnaW5hdG9yT2JqZWN0LT5nZXRJbnRlZ2VyKHNlc3Npb25WZXJz
aW9uU3RyaW5nKCksIGludFZhbHVlKSkKLSAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24tPnNldFNl
c3Npb25WZXJzaW9uKGludFZhbHVlKTsKLSAgICB9Ci0KLSAgICBSZWZQdHI8SW5zcGVjdG9yQXJy
YXk+IG1lZGlhRGVzY3JpcHRpb25zQXJyYXkgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7Ci0g
ICAgb2JqZWN0LT5nZXRBcnJheShtZWRpYURlc2NyaXB0aW9uc1N0cmluZygpLCBtZWRpYURlc2Ny
aXB0aW9uc0FycmF5KTsKLQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtZWRpYURlc2Ny
aXB0aW9uc0FycmF5LT5sZW5ndGgoKTsgKytpKSB7Ci0gICAgICAgIFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IG1lZGlhRGVzY3JpcHRpb25PYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgp
OwotICAgICAgICBtZWRpYURlc2NyaXB0aW9uc0FycmF5LT5nZXQoaSktPmFzT2JqZWN0KG1lZGlh
RGVzY3JpcHRpb25PYmplY3QpOwotCi0gICAgICAgIFBlZXJNZWRpYURlc2NyaXB0aW9uIG1lZGlh
RGVzY3JpcHRpb247Ci0KLSAgICAgICAgaWYgKG1lZGlhRGVzY3JpcHRpb25PYmplY3QtPmdldFN0
cmluZyh0eXBlU3RyaW5nKCksIHN0cmluZ1ZhbHVlKSkKLSAgICAgICAgICAgIG1lZGlhRGVzY3Jp
cHRpb24udHlwZSA9IHN0cmluZ1ZhbHVlOwotCi0gICAgICAgIGlmIChtZWRpYURlc2NyaXB0aW9u
T2JqZWN0LT5nZXRJbnRlZ2VyKHBvcnRTdHJpbmcoKSwgaW50VmFsdWUpKQotICAgICAgICAgICAg
bWVkaWFEZXNjcmlwdGlvbi5wb3J0ID0gaW50VmFsdWU7Ci0KLSAgICAgICAgaWYgKG1lZGlhRGVz
Y3JpcHRpb25PYmplY3QtPmdldFN0cmluZyhhZGRyZXNzU3RyaW5nKCksIHN0cmluZ1ZhbHVlKSkK
LSAgICAgICAgICAgIG1lZGlhRGVzY3JpcHRpb24uYWRkcmVzcyA9IHN0cmluZ1ZhbHVlOwotCi0g
ICAgICAgIGlmIChtZWRpYURlc2NyaXB0aW9uT2JqZWN0LT5nZXRTdHJpbmcobW9kZVN0cmluZygp
LCBzdHJpbmdWYWx1ZSkpCi0gICAgICAgICAgICBtZWRpYURlc2NyaXB0aW9uLm1vZGUgPSBzdHJp
bmdWYWx1ZTsKLQotICAgICAgICBpZiAobWVkaWFEZXNjcmlwdGlvbk9iamVjdC0+Z2V0U3RyaW5n
KG1pZFN0cmluZygpLCBzdHJpbmdWYWx1ZSkpCi0gICAgICAgICAgICBtZWRpYURlc2NyaXB0aW9u
Lm1pZCA9IHN0cmluZ1ZhbHVlOwotCi0gICAgICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcGF5
bG9hZHNBcnJheSA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKLSAgICAgICAgbWVkaWFEZXNj
cmlwdGlvbk9iamVjdC0+Z2V0QXJyYXkocGF5bG9hZHNTdHJpbmcoKSwgcGF5bG9hZHNBcnJheSk7
Ci0KLSAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IHBheWxvYWRzQXJyYXktPmxlbmd0
aCgpOyArK2opIHsKLSAgICAgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBheWxvYWRz
T2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKLSAgICAgICAgICAgIHBheWxvYWRz
QXJyYXktPmdldChqKS0+YXNPYmplY3QocGF5bG9hZHNPYmplY3QpOwotCi0gICAgICAgICAgICBN
ZWRpYVBheWxvYWQgcGF5bG9hZDsKLQotICAgICAgICAgICAgaWYgKHBheWxvYWRzT2JqZWN0LT5n
ZXRJbnRlZ2VyKHR5cGVTdHJpbmcoKSwgaW50VmFsdWUpKQotICAgICAgICAgICAgICAgIHBheWxv
YWQudHlwZSA9IGludFZhbHVlOwotCi0gICAgICAgICAgICBpZiAocGF5bG9hZHNPYmplY3QtPmdl
dFN0cmluZyhlbmNvZGluZ05hbWVTdHJpbmcoKSwgc3RyaW5nVmFsdWUpKQotICAgICAgICAgICAg
ICAgIHBheWxvYWQuZW5jb2RpbmdOYW1lID0gc3RyaW5nVmFsdWU7Ci0KLSAgICAgICAgICAgIGlm
IChwYXlsb2Fkc09iamVjdC0+Z2V0SW50ZWdlcihjbG9ja1JhdGVTdHJpbmcoKSwgaW50VmFsdWUp
KQotICAgICAgICAgICAgICAgIHBheWxvYWQuY2xvY2tSYXRlID0gaW50VmFsdWU7Ci0KLSAgICAg
ICAgICAgIGlmIChwYXlsb2Fkc09iamVjdC0+Z2V0SW50ZWdlcihjaGFubmVsc1N0cmluZygpLCBp
bnRWYWx1ZSkpCi0gICAgICAgICAgICAgICAgcGF5bG9hZC5jaGFubmVscyA9IGludFZhbHVlOwot
Ci0gICAgICAgICAgICBpZiAocGF5bG9hZHNPYmplY3QtPmdldEJvb2xlYW4oY2NtZmlyU3RyaW5n
KCksIGJvb2xWYWx1ZSkpCi0gICAgICAgICAgICAgICAgcGF5bG9hZC5jY21maXIgPSBib29sVmFs
dWU7Ci0KLSAgICAgICAgICAgIGlmIChwYXlsb2Fkc09iamVjdC0+Z2V0Qm9vbGVhbihuYWNrcGxp
U3RyaW5nKCksIGJvb2xWYWx1ZSkpCi0gICAgICAgICAgICAgICAgcGF5bG9hZC5uYWNrcGxpID0g
Ym9vbFZhbHVlOwotCi0gICAgICAgICAgICBpZiAocGF5bG9hZHNPYmplY3QtPmdldEJvb2xlYW4o
bmFja1N0cmluZygpLCBib29sVmFsdWUpKQotICAgICAgICAgICAgICAgIHBheWxvYWQubmFjayA9
IGJvb2xWYWx1ZTsKLQotICAgICAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1l
dGVyc09iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgICAgICAgICBpZiAo
cGF5bG9hZHNPYmplY3QtPmdldE9iamVjdChwYXJhbWV0ZXJzU3RyaW5nKCksIHBhcmFtZXRlcnNP
YmplY3QpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHBhcmFtZXRlcnNPYmplY3QtPmdldEludGVn
ZXIocGFja2V0aXphdGlvbk1vZGVTdHJpbmcoKSwgaW50VmFsdWUpKQotICAgICAgICAgICAgICAg
ICAgICBwYXlsb2FkLmFkZFBhcmFtZXRlcigicGFja2V0aXphdGlvbk1vZGUiLCBpbnRWYWx1ZSk7
Ci0KLSAgICAgICAgICAgICAgICBpZiAocGFyYW1ldGVyc09iamVjdC0+Z2V0SW50ZWdlcihhcHRT
dHJpbmcoKSwgaW50VmFsdWUpKQotICAgICAgICAgICAgICAgICAgICBwYXlsb2FkLmFkZFBhcmFt
ZXRlcigiYXB0IiwgaW50VmFsdWUpOwotCi0gICAgICAgICAgICAgICAgaWYgKHBhcmFtZXRlcnNP
YmplY3QtPmdldEludGVnZXIocnR4VGltZVN0cmluZygpLCBpbnRWYWx1ZSkpCi0gICAgICAgICAg
ICAgICAgICAgIHBheWxvYWQuYWRkUGFyYW1ldGVyKCJydHhUaW1lIiwgaW50VmFsdWUpOwotICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICBtZWRpYURlc2NyaXB0aW9uLmFkZFBheWxvYWQoV1RG
TW92ZShwYXlsb2FkKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiBydGNwT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKLSAgICAgICAgaWYg
KG1lZGlhRGVzY3JpcHRpb25PYmplY3QtPmdldE9iamVjdChydGNwU3RyaW5nKCksIHJ0Y3BPYmpl
Y3QpKSB7Ci0gICAgICAgICAgICBpZiAocnRjcE9iamVjdC0+Z2V0Qm9vbGVhbihtdXhTdHJpbmco
KSwgYm9vbFZhbHVlKSkKLSAgICAgICAgICAgICAgICBtZWRpYURlc2NyaXB0aW9uLnJ0Y3BNdXgg
PSBib29sVmFsdWU7Ci0KLSAgICAgICAgICAgIGlmIChydGNwT2JqZWN0LT5nZXRTdHJpbmcocnRj
cEFkZHJlc3NTdHJpbmcoKSwgc3RyaW5nVmFsdWUpKQotICAgICAgICAgICAgICAgIG1lZGlhRGVz
Y3JpcHRpb24ucnRjcEFkZHJlc3MgPSBzdHJpbmdWYWx1ZTsKLQotICAgICAgICAgICAgaWYgKHJ0
Y3BPYmplY3QtPmdldEludGVnZXIocnRjcFBvcnRTdHJpbmcoKSwgaW50VmFsdWUpKQotICAgICAg
ICAgICAgICAgIG1lZGlhRGVzY3JpcHRpb24ucnRjcFBvcnQgPSBpbnRWYWx1ZTsKLSAgICAgICAg
fQotCi0gICAgICAgIGlmIChtZWRpYURlc2NyaXB0aW9uT2JqZWN0LT5nZXRTdHJpbmcobWVkaWFT
dHJlYW1JZFN0cmluZygpLCBzdHJpbmdWYWx1ZSkpCi0gICAgICAgICAgICBtZWRpYURlc2NyaXB0
aW9uLm1lZGlhU3RyZWFtSWQgPSBzdHJpbmdWYWx1ZTsKLQotICAgICAgICBpZiAobWVkaWFEZXNj
cmlwdGlvbk9iamVjdC0+Z2V0U3RyaW5nKG1lZGlhU3RyZWFtVHJhY2tJZFN0cmluZygpLCBzdHJp
bmdWYWx1ZSkpCi0gICAgICAgICAgICBtZWRpYURlc2NyaXB0aW9uLm1lZGlhU3RyZWFtVHJhY2tJ
ZCA9IHN0cmluZ1ZhbHVlOwotCi0gICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGR0bHNP
YmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwotICAgICAgICBpZiAobWVkaWFEZXNj
cmlwdGlvbk9iamVjdC0+Z2V0T2JqZWN0KGR0bHNTdHJpbmcoKSwgZHRsc09iamVjdCkpIHsKLSAg
ICAgICAgICAgIGlmIChkdGxzT2JqZWN0LT5nZXRTdHJpbmcoc2V0dXBTdHJpbmcoKSwgc3RyaW5n
VmFsdWUpKQotICAgICAgICAgICAgICAgIG1lZGlhRGVzY3JpcHRpb24uZHRsc1NldHVwID0gc3Ry
aW5nVmFsdWU7Ci0KLSAgICAgICAgICAgIGlmIChkdGxzT2JqZWN0LT5nZXRTdHJpbmcoZmluZ2Vy
cHJpbnRIYXNoRnVuY3Rpb25TdHJpbmcoKSwgc3RyaW5nVmFsdWUpKQotICAgICAgICAgICAgICAg
IG1lZGlhRGVzY3JpcHRpb24uZHRsc0ZpbmdlcnByaW50SGFzaEZ1bmN0aW9uID0gc3RyaW5nVmFs
dWU7Ci0KLSAgICAgICAgICAgIGlmIChkdGxzT2JqZWN0LT5nZXRTdHJpbmcoZmluZ2VycHJpbnRT
dHJpbmcoKSwgc3RyaW5nVmFsdWUpKQotICAgICAgICAgICAgICAgIG1lZGlhRGVzY3JpcHRpb24u
ZHRsc0ZpbmdlcnByaW50ID0gc3RyaW5nVmFsdWU7Ci0gICAgICAgIH0KLQotICAgICAgICBSZWZQ
dHI8SW5zcGVjdG9yQXJyYXk+IHNzcmNzQXJyYXkgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7
Ci0gICAgICAgIG1lZGlhRGVzY3JpcHRpb25PYmplY3QtPmdldEFycmF5KHNzcmNzU3RyaW5nKCks
IHNzcmNzQXJyYXkpOwotCi0gICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGogPCBzc3Jjc0Fy
cmF5LT5sZW5ndGgoKTsgKytqKSB7Ci0gICAgICAgICAgICBzc3Jjc0FycmF5LT5nZXQoaiktPmFz
SW50ZWdlcihpbnRWYWx1ZSk7Ci0gICAgICAgICAgICBtZWRpYURlc2NyaXB0aW9uLmFkZFNzcmMo
aW50VmFsdWUpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG1lZGlhRGVzY3JpcHRpb25PYmpl
Y3QtPmdldFN0cmluZyhjbmFtZVN0cmluZygpLCBzdHJpbmdWYWx1ZSkpCi0gICAgICAgICAgICBt
ZWRpYURlc2NyaXB0aW9uLmNuYW1lID0gc3RyaW5nVmFsdWU7Ci0KLSAgICAgICAgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gaWNlT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKLSAg
ICAgICAgaWYgKG1lZGlhRGVzY3JpcHRpb25PYmplY3QtPmdldE9iamVjdChpY2VTdHJpbmcoKSwg
aWNlT2JqZWN0KSkgewotICAgICAgICAgICAgaWYgKGljZU9iamVjdC0+Z2V0U3RyaW5nKHVmcmFn
U3RyaW5nKCksIHN0cmluZ1ZhbHVlKSkKLSAgICAgICAgICAgICAgICBtZWRpYURlc2NyaXB0aW9u
LmljZVVmcmFnID0gc3RyaW5nVmFsdWU7Ci0KLSAgICAgICAgICAgIGlmIChpY2VPYmplY3QtPmdl
dFN0cmluZyhwYXNzd29yZFN0cmluZygpLCBzdHJpbmdWYWx1ZSkpCi0gICAgICAgICAgICAgICAg
bWVkaWFEZXNjcmlwdGlvbi5pY2VQYXNzd29yZCA9IHN0cmluZ1ZhbHVlOwotCi0gICAgICAgICAg
ICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGNhbmRpZGF0ZXNBcnJheSA9IEluc3BlY3RvckFycmF5
OjpjcmVhdGUoKTsKLSAgICAgICAgICAgIGljZU9iamVjdC0+Z2V0QXJyYXkoY2FuZGlkYXRlc1N0
cmluZygpLCBjYW5kaWRhdGVzQXJyYXkpOwotCi0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGog
PSAwOyBqIDwgY2FuZGlkYXRlc0FycmF5LT5sZW5ndGgoKTsgKytqKSB7Ci0gICAgICAgICAgICAg
ICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gY2FuZGlkYXRlT2JqZWN0ID0gSW5zcGVjdG9yT2Jq
ZWN0OjpjcmVhdGUoKTsKLSAgICAgICAgICAgICAgICBjYW5kaWRhdGVzQXJyYXktPmdldChqKS0+
YXNPYmplY3QoY2FuZGlkYXRlT2JqZWN0KTsKLQotICAgICAgICAgICAgICAgIG1lZGlhRGVzY3Jp
cHRpb24uYWRkSWNlQ2FuZGlkYXRlKGNyZWF0ZUNhbmRpZGF0ZSgqY2FuZGlkYXRlT2JqZWN0KSk7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBjb25maWd1cmF0aW9uLT5hZGRN
ZWRpYURlc2NyaXB0aW9uKFdURk1vdmUobWVkaWFEZXNjcmlwdGlvbikpOwotICAgIH0KLQotICAg
IHJldHVybiBjb25maWd1cmF0aW9uOwotfQotCi1zdGF0aWMgc3RkOjpvcHRpb25hbDxJY2VDYW5k
aWRhdGU+IGljZUNhbmRpZGF0ZUZyb21KU09OKGNvbnN0IFN0cmluZyYganNvbikKLXsKLSAgICBS
ZWZQdHI8SW5zcGVjdG9yVmFsdWU+IHZhbHVlOwotICAgIGlmICghSW5zcGVjdG9yVmFsdWU6OnBh
cnNlSlNPTihqc29uLCB2YWx1ZSkpCi0gICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAg
ICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBjYW5kaWRhdGVPYmplY3Q7Ci0gICAgaWYgKCF2YWx1
ZS0+YXNPYmplY3QoY2FuZGlkYXRlT2JqZWN0KSkKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9w
dDsKLQotICAgIHJldHVybiBjcmVhdGVDYW5kaWRhdGUoKmNhbmRpZGF0ZU9iamVjdCk7Ci19Ci0K
LXN0YXRpYyBTdHJpbmcgZ2V0QnVuZGxlUG9saWN5TmFtZShjb25zdCBQZWVyQ29ubmVjdGlvblN0
YXRlczo6QnVuZGxlUG9saWN5IGJ1bmRsZVBvbGljeSkKLXsKLSAgICBzd2l0Y2ggKGJ1bmRsZVBv
bGljeSkgewotICAgIGNhc2UgUGVlckNvbm5lY3Rpb25TdGF0ZXM6OkJ1bmRsZVBvbGljeTo6TWF4
Q29tcGF0OgotICAgICAgICByZXR1cm4gIm1heC1jb21wYXQiOwotICAgIGNhc2UgUGVlckNvbm5l
Y3Rpb25TdGF0ZXM6OkJ1bmRsZVBvbGljeTo6TWF4QnVuZGxlOgotICAgICAgICByZXR1cm4gIm1h
eC1idW5kbGUiOwotICAgIGNhc2UgUGVlckNvbm5lY3Rpb25TdGF0ZXM6OkJ1bmRsZVBvbGljeTo6
QmFsYW5jZWQ6Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuICJiYWxhbmNlZCI7Ci0gICAg
fTsKLX0KLQotc3RhdGljIFN0cmluZyBjb25maWd1cmF0aW9uVG9KU09OKGNvbnN0IE1lZGlhRW5k
cG9pbnRTZXNzaW9uQ29uZmlndXJhdGlvbiYgY29uZmlndXJhdGlvbikKLXsKLSAgICBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiBvYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwotICAg
IG9iamVjdC0+c2V0U3RyaW5nKGJ1bmRsZVBvbGljeVN0cmluZygpLCBnZXRCdW5kbGVQb2xpY3lO
YW1lKGNvbmZpZ3VyYXRpb24uYnVuZGxlUG9saWN5KCkpKTsKLQotICAgIFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IG9yaWdpbmF0b3JPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwot
ICAgIG9yaWdpbmF0b3JPYmplY3QtPnNldFN0cmluZyhzZXNzaW9uSWRTdHJpbmcoKSwgU3RyaW5n
OjpudW1iZXIoY29uZmlndXJhdGlvbi5zZXNzaW9uSWQoKSkpOwotICAgIG9yaWdpbmF0b3JPYmpl
Y3QtPnNldEludGVnZXIoc2Vzc2lvblZlcnNpb25TdHJpbmcoKSwgY29uZmlndXJhdGlvbi5zZXNz
aW9uVmVyc2lvbigpKTsKLSAgICBvYmplY3QtPnNldE9iamVjdChvcmlnaW5hdG9yU3RyaW5nKCks
IG9yaWdpbmF0b3JPYmplY3QpOwotCi0gICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBtZWRpYURl
c2NyaXB0aW9uc0FycmF5ID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwotCi0gICAgZm9yIChj
b25zdCBhdXRvJiBtZWRpYURlc2NyaXB0aW9uIDogY29uZmlndXJhdGlvbi5tZWRpYURlc2NyaXB0
aW9ucygpKSB7Ci0gICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1lZGlhRGVzY3JpcHRp
b25PYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwotCi0gICAgICAgIG1lZGlhRGVz
Y3JpcHRpb25PYmplY3QtPnNldFN0cmluZyh0eXBlU3RyaW5nKCksIG1lZGlhRGVzY3JpcHRpb24u
dHlwZSk7Ci0gICAgICAgIG1lZGlhRGVzY3JpcHRpb25PYmplY3QtPnNldEludGVnZXIocG9ydFN0
cmluZygpLCBtZWRpYURlc2NyaXB0aW9uLnBvcnQpOwotICAgICAgICBtZWRpYURlc2NyaXB0aW9u
T2JqZWN0LT5zZXRTdHJpbmcoYWRkcmVzc1N0cmluZygpLCBtZWRpYURlc2NyaXB0aW9uLmFkZHJl
c3MpOwotICAgICAgICBtZWRpYURlc2NyaXB0aW9uT2JqZWN0LT5zZXRTdHJpbmcobW9kZVN0cmlu
ZygpLCBtZWRpYURlc2NyaXB0aW9uLm1vZGUpOwotICAgICAgICBtZWRpYURlc2NyaXB0aW9uT2Jq
ZWN0LT5zZXRTdHJpbmcobWlkU3RyaW5nKCksIG1lZGlhRGVzY3JpcHRpb24ubWlkKTsKLQotICAg
ICAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHBheWxvYWRzQXJyYXkgPSBJbnNwZWN0b3JBcnJh
eTo6Y3JlYXRlKCk7Ci0KLSAgICAgICAgZm9yIChhdXRvJiBwYXlsb2FkIDogbWVkaWFEZXNjcmlw
dGlvbi5wYXlsb2FkcykgewotICAgICAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGF5
bG9hZE9iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7Ci0KLSAgICAgICAgICAgIHBh
eWxvYWRPYmplY3QtPnNldEludGVnZXIodHlwZVN0cmluZygpLCBwYXlsb2FkLnR5cGUpOwotICAg
ICAgICAgICAgcGF5bG9hZE9iamVjdC0+c2V0U3RyaW5nKGVuY29kaW5nTmFtZVN0cmluZygpLCBw
YXlsb2FkLmVuY29kaW5nTmFtZSk7Ci0gICAgICAgICAgICBwYXlsb2FkT2JqZWN0LT5zZXRJbnRl
Z2VyKGNsb2NrUmF0ZVN0cmluZygpLCBwYXlsb2FkLmNsb2NrUmF0ZSk7Ci0gICAgICAgICAgICBw
YXlsb2FkT2JqZWN0LT5zZXRJbnRlZ2VyKGNoYW5uZWxzU3RyaW5nKCksIHBheWxvYWQuY2hhbm5l
bHMpOwotICAgICAgICAgICAgcGF5bG9hZE9iamVjdC0+c2V0Qm9vbGVhbihjY21maXJTdHJpbmco
KSwgcGF5bG9hZC5jY21maXIpOwotICAgICAgICAgICAgcGF5bG9hZE9iamVjdC0+c2V0Qm9vbGVh
bihuYWNrcGxpU3RyaW5nKCksIHBheWxvYWQubmFja3BsaSk7Ci0gICAgICAgICAgICBwYXlsb2Fk
T2JqZWN0LT5zZXRCb29sZWFuKG5hY2tTdHJpbmcoKSwgcGF5bG9hZC5uYWNrKTsKLQotICAgICAg
ICAgICAgaWYgKCFwYXlsb2FkLnBhcmFtZXRlcnMuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAg
ICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1ldGVyc09iamVjdCA9IEluc3BlY3Rvck9i
amVjdDo6Y3JlYXRlKCk7Ci0KLSAgICAgICAgICAgICAgICBmb3IgKGF1dG8mIG5hbWUgOiBwYXls
b2FkLnBhcmFtZXRlcnMua2V5cygpKQotICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzT2Jq
ZWN0LT5zZXRJbnRlZ2VyKG5hbWUsIHBheWxvYWQucGFyYW1ldGVycy5nZXQobmFtZSkpOwotCi0g
ICAgICAgICAgICAgICAgcGF5bG9hZE9iamVjdC0+c2V0T2JqZWN0KHBhcmFtZXRlcnNTdHJpbmco
KSwgcGFyYW1ldGVyc09iamVjdCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHBheWxv
YWRzQXJyYXktPnB1c2hPYmplY3QocGF5bG9hZE9iamVjdCk7Ci0gICAgICAgIH0KLSAgICAgICAg
bWVkaWFEZXNjcmlwdGlvbk9iamVjdC0+c2V0QXJyYXkocGF5bG9hZHNTdHJpbmcoKSwgcGF5bG9h
ZHNBcnJheSk7Ci0KLSAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcnRjcE9iamVjdCA9
IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgICAgIHJ0Y3BPYmplY3QtPnNldEJvb2xl
YW4obXV4U3RyaW5nKCksIG1lZGlhRGVzY3JpcHRpb24ucnRjcE11eCk7Ci0gICAgICAgIHJ0Y3BP
YmplY3QtPnNldFN0cmluZyhhZGRyZXNzU3RyaW5nKCksIG1lZGlhRGVzY3JpcHRpb24ucnRjcEFk
ZHJlc3MpOwotICAgICAgICBydGNwT2JqZWN0LT5zZXRJbnRlZ2VyKHBvcnRTdHJpbmcoKSwgbWVk
aWFEZXNjcmlwdGlvbi5ydGNwUG9ydCk7Ci0gICAgICAgIG1lZGlhRGVzY3JpcHRpb25PYmplY3Qt
PnNldE9iamVjdChydGNwU3RyaW5nKCksIHJ0Y3BPYmplY3QpOwotCi0gICAgICAgIG1lZGlhRGVz
Y3JpcHRpb25PYmplY3QtPnNldFN0cmluZyhtZWRpYVN0cmVhbUlkU3RyaW5nKCksIG1lZGlhRGVz
Y3JpcHRpb24ubWVkaWFTdHJlYW1JZCk7Ci0gICAgICAgIG1lZGlhRGVzY3JpcHRpb25PYmplY3Qt
PnNldFN0cmluZyhtZWRpYVN0cmVhbVRyYWNrSWRTdHJpbmcoKSwgbWVkaWFEZXNjcmlwdGlvbi5t
ZWRpYVN0cmVhbVRyYWNrSWQpOwotCi0gICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGR0
bHNPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwotICAgICAgICBkdGxzT2JqZWN0
LT5zZXRTdHJpbmcoc2V0dXBTdHJpbmcoKSwgbWVkaWFEZXNjcmlwdGlvbi5kdGxzU2V0dXApOwot
ICAgICAgICBkdGxzT2JqZWN0LT5zZXRTdHJpbmcoZmluZ2VycHJpbnRIYXNoRnVuY3Rpb25TdHJp
bmcoKSwgbWVkaWFEZXNjcmlwdGlvbi5kdGxzRmluZ2VycHJpbnRIYXNoRnVuY3Rpb24pOwotICAg
ICAgICBkdGxzT2JqZWN0LT5zZXRTdHJpbmcoZmluZ2VycHJpbnRTdHJpbmcoKSwgbWVkaWFEZXNj
cmlwdGlvbi5kdGxzRmluZ2VycHJpbnQpOwotICAgICAgICBtZWRpYURlc2NyaXB0aW9uT2JqZWN0
LT5zZXRPYmplY3QoZHRsc1N0cmluZygpLCBkdGxzT2JqZWN0KTsKLQotICAgICAgICBSZWZQdHI8
SW5zcGVjdG9yQXJyYXk+IHNzcmNzQXJyYXkgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7Ci0K
LSAgICAgICAgZm9yIChhdXRvIHNzcmMgOiBtZWRpYURlc2NyaXB0aW9uLnNzcmNzKQotICAgICAg
ICAgICAgc3NyY3NBcnJheS0+cHVzaERvdWJsZShzc3JjKTsKLSAgICAgICAgbWVkaWFEZXNjcmlw
dGlvbk9iamVjdC0+c2V0QXJyYXkoc3NyY3NTdHJpbmcoKSwgc3NyY3NBcnJheSk7Ci0KLSAgICAg
ICAgbWVkaWFEZXNjcmlwdGlvbk9iamVjdC0+c2V0U3RyaW5nKGNuYW1lU3RyaW5nKCksIG1lZGlh
RGVzY3JpcHRpb24uY25hbWUpOwotCi0gICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGlj
ZU9iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgICAgIGljZU9iamVjdC0+
c2V0U3RyaW5nKHVmcmFnU3RyaW5nKCksIG1lZGlhRGVzY3JpcHRpb24uaWNlVWZyYWcpOwotICAg
ICAgICBpY2VPYmplY3QtPnNldFN0cmluZyhwYXNzd29yZFN0cmluZygpLCBtZWRpYURlc2NyaXB0
aW9uLmljZVBhc3N3b3JkKTsKLQotICAgICAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGNhbmRp
ZGF0ZXNBcnJheSA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKLQotICAgICAgICBmb3IgKGF1
dG8mIGNhbmRpZGF0ZSA6IG1lZGlhRGVzY3JpcHRpb24uaWNlQ2FuZGlkYXRlcykKLSAgICAgICAg
ICAgIGNhbmRpZGF0ZXNBcnJheS0+cHVzaE9iamVjdChjcmVhdGVDYW5kaWRhdGVPYmplY3QoY2Fu
ZGlkYXRlKSk7Ci0KLSAgICAgICAgaWNlT2JqZWN0LT5zZXRBcnJheShjYW5kaWRhdGVzU3RyaW5n
KCksIGNhbmRpZGF0ZXNBcnJheSk7Ci0gICAgICAgIG1lZGlhRGVzY3JpcHRpb25PYmplY3QtPnNl
dE9iamVjdChpY2VTdHJpbmcoKSwgaWNlT2JqZWN0KTsKLQotICAgICAgICBtZWRpYURlc2NyaXB0
aW9uc0FycmF5LT5wdXNoT2JqZWN0KG1lZGlhRGVzY3JpcHRpb25PYmplY3QpOwotICAgIH0KLSAg
ICBvYmplY3QtPnNldEFycmF5KG1lZGlhRGVzY3JpcHRpb25zU3RyaW5nKCksIG1lZGlhRGVzY3Jp
cHRpb25zQXJyYXkpOwotCi0gICAgcmV0dXJuIG9iamVjdC0+dG9KU09OU3RyaW5nKCk7Ci19Ci0K
LXN0YXRpYyBTdHJpbmcgaWNlQ2FuZGlkYXRlVG9KU09OKGNvbnN0IEljZUNhbmRpZGF0ZSYgY2Fu
ZGlkYXRlKQotewotICAgIHJldHVybiBjcmVhdGVDYW5kaWRhdGVPYmplY3QoY2FuZGlkYXRlKS0+
dG9KU09OU3RyaW5nKCk7Ci19Ci0KLVNEUFByb2Nlc3Nvcjo6UmVzdWx0IFNEUFByb2Nlc3Nvcjo6
Z2VuZXJhdGUoY29uc3QgTWVkaWFFbmRwb2ludFNlc3Npb25Db25maWd1cmF0aW9uJiBjb25maWd1
cmF0aW9uLCBTdHJpbmcmIG91dFNkcFN0cmluZykgY29uc3QKLXsKLSAgICBTdHJpbmcgc2RwU3Ry
aW5nOwotICAgIGlmICghY2FsbFNjcmlwdCgiZ2VuZXJhdGUiLCBjb25maWd1cmF0aW9uVG9KU09O
KGNvbmZpZ3VyYXRpb24pLCBzZHBTdHJpbmcpKQotICAgICAgICByZXR1cm4gUmVzdWx0OjpJbnRl
cm5hbEVycm9yOwotCi0gICAgb3V0U2RwU3RyaW5nID0gc2RwU3RyaW5nOwotICAgIHJldHVybiBS
ZXN1bHQ6OlN1Y2Nlc3M7Ci19Ci0KLVNEUFByb2Nlc3Nvcjo6UmVzdWx0IFNEUFByb2Nlc3Nvcjo6
cGFyc2UoY29uc3QgU3RyaW5nJiBzZHAsIFJlZlB0cjxNZWRpYUVuZHBvaW50U2Vzc2lvbkNvbmZp
Z3VyYXRpb24+JiBvdXRDb25maWd1cmF0aW9uKSBjb25zdAotewotICAgIFN0cmluZyBzY3JpcHRP
dXRwdXQ7Ci0gICAgaWYgKCFjYWxsU2NyaXB0KCJwYXJzZSIsIHNkcCwgc2NyaXB0T3V0cHV0KSkK
LSAgICAgICAgcmV0dXJuIFJlc3VsdDo6SW50ZXJuYWxFcnJvcjsKLQotICAgIGlmIChzY3JpcHRP
dXRwdXQgPT0gIlBhcnNlRXJyb3IiKQotICAgICAgICByZXR1cm4gUmVzdWx0OjpQYXJzZUVycm9y
OwotCi0gICAgUmVmUHRyPE1lZGlhRW5kcG9pbnRTZXNzaW9uQ29uZmlndXJhdGlvbj4gY29uZmln
dXJhdGlvbiA9IGNvbmZpZ3VyYXRpb25Gcm9tSlNPTihzY3JpcHRPdXRwdXQpOwotICAgIGlmICgh
Y29uZmlndXJhdGlvbikKLSAgICAgICAgcmV0dXJuIFJlc3VsdDo6SW50ZXJuYWxFcnJvcjsKLQot
ICAgIG91dENvbmZpZ3VyYXRpb24gPSBjb25maWd1cmF0aW9uOwotICAgIHJldHVybiBSZXN1bHQ6
OlN1Y2Nlc3M7Ci19Ci0KLVNEUFByb2Nlc3Nvcjo6UmVzdWx0IFNEUFByb2Nlc3Nvcjo6Z2VuZXJh
dGVDYW5kaWRhdGVMaW5lKGNvbnN0IEljZUNhbmRpZGF0ZSYgY2FuZGlkYXRlLCBTdHJpbmcmIG91
dENhbmRpZGF0ZUxpbmUpIGNvbnN0Ci17Ci0gICAgU3RyaW5nIGNhbmRpZGF0ZUxpbmU7Ci0gICAg
aWYgKCFjYWxsU2NyaXB0KCJnZW5lcmF0ZUNhbmRpZGF0ZUxpbmUiLCBpY2VDYW5kaWRhdGVUb0pT
T04oY2FuZGlkYXRlKSwgY2FuZGlkYXRlTGluZSkpCi0gICAgICAgIHJldHVybiBSZXN1bHQ6Oklu
dGVybmFsRXJyb3I7Ci0KLSAgICBvdXRDYW5kaWRhdGVMaW5lID0gY2FuZGlkYXRlTGluZTsKLSAg
ICByZXR1cm4gUmVzdWx0OjpTdWNjZXNzOwotfQotCi1TRFBQcm9jZXNzb3I6OlBhcnNpbmdSZXN1
bHQgU0RQUHJvY2Vzc29yOjpwYXJzZUNhbmRpZGF0ZUxpbmUoY29uc3QgU3RyaW5nJiBjYW5kaWRh
dGVMaW5lKSBjb25zdAotewotICAgIFN0cmluZyBzY3JpcHRPdXRwdXQ7Ci0gICAgaWYgKCFjYWxs
U2NyaXB0KCJwYXJzZUNhbmRpZGF0ZUxpbmUiLCBjYW5kaWRhdGVMaW5lLCBzY3JpcHRPdXRwdXQp
KQotICAgICAgICByZXR1cm4geyBSZXN1bHQ6OkludGVybmFsRXJyb3IgfTsKLQotICAgIGlmIChz
Y3JpcHRPdXRwdXQgPT0gIlBhcnNlRXJyb3IiKQotICAgICAgICByZXR1cm4geyBSZXN1bHQ6OlBh
cnNlRXJyb3IgfTsKLQotICAgIGF1dG8gY2FuZGlkYXRlID0gaWNlQ2FuZGlkYXRlRnJvbUpTT04o
c2NyaXB0T3V0cHV0KTsKLSAgICBpZiAoIWNhbmRpZGF0ZSkKLSAgICAgICAgcmV0dXJuIHsgUmVz
dWx0OjpJbnRlcm5hbEVycm9yIH07Ci0gICAgcmV0dXJuIHsgV1RGTW92ZShjYW5kaWRhdGUudmFs
dWUoKSkgfTsKLX0KLQotYm9vbCBTRFBQcm9jZXNzb3I6OmNhbGxTY3JpcHQoY29uc3QgU3RyaW5n
JiBmdW5jdGlvbk5hbWUsIGNvbnN0IFN0cmluZyYgYXJndW1lbnQsIFN0cmluZyYgb3V0UmVzdWx0
KSBjb25zdAotewotICAgIGlmICghc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVu
dD4oc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsKLSAgICBpZiAoIWRvY3VtZW50LT5mcmFtZSgp
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIW1faXNvbGF0ZWRXb3JsZCkKLSAg
ICAgICAgbV9pc29sYXRlZFdvcmxkID0gRE9NV3JhcHBlcldvcmxkOjpjcmVhdGUoY29tbW9uVk0o
KSk7Ci0KLSAgICBTY3JpcHRDb250cm9sbGVyJiBzY3JpcHRDb250cm9sbGVyID0gZG9jdW1lbnQt
PmZyYW1lKCktPnNjcmlwdCgpOwotICAgIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qg
PSBKU0M6OmpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KHNjcmlwdENvbnRyb2xsZXIuZ2xvYmFs
T2JqZWN0KCptX2lzb2xhdGVkV29ybGQpKTsKLSAgICBKU0M6OlZNJiB2bSA9IGdsb2JhbE9iamVj
dC0+dm0oKTsKLSAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKHZtKTsKLSAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7Ci0gICAgSlNDOjpFeGVjU3RhdGUqIGV4ZWMgPSBn
bG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKLQotICAgIEpTQzo6SlNWYWx1ZSBwcm9iZUZ1bmN0
aW9uVmFsdWUgPSBnbG9iYWxPYmplY3QtPmdldChleGVjLCBKU0M6OklkZW50aWZpZXI6OmZyb21T
dHJpbmcoZXhlYywgImdlbmVyYXRlIikpOwotICAgIGlmICghcHJvYmVGdW5jdGlvblZhbHVlLmlz
RnVuY3Rpb24oKSkgewotICAgICAgICBVUkwgc2NyaXB0VVJMOwotICAgICAgICBzY3JpcHRDb250
cm9sbGVyLmV2YWx1YXRlSW5Xb3JsZChTY3JpcHRTb3VyY2VDb2RlKFNEUFByb2Nlc3NvclNjcmlw
dFJlc291cmNlOjpzY3JpcHRTdHJpbmcoKSwgc2NyaXB0VVJMKSwgKm1faXNvbGF0ZWRXb3JsZCk7
Ci0gICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpIHsKLSAgICAgICAgICAg
IHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgIH0KLSAgICB9Ci0KLSAgICBKU0M6OkpTVmFsdWUgZnVuY3Rpb25WYWx1ZSA9IGdsb2JhbE9i
amVjdC0+Z2V0KGV4ZWMsIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCBmdW5jdGlv
bk5hbWUpKTsKLSAgICBpZiAoIWZ1bmN0aW9uVmFsdWUuaXNGdW5jdGlvbigpKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICBKU0M6OkpTT2JqZWN0KiBmdW5jdGlvbiA9IGZ1bmN0aW9uVmFs
dWUudG9PYmplY3QoZXhlYyk7Ci0gICAgSlNDOjpDYWxsRGF0YSBjYWxsRGF0YTsKLSAgICBKU0M6
OkNhbGxUeXBlIGNhbGxUeXBlID0gZnVuY3Rpb24tPm1ldGhvZFRhYmxlKHZtKS0+Z2V0Q2FsbERh
dGEoZnVuY3Rpb24sIGNhbGxEYXRhKTsKLSAgICBpZiAoY2FsbFR5cGUgPT0gSlNDOjpDYWxsVHlw
ZTo6Tm9uZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgSlNDOjpNYXJrZWRBcmd1bWVu
dEJ1ZmZlciBhcmdMaXN0OwotICAgIGFyZ0xpc3QuYXBwZW5kKEpTQzo6anNTdHJpbmcoZXhlYywg
YXJndW1lbnQpKTsKLQotICAgIEpTQzo6SlNWYWx1ZSByZXN1bHQgPSBKU0M6OmNhbGwoZXhlYywg
ZnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSwgZ2xvYmFsT2JqZWN0LCBhcmdMaXN0KTsKLSAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKSB7Ci0gICAgICAgIExPR19FUlJPUigi
U0RQUHJvY2Vzc29yIHNjcmlwdCB0aHJldyBpbiBmdW5jdGlvbiAlcyIsIGZ1bmN0aW9uTmFtZS5h
c2NpaSgpLmRhdGEoKSk7Ci0gICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7Ci0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAoIXJlc3VsdC5pc1N0cmluZygpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBvdXRSZXN1bHQgPSBhc1N0cmluZyhyZXN1bHQpLT52
YWx1ZShleGVjKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQotCi0jZW5kaWYgLy8gRU5BQkxFKFdFQl9SVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1NEUFByb2Nlc3Nvci5oIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9tZWRpYXN0cmVhbS9TRFBQcm9jZXNzb3IuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggY2E2MWM5YTkyZTQ3Y2UzZTkwMWVjMzYzMWE2OGY3N2IxMmM5MDJjNC4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL21lZGlhc3RyZWFtL1NEUFByb2Nlc3Nvci5oCisrKyAvZGV2L251bGwKQEAgLTEsNzggKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBFcmljc3NvbiBBQi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICog
ICAgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZQotICogICAgZGlzdHJpYnV0aW9uLgotICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBF
cmljc3NvbiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotICog
ICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShXRUJfUlRDKQotCi0jaW5jbHVk
ZSAiQ29udGV4dERlc3RydWN0aW9uT2JzZXJ2ZXIuaCIKLSNpbmNsdWRlICJJY2VDYW5kaWRhdGUu
aCIKLSNpbmNsdWRlICJNZWRpYUVuZHBvaW50U2Vzc2lvbkNvbmZpZ3VyYXRpb24uaCIKLSNpbmNs
dWRlIDx3dGYvUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1ZhcmlhbnQuaD4KLSNpbmNsdWRlIDx3
dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBET01X
cmFwcGVyV29ybGQ7Ci1jbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OwotCi1jbGFzcyBTRFBQ
cm9jZXNzb3IgOiBwdWJsaWMgQ29udGV4dERlc3RydWN0aW9uT2JzZXJ2ZXIgewotcHVibGljOgot
ICAgIGVudW0gY2xhc3MgUmVzdWx0IHsKLSAgICAgICAgU3VjY2VzcyA9IDEsCi0gICAgICAgIElu
dGVybmFsRXJyb3IgPSAyLAotICAgICAgICBQYXJzZUVycm9yID0gMwotICAgIH07Ci0KLSAgICBT
RFBQcm9jZXNzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCopOwotCi0gICAgUmVzdWx0IGdlbmVy
YXRlKGNvbnN0IE1lZGlhRW5kcG9pbnRTZXNzaW9uQ29uZmlndXJhdGlvbiYsIFN0cmluZyYgb3V0
U2RwU3RyaW5nKSBjb25zdDsKLSAgICBSZXN1bHQgcGFyc2UoY29uc3QgU3RyaW5nJiBzZHAsIFJl
ZlB0cjxNZWRpYUVuZHBvaW50U2Vzc2lvbkNvbmZpZ3VyYXRpb24+JikgY29uc3Q7Ci0KLSAgICBS
ZXN1bHQgZ2VuZXJhdGVDYW5kaWRhdGVMaW5lKGNvbnN0IEljZUNhbmRpZGF0ZSYsIFN0cmluZyYg
b3V0Q2FuZGlkYXRlTGluZSkgY29uc3Q7Ci0KLSAgICBzdHJ1Y3QgUGFyc2luZ1Jlc3VsdCB7Ci0g
ICAgICAgIFZhcmlhbnQ8SWNlQ2FuZGlkYXRlLCBSZXN1bHQ+IHJlc3VsdDsKLQotICAgICAgICBS
ZXN1bHQgcGFyc2luZ1N0YXR1cygpIGNvbnN0IHsgcmV0dXJuIFdURjo6aG9sZHNfYWx0ZXJuYXRp
dmU8SWNlQ2FuZGlkYXRlPihyZXN1bHQpID8gUmVzdWx0OjpTdWNjZXNzIDogV1RGOjpnZXQ8U0RQ
UHJvY2Vzc29yOjpSZXN1bHQ+KHJlc3VsdCk7IH0KLSAgICAgICAgSWNlQ2FuZGlkYXRlJiBjYW5k
aWRhdGUoKSB7IHJldHVybiBXVEY6OmdldDxJY2VDYW5kaWRhdGU+KHJlc3VsdCk7IH0KLSAgICB9
OwotICAgIFBhcnNpbmdSZXN1bHQgcGFyc2VDYW5kaWRhdGVMaW5lKGNvbnN0IFN0cmluZyYgY2Fu
ZGlkYXRlTGluZSkgY29uc3Q7Ci0KLXByaXZhdGU6Ci0gICAgYm9vbCBjYWxsU2NyaXB0KGNvbnN0
IFN0cmluZyYgZnVuY3Rpb25OYW1lLCBjb25zdCBTdHJpbmcmIGFyZ3VtZW50LCBTdHJpbmcmIG91
dFJlc3VsdCkgY29uc3Q7Ci0KLSAgICBtdXRhYmxlIFJlZlB0cjxET01XcmFwcGVyV29ybGQ+IG1f
aXNvbGF0ZWRXb3JsZDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8v
IEVOQUJMRShXRUJfUlRDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRp
YXN0cmVhbS9saWJ3ZWJydGMvTGliV2ViUlRDTWVkaWFFbmRwb2ludC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2xpYndlYnJ0Yy9MaWJXZWJSVENNZWRpYUVuZHBvaW50
LmNwcAppbmRleCA2ZWI0YTc0MDRjMmRiNjJmYmM3NWQ1ZjYzMGIwY2E4MWRjMzBjZmQ3Li4yMzg1
MWY5NjdkMWJkODc2ZmZkMWYzOTkzYzU2ZWVjN2ZjNGU2YThlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2xpYndlYnJ0Yy9MaWJXZWJSVENNZWRpYUVuZHBv
aW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2xpYndlYnJ0
Yy9MaWJXZWJSVENNZWRpYUVuZHBvaW50LmNwcApAQCAtODAsNyArODAsNiBAQCBib29sIExpYldl
YlJUQ01lZGlhRW5kcG9pbnQ6OnNldENvbmZpZ3VyYXRpb24oTGliV2ViUlRDUHJvdmlkZXImIGNs
aWVudCwgd2VicnRjOgogICAgIHJldHVybiBtX2JhY2tlbmQtPlNldENvbmZpZ3VyYXRpb24oV1RG
TW92ZShjb25maWd1cmF0aW9uKSk7CiB9CiAKLS8vIEZJWE1FOiB1bmlmeSB3aXRoIE1lZGlhRW5k
cG9pbnRTZXNzaW9uRGVzY3JpcHRpb246OnR5cGVTdHJpbmcoKQogc3RhdGljIGlubGluZSBjb25z
dCBjaGFyKiBzZXNzaW9uRGVzY3JpcHRpb25UeXBlKFJUQ1NkcFR5cGUgc2RwVHlwZSkKIHsKICAg
ICBzd2l0Y2ggKHNkcFR5cGUpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBiMGU3NTQ5NzBiMDQwYjNjNTUwYjA3MTcwNTA5NjFi
ZGRkODc2ZjI1Li4zNzM4YTBlN2U3NDI3YmI4MmYwMmFmYjk0NDA2ZTJlZTMxMjAxODg1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
KysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBA
IC0xNzkzLDYgKzE3OTMsOCBAQAogCQk0MUFCRTY3QjFEMDU4MERCMDA2RDg2MkQgLyogQ3Jvc3NP
cmlnaW5QcmVmbGlnaHRDaGVja2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA0MUFCRTY3QTFEMDU4MEQ1MDA2RDg2MkQgLyogQ3Jvc3NPcmlnaW5QcmVm
bGlnaHRDaGVja2VyLmggKi87IH07CiAJCTQxQUJFNjdDMUQwNTgwRTAwMDZEODYyRCAvKiBDcm9z
c09yaWdpblByZWZsaWdodENoZWNrZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNDFBQkU2NzkxRDA1ODBENTAwNkQ4NjJEIC8qIENyb3NzT3JpZ2lu
UHJlZmxpZ2h0Q2hlY2tlci5jcHAgKi87IH07CiAJCTQxQUQ3NTNBMUNFRjZCRDEwMEEzMTQ4NiAv
KiBGZXRjaE9wdGlvbnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDQxQUQ3NTM5MUNFRjZCQ0UwMEEzMTQ4NiAvKiBGZXRjaE9wdGlvbnMuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk0MUIyOEIxNDFGODUw
MUE2MDBGQjUyQUMgLyogTWVkaWFFbmRwb2ludENvbmZpZ3VyYXRpb24uY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDFCMjhCMTMxRjg1MDFBNDAwRkI1
MkFDIC8qIE1lZGlhRW5kcG9pbnRDb25maWd1cmF0aW9uLmNwcCAqLzsgfTsKKwkJNDFCMjhCMTUx
Rjg1MDFEMzAwRkI1MkFDIC8qIE1lZGlhRW5kcG9pbnRDb25maWd1cmF0aW9uLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MUIyOEIxMjFGODUwMUEzMDBG
QjUyQUMgLyogTWVkaWFFbmRwb2ludENvbmZpZ3VyYXRpb24uaCAqLzsgfTsKIAkJNDFCMkE2MjYx
RUYxQkY2RDAwMkI5RDdBIC8qIFdlYkF1ZGlvU291cmNlUHJvdmlkZXIuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxQjJBNjI1MUVGMUJGNjAwMDJCOUQ3
QSAvKiBXZWJBdWRpb1NvdXJjZVByb3ZpZGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNDFCNDU5RUYxRjU1RUJEMTAwMDBGNkZEIC8qIFJlYWRh
YmxlU3RyZWFtLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDQxQjQ1OUVEMUY1NUVCQzcwMDAwRjZGRCAvKiBSZWFkYWJsZVN0cmVhbS5jcHAgKi87IH07
CiAJCTQxQkY3MDBDMEZFODZGNDkwMDVFOERFQyAvKiBNZXNzYWdlUG9ydENoYW5uZWwuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxQkY3MDBBMEZFODZG
NDkwMDVFOERFQyAvKiBNZXNzYWdlUG9ydENoYW5uZWwuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMjc3OSw4ICsyNzgxLDYgQEAKIAkJNURGRThG
NTYwRDE2NDc3QjAwNzZFOTM3IC8qIFNjaGVkdWxlZEFjdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0EzNzhCQTBEMTVGNjQyMDBCNzkzRDYg
LyogU2NoZWR1bGVkQWN0aW9uLmNwcCAqLzsgfTsKIAkJNURGRThGNTcwRDE2NDc3QzAwNzZFOTM3
IC8qIFNjaGVkdWxlZEFjdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQkNBMzc4QkIwRDE1RjY0MjAwQjc5M0Q2IC8qIFNjaGVkdWxlZEFjdGlvbi5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTVERkVC
QUI3MTg1OTJCNkQwMEM3NUJFQiAvKiBXZWJLaXRBdmFpbGFiaWxpdHkuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVERkVCQUI2MTg1OTJCNkQwMEM3NUJF
QiAvKiBXZWJLaXRBdmFpbGFiaWxpdHkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwotCQk1RTE2QTJFNDFCRkE2NTBCMDAyOUEyMUUgLyogTWVkaWFFbmRw
b2ludFBlZXJDb25uZWN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1RTE2QTJFMzFCRkE2NEZCMDAyOUEyMUUgLyogTWVkaWFFbmRwb2ludFBlZXJD
b25uZWN0aW9uLmggKi87IH07Ci0JCTVFMTZBMkU1MUJGQTY1MEYwMDI5QTIxRSAvKiBNZWRpYUVu
ZHBvaW50UGVlckNvbm5lY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNUUxNkEyRTIxQkZBNjRGQjAwMjlBMjFFIC8qIE1lZGlhRW5kcG9pbnRQ
ZWVyQ29ubmVjdGlvbi5jcHAgKi87IH07CiAJCTVFMkM0MzUxMUJDRUUyRjYwMDAxRTJCQyAvKiBQ
ZWVyQ29ubmVjdGlvbkJhY2tlbmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDVFMkM0MzREMUJDRUUyRTUwMDAxRTJCQyAvKiBQZWVyQ29ubmVjdGlvbkJh
Y2tlbmQuaCAqLzsgfTsKIAkJNUUyQzQzNUYxQkNFRTMxRTAwMDFFMkJDIC8qIFJUQ1J0cFNlbmRl
clJlY2VpdmVyQmFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNUUyQzQzNUQxQkNFRTMwRDAwMDFFMkJDIC8qIFJUQ1J0cFNlbmRlclJlY2VpdmVyQmFz
ZS5oICovOyB9OwogCQk1RTJDNDM2MDFCQ0VFMzIzMDAwMUUyQkMgLyogUlRDUnRwU2VuZGVyLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVFMkM0MzU5
MUJDRUUzMEQwMDAxRTJCQyAvKiBSVENSdHBTZW5kZXIuY3BwICovOyB9OwpAQCAtMjgwMSwyNyAr
MjgwMSwxNCBAQAogCQk1RTJDNDM3NDFCQ0YwRDc1MDAwMUUyQkUgLyogSlNSVENSdHBQYXJhbWV0
ZXJzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1RTJD
NDM3MDFCQ0YwRDY5MDAwMUUyQkUgLyogSlNSVENSdHBQYXJhbWV0ZXJzLmggKi87IH07CiAJCTVF
MkM0MzdCMUJDRjlBNTcwMDAxRTJCQyAvKiBSVENQZWVyQ29ubmVjdGlvbkJ1aWx0aW5zLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1RTJDNDM3NjFCQ0Y5
QTBCMDAwMUUyQkMgLyogUlRDUGVlckNvbm5lY3Rpb25CdWlsdGlucy5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTVFMkM0MzdDMUJDRjlBODQwMDAx
RTJCQyAvKiBSVENQZWVyQ29ubmVjdGlvbkludGVybmFsc0J1aWx0aW5zLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1RTJDNDM3OTFCQ0Y5QTBCMDAwMUUy
QkMgLyogUlRDUGVlckNvbm5lY3Rpb25JbnRlcm5hbHNCdWlsdGlucy5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTVFNEVBQjA0MUQwNzE2NkEwMDA2
QTE4NCAvKiBNZWRpYUVuZHBvaW50U2Vzc2lvbkRlc2NyaXB0aW9uLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1RTRFQUIwMzFEMDcxNjRDMDAwNkExODQg
LyogTWVkaWFFbmRwb2ludFNlc3Npb25EZXNjcmlwdGlvbi5oICovOyB9OwotCQk1RTRFQUIwNTFE
MDcxNjZFMDAwNkExODQgLyogTWVkaWFFbmRwb2ludFNlc3Npb25EZXNjcmlwdGlvbi5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1RTRFQUIwMjFEMDcx
NjRDMDAwNkExODQgLyogTWVkaWFFbmRwb2ludFNlc3Npb25EZXNjcmlwdGlvbi5jcHAgKi87IH07
CiAJCTVFNUUyQjEzMUNGQzNFNzAwMDBDMEQ4NSAvKiBSVENSdHBUcmFuc2NlaXZlci5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1RTVFMkIxMDFDRkMz
RTRCMDAwQzBEODUgLyogUlRDUnRwVHJhbnNjZWl2ZXIuY3BwICovOyB9OwogCQk1RTVFMkIxNDFD
RkMzRTc1MDAwQzBEODUgLyogUlRDUnRwVHJhbnNjZWl2ZXIuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVFNUUyQjExMUNGQzNFNEIwMDBDMEQ4NSAvKiBS
VENSdHBUcmFuc2NlaXZlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07Ci0JCTVFQTNENkRGMUM4NTlEN0YwMDMwMEJCQiAvKiBNb2NrTWVkaWFFbmRwb2lu
dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUVBM0Q2
REUxQzg1OUQ1MzAwMzAwQkJCIC8qIE1vY2tNZWRpYUVuZHBvaW50LmggKi87IH07Ci0JCTVFQTNE
NkUwMUM4NTlEODQwMDMwMEJCQiAvKiBNb2NrTWVkaWFFbmRwb2ludC5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1RUEzRDZERDFDODU5RDUzMDAzMDBC
QkIgLyogTW9ja01lZGlhRW5kcG9pbnQuY3BwICovOyB9OwotCQk1RUEzRDZFMzFDODU5REMxMDAz
MDBCQkIgLyogU0RQUHJvY2Vzc29yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDVFQTNENkUxMUM4NTlEQUEwMDMwMEJCQiAvKiBTRFBQcm9jZXNzb3Iu
Y3BwICovOyB9OwotCQk1RUEzRDZFNDFDODU5REMxMDAzMDBCQkIgLyogU0RQUHJvY2Vzc29yLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1RUEzRDZFMjFD
ODU5REFBMDAzMDBCQkIgLyogU0RQUHJvY2Vzc29yLmggKi87IH07Ci0JCTVFQTNENkU3MUM4NUE5
REIwMDMwMEJCQiAvKiBTRFBQcm9jZXNzb3JTY3JpcHRSZXNvdXJjZS5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1RUEzRDZFNTFDODVBOUMzMDAzMDBC
QkIgLyogU0RQUHJvY2Vzc29yU2NyaXB0UmVzb3VyY2UuY3BwICovOyB9OwotCQk1RUEzRDZFODFD
ODVBOURCMDAzMDBCQkIgLyogU0RQUHJvY2Vzc29yU2NyaXB0UmVzb3VyY2UuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVFQTNENkU2MUM4NUE5QzMwMDMw
MEJCQiAvKiBTRFBQcm9jZXNzb3JTY3JpcHRSZXNvdXJjZS5oICovOyB9OwogCQk1RUE3MjVEMjFB
Q0FCRDQ3MDBFQUQxN0IgLyogTWVkaWFEZXZpY2VzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVFQTcyNUNEMUFDQUJDRDkwMEVBRDE3QiAvKiBNZWRp
YURldmljZXMuY3BwICovOyB9OwogCQk1RUE3MjVEMzFBQ0FCRDQ3MDBFQUQxN0IgLyogTWVkaWFE
ZXZpY2VzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
RUE3MjVDRTFBQ0FCQ0Q5MDBFQUQxN0IgLyogTWVkaWFEZXZpY2VzLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNUVBNzI1RDUxQUNBQkQ1NzAwRUFE
MTdCIC8qIE5hdmlnYXRvck1lZGlhRGV2aWNlcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1RUE3MjVDQTFBQ0FCQ0I1MDBFQUQxN0IgLyogTmF2aWdh
dG9yTWVkaWFEZXZpY2VzLmNwcCAqLzsgfTsKIAkJNUVBNzI1RDYxQUNBQkQ1NzAwRUFEMTdCIC8q
IE5hdmlnYXRvck1lZGlhRGV2aWNlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNUVBNzI1Q0IxQUNBQkNCNTAwRUFEMTdCIC8qIE5hdmlnYXRvck1lZGlh
RGV2aWNlcy5oICovOyB9OwogCQk1RUJCODkzMTFDNzc3N0ZGMDBDNjVENDEgLyogTWVkaWFQYXls
b2FkLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1RUJC
ODkyRjFDNzc3N0QwMDBDNjVENDEgLyogTWVkaWFQYXlsb2FkLmggKi87IH07Ci0JCTVFQkI4OTMy
MUM3Nzc4MjMwMEM2NUQ0MSAvKiBNZWRpYUVuZHBvaW50U2Vzc2lvbkNvbmZpZ3VyYXRpb24uaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVFQkI4OTJFMUM3
Nzc3RDAwMEM2NUQ0MSAvKiBNZWRpYUVuZHBvaW50U2Vzc2lvbkNvbmZpZ3VyYXRpb24uaCAqLzsg
fTsKIAkJNUVCQjg5MzMxQzc3NzgyOTAwQzY1RDQxIC8qIEljZUNhbmRpZGF0ZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUVCQjg5MzAxQzc3NzdFMTAw
QzY1RDQxIC8qIEljZUNhbmRpZGF0ZS5oICovOyB9OwotCQk1RUJCODkzNDFDNzc3ODI5MDBDNjVE
NDEgLyogTWVkaWFFbmRwb2ludC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1RUJCODkyQTFDNzc3N0QwMDBDNjVENDEgLyogTWVkaWFFbmRwb2ludC5j
cHAgKi87IH07Ci0JCTVFQkI4OTM1MUM3Nzc4MjkwMEM2NUQ0MSAvKiBNZWRpYUVuZHBvaW50Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1RUJCODkyQjFD
Nzc3N0QwMDBDNjVENDEgLyogTWVkaWFFbmRwb2ludC5oICovOyB9OwotCQk1RUJCODkzNjFDNzc3
ODI5MDBDNjVENDEgLyogTWVkaWFFbmRwb2ludENvbmZpZ3VyYXRpb24uY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUVCQjg5MkMxQzc3NzdEMDAwQzY1
RDQxIC8qIE1lZGlhRW5kcG9pbnRDb25maWd1cmF0aW9uLmNwcCAqLzsgfTsKLQkJNUVCQjg5Mzcx
Qzc3NzgyOTAwQzY1RDQxIC8qIE1lZGlhRW5kcG9pbnRDb25maWd1cmF0aW9uLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1RUJCODkyRDFDNzc3N0QwMDBD
NjVENDEgLyogTWVkaWFFbmRwb2ludENvbmZpZ3VyYXRpb24uaCAqLzsgfTsKIAkJNUVCQjg5Mzkx
Qzc3QzM5OTAwQzY1RDQxIC8qIFBlZXJNZWRpYURlc2NyaXB0aW9uLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1RUJCODkzODFDNzdCREE0MDBDNjVENDEg
LyogUGVlck1lZGlhRGVzY3JpcHRpb24uaCAqLzsgfTsKIAkJNUYyREJCRTkxNzhFM0M4MTAwMTQx
NDg2IC8qIENlcnRpZmljYXRlSW5mb01hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDVGMkRCQkU3MTc4RTMzMkQwMDE0MTQ4NiAvKiBDZXJ0aWZpY2F0
ZUluZm9NYWMubW0gKi87IH07CiAJCTVGQTkwNENBMTc4RTYxRjUwMDRDOEEyRCAvKiBDZXJ0aWZp
Y2F0ZUluZm8uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDVGMkRCQkU4MTc4RTMzNjkwMDE0MTQ4NiAvKiBDZXJ0aWZpY2F0ZUluZm8uaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtNjM5MCw3ICs2Mzc3LDYg
QEAKIAkJQ0RBQjZEMkUxN0M4MTRFRTAwQzYwQjM0IC8qIEpTTWVkaWFDb250cm9sc0hvc3QuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQUI2RDJDMTdD
ODE0RUUwMEM2MEIzNCAvKiBKU01lZGlhQ29udHJvbHNIb3N0LmggKi87IH07CiAJCUNEQUI2RDMx
MTdDOTI1OTUwMEM2MEIzNCAvKiBVc2VyQWdlbnRTY3JpcHRzLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREFCNkQyRjE3QzkyNTk1MDBDNjBCMzQgLyog
VXNlckFnZW50U2NyaXB0cy5oICovOyB9OwogCQlDREFCNkQzMjE3QzkyNTk1MDBDNjBCMzQgLyog
VXNlckFnZW50U2NyaXB0c0RhdGEuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQ0RBQjZEMzAxN0M5MjU5NTAwQzYwQjM0IC8qIFVzZXJBZ2VudFNjcmlw
dHNEYXRhLmNwcCAqLzsgfTsKLQkJQ0RBQjZEMzIxN0M5MjU5NTAwQzYwQjM1IC8qIFNEUFByb2Nl
c3NvclNjcmlwdHNEYXRhLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IENEQUI2RDMwMTdDOTI1OTUwMEM2MEIzNSAvKiBTRFBQcm9jZXNzb3JTY3JpcHRz
RGF0YS5jcHAgKi87IH07CiAJCUNEQUU4QzA5MTc0NkI5NTcwMDUzMkQ3OCAvKiBQbGF0Zm9ybU1l
ZGlhU2Vzc2lvbk1hbmFnZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQ0RBRThDMDcxNzQ2Qjk1NzAwNTMyRDc4IC8qIFBsYXRmb3JtTWVkaWFTZXNz
aW9uTWFuYWdlci5jcHAgKi87IH07CiAJCUNEQkVBRUFDMTlEOTJCNkMwMEJFQkE4OCAvKiBNZWRp
YVNlbGVjdGlvbkdyb3VwQVZGT2JqQy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IENEQkVBRUFBMTlEOTJCNkMwMEJFQkE4OCAvKiBNZWRpYVNlbGVjdGlv
bkdyb3VwQVZGT2JqQy5tbSAqLzsgfTsKIAkJQ0RCRUFFQUQxOUQ5MkI2QzAwQkVCQTg4IC8qIE1l
ZGlhU2VsZWN0aW9uR3JvdXBBVkZPYmpDLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBDREJFQUVBQjE5RDkyQjZDMDBCRUJBODggLyogTWVkaWFTZWxlY3Rp
b25Hcm91cEFWRk9iakMuaCAqLzsgfTsKQEAgLTk2MDYsNiArOTU5Miw4IEBACiAJCTQxQUJFNjc5
MUQwNTgwRDUwMDZEODYyRCAvKiBDcm9zc09yaWdpblByZWZsaWdodENoZWNrZXIuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ3Jvc3NPcmlnaW5QcmVmbGlnaHRDaGVj
a2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDFBQkU2N0ExRDA1ODBENTAw
NkQ4NjJEIC8qIENyb3NzT3JpZ2luUHJlZmxpZ2h0Q2hlY2tlci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBDcm9zc09yaWdpblByZWZsaWdodENoZWNrZXIuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDFBRDc1MzkxQ0VGNkJDRTAwQTMxNDg2IC8qIEZldGNoT3B0
aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGZXRjaE9wdGlvbnMuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDFCMjhCMTIxRjg1MDFBMzAwRkI1MkFDIC8q
IE1lZGlhRW5kcG9pbnRDb25maWd1cmF0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IE1lZGlhRW5kcG9pbnRDb25maWd1cmF0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTQxQjI4QjEzMUY4NTAxQTQwMEZCNTJBQyAvKiBNZWRpYUVuZHBvaW50Q29uZmln
dXJhdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNZWRpYUVu
ZHBvaW50Q29uZmlndXJhdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQx
QjJBNjI1MUVGMUJGNjAwMDJCOUQ3QSAvKiBXZWJBdWRpb1NvdXJjZVByb3ZpZGVyLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFdlYkF1ZGlvU291cmNlUHJvdmlkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNDFCNDU5REExRjRDQURCOTAwMDBGNkZEIC8qIFJlYWRhYmxlU3RyZWFtLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlYWRhYmxlU3RyZWFtLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxQjQ1OUVEMUY1NUVCQzcwMDAwRjZGRCAvKiBSZWFkYWJs
ZVN0cmVhbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZWFkYWJs
ZVN0cmVhbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMDczNCw4ICsxMDcy
Miw2IEBACiAJCTVEQjFCQzY4MTA3MTVBNjQwMEVGQUE0OSAvKiBUcmFuc2Zvcm1Tb3VyY2UuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVHJhbnNmb3JtU291cmNlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVEQjFCQzY5MTA3MTVBNjQwMEVGQUE0OSAvKiBUcmFu
c2Zvcm1Tb3VyY2VMaWJ4c2x0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFRyYW5zZm9ybVNvdXJjZUxpYnhzbHQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk1REZFQkFCNjE4NTkyQjZEMDBDNzVCRUIgLyogV2ViS2l0QXZhaWxhYmlsaXR5LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYktpdEF2YWlsYWJpbGl0eS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1RTE2QTJFMjFCRkE2NEZCMDAyOUEyMUUgLyogTWVk
aWFFbmRwb2ludFBlZXJDb25uZWN0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IE1lZGlhRW5kcG9pbnRQZWVyQ29ubmVjdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCTVFMTZBMkUzMUJGQTY0RkIwMDI5QTIxRSAvKiBNZWRpYUVuZHBvaW50
UGVlckNvbm5lY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWVkaWFF
bmRwb2ludFBlZXJDb25uZWN0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVF
MkM0MzREMUJDRUUyRTUwMDAxRTJCQyAvKiBQZWVyQ29ubmVjdGlvbkJhY2tlbmQuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGVlckNvbm5lY3Rpb25CYWNrZW5kLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVFMkM0MzU0MUJDRUUzMEQwMDAxRTJCQyAvKiBSVENQ
ZWVyQ29ubmVjdGlvbi5qcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuamF2YXNjcmlwdDsgcGF0aCA9
IFJUQ1BlZXJDb25uZWN0aW9uLmpzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1RTJD
NDM1NTFCQ0VFMzBEMDAwMUUyQkMgLyogUlRDUGVlckNvbm5lY3Rpb25JbnRlcm5hbHMuanMgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmphdmFzY3JpcHQ7IHBhdGggPSBSVENQZWVyQ29ubmVjdGlvbklu
dGVybmFscy5qczsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEwNzYzLDI5ICsxMDc0
OSwxNiBAQAogCQk1RTJDNDM3NjFCQ0Y5QTBCMDAwMUUyQkMgLyogUlRDUGVlckNvbm5lY3Rpb25C
dWlsdGlucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSVENQZWVyQ29ubmVj
dGlvbkJ1aWx0aW5zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVFMkM0Mzc4MUJD
RjlBMEIwMDAxRTJCQyAvKiBSVENQZWVyQ29ubmVjdGlvbkludGVybmFsc0J1aWx0aW5zLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJUQ1BlZXJDb25uZWN0aW9uSW50
ZXJuYWxzQnVpbHRpbnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1RTJDNDM3
OTFCQ0Y5QTBCMDAwMUUyQkMgLyogUlRDUGVlckNvbm5lY3Rpb25JbnRlcm5hbHNCdWlsdGlucy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSVENQZWVyQ29ubmVjdGlvbkludGVy
bmFsc0J1aWx0aW5zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTVFNEVBQjAyMUQw
NzE2NEMwMDA2QTE4NCAvKiBNZWRpYUVuZHBvaW50U2Vzc2lvbkRlc2NyaXB0aW9uLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1lZGlhRW5kcG9pbnRTZXNzaW9uRGVz
Y3JpcHRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1RTRFQUIwMzFEMDcx
NjRDMDAwNkExODQgLyogTWVkaWFFbmRwb2ludFNlc3Npb25EZXNjcmlwdGlvbi5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNZWRpYUVuZHBvaW50U2Vzc2lvbkRlc2NyaXB0aW9u
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVFNUUyQjEwMUNGQzNFNEIwMDBDMEQ4
NSAvKiBSVENSdHBUcmFuc2NlaXZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBSVENSdHBUcmFuc2NlaXZlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTVFNUUyQjExMUNGQzNFNEIwMDBDMEQ4NSAvKiBSVENSdHBUcmFuc2NlaXZlci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSVENSdHBUcmFuc2NlaXZlci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk1RTVFMkIxMjFDRkMzRTRCMDAwQzBEODUgLyogUlRDUnRw
VHJhbnNjZWl2ZXIuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFJUQ1J0cFRyYW5zY2VpdmVy
LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUU2NjUzMDkxREE0MzdCRjAwRkRE
ODRDIC8qIFJUQ0ljZVRyYW5zcG9ydC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBSVENJY2VUcmFuc3BvcnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNUVBM0Q2
REQxQzg1OUQ1MzAwMzAwQkJCIC8qIE1vY2tNZWRpYUVuZHBvaW50LmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1vY2tNZWRpYUVuZHBvaW50LmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNUVBM0Q2REUxQzg1OUQ1MzAwMzAwQkJCIC8qIE1vY2tNZWRp
YUVuZHBvaW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1vY2tNZWRpYUVu
ZHBvaW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTVFQTNENkUxMUM4NTlEQUEw
MDMwMEJCQiAvKiBTRFBQcm9jZXNzb3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gU0RQUHJvY2Vzc29yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
NUVBM0Q2RTIxQzg1OURBQTAwMzAwQkJCIC8qIFNEUFByb2Nlc3Nvci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBTRFBQcm9jZXNzb3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJNUVBM0Q2RTUxQzg1QTlDMzAwMzAwQkJCIC8qIFNEUFByb2Nlc3NvclNjcmlwdFJl
c291cmNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNEUFByb2Nl
c3NvclNjcmlwdFJlc291cmNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNUVB
M0Q2RTYxQzg1QTlDMzAwMzAwQkJCIC8qIFNEUFByb2Nlc3NvclNjcmlwdFJlc291cmNlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNEUFByb2Nlc3NvclNjcmlwdFJlc291cmNl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVFQTcyNUNBMUFDQUJDQjUwMEVBRDE3
QiAvKiBOYXZpZ2F0b3JNZWRpYURldmljZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gTmF2aWdhdG9yTWVkaWFEZXZpY2VzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNUVBNzI1Q0IxQUNBQkNCNTAwRUFEMTdCIC8qIE5hdmlnYXRvck1lZGlhRGV2
aWNlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBOYXZpZ2F0b3JNZWRpYURl
dmljZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUVBNzI1Q0MxQUNBQkNCNTAw
RUFEMTdCIC8qIE5hdmlnYXRvck1lZGlhRGV2aWNlcy5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRo
ID0gTmF2aWdhdG9yTWVkaWFEZXZpY2VzLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNUVBNzI1Q0QxQUNBQkNEOTAwRUFEMTdCIC8qIE1lZGlhRGV2aWNlcy5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNZWRpYURldmljZXMuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk1RUE3MjVDRTFBQ0FCQ0Q5MDBFQUQxN0IgLyogTWVkaWFEZXZp
Y2VzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1lZGlhRGV2aWNlcy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1RUE3MjVDRjFBQ0FCQ0Q5MDBFQUQxN0IgLyog
TWVkaWFEZXZpY2VzLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBNZWRpYURldmljZXMuaWRs
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1RUJCODkyQTFDNzc3N0QwMDBDNjVENDEg
LyogTWVkaWFFbmRwb2ludC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBNZWRpYUVuZHBvaW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNUVCQjg5
MkIxQzc3NzdEMDAwQzY1RDQxIC8qIE1lZGlhRW5kcG9pbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gTWVkaWFFbmRwb2ludC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQk1RUJCODkyQzFDNzc3N0QwMDBDNjVENDEgLyogTWVkaWFFbmRwb2ludENvbmZpZ3VyYXRp
b24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWVkaWFFbmRwb2lu
dENvbmZpZ3VyYXRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1RUJCODky
RDFDNzc3N0QwMDBDNjVENDEgLyogTWVkaWFFbmRwb2ludENvbmZpZ3VyYXRpb24uaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWVkaWFFbmRwb2ludENvbmZpZ3VyYXRpb24uaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNUVCQjg5MkUxQzc3NzdEMDAwQzY1RDQxIC8q
IE1lZGlhRW5kcG9pbnRTZXNzaW9uQ29uZmlndXJhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBNZWRpYUVuZHBvaW50U2Vzc2lvbkNvbmZpZ3VyYXRpb24uaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUVCQjg5MkYxQzc3NzdEMDAwQzY1RDQxIC8qIE1lZGlh
UGF5bG9hZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNZWRpYVBheWxvYWQu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUVCQjg5MzAxQzc3NzdFMTAwQzY1RDQx
IC8qIEljZUNhbmRpZGF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJY2VD
YW5kaWRhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUVCQjg5MzgxQzc3QkRB
NDAwQzY1RDQxIC8qIFBlZXJNZWRpYURlc2NyaXB0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFBlZXJNZWRpYURlc2NyaXB0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC0xNTE1Niw3ICsxNTEyOSw2IEBACiAJCUNEQUI2RDJDMTdDODE0RUUwMEM2MEIz
NCAvKiBKU01lZGlhQ29udHJvbHNIb3N0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEpTTWVkaWFDb250cm9sc0hvc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
Q0RBQjZEMkYxN0M5MjU5NTAwQzYwQjM0IC8qIFVzZXJBZ2VudFNjcmlwdHMuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVXNlckFnZW50U2NyaXB0cy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlDREFCNkQzMDE3QzkyNTk1MDBDNjBCMzQgLyogVXNlckFnZW50U2Ny
aXB0c0RhdGEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVXNlckFn
ZW50U2NyaXB0c0RhdGEuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlDREFCNkQz
MDE3QzkyNTk1MDBDNjBCMzUgLyogU0RQUHJvY2Vzc29yU2NyaXB0c0RhdGEuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU0RQUHJvY2Vzc29yU2NyaXB0c0RhdGEuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDREFFOEMwNzE3NDZCOTU3MDA1MzJENzgg
LyogUGxhdGZvcm1NZWRpYVNlc3Npb25NYW5hZ2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFBsYXRmb3JtTWVkaWFTZXNzaW9uTWFuYWdlci5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNEQUU4QzA4MTc0NkI5NTcwMDUzMkQ3OCAvKiBQbGF0Zm9y
bU1lZGlhU2Vzc2lvbk1hbmFnZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
UGxhdGZvcm1NZWRpYVNlc3Npb25NYW5hZ2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUNEQkVBRUFBMTlEOTJCNkMwMEJFQkE4OCAvKiBNZWRpYVNlbGVjdGlvbkdyb3VwQVZGT2Jq
Qy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IE1lZGlhU2VsZWN0
aW9uR3JvdXBBVkZPYmpDLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTY0MDMs
MTAgKzE2Mzc1LDYgQEAKIAkJCQkwN0FCRUY2RDFEOEExQzc2MDBGMjE5NzIgLyogTWVkaWFEZXZp
Y2VzRW51bWVyYXRpb25SZXF1ZXN0LmggKi8sCiAJCQkJMDczOTRFQzcxQkFCMkNDRDAwQkU5OUNE
IC8qIE1lZGlhRGV2aWNlc1JlcXVlc3QuY3BwICovLAogCQkJCTA3Mzk0RUM5MUJBQjJDRDcwMEJF
OTlDRCAvKiBNZWRpYURldmljZXNSZXF1ZXN0LmggKi8sCi0JCQkJNUUxNkEyRTIxQkZBNjRGQjAw
MjlBMjFFIC8qIE1lZGlhRW5kcG9pbnRQZWVyQ29ubmVjdGlvbi5jcHAgKi8sCi0JCQkJNUUxNkEy
RTMxQkZBNjRGQjAwMjlBMjFFIC8qIE1lZGlhRW5kcG9pbnRQZWVyQ29ubmVjdGlvbi5oICovLAot
CQkJCTVFNEVBQjAyMUQwNzE2NEMwMDA2QTE4NCAvKiBNZWRpYUVuZHBvaW50U2Vzc2lvbkRlc2Ny
aXB0aW9uLmNwcCAqLywKLQkJCQk1RTRFQUIwMzFEMDcxNjRDMDAwNkExODQgLyogTWVkaWFFbmRw
b2ludFNlc3Npb25EZXNjcmlwdGlvbi5oICovLAogCQkJCTA3MjIxQjRDMTdDRUMzMjcwMDg0OEU1
MSAvKiBNZWRpYVN0cmVhbS5jcHAgKi8sCiAJCQkJMDcyMjFCNEQxN0NFQzMyNzAwODQ4RTUxIC8q
IE1lZGlhU3RyZWFtLmggKi8sCiAJCQkJMDcyMjFCNEUxN0NFQzMyNzAwODQ4RTUxIC8qIE1lZGlh
U3RyZWFtLmlkbCAqLywKQEAgLTE2NTAxLDggKzE2NDY5LDYgQEAKIAkJCQk1RTJDNDM2NDFCQ0VF
MzcyMDAwMUUyQkMgLyogUlRDVHJhY2tFdmVudC5jcHAgKi8sCiAJCQkJNUUyQzQzNjUxQkNFRTM3
MjAwMDFFMkJDIC8qIFJUQ1RyYWNrRXZlbnQuaCAqLywKIAkJCQk1RTJDNDM2NjFCQ0VFMzcyMDAw
MUUyQkMgLyogUlRDVHJhY2tFdmVudC5pZGwgKi8sCi0JCQkJNUVBM0Q2RTExQzg1OURBQTAwMzAw
QkJCIC8qIFNEUFByb2Nlc3Nvci5jcHAgKi8sCi0JCQkJNUVBM0Q2RTIxQzg1OURBQTAwMzAwQkJC
IC8qIFNEUFByb2Nlc3Nvci5oICovLAogCQkJCTA3MjIxQjhEMTdDRUMzMjcwMDg0OEU1MSAvKiBV
c2VyTWVkaWFDbGllbnQuaCAqLywKIAkJCQkwNzIyMUI4RTE3Q0VDMzI3MDA4NDhFNTEgLyogVXNl
ck1lZGlhQ29udHJvbGxlci5jcHAgKi8sCiAJCQkJMDcyMjFCOEYxN0NFQzMyNzAwODQ4RTUxIC8q
IFVzZXJNZWRpYUNvbnRyb2xsZXIuaCAqLywKQEAgLTE2NTI1LDExICsxNjQ5MSw4IEBACiAJCQkJ
NUVCQjg5MzAxQzc3NzdFMTAwQzY1RDQxIC8qIEljZUNhbmRpZGF0ZS5oICovLAogCQkJCTFCRTVC
RkMxMUQ1MTU3MTUwMDE2NjZEOSAvKiBNZWRpYUNvbnN0cmFpbnRzLmNwcCAqLywKIAkJCQkwNzIy
MUI5OTE3Q0YwQUQ0MDA4NDhFNTEgLyogTWVkaWFDb25zdHJhaW50cy5oICovLAotCQkJCTVFQkI4
OTJBMUM3Nzc3RDAwMEM2NUQ0MSAvKiBNZWRpYUVuZHBvaW50LmNwcCAqLywKLQkJCQk1RUJCODky
QjFDNzc3N0QwMDBDNjVENDEgLyogTWVkaWFFbmRwb2ludC5oICovLAotCQkJCTVFQkI4OTJDMUM3
Nzc3RDAwMEM2NUQ0MSAvKiBNZWRpYUVuZHBvaW50Q29uZmlndXJhdGlvbi5jcHAgKi8sCi0JCQkJ
NUVCQjg5MkQxQzc3NzdEMDAwQzY1RDQxIC8qIE1lZGlhRW5kcG9pbnRDb25maWd1cmF0aW9uLmgg
Ki8sCi0JCQkJNUVCQjg5MkUxQzc3NzdEMDAwQzY1RDQxIC8qIE1lZGlhRW5kcG9pbnRTZXNzaW9u
Q29uZmlndXJhdGlvbi5oICovLAorCQkJCTQxQjI4QjEzMUY4NTAxQTQwMEZCNTJBQyAvKiBNZWRp
YUVuZHBvaW50Q29uZmlndXJhdGlvbi5jcHAgKi8sCisJCQkJNDFCMjhCMTIxRjg1MDFBMzAwRkI1
MkFDIC8qIE1lZGlhRW5kcG9pbnRDb25maWd1cmF0aW9uLmggKi8sCiAJCQkJNUVCQjg5MkYxQzc3
NzdEMDAwQzY1RDQxIC8qIE1lZGlhUGF5bG9hZC5oICovLAogCQkJCTA3MEY1NDk3MTdGMTJGNkIw
MDE2OUUwNCAvKiBNZWRpYVN0cmVhbUNvbnN0cmFpbnRzVmFsaWRhdGlvbkNsaWVudC5oICovLAog
CQkJCTA3MTE1ODhGMTdERjYzMzcwMEVERkUyQiAvKiBNZWRpYVN0cmVhbVByaXZhdGUuY3BwICov
LApAQCAtMTY1NjcsOCArMTY1MzAsNiBAQAogCQkJCTA3MjIxQkFEMTdDRjBBRDQwMDg0OEU1MSAv
KiBSVENTZXNzaW9uRGVzY3JpcHRpb25SZXF1ZXN0LmggKi8sCiAJCQkJMzEzNTkxMDUxRTdEREM2
MDAwRjMwNjMwIC8qIFJUQ1NpZ25hbGluZ1N0YXRlLmggKi8sCiAJCQkJMDcyMjFCQjAxN0NGMEFE
NDAwODQ4RTUxIC8qIFJUQ1ZvaWRSZXF1ZXN0LmggKi8sCi0JCQkJNUVBM0Q2RTUxQzg1QTlDMzAw
MzAwQkJCIC8qIFNEUFByb2Nlc3NvclNjcmlwdFJlc291cmNlLmNwcCAqLywKLQkJCQk1RUEzRDZF
NjFDODVBOUMzMDAzMDBCQkIgLyogU0RQUHJvY2Vzc29yU2NyaXB0UmVzb3VyY2UuaCAqLywKIAkJ
CQkwNzBFODFEMDFCRjI3NjU2MDAxRkRBNDggLyogVmlkZW9UcmFja1ByaXZhdGVNZWRpYVN0cmVh
bS5oICovLAogCQkJCTQxQjJBNjI1MUVGMUJGNjAwMDJCOUQ3QSAvKiBXZWJBdWRpb1NvdXJjZVBy
b3ZpZGVyLmggKi8sCiAJCQkpOwpAQCAtMTkyNDUsOCArMTkyMDYsNiBAQAogCQkJCTA3N0I2NDE1
MUI5NUY3MDMwMDNFOUFENSAvKiBNZWRpYVBsYXliYWNrVGFyZ2V0TW9jay5oICovLAogCQkJCTA3
N0I2NDEwMUI5NEYxMkUwMDNFOUFENSAvKiBNZWRpYVBsYXliYWNrVGFyZ2V0UGlja2VyTW9jay5j
cHAgKi8sCiAJCQkJMDc3QjY0MTExQjk0RjEyRTAwM0U5QUQ1IC8qIE1lZGlhUGxheWJhY2tUYXJn
ZXRQaWNrZXJNb2NrLmggKi8sCi0JCQkJNUVBM0Q2REQxQzg1OUQ1MzAwMzAwQkJCIC8qIE1vY2tN
ZWRpYUVuZHBvaW50LmNwcCAqLywKLQkJCQk1RUEzRDZERTFDODU5RDUzMDAzMDBCQkIgLyogTW9j
a01lZGlhRW5kcG9pbnQuaCAqLywKIAkJCQkwN0Q2QTRGMTFCRUQ1Rjg4MDAxNzQxNDYgLyogTW9j
a1JlYWx0aW1lQXVkaW9Tb3VyY2UuY3BwICovLAogCQkJCTA3RDZBNEYyMUJFRDVGODgwMDE3NDE0
NiAvKiBNb2NrUmVhbHRpbWVBdWRpb1NvdXJjZS5oICovLAogCQkJCTA3RDZBNEVEMUJFQ0YyRDIw
MDE3NDE0NiAvKiBNb2NrUmVhbHRpbWVNZWRpYVNvdXJjZS5jcHAgKi8sCkBAIC0xOTQwMyw3ICsx
OTM2Miw2IEBACiAJCQkJNUUyQzQzNzYxQkNGOUEwQjAwMDFFMkJDIC8qIFJUQ1BlZXJDb25uZWN0
aW9uQnVpbHRpbnMuaCAqLywKIAkJCQk1RTJDNDM3ODFCQ0Y5QTBCMDAwMUUyQkMgLyogUlRDUGVl
ckNvbm5lY3Rpb25JbnRlcm5hbHNCdWlsdGlucy5jcHAgKi8sCiAJCQkJNUUyQzQzNzkxQkNGOUEw
QjAwMDFFMkJDIC8qIFJUQ1BlZXJDb25uZWN0aW9uSW50ZXJuYWxzQnVpbHRpbnMuaCAqLywKLQkJ
CQlDREFCNkQzMDE3QzkyNTk1MDBDNjBCMzUgLyogU0RQUHJvY2Vzc29yU2NyaXB0c0RhdGEuY3Bw
ICovLAogCQkJCTQzQjg1RUQyMThDQkVDNTIwMEUzMUFGNCAvKiBTZWxlY3RvclBzZXVkb0NsYXNz
QW5kQ29tcGF0aWJpbGl0eUVsZW1lbnRNYXAuY3BwICovLAogCQkJCTQzQjg1RUQzMThDQkVDNTIw
MEUzMUFGNCAvKiBTZWxlY3RvclBzZXVkb0NsYXNzQW5kQ29tcGF0aWJpbGl0eUVsZW1lbnRNYXAu
Z3BlcmYgKi8sCiAJCQkJMjZBQTBGOUQxOEQyQTE4QjAwNDE5MzgxIC8qIFNlbGVjdG9yUHNldWRv
RWxlbWVudFR5cGVNYXAuY3BwICovLApAQCAtMjYxMjksNiArMjYwODcsMTIgQEAKIAkJCWNoaWxk
cmVuID0gKAogCQkJCUNFMjYxNkE0MTg3RTY1QzEwMDc5NTVGMyAvKiBpb3MgKi8sCiAJCQkJMkQ1
MDM2NjYxQkNERERDNDAwRTIwQkIzIC8qIG1hYyAqLywKKwkJCQk3Q0QwRTJCNjFGODBBNDgyMDAx
NkE0Q0UgLyogQWJvcnRDb250cm9sbGVyLmNwcCAqLywKKwkJCQk3Q0QwRTJCNTFGODBBNDgyMDAx
NkE0Q0UgLyogQWJvcnRDb250cm9sbGVyLmggKi8sCisJCQkJN0NEMEUyQjcxRjgwQTQ4MjAwMTZB
NENFIC8qIEFib3J0Q29udHJvbGxlci5pZGwgKi8sCisJCQkJN0NEMEUyQkQxRjgwQTU2RTAwMTZB
NENFIC8qIEFib3J0U2lnbmFsLmNwcCAqLywKKwkJCQk3Q0QwRTJCQzFGODBBNTZFMDAxNkE0Q0Ug
LyogQWJvcnRTaWduYWwuaCAqLywKKwkJCQk3Q0QwRTJCRTFGODBBNTZFMDAxNkE0Q0UgLyogQWJv
cnRTaWduYWwuaWRsICovLAogCQkJCTdDNTIyMjk3MUUxREFFMTYwMDJDQjhGNyAvKiBBY3RpdmVE
T01DYWxsYmFjay5jcHAgKi8sCiAJCQkJN0M1MjIyOTgxRTFEQUUxNjAwMkNCOEY3IC8qIEFjdGl2
ZURPTUNhbGxiYWNrLmggKi8sCiAJCQkJN0NEMEJBMDIxQjhGNzlDOTAwNUNFQkJFIC8qIEFjdGl2
ZURPTUNhbGxiYWNrTWljcm90YXNrLmNwcCAqLywKQEAgLTI2MTM2LDEyICsyNjEwMCw2IEBACiAJ
CQkJRTFDNERFNkQwRUE3NUM2NTAwMjNDQ0Q2IC8qIEFjdGl2ZURPTU9iamVjdC5jcHAgKi8sCiAJ
CQkJRTFDNERFNjgwRUE3NUMxRTAwMjNDQ0Q2IC8qIEFjdGl2ZURPTU9iamVjdC5oICovLAogCQkJ
CTgzQkI1Qzg3MUQ1RDZGM0EwMDVBNzFGNCAvKiBBbGxEZXNjZW5kYW50c0NvbGxlY3Rpb24uaCAq
LywKLQkJCQk3Q0QwRTJCNTFGODBBNDgyMDAxNkE0Q0UgLyogQWJvcnRDb250cm9sbGVyLmggKi8s
Ci0JCQkJN0NEMEUyQjYxRjgwQTQ4MjAwMTZBNENFIC8qIEFib3J0Q29udHJvbGxlci5jcHAgKi8s
Ci0JCQkJN0NEMEUyQjcxRjgwQTQ4MjAwMTZBNENFIC8qIEFib3J0Q29udHJvbGxlci5pZGwgKi8s
Ci0JCQkJN0NEMEUyQkMxRjgwQTU2RTAwMTZBNENFIC8qIEFib3J0U2lnbmFsLmggKi8sCi0JCQkJ
N0NEMEUyQkQxRjgwQTU2RTAwMTZBNENFIC8qIEFib3J0U2lnbmFsLmNwcCAqLywKLQkJCQk3Q0Qw
RTJCRTFGODBBNTZFMDAxNkE0Q0UgLyogQWJvcnRTaWduYWwuaWRsICovLAogCQkJCTMxOTg0N0ZF
MUExRDgxNjcwMEExMzMxOCAvKiBBbmltYXRpb25FdmVudC5jcHAgKi8sCiAJCQkJMzE5ODQ3RkYx
QTFEODE2NzAwQTEzMzE4IC8qIEFuaW1hdGlvbkV2ZW50LmggKi8sCiAJCQkJMzE5ODQ4MDAxQTFE
ODE2NzAwQTEzMzE4IC8qIEFuaW1hdGlvbkV2ZW50LmlkbCAqLywKQEAgLTI3MDM2LDYgKzI2OTk0
LDggQEAKIAkJCWlzYSA9IFBCWEhlYWRlcnNCdWlsZFBoYXNlOwogCQkJYnVpbGRBY3Rpb25NYXNr
ID0gMjE0NzQ4MzY0NzsKIAkJCWZpbGVzID0gKAorCQkJCTdDRDBFMkI4MUY4MEE0ODIwMDE2QTRD
RSAvKiBBYm9ydENvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTdDRDBFMkJGMUY4MEE1
NkUwMDE2QTRDRSAvKiBBYm9ydFNpZ25hbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRjQ4MjIzMTMx
RTM4NkUyNDAwNjZGQzc5IC8qIEFic3RyYWN0UGFzdGVib2FyZC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJNDFFMUIxRDEwRkY1OTg2OTAwNTc2QjNCIC8qIEFic3RyYWN0V29ya2VyLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkyOUE4MTIyRTBGQkI5QzFEMDA1MTAyOTMgLyogQWNjZXNzaWJpbGl0eUFSSUFH
cmlkQ2VsbC5oIGluIEhlYWRlcnMgKi8sCkBAIC0yODMzMyw2ICsyODI5Myw4IEBACiAJCQkJMkQw
QjRBQUIxOERBMUNDRDAwNDM0REUxIC8qIElPU3VyZmFjZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MUMyMUU1N0QxODNFRDFGRjAwMUMyODlEIC8qIElPU3VyZmFjZVBvb2wuaCBpbiBIZWFkZXJzICov
LAogCQkJCTA3QUM0NzAyMTk1MjEwMjEwMEVFOTcyMyAvKiBJU09WVFRDdWUuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTdDMzBEOTg0MUY4MTVBRUMwMDI2ODM1NiAvKiBKU0Fib3J0Q29udHJvbGxlci5o
IGluIEhlYWRlcnMgKi8sCisJCQkJN0MzMEQ5ODYxRjgxNUFFQzAwMjY4MzU2IC8qIEpTQWJvcnRT
aWduYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTQxOEY4ODA1MEZGOTU3QUYwMDgwRjA0NSAvKiBK
U0Fic3RyYWN0V29ya2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQk1NzA0NDA1QTFFNTM5MzYyMDAz
NTY2MDEgLyogSlNBZXNDYmNDZmJQYXJhbXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTU3RTFFNUFE
MUU4REQwOUIwMEVFMzdDOSAvKiBKU0Flc0N0clBhcmFtcy5oIGluIEhlYWRlcnMgKi8sCkBAIC0y
OTI1NiwxMSArMjkyMTgsNyBAQAogCQkJCTA3RkU5OUREMTg4MDdBN0QwMDI1NjY0OCAvKiBNZWRp
YUVsZW1lbnRTZXNzaW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkyRDlCRjcwNjFEQkZCQjI0MDA3
QTdEOTkgLyogTWVkaWFFbmNyeXB0ZWRFdmVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkQ5QkY3
MDgxREJGQkIyNDAwN0E3RDk5IC8qIE1lZGlhRW5jcnlwdGVkRXZlbnRJbml0LmggaW4gSGVhZGVy
cyAqLywKLQkJCQk1RUJCODkzNTFDNzc3ODI5MDBDNjVENDEgLyogTWVkaWFFbmRwb2ludC5oIGlu
IEhlYWRlcnMgKi8sCi0JCQkJNUVCQjg5MzcxQzc3NzgyOTAwQzY1RDQxIC8qIE1lZGlhRW5kcG9p
bnRDb25maWd1cmF0aW9uLmggaW4gSGVhZGVycyAqLywKLQkJCQk1RTE2QTJFNDFCRkE2NTBCMDAy
OUEyMUUgLyogTWVkaWFFbmRwb2ludFBlZXJDb25uZWN0aW9uLmggaW4gSGVhZGVycyAqLywKLQkJ
CQk1RUJCODkzMjFDNzc3ODIzMDBDNjVENDEgLyogTWVkaWFFbmRwb2ludFNlc3Npb25Db25maWd1
cmF0aW9uLmggaW4gSGVhZGVycyAqLywKLQkJCQk1RTRFQUIwNDFEMDcxNjZBMDAwNkExODQgLyog
TWVkaWFFbmRwb2ludFNlc3Npb25EZXNjcmlwdGlvbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJNDFC
MjhCMTUxRjg1MDFEMzAwRkI1MkFDIC8qIE1lZGlhRW5kcG9pbnRDb25maWd1cmF0aW9uLmggaW4g
SGVhZGVycyAqLywKIAkJCQlFNDQ2MTNBRDBDRDYzMzEwMDBGQURBNzUgLyogTWVkaWFFcnJvci5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJNEUxOTU5MjIwQTM5REFCQTAwMjIwRkU1IC8qIE1lZGlhRmVh
dHVyZU5hbWVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwN0E2RDFFQzE0OTExMzc3MDAwNTFEMEMg
LyogTWVkaWFGcmFnbWVudFVSSVBhcnNlci5oIGluIEhlYWRlcnMgKi8sCkBAIC0yOTM0NSwxMSAr
MjkzMDMsOSBAQAogCQkJCTUyRjEwODY2MTYyQjZEQTgwMDlBQzgxRSAvKiBNaXhlZENvbnRlbnRD
aGVja2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQlDREYyQjAxMTE4MjA1NDA2MDBGMkI0MjQgLyog
TW9ja0JveC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQ0RGNEI3MjQxRTAzQkY4MTAwRTIzNUEyIC8q
IE1vY2tDRE1GYWN0b3J5LmggaW4gSGVhZGVycyAqLywKLQkJCQk3QzMwRDk4NDFGODE1QUVDMDAy
NjgzNTYgLyogSlNBYm9ydENvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUNERjRCNzIw
MUUwM0JGNkYwMEUyMzVBMiAvKiBNb2NrQ0RNRmFjdG9yeS5pZGwgaW4gSGVhZGVycyAqLywKIAkJ
CQk1MTA1OEFFMDFENjdDMjI5MDA5QTUzOEMgLyogTW9ja0dhbWVwYWQuaCBpbiBIZWFkZXJzICov
LAogCQkJCTUxMDU4QUUyMUQ2N0MyMjkwMDlBNTM4QyAvKiBNb2NrR2FtZXBhZFByb3ZpZGVyLmgg
aW4gSGVhZGVycyAqLywKLQkJCQk1RUEzRDZERjFDODU5RDdGMDAzMDBCQkIgLyogTW9ja01lZGlh
RW5kcG9pbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUNERjJCMDEzMTgyMDU0MDYwMEYyQjQyNCAv
KiBNb2NrTWVkaWFQbGF5ZXJNZWRpYVNvdXJjZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQ0RGMkIw
MTUxODIwNTQwNjAwRjJCNDI0IC8qIE1vY2tNZWRpYVNvdXJjZVByaXZhdGUuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTA3RDZBNEY0MUJFRDVGODgwMDE3NDE0NiAvKiBNb2NrUmVhbHRpbWVBdWRpb1Nv
dXJjZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0yOTk4NCw4ICsyOTk0MCw2IEBACiAJCQkJODNDNTc5
NUQxREE1QzMwMTAwNkZBQ0E4IC8qIFNjcm9sbFRvT3B0aW9ucy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJOTNDMDlDODYwQjA2NTdBQTAwNUFCRDREIC8qIFNjcm9sbFR5cGVzLmggaW4gSGVhZGVycyAq
LywKIAkJCQlCQzZENkUyNjA5QUY5NDM1MDBGNTk3NTkgLyogU2Nyb2xsVmlldy5oIGluIEhlYWRl
cnMgKi8sCi0JCQkJNUVBM0Q2RTQxQzg1OURDMTAwMzAwQkJCIC8qIFNEUFByb2Nlc3Nvci5oIGlu
IEhlYWRlcnMgKi8sCi0JCQkJNUVBM0Q2RTgxQzg1QTlEQjAwMzAwQkJCIC8qIFNEUFByb2Nlc3Nv
clNjcmlwdFJlc291cmNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlGNTVCM0REMjEyNTFGMTJEMDAz
RUYyNjkgLyogU2VhcmNoSW5wdXRUeXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBQjcxNzA4OTBC
MzExODA4MDAxNzEyM0UgLyogU2VhcmNoUG9wdXBNZW51LmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RTcwNThGNDFCQzVDRURBMDA0NUE1MDcgLyogU2VhcmNoUG9wdXBNZW51Q29jb2EuaCBpbiBIZWFk
ZXJzICovLApAQCAtMzAyMzcsNyArMzAxOTEsNiBAQAogCQkJCUIyMjI3OTk1MEQwMEJGMjIwMDcx
Qjc4MiAvKiBTVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QjIyMjc5OTgwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR0FuaW1hdGlvbkVsZW1lbnQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTQzOUQzMzQ1MTNBNjkxMUMwMEMyMEY0RiAvKiBTVkdBbmltYXRvckZhY3Rv
cnkuaCBpbiBIZWFkZXJzICovLAotCQkJCTdDMzBEOTg2MUY4MTVBRUMwMDI2ODM1NiAvKiBKU0Fi
b3J0U2lnbmFsLmggaW4gSGVhZGVycyAqLywKIAkJCQkwOEZCM0Y4NDEzQkM3NTRDMDA5OUZDMTgg
LyogU1ZHQXR0cmlidXRlVG9Qcm9wZXJ0eU1hcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjIyMjc5
OUMwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR0NpcmNsZUVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAog
CQkJCUIyMjI3OTlGMEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdDbGlwUGF0aEVsZW1lbnQuaCBpbiBI
ZWFkZXJzICovLApAQCAtMzAyODEsNyArMzAyMzQsNiBAQAogCQkJCUIyMjI3QTA2MEQwMEJGMjIw
MDcxQjc4MiAvKiBTVkdGRVRpbGVFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjIyN0Ew
OTBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHRkVUdXJidWxlbmNlRWxlbWVudC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJODQ1RTcyRkMwRkQyNjIzOTAwQTg3RDc5IC8qIFNWR0ZpbHRlci5oIGluIEhlYWRl
cnMgKi8sCi0JCQkJN0NEMEUyQkYxRjgwQTU2RTAwMTZBNENFIC8qIEFib3J0U2lnbmFsLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwODFFQkYzQjBGRDM0RjQxMDBEQTc1NTkgLyogU1ZHRmlsdGVyQnVp
bGRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjIyMjdBMEMwRDAwQkYyMjAwNzFCNzgyIC8qIFNW
R0ZpbHRlckVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyMjI3QTBGMEQwMEJGMjIwMDcx
Qjc4MiAvKiBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMuaCBpbiBIZWFkZXJz
ICovLApAQCAtMzA3MzYsNyArMzA2ODgsNiBAQAogCQkJCTc3QTE3QTc4MTJGMjg2NDIwMDRFMDJG
NiAvKiBXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMTZC
REI4QzFFNkUxNTMwMDBERTBENUEgLyogV2ViR1BVTGF5ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUE1RTIxMjNDMUU0OTI0QTQwMENFMTA0NCAvKiBXZWJIZWFwQWdlbnQuaCBpbiBIZWFkZXJzICov
LAotCQkJCTdDRDBFMkI4MUY4MEE0ODIwMDE2QTRDRSAvKiBBYm9ydENvbnRyb2xsZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUE1ODQwRTI1MTg3QjhBQzIwMDg0M0IxMCAvKiBXZWJJbmplY3RlZFNj
cmlwdEhvc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1ODRGRTMwMTg2NENCODQwMDg0M0IxMCAv
KiBXZWJJbmplY3RlZFNjcmlwdE1hbmFnZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUY0ODIyMzEx
MUUzODY5QjgwMDY2RkM3OSAvKiBXZWJJdGVtUHJvdmlkZXJQYXN0ZWJvYXJkLmggaW4gSGVhZGVy
cyAqLywKQEAgLTMxMjI2LDYgKzMxMTc3LDggQEAKIAkJCWlzYSA9IFBCWFNvdXJjZXNCdWlsZFBo
YXNlOwogCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKIAkJCWZpbGVzID0gKAorCQkJ
CTdDRDBFMkI5MUY4MEE0ODIwMDE2QTRDRSAvKiBBYm9ydENvbnRyb2xsZXIuY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJN0NEMEUyQzAxRjgwQTU2RTAwMTZBNENFIC8qIEFib3J0U2lnbmFsLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTQxRTFCMUQwMEZGNTk4NjkwMDU3NkIzQiAvKiBBYnN0cmFjdFdv
cmtlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzN0Y1N0FCOTFBNTA3MjY5MDA4NzZGOTggLyog
QWNjZXNzaWJpbGl0eUFSSUFHcmlkLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTM3RjU3QUJBMUE1
MDcyNkYwMDg3NkY5OCAvKiBBY2Nlc3NpYmlsaXR5QVJJQUdyaWRDZWxsLmNwcCBpbiBTb3VyY2Vz
ICovLApAQCAtMzE1MDMsNyArMzE0NTYsNiBAQAogCQkJCUNFMjg0OTg5MUNBMzYxNDYwMEI0QTU3
RiAvKiBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVOYW1lcy5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlDRTc5OUZBNzFDNkE1MDU3MDA5N0I1MTggLyogQ29udGVudFNlY3VyaXR5UG9saWN5
TWVkaWFMaXN0RGlyZWN0aXZlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUNFNkRBREY5MUM1OTFF
NkEwMDNGNkE4OCAvKiBDb250ZW50U2VjdXJpdHlQb2xpY3lSZXNwb25zZUhlYWRlcnMuY3BwIGlu
IFNvdXJjZXMgKi8sCi0JCQkJN0MzMEQ5ODUxRjgxNUFFQzAwMjY4MzU2IC8qIEpTQWJvcnRTaWdu
YWwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQ0U3OTlGOUYxQzZBNEMxNjAwOTdCNTE4IC8qIENv
bnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDRTc5OUY5
NzFDNkE0NkJDMDA5N0I1MTggLyogQ29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlDRTc5OUZBQjFDNkE1MDY2MDA5N0I1MTggLyogQ29udGVudFNl
Y3VyaXR5UG9saWN5U291cmNlTGlzdERpcmVjdGl2ZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTMx
NTc1LDcgKzMxNTI3LDYgQEAKIAkJCQlFMTIzM0YxMDE4NUE0MTMwMDA4REZBRjUgLyogQ3J5cHRv
QWxnb3JpdGhtUlNBRVNfUEtDUzFfdjFfNU1hYy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFMUJE
MzMxOTE4MkQ4REREMDBDMDVEOUYgLyogQ3J5cHRvQWxnb3JpdGhtUlNBU1NBX1BLQ1MxX3YxXzUu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTFDMjY2RDgxODMxN0FCNDAwM0Y4QjMzIC8qIENyeXB0
b0FsZ29yaXRobVJTQVNTQV9QS0NTMV92MV81TWFjLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTdD
MzBEOTgzMUY4MTVBRUMwMDI2ODM1NiAvKiBKU0Fib3J0Q29udHJvbGxlci5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlFMTI1RjgyQjE4MjJDRkVDMDBEODRDRDkgLyogQ3J5cHRvQWxnb3JpdGhtU0hB
MS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFMTlBQzNFRTE4MjREQzc5MDAzNDk0MjYgLyogQ3J5
cHRvQWxnb3JpdGhtU0hBMjI0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUxOUFDM0YwMTgyNERD
NzkwMDM0OTQyNiAvKiBDcnlwdG9BbGdvcml0aG1TSEEyNTYuY3BwIGluIFNvdXJjZXMgKi8sCkBA
IC0zMjM1Niw2ICszMjMwNyw4IEBACiAJCQkJMUMyMUU1N0MxODNFRDFGRjAwMUMyODlEIC8qIElP
U3VyZmFjZVBvb2wuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQUQ5RkY2RTExOTA4MzkxRDAwM0I2
MUUwIC8qIElPU3VyZmFjZVBvb2xDb2NvYS5tbSBpbiBTb3VyY2VzICovLAogCQkJCTA3QUM0NzAx
MTk1MjEwMjEwMEVFOTcyMyAvKiBJU09WVFRDdWUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJN0Mz
MEQ5ODMxRjgxNUFFQzAwMjY4MzU2IC8qIEpTQWJvcnRDb250cm9sbGVyLmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCTdDMzBEOTg1MUY4MTVBRUMwMDI2ODM1NiAvKiBKU0Fib3J0U2lnbmFsLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTQxOEY4ODA0MEZGOTU3QUUwMDgwRjA0NSAvKiBKU0Fic3RyYWN0
V29ya2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTU3MDQ0MDVDMUU1MzkzNzkwMDM1NjYwMSAv
KiBKU0Flc0NiY0NmYlBhcmFtcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1N0UxRTVBQzFFOERE
MDlCMDBFRTM3QzkgLyogSlNBZXNDdHJQYXJhbXMuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0zMjQz
NCw3ICszMjM4Nyw2IEBACiAJCQkJQTU4NEZFM0IxODY0RTJEODAwODQzQjEwIC8qIEpTQ29tbWFu
ZExpbmVBUElIb3N0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkzRjlCNkUwMEJBMEZCNzIwMDg1
NDA2NCAvKiBKU0NvbW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNzlBQzkyMTgxMDk5NDVD
ODAwMjEyNjZFIC8qIEpTQ29tcG9zaXRpb25FdmVudC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk3
Q0QwRTJDMDFGODBBNTZFMDAxNkE0Q0UgLyogQWJvcnRTaWduYWwuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJRkRBMTVFQkQxMkIwM0YwQjAwM0E1ODNBIC8qIEpTQ29udm9sdmVyTm9kZS5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlGRTZGRDQ4RDBGNjc2RTkzMDAwOTI4NzMgLyogSlNDb29yZGluYXRl
cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNERDRjNCMjFCNkJFMjA4MDA2MkQ0QzIgLyogSlND
b3VudFF1ZXVpbmdTdHJhdGVneS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTMyNTI3LDcgKzMyNDc5
LDYgQEAKIAkJCQk4MzZBQ0VEMjFFQ0FBQjE5MDA0QkQwMTIgLyogSlNET01NYXRyaXguY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJN0NCQkJDQ0IxRjU2MTgwRDAwNUVGQUFDIC8qIEpTRE9NTWF0cml4
MkRJbml0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTgzNTY1N0M3MUVDQUIxMDcwMENERTcyRCAv
KiBKU0RPTU1hdHJpeEluaXQuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJN0NEMEUyQjkxRjgwQTQ4
MjAwMTZBNENFIC8qIEFib3J0Q29udHJvbGxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4MzZB
Q0VENTFFQ0FBQjE5MDA0QkQwMTIgLyogSlNET01NYXRyaXhSZWFkT25seS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlBOUQyNDgwNjBENzU3RTdEMDBGREY5NTkgLyogSlNET01NaW1lVHlwZS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlBOUQyNDgwODBENzU3RTdEMDBGREY5NTkgLyogSlNET01NaW1l
VHlwZUFycmF5LmNwcCBpbiBTb3VyY2VzICovLApAQCAtMzMzMzMsMTAgKzMzMjg0LDcgQEAKIAkJ
CQlGRDZGMjUyQzEzRjVFRjBFMDA2NTE2NUYgLyogTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2Rl
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTA3RkU5OURDMTg4MDdBN0QwMDI1NjY0OCAvKiBNZWRp
YUVsZW1lbnRTZXNzaW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTJEOUJGNzA1MURCRkJCMjQw
MDdBN0Q5OSAvKiBNZWRpYUVuY3J5cHRlZEV2ZW50LmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTVF
QkI4OTM0MUM3Nzc4MjkwMEM2NUQ0MSAvKiBNZWRpYUVuZHBvaW50LmNwcCBpbiBTb3VyY2VzICov
LAotCQkJCTVFQkI4OTM2MUM3Nzc4MjkwMEM2NUQ0MSAvKiBNZWRpYUVuZHBvaW50Q29uZmlndXJh
dGlvbi5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk1RTE2QTJFNTFCRkE2NTBGMDAyOUEyMUUgLyog
TWVkaWFFbmRwb2ludFBlZXJDb25uZWN0aW9uLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTVFNEVB
QjA1MUQwNzE2NkUwMDA2QTE4NCAvKiBNZWRpYUVuZHBvaW50U2Vzc2lvbkRlc2NyaXB0aW9uLmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCTQxQjI4QjE0MUY4NTAxQTYwMEZCNTJBQyAvKiBNZWRpYUVu
ZHBvaW50Q29uZmlndXJhdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0RTE5NTkyMTBBMzlE
QUJBMDAyMjBGRTUgLyogTWVkaWFGZWF0dXJlTmFtZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MDdBNkQxRUIxNDkxMTM3NzAwMDUxRDBDIC8qIE1lZGlhRnJhZ21lbnRVUklQYXJzZXIuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMkQ5QkY3NDcxREJGREM0OTAwN0E3RDk5IC8qIE1lZGlhS2V5TWVz
c2FnZUV2ZW50LmNwcCBpbiBTb3VyY2VzICovLApAQCAtMzM0MTEsNyArMzMzNTksNiBAQAogCQkJ
CUNERjJCMDEwMTgyMDU0MDYwMEYyQjQyNCAvKiBNb2NrQm94LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTUxMDU4QURGMUQ2N0MyMjkwMDlBNTM4QyAvKiBNb2NrR2FtZXBhZC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQk1MTA1OEFFMTFENjdDMjI5MDA5QTUzOEMgLyogTW9ja0dhbWVwYWRQcm92aWRl
ci5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk1RUEzRDZFMDFDODU5RDg0MDAzMDBCQkIgLyogTW9j
a01lZGlhRW5kcG9pbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQ0RGMkIwMTIxODIwNTQwNjAw
RjJCNDI0IC8qIE1vY2tNZWRpYVBsYXllck1lZGlhU291cmNlLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUNERjJCMDE0MTgyMDU0MDYwMEYyQjQyNCAvKiBNb2NrTWVkaWFTb3VyY2VQcml2YXRlLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTA3RDZBNEYzMUJFRDVGODgwMDE3NDE0NiAvKiBNb2NrUmVh
bHRpbWVBdWRpb1NvdXJjZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTMzOTA2LDkgKzMzODUzLDYg
QEAKIAkJCQlCQzI0NDFDNDBFOEI2NUQwMDA1NTMyMEYgLyogU2Nyb2xsVmlldy5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlFNDUzOTA0NTBFQUZENjM3MDAzNjk1QzggLyogU2Nyb2xsVmlld0lPUy5t
bSBpbiBTb3VyY2VzICovLAogCQkJCTkzNTM2NzZCMDlBRUQ4OEIwMEQzNUNENiAvKiBTY3JvbGxW
aWV3TWFjLm1tIGluIFNvdXJjZXMgKi8sCi0JCQkJNUVBM0Q2RTMxQzg1OURDMTAwMzAwQkJCIC8q
IFNEUFByb2Nlc3Nvci5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk1RUEzRDZFNzFDODVBOURCMDAz
MDBCQkIgLyogU0RQUHJvY2Vzc29yU2NyaXB0UmVzb3VyY2UuY3BwIGluIFNvdXJjZXMgKi8sCi0J
CQkJQ0RBQjZEMzIxN0M5MjU5NTAwQzYwQjM1IC8qIFNEUFByb2Nlc3NvclNjcmlwdHNEYXRhLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUY1NUIzREQxMTI1MUYxMkQwMDNFRjI2OSAvKiBTZWFyY2hJ
bnB1dFR5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEU3MDU4RUUxQkM1QkMxOTAwNDVBNTA3
IC8qIFNlYXJjaFBvcHVwTWVudUNvY29hLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJOTc2RjM2RUEx
NDY4NjIyNTAwNUU5M0I0IC8qIFNlY3VyaXR5Q29udGV4dC5jcHAgaW4gU291cmNlcyAqLywKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0dTdHJlYW1lci5jbWFrZSBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL0dTdHJlYW1lci5jbWFrZQppbmRleCA5OWNmNWZmYTIwNzM3NmNi
NWFiOWVjZGRhZmI2Y2E0N2FiMjAzYTQwLi43ZTIyNGQ3NzQ3NTQ0YWQzN2QzODhkN2M3NGI5ZjZl
NjI1MDhkODBmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9HU3RyZWFtZXIu
Y21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vR1N0cmVhbWVyLmNtYWtlCkBAIC0x
LDI2ICsxLDMgQEAKLWxpc3QoQVBQRU5EIFdlYkNvcmVfSU5DTFVERV9ESVJFQ1RPUklFUwotICAg
ICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9vcGVud2VicnRjIgotKQotCi1p
ZiAoRU5BQkxFX01FRElBX1NUUkVBTSkKLSAgICBsaXN0KEFQUEVORCBXZWJDb3JlX1NZU1RFTV9J
TkNMVURFX0RJUkVDVE9SSUVTCi0gICAgICAgICR7T1BFTldFQlJUQ19JTkNMVURFX0RJUlN9Ci0g
ICAgKQotCi0gICAgbGlzdChBUFBFTkQgV2ViQ29yZV9MSUJSQVJJRVMKLSAgICAgICAgJHtPUEVO
V0VCUlRDX0xJQlJBUklFU30KLSAgICApCi0KLSAgICBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJD
RVMKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lck93ci5jcHAKLQotICAgICAgICBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9vcGVud2Vi
cnRjL01lZGlhRW5kcG9pbnRPd3IuY3BwCi0gICAgICAgIHBsYXRmb3JtL21lZGlhc3RyZWFtL29w
ZW53ZWJydGMvT3BlbldlYlJUQ1V0aWxpdGllcy5jcHAKLSAgICAgICAgcGxhdGZvcm0vbWVkaWFz
dHJlYW0vb3BlbndlYnJ0Yy9SZWFsdGltZU1lZGlhU291cmNlT3dyLmNwcAotICAgICAgICBwbGF0
Zm9ybS9tZWRpYXN0cmVhbS9vcGVud2VicnRjL1JlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJPd3Iu
Y3BwCi0gICAgKQotZW5kaWYgKCkKLQogaWYgKEVOQUJMRV9WSURFTyBPUiBFTkFCTEVfV0VCX0FV
RElPKQogICAgIGxpc3QoQVBQRU5EIFdlYkNvcmVfSU5DTFVERV9ESVJFQ1RPUklFUwogICAgICAg
ICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyIgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3BwCmluZGV4IDQ4Nzcx
NjBjZmFhYjNhZWMyNjljOWZiY2Y2YzQ4NmZmMjE3YTIyYTAuLmYwOTNkNDUxYjI1NThhNWE5MWFh
ODhkMTEzNTk2NDc4NDQxNzg4NzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL01lZGlhUGxheWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9NZWRpYVBsYXllci5jcHAKQEAgLTUzLDkgKzUzLDYgQEAKIAogI2lmIFVTRShHU1RS
RUFNRVIpCiAjaW5jbHVkZSAiTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmgiCi0jaWYgRU5B
QkxFKE1FRElBX1NUUkVBTSkgJiYgVVNFKE9QRU5XRUJSVEMpCi0jaW5jbHVkZSAiTWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyT3dyLmgiCi0jZW5kaWYKICNkZWZpbmUgUGxhdGZvcm1NZWRpYUVu
Z2luZUNsYXNzTmFtZSBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIKICNpZiBFTkFCTEUoVklE
RU8pICYmIEVOQUJMRShNRURJQV9TT1VSQ0UpICYmIEVOQUJMRShWSURFT19UUkFDSykKICNpbmNs
dWRlICJNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0UuaCIKQEAgLTI2OCwxMSArMjY1LDYg
QEAgc3RhdGljIHZvaWQgYnVpbGRNZWRpYUVuZ2luZXNWZWN0b3IoKQogICAgICAgICBQbGF0Zm9y
bU1lZGlhRW5naW5lQ2xhc3NOYW1lOjpyZWdpc3Rlck1lZGlhRW5naW5lKGFkZE1lZGlhRW5naW5l
KTsKICNlbmRpZgogCi0jaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkgJiYgVVNFKEdTVFJFQU1FUikg
JiYgVVNFKE9QRU5XRUJSVEMpCi0gICAgaWYgKFNldHRpbmdzOjppc0dTdHJlYW1lckVuYWJsZWQo
KSkKLSAgICAgICAgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyOjpyZWdpc3Rlck1lZGlh
RW5naW5lKGFkZE1lZGlhRW5naW5lKTsKLSNlbmRpZgotCiAjaWYgRU5BQkxFKFZJREVPKSAmJiBV
U0UoR1NUUkVBTUVSKSAmJiBFTkFCTEUoTUVESUFfU09VUkNFKSAmJiBFTkFCTEUoVklERU9fVFJB
Q0spCiAgICAgaWYgKFNldHRpbmdzOjppc0dTdHJlYW1lckVuYWJsZWQoKSkKICAgICAgICAgTWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjpyZWdpc3Rlck1lZGlhRW5naW5lKGFkZE1lZGlh
RW5naW5lKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dz
dHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5j
cHAKaW5kZXggZjM4ZTYzNzEyOTdhNDk0ZWQ3YWJjMjIwNGMxYjJhYTFkM2Q0YmYxYi4uODQ3OTRm
NGM1YmM5MGNlYTk2ODcyYjBjOGYxMmMyZTFjNGJiYTJiMiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVy
L01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5jcHAKQEAgLTE5MzEsNyArMTkzMSw2IEBAIE1l
ZGlhUGxheWVyOjpTdXBwb3J0c1R5cGUgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpzdXBw
b3J0c1R5cGUoY29uc3QgTWVkaWFFCiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAjZW5kaWYKIAot
ICAgIC8vIE1lZGlhU3RyZWFtIHBsYXliYWNrIGlzIGhhbmRsZWQgYnkgdGhlIE9wZW5XZWJSVEMg
cGxheWVyLgogICAgIGlmIChwYXJhbWV0ZXJzLmlzTWVkaWFTdHJlYW0pCiAgICAgICAgIHJldHVy
biByZXN1bHQ7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3IuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lck93ci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU1MWZmNmNmNzdmZTNj
MTc2OGJhOTA3MTA4NmM5NmUyZWRjOWFhOTUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVh
bWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93ci5jcHAKKysrIC9kZXYvbnVsbApAQCAt
MSw1MDEgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMTIgQ29sbGFib3JhIEx0ZC4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqICBDb3B5cmlnaHQgKEMpIDIwMTQsIDIwMTUgSWdhbGlh
IFMuTC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqICBDb3B5cmlnaHQgKEMpIDIwMTUgTWV0cm9s
b2dpY2FsIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqICBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiAgTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
Ci0gKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0g
KiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0g
KiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5l
cmFsIFB1YmxpYwotICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwg
d3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKLSAq
LwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpbmNsdWRlICJNZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXJPd3IuaCIKLQotI2lmIEVOQUJMRShWSURFTykgJiYgRU5BQkxFKE1FRElBX1NUUkVB
TSkgJiYgVVNFKEdTVFJFQU1FUikgJiYgVVNFKE9QRU5XRUJSVEMpCi0KLSNpbmNsdWRlICJHU3Ry
ZWFtZXJVdGlsaXRpZXMuaCIKLSNpbmNsdWRlICJNZWRpYVBsYXllci5oIgotI2luY2x1ZGUgIk1l
ZGlhU3RyZWFtUHJpdmF0ZS5oIgotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0jaW5jbHVk
ZSAiUmVhbHRpbWVNZWRpYVNvdXJjZU93ci5oIgotI2luY2x1ZGUgIlVSTC5oIgotI2luY2x1ZGUg
PG93ci9vd3IuaD4KLSNpbmNsdWRlIDxvd3Ivb3dyX2dzdF9hdWRpb19yZW5kZXJlci5oPgotI2lu
Y2x1ZGUgPG93ci9vd3JfZ3N0X3ZpZGVvX3JlbmRlcmVyLmg+Ci0jaW5jbHVkZSA8d3RmL05ldmVy
RGVzdHJveWVkLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1HU1RfREVCVUdf
Q0FURUdPUlkod2Via2l0X29wZW53ZWJydGNfZGVidWcpOwotI2RlZmluZSBHU1RfQ0FUX0RFRkFV
TFQgd2Via2l0X29wZW53ZWJydGNfZGVidWcKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1NZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3I6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93
cihNZWRpYVBsYXllciogcGxheWVyKQotICAgIDogTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
QmFzZShwbGF5ZXIpCi17Ci0gICAgaW5pdGlhbGl6ZUdTdHJlYW1lckFuZEdTdHJlYW1lckRlYnVn
Z2luZygpOwotfQotCi1NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3I6On5NZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXJPd3IoKQotewotICAgIEdTVF9UUkFDRSgiRGVzdHJveWluZyIpOwot
Ci0gICAgaWYgKGhhc0F1ZGlvKCkpCi0gICAgICAgIG1fYXVkaW9UcmFjay0+cmVtb3ZlT2JzZXJ2
ZXIoKnRoaXMpOwotICAgIGlmIChoYXNWaWRlbygpKQotICAgICAgICBtX3ZpZGVvVHJhY2stPnJl
bW92ZU9ic2VydmVyKCp0aGlzKTsKLQotICAgIG1fYXVkaW9UcmFja01hcC5jbGVhcigpOwotICAg
IG1fdmlkZW9UcmFja01hcC5jbGVhcigpOwotCi0gICAgc3RvcCgpOwotfQotCi12b2lkIE1lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lck93cjo6cGxheSgpCi17Ci0gICAgR1NUX0RFQlVHKCJQbGF5
Iik7Ci0KLSAgICBpZiAoIW1fc3RyZWFtUHJpdmF0ZSB8fCAhbV9zdHJlYW1Qcml2YXRlLT5hY3Rp
dmUoKSkgewotICAgICAgICBtX3JlYWR5U3RhdGUgPSBNZWRpYVBsYXllcjo6SGF2ZU5vdGhpbmc7
Ci0gICAgICAgIGxvYWRpbmdGYWlsZWQoTWVkaWFQbGF5ZXI6OkVtcHR5KTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIG1fZW5kZWQgPSBmYWxzZTsKLSAgICBtX3BhdXNlZCA9IGZhbHNl
OwotCi0gICAgR1NUX0RFQlVHKCJDb25uZWN0aW5nIHRvIGxpdmUgc3RyZWFtLCBkZXNjcmlwdG9y
OiAlcCIsIG1fc3RyZWFtUHJpdmF0ZS5nZXQoKSk7Ci0KLSAgICBpZiAobV92aWRlb1RyYWNrKQot
ICAgICAgICBtYXliZUhhbmRsZUNoYW5nZU11dGVkU3RhdGUoKm1fdmlkZW9UcmFjay5nZXQoKSk7
Ci0KLSAgICBpZiAobV9hdWRpb1RyYWNrKQotICAgICAgICBtYXliZUhhbmRsZUNoYW5nZU11dGVk
U3RhdGUoKm1fYXVkaW9UcmFjay5nZXQoKSk7Ci19Ci0KLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyT3dyOjpwYXVzZSgpCi17Ci0gICAgR1NUX0RFQlVHKCJQYXVzZSIpOwotICAgIG1f
cGF1c2VkID0gdHJ1ZTsKLSAgICBkaXNhYmxlTWVkaWFUcmFja3MoKTsKLX0KLQotYm9vbCBNZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3I6Omhhc1ZpZGVvKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gbV92aWRlb1RyYWNrOwotfQotCi1ib29sIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93
cjo6aGFzQXVkaW8oKSBjb25zdAotewotICAgIHJldHVybiBtX2F1ZGlvVHJhY2s7Ci19Ci0KLXZv
aWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyOjpzZXRWb2x1bWUoZmxvYXQgdm9sdW1l
KQotewotICAgIGlmICghbV9hdWRpb1RyYWNrKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRv
JiByZWFsVGltZU1lZGlhU291cmNlID0gc3RhdGljX2Nhc3Q8UmVhbHRpbWVNZWRpYVNvdXJjZU93
ciY+KG1fYXVkaW9UcmFjay0+c291cmNlKCkpOwotICAgIGF1dG8gbWVkaWFTb3VyY2UgPSBPV1Jf
TUVESUFfU09VUkNFKHJlYWxUaW1lTWVkaWFTb3VyY2UubWVkaWFTb3VyY2UoKSk7Ci0KLSAgICBH
U1RfREVCVUcoIlNldHRpbmcgdm9sdW1lOiAlZiIsIHZvbHVtZSk7Ci0gICAgZ19vYmplY3Rfc2V0
KG1lZGlhU291cmNlLCAidm9sdW1lIiwgc3RhdGljX2Nhc3Q8Z2RvdWJsZT4odm9sdW1lKSwgbnVs
bHB0cik7Ci19Ci0KLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyOjpzZXRNdXRl
ZChib29sIG11dGVkKQotewotICAgIGlmICghbV9hdWRpb1RyYWNrKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBhdXRvJiByZWFsVGltZU1lZGlhU291cmNlID0gc3RhdGljX2Nhc3Q8UmVhbHRpbWVN
ZWRpYVNvdXJjZU93ciY+KG1fYXVkaW9UcmFjay0+c291cmNlKCkpOwotICAgIGF1dG8gbWVkaWFT
b3VyY2UgPSBPV1JfTUVESUFfU09VUkNFKHJlYWxUaW1lTWVkaWFTb3VyY2UubWVkaWFTb3VyY2Uo
KSk7Ci0gICAgaWYgKCFtZWRpYVNvdXJjZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgR1NUX0RF
QlVHKCJTZXR0aW5nIG11dGU6ICVzIiwgbXV0ZWQgPyAib24iOiJvZmYiKTsKLSAgICBnX29iamVj
dF9zZXQobWVkaWFTb3VyY2UsICJtdXRlIiwgbXV0ZWQsIG51bGxwdHIpOwotfQotCi1mbG9hdCBN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3I6OmN1cnJlbnRUaW1lKCkgY29uc3QKLXsKLSAg
ICBnaW50NjQgcG9zaXRpb24gPSBHU1RfQ0xPQ0tfVElNRV9OT05FOwotICAgIEdzdFF1ZXJ5KiBx
dWVyeSA9IGdzdF9xdWVyeV9uZXdfcG9zaXRpb24oR1NUX0ZPUk1BVF9USU1FKTsKLQotICAgIGlm
IChtX3ZpZGVvVHJhY2sgJiYgZ3N0X2VsZW1lbnRfcXVlcnkobV92aWRlb1NpbmsuZ2V0KCksIHF1
ZXJ5KSkKLSAgICAgICAgZ3N0X3F1ZXJ5X3BhcnNlX3Bvc2l0aW9uKHF1ZXJ5LCAwLCAmcG9zaXRp
b24pOwotICAgIGVsc2UgaWYgKG1fYXVkaW9UcmFjayAmJiBnc3RfZWxlbWVudF9xdWVyeShtX2F1
ZGlvU2luay5nZXQoKSwgcXVlcnkpKQotICAgICAgICBnc3RfcXVlcnlfcGFyc2VfcG9zaXRpb24o
cXVlcnksIDAsICZwb3NpdGlvbik7Ci0KLSAgICBmbG9hdCByZXN1bHQgPSAwOwotICAgIGlmIChz
dGF0aWNfY2FzdDxHc3RDbG9ja1RpbWU+KHBvc2l0aW9uKSAhPSBHU1RfQ0xPQ0tfVElNRV9OT05F
KQotICAgICAgICByZXN1bHQgPSBzdGF0aWNfY2FzdDxkb3VibGU+KHBvc2l0aW9uKSAvIEdTVF9T
RUNPTkQ7Ci0KLSAgICBHU1RfTE9HKCJQb3NpdGlvbiAlIiBHU1RfVElNRV9GT1JNQVQsIEdTVF9U
SU1FX0FSR1MocG9zaXRpb24pKTsKLSAgICBnc3RfcXVlcnlfdW5yZWYocXVlcnkpOwotCi0gICAg
cmV0dXJuIHJlc3VsdDsKLX0KLQotdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3I6
OmxvYWQoY29uc3QgU3RyaW5nICYpCi17Ci0gICAgLy8gUHJvcGVybHkgZmFpbCBzbyB0aGUgZ2xv
YmFsIE1lZGlhUGxheWVyIHRyaWVzIHRvIGZhbGxiYWNrIHRvIHRoZSBuZXh0IE1lZGlhUGxheWVy
UHJpdmF0ZS4KLSAgICBtX25ldHdvcmtTdGF0ZSA9IE1lZGlhUGxheWVyOjpGb3JtYXRFcnJvcjsK
LSAgICBtX3BsYXllci0+bmV0d29ya1N0YXRlQ2hhbmdlZCgpOwotfQotCi0jaWYgRU5BQkxFKE1F
RElBX1NPVVJDRSkKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyOjpsb2FkKGNv
bnN0IFN0cmluZyYsIE1lZGlhU291cmNlUHJpdmF0ZUNsaWVudCopCi17Ci0gICAgLy8gUHJvcGVy
bHkgZmFpbCBzbyB0aGUgZ2xvYmFsIE1lZGlhUGxheWVyIHRyaWVzIHRvIGZhbGxiYWNrIHRvIHRo
ZSBuZXh0IE1lZGlhUGxheWVyUHJpdmF0ZS4KLSAgICBtX25ldHdvcmtTdGF0ZSA9IE1lZGlhUGxh
eWVyOjpGb3JtYXRFcnJvcjsKLSAgICBtX3BsYXllci0+bmV0d29ya1N0YXRlQ2hhbmdlZCgpOwot
fQotI2VuZGlmCi0KLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyOjpsb2FkKE1l
ZGlhU3RyZWFtUHJpdmF0ZSYgc3RyZWFtUHJpdmF0ZSkKLXsKLSAgICBpZiAoIWluaXRpYWxpemVH
U3RyZWFtZXIoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9zdHJlYW1Qcml2YXRlID0gJnN0
cmVhbVByaXZhdGU7Ci0gICAgaWYgKCFtX3N0cmVhbVByaXZhdGUtPmFjdGl2ZSgpKSB7Ci0gICAg
ICAgIGxvYWRpbmdGYWlsZWQoTWVkaWFQbGF5ZXI6Ok5ldHdvcmtFcnJvcik7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBpZiAoc3RyZWFtUHJpdmF0ZS5oYXNWaWRlbygpICYmICFtX3Zp
ZGVvU2luaykKLSAgICAgICAgY3JlYXRlVmlkZW9TaW5rKCk7Ci0KLSAgICBpZiAoc3RyZWFtUHJp
dmF0ZS5oYXNBdWRpbygpICYmICFtX2F1ZGlvU2luaykKLSAgICAgICAgY3JlYXRlR1NUQXVkaW9T
aW5rQmluKCk7Ci0KLSAgICBHU1RfREVCVUcoIkxvYWRpbmcgTWVkaWFTdHJlYW1Qcml2YXRlICVw
IHZpZGVvOiAlcywgYXVkaW86ICVzIiwgJnN0cmVhbVByaXZhdGUsIHN0cmVhbVByaXZhdGUuaGFz
VmlkZW8oKSA/ICJ5ZXMiOiJubyIsIHN0cmVhbVByaXZhdGUuaGFzQXVkaW8oKSA/ICJ5ZXMiOiJu
byIpOwotCi0gICAgbV9yZWFkeVN0YXRlID0gTWVkaWFQbGF5ZXI6OkhhdmVOb3RoaW5nOwotICAg
IG1fbmV0d29ya1N0YXRlID0gTWVkaWFQbGF5ZXI6OkxvYWRpbmc7Ci0gICAgbV9wbGF5ZXItPm5l
dHdvcmtTdGF0ZUNoYW5nZWQoKTsKLSAgICBtX3BsYXllci0+cmVhZHlTdGF0ZUNoYW5nZWQoKTsK
LQotICAgIGZvciAoYXV0byB0cmFjayA6IG1fc3RyZWFtUHJpdmF0ZS0+dHJhY2tzKCkpIHsKLSAg
ICAgICAgaWYgKCF0cmFjay0+ZW5hYmxlZCgpKSB7Ci0gICAgICAgICAgICBHU1RfREVCVUcoIlRy
YWNrICVzIGRpc2FibGVkIiwgdHJhY2stPmxhYmVsKCkuYXNjaWkoKS5kYXRhKCkpOwotICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICBHU1RfREVCVUcoIlByb2Nlc3Np
bmcgdHJhY2sgJXMiLCB0cmFjay0+bGFiZWwoKS5hc2NpaSgpLmRhdGEoKSk7Ci0KLSAgICAgICAg
Ym9vbCBvYnNlcnZlVHJhY2sgPSBmYWxzZTsKLQotICAgICAgICAvLyBUT0RPOiBTdXBwb3J0IGZv
ciBtdWx0aXBsZSB0cmFja3Mgb2YgdGhlIHNhbWUgdHlwZS4KLQotICAgICAgICBzd2l0Y2ggKHRy
YWNrLT50eXBlKCkpIHsKLSAgICAgICAgY2FzZSBSZWFsdGltZU1lZGlhU291cmNlOjpUeXBlOjpB
dWRpbzoKLSAgICAgICAgICAgIGlmICghbV9hdWRpb1RyYWNrKSB7Ci0gICAgICAgICAgICAgICAg
U3RyaW5nIHByZVNlbGVjdGVkRGV2aWNlID0gZ2V0ZW52KCJXRUJLSVRfQVVESU9fREVWSUNFIik7
Ci0gICAgICAgICAgICAgICAgaWYgKCFwcmVTZWxlY3RlZERldmljZSB8fCAocHJlU2VsZWN0ZWRE
ZXZpY2UgPT0gdHJhY2stPmxhYmVsKCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1fYXVkaW9U
cmFjayA9IHRyYWNrOwotICAgICAgICAgICAgICAgICAgICBhdXRvIGF1ZGlvVHJhY2sgPSBBdWRp
b1RyYWNrUHJpdmF0ZU1lZGlhU3RyZWFtOjpjcmVhdGUoKm1fYXVkaW9UcmFjay5nZXQoKSk7Ci0g
ICAgICAgICAgICAgICAgICAgIG1fcGxheWVyLT5hZGRBdWRpb1RyYWNrKCphdWRpb1RyYWNrKTsK
LSAgICAgICAgICAgICAgICAgICAgbV9hdWRpb1RyYWNrTWFwLmFkZCh0cmFjay0+aWQoKSwgYXVk
aW9UcmFjayk7Ci0gICAgICAgICAgICAgICAgICAgIG9ic2VydmVUcmFjayA9IHRydWU7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGNhc2UgUmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlwZTo6VmlkZW86Ci0gICAgICAgICAgICBpZiAo
IW1fdmlkZW9UcmFjaykgewotICAgICAgICAgICAgICAgIFN0cmluZyBwcmVTZWxlY3RlZERldmlj
ZSA9IGdldGVudigiV0VCS0lUX1ZJREVPX0RFVklDRSIpOwotICAgICAgICAgICAgICAgIGlmICgh
cHJlU2VsZWN0ZWREZXZpY2UgfHwgKHByZVNlbGVjdGVkRGV2aWNlID09IHRyYWNrLT5sYWJlbCgp
KSkgewotICAgICAgICAgICAgICAgICAgICBtX3ZpZGVvVHJhY2sgPSB0cmFjazsKLSAgICAgICAg
ICAgICAgICAgICAgYXV0byB2aWRlb1RyYWNrID0gVmlkZW9UcmFja1ByaXZhdGVNZWRpYVN0cmVh
bTo6Y3JlYXRlKCptX3ZpZGVvVHJhY2suZ2V0KCkpOwotICAgICAgICAgICAgICAgICAgICBtX3Bs
YXllci0+YWRkVmlkZW9UcmFjaygqdmlkZW9UcmFjayk7Ci0gICAgICAgICAgICAgICAgICAgIHZp
ZGVvVHJhY2stPnNldFNlbGVjdGVkKHRydWUpOwotICAgICAgICAgICAgICAgICAgICBtX3ZpZGVv
VHJhY2tNYXAuYWRkKHRyYWNrLT5pZCgpLCB2aWRlb1RyYWNrKTsKLSAgICAgICAgICAgICAgICAg
ICAgb2JzZXJ2ZVRyYWNrID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBSZWFsdGltZU1lZGlhU291cmNlOjpU
eXBlOjpOb25lOgotICAgICAgICAgICAgR1NUX1dBUk5JTkcoIkxvYWRpbmcgYSB0cmFjayB3aXRo
IE5vbmUgdHlwZSIpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG9ic2VydmVUcmFjaykKLSAg
ICAgICAgICAgIHRyYWNrLT5hZGRPYnNlcnZlcigqdGhpcyk7Ci0gICAgfQotCi0gICAgbV9yZWFk
eVN0YXRlID0gTWVkaWFQbGF5ZXI6OkhhdmVFbm91Z2hEYXRhOwotICAgIG1fcGxheWVyLT5yZWFk
eVN0YXRlQ2hhbmdlZCgpOwotfQotCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93
cjo6bG9hZGluZ0ZhaWxlZChNZWRpYVBsYXllcjo6TmV0d29ya1N0YXRlIGVycm9yKQotewotICAg
IGlmIChtX25ldHdvcmtTdGF0ZSAhPSBlcnJvcikgewotICAgICAgICBHU1RfV0FSTklORygiTG9h
ZGluZyBmYWlsZWQsIGVycm9yOiAlZCIsIGVycm9yKTsKLSAgICAgICAgbV9uZXR3b3JrU3RhdGUg
PSBlcnJvcjsKLSAgICAgICAgbV9wbGF5ZXItPm5ldHdvcmtTdGF0ZUNoYW5nZWQoKTsKLSAgICB9
Ci0gICAgaWYgKG1fcmVhZHlTdGF0ZSAhPSBNZWRpYVBsYXllcjo6SGF2ZU5vdGhpbmcpIHsKLSAg
ICAgICAgbV9yZWFkeVN0YXRlID0gTWVkaWFQbGF5ZXI6OkhhdmVOb3RoaW5nOwotICAgICAgICBt
X3BsYXllci0+cmVhZHlTdGF0ZUNoYW5nZWQoKTsKLSAgICB9Ci19Ci0KLWJvb2wgTWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyT3dyOjpkaWRMb2FkaW5nUHJvZ3Jlc3MoKSBjb25zdAotewotICAg
IC8vIEZJWE1FOiBJbXBsZW1lbnQgbG9hZGluZyBwcm9ncmVzcyBzdXBwb3J0LgotICAgIHJldHVy
biB0cnVlOwotfQotCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93cjo6ZGlzYWJs
ZU1lZGlhVHJhY2tzKCkKLXsKLSAgICBpZiAobV9hdWRpb1RyYWNrKSB7Ci0gICAgICAgIEdTVF9E
RUJVRygiU3RvcDogZGlzY29ubmVjdGluZyBhdWRpbyIpOwotICAgICAgICBnX29iamVjdF9zZXQo
bV9hdWRpb1JlbmRlcmVyLmdldCgpLCAiZGlzYWJsZWQiLCB0cnVlLCBudWxscHRyKTsKLSAgICAg
ICAgb3dyX21lZGlhX3JlbmRlcmVyX3NldF9zb3VyY2UoT1dSX01FRElBX1JFTkRFUkVSKG1fYXVk
aW9SZW5kZXJlci5nZXQoKSksIG51bGxwdHIpOwotICAgIH0KLQotICAgIGlmIChtX3ZpZGVvVHJh
Y2spIHsKLSAgICAgICAgR1NUX0RFQlVHKCJTdG9wOiBkaXNjb25uZWN0aW5nIHZpZGVvIik7Ci0g
ICAgICAgIGdfb2JqZWN0X3NldChtX3ZpZGVvUmVuZGVyZXIuZ2V0KCksICJkaXNhYmxlZCIsIHRy
dWUsIG51bGxwdHIpOwotICAgICAgICBvd3JfbWVkaWFfcmVuZGVyZXJfc2V0X3NvdXJjZShPV1Jf
TUVESUFfUkVOREVSRVIobV92aWRlb1JlbmRlcmVyLmdldCgpKSwgbnVsbHB0cik7Ci0gICAgfQot
fQotCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93cjo6c3RvcCgpCi17Ci0gICAg
ZGlzYWJsZU1lZGlhVHJhY2tzKCk7Ci0gICAgaWYgKG1fdmlkZW9UcmFjaykgewotICAgICAgICBh
dXRvIHZpZGVvVHJhY2sgPSBtX3ZpZGVvVHJhY2tNYXAuZ2V0KG1fdmlkZW9UcmFjay0+aWQoKSk7
Ci0gICAgICAgIGlmICh2aWRlb1RyYWNrKQotICAgICAgICAgICAgdmlkZW9UcmFjay0+c2V0U2Vs
ZWN0ZWQoZmFsc2UpOwotICAgIH0KLX0KLQotdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXJPd3I6OnJlZ2lzdGVyTWVkaWFFbmdpbmUoTWVkaWFFbmdpbmVSZWdpc3RyYXIgcmVnaXN0cmFy
KQotewotICAgIGlmIChpbml0aWFsaXplR1N0cmVhbWVyQW5kR1N0cmVhbWVyRGVidWdnaW5nKCkp
IHsKLSAgICAgICAgcmVnaXN0cmFyKFtdKE1lZGlhUGxheWVyKiBwbGF5ZXIpIHsKLSAgICAgICAg
ICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93
cj4ocGxheWVyKTsKLSAgICAgICAgfSwgZ2V0U3VwcG9ydGVkVHlwZXMsIHN1cHBvcnRzVHlwZSwg
bnVsbHB0ciwgbnVsbHB0ciwgbnVsbHB0ciwgbnVsbHB0cik7Ci0gICAgfQotfQotCi12b2lkIE1l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93cjo6Z2V0U3VwcG9ydGVkVHlwZXMoSGFzaFNldDxT
dHJpbmcsIEFTQ0lJQ2FzZUluc2Vuc2l0aXZlSGFzaD4mIHR5cGVzKQotewotICAgIC8vIE5vdCBz
dXBwb3J0ZWQgaW4gdGhpcyBtZWRpYSBwbGF5ZXIuCi0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVk
PEhhc2hTZXQ8U3RyaW5nLCBBU0NJSUNhc2VJbnNlbnNpdGl2ZUhhc2g+PiBjYWNoZTsKLSAgICB0
eXBlcyA9IGNhY2hlOwotfQotCi1NZWRpYVBsYXllcjo6U3VwcG9ydHNUeXBlIE1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lck93cjo6c3VwcG9ydHNUeXBlKGNvbnN0IE1lZGlhRW5naW5lU3VwcG9y
dFBhcmFtZXRlcnMmIHBhcmFtZXRlcnMpCi17Ci0gICAgaWYgKHBhcmFtZXRlcnMuaXNNZWRpYVN0
cmVhbSkKLSAgICAgICAgcmV0dXJuIE1lZGlhUGxheWVyOjpJc1N1cHBvcnRlZDsKLSAgICByZXR1
cm4gTWVkaWFQbGF5ZXI6OklzTm90U3VwcG9ydGVkOwotfQotCi1ib29sIE1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lck93cjo6aW5pdGlhbGl6ZUdTdHJlYW1lckFuZEdTdHJlYW1lckRlYnVnZ2lu
ZygpCi17Ci0gICAgaWYgKCFpbml0aWFsaXplR1N0cmVhbWVyKCkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBkZWJ1Z1JlZ2lzdGVyZWRGbGFnOwot
ICAgIHN0ZDo6Y2FsbF9vbmNlKGRlYnVnUmVnaXN0ZXJlZEZsYWcsIFtdIHsKLSAgICAgICAgR1NU
X0RFQlVHX0NBVEVHT1JZX0lOSVQod2Via2l0X29wZW53ZWJydGNfZGVidWcsICJ3ZWJraXRvd3Jw
bGF5ZXIiLCAwLCAiV2ViS2l0IE9wZW5XZWJSVEMgcGxheWVyIik7Ci0gICAgfSk7Ci0KLSAgICBy
ZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3I6OmNy
ZWF0ZUdTVEF1ZGlvU2lua0JpbigpCi17Ci0gICAgQVNTRVJUKCFtX2F1ZGlvU2luayk7Ci0gICAg
R1NUX0RFQlVHKCJDcmVhdGluZyBhdWRpbyBzaW5rIik7Ci0gICAgLy8gRklYTUU6IHZvbHVtZS9t
dXRlIHN1cHBvcnQ6IGh0dHBzOi8vd2Via2l0Lm9yZy9iLzE1MzgyOC4KLQotICAgIC8vIFByZS1y
b2xsIGFuIGF1dG9hdWRpb3Npbmsgc28gdGhhdCB0aGUgcGxhdGZvcm0gYXVkaW8gc2luayBpcyBj
cmVhdGVkIGFuZAotICAgIC8vIGNhbiBiZSByZXRyaWV2ZWQgZnJvbSB0aGUgYXV0b2F1ZGlvc2lu
ayBiaW4uCi0gICAgR1JlZlB0cjxHc3RFbGVtZW50PiBzaW5rID0gZ3N0X2VsZW1lbnRfZmFjdG9y
eV9tYWtlKCJhdXRvYXVkaW9zaW5rIiwgbnVsbHB0cik7Ci0gICAgR3N0Q2hpbGRQcm94eSogY2hp
bGRQcm94eSA9IEdTVF9DSElMRF9QUk9YWShzaW5rLmdldCgpKTsKLSAgICBnc3RfZWxlbWVudF9z
ZXRfc3RhdGUoc2luay5nZXQoKSwgR1NUX1NUQVRFX1JFQURZKTsKLSAgICBHUmVmUHRyPEdzdEVs
ZW1lbnQ+IHBsYXRmb3JtU2luayA9IGFkb3B0R1JlZihHU1RfRUxFTUVOVChnc3RfY2hpbGRfcHJv
eHlfZ2V0X2NoaWxkX2J5X2luZGV4KGNoaWxkUHJveHksIDApKSk7Ci0gICAgR3N0RWxlbWVudEZh
Y3RvcnkqIGZhY3RvcnkgPSBnc3RfZWxlbWVudF9nZXRfZmFjdG9yeShwbGF0Zm9ybVNpbmsuZ2V0
KCkpOwotCi0gICAgLy8gRGlzcG9zZSBub3cgdW4tbmVlZGVkIGF1dG9hdWRpb3NpbmsuCi0gICAg
Z3N0X2VsZW1lbnRfc2V0X3N0YXRlKHNpbmsuZ2V0KCksIEdTVF9TVEFURV9OVUxMKTsKLQotICAg
IC8vIENyZWF0ZSBhIGZyZXNoIG5ldyBhdWRpbyBzaW5rIGNvbXBhdGlibGUgd2l0aCB0aGUgcGxh
dGZvcm0uCi0gICAgbV9hdWRpb1NpbmsgPSBnc3RfZWxlbWVudF9mYWN0b3J5X2NyZWF0ZShmYWN0
b3J5LCBudWxscHRyKTsKLSAgICBtX2F1ZGlvUmVuZGVyZXIgPSBhZG9wdEdSZWYob3dyX2dzdF9h
dWRpb19yZW5kZXJlcl9uZXcobV9hdWRpb1NpbmsuZ2V0KCkpKTsKLX0KLQotdm9pZCBNZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXJPd3I6OnRyYWNrRW5kZWQoTWVkaWFTdHJlYW1UcmFja1ByaXZh
dGUmIHRyYWNrKQotewotICAgIEdTVF9ERUJVRygiVHJhY2sgZW5kZWQiKTsKLQotICAgIGlmICgh
bV9zdHJlYW1Qcml2YXRlIHx8ICFtX3N0cmVhbVByaXZhdGUtPmFjdGl2ZSgpKSB7Ci0gICAgICAg
IHN0b3AoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICgmdHJhY2sgPT0gbV9h
dWRpb1RyYWNrKQotICAgICAgICBnX29iamVjdF9zZXQobV9hdWRpb1JlbmRlcmVyLmdldCgpLCAi
ZGlzYWJsZWQiLCB0cnVlLCBudWxscHRyKTsKLSAgICBlbHNlIGlmICgmdHJhY2sgPT0gbV92aWRl
b1RyYWNrKSB7Ci0gICAgICAgIGdfb2JqZWN0X3NldChtX3ZpZGVvUmVuZGVyZXIuZ2V0KCksICJk
aXNhYmxlZCIsIHRydWUsIG51bGxwdHIpOwotICAgICAgICBhdXRvJiByZWFsVGltZU1lZGlhU291
cmNlID0gc3RhdGljX2Nhc3Q8UmVhbHRpbWVNZWRpYVNvdXJjZU93ciY+KG1fdmlkZW9UcmFjay0+
c291cmNlKCkpOwotICAgICAgICByZWFsVGltZU1lZGlhU291cmNlLnNldFdpZHRoKDApOwotICAg
ICAgICByZWFsVGltZU1lZGlhU291cmNlLnNldEhlaWdodCgwKTsKLSAgICAgICAgYXV0byB2aWRl
b1RyYWNrID0gbV92aWRlb1RyYWNrTWFwLmdldChtX3ZpZGVvVHJhY2stPmlkKCkpOwotICAgICAg
ICBpZiAodmlkZW9UcmFjaykKLSAgICAgICAgICAgIHZpZGVvVHJhY2stPnNldFNlbGVjdGVkKGZh
bHNlKTsKLSAgICB9Ci0KLSAgICBnYm9vbGVhbiBhdWRpb0Rpc2FibGVkOwotICAgIGdib29sZWFu
IHZpZGVvRGlzYWJsZWQ7Ci0gICAgZ19vYmplY3RfZ2V0KG1fYXVkaW9SZW5kZXJlci5nZXQoKSwg
ImRpc2FibGVkIiwgJmF1ZGlvRGlzYWJsZWQsIG51bGxwdHIpOwotICAgIGdfb2JqZWN0X2dldCht
X3ZpZGVvUmVuZGVyZXIuZ2V0KCksICJkaXNhYmxlZCIsICZ2aWRlb0Rpc2FibGVkLCBudWxscHRy
KTsKLSAgICBpZiAoYXVkaW9EaXNhYmxlZCAmJiB2aWRlb0Rpc2FibGVkKSB7Ci0gICAgICAgIG1f
ZW5kZWQgPSB0cnVlOwotICAgICAgICBtX3BsYXllci0+dGltZUNoYW5nZWQoKTsKLSAgICB9Ci19
Ci0KLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyOjp0cmFja011dGVkQ2hhbmdl
ZChNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZSYgdHJhY2spCi17Ci0gICAgR1NUX0RFQlVHKCJUcmFj
ayBtdXRlZCBzdGF0ZSBjaGFuZ2VkIik7Ci0KLSAgICBtYXliZUhhbmRsZUNoYW5nZU11dGVkU3Rh
dGUodHJhY2spOwotfQotCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93cjo6bWF5
YmVIYW5kbGVDaGFuZ2VNdXRlZFN0YXRlKE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlJiB0cmFjaykK
LXsKLSAgICBhdXRvJiByZWFsVGltZU1lZGlhU291cmNlID0gc3RhdGljX2Nhc3Q8UmVhbHRpbWVN
ZWRpYVNvdXJjZU93ciY+KHRyYWNrLnNvdXJjZSgpKTsKLSAgICBhdXRvIG1lZGlhU291cmNlID0g
T1dSX01FRElBX1NPVVJDRShyZWFsVGltZU1lZGlhU291cmNlLm1lZGlhU291cmNlKCkpOwotCi0g
ICAgR1NUX0RFQlVHKCIlcyB0cmFjayBub3cgJXMiLCB0cmFjay50eXBlKCkgPT0gUmVhbHRpbWVN
ZWRpYVNvdXJjZTo6VHlwZTo6QXVkaW8gPyAiYXVkaW8iOiJ2aWRlbyIsIHJlYWxUaW1lTWVkaWFT
b3VyY2UubXV0ZWQoKSA/ICJtdXRlZCI6InVuLW11dGVkIik7Ci0gICAgc3dpdGNoICh0cmFjay50
eXBlKCkpIHsKLSAgICBjYXNlIFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGU6OkF1ZGlvOgotICAg
ICAgICBpZiAoIXJlYWxUaW1lTWVkaWFTb3VyY2UubXV0ZWQoKSkgewotICAgICAgICAgICAgZ19v
YmplY3Rfc2V0KG1fYXVkaW9SZW5kZXJlci5nZXQoKSwgImRpc2FibGVkIiwgZmFsc2UsIG51bGxw
dHIpOwotICAgICAgICAgICAgb3dyX21lZGlhX3JlbmRlcmVyX3NldF9zb3VyY2UoT1dSX01FRElB
X1JFTkRFUkVSKG1fYXVkaW9SZW5kZXJlci5nZXQoKSksIG1lZGlhU291cmNlKTsKLSAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgIGdfb2JqZWN0X3NldChtX2F1ZGlvUmVuZGVyZXIuZ2V0KCks
ICJkaXNhYmxlZCIsIHRydWUsIG51bGxwdHIpOwotICAgICAgICAgICAgb3dyX21lZGlhX3JlbmRl
cmVyX3NldF9zb3VyY2UoT1dSX01FRElBX1JFTkRFUkVSKG1fYXVkaW9SZW5kZXJlci5nZXQoKSks
IG51bGxwdHIpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChtZWRpYVNvdXJjZSkKLSAgICAgICAg
ICAgIGdfb2JqZWN0X3NldChtZWRpYVNvdXJjZSwgIm11dGUiLCAhdHJhY2suZW5hYmxlZCgpLCBu
dWxscHRyKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBSZWFsdGltZU1lZGlhU291cmNlOjpU
eXBlOjpWaWRlbzoKLSAgICAgICAgaWYgKCFyZWFsVGltZU1lZGlhU291cmNlLm11dGVkKCkpIHsK
LSAgICAgICAgICAgIGdfb2JqZWN0X3NldChtX3ZpZGVvUmVuZGVyZXIuZ2V0KCksICJkaXNhYmxl
ZCIsIGZhbHNlLCBudWxscHRyKTsKLSAgICAgICAgICAgIG93cl9tZWRpYV9yZW5kZXJlcl9zZXRf
c291cmNlKE9XUl9NRURJQV9SRU5ERVJFUihtX3ZpZGVvUmVuZGVyZXIuZ2V0KCkpLCBtZWRpYVNv
dXJjZSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBnX29iamVjdF9zZXQobV92aWRl
b1JlbmRlcmVyLmdldCgpLCAiZGlzYWJsZWQiLCB0cnVlLCBudWxscHRyKTsKLSAgICAgICAgICAg
IG93cl9tZWRpYV9yZW5kZXJlcl9zZXRfc291cmNlKE9XUl9NRURJQV9SRU5ERVJFUihtX3ZpZGVv
UmVuZGVyZXIuZ2V0KCkpLCBudWxscHRyKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGU6Ok5vbmU6Ci0gICAgICAgIEdTVF9XQVJO
SU5HKCJUcnlpbmcgdG8gY2hhbmdlIG11dGUgc3RhdGUgb2YgYSB0cmFjayB3aXRoIE5vbmUgdHlw
ZSIpOwotICAgIH0KLX0KLQotdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3I6OnRy
YWNrU2V0dGluZ3NDaGFuZ2VkKE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlJikKLXsKLSAgICBHU1Rf
REVCVUcoIlRyYWNrIHNldHRpbmdzIGNoYW5nZWQiKTsKLX0KLQotdm9pZCBNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXJPd3I6OnRyYWNrRW5hYmxlZENoYW5nZWQoTWVkaWFTdHJlYW1UcmFja1By
aXZhdGUmIHRyYWNrKQotewotICAgIEdTVF9ERUJVRygiJXMgdHJhY2sgbm93ICVzIiwgdHJhY2su
dHlwZSgpID09IFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGU6OkF1ZGlvID8gImF1ZGlvIjoidmlk
ZW8iLCB0cmFjay5lbmFibGVkKCkgPyAiZW5hYmxlZCI6ImRpc2FibGVkIik7Ci0KLSAgICBzd2l0
Y2ggKHRyYWNrLnR5cGUoKSkgewotICAgIGNhc2UgUmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlwZTo6
QXVkaW86Ci0gICAgICAgIGdfb2JqZWN0X3NldChtX2F1ZGlvUmVuZGVyZXIuZ2V0KCksICJkaXNh
YmxlZCIsICF0cmFjay5lbmFibGVkKCksIG51bGxwdHIpOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGU6OlZpZGVvOgotICAgICAgICBnX29iamVjdF9z
ZXQobV92aWRlb1JlbmRlcmVyLmdldCgpLCAiZGlzYWJsZWQiLCAhdHJhY2suZW5hYmxlZCgpLCBu
dWxscHRyKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBSZWFsdGltZU1lZGlhU291cmNlOjpU
eXBlOjpOb25lOgotICAgICAgICBHU1RfV0FSTklORygiVHJ5aW5nIHRvIGNoYW5nZSBlbmFibGVk
IHN0YXRlIG9mIGEgdHJhY2sgd2l0aCBOb25lIHR5cGUiKTsKLSAgICB9Ci19Ci0KLUdzdEVsZW1l
bnQqIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93cjo6Y3JlYXRlVmlkZW9TaW5rKCkKLXsK
LSAgICBHc3RFbGVtZW50KiBzaW5rOwotI2lmIFVTRShHU1RSRUFNRVJfR0wpCi0gICAgLy8gTm8g
bmVlZCB0byBjcmVhdGUgZ2x1cGxvYWQgYW5kIGdsY29sb3Jjb252ZXJ0IGhlcmUgYmVjYXVzZSB0
aGV5IGFyZQotICAgIC8vIGFscmVhZHkgY3JlYXRlZCBieSB0aGUgdmlkZW8gcmVuZGVyZXIuCi0g
ICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHByb2JhYmx5IHJldHVybiBhIFJlZlB0ci4gU2VlIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjQ3MDkuCi0gICAgc2luayA9
IE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6OmNyZWF0ZUdMQXBwU2luaygpOwotICAg
IG1fdmlkZW9TaW5rID0gc2luazsKLSNlbHNlCi0gICAgaWYgKG1fc3RyZWFtUHJpdmF0ZS0+Z2V0
VmlkZW9SZW5kZXJlcigpKSB7Ci0gICAgICAgIG1fdmlkZW9SZW5kZXJlciA9IG1fc3RyZWFtUHJp
dmF0ZS0+Z2V0VmlkZW9SZW5kZXJlcigpOwotICAgICAgICBtX3ZpZGVvU2luayA9IG1fc3RyZWFt
UHJpdmF0ZS0+Z2V0VmlkZW9TaW5rRWxlbWVudCgpOwotICAgICAgICBnX3NpZ25hbF9jb25uZWN0
X3N3YXBwZWQobV92aWRlb1NpbmsuZ2V0KCksICJyZXBhaW50LXJlcXVlc3RlZCIsIEdfQ0FMTEJB
Q0soTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6cmVwYWludENhbGxiYWNrKSwgdGhp
cyk7Ci0gICAgICAgIGdfb2JqZWN0X2dldChtX3ZpZGVvUmVuZGVyZXIuZ2V0KCksICJzaW5rIiwg
JnNpbmssIG51bGxwdHIpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIEdzdEVsZW1lbnQqIGdsZG93
bmxvYWQgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UoImdsZG93bmxvYWQiLCBudWxscHRyKTsK
LSAgICAgICAgR3N0RWxlbWVudCogdmlkZW9jb252ZXJ0ID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9t
YWtlKCJ2aWRlb2NvbnZlcnQiLCBudWxscHRyKTsKLSAgICAgICAgR3N0RWxlbWVudCogd2Via2l0
U2luayA9IE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6OmNyZWF0ZVZpZGVvU2luaygp
OwotICAgICAgICBzaW5rID0gZ3N0X2Jpbl9uZXcobnVsbHB0cik7Ci0gICAgICAgIGdzdF9iaW5f
YWRkX21hbnkoR1NUX0JJTihzaW5rKSwgZ2xkb3dubG9hZCwgdmlkZW9jb252ZXJ0LCB3ZWJraXRT
aW5rLCBudWxscHRyKTsKLSAgICAgICAgZ3N0X2VsZW1lbnRfbGlua19tYW55KGdsZG93bmxvYWQs
IHZpZGVvY29udmVydCwgd2Via2l0U2luaywgbnVsbHB0cik7Ci0gICAgICAgIEdSZWZQdHI8R3N0
UGFkPiBwYWQgPSBhZG9wdEdSZWYoZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQoZ2xkb3dubG9h
ZCwgInNpbmsiKSk7Ci0gICAgICAgIGdzdF9lbGVtZW50X2FkZF9wYWQoc2luaywgZ3N0X2dob3N0
X3BhZF9uZXcoInNpbmsiLCBwYWQuZ2V0KCkpKTsKLSAgICB9Ci0jZW5kaWYKLSAgICBpZiAoIW1f
dmlkZW9SZW5kZXJlcikgewotICAgICAgICBtX3ZpZGVvUmVuZGVyZXIgPSBhZG9wdEdSZWYob3dy
X2dzdF92aWRlb19yZW5kZXJlcl9uZXcoc2luaykpOwotI2lmIFVTRShHU1RSRUFNRVJfR0wpCi0g
ICAgICAgIG93cl92aWRlb19yZW5kZXJlcl9zZXRfcmVxdWVzdF9jb250ZXh0X2NhbGxiYWNrKE9X
Ul9WSURFT19SRU5ERVJFUihtX3ZpZGVvUmVuZGVyZXIuZ2V0KCkpLCAoT3dyVmlkZW9SZW5kZXJl
clJlcXVlc3RDb250ZXh0Q2FsbGJhY2spIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6
OnJlcXVlc3RHTENvbnRleHQsIHRoaXMsIG51bGxwdHIpOwotI2VuZGlmCi0gICAgICAgIG1fc3Ry
ZWFtUHJpdmF0ZS0+c2V0VmlkZW9SZW5kZXJlcihtX3ZpZGVvUmVuZGVyZXIuZ2V0KCksIHZpZGVv
U2luaygpKTsKLSAgICB9Ci0gICAgcmV0dXJuIHNpbms7Ci19Ci0KLXZvaWQgTWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyT3dyOjpzZXRTaXplKGNvbnN0IEludFNpemUmIHNpemUpCi17Ci0gICAg
aWYgKHNpemUgPT0gbV9zaXplKQotICAgICAgICByZXR1cm47Ci0KLSAgICBNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXJCYXNlOjpzZXRTaXplKHNpemUpOwotICAgIGlmIChtX3ZpZGVvUmVuZGVy
ZXIpCi0gICAgICAgIGdfb2JqZWN0X3NldChtX3ZpZGVvUmVuZGVyZXIuZ2V0KCksICJ3aWR0aCIs
IHNpemUud2lkdGgoKSwgImhlaWdodCIsIHNpemUuaGVpZ2h0KCksIG51bGxwdHIpOwotCi0gICAg
aWYgKCFtX3ZpZGVvVHJhY2spCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8mIHJlYWxUaW1l
TWVkaWFTb3VyY2UgPSBzdGF0aWNfY2FzdDxSZWFsdGltZU1lZGlhU291cmNlT3dyJj4obV92aWRl
b1RyYWNrLT5zb3VyY2UoKSk7Ci0gICAgcmVhbFRpbWVNZWRpYVNvdXJjZS5zZXRXaWR0aChzaXpl
LndpZHRoKCkpOwotICAgIHJlYWxUaW1lTWVkaWFTb3VyY2Uuc2V0SGVpZ2h0KHNpemUuaGVpZ2h0
KCkpOwotfQotCi1GbG9hdFNpemUgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyOjpuYXR1
cmFsU2l6ZSgpIGNvbnN0Ci17Ci0gICAgYXV0byBzaXplID0gTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyQmFzZTo6bmF0dXJhbFNpemUoKTsKLQotICAgIC8vIEluIGNhc2Ugd2UgYXJlIG5vdCBw
bGF5aW5nIHRoZSB2aWRlbyB3ZSByZXR1cm4gdGhlIHNpemUgd2Ugc2V0IHRvIHRoZSBtZWRpYSBz
b3VyY2UuCi0gICAgaWYgKG1fdmlkZW9UcmFjayAmJiBzaXplLmlzWmVybygpKSB7Ci0gICAgICAg
IGF1dG8mIHJlYWxUaW1lTWVkaWFTb3VyY2UgPSBzdGF0aWNfY2FzdDxSZWFsdGltZU1lZGlhU291
cmNlT3dyJj4obV92aWRlb1RyYWNrLT5zb3VyY2UoKSk7Ci0gICAgICAgIHJldHVybiByZWFsVGlt
ZU1lZGlhU291cmNlLnNpemUoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gc2l6ZTsKLX0KLQotfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKFZJREVPKSAmJiBFTkFCTEUo
TUVESUFfU1RSRUFNKSAmJiBVU0UoR1NUUkVBTUVSKSAmJiBVU0UoT1BFTldFQlJUQykKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXJPd3IuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3IuaApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMzM0NjMwZTQ1YzM0ODFiYTdkNDJmNTY2MzdlMGRhYTA1MTU0
YmQyZi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyT3dyLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMjggKzAsMCBAQAotLyoKLSAqICBD
b3B5cmlnaHQgKEMpIDIwMTUgSWdhbGlhIFMuTC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqICBD
b3B5cmlnaHQgKEMpIDIwMTUgTWV0cm9sb2dpY2FsLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCi0gKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3Nl
ciBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0g
KiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiAg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9u
LCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0gKi8KLQotI2lmbmRlZiBNZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXJPd3JfaAotI2RlZmluZSBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3JfaAot
Ci0jaWYgRU5BQkxFKFZJREVPKSAmJiBFTkFCTEUoTUVESUFfU1RSRUFNKSAmJiBVU0UoR1NUUkVB
TUVSKSAmJiBVU0UoT1BFTldFQlJUQykKLQotI2luY2x1ZGUgIkF1ZGlvVHJhY2tQcml2YXRlTWVk
aWFTdHJlYW0uaCIKLSNpbmNsdWRlICJNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlLmgi
Ci0jaW5jbHVkZSAiTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUuaCIKLSNpbmNsdWRlICJWaWRlb1Ry
YWNrUHJpdmF0ZU1lZGlhU3RyZWFtLmgiCi0KLXR5cGVkZWYgc3RydWN0IF9Pd3JHc3RWaWRlb1Jl
bmRlcmVyIE93ckdzdFZpZGVvUmVuZGVyZXI7Ci10eXBlZGVmIHN0cnVjdCBfT3dyR3N0QXVkaW9S
ZW5kZXJlciBPd3JHc3RBdWRpb1JlbmRlcmVyOwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNs
YXNzIE1lZGlhU3RyZWFtUHJpdmF0ZTsKLWNsYXNzIFJlYWx0aW1lTWVkaWFTb3VyY2VPd3I7Ci0K
LWNsYXNzIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93ciA6IHB1YmxpYyBNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXJCYXNlLCBwcml2YXRlIE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlOjpP
YnNlcnZlciB7Ci1wdWJsaWM6Ci0gICAgZXhwbGljaXQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyT3dyKE1lZGlhUGxheWVyKik7Ci0gICAgfk1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93
cigpOwotCi0gICAgc3RhdGljIHZvaWQgcmVnaXN0ZXJNZWRpYUVuZ2luZShNZWRpYUVuZ2luZVJl
Z2lzdHJhcik7Ci0KLSAgICB2b2lkIHNldFNpemUoY29uc3QgSW50U2l6ZSYpIGZpbmFsOwotCi0g
ICAgRmxvYXRTaXplIG5hdHVyYWxTaXplKCkgY29uc3QgZmluYWw7Ci0KLXByaXZhdGU6Ci0gICAg
R3N0RWxlbWVudCogY3JlYXRlVmlkZW9TaW5rKCkgZmluYWw7Ci0gICAgR3N0RWxlbWVudCogYXVk
aW9TaW5rKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9hdWRpb1NpbmsuZ2V0KCk7IH0KLSAgICBi
b29sIGlzTGl2ZVN0cmVhbSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHRydWU7IH0KLQotICAgIFN0
cmluZyBlbmdpbmVEZXNjcmlwdGlvbigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJPcGVuV2ViUlRD
IjsgfQotCi0gICAgdm9pZCBsb2FkKGNvbnN0IFN0cmluZyYpIGZpbmFsOwotI2lmIEVOQUJMRShN
RURJQV9TT1VSQ0UpCi0gICAgdm9pZCBsb2FkKGNvbnN0IFN0cmluZyYsIE1lZGlhU291cmNlUHJp
dmF0ZUNsaWVudCopIGZpbmFsOwotI2VuZGlmCi0gICAgdm9pZCBsb2FkKE1lZGlhU3RyZWFtUHJp
dmF0ZSYpIGZpbmFsOwotICAgIHZvaWQgY2FuY2VsTG9hZCgpIGZpbmFsIHsgfQotCi0gICAgdm9p
ZCBwcmVwYXJlVG9QbGF5KCkgZmluYWwgeyB9Ci0gICAgdm9pZCBwbGF5KCkgZmluYWw7Ci0gICAg
dm9pZCBwYXVzZSgpIGZpbmFsOwotCi0gICAgYm9vbCBoYXNWaWRlbygpIGNvbnN0IGZpbmFsOwot
ICAgIGJvb2wgaGFzQXVkaW8oKSBjb25zdCBmaW5hbDsKLQotICAgIGZsb2F0IGR1cmF0aW9uKCkg
Y29uc3QgZmluYWwgeyByZXR1cm4gMDsgfQotCi0gICAgZmxvYXQgY3VycmVudFRpbWUoKSBjb25z
dCBmaW5hbDsKLSAgICB2b2lkIHNlZWsoZmxvYXQpIGZpbmFsIHsgfQotICAgIGJvb2wgc2Vla2lu
ZygpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9Ci0KLSAgICB2b2lkIHNldFJhdGUoZmxv
YXQpIGZpbmFsIHsgfQotICAgIHZvaWQgc2V0UHJlc2VydmVzUGl0Y2goYm9vbCkgZmluYWwgeyB9
Ci0gICAgYm9vbCBwYXVzZWQoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3BhdXNlZDsgfQotCi0g
ICAgdm9pZCBzZXRWb2x1bWUoZmxvYXQpIGZpbmFsOwotICAgIHZvaWQgc2V0TXV0ZWQoYm9vbCkg
ZmluYWw7Ci0KLSAgICBib29sIGhhc0Nsb3NlZENhcHRpb25zKCkgY29uc3QgZmluYWwgeyByZXR1
cm4gZmFsc2U7IH0KLSAgICB2b2lkIHNldENsb3NlZENhcHRpb25zVmlzaWJsZShib29sKSBmaW5h
bCB7IH07Ci0KLSAgICBmbG9hdCBtYXhUaW1lU2Vla2FibGUoKSBjb25zdCBmaW5hbCB7IHJldHVy
biAwOyB9Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFBsYXRmb3JtVGltZVJhbmdlcz4gYnVmZmVyZWQo
KSBjb25zdCBmaW5hbCB7IHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPFBsYXRmb3JtVGltZVJhbmdl
cz4oKTsgfQotICAgIGJvb2wgZGlkTG9hZGluZ1Byb2dyZXNzKCkgY29uc3QgZmluYWw7Ci0KLSAg
ICB1bnNpZ25lZCBsb25nIGxvbmcgdG90YWxCeXRlcygpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIDA7
IH0KLQotICAgIGJvb2wgY2FuTG9hZFBvc3RlcigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIGZhbHNl
OyB9Ci0gICAgdm9pZCBzZXRQb3N0ZXIoY29uc3QgU3RyaW5nJikgZmluYWwgeyB9Ci0gICAgYm9v
bCBlbmRlZCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fZW5kZWQ7IH0KLQotICAgIC8vIE1lZGlh
U3RyZWFtVHJhY2tQcml2YXRlOjpPYnNlcnZlciBpbXBsZW1lbnRhdGlvbi4KLSAgICB2b2lkIHRy
YWNrRW5kZWQoTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUmKSBmaW5hbDsKLSAgICB2b2lkIHRyYWNr
TXV0ZWRDaGFuZ2VkKE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlJikgZmluYWw7Ci0gICAgdm9pZCB0
cmFja1NldHRpbmdzQ2hhbmdlZChNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZSYpIGZpbmFsOwotICAg
IHZvaWQgdHJhY2tFbmFibGVkQ2hhbmdlZChNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZSYpIGZpbmFs
OwotCi0gICAgc3RhdGljIHZvaWQgZ2V0U3VwcG9ydGVkVHlwZXMoSGFzaFNldDxTdHJpbmcsIEFT
Q0lJQ2FzZUluc2Vuc2l0aXZlSGFzaD4mKTsKLSAgICBzdGF0aWMgTWVkaWFQbGF5ZXI6OlN1cHBv
cnRzVHlwZSBzdXBwb3J0c1R5cGUoY29uc3QgTWVkaWFFbmdpbmVTdXBwb3J0UGFyYW1ldGVycyYp
OwotICAgIHN0YXRpYyBib29sIGluaXRpYWxpemVHU3RyZWFtZXJBbmRHU3RyZWFtZXJEZWJ1Z2dp
bmcoKTsKLSAgICB2b2lkIGNyZWF0ZUdTVEF1ZGlvU2lua0JpbigpOwotICAgIHZvaWQgbG9hZGlu
Z0ZhaWxlZChNZWRpYVBsYXllcjo6TmV0d29ya1N0YXRlIGVycm9yKTsKLSAgICB2b2lkIHN0b3Ao
KTsKLSAgICB2b2lkIG1heWJlSGFuZGxlQ2hhbmdlTXV0ZWRTdGF0ZShNZWRpYVN0cmVhbVRyYWNr
UHJpdmF0ZSYpOwotICAgIHZvaWQgZGlzYWJsZU1lZGlhVHJhY2tzKCk7Ci0KLSAgICBib29sIG1f
cGF1c2VkIHsgdHJ1ZSB9OwotICAgIGJvb2wgbV9lbmRlZCB7IGZhbHNlIH07Ci0gICAgUmVmUHRy
PE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlPiBtX3ZpZGVvVHJhY2s7Ci0gICAgUmVmUHRyPE1lZGlh
U3RyZWFtVHJhY2tQcml2YXRlPiBtX2F1ZGlvVHJhY2s7Ci0gICAgR1JlZlB0cjxHc3RFbGVtZW50
PiBtX2F1ZGlvU2luazsKLSAgICBSZWZQdHI8TWVkaWFTdHJlYW1Qcml2YXRlPiBtX3N0cmVhbVBy
aXZhdGU7Ci0gICAgR1JlZlB0cjxPd3JHc3RWaWRlb1JlbmRlcmVyPiBtX3ZpZGVvUmVuZGVyZXI7
Ci0gICAgR1JlZlB0cjxPd3JHc3RBdWRpb1JlbmRlcmVyPiBtX2F1ZGlvUmVuZGVyZXI7Ci0KLSAg
ICBIYXNoTWFwPFN0cmluZywgUmVmUHRyPEF1ZGlvVHJhY2tQcml2YXRlTWVkaWFTdHJlYW0+PiBt
X2F1ZGlvVHJhY2tNYXA7Ci0gICAgSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxWaWRlb1RyYWNrUHJp
dmF0ZU1lZGlhU3RyZWFtPj4gbV92aWRlb1RyYWNrTWFwOwotfTsKLQotfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKFZJREVPKSAmJiBFTkFCTEUoTUVESUFfU1RSRUFN
KSAmJiBVU0UoR1NUUkVBTUVSKSAmJiBVU0UoT1BFTldFQlJUQykKLQotI2VuZGlmIC8vIE1lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lck93cl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYUVuZHBvaW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21lZGlhc3RyZWFtL01lZGlhRW5kcG9pbnQuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCBkMTM3NWZkNGMwNDEzOGRmZTE2NWMzNTRiMjFlYTliNTYyNWZhZmJjLi4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhRW5kcG9pbnQuY3BwCisrKyAvZGV2L251bGwKQEAg
LTEsODYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBFcmljc3NvbiBBQi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqCi0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgotICogICAgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZQotICogICAgZGlzdHJpYnV0aW9uLgotICogMy4gTmVpdGhlciB0aGUg
bmFtZSBvZiBFcmljc3NvbiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAg
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20g
dGhpcwotICogICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgot
ICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoV0VC
X1JUQykKLSNpbmNsdWRlICJNZWRpYUVuZHBvaW50LmgiCi0KLSNpbmNsdWRlICJNZWRpYVBheWxv
YWQuaCIKLSNpbmNsdWRlICJSVENEYXRhQ2hhbm5lbEhhbmRsZXIuaCIKLSNpbmNsdWRlICJSZWFs
dGltZU1lZGlhU291cmNlLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgRW1wdHlS
ZWFsdGltZU1lZGlhU291cmNlIGZpbmFsIDogcHVibGljIFJlYWx0aW1lTWVkaWFTb3VyY2Ugewot
cHVibGljOgotICAgIHN0YXRpYyBSZWY8RW1wdHlSZWFsdGltZU1lZGlhU291cmNlPiBjcmVhdGUo
KSB7IHJldHVybiBhZG9wdFJlZigqbmV3IEVtcHR5UmVhbHRpbWVNZWRpYVNvdXJjZSgpKTsgfQot
Ci1wcml2YXRlOgotICAgIEVtcHR5UmVhbHRpbWVNZWRpYVNvdXJjZSgpIDogUmVhbHRpbWVNZWRp
YVNvdXJjZShlbXB0eVN0cmluZygpLCBUeXBlOjpOb25lLCBlbXB0eVN0cmluZygpKSB7IH0KLQot
ICAgIGNvbnN0IFJlYWx0aW1lTWVkaWFTb3VyY2VDYXBhYmlsaXRpZXMmIGNhcGFiaWxpdGllcygp
IGNvbnN0IGZpbmFsIHsgcmV0dXJuIFJlYWx0aW1lTWVkaWFTb3VyY2VDYXBhYmlsaXRpZXM6OmVt
cHR5Q2FwYWJpbGl0aWVzKCk7IH0KLSAgICBjb25zdCBSZWFsdGltZU1lZGlhU291cmNlU2V0dGlu
Z3MmIHNldHRpbmdzKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9zb3VyY2VTZXR0aW5nczsgfQot
Ci0gICAgUmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzIG1fc291cmNlU2V0dGluZ3M7Ci19Owot
Ci1jbGFzcyBFbXB0eU1lZGlhRW5kcG9pbnQgZmluYWwgOiBwdWJsaWMgTWVkaWFFbmRwb2ludCB7
Ci1wcml2YXRlOgotICAgIHZvaWQgc2V0Q29uZmlndXJhdGlvbihNZWRpYUVuZHBvaW50Q29uZmln
dXJhdGlvbiYmKSBmaW5hbCB7IH0KLQotICAgIHZvaWQgZ2VuZXJhdGVEdGxzSW5mbygpIGZpbmFs
IHsgfQotICAgIE1lZGlhUGF5bG9hZFZlY3RvciBnZXREZWZhdWx0QXVkaW9QYXlsb2FkcygpIGZp
bmFsIHsgcmV0dXJuIE1lZGlhUGF5bG9hZFZlY3RvcigpOyB9Ci0gICAgTWVkaWFQYXlsb2FkVmVj
dG9yIGdldERlZmF1bHRWaWRlb1BheWxvYWRzKCkgZmluYWwgeyByZXR1cm4gTWVkaWFQYXlsb2Fk
VmVjdG9yKCk7IH0KLSAgICBNZWRpYVBheWxvYWRWZWN0b3IgZmlsdGVyUGF5bG9hZHMoY29uc3Qg
TWVkaWFQYXlsb2FkVmVjdG9yJiwgY29uc3QgTWVkaWFQYXlsb2FkVmVjdG9yJikgZmluYWwgeyBy
ZXR1cm4gTWVkaWFQYXlsb2FkVmVjdG9yKCk7IH0KLQotICAgIFVwZGF0ZVJlc3VsdCB1cGRhdGVS
ZWNlaXZlQ29uZmlndXJhdGlvbihNZWRpYUVuZHBvaW50U2Vzc2lvbkNvbmZpZ3VyYXRpb24qLCBi
b29sKSBmaW5hbCB7IHJldHVybiBVcGRhdGVSZXN1bHQ6OkZhaWxlZDsgfQotICAgIFVwZGF0ZVJl
c3VsdCB1cGRhdGVTZW5kQ29uZmlndXJhdGlvbihNZWRpYUVuZHBvaW50U2Vzc2lvbkNvbmZpZ3Vy
YXRpb24qLCBjb25zdCBSZWFsdGltZU1lZGlhU291cmNlTWFwJiwgYm9vbCkgZmluYWwgeyByZXR1
cm4gVXBkYXRlUmVzdWx0OjpGYWlsZWQ7IH0KLQotICAgIHZvaWQgYWRkUmVtb3RlQ2FuZGlkYXRl
KGNvbnN0IEljZUNhbmRpZGF0ZSYsIGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYsIGNvbnN0
IFN0cmluZyYpIGZpbmFsIHsgfQotCi0gICAgUmVmPFJlYWx0aW1lTWVkaWFTb3VyY2U+IGNyZWF0
ZU11dGVkUmVtb3RlU291cmNlKGNvbnN0IFN0cmluZyYsIFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5
cGUpIGZpbmFsIHsgcmV0dXJuIEVtcHR5UmVhbHRpbWVNZWRpYVNvdXJjZTo6Y3JlYXRlKCk7IH0K
LSAgICB2b2lkIHJlcGxhY2VTZW5kU291cmNlKFJlYWx0aW1lTWVkaWFTb3VyY2UmLCBjb25zdCBT
dHJpbmcmKSBmaW5hbCB7IH0KLSAgICB2b2lkIHJlcGxhY2VNdXRlZFJlbW90ZVNvdXJjZU1pZChj
b25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmKSBmaW5hbCB7IH07Ci0KLSAgICBzdGQ6OnVuaXF1
ZV9wdHI8UlRDRGF0YUNoYW5uZWxIYW5kbGVyPiBjcmVhdGVEYXRhQ2hhbm5lbEhhbmRsZXIoY29u
c3QgU3RyaW5nJiwgY29uc3QgUlRDRGF0YUNoYW5uZWxJbml0JikgZmluYWwgeyByZXR1cm4gbnVs
bHB0cjsgfQotICAgIHZvaWQgc3RvcCgpIGZpbmFsIHsgfQotfTsKLQotc3RhdGljIHN0ZDo6dW5p
cXVlX3B0cjxNZWRpYUVuZHBvaW50PiBjcmVhdGVNZWRpYUVuZHBvaW50KE1lZGlhRW5kcG9pbnRD
bGllbnQmKQotewotICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPEVtcHR5TWVkaWFFbmRwb2lu
dD4oKTsKLX0KLQotQ3JlYXRlTWVkaWFFbmRwb2ludCBNZWRpYUVuZHBvaW50OjpjcmVhdGUgPSBj
cmVhdGVNZWRpYUVuZHBvaW50OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAv
LyBFTkFCTEUoV0VCX1JUQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21l
ZGlhc3RyZWFtL01lZGlhRW5kcG9pbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlh
c3RyZWFtL01lZGlhRW5kcG9pbnQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTFi
NTFkNGUwOGEzZGQzZWZiMDlhMDExZTMyOTc0ZDI4Yjc5ZGY3OC4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRp
YXN0cmVhbS9NZWRpYUVuZHBvaW50LmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMDggKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBFcmljc3NvbiBBQi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqICAgIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK
LSAqICAgIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgRXJpY3Nzb24g
bm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0gKiAgICBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSAqICAgIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0g
KiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotI3ByYWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUoV0VCX1JUQykKLQotI2luY2x1ZGUgIk1lZGlh
RW5kcG9pbnRDb25maWd1cmF0aW9uLmgiCi0jaW5jbHVkZSAiUGVlckNvbm5lY3Rpb25CYWNrZW5k
LmgiCi0jaW5jbHVkZSAiUlRDSWNlVHJhbnNwb3J0U3RhdGUuaCIKLSNpbmNsdWRlICJSZWFsdGlt
ZU1lZGlhU291cmNlLmgiCi0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KLSNpbmNsdWRlIDx3dGYv
dGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBNZWRpYUVu
ZHBvaW50OwotY2xhc3MgTWVkaWFFbmRwb2ludENsaWVudDsKLWNsYXNzIE1lZGlhRW5kcG9pbnRT
ZXNzaW9uQ29uZmlndXJhdGlvbjsKLWNsYXNzIE1lZGlhU3RyZWFtVHJhY2s7Ci1jbGFzcyBSVENE
YXRhQ2hhbm5lbEhhbmRsZXI7Ci1jbGFzcyBSZWFsdGltZU1lZGlhU291cmNlOwotCi1zdHJ1Y3Qg
SWNlQ2FuZGlkYXRlOwotc3RydWN0IE1lZGlhUGF5bG9hZDsKLXN0cnVjdCBSVENEYXRhQ2hhbm5l
bEluaXQ7Ci0KLXR5cGVkZWYgc3RkOjp1bmlxdWVfcHRyPE1lZGlhRW5kcG9pbnQ+ICgqQ3JlYXRl
TWVkaWFFbmRwb2ludCkoTWVkaWFFbmRwb2ludENsaWVudCYpOwotdHlwZWRlZiBWZWN0b3I8TWVk
aWFQYXlsb2FkPiBNZWRpYVBheWxvYWRWZWN0b3I7Ci10eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBS
ZWFsdGltZU1lZGlhU291cmNlKj4gUmVhbHRpbWVNZWRpYVNvdXJjZU1hcDsKLQotY2xhc3MgTWVk
aWFFbmRwb2ludCB7Ci1wdWJsaWM6Ci0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIENyZWF0ZU1l
ZGlhRW5kcG9pbnQgY3JlYXRlOwotICAgIHZpcnR1YWwgfk1lZGlhRW5kcG9pbnQoKSB7IH0KLQot
ICAgIGVudW0gY2xhc3MgVXBkYXRlUmVzdWx0IHsKLSAgICAgICAgU3VjY2VzcywKLSAgICAgICAg
U3VjY2Vzc1dpdGhJY2VSZXN0YXJ0LAotICAgICAgICBGYWlsZWQKLSAgICB9OwotCi0gICAgdmly
dHVhbCB2b2lkIHNldENvbmZpZ3VyYXRpb24oTWVkaWFFbmRwb2ludENvbmZpZ3VyYXRpb24mJikg
PSAwOwotCi0gICAgdmlydHVhbCB2b2lkIGdlbmVyYXRlRHRsc0luZm8oKSA9IDA7Ci0gICAgdmly
dHVhbCBNZWRpYVBheWxvYWRWZWN0b3IgZ2V0RGVmYXVsdEF1ZGlvUGF5bG9hZHMoKSA9IDA7Ci0g
ICAgdmlydHVhbCBNZWRpYVBheWxvYWRWZWN0b3IgZ2V0RGVmYXVsdFZpZGVvUGF5bG9hZHMoKSA9
IDA7Ci0gICAgdmlydHVhbCBNZWRpYVBheWxvYWRWZWN0b3IgZmlsdGVyUGF5bG9hZHMoY29uc3Qg
TWVkaWFQYXlsb2FkVmVjdG9yJiByZW1vdGVQYXlsb2FkcywgY29uc3QgTWVkaWFQYXlsb2FkVmVj
dG9yJiBkZWZhdWx0UGF5bG9hZHMpID0gMDsKLQotICAgIHZpcnR1YWwgVXBkYXRlUmVzdWx0IHVw
ZGF0ZVJlY2VpdmVDb25maWd1cmF0aW9uKE1lZGlhRW5kcG9pbnRTZXNzaW9uQ29uZmlndXJhdGlv
biosIGJvb2wgaXNJbml0aWF0b3IpID0gMDsKLSAgICB2aXJ0dWFsIFVwZGF0ZVJlc3VsdCB1cGRh
dGVTZW5kQ29uZmlndXJhdGlvbihNZWRpYUVuZHBvaW50U2Vzc2lvbkNvbmZpZ3VyYXRpb24qLCBj
b25zdCBSZWFsdGltZU1lZGlhU291cmNlTWFwJiwgYm9vbCBpc0luaXRpYXRvcikgPSAwOwotCi0g
ICAgdmlydHVhbCB2b2lkIGFkZFJlbW90ZUNhbmRpZGF0ZShjb25zdCBJY2VDYW5kaWRhdGUmLCBj
b25zdCBTdHJpbmcmIG1pZCwgY29uc3QgU3RyaW5nJiB1ZnJhZywgY29uc3QgU3RyaW5nJiBwYXNz
d29yZCkgPSAwOwotCi0gICAgdmlydHVhbCBSZWY8UmVhbHRpbWVNZWRpYVNvdXJjZT4gY3JlYXRl
TXV0ZWRSZW1vdGVTb3VyY2UoY29uc3QgU3RyaW5nJiBtaWQsIFJlYWx0aW1lTWVkaWFTb3VyY2U6
OlR5cGUpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVwbGFjZVNlbmRTb3VyY2UoUmVhbHRpbWVN
ZWRpYVNvdXJjZSYsIGNvbnN0IFN0cmluZyYgbWlkKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJl
cGxhY2VNdXRlZFJlbW90ZVNvdXJjZU1pZChjb25zdCBTdHJpbmcmIG9sZE1pZCwgY29uc3QgU3Ry
aW5nJiBuZXdNaWQpID0gMDsKLQotICAgIHZpcnR1YWwgc3RkOjp1bmlxdWVfcHRyPFJUQ0RhdGFD
aGFubmVsSGFuZGxlcj4gY3JlYXRlRGF0YUNoYW5uZWxIYW5kbGVyKGNvbnN0IFN0cmluZyYsIGNv
bnN0IFJUQ0RhdGFDaGFubmVsSW5pdCYpID0gMDsKLQotICAgIHZpcnR1YWwgdm9pZCBzdG9wKCkg
PSAwOwotCi0gICAgdmlydHVhbCB2b2lkIGVtdWxhdGVQbGF0Zm9ybUV2ZW50KGNvbnN0IFN0cmlu
ZyYpIHsgfTsKLQotICAgIHZpcnR1YWwgdm9pZCBnZXRTdGF0cyhNZWRpYVN0cmVhbVRyYWNrKiwg
UGVlckNvbm5lY3Rpb246OlN0YXRzUHJvbWlzZSYmIHByb21pc2UpIHsgcHJvbWlzZS5yZWplY3Qo
Tm90U3VwcG9ydGVkRXJyb3IpOyB9Ci19OwotCi1jbGFzcyBNZWRpYUVuZHBvaW50Q2xpZW50IHsK
LXB1YmxpYzoKLSAgICB2aXJ0dWFsIHZvaWQgZ290RHRsc0ZpbmdlcnByaW50KGNvbnN0IFN0cmlu
ZyYgZmluZ2VycHJpbnQsIGNvbnN0IFN0cmluZyYgZmluZ2VycHJpbnRGdW5jdGlvbikgPSAwOwot
ICAgIHZpcnR1YWwgdm9pZCBnb3RJY2VDYW5kaWRhdGUoY29uc3QgU3RyaW5nJiBtaWQsIEljZUNh
bmRpZGF0ZSYmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRvbmVHYXRoZXJpbmdDYW5kaWRhdGVz
KGNvbnN0IFN0cmluZyYgbWlkKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGljZVRyYW5zcG9ydFN0
YXRlQ2hhbmdlZChjb25zdCBTdHJpbmcmIG1pZCwgUlRDSWNlVHJhbnNwb3J0U3RhdGUpID0gMDsK
LQotICAgIHZpcnR1YWwgfk1lZGlhRW5kcG9pbnRDbGllbnQoKSB7IH0KLX07Ci0KLX0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShXRUJfUlRDKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFFbmRwb2ludFNlc3Npb25D
b25maWd1cmF0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRp
YUVuZHBvaW50U2Vzc2lvbkNvbmZpZ3VyYXRpb24uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggYmYyYmQxZThiOTdjNGU3ODk5MTkxMzEzZGEyYThmZWYyYmIzOGVkOS4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYUVuZHBvaW50U2Vzc2lvbkNvbmZpZ3VyYXRpb24uaAorKysg
L2Rldi9udWxsCkBAIC0xLDkzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgRXJp
Y3Nzb24gQUIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIKLSAqICAgIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqICAgIGRpc3RyaWJ1dGlvbi4KLSAqIDMu
IE5laXRoZXIgdGhlIG5hbWUgb2YgRXJpY3Nzb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJp
YnV0b3JzCi0gKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tIHRoaXMKLSAqICAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
LSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBNZWRpYUVuZHBvaW50U2Vz
c2lvbkNvbmZpZ3VyYXRpb25faAotI2RlZmluZSBNZWRpYUVuZHBvaW50U2Vzc2lvbkNvbmZpZ3Vy
YXRpb25faAotCi0jaWYgRU5BQkxFKFdFQl9SVEMpCi0KLSNpbmNsdWRlICJQZWVyQ29ubmVjdGlv
blN0YXRlcy5oIgotI2luY2x1ZGUgIlBlZXJNZWRpYURlc2NyaXB0aW9uLmgiCi0jaW5jbHVkZSA8
d3RmL0NyeXB0b2dyYXBoaWNhbGx5UmFuZG9tTnVtYmVyLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotY2xhc3MgTWVkaWFFbmRwb2ludFNlc3Npb25Db25maWd1cmF0aW9uIDogcHVibGljIFJl
ZkNvdW50ZWQ8TWVkaWFFbmRwb2ludFNlc3Npb25Db25maWd1cmF0aW9uPiB7Ci1wdWJsaWM6Ci0g
ICAgc3RhdGljIFJlZlB0cjxNZWRpYUVuZHBvaW50U2Vzc2lvbkNvbmZpZ3VyYXRpb24+IGNyZWF0
ZSgpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IE1lZGlhRW5kcG9pbnRTZXNz
aW9uQ29uZmlndXJhdGlvbigpKTsKLSAgICB9Ci0gICAgdmlydHVhbCB+TWVkaWFFbmRwb2ludFNl
c3Npb25Db25maWd1cmF0aW9uKCkgeyB9Ci0KLSAgICBpbnQ2NF90IHNlc3Npb25JZCgpIGNvbnN0
IHsgcmV0dXJuIG1fc2Vzc2lvbklkOyB9Ci0gICAgdm9pZCBzZXRTZXNzaW9uSWQoaW50NjRfdCBz
ZXNzaW9uSWQpIHsgbV9zZXNzaW9uSWQgPSBzZXNzaW9uSWQ7IH0KLQotICAgIHVuc2lnbmVkIHNl
c3Npb25WZXJzaW9uKCkgY29uc3QgeyByZXR1cm4gbV9zZXNzaW9uVmVyc2lvbjsgfQotICAgIHZv
aWQgc2V0U2Vzc2lvblZlcnNpb24odW5zaWduZWQgc2Vzc2lvblZlcnNpb24pIHsgbV9zZXNzaW9u
VmVyc2lvbiA9IHNlc3Npb25WZXJzaW9uOyB9Ci0KLSAgICBWZWN0b3I8UGVlck1lZGlhRGVzY3Jp
cHRpb24+JiBtZWRpYURlc2NyaXB0aW9ucygpIHsgcmV0dXJuIG1fbWVkaWFEZXNjcmlwdGlvbnM7
IH0KLSAgICBjb25zdCBWZWN0b3I8UGVlck1lZGlhRGVzY3JpcHRpb24+JiBtZWRpYURlc2NyaXB0
aW9ucygpIGNvbnN0IHsgcmV0dXJuIG1fbWVkaWFEZXNjcmlwdGlvbnM7IH0KLSAgICB2b2lkIGFk
ZE1lZGlhRGVzY3JpcHRpb24oUGVlck1lZGlhRGVzY3JpcHRpb24mJiBkZXNjcmlwdGlvbikgeyBt
X21lZGlhRGVzY3JpcHRpb25zLmFwcGVuZChXVEZNb3ZlKGRlc2NyaXB0aW9uKSk7IH0KLQotICAg
IFBlZXJDb25uZWN0aW9uU3RhdGVzOjpCdW5kbGVQb2xpY3kgYnVuZGxlUG9saWN5KCkgY29uc3Qg
eyByZXR1cm4gbV9idW5kbGVQb2xpY3k7IH0KLSAgICB2b2lkIHNldEJ1bmRsZVBvbGljeShQZWVy
Q29ubmVjdGlvblN0YXRlczo6QnVuZGxlUG9saWN5IGJ1bmRsZVBvbGljeSkgeyBtX2J1bmRsZVBv
bGljeSA9IGJ1bmRsZVBvbGljeTsgfQotCi0gICAgUmVmUHRyPE1lZGlhRW5kcG9pbnRTZXNzaW9u
Q29uZmlndXJhdGlvbj4gY2xvbmUoKSBjb25zdAotICAgIHsKLSAgICAgICAgUmVmUHRyPE1lZGlh
RW5kcG9pbnRTZXNzaW9uQ29uZmlndXJhdGlvbj4gY29weSA9IGNyZWF0ZSgpOwotICAgICAgICBj
b3B5LT5tX3Nlc3Npb25JZCA9IG1fc2Vzc2lvbklkOwotICAgICAgICBjb3B5LT5tX3Nlc3Npb25W
ZXJzaW9uID0gbV9zZXNzaW9uVmVyc2lvbjsKLSAgICAgICAgY29weS0+bV9tZWRpYURlc2NyaXB0
aW9ucyA9IG1fbWVkaWFEZXNjcmlwdGlvbnM7Ci0gICAgICAgIGNvcHktPm1fYnVuZGxlUG9saWN5
ID0gbV9idW5kbGVQb2xpY3k7Ci0KLSAgICAgICAgcmV0dXJuIGNvcHk7Ci0gICAgfQotCi1wcml2
YXRlOgotICAgIE1lZGlhRW5kcG9pbnRTZXNzaW9uQ29uZmlndXJhdGlvbigpCi0gICAgewotICAg
ICAgICBtX3Nlc3Npb25JZCA9IGNyeXB0b2dyYXBoaWNhbGx5UmFuZG9tTnVtYmVyKCk7Ci0gICAg
ICAgIG1fc2Vzc2lvbklkID0gbV9zZXNzaW9uSWQgPDwgMzEgfCBjcnlwdG9ncmFwaGljYWxseVJh
bmRvbU51bWJlcigpOwotICAgIH0KLQotICAgIGludDY0X3QgbV9zZXNzaW9uSWQ7Ci0gICAgdW5z
aWduZWQgbV9zZXNzaW9uVmVyc2lvbiB7IDAgfTsKLQotICAgIFZlY3RvcjxQZWVyTWVkaWFEZXNj
cmlwdGlvbj4gbV9tZWRpYURlc2NyaXB0aW9uczsKLQotICAgIFBlZXJDb25uZWN0aW9uU3RhdGVz
OjpCdW5kbGVQb2xpY3kgbV9idW5kbGVQb2xpY3kgeyBQZWVyQ29ubmVjdGlvblN0YXRlczo6QnVu
ZGxlUG9saWN5OjpCYWxhbmNlZCB9OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0j
ZW5kaWYgLy8gRU5BQkxFKFdFQl9SVEMpCi0KLSNlbmRpZiAvLyBNZWRpYUVuZHBvaW50U2Vzc2lv
bkNvbmZpZ3VyYXRpb25faApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVk
aWFzdHJlYW0vU0RQUHJvY2Vzc29yU2NyaXB0UmVzb3VyY2UuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWVkaWFzdHJlYW0vU0RQUHJvY2Vzc29yU2NyaXB0UmVzb3VyY2UuY3BwCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NjllZDJhNzYxNTgxNzI5NzBjMTQ5YzgzMDRjZTBh
MzQyZmYwOTYxLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1NEUFByb2Nlc3NvclNjcmlwdFJl
c291cmNlLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDUzICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTUgRXJpY3Nzb24gQUIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqICAgIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqICAgIGRpc3Ry
aWJ1dGlvbi4KLSAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgRXJpY3Nzb24gbm9yIHRoZSBuYW1l
cyBvZiBpdHMgY29udHJpYnV0b3JzCi0gKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSAqICAgIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAq
ICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUg
ImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKFdFQl9SVEMpCi0jaW5jbHVkZSAiU0RQUHJvY2Vzc29y
U2NyaXB0UmVzb3VyY2UuaCIKLQotI2luY2x1ZGUgIlNEUFByb2Nlc3NvclNjcmlwdHNEYXRhLmgi
Ci0jaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsK
LQotbmFtZXNwYWNlIFNEUFByb2Nlc3NvclNjcmlwdFJlc291cmNlIHsKLQotY29uc3QgU3RyaW5n
JiBzY3JpcHRTdHJpbmcoKQotewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxjb25zdCBTdHJp
bmc+IHNjcmlwdChzZHBKYXZhU2NyaXB0LCBzaXplb2Yoc2RwSmF2YVNjcmlwdCkpOwotICAgIHJl
dHVybiBzY3JpcHQ7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFNEUFByb2Nlc3NvclNjcmlwdFJlc291
cmNlCi0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShXRUJfUlRD
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vU0RQUHJv
Y2Vzc29yU2NyaXB0UmVzb3VyY2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3Ry
ZWFtL1NEUFByb2Nlc3NvclNjcmlwdFJlc291cmNlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IGNiNTQ0M2JiMDcwY2Y3N2YxYjZlZWYzMGMyM2U1MTJmNmQ0NTU0NjQuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWVkaWFzdHJlYW0vU0RQUHJvY2Vzc29yU2NyaXB0UmVzb3VyY2UuaAorKysgL2Rldi9u
dWxsCkBAIC0xLDUwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgRXJpY3Nzb24g
QUIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIKLSAqICAgIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqICAgIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIE5laXRo
ZXIgdGhlIG5hbWUgb2YgRXJpY3Nzb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3Jz
Ci0gKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZCBmcm9tIHRoaXMKLSAqICAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBTRFBQcm9jZXNzb3JTY3JpcHRSZXNv
dXJjZV9oCi0jZGVmaW5lIFNEUFByb2Nlc3NvclNjcmlwdFJlc291cmNlX2gKLQotI2lmIEVOQUJM
RShXRUJfUlRDKQotCi0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLQotbmFtZXNwYWNlIFNEUFByb2Nlc3NvclNjcmlwdFJlc291cmNlIHsKLQot
Y29uc3QgU3RyaW5nJiBzY3JpcHRTdHJpbmcoKTsKLQotfSAvLyBuYW1lc3BhY2UgU0RQUHJvY2Vz
c29yU2NyaXB0UmVzb3VyY2UKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8g
RU5BQkxFKFdFQl9SVEMpCi0KLSNlbmRpZiAvLyBTRFBQcm9jZXNzb3JTY3JpcHRSZXNvdXJjZV9o
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9vcGVud2Vi
cnRjL01lZGlhRW5kcG9pbnRPd3IuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFz
dHJlYW0vb3BlbndlYnJ0Yy9NZWRpYUVuZHBvaW50T3dyLmNwcApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggOGE1ODQ4NjcyNTQ4M2MyZGNlMGE0MjQ0YjRlZGUxNWZiZmFiZDJlOS4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9vcGVud2VicnRjL01lZGlhRW5kcG9pbnRPd3IuY3BwCisr
KyAvZGV2L251bGwKQEAgLTEsNzUwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUs
IDIwMTYgRXJpY3Nzb24gQUIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqICAgIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqICAgIGRpc3RyaWJ1dGlv
bi4KLSAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgRXJpY3Nzb24gbm9yIHRoZSBuYW1lcyBvZiBp
dHMgY29udHJpYnV0b3JzCi0gKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSAqICAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJ
UyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAq
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZp
Zy5oIgotCi0jaWYgRU5BQkxFKFdFQl9SVEMpCi0jaW5jbHVkZSAiTWVkaWFFbmRwb2ludE93ci5o
IgotCi0jaW5jbHVkZSAiTWVkaWFFbmRwb2ludFNlc3Npb25Db25maWd1cmF0aW9uLmgiCi0jaW5j
bHVkZSAiTWVkaWFQYXlsb2FkLmgiCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLSNpbmNs
dWRlICJPcGVuV2ViUlRDVXRpbGl0aWVzLmgiCi0jaW5jbHVkZSAiUGVlckNvbm5lY3Rpb25TdGF0
ZXMuaCIKLSNpbmNsdWRlICJSVENEYXRhQ2hhbm5lbEhhbmRsZXIuaCIKLSNpbmNsdWRlICJSZWFs
dGltZUF1ZGlvU291cmNlT3dyLmgiCi0jaW5jbHVkZSAiUmVhbHRpbWVWaWRlb1NvdXJjZU93ci5o
IgotI2luY2x1ZGUgPG93ci9vd3IuaD4KLSNpbmNsdWRlIDxvd3Ivb3dyX2F1ZGlvX3BheWxvYWQu
aD4KLSNpbmNsdWRlIDxvd3Ivb3dyX2NyeXB0b191dGlscy5oPgotI2luY2x1ZGUgPG93ci9vd3Jf
bWVkaWFfc2Vzc2lvbi5oPgotI2luY2x1ZGUgPG93ci9vd3JfdHJhbnNwb3J0X2FnZW50Lmg+Ci0j
aW5jbHVkZSA8b3dyL293cl92aWRlb19wYXlsb2FkLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0
cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0YXRpYyB2b2lkIGdvdENhbmRpZGF0
ZShPd3JTZXNzaW9uKiwgT3dyQ2FuZGlkYXRlKiwgTWVkaWFFbmRwb2ludE93ciopOwotc3RhdGlj
IHZvaWQgY2FuZGlkYXRlR2F0aGVyaW5nRG9uZShPd3JTZXNzaW9uKiwgTWVkaWFFbmRwb2ludE93
ciopOwotc3RhdGljIHZvaWQgaWNlQ29ubmVjdGlvblN0YXRlQ2hhbmdlKE93clNlc3Npb24qLCBH
UGFyYW1TcGVjKiwgTWVkaWFFbmRwb2ludE93ciopOwotc3RhdGljIHZvaWQgZ290SW5jb21pbmdT
b3VyY2UoT3dyTWVkaWFTZXNzaW9uKiwgT3dyTWVkaWFTb3VyY2UqLCBNZWRpYUVuZHBvaW50T3dy
Kik7Ci0KLXN0YXRpYyBjb25zdCBWZWN0b3I8U3RyaW5nPiBjYW5kaWRhdGVUeXBlcyA9IHsgImhv
c3QiLCAic3JmbHgiLCAicHJmbHgiLCAicmVsYXkiIH07Ci1zdGF0aWMgY29uc3QgVmVjdG9yPFN0
cmluZz4gY2FuZGlkYXRlVGNwVHlwZXMgPSB7ICIiLCAiYWN0aXZlIiwgInBhc3NpdmUiLCAic28i
IH07Ci1zdGF0aWMgY29uc3QgVmVjdG9yPFN0cmluZz4gY29kZWNUeXBlcyA9IHsgIk5PTkUiLCAi
UENNVSIsICJQQ01BIiwgIk9QVVMiLCAiSDI2NCIsICJWUDgiIH07Ci0KLXN0YXRpYyBjb25zdCBj
aGFyKiBoZWxwZXJTZXJ2ZXJSZWdFeCA9ICIodHVybnN8dHVybnxzdHVuKTooW1xcd1xcLlxcLV0r
fFxcW1tcXHdcXDpdK1xcXSkoOlxcZCspPyhcXD8uKyk/IjsKLQotc3RhdGljIGNvbnN0IHVuc2ln
bmVkIHNob3J0IGhlbHBlclNlcnZlckRlZmF1bHRQb3J0ID0gMzQ3ODsKLXN0YXRpYyBjb25zdCB1
bnNpZ25lZCBzaG9ydCBjYW5kaWRhdGVEZWZhdWx0UG9ydCA9IDk7Ci0KLXN0YXRpYyBzdGQ6OnVu
aXF1ZV9wdHI8TWVkaWFFbmRwb2ludD4gY3JlYXRlTWVkaWFFbmRwb2ludE93cihNZWRpYUVuZHBv
aW50Q2xpZW50JiBjbGllbnQpCi17Ci0gICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxNZWRpYUVu
ZHBvaW50PihuZXcgTWVkaWFFbmRwb2ludE93cihjbGllbnQpKTsKLX0KLQotQ3JlYXRlTWVkaWFF
bmRwb2ludCBNZWRpYUVuZHBvaW50OjpjcmVhdGUgPSBjcmVhdGVNZWRpYUVuZHBvaW50T3dyOwot
Ci1NZWRpYUVuZHBvaW50T3dyOjpNZWRpYUVuZHBvaW50T3dyKE1lZGlhRW5kcG9pbnRDbGllbnQm
IGNsaWVudCkKLSAgICA6IG1fdHJhbnNwb3J0QWdlbnQobnVsbHB0cikKLSAgICAsIG1fY2xpZW50
KGNsaWVudCkKLSAgICAsIG1fbnVtYmVyT2ZSZWNlaXZlUHJlcGFyZWRTZXNzaW9ucygwKQotICAg
ICwgbV9udW1iZXJPZlNlbmRQcmVwYXJlZFNlc3Npb25zKDApCi17Ci0gICAgaW5pdGlhbGl6ZU9w
ZW5XZWJSVEMoKTsKLQotICAgIEdSZWdleENvbXBpbGVGbGFncyBjb21waWxlRmxhZ3MgPSBHX1JF
R0VYX0pBVkFTQ1JJUFRfQ09NUEFUOwotICAgIEdSZWdleE1hdGNoRmxhZ3MgbWF0Y2hGbGFncyA9
IHN0YXRpY19jYXN0PEdSZWdleE1hdGNoRmxhZ3M+KDApOwotICAgIG1faGVscGVyU2VydmVyUmVn
RXggPSBnX3JlZ2V4X25ldyhoZWxwZXJTZXJ2ZXJSZWdFeCwgY29tcGlsZUZsYWdzLCBtYXRjaEZs
YWdzLCBudWxscHRyKTsKLX0KLQotTWVkaWFFbmRwb2ludE93cjo6fk1lZGlhRW5kcG9pbnRPd3Io
KQotewotICAgIHN0b3AoKTsKLQotICAgIGdfcmVnZXhfdW5yZWYobV9oZWxwZXJTZXJ2ZXJSZWdF
eCk7Ci19Ci0KLXZvaWQgTWVkaWFFbmRwb2ludE93cjo6c2V0Q29uZmlndXJhdGlvbihNZWRpYUVu
ZHBvaW50Q29uZmlndXJhdGlvbiYmIGNvbmZpZ3VyYXRpb24pCi17Ci0gICAgbV9jb25maWd1cmF0
aW9uID0gV1RGTW92ZShjb25maWd1cmF0aW9uKTsKLX0KLQotc3RkOjp1bmlxdWVfcHRyPFJUQ0Rh
dGFDaGFubmVsSGFuZGxlcj4gTWVkaWFFbmRwb2ludE93cjo6Y3JlYXRlRGF0YUNoYW5uZWxIYW5k
bGVyKGNvbnN0IFN0cmluZyYsIGNvbnN0IFJUQ0RhdGFDaGFubmVsSW5pdCYpCi17Ci0gICAgLy8g
RklYTUU6IEltcGxlbWVudCBkYXRhIGNoYW5uZWwuCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
Ci0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLXN0YXRpYyB2b2lkIGNyeXB0b0RhdGFDYWxsYmFj
ayhnY2hhciogcHJpdmF0ZUtleSwgZ2NoYXIqIGNlcnRpZmljYXRlLCBnY2hhciogZmluZ2VycHJp
bnQsIGdjaGFyKiBmaW5nZXJwcmludEZ1bmN0aW9uLCBncG9pbnRlciBkYXRhKQotewotICAgIE1l
ZGlhRW5kcG9pbnRPd3IqIG1lZGlhRW5kcG9pbnQgPSAoTWVkaWFFbmRwb2ludE93ciopIGRhdGE7
Ci0gICAgbWVkaWFFbmRwb2ludC0+ZGlzcGF0Y2hEdGxzRmluZ2VycHJpbnQoZ19zdHJkdXAocHJp
dmF0ZUtleSksIGdfc3RyZHVwKGNlcnRpZmljYXRlKSwgU3RyaW5nKGZpbmdlcnByaW50KSwgU3Ry
aW5nKGZpbmdlcnByaW50RnVuY3Rpb24pKTsKLX0KLQotdm9pZCBNZWRpYUVuZHBvaW50T3dyOjpn
ZW5lcmF0ZUR0bHNJbmZvKCkKLXsKLSAgICBvd3JfY3J5cHRvX2NyZWF0ZV9jcnlwdG9fZGF0YShj
cnlwdG9EYXRhQ2FsbGJhY2ssIHRoaXMpOwotfQotCi1NZWRpYVBheWxvYWRWZWN0b3IgTWVkaWFF
bmRwb2ludE93cjo6Z2V0RGVmYXVsdEF1ZGlvUGF5bG9hZHMoKQotewotICAgIE1lZGlhUGF5bG9h
ZFZlY3RvciBwYXlsb2FkczsKLQotICAgIC8vIEZJWE1FOiBUaGlzIGxpc3Qgc2hvdWxkIGJlIGJh
c2VkIG9uIHdoYXQgaXMgYXZhaWxhYmxlIGluIHRoZSBwbGF0Zm9ybSAoYnVnOiBodHRwOi8vd2Vi
a2l0Lm9yZy9iLzE2MzcyMykKLSAgICBNZWRpYVBheWxvYWQgcGF5bG9hZDE7Ci0gICAgcGF5bG9h
ZDEudHlwZSA9IDExMTsKLSAgICBwYXlsb2FkMS5lbmNvZGluZ05hbWUgPSAiT1BVUyI7Ci0gICAg
cGF5bG9hZDEuY2xvY2tSYXRlID0gNDgwMDA7Ci0gICAgcGF5bG9hZDEuY2hhbm5lbHMgPSAyOwot
ICAgIHBheWxvYWRzLmFwcGVuZChXVEZNb3ZlKHBheWxvYWQxKSk7Ci0KLSAgICBNZWRpYVBheWxv
YWQgcGF5bG9hZDI7Ci0gICAgcGF5bG9hZDIudHlwZSA9IDg7Ci0gICAgcGF5bG9hZDIuZW5jb2Rp
bmdOYW1lID0gIlBDTUEiOwotICAgIHBheWxvYWQyLmNsb2NrUmF0ZSA9IDgwMDA7Ci0gICAgcGF5
bG9hZDIuY2hhbm5lbHMgPSAxOwotICAgIHBheWxvYWRzLmFwcGVuZChXVEZNb3ZlKHBheWxvYWQy
KSk7Ci0KLSAgICBNZWRpYVBheWxvYWQgcGF5bG9hZDM7Ci0gICAgcGF5bG9hZDMudHlwZSA9IDA7
Ci0gICAgcGF5bG9hZDMuZW5jb2RpbmdOYW1lID0gIlBDTVUiOwotICAgIHBheWxvYWQzLmNsb2Nr
UmF0ZSA9IDgwMDA7Ci0gICAgcGF5bG9hZDMuY2hhbm5lbHMgPSAxOwotICAgIHBheWxvYWRzLmFw
cGVuZChXVEZNb3ZlKHBheWxvYWQzKSk7Ci0KLSAgICByZXR1cm4gcGF5bG9hZHM7Ci19Ci0KLU1l
ZGlhUGF5bG9hZFZlY3RvciBNZWRpYUVuZHBvaW50T3dyOjpnZXREZWZhdWx0VmlkZW9QYXlsb2Fk
cygpCi17Ci0gICAgTWVkaWFQYXlsb2FkVmVjdG9yIHBheWxvYWRzOwotCi0gICAgLy8gRklYTUU6
IFRoaXMgbGlzdCBzaG91bGQgYmUgYmFzZWQgb24gd2hhdCBpcyBhdmFpbGFibGUgaW4gdGhlIHBs
YXRmb3JtIChidWc6IGh0dHA6Ly93ZWJraXQub3JnL2IvMTYzNzIzKQotICAgIE1lZGlhUGF5bG9h
ZCBwYXlsb2FkMTsKLSAgICBwYXlsb2FkMS50eXBlID0gMTAzOwotICAgIHBheWxvYWQxLmVuY29k
aW5nTmFtZSA9ICJIMjY0IjsKLSAgICBwYXlsb2FkMS5jbG9ja1JhdGUgPSA5MDAwMDsKLSAgICBw
YXlsb2FkMS5jY21maXIgPSB0cnVlOwotICAgIHBheWxvYWQxLm5hY2twbGkgPSB0cnVlOwotICAg
IHBheWxvYWQxLmFkZFBhcmFtZXRlcigicGFja2V0aXphdGlvbk1vZGUiLCAxKTsKLSAgICBwYXls
b2Fkcy5hcHBlbmQoV1RGTW92ZShwYXlsb2FkMSkpOwotCi0gICAgTWVkaWFQYXlsb2FkIHBheWxv
YWQyOwotICAgIHBheWxvYWQyLnR5cGUgPSAxMDA7Ci0gICAgcGF5bG9hZDIuZW5jb2RpbmdOYW1l
ID0gIlZQOCI7Ci0gICAgcGF5bG9hZDIuY2xvY2tSYXRlID0gOTAwMDA7Ci0gICAgcGF5bG9hZDIu
Y2NtZmlyID0gdHJ1ZTsKLSAgICBwYXlsb2FkMi5uYWNrcGxpID0gdHJ1ZTsKLSAgICBwYXlsb2Fk
Mi5uYWNrID0gdHJ1ZTsKLSAgICBwYXlsb2Fkcy5hcHBlbmQoV1RGTW92ZShwYXlsb2FkMikpOwot
Ci0gICAgTWVkaWFQYXlsb2FkIHBheWxvYWQzOwotICAgIHBheWxvYWQzLnR5cGUgPSAxMjA7Ci0g
ICAgcGF5bG9hZDMuZW5jb2RpbmdOYW1lID0gIlJUWCI7Ci0gICAgcGF5bG9hZDMuY2xvY2tSYXRl
ID0gOTAwMDA7Ci0gICAgcGF5bG9hZDMuYWRkUGFyYW1ldGVyKCJhcHQiLCAxMDApOwotICAgIHBh
eWxvYWQzLmFkZFBhcmFtZXRlcigicnR4VGltZSIsIDIwMCk7Ci0gICAgcGF5bG9hZHMuYXBwZW5k
KFdURk1vdmUocGF5bG9hZDMpKTsKLQotICAgIHJldHVybiBwYXlsb2FkczsKLX0KLQotc3RhdGlj
IGJvb2wgcGF5bG9hZHNDb250YWluVHlwZShjb25zdCBWZWN0b3I8Y29uc3QgTWVkaWFQYXlsb2Fk
Kj4mIHBheWxvYWRzLCB1bnNpZ25lZCBwYXlsb2FkVHlwZSkKLXsKLSAgICBmb3IgKGF1dG8gcGF5
bG9hZCA6IHBheWxvYWRzKSB7Ci0gICAgICAgIEFTU0VSVChwYXlsb2FkKTsKLSAgICAgICAgaWYg
KHBheWxvYWQtPnR5cGUgPT0gcGF5bG9hZFR5cGUpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1NZWRpYVBheWxvYWRWZWN0b3IgTWVkaWFF
bmRwb2ludE93cjo6ZmlsdGVyUGF5bG9hZHMoY29uc3QgTWVkaWFQYXlsb2FkVmVjdG9yJiByZW1v
dGVQYXlsb2FkcywgY29uc3QgTWVkaWFQYXlsb2FkVmVjdG9yJiBkZWZhdWx0UGF5bG9hZHMpCi17
Ci0gICAgVmVjdG9yPGNvbnN0IE1lZGlhUGF5bG9hZCo+IGZpbHRlcmVkUGF5bG9hZHM7Ci0KLSAg
ICBmb3IgKGF1dG8mIHJlbW90ZVBheWxvYWQgOiByZW1vdGVQYXlsb2FkcykgewotICAgICAgICBj
b25zdCBNZWRpYVBheWxvYWQqIGRlZmF1bHRQYXlsb2FkID0gbnVsbHB0cjsKLSAgICAgICAgZm9y
IChhdXRvJiBwIDogZGVmYXVsdFBheWxvYWRzKSB7Ci0gICAgICAgICAgICBpZiAocC5lbmNvZGlu
Z05hbWUgPT0gcmVtb3RlUGF5bG9hZC5lbmNvZGluZ05hbWUuY29udmVydFRvQVNDSUlVcHBlcmNh
c2UoKSkgewotICAgICAgICAgICAgICAgIGRlZmF1bHRQYXlsb2FkID0gJnA7Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCFkZWZh
dWx0UGF5bG9hZCkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGlmIChkZWZhdWx0
UGF5bG9hZC0+cGFyYW1ldGVycy5jb250YWlucygicGFja2V0aXphdGlvbk1vZGUiKSAmJiByZW1v
dGVQYXlsb2FkLnBhcmFtZXRlcnMuY29udGFpbnMoInBhY2tldGl6YXRpb25Nb2RlIikKLSAgICAg
ICAgICAgICYmIChkZWZhdWx0UGF5bG9hZC0+cGFyYW1ldGVycy5nZXQoInBhY2tldGl6YXRpb25N
b2RlIikgIT0gZGVmYXVsdFBheWxvYWQtPnBhcmFtZXRlcnMuZ2V0KCJwYWNrZXRpemF0aW9uTW9k
ZSIpKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGZpbHRlcmVkUGF5bG9hZHMu
YXBwZW5kKCZyZW1vdGVQYXlsb2FkKTsKLSAgICB9Ci0KLSAgICBNZWRpYVBheWxvYWRWZWN0b3Ig
ZmlsdGVyZWRBcHRQYXlsb2FkczsKLQotICAgIGZvciAoYXV0byBmaWx0ZXJlZFBheWxvYWQgOiBm
aWx0ZXJlZFBheWxvYWRzKSB7Ci0gICAgICAgIGlmIChmaWx0ZXJlZFBheWxvYWQtPnBhcmFtZXRl
cnMuY29udGFpbnMoImFwdCIpICYmICghcGF5bG9hZHNDb250YWluVHlwZShmaWx0ZXJlZFBheWxv
YWRzLCBmaWx0ZXJlZFBheWxvYWQtPnBhcmFtZXRlcnMuZ2V0KCJhcHQiKSkpKQotICAgICAgICAg
ICAgY29udGludWU7Ci0gICAgICAgIGZpbHRlcmVkQXB0UGF5bG9hZHMuYXBwZW5kKCpmaWx0ZXJl
ZFBheWxvYWQpOwotICAgIH0KLQotICAgIHJldHVybiBmaWx0ZXJlZEFwdFBheWxvYWRzOwotfQot
Ci1NZWRpYUVuZHBvaW50OjpVcGRhdGVSZXN1bHQgTWVkaWFFbmRwb2ludE93cjo6dXBkYXRlUmVj
ZWl2ZUNvbmZpZ3VyYXRpb24oTWVkaWFFbmRwb2ludFNlc3Npb25Db25maWd1cmF0aW9uKiBjb25m
aWd1cmF0aW9uLCBib29sIGlzSW5pdGlhdG9yKQotewotICAgIFZlY3RvcjxUcmFuc2NlaXZlckNv
bmZpZz4gdHJhbnNjZWl2ZXJDb25maWdzOwotICAgIGZvciAodW5zaWduZWQgaSA9IG1fdHJhbnNj
ZWl2ZXJzLnNpemUoKTsgaSA8IGNvbmZpZ3VyYXRpb24tPm1lZGlhRGVzY3JpcHRpb25zKCkuc2l6
ZSgpOyArK2kpIHsKLSAgICAgICAgVHJhbnNjZWl2ZXJDb25maWcgY29uZmlnOwotICAgICAgICBj
b25maWcudHlwZSA9IFNlc3Npb25UeXBlTWVkaWE7Ci0gICAgICAgIGNvbmZpZy5pc0R0bHNDbGll
bnQgPSBjb25maWd1cmF0aW9uLT5tZWRpYURlc2NyaXB0aW9ucygpW2ldLmR0bHNTZXR1cCA9PSAi
YWN0aXZlIjsKLSAgICAgICAgY29uZmlnLm1pZCA9IGNvbmZpZ3VyYXRpb24tPm1lZGlhRGVzY3Jp
cHRpb25zKClbaV0ubWlkOwotICAgICAgICB0cmFuc2NlaXZlckNvbmZpZ3MuYXBwZW5kKFdURk1v
dmUoY29uZmlnKSk7Ci0gICAgfQotCi0gICAgZW5zdXJlVHJhbnNwb3J0QWdlbnRBbmRUcmFuc2Nl
aXZlcnMoaXNJbml0aWF0b3IsIHRyYW5zY2VpdmVyQ29uZmlncyk7Ci0KLSAgICAvLyBQcmVwYXJl
IHRoZSBuZXcgc2Vzc2lvbnMuCi0gICAgZm9yICh1bnNpZ25lZCBpID0gbV9udW1iZXJPZlJlY2Vp
dmVQcmVwYXJlZFNlc3Npb25zOyBpIDwgbV90cmFuc2NlaXZlcnMuc2l6ZSgpOyArK2kpIHsKLSAg
ICAgICAgT3dyU2Vzc2lvbiogc2Vzc2lvbiA9IG1fdHJhbnNjZWl2ZXJzW2ldLT5zZXNzaW9uKCk7
Ci0gICAgICAgIHByZXBhcmVNZWRpYVNlc3Npb24oT1dSX01FRElBX1NFU1NJT04oc2Vzc2lvbiks
ICZjb25maWd1cmF0aW9uLT5tZWRpYURlc2NyaXB0aW9ucygpW2ldLCBpc0luaXRpYXRvcik7Ci0g
ICAgICAgIG93cl90cmFuc3BvcnRfYWdlbnRfYWRkX3Nlc3Npb24obV90cmFuc3BvcnRBZ2VudCwg
c2Vzc2lvbik7Ci0gICAgfQotCi0gICAgb3dyX3RyYW5zcG9ydF9hZ2VudF9zdGFydChtX3RyYW5z
cG9ydEFnZW50KTsKLSAgICBtX251bWJlck9mUmVjZWl2ZVByZXBhcmVkU2Vzc2lvbnMgPSBtX3Ry
YW5zY2VpdmVycy5zaXplKCk7Ci0KLSAgICByZXR1cm4gVXBkYXRlUmVzdWx0OjpTdWNjZXNzOwot
fQotCi1zdGF0aWMgY29uc3QgTWVkaWFQYXlsb2FkKiBmaW5kUnR4UGF5bG9hZChjb25zdCBNZWRp
YVBheWxvYWRWZWN0b3ImIHBheWxvYWRzLCB1bnNpZ25lZCBhcHQpCi17Ci0gICAgZm9yIChhdXRv
JiBwYXlsb2FkIDogcGF5bG9hZHMpIHsKLSAgICAgICAgaWYgKHBheWxvYWQuZW5jb2RpbmdOYW1l
LmNvbnZlcnRUb0FTQ0lJVXBwZXJjYXNlKCkgPT0gIlJUWCIgJiYgcGF5bG9hZC5wYXJhbWV0ZXJz
LmNvbnRhaW5zKCJhcHQiKQotICAgICAgICAgICAgJiYgKHBheWxvYWQucGFyYW1ldGVycy5nZXQo
ImFwdCIpID09IGFwdCkpCi0gICAgICAgICAgICByZXR1cm4gJnBheWxvYWQ7Ci0gICAgfQotICAg
IHJldHVybiBudWxscHRyOwotfQotCi1NZWRpYUVuZHBvaW50OjpVcGRhdGVSZXN1bHQgTWVkaWFF
bmRwb2ludE93cjo6dXBkYXRlU2VuZENvbmZpZ3VyYXRpb24oTWVkaWFFbmRwb2ludFNlc3Npb25D
b25maWd1cmF0aW9uKiBjb25maWd1cmF0aW9uLCBjb25zdCBSZWFsdGltZU1lZGlhU291cmNlTWFw
JiBzZW5kU291cmNlTWFwLCBib29sIGlzSW5pdGlhdG9yKQotewotICAgIFZlY3RvcjxUcmFuc2Nl
aXZlckNvbmZpZz4gdHJhbnNjZWl2ZXJDb25maWdzOwotICAgIGZvciAodW5zaWduZWQgaSA9IG1f
dHJhbnNjZWl2ZXJzLnNpemUoKTsgaSA8IGNvbmZpZ3VyYXRpb24tPm1lZGlhRGVzY3JpcHRpb25z
KCkuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgVHJhbnNjZWl2ZXJDb25maWcgY29uZmlnOwotICAg
ICAgICBjb25maWcudHlwZSA9IFNlc3Npb25UeXBlTWVkaWE7Ci0gICAgICAgIGNvbmZpZy5pc0R0
bHNDbGllbnQgPSBjb25maWd1cmF0aW9uLT5tZWRpYURlc2NyaXB0aW9ucygpW2ldLmR0bHNTZXR1
cCAhPSAiYWN0aXZlIjsKLSAgICAgICAgY29uZmlnLm1pZCA9IGNvbmZpZ3VyYXRpb24tPm1lZGlh
RGVzY3JpcHRpb25zKClbaV0ubWlkOwotICAgICAgICB0cmFuc2NlaXZlckNvbmZpZ3MuYXBwZW5k
KFdURk1vdmUoY29uZmlnKSk7Ci0gICAgfQotCi0gICAgZW5zdXJlVHJhbnNwb3J0QWdlbnRBbmRU
cmFuc2NlaXZlcnMoaXNJbml0aWF0b3IsIHRyYW5zY2VpdmVyQ29uZmlncyk7Ci0KLSAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbV90cmFuc2NlaXZlcnMuc2l6ZSgpOyArK2kpIHsKLSAgICAg
ICAgYXV0byogc2Vzc2lvbiA9IG1fdHJhbnNjZWl2ZXJzW2ldLT5zZXNzaW9uKCk7Ci0gICAgICAg
IGF1dG8mIG1kZXNjID0gY29uZmlndXJhdGlvbi0+bWVkaWFEZXNjcmlwdGlvbnMoKVtpXTsKLQot
ICAgICAgICBpZiAobWRlc2MudHlwZSA9PSAiYXVkaW8iIHx8IG1kZXNjLnR5cGUgPT0gInZpZGVv
IikKLSAgICAgICAgICAgIGdfb2JqZWN0X3NldChzZXNzaW9uLCAicnRjcC1tdXgiLCBtZGVzYy5y
dGNwTXV4LCBudWxscHRyKTsKLQotICAgICAgICBpZiAobWRlc2MuaWNlQ2FuZGlkYXRlcy5zaXpl
KCkpIHsKLSAgICAgICAgICAgIGZvciAoYXV0byYgY2FuZGlkYXRlIDogbWRlc2MuaWNlQ2FuZGlk
YXRlcykKLSAgICAgICAgICAgICAgICBpbnRlcm5hbEFkZFJlbW90ZUNhbmRpZGF0ZShzZXNzaW9u
LCBjYW5kaWRhdGUsIG1kZXNjLmljZVVmcmFnLCBtZGVzYy5pY2VQYXNzd29yZCk7Ci0gICAgICAg
IH0KLQotICAgICAgICBpZiAoaSA8IG1fbnVtYmVyT2ZTZW5kUHJlcGFyZWRTZXNzaW9ucykKLSAg
ICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGlmICghc2VuZFNvdXJjZU1hcC5jb250YWlu
cyhtZGVzYy5taWQpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgY29uc3QgTWVk
aWFQYXlsb2FkKiBwYXlsb2FkID0gbnVsbHB0cjsKLSAgICAgICAgZm9yIChhdXRvJiBwIDogbWRl
c2MucGF5bG9hZHMpIHsKLSAgICAgICAgICAgIGlmIChwLmVuY29kaW5nTmFtZS5jb252ZXJ0VG9B
U0NJSVVwcGVyY2FzZSgpICE9ICJSVFgiKSB7Ci0gICAgICAgICAgICAgICAgcGF5bG9hZCA9ICZw
OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAg
ICAgICAgaWYgKCFwYXlsb2FkKQotICAgICAgICAgICAgcmV0dXJuIFVwZGF0ZVJlc3VsdDo6RmFp
bGVkOwotCi0gICAgICAgIGF1dG8qIHJ0eFBheWxvYWQgPSBmaW5kUnR4UGF5bG9hZChtZGVzYy5w
YXlsb2FkcywgcGF5bG9hZC0+dHlwZSk7Ci0gICAgICAgIGF1dG8qIHNvdXJjZSA9IHN0YXRpY19j
YXN0PFJlYWx0aW1lTWVkaWFTb3VyY2VPd3IqPihzZW5kU291cmNlTWFwLmdldChtZGVzYy5taWQp
KTsKLQotICAgICAgICBBU1NFUlQoY29kZWNUeXBlcy5maW5kKHBheWxvYWQtPmVuY29kaW5nTmFt
ZS5jb252ZXJ0VG9BU0NJSVVwcGVyY2FzZSgpKSAhPSBub3RGb3VuZCk7Ci0gICAgICAgIGF1dG8g
Y29kZWNUeXBlID0gc3RhdGljX2Nhc3Q8T3dyQ29kZWNUeXBlPihjb2RlY1R5cGVzLmZpbmQocGF5
bG9hZC0+ZW5jb2RpbmdOYW1lLmNvbnZlcnRUb0FTQ0lJVXBwZXJjYXNlKCkpKTsKLQotICAgICAg
ICBPd3JQYXlsb2FkKiBzZW5kUGF5bG9hZDsKLSAgICAgICAgaWYgKG1kZXNjLnR5cGUgPT0gImF1
ZGlvIikKLSAgICAgICAgICAgIHNlbmRQYXlsb2FkID0gb3dyX2F1ZGlvX3BheWxvYWRfbmV3KGNv
ZGVjVHlwZSwgcGF5bG9hZC0+dHlwZSwgcGF5bG9hZC0+Y2xvY2tSYXRlLCBwYXlsb2FkLT5jaGFu
bmVscyk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgc2VuZFBheWxvYWQgPSBvd3Jfdmlk
ZW9fcGF5bG9hZF9uZXcoY29kZWNUeXBlLCBwYXlsb2FkLT50eXBlLCBwYXlsb2FkLT5jbG9ja1Jh
dGUsIHBheWxvYWQtPmNjbWZpciwgcGF5bG9hZC0+bmFja3BsaSk7Ci0gICAgICAgICAgICBnX29i
amVjdF9zZXQoc2VuZFBheWxvYWQsICJydHgtcGF5bG9hZC10eXBlIiwgcnR4UGF5bG9hZCA/IHJ0
eFBheWxvYWQtPnR5cGUgOiAtMSwKLSAgICAgICAgICAgICAgICAicnR4LXRpbWUiLCBydHhQYXls
b2FkICYmIHJ0eFBheWxvYWQtPnBhcmFtZXRlcnMuY29udGFpbnMoInJ0eFRpbWUiKSA/IHJ0eFBh
eWxvYWQtPnBhcmFtZXRlcnMuZ2V0KCJydHhUaW1lIikgOiAwLCBudWxscHRyKTsKLSAgICAgICAg
fQotCi0gICAgICAgIG93cl9tZWRpYV9zZXNzaW9uX3NldF9zZW5kX3BheWxvYWQoT1dSX01FRElB
X1NFU1NJT04oc2Vzc2lvbiksIHNlbmRQYXlsb2FkKTsKLSAgICAgICAgb3dyX21lZGlhX3Nlc3Np
b25fc2V0X3NlbmRfc291cmNlKE9XUl9NRURJQV9TRVNTSU9OKHNlc3Npb24pLCBzb3VyY2UtPm1l
ZGlhU291cmNlKCkpOwotCi0gICAgICAgIC8vIEZJWE1FOiBTdXBwb3J0IGZvciBncm91cC1zc3Jj
IFNEUCBsaW5lIGlzIG1pc3NpbmcuCi0gICAgICAgIGNvbnN0IFZlY3Rvcjx1bnNpZ25lZD4gcmVj
ZWl2ZVNzcmNzID0gbWRlc2Muc3NyY3M7Ci0gICAgICAgIGlmIChyZWNlaXZlU3NyY3Muc2l6ZSgp
KSB7Ci0gICAgICAgICAgICBnX29iamVjdF9zZXQoc2Vzc2lvbiwgInJlY2VpdmUtc3NyYyIsIHJl
Y2VpdmVTc3Jjc1swXSwgbnVsbHB0cik7Ci0gICAgICAgICAgICBpZiAocmVjZWl2ZVNzcmNzLnNp
emUoKSA9PSAyKQotICAgICAgICAgICAgICAgIGdfb2JqZWN0X3NldChzZXNzaW9uLCAicmVjZWl2
ZS1ydHgtc3NyYyIsIHJlY2VpdmVTc3Jjc1sxXSwgbnVsbHB0cik7Ci0gICAgICAgIH0KLQotICAg
ICAgICBtX251bWJlck9mU2VuZFByZXBhcmVkU2Vzc2lvbnMgPSBpICsgMTsKLSAgICB9Ci0KLSAg
ICByZXR1cm4gVXBkYXRlUmVzdWx0OjpTdWNjZXNzOwotfQotCi12b2lkIE1lZGlhRW5kcG9pbnRP
d3I6OmFkZFJlbW90ZUNhbmRpZGF0ZShjb25zdCBJY2VDYW5kaWRhdGUmIGNhbmRpZGF0ZSwgY29u
c3QgU3RyaW5nJiBtaWQsIGNvbnN0IFN0cmluZyYgdWZyYWcsIGNvbnN0IFN0cmluZyYgcGFzc3dv
cmQpCi17Ci0gICAgZm9yIChhdXRvJiB0cmFuc2NlaXZlciA6IG1fdHJhbnNjZWl2ZXJzKSB7Ci0g
ICAgICAgIGlmICh0cmFuc2NlaXZlci0+bWlkKCkgPT0gbWlkKSB7Ci0gICAgICAgICAgICBpbnRl
cm5hbEFkZFJlbW90ZUNhbmRpZGF0ZSh0cmFuc2NlaXZlci0+c2Vzc2lvbigpLCBjYW5kaWRhdGUs
IHVmcmFnLCBwYXNzd29yZCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0K
LX0KLQotdm9pZCBNZWRpYUVuZHBvaW50T3dyOjpyZXBsYWNlTXV0ZWRSZW1vdGVTb3VyY2VNaWQo
Y29uc3QgU3RyaW5nJiBvbGRNaWQsIGNvbnN0IFN0cmluZyYgbmV3TWlkKQotewotICAgIFJlZlB0
cjxSZWFsdGltZU1lZGlhU291cmNlT3dyPiByZW1vdGVTb3VyY2UgPSBtX211dGVkUmVtb3RlU291
cmNlcy50YWtlKG9sZE1pZCk7Ci0gICAgbV9tdXRlZFJlbW90ZVNvdXJjZXMuc2V0KG5ld01pZCwg
cmVtb3RlU291cmNlKTsKLX0KLQotUmVmPFJlYWx0aW1lTWVkaWFTb3VyY2U+IE1lZGlhRW5kcG9p
bnRPd3I6OmNyZWF0ZU11dGVkUmVtb3RlU291cmNlKGNvbnN0IFN0cmluZyYgbWlkLCBSZWFsdGlt
ZU1lZGlhU291cmNlOjpUeXBlIHR5cGUpCi17Ci0gICAgU3RyaW5nIG5hbWU7Ci0gICAgU3RyaW5n
IGlkKCJub3QgdXNlZCIpOwotICAgIFJlZlB0cjxSZWFsdGltZU1lZGlhU291cmNlT3dyPiBzb3Vy
Y2U7Ci0KLSAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICBjYXNlIFJlYWx0aW1lTWVkaWFTb3VyY2U6
OlR5cGU6OkF1ZGlvOgotICAgICAgICBuYW1lID0gInJlbW90ZSBhdWRpbyI7Ci0gICAgICAgIHNv
dXJjZSA9IGFkb3B0UmVmKG5ldyBSZWFsdGltZUF1ZGlvU291cmNlT3dyKG51bGxwdHIsIGlkLCB0
eXBlLCBuYW1lKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgUmVhbHRpbWVNZWRpYVNvdXJj
ZTo6VHlwZTo6VmlkZW86Ci0gICAgICAgIG5hbWUgPSAicmVtb3RlIHZpZGVvIjsKLSAgICAgICAg
c291cmNlID0gYWRvcHRSZWYobmV3IFJlYWx0aW1lVmlkZW9Tb3VyY2VPd3IobnVsbHB0ciwgaWQs
IHR5cGUsIG5hbWUpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBSZWFsdGltZU1lZGlhU291
cmNlOjpUeXBlOjpOb25lOgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9Ci0K
LSAgICBtX211dGVkUmVtb3RlU291cmNlcy5zZXQobWlkLCBzb3VyY2UpOwotCi0gICAgcmV0dXJu
ICpzb3VyY2U7Ci19Ci0KLXZvaWQgTWVkaWFFbmRwb2ludE93cjo6cmVwbGFjZVNlbmRTb3VyY2Uo
UmVhbHRpbWVNZWRpYVNvdXJjZSYgbmV3U291cmNlLCBjb25zdCBTdHJpbmcmIG1pZCkKLXsKLSAg
ICBVTlVTRURfUEFSQU0obmV3U291cmNlKTsKLSAgICBVTlVTRURfUEFSQU0obWlkKTsKLQotICAg
IC8vIEZJWE1FOiBXZSB3YW50IHRvIHVzZSBvd3JfbWVkaWFfc2Vzc2lvbl9zZXRfc2VuZF9zb3Vy
Y2UgaGVyZSwgYnV0IGl0IGRvZXNuJ3Qgd29yayBhcyBpbnRlbmRlZC4KLSAgICAvLyBJc3N1ZSB0
cmFja2VkIGJ5IE9wZW5XZWJSVEMgYnVnOiBodHRwczovL2dpdGh1Yi5jb20vRXJpY3Nzb25SZXNl
YXJjaC9vcGVud2VicnRjL2lzc3Vlcy81MzMKLQotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0K
LXZvaWQgTWVkaWFFbmRwb2ludE93cjo6c3RvcCgpCi17Ci0gICAgaWYgKCFtX3RyYW5zcG9ydEFn
ZW50KQotICAgICAgICByZXR1cm47Ci0KLSAgICBmb3IgKGF1dG8mIHRyYW5zY2VpdmVyIDogbV90
cmFuc2NlaXZlcnMpCi0gICAgICAgIG93cl9tZWRpYV9zZXNzaW9uX3NldF9zZW5kX3NvdXJjZShP
V1JfTUVESUFfU0VTU0lPTih0cmFuc2NlaXZlci0+c2Vzc2lvbigpKSwgbnVsbHB0cik7Ci0KLSAg
ICBnX29iamVjdF91bnJlZihtX3RyYW5zcG9ydEFnZW50KTsKLSAgICBtX3RyYW5zcG9ydEFnZW50
ID0gbnVsbHB0cjsKLX0KLQotc2l6ZV90IE1lZGlhRW5kcG9pbnRPd3I6OnRyYW5zY2VpdmVySW5k
ZXhGb3JTZXNzaW9uKE93clNlc3Npb24qIHNlc3Npb24pIGNvbnN0Ci17Ci0gICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IG1fdHJhbnNjZWl2ZXJzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlm
IChtX3RyYW5zY2VpdmVyc1tpXS0+c2Vzc2lvbigpID09IHNlc3Npb24pCi0gICAgICAgICAgICBy
ZXR1cm4gaTsKLSAgICB9Ci0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4g
bm90Rm91bmQ7Ci19Ci0KLWNvbnN0IFN0cmluZyYgTWVkaWFFbmRwb2ludE93cjo6c2Vzc2lvbk1p
ZChPd3JTZXNzaW9uKiBzZXNzaW9uKSBjb25zdAotewotICAgIHNpemVfdCBpbmRleCA9IHRyYW5z
Y2VpdmVySW5kZXhGb3JTZXNzaW9uKHNlc3Npb24pOwotICAgIHJldHVybiBtX3RyYW5zY2VpdmVy
c1tpbmRleF0tPm1pZCgpOwotfQotCi1Pd3JUcmFuc2NlaXZlciogTWVkaWFFbmRwb2ludE93cjo6
bWF0Y2hUcmFuc2NlaXZlckJ5TWlkKGNvbnN0IFN0cmluZyYgbWlkKSBjb25zdAotewotICAgIGZv
ciAoYXV0byYgdHJhbnNjZWl2ZXIgOiBtX3RyYW5zY2VpdmVycykgewotICAgICAgICBpZiAodHJh
bnNjZWl2ZXItPm1pZCgpID09IG1pZCkKLSAgICAgICAgICAgIHJldHVybiB0cmFuc2NlaXZlci5n
ZXQoKTsKLSAgICB9Ci0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLXZvaWQgTWVkaWFFbmRwb2lu
dE93cjo6ZGlzcGF0Y2hOZXdJY2VDYW5kaWRhdGUoY29uc3QgU3RyaW5nJiBtaWQsIEljZUNhbmRp
ZGF0ZSYmIGljZUNhbmRpZGF0ZSkKLXsKLSAgICBtX2NsaWVudC5nb3RJY2VDYW5kaWRhdGUobWlk
LCBXVEZNb3ZlKGljZUNhbmRpZGF0ZSkpOwotfQotCi12b2lkIE1lZGlhRW5kcG9pbnRPd3I6OmRp
c3BhdGNoR2F0aGVyaW5nRG9uZShjb25zdCBTdHJpbmcmIG1pZCkKLXsKLSAgICBtX2NsaWVudC5k
b25lR2F0aGVyaW5nQ2FuZGlkYXRlcyhtaWQpOwotfQotCi12b2lkIE1lZGlhRW5kcG9pbnRPd3I6
OnByb2Nlc3NJY2VUcmFuc3BvcnRTdGF0ZUNoYW5nZShPd3JTZXNzaW9uKiBzZXNzaW9uKQotewot
ICAgIE93ckljZVN0YXRlIG93ckljZVN0YXRlOwotICAgIGdfb2JqZWN0X2dldChzZXNzaW9uLCAi
aWNlLWNvbm5lY3Rpb24tc3RhdGUiLCAmb3dySWNlU3RhdGUsIG51bGxwdHIpOwotCi0gICAgT3dy
VHJhbnNjZWl2ZXImIHRyYW5zY2VpdmVyID0gKm1fdHJhbnNjZWl2ZXJzW3RyYW5zY2VpdmVySW5k
ZXhGb3JTZXNzaW9uKHNlc3Npb24pXTsKLSAgICBpZiAob3dySWNlU3RhdGUgPCB0cmFuc2NlaXZl
ci5vd3JJY2VTdGF0ZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICB0cmFuc2NlaXZlci5zZXRP
d3JJY2VTdGF0ZShvd3JJY2VTdGF0ZSk7Ci0KLSAgICAvLyBXZSBjYW5ub3QgZ28gdG8gQ29tcGxl
dGVkIGlmIHRoZXJlIG1heSBiZSBtb3JlIHJlbW90ZSBjYW5kaWRhdGVzLgotICAgIGlmIChvd3JJ
Y2VTdGF0ZSA9PSBPV1JfSUNFX1NUQVRFX1JFQURZICYmICF0cmFuc2NlaXZlci5nb3RFbmRPZlJl
bW90ZUNhbmRpZGF0ZXMoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUlRDSWNlVHJhbnNwb3J0
U3RhdGUgdHJhbnNwb3J0U3RhdGU7Ci0gICAgc3dpdGNoIChvd3JJY2VTdGF0ZSkgewotICAgIGNh
c2UgT1dSX0lDRV9TVEFURV9DT05ORUNUSU5HOgotICAgICAgICB0cmFuc3BvcnRTdGF0ZSA9IFJU
Q0ljZVRyYW5zcG9ydFN0YXRlOjpDaGVja2luZzsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBP
V1JfSUNFX1NUQVRFX0NPTk5FQ1RFRDoKLSAgICAgICAgdHJhbnNwb3J0U3RhdGUgPSBSVENJY2VU
cmFuc3BvcnRTdGF0ZTo6Q29ubmVjdGVkOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIE9XUl9J
Q0VfU1RBVEVfUkVBRFk6Ci0gICAgICAgIHRyYW5zcG9ydFN0YXRlID0gUlRDSWNlVHJhbnNwb3J0
U3RhdGU6OkNvbXBsZXRlZDsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBPV1JfSUNFX1NUQVRF
X0ZBSUxFRDoKLSAgICAgICAgdHJhbnNwb3J0U3RhdGUgPSBSVENJY2VUcmFuc3BvcnRTdGF0ZTo6
RmFpbGVkOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgbV9jbGllbnQuaWNlVHJhbnNwb3J0U3RhdGVDaGFuZ2VkKHRyYW5zY2VpdmVy
Lm1pZCgpLCB0cmFuc3BvcnRTdGF0ZSk7Ci19Ci0KLXZvaWQgTWVkaWFFbmRwb2ludE93cjo6ZGlz
cGF0Y2hEdGxzRmluZ2VycHJpbnQoZ2NoYXIqIHByaXZhdGVLZXksIGdjaGFyKiBjZXJ0aWZpY2F0
ZSwgY29uc3QgU3RyaW5nJiBmaW5nZXJwcmludCwgY29uc3QgU3RyaW5nJiBmaW5nZXJwcmludEZ1
bmN0aW9uKQotewotICAgIG1fZHRsc1ByaXZhdGVLZXkgPSBTdHJpbmcocHJpdmF0ZUtleSk7Ci0g
ICAgbV9kdGxzQ2VydGlmaWNhdGUgPSBTdHJpbmcoY2VydGlmaWNhdGUpOwotCi0gICAgZ19mcmVl
KHByaXZhdGVLZXkpOwotICAgIGdfZnJlZShjZXJ0aWZpY2F0ZSk7Ci0KLSAgICBtX2NsaWVudC5n
b3REdGxzRmluZ2VycHJpbnQoZmluZ2VycHJpbnQsIGZpbmdlcnByaW50RnVuY3Rpb24pOwotfQot
Ci12b2lkIE1lZGlhRW5kcG9pbnRPd3I6OnVubXV0ZVJlbW90ZVNvdXJjZShjb25zdCBTdHJpbmcm
IG1pZCwgT3dyTWVkaWFTb3VyY2UqIHJlYWxTb3VyY2UpCi17Ci0gICAgUmVmUHRyPFJlYWx0aW1l
TWVkaWFTb3VyY2VPd3I+IHJlbW90ZVNvdXJjZSA9IG1fbXV0ZWRSZW1vdGVTb3VyY2VzLnRha2Uo
bWlkKTsKLSAgICBpZiAoIXJlbW90ZVNvdXJjZSkgewotICAgICAgICBMT0dfRVJST1IoIlVuYWJs
ZSB0byBmaW5kIG11dGVkIHJlbW90ZSBzb3VyY2UuIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICBpZiAocmVtb3RlU291cmNlLT5pc1Byb2R1Y2luZ0RhdGEoKSkKLSAgICAgICAgcmVt
b3RlU291cmNlLT5zd2FwT3V0U2hhbGxvd1NvdXJjZSgqcmVhbFNvdXJjZSk7Ci19Ci0KLXZvaWQg
TWVkaWFFbmRwb2ludE93cjo6cHJlcGFyZVNlc3Npb24oT3dyU2Vzc2lvbiogc2Vzc2lvbiwgUGVl
ck1lZGlhRGVzY3JpcHRpb24qIG1lZGlhRGVzY3JpcHRpb24pCi17Ci0gICAgZ19vYmplY3Rfc2V0
X2RhdGFfZnVsbChHX09CSkVDVChzZXNzaW9uKSwgImljZS11ZnJhZyIsIGdfc3RyZHVwKG1lZGlh
RGVzY3JpcHRpb24tPmljZVVmcmFnLmFzY2lpKCkuZGF0YSgpKSwgZ19mcmVlKTsKLSAgICBnX29i
amVjdF9zZXRfZGF0YV9mdWxsKEdfT0JKRUNUKHNlc3Npb24pLCAiaWNlLXBhc3N3b3JkIiwgZ19z
dHJkdXAobWVkaWFEZXNjcmlwdGlvbi0+aWNlUGFzc3dvcmQuYXNjaWkoKS5kYXRhKCkpLCBnX2Zy
ZWUpOwotCi0gICAgZ19zaWduYWxfY29ubmVjdChzZXNzaW9uLCAib24tbmV3LWNhbmRpZGF0ZSIs
IEdfQ0FMTEJBQ0soZ290Q2FuZGlkYXRlKSwgdGhpcyk7Ci0gICAgZ19zaWduYWxfY29ubmVjdChz
ZXNzaW9uLCAib24tY2FuZGlkYXRlLWdhdGhlcmluZy1kb25lIiwgR19DQUxMQkFDSyhjYW5kaWRh
dGVHYXRoZXJpbmdEb25lKSwgdGhpcyk7Ci0gICAgZ19zaWduYWxfY29ubmVjdChzZXNzaW9uLCAi
bm90aWZ5OjppY2UtY29ubmVjdGlvbi1zdGF0ZSIsIEdfQ0FMTEJBQ0soaWNlQ29ubmVjdGlvblN0
YXRlQ2hhbmdlKSwgdGhpcyk7Ci19Ci0KLXZvaWQgTWVkaWFFbmRwb2ludE93cjo6cHJlcGFyZU1l
ZGlhU2Vzc2lvbihPd3JNZWRpYVNlc3Npb24qIG1lZGlhU2Vzc2lvbiwgUGVlck1lZGlhRGVzY3Jp
cHRpb24qIG1lZGlhRGVzY3JpcHRpb24sIGJvb2wgaXNJbml0aWF0b3IpCi17Ci0gICAgcHJlcGFy
ZVNlc3Npb24oT1dSX1NFU1NJT04obWVkaWFTZXNzaW9uKSwgbWVkaWFEZXNjcmlwdGlvbik7Ci0K
LSAgICBib29sIHVzZVJ0Y3BNdXggPSAhaXNJbml0aWF0b3IgJiYgbWVkaWFEZXNjcmlwdGlvbi0+
cnRjcE11eDsKLSAgICBnX29iamVjdF9zZXQobWVkaWFTZXNzaW9uLCAicnRjcC1tdXgiLCB1c2VS
dGNwTXV4LCBudWxscHRyKTsKLQotICAgIGlmICghbWVkaWFEZXNjcmlwdGlvbi0+Y25hbWUuaXNF
bXB0eSgpICYmIG1lZGlhRGVzY3JpcHRpb24tPnNzcmNzLnNpemUoKSkgewotICAgICAgICBnX29i
amVjdF9zZXQobWVkaWFTZXNzaW9uLCAiY25hbWUiLCBtZWRpYURlc2NyaXB0aW9uLT5jbmFtZS5h
c2NpaSgpLmRhdGEoKSwKLSAgICAgICAgICAgICJzZW5kLXNzcmMiLCBtZWRpYURlc2NyaXB0aW9u
LT5zc3Jjc1swXSwKLSAgICAgICAgICAgIG51bGxwdHIpOwotICAgIH0KLQotICAgIGdfc2lnbmFs
X2Nvbm5lY3QobWVkaWFTZXNzaW9uLCAib24taW5jb21pbmctc291cmNlIiwgR19DQUxMQkFDSyhn
b3RJbmNvbWluZ1NvdXJjZSksIHRoaXMpOwotCi0gICAgZm9yIChhdXRvJiBwYXlsb2FkIDogbWVk
aWFEZXNjcmlwdGlvbi0+cGF5bG9hZHMpIHsKLSAgICAgICAgaWYgKHBheWxvYWQuZW5jb2RpbmdO
YW1lLmNvbnZlcnRUb0FTQ0lJVXBwZXJjYXNlKCkgPT0gIlJUWCIpCi0gICAgICAgICAgICBjb250
aW51ZTsKLQotICAgICAgICBhdXRvKiBydHhQYXlsb2FkID0gZmluZFJ0eFBheWxvYWQobWVkaWFE
ZXNjcmlwdGlvbi0+cGF5bG9hZHMsIHBheWxvYWQudHlwZSk7Ci0KLSAgICAgICAgQVNTRVJUX1dJ
VEhfTUVTU0FHRShjb2RlY1R5cGVzLmZpbmQocGF5bG9hZC5lbmNvZGluZ05hbWUuY29udmVydFRv
QVNDSUlVcHBlcmNhc2UoKSkgIT0gbm90Rm91bmQsICJVbmFibGUgdG8gZmluZCBjb2RlYzogJXMi
LCBwYXlsb2FkLmVuY29kaW5nTmFtZS51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgT3dyQ29kZWNU
eXBlIGNvZGVjVHlwZSA9IHN0YXRpY19jYXN0PE93ckNvZGVjVHlwZT4oY29kZWNUeXBlcy5maW5k
KHBheWxvYWQuZW5jb2RpbmdOYW1lLmNvbnZlcnRUb0FTQ0lJVXBwZXJjYXNlKCkpKTsKLQotICAg
ICAgICBPd3JQYXlsb2FkKiByZWNlaXZlUGF5bG9hZDsKLSAgICAgICAgaWYgKG1lZGlhRGVzY3Jp
cHRpb24tPnR5cGUgPT0gImF1ZGlvIikKLSAgICAgICAgICAgIHJlY2VpdmVQYXlsb2FkID0gb3dy
X2F1ZGlvX3BheWxvYWRfbmV3KGNvZGVjVHlwZSwgcGF5bG9hZC50eXBlLCBwYXlsb2FkLmNsb2Nr
UmF0ZSwgcGF5bG9hZC5jaGFubmVscyk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgcmVj
ZWl2ZVBheWxvYWQgPSBvd3JfdmlkZW9fcGF5bG9hZF9uZXcoY29kZWNUeXBlLCBwYXlsb2FkLnR5
cGUsIHBheWxvYWQuY2xvY2tSYXRlLCBwYXlsb2FkLmNjbWZpciwgcGF5bG9hZC5uYWNrcGxpKTsK
LSAgICAgICAgICAgIGdfb2JqZWN0X3NldChyZWNlaXZlUGF5bG9hZCwgInJ0eC1wYXlsb2FkLXR5
cGUiLCBydHhQYXlsb2FkID8gcnR4UGF5bG9hZC0+dHlwZSA6IC0xLAotICAgICAgICAgICAgICAg
ICJydHgtdGltZSIsIHJ0eFBheWxvYWQgJiYgcnR4UGF5bG9hZC0+cGFyYW1ldGVycy5jb250YWlu
cygicnR4VGltZSIpID8gcnR4UGF5bG9hZC0+cGFyYW1ldGVycy5nZXQoInJ0eFRpbWUiKSA6IDAs
IG51bGxwdHIpOwotICAgICAgICB9Ci0KLSAgICAgICAgb3dyX21lZGlhX3Nlc3Npb25fYWRkX3Jl
Y2VpdmVfcGF5bG9hZChtZWRpYVNlc3Npb24sIHJlY2VpdmVQYXlsb2FkKTsKLSAgICB9Ci19Ci0K
LXN0cnVjdCBIZWxwZXJTZXJ2ZXJVcmwgewotICAgIFN0cmluZyBwcm90b2NvbDsKLSAgICBTdHJp
bmcgaG9zdDsKLSAgICB1bnNpZ25lZCBzaG9ydCBwb3J0OwotICAgIFN0cmluZyBxdWVyeTsKLX07
Ci0KLXN0YXRpYyB2b2lkIHBhcnNlSGVscGVyU2VydmVyVXJsKEdSZWdleCYgcmVnZXgsIGNvbnN0
IFVSTCYgdXJsLCBIZWxwZXJTZXJ2ZXJVcmwmIG91dFVybCkKLXsKLSAgICBHTWF0Y2hJbmZvKiBt
YXRjaEluZm87Ci0KLSAgICBpZiAoZ19yZWdleF9tYXRjaCgmcmVnZXgsIHVybC5zdHJpbmcoKS5h
c2NpaSgpLmRhdGEoKSwgc3RhdGljX2Nhc3Q8R1JlZ2V4TWF0Y2hGbGFncz4oMCksICZtYXRjaElu
Zm8pKSB7Ci0gICAgICAgIGdjaGFyKiogbWF0Y2hlcyA9ICBnX21hdGNoX2luZm9fZmV0Y2hfYWxs
KG1hdGNoSW5mbyk7Ci0gICAgICAgIGdpbnQgbWF0Y2hDb3VudCA9IGdfc3Rydl9sZW5ndGgobWF0
Y2hlcyk7Ci0KLSAgICAgICAgb3V0VXJsLnByb3RvY29sID0gbWF0Y2hlc1sxXTsKLSAgICAgICAg
b3V0VXJsLmhvc3QgPSBtYXRjaGVzWzJdWzBdID09ICdbJyA/IFN0cmluZyhtYXRjaGVzWzJdICsg
MSwgc3RybGVuKG1hdGNoZXNbMl0pIC0gMikgLy8gSVB2NgotICAgICAgICAgICAgOiBtYXRjaGVz
WzJdOwotCi0gICAgICAgIG91dFVybC5wb3J0ID0gMDsKLSAgICAgICAgaWYgKG1hdGNoQ291bnQg
Pj0gNCkgewotICAgICAgICAgICAgU3RyaW5nIHBvcnRTdHJpbmcgPSBTdHJpbmcobWF0Y2hlc1sz
XSArIDEpOyAvLyBTa2lwIHBvcnQgY29sb24KLSAgICAgICAgICAgIG91dFVybC5wb3J0ID0gcG9y
dFN0cmluZy50b1VJbnRTdHJpY3QoKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChtYXRjaENv
dW50ID09IDUpCi0gICAgICAgICAgICBvdXRVcmwucXVlcnkgPSBTdHJpbmcobWF0Y2hlc1s0XSAr
IDEpOyAvLyBTa2lwIHF1ZXN0aW9uIG1hcmsKLQotICAgICAgICBnX3N0cmZyZWV2KG1hdGNoZXMp
OwotICAgIH0KLQotICAgIGdfbWF0Y2hfaW5mb19mcmVlKG1hdGNoSW5mbyk7Ci19Ci0KLXZvaWQg
TWVkaWFFbmRwb2ludE93cjo6ZW5zdXJlVHJhbnNwb3J0QWdlbnRBbmRUcmFuc2NlaXZlcnMoYm9v
bCBpc0luaXRpYXRvciwgY29uc3QgVmVjdG9yPFRyYW5zY2VpdmVyQ29uZmlnPiYgdHJhbnNjZWl2
ZXJDb25maWdzKQotewotICAgIEFTU0VSVChtX2R0bHNQcml2YXRlS2V5KTsKLSAgICBBU1NFUlQo
bV9kdGxzQ2VydGlmaWNhdGUpOwotCi0gICAgaWYgKCFtX3RyYW5zcG9ydEFnZW50KSB7Ci0gICAg
ICAgIC8vIEZJWE1FOiBIYW5kbGUgU0RQIEJVTkRMRSBsaW5lIGZyb20gdGhlIHJlbW90ZSBzb3Vy
Y2UgaW5zdGVhZCBvZiBmYWxsaW5nIGJhY2sgdG8gYmFsYW5jZWQuCi0gICAgICAgIE93ckJ1bmRs
ZVBvbGljeVR5cGUgYnVuZGxlUG9saWN5ID0gT1dSX0JVTkRMRV9QT0xJQ1lfVFlQRV9CQUxBTkNF
RDsKLQotICAgICAgICBzd2l0Y2ggKG1fY29uZmlndXJhdGlvbi0+YnVuZGxlUG9saWN5KSB7Ci0g
ICAgICAgIGNhc2UgUGVlckNvbm5lY3Rpb25TdGF0ZXM6OkJ1bmRsZVBvbGljeTo6QmFsYW5jZWQ6
Ci0gICAgICAgICAgICBidW5kbGVQb2xpY3kgPSBPV1JfQlVORExFX1BPTElDWV9UWVBFX0JBTEFO
Q0VEOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUGVlckNvbm5lY3Rpb25TdGF0
ZXM6OkJ1bmRsZVBvbGljeTo6TWF4Q29tcGF0OgotICAgICAgICAgICAgYnVuZGxlUG9saWN5ID0g
T1dSX0JVTkRMRV9QT0xJQ1lfVFlQRV9NQVhfQ09NUEFUOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgUGVlckNvbm5lY3Rpb25TdGF0ZXM6OkJ1bmRsZVBvbGljeTo6TWF4QnVuZGxl
OgotICAgICAgICAgICAgYnVuZGxlUG9saWN5ID0gT1dSX0JVTkRMRV9QT0xJQ1lfVFlQRV9NQVhf
QlVORExFOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgfTsKLQotICAgICAgICBtX3RyYW5zcG9y
dEFnZW50ID0gb3dyX3RyYW5zcG9ydF9hZ2VudF9uZXcoZmFsc2UsIGJ1bmRsZVBvbGljeSk7Ci0K
LSAgICAgICAgQVNTRVJUKG1fY29uZmlndXJhdGlvbik7Ci0gICAgICAgIGZvciAoYXV0byYgc2Vy
dmVyIDogbV9jb25maWd1cmF0aW9uLT5pY2VTZXJ2ZXJzKSB7Ci0gICAgICAgICAgICBmb3IgKGF1
dG8mIHdlYmtpdFVybCA6IHNlcnZlci51cmxzKSB7Ci0gICAgICAgICAgICAgICAgSGVscGVyU2Vy
dmVyVXJsIHVybDsKLSAgICAgICAgICAgICAgICAvLyBXZWJLaXQncyBVUkwgY2xhc3MgY2FuJ3Qg
aGFuZGxlIElDRSBoZWxwZXIgc2VydmVyIHVybHMgcHJvcGVybHkKLSAgICAgICAgICAgICAgICBw
YXJzZUhlbHBlclNlcnZlclVybCgqbV9oZWxwZXJTZXJ2ZXJSZWdFeCwgd2Via2l0VXJsLCB1cmwp
OwotCi0gICAgICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgcG9ydCA9IHVybC5wb3J0ID8gdXJs
LnBvcnQgOiBoZWxwZXJTZXJ2ZXJEZWZhdWx0UG9ydDsKLQotICAgICAgICAgICAgICAgIGlmICh1
cmwucHJvdG9jb2wgPT0gInN0dW4iKSB7Ci0gICAgICAgICAgICAgICAgICAgIG93cl90cmFuc3Bv
cnRfYWdlbnRfYWRkX2hlbHBlcl9zZXJ2ZXIobV90cmFuc3BvcnRBZ2VudCwgT1dSX0hFTFBFUl9T
RVJWRVJfVFlQRV9TVFVOLAotICAgICAgICAgICAgICAgICAgICAgICAgdXJsLmhvc3QuYXNjaWko
KS5kYXRhKCksIHBvcnQsIG51bGxwdHIsIG51bGxwdHIpOwotCi0gICAgICAgICAgICAgICAgfSBl
bHNlIGlmICh1cmwucHJvdG9jb2wgPT0gInR1cm4iKSB7Ci0gICAgICAgICAgICAgICAgICAgIE93
ckhlbHBlclNlcnZlclR5cGUgc2VydmVyVHlwZSA9IHVybC5xdWVyeSA9PSAidHJhbnNwb3J0PXRj
cCIgPyBPV1JfSEVMUEVSX1NFUlZFUl9UWVBFX1RVUk5fVENQCi0gICAgICAgICAgICAgICAgICAg
ICAgICA6IE9XUl9IRUxQRVJfU0VSVkVSX1RZUEVfVFVSTl9VRFA7Ci0KLSAgICAgICAgICAgICAg
ICAgICAgb3dyX3RyYW5zcG9ydF9hZ2VudF9hZGRfaGVscGVyX3NlcnZlcihtX3RyYW5zcG9ydEFn
ZW50LCBzZXJ2ZXJUeXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgdXJsLmhvc3QuYXNjaWko
KS5kYXRhKCksIHBvcnQsCi0gICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXIudXNlcm5hbWUu
YXNjaWkoKS5kYXRhKCksIHNlcnZlci5jcmVkZW50aWFsLmFzY2lpKCkuZGF0YSgpKTsKLSAgICAg
ICAgICAgICAgICB9IGVsc2UgaWYgKHVybC5wcm90b2NvbCA9PSAidHVybnMiKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIG93cl90cmFuc3BvcnRfYWdlbnRfYWRkX2hlbHBlcl9zZXJ2ZXIobV90cmFu
c3BvcnRBZ2VudCwgT1dSX0hFTFBFUl9TRVJWRVJfVFlQRV9UVVJOX1RMUywKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHVybC5ob3N0LmFzY2lpKCkuZGF0YSgpLCBwb3J0LAotICAgICAgICAgICAg
ICAgICAgICAgICAgc2VydmVyLnVzZXJuYW1lLmFzY2lpKCkuZGF0YSgpLCBzZXJ2ZXIuY3JlZGVu
dGlhbC5hc2NpaSgpLmRhdGEoKSk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAg
ICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0gICAgfQotCi0gICAgZ19vYmplY3Rfc2V0KG1fdHJhbnNwb3J0QWdlbnQsICJpY2UtY29udHJv
bGxpbmctbW9kZSIsIGlzSW5pdGlhdG9yLCBudWxscHRyKTsKLQotICAgIGZvciAoYXV0byYgY29u
ZmlnIDogdHJhbnNjZWl2ZXJDb25maWdzKSB7Ci0gICAgICAgIE93clNlc3Npb24qIHNlc3Npb24g
PSBPV1JfU0VTU0lPTihvd3JfbWVkaWFfc2Vzc2lvbl9uZXcoY29uZmlnLmlzRHRsc0NsaWVudCkp
OwotICAgICAgICBnX29iamVjdF9zZXQoc2Vzc2lvbiwgImR0bHMtY2VydGlmaWNhdGUiLCBtX2R0
bHNDZXJ0aWZpY2F0ZS51dGY4KCkuZGF0YSgpLAotICAgICAgICAgICAgImR0bHMta2V5IiwgbV9k
dGxzUHJpdmF0ZUtleS51dGY4KCkuZGF0YSgpLAotICAgICAgICAgICAgbnVsbHB0cik7Ci0KLSAg
ICAgICAgbV90cmFuc2NlaXZlcnMuYXBwZW5kKE93clRyYW5zY2VpdmVyOjpjcmVhdGUoY29uZmln
Lm1pZCwgc2Vzc2lvbikpOwotICAgIH0KLX0KLQotdm9pZCBNZWRpYUVuZHBvaW50T3dyOjppbnRl
cm5hbEFkZFJlbW90ZUNhbmRpZGF0ZShPd3JTZXNzaW9uKiBzZXNzaW9uLCBjb25zdCBJY2VDYW5k
aWRhdGUmIGNhbmRpZGF0ZSwgY29uc3QgU3RyaW5nJiB1ZnJhZywgY29uc3QgU3RyaW5nJiBwYXNz
d29yZCkKLXsKLSAgICBnYm9vbGVhbiBydGNwTXV4OwotICAgIGdfb2JqZWN0X2dldChzZXNzaW9u
LCAicnRjcC1tdXgiLCAmcnRjcE11eCwgbnVsbHB0cik7Ci0KLSAgICBpZiAocnRjcE11eCAmJiBj
YW5kaWRhdGUuY29tcG9uZW50SWQgPT0gT1dSX0NPTVBPTkVOVF9UWVBFX1JUQ1ApCi0gICAgICAg
IHJldHVybjsKLQotICAgIEFTU0VSVChjYW5kaWRhdGVUeXBlcy5maW5kKGNhbmRpZGF0ZS50eXBl
KSAhPSBub3RGb3VuZCk7Ci0KLSAgICBPd3JDYW5kaWRhdGVUeXBlIGNhbmRpZGF0ZVR5cGUgPSBz
dGF0aWNfY2FzdDxPd3JDYW5kaWRhdGVUeXBlPihjYW5kaWRhdGVUeXBlcy5maW5kKGNhbmRpZGF0
ZS50eXBlKSk7Ci0gICAgT3dyQ29tcG9uZW50VHlwZSBjb21wb25lbnRJZCA9IHN0YXRpY19jYXN0
PE93ckNvbXBvbmVudFR5cGU+KGNhbmRpZGF0ZS5jb21wb25lbnRJZCk7Ci0gICAgT3dyVHJhbnNw
b3J0VHlwZSB0cmFuc3BvcnRUeXBlOwotCi0gICAgaWYgKGNhbmRpZGF0ZS50cmFuc3BvcnQuY29u
dmVydFRvQVNDSUlVcHBlcmNhc2UoKSA9PSAiVURQIikKLSAgICAgICAgdHJhbnNwb3J0VHlwZSA9
IE9XUl9UUkFOU1BPUlRfVFlQRV9VRFA7Ci0gICAgZWxzZSB7Ci0gICAgICAgIEFTU0VSVChjYW5k
aWRhdGVUY3BUeXBlcy5maW5kKGNhbmRpZGF0ZS50Y3BUeXBlKSAhPSBub3RGb3VuZCk7Ci0gICAg
ICAgIHRyYW5zcG9ydFR5cGUgPSBzdGF0aWNfY2FzdDxPd3JUcmFuc3BvcnRUeXBlPihjYW5kaWRh
dGVUY3BUeXBlcy5maW5kKGNhbmRpZGF0ZS50Y3BUeXBlKSk7Ci0gICAgfQotCi0gICAgT3dyQ2Fu
ZGlkYXRlKiBvd3JDYW5kaWRhdGUgPSBvd3JfY2FuZGlkYXRlX25ldyhjYW5kaWRhdGVUeXBlLCBj
b21wb25lbnRJZCk7Ci0gICAgZ19vYmplY3Rfc2V0KG93ckNhbmRpZGF0ZSwgInRyYW5zcG9ydC10
eXBlIiwgdHJhbnNwb3J0VHlwZSwKLSAgICAgICAgImFkZHJlc3MiLCBjYW5kaWRhdGUuYWRkcmVz
cy5hc2NpaSgpLmRhdGEoKSwKLSAgICAgICAgInBvcnQiLCBjYW5kaWRhdGUucG9ydCwKLSAgICAg
ICAgImJhc2UtYWRkcmVzcyIsIGNhbmRpZGF0ZS5yZWxhdGVkQWRkcmVzcy5hc2NpaSgpLmRhdGEo
KSwKLSAgICAgICAgImJhc2UtcG9ydCIsIGNhbmRpZGF0ZS5yZWxhdGVkUG9ydCwKLSAgICAgICAg
InByaW9yaXR5IiwgY2FuZGlkYXRlLnByaW9yaXR5LAotICAgICAgICAiZm91bmRhdGlvbiIsIGNh
bmRpZGF0ZS5mb3VuZGF0aW9uLmFzY2lpKCkuZGF0YSgpLAotICAgICAgICAidWZyYWciLCB1ZnJh
Zy5hc2NpaSgpLmRhdGEoKSwKLSAgICAgICAgInBhc3N3b3JkIiwgcGFzc3dvcmQuYXNjaWkoKS5k
YXRhKCksCi0gICAgICAgIG51bGxwdHIpOwotCi0gICAgb3dyX3Nlc3Npb25fYWRkX3JlbW90ZV9j
YW5kaWRhdGUoc2Vzc2lvbiwgb3dyQ2FuZGlkYXRlKTsKLX0KLQotc3RhdGljIHZvaWQgZ290Q2Fu
ZGlkYXRlKE93clNlc3Npb24qIHNlc3Npb24sIE93ckNhbmRpZGF0ZSogY2FuZGlkYXRlLCBNZWRp
YUVuZHBvaW50T3dyKiBtZWRpYUVuZHBvaW50KQotewotICAgIE93ckNhbmRpZGF0ZVR5cGUgY2Fu
ZGlkYXRlVHlwZTsKLSAgICBnY2hhciogZm91bmRhdGlvbjsKLSAgICBPd3JDb21wb25lbnRUeXBl
IGNvbXBvbmVudElkOwotICAgIE93clRyYW5zcG9ydFR5cGUgdHJhbnNwb3J0VHlwZTsKLSAgICBn
aW50IHByaW9yaXR5OwotICAgIGdjaGFyKiBhZGRyZXNzOwotICAgIGd1aW50IHBvcnQ7Ci0gICAg
Z2NoYXIqIHJlbGF0ZWRBZGRyZXNzOwotICAgIGd1aW50IHJlbGF0ZWRQb3J0OwotCi0gICAgZ19v
YmplY3RfZ2V0KGNhbmRpZGF0ZSwgInR5cGUiLCAmY2FuZGlkYXRlVHlwZSwKLSAgICAgICAgImZv
dW5kYXRpb24iLCAmZm91bmRhdGlvbiwKLSAgICAgICAgImNvbXBvbmVudC10eXBlIiwgJmNvbXBv
bmVudElkLAotICAgICAgICAidHJhbnNwb3J0LXR5cGUiLCAmdHJhbnNwb3J0VHlwZSwKLSAgICAg
ICAgInByaW9yaXR5IiwgJnByaW9yaXR5LAotICAgICAgICAiYWRkcmVzcyIsICZhZGRyZXNzLAot
ICAgICAgICAicG9ydCIsICZwb3J0LAotICAgICAgICAiYmFzZS1hZGRyZXNzIiwgJnJlbGF0ZWRB
ZGRyZXNzLAotICAgICAgICAiYmFzZS1wb3J0IiwgJnJlbGF0ZWRQb3J0LAotICAgICAgICBudWxs
cHRyKTsKLQotICAgIEFTU0VSVChjYW5kaWRhdGVUeXBlID49IDAgJiYgY2FuZGlkYXRlVHlwZSA8
IGNhbmRpZGF0ZVR5cGVzLnNpemUoKSk7Ci0gICAgQVNTRVJUKHRyYW5zcG9ydFR5cGUgPj0gMCAm
JiB0cmFuc3BvcnRUeXBlIDwgY2FuZGlkYXRlVGNwVHlwZXMuc2l6ZSgpKTsKLQotICAgIEljZUNh
bmRpZGF0ZSBpY2VDYW5kaWRhdGU7Ci0gICAgaWNlQ2FuZGlkYXRlLnR5cGUgPSBjYW5kaWRhdGVU
eXBlc1tjYW5kaWRhdGVUeXBlXTsKLSAgICBpY2VDYW5kaWRhdGUuZm91bmRhdGlvbiA9IGZvdW5k
YXRpb247Ci0gICAgaWNlQ2FuZGlkYXRlLmNvbXBvbmVudElkID0gY29tcG9uZW50SWQ7Ci0gICAg
aWNlQ2FuZGlkYXRlLnByaW9yaXR5ID0gcHJpb3JpdHk7Ci0gICAgaWNlQ2FuZGlkYXRlLmFkZHJl
c3MgPSBhZGRyZXNzOwotICAgIGljZUNhbmRpZGF0ZS5wb3J0ID0gcG9ydCA/IHBvcnQgOiBjYW5k
aWRhdGVEZWZhdWx0UG9ydDsKLQotICAgIGlmICh0cmFuc3BvcnRUeXBlID09IE9XUl9UUkFOU1BP
UlRfVFlQRV9VRFApCi0gICAgICAgIGljZUNhbmRpZGF0ZS50cmFuc3BvcnQgPSAiVURQIjsKLSAg
ICBlbHNlIHsKLSAgICAgICAgaWNlQ2FuZGlkYXRlLnRyYW5zcG9ydCA9ICJUQ1AiOwotICAgICAg
ICBpY2VDYW5kaWRhdGUudGNwVHlwZSA9IGNhbmRpZGF0ZVRjcFR5cGVzW3RyYW5zcG9ydFR5cGVd
OwotICAgIH0KLQotICAgIGlmIChjYW5kaWRhdGVUeXBlICE9IE9XUl9DQU5ESURBVEVfVFlQRV9I
T1NUKSB7Ci0gICAgICAgIGljZUNhbmRpZGF0ZS5yZWxhdGVkQWRkcmVzcyA9IHJlbGF0ZWRBZGRy
ZXNzOwotICAgICAgICBpY2VDYW5kaWRhdGUucmVsYXRlZFBvcnQgPSByZWxhdGVkUG9ydCA/IHJl
bGF0ZWRQb3J0IDogY2FuZGlkYXRlRGVmYXVsdFBvcnQ7Ci0gICAgfQotCi0gICAgZ19vYmplY3Rf
c2V0KEdfT0JKRUNUKGNhbmRpZGF0ZSksICJ1ZnJhZyIsIGdfb2JqZWN0X2dldF9kYXRhKEdfT0JK
RUNUKHNlc3Npb24pLCAiaWNlLXVmcmFnIiksCi0gICAgICAgICJwYXNzd29yZCIsIGdfb2JqZWN0
X2dldF9kYXRhKEdfT0JKRUNUKHNlc3Npb24pLCAiaWNlLXBhc3N3b3JkIiksCi0gICAgICAgIG51
bGxwdHIpOwotCi0gICAgbWVkaWFFbmRwb2ludC0+ZGlzcGF0Y2hOZXdJY2VDYW5kaWRhdGUobWVk
aWFFbmRwb2ludC0+c2Vzc2lvbk1pZChzZXNzaW9uKSwgV1RGTW92ZShpY2VDYW5kaWRhdGUpKTsK
LQotICAgIGdfZnJlZShmb3VuZGF0aW9uKTsKLSAgICBnX2ZyZWUoYWRkcmVzcyk7Ci0gICAgZ19m
cmVlKHJlbGF0ZWRBZGRyZXNzKTsKLX0KLQotc3RhdGljIHZvaWQgY2FuZGlkYXRlR2F0aGVyaW5n
RG9uZShPd3JTZXNzaW9uKiBzZXNzaW9uLCBNZWRpYUVuZHBvaW50T3dyKiBtZWRpYUVuZHBvaW50
KQotewotICAgIG1lZGlhRW5kcG9pbnQtPmRpc3BhdGNoR2F0aGVyaW5nRG9uZShtZWRpYUVuZHBv
aW50LT5zZXNzaW9uTWlkKHNlc3Npb24pKTsKLX0KLQotc3RhdGljIHZvaWQgaWNlQ29ubmVjdGlv
blN0YXRlQ2hhbmdlKE93clNlc3Npb24qIHNlc3Npb24sIEdQYXJhbVNwZWMqLCBNZWRpYUVuZHBv
aW50T3dyKiBtZWRpYUVuZHBvaW50KQotewotICAgIG1lZGlhRW5kcG9pbnQtPnByb2Nlc3NJY2VU
cmFuc3BvcnRTdGF0ZUNoYW5nZShzZXNzaW9uKTsKLX0KLQotc3RhdGljIHZvaWQgZ290SW5jb21p
bmdTb3VyY2UoT3dyTWVkaWFTZXNzaW9uKiBtZWRpYVNlc3Npb24sIE93ck1lZGlhU291cmNlKiBz
b3VyY2UsIE1lZGlhRW5kcG9pbnRPd3IqIG1lZGlhRW5kcG9pbnQpCi17Ci0gICAgbWVkaWFFbmRw
b2ludC0+dW5tdXRlUmVtb3RlU291cmNlKG1lZGlhRW5kcG9pbnQtPnNlc3Npb25NaWQoT1dSX1NF
U1NJT04obWVkaWFTZXNzaW9uKSksIHNvdXJjZSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKLQotI2VuZGlmIC8vIEVOQUJMRShXRUJfUlRDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vb3BlbndlYnJ0Yy9NZWRpYUVuZHBvaW50T3dyLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9vcGVud2VicnRjL01lZGlhRW5kcG9p
bnRPd3IuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjMxMDQ4YzllY2ZlZWUzNTBh
YzI5ZjYyMjFhY2QwYzJlYWRiOTBmNy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9vcGVud2Vi
cnRjL01lZGlhRW5kcG9pbnRPd3IuaAorKysgL2Rldi9udWxsCkBAIC0xLDE0OSArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDE1LCAyMDE2IEVyaWNzc29uIEFCLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiAg
ICBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlCi0gKiAgICBkaXN0cmlidXRpb24uCi0gKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIEVy
aWNzc29uIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICogICAgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0gKiAg
ICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaWYgRU5BQkxFKFdFQl9SVEMpCi0KLSNpbmNsdWRl
ICJNZWRpYUVuZHBvaW50LmgiCi0jaW5jbHVkZSA8b3dyL293cl9zZXNzaW9uLmg+Ci0jaW5jbHVk
ZSA8d3RmL1JlZkNvdW50ZWQuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0KLXR5cGVkZWYg
c3RydWN0IF9Pd3JNZWRpYVNlc3Npb24gT3dyTWVkaWFTZXNzaW9uOwotdHlwZWRlZiBzdHJ1Y3Qg
X093ck1lZGlhU291cmNlIE93ck1lZGlhU291cmNlOwotdHlwZWRlZiBzdHJ1Y3QgX093clRyYW5z
cG9ydEFnZW50IE93clRyYW5zcG9ydEFnZW50OwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNs
YXNzIFJlYWx0aW1lTWVkaWFTb3VyY2VPd3I7Ci1jbGFzcyBSVENDb25maWd1cmF0aW9uUHJpdmF0
ZTsKLQotc3RydWN0IFBlZXJNZWRpYURlc2NyaXB0aW9uOwotCi1jbGFzcyBPd3JUcmFuc2NlaXZl
ciA6IHB1YmxpYyBSZWZDb3VudGVkPE93clRyYW5zY2VpdmVyPiB7Ci1wdWJsaWM6Ci0gICAgc3Rh
dGljIFJlZjxPd3JUcmFuc2NlaXZlcj4gY3JlYXRlKGNvbnN0IFN0cmluZyYgbWlkLCBPd3JTZXNz
aW9uKiBzZXNzaW9uKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgT3dyVHJh
bnNjZWl2ZXIobWlkLCBzZXNzaW9uKSk7Ci0gICAgfQotICAgIHZpcnR1YWwgfk93clRyYW5zY2Vp
dmVyKCkgeyB9Ci0KLSAgICBjb25zdCBTdHJpbmcmIG1pZCgpIGNvbnN0IHsgcmV0dXJuIG1fbWlk
OyB9Ci0gICAgT3dyU2Vzc2lvbiogc2Vzc2lvbigpIGNvbnN0IHsgcmV0dXJuIG1fc2Vzc2lvbjsg
fQotCi0gICAgT3dySWNlU3RhdGUgb3dySWNlU3RhdGUoKSBjb25zdCB7IHJldHVybiBtX293cklj
ZVN0YXRlOyB9Ci0gICAgdm9pZCBzZXRPd3JJY2VTdGF0ZShPd3JJY2VTdGF0ZSBzdGF0ZSkgeyBt
X293ckljZVN0YXRlID0gc3RhdGU7IH0KLQotICAgIGJvb2wgZ290RW5kT2ZSZW1vdGVDYW5kaWRh
dGVzKCkgY29uc3QgeyByZXR1cm4gbV9nb3RFbmRPZlJlbW90ZUNhbmRpZGF0ZXM7IH0KLSAgICB2
b2lkIG1hcmtHb3RFbmRPZlJlbW90ZUNhbmRpZGF0ZXMoKSB7IG1fZ290RW5kT2ZSZW1vdGVDYW5k
aWRhdGVzID0gdHJ1ZTsgfQotCi1wcml2YXRlOgotICAgIE93clRyYW5zY2VpdmVyKGNvbnN0IFN0
cmluZyYgbWlkLCBPd3JTZXNzaW9uKiBzZXNzaW9uKQotICAgICAgICA6IG1fbWlkKG1pZCkKLSAg
ICAgICAgLCBtX3Nlc3Npb24oc2Vzc2lvbikKLSAgICB7IH0KLQotICAgIFN0cmluZyBtX21pZDsK
LSAgICBPd3JTZXNzaW9uKiBtX3Nlc3Npb247Ci0KLSAgICBPd3JJY2VTdGF0ZSBtX293ckljZVN0
YXRlIHsgT1dSX0lDRV9TVEFURV9ESVNDT05ORUNURUQgfTsKLSAgICBib29sIG1fZ290RW5kT2ZS
ZW1vdGVDYW5kaWRhdGVzIHsgZmFsc2UgfTsKLX07Ci0KLWNsYXNzIE1lZGlhRW5kcG9pbnRPd3Ig
OiBwdWJsaWMgTWVkaWFFbmRwb2ludCB7Ci1wdWJsaWM6Ci0gICAgTWVkaWFFbmRwb2ludE93cihN
ZWRpYUVuZHBvaW50Q2xpZW50Jik7Ci0gICAgfk1lZGlhRW5kcG9pbnRPd3IoKTsKLQotICAgIHZv
aWQgc2V0Q29uZmlndXJhdGlvbihNZWRpYUVuZHBvaW50Q29uZmlndXJhdGlvbiYmKSBvdmVycmlk
ZTsKLQotICAgIHZvaWQgZ2VuZXJhdGVEdGxzSW5mbygpIG92ZXJyaWRlOwotICAgIE1lZGlhUGF5
bG9hZFZlY3RvciBnZXREZWZhdWx0QXVkaW9QYXlsb2FkcygpIG92ZXJyaWRlOwotICAgIE1lZGlh
UGF5bG9hZFZlY3RvciBnZXREZWZhdWx0VmlkZW9QYXlsb2FkcygpIG92ZXJyaWRlOwotICAgIE1l
ZGlhUGF5bG9hZFZlY3RvciBmaWx0ZXJQYXlsb2Fkcyhjb25zdCBNZWRpYVBheWxvYWRWZWN0b3Im
IHJlbW90ZVBheWxvYWRzLCBjb25zdCBNZWRpYVBheWxvYWRWZWN0b3ImIGRlZmF1bHRQYXlsb2Fk
cykgb3ZlcnJpZGU7Ci0KLSAgICBVcGRhdGVSZXN1bHQgdXBkYXRlUmVjZWl2ZUNvbmZpZ3VyYXRp
b24oTWVkaWFFbmRwb2ludFNlc3Npb25Db25maWd1cmF0aW9uKiwgYm9vbCBpc0luaXRpYXRvcikg
b3ZlcnJpZGU7Ci0gICAgVXBkYXRlUmVzdWx0IHVwZGF0ZVNlbmRDb25maWd1cmF0aW9uKE1lZGlh
RW5kcG9pbnRTZXNzaW9uQ29uZmlndXJhdGlvbiosIGNvbnN0IFJlYWx0aW1lTWVkaWFTb3VyY2VN
YXAmLCBib29sIGlzSW5pdGlhdG9yKSBvdmVycmlkZTsKLQotICAgIHZvaWQgYWRkUmVtb3RlQ2Fu
ZGlkYXRlKGNvbnN0IEljZUNhbmRpZGF0ZSYsIGNvbnN0IFN0cmluZyYgbWlkLCBjb25zdCBTdHJp
bmcmIHVmcmFnLCBjb25zdCBTdHJpbmcmIHBhc3N3b3JkKSBvdmVycmlkZTsKLQotICAgIFJlZjxS
ZWFsdGltZU1lZGlhU291cmNlPiBjcmVhdGVNdXRlZFJlbW90ZVNvdXJjZShjb25zdCBTdHJpbmcm
IG1pZCwgUmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlwZSkgb3ZlcnJpZGU7Ci0gICAgdm9pZCByZXBs
YWNlTXV0ZWRSZW1vdGVTb3VyY2VNaWQoY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJikgZmlu
YWw7Ci0gICAgdm9pZCByZXBsYWNlU2VuZFNvdXJjZShSZWFsdGltZU1lZGlhU291cmNlJiwgY29u
c3QgU3RyaW5nJiBtaWQpIG92ZXJyaWRlOwotCi0gICAgdm9pZCBzdG9wKCkgb3ZlcnJpZGU7Ci0K
LSAgICBzaXplX3QgdHJhbnNjZWl2ZXJJbmRleEZvclNlc3Npb24oT3dyU2Vzc2lvbiopIGNvbnN0
OwotICAgIGNvbnN0IFN0cmluZyYgc2Vzc2lvbk1pZChPd3JTZXNzaW9uKikgY29uc3Q7Ci0gICAg
T3dyVHJhbnNjZWl2ZXIqIG1hdGNoVHJhbnNjZWl2ZXJCeU1pZChjb25zdCBTdHJpbmcmIG1pZCkg
Y29uc3Q7Ci0KLSAgICB2b2lkIGRpc3BhdGNoTmV3SWNlQ2FuZGlkYXRlKGNvbnN0IFN0cmluZyYg
bWlkLCBJY2VDYW5kaWRhdGUmJik7Ci0gICAgdm9pZCBkaXNwYXRjaEdhdGhlcmluZ0RvbmUoY29u
c3QgU3RyaW5nJiBtaWQpOwotICAgIHZvaWQgcHJvY2Vzc0ljZVRyYW5zcG9ydFN0YXRlQ2hhbmdl
KE93clNlc3Npb24qKTsKLSAgICB2b2lkIGRpc3BhdGNoRHRsc0ZpbmdlcnByaW50KGdjaGFyKiBw
cml2YXRlS2V5LCBnY2hhciogY2VydGlmaWNhdGUsIGNvbnN0IFN0cmluZyYgZmluZ2VycHJpbnQs
IGNvbnN0IFN0cmluZyYgZmluZ2VycHJpbnRGdW5jdGlvbik7Ci0gICAgdm9pZCB1bm11dGVSZW1v
dGVTb3VyY2UoY29uc3QgU3RyaW5nJiBtaWQsIE93ck1lZGlhU291cmNlKik7Ci0KLXByaXZhdGU6
Ci0gICAgZW51bSBTZXNzaW9uVHlwZSB7IFNlc3Npb25UeXBlTWVkaWEgfTsKLQotICAgIHN0cnVj
dCBUcmFuc2NlaXZlckNvbmZpZyB7Ci0gICAgICAgIFNlc3Npb25UeXBlIHR5cGU7Ci0gICAgICAg
IGJvb2wgaXNEdGxzQ2xpZW50OwotICAgICAgICBTdHJpbmcgbWlkOwotICAgIH07Ci0KLSAgICBz
dGQ6OnVuaXF1ZV9wdHI8UlRDRGF0YUNoYW5uZWxIYW5kbGVyPiBjcmVhdGVEYXRhQ2hhbm5lbEhh
bmRsZXIoY29uc3QgU3RyaW5nJiwgY29uc3QgUlRDRGF0YUNoYW5uZWxJbml0JikgZmluYWw7Ci0K
LSAgICB2b2lkIHByZXBhcmVTZXNzaW9uKE93clNlc3Npb24qLCBQZWVyTWVkaWFEZXNjcmlwdGlv
biopOwotICAgIHZvaWQgcHJlcGFyZU1lZGlhU2Vzc2lvbihPd3JNZWRpYVNlc3Npb24qLCBQZWVy
TWVkaWFEZXNjcmlwdGlvbiosIGJvb2wgaXNJbml0aWF0b3IpOwotCi0gICAgdm9pZCBlbnN1cmVU
cmFuc3BvcnRBZ2VudEFuZFRyYW5zY2VpdmVycyhib29sIGlzSW5pdGlhdG9yLCBjb25zdCBWZWN0
b3I8VHJhbnNjZWl2ZXJDb25maWc+Jik7Ci0gICAgdm9pZCBpbnRlcm5hbEFkZFJlbW90ZUNhbmRp
ZGF0ZShPd3JTZXNzaW9uKiwgY29uc3QgSWNlQ2FuZGlkYXRlJiwgY29uc3QgU3RyaW5nJiB1ZnJh
ZywgY29uc3QgU3RyaW5nJiBwYXNzd29yZCk7Ci0KLSAgICBzdGQ6Om9wdGlvbmFsPE1lZGlhRW5k
cG9pbnRDb25maWd1cmF0aW9uPiBtX2NvbmZpZ3VyYXRpb247Ci0gICAgR1JlZ2V4KiBtX2hlbHBl
clNlcnZlclJlZ0V4OwotCi0gICAgT3dyVHJhbnNwb3J0QWdlbnQqIG1fdHJhbnNwb3J0QWdlbnQ7
Ci0gICAgVmVjdG9yPFJlZlB0cjxPd3JUcmFuc2NlaXZlcj4+IG1fdHJhbnNjZWl2ZXJzOwotICAg
IEhhc2hNYXA8U3RyaW5nLCBSZWZQdHI8UmVhbHRpbWVNZWRpYVNvdXJjZU93cj4+IG1fbXV0ZWRS
ZW1vdGVTb3VyY2VzOwotCi0gICAgTWVkaWFFbmRwb2ludENsaWVudCYgbV9jbGllbnQ7Ci0KLSAg
ICB1bnNpZ25lZCBtX251bWJlck9mUmVjZWl2ZVByZXBhcmVkU2Vzc2lvbnM7Ci0gICAgdW5zaWdu
ZWQgbV9udW1iZXJPZlNlbmRQcmVwYXJlZFNlc3Npb25zOwotCi0gICAgU3RyaW5nIG1fZHRsc1By
aXZhdGVLZXk7Ci0gICAgU3RyaW5nIG1fZHRsc0NlcnRpZmljYXRlOwotfTsKLQotfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKFdFQl9SVEMpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9vcGVud2VicnRjL09wZW5XZWJSVENV
dGlsaXRpZXMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vb3Blbndl
YnJ0Yy9PcGVuV2ViUlRDVXRpbGl0aWVzLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggZTRjZmI1OWRmNTAxZDliMWUxNzRlNzc0MGI3NjQ3YjFhNDhjOTM2MC4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tZWRpYXN0cmVhbS9vcGVud2VicnRjL09wZW5XZWJSVENVdGlsaXRpZXMuY3BwCisrKyAvZGV2
L251bGwKQEAgLTEsNTcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBJZ2FsaWEg
Uy5MCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgTWV0cm9sb2dpY2FsCi0gKgotICogQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoK
LSAqCi0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICoKLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNv
cHlyaWdodCBob2xkZXIgbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUCi0gKiBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAq
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgVVNFKE9QRU5XRUJSVEMp
Ci0jaW5jbHVkZSAiT3BlbldlYlJUQ1V0aWxpdGllcy5oIgotCi0jaW5jbHVkZSA8b3dyL293ci5o
PgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXZvaWQgaW5pdGlhbGl6ZU9wZW5XZWJSVEMoKQot
ewotICAgIHN0YXRpYyBib29sIGlzSW5pdGlhbGl6ZWQgPSBmYWxzZTsKLSAgICBpZiAoaXNJbml0
aWFsaXplZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgb3dyX2luaXQoZ19tYWluX2NvbnRleHRf
ZGVmYXVsdCgpKTsKLSAgICBpc0luaXRpYWxpemVkID0gdHJ1ZTsKLX0KLQotfQotCi0jZW5kaWYg
Ly8gVVNFKE9QRU5XRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
ZWRpYXN0cmVhbS9vcGVud2VicnRjL09wZW5XZWJSVENVdGlsaXRpZXMuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL29wZW53ZWJydGMvT3BlbldlYlJUQ1V0aWxpdGllcy5o
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZWQ0NzRiYmZhNGM1MzIyN2ZiNTY2OWFi
NGIzMzBjNjJmYWM4OWI4Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL29wZW53ZWJydGMvT3Bl
bldlYlJUQ1V0aWxpdGllcy5oCisrKyAvZGV2L251bGwKQEAgLTEsNDAgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxNSBJZ2FsaWEgUy5MCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgTWV0
cm9sb2dpY2FsCi0gKgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICoK
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIDMu
IE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
Ci0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBIT0xERVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLQotbmFtZXNwYWNlIFdlYkNv
cmUgewotCi12b2lkIGluaXRpYWxpemVPcGVuV2ViUlRDKCk7Ci0KLX0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL29wZW53ZWJydGMvUmVhbHRpbWVBdWRp
b1NvdXJjZU93ci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vb3Blbndl
YnJ0Yy9SZWFsdGltZUF1ZGlvU291cmNlT3dyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IGNhYjcwNTA4NGI5NGNmYzhlN2IxOWY3ZDdlODIzMjY4Y2JjZWY0NjYuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWVkaWFzdHJlYW0vb3BlbndlYnJ0Yy9SZWFsdGltZUF1ZGlvU291cmNlT3dyLmgKKysrIC9k
ZXYvbnVsbApAQCAtMSw3MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE1LDIwMTYg
SWdhbGlhIFMuTAotICogQ29weXJpZ2h0IChDKSAyMDE1IE1ldHJvbG9naWNhbAotICoKLSAqIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0g
KiBtZXQ6Ci0gKgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9m
IHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv
bQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0g
KiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVAotICogSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShNRURJQV9TVFJF
QU0pICYmIFVTRShPUEVOV0VCUlRDKQotCi0jaW5jbHVkZSAiUmVhbHRpbWVNZWRpYVNvdXJjZU93
ci5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFJlYWx0aW1lQXVkaW9Tb3VyY2VP
d3IgOiBwdWJsaWMgUmVhbHRpbWVNZWRpYVNvdXJjZU93ciB7Ci1wdWJsaWM6Ci1SZWFsdGltZUF1
ZGlvU291cmNlT3dyKE93ck1lZGlhU291cmNlKiBtZWRpYVNvdXJjZSwgY29uc3QgU3RyaW5nJiBp
ZCwgUmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlwZSB0eXBlLCBjb25zdCBTdHJpbmcmIG5hbWUpCi0g
ICAgOiBSZWFsdGltZU1lZGlhU291cmNlT3dyKG1lZGlhU291cmNlLCBpZCwgdHlwZSwgbmFtZSkK
LSAgICB7Ci0gICAgfQotCi1SZWFsdGltZUF1ZGlvU291cmNlT3dyKGNvbnN0IFN0cmluZyYgaWQs
IFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGUgdHlwZSwgY29uc3QgU3RyaW5nJiBuYW1lKQotICAg
IDogUmVhbHRpbWVNZWRpYVNvdXJjZU93cihpZCwgdHlwZSwgbmFtZSkKLSAgICB7Ci0gICAgfQot
Ci0gICAgdmlydHVhbCB+UmVhbHRpbWVBdWRpb1NvdXJjZU93cigpIHsgfQotCi0gICAgYm9vbCBh
cHBseVNpemUoY29uc3QgSW50U2l6ZSYpIGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9Ci0KLXByb3Rl
Y3RlZDoKLSAgICB2b2lkIGluaXRpYWxpemVTZXR0aW5ncygpIGZpbmFsIHsKLSAgICAgICAgaWYg
KG1fY3VycmVudFNldHRpbmdzLmRldmljZUlkKCkuaXNFbXB0eSgpKQotICAgICAgICAgICAgbV9j
dXJyZW50U2V0dGluZ3Muc2V0U3VwcG9ydGVkQ29uc3RyYWludHMoc3VwcG9ydGVkQ29uc3RyYWlu
dHMoKSk7Ci0KLSAgICAgICAgbV9jdXJyZW50U2V0dGluZ3Muc2V0RGV2aWNlSWQoaWQoKSk7Ci0g
ICAgfQotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKE1F
RElBX1NUUkVBTSkgJiYgVVNFKE9QRU5XRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9vcGVud2VicnRjL1JlYWx0aW1lTWVkaWFTb3VyY2VDZW50
ZXJPd3IuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vb3BlbndlYnJ0
Yy9SZWFsdGltZU1lZGlhU291cmNlQ2VudGVyT3dyLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggYWFhZDhhMjM5MDI3N2YzNzk3MDE0MTI0OTkxZjRhZGRhOGFkODQzOC4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tZWRpYXN0cmVhbS9vcGVud2VicnRjL1JlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJP
d3IuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTkwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTEgRXJpY3Nzb24gQUIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxNSBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDE1IE1ldHJvbG9naWNhbC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogICAgaW4gdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogICAgZGlzdHJpYnV0
aW9uLgotICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBFcmljc3NvbiBub3IgdGhlIG5hbWVzIG9m
IGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotICogICAgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAot
ICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29u
ZmlnLmgiCi0KLSNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKSAmJiBVU0UoT1BFTldFQlJUQykKLSNp
bmNsdWRlICJSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyT3dyLmgiCi0KLSNpbmNsdWRlICJDYXB0
dXJlRGV2aWNlLmgiCi0jaW5jbHVkZSAiTWVkaWFTdHJlYW1Qcml2YXRlLmgiCi0jaW5jbHVkZSAi
Tm90SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlICJPcGVuV2ViUlRDVXRpbGl0aWVzLmgiCi0jaW5j
bHVkZSAiUmVhbHRpbWVBdWRpb1NvdXJjZU93ci5oIgotI2luY2x1ZGUgIlJlYWx0aW1lTWVkaWFT
b3VyY2VDYXBhYmlsaXRpZXMuaCIKLSNpbmNsdWRlICJSZWFsdGltZVZpZGVvU291cmNlT3dyLmgi
Ci0jaW5jbHVkZSA8b3dyL293ci5oPgotI2luY2x1ZGUgPG93ci9vd3JfbG9jYWwuaD4KLSNpbmNs
dWRlIDxvd3Ivb3dyX21lZGlhX3NvdXJjZS5oPgotI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+
Ci0jaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0jaW5jbHVkZSA8d3RmL1VVSUQuaD4K
LSNpbmNsdWRlIDx3dGYvZ2xpYi9HVW5pcXVlUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0
cmluZy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotCi1SZWFsdGltZU1lZGlhU291cmNlQ2VudGVyJiBSZWFsdGltZU1lZGlhU291cmNl
Q2VudGVyOjpwbGF0Zm9ybUNlbnRlcigpCi17Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsK
LSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8UmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlck93cj4g
Y2VudGVyOwotICAgIHJldHVybiBjZW50ZXI7Ci19Ci0KLXN0YXRpYyB2b2lkIG1lZGlhU291cmNl
c0F2YWlsYWJsZUNhbGxiYWNrKEdMaXN0KiBzb3VyY2VzLCBncG9pbnRlciB1c2VyRGF0YSkKLXsK
LSAgICBSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyT3dyKiBjZW50ZXIgPSByZWludGVycHJldF9j
YXN0PFJlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJPd3IqPih1c2VyRGF0YSk7Ci0gICAgY2VudGVy
LT5tZWRpYVNvdXJjZXNBdmFpbGFibGUoc291cmNlcyk7Ci19Ci0KLVJlYWx0aW1lTWVkaWFTb3Vy
Y2VDZW50ZXJPd3I6OlJlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJPd3IoKQotewotICAgIGluaXRp
YWxpemVPcGVuV2ViUlRDKCk7Ci19Ci0KLVJlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJPd3I6On5S
ZWFsdGltZU1lZGlhU291cmNlQ2VudGVyT3dyKCkKLXsKLX0KLQotdm9pZCBSZWFsdGltZU1lZGlh
U291cmNlQ2VudGVyT3dyOjp2YWxpZGF0ZVJlcXVlc3RDb25zdHJhaW50cyhWYWxpZENvbnN0cmFp
bnRzSGFuZGxlciYmIHZhbGlkSGFuZGxlciwgSW52YWxpZENvbnN0cmFpbnRzSGFuZGxlciYmIGlu
dmFsaWRIYW5kbGVyLCBjb25zdCBNZWRpYUNvbnN0cmFpbnRzJiBhdWRpb0NvbnN0cmFpbnRzLCBj
b25zdCBNZWRpYUNvbnN0cmFpbnRzJiB2aWRlb0NvbnN0cmFpbnRzLCBTdHJpbmcmJiBkZXZpY2VJ
ZGVudGlmaWVySGFzaFNhbHQpCi17Ci0gICAgbV92YWxpZENvbnN0cmFpbnRzSGFuZGxlciA9IFdU
Rk1vdmUodmFsaWRIYW5kbGVyKTsKLSAgICBtX2ludmFsaWRDb25zdHJhaW50c0hhbmRsZXIgPSBX
VEZNb3ZlKGludmFsaWRIYW5kbGVyKTsKLQotICAgIFZlY3RvcjxTdHJpbmc+IGF1ZGlvU291cmNl
czsKLSAgICBWZWN0b3I8U3RyaW5nPiB2aWRlb1NvdXJjZXM7Ci0KLSAgICAvLyBGSVhNRTogQWN0
dWFsbHkgZG8gY29uc3RyYWludHMgdmFsaWRhdGlvbi4gVGhlIE1lZGlhQ29uc3RyYWludHMKLSAg
ICAvLyBuZWVkIHRvIGNvbXBseSB3aXRoIHRoZSBhdmFpbGFibGUgYXVkaW8vdmlkZW8gZGV2aWNl
KHMpCi0gICAgLy8gY2FwYWJpbGl0aWVzLiBTZWUgYnVnICMxMjMzNDUuCi0gICAgaWYgKGF1ZGlv
Q29uc3RyYWludHMuaXNWYWxpZCkKLSAgICAgICAgYXVkaW9Tb3VyY2VzLmFwcGVuZChTdHJpbmco
ImF1ZGlvIikpOwotCi0gICAgaWYgKHZpZGVvQ29uc3RyYWludHMuaXNWYWxpZCkKLSAgICAgICAg
dmlkZW9Tb3VyY2VzLmFwcGVuZChTdHJpbmcoInZpZGVvIikpOwotCi0gICAgbV92YWxpZENvbnN0
cmFpbnRzSGFuZGxlcihXVEZNb3ZlKGF1ZGlvU291cmNlcyksIFdURk1vdmUodmlkZW9Tb3VyY2Vz
KSwgV1RGTW92ZShkZXZpY2VJZGVudGlmaWVySGFzaFNhbHQpKTsKLSAgICBtX3ZhbGlkQ29uc3Ry
YWludHNIYW5kbGVyID0gbnVsbHB0cjsKLSAgICBtX2ludmFsaWRDb25zdHJhaW50c0hhbmRsZXIg
PSBudWxscHRyOwotfQotCi12b2lkIFJlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJPd3I6OmNyZWF0
ZU1lZGlhU3RyZWFtKE5ld01lZGlhU3RyZWFtSGFuZGxlciYmIGNvbXBsZXRpb25IYW5kbGVyLCBj
b25zdCBTdHJpbmcmIGF1ZGlvRGV2aWNlSUQsIGNvbnN0IFN0cmluZyYgdmlkZW9EZXZpY2VJRCwg
Y29uc3QgTWVkaWFDb25zdHJhaW50cyosIGNvbnN0IE1lZGlhQ29uc3RyYWludHMqKQotewotICAg
IGludCB0eXBlcyA9IE9XUl9NRURJQV9UWVBFX1VOS05PV047Ci0KLSAgICBpZiAoIWF1ZGlvRGV2
aWNlSUQuaXNFbXB0eSgpKQotICAgICAgICB0eXBlcyB8PSBPV1JfTUVESUFfVFlQRV9BVURJTzsK
LSAgICBpZiAoIXZpZGVvRGV2aWNlSUQuaXNFbXB0eSgpKQotICAgICAgICB0eXBlcyB8PSBPV1Jf
TUVESUFfVFlQRV9WSURFTzsKLQotICAgIG1fY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKTsKLQotICAgIG93cl9nZXRfY2FwdHVyZV9zb3VyY2VzKHN0YXRpY19j
YXN0PE93ck1lZGlhVHlwZT4odHlwZXMpLCBtZWRpYVNvdXJjZXNBdmFpbGFibGVDYWxsYmFjaywg
dGhpcyk7Ci19Ci0KLVZlY3RvcjxDYXB0dXJlRGV2aWNlPiBSZWFsdGltZU1lZGlhU291cmNlQ2Vu
dGVyT3dyOjpnZXRNZWRpYVN0cmVhbURldmljZXMoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7
Ci0gICAgcmV0dXJuIFZlY3RvcjxDYXB0dXJlRGV2aWNlPigpOwotfQotCi12b2lkIFJlYWx0aW1l
TWVkaWFTb3VyY2VDZW50ZXJPd3I6Om1lZGlhU291cmNlc0F2YWlsYWJsZShHTGlzdCogc291cmNl
cykKLXsKLSAgICBWZWN0b3I8UmVmPFJlYWx0aW1lTWVkaWFTb3VyY2U+PiBhdWRpb1NvdXJjZXM7
Ci0gICAgVmVjdG9yPFJlZjxSZWFsdGltZU1lZGlhU291cmNlPj4gdmlkZW9Tb3VyY2VzOwotCi0g
ICAgZm9yIChhdXRvIGl0ZW0gPSBzb3VyY2VzOyBpdGVtOyBpdGVtID0gaXRlbS0+bmV4dCkgewot
ICAgICAgICBPd3JNZWRpYVNvdXJjZSogc291cmNlID0gT1dSX01FRElBX1NPVVJDRShpdGVtLT5k
YXRhKTsKLQotICAgICAgICBHVW5pcXVlT3V0UHRyPGdjaGFyPiBuYW1lOwotICAgICAgICBPd3JN
ZWRpYVR5cGUgbWVkaWFUeXBlOwotICAgICAgICBnX29iamVjdF9nZXQoc291cmNlLCAibWVkaWEt
dHlwZSIsICZtZWRpYVR5cGUsICJuYW1lIiwgJm5hbWUub3V0UHRyKCksIE5VTEwpOwotICAgICAg
ICBTdHJpbmcgc291cmNlTmFtZShuYW1lLmdldCgpKTsKLSAgICAgICAgU3RyaW5nIGlkKGNyZWF0
ZUNhbm9uaWNhbFVVSURTdHJpbmcoKSk7Ci0KLSAgICAgICAgaWYgKGdfZ2V0ZW52KCJPV1JfVVNF
X1RFU1RfU09VUkNFUyIpKSB7Ci0gICAgICAgICAgICBPd3JTb3VyY2VUeXBlIHNvdXJjZVR5cGUg
PSBPV1JfU09VUkNFX1RZUEVfVU5LTk9XTjsKLSAgICAgICAgICAgIGdfb2JqZWN0X2dldChzb3Vy
Y2UsICJ0eXBlIiwgJnNvdXJjZVR5cGUsIE5VTEwpOwotICAgICAgICAgICAgaWYgKHNvdXJjZVR5
cGUgIT0gT1dSX1NPVVJDRV9UWVBFX1RFU1QpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgIH0KLQotICAgICAgICBSZWFsdGltZU1lZGlhU291cmNlOjpUeXBlIG1lZGlhU291cmNl
VHlwZTsKLSAgICAgICAgaWYgKG1lZGlhVHlwZSAmIE9XUl9NRURJQV9UWVBFX0FVRElPKQotICAg
ICAgICAgICAgbWVkaWFTb3VyY2VUeXBlID0gUmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlwZTo6QXVk
aW87Ci0gICAgICAgIGVsc2UgaWYgKG1lZGlhVHlwZSAmIE9XUl9NRURJQV9UWVBFX1ZJREVPKQot
ICAgICAgICAgICAgbWVkaWFTb3VyY2VUeXBlID0gUmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlwZTo6
VmlkZW87Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgbWVkaWFTb3VyY2VUeXBlID0gUmVh
bHRpbWVNZWRpYVNvdXJjZTo6VHlwZTo6Tm9uZTsKLSAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgUmVmUHRyPFJlYWx0aW1lTWVkaWFTb3VyY2VP
d3I+IG1lZGlhU291cmNlOwotICAgICAgICBpZiAobWVkaWFTb3VyY2VUeXBlID09IFJlYWx0aW1l
TWVkaWFTb3VyY2U6OlR5cGU6OkF1ZGlvKQotICAgICAgICAgICAgbWVkaWFTb3VyY2UgPSBhZG9w
dFJlZihuZXcgUmVhbHRpbWVBdWRpb1NvdXJjZU93cihzb3VyY2UsIGlkLCBtZWRpYVNvdXJjZVR5
cGUsIHNvdXJjZU5hbWUpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgbWVkaWFTb3VyY2Ug
PSBhZG9wdFJlZihuZXcgUmVhbHRpbWVWaWRlb1NvdXJjZU93cihzb3VyY2UsIGlkLCBtZWRpYVNv
dXJjZVR5cGUsIHNvdXJjZU5hbWUpKTsKLQotICAgICAgICBSZWFsdGltZU1lZGlhU291cmNlT3dy
TWFwOjppdGVyYXRvciBzb3VyY2VJdGVyYXRvciA9IG1fc291cmNlTWFwLmZpbmQoaWQpOwotICAg
ICAgICBpZiAoc291cmNlSXRlcmF0b3IgPT0gbV9zb3VyY2VNYXAuZW5kKCkpCi0gICAgICAgICAg
ICBtX3NvdXJjZU1hcC5hZGQoaWQsIG1lZGlhU291cmNlLmNvcHlSZWYoKSk7Ci0KLSAgICAgICAg
aWYgKG1lZGlhVHlwZSAmIE9XUl9NRURJQV9UWVBFX0FVRElPKQotICAgICAgICAgICAgYXVkaW9T
b3VyY2VzLmFwcGVuZChtZWRpYVNvdXJjZS5yZWxlYXNlTm9uTnVsbCgpKTsKLSAgICAgICAgZWxz
ZSBpZiAobWVkaWFUeXBlICYgT1dSX01FRElBX1RZUEVfVklERU8pCi0gICAgICAgICAgICB2aWRl
b1NvdXJjZXMuYXBwZW5kKG1lZGlhU291cmNlLnJlbGVhc2VOb25OdWxsKCkpOwotCi0gICAgfQot
Ci0gICAgaWYgKHZpZGVvU291cmNlcy5pc0VtcHR5KCkgJiYgYXVkaW9Tb3VyY2VzLmlzRW1wdHko
KSkKLSAgICAgICAgbV9jb21wbGV0aW9uSGFuZGxlcihudWxscHRyKTsKLSAgICBlbHNlCi0gICAg
ICAgIG1fY29tcGxldGlvbkhhbmRsZXIoTWVkaWFTdHJlYW1Qcml2YXRlOjpjcmVhdGUoYXVkaW9T
b3VyY2VzLCB2aWRlb1NvdXJjZXMpKTsKLQotfQotCi1SZWFsdGltZU1lZGlhU291cmNlKiBSZWFs
dGltZU1lZGlhU291cmNlQ2VudGVyT3dyOjpmaXJzdFNvdXJjZShSZWFsdGltZU1lZGlhU291cmNl
OjpUeXBlIHR5cGUpCi17Ci0gICAgZm9yIChhdXRvIGl0ZXIgPSBtX3NvdXJjZU1hcC5iZWdpbigp
OyBpdGVyICE9IG1fc291cmNlTWFwLmVuZCgpOyArK2l0ZXIpIHsKLSAgICAgICAgUmVmUHRyPFJl
YWx0aW1lTWVkaWFTb3VyY2U+IHNvdXJjZSA9IGl0ZXItPnZhbHVlOwotICAgICAgICBpZiAoc291
cmNlLT50eXBlKCkgPT0gdHlwZSkKLSAgICAgICAgICAgIHJldHVybiBzb3VyY2UuZ2V0KCk7Ci0g
ICAgfQotCi0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
LQotI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0pICYmIFVTRShPUEVOV0VCUlRDKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vb3BlbndlYnJ0Yy9S
ZWFsdGltZU1lZGlhU291cmNlQ2VudGVyT3dyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
ZWRpYXN0cmVhbS9vcGVud2VicnRjL1JlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJPd3IuaApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjgwZDkxODIxMzAzODJmNDMwMmYxMjc4ZGFiYmZh
MjQ4MmEzMzUzMC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9vcGVud2VicnRjL1JlYWx0aW1l
TWVkaWFTb3VyY2VDZW50ZXJPd3IuaAorKysgL2Rldi9udWxsCkBAIC0xLDEwMSArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDExIEVyaWNzc29uIEFCLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgSWdhbGlhIFMuTC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxNSBNZXRyb2xvZ2ljYWwuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqICAgIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK
LSAqICAgIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgRXJpY3Nzb24g
bm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0gKiAgICBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSAqICAgIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0g
KiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotI3ByYWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKSAmJiBVU0UoT1BFTldF
QlJUQykKLQotI2luY2x1ZGUgIkNhcHR1cmVEZXZpY2VNYW5hZ2VyLmgiCi0jaW5jbHVkZSAiUmVh
bHRpbWVNZWRpYVNvdXJjZUNlbnRlci5oIgotI2luY2x1ZGUgIlJlYWx0aW1lTWVkaWFTb3VyY2VP
d3IuaCIKLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQot
Y2xhc3MgQ2FwdHVyZURldmljZTsKLWNsYXNzIE1lZGlhU3RyZWFtUHJpdmF0ZTsKLWNsYXNzIFJl
YWx0aW1lTWVkaWFTb3VyY2U7Ci1jbGFzcyBNZWRpYVN0cmVhbVNvdXJjZXNRdWVyeUNsaWVudDsK
LWNsYXNzIFRyYWNrU291cmNlSW5mbzsKLQotY2xhc3MgUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRl
ck93ciBmaW5hbCA6IHB1YmxpYyBSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyIHsKLXB1YmxpYzoK
LSAgICBSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyT3dyKCk7Ci0gICAgflJlYWx0aW1lTWVkaWFT
b3VyY2VDZW50ZXJPd3IoKTsKLQotICAgIHZvaWQgdmFsaWRhdGVSZXF1ZXN0Q29uc3RyYWludHMo
VmFsaWRDb25zdHJhaW50c0hhbmRsZXImJiB2YWxpZEhhbmRsZXIsIEludmFsaWRDb25zdHJhaW50
c0hhbmRsZXImJiBpbnZhbGlkSGFuZGxlciwgY29uc3QgTWVkaWFDb25zdHJhaW50cyYgYXVkaW9D
b25zdHJhaW50cywgY29uc3QgTWVkaWFDb25zdHJhaW50cyYgdmlkZW9Db25zdHJhaW50cywgU3Ry
aW5nJiYpIGZpbmFsOwotCi0gICAgdm9pZCBjcmVhdGVNZWRpYVN0cmVhbShOZXdNZWRpYVN0cmVh
bUhhbmRsZXImJiwgY29uc3QgU3RyaW5nJiBhdWRpb0RldmljZUlELCBjb25zdCBTdHJpbmcmIHZp
ZGVvRGV2aWNlSUQsIGNvbnN0IE1lZGlhQ29uc3RyYWludHMqIHZpZGVvQ29uc3RyYWludHMsIGNv
bnN0IE1lZGlhQ29uc3RyYWludHMqIGF1ZGlvQ29uc3RyYWludHMpIGZpbmFsOwotCi0gICAgVmVj
dG9yPENhcHR1cmVEZXZpY2U+IGdldE1lZGlhU3RyZWFtRGV2aWNlcygpIGZpbmFsOwotCi0gICAg
dm9pZCBtZWRpYVNvdXJjZXNBdmFpbGFibGUoR0xpc3QqIHNvdXJjZXMpOwotCi1wcml2YXRlOgot
ICAgIFJlYWx0aW1lTWVkaWFTb3VyY2U6OkF1ZGlvQ2FwdHVyZUZhY3RvcnkmIGRlZmF1bHRBdWRp
b0ZhY3RvcnkoKSBmaW5hbCB7IHJldHVybiBtX2RlZmF1bHRBdWRpb0ZhY3Rvcnk7IH0KLSAgICBS
ZWFsdGltZU1lZGlhU291cmNlOjpWaWRlb0NhcHR1cmVGYWN0b3J5JiBkZWZhdWx0VmlkZW9GYWN0
b3J5KCkgZmluYWwgeyByZXR1cm4gbV9kZWZhdWx0VmlkZW9GYWN0b3J5OyB9Ci0gICAgQ2FwdHVy
ZURldmljZU1hbmFnZXImIGRlZmF1bHRBdWRpb0NhcHR1cmVEZXZpY2VNYW5hZ2VyKCkgZmluYWwg
eyByZXR1cm4gbV9kZWZhdWx0QXVkaW9DYXB0dXJlRGV2aWNlTWFuYWdlcjsgfQotICAgIENhcHR1
cmVEZXZpY2VNYW5hZ2VyJiBkZWZhdWx0VmlkZW9DYXB0dXJlRGV2aWNlTWFuYWdlcigpIGZpbmFs
IHsgcmV0dXJuIG1fZGVmYXVsdFZpZGVvQ2FwdHVyZURldmljZU1hbmFnZXI7IH0KLQotICAgIFJl
YWx0aW1lTWVkaWFTb3VyY2UqIGZpcnN0U291cmNlKFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGUp
OwotICAgIFJlYWx0aW1lTWVkaWFTb3VyY2VPd3JNYXAgbV9zb3VyY2VNYXA7Ci0gICAgVmFsaWRD
b25zdHJhaW50c0hhbmRsZXIgbV92YWxpZENvbnN0cmFpbnRzSGFuZGxlcjsKLSAgICBJbnZhbGlk
Q29uc3RyYWludHNIYW5kbGVyIG1faW52YWxpZENvbnN0cmFpbnRzSGFuZGxlcjsKLSAgICBOZXdN
ZWRpYVN0cmVhbUhhbmRsZXIgbV9jb21wbGV0aW9uSGFuZGxlcjsKLQotICAgIGNsYXNzIEF1ZGlv
Q2FwdHVyZUZhY3RvcnlPd3IgOiBwdWJsaWMgUmVhbHRpbWVNZWRpYVNvdXJjZTo6QXVkaW9DYXB0
dXJlRmFjdG9yeSB7Ci0gICAgcHJpdmF0ZToKLSAgICAgICAgQ2FwdHVyZVNvdXJjZU9yRXJyb3Ig
Y3JlYXRlQXVkaW9DYXB0dXJlU291cmNlKGNvbnN0IFN0cmluZyYsIGNvbnN0IE1lZGlhQ29uc3Ry
YWludHMqKSBmaW5hbCB7IHJldHVybiB7IH07IH0KLSAgICB9OwotCi0gICAgY2xhc3MgVmlkZW9D
YXB0dXJlRmFjdG9yeU93ciA6IHB1YmxpYyBSZWFsdGltZU1lZGlhU291cmNlOjpWaWRlb0NhcHR1
cmVGYWN0b3J5IHsKLSAgICBwcml2YXRlOgotICAgICAgICBDYXB0dXJlU291cmNlT3JFcnJvciBj
cmVhdGVWaWRlb0NhcHR1cmVTb3VyY2UoY29uc3QgU3RyaW5nJiwgY29uc3QgTWVkaWFDb25zdHJh
aW50cyopIGZpbmFsIHsgcmV0dXJuIHsgfTsgfQotICAgIH07Ci0KLSAgICBjbGFzcyBDYXB0dXJl
RGV2aWNlTWFuYWdlck93ciA6IHB1YmxpYyBDYXB0dXJlRGV2aWNlTWFuYWdlciB7Ci0gICAgcHJp
dmF0ZToKLSAgICAgICAgVmVjdG9yPENhcHR1cmVEZXZpY2U+JiBjYXB0dXJlRGV2aWNlcygpIGZp
bmFsIHsgcmV0dXJuIG1fZGV2aWNlczsgfQotCi0gICAgICAgIFZlY3RvcjxDYXB0dXJlRGV2aWNl
PiBtX2RldmljZXM7Ci0gICAgfTsKLQotICAgIEF1ZGlvQ2FwdHVyZUZhY3RvcnlPd3IgbV9kZWZh
dWx0QXVkaW9GYWN0b3J5OwotICAgIFZpZGVvQ2FwdHVyZUZhY3RvcnlPd3IgbV9kZWZhdWx0Vmlk
ZW9GYWN0b3J5OwotICAgIENhcHR1cmVEZXZpY2VNYW5hZ2VyT3dyIG1fZGVmYXVsdEF1ZGlvQ2Fw
dHVyZURldmljZU1hbmFnZXI7Ci0gICAgQ2FwdHVyZURldmljZU1hbmFnZXJPd3IgbV9kZWZhdWx0
VmlkZW9DYXB0dXJlRGV2aWNlTWFuYWdlcjsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
LQotI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0pICYmIFVTRShPUEVOV0VCUlRDKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vb3BlbndlYnJ0Yy9S
ZWFsdGltZU1lZGlhU291cmNlT3dyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlh
c3RyZWFtL29wZW53ZWJydGMvUmVhbHRpbWVNZWRpYVNvdXJjZU93ci5jcHAKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IGVlNzQ5OWQzODAwNjZmMTRhYjZjOWNiMDA4N2JlNGI2ZGQwODc4
NWYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vb3BlbndlYnJ0Yy9SZWFsdGltZU1lZGlhU291
cmNlT3dyLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDYwICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTYgSWdhbGlhIFMuTAotICoKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5v
ciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
Ci0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogSE9MREVS
IE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAq
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5j
bHVkZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKSAmJiBVU0UoT1BFTldF
QlJUQykKLSNpbmNsdWRlICJSZWFsdGltZU1lZGlhU291cmNlT3dyLmgiCi0KLW5hbWVzcGFjZSBX
ZWJDb3JlIHsKLQotY29uc3QgUmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzJiBSZWFsdGltZU1l
ZGlhU291cmNlT3dyOjpzZXR0aW5ncygpIGNvbnN0Ci17Ci0gICAgY29uc3RfY2FzdDxSZWFsdGlt
ZU1lZGlhU291cmNlT3dyJj4oKnRoaXMpLmluaXRpYWxpemVTZXR0aW5ncygpOwotICAgIHJldHVy
biBtX2N1cnJlbnRTZXR0aW5nczsKLX0KLQotUmVhbHRpbWVNZWRpYVNvdXJjZVN1cHBvcnRlZENv
bnN0cmFpbnRzJiBSZWFsdGltZU1lZGlhU291cmNlT3dyOjpzdXBwb3J0ZWRDb25zdHJhaW50cygp
Ci17Ci0gICAgaWYgKG1fc3VwcG9ydGVkQ29uc3RyYWludHMuc3VwcG9ydHNEZXZpY2VJZCgpKQot
ICAgICAgICByZXR1cm4gbV9zdXBwb3J0ZWRDb25zdHJhaW50czsKLQotICAgIG1fc3VwcG9ydGVk
Q29uc3RyYWludHMuc2V0U3VwcG9ydHNEZXZpY2VJZCh0cnVlKTsKLSAgICBpbml0aWFsaXplU3Vw
cG9ydGVkQ29uc3RyYWludHMobV9zdXBwb3J0ZWRDb25zdHJhaW50cyk7Ci0KLSAgICByZXR1cm4g
bV9zdXBwb3J0ZWRDb25zdHJhaW50czsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0j
ZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVBTSkgJiYgVVNFKE9QRU5XRUJSVEMpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9vcGVud2VicnRjL1JlYWx0
aW1lTWVkaWFTb3VyY2VPd3IuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFt
L29wZW53ZWJydGMvUmVhbHRpbWVNZWRpYVNvdXJjZU93ci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCA3Y2ZiZjc4ZjI1OGQ5MDhhNTQ0Yjk5YjFlYzk4Mjg0YjUzM2U0YTg0Li4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21lZGlhc3RyZWFtL29wZW53ZWJydGMvUmVhbHRpbWVNZWRpYVNvdXJjZU93ci5o
CisrKyAvZGV2L251bGwKQEAgLTEsOTkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
NSBJZ2FsaWEgUy5MCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgTWV0cm9sb2dpY2FsCi0gKgotICog
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUK
LSAqIG1ldDoKLSAqCi0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICoKLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIDMuIE5laXRoZXIgdGhlIG5hbWUg
b2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
LSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCi0gKiBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0g
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgUmVhbHRpbWVNZWRpYVNvdXJjZU93cl9oCi0j
ZGVmaW5lIFJlYWx0aW1lTWVkaWFTb3VyY2VPd3JfaAotCi0jaWYgRU5BQkxFKE1FRElBX1NUUkVB
TSkgJiYgVVNFKE9QRU5XRUJSVEMpCi0KLSNpbmNsdWRlICJHUmVmUHRyR1N0cmVhbWVyLmgiCi0j
aW5jbHVkZSAiUmVhbHRpbWVNZWRpYVNvdXJjZS5oIgotI2luY2x1ZGUgPG93ci9vd3JfbWVkaWFf
c291cmNlLmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRy
Lmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotY2xhc3MgUmVhbHRpbWVNZWRpYVNvdXJjZUNhcGFiaWxpdGllczsKLQotY2xhc3MgUmVh
bHRpbWVNZWRpYVNvdXJjZU93ciA6IHB1YmxpYyBSZWFsdGltZU1lZGlhU291cmNlIHsKLXB1Ymxp
YzoKLVJlYWx0aW1lTWVkaWFTb3VyY2VPd3IoT3dyTWVkaWFTb3VyY2UqIG1lZGlhU291cmNlLCBj
b25zdCBTdHJpbmcmIGlkLCBSZWFsdGltZU1lZGlhU291cmNlOjpUeXBlIHR5cGUsIGNvbnN0IFN0
cmluZyYgbmFtZSkKLSAgICA6IFJlYWx0aW1lTWVkaWFTb3VyY2UoaWQsIHR5cGUsIG5hbWUpCi0g
ICAgLCBtX21lZGlhU291cmNlKG1lZGlhU291cmNlKQotICAgIHsKLSAgICAgICAgaWYgKCFtZWRp
YVNvdXJjZSkKLSAgICAgICAgICAgIG5vdGlmeU11dGVkQ2hhbmdlKHRydWUpOwotICAgIH0KLQot
UmVhbHRpbWVNZWRpYVNvdXJjZU93cihjb25zdCBTdHJpbmcmIGlkLCBSZWFsdGltZU1lZGlhU291
cmNlOjpUeXBlIHR5cGUsIGNvbnN0IFN0cmluZyYgbmFtZSkKLSAgICA6IFJlYWx0aW1lTWVkaWFT
b3VyY2UoaWQsIHR5cGUsIG5hbWUpCi0gICAgLCBtX21lZGlhU291cmNlKG51bGxwdHIpCi0gICAg
ewotICAgIH0KLQotICAgIHZpcnR1YWwgflJlYWx0aW1lTWVkaWFTb3VyY2VPd3IoKSB7IH0KLQot
ICAgIHZvaWQgc3dhcE91dFNoYWxsb3dTb3VyY2UoT3dyTWVkaWFTb3VyY2UmIHJlYWxTb3VyY2Up
Ci0gICAgewotICAgICAgICBtX21lZGlhU291cmNlID0gJnJlYWxTb3VyY2U7Ci0gICAgICAgIHNl
dE11dGVkKGZhbHNlKTsKLSAgICB9Ci0KLSAgICBjb25zdCBSZWFsdGltZU1lZGlhU291cmNlQ2Fw
YWJpbGl0aWVzJiBjYXBhYmlsaXRpZXMoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX2NhcGFi
aWxpdGllczsgfQotICAgIGNvbnN0IFJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5ncyYgc2V0dGlu
Z3MoKSBjb25zdCBvdmVycmlkZTsKLQotICAgIE93ck1lZGlhU291cmNlKiBtZWRpYVNvdXJjZSgp
IGNvbnN0IHsgcmV0dXJuIG1fbWVkaWFTb3VyY2U7IH0KLQotcHJvdGVjdGVkOgotICAgIHZpcnR1
YWwgdm9pZCBpbml0aWFsaXplU2V0dGluZ3MoKSB7IH07Ci0gICAgdmlydHVhbCB2b2lkIGluaXRp
YWxpemVTdXBwb3J0ZWRDb25zdHJhaW50cyhSZWFsdGltZU1lZGlhU291cmNlU3VwcG9ydGVkQ29u
c3RyYWludHMmKSB7IH07Ci0gICAgUmVhbHRpbWVNZWRpYVNvdXJjZVN1cHBvcnRlZENvbnN0cmFp
bnRzJiBzdXBwb3J0ZWRDb25zdHJhaW50cygpOwotCi0gICAgUmVhbHRpbWVNZWRpYVNvdXJjZVNl
dHRpbmdzIG1fY3VycmVudFNldHRpbmdzOwotCi1wcml2YXRlOgotICAgIFJlYWx0aW1lTWVkaWFT
b3VyY2VTdXBwb3J0ZWRDb25zdHJhaW50cyBtX3N1cHBvcnRlZENvbnN0cmFpbnRzOwotICAgIFJl
YWx0aW1lTWVkaWFTb3VyY2VDYXBhYmlsaXRpZXMgbV9jYXBhYmlsaXRpZXM7Ci0gICAgT3dyTWVk
aWFTb3VyY2UqIG1fbWVkaWFTb3VyY2U7Ci19OwotCi10eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBS
ZWZQdHI8UmVhbHRpbWVNZWRpYVNvdXJjZU93cj4+IFJlYWx0aW1lTWVkaWFTb3VyY2VPd3JNYXA7
Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJF
QU0pICYmIFVTRShPUEVOV0VCUlRDKQotCi0jZW5kaWYgLy8gUmVhbHRpbWVNZWRpYVNvdXJjZU93
cl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9vcGVu
d2VicnRjL1JlYWx0aW1lVmlkZW9Tb3VyY2VPd3IuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21lZGlhc3RyZWFtL29wZW53ZWJydGMvUmVhbHRpbWVWaWRlb1NvdXJjZU93ci5oCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MThlZjg0YTcxYTU3MzQ3ZTg1ZDM1MjgzNjllMjc5Yzdh
NjZmNDU0Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL29wZW53ZWJydGMvUmVhbHRpbWVWaWRl
b1NvdXJjZU93ci5oCisrKyAvZGV2L251bGwKQEAgLTEsODIgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxNSwyMDE2IElnYWxpYSBTLkwKLSAqIENvcHlyaWdodCAoQykgMjAxNSBNZXRy
b2xvZ2ljYWwKLSAqCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogMy4g
TmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlIG5hbWVzIG9m
IGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
LSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIEhPTERFUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNp
ZiBFTkFCTEUoTUVESUFfU1RSRUFNKSAmJiBVU0UoT1BFTldFQlJUQykKLQotI2luY2x1ZGUgIlJl
YWx0aW1lTWVkaWFTb3VyY2VPd3IuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBS
ZWFsdGltZVZpZGVvU291cmNlT3dyIDogcHVibGljIFJlYWx0aW1lTWVkaWFTb3VyY2VPd3Igewot
cHVibGljOgotUmVhbHRpbWVWaWRlb1NvdXJjZU93cihPd3JNZWRpYVNvdXJjZSogbWVkaWFTb3Vy
Y2UsIGNvbnN0IFN0cmluZyYgaWQsIFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGUgdHlwZSwgY29u
c3QgU3RyaW5nJiBuYW1lKQotICAgIDogUmVhbHRpbWVNZWRpYVNvdXJjZU93cihtZWRpYVNvdXJj
ZSwgaWQsIHR5cGUsIG5hbWUpCi0gICAgewotICAgIH0KLQotUmVhbHRpbWVWaWRlb1NvdXJjZU93
cihjb25zdCBTdHJpbmcmIGlkLCBSZWFsdGltZU1lZGlhU291cmNlOjpUeXBlIHR5cGUsIGNvbnN0
IFN0cmluZyYgbmFtZSkKLSAgICA6IFJlYWx0aW1lTWVkaWFTb3VyY2VPd3IoaWQsIHR5cGUsIG5h
bWUpCi0gICAgewotICAgIH0KLQotICAgIHZpcnR1YWwgflJlYWx0aW1lVmlkZW9Tb3VyY2VPd3Io
KSB7IH0KLQotICAgIGJvb2wgYXBwbHlTaXplKGNvbnN0IEludFNpemUmKSBmaW5hbCB7IHJldHVy
biB0cnVlOyB9Ci0KLXByb3RlY3RlZDoKLSAgICB2b2lkIGluaXRpYWxpemVTZXR0aW5ncygpIGZp
bmFsIHsKLSAgICAgICAgaWYgKG1fY3VycmVudFNldHRpbmdzLmRldmljZUlkKCkuaXNFbXB0eSgp
KQotICAgICAgICAgICAgbV9jdXJyZW50U2V0dGluZ3Muc2V0U3VwcG9ydGVkQ29uc3RyYWludHMo
c3VwcG9ydGVkQ29uc3RyYWludHMoKSk7Ci0KLSAgICAgICAgbV9jdXJyZW50U2V0dGluZ3Muc2V0
RGV2aWNlSWQoaWQoKSk7Ci0KLSAgICAgICAgbV9jdXJyZW50U2V0dGluZ3Muc2V0RnJhbWVSYXRl
KGZyYW1lUmF0ZSgpKTsKLSAgICAgICAgbV9jdXJyZW50U2V0dGluZ3Muc2V0V2lkdGgoc2l6ZSgp
LndpZHRoKCkpOwotICAgICAgICBtX2N1cnJlbnRTZXR0aW5ncy5zZXRIZWlnaHQoc2l6ZSgpLmhl
aWdodCgpKTsKLSAgICB9Ci0KLSAgICB2b2lkIGluaXRpYWxpemVTdXBwb3J0ZWRDb25zdHJhaW50
cyhSZWFsdGltZU1lZGlhU291cmNlU3VwcG9ydGVkQ29uc3RyYWludHMmIHN1cHBvcnRlZENvbnN0
cmFpbnRzKSBmaW5hbCB7Ci0gICAgICAgIHN1cHBvcnRlZENvbnN0cmFpbnRzLnNldFN1cHBvcnRz
RmFjaW5nTW9kZShSZWFsdGltZU1lZGlhU291cmNlU2V0dGluZ3M6OlVua25vd24pOwotICAgICAg
ICBzdXBwb3J0ZWRDb25zdHJhaW50cy5zZXRTdXBwb3J0c1dpZHRoKHRydWUpOwotICAgICAgICBz
dXBwb3J0ZWRDb25zdHJhaW50cy5zZXRTdXBwb3J0c0hlaWdodCh0cnVlKTsKLSAgICAgICAgc3Vw
cG9ydGVkQ29uc3RyYWludHMuc2V0U3VwcG9ydHNBc3BlY3RSYXRpbyh0cnVlKTsKLSAgICAgICAg
c3VwcG9ydGVkQ29uc3RyYWludHMuc2V0U3VwcG9ydHNGcmFtZVJhdGUodHJ1ZSk7Ci0gICAgfQot
fTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NU
UkVBTSkgJiYgVVNFKE9QRU5XRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tb2NrL01vY2tNZWRpYUVuZHBvaW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21vY2svTW9ja01lZGlhRW5kcG9pbnQuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwZTliNDFlNWMxMTk1YzZlM2VjMTM3MDc1ZWE0ZmZhNjY4NmM3YWFmLi4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21vY2svTW9ja01lZGlhRW5kcG9pbnQuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMzQ2ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgRXJpY3Nzb24gQUIuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiAgICBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlCi0gKiAgICBkaXN0cmlidXRpb24uCi0gKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIEVyaWNz
c29uIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICogICAgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0gKiAgICBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQg
Q09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdI
VAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShXRUJfUlRDKQotI2luY2x1
ZGUgIk1vY2tNZWRpYUVuZHBvaW50LmgiCi0KLSNpbmNsdWRlICJNZWRpYUVuZHBvaW50U2Vzc2lv
bkNvbmZpZ3VyYXRpb24uaCIKLSNpbmNsdWRlICJNZWRpYVBheWxvYWQuaCIKLSNpbmNsdWRlICJN
b2NrUmVhbHRpbWVBdWRpb1NvdXJjZS5oIgotI2luY2x1ZGUgIk1vY2tSZWFsdGltZVZpZGVvU291
cmNlLmgiCi0jaW5jbHVkZSAiUlRDRGF0YUNoYW5uZWxIYW5kbGVyTW9jay5oIgotI2luY2x1ZGUg
IlJlYWx0aW1lTWVkaWFTb3VyY2UuaCIKLSNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgotCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0YXRpYyBjb25zdCBjaGFyKiBmaW5nZXJwcmludCA9ICI4
Qjo4NzowOTo4QTo1RDpDMjpGMzozMzpFRjpDNTpCMTpGNjo4NDozQTozRDpENjpBMzpFMjo5Qzox
Nzo0QzpFNzo0NjozQjoxQjpDRTo4NDo5ODpERDo4RTpBRjo3QiI7Ci1zdGF0aWMgY29uc3QgY2hh
ciogZmluZ2VycHJpbnRGdW5jdGlvbiA9ICJzaGEtMjU2IjsKLQotc3RkOjp1bmlxdWVfcHRyPE1l
ZGlhRW5kcG9pbnQ+IE1vY2tNZWRpYUVuZHBvaW50OjpjcmVhdGUoTWVkaWFFbmRwb2ludENsaWVu
dCYgY2xpZW50KQotewotICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8TWVkaWFFbmRwb2ludD4o
bmV3IE1vY2tNZWRpYUVuZHBvaW50KGNsaWVudCkpOwotfQotCi1Nb2NrTWVkaWFFbmRwb2ludDo6
TW9ja01lZGlhRW5kcG9pbnQoTWVkaWFFbmRwb2ludENsaWVudCYgY2xpZW50KQotICAgIDogbV9j
bGllbnQoY2xpZW50KQotICAgICwgbV9pY2VDYW5kaWRhdGVUaW1lcigqdGhpcywgJk1vY2tNZWRp
YUVuZHBvaW50OjppY2VDYW5kaWRhdGVUaW1lckZpcmVkKQotICAgICwgbV9pY2VUcmFuc3BvcnRU
aW1lcigqdGhpcywgJk1vY2tNZWRpYUVuZHBvaW50OjppY2VUcmFuc3BvcnRUaW1lckZpcmVkKQot
ICAgICwgbV91bm11dGVUaW1lcigqdGhpcywgJk1vY2tNZWRpYUVuZHBvaW50Ojp1bm11dGVUaW1l
ckZpcmVkKQotewotfQotCi1Nb2NrTWVkaWFFbmRwb2ludDo6fk1vY2tNZWRpYUVuZHBvaW50KCkK
LXsKLSAgICBzdG9wKCk7Ci19Ci0KLXN0ZDo6dW5pcXVlX3B0cjxSVENEYXRhQ2hhbm5lbEhhbmRs
ZXI+IE1vY2tNZWRpYUVuZHBvaW50OjpjcmVhdGVEYXRhQ2hhbm5lbEhhbmRsZXIoY29uc3QgU3Ry
aW5nJiBsYWJlbCwgY29uc3QgUlRDRGF0YUNoYW5uZWxJbml0JiBvcHRpb25zKQotewotICAgIHJl
dHVybiBzdGQ6Om1ha2VfdW5pcXVlPFJUQ0RhdGFDaGFubmVsSGFuZGxlck1vY2s+KGxhYmVsLCBv
cHRpb25zKTsKLX0KLQotdm9pZCBNb2NrTWVkaWFFbmRwb2ludDo6Z2VuZXJhdGVEdGxzSW5mbygp
Ci17Ci0gICAgYXV0byB3ZWFrVGhpcyA9IG1fd2Vha1B0ckZhY3RvcnkuY3JlYXRlV2Vha1B0cigq
dGhpcyk7Ci0KLSAgICBjYWxsT25NYWluVGhyZWFkKFt3ZWFrVGhpc10gewotICAgICAgICBpZiAo
d2Vha1RoaXMpCi0gICAgICAgICAgICB3ZWFrVGhpcy0+bV9jbGllbnQuZ290RHRsc0ZpbmdlcnBy
aW50KGZpbmdlcnByaW50LCBmaW5nZXJwcmludEZ1bmN0aW9uKTsKLSAgICB9KTsKLX0KLQotTWVk
aWFQYXlsb2FkVmVjdG9yIE1vY2tNZWRpYUVuZHBvaW50OjpnZXREZWZhdWx0QXVkaW9QYXlsb2Fk
cygpCi17Ci0gICAgTWVkaWFQYXlsb2FkVmVjdG9yIHBheWxvYWRzOwotCi0gICAgTWVkaWFQYXls
b2FkIHBheWxvYWQxOwotICAgIHBheWxvYWQxLnR5cGUgPSAxMTE7Ci0gICAgcGF5bG9hZDEuZW5j
b2RpbmdOYW1lID0gIk9QVVMiOwotICAgIHBheWxvYWQxLmNsb2NrUmF0ZSA9IDQ4MDAwOwotICAg
IHBheWxvYWQxLmNoYW5uZWxzID0gMjsKLSAgICBwYXlsb2Fkcy5hcHBlbmQoV1RGTW92ZShwYXls
b2FkMSkpOwotCi0gICAgTWVkaWFQYXlsb2FkIHBheWxvYWQyOwotICAgIHBheWxvYWQyLnR5cGUg
PSA4OwotICAgIHBheWxvYWQyLmVuY29kaW5nTmFtZSA9ICJQQ01BIjsKLSAgICBwYXlsb2FkMi5j
bG9ja1JhdGUgPSA4MDAwOwotICAgIHBheWxvYWQyLmNoYW5uZWxzID0gMTsKLSAgICBwYXlsb2Fk
cy5hcHBlbmQoV1RGTW92ZShwYXlsb2FkMikpOwotCi0gICAgTWVkaWFQYXlsb2FkIHBheWxvYWQz
OwotICAgIHBheWxvYWQzLnR5cGUgPSAwOwotICAgIHBheWxvYWQzLmVuY29kaW5nTmFtZSA9ICJQ
Q01VIjsKLSAgICBwYXlsb2FkMy5jbG9ja1JhdGUgPSA4MDAwOwotICAgIHBheWxvYWQzLmNoYW5u
ZWxzID0gMTsKLSAgICBwYXlsb2Fkcy5hcHBlbmQoV1RGTW92ZShwYXlsb2FkMykpOwotCi0gICAg
cmV0dXJuIHBheWxvYWRzOwotfQotCi1NZWRpYVBheWxvYWRWZWN0b3IgTW9ja01lZGlhRW5kcG9p
bnQ6OmdldERlZmF1bHRWaWRlb1BheWxvYWRzKCkKLXsKLSAgICBNZWRpYVBheWxvYWRWZWN0b3Ig
cGF5bG9hZHM7Ci0KLSAgICBNZWRpYVBheWxvYWQgcGF5bG9hZDE7Ci0gICAgcGF5bG9hZDEudHlw
ZSA9IDEwMzsKLSAgICBwYXlsb2FkMS5lbmNvZGluZ05hbWUgPSAiSDI2NCI7Ci0gICAgcGF5bG9h
ZDEuY2xvY2tSYXRlID0gOTAwMDA7Ci0gICAgcGF5bG9hZDEuY2NtZmlyID0gdHJ1ZTsKLSAgICBw
YXlsb2FkMS5uYWNrcGxpID0gdHJ1ZTsKLSAgICBwYXlsb2FkMS5hZGRQYXJhbWV0ZXIoInBhY2tl
dGl6YXRpb25Nb2RlIiwgMSk7Ci0gICAgcGF5bG9hZHMuYXBwZW5kKFdURk1vdmUocGF5bG9hZDEp
KTsKLQotICAgIE1lZGlhUGF5bG9hZCBwYXlsb2FkMjsKLSAgICBwYXlsb2FkMi50eXBlID0gMTAw
OwotICAgIHBheWxvYWQyLmVuY29kaW5nTmFtZSA9ICJWUDgiOwotICAgIHBheWxvYWQyLmNsb2Nr
UmF0ZSA9IDkwMDAwOwotICAgIHBheWxvYWQyLmNjbWZpciA9IHRydWU7Ci0gICAgcGF5bG9hZDIu
bmFja3BsaSA9IHRydWU7Ci0gICAgcGF5bG9hZDIubmFjayA9IHRydWU7Ci0gICAgcGF5bG9hZHMu
YXBwZW5kKFdURk1vdmUocGF5bG9hZDIpKTsKLQotICAgIE1lZGlhUGF5bG9hZCBwYXlsb2FkMzsK
LSAgICBwYXlsb2FkMy50eXBlID0gMTIwOwotICAgIHBheWxvYWQzLmVuY29kaW5nTmFtZSA9ICJS
VFgiOwotICAgIHBheWxvYWQzLmNsb2NrUmF0ZSA9IDkwMDAwOwotICAgIHBheWxvYWQzLmFkZFBh
cmFtZXRlcigiYXB0IiwgMTAwKTsKLSAgICBwYXlsb2FkMy5hZGRQYXJhbWV0ZXIoInJ0eFRpbWUi
LCAyMDApOwotICAgIHBheWxvYWRzLmFwcGVuZChXVEZNb3ZlKHBheWxvYWQzKSk7Ci0KLSAgICBy
ZXR1cm4gcGF5bG9hZHM7Ci19Ci0KLU1lZGlhUGF5bG9hZFZlY3RvciBNb2NrTWVkaWFFbmRwb2lu
dDo6ZmlsdGVyUGF5bG9hZHMoY29uc3QgTWVkaWFQYXlsb2FkVmVjdG9yJiByZW1vdGVQYXlsb2Fk
cywgY29uc3QgTWVkaWFQYXlsb2FkVmVjdG9yJiBkZWZhdWx0UGF5bG9hZHMpCi17Ci0gICAgTWVk
aWFQYXlsb2FkVmVjdG9yIGZpbHRlcmVkUGF5bG9hZHM7Ci0KLSAgICBmb3IgKGF1dG8mIHJlbW90
ZVBheWxvYWQgOiByZW1vdGVQYXlsb2FkcykgewotICAgICAgICBjb25zdCBNZWRpYVBheWxvYWQq
IGRlZmF1bHRQYXlsb2FkID0gbnVsbHB0cjsKLSAgICAgICAgZm9yIChhdXRvJiBwYXlsb2FkIDog
ZGVmYXVsdFBheWxvYWRzKSB7Ci0gICAgICAgICAgICBpZiAocGF5bG9hZC5lbmNvZGluZ05hbWUg
PT0gcmVtb3RlUGF5bG9hZC5lbmNvZGluZ05hbWUuY29udmVydFRvQVNDSUlVcHBlcmNhc2UoKSkg
ewotICAgICAgICAgICAgICAgIGRlZmF1bHRQYXlsb2FkID0gJnBheWxvYWQ7Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCFkZWZh
dWx0UGF5bG9hZCkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGlmIChkZWZhdWx0
UGF5bG9hZC0+cGFyYW1ldGVycy5jb250YWlucygicGFja2V0aXphdGlvbk1vZGUiKSAmJiByZW1v
dGVQYXlsb2FkLnBhcmFtZXRlcnMuY29udGFpbnMoInBhY2tldGl6YXRpb25Nb2RlIikKLSAgICAg
ICAgICAgICYmIChkZWZhdWx0UGF5bG9hZC0+cGFyYW1ldGVycy5nZXQoInBhY2tldGl6YXRpb25N
b2RlIikgIT0gZGVmYXVsdFBheWxvYWQtPnBhcmFtZXRlcnMuZ2V0KCJwYWNrZXRpemF0aW9uTW9k
ZSIpKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGZpbHRlcmVkUGF5bG9hZHMu
YXBwZW5kKHJlbW90ZVBheWxvYWQpOwotICAgIH0KLQotICAgIHJldHVybiBmaWx0ZXJlZFBheWxv
YWRzOwotfQotCi1NZWRpYUVuZHBvaW50OjpVcGRhdGVSZXN1bHQgTW9ja01lZGlhRW5kcG9pbnQ6
OnVwZGF0ZVJlY2VpdmVDb25maWd1cmF0aW9uKE1lZGlhRW5kcG9pbnRTZXNzaW9uQ29uZmlndXJh
dGlvbiogY29uZmlndXJhdGlvbiwgYm9vbCBpc0luaXRpYXRvcikKLXsKLSAgICBVTlVTRURfUEFS
QU0oaXNJbml0aWF0b3IpOwotCi0gICAgdXBkYXRlQ29uZmlndXJhdGlvbk1pZHMoKmNvbmZpZ3Vy
YXRpb24pOwotICAgIHJldHVybiBVcGRhdGVSZXN1bHQ6OlN1Y2Nlc3M7Ci19Ci0KLU1lZGlhRW5k
cG9pbnQ6OlVwZGF0ZVJlc3VsdCBNb2NrTWVkaWFFbmRwb2ludDo6dXBkYXRlU2VuZENvbmZpZ3Vy
YXRpb24oTWVkaWFFbmRwb2ludFNlc3Npb25Db25maWd1cmF0aW9uKiBjb25maWd1cmF0aW9uLCBj
b25zdCBSZWFsdGltZU1lZGlhU291cmNlTWFwJiBzZW5kU291cmNlTWFwLCBib29sIGlzSW5pdGlh
dG9yKQotewotICAgIFVOVVNFRF9QQVJBTShzZW5kU291cmNlTWFwKTsKLSAgICBVTlVTRURfUEFS
QU0oaXNJbml0aWF0b3IpOwotCi0gICAgdXBkYXRlQ29uZmlndXJhdGlvbk1pZHMoKmNvbmZpZ3Vy
YXRpb24pOwotICAgIHJldHVybiBVcGRhdGVSZXN1bHQ6OlN1Y2Nlc3M7Ci19Ci0KLXZvaWQgTW9j
a01lZGlhRW5kcG9pbnQ6OmFkZFJlbW90ZUNhbmRpZGF0ZShjb25zdCBJY2VDYW5kaWRhdGUmIGNh
bmRpZGF0ZSwgY29uc3QgU3RyaW5nJiBtaWQsIGNvbnN0IFN0cmluZyYgdWZyYWcsIGNvbnN0IFN0
cmluZyYgcGFzc3dvcmQpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGNhbmRpZGF0ZSk7Ci0gICAgVU5V
U0VEX1BBUkFNKG1pZCk7Ci0gICAgVU5VU0VEX1BBUkFNKHVmcmFnKTsKLSAgICBVTlVTRURfUEFS
QU0ocGFzc3dvcmQpOwotfQotCi1SZWY8UmVhbHRpbWVNZWRpYVNvdXJjZT4gTW9ja01lZGlhRW5k
cG9pbnQ6OmNyZWF0ZU11dGVkUmVtb3RlU291cmNlKGNvbnN0IFN0cmluZyYgbWlkLCBSZWFsdGlt
ZU1lZGlhU291cmNlOjpUeXBlIHR5cGUpCi17Ci0gICAgUmVmUHRyPFJlYWx0aW1lTWVkaWFTb3Vy
Y2U+IHNvdXJjZTsKLQotICAgIHN3aXRjaCAodHlwZSkgewotICAgIGNhc2UgUmVhbHRpbWVNZWRp
YVNvdXJjZTo6VHlwZTo6QXVkaW86Ci0gICAgICAgIHNvdXJjZSA9IE1vY2tSZWFsdGltZUF1ZGlv
U291cmNlOjpjcmVhdGVNdXRlZCgicmVtb3RlIGF1ZGlvIik7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgUmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlwZTo6VmlkZW86Ci0gICAgICAgIHNvdXJjZSA9
IE1vY2tSZWFsdGltZVZpZGVvU291cmNlOjpjcmVhdGVNdXRlZCgicmVtb3RlIHZpZGVvIik7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgUmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlwZTo6Tm9uZToK
LSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQotCi0gICAgbV9tdXRlZFJlbW90
ZVNvdXJjZXMuc2V0KG1pZCwgc291cmNlKTsKLSAgICByZXR1cm4gc291cmNlLnJlbGVhc2VOb25O
dWxsKCk7Ci19Ci0KLXZvaWQgTW9ja01lZGlhRW5kcG9pbnQ6OnJlcGxhY2VTZW5kU291cmNlKFJl
YWx0aW1lTWVkaWFTb3VyY2UmIG5ld1NvdXJjZSwgY29uc3QgU3RyaW5nJiBtaWQpCi17Ci0gICAg
VU5VU0VEX1BBUkFNKG5ld1NvdXJjZSk7Ci0gICAgVU5VU0VEX1BBUkFNKG1pZCk7Ci19Ci0KLXZv
aWQgTW9ja01lZGlhRW5kcG9pbnQ6OnJlcGxhY2VNdXRlZFJlbW90ZVNvdXJjZU1pZChjb25zdCBT
dHJpbmcmIG9sZE1pZCwgY29uc3QgU3RyaW5nJiBuZXdNaWQpCi17Ci0gICAgUmVmUHRyPFJlYWx0
aW1lTWVkaWFTb3VyY2U+IHJlbW90ZVNvdXJjZSA9IG1fbXV0ZWRSZW1vdGVTb3VyY2VzLnRha2Uo
b2xkTWlkKTsKLSAgICBtX211dGVkUmVtb3RlU291cmNlcy5zZXQobmV3TWlkLCBXVEZNb3ZlKHJl
bW90ZVNvdXJjZSkpOwotfQotCi12b2lkIE1vY2tNZWRpYUVuZHBvaW50OjpzdG9wKCkKLXsKLX0K
LQotdm9pZCBNb2NrTWVkaWFFbmRwb2ludDo6ZW11bGF0ZVBsYXRmb3JtRXZlbnQoY29uc3QgU3Ry
aW5nJiBhY3Rpb24pCi17Ci0gICAgaWYgKGFjdGlvbiA9PSAiZGlzcGF0Y2gtZmFrZS1pY2UtY2Fu
ZGlkYXRlcyIpCi0gICAgICAgIGRpc3BhdGNoRmFrZUljZUNhbmRpZGF0ZXMoKTsKLSAgICBlbHNl
IGlmIChhY3Rpb24gPT0gInN0ZXAtaWNlLXRyYW5zcG9ydC1zdGF0ZXMiKQotICAgICAgICBzdGVw
SWNlVHJhbnNwb3J0U3RhdGVzKCk7Ci0gICAgZWxzZSBpZiAoYWN0aW9uID09ICJ1bm11dGUtcmVt
b3RlLXNvdXJjZXMtYnktbWlkIikKLSAgICAgICAgdW5tdXRlUmVtb3RlU291cmNlc0J5TWlkKCk7
Ci19Ci0KLXZvaWQgTW9ja01lZGlhRW5kcG9pbnQ6OnVwZGF0ZUNvbmZpZ3VyYXRpb25NaWRzKGNv
bnN0IE1lZGlhRW5kcG9pbnRTZXNzaW9uQ29uZmlndXJhdGlvbiYgY29uZmlndXJhdGlvbikKLXsK
LSAgICBWZWN0b3I8U3RyaW5nPiBtaWRzOwotICAgIGZvciAoYXV0byYgbWVkaWFEZXNjcmlwdGlv
biA6IGNvbmZpZ3VyYXRpb24ubWVkaWFEZXNjcmlwdGlvbnMoKSkKLSAgICAgICAgbWlkcy5hcHBl
bmQobWVkaWFEZXNjcmlwdGlvbi5taWQpOwotICAgIG1fbWlkcy5zd2FwKG1pZHMpOwotfQotCi12
b2lkIE1vY2tNZWRpYUVuZHBvaW50OjpkaXNwYXRjaEZha2VJY2VDYW5kaWRhdGVzKCkKLXsKLSAg
ICBtX2Zha2VJY2VDYW5kaWRhdGVzLmFwcGVuZCh7ICJob3N0IiwgIjEiLCAxLCAiVURQIiwgMjAx
MzI2NjQzMSwgIjE5Mi4xNjguMC4xMDAiLCAzODgzOCwgeyB9LCB7IH0sIDAgfSk7Ci0gICAgbV9m
YWtlSWNlQ2FuZGlkYXRlcy5hcHBlbmQoeyAiaG9zdCIsICIyIiwgMSwgIlRDUCIsIDEwMTkyMTYz
ODMsICIxOTIuMTY4LjAuMTAwIiwgOSwgImFjdGl2ZSIsIHsgfSwgMCB9KTsKLSAgICBtX2Zha2VJ
Y2VDYW5kaWRhdGVzLmFwcGVuZCh7ICJzcmZseCIsICIzIiwgMSwgIlVEUCIsIDE2Nzc3MjIxMTEs
ICIxNzIuMTguMC4xIiwgNDc5ODksIHsgfSwgIjE5Mi4xNjguMC4xMDAiLCA0Nzk4OSB9KTsKLQot
ICAgIC8vIFJldmVyc2Ugb3JkZXIgdG8gdXNlIHRha2VMYXN0KCkgd2hpbGUga2VlcGluZyB0aGUg
YWJvdmUgb3JkZXIKLSAgICBtX2Zha2VJY2VDYW5kaWRhdGVzLnJldmVyc2UoKTsKLQotICAgIG1f
aWNlQ2FuZGlkYXRlVGltZXIuc3RhcnRPbmVTaG90KDBfcyk7Ci19Ci0KLXZvaWQgTW9ja01lZGlh
RW5kcG9pbnQ6OmljZUNhbmRpZGF0ZVRpbWVyRmlyZWQoKQotewotICAgIGlmIChtX21pZHMuaXNF
bXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIW1fZmFrZUljZUNhbmRpZGF0ZXMu
aXNFbXB0eSgpKSB7Ci0gICAgICAgIG1fY2xpZW50LmdvdEljZUNhbmRpZGF0ZShtX21pZHNbMF0s
IG1fZmFrZUljZUNhbmRpZGF0ZXMudGFrZUxhc3QoKSk7Ci0gICAgICAgIG1faWNlQ2FuZGlkYXRl
VGltZXIuc3RhcnRPbmVTaG90KDBfcyk7Ci0gICAgfSBlbHNlCi0gICAgICAgIG1fY2xpZW50LmRv
bmVHYXRoZXJpbmdDYW5kaWRhdGVzKG1fbWlkc1swXSk7Ci19Ci0KLXZvaWQgTW9ja01lZGlhRW5k
cG9pbnQ6OnN0ZXBJY2VUcmFuc3BvcnRTdGF0ZXMoKQotewotICAgIGlmIChtX21pZHMuc2l6ZSgp
ICE9IDMpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJUaGUgJ3N0ZXAtaWNlLXRyYW5zcG9ydC1zdGF0
ZXMnIGFjdGlvbiByZXF1aXJlcyAzIHRyYW5zY2VpdmVycyIpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgLy8gU2hvdWxkIGdvIHRvOgotICAgIC8vICdjaGVja2luZycKLSAgICBtX2lj
ZVRyYW5zcG9ydFN0YXRlQ2hhbmdlcy5hcHBlbmQoc3RkOjptYWtlX3BhaXIobV9taWRzWzBdLCBS
VENJY2VUcmFuc3BvcnRTdGF0ZTo6Q2hlY2tpbmcpKTsKLSAgICBtX2ljZVRyYW5zcG9ydFN0YXRl
Q2hhbmdlcy5hcHBlbmQoc3RkOjptYWtlX3BhaXIobV9taWRzWzFdLCBSVENJY2VUcmFuc3BvcnRT
dGF0ZTo6Q2hlY2tpbmcpKTsKLSAgICBtX2ljZVRyYW5zcG9ydFN0YXRlQ2hhbmdlcy5hcHBlbmQo
c3RkOjptYWtlX3BhaXIobV9taWRzWzJdLCBSVENJY2VUcmFuc3BvcnRTdGF0ZTo6Q2hlY2tpbmcp
KTsKLQotICAgIC8vICdjb25uZWN0ZWQnCi0gICAgbV9pY2VUcmFuc3BvcnRTdGF0ZUNoYW5nZXMu
YXBwZW5kKHN0ZDo6bWFrZV9wYWlyKG1fbWlkc1swXSwgUlRDSWNlVHJhbnNwb3J0U3RhdGU6OkNv
bm5lY3RlZCkpOwotICAgIG1faWNlVHJhbnNwb3J0U3RhdGVDaGFuZ2VzLmFwcGVuZChzdGQ6Om1h
a2VfcGFpcihtX21pZHNbMV0sIFJUQ0ljZVRyYW5zcG9ydFN0YXRlOjpDb21wbGV0ZWQpKTsKLSAg
ICBtX2ljZVRyYW5zcG9ydFN0YXRlQ2hhbmdlcy5hcHBlbmQoc3RkOjptYWtlX3BhaXIobV9taWRz
WzJdLCBSVENJY2VUcmFuc3BvcnRTdGF0ZTo6Q2xvc2VkKSk7Ci0KLSAgICAvLyAnY29tcGxldGVk
JwotICAgIG1faWNlVHJhbnNwb3J0U3RhdGVDaGFuZ2VzLmFwcGVuZChzdGQ6Om1ha2VfcGFpciht
X21pZHNbMF0sIFJUQ0ljZVRyYW5zcG9ydFN0YXRlOjpDb21wbGV0ZWQpKTsKLQotICAgIC8vICdm
YWlsZWQnCi0gICAgbV9pY2VUcmFuc3BvcnRTdGF0ZUNoYW5nZXMuYXBwZW5kKHN0ZDo6bWFrZV9w
YWlyKG1fbWlkc1swXSwgUlRDSWNlVHJhbnNwb3J0U3RhdGU6OkZhaWxlZCkpOwotCi0gICAgLy8g
J2Rpc2Nvbm5lY3RlZCcKLSAgICBtX2ljZVRyYW5zcG9ydFN0YXRlQ2hhbmdlcy5hcHBlbmQoc3Rk
OjptYWtlX3BhaXIobV9taWRzWzFdLCBSVENJY2VUcmFuc3BvcnRTdGF0ZTo6RGlzY29ubmVjdGVk
KSk7Ci0gICAgbV9pY2VUcmFuc3BvcnRTdGF0ZUNoYW5nZXMuYXBwZW5kKHN0ZDo6bWFrZV9wYWly
KG1fbWlkc1swXSwgUlRDSWNlVHJhbnNwb3J0U3RhdGU6OkNsb3NlZCkpOwotCi0gICAgLy8gJ25l
dycKLSAgICBtX2ljZVRyYW5zcG9ydFN0YXRlQ2hhbmdlcy5hcHBlbmQoc3RkOjptYWtlX3BhaXIo
bV9taWRzWzFdLCBSVENJY2VUcmFuc3BvcnRTdGF0ZTo6Q2xvc2VkKSk7Ci0KLSAgICAvLyBSZXZl
cnNlIG9yZGVyIHRvIHVzZSB0YWtlTGFzdCgpIHdoaWxlIGtlZXBpbmcgdGhlIGFib3ZlIG9yZGVy
Ci0gICAgbV9pY2VUcmFuc3BvcnRTdGF0ZUNoYW5nZXMucmV2ZXJzZSgpOwotCi0gICAgbV9pY2VU
cmFuc3BvcnRUaW1lci5zdGFydE9uZVNob3QoMF9zKTsKLX0KLQotdm9pZCBNb2NrTWVkaWFFbmRw
b2ludDo6aWNlVHJhbnNwb3J0VGltZXJGaXJlZCgpCi17Ci0gICAgaWYgKG1faWNlVHJhbnNwb3J0
U3RhdGVDaGFuZ2VzLmlzRW1wdHkoKSB8fCBtX21pZHMuc2l6ZSgpICE9IDMpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGF1dG8gc3RhdGVDaGFuZ2UgPSBtX2ljZVRyYW5zcG9ydFN0YXRlQ2hhbmdl
cy50YWtlTGFzdCgpOwotICAgIG1fY2xpZW50LmljZVRyYW5zcG9ydFN0YXRlQ2hhbmdlZChzdGF0
ZUNoYW5nZS5maXJzdCwgc3RhdGVDaGFuZ2Uuc2Vjb25kKTsKLQotICAgIG1faWNlVHJhbnNwb3J0
VGltZXIuc3RhcnRPbmVTaG90KDBfcyk7Ci19Ci0KLXZvaWQgTW9ja01lZGlhRW5kcG9pbnQ6OnVu
bXV0ZVJlbW90ZVNvdXJjZXNCeU1pZCgpCi17Ci0gICAgaWYgKG1fbWlkcy5pc0VtcHR5KCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIC8vIExvb2tpbmcgdXAgZWFjaCBzb3VyY2UgYnkgaXRzIG1p
ZCwgaW5zdGVhZCBvZiBzaW1wbHkgaXRlcmF0aW5nIG92ZXIgdGhlIGxpc3Qgb2YgbXV0ZWQgc291
cmNlcywKLSAgICAvLyBlbXVsYXRlcyByZW1vdGUgbWVkaWEgYXJyaXZpbmcgb24gYSBtZWRpYSBk
ZXNjcmlwdGlvbiB3aXRoIGEgc3BlY2lmaWMgbWlkIChSVENSdHBUcmFuc2NlaXZlcikuCi0KLSAg
ICAvLyBDb3B5IHZhbHVlcyBpbiByZXZlcnNlIG9yZGVyIHRvIG1haW50YWluIHRoZSBvcmlnaW5h
bCBvcmRlciB3aGlsZSB1c2luZyB0YWtlTGFzdCgpCi0gICAgZm9yIChpbnQgaSA9IG1fbWlkcy5z
aXplKCkgLSAxOyBpID49IDA7IC0taSkKLSAgICAgICAgbV9taWRzT2ZTb3VyY2VzVG9Vbm11dGUu
YXBwZW5kKG1fbWlkc1tpXSk7Ci0KLSAgICBtX3VubXV0ZVRpbWVyLnN0YXJ0T25lU2hvdCgwX3Mp
OwotfQotCi12b2lkIE1vY2tNZWRpYUVuZHBvaW50Ojp1bm11dGVUaW1lckZpcmVkKCkKLXsKLSAg
ICBhdXRvKiBzb3VyY2UgPSBtX211dGVkUmVtb3RlU291cmNlcy5nZXQobV9taWRzT2ZTb3VyY2Vz
VG9Vbm11dGUudGFrZUxhc3QoKSk7Ci0gICAgaWYgKHNvdXJjZSkKLSAgICAgICAgc291cmNlLT5z
ZXRNdXRlZChmYWxzZSk7Ci0KLSAgICBpZiAoIW1fbWlkc09mU291cmNlc1RvVW5tdXRlLmlzRW1w
dHkoKSkKLSAgICAgICAgbV91bm11dGVUaW1lci5zdGFydE9uZVNob3QoMF9zKTsKLX0KLQotfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKFdFQl9SVEMpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL01vY2tNZWRpYUVuZHBvaW50LmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL01vY2tNZWRpYUVuZHBvaW50LmgKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdmNjY2NGZiODg1NjUzNTc1OTU2ZGJiZjU1NDJjNzIyNjE1
YjU5NjQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9Nb2NrTWVkaWFFbmRwb2ludC5oCisrKyAvZGV2L251
bGwKQEAgLTEsMTAxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgRXJpY3Nzb24g
QUIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyCi0gKiAgICBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiAgICBkaXN0cmlidXRpb24uCi0gKiAzLiBOZWl0aGVy
IHRoZSBuYW1lIG9mIEVyaWNzc29uIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwot
ICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbSB0aGlzCi0gKiAgICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaWYgRU5BQkxFKFdFQl9S
VEMpCi0KLSNpbmNsdWRlICJNZWRpYUVuZHBvaW50LmgiCi0jaW5jbHVkZSAiUlRDSWNlVHJhbnNw
b3J0U3RhdGUuaCIKLSNpbmNsdWRlICJUaW1lci5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0K
LWNsYXNzIE1vY2tNZWRpYUVuZHBvaW50IGZpbmFsIDogcHVibGljIE1lZGlhRW5kcG9pbnQgewot
cHVibGljOgotICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8TWVkaWFF
bmRwb2ludD4gY3JlYXRlKE1lZGlhRW5kcG9pbnRDbGllbnQmKTsKLQotICAgIE1vY2tNZWRpYUVu
ZHBvaW50KE1lZGlhRW5kcG9pbnRDbGllbnQmKTsKLSAgICB+TW9ja01lZGlhRW5kcG9pbnQoKTsK
LQotICAgIHZvaWQgc2V0Q29uZmlndXJhdGlvbihNZWRpYUVuZHBvaW50Q29uZmlndXJhdGlvbiYm
KSBmaW5hbCB7IH07Ci0KLSAgICB2b2lkIGdlbmVyYXRlRHRsc0luZm8oKSBmaW5hbDsKLSAgICBN
ZWRpYVBheWxvYWRWZWN0b3IgZ2V0RGVmYXVsdEF1ZGlvUGF5bG9hZHMoKSBmaW5hbDsKLSAgICBN
ZWRpYVBheWxvYWRWZWN0b3IgZ2V0RGVmYXVsdFZpZGVvUGF5bG9hZHMoKSBmaW5hbDsKLSAgICBN
ZWRpYVBheWxvYWRWZWN0b3IgZmlsdGVyUGF5bG9hZHMoY29uc3QgTWVkaWFQYXlsb2FkVmVjdG9y
JiByZW1vdGVQYXlsb2FkcywgY29uc3QgTWVkaWFQYXlsb2FkVmVjdG9yJiBkZWZhdWx0UGF5bG9h
ZHMpIGZpbmFsOwotCi0gICAgVXBkYXRlUmVzdWx0IHVwZGF0ZVJlY2VpdmVDb25maWd1cmF0aW9u
KE1lZGlhRW5kcG9pbnRTZXNzaW9uQ29uZmlndXJhdGlvbiosIGJvb2wgaXNJbml0aWF0b3IpIGZp
bmFsOwotICAgIFVwZGF0ZVJlc3VsdCB1cGRhdGVTZW5kQ29uZmlndXJhdGlvbihNZWRpYUVuZHBv
aW50U2Vzc2lvbkNvbmZpZ3VyYXRpb24qLCBjb25zdCBSZWFsdGltZU1lZGlhU291cmNlTWFwJiwg
Ym9vbCBpc0luaXRpYXRvcikgZmluYWw7Ci0KLSAgICB2b2lkIGFkZFJlbW90ZUNhbmRpZGF0ZShj
b25zdCBJY2VDYW5kaWRhdGUmLCBjb25zdCBTdHJpbmcmIG1pZCwgY29uc3QgU3RyaW5nJiB1ZnJh
ZywgY29uc3QgU3RyaW5nJiBwYXNzd29yZCkgZmluYWw7Ci0KLSAgICBSZWY8UmVhbHRpbWVNZWRp
YVNvdXJjZT4gY3JlYXRlTXV0ZWRSZW1vdGVTb3VyY2UoY29uc3QgU3RyaW5nJiBtaWQsIFJlYWx0
aW1lTWVkaWFTb3VyY2U6OlR5cGUpIGZpbmFsOwotICAgIHZvaWQgcmVwbGFjZVNlbmRTb3VyY2Uo
UmVhbHRpbWVNZWRpYVNvdXJjZSYsIGNvbnN0IFN0cmluZyYgbWlkKSBmaW5hbDsKLSAgICB2b2lk
IHJlcGxhY2VNdXRlZFJlbW90ZVNvdXJjZU1pZChjb25zdCBTdHJpbmcmIG9sZE1pZCwgY29uc3Qg
U3RyaW5nJiBuZXdNaWQpIGZpbmFsOwotCi0gICAgdm9pZCBzdG9wKCkgZmluYWw7Ci0KLSAgICB2
b2lkIGVtdWxhdGVQbGF0Zm9ybUV2ZW50KGNvbnN0IFN0cmluZyYgYWN0aW9uKSBmaW5hbDsKLQot
cHJpdmF0ZToKLSAgICB2b2lkIHVwZGF0ZUNvbmZpZ3VyYXRpb25NaWRzKGNvbnN0IE1lZGlhRW5k
cG9pbnRTZXNzaW9uQ29uZmlndXJhdGlvbiYpOwotCi0gICAgc3RkOjp1bmlxdWVfcHRyPFJUQ0Rh
dGFDaGFubmVsSGFuZGxlcj4gY3JlYXRlRGF0YUNoYW5uZWxIYW5kbGVyKGNvbnN0IFN0cmluZyYs
IGNvbnN0IFJUQ0RhdGFDaGFubmVsSW5pdCYpIGZpbmFsOwotCi0gICAgdm9pZCBkaXNwYXRjaEZh
a2VJY2VDYW5kaWRhdGVzKCk7Ci0gICAgdm9pZCBpY2VDYW5kaWRhdGVUaW1lckZpcmVkKCk7Ci0K
LSAgICB2b2lkIHN0ZXBJY2VUcmFuc3BvcnRTdGF0ZXMoKTsKLSAgICB2b2lkIGljZVRyYW5zcG9y
dFRpbWVyRmlyZWQoKTsKLQotICAgIHZvaWQgdW5tdXRlUmVtb3RlU291cmNlc0J5TWlkKCk7Ci0g
ICAgdm9pZCB1bm11dGVUaW1lckZpcmVkKCk7Ci0KLSAgICBNZWRpYUVuZHBvaW50Q2xpZW50JiBt
X2NsaWVudDsKLSAgICBWZWN0b3I8U3RyaW5nPiBtX21pZHM7Ci0gICAgSGFzaE1hcDxTdHJpbmcs
IFJlZlB0cjxSZWFsdGltZU1lZGlhU291cmNlPj4gbV9tdXRlZFJlbW90ZVNvdXJjZXM7Ci0KLSAg
ICBWZWN0b3I8SWNlQ2FuZGlkYXRlPiBtX2Zha2VJY2VDYW5kaWRhdGVzOwotICAgIFRpbWVyIG1f
aWNlQ2FuZGlkYXRlVGltZXI7Ci0KLSAgICBWZWN0b3I8c3RkOjpwYWlyPFN0cmluZywgUlRDSWNl
VHJhbnNwb3J0U3RhdGU+PiBtX2ljZVRyYW5zcG9ydFN0YXRlQ2hhbmdlczsKLSAgICBUaW1lciBt
X2ljZVRyYW5zcG9ydFRpbWVyOwotCi0gICAgVmVjdG9yPFN0cmluZz4gbV9taWRzT2ZTb3VyY2Vz
VG9Vbm11dGU7Ci0gICAgVGltZXIgbV91bm11dGVUaW1lcjsKLSAgICAKLSAgICBXZWFrUHRyRmFj
dG9yeTxNb2NrTWVkaWFFbmRwb2ludD4gbV93ZWFrUHRyRmFjdG9yeTsKLX07Ci0KLX0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShXRUJfUlRDKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9Nb2NrUmVhbHRpbWVNZWRpYVNvdXJjZS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL01vY2tSZWFsdGltZU1lZGlhU291cmNlLmNw
cAppbmRleCBiNDI0MjdiN2NkZDdkODllMDIwZDZhNWY2MmY0N2VjYTc0N2YwMmU4Li44NzkxOTQ1
ZGZmMzEwODkwZWUyMGUxZmJmNGViNTRhNjRlZDBkOTA2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tb2NrL01vY2tSZWFsdGltZU1lZGlhU291cmNlLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL01vY2tSZWFsdGltZU1lZGlhU291cmNlLmNwcApAQCAt
ODIsNyArODIsNyBAQCBWZWN0b3I8Q2FwdHVyZURldmljZT4mIE1vY2tSZWFsdGltZU1lZGlhU291
cmNlOjp2aWRlb0RldmljZXMoKQogfQogCiBNb2NrUmVhbHRpbWVNZWRpYVNvdXJjZTo6TW9ja1Jl
YWx0aW1lTWVkaWFTb3VyY2UoY29uc3QgU3RyaW5nJiBpZCwgUmVhbHRpbWVNZWRpYVNvdXJjZTo6
VHlwZSB0eXBlLCBjb25zdCBTdHJpbmcmIG5hbWUpCi0gICAgOiBCYXNlUmVhbHRpbWVNZWRpYVNv
dXJjZUNsYXNzKGlkLCB0eXBlLCBuYW1lKQorICAgIDogUmVhbHRpbWVNZWRpYVNvdXJjZShpZCwg
dHlwZSwgbmFtZSkKIHsKICAgICBzd2l0Y2ggKHR5cGUpIHsKICAgICBjYXNlIFJlYWx0aW1lTWVk
aWFTb3VyY2U6OlR5cGU6OkF1ZGlvOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbW9jay9Nb2NrUmVhbHRpbWVNZWRpYVNvdXJjZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbW9jay9Nb2NrUmVhbHRpbWVNZWRpYVNvdXJjZS5oCmluZGV4IDk1MDdmMDFhYTNkMzIzMDI2
M2ZkNGFmZWI5ZDE2NTI4Y2Q5OWFjMmMuLjFlYTExNWQ5YjQzM2ZhNGUzMzY5Y2JlZjg0Nzk0Zjlh
ZjI4ODY3ZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svTW9ja1Jl
YWx0aW1lTWVkaWFTb3VyY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL01v
Y2tSZWFsdGltZU1lZGlhU291cmNlLmgKQEAgLTI4LDI4ICsyOCwxNyBAQAogICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KICAqLwogCi0jaWZuZGVmIE1vY2tSZWFsdGltZU1lZGlhU291cmNlX2gKLSNkZWZpbmUgTW9j
a1JlYWx0aW1lTWVkaWFTb3VyY2VfaAorI3ByYWdtYSBvbmNlCiAKICNpZiBFTkFCTEUoTUVESUFf
U1RSRUFNKQogCiAjaW5jbHVkZSAiUmVhbHRpbWVNZWRpYVNvdXJjZS5oIgogCi0jaWYgVVNFKE9Q
RU5XRUJSVEMpCi0jaW5jbHVkZSAiUmVhbHRpbWVNZWRpYVNvdXJjZU93ci5oIgotI2VuZGlmCi0K
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ2FwdHVyZURldmljZTsKIAotI2lmIFVTRShP
UEVOV0VCUlRDKQotdXNpbmcgQmFzZVJlYWx0aW1lTWVkaWFTb3VyY2VDbGFzcyA9IFJlYWx0aW1l
TWVkaWFTb3VyY2VPd3I7Ci0jZWxzZQotdXNpbmcgQmFzZVJlYWx0aW1lTWVkaWFTb3VyY2VDbGFz
cyA9IFJlYWx0aW1lTWVkaWFTb3VyY2U7Ci0jZW5kaWYKLQotY2xhc3MgTW9ja1JlYWx0aW1lTWVk
aWFTb3VyY2UgOiBwdWJsaWMgQmFzZVJlYWx0aW1lTWVkaWFTb3VyY2VDbGFzcyB7CitjbGFzcyBN
b2NrUmVhbHRpbWVNZWRpYVNvdXJjZSA6IHB1YmxpYyBSZWFsdGltZU1lZGlhU291cmNlIHsKIHB1
YmxpYzoKICAgICB2aXJ0dWFsIH5Nb2NrUmVhbHRpbWVNZWRpYVNvdXJjZSgpIHsgfQogCkBAIC02
MSw5ICs1MCw3IEBAIHByb3RlY3RlZDoKIAogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVTZXR0aW5n
cyhSZWFsdGltZU1lZGlhU291cmNlU2V0dGluZ3MmKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGlu
aXRpYWxpemVDYXBhYmlsaXRpZXMoUmVhbHRpbWVNZWRpYVNvdXJjZUNhcGFiaWxpdGllcyYpID0g
MDsKLSNpZiAhVVNFKE9QRU5XRUJSVEMpCiAgICAgdmlydHVhbCB2b2lkIGluaXRpYWxpemVTdXBw
b3J0ZWRDb25zdHJhaW50cyhSZWFsdGltZU1lZGlhU291cmNlU3VwcG9ydGVkQ29uc3RyYWludHMm
KSA9IDA7Ci0jZW5kaWYKIAogICAgIGNvbnN0IFJlYWx0aW1lTWVkaWFTb3VyY2VDYXBhYmlsaXRp
ZXMmIGNhcGFiaWxpdGllcygpIGNvbnN0IG92ZXJyaWRlOwogICAgIGNvbnN0IFJlYWx0aW1lTWVk
aWFTb3VyY2VTZXR0aW5ncyYgc2V0dGluZ3MoKSBjb25zdCBvdmVycmlkZTsKQEAgLTc0LDExICs2
MSw3IEBAIHByb3RlY3RlZDoKIAogcHJpdmF0ZToKICAgICB2b2lkIGluaXRpYWxpemVDYXBhYmls
aXRpZXMoKTsKLSNpZiBVU0UoT1BFTldFQlJUQykKLSAgICB2b2lkIGluaXRpYWxpemVTZXR0aW5n
cygpIGZpbmFsOwotI2Vsc2UKICAgICB2b2lkIGluaXRpYWxpemVTZXR0aW5ncygpOwotI2VuZGlm
CiAKICAgICBSZWFsdGltZU1lZGlhU291cmNlU2V0dGluZ3MgbV9jdXJyZW50U2V0dGluZ3M7CiAg
ICAgUmVhbHRpbWVNZWRpYVNvdXJjZVN1cHBvcnRlZENvbnN0cmFpbnRzIG1fc3VwcG9ydGVkQ29u
c3RyYWludHM7CkBAIC04OSw1ICs3MiwzIEBAIHByaXZhdGU6CiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFNKQotCi0jZW5kaWYgLy8gTW9ja1Jl
YWx0aW1lTWVkaWFTb3VyY2VfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9J
bnRlcm5hbHMuY3BwIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCmluZGV4
IDIwZWRmOTc0OGJjZDhmZmVkYzUzMmVlZDM1MjNmNzNjYmQzZDk5NzEuLjNhZDU3ZjUzNmM4MWMy
NTM3M2U2NjY0ZGYyZDdkYzE5ZWI1ODI0YjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Rl
c3RpbmcvSW50ZXJuYWxzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFs
cy5jcHAKQEAgLTIwMCw3ICsyMDAsNiBAQAogI2VuZGlmCiAKICNpZiBFTkFCTEUoV0VCX1JUQykK
LSNpbmNsdWRlICJNb2NrTWVkaWFFbmRwb2ludC5oIgogI2luY2x1ZGUgIlJUQ1BlZXJDb25uZWN0
aW9uLmgiCiAjZW5kaWYKIApAQCAtNDg3LDEyICs0ODYsNiBAQCBJbnRlcm5hbHM6OkludGVybmFs
cyhEb2N1bWVudCYgZG9jdW1lbnQpCiAgICAgV2ViQ29yZTo6U2V0dGluZ3M6OnNldE1lZGlhQ2Fw
dHVyZVJlcXVpcmVzU2VjdXJlQ29ubmVjdGlvbihmYWxzZSk7CiAjZW5kaWYKIAotI2lmIEVOQUJM
RShXRUJfUlRDKQotI2lmIFVTRShPUEVOV0VCUlRDKQotICAgIGVuYWJsZU1vY2tNZWRpYUVuZHBv
aW50KCk7Ci0jZW5kaWYKLSNlbmRpZgotCiAjaWYgRU5BQkxFKFdJUkVMRVNTX1BMQVlCQUNLX1RB
UkdFVCkKICAgICBpZiAoZG9jdW1lbnQucGFnZSgpKQogICAgICAgICBkb2N1bWVudC5wYWdlKCkt
PnNldE1vY2tNZWRpYVBsYXliYWNrVGFyZ2V0UGlja2VyRW5hYmxlZCh0cnVlKTsKQEAgLTEyNTAs
MTMgKzEyNDMsNiBAQCB2b2lkIEludGVybmFsczo6ZW5hYmxlTW9ja1NwZWVjaFN5bnRoZXNpemVy
KCkKIAogI2lmIEVOQUJMRShXRUJfUlRDKQogCi0jaWYgVVNFKE9QRU5XRUJSVEMpCi12b2lkIElu
dGVybmFsczo6ZW5hYmxlTW9ja01lZGlhRW5kcG9pbnQoKQotewotICAgIE1lZGlhRW5kcG9pbnQ6
OmNyZWF0ZSA9IE1vY2tNZWRpYUVuZHBvaW50OjpjcmVhdGU7Ci19Ci0jZW5kaWYKLQogdm9pZCBJ
bnRlcm5hbHM6OmVtdWxhdGVSVENQZWVyQ29ubmVjdGlvblBsYXRmb3JtRXZlbnQoUlRDUGVlckNv
bm5lY3Rpb24mIGNvbm5lY3Rpb24sIGNvbnN0IFN0cmluZyYgYWN0aW9uKQogewogICAgIGlmICgh
TGliV2ViUlRDUHJvdmlkZXI6OndlYlJUQ0F2YWlsYWJsZSgpKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaCBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50
ZXJuYWxzLmgKaW5kZXggOWM0MDAzMmE3NWU3MDkxZGFmYTI4ODk0ZWExMDk3MzYzZGYzNjIzOC4u
MTY2OTY2ODJhYmJhMzI1NmY4MzQ1ZGUzMTQ5ZTdhNzBjNmExZjliYiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0
aW5nL0ludGVybmFscy5oCkBAIC00MzAsOSArNDMwLDYgQEAgcHVibGljOgogI2VuZGlmCiAKICNp
ZiBFTkFCTEUoV0VCX1JUQykKLSNpZiBVU0UoT1BFTldFQlJUQykKLSAgICB2b2lkIGVuYWJsZU1v
Y2tNZWRpYUVuZHBvaW50KCk7Ci0jZW5kaWYKICAgICB2b2lkIGVtdWxhdGVSVENQZWVyQ29ubmVj
dGlvblBsYXRmb3JtRXZlbnQoUlRDUGVlckNvbm5lY3Rpb24mLCBjb25zdCBTdHJpbmcmIGFjdGlv
bik7CiAgICAgdm9pZCB1c2VNb2NrUlRDUGVlckNvbm5lY3Rpb25GYWN0b3J5KGNvbnN0IFN0cmlu
ZyYpOwogICAgIHZvaWQgc2V0SUNFQ2FuZGlkYXRlRmlsdGVyaW5nKGJvb2wpOwpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDgx
NDNmOTY1YmJkYmM3NzZiNTA3OThjOWRjMjliNzY4MWE3OTE0ZjEuLjcwOWE4ZDhiYWRkNmFkMWRj
N2ZmNGY1ZDNkNTRiMDIyOTU3M2E3NTAgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxv
ZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsNSArMSwxNCBAQAogMjAxNy0xMC0w
NCAgWW91ZW5uIEZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+CiAKKyAgICAgICAgUmVtb3ZlIE9w
ZW5XZWJSVEMgYmFja2VuZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTc3ODY4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvVGVzdEV4cGVjdGF0aW9uczoKKworMjAxNy0xMC0wNCAg
WW91ZW5uIEZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+CisKICAgICAgICAgQWRkIHF1b3RhIHRv
IGNhY2hlIEFQSQogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTc3NTUyCiAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9UZXN0RXhw
ZWN0YXRpb25zIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1Rlc3RFeHBlY3RhdGlvbnMKaW5k
ZXggOGM2NmRiNjQ0NWUzNzI3OGNjOTgxYTU5NzdhNjVmMjJiNDNhMDIzOS4uNDVhMjVkZDAwMWY0
MDA0MzVjM2IzOTAxYmExMjdhYjYzNzc2MjI3NCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxh
dGZvcm0vZ3RrL1Rlc3RFeHBlY3RhdGlvbnMKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3Rr
L1Rlc3RFeHBlY3RhdGlvbnMKQEAgLTYxMSw4MiArNjExLDExIEBAIHdlYmtpdC5vcmcvYi85OTAz
NiBmYXN0L3NoYWRvdy1kb20vcG9pbnRlcmxvY2tlbGVtZW50LWluLXNsb3QuaHRtbCBbIFNraXAg
XQogd2Via2l0Lm9yZy9iLzg1MjExIGlldGVzdGNlbnRlci9jc3MzL2ZsZXhib3gvZmxleGJveC1h
bGlnbi1zdHJldGNoLTAwMS5odG0gWyBJbWFnZU9ubHlGYWlsdXJlIF0KIHdlYmtpdC5vcmcvYi84
NTIxMiBpZXRlc3RjZW50ZXIvY3NzMy9mbGV4Ym94L2ZsZXhib3gtbGF5b3V0LTAwMi5odG0gWyBJ
bWFnZU9ubHlGYWlsdXJlIF0KIAotIyBXZWJSVEMgLyBNZWRpYVN0cmVhbSBpbXBsZW1lbnRhdGlv
biBpcyBub3QgY29tcGxldGUgeWV0LgotIyBTb21lIG9mIHRoaXMgdGVzdHMgYXJlIHNraXBwZWQg
b24gdGhlIGdlbmVyYWwgVGVzdEV4cGVjdGF0aW9ucywKLSMgRW5hYmxlIHRoZW0gaGVyZSBhbmQg
bGlzdCB0aGUgaW5kaXZpZHVhbCBleHBlY3RhdGlvbnMgaW4gb3JkZXIgdG8gZ2V0Ci0jIG5vdGlm
aWNhdGlvbnMgb2YgbmV3IGZhaWx1cmVzLgogZmFzdC9tZWRpYXN0cmVhbSBbIFBhc3MgXQotd2Vi
cnRjIFsgUGFzcyBdCi0jIEdUSyB1c2VzIE9XUiBpbnN0ZWFkIG9mIGxpYndlYnJ0Ywotd2VicnRj
L2xpYndlYnJ0YyBbIFNraXAgXQotIyBTb21lIFdlYlJUQyBmZWF0dXJlcyBsaWtlIGRhdGFjaGFu
bmVsIGFyZSBzdGlsbCBub3QgaW1wbGVtZW50ZWQKLXdlYnJ0Yy9hdWRpby1yZXBsYWNlLXRyYWNr
Lmh0bWwgWyBGYWlsdXJlIF0KLXdlYnJ0Yy9hdWRpby1tdXRlZC1zdGF0cy5odG1sIFsgRmFpbHVy
ZSBdCi13ZWJydGMvYXVkaW8tbXV0ZWQtc3RhdHMyLmh0bWwgWyBGYWlsdXJlIF0KLXdlYnJ0Yy9j
YXB0dXJlQ2FudmFzLXdlYnJ0Yy5odG1sIFsgRmFpbHVyZSBdCi13ZWJydGMvY2xvc2luZy1wZWVy
Y29ubmVjdGlvbi5odG1sIFsgVGltZW91dCBdCi13ZWJydGMvY29ubmVjdGlvbi1zdGF0ZS5odG1s
IFsgRmFpbHVyZSBdCi13ZWJydGMvZGF0YWNoYW5uZWwgWyBTa2lwIF0KLXdlYnJ0Yy9lcGhlbWVy
YWwtY2VydGlmaWNhdGVzLWFuZC1jbmFtZXMuaHRtbCBbIEZhaWx1cmUgXQotd2VicnRjL211bHRp
LXZpZGVvLmh0bWwgWyBGYWlsdXJlIF0KLXdlYnJ0Yy9uby1wb3J0LXplcm8taW4tdXBkLWNhbmRp
ZGF0ZXMuaHRtbCBbIFRpbWVvdXQgXQotd2VicnRjL3BlZXItY29ubmVjdGlvbi1hdWRpby1tdXRl
Mi5odG1sIFsgQ3Jhc2ggRmFpbHVyZSBdCi13ZWJydGMvcGVlci1jb25uZWN0aW9uLWF1ZGlvLW11
dGUuaHRtbCBbIEZhaWx1cmUgXQotd2VicnRjL3BlZXItY29ubmVjdGlvbi1hdWRpby11bm11dGUu
aHRtbCBbIEZhaWx1cmUgXQotd2VicnRjL3BlZXItY29ubmVjdGlvbi1yZW1vdGUtYXVkaW8tbXV0
ZTIuaHRtbCBbIENyYXNoIEZhaWx1cmUgXQotd2VicnRjL3BlZXItY29ubmVjdGlvbi1yZW1vdGUt
YXVkaW8tbXV0ZS5odG1sIFsgRmFpbHVyZSBdCi13ZWJydGMvcGVlci1jb25uZWN0aW9uLXRyYWNr
LWVuZC5odG1sIFsgRmFpbHVyZSBdCi13ZWJydGMvdmlkZW8tYWRkVHJhY2suaHRtbCBbIENyYXNo
IF0KLXdlYnJ0Yy92aWRlby1kaXNhYmxlZC1ibGFjay5odG1sIFsgRmFpbHVyZSBdCi13ZWJydGMv
dmlkZW8tbWVkaWFzdHJlYW10cmFjay1zdGF0cy5odG1sIFsgRmFpbHVyZSBdCi13ZWJydGMvdmlk
ZW8tbXV0ZS5odG1sIFsgRmFpbHVyZSBUaW1lb3V0IF0KLXdlYnJ0Yy92aWRlby1yZW1vdGUtbXV0
ZS5odG1sIFsgRmFpbHVyZSBdCi13ZWJydGMvdmlkZW8tcmVwbGFjZS1tdXRlZC10cmFjay5odG1s
IFsgRmFpbHVyZSBUaW1lb3V0IENyYXNoIF0KLXdlYmtpdC5vcmcvYi8xNzY4MDEgd2VicnRjL3Zp
ZGVvLXJlcGxhY2UtdHJhY2suaHRtbCBbIEZhaWx1cmUgQ3Jhc2ggXQotd2Via2l0Lm9yZy9iLzE3
NjgwMSB3ZWJydGMvdmlkZW8tZ2V0UGFyYW1ldGVycy5odG1sIFsgRmFpbHVyZSBDcmFzaCBdCi13
ZWJraXQub3JnL2IvMTc2ODAxIHdlYnJ0Yy92aWRlby5odG1sIFsgRmFpbHVyZSBDcmFzaCBdCi13
ZWJydGMvdmlkZW8tcmVwbGFjZS10cmFjay10by1udWxsLmh0bWwgWyBGYWlsdXJlIF0KLXdlYnJ0
Yy92aWRlby1yb3RhdGlvbi5odG1sIFsgRmFpbHVyZSBdCi13ZWJydGMvdmlkZW8tc3RhdHMuaHRt
bCBbIEZhaWx1cmUgQ3Jhc2ggXQotd2VicnRjL3ZpZGVvLXVubXV0ZS5odG1sIFsgRmFpbHVyZSBU
aW1lb3V0IF0KLXdlYnJ0Yy92aWRlby13aXRoLWRhdGEtY2hhbm5lbC5odG1sIFsgRmFpbHVyZSBd
Ci13ZWJydGMvdmlkZW8td2l0aC1yZWNlaXZlci5odG1sIFsgRmFpbHVyZSBdCi1pbXBvcnRlZC93
M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3dlYnJ0Yy9SVENQZWVyQ29ubmVjdGlvbi1hZGRJY2VDYW5k
aWRhdGUuaHRtbCBbIEZhaWx1cmUgXQotaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy93
ZWJydGMvUlRDUGVlckNvbm5lY3Rpb24tY3JlYXRlRGF0YUNoYW5uZWwuaHRtbCBbIEZhaWx1cmUg
XQotaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy93ZWJydGMvUlRDUGVlckNvbm5lY3Rp
b24tc2V0UmVtb3RlRGVzY3JpcHRpb24uaHRtbCBbIEZhaWx1cmUgXQotaW1wb3J0ZWQvdzNjL3dl
Yi1wbGF0Zm9ybS10ZXN0cy93ZWJydGMvUlRDUGVlckNvbm5lY3Rpb24taWRsLmh0bWwgWyBGYWls
dXJlIF0KLWltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvd2VicnRjL1JUQ1BlZXJDb25u
ZWN0aW9uLWNyZWF0ZUFuc3dlci5odG1sIFsgRmFpbHVyZSBdCi1pbXBvcnRlZC93M2Mvd2ViLXBs
YXRmb3JtLXRlc3RzL3dlYnJ0Yy9SVENQZWVyQ29ubmVjdGlvbi1vbm5lZ290aWF0aW9ubmVlZGVk
Lmh0bWwgWyBGYWlsdXJlIF0KLWltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvd2VicnRj
L1JUQ0RhdGFDaGFubmVsLWJ1ZmZlcmVkQW1vdW50Lmh0bWwgWyBGYWlsdXJlIF0KLWltcG9ydGVk
L3czYy93ZWItcGxhdGZvcm0tdGVzdHMvd2VicnRjL1JUQ0RhdGFDaGFubmVsLXNlbmQuaHRtbCBb
IEZhaWx1cmUgXQotaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy93ZWJydGMvUlRDSWNl
VHJhbnNwb3J0Lmh0bWwgWyBGYWlsdXJlIF0KLWltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVz
dHMvd2VicnRjL1JUQ1BlZXJDb25uZWN0aW9uLWFkZFRyYW5zY2VpdmVyLmh0bWwgWyBGYWlsdXJl
IF0KLWltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvd2VicnRjL1JUQ1BlZXJDb25uZWN0
aW9uLWNvbm5lY3Rpb25TdGF0ZS5odG1sIFsgRmFpbHVyZSBdCi1pbXBvcnRlZC93M2Mvd2ViLXBs
YXRmb3JtLXRlc3RzL3dlYnJ0Yy9SVENQZWVyQ29ubmVjdGlvbi1nZXRTdGF0cy5odG1sIFsgRmFp
bHVyZSBdCi1pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3dlYnJ0Yy9SVENQZWVyQ29u
bmVjdGlvbi1pY2VDb25uZWN0aW9uU3RhdGUuaHRtbCBbIEZhaWx1cmUgXQotaW1wb3J0ZWQvdzNj
L3dlYi1wbGF0Zm9ybS10ZXN0cy93ZWJydGMvUlRDUGVlckNvbm5lY3Rpb24taWNlR2F0aGVyaW5n
U3RhdGUuaHRtbCBbIEZhaWx1cmUgXQotaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy93
ZWJydGMvUlRDUGVlckNvbm5lY3Rpb24tb25kYXRhY2hhbm5lbC5odG1sIFsgRmFpbHVyZSBdCi1p
bXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3dlYnJ0Yy9SVENQZWVyQ29ubmVjdGlvbi1z
ZXRMb2NhbERlc2NyaXB0aW9uLWFuc3dlci5odG1sIFsgRmFpbHVyZSBdCi1pbXBvcnRlZC93M2Mv
d2ViLXBsYXRmb3JtLXRlc3RzL3dlYnJ0Yy9SVENQZWVyQ29ubmVjdGlvbi1zZXRMb2NhbERlc2Ny
aXB0aW9uLW9mZmVyLmh0bWwgWyBGYWlsdXJlIF0KLWltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0t
dGVzdHMvd2VicnRjL1JUQ1BlZXJDb25uZWN0aW9uLXNldFJlbW90ZURlc2NyaXB0aW9uLW9mZmVy
Lmh0bWwgWyBGYWlsdXJlIF0KLWltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvd2VicnRj
L1JUQ0RUTUZTZW5kZXItaW5zZXJ0RFRNRi5odG1sIFsgQ3Jhc2ggXQotaW1wb3J0ZWQvdzNjL3dl
Yi1wbGF0Zm9ybS10ZXN0cy93ZWJydGMvUlRDUGVlckNvbm5lY3Rpb24tb250cmFjay5odG1sIFsg
Q3Jhc2ggXQotaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy93ZWJydGMvUlRDUGVlckNv
bm5lY3Rpb24tc2V0RGVzY3JpcHRpb24tdHJhbnNjZWl2ZXIuaHRtbCBbIENyYXNoIF0KLWltcG9y
dGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvd2VicnRjL1JUQ1J0cFNlbmRlci1yZXBsYWNlVHJh
Y2suaHRtbCBbIENyYXNoIF0KLWltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvd2VicnRj
L2RhdGFjaGFubmVsLWVtcHR5c3RyaW5nLmh0bWwgWyBGYWlsdXJlIF0KLWltcG9ydGVkL3czYy93
ZWItcGxhdGZvcm0tdGVzdHMvd2VicnRjL25vLW1lZGlhLWNhbGwuaHRtbCBbIEZhaWx1cmUgXQot
aW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy93ZWJydGMvcHJvbWlzZXMtY2FsbC5odG1s
IFsgRmFpbHVyZSBdCi1pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3dlYnJ0Yy9ydGNw
ZWVyY29ubmVjdGlvbi9zZXRSZW1vdGVEZXNjcmlwdGlvbi5odG1sIFsgRmFpbHVyZSBdCi1odHRw
L3Rlc3RzL3dlYnJ0Yy9maWx0ZXJpbmctaWNlLWNhbmRpZGF0ZS1jcm9zcy1vcmlnaW4tZnJhbWUu
aHRtbCBbIFRpbWVvdXQgXQotaHR0cC90ZXN0cy93ZWJydGMvZmlsdGVyaW5nLWljZS1jYW5kaWRh
dGUtc2FtZS1vcmlnaW4tZnJhbWUuaHRtbCBbIFRpbWVvdXQgXQotaHR0cC90ZXN0cy93ZWJydGMv
ZmlsdGVyaW5nLWljZS1jYW5kaWRhdGUtc2FtZS1vcmlnaW4tZnJhbWUyLmh0bWwgWyBUaW1lb3V0
IF0KLXdlYnJ0Yy9maWx0ZXJpbmctaWNlLWNhbmRpZGF0ZS1hZnRlci1yZWxvYWQuaHRtbCBbIFRp
bWVvdXQgXQotd2VicnRjL2ljZS1jYW5kaWRhdGUtc2RwTUxpbmVJbmRleC5odG1sIFsgVGltZW91
dCBdCisjIFNraXBwaW5nIHVudGlsIGJhY2tlbmQgaXMgaW1wbGVtZW50ZWQKK3dlYnJ0YyBbIFNr
aXAgXQoraW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy93ZWJydGMvIFsgU2tpcCBdCiBo
dHRwL3Rlc3RzL21lZGlhL21lZGlhLXN0cmVhbS9nZXR1c2VybWVkaWEtd2l0aC1jYW52YXMuaHRt
bCBbIFRpbWVvdXQgXQotd2Via2l0Lm9yZy9iLzE2OTExMCB3ZWJydGMvYXVkaW8tcGVlci1jb25u
ZWN0aW9uLXdlYmF1ZGlvLmh0bWwgWyBGYWlsdXJlIFRpbWVvdXQgXQotd2Via2l0Lm9yZy9iLzE3
MzQ1NiBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3dlYnJ0Yy9SVENQZWVyQ29ubmVj
dGlvbi1jcmVhdGVPZmZlci5odG1sIFsgQ3Jhc2ggXQotd2Via2l0Lm9yZy9iLzE3MzQ1NiB3ZWJy
dGMvY3JlYXRlT2ZmZXJBbnN3ZXIuaHRtbCAgWyBDcmFzaCBdCi13ZWJraXQub3JnL2IvMTczNDU2
IHdlYnJ0Yy92aWRlby1hZGRUcmFuc2NlaXZlci5odG1sIFsgQ3Jhc2ggXQogIyBUaGUgTWVkaWFT
dHJlYW0gaW1wbGVtZW50YXRpb24gaXMgYWxzbyBzdGlsbCBub3QgY29tcGxldGVkCiB3ZWJraXQu
b3JnL2IvNzkyMDMgZmFzdC9tZWRpYXN0cmVhbS9tb2NrLW1lZGlhLXNvdXJjZS13ZWJhdWRpby5o
dG1sIFsgVGltZW91dCBdCiB3ZWJraXQub3JnL2IvNzkyMDMgZmFzdC9tZWRpYXN0cmVhbS9nZXRV
c2VyTWVkaWEtd2ViYXVkaW8uaHRtbCBbIEZhaWx1cmUgXQpAQCAtMTI1Myw3ICsxMTgyLDYgQEAg
d2Via2l0Lm9yZy9iLzE3NTQxOSBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3N0cmVh
bXMvcmVhZGFibGUtYnl0ZS1zdHJlYW0KIGZhc3QvaW1hZ2VzL2FuaW1hdGVkLWltYWdlLW1wNC5o
dG1sIFsgU2tpcCBdCiAKIHdlYmtpdC5vcmcvYi8xNzc1MzIgYWNjZXNzaWJpbGl0eS9pbWFnZS1s
b2FkLW9uLWRlbGF5Lmh0bWwgWyBGYWlsdXJlIF0KLXdlYmtpdC5vcmcvYi8xNzc1MzMgd2VicnRj
L3ZpZGVvLWludGVycnVwdGlvbi5odG1sIFsgRmFpbHVyZSBdCiAKIHdlYmtpdC5vcmcvYi8xNzc2
MzIgZmFzdC90ZXh0L2ZsYWctY29kZXBvaW50Lmh0bWwgWyBJbWFnZU9ubHlGYWlsdXJlIF0KIApA
QCAtMTM4Miw3ICsxMzEwLDYgQEAgd2Via2l0Lm9yZy9iLzE3NjgwNSBtZWRpYS9tZWRpYS1oaWdo
ZXItcHJpby1hdWRpby1zdHJlYW0uaHRtbCBbIENyYXNoIF0KIHdlYmtpdC5vcmcvYi8xNzY4MDYg
bWVkaWEvdHJhY2svdHJhY2stdGV4dC10cmFjay1jdWUtbGlzdC5odG1sIFsgQ3Jhc2ggXQogCiB3
ZWJraXQub3JnL2IvMTc2ODU2IGZhc3QvbWVkaWFzdHJlYW0vYXBwbHktY29uc3RyYWludHMtdmlk
ZW8uaHRtbCBbIENyYXNoIF0KLXdlYmtpdC5vcmcvYi8xNzY4NTAgd2VicnRjL2Nsb25lLWF1ZGlv
LXRyYWNrLmh0bWwgWyBGYWlsdXJlIENyYXNoIF0KIHdlYmtpdC5vcmcvYi8xNzY4NjEgaW1wb3J0
ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9tZWRpYS1zb3VyY2UvbWVkaWFzb3VyY2Utc291cmNl
YnVmZmVyLW1vZGUuaHRtbCBbIENyYXNoIF0KIAogIyBTZWUgYWxzbyB3ZWJraXQub3JnL2IvMTQx
Njk5CkBAIC0xMzk0LDggKzEzMjEsNiBAQCB3ZWJraXQub3JnL2IvMTc3NTM3IGh0dHAvdGVzdHMv
bXVsdGlwYXJ0L211bHRpcGFydC1odG1sLnBocCBbIENyYXNoIF0KIAogd2Via2l0Lm9yZy9iLzE3
NzgxNiB3ZWJnbC8xLjAuMi9jb25mb3JtYW5jZS9vZ2xlcy9HTC92ZWMvdmVjXzAwMV90b18wMDgu
aHRtbCBbIENyYXNoIFBhc3MgXQogCi13ZWJraXQub3JnL2IvMTc3ODE4IHdlYnJ0Yy9uZWdvdGlh
dGVkbmVlZGVkLWV2ZW50LWFkZFN0cmVhbS5odG1sIFsgQ3Jhc2ggUGFzcyBdCi0KICMvLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiAjIEVuZCBvZiBDcmFzaGluZyB0ZXN0cwogIy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>322664</attachid>
            <date>2017-10-04 06:23:05 -0700</date>
            <delta_ts>2017-10-04 07:24:34 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-177868-20171004152303.patch</filename>
            <type>text/plain</type>
            <size>262133</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjIyODM0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzIwOWYyMWRiZDdiYWJk
NjQyODZiYTRjMDYzYTU5NWI2YTk1MzVhMi4uNTE5ZTJkYzVhNjVhNWE0YTcwNjgwOWJlOGNmNzg4
MGMwYjQ4NTQ3OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDU0IEBACiAyMDE3LTEwLTA0ICBZb3Vl
bm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KIAorICAgICAgICBSZW1vdmUgT3BlbldlYlJU
QyBiYWNrZW5kCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNzc4NjgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIERlcml2ZWRTb3VyY2VzLm1ha2U6CisgICAg
ICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYUVuZHBvaW50UGVlckNvbm5lY3Rpb24uY3Bw
OiBSZW1vdmVkLgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFFbmRwb2ludFBl
ZXJDb25uZWN0aW9uLmg6IFJlbW92ZWQuCisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9N
ZWRpYUVuZHBvaW50U2Vzc2lvbkRlc2NyaXB0aW9uLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBN
b2R1bGVzL21lZGlhc3RyZWFtL01lZGlhRW5kcG9pbnRTZXNzaW9uRGVzY3JpcHRpb24uaDogUmVt
b3ZlZC4KKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL1NEUFByb2Nlc3Nvci5jcHA6IFJl
bW92ZWQuCisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9TRFBQcm9jZXNzb3IuaDogUmVt
b3ZlZC4KKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL2xpYndlYnJ0Yy9MaWJXZWJSVENN
ZWRpYUVuZHBvaW50LmNwcDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2o6CisgICAgICAgICogcGxhdGZvcm0vR1N0cmVhbWVyLmNtYWtlOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmJ1aWxk
TWVkaWFFbmdpbmVzVmVjdG9yKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFt
ZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c3VwcG9ydHNUeXBlKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyLmNw
cDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyLmg6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0v
bWVkaWFzdHJlYW0vTWVkaWFFbmRwb2ludC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZv
cm0vbWVkaWFzdHJlYW0vTWVkaWFFbmRwb2ludC5oOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRm
b3JtL21lZGlhc3RyZWFtL01lZGlhRW5kcG9pbnRTZXNzaW9uQ29uZmlndXJhdGlvbi5oOiBSZW1v
dmVkLgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL1NEUFByb2Nlc3NvclNjcmlwdFJl
c291cmNlLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9TRFBQ
cm9jZXNzb3JTY3JpcHRSZXNvdXJjZS5oOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL21l
ZGlhc3RyZWFtL29wZW53ZWJydGMvTWVkaWFFbmRwb2ludE93ci5jcHA6IFJlbW92ZWQuCisgICAg
ICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vb3BlbndlYnJ0Yy9NZWRpYUVuZHBvaW50T3dyLmg6
IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vb3BlbndlYnJ0Yy9PcGVu
V2ViUlRDVXRpbGl0aWVzLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0
cmVhbS9vcGVud2VicnRjL09wZW5XZWJSVENVdGlsaXRpZXMuaDogUmVtb3ZlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9vcGVud2VicnRjL1JlYWx0aW1lQXVkaW9Tb3VyY2VPd3Iu
aDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9vcGVud2VicnRjL1Jl
YWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJPd3IuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRm
b3JtL21lZGlhc3RyZWFtL29wZW53ZWJydGMvUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlck93ci5o
OiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL29wZW53ZWJydGMvUmVh
bHRpbWVNZWRpYVNvdXJjZU93ci5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vbWVk
aWFzdHJlYW0vb3BlbndlYnJ0Yy9SZWFsdGltZU1lZGlhU291cmNlT3dyLmg6IFJlbW92ZWQuCisg
ICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vb3BlbndlYnJ0Yy9SZWFsdGltZVZpZGVvU291
cmNlT3dyLmg6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vbW9jay9Nb2NrTWVkaWFFbmRw
b2ludC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vbW9jay9Nb2NrTWVkaWFFbmRw
b2ludC5oOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL21vY2svTW9ja1JlYWx0aW1lTWVk
aWFTb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TW9ja1JlYWx0aW1lTWVkaWFTb3VyY2U6
Ok1vY2tSZWFsdGltZU1lZGlhU291cmNlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tb2NrL01vY2tS
ZWFsdGltZU1lZGlhU291cmNlLmg6CisgICAgICAgICogdGVzdGluZy9JbnRlcm5hbHMuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjpJbnRlcm5hbHMpOgorICAgICAgICAoV2ViQ29y
ZTo6SW50ZXJuYWxzOjplbmFibGVNb2NrTWVkaWFFbmRwb2ludCk6IERlbGV0ZWQuCisgICAgICAg
ICogdGVzdGluZy9JbnRlcm5hbHMuaDoKKworMjAxNy0xMC0wNCAgWW91ZW5uIEZhYmxldCAgPHlv
dWVubkBhcHBsZS5jb20+CisKICAgICAgICAgQWRkIHF1b3RhIHRvIGNhY2hlIEFQSQogICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc3NTUyCiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNvcmUvQ01h
a2VMaXN0cy50eHQKaW5kZXggMWNjMTZjN2QxZmFiZGVmNjU3OGI0MjIxMTFkYmI1NjVlMzkwNDg5
ZC4uN2YyMmU1MTZmOTdhMjk3ZGQ1NDhlNzVjZWUwODc3YTFjNTYyNWYxYSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VM
aXN0cy50eHQKQEAgLTEwOTMsOCArMTA5Myw2IEBAIHNldChXZWJDb3JlX1NPVVJDRVMKICAgICBN
b2R1bGVzL21lZGlhc3RyZWFtL01lZGlhRGV2aWNlcy5jcHAKICAgICBNb2R1bGVzL21lZGlhc3Ry
ZWFtL01lZGlhRGV2aWNlc0VudW1lcmF0aW9uUmVxdWVzdC5jcHAKICAgICBNb2R1bGVzL21lZGlh
c3RyZWFtL01lZGlhRGV2aWNlc1JlcXVlc3QuY3BwCi0gICAgTW9kdWxlcy9tZWRpYXN0cmVhbS9N
ZWRpYUVuZHBvaW50UGVlckNvbm5lY3Rpb24uY3BwCi0gICAgTW9kdWxlcy9tZWRpYXN0cmVhbS9N
ZWRpYUVuZHBvaW50U2Vzc2lvbkRlc2NyaXB0aW9uLmNwcAogICAgIE1vZHVsZXMvbWVkaWFzdHJl
YW0vTWVkaWFTdHJlYW0uY3BwCiAgICAgTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbUV2
ZW50LmNwcAogICAgIE1vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1SZWdpc3RyeS5jcHAK
QEAgLTExMTYsNyArMTExNCw2IEBAIHNldChXZWJDb3JlX1NPVVJDRVMKICAgICBNb2R1bGVzL21l
ZGlhc3RyZWFtL1JUQ1J0cFRyYW5zY2VpdmVyLmNwcAogICAgIE1vZHVsZXMvbWVkaWFzdHJlYW0v
UlRDU2Vzc2lvbkRlc2NyaXB0aW9uLmNwcAogICAgIE1vZHVsZXMvbWVkaWFzdHJlYW0vUlRDVHJh
Y2tFdmVudC5jcHAKLSAgICBNb2R1bGVzL21lZGlhc3RyZWFtL1NEUFByb2Nlc3Nvci5jcHAKICAg
ICBNb2R1bGVzL21lZGlhc3RyZWFtL1VzZXJNZWRpYUNvbnRyb2xsZXIuY3BwCiAgICAgTW9kdWxl
cy9tZWRpYXN0cmVhbS9Vc2VyTWVkaWFSZXF1ZXN0LmNwcAogCkBAIC0yNTU0LDEzICsyNTUxLDEx
IEBAIHNldChXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGlt
ZU1lZGlhU291cmNlLmNwcAogICAgIHBsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lTWVkaWFT
b3VyY2VDZW50ZXIuY3BwCiAgICAgcGxhdGZvcm0vbWVkaWFzdHJlYW0vUmVhbHRpbWVNZWRpYVNv
dXJjZVNldHRpbmdzLmNwcAotICAgIHBsYXRmb3JtL21lZGlhc3RyZWFtL1NEUFByb2Nlc3NvclNj
cmlwdFJlc291cmNlLmNwcAogCiAgICAgcGxhdGZvcm0vbWVkaWFzdHJlYW0vbGlid2VicnRjL0xp
YldlYlJUQ1Byb3ZpZGVyLmNwcAogCiAgICAgcGxhdGZvcm0vbW9jay9EZXZpY2VPcmllbnRhdGlv
bkNsaWVudE1vY2suY3BwCiAgICAgcGxhdGZvcm0vbW9jay9HZW9sb2NhdGlvbkNsaWVudE1vY2su
Y3BwCi0gICAgcGxhdGZvcm0vbW9jay9Nb2NrTWVkaWFFbmRwb2ludC5jcHAKICAgICBwbGF0Zm9y
bS9tb2NrL01vY2tSZWFsdGltZUF1ZGlvU291cmNlLmNwcAogICAgIHBsYXRmb3JtL21vY2svTW9j
a1JlYWx0aW1lTWVkaWFTb3VyY2UuY3BwCiAgICAgcGxhdGZvcm0vbW9jay9Nb2NrUmVhbHRpbWVN
ZWRpYVNvdXJjZUNlbnRlci5jcHAKQEAgLTM4ODIsMjQgKzM4NzcsNiBAQCBpZiAoV2ViQ29yZV9V
U0VSX0FHRU5UX1NDUklQVFMpCiAgICAgbGlzdChBUFBFTkQgV2ViQ29yZV9ERVJJVkVEX1NPVVJD
RVMgJHtERVJJVkVEX1NPVVJDRVNfV0VCQ09SRV9ESVJ9L1VzZXJBZ2VudFNjcmlwdHNEYXRhLmNw
cCkKIGVuZGlmICgpCiAKLWlmIChFTkFCTEVfV0VCX1JUQykKLSAgICAjIE5lY2Vzc2FyeSB2YXJp
YWJsZXM6Ci0gICAgIyBXZWJDb3JlX1NEUF9QUk9DRVNTT1JfU0NSSVBUUyBjb250YWluaW5nIHRo
ZSBKYXZhU2NyaXB0IHNvdXJjZXMgbGlzdAotICAgICMgV2ViQ29yZV9TRFBfUFJPQ0VTU09SX1ND
UklQVFNfREVQRU5ERU5DSUVTIGNvbnRhaW5pbmcgdGhlIHNvdXJjZSBmaWxlIHRoYXQgd2lsbCBs
b2FkIHRoZSBzY3JpcHRzIHRvIGFkZCB0aGUgcHJvcGVyCi0gICAgIyAgIGRlcGVuZGVuY3kgYW5k
IGhhdmluZyB0aGVtIGJ1aWx0IGF0IHRoZSByaWdodCBtb21lbnQKLSAgICBzZXQoV2ViQ29yZV9T
RFBfUFJPQ0VTU09SX1NDUklQVFMgJHtXRUJDT1JFX0RJUn0vTW9kdWxlcy9tZWRpYXN0cmVhbS9z
ZHAuanMpCi0gICAgc2V0KFdlYkNvcmVfU0RQX1BST0NFU1NPUl9TQ1JJUFRTX0RFUEVOREVOQ0lF
UyAke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9TRFBQcm9jZXNzb3JTY3JpcHRS
ZXNvdXJjZS5jcHApCi0KLSAgICBNQUtFX0pTX0ZJTEVfQVJSQVlTKAotICAgICAgICAke0RFUklW
RURfU09VUkNFU19XRUJDT1JFX0RJUn0vU0RQUHJvY2Vzc29yU2NyaXB0c0RhdGEuY3BwCi0gICAg
ICAgICR7REVSSVZFRF9TT1VSQ0VTX1dFQkNPUkVfRElSfS9TRFBQcm9jZXNzb3JTY3JpcHRzRGF0
YS5oCi0gICAgICAgIFdlYkNvcmUKLSAgICAgICAgV2ViQ29yZV9TRFBfUFJPQ0VTU09SX1NDUklQ
VFMKLSAgICAgICAgV2ViQ29yZV9TRFBfUFJPQ0VTU09SX1NDUklQVFNfREVQRU5ERU5DSUVTCi0g
ICAgKQotICAgIGxpc3QoQVBQRU5EIFdlYkNvcmVfREVSSVZFRF9TT1VSQ0VTICR7REVSSVZFRF9T
T1VSQ0VTX1dFQkNPUkVfRElSfS9TRFBQcm9jZXNzb3JTY3JpcHRzRGF0YS5jcHApCi1lbmRpZiAo
KQotCiAjIEdlbmVyYXRlIHBsdWctaW4gcmVzb3VyY2VzCiBhZGRfY3VzdG9tX2NvbW1hbmQoCiAg
ICAgT1VUUFVUICR7REVSSVZFRF9TT1VSQ0VTX1dFQkNPUkVfRElSfS9QbHVnSW5zUmVzb3VyY2Vz
RGF0YS5jcHAgJHtERVJJVkVEX1NPVVJDRVNfV0VCQ09SRV9ESVJ9L1BsdWdJbnNSZXNvdXJjZXMu
aApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZSBiL1NvdXJj
ZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UKaW5kZXggMWQ1ZWYwMjBiNGMyZTlmYmIwYmUz
MTAxYTgwNzI5ZDdhNjllOWZlZS4uZDM2YTE5ODdjNmQwN2FiMGFjNTQ0NzU5NmExYjRhNGQzYjgx
OGY3ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtlCkBAIC0xMTg0LDIzICsxMTg0LDYg
QEAgQ29sb3JEYXRhLmNwcCA6IHBsYXRmb3JtL0NvbG9yRGF0YS5ncGVyZiAkKFdlYkNvcmUpL21h
a2UtaGFzaC10b29scy5wbAogCiAjIC0tLS0tLS0tCiAKLSMgV2ViUlRDIHNjcmlwdHMKLQotV0VC
Q09SRV9TRFBfUFJPQ0VTU09SX1NDUklQVFMgPSAKLQotaWZlcSAoJChPUyksTUFDT1MpCi0gICAg
V0VCQ09SRV9TRFBfUFJPQ0VTU09SX1NDUklQVFMgOj0gJChXRUJDT1JFX1NEUF9QUk9DRVNTT1Jf
U0NSSVBUUykgJChXZWJDb3JlKS9Nb2R1bGVzL21lZGlhc3RyZWFtL3NkcC5qcwotZW5kaWYKLQot
aWZkZWYgV0VCQ09SRV9TRFBfUFJPQ0VTU09SX1NDUklQVFMKLWFsbCA6IFNEUFByb2Nlc3NvclNj
cmlwdHNEYXRhLmgKLQotU0RQUHJvY2Vzc29yU2NyaXB0c0RhdGEuaCA6ICQoSmF2YVNjcmlwdENv
cmVfU0NSSVBUU19ESVIpL21ha2UtanMtZmlsZS1hcnJheXMucHkgJChXRUJDT1JFX1NEUF9QUk9D
RVNTT1JfU0NSSVBUUykKLQkkKFBZVEhPTikgJChKYXZhU2NyaXB0Q29yZV9TQ1JJUFRTX0RJUikv
bWFrZS1qcy1maWxlLWFycmF5cy5weSAtbiBXZWJDb3JlICRAIFNEUFByb2Nlc3NvclNjcmlwdHNE
YXRhLmNwcCAkKFdFQkNPUkVfU0RQX1BST0NFU1NPUl9TQ1JJUFRTKQotZW5kaWYKLQotIyAtLS0t
LS0tLQotCiAjIHVzZXIgYWdlbnQgc3R5bGUgc2hlZXRzCiAKIFVTRVJfQUdFTlRfU1RZTEVfU0hF
RVRTID0gJChXZWJDb3JlKS9jc3MvaHRtbC5jc3MgJChXZWJDb3JlKS9jc3MvcXVpcmtzLmNzcyAk
KFdlYkNvcmUpL2Nzcy9wbHVnSW5zLmNzcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9tZWRpYXN0cmVhbS9NZWRpYUVuZHBvaW50UGVlckNvbm5lY3Rpb24uY3BwIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYUVuZHBvaW50UGVlckNvbm5lY3Rpb24u
Y3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZTkyNTI3YWUyZmQ2NzZhNzczOWQ0
Zjc5Yzk2ZGY2NmZlMDViMGEwLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFFbmRwb2lu
dFBlZXJDb25uZWN0aW9uLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDg5MyArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDE1IEVyaWNzc29uIEFCLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogICAgaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICog
ICAgZGlzdHJpYnV0aW9uLgotICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBFcmljc3NvbiBub3Ig
dGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotICogICAgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
LSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0j
aW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiTWVkaWFFbmRwb2ludFBlZXJDb25uZWN0aW9u
LmgiCi0KLSNpZiBFTkFCTEUoV0VCX1JUQykKLQotI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKLSNp
bmNsdWRlICJKU1JUQ1Nlc3Npb25EZXNjcmlwdGlvbi5oIgotI2luY2x1ZGUgIk1lZGlhRW5kcG9p
bnRTZXNzaW9uQ29uZmlndXJhdGlvbi5oIgotI2luY2x1ZGUgIk1lZGlhRW5kcG9pbnRTZXNzaW9u
RGVzY3JpcHRpb24uaCIKLSNpbmNsdWRlICJNZWRpYVN0cmVhbS5oIgotI2luY2x1ZGUgIk1lZGlh
U3RyZWFtRXZlbnQuaCIKLSNpbmNsdWRlICJNZWRpYVN0cmVhbVRyYWNrLmgiCi0jaW5jbHVkZSAi
Tm90SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlICJQZWVyTWVkaWFEZXNjcmlwdGlvbi5oIgotI2lu
Y2x1ZGUgIlJUQ0Fuc3dlck9wdGlvbnMuaCIKLSNpbmNsdWRlICJSVENDb25maWd1cmF0aW9uLmgi
Ci0jaW5jbHVkZSAiUlRDSWNlQ2FuZGlkYXRlLmgiCi0jaW5jbHVkZSAiUlRDT2ZmZXJPcHRpb25z
LmgiCi0jaW5jbHVkZSAiUlRDUGVlckNvbm5lY3Rpb24uaCIKLSNpbmNsdWRlICJSVENQZWVyQ29u
bmVjdGlvbkljZUV2ZW50LmgiCi0jaW5jbHVkZSAiUlRDUnRwVHJhbnNjZWl2ZXIuaCIKLSNpbmNs
dWRlICJSVENUcmFja0V2ZW50LmgiCi0jaW5jbHVkZSAiU0RQUHJvY2Vzc29yLmgiCi0jaW5jbHVk
ZSA8d3RmL0Z1bmN0aW9uLmg+Ci0jaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KLSNpbmNsdWRl
IDx3dGYvdGV4dC9CYXNlNjQuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi11c2luZyBuYW1l
c3BhY2UgUGVlckNvbm5lY3Rpb247Ci0KLXVzaW5nIE1lZGlhRGVzY3JpcHRpb25WZWN0b3IgPSBW
ZWN0b3I8UGVlck1lZGlhRGVzY3JpcHRpb24+OwotdXNpbmcgUnRwVHJhbnNjZWl2ZXJWZWN0b3Ig
PSBWZWN0b3I8UmVmUHRyPFJUQ1J0cFRyYW5zY2VpdmVyPj47Ci0KLS8vIFdlIHVzZSBiYXNlNjQg
dG8gZ2VuZXJhdGUgdGhlIHJhbmRvbSBzdHJpbmdzIHNvIHdlIG5lZWQgYSBzaXplIHRoYXQgYXZv
aWRzIHBhZGRpbmcgdG8gZ2V0IGljZS1jaGFycy4KLXN0YXRpYyBjb25zdCBzaXplX3QgY25hbWVT
aXplID0gMTg7Ci0vLyBTaXplIHJhbmdlIGZyb20gNCB0byAyNTYgaWNlLWNoYXJzIGRlZmluZWQg
aW4gUkZDIDUyNDUuCi1zdGF0aWMgY29uc3Qgc2l6ZV90IGljZVVmcmFnU2l6ZSA9IDY7Ci0vLyBT
aXplIHJhbmdlIGZyb20gMjIgdG8gMjU2IGljZS1jaGFycyBkZWZpbmVkIGluIFJGQyA1MjQ1Lgot
c3RhdGljIGNvbnN0IHNpemVfdCBpY2VQYXNzd29yZFNpemUgPSAyNDsKLQotI2lmICFVU0UoTElC
V0VCUlRDKQotc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxQZWVyQ29ubmVjdGlvbkJhY2tlbmQ+IGNy
ZWF0ZU1lZGlhRW5kcG9pbnRQZWVyQ29ubmVjdGlvbihSVENQZWVyQ29ubmVjdGlvbiYgcGVlckNv
bm5lY3Rpb24pCi17Ci0gICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxQZWVyQ29ubmVjdGlvbkJh
Y2tlbmQ+KG5ldyBNZWRpYUVuZHBvaW50UGVlckNvbm5lY3Rpb24ocGVlckNvbm5lY3Rpb24pKTsK
LX0KLQotQ3JlYXRlUGVlckNvbm5lY3Rpb25CYWNrZW5kIFBlZXJDb25uZWN0aW9uQmFja2VuZDo6
Y3JlYXRlID0gY3JlYXRlTWVkaWFFbmRwb2ludFBlZXJDb25uZWN0aW9uOwotI2VuZGlmCi0KLXN0
YXRpYyBTdHJpbmcgcmFuZG9tU3RyaW5nKHNpemVfdCBzaXplKQotewotICAgIHVuc2lnbmVkIGNo
YXIgcmFuZG9tVmFsdWVzW3NpemVdOwotICAgIGNyeXB0b2dyYXBoaWNhbGx5UmFuZG9tVmFsdWVz
KHJhbmRvbVZhbHVlcywgc2l6ZSk7Ci0gICAgcmV0dXJuIGJhc2U2NEVuY29kZShyYW5kb21WYWx1
ZXMsIHNpemUpOwotfQotCi1NZWRpYUVuZHBvaW50UGVlckNvbm5lY3Rpb246Ok1lZGlhRW5kcG9p
bnRQZWVyQ29ubmVjdGlvbihSVENQZWVyQ29ubmVjdGlvbiYgcGVlckNvbm5lY3Rpb24pCi0gICAg
OiBQZWVyQ29ubmVjdGlvbkJhY2tlbmQocGVlckNvbm5lY3Rpb24pCi0gICAgLCBtX21lZGlhRW5k
cG9pbnQoTWVkaWFFbmRwb2ludDo6Y3JlYXRlKCp0aGlzKSkKLSAgICAsIG1fc2RwUHJvY2Vzc29y
KHN0ZDo6bWFrZV91bmlxdWU8U0RQUHJvY2Vzc29yPihtX3BlZXJDb25uZWN0aW9uLnNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoKSkpCi0gICAgLCBtX2NuYW1lKHJhbmRvbVN0cmluZyhjbmFtZVNpemUp
KQotICAgICwgbV9pY2VVZnJhZyhyYW5kb21TdHJpbmcoaWNlVWZyYWdTaXplKSkKLSAgICAsIG1f
aWNlUGFzc3dvcmQocmFuZG9tU3RyaW5nKGljZVBhc3N3b3JkU2l6ZSkpCi17Ci0gICAgQVNTRVJU
KG1fbWVkaWFFbmRwb2ludCk7Ci0KLSAgICBtX2RlZmF1bHRBdWRpb1BheWxvYWRzID0gbV9tZWRp
YUVuZHBvaW50LT5nZXREZWZhdWx0QXVkaW9QYXlsb2FkcygpOwotICAgIG1fZGVmYXVsdFZpZGVv
UGF5bG9hZHMgPSBtX21lZGlhRW5kcG9pbnQtPmdldERlZmF1bHRWaWRlb1BheWxvYWRzKCk7Ci0K
LSAgICAvLyBUYXNrcyAoc2VlIHJ1blRhc2soKSkgd2lsbCBiZSBkZWZlcnJlZCB1bnRpbCB3ZSBn
ZXQgdGhlIERUTFMgZmluZ2VycHJpbnQuCi0gICAgbV9tZWRpYUVuZHBvaW50LT5nZW5lcmF0ZUR0
bHNJbmZvKCk7Ci19Ci0KLXN0YXRpYyBSVENSdHBUcmFuc2NlaXZlciogbWF0Y2hUcmFuc2NlaXZl
cihjb25zdCBSdHBUcmFuc2NlaXZlclZlY3RvciYgdHJhbnNjZWl2ZXJzLCBjb25zdCBXVEY6OkZ1
bmN0aW9uPGJvb2woUlRDUnRwVHJhbnNjZWl2ZXImKT4mIG1hdGNoRnVuY3Rpb24pCi17Ci0gICAg
Zm9yIChhdXRvJiB0cmFuc2NlaXZlciA6IHRyYW5zY2VpdmVycykgewotICAgICAgICBpZiAobWF0
Y2hGdW5jdGlvbigqdHJhbnNjZWl2ZXIpKQotICAgICAgICAgICAgcmV0dXJuIHRyYW5zY2VpdmVy
LmdldCgpOwotICAgIH0KLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQotc3RhdGljIFJUQ1J0cFRy
YW5zY2VpdmVyKiBtYXRjaFRyYW5zY2VpdmVyQnlNaWQoY29uc3QgUnRwVHJhbnNjZWl2ZXJWZWN0
b3ImIHRyYW5zY2VpdmVycywgY29uc3QgU3RyaW5nJiBtaWQpCi17Ci0gICAgcmV0dXJuIG1hdGNo
VHJhbnNjZWl2ZXIodHJhbnNjZWl2ZXJzLCBbJm1pZF0gKFJUQ1J0cFRyYW5zY2VpdmVyJiBjdXJy
ZW50KSB7Ci0gICAgICAgIHJldHVybiBjdXJyZW50Lm1pZCgpID09IG1pZDsKLSAgICB9KTsKLX0K
LQotc3RhdGljIGJvb2wgaGFzVW5hc3NvY2lhdGVkVHJhbnNjZWl2ZXJzKGNvbnN0IFJ0cFRyYW5z
Y2VpdmVyVmVjdG9yJiB0cmFuc2NlaXZlcnMpCi17Ci0gICAgcmV0dXJuIG1hdGNoVHJhbnNjZWl2
ZXIodHJhbnNjZWl2ZXJzLCBbXSAoUlRDUnRwVHJhbnNjZWl2ZXImIGN1cnJlbnQpIHsKLSAgICAg
ICAgcmV0dXJuIGN1cnJlbnQubWlkKCkuaXNOdWxsKCkgJiYgIWN1cnJlbnQuc3RvcHBlZCgpOwot
ICAgIH0pOwotfQotCi12b2lkIE1lZGlhRW5kcG9pbnRQZWVyQ29ubmVjdGlvbjo6cnVuVGFzayhG
dW5jdGlvbjx2b2lkICgpPiYmIHRhc2spCi17Ci0gICAgaWYgKG1fZHRsc0ZpbmdlcnByaW50Lmlz
TnVsbCgpKSB7Ci0gICAgICAgIC8vIE9ubHkgb25lIHRhc2sgbmVlZHMgdG8gYmUgZGVmZXJyZWQg
c2luY2UgaXQgd2lsbCBob2xkIG9mZiBhbnkgb3RoZXJzIHVudGlsIGNvbXBsZXRlZC4KLSAgICAg
ICAgQVNTRVJUKCFtX2luaXRpYWxEZWZlcnJlZFRhc2spOwotICAgICAgICBtX2luaXRpYWxEZWZl
cnJlZFRhc2sgPSBXVEZNb3ZlKHRhc2spOwotICAgIH0gZWxzZQotICAgICAgICBjYWxsT25NYWlu
VGhyZWFkKFdURk1vdmUodGFzaykpOwotfQotCi12b2lkIE1lZGlhRW5kcG9pbnRQZWVyQ29ubmVj
dGlvbjo6c3RhcnRSdW5uaW5nVGFza3MoKQotewotICAgIGlmICghbV9pbml0aWFsRGVmZXJyZWRU
YXNrKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2luaXRpYWxEZWZlcnJlZFRhc2soKTsKLSAg
ICBtX2luaXRpYWxEZWZlcnJlZFRhc2sgPSBudWxscHRyOwotfQotCi12b2lkIE1lZGlhRW5kcG9p
bnRQZWVyQ29ubmVjdGlvbjo6ZG9DcmVhdGVPZmZlcihSVENPZmZlck9wdGlvbnMmJiBvcHRpb25z
KQotewotICAgIHJ1blRhc2soW3RoaXMsIHByb3RlY3RlZE9wdGlvbnMgPSBXVEZNb3ZlKG9wdGlv
bnMpXSgpIG11dGFibGUgewotICAgICAgICBjcmVhdGVPZmZlclRhc2socHJvdGVjdGVkT3B0aW9u
cyk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgTWVkaWFFbmRwb2ludFBlZXJDb25uZWN0aW9uOjpjcmVh
dGVPZmZlclRhc2soY29uc3QgUlRDT2ZmZXJPcHRpb25zJikKLXsKLSAgICBBU1NFUlQoIW1fZHRs
c0ZpbmdlcnByaW50LmlzRW1wdHkoKSk7Ci0KLSAgICBNZWRpYUVuZHBvaW50U2Vzc2lvbkRlc2Ny
aXB0aW9uKiBsb2NhbERlc2NyaXB0aW9uID0gaW50ZXJuYWxMb2NhbERlc2NyaXB0aW9uKCk7Ci0g
ICAgUmVmUHRyPE1lZGlhRW5kcG9pbnRTZXNzaW9uQ29uZmlndXJhdGlvbj4gY29uZmlndXJhdGlv
blNuYXBzaG90ID0gbG9jYWxEZXNjcmlwdGlvbiA/Ci0gICAgICAgIGxvY2FsRGVzY3JpcHRpb24t
PmNvbmZpZ3VyYXRpb24oKS0+Y2xvbmUoKSA6IE1lZGlhRW5kcG9pbnRTZXNzaW9uQ29uZmlndXJh
dGlvbjo6Y3JlYXRlKCk7Ci0KLSAgICBjb25maWd1cmF0aW9uU25hcHNob3QtPnNldEJ1bmRsZVBv
bGljeShtX3BlZXJDb25uZWN0aW9uLmdldENvbmZpZ3VyYXRpb24oKS5idW5kbGVQb2xpY3kpOwot
ICAgIGNvbmZpZ3VyYXRpb25TbmFwc2hvdC0+c2V0U2Vzc2lvblZlcnNpb24obV9zZHBPZmZlclNl
c3Npb25WZXJzaW9uKyspOwotCi0gICAgYXV0byB0cmFuc2NlaXZlcnMgPSBSdHBUcmFuc2NlaXZl
clZlY3RvcihtX3BlZXJDb25uZWN0aW9uLmdldFRyYW5zY2VpdmVycygpKTsKLQotICAgIC8vIFJl
bW92ZSBhbnkgdHJhbnNjZWl2ZXIgb2JqZWN0cyBmcm9tIHRyYW5zY2VpdmVycyB0aGF0IGNhbiBi
ZSBtYXRjaGVkIHRvIGFuIGV4aXN0aW5nIG1lZGlhIGRlc2NyaXB0aW9uLgotICAgIGZvciAoYXV0
byYgbWVkaWFEZXNjcmlwdGlvbiA6IGNvbmZpZ3VyYXRpb25TbmFwc2hvdC0+bWVkaWFEZXNjcmlw
dGlvbnMoKSkgewotICAgICAgICBpZiAoIW1lZGlhRGVzY3JpcHRpb24ucG9ydCkgewotICAgICAg
ICAgICAgLy8gVGhpcyBtZWRpYSBkZXNjcmlwdGlvbiBzaG91bGQgYmUgcmVjeWNsZWQuCi0gICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIFJUQ1J0cFRyYW5zY2VpdmVy
KiB0cmFuc2NlaXZlciA9IG1hdGNoVHJhbnNjZWl2ZXJCeU1pZCh0cmFuc2NlaXZlcnMsIG1lZGlh
RGVzY3JpcHRpb24ubWlkKTsKLSAgICAgICAgaWYgKCF0cmFuc2NlaXZlcikKLSAgICAgICAgICAg
IGNvbnRpbnVlOwotCi0gICAgICAgIG1lZGlhRGVzY3JpcHRpb24ubW9kZSA9IHRyYW5zY2VpdmVy
LT5kaXJlY3Rpb25TdHJpbmcoKTsKLSAgICAgICAgaWYgKHRyYW5zY2VpdmVyLT5oYXNTZW5kaW5n
RGlyZWN0aW9uKCkpIHsKLSAgICAgICAgICAgIGF1dG8mIHNlbmRlciA9IHRyYW5zY2VpdmVyLT5z
ZW5kZXIoKTsKLQotICAgICAgICAgICAgbWVkaWFEZXNjcmlwdGlvbi5tZWRpYVN0cmVhbUlkID0g
c2VuZGVyLm1lZGlhU3RyZWFtSWRzKClbMF07Ci0gICAgICAgICAgICBtZWRpYURlc2NyaXB0aW9u
Lm1lZGlhU3RyZWFtVHJhY2tJZCA9IHNlbmRlci50cmFja0lkKCk7Ci0gICAgICAgIH0KLQotICAg
ICAgICB0cmFuc2NlaXZlcnMucmVtb3ZlRmlyc3QodHJhbnNjZWl2ZXIpOwotICAgIH0KLQotICAg
IC8vIEFkZCBtZWRpYSBkZXNjcmlwdGlvbnMgZm9yIHJlbWFpbmluZyB0cmFuc2NlaXZlcnMuCi0g
ICAgZm9yIChhdXRvJiB0cmFuc2NlaXZlciA6IHRyYW5zY2VpdmVycykgewotICAgICAgICBQZWVy
TWVkaWFEZXNjcmlwdGlvbiBtZWRpYURlc2NyaXB0aW9uOwotICAgICAgICBhdXRvJiBzZW5kZXIg
PSB0cmFuc2NlaXZlci0+c2VuZGVyKCk7Ci0KLSAgICAgICAgbWVkaWFEZXNjcmlwdGlvbi5tb2Rl
ID0gdHJhbnNjZWl2ZXItPmRpcmVjdGlvblN0cmluZygpOwotICAgICAgICBtZWRpYURlc2NyaXB0
aW9uLm1pZCA9IHRyYW5zY2VpdmVyLT5wcm92aXNpb25hbE1pZCgpOwotICAgICAgICBtZWRpYURl
c2NyaXB0aW9uLm1lZGlhU3RyZWFtSWQgPSBzZW5kZXIubWVkaWFTdHJlYW1JZHMoKVswXTsKLSAg
ICAgICAgbWVkaWFEZXNjcmlwdGlvbi50eXBlID0gc2VuZGVyLnRyYWNrS2luZCgpOwotICAgICAg
ICBtZWRpYURlc2NyaXB0aW9uLnBheWxvYWRzID0gc2VuZGVyLnRyYWNrS2luZCgpID09ICJhdWRp
byIgPyBtX2RlZmF1bHRBdWRpb1BheWxvYWRzIDogbV9kZWZhdWx0VmlkZW9QYXlsb2FkczsKLSAg
ICAgICAgbWVkaWFEZXNjcmlwdGlvbi5kdGxzRmluZ2VycHJpbnRIYXNoRnVuY3Rpb24gPSBtX2R0
bHNGaW5nZXJwcmludEZ1bmN0aW9uOwotICAgICAgICBtZWRpYURlc2NyaXB0aW9uLmR0bHNGaW5n
ZXJwcmludCA9IG1fZHRsc0ZpbmdlcnByaW50OwotICAgICAgICBtZWRpYURlc2NyaXB0aW9uLmNu
YW1lID0gbV9jbmFtZTsKLSAgICAgICAgbWVkaWFEZXNjcmlwdGlvbi5hZGRTc3JjKGNyeXB0b2dy
YXBoaWNhbGx5UmFuZG9tTnVtYmVyKCkpOwotICAgICAgICBtZWRpYURlc2NyaXB0aW9uLmljZVVm
cmFnID0gbV9pY2VVZnJhZzsKLSAgICAgICAgbWVkaWFEZXNjcmlwdGlvbi5pY2VQYXNzd29yZCA9
IG1faWNlUGFzc3dvcmQ7Ci0KLSAgICAgICAgaWYgKHNlbmRlci50cmFjaygpKQotICAgICAgICAg
ICAgbWVkaWFEZXNjcmlwdGlvbi5tZWRpYVN0cmVhbVRyYWNrSWQgPSBzZW5kZXIudHJhY2tJZCgp
OwotCi0gICAgICAgIGNvbmZpZ3VyYXRpb25TbmFwc2hvdC0+YWRkTWVkaWFEZXNjcmlwdGlvbihX
VEZNb3ZlKG1lZGlhRGVzY3JpcHRpb24pKTsKLSAgICB9Ci0KLSAgICBTdHJpbmcgc2RwOwotICAg
IFNEUFByb2Nlc3Nvcjo6UmVzdWx0IHJlc3VsdCA9IG1fc2RwUHJvY2Vzc29yLT5nZW5lcmF0ZSgq
Y29uZmlndXJhdGlvblNuYXBzaG90LCBzZHApOwotICAgIGlmIChyZXN1bHQgIT0gU0RQUHJvY2Vz
c29yOjpSZXN1bHQ6OlN1Y2Nlc3MpIHsKLSAgICAgICAgY3JlYXRlT2ZmZXJGYWlsZWQoRXhjZXB0
aW9uIHsgT3BlcmF0aW9uRXJyb3IsICJTRFBQcm9jZXNzb3IgaW50ZXJuYWwgZXJyb3IiIH0pOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGNyZWF0ZU9mZmVyU3VjY2VlZGVkKFdURk1vdmUo
c2RwKSk7Ci19Ci0KLXZvaWQgTWVkaWFFbmRwb2ludFBlZXJDb25uZWN0aW9uOjpkb0NyZWF0ZUFu
c3dlcihSVENBbnN3ZXJPcHRpb25zJiYgb3B0aW9ucykKLXsKLSAgICBydW5UYXNrKFt0aGlzLCBw
cm90ZWN0ZWRPcHRpb25zID0gV1RGTW92ZShvcHRpb25zKV0oKSBtdXRhYmxlIHsKLSAgICAgICAg
Y3JlYXRlQW5zd2VyVGFzayhwcm90ZWN0ZWRPcHRpb25zKTsKLSAgICB9KTsKLX0KLQotdm9pZCBN
ZWRpYUVuZHBvaW50UGVlckNvbm5lY3Rpb246OmNyZWF0ZUFuc3dlclRhc2soY29uc3QgUlRDQW5z
d2VyT3B0aW9ucyYpCi17Ci0gICAgQVNTRVJUKCFtX2R0bHNGaW5nZXJwcmludC5pc0VtcHR5KCkp
OwotCi0gICAgaWYgKCFpbnRlcm5hbFJlbW90ZURlc2NyaXB0aW9uKCkpIHsKLSAgICAgICAgY3Jl
YXRlQW5zd2VyRmFpbGVkKEV4Y2VwdGlvbiB7IEludmFsaWRTdGF0ZUVycm9yLCAiTm8gcmVtb3Rl
IGRlc2NyaXB0aW9uIHNldCIgfSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBNZWRp
YUVuZHBvaW50U2Vzc2lvbkRlc2NyaXB0aW9uKiBsb2NhbERlc2NyaXB0aW9uID0gaW50ZXJuYWxM
b2NhbERlc2NyaXB0aW9uKCk7Ci0gICAgUmVmUHRyPE1lZGlhRW5kcG9pbnRTZXNzaW9uQ29uZmln
dXJhdGlvbj4gY29uZmlndXJhdGlvblNuYXBzaG90ID0gbG9jYWxEZXNjcmlwdGlvbiA/Ci0gICAg
ICAgIGxvY2FsRGVzY3JpcHRpb24tPmNvbmZpZ3VyYXRpb24oKS0+Y2xvbmUoKSA6IE1lZGlhRW5k
cG9pbnRTZXNzaW9uQ29uZmlndXJhdGlvbjo6Y3JlYXRlKCk7Ci0KLSAgICBjb25maWd1cmF0aW9u
U25hcHNob3QtPnNldEJ1bmRsZVBvbGljeShtX3BlZXJDb25uZWN0aW9uLmdldENvbmZpZ3VyYXRp
b24oKS5idW5kbGVQb2xpY3kpOwotICAgIGNvbmZpZ3VyYXRpb25TbmFwc2hvdC0+c2V0U2Vzc2lv
blZlcnNpb24obV9zZHBBbnN3ZXJTZXNzaW9uVmVyc2lvbisrKTsKLQotICAgIGF1dG8gdHJhbnNj
ZWl2ZXJzID0gUnRwVHJhbnNjZWl2ZXJWZWN0b3IobV9wZWVyQ29ubmVjdGlvbi5nZXRUcmFuc2Nl
aXZlcnMoKSk7Ci0gICAgYXV0byYgcmVtb3RlTWVkaWFEZXNjcmlwdGlvbnMgPSBpbnRlcm5hbFJl
bW90ZURlc2NyaXB0aW9uKCktPmNvbmZpZ3VyYXRpb24oKS0+bWVkaWFEZXNjcmlwdGlvbnMoKTsK
LQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCByZW1vdGVNZWRpYURlc2NyaXB0aW9ucy5z
aXplKCk7ICsraSkgewotICAgICAgICBhdXRvJiByZW1vdGVNZWRpYURlc2NyaXB0aW9uID0gcmVt
b3RlTWVkaWFEZXNjcmlwdGlvbnNbaV07Ci0KLSAgICAgICAgYXV0byogdHJhbnNjZWl2ZXIgPSBt
YXRjaFRyYW5zY2VpdmVyQnlNaWQodHJhbnNjZWl2ZXJzLCByZW1vdGVNZWRpYURlc2NyaXB0aW9u
Lm1pZCk7Ci0gICAgICAgIGlmICghdHJhbnNjZWl2ZXIpIHsKLSAgICAgICAgICAgIExPR19FUlJP
UigiQ291bGQgbm90IGZpbmQgYSBtYXRjaGluZyB0cmFuc2NlaXZlciBmb3IgcmVtb3RlIGRlc2Ny
aXB0aW9uIHdoaWxlIGNyZWF0aW5nIGFuc3dlciIpOwotICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgIH0KLQotICAgICAgICBpZiAoaSA+PSBjb25maWd1cmF0aW9uU25hcHNob3QtPm1lZGlh
RGVzY3JpcHRpb25zKCkuc2l6ZSgpKSB7Ci0gICAgICAgICAgICBQZWVyTWVkaWFEZXNjcmlwdGlv
biBuZXdNZWRpYURlc2NyaXB0aW9uOwotCi0gICAgICAgICAgICBhdXRvJiBzZW5kZXIgPSB0cmFu
c2NlaXZlci0+c2VuZGVyKCk7Ci0gICAgICAgICAgICBpZiAoc2VuZGVyLnRyYWNrKCkpIHsKLSAg
ICAgICAgICAgICAgICBpZiAoc2VuZGVyLm1lZGlhU3RyZWFtSWRzKCkuc2l6ZSgpKQotICAgICAg
ICAgICAgICAgICAgICBuZXdNZWRpYURlc2NyaXB0aW9uLm1lZGlhU3RyZWFtSWQgPSBzZW5kZXIu
bWVkaWFTdHJlYW1JZHMoKVswXTsKLSAgICAgICAgICAgICAgICBuZXdNZWRpYURlc2NyaXB0aW9u
Lm1lZGlhU3RyZWFtVHJhY2tJZCA9IHNlbmRlci50cmFja0lkKCk7Ci0gICAgICAgICAgICAgICAg
bmV3TWVkaWFEZXNjcmlwdGlvbi5hZGRTc3JjKGNyeXB0b2dyYXBoaWNhbGx5UmFuZG9tTnVtYmVy
KCkpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBuZXdNZWRpYURlc2NyaXB0aW9uLm1v
ZGUgPSB0cmFuc2NlaXZlci0+ZGlyZWN0aW9uU3RyaW5nKCk7Ci0gICAgICAgICAgICBuZXdNZWRp
YURlc2NyaXB0aW9uLnR5cGUgPSByZW1vdGVNZWRpYURlc2NyaXB0aW9uLnR5cGU7Ci0gICAgICAg
ICAgICBuZXdNZWRpYURlc2NyaXB0aW9uLm1pZCA9IHJlbW90ZU1lZGlhRGVzY3JpcHRpb24ubWlk
OwotICAgICAgICAgICAgbmV3TWVkaWFEZXNjcmlwdGlvbi5kdGxzU2V0dXAgPSByZW1vdGVNZWRp
YURlc2NyaXB0aW9uLmR0bHNTZXR1cCA9PSAiYWN0aXZlIiA/ICJwYXNzaXZlIiA6ICJhY3RpdmUi
OwotICAgICAgICAgICAgbmV3TWVkaWFEZXNjcmlwdGlvbi5kdGxzRmluZ2VycHJpbnRIYXNoRnVu
Y3Rpb24gPSBtX2R0bHNGaW5nZXJwcmludEZ1bmN0aW9uOwotICAgICAgICAgICAgbmV3TWVkaWFE
ZXNjcmlwdGlvbi5kdGxzRmluZ2VycHJpbnQgPSBtX2R0bHNGaW5nZXJwcmludDsKLSAgICAgICAg
ICAgIG5ld01lZGlhRGVzY3JpcHRpb24uY25hbWUgPSBtX2NuYW1lOwotICAgICAgICAgICAgbmV3
TWVkaWFEZXNjcmlwdGlvbi5pY2VVZnJhZyA9IG1faWNlVWZyYWc7Ci0gICAgICAgICAgICBuZXdN
ZWRpYURlc2NyaXB0aW9uLmljZVBhc3N3b3JkID0gbV9pY2VQYXNzd29yZDsKLQotICAgICAgICAg
ICAgY29uZmlndXJhdGlvblNuYXBzaG90LT5hZGRNZWRpYURlc2NyaXB0aW9uKFdURk1vdmUobmV3
TWVkaWFEZXNjcmlwdGlvbikpOwotICAgICAgICB9Ci0KLSAgICAgICAgUGVlck1lZGlhRGVzY3Jp
cHRpb24mIGxvY2FsTWVkaWFEZXNjcmlwdGlvbiA9IGNvbmZpZ3VyYXRpb25TbmFwc2hvdC0+bWVk
aWFEZXNjcmlwdGlvbnMoKVtpXTsKLQotICAgICAgICBsb2NhbE1lZGlhRGVzY3JpcHRpb24ucGF5
bG9hZHMgPSByZW1vdGVNZWRpYURlc2NyaXB0aW9uLnBheWxvYWRzOwotICAgICAgICBsb2NhbE1l
ZGlhRGVzY3JpcHRpb24ucnRjcE11eCA9IHJlbW90ZU1lZGlhRGVzY3JpcHRpb24ucnRjcE11eDsK
LQotICAgICAgICBpZiAoIWxvY2FsTWVkaWFEZXNjcmlwdGlvbi5zc3Jjcy5zaXplKCkpCi0gICAg
ICAgICAgICBsb2NhbE1lZGlhRGVzY3JpcHRpb24uYWRkU3NyYyhjcnlwdG9ncmFwaGljYWxseVJh
bmRvbU51bWJlcigpKTsKLQotICAgICAgICBpZiAobG9jYWxNZWRpYURlc2NyaXB0aW9uLmR0bHNT
ZXR1cCA9PSAiYWN0cGFzcyIpCi0gICAgICAgICAgICBsb2NhbE1lZGlhRGVzY3JpcHRpb24uZHRs
c1NldHVwID0gInBhc3NpdmUiOwotCi0gICAgICAgIHRyYW5zY2VpdmVycy5yZW1vdmVGaXJzdCh0
cmFuc2NlaXZlcik7Ci0gICAgfQotCi0gICAgLy8gVW5hc3NvY2lhdGVkIChub24tc3RvcHBlZCkg
dHJhbnNjZWl2ZXJzIG5lZWQgdG8gYmUgbmVnb3RpYXRlZCBpbiBhIGZvbGxvdy11cCBvZmZlci4K
LSAgICBpZiAoaGFzVW5hc3NvY2lhdGVkVHJhbnNjZWl2ZXJzKHRyYW5zY2VpdmVycykpCi0gICAg
ICAgIG1hcmtBc05lZWRpbmdOZWdvdGlhdGlvbigpOwotCi0gICAgU3RyaW5nIHNkcDsKLSAgICBT
RFBQcm9jZXNzb3I6OlJlc3VsdCByZXN1bHQgPSBtX3NkcFByb2Nlc3Nvci0+Z2VuZXJhdGUoKmNv
bmZpZ3VyYXRpb25TbmFwc2hvdCwgc2RwKTsKLSAgICBpZiAocmVzdWx0ICE9IFNEUFByb2Nlc3Nv
cjo6UmVzdWx0OjpTdWNjZXNzKSB7Ci0gICAgICAgIGNyZWF0ZUFuc3dlckZhaWxlZChFeGNlcHRp
b24geyBPcGVyYXRpb25FcnJvciwgIlNEUFByb2Nlc3NvciBpbnRlcm5hbCBlcnJvciIgfSk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgY3JlYXRlQW5zd2VyU3VjY2VlZGVkKFdURk1vdmUo
c2RwKSk7Ci19Ci0KLXN0YXRpYyBSZWFsdGltZU1lZGlhU291cmNlTWFwIGNyZWF0ZVNvdXJjZU1h
cChjb25zdCBNZWRpYURlc2NyaXB0aW9uVmVjdG9yJiByZW1vdGVNZWRpYURlc2NyaXB0aW9ucywg
dW5zaWduZWQgbG9jYWxNZWRpYURlc2NyaXB0aW9uQ291bnQsIGNvbnN0IFJ0cFRyYW5zY2VpdmVy
VmVjdG9yJiB0cmFuc2NlaXZlcnMpCi17Ci0gICAgUmVhbHRpbWVNZWRpYVNvdXJjZU1hcCBzb3Vy
Y2VNYXA7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcmVtb3RlTWVkaWFEZXNjcmlw
dGlvbnMuc2l6ZSgpICYmIGkgPCBsb2NhbE1lZGlhRGVzY3JpcHRpb25Db3VudDsgKytpKSB7Ci0g
ICAgICAgIGF1dG8mIHJlbW90ZU1lZGlhRGVzY3JpcHRpb24gPSByZW1vdGVNZWRpYURlc2NyaXB0
aW9uc1tpXTsKLSAgICAgICAgaWYgKHJlbW90ZU1lZGlhRGVzY3JpcHRpb24udHlwZSAhPSAiYXVk
aW8iICYmIHJlbW90ZU1lZGlhRGVzY3JpcHRpb24udHlwZSAhPSAidmlkZW8iKQotICAgICAgICAg
ICAgY29udGludWU7Ci0KLSAgICAgICAgUlRDUnRwVHJhbnNjZWl2ZXIqIHRyYW5zY2VpdmVyID0g
bWF0Y2hUcmFuc2NlaXZlckJ5TWlkKHRyYW5zY2VpdmVycywgcmVtb3RlTWVkaWFEZXNjcmlwdGlv
bi5taWQpOwotICAgICAgICBpZiAodHJhbnNjZWl2ZXIpIHsKLSAgICAgICAgICAgIGlmICh0cmFu
c2NlaXZlci0+aGFzU2VuZGluZ0RpcmVjdGlvbigpICYmIHRyYW5zY2VpdmVyLT5zZW5kZXIoKS50
cmFjaygpKQotICAgICAgICAgICAgICAgIHNvdXJjZU1hcC5zZXQodHJhbnNjZWl2ZXItPm1pZCgp
LCAmdHJhbnNjZWl2ZXItPnNlbmRlcigpLnRyYWNrKCktPnNvdXJjZSgpKTsKLSAgICAgICAgfQot
ICAgIH0KLQotICAgIHJldHVybiBzb3VyY2VNYXA7Ci19Ci0KLXZvaWQgTWVkaWFFbmRwb2ludFBl
ZXJDb25uZWN0aW9uOjpkb1NldExvY2FsRGVzY3JpcHRpb24oUlRDU2Vzc2lvbkRlc2NyaXB0aW9u
JiBkZXNjcmlwdGlvbikKLXsKLSAgICBydW5UYXNrKFt0aGlzLCBwcm90ZWN0ZWREZXNjcmlwdGlv
biA9IFJlZlB0cjxSVENTZXNzaW9uRGVzY3JpcHRpb24+KCZkZXNjcmlwdGlvbildKCkgbXV0YWJs
ZSB7Ci0gICAgICAgIHNldExvY2FsRGVzY3JpcHRpb25UYXNrKFdURk1vdmUocHJvdGVjdGVkRGVz
Y3JpcHRpb24pKTsKLSAgICB9KTsKLX0KLQotdm9pZCBNZWRpYUVuZHBvaW50UGVlckNvbm5lY3Rp
b246OnNldExvY2FsRGVzY3JpcHRpb25UYXNrKFJlZlB0cjxSVENTZXNzaW9uRGVzY3JpcHRpb24+
JiYgZGVzY3JpcHRpb24pCi17Ci0gICAgaWYgKG1fcGVlckNvbm5lY3Rpb24uaXNDbG9zZWQoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byByZXN1bHQgPSBNZWRpYUVuZHBvaW50U2Vzc2lv
bkRlc2NyaXB0aW9uOjpjcmVhdGUoV1RGTW92ZShkZXNjcmlwdGlvbiksICptX3NkcFByb2Nlc3Nv
cik7Ci0gICAgaWYgKHJlc3VsdC5oYXNFeGNlcHRpb24oKSkgewotICAgICAgICBzZXRMb2NhbERl
c2NyaXB0aW9uRmFpbGVkKHJlc3VsdC5yZWxlYXNlRXhjZXB0aW9uKCkpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotICAgIGF1dG8gbmV3RGVzY3JpcHRpb24gPSByZXN1bHQucmVsZWFzZVJldHVy
blZhbHVlKCk7Ci0KLSAgICBjb25zdCBSdHBUcmFuc2NlaXZlclZlY3RvciYgdHJhbnNjZWl2ZXJz
ID0gbV9wZWVyQ29ubmVjdGlvbi5nZXRUcmFuc2NlaXZlcnMoKTsKLSAgICBjb25zdCBNZWRpYURl
c2NyaXB0aW9uVmVjdG9yJiBtZWRpYURlc2NyaXB0aW9ucyA9IG5ld0Rlc2NyaXB0aW9uLT5jb25m
aWd1cmF0aW9uKCktPm1lZGlhRGVzY3JpcHRpb25zKCk7Ci0gICAgTWVkaWFFbmRwb2ludFNlc3Np
b25EZXNjcmlwdGlvbiogbG9jYWxEZXNjcmlwdGlvbiA9IGludGVybmFsTG9jYWxEZXNjcmlwdGlv
bigpOwotICAgIHVuc2lnbmVkIHByZXZpb3VzTnVtYmVyT2ZNZWRpYURlc2NyaXB0aW9ucyA9IGxv
Y2FsRGVzY3JpcHRpb24gPyBsb2NhbERlc2NyaXB0aW9uLT5jb25maWd1cmF0aW9uKCktPm1lZGlh
RGVzY3JpcHRpb25zKCkuc2l6ZSgpIDogMDsKLSAgICBib29sIGhhc05ld01lZGlhRGVzY3JpcHRp
b25zID0gbWVkaWFEZXNjcmlwdGlvbnMuc2l6ZSgpID4gcHJldmlvdXNOdW1iZXJPZk1lZGlhRGVz
Y3JpcHRpb25zOwotICAgIGJvb2wgaXNJbml0aWF0b3IgPSBuZXdEZXNjcmlwdGlvbi0+dHlwZSgp
ID09IFJUQ1NkcFR5cGU6Ok9mZmVyOwotCi0gICAgaWYgKGhhc05ld01lZGlhRGVzY3JpcHRpb25z
KSB7Ci0gICAgICAgIE1lZGlhRW5kcG9pbnQ6OlVwZGF0ZVJlc3VsdCByZXN1bHQgPSBtX21lZGlh
RW5kcG9pbnQtPnVwZGF0ZVJlY2VpdmVDb25maWd1cmF0aW9uKG5ld0Rlc2NyaXB0aW9uLT5jb25m
aWd1cmF0aW9uKCksIGlzSW5pdGlhdG9yKTsKLQotICAgICAgICBpZiAocmVzdWx0ID09IE1lZGlh
RW5kcG9pbnQ6OlVwZGF0ZVJlc3VsdDo6U3VjY2Vzc1dpdGhJY2VSZXN0YXJ0KSB7Ci0gICAgICAg
ICAgICBpZiAobV9wZWVyQ29ubmVjdGlvbi5pY2VHYXRoZXJpbmdTdGF0ZSgpICE9IFJUQ0ljZUdh
dGhlcmluZ1N0YXRlOjpHYXRoZXJpbmcpCi0gICAgICAgICAgICAgICAgbV9wZWVyQ29ubmVjdGlv
bi51cGRhdGVJY2VHYXRoZXJpbmdTdGF0ZShSVENJY2VHYXRoZXJpbmdTdGF0ZTo6R2F0aGVyaW5n
KTsKLQotICAgICAgICAgICAgaWYgKG1fcGVlckNvbm5lY3Rpb24uaWNlQ29ubmVjdGlvblN0YXRl
KCkgIT0gUlRDSWNlQ29ubmVjdGlvblN0YXRlOjpDb21wbGV0ZWQpCi0gICAgICAgICAgICAgICAg
bV9wZWVyQ29ubmVjdGlvbi51cGRhdGVJY2VDb25uZWN0aW9uU3RhdGUoUlRDSWNlQ29ubmVjdGlv
blN0YXRlOjpDb25uZWN0ZWQpOwotCi0gICAgICAgICAgICBMT0dfRVJST1IoIklDRSByZXN0YXJ0
IGlzIG5vdCBpbXBsZW1lbnRlZCIpOwotICAgICAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKLQot
ICAgICAgICB9IGVsc2UgaWYgKHJlc3VsdCA9PSBNZWRpYUVuZHBvaW50OjpVcGRhdGVSZXN1bHQ6
OkZhaWxlZCkgewotICAgICAgICAgICAgc2V0TG9jYWxEZXNjcmlwdGlvbkZhaWxlZChFeGNlcHRp
b24geyBPcGVyYXRpb25FcnJvciwgIlVuYWJsZSB0byBhcHBseSBzZXNzaW9uIGRlc2NyaXB0aW9u
IiB9KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIEFzc29j
aWF0ZSBtZWRpYSBkZXNjcmlwdGlvbnMgd2l0aCB0cmFuc2NlaXZlcnMgKHNldCBwcm92aXNpb25h
bCBtaWQgdG8gJ2ZpbmFsJyBtaWQpLgotICAgICAgICBmb3IgKGF1dG8mIG1lZGlhRGVzY3JpcHRp
b24gOiBtZWRpYURlc2NyaXB0aW9ucykgewotICAgICAgICAgICAgUlRDUnRwVHJhbnNjZWl2ZXIq
IHRyYW5zY2VpdmVyID0gbWF0Y2hUcmFuc2NlaXZlcih0cmFuc2NlaXZlcnMsIFsmbWVkaWFEZXNj
cmlwdGlvbl0gKFJUQ1J0cFRyYW5zY2VpdmVyJiBjdXJyZW50KSB7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIGN1cnJlbnQucHJvdmlzaW9uYWxNaWQoKSA9PSBtZWRpYURlc2NyaXB0aW9uLm1pZDsK
LSAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgaWYgKHRyYW5zY2VpdmVyKQotICAgICAgICAg
ICAgICAgIHRyYW5zY2VpdmVyLT5zZXRNaWQodHJhbnNjZWl2ZXItPnByb3Zpc2lvbmFsTWlkKCkp
OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGludGVybmFsUmVtb3RlRGVzY3JpcHRpb24o
KSkgewotICAgICAgICBNZWRpYUVuZHBvaW50U2Vzc2lvbkNvbmZpZ3VyYXRpb24qIHJlbW90ZUNv
bmZpZ3VyYXRpb24gPSBpbnRlcm5hbFJlbW90ZURlc2NyaXB0aW9uKCktPmNvbmZpZ3VyYXRpb24o
KTsKLSAgICAgICAgUmVhbHRpbWVNZWRpYVNvdXJjZU1hcCBzZW5kU291cmNlTWFwID0gY3JlYXRl
U291cmNlTWFwKHJlbW90ZUNvbmZpZ3VyYXRpb24tPm1lZGlhRGVzY3JpcHRpb25zKCksIG1lZGlh
RGVzY3JpcHRpb25zLnNpemUoKSwgdHJhbnNjZWl2ZXJzKTsKLQotICAgICAgICBpZiAobV9tZWRp
YUVuZHBvaW50LT51cGRhdGVTZW5kQ29uZmlndXJhdGlvbihyZW1vdGVDb25maWd1cmF0aW9uLCBz
ZW5kU291cmNlTWFwLCBpc0luaXRpYXRvcikgPT0gTWVkaWFFbmRwb2ludDo6VXBkYXRlUmVzdWx0
OjpGYWlsZWQpIHsKLSAgICAgICAgICAgIHNldExvY2FsRGVzY3JpcHRpb25GYWlsZWQoRXhjZXB0
aW9uIHsgT3BlcmF0aW9uRXJyb3IsICJVbmFibGUgdG8gYXBwbHkgc2Vzc2lvbiBkZXNjcmlwdGlv
biIgfSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAo
IWhhc1VuYXNzb2NpYXRlZFRyYW5zY2VpdmVycyh0cmFuc2NlaXZlcnMpKQotICAgICAgICBjbGVh
ck5lZ290aWF0aW9uTmVlZGVkU3RhdGUoKTsKLQotICAgIFJUQ1NpZ25hbGluZ1N0YXRlIG5ld1Np
Z25hbGluZ1N0YXRlOwotCi0gICAgLy8gVXBkYXRlIHN0YXRlIGFuZCBsb2NhbCBkZXNjcmlwdGlv
bnMgYWNjb3JkaW5nIHRvIHNldExvY2FsL1JlbW90ZURlc2NyaXB0aW9uIHByb2Nlc3NpbmcgbW9k
ZWwKLSAgICBzd2l0Y2ggKG5ld0Rlc2NyaXB0aW9uLT50eXBlKCkpIHsKLSAgICBjYXNlIFJUQ1Nk
cFR5cGU6Ok9mZmVyOgotICAgICAgICBtX3BlbmRpbmdMb2NhbERlc2NyaXB0aW9uID0gV1RGTW92
ZShuZXdEZXNjcmlwdGlvbik7Ci0gICAgICAgIG5ld1NpZ25hbGluZ1N0YXRlID0gUlRDU2lnbmFs
aW5nU3RhdGU6OkhhdmVMb2NhbE9mZmVyOwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgUlRD
U2RwVHlwZTo6QW5zd2VyOgotICAgICAgICBtX2N1cnJlbnRMb2NhbERlc2NyaXB0aW9uID0gV1RG
TW92ZShuZXdEZXNjcmlwdGlvbik7Ci0gICAgICAgIG1fY3VycmVudFJlbW90ZURlc2NyaXB0aW9u
ID0gbV9wZW5kaW5nUmVtb3RlRGVzY3JpcHRpb247Ci0gICAgICAgIG1fcGVuZGluZ0xvY2FsRGVz
Y3JpcHRpb24gPSBudWxscHRyOwotICAgICAgICBtX3BlbmRpbmdSZW1vdGVEZXNjcmlwdGlvbiA9
IG51bGxwdHI7Ci0gICAgICAgIG5ld1NpZ25hbGluZ1N0YXRlID0gUlRDU2lnbmFsaW5nU3RhdGU6
OlN0YWJsZTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIFJUQ1NkcFR5cGU6OlJvbGxiYWNr
OgotICAgICAgICBtX3BlbmRpbmdMb2NhbERlc2NyaXB0aW9uID0gbnVsbHB0cjsKLSAgICAgICAg
bmV3U2lnbmFsaW5nU3RhdGUgPSBSVENTaWduYWxpbmdTdGF0ZTo6U3RhYmxlOwotICAgICAgICBi
cmVhazsKLQotICAgIGNhc2UgUlRDU2RwVHlwZTo6UHJhbnN3ZXI6Ci0gICAgICAgIG1fcGVuZGlu
Z0xvY2FsRGVzY3JpcHRpb24gPSBXVEZNb3ZlKG5ld0Rlc2NyaXB0aW9uKTsKLSAgICAgICAgbmV3
U2lnbmFsaW5nU3RhdGUgPSBSVENTaWduYWxpbmdTdGF0ZTo6SGF2ZUxvY2FsUHJhbnN3ZXI7Ci0g
ICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIHVwZGF0ZVNpZ25hbGluZ1N0YXRlKG5ld1NpZ25h
bGluZ1N0YXRlKTsKLQotICAgIGlmIChtX3BlZXJDb25uZWN0aW9uLmljZUdhdGhlcmluZ1N0YXRl
KCkgPT0gUlRDSWNlR2F0aGVyaW5nU3RhdGU6Ok5ldyAmJiBtZWRpYURlc2NyaXB0aW9ucy5zaXpl
KCkpCi0gICAgICAgIG1fcGVlckNvbm5lY3Rpb24udXBkYXRlSWNlR2F0aGVyaW5nU3RhdGUoUlRD
SWNlR2F0aGVyaW5nU3RhdGU6OkdhdGhlcmluZyk7Ci0KLSAgICBtYXJrQXNOZWVkaW5nTmVnb3Rp
YXRpb24oKTsKLSAgICBzZXRMb2NhbERlc2NyaXB0aW9uU3VjY2VlZGVkKCk7Ci19Ci0KLVJlZlB0
cjxSVENTZXNzaW9uRGVzY3JpcHRpb24+IE1lZGlhRW5kcG9pbnRQZWVyQ29ubmVjdGlvbjo6bG9j
YWxEZXNjcmlwdGlvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGNyZWF0ZVJUQ1Nlc3Npb25EZXNj
cmlwdGlvbihpbnRlcm5hbExvY2FsRGVzY3JpcHRpb24oKSk7Ci19Ci0KLVJlZlB0cjxSVENTZXNz
aW9uRGVzY3JpcHRpb24+IE1lZGlhRW5kcG9pbnRQZWVyQ29ubmVjdGlvbjo6Y3VycmVudExvY2Fs
RGVzY3JpcHRpb24oKSBjb25zdAotewotICAgIHJldHVybiBjcmVhdGVSVENTZXNzaW9uRGVzY3Jp
cHRpb24obV9jdXJyZW50TG9jYWxEZXNjcmlwdGlvbi5nZXQoKSk7Ci19Ci0KLVJlZlB0cjxSVENT
ZXNzaW9uRGVzY3JpcHRpb24+IE1lZGlhRW5kcG9pbnRQZWVyQ29ubmVjdGlvbjo6cGVuZGluZ0xv
Y2FsRGVzY3JpcHRpb24oKSBjb25zdAotewotICAgIHJldHVybiBjcmVhdGVSVENTZXNzaW9uRGVz
Y3JpcHRpb24obV9wZW5kaW5nTG9jYWxEZXNjcmlwdGlvbi5nZXQoKSk7Ci19Ci0KLXZvaWQgTWVk
aWFFbmRwb2ludFBlZXJDb25uZWN0aW9uOjpkb1NldFJlbW90ZURlc2NyaXB0aW9uKFJUQ1Nlc3Np
b25EZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24pCi17Ci0gICAgcnVuVGFzayhbdGhpcywgcHJvdGVj
dGVkRGVzY3JpcHRpb24gPSBSZWZQdHI8UlRDU2Vzc2lvbkRlc2NyaXB0aW9uPigmZGVzY3JpcHRp
b24pXSgpIG11dGFibGUgewotICAgICAgICBzZXRSZW1vdGVEZXNjcmlwdGlvblRhc2soV1RGTW92
ZShwcm90ZWN0ZWREZXNjcmlwdGlvbikpOwotICAgIH0pOwotfQotCi12b2lkIE1lZGlhRW5kcG9p
bnRQZWVyQ29ubmVjdGlvbjo6c2V0UmVtb3RlRGVzY3JpcHRpb25UYXNrKFJlZlB0cjxSVENTZXNz
aW9uRGVzY3JpcHRpb24+JiYgZGVzY3JpcHRpb24pCi17Ci0gICAgYXV0byByZXN1bHQgPSBNZWRp
YUVuZHBvaW50U2Vzc2lvbkRlc2NyaXB0aW9uOjpjcmVhdGUoV1RGTW92ZShkZXNjcmlwdGlvbiks
ICptX3NkcFByb2Nlc3Nvcik7Ci0gICAgaWYgKHJlc3VsdC5oYXNFeGNlcHRpb24oKSkgewotICAg
ICAgICBzZXRSZW1vdGVEZXNjcmlwdGlvbkZhaWxlZChyZXN1bHQucmVsZWFzZUV4Y2VwdGlvbigp
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBhdXRvIG5ld0Rlc2NyaXB0aW9uID0gcmVz
dWx0LnJlbGVhc2VSZXR1cm5WYWx1ZSgpOwotCi0gICAgYXV0byYgbWVkaWFEZXNjcmlwdGlvbnMg
PSBuZXdEZXNjcmlwdGlvbi0+Y29uZmlndXJhdGlvbigpLT5tZWRpYURlc2NyaXB0aW9ucygpOwot
ICAgIGZvciAoYXV0byYgbWVkaWFEZXNjcmlwdGlvbiA6IG1lZGlhRGVzY3JpcHRpb25zKSB7Ci0g
ICAgICAgIGlmIChtZWRpYURlc2NyaXB0aW9uLnR5cGUgIT0gImF1ZGlvIiAmJiBtZWRpYURlc2Ny
aXB0aW9uLnR5cGUgIT0gInZpZGVvIikKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAg
IG1lZGlhRGVzY3JpcHRpb24ucGF5bG9hZHMgPSBtX21lZGlhRW5kcG9pbnQtPmZpbHRlclBheWxv
YWRzKG1lZGlhRGVzY3JpcHRpb24ucGF5bG9hZHMsIG1lZGlhRGVzY3JpcHRpb24udHlwZSA9PSAi
YXVkaW8iID8gbV9kZWZhdWx0QXVkaW9QYXlsb2FkcyA6IG1fZGVmYXVsdFZpZGVvUGF5bG9hZHMp
OwotICAgIH0KLQotICAgIGJvb2wgaXNJbml0aWF0b3IgPSBuZXdEZXNjcmlwdGlvbi0+dHlwZSgp
ID09IFJUQ1NkcFR5cGU6OkFuc3dlcjsKLSAgICBjb25zdCBSdHBUcmFuc2NlaXZlclZlY3RvciYg
dHJhbnNjZWl2ZXJzID0gbV9wZWVyQ29ubmVjdGlvbi5nZXRUcmFuc2NlaXZlcnMoKTsKLQotICAg
IFJlYWx0aW1lTWVkaWFTb3VyY2VNYXAgc2VuZFNvdXJjZU1hcDsKLSAgICBpZiAoaW50ZXJuYWxM
b2NhbERlc2NyaXB0aW9uKCkpCi0gICAgICAgIHNlbmRTb3VyY2VNYXAgPSBjcmVhdGVTb3VyY2VN
YXAobWVkaWFEZXNjcmlwdGlvbnMsIGludGVybmFsTG9jYWxEZXNjcmlwdGlvbigpLT5jb25maWd1
cmF0aW9uKCktPm1lZGlhRGVzY3JpcHRpb25zKCkuc2l6ZSgpLCB0cmFuc2NlaXZlcnMpOwotCi0g
ICAgaWYgKG1fbWVkaWFFbmRwb2ludC0+dXBkYXRlU2VuZENvbmZpZ3VyYXRpb24obmV3RGVzY3Jp
cHRpb24tPmNvbmZpZ3VyYXRpb24oKSwgc2VuZFNvdXJjZU1hcCwgaXNJbml0aWF0b3IpID09IE1l
ZGlhRW5kcG9pbnQ6OlVwZGF0ZVJlc3VsdDo6RmFpbGVkKSB7Ci0gICAgICAgIHNldFJlbW90ZURl
c2NyaXB0aW9uRmFpbGVkKEV4Y2VwdGlvbiB7IE9wZXJhdGlvbkVycm9yLCAiVW5hYmxlIHRvIGFw
cGx5IHNlc3Npb24gZGVzY3JpcHRpb24iIH0pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgLy8gT25lIGxlZ2FjeSBNZWRpYVN0cmVhbUV2ZW50IHdpbGwgYmUgZmlyZWQgZm9yIGV2ZXJ5
IG5ldyBNZWRpYVN0cmVhbSBjcmVhdGVkIGFzIHRoaXMgcmVtb3RlIGRlc2NyaXB0aW9uIGlzIHNl
dC4KLSAgICBWZWN0b3I8UmVmUHRyPE1lZGlhU3RyZWFtRXZlbnQ+PiBsZWdhY3lNZWRpYVN0cmVh
bUV2ZW50czsKLQotICAgIGZvciAoYXV0byYgbWVkaWFEZXNjcmlwdGlvbiA6IG1lZGlhRGVzY3Jp
cHRpb25zKSB7Ci0gICAgICAgIFJUQ1J0cFRyYW5zY2VpdmVyKiB0cmFuc2NlaXZlciA9IG1hdGNo
VHJhbnNjZWl2ZXJCeU1pZCh0cmFuc2NlaXZlcnMsIG1lZGlhRGVzY3JpcHRpb24ubWlkKTsKLSAg
ICAgICAgaWYgKCF0cmFuc2NlaXZlcikgewotICAgICAgICAgICAgYm9vbCByZWNlaXZlT25seUZs
YWcgPSBmYWxzZTsKLQotICAgICAgICAgICAgaWYgKG1lZGlhRGVzY3JpcHRpb24ubW9kZSA9PSAi
c2VuZHJlY3YiIHx8IG1lZGlhRGVzY3JpcHRpb24ubW9kZSA9PSAicmVjdm9ubHkiKSB7Ci0gICAg
ICAgICAgICAgICAgLy8gVHJ5IHRvIG1hdGNoIGFuIGV4aXN0aW5nIHRyYW5zY2VpdmVyLgotICAg
ICAgICAgICAgICAgIHRyYW5zY2VpdmVyID0gbWF0Y2hUcmFuc2NlaXZlcih0cmFuc2NlaXZlcnMs
IFsmbWVkaWFEZXNjcmlwdGlvbl0gKFJUQ1J0cFRyYW5zY2VpdmVyJiBjdXJyZW50KSB7Ci0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiAhY3VycmVudC5zdG9wcGVkKCkgJiYgY3VycmVudC5taWQo
KS5pc051bGwoKSAmJiBjdXJyZW50LnNlbmRlcigpLnRyYWNrS2luZCgpID09IG1lZGlhRGVzY3Jp
cHRpb24udHlwZTsKLSAgICAgICAgICAgICAgICB9KTsKLQotICAgICAgICAgICAgICAgIGlmICh0
cmFuc2NlaXZlcikgewotICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIHRyYW5zY2VpdmVyIHdh
cyBjcmVhdGVkIGxvY2FsbHkgd2l0aCBhIHByb3Zpc2lvbmFsIG1pZC4gSXRzIHJlYWwgbWlkIHdp
bGwgbm93IGJlIHNldCBieSB0aGUgcmVtb3RlCi0gICAgICAgICAgICAgICAgICAgIC8vIGRlc2Ny
aXB0aW9uIHNvIHdlIG5lZWQgdG8gdXBkYXRlIHRoZSBtaWQgb2YgdGhlIHRyYW5zY2VpdmVyJ3Mg
bXV0ZWQgc291cmNlIHRvIHByZXNlcnZlIHRoZSBhc3NvY2lhdGlvbi4KLSAgICAgICAgICAgICAg
ICAgICAgdHJhbnNjZWl2ZXItPnNldE1pZChtZWRpYURlc2NyaXB0aW9uLm1pZCk7Ci0gICAgICAg
ICAgICAgICAgICAgIG1fbWVkaWFFbmRwb2ludC0+cmVwbGFjZU11dGVkUmVtb3RlU291cmNlTWlk
KHRyYW5zY2VpdmVyLT5wcm92aXNpb25hbE1pZCgpLCBtZWRpYURlc2NyaXB0aW9uLm1pZCk7Ci0g
ICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHJlY2VpdmVPbmx5Rmxh
ZyA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICghdHJhbnNjZWl2ZXIp
IHsKLSAgICAgICAgICAgICAgICBhdXRvIHNlbmRlciA9IFJUQ1J0cFNlbmRlcjo6Y3JlYXRlKFN0
cmluZyhtZWRpYURlc2NyaXB0aW9uLnR5cGUpLCBWZWN0b3I8U3RyaW5nPigpLCBtX3BlZXJDb25u
ZWN0aW9uLnNlbmRlckJhY2tlbmQoKSk7Ci0gICAgICAgICAgICAgICAgYXV0byByZWNlaXZlciA9
IGNyZWF0ZVJlY2VpdmVyKG1lZGlhRGVzY3JpcHRpb24ubWlkLCBtZWRpYURlc2NyaXB0aW9uLnR5
cGUsIG1lZGlhRGVzY3JpcHRpb24ubWVkaWFTdHJlYW1UcmFja0lkKTsKLQotICAgICAgICAgICAg
ICAgIGF1dG8gbmV3VHJhbnNjZWl2ZXIgPSBSVENSdHBUcmFuc2NlaXZlcjo6Y3JlYXRlKFdURk1v
dmUoc2VuZGVyKSwgV1RGTW92ZShyZWNlaXZlcikpOwotICAgICAgICAgICAgICAgIG5ld1RyYW5z
Y2VpdmVyLT5zZXRNaWQobWVkaWFEZXNjcmlwdGlvbi5taWQpOwotICAgICAgICAgICAgICAgIGlm
IChyZWNlaXZlT25seUZsYWcpCi0gICAgICAgICAgICAgICAgICAgIG5ld1RyYW5zY2VpdmVyLT5k
aXNhYmxlU2VuZGluZ0RpcmVjdGlvbigpOwotCi0gICAgICAgICAgICAgICAgdHJhbnNjZWl2ZXIg
PSBuZXdUcmFuc2NlaXZlci5wdHIoKTsKLSAgICAgICAgICAgICAgICBtX3BlZXJDb25uZWN0aW9u
LmFkZFRyYW5zY2VpdmVyKFdURk1vdmUobmV3VHJhbnNjZWl2ZXIpKTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotCi0gICAgICAgIGlmIChtZWRpYURlc2NyaXB0aW9uLm1vZGUgPT0gInNlbmRy
ZWN2IiB8fCBtZWRpYURlc2NyaXB0aW9uLm1vZGUgPT0gInNlbmRvbmx5IikgewotICAgICAgICAg
ICAgYXV0byYgcmVjZWl2ZXIgPSB0cmFuc2NlaXZlci0+cmVjZWl2ZXIoKTsKLSAgICAgICAgICAg
IGlmIChyZWNlaXZlci5pc0Rpc3BhdGNoZWQoKSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsK
LSAgICAgICAgICAgIHJlY2VpdmVyLnNldERpc3BhdGNoZWQodHJ1ZSk7Ci0KLSAgICAgICAgICAg
IFZlY3RvcjxTdHJpbmc+IG1lZGlhU3RyZWFtSWRzOwotICAgICAgICAgICAgaWYgKCFtZWRpYURl
c2NyaXB0aW9uLm1lZGlhU3RyZWFtSWQuaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgIG1lZGlh
U3RyZWFtSWRzLmFwcGVuZChtZWRpYURlc2NyaXB0aW9uLm1lZGlhU3RyZWFtSWQpOwotCi0gICAg
ICAgICAgICAvLyBBIHJlbW90ZSB0cmFjayBjYW4gYmUgYXNzb2NpYXRlZCB3aXRoIDAuLiogTWVk
aWFTdHJlYW1zLiBXZSBjcmVhdGUgYSBuZXcgc3RyZWFtIGZvcgotICAgICAgICAgICAgLy8gYSB0
cmFjayBpbiBjYXNlIG9mIGFuIHVucmVjb2duaXplZCBzdHJlYW0gaWQsIG9yIGp1c3QgYWRkIHRo
ZSB0cmFjayBpZiB0aGUgc3RyZWFtCi0gICAgICAgICAgICAvLyBhbHJlYWR5IGV4aXN0cy4KLSAg
ICAgICAgICAgIEhhc2hNYXA8U3RyaW5nLCBSZWZQdHI8TWVkaWFTdHJlYW0+PiB0cmFja0V2ZW50
TWVkaWFTdHJlYW1zOwotICAgICAgICAgICAgZm9yIChhdXRvJiBpZCA6IG1lZGlhU3RyZWFtSWRz
KSB7Ci0gICAgICAgICAgICAgICAgaWYgKG1fcmVtb3RlU3RyZWFtTWFwLmNvbnRhaW5zKGlkKSkg
ewotICAgICAgICAgICAgICAgICAgICBSZWZQdHI8TWVkaWFTdHJlYW0+IHN0cmVhbSA9IG1fcmVt
b3RlU3RyZWFtTWFwLmdldChpZCk7Ci0gICAgICAgICAgICAgICAgICAgIHN0cmVhbS0+YWRkVHJh
Y2soKnJlY2VpdmVyLnRyYWNrKCkpOwotICAgICAgICAgICAgICAgICAgICB0cmFja0V2ZW50TWVk
aWFTdHJlYW1zLmFkZChpZCwgV1RGTW92ZShzdHJlYW0pKTsKLSAgICAgICAgICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgICAgICAgICBhdXRvIG5ld1N0cmVhbSA9IE1lZGlhU3RyZWFtOjpj
cmVhdGUoKm1fcGVlckNvbm5lY3Rpb24uc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCBNZWRpYVN0
cmVhbVRyYWNrVmVjdG9yKHsgcmVjZWl2ZXIudHJhY2soKSB9KSk7Ci0gICAgICAgICAgICAgICAg
ICAgIG1fcmVtb3RlU3RyZWFtTWFwLmFkZChpZCwgbmV3U3RyZWFtLmNvcHlSZWYoKSk7Ci0gICAg
ICAgICAgICAgICAgICAgIGxlZ2FjeU1lZGlhU3RyZWFtRXZlbnRzLmFwcGVuZChNZWRpYVN0cmVh
bUV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmFkZHN0cmVhbUV2ZW50LCBmYWxzZSwgZmFsc2Us
IG5ld1N0cmVhbS5jb3B5UmVmKCkpKTsKLSAgICAgICAgICAgICAgICAgICAgdHJhY2tFdmVudE1l
ZGlhU3RyZWFtcy5hZGQoaWQsIFdURk1vdmUobmV3U3RyZWFtKSk7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBWZWN0b3I8UmVmUHRyPE1lZGlhU3RyZWFt
Pj4gc3RyZWFtczsKLSAgICAgICAgICAgIGNvcHlWYWx1ZXNUb1ZlY3Rvcih0cmFja0V2ZW50TWVk
aWFTdHJlYW1zLCBzdHJlYW1zKTsKLQotICAgICAgICAgICAgbV9wZWVyQ29ubmVjdGlvbi5maXJl
RXZlbnQoUlRDVHJhY2tFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS50cmFja0V2ZW50LCBmYWxz
ZSwgZmFsc2UsCi0gICAgICAgICAgICAgICAgJnJlY2VpdmVyLCByZWNlaXZlci50cmFjaygpLCBX
VEZNb3ZlKHN0cmVhbXMpLCB0cmFuc2NlaXZlcikpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAg
Ly8gRmlyZSBsZWdhY3kgYWRkc3RyZWFtIGV2ZW50cy4KLSAgICBmb3IgKGF1dG8mIGV2ZW50IDog
bGVnYWN5TWVkaWFTdHJlYW1FdmVudHMpCi0gICAgICAgIG1fcGVlckNvbm5lY3Rpb24uZmlyZUV2
ZW50KCpldmVudCk7Ci0KLSAgICBSVENTaWduYWxpbmdTdGF0ZSBuZXdTaWduYWxpbmdTdGF0ZTsK
LQotICAgIC8vIFVwZGF0ZSBzdGF0ZSBhbmQgbG9jYWwgZGVzY3JpcHRpb25zIGFjY29yZGluZyB0
byBzZXRMb2NhbC9SZW1vdGVEZXNjcmlwdGlvbiBwcm9jZXNzaW5nIG1vZGVsCi0gICAgc3dpdGNo
IChuZXdEZXNjcmlwdGlvbi0+dHlwZSgpKSB7Ci0gICAgY2FzZSBSVENTZHBUeXBlOjpPZmZlcjoK
LSAgICAgICAgbV9wZW5kaW5nUmVtb3RlRGVzY3JpcHRpb24gPSBXVEZNb3ZlKG5ld0Rlc2NyaXB0
aW9uKTsKLSAgICAgICAgbmV3U2lnbmFsaW5nU3RhdGUgPSBSVENTaWduYWxpbmdTdGF0ZTo6SGF2
ZVJlbW90ZU9mZmVyOwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgUlRDU2RwVHlwZTo6QW5z
d2VyOgotICAgICAgICBtX2N1cnJlbnRSZW1vdGVEZXNjcmlwdGlvbiA9IFdURk1vdmUobmV3RGVz
Y3JpcHRpb24pOwotICAgICAgICBtX2N1cnJlbnRMb2NhbERlc2NyaXB0aW9uID0gbV9wZW5kaW5n
TG9jYWxEZXNjcmlwdGlvbjsKLSAgICAgICAgbV9wZW5kaW5nUmVtb3RlRGVzY3JpcHRpb24gPSBu
dWxscHRyOwotICAgICAgICBtX3BlbmRpbmdMb2NhbERlc2NyaXB0aW9uID0gbnVsbHB0cjsKLSAg
ICAgICAgbmV3U2lnbmFsaW5nU3RhdGUgPSBSVENTaWduYWxpbmdTdGF0ZTo6U3RhYmxlOwotICAg
ICAgICBicmVhazsKLQotICAgIGNhc2UgUlRDU2RwVHlwZTo6Um9sbGJhY2s6Ci0gICAgICAgIG1f
cGVuZGluZ1JlbW90ZURlc2NyaXB0aW9uID0gbnVsbHB0cjsKLSAgICAgICAgbmV3U2lnbmFsaW5n
U3RhdGUgPSBSVENTaWduYWxpbmdTdGF0ZTo6U3RhYmxlOwotICAgICAgICBicmVhazsKLQotICAg
IGNhc2UgUlRDU2RwVHlwZTo6UHJhbnN3ZXI6Ci0gICAgICAgIG1fcGVuZGluZ1JlbW90ZURlc2Ny
aXB0aW9uID0gV1RGTW92ZShuZXdEZXNjcmlwdGlvbik7Ci0gICAgICAgIG5ld1NpZ25hbGluZ1N0
YXRlID0gUlRDU2lnbmFsaW5nU3RhdGU6OkhhdmVSZW1vdGVQcmFuc3dlcjsKLSAgICAgICAgYnJl
YWs7Ci0gICAgfQotCi0gICAgdXBkYXRlU2lnbmFsaW5nU3RhdGUobmV3U2lnbmFsaW5nU3RhdGUp
OwotICAgIHNldFJlbW90ZURlc2NyaXB0aW9uU3VjY2VlZGVkKCk7Ci19Ci0KLVJlZlB0cjxSVENT
ZXNzaW9uRGVzY3JpcHRpb24+IE1lZGlhRW5kcG9pbnRQZWVyQ29ubmVjdGlvbjo6cmVtb3RlRGVz
Y3JpcHRpb24oKSBjb25zdAotewotICAgIHJldHVybiBjcmVhdGVSVENTZXNzaW9uRGVzY3JpcHRp
b24oaW50ZXJuYWxSZW1vdGVEZXNjcmlwdGlvbigpKTsKLX0KLQotUmVmUHRyPFJUQ1Nlc3Npb25E
ZXNjcmlwdGlvbj4gTWVkaWFFbmRwb2ludFBlZXJDb25uZWN0aW9uOjpjdXJyZW50UmVtb3RlRGVz
Y3JpcHRpb24oKSBjb25zdAotewotICAgIHJldHVybiBjcmVhdGVSVENTZXNzaW9uRGVzY3JpcHRp
b24obV9jdXJyZW50UmVtb3RlRGVzY3JpcHRpb24uZ2V0KCkpOwotfQotCi1SZWZQdHI8UlRDU2Vz
c2lvbkRlc2NyaXB0aW9uPiBNZWRpYUVuZHBvaW50UGVlckNvbm5lY3Rpb246OnBlbmRpbmdSZW1v
dGVEZXNjcmlwdGlvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGNyZWF0ZVJUQ1Nlc3Npb25EZXNj
cmlwdGlvbihtX3BlbmRpbmdSZW1vdGVEZXNjcmlwdGlvbi5nZXQoKSk7Ci19Ci0KLWJvb2wgTWVk
aWFFbmRwb2ludFBlZXJDb25uZWN0aW9uOjpzZXRDb25maWd1cmF0aW9uKE1lZGlhRW5kcG9pbnRD
b25maWd1cmF0aW9uJiYgY29uZmlndXJhdGlvbikKLXsKLSAgICBtX21lZGlhRW5kcG9pbnQtPnNl
dENvbmZpZ3VyYXRpb24oV1RGTW92ZShjb25maWd1cmF0aW9uKSk7Ci0gICAgcmV0dXJuIHRydWU7
Ci19Ci0KLXZvaWQgTWVkaWFFbmRwb2ludFBlZXJDb25uZWN0aW9uOjpkb0FkZEljZUNhbmRpZGF0
ZShSVENJY2VDYW5kaWRhdGUmIHJ0Y0NhbmRpZGF0ZSkKLXsKLSAgICBydW5UYXNrKFt0aGlzLCBw
cm90ZWN0ZWRDYW5kaWRhdGUgPSBSZWZQdHI8UlRDSWNlQ2FuZGlkYXRlPigmcnRjQ2FuZGlkYXRl
KV0oKSBtdXRhYmxlIHsKLSAgICAgICAgYWRkSWNlQ2FuZGlkYXRlVGFzaygqcHJvdGVjdGVkQ2Fu
ZGlkYXRlKTsKLSAgICB9KTsKLX0KLQotdm9pZCBNZWRpYUVuZHBvaW50UGVlckNvbm5lY3Rpb246
OmFkZEljZUNhbmRpZGF0ZVRhc2soUlRDSWNlQ2FuZGlkYXRlJiBydGNDYW5kaWRhdGUpCi17Ci0g
ICAgaWYgKCFpbnRlcm5hbFJlbW90ZURlc2NyaXB0aW9uKCkpIHsKLSAgICAgICAgYWRkSWNlQ2Fu
ZGlkYXRlRmFpbGVkKEV4Y2VwdGlvbiB7IEludmFsaWRTdGF0ZUVycm9yLCAiTm8gcmVtb3RlIGRl
c2NyaXB0aW9uIHNldCIgfSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBhdXRvJiBy
ZW1vdGVNZWRpYURlc2NyaXB0aW9ucyA9IGludGVybmFsUmVtb3RlRGVzY3JpcHRpb24oKS0+Y29u
ZmlndXJhdGlvbigpLT5tZWRpYURlc2NyaXB0aW9ucygpOwotICAgIFBlZXJNZWRpYURlc2NyaXB0
aW9uKiB0YXJnZXRNZWRpYURlc2NyaXB0aW9uID0gbnVsbHB0cjsKLQotICAgIC8vIFdoZW4gaWRl
bnRpZnlpbmcgdGhlIHRhcmdldCBtZWRpYSBkZXNjcmlwdGlvbiwgc2RwTWlkIHRha2VzIHByZWNl
ZGVuY2Ugb3ZlciBzZHBNTGluZUluZGV4Ci0gICAgLy8gaWYgYm90aCBhcmUgcHJlc2VudC4KLSAg
ICBpZiAoIXJ0Y0NhbmRpZGF0ZS5zZHBNaWQoKS5pc051bGwoKSkgewotICAgICAgICBjb25zdCBT
dHJpbmcmIG1pZCA9IHJ0Y0NhbmRpZGF0ZS5zZHBNaWQoKTsKLSAgICAgICAgZm9yIChhdXRvJiBk
ZXNjcmlwdGlvbiA6IHJlbW90ZU1lZGlhRGVzY3JpcHRpb25zKSB7Ci0gICAgICAgICAgICBpZiAo
ZGVzY3JpcHRpb24ubWlkID09IG1pZCkgewotICAgICAgICAgICAgICAgIHRhcmdldE1lZGlhRGVz
Y3JpcHRpb24gPSAmZGVzY3JpcHRpb247Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIXRhcmdldE1lZGlhRGVzY3JpcHRpb24p
IHsKLSAgICAgICAgICAgIGFkZEljZUNhbmRpZGF0ZUZhaWxlZChFeGNlcHRpb24geyBPcGVyYXRp
b25FcnJvciwgInNkcE1pZCBkaWQgbm90IG1hdGNoIGFueSBtZWRpYSBkZXNjcmlwdGlvbiIgfSk7
Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKHJ0Y0NhbmRp
ZGF0ZS5zZHBNTGluZUluZGV4KCkpIHsKLSAgICAgICAgdW5zaWduZWQgc2hvcnQgc2RwTUxpbmVJ
bmRleCA9IHJ0Y0NhbmRpZGF0ZS5zZHBNTGluZUluZGV4KCkudmFsdWUoKTsKLSAgICAgICAgaWYg
KHNkcE1MaW5lSW5kZXggPj0gcmVtb3RlTWVkaWFEZXNjcmlwdGlvbnMuc2l6ZSgpKSB7Ci0gICAg
ICAgICAgICBhZGRJY2VDYW5kaWRhdGVGYWlsZWQoRXhjZXB0aW9uIHsgT3BlcmF0aW9uRXJyb3Is
ICJzZHBNTGluZUluZGV4IGlzIG91dCBvZiByYW5nZSIgfSk7Ci0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIH0KLSAgICAgICAgdGFyZ2V0TWVkaWFEZXNjcmlwdGlvbiA9ICZyZW1vdGVNZWRp
YURlc2NyaXB0aW9uc1tzZHBNTGluZUluZGV4XTsKLSAgICB9IGVsc2UgewotICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGF1dG8gcmVz
dWx0ID0gbV9zZHBQcm9jZXNzb3ItPnBhcnNlQ2FuZGlkYXRlTGluZShydGNDYW5kaWRhdGUuY2Fu
ZGlkYXRlKCkpOwotICAgIGlmIChyZXN1bHQucGFyc2luZ1N0YXR1cygpICE9IFNEUFByb2Nlc3Nv
cjo6UmVzdWx0OjpTdWNjZXNzKSB7Ci0gICAgICAgIGlmIChyZXN1bHQucGFyc2luZ1N0YXR1cygp
ID09IFNEUFByb2Nlc3Nvcjo6UmVzdWx0OjpQYXJzZUVycm9yKQotICAgICAgICAgICAgYWRkSWNl
Q2FuZGlkYXRlRmFpbGVkKEV4Y2VwdGlvbiB7IE9wZXJhdGlvbkVycm9yLCAiSW52YWxpZCBjYW5k
aWRhdGUgY29udGVudCIgfSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIExPR19FUlJPUigi
U0RQUHJvY2Vzc29yIGludGVybmFsIGVycm9yIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICBBU1NFUlQodGFyZ2V0TWVkaWFEZXNjcmlwdGlvbik7Ci0gICAgbV9tZWRpYUVuZHBvaW50
LT5hZGRSZW1vdGVDYW5kaWRhdGUocmVzdWx0LmNhbmRpZGF0ZSgpLCB0YXJnZXRNZWRpYURlc2Ny
aXB0aW9uLT5taWQsIHRhcmdldE1lZGlhRGVzY3JpcHRpb24tPmljZVVmcmFnLCB0YXJnZXRNZWRp
YURlc2NyaXB0aW9uLT5pY2VQYXNzd29yZCk7Ci0KLSAgICB0YXJnZXRNZWRpYURlc2NyaXB0aW9u
LT5hZGRJY2VDYW5kaWRhdGUoV1RGTW92ZShyZXN1bHQuY2FuZGlkYXRlKCkpKTsKLQotICAgIGFk
ZEljZUNhbmRpZGF0ZVN1Y2NlZWRlZCgpOwotfQotCi12b2lkIE1lZGlhRW5kcG9pbnRQZWVyQ29u
bmVjdGlvbjo6Z2V0U3RhdHMoTWVkaWFTdHJlYW1UcmFjayogdHJhY2ssIFJlZjxEZWZlcnJlZFBy
b21pc2U+JiYgcHJvbWlzZSkKLXsKLSAgICBtX21lZGlhRW5kcG9pbnQtPmdldFN0YXRzKHRyYWNr
LCBXVEZNb3ZlKHByb21pc2UpKTsKLX0KLQotVmVjdG9yPFJlZlB0cjxNZWRpYVN0cmVhbT4+IE1l
ZGlhRW5kcG9pbnRQZWVyQ29ubmVjdGlvbjo6Z2V0UmVtb3RlU3RyZWFtcygpIGNvbnN0Ci17Ci0g
ICAgVmVjdG9yPFJlZlB0cjxNZWRpYVN0cmVhbT4+IHJlbW90ZVN0cmVhbXM7Ci0gICAgY29weVZh
bHVlc1RvVmVjdG9yKG1fcmVtb3RlU3RyZWFtTWFwLCByZW1vdGVTdHJlYW1zKTsKLSAgICByZXR1
cm4gcmVtb3RlU3RyZWFtczsKLX0KLQotUmVmPFJUQ1J0cFJlY2VpdmVyPiBNZWRpYUVuZHBvaW50
UGVlckNvbm5lY3Rpb246OmNyZWF0ZVJlY2VpdmVyKGNvbnN0IFN0cmluZyYgdHJhbnNjZWl2ZXJN
aWQsIGNvbnN0IFN0cmluZyYgdHJhY2tLaW5kLCBjb25zdCBTdHJpbmcmIHRyYWNrSWQpCi17Ci0g
ICAgUmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlwZSBzb3VyY2VUeXBlID0gdHJhY2tLaW5kID09ICJh
dWRpbyIgPyBSZWFsdGltZU1lZGlhU291cmNlOjpUeXBlOjpBdWRpbyA6IFJlYWx0aW1lTWVkaWFT
b3VyY2U6OlR5cGU6OlZpZGVvOwotCi0gICAgLy8gQ3JlYXRlIGEgbXV0ZWQgcmVtb3RlIHNvdXJj
ZSB0aGF0IHdpbGwgYmUgdW5tdXRlZCBvbmNlIG1lZGlhIHN0YXJ0cyBhcnJpdmluZy4KLSAgICBh
dXRvIHJlbW90ZVNvdXJjZSA9IG1fbWVkaWFFbmRwb2ludC0+Y3JlYXRlTXV0ZWRSZW1vdGVTb3Vy
Y2UodHJhbnNjZWl2ZXJNaWQsIHNvdXJjZVR5cGUpOwotICAgIGF1dG8gcmVtb3RlVHJhY2tQcml2
YXRlID0gTWVkaWFTdHJlYW1UcmFja1ByaXZhdGU6OmNyZWF0ZShXVEZNb3ZlKHJlbW90ZVNvdXJj
ZSksIFN0cmluZyh0cmFja0lkKSk7Ci0gICAgYXV0byByZW1vdGVUcmFjayA9IE1lZGlhU3RyZWFt
VHJhY2s6OmNyZWF0ZSgqbV9wZWVyQ29ubmVjdGlvbi5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCks
IFdURk1vdmUocmVtb3RlVHJhY2tQcml2YXRlKSk7Ci0KLSAgICByZXR1cm4gUlRDUnRwUmVjZWl2
ZXI6OmNyZWF0ZShXVEZNb3ZlKHJlbW90ZVRyYWNrKSk7Ci19Ci0KLXN0ZDo6dW5pcXVlX3B0cjxS
VENEYXRhQ2hhbm5lbEhhbmRsZXI+IE1lZGlhRW5kcG9pbnRQZWVyQ29ubmVjdGlvbjo6Y3JlYXRl
RGF0YUNoYW5uZWxIYW5kbGVyKGNvbnN0IFN0cmluZyYgbGFiZWwsIGNvbnN0IFJUQ0RhdGFDaGFu
bmVsSW5pdCYgb3B0aW9ucykKLXsKLSAgICByZXR1cm4gbV9tZWRpYUVuZHBvaW50LT5jcmVhdGVE
YXRhQ2hhbm5lbEhhbmRsZXIobGFiZWwsIG9wdGlvbnMpOwotfQotCi12b2lkIE1lZGlhRW5kcG9p
bnRQZWVyQ29ubmVjdGlvbjo6cmVwbGFjZVRyYWNrKFJUQ1J0cFNlbmRlciYgc2VuZGVyLCBSZWY8
TWVkaWFTdHJlYW1UcmFjaz4mJiB3aXRoVHJhY2ssIERPTVByb21pc2VEZWZlcnJlZDx2b2lkPiYm
IHByb21pc2UpCi17Ci0gICAgUlRDUnRwVHJhbnNjZWl2ZXIqIHRyYW5zY2VpdmVyID0gbWF0Y2hU
cmFuc2NlaXZlcihtX3BlZXJDb25uZWN0aW9uLmdldFRyYW5zY2VpdmVycygpLCBbJnNlbmRlcl0g
KFJUQ1J0cFRyYW5zY2VpdmVyJiBjdXJyZW50KSB7Ci0gICAgICAgIHJldHVybiAmY3VycmVudC5z
ZW5kZXIoKSA9PSAmc2VuZGVyOwotICAgIH0pOwotICAgIEFTU0VSVCh0cmFuc2NlaXZlcik7Ci0K
LSAgICBjb25zdCBTdHJpbmcmIG1pZCA9IHRyYW5zY2VpdmVyLT5taWQoKTsKLSAgICBpZiAobWlk
LmlzTnVsbCgpKSB7Ci0gICAgICAgIC8vIFRyYW5zY2VpdmVyIGlzIG5vdCBhc3NvY2lhdGVkIHdp
dGggYSBtZWRpYSBkZXNjcmlwdGlvbiB5ZXQuCi0gICAgICAgIHNlbmRlci5zZXRUcmFjayhXVEZN
b3ZlKHdpdGhUcmFjaykpOwotICAgICAgICBwcm9taXNlLnJlc29sdmUoKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIHJ1blRhc2soW3RoaXMsIHByb3RlY3RlZFNlbmRlciA9IFJlZlB0
cjxSVENSdHBTZW5kZXI+KCZzZW5kZXIpLCBtaWQsIHByb3RlY3RlZFRyYWNrID0gV1RGTW92ZSh3
aXRoVHJhY2spLCBwcm90ZWN0ZWRQcm9taXNlID0gV1RGTW92ZShwcm9taXNlKV0oKSBtdXRhYmxl
IHsKLSAgICAgICAgcmVwbGFjZVRyYWNrVGFzaygqcHJvdGVjdGVkU2VuZGVyLCBtaWQsIFdURk1v
dmUocHJvdGVjdGVkVHJhY2spLCBwcm90ZWN0ZWRQcm9taXNlKTsKLSAgICB9KTsKLX0KLQotdm9p
ZCBNZWRpYUVuZHBvaW50UGVlckNvbm5lY3Rpb246OnJlcGxhY2VUcmFja1Rhc2soUlRDUnRwU2Vu
ZGVyJiBzZW5kZXIsIGNvbnN0IFN0cmluZyYgbWlkLCBSZWY8TWVkaWFTdHJlYW1UcmFjaz4mJiB3
aXRoVHJhY2ssIERPTVByb21pc2VEZWZlcnJlZDx2b2lkPiYgcHJvbWlzZSkKLXsKLSAgICBpZiAo
bV9wZWVyQ29ubmVjdGlvbi5pc0Nsb3NlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX21l
ZGlhRW5kcG9pbnQtPnJlcGxhY2VTZW5kU291cmNlKHdpdGhUcmFjay0+c291cmNlKCksIG1pZCk7
Ci0KLSAgICBzZW5kZXIuc2V0VHJhY2soV1RGTW92ZSh3aXRoVHJhY2spKTsKLSAgICBwcm9taXNl
LnJlc29sdmUoKTsKLX0KLQotdm9pZCBNZWRpYUVuZHBvaW50UGVlckNvbm5lY3Rpb246OmRvU3Rv
cCgpCi17Ci0gICAgbV9tZWRpYUVuZHBvaW50LT5zdG9wKCk7Ci19Ci0KLXZvaWQgTWVkaWFFbmRw
b2ludFBlZXJDb25uZWN0aW9uOjplbXVsYXRlUGxhdGZvcm1FdmVudChjb25zdCBTdHJpbmcmIGFj
dGlvbikKLXsKLSAgICBtX21lZGlhRW5kcG9pbnQtPmVtdWxhdGVQbGF0Zm9ybUV2ZW50KGFjdGlv
bik7Ci19Ci0KLU1lZGlhRW5kcG9pbnRTZXNzaW9uRGVzY3JpcHRpb24qIE1lZGlhRW5kcG9pbnRQ
ZWVyQ29ubmVjdGlvbjo6aW50ZXJuYWxMb2NhbERlc2NyaXB0aW9uKCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gbV9wZW5kaW5nTG9jYWxEZXNjcmlwdGlvbiA/IG1fcGVuZGluZ0xvY2FsRGVzY3JpcHRp
b24uZ2V0KCkgOiBtX2N1cnJlbnRMb2NhbERlc2NyaXB0aW9uLmdldCgpOwotfQotCi1NZWRpYUVu
ZHBvaW50U2Vzc2lvbkRlc2NyaXB0aW9uKiBNZWRpYUVuZHBvaW50UGVlckNvbm5lY3Rpb246Omlu
dGVybmFsUmVtb3RlRGVzY3JpcHRpb24oKSBjb25zdAotewotICAgIHJldHVybiBtX3BlbmRpbmdS
ZW1vdGVEZXNjcmlwdGlvbiA/IG1fcGVuZGluZ1JlbW90ZURlc2NyaXB0aW9uLmdldCgpIDogbV9j
dXJyZW50UmVtb3RlRGVzY3JpcHRpb24uZ2V0KCk7Ci19Ci0KLVJlZlB0cjxSVENTZXNzaW9uRGVz
Y3JpcHRpb24+IE1lZGlhRW5kcG9pbnRQZWVyQ29ubmVjdGlvbjo6Y3JlYXRlUlRDU2Vzc2lvbkRl
c2NyaXB0aW9uKE1lZGlhRW5kcG9pbnRTZXNzaW9uRGVzY3JpcHRpb24qIGRlc2NyaXB0aW9uKSBj
b25zdAotewotICAgIHJldHVybiBkZXNjcmlwdGlvbiA/IGRlc2NyaXB0aW9uLT50b1JUQ1Nlc3Np
b25EZXNjcmlwdGlvbigqbV9zZHBQcm9jZXNzb3IpIDogbnVsbHB0cjsKLX0KLQotdm9pZCBNZWRp
YUVuZHBvaW50UGVlckNvbm5lY3Rpb246OmdvdER0bHNGaW5nZXJwcmludChjb25zdCBTdHJpbmcm
IGZpbmdlcnByaW50LCBjb25zdCBTdHJpbmcmIGZpbmdlcnByaW50RnVuY3Rpb24pCi17Ci0gICAg
QVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLQotICAgIG1fZHRsc0ZpbmdlcnByaW50ID0gZmluZ2Vy
cHJpbnQ7Ci0gICAgbV9kdGxzRmluZ2VycHJpbnRGdW5jdGlvbiA9IGZpbmdlcnByaW50RnVuY3Rp
b247Ci0KLSAgICBzdGFydFJ1bm5pbmdUYXNrcygpOwotfQotCi12b2lkIE1lZGlhRW5kcG9pbnRQ
ZWVyQ29ubmVjdGlvbjo6Z290SWNlQ2FuZGlkYXRlKGNvbnN0IFN0cmluZyYgbWlkLCBJY2VDYW5k
aWRhdGUmJiBjYW5kaWRhdGUpCi17Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLQotICAg
IGF1dG8mIG1lZGlhRGVzY3JpcHRpb25zID0gaW50ZXJuYWxMb2NhbERlc2NyaXB0aW9uKCktPmNv
bmZpZ3VyYXRpb24oKS0+bWVkaWFEZXNjcmlwdGlvbnMoKTsKLSAgICBzaXplX3QgbWVkaWFEZXNj
cmlwdGlvbkluZGV4ID0gbm90Rm91bmQ7Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1l
ZGlhRGVzY3JpcHRpb25zLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmIChtZWRpYURlc2NyaXB0
aW9uc1tpXS5taWQgPT0gbWlkKSB7Ci0gICAgICAgICAgICBtZWRpYURlc2NyaXB0aW9uSW5kZXgg
PSBpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgQVNTRVJUKG1l
ZGlhRGVzY3JpcHRpb25JbmRleCAhPSBub3RGb3VuZCk7Ci0KLSAgICBTdHJpbmcgY2FuZGlkYXRl
TGluZTsKLSAgICBhdXRvIHJlc3VsdCA9IG1fc2RwUHJvY2Vzc29yLT5nZW5lcmF0ZUNhbmRpZGF0
ZUxpbmUoY2FuZGlkYXRlLCBjYW5kaWRhdGVMaW5lKTsKLSAgICBpZiAocmVzdWx0ICE9IFNEUFBy
b2Nlc3Nvcjo6UmVzdWx0OjpTdWNjZXNzKSB7Ci0gICAgICAgIExPR19FUlJPUigiU0RQUHJvY2Vz
c29yIGludGVybmFsIGVycm9yIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtZWRp
YURlc2NyaXB0aW9uc1ttZWRpYURlc2NyaXB0aW9uSW5kZXhdLmFkZEljZUNhbmRpZGF0ZShXVEZN
b3ZlKGNhbmRpZGF0ZSkpOwotCi0gICAgZmlyZUlDRUNhbmRpZGF0ZUV2ZW50KFJUQ0ljZUNhbmRp
ZGF0ZTo6Y3JlYXRlKGNhbmRpZGF0ZUxpbmUsIG1pZCwgbWVkaWFEZXNjcmlwdGlvbkluZGV4KSk7
Ci19Ci0KLXZvaWQgTWVkaWFFbmRwb2ludFBlZXJDb25uZWN0aW9uOjpkb25lR2F0aGVyaW5nQ2Fu
ZGlkYXRlcyhjb25zdCBTdHJpbmcmIG1pZCkKLXsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkp
OwotCi0gICAgUnRwVHJhbnNjZWl2ZXJWZWN0b3IgdHJhbnNjZWl2ZXJzID0gUnRwVHJhbnNjZWl2
ZXJWZWN0b3IobV9wZWVyQ29ubmVjdGlvbi5nZXRUcmFuc2NlaXZlcnMoKSk7Ci0gICAgUlRDUnRw
VHJhbnNjZWl2ZXIqIG5vdGlmeWluZ1RyYW5zY2VpdmVyID0gbWF0Y2hUcmFuc2NlaXZlckJ5TWlk
KHRyYW5zY2VpdmVycywgbWlkKTsKLSAgICBBU1NFUlQobm90aWZ5aW5nVHJhbnNjZWl2ZXIpOwot
Ci0gICAgbm90aWZ5aW5nVHJhbnNjZWl2ZXItPmljZVRyYW5zcG9ydCgpLnNldEdhdGhlcmluZ1N0
YXRlKFJUQ0ljZUdhdGhlcmluZ1N0YXRlOjpDb21wbGV0ZSk7Ci0KLSAgICAvLyBEb24ndCBub3Rp
ZnkgdGhlIHNjcmlwdCBpZiB0aGVyZSBhcmUgdHJhbnNjZWl2ZXJzIHN0aWxsIGdhdGhlcmluZy4K
LSAgICBSVENSdHBUcmFuc2NlaXZlciogc3RpbGxHYXRoZXJpbmdUcmFuc2NlaXZlciA9IG1hdGNo
VHJhbnNjZWl2ZXIodHJhbnNjZWl2ZXJzLCBbXSAoUlRDUnRwVHJhbnNjZWl2ZXImIGN1cnJlbnQp
IHsKLSAgICAgICAgcmV0dXJuICFjdXJyZW50LnN0b3BwZWQoKSAmJiAhY3VycmVudC5taWQoKS5p
c051bGwoKQotICAgICAgICAgICAgJiYgY3VycmVudC5pY2VUcmFuc3BvcnQoKS5nYXRoZXJpbmdT
dGF0ZSgpICE9IFJUQ0ljZUdhdGhlcmluZ1N0YXRlOjpDb21wbGV0ZTsKLSAgICB9KTsKLSAgICBp
ZiAoIXN0aWxsR2F0aGVyaW5nVHJhbnNjZWl2ZXIpCi0gICAgICAgIFBlZXJDb25uZWN0aW9uQmFj
a2VuZDo6ZG9uZUdhdGhlcmluZ0NhbmRpZGF0ZXMoKTsKLX0KLQotc3RhdGljIFJUQ0ljZUNvbm5l
Y3Rpb25TdGF0ZSBkZXJpdmVBZ2dyZWdhdGVkSWNlQ29ubmVjdGlvblN0YXRlKGNvbnN0IFZlY3Rv
cjxSVENJY2VUcmFuc3BvcnRTdGF0ZT4mIHN0YXRlcykKLXsKLSAgICB1bnNpZ25lZCBuZXdDb3Vu
dCA9IDA7Ci0gICAgdW5zaWduZWQgY2hlY2tpbmdDb3VudCA9IDA7Ci0gICAgdW5zaWduZWQgY29u
bmVjdGVkQ291bnQgPSAwOwotICAgIHVuc2lnbmVkIGNvbXBsZXRlZENvdW50ID0gMDsKLSAgICB1
bnNpZ25lZCBmYWlsZWRDb3VudCA9IDA7Ci0gICAgdW5zaWduZWQgZGlzY29ubmVjdGVkQ291bnQg
PSAwOwotICAgIHVuc2lnbmVkIGNsb3NlZENvdW50ID0gMDsKLQotICAgIGZvciAoYXV0byYgc3Rh
dGUgOiBzdGF0ZXMpIHsKLSAgICAgICAgc3dpdGNoIChzdGF0ZSkgewotICAgICAgICBjYXNlIFJU
Q0ljZVRyYW5zcG9ydFN0YXRlOjpOZXc6Ci0gICAgICAgICAgICArK25ld0NvdW50OwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUlRDSWNlVHJhbnNwb3J0U3RhdGU6OkNoZWNraW5n
OgotICAgICAgICAgICAgKytjaGVja2luZ0NvdW50OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgUlRDSWNlVHJhbnNwb3J0U3RhdGU6OkNvbm5lY3RlZDoKLSAgICAgICAgICAgICsr
Y29ubmVjdGVkQ291bnQ7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBSVENJY2VU
cmFuc3BvcnRTdGF0ZTo6Q29tcGxldGVkOgotICAgICAgICAgICAgKytjb21wbGV0ZWRDb3VudDsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFJUQ0ljZVRyYW5zcG9ydFN0YXRlOjpG
YWlsZWQ6Ci0gICAgICAgICAgICArK2ZhaWxlZENvdW50OwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgUlRDSWNlVHJhbnNwb3J0U3RhdGU6OkRpc2Nvbm5lY3RlZDoKLSAgICAgICAg
ICAgICsrZGlzY29ubmVjdGVkQ291bnQ7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBSVENJY2VUcmFuc3BvcnRTdGF0ZTo6Q2xvc2VkOgotICAgICAgICAgICAgKytjbG9zZWRDb3Vu
dDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gVGhlIGFn
Z3JlZ2F0ZWQgUlRDSWNlQ29ubmVjdGlvblN0YXRlIGlzIGRlcml2ZWQgZnJvbSB0aGUgUlRDSWNl
VHJhbnNwb3J0U3RhdGUgb2YgYWxsIFJUQ0ljZVRyYW5zcG9ydHMuCi0gICAgaWYgKChuZXdDb3Vu
dCA+IDAgJiYgIWNoZWNraW5nQ291bnQgJiYgIWZhaWxlZENvdW50ICYmICFkaXNjb25uZWN0ZWRD
b3VudCkgfHwgKGNsb3NlZENvdW50ID09IHN0YXRlcy5zaXplKCkpKQotICAgICAgICByZXR1cm4g
UlRDSWNlQ29ubmVjdGlvblN0YXRlOjpOZXc7Ci0KLSAgICBpZiAoY2hlY2tpbmdDb3VudCA+IDAg
JiYgIWZhaWxlZENvdW50ICYmICFkaXNjb25uZWN0ZWRDb3VudCkKLSAgICAgICAgcmV0dXJuIFJU
Q0ljZUNvbm5lY3Rpb25TdGF0ZTo6Q2hlY2tpbmc7Ci0KLSAgICBpZiAoKGNvbm5lY3RlZENvdW50
ICsgY29tcGxldGVkQ291bnQgKyBjbG9zZWRDb3VudCkgPT0gc3RhdGVzLnNpemUoKSAmJiBjb25u
ZWN0ZWRDb3VudCA+IDApCi0gICAgICAgIHJldHVybiBSVENJY2VDb25uZWN0aW9uU3RhdGU6OkNv
bm5lY3RlZDsKLQotICAgIGlmICgoY29tcGxldGVkQ291bnQgKyBjbG9zZWRDb3VudCkgPT0gc3Rh
dGVzLnNpemUoKSAmJiBjb21wbGV0ZWRDb3VudCA+IDApCi0gICAgICAgIHJldHVybiBSVENJY2VD
b25uZWN0aW9uU3RhdGU6OkNvbXBsZXRlZDsKLQotICAgIGlmIChmYWlsZWRDb3VudCA+IDApCi0g
ICAgICAgIHJldHVybiBSVENJY2VDb25uZWN0aW9uU3RhdGU6OkZhaWxlZDsKLQotICAgIGlmIChk
aXNjb25uZWN0ZWRDb3VudCA+IDApIC8vIEFueSBmYWlsZWQgY2F1Z2h0IGFib3ZlLgotICAgICAg
ICByZXR1cm4gUlRDSWNlQ29ubmVjdGlvblN0YXRlOjpEaXNjb25uZWN0ZWQ7Ci0KLSAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gUlRDSWNlQ29ubmVjdGlvblN0YXRlOjpOZXc7
Ci19Ci0KLXZvaWQgTWVkaWFFbmRwb2ludFBlZXJDb25uZWN0aW9uOjppY2VUcmFuc3BvcnRTdGF0
ZUNoYW5nZWQoY29uc3QgU3RyaW5nJiBtaWQsIFJUQ0ljZVRyYW5zcG9ydFN0YXRlIG1lZGlhRW5k
cG9pbnRJY2VUcmFuc3BvcnRTdGF0ZSkKLXsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwot
Ci0gICAgUlRDUnRwVHJhbnNjZWl2ZXIqIHRyYW5zY2VpdmVyID0gbWF0Y2hUcmFuc2NlaXZlckJ5
TWlkKG1fcGVlckNvbm5lY3Rpb24uZ2V0VHJhbnNjZWl2ZXJzKCksIG1pZCk7Ci0gICAgQVNTRVJU
KHRyYW5zY2VpdmVyKTsKLQotICAgIFJUQ0ljZVRyYW5zcG9ydFN0YXRlIHRyYW5zcG9ydFN0YXRl
ID0gc3RhdGljX2Nhc3Q8UlRDSWNlVHJhbnNwb3J0U3RhdGU+KG1lZGlhRW5kcG9pbnRJY2VUcmFu
c3BvcnRTdGF0ZSk7Ci0gICAgdHJhbnNjZWl2ZXItPmljZVRyYW5zcG9ydCgpLnNldFN0YXRlKHRy
YW5zcG9ydFN0YXRlKTsKLQotICAgIC8vIERldGVybWluZSBpZiB0aGUgc2NyaXB0IG5lZWRzIHRv
IGJlIG5vdGlmaWVkLgotICAgIFZlY3RvcjxSVENJY2VUcmFuc3BvcnRTdGF0ZT4gdHJhbnNwb3J0
U3RhdGVzOwotICAgIHRyYW5zcG9ydFN0YXRlcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG1fcGVl
ckNvbm5lY3Rpb24uZ2V0VHJhbnNjZWl2ZXJzKCkuc2l6ZSgpKTsKLSAgICBmb3IgKGF1dG8mIHRy
YW5zY2VpdmVyIDogbV9wZWVyQ29ubmVjdGlvbi5nZXRUcmFuc2NlaXZlcnMoKSkKLSAgICAgICAg
dHJhbnNwb3J0U3RhdGVzLnVuY2hlY2tlZEFwcGVuZCh0cmFuc2NlaXZlci0+aWNlVHJhbnNwb3J0
KCkuc3RhdGUoKSk7Ci0KLSAgICBtX3BlZXJDb25uZWN0aW9uLnVwZGF0ZUljZUNvbm5lY3Rpb25T
dGF0ZShkZXJpdmVBZ2dyZWdhdGVkSWNlQ29ubmVjdGlvblN0YXRlKHRyYW5zcG9ydFN0YXRlcykp
OwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoV0VCX1JU
QykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFF
bmRwb2ludFBlZXJDb25uZWN0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3Ry
ZWFtL01lZGlhRW5kcG9pbnRQZWVyQ29ubmVjdGlvbi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCBiYjgxMzEyMWM5MmNkMzFkNjU2NTdkMDVhMzQ5YjYyOTYzYzc5YmU1Li4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFFbmRwb2ludFBlZXJDb25uZWN0aW9uLmgKKysrIC9kZXYv
bnVsbApAQCAtMSwxMzMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSwgMjAxNiBF
cmljc3NvbiBBQi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIKLSAqICAgIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqICAgIGRpc3RyaWJ1dGlvbi4KLSAqIDMu
IE5laXRoZXIgdGhlIG5hbWUgb2YgRXJpY3Nzb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJp
YnV0b3JzCi0gKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tIHRoaXMKLSAqICAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
LSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBFTkFC
TEUoV0VCX1JUQykKLQotI2luY2x1ZGUgIk1lZGlhRW5kcG9pbnQuaCIKLSNpbmNsdWRlICJQZWVy
Q29ubmVjdGlvbkJhY2tlbmQuaCIKLSNpbmNsdWRlICJSVENTZXNzaW9uRGVzY3JpcHRpb24uaCIK
LSNpbmNsdWRlIDx3dGYvRnVuY3Rpb24uaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFz
cyBNZWRpYUVuZHBvaW50U2Vzc2lvbkRlc2NyaXB0aW9uOwotY2xhc3MgU0RQUHJvY2Vzc29yOwot
Ci1jbGFzcyBNZWRpYUVuZHBvaW50UGVlckNvbm5lY3Rpb24gZmluYWwgOiBwdWJsaWMgUGVlckNv
bm5lY3Rpb25CYWNrZW5kLCBwdWJsaWMgTWVkaWFFbmRwb2ludENsaWVudCB7Ci1wdWJsaWM6Ci0g
ICAgV0VCQ09SRV9FWFBPUlQgZXhwbGljaXQgTWVkaWFFbmRwb2ludFBlZXJDb25uZWN0aW9uKFJU
Q1BlZXJDb25uZWN0aW9uJik7Ci0KLXByaXZhdGU6Ci0gICAgUmVmUHRyPFJUQ1Nlc3Npb25EZXNj
cmlwdGlvbj4gbG9jYWxEZXNjcmlwdGlvbigpIGNvbnN0IGZpbmFsOwotICAgIFJlZlB0cjxSVENT
ZXNzaW9uRGVzY3JpcHRpb24+IGN1cnJlbnRMb2NhbERlc2NyaXB0aW9uKCkgY29uc3QgZmluYWw7
Ci0gICAgUmVmUHRyPFJUQ1Nlc3Npb25EZXNjcmlwdGlvbj4gcGVuZGluZ0xvY2FsRGVzY3JpcHRp
b24oKSBjb25zdCBmaW5hbDsKLQotICAgIFJlZlB0cjxSVENTZXNzaW9uRGVzY3JpcHRpb24+IHJl
bW90ZURlc2NyaXB0aW9uKCkgY29uc3QgZmluYWw7Ci0gICAgUmVmUHRyPFJUQ1Nlc3Npb25EZXNj
cmlwdGlvbj4gY3VycmVudFJlbW90ZURlc2NyaXB0aW9uKCkgY29uc3QgZmluYWw7Ci0gICAgUmVm
UHRyPFJUQ1Nlc3Npb25EZXNjcmlwdGlvbj4gcGVuZGluZ1JlbW90ZURlc2NyaXB0aW9uKCkgY29u
c3QgZmluYWw7Ci0KLSAgICBib29sIHNldENvbmZpZ3VyYXRpb24oTWVkaWFFbmRwb2ludENvbmZp
Z3VyYXRpb24mJikgZmluYWw7Ci0KLSAgICB2b2lkIGdldFN0YXRzKE1lZGlhU3RyZWFtVHJhY2sq
LCBSZWY8RGVmZXJyZWRQcm9taXNlPiYmKSBmaW5hbDsKLQotICAgIFZlY3RvcjxSZWZQdHI8TWVk
aWFTdHJlYW0+PiBnZXRSZW1vdGVTdHJlYW1zKCkgY29uc3QgZmluYWw7Ci0KLSAgICBSZWY8UlRD
UnRwUmVjZWl2ZXI+IGNyZWF0ZVJlY2VpdmVyKGNvbnN0IFN0cmluZyYgdHJhbnNjZWl2ZXJNaWQs
IGNvbnN0IFN0cmluZyYgdHJhY2tLaW5kLCBjb25zdCBTdHJpbmcmIHRyYWNrSWQpIGZpbmFsOwot
ICAgIHZvaWQgcmVwbGFjZVRyYWNrKFJUQ1J0cFNlbmRlciYsIFJlZjxNZWRpYVN0cmVhbVRyYWNr
PiYmLCBET01Qcm9taXNlRGVmZXJyZWQ8dm9pZD4mJikgZmluYWw7Ci0KLSAgICB2b2lkIGVtdWxh
dGVQbGF0Zm9ybUV2ZW50KGNvbnN0IFN0cmluZyYgYWN0aW9uKSBmaW5hbDsKLQotICAgIHZvaWQg
cnVuVGFzayhGdW5jdGlvbjx2b2lkICgpPiYmKTsKLSAgICB2b2lkIHN0YXJ0UnVubmluZ1Rhc2tz
KCk7Ci0KLSAgICB2b2lkIGRvQ3JlYXRlT2ZmZXIoUlRDT2ZmZXJPcHRpb25zJiYpIGZpbmFsOwot
ICAgIHZvaWQgZG9DcmVhdGVBbnN3ZXIoUlRDQW5zd2VyT3B0aW9ucyYmKSBmaW5hbDsKLSAgICB2
b2lkIGRvU2V0TG9jYWxEZXNjcmlwdGlvbihSVENTZXNzaW9uRGVzY3JpcHRpb24mKSBmaW5hbDsK
LSAgICB2b2lkIGRvU2V0UmVtb3RlRGVzY3JpcHRpb24oUlRDU2Vzc2lvbkRlc2NyaXB0aW9uJikg
ZmluYWw7Ci0gICAgdm9pZCBkb0FkZEljZUNhbmRpZGF0ZShSVENJY2VDYW5kaWRhdGUmKSBmaW5h
bDsKLSAgICB2b2lkIGRvU3RvcCgpIGZpbmFsOwotCi0gICAgdm9pZCBjcmVhdGVPZmZlclRhc2so
Y29uc3QgUlRDT2ZmZXJPcHRpb25zJik7Ci0gICAgdm9pZCBjcmVhdGVBbnN3ZXJUYXNrKGNvbnN0
IFJUQ0Fuc3dlck9wdGlvbnMmKTsKLQotICAgIHZvaWQgc2V0TG9jYWxEZXNjcmlwdGlvblRhc2so
UmVmUHRyPFJUQ1Nlc3Npb25EZXNjcmlwdGlvbj4mJik7Ci0gICAgdm9pZCBzZXRSZW1vdGVEZXNj
cmlwdGlvblRhc2soUmVmUHRyPFJUQ1Nlc3Npb25EZXNjcmlwdGlvbj4mJik7Ci0KLSAgICB2b2lk
IGFkZEljZUNhbmRpZGF0ZVRhc2soUlRDSWNlQ2FuZGlkYXRlJik7Ci0KLSAgICB2b2lkIHJlcGxh
Y2VUcmFja1Rhc2soUlRDUnRwU2VuZGVyJiwgY29uc3QgU3RyaW5nJiBtaWQsIFJlZjxNZWRpYVN0
cmVhbVRyYWNrPiYmLCBET01Qcm9taXNlRGVmZXJyZWQ8dm9pZD4mKTsKLQotICAgIGJvb2wgbG9j
YWxEZXNjcmlwdGlvblR5cGVWYWxpZEZvclN0YXRlKFJUQ1NkcFR5cGUpIGNvbnN0OwotICAgIGJv
b2wgcmVtb3RlRGVzY3JpcHRpb25UeXBlVmFsaWRGb3JTdGF0ZShSVENTZHBUeXBlKSBjb25zdDsK
LQotICAgIE1lZGlhRW5kcG9pbnRTZXNzaW9uRGVzY3JpcHRpb24qIGludGVybmFsTG9jYWxEZXNj
cmlwdGlvbigpIGNvbnN0OwotICAgIE1lZGlhRW5kcG9pbnRTZXNzaW9uRGVzY3JpcHRpb24qIGlu
dGVybmFsUmVtb3RlRGVzY3JpcHRpb24oKSBjb25zdDsKLSAgICBSZWZQdHI8UlRDU2Vzc2lvbkRl
c2NyaXB0aW9uPiBjcmVhdGVSVENTZXNzaW9uRGVzY3JpcHRpb24oTWVkaWFFbmRwb2ludFNlc3Np
b25EZXNjcmlwdGlvbiopIGNvbnN0OwotCi0gICAgLy8gTWVkaWFFbmRwb2ludENsaWVudAotICAg
IHZvaWQgZ290RHRsc0ZpbmdlcnByaW50KGNvbnN0IFN0cmluZyYgZmluZ2VycHJpbnQsIGNvbnN0
IFN0cmluZyYgZmluZ2VycHJpbnRGdW5jdGlvbikgZmluYWw7Ci0gICAgdm9pZCBnb3RJY2VDYW5k
aWRhdGUoY29uc3QgU3RyaW5nJiBtaWQsIEljZUNhbmRpZGF0ZSYmKSBmaW5hbDsKLSAgICB2b2lk
IGRvbmVHYXRoZXJpbmdDYW5kaWRhdGVzKGNvbnN0IFN0cmluZyYgbWlkKSBmaW5hbDsKLSAgICB2
b2lkIGljZVRyYW5zcG9ydFN0YXRlQ2hhbmdlZChjb25zdCBTdHJpbmcmIG1pZCwgUlRDSWNlVHJh
bnNwb3J0U3RhdGUpIGZpbmFsOwotCi0gICAgc3RkOjp1bmlxdWVfcHRyPFJUQ0RhdGFDaGFubmVs
SGFuZGxlcj4gY3JlYXRlRGF0YUNoYW5uZWxIYW5kbGVyKGNvbnN0IFN0cmluZyYsIGNvbnN0IFJU
Q0RhdGFDaGFubmVsSW5pdCYpIGZpbmFsOwotCi0gICAgc3RkOjp1bmlxdWVfcHRyPE1lZGlhRW5k
cG9pbnQ+IG1fbWVkaWFFbmRwb2ludDsKLQotICAgIEZ1bmN0aW9uPHZvaWQgKCk+IG1faW5pdGlh
bERlZmVycmVkVGFzazsKLQotICAgIHN0ZDo6dW5pcXVlX3B0cjxTRFBQcm9jZXNzb3I+IG1fc2Rw
UHJvY2Vzc29yOwotCi0gICAgVmVjdG9yPE1lZGlhUGF5bG9hZD4gbV9kZWZhdWx0QXVkaW9QYXls
b2FkczsKLSAgICBWZWN0b3I8TWVkaWFQYXlsb2FkPiBtX2RlZmF1bHRWaWRlb1BheWxvYWRzOwot
Ci0gICAgU3RyaW5nIG1fY25hbWU7Ci0gICAgU3RyaW5nIG1faWNlVWZyYWc7Ci0gICAgU3RyaW5n
IG1faWNlUGFzc3dvcmQ7Ci0gICAgU3RyaW5nIG1fZHRsc0ZpbmdlcnByaW50OwotICAgIFN0cmlu
ZyBtX2R0bHNGaW5nZXJwcmludEZ1bmN0aW9uOwotICAgIHVuc2lnbmVkIG1fc2RwT2ZmZXJTZXNz
aW9uVmVyc2lvbiB7IDAgfTsKLSAgICB1bnNpZ25lZCBtX3NkcEFuc3dlclNlc3Npb25WZXJzaW9u
IHsgMCB9OwotCi0gICAgUmVmUHRyPE1lZGlhRW5kcG9pbnRTZXNzaW9uRGVzY3JpcHRpb24+IG1f
Y3VycmVudExvY2FsRGVzY3JpcHRpb247Ci0gICAgUmVmUHRyPE1lZGlhRW5kcG9pbnRTZXNzaW9u
RGVzY3JpcHRpb24+IG1fcGVuZGluZ0xvY2FsRGVzY3JpcHRpb247Ci0KLSAgICBSZWZQdHI8TWVk
aWFFbmRwb2ludFNlc3Npb25EZXNjcmlwdGlvbj4gbV9jdXJyZW50UmVtb3RlRGVzY3JpcHRpb247
Ci0gICAgUmVmUHRyPE1lZGlhRW5kcG9pbnRTZXNzaW9uRGVzY3JpcHRpb24+IG1fcGVuZGluZ1Jl
bW90ZURlc2NyaXB0aW9uOwotCi0gICAgSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxNZWRpYVN0cmVh
bT4+IG1fcmVtb3RlU3RyZWFtTWFwOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0j
ZW5kaWYgLy8gRU5BQkxFKFdFQl9SVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL21lZGlhc3RyZWFtL01lZGlhRW5kcG9pbnRTZXNzaW9uRGVzY3JpcHRpb24uY3BwIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYUVuZHBvaW50U2Vzc2lvbkRlc2Ny
aXB0aW9uLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWM2MDZmNTBjMmE5ZGQ3
ZWU4MTIzY2JlMzM5Zjc0N2Y3NDQwZmU3OS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlh
RW5kcG9pbnRTZXNzaW9uRGVzY3JpcHRpb24uY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTE3ICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUsIDIwMTYgRXJpY3Nzb24gQUIuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
Ci0gKiAgICBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlCi0gKiAgICBkaXN0cmlidXRpb24uCi0gKiAzLiBOZWl0aGVyIHRoZSBuYW1l
IG9mIEVyaWNzc29uIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICogICAgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlz
Ci0gKiAgICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
LSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJNZWRpYUVuZHBv
aW50U2Vzc2lvbkRlc2NyaXB0aW9uLmgiCi0KLSNpZiBFTkFCTEUoV0VCX1JUQykKLQotI2luY2x1
ZGUgIlNEUFByb2Nlc3Nvci5oIgotI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Ci0KLSNkZWZpbmUgU1RSSU5HX0ZVTkNUSU9OKG5hbWUpIFwKLSAg
ICBzdGF0aWMgY29uc3QgU3RyaW5nJiBuYW1lIyNTdHJpbmcoKSBcCi0gICAgeyBcCi0gICAgICAg
IHN0YXRpYyBOZXZlckRlc3Ryb3llZDxjb25zdCBTdHJpbmc+IG5hbWUoTUFLRV9TVEFUSUNfU1RS
SU5HX0lNUEwoI25hbWUpKTsgXAotICAgICAgICByZXR1cm4gbmFtZTsgXAotICAgIH0KLQotU1RS
SU5HX0ZVTkNUSU9OKG9mZmVyKQotU1RSSU5HX0ZVTkNUSU9OKHByYW5zd2VyKQotU1RSSU5HX0ZV
TkNUSU9OKGFuc3dlcikKLVNUUklOR19GVU5DVElPTihyb2xsYmFjaykKLQotUmVmPE1lZGlhRW5k
cG9pbnRTZXNzaW9uRGVzY3JpcHRpb24+IE1lZGlhRW5kcG9pbnRTZXNzaW9uRGVzY3JpcHRpb246
OmNyZWF0ZShSVENTZHBUeXBlIHR5cGUsIFJlZlB0cjxNZWRpYUVuZHBvaW50U2Vzc2lvbkNvbmZp
Z3VyYXRpb24+JiYgY29uZmlndXJhdGlvbikKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBN
ZWRpYUVuZHBvaW50U2Vzc2lvbkRlc2NyaXB0aW9uKHR5cGUsIFdURk1vdmUoY29uZmlndXJhdGlv
biksIG51bGxwdHIpKTsKLX0KLQotRXhjZXB0aW9uT3I8UmVmPE1lZGlhRW5kcG9pbnRTZXNzaW9u
RGVzY3JpcHRpb24+PiBNZWRpYUVuZHBvaW50U2Vzc2lvbkRlc2NyaXB0aW9uOjpjcmVhdGUoUmVm
UHRyPFJUQ1Nlc3Npb25EZXNjcmlwdGlvbj4mJiBydGNEZXNjcmlwdGlvbiwgY29uc3QgU0RQUHJv
Y2Vzc29yJiBzZHBQcm9jZXNzb3IpCi17Ci0gICAgUmVmUHRyPE1lZGlhRW5kcG9pbnRTZXNzaW9u
Q29uZmlndXJhdGlvbj4gY29uZmlndXJhdGlvbjsKLSAgICBhdXRvIHJlc3VsdCA9IHNkcFByb2Nl
c3Nvci5wYXJzZShydGNEZXNjcmlwdGlvbi0+c2RwKCksIGNvbmZpZ3VyYXRpb24pOwotICAgIGlm
IChyZXN1bHQgIT0gU0RQUHJvY2Vzc29yOjpSZXN1bHQ6OlN1Y2Nlc3MpIHsKLSAgICAgICAgaWYg
KHJlc3VsdCA9PSBTRFBQcm9jZXNzb3I6OlJlc3VsdDo6UGFyc2VFcnJvcikKLSAgICAgICAgICAg
IHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3IsIEFTQ0lJTGl0ZXJhbCgiU0RQ
IGNvbnRlbnQgaXMgaW52YWxpZCIpIH07Ci0gICAgICAgIExPR19FUlJPUigiU0RQUHJvY2Vzc29y
IGludGVybmFsIGVycm9yIik7Ci0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBBYm9ydEVycm9y
LCBBU0NJSUxpdGVyYWwoIkludGVybmFsIGVycm9yIikgfTsKLSAgICB9Ci0gICAgcmV0dXJuIGFk
b3B0UmVmKCpuZXcgTWVkaWFFbmRwb2ludFNlc3Npb25EZXNjcmlwdGlvbihydGNEZXNjcmlwdGlv
bi0+dHlwZSgpLCBXVEZNb3ZlKGNvbmZpZ3VyYXRpb24pLCBXVEZNb3ZlKHJ0Y0Rlc2NyaXB0aW9u
KSkpOwotfQotCi1SZWZQdHI8UlRDU2Vzc2lvbkRlc2NyaXB0aW9uPiBNZWRpYUVuZHBvaW50U2Vz
c2lvbkRlc2NyaXB0aW9uOjp0b1JUQ1Nlc3Npb25EZXNjcmlwdGlvbihjb25zdCBTRFBQcm9jZXNz
b3ImIHNkcFByb2Nlc3NvcikgY29uc3QKLXsKLSAgICBTdHJpbmcgc2RwU3RyaW5nOwotICAgIFNE
UFByb2Nlc3Nvcjo6UmVzdWx0IHJlc3VsdCA9IHNkcFByb2Nlc3Nvci5nZW5lcmF0ZSgqbV9jb25m
aWd1cmF0aW9uLCBzZHBTdHJpbmcpOwotICAgIGlmIChyZXN1bHQgIT0gU0RQUHJvY2Vzc29yOjpS
ZXN1bHQ6OlN1Y2Nlc3MpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJTRFBQcm9jZXNzb3IgaW50ZXJu
YWwgZXJyb3IiKTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAgLy8gSWYg
dGhpcyBvYmplY3Qgd2FzIGNyZWF0ZWQgZnJvbSBhbiBSVENTZXNzaW9uRGVzY3JpcHRpb24sIHRv
UlRDU2Vzc2lvbkRlc2NyaXB0aW9uIHdpbGwgcmV0dXJuCi0gICAgLy8gdGhhdCBzYW1lIGluc3Rh
bmNlIGJ1dCB3aXRoIGFuIHVwZGF0ZWQgc2RwLiBJdCBpcyB1c2VkIGZvciBSVENQZWVyQ29ubmVj
dGlvbidzIGRlc2NyaXB0aW9uCi0gICAgLy8gYXRyaWJ1dGVzIChlLmcuIGxvY2FsRGVzY3JpcHRp
b24gYW5kIHBlbmRpbmdMb2NhbERlc2NyaXB0aW9uKS4KLSAgICBpZiAobV9ydGNEZXNjcmlwdGlv
bikgewotICAgICAgICBtX3J0Y0Rlc2NyaXB0aW9uLT5zZXRTZHAoV1RGTW92ZShzZHBTdHJpbmcp
KTsKLSAgICAgICAgcmV0dXJuIG1fcnRjRGVzY3JpcHRpb247Ci0gICAgfQotCi0gICAgcmV0dXJu
IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbjo6Y3JlYXRlKG1fdHlwZSwgV1RGTW92ZShzZHBTdHJpbmcp
KTsKLX0KLQotLy8gRklYTUU6IHVuaWZ5IHdpdGggTGliV2ViUlRDTWVkaWFFbmRwb2ludCBzZXNz
aW9uRGVzY3JpcHRpb25UeXBlKCkuCi1jb25zdCBTdHJpbmcmIE1lZGlhRW5kcG9pbnRTZXNzaW9u
RGVzY3JpcHRpb246OnR5cGVTdHJpbmcoKSBjb25zdAotewotICAgIHN3aXRjaCAobV90eXBlKSB7
Ci0gICAgY2FzZSBSVENTZHBUeXBlOjpPZmZlcjoKLSAgICAgICAgcmV0dXJuIG9mZmVyU3RyaW5n
KCk7Ci0gICAgY2FzZSBSVENTZHBUeXBlOjpQcmFuc3dlcjoKLSAgICAgICAgcmV0dXJuIHByYW5z
d2VyU3RyaW5nKCk7Ci0gICAgY2FzZSBSVENTZHBUeXBlOjpBbnN3ZXI6Ci0gICAgICAgIHJldHVy
biBhbnN3ZXJTdHJpbmcoKTsKLSAgICBjYXNlIFJUQ1NkcFR5cGU6OlJvbGxiYWNrOgotICAgICAg
ICByZXR1cm4gcm9sbGJhY2tTdHJpbmcoKTsKLSAgICB9Ci0KLSAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKLSAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKLX0KLQotYm9vbCBNZWRpYUVuZHBvaW50
U2Vzc2lvbkRlc2NyaXB0aW9uOjppc0xhdGVyVGhhbihNZWRpYUVuZHBvaW50U2Vzc2lvbkRlc2Ny
aXB0aW9uKiBvdGhlcikgY29uc3QKLXsKLSAgICByZXR1cm4gIW90aGVyIHx8IGNvbmZpZ3VyYXRp
b24oKS0+c2Vzc2lvblZlcnNpb24oKSA+IG90aGVyLT5jb25maWd1cmF0aW9uKCktPnNlc3Npb25W
ZXJzaW9uKCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJM
RShXRUJfUlRDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVh
bS9NZWRpYUVuZHBvaW50U2Vzc2lvbkRlc2NyaXB0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL21lZGlhc3RyZWFtL01lZGlhRW5kcG9pbnRTZXNzaW9uRGVzY3JpcHRpb24uaApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWQwNWM3MjkyY2VjMjkxZGU5ZjEzMTFmMTM4OGQzN2Ri
YWEzYzY3NS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhRW5kcG9pbnRTZXNzaW9uRGVz
Y3JpcHRpb24uaAorKysgL2Rldi9udWxsCkBAIC0xLDc0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTUsIDIwMTYgRXJpY3Nzb24gQUIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqICAgIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqICAg
IGRpc3RyaWJ1dGlvbi4KLSAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgRXJpY3Nzb24gbm9yIHRo
ZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0gKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSAqICAgIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0g
KiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3By
YWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUoV0VCX1JUQykKLQotI2luY2x1ZGUgIkV4Y2VwdGlvbk9y
LmgiCi0jaW5jbHVkZSAiUlRDU2Vzc2lvbkRlc2NyaXB0aW9uLmgiCi0jaW5jbHVkZSA8d3RmL1Jl
ZkNvdW50ZWQuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotY2xhc3MgTWVkaWFFbmRwb2ludFNlc3Npb25Db25maWd1cmF0aW9uOwotY2xhc3MgU0RQ
UHJvY2Vzc29yOwotCi1jbGFzcyBNZWRpYUVuZHBvaW50U2Vzc2lvbkRlc2NyaXB0aW9uIDogcHVi
bGljIFJlZkNvdW50ZWQ8TWVkaWFFbmRwb2ludFNlc3Npb25EZXNjcmlwdGlvbj4gewotcHVibGlj
OgotICAgIHN0YXRpYyBSZWY8TWVkaWFFbmRwb2ludFNlc3Npb25EZXNjcmlwdGlvbj4gY3JlYXRl
KFJUQ1NkcFR5cGUsIFJlZlB0cjxNZWRpYUVuZHBvaW50U2Vzc2lvbkNvbmZpZ3VyYXRpb24+JiYp
OwotICAgIHN0YXRpYyBFeGNlcHRpb25PcjxSZWY8TWVkaWFFbmRwb2ludFNlc3Npb25EZXNjcmlw
dGlvbj4+IGNyZWF0ZShSZWZQdHI8UlRDU2Vzc2lvbkRlc2NyaXB0aW9uPiYmLCBjb25zdCBTRFBQ
cm9jZXNzb3ImKTsKLSAgICB2aXJ0dWFsIH5NZWRpYUVuZHBvaW50U2Vzc2lvbkRlc2NyaXB0aW9u
KCkgeyB9IC8vIEZJWE1FOiBXaHkgaXMgdGhpcyB2aXJ0dWFsPyBUaGVyZSBhcmUgbm8gb3RoZXIg
dmlydHVhbCBmdW5jdGlvbnMgaW4gdGhpcyBjbGFzcy4KLQotICAgIFJlZlB0cjxSVENTZXNzaW9u
RGVzY3JpcHRpb24+IHRvUlRDU2Vzc2lvbkRlc2NyaXB0aW9uKGNvbnN0IFNEUFByb2Nlc3NvciYp
IGNvbnN0OwotCi0gICAgUlRDU2RwVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9
Ci0gICAgY29uc3QgU3RyaW5nJiB0eXBlU3RyaW5nKCkgY29uc3Q7Ci0gICAgTWVkaWFFbmRwb2lu
dFNlc3Npb25Db25maWd1cmF0aW9uKiBjb25maWd1cmF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9j
b25maWd1cmF0aW9uLmdldCgpOyB9Ci0KLSAgICBib29sIGlzTGF0ZXJUaGFuKE1lZGlhRW5kcG9p
bnRTZXNzaW9uRGVzY3JpcHRpb24qIG90aGVyKSBjb25zdDsKLQotcHJpdmF0ZToKLSAgICBNZWRp
YUVuZHBvaW50U2Vzc2lvbkRlc2NyaXB0aW9uKFJUQ1NkcFR5cGUgdHlwZSwgUmVmUHRyPE1lZGlh
RW5kcG9pbnRTZXNzaW9uQ29uZmlndXJhdGlvbj4mJiBjb25maWd1cmF0aW9uLCBSZWZQdHI8UlRD
U2Vzc2lvbkRlc2NyaXB0aW9uPiYmIHJ0Y0Rlc2NyaXB0aW9uKQotICAgICAgICA6IG1fdHlwZSh0
eXBlKQotICAgICAgICAsIG1fY29uZmlndXJhdGlvbihjb25maWd1cmF0aW9uKQotICAgICAgICAs
IG1fcnRjRGVzY3JpcHRpb24oV1RGTW92ZShydGNEZXNjcmlwdGlvbikpCi0gICAgeyB9Ci0KLSAg
ICBSVENTZHBUeXBlIG1fdHlwZTsKLSAgICBSZWZQdHI8TWVkaWFFbmRwb2ludFNlc3Npb25Db25m
aWd1cmF0aW9uPiBtX2NvbmZpZ3VyYXRpb247Ci0KLSAgICBSZWZQdHI8UlRDU2Vzc2lvbkRlc2Ny
aXB0aW9uPiBtX3J0Y0Rlc2NyaXB0aW9uOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQot
Ci0jZW5kaWYgLy8gRU5BQkxFKFdFQl9SVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL21lZGlhc3RyZWFtL1NEUFByb2Nlc3Nvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL21lZGlhc3RyZWFtL1NEUFByb2Nlc3Nvci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDcxNWNmMmYyODg4ZmY3NDA3ZTVjNjVkYzI4YjNiY2RkNWIyNzg1MTIuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9tZWRpYXN0cmVhbS9TRFBQcm9jZXNzb3IuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNTYy
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUsIDIwMTYgRXJpY3Nzb24gQUIuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIKLSAqICAgIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqICAgIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIE5laXRoZXIg
dGhlIG5hbWUgb2YgRXJpY3Nzb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0g
KiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tIHRoaXMKLSAqICAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
LSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxF
KFdFQl9SVEMpCi0jaW5jbHVkZSAiU0RQUHJvY2Vzc29yLmgiCi0KLSNpbmNsdWRlICJDb21tb25W
TS5oIgotI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRl
ICJTRFBQcm9jZXNzb3JTY3JpcHRSZXNvdXJjZS5oIgotI2luY2x1ZGUgIlNjcmlwdENvbnRyb2xs
ZXIuaCIKLSNpbmNsdWRlICJTY3JpcHRTb3VyY2VDb2RlLmgiCi0jaW5jbHVkZSAiaW5zcGVjdG9y
L0luc3BlY3RvclZhbHVlcy5oIgotI2luY2x1ZGUgPGJpbmRpbmdzL1NjcmlwdE9iamVjdC5oPgot
I2luY2x1ZGUgPHJ1bnRpbWUvQ2F0Y2hTY29wZS5oPgotI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ry
b3llZC5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0KLSNkZWZpbmUgU1RSSU5HX0ZVTkNUSU9OKG5hbWUpIFwKLSAgICBzdGF0aWMgY29uc3Qg
U3RyaW5nJiBuYW1lIyNTdHJpbmcoKSBcCi0gICAgeyBcCi0gICAgICAgIHN0YXRpYyBOZXZlckRl
c3Ryb3llZDxjb25zdCBTdHJpbmc+IG5hbWUoTUFLRV9TVEFUSUNfU1RSSU5HX0lNUEwoI25hbWUp
KTsgXAotICAgICAgICByZXR1cm4gbmFtZTsgXAotICAgIH0KLQotU1RSSU5HX0ZVTkNUSU9OKGFk
ZHJlc3MpCi1TVFJJTkdfRlVOQ1RJT04oYXB0KQotU1RSSU5HX0ZVTkNUSU9OKGJ1bmRsZVBvbGlj
eSkKLVNUUklOR19GVU5DVElPTihjYW5kaWRhdGVzKQotU1RSSU5HX0ZVTkNUSU9OKGNjbWZpcikK
LVNUUklOR19GVU5DVElPTihjaGFubmVscykKLVNUUklOR19GVU5DVElPTihjbG9ja1JhdGUpCi1T
VFJJTkdfRlVOQ1RJT04oY25hbWUpCi1TVFJJTkdfRlVOQ1RJT04oY29tcG9uZW50SWQpCi1TVFJJ
TkdfRlVOQ1RJT04oZHRscykKLVNUUklOR19GVU5DVElPTihlbmNvZGluZ05hbWUpCi1TVFJJTkdf
RlVOQ1RJT04oZmluZ2VycHJpbnQpCi1TVFJJTkdfRlVOQ1RJT04oZmluZ2VycHJpbnRIYXNoRnVu
Y3Rpb24pCi1TVFJJTkdfRlVOQ1RJT04oZm91bmRhdGlvbikKLVNUUklOR19GVU5DVElPTihpY2Up
Ci1TVFJJTkdfRlVOQ1RJT04obWVkaWFEZXNjcmlwdGlvbnMpCi1TVFJJTkdfRlVOQ1RJT04obWVk
aWFTdHJlYW1JZCkKLVNUUklOR19GVU5DVElPTihtZWRpYVN0cmVhbVRyYWNrSWQpCi1TVFJJTkdf
RlVOQ1RJT04obWlkKQotU1RSSU5HX0ZVTkNUSU9OKG1vZGUpCi1TVFJJTkdfRlVOQ1RJT04obXV4
KQotU1RSSU5HX0ZVTkNUSU9OKG5hY2spCi1TVFJJTkdfRlVOQ1RJT04obmFja3BsaSkKLVNUUklO
R19GVU5DVElPTihvcmlnaW5hdG9yKQotU1RSSU5HX0ZVTkNUSU9OKHBhY2tldGl6YXRpb25Nb2Rl
KQotU1RSSU5HX0ZVTkNUSU9OKHBhcmFtZXRlcnMpCi1TVFJJTkdfRlVOQ1RJT04ocGFzc3dvcmQp
Ci1TVFJJTkdfRlVOQ1RJT04ocGF5bG9hZHMpCi1TVFJJTkdfRlVOQ1RJT04ocG9ydCkKLVNUUklO
R19GVU5DVElPTihwcmlvcml0eSkKLVNUUklOR19GVU5DVElPTihyZWxhdGVkQWRkcmVzcykKLVNU
UklOR19GVU5DVElPTihyZWxhdGVkUG9ydCkKLVNUUklOR19GVU5DVElPTihydGNwKQotU1RSSU5H
X0ZVTkNUSU9OKHJ0Y3BBZGRyZXNzKQotU1RSSU5HX0ZVTkNUSU9OKHJ0Y3BQb3J0KQotU1RSSU5H
X0ZVTkNUSU9OKHJ0eFRpbWUpCi1TVFJJTkdfRlVOQ1RJT04oc2Vzc2lvbklkKQotU1RSSU5HX0ZV
TkNUSU9OKHNlc3Npb25WZXJzaW9uKQotU1RSSU5HX0ZVTkNUSU9OKHNldHVwKQotU1RSSU5HX0ZV
TkNUSU9OKHNzcmNzKQotU1RSSU5HX0ZVTkNUSU9OKHRjcFR5cGUpCi1TVFJJTkdfRlVOQ1RJT04o
dHJhbnNwb3J0KQotU1RSSU5HX0ZVTkNUSU9OKHR5cGUpCi1TVFJJTkdfRlVOQ1RJT04odWZyYWcp
Ci0KLVNEUFByb2Nlc3Nvcjo6U0RQUHJvY2Vzc29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNv
bnRleHQpCi0gICAgOiBDb250ZXh0RGVzdHJ1Y3Rpb25PYnNlcnZlcihjb250ZXh0KQotewotfQot
Ci0vLyBOb3RlIHRoYXQgTWVkaWFFbmRwb2ludFNlc3Npb25Db25maWd1cmF0aW9uIGlzIGEgImZs
YXR0ZXIiIHN0cnVjdHVyZSB0aGF0IHRoZSBKU09OIHJlcHJlc2VudGF0aW9uLiBGb3IKLS8vIGV4
YW1wbGUsIHRoZSBKU09OIHJlcHJlc2VudGF0aW9uIGhhcyBhbiAiaWNlIiBvYmplY3Qgd2hpY2gg
Y29sbGVjdHMgYSBzZXQgb2YgcHJvcGVydGllcyB1bmRlciBhCi0vLyBuYW1lc3BhY2UuIE1lZGlh
RW5kcG9pbnRTZXNzaW9uQ29uZmlndXJhdGlvbiBoYXMgImljZSItcHJlZml4ZXMgb24gdGhlIGNv
cnJlc3BvbmRpbmcgcHJvcGVydGllcy4KLQotc3RhdGljIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IGNyZWF0ZUNhbmRpZGF0ZU9iamVjdChjb25zdCBJY2VDYW5kaWRhdGUmIGNhbmRpZGF0ZSkKLXsK
LSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBjYW5kaWRhdGVPYmplY3QgPSBJbnNwZWN0b3JP
YmplY3Q6OmNyZWF0ZSgpOwotCi0gICAgY2FuZGlkYXRlT2JqZWN0LT5zZXRTdHJpbmcodHlwZVN0
cmluZygpLCBjYW5kaWRhdGUudHlwZSk7Ci0gICAgY2FuZGlkYXRlT2JqZWN0LT5zZXRTdHJpbmco
Zm91bmRhdGlvblN0cmluZygpLCBjYW5kaWRhdGUuZm91bmRhdGlvbik7Ci0gICAgY2FuZGlkYXRl
T2JqZWN0LT5zZXRJbnRlZ2VyKGNvbXBvbmVudElkU3RyaW5nKCksIGNhbmRpZGF0ZS5jb21wb25l
bnRJZCk7Ci0gICAgY2FuZGlkYXRlT2JqZWN0LT5zZXRTdHJpbmcodHJhbnNwb3J0U3RyaW5nKCks
IGNhbmRpZGF0ZS50cmFuc3BvcnQpOwotICAgIGNhbmRpZGF0ZU9iamVjdC0+c2V0SW50ZWdlcihw
cmlvcml0eVN0cmluZygpLCBjYW5kaWRhdGUucHJpb3JpdHkpOwotICAgIGNhbmRpZGF0ZU9iamVj
dC0+c2V0U3RyaW5nKGFkZHJlc3NTdHJpbmcoKSwgY2FuZGlkYXRlLmFkZHJlc3MpOwotICAgIGNh
bmRpZGF0ZU9iamVjdC0+c2V0SW50ZWdlcihwb3J0U3RyaW5nKCksIGNhbmRpZGF0ZS5wb3J0KTsK
LSAgICBpZiAoIWNhbmRpZGF0ZS50Y3BUeXBlLmlzRW1wdHkoKSkKLSAgICAgICAgY2FuZGlkYXRl
T2JqZWN0LT5zZXRTdHJpbmcodGNwVHlwZVN0cmluZygpLCBjYW5kaWRhdGUudGNwVHlwZSk7Ci0g
ICAgaWYgKGNhbmRpZGF0ZS50eXBlLmNvbnZlcnRUb0FTQ0lJVXBwZXJjYXNlKCkgIT0gIkhPU1Qi
KSB7Ci0gICAgICAgIGNhbmRpZGF0ZU9iamVjdC0+c2V0U3RyaW5nKHJlbGF0ZWRBZGRyZXNzU3Ry
aW5nKCksIGNhbmRpZGF0ZS5yZWxhdGVkQWRkcmVzcyk7Ci0gICAgICAgIGNhbmRpZGF0ZU9iamVj
dC0+c2V0SW50ZWdlcihyZWxhdGVkUG9ydFN0cmluZygpLCBjYW5kaWRhdGUucmVsYXRlZFBvcnQp
OwotICAgIH0KLQotICAgIHJldHVybiBjYW5kaWRhdGVPYmplY3Q7Ci19Ci0KLXN0YXRpYyBJY2VD
YW5kaWRhdGUgY3JlYXRlQ2FuZGlkYXRlKGNvbnN0IEluc3BlY3Rvck9iamVjdCYgY2FuZGlkYXRl
T2JqZWN0KQotewotICAgIEljZUNhbmRpZGF0ZSBjYW5kaWRhdGU7Ci0gICAgU3RyaW5nIHN0cmlu
Z1ZhbHVlOwotICAgIHVuc2lnbmVkIGludFZhbHVlOwotCi0gICAgaWYgKGNhbmRpZGF0ZU9iamVj
dC5nZXRTdHJpbmcodHlwZVN0cmluZygpLCBzdHJpbmdWYWx1ZSkpCi0gICAgICAgIGNhbmRpZGF0
ZS50eXBlID0gc3RyaW5nVmFsdWU7Ci0KLSAgICBpZiAoY2FuZGlkYXRlT2JqZWN0LmdldFN0cmlu
Zyhmb3VuZGF0aW9uU3RyaW5nKCksIHN0cmluZ1ZhbHVlKSkKLSAgICAgICAgY2FuZGlkYXRlLmZv
dW5kYXRpb24gPSBzdHJpbmdWYWx1ZTsKLQotICAgIGlmIChjYW5kaWRhdGVPYmplY3QuZ2V0SW50
ZWdlcihjb21wb25lbnRJZFN0cmluZygpLCBpbnRWYWx1ZSkpCi0gICAgICAgIGNhbmRpZGF0ZS5j
b21wb25lbnRJZCA9IGludFZhbHVlOwotCi0gICAgaWYgKGNhbmRpZGF0ZU9iamVjdC5nZXRTdHJp
bmcodHJhbnNwb3J0U3RyaW5nKCksIHN0cmluZ1ZhbHVlKSkKLSAgICAgICAgY2FuZGlkYXRlLnRy
YW5zcG9ydCA9IHN0cmluZ1ZhbHVlOwotCi0gICAgaWYgKGNhbmRpZGF0ZU9iamVjdC5nZXRJbnRl
Z2VyKHByaW9yaXR5U3RyaW5nKCksIGludFZhbHVlKSkKLSAgICAgICAgY2FuZGlkYXRlLnByaW9y
aXR5ID0gaW50VmFsdWU7Ci0KLSAgICBpZiAoY2FuZGlkYXRlT2JqZWN0LmdldFN0cmluZyhhZGRy
ZXNzU3RyaW5nKCksIHN0cmluZ1ZhbHVlKSkKLSAgICAgICAgY2FuZGlkYXRlLmFkZHJlc3MgPSBz
dHJpbmdWYWx1ZTsKLQotICAgIGlmIChjYW5kaWRhdGVPYmplY3QuZ2V0SW50ZWdlcihwb3J0U3Ry
aW5nKCksIGludFZhbHVlKSkKLSAgICAgICAgY2FuZGlkYXRlLnBvcnQgPSBpbnRWYWx1ZTsKLQot
ICAgIGlmIChjYW5kaWRhdGVPYmplY3QuZ2V0U3RyaW5nKHRjcFR5cGVTdHJpbmcoKSwgc3RyaW5n
VmFsdWUpKQotICAgICAgICBjYW5kaWRhdGUudGNwVHlwZSA9IHN0cmluZ1ZhbHVlOwotCi0gICAg
aWYgKGNhbmRpZGF0ZU9iamVjdC5nZXRTdHJpbmcocmVsYXRlZEFkZHJlc3NTdHJpbmcoKSwgc3Ry
aW5nVmFsdWUpKQotICAgICAgICBjYW5kaWRhdGUucmVsYXRlZEFkZHJlc3MgPSBzdHJpbmdWYWx1
ZTsKLQotICAgIGlmIChjYW5kaWRhdGVPYmplY3QuZ2V0SW50ZWdlcihyZWxhdGVkUG9ydFN0cmlu
ZygpLCBpbnRWYWx1ZSkpCi0gICAgICAgIGNhbmRpZGF0ZS5yZWxhdGVkUG9ydCA9IGludFZhbHVl
OwotCi0gICAgcmV0dXJuIGNhbmRpZGF0ZTsKLX0KLQotc3RhdGljIFJlZlB0cjxNZWRpYUVuZHBv
aW50U2Vzc2lvbkNvbmZpZ3VyYXRpb24+IGNvbmZpZ3VyYXRpb25Gcm9tSlNPTihjb25zdCBTdHJp
bmcmIGpzb24pCi17Ci0gICAgUmVmUHRyPEluc3BlY3RvclZhbHVlPiB2YWx1ZTsKLSAgICBpZiAo
IUluc3BlY3RvclZhbHVlOjpwYXJzZUpTT04oanNvbiwgdmFsdWUpKQotICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLQotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG9iamVjdDsKLSAgICBpZiAo
IXZhbHVlLT5hc09iamVjdChvYmplY3QpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAg
IFJlZlB0cjxNZWRpYUVuZHBvaW50U2Vzc2lvbkNvbmZpZ3VyYXRpb24+IGNvbmZpZ3VyYXRpb24g
PSBNZWRpYUVuZHBvaW50U2Vzc2lvbkNvbmZpZ3VyYXRpb246OmNyZWF0ZSgpOwotCi0gICAgU3Ry
aW5nIHN0cmluZ1ZhbHVlOwotICAgIHVuc2lnbmVkIGludFZhbHVlOwotICAgIGJvb2wgYm9vbFZh
bHVlOwotCi0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gb3JpZ2luYXRvck9iamVjdCA9IElu
c3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgaWYgKG9iamVjdC0+Z2V0T2JqZWN0KG9yaWdp
bmF0b3JTdHJpbmcoKSwgb3JpZ2luYXRvck9iamVjdCkpIHsKLSAgICAgICAgaWYgKG9yaWdpbmF0
b3JPYmplY3QtPmdldFN0cmluZyhzZXNzaW9uSWRTdHJpbmcoKSwgc3RyaW5nVmFsdWUpKQotICAg
ICAgICAgICAgY29uZmlndXJhdGlvbi0+c2V0U2Vzc2lvbklkKHN0cmluZ1ZhbHVlLnRvSW50NjQo
KSk7Ci0gICAgICAgIGlmIChvcmlnaW5hdG9yT2JqZWN0LT5nZXRJbnRlZ2VyKHNlc3Npb25WZXJz
aW9uU3RyaW5nKCksIGludFZhbHVlKSkKLSAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24tPnNldFNl
c3Npb25WZXJzaW9uKGludFZhbHVlKTsKLSAgICB9Ci0KLSAgICBSZWZQdHI8SW5zcGVjdG9yQXJy
YXk+IG1lZGlhRGVzY3JpcHRpb25zQXJyYXkgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7Ci0g
ICAgb2JqZWN0LT5nZXRBcnJheShtZWRpYURlc2NyaXB0aW9uc1N0cmluZygpLCBtZWRpYURlc2Ny
aXB0aW9uc0FycmF5KTsKLQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtZWRpYURlc2Ny
aXB0aW9uc0FycmF5LT5sZW5ndGgoKTsgKytpKSB7Ci0gICAgICAgIFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IG1lZGlhRGVzY3JpcHRpb25PYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgp
OwotICAgICAgICBtZWRpYURlc2NyaXB0aW9uc0FycmF5LT5nZXQoaSktPmFzT2JqZWN0KG1lZGlh
RGVzY3JpcHRpb25PYmplY3QpOwotCi0gICAgICAgIFBlZXJNZWRpYURlc2NyaXB0aW9uIG1lZGlh
RGVzY3JpcHRpb247Ci0KLSAgICAgICAgaWYgKG1lZGlhRGVzY3JpcHRpb25PYmplY3QtPmdldFN0
cmluZyh0eXBlU3RyaW5nKCksIHN0cmluZ1ZhbHVlKSkKLSAgICAgICAgICAgIG1lZGlhRGVzY3Jp
cHRpb24udHlwZSA9IHN0cmluZ1ZhbHVlOwotCi0gICAgICAgIGlmIChtZWRpYURlc2NyaXB0aW9u
T2JqZWN0LT5nZXRJbnRlZ2VyKHBvcnRTdHJpbmcoKSwgaW50VmFsdWUpKQotICAgICAgICAgICAg
bWVkaWFEZXNjcmlwdGlvbi5wb3J0ID0gaW50VmFsdWU7Ci0KLSAgICAgICAgaWYgKG1lZGlhRGVz
Y3JpcHRpb25PYmplY3QtPmdldFN0cmluZyhhZGRyZXNzU3RyaW5nKCksIHN0cmluZ1ZhbHVlKSkK
LSAgICAgICAgICAgIG1lZGlhRGVzY3JpcHRpb24uYWRkcmVzcyA9IHN0cmluZ1ZhbHVlOwotCi0g
ICAgICAgIGlmIChtZWRpYURlc2NyaXB0aW9uT2JqZWN0LT5nZXRTdHJpbmcobW9kZVN0cmluZygp
LCBzdHJpbmdWYWx1ZSkpCi0gICAgICAgICAgICBtZWRpYURlc2NyaXB0aW9uLm1vZGUgPSBzdHJp
bmdWYWx1ZTsKLQotICAgICAgICBpZiAobWVkaWFEZXNjcmlwdGlvbk9iamVjdC0+Z2V0U3RyaW5n
KG1pZFN0cmluZygpLCBzdHJpbmdWYWx1ZSkpCi0gICAgICAgICAgICBtZWRpYURlc2NyaXB0aW9u
Lm1pZCA9IHN0cmluZ1ZhbHVlOwotCi0gICAgICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcGF5
bG9hZHNBcnJheSA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKLSAgICAgICAgbWVkaWFEZXNj
cmlwdGlvbk9iamVjdC0+Z2V0QXJyYXkocGF5bG9hZHNTdHJpbmcoKSwgcGF5bG9hZHNBcnJheSk7
Ci0KLSAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IHBheWxvYWRzQXJyYXktPmxlbmd0
aCgpOyArK2opIHsKLSAgICAgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBheWxvYWRz
T2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKLSAgICAgICAgICAgIHBheWxvYWRz
QXJyYXktPmdldChqKS0+YXNPYmplY3QocGF5bG9hZHNPYmplY3QpOwotCi0gICAgICAgICAgICBN
ZWRpYVBheWxvYWQgcGF5bG9hZDsKLQotICAgICAgICAgICAgaWYgKHBheWxvYWRzT2JqZWN0LT5n
ZXRJbnRlZ2VyKHR5cGVTdHJpbmcoKSwgaW50VmFsdWUpKQotICAgICAgICAgICAgICAgIHBheWxv
YWQudHlwZSA9IGludFZhbHVlOwotCi0gICAgICAgICAgICBpZiAocGF5bG9hZHNPYmplY3QtPmdl
dFN0cmluZyhlbmNvZGluZ05hbWVTdHJpbmcoKSwgc3RyaW5nVmFsdWUpKQotICAgICAgICAgICAg
ICAgIHBheWxvYWQuZW5jb2RpbmdOYW1lID0gc3RyaW5nVmFsdWU7Ci0KLSAgICAgICAgICAgIGlm
IChwYXlsb2Fkc09iamVjdC0+Z2V0SW50ZWdlcihjbG9ja1JhdGVTdHJpbmcoKSwgaW50VmFsdWUp
KQotICAgICAgICAgICAgICAgIHBheWxvYWQuY2xvY2tSYXRlID0gaW50VmFsdWU7Ci0KLSAgICAg
ICAgICAgIGlmIChwYXlsb2Fkc09iamVjdC0+Z2V0SW50ZWdlcihjaGFubmVsc1N0cmluZygpLCBp
bnRWYWx1ZSkpCi0gICAgICAgICAgICAgICAgcGF5bG9hZC5jaGFubmVscyA9IGludFZhbHVlOwot
Ci0gICAgICAgICAgICBpZiAocGF5bG9hZHNPYmplY3QtPmdldEJvb2xlYW4oY2NtZmlyU3RyaW5n
KCksIGJvb2xWYWx1ZSkpCi0gICAgICAgICAgICAgICAgcGF5bG9hZC5jY21maXIgPSBib29sVmFs
dWU7Ci0KLSAgICAgICAgICAgIGlmIChwYXlsb2Fkc09iamVjdC0+Z2V0Qm9vbGVhbihuYWNrcGxp
U3RyaW5nKCksIGJvb2xWYWx1ZSkpCi0gICAgICAgICAgICAgICAgcGF5bG9hZC5uYWNrcGxpID0g
Ym9vbFZhbHVlOwotCi0gICAgICAgICAgICBpZiAocGF5bG9hZHNPYmplY3QtPmdldEJvb2xlYW4o
bmFja1N0cmluZygpLCBib29sVmFsdWUpKQotICAgICAgICAgICAgICAgIHBheWxvYWQubmFjayA9
IGJvb2xWYWx1ZTsKLQotICAgICAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1l
dGVyc09iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgICAgICAgICBpZiAo
cGF5bG9hZHNPYmplY3QtPmdldE9iamVjdChwYXJhbWV0ZXJzU3RyaW5nKCksIHBhcmFtZXRlcnNP
YmplY3QpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHBhcmFtZXRlcnNPYmplY3QtPmdldEludGVn
ZXIocGFja2V0aXphdGlvbk1vZGVTdHJpbmcoKSwgaW50VmFsdWUpKQotICAgICAgICAgICAgICAg
ICAgICBwYXlsb2FkLmFkZFBhcmFtZXRlcigicGFja2V0aXphdGlvbk1vZGUiLCBpbnRWYWx1ZSk7
Ci0KLSAgICAgICAgICAgICAgICBpZiAocGFyYW1ldGVyc09iamVjdC0+Z2V0SW50ZWdlcihhcHRT
dHJpbmcoKSwgaW50VmFsdWUpKQotICAgICAgICAgICAgICAgICAgICBwYXlsb2FkLmFkZFBhcmFt
ZXRlcigiYXB0IiwgaW50VmFsdWUpOwotCi0gICAgICAgICAgICAgICAgaWYgKHBhcmFtZXRlcnNP
YmplY3QtPmdldEludGVnZXIocnR4VGltZVN0cmluZygpLCBpbnRWYWx1ZSkpCi0gICAgICAgICAg
ICAgICAgICAgIHBheWxvYWQuYWRkUGFyYW1ldGVyKCJydHhUaW1lIiwgaW50VmFsdWUpOwotICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICBtZWRpYURlc2NyaXB0aW9uLmFkZFBheWxvYWQoV1RG
TW92ZShwYXlsb2FkKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiBydGNwT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKLSAgICAgICAgaWYg
KG1lZGlhRGVzY3JpcHRpb25PYmplY3QtPmdldE9iamVjdChydGNwU3RyaW5nKCksIHJ0Y3BPYmpl
Y3QpKSB7Ci0gICAgICAgICAgICBpZiAocnRjcE9iamVjdC0+Z2V0Qm9vbGVhbihtdXhTdHJpbmco
KSwgYm9vbFZhbHVlKSkKLSAgICAgICAgICAgICAgICBtZWRpYURlc2NyaXB0aW9uLnJ0Y3BNdXgg
PSBib29sVmFsdWU7Ci0KLSAgICAgICAgICAgIGlmIChydGNwT2JqZWN0LT5nZXRTdHJpbmcocnRj
cEFkZHJlc3NTdHJpbmcoKSwgc3RyaW5nVmFsdWUpKQotICAgICAgICAgICAgICAgIG1lZGlhRGVz
Y3JpcHRpb24ucnRjcEFkZHJlc3MgPSBzdHJpbmdWYWx1ZTsKLQotICAgICAgICAgICAgaWYgKHJ0
Y3BPYmplY3QtPmdldEludGVnZXIocnRjcFBvcnRTdHJpbmcoKSwgaW50VmFsdWUpKQotICAgICAg
ICAgICAgICAgIG1lZGlhRGVzY3JpcHRpb24ucnRjcFBvcnQgPSBpbnRWYWx1ZTsKLSAgICAgICAg
fQotCi0gICAgICAgIGlmIChtZWRpYURlc2NyaXB0aW9uT2JqZWN0LT5nZXRTdHJpbmcobWVkaWFT
dHJlYW1JZFN0cmluZygpLCBzdHJpbmdWYWx1ZSkpCi0gICAgICAgICAgICBtZWRpYURlc2NyaXB0
aW9uLm1lZGlhU3RyZWFtSWQgPSBzdHJpbmdWYWx1ZTsKLQotICAgICAgICBpZiAobWVkaWFEZXNj
cmlwdGlvbk9iamVjdC0+Z2V0U3RyaW5nKG1lZGlhU3RyZWFtVHJhY2tJZFN0cmluZygpLCBzdHJp
bmdWYWx1ZSkpCi0gICAgICAgICAgICBtZWRpYURlc2NyaXB0aW9uLm1lZGlhU3RyZWFtVHJhY2tJ
ZCA9IHN0cmluZ1ZhbHVlOwotCi0gICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGR0bHNP
YmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwotICAgICAgICBpZiAobWVkaWFEZXNj
cmlwdGlvbk9iamVjdC0+Z2V0T2JqZWN0KGR0bHNTdHJpbmcoKSwgZHRsc09iamVjdCkpIHsKLSAg
ICAgICAgICAgIGlmIChkdGxzT2JqZWN0LT5nZXRTdHJpbmcoc2V0dXBTdHJpbmcoKSwgc3RyaW5n
VmFsdWUpKQotICAgICAgICAgICAgICAgIG1lZGlhRGVzY3JpcHRpb24uZHRsc1NldHVwID0gc3Ry
aW5nVmFsdWU7Ci0KLSAgICAgICAgICAgIGlmIChkdGxzT2JqZWN0LT5nZXRTdHJpbmcoZmluZ2Vy
cHJpbnRIYXNoRnVuY3Rpb25TdHJpbmcoKSwgc3RyaW5nVmFsdWUpKQotICAgICAgICAgICAgICAg
IG1lZGlhRGVzY3JpcHRpb24uZHRsc0ZpbmdlcnByaW50SGFzaEZ1bmN0aW9uID0gc3RyaW5nVmFs
dWU7Ci0KLSAgICAgICAgICAgIGlmIChkdGxzT2JqZWN0LT5nZXRTdHJpbmcoZmluZ2VycHJpbnRT
dHJpbmcoKSwgc3RyaW5nVmFsdWUpKQotICAgICAgICAgICAgICAgIG1lZGlhRGVzY3JpcHRpb24u
ZHRsc0ZpbmdlcnByaW50ID0gc3RyaW5nVmFsdWU7Ci0gICAgICAgIH0KLQotICAgICAgICBSZWZQ
dHI8SW5zcGVjdG9yQXJyYXk+IHNzcmNzQXJyYXkgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7
Ci0gICAgICAgIG1lZGlhRGVzY3JpcHRpb25PYmplY3QtPmdldEFycmF5KHNzcmNzU3RyaW5nKCks
IHNzcmNzQXJyYXkpOwotCi0gICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGogPCBzc3Jjc0Fy
cmF5LT5sZW5ndGgoKTsgKytqKSB7Ci0gICAgICAgICAgICBzc3Jjc0FycmF5LT5nZXQoaiktPmFz
SW50ZWdlcihpbnRWYWx1ZSk7Ci0gICAgICAgICAgICBtZWRpYURlc2NyaXB0aW9uLmFkZFNzcmMo
aW50VmFsdWUpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG1lZGlhRGVzY3JpcHRpb25PYmpl
Y3QtPmdldFN0cmluZyhjbmFtZVN0cmluZygpLCBzdHJpbmdWYWx1ZSkpCi0gICAgICAgICAgICBt
ZWRpYURlc2NyaXB0aW9uLmNuYW1lID0gc3RyaW5nVmFsdWU7Ci0KLSAgICAgICAgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gaWNlT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKLSAg
ICAgICAgaWYgKG1lZGlhRGVzY3JpcHRpb25PYmplY3QtPmdldE9iamVjdChpY2VTdHJpbmcoKSwg
aWNlT2JqZWN0KSkgewotICAgICAgICAgICAgaWYgKGljZU9iamVjdC0+Z2V0U3RyaW5nKHVmcmFn
U3RyaW5nKCksIHN0cmluZ1ZhbHVlKSkKLSAgICAgICAgICAgICAgICBtZWRpYURlc2NyaXB0aW9u
LmljZVVmcmFnID0gc3RyaW5nVmFsdWU7Ci0KLSAgICAgICAgICAgIGlmIChpY2VPYmplY3QtPmdl
dFN0cmluZyhwYXNzd29yZFN0cmluZygpLCBzdHJpbmdWYWx1ZSkpCi0gICAgICAgICAgICAgICAg
bWVkaWFEZXNjcmlwdGlvbi5pY2VQYXNzd29yZCA9IHN0cmluZ1ZhbHVlOwotCi0gICAgICAgICAg
ICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGNhbmRpZGF0ZXNBcnJheSA9IEluc3BlY3RvckFycmF5
OjpjcmVhdGUoKTsKLSAgICAgICAgICAgIGljZU9iamVjdC0+Z2V0QXJyYXkoY2FuZGlkYXRlc1N0
cmluZygpLCBjYW5kaWRhdGVzQXJyYXkpOwotCi0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGog
PSAwOyBqIDwgY2FuZGlkYXRlc0FycmF5LT5sZW5ndGgoKTsgKytqKSB7Ci0gICAgICAgICAgICAg
ICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gY2FuZGlkYXRlT2JqZWN0ID0gSW5zcGVjdG9yT2Jq
ZWN0OjpjcmVhdGUoKTsKLSAgICAgICAgICAgICAgICBjYW5kaWRhdGVzQXJyYXktPmdldChqKS0+
YXNPYmplY3QoY2FuZGlkYXRlT2JqZWN0KTsKLQotICAgICAgICAgICAgICAgIG1lZGlhRGVzY3Jp
cHRpb24uYWRkSWNlQ2FuZGlkYXRlKGNyZWF0ZUNhbmRpZGF0ZSgqY2FuZGlkYXRlT2JqZWN0KSk7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBjb25maWd1cmF0aW9uLT5hZGRN
ZWRpYURlc2NyaXB0aW9uKFdURk1vdmUobWVkaWFEZXNjcmlwdGlvbikpOwotICAgIH0KLQotICAg
IHJldHVybiBjb25maWd1cmF0aW9uOwotfQotCi1zdGF0aWMgc3RkOjpvcHRpb25hbDxJY2VDYW5k
aWRhdGU+IGljZUNhbmRpZGF0ZUZyb21KU09OKGNvbnN0IFN0cmluZyYganNvbikKLXsKLSAgICBS
ZWZQdHI8SW5zcGVjdG9yVmFsdWU+IHZhbHVlOwotICAgIGlmICghSW5zcGVjdG9yVmFsdWU6OnBh
cnNlSlNPTihqc29uLCB2YWx1ZSkpCi0gICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAg
ICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBjYW5kaWRhdGVPYmplY3Q7Ci0gICAgaWYgKCF2YWx1
ZS0+YXNPYmplY3QoY2FuZGlkYXRlT2JqZWN0KSkKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9w
dDsKLQotICAgIHJldHVybiBjcmVhdGVDYW5kaWRhdGUoKmNhbmRpZGF0ZU9iamVjdCk7Ci19Ci0K
LXN0YXRpYyBTdHJpbmcgZ2V0QnVuZGxlUG9saWN5TmFtZShjb25zdCBQZWVyQ29ubmVjdGlvblN0
YXRlczo6QnVuZGxlUG9saWN5IGJ1bmRsZVBvbGljeSkKLXsKLSAgICBzd2l0Y2ggKGJ1bmRsZVBv
bGljeSkgewotICAgIGNhc2UgUGVlckNvbm5lY3Rpb25TdGF0ZXM6OkJ1bmRsZVBvbGljeTo6TWF4
Q29tcGF0OgotICAgICAgICByZXR1cm4gIm1heC1jb21wYXQiOwotICAgIGNhc2UgUGVlckNvbm5l
Y3Rpb25TdGF0ZXM6OkJ1bmRsZVBvbGljeTo6TWF4QnVuZGxlOgotICAgICAgICByZXR1cm4gIm1h
eC1idW5kbGUiOwotICAgIGNhc2UgUGVlckNvbm5lY3Rpb25TdGF0ZXM6OkJ1bmRsZVBvbGljeTo6
QmFsYW5jZWQ6Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuICJiYWxhbmNlZCI7Ci0gICAg
fTsKLX0KLQotc3RhdGljIFN0cmluZyBjb25maWd1cmF0aW9uVG9KU09OKGNvbnN0IE1lZGlhRW5k
cG9pbnRTZXNzaW9uQ29uZmlndXJhdGlvbiYgY29uZmlndXJhdGlvbikKLXsKLSAgICBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiBvYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwotICAg
IG9iamVjdC0+c2V0U3RyaW5nKGJ1bmRsZVBvbGljeVN0cmluZygpLCBnZXRCdW5kbGVQb2xpY3lO
YW1lKGNvbmZpZ3VyYXRpb24uYnVuZGxlUG9saWN5KCkpKTsKLQotICAgIFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IG9yaWdpbmF0b3JPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwot
ICAgIG9yaWdpbmF0b3JPYmplY3QtPnNldFN0cmluZyhzZXNzaW9uSWRTdHJpbmcoKSwgU3RyaW5n
OjpudW1iZXIoY29uZmlndXJhdGlvbi5zZXNzaW9uSWQoKSkpOwotICAgIG9yaWdpbmF0b3JPYmpl
Y3QtPnNldEludGVnZXIoc2Vzc2lvblZlcnNpb25TdHJpbmcoKSwgY29uZmlndXJhdGlvbi5zZXNz
aW9uVmVyc2lvbigpKTsKLSAgICBvYmplY3QtPnNldE9iamVjdChvcmlnaW5hdG9yU3RyaW5nKCks
IG9yaWdpbmF0b3JPYmplY3QpOwotCi0gICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBtZWRpYURl
c2NyaXB0aW9uc0FycmF5ID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwotCi0gICAgZm9yIChj
b25zdCBhdXRvJiBtZWRpYURlc2NyaXB0aW9uIDogY29uZmlndXJhdGlvbi5tZWRpYURlc2NyaXB0
aW9ucygpKSB7Ci0gICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1lZGlhRGVzY3JpcHRp
b25PYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwotCi0gICAgICAgIG1lZGlhRGVz
Y3JpcHRpb25PYmplY3QtPnNldFN0cmluZyh0eXBlU3RyaW5nKCksIG1lZGlhRGVzY3JpcHRpb24u
dHlwZSk7Ci0gICAgICAgIG1lZGlhRGVzY3JpcHRpb25PYmplY3QtPnNldEludGVnZXIocG9ydFN0
cmluZygpLCBtZWRpYURlc2NyaXB0aW9uLnBvcnQpOwotICAgICAgICBtZWRpYURlc2NyaXB0aW9u
T2JqZWN0LT5zZXRTdHJpbmcoYWRkcmVzc1N0cmluZygpLCBtZWRpYURlc2NyaXB0aW9uLmFkZHJl
c3MpOwotICAgICAgICBtZWRpYURlc2NyaXB0aW9uT2JqZWN0LT5zZXRTdHJpbmcobW9kZVN0cmlu
ZygpLCBtZWRpYURlc2NyaXB0aW9uLm1vZGUpOwotICAgICAgICBtZWRpYURlc2NyaXB0aW9uT2Jq
ZWN0LT5zZXRTdHJpbmcobWlkU3RyaW5nKCksIG1lZGlhRGVzY3JpcHRpb24ubWlkKTsKLQotICAg
ICAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHBheWxvYWRzQXJyYXkgPSBJbnNwZWN0b3JBcnJh
eTo6Y3JlYXRlKCk7Ci0KLSAgICAgICAgZm9yIChhdXRvJiBwYXlsb2FkIDogbWVkaWFEZXNjcmlw
dGlvbi5wYXlsb2FkcykgewotICAgICAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGF5
bG9hZE9iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7Ci0KLSAgICAgICAgICAgIHBh
eWxvYWRPYmplY3QtPnNldEludGVnZXIodHlwZVN0cmluZygpLCBwYXlsb2FkLnR5cGUpOwotICAg
ICAgICAgICAgcGF5bG9hZE9iamVjdC0+c2V0U3RyaW5nKGVuY29kaW5nTmFtZVN0cmluZygpLCBw
YXlsb2FkLmVuY29kaW5nTmFtZSk7Ci0gICAgICAgICAgICBwYXlsb2FkT2JqZWN0LT5zZXRJbnRl
Z2VyKGNsb2NrUmF0ZVN0cmluZygpLCBwYXlsb2FkLmNsb2NrUmF0ZSk7Ci0gICAgICAgICAgICBw
YXlsb2FkT2JqZWN0LT5zZXRJbnRlZ2VyKGNoYW5uZWxzU3RyaW5nKCksIHBheWxvYWQuY2hhbm5l
bHMpOwotICAgICAgICAgICAgcGF5bG9hZE9iamVjdC0+c2V0Qm9vbGVhbihjY21maXJTdHJpbmco
KSwgcGF5bG9hZC5jY21maXIpOwotICAgICAgICAgICAgcGF5bG9hZE9iamVjdC0+c2V0Qm9vbGVh
bihuYWNrcGxpU3RyaW5nKCksIHBheWxvYWQubmFja3BsaSk7Ci0gICAgICAgICAgICBwYXlsb2Fk
T2JqZWN0LT5zZXRCb29sZWFuKG5hY2tTdHJpbmcoKSwgcGF5bG9hZC5uYWNrKTsKLQotICAgICAg
ICAgICAgaWYgKCFwYXlsb2FkLnBhcmFtZXRlcnMuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAg
ICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1ldGVyc09iamVjdCA9IEluc3BlY3Rvck9i
amVjdDo6Y3JlYXRlKCk7Ci0KLSAgICAgICAgICAgICAgICBmb3IgKGF1dG8mIG5hbWUgOiBwYXls
b2FkLnBhcmFtZXRlcnMua2V5cygpKQotICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzT2Jq
ZWN0LT5zZXRJbnRlZ2VyKG5hbWUsIHBheWxvYWQucGFyYW1ldGVycy5nZXQobmFtZSkpOwotCi0g
ICAgICAgICAgICAgICAgcGF5bG9hZE9iamVjdC0+c2V0T2JqZWN0KHBhcmFtZXRlcnNTdHJpbmco
KSwgcGFyYW1ldGVyc09iamVjdCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHBheWxv
YWRzQXJyYXktPnB1c2hPYmplY3QocGF5bG9hZE9iamVjdCk7Ci0gICAgICAgIH0KLSAgICAgICAg
bWVkaWFEZXNjcmlwdGlvbk9iamVjdC0+c2V0QXJyYXkocGF5bG9hZHNTdHJpbmcoKSwgcGF5bG9h
ZHNBcnJheSk7Ci0KLSAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcnRjcE9iamVjdCA9
IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgICAgIHJ0Y3BPYmplY3QtPnNldEJvb2xl
YW4obXV4U3RyaW5nKCksIG1lZGlhRGVzY3JpcHRpb24ucnRjcE11eCk7Ci0gICAgICAgIHJ0Y3BP
YmplY3QtPnNldFN0cmluZyhhZGRyZXNzU3RyaW5nKCksIG1lZGlhRGVzY3JpcHRpb24ucnRjcEFk
ZHJlc3MpOwotICAgICAgICBydGNwT2JqZWN0LT5zZXRJbnRlZ2VyKHBvcnRTdHJpbmcoKSwgbWVk
aWFEZXNjcmlwdGlvbi5ydGNwUG9ydCk7Ci0gICAgICAgIG1lZGlhRGVzY3JpcHRpb25PYmplY3Qt
PnNldE9iamVjdChydGNwU3RyaW5nKCksIHJ0Y3BPYmplY3QpOwotCi0gICAgICAgIG1lZGlhRGVz
Y3JpcHRpb25PYmplY3QtPnNldFN0cmluZyhtZWRpYVN0cmVhbUlkU3RyaW5nKCksIG1lZGlhRGVz
Y3JpcHRpb24ubWVkaWFTdHJlYW1JZCk7Ci0gICAgICAgIG1lZGlhRGVzY3JpcHRpb25PYmplY3Qt
PnNldFN0cmluZyhtZWRpYVN0cmVhbVRyYWNrSWRTdHJpbmcoKSwgbWVkaWFEZXNjcmlwdGlvbi5t
ZWRpYVN0cmVhbVRyYWNrSWQpOwotCi0gICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGR0
bHNPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwotICAgICAgICBkdGxzT2JqZWN0
LT5zZXRTdHJpbmcoc2V0dXBTdHJpbmcoKSwgbWVkaWFEZXNjcmlwdGlvbi5kdGxzU2V0dXApOwot
ICAgICAgICBkdGxzT2JqZWN0LT5zZXRTdHJpbmcoZmluZ2VycHJpbnRIYXNoRnVuY3Rpb25TdHJp
bmcoKSwgbWVkaWFEZXNjcmlwdGlvbi5kdGxzRmluZ2VycHJpbnRIYXNoRnVuY3Rpb24pOwotICAg
ICAgICBkdGxzT2JqZWN0LT5zZXRTdHJpbmcoZmluZ2VycHJpbnRTdHJpbmcoKSwgbWVkaWFEZXNj
cmlwdGlvbi5kdGxzRmluZ2VycHJpbnQpOwotICAgICAgICBtZWRpYURlc2NyaXB0aW9uT2JqZWN0
LT5zZXRPYmplY3QoZHRsc1N0cmluZygpLCBkdGxzT2JqZWN0KTsKLQotICAgICAgICBSZWZQdHI8
SW5zcGVjdG9yQXJyYXk+IHNzcmNzQXJyYXkgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7Ci0K
LSAgICAgICAgZm9yIChhdXRvIHNzcmMgOiBtZWRpYURlc2NyaXB0aW9uLnNzcmNzKQotICAgICAg
ICAgICAgc3NyY3NBcnJheS0+cHVzaERvdWJsZShzc3JjKTsKLSAgICAgICAgbWVkaWFEZXNjcmlw
dGlvbk9iamVjdC0+c2V0QXJyYXkoc3NyY3NTdHJpbmcoKSwgc3NyY3NBcnJheSk7Ci0KLSAgICAg
ICAgbWVkaWFEZXNjcmlwdGlvbk9iamVjdC0+c2V0U3RyaW5nKGNuYW1lU3RyaW5nKCksIG1lZGlh
RGVzY3JpcHRpb24uY25hbWUpOwotCi0gICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGlj
ZU9iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgICAgIGljZU9iamVjdC0+
c2V0U3RyaW5nKHVmcmFnU3RyaW5nKCksIG1lZGlhRGVzY3JpcHRpb24uaWNlVWZyYWcpOwotICAg
ICAgICBpY2VPYmplY3QtPnNldFN0cmluZyhwYXNzd29yZFN0cmluZygpLCBtZWRpYURlc2NyaXB0
aW9uLmljZVBhc3N3b3JkKTsKLQotICAgICAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGNhbmRp
ZGF0ZXNBcnJheSA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKLQotICAgICAgICBmb3IgKGF1
dG8mIGNhbmRpZGF0ZSA6IG1lZGlhRGVzY3JpcHRpb24uaWNlQ2FuZGlkYXRlcykKLSAgICAgICAg
ICAgIGNhbmRpZGF0ZXNBcnJheS0+cHVzaE9iamVjdChjcmVhdGVDYW5kaWRhdGVPYmplY3QoY2Fu
ZGlkYXRlKSk7Ci0KLSAgICAgICAgaWNlT2JqZWN0LT5zZXRBcnJheShjYW5kaWRhdGVzU3RyaW5n
KCksIGNhbmRpZGF0ZXNBcnJheSk7Ci0gICAgICAgIG1lZGlhRGVzY3JpcHRpb25PYmplY3QtPnNl
dE9iamVjdChpY2VTdHJpbmcoKSwgaWNlT2JqZWN0KTsKLQotICAgICAgICBtZWRpYURlc2NyaXB0
aW9uc0FycmF5LT5wdXNoT2JqZWN0KG1lZGlhRGVzY3JpcHRpb25PYmplY3QpOwotICAgIH0KLSAg
ICBvYmplY3QtPnNldEFycmF5KG1lZGlhRGVzY3JpcHRpb25zU3RyaW5nKCksIG1lZGlhRGVzY3Jp
cHRpb25zQXJyYXkpOwotCi0gICAgcmV0dXJuIG9iamVjdC0+dG9KU09OU3RyaW5nKCk7Ci19Ci0K
LXN0YXRpYyBTdHJpbmcgaWNlQ2FuZGlkYXRlVG9KU09OKGNvbnN0IEljZUNhbmRpZGF0ZSYgY2Fu
ZGlkYXRlKQotewotICAgIHJldHVybiBjcmVhdGVDYW5kaWRhdGVPYmplY3QoY2FuZGlkYXRlKS0+
dG9KU09OU3RyaW5nKCk7Ci19Ci0KLVNEUFByb2Nlc3Nvcjo6UmVzdWx0IFNEUFByb2Nlc3Nvcjo6
Z2VuZXJhdGUoY29uc3QgTWVkaWFFbmRwb2ludFNlc3Npb25Db25maWd1cmF0aW9uJiBjb25maWd1
cmF0aW9uLCBTdHJpbmcmIG91dFNkcFN0cmluZykgY29uc3QKLXsKLSAgICBTdHJpbmcgc2RwU3Ry
aW5nOwotICAgIGlmICghY2FsbFNjcmlwdCgiZ2VuZXJhdGUiLCBjb25maWd1cmF0aW9uVG9KU09O
KGNvbmZpZ3VyYXRpb24pLCBzZHBTdHJpbmcpKQotICAgICAgICByZXR1cm4gUmVzdWx0OjpJbnRl
cm5hbEVycm9yOwotCi0gICAgb3V0U2RwU3RyaW5nID0gc2RwU3RyaW5nOwotICAgIHJldHVybiBS
ZXN1bHQ6OlN1Y2Nlc3M7Ci19Ci0KLVNEUFByb2Nlc3Nvcjo6UmVzdWx0IFNEUFByb2Nlc3Nvcjo6
cGFyc2UoY29uc3QgU3RyaW5nJiBzZHAsIFJlZlB0cjxNZWRpYUVuZHBvaW50U2Vzc2lvbkNvbmZp
Z3VyYXRpb24+JiBvdXRDb25maWd1cmF0aW9uKSBjb25zdAotewotICAgIFN0cmluZyBzY3JpcHRP
dXRwdXQ7Ci0gICAgaWYgKCFjYWxsU2NyaXB0KCJwYXJzZSIsIHNkcCwgc2NyaXB0T3V0cHV0KSkK
LSAgICAgICAgcmV0dXJuIFJlc3VsdDo6SW50ZXJuYWxFcnJvcjsKLQotICAgIGlmIChzY3JpcHRP
dXRwdXQgPT0gIlBhcnNlRXJyb3IiKQotICAgICAgICByZXR1cm4gUmVzdWx0OjpQYXJzZUVycm9y
OwotCi0gICAgUmVmUHRyPE1lZGlhRW5kcG9pbnRTZXNzaW9uQ29uZmlndXJhdGlvbj4gY29uZmln
dXJhdGlvbiA9IGNvbmZpZ3VyYXRpb25Gcm9tSlNPTihzY3JpcHRPdXRwdXQpOwotICAgIGlmICgh
Y29uZmlndXJhdGlvbikKLSAgICAgICAgcmV0dXJuIFJlc3VsdDo6SW50ZXJuYWxFcnJvcjsKLQot
ICAgIG91dENvbmZpZ3VyYXRpb24gPSBjb25maWd1cmF0aW9uOwotICAgIHJldHVybiBSZXN1bHQ6
OlN1Y2Nlc3M7Ci19Ci0KLVNEUFByb2Nlc3Nvcjo6UmVzdWx0IFNEUFByb2Nlc3Nvcjo6Z2VuZXJh
dGVDYW5kaWRhdGVMaW5lKGNvbnN0IEljZUNhbmRpZGF0ZSYgY2FuZGlkYXRlLCBTdHJpbmcmIG91
dENhbmRpZGF0ZUxpbmUpIGNvbnN0Ci17Ci0gICAgU3RyaW5nIGNhbmRpZGF0ZUxpbmU7Ci0gICAg
aWYgKCFjYWxsU2NyaXB0KCJnZW5lcmF0ZUNhbmRpZGF0ZUxpbmUiLCBpY2VDYW5kaWRhdGVUb0pT
T04oY2FuZGlkYXRlKSwgY2FuZGlkYXRlTGluZSkpCi0gICAgICAgIHJldHVybiBSZXN1bHQ6Oklu
dGVybmFsRXJyb3I7Ci0KLSAgICBvdXRDYW5kaWRhdGVMaW5lID0gY2FuZGlkYXRlTGluZTsKLSAg
ICByZXR1cm4gUmVzdWx0OjpTdWNjZXNzOwotfQotCi1TRFBQcm9jZXNzb3I6OlBhcnNpbmdSZXN1
bHQgU0RQUHJvY2Vzc29yOjpwYXJzZUNhbmRpZGF0ZUxpbmUoY29uc3QgU3RyaW5nJiBjYW5kaWRh
dGVMaW5lKSBjb25zdAotewotICAgIFN0cmluZyBzY3JpcHRPdXRwdXQ7Ci0gICAgaWYgKCFjYWxs
U2NyaXB0KCJwYXJzZUNhbmRpZGF0ZUxpbmUiLCBjYW5kaWRhdGVMaW5lLCBzY3JpcHRPdXRwdXQp
KQotICAgICAgICByZXR1cm4geyBSZXN1bHQ6OkludGVybmFsRXJyb3IgfTsKLQotICAgIGlmIChz
Y3JpcHRPdXRwdXQgPT0gIlBhcnNlRXJyb3IiKQotICAgICAgICByZXR1cm4geyBSZXN1bHQ6OlBh
cnNlRXJyb3IgfTsKLQotICAgIGF1dG8gY2FuZGlkYXRlID0gaWNlQ2FuZGlkYXRlRnJvbUpTT04o
c2NyaXB0T3V0cHV0KTsKLSAgICBpZiAoIWNhbmRpZGF0ZSkKLSAgICAgICAgcmV0dXJuIHsgUmVz
dWx0OjpJbnRlcm5hbEVycm9yIH07Ci0gICAgcmV0dXJuIHsgV1RGTW92ZShjYW5kaWRhdGUudmFs
dWUoKSkgfTsKLX0KLQotYm9vbCBTRFBQcm9jZXNzb3I6OmNhbGxTY3JpcHQoY29uc3QgU3RyaW5n
JiBmdW5jdGlvbk5hbWUsIGNvbnN0IFN0cmluZyYgYXJndW1lbnQsIFN0cmluZyYgb3V0UmVzdWx0
KSBjb25zdAotewotICAgIGlmICghc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVu
dD4oc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsKLSAgICBpZiAoIWRvY3VtZW50LT5mcmFtZSgp
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIW1faXNvbGF0ZWRXb3JsZCkKLSAg
ICAgICAgbV9pc29sYXRlZFdvcmxkID0gRE9NV3JhcHBlcldvcmxkOjpjcmVhdGUoY29tbW9uVk0o
KSk7Ci0KLSAgICBTY3JpcHRDb250cm9sbGVyJiBzY3JpcHRDb250cm9sbGVyID0gZG9jdW1lbnQt
PmZyYW1lKCktPnNjcmlwdCgpOwotICAgIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qg
PSBKU0M6OmpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KHNjcmlwdENvbnRyb2xsZXIuZ2xvYmFs
T2JqZWN0KCptX2lzb2xhdGVkV29ybGQpKTsKLSAgICBKU0M6OlZNJiB2bSA9IGdsb2JhbE9iamVj
dC0+dm0oKTsKLSAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKHZtKTsKLSAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7Ci0gICAgSlNDOjpFeGVjU3RhdGUqIGV4ZWMgPSBn
bG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKLQotICAgIEpTQzo6SlNWYWx1ZSBwcm9iZUZ1bmN0
aW9uVmFsdWUgPSBnbG9iYWxPYmplY3QtPmdldChleGVjLCBKU0M6OklkZW50aWZpZXI6OmZyb21T
dHJpbmcoZXhlYywgImdlbmVyYXRlIikpOwotICAgIGlmICghcHJvYmVGdW5jdGlvblZhbHVlLmlz
RnVuY3Rpb24oKSkgewotICAgICAgICBVUkwgc2NyaXB0VVJMOwotICAgICAgICBzY3JpcHRDb250
cm9sbGVyLmV2YWx1YXRlSW5Xb3JsZChTY3JpcHRTb3VyY2VDb2RlKFNEUFByb2Nlc3NvclNjcmlw
dFJlc291cmNlOjpzY3JpcHRTdHJpbmcoKSwgc2NyaXB0VVJMKSwgKm1faXNvbGF0ZWRXb3JsZCk7
Ci0gICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpIHsKLSAgICAgICAgICAg
IHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgIH0KLSAgICB9Ci0KLSAgICBKU0M6OkpTVmFsdWUgZnVuY3Rpb25WYWx1ZSA9IGdsb2JhbE9i
amVjdC0+Z2V0KGV4ZWMsIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCBmdW5jdGlv
bk5hbWUpKTsKLSAgICBpZiAoIWZ1bmN0aW9uVmFsdWUuaXNGdW5jdGlvbigpKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICBKU0M6OkpTT2JqZWN0KiBmdW5jdGlvbiA9IGZ1bmN0aW9uVmFs
dWUudG9PYmplY3QoZXhlYyk7Ci0gICAgSlNDOjpDYWxsRGF0YSBjYWxsRGF0YTsKLSAgICBKU0M6
OkNhbGxUeXBlIGNhbGxUeXBlID0gZnVuY3Rpb24tPm1ldGhvZFRhYmxlKHZtKS0+Z2V0Q2FsbERh
dGEoZnVuY3Rpb24sIGNhbGxEYXRhKTsKLSAgICBpZiAoY2FsbFR5cGUgPT0gSlNDOjpDYWxsVHlw
ZTo6Tm9uZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgSlNDOjpNYXJrZWRBcmd1bWVu
dEJ1ZmZlciBhcmdMaXN0OwotICAgIGFyZ0xpc3QuYXBwZW5kKEpTQzo6anNTdHJpbmcoZXhlYywg
YXJndW1lbnQpKTsKLQotICAgIEpTQzo6SlNWYWx1ZSByZXN1bHQgPSBKU0M6OmNhbGwoZXhlYywg
ZnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSwgZ2xvYmFsT2JqZWN0LCBhcmdMaXN0KTsKLSAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKSB7Ci0gICAgICAgIExPR19FUlJPUigi
U0RQUHJvY2Vzc29yIHNjcmlwdCB0aHJldyBpbiBmdW5jdGlvbiAlcyIsIGZ1bmN0aW9uTmFtZS5h
c2NpaSgpLmRhdGEoKSk7Ci0gICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7Ci0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAoIXJlc3VsdC5pc1N0cmluZygpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBvdXRSZXN1bHQgPSBhc1N0cmluZyhyZXN1bHQpLT52
YWx1ZShleGVjKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQotCi0jZW5kaWYgLy8gRU5BQkxFKFdFQl9SVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1NEUFByb2Nlc3Nvci5oIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9tZWRpYXN0cmVhbS9TRFBQcm9jZXNzb3IuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggY2E2MWM5YTkyZTQ3Y2UzZTkwMWVjMzYzMWE2OGY3N2IxMmM5MDJjNC4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL21lZGlhc3RyZWFtL1NEUFByb2Nlc3Nvci5oCisrKyAvZGV2L251bGwKQEAgLTEsNzggKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBFcmljc3NvbiBBQi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICog
ICAgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZQotICogICAgZGlzdHJpYnV0aW9uLgotICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBF
cmljc3NvbiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotICog
ICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShXRUJfUlRDKQotCi0jaW5jbHVk
ZSAiQ29udGV4dERlc3RydWN0aW9uT2JzZXJ2ZXIuaCIKLSNpbmNsdWRlICJJY2VDYW5kaWRhdGUu
aCIKLSNpbmNsdWRlICJNZWRpYUVuZHBvaW50U2Vzc2lvbkNvbmZpZ3VyYXRpb24uaCIKLSNpbmNs
dWRlIDx3dGYvUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1ZhcmlhbnQuaD4KLSNpbmNsdWRlIDx3
dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBET01X
cmFwcGVyV29ybGQ7Ci1jbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OwotCi1jbGFzcyBTRFBQ
cm9jZXNzb3IgOiBwdWJsaWMgQ29udGV4dERlc3RydWN0aW9uT2JzZXJ2ZXIgewotcHVibGljOgot
ICAgIGVudW0gY2xhc3MgUmVzdWx0IHsKLSAgICAgICAgU3VjY2VzcyA9IDEsCi0gICAgICAgIElu
dGVybmFsRXJyb3IgPSAyLAotICAgICAgICBQYXJzZUVycm9yID0gMwotICAgIH07Ci0KLSAgICBT
RFBQcm9jZXNzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCopOwotCi0gICAgUmVzdWx0IGdlbmVy
YXRlKGNvbnN0IE1lZGlhRW5kcG9pbnRTZXNzaW9uQ29uZmlndXJhdGlvbiYsIFN0cmluZyYgb3V0
U2RwU3RyaW5nKSBjb25zdDsKLSAgICBSZXN1bHQgcGFyc2UoY29uc3QgU3RyaW5nJiBzZHAsIFJl
ZlB0cjxNZWRpYUVuZHBvaW50U2Vzc2lvbkNvbmZpZ3VyYXRpb24+JikgY29uc3Q7Ci0KLSAgICBS
ZXN1bHQgZ2VuZXJhdGVDYW5kaWRhdGVMaW5lKGNvbnN0IEljZUNhbmRpZGF0ZSYsIFN0cmluZyYg
b3V0Q2FuZGlkYXRlTGluZSkgY29uc3Q7Ci0KLSAgICBzdHJ1Y3QgUGFyc2luZ1Jlc3VsdCB7Ci0g
ICAgICAgIFZhcmlhbnQ8SWNlQ2FuZGlkYXRlLCBSZXN1bHQ+IHJlc3VsdDsKLQotICAgICAgICBS
ZXN1bHQgcGFyc2luZ1N0YXR1cygpIGNvbnN0IHsgcmV0dXJuIFdURjo6aG9sZHNfYWx0ZXJuYXRp
dmU8SWNlQ2FuZGlkYXRlPihyZXN1bHQpID8gUmVzdWx0OjpTdWNjZXNzIDogV1RGOjpnZXQ8U0RQ
UHJvY2Vzc29yOjpSZXN1bHQ+KHJlc3VsdCk7IH0KLSAgICAgICAgSWNlQ2FuZGlkYXRlJiBjYW5k
aWRhdGUoKSB7IHJldHVybiBXVEY6OmdldDxJY2VDYW5kaWRhdGU+KHJlc3VsdCk7IH0KLSAgICB9
OwotICAgIFBhcnNpbmdSZXN1bHQgcGFyc2VDYW5kaWRhdGVMaW5lKGNvbnN0IFN0cmluZyYgY2Fu
ZGlkYXRlTGluZSkgY29uc3Q7Ci0KLXByaXZhdGU6Ci0gICAgYm9vbCBjYWxsU2NyaXB0KGNvbnN0
IFN0cmluZyYgZnVuY3Rpb25OYW1lLCBjb25zdCBTdHJpbmcmIGFyZ3VtZW50LCBTdHJpbmcmIG91
dFJlc3VsdCkgY29uc3Q7Ci0KLSAgICBtdXRhYmxlIFJlZlB0cjxET01XcmFwcGVyV29ybGQ+IG1f
aXNvbGF0ZWRXb3JsZDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8v
IEVOQUJMRShXRUJfUlRDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRp
YXN0cmVhbS9saWJ3ZWJydGMvTGliV2ViUlRDTWVkaWFFbmRwb2ludC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2xpYndlYnJ0Yy9MaWJXZWJSVENNZWRpYUVuZHBvaW50
LmNwcAppbmRleCA2ZWI0YTc0MDRjMmRiNjJmYmM3NWQ1ZjYzMGIwY2E4MWRjMzBjZmQ3Li4yMzg1
MWY5NjdkMWJkODc2ZmZkMWYzOTkzYzU2ZWVjN2ZjNGU2YThlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2xpYndlYnJ0Yy9MaWJXZWJSVENNZWRpYUVuZHBv
aW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2xpYndlYnJ0
Yy9MaWJXZWJSVENNZWRpYUVuZHBvaW50LmNwcApAQCAtODAsNyArODAsNiBAQCBib29sIExpYldl
YlJUQ01lZGlhRW5kcG9pbnQ6OnNldENvbmZpZ3VyYXRpb24oTGliV2ViUlRDUHJvdmlkZXImIGNs
aWVudCwgd2VicnRjOgogICAgIHJldHVybiBtX2JhY2tlbmQtPlNldENvbmZpZ3VyYXRpb24oV1RG
TW92ZShjb25maWd1cmF0aW9uKSk7CiB9CiAKLS8vIEZJWE1FOiB1bmlmeSB3aXRoIE1lZGlhRW5k
cG9pbnRTZXNzaW9uRGVzY3JpcHRpb246OnR5cGVTdHJpbmcoKQogc3RhdGljIGlubGluZSBjb25z
dCBjaGFyKiBzZXNzaW9uRGVzY3JpcHRpb25UeXBlKFJUQ1NkcFR5cGUgc2RwVHlwZSkKIHsKICAg
ICBzd2l0Y2ggKHNkcFR5cGUpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBiMGU3NTQ5NzBiMDQwYjNjNTUwYjA3MTcwNTA5NjFi
ZGRkODc2ZjI1Li4zNzM4YTBlN2U3NDI3YmI4MmYwMmFmYjk0NDA2ZTJlZTMxMjAxODg1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
KysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBA
IC0xNzkzLDYgKzE3OTMsOCBAQAogCQk0MUFCRTY3QjFEMDU4MERCMDA2RDg2MkQgLyogQ3Jvc3NP
cmlnaW5QcmVmbGlnaHRDaGVja2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA0MUFCRTY3QTFEMDU4MEQ1MDA2RDg2MkQgLyogQ3Jvc3NPcmlnaW5QcmVm
bGlnaHRDaGVja2VyLmggKi87IH07CiAJCTQxQUJFNjdDMUQwNTgwRTAwMDZEODYyRCAvKiBDcm9z
c09yaWdpblByZWZsaWdodENoZWNrZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNDFBQkU2NzkxRDA1ODBENTAwNkQ4NjJEIC8qIENyb3NzT3JpZ2lu
UHJlZmxpZ2h0Q2hlY2tlci5jcHAgKi87IH07CiAJCTQxQUQ3NTNBMUNFRjZCRDEwMEEzMTQ4NiAv
KiBGZXRjaE9wdGlvbnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDQxQUQ3NTM5MUNFRjZCQ0UwMEEzMTQ4NiAvKiBGZXRjaE9wdGlvbnMuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk0MUIyOEIxNDFGODUw
MUE2MDBGQjUyQUMgLyogTWVkaWFFbmRwb2ludENvbmZpZ3VyYXRpb24uY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDFCMjhCMTMxRjg1MDFBNDAwRkI1
MkFDIC8qIE1lZGlhRW5kcG9pbnRDb25maWd1cmF0aW9uLmNwcCAqLzsgfTsKKwkJNDFCMjhCMTUx
Rjg1MDFEMzAwRkI1MkFDIC8qIE1lZGlhRW5kcG9pbnRDb25maWd1cmF0aW9uLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MUIyOEIxMjFGODUwMUEzMDBG
QjUyQUMgLyogTWVkaWFFbmRwb2ludENvbmZpZ3VyYXRpb24uaCAqLzsgfTsKIAkJNDFCMkE2MjYx
RUYxQkY2RDAwMkI5RDdBIC8qIFdlYkF1ZGlvU291cmNlUHJvdmlkZXIuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxQjJBNjI1MUVGMUJGNjAwMDJCOUQ3
QSAvKiBXZWJBdWRpb1NvdXJjZVByb3ZpZGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNDFCNDU5RUYxRjU1RUJEMTAwMDBGNkZEIC8qIFJlYWRh
YmxlU3RyZWFtLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDQxQjQ1OUVEMUY1NUVCQzcwMDAwRjZGRCAvKiBSZWFkYWJsZVN0cmVhbS5jcHAgKi87IH07
CiAJCTQxQkY3MDBDMEZFODZGNDkwMDVFOERFQyAvKiBNZXNzYWdlUG9ydENoYW5uZWwuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxQkY3MDBBMEZFODZG
NDkwMDVFOERFQyAvKiBNZXNzYWdlUG9ydENoYW5uZWwuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMjc3OSw4ICsyNzgxLDYgQEAKIAkJNURGRThG
NTYwRDE2NDc3QjAwNzZFOTM3IC8qIFNjaGVkdWxlZEFjdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0EzNzhCQTBEMTVGNjQyMDBCNzkzRDYg
LyogU2NoZWR1bGVkQWN0aW9uLmNwcCAqLzsgfTsKIAkJNURGRThGNTcwRDE2NDc3QzAwNzZFOTM3
IC8qIFNjaGVkdWxlZEFjdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQkNBMzc4QkIwRDE1RjY0MjAwQjc5M0Q2IC8qIFNjaGVkdWxlZEFjdGlvbi5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTVERkVC
QUI3MTg1OTJCNkQwMEM3NUJFQiAvKiBXZWJLaXRBdmFpbGFiaWxpdHkuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVERkVCQUI2MTg1OTJCNkQwMEM3NUJF
QiAvKiBXZWJLaXRBdmFpbGFiaWxpdHkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwotCQk1RTE2QTJFNDFCRkE2NTBCMDAyOUEyMUUgLyogTWVkaWFFbmRw
b2ludFBlZXJDb25uZWN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1RTE2QTJFMzFCRkE2NEZCMDAyOUEyMUUgLyogTWVkaWFFbmRwb2ludFBlZXJD
b25uZWN0aW9uLmggKi87IH07Ci0JCTVFMTZBMkU1MUJGQTY1MEYwMDI5QTIxRSAvKiBNZWRpYUVu
ZHBvaW50UGVlckNvbm5lY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNUUxNkEyRTIxQkZBNjRGQjAwMjlBMjFFIC8qIE1lZGlhRW5kcG9pbnRQ
ZWVyQ29ubmVjdGlvbi5jcHAgKi87IH07CiAJCTVFMkM0MzUxMUJDRUUyRjYwMDAxRTJCQyAvKiBQ
ZWVyQ29ubmVjdGlvbkJhY2tlbmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDVFMkM0MzREMUJDRUUyRTUwMDAxRTJCQyAvKiBQZWVyQ29ubmVjdGlvbkJh
Y2tlbmQuaCAqLzsgfTsKIAkJNUUyQzQzNUYxQkNFRTMxRTAwMDFFMkJDIC8qIFJUQ1J0cFNlbmRl
clJlY2VpdmVyQmFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNUUyQzQzNUQxQkNFRTMwRDAwMDFFMkJDIC8qIFJUQ1J0cFNlbmRlclJlY2VpdmVyQmFz
ZS5oICovOyB9OwogCQk1RTJDNDM2MDFCQ0VFMzIzMDAwMUUyQkMgLyogUlRDUnRwU2VuZGVyLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVFMkM0MzU5
MUJDRUUzMEQwMDAxRTJCQyAvKiBSVENSdHBTZW5kZXIuY3BwICovOyB9OwpAQCAtMjgwMSwyNyAr
MjgwMSwxNCBAQAogCQk1RTJDNDM3NDFCQ0YwRDc1MDAwMUUyQkUgLyogSlNSVENSdHBQYXJhbWV0
ZXJzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1RTJD
NDM3MDFCQ0YwRDY5MDAwMUUyQkUgLyogSlNSVENSdHBQYXJhbWV0ZXJzLmggKi87IH07CiAJCTVF
MkM0MzdCMUJDRjlBNTcwMDAxRTJCQyAvKiBSVENQZWVyQ29ubmVjdGlvbkJ1aWx0aW5zLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1RTJDNDM3NjFCQ0Y5
QTBCMDAwMUUyQkMgLyogUlRDUGVlckNvbm5lY3Rpb25CdWlsdGlucy5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTVFMkM0MzdDMUJDRjlBODQwMDAx
RTJCQyAvKiBSVENQZWVyQ29ubmVjdGlvbkludGVybmFsc0J1aWx0aW5zLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1RTJDNDM3OTFCQ0Y5QTBCMDAwMUUy
QkMgLyogUlRDUGVlckNvbm5lY3Rpb25JbnRlcm5hbHNCdWlsdGlucy5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTVFNEVBQjA0MUQwNzE2NkEwMDA2
QTE4NCAvKiBNZWRpYUVuZHBvaW50U2Vzc2lvbkRlc2NyaXB0aW9uLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1RTRFQUIwMzFEMDcxNjRDMDAwNkExODQg
LyogTWVkaWFFbmRwb2ludFNlc3Npb25EZXNjcmlwdGlvbi5oICovOyB9OwotCQk1RTRFQUIwNTFE
MDcxNjZFMDAwNkExODQgLyogTWVkaWFFbmRwb2ludFNlc3Npb25EZXNjcmlwdGlvbi5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1RTRFQUIwMjFEMDcx
NjRDMDAwNkExODQgLyogTWVkaWFFbmRwb2ludFNlc3Npb25EZXNjcmlwdGlvbi5jcHAgKi87IH07
CiAJCTVFNUUyQjEzMUNGQzNFNzAwMDBDMEQ4NSAvKiBSVENSdHBUcmFuc2NlaXZlci5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1RTVFMkIxMDFDRkMz
RTRCMDAwQzBEODUgLyogUlRDUnRwVHJhbnNjZWl2ZXIuY3BwICovOyB9OwogCQk1RTVFMkIxNDFD
RkMzRTc1MDAwQzBEODUgLyogUlRDUnRwVHJhbnNjZWl2ZXIuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVFNUUyQjExMUNGQzNFNEIwMDBDMEQ4NSAvKiBS
VENSdHBUcmFuc2NlaXZlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07Ci0JCTVFQTNENkRGMUM4NTlEN0YwMDMwMEJCQiAvKiBNb2NrTWVkaWFFbmRwb2lu
dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUVBM0Q2
REUxQzg1OUQ1MzAwMzAwQkJCIC8qIE1vY2tNZWRpYUVuZHBvaW50LmggKi87IH07Ci0JCTVFQTNE
NkUwMUM4NTlEODQwMDMwMEJCQiAvKiBNb2NrTWVkaWFFbmRwb2ludC5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1RUEzRDZERDFDODU5RDUzMDAzMDBC
QkIgLyogTW9ja01lZGlhRW5kcG9pbnQuY3BwICovOyB9OwotCQk1RUEzRDZFMzFDODU5REMxMDAz
MDBCQkIgLyogU0RQUHJvY2Vzc29yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDVFQTNENkUxMUM4NTlEQUEwMDMwMEJCQiAvKiBTRFBQcm9jZXNzb3Iu
Y3BwICovOyB9OwotCQk1RUEzRDZFNDFDODU5REMxMDAzMDBCQkIgLyogU0RQUHJvY2Vzc29yLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1RUEzRDZFMjFD
ODU5REFBMDAzMDBCQkIgLyogU0RQUHJvY2Vzc29yLmggKi87IH07Ci0JCTVFQTNENkU3MUM4NUE5
REIwMDMwMEJCQiAvKiBTRFBQcm9jZXNzb3JTY3JpcHRSZXNvdXJjZS5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1RUEzRDZFNTFDODVBOUMzMDAzMDBC
QkIgLyogU0RQUHJvY2Vzc29yU2NyaXB0UmVzb3VyY2UuY3BwICovOyB9OwotCQk1RUEzRDZFODFD
ODVBOURCMDAzMDBCQkIgLyogU0RQUHJvY2Vzc29yU2NyaXB0UmVzb3VyY2UuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVFQTNENkU2MUM4NUE5QzMwMDMw
MEJCQiAvKiBTRFBQcm9jZXNzb3JTY3JpcHRSZXNvdXJjZS5oICovOyB9OwogCQk1RUE3MjVEMjFB
Q0FCRDQ3MDBFQUQxN0IgLyogTWVkaWFEZXZpY2VzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVFQTcyNUNEMUFDQUJDRDkwMEVBRDE3QiAvKiBNZWRp
YURldmljZXMuY3BwICovOyB9OwogCQk1RUE3MjVEMzFBQ0FCRDQ3MDBFQUQxN0IgLyogTWVkaWFE
ZXZpY2VzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
RUE3MjVDRTFBQ0FCQ0Q5MDBFQUQxN0IgLyogTWVkaWFEZXZpY2VzLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNUVBNzI1RDUxQUNBQkQ1NzAwRUFE
MTdCIC8qIE5hdmlnYXRvck1lZGlhRGV2aWNlcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1RUE3MjVDQTFBQ0FCQ0I1MDBFQUQxN0IgLyogTmF2aWdh
dG9yTWVkaWFEZXZpY2VzLmNwcCAqLzsgfTsKIAkJNUVBNzI1RDYxQUNBQkQ1NzAwRUFEMTdCIC8q
IE5hdmlnYXRvck1lZGlhRGV2aWNlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNUVBNzI1Q0IxQUNBQkNCNTAwRUFEMTdCIC8qIE5hdmlnYXRvck1lZGlh
RGV2aWNlcy5oICovOyB9OwogCQk1RUJCODkzMTFDNzc3N0ZGMDBDNjVENDEgLyogTWVkaWFQYXls
b2FkLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1RUJC
ODkyRjFDNzc3N0QwMDBDNjVENDEgLyogTWVkaWFQYXlsb2FkLmggKi87IH07Ci0JCTVFQkI4OTMy
MUM3Nzc4MjMwMEM2NUQ0MSAvKiBNZWRpYUVuZHBvaW50U2Vzc2lvbkNvbmZpZ3VyYXRpb24uaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVFQkI4OTJFMUM3
Nzc3RDAwMEM2NUQ0MSAvKiBNZWRpYUVuZHBvaW50U2Vzc2lvbkNvbmZpZ3VyYXRpb24uaCAqLzsg
fTsKIAkJNUVCQjg5MzMxQzc3NzgyOTAwQzY1RDQxIC8qIEljZUNhbmRpZGF0ZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUVCQjg5MzAxQzc3NzdFMTAw
QzY1RDQxIC8qIEljZUNhbmRpZGF0ZS5oICovOyB9OwotCQk1RUJCODkzNDFDNzc3ODI5MDBDNjVE
NDEgLyogTWVkaWFFbmRwb2ludC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1RUJCODkyQTFDNzc3N0QwMDBDNjVENDEgLyogTWVkaWFFbmRwb2ludC5j
cHAgKi87IH07Ci0JCTVFQkI4OTM1MUM3Nzc4MjkwMEM2NUQ0MSAvKiBNZWRpYUVuZHBvaW50Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1RUJCODkyQjFD
Nzc3N0QwMDBDNjVENDEgLyogTWVkaWFFbmRwb2ludC5oICovOyB9OwotCQk1RUJCODkzNjFDNzc3
ODI5MDBDNjVENDEgLyogTWVkaWFFbmRwb2ludENvbmZpZ3VyYXRpb24uY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUVCQjg5MkMxQzc3NzdEMDAwQzY1
RDQxIC8qIE1lZGlhRW5kcG9pbnRDb25maWd1cmF0aW9uLmNwcCAqLzsgfTsKLQkJNUVCQjg5Mzcx
Qzc3NzgyOTAwQzY1RDQxIC8qIE1lZGlhRW5kcG9pbnRDb25maWd1cmF0aW9uLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1RUJCODkyRDFDNzc3N0QwMDBD
NjVENDEgLyogTWVkaWFFbmRwb2ludENvbmZpZ3VyYXRpb24uaCAqLzsgfTsKIAkJNUVCQjg5Mzkx
Qzc3QzM5OTAwQzY1RDQxIC8qIFBlZXJNZWRpYURlc2NyaXB0aW9uLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1RUJCODkzODFDNzdCREE0MDBDNjVENDEg
LyogUGVlck1lZGlhRGVzY3JpcHRpb24uaCAqLzsgfTsKIAkJNUYyREJCRTkxNzhFM0M4MTAwMTQx
NDg2IC8qIENlcnRpZmljYXRlSW5mb01hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDVGMkRCQkU3MTc4RTMzMkQwMDE0MTQ4NiAvKiBDZXJ0aWZpY2F0
ZUluZm9NYWMubW0gKi87IH07CiAJCTVGQTkwNENBMTc4RTYxRjUwMDRDOEEyRCAvKiBDZXJ0aWZp
Y2F0ZUluZm8uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDVGMkRCQkU4MTc4RTMzNjkwMDE0MTQ4NiAvKiBDZXJ0aWZpY2F0ZUluZm8uaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtNjM5MCw3ICs2Mzc3LDYg
QEAKIAkJQ0RBQjZEMkUxN0M4MTRFRTAwQzYwQjM0IC8qIEpTTWVkaWFDb250cm9sc0hvc3QuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQUI2RDJDMTdD
ODE0RUUwMEM2MEIzNCAvKiBKU01lZGlhQ29udHJvbHNIb3N0LmggKi87IH07CiAJCUNEQUI2RDMx
MTdDOTI1OTUwMEM2MEIzNCAvKiBVc2VyQWdlbnRTY3JpcHRzLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREFCNkQyRjE3QzkyNTk1MDBDNjBCMzQgLyog
VXNlckFnZW50U2NyaXB0cy5oICovOyB9OwogCQlDREFCNkQzMjE3QzkyNTk1MDBDNjBCMzQgLyog
VXNlckFnZW50U2NyaXB0c0RhdGEuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQ0RBQjZEMzAxN0M5MjU5NTAwQzYwQjM0IC8qIFVzZXJBZ2VudFNjcmlw
dHNEYXRhLmNwcCAqLzsgfTsKLQkJQ0RBQjZEMzIxN0M5MjU5NTAwQzYwQjM1IC8qIFNEUFByb2Nl
c3NvclNjcmlwdHNEYXRhLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IENEQUI2RDMwMTdDOTI1OTUwMEM2MEIzNSAvKiBTRFBQcm9jZXNzb3JTY3JpcHRz
RGF0YS5jcHAgKi87IH07CiAJCUNEQUU4QzA5MTc0NkI5NTcwMDUzMkQ3OCAvKiBQbGF0Zm9ybU1l
ZGlhU2Vzc2lvbk1hbmFnZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQ0RBRThDMDcxNzQ2Qjk1NzAwNTMyRDc4IC8qIFBsYXRmb3JtTWVkaWFTZXNz
aW9uTWFuYWdlci5jcHAgKi87IH07CiAJCUNEQkVBRUFDMTlEOTJCNkMwMEJFQkE4OCAvKiBNZWRp
YVNlbGVjdGlvbkdyb3VwQVZGT2JqQy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IENEQkVBRUFBMTlEOTJCNkMwMEJFQkE4OCAvKiBNZWRpYVNlbGVjdGlv
bkdyb3VwQVZGT2JqQy5tbSAqLzsgfTsKIAkJQ0RCRUFFQUQxOUQ5MkI2QzAwQkVCQTg4IC8qIE1l
ZGlhU2VsZWN0aW9uR3JvdXBBVkZPYmpDLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBDREJFQUVBQjE5RDkyQjZDMDBCRUJBODggLyogTWVkaWFTZWxlY3Rp
b25Hcm91cEFWRk9iakMuaCAqLzsgfTsKQEAgLTk2MDYsNiArOTU5Miw4IEBACiAJCTQxQUJFNjc5
MUQwNTgwRDUwMDZEODYyRCAvKiBDcm9zc09yaWdpblByZWZsaWdodENoZWNrZXIuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ3Jvc3NPcmlnaW5QcmVmbGlnaHRDaGVj
a2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDFBQkU2N0ExRDA1ODBENTAw
NkQ4NjJEIC8qIENyb3NzT3JpZ2luUHJlZmxpZ2h0Q2hlY2tlci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBDcm9zc09yaWdpblByZWZsaWdodENoZWNrZXIuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDFBRDc1MzkxQ0VGNkJDRTAwQTMxNDg2IC8qIEZldGNoT3B0
aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGZXRjaE9wdGlvbnMuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDFCMjhCMTIxRjg1MDFBMzAwRkI1MkFDIC8q
IE1lZGlhRW5kcG9pbnRDb25maWd1cmF0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IE1lZGlhRW5kcG9pbnRDb25maWd1cmF0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTQxQjI4QjEzMUY4NTAxQTQwMEZCNTJBQyAvKiBNZWRpYUVuZHBvaW50Q29uZmln
dXJhdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNZWRpYUVu
ZHBvaW50Q29uZmlndXJhdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQx
QjJBNjI1MUVGMUJGNjAwMDJCOUQ3QSAvKiBXZWJBdWRpb1NvdXJjZVByb3ZpZGVyLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFdlYkF1ZGlvU291cmNlUHJvdmlkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNDFCNDU5REExRjRDQURCOTAwMDBGNkZEIC8qIFJlYWRhYmxlU3RyZWFtLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlYWRhYmxlU3RyZWFtLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxQjQ1OUVEMUY1NUVCQzcwMDAwRjZGRCAvKiBSZWFkYWJs
ZVN0cmVhbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZWFkYWJs
ZVN0cmVhbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMDczNCw4ICsxMDcy
Miw2IEBACiAJCTVEQjFCQzY4MTA3MTVBNjQwMEVGQUE0OSAvKiBUcmFuc2Zvcm1Tb3VyY2UuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVHJhbnNmb3JtU291cmNlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVEQjFCQzY5MTA3MTVBNjQwMEVGQUE0OSAvKiBUcmFu
c2Zvcm1Tb3VyY2VMaWJ4c2x0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFRyYW5zZm9ybVNvdXJjZUxpYnhzbHQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk1REZFQkFCNjE4NTkyQjZEMDBDNzVCRUIgLyogV2ViS2l0QXZhaWxhYmlsaXR5LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYktpdEF2YWlsYWJpbGl0eS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1RTE2QTJFMjFCRkE2NEZCMDAyOUEyMUUgLyogTWVk
aWFFbmRwb2ludFBlZXJDb25uZWN0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IE1lZGlhRW5kcG9pbnRQZWVyQ29ubmVjdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCTVFMTZBMkUzMUJGQTY0RkIwMDI5QTIxRSAvKiBNZWRpYUVuZHBvaW50
UGVlckNvbm5lY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWVkaWFF
bmRwb2ludFBlZXJDb25uZWN0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVF
MkM0MzREMUJDRUUyRTUwMDAxRTJCQyAvKiBQZWVyQ29ubmVjdGlvbkJhY2tlbmQuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGVlckNvbm5lY3Rpb25CYWNrZW5kLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVFMkM0MzU0MUJDRUUzMEQwMDAxRTJCQyAvKiBSVENQ
ZWVyQ29ubmVjdGlvbi5qcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuamF2YXNjcmlwdDsgcGF0aCA9
IFJUQ1BlZXJDb25uZWN0aW9uLmpzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1RTJD
NDM1NTFCQ0VFMzBEMDAwMUUyQkMgLyogUlRDUGVlckNvbm5lY3Rpb25JbnRlcm5hbHMuanMgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmphdmFzY3JpcHQ7IHBhdGggPSBSVENQZWVyQ29ubmVjdGlvbklu
dGVybmFscy5qczsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEwNzYzLDI5ICsxMDc0
OSwxNiBAQAogCQk1RTJDNDM3NjFCQ0Y5QTBCMDAwMUUyQkMgLyogUlRDUGVlckNvbm5lY3Rpb25C
dWlsdGlucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSVENQZWVyQ29ubmVj
dGlvbkJ1aWx0aW5zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVFMkM0Mzc4MUJD
RjlBMEIwMDAxRTJCQyAvKiBSVENQZWVyQ29ubmVjdGlvbkludGVybmFsc0J1aWx0aW5zLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJUQ1BlZXJDb25uZWN0aW9uSW50
ZXJuYWxzQnVpbHRpbnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1RTJDNDM3
OTFCQ0Y5QTBCMDAwMUUyQkMgLyogUlRDUGVlckNvbm5lY3Rpb25JbnRlcm5hbHNCdWlsdGlucy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSVENQZWVyQ29ubmVjdGlvbkludGVy
bmFsc0J1aWx0aW5zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTVFNEVBQjAyMUQw
NzE2NEMwMDA2QTE4NCAvKiBNZWRpYUVuZHBvaW50U2Vzc2lvbkRlc2NyaXB0aW9uLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1lZGlhRW5kcG9pbnRTZXNzaW9uRGVz
Y3JpcHRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1RTRFQUIwMzFEMDcx
NjRDMDAwNkExODQgLyogTWVkaWFFbmRwb2ludFNlc3Npb25EZXNjcmlwdGlvbi5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNZWRpYUVuZHBvaW50U2Vzc2lvbkRlc2NyaXB0aW9u
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVFNUUyQjEwMUNGQzNFNEIwMDBDMEQ4
NSAvKiBSVENSdHBUcmFuc2NlaXZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBSVENSdHBUcmFuc2NlaXZlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTVFNUUyQjExMUNGQzNFNEIwMDBDMEQ4NSAvKiBSVENSdHBUcmFuc2NlaXZlci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSVENSdHBUcmFuc2NlaXZlci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk1RTVFMkIxMjFDRkMzRTRCMDAwQzBEODUgLyogUlRDUnRw
VHJhbnNjZWl2ZXIuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFJUQ1J0cFRyYW5zY2VpdmVy
LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUU2NjUzMDkxREE0MzdCRjAwRkRE
ODRDIC8qIFJUQ0ljZVRyYW5zcG9ydC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBSVENJY2VUcmFuc3BvcnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNUVBM0Q2
REQxQzg1OUQ1MzAwMzAwQkJCIC8qIE1vY2tNZWRpYUVuZHBvaW50LmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1vY2tNZWRpYUVuZHBvaW50LmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNUVBM0Q2REUxQzg1OUQ1MzAwMzAwQkJCIC8qIE1vY2tNZWRp
YUVuZHBvaW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1vY2tNZWRpYUVu
ZHBvaW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTVFQTNENkUxMUM4NTlEQUEw
MDMwMEJCQiAvKiBTRFBQcm9jZXNzb3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gU0RQUHJvY2Vzc29yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
NUVBM0Q2RTIxQzg1OURBQTAwMzAwQkJCIC8qIFNEUFByb2Nlc3Nvci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBTRFBQcm9jZXNzb3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJNUVBM0Q2RTUxQzg1QTlDMzAwMzAwQkJCIC8qIFNEUFByb2Nlc3NvclNjcmlwdFJl
c291cmNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNEUFByb2Nl
c3NvclNjcmlwdFJlc291cmNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNUVB
M0Q2RTYxQzg1QTlDMzAwMzAwQkJCIC8qIFNEUFByb2Nlc3NvclNjcmlwdFJlc291cmNlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNEUFByb2Nlc3NvclNjcmlwdFJlc291cmNl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVFQTcyNUNBMUFDQUJDQjUwMEVBRDE3
QiAvKiBOYXZpZ2F0b3JNZWRpYURldmljZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gTmF2aWdhdG9yTWVkaWFEZXZpY2VzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNUVBNzI1Q0IxQUNBQkNCNTAwRUFEMTdCIC8qIE5hdmlnYXRvck1lZGlhRGV2
aWNlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBOYXZpZ2F0b3JNZWRpYURl
dmljZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUVBNzI1Q0MxQUNBQkNCNTAw
RUFEMTdCIC8qIE5hdmlnYXRvck1lZGlhRGV2aWNlcy5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRo
ID0gTmF2aWdhdG9yTWVkaWFEZXZpY2VzLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNUVBNzI1Q0QxQUNBQkNEOTAwRUFEMTdCIC8qIE1lZGlhRGV2aWNlcy5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNZWRpYURldmljZXMuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk1RUE3MjVDRTFBQ0FCQ0Q5MDBFQUQxN0IgLyogTWVkaWFEZXZp
Y2VzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1lZGlhRGV2aWNlcy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1RUE3MjVDRjFBQ0FCQ0Q5MDBFQUQxN0IgLyog
TWVkaWFEZXZpY2VzLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBNZWRpYURldmljZXMuaWRs
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1RUJCODkyQTFDNzc3N0QwMDBDNjVENDEg
LyogTWVkaWFFbmRwb2ludC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBNZWRpYUVuZHBvaW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNUVCQjg5
MkIxQzc3NzdEMDAwQzY1RDQxIC8qIE1lZGlhRW5kcG9pbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gTWVkaWFFbmRwb2ludC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQk1RUJCODkyQzFDNzc3N0QwMDBDNjVENDEgLyogTWVkaWFFbmRwb2ludENvbmZpZ3VyYXRp
b24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWVkaWFFbmRwb2lu
dENvbmZpZ3VyYXRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1RUJCODky
RDFDNzc3N0QwMDBDNjVENDEgLyogTWVkaWFFbmRwb2ludENvbmZpZ3VyYXRpb24uaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWVkaWFFbmRwb2ludENvbmZpZ3VyYXRpb24uaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNUVCQjg5MkUxQzc3NzdEMDAwQzY1RDQxIC8q
IE1lZGlhRW5kcG9pbnRTZXNzaW9uQ29uZmlndXJhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBNZWRpYUVuZHBvaW50U2Vzc2lvbkNvbmZpZ3VyYXRpb24uaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUVCQjg5MkYxQzc3NzdEMDAwQzY1RDQxIC8qIE1lZGlh
UGF5bG9hZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNZWRpYVBheWxvYWQu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUVCQjg5MzAxQzc3NzdFMTAwQzY1RDQx
IC8qIEljZUNhbmRpZGF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJY2VD
YW5kaWRhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUVCQjg5MzgxQzc3QkRB
NDAwQzY1RDQxIC8qIFBlZXJNZWRpYURlc2NyaXB0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFBlZXJNZWRpYURlc2NyaXB0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC0xNTE1Niw3ICsxNTEyOSw2IEBACiAJCUNEQUI2RDJDMTdDODE0RUUwMEM2MEIz
NCAvKiBKU01lZGlhQ29udHJvbHNIb3N0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEpTTWVkaWFDb250cm9sc0hvc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
Q0RBQjZEMkYxN0M5MjU5NTAwQzYwQjM0IC8qIFVzZXJBZ2VudFNjcmlwdHMuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVXNlckFnZW50U2NyaXB0cy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlDREFCNkQzMDE3QzkyNTk1MDBDNjBCMzQgLyogVXNlckFnZW50U2Ny
aXB0c0RhdGEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVXNlckFn
ZW50U2NyaXB0c0RhdGEuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlDREFCNkQz
MDE3QzkyNTk1MDBDNjBCMzUgLyogU0RQUHJvY2Vzc29yU2NyaXB0c0RhdGEuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU0RQUHJvY2Vzc29yU2NyaXB0c0RhdGEuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDREFFOEMwNzE3NDZCOTU3MDA1MzJENzgg
LyogUGxhdGZvcm1NZWRpYVNlc3Npb25NYW5hZ2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFBsYXRmb3JtTWVkaWFTZXNzaW9uTWFuYWdlci5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNEQUU4QzA4MTc0NkI5NTcwMDUzMkQ3OCAvKiBQbGF0Zm9y
bU1lZGlhU2Vzc2lvbk1hbmFnZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
UGxhdGZvcm1NZWRpYVNlc3Npb25NYW5hZ2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUNEQkVBRUFBMTlEOTJCNkMwMEJFQkE4OCAvKiBNZWRpYVNlbGVjdGlvbkdyb3VwQVZGT2Jq
Qy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IE1lZGlhU2VsZWN0
aW9uR3JvdXBBVkZPYmpDLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTY0MDMs
MTAgKzE2Mzc1LDYgQEAKIAkJCQkwN0FCRUY2RDFEOEExQzc2MDBGMjE5NzIgLyogTWVkaWFEZXZp
Y2VzRW51bWVyYXRpb25SZXF1ZXN0LmggKi8sCiAJCQkJMDczOTRFQzcxQkFCMkNDRDAwQkU5OUNE
IC8qIE1lZGlhRGV2aWNlc1JlcXVlc3QuY3BwICovLAogCQkJCTA3Mzk0RUM5MUJBQjJDRDcwMEJF
OTlDRCAvKiBNZWRpYURldmljZXNSZXF1ZXN0LmggKi8sCi0JCQkJNUUxNkEyRTIxQkZBNjRGQjAw
MjlBMjFFIC8qIE1lZGlhRW5kcG9pbnRQZWVyQ29ubmVjdGlvbi5jcHAgKi8sCi0JCQkJNUUxNkEy
RTMxQkZBNjRGQjAwMjlBMjFFIC8qIE1lZGlhRW5kcG9pbnRQZWVyQ29ubmVjdGlvbi5oICovLAot
CQkJCTVFNEVBQjAyMUQwNzE2NEMwMDA2QTE4NCAvKiBNZWRpYUVuZHBvaW50U2Vzc2lvbkRlc2Ny
aXB0aW9uLmNwcCAqLywKLQkJCQk1RTRFQUIwMzFEMDcxNjRDMDAwNkExODQgLyogTWVkaWFFbmRw
b2ludFNlc3Npb25EZXNjcmlwdGlvbi5oICovLAogCQkJCTA3MjIxQjRDMTdDRUMzMjcwMDg0OEU1
MSAvKiBNZWRpYVN0cmVhbS5jcHAgKi8sCiAJCQkJMDcyMjFCNEQxN0NFQzMyNzAwODQ4RTUxIC8q
IE1lZGlhU3RyZWFtLmggKi8sCiAJCQkJMDcyMjFCNEUxN0NFQzMyNzAwODQ4RTUxIC8qIE1lZGlh
U3RyZWFtLmlkbCAqLywKQEAgLTE2NTAxLDggKzE2NDY5LDYgQEAKIAkJCQk1RTJDNDM2NDFCQ0VF
MzcyMDAwMUUyQkMgLyogUlRDVHJhY2tFdmVudC5jcHAgKi8sCiAJCQkJNUUyQzQzNjUxQkNFRTM3
MjAwMDFFMkJDIC8qIFJUQ1RyYWNrRXZlbnQuaCAqLywKIAkJCQk1RTJDNDM2NjFCQ0VFMzcyMDAw
MUUyQkMgLyogUlRDVHJhY2tFdmVudC5pZGwgKi8sCi0JCQkJNUVBM0Q2RTExQzg1OURBQTAwMzAw
QkJCIC8qIFNEUFByb2Nlc3Nvci5jcHAgKi8sCi0JCQkJNUVBM0Q2RTIxQzg1OURBQTAwMzAwQkJC
IC8qIFNEUFByb2Nlc3Nvci5oICovLAogCQkJCTA3MjIxQjhEMTdDRUMzMjcwMDg0OEU1MSAvKiBV
c2VyTWVkaWFDbGllbnQuaCAqLywKIAkJCQkwNzIyMUI4RTE3Q0VDMzI3MDA4NDhFNTEgLyogVXNl
ck1lZGlhQ29udHJvbGxlci5jcHAgKi8sCiAJCQkJMDcyMjFCOEYxN0NFQzMyNzAwODQ4RTUxIC8q
IFVzZXJNZWRpYUNvbnRyb2xsZXIuaCAqLywKQEAgLTE2NTI1LDExICsxNjQ5MSw4IEBACiAJCQkJ
NUVCQjg5MzAxQzc3NzdFMTAwQzY1RDQxIC8qIEljZUNhbmRpZGF0ZS5oICovLAogCQkJCTFCRTVC
RkMxMUQ1MTU3MTUwMDE2NjZEOSAvKiBNZWRpYUNvbnN0cmFpbnRzLmNwcCAqLywKIAkJCQkwNzIy
MUI5OTE3Q0YwQUQ0MDA4NDhFNTEgLyogTWVkaWFDb25zdHJhaW50cy5oICovLAotCQkJCTVFQkI4
OTJBMUM3Nzc3RDAwMEM2NUQ0MSAvKiBNZWRpYUVuZHBvaW50LmNwcCAqLywKLQkJCQk1RUJCODky
QjFDNzc3N0QwMDBDNjVENDEgLyogTWVkaWFFbmRwb2ludC5oICovLAotCQkJCTVFQkI4OTJDMUM3
Nzc3RDAwMEM2NUQ0MSAvKiBNZWRpYUVuZHBvaW50Q29uZmlndXJhdGlvbi5jcHAgKi8sCi0JCQkJ
NUVCQjg5MkQxQzc3NzdEMDAwQzY1RDQxIC8qIE1lZGlhRW5kcG9pbnRDb25maWd1cmF0aW9uLmgg
Ki8sCi0JCQkJNUVCQjg5MkUxQzc3NzdEMDAwQzY1RDQxIC8qIE1lZGlhRW5kcG9pbnRTZXNzaW9u
Q29uZmlndXJhdGlvbi5oICovLAorCQkJCTQxQjI4QjEzMUY4NTAxQTQwMEZCNTJBQyAvKiBNZWRp
YUVuZHBvaW50Q29uZmlndXJhdGlvbi5jcHAgKi8sCisJCQkJNDFCMjhCMTIxRjg1MDFBMzAwRkI1
MkFDIC8qIE1lZGlhRW5kcG9pbnRDb25maWd1cmF0aW9uLmggKi8sCiAJCQkJNUVCQjg5MkYxQzc3
NzdEMDAwQzY1RDQxIC8qIE1lZGlhUGF5bG9hZC5oICovLAogCQkJCTA3MEY1NDk3MTdGMTJGNkIw
MDE2OUUwNCAvKiBNZWRpYVN0cmVhbUNvbnN0cmFpbnRzVmFsaWRhdGlvbkNsaWVudC5oICovLAog
CQkJCTA3MTE1ODhGMTdERjYzMzcwMEVERkUyQiAvKiBNZWRpYVN0cmVhbVByaXZhdGUuY3BwICov
LApAQCAtMTY1NjcsOCArMTY1MzAsNiBAQAogCQkJCTA3MjIxQkFEMTdDRjBBRDQwMDg0OEU1MSAv
KiBSVENTZXNzaW9uRGVzY3JpcHRpb25SZXF1ZXN0LmggKi8sCiAJCQkJMzEzNTkxMDUxRTdEREM2
MDAwRjMwNjMwIC8qIFJUQ1NpZ25hbGluZ1N0YXRlLmggKi8sCiAJCQkJMDcyMjFCQjAxN0NGMEFE
NDAwODQ4RTUxIC8qIFJUQ1ZvaWRSZXF1ZXN0LmggKi8sCi0JCQkJNUVBM0Q2RTUxQzg1QTlDMzAw
MzAwQkJCIC8qIFNEUFByb2Nlc3NvclNjcmlwdFJlc291cmNlLmNwcCAqLywKLQkJCQk1RUEzRDZF
NjFDODVBOUMzMDAzMDBCQkIgLyogU0RQUHJvY2Vzc29yU2NyaXB0UmVzb3VyY2UuaCAqLywKIAkJ
CQkwNzBFODFEMDFCRjI3NjU2MDAxRkRBNDggLyogVmlkZW9UcmFja1ByaXZhdGVNZWRpYVN0cmVh
bS5oICovLAogCQkJCTQxQjJBNjI1MUVGMUJGNjAwMDJCOUQ3QSAvKiBXZWJBdWRpb1NvdXJjZVBy
b3ZpZGVyLmggKi8sCiAJCQkpOwpAQCAtMTkyNDUsOCArMTkyMDYsNiBAQAogCQkJCTA3N0I2NDE1
MUI5NUY3MDMwMDNFOUFENSAvKiBNZWRpYVBsYXliYWNrVGFyZ2V0TW9jay5oICovLAogCQkJCTA3
N0I2NDEwMUI5NEYxMkUwMDNFOUFENSAvKiBNZWRpYVBsYXliYWNrVGFyZ2V0UGlja2VyTW9jay5j
cHAgKi8sCiAJCQkJMDc3QjY0MTExQjk0RjEyRTAwM0U5QUQ1IC8qIE1lZGlhUGxheWJhY2tUYXJn
ZXRQaWNrZXJNb2NrLmggKi8sCi0JCQkJNUVBM0Q2REQxQzg1OUQ1MzAwMzAwQkJCIC8qIE1vY2tN
ZWRpYUVuZHBvaW50LmNwcCAqLywKLQkJCQk1RUEzRDZERTFDODU5RDUzMDAzMDBCQkIgLyogTW9j
a01lZGlhRW5kcG9pbnQuaCAqLywKIAkJCQkwN0Q2QTRGMTFCRUQ1Rjg4MDAxNzQxNDYgLyogTW9j
a1JlYWx0aW1lQXVkaW9Tb3VyY2UuY3BwICovLAogCQkJCTA3RDZBNEYyMUJFRDVGODgwMDE3NDE0
NiAvKiBNb2NrUmVhbHRpbWVBdWRpb1NvdXJjZS5oICovLAogCQkJCTA3RDZBNEVEMUJFQ0YyRDIw
MDE3NDE0NiAvKiBNb2NrUmVhbHRpbWVNZWRpYVNvdXJjZS5jcHAgKi8sCkBAIC0xOTQwMyw3ICsx
OTM2Miw2IEBACiAJCQkJNUUyQzQzNzYxQkNGOUEwQjAwMDFFMkJDIC8qIFJUQ1BlZXJDb25uZWN0
aW9uQnVpbHRpbnMuaCAqLywKIAkJCQk1RTJDNDM3ODFCQ0Y5QTBCMDAwMUUyQkMgLyogUlRDUGVl
ckNvbm5lY3Rpb25JbnRlcm5hbHNCdWlsdGlucy5jcHAgKi8sCiAJCQkJNUUyQzQzNzkxQkNGOUEw
QjAwMDFFMkJDIC8qIFJUQ1BlZXJDb25uZWN0aW9uSW50ZXJuYWxzQnVpbHRpbnMuaCAqLywKLQkJ
CQlDREFCNkQzMDE3QzkyNTk1MDBDNjBCMzUgLyogU0RQUHJvY2Vzc29yU2NyaXB0c0RhdGEuY3Bw
ICovLAogCQkJCTQzQjg1RUQyMThDQkVDNTIwMEUzMUFGNCAvKiBTZWxlY3RvclBzZXVkb0NsYXNz
QW5kQ29tcGF0aWJpbGl0eUVsZW1lbnRNYXAuY3BwICovLAogCQkJCTQzQjg1RUQzMThDQkVDNTIw
MEUzMUFGNCAvKiBTZWxlY3RvclBzZXVkb0NsYXNzQW5kQ29tcGF0aWJpbGl0eUVsZW1lbnRNYXAu
Z3BlcmYgKi8sCiAJCQkJMjZBQTBGOUQxOEQyQTE4QjAwNDE5MzgxIC8qIFNlbGVjdG9yUHNldWRv
RWxlbWVudFR5cGVNYXAuY3BwICovLApAQCAtMjYxMjksNiArMjYwODcsMTIgQEAKIAkJCWNoaWxk
cmVuID0gKAogCQkJCUNFMjYxNkE0MTg3RTY1QzEwMDc5NTVGMyAvKiBpb3MgKi8sCiAJCQkJMkQ1
MDM2NjYxQkNERERDNDAwRTIwQkIzIC8qIG1hYyAqLywKKwkJCQk3Q0QwRTJCNjFGODBBNDgyMDAx
NkE0Q0UgLyogQWJvcnRDb250cm9sbGVyLmNwcCAqLywKKwkJCQk3Q0QwRTJCNTFGODBBNDgyMDAx
NkE0Q0UgLyogQWJvcnRDb250cm9sbGVyLmggKi8sCisJCQkJN0NEMEUyQjcxRjgwQTQ4MjAwMTZB
NENFIC8qIEFib3J0Q29udHJvbGxlci5pZGwgKi8sCisJCQkJN0NEMEUyQkQxRjgwQTU2RTAwMTZB
NENFIC8qIEFib3J0U2lnbmFsLmNwcCAqLywKKwkJCQk3Q0QwRTJCQzFGODBBNTZFMDAxNkE0Q0Ug
LyogQWJvcnRTaWduYWwuaCAqLywKKwkJCQk3Q0QwRTJCRTFGODBBNTZFMDAxNkE0Q0UgLyogQWJv
cnRTaWduYWwuaWRsICovLAogCQkJCTdDNTIyMjk3MUUxREFFMTYwMDJDQjhGNyAvKiBBY3RpdmVE
T01DYWxsYmFjay5jcHAgKi8sCiAJCQkJN0M1MjIyOTgxRTFEQUUxNjAwMkNCOEY3IC8qIEFjdGl2
ZURPTUNhbGxiYWNrLmggKi8sCiAJCQkJN0NEMEJBMDIxQjhGNzlDOTAwNUNFQkJFIC8qIEFjdGl2
ZURPTUNhbGxiYWNrTWljcm90YXNrLmNwcCAqLywKQEAgLTI2MTM2LDEyICsyNjEwMCw2IEBACiAJ
CQkJRTFDNERFNkQwRUE3NUM2NTAwMjNDQ0Q2IC8qIEFjdGl2ZURPTU9iamVjdC5jcHAgKi8sCiAJ
CQkJRTFDNERFNjgwRUE3NUMxRTAwMjNDQ0Q2IC8qIEFjdGl2ZURPTU9iamVjdC5oICovLAogCQkJ
CTgzQkI1Qzg3MUQ1RDZGM0EwMDVBNzFGNCAvKiBBbGxEZXNjZW5kYW50c0NvbGxlY3Rpb24uaCAq
LywKLQkJCQk3Q0QwRTJCNTFGODBBNDgyMDAxNkE0Q0UgLyogQWJvcnRDb250cm9sbGVyLmggKi8s
Ci0JCQkJN0NEMEUyQjYxRjgwQTQ4MjAwMTZBNENFIC8qIEFib3J0Q29udHJvbGxlci5jcHAgKi8s
Ci0JCQkJN0NEMEUyQjcxRjgwQTQ4MjAwMTZBNENFIC8qIEFib3J0Q29udHJvbGxlci5pZGwgKi8s
Ci0JCQkJN0NEMEUyQkMxRjgwQTU2RTAwMTZBNENFIC8qIEFib3J0U2lnbmFsLmggKi8sCi0JCQkJ
N0NEMEUyQkQxRjgwQTU2RTAwMTZBNENFIC8qIEFib3J0U2lnbmFsLmNwcCAqLywKLQkJCQk3Q0Qw
RTJCRTFGODBBNTZFMDAxNkE0Q0UgLyogQWJvcnRTaWduYWwuaWRsICovLAogCQkJCTMxOTg0N0ZF
MUExRDgxNjcwMEExMzMxOCAvKiBBbmltYXRpb25FdmVudC5jcHAgKi8sCiAJCQkJMzE5ODQ3RkYx
QTFEODE2NzAwQTEzMzE4IC8qIEFuaW1hdGlvbkV2ZW50LmggKi8sCiAJCQkJMzE5ODQ4MDAxQTFE
ODE2NzAwQTEzMzE4IC8qIEFuaW1hdGlvbkV2ZW50LmlkbCAqLywKQEAgLTI3MDM2LDYgKzI2OTk0
LDggQEAKIAkJCWlzYSA9IFBCWEhlYWRlcnNCdWlsZFBoYXNlOwogCQkJYnVpbGRBY3Rpb25NYXNr
ID0gMjE0NzQ4MzY0NzsKIAkJCWZpbGVzID0gKAorCQkJCTdDRDBFMkI4MUY4MEE0ODIwMDE2QTRD
RSAvKiBBYm9ydENvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTdDRDBFMkJGMUY4MEE1
NkUwMDE2QTRDRSAvKiBBYm9ydFNpZ25hbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRjQ4MjIzMTMx
RTM4NkUyNDAwNjZGQzc5IC8qIEFic3RyYWN0UGFzdGVib2FyZC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJNDFFMUIxRDEwRkY1OTg2OTAwNTc2QjNCIC8qIEFic3RyYWN0V29ya2VyLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkyOUE4MTIyRTBGQkI5QzFEMDA1MTAyOTMgLyogQWNjZXNzaWJpbGl0eUFSSUFH
cmlkQ2VsbC5oIGluIEhlYWRlcnMgKi8sCkBAIC0yODMzMyw2ICsyODI5Myw4IEBACiAJCQkJMkQw
QjRBQUIxOERBMUNDRDAwNDM0REUxIC8qIElPU3VyZmFjZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MUMyMUU1N0QxODNFRDFGRjAwMUMyODlEIC8qIElPU3VyZmFjZVBvb2wuaCBpbiBIZWFkZXJzICov
LAogCQkJCTA3QUM0NzAyMTk1MjEwMjEwMEVFOTcyMyAvKiBJU09WVFRDdWUuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTdDMzBEOTg0MUY4MTVBRUMwMDI2ODM1NiAvKiBKU0Fib3J0Q29udHJvbGxlci5o
IGluIEhlYWRlcnMgKi8sCisJCQkJN0MzMEQ5ODYxRjgxNUFFQzAwMjY4MzU2IC8qIEpTQWJvcnRT
aWduYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTQxOEY4ODA1MEZGOTU3QUYwMDgwRjA0NSAvKiBK
U0Fic3RyYWN0V29ya2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQk1NzA0NDA1QTFFNTM5MzYyMDAz
NTY2MDEgLyogSlNBZXNDYmNDZmJQYXJhbXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTU3RTFFNUFE
MUU4REQwOUIwMEVFMzdDOSAvKiBKU0Flc0N0clBhcmFtcy5oIGluIEhlYWRlcnMgKi8sCkBAIC0y
OTI1NiwxMSArMjkyMTgsNyBAQAogCQkJCTA3RkU5OUREMTg4MDdBN0QwMDI1NjY0OCAvKiBNZWRp
YUVsZW1lbnRTZXNzaW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkyRDlCRjcwNjFEQkZCQjI0MDA3
QTdEOTkgLyogTWVkaWFFbmNyeXB0ZWRFdmVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkQ5QkY3
MDgxREJGQkIyNDAwN0E3RDk5IC8qIE1lZGlhRW5jcnlwdGVkRXZlbnRJbml0LmggaW4gSGVhZGVy
cyAqLywKLQkJCQk1RUJCODkzNTFDNzc3ODI5MDBDNjVENDEgLyogTWVkaWFFbmRwb2ludC5oIGlu
IEhlYWRlcnMgKi8sCi0JCQkJNUVCQjg5MzcxQzc3NzgyOTAwQzY1RDQxIC8qIE1lZGlhRW5kcG9p
bnRDb25maWd1cmF0aW9uLmggaW4gSGVhZGVycyAqLywKLQkJCQk1RTE2QTJFNDFCRkE2NTBCMDAy
OUEyMUUgLyogTWVkaWFFbmRwb2ludFBlZXJDb25uZWN0aW9uLmggaW4gSGVhZGVycyAqLywKLQkJ
CQk1RUJCODkzMjFDNzc3ODIzMDBDNjVENDEgLyogTWVkaWFFbmRwb2ludFNlc3Npb25Db25maWd1
cmF0aW9uLmggaW4gSGVhZGVycyAqLywKLQkJCQk1RTRFQUIwNDFEMDcxNjZBMDAwNkExODQgLyog
TWVkaWFFbmRwb2ludFNlc3Npb25EZXNjcmlwdGlvbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJNDFC
MjhCMTUxRjg1MDFEMzAwRkI1MkFDIC8qIE1lZGlhRW5kcG9pbnRDb25maWd1cmF0aW9uLmggaW4g
SGVhZGVycyAqLywKIAkJCQlFNDQ2MTNBRDBDRDYzMzEwMDBGQURBNzUgLyogTWVkaWFFcnJvci5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJNEUxOTU5MjIwQTM5REFCQTAwMjIwRkU1IC8qIE1lZGlhRmVh
dHVyZU5hbWVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwN0E2RDFFQzE0OTExMzc3MDAwNTFEMEMg
LyogTWVkaWFGcmFnbWVudFVSSVBhcnNlci5oIGluIEhlYWRlcnMgKi8sCkBAIC0yOTM0NSwxMSAr
MjkzMDMsOSBAQAogCQkJCTUyRjEwODY2MTYyQjZEQTgwMDlBQzgxRSAvKiBNaXhlZENvbnRlbnRD
aGVja2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQlDREYyQjAxMTE4MjA1NDA2MDBGMkI0MjQgLyog
TW9ja0JveC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQ0RGNEI3MjQxRTAzQkY4MTAwRTIzNUEyIC8q
IE1vY2tDRE1GYWN0b3J5LmggaW4gSGVhZGVycyAqLywKLQkJCQk3QzMwRDk4NDFGODE1QUVDMDAy
NjgzNTYgLyogSlNBYm9ydENvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUNERjRCNzIw
MUUwM0JGNkYwMEUyMzVBMiAvKiBNb2NrQ0RNRmFjdG9yeS5pZGwgaW4gSGVhZGVycyAqLywKIAkJ
CQk1MTA1OEFFMDFENjdDMjI5MDA5QTUzOEMgLyogTW9ja0dhbWVwYWQuaCBpbiBIZWFkZXJzICov
LAogCQkJCTUxMDU4QUUyMUQ2N0MyMjkwMDlBNTM4QyAvKiBNb2NrR2FtZXBhZFByb3ZpZGVyLmgg
aW4gSGVhZGVycyAqLywKLQkJCQk1RUEzRDZERjFDODU5RDdGMDAzMDBCQkIgLyogTW9ja01lZGlh
RW5kcG9pbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUNERjJCMDEzMTgyMDU0MDYwMEYyQjQyNCAv
KiBNb2NrTWVkaWFQbGF5ZXJNZWRpYVNvdXJjZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQ0RGMkIw
MTUxODIwNTQwNjAwRjJCNDI0IC8qIE1vY2tNZWRpYVNvdXJjZVByaXZhdGUuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTA3RDZBNEY0MUJFRDVGODgwMDE3NDE0NiAvKiBNb2NrUmVhbHRpbWVBdWRpb1Nv
dXJjZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0yOTk4NCw4ICsyOTk0MCw2IEBACiAJCQkJODNDNTc5
NUQxREE1QzMwMTAwNkZBQ0E4IC8qIFNjcm9sbFRvT3B0aW9ucy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJOTNDMDlDODYwQjA2NTdBQTAwNUFCRDREIC8qIFNjcm9sbFR5cGVzLmggaW4gSGVhZGVycyAq
LywKIAkJCQlCQzZENkUyNjA5QUY5NDM1MDBGNTk3NTkgLyogU2Nyb2xsVmlldy5oIGluIEhlYWRl
cnMgKi8sCi0JCQkJNUVBM0Q2RTQxQzg1OURDMTAwMzAwQkJCIC8qIFNEUFByb2Nlc3Nvci5oIGlu
IEhlYWRlcnMgKi8sCi0JCQkJNUVBM0Q2RTgxQzg1QTlEQjAwMzAwQkJCIC8qIFNEUFByb2Nlc3Nv
clNjcmlwdFJlc291cmNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlGNTVCM0REMjEyNTFGMTJEMDAz
RUYyNjkgLyogU2VhcmNoSW5wdXRUeXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBQjcxNzA4OTBC
MzExODA4MDAxNzEyM0UgLyogU2VhcmNoUG9wdXBNZW51LmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RTcwNThGNDFCQzVDRURBMDA0NUE1MDcgLyogU2VhcmNoUG9wdXBNZW51Q29jb2EuaCBpbiBIZWFk
ZXJzICovLApAQCAtMzAyMzcsNyArMzAxOTEsNiBAQAogCQkJCUIyMjI3OTk1MEQwMEJGMjIwMDcx
Qjc4MiAvKiBTVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QjIyMjc5OTgwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR0FuaW1hdGlvbkVsZW1lbnQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTQzOUQzMzQ1MTNBNjkxMUMwMEMyMEY0RiAvKiBTVkdBbmltYXRvckZhY3Rv
cnkuaCBpbiBIZWFkZXJzICovLAotCQkJCTdDMzBEOTg2MUY4MTVBRUMwMDI2ODM1NiAvKiBKU0Fi
b3J0U2lnbmFsLmggaW4gSGVhZGVycyAqLywKIAkJCQkwOEZCM0Y4NDEzQkM3NTRDMDA5OUZDMTgg
LyogU1ZHQXR0cmlidXRlVG9Qcm9wZXJ0eU1hcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjIyMjc5
OUMwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR0NpcmNsZUVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAog
CQkJCUIyMjI3OTlGMEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdDbGlwUGF0aEVsZW1lbnQuaCBpbiBI
ZWFkZXJzICovLApAQCAtMzAyODEsNyArMzAyMzQsNiBAQAogCQkJCUIyMjI3QTA2MEQwMEJGMjIw
MDcxQjc4MiAvKiBTVkdGRVRpbGVFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjIyN0Ew
OTBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHRkVUdXJidWxlbmNlRWxlbWVudC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJODQ1RTcyRkMwRkQyNjIzOTAwQTg3RDc5IC8qIFNWR0ZpbHRlci5oIGluIEhlYWRl
cnMgKi8sCi0JCQkJN0NEMEUyQkYxRjgwQTU2RTAwMTZBNENFIC8qIEFib3J0U2lnbmFsLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwODFFQkYzQjBGRDM0RjQxMDBEQTc1NTkgLyogU1ZHRmlsdGVyQnVp
bGRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjIyMjdBMEMwRDAwQkYyMjAwNzFCNzgyIC8qIFNW
R0ZpbHRlckVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyMjI3QTBGMEQwMEJGMjIwMDcx
Qjc4MiAvKiBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMuaCBpbiBIZWFkZXJz
ICovLApAQCAtMzA3MzYsNyArMzA2ODgsNiBAQAogCQkJCTc3QTE3QTc4MTJGMjg2NDIwMDRFMDJG
NiAvKiBXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMTZC
REI4QzFFNkUxNTMwMDBERTBENUEgLyogV2ViR1BVTGF5ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUE1RTIxMjNDMUU0OTI0QTQwMENFMTA0NCAvKiBXZWJIZWFwQWdlbnQuaCBpbiBIZWFkZXJzICov
LAotCQkJCTdDRDBFMkI4MUY4MEE0ODIwMDE2QTRDRSAvKiBBYm9ydENvbnRyb2xsZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUE1ODQwRTI1MTg3QjhBQzIwMDg0M0IxMCAvKiBXZWJJbmplY3RlZFNj
cmlwdEhvc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1ODRGRTMwMTg2NENCODQwMDg0M0IxMCAv
KiBXZWJJbmplY3RlZFNjcmlwdE1hbmFnZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUY0ODIyMzEx
MUUzODY5QjgwMDY2RkM3OSAvKiBXZWJJdGVtUHJvdmlkZXJQYXN0ZWJvYXJkLmggaW4gSGVhZGVy
cyAqLywKQEAgLTMxMjI2LDYgKzMxMTc3LDggQEAKIAkJCWlzYSA9IFBCWFNvdXJjZXNCdWlsZFBo
YXNlOwogCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKIAkJCWZpbGVzID0gKAorCQkJ
CTdDRDBFMkI5MUY4MEE0ODIwMDE2QTRDRSAvKiBBYm9ydENvbnRyb2xsZXIuY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJN0NEMEUyQzAxRjgwQTU2RTAwMTZBNENFIC8qIEFib3J0U2lnbmFsLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTQxRTFCMUQwMEZGNTk4NjkwMDU3NkIzQiAvKiBBYnN0cmFjdFdv
cmtlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzN0Y1N0FCOTFBNTA3MjY5MDA4NzZGOTggLyog
QWNjZXNzaWJpbGl0eUFSSUFHcmlkLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTM3RjU3QUJBMUE1
MDcyNkYwMDg3NkY5OCAvKiBBY2Nlc3NpYmlsaXR5QVJJQUdyaWRDZWxsLmNwcCBpbiBTb3VyY2Vz
ICovLApAQCAtMzE1MDMsNyArMzE0NTYsNiBAQAogCQkJCUNFMjg0OTg5MUNBMzYxNDYwMEI0QTU3
RiAvKiBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVOYW1lcy5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlDRTc5OUZBNzFDNkE1MDU3MDA5N0I1MTggLyogQ29udGVudFNlY3VyaXR5UG9saWN5
TWVkaWFMaXN0RGlyZWN0aXZlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUNFNkRBREY5MUM1OTFF
NkEwMDNGNkE4OCAvKiBDb250ZW50U2VjdXJpdHlQb2xpY3lSZXNwb25zZUhlYWRlcnMuY3BwIGlu
IFNvdXJjZXMgKi8sCi0JCQkJN0MzMEQ5ODUxRjgxNUFFQzAwMjY4MzU2IC8qIEpTQWJvcnRTaWdu
YWwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQ0U3OTlGOUYxQzZBNEMxNjAwOTdCNTE4IC8qIENv
bnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDRTc5OUY5
NzFDNkE0NkJDMDA5N0I1MTggLyogQ29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlDRTc5OUZBQjFDNkE1MDY2MDA5N0I1MTggLyogQ29udGVudFNl
Y3VyaXR5UG9saWN5U291cmNlTGlzdERpcmVjdGl2ZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTMx
NTc1LDcgKzMxNTI3LDYgQEAKIAkJCQlFMTIzM0YxMDE4NUE0MTMwMDA4REZBRjUgLyogQ3J5cHRv
QWxnb3JpdGhtUlNBRVNfUEtDUzFfdjFfNU1hYy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFMUJE
MzMxOTE4MkQ4REREMDBDMDVEOUYgLyogQ3J5cHRvQWxnb3JpdGhtUlNBU1NBX1BLQ1MxX3YxXzUu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTFDMjY2RDgxODMxN0FCNDAwM0Y4QjMzIC8qIENyeXB0
b0FsZ29yaXRobVJTQVNTQV9QS0NTMV92MV81TWFjLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTdD
MzBEOTgzMUY4MTVBRUMwMDI2ODM1NiAvKiBKU0Fib3J0Q29udHJvbGxlci5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlFMTI1RjgyQjE4MjJDRkVDMDBEODRDRDkgLyogQ3J5cHRvQWxnb3JpdGhtU0hB
MS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFMTlBQzNFRTE4MjREQzc5MDAzNDk0MjYgLyogQ3J5
cHRvQWxnb3JpdGhtU0hBMjI0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUxOUFDM0YwMTgyNERD
NzkwMDM0OTQyNiAvKiBDcnlwdG9BbGdvcml0aG1TSEEyNTYuY3BwIGluIFNvdXJjZXMgKi8sCkBA
IC0zMjM1Niw2ICszMjMwNyw4IEBACiAJCQkJMUMyMUU1N0MxODNFRDFGRjAwMUMyODlEIC8qIElP
U3VyZmFjZVBvb2wuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQUQ5RkY2RTExOTA4MzkxRDAwM0I2
MUUwIC8qIElPU3VyZmFjZVBvb2xDb2NvYS5tbSBpbiBTb3VyY2VzICovLAogCQkJCTA3QUM0NzAx
MTk1MjEwMjEwMEVFOTcyMyAvKiBJU09WVFRDdWUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJN0Mz
MEQ5ODMxRjgxNUFFQzAwMjY4MzU2IC8qIEpTQWJvcnRDb250cm9sbGVyLmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCTdDMzBEOTg1MUY4MTVBRUMwMDI2ODM1NiAvKiBKU0Fib3J0U2lnbmFsLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTQxOEY4ODA0MEZGOTU3QUUwMDgwRjA0NSAvKiBKU0Fic3RyYWN0
V29ya2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTU3MDQ0MDVDMUU1MzkzNzkwMDM1NjYwMSAv
KiBKU0Flc0NiY0NmYlBhcmFtcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1N0UxRTVBQzFFOERE
MDlCMDBFRTM3QzkgLyogSlNBZXNDdHJQYXJhbXMuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0zMjQz
NCw3ICszMjM4Nyw2IEBACiAJCQkJQTU4NEZFM0IxODY0RTJEODAwODQzQjEwIC8qIEpTQ29tbWFu
ZExpbmVBUElIb3N0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkzRjlCNkUwMEJBMEZCNzIwMDg1
NDA2NCAvKiBKU0NvbW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNzlBQzkyMTgxMDk5NDVD
ODAwMjEyNjZFIC8qIEpTQ29tcG9zaXRpb25FdmVudC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk3
Q0QwRTJDMDFGODBBNTZFMDAxNkE0Q0UgLyogQWJvcnRTaWduYWwuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJRkRBMTVFQkQxMkIwM0YwQjAwM0E1ODNBIC8qIEpTQ29udm9sdmVyTm9kZS5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlGRTZGRDQ4RDBGNjc2RTkzMDAwOTI4NzMgLyogSlNDb29yZGluYXRl
cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNERDRjNCMjFCNkJFMjA4MDA2MkQ0QzIgLyogSlND
b3VudFF1ZXVpbmdTdHJhdGVneS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTMyNTI3LDcgKzMyNDc5
LDYgQEAKIAkJCQk4MzZBQ0VEMjFFQ0FBQjE5MDA0QkQwMTIgLyogSlNET01NYXRyaXguY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJN0NCQkJDQ0IxRjU2MTgwRDAwNUVGQUFDIC8qIEpTRE9NTWF0cml4
MkRJbml0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTgzNTY1N0M3MUVDQUIxMDcwMENERTcyRCAv
KiBKU0RPTU1hdHJpeEluaXQuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJN0NEMEUyQjkxRjgwQTQ4
MjAwMTZBNENFIC8qIEFib3J0Q29udHJvbGxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4MzZB
Q0VENTFFQ0FBQjE5MDA0QkQwMTIgLyogSlNET01NYXRyaXhSZWFkT25seS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlBOUQyNDgwNjBENzU3RTdEMDBGREY5NTkgLyogSlNET01NaW1lVHlwZS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlBOUQyNDgwODBENzU3RTdEMDBGREY5NTkgLyogSlNET01NaW1l
VHlwZUFycmF5LmNwcCBpbiBTb3VyY2VzICovLApAQCAtMzMzMzMsMTAgKzMzMjg0LDcgQEAKIAkJ
CQlGRDZGMjUyQzEzRjVFRjBFMDA2NTE2NUYgLyogTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2Rl
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTA3RkU5OURDMTg4MDdBN0QwMDI1NjY0OCAvKiBNZWRp
YUVsZW1lbnRTZXNzaW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTJEOUJGNzA1MURCRkJCMjQw
MDdBN0Q5OSAvKiBNZWRpYUVuY3J5cHRlZEV2ZW50LmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTVF
QkI4OTM0MUM3Nzc4MjkwMEM2NUQ0MSAvKiBNZWRpYUVuZHBvaW50LmNwcCBpbiBTb3VyY2VzICov
LAotCQkJCTVFQkI4OTM2MUM3Nzc4MjkwMEM2NUQ0MSAvKiBNZWRpYUVuZHBvaW50Q29uZmlndXJh
dGlvbi5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk1RTE2QTJFNTFCRkE2NTBGMDAyOUEyMUUgLyog
TWVkaWFFbmRwb2ludFBlZXJDb25uZWN0aW9uLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTVFNEVB
QjA1MUQwNzE2NkUwMDA2QTE4NCAvKiBNZWRpYUVuZHBvaW50U2Vzc2lvbkRlc2NyaXB0aW9uLmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCTQxQjI4QjE0MUY4NTAxQTYwMEZCNTJBQyAvKiBNZWRpYUVu
ZHBvaW50Q29uZmlndXJhdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0RTE5NTkyMTBBMzlE
QUJBMDAyMjBGRTUgLyogTWVkaWFGZWF0dXJlTmFtZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MDdBNkQxRUIxNDkxMTM3NzAwMDUxRDBDIC8qIE1lZGlhRnJhZ21lbnRVUklQYXJzZXIuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMkQ5QkY3NDcxREJGREM0OTAwN0E3RDk5IC8qIE1lZGlhS2V5TWVz
c2FnZUV2ZW50LmNwcCBpbiBTb3VyY2VzICovLApAQCAtMzM0MTEsNyArMzMzNTksNiBAQAogCQkJ
CUNERjJCMDEwMTgyMDU0MDYwMEYyQjQyNCAvKiBNb2NrQm94LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTUxMDU4QURGMUQ2N0MyMjkwMDlBNTM4QyAvKiBNb2NrR2FtZXBhZC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQk1MTA1OEFFMTFENjdDMjI5MDA5QTUzOEMgLyogTW9ja0dhbWVwYWRQcm92aWRl
ci5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk1RUEzRDZFMDFDODU5RDg0MDAzMDBCQkIgLyogTW9j
a01lZGlhRW5kcG9pbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQ0RGMkIwMTIxODIwNTQwNjAw
RjJCNDI0IC8qIE1vY2tNZWRpYVBsYXllck1lZGlhU291cmNlLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUNERjJCMDE0MTgyMDU0MDYwMEYyQjQyNCAvKiBNb2NrTWVkaWFTb3VyY2VQcml2YXRlLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTA3RDZBNEYzMUJFRDVGODgwMDE3NDE0NiAvKiBNb2NrUmVh
bHRpbWVBdWRpb1NvdXJjZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTMzOTA2LDkgKzMzODUzLDYg
QEAKIAkJCQlCQzI0NDFDNDBFOEI2NUQwMDA1NTMyMEYgLyogU2Nyb2xsVmlldy5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlFNDUzOTA0NTBFQUZENjM3MDAzNjk1QzggLyogU2Nyb2xsVmlld0lPUy5t
bSBpbiBTb3VyY2VzICovLAogCQkJCTkzNTM2NzZCMDlBRUQ4OEIwMEQzNUNENiAvKiBTY3JvbGxW
aWV3TWFjLm1tIGluIFNvdXJjZXMgKi8sCi0JCQkJNUVBM0Q2RTMxQzg1OURDMTAwMzAwQkJCIC8q
IFNEUFByb2Nlc3Nvci5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk1RUEzRDZFNzFDODVBOURCMDAz
MDBCQkIgLyogU0RQUHJvY2Vzc29yU2NyaXB0UmVzb3VyY2UuY3BwIGluIFNvdXJjZXMgKi8sCi0J
CQkJQ0RBQjZEMzIxN0M5MjU5NTAwQzYwQjM1IC8qIFNEUFByb2Nlc3NvclNjcmlwdHNEYXRhLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUY1NUIzREQxMTI1MUYxMkQwMDNFRjI2OSAvKiBTZWFyY2hJ
bnB1dFR5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEU3MDU4RUUxQkM1QkMxOTAwNDVBNTA3
IC8qIFNlYXJjaFBvcHVwTWVudUNvY29hLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJOTc2RjM2RUEx
NDY4NjIyNTAwNUU5M0I0IC8qIFNlY3VyaXR5Q29udGV4dC5jcHAgaW4gU291cmNlcyAqLywKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0dTdHJlYW1lci5jbWFrZSBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL0dTdHJlYW1lci5jbWFrZQppbmRleCA5OWNmNWZmYTIwNzM3NmNi
NWFiOWVjZGRhZmI2Y2E0N2FiMjAzYTQwLi43ZTIyNGQ3NzQ3NTQ0YWQzN2QzODhkN2M3NGI5ZjZl
NjI1MDhkODBmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9HU3RyZWFtZXIu
Y21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vR1N0cmVhbWVyLmNtYWtlCkBAIC0x
LDI2ICsxLDMgQEAKLWxpc3QoQVBQRU5EIFdlYkNvcmVfSU5DTFVERV9ESVJFQ1RPUklFUwotICAg
ICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9vcGVud2VicnRjIgotKQotCi1p
ZiAoRU5BQkxFX01FRElBX1NUUkVBTSkKLSAgICBsaXN0KEFQUEVORCBXZWJDb3JlX1NZU1RFTV9J
TkNMVURFX0RJUkVDVE9SSUVTCi0gICAgICAgICR7T1BFTldFQlJUQ19JTkNMVURFX0RJUlN9Ci0g
ICAgKQotCi0gICAgbGlzdChBUFBFTkQgV2ViQ29yZV9MSUJSQVJJRVMKLSAgICAgICAgJHtPUEVO
V0VCUlRDX0xJQlJBUklFU30KLSAgICApCi0KLSAgICBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJD
RVMKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lck93ci5jcHAKLQotICAgICAgICBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9vcGVud2Vi
cnRjL01lZGlhRW5kcG9pbnRPd3IuY3BwCi0gICAgICAgIHBsYXRmb3JtL21lZGlhc3RyZWFtL29w
ZW53ZWJydGMvT3BlbldlYlJUQ1V0aWxpdGllcy5jcHAKLSAgICAgICAgcGxhdGZvcm0vbWVkaWFz
dHJlYW0vb3BlbndlYnJ0Yy9SZWFsdGltZU1lZGlhU291cmNlT3dyLmNwcAotICAgICAgICBwbGF0
Zm9ybS9tZWRpYXN0cmVhbS9vcGVud2VicnRjL1JlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJPd3Iu
Y3BwCi0gICAgKQotZW5kaWYgKCkKLQogaWYgKEVOQUJMRV9WSURFTyBPUiBFTkFCTEVfV0VCX0FV
RElPKQogICAgIGxpc3QoQVBQRU5EIFdlYkNvcmVfSU5DTFVERV9ESVJFQ1RPUklFUwogICAgICAg
ICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyIgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3BwCmluZGV4IDQ4Nzcx
NjBjZmFhYjNhZWMyNjljOWZiY2Y2YzQ4NmZmMjE3YTIyYTAuLmYwOTNkNDUxYjI1NThhNWE5MWFh
ODhkMTEzNTk2NDc4NDQxNzg4NzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL01lZGlhUGxheWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9NZWRpYVBsYXllci5jcHAKQEAgLTUzLDkgKzUzLDYgQEAKIAogI2lmIFVTRShHU1RS
RUFNRVIpCiAjaW5jbHVkZSAiTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmgiCi0jaWYgRU5B
QkxFKE1FRElBX1NUUkVBTSkgJiYgVVNFKE9QRU5XRUJSVEMpCi0jaW5jbHVkZSAiTWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyT3dyLmgiCi0jZW5kaWYKICNkZWZpbmUgUGxhdGZvcm1NZWRpYUVu
Z2luZUNsYXNzTmFtZSBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIKICNpZiBFTkFCTEUoVklE
RU8pICYmIEVOQUJMRShNRURJQV9TT1VSQ0UpICYmIEVOQUJMRShWSURFT19UUkFDSykKICNpbmNs
dWRlICJNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0UuaCIKQEAgLTI2OCwxMSArMjY1LDYg
QEAgc3RhdGljIHZvaWQgYnVpbGRNZWRpYUVuZ2luZXNWZWN0b3IoKQogICAgICAgICBQbGF0Zm9y
bU1lZGlhRW5naW5lQ2xhc3NOYW1lOjpyZWdpc3Rlck1lZGlhRW5naW5lKGFkZE1lZGlhRW5naW5l
KTsKICNlbmRpZgogCi0jaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkgJiYgVVNFKEdTVFJFQU1FUikg
JiYgVVNFKE9QRU5XRUJSVEMpCi0gICAgaWYgKFNldHRpbmdzOjppc0dTdHJlYW1lckVuYWJsZWQo
KSkKLSAgICAgICAgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyOjpyZWdpc3Rlck1lZGlh
RW5naW5lKGFkZE1lZGlhRW5naW5lKTsKLSNlbmRpZgotCiAjaWYgRU5BQkxFKFZJREVPKSAmJiBV
U0UoR1NUUkVBTUVSKSAmJiBFTkFCTEUoTUVESUFfU09VUkNFKSAmJiBFTkFCTEUoVklERU9fVFJB
Q0spCiAgICAgaWYgKFNldHRpbmdzOjppc0dTdHJlYW1lckVuYWJsZWQoKSkKICAgICAgICAgTWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjpyZWdpc3Rlck1lZGlhRW5naW5lKGFkZE1lZGlh
RW5naW5lKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dz
dHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5j
cHAKaW5kZXggZjM4ZTYzNzEyOTdhNDk0ZWQ3YWJjMjIwNGMxYjJhYTFkM2Q0YmYxYi4uODQ3OTRm
NGM1YmM5MGNlYTk2ODcyYjBjOGYxMmMyZTFjNGJiYTJiMiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVy
L01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5jcHAKQEAgLTE5MzEsNyArMTkzMSw2IEBAIE1l
ZGlhUGxheWVyOjpTdXBwb3J0c1R5cGUgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpzdXBw
b3J0c1R5cGUoY29uc3QgTWVkaWFFCiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAjZW5kaWYKIAot
ICAgIC8vIE1lZGlhU3RyZWFtIHBsYXliYWNrIGlzIGhhbmRsZWQgYnkgdGhlIE9wZW5XZWJSVEMg
cGxheWVyLgogICAgIGlmIChwYXJhbWV0ZXJzLmlzTWVkaWFTdHJlYW0pCiAgICAgICAgIHJldHVy
biByZXN1bHQ7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3IuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lck93ci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU1MWZmNmNmNzdmZTNj
MTc2OGJhOTA3MTA4NmM5NmUyZWRjOWFhOTUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVh
bWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93ci5jcHAKKysrIC9kZXYvbnVsbApAQCAt
MSw1MDEgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMTIgQ29sbGFib3JhIEx0ZC4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqICBDb3B5cmlnaHQgKEMpIDIwMTQsIDIwMTUgSWdhbGlh
IFMuTC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqICBDb3B5cmlnaHQgKEMpIDIwMTUgTWV0cm9s
b2dpY2FsIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqICBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiAgTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
Ci0gKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0g
KiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0g
KiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5l
cmFsIFB1YmxpYwotICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwg
d3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKLSAq
LwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpbmNsdWRlICJNZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXJPd3IuaCIKLQotI2lmIEVOQUJMRShWSURFTykgJiYgRU5BQkxFKE1FRElBX1NUUkVB
TSkgJiYgVVNFKEdTVFJFQU1FUikgJiYgVVNFKE9QRU5XRUJSVEMpCi0KLSNpbmNsdWRlICJHU3Ry
ZWFtZXJVdGlsaXRpZXMuaCIKLSNpbmNsdWRlICJNZWRpYVBsYXllci5oIgotI2luY2x1ZGUgIk1l
ZGlhU3RyZWFtUHJpdmF0ZS5oIgotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0jaW5jbHVk
ZSAiUmVhbHRpbWVNZWRpYVNvdXJjZU93ci5oIgotI2luY2x1ZGUgIlVSTC5oIgotI2luY2x1ZGUg
PG93ci9vd3IuaD4KLSNpbmNsdWRlIDxvd3Ivb3dyX2dzdF9hdWRpb19yZW5kZXJlci5oPgotI2lu
Y2x1ZGUgPG93ci9vd3JfZ3N0X3ZpZGVvX3JlbmRlcmVyLmg+Ci0jaW5jbHVkZSA8d3RmL05ldmVy
RGVzdHJveWVkLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1HU1RfREVCVUdf
Q0FURUdPUlkod2Via2l0X29wZW53ZWJydGNfZGVidWcpOwotI2RlZmluZSBHU1RfQ0FUX0RFRkFV
TFQgd2Via2l0X29wZW53ZWJydGNfZGVidWcKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1NZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3I6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93
cihNZWRpYVBsYXllciogcGxheWVyKQotICAgIDogTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
QmFzZShwbGF5ZXIpCi17Ci0gICAgaW5pdGlhbGl6ZUdTdHJlYW1lckFuZEdTdHJlYW1lckRlYnVn
Z2luZygpOwotfQotCi1NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3I6On5NZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXJPd3IoKQotewotICAgIEdTVF9UUkFDRSgiRGVzdHJveWluZyIpOwot
Ci0gICAgaWYgKGhhc0F1ZGlvKCkpCi0gICAgICAgIG1fYXVkaW9UcmFjay0+cmVtb3ZlT2JzZXJ2
ZXIoKnRoaXMpOwotICAgIGlmIChoYXNWaWRlbygpKQotICAgICAgICBtX3ZpZGVvVHJhY2stPnJl
bW92ZU9ic2VydmVyKCp0aGlzKTsKLQotICAgIG1fYXVkaW9UcmFja01hcC5jbGVhcigpOwotICAg
IG1fdmlkZW9UcmFja01hcC5jbGVhcigpOwotCi0gICAgc3RvcCgpOwotfQotCi12b2lkIE1lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lck93cjo6cGxheSgpCi17Ci0gICAgR1NUX0RFQlVHKCJQbGF5
Iik7Ci0KLSAgICBpZiAoIW1fc3RyZWFtUHJpdmF0ZSB8fCAhbV9zdHJlYW1Qcml2YXRlLT5hY3Rp
dmUoKSkgewotICAgICAgICBtX3JlYWR5U3RhdGUgPSBNZWRpYVBsYXllcjo6SGF2ZU5vdGhpbmc7
Ci0gICAgICAgIGxvYWRpbmdGYWlsZWQoTWVkaWFQbGF5ZXI6OkVtcHR5KTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIG1fZW5kZWQgPSBmYWxzZTsKLSAgICBtX3BhdXNlZCA9IGZhbHNl
OwotCi0gICAgR1NUX0RFQlVHKCJDb25uZWN0aW5nIHRvIGxpdmUgc3RyZWFtLCBkZXNjcmlwdG9y
OiAlcCIsIG1fc3RyZWFtUHJpdmF0ZS5nZXQoKSk7Ci0KLSAgICBpZiAobV92aWRlb1RyYWNrKQot
ICAgICAgICBtYXliZUhhbmRsZUNoYW5nZU11dGVkU3RhdGUoKm1fdmlkZW9UcmFjay5nZXQoKSk7
Ci0KLSAgICBpZiAobV9hdWRpb1RyYWNrKQotICAgICAgICBtYXliZUhhbmRsZUNoYW5nZU11dGVk
U3RhdGUoKm1fYXVkaW9UcmFjay5nZXQoKSk7Ci19Ci0KLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyT3dyOjpwYXVzZSgpCi17Ci0gICAgR1NUX0RFQlVHKCJQYXVzZSIpOwotICAgIG1f
cGF1c2VkID0gdHJ1ZTsKLSAgICBkaXNhYmxlTWVkaWFUcmFja3MoKTsKLX0KLQotYm9vbCBNZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3I6Omhhc1ZpZGVvKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gbV92aWRlb1RyYWNrOwotfQotCi1ib29sIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93
cjo6aGFzQXVkaW8oKSBjb25zdAotewotICAgIHJldHVybiBtX2F1ZGlvVHJhY2s7Ci19Ci0KLXZv
aWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyOjpzZXRWb2x1bWUoZmxvYXQgdm9sdW1l
KQotewotICAgIGlmICghbV9hdWRpb1RyYWNrKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRv
JiByZWFsVGltZU1lZGlhU291cmNlID0gc3RhdGljX2Nhc3Q8UmVhbHRpbWVNZWRpYVNvdXJjZU93
ciY+KG1fYXVkaW9UcmFjay0+c291cmNlKCkpOwotICAgIGF1dG8gbWVkaWFTb3VyY2UgPSBPV1Jf
TUVESUFfU09VUkNFKHJlYWxUaW1lTWVkaWFTb3VyY2UubWVkaWFTb3VyY2UoKSk7Ci0KLSAgICBH
U1RfREVCVUcoIlNldHRpbmcgdm9sdW1lOiAlZiIsIHZvbHVtZSk7Ci0gICAgZ19vYmplY3Rfc2V0
KG1lZGlhU291cmNlLCAidm9sdW1lIiwgc3RhdGljX2Nhc3Q8Z2RvdWJsZT4odm9sdW1lKSwgbnVs
bHB0cik7Ci19Ci0KLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyOjpzZXRNdXRl
ZChib29sIG11dGVkKQotewotICAgIGlmICghbV9hdWRpb1RyYWNrKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBhdXRvJiByZWFsVGltZU1lZGlhU291cmNlID0gc3RhdGljX2Nhc3Q8UmVhbHRpbWVN
ZWRpYVNvdXJjZU93ciY+KG1fYXVkaW9UcmFjay0+c291cmNlKCkpOwotICAgIGF1dG8gbWVkaWFT
b3VyY2UgPSBPV1JfTUVESUFfU09VUkNFKHJlYWxUaW1lTWVkaWFTb3VyY2UubWVkaWFTb3VyY2Uo
KSk7Ci0gICAgaWYgKCFtZWRpYVNvdXJjZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgR1NUX0RF
QlVHKCJTZXR0aW5nIG11dGU6ICVzIiwgbXV0ZWQgPyAib24iOiJvZmYiKTsKLSAgICBnX29iamVj
dF9zZXQobWVkaWFTb3VyY2UsICJtdXRlIiwgbXV0ZWQsIG51bGxwdHIpOwotfQotCi1mbG9hdCBN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3I6OmN1cnJlbnRUaW1lKCkgY29uc3QKLXsKLSAg
ICBnaW50NjQgcG9zaXRpb24gPSBHU1RfQ0xPQ0tfVElNRV9OT05FOwotICAgIEdzdFF1ZXJ5KiBx
dWVyeSA9IGdzdF9xdWVyeV9uZXdfcG9zaXRpb24oR1NUX0ZPUk1BVF9USU1FKTsKLQotICAgIGlm
IChtX3ZpZGVvVHJhY2sgJiYgZ3N0X2VsZW1lbnRfcXVlcnkobV92aWRlb1NpbmsuZ2V0KCksIHF1
ZXJ5KSkKLSAgICAgICAgZ3N0X3F1ZXJ5X3BhcnNlX3Bvc2l0aW9uKHF1ZXJ5LCAwLCAmcG9zaXRp
b24pOwotICAgIGVsc2UgaWYgKG1fYXVkaW9UcmFjayAmJiBnc3RfZWxlbWVudF9xdWVyeShtX2F1
ZGlvU2luay5nZXQoKSwgcXVlcnkpKQotICAgICAgICBnc3RfcXVlcnlfcGFyc2VfcG9zaXRpb24o
cXVlcnksIDAsICZwb3NpdGlvbik7Ci0KLSAgICBmbG9hdCByZXN1bHQgPSAwOwotICAgIGlmIChz
dGF0aWNfY2FzdDxHc3RDbG9ja1RpbWU+KHBvc2l0aW9uKSAhPSBHU1RfQ0xPQ0tfVElNRV9OT05F
KQotICAgICAgICByZXN1bHQgPSBzdGF0aWNfY2FzdDxkb3VibGU+KHBvc2l0aW9uKSAvIEdTVF9T
RUNPTkQ7Ci0KLSAgICBHU1RfTE9HKCJQb3NpdGlvbiAlIiBHU1RfVElNRV9GT1JNQVQsIEdTVF9U
SU1FX0FSR1MocG9zaXRpb24pKTsKLSAgICBnc3RfcXVlcnlfdW5yZWYocXVlcnkpOwotCi0gICAg
cmV0dXJuIHJlc3VsdDsKLX0KLQotdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3I6
OmxvYWQoY29uc3QgU3RyaW5nICYpCi17Ci0gICAgLy8gUHJvcGVybHkgZmFpbCBzbyB0aGUgZ2xv
YmFsIE1lZGlhUGxheWVyIHRyaWVzIHRvIGZhbGxiYWNrIHRvIHRoZSBuZXh0IE1lZGlhUGxheWVy
UHJpdmF0ZS4KLSAgICBtX25ldHdvcmtTdGF0ZSA9IE1lZGlhUGxheWVyOjpGb3JtYXRFcnJvcjsK
LSAgICBtX3BsYXllci0+bmV0d29ya1N0YXRlQ2hhbmdlZCgpOwotfQotCi0jaWYgRU5BQkxFKE1F
RElBX1NPVVJDRSkKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyOjpsb2FkKGNv
bnN0IFN0cmluZyYsIE1lZGlhU291cmNlUHJpdmF0ZUNsaWVudCopCi17Ci0gICAgLy8gUHJvcGVy
bHkgZmFpbCBzbyB0aGUgZ2xvYmFsIE1lZGlhUGxheWVyIHRyaWVzIHRvIGZhbGxiYWNrIHRvIHRo
ZSBuZXh0IE1lZGlhUGxheWVyUHJpdmF0ZS4KLSAgICBtX25ldHdvcmtTdGF0ZSA9IE1lZGlhUGxh
eWVyOjpGb3JtYXRFcnJvcjsKLSAgICBtX3BsYXllci0+bmV0d29ya1N0YXRlQ2hhbmdlZCgpOwot
fQotI2VuZGlmCi0KLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyOjpsb2FkKE1l
ZGlhU3RyZWFtUHJpdmF0ZSYgc3RyZWFtUHJpdmF0ZSkKLXsKLSAgICBpZiAoIWluaXRpYWxpemVH
U3RyZWFtZXIoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9zdHJlYW1Qcml2YXRlID0gJnN0
cmVhbVByaXZhdGU7Ci0gICAgaWYgKCFtX3N0cmVhbVByaXZhdGUtPmFjdGl2ZSgpKSB7Ci0gICAg
ICAgIGxvYWRpbmdGYWlsZWQoTWVkaWFQbGF5ZXI6Ok5ldHdvcmtFcnJvcik7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBpZiAoc3RyZWFtUHJpdmF0ZS5oYXNWaWRlbygpICYmICFtX3Zp
ZGVvU2luaykKLSAgICAgICAgY3JlYXRlVmlkZW9TaW5rKCk7Ci0KLSAgICBpZiAoc3RyZWFtUHJp
dmF0ZS5oYXNBdWRpbygpICYmICFtX2F1ZGlvU2luaykKLSAgICAgICAgY3JlYXRlR1NUQXVkaW9T
aW5rQmluKCk7Ci0KLSAgICBHU1RfREVCVUcoIkxvYWRpbmcgTWVkaWFTdHJlYW1Qcml2YXRlICVw
IHZpZGVvOiAlcywgYXVkaW86ICVzIiwgJnN0cmVhbVByaXZhdGUsIHN0cmVhbVByaXZhdGUuaGFz
VmlkZW8oKSA/ICJ5ZXMiOiJubyIsIHN0cmVhbVByaXZhdGUuaGFzQXVkaW8oKSA/ICJ5ZXMiOiJu
byIpOwotCi0gICAgbV9yZWFkeVN0YXRlID0gTWVkaWFQbGF5ZXI6OkhhdmVOb3RoaW5nOwotICAg
IG1fbmV0d29ya1N0YXRlID0gTWVkaWFQbGF5ZXI6OkxvYWRpbmc7Ci0gICAgbV9wbGF5ZXItPm5l
dHdvcmtTdGF0ZUNoYW5nZWQoKTsKLSAgICBtX3BsYXllci0+cmVhZHlTdGF0ZUNoYW5nZWQoKTsK
LQotICAgIGZvciAoYXV0byB0cmFjayA6IG1fc3RyZWFtUHJpdmF0ZS0+dHJhY2tzKCkpIHsKLSAg
ICAgICAgaWYgKCF0cmFjay0+ZW5hYmxlZCgpKSB7Ci0gICAgICAgICAgICBHU1RfREVCVUcoIlRy
YWNrICVzIGRpc2FibGVkIiwgdHJhY2stPmxhYmVsKCkuYXNjaWkoKS5kYXRhKCkpOwotICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICBHU1RfREVCVUcoIlByb2Nlc3Np
bmcgdHJhY2sgJXMiLCB0cmFjay0+bGFiZWwoKS5hc2NpaSgpLmRhdGEoKSk7Ci0KLSAgICAgICAg
Ym9vbCBvYnNlcnZlVHJhY2sgPSBmYWxzZTsKLQotICAgICAgICAvLyBUT0RPOiBTdXBwb3J0IGZv
ciBtdWx0aXBsZSB0cmFja3Mgb2YgdGhlIHNhbWUgdHlwZS4KLQotICAgICAgICBzd2l0Y2ggKHRy
YWNrLT50eXBlKCkpIHsKLSAgICAgICAgY2FzZSBSZWFsdGltZU1lZGlhU291cmNlOjpUeXBlOjpB
dWRpbzoKLSAgICAgICAgICAgIGlmICghbV9hdWRpb1RyYWNrKSB7Ci0gICAgICAgICAgICAgICAg
U3RyaW5nIHByZVNlbGVjdGVkRGV2aWNlID0gZ2V0ZW52KCJXRUJLSVRfQVVESU9fREVWSUNFIik7
Ci0gICAgICAgICAgICAgICAgaWYgKCFwcmVTZWxlY3RlZERldmljZSB8fCAocHJlU2VsZWN0ZWRE
ZXZpY2UgPT0gdHJhY2stPmxhYmVsKCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1fYXVkaW9U
cmFjayA9IHRyYWNrOwotICAgICAgICAgICAgICAgICAgICBhdXRvIGF1ZGlvVHJhY2sgPSBBdWRp
b1RyYWNrUHJpdmF0ZU1lZGlhU3RyZWFtOjpjcmVhdGUoKm1fYXVkaW9UcmFjay5nZXQoKSk7Ci0g
ICAgICAgICAgICAgICAgICAgIG1fcGxheWVyLT5hZGRBdWRpb1RyYWNrKCphdWRpb1RyYWNrKTsK
LSAgICAgICAgICAgICAgICAgICAgbV9hdWRpb1RyYWNrTWFwLmFkZCh0cmFjay0+aWQoKSwgYXVk
aW9UcmFjayk7Ci0gICAgICAgICAgICAgICAgICAgIG9ic2VydmVUcmFjayA9IHRydWU7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGNhc2UgUmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlwZTo6VmlkZW86Ci0gICAgICAgICAgICBpZiAo
IW1fdmlkZW9UcmFjaykgewotICAgICAgICAgICAgICAgIFN0cmluZyBwcmVTZWxlY3RlZERldmlj
ZSA9IGdldGVudigiV0VCS0lUX1ZJREVPX0RFVklDRSIpOwotICAgICAgICAgICAgICAgIGlmICgh
cHJlU2VsZWN0ZWREZXZpY2UgfHwgKHByZVNlbGVjdGVkRGV2aWNlID09IHRyYWNrLT5sYWJlbCgp
KSkgewotICAgICAgICAgICAgICAgICAgICBtX3ZpZGVvVHJhY2sgPSB0cmFjazsKLSAgICAgICAg
ICAgICAgICAgICAgYXV0byB2aWRlb1RyYWNrID0gVmlkZW9UcmFja1ByaXZhdGVNZWRpYVN0cmVh
bTo6Y3JlYXRlKCptX3ZpZGVvVHJhY2suZ2V0KCkpOwotICAgICAgICAgICAgICAgICAgICBtX3Bs
YXllci0+YWRkVmlkZW9UcmFjaygqdmlkZW9UcmFjayk7Ci0gICAgICAgICAgICAgICAgICAgIHZp
ZGVvVHJhY2stPnNldFNlbGVjdGVkKHRydWUpOwotICAgICAgICAgICAgICAgICAgICBtX3ZpZGVv
VHJhY2tNYXAuYWRkKHRyYWNrLT5pZCgpLCB2aWRlb1RyYWNrKTsKLSAgICAgICAgICAgICAgICAg
ICAgb2JzZXJ2ZVRyYWNrID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBSZWFsdGltZU1lZGlhU291cmNlOjpU
eXBlOjpOb25lOgotICAgICAgICAgICAgR1NUX1dBUk5JTkcoIkxvYWRpbmcgYSB0cmFjayB3aXRo
IE5vbmUgdHlwZSIpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG9ic2VydmVUcmFjaykKLSAg
ICAgICAgICAgIHRyYWNrLT5hZGRPYnNlcnZlcigqdGhpcyk7Ci0gICAgfQotCi0gICAgbV9yZWFk
eVN0YXRlID0gTWVkaWFQbGF5ZXI6OkhhdmVFbm91Z2hEYXRhOwotICAgIG1fcGxheWVyLT5yZWFk
eVN0YXRlQ2hhbmdlZCgpOwotfQotCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93
cjo6bG9hZGluZ0ZhaWxlZChNZWRpYVBsYXllcjo6TmV0d29ya1N0YXRlIGVycm9yKQotewotICAg
IGlmIChtX25ldHdvcmtTdGF0ZSAhPSBlcnJvcikgewotICAgICAgICBHU1RfV0FSTklORygiTG9h
ZGluZyBmYWlsZWQsIGVycm9yOiAlZCIsIGVycm9yKTsKLSAgICAgICAgbV9uZXR3b3JrU3RhdGUg
PSBlcnJvcjsKLSAgICAgICAgbV9wbGF5ZXItPm5ldHdvcmtTdGF0ZUNoYW5nZWQoKTsKLSAgICB9
Ci0gICAgaWYgKG1fcmVhZHlTdGF0ZSAhPSBNZWRpYVBsYXllcjo6SGF2ZU5vdGhpbmcpIHsKLSAg
ICAgICAgbV9yZWFkeVN0YXRlID0gTWVkaWFQbGF5ZXI6OkhhdmVOb3RoaW5nOwotICAgICAgICBt
X3BsYXllci0+cmVhZHlTdGF0ZUNoYW5nZWQoKTsKLSAgICB9Ci19Ci0KLWJvb2wgTWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyT3dyOjpkaWRMb2FkaW5nUHJvZ3Jlc3MoKSBjb25zdAotewotICAg
IC8vIEZJWE1FOiBJbXBsZW1lbnQgbG9hZGluZyBwcm9ncmVzcyBzdXBwb3J0LgotICAgIHJldHVy
biB0cnVlOwotfQotCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93cjo6ZGlzYWJs
ZU1lZGlhVHJhY2tzKCkKLXsKLSAgICBpZiAobV9hdWRpb1RyYWNrKSB7Ci0gICAgICAgIEdTVF9E
RUJVRygiU3RvcDogZGlzY29ubmVjdGluZyBhdWRpbyIpOwotICAgICAgICBnX29iamVjdF9zZXQo
bV9hdWRpb1JlbmRlcmVyLmdldCgpLCAiZGlzYWJsZWQiLCB0cnVlLCBudWxscHRyKTsKLSAgICAg
ICAgb3dyX21lZGlhX3JlbmRlcmVyX3NldF9zb3VyY2UoT1dSX01FRElBX1JFTkRFUkVSKG1fYXVk
aW9SZW5kZXJlci5nZXQoKSksIG51bGxwdHIpOwotICAgIH0KLQotICAgIGlmIChtX3ZpZGVvVHJh
Y2spIHsKLSAgICAgICAgR1NUX0RFQlVHKCJTdG9wOiBkaXNjb25uZWN0aW5nIHZpZGVvIik7Ci0g
ICAgICAgIGdfb2JqZWN0X3NldChtX3ZpZGVvUmVuZGVyZXIuZ2V0KCksICJkaXNhYmxlZCIsIHRy
dWUsIG51bGxwdHIpOwotICAgICAgICBvd3JfbWVkaWFfcmVuZGVyZXJfc2V0X3NvdXJjZShPV1Jf
TUVESUFfUkVOREVSRVIobV92aWRlb1JlbmRlcmVyLmdldCgpKSwgbnVsbHB0cik7Ci0gICAgfQot
fQotCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93cjo6c3RvcCgpCi17Ci0gICAg
ZGlzYWJsZU1lZGlhVHJhY2tzKCk7Ci0gICAgaWYgKG1fdmlkZW9UcmFjaykgewotICAgICAgICBh
dXRvIHZpZGVvVHJhY2sgPSBtX3ZpZGVvVHJhY2tNYXAuZ2V0KG1fdmlkZW9UcmFjay0+aWQoKSk7
Ci0gICAgICAgIGlmICh2aWRlb1RyYWNrKQotICAgICAgICAgICAgdmlkZW9UcmFjay0+c2V0U2Vs
ZWN0ZWQoZmFsc2UpOwotICAgIH0KLX0KLQotdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXJPd3I6OnJlZ2lzdGVyTWVkaWFFbmdpbmUoTWVkaWFFbmdpbmVSZWdpc3RyYXIgcmVnaXN0cmFy
KQotewotICAgIGlmIChpbml0aWFsaXplR1N0cmVhbWVyQW5kR1N0cmVhbWVyRGVidWdnaW5nKCkp
IHsKLSAgICAgICAgcmVnaXN0cmFyKFtdKE1lZGlhUGxheWVyKiBwbGF5ZXIpIHsKLSAgICAgICAg
ICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93
cj4ocGxheWVyKTsKLSAgICAgICAgfSwgZ2V0U3VwcG9ydGVkVHlwZXMsIHN1cHBvcnRzVHlwZSwg
bnVsbHB0ciwgbnVsbHB0ciwgbnVsbHB0ciwgbnVsbHB0cik7Ci0gICAgfQotfQotCi12b2lkIE1l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93cjo6Z2V0U3VwcG9ydGVkVHlwZXMoSGFzaFNldDxT
dHJpbmcsIEFTQ0lJQ2FzZUluc2Vuc2l0aXZlSGFzaD4mIHR5cGVzKQotewotICAgIC8vIE5vdCBz
dXBwb3J0ZWQgaW4gdGhpcyBtZWRpYSBwbGF5ZXIuCi0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVk
PEhhc2hTZXQ8U3RyaW5nLCBBU0NJSUNhc2VJbnNlbnNpdGl2ZUhhc2g+PiBjYWNoZTsKLSAgICB0
eXBlcyA9IGNhY2hlOwotfQotCi1NZWRpYVBsYXllcjo6U3VwcG9ydHNUeXBlIE1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lck93cjo6c3VwcG9ydHNUeXBlKGNvbnN0IE1lZGlhRW5naW5lU3VwcG9y
dFBhcmFtZXRlcnMmIHBhcmFtZXRlcnMpCi17Ci0gICAgaWYgKHBhcmFtZXRlcnMuaXNNZWRpYVN0
cmVhbSkKLSAgICAgICAgcmV0dXJuIE1lZGlhUGxheWVyOjpJc1N1cHBvcnRlZDsKLSAgICByZXR1
cm4gTWVkaWFQbGF5ZXI6OklzTm90U3VwcG9ydGVkOwotfQotCi1ib29sIE1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lck93cjo6aW5pdGlhbGl6ZUdTdHJlYW1lckFuZEdTdHJlYW1lckRlYnVnZ2lu
ZygpCi17Ci0gICAgaWYgKCFpbml0aWFsaXplR1N0cmVhbWVyKCkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBkZWJ1Z1JlZ2lzdGVyZWRGbGFnOwot
ICAgIHN0ZDo6Y2FsbF9vbmNlKGRlYnVnUmVnaXN0ZXJlZEZsYWcsIFtdIHsKLSAgICAgICAgR1NU
X0RFQlVHX0NBVEVHT1JZX0lOSVQod2Via2l0X29wZW53ZWJydGNfZGVidWcsICJ3ZWJraXRvd3Jw
bGF5ZXIiLCAwLCAiV2ViS2l0IE9wZW5XZWJSVEMgcGxheWVyIik7Ci0gICAgfSk7Ci0KLSAgICBy
ZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3I6OmNy
ZWF0ZUdTVEF1ZGlvU2lua0JpbigpCi17Ci0gICAgQVNTRVJUKCFtX2F1ZGlvU2luayk7Ci0gICAg
R1NUX0RFQlVHKCJDcmVhdGluZyBhdWRpbyBzaW5rIik7Ci0gICAgLy8gRklYTUU6IHZvbHVtZS9t
dXRlIHN1cHBvcnQ6IGh0dHBzOi8vd2Via2l0Lm9yZy9iLzE1MzgyOC4KLQotICAgIC8vIFByZS1y
b2xsIGFuIGF1dG9hdWRpb3Npbmsgc28gdGhhdCB0aGUgcGxhdGZvcm0gYXVkaW8gc2luayBpcyBj
cmVhdGVkIGFuZAotICAgIC8vIGNhbiBiZSByZXRyaWV2ZWQgZnJvbSB0aGUgYXV0b2F1ZGlvc2lu
ayBiaW4uCi0gICAgR1JlZlB0cjxHc3RFbGVtZW50PiBzaW5rID0gZ3N0X2VsZW1lbnRfZmFjdG9y
eV9tYWtlKCJhdXRvYXVkaW9zaW5rIiwgbnVsbHB0cik7Ci0gICAgR3N0Q2hpbGRQcm94eSogY2hp
bGRQcm94eSA9IEdTVF9DSElMRF9QUk9YWShzaW5rLmdldCgpKTsKLSAgICBnc3RfZWxlbWVudF9z
ZXRfc3RhdGUoc2luay5nZXQoKSwgR1NUX1NUQVRFX1JFQURZKTsKLSAgICBHUmVmUHRyPEdzdEVs
ZW1lbnQ+IHBsYXRmb3JtU2luayA9IGFkb3B0R1JlZihHU1RfRUxFTUVOVChnc3RfY2hpbGRfcHJv
eHlfZ2V0X2NoaWxkX2J5X2luZGV4KGNoaWxkUHJveHksIDApKSk7Ci0gICAgR3N0RWxlbWVudEZh
Y3RvcnkqIGZhY3RvcnkgPSBnc3RfZWxlbWVudF9nZXRfZmFjdG9yeShwbGF0Zm9ybVNpbmsuZ2V0
KCkpOwotCi0gICAgLy8gRGlzcG9zZSBub3cgdW4tbmVlZGVkIGF1dG9hdWRpb3NpbmsuCi0gICAg
Z3N0X2VsZW1lbnRfc2V0X3N0YXRlKHNpbmsuZ2V0KCksIEdTVF9TVEFURV9OVUxMKTsKLQotICAg
IC8vIENyZWF0ZSBhIGZyZXNoIG5ldyBhdWRpbyBzaW5rIGNvbXBhdGlibGUgd2l0aCB0aGUgcGxh
dGZvcm0uCi0gICAgbV9hdWRpb1NpbmsgPSBnc3RfZWxlbWVudF9mYWN0b3J5X2NyZWF0ZShmYWN0
b3J5LCBudWxscHRyKTsKLSAgICBtX2F1ZGlvUmVuZGVyZXIgPSBhZG9wdEdSZWYob3dyX2dzdF9h
dWRpb19yZW5kZXJlcl9uZXcobV9hdWRpb1NpbmsuZ2V0KCkpKTsKLX0KLQotdm9pZCBNZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXJPd3I6OnRyYWNrRW5kZWQoTWVkaWFTdHJlYW1UcmFja1ByaXZh
dGUmIHRyYWNrKQotewotICAgIEdTVF9ERUJVRygiVHJhY2sgZW5kZWQiKTsKLQotICAgIGlmICgh
bV9zdHJlYW1Qcml2YXRlIHx8ICFtX3N0cmVhbVByaXZhdGUtPmFjdGl2ZSgpKSB7Ci0gICAgICAg
IHN0b3AoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICgmdHJhY2sgPT0gbV9h
dWRpb1RyYWNrKQotICAgICAgICBnX29iamVjdF9zZXQobV9hdWRpb1JlbmRlcmVyLmdldCgpLCAi
ZGlzYWJsZWQiLCB0cnVlLCBudWxscHRyKTsKLSAgICBlbHNlIGlmICgmdHJhY2sgPT0gbV92aWRl
b1RyYWNrKSB7Ci0gICAgICAgIGdfb2JqZWN0X3NldChtX3ZpZGVvUmVuZGVyZXIuZ2V0KCksICJk
aXNhYmxlZCIsIHRydWUsIG51bGxwdHIpOwotICAgICAgICBhdXRvJiByZWFsVGltZU1lZGlhU291
cmNlID0gc3RhdGljX2Nhc3Q8UmVhbHRpbWVNZWRpYVNvdXJjZU93ciY+KG1fdmlkZW9UcmFjay0+
c291cmNlKCkpOwotICAgICAgICByZWFsVGltZU1lZGlhU291cmNlLnNldFdpZHRoKDApOwotICAg
ICAgICByZWFsVGltZU1lZGlhU291cmNlLnNldEhlaWdodCgwKTsKLSAgICAgICAgYXV0byB2aWRl
b1RyYWNrID0gbV92aWRlb1RyYWNrTWFwLmdldChtX3ZpZGVvVHJhY2stPmlkKCkpOwotICAgICAg
ICBpZiAodmlkZW9UcmFjaykKLSAgICAgICAgICAgIHZpZGVvVHJhY2stPnNldFNlbGVjdGVkKGZh
bHNlKTsKLSAgICB9Ci0KLSAgICBnYm9vbGVhbiBhdWRpb0Rpc2FibGVkOwotICAgIGdib29sZWFu
IHZpZGVvRGlzYWJsZWQ7Ci0gICAgZ19vYmplY3RfZ2V0KG1fYXVkaW9SZW5kZXJlci5nZXQoKSwg
ImRpc2FibGVkIiwgJmF1ZGlvRGlzYWJsZWQsIG51bGxwdHIpOwotICAgIGdfb2JqZWN0X2dldCht
X3ZpZGVvUmVuZGVyZXIuZ2V0KCksICJkaXNhYmxlZCIsICZ2aWRlb0Rpc2FibGVkLCBudWxscHRy
KTsKLSAgICBpZiAoYXVkaW9EaXNhYmxlZCAmJiB2aWRlb0Rpc2FibGVkKSB7Ci0gICAgICAgIG1f
ZW5kZWQgPSB0cnVlOwotICAgICAgICBtX3BsYXllci0+dGltZUNoYW5nZWQoKTsKLSAgICB9Ci19
Ci0KLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyOjp0cmFja011dGVkQ2hhbmdl
ZChNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZSYgdHJhY2spCi17Ci0gICAgR1NUX0RFQlVHKCJUcmFj
ayBtdXRlZCBzdGF0ZSBjaGFuZ2VkIik7Ci0KLSAgICBtYXliZUhhbmRsZUNoYW5nZU11dGVkU3Rh
dGUodHJhY2spOwotfQotCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93cjo6bWF5
YmVIYW5kbGVDaGFuZ2VNdXRlZFN0YXRlKE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlJiB0cmFjaykK
LXsKLSAgICBhdXRvJiByZWFsVGltZU1lZGlhU291cmNlID0gc3RhdGljX2Nhc3Q8UmVhbHRpbWVN
ZWRpYVNvdXJjZU93ciY+KHRyYWNrLnNvdXJjZSgpKTsKLSAgICBhdXRvIG1lZGlhU291cmNlID0g
T1dSX01FRElBX1NPVVJDRShyZWFsVGltZU1lZGlhU291cmNlLm1lZGlhU291cmNlKCkpOwotCi0g
ICAgR1NUX0RFQlVHKCIlcyB0cmFjayBub3cgJXMiLCB0cmFjay50eXBlKCkgPT0gUmVhbHRpbWVN
ZWRpYVNvdXJjZTo6VHlwZTo6QXVkaW8gPyAiYXVkaW8iOiJ2aWRlbyIsIHJlYWxUaW1lTWVkaWFT
b3VyY2UubXV0ZWQoKSA/ICJtdXRlZCI6InVuLW11dGVkIik7Ci0gICAgc3dpdGNoICh0cmFjay50
eXBlKCkpIHsKLSAgICBjYXNlIFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGU6OkF1ZGlvOgotICAg
ICAgICBpZiAoIXJlYWxUaW1lTWVkaWFTb3VyY2UubXV0ZWQoKSkgewotICAgICAgICAgICAgZ19v
YmplY3Rfc2V0KG1fYXVkaW9SZW5kZXJlci5nZXQoKSwgImRpc2FibGVkIiwgZmFsc2UsIG51bGxw
dHIpOwotICAgICAgICAgICAgb3dyX21lZGlhX3JlbmRlcmVyX3NldF9zb3VyY2UoT1dSX01FRElB
X1JFTkRFUkVSKG1fYXVkaW9SZW5kZXJlci5nZXQoKSksIG1lZGlhU291cmNlKTsKLSAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgIGdfb2JqZWN0X3NldChtX2F1ZGlvUmVuZGVyZXIuZ2V0KCks
ICJkaXNhYmxlZCIsIHRydWUsIG51bGxwdHIpOwotICAgICAgICAgICAgb3dyX21lZGlhX3JlbmRl
cmVyX3NldF9zb3VyY2UoT1dSX01FRElBX1JFTkRFUkVSKG1fYXVkaW9SZW5kZXJlci5nZXQoKSks
IG51bGxwdHIpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChtZWRpYVNvdXJjZSkKLSAgICAgICAg
ICAgIGdfb2JqZWN0X3NldChtZWRpYVNvdXJjZSwgIm11dGUiLCAhdHJhY2suZW5hYmxlZCgpLCBu
dWxscHRyKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBSZWFsdGltZU1lZGlhU291cmNlOjpU
eXBlOjpWaWRlbzoKLSAgICAgICAgaWYgKCFyZWFsVGltZU1lZGlhU291cmNlLm11dGVkKCkpIHsK
LSAgICAgICAgICAgIGdfb2JqZWN0X3NldChtX3ZpZGVvUmVuZGVyZXIuZ2V0KCksICJkaXNhYmxl
ZCIsIGZhbHNlLCBudWxscHRyKTsKLSAgICAgICAgICAgIG93cl9tZWRpYV9yZW5kZXJlcl9zZXRf
c291cmNlKE9XUl9NRURJQV9SRU5ERVJFUihtX3ZpZGVvUmVuZGVyZXIuZ2V0KCkpLCBtZWRpYVNv
dXJjZSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBnX29iamVjdF9zZXQobV92aWRl
b1JlbmRlcmVyLmdldCgpLCAiZGlzYWJsZWQiLCB0cnVlLCBudWxscHRyKTsKLSAgICAgICAgICAg
IG93cl9tZWRpYV9yZW5kZXJlcl9zZXRfc291cmNlKE9XUl9NRURJQV9SRU5ERVJFUihtX3ZpZGVv
UmVuZGVyZXIuZ2V0KCkpLCBudWxscHRyKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGU6Ok5vbmU6Ci0gICAgICAgIEdTVF9XQVJO
SU5HKCJUcnlpbmcgdG8gY2hhbmdlIG11dGUgc3RhdGUgb2YgYSB0cmFjayB3aXRoIE5vbmUgdHlw
ZSIpOwotICAgIH0KLX0KLQotdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3I6OnRy
YWNrU2V0dGluZ3NDaGFuZ2VkKE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlJikKLXsKLSAgICBHU1Rf
REVCVUcoIlRyYWNrIHNldHRpbmdzIGNoYW5nZWQiKTsKLX0KLQotdm9pZCBNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXJPd3I6OnRyYWNrRW5hYmxlZENoYW5nZWQoTWVkaWFTdHJlYW1UcmFja1By
aXZhdGUmIHRyYWNrKQotewotICAgIEdTVF9ERUJVRygiJXMgdHJhY2sgbm93ICVzIiwgdHJhY2su
dHlwZSgpID09IFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGU6OkF1ZGlvID8gImF1ZGlvIjoidmlk
ZW8iLCB0cmFjay5lbmFibGVkKCkgPyAiZW5hYmxlZCI6ImRpc2FibGVkIik7Ci0KLSAgICBzd2l0
Y2ggKHRyYWNrLnR5cGUoKSkgewotICAgIGNhc2UgUmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlwZTo6
QXVkaW86Ci0gICAgICAgIGdfb2JqZWN0X3NldChtX2F1ZGlvUmVuZGVyZXIuZ2V0KCksICJkaXNh
YmxlZCIsICF0cmFjay5lbmFibGVkKCksIG51bGxwdHIpOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGU6OlZpZGVvOgotICAgICAgICBnX29iamVjdF9z
ZXQobV92aWRlb1JlbmRlcmVyLmdldCgpLCAiZGlzYWJsZWQiLCAhdHJhY2suZW5hYmxlZCgpLCBu
dWxscHRyKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBSZWFsdGltZU1lZGlhU291cmNlOjpU
eXBlOjpOb25lOgotICAgICAgICBHU1RfV0FSTklORygiVHJ5aW5nIHRvIGNoYW5nZSBlbmFibGVk
IHN0YXRlIG9mIGEgdHJhY2sgd2l0aCBOb25lIHR5cGUiKTsKLSAgICB9Ci19Ci0KLUdzdEVsZW1l
bnQqIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93cjo6Y3JlYXRlVmlkZW9TaW5rKCkKLXsK
LSAgICBHc3RFbGVtZW50KiBzaW5rOwotI2lmIFVTRShHU1RSRUFNRVJfR0wpCi0gICAgLy8gTm8g
bmVlZCB0byBjcmVhdGUgZ2x1cGxvYWQgYW5kIGdsY29sb3Jjb252ZXJ0IGhlcmUgYmVjYXVzZSB0
aGV5IGFyZQotICAgIC8vIGFscmVhZHkgY3JlYXRlZCBieSB0aGUgdmlkZW8gcmVuZGVyZXIuCi0g
ICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHByb2JhYmx5IHJldHVybiBhIFJlZlB0ci4gU2VlIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjQ3MDkuCi0gICAgc2luayA9
IE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6OmNyZWF0ZUdMQXBwU2luaygpOwotICAg
IG1fdmlkZW9TaW5rID0gc2luazsKLSNlbHNlCi0gICAgaWYgKG1fc3RyZWFtUHJpdmF0ZS0+Z2V0
VmlkZW9SZW5kZXJlcigpKSB7Ci0gICAgICAgIG1fdmlkZW9SZW5kZXJlciA9IG1fc3RyZWFtUHJp
dmF0ZS0+Z2V0VmlkZW9SZW5kZXJlcigpOwotICAgICAgICBtX3ZpZGVvU2luayA9IG1fc3RyZWFt
UHJpdmF0ZS0+Z2V0VmlkZW9TaW5rRWxlbWVudCgpOwotICAgICAgICBnX3NpZ25hbF9jb25uZWN0
X3N3YXBwZWQobV92aWRlb1NpbmsuZ2V0KCksICJyZXBhaW50LXJlcXVlc3RlZCIsIEdfQ0FMTEJB
Q0soTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6cmVwYWludENhbGxiYWNrKSwgdGhp
cyk7Ci0gICAgICAgIGdfb2JqZWN0X2dldChtX3ZpZGVvUmVuZGVyZXIuZ2V0KCksICJzaW5rIiwg
JnNpbmssIG51bGxwdHIpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIEdzdEVsZW1lbnQqIGdsZG93
bmxvYWQgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UoImdsZG93bmxvYWQiLCBudWxscHRyKTsK
LSAgICAgICAgR3N0RWxlbWVudCogdmlkZW9jb252ZXJ0ID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9t
YWtlKCJ2aWRlb2NvbnZlcnQiLCBudWxscHRyKTsKLSAgICAgICAgR3N0RWxlbWVudCogd2Via2l0
U2luayA9IE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6OmNyZWF0ZVZpZGVvU2luaygp
OwotICAgICAgICBzaW5rID0gZ3N0X2Jpbl9uZXcobnVsbHB0cik7Ci0gICAgICAgIGdzdF9iaW5f
YWRkX21hbnkoR1NUX0JJTihzaW5rKSwgZ2xkb3dubG9hZCwgdmlkZW9jb252ZXJ0LCB3ZWJraXRT
aW5rLCBudWxscHRyKTsKLSAgICAgICAgZ3N0X2VsZW1lbnRfbGlua19tYW55KGdsZG93bmxvYWQs
IHZpZGVvY29udmVydCwgd2Via2l0U2luaywgbnVsbHB0cik7Ci0gICAgICAgIEdSZWZQdHI8R3N0
UGFkPiBwYWQgPSBhZG9wdEdSZWYoZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQoZ2xkb3dubG9h
ZCwgInNpbmsiKSk7Ci0gICAgICAgIGdzdF9lbGVtZW50X2FkZF9wYWQoc2luaywgZ3N0X2dob3N0
X3BhZF9uZXcoInNpbmsiLCBwYWQuZ2V0KCkpKTsKLSAgICB9Ci0jZW5kaWYKLSAgICBpZiAoIW1f
dmlkZW9SZW5kZXJlcikgewotICAgICAgICBtX3ZpZGVvUmVuZGVyZXIgPSBhZG9wdEdSZWYob3dy
X2dzdF92aWRlb19yZW5kZXJlcl9uZXcoc2luaykpOwotI2lmIFVTRShHU1RSRUFNRVJfR0wpCi0g
ICAgICAgIG93cl92aWRlb19yZW5kZXJlcl9zZXRfcmVxdWVzdF9jb250ZXh0X2NhbGxiYWNrKE9X
Ul9WSURFT19SRU5ERVJFUihtX3ZpZGVvUmVuZGVyZXIuZ2V0KCkpLCAoT3dyVmlkZW9SZW5kZXJl
clJlcXVlc3RDb250ZXh0Q2FsbGJhY2spIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6
OnJlcXVlc3RHTENvbnRleHQsIHRoaXMsIG51bGxwdHIpOwotI2VuZGlmCi0gICAgICAgIG1fc3Ry
ZWFtUHJpdmF0ZS0+c2V0VmlkZW9SZW5kZXJlcihtX3ZpZGVvUmVuZGVyZXIuZ2V0KCksIHZpZGVv
U2luaygpKTsKLSAgICB9Ci0gICAgcmV0dXJuIHNpbms7Ci19Ci0KLXZvaWQgTWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyT3dyOjpzZXRTaXplKGNvbnN0IEludFNpemUmIHNpemUpCi17Ci0gICAg
aWYgKHNpemUgPT0gbV9zaXplKQotICAgICAgICByZXR1cm47Ci0KLSAgICBNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXJCYXNlOjpzZXRTaXplKHNpemUpOwotICAgIGlmIChtX3ZpZGVvUmVuZGVy
ZXIpCi0gICAgICAgIGdfb2JqZWN0X3NldChtX3ZpZGVvUmVuZGVyZXIuZ2V0KCksICJ3aWR0aCIs
IHNpemUud2lkdGgoKSwgImhlaWdodCIsIHNpemUuaGVpZ2h0KCksIG51bGxwdHIpOwotCi0gICAg
aWYgKCFtX3ZpZGVvVHJhY2spCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8mIHJlYWxUaW1l
TWVkaWFTb3VyY2UgPSBzdGF0aWNfY2FzdDxSZWFsdGltZU1lZGlhU291cmNlT3dyJj4obV92aWRl
b1RyYWNrLT5zb3VyY2UoKSk7Ci0gICAgcmVhbFRpbWVNZWRpYVNvdXJjZS5zZXRXaWR0aChzaXpl
LndpZHRoKCkpOwotICAgIHJlYWxUaW1lTWVkaWFTb3VyY2Uuc2V0SGVpZ2h0KHNpemUuaGVpZ2h0
KCkpOwotfQotCi1GbG9hdFNpemUgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyOjpuYXR1
cmFsU2l6ZSgpIGNvbnN0Ci17Ci0gICAgYXV0byBzaXplID0gTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyQmFzZTo6bmF0dXJhbFNpemUoKTsKLQotICAgIC8vIEluIGNhc2Ugd2UgYXJlIG5vdCBw
bGF5aW5nIHRoZSB2aWRlbyB3ZSByZXR1cm4gdGhlIHNpemUgd2Ugc2V0IHRvIHRoZSBtZWRpYSBz
b3VyY2UuCi0gICAgaWYgKG1fdmlkZW9UcmFjayAmJiBzaXplLmlzWmVybygpKSB7Ci0gICAgICAg
IGF1dG8mIHJlYWxUaW1lTWVkaWFTb3VyY2UgPSBzdGF0aWNfY2FzdDxSZWFsdGltZU1lZGlhU291
cmNlT3dyJj4obV92aWRlb1RyYWNrLT5zb3VyY2UoKSk7Ci0gICAgICAgIHJldHVybiByZWFsVGlt
ZU1lZGlhU291cmNlLnNpemUoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gc2l6ZTsKLX0KLQotfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKFZJREVPKSAmJiBFTkFCTEUo
TUVESUFfU1RSRUFNKSAmJiBVU0UoR1NUUkVBTUVSKSAmJiBVU0UoT1BFTldFQlJUQykKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXJPd3IuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3IuaApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMzM0NjMwZTQ1YzM0ODFiYTdkNDJmNTY2MzdlMGRhYTA1MTU0
YmQyZi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyT3dyLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMjggKzAsMCBAQAotLyoKLSAqICBD
b3B5cmlnaHQgKEMpIDIwMTUgSWdhbGlhIFMuTC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqICBD
b3B5cmlnaHQgKEMpIDIwMTUgTWV0cm9sb2dpY2FsLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCi0gKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3Nl
ciBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0g
KiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiAg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9u
LCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0gKi8KLQotI2lmbmRlZiBNZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXJPd3JfaAotI2RlZmluZSBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3JfaAot
Ci0jaWYgRU5BQkxFKFZJREVPKSAmJiBFTkFCTEUoTUVESUFfU1RSRUFNKSAmJiBVU0UoR1NUUkVB
TUVSKSAmJiBVU0UoT1BFTldFQlJUQykKLQotI2luY2x1ZGUgIkF1ZGlvVHJhY2tQcml2YXRlTWVk
aWFTdHJlYW0uaCIKLSNpbmNsdWRlICJNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlLmgi
Ci0jaW5jbHVkZSAiTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUuaCIKLSNpbmNsdWRlICJWaWRlb1Ry
YWNrUHJpdmF0ZU1lZGlhU3RyZWFtLmgiCi0KLXR5cGVkZWYgc3RydWN0IF9Pd3JHc3RWaWRlb1Jl
bmRlcmVyIE93ckdzdFZpZGVvUmVuZGVyZXI7Ci10eXBlZGVmIHN0cnVjdCBfT3dyR3N0QXVkaW9S
ZW5kZXJlciBPd3JHc3RBdWRpb1JlbmRlcmVyOwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNs
YXNzIE1lZGlhU3RyZWFtUHJpdmF0ZTsKLWNsYXNzIFJlYWx0aW1lTWVkaWFTb3VyY2VPd3I7Ci0K
LWNsYXNzIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93ciA6IHB1YmxpYyBNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXJCYXNlLCBwcml2YXRlIE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlOjpP
YnNlcnZlciB7Ci1wdWJsaWM6Ci0gICAgZXhwbGljaXQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyT3dyKE1lZGlhUGxheWVyKik7Ci0gICAgfk1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93
cigpOwotCi0gICAgc3RhdGljIHZvaWQgcmVnaXN0ZXJNZWRpYUVuZ2luZShNZWRpYUVuZ2luZVJl
Z2lzdHJhcik7Ci0KLSAgICB2b2lkIHNldFNpemUoY29uc3QgSW50U2l6ZSYpIGZpbmFsOwotCi0g
ICAgRmxvYXRTaXplIG5hdHVyYWxTaXplKCkgY29uc3QgZmluYWw7Ci0KLXByaXZhdGU6Ci0gICAg
R3N0RWxlbWVudCogY3JlYXRlVmlkZW9TaW5rKCkgZmluYWw7Ci0gICAgR3N0RWxlbWVudCogYXVk
aW9TaW5rKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9hdWRpb1NpbmsuZ2V0KCk7IH0KLSAgICBi
b29sIGlzTGl2ZVN0cmVhbSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHRydWU7IH0KLQotICAgIFN0
cmluZyBlbmdpbmVEZXNjcmlwdGlvbigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJPcGVuV2ViUlRD
IjsgfQotCi0gICAgdm9pZCBsb2FkKGNvbnN0IFN0cmluZyYpIGZpbmFsOwotI2lmIEVOQUJMRShN
RURJQV9TT1VSQ0UpCi0gICAgdm9pZCBsb2FkKGNvbnN0IFN0cmluZyYsIE1lZGlhU291cmNlUHJp
dmF0ZUNsaWVudCopIGZpbmFsOwotI2VuZGlmCi0gICAgdm9pZCBsb2FkKE1lZGlhU3RyZWFtUHJp
dmF0ZSYpIGZpbmFsOwotICAgIHZvaWQgY2FuY2VsTG9hZCgpIGZpbmFsIHsgfQotCi0gICAgdm9p
ZCBwcmVwYXJlVG9QbGF5KCkgZmluYWwgeyB9Ci0gICAgdm9pZCBwbGF5KCkgZmluYWw7Ci0gICAg
dm9pZCBwYXVzZSgpIGZpbmFsOwotCi0gICAgYm9vbCBoYXNWaWRlbygpIGNvbnN0IGZpbmFsOwot
ICAgIGJvb2wgaGFzQXVkaW8oKSBjb25zdCBmaW5hbDsKLQotICAgIGZsb2F0IGR1cmF0aW9uKCkg
Y29uc3QgZmluYWwgeyByZXR1cm4gMDsgfQotCi0gICAgZmxvYXQgY3VycmVudFRpbWUoKSBjb25z
dCBmaW5hbDsKLSAgICB2b2lkIHNlZWsoZmxvYXQpIGZpbmFsIHsgfQotICAgIGJvb2wgc2Vla2lu
ZygpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9Ci0KLSAgICB2b2lkIHNldFJhdGUoZmxv
YXQpIGZpbmFsIHsgfQotICAgIHZvaWQgc2V0UHJlc2VydmVzUGl0Y2goYm9vbCkgZmluYWwgeyB9
Ci0gICAgYm9vbCBwYXVzZWQoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3BhdXNlZDsgfQotCi0g
ICAgdm9pZCBzZXRWb2x1bWUoZmxvYXQpIGZpbmFsOwotICAgIHZvaWQgc2V0TXV0ZWQoYm9vbCkg
ZmluYWw7Ci0KLSAgICBib29sIGhhc0Nsb3NlZENhcHRpb25zKCkgY29uc3QgZmluYWwgeyByZXR1
cm4gZmFsc2U7IH0KLSAgICB2b2lkIHNldENsb3NlZENhcHRpb25zVmlzaWJsZShib29sKSBmaW5h
bCB7IH07Ci0KLSAgICBmbG9hdCBtYXhUaW1lU2Vla2FibGUoKSBjb25zdCBmaW5hbCB7IHJldHVy
biAwOyB9Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFBsYXRmb3JtVGltZVJhbmdlcz4gYnVmZmVyZWQo
KSBjb25zdCBmaW5hbCB7IHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPFBsYXRmb3JtVGltZVJhbmdl
cz4oKTsgfQotICAgIGJvb2wgZGlkTG9hZGluZ1Byb2dyZXNzKCkgY29uc3QgZmluYWw7Ci0KLSAg
ICB1bnNpZ25lZCBsb25nIGxvbmcgdG90YWxCeXRlcygpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIDA7
IH0KLQotICAgIGJvb2wgY2FuTG9hZFBvc3RlcigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIGZhbHNl
OyB9Ci0gICAgdm9pZCBzZXRQb3N0ZXIoY29uc3QgU3RyaW5nJikgZmluYWwgeyB9Ci0gICAgYm9v
bCBlbmRlZCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fZW5kZWQ7IH0KLQotICAgIC8vIE1lZGlh
U3RyZWFtVHJhY2tQcml2YXRlOjpPYnNlcnZlciBpbXBsZW1lbnRhdGlvbi4KLSAgICB2b2lkIHRy
YWNrRW5kZWQoTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUmKSBmaW5hbDsKLSAgICB2b2lkIHRyYWNr
TXV0ZWRDaGFuZ2VkKE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlJikgZmluYWw7Ci0gICAgdm9pZCB0
cmFja1NldHRpbmdzQ2hhbmdlZChNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZSYpIGZpbmFsOwotICAg
IHZvaWQgdHJhY2tFbmFibGVkQ2hhbmdlZChNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZSYpIGZpbmFs
OwotCi0gICAgc3RhdGljIHZvaWQgZ2V0U3VwcG9ydGVkVHlwZXMoSGFzaFNldDxTdHJpbmcsIEFT
Q0lJQ2FzZUluc2Vuc2l0aXZlSGFzaD4mKTsKLSAgICBzdGF0aWMgTWVkaWFQbGF5ZXI6OlN1cHBv
cnRzVHlwZSBzdXBwb3J0c1R5cGUoY29uc3QgTWVkaWFFbmdpbmVTdXBwb3J0UGFyYW1ldGVycyYp
OwotICAgIHN0YXRpYyBib29sIGluaXRpYWxpemVHU3RyZWFtZXJBbmRHU3RyZWFtZXJEZWJ1Z2dp
bmcoKTsKLSAgICB2b2lkIGNyZWF0ZUdTVEF1ZGlvU2lua0JpbigpOwotICAgIHZvaWQgbG9hZGlu
Z0ZhaWxlZChNZWRpYVBsYXllcjo6TmV0d29ya1N0YXRlIGVycm9yKTsKLSAgICB2b2lkIHN0b3Ao
KTsKLSAgICB2b2lkIG1heWJlSGFuZGxlQ2hhbmdlTXV0ZWRTdGF0ZShNZWRpYVN0cmVhbVRyYWNr
UHJpdmF0ZSYpOwotICAgIHZvaWQgZGlzYWJsZU1lZGlhVHJhY2tzKCk7Ci0KLSAgICBib29sIG1f
cGF1c2VkIHsgdHJ1ZSB9OwotICAgIGJvb2wgbV9lbmRlZCB7IGZhbHNlIH07Ci0gICAgUmVmUHRy
PE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlPiBtX3ZpZGVvVHJhY2s7Ci0gICAgUmVmUHRyPE1lZGlh
U3RyZWFtVHJhY2tQcml2YXRlPiBtX2F1ZGlvVHJhY2s7Ci0gICAgR1JlZlB0cjxHc3RFbGVtZW50
PiBtX2F1ZGlvU2luazsKLSAgICBSZWZQdHI8TWVkaWFTdHJlYW1Qcml2YXRlPiBtX3N0cmVhbVBy
aXZhdGU7Ci0gICAgR1JlZlB0cjxPd3JHc3RWaWRlb1JlbmRlcmVyPiBtX3ZpZGVvUmVuZGVyZXI7
Ci0gICAgR1JlZlB0cjxPd3JHc3RBdWRpb1JlbmRlcmVyPiBtX2F1ZGlvUmVuZGVyZXI7Ci0KLSAg
ICBIYXNoTWFwPFN0cmluZywgUmVmUHRyPEF1ZGlvVHJhY2tQcml2YXRlTWVkaWFTdHJlYW0+PiBt
X2F1ZGlvVHJhY2tNYXA7Ci0gICAgSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxWaWRlb1RyYWNrUHJp
dmF0ZU1lZGlhU3RyZWFtPj4gbV92aWRlb1RyYWNrTWFwOwotfTsKLQotfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKFZJREVPKSAmJiBFTkFCTEUoTUVESUFfU1RSRUFN
KSAmJiBVU0UoR1NUUkVBTUVSKSAmJiBVU0UoT1BFTldFQlJUQykKLQotI2VuZGlmIC8vIE1lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lck93cl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYUVuZHBvaW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21lZGlhc3RyZWFtL01lZGlhRW5kcG9pbnQuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCBkMTM3NWZkNGMwNDEzOGRmZTE2NWMzNTRiMjFlYTliNTYyNWZhZmJjLi4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhRW5kcG9pbnQuY3BwCisrKyAvZGV2L251bGwKQEAg
LTEsODYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBFcmljc3NvbiBBQi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqCi0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgotICogICAgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZQotICogICAgZGlzdHJpYnV0aW9uLgotICogMy4gTmVpdGhlciB0aGUg
bmFtZSBvZiBFcmljc3NvbiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAg
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20g
dGhpcwotICogICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgot
ICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoV0VC
X1JUQykKLSNpbmNsdWRlICJNZWRpYUVuZHBvaW50LmgiCi0KLSNpbmNsdWRlICJNZWRpYVBheWxv
YWQuaCIKLSNpbmNsdWRlICJSVENEYXRhQ2hhbm5lbEhhbmRsZXIuaCIKLSNpbmNsdWRlICJSZWFs
dGltZU1lZGlhU291cmNlLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgRW1wdHlS
ZWFsdGltZU1lZGlhU291cmNlIGZpbmFsIDogcHVibGljIFJlYWx0aW1lTWVkaWFTb3VyY2Ugewot
cHVibGljOgotICAgIHN0YXRpYyBSZWY8RW1wdHlSZWFsdGltZU1lZGlhU291cmNlPiBjcmVhdGUo
KSB7IHJldHVybiBhZG9wdFJlZigqbmV3IEVtcHR5UmVhbHRpbWVNZWRpYVNvdXJjZSgpKTsgfQot
Ci1wcml2YXRlOgotICAgIEVtcHR5UmVhbHRpbWVNZWRpYVNvdXJjZSgpIDogUmVhbHRpbWVNZWRp
YVNvdXJjZShlbXB0eVN0cmluZygpLCBUeXBlOjpOb25lLCBlbXB0eVN0cmluZygpKSB7IH0KLQot
ICAgIGNvbnN0IFJlYWx0aW1lTWVkaWFTb3VyY2VDYXBhYmlsaXRpZXMmIGNhcGFiaWxpdGllcygp
IGNvbnN0IGZpbmFsIHsgcmV0dXJuIFJlYWx0aW1lTWVkaWFTb3VyY2VDYXBhYmlsaXRpZXM6OmVt
cHR5Q2FwYWJpbGl0aWVzKCk7IH0KLSAgICBjb25zdCBSZWFsdGltZU1lZGlhU291cmNlU2V0dGlu
Z3MmIHNldHRpbmdzKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9zb3VyY2VTZXR0aW5nczsgfQot
Ci0gICAgUmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzIG1fc291cmNlU2V0dGluZ3M7Ci19Owot
Ci1jbGFzcyBFbXB0eU1lZGlhRW5kcG9pbnQgZmluYWwgOiBwdWJsaWMgTWVkaWFFbmRwb2ludCB7
Ci1wcml2YXRlOgotICAgIHZvaWQgc2V0Q29uZmlndXJhdGlvbihNZWRpYUVuZHBvaW50Q29uZmln
dXJhdGlvbiYmKSBmaW5hbCB7IH0KLQotICAgIHZvaWQgZ2VuZXJhdGVEdGxzSW5mbygpIGZpbmFs
IHsgfQotICAgIE1lZGlhUGF5bG9hZFZlY3RvciBnZXREZWZhdWx0QXVkaW9QYXlsb2FkcygpIGZp
bmFsIHsgcmV0dXJuIE1lZGlhUGF5bG9hZFZlY3RvcigpOyB9Ci0gICAgTWVkaWFQYXlsb2FkVmVj
dG9yIGdldERlZmF1bHRWaWRlb1BheWxvYWRzKCkgZmluYWwgeyByZXR1cm4gTWVkaWFQYXlsb2Fk
VmVjdG9yKCk7IH0KLSAgICBNZWRpYVBheWxvYWRWZWN0b3IgZmlsdGVyUGF5bG9hZHMoY29uc3Qg
TWVkaWFQYXlsb2FkVmVjdG9yJiwgY29uc3QgTWVkaWFQYXlsb2FkVmVjdG9yJikgZmluYWwgeyBy
ZXR1cm4gTWVkaWFQYXlsb2FkVmVjdG9yKCk7IH0KLQotICAgIFVwZGF0ZVJlc3VsdCB1cGRhdGVS
ZWNlaXZlQ29uZmlndXJhdGlvbihNZWRpYUVuZHBvaW50U2Vzc2lvbkNvbmZpZ3VyYXRpb24qLCBi
b29sKSBmaW5hbCB7IHJldHVybiBVcGRhdGVSZXN1bHQ6OkZhaWxlZDsgfQotICAgIFVwZGF0ZVJl
c3VsdCB1cGRhdGVTZW5kQ29uZmlndXJhdGlvbihNZWRpYUVuZHBvaW50U2Vzc2lvbkNvbmZpZ3Vy
YXRpb24qLCBjb25zdCBSZWFsdGltZU1lZGlhU291cmNlTWFwJiwgYm9vbCkgZmluYWwgeyByZXR1
cm4gVXBkYXRlUmVzdWx0OjpGYWlsZWQ7IH0KLQotICAgIHZvaWQgYWRkUmVtb3RlQ2FuZGlkYXRl
KGNvbnN0IEljZUNhbmRpZGF0ZSYsIGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYsIGNvbnN0
IFN0cmluZyYpIGZpbmFsIHsgfQotCi0gICAgUmVmPFJlYWx0aW1lTWVkaWFTb3VyY2U+IGNyZWF0
ZU11dGVkUmVtb3RlU291cmNlKGNvbnN0IFN0cmluZyYsIFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5
cGUpIGZpbmFsIHsgcmV0dXJuIEVtcHR5UmVhbHRpbWVNZWRpYVNvdXJjZTo6Y3JlYXRlKCk7IH0K
LSAgICB2b2lkIHJlcGxhY2VTZW5kU291cmNlKFJlYWx0aW1lTWVkaWFTb3VyY2UmLCBjb25zdCBT
dHJpbmcmKSBmaW5hbCB7IH0KLSAgICB2b2lkIHJlcGxhY2VNdXRlZFJlbW90ZVNvdXJjZU1pZChj
b25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmKSBmaW5hbCB7IH07Ci0KLSAgICBzdGQ6OnVuaXF1
ZV9wdHI8UlRDRGF0YUNoYW5uZWxIYW5kbGVyPiBjcmVhdGVEYXRhQ2hhbm5lbEhhbmRsZXIoY29u
c3QgU3RyaW5nJiwgY29uc3QgUlRDRGF0YUNoYW5uZWxJbml0JikgZmluYWwgeyByZXR1cm4gbnVs
bHB0cjsgfQotICAgIHZvaWQgc3RvcCgpIGZpbmFsIHsgfQotfTsKLQotc3RhdGljIHN0ZDo6dW5p
cXVlX3B0cjxNZWRpYUVuZHBvaW50PiBjcmVhdGVNZWRpYUVuZHBvaW50KE1lZGlhRW5kcG9pbnRD
bGllbnQmKQotewotICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPEVtcHR5TWVkaWFFbmRwb2lu
dD4oKTsKLX0KLQotQ3JlYXRlTWVkaWFFbmRwb2ludCBNZWRpYUVuZHBvaW50OjpjcmVhdGUgPSBj
cmVhdGVNZWRpYUVuZHBvaW50OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAv
LyBFTkFCTEUoV0VCX1JUQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21l
ZGlhc3RyZWFtL01lZGlhRW5kcG9pbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlh
c3RyZWFtL01lZGlhRW5kcG9pbnQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTFi
NTFkNGUwOGEzZGQzZWZiMDlhMDExZTMyOTc0ZDI4Yjc5ZGY3OC4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRp
YXN0cmVhbS9NZWRpYUVuZHBvaW50LmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMDggKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBFcmljc3NvbiBBQi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqICAgIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK
LSAqICAgIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgRXJpY3Nzb24g
bm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0gKiAgICBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSAqICAgIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0g
KiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotI3ByYWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUoV0VCX1JUQykKLQotI2luY2x1ZGUgIk1lZGlh
RW5kcG9pbnRDb25maWd1cmF0aW9uLmgiCi0jaW5jbHVkZSAiUGVlckNvbm5lY3Rpb25CYWNrZW5k
LmgiCi0jaW5jbHVkZSAiUlRDSWNlVHJhbnNwb3J0U3RhdGUuaCIKLSNpbmNsdWRlICJSZWFsdGlt
ZU1lZGlhU291cmNlLmgiCi0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KLSNpbmNsdWRlIDx3dGYv
dGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBNZWRpYUVu
ZHBvaW50OwotY2xhc3MgTWVkaWFFbmRwb2ludENsaWVudDsKLWNsYXNzIE1lZGlhRW5kcG9pbnRT
ZXNzaW9uQ29uZmlndXJhdGlvbjsKLWNsYXNzIE1lZGlhU3RyZWFtVHJhY2s7Ci1jbGFzcyBSVENE
YXRhQ2hhbm5lbEhhbmRsZXI7Ci1jbGFzcyBSZWFsdGltZU1lZGlhU291cmNlOwotCi1zdHJ1Y3Qg
SWNlQ2FuZGlkYXRlOwotc3RydWN0IE1lZGlhUGF5bG9hZDsKLXN0cnVjdCBSVENEYXRhQ2hhbm5l
bEluaXQ7Ci0KLXR5cGVkZWYgc3RkOjp1bmlxdWVfcHRyPE1lZGlhRW5kcG9pbnQ+ICgqQ3JlYXRl
TWVkaWFFbmRwb2ludCkoTWVkaWFFbmRwb2ludENsaWVudCYpOwotdHlwZWRlZiBWZWN0b3I8TWVk
aWFQYXlsb2FkPiBNZWRpYVBheWxvYWRWZWN0b3I7Ci10eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBS
ZWFsdGltZU1lZGlhU291cmNlKj4gUmVhbHRpbWVNZWRpYVNvdXJjZU1hcDsKLQotY2xhc3MgTWVk
aWFFbmRwb2ludCB7Ci1wdWJsaWM6Ci0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIENyZWF0ZU1l
ZGlhRW5kcG9pbnQgY3JlYXRlOwotICAgIHZpcnR1YWwgfk1lZGlhRW5kcG9pbnQoKSB7IH0KLQot
ICAgIGVudW0gY2xhc3MgVXBkYXRlUmVzdWx0IHsKLSAgICAgICAgU3VjY2VzcywKLSAgICAgICAg
U3VjY2Vzc1dpdGhJY2VSZXN0YXJ0LAotICAgICAgICBGYWlsZWQKLSAgICB9OwotCi0gICAgdmly
dHVhbCB2b2lkIHNldENvbmZpZ3VyYXRpb24oTWVkaWFFbmRwb2ludENvbmZpZ3VyYXRpb24mJikg
PSAwOwotCi0gICAgdmlydHVhbCB2b2lkIGdlbmVyYXRlRHRsc0luZm8oKSA9IDA7Ci0gICAgdmly
dHVhbCBNZWRpYVBheWxvYWRWZWN0b3IgZ2V0RGVmYXVsdEF1ZGlvUGF5bG9hZHMoKSA9IDA7Ci0g
ICAgdmlydHVhbCBNZWRpYVBheWxvYWRWZWN0b3IgZ2V0RGVmYXVsdFZpZGVvUGF5bG9hZHMoKSA9
IDA7Ci0gICAgdmlydHVhbCBNZWRpYVBheWxvYWRWZWN0b3IgZmlsdGVyUGF5bG9hZHMoY29uc3Qg
TWVkaWFQYXlsb2FkVmVjdG9yJiByZW1vdGVQYXlsb2FkcywgY29uc3QgTWVkaWFQYXlsb2FkVmVj
dG9yJiBkZWZhdWx0UGF5bG9hZHMpID0gMDsKLQotICAgIHZpcnR1YWwgVXBkYXRlUmVzdWx0IHVw
ZGF0ZVJlY2VpdmVDb25maWd1cmF0aW9uKE1lZGlhRW5kcG9pbnRTZXNzaW9uQ29uZmlndXJhdGlv
biosIGJvb2wgaXNJbml0aWF0b3IpID0gMDsKLSAgICB2aXJ0dWFsIFVwZGF0ZVJlc3VsdCB1cGRh
dGVTZW5kQ29uZmlndXJhdGlvbihNZWRpYUVuZHBvaW50U2Vzc2lvbkNvbmZpZ3VyYXRpb24qLCBj
b25zdCBSZWFsdGltZU1lZGlhU291cmNlTWFwJiwgYm9vbCBpc0luaXRpYXRvcikgPSAwOwotCi0g
ICAgdmlydHVhbCB2b2lkIGFkZFJlbW90ZUNhbmRpZGF0ZShjb25zdCBJY2VDYW5kaWRhdGUmLCBj
b25zdCBTdHJpbmcmIG1pZCwgY29uc3QgU3RyaW5nJiB1ZnJhZywgY29uc3QgU3RyaW5nJiBwYXNz
d29yZCkgPSAwOwotCi0gICAgdmlydHVhbCBSZWY8UmVhbHRpbWVNZWRpYVNvdXJjZT4gY3JlYXRl
TXV0ZWRSZW1vdGVTb3VyY2UoY29uc3QgU3RyaW5nJiBtaWQsIFJlYWx0aW1lTWVkaWFTb3VyY2U6
OlR5cGUpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVwbGFjZVNlbmRTb3VyY2UoUmVhbHRpbWVN
ZWRpYVNvdXJjZSYsIGNvbnN0IFN0cmluZyYgbWlkKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJl
cGxhY2VNdXRlZFJlbW90ZVNvdXJjZU1pZChjb25zdCBTdHJpbmcmIG9sZE1pZCwgY29uc3QgU3Ry
aW5nJiBuZXdNaWQpID0gMDsKLQotICAgIHZpcnR1YWwgc3RkOjp1bmlxdWVfcHRyPFJUQ0RhdGFD
aGFubmVsSGFuZGxlcj4gY3JlYXRlRGF0YUNoYW5uZWxIYW5kbGVyKGNvbnN0IFN0cmluZyYsIGNv
bnN0IFJUQ0RhdGFDaGFubmVsSW5pdCYpID0gMDsKLQotICAgIHZpcnR1YWwgdm9pZCBzdG9wKCkg
PSAwOwotCi0gICAgdmlydHVhbCB2b2lkIGVtdWxhdGVQbGF0Zm9ybUV2ZW50KGNvbnN0IFN0cmlu
ZyYpIHsgfTsKLQotICAgIHZpcnR1YWwgdm9pZCBnZXRTdGF0cyhNZWRpYVN0cmVhbVRyYWNrKiwg
UGVlckNvbm5lY3Rpb246OlN0YXRzUHJvbWlzZSYmIHByb21pc2UpIHsgcHJvbWlzZS5yZWplY3Qo
Tm90U3VwcG9ydGVkRXJyb3IpOyB9Ci19OwotCi1jbGFzcyBNZWRpYUVuZHBvaW50Q2xpZW50IHsK
LXB1YmxpYzoKLSAgICB2aXJ0dWFsIHZvaWQgZ290RHRsc0ZpbmdlcnByaW50KGNvbnN0IFN0cmlu
ZyYgZmluZ2VycHJpbnQsIGNvbnN0IFN0cmluZyYgZmluZ2VycHJpbnRGdW5jdGlvbikgPSAwOwot
ICAgIHZpcnR1YWwgdm9pZCBnb3RJY2VDYW5kaWRhdGUoY29uc3QgU3RyaW5nJiBtaWQsIEljZUNh
bmRpZGF0ZSYmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRvbmVHYXRoZXJpbmdDYW5kaWRhdGVz
KGNvbnN0IFN0cmluZyYgbWlkKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGljZVRyYW5zcG9ydFN0
YXRlQ2hhbmdlZChjb25zdCBTdHJpbmcmIG1pZCwgUlRDSWNlVHJhbnNwb3J0U3RhdGUpID0gMDsK
LQotICAgIHZpcnR1YWwgfk1lZGlhRW5kcG9pbnRDbGllbnQoKSB7IH0KLX07Ci0KLX0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShXRUJfUlRDKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFFbmRwb2ludFNlc3Npb25D
b25maWd1cmF0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRp
YUVuZHBvaW50U2Vzc2lvbkNvbmZpZ3VyYXRpb24uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggYmYyYmQxZThiOTdjNGU3ODk5MTkxMzEzZGEyYThmZWYyYmIzOGVkOS4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYUVuZHBvaW50U2Vzc2lvbkNvbmZpZ3VyYXRpb24uaAorKysg
L2Rldi9udWxsCkBAIC0xLDkzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgRXJp
Y3Nzb24gQUIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIKLSAqICAgIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqICAgIGRpc3RyaWJ1dGlvbi4KLSAqIDMu
IE5laXRoZXIgdGhlIG5hbWUgb2YgRXJpY3Nzb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJp
YnV0b3JzCi0gKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tIHRoaXMKLSAqICAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
LSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBNZWRpYUVuZHBvaW50U2Vz
c2lvbkNvbmZpZ3VyYXRpb25faAotI2RlZmluZSBNZWRpYUVuZHBvaW50U2Vzc2lvbkNvbmZpZ3Vy
YXRpb25faAotCi0jaWYgRU5BQkxFKFdFQl9SVEMpCi0KLSNpbmNsdWRlICJQZWVyQ29ubmVjdGlv
blN0YXRlcy5oIgotI2luY2x1ZGUgIlBlZXJNZWRpYURlc2NyaXB0aW9uLmgiCi0jaW5jbHVkZSA8
d3RmL0NyeXB0b2dyYXBoaWNhbGx5UmFuZG9tTnVtYmVyLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotY2xhc3MgTWVkaWFFbmRwb2ludFNlc3Npb25Db25maWd1cmF0aW9uIDogcHVibGljIFJl
ZkNvdW50ZWQ8TWVkaWFFbmRwb2ludFNlc3Npb25Db25maWd1cmF0aW9uPiB7Ci1wdWJsaWM6Ci0g
ICAgc3RhdGljIFJlZlB0cjxNZWRpYUVuZHBvaW50U2Vzc2lvbkNvbmZpZ3VyYXRpb24+IGNyZWF0
ZSgpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IE1lZGlhRW5kcG9pbnRTZXNz
aW9uQ29uZmlndXJhdGlvbigpKTsKLSAgICB9Ci0gICAgdmlydHVhbCB+TWVkaWFFbmRwb2ludFNl
c3Npb25Db25maWd1cmF0aW9uKCkgeyB9Ci0KLSAgICBpbnQ2NF90IHNlc3Npb25JZCgpIGNvbnN0
IHsgcmV0dXJuIG1fc2Vzc2lvbklkOyB9Ci0gICAgdm9pZCBzZXRTZXNzaW9uSWQoaW50NjRfdCBz
ZXNzaW9uSWQpIHsgbV9zZXNzaW9uSWQgPSBzZXNzaW9uSWQ7IH0KLQotICAgIHVuc2lnbmVkIHNl
c3Npb25WZXJzaW9uKCkgY29uc3QgeyByZXR1cm4gbV9zZXNzaW9uVmVyc2lvbjsgfQotICAgIHZv
aWQgc2V0U2Vzc2lvblZlcnNpb24odW5zaWduZWQgc2Vzc2lvblZlcnNpb24pIHsgbV9zZXNzaW9u
VmVyc2lvbiA9IHNlc3Npb25WZXJzaW9uOyB9Ci0KLSAgICBWZWN0b3I8UGVlck1lZGlhRGVzY3Jp
cHRpb24+JiBtZWRpYURlc2NyaXB0aW9ucygpIHsgcmV0dXJuIG1fbWVkaWFEZXNjcmlwdGlvbnM7
IH0KLSAgICBjb25zdCBWZWN0b3I8UGVlck1lZGlhRGVzY3JpcHRpb24+JiBtZWRpYURlc2NyaXB0
aW9ucygpIGNvbnN0IHsgcmV0dXJuIG1fbWVkaWFEZXNjcmlwdGlvbnM7IH0KLSAgICB2b2lkIGFk
ZE1lZGlhRGVzY3JpcHRpb24oUGVlck1lZGlhRGVzY3JpcHRpb24mJiBkZXNjcmlwdGlvbikgeyBt
X21lZGlhRGVzY3JpcHRpb25zLmFwcGVuZChXVEZNb3ZlKGRlc2NyaXB0aW9uKSk7IH0KLQotICAg
IFBlZXJDb25uZWN0aW9uU3RhdGVzOjpCdW5kbGVQb2xpY3kgYnVuZGxlUG9saWN5KCkgY29uc3Qg
eyByZXR1cm4gbV9idW5kbGVQb2xpY3k7IH0KLSAgICB2b2lkIHNldEJ1bmRsZVBvbGljeShQZWVy
Q29ubmVjdGlvblN0YXRlczo6QnVuZGxlUG9saWN5IGJ1bmRsZVBvbGljeSkgeyBtX2J1bmRsZVBv
bGljeSA9IGJ1bmRsZVBvbGljeTsgfQotCi0gICAgUmVmUHRyPE1lZGlhRW5kcG9pbnRTZXNzaW9u
Q29uZmlndXJhdGlvbj4gY2xvbmUoKSBjb25zdAotICAgIHsKLSAgICAgICAgUmVmUHRyPE1lZGlh
RW5kcG9pbnRTZXNzaW9uQ29uZmlndXJhdGlvbj4gY29weSA9IGNyZWF0ZSgpOwotICAgICAgICBj
b3B5LT5tX3Nlc3Npb25JZCA9IG1fc2Vzc2lvbklkOwotICAgICAgICBjb3B5LT5tX3Nlc3Npb25W
ZXJzaW9uID0gbV9zZXNzaW9uVmVyc2lvbjsKLSAgICAgICAgY29weS0+bV9tZWRpYURlc2NyaXB0
aW9ucyA9IG1fbWVkaWFEZXNjcmlwdGlvbnM7Ci0gICAgICAgIGNvcHktPm1fYnVuZGxlUG9saWN5
ID0gbV9idW5kbGVQb2xpY3k7Ci0KLSAgICAgICAgcmV0dXJuIGNvcHk7Ci0gICAgfQotCi1wcml2
YXRlOgotICAgIE1lZGlhRW5kcG9pbnRTZXNzaW9uQ29uZmlndXJhdGlvbigpCi0gICAgewotICAg
ICAgICBtX3Nlc3Npb25JZCA9IGNyeXB0b2dyYXBoaWNhbGx5UmFuZG9tTnVtYmVyKCk7Ci0gICAg
ICAgIG1fc2Vzc2lvbklkID0gbV9zZXNzaW9uSWQgPDwgMzEgfCBjcnlwdG9ncmFwaGljYWxseVJh
bmRvbU51bWJlcigpOwotICAgIH0KLQotICAgIGludDY0X3QgbV9zZXNzaW9uSWQ7Ci0gICAgdW5z
aWduZWQgbV9zZXNzaW9uVmVyc2lvbiB7IDAgfTsKLQotICAgIFZlY3RvcjxQZWVyTWVkaWFEZXNj
cmlwdGlvbj4gbV9tZWRpYURlc2NyaXB0aW9uczsKLQotICAgIFBlZXJDb25uZWN0aW9uU3RhdGVz
OjpCdW5kbGVQb2xpY3kgbV9idW5kbGVQb2xpY3kgeyBQZWVyQ29ubmVjdGlvblN0YXRlczo6QnVu
ZGxlUG9saWN5OjpCYWxhbmNlZCB9OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0j
ZW5kaWYgLy8gRU5BQkxFKFdFQl9SVEMpCi0KLSNlbmRpZiAvLyBNZWRpYUVuZHBvaW50U2Vzc2lv
bkNvbmZpZ3VyYXRpb25faApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVk
aWFzdHJlYW0vUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZU1lZGlhU291cmNlQ2VudGVyLmNwcAppbmRleCA3
NjNmYjJlZGY2MjA4YTkxYmJkNzA5YWNiZWYxNGE5NTQxM2RiOGI2Li42YWQ5YWZkY2YzZmY2NWMz
NGE4M2RiOWIzYmRlNWExNDMzNTEzYzVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZU1lZGlhU291cmNlQ2VudGVyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZU1lZGlhU291cmNlQ2VudGVy
LmNwcApAQCAtMzUsNiArMzUsMTEgQEAKIAogI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCiAKKy8v
IEZJWE1FOiBHVEsgdG8gaW1wbGVtZW50IGl0cyBvd24gUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRl
ci4KKyNpZiBQTEFURk9STShHVEspCisjaW5jbHVkZSAiTW9ja1JlYWx0aW1lTWVkaWFTb3VyY2VD
ZW50ZXIuaCIKKyNlbmRpZgorCiAjaW5jbHVkZSAiQ2FwdHVyZURldmljZU1hbmFnZXIuaCIKICNp
bmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiTWVkaWFTdHJlYW1Qcml2YXRlLmgiCkBAIC01
OSw4ICs2NCwxNCBAQCBSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyJiBSZWFsdGltZU1lZGlhU291
cmNlQ2VudGVyOjpzaW5nbGV0b24oKQogICAgIFJlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXIqIG92
ZXJyaWRlID0gbWVkaWFTdHJlYW1DZW50ZXJPdmVycmlkZSgpOwogICAgIGlmIChvdmVycmlkZSkK
ICAgICAgICAgcmV0dXJuICpvdmVycmlkZTsKLSAgICAKKyNpZiBQTEFURk9STShHVEspCisgICAg
V1RGTG9nQWx3YXlzKCJXZWJLaXRHVEsgTElCV0VCUlRDIFJlYWx0aW1lTWVkaWFTb3VyY2VDZW50
ZXIgTk9UIElNUExFTUVOVEVELiBSZXR1cm5pbmcgTW9ja1JlYWx0aW1lTWVkaWFTb3VyY2VDZW50
ZXIgaW5zdGVhZCB0byBhdm9pZCBjcmFzaCFcbiIpOworICAgIEFTU0VSVChpc01haW5UaHJlYWQo
KSk7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPE1vY2tSZWFsdGltZU1lZGlhU291cmNlQ2Vu
dGVyPiBjZW50ZXI7CisgICAgcmV0dXJuIGNlbnRlcjsKKyNlbHNlCiAgICAgcmV0dXJuIFJlYWx0
aW1lTWVkaWFTb3VyY2VDZW50ZXI6OnBsYXRmb3JtQ2VudGVyKCk7CisjZW5kaWYKIH0KIAogdm9p
ZCBSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyOjpzZXRTaGFyZWRTdHJlYW1DZW50ZXJPdmVycmlk
ZShSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyKiBjZW50ZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9TRFBQcm9jZXNzb3JTY3JpcHRSZXNvdXJjZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9TRFBQcm9jZXNzb3JTY3Jp
cHRSZXNvdXJjZS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY2OWVkMmE3NjE1
ODE3Mjk3MGMxNDljODMwNGNlMGEzNDJmZjA5NjEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0v
U0RQUHJvY2Vzc29yU2NyaXB0UmVzb3VyY2UuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNTMgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBFcmljc3NvbiBBQi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICog
ICAgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZQotICogICAgZGlzdHJpYnV0aW9uLgotICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBF
cmljc3NvbiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotICog
ICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoV0VCX1JUQykKLSNp
bmNsdWRlICJTRFBQcm9jZXNzb3JTY3JpcHRSZXNvdXJjZS5oIgotCi0jaW5jbHVkZSAiU0RQUHJv
Y2Vzc29yU2NyaXB0c0RhdGEuaCIKLSNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotCi1uYW1lc3BhY2UgU0RQUHJvY2Vzc29yU2NyaXB0UmVzb3Vy
Y2UgewotCi1jb25zdCBTdHJpbmcmIHNjcmlwdFN0cmluZygpCi17Ci0gICAgc3RhdGljIE5ldmVy
RGVzdHJveWVkPGNvbnN0IFN0cmluZz4gc2NyaXB0KHNkcEphdmFTY3JpcHQsIHNpemVvZihzZHBK
YXZhU2NyaXB0KSk7Ci0gICAgcmV0dXJuIHNjcmlwdDsKLX0KLQotfSAvLyBuYW1lc3BhY2UgU0RQ
UHJvY2Vzc29yU2NyaXB0UmVzb3VyY2UKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5k
aWYgLy8gRU5BQkxFKFdFQl9SVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tZWRpYXN0cmVhbS9TRFBQcm9jZXNzb3JTY3JpcHRSZXNvdXJjZS5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vU0RQUHJvY2Vzc29yU2NyaXB0UmVzb3VyY2UuaApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2I1NDQzYmIwNzBjZjc3ZjFiNmVlZjMwYzIzZTUx
MmY2ZDQ1NTQ2NC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9TRFBQcm9jZXNzb3JTY3JpcHRS
ZXNvdXJjZS5oCisrKyAvZGV2L251bGwKQEAgLTEsNTAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxNSBFcmljc3NvbiBBQi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogICAgaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogICAgZGlzdHJp
YnV0aW9uLgotICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBFcmljc3NvbiBub3IgdGhlIG5hbWVz
IG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotICogICAgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICog
IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIFNE
UFByb2Nlc3NvclNjcmlwdFJlc291cmNlX2gKLSNkZWZpbmUgU0RQUHJvY2Vzc29yU2NyaXB0UmVz
b3VyY2VfaAotCi0jaWYgRU5BQkxFKFdFQl9SVEMpCi0KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZT
dHJpbmcuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1uYW1lc3BhY2UgU0RQUHJvY2Vzc29y
U2NyaXB0UmVzb3VyY2UgewotCi1jb25zdCBTdHJpbmcmIHNjcmlwdFN0cmluZygpOwotCi19IC8v
IG5hbWVzcGFjZSBTRFBQcm9jZXNzb3JTY3JpcHRSZXNvdXJjZQotCi19IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoV0VCX1JUQykKLQotI2VuZGlmIC8vIFNEUFByb2Nl
c3NvclNjcmlwdFJlc291cmNlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21lZGlhc3RyZWFtL29wZW53ZWJydGMvTWVkaWFFbmRwb2ludE93ci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9vcGVud2VicnRjL01lZGlhRW5kcG9pbnRPd3IuY3Bw
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YTU4NDg2NzI1NDgzYzJkY2UwYTQyNDRi
NGVkZTE1ZmJmYWJkMmU5Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL29wZW53ZWJydGMvTWVk
aWFFbmRwb2ludE93ci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw3NTAgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxNSwgMjAxNiBFcmljc3NvbiBBQi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogICAgaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZQotICogICAgZGlzdHJpYnV0aW9uLgotICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBFcmljc3Nv
biBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotICogICAgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQK
LSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoV0VCX1JUQykKLSNpbmNsdWRl
ICJNZWRpYUVuZHBvaW50T3dyLmgiCi0KLSNpbmNsdWRlICJNZWRpYUVuZHBvaW50U2Vzc2lvbkNv
bmZpZ3VyYXRpb24uaCIKLSNpbmNsdWRlICJNZWRpYVBheWxvYWQuaCIKLSNpbmNsdWRlICJOb3RJ
bXBsZW1lbnRlZC5oIgotI2luY2x1ZGUgIk9wZW5XZWJSVENVdGlsaXRpZXMuaCIKLSNpbmNsdWRl
ICJQZWVyQ29ubmVjdGlvblN0YXRlcy5oIgotI2luY2x1ZGUgIlJUQ0RhdGFDaGFubmVsSGFuZGxl
ci5oIgotI2luY2x1ZGUgIlJlYWx0aW1lQXVkaW9Tb3VyY2VPd3IuaCIKLSNpbmNsdWRlICJSZWFs
dGltZVZpZGVvU291cmNlT3dyLmgiCi0jaW5jbHVkZSA8b3dyL293ci5oPgotI2luY2x1ZGUgPG93
ci9vd3JfYXVkaW9fcGF5bG9hZC5oPgotI2luY2x1ZGUgPG93ci9vd3JfY3J5cHRvX3V0aWxzLmg+
Ci0jaW5jbHVkZSA8b3dyL293cl9tZWRpYV9zZXNzaW9uLmg+Ci0jaW5jbHVkZSA8b3dyL293cl90
cmFuc3BvcnRfYWdlbnQuaD4KLSNpbmNsdWRlIDxvd3Ivb3dyX3ZpZGVvX3BheWxvYWQuaD4KLSNp
bmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3Rh
dGljIHZvaWQgZ290Q2FuZGlkYXRlKE93clNlc3Npb24qLCBPd3JDYW5kaWRhdGUqLCBNZWRpYUVu
ZHBvaW50T3dyKik7Ci1zdGF0aWMgdm9pZCBjYW5kaWRhdGVHYXRoZXJpbmdEb25lKE93clNlc3Np
b24qLCBNZWRpYUVuZHBvaW50T3dyKik7Ci1zdGF0aWMgdm9pZCBpY2VDb25uZWN0aW9uU3RhdGVD
aGFuZ2UoT3dyU2Vzc2lvbiosIEdQYXJhbVNwZWMqLCBNZWRpYUVuZHBvaW50T3dyKik7Ci1zdGF0
aWMgdm9pZCBnb3RJbmNvbWluZ1NvdXJjZShPd3JNZWRpYVNlc3Npb24qLCBPd3JNZWRpYVNvdXJj
ZSosIE1lZGlhRW5kcG9pbnRPd3IqKTsKLQotc3RhdGljIGNvbnN0IFZlY3RvcjxTdHJpbmc+IGNh
bmRpZGF0ZVR5cGVzID0geyAiaG9zdCIsICJzcmZseCIsICJwcmZseCIsICJyZWxheSIgfTsKLXN0
YXRpYyBjb25zdCBWZWN0b3I8U3RyaW5nPiBjYW5kaWRhdGVUY3BUeXBlcyA9IHsgIiIsICJhY3Rp
dmUiLCAicGFzc2l2ZSIsICJzbyIgfTsKLXN0YXRpYyBjb25zdCBWZWN0b3I8U3RyaW5nPiBjb2Rl
Y1R5cGVzID0geyAiTk9ORSIsICJQQ01VIiwgIlBDTUEiLCAiT1BVUyIsICJIMjY0IiwgIlZQOCIg
fTsKLQotc3RhdGljIGNvbnN0IGNoYXIqIGhlbHBlclNlcnZlclJlZ0V4ID0gIih0dXJuc3x0dXJu
fHN0dW4pOihbXFx3XFwuXFwtXSt8XFxbW1xcd1xcOl0rXFxdKSg6XFxkKyk/KFxcPy4rKT8iOwot
Ci1zdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgaGVscGVyU2VydmVyRGVmYXVsdFBvcnQgPSAz
NDc4Owotc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IGNhbmRpZGF0ZURlZmF1bHRQb3J0ID0g
OTsKLQotc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxNZWRpYUVuZHBvaW50PiBjcmVhdGVNZWRpYUVu
ZHBvaW50T3dyKE1lZGlhRW5kcG9pbnRDbGllbnQmIGNsaWVudCkKLXsKLSAgICByZXR1cm4gc3Rk
Ojp1bmlxdWVfcHRyPE1lZGlhRW5kcG9pbnQ+KG5ldyBNZWRpYUVuZHBvaW50T3dyKGNsaWVudCkp
OwotfQotCi1DcmVhdGVNZWRpYUVuZHBvaW50IE1lZGlhRW5kcG9pbnQ6OmNyZWF0ZSA9IGNyZWF0
ZU1lZGlhRW5kcG9pbnRPd3I7Ci0KLU1lZGlhRW5kcG9pbnRPd3I6Ok1lZGlhRW5kcG9pbnRPd3Io
TWVkaWFFbmRwb2ludENsaWVudCYgY2xpZW50KQotICAgIDogbV90cmFuc3BvcnRBZ2VudChudWxs
cHRyKQotICAgICwgbV9jbGllbnQoY2xpZW50KQotICAgICwgbV9udW1iZXJPZlJlY2VpdmVQcmVw
YXJlZFNlc3Npb25zKDApCi0gICAgLCBtX251bWJlck9mU2VuZFByZXBhcmVkU2Vzc2lvbnMoMCkK
LXsKLSAgICBpbml0aWFsaXplT3BlbldlYlJUQygpOwotCi0gICAgR1JlZ2V4Q29tcGlsZUZsYWdz
IGNvbXBpbGVGbGFncyA9IEdfUkVHRVhfSkFWQVNDUklQVF9DT01QQVQ7Ci0gICAgR1JlZ2V4TWF0
Y2hGbGFncyBtYXRjaEZsYWdzID0gc3RhdGljX2Nhc3Q8R1JlZ2V4TWF0Y2hGbGFncz4oMCk7Ci0g
ICAgbV9oZWxwZXJTZXJ2ZXJSZWdFeCA9IGdfcmVnZXhfbmV3KGhlbHBlclNlcnZlclJlZ0V4LCBj
b21waWxlRmxhZ3MsIG1hdGNoRmxhZ3MsIG51bGxwdHIpOwotfQotCi1NZWRpYUVuZHBvaW50T3dy
Ojp+TWVkaWFFbmRwb2ludE93cigpCi17Ci0gICAgc3RvcCgpOwotCi0gICAgZ19yZWdleF91bnJl
ZihtX2hlbHBlclNlcnZlclJlZ0V4KTsKLX0KLQotdm9pZCBNZWRpYUVuZHBvaW50T3dyOjpzZXRD
b25maWd1cmF0aW9uKE1lZGlhRW5kcG9pbnRDb25maWd1cmF0aW9uJiYgY29uZmlndXJhdGlvbikK
LXsKLSAgICBtX2NvbmZpZ3VyYXRpb24gPSBXVEZNb3ZlKGNvbmZpZ3VyYXRpb24pOwotfQotCi1z
dGQ6OnVuaXF1ZV9wdHI8UlRDRGF0YUNoYW5uZWxIYW5kbGVyPiBNZWRpYUVuZHBvaW50T3dyOjpj
cmVhdGVEYXRhQ2hhbm5lbEhhbmRsZXIoY29uc3QgU3RyaW5nJiwgY29uc3QgUlRDRGF0YUNoYW5u
ZWxJbml0JikKLXsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IGRhdGEgY2hhbm5lbC4KLSAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQotc3RhdGljIHZv
aWQgY3J5cHRvRGF0YUNhbGxiYWNrKGdjaGFyKiBwcml2YXRlS2V5LCBnY2hhciogY2VydGlmaWNh
dGUsIGdjaGFyKiBmaW5nZXJwcmludCwgZ2NoYXIqIGZpbmdlcnByaW50RnVuY3Rpb24sIGdwb2lu
dGVyIGRhdGEpCi17Ci0gICAgTWVkaWFFbmRwb2ludE93ciogbWVkaWFFbmRwb2ludCA9IChNZWRp
YUVuZHBvaW50T3dyKikgZGF0YTsKLSAgICBtZWRpYUVuZHBvaW50LT5kaXNwYXRjaER0bHNGaW5n
ZXJwcmludChnX3N0cmR1cChwcml2YXRlS2V5KSwgZ19zdHJkdXAoY2VydGlmaWNhdGUpLCBTdHJp
bmcoZmluZ2VycHJpbnQpLCBTdHJpbmcoZmluZ2VycHJpbnRGdW5jdGlvbikpOwotfQotCi12b2lk
IE1lZGlhRW5kcG9pbnRPd3I6OmdlbmVyYXRlRHRsc0luZm8oKQotewotICAgIG93cl9jcnlwdG9f
Y3JlYXRlX2NyeXB0b19kYXRhKGNyeXB0b0RhdGFDYWxsYmFjaywgdGhpcyk7Ci19Ci0KLU1lZGlh
UGF5bG9hZFZlY3RvciBNZWRpYUVuZHBvaW50T3dyOjpnZXREZWZhdWx0QXVkaW9QYXlsb2Fkcygp
Ci17Ci0gICAgTWVkaWFQYXlsb2FkVmVjdG9yIHBheWxvYWRzOwotCi0gICAgLy8gRklYTUU6IFRo
aXMgbGlzdCBzaG91bGQgYmUgYmFzZWQgb24gd2hhdCBpcyBhdmFpbGFibGUgaW4gdGhlIHBsYXRm
b3JtIChidWc6IGh0dHA6Ly93ZWJraXQub3JnL2IvMTYzNzIzKQotICAgIE1lZGlhUGF5bG9hZCBw
YXlsb2FkMTsKLSAgICBwYXlsb2FkMS50eXBlID0gMTExOwotICAgIHBheWxvYWQxLmVuY29kaW5n
TmFtZSA9ICJPUFVTIjsKLSAgICBwYXlsb2FkMS5jbG9ja1JhdGUgPSA0ODAwMDsKLSAgICBwYXls
b2FkMS5jaGFubmVscyA9IDI7Ci0gICAgcGF5bG9hZHMuYXBwZW5kKFdURk1vdmUocGF5bG9hZDEp
KTsKLQotICAgIE1lZGlhUGF5bG9hZCBwYXlsb2FkMjsKLSAgICBwYXlsb2FkMi50eXBlID0gODsK
LSAgICBwYXlsb2FkMi5lbmNvZGluZ05hbWUgPSAiUENNQSI7Ci0gICAgcGF5bG9hZDIuY2xvY2tS
YXRlID0gODAwMDsKLSAgICBwYXlsb2FkMi5jaGFubmVscyA9IDE7Ci0gICAgcGF5bG9hZHMuYXBw
ZW5kKFdURk1vdmUocGF5bG9hZDIpKTsKLQotICAgIE1lZGlhUGF5bG9hZCBwYXlsb2FkMzsKLSAg
ICBwYXlsb2FkMy50eXBlID0gMDsKLSAgICBwYXlsb2FkMy5lbmNvZGluZ05hbWUgPSAiUENNVSI7
Ci0gICAgcGF5bG9hZDMuY2xvY2tSYXRlID0gODAwMDsKLSAgICBwYXlsb2FkMy5jaGFubmVscyA9
IDE7Ci0gICAgcGF5bG9hZHMuYXBwZW5kKFdURk1vdmUocGF5bG9hZDMpKTsKLQotICAgIHJldHVy
biBwYXlsb2FkczsKLX0KLQotTWVkaWFQYXlsb2FkVmVjdG9yIE1lZGlhRW5kcG9pbnRPd3I6Omdl
dERlZmF1bHRWaWRlb1BheWxvYWRzKCkKLXsKLSAgICBNZWRpYVBheWxvYWRWZWN0b3IgcGF5bG9h
ZHM7Ci0KLSAgICAvLyBGSVhNRTogVGhpcyBsaXN0IHNob3VsZCBiZSBiYXNlZCBvbiB3aGF0IGlz
IGF2YWlsYWJsZSBpbiB0aGUgcGxhdGZvcm0gKGJ1ZzogaHR0cDovL3dlYmtpdC5vcmcvYi8xNjM3
MjMpCi0gICAgTWVkaWFQYXlsb2FkIHBheWxvYWQxOwotICAgIHBheWxvYWQxLnR5cGUgPSAxMDM7
Ci0gICAgcGF5bG9hZDEuZW5jb2RpbmdOYW1lID0gIkgyNjQiOwotICAgIHBheWxvYWQxLmNsb2Nr
UmF0ZSA9IDkwMDAwOwotICAgIHBheWxvYWQxLmNjbWZpciA9IHRydWU7Ci0gICAgcGF5bG9hZDEu
bmFja3BsaSA9IHRydWU7Ci0gICAgcGF5bG9hZDEuYWRkUGFyYW1ldGVyKCJwYWNrZXRpemF0aW9u
TW9kZSIsIDEpOwotICAgIHBheWxvYWRzLmFwcGVuZChXVEZNb3ZlKHBheWxvYWQxKSk7Ci0KLSAg
ICBNZWRpYVBheWxvYWQgcGF5bG9hZDI7Ci0gICAgcGF5bG9hZDIudHlwZSA9IDEwMDsKLSAgICBw
YXlsb2FkMi5lbmNvZGluZ05hbWUgPSAiVlA4IjsKLSAgICBwYXlsb2FkMi5jbG9ja1JhdGUgPSA5
MDAwMDsKLSAgICBwYXlsb2FkMi5jY21maXIgPSB0cnVlOwotICAgIHBheWxvYWQyLm5hY2twbGkg
PSB0cnVlOwotICAgIHBheWxvYWQyLm5hY2sgPSB0cnVlOwotICAgIHBheWxvYWRzLmFwcGVuZChX
VEZNb3ZlKHBheWxvYWQyKSk7Ci0KLSAgICBNZWRpYVBheWxvYWQgcGF5bG9hZDM7Ci0gICAgcGF5
bG9hZDMudHlwZSA9IDEyMDsKLSAgICBwYXlsb2FkMy5lbmNvZGluZ05hbWUgPSAiUlRYIjsKLSAg
ICBwYXlsb2FkMy5jbG9ja1JhdGUgPSA5MDAwMDsKLSAgICBwYXlsb2FkMy5hZGRQYXJhbWV0ZXIo
ImFwdCIsIDEwMCk7Ci0gICAgcGF5bG9hZDMuYWRkUGFyYW1ldGVyKCJydHhUaW1lIiwgMjAwKTsK
LSAgICBwYXlsb2Fkcy5hcHBlbmQoV1RGTW92ZShwYXlsb2FkMykpOwotCi0gICAgcmV0dXJuIHBh
eWxvYWRzOwotfQotCi1zdGF0aWMgYm9vbCBwYXlsb2Fkc0NvbnRhaW5UeXBlKGNvbnN0IFZlY3Rv
cjxjb25zdCBNZWRpYVBheWxvYWQqPiYgcGF5bG9hZHMsIHVuc2lnbmVkIHBheWxvYWRUeXBlKQot
ewotICAgIGZvciAoYXV0byBwYXlsb2FkIDogcGF5bG9hZHMpIHsKLSAgICAgICAgQVNTRVJUKHBh
eWxvYWQpOwotICAgICAgICBpZiAocGF5bG9hZC0+dHlwZSA9PSBwYXlsb2FkVHlwZSkKLSAgICAg
ICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLU1lZGlh
UGF5bG9hZFZlY3RvciBNZWRpYUVuZHBvaW50T3dyOjpmaWx0ZXJQYXlsb2Fkcyhjb25zdCBNZWRp
YVBheWxvYWRWZWN0b3ImIHJlbW90ZVBheWxvYWRzLCBjb25zdCBNZWRpYVBheWxvYWRWZWN0b3Im
IGRlZmF1bHRQYXlsb2FkcykKLXsKLSAgICBWZWN0b3I8Y29uc3QgTWVkaWFQYXlsb2FkKj4gZmls
dGVyZWRQYXlsb2FkczsKLQotICAgIGZvciAoYXV0byYgcmVtb3RlUGF5bG9hZCA6IHJlbW90ZVBh
eWxvYWRzKSB7Ci0gICAgICAgIGNvbnN0IE1lZGlhUGF5bG9hZCogZGVmYXVsdFBheWxvYWQgPSBu
dWxscHRyOwotICAgICAgICBmb3IgKGF1dG8mIHAgOiBkZWZhdWx0UGF5bG9hZHMpIHsKLSAgICAg
ICAgICAgIGlmIChwLmVuY29kaW5nTmFtZSA9PSByZW1vdGVQYXlsb2FkLmVuY29kaW5nTmFtZS5j
b252ZXJ0VG9BU0NJSVVwcGVyY2FzZSgpKSB7Ci0gICAgICAgICAgICAgICAgZGVmYXVsdFBheWxv
YWQgPSAmcDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotICAgICAgICBpZiAoIWRlZmF1bHRQYXlsb2FkKQotICAgICAgICAgICAgY29udGludWU7Ci0K
LSAgICAgICAgaWYgKGRlZmF1bHRQYXlsb2FkLT5wYXJhbWV0ZXJzLmNvbnRhaW5zKCJwYWNrZXRp
emF0aW9uTW9kZSIpICYmIHJlbW90ZVBheWxvYWQucGFyYW1ldGVycy5jb250YWlucygicGFja2V0
aXphdGlvbk1vZGUiKQotICAgICAgICAgICAgJiYgKGRlZmF1bHRQYXlsb2FkLT5wYXJhbWV0ZXJz
LmdldCgicGFja2V0aXphdGlvbk1vZGUiKSAhPSBkZWZhdWx0UGF5bG9hZC0+cGFyYW1ldGVycy5n
ZXQoInBhY2tldGl6YXRpb25Nb2RlIikpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAg
ICAgZmlsdGVyZWRQYXlsb2Fkcy5hcHBlbmQoJnJlbW90ZVBheWxvYWQpOwotICAgIH0KLQotICAg
IE1lZGlhUGF5bG9hZFZlY3RvciBmaWx0ZXJlZEFwdFBheWxvYWRzOwotCi0gICAgZm9yIChhdXRv
IGZpbHRlcmVkUGF5bG9hZCA6IGZpbHRlcmVkUGF5bG9hZHMpIHsKLSAgICAgICAgaWYgKGZpbHRl
cmVkUGF5bG9hZC0+cGFyYW1ldGVycy5jb250YWlucygiYXB0IikgJiYgKCFwYXlsb2Fkc0NvbnRh
aW5UeXBlKGZpbHRlcmVkUGF5bG9hZHMsIGZpbHRlcmVkUGF5bG9hZC0+cGFyYW1ldGVycy5nZXQo
ImFwdCIpKSkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgZmlsdGVyZWRBcHRQYXls
b2Fkcy5hcHBlbmQoKmZpbHRlcmVkUGF5bG9hZCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZpbHRl
cmVkQXB0UGF5bG9hZHM7Ci19Ci0KLU1lZGlhRW5kcG9pbnQ6OlVwZGF0ZVJlc3VsdCBNZWRpYUVu
ZHBvaW50T3dyOjp1cGRhdGVSZWNlaXZlQ29uZmlndXJhdGlvbihNZWRpYUVuZHBvaW50U2Vzc2lv
bkNvbmZpZ3VyYXRpb24qIGNvbmZpZ3VyYXRpb24sIGJvb2wgaXNJbml0aWF0b3IpCi17Ci0gICAg
VmVjdG9yPFRyYW5zY2VpdmVyQ29uZmlnPiB0cmFuc2NlaXZlckNvbmZpZ3M7Ci0gICAgZm9yICh1
bnNpZ25lZCBpID0gbV90cmFuc2NlaXZlcnMuc2l6ZSgpOyBpIDwgY29uZmlndXJhdGlvbi0+bWVk
aWFEZXNjcmlwdGlvbnMoKS5zaXplKCk7ICsraSkgewotICAgICAgICBUcmFuc2NlaXZlckNvbmZp
ZyBjb25maWc7Ci0gICAgICAgIGNvbmZpZy50eXBlID0gU2Vzc2lvblR5cGVNZWRpYTsKLSAgICAg
ICAgY29uZmlnLmlzRHRsc0NsaWVudCA9IGNvbmZpZ3VyYXRpb24tPm1lZGlhRGVzY3JpcHRpb25z
KClbaV0uZHRsc1NldHVwID09ICJhY3RpdmUiOwotICAgICAgICBjb25maWcubWlkID0gY29uZmln
dXJhdGlvbi0+bWVkaWFEZXNjcmlwdGlvbnMoKVtpXS5taWQ7Ci0gICAgICAgIHRyYW5zY2VpdmVy
Q29uZmlncy5hcHBlbmQoV1RGTW92ZShjb25maWcpKTsKLSAgICB9Ci0KLSAgICBlbnN1cmVUcmFu
c3BvcnRBZ2VudEFuZFRyYW5zY2VpdmVycyhpc0luaXRpYXRvciwgdHJhbnNjZWl2ZXJDb25maWdz
KTsKLQotICAgIC8vIFByZXBhcmUgdGhlIG5ldyBzZXNzaW9ucy4KLSAgICBmb3IgKHVuc2lnbmVk
IGkgPSBtX251bWJlck9mUmVjZWl2ZVByZXBhcmVkU2Vzc2lvbnM7IGkgPCBtX3RyYW5zY2VpdmVy
cy5zaXplKCk7ICsraSkgewotICAgICAgICBPd3JTZXNzaW9uKiBzZXNzaW9uID0gbV90cmFuc2Nl
aXZlcnNbaV0tPnNlc3Npb24oKTsKLSAgICAgICAgcHJlcGFyZU1lZGlhU2Vzc2lvbihPV1JfTUVE
SUFfU0VTU0lPTihzZXNzaW9uKSwgJmNvbmZpZ3VyYXRpb24tPm1lZGlhRGVzY3JpcHRpb25zKClb
aV0sIGlzSW5pdGlhdG9yKTsKLSAgICAgICAgb3dyX3RyYW5zcG9ydF9hZ2VudF9hZGRfc2Vzc2lv
bihtX3RyYW5zcG9ydEFnZW50LCBzZXNzaW9uKTsKLSAgICB9Ci0KLSAgICBvd3JfdHJhbnNwb3J0
X2FnZW50X3N0YXJ0KG1fdHJhbnNwb3J0QWdlbnQpOwotICAgIG1fbnVtYmVyT2ZSZWNlaXZlUHJl
cGFyZWRTZXNzaW9ucyA9IG1fdHJhbnNjZWl2ZXJzLnNpemUoKTsKLQotICAgIHJldHVybiBVcGRh
dGVSZXN1bHQ6OlN1Y2Nlc3M7Ci19Ci0KLXN0YXRpYyBjb25zdCBNZWRpYVBheWxvYWQqIGZpbmRS
dHhQYXlsb2FkKGNvbnN0IE1lZGlhUGF5bG9hZFZlY3RvciYgcGF5bG9hZHMsIHVuc2lnbmVkIGFw
dCkKLXsKLSAgICBmb3IgKGF1dG8mIHBheWxvYWQgOiBwYXlsb2FkcykgewotICAgICAgICBpZiAo
cGF5bG9hZC5lbmNvZGluZ05hbWUuY29udmVydFRvQVNDSUlVcHBlcmNhc2UoKSA9PSAiUlRYIiAm
JiBwYXlsb2FkLnBhcmFtZXRlcnMuY29udGFpbnMoImFwdCIpCi0gICAgICAgICAgICAmJiAocGF5
bG9hZC5wYXJhbWV0ZXJzLmdldCgiYXB0IikgPT0gYXB0KSkKLSAgICAgICAgICAgIHJldHVybiAm
cGF5bG9hZDsKLSAgICB9Ci0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLU1lZGlhRW5kcG9pbnQ6
OlVwZGF0ZVJlc3VsdCBNZWRpYUVuZHBvaW50T3dyOjp1cGRhdGVTZW5kQ29uZmlndXJhdGlvbihN
ZWRpYUVuZHBvaW50U2Vzc2lvbkNvbmZpZ3VyYXRpb24qIGNvbmZpZ3VyYXRpb24sIGNvbnN0IFJl
YWx0aW1lTWVkaWFTb3VyY2VNYXAmIHNlbmRTb3VyY2VNYXAsIGJvb2wgaXNJbml0aWF0b3IpCi17
Ci0gICAgVmVjdG9yPFRyYW5zY2VpdmVyQ29uZmlnPiB0cmFuc2NlaXZlckNvbmZpZ3M7Ci0gICAg
Zm9yICh1bnNpZ25lZCBpID0gbV90cmFuc2NlaXZlcnMuc2l6ZSgpOyBpIDwgY29uZmlndXJhdGlv
bi0+bWVkaWFEZXNjcmlwdGlvbnMoKS5zaXplKCk7ICsraSkgewotICAgICAgICBUcmFuc2NlaXZl
ckNvbmZpZyBjb25maWc7Ci0gICAgICAgIGNvbmZpZy50eXBlID0gU2Vzc2lvblR5cGVNZWRpYTsK
LSAgICAgICAgY29uZmlnLmlzRHRsc0NsaWVudCA9IGNvbmZpZ3VyYXRpb24tPm1lZGlhRGVzY3Jp
cHRpb25zKClbaV0uZHRsc1NldHVwICE9ICJhY3RpdmUiOwotICAgICAgICBjb25maWcubWlkID0g
Y29uZmlndXJhdGlvbi0+bWVkaWFEZXNjcmlwdGlvbnMoKVtpXS5taWQ7Ci0gICAgICAgIHRyYW5z
Y2VpdmVyQ29uZmlncy5hcHBlbmQoV1RGTW92ZShjb25maWcpKTsKLSAgICB9Ci0KLSAgICBlbnN1
cmVUcmFuc3BvcnRBZ2VudEFuZFRyYW5zY2VpdmVycyhpc0luaXRpYXRvciwgdHJhbnNjZWl2ZXJD
b25maWdzKTsKLQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3RyYW5zY2VpdmVycy5z
aXplKCk7ICsraSkgewotICAgICAgICBhdXRvKiBzZXNzaW9uID0gbV90cmFuc2NlaXZlcnNbaV0t
PnNlc3Npb24oKTsKLSAgICAgICAgYXV0byYgbWRlc2MgPSBjb25maWd1cmF0aW9uLT5tZWRpYURl
c2NyaXB0aW9ucygpW2ldOwotCi0gICAgICAgIGlmIChtZGVzYy50eXBlID09ICJhdWRpbyIgfHwg
bWRlc2MudHlwZSA9PSAidmlkZW8iKQotICAgICAgICAgICAgZ19vYmplY3Rfc2V0KHNlc3Npb24s
ICJydGNwLW11eCIsIG1kZXNjLnJ0Y3BNdXgsIG51bGxwdHIpOwotCi0gICAgICAgIGlmIChtZGVz
Yy5pY2VDYW5kaWRhdGVzLnNpemUoKSkgewotICAgICAgICAgICAgZm9yIChhdXRvJiBjYW5kaWRh
dGUgOiBtZGVzYy5pY2VDYW5kaWRhdGVzKQotICAgICAgICAgICAgICAgIGludGVybmFsQWRkUmVt
b3RlQ2FuZGlkYXRlKHNlc3Npb24sIGNhbmRpZGF0ZSwgbWRlc2MuaWNlVWZyYWcsIG1kZXNjLmlj
ZVBhc3N3b3JkKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChpIDwgbV9udW1iZXJPZlNlbmRQ
cmVwYXJlZFNlc3Npb25zKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgaWYgKCFz
ZW5kU291cmNlTWFwLmNvbnRhaW5zKG1kZXNjLm1pZCkpCi0gICAgICAgICAgICBjb250aW51ZTsK
LQotICAgICAgICBjb25zdCBNZWRpYVBheWxvYWQqIHBheWxvYWQgPSBudWxscHRyOwotICAgICAg
ICBmb3IgKGF1dG8mIHAgOiBtZGVzYy5wYXlsb2FkcykgewotICAgICAgICAgICAgaWYgKHAuZW5j
b2RpbmdOYW1lLmNvbnZlcnRUb0FTQ0lJVXBwZXJjYXNlKCkgIT0gIlJUWCIpIHsKLSAgICAgICAg
ICAgICAgICBwYXlsb2FkID0gJnA7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIXBheWxvYWQpCi0gICAgICAgICAgICByZXR1
cm4gVXBkYXRlUmVzdWx0OjpGYWlsZWQ7Ci0KLSAgICAgICAgYXV0byogcnR4UGF5bG9hZCA9IGZp
bmRSdHhQYXlsb2FkKG1kZXNjLnBheWxvYWRzLCBwYXlsb2FkLT50eXBlKTsKLSAgICAgICAgYXV0
byogc291cmNlID0gc3RhdGljX2Nhc3Q8UmVhbHRpbWVNZWRpYVNvdXJjZU93cio+KHNlbmRTb3Vy
Y2VNYXAuZ2V0KG1kZXNjLm1pZCkpOwotCi0gICAgICAgIEFTU0VSVChjb2RlY1R5cGVzLmZpbmQo
cGF5bG9hZC0+ZW5jb2RpbmdOYW1lLmNvbnZlcnRUb0FTQ0lJVXBwZXJjYXNlKCkpICE9IG5vdEZv
dW5kKTsKLSAgICAgICAgYXV0byBjb2RlY1R5cGUgPSBzdGF0aWNfY2FzdDxPd3JDb2RlY1R5cGU+
KGNvZGVjVHlwZXMuZmluZChwYXlsb2FkLT5lbmNvZGluZ05hbWUuY29udmVydFRvQVNDSUlVcHBl
cmNhc2UoKSkpOwotCi0gICAgICAgIE93clBheWxvYWQqIHNlbmRQYXlsb2FkOwotICAgICAgICBp
ZiAobWRlc2MudHlwZSA9PSAiYXVkaW8iKQotICAgICAgICAgICAgc2VuZFBheWxvYWQgPSBvd3Jf
YXVkaW9fcGF5bG9hZF9uZXcoY29kZWNUeXBlLCBwYXlsb2FkLT50eXBlLCBwYXlsb2FkLT5jbG9j
a1JhdGUsIHBheWxvYWQtPmNoYW5uZWxzKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBz
ZW5kUGF5bG9hZCA9IG93cl92aWRlb19wYXlsb2FkX25ldyhjb2RlY1R5cGUsIHBheWxvYWQtPnR5
cGUsIHBheWxvYWQtPmNsb2NrUmF0ZSwgcGF5bG9hZC0+Y2NtZmlyLCBwYXlsb2FkLT5uYWNrcGxp
KTsKLSAgICAgICAgICAgIGdfb2JqZWN0X3NldChzZW5kUGF5bG9hZCwgInJ0eC1wYXlsb2FkLXR5
cGUiLCBydHhQYXlsb2FkID8gcnR4UGF5bG9hZC0+dHlwZSA6IC0xLAotICAgICAgICAgICAgICAg
ICJydHgtdGltZSIsIHJ0eFBheWxvYWQgJiYgcnR4UGF5bG9hZC0+cGFyYW1ldGVycy5jb250YWlu
cygicnR4VGltZSIpID8gcnR4UGF5bG9hZC0+cGFyYW1ldGVycy5nZXQoInJ0eFRpbWUiKSA6IDAs
IG51bGxwdHIpOwotICAgICAgICB9Ci0KLSAgICAgICAgb3dyX21lZGlhX3Nlc3Npb25fc2V0X3Nl
bmRfcGF5bG9hZChPV1JfTUVESUFfU0VTU0lPTihzZXNzaW9uKSwgc2VuZFBheWxvYWQpOwotICAg
ICAgICBvd3JfbWVkaWFfc2Vzc2lvbl9zZXRfc2VuZF9zb3VyY2UoT1dSX01FRElBX1NFU1NJT04o
c2Vzc2lvbiksIHNvdXJjZS0+bWVkaWFTb3VyY2UoKSk7Ci0KLSAgICAgICAgLy8gRklYTUU6IFN1
cHBvcnQgZm9yIGdyb3VwLXNzcmMgU0RQIGxpbmUgaXMgbWlzc2luZy4KLSAgICAgICAgY29uc3Qg
VmVjdG9yPHVuc2lnbmVkPiByZWNlaXZlU3NyY3MgPSBtZGVzYy5zc3JjczsKLSAgICAgICAgaWYg
KHJlY2VpdmVTc3Jjcy5zaXplKCkpIHsKLSAgICAgICAgICAgIGdfb2JqZWN0X3NldChzZXNzaW9u
LCAicmVjZWl2ZS1zc3JjIiwgcmVjZWl2ZVNzcmNzWzBdLCBudWxscHRyKTsKLSAgICAgICAgICAg
IGlmIChyZWNlaXZlU3NyY3Muc2l6ZSgpID09IDIpCi0gICAgICAgICAgICAgICAgZ19vYmplY3Rf
c2V0KHNlc3Npb24sICJyZWNlaXZlLXJ0eC1zc3JjIiwgcmVjZWl2ZVNzcmNzWzFdLCBudWxscHRy
KTsKLSAgICAgICAgfQotCi0gICAgICAgIG1fbnVtYmVyT2ZTZW5kUHJlcGFyZWRTZXNzaW9ucyA9
IGkgKyAxOwotICAgIH0KLQotICAgIHJldHVybiBVcGRhdGVSZXN1bHQ6OlN1Y2Nlc3M7Ci19Ci0K
LXZvaWQgTWVkaWFFbmRwb2ludE93cjo6YWRkUmVtb3RlQ2FuZGlkYXRlKGNvbnN0IEljZUNhbmRp
ZGF0ZSYgY2FuZGlkYXRlLCBjb25zdCBTdHJpbmcmIG1pZCwgY29uc3QgU3RyaW5nJiB1ZnJhZywg
Y29uc3QgU3RyaW5nJiBwYXNzd29yZCkKLXsKLSAgICBmb3IgKGF1dG8mIHRyYW5zY2VpdmVyIDog
bV90cmFuc2NlaXZlcnMpIHsKLSAgICAgICAgaWYgKHRyYW5zY2VpdmVyLT5taWQoKSA9PSBtaWQp
IHsKLSAgICAgICAgICAgIGludGVybmFsQWRkUmVtb3RlQ2FuZGlkYXRlKHRyYW5zY2VpdmVyLT5z
ZXNzaW9uKCksIGNhbmRpZGF0ZSwgdWZyYWcsIHBhc3N3b3JkKTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIE1lZGlhRW5kcG9pbnRPd3I6OnJlcGxhY2VN
dXRlZFJlbW90ZVNvdXJjZU1pZChjb25zdCBTdHJpbmcmIG9sZE1pZCwgY29uc3QgU3RyaW5nJiBu
ZXdNaWQpCi17Ci0gICAgUmVmUHRyPFJlYWx0aW1lTWVkaWFTb3VyY2VPd3I+IHJlbW90ZVNvdXJj
ZSA9IG1fbXV0ZWRSZW1vdGVTb3VyY2VzLnRha2Uob2xkTWlkKTsKLSAgICBtX211dGVkUmVtb3Rl
U291cmNlcy5zZXQobmV3TWlkLCByZW1vdGVTb3VyY2UpOwotfQotCi1SZWY8UmVhbHRpbWVNZWRp
YVNvdXJjZT4gTWVkaWFFbmRwb2ludE93cjo6Y3JlYXRlTXV0ZWRSZW1vdGVTb3VyY2UoY29uc3Qg
U3RyaW5nJiBtaWQsIFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGUgdHlwZSkKLXsKLSAgICBTdHJp
bmcgbmFtZTsKLSAgICBTdHJpbmcgaWQoIm5vdCB1c2VkIik7Ci0gICAgUmVmUHRyPFJlYWx0aW1l
TWVkaWFTb3VyY2VPd3I+IHNvdXJjZTsKLQotICAgIHN3aXRjaCAodHlwZSkgewotICAgIGNhc2Ug
UmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlwZTo6QXVkaW86Ci0gICAgICAgIG5hbWUgPSAicmVtb3Rl
IGF1ZGlvIjsKLSAgICAgICAgc291cmNlID0gYWRvcHRSZWYobmV3IFJlYWx0aW1lQXVkaW9Tb3Vy
Y2VPd3IobnVsbHB0ciwgaWQsIHR5cGUsIG5hbWUpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBSZWFsdGltZU1lZGlhU291cmNlOjpUeXBlOjpWaWRlbzoKLSAgICAgICAgbmFtZSA9ICJyZW1v
dGUgdmlkZW8iOwotICAgICAgICBzb3VyY2UgPSBhZG9wdFJlZihuZXcgUmVhbHRpbWVWaWRlb1Nv
dXJjZU93cihudWxscHRyLCBpZCwgdHlwZSwgbmFtZSkpOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGU6Ok5vbmU6Ci0gICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgIH0KLQotICAgIG1fbXV0ZWRSZW1vdGVTb3VyY2VzLnNldChtaWQsIHNv
dXJjZSk7Ci0KLSAgICByZXR1cm4gKnNvdXJjZTsKLX0KLQotdm9pZCBNZWRpYUVuZHBvaW50T3dy
OjpyZXBsYWNlU2VuZFNvdXJjZShSZWFsdGltZU1lZGlhU291cmNlJiBuZXdTb3VyY2UsIGNvbnN0
IFN0cmluZyYgbWlkKQotewotICAgIFVOVVNFRF9QQVJBTShuZXdTb3VyY2UpOwotICAgIFVOVVNF
RF9QQVJBTShtaWQpOwotCi0gICAgLy8gRklYTUU6IFdlIHdhbnQgdG8gdXNlIG93cl9tZWRpYV9z
ZXNzaW9uX3NldF9zZW5kX3NvdXJjZSBoZXJlLCBidXQgaXQgZG9lc24ndCB3b3JrIGFzIGludGVu
ZGVkLgotICAgIC8vIElzc3VlIHRyYWNrZWQgYnkgT3BlbldlYlJUQyBidWc6IGh0dHBzOi8vZ2l0
aHViLmNvbS9Fcmljc3NvblJlc2VhcmNoL29wZW53ZWJydGMvaXNzdWVzLzUzMwotCi0gICAgbm90
SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBNZWRpYUVuZHBvaW50T3dyOjpzdG9wKCkKLXsKLSAg
ICBpZiAoIW1fdHJhbnNwb3J0QWdlbnQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGZvciAoYXV0
byYgdHJhbnNjZWl2ZXIgOiBtX3RyYW5zY2VpdmVycykKLSAgICAgICAgb3dyX21lZGlhX3Nlc3Np
b25fc2V0X3NlbmRfc291cmNlKE9XUl9NRURJQV9TRVNTSU9OKHRyYW5zY2VpdmVyLT5zZXNzaW9u
KCkpLCBudWxscHRyKTsKLQotICAgIGdfb2JqZWN0X3VucmVmKG1fdHJhbnNwb3J0QWdlbnQpOwot
ICAgIG1fdHJhbnNwb3J0QWdlbnQgPSBudWxscHRyOwotfQotCi1zaXplX3QgTWVkaWFFbmRwb2lu
dE93cjo6dHJhbnNjZWl2ZXJJbmRleEZvclNlc3Npb24oT3dyU2Vzc2lvbiogc2Vzc2lvbikgY29u
c3QKLXsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV90cmFuc2NlaXZlcnMuc2l6ZSgp
OyArK2kpIHsKLSAgICAgICAgaWYgKG1fdHJhbnNjZWl2ZXJzW2ldLT5zZXNzaW9uKCkgPT0gc2Vz
c2lvbikKLSAgICAgICAgICAgIHJldHVybiBpOwotICAgIH0KLQotICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwotICAgIHJldHVybiBub3RGb3VuZDsKLX0KLQotY29uc3QgU3RyaW5nJiBNZWRpYUVu
ZHBvaW50T3dyOjpzZXNzaW9uTWlkKE93clNlc3Npb24qIHNlc3Npb24pIGNvbnN0Ci17Ci0gICAg
c2l6ZV90IGluZGV4ID0gdHJhbnNjZWl2ZXJJbmRleEZvclNlc3Npb24oc2Vzc2lvbik7Ci0gICAg
cmV0dXJuIG1fdHJhbnNjZWl2ZXJzW2luZGV4XS0+bWlkKCk7Ci19Ci0KLU93clRyYW5zY2VpdmVy
KiBNZWRpYUVuZHBvaW50T3dyOjptYXRjaFRyYW5zY2VpdmVyQnlNaWQoY29uc3QgU3RyaW5nJiBt
aWQpIGNvbnN0Ci17Ci0gICAgZm9yIChhdXRvJiB0cmFuc2NlaXZlciA6IG1fdHJhbnNjZWl2ZXJz
KSB7Ci0gICAgICAgIGlmICh0cmFuc2NlaXZlci0+bWlkKCkgPT0gbWlkKQotICAgICAgICAgICAg
cmV0dXJuIHRyYW5zY2VpdmVyLmdldCgpOwotICAgIH0KLSAgICByZXR1cm4gbnVsbHB0cjsKLX0K
LQotdm9pZCBNZWRpYUVuZHBvaW50T3dyOjpkaXNwYXRjaE5ld0ljZUNhbmRpZGF0ZShjb25zdCBT
dHJpbmcmIG1pZCwgSWNlQ2FuZGlkYXRlJiYgaWNlQ2FuZGlkYXRlKQotewotICAgIG1fY2xpZW50
LmdvdEljZUNhbmRpZGF0ZShtaWQsIFdURk1vdmUoaWNlQ2FuZGlkYXRlKSk7Ci19Ci0KLXZvaWQg
TWVkaWFFbmRwb2ludE93cjo6ZGlzcGF0Y2hHYXRoZXJpbmdEb25lKGNvbnN0IFN0cmluZyYgbWlk
KQotewotICAgIG1fY2xpZW50LmRvbmVHYXRoZXJpbmdDYW5kaWRhdGVzKG1pZCk7Ci19Ci0KLXZv
aWQgTWVkaWFFbmRwb2ludE93cjo6cHJvY2Vzc0ljZVRyYW5zcG9ydFN0YXRlQ2hhbmdlKE93clNl
c3Npb24qIHNlc3Npb24pCi17Ci0gICAgT3dySWNlU3RhdGUgb3dySWNlU3RhdGU7Ci0gICAgZ19v
YmplY3RfZ2V0KHNlc3Npb24sICJpY2UtY29ubmVjdGlvbi1zdGF0ZSIsICZvd3JJY2VTdGF0ZSwg
bnVsbHB0cik7Ci0KLSAgICBPd3JUcmFuc2NlaXZlciYgdHJhbnNjZWl2ZXIgPSAqbV90cmFuc2Nl
aXZlcnNbdHJhbnNjZWl2ZXJJbmRleEZvclNlc3Npb24oc2Vzc2lvbildOwotICAgIGlmIChvd3JJ
Y2VTdGF0ZSA8IHRyYW5zY2VpdmVyLm93ckljZVN0YXRlKCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIHRyYW5zY2VpdmVyLnNldE93ckljZVN0YXRlKG93ckljZVN0YXRlKTsKLQotICAgIC8vIFdl
IGNhbm5vdCBnbyB0byBDb21wbGV0ZWQgaWYgdGhlcmUgbWF5IGJlIG1vcmUgcmVtb3RlIGNhbmRp
ZGF0ZXMuCi0gICAgaWYgKG93ckljZVN0YXRlID09IE9XUl9JQ0VfU1RBVEVfUkVBRFkgJiYgIXRy
YW5zY2VpdmVyLmdvdEVuZE9mUmVtb3RlQ2FuZGlkYXRlcygpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBSVENJY2VUcmFuc3BvcnRTdGF0ZSB0cmFuc3BvcnRTdGF0ZTsKLSAgICBzd2l0Y2ggKG93
ckljZVN0YXRlKSB7Ci0gICAgY2FzZSBPV1JfSUNFX1NUQVRFX0NPTk5FQ1RJTkc6Ci0gICAgICAg
IHRyYW5zcG9ydFN0YXRlID0gUlRDSWNlVHJhbnNwb3J0U3RhdGU6OkNoZWNraW5nOwotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIE9XUl9JQ0VfU1RBVEVfQ09OTkVDVEVEOgotICAgICAgICB0cmFu
c3BvcnRTdGF0ZSA9IFJUQ0ljZVRyYW5zcG9ydFN0YXRlOjpDb25uZWN0ZWQ7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgT1dSX0lDRV9TVEFURV9SRUFEWToKLSAgICAgICAgdHJhbnNwb3J0U3Rh
dGUgPSBSVENJY2VUcmFuc3BvcnRTdGF0ZTo6Q29tcGxldGVkOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIE9XUl9JQ0VfU1RBVEVfRkFJTEVEOgotICAgICAgICB0cmFuc3BvcnRTdGF0ZSA9IFJU
Q0ljZVRyYW5zcG9ydFN0YXRlOjpGYWlsZWQ7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtX2NsaWVudC5pY2VUcmFuc3BvcnRTdGF0
ZUNoYW5nZWQodHJhbnNjZWl2ZXIubWlkKCksIHRyYW5zcG9ydFN0YXRlKTsKLX0KLQotdm9pZCBN
ZWRpYUVuZHBvaW50T3dyOjpkaXNwYXRjaER0bHNGaW5nZXJwcmludChnY2hhciogcHJpdmF0ZUtl
eSwgZ2NoYXIqIGNlcnRpZmljYXRlLCBjb25zdCBTdHJpbmcmIGZpbmdlcnByaW50LCBjb25zdCBT
dHJpbmcmIGZpbmdlcnByaW50RnVuY3Rpb24pCi17Ci0gICAgbV9kdGxzUHJpdmF0ZUtleSA9IFN0
cmluZyhwcml2YXRlS2V5KTsKLSAgICBtX2R0bHNDZXJ0aWZpY2F0ZSA9IFN0cmluZyhjZXJ0aWZp
Y2F0ZSk7Ci0KLSAgICBnX2ZyZWUocHJpdmF0ZUtleSk7Ci0gICAgZ19mcmVlKGNlcnRpZmljYXRl
KTsKLQotICAgIG1fY2xpZW50LmdvdER0bHNGaW5nZXJwcmludChmaW5nZXJwcmludCwgZmluZ2Vy
cHJpbnRGdW5jdGlvbik7Ci19Ci0KLXZvaWQgTWVkaWFFbmRwb2ludE93cjo6dW5tdXRlUmVtb3Rl
U291cmNlKGNvbnN0IFN0cmluZyYgbWlkLCBPd3JNZWRpYVNvdXJjZSogcmVhbFNvdXJjZSkKLXsK
LSAgICBSZWZQdHI8UmVhbHRpbWVNZWRpYVNvdXJjZU93cj4gcmVtb3RlU291cmNlID0gbV9tdXRl
ZFJlbW90ZVNvdXJjZXMudGFrZShtaWQpOwotICAgIGlmICghcmVtb3RlU291cmNlKSB7Ci0gICAg
ICAgIExPR19FUlJPUigiVW5hYmxlIHRvIGZpbmQgbXV0ZWQgcmVtb3RlIHNvdXJjZS4iKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChyZW1vdGVTb3VyY2UtPmlzUHJvZHVjaW5n
RGF0YSgpKQotICAgICAgICByZW1vdGVTb3VyY2UtPnN3YXBPdXRTaGFsbG93U291cmNlKCpyZWFs
U291cmNlKTsKLX0KLQotdm9pZCBNZWRpYUVuZHBvaW50T3dyOjpwcmVwYXJlU2Vzc2lvbihPd3JT
ZXNzaW9uKiBzZXNzaW9uLCBQZWVyTWVkaWFEZXNjcmlwdGlvbiogbWVkaWFEZXNjcmlwdGlvbikK
LXsKLSAgICBnX29iamVjdF9zZXRfZGF0YV9mdWxsKEdfT0JKRUNUKHNlc3Npb24pLCAiaWNlLXVm
cmFnIiwgZ19zdHJkdXAobWVkaWFEZXNjcmlwdGlvbi0+aWNlVWZyYWcuYXNjaWkoKS5kYXRhKCkp
LCBnX2ZyZWUpOwotICAgIGdfb2JqZWN0X3NldF9kYXRhX2Z1bGwoR19PQkpFQ1Qoc2Vzc2lvbiks
ICJpY2UtcGFzc3dvcmQiLCBnX3N0cmR1cChtZWRpYURlc2NyaXB0aW9uLT5pY2VQYXNzd29yZC5h
c2NpaSgpLmRhdGEoKSksIGdfZnJlZSk7Ci0KLSAgICBnX3NpZ25hbF9jb25uZWN0KHNlc3Npb24s
ICJvbi1uZXctY2FuZGlkYXRlIiwgR19DQUxMQkFDSyhnb3RDYW5kaWRhdGUpLCB0aGlzKTsKLSAg
ICBnX3NpZ25hbF9jb25uZWN0KHNlc3Npb24sICJvbi1jYW5kaWRhdGUtZ2F0aGVyaW5nLWRvbmUi
LCBHX0NBTExCQUNLKGNhbmRpZGF0ZUdhdGhlcmluZ0RvbmUpLCB0aGlzKTsKLSAgICBnX3NpZ25h
bF9jb25uZWN0KHNlc3Npb24sICJub3RpZnk6OmljZS1jb25uZWN0aW9uLXN0YXRlIiwgR19DQUxM
QkFDSyhpY2VDb25uZWN0aW9uU3RhdGVDaGFuZ2UpLCB0aGlzKTsKLX0KLQotdm9pZCBNZWRpYUVu
ZHBvaW50T3dyOjpwcmVwYXJlTWVkaWFTZXNzaW9uKE93ck1lZGlhU2Vzc2lvbiogbWVkaWFTZXNz
aW9uLCBQZWVyTWVkaWFEZXNjcmlwdGlvbiogbWVkaWFEZXNjcmlwdGlvbiwgYm9vbCBpc0luaXRp
YXRvcikKLXsKLSAgICBwcmVwYXJlU2Vzc2lvbihPV1JfU0VTU0lPTihtZWRpYVNlc3Npb24pLCBt
ZWRpYURlc2NyaXB0aW9uKTsKLQotICAgIGJvb2wgdXNlUnRjcE11eCA9ICFpc0luaXRpYXRvciAm
JiBtZWRpYURlc2NyaXB0aW9uLT5ydGNwTXV4OwotICAgIGdfb2JqZWN0X3NldChtZWRpYVNlc3Np
b24sICJydGNwLW11eCIsIHVzZVJ0Y3BNdXgsIG51bGxwdHIpOwotCi0gICAgaWYgKCFtZWRpYURl
c2NyaXB0aW9uLT5jbmFtZS5pc0VtcHR5KCkgJiYgbWVkaWFEZXNjcmlwdGlvbi0+c3NyY3Muc2l6
ZSgpKSB7Ci0gICAgICAgIGdfb2JqZWN0X3NldChtZWRpYVNlc3Npb24sICJjbmFtZSIsIG1lZGlh
RGVzY3JpcHRpb24tPmNuYW1lLmFzY2lpKCkuZGF0YSgpLAotICAgICAgICAgICAgInNlbmQtc3Ny
YyIsIG1lZGlhRGVzY3JpcHRpb24tPnNzcmNzWzBdLAotICAgICAgICAgICAgbnVsbHB0cik7Ci0g
ICAgfQotCi0gICAgZ19zaWduYWxfY29ubmVjdChtZWRpYVNlc3Npb24sICJvbi1pbmNvbWluZy1z
b3VyY2UiLCBHX0NBTExCQUNLKGdvdEluY29taW5nU291cmNlKSwgdGhpcyk7Ci0KLSAgICBmb3Ig
KGF1dG8mIHBheWxvYWQgOiBtZWRpYURlc2NyaXB0aW9uLT5wYXlsb2FkcykgewotICAgICAgICBp
ZiAocGF5bG9hZC5lbmNvZGluZ05hbWUuY29udmVydFRvQVNDSUlVcHBlcmNhc2UoKSA9PSAiUlRY
IikKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGF1dG8qIHJ0eFBheWxvYWQgPSBm
aW5kUnR4UGF5bG9hZChtZWRpYURlc2NyaXB0aW9uLT5wYXlsb2FkcywgcGF5bG9hZC50eXBlKTsK
LQotICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKGNvZGVjVHlwZXMuZmluZChwYXlsb2FkLmVu
Y29kaW5nTmFtZS5jb252ZXJ0VG9BU0NJSVVwcGVyY2FzZSgpKSAhPSBub3RGb3VuZCwgIlVuYWJs
ZSB0byBmaW5kIGNvZGVjOiAlcyIsIHBheWxvYWQuZW5jb2RpbmdOYW1lLnV0ZjgoKS5kYXRhKCkp
OwotICAgICAgICBPd3JDb2RlY1R5cGUgY29kZWNUeXBlID0gc3RhdGljX2Nhc3Q8T3dyQ29kZWNU
eXBlPihjb2RlY1R5cGVzLmZpbmQocGF5bG9hZC5lbmNvZGluZ05hbWUuY29udmVydFRvQVNDSUlV
cHBlcmNhc2UoKSkpOwotCi0gICAgICAgIE93clBheWxvYWQqIHJlY2VpdmVQYXlsb2FkOwotICAg
ICAgICBpZiAobWVkaWFEZXNjcmlwdGlvbi0+dHlwZSA9PSAiYXVkaW8iKQotICAgICAgICAgICAg
cmVjZWl2ZVBheWxvYWQgPSBvd3JfYXVkaW9fcGF5bG9hZF9uZXcoY29kZWNUeXBlLCBwYXlsb2Fk
LnR5cGUsIHBheWxvYWQuY2xvY2tSYXRlLCBwYXlsb2FkLmNoYW5uZWxzKTsKLSAgICAgICAgZWxz
ZSB7Ci0gICAgICAgICAgICByZWNlaXZlUGF5bG9hZCA9IG93cl92aWRlb19wYXlsb2FkX25ldyhj
b2RlY1R5cGUsIHBheWxvYWQudHlwZSwgcGF5bG9hZC5jbG9ja1JhdGUsIHBheWxvYWQuY2NtZmly
LCBwYXlsb2FkLm5hY2twbGkpOwotICAgICAgICAgICAgZ19vYmplY3Rfc2V0KHJlY2VpdmVQYXls
b2FkLCAicnR4LXBheWxvYWQtdHlwZSIsIHJ0eFBheWxvYWQgPyBydHhQYXlsb2FkLT50eXBlIDog
LTEsCi0gICAgICAgICAgICAgICAgInJ0eC10aW1lIiwgcnR4UGF5bG9hZCAmJiBydHhQYXlsb2Fk
LT5wYXJhbWV0ZXJzLmNvbnRhaW5zKCJydHhUaW1lIikgPyBydHhQYXlsb2FkLT5wYXJhbWV0ZXJz
LmdldCgicnR4VGltZSIpIDogMCwgbnVsbHB0cik7Ci0gICAgICAgIH0KLQotICAgICAgICBvd3Jf
bWVkaWFfc2Vzc2lvbl9hZGRfcmVjZWl2ZV9wYXlsb2FkKG1lZGlhU2Vzc2lvbiwgcmVjZWl2ZVBh
eWxvYWQpOwotICAgIH0KLX0KLQotc3RydWN0IEhlbHBlclNlcnZlclVybCB7Ci0gICAgU3RyaW5n
IHByb3RvY29sOwotICAgIFN0cmluZyBob3N0OwotICAgIHVuc2lnbmVkIHNob3J0IHBvcnQ7Ci0g
ICAgU3RyaW5nIHF1ZXJ5OwotfTsKLQotc3RhdGljIHZvaWQgcGFyc2VIZWxwZXJTZXJ2ZXJVcmwo
R1JlZ2V4JiByZWdleCwgY29uc3QgVVJMJiB1cmwsIEhlbHBlclNlcnZlclVybCYgb3V0VXJsKQot
ewotICAgIEdNYXRjaEluZm8qIG1hdGNoSW5mbzsKLQotICAgIGlmIChnX3JlZ2V4X21hdGNoKCZy
ZWdleCwgdXJsLnN0cmluZygpLmFzY2lpKCkuZGF0YSgpLCBzdGF0aWNfY2FzdDxHUmVnZXhNYXRj
aEZsYWdzPigwKSwgJm1hdGNoSW5mbykpIHsKLSAgICAgICAgZ2NoYXIqKiBtYXRjaGVzID0gIGdf
bWF0Y2hfaW5mb19mZXRjaF9hbGwobWF0Y2hJbmZvKTsKLSAgICAgICAgZ2ludCBtYXRjaENvdW50
ID0gZ19zdHJ2X2xlbmd0aChtYXRjaGVzKTsKLQotICAgICAgICBvdXRVcmwucHJvdG9jb2wgPSBt
YXRjaGVzWzFdOwotICAgICAgICBvdXRVcmwuaG9zdCA9IG1hdGNoZXNbMl1bMF0gPT0gJ1snID8g
U3RyaW5nKG1hdGNoZXNbMl0gKyAxLCBzdHJsZW4obWF0Y2hlc1syXSkgLSAyKSAvLyBJUHY2Ci0g
ICAgICAgICAgICA6IG1hdGNoZXNbMl07Ci0KLSAgICAgICAgb3V0VXJsLnBvcnQgPSAwOwotICAg
ICAgICBpZiAobWF0Y2hDb3VudCA+PSA0KSB7Ci0gICAgICAgICAgICBTdHJpbmcgcG9ydFN0cmlu
ZyA9IFN0cmluZyhtYXRjaGVzWzNdICsgMSk7IC8vIFNraXAgcG9ydCBjb2xvbgotICAgICAgICAg
ICAgb3V0VXJsLnBvcnQgPSBwb3J0U3RyaW5nLnRvVUludFN0cmljdCgpOwotICAgICAgICB9Ci0K
LSAgICAgICAgaWYgKG1hdGNoQ291bnQgPT0gNSkKLSAgICAgICAgICAgIG91dFVybC5xdWVyeSA9
IFN0cmluZyhtYXRjaGVzWzRdICsgMSk7IC8vIFNraXAgcXVlc3Rpb24gbWFyawotCi0gICAgICAg
IGdfc3RyZnJlZXYobWF0Y2hlcyk7Ci0gICAgfQotCi0gICAgZ19tYXRjaF9pbmZvX2ZyZWUobWF0
Y2hJbmZvKTsKLX0KLQotdm9pZCBNZWRpYUVuZHBvaW50T3dyOjplbnN1cmVUcmFuc3BvcnRBZ2Vu
dEFuZFRyYW5zY2VpdmVycyhib29sIGlzSW5pdGlhdG9yLCBjb25zdCBWZWN0b3I8VHJhbnNjZWl2
ZXJDb25maWc+JiB0cmFuc2NlaXZlckNvbmZpZ3MpCi17Ci0gICAgQVNTRVJUKG1fZHRsc1ByaXZh
dGVLZXkpOwotICAgIEFTU0VSVChtX2R0bHNDZXJ0aWZpY2F0ZSk7Ci0KLSAgICBpZiAoIW1fdHJh
bnNwb3J0QWdlbnQpIHsKLSAgICAgICAgLy8gRklYTUU6IEhhbmRsZSBTRFAgQlVORExFIGxpbmUg
ZnJvbSB0aGUgcmVtb3RlIHNvdXJjZSBpbnN0ZWFkIG9mIGZhbGxpbmcgYmFjayB0byBiYWxhbmNl
ZC4KLSAgICAgICAgT3dyQnVuZGxlUG9saWN5VHlwZSBidW5kbGVQb2xpY3kgPSBPV1JfQlVORExF
X1BPTElDWV9UWVBFX0JBTEFOQ0VEOwotCi0gICAgICAgIHN3aXRjaCAobV9jb25maWd1cmF0aW9u
LT5idW5kbGVQb2xpY3kpIHsKLSAgICAgICAgY2FzZSBQZWVyQ29ubmVjdGlvblN0YXRlczo6QnVu
ZGxlUG9saWN5OjpCYWxhbmNlZDoKLSAgICAgICAgICAgIGJ1bmRsZVBvbGljeSA9IE9XUl9CVU5E
TEVfUE9MSUNZX1RZUEVfQkFMQU5DRUQ7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBQZWVyQ29ubmVjdGlvblN0YXRlczo6QnVuZGxlUG9saWN5OjpNYXhDb21wYXQ6Ci0gICAgICAg
ICAgICBidW5kbGVQb2xpY3kgPSBPV1JfQlVORExFX1BPTElDWV9UWVBFX01BWF9DT01QQVQ7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBQZWVyQ29ubmVjdGlvblN0YXRlczo6QnVu
ZGxlUG9saWN5OjpNYXhCdW5kbGU6Ci0gICAgICAgICAgICBidW5kbGVQb2xpY3kgPSBPV1JfQlVO
RExFX1BPTElDWV9UWVBFX01BWF9CVU5ETEU7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ZGVmYXVsdDoKLSAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICB9Owot
Ci0gICAgICAgIG1fdHJhbnNwb3J0QWdlbnQgPSBvd3JfdHJhbnNwb3J0X2FnZW50X25ldyhmYWxz
ZSwgYnVuZGxlUG9saWN5KTsKLQotICAgICAgICBBU1NFUlQobV9jb25maWd1cmF0aW9uKTsKLSAg
ICAgICAgZm9yIChhdXRvJiBzZXJ2ZXIgOiBtX2NvbmZpZ3VyYXRpb24tPmljZVNlcnZlcnMpIHsK
LSAgICAgICAgICAgIGZvciAoYXV0byYgd2Via2l0VXJsIDogc2VydmVyLnVybHMpIHsKLSAgICAg
ICAgICAgICAgICBIZWxwZXJTZXJ2ZXJVcmwgdXJsOwotICAgICAgICAgICAgICAgIC8vIFdlYktp
dCdzIFVSTCBjbGFzcyBjYW4ndCBoYW5kbGUgSUNFIGhlbHBlciBzZXJ2ZXIgdXJscyBwcm9wZXJs
eQotICAgICAgICAgICAgICAgIHBhcnNlSGVscGVyU2VydmVyVXJsKCptX2hlbHBlclNlcnZlclJl
Z0V4LCB3ZWJraXRVcmwsIHVybCk7Ci0KLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCBw
b3J0ID0gdXJsLnBvcnQgPyB1cmwucG9ydCA6IGhlbHBlclNlcnZlckRlZmF1bHRQb3J0OwotCi0g
ICAgICAgICAgICAgICAgaWYgKHVybC5wcm90b2NvbCA9PSAic3R1biIpIHsKLSAgICAgICAgICAg
ICAgICAgICAgb3dyX3RyYW5zcG9ydF9hZ2VudF9hZGRfaGVscGVyX3NlcnZlcihtX3RyYW5zcG9y
dEFnZW50LCBPV1JfSEVMUEVSX1NFUlZFUl9UWVBFX1NUVU4sCi0gICAgICAgICAgICAgICAgICAg
ICAgICB1cmwuaG9zdC5hc2NpaSgpLmRhdGEoKSwgcG9ydCwgbnVsbHB0ciwgbnVsbHB0cik7Ci0K
LSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHVybC5wcm90b2NvbCA9PSAidHVybiIpIHsKLSAg
ICAgICAgICAgICAgICAgICAgT3dySGVscGVyU2VydmVyVHlwZSBzZXJ2ZXJUeXBlID0gdXJsLnF1
ZXJ5ID09ICJ0cmFuc3BvcnQ9dGNwIiA/IE9XUl9IRUxQRVJfU0VSVkVSX1RZUEVfVFVSTl9UQ1AK
LSAgICAgICAgICAgICAgICAgICAgICAgIDogT1dSX0hFTFBFUl9TRVJWRVJfVFlQRV9UVVJOX1VE
UDsKLQotICAgICAgICAgICAgICAgICAgICBvd3JfdHJhbnNwb3J0X2FnZW50X2FkZF9oZWxwZXJf
c2VydmVyKG1fdHJhbnNwb3J0QWdlbnQsIHNlcnZlclR5cGUsCi0gICAgICAgICAgICAgICAgICAg
ICAgICB1cmwuaG9zdC5hc2NpaSgpLmRhdGEoKSwgcG9ydCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHNlcnZlci51c2VybmFtZS5hc2NpaSgpLmRhdGEoKSwgc2VydmVyLmNyZWRlbnRpYWwuYXNj
aWkoKS5kYXRhKCkpOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodXJsLnByb3RvY29sID09
ICJ0dXJucyIpIHsKLSAgICAgICAgICAgICAgICAgICAgb3dyX3RyYW5zcG9ydF9hZ2VudF9hZGRf
aGVscGVyX3NlcnZlcihtX3RyYW5zcG9ydEFnZW50LCBPV1JfSEVMUEVSX1NFUlZFUl9UWVBFX1RV
Uk5fVExTLAotICAgICAgICAgICAgICAgICAgICAgICAgdXJsLmhvc3QuYXNjaWkoKS5kYXRhKCks
IHBvcnQsCi0gICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXIudXNlcm5hbWUuYXNjaWkoKS5k
YXRhKCksIHNlcnZlci5jcmVkZW50aWFsLmFzY2lpKCkuZGF0YSgpKTsKLSAgICAgICAgICAgICAg
ICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBnX29iamVjdF9zZXQobV90cmFuc3Bv
cnRBZ2VudCwgImljZS1jb250cm9sbGluZy1tb2RlIiwgaXNJbml0aWF0b3IsIG51bGxwdHIpOwot
Ci0gICAgZm9yIChhdXRvJiBjb25maWcgOiB0cmFuc2NlaXZlckNvbmZpZ3MpIHsKLSAgICAgICAg
T3dyU2Vzc2lvbiogc2Vzc2lvbiA9IE9XUl9TRVNTSU9OKG93cl9tZWRpYV9zZXNzaW9uX25ldyhj
b25maWcuaXNEdGxzQ2xpZW50KSk7Ci0gICAgICAgIGdfb2JqZWN0X3NldChzZXNzaW9uLCAiZHRs
cy1jZXJ0aWZpY2F0ZSIsIG1fZHRsc0NlcnRpZmljYXRlLnV0ZjgoKS5kYXRhKCksCi0gICAgICAg
ICAgICAiZHRscy1rZXkiLCBtX2R0bHNQcml2YXRlS2V5LnV0ZjgoKS5kYXRhKCksCi0gICAgICAg
ICAgICBudWxscHRyKTsKLQotICAgICAgICBtX3RyYW5zY2VpdmVycy5hcHBlbmQoT3dyVHJhbnNj
ZWl2ZXI6OmNyZWF0ZShjb25maWcubWlkLCBzZXNzaW9uKSk7Ci0gICAgfQotfQotCi12b2lkIE1l
ZGlhRW5kcG9pbnRPd3I6OmludGVybmFsQWRkUmVtb3RlQ2FuZGlkYXRlKE93clNlc3Npb24qIHNl
c3Npb24sIGNvbnN0IEljZUNhbmRpZGF0ZSYgY2FuZGlkYXRlLCBjb25zdCBTdHJpbmcmIHVmcmFn
LCBjb25zdCBTdHJpbmcmIHBhc3N3b3JkKQotewotICAgIGdib29sZWFuIHJ0Y3BNdXg7Ci0gICAg
Z19vYmplY3RfZ2V0KHNlc3Npb24sICJydGNwLW11eCIsICZydGNwTXV4LCBudWxscHRyKTsKLQot
ICAgIGlmIChydGNwTXV4ICYmIGNhbmRpZGF0ZS5jb21wb25lbnRJZCA9PSBPV1JfQ09NUE9ORU5U
X1RZUEVfUlRDUCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKGNhbmRpZGF0ZVR5cGVz
LmZpbmQoY2FuZGlkYXRlLnR5cGUpICE9IG5vdEZvdW5kKTsKLQotICAgIE93ckNhbmRpZGF0ZVR5
cGUgY2FuZGlkYXRlVHlwZSA9IHN0YXRpY19jYXN0PE93ckNhbmRpZGF0ZVR5cGU+KGNhbmRpZGF0
ZVR5cGVzLmZpbmQoY2FuZGlkYXRlLnR5cGUpKTsKLSAgICBPd3JDb21wb25lbnRUeXBlIGNvbXBv
bmVudElkID0gc3RhdGljX2Nhc3Q8T3dyQ29tcG9uZW50VHlwZT4oY2FuZGlkYXRlLmNvbXBvbmVu
dElkKTsKLSAgICBPd3JUcmFuc3BvcnRUeXBlIHRyYW5zcG9ydFR5cGU7Ci0KLSAgICBpZiAoY2Fu
ZGlkYXRlLnRyYW5zcG9ydC5jb252ZXJ0VG9BU0NJSVVwcGVyY2FzZSgpID09ICJVRFAiKQotICAg
ICAgICB0cmFuc3BvcnRUeXBlID0gT1dSX1RSQU5TUE9SVF9UWVBFX1VEUDsKLSAgICBlbHNlIHsK
LSAgICAgICAgQVNTRVJUKGNhbmRpZGF0ZVRjcFR5cGVzLmZpbmQoY2FuZGlkYXRlLnRjcFR5cGUp
ICE9IG5vdEZvdW5kKTsKLSAgICAgICAgdHJhbnNwb3J0VHlwZSA9IHN0YXRpY19jYXN0PE93clRy
YW5zcG9ydFR5cGU+KGNhbmRpZGF0ZVRjcFR5cGVzLmZpbmQoY2FuZGlkYXRlLnRjcFR5cGUpKTsK
LSAgICB9Ci0KLSAgICBPd3JDYW5kaWRhdGUqIG93ckNhbmRpZGF0ZSA9IG93cl9jYW5kaWRhdGVf
bmV3KGNhbmRpZGF0ZVR5cGUsIGNvbXBvbmVudElkKTsKLSAgICBnX29iamVjdF9zZXQob3dyQ2Fu
ZGlkYXRlLCAidHJhbnNwb3J0LXR5cGUiLCB0cmFuc3BvcnRUeXBlLAotICAgICAgICAiYWRkcmVz
cyIsIGNhbmRpZGF0ZS5hZGRyZXNzLmFzY2lpKCkuZGF0YSgpLAotICAgICAgICAicG9ydCIsIGNh
bmRpZGF0ZS5wb3J0LAotICAgICAgICAiYmFzZS1hZGRyZXNzIiwgY2FuZGlkYXRlLnJlbGF0ZWRB
ZGRyZXNzLmFzY2lpKCkuZGF0YSgpLAotICAgICAgICAiYmFzZS1wb3J0IiwgY2FuZGlkYXRlLnJl
bGF0ZWRQb3J0LAotICAgICAgICAicHJpb3JpdHkiLCBjYW5kaWRhdGUucHJpb3JpdHksCi0gICAg
ICAgICJmb3VuZGF0aW9uIiwgY2FuZGlkYXRlLmZvdW5kYXRpb24uYXNjaWkoKS5kYXRhKCksCi0g
ICAgICAgICJ1ZnJhZyIsIHVmcmFnLmFzY2lpKCkuZGF0YSgpLAotICAgICAgICAicGFzc3dvcmQi
LCBwYXNzd29yZC5hc2NpaSgpLmRhdGEoKSwKLSAgICAgICAgbnVsbHB0cik7Ci0KLSAgICBvd3Jf
c2Vzc2lvbl9hZGRfcmVtb3RlX2NhbmRpZGF0ZShzZXNzaW9uLCBvd3JDYW5kaWRhdGUpOwotfQot
Ci1zdGF0aWMgdm9pZCBnb3RDYW5kaWRhdGUoT3dyU2Vzc2lvbiogc2Vzc2lvbiwgT3dyQ2FuZGlk
YXRlKiBjYW5kaWRhdGUsIE1lZGlhRW5kcG9pbnRPd3IqIG1lZGlhRW5kcG9pbnQpCi17Ci0gICAg
T3dyQ2FuZGlkYXRlVHlwZSBjYW5kaWRhdGVUeXBlOwotICAgIGdjaGFyKiBmb3VuZGF0aW9uOwot
ICAgIE93ckNvbXBvbmVudFR5cGUgY29tcG9uZW50SWQ7Ci0gICAgT3dyVHJhbnNwb3J0VHlwZSB0
cmFuc3BvcnRUeXBlOwotICAgIGdpbnQgcHJpb3JpdHk7Ci0gICAgZ2NoYXIqIGFkZHJlc3M7Ci0g
ICAgZ3VpbnQgcG9ydDsKLSAgICBnY2hhciogcmVsYXRlZEFkZHJlc3M7Ci0gICAgZ3VpbnQgcmVs
YXRlZFBvcnQ7Ci0KLSAgICBnX29iamVjdF9nZXQoY2FuZGlkYXRlLCAidHlwZSIsICZjYW5kaWRh
dGVUeXBlLAotICAgICAgICAiZm91bmRhdGlvbiIsICZmb3VuZGF0aW9uLAotICAgICAgICAiY29t
cG9uZW50LXR5cGUiLCAmY29tcG9uZW50SWQsCi0gICAgICAgICJ0cmFuc3BvcnQtdHlwZSIsICZ0
cmFuc3BvcnRUeXBlLAotICAgICAgICAicHJpb3JpdHkiLCAmcHJpb3JpdHksCi0gICAgICAgICJh
ZGRyZXNzIiwgJmFkZHJlc3MsCi0gICAgICAgICJwb3J0IiwgJnBvcnQsCi0gICAgICAgICJiYXNl
LWFkZHJlc3MiLCAmcmVsYXRlZEFkZHJlc3MsCi0gICAgICAgICJiYXNlLXBvcnQiLCAmcmVsYXRl
ZFBvcnQsCi0gICAgICAgIG51bGxwdHIpOwotCi0gICAgQVNTRVJUKGNhbmRpZGF0ZVR5cGUgPj0g
MCAmJiBjYW5kaWRhdGVUeXBlIDwgY2FuZGlkYXRlVHlwZXMuc2l6ZSgpKTsKLSAgICBBU1NFUlQo
dHJhbnNwb3J0VHlwZSA+PSAwICYmIHRyYW5zcG9ydFR5cGUgPCBjYW5kaWRhdGVUY3BUeXBlcy5z
aXplKCkpOwotCi0gICAgSWNlQ2FuZGlkYXRlIGljZUNhbmRpZGF0ZTsKLSAgICBpY2VDYW5kaWRh
dGUudHlwZSA9IGNhbmRpZGF0ZVR5cGVzW2NhbmRpZGF0ZVR5cGVdOwotICAgIGljZUNhbmRpZGF0
ZS5mb3VuZGF0aW9uID0gZm91bmRhdGlvbjsKLSAgICBpY2VDYW5kaWRhdGUuY29tcG9uZW50SWQg
PSBjb21wb25lbnRJZDsKLSAgICBpY2VDYW5kaWRhdGUucHJpb3JpdHkgPSBwcmlvcml0eTsKLSAg
ICBpY2VDYW5kaWRhdGUuYWRkcmVzcyA9IGFkZHJlc3M7Ci0gICAgaWNlQ2FuZGlkYXRlLnBvcnQg
PSBwb3J0ID8gcG9ydCA6IGNhbmRpZGF0ZURlZmF1bHRQb3J0OwotCi0gICAgaWYgKHRyYW5zcG9y
dFR5cGUgPT0gT1dSX1RSQU5TUE9SVF9UWVBFX1VEUCkKLSAgICAgICAgaWNlQ2FuZGlkYXRlLnRy
YW5zcG9ydCA9ICJVRFAiOwotICAgIGVsc2UgewotICAgICAgICBpY2VDYW5kaWRhdGUudHJhbnNw
b3J0ID0gIlRDUCI7Ci0gICAgICAgIGljZUNhbmRpZGF0ZS50Y3BUeXBlID0gY2FuZGlkYXRlVGNw
VHlwZXNbdHJhbnNwb3J0VHlwZV07Ci0gICAgfQotCi0gICAgaWYgKGNhbmRpZGF0ZVR5cGUgIT0g
T1dSX0NBTkRJREFURV9UWVBFX0hPU1QpIHsKLSAgICAgICAgaWNlQ2FuZGlkYXRlLnJlbGF0ZWRB
ZGRyZXNzID0gcmVsYXRlZEFkZHJlc3M7Ci0gICAgICAgIGljZUNhbmRpZGF0ZS5yZWxhdGVkUG9y
dCA9IHJlbGF0ZWRQb3J0ID8gcmVsYXRlZFBvcnQgOiBjYW5kaWRhdGVEZWZhdWx0UG9ydDsKLSAg
ICB9Ci0KLSAgICBnX29iamVjdF9zZXQoR19PQkpFQ1QoY2FuZGlkYXRlKSwgInVmcmFnIiwgZ19v
YmplY3RfZ2V0X2RhdGEoR19PQkpFQ1Qoc2Vzc2lvbiksICJpY2UtdWZyYWciKSwKLSAgICAgICAg
InBhc3N3b3JkIiwgZ19vYmplY3RfZ2V0X2RhdGEoR19PQkpFQ1Qoc2Vzc2lvbiksICJpY2UtcGFz
c3dvcmQiKSwKLSAgICAgICAgbnVsbHB0cik7Ci0KLSAgICBtZWRpYUVuZHBvaW50LT5kaXNwYXRj
aE5ld0ljZUNhbmRpZGF0ZShtZWRpYUVuZHBvaW50LT5zZXNzaW9uTWlkKHNlc3Npb24pLCBXVEZN
b3ZlKGljZUNhbmRpZGF0ZSkpOwotCi0gICAgZ19mcmVlKGZvdW5kYXRpb24pOwotICAgIGdfZnJl
ZShhZGRyZXNzKTsKLSAgICBnX2ZyZWUocmVsYXRlZEFkZHJlc3MpOwotfQotCi1zdGF0aWMgdm9p
ZCBjYW5kaWRhdGVHYXRoZXJpbmdEb25lKE93clNlc3Npb24qIHNlc3Npb24sIE1lZGlhRW5kcG9p
bnRPd3IqIG1lZGlhRW5kcG9pbnQpCi17Ci0gICAgbWVkaWFFbmRwb2ludC0+ZGlzcGF0Y2hHYXRo
ZXJpbmdEb25lKG1lZGlhRW5kcG9pbnQtPnNlc3Npb25NaWQoc2Vzc2lvbikpOwotfQotCi1zdGF0
aWMgdm9pZCBpY2VDb25uZWN0aW9uU3RhdGVDaGFuZ2UoT3dyU2Vzc2lvbiogc2Vzc2lvbiwgR1Bh
cmFtU3BlYyosIE1lZGlhRW5kcG9pbnRPd3IqIG1lZGlhRW5kcG9pbnQpCi17Ci0gICAgbWVkaWFF
bmRwb2ludC0+cHJvY2Vzc0ljZVRyYW5zcG9ydFN0YXRlQ2hhbmdlKHNlc3Npb24pOwotfQotCi1z
dGF0aWMgdm9pZCBnb3RJbmNvbWluZ1NvdXJjZShPd3JNZWRpYVNlc3Npb24qIG1lZGlhU2Vzc2lv
biwgT3dyTWVkaWFTb3VyY2UqIHNvdXJjZSwgTWVkaWFFbmRwb2ludE93ciogbWVkaWFFbmRwb2lu
dCkKLXsKLSAgICBtZWRpYUVuZHBvaW50LT51bm11dGVSZW1vdGVTb3VyY2UobWVkaWFFbmRwb2lu
dC0+c2Vzc2lvbk1pZChPV1JfU0VTU0lPTihtZWRpYVNlc3Npb24pKSwgc291cmNlKTsKLX0KLQot
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKFdFQl9SVEMpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9vcGVud2VicnRjL01l
ZGlhRW5kcG9pbnRPd3IuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL29w
ZW53ZWJydGMvTWVkaWFFbmRwb2ludE93ci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCBmMzEwNDhjOWVjZmVlZTM1MGFjMjlmNjIyMWFjZDBjMmVhZGI5MGY3Li4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21lZGlhc3RyZWFtL29wZW53ZWJydGMvTWVkaWFFbmRwb2ludE93ci5oCisrKyAvZGV2L251bGwK
QEAgLTEsMTQ5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUsIDIwMTYgRXJpY3Nz
b24gQUIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIKLSAqICAgIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqICAgIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIE5l
aXRoZXIgdGhlIG5hbWUgb2YgRXJpY3Nzb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0
b3JzCi0gKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZCBmcm9tIHRoaXMKLSAqICAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAq
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUo
V0VCX1JUQykKLQotI2luY2x1ZGUgIk1lZGlhRW5kcG9pbnQuaCIKLSNpbmNsdWRlIDxvd3Ivb3dy
X3Nlc3Npb24uaD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotI2luY2x1ZGUgPHd0Zi9S
ZWZQdHIuaD4KLQotdHlwZWRlZiBzdHJ1Y3QgX093ck1lZGlhU2Vzc2lvbiBPd3JNZWRpYVNlc3Np
b247Ci10eXBlZGVmIHN0cnVjdCBfT3dyTWVkaWFTb3VyY2UgT3dyTWVkaWFTb3VyY2U7Ci10eXBl
ZGVmIHN0cnVjdCBfT3dyVHJhbnNwb3J0QWdlbnQgT3dyVHJhbnNwb3J0QWdlbnQ7Ci0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgUmVhbHRpbWVNZWRpYVNvdXJjZU93cjsKLWNsYXNzIFJU
Q0NvbmZpZ3VyYXRpb25Qcml2YXRlOwotCi1zdHJ1Y3QgUGVlck1lZGlhRGVzY3JpcHRpb247Ci0K
LWNsYXNzIE93clRyYW5zY2VpdmVyIDogcHVibGljIFJlZkNvdW50ZWQ8T3dyVHJhbnNjZWl2ZXI+
IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPE93clRyYW5zY2VpdmVyPiBjcmVhdGUoY29uc3Qg
U3RyaW5nJiBtaWQsIE93clNlc3Npb24qIHNlc3Npb24pCi0gICAgewotICAgICAgICByZXR1cm4g
YWRvcHRSZWYoKm5ldyBPd3JUcmFuc2NlaXZlcihtaWQsIHNlc3Npb24pKTsKLSAgICB9Ci0gICAg
dmlydHVhbCB+T3dyVHJhbnNjZWl2ZXIoKSB7IH0KLQotICAgIGNvbnN0IFN0cmluZyYgbWlkKCkg
Y29uc3QgeyByZXR1cm4gbV9taWQ7IH0KLSAgICBPd3JTZXNzaW9uKiBzZXNzaW9uKCkgY29uc3Qg
eyByZXR1cm4gbV9zZXNzaW9uOyB9Ci0KLSAgICBPd3JJY2VTdGF0ZSBvd3JJY2VTdGF0ZSgpIGNv
bnN0IHsgcmV0dXJuIG1fb3dySWNlU3RhdGU7IH0KLSAgICB2b2lkIHNldE93ckljZVN0YXRlKE93
ckljZVN0YXRlIHN0YXRlKSB7IG1fb3dySWNlU3RhdGUgPSBzdGF0ZTsgfQotCi0gICAgYm9vbCBn
b3RFbmRPZlJlbW90ZUNhbmRpZGF0ZXMoKSBjb25zdCB7IHJldHVybiBtX2dvdEVuZE9mUmVtb3Rl
Q2FuZGlkYXRlczsgfQotICAgIHZvaWQgbWFya0dvdEVuZE9mUmVtb3RlQ2FuZGlkYXRlcygpIHsg
bV9nb3RFbmRPZlJlbW90ZUNhbmRpZGF0ZXMgPSB0cnVlOyB9Ci0KLXByaXZhdGU6Ci0gICAgT3dy
VHJhbnNjZWl2ZXIoY29uc3QgU3RyaW5nJiBtaWQsIE93clNlc3Npb24qIHNlc3Npb24pCi0gICAg
ICAgIDogbV9taWQobWlkKQotICAgICAgICAsIG1fc2Vzc2lvbihzZXNzaW9uKQotICAgIHsgfQot
Ci0gICAgU3RyaW5nIG1fbWlkOwotICAgIE93clNlc3Npb24qIG1fc2Vzc2lvbjsKLQotICAgIE93
ckljZVN0YXRlIG1fb3dySWNlU3RhdGUgeyBPV1JfSUNFX1NUQVRFX0RJU0NPTk5FQ1RFRCB9Owot
ICAgIGJvb2wgbV9nb3RFbmRPZlJlbW90ZUNhbmRpZGF0ZXMgeyBmYWxzZSB9OwotfTsKLQotY2xh
c3MgTWVkaWFFbmRwb2ludE93ciA6IHB1YmxpYyBNZWRpYUVuZHBvaW50IHsKLXB1YmxpYzoKLSAg
ICBNZWRpYUVuZHBvaW50T3dyKE1lZGlhRW5kcG9pbnRDbGllbnQmKTsKLSAgICB+TWVkaWFFbmRw
b2ludE93cigpOwotCi0gICAgdm9pZCBzZXRDb25maWd1cmF0aW9uKE1lZGlhRW5kcG9pbnRDb25m
aWd1cmF0aW9uJiYpIG92ZXJyaWRlOwotCi0gICAgdm9pZCBnZW5lcmF0ZUR0bHNJbmZvKCkgb3Zl
cnJpZGU7Ci0gICAgTWVkaWFQYXlsb2FkVmVjdG9yIGdldERlZmF1bHRBdWRpb1BheWxvYWRzKCkg
b3ZlcnJpZGU7Ci0gICAgTWVkaWFQYXlsb2FkVmVjdG9yIGdldERlZmF1bHRWaWRlb1BheWxvYWRz
KCkgb3ZlcnJpZGU7Ci0gICAgTWVkaWFQYXlsb2FkVmVjdG9yIGZpbHRlclBheWxvYWRzKGNvbnN0
IE1lZGlhUGF5bG9hZFZlY3RvciYgcmVtb3RlUGF5bG9hZHMsIGNvbnN0IE1lZGlhUGF5bG9hZFZl
Y3RvciYgZGVmYXVsdFBheWxvYWRzKSBvdmVycmlkZTsKLQotICAgIFVwZGF0ZVJlc3VsdCB1cGRh
dGVSZWNlaXZlQ29uZmlndXJhdGlvbihNZWRpYUVuZHBvaW50U2Vzc2lvbkNvbmZpZ3VyYXRpb24q
LCBib29sIGlzSW5pdGlhdG9yKSBvdmVycmlkZTsKLSAgICBVcGRhdGVSZXN1bHQgdXBkYXRlU2Vu
ZENvbmZpZ3VyYXRpb24oTWVkaWFFbmRwb2ludFNlc3Npb25Db25maWd1cmF0aW9uKiwgY29uc3Qg
UmVhbHRpbWVNZWRpYVNvdXJjZU1hcCYsIGJvb2wgaXNJbml0aWF0b3IpIG92ZXJyaWRlOwotCi0g
ICAgdm9pZCBhZGRSZW1vdGVDYW5kaWRhdGUoY29uc3QgSWNlQ2FuZGlkYXRlJiwgY29uc3QgU3Ry
aW5nJiBtaWQsIGNvbnN0IFN0cmluZyYgdWZyYWcsIGNvbnN0IFN0cmluZyYgcGFzc3dvcmQpIG92
ZXJyaWRlOwotCi0gICAgUmVmPFJlYWx0aW1lTWVkaWFTb3VyY2U+IGNyZWF0ZU11dGVkUmVtb3Rl
U291cmNlKGNvbnN0IFN0cmluZyYgbWlkLCBSZWFsdGltZU1lZGlhU291cmNlOjpUeXBlKSBvdmVy
cmlkZTsKLSAgICB2b2lkIHJlcGxhY2VNdXRlZFJlbW90ZVNvdXJjZU1pZChjb25zdCBTdHJpbmcm
LCBjb25zdCBTdHJpbmcmKSBmaW5hbDsKLSAgICB2b2lkIHJlcGxhY2VTZW5kU291cmNlKFJlYWx0
aW1lTWVkaWFTb3VyY2UmLCBjb25zdCBTdHJpbmcmIG1pZCkgb3ZlcnJpZGU7Ci0KLSAgICB2b2lk
IHN0b3AoKSBvdmVycmlkZTsKLQotICAgIHNpemVfdCB0cmFuc2NlaXZlckluZGV4Rm9yU2Vzc2lv
bihPd3JTZXNzaW9uKikgY29uc3Q7Ci0gICAgY29uc3QgU3RyaW5nJiBzZXNzaW9uTWlkKE93clNl
c3Npb24qKSBjb25zdDsKLSAgICBPd3JUcmFuc2NlaXZlciogbWF0Y2hUcmFuc2NlaXZlckJ5TWlk
KGNvbnN0IFN0cmluZyYgbWlkKSBjb25zdDsKLQotICAgIHZvaWQgZGlzcGF0Y2hOZXdJY2VDYW5k
aWRhdGUoY29uc3QgU3RyaW5nJiBtaWQsIEljZUNhbmRpZGF0ZSYmKTsKLSAgICB2b2lkIGRpc3Bh
dGNoR2F0aGVyaW5nRG9uZShjb25zdCBTdHJpbmcmIG1pZCk7Ci0gICAgdm9pZCBwcm9jZXNzSWNl
VHJhbnNwb3J0U3RhdGVDaGFuZ2UoT3dyU2Vzc2lvbiopOwotICAgIHZvaWQgZGlzcGF0Y2hEdGxz
RmluZ2VycHJpbnQoZ2NoYXIqIHByaXZhdGVLZXksIGdjaGFyKiBjZXJ0aWZpY2F0ZSwgY29uc3Qg
U3RyaW5nJiBmaW5nZXJwcmludCwgY29uc3QgU3RyaW5nJiBmaW5nZXJwcmludEZ1bmN0aW9uKTsK
LSAgICB2b2lkIHVubXV0ZVJlbW90ZVNvdXJjZShjb25zdCBTdHJpbmcmIG1pZCwgT3dyTWVkaWFT
b3VyY2UqKTsKLQotcHJpdmF0ZToKLSAgICBlbnVtIFNlc3Npb25UeXBlIHsgU2Vzc2lvblR5cGVN
ZWRpYSB9OwotCi0gICAgc3RydWN0IFRyYW5zY2VpdmVyQ29uZmlnIHsKLSAgICAgICAgU2Vzc2lv
blR5cGUgdHlwZTsKLSAgICAgICAgYm9vbCBpc0R0bHNDbGllbnQ7Ci0gICAgICAgIFN0cmluZyBt
aWQ7Ci0gICAgfTsKLQotICAgIHN0ZDo6dW5pcXVlX3B0cjxSVENEYXRhQ2hhbm5lbEhhbmRsZXI+
IGNyZWF0ZURhdGFDaGFubmVsSGFuZGxlcihjb25zdCBTdHJpbmcmLCBjb25zdCBSVENEYXRhQ2hh
bm5lbEluaXQmKSBmaW5hbDsKLQotICAgIHZvaWQgcHJlcGFyZVNlc3Npb24oT3dyU2Vzc2lvbios
IFBlZXJNZWRpYURlc2NyaXB0aW9uKik7Ci0gICAgdm9pZCBwcmVwYXJlTWVkaWFTZXNzaW9uKE93
ck1lZGlhU2Vzc2lvbiosIFBlZXJNZWRpYURlc2NyaXB0aW9uKiwgYm9vbCBpc0luaXRpYXRvcik7
Ci0KLSAgICB2b2lkIGVuc3VyZVRyYW5zcG9ydEFnZW50QW5kVHJhbnNjZWl2ZXJzKGJvb2wgaXNJ
bml0aWF0b3IsIGNvbnN0IFZlY3RvcjxUcmFuc2NlaXZlckNvbmZpZz4mKTsKLSAgICB2b2lkIGlu
dGVybmFsQWRkUmVtb3RlQ2FuZGlkYXRlKE93clNlc3Npb24qLCBjb25zdCBJY2VDYW5kaWRhdGUm
LCBjb25zdCBTdHJpbmcmIHVmcmFnLCBjb25zdCBTdHJpbmcmIHBhc3N3b3JkKTsKLQotICAgIHN0
ZDo6b3B0aW9uYWw8TWVkaWFFbmRwb2ludENvbmZpZ3VyYXRpb24+IG1fY29uZmlndXJhdGlvbjsK
LSAgICBHUmVnZXgqIG1faGVscGVyU2VydmVyUmVnRXg7Ci0KLSAgICBPd3JUcmFuc3BvcnRBZ2Vu
dCogbV90cmFuc3BvcnRBZ2VudDsKLSAgICBWZWN0b3I8UmVmUHRyPE93clRyYW5zY2VpdmVyPj4g
bV90cmFuc2NlaXZlcnM7Ci0gICAgSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxSZWFsdGltZU1lZGlh
U291cmNlT3dyPj4gbV9tdXRlZFJlbW90ZVNvdXJjZXM7Ci0KLSAgICBNZWRpYUVuZHBvaW50Q2xp
ZW50JiBtX2NsaWVudDsKLQotICAgIHVuc2lnbmVkIG1fbnVtYmVyT2ZSZWNlaXZlUHJlcGFyZWRT
ZXNzaW9uczsKLSAgICB1bnNpZ25lZCBtX251bWJlck9mU2VuZFByZXBhcmVkU2Vzc2lvbnM7Ci0K
LSAgICBTdHJpbmcgbV9kdGxzUHJpdmF0ZUtleTsKLSAgICBTdHJpbmcgbV9kdGxzQ2VydGlmaWNh
dGU7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoV0VC
X1JUQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL29w
ZW53ZWJydGMvT3BlbldlYlJUQ1V0aWxpdGllcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tZWRpYXN0cmVhbS9vcGVud2VicnRjL09wZW5XZWJSVENVdGlsaXRpZXMuY3BwCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNGNmYjU5ZGY1MDFkOWIxZTE3NGU3NzQwYjc2NDdiMWE0
OGM5MzYwLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL29wZW53ZWJydGMvT3BlbldlYlJUQ1V0
aWxpdGllcy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw1NyArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDE1IElnYWxpYSBTLkwKLSAqIENvcHlyaWdodCAoQykgMjAxNSBNZXRyb2xvZ2lj
YWwKLSAqCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zIGFyZQotICogbWV0OgotICoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogMy4gTmVpdGhl
ciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlIG5hbWVzIG9mIGl0cwot
ICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
LSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0K
LSNpZiBVU0UoT1BFTldFQlJUQykKLSNpbmNsdWRlICJPcGVuV2ViUlRDVXRpbGl0aWVzLmgiCi0K
LSNpbmNsdWRlIDxvd3Ivb3dyLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotdm9pZCBpbml0
aWFsaXplT3BlbldlYlJUQygpCi17Ci0gICAgc3RhdGljIGJvb2wgaXNJbml0aWFsaXplZCA9IGZh
bHNlOwotICAgIGlmIChpc0luaXRpYWxpemVkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBvd3Jf
aW5pdChnX21haW5fY29udGV4dF9kZWZhdWx0KCkpOwotICAgIGlzSW5pdGlhbGl6ZWQgPSB0cnVl
OwotfQotCi19Ci0KLSNlbmRpZiAvLyBVU0UoT1BFTldFQlJUQykKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL29wZW53ZWJydGMvT3BlbldlYlJUQ1V0aWxp
dGllcy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vb3BlbndlYnJ0Yy9P
cGVuV2ViUlRDVXRpbGl0aWVzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJlZDQ3
NGJiZmE0YzUzMjI3ZmI1NjY5YWI0YjMzMGM2MmZhYzg5YjguLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFz
dHJlYW0vb3BlbndlYnJ0Yy9PcGVuV2ViUlRDVXRpbGl0aWVzLmgKKysrIC9kZXYvbnVsbApAQCAt
MSw0MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE1IElnYWxpYSBTLkwKLSAqIENv
cHlyaWdodCAoQykgMjAxNSBNZXRyb2xvZ2ljYWwKLSAqCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhv
bGRlciBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRS
SUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAq
IEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXZvaWQgaW5pdGlhbGl6ZU9wZW5XZWJSVEMoKTsK
LQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vb3Bl
bndlYnJ0Yy9SZWFsdGltZUF1ZGlvU291cmNlT3dyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tZWRpYXN0cmVhbS9vcGVud2VicnRjL1JlYWx0aW1lQXVkaW9Tb3VyY2VPd3IuaApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2FiNzA1MDg0Yjk0Y2ZjOGU3YjE5ZjdkN2U4MjMyNjhj
YmNlZjQ2Ni4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9vcGVud2VicnRjL1JlYWx0aW1lQXVk
aW9Tb3VyY2VPd3IuaAorKysgL2Rldi9udWxsCkBAIC0xLDcwICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTUsMjAxNiBJZ2FsaWEgUy5MCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgTWV0
cm9sb2dpY2FsCi0gKgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICoK
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIDMu
IE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
Ci0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBIT0xERVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0j
aWYgRU5BQkxFKE1FRElBX1NUUkVBTSkgJiYgVVNFKE9QRU5XRUJSVEMpCi0KLSNpbmNsdWRlICJS
ZWFsdGltZU1lZGlhU291cmNlT3dyLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3Mg
UmVhbHRpbWVBdWRpb1NvdXJjZU93ciA6IHB1YmxpYyBSZWFsdGltZU1lZGlhU291cmNlT3dyIHsK
LXB1YmxpYzoKLVJlYWx0aW1lQXVkaW9Tb3VyY2VPd3IoT3dyTWVkaWFTb3VyY2UqIG1lZGlhU291
cmNlLCBjb25zdCBTdHJpbmcmIGlkLCBSZWFsdGltZU1lZGlhU291cmNlOjpUeXBlIHR5cGUsIGNv
bnN0IFN0cmluZyYgbmFtZSkKLSAgICA6IFJlYWx0aW1lTWVkaWFTb3VyY2VPd3IobWVkaWFTb3Vy
Y2UsIGlkLCB0eXBlLCBuYW1lKQotICAgIHsKLSAgICB9Ci0KLVJlYWx0aW1lQXVkaW9Tb3VyY2VP
d3IoY29uc3QgU3RyaW5nJiBpZCwgUmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlwZSB0eXBlLCBjb25z
dCBTdHJpbmcmIG5hbWUpCi0gICAgOiBSZWFsdGltZU1lZGlhU291cmNlT3dyKGlkLCB0eXBlLCBu
YW1lKQotICAgIHsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIH5SZWFsdGltZUF1ZGlvU291cmNlT3dy
KCkgeyB9Ci0KLSAgICBib29sIGFwcGx5U2l6ZShjb25zdCBJbnRTaXplJikgZmluYWwgeyByZXR1
cm4gZmFsc2U7IH0KLQotcHJvdGVjdGVkOgotICAgIHZvaWQgaW5pdGlhbGl6ZVNldHRpbmdzKCkg
ZmluYWwgewotICAgICAgICBpZiAobV9jdXJyZW50U2V0dGluZ3MuZGV2aWNlSWQoKS5pc0VtcHR5
KCkpCi0gICAgICAgICAgICBtX2N1cnJlbnRTZXR0aW5ncy5zZXRTdXBwb3J0ZWRDb25zdHJhaW50
cyhzdXBwb3J0ZWRDb25zdHJhaW50cygpKTsKLQotICAgICAgICBtX2N1cnJlbnRTZXR0aW5ncy5z
ZXREZXZpY2VJZChpZCgpKTsKLSAgICB9Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0K
LSNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFNKSAmJiBVU0UoT1BFTldFQlJUQykKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL29wZW53ZWJydGMvUmVh
bHRpbWVNZWRpYVNvdXJjZUNlbnRlck93ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
ZWRpYXN0cmVhbS9vcGVud2VicnRjL1JlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJPd3IuY3BwCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYWFkOGEyMzkwMjc3ZjM3OTcwMTQxMjQ5OTFm
NGFkZGE4YWQ4NDM4Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL29wZW53ZWJydGMvUmVhbHRp
bWVNZWRpYVNvdXJjZUNlbnRlck93ci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxOTAgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBFcmljc3NvbiBBQi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE1IElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgTWV0cm9sb2dpY2FsLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiAgICBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlCi0gKiAgICBkaXN0cmlidXRpb24uCi0gKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIEVyaWNz
c29uIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICogICAgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0gKiAgICBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQg
Q09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdI
VAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pICYm
IFVTRShPUEVOV0VCUlRDKQotI2luY2x1ZGUgIlJlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJPd3Iu
aCIKLQotI2luY2x1ZGUgIkNhcHR1cmVEZXZpY2UuaCIKLSNpbmNsdWRlICJNZWRpYVN0cmVhbVBy
aXZhdGUuaCIKLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotI2luY2x1ZGUgIk9wZW5XZWJS
VENVdGlsaXRpZXMuaCIKLSNpbmNsdWRlICJSZWFsdGltZUF1ZGlvU291cmNlT3dyLmgiCi0jaW5j
bHVkZSAiUmVhbHRpbWVNZWRpYVNvdXJjZUNhcGFiaWxpdGllcy5oIgotI2luY2x1ZGUgIlJlYWx0
aW1lVmlkZW9Tb3VyY2VPd3IuaCIKLSNpbmNsdWRlIDxvd3Ivb3dyLmg+Ci0jaW5jbHVkZSA8b3dy
L293cl9sb2NhbC5oPgotI2luY2x1ZGUgPG93ci9vd3JfbWVkaWFfc291cmNlLmg+Ci0jaW5jbHVk
ZSA8d3RmL01haW5UaHJlYWQuaD4KLSNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNp
bmNsdWRlIDx3dGYvVVVJRC5oPgotI2luY2x1ZGUgPHd0Zi9nbGliL0dVbmlxdWVQdHIuaD4KLSNp
bmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFz
aC5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVJlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXIm
IFJlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXI6OnBsYXRmb3JtQ2VudGVyKCkKLXsKLSAgICBBU1NF
UlQoaXNNYWluVGhyZWFkKCkpOwotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxSZWFsdGltZU1l
ZGlhU291cmNlQ2VudGVyT3dyPiBjZW50ZXI7Ci0gICAgcmV0dXJuIGNlbnRlcjsKLX0KLQotc3Rh
dGljIHZvaWQgbWVkaWFTb3VyY2VzQXZhaWxhYmxlQ2FsbGJhY2soR0xpc3QqIHNvdXJjZXMsIGdw
b2ludGVyIHVzZXJEYXRhKQotewotICAgIFJlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJPd3IqIGNl
bnRlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8UmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlck93cio+KHVz
ZXJEYXRhKTsKLSAgICBjZW50ZXItPm1lZGlhU291cmNlc0F2YWlsYWJsZShzb3VyY2VzKTsKLX0K
LQotUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlck93cjo6UmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRl
ck93cigpCi17Ci0gICAgaW5pdGlhbGl6ZU9wZW5XZWJSVEMoKTsKLX0KLQotUmVhbHRpbWVNZWRp
YVNvdXJjZUNlbnRlck93cjo6flJlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJPd3IoKQotewotfQot
Ci12b2lkIFJlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJPd3I6OnZhbGlkYXRlUmVxdWVzdENvbnN0
cmFpbnRzKFZhbGlkQ29uc3RyYWludHNIYW5kbGVyJiYgdmFsaWRIYW5kbGVyLCBJbnZhbGlkQ29u
c3RyYWludHNIYW5kbGVyJiYgaW52YWxpZEhhbmRsZXIsIGNvbnN0IE1lZGlhQ29uc3RyYWludHMm
IGF1ZGlvQ29uc3RyYWludHMsIGNvbnN0IE1lZGlhQ29uc3RyYWludHMmIHZpZGVvQ29uc3RyYWlu
dHMsIFN0cmluZyYmIGRldmljZUlkZW50aWZpZXJIYXNoU2FsdCkKLXsKLSAgICBtX3ZhbGlkQ29u
c3RyYWludHNIYW5kbGVyID0gV1RGTW92ZSh2YWxpZEhhbmRsZXIpOwotICAgIG1faW52YWxpZENv
bnN0cmFpbnRzSGFuZGxlciA9IFdURk1vdmUoaW52YWxpZEhhbmRsZXIpOwotCi0gICAgVmVjdG9y
PFN0cmluZz4gYXVkaW9Tb3VyY2VzOwotICAgIFZlY3RvcjxTdHJpbmc+IHZpZGVvU291cmNlczsK
LQotICAgIC8vIEZJWE1FOiBBY3R1YWxseSBkbyBjb25zdHJhaW50cyB2YWxpZGF0aW9uLiBUaGUg
TWVkaWFDb25zdHJhaW50cwotICAgIC8vIG5lZWQgdG8gY29tcGx5IHdpdGggdGhlIGF2YWlsYWJs
ZSBhdWRpby92aWRlbyBkZXZpY2UocykKLSAgICAvLyBjYXBhYmlsaXRpZXMuIFNlZSBidWcgIzEy
MzM0NS4KLSAgICBpZiAoYXVkaW9Db25zdHJhaW50cy5pc1ZhbGlkKQotICAgICAgICBhdWRpb1Nv
dXJjZXMuYXBwZW5kKFN0cmluZygiYXVkaW8iKSk7Ci0KLSAgICBpZiAodmlkZW9Db25zdHJhaW50
cy5pc1ZhbGlkKQotICAgICAgICB2aWRlb1NvdXJjZXMuYXBwZW5kKFN0cmluZygidmlkZW8iKSk7
Ci0KLSAgICBtX3ZhbGlkQ29uc3RyYWludHNIYW5kbGVyKFdURk1vdmUoYXVkaW9Tb3VyY2VzKSwg
V1RGTW92ZSh2aWRlb1NvdXJjZXMpLCBXVEZNb3ZlKGRldmljZUlkZW50aWZpZXJIYXNoU2FsdCkp
OwotICAgIG1fdmFsaWRDb25zdHJhaW50c0hhbmRsZXIgPSBudWxscHRyOwotICAgIG1faW52YWxp
ZENvbnN0cmFpbnRzSGFuZGxlciA9IG51bGxwdHI7Ci19Ci0KLXZvaWQgUmVhbHRpbWVNZWRpYVNv
dXJjZUNlbnRlck93cjo6Y3JlYXRlTWVkaWFTdHJlYW0oTmV3TWVkaWFTdHJlYW1IYW5kbGVyJiYg
Y29tcGxldGlvbkhhbmRsZXIsIGNvbnN0IFN0cmluZyYgYXVkaW9EZXZpY2VJRCwgY29uc3QgU3Ry
aW5nJiB2aWRlb0RldmljZUlELCBjb25zdCBNZWRpYUNvbnN0cmFpbnRzKiwgY29uc3QgTWVkaWFD
b25zdHJhaW50cyopCi17Ci0gICAgaW50IHR5cGVzID0gT1dSX01FRElBX1RZUEVfVU5LTk9XTjsK
LQotICAgIGlmICghYXVkaW9EZXZpY2VJRC5pc0VtcHR5KCkpCi0gICAgICAgIHR5cGVzIHw9IE9X
Ul9NRURJQV9UWVBFX0FVRElPOwotICAgIGlmICghdmlkZW9EZXZpY2VJRC5pc0VtcHR5KCkpCi0g
ICAgICAgIHR5cGVzIHw9IE9XUl9NRURJQV9UWVBFX1ZJREVPOwotCi0gICAgbV9jb21wbGV0aW9u
SGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpOwotCi0gICAgb3dyX2dldF9jYXB0
dXJlX3NvdXJjZXMoc3RhdGljX2Nhc3Q8T3dyTWVkaWFUeXBlPih0eXBlcyksIG1lZGlhU291cmNl
c0F2YWlsYWJsZUNhbGxiYWNrLCB0aGlzKTsKLX0KLQotVmVjdG9yPENhcHR1cmVEZXZpY2U+IFJl
YWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJPd3I6OmdldE1lZGlhU3RyZWFtRGV2aWNlcygpCi17Ci0g
ICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gVmVjdG9yPENhcHR1cmVEZXZpY2U+KCk7
Ci19Ci0KLXZvaWQgUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlck93cjo6bWVkaWFTb3VyY2VzQXZh
aWxhYmxlKEdMaXN0KiBzb3VyY2VzKQotewotICAgIFZlY3RvcjxSZWY8UmVhbHRpbWVNZWRpYVNv
dXJjZT4+IGF1ZGlvU291cmNlczsKLSAgICBWZWN0b3I8UmVmPFJlYWx0aW1lTWVkaWFTb3VyY2U+
PiB2aWRlb1NvdXJjZXM7Ci0KLSAgICBmb3IgKGF1dG8gaXRlbSA9IHNvdXJjZXM7IGl0ZW07IGl0
ZW0gPSBpdGVtLT5uZXh0KSB7Ci0gICAgICAgIE93ck1lZGlhU291cmNlKiBzb3VyY2UgPSBPV1Jf
TUVESUFfU09VUkNFKGl0ZW0tPmRhdGEpOwotCi0gICAgICAgIEdVbmlxdWVPdXRQdHI8Z2NoYXI+
IG5hbWU7Ci0gICAgICAgIE93ck1lZGlhVHlwZSBtZWRpYVR5cGU7Ci0gICAgICAgIGdfb2JqZWN0
X2dldChzb3VyY2UsICJtZWRpYS10eXBlIiwgJm1lZGlhVHlwZSwgIm5hbWUiLCAmbmFtZS5vdXRQ
dHIoKSwgTlVMTCk7Ci0gICAgICAgIFN0cmluZyBzb3VyY2VOYW1lKG5hbWUuZ2V0KCkpOwotICAg
ICAgICBTdHJpbmcgaWQoY3JlYXRlQ2Fub25pY2FsVVVJRFN0cmluZygpKTsKLQotICAgICAgICBp
ZiAoZ19nZXRlbnYoIk9XUl9VU0VfVEVTVF9TT1VSQ0VTIikpIHsKLSAgICAgICAgICAgIE93clNv
dXJjZVR5cGUgc291cmNlVHlwZSA9IE9XUl9TT1VSQ0VfVFlQRV9VTktOT1dOOwotICAgICAgICAg
ICAgZ19vYmplY3RfZ2V0KHNvdXJjZSwgInR5cGUiLCAmc291cmNlVHlwZSwgTlVMTCk7Ci0gICAg
ICAgICAgICBpZiAoc291cmNlVHlwZSAhPSBPV1JfU09VUkNFX1RZUEVfVEVTVCkKLSAgICAgICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIFJlYWx0aW1lTWVkaWFTb3Vy
Y2U6OlR5cGUgbWVkaWFTb3VyY2VUeXBlOwotICAgICAgICBpZiAobWVkaWFUeXBlICYgT1dSX01F
RElBX1RZUEVfQVVESU8pCi0gICAgICAgICAgICBtZWRpYVNvdXJjZVR5cGUgPSBSZWFsdGltZU1l
ZGlhU291cmNlOjpUeXBlOjpBdWRpbzsKLSAgICAgICAgZWxzZSBpZiAobWVkaWFUeXBlICYgT1dS
X01FRElBX1RZUEVfVklERU8pCi0gICAgICAgICAgICBtZWRpYVNvdXJjZVR5cGUgPSBSZWFsdGlt
ZU1lZGlhU291cmNlOjpUeXBlOjpWaWRlbzsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBt
ZWRpYVNvdXJjZVR5cGUgPSBSZWFsdGltZU1lZGlhU291cmNlOjpUeXBlOjpOb25lOwotICAgICAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBSZWZQdHI8
UmVhbHRpbWVNZWRpYVNvdXJjZU93cj4gbWVkaWFTb3VyY2U7Ci0gICAgICAgIGlmIChtZWRpYVNv
dXJjZVR5cGUgPT0gUmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlwZTo6QXVkaW8pCi0gICAgICAgICAg
ICBtZWRpYVNvdXJjZSA9IGFkb3B0UmVmKG5ldyBSZWFsdGltZUF1ZGlvU291cmNlT3dyKHNvdXJj
ZSwgaWQsIG1lZGlhU291cmNlVHlwZSwgc291cmNlTmFtZSkpOwotICAgICAgICBlbHNlCi0gICAg
ICAgICAgICBtZWRpYVNvdXJjZSA9IGFkb3B0UmVmKG5ldyBSZWFsdGltZVZpZGVvU291cmNlT3dy
KHNvdXJjZSwgaWQsIG1lZGlhU291cmNlVHlwZSwgc291cmNlTmFtZSkpOwotCi0gICAgICAgIFJl
YWx0aW1lTWVkaWFTb3VyY2VPd3JNYXA6Oml0ZXJhdG9yIHNvdXJjZUl0ZXJhdG9yID0gbV9zb3Vy
Y2VNYXAuZmluZChpZCk7Ci0gICAgICAgIGlmIChzb3VyY2VJdGVyYXRvciA9PSBtX3NvdXJjZU1h
cC5lbmQoKSkKLSAgICAgICAgICAgIG1fc291cmNlTWFwLmFkZChpZCwgbWVkaWFTb3VyY2UuY29w
eVJlZigpKTsKLQotICAgICAgICBpZiAobWVkaWFUeXBlICYgT1dSX01FRElBX1RZUEVfQVVESU8p
Ci0gICAgICAgICAgICBhdWRpb1NvdXJjZXMuYXBwZW5kKG1lZGlhU291cmNlLnJlbGVhc2VOb25O
dWxsKCkpOwotICAgICAgICBlbHNlIGlmIChtZWRpYVR5cGUgJiBPV1JfTUVESUFfVFlQRV9WSURF
TykKLSAgICAgICAgICAgIHZpZGVvU291cmNlcy5hcHBlbmQobWVkaWFTb3VyY2UucmVsZWFzZU5v
bk51bGwoKSk7Ci0KLSAgICB9Ci0KLSAgICBpZiAodmlkZW9Tb3VyY2VzLmlzRW1wdHkoKSAmJiBh
dWRpb1NvdXJjZXMuaXNFbXB0eSgpKQotICAgICAgICBtX2NvbXBsZXRpb25IYW5kbGVyKG51bGxw
dHIpOwotICAgIGVsc2UKLSAgICAgICAgbV9jb21wbGV0aW9uSGFuZGxlcihNZWRpYVN0cmVhbVBy
aXZhdGU6OmNyZWF0ZShhdWRpb1NvdXJjZXMsIHZpZGVvU291cmNlcykpOwotCi19Ci0KLVJlYWx0
aW1lTWVkaWFTb3VyY2UqIFJlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJPd3I6OmZpcnN0U291cmNl
KFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGUgdHlwZSkKLXsKLSAgICBmb3IgKGF1dG8gaXRlciA9
IG1fc291cmNlTWFwLmJlZ2luKCk7IGl0ZXIgIT0gbV9zb3VyY2VNYXAuZW5kKCk7ICsraXRlcikg
ewotICAgICAgICBSZWZQdHI8UmVhbHRpbWVNZWRpYVNvdXJjZT4gc291cmNlID0gaXRlci0+dmFs
dWU7Ci0gICAgICAgIGlmIChzb3VyY2UtPnR5cGUoKSA9PSB0eXBlKQotICAgICAgICAgICAgcmV0
dXJuIHNvdXJjZS5nZXQoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQotfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVBTSkgJiYg
VVNFKE9QRU5XRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRp
YXN0cmVhbS9vcGVud2VicnRjL1JlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJPd3IuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL29wZW53ZWJydGMvUmVhbHRpbWVNZWRpYVNv
dXJjZUNlbnRlck93ci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ODBkOTE4MjEz
MDM4MmY0MzAyZjEyNzhkYWJiZmEyNDgyYTMzNTMwLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFt
L29wZW53ZWJydGMvUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlck93ci5oCisrKyAvZGV2L251bGwK
QEAgLTEsMTAxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgRXJpY3Nzb24gQUIu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNSBJZ2FsaWEgUy5MLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE1IE1ldHJvbG9naWNhbC4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqCi0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lcgotICogICAgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZQotICogICAgZGlzdHJpYnV0aW9uLgotICogMy4gTmVpdGhlciB0
aGUgbmFtZSBvZiBFcmljc3NvbiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAq
ICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20gdGhpcwotICogICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShNRURJQV9T
VFJFQU0pICYmIFVTRShPUEVOV0VCUlRDKQotCi0jaW5jbHVkZSAiQ2FwdHVyZURldmljZU1hbmFn
ZXIuaCIKLSNpbmNsdWRlICJSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyLmgiCi0jaW5jbHVkZSAi
UmVhbHRpbWVNZWRpYVNvdXJjZU93ci5oIgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLQotbmFt
ZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBDYXB0dXJlRGV2aWNlOwotY2xhc3MgTWVkaWFTdHJl
YW1Qcml2YXRlOwotY2xhc3MgUmVhbHRpbWVNZWRpYVNvdXJjZTsKLWNsYXNzIE1lZGlhU3RyZWFt
U291cmNlc1F1ZXJ5Q2xpZW50OwotY2xhc3MgVHJhY2tTb3VyY2VJbmZvOwotCi1jbGFzcyBSZWFs
dGltZU1lZGlhU291cmNlQ2VudGVyT3dyIGZpbmFsIDogcHVibGljIFJlYWx0aW1lTWVkaWFTb3Vy
Y2VDZW50ZXIgewotcHVibGljOgotICAgIFJlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJPd3IoKTsK
LSAgICB+UmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlck93cigpOwotCi0gICAgdm9pZCB2YWxpZGF0
ZVJlcXVlc3RDb25zdHJhaW50cyhWYWxpZENvbnN0cmFpbnRzSGFuZGxlciYmIHZhbGlkSGFuZGxl
ciwgSW52YWxpZENvbnN0cmFpbnRzSGFuZGxlciYmIGludmFsaWRIYW5kbGVyLCBjb25zdCBNZWRp
YUNvbnN0cmFpbnRzJiBhdWRpb0NvbnN0cmFpbnRzLCBjb25zdCBNZWRpYUNvbnN0cmFpbnRzJiB2
aWRlb0NvbnN0cmFpbnRzLCBTdHJpbmcmJikgZmluYWw7Ci0KLSAgICB2b2lkIGNyZWF0ZU1lZGlh
U3RyZWFtKE5ld01lZGlhU3RyZWFtSGFuZGxlciYmLCBjb25zdCBTdHJpbmcmIGF1ZGlvRGV2aWNl
SUQsIGNvbnN0IFN0cmluZyYgdmlkZW9EZXZpY2VJRCwgY29uc3QgTWVkaWFDb25zdHJhaW50cyog
dmlkZW9Db25zdHJhaW50cywgY29uc3QgTWVkaWFDb25zdHJhaW50cyogYXVkaW9Db25zdHJhaW50
cykgZmluYWw7Ci0KLSAgICBWZWN0b3I8Q2FwdHVyZURldmljZT4gZ2V0TWVkaWFTdHJlYW1EZXZp
Y2VzKCkgZmluYWw7Ci0KLSAgICB2b2lkIG1lZGlhU291cmNlc0F2YWlsYWJsZShHTGlzdCogc291
cmNlcyk7Ci0KLXByaXZhdGU6Ci0gICAgUmVhbHRpbWVNZWRpYVNvdXJjZTo6QXVkaW9DYXB0dXJl
RmFjdG9yeSYgZGVmYXVsdEF1ZGlvRmFjdG9yeSgpIGZpbmFsIHsgcmV0dXJuIG1fZGVmYXVsdEF1
ZGlvRmFjdG9yeTsgfQotICAgIFJlYWx0aW1lTWVkaWFTb3VyY2U6OlZpZGVvQ2FwdHVyZUZhY3Rv
cnkmIGRlZmF1bHRWaWRlb0ZhY3RvcnkoKSBmaW5hbCB7IHJldHVybiBtX2RlZmF1bHRWaWRlb0Zh
Y3Rvcnk7IH0KLSAgICBDYXB0dXJlRGV2aWNlTWFuYWdlciYgZGVmYXVsdEF1ZGlvQ2FwdHVyZURl
dmljZU1hbmFnZXIoKSBmaW5hbCB7IHJldHVybiBtX2RlZmF1bHRBdWRpb0NhcHR1cmVEZXZpY2VN
YW5hZ2VyOyB9Ci0gICAgQ2FwdHVyZURldmljZU1hbmFnZXImIGRlZmF1bHRWaWRlb0NhcHR1cmVE
ZXZpY2VNYW5hZ2VyKCkgZmluYWwgeyByZXR1cm4gbV9kZWZhdWx0VmlkZW9DYXB0dXJlRGV2aWNl
TWFuYWdlcjsgfQotCi0gICAgUmVhbHRpbWVNZWRpYVNvdXJjZSogZmlyc3RTb3VyY2UoUmVhbHRp
bWVNZWRpYVNvdXJjZTo6VHlwZSk7Ci0gICAgUmVhbHRpbWVNZWRpYVNvdXJjZU93ck1hcCBtX3Nv
dXJjZU1hcDsKLSAgICBWYWxpZENvbnN0cmFpbnRzSGFuZGxlciBtX3ZhbGlkQ29uc3RyYWludHNI
YW5kbGVyOwotICAgIEludmFsaWRDb25zdHJhaW50c0hhbmRsZXIgbV9pbnZhbGlkQ29uc3RyYWlu
dHNIYW5kbGVyOwotICAgIE5ld01lZGlhU3RyZWFtSGFuZGxlciBtX2NvbXBsZXRpb25IYW5kbGVy
OwotCi0gICAgY2xhc3MgQXVkaW9DYXB0dXJlRmFjdG9yeU93ciA6IHB1YmxpYyBSZWFsdGltZU1l
ZGlhU291cmNlOjpBdWRpb0NhcHR1cmVGYWN0b3J5IHsKLSAgICBwcml2YXRlOgotICAgICAgICBD
YXB0dXJlU291cmNlT3JFcnJvciBjcmVhdGVBdWRpb0NhcHR1cmVTb3VyY2UoY29uc3QgU3RyaW5n
JiwgY29uc3QgTWVkaWFDb25zdHJhaW50cyopIGZpbmFsIHsgcmV0dXJuIHsgfTsgfQotICAgIH07
Ci0KLSAgICBjbGFzcyBWaWRlb0NhcHR1cmVGYWN0b3J5T3dyIDogcHVibGljIFJlYWx0aW1lTWVk
aWFTb3VyY2U6OlZpZGVvQ2FwdHVyZUZhY3RvcnkgewotICAgIHByaXZhdGU6Ci0gICAgICAgIENh
cHR1cmVTb3VyY2VPckVycm9yIGNyZWF0ZVZpZGVvQ2FwdHVyZVNvdXJjZShjb25zdCBTdHJpbmcm
LCBjb25zdCBNZWRpYUNvbnN0cmFpbnRzKikgZmluYWwgeyByZXR1cm4geyB9OyB9Ci0gICAgfTsK
LQotICAgIGNsYXNzIENhcHR1cmVEZXZpY2VNYW5hZ2VyT3dyIDogcHVibGljIENhcHR1cmVEZXZp
Y2VNYW5hZ2VyIHsKLSAgICBwcml2YXRlOgotICAgICAgICBWZWN0b3I8Q2FwdHVyZURldmljZT4m
IGNhcHR1cmVEZXZpY2VzKCkgZmluYWwgeyByZXR1cm4gbV9kZXZpY2VzOyB9Ci0KLSAgICAgICAg
VmVjdG9yPENhcHR1cmVEZXZpY2U+IG1fZGV2aWNlczsKLSAgICB9OwotCi0gICAgQXVkaW9DYXB0
dXJlRmFjdG9yeU93ciBtX2RlZmF1bHRBdWRpb0ZhY3Rvcnk7Ci0gICAgVmlkZW9DYXB0dXJlRmFj
dG9yeU93ciBtX2RlZmF1bHRWaWRlb0ZhY3Rvcnk7Ci0gICAgQ2FwdHVyZURldmljZU1hbmFnZXJP
d3IgbV9kZWZhdWx0QXVkaW9DYXB0dXJlRGV2aWNlTWFuYWdlcjsKLSAgICBDYXB0dXJlRGV2aWNl
TWFuYWdlck93ciBtX2RlZmF1bHRWaWRlb0NhcHR1cmVEZXZpY2VNYW5hZ2VyOwotfTsKLQotfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVBTSkgJiYg
VVNFKE9QRU5XRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRp
YXN0cmVhbS9vcGVud2VicnRjL1JlYWx0aW1lTWVkaWFTb3VyY2VPd3IuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vb3BlbndlYnJ0Yy9SZWFsdGltZU1lZGlhU291cmNl
T3dyLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWU3NDk5ZDM4MDA2NmYxNGFi
NmM5Y2IwMDg3YmU0YjZkZDA4Nzg1Zi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9vcGVud2Vi
cnRjL1JlYWx0aW1lTWVkaWFTb3VyY2VPd3IuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNjAgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBJZ2FsaWEgUy5MCi0gKgotICogQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1l
dDoKLSAqCi0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICoKLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhl
IGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0g
KiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUCi0gKiBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
LSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShNRURJQV9T
VFJFQU0pICYmIFVTRShPUEVOV0VCUlRDKQotI2luY2x1ZGUgIlJlYWx0aW1lTWVkaWFTb3VyY2VP
d3IuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jb25zdCBSZWFsdGltZU1lZGlhU291cmNl
U2V0dGluZ3MmIFJlYWx0aW1lTWVkaWFTb3VyY2VPd3I6OnNldHRpbmdzKCkgY29uc3QKLXsKLSAg
ICBjb25zdF9jYXN0PFJlYWx0aW1lTWVkaWFTb3VyY2VPd3ImPigqdGhpcykuaW5pdGlhbGl6ZVNl
dHRpbmdzKCk7Ci0gICAgcmV0dXJuIG1fY3VycmVudFNldHRpbmdzOwotfQotCi1SZWFsdGltZU1l
ZGlhU291cmNlU3VwcG9ydGVkQ29uc3RyYWludHMmIFJlYWx0aW1lTWVkaWFTb3VyY2VPd3I6OnN1
cHBvcnRlZENvbnN0cmFpbnRzKCkKLXsKLSAgICBpZiAobV9zdXBwb3J0ZWRDb25zdHJhaW50cy5z
dXBwb3J0c0RldmljZUlkKCkpCi0gICAgICAgIHJldHVybiBtX3N1cHBvcnRlZENvbnN0cmFpbnRz
OwotCi0gICAgbV9zdXBwb3J0ZWRDb25zdHJhaW50cy5zZXRTdXBwb3J0c0RldmljZUlkKHRydWUp
OwotICAgIGluaXRpYWxpemVTdXBwb3J0ZWRDb25zdHJhaW50cyhtX3N1cHBvcnRlZENvbnN0cmFp
bnRzKTsKLQotICAgIHJldHVybiBtX3N1cHBvcnRlZENvbnN0cmFpbnRzOwotfQotCi19IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFNKSAmJiBVU0Uo
T1BFTldFQlJUQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3Ry
ZWFtL29wZW53ZWJydGMvUmVhbHRpbWVNZWRpYVNvdXJjZU93ci5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWVkaWFzdHJlYW0vb3BlbndlYnJ0Yy9SZWFsdGltZU1lZGlhU291cmNlT3dyLmgK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdjZmJmNzhmMjU4ZDkwOGE1NDRiOTliMWVj
OTgyODRiNTMzZTRhODQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vb3BlbndlYnJ0Yy9SZWFs
dGltZU1lZGlhU291cmNlT3dyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw5OSArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDE1IElnYWxpYSBTLkwKLSAqIENvcHlyaWdodCAoQykgMjAxNSBN
ZXRyb2xvZ2ljYWwKLSAqCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
My4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlIG5hbWVz
IG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIEhPTERFUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAq
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBSZWFsdGlt
ZU1lZGlhU291cmNlT3dyX2gKLSNkZWZpbmUgUmVhbHRpbWVNZWRpYVNvdXJjZU93cl9oCi0KLSNp
ZiBFTkFCTEUoTUVESUFfU1RSRUFNKSAmJiBVU0UoT1BFTldFQlJUQykKLQotI2luY2x1ZGUgIkdS
ZWZQdHJHU3RyZWFtZXIuaCIKLSNpbmNsdWRlICJSZWFsdGltZU1lZGlhU291cmNlLmgiCi0jaW5j
bHVkZSA8b3dyL293cl9tZWRpYV9zb3VyY2UuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgot
I2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4K
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBSZWFsdGltZU1lZGlhU291cmNlQ2FwYWJp
bGl0aWVzOwotCi1jbGFzcyBSZWFsdGltZU1lZGlhU291cmNlT3dyIDogcHVibGljIFJlYWx0aW1l
TWVkaWFTb3VyY2UgewotcHVibGljOgotUmVhbHRpbWVNZWRpYVNvdXJjZU93cihPd3JNZWRpYVNv
dXJjZSogbWVkaWFTb3VyY2UsIGNvbnN0IFN0cmluZyYgaWQsIFJlYWx0aW1lTWVkaWFTb3VyY2U6
OlR5cGUgdHlwZSwgY29uc3QgU3RyaW5nJiBuYW1lKQotICAgIDogUmVhbHRpbWVNZWRpYVNvdXJj
ZShpZCwgdHlwZSwgbmFtZSkKLSAgICAsIG1fbWVkaWFTb3VyY2UobWVkaWFTb3VyY2UpCi0gICAg
ewotICAgICAgICBpZiAoIW1lZGlhU291cmNlKQotICAgICAgICAgICAgbm90aWZ5TXV0ZWRDaGFu
Z2UodHJ1ZSk7Ci0gICAgfQotCi1SZWFsdGltZU1lZGlhU291cmNlT3dyKGNvbnN0IFN0cmluZyYg
aWQsIFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGUgdHlwZSwgY29uc3QgU3RyaW5nJiBuYW1lKQot
ICAgIDogUmVhbHRpbWVNZWRpYVNvdXJjZShpZCwgdHlwZSwgbmFtZSkKLSAgICAsIG1fbWVkaWFT
b3VyY2UobnVsbHB0cikKLSAgICB7Ci0gICAgfQotCi0gICAgdmlydHVhbCB+UmVhbHRpbWVNZWRp
YVNvdXJjZU93cigpIHsgfQotCi0gICAgdm9pZCBzd2FwT3V0U2hhbGxvd1NvdXJjZShPd3JNZWRp
YVNvdXJjZSYgcmVhbFNvdXJjZSkKLSAgICB7Ci0gICAgICAgIG1fbWVkaWFTb3VyY2UgPSAmcmVh
bFNvdXJjZTsKLSAgICAgICAgc2V0TXV0ZWQoZmFsc2UpOwotICAgIH0KLQotICAgIGNvbnN0IFJl
YWx0aW1lTWVkaWFTb3VyY2VDYXBhYmlsaXRpZXMmIGNhcGFiaWxpdGllcygpIGNvbnN0IG92ZXJy
aWRlIHsgcmV0dXJuIG1fY2FwYWJpbGl0aWVzOyB9Ci0gICAgY29uc3QgUmVhbHRpbWVNZWRpYVNv
dXJjZVNldHRpbmdzJiBzZXR0aW5ncygpIGNvbnN0IG92ZXJyaWRlOwotCi0gICAgT3dyTWVkaWFT
b3VyY2UqIG1lZGlhU291cmNlKCkgY29uc3QgeyByZXR1cm4gbV9tZWRpYVNvdXJjZTsgfQotCi1w
cm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCB2b2lkIGluaXRpYWxpemVTZXR0aW5ncygpIHsgfTsKLSAg
ICB2aXJ0dWFsIHZvaWQgaW5pdGlhbGl6ZVN1cHBvcnRlZENvbnN0cmFpbnRzKFJlYWx0aW1lTWVk
aWFTb3VyY2VTdXBwb3J0ZWRDb25zdHJhaW50cyYpIHsgfTsKLSAgICBSZWFsdGltZU1lZGlhU291
cmNlU3VwcG9ydGVkQ29uc3RyYWludHMmIHN1cHBvcnRlZENvbnN0cmFpbnRzKCk7Ci0KLSAgICBS
ZWFsdGltZU1lZGlhU291cmNlU2V0dGluZ3MgbV9jdXJyZW50U2V0dGluZ3M7Ci0KLXByaXZhdGU6
Ci0gICAgUmVhbHRpbWVNZWRpYVNvdXJjZVN1cHBvcnRlZENvbnN0cmFpbnRzIG1fc3VwcG9ydGVk
Q29uc3RyYWludHM7Ci0gICAgUmVhbHRpbWVNZWRpYVNvdXJjZUNhcGFiaWxpdGllcyBtX2NhcGFi
aWxpdGllczsKLSAgICBPd3JNZWRpYVNvdXJjZSogbV9tZWRpYVNvdXJjZTsKLX07Ci0KLXR5cGVk
ZWYgSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxSZWFsdGltZU1lZGlhU291cmNlT3dyPj4gUmVhbHRp
bWVNZWRpYVNvdXJjZU93ck1hcDsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYg
Ly8gRU5BQkxFKE1FRElBX1NUUkVBTSkgJiYgVVNFKE9QRU5XRUJSVEMpCi0KLSNlbmRpZiAvLyBS
ZWFsdGltZU1lZGlhU291cmNlT3dyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21lZGlhc3RyZWFtL29wZW53ZWJydGMvUmVhbHRpbWVWaWRlb1NvdXJjZU93ci5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vb3BlbndlYnJ0Yy9SZWFsdGltZVZpZGVv
U291cmNlT3dyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQxOGVmODRhNzFhNTcz
NDdlODVkMzUyODM2OWUyNzljN2E2NmY0NTQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vb3Bl
bndlYnJ0Yy9SZWFsdGltZVZpZGVvU291cmNlT3dyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw4MiAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE1LDIwMTYgSWdhbGlhIFMuTAotICogQ29w
eXJpZ2h0IChDKSAyMDE1IE1ldHJvbG9naWNhbAotICoKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9s
ZGVyIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICog
SE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0jcHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pICYmIFVTRShPUEVOV0VC
UlRDKQotCi0jaW5jbHVkZSAiUmVhbHRpbWVNZWRpYVNvdXJjZU93ci5oIgotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci0KLWNsYXNzIFJlYWx0aW1lVmlkZW9Tb3VyY2VPd3IgOiBwdWJsaWMgUmVhbHRp
bWVNZWRpYVNvdXJjZU93ciB7Ci1wdWJsaWM6Ci1SZWFsdGltZVZpZGVvU291cmNlT3dyKE93ck1l
ZGlhU291cmNlKiBtZWRpYVNvdXJjZSwgY29uc3QgU3RyaW5nJiBpZCwgUmVhbHRpbWVNZWRpYVNv
dXJjZTo6VHlwZSB0eXBlLCBjb25zdCBTdHJpbmcmIG5hbWUpCi0gICAgOiBSZWFsdGltZU1lZGlh
U291cmNlT3dyKG1lZGlhU291cmNlLCBpZCwgdHlwZSwgbmFtZSkKLSAgICB7Ci0gICAgfQotCi1S
ZWFsdGltZVZpZGVvU291cmNlT3dyKGNvbnN0IFN0cmluZyYgaWQsIFJlYWx0aW1lTWVkaWFTb3Vy
Y2U6OlR5cGUgdHlwZSwgY29uc3QgU3RyaW5nJiBuYW1lKQotICAgIDogUmVhbHRpbWVNZWRpYVNv
dXJjZU93cihpZCwgdHlwZSwgbmFtZSkKLSAgICB7Ci0gICAgfQotCi0gICAgdmlydHVhbCB+UmVh
bHRpbWVWaWRlb1NvdXJjZU93cigpIHsgfQotCi0gICAgYm9vbCBhcHBseVNpemUoY29uc3QgSW50
U2l6ZSYpIGZpbmFsIHsgcmV0dXJuIHRydWU7IH0KLQotcHJvdGVjdGVkOgotICAgIHZvaWQgaW5p
dGlhbGl6ZVNldHRpbmdzKCkgZmluYWwgewotICAgICAgICBpZiAobV9jdXJyZW50U2V0dGluZ3Mu
ZGV2aWNlSWQoKS5pc0VtcHR5KCkpCi0gICAgICAgICAgICBtX2N1cnJlbnRTZXR0aW5ncy5zZXRT
dXBwb3J0ZWRDb25zdHJhaW50cyhzdXBwb3J0ZWRDb25zdHJhaW50cygpKTsKLQotICAgICAgICBt
X2N1cnJlbnRTZXR0aW5ncy5zZXREZXZpY2VJZChpZCgpKTsKLQotICAgICAgICBtX2N1cnJlbnRT
ZXR0aW5ncy5zZXRGcmFtZVJhdGUoZnJhbWVSYXRlKCkpOwotICAgICAgICBtX2N1cnJlbnRTZXR0
aW5ncy5zZXRXaWR0aChzaXplKCkud2lkdGgoKSk7Ci0gICAgICAgIG1fY3VycmVudFNldHRpbmdz
LnNldEhlaWdodChzaXplKCkuaGVpZ2h0KCkpOwotICAgIH0KLQotICAgIHZvaWQgaW5pdGlhbGl6
ZVN1cHBvcnRlZENvbnN0cmFpbnRzKFJlYWx0aW1lTWVkaWFTb3VyY2VTdXBwb3J0ZWRDb25zdHJh
aW50cyYgc3VwcG9ydGVkQ29uc3RyYWludHMpIGZpbmFsIHsKLSAgICAgICAgc3VwcG9ydGVkQ29u
c3RyYWludHMuc2V0U3VwcG9ydHNGYWNpbmdNb2RlKFJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5n
czo6VW5rbm93bik7Ci0gICAgICAgIHN1cHBvcnRlZENvbnN0cmFpbnRzLnNldFN1cHBvcnRzV2lk
dGgodHJ1ZSk7Ci0gICAgICAgIHN1cHBvcnRlZENvbnN0cmFpbnRzLnNldFN1cHBvcnRzSGVpZ2h0
KHRydWUpOwotICAgICAgICBzdXBwb3J0ZWRDb25zdHJhaW50cy5zZXRTdXBwb3J0c0FzcGVjdFJh
dGlvKHRydWUpOwotICAgICAgICBzdXBwb3J0ZWRDb25zdHJhaW50cy5zZXRTdXBwb3J0c0ZyYW1l
UmF0ZSh0cnVlKTsKLSAgICB9Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRp
ZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFNKSAmJiBVU0UoT1BFTldFQlJUQykKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svTW9ja01lZGlhRW5kcG9pbnQuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9Nb2NrTWVkaWFFbmRwb2ludC5jcHAKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBlOWI0MWU1YzExOTVjNmUzZWMxMzcwNzVlYTRmZmE2Njg2
YzdhYWYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9Nb2NrTWVkaWFFbmRwb2ludC5jcHAKKysrIC9kZXYv
bnVsbApAQCAtMSwzNDYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBFcmljc3Nv
biBBQi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIKLSAqICAgIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqICAgIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIE5laXRo
ZXIgdGhlIG5hbWUgb2YgRXJpY3Nzb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3Jz
Ci0gKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZCBmcm9tIHRoaXMKLSAqICAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5B
QkxFKFdFQl9SVEMpCi0jaW5jbHVkZSAiTW9ja01lZGlhRW5kcG9pbnQuaCIKLQotI2luY2x1ZGUg
Ik1lZGlhRW5kcG9pbnRTZXNzaW9uQ29uZmlndXJhdGlvbi5oIgotI2luY2x1ZGUgIk1lZGlhUGF5
bG9hZC5oIgotI2luY2x1ZGUgIk1vY2tSZWFsdGltZUF1ZGlvU291cmNlLmgiCi0jaW5jbHVkZSAi
TW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2UuaCIKLSNpbmNsdWRlICJSVENEYXRhQ2hhbm5lbEhhbmRs
ZXJNb2NrLmgiCi0jaW5jbHVkZSAiUmVhbHRpbWVNZWRpYVNvdXJjZS5oIgotI2luY2x1ZGUgPHd0
Zi9NYWluVGhyZWFkLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RhdGljIGNvbnN0IGNo
YXIqIGZpbmdlcnByaW50ID0gIjhCOjg3OjA5OjhBOjVEOkMyOkYzOjMzOkVGOkM1OkIxOkY2Ojg0
OjNBOjNEOkQ2OkEzOkUyOjlDOjE3OjRDOkU3OjQ2OjNCOjFCOkNFOjg0Ojk4OkREOjhFOkFGOjdC
IjsKLXN0YXRpYyBjb25zdCBjaGFyKiBmaW5nZXJwcmludEZ1bmN0aW9uID0gInNoYS0yNTYiOwot
Ci1zdGQ6OnVuaXF1ZV9wdHI8TWVkaWFFbmRwb2ludD4gTW9ja01lZGlhRW5kcG9pbnQ6OmNyZWF0
ZShNZWRpYUVuZHBvaW50Q2xpZW50JiBjbGllbnQpCi17Ci0gICAgcmV0dXJuIHN0ZDo6dW5pcXVl
X3B0cjxNZWRpYUVuZHBvaW50PihuZXcgTW9ja01lZGlhRW5kcG9pbnQoY2xpZW50KSk7Ci19Ci0K
LU1vY2tNZWRpYUVuZHBvaW50OjpNb2NrTWVkaWFFbmRwb2ludChNZWRpYUVuZHBvaW50Q2xpZW50
JiBjbGllbnQpCi0gICAgOiBtX2NsaWVudChjbGllbnQpCi0gICAgLCBtX2ljZUNhbmRpZGF0ZVRp
bWVyKCp0aGlzLCAmTW9ja01lZGlhRW5kcG9pbnQ6OmljZUNhbmRpZGF0ZVRpbWVyRmlyZWQpCi0g
ICAgLCBtX2ljZVRyYW5zcG9ydFRpbWVyKCp0aGlzLCAmTW9ja01lZGlhRW5kcG9pbnQ6OmljZVRy
YW5zcG9ydFRpbWVyRmlyZWQpCi0gICAgLCBtX3VubXV0ZVRpbWVyKCp0aGlzLCAmTW9ja01lZGlh
RW5kcG9pbnQ6OnVubXV0ZVRpbWVyRmlyZWQpCi17Ci19Ci0KLU1vY2tNZWRpYUVuZHBvaW50Ojp+
TW9ja01lZGlhRW5kcG9pbnQoKQotewotICAgIHN0b3AoKTsKLX0KLQotc3RkOjp1bmlxdWVfcHRy
PFJUQ0RhdGFDaGFubmVsSGFuZGxlcj4gTW9ja01lZGlhRW5kcG9pbnQ6OmNyZWF0ZURhdGFDaGFu
bmVsSGFuZGxlcihjb25zdCBTdHJpbmcmIGxhYmVsLCBjb25zdCBSVENEYXRhQ2hhbm5lbEluaXQm
IG9wdGlvbnMpCi17Ci0gICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8UlRDRGF0YUNoYW5uZWxI
YW5kbGVyTW9jaz4obGFiZWwsIG9wdGlvbnMpOwotfQotCi12b2lkIE1vY2tNZWRpYUVuZHBvaW50
OjpnZW5lcmF0ZUR0bHNJbmZvKCkKLXsKLSAgICBhdXRvIHdlYWtUaGlzID0gbV93ZWFrUHRyRmFj
dG9yeS5jcmVhdGVXZWFrUHRyKCp0aGlzKTsKLQotICAgIGNhbGxPbk1haW5UaHJlYWQoW3dlYWtU
aGlzXSB7Ci0gICAgICAgIGlmICh3ZWFrVGhpcykKLSAgICAgICAgICAgIHdlYWtUaGlzLT5tX2Ns
aWVudC5nb3REdGxzRmluZ2VycHJpbnQoZmluZ2VycHJpbnQsIGZpbmdlcnByaW50RnVuY3Rpb24p
OwotICAgIH0pOwotfQotCi1NZWRpYVBheWxvYWRWZWN0b3IgTW9ja01lZGlhRW5kcG9pbnQ6Omdl
dERlZmF1bHRBdWRpb1BheWxvYWRzKCkKLXsKLSAgICBNZWRpYVBheWxvYWRWZWN0b3IgcGF5bG9h
ZHM7Ci0KLSAgICBNZWRpYVBheWxvYWQgcGF5bG9hZDE7Ci0gICAgcGF5bG9hZDEudHlwZSA9IDEx
MTsKLSAgICBwYXlsb2FkMS5lbmNvZGluZ05hbWUgPSAiT1BVUyI7Ci0gICAgcGF5bG9hZDEuY2xv
Y2tSYXRlID0gNDgwMDA7Ci0gICAgcGF5bG9hZDEuY2hhbm5lbHMgPSAyOwotICAgIHBheWxvYWRz
LmFwcGVuZChXVEZNb3ZlKHBheWxvYWQxKSk7Ci0KLSAgICBNZWRpYVBheWxvYWQgcGF5bG9hZDI7
Ci0gICAgcGF5bG9hZDIudHlwZSA9IDg7Ci0gICAgcGF5bG9hZDIuZW5jb2RpbmdOYW1lID0gIlBD
TUEiOwotICAgIHBheWxvYWQyLmNsb2NrUmF0ZSA9IDgwMDA7Ci0gICAgcGF5bG9hZDIuY2hhbm5l
bHMgPSAxOwotICAgIHBheWxvYWRzLmFwcGVuZChXVEZNb3ZlKHBheWxvYWQyKSk7Ci0KLSAgICBN
ZWRpYVBheWxvYWQgcGF5bG9hZDM7Ci0gICAgcGF5bG9hZDMudHlwZSA9IDA7Ci0gICAgcGF5bG9h
ZDMuZW5jb2RpbmdOYW1lID0gIlBDTVUiOwotICAgIHBheWxvYWQzLmNsb2NrUmF0ZSA9IDgwMDA7
Ci0gICAgcGF5bG9hZDMuY2hhbm5lbHMgPSAxOwotICAgIHBheWxvYWRzLmFwcGVuZChXVEZNb3Zl
KHBheWxvYWQzKSk7Ci0KLSAgICByZXR1cm4gcGF5bG9hZHM7Ci19Ci0KLU1lZGlhUGF5bG9hZFZl
Y3RvciBNb2NrTWVkaWFFbmRwb2ludDo6Z2V0RGVmYXVsdFZpZGVvUGF5bG9hZHMoKQotewotICAg
IE1lZGlhUGF5bG9hZFZlY3RvciBwYXlsb2FkczsKLQotICAgIE1lZGlhUGF5bG9hZCBwYXlsb2Fk
MTsKLSAgICBwYXlsb2FkMS50eXBlID0gMTAzOwotICAgIHBheWxvYWQxLmVuY29kaW5nTmFtZSA9
ICJIMjY0IjsKLSAgICBwYXlsb2FkMS5jbG9ja1JhdGUgPSA5MDAwMDsKLSAgICBwYXlsb2FkMS5j
Y21maXIgPSB0cnVlOwotICAgIHBheWxvYWQxLm5hY2twbGkgPSB0cnVlOwotICAgIHBheWxvYWQx
LmFkZFBhcmFtZXRlcigicGFja2V0aXphdGlvbk1vZGUiLCAxKTsKLSAgICBwYXlsb2Fkcy5hcHBl
bmQoV1RGTW92ZShwYXlsb2FkMSkpOwotCi0gICAgTWVkaWFQYXlsb2FkIHBheWxvYWQyOwotICAg
IHBheWxvYWQyLnR5cGUgPSAxMDA7Ci0gICAgcGF5bG9hZDIuZW5jb2RpbmdOYW1lID0gIlZQOCI7
Ci0gICAgcGF5bG9hZDIuY2xvY2tSYXRlID0gOTAwMDA7Ci0gICAgcGF5bG9hZDIuY2NtZmlyID0g
dHJ1ZTsKLSAgICBwYXlsb2FkMi5uYWNrcGxpID0gdHJ1ZTsKLSAgICBwYXlsb2FkMi5uYWNrID0g
dHJ1ZTsKLSAgICBwYXlsb2Fkcy5hcHBlbmQoV1RGTW92ZShwYXlsb2FkMikpOwotCi0gICAgTWVk
aWFQYXlsb2FkIHBheWxvYWQzOwotICAgIHBheWxvYWQzLnR5cGUgPSAxMjA7Ci0gICAgcGF5bG9h
ZDMuZW5jb2RpbmdOYW1lID0gIlJUWCI7Ci0gICAgcGF5bG9hZDMuY2xvY2tSYXRlID0gOTAwMDA7
Ci0gICAgcGF5bG9hZDMuYWRkUGFyYW1ldGVyKCJhcHQiLCAxMDApOwotICAgIHBheWxvYWQzLmFk
ZFBhcmFtZXRlcigicnR4VGltZSIsIDIwMCk7Ci0gICAgcGF5bG9hZHMuYXBwZW5kKFdURk1vdmUo
cGF5bG9hZDMpKTsKLQotICAgIHJldHVybiBwYXlsb2FkczsKLX0KLQotTWVkaWFQYXlsb2FkVmVj
dG9yIE1vY2tNZWRpYUVuZHBvaW50OjpmaWx0ZXJQYXlsb2Fkcyhjb25zdCBNZWRpYVBheWxvYWRW
ZWN0b3ImIHJlbW90ZVBheWxvYWRzLCBjb25zdCBNZWRpYVBheWxvYWRWZWN0b3ImIGRlZmF1bHRQ
YXlsb2FkcykKLXsKLSAgICBNZWRpYVBheWxvYWRWZWN0b3IgZmlsdGVyZWRQYXlsb2FkczsKLQot
ICAgIGZvciAoYXV0byYgcmVtb3RlUGF5bG9hZCA6IHJlbW90ZVBheWxvYWRzKSB7Ci0gICAgICAg
IGNvbnN0IE1lZGlhUGF5bG9hZCogZGVmYXVsdFBheWxvYWQgPSBudWxscHRyOwotICAgICAgICBm
b3IgKGF1dG8mIHBheWxvYWQgOiBkZWZhdWx0UGF5bG9hZHMpIHsKLSAgICAgICAgICAgIGlmIChw
YXlsb2FkLmVuY29kaW5nTmFtZSA9PSByZW1vdGVQYXlsb2FkLmVuY29kaW5nTmFtZS5jb252ZXJ0
VG9BU0NJSVVwcGVyY2FzZSgpKSB7Ci0gICAgICAgICAgICAgICAgZGVmYXVsdFBheWxvYWQgPSAm
cGF5bG9hZDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotICAgICAgICBpZiAoIWRlZmF1bHRQYXlsb2FkKQotICAgICAgICAgICAgY29udGludWU7Ci0K
LSAgICAgICAgaWYgKGRlZmF1bHRQYXlsb2FkLT5wYXJhbWV0ZXJzLmNvbnRhaW5zKCJwYWNrZXRp
emF0aW9uTW9kZSIpICYmIHJlbW90ZVBheWxvYWQucGFyYW1ldGVycy5jb250YWlucygicGFja2V0
aXphdGlvbk1vZGUiKQotICAgICAgICAgICAgJiYgKGRlZmF1bHRQYXlsb2FkLT5wYXJhbWV0ZXJz
LmdldCgicGFja2V0aXphdGlvbk1vZGUiKSAhPSBkZWZhdWx0UGF5bG9hZC0+cGFyYW1ldGVycy5n
ZXQoInBhY2tldGl6YXRpb25Nb2RlIikpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAg
ICAgZmlsdGVyZWRQYXlsb2Fkcy5hcHBlbmQocmVtb3RlUGF5bG9hZCk7Ci0gICAgfQotCi0gICAg
cmV0dXJuIGZpbHRlcmVkUGF5bG9hZHM7Ci19Ci0KLU1lZGlhRW5kcG9pbnQ6OlVwZGF0ZVJlc3Vs
dCBNb2NrTWVkaWFFbmRwb2ludDo6dXBkYXRlUmVjZWl2ZUNvbmZpZ3VyYXRpb24oTWVkaWFFbmRw
b2ludFNlc3Npb25Db25maWd1cmF0aW9uKiBjb25maWd1cmF0aW9uLCBib29sIGlzSW5pdGlhdG9y
KQotewotICAgIFVOVVNFRF9QQVJBTShpc0luaXRpYXRvcik7Ci0KLSAgICB1cGRhdGVDb25maWd1
cmF0aW9uTWlkcygqY29uZmlndXJhdGlvbik7Ci0gICAgcmV0dXJuIFVwZGF0ZVJlc3VsdDo6U3Vj
Y2VzczsKLX0KLQotTWVkaWFFbmRwb2ludDo6VXBkYXRlUmVzdWx0IE1vY2tNZWRpYUVuZHBvaW50
Ojp1cGRhdGVTZW5kQ29uZmlndXJhdGlvbihNZWRpYUVuZHBvaW50U2Vzc2lvbkNvbmZpZ3VyYXRp
b24qIGNvbmZpZ3VyYXRpb24sIGNvbnN0IFJlYWx0aW1lTWVkaWFTb3VyY2VNYXAmIHNlbmRTb3Vy
Y2VNYXAsIGJvb2wgaXNJbml0aWF0b3IpCi17Ci0gICAgVU5VU0VEX1BBUkFNKHNlbmRTb3VyY2VN
YXApOwotICAgIFVOVVNFRF9QQVJBTShpc0luaXRpYXRvcik7Ci0KLSAgICB1cGRhdGVDb25maWd1
cmF0aW9uTWlkcygqY29uZmlndXJhdGlvbik7Ci0gICAgcmV0dXJuIFVwZGF0ZVJlc3VsdDo6U3Vj
Y2VzczsKLX0KLQotdm9pZCBNb2NrTWVkaWFFbmRwb2ludDo6YWRkUmVtb3RlQ2FuZGlkYXRlKGNv
bnN0IEljZUNhbmRpZGF0ZSYgY2FuZGlkYXRlLCBjb25zdCBTdHJpbmcmIG1pZCwgY29uc3QgU3Ry
aW5nJiB1ZnJhZywgY29uc3QgU3RyaW5nJiBwYXNzd29yZCkKLXsKLSAgICBVTlVTRURfUEFSQU0o
Y2FuZGlkYXRlKTsKLSAgICBVTlVTRURfUEFSQU0obWlkKTsKLSAgICBVTlVTRURfUEFSQU0odWZy
YWcpOwotICAgIFVOVVNFRF9QQVJBTShwYXNzd29yZCk7Ci19Ci0KLVJlZjxSZWFsdGltZU1lZGlh
U291cmNlPiBNb2NrTWVkaWFFbmRwb2ludDo6Y3JlYXRlTXV0ZWRSZW1vdGVTb3VyY2UoY29uc3Qg
U3RyaW5nJiBtaWQsIFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGUgdHlwZSkKLXsKLSAgICBSZWZQ
dHI8UmVhbHRpbWVNZWRpYVNvdXJjZT4gc291cmNlOwotCi0gICAgc3dpdGNoICh0eXBlKSB7Ci0g
ICAgY2FzZSBSZWFsdGltZU1lZGlhU291cmNlOjpUeXBlOjpBdWRpbzoKLSAgICAgICAgc291cmNl
ID0gTW9ja1JlYWx0aW1lQXVkaW9Tb3VyY2U6OmNyZWF0ZU11dGVkKCJyZW1vdGUgYXVkaW8iKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBSZWFsdGltZU1lZGlhU291cmNlOjpUeXBlOjpWaWRl
bzoKLSAgICAgICAgc291cmNlID0gTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2U6OmNyZWF0ZU11dGVk
KCJyZW1vdGUgdmlkZW8iKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBSZWFsdGltZU1lZGlh
U291cmNlOjpUeXBlOjpOb25lOgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9
Ci0KLSAgICBtX211dGVkUmVtb3RlU291cmNlcy5zZXQobWlkLCBzb3VyY2UpOwotICAgIHJldHVy
biBzb3VyY2UucmVsZWFzZU5vbk51bGwoKTsKLX0KLQotdm9pZCBNb2NrTWVkaWFFbmRwb2ludDo6
cmVwbGFjZVNlbmRTb3VyY2UoUmVhbHRpbWVNZWRpYVNvdXJjZSYgbmV3U291cmNlLCBjb25zdCBT
dHJpbmcmIG1pZCkKLXsKLSAgICBVTlVTRURfUEFSQU0obmV3U291cmNlKTsKLSAgICBVTlVTRURf
UEFSQU0obWlkKTsKLX0KLQotdm9pZCBNb2NrTWVkaWFFbmRwb2ludDo6cmVwbGFjZU11dGVkUmVt
b3RlU291cmNlTWlkKGNvbnN0IFN0cmluZyYgb2xkTWlkLCBjb25zdCBTdHJpbmcmIG5ld01pZCkK
LXsKLSAgICBSZWZQdHI8UmVhbHRpbWVNZWRpYVNvdXJjZT4gcmVtb3RlU291cmNlID0gbV9tdXRl
ZFJlbW90ZVNvdXJjZXMudGFrZShvbGRNaWQpOwotICAgIG1fbXV0ZWRSZW1vdGVTb3VyY2VzLnNl
dChuZXdNaWQsIFdURk1vdmUocmVtb3RlU291cmNlKSk7Ci19Ci0KLXZvaWQgTW9ja01lZGlhRW5k
cG9pbnQ6OnN0b3AoKQotewotfQotCi12b2lkIE1vY2tNZWRpYUVuZHBvaW50OjplbXVsYXRlUGxh
dGZvcm1FdmVudChjb25zdCBTdHJpbmcmIGFjdGlvbikKLXsKLSAgICBpZiAoYWN0aW9uID09ICJk
aXNwYXRjaC1mYWtlLWljZS1jYW5kaWRhdGVzIikKLSAgICAgICAgZGlzcGF0Y2hGYWtlSWNlQ2Fu
ZGlkYXRlcygpOwotICAgIGVsc2UgaWYgKGFjdGlvbiA9PSAic3RlcC1pY2UtdHJhbnNwb3J0LXN0
YXRlcyIpCi0gICAgICAgIHN0ZXBJY2VUcmFuc3BvcnRTdGF0ZXMoKTsKLSAgICBlbHNlIGlmIChh
Y3Rpb24gPT0gInVubXV0ZS1yZW1vdGUtc291cmNlcy1ieS1taWQiKQotICAgICAgICB1bm11dGVS
ZW1vdGVTb3VyY2VzQnlNaWQoKTsKLX0KLQotdm9pZCBNb2NrTWVkaWFFbmRwb2ludDo6dXBkYXRl
Q29uZmlndXJhdGlvbk1pZHMoY29uc3QgTWVkaWFFbmRwb2ludFNlc3Npb25Db25maWd1cmF0aW9u
JiBjb25maWd1cmF0aW9uKQotewotICAgIFZlY3RvcjxTdHJpbmc+IG1pZHM7Ci0gICAgZm9yIChh
dXRvJiBtZWRpYURlc2NyaXB0aW9uIDogY29uZmlndXJhdGlvbi5tZWRpYURlc2NyaXB0aW9ucygp
KQotICAgICAgICBtaWRzLmFwcGVuZChtZWRpYURlc2NyaXB0aW9uLm1pZCk7Ci0gICAgbV9taWRz
LnN3YXAobWlkcyk7Ci19Ci0KLXZvaWQgTW9ja01lZGlhRW5kcG9pbnQ6OmRpc3BhdGNoRmFrZUlj
ZUNhbmRpZGF0ZXMoKQotewotICAgIG1fZmFrZUljZUNhbmRpZGF0ZXMuYXBwZW5kKHsgImhvc3Qi
LCAiMSIsIDEsICJVRFAiLCAyMDEzMjY2NDMxLCAiMTkyLjE2OC4wLjEwMCIsIDM4ODM4LCB7IH0s
IHsgfSwgMCB9KTsKLSAgICBtX2Zha2VJY2VDYW5kaWRhdGVzLmFwcGVuZCh7ICJob3N0IiwgIjIi
LCAxLCAiVENQIiwgMTAxOTIxNjM4MywgIjE5Mi4xNjguMC4xMDAiLCA5LCAiYWN0aXZlIiwgeyB9
LCAwIH0pOwotICAgIG1fZmFrZUljZUNhbmRpZGF0ZXMuYXBwZW5kKHsgInNyZmx4IiwgIjMiLCAx
LCAiVURQIiwgMTY3NzcyMjExMSwgIjE3Mi4xOC4wLjEiLCA0Nzk4OSwgeyB9LCAiMTkyLjE2OC4w
LjEwMCIsIDQ3OTg5IH0pOwotCi0gICAgLy8gUmV2ZXJzZSBvcmRlciB0byB1c2UgdGFrZUxhc3Qo
KSB3aGlsZSBrZWVwaW5nIHRoZSBhYm92ZSBvcmRlcgotICAgIG1fZmFrZUljZUNhbmRpZGF0ZXMu
cmV2ZXJzZSgpOwotCi0gICAgbV9pY2VDYW5kaWRhdGVUaW1lci5zdGFydE9uZVNob3QoMF9zKTsK
LX0KLQotdm9pZCBNb2NrTWVkaWFFbmRwb2ludDo6aWNlQ2FuZGlkYXRlVGltZXJGaXJlZCgpCi17
Ci0gICAgaWYgKG1fbWlkcy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICgh
bV9mYWtlSWNlQ2FuZGlkYXRlcy5pc0VtcHR5KCkpIHsKLSAgICAgICAgbV9jbGllbnQuZ290SWNl
Q2FuZGlkYXRlKG1fbWlkc1swXSwgbV9mYWtlSWNlQ2FuZGlkYXRlcy50YWtlTGFzdCgpKTsKLSAg
ICAgICAgbV9pY2VDYW5kaWRhdGVUaW1lci5zdGFydE9uZVNob3QoMF9zKTsKLSAgICB9IGVsc2UK
LSAgICAgICAgbV9jbGllbnQuZG9uZUdhdGhlcmluZ0NhbmRpZGF0ZXMobV9taWRzWzBdKTsKLX0K
LQotdm9pZCBNb2NrTWVkaWFFbmRwb2ludDo6c3RlcEljZVRyYW5zcG9ydFN0YXRlcygpCi17Ci0g
ICAgaWYgKG1fbWlkcy5zaXplKCkgIT0gMykgewotICAgICAgICBMT0dfRVJST1IoIlRoZSAnc3Rl
cC1pY2UtdHJhbnNwb3J0LXN0YXRlcycgYWN0aW9uIHJlcXVpcmVzIDMgdHJhbnNjZWl2ZXJzIik7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBTaG91bGQgZ28gdG86Ci0gICAgLy8g
J2NoZWNraW5nJwotICAgIG1faWNlVHJhbnNwb3J0U3RhdGVDaGFuZ2VzLmFwcGVuZChzdGQ6Om1h
a2VfcGFpcihtX21pZHNbMF0sIFJUQ0ljZVRyYW5zcG9ydFN0YXRlOjpDaGVja2luZykpOwotICAg
IG1faWNlVHJhbnNwb3J0U3RhdGVDaGFuZ2VzLmFwcGVuZChzdGQ6Om1ha2VfcGFpcihtX21pZHNb
MV0sIFJUQ0ljZVRyYW5zcG9ydFN0YXRlOjpDaGVja2luZykpOwotICAgIG1faWNlVHJhbnNwb3J0
U3RhdGVDaGFuZ2VzLmFwcGVuZChzdGQ6Om1ha2VfcGFpcihtX21pZHNbMl0sIFJUQ0ljZVRyYW5z
cG9ydFN0YXRlOjpDaGVja2luZykpOwotCi0gICAgLy8gJ2Nvbm5lY3RlZCcKLSAgICBtX2ljZVRy
YW5zcG9ydFN0YXRlQ2hhbmdlcy5hcHBlbmQoc3RkOjptYWtlX3BhaXIobV9taWRzWzBdLCBSVENJ
Y2VUcmFuc3BvcnRTdGF0ZTo6Q29ubmVjdGVkKSk7Ci0gICAgbV9pY2VUcmFuc3BvcnRTdGF0ZUNo
YW5nZXMuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKG1fbWlkc1sxXSwgUlRDSWNlVHJhbnNwb3J0U3Rh
dGU6OkNvbXBsZXRlZCkpOwotICAgIG1faWNlVHJhbnNwb3J0U3RhdGVDaGFuZ2VzLmFwcGVuZChz
dGQ6Om1ha2VfcGFpcihtX21pZHNbMl0sIFJUQ0ljZVRyYW5zcG9ydFN0YXRlOjpDbG9zZWQpKTsK
LQotICAgIC8vICdjb21wbGV0ZWQnCi0gICAgbV9pY2VUcmFuc3BvcnRTdGF0ZUNoYW5nZXMuYXBw
ZW5kKHN0ZDo6bWFrZV9wYWlyKG1fbWlkc1swXSwgUlRDSWNlVHJhbnNwb3J0U3RhdGU6OkNvbXBs
ZXRlZCkpOwotCi0gICAgLy8gJ2ZhaWxlZCcKLSAgICBtX2ljZVRyYW5zcG9ydFN0YXRlQ2hhbmdl
cy5hcHBlbmQoc3RkOjptYWtlX3BhaXIobV9taWRzWzBdLCBSVENJY2VUcmFuc3BvcnRTdGF0ZTo6
RmFpbGVkKSk7Ci0KLSAgICAvLyAnZGlzY29ubmVjdGVkJwotICAgIG1faWNlVHJhbnNwb3J0U3Rh
dGVDaGFuZ2VzLmFwcGVuZChzdGQ6Om1ha2VfcGFpcihtX21pZHNbMV0sIFJUQ0ljZVRyYW5zcG9y
dFN0YXRlOjpEaXNjb25uZWN0ZWQpKTsKLSAgICBtX2ljZVRyYW5zcG9ydFN0YXRlQ2hhbmdlcy5h
cHBlbmQoc3RkOjptYWtlX3BhaXIobV9taWRzWzBdLCBSVENJY2VUcmFuc3BvcnRTdGF0ZTo6Q2xv
c2VkKSk7Ci0KLSAgICAvLyAnbmV3JwotICAgIG1faWNlVHJhbnNwb3J0U3RhdGVDaGFuZ2VzLmFw
cGVuZChzdGQ6Om1ha2VfcGFpcihtX21pZHNbMV0sIFJUQ0ljZVRyYW5zcG9ydFN0YXRlOjpDbG9z
ZWQpKTsKLQotICAgIC8vIFJldmVyc2Ugb3JkZXIgdG8gdXNlIHRha2VMYXN0KCkgd2hpbGUga2Vl
cGluZyB0aGUgYWJvdmUgb3JkZXIKLSAgICBtX2ljZVRyYW5zcG9ydFN0YXRlQ2hhbmdlcy5yZXZl
cnNlKCk7Ci0KLSAgICBtX2ljZVRyYW5zcG9ydFRpbWVyLnN0YXJ0T25lU2hvdCgwX3MpOwotfQot
Ci12b2lkIE1vY2tNZWRpYUVuZHBvaW50OjppY2VUcmFuc3BvcnRUaW1lckZpcmVkKCkKLXsKLSAg
ICBpZiAobV9pY2VUcmFuc3BvcnRTdGF0ZUNoYW5nZXMuaXNFbXB0eSgpIHx8IG1fbWlkcy5zaXpl
KCkgIT0gMykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byBzdGF0ZUNoYW5nZSA9IG1faWNl
VHJhbnNwb3J0U3RhdGVDaGFuZ2VzLnRha2VMYXN0KCk7Ci0gICAgbV9jbGllbnQuaWNlVHJhbnNw
b3J0U3RhdGVDaGFuZ2VkKHN0YXRlQ2hhbmdlLmZpcnN0LCBzdGF0ZUNoYW5nZS5zZWNvbmQpOwot
Ci0gICAgbV9pY2VUcmFuc3BvcnRUaW1lci5zdGFydE9uZVNob3QoMF9zKTsKLX0KLQotdm9pZCBN
b2NrTWVkaWFFbmRwb2ludDo6dW5tdXRlUmVtb3RlU291cmNlc0J5TWlkKCkKLXsKLSAgICBpZiAo
bV9taWRzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gTG9va2luZyB1cCBl
YWNoIHNvdXJjZSBieSBpdHMgbWlkLCBpbnN0ZWFkIG9mIHNpbXBseSBpdGVyYXRpbmcgb3ZlciB0
aGUgbGlzdCBvZiBtdXRlZCBzb3VyY2VzLAotICAgIC8vIGVtdWxhdGVzIHJlbW90ZSBtZWRpYSBh
cnJpdmluZyBvbiBhIG1lZGlhIGRlc2NyaXB0aW9uIHdpdGggYSBzcGVjaWZpYyBtaWQgKFJUQ1J0
cFRyYW5zY2VpdmVyKS4KLQotICAgIC8vIENvcHkgdmFsdWVzIGluIHJldmVyc2Ugb3JkZXIgdG8g
bWFpbnRhaW4gdGhlIG9yaWdpbmFsIG9yZGVyIHdoaWxlIHVzaW5nIHRha2VMYXN0KCkKLSAgICBm
b3IgKGludCBpID0gbV9taWRzLnNpemUoKSAtIDE7IGkgPj0gMDsgLS1pKQotICAgICAgICBtX21p
ZHNPZlNvdXJjZXNUb1VubXV0ZS5hcHBlbmQobV9taWRzW2ldKTsKLQotICAgIG1fdW5tdXRlVGlt
ZXIuc3RhcnRPbmVTaG90KDBfcyk7Ci19Ci0KLXZvaWQgTW9ja01lZGlhRW5kcG9pbnQ6OnVubXV0
ZVRpbWVyRmlyZWQoKQotewotICAgIGF1dG8qIHNvdXJjZSA9IG1fbXV0ZWRSZW1vdGVTb3VyY2Vz
LmdldChtX21pZHNPZlNvdXJjZXNUb1VubXV0ZS50YWtlTGFzdCgpKTsKLSAgICBpZiAoc291cmNl
KQotICAgICAgICBzb3VyY2UtPnNldE11dGVkKGZhbHNlKTsKLQotICAgIGlmICghbV9taWRzT2ZT
b3VyY2VzVG9Vbm11dGUuaXNFbXB0eSgpKQotICAgICAgICBtX3VubXV0ZVRpbWVyLnN0YXJ0T25l
U2hvdCgwX3MpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFC
TEUoV0VCX1JUQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svTW9j
a01lZGlhRW5kcG9pbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svTW9ja01lZGlh
RW5kcG9pbnQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2Y2NjY0ZmI4ODU2NTM1
NzU5NTZkYmJmNTU0MmM3MjI2MTViNTk2NC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL01vY2tNZWRpYUVu
ZHBvaW50LmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMDEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxNSBFcmljc3NvbiBBQi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqICAgIGluIHRoZSBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqICAgIGRpc3RyaWJ1
dGlvbi4KLSAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgRXJpY3Nzb24gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMgY29udHJpYnV0b3JzCi0gKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSAqICAgIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
LSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNl
Ci0KLSNpZiBFTkFCTEUoV0VCX1JUQykKLQotI2luY2x1ZGUgIk1lZGlhRW5kcG9pbnQuaCIKLSNp
bmNsdWRlICJSVENJY2VUcmFuc3BvcnRTdGF0ZS5oIgotI2luY2x1ZGUgIlRpbWVyLmgiCi0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgTW9ja01lZGlhRW5kcG9pbnQgZmluYWwgOiBwdWJs
aWMgTWVkaWFFbmRwb2ludCB7Ci1wdWJsaWM6Ci0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHN0
ZDo6dW5pcXVlX3B0cjxNZWRpYUVuZHBvaW50PiBjcmVhdGUoTWVkaWFFbmRwb2ludENsaWVudCYp
OwotCi0gICAgTW9ja01lZGlhRW5kcG9pbnQoTWVkaWFFbmRwb2ludENsaWVudCYpOwotICAgIH5N
b2NrTWVkaWFFbmRwb2ludCgpOwotCi0gICAgdm9pZCBzZXRDb25maWd1cmF0aW9uKE1lZGlhRW5k
cG9pbnRDb25maWd1cmF0aW9uJiYpIGZpbmFsIHsgfTsKLQotICAgIHZvaWQgZ2VuZXJhdGVEdGxz
SW5mbygpIGZpbmFsOwotICAgIE1lZGlhUGF5bG9hZFZlY3RvciBnZXREZWZhdWx0QXVkaW9QYXls
b2FkcygpIGZpbmFsOwotICAgIE1lZGlhUGF5bG9hZFZlY3RvciBnZXREZWZhdWx0VmlkZW9QYXls
b2FkcygpIGZpbmFsOwotICAgIE1lZGlhUGF5bG9hZFZlY3RvciBmaWx0ZXJQYXlsb2Fkcyhjb25z
dCBNZWRpYVBheWxvYWRWZWN0b3ImIHJlbW90ZVBheWxvYWRzLCBjb25zdCBNZWRpYVBheWxvYWRW
ZWN0b3ImIGRlZmF1bHRQYXlsb2FkcykgZmluYWw7Ci0KLSAgICBVcGRhdGVSZXN1bHQgdXBkYXRl
UmVjZWl2ZUNvbmZpZ3VyYXRpb24oTWVkaWFFbmRwb2ludFNlc3Npb25Db25maWd1cmF0aW9uKiwg
Ym9vbCBpc0luaXRpYXRvcikgZmluYWw7Ci0gICAgVXBkYXRlUmVzdWx0IHVwZGF0ZVNlbmRDb25m
aWd1cmF0aW9uKE1lZGlhRW5kcG9pbnRTZXNzaW9uQ29uZmlndXJhdGlvbiosIGNvbnN0IFJlYWx0
aW1lTWVkaWFTb3VyY2VNYXAmLCBib29sIGlzSW5pdGlhdG9yKSBmaW5hbDsKLQotICAgIHZvaWQg
YWRkUmVtb3RlQ2FuZGlkYXRlKGNvbnN0IEljZUNhbmRpZGF0ZSYsIGNvbnN0IFN0cmluZyYgbWlk
LCBjb25zdCBTdHJpbmcmIHVmcmFnLCBjb25zdCBTdHJpbmcmIHBhc3N3b3JkKSBmaW5hbDsKLQot
ICAgIFJlZjxSZWFsdGltZU1lZGlhU291cmNlPiBjcmVhdGVNdXRlZFJlbW90ZVNvdXJjZShjb25z
dCBTdHJpbmcmIG1pZCwgUmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlwZSkgZmluYWw7Ci0gICAgdm9p
ZCByZXBsYWNlU2VuZFNvdXJjZShSZWFsdGltZU1lZGlhU291cmNlJiwgY29uc3QgU3RyaW5nJiBt
aWQpIGZpbmFsOwotICAgIHZvaWQgcmVwbGFjZU11dGVkUmVtb3RlU291cmNlTWlkKGNvbnN0IFN0
cmluZyYgb2xkTWlkLCBjb25zdCBTdHJpbmcmIG5ld01pZCkgZmluYWw7Ci0KLSAgICB2b2lkIHN0
b3AoKSBmaW5hbDsKLQotICAgIHZvaWQgZW11bGF0ZVBsYXRmb3JtRXZlbnQoY29uc3QgU3RyaW5n
JiBhY3Rpb24pIGZpbmFsOwotCi1wcml2YXRlOgotICAgIHZvaWQgdXBkYXRlQ29uZmlndXJhdGlv
bk1pZHMoY29uc3QgTWVkaWFFbmRwb2ludFNlc3Npb25Db25maWd1cmF0aW9uJik7Ci0KLSAgICBz
dGQ6OnVuaXF1ZV9wdHI8UlRDRGF0YUNoYW5uZWxIYW5kbGVyPiBjcmVhdGVEYXRhQ2hhbm5lbEhh
bmRsZXIoY29uc3QgU3RyaW5nJiwgY29uc3QgUlRDRGF0YUNoYW5uZWxJbml0JikgZmluYWw7Ci0K
LSAgICB2b2lkIGRpc3BhdGNoRmFrZUljZUNhbmRpZGF0ZXMoKTsKLSAgICB2b2lkIGljZUNhbmRp
ZGF0ZVRpbWVyRmlyZWQoKTsKLQotICAgIHZvaWQgc3RlcEljZVRyYW5zcG9ydFN0YXRlcygpOwot
ICAgIHZvaWQgaWNlVHJhbnNwb3J0VGltZXJGaXJlZCgpOwotCi0gICAgdm9pZCB1bm11dGVSZW1v
dGVTb3VyY2VzQnlNaWQoKTsKLSAgICB2b2lkIHVubXV0ZVRpbWVyRmlyZWQoKTsKLQotICAgIE1l
ZGlhRW5kcG9pbnRDbGllbnQmIG1fY2xpZW50OwotICAgIFZlY3RvcjxTdHJpbmc+IG1fbWlkczsK
LSAgICBIYXNoTWFwPFN0cmluZywgUmVmUHRyPFJlYWx0aW1lTWVkaWFTb3VyY2U+PiBtX211dGVk
UmVtb3RlU291cmNlczsKLQotICAgIFZlY3RvcjxJY2VDYW5kaWRhdGU+IG1fZmFrZUljZUNhbmRp
ZGF0ZXM7Ci0gICAgVGltZXIgbV9pY2VDYW5kaWRhdGVUaW1lcjsKLQotICAgIFZlY3RvcjxzdGQ6
OnBhaXI8U3RyaW5nLCBSVENJY2VUcmFuc3BvcnRTdGF0ZT4+IG1faWNlVHJhbnNwb3J0U3RhdGVD
aGFuZ2VzOwotICAgIFRpbWVyIG1faWNlVHJhbnNwb3J0VGltZXI7Ci0KLSAgICBWZWN0b3I8U3Ry
aW5nPiBtX21pZHNPZlNvdXJjZXNUb1VubXV0ZTsKLSAgICBUaW1lciBtX3VubXV0ZVRpbWVyOwot
ICAgIAotICAgIFdlYWtQdHJGYWN0b3J5PE1vY2tNZWRpYUVuZHBvaW50PiBtX3dlYWtQdHJGYWN0
b3J5OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKFdF
Ql9SVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL01vY2tSZWFs
dGltZU1lZGlhU291cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svTW9ja1Jl
YWx0aW1lTWVkaWFTb3VyY2UuY3BwCmluZGV4IGI0MjQyN2I3Y2RkN2Q4OWUwMjBkNmE1ZjYyZjQ3
ZWNhNzQ3ZjAyZTguLjg3OTE5NDVkZmYzMTA4OTBlZTIwZTFmYmY0ZWI1NGE2NGVkMGQ5MDYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svTW9ja1JlYWx0aW1lTWVkaWFT
b3VyY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svTW9ja1JlYWx0aW1l
TWVkaWFTb3VyY2UuY3BwCkBAIC04Miw3ICs4Miw3IEBAIFZlY3RvcjxDYXB0dXJlRGV2aWNlPiYg
TW9ja1JlYWx0aW1lTWVkaWFTb3VyY2U6OnZpZGVvRGV2aWNlcygpCiB9CiAKIE1vY2tSZWFsdGlt
ZU1lZGlhU291cmNlOjpNb2NrUmVhbHRpbWVNZWRpYVNvdXJjZShjb25zdCBTdHJpbmcmIGlkLCBS
ZWFsdGltZU1lZGlhU291cmNlOjpUeXBlIHR5cGUsIGNvbnN0IFN0cmluZyYgbmFtZSkKLSAgICA6
IEJhc2VSZWFsdGltZU1lZGlhU291cmNlQ2xhc3MoaWQsIHR5cGUsIG5hbWUpCisgICAgOiBSZWFs
dGltZU1lZGlhU291cmNlKGlkLCB0eXBlLCBuYW1lKQogewogICAgIHN3aXRjaCAodHlwZSkgewog
ICAgIGNhc2UgUmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlwZTo6QXVkaW86CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL01vY2tSZWFsdGltZU1lZGlhU291cmNlLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL01vY2tSZWFsdGltZU1lZGlhU291cmNlLmgKaW5k
ZXggOTUwN2YwMWFhM2QzMjMwMjYzZmQ0YWZlYjlkMTY1MjhjZDk5YWMyYy4uMWVhMTE1ZDliNDMz
ZmE0ZTMzNjljYmVmODQ3OTRmOWFmMjg4NjdlZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbW9jay9Nb2NrUmVhbHRpbWVNZWRpYVNvdXJjZS5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21vY2svTW9ja1JlYWx0aW1lTWVkaWFTb3VyY2UuaApAQCAtMjgsMjggKzI4
LDE3IEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNpZm5kZWYgTW9ja1JlYWx0aW1lTWVkaWFT
b3VyY2VfaAotI2RlZmluZSBNb2NrUmVhbHRpbWVNZWRpYVNvdXJjZV9oCisjcHJhZ21hIG9uY2UK
IAogI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCiAKICNpbmNsdWRlICJSZWFsdGltZU1lZGlhU291
cmNlLmgiCiAKLSNpZiBVU0UoT1BFTldFQlJUQykKLSNpbmNsdWRlICJSZWFsdGltZU1lZGlhU291
cmNlT3dyLmgiCi0jZW5kaWYKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBDYXB0dXJl
RGV2aWNlOwogCi0jaWYgVVNFKE9QRU5XRUJSVEMpCi11c2luZyBCYXNlUmVhbHRpbWVNZWRpYVNv
dXJjZUNsYXNzID0gUmVhbHRpbWVNZWRpYVNvdXJjZU93cjsKLSNlbHNlCi11c2luZyBCYXNlUmVh
bHRpbWVNZWRpYVNvdXJjZUNsYXNzID0gUmVhbHRpbWVNZWRpYVNvdXJjZTsKLSNlbmRpZgotCi1j
bGFzcyBNb2NrUmVhbHRpbWVNZWRpYVNvdXJjZSA6IHB1YmxpYyBCYXNlUmVhbHRpbWVNZWRpYVNv
dXJjZUNsYXNzIHsKK2NsYXNzIE1vY2tSZWFsdGltZU1lZGlhU291cmNlIDogcHVibGljIFJlYWx0
aW1lTWVkaWFTb3VyY2UgewogcHVibGljOgogICAgIHZpcnR1YWwgfk1vY2tSZWFsdGltZU1lZGlh
U291cmNlKCkgeyB9CiAKQEAgLTYxLDkgKzUwLDcgQEAgcHJvdGVjdGVkOgogCiAgICAgdmlydHVh
bCB2b2lkIHVwZGF0ZVNldHRpbmdzKFJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5ncyYpID0gMDsK
ICAgICB2aXJ0dWFsIHZvaWQgaW5pdGlhbGl6ZUNhcGFiaWxpdGllcyhSZWFsdGltZU1lZGlhU291
cmNlQ2FwYWJpbGl0aWVzJikgPSAwOwotI2lmICFVU0UoT1BFTldFQlJUQykKICAgICB2aXJ0dWFs
IHZvaWQgaW5pdGlhbGl6ZVN1cHBvcnRlZENvbnN0cmFpbnRzKFJlYWx0aW1lTWVkaWFTb3VyY2VT
dXBwb3J0ZWRDb25zdHJhaW50cyYpID0gMDsKLSNlbmRpZgogCiAgICAgY29uc3QgUmVhbHRpbWVN
ZWRpYVNvdXJjZUNhcGFiaWxpdGllcyYgY2FwYWJpbGl0aWVzKCkgY29uc3Qgb3ZlcnJpZGU7CiAg
ICAgY29uc3QgUmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzJiBzZXR0aW5ncygpIGNvbnN0IG92
ZXJyaWRlOwpAQCAtNzQsMTEgKzYxLDcgQEAgcHJvdGVjdGVkOgogCiBwcml2YXRlOgogICAgIHZv
aWQgaW5pdGlhbGl6ZUNhcGFiaWxpdGllcygpOwotI2lmIFVTRShPUEVOV0VCUlRDKQotICAgIHZv
aWQgaW5pdGlhbGl6ZVNldHRpbmdzKCkgZmluYWw7Ci0jZWxzZQogICAgIHZvaWQgaW5pdGlhbGl6
ZVNldHRpbmdzKCk7Ci0jZW5kaWYKIAogICAgIFJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5ncyBt
X2N1cnJlbnRTZXR0aW5nczsKICAgICBSZWFsdGltZU1lZGlhU291cmNlU3VwcG9ydGVkQ29uc3Ry
YWludHMgbV9zdXBwb3J0ZWRDb25zdHJhaW50czsKQEAgLTg5LDUgKzcyLDMgQEAgcHJpdmF0ZToK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0p
Ci0KLSNlbmRpZiAvLyBNb2NrUmVhbHRpbWVNZWRpYVNvdXJjZV9oCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5n
L0ludGVybmFscy5jcHAKaW5kZXggMjBlZGY5NzQ4YmNkOGZmZWRjNTMyZWVkMzUyM2Y3M2NiZDNk
OTk3MS4uM2FkNTdmNTM2YzgxYzI1MzczZTY2NjRkZjJkN2RjMTllYjU4MjRiOSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcApAQCAtMjAwLDcgKzIwMCw2IEBACiAjZW5kaWYKIAog
I2lmIEVOQUJMRShXRUJfUlRDKQotI2luY2x1ZGUgIk1vY2tNZWRpYUVuZHBvaW50LmgiCiAjaW5j
bHVkZSAiUlRDUGVlckNvbm5lY3Rpb24uaCIKICNlbmRpZgogCkBAIC00ODcsMTIgKzQ4Niw2IEBA
IEludGVybmFsczo6SW50ZXJuYWxzKERvY3VtZW50JiBkb2N1bWVudCkKICAgICBXZWJDb3JlOjpT
ZXR0aW5nczo6c2V0TWVkaWFDYXB0dXJlUmVxdWlyZXNTZWN1cmVDb25uZWN0aW9uKGZhbHNlKTsK
ICNlbmRpZgogCi0jaWYgRU5BQkxFKFdFQl9SVEMpCi0jaWYgVVNFKE9QRU5XRUJSVEMpCi0gICAg
ZW5hYmxlTW9ja01lZGlhRW5kcG9pbnQoKTsKLSNlbmRpZgotI2VuZGlmCi0KICNpZiBFTkFCTEUo
V0lSRUxFU1NfUExBWUJBQ0tfVEFSR0VUKQogICAgIGlmIChkb2N1bWVudC5wYWdlKCkpCiAgICAg
ICAgIGRvY3VtZW50LnBhZ2UoKS0+c2V0TW9ja01lZGlhUGxheWJhY2tUYXJnZXRQaWNrZXJFbmFi
bGVkKHRydWUpOwpAQCAtMTI1MCwxMyArMTI0Myw2IEBAIHZvaWQgSW50ZXJuYWxzOjplbmFibGVN
b2NrU3BlZWNoU3ludGhlc2l6ZXIoKQogCiAjaWYgRU5BQkxFKFdFQl9SVEMpCiAKLSNpZiBVU0Uo
T1BFTldFQlJUQykKLXZvaWQgSW50ZXJuYWxzOjplbmFibGVNb2NrTWVkaWFFbmRwb2ludCgpCi17
Ci0gICAgTWVkaWFFbmRwb2ludDo6Y3JlYXRlID0gTW9ja01lZGlhRW5kcG9pbnQ6OmNyZWF0ZTsK
LX0KLSNlbmRpZgotCiB2b2lkIEludGVybmFsczo6ZW11bGF0ZVJUQ1BlZXJDb25uZWN0aW9uUGxh
dGZvcm1FdmVudChSVENQZWVyQ29ubmVjdGlvbiYgY29ubmVjdGlvbiwgY29uc3QgU3RyaW5nJiBh
Y3Rpb24pCiB7CiAgICAgaWYgKCFMaWJXZWJSVENQcm92aWRlcjo6d2ViUlRDQXZhaWxhYmxlKCkp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5oIGIvU291cmNl
L1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaAppbmRleCA5YzQwMDMyYTc1ZTcwOTFkYWZhMjg4
OTRlYTEwOTczNjNkZjM2MjM4Li4xNjY5NjY4MmFiYmEzMjU2ZjgzNDVkZTMxNDllN2E3MGM2YTFm
OWJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmgKQEAgLTQzMCw5ICs0MzAsNiBAQCBw
dWJsaWM6CiAjZW5kaWYKIAogI2lmIEVOQUJMRShXRUJfUlRDKQotI2lmIFVTRShPUEVOV0VCUlRD
KQotICAgIHZvaWQgZW5hYmxlTW9ja01lZGlhRW5kcG9pbnQoKTsKLSNlbmRpZgogICAgIHZvaWQg
ZW11bGF0ZVJUQ1BlZXJDb25uZWN0aW9uUGxhdGZvcm1FdmVudChSVENQZWVyQ29ubmVjdGlvbiYs
IGNvbnN0IFN0cmluZyYgYWN0aW9uKTsKICAgICB2b2lkIHVzZU1vY2tSVENQZWVyQ29ubmVjdGlv
bkZhY3RvcnkoY29uc3QgU3RyaW5nJik7CiAgICAgdm9pZCBzZXRJQ0VDYW5kaWRhdGVGaWx0ZXJp
bmcoYm9vbCk7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKaW5kZXggODE0M2Y5NjViYmRiYzc3NmI1MDc5OGM5ZGMyOWI3NjgxYTc5MTRm
MS4uNzA5YThkOGJhZGQ2YWQxZGM3ZmY0ZjVkM2Q1NGIwMjI5NTczYTc1MCAxMDA2NDQKLS0tIGEv
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSw1
ICsxLDE0IEBACiAyMDE3LTEwLTA0ICBZb3Vlbm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4K
IAorICAgICAgICBSZW1vdmUgT3BlbldlYlJUQyBiYWNrZW5kCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzc4NjgKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHBsYXRmb3JtL2d0ay9UZXN0RXhwZWN0YXRp
b25zOgorCisyMDE3LTEwLTA0ICBZb3Vlbm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KKwog
ICAgICAgICBBZGQgcXVvdGEgdG8gY2FjaGUgQVBJCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzc1NTIKIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
cGxhdGZvcm0vZ3RrL1Rlc3RFeHBlY3RhdGlvbnMgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsv
VGVzdEV4cGVjdGF0aW9ucwppbmRleCA4YzY2ZGI2NDQ1ZTM3Mjc4Y2M5ODFhNTk3N2E2NWYyMmI0
M2EwMjM5Li40NWEyNWRkMDAxZjQwMDQzNWMzYjM5MDFiYTEyN2FiNjM3NzYyMjc0IDEwMDY0NAot
LS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvVGVzdEV4cGVjdGF0aW9ucworKysgYi9MYXlv
dXRUZXN0cy9wbGF0Zm9ybS9ndGsvVGVzdEV4cGVjdGF0aW9ucwpAQCAtNjExLDgyICs2MTEsMTEg
QEAgd2Via2l0Lm9yZy9iLzk5MDM2IGZhc3Qvc2hhZG93LWRvbS9wb2ludGVybG9ja2VsZW1lbnQt
aW4tc2xvdC5odG1sIFsgU2tpcCBdCiB3ZWJraXQub3JnL2IvODUyMTEgaWV0ZXN0Y2VudGVyL2Nz
czMvZmxleGJveC9mbGV4Ym94LWFsaWduLXN0cmV0Y2gtMDAxLmh0bSBbIEltYWdlT25seUZhaWx1
cmUgXQogd2Via2l0Lm9yZy9iLzg1MjEyIGlldGVzdGNlbnRlci9jc3MzL2ZsZXhib3gvZmxleGJv
eC1sYXlvdXQtMDAyLmh0bSBbIEltYWdlT25seUZhaWx1cmUgXQogCi0jIFdlYlJUQyAvIE1lZGlh
U3RyZWFtIGltcGxlbWVudGF0aW9uIGlzIG5vdCBjb21wbGV0ZSB5ZXQuCi0jIFNvbWUgb2YgdGhp
cyB0ZXN0cyBhcmUgc2tpcHBlZCBvbiB0aGUgZ2VuZXJhbCBUZXN0RXhwZWN0YXRpb25zLAotIyBF
bmFibGUgdGhlbSBoZXJlIGFuZCBsaXN0IHRoZSBpbmRpdmlkdWFsIGV4cGVjdGF0aW9ucyBpbiBv
cmRlciB0byBnZXQKLSMgbm90aWZpY2F0aW9ucyBvZiBuZXcgZmFpbHVyZXMuCiBmYXN0L21lZGlh
c3RyZWFtIFsgUGFzcyBdCi13ZWJydGMgWyBQYXNzIF0KLSMgR1RLIHVzZXMgT1dSIGluc3RlYWQg
b2YgbGlid2VicnRjCi13ZWJydGMvbGlid2VicnRjIFsgU2tpcCBdCi0jIFNvbWUgV2ViUlRDIGZl
YXR1cmVzIGxpa2UgZGF0YWNoYW5uZWwgYXJlIHN0aWxsIG5vdCBpbXBsZW1lbnRlZAotd2VicnRj
L2F1ZGlvLXJlcGxhY2UtdHJhY2suaHRtbCBbIEZhaWx1cmUgXQotd2VicnRjL2F1ZGlvLW11dGVk
LXN0YXRzLmh0bWwgWyBGYWlsdXJlIF0KLXdlYnJ0Yy9hdWRpby1tdXRlZC1zdGF0czIuaHRtbCBb
IEZhaWx1cmUgXQotd2VicnRjL2NhcHR1cmVDYW52YXMtd2VicnRjLmh0bWwgWyBGYWlsdXJlIF0K
LXdlYnJ0Yy9jbG9zaW5nLXBlZXJjb25uZWN0aW9uLmh0bWwgWyBUaW1lb3V0IF0KLXdlYnJ0Yy9j
b25uZWN0aW9uLXN0YXRlLmh0bWwgWyBGYWlsdXJlIF0KLXdlYnJ0Yy9kYXRhY2hhbm5lbCBbIFNr
aXAgXQotd2VicnRjL2VwaGVtZXJhbC1jZXJ0aWZpY2F0ZXMtYW5kLWNuYW1lcy5odG1sIFsgRmFp
bHVyZSBdCi13ZWJydGMvbXVsdGktdmlkZW8uaHRtbCBbIEZhaWx1cmUgXQotd2VicnRjL25vLXBv
cnQtemVyby1pbi11cGQtY2FuZGlkYXRlcy5odG1sIFsgVGltZW91dCBdCi13ZWJydGMvcGVlci1j
b25uZWN0aW9uLWF1ZGlvLW11dGUyLmh0bWwgWyBDcmFzaCBGYWlsdXJlIF0KLXdlYnJ0Yy9wZWVy
LWNvbm5lY3Rpb24tYXVkaW8tbXV0ZS5odG1sIFsgRmFpbHVyZSBdCi13ZWJydGMvcGVlci1jb25u
ZWN0aW9uLWF1ZGlvLXVubXV0ZS5odG1sIFsgRmFpbHVyZSBdCi13ZWJydGMvcGVlci1jb25uZWN0
aW9uLXJlbW90ZS1hdWRpby1tdXRlMi5odG1sIFsgQ3Jhc2ggRmFpbHVyZSBdCi13ZWJydGMvcGVl
ci1jb25uZWN0aW9uLXJlbW90ZS1hdWRpby1tdXRlLmh0bWwgWyBGYWlsdXJlIF0KLXdlYnJ0Yy9w
ZWVyLWNvbm5lY3Rpb24tdHJhY2stZW5kLmh0bWwgWyBGYWlsdXJlIF0KLXdlYnJ0Yy92aWRlby1h
ZGRUcmFjay5odG1sIFsgQ3Jhc2ggXQotd2VicnRjL3ZpZGVvLWRpc2FibGVkLWJsYWNrLmh0bWwg
WyBGYWlsdXJlIF0KLXdlYnJ0Yy92aWRlby1tZWRpYXN0cmVhbXRyYWNrLXN0YXRzLmh0bWwgWyBG
YWlsdXJlIF0KLXdlYnJ0Yy92aWRlby1tdXRlLmh0bWwgWyBGYWlsdXJlIFRpbWVvdXQgXQotd2Vi
cnRjL3ZpZGVvLXJlbW90ZS1tdXRlLmh0bWwgWyBGYWlsdXJlIF0KLXdlYnJ0Yy92aWRlby1yZXBs
YWNlLW11dGVkLXRyYWNrLmh0bWwgWyBGYWlsdXJlIFRpbWVvdXQgQ3Jhc2ggXQotd2Via2l0Lm9y
Zy9iLzE3NjgwMSB3ZWJydGMvdmlkZW8tcmVwbGFjZS10cmFjay5odG1sIFsgRmFpbHVyZSBDcmFz
aCBdCi13ZWJraXQub3JnL2IvMTc2ODAxIHdlYnJ0Yy92aWRlby1nZXRQYXJhbWV0ZXJzLmh0bWwg
WyBGYWlsdXJlIENyYXNoIF0KLXdlYmtpdC5vcmcvYi8xNzY4MDEgd2VicnRjL3ZpZGVvLmh0bWwg
WyBGYWlsdXJlIENyYXNoIF0KLXdlYnJ0Yy92aWRlby1yZXBsYWNlLXRyYWNrLXRvLW51bGwuaHRt
bCBbIEZhaWx1cmUgXQotd2VicnRjL3ZpZGVvLXJvdGF0aW9uLmh0bWwgWyBGYWlsdXJlIF0KLXdl
YnJ0Yy92aWRlby1zdGF0cy5odG1sIFsgRmFpbHVyZSBDcmFzaCBdCi13ZWJydGMvdmlkZW8tdW5t
dXRlLmh0bWwgWyBGYWlsdXJlIFRpbWVvdXQgXQotd2VicnRjL3ZpZGVvLXdpdGgtZGF0YS1jaGFu
bmVsLmh0bWwgWyBGYWlsdXJlIF0KLXdlYnJ0Yy92aWRlby13aXRoLXJlY2VpdmVyLmh0bWwgWyBG
YWlsdXJlIF0KLWltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvd2VicnRjL1JUQ1BlZXJD
b25uZWN0aW9uLWFkZEljZUNhbmRpZGF0ZS5odG1sIFsgRmFpbHVyZSBdCi1pbXBvcnRlZC93M2Mv
d2ViLXBsYXRmb3JtLXRlc3RzL3dlYnJ0Yy9SVENQZWVyQ29ubmVjdGlvbi1jcmVhdGVEYXRhQ2hh
bm5lbC5odG1sIFsgRmFpbHVyZSBdCi1pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3dl
YnJ0Yy9SVENQZWVyQ29ubmVjdGlvbi1zZXRSZW1vdGVEZXNjcmlwdGlvbi5odG1sIFsgRmFpbHVy
ZSBdCi1pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3dlYnJ0Yy9SVENQZWVyQ29ubmVj
dGlvbi1pZGwuaHRtbCBbIEZhaWx1cmUgXQotaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0
cy93ZWJydGMvUlRDUGVlckNvbm5lY3Rpb24tY3JlYXRlQW5zd2VyLmh0bWwgWyBGYWlsdXJlIF0K
LWltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvd2VicnRjL1JUQ1BlZXJDb25uZWN0aW9u
LW9ubmVnb3RpYXRpb25uZWVkZWQuaHRtbCBbIEZhaWx1cmUgXQotaW1wb3J0ZWQvdzNjL3dlYi1w
bGF0Zm9ybS10ZXN0cy93ZWJydGMvUlRDRGF0YUNoYW5uZWwtYnVmZmVyZWRBbW91bnQuaHRtbCBb
IEZhaWx1cmUgXQotaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy93ZWJydGMvUlRDRGF0
YUNoYW5uZWwtc2VuZC5odG1sIFsgRmFpbHVyZSBdCi1pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3Jt
LXRlc3RzL3dlYnJ0Yy9SVENJY2VUcmFuc3BvcnQuaHRtbCBbIEZhaWx1cmUgXQotaW1wb3J0ZWQv
dzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy93ZWJydGMvUlRDUGVlckNvbm5lY3Rpb24tYWRkVHJhbnNj
ZWl2ZXIuaHRtbCBbIEZhaWx1cmUgXQotaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy93
ZWJydGMvUlRDUGVlckNvbm5lY3Rpb24tY29ubmVjdGlvblN0YXRlLmh0bWwgWyBGYWlsdXJlIF0K
LWltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvd2VicnRjL1JUQ1BlZXJDb25uZWN0aW9u
LWdldFN0YXRzLmh0bWwgWyBGYWlsdXJlIF0KLWltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVz
dHMvd2VicnRjL1JUQ1BlZXJDb25uZWN0aW9uLWljZUNvbm5lY3Rpb25TdGF0ZS5odG1sIFsgRmFp
bHVyZSBdCi1pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3dlYnJ0Yy9SVENQZWVyQ29u
bmVjdGlvbi1pY2VHYXRoZXJpbmdTdGF0ZS5odG1sIFsgRmFpbHVyZSBdCi1pbXBvcnRlZC93M2Mv
d2ViLXBsYXRmb3JtLXRlc3RzL3dlYnJ0Yy9SVENQZWVyQ29ubmVjdGlvbi1vbmRhdGFjaGFubmVs
Lmh0bWwgWyBGYWlsdXJlIF0KLWltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvd2VicnRj
L1JUQ1BlZXJDb25uZWN0aW9uLXNldExvY2FsRGVzY3JpcHRpb24tYW5zd2VyLmh0bWwgWyBGYWls
dXJlIF0KLWltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvd2VicnRjL1JUQ1BlZXJDb25u
ZWN0aW9uLXNldExvY2FsRGVzY3JpcHRpb24tb2ZmZXIuaHRtbCBbIEZhaWx1cmUgXQotaW1wb3J0
ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy93ZWJydGMvUlRDUGVlckNvbm5lY3Rpb24tc2V0UmVt
b3RlRGVzY3JpcHRpb24tb2ZmZXIuaHRtbCBbIEZhaWx1cmUgXQotaW1wb3J0ZWQvdzNjL3dlYi1w
bGF0Zm9ybS10ZXN0cy93ZWJydGMvUlRDRFRNRlNlbmRlci1pbnNlcnREVE1GLmh0bWwgWyBDcmFz
aCBdCi1pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3dlYnJ0Yy9SVENQZWVyQ29ubmVj
dGlvbi1vbnRyYWNrLmh0bWwgWyBDcmFzaCBdCi1pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRl
c3RzL3dlYnJ0Yy9SVENQZWVyQ29ubmVjdGlvbi1zZXREZXNjcmlwdGlvbi10cmFuc2NlaXZlci5o
dG1sIFsgQ3Jhc2ggXQotaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy93ZWJydGMvUlRD
UnRwU2VuZGVyLXJlcGxhY2VUcmFjay5odG1sIFsgQ3Jhc2ggXQotaW1wb3J0ZWQvdzNjL3dlYi1w
bGF0Zm9ybS10ZXN0cy93ZWJydGMvZGF0YWNoYW5uZWwtZW1wdHlzdHJpbmcuaHRtbCBbIEZhaWx1
cmUgXQotaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy93ZWJydGMvbm8tbWVkaWEtY2Fs
bC5odG1sIFsgRmFpbHVyZSBdCi1pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3dlYnJ0
Yy9wcm9taXNlcy1jYWxsLmh0bWwgWyBGYWlsdXJlIF0KLWltcG9ydGVkL3czYy93ZWItcGxhdGZv
cm0tdGVzdHMvd2VicnRjL3J0Y3BlZXJjb25uZWN0aW9uL3NldFJlbW90ZURlc2NyaXB0aW9uLmh0
bWwgWyBGYWlsdXJlIF0KLWh0dHAvdGVzdHMvd2VicnRjL2ZpbHRlcmluZy1pY2UtY2FuZGlkYXRl
LWNyb3NzLW9yaWdpbi1mcmFtZS5odG1sIFsgVGltZW91dCBdCi1odHRwL3Rlc3RzL3dlYnJ0Yy9m
aWx0ZXJpbmctaWNlLWNhbmRpZGF0ZS1zYW1lLW9yaWdpbi1mcmFtZS5odG1sIFsgVGltZW91dCBd
Ci1odHRwL3Rlc3RzL3dlYnJ0Yy9maWx0ZXJpbmctaWNlLWNhbmRpZGF0ZS1zYW1lLW9yaWdpbi1m
cmFtZTIuaHRtbCBbIFRpbWVvdXQgXQotd2VicnRjL2ZpbHRlcmluZy1pY2UtY2FuZGlkYXRlLWFm
dGVyLXJlbG9hZC5odG1sIFsgVGltZW91dCBdCi13ZWJydGMvaWNlLWNhbmRpZGF0ZS1zZHBNTGlu
ZUluZGV4Lmh0bWwgWyBUaW1lb3V0IF0KKyMgU2tpcHBpbmcgdW50aWwgYmFja2VuZCBpcyBpbXBs
ZW1lbnRlZAord2VicnRjIFsgU2tpcCBdCitpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3Rz
L3dlYnJ0Yy8gWyBTa2lwIF0KIGh0dHAvdGVzdHMvbWVkaWEvbWVkaWEtc3RyZWFtL2dldHVzZXJt
ZWRpYS13aXRoLWNhbnZhcy5odG1sIFsgVGltZW91dCBdCi13ZWJraXQub3JnL2IvMTY5MTEwIHdl
YnJ0Yy9hdWRpby1wZWVyLWNvbm5lY3Rpb24td2ViYXVkaW8uaHRtbCBbIEZhaWx1cmUgVGltZW91
dCBdCi13ZWJraXQub3JnL2IvMTczNDU2IGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMv
d2VicnRjL1JUQ1BlZXJDb25uZWN0aW9uLWNyZWF0ZU9mZmVyLmh0bWwgWyBDcmFzaCBdCi13ZWJr
aXQub3JnL2IvMTczNDU2IHdlYnJ0Yy9jcmVhdGVPZmZlckFuc3dlci5odG1sICBbIENyYXNoIF0K
LXdlYmtpdC5vcmcvYi8xNzM0NTYgd2VicnRjL3ZpZGVvLWFkZFRyYW5zY2VpdmVyLmh0bWwgWyBD
cmFzaCBdCiAjIFRoZSBNZWRpYVN0cmVhbSBpbXBsZW1lbnRhdGlvbiBpcyBhbHNvIHN0aWxsIG5v
dCBjb21wbGV0ZWQKIHdlYmtpdC5vcmcvYi83OTIwMyBmYXN0L21lZGlhc3RyZWFtL21vY2stbWVk
aWEtc291cmNlLXdlYmF1ZGlvLmh0bWwgWyBUaW1lb3V0IF0KIHdlYmtpdC5vcmcvYi83OTIwMyBm
YXN0L21lZGlhc3RyZWFtL2dldFVzZXJNZWRpYS13ZWJhdWRpby5odG1sIFsgRmFpbHVyZSBdCkBA
IC0xMjUzLDcgKzExODIsNiBAQCB3ZWJraXQub3JnL2IvMTc1NDE5IGltcG9ydGVkL3czYy93ZWIt
cGxhdGZvcm0tdGVzdHMvc3RyZWFtcy9yZWFkYWJsZS1ieXRlLXN0cmVhbQogZmFzdC9pbWFnZXMv
YW5pbWF0ZWQtaW1hZ2UtbXA0Lmh0bWwgWyBTa2lwIF0KIAogd2Via2l0Lm9yZy9iLzE3NzUzMiBh
Y2Nlc3NpYmlsaXR5L2ltYWdlLWxvYWQtb24tZGVsYXkuaHRtbCBbIEZhaWx1cmUgXQotd2Via2l0
Lm9yZy9iLzE3NzUzMyB3ZWJydGMvdmlkZW8taW50ZXJydXB0aW9uLmh0bWwgWyBGYWlsdXJlIF0K
IAogd2Via2l0Lm9yZy9iLzE3NzYzMiBmYXN0L3RleHQvZmxhZy1jb2RlcG9pbnQuaHRtbCBbIElt
YWdlT25seUZhaWx1cmUgXQogCkBAIC0xMzgyLDcgKzEzMTAsNiBAQCB3ZWJraXQub3JnL2IvMTc2
ODA1IG1lZGlhL21lZGlhLWhpZ2hlci1wcmlvLWF1ZGlvLXN0cmVhbS5odG1sIFsgQ3Jhc2ggXQog
d2Via2l0Lm9yZy9iLzE3NjgwNiBtZWRpYS90cmFjay90cmFjay10ZXh0LXRyYWNrLWN1ZS1saXN0
Lmh0bWwgWyBDcmFzaCBdCiAKIHdlYmtpdC5vcmcvYi8xNzY4NTYgZmFzdC9tZWRpYXN0cmVhbS9h
cHBseS1jb25zdHJhaW50cy12aWRlby5odG1sIFsgQ3Jhc2ggXQotd2Via2l0Lm9yZy9iLzE3Njg1
MCB3ZWJydGMvY2xvbmUtYXVkaW8tdHJhY2suaHRtbCBbIEZhaWx1cmUgQ3Jhc2ggXQogd2Via2l0
Lm9yZy9iLzE3Njg2MSBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL21lZGlhLXNvdXJj
ZS9tZWRpYXNvdXJjZS1zb3VyY2VidWZmZXItbW9kZS5odG1sIFsgQ3Jhc2ggXQogCiAjIFNlZSBh
bHNvIHdlYmtpdC5vcmcvYi8xNDE2OTkKQEAgLTEzOTQsOCArMTMyMSw2IEBAIHdlYmtpdC5vcmcv
Yi8xNzc1MzcgaHR0cC90ZXN0cy9tdWx0aXBhcnQvbXVsdGlwYXJ0LWh0bWwucGhwIFsgQ3Jhc2gg
XQogCiB3ZWJraXQub3JnL2IvMTc3ODE2IHdlYmdsLzEuMC4yL2NvbmZvcm1hbmNlL29nbGVzL0dM
L3ZlYy92ZWNfMDAxX3RvXzAwOC5odG1sIFsgQ3Jhc2ggUGFzcyBdCiAKLXdlYmtpdC5vcmcvYi8x
Nzc4MTggd2VicnRjL25lZ290aWF0ZWRuZWVkZWQtZXZlbnQtYWRkU3RyZWFtLmh0bWwgWyBDcmFz
aCBQYXNzIF0KLQogIy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KICMgRW5kIG9mIENy
YXNoaW5nIHRlc3RzCiAjLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>322667</attachid>
            <date>2017-10-04 07:24:38 -0700</date>
            <delta_ts>2017-10-04 07:54:44 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-177868-20171004162436.patch</filename>
            <type>text/plain</type>
            <size>266226</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjIyODM0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzIwOWYyMWRiZDdiYWJk
NjQyODZiYTRjMDYzYTU5NWI2YTk1MzVhMi4uYzMxMWMxM2U0NWE3ODI1MmUzOWUxNmFhNjlkYzM5
NTVlMDc2NjBiNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDU2IEBACiAyMDE3LTEwLTA0ICBZb3Vl
bm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KIAorICAgICAgICBSZW1vdmUgT3BlbldlYlJU
QyBiYWNrZW5kCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNzc4NjgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIERlcml2ZWRTb3VyY2VzLm1ha2U6CisgICAg
ICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9QZWVyQ29ubmVjdGlvbkJhY2tlbmQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Y3JlYXRlTm9QZWVyQ29ubmVjdGlvbkJhY2tlbmQpOiBSZXR1cm5pbmcg
bnVsbCBpZiBsaWJ3ZWJydGMgaXMgbm90IGRlZmluZWQuCisgICAgICAgICogTW9kdWxlcy9tZWRp
YXN0cmVhbS9NZWRpYUVuZHBvaW50UGVlckNvbm5lY3Rpb24uY3BwOiBSZW1vdmVkLgorICAgICAg
ICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFFbmRwb2ludFBlZXJDb25uZWN0aW9uLmg6IFJl
bW92ZWQuCisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYUVuZHBvaW50U2Vzc2lv
bkRlc2NyaXB0aW9uLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFt
L01lZGlhRW5kcG9pbnRTZXNzaW9uRGVzY3JpcHRpb24uaDogUmVtb3ZlZC4KKyAgICAgICAgKiBN
b2R1bGVzL21lZGlhc3RyZWFtL1NEUFByb2Nlc3Nvci5jcHA6IFJlbW92ZWQuCisgICAgICAgICog
TW9kdWxlcy9tZWRpYXN0cmVhbS9TRFBQcm9jZXNzb3IuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBN
b2R1bGVzL21lZGlhc3RyZWFtL2xpYndlYnJ0Yy9MaWJXZWJSVENNZWRpYUVuZHBvaW50LmNwcDoK
KyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICog
cGxhdGZvcm0vR1N0cmVhbWVyLmNtYWtlOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL01l
ZGlhUGxheWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmJ1aWxkTWVkaWFFbmdpbmVzVmVjdG9y
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lcjo6c3VwcG9ydHNUeXBlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3Ry
ZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyLmNwcDogUmVtb3ZlZC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyT3dyLmg6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFF
bmRwb2ludC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVk
aWFFbmRwb2ludC5oOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL01l
ZGlhRW5kcG9pbnRTZXNzaW9uQ29uZmlndXJhdGlvbi5oOiBSZW1vdmVkLgorICAgICAgICAqIHBs
YXRmb3JtL21lZGlhc3RyZWFtL1NEUFByb2Nlc3NvclNjcmlwdFJlc291cmNlLmNwcDogUmVtb3Zl
ZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9TRFBQcm9jZXNzb3JTY3JpcHRSZXNv
dXJjZS5oOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL29wZW53ZWJy
dGMvTWVkaWFFbmRwb2ludE93ci5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vbWVk
aWFzdHJlYW0vb3BlbndlYnJ0Yy9NZWRpYUVuZHBvaW50T3dyLmg6IFJlbW92ZWQuCisgICAgICAg
ICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vb3BlbndlYnJ0Yy9PcGVuV2ViUlRDVXRpbGl0aWVzLmNw
cDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9vcGVud2VicnRjL09w
ZW5XZWJSVENVdGlsaXRpZXMuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0
cmVhbS9vcGVud2VicnRjL1JlYWx0aW1lQXVkaW9Tb3VyY2VPd3IuaDogUmVtb3ZlZC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9vcGVud2VicnRjL1JlYWx0aW1lTWVkaWFTb3VyY2VD
ZW50ZXJPd3IuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL29w
ZW53ZWJydGMvUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlck93ci5oOiBSZW1vdmVkLgorICAgICAg
ICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL29wZW53ZWJydGMvUmVhbHRpbWVNZWRpYVNvdXJjZU93
ci5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vb3BlbndlYnJ0
Yy9SZWFsdGltZU1lZGlhU291cmNlT3dyLmg6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0v
bWVkaWFzdHJlYW0vb3BlbndlYnJ0Yy9SZWFsdGltZVZpZGVvU291cmNlT3dyLmg6IFJlbW92ZWQu
CisgICAgICAgICogcGxhdGZvcm0vbW9jay9Nb2NrTWVkaWFFbmRwb2ludC5jcHA6IFJlbW92ZWQu
CisgICAgICAgICogcGxhdGZvcm0vbW9jay9Nb2NrTWVkaWFFbmRwb2ludC5oOiBSZW1vdmVkLgor
ICAgICAgICAqIHBsYXRmb3JtL21vY2svTW9ja1JlYWx0aW1lTWVkaWFTb3VyY2UuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6TW9ja1JlYWx0aW1lTWVkaWFTb3VyY2U6Ok1vY2tSZWFsdGltZU1lZGlh
U291cmNlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tb2NrL01vY2tSZWFsdGltZU1lZGlhU291cmNl
Lmg6CisgICAgICAgICogdGVzdGluZy9JbnRlcm5hbHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SW50ZXJuYWxzOjpJbnRlcm5hbHMpOgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjplbmFi
bGVNb2NrTWVkaWFFbmRwb2ludCk6IERlbGV0ZWQuCisgICAgICAgICogdGVzdGluZy9JbnRlcm5h
bHMuaDoKKworMjAxNy0xMC0wNCAgWW91ZW5uIEZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+CisK
ICAgICAgICAgQWRkIHF1b3RhIHRvIGNhY2hlIEFQSQogICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc3NTUyCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXgg
MWNjMTZjN2QxZmFiZGVmNjU3OGI0MjIxMTFkYmI1NjVlMzkwNDg5ZC4uN2YyMmU1MTZmOTdhMjk3
ZGQ1NDhlNzVjZWUwODc3YTFjNTYyNWYxYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ01h
a2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKQEAgLTEwOTMs
OCArMTA5Myw2IEBAIHNldChXZWJDb3JlX1NPVVJDRVMKICAgICBNb2R1bGVzL21lZGlhc3RyZWFt
L01lZGlhRGV2aWNlcy5jcHAKICAgICBNb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhRGV2aWNlc0Vu
dW1lcmF0aW9uUmVxdWVzdC5jcHAKICAgICBNb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhRGV2aWNl
c1JlcXVlc3QuY3BwCi0gICAgTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYUVuZHBvaW50UGVlckNv
bm5lY3Rpb24uY3BwCi0gICAgTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYUVuZHBvaW50U2Vzc2lv
bkRlc2NyaXB0aW9uLmNwcAogICAgIE1vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW0uY3Bw
CiAgICAgTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbUV2ZW50LmNwcAogICAgIE1vZHVs
ZXMvbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1SZWdpc3RyeS5jcHAKQEAgLTExMTYsNyArMTExNCw2
IEBAIHNldChXZWJDb3JlX1NPVVJDRVMKICAgICBNb2R1bGVzL21lZGlhc3RyZWFtL1JUQ1J0cFRy
YW5zY2VpdmVyLmNwcAogICAgIE1vZHVsZXMvbWVkaWFzdHJlYW0vUlRDU2Vzc2lvbkRlc2NyaXB0
aW9uLmNwcAogICAgIE1vZHVsZXMvbWVkaWFzdHJlYW0vUlRDVHJhY2tFdmVudC5jcHAKLSAgICBN
b2R1bGVzL21lZGlhc3RyZWFtL1NEUFByb2Nlc3Nvci5jcHAKICAgICBNb2R1bGVzL21lZGlhc3Ry
ZWFtL1VzZXJNZWRpYUNvbnRyb2xsZXIuY3BwCiAgICAgTW9kdWxlcy9tZWRpYXN0cmVhbS9Vc2Vy
TWVkaWFSZXF1ZXN0LmNwcAogCkBAIC0yNTU0LDEzICsyNTUxLDExIEBAIHNldChXZWJDb3JlX1NP
VVJDRVMKICAgICBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZU1lZGlhU291cmNlLmNwcAog
ICAgIHBsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXIuY3BwCiAg
ICAgcGxhdGZvcm0vbWVkaWFzdHJlYW0vUmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzLmNwcAot
ICAgIHBsYXRmb3JtL21lZGlhc3RyZWFtL1NEUFByb2Nlc3NvclNjcmlwdFJlc291cmNlLmNwcAog
CiAgICAgcGxhdGZvcm0vbWVkaWFzdHJlYW0vbGlid2VicnRjL0xpYldlYlJUQ1Byb3ZpZGVyLmNw
cAogCiAgICAgcGxhdGZvcm0vbW9jay9EZXZpY2VPcmllbnRhdGlvbkNsaWVudE1vY2suY3BwCiAg
ICAgcGxhdGZvcm0vbW9jay9HZW9sb2NhdGlvbkNsaWVudE1vY2suY3BwCi0gICAgcGxhdGZvcm0v
bW9jay9Nb2NrTWVkaWFFbmRwb2ludC5jcHAKICAgICBwbGF0Zm9ybS9tb2NrL01vY2tSZWFsdGlt
ZUF1ZGlvU291cmNlLmNwcAogICAgIHBsYXRmb3JtL21vY2svTW9ja1JlYWx0aW1lTWVkaWFTb3Vy
Y2UuY3BwCiAgICAgcGxhdGZvcm0vbW9jay9Nb2NrUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlci5j
cHAKQEAgLTM4ODIsMjQgKzM4NzcsNiBAQCBpZiAoV2ViQ29yZV9VU0VSX0FHRU5UX1NDUklQVFMp
CiAgICAgbGlzdChBUFBFTkQgV2ViQ29yZV9ERVJJVkVEX1NPVVJDRVMgJHtERVJJVkVEX1NPVVJD
RVNfV0VCQ09SRV9ESVJ9L1VzZXJBZ2VudFNjcmlwdHNEYXRhLmNwcCkKIGVuZGlmICgpCiAKLWlm
IChFTkFCTEVfV0VCX1JUQykKLSAgICAjIE5lY2Vzc2FyeSB2YXJpYWJsZXM6Ci0gICAgIyBXZWJD
b3JlX1NEUF9QUk9DRVNTT1JfU0NSSVBUUyBjb250YWluaW5nIHRoZSBKYXZhU2NyaXB0IHNvdXJj
ZXMgbGlzdAotICAgICMgV2ViQ29yZV9TRFBfUFJPQ0VTU09SX1NDUklQVFNfREVQRU5ERU5DSUVT
IGNvbnRhaW5pbmcgdGhlIHNvdXJjZSBmaWxlIHRoYXQgd2lsbCBsb2FkIHRoZSBzY3JpcHRzIHRv
IGFkZCB0aGUgcHJvcGVyCi0gICAgIyAgIGRlcGVuZGVuY3kgYW5kIGhhdmluZyB0aGVtIGJ1aWx0
IGF0IHRoZSByaWdodCBtb21lbnQKLSAgICBzZXQoV2ViQ29yZV9TRFBfUFJPQ0VTU09SX1NDUklQ
VFMgJHtXRUJDT1JFX0RJUn0vTW9kdWxlcy9tZWRpYXN0cmVhbS9zZHAuanMpCi0gICAgc2V0KFdl
YkNvcmVfU0RQX1BST0NFU1NPUl9TQ1JJUFRTX0RFUEVOREVOQ0lFUyAke1dFQkNPUkVfRElSfS9w
bGF0Zm9ybS9tZWRpYXN0cmVhbS9TRFBQcm9jZXNzb3JTY3JpcHRSZXNvdXJjZS5jcHApCi0KLSAg
ICBNQUtFX0pTX0ZJTEVfQVJSQVlTKAotICAgICAgICAke0RFUklWRURfU09VUkNFU19XRUJDT1JF
X0RJUn0vU0RQUHJvY2Vzc29yU2NyaXB0c0RhdGEuY3BwCi0gICAgICAgICR7REVSSVZFRF9TT1VS
Q0VTX1dFQkNPUkVfRElSfS9TRFBQcm9jZXNzb3JTY3JpcHRzRGF0YS5oCi0gICAgICAgIFdlYkNv
cmUKLSAgICAgICAgV2ViQ29yZV9TRFBfUFJPQ0VTU09SX1NDUklQVFMKLSAgICAgICAgV2ViQ29y
ZV9TRFBfUFJPQ0VTU09SX1NDUklQVFNfREVQRU5ERU5DSUVTCi0gICAgKQotICAgIGxpc3QoQVBQ
RU5EIFdlYkNvcmVfREVSSVZFRF9TT1VSQ0VTICR7REVSSVZFRF9TT1VSQ0VTX1dFQkNPUkVfRElS
fS9TRFBQcm9jZXNzb3JTY3JpcHRzRGF0YS5jcHApCi1lbmRpZiAoKQotCiAjIEdlbmVyYXRlIHBs
dWctaW4gcmVzb3VyY2VzCiBhZGRfY3VzdG9tX2NvbW1hbmQoCiAgICAgT1VUUFVUICR7REVSSVZF
RF9TT1VSQ0VTX1dFQkNPUkVfRElSfS9QbHVnSW5zUmVzb3VyY2VzRGF0YS5jcHAgJHtERVJJVkVE
X1NPVVJDRVNfV0VCQ09SRV9ESVJ9L1BsdWdJbnNSZXNvdXJjZXMuaApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZSBiL1NvdXJjZS9XZWJDb3JlL0Rlcml2ZWRT
b3VyY2VzLm1ha2UKaW5kZXggMWQ1ZWYwMjBiNGMyZTlmYmIwYmUzMTAxYTgwNzI5ZDdhNjllOWZl
ZS4uZDM2YTE5ODdjNmQwN2FiMGFjNTQ0NzU5NmExYjRhNGQzYjgxOGY3ZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9E
ZXJpdmVkU291cmNlcy5tYWtlCkBAIC0xMTg0LDIzICsxMTg0LDYgQEAgQ29sb3JEYXRhLmNwcCA6
IHBsYXRmb3JtL0NvbG9yRGF0YS5ncGVyZiAkKFdlYkNvcmUpL21ha2UtaGFzaC10b29scy5wbAog
CiAjIC0tLS0tLS0tCiAKLSMgV2ViUlRDIHNjcmlwdHMKLQotV0VCQ09SRV9TRFBfUFJPQ0VTU09S
X1NDUklQVFMgPSAKLQotaWZlcSAoJChPUyksTUFDT1MpCi0gICAgV0VCQ09SRV9TRFBfUFJPQ0VT
U09SX1NDUklQVFMgOj0gJChXRUJDT1JFX1NEUF9QUk9DRVNTT1JfU0NSSVBUUykgJChXZWJDb3Jl
KS9Nb2R1bGVzL21lZGlhc3RyZWFtL3NkcC5qcwotZW5kaWYKLQotaWZkZWYgV0VCQ09SRV9TRFBf
UFJPQ0VTU09SX1NDUklQVFMKLWFsbCA6IFNEUFByb2Nlc3NvclNjcmlwdHNEYXRhLmgKLQotU0RQ
UHJvY2Vzc29yU2NyaXB0c0RhdGEuaCA6ICQoSmF2YVNjcmlwdENvcmVfU0NSSVBUU19ESVIpL21h
a2UtanMtZmlsZS1hcnJheXMucHkgJChXRUJDT1JFX1NEUF9QUk9DRVNTT1JfU0NSSVBUUykKLQkk
KFBZVEhPTikgJChKYXZhU2NyaXB0Q29yZV9TQ1JJUFRTX0RJUikvbWFrZS1qcy1maWxlLWFycmF5
cy5weSAtbiBXZWJDb3JlICRAIFNEUFByb2Nlc3NvclNjcmlwdHNEYXRhLmNwcCAkKFdFQkNPUkVf
U0RQX1BST0NFU1NPUl9TQ1JJUFRTKQotZW5kaWYKLQotIyAtLS0tLS0tLQotCiAjIHVzZXIgYWdl
bnQgc3R5bGUgc2hlZXRzCiAKIFVTRVJfQUdFTlRfU1RZTEVfU0hFRVRTID0gJChXZWJDb3JlKS9j
c3MvaHRtbC5jc3MgJChXZWJDb3JlKS9jc3MvcXVpcmtzLmNzcyAkKFdlYkNvcmUpL2Nzcy9wbHVn
SW5zLmNzcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9N
ZWRpYUVuZHBvaW50UGVlckNvbm5lY3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9t
ZWRpYXN0cmVhbS9NZWRpYUVuZHBvaW50UGVlckNvbm5lY3Rpb24uY3BwCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAxZTkyNTI3YWUyZmQ2NzZhNzczOWQ0Zjc5Yzk2ZGY2NmZlMDViMGEw
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFFbmRwb2ludFBlZXJDb25uZWN0aW9uLmNw
cAorKysgL2Rldi9udWxsCkBAIC0xLDg5MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDE1IEVyaWNzc29uIEFCLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogICAgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogICAgZGlzdHJpYnV0aW9uLgot
ICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBFcmljc3NvbiBub3IgdGhlIG5hbWVzIG9mIGl0cyBj
b250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkIGZyb20gdGhpcwotICogICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
LSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgi
Ci0jaW5jbHVkZSAiTWVkaWFFbmRwb2ludFBlZXJDb25uZWN0aW9uLmgiCi0KLSNpZiBFTkFCTEUo
V0VCX1JUQykKLQotI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKLSNpbmNsdWRlICJKU1JUQ1Nlc3Np
b25EZXNjcmlwdGlvbi5oIgotI2luY2x1ZGUgIk1lZGlhRW5kcG9pbnRTZXNzaW9uQ29uZmlndXJh
dGlvbi5oIgotI2luY2x1ZGUgIk1lZGlhRW5kcG9pbnRTZXNzaW9uRGVzY3JpcHRpb24uaCIKLSNp
bmNsdWRlICJNZWRpYVN0cmVhbS5oIgotI2luY2x1ZGUgIk1lZGlhU3RyZWFtRXZlbnQuaCIKLSNp
bmNsdWRlICJNZWRpYVN0cmVhbVRyYWNrLmgiCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIK
LSNpbmNsdWRlICJQZWVyTWVkaWFEZXNjcmlwdGlvbi5oIgotI2luY2x1ZGUgIlJUQ0Fuc3dlck9w
dGlvbnMuaCIKLSNpbmNsdWRlICJSVENDb25maWd1cmF0aW9uLmgiCi0jaW5jbHVkZSAiUlRDSWNl
Q2FuZGlkYXRlLmgiCi0jaW5jbHVkZSAiUlRDT2ZmZXJPcHRpb25zLmgiCi0jaW5jbHVkZSAiUlRD
UGVlckNvbm5lY3Rpb24uaCIKLSNpbmNsdWRlICJSVENQZWVyQ29ubmVjdGlvbkljZUV2ZW50Lmgi
Ci0jaW5jbHVkZSAiUlRDUnRwVHJhbnNjZWl2ZXIuaCIKLSNpbmNsdWRlICJSVENUcmFja0V2ZW50
LmgiCi0jaW5jbHVkZSAiU0RQUHJvY2Vzc29yLmgiCi0jaW5jbHVkZSA8d3RmL0Z1bmN0aW9uLmg+
Ci0jaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9CYXNlNjQu
aD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi11c2luZyBuYW1lc3BhY2UgUGVlckNvbm5lY3Rp
b247Ci0KLXVzaW5nIE1lZGlhRGVzY3JpcHRpb25WZWN0b3IgPSBWZWN0b3I8UGVlck1lZGlhRGVz
Y3JpcHRpb24+OwotdXNpbmcgUnRwVHJhbnNjZWl2ZXJWZWN0b3IgPSBWZWN0b3I8UmVmUHRyPFJU
Q1J0cFRyYW5zY2VpdmVyPj47Ci0KLS8vIFdlIHVzZSBiYXNlNjQgdG8gZ2VuZXJhdGUgdGhlIHJh
bmRvbSBzdHJpbmdzIHNvIHdlIG5lZWQgYSBzaXplIHRoYXQgYXZvaWRzIHBhZGRpbmcgdG8gZ2V0
IGljZS1jaGFycy4KLXN0YXRpYyBjb25zdCBzaXplX3QgY25hbWVTaXplID0gMTg7Ci0vLyBTaXpl
IHJhbmdlIGZyb20gNCB0byAyNTYgaWNlLWNoYXJzIGRlZmluZWQgaW4gUkZDIDUyNDUuCi1zdGF0
aWMgY29uc3Qgc2l6ZV90IGljZVVmcmFnU2l6ZSA9IDY7Ci0vLyBTaXplIHJhbmdlIGZyb20gMjIg
dG8gMjU2IGljZS1jaGFycyBkZWZpbmVkIGluIFJGQyA1MjQ1Lgotc3RhdGljIGNvbnN0IHNpemVf
dCBpY2VQYXNzd29yZFNpemUgPSAyNDsKLQotI2lmICFVU0UoTElCV0VCUlRDKQotc3RhdGljIHN0
ZDo6dW5pcXVlX3B0cjxQZWVyQ29ubmVjdGlvbkJhY2tlbmQ+IGNyZWF0ZU1lZGlhRW5kcG9pbnRQ
ZWVyQ29ubmVjdGlvbihSVENQZWVyQ29ubmVjdGlvbiYgcGVlckNvbm5lY3Rpb24pCi17Ci0gICAg
cmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxQZWVyQ29ubmVjdGlvbkJhY2tlbmQ+KG5ldyBNZWRpYUVu
ZHBvaW50UGVlckNvbm5lY3Rpb24ocGVlckNvbm5lY3Rpb24pKTsKLX0KLQotQ3JlYXRlUGVlckNv
bm5lY3Rpb25CYWNrZW5kIFBlZXJDb25uZWN0aW9uQmFja2VuZDo6Y3JlYXRlID0gY3JlYXRlTWVk
aWFFbmRwb2ludFBlZXJDb25uZWN0aW9uOwotI2VuZGlmCi0KLXN0YXRpYyBTdHJpbmcgcmFuZG9t
U3RyaW5nKHNpemVfdCBzaXplKQotewotICAgIHVuc2lnbmVkIGNoYXIgcmFuZG9tVmFsdWVzW3Np
emVdOwotICAgIGNyeXB0b2dyYXBoaWNhbGx5UmFuZG9tVmFsdWVzKHJhbmRvbVZhbHVlcywgc2l6
ZSk7Ci0gICAgcmV0dXJuIGJhc2U2NEVuY29kZShyYW5kb21WYWx1ZXMsIHNpemUpOwotfQotCi1N
ZWRpYUVuZHBvaW50UGVlckNvbm5lY3Rpb246Ok1lZGlhRW5kcG9pbnRQZWVyQ29ubmVjdGlvbihS
VENQZWVyQ29ubmVjdGlvbiYgcGVlckNvbm5lY3Rpb24pCi0gICAgOiBQZWVyQ29ubmVjdGlvbkJh
Y2tlbmQocGVlckNvbm5lY3Rpb24pCi0gICAgLCBtX21lZGlhRW5kcG9pbnQoTWVkaWFFbmRwb2lu
dDo6Y3JlYXRlKCp0aGlzKSkKLSAgICAsIG1fc2RwUHJvY2Vzc29yKHN0ZDo6bWFrZV91bmlxdWU8
U0RQUHJvY2Vzc29yPihtX3BlZXJDb25uZWN0aW9uLnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkp
Ci0gICAgLCBtX2NuYW1lKHJhbmRvbVN0cmluZyhjbmFtZVNpemUpKQotICAgICwgbV9pY2VVZnJh
ZyhyYW5kb21TdHJpbmcoaWNlVWZyYWdTaXplKSkKLSAgICAsIG1faWNlUGFzc3dvcmQocmFuZG9t
U3RyaW5nKGljZVBhc3N3b3JkU2l6ZSkpCi17Ci0gICAgQVNTRVJUKG1fbWVkaWFFbmRwb2ludCk7
Ci0KLSAgICBtX2RlZmF1bHRBdWRpb1BheWxvYWRzID0gbV9tZWRpYUVuZHBvaW50LT5nZXREZWZh
dWx0QXVkaW9QYXlsb2FkcygpOwotICAgIG1fZGVmYXVsdFZpZGVvUGF5bG9hZHMgPSBtX21lZGlh
RW5kcG9pbnQtPmdldERlZmF1bHRWaWRlb1BheWxvYWRzKCk7Ci0KLSAgICAvLyBUYXNrcyAoc2Vl
IHJ1blRhc2soKSkgd2lsbCBiZSBkZWZlcnJlZCB1bnRpbCB3ZSBnZXQgdGhlIERUTFMgZmluZ2Vy
cHJpbnQuCi0gICAgbV9tZWRpYUVuZHBvaW50LT5nZW5lcmF0ZUR0bHNJbmZvKCk7Ci19Ci0KLXN0
YXRpYyBSVENSdHBUcmFuc2NlaXZlciogbWF0Y2hUcmFuc2NlaXZlcihjb25zdCBSdHBUcmFuc2Nl
aXZlclZlY3RvciYgdHJhbnNjZWl2ZXJzLCBjb25zdCBXVEY6OkZ1bmN0aW9uPGJvb2woUlRDUnRw
VHJhbnNjZWl2ZXImKT4mIG1hdGNoRnVuY3Rpb24pCi17Ci0gICAgZm9yIChhdXRvJiB0cmFuc2Nl
aXZlciA6IHRyYW5zY2VpdmVycykgewotICAgICAgICBpZiAobWF0Y2hGdW5jdGlvbigqdHJhbnNj
ZWl2ZXIpKQotICAgICAgICAgICAgcmV0dXJuIHRyYW5zY2VpdmVyLmdldCgpOwotICAgIH0KLSAg
ICByZXR1cm4gbnVsbHB0cjsKLX0KLQotc3RhdGljIFJUQ1J0cFRyYW5zY2VpdmVyKiBtYXRjaFRy
YW5zY2VpdmVyQnlNaWQoY29uc3QgUnRwVHJhbnNjZWl2ZXJWZWN0b3ImIHRyYW5zY2VpdmVycywg
Y29uc3QgU3RyaW5nJiBtaWQpCi17Ci0gICAgcmV0dXJuIG1hdGNoVHJhbnNjZWl2ZXIodHJhbnNj
ZWl2ZXJzLCBbJm1pZF0gKFJUQ1J0cFRyYW5zY2VpdmVyJiBjdXJyZW50KSB7Ci0gICAgICAgIHJl
dHVybiBjdXJyZW50Lm1pZCgpID09IG1pZDsKLSAgICB9KTsKLX0KLQotc3RhdGljIGJvb2wgaGFz
VW5hc3NvY2lhdGVkVHJhbnNjZWl2ZXJzKGNvbnN0IFJ0cFRyYW5zY2VpdmVyVmVjdG9yJiB0cmFu
c2NlaXZlcnMpCi17Ci0gICAgcmV0dXJuIG1hdGNoVHJhbnNjZWl2ZXIodHJhbnNjZWl2ZXJzLCBb
XSAoUlRDUnRwVHJhbnNjZWl2ZXImIGN1cnJlbnQpIHsKLSAgICAgICAgcmV0dXJuIGN1cnJlbnQu
bWlkKCkuaXNOdWxsKCkgJiYgIWN1cnJlbnQuc3RvcHBlZCgpOwotICAgIH0pOwotfQotCi12b2lk
IE1lZGlhRW5kcG9pbnRQZWVyQ29ubmVjdGlvbjo6cnVuVGFzayhGdW5jdGlvbjx2b2lkICgpPiYm
IHRhc2spCi17Ci0gICAgaWYgKG1fZHRsc0ZpbmdlcnByaW50LmlzTnVsbCgpKSB7Ci0gICAgICAg
IC8vIE9ubHkgb25lIHRhc2sgbmVlZHMgdG8gYmUgZGVmZXJyZWQgc2luY2UgaXQgd2lsbCBob2xk
IG9mZiBhbnkgb3RoZXJzIHVudGlsIGNvbXBsZXRlZC4KLSAgICAgICAgQVNTRVJUKCFtX2luaXRp
YWxEZWZlcnJlZFRhc2spOwotICAgICAgICBtX2luaXRpYWxEZWZlcnJlZFRhc2sgPSBXVEZNb3Zl
KHRhc2spOwotICAgIH0gZWxzZQotICAgICAgICBjYWxsT25NYWluVGhyZWFkKFdURk1vdmUodGFz
aykpOwotfQotCi12b2lkIE1lZGlhRW5kcG9pbnRQZWVyQ29ubmVjdGlvbjo6c3RhcnRSdW5uaW5n
VGFza3MoKQotewotICAgIGlmICghbV9pbml0aWFsRGVmZXJyZWRUYXNrKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBtX2luaXRpYWxEZWZlcnJlZFRhc2soKTsKLSAgICBtX2luaXRpYWxEZWZlcnJl
ZFRhc2sgPSBudWxscHRyOwotfQotCi12b2lkIE1lZGlhRW5kcG9pbnRQZWVyQ29ubmVjdGlvbjo6
ZG9DcmVhdGVPZmZlcihSVENPZmZlck9wdGlvbnMmJiBvcHRpb25zKQotewotICAgIHJ1blRhc2so
W3RoaXMsIHByb3RlY3RlZE9wdGlvbnMgPSBXVEZNb3ZlKG9wdGlvbnMpXSgpIG11dGFibGUgewot
ICAgICAgICBjcmVhdGVPZmZlclRhc2socHJvdGVjdGVkT3B0aW9ucyk7Ci0gICAgfSk7Ci19Ci0K
LXZvaWQgTWVkaWFFbmRwb2ludFBlZXJDb25uZWN0aW9uOjpjcmVhdGVPZmZlclRhc2soY29uc3Qg
UlRDT2ZmZXJPcHRpb25zJikKLXsKLSAgICBBU1NFUlQoIW1fZHRsc0ZpbmdlcnByaW50LmlzRW1w
dHkoKSk7Ci0KLSAgICBNZWRpYUVuZHBvaW50U2Vzc2lvbkRlc2NyaXB0aW9uKiBsb2NhbERlc2Ny
aXB0aW9uID0gaW50ZXJuYWxMb2NhbERlc2NyaXB0aW9uKCk7Ci0gICAgUmVmUHRyPE1lZGlhRW5k
cG9pbnRTZXNzaW9uQ29uZmlndXJhdGlvbj4gY29uZmlndXJhdGlvblNuYXBzaG90ID0gbG9jYWxE
ZXNjcmlwdGlvbiA/Ci0gICAgICAgIGxvY2FsRGVzY3JpcHRpb24tPmNvbmZpZ3VyYXRpb24oKS0+
Y2xvbmUoKSA6IE1lZGlhRW5kcG9pbnRTZXNzaW9uQ29uZmlndXJhdGlvbjo6Y3JlYXRlKCk7Ci0K
LSAgICBjb25maWd1cmF0aW9uU25hcHNob3QtPnNldEJ1bmRsZVBvbGljeShtX3BlZXJDb25uZWN0
aW9uLmdldENvbmZpZ3VyYXRpb24oKS5idW5kbGVQb2xpY3kpOwotICAgIGNvbmZpZ3VyYXRpb25T
bmFwc2hvdC0+c2V0U2Vzc2lvblZlcnNpb24obV9zZHBPZmZlclNlc3Npb25WZXJzaW9uKyspOwot
Ci0gICAgYXV0byB0cmFuc2NlaXZlcnMgPSBSdHBUcmFuc2NlaXZlclZlY3RvcihtX3BlZXJDb25u
ZWN0aW9uLmdldFRyYW5zY2VpdmVycygpKTsKLQotICAgIC8vIFJlbW92ZSBhbnkgdHJhbnNjZWl2
ZXIgb2JqZWN0cyBmcm9tIHRyYW5zY2VpdmVycyB0aGF0IGNhbiBiZSBtYXRjaGVkIHRvIGFuIGV4
aXN0aW5nIG1lZGlhIGRlc2NyaXB0aW9uLgotICAgIGZvciAoYXV0byYgbWVkaWFEZXNjcmlwdGlv
biA6IGNvbmZpZ3VyYXRpb25TbmFwc2hvdC0+bWVkaWFEZXNjcmlwdGlvbnMoKSkgewotICAgICAg
ICBpZiAoIW1lZGlhRGVzY3JpcHRpb24ucG9ydCkgewotICAgICAgICAgICAgLy8gVGhpcyBtZWRp
YSBkZXNjcmlwdGlvbiBzaG91bGQgYmUgcmVjeWNsZWQuCi0gICAgICAgICAgICBjb250aW51ZTsK
LSAgICAgICAgfQotCi0gICAgICAgIFJUQ1J0cFRyYW5zY2VpdmVyKiB0cmFuc2NlaXZlciA9IG1h
dGNoVHJhbnNjZWl2ZXJCeU1pZCh0cmFuc2NlaXZlcnMsIG1lZGlhRGVzY3JpcHRpb24ubWlkKTsK
LSAgICAgICAgaWYgKCF0cmFuc2NlaXZlcikKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAg
ICAgIG1lZGlhRGVzY3JpcHRpb24ubW9kZSA9IHRyYW5zY2VpdmVyLT5kaXJlY3Rpb25TdHJpbmco
KTsKLSAgICAgICAgaWYgKHRyYW5zY2VpdmVyLT5oYXNTZW5kaW5nRGlyZWN0aW9uKCkpIHsKLSAg
ICAgICAgICAgIGF1dG8mIHNlbmRlciA9IHRyYW5zY2VpdmVyLT5zZW5kZXIoKTsKLQotICAgICAg
ICAgICAgbWVkaWFEZXNjcmlwdGlvbi5tZWRpYVN0cmVhbUlkID0gc2VuZGVyLm1lZGlhU3RyZWFt
SWRzKClbMF07Ci0gICAgICAgICAgICBtZWRpYURlc2NyaXB0aW9uLm1lZGlhU3RyZWFtVHJhY2tJ
ZCA9IHNlbmRlci50cmFja0lkKCk7Ci0gICAgICAgIH0KLQotICAgICAgICB0cmFuc2NlaXZlcnMu
cmVtb3ZlRmlyc3QodHJhbnNjZWl2ZXIpOwotICAgIH0KLQotICAgIC8vIEFkZCBtZWRpYSBkZXNj
cmlwdGlvbnMgZm9yIHJlbWFpbmluZyB0cmFuc2NlaXZlcnMuCi0gICAgZm9yIChhdXRvJiB0cmFu
c2NlaXZlciA6IHRyYW5zY2VpdmVycykgewotICAgICAgICBQZWVyTWVkaWFEZXNjcmlwdGlvbiBt
ZWRpYURlc2NyaXB0aW9uOwotICAgICAgICBhdXRvJiBzZW5kZXIgPSB0cmFuc2NlaXZlci0+c2Vu
ZGVyKCk7Ci0KLSAgICAgICAgbWVkaWFEZXNjcmlwdGlvbi5tb2RlID0gdHJhbnNjZWl2ZXItPmRp
cmVjdGlvblN0cmluZygpOwotICAgICAgICBtZWRpYURlc2NyaXB0aW9uLm1pZCA9IHRyYW5zY2Vp
dmVyLT5wcm92aXNpb25hbE1pZCgpOwotICAgICAgICBtZWRpYURlc2NyaXB0aW9uLm1lZGlhU3Ry
ZWFtSWQgPSBzZW5kZXIubWVkaWFTdHJlYW1JZHMoKVswXTsKLSAgICAgICAgbWVkaWFEZXNjcmlw
dGlvbi50eXBlID0gc2VuZGVyLnRyYWNrS2luZCgpOwotICAgICAgICBtZWRpYURlc2NyaXB0aW9u
LnBheWxvYWRzID0gc2VuZGVyLnRyYWNrS2luZCgpID09ICJhdWRpbyIgPyBtX2RlZmF1bHRBdWRp
b1BheWxvYWRzIDogbV9kZWZhdWx0VmlkZW9QYXlsb2FkczsKLSAgICAgICAgbWVkaWFEZXNjcmlw
dGlvbi5kdGxzRmluZ2VycHJpbnRIYXNoRnVuY3Rpb24gPSBtX2R0bHNGaW5nZXJwcmludEZ1bmN0
aW9uOwotICAgICAgICBtZWRpYURlc2NyaXB0aW9uLmR0bHNGaW5nZXJwcmludCA9IG1fZHRsc0Zp
bmdlcnByaW50OwotICAgICAgICBtZWRpYURlc2NyaXB0aW9uLmNuYW1lID0gbV9jbmFtZTsKLSAg
ICAgICAgbWVkaWFEZXNjcmlwdGlvbi5hZGRTc3JjKGNyeXB0b2dyYXBoaWNhbGx5UmFuZG9tTnVt
YmVyKCkpOwotICAgICAgICBtZWRpYURlc2NyaXB0aW9uLmljZVVmcmFnID0gbV9pY2VVZnJhZzsK
LSAgICAgICAgbWVkaWFEZXNjcmlwdGlvbi5pY2VQYXNzd29yZCA9IG1faWNlUGFzc3dvcmQ7Ci0K
LSAgICAgICAgaWYgKHNlbmRlci50cmFjaygpKQotICAgICAgICAgICAgbWVkaWFEZXNjcmlwdGlv
bi5tZWRpYVN0cmVhbVRyYWNrSWQgPSBzZW5kZXIudHJhY2tJZCgpOwotCi0gICAgICAgIGNvbmZp
Z3VyYXRpb25TbmFwc2hvdC0+YWRkTWVkaWFEZXNjcmlwdGlvbihXVEZNb3ZlKG1lZGlhRGVzY3Jp
cHRpb24pKTsKLSAgICB9Ci0KLSAgICBTdHJpbmcgc2RwOwotICAgIFNEUFByb2Nlc3Nvcjo6UmVz
dWx0IHJlc3VsdCA9IG1fc2RwUHJvY2Vzc29yLT5nZW5lcmF0ZSgqY29uZmlndXJhdGlvblNuYXBz
aG90LCBzZHApOwotICAgIGlmIChyZXN1bHQgIT0gU0RQUHJvY2Vzc29yOjpSZXN1bHQ6OlN1Y2Nl
c3MpIHsKLSAgICAgICAgY3JlYXRlT2ZmZXJGYWlsZWQoRXhjZXB0aW9uIHsgT3BlcmF0aW9uRXJy
b3IsICJTRFBQcm9jZXNzb3IgaW50ZXJuYWwgZXJyb3IiIH0pOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotICAgIGNyZWF0ZU9mZmVyU3VjY2VlZGVkKFdURk1vdmUoc2RwKSk7Ci19Ci0KLXZvaWQg
TWVkaWFFbmRwb2ludFBlZXJDb25uZWN0aW9uOjpkb0NyZWF0ZUFuc3dlcihSVENBbnN3ZXJPcHRp
b25zJiYgb3B0aW9ucykKLXsKLSAgICBydW5UYXNrKFt0aGlzLCBwcm90ZWN0ZWRPcHRpb25zID0g
V1RGTW92ZShvcHRpb25zKV0oKSBtdXRhYmxlIHsKLSAgICAgICAgY3JlYXRlQW5zd2VyVGFzayhw
cm90ZWN0ZWRPcHRpb25zKTsKLSAgICB9KTsKLX0KLQotdm9pZCBNZWRpYUVuZHBvaW50UGVlckNv
bm5lY3Rpb246OmNyZWF0ZUFuc3dlclRhc2soY29uc3QgUlRDQW5zd2VyT3B0aW9ucyYpCi17Ci0g
ICAgQVNTRVJUKCFtX2R0bHNGaW5nZXJwcmludC5pc0VtcHR5KCkpOwotCi0gICAgaWYgKCFpbnRl
cm5hbFJlbW90ZURlc2NyaXB0aW9uKCkpIHsKLSAgICAgICAgY3JlYXRlQW5zd2VyRmFpbGVkKEV4
Y2VwdGlvbiB7IEludmFsaWRTdGF0ZUVycm9yLCAiTm8gcmVtb3RlIGRlc2NyaXB0aW9uIHNldCIg
fSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBNZWRpYUVuZHBvaW50U2Vzc2lvbkRl
c2NyaXB0aW9uKiBsb2NhbERlc2NyaXB0aW9uID0gaW50ZXJuYWxMb2NhbERlc2NyaXB0aW9uKCk7
Ci0gICAgUmVmUHRyPE1lZGlhRW5kcG9pbnRTZXNzaW9uQ29uZmlndXJhdGlvbj4gY29uZmlndXJh
dGlvblNuYXBzaG90ID0gbG9jYWxEZXNjcmlwdGlvbiA/Ci0gICAgICAgIGxvY2FsRGVzY3JpcHRp
b24tPmNvbmZpZ3VyYXRpb24oKS0+Y2xvbmUoKSA6IE1lZGlhRW5kcG9pbnRTZXNzaW9uQ29uZmln
dXJhdGlvbjo6Y3JlYXRlKCk7Ci0KLSAgICBjb25maWd1cmF0aW9uU25hcHNob3QtPnNldEJ1bmRs
ZVBvbGljeShtX3BlZXJDb25uZWN0aW9uLmdldENvbmZpZ3VyYXRpb24oKS5idW5kbGVQb2xpY3kp
OwotICAgIGNvbmZpZ3VyYXRpb25TbmFwc2hvdC0+c2V0U2Vzc2lvblZlcnNpb24obV9zZHBBbnN3
ZXJTZXNzaW9uVmVyc2lvbisrKTsKLQotICAgIGF1dG8gdHJhbnNjZWl2ZXJzID0gUnRwVHJhbnNj
ZWl2ZXJWZWN0b3IobV9wZWVyQ29ubmVjdGlvbi5nZXRUcmFuc2NlaXZlcnMoKSk7Ci0gICAgYXV0
byYgcmVtb3RlTWVkaWFEZXNjcmlwdGlvbnMgPSBpbnRlcm5hbFJlbW90ZURlc2NyaXB0aW9uKCkt
PmNvbmZpZ3VyYXRpb24oKS0+bWVkaWFEZXNjcmlwdGlvbnMoKTsKLQotICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCByZW1vdGVNZWRpYURlc2NyaXB0aW9ucy5zaXplKCk7ICsraSkgewotICAg
ICAgICBhdXRvJiByZW1vdGVNZWRpYURlc2NyaXB0aW9uID0gcmVtb3RlTWVkaWFEZXNjcmlwdGlv
bnNbaV07Ci0KLSAgICAgICAgYXV0byogdHJhbnNjZWl2ZXIgPSBtYXRjaFRyYW5zY2VpdmVyQnlN
aWQodHJhbnNjZWl2ZXJzLCByZW1vdGVNZWRpYURlc2NyaXB0aW9uLm1pZCk7Ci0gICAgICAgIGlm
ICghdHJhbnNjZWl2ZXIpIHsKLSAgICAgICAgICAgIExPR19FUlJPUigiQ291bGQgbm90IGZpbmQg
YSBtYXRjaGluZyB0cmFuc2NlaXZlciBmb3IgcmVtb3RlIGRlc2NyaXB0aW9uIHdoaWxlIGNyZWF0
aW5nIGFuc3dlciIpOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAg
ICBpZiAoaSA+PSBjb25maWd1cmF0aW9uU25hcHNob3QtPm1lZGlhRGVzY3JpcHRpb25zKCkuc2l6
ZSgpKSB7Ci0gICAgICAgICAgICBQZWVyTWVkaWFEZXNjcmlwdGlvbiBuZXdNZWRpYURlc2NyaXB0
aW9uOwotCi0gICAgICAgICAgICBhdXRvJiBzZW5kZXIgPSB0cmFuc2NlaXZlci0+c2VuZGVyKCk7
Ci0gICAgICAgICAgICBpZiAoc2VuZGVyLnRyYWNrKCkpIHsKLSAgICAgICAgICAgICAgICBpZiAo
c2VuZGVyLm1lZGlhU3RyZWFtSWRzKCkuc2l6ZSgpKQotICAgICAgICAgICAgICAgICAgICBuZXdN
ZWRpYURlc2NyaXB0aW9uLm1lZGlhU3RyZWFtSWQgPSBzZW5kZXIubWVkaWFTdHJlYW1JZHMoKVsw
XTsKLSAgICAgICAgICAgICAgICBuZXdNZWRpYURlc2NyaXB0aW9uLm1lZGlhU3RyZWFtVHJhY2tJ
ZCA9IHNlbmRlci50cmFja0lkKCk7Ci0gICAgICAgICAgICAgICAgbmV3TWVkaWFEZXNjcmlwdGlv
bi5hZGRTc3JjKGNyeXB0b2dyYXBoaWNhbGx5UmFuZG9tTnVtYmVyKCkpOwotICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICBuZXdNZWRpYURlc2NyaXB0aW9uLm1vZGUgPSB0cmFuc2NlaXZlci0+
ZGlyZWN0aW9uU3RyaW5nKCk7Ci0gICAgICAgICAgICBuZXdNZWRpYURlc2NyaXB0aW9uLnR5cGUg
PSByZW1vdGVNZWRpYURlc2NyaXB0aW9uLnR5cGU7Ci0gICAgICAgICAgICBuZXdNZWRpYURlc2Ny
aXB0aW9uLm1pZCA9IHJlbW90ZU1lZGlhRGVzY3JpcHRpb24ubWlkOwotICAgICAgICAgICAgbmV3
TWVkaWFEZXNjcmlwdGlvbi5kdGxzU2V0dXAgPSByZW1vdGVNZWRpYURlc2NyaXB0aW9uLmR0bHNT
ZXR1cCA9PSAiYWN0aXZlIiA/ICJwYXNzaXZlIiA6ICJhY3RpdmUiOwotICAgICAgICAgICAgbmV3
TWVkaWFEZXNjcmlwdGlvbi5kdGxzRmluZ2VycHJpbnRIYXNoRnVuY3Rpb24gPSBtX2R0bHNGaW5n
ZXJwcmludEZ1bmN0aW9uOwotICAgICAgICAgICAgbmV3TWVkaWFEZXNjcmlwdGlvbi5kdGxzRmlu
Z2VycHJpbnQgPSBtX2R0bHNGaW5nZXJwcmludDsKLSAgICAgICAgICAgIG5ld01lZGlhRGVzY3Jp
cHRpb24uY25hbWUgPSBtX2NuYW1lOwotICAgICAgICAgICAgbmV3TWVkaWFEZXNjcmlwdGlvbi5p
Y2VVZnJhZyA9IG1faWNlVWZyYWc7Ci0gICAgICAgICAgICBuZXdNZWRpYURlc2NyaXB0aW9uLmlj
ZVBhc3N3b3JkID0gbV9pY2VQYXNzd29yZDsKLQotICAgICAgICAgICAgY29uZmlndXJhdGlvblNu
YXBzaG90LT5hZGRNZWRpYURlc2NyaXB0aW9uKFdURk1vdmUobmV3TWVkaWFEZXNjcmlwdGlvbikp
OwotICAgICAgICB9Ci0KLSAgICAgICAgUGVlck1lZGlhRGVzY3JpcHRpb24mIGxvY2FsTWVkaWFE
ZXNjcmlwdGlvbiA9IGNvbmZpZ3VyYXRpb25TbmFwc2hvdC0+bWVkaWFEZXNjcmlwdGlvbnMoKVtp
XTsKLQotICAgICAgICBsb2NhbE1lZGlhRGVzY3JpcHRpb24ucGF5bG9hZHMgPSByZW1vdGVNZWRp
YURlc2NyaXB0aW9uLnBheWxvYWRzOwotICAgICAgICBsb2NhbE1lZGlhRGVzY3JpcHRpb24ucnRj
cE11eCA9IHJlbW90ZU1lZGlhRGVzY3JpcHRpb24ucnRjcE11eDsKLQotICAgICAgICBpZiAoIWxv
Y2FsTWVkaWFEZXNjcmlwdGlvbi5zc3Jjcy5zaXplKCkpCi0gICAgICAgICAgICBsb2NhbE1lZGlh
RGVzY3JpcHRpb24uYWRkU3NyYyhjcnlwdG9ncmFwaGljYWxseVJhbmRvbU51bWJlcigpKTsKLQot
ICAgICAgICBpZiAobG9jYWxNZWRpYURlc2NyaXB0aW9uLmR0bHNTZXR1cCA9PSAiYWN0cGFzcyIp
Ci0gICAgICAgICAgICBsb2NhbE1lZGlhRGVzY3JpcHRpb24uZHRsc1NldHVwID0gInBhc3NpdmUi
OwotCi0gICAgICAgIHRyYW5zY2VpdmVycy5yZW1vdmVGaXJzdCh0cmFuc2NlaXZlcik7Ci0gICAg
fQotCi0gICAgLy8gVW5hc3NvY2lhdGVkIChub24tc3RvcHBlZCkgdHJhbnNjZWl2ZXJzIG5lZWQg
dG8gYmUgbmVnb3RpYXRlZCBpbiBhIGZvbGxvdy11cCBvZmZlci4KLSAgICBpZiAoaGFzVW5hc3Nv
Y2lhdGVkVHJhbnNjZWl2ZXJzKHRyYW5zY2VpdmVycykpCi0gICAgICAgIG1hcmtBc05lZWRpbmdO
ZWdvdGlhdGlvbigpOwotCi0gICAgU3RyaW5nIHNkcDsKLSAgICBTRFBQcm9jZXNzb3I6OlJlc3Vs
dCByZXN1bHQgPSBtX3NkcFByb2Nlc3Nvci0+Z2VuZXJhdGUoKmNvbmZpZ3VyYXRpb25TbmFwc2hv
dCwgc2RwKTsKLSAgICBpZiAocmVzdWx0ICE9IFNEUFByb2Nlc3Nvcjo6UmVzdWx0OjpTdWNjZXNz
KSB7Ci0gICAgICAgIGNyZWF0ZUFuc3dlckZhaWxlZChFeGNlcHRpb24geyBPcGVyYXRpb25FcnJv
ciwgIlNEUFByb2Nlc3NvciBpbnRlcm5hbCBlcnJvciIgfSk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0gICAgY3JlYXRlQW5zd2VyU3VjY2VlZGVkKFdURk1vdmUoc2RwKSk7Ci19Ci0KLXN0YXRp
YyBSZWFsdGltZU1lZGlhU291cmNlTWFwIGNyZWF0ZVNvdXJjZU1hcChjb25zdCBNZWRpYURlc2Ny
aXB0aW9uVmVjdG9yJiByZW1vdGVNZWRpYURlc2NyaXB0aW9ucywgdW5zaWduZWQgbG9jYWxNZWRp
YURlc2NyaXB0aW9uQ291bnQsIGNvbnN0IFJ0cFRyYW5zY2VpdmVyVmVjdG9yJiB0cmFuc2NlaXZl
cnMpCi17Ci0gICAgUmVhbHRpbWVNZWRpYVNvdXJjZU1hcCBzb3VyY2VNYXA7Ci0KLSAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgcmVtb3RlTWVkaWFEZXNjcmlwdGlvbnMuc2l6ZSgpICYmIGkg
PCBsb2NhbE1lZGlhRGVzY3JpcHRpb25Db3VudDsgKytpKSB7Ci0gICAgICAgIGF1dG8mIHJlbW90
ZU1lZGlhRGVzY3JpcHRpb24gPSByZW1vdGVNZWRpYURlc2NyaXB0aW9uc1tpXTsKLSAgICAgICAg
aWYgKHJlbW90ZU1lZGlhRGVzY3JpcHRpb24udHlwZSAhPSAiYXVkaW8iICYmIHJlbW90ZU1lZGlh
RGVzY3JpcHRpb24udHlwZSAhPSAidmlkZW8iKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAg
ICAgICAgUlRDUnRwVHJhbnNjZWl2ZXIqIHRyYW5zY2VpdmVyID0gbWF0Y2hUcmFuc2NlaXZlckJ5
TWlkKHRyYW5zY2VpdmVycywgcmVtb3RlTWVkaWFEZXNjcmlwdGlvbi5taWQpOwotICAgICAgICBp
ZiAodHJhbnNjZWl2ZXIpIHsKLSAgICAgICAgICAgIGlmICh0cmFuc2NlaXZlci0+aGFzU2VuZGlu
Z0RpcmVjdGlvbigpICYmIHRyYW5zY2VpdmVyLT5zZW5kZXIoKS50cmFjaygpKQotICAgICAgICAg
ICAgICAgIHNvdXJjZU1hcC5zZXQodHJhbnNjZWl2ZXItPm1pZCgpLCAmdHJhbnNjZWl2ZXItPnNl
bmRlcigpLnRyYWNrKCktPnNvdXJjZSgpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVy
biBzb3VyY2VNYXA7Ci19Ci0KLXZvaWQgTWVkaWFFbmRwb2ludFBlZXJDb25uZWN0aW9uOjpkb1Nl
dExvY2FsRGVzY3JpcHRpb24oUlRDU2Vzc2lvbkRlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbikKLXsK
LSAgICBydW5UYXNrKFt0aGlzLCBwcm90ZWN0ZWREZXNjcmlwdGlvbiA9IFJlZlB0cjxSVENTZXNz
aW9uRGVzY3JpcHRpb24+KCZkZXNjcmlwdGlvbildKCkgbXV0YWJsZSB7Ci0gICAgICAgIHNldExv
Y2FsRGVzY3JpcHRpb25UYXNrKFdURk1vdmUocHJvdGVjdGVkRGVzY3JpcHRpb24pKTsKLSAgICB9
KTsKLX0KLQotdm9pZCBNZWRpYUVuZHBvaW50UGVlckNvbm5lY3Rpb246OnNldExvY2FsRGVzY3Jp
cHRpb25UYXNrKFJlZlB0cjxSVENTZXNzaW9uRGVzY3JpcHRpb24+JiYgZGVzY3JpcHRpb24pCi17
Ci0gICAgaWYgKG1fcGVlckNvbm5lY3Rpb24uaXNDbG9zZWQoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgYXV0byByZXN1bHQgPSBNZWRpYUVuZHBvaW50U2Vzc2lvbkRlc2NyaXB0aW9uOjpjcmVh
dGUoV1RGTW92ZShkZXNjcmlwdGlvbiksICptX3NkcFByb2Nlc3Nvcik7Ci0gICAgaWYgKHJlc3Vs
dC5oYXNFeGNlcHRpb24oKSkgewotICAgICAgICBzZXRMb2NhbERlc2NyaXB0aW9uRmFpbGVkKHJl
c3VsdC5yZWxlYXNlRXhjZXB0aW9uKCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGF1
dG8gbmV3RGVzY3JpcHRpb24gPSByZXN1bHQucmVsZWFzZVJldHVyblZhbHVlKCk7Ci0KLSAgICBj
b25zdCBSdHBUcmFuc2NlaXZlclZlY3RvciYgdHJhbnNjZWl2ZXJzID0gbV9wZWVyQ29ubmVjdGlv
bi5nZXRUcmFuc2NlaXZlcnMoKTsKLSAgICBjb25zdCBNZWRpYURlc2NyaXB0aW9uVmVjdG9yJiBt
ZWRpYURlc2NyaXB0aW9ucyA9IG5ld0Rlc2NyaXB0aW9uLT5jb25maWd1cmF0aW9uKCktPm1lZGlh
RGVzY3JpcHRpb25zKCk7Ci0gICAgTWVkaWFFbmRwb2ludFNlc3Npb25EZXNjcmlwdGlvbiogbG9j
YWxEZXNjcmlwdGlvbiA9IGludGVybmFsTG9jYWxEZXNjcmlwdGlvbigpOwotICAgIHVuc2lnbmVk
IHByZXZpb3VzTnVtYmVyT2ZNZWRpYURlc2NyaXB0aW9ucyA9IGxvY2FsRGVzY3JpcHRpb24gPyBs
b2NhbERlc2NyaXB0aW9uLT5jb25maWd1cmF0aW9uKCktPm1lZGlhRGVzY3JpcHRpb25zKCkuc2l6
ZSgpIDogMDsKLSAgICBib29sIGhhc05ld01lZGlhRGVzY3JpcHRpb25zID0gbWVkaWFEZXNjcmlw
dGlvbnMuc2l6ZSgpID4gcHJldmlvdXNOdW1iZXJPZk1lZGlhRGVzY3JpcHRpb25zOwotICAgIGJv
b2wgaXNJbml0aWF0b3IgPSBuZXdEZXNjcmlwdGlvbi0+dHlwZSgpID09IFJUQ1NkcFR5cGU6Ok9m
ZmVyOwotCi0gICAgaWYgKGhhc05ld01lZGlhRGVzY3JpcHRpb25zKSB7Ci0gICAgICAgIE1lZGlh
RW5kcG9pbnQ6OlVwZGF0ZVJlc3VsdCByZXN1bHQgPSBtX21lZGlhRW5kcG9pbnQtPnVwZGF0ZVJl
Y2VpdmVDb25maWd1cmF0aW9uKG5ld0Rlc2NyaXB0aW9uLT5jb25maWd1cmF0aW9uKCksIGlzSW5p
dGlhdG9yKTsKLQotICAgICAgICBpZiAocmVzdWx0ID09IE1lZGlhRW5kcG9pbnQ6OlVwZGF0ZVJl
c3VsdDo6U3VjY2Vzc1dpdGhJY2VSZXN0YXJ0KSB7Ci0gICAgICAgICAgICBpZiAobV9wZWVyQ29u
bmVjdGlvbi5pY2VHYXRoZXJpbmdTdGF0ZSgpICE9IFJUQ0ljZUdhdGhlcmluZ1N0YXRlOjpHYXRo
ZXJpbmcpCi0gICAgICAgICAgICAgICAgbV9wZWVyQ29ubmVjdGlvbi51cGRhdGVJY2VHYXRoZXJp
bmdTdGF0ZShSVENJY2VHYXRoZXJpbmdTdGF0ZTo6R2F0aGVyaW5nKTsKLQotICAgICAgICAgICAg
aWYgKG1fcGVlckNvbm5lY3Rpb24uaWNlQ29ubmVjdGlvblN0YXRlKCkgIT0gUlRDSWNlQ29ubmVj
dGlvblN0YXRlOjpDb21wbGV0ZWQpCi0gICAgICAgICAgICAgICAgbV9wZWVyQ29ubmVjdGlvbi51
cGRhdGVJY2VDb25uZWN0aW9uU3RhdGUoUlRDSWNlQ29ubmVjdGlvblN0YXRlOjpDb25uZWN0ZWQp
OwotCi0gICAgICAgICAgICBMT0dfRVJST1IoIklDRSByZXN0YXJ0IGlzIG5vdCBpbXBsZW1lbnRl
ZCIpOwotICAgICAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKLQotICAgICAgICB9IGVsc2UgaWYg
KHJlc3VsdCA9PSBNZWRpYUVuZHBvaW50OjpVcGRhdGVSZXN1bHQ6OkZhaWxlZCkgewotICAgICAg
ICAgICAgc2V0TG9jYWxEZXNjcmlwdGlvbkZhaWxlZChFeGNlcHRpb24geyBPcGVyYXRpb25FcnJv
ciwgIlVuYWJsZSB0byBhcHBseSBzZXNzaW9uIGRlc2NyaXB0aW9uIiB9KTsKLSAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIEFzc29jaWF0ZSBtZWRpYSBkZXNjcmlw
dGlvbnMgd2l0aCB0cmFuc2NlaXZlcnMgKHNldCBwcm92aXNpb25hbCBtaWQgdG8gJ2ZpbmFsJyBt
aWQpLgotICAgICAgICBmb3IgKGF1dG8mIG1lZGlhRGVzY3JpcHRpb24gOiBtZWRpYURlc2NyaXB0
aW9ucykgewotICAgICAgICAgICAgUlRDUnRwVHJhbnNjZWl2ZXIqIHRyYW5zY2VpdmVyID0gbWF0
Y2hUcmFuc2NlaXZlcih0cmFuc2NlaXZlcnMsIFsmbWVkaWFEZXNjcmlwdGlvbl0gKFJUQ1J0cFRy
YW5zY2VpdmVyJiBjdXJyZW50KSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnQucHJv
dmlzaW9uYWxNaWQoKSA9PSBtZWRpYURlc2NyaXB0aW9uLm1pZDsKLSAgICAgICAgICAgIH0pOwot
ICAgICAgICAgICAgaWYgKHRyYW5zY2VpdmVyKQotICAgICAgICAgICAgICAgIHRyYW5zY2VpdmVy
LT5zZXRNaWQodHJhbnNjZWl2ZXItPnByb3Zpc2lvbmFsTWlkKCkpOwotICAgICAgICB9Ci0gICAg
fQotCi0gICAgaWYgKGludGVybmFsUmVtb3RlRGVzY3JpcHRpb24oKSkgewotICAgICAgICBNZWRp
YUVuZHBvaW50U2Vzc2lvbkNvbmZpZ3VyYXRpb24qIHJlbW90ZUNvbmZpZ3VyYXRpb24gPSBpbnRl
cm5hbFJlbW90ZURlc2NyaXB0aW9uKCktPmNvbmZpZ3VyYXRpb24oKTsKLSAgICAgICAgUmVhbHRp
bWVNZWRpYVNvdXJjZU1hcCBzZW5kU291cmNlTWFwID0gY3JlYXRlU291cmNlTWFwKHJlbW90ZUNv
bmZpZ3VyYXRpb24tPm1lZGlhRGVzY3JpcHRpb25zKCksIG1lZGlhRGVzY3JpcHRpb25zLnNpemUo
KSwgdHJhbnNjZWl2ZXJzKTsKLQotICAgICAgICBpZiAobV9tZWRpYUVuZHBvaW50LT51cGRhdGVT
ZW5kQ29uZmlndXJhdGlvbihyZW1vdGVDb25maWd1cmF0aW9uLCBzZW5kU291cmNlTWFwLCBpc0lu
aXRpYXRvcikgPT0gTWVkaWFFbmRwb2ludDo6VXBkYXRlUmVzdWx0OjpGYWlsZWQpIHsKLSAgICAg
ICAgICAgIHNldExvY2FsRGVzY3JpcHRpb25GYWlsZWQoRXhjZXB0aW9uIHsgT3BlcmF0aW9uRXJy
b3IsICJVbmFibGUgdG8gYXBwbHkgc2Vzc2lvbiBkZXNjcmlwdGlvbiIgfSk7Ci0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoIWhhc1VuYXNzb2NpYXRlZFRy
YW5zY2VpdmVycyh0cmFuc2NlaXZlcnMpKQotICAgICAgICBjbGVhck5lZ290aWF0aW9uTmVlZGVk
U3RhdGUoKTsKLQotICAgIFJUQ1NpZ25hbGluZ1N0YXRlIG5ld1NpZ25hbGluZ1N0YXRlOwotCi0g
ICAgLy8gVXBkYXRlIHN0YXRlIGFuZCBsb2NhbCBkZXNjcmlwdGlvbnMgYWNjb3JkaW5nIHRvIHNl
dExvY2FsL1JlbW90ZURlc2NyaXB0aW9uIHByb2Nlc3NpbmcgbW9kZWwKLSAgICBzd2l0Y2ggKG5l
d0Rlc2NyaXB0aW9uLT50eXBlKCkpIHsKLSAgICBjYXNlIFJUQ1NkcFR5cGU6Ok9mZmVyOgotICAg
ICAgICBtX3BlbmRpbmdMb2NhbERlc2NyaXB0aW9uID0gV1RGTW92ZShuZXdEZXNjcmlwdGlvbik7
Ci0gICAgICAgIG5ld1NpZ25hbGluZ1N0YXRlID0gUlRDU2lnbmFsaW5nU3RhdGU6OkhhdmVMb2Nh
bE9mZmVyOwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgUlRDU2RwVHlwZTo6QW5zd2VyOgot
ICAgICAgICBtX2N1cnJlbnRMb2NhbERlc2NyaXB0aW9uID0gV1RGTW92ZShuZXdEZXNjcmlwdGlv
bik7Ci0gICAgICAgIG1fY3VycmVudFJlbW90ZURlc2NyaXB0aW9uID0gbV9wZW5kaW5nUmVtb3Rl
RGVzY3JpcHRpb247Ci0gICAgICAgIG1fcGVuZGluZ0xvY2FsRGVzY3JpcHRpb24gPSBudWxscHRy
OwotICAgICAgICBtX3BlbmRpbmdSZW1vdGVEZXNjcmlwdGlvbiA9IG51bGxwdHI7Ci0gICAgICAg
IG5ld1NpZ25hbGluZ1N0YXRlID0gUlRDU2lnbmFsaW5nU3RhdGU6OlN0YWJsZTsKLSAgICAgICAg
YnJlYWs7Ci0KLSAgICBjYXNlIFJUQ1NkcFR5cGU6OlJvbGxiYWNrOgotICAgICAgICBtX3BlbmRp
bmdMb2NhbERlc2NyaXB0aW9uID0gbnVsbHB0cjsKLSAgICAgICAgbmV3U2lnbmFsaW5nU3RhdGUg
PSBSVENTaWduYWxpbmdTdGF0ZTo6U3RhYmxlOwotICAgICAgICBicmVhazsKLQotICAgIGNhc2Ug
UlRDU2RwVHlwZTo6UHJhbnN3ZXI6Ci0gICAgICAgIG1fcGVuZGluZ0xvY2FsRGVzY3JpcHRpb24g
PSBXVEZNb3ZlKG5ld0Rlc2NyaXB0aW9uKTsKLSAgICAgICAgbmV3U2lnbmFsaW5nU3RhdGUgPSBS
VENTaWduYWxpbmdTdGF0ZTo6SGF2ZUxvY2FsUHJhbnN3ZXI7Ci0gICAgICAgIGJyZWFrOwotICAg
IH0KLQotICAgIHVwZGF0ZVNpZ25hbGluZ1N0YXRlKG5ld1NpZ25hbGluZ1N0YXRlKTsKLQotICAg
IGlmIChtX3BlZXJDb25uZWN0aW9uLmljZUdhdGhlcmluZ1N0YXRlKCkgPT0gUlRDSWNlR2F0aGVy
aW5nU3RhdGU6Ok5ldyAmJiBtZWRpYURlc2NyaXB0aW9ucy5zaXplKCkpCi0gICAgICAgIG1fcGVl
ckNvbm5lY3Rpb24udXBkYXRlSWNlR2F0aGVyaW5nU3RhdGUoUlRDSWNlR2F0aGVyaW5nU3RhdGU6
OkdhdGhlcmluZyk7Ci0KLSAgICBtYXJrQXNOZWVkaW5nTmVnb3RpYXRpb24oKTsKLSAgICBzZXRM
b2NhbERlc2NyaXB0aW9uU3VjY2VlZGVkKCk7Ci19Ci0KLVJlZlB0cjxSVENTZXNzaW9uRGVzY3Jp
cHRpb24+IE1lZGlhRW5kcG9pbnRQZWVyQ29ubmVjdGlvbjo6bG9jYWxEZXNjcmlwdGlvbigpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIGNyZWF0ZVJUQ1Nlc3Npb25EZXNjcmlwdGlvbihpbnRlcm5hbExv
Y2FsRGVzY3JpcHRpb24oKSk7Ci19Ci0KLVJlZlB0cjxSVENTZXNzaW9uRGVzY3JpcHRpb24+IE1l
ZGlhRW5kcG9pbnRQZWVyQ29ubmVjdGlvbjo6Y3VycmVudExvY2FsRGVzY3JpcHRpb24oKSBjb25z
dAotewotICAgIHJldHVybiBjcmVhdGVSVENTZXNzaW9uRGVzY3JpcHRpb24obV9jdXJyZW50TG9j
YWxEZXNjcmlwdGlvbi5nZXQoKSk7Ci19Ci0KLVJlZlB0cjxSVENTZXNzaW9uRGVzY3JpcHRpb24+
IE1lZGlhRW5kcG9pbnRQZWVyQ29ubmVjdGlvbjo6cGVuZGluZ0xvY2FsRGVzY3JpcHRpb24oKSBj
b25zdAotewotICAgIHJldHVybiBjcmVhdGVSVENTZXNzaW9uRGVzY3JpcHRpb24obV9wZW5kaW5n
TG9jYWxEZXNjcmlwdGlvbi5nZXQoKSk7Ci19Ci0KLXZvaWQgTWVkaWFFbmRwb2ludFBlZXJDb25u
ZWN0aW9uOjpkb1NldFJlbW90ZURlc2NyaXB0aW9uKFJUQ1Nlc3Npb25EZXNjcmlwdGlvbiYgZGVz
Y3JpcHRpb24pCi17Ci0gICAgcnVuVGFzayhbdGhpcywgcHJvdGVjdGVkRGVzY3JpcHRpb24gPSBS
ZWZQdHI8UlRDU2Vzc2lvbkRlc2NyaXB0aW9uPigmZGVzY3JpcHRpb24pXSgpIG11dGFibGUgewot
ICAgICAgICBzZXRSZW1vdGVEZXNjcmlwdGlvblRhc2soV1RGTW92ZShwcm90ZWN0ZWREZXNjcmlw
dGlvbikpOwotICAgIH0pOwotfQotCi12b2lkIE1lZGlhRW5kcG9pbnRQZWVyQ29ubmVjdGlvbjo6
c2V0UmVtb3RlRGVzY3JpcHRpb25UYXNrKFJlZlB0cjxSVENTZXNzaW9uRGVzY3JpcHRpb24+JiYg
ZGVzY3JpcHRpb24pCi17Ci0gICAgYXV0byByZXN1bHQgPSBNZWRpYUVuZHBvaW50U2Vzc2lvbkRl
c2NyaXB0aW9uOjpjcmVhdGUoV1RGTW92ZShkZXNjcmlwdGlvbiksICptX3NkcFByb2Nlc3Nvcik7
Ci0gICAgaWYgKHJlc3VsdC5oYXNFeGNlcHRpb24oKSkgewotICAgICAgICBzZXRSZW1vdGVEZXNj
cmlwdGlvbkZhaWxlZChyZXN1bHQucmVsZWFzZUV4Y2VwdGlvbigpKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLSAgICBhdXRvIG5ld0Rlc2NyaXB0aW9uID0gcmVzdWx0LnJlbGVhc2VSZXR1cm5W
YWx1ZSgpOwotCi0gICAgYXV0byYgbWVkaWFEZXNjcmlwdGlvbnMgPSBuZXdEZXNjcmlwdGlvbi0+
Y29uZmlndXJhdGlvbigpLT5tZWRpYURlc2NyaXB0aW9ucygpOwotICAgIGZvciAoYXV0byYgbWVk
aWFEZXNjcmlwdGlvbiA6IG1lZGlhRGVzY3JpcHRpb25zKSB7Ci0gICAgICAgIGlmIChtZWRpYURl
c2NyaXB0aW9uLnR5cGUgIT0gImF1ZGlvIiAmJiBtZWRpYURlc2NyaXB0aW9uLnR5cGUgIT0gInZp
ZGVvIikKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIG1lZGlhRGVzY3JpcHRpb24u
cGF5bG9hZHMgPSBtX21lZGlhRW5kcG9pbnQtPmZpbHRlclBheWxvYWRzKG1lZGlhRGVzY3JpcHRp
b24ucGF5bG9hZHMsIG1lZGlhRGVzY3JpcHRpb24udHlwZSA9PSAiYXVkaW8iID8gbV9kZWZhdWx0
QXVkaW9QYXlsb2FkcyA6IG1fZGVmYXVsdFZpZGVvUGF5bG9hZHMpOwotICAgIH0KLQotICAgIGJv
b2wgaXNJbml0aWF0b3IgPSBuZXdEZXNjcmlwdGlvbi0+dHlwZSgpID09IFJUQ1NkcFR5cGU6OkFu
c3dlcjsKLSAgICBjb25zdCBSdHBUcmFuc2NlaXZlclZlY3RvciYgdHJhbnNjZWl2ZXJzID0gbV9w
ZWVyQ29ubmVjdGlvbi5nZXRUcmFuc2NlaXZlcnMoKTsKLQotICAgIFJlYWx0aW1lTWVkaWFTb3Vy
Y2VNYXAgc2VuZFNvdXJjZU1hcDsKLSAgICBpZiAoaW50ZXJuYWxMb2NhbERlc2NyaXB0aW9uKCkp
Ci0gICAgICAgIHNlbmRTb3VyY2VNYXAgPSBjcmVhdGVTb3VyY2VNYXAobWVkaWFEZXNjcmlwdGlv
bnMsIGludGVybmFsTG9jYWxEZXNjcmlwdGlvbigpLT5jb25maWd1cmF0aW9uKCktPm1lZGlhRGVz
Y3JpcHRpb25zKCkuc2l6ZSgpLCB0cmFuc2NlaXZlcnMpOwotCi0gICAgaWYgKG1fbWVkaWFFbmRw
b2ludC0+dXBkYXRlU2VuZENvbmZpZ3VyYXRpb24obmV3RGVzY3JpcHRpb24tPmNvbmZpZ3VyYXRp
b24oKSwgc2VuZFNvdXJjZU1hcCwgaXNJbml0aWF0b3IpID09IE1lZGlhRW5kcG9pbnQ6OlVwZGF0
ZVJlc3VsdDo6RmFpbGVkKSB7Ci0gICAgICAgIHNldFJlbW90ZURlc2NyaXB0aW9uRmFpbGVkKEV4
Y2VwdGlvbiB7IE9wZXJhdGlvbkVycm9yLCAiVW5hYmxlIHRvIGFwcGx5IHNlc3Npb24gZGVzY3Jp
cHRpb24iIH0pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gT25lIGxlZ2FjeSBN
ZWRpYVN0cmVhbUV2ZW50IHdpbGwgYmUgZmlyZWQgZm9yIGV2ZXJ5IG5ldyBNZWRpYVN0cmVhbSBj
cmVhdGVkIGFzIHRoaXMgcmVtb3RlIGRlc2NyaXB0aW9uIGlzIHNldC4KLSAgICBWZWN0b3I8UmVm
UHRyPE1lZGlhU3RyZWFtRXZlbnQ+PiBsZWdhY3lNZWRpYVN0cmVhbUV2ZW50czsKLQotICAgIGZv
ciAoYXV0byYgbWVkaWFEZXNjcmlwdGlvbiA6IG1lZGlhRGVzY3JpcHRpb25zKSB7Ci0gICAgICAg
IFJUQ1J0cFRyYW5zY2VpdmVyKiB0cmFuc2NlaXZlciA9IG1hdGNoVHJhbnNjZWl2ZXJCeU1pZCh0
cmFuc2NlaXZlcnMsIG1lZGlhRGVzY3JpcHRpb24ubWlkKTsKLSAgICAgICAgaWYgKCF0cmFuc2Nl
aXZlcikgewotICAgICAgICAgICAgYm9vbCByZWNlaXZlT25seUZsYWcgPSBmYWxzZTsKLQotICAg
ICAgICAgICAgaWYgKG1lZGlhRGVzY3JpcHRpb24ubW9kZSA9PSAic2VuZHJlY3YiIHx8IG1lZGlh
RGVzY3JpcHRpb24ubW9kZSA9PSAicmVjdm9ubHkiKSB7Ci0gICAgICAgICAgICAgICAgLy8gVHJ5
IHRvIG1hdGNoIGFuIGV4aXN0aW5nIHRyYW5zY2VpdmVyLgotICAgICAgICAgICAgICAgIHRyYW5z
Y2VpdmVyID0gbWF0Y2hUcmFuc2NlaXZlcih0cmFuc2NlaXZlcnMsIFsmbWVkaWFEZXNjcmlwdGlv
bl0gKFJUQ1J0cFRyYW5zY2VpdmVyJiBjdXJyZW50KSB7Ci0gICAgICAgICAgICAgICAgICAgIHJl
dHVybiAhY3VycmVudC5zdG9wcGVkKCkgJiYgY3VycmVudC5taWQoKS5pc051bGwoKSAmJiBjdXJy
ZW50LnNlbmRlcigpLnRyYWNrS2luZCgpID09IG1lZGlhRGVzY3JpcHRpb24udHlwZTsKLSAgICAg
ICAgICAgICAgICB9KTsKLQotICAgICAgICAgICAgICAgIGlmICh0cmFuc2NlaXZlcikgewotICAg
ICAgICAgICAgICAgICAgICAvLyBUaGlzIHRyYW5zY2VpdmVyIHdhcyBjcmVhdGVkIGxvY2FsbHkg
d2l0aCBhIHByb3Zpc2lvbmFsIG1pZC4gSXRzIHJlYWwgbWlkIHdpbGwgbm93IGJlIHNldCBieSB0
aGUgcmVtb3RlCi0gICAgICAgICAgICAgICAgICAgIC8vIGRlc2NyaXB0aW9uIHNvIHdlIG5lZWQg
dG8gdXBkYXRlIHRoZSBtaWQgb2YgdGhlIHRyYW5zY2VpdmVyJ3MgbXV0ZWQgc291cmNlIHRvIHBy
ZXNlcnZlIHRoZSBhc3NvY2lhdGlvbi4KLSAgICAgICAgICAgICAgICAgICAgdHJhbnNjZWl2ZXIt
PnNldE1pZChtZWRpYURlc2NyaXB0aW9uLm1pZCk7Ci0gICAgICAgICAgICAgICAgICAgIG1fbWVk
aWFFbmRwb2ludC0+cmVwbGFjZU11dGVkUmVtb3RlU291cmNlTWlkKHRyYW5zY2VpdmVyLT5wcm92
aXNpb25hbE1pZCgpLCBtZWRpYURlc2NyaXB0aW9uLm1pZCk7Ci0gICAgICAgICAgICAgICAgfSBl
bHNlCi0gICAgICAgICAgICAgICAgICAgIHJlY2VpdmVPbmx5RmxhZyA9IHRydWU7Ci0gICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgIGlmICghdHJhbnNjZWl2ZXIpIHsKLSAgICAgICAgICAgICAg
ICBhdXRvIHNlbmRlciA9IFJUQ1J0cFNlbmRlcjo6Y3JlYXRlKFN0cmluZyhtZWRpYURlc2NyaXB0
aW9uLnR5cGUpLCBWZWN0b3I8U3RyaW5nPigpLCBtX3BlZXJDb25uZWN0aW9uLnNlbmRlckJhY2tl
bmQoKSk7Ci0gICAgICAgICAgICAgICAgYXV0byByZWNlaXZlciA9IGNyZWF0ZVJlY2VpdmVyKG1l
ZGlhRGVzY3JpcHRpb24ubWlkLCBtZWRpYURlc2NyaXB0aW9uLnR5cGUsIG1lZGlhRGVzY3JpcHRp
b24ubWVkaWFTdHJlYW1UcmFja0lkKTsKLQotICAgICAgICAgICAgICAgIGF1dG8gbmV3VHJhbnNj
ZWl2ZXIgPSBSVENSdHBUcmFuc2NlaXZlcjo6Y3JlYXRlKFdURk1vdmUoc2VuZGVyKSwgV1RGTW92
ZShyZWNlaXZlcikpOwotICAgICAgICAgICAgICAgIG5ld1RyYW5zY2VpdmVyLT5zZXRNaWQobWVk
aWFEZXNjcmlwdGlvbi5taWQpOwotICAgICAgICAgICAgICAgIGlmIChyZWNlaXZlT25seUZsYWcp
Ci0gICAgICAgICAgICAgICAgICAgIG5ld1RyYW5zY2VpdmVyLT5kaXNhYmxlU2VuZGluZ0RpcmVj
dGlvbigpOwotCi0gICAgICAgICAgICAgICAgdHJhbnNjZWl2ZXIgPSBuZXdUcmFuc2NlaXZlci5w
dHIoKTsKLSAgICAgICAgICAgICAgICBtX3BlZXJDb25uZWN0aW9uLmFkZFRyYW5zY2VpdmVyKFdU
Rk1vdmUobmV3VHJhbnNjZWl2ZXIpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAg
ICAgIGlmIChtZWRpYURlc2NyaXB0aW9uLm1vZGUgPT0gInNlbmRyZWN2IiB8fCBtZWRpYURlc2Ny
aXB0aW9uLm1vZGUgPT0gInNlbmRvbmx5IikgewotICAgICAgICAgICAgYXV0byYgcmVjZWl2ZXIg
PSB0cmFuc2NlaXZlci0+cmVjZWl2ZXIoKTsKLSAgICAgICAgICAgIGlmIChyZWNlaXZlci5pc0Rp
c3BhdGNoZWQoKSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIHJlY2Vp
dmVyLnNldERpc3BhdGNoZWQodHJ1ZSk7Ci0KLSAgICAgICAgICAgIFZlY3RvcjxTdHJpbmc+IG1l
ZGlhU3RyZWFtSWRzOwotICAgICAgICAgICAgaWYgKCFtZWRpYURlc2NyaXB0aW9uLm1lZGlhU3Ry
ZWFtSWQuaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgIG1lZGlhU3RyZWFtSWRzLmFwcGVuZCht
ZWRpYURlc2NyaXB0aW9uLm1lZGlhU3RyZWFtSWQpOwotCi0gICAgICAgICAgICAvLyBBIHJlbW90
ZSB0cmFjayBjYW4gYmUgYXNzb2NpYXRlZCB3aXRoIDAuLiogTWVkaWFTdHJlYW1zLiBXZSBjcmVh
dGUgYSBuZXcgc3RyZWFtIGZvcgotICAgICAgICAgICAgLy8gYSB0cmFjayBpbiBjYXNlIG9mIGFu
IHVucmVjb2duaXplZCBzdHJlYW0gaWQsIG9yIGp1c3QgYWRkIHRoZSB0cmFjayBpZiB0aGUgc3Ry
ZWFtCi0gICAgICAgICAgICAvLyBhbHJlYWR5IGV4aXN0cy4KLSAgICAgICAgICAgIEhhc2hNYXA8
U3RyaW5nLCBSZWZQdHI8TWVkaWFTdHJlYW0+PiB0cmFja0V2ZW50TWVkaWFTdHJlYW1zOwotICAg
ICAgICAgICAgZm9yIChhdXRvJiBpZCA6IG1lZGlhU3RyZWFtSWRzKSB7Ci0gICAgICAgICAgICAg
ICAgaWYgKG1fcmVtb3RlU3RyZWFtTWFwLmNvbnRhaW5zKGlkKSkgewotICAgICAgICAgICAgICAg
ICAgICBSZWZQdHI8TWVkaWFTdHJlYW0+IHN0cmVhbSA9IG1fcmVtb3RlU3RyZWFtTWFwLmdldChp
ZCk7Ci0gICAgICAgICAgICAgICAgICAgIHN0cmVhbS0+YWRkVHJhY2soKnJlY2VpdmVyLnRyYWNr
KCkpOwotICAgICAgICAgICAgICAgICAgICB0cmFja0V2ZW50TWVkaWFTdHJlYW1zLmFkZChpZCwg
V1RGTW92ZShzdHJlYW0pKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
ICAgICAgICBhdXRvIG5ld1N0cmVhbSA9IE1lZGlhU3RyZWFtOjpjcmVhdGUoKm1fcGVlckNvbm5l
Y3Rpb24uc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCBNZWRpYVN0cmVhbVRyYWNrVmVjdG9yKHsg
cmVjZWl2ZXIudHJhY2soKSB9KSk7Ci0gICAgICAgICAgICAgICAgICAgIG1fcmVtb3RlU3RyZWFt
TWFwLmFkZChpZCwgbmV3U3RyZWFtLmNvcHlSZWYoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGxl
Z2FjeU1lZGlhU3RyZWFtRXZlbnRzLmFwcGVuZChNZWRpYVN0cmVhbUV2ZW50OjpjcmVhdGUoZXZl
bnROYW1lcygpLmFkZHN0cmVhbUV2ZW50LCBmYWxzZSwgZmFsc2UsIG5ld1N0cmVhbS5jb3B5UmVm
KCkpKTsKLSAgICAgICAgICAgICAgICAgICAgdHJhY2tFdmVudE1lZGlhU3RyZWFtcy5hZGQoaWQs
IFdURk1vdmUobmV3U3RyZWFtKSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICBWZWN0b3I8UmVmUHRyPE1lZGlhU3RyZWFtPj4gc3RyZWFtczsKLSAgICAg
ICAgICAgIGNvcHlWYWx1ZXNUb1ZlY3Rvcih0cmFja0V2ZW50TWVkaWFTdHJlYW1zLCBzdHJlYW1z
KTsKLQotICAgICAgICAgICAgbV9wZWVyQ29ubmVjdGlvbi5maXJlRXZlbnQoUlRDVHJhY2tFdmVu
dDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS50cmFja0V2ZW50LCBmYWxzZSwgZmFsc2UsCi0gICAgICAg
ICAgICAgICAgJnJlY2VpdmVyLCByZWNlaXZlci50cmFjaygpLCBXVEZNb3ZlKHN0cmVhbXMpLCB0
cmFuc2NlaXZlcikpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gRmlyZSBsZWdhY3kgYWRk
c3RyZWFtIGV2ZW50cy4KLSAgICBmb3IgKGF1dG8mIGV2ZW50IDogbGVnYWN5TWVkaWFTdHJlYW1F
dmVudHMpCi0gICAgICAgIG1fcGVlckNvbm5lY3Rpb24uZmlyZUV2ZW50KCpldmVudCk7Ci0KLSAg
ICBSVENTaWduYWxpbmdTdGF0ZSBuZXdTaWduYWxpbmdTdGF0ZTsKLQotICAgIC8vIFVwZGF0ZSBz
dGF0ZSBhbmQgbG9jYWwgZGVzY3JpcHRpb25zIGFjY29yZGluZyB0byBzZXRMb2NhbC9SZW1vdGVE
ZXNjcmlwdGlvbiBwcm9jZXNzaW5nIG1vZGVsCi0gICAgc3dpdGNoIChuZXdEZXNjcmlwdGlvbi0+
dHlwZSgpKSB7Ci0gICAgY2FzZSBSVENTZHBUeXBlOjpPZmZlcjoKLSAgICAgICAgbV9wZW5kaW5n
UmVtb3RlRGVzY3JpcHRpb24gPSBXVEZNb3ZlKG5ld0Rlc2NyaXB0aW9uKTsKLSAgICAgICAgbmV3
U2lnbmFsaW5nU3RhdGUgPSBSVENTaWduYWxpbmdTdGF0ZTo6SGF2ZVJlbW90ZU9mZmVyOwotICAg
ICAgICBicmVhazsKLQotICAgIGNhc2UgUlRDU2RwVHlwZTo6QW5zd2VyOgotICAgICAgICBtX2N1
cnJlbnRSZW1vdGVEZXNjcmlwdGlvbiA9IFdURk1vdmUobmV3RGVzY3JpcHRpb24pOwotICAgICAg
ICBtX2N1cnJlbnRMb2NhbERlc2NyaXB0aW9uID0gbV9wZW5kaW5nTG9jYWxEZXNjcmlwdGlvbjsK
LSAgICAgICAgbV9wZW5kaW5nUmVtb3RlRGVzY3JpcHRpb24gPSBudWxscHRyOwotICAgICAgICBt
X3BlbmRpbmdMb2NhbERlc2NyaXB0aW9uID0gbnVsbHB0cjsKLSAgICAgICAgbmV3U2lnbmFsaW5n
U3RhdGUgPSBSVENTaWduYWxpbmdTdGF0ZTo6U3RhYmxlOwotICAgICAgICBicmVhazsKLQotICAg
IGNhc2UgUlRDU2RwVHlwZTo6Um9sbGJhY2s6Ci0gICAgICAgIG1fcGVuZGluZ1JlbW90ZURlc2Ny
aXB0aW9uID0gbnVsbHB0cjsKLSAgICAgICAgbmV3U2lnbmFsaW5nU3RhdGUgPSBSVENTaWduYWxp
bmdTdGF0ZTo6U3RhYmxlOwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgUlRDU2RwVHlwZTo6
UHJhbnN3ZXI6Ci0gICAgICAgIG1fcGVuZGluZ1JlbW90ZURlc2NyaXB0aW9uID0gV1RGTW92ZShu
ZXdEZXNjcmlwdGlvbik7Ci0gICAgICAgIG5ld1NpZ25hbGluZ1N0YXRlID0gUlRDU2lnbmFsaW5n
U3RhdGU6OkhhdmVSZW1vdGVQcmFuc3dlcjsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAg
dXBkYXRlU2lnbmFsaW5nU3RhdGUobmV3U2lnbmFsaW5nU3RhdGUpOwotICAgIHNldFJlbW90ZURl
c2NyaXB0aW9uU3VjY2VlZGVkKCk7Ci19Ci0KLVJlZlB0cjxSVENTZXNzaW9uRGVzY3JpcHRpb24+
IE1lZGlhRW5kcG9pbnRQZWVyQ29ubmVjdGlvbjo6cmVtb3RlRGVzY3JpcHRpb24oKSBjb25zdAot
ewotICAgIHJldHVybiBjcmVhdGVSVENTZXNzaW9uRGVzY3JpcHRpb24oaW50ZXJuYWxSZW1vdGVE
ZXNjcmlwdGlvbigpKTsKLX0KLQotUmVmUHRyPFJUQ1Nlc3Npb25EZXNjcmlwdGlvbj4gTWVkaWFF
bmRwb2ludFBlZXJDb25uZWN0aW9uOjpjdXJyZW50UmVtb3RlRGVzY3JpcHRpb24oKSBjb25zdAot
ewotICAgIHJldHVybiBjcmVhdGVSVENTZXNzaW9uRGVzY3JpcHRpb24obV9jdXJyZW50UmVtb3Rl
RGVzY3JpcHRpb24uZ2V0KCkpOwotfQotCi1SZWZQdHI8UlRDU2Vzc2lvbkRlc2NyaXB0aW9uPiBN
ZWRpYUVuZHBvaW50UGVlckNvbm5lY3Rpb246OnBlbmRpbmdSZW1vdGVEZXNjcmlwdGlvbigpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIGNyZWF0ZVJUQ1Nlc3Npb25EZXNjcmlwdGlvbihtX3BlbmRpbmdS
ZW1vdGVEZXNjcmlwdGlvbi5nZXQoKSk7Ci19Ci0KLWJvb2wgTWVkaWFFbmRwb2ludFBlZXJDb25u
ZWN0aW9uOjpzZXRDb25maWd1cmF0aW9uKE1lZGlhRW5kcG9pbnRDb25maWd1cmF0aW9uJiYgY29u
ZmlndXJhdGlvbikKLXsKLSAgICBtX21lZGlhRW5kcG9pbnQtPnNldENvbmZpZ3VyYXRpb24oV1RG
TW92ZShjb25maWd1cmF0aW9uKSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgTWVkaWFF
bmRwb2ludFBlZXJDb25uZWN0aW9uOjpkb0FkZEljZUNhbmRpZGF0ZShSVENJY2VDYW5kaWRhdGUm
IHJ0Y0NhbmRpZGF0ZSkKLXsKLSAgICBydW5UYXNrKFt0aGlzLCBwcm90ZWN0ZWRDYW5kaWRhdGUg
PSBSZWZQdHI8UlRDSWNlQ2FuZGlkYXRlPigmcnRjQ2FuZGlkYXRlKV0oKSBtdXRhYmxlIHsKLSAg
ICAgICAgYWRkSWNlQ2FuZGlkYXRlVGFzaygqcHJvdGVjdGVkQ2FuZGlkYXRlKTsKLSAgICB9KTsK
LX0KLQotdm9pZCBNZWRpYUVuZHBvaW50UGVlckNvbm5lY3Rpb246OmFkZEljZUNhbmRpZGF0ZVRh
c2soUlRDSWNlQ2FuZGlkYXRlJiBydGNDYW5kaWRhdGUpCi17Ci0gICAgaWYgKCFpbnRlcm5hbFJl
bW90ZURlc2NyaXB0aW9uKCkpIHsKLSAgICAgICAgYWRkSWNlQ2FuZGlkYXRlRmFpbGVkKEV4Y2Vw
dGlvbiB7IEludmFsaWRTdGF0ZUVycm9yLCAiTm8gcmVtb3RlIGRlc2NyaXB0aW9uIHNldCIgfSk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBhdXRvJiByZW1vdGVNZWRpYURlc2NyaXB0
aW9ucyA9IGludGVybmFsUmVtb3RlRGVzY3JpcHRpb24oKS0+Y29uZmlndXJhdGlvbigpLT5tZWRp
YURlc2NyaXB0aW9ucygpOwotICAgIFBlZXJNZWRpYURlc2NyaXB0aW9uKiB0YXJnZXRNZWRpYURl
c2NyaXB0aW9uID0gbnVsbHB0cjsKLQotICAgIC8vIFdoZW4gaWRlbnRpZnlpbmcgdGhlIHRhcmdl
dCBtZWRpYSBkZXNjcmlwdGlvbiwgc2RwTWlkIHRha2VzIHByZWNlZGVuY2Ugb3ZlciBzZHBNTGlu
ZUluZGV4Ci0gICAgLy8gaWYgYm90aCBhcmUgcHJlc2VudC4KLSAgICBpZiAoIXJ0Y0NhbmRpZGF0
ZS5zZHBNaWQoKS5pc051bGwoKSkgewotICAgICAgICBjb25zdCBTdHJpbmcmIG1pZCA9IHJ0Y0Nh
bmRpZGF0ZS5zZHBNaWQoKTsKLSAgICAgICAgZm9yIChhdXRvJiBkZXNjcmlwdGlvbiA6IHJlbW90
ZU1lZGlhRGVzY3JpcHRpb25zKSB7Ci0gICAgICAgICAgICBpZiAoZGVzY3JpcHRpb24ubWlkID09
IG1pZCkgewotICAgICAgICAgICAgICAgIHRhcmdldE1lZGlhRGVzY3JpcHRpb24gPSAmZGVzY3Jp
cHRpb247Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LQotICAgICAgICBpZiAoIXRhcmdldE1lZGlhRGVzY3JpcHRpb24pIHsKLSAgICAgICAgICAgIGFk
ZEljZUNhbmRpZGF0ZUZhaWxlZChFeGNlcHRpb24geyBPcGVyYXRpb25FcnJvciwgInNkcE1pZCBk
aWQgbm90IG1hdGNoIGFueSBtZWRpYSBkZXNjcmlwdGlvbiIgfSk7Ci0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKHJ0Y0NhbmRpZGF0ZS5zZHBNTGluZUluZGV4
KCkpIHsKLSAgICAgICAgdW5zaWduZWQgc2hvcnQgc2RwTUxpbmVJbmRleCA9IHJ0Y0NhbmRpZGF0
ZS5zZHBNTGluZUluZGV4KCkudmFsdWUoKTsKLSAgICAgICAgaWYgKHNkcE1MaW5lSW5kZXggPj0g
cmVtb3RlTWVkaWFEZXNjcmlwdGlvbnMuc2l6ZSgpKSB7Ci0gICAgICAgICAgICBhZGRJY2VDYW5k
aWRhdGVGYWlsZWQoRXhjZXB0aW9uIHsgT3BlcmF0aW9uRXJyb3IsICJzZHBNTGluZUluZGV4IGlz
IG91dCBvZiByYW5nZSIgfSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAg
ICAgdGFyZ2V0TWVkaWFEZXNjcmlwdGlvbiA9ICZyZW1vdGVNZWRpYURlc2NyaXB0aW9uc1tzZHBN
TGluZUluZGV4XTsKLSAgICB9IGVsc2UgewotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGF1dG8gcmVzdWx0ID0gbV9zZHBQcm9jZXNz
b3ItPnBhcnNlQ2FuZGlkYXRlTGluZShydGNDYW5kaWRhdGUuY2FuZGlkYXRlKCkpOwotICAgIGlm
IChyZXN1bHQucGFyc2luZ1N0YXR1cygpICE9IFNEUFByb2Nlc3Nvcjo6UmVzdWx0OjpTdWNjZXNz
KSB7Ci0gICAgICAgIGlmIChyZXN1bHQucGFyc2luZ1N0YXR1cygpID09IFNEUFByb2Nlc3Nvcjo6
UmVzdWx0OjpQYXJzZUVycm9yKQotICAgICAgICAgICAgYWRkSWNlQ2FuZGlkYXRlRmFpbGVkKEV4
Y2VwdGlvbiB7IE9wZXJhdGlvbkVycm9yLCAiSW52YWxpZCBjYW5kaWRhdGUgY29udGVudCIgfSk7
Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIExPR19FUlJPUigiU0RQUHJvY2Vzc29yIGludGVy
bmFsIGVycm9yIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQodGFyZ2V0
TWVkaWFEZXNjcmlwdGlvbik7Ci0gICAgbV9tZWRpYUVuZHBvaW50LT5hZGRSZW1vdGVDYW5kaWRh
dGUocmVzdWx0LmNhbmRpZGF0ZSgpLCB0YXJnZXRNZWRpYURlc2NyaXB0aW9uLT5taWQsIHRhcmdl
dE1lZGlhRGVzY3JpcHRpb24tPmljZVVmcmFnLCB0YXJnZXRNZWRpYURlc2NyaXB0aW9uLT5pY2VQ
YXNzd29yZCk7Ci0KLSAgICB0YXJnZXRNZWRpYURlc2NyaXB0aW9uLT5hZGRJY2VDYW5kaWRhdGUo
V1RGTW92ZShyZXN1bHQuY2FuZGlkYXRlKCkpKTsKLQotICAgIGFkZEljZUNhbmRpZGF0ZVN1Y2Nl
ZWRlZCgpOwotfQotCi12b2lkIE1lZGlhRW5kcG9pbnRQZWVyQ29ubmVjdGlvbjo6Z2V0U3RhdHMo
TWVkaWFTdHJlYW1UcmFjayogdHJhY2ssIFJlZjxEZWZlcnJlZFByb21pc2U+JiYgcHJvbWlzZSkK
LXsKLSAgICBtX21lZGlhRW5kcG9pbnQtPmdldFN0YXRzKHRyYWNrLCBXVEZNb3ZlKHByb21pc2Up
KTsKLX0KLQotVmVjdG9yPFJlZlB0cjxNZWRpYVN0cmVhbT4+IE1lZGlhRW5kcG9pbnRQZWVyQ29u
bmVjdGlvbjo6Z2V0UmVtb3RlU3RyZWFtcygpIGNvbnN0Ci17Ci0gICAgVmVjdG9yPFJlZlB0cjxN
ZWRpYVN0cmVhbT4+IHJlbW90ZVN0cmVhbXM7Ci0gICAgY29weVZhbHVlc1RvVmVjdG9yKG1fcmVt
b3RlU3RyZWFtTWFwLCByZW1vdGVTdHJlYW1zKTsKLSAgICByZXR1cm4gcmVtb3RlU3RyZWFtczsK
LX0KLQotUmVmPFJUQ1J0cFJlY2VpdmVyPiBNZWRpYUVuZHBvaW50UGVlckNvbm5lY3Rpb246OmNy
ZWF0ZVJlY2VpdmVyKGNvbnN0IFN0cmluZyYgdHJhbnNjZWl2ZXJNaWQsIGNvbnN0IFN0cmluZyYg
dHJhY2tLaW5kLCBjb25zdCBTdHJpbmcmIHRyYWNrSWQpCi17Ci0gICAgUmVhbHRpbWVNZWRpYVNv
dXJjZTo6VHlwZSBzb3VyY2VUeXBlID0gdHJhY2tLaW5kID09ICJhdWRpbyIgPyBSZWFsdGltZU1l
ZGlhU291cmNlOjpUeXBlOjpBdWRpbyA6IFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGU6OlZpZGVv
OwotCi0gICAgLy8gQ3JlYXRlIGEgbXV0ZWQgcmVtb3RlIHNvdXJjZSB0aGF0IHdpbGwgYmUgdW5t
dXRlZCBvbmNlIG1lZGlhIHN0YXJ0cyBhcnJpdmluZy4KLSAgICBhdXRvIHJlbW90ZVNvdXJjZSA9
IG1fbWVkaWFFbmRwb2ludC0+Y3JlYXRlTXV0ZWRSZW1vdGVTb3VyY2UodHJhbnNjZWl2ZXJNaWQs
IHNvdXJjZVR5cGUpOwotICAgIGF1dG8gcmVtb3RlVHJhY2tQcml2YXRlID0gTWVkaWFTdHJlYW1U
cmFja1ByaXZhdGU6OmNyZWF0ZShXVEZNb3ZlKHJlbW90ZVNvdXJjZSksIFN0cmluZyh0cmFja0lk
KSk7Ci0gICAgYXV0byByZW1vdGVUcmFjayA9IE1lZGlhU3RyZWFtVHJhY2s6OmNyZWF0ZSgqbV9w
ZWVyQ29ubmVjdGlvbi5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCksIFdURk1vdmUocmVtb3RlVHJh
Y2tQcml2YXRlKSk7Ci0KLSAgICByZXR1cm4gUlRDUnRwUmVjZWl2ZXI6OmNyZWF0ZShXVEZNb3Zl
KHJlbW90ZVRyYWNrKSk7Ci19Ci0KLXN0ZDo6dW5pcXVlX3B0cjxSVENEYXRhQ2hhbm5lbEhhbmRs
ZXI+IE1lZGlhRW5kcG9pbnRQZWVyQ29ubmVjdGlvbjo6Y3JlYXRlRGF0YUNoYW5uZWxIYW5kbGVy
KGNvbnN0IFN0cmluZyYgbGFiZWwsIGNvbnN0IFJUQ0RhdGFDaGFubmVsSW5pdCYgb3B0aW9ucykK
LXsKLSAgICByZXR1cm4gbV9tZWRpYUVuZHBvaW50LT5jcmVhdGVEYXRhQ2hhbm5lbEhhbmRsZXIo
bGFiZWwsIG9wdGlvbnMpOwotfQotCi12b2lkIE1lZGlhRW5kcG9pbnRQZWVyQ29ubmVjdGlvbjo6
cmVwbGFjZVRyYWNrKFJUQ1J0cFNlbmRlciYgc2VuZGVyLCBSZWY8TWVkaWFTdHJlYW1UcmFjaz4m
JiB3aXRoVHJhY2ssIERPTVByb21pc2VEZWZlcnJlZDx2b2lkPiYmIHByb21pc2UpCi17Ci0gICAg
UlRDUnRwVHJhbnNjZWl2ZXIqIHRyYW5zY2VpdmVyID0gbWF0Y2hUcmFuc2NlaXZlcihtX3BlZXJD
b25uZWN0aW9uLmdldFRyYW5zY2VpdmVycygpLCBbJnNlbmRlcl0gKFJUQ1J0cFRyYW5zY2VpdmVy
JiBjdXJyZW50KSB7Ci0gICAgICAgIHJldHVybiAmY3VycmVudC5zZW5kZXIoKSA9PSAmc2VuZGVy
OwotICAgIH0pOwotICAgIEFTU0VSVCh0cmFuc2NlaXZlcik7Ci0KLSAgICBjb25zdCBTdHJpbmcm
IG1pZCA9IHRyYW5zY2VpdmVyLT5taWQoKTsKLSAgICBpZiAobWlkLmlzTnVsbCgpKSB7Ci0gICAg
ICAgIC8vIFRyYW5zY2VpdmVyIGlzIG5vdCBhc3NvY2lhdGVkIHdpdGggYSBtZWRpYSBkZXNjcmlw
dGlvbiB5ZXQuCi0gICAgICAgIHNlbmRlci5zZXRUcmFjayhXVEZNb3ZlKHdpdGhUcmFjaykpOwot
ICAgICAgICBwcm9taXNlLnJlc29sdmUoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IHJ1blRhc2soW3RoaXMsIHByb3RlY3RlZFNlbmRlciA9IFJlZlB0cjxSVENSdHBTZW5kZXI+KCZz
ZW5kZXIpLCBtaWQsIHByb3RlY3RlZFRyYWNrID0gV1RGTW92ZSh3aXRoVHJhY2spLCBwcm90ZWN0
ZWRQcm9taXNlID0gV1RGTW92ZShwcm9taXNlKV0oKSBtdXRhYmxlIHsKLSAgICAgICAgcmVwbGFj
ZVRyYWNrVGFzaygqcHJvdGVjdGVkU2VuZGVyLCBtaWQsIFdURk1vdmUocHJvdGVjdGVkVHJhY2sp
LCBwcm90ZWN0ZWRQcm9taXNlKTsKLSAgICB9KTsKLX0KLQotdm9pZCBNZWRpYUVuZHBvaW50UGVl
ckNvbm5lY3Rpb246OnJlcGxhY2VUcmFja1Rhc2soUlRDUnRwU2VuZGVyJiBzZW5kZXIsIGNvbnN0
IFN0cmluZyYgbWlkLCBSZWY8TWVkaWFTdHJlYW1UcmFjaz4mJiB3aXRoVHJhY2ssIERPTVByb21p
c2VEZWZlcnJlZDx2b2lkPiYgcHJvbWlzZSkKLXsKLSAgICBpZiAobV9wZWVyQ29ubmVjdGlvbi5p
c0Nsb3NlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX21lZGlhRW5kcG9pbnQtPnJlcGxh
Y2VTZW5kU291cmNlKHdpdGhUcmFjay0+c291cmNlKCksIG1pZCk7Ci0KLSAgICBzZW5kZXIuc2V0
VHJhY2soV1RGTW92ZSh3aXRoVHJhY2spKTsKLSAgICBwcm9taXNlLnJlc29sdmUoKTsKLX0KLQot
dm9pZCBNZWRpYUVuZHBvaW50UGVlckNvbm5lY3Rpb246OmRvU3RvcCgpCi17Ci0gICAgbV9tZWRp
YUVuZHBvaW50LT5zdG9wKCk7Ci19Ci0KLXZvaWQgTWVkaWFFbmRwb2ludFBlZXJDb25uZWN0aW9u
OjplbXVsYXRlUGxhdGZvcm1FdmVudChjb25zdCBTdHJpbmcmIGFjdGlvbikKLXsKLSAgICBtX21l
ZGlhRW5kcG9pbnQtPmVtdWxhdGVQbGF0Zm9ybUV2ZW50KGFjdGlvbik7Ci19Ci0KLU1lZGlhRW5k
cG9pbnRTZXNzaW9uRGVzY3JpcHRpb24qIE1lZGlhRW5kcG9pbnRQZWVyQ29ubmVjdGlvbjo6aW50
ZXJuYWxMb2NhbERlc2NyaXB0aW9uKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9wZW5kaW5nTG9j
YWxEZXNjcmlwdGlvbiA/IG1fcGVuZGluZ0xvY2FsRGVzY3JpcHRpb24uZ2V0KCkgOiBtX2N1cnJl
bnRMb2NhbERlc2NyaXB0aW9uLmdldCgpOwotfQotCi1NZWRpYUVuZHBvaW50U2Vzc2lvbkRlc2Ny
aXB0aW9uKiBNZWRpYUVuZHBvaW50UGVlckNvbm5lY3Rpb246OmludGVybmFsUmVtb3RlRGVzY3Jp
cHRpb24oKSBjb25zdAotewotICAgIHJldHVybiBtX3BlbmRpbmdSZW1vdGVEZXNjcmlwdGlvbiA/
IG1fcGVuZGluZ1JlbW90ZURlc2NyaXB0aW9uLmdldCgpIDogbV9jdXJyZW50UmVtb3RlRGVzY3Jp
cHRpb24uZ2V0KCk7Ci19Ci0KLVJlZlB0cjxSVENTZXNzaW9uRGVzY3JpcHRpb24+IE1lZGlhRW5k
cG9pbnRQZWVyQ29ubmVjdGlvbjo6Y3JlYXRlUlRDU2Vzc2lvbkRlc2NyaXB0aW9uKE1lZGlhRW5k
cG9pbnRTZXNzaW9uRGVzY3JpcHRpb24qIGRlc2NyaXB0aW9uKSBjb25zdAotewotICAgIHJldHVy
biBkZXNjcmlwdGlvbiA/IGRlc2NyaXB0aW9uLT50b1JUQ1Nlc3Npb25EZXNjcmlwdGlvbigqbV9z
ZHBQcm9jZXNzb3IpIDogbnVsbHB0cjsKLX0KLQotdm9pZCBNZWRpYUVuZHBvaW50UGVlckNvbm5l
Y3Rpb246OmdvdER0bHNGaW5nZXJwcmludChjb25zdCBTdHJpbmcmIGZpbmdlcnByaW50LCBjb25z
dCBTdHJpbmcmIGZpbmdlcnByaW50RnVuY3Rpb24pCi17Ci0gICAgQVNTRVJUKGlzTWFpblRocmVh
ZCgpKTsKLQotICAgIG1fZHRsc0ZpbmdlcnByaW50ID0gZmluZ2VycHJpbnQ7Ci0gICAgbV9kdGxz
RmluZ2VycHJpbnRGdW5jdGlvbiA9IGZpbmdlcnByaW50RnVuY3Rpb247Ci0KLSAgICBzdGFydFJ1
bm5pbmdUYXNrcygpOwotfQotCi12b2lkIE1lZGlhRW5kcG9pbnRQZWVyQ29ubmVjdGlvbjo6Z290
SWNlQ2FuZGlkYXRlKGNvbnN0IFN0cmluZyYgbWlkLCBJY2VDYW5kaWRhdGUmJiBjYW5kaWRhdGUp
Ci17Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLQotICAgIGF1dG8mIG1lZGlhRGVzY3Jp
cHRpb25zID0gaW50ZXJuYWxMb2NhbERlc2NyaXB0aW9uKCktPmNvbmZpZ3VyYXRpb24oKS0+bWVk
aWFEZXNjcmlwdGlvbnMoKTsKLSAgICBzaXplX3QgbWVkaWFEZXNjcmlwdGlvbkluZGV4ID0gbm90
Rm91bmQ7Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1lZGlhRGVzY3JpcHRpb25zLnNp
emUoKTsgKytpKSB7Ci0gICAgICAgIGlmIChtZWRpYURlc2NyaXB0aW9uc1tpXS5taWQgPT0gbWlk
KSB7Ci0gICAgICAgICAgICBtZWRpYURlc2NyaXB0aW9uSW5kZXggPSBpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgQVNTRVJUKG1lZGlhRGVzY3JpcHRpb25JbmRl
eCAhPSBub3RGb3VuZCk7Ci0KLSAgICBTdHJpbmcgY2FuZGlkYXRlTGluZTsKLSAgICBhdXRvIHJl
c3VsdCA9IG1fc2RwUHJvY2Vzc29yLT5nZW5lcmF0ZUNhbmRpZGF0ZUxpbmUoY2FuZGlkYXRlLCBj
YW5kaWRhdGVMaW5lKTsKLSAgICBpZiAocmVzdWx0ICE9IFNEUFByb2Nlc3Nvcjo6UmVzdWx0OjpT
dWNjZXNzKSB7Ci0gICAgICAgIExPR19FUlJPUigiU0RQUHJvY2Vzc29yIGludGVybmFsIGVycm9y
Iik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtZWRpYURlc2NyaXB0aW9uc1ttZWRp
YURlc2NyaXB0aW9uSW5kZXhdLmFkZEljZUNhbmRpZGF0ZShXVEZNb3ZlKGNhbmRpZGF0ZSkpOwot
Ci0gICAgZmlyZUlDRUNhbmRpZGF0ZUV2ZW50KFJUQ0ljZUNhbmRpZGF0ZTo6Y3JlYXRlKGNhbmRp
ZGF0ZUxpbmUsIG1pZCwgbWVkaWFEZXNjcmlwdGlvbkluZGV4KSk7Ci19Ci0KLXZvaWQgTWVkaWFF
bmRwb2ludFBlZXJDb25uZWN0aW9uOjpkb25lR2F0aGVyaW5nQ2FuZGlkYXRlcyhjb25zdCBTdHJp
bmcmIG1pZCkKLXsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotCi0gICAgUnRwVHJhbnNj
ZWl2ZXJWZWN0b3IgdHJhbnNjZWl2ZXJzID0gUnRwVHJhbnNjZWl2ZXJWZWN0b3IobV9wZWVyQ29u
bmVjdGlvbi5nZXRUcmFuc2NlaXZlcnMoKSk7Ci0gICAgUlRDUnRwVHJhbnNjZWl2ZXIqIG5vdGlm
eWluZ1RyYW5zY2VpdmVyID0gbWF0Y2hUcmFuc2NlaXZlckJ5TWlkKHRyYW5zY2VpdmVycywgbWlk
KTsKLSAgICBBU1NFUlQobm90aWZ5aW5nVHJhbnNjZWl2ZXIpOwotCi0gICAgbm90aWZ5aW5nVHJh
bnNjZWl2ZXItPmljZVRyYW5zcG9ydCgpLnNldEdhdGhlcmluZ1N0YXRlKFJUQ0ljZUdhdGhlcmlu
Z1N0YXRlOjpDb21wbGV0ZSk7Ci0KLSAgICAvLyBEb24ndCBub3RpZnkgdGhlIHNjcmlwdCBpZiB0
aGVyZSBhcmUgdHJhbnNjZWl2ZXJzIHN0aWxsIGdhdGhlcmluZy4KLSAgICBSVENSdHBUcmFuc2Nl
aXZlciogc3RpbGxHYXRoZXJpbmdUcmFuc2NlaXZlciA9IG1hdGNoVHJhbnNjZWl2ZXIodHJhbnNj
ZWl2ZXJzLCBbXSAoUlRDUnRwVHJhbnNjZWl2ZXImIGN1cnJlbnQpIHsKLSAgICAgICAgcmV0dXJu
ICFjdXJyZW50LnN0b3BwZWQoKSAmJiAhY3VycmVudC5taWQoKS5pc051bGwoKQotICAgICAgICAg
ICAgJiYgY3VycmVudC5pY2VUcmFuc3BvcnQoKS5nYXRoZXJpbmdTdGF0ZSgpICE9IFJUQ0ljZUdh
dGhlcmluZ1N0YXRlOjpDb21wbGV0ZTsKLSAgICB9KTsKLSAgICBpZiAoIXN0aWxsR2F0aGVyaW5n
VHJhbnNjZWl2ZXIpCi0gICAgICAgIFBlZXJDb25uZWN0aW9uQmFja2VuZDo6ZG9uZUdhdGhlcmlu
Z0NhbmRpZGF0ZXMoKTsKLX0KLQotc3RhdGljIFJUQ0ljZUNvbm5lY3Rpb25TdGF0ZSBkZXJpdmVB
Z2dyZWdhdGVkSWNlQ29ubmVjdGlvblN0YXRlKGNvbnN0IFZlY3RvcjxSVENJY2VUcmFuc3BvcnRT
dGF0ZT4mIHN0YXRlcykKLXsKLSAgICB1bnNpZ25lZCBuZXdDb3VudCA9IDA7Ci0gICAgdW5zaWdu
ZWQgY2hlY2tpbmdDb3VudCA9IDA7Ci0gICAgdW5zaWduZWQgY29ubmVjdGVkQ291bnQgPSAwOwot
ICAgIHVuc2lnbmVkIGNvbXBsZXRlZENvdW50ID0gMDsKLSAgICB1bnNpZ25lZCBmYWlsZWRDb3Vu
dCA9IDA7Ci0gICAgdW5zaWduZWQgZGlzY29ubmVjdGVkQ291bnQgPSAwOwotICAgIHVuc2lnbmVk
IGNsb3NlZENvdW50ID0gMDsKLQotICAgIGZvciAoYXV0byYgc3RhdGUgOiBzdGF0ZXMpIHsKLSAg
ICAgICAgc3dpdGNoIChzdGF0ZSkgewotICAgICAgICBjYXNlIFJUQ0ljZVRyYW5zcG9ydFN0YXRl
OjpOZXc6Ci0gICAgICAgICAgICArK25ld0NvdW50OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgUlRDSWNlVHJhbnNwb3J0U3RhdGU6OkNoZWNraW5nOgotICAgICAgICAgICAgKytj
aGVja2luZ0NvdW50OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUlRDSWNlVHJh
bnNwb3J0U3RhdGU6OkNvbm5lY3RlZDoKLSAgICAgICAgICAgICsrY29ubmVjdGVkQ291bnQ7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBSVENJY2VUcmFuc3BvcnRTdGF0ZTo6Q29t
cGxldGVkOgotICAgICAgICAgICAgKytjb21wbGV0ZWRDb3VudDsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICBjYXNlIFJUQ0ljZVRyYW5zcG9ydFN0YXRlOjpGYWlsZWQ6Ci0gICAgICAgICAg
ICArK2ZhaWxlZENvdW50OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUlRDSWNl
VHJhbnNwb3J0U3RhdGU6OkRpc2Nvbm5lY3RlZDoKLSAgICAgICAgICAgICsrZGlzY29ubmVjdGVk
Q291bnQ7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBSVENJY2VUcmFuc3BvcnRT
dGF0ZTo6Q2xvc2VkOgotICAgICAgICAgICAgKytjbG9zZWRDb3VudDsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gVGhlIGFnZ3JlZ2F0ZWQgUlRDSWNlQ29u
bmVjdGlvblN0YXRlIGlzIGRlcml2ZWQgZnJvbSB0aGUgUlRDSWNlVHJhbnNwb3J0U3RhdGUgb2Yg
YWxsIFJUQ0ljZVRyYW5zcG9ydHMuCi0gICAgaWYgKChuZXdDb3VudCA+IDAgJiYgIWNoZWNraW5n
Q291bnQgJiYgIWZhaWxlZENvdW50ICYmICFkaXNjb25uZWN0ZWRDb3VudCkgfHwgKGNsb3NlZENv
dW50ID09IHN0YXRlcy5zaXplKCkpKQotICAgICAgICByZXR1cm4gUlRDSWNlQ29ubmVjdGlvblN0
YXRlOjpOZXc7Ci0KLSAgICBpZiAoY2hlY2tpbmdDb3VudCA+IDAgJiYgIWZhaWxlZENvdW50ICYm
ICFkaXNjb25uZWN0ZWRDb3VudCkKLSAgICAgICAgcmV0dXJuIFJUQ0ljZUNvbm5lY3Rpb25TdGF0
ZTo6Q2hlY2tpbmc7Ci0KLSAgICBpZiAoKGNvbm5lY3RlZENvdW50ICsgY29tcGxldGVkQ291bnQg
KyBjbG9zZWRDb3VudCkgPT0gc3RhdGVzLnNpemUoKSAmJiBjb25uZWN0ZWRDb3VudCA+IDApCi0g
ICAgICAgIHJldHVybiBSVENJY2VDb25uZWN0aW9uU3RhdGU6OkNvbm5lY3RlZDsKLQotICAgIGlm
ICgoY29tcGxldGVkQ291bnQgKyBjbG9zZWRDb3VudCkgPT0gc3RhdGVzLnNpemUoKSAmJiBjb21w
bGV0ZWRDb3VudCA+IDApCi0gICAgICAgIHJldHVybiBSVENJY2VDb25uZWN0aW9uU3RhdGU6OkNv
bXBsZXRlZDsKLQotICAgIGlmIChmYWlsZWRDb3VudCA+IDApCi0gICAgICAgIHJldHVybiBSVENJ
Y2VDb25uZWN0aW9uU3RhdGU6OkZhaWxlZDsKLQotICAgIGlmIChkaXNjb25uZWN0ZWRDb3VudCA+
IDApIC8vIEFueSBmYWlsZWQgY2F1Z2h0IGFib3ZlLgotICAgICAgICByZXR1cm4gUlRDSWNlQ29u
bmVjdGlvblN0YXRlOjpEaXNjb25uZWN0ZWQ7Ci0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
LSAgICByZXR1cm4gUlRDSWNlQ29ubmVjdGlvblN0YXRlOjpOZXc7Ci19Ci0KLXZvaWQgTWVkaWFF
bmRwb2ludFBlZXJDb25uZWN0aW9uOjppY2VUcmFuc3BvcnRTdGF0ZUNoYW5nZWQoY29uc3QgU3Ry
aW5nJiBtaWQsIFJUQ0ljZVRyYW5zcG9ydFN0YXRlIG1lZGlhRW5kcG9pbnRJY2VUcmFuc3BvcnRT
dGF0ZSkKLXsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotCi0gICAgUlRDUnRwVHJhbnNj
ZWl2ZXIqIHRyYW5zY2VpdmVyID0gbWF0Y2hUcmFuc2NlaXZlckJ5TWlkKG1fcGVlckNvbm5lY3Rp
b24uZ2V0VHJhbnNjZWl2ZXJzKCksIG1pZCk7Ci0gICAgQVNTRVJUKHRyYW5zY2VpdmVyKTsKLQot
ICAgIFJUQ0ljZVRyYW5zcG9ydFN0YXRlIHRyYW5zcG9ydFN0YXRlID0gc3RhdGljX2Nhc3Q8UlRD
SWNlVHJhbnNwb3J0U3RhdGU+KG1lZGlhRW5kcG9pbnRJY2VUcmFuc3BvcnRTdGF0ZSk7Ci0gICAg
dHJhbnNjZWl2ZXItPmljZVRyYW5zcG9ydCgpLnNldFN0YXRlKHRyYW5zcG9ydFN0YXRlKTsKLQot
ICAgIC8vIERldGVybWluZSBpZiB0aGUgc2NyaXB0IG5lZWRzIHRvIGJlIG5vdGlmaWVkLgotICAg
IFZlY3RvcjxSVENJY2VUcmFuc3BvcnRTdGF0ZT4gdHJhbnNwb3J0U3RhdGVzOwotICAgIHRyYW5z
cG9ydFN0YXRlcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG1fcGVlckNvbm5lY3Rpb24uZ2V0VHJh
bnNjZWl2ZXJzKCkuc2l6ZSgpKTsKLSAgICBmb3IgKGF1dG8mIHRyYW5zY2VpdmVyIDogbV9wZWVy
Q29ubmVjdGlvbi5nZXRUcmFuc2NlaXZlcnMoKSkKLSAgICAgICAgdHJhbnNwb3J0U3RhdGVzLnVu
Y2hlY2tlZEFwcGVuZCh0cmFuc2NlaXZlci0+aWNlVHJhbnNwb3J0KCkuc3RhdGUoKSk7Ci0KLSAg
ICBtX3BlZXJDb25uZWN0aW9uLnVwZGF0ZUljZUNvbm5lY3Rpb25TdGF0ZShkZXJpdmVBZ2dyZWdh
dGVkSWNlQ29ubmVjdGlvblN0YXRlKHRyYW5zcG9ydFN0YXRlcykpOwotfQotCi19IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoV0VCX1JUQykKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFFbmRwb2ludFBlZXJDb25uZWN0
aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhRW5kcG9pbnRQ
ZWVyQ29ubmVjdGlvbi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYjgxMzEyMWM5
MmNkMzFkNjU2NTdkMDVhMzQ5YjYyOTYzYzc5YmU1Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0v
TWVkaWFFbmRwb2ludFBlZXJDb25uZWN0aW9uLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMzMgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSwgMjAxNiBFcmljc3NvbiBBQi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIK
LSAqICAgIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUKLSAqICAgIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIE5laXRoZXIgdGhlIG5hbWUg
b2YgRXJpY3Nzb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0gKiAgICBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMK
LSAqICAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAot
ICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUoV0VCX1JUQykKLQotI2lu
Y2x1ZGUgIk1lZGlhRW5kcG9pbnQuaCIKLSNpbmNsdWRlICJQZWVyQ29ubmVjdGlvbkJhY2tlbmQu
aCIKLSNpbmNsdWRlICJSVENTZXNzaW9uRGVzY3JpcHRpb24uaCIKLSNpbmNsdWRlIDx3dGYvRnVu
Y3Rpb24uaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBNZWRpYUVuZHBvaW50U2Vz
c2lvbkRlc2NyaXB0aW9uOwotY2xhc3MgU0RQUHJvY2Vzc29yOwotCi1jbGFzcyBNZWRpYUVuZHBv
aW50UGVlckNvbm5lY3Rpb24gZmluYWwgOiBwdWJsaWMgUGVlckNvbm5lY3Rpb25CYWNrZW5kLCBw
dWJsaWMgTWVkaWFFbmRwb2ludENsaWVudCB7Ci1wdWJsaWM6Ci0gICAgV0VCQ09SRV9FWFBPUlQg
ZXhwbGljaXQgTWVkaWFFbmRwb2ludFBlZXJDb25uZWN0aW9uKFJUQ1BlZXJDb25uZWN0aW9uJik7
Ci0KLXByaXZhdGU6Ci0gICAgUmVmUHRyPFJUQ1Nlc3Npb25EZXNjcmlwdGlvbj4gbG9jYWxEZXNj
cmlwdGlvbigpIGNvbnN0IGZpbmFsOwotICAgIFJlZlB0cjxSVENTZXNzaW9uRGVzY3JpcHRpb24+
IGN1cnJlbnRMb2NhbERlc2NyaXB0aW9uKCkgY29uc3QgZmluYWw7Ci0gICAgUmVmUHRyPFJUQ1Nl
c3Npb25EZXNjcmlwdGlvbj4gcGVuZGluZ0xvY2FsRGVzY3JpcHRpb24oKSBjb25zdCBmaW5hbDsK
LQotICAgIFJlZlB0cjxSVENTZXNzaW9uRGVzY3JpcHRpb24+IHJlbW90ZURlc2NyaXB0aW9uKCkg
Y29uc3QgZmluYWw7Ci0gICAgUmVmUHRyPFJUQ1Nlc3Npb25EZXNjcmlwdGlvbj4gY3VycmVudFJl
bW90ZURlc2NyaXB0aW9uKCkgY29uc3QgZmluYWw7Ci0gICAgUmVmUHRyPFJUQ1Nlc3Npb25EZXNj
cmlwdGlvbj4gcGVuZGluZ1JlbW90ZURlc2NyaXB0aW9uKCkgY29uc3QgZmluYWw7Ci0KLSAgICBi
b29sIHNldENvbmZpZ3VyYXRpb24oTWVkaWFFbmRwb2ludENvbmZpZ3VyYXRpb24mJikgZmluYWw7
Ci0KLSAgICB2b2lkIGdldFN0YXRzKE1lZGlhU3RyZWFtVHJhY2sqLCBSZWY8RGVmZXJyZWRQcm9t
aXNlPiYmKSBmaW5hbDsKLQotICAgIFZlY3RvcjxSZWZQdHI8TWVkaWFTdHJlYW0+PiBnZXRSZW1v
dGVTdHJlYW1zKCkgY29uc3QgZmluYWw7Ci0KLSAgICBSZWY8UlRDUnRwUmVjZWl2ZXI+IGNyZWF0
ZVJlY2VpdmVyKGNvbnN0IFN0cmluZyYgdHJhbnNjZWl2ZXJNaWQsIGNvbnN0IFN0cmluZyYgdHJh
Y2tLaW5kLCBjb25zdCBTdHJpbmcmIHRyYWNrSWQpIGZpbmFsOwotICAgIHZvaWQgcmVwbGFjZVRy
YWNrKFJUQ1J0cFNlbmRlciYsIFJlZjxNZWRpYVN0cmVhbVRyYWNrPiYmLCBET01Qcm9taXNlRGVm
ZXJyZWQ8dm9pZD4mJikgZmluYWw7Ci0KLSAgICB2b2lkIGVtdWxhdGVQbGF0Zm9ybUV2ZW50KGNv
bnN0IFN0cmluZyYgYWN0aW9uKSBmaW5hbDsKLQotICAgIHZvaWQgcnVuVGFzayhGdW5jdGlvbjx2
b2lkICgpPiYmKTsKLSAgICB2b2lkIHN0YXJ0UnVubmluZ1Rhc2tzKCk7Ci0KLSAgICB2b2lkIGRv
Q3JlYXRlT2ZmZXIoUlRDT2ZmZXJPcHRpb25zJiYpIGZpbmFsOwotICAgIHZvaWQgZG9DcmVhdGVB
bnN3ZXIoUlRDQW5zd2VyT3B0aW9ucyYmKSBmaW5hbDsKLSAgICB2b2lkIGRvU2V0TG9jYWxEZXNj
cmlwdGlvbihSVENTZXNzaW9uRGVzY3JpcHRpb24mKSBmaW5hbDsKLSAgICB2b2lkIGRvU2V0UmVt
b3RlRGVzY3JpcHRpb24oUlRDU2Vzc2lvbkRlc2NyaXB0aW9uJikgZmluYWw7Ci0gICAgdm9pZCBk
b0FkZEljZUNhbmRpZGF0ZShSVENJY2VDYW5kaWRhdGUmKSBmaW5hbDsKLSAgICB2b2lkIGRvU3Rv
cCgpIGZpbmFsOwotCi0gICAgdm9pZCBjcmVhdGVPZmZlclRhc2soY29uc3QgUlRDT2ZmZXJPcHRp
b25zJik7Ci0gICAgdm9pZCBjcmVhdGVBbnN3ZXJUYXNrKGNvbnN0IFJUQ0Fuc3dlck9wdGlvbnMm
KTsKLQotICAgIHZvaWQgc2V0TG9jYWxEZXNjcmlwdGlvblRhc2soUmVmUHRyPFJUQ1Nlc3Npb25E
ZXNjcmlwdGlvbj4mJik7Ci0gICAgdm9pZCBzZXRSZW1vdGVEZXNjcmlwdGlvblRhc2soUmVmUHRy
PFJUQ1Nlc3Npb25EZXNjcmlwdGlvbj4mJik7Ci0KLSAgICB2b2lkIGFkZEljZUNhbmRpZGF0ZVRh
c2soUlRDSWNlQ2FuZGlkYXRlJik7Ci0KLSAgICB2b2lkIHJlcGxhY2VUcmFja1Rhc2soUlRDUnRw
U2VuZGVyJiwgY29uc3QgU3RyaW5nJiBtaWQsIFJlZjxNZWRpYVN0cmVhbVRyYWNrPiYmLCBET01Q
cm9taXNlRGVmZXJyZWQ8dm9pZD4mKTsKLQotICAgIGJvb2wgbG9jYWxEZXNjcmlwdGlvblR5cGVW
YWxpZEZvclN0YXRlKFJUQ1NkcFR5cGUpIGNvbnN0OwotICAgIGJvb2wgcmVtb3RlRGVzY3JpcHRp
b25UeXBlVmFsaWRGb3JTdGF0ZShSVENTZHBUeXBlKSBjb25zdDsKLQotICAgIE1lZGlhRW5kcG9p
bnRTZXNzaW9uRGVzY3JpcHRpb24qIGludGVybmFsTG9jYWxEZXNjcmlwdGlvbigpIGNvbnN0Owot
ICAgIE1lZGlhRW5kcG9pbnRTZXNzaW9uRGVzY3JpcHRpb24qIGludGVybmFsUmVtb3RlRGVzY3Jp
cHRpb24oKSBjb25zdDsKLSAgICBSZWZQdHI8UlRDU2Vzc2lvbkRlc2NyaXB0aW9uPiBjcmVhdGVS
VENTZXNzaW9uRGVzY3JpcHRpb24oTWVkaWFFbmRwb2ludFNlc3Npb25EZXNjcmlwdGlvbiopIGNv
bnN0OwotCi0gICAgLy8gTWVkaWFFbmRwb2ludENsaWVudAotICAgIHZvaWQgZ290RHRsc0Zpbmdl
cnByaW50KGNvbnN0IFN0cmluZyYgZmluZ2VycHJpbnQsIGNvbnN0IFN0cmluZyYgZmluZ2VycHJp
bnRGdW5jdGlvbikgZmluYWw7Ci0gICAgdm9pZCBnb3RJY2VDYW5kaWRhdGUoY29uc3QgU3RyaW5n
JiBtaWQsIEljZUNhbmRpZGF0ZSYmKSBmaW5hbDsKLSAgICB2b2lkIGRvbmVHYXRoZXJpbmdDYW5k
aWRhdGVzKGNvbnN0IFN0cmluZyYgbWlkKSBmaW5hbDsKLSAgICB2b2lkIGljZVRyYW5zcG9ydFN0
YXRlQ2hhbmdlZChjb25zdCBTdHJpbmcmIG1pZCwgUlRDSWNlVHJhbnNwb3J0U3RhdGUpIGZpbmFs
OwotCi0gICAgc3RkOjp1bmlxdWVfcHRyPFJUQ0RhdGFDaGFubmVsSGFuZGxlcj4gY3JlYXRlRGF0
YUNoYW5uZWxIYW5kbGVyKGNvbnN0IFN0cmluZyYsIGNvbnN0IFJUQ0RhdGFDaGFubmVsSW5pdCYp
IGZpbmFsOwotCi0gICAgc3RkOjp1bmlxdWVfcHRyPE1lZGlhRW5kcG9pbnQ+IG1fbWVkaWFFbmRw
b2ludDsKLQotICAgIEZ1bmN0aW9uPHZvaWQgKCk+IG1faW5pdGlhbERlZmVycmVkVGFzazsKLQot
ICAgIHN0ZDo6dW5pcXVlX3B0cjxTRFBQcm9jZXNzb3I+IG1fc2RwUHJvY2Vzc29yOwotCi0gICAg
VmVjdG9yPE1lZGlhUGF5bG9hZD4gbV9kZWZhdWx0QXVkaW9QYXlsb2FkczsKLSAgICBWZWN0b3I8
TWVkaWFQYXlsb2FkPiBtX2RlZmF1bHRWaWRlb1BheWxvYWRzOwotCi0gICAgU3RyaW5nIG1fY25h
bWU7Ci0gICAgU3RyaW5nIG1faWNlVWZyYWc7Ci0gICAgU3RyaW5nIG1faWNlUGFzc3dvcmQ7Ci0g
ICAgU3RyaW5nIG1fZHRsc0ZpbmdlcnByaW50OwotICAgIFN0cmluZyBtX2R0bHNGaW5nZXJwcmlu
dEZ1bmN0aW9uOwotICAgIHVuc2lnbmVkIG1fc2RwT2ZmZXJTZXNzaW9uVmVyc2lvbiB7IDAgfTsK
LSAgICB1bnNpZ25lZCBtX3NkcEFuc3dlclNlc3Npb25WZXJzaW9uIHsgMCB9OwotCi0gICAgUmVm
UHRyPE1lZGlhRW5kcG9pbnRTZXNzaW9uRGVzY3JpcHRpb24+IG1fY3VycmVudExvY2FsRGVzY3Jp
cHRpb247Ci0gICAgUmVmUHRyPE1lZGlhRW5kcG9pbnRTZXNzaW9uRGVzY3JpcHRpb24+IG1fcGVu
ZGluZ0xvY2FsRGVzY3JpcHRpb247Ci0KLSAgICBSZWZQdHI8TWVkaWFFbmRwb2ludFNlc3Npb25E
ZXNjcmlwdGlvbj4gbV9jdXJyZW50UmVtb3RlRGVzY3JpcHRpb247Ci0gICAgUmVmUHRyPE1lZGlh
RW5kcG9pbnRTZXNzaW9uRGVzY3JpcHRpb24+IG1fcGVuZGluZ1JlbW90ZURlc2NyaXB0aW9uOwot
Ci0gICAgSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxNZWRpYVN0cmVhbT4+IG1fcmVtb3RlU3RyZWFt
TWFwOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKFdF
Ql9SVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01l
ZGlhRW5kcG9pbnRTZXNzaW9uRGVzY3JpcHRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9tZWRpYXN0cmVhbS9NZWRpYUVuZHBvaW50U2Vzc2lvbkRlc2NyaXB0aW9uLmNwcApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWM2MDZmNTBjMmE5ZGQ3ZWU4MTIzY2JlMzM5Zjc0N2Y3
NDQwZmU3OS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhRW5kcG9pbnRTZXNzaW9uRGVz
Y3JpcHRpb24uY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTE3ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTUsIDIwMTYgRXJpY3Nzb24gQUIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiAgICBpbiB0aGUgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiAg
ICBkaXN0cmlidXRpb24uCi0gKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIEVyaWNzc29uIG5vciB0
aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0gKiAgICBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dO
RVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQot
ICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJNZWRpYUVuZHBvaW50U2Vzc2lvbkRlc2NyaXB0
aW9uLmgiCi0KLSNpZiBFTkFCTEUoV0VCX1JUQykKLQotI2luY2x1ZGUgIlNEUFByb2Nlc3Nvci5o
IgotI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci0KLSNkZWZpbmUgU1RSSU5HX0ZVTkNUSU9OKG5hbWUpIFwKLSAgICBzdGF0aWMgY29uc3QgU3Ry
aW5nJiBuYW1lIyNTdHJpbmcoKSBcCi0gICAgeyBcCi0gICAgICAgIHN0YXRpYyBOZXZlckRlc3Ry
b3llZDxjb25zdCBTdHJpbmc+IG5hbWUoTUFLRV9TVEFUSUNfU1RSSU5HX0lNUEwoI25hbWUpKTsg
XAotICAgICAgICByZXR1cm4gbmFtZTsgXAotICAgIH0KLQotU1RSSU5HX0ZVTkNUSU9OKG9mZmVy
KQotU1RSSU5HX0ZVTkNUSU9OKHByYW5zd2VyKQotU1RSSU5HX0ZVTkNUSU9OKGFuc3dlcikKLVNU
UklOR19GVU5DVElPTihyb2xsYmFjaykKLQotUmVmPE1lZGlhRW5kcG9pbnRTZXNzaW9uRGVzY3Jp
cHRpb24+IE1lZGlhRW5kcG9pbnRTZXNzaW9uRGVzY3JpcHRpb246OmNyZWF0ZShSVENTZHBUeXBl
IHR5cGUsIFJlZlB0cjxNZWRpYUVuZHBvaW50U2Vzc2lvbkNvbmZpZ3VyYXRpb24+JiYgY29uZmln
dXJhdGlvbikKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBNZWRpYUVuZHBvaW50U2Vzc2lv
bkRlc2NyaXB0aW9uKHR5cGUsIFdURk1vdmUoY29uZmlndXJhdGlvbiksIG51bGxwdHIpKTsKLX0K
LQotRXhjZXB0aW9uT3I8UmVmPE1lZGlhRW5kcG9pbnRTZXNzaW9uRGVzY3JpcHRpb24+PiBNZWRp
YUVuZHBvaW50U2Vzc2lvbkRlc2NyaXB0aW9uOjpjcmVhdGUoUmVmUHRyPFJUQ1Nlc3Npb25EZXNj
cmlwdGlvbj4mJiBydGNEZXNjcmlwdGlvbiwgY29uc3QgU0RQUHJvY2Vzc29yJiBzZHBQcm9jZXNz
b3IpCi17Ci0gICAgUmVmUHRyPE1lZGlhRW5kcG9pbnRTZXNzaW9uQ29uZmlndXJhdGlvbj4gY29u
ZmlndXJhdGlvbjsKLSAgICBhdXRvIHJlc3VsdCA9IHNkcFByb2Nlc3Nvci5wYXJzZShydGNEZXNj
cmlwdGlvbi0+c2RwKCksIGNvbmZpZ3VyYXRpb24pOwotICAgIGlmIChyZXN1bHQgIT0gU0RQUHJv
Y2Vzc29yOjpSZXN1bHQ6OlN1Y2Nlc3MpIHsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBTRFBQcm9j
ZXNzb3I6OlJlc3VsdDo6UGFyc2VFcnJvcikKLSAgICAgICAgICAgIHJldHVybiBFeGNlcHRpb24g
eyBJbnZhbGlkQWNjZXNzRXJyb3IsIEFTQ0lJTGl0ZXJhbCgiU0RQIGNvbnRlbnQgaXMgaW52YWxp
ZCIpIH07Ci0gICAgICAgIExPR19FUlJPUigiU0RQUHJvY2Vzc29yIGludGVybmFsIGVycm9yIik7
Ci0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBBYm9ydEVycm9yLCBBU0NJSUxpdGVyYWwoIklu
dGVybmFsIGVycm9yIikgfTsKLSAgICB9Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgTWVkaWFF
bmRwb2ludFNlc3Npb25EZXNjcmlwdGlvbihydGNEZXNjcmlwdGlvbi0+dHlwZSgpLCBXVEZNb3Zl
KGNvbmZpZ3VyYXRpb24pLCBXVEZNb3ZlKHJ0Y0Rlc2NyaXB0aW9uKSkpOwotfQotCi1SZWZQdHI8
UlRDU2Vzc2lvbkRlc2NyaXB0aW9uPiBNZWRpYUVuZHBvaW50U2Vzc2lvbkRlc2NyaXB0aW9uOjp0
b1JUQ1Nlc3Npb25EZXNjcmlwdGlvbihjb25zdCBTRFBQcm9jZXNzb3ImIHNkcFByb2Nlc3Nvcikg
Y29uc3QKLXsKLSAgICBTdHJpbmcgc2RwU3RyaW5nOwotICAgIFNEUFByb2Nlc3Nvcjo6UmVzdWx0
IHJlc3VsdCA9IHNkcFByb2Nlc3Nvci5nZW5lcmF0ZSgqbV9jb25maWd1cmF0aW9uLCBzZHBTdHJp
bmcpOwotICAgIGlmIChyZXN1bHQgIT0gU0RQUHJvY2Vzc29yOjpSZXN1bHQ6OlN1Y2Nlc3MpIHsK
LSAgICAgICAgTE9HX0VSUk9SKCJTRFBQcm9jZXNzb3IgaW50ZXJuYWwgZXJyb3IiKTsKLSAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAgLy8gSWYgdGhpcyBvYmplY3Qgd2FzIGNy
ZWF0ZWQgZnJvbSBhbiBSVENTZXNzaW9uRGVzY3JpcHRpb24sIHRvUlRDU2Vzc2lvbkRlc2NyaXB0
aW9uIHdpbGwgcmV0dXJuCi0gICAgLy8gdGhhdCBzYW1lIGluc3RhbmNlIGJ1dCB3aXRoIGFuIHVw
ZGF0ZWQgc2RwLiBJdCBpcyB1c2VkIGZvciBSVENQZWVyQ29ubmVjdGlvbidzIGRlc2NyaXB0aW9u
Ci0gICAgLy8gYXRyaWJ1dGVzIChlLmcuIGxvY2FsRGVzY3JpcHRpb24gYW5kIHBlbmRpbmdMb2Nh
bERlc2NyaXB0aW9uKS4KLSAgICBpZiAobV9ydGNEZXNjcmlwdGlvbikgewotICAgICAgICBtX3J0
Y0Rlc2NyaXB0aW9uLT5zZXRTZHAoV1RGTW92ZShzZHBTdHJpbmcpKTsKLSAgICAgICAgcmV0dXJu
IG1fcnRjRGVzY3JpcHRpb247Ci0gICAgfQotCi0gICAgcmV0dXJuIFJUQ1Nlc3Npb25EZXNjcmlw
dGlvbjo6Y3JlYXRlKG1fdHlwZSwgV1RGTW92ZShzZHBTdHJpbmcpKTsKLX0KLQotLy8gRklYTUU6
IHVuaWZ5IHdpdGggTGliV2ViUlRDTWVkaWFFbmRwb2ludCBzZXNzaW9uRGVzY3JpcHRpb25UeXBl
KCkuCi1jb25zdCBTdHJpbmcmIE1lZGlhRW5kcG9pbnRTZXNzaW9uRGVzY3JpcHRpb246OnR5cGVT
dHJpbmcoKSBjb25zdAotewotICAgIHN3aXRjaCAobV90eXBlKSB7Ci0gICAgY2FzZSBSVENTZHBU
eXBlOjpPZmZlcjoKLSAgICAgICAgcmV0dXJuIG9mZmVyU3RyaW5nKCk7Ci0gICAgY2FzZSBSVENT
ZHBUeXBlOjpQcmFuc3dlcjoKLSAgICAgICAgcmV0dXJuIHByYW5zd2VyU3RyaW5nKCk7Ci0gICAg
Y2FzZSBSVENTZHBUeXBlOjpBbnN3ZXI6Ci0gICAgICAgIHJldHVybiBhbnN3ZXJTdHJpbmcoKTsK
LSAgICBjYXNlIFJUQ1NkcFR5cGU6OlJvbGxiYWNrOgotICAgICAgICByZXR1cm4gcm9sbGJhY2tT
dHJpbmcoKTsKLSAgICB9Ci0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4g
ZW1wdHlTdHJpbmcoKTsKLX0KLQotYm9vbCBNZWRpYUVuZHBvaW50U2Vzc2lvbkRlc2NyaXB0aW9u
Ojppc0xhdGVyVGhhbihNZWRpYUVuZHBvaW50U2Vzc2lvbkRlc2NyaXB0aW9uKiBvdGhlcikgY29u
c3QKLXsKLSAgICByZXR1cm4gIW90aGVyIHx8IGNvbmZpZ3VyYXRpb24oKS0+c2Vzc2lvblZlcnNp
b24oKSA+IG90aGVyLT5jb25maWd1cmF0aW9uKCktPnNlc3Npb25WZXJzaW9uKCk7Ci19Ci0KLX0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShXRUJfUlRDKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYUVuZHBvaW50U2Vz
c2lvbkRlc2NyaXB0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01l
ZGlhRW5kcG9pbnRTZXNzaW9uRGVzY3JpcHRpb24uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMWQwNWM3MjkyY2VjMjkxZGU5ZjEzMTFmMTM4OGQzN2RiYWEzYzY3NS4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL21lZGlhc3RyZWFtL01lZGlhRW5kcG9pbnRTZXNzaW9uRGVzY3JpcHRpb24uaAorKysgL2Rl
di9udWxsCkBAIC0xLDc0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUsIDIwMTYg
RXJpY3Nzb24gQUIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIKLSAqICAgIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqICAgIGRpc3RyaWJ1dGlvbi4KLSAq
IDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgRXJpY3Nzb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29u
dHJpYnV0b3JzCi0gKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tIHRoaXMKLSAqICAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0g
KiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBF
TkFCTEUoV0VCX1JUQykKLQotI2luY2x1ZGUgIkV4Y2VwdGlvbk9yLmgiCi0jaW5jbHVkZSAiUlRD
U2Vzc2lvbkRlc2NyaXB0aW9uLmgiCi0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KLSNpbmNs
dWRlIDx3dGYvUmVmUHRyLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgTWVkaWFF
bmRwb2ludFNlc3Npb25Db25maWd1cmF0aW9uOwotY2xhc3MgU0RQUHJvY2Vzc29yOwotCi1jbGFz
cyBNZWRpYUVuZHBvaW50U2Vzc2lvbkRlc2NyaXB0aW9uIDogcHVibGljIFJlZkNvdW50ZWQ8TWVk
aWFFbmRwb2ludFNlc3Npb25EZXNjcmlwdGlvbj4gewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8
TWVkaWFFbmRwb2ludFNlc3Npb25EZXNjcmlwdGlvbj4gY3JlYXRlKFJUQ1NkcFR5cGUsIFJlZlB0
cjxNZWRpYUVuZHBvaW50U2Vzc2lvbkNvbmZpZ3VyYXRpb24+JiYpOwotICAgIHN0YXRpYyBFeGNl
cHRpb25PcjxSZWY8TWVkaWFFbmRwb2ludFNlc3Npb25EZXNjcmlwdGlvbj4+IGNyZWF0ZShSZWZQ
dHI8UlRDU2Vzc2lvbkRlc2NyaXB0aW9uPiYmLCBjb25zdCBTRFBQcm9jZXNzb3ImKTsKLSAgICB2
aXJ0dWFsIH5NZWRpYUVuZHBvaW50U2Vzc2lvbkRlc2NyaXB0aW9uKCkgeyB9IC8vIEZJWE1FOiBX
aHkgaXMgdGhpcyB2aXJ0dWFsPyBUaGVyZSBhcmUgbm8gb3RoZXIgdmlydHVhbCBmdW5jdGlvbnMg
aW4gdGhpcyBjbGFzcy4KLQotICAgIFJlZlB0cjxSVENTZXNzaW9uRGVzY3JpcHRpb24+IHRvUlRD
U2Vzc2lvbkRlc2NyaXB0aW9uKGNvbnN0IFNEUFByb2Nlc3NvciYpIGNvbnN0OwotCi0gICAgUlRD
U2RwVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9Ci0gICAgY29uc3QgU3RyaW5n
JiB0eXBlU3RyaW5nKCkgY29uc3Q7Ci0gICAgTWVkaWFFbmRwb2ludFNlc3Npb25Db25maWd1cmF0
aW9uKiBjb25maWd1cmF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9jb25maWd1cmF0aW9uLmdldCgp
OyB9Ci0KLSAgICBib29sIGlzTGF0ZXJUaGFuKE1lZGlhRW5kcG9pbnRTZXNzaW9uRGVzY3JpcHRp
b24qIG90aGVyKSBjb25zdDsKLQotcHJpdmF0ZToKLSAgICBNZWRpYUVuZHBvaW50U2Vzc2lvbkRl
c2NyaXB0aW9uKFJUQ1NkcFR5cGUgdHlwZSwgUmVmUHRyPE1lZGlhRW5kcG9pbnRTZXNzaW9uQ29u
ZmlndXJhdGlvbj4mJiBjb25maWd1cmF0aW9uLCBSZWZQdHI8UlRDU2Vzc2lvbkRlc2NyaXB0aW9u
PiYmIHJ0Y0Rlc2NyaXB0aW9uKQotICAgICAgICA6IG1fdHlwZSh0eXBlKQotICAgICAgICAsIG1f
Y29uZmlndXJhdGlvbihjb25maWd1cmF0aW9uKQotICAgICAgICAsIG1fcnRjRGVzY3JpcHRpb24o
V1RGTW92ZShydGNEZXNjcmlwdGlvbikpCi0gICAgeyB9Ci0KLSAgICBSVENTZHBUeXBlIG1fdHlw
ZTsKLSAgICBSZWZQdHI8TWVkaWFFbmRwb2ludFNlc3Npb25Db25maWd1cmF0aW9uPiBtX2NvbmZp
Z3VyYXRpb247Ci0KLSAgICBSZWZQdHI8UlRDU2Vzc2lvbkRlc2NyaXB0aW9uPiBtX3J0Y0Rlc2Ny
aXB0aW9uOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxF
KFdFQl9SVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFt
L1BlZXJDb25uZWN0aW9uQmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlh
c3RyZWFtL1BlZXJDb25uZWN0aW9uQmFja2VuZC5jcHAKaW5kZXggM2YyYjk1ZjExOTdlMjNiZTM4
M2E0ZjY5MTU5YzJmMGU5OGI1MmNjOS4uMmFkODRiZDk4MjU4ZjdjY2Y2ZTU5Y2U1YTIyNjJkNjFl
YTUzMGU1OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9Q
ZWVyQ29ubmVjdGlvbkJhY2tlbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVk
aWFzdHJlYW0vUGVlckNvbm5lY3Rpb25CYWNrZW5kLmNwcApAQCAtNDYsNiArNDYsMTUgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2UgUEFMOwogCisjaWYgIVVTRShMSUJX
RUJSVEMpCitzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPFBlZXJDb25uZWN0aW9uQmFja2VuZD4gY3Jl
YXRlTm9QZWVyQ29ubmVjdGlvbkJhY2tlbmQoUlRDUGVlckNvbm5lY3Rpb24mKQoreworICAgIHJl
dHVybiBudWxscHRyOworfQorCitDcmVhdGVQZWVyQ29ubmVjdGlvbkJhY2tlbmQgUGVlckNvbm5l
Y3Rpb25CYWNrZW5kOjpjcmVhdGUgPSBjcmVhdGVOb1BlZXJDb25uZWN0aW9uQmFja2VuZDsKKyNl
bmRpZgorCiBQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OlBlZXJDb25uZWN0aW9uQmFja2VuZChSVENQ
ZWVyQ29ubmVjdGlvbiYgcGVlckNvbm5lY3Rpb24pCiAgICAgOiBtX3BlZXJDb25uZWN0aW9uKHBl
ZXJDb25uZWN0aW9uKQogI2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9TRFBQcm9jZXNzb3IuY3BwIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9TRFBQcm9jZXNzb3IuY3BwCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCA3MTVjZjJmMjg4OGZmNzQwN2U1YzY1ZGMyOGIzYmNkZDViMjc4
NTEyLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vU0RQUHJvY2Vzc29yLmNwcAorKysgL2Rldi9u
dWxsCkBAIC0xLDU2MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE1LCAyMDE2IEVy
aWNzc29uIEFCLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIw
MTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiAgICBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiAgICBkaXN0cmlidXRpb24uCi0g
KiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIEVyaWNzc29uIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNv
bnRyaWJ1dG9ycwotICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0gKiAgICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAot
ICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIK
LQotI2lmIEVOQUJMRShXRUJfUlRDKQotI2luY2x1ZGUgIlNEUFByb2Nlc3Nvci5oIgotCi0jaW5j
bHVkZSAiQ29tbW9uVk0uaCIKLSNpbmNsdWRlICJEb2N1bWVudC5oIgotI2luY2x1ZGUgIkZyYW1l
LmgiCi0jaW5jbHVkZSAiU0RQUHJvY2Vzc29yU2NyaXB0UmVzb3VyY2UuaCIKLSNpbmNsdWRlICJT
Y3JpcHRDb250cm9sbGVyLmgiCi0jaW5jbHVkZSAiU2NyaXB0U291cmNlQ29kZS5oIgotI2luY2x1
ZGUgImluc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaCIKLSNpbmNsdWRlIDxiaW5kaW5ncy9TY3Jp
cHRPYmplY3QuaD4KLSNpbmNsdWRlIDxydW50aW1lL0NhdGNoU2NvcGUuaD4KLSNpbmNsdWRlIDx3
dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotbmFt
ZXNwYWNlIFdlYkNvcmUgewotCi0jZGVmaW5lIFNUUklOR19GVU5DVElPTihuYW1lKSBcCi0gICAg
c3RhdGljIGNvbnN0IFN0cmluZyYgbmFtZSMjU3RyaW5nKCkgXAotICAgIHsgXAotICAgICAgICBz
dGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgU3RyaW5nPiBuYW1lKE1BS0VfU1RBVElDX1NUUklO
R19JTVBMKCNuYW1lKSk7IFwKLSAgICAgICAgcmV0dXJuIG5hbWU7IFwKLSAgICB9Ci0KLVNUUklO
R19GVU5DVElPTihhZGRyZXNzKQotU1RSSU5HX0ZVTkNUSU9OKGFwdCkKLVNUUklOR19GVU5DVElP
TihidW5kbGVQb2xpY3kpCi1TVFJJTkdfRlVOQ1RJT04oY2FuZGlkYXRlcykKLVNUUklOR19GVU5D
VElPTihjY21maXIpCi1TVFJJTkdfRlVOQ1RJT04oY2hhbm5lbHMpCi1TVFJJTkdfRlVOQ1RJT04o
Y2xvY2tSYXRlKQotU1RSSU5HX0ZVTkNUSU9OKGNuYW1lKQotU1RSSU5HX0ZVTkNUSU9OKGNvbXBv
bmVudElkKQotU1RSSU5HX0ZVTkNUSU9OKGR0bHMpCi1TVFJJTkdfRlVOQ1RJT04oZW5jb2RpbmdO
YW1lKQotU1RSSU5HX0ZVTkNUSU9OKGZpbmdlcnByaW50KQotU1RSSU5HX0ZVTkNUSU9OKGZpbmdl
cnByaW50SGFzaEZ1bmN0aW9uKQotU1RSSU5HX0ZVTkNUSU9OKGZvdW5kYXRpb24pCi1TVFJJTkdf
RlVOQ1RJT04oaWNlKQotU1RSSU5HX0ZVTkNUSU9OKG1lZGlhRGVzY3JpcHRpb25zKQotU1RSSU5H
X0ZVTkNUSU9OKG1lZGlhU3RyZWFtSWQpCi1TVFJJTkdfRlVOQ1RJT04obWVkaWFTdHJlYW1UcmFj
a0lkKQotU1RSSU5HX0ZVTkNUSU9OKG1pZCkKLVNUUklOR19GVU5DVElPTihtb2RlKQotU1RSSU5H
X0ZVTkNUSU9OKG11eCkKLVNUUklOR19GVU5DVElPTihuYWNrKQotU1RSSU5HX0ZVTkNUSU9OKG5h
Y2twbGkpCi1TVFJJTkdfRlVOQ1RJT04ob3JpZ2luYXRvcikKLVNUUklOR19GVU5DVElPTihwYWNr
ZXRpemF0aW9uTW9kZSkKLVNUUklOR19GVU5DVElPTihwYXJhbWV0ZXJzKQotU1RSSU5HX0ZVTkNU
SU9OKHBhc3N3b3JkKQotU1RSSU5HX0ZVTkNUSU9OKHBheWxvYWRzKQotU1RSSU5HX0ZVTkNUSU9O
KHBvcnQpCi1TVFJJTkdfRlVOQ1RJT04ocHJpb3JpdHkpCi1TVFJJTkdfRlVOQ1RJT04ocmVsYXRl
ZEFkZHJlc3MpCi1TVFJJTkdfRlVOQ1RJT04ocmVsYXRlZFBvcnQpCi1TVFJJTkdfRlVOQ1RJT04o
cnRjcCkKLVNUUklOR19GVU5DVElPTihydGNwQWRkcmVzcykKLVNUUklOR19GVU5DVElPTihydGNw
UG9ydCkKLVNUUklOR19GVU5DVElPTihydHhUaW1lKQotU1RSSU5HX0ZVTkNUSU9OKHNlc3Npb25J
ZCkKLVNUUklOR19GVU5DVElPTihzZXNzaW9uVmVyc2lvbikKLVNUUklOR19GVU5DVElPTihzZXR1
cCkKLVNUUklOR19GVU5DVElPTihzc3JjcykKLVNUUklOR19GVU5DVElPTih0Y3BUeXBlKQotU1RS
SU5HX0ZVTkNUSU9OKHRyYW5zcG9ydCkKLVNUUklOR19GVU5DVElPTih0eXBlKQotU1RSSU5HX0ZV
TkNUSU9OKHVmcmFnKQotCi1TRFBQcm9jZXNzb3I6OlNEUFByb2Nlc3NvcihTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiBjb250ZXh0KQotICAgIDogQ29udGV4dERlc3RydWN0aW9uT2JzZXJ2ZXIoY29u
dGV4dCkKLXsKLX0KLQotLy8gTm90ZSB0aGF0IE1lZGlhRW5kcG9pbnRTZXNzaW9uQ29uZmlndXJh
dGlvbiBpcyBhICJmbGF0dGVyIiBzdHJ1Y3R1cmUgdGhhdCB0aGUgSlNPTiByZXByZXNlbnRhdGlv
bi4gRm9yCi0vLyBleGFtcGxlLCB0aGUgSlNPTiByZXByZXNlbnRhdGlvbiBoYXMgYW4gImljZSIg
b2JqZWN0IHdoaWNoIGNvbGxlY3RzIGEgc2V0IG9mIHByb3BlcnRpZXMgdW5kZXIgYQotLy8gbmFt
ZXNwYWNlLiBNZWRpYUVuZHBvaW50U2Vzc2lvbkNvbmZpZ3VyYXRpb24gaGFzICJpY2UiLXByZWZp
eGVzIG9uIHRoZSBjb3JyZXNwb25kaW5nIHByb3BlcnRpZXMuCi0KLXN0YXRpYyBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiBjcmVhdGVDYW5kaWRhdGVPYmplY3QoY29uc3QgSWNlQ2FuZGlkYXRlJiBj
YW5kaWRhdGUpCi17Ci0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gY2FuZGlkYXRlT2JqZWN0
ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKLQotICAgIGNhbmRpZGF0ZU9iamVjdC0+c2V0
U3RyaW5nKHR5cGVTdHJpbmcoKSwgY2FuZGlkYXRlLnR5cGUpOwotICAgIGNhbmRpZGF0ZU9iamVj
dC0+c2V0U3RyaW5nKGZvdW5kYXRpb25TdHJpbmcoKSwgY2FuZGlkYXRlLmZvdW5kYXRpb24pOwot
ICAgIGNhbmRpZGF0ZU9iamVjdC0+c2V0SW50ZWdlcihjb21wb25lbnRJZFN0cmluZygpLCBjYW5k
aWRhdGUuY29tcG9uZW50SWQpOwotICAgIGNhbmRpZGF0ZU9iamVjdC0+c2V0U3RyaW5nKHRyYW5z
cG9ydFN0cmluZygpLCBjYW5kaWRhdGUudHJhbnNwb3J0KTsKLSAgICBjYW5kaWRhdGVPYmplY3Qt
PnNldEludGVnZXIocHJpb3JpdHlTdHJpbmcoKSwgY2FuZGlkYXRlLnByaW9yaXR5KTsKLSAgICBj
YW5kaWRhdGVPYmplY3QtPnNldFN0cmluZyhhZGRyZXNzU3RyaW5nKCksIGNhbmRpZGF0ZS5hZGRy
ZXNzKTsKLSAgICBjYW5kaWRhdGVPYmplY3QtPnNldEludGVnZXIocG9ydFN0cmluZygpLCBjYW5k
aWRhdGUucG9ydCk7Ci0gICAgaWYgKCFjYW5kaWRhdGUudGNwVHlwZS5pc0VtcHR5KCkpCi0gICAg
ICAgIGNhbmRpZGF0ZU9iamVjdC0+c2V0U3RyaW5nKHRjcFR5cGVTdHJpbmcoKSwgY2FuZGlkYXRl
LnRjcFR5cGUpOwotICAgIGlmIChjYW5kaWRhdGUudHlwZS5jb252ZXJ0VG9BU0NJSVVwcGVyY2Fz
ZSgpICE9ICJIT1NUIikgewotICAgICAgICBjYW5kaWRhdGVPYmplY3QtPnNldFN0cmluZyhyZWxh
dGVkQWRkcmVzc1N0cmluZygpLCBjYW5kaWRhdGUucmVsYXRlZEFkZHJlc3MpOwotICAgICAgICBj
YW5kaWRhdGVPYmplY3QtPnNldEludGVnZXIocmVsYXRlZFBvcnRTdHJpbmcoKSwgY2FuZGlkYXRl
LnJlbGF0ZWRQb3J0KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gY2FuZGlkYXRlT2JqZWN0OwotfQot
Ci1zdGF0aWMgSWNlQ2FuZGlkYXRlIGNyZWF0ZUNhbmRpZGF0ZShjb25zdCBJbnNwZWN0b3JPYmpl
Y3QmIGNhbmRpZGF0ZU9iamVjdCkKLXsKLSAgICBJY2VDYW5kaWRhdGUgY2FuZGlkYXRlOwotICAg
IFN0cmluZyBzdHJpbmdWYWx1ZTsKLSAgICB1bnNpZ25lZCBpbnRWYWx1ZTsKLQotICAgIGlmIChj
YW5kaWRhdGVPYmplY3QuZ2V0U3RyaW5nKHR5cGVTdHJpbmcoKSwgc3RyaW5nVmFsdWUpKQotICAg
ICAgICBjYW5kaWRhdGUudHlwZSA9IHN0cmluZ1ZhbHVlOwotCi0gICAgaWYgKGNhbmRpZGF0ZU9i
amVjdC5nZXRTdHJpbmcoZm91bmRhdGlvblN0cmluZygpLCBzdHJpbmdWYWx1ZSkpCi0gICAgICAg
IGNhbmRpZGF0ZS5mb3VuZGF0aW9uID0gc3RyaW5nVmFsdWU7Ci0KLSAgICBpZiAoY2FuZGlkYXRl
T2JqZWN0LmdldEludGVnZXIoY29tcG9uZW50SWRTdHJpbmcoKSwgaW50VmFsdWUpKQotICAgICAg
ICBjYW5kaWRhdGUuY29tcG9uZW50SWQgPSBpbnRWYWx1ZTsKLQotICAgIGlmIChjYW5kaWRhdGVP
YmplY3QuZ2V0U3RyaW5nKHRyYW5zcG9ydFN0cmluZygpLCBzdHJpbmdWYWx1ZSkpCi0gICAgICAg
IGNhbmRpZGF0ZS50cmFuc3BvcnQgPSBzdHJpbmdWYWx1ZTsKLQotICAgIGlmIChjYW5kaWRhdGVP
YmplY3QuZ2V0SW50ZWdlcihwcmlvcml0eVN0cmluZygpLCBpbnRWYWx1ZSkpCi0gICAgICAgIGNh
bmRpZGF0ZS5wcmlvcml0eSA9IGludFZhbHVlOwotCi0gICAgaWYgKGNhbmRpZGF0ZU9iamVjdC5n
ZXRTdHJpbmcoYWRkcmVzc1N0cmluZygpLCBzdHJpbmdWYWx1ZSkpCi0gICAgICAgIGNhbmRpZGF0
ZS5hZGRyZXNzID0gc3RyaW5nVmFsdWU7Ci0KLSAgICBpZiAoY2FuZGlkYXRlT2JqZWN0LmdldElu
dGVnZXIocG9ydFN0cmluZygpLCBpbnRWYWx1ZSkpCi0gICAgICAgIGNhbmRpZGF0ZS5wb3J0ID0g
aW50VmFsdWU7Ci0KLSAgICBpZiAoY2FuZGlkYXRlT2JqZWN0LmdldFN0cmluZyh0Y3BUeXBlU3Ry
aW5nKCksIHN0cmluZ1ZhbHVlKSkKLSAgICAgICAgY2FuZGlkYXRlLnRjcFR5cGUgPSBzdHJpbmdW
YWx1ZTsKLQotICAgIGlmIChjYW5kaWRhdGVPYmplY3QuZ2V0U3RyaW5nKHJlbGF0ZWRBZGRyZXNz
U3RyaW5nKCksIHN0cmluZ1ZhbHVlKSkKLSAgICAgICAgY2FuZGlkYXRlLnJlbGF0ZWRBZGRyZXNz
ID0gc3RyaW5nVmFsdWU7Ci0KLSAgICBpZiAoY2FuZGlkYXRlT2JqZWN0LmdldEludGVnZXIocmVs
YXRlZFBvcnRTdHJpbmcoKSwgaW50VmFsdWUpKQotICAgICAgICBjYW5kaWRhdGUucmVsYXRlZFBv
cnQgPSBpbnRWYWx1ZTsKLQotICAgIHJldHVybiBjYW5kaWRhdGU7Ci19Ci0KLXN0YXRpYyBSZWZQ
dHI8TWVkaWFFbmRwb2ludFNlc3Npb25Db25maWd1cmF0aW9uPiBjb25maWd1cmF0aW9uRnJvbUpT
T04oY29uc3QgU3RyaW5nJiBqc29uKQotewotICAgIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gdmFs
dWU7Ci0gICAgaWYgKCFJbnNwZWN0b3JWYWx1ZTo6cGFyc2VKU09OKGpzb24sIHZhbHVlKSkKLSAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBvYmpl
Y3Q7Ci0gICAgaWYgKCF2YWx1ZS0+YXNPYmplY3Qob2JqZWN0KSkKLSAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0KLSAgICBSZWZQdHI8TWVkaWFFbmRwb2ludFNlc3Npb25Db25maWd1cmF0aW9uPiBj
b25maWd1cmF0aW9uID0gTWVkaWFFbmRwb2ludFNlc3Npb25Db25maWd1cmF0aW9uOjpjcmVhdGUo
KTsKLQotICAgIFN0cmluZyBzdHJpbmdWYWx1ZTsKLSAgICB1bnNpZ25lZCBpbnRWYWx1ZTsKLSAg
ICBib29sIGJvb2xWYWx1ZTsKLQotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG9yaWdpbmF0
b3JPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwotICAgIGlmIChvYmplY3QtPmdl
dE9iamVjdChvcmlnaW5hdG9yU3RyaW5nKCksIG9yaWdpbmF0b3JPYmplY3QpKSB7Ci0gICAgICAg
IGlmIChvcmlnaW5hdG9yT2JqZWN0LT5nZXRTdHJpbmcoc2Vzc2lvbklkU3RyaW5nKCksIHN0cmlu
Z1ZhbHVlKSkKLSAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24tPnNldFNlc3Npb25JZChzdHJpbmdW
YWx1ZS50b0ludDY0KCkpOwotICAgICAgICBpZiAob3JpZ2luYXRvck9iamVjdC0+Z2V0SW50ZWdl
cihzZXNzaW9uVmVyc2lvblN0cmluZygpLCBpbnRWYWx1ZSkpCi0gICAgICAgICAgICBjb25maWd1
cmF0aW9uLT5zZXRTZXNzaW9uVmVyc2lvbihpbnRWYWx1ZSk7Ci0gICAgfQotCi0gICAgUmVmUHRy
PEluc3BlY3RvckFycmF5PiBtZWRpYURlc2NyaXB0aW9uc0FycmF5ID0gSW5zcGVjdG9yQXJyYXk6
OmNyZWF0ZSgpOwotICAgIG9iamVjdC0+Z2V0QXJyYXkobWVkaWFEZXNjcmlwdGlvbnNTdHJpbmco
KSwgbWVkaWFEZXNjcmlwdGlvbnNBcnJheSk7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbWVkaWFEZXNjcmlwdGlvbnNBcnJheS0+bGVuZ3RoKCk7ICsraSkgewotICAgICAgICBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiBtZWRpYURlc2NyaXB0aW9uT2JqZWN0ID0gSW5zcGVjdG9yT2Jq
ZWN0OjpjcmVhdGUoKTsKLSAgICAgICAgbWVkaWFEZXNjcmlwdGlvbnNBcnJheS0+Z2V0KGkpLT5h
c09iamVjdChtZWRpYURlc2NyaXB0aW9uT2JqZWN0KTsKLQotICAgICAgICBQZWVyTWVkaWFEZXNj
cmlwdGlvbiBtZWRpYURlc2NyaXB0aW9uOwotCi0gICAgICAgIGlmIChtZWRpYURlc2NyaXB0aW9u
T2JqZWN0LT5nZXRTdHJpbmcodHlwZVN0cmluZygpLCBzdHJpbmdWYWx1ZSkpCi0gICAgICAgICAg
ICBtZWRpYURlc2NyaXB0aW9uLnR5cGUgPSBzdHJpbmdWYWx1ZTsKLQotICAgICAgICBpZiAobWVk
aWFEZXNjcmlwdGlvbk9iamVjdC0+Z2V0SW50ZWdlcihwb3J0U3RyaW5nKCksIGludFZhbHVlKSkK
LSAgICAgICAgICAgIG1lZGlhRGVzY3JpcHRpb24ucG9ydCA9IGludFZhbHVlOwotCi0gICAgICAg
IGlmIChtZWRpYURlc2NyaXB0aW9uT2JqZWN0LT5nZXRTdHJpbmcoYWRkcmVzc1N0cmluZygpLCBz
dHJpbmdWYWx1ZSkpCi0gICAgICAgICAgICBtZWRpYURlc2NyaXB0aW9uLmFkZHJlc3MgPSBzdHJp
bmdWYWx1ZTsKLQotICAgICAgICBpZiAobWVkaWFEZXNjcmlwdGlvbk9iamVjdC0+Z2V0U3RyaW5n
KG1vZGVTdHJpbmcoKSwgc3RyaW5nVmFsdWUpKQotICAgICAgICAgICAgbWVkaWFEZXNjcmlwdGlv
bi5tb2RlID0gc3RyaW5nVmFsdWU7Ci0KLSAgICAgICAgaWYgKG1lZGlhRGVzY3JpcHRpb25PYmpl
Y3QtPmdldFN0cmluZyhtaWRTdHJpbmcoKSwgc3RyaW5nVmFsdWUpKQotICAgICAgICAgICAgbWVk
aWFEZXNjcmlwdGlvbi5taWQgPSBzdHJpbmdWYWx1ZTsKLQotICAgICAgICBSZWZQdHI8SW5zcGVj
dG9yQXJyYXk+IHBheWxvYWRzQXJyYXkgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7Ci0gICAg
ICAgIG1lZGlhRGVzY3JpcHRpb25PYmplY3QtPmdldEFycmF5KHBheWxvYWRzU3RyaW5nKCksIHBh
eWxvYWRzQXJyYXkpOwotCi0gICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGogPCBwYXlsb2Fk
c0FycmF5LT5sZW5ndGgoKTsgKytqKSB7Ci0gICAgICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiBwYXlsb2Fkc09iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgICAg
ICAgICBwYXlsb2Fkc0FycmF5LT5nZXQoaiktPmFzT2JqZWN0KHBheWxvYWRzT2JqZWN0KTsKLQot
ICAgICAgICAgICAgTWVkaWFQYXlsb2FkIHBheWxvYWQ7Ci0KLSAgICAgICAgICAgIGlmIChwYXls
b2Fkc09iamVjdC0+Z2V0SW50ZWdlcih0eXBlU3RyaW5nKCksIGludFZhbHVlKSkKLSAgICAgICAg
ICAgICAgICBwYXlsb2FkLnR5cGUgPSBpbnRWYWx1ZTsKLQotICAgICAgICAgICAgaWYgKHBheWxv
YWRzT2JqZWN0LT5nZXRTdHJpbmcoZW5jb2RpbmdOYW1lU3RyaW5nKCksIHN0cmluZ1ZhbHVlKSkK
LSAgICAgICAgICAgICAgICBwYXlsb2FkLmVuY29kaW5nTmFtZSA9IHN0cmluZ1ZhbHVlOwotCi0g
ICAgICAgICAgICBpZiAocGF5bG9hZHNPYmplY3QtPmdldEludGVnZXIoY2xvY2tSYXRlU3RyaW5n
KCksIGludFZhbHVlKSkKLSAgICAgICAgICAgICAgICBwYXlsb2FkLmNsb2NrUmF0ZSA9IGludFZh
bHVlOwotCi0gICAgICAgICAgICBpZiAocGF5bG9hZHNPYmplY3QtPmdldEludGVnZXIoY2hhbm5l
bHNTdHJpbmcoKSwgaW50VmFsdWUpKQotICAgICAgICAgICAgICAgIHBheWxvYWQuY2hhbm5lbHMg
PSBpbnRWYWx1ZTsKLQotICAgICAgICAgICAgaWYgKHBheWxvYWRzT2JqZWN0LT5nZXRCb29sZWFu
KGNjbWZpclN0cmluZygpLCBib29sVmFsdWUpKQotICAgICAgICAgICAgICAgIHBheWxvYWQuY2Nt
ZmlyID0gYm9vbFZhbHVlOwotCi0gICAgICAgICAgICBpZiAocGF5bG9hZHNPYmplY3QtPmdldEJv
b2xlYW4obmFja3BsaVN0cmluZygpLCBib29sVmFsdWUpKQotICAgICAgICAgICAgICAgIHBheWxv
YWQubmFja3BsaSA9IGJvb2xWYWx1ZTsKLQotICAgICAgICAgICAgaWYgKHBheWxvYWRzT2JqZWN0
LT5nZXRCb29sZWFuKG5hY2tTdHJpbmcoKSwgYm9vbFZhbHVlKSkKLSAgICAgICAgICAgICAgICBw
YXlsb2FkLm5hY2sgPSBib29sVmFsdWU7Ci0KLSAgICAgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IHBhcmFtZXRlcnNPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwotICAg
ICAgICAgICAgaWYgKHBheWxvYWRzT2JqZWN0LT5nZXRPYmplY3QocGFyYW1ldGVyc1N0cmluZygp
LCBwYXJhbWV0ZXJzT2JqZWN0KSkgewotICAgICAgICAgICAgICAgIGlmIChwYXJhbWV0ZXJzT2Jq
ZWN0LT5nZXRJbnRlZ2VyKHBhY2tldGl6YXRpb25Nb2RlU3RyaW5nKCksIGludFZhbHVlKSkKLSAg
ICAgICAgICAgICAgICAgICAgcGF5bG9hZC5hZGRQYXJhbWV0ZXIoInBhY2tldGl6YXRpb25Nb2Rl
IiwgaW50VmFsdWUpOwotCi0gICAgICAgICAgICAgICAgaWYgKHBhcmFtZXRlcnNPYmplY3QtPmdl
dEludGVnZXIoYXB0U3RyaW5nKCksIGludFZhbHVlKSkKLSAgICAgICAgICAgICAgICAgICAgcGF5
bG9hZC5hZGRQYXJhbWV0ZXIoImFwdCIsIGludFZhbHVlKTsKLQotICAgICAgICAgICAgICAgIGlm
IChwYXJhbWV0ZXJzT2JqZWN0LT5nZXRJbnRlZ2VyKHJ0eFRpbWVTdHJpbmcoKSwgaW50VmFsdWUp
KQotICAgICAgICAgICAgICAgICAgICBwYXlsb2FkLmFkZFBhcmFtZXRlcigicnR4VGltZSIsIGlu
dFZhbHVlKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgbWVkaWFEZXNjcmlwdGlvbi5h
ZGRQYXlsb2FkKFdURk1vdmUocGF5bG9hZCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gcnRjcE9iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7
Ci0gICAgICAgIGlmIChtZWRpYURlc2NyaXB0aW9uT2JqZWN0LT5nZXRPYmplY3QocnRjcFN0cmlu
ZygpLCBydGNwT2JqZWN0KSkgewotICAgICAgICAgICAgaWYgKHJ0Y3BPYmplY3QtPmdldEJvb2xl
YW4obXV4U3RyaW5nKCksIGJvb2xWYWx1ZSkpCi0gICAgICAgICAgICAgICAgbWVkaWFEZXNjcmlw
dGlvbi5ydGNwTXV4ID0gYm9vbFZhbHVlOwotCi0gICAgICAgICAgICBpZiAocnRjcE9iamVjdC0+
Z2V0U3RyaW5nKHJ0Y3BBZGRyZXNzU3RyaW5nKCksIHN0cmluZ1ZhbHVlKSkKLSAgICAgICAgICAg
ICAgICBtZWRpYURlc2NyaXB0aW9uLnJ0Y3BBZGRyZXNzID0gc3RyaW5nVmFsdWU7Ci0KLSAgICAg
ICAgICAgIGlmIChydGNwT2JqZWN0LT5nZXRJbnRlZ2VyKHJ0Y3BQb3J0U3RyaW5nKCksIGludFZh
bHVlKSkKLSAgICAgICAgICAgICAgICBtZWRpYURlc2NyaXB0aW9uLnJ0Y3BQb3J0ID0gaW50VmFs
dWU7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobWVkaWFEZXNjcmlwdGlvbk9iamVjdC0+Z2V0
U3RyaW5nKG1lZGlhU3RyZWFtSWRTdHJpbmcoKSwgc3RyaW5nVmFsdWUpKQotICAgICAgICAgICAg
bWVkaWFEZXNjcmlwdGlvbi5tZWRpYVN0cmVhbUlkID0gc3RyaW5nVmFsdWU7Ci0KLSAgICAgICAg
aWYgKG1lZGlhRGVzY3JpcHRpb25PYmplY3QtPmdldFN0cmluZyhtZWRpYVN0cmVhbVRyYWNrSWRT
dHJpbmcoKSwgc3RyaW5nVmFsdWUpKQotICAgICAgICAgICAgbWVkaWFEZXNjcmlwdGlvbi5tZWRp
YVN0cmVhbVRyYWNrSWQgPSBzdHJpbmdWYWx1ZTsKLQotICAgICAgICBSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiBkdGxzT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKLSAgICAgICAg
aWYgKG1lZGlhRGVzY3JpcHRpb25PYmplY3QtPmdldE9iamVjdChkdGxzU3RyaW5nKCksIGR0bHNP
YmplY3QpKSB7Ci0gICAgICAgICAgICBpZiAoZHRsc09iamVjdC0+Z2V0U3RyaW5nKHNldHVwU3Ry
aW5nKCksIHN0cmluZ1ZhbHVlKSkKLSAgICAgICAgICAgICAgICBtZWRpYURlc2NyaXB0aW9uLmR0
bHNTZXR1cCA9IHN0cmluZ1ZhbHVlOwotCi0gICAgICAgICAgICBpZiAoZHRsc09iamVjdC0+Z2V0
U3RyaW5nKGZpbmdlcnByaW50SGFzaEZ1bmN0aW9uU3RyaW5nKCksIHN0cmluZ1ZhbHVlKSkKLSAg
ICAgICAgICAgICAgICBtZWRpYURlc2NyaXB0aW9uLmR0bHNGaW5nZXJwcmludEhhc2hGdW5jdGlv
biA9IHN0cmluZ1ZhbHVlOwotCi0gICAgICAgICAgICBpZiAoZHRsc09iamVjdC0+Z2V0U3RyaW5n
KGZpbmdlcnByaW50U3RyaW5nKCksIHN0cmluZ1ZhbHVlKSkKLSAgICAgICAgICAgICAgICBtZWRp
YURlc2NyaXB0aW9uLmR0bHNGaW5nZXJwcmludCA9IHN0cmluZ1ZhbHVlOwotICAgICAgICB9Ci0K
LSAgICAgICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBzc3Jjc0FycmF5ID0gSW5zcGVjdG9yQXJy
YXk6OmNyZWF0ZSgpOwotICAgICAgICBtZWRpYURlc2NyaXB0aW9uT2JqZWN0LT5nZXRBcnJheShz
c3Jjc1N0cmluZygpLCBzc3Jjc0FycmF5KTsKLQotICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAw
OyBqIDwgc3NyY3NBcnJheS0+bGVuZ3RoKCk7ICsraikgewotICAgICAgICAgICAgc3NyY3NBcnJh
eS0+Z2V0KGopLT5hc0ludGVnZXIoaW50VmFsdWUpOwotICAgICAgICAgICAgbWVkaWFEZXNjcmlw
dGlvbi5hZGRTc3JjKGludFZhbHVlKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChtZWRpYURl
c2NyaXB0aW9uT2JqZWN0LT5nZXRTdHJpbmcoY25hbWVTdHJpbmcoKSwgc3RyaW5nVmFsdWUpKQot
ICAgICAgICAgICAgbWVkaWFEZXNjcmlwdGlvbi5jbmFtZSA9IHN0cmluZ1ZhbHVlOwotCi0gICAg
ICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGljZU9iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6
Y3JlYXRlKCk7Ci0gICAgICAgIGlmIChtZWRpYURlc2NyaXB0aW9uT2JqZWN0LT5nZXRPYmplY3Qo
aWNlU3RyaW5nKCksIGljZU9iamVjdCkpIHsKLSAgICAgICAgICAgIGlmIChpY2VPYmplY3QtPmdl
dFN0cmluZyh1ZnJhZ1N0cmluZygpLCBzdHJpbmdWYWx1ZSkpCi0gICAgICAgICAgICAgICAgbWVk
aWFEZXNjcmlwdGlvbi5pY2VVZnJhZyA9IHN0cmluZ1ZhbHVlOwotCi0gICAgICAgICAgICBpZiAo
aWNlT2JqZWN0LT5nZXRTdHJpbmcocGFzc3dvcmRTdHJpbmcoKSwgc3RyaW5nVmFsdWUpKQotICAg
ICAgICAgICAgICAgIG1lZGlhRGVzY3JpcHRpb24uaWNlUGFzc3dvcmQgPSBzdHJpbmdWYWx1ZTsK
LQotICAgICAgICAgICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBjYW5kaWRhdGVzQXJyYXkgPSBJ
bnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7Ci0gICAgICAgICAgICBpY2VPYmplY3QtPmdldEFycmF5
KGNhbmRpZGF0ZXNTdHJpbmcoKSwgY2FuZGlkYXRlc0FycmF5KTsKLQotICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBqID0gMDsgaiA8IGNhbmRpZGF0ZXNBcnJheS0+bGVuZ3RoKCk7ICsraikgewot
ICAgICAgICAgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGNhbmRpZGF0ZU9iamVjdCA9
IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgICAgICAgICAgICAgY2FuZGlkYXRlc0Fy
cmF5LT5nZXQoaiktPmFzT2JqZWN0KGNhbmRpZGF0ZU9iamVjdCk7Ci0KLSAgICAgICAgICAgICAg
ICBtZWRpYURlc2NyaXB0aW9uLmFkZEljZUNhbmRpZGF0ZShjcmVhdGVDYW5kaWRhdGUoKmNhbmRp
ZGF0ZU9iamVjdCkpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgY29uZmln
dXJhdGlvbi0+YWRkTWVkaWFEZXNjcmlwdGlvbihXVEZNb3ZlKG1lZGlhRGVzY3JpcHRpb24pKTsK
LSAgICB9Ci0KLSAgICByZXR1cm4gY29uZmlndXJhdGlvbjsKLX0KLQotc3RhdGljIHN0ZDo6b3B0
aW9uYWw8SWNlQ2FuZGlkYXRlPiBpY2VDYW5kaWRhdGVGcm9tSlNPTihjb25zdCBTdHJpbmcmIGpz
b24pCi17Ci0gICAgUmVmUHRyPEluc3BlY3RvclZhbHVlPiB2YWx1ZTsKLSAgICBpZiAoIUluc3Bl
Y3RvclZhbHVlOjpwYXJzZUpTT04oanNvbiwgdmFsdWUpKQotICAgICAgICByZXR1cm4gc3RkOjpu
dWxsb3B0OwotCi0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gY2FuZGlkYXRlT2JqZWN0Owot
ICAgIGlmICghdmFsdWUtPmFzT2JqZWN0KGNhbmRpZGF0ZU9iamVjdCkpCi0gICAgICAgIHJldHVy
biBzdGQ6Om51bGxvcHQ7Ci0KLSAgICByZXR1cm4gY3JlYXRlQ2FuZGlkYXRlKCpjYW5kaWRhdGVP
YmplY3QpOwotfQotCi1zdGF0aWMgU3RyaW5nIGdldEJ1bmRsZVBvbGljeU5hbWUoY29uc3QgUGVl
ckNvbm5lY3Rpb25TdGF0ZXM6OkJ1bmRsZVBvbGljeSBidW5kbGVQb2xpY3kpCi17Ci0gICAgc3dp
dGNoIChidW5kbGVQb2xpY3kpIHsKLSAgICBjYXNlIFBlZXJDb25uZWN0aW9uU3RhdGVzOjpCdW5k
bGVQb2xpY3k6Ok1heENvbXBhdDoKLSAgICAgICAgcmV0dXJuICJtYXgtY29tcGF0IjsKLSAgICBj
YXNlIFBlZXJDb25uZWN0aW9uU3RhdGVzOjpCdW5kbGVQb2xpY3k6Ok1heEJ1bmRsZToKLSAgICAg
ICAgcmV0dXJuICJtYXgtYnVuZGxlIjsKLSAgICBjYXNlIFBlZXJDb25uZWN0aW9uU3RhdGVzOjpC
dW5kbGVQb2xpY3k6OkJhbGFuY2VkOgotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiAiYmFs
YW5jZWQiOwotICAgIH07Ci19Ci0KLXN0YXRpYyBTdHJpbmcgY29uZmlndXJhdGlvblRvSlNPTihj
b25zdCBNZWRpYUVuZHBvaW50U2Vzc2lvbkNvbmZpZ3VyYXRpb24mIGNvbmZpZ3VyYXRpb24pCi17
Ci0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gb2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0Ojpj
cmVhdGUoKTsKLSAgICBvYmplY3QtPnNldFN0cmluZyhidW5kbGVQb2xpY3lTdHJpbmcoKSwgZ2V0
QnVuZGxlUG9saWN5TmFtZShjb25maWd1cmF0aW9uLmJ1bmRsZVBvbGljeSgpKSk7Ci0KLSAgICBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBvcmlnaW5hdG9yT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0
OjpjcmVhdGUoKTsKLSAgICBvcmlnaW5hdG9yT2JqZWN0LT5zZXRTdHJpbmcoc2Vzc2lvbklkU3Ry
aW5nKCksIFN0cmluZzo6bnVtYmVyKGNvbmZpZ3VyYXRpb24uc2Vzc2lvbklkKCkpKTsKLSAgICBv
cmlnaW5hdG9yT2JqZWN0LT5zZXRJbnRlZ2VyKHNlc3Npb25WZXJzaW9uU3RyaW5nKCksIGNvbmZp
Z3VyYXRpb24uc2Vzc2lvblZlcnNpb24oKSk7Ci0gICAgb2JqZWN0LT5zZXRPYmplY3Qob3JpZ2lu
YXRvclN0cmluZygpLCBvcmlnaW5hdG9yT2JqZWN0KTsKLQotICAgIFJlZlB0cjxJbnNwZWN0b3JB
cnJheT4gbWVkaWFEZXNjcmlwdGlvbnNBcnJheSA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsK
LQotICAgIGZvciAoY29uc3QgYXV0byYgbWVkaWFEZXNjcmlwdGlvbiA6IGNvbmZpZ3VyYXRpb24u
bWVkaWFEZXNjcmlwdGlvbnMoKSkgewotICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBt
ZWRpYURlc2NyaXB0aW9uT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKLQotICAg
ICAgICBtZWRpYURlc2NyaXB0aW9uT2JqZWN0LT5zZXRTdHJpbmcodHlwZVN0cmluZygpLCBtZWRp
YURlc2NyaXB0aW9uLnR5cGUpOwotICAgICAgICBtZWRpYURlc2NyaXB0aW9uT2JqZWN0LT5zZXRJ
bnRlZ2VyKHBvcnRTdHJpbmcoKSwgbWVkaWFEZXNjcmlwdGlvbi5wb3J0KTsKLSAgICAgICAgbWVk
aWFEZXNjcmlwdGlvbk9iamVjdC0+c2V0U3RyaW5nKGFkZHJlc3NTdHJpbmcoKSwgbWVkaWFEZXNj
cmlwdGlvbi5hZGRyZXNzKTsKLSAgICAgICAgbWVkaWFEZXNjcmlwdGlvbk9iamVjdC0+c2V0U3Ry
aW5nKG1vZGVTdHJpbmcoKSwgbWVkaWFEZXNjcmlwdGlvbi5tb2RlKTsKLSAgICAgICAgbWVkaWFE
ZXNjcmlwdGlvbk9iamVjdC0+c2V0U3RyaW5nKG1pZFN0cmluZygpLCBtZWRpYURlc2NyaXB0aW9u
Lm1pZCk7Ci0KLSAgICAgICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwYXlsb2Fkc0FycmF5ID0g
SW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwotCi0gICAgICAgIGZvciAoYXV0byYgcGF5bG9hZCA6
IG1lZGlhRGVzY3JpcHRpb24ucGF5bG9hZHMpIHsKLSAgICAgICAgICAgIFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IHBheWxvYWRPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwotCi0g
ICAgICAgICAgICBwYXlsb2FkT2JqZWN0LT5zZXRJbnRlZ2VyKHR5cGVTdHJpbmcoKSwgcGF5bG9h
ZC50eXBlKTsKLSAgICAgICAgICAgIHBheWxvYWRPYmplY3QtPnNldFN0cmluZyhlbmNvZGluZ05h
bWVTdHJpbmcoKSwgcGF5bG9hZC5lbmNvZGluZ05hbWUpOwotICAgICAgICAgICAgcGF5bG9hZE9i
amVjdC0+c2V0SW50ZWdlcihjbG9ja1JhdGVTdHJpbmcoKSwgcGF5bG9hZC5jbG9ja1JhdGUpOwot
ICAgICAgICAgICAgcGF5bG9hZE9iamVjdC0+c2V0SW50ZWdlcihjaGFubmVsc1N0cmluZygpLCBw
YXlsb2FkLmNoYW5uZWxzKTsKLSAgICAgICAgICAgIHBheWxvYWRPYmplY3QtPnNldEJvb2xlYW4o
Y2NtZmlyU3RyaW5nKCksIHBheWxvYWQuY2NtZmlyKTsKLSAgICAgICAgICAgIHBheWxvYWRPYmpl
Y3QtPnNldEJvb2xlYW4obmFja3BsaVN0cmluZygpLCBwYXlsb2FkLm5hY2twbGkpOwotICAgICAg
ICAgICAgcGF5bG9hZE9iamVjdC0+c2V0Qm9vbGVhbihuYWNrU3RyaW5nKCksIHBheWxvYWQubmFj
ayk7Ci0KLSAgICAgICAgICAgIGlmICghcGF5bG9hZC5wYXJhbWV0ZXJzLmlzRW1wdHkoKSkgewot
ICAgICAgICAgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtZXRlcnNPYmplY3Qg
PSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwotCi0gICAgICAgICAgICAgICAgZm9yIChhdXRv
JiBuYW1lIDogcGF5bG9hZC5wYXJhbWV0ZXJzLmtleXMoKSkKLSAgICAgICAgICAgICAgICAgICAg
cGFyYW1ldGVyc09iamVjdC0+c2V0SW50ZWdlcihuYW1lLCBwYXlsb2FkLnBhcmFtZXRlcnMuZ2V0
KG5hbWUpKTsKLQotICAgICAgICAgICAgICAgIHBheWxvYWRPYmplY3QtPnNldE9iamVjdChwYXJh
bWV0ZXJzU3RyaW5nKCksIHBhcmFtZXRlcnNPYmplY3QpOwotICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICBwYXlsb2Fkc0FycmF5LT5wdXNoT2JqZWN0KHBheWxvYWRPYmplY3QpOwotICAgICAg
ICB9Ci0gICAgICAgIG1lZGlhRGVzY3JpcHRpb25PYmplY3QtPnNldEFycmF5KHBheWxvYWRzU3Ry
aW5nKCksIHBheWxvYWRzQXJyYXkpOwotCi0gICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IHJ0Y3BPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwotICAgICAgICBydGNwT2Jq
ZWN0LT5zZXRCb29sZWFuKG11eFN0cmluZygpLCBtZWRpYURlc2NyaXB0aW9uLnJ0Y3BNdXgpOwot
ICAgICAgICBydGNwT2JqZWN0LT5zZXRTdHJpbmcoYWRkcmVzc1N0cmluZygpLCBtZWRpYURlc2Ny
aXB0aW9uLnJ0Y3BBZGRyZXNzKTsKLSAgICAgICAgcnRjcE9iamVjdC0+c2V0SW50ZWdlcihwb3J0
U3RyaW5nKCksIG1lZGlhRGVzY3JpcHRpb24ucnRjcFBvcnQpOwotICAgICAgICBtZWRpYURlc2Ny
aXB0aW9uT2JqZWN0LT5zZXRPYmplY3QocnRjcFN0cmluZygpLCBydGNwT2JqZWN0KTsKLQotICAg
ICAgICBtZWRpYURlc2NyaXB0aW9uT2JqZWN0LT5zZXRTdHJpbmcobWVkaWFTdHJlYW1JZFN0cmlu
ZygpLCBtZWRpYURlc2NyaXB0aW9uLm1lZGlhU3RyZWFtSWQpOwotICAgICAgICBtZWRpYURlc2Ny
aXB0aW9uT2JqZWN0LT5zZXRTdHJpbmcobWVkaWFTdHJlYW1UcmFja0lkU3RyaW5nKCksIG1lZGlh
RGVzY3JpcHRpb24ubWVkaWFTdHJlYW1UcmFja0lkKTsKLQotICAgICAgICBSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiBkdGxzT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKLSAgICAg
ICAgZHRsc09iamVjdC0+c2V0U3RyaW5nKHNldHVwU3RyaW5nKCksIG1lZGlhRGVzY3JpcHRpb24u
ZHRsc1NldHVwKTsKLSAgICAgICAgZHRsc09iamVjdC0+c2V0U3RyaW5nKGZpbmdlcnByaW50SGFz
aEZ1bmN0aW9uU3RyaW5nKCksIG1lZGlhRGVzY3JpcHRpb24uZHRsc0ZpbmdlcnByaW50SGFzaEZ1
bmN0aW9uKTsKLSAgICAgICAgZHRsc09iamVjdC0+c2V0U3RyaW5nKGZpbmdlcnByaW50U3RyaW5n
KCksIG1lZGlhRGVzY3JpcHRpb24uZHRsc0ZpbmdlcnByaW50KTsKLSAgICAgICAgbWVkaWFEZXNj
cmlwdGlvbk9iamVjdC0+c2V0T2JqZWN0KGR0bHNTdHJpbmcoKSwgZHRsc09iamVjdCk7Ci0KLSAg
ICAgICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBzc3Jjc0FycmF5ID0gSW5zcGVjdG9yQXJyYXk6
OmNyZWF0ZSgpOwotCi0gICAgICAgIGZvciAoYXV0byBzc3JjIDogbWVkaWFEZXNjcmlwdGlvbi5z
c3JjcykKLSAgICAgICAgICAgIHNzcmNzQXJyYXktPnB1c2hEb3VibGUoc3NyYyk7Ci0gICAgICAg
IG1lZGlhRGVzY3JpcHRpb25PYmplY3QtPnNldEFycmF5KHNzcmNzU3RyaW5nKCksIHNzcmNzQXJy
YXkpOwotCi0gICAgICAgIG1lZGlhRGVzY3JpcHRpb25PYmplY3QtPnNldFN0cmluZyhjbmFtZVN0
cmluZygpLCBtZWRpYURlc2NyaXB0aW9uLmNuYW1lKTsKLQotICAgICAgICBSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiBpY2VPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwotICAgICAg
ICBpY2VPYmplY3QtPnNldFN0cmluZyh1ZnJhZ1N0cmluZygpLCBtZWRpYURlc2NyaXB0aW9uLmlj
ZVVmcmFnKTsKLSAgICAgICAgaWNlT2JqZWN0LT5zZXRTdHJpbmcocGFzc3dvcmRTdHJpbmcoKSwg
bWVkaWFEZXNjcmlwdGlvbi5pY2VQYXNzd29yZCk7Ci0KLSAgICAgICAgUmVmUHRyPEluc3BlY3Rv
ckFycmF5PiBjYW5kaWRhdGVzQXJyYXkgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7Ci0KLSAg
ICAgICAgZm9yIChhdXRvJiBjYW5kaWRhdGUgOiBtZWRpYURlc2NyaXB0aW9uLmljZUNhbmRpZGF0
ZXMpCi0gICAgICAgICAgICBjYW5kaWRhdGVzQXJyYXktPnB1c2hPYmplY3QoY3JlYXRlQ2FuZGlk
YXRlT2JqZWN0KGNhbmRpZGF0ZSkpOwotCi0gICAgICAgIGljZU9iamVjdC0+c2V0QXJyYXkoY2Fu
ZGlkYXRlc1N0cmluZygpLCBjYW5kaWRhdGVzQXJyYXkpOwotICAgICAgICBtZWRpYURlc2NyaXB0
aW9uT2JqZWN0LT5zZXRPYmplY3QoaWNlU3RyaW5nKCksIGljZU9iamVjdCk7Ci0KLSAgICAgICAg
bWVkaWFEZXNjcmlwdGlvbnNBcnJheS0+cHVzaE9iamVjdChtZWRpYURlc2NyaXB0aW9uT2JqZWN0
KTsKLSAgICB9Ci0gICAgb2JqZWN0LT5zZXRBcnJheShtZWRpYURlc2NyaXB0aW9uc1N0cmluZygp
LCBtZWRpYURlc2NyaXB0aW9uc0FycmF5KTsKLQotICAgIHJldHVybiBvYmplY3QtPnRvSlNPTlN0
cmluZygpOwotfQotCi1zdGF0aWMgU3RyaW5nIGljZUNhbmRpZGF0ZVRvSlNPTihjb25zdCBJY2VD
YW5kaWRhdGUmIGNhbmRpZGF0ZSkKLXsKLSAgICByZXR1cm4gY3JlYXRlQ2FuZGlkYXRlT2JqZWN0
KGNhbmRpZGF0ZSktPnRvSlNPTlN0cmluZygpOwotfQotCi1TRFBQcm9jZXNzb3I6OlJlc3VsdCBT
RFBQcm9jZXNzb3I6OmdlbmVyYXRlKGNvbnN0IE1lZGlhRW5kcG9pbnRTZXNzaW9uQ29uZmlndXJh
dGlvbiYgY29uZmlndXJhdGlvbiwgU3RyaW5nJiBvdXRTZHBTdHJpbmcpIGNvbnN0Ci17Ci0gICAg
U3RyaW5nIHNkcFN0cmluZzsKLSAgICBpZiAoIWNhbGxTY3JpcHQoImdlbmVyYXRlIiwgY29uZmln
dXJhdGlvblRvSlNPTihjb25maWd1cmF0aW9uKSwgc2RwU3RyaW5nKSkKLSAgICAgICAgcmV0dXJu
IFJlc3VsdDo6SW50ZXJuYWxFcnJvcjsKLQotICAgIG91dFNkcFN0cmluZyA9IHNkcFN0cmluZzsK
LSAgICByZXR1cm4gUmVzdWx0OjpTdWNjZXNzOwotfQotCi1TRFBQcm9jZXNzb3I6OlJlc3VsdCBT
RFBQcm9jZXNzb3I6OnBhcnNlKGNvbnN0IFN0cmluZyYgc2RwLCBSZWZQdHI8TWVkaWFFbmRwb2lu
dFNlc3Npb25Db25maWd1cmF0aW9uPiYgb3V0Q29uZmlndXJhdGlvbikgY29uc3QKLXsKLSAgICBT
dHJpbmcgc2NyaXB0T3V0cHV0OwotICAgIGlmICghY2FsbFNjcmlwdCgicGFyc2UiLCBzZHAsIHNj
cmlwdE91dHB1dCkpCi0gICAgICAgIHJldHVybiBSZXN1bHQ6OkludGVybmFsRXJyb3I7Ci0KLSAg
ICBpZiAoc2NyaXB0T3V0cHV0ID09ICJQYXJzZUVycm9yIikKLSAgICAgICAgcmV0dXJuIFJlc3Vs
dDo6UGFyc2VFcnJvcjsKLQotICAgIFJlZlB0cjxNZWRpYUVuZHBvaW50U2Vzc2lvbkNvbmZpZ3Vy
YXRpb24+IGNvbmZpZ3VyYXRpb24gPSBjb25maWd1cmF0aW9uRnJvbUpTT04oc2NyaXB0T3V0cHV0
KTsKLSAgICBpZiAoIWNvbmZpZ3VyYXRpb24pCi0gICAgICAgIHJldHVybiBSZXN1bHQ6OkludGVy
bmFsRXJyb3I7Ci0KLSAgICBvdXRDb25maWd1cmF0aW9uID0gY29uZmlndXJhdGlvbjsKLSAgICBy
ZXR1cm4gUmVzdWx0OjpTdWNjZXNzOwotfQotCi1TRFBQcm9jZXNzb3I6OlJlc3VsdCBTRFBQcm9j
ZXNzb3I6OmdlbmVyYXRlQ2FuZGlkYXRlTGluZShjb25zdCBJY2VDYW5kaWRhdGUmIGNhbmRpZGF0
ZSwgU3RyaW5nJiBvdXRDYW5kaWRhdGVMaW5lKSBjb25zdAotewotICAgIFN0cmluZyBjYW5kaWRh
dGVMaW5lOwotICAgIGlmICghY2FsbFNjcmlwdCgiZ2VuZXJhdGVDYW5kaWRhdGVMaW5lIiwgaWNl
Q2FuZGlkYXRlVG9KU09OKGNhbmRpZGF0ZSksIGNhbmRpZGF0ZUxpbmUpKQotICAgICAgICByZXR1
cm4gUmVzdWx0OjpJbnRlcm5hbEVycm9yOwotCi0gICAgb3V0Q2FuZGlkYXRlTGluZSA9IGNhbmRp
ZGF0ZUxpbmU7Ci0gICAgcmV0dXJuIFJlc3VsdDo6U3VjY2VzczsKLX0KLQotU0RQUHJvY2Vzc29y
OjpQYXJzaW5nUmVzdWx0IFNEUFByb2Nlc3Nvcjo6cGFyc2VDYW5kaWRhdGVMaW5lKGNvbnN0IFN0
cmluZyYgY2FuZGlkYXRlTGluZSkgY29uc3QKLXsKLSAgICBTdHJpbmcgc2NyaXB0T3V0cHV0Owot
ICAgIGlmICghY2FsbFNjcmlwdCgicGFyc2VDYW5kaWRhdGVMaW5lIiwgY2FuZGlkYXRlTGluZSwg
c2NyaXB0T3V0cHV0KSkKLSAgICAgICAgcmV0dXJuIHsgUmVzdWx0OjpJbnRlcm5hbEVycm9yIH07
Ci0KLSAgICBpZiAoc2NyaXB0T3V0cHV0ID09ICJQYXJzZUVycm9yIikKLSAgICAgICAgcmV0dXJu
IHsgUmVzdWx0OjpQYXJzZUVycm9yIH07Ci0KLSAgICBhdXRvIGNhbmRpZGF0ZSA9IGljZUNhbmRp
ZGF0ZUZyb21KU09OKHNjcmlwdE91dHB1dCk7Ci0gICAgaWYgKCFjYW5kaWRhdGUpCi0gICAgICAg
IHJldHVybiB7IFJlc3VsdDo6SW50ZXJuYWxFcnJvciB9OwotICAgIHJldHVybiB7IFdURk1vdmUo
Y2FuZGlkYXRlLnZhbHVlKCkpIH07Ci19Ci0KLWJvb2wgU0RQUHJvY2Vzc29yOjpjYWxsU2NyaXB0
KGNvbnN0IFN0cmluZyYgZnVuY3Rpb25OYW1lLCBjb25zdCBTdHJpbmcmIGFyZ3VtZW50LCBTdHJp
bmcmIG91dFJlc3VsdCkgY29uc3QKLXsKLSAgICBpZiAoIXNjcmlwdEV4ZWN1dGlvbkNvbnRleHQo
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gZG93
bmNhc3Q8RG9jdW1lbnQ+KHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSk7Ci0gICAgaWYgKCFkb2N1
bWVudC0+ZnJhbWUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFtX2lzb2xh
dGVkV29ybGQpCi0gICAgICAgIG1faXNvbGF0ZWRXb3JsZCA9IERPTVdyYXBwZXJXb3JsZDo6Y3Jl
YXRlKGNvbW1vblZNKCkpOwotCi0gICAgU2NyaXB0Q29udHJvbGxlciYgc2NyaXB0Q29udHJvbGxl
ciA9IGRvY3VtZW50LT5mcmFtZSgpLT5zY3JpcHQoKTsKLSAgICBKU0RPTUdsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0ID0gSlNDOjpqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihzY3JpcHRDb250
cm9sbGVyLmdsb2JhbE9iamVjdCgqbV9pc29sYXRlZFdvcmxkKSk7Ci0gICAgSlNDOjpWTSYgdm0g
PSBnbG9iYWxPYmplY3QtPnZtKCk7Ci0gICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jayh2bSk7Ci0g
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwotICAgIEpTQzo6RXhlY1N0
YXRlKiBleGVjID0gZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7Ci0KLSAgICBKU0M6OkpTVmFs
dWUgcHJvYmVGdW5jdGlvblZhbHVlID0gZ2xvYmFsT2JqZWN0LT5nZXQoZXhlYywgSlNDOjpJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsICJnZW5lcmF0ZSIpKTsKLSAgICBpZiAoIXByb2JlRnVu
Y3Rpb25WYWx1ZS5pc0Z1bmN0aW9uKCkpIHsKLSAgICAgICAgVVJMIHNjcmlwdFVSTDsKLSAgICAg
ICAgc2NyaXB0Q29udHJvbGxlci5ldmFsdWF0ZUluV29ybGQoU2NyaXB0U291cmNlQ29kZShTRFBQ
cm9jZXNzb3JTY3JpcHRSZXNvdXJjZTo6c2NyaXB0U3RyaW5nKCksIHNjcmlwdFVSTCksICptX2lz
b2xhdGVkV29ybGQpOwotICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKSB7
Ci0gICAgICAgICAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgSlNDOjpKU1ZhbHVlIGZ1bmN0aW9uVmFs
dWUgPSBnbG9iYWxPYmplY3QtPmdldChleGVjLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmco
ZXhlYywgZnVuY3Rpb25OYW1lKSk7Ci0gICAgaWYgKCFmdW5jdGlvblZhbHVlLmlzRnVuY3Rpb24o
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgSlNDOjpKU09iamVjdCogZnVuY3Rpb24g
PSBmdW5jdGlvblZhbHVlLnRvT2JqZWN0KGV4ZWMpOwotICAgIEpTQzo6Q2FsbERhdGEgY2FsbERh
dGE7Ci0gICAgSlNDOjpDYWxsVHlwZSBjYWxsVHlwZSA9IGZ1bmN0aW9uLT5tZXRob2RUYWJsZSh2
bSktPmdldENhbGxEYXRhKGZ1bmN0aW9uLCBjYWxsRGF0YSk7Ci0gICAgaWYgKGNhbGxUeXBlID09
IEpTQzo6Q2FsbFR5cGU6Ok5vbmUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEpTQzo6
TWFya2VkQXJndW1lbnRCdWZmZXIgYXJnTGlzdDsKLSAgICBhcmdMaXN0LmFwcGVuZChKU0M6Ompz
U3RyaW5nKGV4ZWMsIGFyZ3VtZW50KSk7Ci0KLSAgICBKU0M6OkpTVmFsdWUgcmVzdWx0ID0gSlND
OjpjYWxsKGV4ZWMsIGZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEsIGdsb2JhbE9iamVjdCwg
YXJnTGlzdCk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkgewotICAgICAg
ICBMT0dfRVJST1IoIlNEUFByb2Nlc3NvciBzY3JpcHQgdGhyZXcgaW4gZnVuY3Rpb24gJXMiLCBm
dW5jdGlvbk5hbWUuYXNjaWkoKS5kYXRhKCkpOwotICAgICAgICBzY29wZS5jbGVhckV4Y2VwdGlv
bigpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKCFyZXN1bHQuaXNT
dHJpbmcoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgb3V0UmVzdWx0ID0gYXNTdHJp
bmcocmVzdWx0KS0+dmFsdWUoZXhlYyk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLX0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShXRUJfUlRDKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9TRFBQcm9jZXNzb3IuaCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vU0RQUHJvY2Vzc29yLmgKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IGNhNjFjOWE5MmU0N2NlM2U5MDFlYzM2MzFhNjhmNzdiMTJjOTAy
YzQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9TRFBQcm9jZXNzb3IuaAorKysgL2Rldi9udWxs
CkBAIC0xLDc4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgRXJpY3Nzb24gQUIu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIKLSAqICAgIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqICAgIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIE5laXRoZXIg
dGhlIG5hbWUgb2YgRXJpY3Nzb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0g
KiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tIHRoaXMKLSAqICAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
LSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUoV0VCX1JU
QykKLQotI2luY2x1ZGUgIkNvbnRleHREZXN0cnVjdGlvbk9ic2VydmVyLmgiCi0jaW5jbHVkZSAi
SWNlQ2FuZGlkYXRlLmgiCi0jaW5jbHVkZSAiTWVkaWFFbmRwb2ludFNlc3Npb25Db25maWd1cmF0
aW9uLmgiCi0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9WYXJpYW50Lmg+
Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsK
LQotY2xhc3MgRE9NV3JhcHBlcldvcmxkOwotY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsK
LQotY2xhc3MgU0RQUHJvY2Vzc29yIDogcHVibGljIENvbnRleHREZXN0cnVjdGlvbk9ic2VydmVy
IHsKLXB1YmxpYzoKLSAgICBlbnVtIGNsYXNzIFJlc3VsdCB7Ci0gICAgICAgIFN1Y2Nlc3MgPSAx
LAotICAgICAgICBJbnRlcm5hbEVycm9yID0gMiwKLSAgICAgICAgUGFyc2VFcnJvciA9IDMKLSAg
ICB9OwotCi0gICAgU0RQUHJvY2Vzc29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKTsKLQotICAg
IFJlc3VsdCBnZW5lcmF0ZShjb25zdCBNZWRpYUVuZHBvaW50U2Vzc2lvbkNvbmZpZ3VyYXRpb24m
LCBTdHJpbmcmIG91dFNkcFN0cmluZykgY29uc3Q7Ci0gICAgUmVzdWx0IHBhcnNlKGNvbnN0IFN0
cmluZyYgc2RwLCBSZWZQdHI8TWVkaWFFbmRwb2ludFNlc3Npb25Db25maWd1cmF0aW9uPiYpIGNv
bnN0OwotCi0gICAgUmVzdWx0IGdlbmVyYXRlQ2FuZGlkYXRlTGluZShjb25zdCBJY2VDYW5kaWRh
dGUmLCBTdHJpbmcmIG91dENhbmRpZGF0ZUxpbmUpIGNvbnN0OwotCi0gICAgc3RydWN0IFBhcnNp
bmdSZXN1bHQgewotICAgICAgICBWYXJpYW50PEljZUNhbmRpZGF0ZSwgUmVzdWx0PiByZXN1bHQ7
Ci0KLSAgICAgICAgUmVzdWx0IHBhcnNpbmdTdGF0dXMoKSBjb25zdCB7IHJldHVybiBXVEY6Omhv
bGRzX2FsdGVybmF0aXZlPEljZUNhbmRpZGF0ZT4ocmVzdWx0KSA/IFJlc3VsdDo6U3VjY2VzcyA6
IFdURjo6Z2V0PFNEUFByb2Nlc3Nvcjo6UmVzdWx0PihyZXN1bHQpOyB9Ci0gICAgICAgIEljZUNh
bmRpZGF0ZSYgY2FuZGlkYXRlKCkgeyByZXR1cm4gV1RGOjpnZXQ8SWNlQ2FuZGlkYXRlPihyZXN1
bHQpOyB9Ci0gICAgfTsKLSAgICBQYXJzaW5nUmVzdWx0IHBhcnNlQ2FuZGlkYXRlTGluZShjb25z
dCBTdHJpbmcmIGNhbmRpZGF0ZUxpbmUpIGNvbnN0OwotCi1wcml2YXRlOgotICAgIGJvb2wgY2Fs
bFNjcmlwdChjb25zdCBTdHJpbmcmIGZ1bmN0aW9uTmFtZSwgY29uc3QgU3RyaW5nJiBhcmd1bWVu
dCwgU3RyaW5nJiBvdXRSZXN1bHQpIGNvbnN0OwotCi0gICAgbXV0YWJsZSBSZWZQdHI8RE9NV3Jh
cHBlcldvcmxkPiBtX2lzb2xhdGVkV29ybGQ7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
Ci0KLSNlbmRpZiAvLyBFTkFCTEUoV0VCX1JUQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvbWVkaWFzdHJlYW0vbGlid2VicnRjL0xpYldlYlJUQ01lZGlhRW5kcG9pbnQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9saWJ3ZWJydGMvTGliV2ViUlRD
TWVkaWFFbmRwb2ludC5jcHAKaW5kZXggNmViNGE3NDA0YzJkYjYyZmJjNzVkNWY2MzBiMGNhODFk
YzMwY2ZkNy4uMjM4NTFmOTY3ZDFiZDg3NmZmZDFmMzk5M2M1NmVlYzdmYzRlNmE4ZSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9saWJ3ZWJydGMvTGliV2Vi
UlRDTWVkaWFFbmRwb2ludC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0
cmVhbS9saWJ3ZWJydGMvTGliV2ViUlRDTWVkaWFFbmRwb2ludC5jcHAKQEAgLTgwLDcgKzgwLDYg
QEAgYm9vbCBMaWJXZWJSVENNZWRpYUVuZHBvaW50OjpzZXRDb25maWd1cmF0aW9uKExpYldlYlJU
Q1Byb3ZpZGVyJiBjbGllbnQsIHdlYnJ0YzoKICAgICByZXR1cm4gbV9iYWNrZW5kLT5TZXRDb25m
aWd1cmF0aW9uKFdURk1vdmUoY29uZmlndXJhdGlvbikpOwogfQogCi0vLyBGSVhNRTogdW5pZnkg
d2l0aCBNZWRpYUVuZHBvaW50U2Vzc2lvbkRlc2NyaXB0aW9uOjp0eXBlU3RyaW5nKCkKIHN0YXRp
YyBpbmxpbmUgY29uc3QgY2hhciogc2Vzc2lvbkRlc2NyaXB0aW9uVHlwZShSVENTZHBUeXBlIHNk
cFR5cGUpCiB7CiAgICAgc3dpdGNoIChzZHBUeXBlKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggYjBlNzU0OTcwYjA0MGIzYzU1
MGIwNzE3MDUwOTYxYmRkZDg3NmYyNS4uMzczOGEwZTdlNzQyN2JiODJmMDJhZmI5NDQwNmUyZWUz
MTIwMTg4NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagpAQCAtMTc5Myw2ICsxNzkzLDggQEAKIAkJNDFBQkU2N0IxRDA1ODBEQjAwNkQ4
NjJEIC8qIENyb3NzT3JpZ2luUHJlZmxpZ2h0Q2hlY2tlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDFBQkU2N0ExRDA1ODBENTAwNkQ4NjJEIC8qIENy
b3NzT3JpZ2luUHJlZmxpZ2h0Q2hlY2tlci5oICovOyB9OwogCQk0MUFCRTY3QzFEMDU4MEUwMDA2
RDg2MkQgLyogQ3Jvc3NPcmlnaW5QcmVmbGlnaHRDaGVja2VyLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxQUJFNjc5MUQwNTgwRDUwMDZEODYyRCAv
KiBDcm9zc09yaWdpblByZWZsaWdodENoZWNrZXIuY3BwICovOyB9OwogCQk0MUFENzUzQTFDRUY2
QkQxMDBBMzE0ODYgLyogRmV0Y2hPcHRpb25zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA0MUFENzUzOTFDRUY2QkNFMDBBMzE0ODYgLyogRmV0Y2hPcHRp
b25zLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJ
NDFCMjhCMTQxRjg1MDFBNjAwRkI1MkFDIC8qIE1lZGlhRW5kcG9pbnRDb25maWd1cmF0aW9uLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxQjI4QjEz
MUY4NTAxQTQwMEZCNTJBQyAvKiBNZWRpYUVuZHBvaW50Q29uZmlndXJhdGlvbi5jcHAgKi87IH07
CisJCTQxQjI4QjE1MUY4NTAxRDMwMEZCNTJBQyAvKiBNZWRpYUVuZHBvaW50Q29uZmlndXJhdGlv
bi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDFCMjhC
MTIxRjg1MDFBMzAwRkI1MkFDIC8qIE1lZGlhRW5kcG9pbnRDb25maWd1cmF0aW9uLmggKi87IH07
CiAJCTQxQjJBNjI2MUVGMUJGNkQwMDJCOUQ3QSAvKiBXZWJBdWRpb1NvdXJjZVByb3ZpZGVyLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MUIyQTYyNTFF
RjFCRjYwMDAyQjlEN0EgLyogV2ViQXVkaW9Tb3VyY2VQcm92aWRlci5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTQxQjQ1OUVGMUY1NUVCRDEwMDAw
RjZGRCAvKiBSZWFkYWJsZVN0cmVhbS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA0MUI0NTlFRDFGNTVFQkM3MDAwMEY2RkQgLyogUmVhZGFibGVTdHJl
YW0uY3BwICovOyB9OwogCQk0MUJGNzAwQzBGRTg2RjQ5MDA1RThERUMgLyogTWVzc2FnZVBvcnRD
aGFubmVsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0
MUJGNzAwQTBGRTg2RjQ5MDA1RThERUMgLyogTWVzc2FnZVBvcnRDaGFubmVsLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTI3NzksOCArMjc4MSw2
IEBACiAJCTVERkU4RjU2MEQxNjQ3N0IwMDc2RTkzNyAvKiBTY2hlZHVsZWRBY3Rpb24uY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNBMzc4QkEwRDE1
RjY0MjAwQjc5M0Q2IC8qIFNjaGVkdWxlZEFjdGlvbi5jcHAgKi87IH07CiAJCTVERkU4RjU3MEQx
NjQ3N0MwMDc2RTkzNyAvKiBTY2hlZHVsZWRBY3Rpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDQTM3OEJCMEQxNUY2NDIwMEI3OTNENiAvKiBTY2hl
ZHVsZWRBY3Rpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQk1REZFQkFCNzE4NTkyQjZEMDBDNzVCRUIgLyogV2ViS2l0QXZhaWxhYmlsaXR5Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1REZFQkFCNjE4
NTkyQjZEMDBDNzVCRUIgLyogV2ViS2l0QXZhaWxhYmlsaXR5LmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJNUUxNkEyRTQxQkZBNjUwQjAwMjlBMjFF
IC8qIE1lZGlhRW5kcG9pbnRQZWVyQ29ubmVjdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUUxNkEyRTMxQkZBNjRGQjAwMjlBMjFFIC8qIE1lZGlh
RW5kcG9pbnRQZWVyQ29ubmVjdGlvbi5oICovOyB9OwotCQk1RTE2QTJFNTFCRkE2NTBGMDAyOUEy
MUUgLyogTWVkaWFFbmRwb2ludFBlZXJDb25uZWN0aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVFMTZBMkUyMUJGQTY0RkIwMDI5QTIxRSAvKiBN
ZWRpYUVuZHBvaW50UGVlckNvbm5lY3Rpb24uY3BwICovOyB9OwogCQk1RTJDNDM1MTFCQ0VFMkY2
MDAwMUUyQkMgLyogUGVlckNvbm5lY3Rpb25CYWNrZW5kLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1RTJDNDM0RDFCQ0VFMkU1MDAwMUUyQkMgLyogUGVl
ckNvbm5lY3Rpb25CYWNrZW5kLmggKi87IH07CiAJCTVFMkM0MzVGMUJDRUUzMUUwMDAxRTJCQyAv
KiBSVENSdHBTZW5kZXJSZWNlaXZlckJhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDVFMkM0MzVEMUJDRUUzMEQwMDAxRTJCQyAvKiBSVENSdHBTZW5k
ZXJSZWNlaXZlckJhc2UuaCAqLzsgfTsKIAkJNUUyQzQzNjAxQkNFRTMyMzAwMDFFMkJDIC8qIFJU
Q1J0cFNlbmRlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1RTJDNDM1OTFCQ0VFMzBEMDAwMUUyQkMgLyogUlRDUnRwU2VuZGVyLmNwcCAqLzsgfTsK
QEAgLTI4MDEsMjcgKzI4MDEsMTQgQEAKIAkJNUUyQzQzNzQxQkNGMEQ3NTAwMDFFMkJFIC8qIEpT
UlRDUnRwUGFyYW1ldGVycy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNUUyQzQzNzAxQkNGMEQ2OTAwMDFFMkJFIC8qIEpTUlRDUnRwUGFyYW1ldGVycy5o
ICovOyB9OwogCQk1RTJDNDM3QjFCQ0Y5QTU3MDAwMUUyQkMgLyogUlRDUGVlckNvbm5lY3Rpb25C
dWlsdGlucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NUUyQzQzNzYxQkNGOUEwQjAwMDFFMkJDIC8qIFJUQ1BlZXJDb25uZWN0aW9uQnVpbHRpbnMuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1RTJDNDM3
QzFCQ0Y5QTg0MDAwMUUyQkMgLyogUlRDUGVlckNvbm5lY3Rpb25JbnRlcm5hbHNCdWlsdGlucy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUUyQzQzNzkx
QkNGOUEwQjAwMDFFMkJDIC8qIFJUQ1BlZXJDb25uZWN0aW9uSW50ZXJuYWxzQnVpbHRpbnMuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQk1RTRFQUIw
NDFEMDcxNjZBMDAwNkExODQgLyogTWVkaWFFbmRwb2ludFNlc3Npb25EZXNjcmlwdGlvbi5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUU0RUFCMDMxRDA3
MTY0QzAwMDZBMTg0IC8qIE1lZGlhRW5kcG9pbnRTZXNzaW9uRGVzY3JpcHRpb24uaCAqLzsgfTsK
LQkJNUU0RUFCMDUxRDA3MTY2RTAwMDZBMTg0IC8qIE1lZGlhRW5kcG9pbnRTZXNzaW9uRGVzY3Jp
cHRpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NUU0RUFCMDIxRDA3MTY0QzAwMDZBMTg0IC8qIE1lZGlhRW5kcG9pbnRTZXNzaW9uRGVzY3JpcHRp
b24uY3BwICovOyB9OwogCQk1RTVFMkIxMzFDRkMzRTcwMDAwQzBEODUgLyogUlRDUnRwVHJhbnNj
ZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NUU1RTJCMTAxQ0ZDM0U0QjAwMEMwRDg1IC8qIFJUQ1J0cFRyYW5zY2VpdmVyLmNwcCAqLzsgfTsK
IAkJNUU1RTJCMTQxQ0ZDM0U3NTAwMEMwRDg1IC8qIFJUQ1J0cFRyYW5zY2VpdmVyLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1RTVFMkIxMTFDRkMzRTRC
MDAwQzBEODUgLyogUlRDUnRwVHJhbnNjZWl2ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwotCQk1RUEzRDZERjFDODU5RDdGMDAzMDBCQkIgLyogTW9j
a01lZGlhRW5kcG9pbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDVFQTNENkRFMUM4NTlENTMwMDMwMEJCQiAvKiBNb2NrTWVkaWFFbmRwb2ludC5oICov
OyB9OwotCQk1RUEzRDZFMDFDODU5RDg0MDAzMDBCQkIgLyogTW9ja01lZGlhRW5kcG9pbnQuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUVBM0Q2REQx
Qzg1OUQ1MzAwMzAwQkJCIC8qIE1vY2tNZWRpYUVuZHBvaW50LmNwcCAqLzsgfTsKLQkJNUVBM0Q2
RTMxQzg1OURDMTAwMzAwQkJCIC8qIFNEUFByb2Nlc3Nvci5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1RUEzRDZFMTFDODU5REFBMDAzMDBCQkIgLyog
U0RQUHJvY2Vzc29yLmNwcCAqLzsgfTsKLQkJNUVBM0Q2RTQxQzg1OURDMTAwMzAwQkJCIC8qIFNE
UFByb2Nlc3Nvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNUVBM0Q2RTIxQzg1OURBQTAwMzAwQkJCIC8qIFNEUFByb2Nlc3Nvci5oICovOyB9OwotCQk1
RUEzRDZFNzFDODVBOURCMDAzMDBCQkIgLyogU0RQUHJvY2Vzc29yU2NyaXB0UmVzb3VyY2UuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUVBM0Q2RTUx
Qzg1QTlDMzAwMzAwQkJCIC8qIFNEUFByb2Nlc3NvclNjcmlwdFJlc291cmNlLmNwcCAqLzsgfTsK
LQkJNUVBM0Q2RTgxQzg1QTlEQjAwMzAwQkJCIC8qIFNEUFByb2Nlc3NvclNjcmlwdFJlc291cmNl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1RUEzRDZF
NjFDODVBOUMzMDAzMDBCQkIgLyogU0RQUHJvY2Vzc29yU2NyaXB0UmVzb3VyY2UuaCAqLzsgfTsK
IAkJNUVBNzI1RDIxQUNBQkQ0NzAwRUFEMTdCIC8qIE1lZGlhRGV2aWNlcy5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1RUE3MjVDRDFBQ0FCQ0Q5MDBF
QUQxN0IgLyogTWVkaWFEZXZpY2VzLmNwcCAqLzsgfTsKIAkJNUVBNzI1RDMxQUNBQkQ0NzAwRUFE
MTdCIC8qIE1lZGlhRGV2aWNlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNUVBNzI1Q0UxQUNBQkNEOTAwRUFEMTdCIC8qIE1lZGlhRGV2aWNlcy5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTVFQTcyNUQ1
MUFDQUJENTcwMEVBRDE3QiAvKiBOYXZpZ2F0b3JNZWRpYURldmljZXMuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUVBNzI1Q0ExQUNBQkNCNTAwRUFE
MTdCIC8qIE5hdmlnYXRvck1lZGlhRGV2aWNlcy5jcHAgKi87IH07CiAJCTVFQTcyNUQ2MUFDQUJE
NTcwMEVBRDE3QiAvKiBOYXZpZ2F0b3JNZWRpYURldmljZXMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVFQTcyNUNCMUFDQUJDQjUwMEVBRDE3QiAvKiBO
YXZpZ2F0b3JNZWRpYURldmljZXMuaCAqLzsgfTsKIAkJNUVCQjg5MzExQzc3NzdGRjAwQzY1RDQx
IC8qIE1lZGlhUGF5bG9hZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNUVCQjg5MkYxQzc3NzdEMDAwQzY1RDQxIC8qIE1lZGlhUGF5bG9hZC5oICovOyB9
OwotCQk1RUJCODkzMjFDNzc3ODIzMDBDNjVENDEgLyogTWVkaWFFbmRwb2ludFNlc3Npb25Db25m
aWd1cmF0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1RUJCODkyRTFDNzc3N0QwMDBDNjVENDEgLyogTWVkaWFFbmRwb2ludFNlc3Npb25Db25maWd1
cmF0aW9uLmggKi87IH07CiAJCTVFQkI4OTMzMUM3Nzc4MjkwMEM2NUQ0MSAvKiBJY2VDYW5kaWRh
dGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVFQkI4
OTMwMUM3Nzc3RTEwMEM2NUQ0MSAvKiBJY2VDYW5kaWRhdGUuaCAqLzsgfTsKLQkJNUVCQjg5MzQx
Qzc3NzgyOTAwQzY1RDQxIC8qIE1lZGlhRW5kcG9pbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUVCQjg5MkExQzc3NzdEMDAwQzY1RDQxIC8qIE1l
ZGlhRW5kcG9pbnQuY3BwICovOyB9OwotCQk1RUJCODkzNTFDNzc3ODI5MDBDNjVENDEgLyogTWVk
aWFFbmRwb2ludC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNUVCQjg5MkIxQzc3NzdEMDAwQzY1RDQxIC8qIE1lZGlhRW5kcG9pbnQuaCAqLzsgfTsKLQkJ
NUVCQjg5MzYxQzc3NzgyOTAwQzY1RDQxIC8qIE1lZGlhRW5kcG9pbnRDb25maWd1cmF0aW9uLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVFQkI4OTJD
MUM3Nzc3RDAwMEM2NUQ0MSAvKiBNZWRpYUVuZHBvaW50Q29uZmlndXJhdGlvbi5jcHAgKi87IH07
Ci0JCTVFQkI4OTM3MUM3Nzc4MjkwMEM2NUQ0MSAvKiBNZWRpYUVuZHBvaW50Q29uZmlndXJhdGlv
bi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUVCQjg5
MkQxQzc3NzdEMDAwQzY1RDQxIC8qIE1lZGlhRW5kcG9pbnRDb25maWd1cmF0aW9uLmggKi87IH07
CiAJCTVFQkI4OTM5MUM3N0MzOTkwMEM2NUQ0MSAvKiBQZWVyTWVkaWFEZXNjcmlwdGlvbi5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUVCQjg5MzgxQzc3
QkRBNDAwQzY1RDQxIC8qIFBlZXJNZWRpYURlc2NyaXB0aW9uLmggKi87IH07CiAJCTVGMkRCQkU5
MTc4RTNDODEwMDE0MTQ4NiAvKiBDZXJ0aWZpY2F0ZUluZm9NYWMubW0gaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1RjJEQkJFNzE3OEUzMzJEMDAxNDE0ODYg
LyogQ2VydGlmaWNhdGVJbmZvTWFjLm1tICovOyB9OwogCQk1RkE5MDRDQTE3OEU2MUY1MDA0QzhB
MkQgLyogQ2VydGlmaWNhdGVJbmZvLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1RjJEQkJFODE3OEUzMzY5MDAxNDE0ODYgLyogQ2VydGlmaWNhdGVJbmZv
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTYz
OTAsNyArNjM3Nyw2IEBACiAJCUNEQUI2RDJFMTdDODE0RUUwMEM2MEIzNCAvKiBKU01lZGlhQ29u
dHJvbHNIb3N0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBDREFCNkQyQzE3QzgxNEVFMDBDNjBCMzQgLyogSlNNZWRpYUNvbnRyb2xzSG9zdC5oICovOyB9
OwogCQlDREFCNkQzMTE3QzkyNTk1MDBDNjBCMzQgLyogVXNlckFnZW50U2NyaXB0cy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RBQjZEMkYxN0M5MjU5
NTAwQzYwQjM0IC8qIFVzZXJBZ2VudFNjcmlwdHMuaCAqLzsgfTsKIAkJQ0RBQjZEMzIxN0M5MjU5
NTAwQzYwQjM0IC8qIFVzZXJBZ2VudFNjcmlwdHNEYXRhLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQUI2RDMwMTdDOTI1OTUwMEM2MEIzNCAvKiBV
c2VyQWdlbnRTY3JpcHRzRGF0YS5jcHAgKi87IH07Ci0JCUNEQUI2RDMyMTdDOTI1OTUwMEM2MEIz
NSAvKiBTRFBQcm9jZXNzb3JTY3JpcHRzRGF0YS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREFCNkQzMDE3QzkyNTk1MDBDNjBCMzUgLyogU0RQUHJv
Y2Vzc29yU2NyaXB0c0RhdGEuY3BwICovOyB9OwogCQlDREFFOEMwOTE3NDZCOTU3MDA1MzJENzgg
LyogUGxhdGZvcm1NZWRpYVNlc3Npb25NYW5hZ2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQUU4QzA3MTc0NkI5NTcwMDUzMkQ3OCAvKiBQbGF0
Zm9ybU1lZGlhU2Vzc2lvbk1hbmFnZXIuY3BwICovOyB9OwogCQlDREJFQUVBQzE5RDkyQjZDMDBC
RUJBODggLyogTWVkaWFTZWxlY3Rpb25Hcm91cEFWRk9iakMubW0gaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREJFQUVBQTE5RDkyQjZDMDBCRUJBODggLyog
TWVkaWFTZWxlY3Rpb25Hcm91cEFWRk9iakMubW0gKi87IH07CiAJCUNEQkVBRUFEMTlEOTJCNkMw
MEJFQkE4OCAvKiBNZWRpYVNlbGVjdGlvbkdyb3VwQVZGT2JqQy5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RCRUFFQUIxOUQ5MkI2QzAwQkVCQTg4IC8q
IE1lZGlhU2VsZWN0aW9uR3JvdXBBVkZPYmpDLmggKi87IH07CkBAIC05NjA2LDYgKzk1OTIsOCBA
QAogCQk0MUFCRTY3OTFEMDU4MEQ1MDA2RDg2MkQgLyogQ3Jvc3NPcmlnaW5QcmVmbGlnaHRDaGVj
a2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENyb3NzT3JpZ2lu
UHJlZmxpZ2h0Q2hlY2tlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxQUJF
NjdBMUQwNTgwRDUwMDZEODYyRCAvKiBDcm9zc09yaWdpblByZWZsaWdodENoZWNrZXIuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ3Jvc3NPcmlnaW5QcmVmbGlnaHRDaGVja2Vy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxQUQ3NTM5MUNFRjZCQ0UwMEEzMTQ4
NiAvKiBGZXRjaE9wdGlvbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRmV0
Y2hPcHRpb25zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQxQjI4QjEyMUY4NTAx
QTMwMEZCNTJBQyAvKiBNZWRpYUVuZHBvaW50Q29uZmlndXJhdGlvbi5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBNZWRpYUVuZHBvaW50Q29uZmlndXJhdGlvbi5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk0MUIyOEIxMzFGODUwMUE0MDBGQjUyQUMgLyogTWVkaWFF
bmRwb2ludENvbmZpZ3VyYXRpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gTWVkaWFFbmRwb2ludENvbmZpZ3VyYXRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk0MUIyQTYyNTFFRjFCRjYwMDAyQjlEN0EgLyogV2ViQXVkaW9Tb3VyY2VQcm92
aWRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJBdWRpb1NvdXJjZVByb3ZpZGVyLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxQjQ1OURBMUY0Q0FEQjkwMDAwRjZGRCAvKiBSZWFkYWJs
ZVN0cmVhbS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZWFkYWJsZVN0cmVh
bS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MUI0NTlFRDFGNTVFQkM3MDAwMEY2
RkQgLyogUmVhZGFibGVTdHJlYW0uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gUmVhZGFibGVTdHJlYW0uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
MTA3MzQsOCArMTA3MjIsNiBAQAogCQk1REIxQkM2ODEwNzE1QTY0MDBFRkFBNDkgLyogVHJhbnNm
b3JtU291cmNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRyYW5zZm9ybVNv
dXJjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1REIxQkM2OTEwNzE1QTY0MDBF
RkFBNDkgLyogVHJhbnNmb3JtU291cmNlTGlieHNsdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBUcmFuc2Zvcm1Tb3VyY2VMaWJ4c2x0LmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNURGRUJBQjYxODU5MkI2RDAwQzc1QkVCIC8qIFdlYktpdEF2YWls
YWJpbGl0eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJLaXRBdmFpbGFi
aWxpdHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNUUxNkEyRTIxQkZBNjRGQjAw
MjlBMjFFIC8qIE1lZGlhRW5kcG9pbnRQZWVyQ29ubmVjdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNZWRpYUVuZHBvaW50UGVlckNvbm5lY3Rpb24uY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1RTE2QTJFMzFCRkE2NEZCMDAyOUEyMUUgLyog
TWVkaWFFbmRwb2ludFBlZXJDb25uZWN0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IE1lZGlhRW5kcG9pbnRQZWVyQ29ubmVjdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk1RTJDNDM0RDFCQ0VFMkU1MDAwMUUyQkMgLyogUGVlckNvbm5lY3Rpb25CYWNr
ZW5kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBlZXJDb25uZWN0aW9uQmFj
a2VuZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1RTJDNDM1NDFCQ0VFMzBEMDAw
MUUyQkMgLyogUlRDUGVlckNvbm5lY3Rpb24uanMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmphdmFz
Y3JpcHQ7IHBhdGggPSBSVENQZWVyQ29ubmVjdGlvbi5qczsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNUUyQzQzNTUxQkNFRTMwRDAwMDFFMkJDIC8qIFJUQ1BlZXJDb25uZWN0aW9uSW50
ZXJuYWxzLmpzICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5qYXZhc2NyaXB0OyBwYXRoID0gUlRDUGVl
ckNvbm5lY3Rpb25JbnRlcm5hbHMuanM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0x
MDc2MywyOSArMTA3NDksMTYgQEAKIAkJNUUyQzQzNzYxQkNGOUEwQjAwMDFFMkJDIC8qIFJUQ1Bl
ZXJDb25uZWN0aW9uQnVpbHRpbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
UlRDUGVlckNvbm5lY3Rpb25CdWlsdGlucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk1RTJDNDM3ODFCQ0Y5QTBCMDAwMUUyQkMgLyogUlRDUGVlckNvbm5lY3Rpb25JbnRlcm5hbHNC
dWlsdGlucy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSVENQZWVy
Q29ubmVjdGlvbkludGVybmFsc0J1aWx0aW5zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNUUyQzQzNzkxQkNGOUEwQjAwMDFFMkJDIC8qIFJUQ1BlZXJDb25uZWN0aW9uSW50ZXJu
YWxzQnVpbHRpbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUlRDUGVlckNv
bm5lY3Rpb25JbnRlcm5hbHNCdWlsdGlucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQk1RTRFQUIwMjFEMDcxNjRDMDAwNkExODQgLyogTWVkaWFFbmRwb2ludFNlc3Npb25EZXNjcmlw
dGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNZWRpYUVuZHBv
aW50U2Vzc2lvbkRlc2NyaXB0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
NUU0RUFCMDMxRDA3MTY0QzAwMDZBMTg0IC8qIE1lZGlhRW5kcG9pbnRTZXNzaW9uRGVzY3JpcHRp
b24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWVkaWFFbmRwb2ludFNlc3Np
b25EZXNjcmlwdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1RTVFMkIxMDFD
RkMzRTRCMDAwQzBEODUgLyogUlRDUnRwVHJhbnNjZWl2ZXIuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gUlRDUnRwVHJhbnNjZWl2ZXIuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk1RTVFMkIxMTFDRkMzRTRCMDAwQzBEODUgLyogUlRDUnRwVHJhbnNj
ZWl2ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUlRDUnRwVHJhbnNjZWl2
ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUU1RTJCMTIxQ0ZDM0U0QjAwMEMw
RDg1IC8qIFJUQ1J0cFRyYW5zY2VpdmVyLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBSVENS
dHBUcmFuc2NlaXZlci5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVFNjY1MzA5
MURBNDM3QkYwMEZERDg0QyAvKiBSVENJY2VUcmFuc3BvcnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gUlRDSWNlVHJhbnNwb3J0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCTVFQTNENkREMUM4NTlENTMwMDMwMEJCQiAvKiBNb2NrTWVkaWFFbmRwb2ludC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNb2NrTWVkaWFFbmRwb2ludC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTVFQTNENkRFMUM4NTlENTMwMDMwMEJC
QiAvKiBNb2NrTWVkaWFFbmRwb2ludC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBNb2NrTWVkaWFFbmRwb2ludC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1RUEz
RDZFMTFDODU5REFBMDAzMDBCQkIgLyogU0RQUHJvY2Vzc29yLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNEUFByb2Nlc3Nvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCTVFQTNENkUyMUM4NTlEQUEwMDMwMEJCQiAvKiBTRFBQcm9jZXNzb3IuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU0RQUHJvY2Vzc29yLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTVFQTNENkU1MUM4NUE5QzMwMDMwMEJCQiAvKiBTRFBQcm9j
ZXNzb3JTY3JpcHRSZXNvdXJjZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBTRFBQcm9jZXNzb3JTY3JpcHRSZXNvdXJjZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCTVFQTNENkU2MUM4NUE5QzMwMDMwMEJCQiAvKiBTRFBQcm9jZXNzb3JTY3JpcHRS
ZXNvdXJjZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTRFBQcm9jZXNzb3JT
Y3JpcHRSZXNvdXJjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1RUE3MjVDQTFB
Q0FCQ0I1MDBFQUQxN0IgLyogTmF2aWdhdG9yTWVkaWFEZXZpY2VzLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE5hdmlnYXRvck1lZGlhRGV2aWNlcy5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVFQTcyNUNCMUFDQUJDQjUwMEVBRDE3QiAvKiBOYXZp
Z2F0b3JNZWRpYURldmljZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTmF2
aWdhdG9yTWVkaWFEZXZpY2VzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVFQTcy
NUNDMUFDQUJDQjUwMEVBRDE3QiAvKiBOYXZpZ2F0b3JNZWRpYURldmljZXMuaWRsICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gdGV4dDsgcGF0aCA9IE5hdmlnYXRvck1lZGlhRGV2aWNlcy5pZGw7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTVFQTcyNUNEMUFDQUJDRDkwMEVBRDE3QiAvKiBNZWRpYURldmljZXMu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWVkaWFEZXZpY2VzLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUVBNzI1Q0UxQUNBQkNEOTAwRUFEMTdC
IC8qIE1lZGlhRGV2aWNlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNZWRp
YURldmljZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUVBNzI1Q0YxQUNBQkNE
OTAwRUFEMTdCIC8qIE1lZGlhRGV2aWNlcy5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gTWVk
aWFEZXZpY2VzLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNUVCQjg5MkExQzc3
NzdEMDAwQzY1RDQxIC8qIE1lZGlhRW5kcG9pbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gTWVkaWFFbmRwb2ludC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCTVFQkI4OTJCMUM3Nzc3RDAwMEM2NUQ0MSAvKiBNZWRpYUVuZHBvaW50LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1lZGlhRW5kcG9pbnQuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJNUVCQjg5MkMxQzc3NzdEMDAwQzY1RDQxIC8qIE1lZGlhRW5kcG9p
bnRDb25maWd1cmF0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IE1lZGlhRW5kcG9pbnRDb25maWd1cmF0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJNUVCQjg5MkQxQzc3NzdEMDAwQzY1RDQxIC8qIE1lZGlhRW5kcG9pbnRDb25maWd1cmF0
aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1lZGlhRW5kcG9pbnRDb25m
aWd1cmF0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTVFQkI4OTJFMUM3Nzc3
RDAwMEM2NUQ0MSAvKiBNZWRpYUVuZHBvaW50U2Vzc2lvbkNvbmZpZ3VyYXRpb24uaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWVkaWFFbmRwb2ludFNlc3Npb25Db25maWd1cmF0
aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVFQkI4OTJGMUM3Nzc3RDAwMEM2
NUQ0MSAvKiBNZWRpYVBheWxvYWQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
TWVkaWFQYXlsb2FkLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVFQkI4OTMwMUM3
Nzc3RTEwMEM2NUQ0MSAvKiBJY2VDYW5kaWRhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gSWNlQ2FuZGlkYXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVF
QkI4OTM4MUM3N0JEQTQwMEM2NUQ0MSAvKiBQZWVyTWVkaWFEZXNjcmlwdGlvbi5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQZWVyTWVkaWFEZXNjcmlwdGlvbi5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTUxNTYsNyArMTUxMjksNiBAQAogCQlDREFCNkQyQzE3
QzgxNEVFMDBDNjBCMzQgLyogSlNNZWRpYUNvbnRyb2xzSG9zdC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBKU01lZGlhQ29udHJvbHNIb3N0Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUNEQUI2RDJGMTdDOTI1OTUwMEM2MEIzNCAvKiBVc2VyQWdlbnRTY3JpcHRz
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFVzZXJBZ2VudFNjcmlwdHMuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0RBQjZEMzAxN0M5MjU5NTAwQzYwQjM0IC8q
IFVzZXJBZ2VudFNjcmlwdHNEYXRhLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFVzZXJBZ2VudFNjcmlwdHNEYXRhLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJQ0RBQjZEMzAxN0M5MjU5NTAwQzYwQjM1IC8qIFNEUFByb2Nlc3NvclNjcmlwdHNEYXRh
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNEUFByb2Nlc3NvclNj
cmlwdHNEYXRhLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0RBRThDMDcxNzQ2
Qjk1NzAwNTMyRDc4IC8qIFBsYXRmb3JtTWVkaWFTZXNzaW9uTWFuYWdlci5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQbGF0Zm9ybU1lZGlhU2Vzc2lvbk1hbmFnZXIu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDREFFOEMwODE3NDZCOTU3MDA1MzJE
NzggLyogUGxhdGZvcm1NZWRpYVNlc3Npb25NYW5hZ2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFBsYXRmb3JtTWVkaWFTZXNzaW9uTWFuYWdlci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlDREJFQUVBQTE5RDkyQjZDMDBCRUJBODggLyogTWVkaWFTZWxlY3Rp
b25Hcm91cEFWRk9iakMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGgg
PSBNZWRpYVNlbGVjdGlvbkdyb3VwQVZGT2JqQy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTE2NDAzLDEwICsxNjM3NSw2IEBACiAJCQkJMDdBQkVGNkQxRDhBMUM3NjAwRjIxOTcy
IC8qIE1lZGlhRGV2aWNlc0VudW1lcmF0aW9uUmVxdWVzdC5oICovLAogCQkJCTA3Mzk0RUM3MUJB
QjJDQ0QwMEJFOTlDRCAvKiBNZWRpYURldmljZXNSZXF1ZXN0LmNwcCAqLywKIAkJCQkwNzM5NEVD
OTFCQUIyQ0Q3MDBCRTk5Q0QgLyogTWVkaWFEZXZpY2VzUmVxdWVzdC5oICovLAotCQkJCTVFMTZB
MkUyMUJGQTY0RkIwMDI5QTIxRSAvKiBNZWRpYUVuZHBvaW50UGVlckNvbm5lY3Rpb24uY3BwICov
LAotCQkJCTVFMTZBMkUzMUJGQTY0RkIwMDI5QTIxRSAvKiBNZWRpYUVuZHBvaW50UGVlckNvbm5l
Y3Rpb24uaCAqLywKLQkJCQk1RTRFQUIwMjFEMDcxNjRDMDAwNkExODQgLyogTWVkaWFFbmRwb2lu
dFNlc3Npb25EZXNjcmlwdGlvbi5jcHAgKi8sCi0JCQkJNUU0RUFCMDMxRDA3MTY0QzAwMDZBMTg0
IC8qIE1lZGlhRW5kcG9pbnRTZXNzaW9uRGVzY3JpcHRpb24uaCAqLywKIAkJCQkwNzIyMUI0QzE3
Q0VDMzI3MDA4NDhFNTEgLyogTWVkaWFTdHJlYW0uY3BwICovLAogCQkJCTA3MjIxQjREMTdDRUMz
MjcwMDg0OEU1MSAvKiBNZWRpYVN0cmVhbS5oICovLAogCQkJCTA3MjIxQjRFMTdDRUMzMjcwMDg0
OEU1MSAvKiBNZWRpYVN0cmVhbS5pZGwgKi8sCkBAIC0xNjUwMSw4ICsxNjQ2OSw2IEBACiAJCQkJ
NUUyQzQzNjQxQkNFRTM3MjAwMDFFMkJDIC8qIFJUQ1RyYWNrRXZlbnQuY3BwICovLAogCQkJCTVF
MkM0MzY1MUJDRUUzNzIwMDAxRTJCQyAvKiBSVENUcmFja0V2ZW50LmggKi8sCiAJCQkJNUUyQzQz
NjYxQkNFRTM3MjAwMDFFMkJDIC8qIFJUQ1RyYWNrRXZlbnQuaWRsICovLAotCQkJCTVFQTNENkUx
MUM4NTlEQUEwMDMwMEJCQiAvKiBTRFBQcm9jZXNzb3IuY3BwICovLAotCQkJCTVFQTNENkUyMUM4
NTlEQUEwMDMwMEJCQiAvKiBTRFBQcm9jZXNzb3IuaCAqLywKIAkJCQkwNzIyMUI4RDE3Q0VDMzI3
MDA4NDhFNTEgLyogVXNlck1lZGlhQ2xpZW50LmggKi8sCiAJCQkJMDcyMjFCOEUxN0NFQzMyNzAw
ODQ4RTUxIC8qIFVzZXJNZWRpYUNvbnRyb2xsZXIuY3BwICovLAogCQkJCTA3MjIxQjhGMTdDRUMz
MjcwMDg0OEU1MSAvKiBVc2VyTWVkaWFDb250cm9sbGVyLmggKi8sCkBAIC0xNjUyNSwxMSArMTY0
OTEsOCBAQAogCQkJCTVFQkI4OTMwMUM3Nzc3RTEwMEM2NUQ0MSAvKiBJY2VDYW5kaWRhdGUuaCAq
LywKIAkJCQkxQkU1QkZDMTFENTE1NzE1MDAxNjY2RDkgLyogTWVkaWFDb25zdHJhaW50cy5jcHAg
Ki8sCiAJCQkJMDcyMjFCOTkxN0NGMEFENDAwODQ4RTUxIC8qIE1lZGlhQ29uc3RyYWludHMuaCAq
LywKLQkJCQk1RUJCODkyQTFDNzc3N0QwMDBDNjVENDEgLyogTWVkaWFFbmRwb2ludC5jcHAgKi8s
Ci0JCQkJNUVCQjg5MkIxQzc3NzdEMDAwQzY1RDQxIC8qIE1lZGlhRW5kcG9pbnQuaCAqLywKLQkJ
CQk1RUJCODkyQzFDNzc3N0QwMDBDNjVENDEgLyogTWVkaWFFbmRwb2ludENvbmZpZ3VyYXRpb24u
Y3BwICovLAotCQkJCTVFQkI4OTJEMUM3Nzc3RDAwMEM2NUQ0MSAvKiBNZWRpYUVuZHBvaW50Q29u
ZmlndXJhdGlvbi5oICovLAotCQkJCTVFQkI4OTJFMUM3Nzc3RDAwMEM2NUQ0MSAvKiBNZWRpYUVu
ZHBvaW50U2Vzc2lvbkNvbmZpZ3VyYXRpb24uaCAqLywKKwkJCQk0MUIyOEIxMzFGODUwMUE0MDBG
QjUyQUMgLyogTWVkaWFFbmRwb2ludENvbmZpZ3VyYXRpb24uY3BwICovLAorCQkJCTQxQjI4QjEy
MUY4NTAxQTMwMEZCNTJBQyAvKiBNZWRpYUVuZHBvaW50Q29uZmlndXJhdGlvbi5oICovLAogCQkJ
CTVFQkI4OTJGMUM3Nzc3RDAwMEM2NUQ0MSAvKiBNZWRpYVBheWxvYWQuaCAqLywKIAkJCQkwNzBG
NTQ5NzE3RjEyRjZCMDAxNjlFMDQgLyogTWVkaWFTdHJlYW1Db25zdHJhaW50c1ZhbGlkYXRpb25D
bGllbnQuaCAqLywKIAkJCQkwNzExNTg4RjE3REY2MzM3MDBFREZFMkIgLyogTWVkaWFTdHJlYW1Q
cml2YXRlLmNwcCAqLywKQEAgLTE2NTY3LDggKzE2NTMwLDYgQEAKIAkJCQkwNzIyMUJBRDE3Q0Yw
QUQ0MDA4NDhFNTEgLyogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uUmVxdWVzdC5oICovLAogCQkJCTMx
MzU5MTA1MUU3RERDNjAwMEYzMDYzMCAvKiBSVENTaWduYWxpbmdTdGF0ZS5oICovLAogCQkJCTA3
MjIxQkIwMTdDRjBBRDQwMDg0OEU1MSAvKiBSVENWb2lkUmVxdWVzdC5oICovLAotCQkJCTVFQTNE
NkU1MUM4NUE5QzMwMDMwMEJCQiAvKiBTRFBQcm9jZXNzb3JTY3JpcHRSZXNvdXJjZS5jcHAgKi8s
Ci0JCQkJNUVBM0Q2RTYxQzg1QTlDMzAwMzAwQkJCIC8qIFNEUFByb2Nlc3NvclNjcmlwdFJlc291
cmNlLmggKi8sCiAJCQkJMDcwRTgxRDAxQkYyNzY1NjAwMUZEQTQ4IC8qIFZpZGVvVHJhY2tQcml2
YXRlTWVkaWFTdHJlYW0uaCAqLywKIAkJCQk0MUIyQTYyNTFFRjFCRjYwMDAyQjlEN0EgLyogV2Vi
QXVkaW9Tb3VyY2VQcm92aWRlci5oICovLAogCQkJKTsKQEAgLTE5MjQ1LDggKzE5MjA2LDYgQEAK
IAkJCQkwNzdCNjQxNTFCOTVGNzAzMDAzRTlBRDUgLyogTWVkaWFQbGF5YmFja1RhcmdldE1vY2su
aCAqLywKIAkJCQkwNzdCNjQxMDFCOTRGMTJFMDAzRTlBRDUgLyogTWVkaWFQbGF5YmFja1Rhcmdl
dFBpY2tlck1vY2suY3BwICovLAogCQkJCTA3N0I2NDExMUI5NEYxMkUwMDNFOUFENSAvKiBNZWRp
YVBsYXliYWNrVGFyZ2V0UGlja2VyTW9jay5oICovLAotCQkJCTVFQTNENkREMUM4NTlENTMwMDMw
MEJCQiAvKiBNb2NrTWVkaWFFbmRwb2ludC5jcHAgKi8sCi0JCQkJNUVBM0Q2REUxQzg1OUQ1MzAw
MzAwQkJCIC8qIE1vY2tNZWRpYUVuZHBvaW50LmggKi8sCiAJCQkJMDdENkE0RjExQkVENUY4ODAw
MTc0MTQ2IC8qIE1vY2tSZWFsdGltZUF1ZGlvU291cmNlLmNwcCAqLywKIAkJCQkwN0Q2QTRGMjFC
RUQ1Rjg4MDAxNzQxNDYgLyogTW9ja1JlYWx0aW1lQXVkaW9Tb3VyY2UuaCAqLywKIAkJCQkwN0Q2
QTRFRDFCRUNGMkQyMDAxNzQxNDYgLyogTW9ja1JlYWx0aW1lTWVkaWFTb3VyY2UuY3BwICovLApA
QCAtMTk0MDMsNyArMTkzNjIsNiBAQAogCQkJCTVFMkM0Mzc2MUJDRjlBMEIwMDAxRTJCQyAvKiBS
VENQZWVyQ29ubmVjdGlvbkJ1aWx0aW5zLmggKi8sCiAJCQkJNUUyQzQzNzgxQkNGOUEwQjAwMDFF
MkJDIC8qIFJUQ1BlZXJDb25uZWN0aW9uSW50ZXJuYWxzQnVpbHRpbnMuY3BwICovLAogCQkJCTVF
MkM0Mzc5MUJDRjlBMEIwMDAxRTJCQyAvKiBSVENQZWVyQ29ubmVjdGlvbkludGVybmFsc0J1aWx0
aW5zLmggKi8sCi0JCQkJQ0RBQjZEMzAxN0M5MjU5NTAwQzYwQjM1IC8qIFNEUFByb2Nlc3NvclNj
cmlwdHNEYXRhLmNwcCAqLywKIAkJCQk0M0I4NUVEMjE4Q0JFQzUyMDBFMzFBRjQgLyogU2VsZWN0
b3JQc2V1ZG9DbGFzc0FuZENvbXBhdGliaWxpdHlFbGVtZW50TWFwLmNwcCAqLywKIAkJCQk0M0I4
NUVEMzE4Q0JFQzUyMDBFMzFBRjQgLyogU2VsZWN0b3JQc2V1ZG9DbGFzc0FuZENvbXBhdGliaWxp
dHlFbGVtZW50TWFwLmdwZXJmICovLAogCQkJCTI2QUEwRjlEMThEMkExOEIwMDQxOTM4MSAvKiBT
ZWxlY3RvclBzZXVkb0VsZW1lbnRUeXBlTWFwLmNwcCAqLywKQEAgLTI2MTI5LDYgKzI2MDg3LDEy
IEBACiAJCQljaGlsZHJlbiA9ICgKIAkJCQlDRTI2MTZBNDE4N0U2NUMxMDA3OTU1RjMgLyogaW9z
ICovLAogCQkJCTJENTAzNjY2MUJDREREQzQwMEUyMEJCMyAvKiBtYWMgKi8sCisJCQkJN0NEMEUy
QjYxRjgwQTQ4MjAwMTZBNENFIC8qIEFib3J0Q29udHJvbGxlci5jcHAgKi8sCisJCQkJN0NEMEUy
QjUxRjgwQTQ4MjAwMTZBNENFIC8qIEFib3J0Q29udHJvbGxlci5oICovLAorCQkJCTdDRDBFMkI3
MUY4MEE0ODIwMDE2QTRDRSAvKiBBYm9ydENvbnRyb2xsZXIuaWRsICovLAorCQkJCTdDRDBFMkJE
MUY4MEE1NkUwMDE2QTRDRSAvKiBBYm9ydFNpZ25hbC5jcHAgKi8sCisJCQkJN0NEMEUyQkMxRjgw
QTU2RTAwMTZBNENFIC8qIEFib3J0U2lnbmFsLmggKi8sCisJCQkJN0NEMEUyQkUxRjgwQTU2RTAw
MTZBNENFIC8qIEFib3J0U2lnbmFsLmlkbCAqLywKIAkJCQk3QzUyMjI5NzFFMURBRTE2MDAyQ0I4
RjcgLyogQWN0aXZlRE9NQ2FsbGJhY2suY3BwICovLAogCQkJCTdDNTIyMjk4MUUxREFFMTYwMDJD
QjhGNyAvKiBBY3RpdmVET01DYWxsYmFjay5oICovLAogCQkJCTdDRDBCQTAyMUI4Rjc5QzkwMDVD
RUJCRSAvKiBBY3RpdmVET01DYWxsYmFja01pY3JvdGFzay5jcHAgKi8sCkBAIC0yNjEzNiwxMiAr
MjYxMDAsNiBAQAogCQkJCUUxQzRERTZEMEVBNzVDNjUwMDIzQ0NENiAvKiBBY3RpdmVET01PYmpl
Y3QuY3BwICovLAogCQkJCUUxQzRERTY4MEVBNzVDMUUwMDIzQ0NENiAvKiBBY3RpdmVET01PYmpl
Y3QuaCAqLywKIAkJCQk4M0JCNUM4NzFENUQ2RjNBMDA1QTcxRjQgLyogQWxsRGVzY2VuZGFudHND
b2xsZWN0aW9uLmggKi8sCi0JCQkJN0NEMEUyQjUxRjgwQTQ4MjAwMTZBNENFIC8qIEFib3J0Q29u
dHJvbGxlci5oICovLAotCQkJCTdDRDBFMkI2MUY4MEE0ODIwMDE2QTRDRSAvKiBBYm9ydENvbnRy
b2xsZXIuY3BwICovLAotCQkJCTdDRDBFMkI3MUY4MEE0ODIwMDE2QTRDRSAvKiBBYm9ydENvbnRy
b2xsZXIuaWRsICovLAotCQkJCTdDRDBFMkJDMUY4MEE1NkUwMDE2QTRDRSAvKiBBYm9ydFNpZ25h
bC5oICovLAotCQkJCTdDRDBFMkJEMUY4MEE1NkUwMDE2QTRDRSAvKiBBYm9ydFNpZ25hbC5jcHAg
Ki8sCi0JCQkJN0NEMEUyQkUxRjgwQTU2RTAwMTZBNENFIC8qIEFib3J0U2lnbmFsLmlkbCAqLywK
IAkJCQkzMTk4NDdGRTFBMUQ4MTY3MDBBMTMzMTggLyogQW5pbWF0aW9uRXZlbnQuY3BwICovLAog
CQkJCTMxOTg0N0ZGMUExRDgxNjcwMEExMzMxOCAvKiBBbmltYXRpb25FdmVudC5oICovLAogCQkJ
CTMxOTg0ODAwMUExRDgxNjcwMEExMzMxOCAvKiBBbmltYXRpb25FdmVudC5pZGwgKi8sCkBAIC0y
NzAzNiw2ICsyNjk5NCw4IEBACiAJCQlpc2EgPSBQQlhIZWFkZXJzQnVpbGRQaGFzZTsKIAkJCWJ1
aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CiAJCQlmaWxlcyA9ICgKKwkJCQk3Q0QwRTJCODFG
ODBBNDgyMDAxNkE0Q0UgLyogQWJvcnRDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQk3
Q0QwRTJCRjFGODBBNTZFMDAxNkE0Q0UgLyogQWJvcnRTaWduYWwuaCBpbiBIZWFkZXJzICovLAog
CQkJCUY0ODIyMzEzMUUzODZFMjQwMDY2RkM3OSAvKiBBYnN0cmFjdFBhc3RlYm9hcmQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTQxRTFCMUQxMEZGNTk4NjkwMDU3NkIzQiAvKiBBYnN0cmFjdFdvcmtl
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMjlBODEyMkUwRkJCOUMxRDAwNTEwMjkzIC8qIEFjY2Vz
c2liaWxpdHlBUklBR3JpZENlbGwuaCBpbiBIZWFkZXJzICovLApAQCAtMjgzMzMsNiArMjgyOTMs
OCBAQAogCQkJCTJEMEI0QUFCMThEQTFDQ0QwMDQzNERFMSAvKiBJT1N1cmZhY2UuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTFDMjFFNTdEMTgzRUQxRkYwMDFDMjg5RCAvKiBJT1N1cmZhY2VQb29sLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwN0FDNDcwMjE5NTIxMDIxMDBFRTk3MjMgLyogSVNPVlRUQ3Vl
LmggaW4gSGVhZGVycyAqLywKKwkJCQk3QzMwRDk4NDFGODE1QUVDMDAyNjgzNTYgLyogSlNBYm9y
dENvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTdDMzBEOTg2MUY4MTVBRUMwMDI2ODM1
NiAvKiBKU0Fib3J0U2lnbmFsLmggaW4gSGVhZGVycyAqLywKIAkJCQk0MThGODgwNTBGRjk1N0FG
MDA4MEYwNDUgLyogSlNBYnN0cmFjdFdvcmtlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTcwNDQw
NUExRTUzOTM2MjAwMzU2NjAxIC8qIEpTQWVzQ2JjQ2ZiUGFyYW1zLmggaW4gSGVhZGVycyAqLywK
IAkJCQk1N0UxRTVBRDFFOEREMDlCMDBFRTM3QzkgLyogSlNBZXNDdHJQYXJhbXMuaCBpbiBIZWFk
ZXJzICovLApAQCAtMjkyNTYsMTEgKzI5MjE4LDcgQEAKIAkJCQkwN0ZFOTlERDE4ODA3QTdEMDAy
NTY2NDggLyogTWVkaWFFbGVtZW50U2Vzc2lvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkQ5QkY3
MDYxREJGQkIyNDAwN0E3RDk5IC8qIE1lZGlhRW5jcnlwdGVkRXZlbnQuaCBpbiBIZWFkZXJzICov
LAogCQkJCTJEOUJGNzA4MURCRkJCMjQwMDdBN0Q5OSAvKiBNZWRpYUVuY3J5cHRlZEV2ZW50SW5p
dC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNUVCQjg5MzUxQzc3NzgyOTAwQzY1RDQxIC8qIE1lZGlh
RW5kcG9pbnQuaCBpbiBIZWFkZXJzICovLAotCQkJCTVFQkI4OTM3MUM3Nzc4MjkwMEM2NUQ0MSAv
KiBNZWRpYUVuZHBvaW50Q29uZmlndXJhdGlvbi5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNUUxNkEy
RTQxQkZBNjUwQjAwMjlBMjFFIC8qIE1lZGlhRW5kcG9pbnRQZWVyQ29ubmVjdGlvbi5oIGluIEhl
YWRlcnMgKi8sCi0JCQkJNUVCQjg5MzIxQzc3NzgyMzAwQzY1RDQxIC8qIE1lZGlhRW5kcG9pbnRT
ZXNzaW9uQ29uZmlndXJhdGlvbi5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNUU0RUFCMDQxRDA3MTY2
QTAwMDZBMTg0IC8qIE1lZGlhRW5kcG9pbnRTZXNzaW9uRGVzY3JpcHRpb24uaCBpbiBIZWFkZXJz
ICovLAorCQkJCTQxQjI4QjE1MUY4NTAxRDMwMEZCNTJBQyAvKiBNZWRpYUVuZHBvaW50Q29uZmln
dXJhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTQ0NjEzQUQwQ0Q2MzMxMDAwRkFEQTc1IC8q
IE1lZGlhRXJyb3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTRFMTk1OTIyMEEzOURBQkEwMDIyMEZF
NSAvKiBNZWRpYUZlYXR1cmVOYW1lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDdBNkQxRUMxNDkx
MTM3NzAwMDUxRDBDIC8qIE1lZGlhRnJhZ21lbnRVUklQYXJzZXIuaCBpbiBIZWFkZXJzICovLApA
QCAtMjkzNDUsMTEgKzI5MzAzLDkgQEAKIAkJCQk1MkYxMDg2NjE2MkI2REE4MDA5QUM4MUUgLyog
TWl4ZWRDb250ZW50Q2hlY2tlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQ0RGMkIwMTExODIwNTQw
NjAwRjJCNDI0IC8qIE1vY2tCb3guaCBpbiBIZWFkZXJzICovLAogCQkJCUNERjRCNzI0MUUwM0JG
ODEwMEUyMzVBMiAvKiBNb2NrQ0RNRmFjdG9yeS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJN0MzMEQ5
ODQxRjgxNUFFQzAwMjY4MzU2IC8qIEpTQWJvcnRDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLywK
IAkJCQlDREY0QjcyMDFFMDNCRjZGMDBFMjM1QTIgLyogTW9ja0NETUZhY3RvcnkuaWRsIGluIEhl
YWRlcnMgKi8sCiAJCQkJNTEwNThBRTAxRDY3QzIyOTAwOUE1MzhDIC8qIE1vY2tHYW1lcGFkLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk1MTA1OEFFMjFENjdDMjI5MDA5QTUzOEMgLyogTW9ja0dhbWVw
YWRQcm92aWRlci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNUVBM0Q2REYxQzg1OUQ3RjAwMzAwQkJC
IC8qIE1vY2tNZWRpYUVuZHBvaW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlDREYyQjAxMzE4MjA1
NDA2MDBGMkI0MjQgLyogTW9ja01lZGlhUGxheWVyTWVkaWFTb3VyY2UuaCBpbiBIZWFkZXJzICov
LAogCQkJCUNERjJCMDE1MTgyMDU0MDYwMEYyQjQyNCAvKiBNb2NrTWVkaWFTb3VyY2VQcml2YXRl
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwN0Q2QTRGNDFCRUQ1Rjg4MDAxNzQxNDYgLyogTW9ja1Jl
YWx0aW1lQXVkaW9Tb3VyY2UuaCBpbiBIZWFkZXJzICovLApAQCAtMjk5ODQsOCArMjk5NDAsNiBA
QAogCQkJCTgzQzU3OTVEMURBNUMzMDEwMDZGQUNBOCAvKiBTY3JvbGxUb09wdGlvbnMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTkzQzA5Qzg2MEIwNjU3QUEwMDVBQkQ0RCAvKiBTY3JvbGxUeXBlcy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQkM2RDZFMjYwOUFGOTQzNTAwRjU5NzU5IC8qIFNjcm9sbFZp
ZXcuaCBpbiBIZWFkZXJzICovLAotCQkJCTVFQTNENkU0MUM4NTlEQzEwMDMwMEJCQiAvKiBTRFBQ
cm9jZXNzb3IuaCBpbiBIZWFkZXJzICovLAotCQkJCTVFQTNENkU4MUM4NUE5REIwMDMwMEJCQiAv
KiBTRFBQcm9jZXNzb3JTY3JpcHRSZXNvdXJjZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRjU1QjNE
RDIxMjUxRjEyRDAwM0VGMjY5IC8qIFNlYXJjaElucHV0VHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQUI3MTcwODkwQjMxMTgwODAwMTcxMjNFIC8qIFNlYXJjaFBvcHVwTWVudS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEU3MDU4RjQxQkM1Q0VEQTAwNDVBNTA3IC8qIFNlYXJjaFBvcHVwTWVudUNv
Y29hLmggaW4gSGVhZGVycyAqLywKQEAgLTMwMjM3LDcgKzMwMTkxLDYgQEAKIAkJCQlCMjIyNzk5
NTBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUIyMjI3OTk4MEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdBbmltYXRpb25FbGVt
ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk0MzlEMzM0NTEzQTY5MTFDMDBDMjBGNEYgLyogU1ZH
QW5pbWF0b3JGYWN0b3J5LmggaW4gSGVhZGVycyAqLywKLQkJCQk3QzMwRDk4NjFGODE1QUVDMDAy
NjgzNTYgLyogSlNBYm9ydFNpZ25hbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDhGQjNGODQxM0JD
NzU0QzAwOTlGQzE4IC8qIFNWR0F0dHJpYnV0ZVRvUHJvcGVydHlNYXAuaCBpbiBIZWFkZXJzICov
LAogCQkJCUIyMjI3OTlDMEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdDaXJjbGVFbGVtZW50LmggaW4g
SGVhZGVycyAqLywKIAkJCQlCMjIyNzk5RjBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHQ2xpcFBhdGhF
bGVtZW50LmggaW4gSGVhZGVycyAqLywKQEAgLTMwMjgxLDcgKzMwMjM0LDYgQEAKIAkJCQlCMjIy
N0EwNjBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHRkVUaWxlRWxlbWVudC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQjIyMjdBMDkwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR0ZFVHVyYnVsZW5jZUVsZW1lbnQu
aCBpbiBIZWFkZXJzICovLAogCQkJCTg0NUU3MkZDMEZEMjYyMzkwMEE4N0Q3OSAvKiBTVkdGaWx0
ZXIuaCBpbiBIZWFkZXJzICovLAotCQkJCTdDRDBFMkJGMUY4MEE1NkUwMDE2QTRDRSAvKiBBYm9y
dFNpZ25hbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDgxRUJGM0IwRkQzNEY0MTAwREE3NTU5IC8q
IFNWR0ZpbHRlckJ1aWxkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyMjI3QTBDMEQwMEJGMjIw
MDcxQjc4MiAvKiBTVkdGaWx0ZXJFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjIyN0Ew
RjBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVz
LmggaW4gSGVhZGVycyAqLywKQEAgLTMwNzM2LDcgKzMwNjg4LDYgQEAKIAkJCQk3N0ExN0E3ODEy
RjI4NjQyMDA0RTAyRjYgLyogV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMzE2QkRCOEMxRTZFMTUzMDAwREUwRDVBIC8qIFdlYkdQVUxheWVyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBNUUyMTIzQzFFNDkyNEE0MDBDRTEwNDQgLyogV2ViSGVhcEFnZW50Lmgg
aW4gSGVhZGVycyAqLywKLQkJCQk3Q0QwRTJCODFGODBBNDgyMDAxNkE0Q0UgLyogQWJvcnRDb250
cm9sbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNTg0MEUyNTE4N0I4QUMyMDA4NDNCMTAgLyog
V2ViSW5qZWN0ZWRTY3JpcHRIb3N0LmggaW4gSGVhZGVycyAqLywKIAkJCQlBNTg0RkUzMDE4NjRD
Qjg0MDA4NDNCMTAgLyogV2ViSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmggaW4gSGVhZGVycyAqLywK
IAkJCQlGNDgyMjMxMTFFMzg2OUI4MDA2NkZDNzkgLyogV2ViSXRlbVByb3ZpZGVyUGFzdGVib2Fy
ZC5oIGluIEhlYWRlcnMgKi8sCkBAIC0zMTIyNiw2ICszMTE3Nyw4IEBACiAJCQlpc2EgPSBQQlhT
b3VyY2VzQnVpbGRQaGFzZTsKIAkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CiAJCQlm
aWxlcyA9ICgKKwkJCQk3Q0QwRTJCOTFGODBBNDgyMDAxNkE0Q0UgLyogQWJvcnRDb250cm9sbGVy
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTdDRDBFMkMwMUY4MEE1NkUwMDE2QTRDRSAvKiBBYm9y
dFNpZ25hbC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0MUUxQjFEMDBGRjU5ODY5MDA1NzZCM0Ig
LyogQWJzdHJhY3RXb3JrZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzdGNTdBQjkxQTUwNzI2
OTAwODc2Rjk4IC8qIEFjY2Vzc2liaWxpdHlBUklBR3JpZC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkzN0Y1N0FCQTFBNTA3MjZGMDA4NzZGOTggLyogQWNjZXNzaWJpbGl0eUFSSUFHcmlkQ2VsbC5j
cHAgaW4gU291cmNlcyAqLywKQEAgLTMxNTAzLDcgKzMxNDU2LDYgQEAKIAkJCQlDRTI4NDk4OTFD
QTM2MTQ2MDBCNEE1N0YgLyogQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTmFtZXMuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQ0U3OTlGQTcxQzZBNTA1NzAwOTdCNTE4IC8qIENvbnRlbnRT
ZWN1cml0eVBvbGljeU1lZGlhTGlzdERpcmVjdGl2ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlD
RTZEQURGOTFDNTkxRTZBMDAzRjZBODggLyogQ29udGVudFNlY3VyaXR5UG9saWN5UmVzcG9uc2VI
ZWFkZXJzLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTdDMzBEOTg1MUY4MTVBRUMwMDI2ODM1NiAv
KiBKU0Fib3J0U2lnbmFsLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUNFNzk5RjlGMUM2QTRDMTYw
MDk3QjUxOCAvKiBDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2UuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQ0U3OTlGOTcxQzZBNDZCQzAwOTdCNTE4IC8qIENvbnRlbnRTZWN1cml0eVBvbGljeVNv
dXJjZUxpc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQ0U3OTlGQUIxQzZBNTA2NjAwOTdCNTE4
IC8qIENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3REaXJlY3RpdmUuY3BwIGluIFNvdXJj
ZXMgKi8sCkBAIC0zMTU3NSw3ICszMTUyNyw2IEBACiAJCQkJRTEyMzNGMTAxODVBNDEzMDAwOERG
QUY1IC8qIENyeXB0b0FsZ29yaXRobVJTQUVTX1BLQ1MxX3YxXzVNYWMuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJRTFCRDMzMTkxODJEOERERDAwQzA1RDlGIC8qIENyeXB0b0FsZ29yaXRobVJTQVNT
QV9QS0NTMV92MV81LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUxQzI2NkQ4MTgzMTdBQjQwMDNG
OEIzMyAvKiBDcnlwdG9BbGdvcml0aG1SU0FTU0FfUEtDUzFfdjFfNU1hYy5jcHAgaW4gU291cmNl
cyAqLywKLQkJCQk3QzMwRDk4MzFGODE1QUVDMDAyNjgzNTYgLyogSlNBYm9ydENvbnRyb2xsZXIu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTEyNUY4MkIxODIyQ0ZFQzAwRDg0Q0Q5IC8qIENyeXB0
b0FsZ29yaXRobVNIQTEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTE5QUMzRUUxODI0REM3OTAw
MzQ5NDI2IC8qIENyeXB0b0FsZ29yaXRobVNIQTIyNC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlF
MTlBQzNGMDE4MjREQzc5MDAzNDk0MjYgLyogQ3J5cHRvQWxnb3JpdGhtU0hBMjU2LmNwcCBpbiBT
b3VyY2VzICovLApAQCAtMzIzNTYsNiArMzIzMDcsOCBAQAogCQkJCTFDMjFFNTdDMTgzRUQxRkYw
MDFDMjg5RCAvKiBJT1N1cmZhY2VQb29sLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUFEOUZGNkUx
MTkwODM5MUQwMDNCNjFFMCAvKiBJT1N1cmZhY2VQb29sQ29jb2EubW0gaW4gU291cmNlcyAqLywK
IAkJCQkwN0FDNDcwMTE5NTIxMDIxMDBFRTk3MjMgLyogSVNPVlRUQ3VlLmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCTdDMzBEOTgzMUY4MTVBRUMwMDI2ODM1NiAvKiBKU0Fib3J0Q29udHJvbGxlci5j
cHAgaW4gU291cmNlcyAqLywKKwkJCQk3QzMwRDk4NTFGODE1QUVDMDAyNjgzNTYgLyogSlNBYm9y
dFNpZ25hbC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0MThGODgwNDBGRjk1N0FFMDA4MEYwNDUg
LyogSlNBYnN0cmFjdFdvcmtlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1NzA0NDA1QzFFNTM5
Mzc5MDAzNTY2MDEgLyogSlNBZXNDYmNDZmJQYXJhbXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
NTdFMUU1QUMxRThERDA5QjAwRUUzN0M5IC8qIEpTQWVzQ3RyUGFyYW1zLmNwcCBpbiBTb3VyY2Vz
ICovLApAQCAtMzI0MzQsNyArMzIzODcsNiBAQAogCQkJCUE1ODRGRTNCMTg2NEUyRDgwMDg0M0Ix
MCAvKiBKU0NvbW1hbmRMaW5lQVBJSG9zdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5M0Y5QjZF
MDBCQTBGQjcyMDA4NTQwNjQgLyogSlNDb21tZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTc5
QUM5MjE4MTA5OTQ1QzgwMDIxMjY2RSAvKiBKU0NvbXBvc2l0aW9uRXZlbnQuY3BwIGluIFNvdXJj
ZXMgKi8sCi0JCQkJN0NEMEUyQzAxRjgwQTU2RTAwMTZBNENFIC8qIEFib3J0U2lnbmFsLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUZEQTE1RUJEMTJCMDNGMEIwMDNBNTgzQSAvKiBKU0NvbnZvbHZl
ck5vZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkU2RkQ0OEQwRjY3NkU5MzAwMDkyODczIC8q
IEpTQ29vcmRpbmF0ZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTREQ0YzQjIxQjZCRTIwODAw
NjJENEMyIC8qIEpTQ291bnRRdWV1aW5nU3RyYXRlZ3kuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0z
MjUyNyw3ICszMjQ3OSw2IEBACiAJCQkJODM2QUNFRDIxRUNBQUIxOTAwNEJEMDEyIC8qIEpTRE9N
TWF0cml4LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdDQkJCQ0NCMUY1NjE4MEQwMDVFRkFBQyAv
KiBKU0RPTU1hdHJpeDJESW5pdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4MzU2NTdDNzFFQ0FC
MTA3MDBDREU3MkQgLyogSlNET01NYXRyaXhJbml0LmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTdD
RDBFMkI5MUY4MEE0ODIwMDE2QTRDRSAvKiBBYm9ydENvbnRyb2xsZXIuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJODM2QUNFRDUxRUNBQUIxOTAwNEJEMDEyIC8qIEpTRE9NTWF0cml4UmVhZE9ubHku
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTlEMjQ4MDYwRDc1N0U3RDAwRkRGOTU5IC8qIEpTRE9N
TWltZVR5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTlEMjQ4MDgwRDc1N0U3RDAwRkRGOTU5
IC8qIEpTRE9NTWltZVR5cGVBcnJheS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTMzMzMzLDEwICsz
MzI4NCw3IEBACiAJCQkJRkQ2RjI1MkMxM0Y1RUYwRTAwNjUxNjVGIC8qIE1lZGlhRWxlbWVudEF1
ZGlvU291cmNlTm9kZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwN0ZFOTlEQzE4ODA3QTdEMDAy
NTY2NDggLyogTWVkaWFFbGVtZW50U2Vzc2lvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyRDlC
RjcwNTFEQkZCQjI0MDA3QTdEOTkgLyogTWVkaWFFbmNyeXB0ZWRFdmVudC5jcHAgaW4gU291cmNl
cyAqLywKLQkJCQk1RUJCODkzNDFDNzc3ODI5MDBDNjVENDEgLyogTWVkaWFFbmRwb2ludC5jcHAg
aW4gU291cmNlcyAqLywKLQkJCQk1RUJCODkzNjFDNzc3ODI5MDBDNjVENDEgLyogTWVkaWFFbmRw
b2ludENvbmZpZ3VyYXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNUUxNkEyRTUxQkZBNjUw
RjAwMjlBMjFFIC8qIE1lZGlhRW5kcG9pbnRQZWVyQ29ubmVjdGlvbi5jcHAgaW4gU291cmNlcyAq
LywKLQkJCQk1RTRFQUIwNTFEMDcxNjZFMDAwNkExODQgLyogTWVkaWFFbmRwb2ludFNlc3Npb25E
ZXNjcmlwdGlvbi5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk0MUIyOEIxNDFGODUwMUE2MDBGQjUy
QUMgLyogTWVkaWFFbmRwb2ludENvbmZpZ3VyYXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
NEUxOTU5MjEwQTM5REFCQTAwMjIwRkU1IC8qIE1lZGlhRmVhdHVyZU5hbWVzLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTA3QTZEMUVCMTQ5MTEzNzcwMDA1MUQwQyAvKiBNZWRpYUZyYWdtZW50VVJJ
UGFyc2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTJEOUJGNzQ3MURCRkRDNDkwMDdBN0Q5OSAv
KiBNZWRpYUtleU1lc3NhZ2VFdmVudC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTMzNDExLDcgKzMz
MzU5LDYgQEAKIAkJCQlDREYyQjAxMDE4MjA1NDA2MDBGMkI0MjQgLyogTW9ja0JveC5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQk1MTA1OEFERjFENjdDMjI5MDA5QTUzOEMgLyogTW9ja0dhbWVwYWQu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTEwNThBRTExRDY3QzIyOTAwOUE1MzhDIC8qIE1vY2tH
YW1lcGFkUHJvdmlkZXIuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNUVBM0Q2RTAxQzg1OUQ4NDAw
MzAwQkJCIC8qIE1vY2tNZWRpYUVuZHBvaW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUNERjJC
MDEyMTgyMDU0MDYwMEYyQjQyNCAvKiBNb2NrTWVkaWFQbGF5ZXJNZWRpYVNvdXJjZS5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlDREYyQjAxNDE4MjA1NDA2MDBGMkI0MjQgLyogTW9ja01lZGlhU291
cmNlUHJpdmF0ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwN0Q2QTRGMzFCRUQ1Rjg4MDAxNzQx
NDYgLyogTW9ja1JlYWx0aW1lQXVkaW9Tb3VyY2UuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0zMzkw
Niw5ICszMzg1Myw2IEBACiAJCQkJQkMyNDQxQzQwRThCNjVEMDAwNTUzMjBGIC8qIFNjcm9sbFZp
ZXcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTQ1MzkwNDUwRUFGRDYzNzAwMzY5NUM4IC8qIFNj
cm9sbFZpZXdJT1MubW0gaW4gU291cmNlcyAqLywKIAkJCQk5MzUzNjc2QjA5QUVEODhCMDBEMzVD
RDYgLyogU2Nyb2xsVmlld01hYy5tbSBpbiBTb3VyY2VzICovLAotCQkJCTVFQTNENkUzMUM4NTlE
QzEwMDMwMEJCQiAvKiBTRFBQcm9jZXNzb3IuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNUVBM0Q2
RTcxQzg1QTlEQjAwMzAwQkJCIC8qIFNEUFByb2Nlc3NvclNjcmlwdFJlc291cmNlLmNwcCBpbiBT
b3VyY2VzICovLAotCQkJCUNEQUI2RDMyMTdDOTI1OTUwMEM2MEIzNSAvKiBTRFBQcm9jZXNzb3JT
Y3JpcHRzRGF0YS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGNTVCM0REMTEyNTFGMTJEMDAzRUYy
NjkgLyogU2VhcmNoSW5wdXRUeXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBFNzA1OEVFMUJD
NUJDMTkwMDQ1QTUwNyAvKiBTZWFyY2hQb3B1cE1lbnVDb2NvYS5tbSBpbiBTb3VyY2VzICovLAog
CQkJCTk3NkYzNkVBMTQ2ODYyMjUwMDVFOTNCNCAvKiBTZWN1cml0eUNvbnRleHQuY3BwIGluIFNv
dXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9HU3RyZWFtZXIu
Y21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9HU3RyZWFtZXIuY21ha2UKaW5kZXggOTlj
ZjVmZmEyMDczNzZjYjVhYjllY2RkYWZiNmNhNDdhYjIwM2E0MC4uN2UyMjRkNzc0NzU0NGFkMzdk
Mzg4ZDdjNzRiOWY2ZTYyNTA4ZDgwZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vR1N0cmVhbWVyLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0dTdHJlYW1l
ci5jbWFrZQpAQCAtMSwyNiArMSwzIEBACi1saXN0KEFQUEVORCBXZWJDb3JlX0lOQ0xVREVfRElS
RUNUT1JJRVMKLSAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vbWVkaWFzdHJlYW0vb3Blbndl
YnJ0YyIKLSkKLQotaWYgKEVOQUJMRV9NRURJQV9TVFJFQU0pCi0gICAgbGlzdChBUFBFTkQgV2Vi
Q29yZV9TWVNURU1fSU5DTFVERV9ESVJFQ1RPUklFUwotICAgICAgICAke09QRU5XRUJSVENfSU5D
TFVERV9ESVJTfQotICAgICkKLQotICAgIGxpc3QoQVBQRU5EIFdlYkNvcmVfTElCUkFSSUVTCi0g
ICAgICAgICR7T1BFTldFQlJUQ19MSUJSQVJJRVN9Ci0gICAgKQotCi0gICAgbGlzdChBUFBFTkQg
V2ViQ29yZV9TT1VSQ0VTCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3IuY3BwCi0KLSAgICAgICAgcGxhdGZvcm0vbWVkaWFz
dHJlYW0vb3BlbndlYnJ0Yy9NZWRpYUVuZHBvaW50T3dyLmNwcAotICAgICAgICBwbGF0Zm9ybS9t
ZWRpYXN0cmVhbS9vcGVud2VicnRjL09wZW5XZWJSVENVdGlsaXRpZXMuY3BwCi0gICAgICAgIHBs
YXRmb3JtL21lZGlhc3RyZWFtL29wZW53ZWJydGMvUmVhbHRpbWVNZWRpYVNvdXJjZU93ci5jcHAK
LSAgICAgICAgcGxhdGZvcm0vbWVkaWFzdHJlYW0vb3BlbndlYnJ0Yy9SZWFsdGltZU1lZGlhU291
cmNlQ2VudGVyT3dyLmNwcAotICAgICkKLWVuZGlmICgpCi0KIGlmIChFTkFCTEVfVklERU8gT1Ig
RU5BQkxFX1dFQl9BVURJTykKICAgICBsaXN0KEFQUEVORCBXZWJDb3JlX0lOQ0xVREVfRElSRUNU
T1JJRVMKICAgICAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1l
ciIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxh
eWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmNw
cAppbmRleCA0ODc3MTYwY2ZhYWIzYWVjMjY5YzlmYmNmNmM0ODZmZjIxN2EyMmEwLi5mMDkzZDQ1
MWIyNTU4YTVhOTFhYTg4ZDExMzU5NjQ3ODQ0MTc4ODc2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3BwCkBAIC01Myw5ICs1Myw2IEBACiAK
ICNpZiBVU0UoR1NUUkVBTUVSKQogI2luY2x1ZGUgIk1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
ci5oIgotI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pICYmIFVTRShPUEVOV0VCUlRDKQotI2luY2x1
ZGUgIk1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93ci5oIgotI2VuZGlmCiAjZGVmaW5lIFBs
YXRmb3JtTWVkaWFFbmdpbmVDbGFzc05hbWUgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyCiAj
aWYgRU5BQkxFKFZJREVPKSAmJiBFTkFCTEUoTUVESUFfU09VUkNFKSAmJiBFTkFCTEUoVklERU9f
VFJBQ0spCiAjaW5jbHVkZSAiTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFLmgiCkBAIC0y
NjgsMTEgKzI2NSw2IEBAIHN0YXRpYyB2b2lkIGJ1aWxkTWVkaWFFbmdpbmVzVmVjdG9yKCkKICAg
ICAgICAgUGxhdGZvcm1NZWRpYUVuZ2luZUNsYXNzTmFtZTo6cmVnaXN0ZXJNZWRpYUVuZ2luZShh
ZGRNZWRpYUVuZ2luZSk7CiAjZW5kaWYKIAotI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pICYmIFVT
RShHU1RSRUFNRVIpICYmIFVTRShPUEVOV0VCUlRDKQotICAgIGlmIChTZXR0aW5nczo6aXNHU3Ry
ZWFtZXJFbmFibGVkKCkpCi0gICAgICAgIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93cjo6
cmVnaXN0ZXJNZWRpYUVuZ2luZShhZGRNZWRpYUVuZ2luZSk7Ci0jZW5kaWYKLQogI2lmIEVOQUJM
RShWSURFTykgJiYgVVNFKEdTVFJFQU1FUikgJiYgRU5BQkxFKE1FRElBX1NPVVJDRSkgJiYgRU5B
QkxFKFZJREVPX1RSQUNLKQogICAgIGlmIChTZXR0aW5nczo6aXNHU3RyZWFtZXJFbmFibGVkKCkp
CiAgICAgICAgIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6cmVnaXN0ZXJNZWRpYUVu
Z2luZShhZGRNZWRpYUVuZ2luZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXIuY3BwCmluZGV4IGYzOGU2MzcxMjk3YTQ5NGVkN2FiYzIyMDRjMWIyYWExZDNk
NGJmMWIuLjg0Nzk0ZjRjNWJjOTBjZWE5Njg3MmIwYzhmMTJjMmUxYzRiYmEyYjIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3BwCkBAIC0xOTMxLDcg
KzE5MzEsNiBAQCBNZWRpYVBsYXllcjo6U3VwcG9ydHNUeXBlIE1lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lcjo6c3VwcG9ydHNUeXBlKGNvbnN0IE1lZGlhRQogICAgICAgICByZXR1cm4gcmVzdWx0
OwogI2VuZGlmCiAKLSAgICAvLyBNZWRpYVN0cmVhbSBwbGF5YmFjayBpcyBoYW5kbGVkIGJ5IHRo
ZSBPcGVuV2ViUlRDIHBsYXllci4KICAgICBpZiAocGFyYW1ldGVycy5pc01lZGlhU3RyZWFtKQog
ICAgICAgICByZXR1cm4gcmVzdWx0OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXJPd3IuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBl
NTFmZjZjZjc3ZmUzYzE3NjhiYTkwNzEwODZjOTZlMmVkYzlhYTk1Li4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3IuY3BwCisrKyAv
ZGV2L251bGwKQEAgLTEsNTAxICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IChDKSAyMDEyIENv
bGxhYm9yYSBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiAgQ29weXJpZ2h0IChDKSAyMDE0
LCAyMDE1IElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiAgQ29weXJpZ2h0IChD
KSAyMDE1IE1ldHJvbG9naWNhbCBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqICBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0g
KiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1
YmxpYwotICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgotICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAgYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAq
ICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQotICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiAgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAt
MTMwMSAgVVNBCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaW5jbHVkZSAiTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyLmgiCi0KLSNpZiBFTkFCTEUoVklERU8pICYmIEVOQUJM
RShNRURJQV9TVFJFQU0pICYmIFVTRShHU1RSRUFNRVIpICYmIFVTRShPUEVOV0VCUlRDKQotCi0j
aW5jbHVkZSAiR1N0cmVhbWVyVXRpbGl0aWVzLmgiCi0jaW5jbHVkZSAiTWVkaWFQbGF5ZXIuaCIK
LSNpbmNsdWRlICJNZWRpYVN0cmVhbVByaXZhdGUuaCIKLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRl
ZC5oIgotI2luY2x1ZGUgIlJlYWx0aW1lTWVkaWFTb3VyY2VPd3IuaCIKLSNpbmNsdWRlICJVUkwu
aCIKLSNpbmNsdWRlIDxvd3Ivb3dyLmg+Ci0jaW5jbHVkZSA8b3dyL293cl9nc3RfYXVkaW9fcmVu
ZGVyZXIuaD4KLSNpbmNsdWRlIDxvd3Ivb3dyX2dzdF92aWRlb19yZW5kZXJlci5oPgotI2luY2x1
ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4K
LQotR1NUX0RFQlVHX0NBVEVHT1JZKHdlYmtpdF9vcGVud2VicnRjX2RlYnVnKTsKLSNkZWZpbmUg
R1NUX0NBVF9ERUZBVUxUIHdlYmtpdF9vcGVud2VicnRjX2RlYnVnCi0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLQotTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyOjpNZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXJPd3IoTWVkaWFQbGF5ZXIqIHBsYXllcikKLSAgICA6IE1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lckJhc2UocGxheWVyKQotewotICAgIGluaXRpYWxpemVHU3RyZWFtZXJBbmRH
U3RyZWFtZXJEZWJ1Z2dpbmcoKTsKLX0KLQotTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dy
Ojp+TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyKCkKLXsKLSAgICBHU1RfVFJBQ0UoIkRl
c3Ryb3lpbmciKTsKLQotICAgIGlmIChoYXNBdWRpbygpKQotICAgICAgICBtX2F1ZGlvVHJhY2st
PnJlbW92ZU9ic2VydmVyKCp0aGlzKTsKLSAgICBpZiAoaGFzVmlkZW8oKSkKLSAgICAgICAgbV92
aWRlb1RyYWNrLT5yZW1vdmVPYnNlcnZlcigqdGhpcyk7Ci0KLSAgICBtX2F1ZGlvVHJhY2tNYXAu
Y2xlYXIoKTsKLSAgICBtX3ZpZGVvVHJhY2tNYXAuY2xlYXIoKTsKLQotICAgIHN0b3AoKTsKLX0K
LQotdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3I6OnBsYXkoKQotewotICAgIEdT
VF9ERUJVRygiUGxheSIpOwotCi0gICAgaWYgKCFtX3N0cmVhbVByaXZhdGUgfHwgIW1fc3RyZWFt
UHJpdmF0ZS0+YWN0aXZlKCkpIHsKLSAgICAgICAgbV9yZWFkeVN0YXRlID0gTWVkaWFQbGF5ZXI6
OkhhdmVOb3RoaW5nOwotICAgICAgICBsb2FkaW5nRmFpbGVkKE1lZGlhUGxheWVyOjpFbXB0eSk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtX2VuZGVkID0gZmFsc2U7Ci0gICAgbV9w
YXVzZWQgPSBmYWxzZTsKLQotICAgIEdTVF9ERUJVRygiQ29ubmVjdGluZyB0byBsaXZlIHN0cmVh
bSwgZGVzY3JpcHRvcjogJXAiLCBtX3N0cmVhbVByaXZhdGUuZ2V0KCkpOwotCi0gICAgaWYgKG1f
dmlkZW9UcmFjaykKLSAgICAgICAgbWF5YmVIYW5kbGVDaGFuZ2VNdXRlZFN0YXRlKCptX3ZpZGVv
VHJhY2suZ2V0KCkpOwotCi0gICAgaWYgKG1fYXVkaW9UcmFjaykKLSAgICAgICAgbWF5YmVIYW5k
bGVDaGFuZ2VNdXRlZFN0YXRlKCptX2F1ZGlvVHJhY2suZ2V0KCkpOwotfQotCi12b2lkIE1lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lck93cjo6cGF1c2UoKQotewotICAgIEdTVF9ERUJVRygiUGF1
c2UiKTsKLSAgICBtX3BhdXNlZCA9IHRydWU7Ci0gICAgZGlzYWJsZU1lZGlhVHJhY2tzKCk7Ci19
Ci0KLWJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyOjpoYXNWaWRlbygpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIG1fdmlkZW9UcmFjazsKLX0KLQotYm9vbCBNZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXJPd3I6Omhhc0F1ZGlvKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9hdWRpb1Ry
YWNrOwotfQotCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93cjo6c2V0Vm9sdW1l
KGZsb2F0IHZvbHVtZSkKLXsKLSAgICBpZiAoIW1fYXVkaW9UcmFjaykKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgYXV0byYgcmVhbFRpbWVNZWRpYVNvdXJjZSA9IHN0YXRpY19jYXN0PFJlYWx0aW1l
TWVkaWFTb3VyY2VPd3ImPihtX2F1ZGlvVHJhY2stPnNvdXJjZSgpKTsKLSAgICBhdXRvIG1lZGlh
U291cmNlID0gT1dSX01FRElBX1NPVVJDRShyZWFsVGltZU1lZGlhU291cmNlLm1lZGlhU291cmNl
KCkpOwotCi0gICAgR1NUX0RFQlVHKCJTZXR0aW5nIHZvbHVtZTogJWYiLCB2b2x1bWUpOwotICAg
IGdfb2JqZWN0X3NldChtZWRpYVNvdXJjZSwgInZvbHVtZSIsIHN0YXRpY19jYXN0PGdkb3VibGU+
KHZvbHVtZSksIG51bGxwdHIpOwotfQotCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
ck93cjo6c2V0TXV0ZWQoYm9vbCBtdXRlZCkKLXsKLSAgICBpZiAoIW1fYXVkaW9UcmFjaykKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgYXV0byYgcmVhbFRpbWVNZWRpYVNvdXJjZSA9IHN0YXRpY19j
YXN0PFJlYWx0aW1lTWVkaWFTb3VyY2VPd3ImPihtX2F1ZGlvVHJhY2stPnNvdXJjZSgpKTsKLSAg
ICBhdXRvIG1lZGlhU291cmNlID0gT1dSX01FRElBX1NPVVJDRShyZWFsVGltZU1lZGlhU291cmNl
Lm1lZGlhU291cmNlKCkpOwotICAgIGlmICghbWVkaWFTb3VyY2UpCi0gICAgICAgIHJldHVybjsK
LQotICAgIEdTVF9ERUJVRygiU2V0dGluZyBtdXRlOiAlcyIsIG11dGVkID8gIm9uIjoib2ZmIik7
Ci0gICAgZ19vYmplY3Rfc2V0KG1lZGlhU291cmNlLCAibXV0ZSIsIG11dGVkLCBudWxscHRyKTsK
LX0KLQotZmxvYXQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyOjpjdXJyZW50VGltZSgp
IGNvbnN0Ci17Ci0gICAgZ2ludDY0IHBvc2l0aW9uID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKLSAg
ICBHc3RRdWVyeSogcXVlcnkgPSBnc3RfcXVlcnlfbmV3X3Bvc2l0aW9uKEdTVF9GT1JNQVRfVElN
RSk7Ci0KLSAgICBpZiAobV92aWRlb1RyYWNrICYmIGdzdF9lbGVtZW50X3F1ZXJ5KG1fdmlkZW9T
aW5rLmdldCgpLCBxdWVyeSkpCi0gICAgICAgIGdzdF9xdWVyeV9wYXJzZV9wb3NpdGlvbihxdWVy
eSwgMCwgJnBvc2l0aW9uKTsKLSAgICBlbHNlIGlmIChtX2F1ZGlvVHJhY2sgJiYgZ3N0X2VsZW1l
bnRfcXVlcnkobV9hdWRpb1NpbmsuZ2V0KCksIHF1ZXJ5KSkKLSAgICAgICAgZ3N0X3F1ZXJ5X3Bh
cnNlX3Bvc2l0aW9uKHF1ZXJ5LCAwLCAmcG9zaXRpb24pOwotCi0gICAgZmxvYXQgcmVzdWx0ID0g
MDsKLSAgICBpZiAoc3RhdGljX2Nhc3Q8R3N0Q2xvY2tUaW1lPihwb3NpdGlvbikgIT0gR1NUX0NM
T0NLX1RJTUVfTk9ORSkKLSAgICAgICAgcmVzdWx0ID0gc3RhdGljX2Nhc3Q8ZG91YmxlPihwb3Np
dGlvbikgLyBHU1RfU0VDT05EOwotCi0gICAgR1NUX0xPRygiUG9zaXRpb24gJSIgR1NUX1RJTUVf
Rk9STUFULCBHU1RfVElNRV9BUkdTKHBvc2l0aW9uKSk7Ci0gICAgZ3N0X3F1ZXJ5X3VucmVmKHF1
ZXJ5KTsKLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyT3dyOjpsb2FkKGNvbnN0IFN0cmluZyAmKQotewotICAgIC8vIFByb3Blcmx5IGZh
aWwgc28gdGhlIGdsb2JhbCBNZWRpYVBsYXllciB0cmllcyB0byBmYWxsYmFjayB0byB0aGUgbmV4
dCBNZWRpYVBsYXllclByaXZhdGUuCi0gICAgbV9uZXR3b3JrU3RhdGUgPSBNZWRpYVBsYXllcjo6
Rm9ybWF0RXJyb3I7Ci0gICAgbV9wbGF5ZXItPm5ldHdvcmtTdGF0ZUNoYW5nZWQoKTsKLX0KLQot
I2lmIEVOQUJMRShNRURJQV9TT1VSQ0UpCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
ck93cjo6bG9hZChjb25zdCBTdHJpbmcmLCBNZWRpYVNvdXJjZVByaXZhdGVDbGllbnQqKQotewot
ICAgIC8vIFByb3Blcmx5IGZhaWwgc28gdGhlIGdsb2JhbCBNZWRpYVBsYXllciB0cmllcyB0byBm
YWxsYmFjayB0byB0aGUgbmV4dCBNZWRpYVBsYXllclByaXZhdGUuCi0gICAgbV9uZXR3b3JrU3Rh
dGUgPSBNZWRpYVBsYXllcjo6Rm9ybWF0RXJyb3I7Ci0gICAgbV9wbGF5ZXItPm5ldHdvcmtTdGF0
ZUNoYW5nZWQoKTsKLX0KLSNlbmRpZgotCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
ck93cjo6bG9hZChNZWRpYVN0cmVhbVByaXZhdGUmIHN0cmVhbVByaXZhdGUpCi17Ci0gICAgaWYg
KCFpbml0aWFsaXplR1N0cmVhbWVyKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fc3RyZWFt
UHJpdmF0ZSA9ICZzdHJlYW1Qcml2YXRlOwotICAgIGlmICghbV9zdHJlYW1Qcml2YXRlLT5hY3Rp
dmUoKSkgewotICAgICAgICBsb2FkaW5nRmFpbGVkKE1lZGlhUGxheWVyOjpOZXR3b3JrRXJyb3Ip
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKHN0cmVhbVByaXZhdGUuaGFzVmlk
ZW8oKSAmJiAhbV92aWRlb1NpbmspCi0gICAgICAgIGNyZWF0ZVZpZGVvU2luaygpOwotCi0gICAg
aWYgKHN0cmVhbVByaXZhdGUuaGFzQXVkaW8oKSAmJiAhbV9hdWRpb1NpbmspCi0gICAgICAgIGNy
ZWF0ZUdTVEF1ZGlvU2lua0JpbigpOwotCi0gICAgR1NUX0RFQlVHKCJMb2FkaW5nIE1lZGlhU3Ry
ZWFtUHJpdmF0ZSAlcCB2aWRlbzogJXMsIGF1ZGlvOiAlcyIsICZzdHJlYW1Qcml2YXRlLCBzdHJl
YW1Qcml2YXRlLmhhc1ZpZGVvKCkgPyAieWVzIjoibm8iLCBzdHJlYW1Qcml2YXRlLmhhc0F1ZGlv
KCkgPyAieWVzIjoibm8iKTsKLQotICAgIG1fcmVhZHlTdGF0ZSA9IE1lZGlhUGxheWVyOjpIYXZl
Tm90aGluZzsKLSAgICBtX25ldHdvcmtTdGF0ZSA9IE1lZGlhUGxheWVyOjpMb2FkaW5nOwotICAg
IG1fcGxheWVyLT5uZXR3b3JrU3RhdGVDaGFuZ2VkKCk7Ci0gICAgbV9wbGF5ZXItPnJlYWR5U3Rh
dGVDaGFuZ2VkKCk7Ci0KLSAgICBmb3IgKGF1dG8gdHJhY2sgOiBtX3N0cmVhbVByaXZhdGUtPnRy
YWNrcygpKSB7Ci0gICAgICAgIGlmICghdHJhY2stPmVuYWJsZWQoKSkgewotICAgICAgICAgICAg
R1NUX0RFQlVHKCJUcmFjayAlcyBkaXNhYmxlZCIsIHRyYWNrLT5sYWJlbCgpLmFzY2lpKCkuZGF0
YSgpKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgR1NUX0RF
QlVHKCJQcm9jZXNzaW5nIHRyYWNrICVzIiwgdHJhY2stPmxhYmVsKCkuYXNjaWkoKS5kYXRhKCkp
OwotCi0gICAgICAgIGJvb2wgb2JzZXJ2ZVRyYWNrID0gZmFsc2U7Ci0KLSAgICAgICAgLy8gVE9E
TzogU3VwcG9ydCBmb3IgbXVsdGlwbGUgdHJhY2tzIG9mIHRoZSBzYW1lIHR5cGUuCi0KLSAgICAg
ICAgc3dpdGNoICh0cmFjay0+dHlwZSgpKSB7Ci0gICAgICAgIGNhc2UgUmVhbHRpbWVNZWRpYVNv
dXJjZTo6VHlwZTo6QXVkaW86Ci0gICAgICAgICAgICBpZiAoIW1fYXVkaW9UcmFjaykgewotICAg
ICAgICAgICAgICAgIFN0cmluZyBwcmVTZWxlY3RlZERldmljZSA9IGdldGVudigiV0VCS0lUX0FV
RElPX0RFVklDRSIpOwotICAgICAgICAgICAgICAgIGlmICghcHJlU2VsZWN0ZWREZXZpY2UgfHwg
KHByZVNlbGVjdGVkRGV2aWNlID09IHRyYWNrLT5sYWJlbCgpKSkgewotICAgICAgICAgICAgICAg
ICAgICBtX2F1ZGlvVHJhY2sgPSB0cmFjazsKLSAgICAgICAgICAgICAgICAgICAgYXV0byBhdWRp
b1RyYWNrID0gQXVkaW9UcmFja1ByaXZhdGVNZWRpYVN0cmVhbTo6Y3JlYXRlKCptX2F1ZGlvVHJh
Y2suZ2V0KCkpOwotICAgICAgICAgICAgICAgICAgICBtX3BsYXllci0+YWRkQXVkaW9UcmFjaygq
YXVkaW9UcmFjayk7Ci0gICAgICAgICAgICAgICAgICAgIG1fYXVkaW9UcmFja01hcC5hZGQodHJh
Y2stPmlkKCksIGF1ZGlvVHJhY2spOwotICAgICAgICAgICAgICAgICAgICBvYnNlcnZlVHJhY2sg
PSB0cnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlIFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGU6OlZpZGVvOgotICAg
ICAgICAgICAgaWYgKCFtX3ZpZGVvVHJhY2spIHsKLSAgICAgICAgICAgICAgICBTdHJpbmcgcHJl
U2VsZWN0ZWREZXZpY2UgPSBnZXRlbnYoIldFQktJVF9WSURFT19ERVZJQ0UiKTsKLSAgICAgICAg
ICAgICAgICBpZiAoIXByZVNlbGVjdGVkRGV2aWNlIHx8IChwcmVTZWxlY3RlZERldmljZSA9PSB0
cmFjay0+bGFiZWwoKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgbV92aWRlb1RyYWNrID0gdHJh
Y2s7Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8gdmlkZW9UcmFjayA9IFZpZGVvVHJhY2tQcml2
YXRlTWVkaWFTdHJlYW06OmNyZWF0ZSgqbV92aWRlb1RyYWNrLmdldCgpKTsKLSAgICAgICAgICAg
ICAgICAgICAgbV9wbGF5ZXItPmFkZFZpZGVvVHJhY2soKnZpZGVvVHJhY2spOwotICAgICAgICAg
ICAgICAgICAgICB2aWRlb1RyYWNrLT5zZXRTZWxlY3RlZCh0cnVlKTsKLSAgICAgICAgICAgICAg
ICAgICAgbV92aWRlb1RyYWNrTWFwLmFkZCh0cmFjay0+aWQoKSwgdmlkZW9UcmFjayk7Ci0gICAg
ICAgICAgICAgICAgICAgIG9ic2VydmVUcmFjayA9IHRydWU7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUmVhbHRpbWVN
ZWRpYVNvdXJjZTo6VHlwZTo6Tm9uZToKLSAgICAgICAgICAgIEdTVF9XQVJOSU5HKCJMb2FkaW5n
IGEgdHJhY2sgd2l0aCBOb25lIHR5cGUiKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChvYnNl
cnZlVHJhY2spCi0gICAgICAgICAgICB0cmFjay0+YWRkT2JzZXJ2ZXIoKnRoaXMpOwotICAgIH0K
LQotICAgIG1fcmVhZHlTdGF0ZSA9IE1lZGlhUGxheWVyOjpIYXZlRW5vdWdoRGF0YTsKLSAgICBt
X3BsYXllci0+cmVhZHlTdGF0ZUNoYW5nZWQoKTsKLX0KLQotdm9pZCBNZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXJPd3I6OmxvYWRpbmdGYWlsZWQoTWVkaWFQbGF5ZXI6Ok5ldHdvcmtTdGF0ZSBl
cnJvcikKLXsKLSAgICBpZiAobV9uZXR3b3JrU3RhdGUgIT0gZXJyb3IpIHsKLSAgICAgICAgR1NU
X1dBUk5JTkcoIkxvYWRpbmcgZmFpbGVkLCBlcnJvcjogJWQiLCBlcnJvcik7Ci0gICAgICAgIG1f
bmV0d29ya1N0YXRlID0gZXJyb3I7Ci0gICAgICAgIG1fcGxheWVyLT5uZXR3b3JrU3RhdGVDaGFu
Z2VkKCk7Ci0gICAgfQotICAgIGlmIChtX3JlYWR5U3RhdGUgIT0gTWVkaWFQbGF5ZXI6OkhhdmVO
b3RoaW5nKSB7Ci0gICAgICAgIG1fcmVhZHlTdGF0ZSA9IE1lZGlhUGxheWVyOjpIYXZlTm90aGlu
ZzsKLSAgICAgICAgbV9wbGF5ZXItPnJlYWR5U3RhdGVDaGFuZ2VkKCk7Ci0gICAgfQotfQotCi1i
b29sIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93cjo6ZGlkTG9hZGluZ1Byb2dyZXNzKCkg
Y29uc3QKLXsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IGxvYWRpbmcgcHJvZ3Jlc3Mgc3VwcG9y
dC4KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXJPd3I6OmRpc2FibGVNZWRpYVRyYWNrcygpCi17Ci0gICAgaWYgKG1fYXVkaW9UcmFjaykgewot
ICAgICAgICBHU1RfREVCVUcoIlN0b3A6IGRpc2Nvbm5lY3RpbmcgYXVkaW8iKTsKLSAgICAgICAg
Z19vYmplY3Rfc2V0KG1fYXVkaW9SZW5kZXJlci5nZXQoKSwgImRpc2FibGVkIiwgdHJ1ZSwgbnVs
bHB0cik7Ci0gICAgICAgIG93cl9tZWRpYV9yZW5kZXJlcl9zZXRfc291cmNlKE9XUl9NRURJQV9S
RU5ERVJFUihtX2F1ZGlvUmVuZGVyZXIuZ2V0KCkpLCBudWxscHRyKTsKLSAgICB9Ci0KLSAgICBp
ZiAobV92aWRlb1RyYWNrKSB7Ci0gICAgICAgIEdTVF9ERUJVRygiU3RvcDogZGlzY29ubmVjdGlu
ZyB2aWRlbyIpOwotICAgICAgICBnX29iamVjdF9zZXQobV92aWRlb1JlbmRlcmVyLmdldCgpLCAi
ZGlzYWJsZWQiLCB0cnVlLCBudWxscHRyKTsKLSAgICAgICAgb3dyX21lZGlhX3JlbmRlcmVyX3Nl
dF9zb3VyY2UoT1dSX01FRElBX1JFTkRFUkVSKG1fdmlkZW9SZW5kZXJlci5nZXQoKSksIG51bGxw
dHIpOwotICAgIH0KLX0KLQotdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3I6OnN0
b3AoKQotewotICAgIGRpc2FibGVNZWRpYVRyYWNrcygpOwotICAgIGlmIChtX3ZpZGVvVHJhY2sp
IHsKLSAgICAgICAgYXV0byB2aWRlb1RyYWNrID0gbV92aWRlb1RyYWNrTWFwLmdldChtX3ZpZGVv
VHJhY2stPmlkKCkpOwotICAgICAgICBpZiAodmlkZW9UcmFjaykKLSAgICAgICAgICAgIHZpZGVv
VHJhY2stPnNldFNlbGVjdGVkKGZhbHNlKTsKLSAgICB9Ci19Ci0KLXZvaWQgTWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyT3dyOjpyZWdpc3Rlck1lZGlhRW5naW5lKE1lZGlhRW5naW5lUmVnaXN0
cmFyIHJlZ2lzdHJhcikKLXsKLSAgICBpZiAoaW5pdGlhbGl6ZUdTdHJlYW1lckFuZEdTdHJlYW1l
ckRlYnVnZ2luZygpKSB7Ci0gICAgICAgIHJlZ2lzdHJhcihbXShNZWRpYVBsYXllciogcGxheWVy
KSB7Ci0gICAgICAgICAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxNZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXJPd3I+KHBsYXllcik7Ci0gICAgICAgIH0sIGdldFN1cHBvcnRlZFR5cGVzLCBz
dXBwb3J0c1R5cGUsIG51bGxwdHIsIG51bGxwdHIsIG51bGxwdHIsIG51bGxwdHIpOwotICAgIH0K
LX0KLQotdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3I6OmdldFN1cHBvcnRlZFR5
cGVzKEhhc2hTZXQ8U3RyaW5nLCBBU0NJSUNhc2VJbnNlbnNpdGl2ZUhhc2g+JiB0eXBlcykKLXsK
LSAgICAvLyBOb3Qgc3VwcG9ydGVkIGluIHRoaXMgbWVkaWEgcGxheWVyLgotICAgIHN0YXRpYyBO
ZXZlckRlc3Ryb3llZDxIYXNoU2V0PFN0cmluZywgQVNDSUlDYXNlSW5zZW5zaXRpdmVIYXNoPj4g
Y2FjaGU7Ci0gICAgdHlwZXMgPSBjYWNoZTsKLX0KLQotTWVkaWFQbGF5ZXI6OlN1cHBvcnRzVHlw
ZSBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3I6OnN1cHBvcnRzVHlwZShjb25zdCBNZWRp
YUVuZ2luZVN1cHBvcnRQYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzKQotewotICAgIGlmIChwYXJhbWV0
ZXJzLmlzTWVkaWFTdHJlYW0pCi0gICAgICAgIHJldHVybiBNZWRpYVBsYXllcjo6SXNTdXBwb3J0
ZWQ7Ci0gICAgcmV0dXJuIE1lZGlhUGxheWVyOjpJc05vdFN1cHBvcnRlZDsKLX0KLQotYm9vbCBN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3I6OmluaXRpYWxpemVHU3RyZWFtZXJBbmRHU3Ry
ZWFtZXJEZWJ1Z2dpbmcoKQotewotICAgIGlmICghaW5pdGlhbGl6ZUdTdHJlYW1lcigpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgZGVidWdSZWdp
c3RlcmVkRmxhZzsKLSAgICBzdGQ6OmNhbGxfb25jZShkZWJ1Z1JlZ2lzdGVyZWRGbGFnLCBbXSB7
Ci0gICAgICAgIEdTVF9ERUJVR19DQVRFR09SWV9JTklUKHdlYmtpdF9vcGVud2VicnRjX2RlYnVn
LCAid2Via2l0b3dycGxheWVyIiwgMCwgIldlYktpdCBPcGVuV2ViUlRDIHBsYXllciIpOwotICAg
IH0pOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyT3dyOjpjcmVhdGVHU1RBdWRpb1NpbmtCaW4oKQotewotICAgIEFTU0VSVCghbV9hdWRp
b1NpbmspOwotICAgIEdTVF9ERUJVRygiQ3JlYXRpbmcgYXVkaW8gc2luayIpOwotICAgIC8vIEZJ
WE1FOiB2b2x1bWUvbXV0ZSBzdXBwb3J0OiBodHRwczovL3dlYmtpdC5vcmcvYi8xNTM4MjguCi0K
LSAgICAvLyBQcmUtcm9sbCBhbiBhdXRvYXVkaW9zaW5rIHNvIHRoYXQgdGhlIHBsYXRmb3JtIGF1
ZGlvIHNpbmsgaXMgY3JlYXRlZCBhbmQKLSAgICAvLyBjYW4gYmUgcmV0cmlldmVkIGZyb20gdGhl
IGF1dG9hdWRpb3NpbmsgYmluLgotICAgIEdSZWZQdHI8R3N0RWxlbWVudD4gc2luayA9IGdzdF9l
bGVtZW50X2ZhY3RvcnlfbWFrZSgiYXV0b2F1ZGlvc2luayIsIG51bGxwdHIpOwotICAgIEdzdENo
aWxkUHJveHkqIGNoaWxkUHJveHkgPSBHU1RfQ0hJTERfUFJPWFkoc2luay5nZXQoKSk7Ci0gICAg
Z3N0X2VsZW1lbnRfc2V0X3N0YXRlKHNpbmsuZ2V0KCksIEdTVF9TVEFURV9SRUFEWSk7Ci0gICAg
R1JlZlB0cjxHc3RFbGVtZW50PiBwbGF0Zm9ybVNpbmsgPSBhZG9wdEdSZWYoR1NUX0VMRU1FTlQo
Z3N0X2NoaWxkX3Byb3h5X2dldF9jaGlsZF9ieV9pbmRleChjaGlsZFByb3h5LCAwKSkpOwotICAg
IEdzdEVsZW1lbnRGYWN0b3J5KiBmYWN0b3J5ID0gZ3N0X2VsZW1lbnRfZ2V0X2ZhY3RvcnkocGxh
dGZvcm1TaW5rLmdldCgpKTsKLQotICAgIC8vIERpc3Bvc2Ugbm93IHVuLW5lZWRlZCBhdXRvYXVk
aW9zaW5rLgotICAgIGdzdF9lbGVtZW50X3NldF9zdGF0ZShzaW5rLmdldCgpLCBHU1RfU1RBVEVf
TlVMTCk7Ci0KLSAgICAvLyBDcmVhdGUgYSBmcmVzaCBuZXcgYXVkaW8gc2luayBjb21wYXRpYmxl
IHdpdGggdGhlIHBsYXRmb3JtLgotICAgIG1fYXVkaW9TaW5rID0gZ3N0X2VsZW1lbnRfZmFjdG9y
eV9jcmVhdGUoZmFjdG9yeSwgbnVsbHB0cik7Ci0gICAgbV9hdWRpb1JlbmRlcmVyID0gYWRvcHRH
UmVmKG93cl9nc3RfYXVkaW9fcmVuZGVyZXJfbmV3KG1fYXVkaW9TaW5rLmdldCgpKSk7Ci19Ci0K
LXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyOjp0cmFja0VuZGVkKE1lZGlhU3Ry
ZWFtVHJhY2tQcml2YXRlJiB0cmFjaykKLXsKLSAgICBHU1RfREVCVUcoIlRyYWNrIGVuZGVkIik7
Ci0KLSAgICBpZiAoIW1fc3RyZWFtUHJpdmF0ZSB8fCAhbV9zdHJlYW1Qcml2YXRlLT5hY3RpdmUo
KSkgewotICAgICAgICBzdG9wKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAo
JnRyYWNrID09IG1fYXVkaW9UcmFjaykKLSAgICAgICAgZ19vYmplY3Rfc2V0KG1fYXVkaW9SZW5k
ZXJlci5nZXQoKSwgImRpc2FibGVkIiwgdHJ1ZSwgbnVsbHB0cik7Ci0gICAgZWxzZSBpZiAoJnRy
YWNrID09IG1fdmlkZW9UcmFjaykgewotICAgICAgICBnX29iamVjdF9zZXQobV92aWRlb1JlbmRl
cmVyLmdldCgpLCAiZGlzYWJsZWQiLCB0cnVlLCBudWxscHRyKTsKLSAgICAgICAgYXV0byYgcmVh
bFRpbWVNZWRpYVNvdXJjZSA9IHN0YXRpY19jYXN0PFJlYWx0aW1lTWVkaWFTb3VyY2VPd3ImPiht
X3ZpZGVvVHJhY2stPnNvdXJjZSgpKTsKLSAgICAgICAgcmVhbFRpbWVNZWRpYVNvdXJjZS5zZXRX
aWR0aCgwKTsKLSAgICAgICAgcmVhbFRpbWVNZWRpYVNvdXJjZS5zZXRIZWlnaHQoMCk7Ci0gICAg
ICAgIGF1dG8gdmlkZW9UcmFjayA9IG1fdmlkZW9UcmFja01hcC5nZXQobV92aWRlb1RyYWNrLT5p
ZCgpKTsKLSAgICAgICAgaWYgKHZpZGVvVHJhY2spCi0gICAgICAgICAgICB2aWRlb1RyYWNrLT5z
ZXRTZWxlY3RlZChmYWxzZSk7Ci0gICAgfQotCi0gICAgZ2Jvb2xlYW4gYXVkaW9EaXNhYmxlZDsK
LSAgICBnYm9vbGVhbiB2aWRlb0Rpc2FibGVkOwotICAgIGdfb2JqZWN0X2dldChtX2F1ZGlvUmVu
ZGVyZXIuZ2V0KCksICJkaXNhYmxlZCIsICZhdWRpb0Rpc2FibGVkLCBudWxscHRyKTsKLSAgICBn
X29iamVjdF9nZXQobV92aWRlb1JlbmRlcmVyLmdldCgpLCAiZGlzYWJsZWQiLCAmdmlkZW9EaXNh
YmxlZCwgbnVsbHB0cik7Ci0gICAgaWYgKGF1ZGlvRGlzYWJsZWQgJiYgdmlkZW9EaXNhYmxlZCkg
ewotICAgICAgICBtX2VuZGVkID0gdHJ1ZTsKLSAgICAgICAgbV9wbGF5ZXItPnRpbWVDaGFuZ2Vk
KCk7Ci0gICAgfQotfQotCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93cjo6dHJh
Y2tNdXRlZENoYW5nZWQoTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUmIHRyYWNrKQotewotICAgIEdT
VF9ERUJVRygiVHJhY2sgbXV0ZWQgc3RhdGUgY2hhbmdlZCIpOwotCi0gICAgbWF5YmVIYW5kbGVD
aGFuZ2VNdXRlZFN0YXRlKHRyYWNrKTsKLX0KLQotdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXJPd3I6Om1heWJlSGFuZGxlQ2hhbmdlTXV0ZWRTdGF0ZShNZWRpYVN0cmVhbVRyYWNrUHJp
dmF0ZSYgdHJhY2spCi17Ci0gICAgYXV0byYgcmVhbFRpbWVNZWRpYVNvdXJjZSA9IHN0YXRpY19j
YXN0PFJlYWx0aW1lTWVkaWFTb3VyY2VPd3ImPih0cmFjay5zb3VyY2UoKSk7Ci0gICAgYXV0byBt
ZWRpYVNvdXJjZSA9IE9XUl9NRURJQV9TT1VSQ0UocmVhbFRpbWVNZWRpYVNvdXJjZS5tZWRpYVNv
dXJjZSgpKTsKLQotICAgIEdTVF9ERUJVRygiJXMgdHJhY2sgbm93ICVzIiwgdHJhY2sudHlwZSgp
ID09IFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGU6OkF1ZGlvID8gImF1ZGlvIjoidmlkZW8iLCBy
ZWFsVGltZU1lZGlhU291cmNlLm11dGVkKCkgPyAibXV0ZWQiOiJ1bi1tdXRlZCIpOwotICAgIHN3
aXRjaCAodHJhY2sudHlwZSgpKSB7Ci0gICAgY2FzZSBSZWFsdGltZU1lZGlhU291cmNlOjpUeXBl
OjpBdWRpbzoKLSAgICAgICAgaWYgKCFyZWFsVGltZU1lZGlhU291cmNlLm11dGVkKCkpIHsKLSAg
ICAgICAgICAgIGdfb2JqZWN0X3NldChtX2F1ZGlvUmVuZGVyZXIuZ2V0KCksICJkaXNhYmxlZCIs
IGZhbHNlLCBudWxscHRyKTsKLSAgICAgICAgICAgIG93cl9tZWRpYV9yZW5kZXJlcl9zZXRfc291
cmNlKE9XUl9NRURJQV9SRU5ERVJFUihtX2F1ZGlvUmVuZGVyZXIuZ2V0KCkpLCBtZWRpYVNvdXJj
ZSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBnX29iamVjdF9zZXQobV9hdWRpb1Jl
bmRlcmVyLmdldCgpLCAiZGlzYWJsZWQiLCB0cnVlLCBudWxscHRyKTsKLSAgICAgICAgICAgIG93
cl9tZWRpYV9yZW5kZXJlcl9zZXRfc291cmNlKE9XUl9NRURJQV9SRU5ERVJFUihtX2F1ZGlvUmVu
ZGVyZXIuZ2V0KCkpLCBudWxscHRyKTsKLSAgICAgICAgfQotICAgICAgICBpZiAobWVkaWFTb3Vy
Y2UpCi0gICAgICAgICAgICBnX29iamVjdF9zZXQobWVkaWFTb3VyY2UsICJtdXRlIiwgIXRyYWNr
LmVuYWJsZWQoKSwgbnVsbHB0cik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgUmVhbHRpbWVN
ZWRpYVNvdXJjZTo6VHlwZTo6VmlkZW86Ci0gICAgICAgIGlmICghcmVhbFRpbWVNZWRpYVNvdXJj
ZS5tdXRlZCgpKSB7Ci0gICAgICAgICAgICBnX29iamVjdF9zZXQobV92aWRlb1JlbmRlcmVyLmdl
dCgpLCAiZGlzYWJsZWQiLCBmYWxzZSwgbnVsbHB0cik7Ci0gICAgICAgICAgICBvd3JfbWVkaWFf
cmVuZGVyZXJfc2V0X3NvdXJjZShPV1JfTUVESUFfUkVOREVSRVIobV92aWRlb1JlbmRlcmVyLmdl
dCgpKSwgbWVkaWFTb3VyY2UpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgZ19vYmpl
Y3Rfc2V0KG1fdmlkZW9SZW5kZXJlci5nZXQoKSwgImRpc2FibGVkIiwgdHJ1ZSwgbnVsbHB0cik7
Ci0gICAgICAgICAgICBvd3JfbWVkaWFfcmVuZGVyZXJfc2V0X3NvdXJjZShPV1JfTUVESUFfUkVO
REVSRVIobV92aWRlb1JlbmRlcmVyLmdldCgpKSwgbnVsbHB0cik7Ci0gICAgICAgIH0KLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBSZWFsdGltZU1lZGlhU291cmNlOjpUeXBlOjpOb25lOgotICAg
ICAgICBHU1RfV0FSTklORygiVHJ5aW5nIHRvIGNoYW5nZSBtdXRlIHN0YXRlIG9mIGEgdHJhY2sg
d2l0aCBOb25lIHR5cGUiKTsKLSAgICB9Ci19Ci0KLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyT3dyOjp0cmFja1NldHRpbmdzQ2hhbmdlZChNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZSYp
Ci17Ci0gICAgR1NUX0RFQlVHKCJUcmFjayBzZXR0aW5ncyBjaGFuZ2VkIik7Ci19Ci0KLXZvaWQg
TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyOjp0cmFja0VuYWJsZWRDaGFuZ2VkKE1lZGlh
U3RyZWFtVHJhY2tQcml2YXRlJiB0cmFjaykKLXsKLSAgICBHU1RfREVCVUcoIiVzIHRyYWNrIG5v
dyAlcyIsIHRyYWNrLnR5cGUoKSA9PSBSZWFsdGltZU1lZGlhU291cmNlOjpUeXBlOjpBdWRpbyA/
ICJhdWRpbyI6InZpZGVvIiwgdHJhY2suZW5hYmxlZCgpID8gImVuYWJsZWQiOiJkaXNhYmxlZCIp
OwotCi0gICAgc3dpdGNoICh0cmFjay50eXBlKCkpIHsKLSAgICBjYXNlIFJlYWx0aW1lTWVkaWFT
b3VyY2U6OlR5cGU6OkF1ZGlvOgotICAgICAgICBnX29iamVjdF9zZXQobV9hdWRpb1JlbmRlcmVy
LmdldCgpLCAiZGlzYWJsZWQiLCAhdHJhY2suZW5hYmxlZCgpLCBudWxscHRyKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBSZWFsdGltZU1lZGlhU291cmNlOjpUeXBlOjpWaWRlbzoKLSAgICAg
ICAgZ19vYmplY3Rfc2V0KG1fdmlkZW9SZW5kZXJlci5nZXQoKSwgImRpc2FibGVkIiwgIXRyYWNr
LmVuYWJsZWQoKSwgbnVsbHB0cik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgUmVhbHRpbWVN
ZWRpYVNvdXJjZTo6VHlwZTo6Tm9uZToKLSAgICAgICAgR1NUX1dBUk5JTkcoIlRyeWluZyB0byBj
aGFuZ2UgZW5hYmxlZCBzdGF0ZSBvZiBhIHRyYWNrIHdpdGggTm9uZSB0eXBlIik7Ci0gICAgfQot
fQotCi1Hc3RFbGVtZW50KiBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3I6OmNyZWF0ZVZp
ZGVvU2luaygpCi17Ci0gICAgR3N0RWxlbWVudCogc2luazsKLSNpZiBVU0UoR1NUUkVBTUVSX0dM
KQotICAgIC8vIE5vIG5lZWQgdG8gY3JlYXRlIGdsdXBsb2FkIGFuZCBnbGNvbG9yY29udmVydCBo
ZXJlIGJlY2F1c2UgdGhleSBhcmUKLSAgICAvLyBhbHJlYWR5IGNyZWF0ZWQgYnkgdGhlIHZpZGVv
IHJlbmRlcmVyLgotICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBwcm9iYWJseSByZXR1cm4gYSBS
ZWZQdHIuIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY0NzA5
LgotICAgIHNpbmsgPSBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjpjcmVhdGVHTEFw
cFNpbmsoKTsKLSAgICBtX3ZpZGVvU2luayA9IHNpbms7Ci0jZWxzZQotICAgIGlmIChtX3N0cmVh
bVByaXZhdGUtPmdldFZpZGVvUmVuZGVyZXIoKSkgewotICAgICAgICBtX3ZpZGVvUmVuZGVyZXIg
PSBtX3N0cmVhbVByaXZhdGUtPmdldFZpZGVvUmVuZGVyZXIoKTsKLSAgICAgICAgbV92aWRlb1Np
bmsgPSBtX3N0cmVhbVByaXZhdGUtPmdldFZpZGVvU2lua0VsZW1lbnQoKTsKLSAgICAgICAgZ19z
aWduYWxfY29ubmVjdF9zd2FwcGVkKG1fdmlkZW9TaW5rLmdldCgpLCAicmVwYWludC1yZXF1ZXN0
ZWQiLCBHX0NBTExCQUNLKE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6OnJlcGFpbnRD
YWxsYmFjayksIHRoaXMpOwotICAgICAgICBnX29iamVjdF9nZXQobV92aWRlb1JlbmRlcmVyLmdl
dCgpLCAic2luayIsICZzaW5rLCBudWxscHRyKTsKLSAgICB9IGVsc2UgewotICAgICAgICBHc3RF
bGVtZW50KiBnbGRvd25sb2FkID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlKCJnbGRvd25sb2Fk
IiwgbnVsbHB0cik7Ci0gICAgICAgIEdzdEVsZW1lbnQqIHZpZGVvY29udmVydCA9IGdzdF9lbGVt
ZW50X2ZhY3RvcnlfbWFrZSgidmlkZW9jb252ZXJ0IiwgbnVsbHB0cik7Ci0gICAgICAgIEdzdEVs
ZW1lbnQqIHdlYmtpdFNpbmsgPSBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjpjcmVh
dGVWaWRlb1NpbmsoKTsKLSAgICAgICAgc2luayA9IGdzdF9iaW5fbmV3KG51bGxwdHIpOwotICAg
ICAgICBnc3RfYmluX2FkZF9tYW55KEdTVF9CSU4oc2luayksIGdsZG93bmxvYWQsIHZpZGVvY29u
dmVydCwgd2Via2l0U2luaywgbnVsbHB0cik7Ci0gICAgICAgIGdzdF9lbGVtZW50X2xpbmtfbWFu
eShnbGRvd25sb2FkLCB2aWRlb2NvbnZlcnQsIHdlYmtpdFNpbmssIG51bGxwdHIpOwotICAgICAg
ICBHUmVmUHRyPEdzdFBhZD4gcGFkID0gYWRvcHRHUmVmKGdzdF9lbGVtZW50X2dldF9zdGF0aWNf
cGFkKGdsZG93bmxvYWQsICJzaW5rIikpOwotICAgICAgICBnc3RfZWxlbWVudF9hZGRfcGFkKHNp
bmssIGdzdF9naG9zdF9wYWRfbmV3KCJzaW5rIiwgcGFkLmdldCgpKSk7Ci0gICAgfQotI2VuZGlm
Ci0gICAgaWYgKCFtX3ZpZGVvUmVuZGVyZXIpIHsKLSAgICAgICAgbV92aWRlb1JlbmRlcmVyID0g
YWRvcHRHUmVmKG93cl9nc3RfdmlkZW9fcmVuZGVyZXJfbmV3KHNpbmspKTsKLSNpZiBVU0UoR1NU
UkVBTUVSX0dMKQotICAgICAgICBvd3JfdmlkZW9fcmVuZGVyZXJfc2V0X3JlcXVlc3RfY29udGV4
dF9jYWxsYmFjayhPV1JfVklERU9fUkVOREVSRVIobV92aWRlb1JlbmRlcmVyLmdldCgpKSwgKE93
clZpZGVvUmVuZGVyZXJSZXF1ZXN0Q29udGV4dENhbGxiYWNrKSBNZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXJCYXNlOjpyZXF1ZXN0R0xDb250ZXh0LCB0aGlzLCBudWxscHRyKTsKLSNlbmRpZgot
ICAgICAgICBtX3N0cmVhbVByaXZhdGUtPnNldFZpZGVvUmVuZGVyZXIobV92aWRlb1JlbmRlcmVy
LmdldCgpLCB2aWRlb1NpbmsoKSk7Ci0gICAgfQotICAgIHJldHVybiBzaW5rOwotfQotCi12b2lk
IE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93cjo6c2V0U2l6ZShjb25zdCBJbnRTaXplJiBz
aXplKQotewotICAgIGlmIChzaXplID09IG1fc2l6ZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6c2V0U2l6ZShzaXplKTsKLSAgICBpZiAo
bV92aWRlb1JlbmRlcmVyKQotICAgICAgICBnX29iamVjdF9zZXQobV92aWRlb1JlbmRlcmVyLmdl
dCgpLCAid2lkdGgiLCBzaXplLndpZHRoKCksICJoZWlnaHQiLCBzaXplLmhlaWdodCgpLCBudWxs
cHRyKTsKLQotICAgIGlmICghbV92aWRlb1RyYWNrKQotICAgICAgICByZXR1cm47Ci0KLSAgICBh
dXRvJiByZWFsVGltZU1lZGlhU291cmNlID0gc3RhdGljX2Nhc3Q8UmVhbHRpbWVNZWRpYVNvdXJj
ZU93ciY+KG1fdmlkZW9UcmFjay0+c291cmNlKCkpOwotICAgIHJlYWxUaW1lTWVkaWFTb3VyY2Uu
c2V0V2lkdGgoc2l6ZS53aWR0aCgpKTsKLSAgICByZWFsVGltZU1lZGlhU291cmNlLnNldEhlaWdo
dChzaXplLmhlaWdodCgpKTsKLX0KLQotRmxvYXRTaXplIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lck93cjo6bmF0dXJhbFNpemUoKSBjb25zdAotewotICAgIGF1dG8gc2l6ZSA9IE1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6Om5hdHVyYWxTaXplKCk7Ci0KLSAgICAvLyBJbiBjYXNl
IHdlIGFyZSBub3QgcGxheWluZyB0aGUgdmlkZW8gd2UgcmV0dXJuIHRoZSBzaXplIHdlIHNldCB0
byB0aGUgbWVkaWEgc291cmNlLgotICAgIGlmIChtX3ZpZGVvVHJhY2sgJiYgc2l6ZS5pc1plcm8o
KSkgewotICAgICAgICBhdXRvJiByZWFsVGltZU1lZGlhU291cmNlID0gc3RhdGljX2Nhc3Q8UmVh
bHRpbWVNZWRpYVNvdXJjZU93ciY+KG1fdmlkZW9UcmFjay0+c291cmNlKCkpOwotICAgICAgICBy
ZXR1cm4gcmVhbFRpbWVNZWRpYVNvdXJjZS5zaXplKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHNp
emU7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShWSURF
TykgJiYgRU5BQkxFKE1FRElBX1NUUkVBTSkgJiYgVVNFKEdTVFJFQU1FUikgJiYgVVNFKE9QRU5X
RUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3Ry
ZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dy
LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMzNDYzMGU0NWMzNDgxYmE3ZDQyZjU2
NjM3ZTBkYWEwNTE1NGJkMmYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lck93ci5oCisrKyAvZGV2L251bGwKQEAgLTEsMTI4ICswLDAg
QEAKLS8qCi0gKiAgQ29weXJpZ2h0IChDKSAyMDE1IElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiAgQ29weXJpZ2h0IChDKSAyMDE1IE1ldHJvbG9naWNhbC4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqICB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgot
ICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqICBMZXNzZXIgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiAgTGlj
ZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBT
b2Z0d2FyZQotICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQotICovCi0KLSNpZm5kZWYgTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyX2gKLSNkZWZpbmUgTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyT3dyX2gKLQotI2lmIEVOQUJMRShWSURFTykgJiYgRU5BQkxFKE1FRElBX1NUUkVBTSkg
JiYgVVNFKEdTVFJFQU1FUikgJiYgVVNFKE9QRU5XRUJSVEMpCi0KLSNpbmNsdWRlICJBdWRpb1Ry
YWNrUHJpdmF0ZU1lZGlhU3RyZWFtLmgiCi0jaW5jbHVkZSAiTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyQmFzZS5oIgotI2luY2x1ZGUgIk1lZGlhU3RyZWFtVHJhY2tQcml2YXRlLmgiCi0jaW5j
bHVkZSAiVmlkZW9UcmFja1ByaXZhdGVNZWRpYVN0cmVhbS5oIgotCi10eXBlZGVmIHN0cnVjdCBf
T3dyR3N0VmlkZW9SZW5kZXJlciBPd3JHc3RWaWRlb1JlbmRlcmVyOwotdHlwZWRlZiBzdHJ1Y3Qg
X093ckdzdEF1ZGlvUmVuZGVyZXIgT3dyR3N0QXVkaW9SZW5kZXJlcjsKLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotCi1jbGFzcyBNZWRpYVN0cmVhbVByaXZhdGU7Ci1jbGFzcyBSZWFsdGltZU1lZGlh
U291cmNlT3dyOwotCi1jbGFzcyBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3IgOiBwdWJs
aWMgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZSwgcHJpdmF0ZSBNZWRpYVN0cmVhbVRy
YWNrUHJpdmF0ZTo6T2JzZXJ2ZXIgewotcHVibGljOgotICAgIGV4cGxpY2l0IE1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lck93cihNZWRpYVBsYXllciopOwotICAgIH5NZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXJPd3IoKTsKLQotICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVyTWVkaWFFbmdpbmUo
TWVkaWFFbmdpbmVSZWdpc3RyYXIpOwotCi0gICAgdm9pZCBzZXRTaXplKGNvbnN0IEludFNpemUm
KSBmaW5hbDsKLQotICAgIEZsb2F0U2l6ZSBuYXR1cmFsU2l6ZSgpIGNvbnN0IGZpbmFsOwotCi1w
cml2YXRlOgotICAgIEdzdEVsZW1lbnQqIGNyZWF0ZVZpZGVvU2luaygpIGZpbmFsOwotICAgIEdz
dEVsZW1lbnQqIGF1ZGlvU2luaygpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fYXVkaW9TaW5rLmdl
dCgpOyB9Ci0gICAgYm9vbCBpc0xpdmVTdHJlYW0oKSBjb25zdCBmaW5hbCB7IHJldHVybiB0cnVl
OyB9Ci0KLSAgICBTdHJpbmcgZW5naW5lRGVzY3JpcHRpb24oKSBjb25zdCBmaW5hbCB7IHJldHVy
biAiT3BlbldlYlJUQyI7IH0KLQotICAgIHZvaWQgbG9hZChjb25zdCBTdHJpbmcmKSBmaW5hbDsK
LSNpZiBFTkFCTEUoTUVESUFfU09VUkNFKQotICAgIHZvaWQgbG9hZChjb25zdCBTdHJpbmcmLCBN
ZWRpYVNvdXJjZVByaXZhdGVDbGllbnQqKSBmaW5hbDsKLSNlbmRpZgotICAgIHZvaWQgbG9hZChN
ZWRpYVN0cmVhbVByaXZhdGUmKSBmaW5hbDsKLSAgICB2b2lkIGNhbmNlbExvYWQoKSBmaW5hbCB7
IH0KLQotICAgIHZvaWQgcHJlcGFyZVRvUGxheSgpIGZpbmFsIHsgfQotICAgIHZvaWQgcGxheSgp
IGZpbmFsOwotICAgIHZvaWQgcGF1c2UoKSBmaW5hbDsKLQotICAgIGJvb2wgaGFzVmlkZW8oKSBj
b25zdCBmaW5hbDsKLSAgICBib29sIGhhc0F1ZGlvKCkgY29uc3QgZmluYWw7Ci0KLSAgICBmbG9h
dCBkdXJhdGlvbigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIDA7IH0KLQotICAgIGZsb2F0IGN1cnJl
bnRUaW1lKCkgY29uc3QgZmluYWw7Ci0gICAgdm9pZCBzZWVrKGZsb2F0KSBmaW5hbCB7IH0KLSAg
ICBib29sIHNlZWtpbmcoKSBjb25zdCBmaW5hbCB7IHJldHVybiBmYWxzZTsgfQotCi0gICAgdm9p
ZCBzZXRSYXRlKGZsb2F0KSBmaW5hbCB7IH0KLSAgICB2b2lkIHNldFByZXNlcnZlc1BpdGNoKGJv
b2wpIGZpbmFsIHsgfQotICAgIGJvb2wgcGF1c2VkKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9w
YXVzZWQ7IH0KLQotICAgIHZvaWQgc2V0Vm9sdW1lKGZsb2F0KSBmaW5hbDsKLSAgICB2b2lkIHNl
dE11dGVkKGJvb2wpIGZpbmFsOwotCi0gICAgYm9vbCBoYXNDbG9zZWRDYXB0aW9ucygpIGNvbnN0
IGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdm9pZCBzZXRDbG9zZWRDYXB0aW9uc1Zpc2li
bGUoYm9vbCkgZmluYWwgeyB9OwotCi0gICAgZmxvYXQgbWF4VGltZVNlZWthYmxlKCkgY29uc3Qg
ZmluYWwgeyByZXR1cm4gMDsgfQotICAgIHN0ZDo6dW5pcXVlX3B0cjxQbGF0Zm9ybVRpbWVSYW5n
ZXM+IGJ1ZmZlcmVkKCkgY29uc3QgZmluYWwgeyByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxQbGF0
Zm9ybVRpbWVSYW5nZXM+KCk7IH0KLSAgICBib29sIGRpZExvYWRpbmdQcm9ncmVzcygpIGNvbnN0
IGZpbmFsOwotCi0gICAgdW5zaWduZWQgbG9uZyBsb25nIHRvdGFsQnl0ZXMoKSBjb25zdCBmaW5h
bCB7IHJldHVybiAwOyB9Ci0KLSAgICBib29sIGNhbkxvYWRQb3N0ZXIoKSBjb25zdCBmaW5hbCB7
IHJldHVybiBmYWxzZTsgfQotICAgIHZvaWQgc2V0UG9zdGVyKGNvbnN0IFN0cmluZyYpIGZpbmFs
IHsgfQotICAgIGJvb2wgZW5kZWQoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2VuZGVkOyB9Ci0K
LSAgICAvLyBNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZTo6T2JzZXJ2ZXIgaW1wbGVtZW50YXRpb24u
Ci0gICAgdm9pZCB0cmFja0VuZGVkKE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlJikgZmluYWw7Ci0g
ICAgdm9pZCB0cmFja011dGVkQ2hhbmdlZChNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZSYpIGZpbmFs
OwotICAgIHZvaWQgdHJhY2tTZXR0aW5nc0NoYW5nZWQoTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUm
KSBmaW5hbDsKLSAgICB2b2lkIHRyYWNrRW5hYmxlZENoYW5nZWQoTWVkaWFTdHJlYW1UcmFja1By
aXZhdGUmKSBmaW5hbDsKLQotICAgIHN0YXRpYyB2b2lkIGdldFN1cHBvcnRlZFR5cGVzKEhhc2hT
ZXQ8U3RyaW5nLCBBU0NJSUNhc2VJbnNlbnNpdGl2ZUhhc2g+Jik7Ci0gICAgc3RhdGljIE1lZGlh
UGxheWVyOjpTdXBwb3J0c1R5cGUgc3VwcG9ydHNUeXBlKGNvbnN0IE1lZGlhRW5naW5lU3VwcG9y
dFBhcmFtZXRlcnMmKTsKLSAgICBzdGF0aWMgYm9vbCBpbml0aWFsaXplR1N0cmVhbWVyQW5kR1N0
cmVhbWVyRGVidWdnaW5nKCk7Ci0gICAgdm9pZCBjcmVhdGVHU1RBdWRpb1NpbmtCaW4oKTsKLSAg
ICB2b2lkIGxvYWRpbmdGYWlsZWQoTWVkaWFQbGF5ZXI6Ok5ldHdvcmtTdGF0ZSBlcnJvcik7Ci0g
ICAgdm9pZCBzdG9wKCk7Ci0gICAgdm9pZCBtYXliZUhhbmRsZUNoYW5nZU11dGVkU3RhdGUoTWVk
aWFTdHJlYW1UcmFja1ByaXZhdGUmKTsKLSAgICB2b2lkIGRpc2FibGVNZWRpYVRyYWNrcygpOwot
Ci0gICAgYm9vbCBtX3BhdXNlZCB7IHRydWUgfTsKLSAgICBib29sIG1fZW5kZWQgeyBmYWxzZSB9
OwotICAgIFJlZlB0cjxNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZT4gbV92aWRlb1RyYWNrOwotICAg
IFJlZlB0cjxNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZT4gbV9hdWRpb1RyYWNrOwotICAgIEdSZWZQ
dHI8R3N0RWxlbWVudD4gbV9hdWRpb1Npbms7Ci0gICAgUmVmUHRyPE1lZGlhU3RyZWFtUHJpdmF0
ZT4gbV9zdHJlYW1Qcml2YXRlOwotICAgIEdSZWZQdHI8T3dyR3N0VmlkZW9SZW5kZXJlcj4gbV92
aWRlb1JlbmRlcmVyOwotICAgIEdSZWZQdHI8T3dyR3N0QXVkaW9SZW5kZXJlcj4gbV9hdWRpb1Jl
bmRlcmVyOwotCi0gICAgSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxBdWRpb1RyYWNrUHJpdmF0ZU1l
ZGlhU3RyZWFtPj4gbV9hdWRpb1RyYWNrTWFwOwotICAgIEhhc2hNYXA8U3RyaW5nLCBSZWZQdHI8
VmlkZW9UcmFja1ByaXZhdGVNZWRpYVN0cmVhbT4+IG1fdmlkZW9UcmFja01hcDsKLX07Ci0KLX0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShWSURFTykgJiYgRU5BQkxF
KE1FRElBX1NUUkVBTSkgJiYgVVNFKEdTVFJFQU1FUikgJiYgVVNFKE9QRU5XRUJSVEMpCi0KLSNl
bmRpZiAvLyBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3JfaApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFFbmRwb2ludC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYUVuZHBvaW50LmNwcApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDEzNzVmZDRjMDQxMzhkZmUxNjVjMzU0YjIxZWE5YjU2
MjVmYWZiYy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYUVuZHBvaW50LmNwcAorKysg
L2Rldi9udWxsCkBAIC0xLDg2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgRXJp
Y3Nzb24gQUIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIKLSAqICAgIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqICAgIGRpc3RyaWJ1dGlvbi4KLSAqIDMu
IE5laXRoZXIgdGhlIG5hbWUgb2YgRXJpY3Nzb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJp
YnV0b3JzCi0gKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tIHRoaXMKLSAqICAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
LSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0j
aWYgRU5BQkxFKFdFQl9SVEMpCi0jaW5jbHVkZSAiTWVkaWFFbmRwb2ludC5oIgotCi0jaW5jbHVk
ZSAiTWVkaWFQYXlsb2FkLmgiCi0jaW5jbHVkZSAiUlRDRGF0YUNoYW5uZWxIYW5kbGVyLmgiCi0j
aW5jbHVkZSAiUmVhbHRpbWVNZWRpYVNvdXJjZS5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0K
LWNsYXNzIEVtcHR5UmVhbHRpbWVNZWRpYVNvdXJjZSBmaW5hbCA6IHB1YmxpYyBSZWFsdGltZU1l
ZGlhU291cmNlIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEVtcHR5UmVhbHRpbWVNZWRpYVNv
dXJjZT4gY3JlYXRlKCkgeyByZXR1cm4gYWRvcHRSZWYoKm5ldyBFbXB0eVJlYWx0aW1lTWVkaWFT
b3VyY2UoKSk7IH0KLQotcHJpdmF0ZToKLSAgICBFbXB0eVJlYWx0aW1lTWVkaWFTb3VyY2UoKSA6
IFJlYWx0aW1lTWVkaWFTb3VyY2UoZW1wdHlTdHJpbmcoKSwgVHlwZTo6Tm9uZSwgZW1wdHlTdHJp
bmcoKSkgeyB9Ci0KLSAgICBjb25zdCBSZWFsdGltZU1lZGlhU291cmNlQ2FwYWJpbGl0aWVzJiBj
YXBhYmlsaXRpZXMoKSBjb25zdCBmaW5hbCB7IHJldHVybiBSZWFsdGltZU1lZGlhU291cmNlQ2Fw
YWJpbGl0aWVzOjplbXB0eUNhcGFiaWxpdGllcygpOyB9Ci0gICAgY29uc3QgUmVhbHRpbWVNZWRp
YVNvdXJjZVNldHRpbmdzJiBzZXR0aW5ncygpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fc291cmNl
U2V0dGluZ3M7IH0KLQotICAgIFJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5ncyBtX3NvdXJjZVNl
dHRpbmdzOwotfTsKLQotY2xhc3MgRW1wdHlNZWRpYUVuZHBvaW50IGZpbmFsIDogcHVibGljIE1l
ZGlhRW5kcG9pbnQgewotcHJpdmF0ZToKLSAgICB2b2lkIHNldENvbmZpZ3VyYXRpb24oTWVkaWFF
bmRwb2ludENvbmZpZ3VyYXRpb24mJikgZmluYWwgeyB9Ci0KLSAgICB2b2lkIGdlbmVyYXRlRHRs
c0luZm8oKSBmaW5hbCB7IH0KLSAgICBNZWRpYVBheWxvYWRWZWN0b3IgZ2V0RGVmYXVsdEF1ZGlv
UGF5bG9hZHMoKSBmaW5hbCB7IHJldHVybiBNZWRpYVBheWxvYWRWZWN0b3IoKTsgfQotICAgIE1l
ZGlhUGF5bG9hZFZlY3RvciBnZXREZWZhdWx0VmlkZW9QYXlsb2FkcygpIGZpbmFsIHsgcmV0dXJu
IE1lZGlhUGF5bG9hZFZlY3RvcigpOyB9Ci0gICAgTWVkaWFQYXlsb2FkVmVjdG9yIGZpbHRlclBh
eWxvYWRzKGNvbnN0IE1lZGlhUGF5bG9hZFZlY3RvciYsIGNvbnN0IE1lZGlhUGF5bG9hZFZlY3Rv
ciYpIGZpbmFsIHsgcmV0dXJuIE1lZGlhUGF5bG9hZFZlY3RvcigpOyB9Ci0KLSAgICBVcGRhdGVS
ZXN1bHQgdXBkYXRlUmVjZWl2ZUNvbmZpZ3VyYXRpb24oTWVkaWFFbmRwb2ludFNlc3Npb25Db25m
aWd1cmF0aW9uKiwgYm9vbCkgZmluYWwgeyByZXR1cm4gVXBkYXRlUmVzdWx0OjpGYWlsZWQ7IH0K
LSAgICBVcGRhdGVSZXN1bHQgdXBkYXRlU2VuZENvbmZpZ3VyYXRpb24oTWVkaWFFbmRwb2ludFNl
c3Npb25Db25maWd1cmF0aW9uKiwgY29uc3QgUmVhbHRpbWVNZWRpYVNvdXJjZU1hcCYsIGJvb2wp
IGZpbmFsIHsgcmV0dXJuIFVwZGF0ZVJlc3VsdDo6RmFpbGVkOyB9Ci0KLSAgICB2b2lkIGFkZFJl
bW90ZUNhbmRpZGF0ZShjb25zdCBJY2VDYW5kaWRhdGUmLCBjb25zdCBTdHJpbmcmLCBjb25zdCBT
dHJpbmcmLCBjb25zdCBTdHJpbmcmKSBmaW5hbCB7IH0KLQotICAgIFJlZjxSZWFsdGltZU1lZGlh
U291cmNlPiBjcmVhdGVNdXRlZFJlbW90ZVNvdXJjZShjb25zdCBTdHJpbmcmLCBSZWFsdGltZU1l
ZGlhU291cmNlOjpUeXBlKSBmaW5hbCB7IHJldHVybiBFbXB0eVJlYWx0aW1lTWVkaWFTb3VyY2U6
OmNyZWF0ZSgpOyB9Ci0gICAgdm9pZCByZXBsYWNlU2VuZFNvdXJjZShSZWFsdGltZU1lZGlhU291
cmNlJiwgY29uc3QgU3RyaW5nJikgZmluYWwgeyB9Ci0gICAgdm9pZCByZXBsYWNlTXV0ZWRSZW1v
dGVTb3VyY2VNaWQoY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJikgZmluYWwgeyB9OwotCi0g
ICAgc3RkOjp1bmlxdWVfcHRyPFJUQ0RhdGFDaGFubmVsSGFuZGxlcj4gY3JlYXRlRGF0YUNoYW5u
ZWxIYW5kbGVyKGNvbnN0IFN0cmluZyYsIGNvbnN0IFJUQ0RhdGFDaGFubmVsSW5pdCYpIGZpbmFs
IHsgcmV0dXJuIG51bGxwdHI7IH0KLSAgICB2b2lkIHN0b3AoKSBmaW5hbCB7IH0KLX07Ci0KLXN0
YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8TWVkaWFFbmRwb2ludD4gY3JlYXRlTWVkaWFFbmRwb2ludChN
ZWRpYUVuZHBvaW50Q2xpZW50JikKLXsKLSAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxFbXB0
eU1lZGlhRW5kcG9pbnQ+KCk7Ci19Ci0KLUNyZWF0ZU1lZGlhRW5kcG9pbnQgTWVkaWFFbmRwb2lu
dDo6Y3JlYXRlID0gY3JlYXRlTWVkaWFFbmRwb2ludDsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQotCi0jZW5kaWYgLy8gRU5BQkxFKFdFQl9SVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYUVuZHBvaW50LmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYUVuZHBvaW50LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDUxYjUxZDRlMDhhM2RkM2VmYjA5YTAxMWUzMjk3NGQyOGI3OWRmNzguLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFFbmRwb2ludC5oCisrKyAvZGV2L251bGwKQEAgLTEs
MTA4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgRXJpY3Nzb24gQUIuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
Ci0gKiAgICBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlCi0gKiAgICBkaXN0cmlidXRpb24uCi0gKiAzLiBOZWl0aGVyIHRoZSBuYW1l
IG9mIEVyaWNzc29uIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICogICAgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlz
Ci0gKiAgICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
LSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaWYgRU5BQkxFKFdFQl9SVEMpCi0KLSNp
bmNsdWRlICJNZWRpYUVuZHBvaW50Q29uZmlndXJhdGlvbi5oIgotI2luY2x1ZGUgIlBlZXJDb25u
ZWN0aW9uQmFja2VuZC5oIgotI2luY2x1ZGUgIlJUQ0ljZVRyYW5zcG9ydFN0YXRlLmgiCi0jaW5j
bHVkZSAiUmVhbHRpbWVNZWRpYVNvdXJjZS5oIgotI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0j
aW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQot
Y2xhc3MgTWVkaWFFbmRwb2ludDsKLWNsYXNzIE1lZGlhRW5kcG9pbnRDbGllbnQ7Ci1jbGFzcyBN
ZWRpYUVuZHBvaW50U2Vzc2lvbkNvbmZpZ3VyYXRpb247Ci1jbGFzcyBNZWRpYVN0cmVhbVRyYWNr
OwotY2xhc3MgUlRDRGF0YUNoYW5uZWxIYW5kbGVyOwotY2xhc3MgUmVhbHRpbWVNZWRpYVNvdXJj
ZTsKLQotc3RydWN0IEljZUNhbmRpZGF0ZTsKLXN0cnVjdCBNZWRpYVBheWxvYWQ7Ci1zdHJ1Y3Qg
UlRDRGF0YUNoYW5uZWxJbml0OwotCi10eXBlZGVmIHN0ZDo6dW5pcXVlX3B0cjxNZWRpYUVuZHBv
aW50PiAoKkNyZWF0ZU1lZGlhRW5kcG9pbnQpKE1lZGlhRW5kcG9pbnRDbGllbnQmKTsKLXR5cGVk
ZWYgVmVjdG9yPE1lZGlhUGF5bG9hZD4gTWVkaWFQYXlsb2FkVmVjdG9yOwotdHlwZWRlZiBIYXNo
TWFwPFN0cmluZywgUmVhbHRpbWVNZWRpYVNvdXJjZSo+IFJlYWx0aW1lTWVkaWFTb3VyY2VNYXA7
Ci0KLWNsYXNzIE1lZGlhRW5kcG9pbnQgewotcHVibGljOgotICAgIFdFQkNPUkVfRVhQT1JUIHN0
YXRpYyBDcmVhdGVNZWRpYUVuZHBvaW50IGNyZWF0ZTsKLSAgICB2aXJ0dWFsIH5NZWRpYUVuZHBv
aW50KCkgeyB9Ci0KLSAgICBlbnVtIGNsYXNzIFVwZGF0ZVJlc3VsdCB7Ci0gICAgICAgIFN1Y2Nl
c3MsCi0gICAgICAgIFN1Y2Nlc3NXaXRoSWNlUmVzdGFydCwKLSAgICAgICAgRmFpbGVkCi0gICAg
fTsKLQotICAgIHZpcnR1YWwgdm9pZCBzZXRDb25maWd1cmF0aW9uKE1lZGlhRW5kcG9pbnRDb25m
aWd1cmF0aW9uJiYpID0gMDsKLQotICAgIHZpcnR1YWwgdm9pZCBnZW5lcmF0ZUR0bHNJbmZvKCkg
PSAwOwotICAgIHZpcnR1YWwgTWVkaWFQYXlsb2FkVmVjdG9yIGdldERlZmF1bHRBdWRpb1BheWxv
YWRzKCkgPSAwOwotICAgIHZpcnR1YWwgTWVkaWFQYXlsb2FkVmVjdG9yIGdldERlZmF1bHRWaWRl
b1BheWxvYWRzKCkgPSAwOwotICAgIHZpcnR1YWwgTWVkaWFQYXlsb2FkVmVjdG9yIGZpbHRlclBh
eWxvYWRzKGNvbnN0IE1lZGlhUGF5bG9hZFZlY3RvciYgcmVtb3RlUGF5bG9hZHMsIGNvbnN0IE1l
ZGlhUGF5bG9hZFZlY3RvciYgZGVmYXVsdFBheWxvYWRzKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIFVw
ZGF0ZVJlc3VsdCB1cGRhdGVSZWNlaXZlQ29uZmlndXJhdGlvbihNZWRpYUVuZHBvaW50U2Vzc2lv
bkNvbmZpZ3VyYXRpb24qLCBib29sIGlzSW5pdGlhdG9yKSA9IDA7Ci0gICAgdmlydHVhbCBVcGRh
dGVSZXN1bHQgdXBkYXRlU2VuZENvbmZpZ3VyYXRpb24oTWVkaWFFbmRwb2ludFNlc3Npb25Db25m
aWd1cmF0aW9uKiwgY29uc3QgUmVhbHRpbWVNZWRpYVNvdXJjZU1hcCYsIGJvb2wgaXNJbml0aWF0
b3IpID0gMDsKLQotICAgIHZpcnR1YWwgdm9pZCBhZGRSZW1vdGVDYW5kaWRhdGUoY29uc3QgSWNl
Q2FuZGlkYXRlJiwgY29uc3QgU3RyaW5nJiBtaWQsIGNvbnN0IFN0cmluZyYgdWZyYWcsIGNvbnN0
IFN0cmluZyYgcGFzc3dvcmQpID0gMDsKLQotICAgIHZpcnR1YWwgUmVmPFJlYWx0aW1lTWVkaWFT
b3VyY2U+IGNyZWF0ZU11dGVkUmVtb3RlU291cmNlKGNvbnN0IFN0cmluZyYgbWlkLCBSZWFsdGlt
ZU1lZGlhU291cmNlOjpUeXBlKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlcGxhY2VTZW5kU291
cmNlKFJlYWx0aW1lTWVkaWFTb3VyY2UmLCBjb25zdCBTdHJpbmcmIG1pZCkgPSAwOwotICAgIHZp
cnR1YWwgdm9pZCByZXBsYWNlTXV0ZWRSZW1vdGVTb3VyY2VNaWQoY29uc3QgU3RyaW5nJiBvbGRN
aWQsIGNvbnN0IFN0cmluZyYgbmV3TWlkKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIHN0ZDo6dW5pcXVl
X3B0cjxSVENEYXRhQ2hhbm5lbEhhbmRsZXI+IGNyZWF0ZURhdGFDaGFubmVsSGFuZGxlcihjb25z
dCBTdHJpbmcmLCBjb25zdCBSVENEYXRhQ2hhbm5lbEluaXQmKSA9IDA7Ci0KLSAgICB2aXJ0dWFs
IHZvaWQgc3RvcCgpID0gMDsKLQotICAgIHZpcnR1YWwgdm9pZCBlbXVsYXRlUGxhdGZvcm1FdmVu
dChjb25zdCBTdHJpbmcmKSB7IH07Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZ2V0U3RhdHMoTWVkaWFT
dHJlYW1UcmFjayosIFBlZXJDb25uZWN0aW9uOjpTdGF0c1Byb21pc2UmJiBwcm9taXNlKSB7IHBy
b21pc2UucmVqZWN0KE5vdFN1cHBvcnRlZEVycm9yKTsgfQotfTsKLQotY2xhc3MgTWVkaWFFbmRw
b2ludENsaWVudCB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB2b2lkIGdvdER0bHNGaW5nZXJwcmlu
dChjb25zdCBTdHJpbmcmIGZpbmdlcnByaW50LCBjb25zdCBTdHJpbmcmIGZpbmdlcnByaW50RnVu
Y3Rpb24pID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZ290SWNlQ2FuZGlkYXRlKGNvbnN0IFN0cmlu
ZyYgbWlkLCBJY2VDYW5kaWRhdGUmJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBkb25lR2F0aGVy
aW5nQ2FuZGlkYXRlcyhjb25zdCBTdHJpbmcmIG1pZCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBp
Y2VUcmFuc3BvcnRTdGF0ZUNoYW5nZWQoY29uc3QgU3RyaW5nJiBtaWQsIFJUQ0ljZVRyYW5zcG9y
dFN0YXRlKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIH5NZWRpYUVuZHBvaW50Q2xpZW50KCkgeyB9Ci19
OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoV0VCX1JUQykK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhRW5k
cG9pbnRTZXNzaW9uQ29uZmlndXJhdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVk
aWFzdHJlYW0vTWVkaWFFbmRwb2ludFNlc3Npb25Db25maWd1cmF0aW9uLmgKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IGJmMmJkMWU4Yjk3YzRlNzg5OTE5MTMxM2RhMmE4ZmVmMmJiMzhl
ZDkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFFbmRwb2ludFNlc3Npb25Db25maWd1
cmF0aW9uLmgKKysrIC9kZXYvbnVsbApAQCAtMSw5MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDE1IEVyaWNzc29uIEFCLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiAgICBpbiB0aGUgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiAgICBkaXN0cmli
dXRpb24uCi0gKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIEVyaWNzc29uIG5vciB0aGUgbmFtZXMg
b2YgaXRzIGNvbnRyaWJ1dG9ycwotICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0gKiAgICBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAi
QVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
Ci0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgTWVk
aWFFbmRwb2ludFNlc3Npb25Db25maWd1cmF0aW9uX2gKLSNkZWZpbmUgTWVkaWFFbmRwb2ludFNl
c3Npb25Db25maWd1cmF0aW9uX2gKLQotI2lmIEVOQUJMRShXRUJfUlRDKQotCi0jaW5jbHVkZSAi
UGVlckNvbm5lY3Rpb25TdGF0ZXMuaCIKLSNpbmNsdWRlICJQZWVyTWVkaWFEZXNjcmlwdGlvbi5o
IgotI2luY2x1ZGUgPHd0Zi9DcnlwdG9ncmFwaGljYWxseVJhbmRvbU51bWJlci5oPgotCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIE1lZGlhRW5kcG9pbnRTZXNzaW9uQ29uZmlndXJhdGlv
biA6IHB1YmxpYyBSZWZDb3VudGVkPE1lZGlhRW5kcG9pbnRTZXNzaW9uQ29uZmlndXJhdGlvbj4g
ewotcHVibGljOgotICAgIHN0YXRpYyBSZWZQdHI8TWVkaWFFbmRwb2ludFNlc3Npb25Db25maWd1
cmF0aW9uPiBjcmVhdGUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBNZWRp
YUVuZHBvaW50U2Vzc2lvbkNvbmZpZ3VyYXRpb24oKSk7Ci0gICAgfQotICAgIHZpcnR1YWwgfk1l
ZGlhRW5kcG9pbnRTZXNzaW9uQ29uZmlndXJhdGlvbigpIHsgfQotCi0gICAgaW50NjRfdCBzZXNz
aW9uSWQoKSBjb25zdCB7IHJldHVybiBtX3Nlc3Npb25JZDsgfQotICAgIHZvaWQgc2V0U2Vzc2lv
bklkKGludDY0X3Qgc2Vzc2lvbklkKSB7IG1fc2Vzc2lvbklkID0gc2Vzc2lvbklkOyB9Ci0KLSAg
ICB1bnNpZ25lZCBzZXNzaW9uVmVyc2lvbigpIGNvbnN0IHsgcmV0dXJuIG1fc2Vzc2lvblZlcnNp
b247IH0KLSAgICB2b2lkIHNldFNlc3Npb25WZXJzaW9uKHVuc2lnbmVkIHNlc3Npb25WZXJzaW9u
KSB7IG1fc2Vzc2lvblZlcnNpb24gPSBzZXNzaW9uVmVyc2lvbjsgfQotCi0gICAgVmVjdG9yPFBl
ZXJNZWRpYURlc2NyaXB0aW9uPiYgbWVkaWFEZXNjcmlwdGlvbnMoKSB7IHJldHVybiBtX21lZGlh
RGVzY3JpcHRpb25zOyB9Ci0gICAgY29uc3QgVmVjdG9yPFBlZXJNZWRpYURlc2NyaXB0aW9uPiYg
bWVkaWFEZXNjcmlwdGlvbnMoKSBjb25zdCB7IHJldHVybiBtX21lZGlhRGVzY3JpcHRpb25zOyB9
Ci0gICAgdm9pZCBhZGRNZWRpYURlc2NyaXB0aW9uKFBlZXJNZWRpYURlc2NyaXB0aW9uJiYgZGVz
Y3JpcHRpb24pIHsgbV9tZWRpYURlc2NyaXB0aW9ucy5hcHBlbmQoV1RGTW92ZShkZXNjcmlwdGlv
bikpOyB9Ci0KLSAgICBQZWVyQ29ubmVjdGlvblN0YXRlczo6QnVuZGxlUG9saWN5IGJ1bmRsZVBv
bGljeSgpIGNvbnN0IHsgcmV0dXJuIG1fYnVuZGxlUG9saWN5OyB9Ci0gICAgdm9pZCBzZXRCdW5k
bGVQb2xpY3koUGVlckNvbm5lY3Rpb25TdGF0ZXM6OkJ1bmRsZVBvbGljeSBidW5kbGVQb2xpY3kp
IHsgbV9idW5kbGVQb2xpY3kgPSBidW5kbGVQb2xpY3k7IH0KLQotICAgIFJlZlB0cjxNZWRpYUVu
ZHBvaW50U2Vzc2lvbkNvbmZpZ3VyYXRpb24+IGNsb25lKCkgY29uc3QKLSAgICB7Ci0gICAgICAg
IFJlZlB0cjxNZWRpYUVuZHBvaW50U2Vzc2lvbkNvbmZpZ3VyYXRpb24+IGNvcHkgPSBjcmVhdGUo
KTsKLSAgICAgICAgY29weS0+bV9zZXNzaW9uSWQgPSBtX3Nlc3Npb25JZDsKLSAgICAgICAgY29w
eS0+bV9zZXNzaW9uVmVyc2lvbiA9IG1fc2Vzc2lvblZlcnNpb247Ci0gICAgICAgIGNvcHktPm1f
bWVkaWFEZXNjcmlwdGlvbnMgPSBtX21lZGlhRGVzY3JpcHRpb25zOwotICAgICAgICBjb3B5LT5t
X2J1bmRsZVBvbGljeSA9IG1fYnVuZGxlUG9saWN5OwotCi0gICAgICAgIHJldHVybiBjb3B5Owot
ICAgIH0KLQotcHJpdmF0ZToKLSAgICBNZWRpYUVuZHBvaW50U2Vzc2lvbkNvbmZpZ3VyYXRpb24o
KQotICAgIHsKLSAgICAgICAgbV9zZXNzaW9uSWQgPSBjcnlwdG9ncmFwaGljYWxseVJhbmRvbU51
bWJlcigpOwotICAgICAgICBtX3Nlc3Npb25JZCA9IG1fc2Vzc2lvbklkIDw8IDMxIHwgY3J5cHRv
Z3JhcGhpY2FsbHlSYW5kb21OdW1iZXIoKTsKLSAgICB9Ci0KLSAgICBpbnQ2NF90IG1fc2Vzc2lv
bklkOwotICAgIHVuc2lnbmVkIG1fc2Vzc2lvblZlcnNpb24geyAwIH07Ci0KLSAgICBWZWN0b3I8
UGVlck1lZGlhRGVzY3JpcHRpb24+IG1fbWVkaWFEZXNjcmlwdGlvbnM7Ci0KLSAgICBQZWVyQ29u
bmVjdGlvblN0YXRlczo6QnVuZGxlUG9saWN5IG1fYnVuZGxlUG9saWN5IHsgUGVlckNvbm5lY3Rp
b25TdGF0ZXM6OkJ1bmRsZVBvbGljeTo6QmFsYW5jZWQgfTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShXRUJfUlRDKQotCi0jZW5kaWYgLy8gTWVkaWFF
bmRwb2ludFNlc3Npb25Db25maWd1cmF0aW9uX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRl
ci5jcHAKaW5kZXggNzYzZmIyZWRmNjIwOGE5MWJiZDcwOWFjYmVmMTRhOTU0MTNkYjhiNi4uNmFk
OWFmZGNmM2ZmNjVjMzRhODNkYjliM2JkZTVhMTQzMzUxM2M1ZSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vUmVhbHRpbWVNZWRp
YVNvdXJjZUNlbnRlci5jcHAKQEAgLTM1LDYgKzM1LDExIEBACiAKICNpZiBFTkFCTEUoTUVESUFf
U1RSRUFNKQogCisvLyBGSVhNRTogR1RLIHRvIGltcGxlbWVudCBpdHMgb3duIFJlYWx0aW1lTWVk
aWFTb3VyY2VDZW50ZXIuCisjaWYgUExBVEZPUk0oR1RLKQorI2luY2x1ZGUgIk1vY2tSZWFsdGlt
ZU1lZGlhU291cmNlQ2VudGVyLmgiCisjZW5kaWYKKwogI2luY2x1ZGUgIkNhcHR1cmVEZXZpY2VN
YW5hZ2VyLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIk1lZGlhU3RyZWFtUHJp
dmF0ZS5oIgpAQCAtNTksOCArNjQsMTQgQEAgUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlciYgUmVh
bHRpbWVNZWRpYVNvdXJjZUNlbnRlcjo6c2luZ2xldG9uKCkKICAgICBSZWFsdGltZU1lZGlhU291
cmNlQ2VudGVyKiBvdmVycmlkZSA9IG1lZGlhU3RyZWFtQ2VudGVyT3ZlcnJpZGUoKTsKICAgICBp
ZiAob3ZlcnJpZGUpCiAgICAgICAgIHJldHVybiAqb3ZlcnJpZGU7Ci0gICAgCisjaWYgUExBVEZP
Uk0oR1RLKQorICAgIFdURkxvZ0Fsd2F5cygiV2ViS2l0R1RLIExJQldFQlJUQyBSZWFsdGltZU1l
ZGlhU291cmNlQ2VudGVyIE5PVCBJTVBMRU1FTlRFRC4gUmV0dXJuaW5nIE1vY2tSZWFsdGltZU1l
ZGlhU291cmNlQ2VudGVyIGluc3RlYWQgdG8gYXZvaWQgY3Jhc2ghXG4iKTsKKyAgICBBU1NFUlQo
aXNNYWluVGhyZWFkKCkpOworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxNb2NrUmVhbHRpbWVN
ZWRpYVNvdXJjZUNlbnRlcj4gY2VudGVyOworICAgIHJldHVybiBjZW50ZXI7CisjZWxzZQogICAg
IHJldHVybiBSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyOjpwbGF0Zm9ybUNlbnRlcigpOworI2Vu
ZGlmCiB9CiAKIHZvaWQgUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlcjo6c2V0U2hhcmVkU3RyZWFt
Q2VudGVyT3ZlcnJpZGUoUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlciogY2VudGVyKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vU0RQUHJvY2Vzc29yU2Ny
aXB0UmVzb3VyY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vU0RQ
UHJvY2Vzc29yU2NyaXB0UmVzb3VyY2UuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCA2NjllZDJhNzYxNTgxNzI5NzBjMTQ5YzgzMDRjZTBhMzQyZmYwOTYxLi4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21lZGlhc3RyZWFtL1NEUFByb2Nlc3NvclNjcmlwdFJlc291cmNlLmNwcAorKysgL2Rldi9udWxs
CkBAIC0xLDUzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgRXJpY3Nzb24gQUIu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIKLSAqICAgIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqICAgIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIE5laXRoZXIg
dGhlIG5hbWUgb2YgRXJpY3Nzb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0g
KiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tIHRoaXMKLSAqICAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
LSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxF
KFdFQl9SVEMpCi0jaW5jbHVkZSAiU0RQUHJvY2Vzc29yU2NyaXB0UmVzb3VyY2UuaCIKLQotI2lu
Y2x1ZGUgIlNEUFByb2Nlc3NvclNjcmlwdHNEYXRhLmgiCi0jaW5jbHVkZSA8d3RmL05ldmVyRGVz
dHJveWVkLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotbmFtZXNwYWNlIFNEUFByb2Nlc3Nv
clNjcmlwdFJlc291cmNlIHsKLQotY29uc3QgU3RyaW5nJiBzY3JpcHRTdHJpbmcoKQotewotICAg
IHN0YXRpYyBOZXZlckRlc3Ryb3llZDxjb25zdCBTdHJpbmc+IHNjcmlwdChzZHBKYXZhU2NyaXB0
LCBzaXplb2Yoc2RwSmF2YVNjcmlwdCkpOwotICAgIHJldHVybiBzY3JpcHQ7Ci19Ci0KLX0gLy8g
bmFtZXNwYWNlIFNEUFByb2Nlc3NvclNjcmlwdFJlc291cmNlCi0KLX0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShXRUJfUlRDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vU0RQUHJvY2Vzc29yU2NyaXB0UmVzb3VyY2UuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1NEUFByb2Nlc3NvclNjcmlwdFJl
c291cmNlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNiNTQ0M2JiMDcwY2Y3N2Yx
YjZlZWYzMGMyM2U1MTJmNmQ0NTU0NjQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vU0RQUHJv
Y2Vzc29yU2NyaXB0UmVzb3VyY2UuaAorKysgL2Rldi9udWxsCkBAIC0xLDUwICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgRXJpY3Nzb24gQUIuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqICAgIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK
LSAqICAgIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgRXJpY3Nzb24g
bm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0gKiAgICBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSAqICAgIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0g
KiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotI2lmbmRlZiBTRFBQcm9jZXNzb3JTY3JpcHRSZXNvdXJjZV9oCi0jZGVmaW5lIFNEUFByb2Nl
c3NvclNjcmlwdFJlc291cmNlX2gKLQotI2lmIEVOQUJMRShXRUJfUlRDKQotCi0jaW5jbHVkZSA8
d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotbmFtZXNwYWNl
IFNEUFByb2Nlc3NvclNjcmlwdFJlc291cmNlIHsKLQotY29uc3QgU3RyaW5nJiBzY3JpcHRTdHJp
bmcoKTsKLQotfSAvLyBuYW1lc3BhY2UgU0RQUHJvY2Vzc29yU2NyaXB0UmVzb3VyY2UKLQotfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKFdFQl9SVEMpCi0KLSNlbmRp
ZiAvLyBTRFBQcm9jZXNzb3JTY3JpcHRSZXNvdXJjZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9vcGVud2VicnRjL01lZGlhRW5kcG9pbnRPd3IuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vb3BlbndlYnJ0Yy9NZWRpYUVu
ZHBvaW50T3dyLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGE1ODQ4NjcyNTQ4
M2MyZGNlMGE0MjQ0YjRlZGUxNWZiZmFiZDJlOS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9v
cGVud2VicnRjL01lZGlhRW5kcG9pbnRPd3IuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNzUwICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUsIDIwMTYgRXJpY3Nzb24gQUIuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIKLSAqICAgIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKLSAqICAgIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIE5laXRoZXIgdGhlIG5h
bWUgb2YgRXJpY3Nzb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0gKiAgICBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRo
aXMKLSAqICAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAq
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKFdFQl9S
VEMpCi0jaW5jbHVkZSAiTWVkaWFFbmRwb2ludE93ci5oIgotCi0jaW5jbHVkZSAiTWVkaWFFbmRw
b2ludFNlc3Npb25Db25maWd1cmF0aW9uLmgiCi0jaW5jbHVkZSAiTWVkaWFQYXlsb2FkLmgiCi0j
aW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlICJPcGVuV2ViUlRDVXRpbGl0aWVz
LmgiCi0jaW5jbHVkZSAiUGVlckNvbm5lY3Rpb25TdGF0ZXMuaCIKLSNpbmNsdWRlICJSVENEYXRh
Q2hhbm5lbEhhbmRsZXIuaCIKLSNpbmNsdWRlICJSZWFsdGltZUF1ZGlvU291cmNlT3dyLmgiCi0j
aW5jbHVkZSAiUmVhbHRpbWVWaWRlb1NvdXJjZU93ci5oIgotI2luY2x1ZGUgPG93ci9vd3IuaD4K
LSNpbmNsdWRlIDxvd3Ivb3dyX2F1ZGlvX3BheWxvYWQuaD4KLSNpbmNsdWRlIDxvd3Ivb3dyX2Ny
eXB0b191dGlscy5oPgotI2luY2x1ZGUgPG93ci9vd3JfbWVkaWFfc2Vzc2lvbi5oPgotI2luY2x1
ZGUgPG93ci9vd3JfdHJhbnNwb3J0X2FnZW50Lmg+Ci0jaW5jbHVkZSA8b3dyL293cl92aWRlb19w
YXlsb2FkLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1uYW1lc3BhY2UgV2Vi
Q29yZSB7Ci0KLXN0YXRpYyB2b2lkIGdvdENhbmRpZGF0ZShPd3JTZXNzaW9uKiwgT3dyQ2FuZGlk
YXRlKiwgTWVkaWFFbmRwb2ludE93ciopOwotc3RhdGljIHZvaWQgY2FuZGlkYXRlR2F0aGVyaW5n
RG9uZShPd3JTZXNzaW9uKiwgTWVkaWFFbmRwb2ludE93ciopOwotc3RhdGljIHZvaWQgaWNlQ29u
bmVjdGlvblN0YXRlQ2hhbmdlKE93clNlc3Npb24qLCBHUGFyYW1TcGVjKiwgTWVkaWFFbmRwb2lu
dE93ciopOwotc3RhdGljIHZvaWQgZ290SW5jb21pbmdTb3VyY2UoT3dyTWVkaWFTZXNzaW9uKiwg
T3dyTWVkaWFTb3VyY2UqLCBNZWRpYUVuZHBvaW50T3dyKik7Ci0KLXN0YXRpYyBjb25zdCBWZWN0
b3I8U3RyaW5nPiBjYW5kaWRhdGVUeXBlcyA9IHsgImhvc3QiLCAic3JmbHgiLCAicHJmbHgiLCAi
cmVsYXkiIH07Ci1zdGF0aWMgY29uc3QgVmVjdG9yPFN0cmluZz4gY2FuZGlkYXRlVGNwVHlwZXMg
PSB7ICIiLCAiYWN0aXZlIiwgInBhc3NpdmUiLCAic28iIH07Ci1zdGF0aWMgY29uc3QgVmVjdG9y
PFN0cmluZz4gY29kZWNUeXBlcyA9IHsgIk5PTkUiLCAiUENNVSIsICJQQ01BIiwgIk9QVVMiLCAi
SDI2NCIsICJWUDgiIH07Ci0KLXN0YXRpYyBjb25zdCBjaGFyKiBoZWxwZXJTZXJ2ZXJSZWdFeCA9
ICIodHVybnN8dHVybnxzdHVuKTooW1xcd1xcLlxcLV0rfFxcW1tcXHdcXDpdK1xcXSkoOlxcZCsp
PyhcXD8uKyk/IjsKLQotc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IGhlbHBlclNlcnZlckRl
ZmF1bHRQb3J0ID0gMzQ3ODsKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBjYW5kaWRhdGVE
ZWZhdWx0UG9ydCA9IDk7Ci0KLXN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8TWVkaWFFbmRwb2ludD4g
Y3JlYXRlTWVkaWFFbmRwb2ludE93cihNZWRpYUVuZHBvaW50Q2xpZW50JiBjbGllbnQpCi17Ci0g
ICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxNZWRpYUVuZHBvaW50PihuZXcgTWVkaWFFbmRwb2lu
dE93cihjbGllbnQpKTsKLX0KLQotQ3JlYXRlTWVkaWFFbmRwb2ludCBNZWRpYUVuZHBvaW50Ojpj
cmVhdGUgPSBjcmVhdGVNZWRpYUVuZHBvaW50T3dyOwotCi1NZWRpYUVuZHBvaW50T3dyOjpNZWRp
YUVuZHBvaW50T3dyKE1lZGlhRW5kcG9pbnRDbGllbnQmIGNsaWVudCkKLSAgICA6IG1fdHJhbnNw
b3J0QWdlbnQobnVsbHB0cikKLSAgICAsIG1fY2xpZW50KGNsaWVudCkKLSAgICAsIG1fbnVtYmVy
T2ZSZWNlaXZlUHJlcGFyZWRTZXNzaW9ucygwKQotICAgICwgbV9udW1iZXJPZlNlbmRQcmVwYXJl
ZFNlc3Npb25zKDApCi17Ci0gICAgaW5pdGlhbGl6ZU9wZW5XZWJSVEMoKTsKLQotICAgIEdSZWdl
eENvbXBpbGVGbGFncyBjb21waWxlRmxhZ3MgPSBHX1JFR0VYX0pBVkFTQ1JJUFRfQ09NUEFUOwot
ICAgIEdSZWdleE1hdGNoRmxhZ3MgbWF0Y2hGbGFncyA9IHN0YXRpY19jYXN0PEdSZWdleE1hdGNo
RmxhZ3M+KDApOwotICAgIG1faGVscGVyU2VydmVyUmVnRXggPSBnX3JlZ2V4X25ldyhoZWxwZXJT
ZXJ2ZXJSZWdFeCwgY29tcGlsZUZsYWdzLCBtYXRjaEZsYWdzLCBudWxscHRyKTsKLX0KLQotTWVk
aWFFbmRwb2ludE93cjo6fk1lZGlhRW5kcG9pbnRPd3IoKQotewotICAgIHN0b3AoKTsKLQotICAg
IGdfcmVnZXhfdW5yZWYobV9oZWxwZXJTZXJ2ZXJSZWdFeCk7Ci19Ci0KLXZvaWQgTWVkaWFFbmRw
b2ludE93cjo6c2V0Q29uZmlndXJhdGlvbihNZWRpYUVuZHBvaW50Q29uZmlndXJhdGlvbiYmIGNv
bmZpZ3VyYXRpb24pCi17Ci0gICAgbV9jb25maWd1cmF0aW9uID0gV1RGTW92ZShjb25maWd1cmF0
aW9uKTsKLX0KLQotc3RkOjp1bmlxdWVfcHRyPFJUQ0RhdGFDaGFubmVsSGFuZGxlcj4gTWVkaWFF
bmRwb2ludE93cjo6Y3JlYXRlRGF0YUNoYW5uZWxIYW5kbGVyKGNvbnN0IFN0cmluZyYsIGNvbnN0
IFJUQ0RhdGFDaGFubmVsSW5pdCYpCi17Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudCBkYXRhIGNo
YW5uZWwuCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIG51bGxwdHI7Ci19
Ci0KLXN0YXRpYyB2b2lkIGNyeXB0b0RhdGFDYWxsYmFjayhnY2hhciogcHJpdmF0ZUtleSwgZ2No
YXIqIGNlcnRpZmljYXRlLCBnY2hhciogZmluZ2VycHJpbnQsIGdjaGFyKiBmaW5nZXJwcmludEZ1
bmN0aW9uLCBncG9pbnRlciBkYXRhKQotewotICAgIE1lZGlhRW5kcG9pbnRPd3IqIG1lZGlhRW5k
cG9pbnQgPSAoTWVkaWFFbmRwb2ludE93ciopIGRhdGE7Ci0gICAgbWVkaWFFbmRwb2ludC0+ZGlz
cGF0Y2hEdGxzRmluZ2VycHJpbnQoZ19zdHJkdXAocHJpdmF0ZUtleSksIGdfc3RyZHVwKGNlcnRp
ZmljYXRlKSwgU3RyaW5nKGZpbmdlcnByaW50KSwgU3RyaW5nKGZpbmdlcnByaW50RnVuY3Rpb24p
KTsKLX0KLQotdm9pZCBNZWRpYUVuZHBvaW50T3dyOjpnZW5lcmF0ZUR0bHNJbmZvKCkKLXsKLSAg
ICBvd3JfY3J5cHRvX2NyZWF0ZV9jcnlwdG9fZGF0YShjcnlwdG9EYXRhQ2FsbGJhY2ssIHRoaXMp
OwotfQotCi1NZWRpYVBheWxvYWRWZWN0b3IgTWVkaWFFbmRwb2ludE93cjo6Z2V0RGVmYXVsdEF1
ZGlvUGF5bG9hZHMoKQotewotICAgIE1lZGlhUGF5bG9hZFZlY3RvciBwYXlsb2FkczsKLQotICAg
IC8vIEZJWE1FOiBUaGlzIGxpc3Qgc2hvdWxkIGJlIGJhc2VkIG9uIHdoYXQgaXMgYXZhaWxhYmxl
IGluIHRoZSBwbGF0Zm9ybSAoYnVnOiBodHRwOi8vd2Via2l0Lm9yZy9iLzE2MzcyMykKLSAgICBN
ZWRpYVBheWxvYWQgcGF5bG9hZDE7Ci0gICAgcGF5bG9hZDEudHlwZSA9IDExMTsKLSAgICBwYXls
b2FkMS5lbmNvZGluZ05hbWUgPSAiT1BVUyI7Ci0gICAgcGF5bG9hZDEuY2xvY2tSYXRlID0gNDgw
MDA7Ci0gICAgcGF5bG9hZDEuY2hhbm5lbHMgPSAyOwotICAgIHBheWxvYWRzLmFwcGVuZChXVEZN
b3ZlKHBheWxvYWQxKSk7Ci0KLSAgICBNZWRpYVBheWxvYWQgcGF5bG9hZDI7Ci0gICAgcGF5bG9h
ZDIudHlwZSA9IDg7Ci0gICAgcGF5bG9hZDIuZW5jb2RpbmdOYW1lID0gIlBDTUEiOwotICAgIHBh
eWxvYWQyLmNsb2NrUmF0ZSA9IDgwMDA7Ci0gICAgcGF5bG9hZDIuY2hhbm5lbHMgPSAxOwotICAg
IHBheWxvYWRzLmFwcGVuZChXVEZNb3ZlKHBheWxvYWQyKSk7Ci0KLSAgICBNZWRpYVBheWxvYWQg
cGF5bG9hZDM7Ci0gICAgcGF5bG9hZDMudHlwZSA9IDA7Ci0gICAgcGF5bG9hZDMuZW5jb2RpbmdO
YW1lID0gIlBDTVUiOwotICAgIHBheWxvYWQzLmNsb2NrUmF0ZSA9IDgwMDA7Ci0gICAgcGF5bG9h
ZDMuY2hhbm5lbHMgPSAxOwotICAgIHBheWxvYWRzLmFwcGVuZChXVEZNb3ZlKHBheWxvYWQzKSk7
Ci0KLSAgICByZXR1cm4gcGF5bG9hZHM7Ci19Ci0KLU1lZGlhUGF5bG9hZFZlY3RvciBNZWRpYUVu
ZHBvaW50T3dyOjpnZXREZWZhdWx0VmlkZW9QYXlsb2FkcygpCi17Ci0gICAgTWVkaWFQYXlsb2Fk
VmVjdG9yIHBheWxvYWRzOwotCi0gICAgLy8gRklYTUU6IFRoaXMgbGlzdCBzaG91bGQgYmUgYmFz
ZWQgb24gd2hhdCBpcyBhdmFpbGFibGUgaW4gdGhlIHBsYXRmb3JtIChidWc6IGh0dHA6Ly93ZWJr
aXQub3JnL2IvMTYzNzIzKQotICAgIE1lZGlhUGF5bG9hZCBwYXlsb2FkMTsKLSAgICBwYXlsb2Fk
MS50eXBlID0gMTAzOwotICAgIHBheWxvYWQxLmVuY29kaW5nTmFtZSA9ICJIMjY0IjsKLSAgICBw
YXlsb2FkMS5jbG9ja1JhdGUgPSA5MDAwMDsKLSAgICBwYXlsb2FkMS5jY21maXIgPSB0cnVlOwot
ICAgIHBheWxvYWQxLm5hY2twbGkgPSB0cnVlOwotICAgIHBheWxvYWQxLmFkZFBhcmFtZXRlcigi
cGFja2V0aXphdGlvbk1vZGUiLCAxKTsKLSAgICBwYXlsb2Fkcy5hcHBlbmQoV1RGTW92ZShwYXls
b2FkMSkpOwotCi0gICAgTWVkaWFQYXlsb2FkIHBheWxvYWQyOwotICAgIHBheWxvYWQyLnR5cGUg
PSAxMDA7Ci0gICAgcGF5bG9hZDIuZW5jb2RpbmdOYW1lID0gIlZQOCI7Ci0gICAgcGF5bG9hZDIu
Y2xvY2tSYXRlID0gOTAwMDA7Ci0gICAgcGF5bG9hZDIuY2NtZmlyID0gdHJ1ZTsKLSAgICBwYXls
b2FkMi5uYWNrcGxpID0gdHJ1ZTsKLSAgICBwYXlsb2FkMi5uYWNrID0gdHJ1ZTsKLSAgICBwYXls
b2Fkcy5hcHBlbmQoV1RGTW92ZShwYXlsb2FkMikpOwotCi0gICAgTWVkaWFQYXlsb2FkIHBheWxv
YWQzOwotICAgIHBheWxvYWQzLnR5cGUgPSAxMjA7Ci0gICAgcGF5bG9hZDMuZW5jb2RpbmdOYW1l
ID0gIlJUWCI7Ci0gICAgcGF5bG9hZDMuY2xvY2tSYXRlID0gOTAwMDA7Ci0gICAgcGF5bG9hZDMu
YWRkUGFyYW1ldGVyKCJhcHQiLCAxMDApOwotICAgIHBheWxvYWQzLmFkZFBhcmFtZXRlcigicnR4
VGltZSIsIDIwMCk7Ci0gICAgcGF5bG9hZHMuYXBwZW5kKFdURk1vdmUocGF5bG9hZDMpKTsKLQot
ICAgIHJldHVybiBwYXlsb2FkczsKLX0KLQotc3RhdGljIGJvb2wgcGF5bG9hZHNDb250YWluVHlw
ZShjb25zdCBWZWN0b3I8Y29uc3QgTWVkaWFQYXlsb2FkKj4mIHBheWxvYWRzLCB1bnNpZ25lZCBw
YXlsb2FkVHlwZSkKLXsKLSAgICBmb3IgKGF1dG8gcGF5bG9hZCA6IHBheWxvYWRzKSB7Ci0gICAg
ICAgIEFTU0VSVChwYXlsb2FkKTsKLSAgICAgICAgaWYgKHBheWxvYWQtPnR5cGUgPT0gcGF5bG9h
ZFR5cGUpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNl
OwotfQotCi1NZWRpYVBheWxvYWRWZWN0b3IgTWVkaWFFbmRwb2ludE93cjo6ZmlsdGVyUGF5bG9h
ZHMoY29uc3QgTWVkaWFQYXlsb2FkVmVjdG9yJiByZW1vdGVQYXlsb2FkcywgY29uc3QgTWVkaWFQ
YXlsb2FkVmVjdG9yJiBkZWZhdWx0UGF5bG9hZHMpCi17Ci0gICAgVmVjdG9yPGNvbnN0IE1lZGlh
UGF5bG9hZCo+IGZpbHRlcmVkUGF5bG9hZHM7Ci0KLSAgICBmb3IgKGF1dG8mIHJlbW90ZVBheWxv
YWQgOiByZW1vdGVQYXlsb2FkcykgewotICAgICAgICBjb25zdCBNZWRpYVBheWxvYWQqIGRlZmF1
bHRQYXlsb2FkID0gbnVsbHB0cjsKLSAgICAgICAgZm9yIChhdXRvJiBwIDogZGVmYXVsdFBheWxv
YWRzKSB7Ci0gICAgICAgICAgICBpZiAocC5lbmNvZGluZ05hbWUgPT0gcmVtb3RlUGF5bG9hZC5l
bmNvZGluZ05hbWUuY29udmVydFRvQVNDSUlVcHBlcmNhc2UoKSkgewotICAgICAgICAgICAgICAg
IGRlZmF1bHRQYXlsb2FkID0gJnA7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCFkZWZhdWx0UGF5bG9hZCkKLSAgICAgICAgICAg
IGNvbnRpbnVlOwotCi0gICAgICAgIGlmIChkZWZhdWx0UGF5bG9hZC0+cGFyYW1ldGVycy5jb250
YWlucygicGFja2V0aXphdGlvbk1vZGUiKSAmJiByZW1vdGVQYXlsb2FkLnBhcmFtZXRlcnMuY29u
dGFpbnMoInBhY2tldGl6YXRpb25Nb2RlIikKLSAgICAgICAgICAgICYmIChkZWZhdWx0UGF5bG9h
ZC0+cGFyYW1ldGVycy5nZXQoInBhY2tldGl6YXRpb25Nb2RlIikgIT0gZGVmYXVsdFBheWxvYWQt
PnBhcmFtZXRlcnMuZ2V0KCJwYWNrZXRpemF0aW9uTW9kZSIpKSkKLSAgICAgICAgICAgIGNvbnRp
bnVlOwotCi0gICAgICAgIGZpbHRlcmVkUGF5bG9hZHMuYXBwZW5kKCZyZW1vdGVQYXlsb2FkKTsK
LSAgICB9Ci0KLSAgICBNZWRpYVBheWxvYWRWZWN0b3IgZmlsdGVyZWRBcHRQYXlsb2FkczsKLQot
ICAgIGZvciAoYXV0byBmaWx0ZXJlZFBheWxvYWQgOiBmaWx0ZXJlZFBheWxvYWRzKSB7Ci0gICAg
ICAgIGlmIChmaWx0ZXJlZFBheWxvYWQtPnBhcmFtZXRlcnMuY29udGFpbnMoImFwdCIpICYmICgh
cGF5bG9hZHNDb250YWluVHlwZShmaWx0ZXJlZFBheWxvYWRzLCBmaWx0ZXJlZFBheWxvYWQtPnBh
cmFtZXRlcnMuZ2V0KCJhcHQiKSkpKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGZp
bHRlcmVkQXB0UGF5bG9hZHMuYXBwZW5kKCpmaWx0ZXJlZFBheWxvYWQpOwotICAgIH0KLQotICAg
IHJldHVybiBmaWx0ZXJlZEFwdFBheWxvYWRzOwotfQotCi1NZWRpYUVuZHBvaW50OjpVcGRhdGVS
ZXN1bHQgTWVkaWFFbmRwb2ludE93cjo6dXBkYXRlUmVjZWl2ZUNvbmZpZ3VyYXRpb24oTWVkaWFF
bmRwb2ludFNlc3Npb25Db25maWd1cmF0aW9uKiBjb25maWd1cmF0aW9uLCBib29sIGlzSW5pdGlh
dG9yKQotewotICAgIFZlY3RvcjxUcmFuc2NlaXZlckNvbmZpZz4gdHJhbnNjZWl2ZXJDb25maWdz
OwotICAgIGZvciAodW5zaWduZWQgaSA9IG1fdHJhbnNjZWl2ZXJzLnNpemUoKTsgaSA8IGNvbmZp
Z3VyYXRpb24tPm1lZGlhRGVzY3JpcHRpb25zKCkuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgVHJh
bnNjZWl2ZXJDb25maWcgY29uZmlnOwotICAgICAgICBjb25maWcudHlwZSA9IFNlc3Npb25UeXBl
TWVkaWE7Ci0gICAgICAgIGNvbmZpZy5pc0R0bHNDbGllbnQgPSBjb25maWd1cmF0aW9uLT5tZWRp
YURlc2NyaXB0aW9ucygpW2ldLmR0bHNTZXR1cCA9PSAiYWN0aXZlIjsKLSAgICAgICAgY29uZmln
Lm1pZCA9IGNvbmZpZ3VyYXRpb24tPm1lZGlhRGVzY3JpcHRpb25zKClbaV0ubWlkOwotICAgICAg
ICB0cmFuc2NlaXZlckNvbmZpZ3MuYXBwZW5kKFdURk1vdmUoY29uZmlnKSk7Ci0gICAgfQotCi0g
ICAgZW5zdXJlVHJhbnNwb3J0QWdlbnRBbmRUcmFuc2NlaXZlcnMoaXNJbml0aWF0b3IsIHRyYW5z
Y2VpdmVyQ29uZmlncyk7Ci0KLSAgICAvLyBQcmVwYXJlIHRoZSBuZXcgc2Vzc2lvbnMuCi0gICAg
Zm9yICh1bnNpZ25lZCBpID0gbV9udW1iZXJPZlJlY2VpdmVQcmVwYXJlZFNlc3Npb25zOyBpIDwg
bV90cmFuc2NlaXZlcnMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgT3dyU2Vzc2lvbiogc2Vzc2lv
biA9IG1fdHJhbnNjZWl2ZXJzW2ldLT5zZXNzaW9uKCk7Ci0gICAgICAgIHByZXBhcmVNZWRpYVNl
c3Npb24oT1dSX01FRElBX1NFU1NJT04oc2Vzc2lvbiksICZjb25maWd1cmF0aW9uLT5tZWRpYURl
c2NyaXB0aW9ucygpW2ldLCBpc0luaXRpYXRvcik7Ci0gICAgICAgIG93cl90cmFuc3BvcnRfYWdl
bnRfYWRkX3Nlc3Npb24obV90cmFuc3BvcnRBZ2VudCwgc2Vzc2lvbik7Ci0gICAgfQotCi0gICAg
b3dyX3RyYW5zcG9ydF9hZ2VudF9zdGFydChtX3RyYW5zcG9ydEFnZW50KTsKLSAgICBtX251bWJl
ck9mUmVjZWl2ZVByZXBhcmVkU2Vzc2lvbnMgPSBtX3RyYW5zY2VpdmVycy5zaXplKCk7Ci0KLSAg
ICByZXR1cm4gVXBkYXRlUmVzdWx0OjpTdWNjZXNzOwotfQotCi1zdGF0aWMgY29uc3QgTWVkaWFQ
YXlsb2FkKiBmaW5kUnR4UGF5bG9hZChjb25zdCBNZWRpYVBheWxvYWRWZWN0b3ImIHBheWxvYWRz
LCB1bnNpZ25lZCBhcHQpCi17Ci0gICAgZm9yIChhdXRvJiBwYXlsb2FkIDogcGF5bG9hZHMpIHsK
LSAgICAgICAgaWYgKHBheWxvYWQuZW5jb2RpbmdOYW1lLmNvbnZlcnRUb0FTQ0lJVXBwZXJjYXNl
KCkgPT0gIlJUWCIgJiYgcGF5bG9hZC5wYXJhbWV0ZXJzLmNvbnRhaW5zKCJhcHQiKQotICAgICAg
ICAgICAgJiYgKHBheWxvYWQucGFyYW1ldGVycy5nZXQoImFwdCIpID09IGFwdCkpCi0gICAgICAg
ICAgICByZXR1cm4gJnBheWxvYWQ7Ci0gICAgfQotICAgIHJldHVybiBudWxscHRyOwotfQotCi1N
ZWRpYUVuZHBvaW50OjpVcGRhdGVSZXN1bHQgTWVkaWFFbmRwb2ludE93cjo6dXBkYXRlU2VuZENv
bmZpZ3VyYXRpb24oTWVkaWFFbmRwb2ludFNlc3Npb25Db25maWd1cmF0aW9uKiBjb25maWd1cmF0
aW9uLCBjb25zdCBSZWFsdGltZU1lZGlhU291cmNlTWFwJiBzZW5kU291cmNlTWFwLCBib29sIGlz
SW5pdGlhdG9yKQotewotICAgIFZlY3RvcjxUcmFuc2NlaXZlckNvbmZpZz4gdHJhbnNjZWl2ZXJD
b25maWdzOwotICAgIGZvciAodW5zaWduZWQgaSA9IG1fdHJhbnNjZWl2ZXJzLnNpemUoKTsgaSA8
IGNvbmZpZ3VyYXRpb24tPm1lZGlhRGVzY3JpcHRpb25zKCkuc2l6ZSgpOyArK2kpIHsKLSAgICAg
ICAgVHJhbnNjZWl2ZXJDb25maWcgY29uZmlnOwotICAgICAgICBjb25maWcudHlwZSA9IFNlc3Np
b25UeXBlTWVkaWE7Ci0gICAgICAgIGNvbmZpZy5pc0R0bHNDbGllbnQgPSBjb25maWd1cmF0aW9u
LT5tZWRpYURlc2NyaXB0aW9ucygpW2ldLmR0bHNTZXR1cCAhPSAiYWN0aXZlIjsKLSAgICAgICAg
Y29uZmlnLm1pZCA9IGNvbmZpZ3VyYXRpb24tPm1lZGlhRGVzY3JpcHRpb25zKClbaV0ubWlkOwot
ICAgICAgICB0cmFuc2NlaXZlckNvbmZpZ3MuYXBwZW5kKFdURk1vdmUoY29uZmlnKSk7Ci0gICAg
fQotCi0gICAgZW5zdXJlVHJhbnNwb3J0QWdlbnRBbmRUcmFuc2NlaXZlcnMoaXNJbml0aWF0b3Is
IHRyYW5zY2VpdmVyQ29uZmlncyk7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV90
cmFuc2NlaXZlcnMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgYXV0byogc2Vzc2lvbiA9IG1fdHJh
bnNjZWl2ZXJzW2ldLT5zZXNzaW9uKCk7Ci0gICAgICAgIGF1dG8mIG1kZXNjID0gY29uZmlndXJh
dGlvbi0+bWVkaWFEZXNjcmlwdGlvbnMoKVtpXTsKLQotICAgICAgICBpZiAobWRlc2MudHlwZSA9
PSAiYXVkaW8iIHx8IG1kZXNjLnR5cGUgPT0gInZpZGVvIikKLSAgICAgICAgICAgIGdfb2JqZWN0
X3NldChzZXNzaW9uLCAicnRjcC1tdXgiLCBtZGVzYy5ydGNwTXV4LCBudWxscHRyKTsKLQotICAg
ICAgICBpZiAobWRlc2MuaWNlQ2FuZGlkYXRlcy5zaXplKCkpIHsKLSAgICAgICAgICAgIGZvciAo
YXV0byYgY2FuZGlkYXRlIDogbWRlc2MuaWNlQ2FuZGlkYXRlcykKLSAgICAgICAgICAgICAgICBp
bnRlcm5hbEFkZFJlbW90ZUNhbmRpZGF0ZShzZXNzaW9uLCBjYW5kaWRhdGUsIG1kZXNjLmljZVVm
cmFnLCBtZGVzYy5pY2VQYXNzd29yZCk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoaSA8IG1f
bnVtYmVyT2ZTZW5kUHJlcGFyZWRTZXNzaW9ucykKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0g
ICAgICAgIGlmICghc2VuZFNvdXJjZU1hcC5jb250YWlucyhtZGVzYy5taWQpKQotICAgICAgICAg
ICAgY29udGludWU7Ci0KLSAgICAgICAgY29uc3QgTWVkaWFQYXlsb2FkKiBwYXlsb2FkID0gbnVs
bHB0cjsKLSAgICAgICAgZm9yIChhdXRvJiBwIDogbWRlc2MucGF5bG9hZHMpIHsKLSAgICAgICAg
ICAgIGlmIChwLmVuY29kaW5nTmFtZS5jb252ZXJ0VG9BU0NJSVVwcGVyY2FzZSgpICE9ICJSVFgi
KSB7Ci0gICAgICAgICAgICAgICAgcGF5bG9hZCA9ICZwOwotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFwYXlsb2FkKQotICAg
ICAgICAgICAgcmV0dXJuIFVwZGF0ZVJlc3VsdDo6RmFpbGVkOwotCi0gICAgICAgIGF1dG8qIHJ0
eFBheWxvYWQgPSBmaW5kUnR4UGF5bG9hZChtZGVzYy5wYXlsb2FkcywgcGF5bG9hZC0+dHlwZSk7
Ci0gICAgICAgIGF1dG8qIHNvdXJjZSA9IHN0YXRpY19jYXN0PFJlYWx0aW1lTWVkaWFTb3VyY2VP
d3IqPihzZW5kU291cmNlTWFwLmdldChtZGVzYy5taWQpKTsKLQotICAgICAgICBBU1NFUlQoY29k
ZWNUeXBlcy5maW5kKHBheWxvYWQtPmVuY29kaW5nTmFtZS5jb252ZXJ0VG9BU0NJSVVwcGVyY2Fz
ZSgpKSAhPSBub3RGb3VuZCk7Ci0gICAgICAgIGF1dG8gY29kZWNUeXBlID0gc3RhdGljX2Nhc3Q8
T3dyQ29kZWNUeXBlPihjb2RlY1R5cGVzLmZpbmQocGF5bG9hZC0+ZW5jb2RpbmdOYW1lLmNvbnZl
cnRUb0FTQ0lJVXBwZXJjYXNlKCkpKTsKLQotICAgICAgICBPd3JQYXlsb2FkKiBzZW5kUGF5bG9h
ZDsKLSAgICAgICAgaWYgKG1kZXNjLnR5cGUgPT0gImF1ZGlvIikKLSAgICAgICAgICAgIHNlbmRQ
YXlsb2FkID0gb3dyX2F1ZGlvX3BheWxvYWRfbmV3KGNvZGVjVHlwZSwgcGF5bG9hZC0+dHlwZSwg
cGF5bG9hZC0+Y2xvY2tSYXRlLCBwYXlsb2FkLT5jaGFubmVscyk7Ci0gICAgICAgIGVsc2Ugewot
ICAgICAgICAgICAgc2VuZFBheWxvYWQgPSBvd3JfdmlkZW9fcGF5bG9hZF9uZXcoY29kZWNUeXBl
LCBwYXlsb2FkLT50eXBlLCBwYXlsb2FkLT5jbG9ja1JhdGUsIHBheWxvYWQtPmNjbWZpciwgcGF5
bG9hZC0+bmFja3BsaSk7Ci0gICAgICAgICAgICBnX29iamVjdF9zZXQoc2VuZFBheWxvYWQsICJy
dHgtcGF5bG9hZC10eXBlIiwgcnR4UGF5bG9hZCA/IHJ0eFBheWxvYWQtPnR5cGUgOiAtMSwKLSAg
ICAgICAgICAgICAgICAicnR4LXRpbWUiLCBydHhQYXlsb2FkICYmIHJ0eFBheWxvYWQtPnBhcmFt
ZXRlcnMuY29udGFpbnMoInJ0eFRpbWUiKSA/IHJ0eFBheWxvYWQtPnBhcmFtZXRlcnMuZ2V0KCJy
dHhUaW1lIikgOiAwLCBudWxscHRyKTsKLSAgICAgICAgfQotCi0gICAgICAgIG93cl9tZWRpYV9z
ZXNzaW9uX3NldF9zZW5kX3BheWxvYWQoT1dSX01FRElBX1NFU1NJT04oc2Vzc2lvbiksIHNlbmRQ
YXlsb2FkKTsKLSAgICAgICAgb3dyX21lZGlhX3Nlc3Npb25fc2V0X3NlbmRfc291cmNlKE9XUl9N
RURJQV9TRVNTSU9OKHNlc3Npb24pLCBzb3VyY2UtPm1lZGlhU291cmNlKCkpOwotCi0gICAgICAg
IC8vIEZJWE1FOiBTdXBwb3J0IGZvciBncm91cC1zc3JjIFNEUCBsaW5lIGlzIG1pc3NpbmcuCi0g
ICAgICAgIGNvbnN0IFZlY3Rvcjx1bnNpZ25lZD4gcmVjZWl2ZVNzcmNzID0gbWRlc2Muc3NyY3M7
Ci0gICAgICAgIGlmIChyZWNlaXZlU3NyY3Muc2l6ZSgpKSB7Ci0gICAgICAgICAgICBnX29iamVj
dF9zZXQoc2Vzc2lvbiwgInJlY2VpdmUtc3NyYyIsIHJlY2VpdmVTc3Jjc1swXSwgbnVsbHB0cik7
Ci0gICAgICAgICAgICBpZiAocmVjZWl2ZVNzcmNzLnNpemUoKSA9PSAyKQotICAgICAgICAgICAg
ICAgIGdfb2JqZWN0X3NldChzZXNzaW9uLCAicmVjZWl2ZS1ydHgtc3NyYyIsIHJlY2VpdmVTc3Jj
c1sxXSwgbnVsbHB0cik7Ci0gICAgICAgIH0KLQotICAgICAgICBtX251bWJlck9mU2VuZFByZXBh
cmVkU2Vzc2lvbnMgPSBpICsgMTsKLSAgICB9Ci0KLSAgICByZXR1cm4gVXBkYXRlUmVzdWx0OjpT
dWNjZXNzOwotfQotCi12b2lkIE1lZGlhRW5kcG9pbnRPd3I6OmFkZFJlbW90ZUNhbmRpZGF0ZShj
b25zdCBJY2VDYW5kaWRhdGUmIGNhbmRpZGF0ZSwgY29uc3QgU3RyaW5nJiBtaWQsIGNvbnN0IFN0
cmluZyYgdWZyYWcsIGNvbnN0IFN0cmluZyYgcGFzc3dvcmQpCi17Ci0gICAgZm9yIChhdXRvJiB0
cmFuc2NlaXZlciA6IG1fdHJhbnNjZWl2ZXJzKSB7Ci0gICAgICAgIGlmICh0cmFuc2NlaXZlci0+
bWlkKCkgPT0gbWlkKSB7Ci0gICAgICAgICAgICBpbnRlcm5hbEFkZFJlbW90ZUNhbmRpZGF0ZSh0
cmFuc2NlaXZlci0+c2Vzc2lvbigpLCBjYW5kaWRhdGUsIHVmcmFnLCBwYXNzd29yZCk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBNZWRpYUVuZHBvaW50
T3dyOjpyZXBsYWNlTXV0ZWRSZW1vdGVTb3VyY2VNaWQoY29uc3QgU3RyaW5nJiBvbGRNaWQsIGNv
bnN0IFN0cmluZyYgbmV3TWlkKQotewotICAgIFJlZlB0cjxSZWFsdGltZU1lZGlhU291cmNlT3dy
PiByZW1vdGVTb3VyY2UgPSBtX211dGVkUmVtb3RlU291cmNlcy50YWtlKG9sZE1pZCk7Ci0gICAg
bV9tdXRlZFJlbW90ZVNvdXJjZXMuc2V0KG5ld01pZCwgcmVtb3RlU291cmNlKTsKLX0KLQotUmVm
PFJlYWx0aW1lTWVkaWFTb3VyY2U+IE1lZGlhRW5kcG9pbnRPd3I6OmNyZWF0ZU11dGVkUmVtb3Rl
U291cmNlKGNvbnN0IFN0cmluZyYgbWlkLCBSZWFsdGltZU1lZGlhU291cmNlOjpUeXBlIHR5cGUp
Ci17Ci0gICAgU3RyaW5nIG5hbWU7Ci0gICAgU3RyaW5nIGlkKCJub3QgdXNlZCIpOwotICAgIFJl
ZlB0cjxSZWFsdGltZU1lZGlhU291cmNlT3dyPiBzb3VyY2U7Ci0KLSAgICBzd2l0Y2ggKHR5cGUp
IHsKLSAgICBjYXNlIFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGU6OkF1ZGlvOgotICAgICAgICBu
YW1lID0gInJlbW90ZSBhdWRpbyI7Ci0gICAgICAgIHNvdXJjZSA9IGFkb3B0UmVmKG5ldyBSZWFs
dGltZUF1ZGlvU291cmNlT3dyKG51bGxwdHIsIGlkLCB0eXBlLCBuYW1lKSk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgUmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlwZTo6VmlkZW86Ci0gICAgICAg
IG5hbWUgPSAicmVtb3RlIHZpZGVvIjsKLSAgICAgICAgc291cmNlID0gYWRvcHRSZWYobmV3IFJl
YWx0aW1lVmlkZW9Tb3VyY2VPd3IobnVsbHB0ciwgaWQsIHR5cGUsIG5hbWUpKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBSZWFsdGltZU1lZGlhU291cmNlOjpUeXBlOjpOb25lOgotICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9Ci0KLSAgICBtX211dGVkUmVtb3RlU291cmNl
cy5zZXQobWlkLCBzb3VyY2UpOwotCi0gICAgcmV0dXJuICpzb3VyY2U7Ci19Ci0KLXZvaWQgTWVk
aWFFbmRwb2ludE93cjo6cmVwbGFjZVNlbmRTb3VyY2UoUmVhbHRpbWVNZWRpYVNvdXJjZSYgbmV3
U291cmNlLCBjb25zdCBTdHJpbmcmIG1pZCkKLXsKLSAgICBVTlVTRURfUEFSQU0obmV3U291cmNl
KTsKLSAgICBVTlVTRURfUEFSQU0obWlkKTsKLQotICAgIC8vIEZJWE1FOiBXZSB3YW50IHRvIHVz
ZSBvd3JfbWVkaWFfc2Vzc2lvbl9zZXRfc2VuZF9zb3VyY2UgaGVyZSwgYnV0IGl0IGRvZXNuJ3Qg
d29yayBhcyBpbnRlbmRlZC4KLSAgICAvLyBJc3N1ZSB0cmFja2VkIGJ5IE9wZW5XZWJSVEMgYnVn
OiBodHRwczovL2dpdGh1Yi5jb20vRXJpY3Nzb25SZXNlYXJjaC9vcGVud2VicnRjL2lzc3Vlcy81
MzMKLQotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgTWVkaWFFbmRwb2ludE93cjo6
c3RvcCgpCi17Ci0gICAgaWYgKCFtX3RyYW5zcG9ydEFnZW50KQotICAgICAgICByZXR1cm47Ci0K
LSAgICBmb3IgKGF1dG8mIHRyYW5zY2VpdmVyIDogbV90cmFuc2NlaXZlcnMpCi0gICAgICAgIG93
cl9tZWRpYV9zZXNzaW9uX3NldF9zZW5kX3NvdXJjZShPV1JfTUVESUFfU0VTU0lPTih0cmFuc2Nl
aXZlci0+c2Vzc2lvbigpKSwgbnVsbHB0cik7Ci0KLSAgICBnX29iamVjdF91bnJlZihtX3RyYW5z
cG9ydEFnZW50KTsKLSAgICBtX3RyYW5zcG9ydEFnZW50ID0gbnVsbHB0cjsKLX0KLQotc2l6ZV90
IE1lZGlhRW5kcG9pbnRPd3I6OnRyYW5zY2VpdmVySW5kZXhGb3JTZXNzaW9uKE93clNlc3Npb24q
IHNlc3Npb24pIGNvbnN0Ci17Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fdHJhbnNj
ZWl2ZXJzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmIChtX3RyYW5zY2VpdmVyc1tpXS0+c2Vz
c2lvbigpID09IHNlc3Npb24pCi0gICAgICAgICAgICByZXR1cm4gaTsKLSAgICB9Ci0KLSAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gbm90Rm91bmQ7Ci19Ci0KLWNvbnN0IFN0
cmluZyYgTWVkaWFFbmRwb2ludE93cjo6c2Vzc2lvbk1pZChPd3JTZXNzaW9uKiBzZXNzaW9uKSBj
b25zdAotewotICAgIHNpemVfdCBpbmRleCA9IHRyYW5zY2VpdmVySW5kZXhGb3JTZXNzaW9uKHNl
c3Npb24pOwotICAgIHJldHVybiBtX3RyYW5zY2VpdmVyc1tpbmRleF0tPm1pZCgpOwotfQotCi1P
d3JUcmFuc2NlaXZlciogTWVkaWFFbmRwb2ludE93cjo6bWF0Y2hUcmFuc2NlaXZlckJ5TWlkKGNv
bnN0IFN0cmluZyYgbWlkKSBjb25zdAotewotICAgIGZvciAoYXV0byYgdHJhbnNjZWl2ZXIgOiBt
X3RyYW5zY2VpdmVycykgewotICAgICAgICBpZiAodHJhbnNjZWl2ZXItPm1pZCgpID09IG1pZCkK
LSAgICAgICAgICAgIHJldHVybiB0cmFuc2NlaXZlci5nZXQoKTsKLSAgICB9Ci0gICAgcmV0dXJu
IG51bGxwdHI7Ci19Ci0KLXZvaWQgTWVkaWFFbmRwb2ludE93cjo6ZGlzcGF0Y2hOZXdJY2VDYW5k
aWRhdGUoY29uc3QgU3RyaW5nJiBtaWQsIEljZUNhbmRpZGF0ZSYmIGljZUNhbmRpZGF0ZSkKLXsK
LSAgICBtX2NsaWVudC5nb3RJY2VDYW5kaWRhdGUobWlkLCBXVEZNb3ZlKGljZUNhbmRpZGF0ZSkp
OwotfQotCi12b2lkIE1lZGlhRW5kcG9pbnRPd3I6OmRpc3BhdGNoR2F0aGVyaW5nRG9uZShjb25z
dCBTdHJpbmcmIG1pZCkKLXsKLSAgICBtX2NsaWVudC5kb25lR2F0aGVyaW5nQ2FuZGlkYXRlcyht
aWQpOwotfQotCi12b2lkIE1lZGlhRW5kcG9pbnRPd3I6OnByb2Nlc3NJY2VUcmFuc3BvcnRTdGF0
ZUNoYW5nZShPd3JTZXNzaW9uKiBzZXNzaW9uKQotewotICAgIE93ckljZVN0YXRlIG93ckljZVN0
YXRlOwotICAgIGdfb2JqZWN0X2dldChzZXNzaW9uLCAiaWNlLWNvbm5lY3Rpb24tc3RhdGUiLCAm
b3dySWNlU3RhdGUsIG51bGxwdHIpOwotCi0gICAgT3dyVHJhbnNjZWl2ZXImIHRyYW5zY2VpdmVy
ID0gKm1fdHJhbnNjZWl2ZXJzW3RyYW5zY2VpdmVySW5kZXhGb3JTZXNzaW9uKHNlc3Npb24pXTsK
LSAgICBpZiAob3dySWNlU3RhdGUgPCB0cmFuc2NlaXZlci5vd3JJY2VTdGF0ZSgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICB0cmFuc2NlaXZlci5zZXRPd3JJY2VTdGF0ZShvd3JJY2VTdGF0ZSk7
Ci0KLSAgICAvLyBXZSBjYW5ub3QgZ28gdG8gQ29tcGxldGVkIGlmIHRoZXJlIG1heSBiZSBtb3Jl
IHJlbW90ZSBjYW5kaWRhdGVzLgotICAgIGlmIChvd3JJY2VTdGF0ZSA9PSBPV1JfSUNFX1NUQVRF
X1JFQURZICYmICF0cmFuc2NlaXZlci5nb3RFbmRPZlJlbW90ZUNhbmRpZGF0ZXMoKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgUlRDSWNlVHJhbnNwb3J0U3RhdGUgdHJhbnNwb3J0U3RhdGU7Ci0g
ICAgc3dpdGNoIChvd3JJY2VTdGF0ZSkgewotICAgIGNhc2UgT1dSX0lDRV9TVEFURV9DT05ORUNU
SU5HOgotICAgICAgICB0cmFuc3BvcnRTdGF0ZSA9IFJUQ0ljZVRyYW5zcG9ydFN0YXRlOjpDaGVj
a2luZzsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBPV1JfSUNFX1NUQVRFX0NPTk5FQ1RFRDoK
LSAgICAgICAgdHJhbnNwb3J0U3RhdGUgPSBSVENJY2VUcmFuc3BvcnRTdGF0ZTo6Q29ubmVjdGVk
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIE9XUl9JQ0VfU1RBVEVfUkVBRFk6Ci0gICAgICAg
IHRyYW5zcG9ydFN0YXRlID0gUlRDSWNlVHJhbnNwb3J0U3RhdGU6OkNvbXBsZXRlZDsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBPV1JfSUNFX1NUQVRFX0ZBSUxFRDoKLSAgICAgICAgdHJhbnNw
b3J0U3RhdGUgPSBSVENJY2VUcmFuc3BvcnRTdGF0ZTo6RmFpbGVkOwotICAgICAgICBicmVhazsK
LSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbV9jbGllbnQuaWNl
VHJhbnNwb3J0U3RhdGVDaGFuZ2VkKHRyYW5zY2VpdmVyLm1pZCgpLCB0cmFuc3BvcnRTdGF0ZSk7
Ci19Ci0KLXZvaWQgTWVkaWFFbmRwb2ludE93cjo6ZGlzcGF0Y2hEdGxzRmluZ2VycHJpbnQoZ2No
YXIqIHByaXZhdGVLZXksIGdjaGFyKiBjZXJ0aWZpY2F0ZSwgY29uc3QgU3RyaW5nJiBmaW5nZXJw
cmludCwgY29uc3QgU3RyaW5nJiBmaW5nZXJwcmludEZ1bmN0aW9uKQotewotICAgIG1fZHRsc1By
aXZhdGVLZXkgPSBTdHJpbmcocHJpdmF0ZUtleSk7Ci0gICAgbV9kdGxzQ2VydGlmaWNhdGUgPSBT
dHJpbmcoY2VydGlmaWNhdGUpOwotCi0gICAgZ19mcmVlKHByaXZhdGVLZXkpOwotICAgIGdfZnJl
ZShjZXJ0aWZpY2F0ZSk7Ci0KLSAgICBtX2NsaWVudC5nb3REdGxzRmluZ2VycHJpbnQoZmluZ2Vy
cHJpbnQsIGZpbmdlcnByaW50RnVuY3Rpb24pOwotfQotCi12b2lkIE1lZGlhRW5kcG9pbnRPd3I6
OnVubXV0ZVJlbW90ZVNvdXJjZShjb25zdCBTdHJpbmcmIG1pZCwgT3dyTWVkaWFTb3VyY2UqIHJl
YWxTb3VyY2UpCi17Ci0gICAgUmVmUHRyPFJlYWx0aW1lTWVkaWFTb3VyY2VPd3I+IHJlbW90ZVNv
dXJjZSA9IG1fbXV0ZWRSZW1vdGVTb3VyY2VzLnRha2UobWlkKTsKLSAgICBpZiAoIXJlbW90ZVNv
dXJjZSkgewotICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBmaW5kIG11dGVkIHJlbW90ZSBz
b3VyY2UuIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAocmVtb3RlU291cmNl
LT5pc1Byb2R1Y2luZ0RhdGEoKSkKLSAgICAgICAgcmVtb3RlU291cmNlLT5zd2FwT3V0U2hhbGxv
d1NvdXJjZSgqcmVhbFNvdXJjZSk7Ci19Ci0KLXZvaWQgTWVkaWFFbmRwb2ludE93cjo6cHJlcGFy
ZVNlc3Npb24oT3dyU2Vzc2lvbiogc2Vzc2lvbiwgUGVlck1lZGlhRGVzY3JpcHRpb24qIG1lZGlh
RGVzY3JpcHRpb24pCi17Ci0gICAgZ19vYmplY3Rfc2V0X2RhdGFfZnVsbChHX09CSkVDVChzZXNz
aW9uKSwgImljZS11ZnJhZyIsIGdfc3RyZHVwKG1lZGlhRGVzY3JpcHRpb24tPmljZVVmcmFnLmFz
Y2lpKCkuZGF0YSgpKSwgZ19mcmVlKTsKLSAgICBnX29iamVjdF9zZXRfZGF0YV9mdWxsKEdfT0JK
RUNUKHNlc3Npb24pLCAiaWNlLXBhc3N3b3JkIiwgZ19zdHJkdXAobWVkaWFEZXNjcmlwdGlvbi0+
aWNlUGFzc3dvcmQuYXNjaWkoKS5kYXRhKCkpLCBnX2ZyZWUpOwotCi0gICAgZ19zaWduYWxfY29u
bmVjdChzZXNzaW9uLCAib24tbmV3LWNhbmRpZGF0ZSIsIEdfQ0FMTEJBQ0soZ290Q2FuZGlkYXRl
KSwgdGhpcyk7Ci0gICAgZ19zaWduYWxfY29ubmVjdChzZXNzaW9uLCAib24tY2FuZGlkYXRlLWdh
dGhlcmluZy1kb25lIiwgR19DQUxMQkFDSyhjYW5kaWRhdGVHYXRoZXJpbmdEb25lKSwgdGhpcyk7
Ci0gICAgZ19zaWduYWxfY29ubmVjdChzZXNzaW9uLCAibm90aWZ5OjppY2UtY29ubmVjdGlvbi1z
dGF0ZSIsIEdfQ0FMTEJBQ0soaWNlQ29ubmVjdGlvblN0YXRlQ2hhbmdlKSwgdGhpcyk7Ci19Ci0K
LXZvaWQgTWVkaWFFbmRwb2ludE93cjo6cHJlcGFyZU1lZGlhU2Vzc2lvbihPd3JNZWRpYVNlc3Np
b24qIG1lZGlhU2Vzc2lvbiwgUGVlck1lZGlhRGVzY3JpcHRpb24qIG1lZGlhRGVzY3JpcHRpb24s
IGJvb2wgaXNJbml0aWF0b3IpCi17Ci0gICAgcHJlcGFyZVNlc3Npb24oT1dSX1NFU1NJT04obWVk
aWFTZXNzaW9uKSwgbWVkaWFEZXNjcmlwdGlvbik7Ci0KLSAgICBib29sIHVzZVJ0Y3BNdXggPSAh
aXNJbml0aWF0b3IgJiYgbWVkaWFEZXNjcmlwdGlvbi0+cnRjcE11eDsKLSAgICBnX29iamVjdF9z
ZXQobWVkaWFTZXNzaW9uLCAicnRjcC1tdXgiLCB1c2VSdGNwTXV4LCBudWxscHRyKTsKLQotICAg
IGlmICghbWVkaWFEZXNjcmlwdGlvbi0+Y25hbWUuaXNFbXB0eSgpICYmIG1lZGlhRGVzY3JpcHRp
b24tPnNzcmNzLnNpemUoKSkgewotICAgICAgICBnX29iamVjdF9zZXQobWVkaWFTZXNzaW9uLCAi
Y25hbWUiLCBtZWRpYURlc2NyaXB0aW9uLT5jbmFtZS5hc2NpaSgpLmRhdGEoKSwKLSAgICAgICAg
ICAgICJzZW5kLXNzcmMiLCBtZWRpYURlc2NyaXB0aW9uLT5zc3Jjc1swXSwKLSAgICAgICAgICAg
IG51bGxwdHIpOwotICAgIH0KLQotICAgIGdfc2lnbmFsX2Nvbm5lY3QobWVkaWFTZXNzaW9uLCAi
b24taW5jb21pbmctc291cmNlIiwgR19DQUxMQkFDSyhnb3RJbmNvbWluZ1NvdXJjZSksIHRoaXMp
OwotCi0gICAgZm9yIChhdXRvJiBwYXlsb2FkIDogbWVkaWFEZXNjcmlwdGlvbi0+cGF5bG9hZHMp
IHsKLSAgICAgICAgaWYgKHBheWxvYWQuZW5jb2RpbmdOYW1lLmNvbnZlcnRUb0FTQ0lJVXBwZXJj
YXNlKCkgPT0gIlJUWCIpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBhdXRvKiBy
dHhQYXlsb2FkID0gZmluZFJ0eFBheWxvYWQobWVkaWFEZXNjcmlwdGlvbi0+cGF5bG9hZHMsIHBh
eWxvYWQudHlwZSk7Ci0KLSAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShjb2RlY1R5cGVzLmZp
bmQocGF5bG9hZC5lbmNvZGluZ05hbWUuY29udmVydFRvQVNDSUlVcHBlcmNhc2UoKSkgIT0gbm90
Rm91bmQsICJVbmFibGUgdG8gZmluZCBjb2RlYzogJXMiLCBwYXlsb2FkLmVuY29kaW5nTmFtZS51
dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgT3dyQ29kZWNUeXBlIGNvZGVjVHlwZSA9IHN0YXRpY19j
YXN0PE93ckNvZGVjVHlwZT4oY29kZWNUeXBlcy5maW5kKHBheWxvYWQuZW5jb2RpbmdOYW1lLmNv
bnZlcnRUb0FTQ0lJVXBwZXJjYXNlKCkpKTsKLQotICAgICAgICBPd3JQYXlsb2FkKiByZWNlaXZl
UGF5bG9hZDsKLSAgICAgICAgaWYgKG1lZGlhRGVzY3JpcHRpb24tPnR5cGUgPT0gImF1ZGlvIikK
LSAgICAgICAgICAgIHJlY2VpdmVQYXlsb2FkID0gb3dyX2F1ZGlvX3BheWxvYWRfbmV3KGNvZGVj
VHlwZSwgcGF5bG9hZC50eXBlLCBwYXlsb2FkLmNsb2NrUmF0ZSwgcGF5bG9hZC5jaGFubmVscyk7
Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgcmVjZWl2ZVBheWxvYWQgPSBvd3JfdmlkZW9f
cGF5bG9hZF9uZXcoY29kZWNUeXBlLCBwYXlsb2FkLnR5cGUsIHBheWxvYWQuY2xvY2tSYXRlLCBw
YXlsb2FkLmNjbWZpciwgcGF5bG9hZC5uYWNrcGxpKTsKLSAgICAgICAgICAgIGdfb2JqZWN0X3Nl
dChyZWNlaXZlUGF5bG9hZCwgInJ0eC1wYXlsb2FkLXR5cGUiLCBydHhQYXlsb2FkID8gcnR4UGF5
bG9hZC0+dHlwZSA6IC0xLAotICAgICAgICAgICAgICAgICJydHgtdGltZSIsIHJ0eFBheWxvYWQg
JiYgcnR4UGF5bG9hZC0+cGFyYW1ldGVycy5jb250YWlucygicnR4VGltZSIpID8gcnR4UGF5bG9h
ZC0+cGFyYW1ldGVycy5nZXQoInJ0eFRpbWUiKSA6IDAsIG51bGxwdHIpOwotICAgICAgICB9Ci0K
LSAgICAgICAgb3dyX21lZGlhX3Nlc3Npb25fYWRkX3JlY2VpdmVfcGF5bG9hZChtZWRpYVNlc3Np
b24sIHJlY2VpdmVQYXlsb2FkKTsKLSAgICB9Ci19Ci0KLXN0cnVjdCBIZWxwZXJTZXJ2ZXJVcmwg
ewotICAgIFN0cmluZyBwcm90b2NvbDsKLSAgICBTdHJpbmcgaG9zdDsKLSAgICB1bnNpZ25lZCBz
aG9ydCBwb3J0OwotICAgIFN0cmluZyBxdWVyeTsKLX07Ci0KLXN0YXRpYyB2b2lkIHBhcnNlSGVs
cGVyU2VydmVyVXJsKEdSZWdleCYgcmVnZXgsIGNvbnN0IFVSTCYgdXJsLCBIZWxwZXJTZXJ2ZXJV
cmwmIG91dFVybCkKLXsKLSAgICBHTWF0Y2hJbmZvKiBtYXRjaEluZm87Ci0KLSAgICBpZiAoZ19y
ZWdleF9tYXRjaCgmcmVnZXgsIHVybC5zdHJpbmcoKS5hc2NpaSgpLmRhdGEoKSwgc3RhdGljX2Nh
c3Q8R1JlZ2V4TWF0Y2hGbGFncz4oMCksICZtYXRjaEluZm8pKSB7Ci0gICAgICAgIGdjaGFyKiog
bWF0Y2hlcyA9ICBnX21hdGNoX2luZm9fZmV0Y2hfYWxsKG1hdGNoSW5mbyk7Ci0gICAgICAgIGdp
bnQgbWF0Y2hDb3VudCA9IGdfc3Rydl9sZW5ndGgobWF0Y2hlcyk7Ci0KLSAgICAgICAgb3V0VXJs
LnByb3RvY29sID0gbWF0Y2hlc1sxXTsKLSAgICAgICAgb3V0VXJsLmhvc3QgPSBtYXRjaGVzWzJd
WzBdID09ICdbJyA/IFN0cmluZyhtYXRjaGVzWzJdICsgMSwgc3RybGVuKG1hdGNoZXNbMl0pIC0g
MikgLy8gSVB2NgotICAgICAgICAgICAgOiBtYXRjaGVzWzJdOwotCi0gICAgICAgIG91dFVybC5w
b3J0ID0gMDsKLSAgICAgICAgaWYgKG1hdGNoQ291bnQgPj0gNCkgewotICAgICAgICAgICAgU3Ry
aW5nIHBvcnRTdHJpbmcgPSBTdHJpbmcobWF0Y2hlc1szXSArIDEpOyAvLyBTa2lwIHBvcnQgY29s
b24KLSAgICAgICAgICAgIG91dFVybC5wb3J0ID0gcG9ydFN0cmluZy50b1VJbnRTdHJpY3QoKTsK
LSAgICAgICAgfQotCi0gICAgICAgIGlmIChtYXRjaENvdW50ID09IDUpCi0gICAgICAgICAgICBv
dXRVcmwucXVlcnkgPSBTdHJpbmcobWF0Y2hlc1s0XSArIDEpOyAvLyBTa2lwIHF1ZXN0aW9uIG1h
cmsKLQotICAgICAgICBnX3N0cmZyZWV2KG1hdGNoZXMpOwotICAgIH0KLQotICAgIGdfbWF0Y2hf
aW5mb19mcmVlKG1hdGNoSW5mbyk7Ci19Ci0KLXZvaWQgTWVkaWFFbmRwb2ludE93cjo6ZW5zdXJl
VHJhbnNwb3J0QWdlbnRBbmRUcmFuc2NlaXZlcnMoYm9vbCBpc0luaXRpYXRvciwgY29uc3QgVmVj
dG9yPFRyYW5zY2VpdmVyQ29uZmlnPiYgdHJhbnNjZWl2ZXJDb25maWdzKQotewotICAgIEFTU0VS
VChtX2R0bHNQcml2YXRlS2V5KTsKLSAgICBBU1NFUlQobV9kdGxzQ2VydGlmaWNhdGUpOwotCi0g
ICAgaWYgKCFtX3RyYW5zcG9ydEFnZW50KSB7Ci0gICAgICAgIC8vIEZJWE1FOiBIYW5kbGUgU0RQ
IEJVTkRMRSBsaW5lIGZyb20gdGhlIHJlbW90ZSBzb3VyY2UgaW5zdGVhZCBvZiBmYWxsaW5nIGJh
Y2sgdG8gYmFsYW5jZWQuCi0gICAgICAgIE93ckJ1bmRsZVBvbGljeVR5cGUgYnVuZGxlUG9saWN5
ID0gT1dSX0JVTkRMRV9QT0xJQ1lfVFlQRV9CQUxBTkNFRDsKLQotICAgICAgICBzd2l0Y2ggKG1f
Y29uZmlndXJhdGlvbi0+YnVuZGxlUG9saWN5KSB7Ci0gICAgICAgIGNhc2UgUGVlckNvbm5lY3Rp
b25TdGF0ZXM6OkJ1bmRsZVBvbGljeTo6QmFsYW5jZWQ6Ci0gICAgICAgICAgICBidW5kbGVQb2xp
Y3kgPSBPV1JfQlVORExFX1BPTElDWV9UWVBFX0JBTEFOQ0VEOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGNhc2UgUGVlckNvbm5lY3Rpb25TdGF0ZXM6OkJ1bmRsZVBvbGljeTo6TWF4Q29t
cGF0OgotICAgICAgICAgICAgYnVuZGxlUG9saWN5ID0gT1dSX0JVTkRMRV9QT0xJQ1lfVFlQRV9N
QVhfQ09NUEFUOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUGVlckNvbm5lY3Rp
b25TdGF0ZXM6OkJ1bmRsZVBvbGljeTo6TWF4QnVuZGxlOgotICAgICAgICAgICAgYnVuZGxlUG9s
aWN5ID0gT1dSX0JVTkRMRV9QT0xJQ1lfVFlQRV9NQVhfQlVORExFOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
LSAgICAgICAgfTsKLQotICAgICAgICBtX3RyYW5zcG9ydEFnZW50ID0gb3dyX3RyYW5zcG9ydF9h
Z2VudF9uZXcoZmFsc2UsIGJ1bmRsZVBvbGljeSk7Ci0KLSAgICAgICAgQVNTRVJUKG1fY29uZmln
dXJhdGlvbik7Ci0gICAgICAgIGZvciAoYXV0byYgc2VydmVyIDogbV9jb25maWd1cmF0aW9uLT5p
Y2VTZXJ2ZXJzKSB7Ci0gICAgICAgICAgICBmb3IgKGF1dG8mIHdlYmtpdFVybCA6IHNlcnZlci51
cmxzKSB7Ci0gICAgICAgICAgICAgICAgSGVscGVyU2VydmVyVXJsIHVybDsKLSAgICAgICAgICAg
ICAgICAvLyBXZWJLaXQncyBVUkwgY2xhc3MgY2FuJ3QgaGFuZGxlIElDRSBoZWxwZXIgc2VydmVy
IHVybHMgcHJvcGVybHkKLSAgICAgICAgICAgICAgICBwYXJzZUhlbHBlclNlcnZlclVybCgqbV9o
ZWxwZXJTZXJ2ZXJSZWdFeCwgd2Via2l0VXJsLCB1cmwpOwotCi0gICAgICAgICAgICAgICAgdW5z
aWduZWQgc2hvcnQgcG9ydCA9IHVybC5wb3J0ID8gdXJsLnBvcnQgOiBoZWxwZXJTZXJ2ZXJEZWZh
dWx0UG9ydDsKLQotICAgICAgICAgICAgICAgIGlmICh1cmwucHJvdG9jb2wgPT0gInN0dW4iKSB7
Ci0gICAgICAgICAgICAgICAgICAgIG93cl90cmFuc3BvcnRfYWdlbnRfYWRkX2hlbHBlcl9zZXJ2
ZXIobV90cmFuc3BvcnRBZ2VudCwgT1dSX0hFTFBFUl9TRVJWRVJfVFlQRV9TVFVOLAotICAgICAg
ICAgICAgICAgICAgICAgICAgdXJsLmhvc3QuYXNjaWkoKS5kYXRhKCksIHBvcnQsIG51bGxwdHIs
IG51bGxwdHIpOwotCi0gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh1cmwucHJvdG9jb2wgPT0g
InR1cm4iKSB7Ci0gICAgICAgICAgICAgICAgICAgIE93ckhlbHBlclNlcnZlclR5cGUgc2VydmVy
VHlwZSA9IHVybC5xdWVyeSA9PSAidHJhbnNwb3J0PXRjcCIgPyBPV1JfSEVMUEVSX1NFUlZFUl9U
WVBFX1RVUk5fVENQCi0gICAgICAgICAgICAgICAgICAgICAgICA6IE9XUl9IRUxQRVJfU0VSVkVS
X1RZUEVfVFVSTl9VRFA7Ci0KLSAgICAgICAgICAgICAgICAgICAgb3dyX3RyYW5zcG9ydF9hZ2Vu
dF9hZGRfaGVscGVyX3NlcnZlcihtX3RyYW5zcG9ydEFnZW50LCBzZXJ2ZXJUeXBlLAotICAgICAg
ICAgICAgICAgICAgICAgICAgdXJsLmhvc3QuYXNjaWkoKS5kYXRhKCksIHBvcnQsCi0gICAgICAg
ICAgICAgICAgICAgICAgICBzZXJ2ZXIudXNlcm5hbWUuYXNjaWkoKS5kYXRhKCksIHNlcnZlci5j
cmVkZW50aWFsLmFzY2lpKCkuZGF0YSgpKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHVy
bC5wcm90b2NvbCA9PSAidHVybnMiKSB7Ci0gICAgICAgICAgICAgICAgICAgIG93cl90cmFuc3Bv
cnRfYWdlbnRfYWRkX2hlbHBlcl9zZXJ2ZXIobV90cmFuc3BvcnRBZ2VudCwgT1dSX0hFTFBFUl9T
RVJWRVJfVFlQRV9UVVJOX1RMUywKLSAgICAgICAgICAgICAgICAgICAgICAgIHVybC5ob3N0LmFz
Y2lpKCkuZGF0YSgpLCBwb3J0LAotICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyLnVzZXJu
YW1lLmFzY2lpKCkuZGF0YSgpLCBzZXJ2ZXIuY3JlZGVudGlhbC5hc2NpaSgpLmRhdGEoKSk7Ci0g
ICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgZ19vYmplY3Rf
c2V0KG1fdHJhbnNwb3J0QWdlbnQsICJpY2UtY29udHJvbGxpbmctbW9kZSIsIGlzSW5pdGlhdG9y
LCBudWxscHRyKTsKLQotICAgIGZvciAoYXV0byYgY29uZmlnIDogdHJhbnNjZWl2ZXJDb25maWdz
KSB7Ci0gICAgICAgIE93clNlc3Npb24qIHNlc3Npb24gPSBPV1JfU0VTU0lPTihvd3JfbWVkaWFf
c2Vzc2lvbl9uZXcoY29uZmlnLmlzRHRsc0NsaWVudCkpOwotICAgICAgICBnX29iamVjdF9zZXQo
c2Vzc2lvbiwgImR0bHMtY2VydGlmaWNhdGUiLCBtX2R0bHNDZXJ0aWZpY2F0ZS51dGY4KCkuZGF0
YSgpLAotICAgICAgICAgICAgImR0bHMta2V5IiwgbV9kdGxzUHJpdmF0ZUtleS51dGY4KCkuZGF0
YSgpLAotICAgICAgICAgICAgbnVsbHB0cik7Ci0KLSAgICAgICAgbV90cmFuc2NlaXZlcnMuYXBw
ZW5kKE93clRyYW5zY2VpdmVyOjpjcmVhdGUoY29uZmlnLm1pZCwgc2Vzc2lvbikpOwotICAgIH0K
LX0KLQotdm9pZCBNZWRpYUVuZHBvaW50T3dyOjppbnRlcm5hbEFkZFJlbW90ZUNhbmRpZGF0ZShP
d3JTZXNzaW9uKiBzZXNzaW9uLCBjb25zdCBJY2VDYW5kaWRhdGUmIGNhbmRpZGF0ZSwgY29uc3Qg
U3RyaW5nJiB1ZnJhZywgY29uc3QgU3RyaW5nJiBwYXNzd29yZCkKLXsKLSAgICBnYm9vbGVhbiBy
dGNwTXV4OwotICAgIGdfb2JqZWN0X2dldChzZXNzaW9uLCAicnRjcC1tdXgiLCAmcnRjcE11eCwg
bnVsbHB0cik7Ci0KLSAgICBpZiAocnRjcE11eCAmJiBjYW5kaWRhdGUuY29tcG9uZW50SWQgPT0g
T1dSX0NPTVBPTkVOVF9UWVBFX1JUQ1ApCi0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVChj
YW5kaWRhdGVUeXBlcy5maW5kKGNhbmRpZGF0ZS50eXBlKSAhPSBub3RGb3VuZCk7Ci0KLSAgICBP
d3JDYW5kaWRhdGVUeXBlIGNhbmRpZGF0ZVR5cGUgPSBzdGF0aWNfY2FzdDxPd3JDYW5kaWRhdGVU
eXBlPihjYW5kaWRhdGVUeXBlcy5maW5kKGNhbmRpZGF0ZS50eXBlKSk7Ci0gICAgT3dyQ29tcG9u
ZW50VHlwZSBjb21wb25lbnRJZCA9IHN0YXRpY19jYXN0PE93ckNvbXBvbmVudFR5cGU+KGNhbmRp
ZGF0ZS5jb21wb25lbnRJZCk7Ci0gICAgT3dyVHJhbnNwb3J0VHlwZSB0cmFuc3BvcnRUeXBlOwot
Ci0gICAgaWYgKGNhbmRpZGF0ZS50cmFuc3BvcnQuY29udmVydFRvQVNDSUlVcHBlcmNhc2UoKSA9
PSAiVURQIikKLSAgICAgICAgdHJhbnNwb3J0VHlwZSA9IE9XUl9UUkFOU1BPUlRfVFlQRV9VRFA7
Ci0gICAgZWxzZSB7Ci0gICAgICAgIEFTU0VSVChjYW5kaWRhdGVUY3BUeXBlcy5maW5kKGNhbmRp
ZGF0ZS50Y3BUeXBlKSAhPSBub3RGb3VuZCk7Ci0gICAgICAgIHRyYW5zcG9ydFR5cGUgPSBzdGF0
aWNfY2FzdDxPd3JUcmFuc3BvcnRUeXBlPihjYW5kaWRhdGVUY3BUeXBlcy5maW5kKGNhbmRpZGF0
ZS50Y3BUeXBlKSk7Ci0gICAgfQotCi0gICAgT3dyQ2FuZGlkYXRlKiBvd3JDYW5kaWRhdGUgPSBv
d3JfY2FuZGlkYXRlX25ldyhjYW5kaWRhdGVUeXBlLCBjb21wb25lbnRJZCk7Ci0gICAgZ19vYmpl
Y3Rfc2V0KG93ckNhbmRpZGF0ZSwgInRyYW5zcG9ydC10eXBlIiwgdHJhbnNwb3J0VHlwZSwKLSAg
ICAgICAgImFkZHJlc3MiLCBjYW5kaWRhdGUuYWRkcmVzcy5hc2NpaSgpLmRhdGEoKSwKLSAgICAg
ICAgInBvcnQiLCBjYW5kaWRhdGUucG9ydCwKLSAgICAgICAgImJhc2UtYWRkcmVzcyIsIGNhbmRp
ZGF0ZS5yZWxhdGVkQWRkcmVzcy5hc2NpaSgpLmRhdGEoKSwKLSAgICAgICAgImJhc2UtcG9ydCIs
IGNhbmRpZGF0ZS5yZWxhdGVkUG9ydCwKLSAgICAgICAgInByaW9yaXR5IiwgY2FuZGlkYXRlLnBy
aW9yaXR5LAotICAgICAgICAiZm91bmRhdGlvbiIsIGNhbmRpZGF0ZS5mb3VuZGF0aW9uLmFzY2lp
KCkuZGF0YSgpLAotICAgICAgICAidWZyYWciLCB1ZnJhZy5hc2NpaSgpLmRhdGEoKSwKLSAgICAg
ICAgInBhc3N3b3JkIiwgcGFzc3dvcmQuYXNjaWkoKS5kYXRhKCksCi0gICAgICAgIG51bGxwdHIp
OwotCi0gICAgb3dyX3Nlc3Npb25fYWRkX3JlbW90ZV9jYW5kaWRhdGUoc2Vzc2lvbiwgb3dyQ2Fu
ZGlkYXRlKTsKLX0KLQotc3RhdGljIHZvaWQgZ290Q2FuZGlkYXRlKE93clNlc3Npb24qIHNlc3Np
b24sIE93ckNhbmRpZGF0ZSogY2FuZGlkYXRlLCBNZWRpYUVuZHBvaW50T3dyKiBtZWRpYUVuZHBv
aW50KQotewotICAgIE93ckNhbmRpZGF0ZVR5cGUgY2FuZGlkYXRlVHlwZTsKLSAgICBnY2hhciog
Zm91bmRhdGlvbjsKLSAgICBPd3JDb21wb25lbnRUeXBlIGNvbXBvbmVudElkOwotICAgIE93clRy
YW5zcG9ydFR5cGUgdHJhbnNwb3J0VHlwZTsKLSAgICBnaW50IHByaW9yaXR5OwotICAgIGdjaGFy
KiBhZGRyZXNzOwotICAgIGd1aW50IHBvcnQ7Ci0gICAgZ2NoYXIqIHJlbGF0ZWRBZGRyZXNzOwot
ICAgIGd1aW50IHJlbGF0ZWRQb3J0OwotCi0gICAgZ19vYmplY3RfZ2V0KGNhbmRpZGF0ZSwgInR5
cGUiLCAmY2FuZGlkYXRlVHlwZSwKLSAgICAgICAgImZvdW5kYXRpb24iLCAmZm91bmRhdGlvbiwK
LSAgICAgICAgImNvbXBvbmVudC10eXBlIiwgJmNvbXBvbmVudElkLAotICAgICAgICAidHJhbnNw
b3J0LXR5cGUiLCAmdHJhbnNwb3J0VHlwZSwKLSAgICAgICAgInByaW9yaXR5IiwgJnByaW9yaXR5
LAotICAgICAgICAiYWRkcmVzcyIsICZhZGRyZXNzLAotICAgICAgICAicG9ydCIsICZwb3J0LAot
ICAgICAgICAiYmFzZS1hZGRyZXNzIiwgJnJlbGF0ZWRBZGRyZXNzLAotICAgICAgICAiYmFzZS1w
b3J0IiwgJnJlbGF0ZWRQb3J0LAotICAgICAgICBudWxscHRyKTsKLQotICAgIEFTU0VSVChjYW5k
aWRhdGVUeXBlID49IDAgJiYgY2FuZGlkYXRlVHlwZSA8IGNhbmRpZGF0ZVR5cGVzLnNpemUoKSk7
Ci0gICAgQVNTRVJUKHRyYW5zcG9ydFR5cGUgPj0gMCAmJiB0cmFuc3BvcnRUeXBlIDwgY2FuZGlk
YXRlVGNwVHlwZXMuc2l6ZSgpKTsKLQotICAgIEljZUNhbmRpZGF0ZSBpY2VDYW5kaWRhdGU7Ci0g
ICAgaWNlQ2FuZGlkYXRlLnR5cGUgPSBjYW5kaWRhdGVUeXBlc1tjYW5kaWRhdGVUeXBlXTsKLSAg
ICBpY2VDYW5kaWRhdGUuZm91bmRhdGlvbiA9IGZvdW5kYXRpb247Ci0gICAgaWNlQ2FuZGlkYXRl
LmNvbXBvbmVudElkID0gY29tcG9uZW50SWQ7Ci0gICAgaWNlQ2FuZGlkYXRlLnByaW9yaXR5ID0g
cHJpb3JpdHk7Ci0gICAgaWNlQ2FuZGlkYXRlLmFkZHJlc3MgPSBhZGRyZXNzOwotICAgIGljZUNh
bmRpZGF0ZS5wb3J0ID0gcG9ydCA/IHBvcnQgOiBjYW5kaWRhdGVEZWZhdWx0UG9ydDsKLQotICAg
IGlmICh0cmFuc3BvcnRUeXBlID09IE9XUl9UUkFOU1BPUlRfVFlQRV9VRFApCi0gICAgICAgIGlj
ZUNhbmRpZGF0ZS50cmFuc3BvcnQgPSAiVURQIjsKLSAgICBlbHNlIHsKLSAgICAgICAgaWNlQ2Fu
ZGlkYXRlLnRyYW5zcG9ydCA9ICJUQ1AiOwotICAgICAgICBpY2VDYW5kaWRhdGUudGNwVHlwZSA9
IGNhbmRpZGF0ZVRjcFR5cGVzW3RyYW5zcG9ydFR5cGVdOwotICAgIH0KLQotICAgIGlmIChjYW5k
aWRhdGVUeXBlICE9IE9XUl9DQU5ESURBVEVfVFlQRV9IT1NUKSB7Ci0gICAgICAgIGljZUNhbmRp
ZGF0ZS5yZWxhdGVkQWRkcmVzcyA9IHJlbGF0ZWRBZGRyZXNzOwotICAgICAgICBpY2VDYW5kaWRh
dGUucmVsYXRlZFBvcnQgPSByZWxhdGVkUG9ydCA/IHJlbGF0ZWRQb3J0IDogY2FuZGlkYXRlRGVm
YXVsdFBvcnQ7Ci0gICAgfQotCi0gICAgZ19vYmplY3Rfc2V0KEdfT0JKRUNUKGNhbmRpZGF0ZSks
ICJ1ZnJhZyIsIGdfb2JqZWN0X2dldF9kYXRhKEdfT0JKRUNUKHNlc3Npb24pLCAiaWNlLXVmcmFn
IiksCi0gICAgICAgICJwYXNzd29yZCIsIGdfb2JqZWN0X2dldF9kYXRhKEdfT0JKRUNUKHNlc3Np
b24pLCAiaWNlLXBhc3N3b3JkIiksCi0gICAgICAgIG51bGxwdHIpOwotCi0gICAgbWVkaWFFbmRw
b2ludC0+ZGlzcGF0Y2hOZXdJY2VDYW5kaWRhdGUobWVkaWFFbmRwb2ludC0+c2Vzc2lvbk1pZChz
ZXNzaW9uKSwgV1RGTW92ZShpY2VDYW5kaWRhdGUpKTsKLQotICAgIGdfZnJlZShmb3VuZGF0aW9u
KTsKLSAgICBnX2ZyZWUoYWRkcmVzcyk7Ci0gICAgZ19mcmVlKHJlbGF0ZWRBZGRyZXNzKTsKLX0K
LQotc3RhdGljIHZvaWQgY2FuZGlkYXRlR2F0aGVyaW5nRG9uZShPd3JTZXNzaW9uKiBzZXNzaW9u
LCBNZWRpYUVuZHBvaW50T3dyKiBtZWRpYUVuZHBvaW50KQotewotICAgIG1lZGlhRW5kcG9pbnQt
PmRpc3BhdGNoR2F0aGVyaW5nRG9uZShtZWRpYUVuZHBvaW50LT5zZXNzaW9uTWlkKHNlc3Npb24p
KTsKLX0KLQotc3RhdGljIHZvaWQgaWNlQ29ubmVjdGlvblN0YXRlQ2hhbmdlKE93clNlc3Npb24q
IHNlc3Npb24sIEdQYXJhbVNwZWMqLCBNZWRpYUVuZHBvaW50T3dyKiBtZWRpYUVuZHBvaW50KQot
ewotICAgIG1lZGlhRW5kcG9pbnQtPnByb2Nlc3NJY2VUcmFuc3BvcnRTdGF0ZUNoYW5nZShzZXNz
aW9uKTsKLX0KLQotc3RhdGljIHZvaWQgZ290SW5jb21pbmdTb3VyY2UoT3dyTWVkaWFTZXNzaW9u
KiBtZWRpYVNlc3Npb24sIE93ck1lZGlhU291cmNlKiBzb3VyY2UsIE1lZGlhRW5kcG9pbnRPd3Iq
IG1lZGlhRW5kcG9pbnQpCi17Ci0gICAgbWVkaWFFbmRwb2ludC0+dW5tdXRlUmVtb3RlU291cmNl
KG1lZGlhRW5kcG9pbnQtPnNlc3Npb25NaWQoT1dSX1NFU1NJT04obWVkaWFTZXNzaW9uKSksIHNv
dXJjZSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShX
RUJfUlRDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0v
b3BlbndlYnJ0Yy9NZWRpYUVuZHBvaW50T3dyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
ZWRpYXN0cmVhbS9vcGVud2VicnRjL01lZGlhRW5kcG9pbnRPd3IuaApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggZjMxMDQ4YzllY2ZlZWUzNTBhYzI5ZjYyMjFhY2QwYzJlYWRiOTBmNy4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9vcGVud2VicnRjL01lZGlhRW5kcG9pbnRPd3IuaAor
KysgL2Rldi9udWxsCkBAIC0xLDE0OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE1
LCAyMDE2IEVyaWNzc29uIEFCLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiAgICBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiAgICBkaXN0cmlidXRp
b24uCi0gKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIEVyaWNzc29uIG5vciB0aGUgbmFtZXMgb2Yg
aXRzIGNvbnRyaWJ1dG9ycwotICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0gKiAgICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMg
SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0g
KiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQot
Ci0jaWYgRU5BQkxFKFdFQl9SVEMpCi0KLSNpbmNsdWRlICJNZWRpYUVuZHBvaW50LmgiCi0jaW5j
bHVkZSA8b3dyL293cl9zZXNzaW9uLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KLSNp
bmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0KLXR5cGVkZWYgc3RydWN0IF9Pd3JNZWRpYVNlc3Npb24g
T3dyTWVkaWFTZXNzaW9uOwotdHlwZWRlZiBzdHJ1Y3QgX093ck1lZGlhU291cmNlIE93ck1lZGlh
U291cmNlOwotdHlwZWRlZiBzdHJ1Y3QgX093clRyYW5zcG9ydEFnZW50IE93clRyYW5zcG9ydEFn
ZW50OwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFJlYWx0aW1lTWVkaWFTb3VyY2VP
d3I7Ci1jbGFzcyBSVENDb25maWd1cmF0aW9uUHJpdmF0ZTsKLQotc3RydWN0IFBlZXJNZWRpYURl
c2NyaXB0aW9uOwotCi1jbGFzcyBPd3JUcmFuc2NlaXZlciA6IHB1YmxpYyBSZWZDb3VudGVkPE93
clRyYW5zY2VpdmVyPiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxPd3JUcmFuc2NlaXZlcj4g
Y3JlYXRlKGNvbnN0IFN0cmluZyYgbWlkLCBPd3JTZXNzaW9uKiBzZXNzaW9uKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgT3dyVHJhbnNjZWl2ZXIobWlkLCBzZXNzaW9uKSk7
Ci0gICAgfQotICAgIHZpcnR1YWwgfk93clRyYW5zY2VpdmVyKCkgeyB9Ci0KLSAgICBjb25zdCBT
dHJpbmcmIG1pZCgpIGNvbnN0IHsgcmV0dXJuIG1fbWlkOyB9Ci0gICAgT3dyU2Vzc2lvbiogc2Vz
c2lvbigpIGNvbnN0IHsgcmV0dXJuIG1fc2Vzc2lvbjsgfQotCi0gICAgT3dySWNlU3RhdGUgb3dy
SWNlU3RhdGUoKSBjb25zdCB7IHJldHVybiBtX293ckljZVN0YXRlOyB9Ci0gICAgdm9pZCBzZXRP
d3JJY2VTdGF0ZShPd3JJY2VTdGF0ZSBzdGF0ZSkgeyBtX293ckljZVN0YXRlID0gc3RhdGU7IH0K
LQotICAgIGJvb2wgZ290RW5kT2ZSZW1vdGVDYW5kaWRhdGVzKCkgY29uc3QgeyByZXR1cm4gbV9n
b3RFbmRPZlJlbW90ZUNhbmRpZGF0ZXM7IH0KLSAgICB2b2lkIG1hcmtHb3RFbmRPZlJlbW90ZUNh
bmRpZGF0ZXMoKSB7IG1fZ290RW5kT2ZSZW1vdGVDYW5kaWRhdGVzID0gdHJ1ZTsgfQotCi1wcml2
YXRlOgotICAgIE93clRyYW5zY2VpdmVyKGNvbnN0IFN0cmluZyYgbWlkLCBPd3JTZXNzaW9uKiBz
ZXNzaW9uKQotICAgICAgICA6IG1fbWlkKG1pZCkKLSAgICAgICAgLCBtX3Nlc3Npb24oc2Vzc2lv
bikKLSAgICB7IH0KLQotICAgIFN0cmluZyBtX21pZDsKLSAgICBPd3JTZXNzaW9uKiBtX3Nlc3Np
b247Ci0KLSAgICBPd3JJY2VTdGF0ZSBtX293ckljZVN0YXRlIHsgT1dSX0lDRV9TVEFURV9ESVND
T05ORUNURUQgfTsKLSAgICBib29sIG1fZ290RW5kT2ZSZW1vdGVDYW5kaWRhdGVzIHsgZmFsc2Ug
fTsKLX07Ci0KLWNsYXNzIE1lZGlhRW5kcG9pbnRPd3IgOiBwdWJsaWMgTWVkaWFFbmRwb2ludCB7
Ci1wdWJsaWM6Ci0gICAgTWVkaWFFbmRwb2ludE93cihNZWRpYUVuZHBvaW50Q2xpZW50Jik7Ci0g
ICAgfk1lZGlhRW5kcG9pbnRPd3IoKTsKLQotICAgIHZvaWQgc2V0Q29uZmlndXJhdGlvbihNZWRp
YUVuZHBvaW50Q29uZmlndXJhdGlvbiYmKSBvdmVycmlkZTsKLQotICAgIHZvaWQgZ2VuZXJhdGVE
dGxzSW5mbygpIG92ZXJyaWRlOwotICAgIE1lZGlhUGF5bG9hZFZlY3RvciBnZXREZWZhdWx0QXVk
aW9QYXlsb2FkcygpIG92ZXJyaWRlOwotICAgIE1lZGlhUGF5bG9hZFZlY3RvciBnZXREZWZhdWx0
VmlkZW9QYXlsb2FkcygpIG92ZXJyaWRlOwotICAgIE1lZGlhUGF5bG9hZFZlY3RvciBmaWx0ZXJQ
YXlsb2Fkcyhjb25zdCBNZWRpYVBheWxvYWRWZWN0b3ImIHJlbW90ZVBheWxvYWRzLCBjb25zdCBN
ZWRpYVBheWxvYWRWZWN0b3ImIGRlZmF1bHRQYXlsb2Fkcykgb3ZlcnJpZGU7Ci0KLSAgICBVcGRh
dGVSZXN1bHQgdXBkYXRlUmVjZWl2ZUNvbmZpZ3VyYXRpb24oTWVkaWFFbmRwb2ludFNlc3Npb25D
b25maWd1cmF0aW9uKiwgYm9vbCBpc0luaXRpYXRvcikgb3ZlcnJpZGU7Ci0gICAgVXBkYXRlUmVz
dWx0IHVwZGF0ZVNlbmRDb25maWd1cmF0aW9uKE1lZGlhRW5kcG9pbnRTZXNzaW9uQ29uZmlndXJh
dGlvbiosIGNvbnN0IFJlYWx0aW1lTWVkaWFTb3VyY2VNYXAmLCBib29sIGlzSW5pdGlhdG9yKSBv
dmVycmlkZTsKLQotICAgIHZvaWQgYWRkUmVtb3RlQ2FuZGlkYXRlKGNvbnN0IEljZUNhbmRpZGF0
ZSYsIGNvbnN0IFN0cmluZyYgbWlkLCBjb25zdCBTdHJpbmcmIHVmcmFnLCBjb25zdCBTdHJpbmcm
IHBhc3N3b3JkKSBvdmVycmlkZTsKLQotICAgIFJlZjxSZWFsdGltZU1lZGlhU291cmNlPiBjcmVh
dGVNdXRlZFJlbW90ZVNvdXJjZShjb25zdCBTdHJpbmcmIG1pZCwgUmVhbHRpbWVNZWRpYVNvdXJj
ZTo6VHlwZSkgb3ZlcnJpZGU7Ci0gICAgdm9pZCByZXBsYWNlTXV0ZWRSZW1vdGVTb3VyY2VNaWQo
Y29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJikgZmluYWw7Ci0gICAgdm9pZCByZXBsYWNlU2Vu
ZFNvdXJjZShSZWFsdGltZU1lZGlhU291cmNlJiwgY29uc3QgU3RyaW5nJiBtaWQpIG92ZXJyaWRl
OwotCi0gICAgdm9pZCBzdG9wKCkgb3ZlcnJpZGU7Ci0KLSAgICBzaXplX3QgdHJhbnNjZWl2ZXJJ
bmRleEZvclNlc3Npb24oT3dyU2Vzc2lvbiopIGNvbnN0OwotICAgIGNvbnN0IFN0cmluZyYgc2Vz
c2lvbk1pZChPd3JTZXNzaW9uKikgY29uc3Q7Ci0gICAgT3dyVHJhbnNjZWl2ZXIqIG1hdGNoVHJh
bnNjZWl2ZXJCeU1pZChjb25zdCBTdHJpbmcmIG1pZCkgY29uc3Q7Ci0KLSAgICB2b2lkIGRpc3Bh
dGNoTmV3SWNlQ2FuZGlkYXRlKGNvbnN0IFN0cmluZyYgbWlkLCBJY2VDYW5kaWRhdGUmJik7Ci0g
ICAgdm9pZCBkaXNwYXRjaEdhdGhlcmluZ0RvbmUoY29uc3QgU3RyaW5nJiBtaWQpOwotICAgIHZv
aWQgcHJvY2Vzc0ljZVRyYW5zcG9ydFN0YXRlQ2hhbmdlKE93clNlc3Npb24qKTsKLSAgICB2b2lk
IGRpc3BhdGNoRHRsc0ZpbmdlcnByaW50KGdjaGFyKiBwcml2YXRlS2V5LCBnY2hhciogY2VydGlm
aWNhdGUsIGNvbnN0IFN0cmluZyYgZmluZ2VycHJpbnQsIGNvbnN0IFN0cmluZyYgZmluZ2VycHJp
bnRGdW5jdGlvbik7Ci0gICAgdm9pZCB1bm11dGVSZW1vdGVTb3VyY2UoY29uc3QgU3RyaW5nJiBt
aWQsIE93ck1lZGlhU291cmNlKik7Ci0KLXByaXZhdGU6Ci0gICAgZW51bSBTZXNzaW9uVHlwZSB7
IFNlc3Npb25UeXBlTWVkaWEgfTsKLQotICAgIHN0cnVjdCBUcmFuc2NlaXZlckNvbmZpZyB7Ci0g
ICAgICAgIFNlc3Npb25UeXBlIHR5cGU7Ci0gICAgICAgIGJvb2wgaXNEdGxzQ2xpZW50OwotICAg
ICAgICBTdHJpbmcgbWlkOwotICAgIH07Ci0KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8UlRDRGF0YUNo
YW5uZWxIYW5kbGVyPiBjcmVhdGVEYXRhQ2hhbm5lbEhhbmRsZXIoY29uc3QgU3RyaW5nJiwgY29u
c3QgUlRDRGF0YUNoYW5uZWxJbml0JikgZmluYWw7Ci0KLSAgICB2b2lkIHByZXBhcmVTZXNzaW9u
KE93clNlc3Npb24qLCBQZWVyTWVkaWFEZXNjcmlwdGlvbiopOwotICAgIHZvaWQgcHJlcGFyZU1l
ZGlhU2Vzc2lvbihPd3JNZWRpYVNlc3Npb24qLCBQZWVyTWVkaWFEZXNjcmlwdGlvbiosIGJvb2wg
aXNJbml0aWF0b3IpOwotCi0gICAgdm9pZCBlbnN1cmVUcmFuc3BvcnRBZ2VudEFuZFRyYW5zY2Vp
dmVycyhib29sIGlzSW5pdGlhdG9yLCBjb25zdCBWZWN0b3I8VHJhbnNjZWl2ZXJDb25maWc+Jik7
Ci0gICAgdm9pZCBpbnRlcm5hbEFkZFJlbW90ZUNhbmRpZGF0ZShPd3JTZXNzaW9uKiwgY29uc3Qg
SWNlQ2FuZGlkYXRlJiwgY29uc3QgU3RyaW5nJiB1ZnJhZywgY29uc3QgU3RyaW5nJiBwYXNzd29y
ZCk7Ci0KLSAgICBzdGQ6Om9wdGlvbmFsPE1lZGlhRW5kcG9pbnRDb25maWd1cmF0aW9uPiBtX2Nv
bmZpZ3VyYXRpb247Ci0gICAgR1JlZ2V4KiBtX2hlbHBlclNlcnZlclJlZ0V4OwotCi0gICAgT3dy
VHJhbnNwb3J0QWdlbnQqIG1fdHJhbnNwb3J0QWdlbnQ7Ci0gICAgVmVjdG9yPFJlZlB0cjxPd3JU
cmFuc2NlaXZlcj4+IG1fdHJhbnNjZWl2ZXJzOwotICAgIEhhc2hNYXA8U3RyaW5nLCBSZWZQdHI8
UmVhbHRpbWVNZWRpYVNvdXJjZU93cj4+IG1fbXV0ZWRSZW1vdGVTb3VyY2VzOwotCi0gICAgTWVk
aWFFbmRwb2ludENsaWVudCYgbV9jbGllbnQ7Ci0KLSAgICB1bnNpZ25lZCBtX251bWJlck9mUmVj
ZWl2ZVByZXBhcmVkU2Vzc2lvbnM7Ci0gICAgdW5zaWduZWQgbV9udW1iZXJPZlNlbmRQcmVwYXJl
ZFNlc3Npb25zOwotCi0gICAgU3RyaW5nIG1fZHRsc1ByaXZhdGVLZXk7Ci0gICAgU3RyaW5nIG1f
ZHRsc0NlcnRpZmljYXRlOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYg
Ly8gRU5BQkxFKFdFQl9SVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
ZWRpYXN0cmVhbS9vcGVud2VicnRjL09wZW5XZWJSVENVdGlsaXRpZXMuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vb3BlbndlYnJ0Yy9PcGVuV2ViUlRDVXRpbGl0aWVz
LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTRjZmI1OWRmNTAxZDliMWUxNzRl
Nzc0MGI3NjQ3YjFhNDhjOTM2MC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9vcGVud2VicnRj
L09wZW5XZWJSVENVdGlsaXRpZXMuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNTcgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBJZ2FsaWEgUy5MCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTUgTWV0cm9sb2dpY2FsCi0gKgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICoKLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZSBu
YW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBIT0xERVIgT1IgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
Ci0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLQotI2luY2x1ZGUg
ImNvbmZpZy5oIgotCi0jaWYgVVNFKE9QRU5XRUJSVEMpCi0jaW5jbHVkZSAiT3BlbldlYlJUQ1V0
aWxpdGllcy5oIgotCi0jaW5jbHVkZSA8b3dyL293ci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci0KLXZvaWQgaW5pdGlhbGl6ZU9wZW5XZWJSVEMoKQotewotICAgIHN0YXRpYyBib29sIGlzSW5p
dGlhbGl6ZWQgPSBmYWxzZTsKLSAgICBpZiAoaXNJbml0aWFsaXplZCkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgb3dyX2luaXQoZ19tYWluX2NvbnRleHRfZGVmYXVsdCgpKTsKLSAgICBpc0luaXRp
YWxpemVkID0gdHJ1ZTsKLX0KLQotfQotCi0jZW5kaWYgLy8gVVNFKE9QRU5XRUJSVEMpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9vcGVud2VicnRjL09w
ZW5XZWJSVENVdGlsaXRpZXMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFt
L29wZW53ZWJydGMvT3BlbldlYlJUQ1V0aWxpdGllcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCBiZWQ0NzRiYmZhNGM1MzIyN2ZiNTY2OWFiNGIzMzBjNjJmYWM4OWI4Li4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21lZGlhc3RyZWFtL29wZW53ZWJydGMvT3BlbldlYlJUQ1V0aWxpdGllcy5oCisrKyAv
ZGV2L251bGwKQEAgLTEsNDAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBJZ2Fs
aWEgUy5MCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgTWV0cm9sb2dpY2FsCi0gKgotICogQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1l
dDoKLSAqCi0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICoKLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhl
IGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0g
KiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUCi0gKiBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
LSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi12b2lkIGluaXRpYWxpemVP
cGVuV2ViUlRDKCk7Ci0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21l
ZGlhc3RyZWFtL29wZW53ZWJydGMvUmVhbHRpbWVBdWRpb1NvdXJjZU93ci5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vb3BlbndlYnJ0Yy9SZWFsdGltZUF1ZGlvU291cmNl
T3dyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNhYjcwNTA4NGI5NGNmYzhlN2Ix
OWY3ZDdlODIzMjY4Y2JjZWY0NjYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vb3BlbndlYnJ0
Yy9SZWFsdGltZUF1ZGlvU291cmNlT3dyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3MCArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDE1LDIwMTYgSWdhbGlhIFMuTAotICogQ29weXJpZ2h0
IChDKSAyMDE1IE1ldHJvbG9naWNhbAotICoKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5v
ciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
Ci0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogSE9MREVS
IE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAq
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJh
Z21hIG9uY2UKLQotI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pICYmIFVTRShPUEVOV0VCUlRDKQot
Ci0jaW5jbHVkZSAiUmVhbHRpbWVNZWRpYVNvdXJjZU93ci5oIgotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0KLWNsYXNzIFJlYWx0aW1lQXVkaW9Tb3VyY2VPd3IgOiBwdWJsaWMgUmVhbHRpbWVNZWRp
YVNvdXJjZU93ciB7Ci1wdWJsaWM6Ci1SZWFsdGltZUF1ZGlvU291cmNlT3dyKE93ck1lZGlhU291
cmNlKiBtZWRpYVNvdXJjZSwgY29uc3QgU3RyaW5nJiBpZCwgUmVhbHRpbWVNZWRpYVNvdXJjZTo6
VHlwZSB0eXBlLCBjb25zdCBTdHJpbmcmIG5hbWUpCi0gICAgOiBSZWFsdGltZU1lZGlhU291cmNl
T3dyKG1lZGlhU291cmNlLCBpZCwgdHlwZSwgbmFtZSkKLSAgICB7Ci0gICAgfQotCi1SZWFsdGlt
ZUF1ZGlvU291cmNlT3dyKGNvbnN0IFN0cmluZyYgaWQsIFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5
cGUgdHlwZSwgY29uc3QgU3RyaW5nJiBuYW1lKQotICAgIDogUmVhbHRpbWVNZWRpYVNvdXJjZU93
cihpZCwgdHlwZSwgbmFtZSkKLSAgICB7Ci0gICAgfQotCi0gICAgdmlydHVhbCB+UmVhbHRpbWVB
dWRpb1NvdXJjZU93cigpIHsgfQotCi0gICAgYm9vbCBhcHBseVNpemUoY29uc3QgSW50U2l6ZSYp
IGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9Ci0KLXByb3RlY3RlZDoKLSAgICB2b2lkIGluaXRpYWxp
emVTZXR0aW5ncygpIGZpbmFsIHsKLSAgICAgICAgaWYgKG1fY3VycmVudFNldHRpbmdzLmRldmlj
ZUlkKCkuaXNFbXB0eSgpKQotICAgICAgICAgICAgbV9jdXJyZW50U2V0dGluZ3Muc2V0U3VwcG9y
dGVkQ29uc3RyYWludHMoc3VwcG9ydGVkQ29uc3RyYWludHMoKSk7Ci0KLSAgICAgICAgbV9jdXJy
ZW50U2V0dGluZ3Muc2V0RGV2aWNlSWQoaWQoKSk7Ci0gICAgfQotfTsKLQotfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVBTSkgJiYgVVNFKE9QRU5X
RUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9v
cGVud2VicnRjL1JlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJPd3IuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vb3BlbndlYnJ0Yy9SZWFsdGltZU1lZGlhU291cmNlQ2Vu
dGVyT3dyLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWFhZDhhMjM5MDI3N2Yz
Nzk3MDE0MTI0OTkxZjRhZGRhOGFkODQzOC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9vcGVu
d2VicnRjL1JlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJPd3IuY3BwCisrKyAvZGV2L251bGwKQEAg
LTEsMTkwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgRXJpY3Nzb24gQUIuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNSBJZ2FsaWEgUy5MLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE1IE1ldHJvbG9naWNhbC4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqCi0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgotICogICAgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZQotICogICAgZGlzdHJpYnV0aW9uLgotICogMy4gTmVpdGhlciB0aGUg
bmFtZSBvZiBFcmljc3NvbiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAg
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20g
dGhpcwotICogICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgot
ICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoTUVE
SUFfU1RSRUFNKSAmJiBVU0UoT1BFTldFQlJUQykKLSNpbmNsdWRlICJSZWFsdGltZU1lZGlhU291
cmNlQ2VudGVyT3dyLmgiCi0KLSNpbmNsdWRlICJDYXB0dXJlRGV2aWNlLmgiCi0jaW5jbHVkZSAi
TWVkaWFTdHJlYW1Qcml2YXRlLmgiCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLSNpbmNs
dWRlICJPcGVuV2ViUlRDVXRpbGl0aWVzLmgiCi0jaW5jbHVkZSAiUmVhbHRpbWVBdWRpb1NvdXJj
ZU93ci5oIgotI2luY2x1ZGUgIlJlYWx0aW1lTWVkaWFTb3VyY2VDYXBhYmlsaXRpZXMuaCIKLSNp
bmNsdWRlICJSZWFsdGltZVZpZGVvU291cmNlT3dyLmgiCi0jaW5jbHVkZSA8b3dyL293ci5oPgot
I2luY2x1ZGUgPG93ci9vd3JfbG9jYWwuaD4KLSNpbmNsdWRlIDxvd3Ivb3dyX21lZGlhX3NvdXJj
ZS5oPgotI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+Ci0jaW5jbHVkZSA8d3RmL05ldmVyRGVz
dHJveWVkLmg+Ci0jaW5jbHVkZSA8d3RmL1VVSUQuaD4KLSNpbmNsdWRlIDx3dGYvZ2xpYi9HVW5p
cXVlUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotI2luY2x1ZGUgPHd0Zi90
ZXh0L1N0cmluZ0hhc2guaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1SZWFsdGltZU1lZGlh
U291cmNlQ2VudGVyJiBSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyOjpwbGF0Zm9ybUNlbnRlcigp
Ci17Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95
ZWQ8UmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlck93cj4gY2VudGVyOwotICAgIHJldHVybiBjZW50
ZXI7Ci19Ci0KLXN0YXRpYyB2b2lkIG1lZGlhU291cmNlc0F2YWlsYWJsZUNhbGxiYWNrKEdMaXN0
KiBzb3VyY2VzLCBncG9pbnRlciB1c2VyRGF0YSkKLXsKLSAgICBSZWFsdGltZU1lZGlhU291cmNl
Q2VudGVyT3dyKiBjZW50ZXIgPSByZWludGVycHJldF9jYXN0PFJlYWx0aW1lTWVkaWFTb3VyY2VD
ZW50ZXJPd3IqPih1c2VyRGF0YSk7Ci0gICAgY2VudGVyLT5tZWRpYVNvdXJjZXNBdmFpbGFibGUo
c291cmNlcyk7Ci19Ci0KLVJlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJPd3I6OlJlYWx0aW1lTWVk
aWFTb3VyY2VDZW50ZXJPd3IoKQotewotICAgIGluaXRpYWxpemVPcGVuV2ViUlRDKCk7Ci19Ci0K
LVJlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJPd3I6On5SZWFsdGltZU1lZGlhU291cmNlQ2VudGVy
T3dyKCkKLXsKLX0KLQotdm9pZCBSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyT3dyOjp2YWxpZGF0
ZVJlcXVlc3RDb25zdHJhaW50cyhWYWxpZENvbnN0cmFpbnRzSGFuZGxlciYmIHZhbGlkSGFuZGxl
ciwgSW52YWxpZENvbnN0cmFpbnRzSGFuZGxlciYmIGludmFsaWRIYW5kbGVyLCBjb25zdCBNZWRp
YUNvbnN0cmFpbnRzJiBhdWRpb0NvbnN0cmFpbnRzLCBjb25zdCBNZWRpYUNvbnN0cmFpbnRzJiB2
aWRlb0NvbnN0cmFpbnRzLCBTdHJpbmcmJiBkZXZpY2VJZGVudGlmaWVySGFzaFNhbHQpCi17Ci0g
ICAgbV92YWxpZENvbnN0cmFpbnRzSGFuZGxlciA9IFdURk1vdmUodmFsaWRIYW5kbGVyKTsKLSAg
ICBtX2ludmFsaWRDb25zdHJhaW50c0hhbmRsZXIgPSBXVEZNb3ZlKGludmFsaWRIYW5kbGVyKTsK
LQotICAgIFZlY3RvcjxTdHJpbmc+IGF1ZGlvU291cmNlczsKLSAgICBWZWN0b3I8U3RyaW5nPiB2
aWRlb1NvdXJjZXM7Ci0KLSAgICAvLyBGSVhNRTogQWN0dWFsbHkgZG8gY29uc3RyYWludHMgdmFs
aWRhdGlvbi4gVGhlIE1lZGlhQ29uc3RyYWludHMKLSAgICAvLyBuZWVkIHRvIGNvbXBseSB3aXRo
IHRoZSBhdmFpbGFibGUgYXVkaW8vdmlkZW8gZGV2aWNlKHMpCi0gICAgLy8gY2FwYWJpbGl0aWVz
LiBTZWUgYnVnICMxMjMzNDUuCi0gICAgaWYgKGF1ZGlvQ29uc3RyYWludHMuaXNWYWxpZCkKLSAg
ICAgICAgYXVkaW9Tb3VyY2VzLmFwcGVuZChTdHJpbmcoImF1ZGlvIikpOwotCi0gICAgaWYgKHZp
ZGVvQ29uc3RyYWludHMuaXNWYWxpZCkKLSAgICAgICAgdmlkZW9Tb3VyY2VzLmFwcGVuZChTdHJp
bmcoInZpZGVvIikpOwotCi0gICAgbV92YWxpZENvbnN0cmFpbnRzSGFuZGxlcihXVEZNb3ZlKGF1
ZGlvU291cmNlcyksIFdURk1vdmUodmlkZW9Tb3VyY2VzKSwgV1RGTW92ZShkZXZpY2VJZGVudGlm
aWVySGFzaFNhbHQpKTsKLSAgICBtX3ZhbGlkQ29uc3RyYWludHNIYW5kbGVyID0gbnVsbHB0cjsK
LSAgICBtX2ludmFsaWRDb25zdHJhaW50c0hhbmRsZXIgPSBudWxscHRyOwotfQotCi12b2lkIFJl
YWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJPd3I6OmNyZWF0ZU1lZGlhU3RyZWFtKE5ld01lZGlhU3Ry
ZWFtSGFuZGxlciYmIGNvbXBsZXRpb25IYW5kbGVyLCBjb25zdCBTdHJpbmcmIGF1ZGlvRGV2aWNl
SUQsIGNvbnN0IFN0cmluZyYgdmlkZW9EZXZpY2VJRCwgY29uc3QgTWVkaWFDb25zdHJhaW50cyos
IGNvbnN0IE1lZGlhQ29uc3RyYWludHMqKQotewotICAgIGludCB0eXBlcyA9IE9XUl9NRURJQV9U
WVBFX1VOS05PV047Ci0KLSAgICBpZiAoIWF1ZGlvRGV2aWNlSUQuaXNFbXB0eSgpKQotICAgICAg
ICB0eXBlcyB8PSBPV1JfTUVESUFfVFlQRV9BVURJTzsKLSAgICBpZiAoIXZpZGVvRGV2aWNlSUQu
aXNFbXB0eSgpKQotICAgICAgICB0eXBlcyB8PSBPV1JfTUVESUFfVFlQRV9WSURFTzsKLQotICAg
IG1fY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKTsKLQotICAg
IG93cl9nZXRfY2FwdHVyZV9zb3VyY2VzKHN0YXRpY19jYXN0PE93ck1lZGlhVHlwZT4odHlwZXMp
LCBtZWRpYVNvdXJjZXNBdmFpbGFibGVDYWxsYmFjaywgdGhpcyk7Ci19Ci0KLVZlY3RvcjxDYXB0
dXJlRGV2aWNlPiBSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyT3dyOjpnZXRNZWRpYVN0cmVhbURl
dmljZXMoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIFZlY3RvcjxDYXB0
dXJlRGV2aWNlPigpOwotfQotCi12b2lkIFJlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJPd3I6Om1l
ZGlhU291cmNlc0F2YWlsYWJsZShHTGlzdCogc291cmNlcykKLXsKLSAgICBWZWN0b3I8UmVmPFJl
YWx0aW1lTWVkaWFTb3VyY2U+PiBhdWRpb1NvdXJjZXM7Ci0gICAgVmVjdG9yPFJlZjxSZWFsdGlt
ZU1lZGlhU291cmNlPj4gdmlkZW9Tb3VyY2VzOwotCi0gICAgZm9yIChhdXRvIGl0ZW0gPSBzb3Vy
Y2VzOyBpdGVtOyBpdGVtID0gaXRlbS0+bmV4dCkgewotICAgICAgICBPd3JNZWRpYVNvdXJjZSog
c291cmNlID0gT1dSX01FRElBX1NPVVJDRShpdGVtLT5kYXRhKTsKLQotICAgICAgICBHVW5pcXVl
T3V0UHRyPGdjaGFyPiBuYW1lOwotICAgICAgICBPd3JNZWRpYVR5cGUgbWVkaWFUeXBlOwotICAg
ICAgICBnX29iamVjdF9nZXQoc291cmNlLCAibWVkaWEtdHlwZSIsICZtZWRpYVR5cGUsICJuYW1l
IiwgJm5hbWUub3V0UHRyKCksIE5VTEwpOwotICAgICAgICBTdHJpbmcgc291cmNlTmFtZShuYW1l
LmdldCgpKTsKLSAgICAgICAgU3RyaW5nIGlkKGNyZWF0ZUNhbm9uaWNhbFVVSURTdHJpbmcoKSk7
Ci0KLSAgICAgICAgaWYgKGdfZ2V0ZW52KCJPV1JfVVNFX1RFU1RfU09VUkNFUyIpKSB7Ci0gICAg
ICAgICAgICBPd3JTb3VyY2VUeXBlIHNvdXJjZVR5cGUgPSBPV1JfU09VUkNFX1RZUEVfVU5LTk9X
TjsKLSAgICAgICAgICAgIGdfb2JqZWN0X2dldChzb3VyY2UsICJ0eXBlIiwgJnNvdXJjZVR5cGUs
IE5VTEwpOwotICAgICAgICAgICAgaWYgKHNvdXJjZVR5cGUgIT0gT1dSX1NPVVJDRV9UWVBFX1RF
U1QpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICBSZWFs
dGltZU1lZGlhU291cmNlOjpUeXBlIG1lZGlhU291cmNlVHlwZTsKLSAgICAgICAgaWYgKG1lZGlh
VHlwZSAmIE9XUl9NRURJQV9UWVBFX0FVRElPKQotICAgICAgICAgICAgbWVkaWFTb3VyY2VUeXBl
ID0gUmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlwZTo6QXVkaW87Ci0gICAgICAgIGVsc2UgaWYgKG1l
ZGlhVHlwZSAmIE9XUl9NRURJQV9UWVBFX1ZJREVPKQotICAgICAgICAgICAgbWVkaWFTb3VyY2VU
eXBlID0gUmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlwZTo6VmlkZW87Ci0gICAgICAgIGVsc2Ugewot
ICAgICAgICAgICAgbWVkaWFTb3VyY2VUeXBlID0gUmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlwZTo6
Tm9uZTsKLSAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgUmVmUHRyPFJlYWx0aW1lTWVkaWFTb3VyY2VPd3I+IG1lZGlhU291cmNlOwotICAgICAg
ICBpZiAobWVkaWFTb3VyY2VUeXBlID09IFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGU6OkF1ZGlv
KQotICAgICAgICAgICAgbWVkaWFTb3VyY2UgPSBhZG9wdFJlZihuZXcgUmVhbHRpbWVBdWRpb1Nv
dXJjZU93cihzb3VyY2UsIGlkLCBtZWRpYVNvdXJjZVR5cGUsIHNvdXJjZU5hbWUpKTsKLSAgICAg
ICAgZWxzZQotICAgICAgICAgICAgbWVkaWFTb3VyY2UgPSBhZG9wdFJlZihuZXcgUmVhbHRpbWVW
aWRlb1NvdXJjZU93cihzb3VyY2UsIGlkLCBtZWRpYVNvdXJjZVR5cGUsIHNvdXJjZU5hbWUpKTsK
LQotICAgICAgICBSZWFsdGltZU1lZGlhU291cmNlT3dyTWFwOjppdGVyYXRvciBzb3VyY2VJdGVy
YXRvciA9IG1fc291cmNlTWFwLmZpbmQoaWQpOwotICAgICAgICBpZiAoc291cmNlSXRlcmF0b3Ig
PT0gbV9zb3VyY2VNYXAuZW5kKCkpCi0gICAgICAgICAgICBtX3NvdXJjZU1hcC5hZGQoaWQsIG1l
ZGlhU291cmNlLmNvcHlSZWYoKSk7Ci0KLSAgICAgICAgaWYgKG1lZGlhVHlwZSAmIE9XUl9NRURJ
QV9UWVBFX0FVRElPKQotICAgICAgICAgICAgYXVkaW9Tb3VyY2VzLmFwcGVuZChtZWRpYVNvdXJj
ZS5yZWxlYXNlTm9uTnVsbCgpKTsKLSAgICAgICAgZWxzZSBpZiAobWVkaWFUeXBlICYgT1dSX01F
RElBX1RZUEVfVklERU8pCi0gICAgICAgICAgICB2aWRlb1NvdXJjZXMuYXBwZW5kKG1lZGlhU291
cmNlLnJlbGVhc2VOb25OdWxsKCkpOwotCi0gICAgfQotCi0gICAgaWYgKHZpZGVvU291cmNlcy5p
c0VtcHR5KCkgJiYgYXVkaW9Tb3VyY2VzLmlzRW1wdHkoKSkKLSAgICAgICAgbV9jb21wbGV0aW9u
SGFuZGxlcihudWxscHRyKTsKLSAgICBlbHNlCi0gICAgICAgIG1fY29tcGxldGlvbkhhbmRsZXIo
TWVkaWFTdHJlYW1Qcml2YXRlOjpjcmVhdGUoYXVkaW9Tb3VyY2VzLCB2aWRlb1NvdXJjZXMpKTsK
LQotfQotCi1SZWFsdGltZU1lZGlhU291cmNlKiBSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyT3dy
OjpmaXJzdFNvdXJjZShSZWFsdGltZU1lZGlhU291cmNlOjpUeXBlIHR5cGUpCi17Ci0gICAgZm9y
IChhdXRvIGl0ZXIgPSBtX3NvdXJjZU1hcC5iZWdpbigpOyBpdGVyICE9IG1fc291cmNlTWFwLmVu
ZCgpOyArK2l0ZXIpIHsKLSAgICAgICAgUmVmUHRyPFJlYWx0aW1lTWVkaWFTb3VyY2U+IHNvdXJj
ZSA9IGl0ZXItPnZhbHVlOwotICAgICAgICBpZiAoc291cmNlLT50eXBlKCkgPT0gdHlwZSkKLSAg
ICAgICAgICAgIHJldHVybiBzb3VyY2UuZ2V0KCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIG51bGxw
dHI7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShNRURJ
QV9TVFJFQU0pICYmIFVTRShPUEVOV0VCUlRDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWVkaWFzdHJlYW0vb3BlbndlYnJ0Yy9SZWFsdGltZU1lZGlhU291cmNlQ2VudGVy
T3dyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9vcGVud2VicnRjL1Jl
YWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJPd3IuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggNjgwZDkxODIxMzAzODJmNDMwMmYxMjc4ZGFiYmZhMjQ4MmEzMzUzMC4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tZWRpYXN0cmVhbS9vcGVud2VicnRjL1JlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJPd3IuaAor
KysgL2Rldi9udWxsCkBAIC0xLDEwMSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEx
IEVyaWNzc29uIEFCLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEy
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUg
SWdhbGlhIFMuTC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNSBN
ZXRyb2xvZ2ljYWwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIKLSAqICAgIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqICAgIGRpc3RyaWJ1dGlvbi4KLSAq
IDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgRXJpY3Nzb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29u
dHJpYnV0b3JzCi0gKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tIHRoaXMKLSAqICAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0g
KiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBF
TkFCTEUoTUVESUFfU1RSRUFNKSAmJiBVU0UoT1BFTldFQlJUQykKLQotI2luY2x1ZGUgIkNhcHR1
cmVEZXZpY2VNYW5hZ2VyLmgiCi0jaW5jbHVkZSAiUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlci5o
IgotI2luY2x1ZGUgIlJlYWx0aW1lTWVkaWFTb3VyY2VPd3IuaCIKLSNpbmNsdWRlIDx3dGYvUmVm
UHRyLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgQ2FwdHVyZURldmljZTsKLWNs
YXNzIE1lZGlhU3RyZWFtUHJpdmF0ZTsKLWNsYXNzIFJlYWx0aW1lTWVkaWFTb3VyY2U7Ci1jbGFz
cyBNZWRpYVN0cmVhbVNvdXJjZXNRdWVyeUNsaWVudDsKLWNsYXNzIFRyYWNrU291cmNlSW5mbzsK
LQotY2xhc3MgUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlck93ciBmaW5hbCA6IHB1YmxpYyBSZWFs
dGltZU1lZGlhU291cmNlQ2VudGVyIHsKLXB1YmxpYzoKLSAgICBSZWFsdGltZU1lZGlhU291cmNl
Q2VudGVyT3dyKCk7Ci0gICAgflJlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJPd3IoKTsKLQotICAg
IHZvaWQgdmFsaWRhdGVSZXF1ZXN0Q29uc3RyYWludHMoVmFsaWRDb25zdHJhaW50c0hhbmRsZXIm
JiB2YWxpZEhhbmRsZXIsIEludmFsaWRDb25zdHJhaW50c0hhbmRsZXImJiBpbnZhbGlkSGFuZGxl
ciwgY29uc3QgTWVkaWFDb25zdHJhaW50cyYgYXVkaW9Db25zdHJhaW50cywgY29uc3QgTWVkaWFD
b25zdHJhaW50cyYgdmlkZW9Db25zdHJhaW50cywgU3RyaW5nJiYpIGZpbmFsOwotCi0gICAgdm9p
ZCBjcmVhdGVNZWRpYVN0cmVhbShOZXdNZWRpYVN0cmVhbUhhbmRsZXImJiwgY29uc3QgU3RyaW5n
JiBhdWRpb0RldmljZUlELCBjb25zdCBTdHJpbmcmIHZpZGVvRGV2aWNlSUQsIGNvbnN0IE1lZGlh
Q29uc3RyYWludHMqIHZpZGVvQ29uc3RyYWludHMsIGNvbnN0IE1lZGlhQ29uc3RyYWludHMqIGF1
ZGlvQ29uc3RyYWludHMpIGZpbmFsOwotCi0gICAgVmVjdG9yPENhcHR1cmVEZXZpY2U+IGdldE1l
ZGlhU3RyZWFtRGV2aWNlcygpIGZpbmFsOwotCi0gICAgdm9pZCBtZWRpYVNvdXJjZXNBdmFpbGFi
bGUoR0xpc3QqIHNvdXJjZXMpOwotCi1wcml2YXRlOgotICAgIFJlYWx0aW1lTWVkaWFTb3VyY2U6
OkF1ZGlvQ2FwdHVyZUZhY3RvcnkmIGRlZmF1bHRBdWRpb0ZhY3RvcnkoKSBmaW5hbCB7IHJldHVy
biBtX2RlZmF1bHRBdWRpb0ZhY3Rvcnk7IH0KLSAgICBSZWFsdGltZU1lZGlhU291cmNlOjpWaWRl
b0NhcHR1cmVGYWN0b3J5JiBkZWZhdWx0VmlkZW9GYWN0b3J5KCkgZmluYWwgeyByZXR1cm4gbV9k
ZWZhdWx0VmlkZW9GYWN0b3J5OyB9Ci0gICAgQ2FwdHVyZURldmljZU1hbmFnZXImIGRlZmF1bHRB
dWRpb0NhcHR1cmVEZXZpY2VNYW5hZ2VyKCkgZmluYWwgeyByZXR1cm4gbV9kZWZhdWx0QXVkaW9D
YXB0dXJlRGV2aWNlTWFuYWdlcjsgfQotICAgIENhcHR1cmVEZXZpY2VNYW5hZ2VyJiBkZWZhdWx0
VmlkZW9DYXB0dXJlRGV2aWNlTWFuYWdlcigpIGZpbmFsIHsgcmV0dXJuIG1fZGVmYXVsdFZpZGVv
Q2FwdHVyZURldmljZU1hbmFnZXI7IH0KLQotICAgIFJlYWx0aW1lTWVkaWFTb3VyY2UqIGZpcnN0
U291cmNlKFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGUpOwotICAgIFJlYWx0aW1lTWVkaWFTb3Vy
Y2VPd3JNYXAgbV9zb3VyY2VNYXA7Ci0gICAgVmFsaWRDb25zdHJhaW50c0hhbmRsZXIgbV92YWxp
ZENvbnN0cmFpbnRzSGFuZGxlcjsKLSAgICBJbnZhbGlkQ29uc3RyYWludHNIYW5kbGVyIG1faW52
YWxpZENvbnN0cmFpbnRzSGFuZGxlcjsKLSAgICBOZXdNZWRpYVN0cmVhbUhhbmRsZXIgbV9jb21w
bGV0aW9uSGFuZGxlcjsKLQotICAgIGNsYXNzIEF1ZGlvQ2FwdHVyZUZhY3RvcnlPd3IgOiBwdWJs
aWMgUmVhbHRpbWVNZWRpYVNvdXJjZTo6QXVkaW9DYXB0dXJlRmFjdG9yeSB7Ci0gICAgcHJpdmF0
ZToKLSAgICAgICAgQ2FwdHVyZVNvdXJjZU9yRXJyb3IgY3JlYXRlQXVkaW9DYXB0dXJlU291cmNl
KGNvbnN0IFN0cmluZyYsIGNvbnN0IE1lZGlhQ29uc3RyYWludHMqKSBmaW5hbCB7IHJldHVybiB7
IH07IH0KLSAgICB9OwotCi0gICAgY2xhc3MgVmlkZW9DYXB0dXJlRmFjdG9yeU93ciA6IHB1Ymxp
YyBSZWFsdGltZU1lZGlhU291cmNlOjpWaWRlb0NhcHR1cmVGYWN0b3J5IHsKLSAgICBwcml2YXRl
OgotICAgICAgICBDYXB0dXJlU291cmNlT3JFcnJvciBjcmVhdGVWaWRlb0NhcHR1cmVTb3VyY2Uo
Y29uc3QgU3RyaW5nJiwgY29uc3QgTWVkaWFDb25zdHJhaW50cyopIGZpbmFsIHsgcmV0dXJuIHsg
fTsgfQotICAgIH07Ci0KLSAgICBjbGFzcyBDYXB0dXJlRGV2aWNlTWFuYWdlck93ciA6IHB1Ymxp
YyBDYXB0dXJlRGV2aWNlTWFuYWdlciB7Ci0gICAgcHJpdmF0ZToKLSAgICAgICAgVmVjdG9yPENh
cHR1cmVEZXZpY2U+JiBjYXB0dXJlRGV2aWNlcygpIGZpbmFsIHsgcmV0dXJuIG1fZGV2aWNlczsg
fQotCi0gICAgICAgIFZlY3RvcjxDYXB0dXJlRGV2aWNlPiBtX2RldmljZXM7Ci0gICAgfTsKLQot
ICAgIEF1ZGlvQ2FwdHVyZUZhY3RvcnlPd3IgbV9kZWZhdWx0QXVkaW9GYWN0b3J5OwotICAgIFZp
ZGVvQ2FwdHVyZUZhY3RvcnlPd3IgbV9kZWZhdWx0VmlkZW9GYWN0b3J5OwotICAgIENhcHR1cmVE
ZXZpY2VNYW5hZ2VyT3dyIG1fZGVmYXVsdEF1ZGlvQ2FwdHVyZURldmljZU1hbmFnZXI7Ci0gICAg
Q2FwdHVyZURldmljZU1hbmFnZXJPd3IgbV9kZWZhdWx0VmlkZW9DYXB0dXJlRGV2aWNlTWFuYWdl
cjsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShNRURJ
QV9TVFJFQU0pICYmIFVTRShPUEVOV0VCUlRDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWVkaWFzdHJlYW0vb3BlbndlYnJ0Yy9SZWFsdGltZU1lZGlhU291cmNlT3dyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL29wZW53ZWJydGMvUmVhbHRp
bWVNZWRpYVNvdXJjZU93ci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVlNzQ5
OWQzODAwNjZmMTRhYjZjOWNiMDA4N2JlNGI2ZGQwODc4NWYuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFz
dHJlYW0vb3BlbndlYnJ0Yy9SZWFsdGltZU1lZGlhU291cmNlT3dyLmNwcAorKysgL2Rldi9udWxs
CkBAIC0xLDYwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgSWdhbGlhIFMuTAot
ICoKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiAzLiBOZWl0aGVyIHRo
ZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICog
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBF
TkFCTEUoTUVESUFfU1RSRUFNKSAmJiBVU0UoT1BFTldFQlJUQykKLSNpbmNsdWRlICJSZWFsdGlt
ZU1lZGlhU291cmNlT3dyLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY29uc3QgUmVhbHRp
bWVNZWRpYVNvdXJjZVNldHRpbmdzJiBSZWFsdGltZU1lZGlhU291cmNlT3dyOjpzZXR0aW5ncygp
IGNvbnN0Ci17Ci0gICAgY29uc3RfY2FzdDxSZWFsdGltZU1lZGlhU291cmNlT3dyJj4oKnRoaXMp
LmluaXRpYWxpemVTZXR0aW5ncygpOwotICAgIHJldHVybiBtX2N1cnJlbnRTZXR0aW5nczsKLX0K
LQotUmVhbHRpbWVNZWRpYVNvdXJjZVN1cHBvcnRlZENvbnN0cmFpbnRzJiBSZWFsdGltZU1lZGlh
U291cmNlT3dyOjpzdXBwb3J0ZWRDb25zdHJhaW50cygpCi17Ci0gICAgaWYgKG1fc3VwcG9ydGVk
Q29uc3RyYWludHMuc3VwcG9ydHNEZXZpY2VJZCgpKQotICAgICAgICByZXR1cm4gbV9zdXBwb3J0
ZWRDb25zdHJhaW50czsKLQotICAgIG1fc3VwcG9ydGVkQ29uc3RyYWludHMuc2V0U3VwcG9ydHNE
ZXZpY2VJZCh0cnVlKTsKLSAgICBpbml0aWFsaXplU3VwcG9ydGVkQ29uc3RyYWludHMobV9zdXBw
b3J0ZWRDb25zdHJhaW50cyk7Ci0KLSAgICByZXR1cm4gbV9zdXBwb3J0ZWRDb25zdHJhaW50czsK
LX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NU
UkVBTSkgJiYgVVNFKE9QRU5XRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tZWRpYXN0cmVhbS9vcGVud2VicnRjL1JlYWx0aW1lTWVkaWFTb3VyY2VPd3IuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL29wZW53ZWJydGMvUmVhbHRpbWVNZWRp
YVNvdXJjZU93ci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3Y2ZiZjc4ZjI1OGQ5
MDhhNTQ0Yjk5YjFlYzk4Mjg0YjUzM2U0YTg0Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL29w
ZW53ZWJydGMvUmVhbHRpbWVNZWRpYVNvdXJjZU93ci5oCisrKyAvZGV2L251bGwKQEAgLTEsOTkg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBJZ2FsaWEgUy5MCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTUgTWV0cm9sb2dpY2FsCi0gKgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICoKLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIg
bm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBIT0xE
RVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQot
ICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNp
Zm5kZWYgUmVhbHRpbWVNZWRpYVNvdXJjZU93cl9oCi0jZGVmaW5lIFJlYWx0aW1lTWVkaWFTb3Vy
Y2VPd3JfaAotCi0jaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkgJiYgVVNFKE9QRU5XRUJSVEMpCi0K
LSNpbmNsdWRlICJHUmVmUHRyR1N0cmVhbWVyLmgiCi0jaW5jbHVkZSAiUmVhbHRpbWVNZWRpYVNv
dXJjZS5oIgotI2luY2x1ZGUgPG93ci9vd3JfbWVkaWFfc291cmNlLmg+Ci0jaW5jbHVkZSA8d3Rm
L0hhc2hNYXAuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQv
V1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgUmVhbHRpbWVNZWRp
YVNvdXJjZUNhcGFiaWxpdGllczsKLQotY2xhc3MgUmVhbHRpbWVNZWRpYVNvdXJjZU93ciA6IHB1
YmxpYyBSZWFsdGltZU1lZGlhU291cmNlIHsKLXB1YmxpYzoKLVJlYWx0aW1lTWVkaWFTb3VyY2VP
d3IoT3dyTWVkaWFTb3VyY2UqIG1lZGlhU291cmNlLCBjb25zdCBTdHJpbmcmIGlkLCBSZWFsdGlt
ZU1lZGlhU291cmNlOjpUeXBlIHR5cGUsIGNvbnN0IFN0cmluZyYgbmFtZSkKLSAgICA6IFJlYWx0
aW1lTWVkaWFTb3VyY2UoaWQsIHR5cGUsIG5hbWUpCi0gICAgLCBtX21lZGlhU291cmNlKG1lZGlh
U291cmNlKQotICAgIHsKLSAgICAgICAgaWYgKCFtZWRpYVNvdXJjZSkKLSAgICAgICAgICAgIG5v
dGlmeU11dGVkQ2hhbmdlKHRydWUpOwotICAgIH0KLQotUmVhbHRpbWVNZWRpYVNvdXJjZU93cihj
b25zdCBTdHJpbmcmIGlkLCBSZWFsdGltZU1lZGlhU291cmNlOjpUeXBlIHR5cGUsIGNvbnN0IFN0
cmluZyYgbmFtZSkKLSAgICA6IFJlYWx0aW1lTWVkaWFTb3VyY2UoaWQsIHR5cGUsIG5hbWUpCi0g
ICAgLCBtX21lZGlhU291cmNlKG51bGxwdHIpCi0gICAgewotICAgIH0KLQotICAgIHZpcnR1YWwg
flJlYWx0aW1lTWVkaWFTb3VyY2VPd3IoKSB7IH0KLQotICAgIHZvaWQgc3dhcE91dFNoYWxsb3dT
b3VyY2UoT3dyTWVkaWFTb3VyY2UmIHJlYWxTb3VyY2UpCi0gICAgewotICAgICAgICBtX21lZGlh
U291cmNlID0gJnJlYWxTb3VyY2U7Ci0gICAgICAgIHNldE11dGVkKGZhbHNlKTsKLSAgICB9Ci0K
LSAgICBjb25zdCBSZWFsdGltZU1lZGlhU291cmNlQ2FwYWJpbGl0aWVzJiBjYXBhYmlsaXRpZXMo
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX2NhcGFiaWxpdGllczsgfQotICAgIGNvbnN0IFJl
YWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5ncyYgc2V0dGluZ3MoKSBjb25zdCBvdmVycmlkZTsKLQot
ICAgIE93ck1lZGlhU291cmNlKiBtZWRpYVNvdXJjZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWVkaWFT
b3VyY2U7IH0KLQotcHJvdGVjdGVkOgotICAgIHZpcnR1YWwgdm9pZCBpbml0aWFsaXplU2V0dGlu
Z3MoKSB7IH07Ci0gICAgdmlydHVhbCB2b2lkIGluaXRpYWxpemVTdXBwb3J0ZWRDb25zdHJhaW50
cyhSZWFsdGltZU1lZGlhU291cmNlU3VwcG9ydGVkQ29uc3RyYWludHMmKSB7IH07Ci0gICAgUmVh
bHRpbWVNZWRpYVNvdXJjZVN1cHBvcnRlZENvbnN0cmFpbnRzJiBzdXBwb3J0ZWRDb25zdHJhaW50
cygpOwotCi0gICAgUmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzIG1fY3VycmVudFNldHRpbmdz
OwotCi1wcml2YXRlOgotICAgIFJlYWx0aW1lTWVkaWFTb3VyY2VTdXBwb3J0ZWRDb25zdHJhaW50
cyBtX3N1cHBvcnRlZENvbnN0cmFpbnRzOwotICAgIFJlYWx0aW1lTWVkaWFTb3VyY2VDYXBhYmls
aXRpZXMgbV9jYXBhYmlsaXRpZXM7Ci0gICAgT3dyTWVkaWFTb3VyY2UqIG1fbWVkaWFTb3VyY2U7
Ci19OwotCi10eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBSZWZQdHI8UmVhbHRpbWVNZWRpYVNvdXJj
ZU93cj4+IFJlYWx0aW1lTWVkaWFTb3VyY2VPd3JNYXA7Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKLQotI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0pICYmIFVTRShPUEVOV0VCUlRDKQot
Ci0jZW5kaWYgLy8gUmVhbHRpbWVNZWRpYVNvdXJjZU93cl9oCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9vcGVud2VicnRjL1JlYWx0aW1lVmlkZW9Tb3Vy
Y2VPd3IuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL29wZW53ZWJydGMv
UmVhbHRpbWVWaWRlb1NvdXJjZU93ci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0
MThlZjg0YTcxYTU3MzQ3ZTg1ZDM1MjgzNjllMjc5YzdhNjZmNDU0Li4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21l
ZGlhc3RyZWFtL29wZW53ZWJydGMvUmVhbHRpbWVWaWRlb1NvdXJjZU93ci5oCisrKyAvZGV2L251
bGwKQEAgLTEsODIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSwyMDE2IElnYWxp
YSBTLkwKLSAqIENvcHlyaWdodCAoQykgMjAxNSBNZXRyb2xvZ2ljYWwKLSAqCi0gKiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0
OgotICoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUg
Y29weXJpZ2h0IGhvbGRlciBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAq
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQKLSAqIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAot
ICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKSAm
JiBVU0UoT1BFTldFQlJUQykKLQotI2luY2x1ZGUgIlJlYWx0aW1lTWVkaWFTb3VyY2VPd3IuaCIK
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBSZWFsdGltZVZpZGVvU291cmNlT3dyIDog
cHVibGljIFJlYWx0aW1lTWVkaWFTb3VyY2VPd3IgewotcHVibGljOgotUmVhbHRpbWVWaWRlb1Nv
dXJjZU93cihPd3JNZWRpYVNvdXJjZSogbWVkaWFTb3VyY2UsIGNvbnN0IFN0cmluZyYgaWQsIFJl
YWx0aW1lTWVkaWFTb3VyY2U6OlR5cGUgdHlwZSwgY29uc3QgU3RyaW5nJiBuYW1lKQotICAgIDog
UmVhbHRpbWVNZWRpYVNvdXJjZU93cihtZWRpYVNvdXJjZSwgaWQsIHR5cGUsIG5hbWUpCi0gICAg
ewotICAgIH0KLQotUmVhbHRpbWVWaWRlb1NvdXJjZU93cihjb25zdCBTdHJpbmcmIGlkLCBSZWFs
dGltZU1lZGlhU291cmNlOjpUeXBlIHR5cGUsIGNvbnN0IFN0cmluZyYgbmFtZSkKLSAgICA6IFJl
YWx0aW1lTWVkaWFTb3VyY2VPd3IoaWQsIHR5cGUsIG5hbWUpCi0gICAgewotICAgIH0KLQotICAg
IHZpcnR1YWwgflJlYWx0aW1lVmlkZW9Tb3VyY2VPd3IoKSB7IH0KLQotICAgIGJvb2wgYXBwbHlT
aXplKGNvbnN0IEludFNpemUmKSBmaW5hbCB7IHJldHVybiB0cnVlOyB9Ci0KLXByb3RlY3RlZDoK
LSAgICB2b2lkIGluaXRpYWxpemVTZXR0aW5ncygpIGZpbmFsIHsKLSAgICAgICAgaWYgKG1fY3Vy
cmVudFNldHRpbmdzLmRldmljZUlkKCkuaXNFbXB0eSgpKQotICAgICAgICAgICAgbV9jdXJyZW50
U2V0dGluZ3Muc2V0U3VwcG9ydGVkQ29uc3RyYWludHMoc3VwcG9ydGVkQ29uc3RyYWludHMoKSk7
Ci0KLSAgICAgICAgbV9jdXJyZW50U2V0dGluZ3Muc2V0RGV2aWNlSWQoaWQoKSk7Ci0KLSAgICAg
ICAgbV9jdXJyZW50U2V0dGluZ3Muc2V0RnJhbWVSYXRlKGZyYW1lUmF0ZSgpKTsKLSAgICAgICAg
bV9jdXJyZW50U2V0dGluZ3Muc2V0V2lkdGgoc2l6ZSgpLndpZHRoKCkpOwotICAgICAgICBtX2N1
cnJlbnRTZXR0aW5ncy5zZXRIZWlnaHQoc2l6ZSgpLmhlaWdodCgpKTsKLSAgICB9Ci0KLSAgICB2
b2lkIGluaXRpYWxpemVTdXBwb3J0ZWRDb25zdHJhaW50cyhSZWFsdGltZU1lZGlhU291cmNlU3Vw
cG9ydGVkQ29uc3RyYWludHMmIHN1cHBvcnRlZENvbnN0cmFpbnRzKSBmaW5hbCB7Ci0gICAgICAg
IHN1cHBvcnRlZENvbnN0cmFpbnRzLnNldFN1cHBvcnRzRmFjaW5nTW9kZShSZWFsdGltZU1lZGlh
U291cmNlU2V0dGluZ3M6OlVua25vd24pOwotICAgICAgICBzdXBwb3J0ZWRDb25zdHJhaW50cy5z
ZXRTdXBwb3J0c1dpZHRoKHRydWUpOwotICAgICAgICBzdXBwb3J0ZWRDb25zdHJhaW50cy5zZXRT
dXBwb3J0c0hlaWdodCh0cnVlKTsKLSAgICAgICAgc3VwcG9ydGVkQ29uc3RyYWludHMuc2V0U3Vw
cG9ydHNBc3BlY3RSYXRpbyh0cnVlKTsKLSAgICAgICAgc3VwcG9ydGVkQ29uc3RyYWludHMuc2V0
U3VwcG9ydHNGcmFtZVJhdGUodHJ1ZSk7Ci0gICAgfQotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVBTSkgJiYgVVNFKE9QRU5XRUJSVEMp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL01vY2tNZWRpYUVuZHBv
aW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svTW9ja01lZGlhRW5kcG9pbnQu
Y3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZTliNDFlNWMxMTk1YzZlM2VjMTM3
MDc1ZWE0ZmZhNjY4NmM3YWFmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svTW9ja01lZGlhRW5kcG9pbnQu
Y3BwCisrKyAvZGV2L251bGwKQEAgLTEsMzQ2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTUgRXJpY3Nzb24gQUIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiAgICBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiAgICBkaXN0cmlidXRpb24u
Ci0gKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIEVyaWNzc29uIG5vciB0aGUgbmFtZXMgb2YgaXRz
IGNvbnRyaWJ1dG9ycwotICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0gKiAgICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcu
aCIKLQotI2lmIEVOQUJMRShXRUJfUlRDKQotI2luY2x1ZGUgIk1vY2tNZWRpYUVuZHBvaW50Lmgi
Ci0KLSNpbmNsdWRlICJNZWRpYUVuZHBvaW50U2Vzc2lvbkNvbmZpZ3VyYXRpb24uaCIKLSNpbmNs
dWRlICJNZWRpYVBheWxvYWQuaCIKLSNpbmNsdWRlICJNb2NrUmVhbHRpbWVBdWRpb1NvdXJjZS5o
IgotI2luY2x1ZGUgIk1vY2tSZWFsdGltZVZpZGVvU291cmNlLmgiCi0jaW5jbHVkZSAiUlRDRGF0
YUNoYW5uZWxIYW5kbGVyTW9jay5oIgotI2luY2x1ZGUgIlJlYWx0aW1lTWVkaWFTb3VyY2UuaCIK
LSNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0
YXRpYyBjb25zdCBjaGFyKiBmaW5nZXJwcmludCA9ICI4Qjo4NzowOTo4QTo1RDpDMjpGMzozMzpF
RjpDNTpCMTpGNjo4NDozQTozRDpENjpBMzpFMjo5QzoxNzo0QzpFNzo0NjozQjoxQjpDRTo4NDo5
ODpERDo4RTpBRjo3QiI7Ci1zdGF0aWMgY29uc3QgY2hhciogZmluZ2VycHJpbnRGdW5jdGlvbiA9
ICJzaGEtMjU2IjsKLQotc3RkOjp1bmlxdWVfcHRyPE1lZGlhRW5kcG9pbnQ+IE1vY2tNZWRpYUVu
ZHBvaW50OjpjcmVhdGUoTWVkaWFFbmRwb2ludENsaWVudCYgY2xpZW50KQotewotICAgIHJldHVy
biBzdGQ6OnVuaXF1ZV9wdHI8TWVkaWFFbmRwb2ludD4obmV3IE1vY2tNZWRpYUVuZHBvaW50KGNs
aWVudCkpOwotfQotCi1Nb2NrTWVkaWFFbmRwb2ludDo6TW9ja01lZGlhRW5kcG9pbnQoTWVkaWFF
bmRwb2ludENsaWVudCYgY2xpZW50KQotICAgIDogbV9jbGllbnQoY2xpZW50KQotICAgICwgbV9p
Y2VDYW5kaWRhdGVUaW1lcigqdGhpcywgJk1vY2tNZWRpYUVuZHBvaW50OjppY2VDYW5kaWRhdGVU
aW1lckZpcmVkKQotICAgICwgbV9pY2VUcmFuc3BvcnRUaW1lcigqdGhpcywgJk1vY2tNZWRpYUVu
ZHBvaW50OjppY2VUcmFuc3BvcnRUaW1lckZpcmVkKQotICAgICwgbV91bm11dGVUaW1lcigqdGhp
cywgJk1vY2tNZWRpYUVuZHBvaW50Ojp1bm11dGVUaW1lckZpcmVkKQotewotfQotCi1Nb2NrTWVk
aWFFbmRwb2ludDo6fk1vY2tNZWRpYUVuZHBvaW50KCkKLXsKLSAgICBzdG9wKCk7Ci19Ci0KLXN0
ZDo6dW5pcXVlX3B0cjxSVENEYXRhQ2hhbm5lbEhhbmRsZXI+IE1vY2tNZWRpYUVuZHBvaW50Ojpj
cmVhdGVEYXRhQ2hhbm5lbEhhbmRsZXIoY29uc3QgU3RyaW5nJiBsYWJlbCwgY29uc3QgUlRDRGF0
YUNoYW5uZWxJbml0JiBvcHRpb25zKQotewotICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPFJU
Q0RhdGFDaGFubmVsSGFuZGxlck1vY2s+KGxhYmVsLCBvcHRpb25zKTsKLX0KLQotdm9pZCBNb2Nr
TWVkaWFFbmRwb2ludDo6Z2VuZXJhdGVEdGxzSW5mbygpCi17Ci0gICAgYXV0byB3ZWFrVGhpcyA9
IG1fd2Vha1B0ckZhY3RvcnkuY3JlYXRlV2Vha1B0cigqdGhpcyk7Ci0KLSAgICBjYWxsT25NYWlu
VGhyZWFkKFt3ZWFrVGhpc10gewotICAgICAgICBpZiAod2Vha1RoaXMpCi0gICAgICAgICAgICB3
ZWFrVGhpcy0+bV9jbGllbnQuZ290RHRsc0ZpbmdlcnByaW50KGZpbmdlcnByaW50LCBmaW5nZXJw
cmludEZ1bmN0aW9uKTsKLSAgICB9KTsKLX0KLQotTWVkaWFQYXlsb2FkVmVjdG9yIE1vY2tNZWRp
YUVuZHBvaW50OjpnZXREZWZhdWx0QXVkaW9QYXlsb2FkcygpCi17Ci0gICAgTWVkaWFQYXlsb2Fk
VmVjdG9yIHBheWxvYWRzOwotCi0gICAgTWVkaWFQYXlsb2FkIHBheWxvYWQxOwotICAgIHBheWxv
YWQxLnR5cGUgPSAxMTE7Ci0gICAgcGF5bG9hZDEuZW5jb2RpbmdOYW1lID0gIk9QVVMiOwotICAg
IHBheWxvYWQxLmNsb2NrUmF0ZSA9IDQ4MDAwOwotICAgIHBheWxvYWQxLmNoYW5uZWxzID0gMjsK
LSAgICBwYXlsb2Fkcy5hcHBlbmQoV1RGTW92ZShwYXlsb2FkMSkpOwotCi0gICAgTWVkaWFQYXls
b2FkIHBheWxvYWQyOwotICAgIHBheWxvYWQyLnR5cGUgPSA4OwotICAgIHBheWxvYWQyLmVuY29k
aW5nTmFtZSA9ICJQQ01BIjsKLSAgICBwYXlsb2FkMi5jbG9ja1JhdGUgPSA4MDAwOwotICAgIHBh
eWxvYWQyLmNoYW5uZWxzID0gMTsKLSAgICBwYXlsb2Fkcy5hcHBlbmQoV1RGTW92ZShwYXlsb2Fk
MikpOwotCi0gICAgTWVkaWFQYXlsb2FkIHBheWxvYWQzOwotICAgIHBheWxvYWQzLnR5cGUgPSAw
OwotICAgIHBheWxvYWQzLmVuY29kaW5nTmFtZSA9ICJQQ01VIjsKLSAgICBwYXlsb2FkMy5jbG9j
a1JhdGUgPSA4MDAwOwotICAgIHBheWxvYWQzLmNoYW5uZWxzID0gMTsKLSAgICBwYXlsb2Fkcy5h
cHBlbmQoV1RGTW92ZShwYXlsb2FkMykpOwotCi0gICAgcmV0dXJuIHBheWxvYWRzOwotfQotCi1N
ZWRpYVBheWxvYWRWZWN0b3IgTW9ja01lZGlhRW5kcG9pbnQ6OmdldERlZmF1bHRWaWRlb1BheWxv
YWRzKCkKLXsKLSAgICBNZWRpYVBheWxvYWRWZWN0b3IgcGF5bG9hZHM7Ci0KLSAgICBNZWRpYVBh
eWxvYWQgcGF5bG9hZDE7Ci0gICAgcGF5bG9hZDEudHlwZSA9IDEwMzsKLSAgICBwYXlsb2FkMS5l
bmNvZGluZ05hbWUgPSAiSDI2NCI7Ci0gICAgcGF5bG9hZDEuY2xvY2tSYXRlID0gOTAwMDA7Ci0g
ICAgcGF5bG9hZDEuY2NtZmlyID0gdHJ1ZTsKLSAgICBwYXlsb2FkMS5uYWNrcGxpID0gdHJ1ZTsK
LSAgICBwYXlsb2FkMS5hZGRQYXJhbWV0ZXIoInBhY2tldGl6YXRpb25Nb2RlIiwgMSk7Ci0gICAg
cGF5bG9hZHMuYXBwZW5kKFdURk1vdmUocGF5bG9hZDEpKTsKLQotICAgIE1lZGlhUGF5bG9hZCBw
YXlsb2FkMjsKLSAgICBwYXlsb2FkMi50eXBlID0gMTAwOwotICAgIHBheWxvYWQyLmVuY29kaW5n
TmFtZSA9ICJWUDgiOwotICAgIHBheWxvYWQyLmNsb2NrUmF0ZSA9IDkwMDAwOwotICAgIHBheWxv
YWQyLmNjbWZpciA9IHRydWU7Ci0gICAgcGF5bG9hZDIubmFja3BsaSA9IHRydWU7Ci0gICAgcGF5
bG9hZDIubmFjayA9IHRydWU7Ci0gICAgcGF5bG9hZHMuYXBwZW5kKFdURk1vdmUocGF5bG9hZDIp
KTsKLQotICAgIE1lZGlhUGF5bG9hZCBwYXlsb2FkMzsKLSAgICBwYXlsb2FkMy50eXBlID0gMTIw
OwotICAgIHBheWxvYWQzLmVuY29kaW5nTmFtZSA9ICJSVFgiOwotICAgIHBheWxvYWQzLmNsb2Nr
UmF0ZSA9IDkwMDAwOwotICAgIHBheWxvYWQzLmFkZFBhcmFtZXRlcigiYXB0IiwgMTAwKTsKLSAg
ICBwYXlsb2FkMy5hZGRQYXJhbWV0ZXIoInJ0eFRpbWUiLCAyMDApOwotICAgIHBheWxvYWRzLmFw
cGVuZChXVEZNb3ZlKHBheWxvYWQzKSk7Ci0KLSAgICByZXR1cm4gcGF5bG9hZHM7Ci19Ci0KLU1l
ZGlhUGF5bG9hZFZlY3RvciBNb2NrTWVkaWFFbmRwb2ludDo6ZmlsdGVyUGF5bG9hZHMoY29uc3Qg
TWVkaWFQYXlsb2FkVmVjdG9yJiByZW1vdGVQYXlsb2FkcywgY29uc3QgTWVkaWFQYXlsb2FkVmVj
dG9yJiBkZWZhdWx0UGF5bG9hZHMpCi17Ci0gICAgTWVkaWFQYXlsb2FkVmVjdG9yIGZpbHRlcmVk
UGF5bG9hZHM7Ci0KLSAgICBmb3IgKGF1dG8mIHJlbW90ZVBheWxvYWQgOiByZW1vdGVQYXlsb2Fk
cykgewotICAgICAgICBjb25zdCBNZWRpYVBheWxvYWQqIGRlZmF1bHRQYXlsb2FkID0gbnVsbHB0
cjsKLSAgICAgICAgZm9yIChhdXRvJiBwYXlsb2FkIDogZGVmYXVsdFBheWxvYWRzKSB7Ci0gICAg
ICAgICAgICBpZiAocGF5bG9hZC5lbmNvZGluZ05hbWUgPT0gcmVtb3RlUGF5bG9hZC5lbmNvZGlu
Z05hbWUuY29udmVydFRvQVNDSUlVcHBlcmNhc2UoKSkgewotICAgICAgICAgICAgICAgIGRlZmF1
bHRQYXlsb2FkID0gJnBheWxvYWQ7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCFkZWZhdWx0UGF5bG9hZCkKLSAgICAgICAgICAg
IGNvbnRpbnVlOwotCi0gICAgICAgIGlmIChkZWZhdWx0UGF5bG9hZC0+cGFyYW1ldGVycy5jb250
YWlucygicGFja2V0aXphdGlvbk1vZGUiKSAmJiByZW1vdGVQYXlsb2FkLnBhcmFtZXRlcnMuY29u
dGFpbnMoInBhY2tldGl6YXRpb25Nb2RlIikKLSAgICAgICAgICAgICYmIChkZWZhdWx0UGF5bG9h
ZC0+cGFyYW1ldGVycy5nZXQoInBhY2tldGl6YXRpb25Nb2RlIikgIT0gZGVmYXVsdFBheWxvYWQt
PnBhcmFtZXRlcnMuZ2V0KCJwYWNrZXRpemF0aW9uTW9kZSIpKSkKLSAgICAgICAgICAgIGNvbnRp
bnVlOwotCi0gICAgICAgIGZpbHRlcmVkUGF5bG9hZHMuYXBwZW5kKHJlbW90ZVBheWxvYWQpOwot
ICAgIH0KLQotICAgIHJldHVybiBmaWx0ZXJlZFBheWxvYWRzOwotfQotCi1NZWRpYUVuZHBvaW50
OjpVcGRhdGVSZXN1bHQgTW9ja01lZGlhRW5kcG9pbnQ6OnVwZGF0ZVJlY2VpdmVDb25maWd1cmF0
aW9uKE1lZGlhRW5kcG9pbnRTZXNzaW9uQ29uZmlndXJhdGlvbiogY29uZmlndXJhdGlvbiwgYm9v
bCBpc0luaXRpYXRvcikKLXsKLSAgICBVTlVTRURfUEFSQU0oaXNJbml0aWF0b3IpOwotCi0gICAg
dXBkYXRlQ29uZmlndXJhdGlvbk1pZHMoKmNvbmZpZ3VyYXRpb24pOwotICAgIHJldHVybiBVcGRh
dGVSZXN1bHQ6OlN1Y2Nlc3M7Ci19Ci0KLU1lZGlhRW5kcG9pbnQ6OlVwZGF0ZVJlc3VsdCBNb2Nr
TWVkaWFFbmRwb2ludDo6dXBkYXRlU2VuZENvbmZpZ3VyYXRpb24oTWVkaWFFbmRwb2ludFNlc3Np
b25Db25maWd1cmF0aW9uKiBjb25maWd1cmF0aW9uLCBjb25zdCBSZWFsdGltZU1lZGlhU291cmNl
TWFwJiBzZW5kU291cmNlTWFwLCBib29sIGlzSW5pdGlhdG9yKQotewotICAgIFVOVVNFRF9QQVJB
TShzZW5kU291cmNlTWFwKTsKLSAgICBVTlVTRURfUEFSQU0oaXNJbml0aWF0b3IpOwotCi0gICAg
dXBkYXRlQ29uZmlndXJhdGlvbk1pZHMoKmNvbmZpZ3VyYXRpb24pOwotICAgIHJldHVybiBVcGRh
dGVSZXN1bHQ6OlN1Y2Nlc3M7Ci19Ci0KLXZvaWQgTW9ja01lZGlhRW5kcG9pbnQ6OmFkZFJlbW90
ZUNhbmRpZGF0ZShjb25zdCBJY2VDYW5kaWRhdGUmIGNhbmRpZGF0ZSwgY29uc3QgU3RyaW5nJiBt
aWQsIGNvbnN0IFN0cmluZyYgdWZyYWcsIGNvbnN0IFN0cmluZyYgcGFzc3dvcmQpCi17Ci0gICAg
VU5VU0VEX1BBUkFNKGNhbmRpZGF0ZSk7Ci0gICAgVU5VU0VEX1BBUkFNKG1pZCk7Ci0gICAgVU5V
U0VEX1BBUkFNKHVmcmFnKTsKLSAgICBVTlVTRURfUEFSQU0ocGFzc3dvcmQpOwotfQotCi1SZWY8
UmVhbHRpbWVNZWRpYVNvdXJjZT4gTW9ja01lZGlhRW5kcG9pbnQ6OmNyZWF0ZU11dGVkUmVtb3Rl
U291cmNlKGNvbnN0IFN0cmluZyYgbWlkLCBSZWFsdGltZU1lZGlhU291cmNlOjpUeXBlIHR5cGUp
Ci17Ci0gICAgUmVmUHRyPFJlYWx0aW1lTWVkaWFTb3VyY2U+IHNvdXJjZTsKLQotICAgIHN3aXRj
aCAodHlwZSkgewotICAgIGNhc2UgUmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlwZTo6QXVkaW86Ci0g
ICAgICAgIHNvdXJjZSA9IE1vY2tSZWFsdGltZUF1ZGlvU291cmNlOjpjcmVhdGVNdXRlZCgicmVt
b3RlIGF1ZGlvIik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgUmVhbHRpbWVNZWRpYVNvdXJj
ZTo6VHlwZTo6VmlkZW86Ci0gICAgICAgIHNvdXJjZSA9IE1vY2tSZWFsdGltZVZpZGVvU291cmNl
OjpjcmVhdGVNdXRlZCgicmVtb3RlIHZpZGVvIik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
UmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlwZTo6Tm9uZToKLSAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7Ci0gICAgfQotCi0gICAgbV9tdXRlZFJlbW90ZVNvdXJjZXMuc2V0KG1pZCwgc291cmNl
KTsKLSAgICByZXR1cm4gc291cmNlLnJlbGVhc2VOb25OdWxsKCk7Ci19Ci0KLXZvaWQgTW9ja01l
ZGlhRW5kcG9pbnQ6OnJlcGxhY2VTZW5kU291cmNlKFJlYWx0aW1lTWVkaWFTb3VyY2UmIG5ld1Nv
dXJjZSwgY29uc3QgU3RyaW5nJiBtaWQpCi17Ci0gICAgVU5VU0VEX1BBUkFNKG5ld1NvdXJjZSk7
Ci0gICAgVU5VU0VEX1BBUkFNKG1pZCk7Ci19Ci0KLXZvaWQgTW9ja01lZGlhRW5kcG9pbnQ6OnJl
cGxhY2VNdXRlZFJlbW90ZVNvdXJjZU1pZChjb25zdCBTdHJpbmcmIG9sZE1pZCwgY29uc3QgU3Ry
aW5nJiBuZXdNaWQpCi17Ci0gICAgUmVmUHRyPFJlYWx0aW1lTWVkaWFTb3VyY2U+IHJlbW90ZVNv
dXJjZSA9IG1fbXV0ZWRSZW1vdGVTb3VyY2VzLnRha2Uob2xkTWlkKTsKLSAgICBtX211dGVkUmVt
b3RlU291cmNlcy5zZXQobmV3TWlkLCBXVEZNb3ZlKHJlbW90ZVNvdXJjZSkpOwotfQotCi12b2lk
IE1vY2tNZWRpYUVuZHBvaW50OjpzdG9wKCkKLXsKLX0KLQotdm9pZCBNb2NrTWVkaWFFbmRwb2lu
dDo6ZW11bGF0ZVBsYXRmb3JtRXZlbnQoY29uc3QgU3RyaW5nJiBhY3Rpb24pCi17Ci0gICAgaWYg
KGFjdGlvbiA9PSAiZGlzcGF0Y2gtZmFrZS1pY2UtY2FuZGlkYXRlcyIpCi0gICAgICAgIGRpc3Bh
dGNoRmFrZUljZUNhbmRpZGF0ZXMoKTsKLSAgICBlbHNlIGlmIChhY3Rpb24gPT0gInN0ZXAtaWNl
LXRyYW5zcG9ydC1zdGF0ZXMiKQotICAgICAgICBzdGVwSWNlVHJhbnNwb3J0U3RhdGVzKCk7Ci0g
ICAgZWxzZSBpZiAoYWN0aW9uID09ICJ1bm11dGUtcmVtb3RlLXNvdXJjZXMtYnktbWlkIikKLSAg
ICAgICAgdW5tdXRlUmVtb3RlU291cmNlc0J5TWlkKCk7Ci19Ci0KLXZvaWQgTW9ja01lZGlhRW5k
cG9pbnQ6OnVwZGF0ZUNvbmZpZ3VyYXRpb25NaWRzKGNvbnN0IE1lZGlhRW5kcG9pbnRTZXNzaW9u
Q29uZmlndXJhdGlvbiYgY29uZmlndXJhdGlvbikKLXsKLSAgICBWZWN0b3I8U3RyaW5nPiBtaWRz
OwotICAgIGZvciAoYXV0byYgbWVkaWFEZXNjcmlwdGlvbiA6IGNvbmZpZ3VyYXRpb24ubWVkaWFE
ZXNjcmlwdGlvbnMoKSkKLSAgICAgICAgbWlkcy5hcHBlbmQobWVkaWFEZXNjcmlwdGlvbi5taWQp
OwotICAgIG1fbWlkcy5zd2FwKG1pZHMpOwotfQotCi12b2lkIE1vY2tNZWRpYUVuZHBvaW50Ojpk
aXNwYXRjaEZha2VJY2VDYW5kaWRhdGVzKCkKLXsKLSAgICBtX2Zha2VJY2VDYW5kaWRhdGVzLmFw
cGVuZCh7ICJob3N0IiwgIjEiLCAxLCAiVURQIiwgMjAxMzI2NjQzMSwgIjE5Mi4xNjguMC4xMDAi
LCAzODgzOCwgeyB9LCB7IH0sIDAgfSk7Ci0gICAgbV9mYWtlSWNlQ2FuZGlkYXRlcy5hcHBlbmQo
eyAiaG9zdCIsICIyIiwgMSwgIlRDUCIsIDEwMTkyMTYzODMsICIxOTIuMTY4LjAuMTAwIiwgOSwg
ImFjdGl2ZSIsIHsgfSwgMCB9KTsKLSAgICBtX2Zha2VJY2VDYW5kaWRhdGVzLmFwcGVuZCh7ICJz
cmZseCIsICIzIiwgMSwgIlVEUCIsIDE2Nzc3MjIxMTEsICIxNzIuMTguMC4xIiwgNDc5ODksIHsg
fSwgIjE5Mi4xNjguMC4xMDAiLCA0Nzk4OSB9KTsKLQotICAgIC8vIFJldmVyc2Ugb3JkZXIgdG8g
dXNlIHRha2VMYXN0KCkgd2hpbGUga2VlcGluZyB0aGUgYWJvdmUgb3JkZXIKLSAgICBtX2Zha2VJ
Y2VDYW5kaWRhdGVzLnJldmVyc2UoKTsKLQotICAgIG1faWNlQ2FuZGlkYXRlVGltZXIuc3RhcnRP
bmVTaG90KDBfcyk7Ci19Ci0KLXZvaWQgTW9ja01lZGlhRW5kcG9pbnQ6OmljZUNhbmRpZGF0ZVRp
bWVyRmlyZWQoKQotewotICAgIGlmIChtX21pZHMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBpZiAoIW1fZmFrZUljZUNhbmRpZGF0ZXMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIG1f
Y2xpZW50LmdvdEljZUNhbmRpZGF0ZShtX21pZHNbMF0sIG1fZmFrZUljZUNhbmRpZGF0ZXMudGFr
ZUxhc3QoKSk7Ci0gICAgICAgIG1faWNlQ2FuZGlkYXRlVGltZXIuc3RhcnRPbmVTaG90KDBfcyk7
Ci0gICAgfSBlbHNlCi0gICAgICAgIG1fY2xpZW50LmRvbmVHYXRoZXJpbmdDYW5kaWRhdGVzKG1f
bWlkc1swXSk7Ci19Ci0KLXZvaWQgTW9ja01lZGlhRW5kcG9pbnQ6OnN0ZXBJY2VUcmFuc3BvcnRT
dGF0ZXMoKQotewotICAgIGlmIChtX21pZHMuc2l6ZSgpICE9IDMpIHsKLSAgICAgICAgTE9HX0VS
Uk9SKCJUaGUgJ3N0ZXAtaWNlLXRyYW5zcG9ydC1zdGF0ZXMnIGFjdGlvbiByZXF1aXJlcyAzIHRy
YW5zY2VpdmVycyIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gU2hvdWxkIGdv
IHRvOgotICAgIC8vICdjaGVja2luZycKLSAgICBtX2ljZVRyYW5zcG9ydFN0YXRlQ2hhbmdlcy5h
cHBlbmQoc3RkOjptYWtlX3BhaXIobV9taWRzWzBdLCBSVENJY2VUcmFuc3BvcnRTdGF0ZTo6Q2hl
Y2tpbmcpKTsKLSAgICBtX2ljZVRyYW5zcG9ydFN0YXRlQ2hhbmdlcy5hcHBlbmQoc3RkOjptYWtl
X3BhaXIobV9taWRzWzFdLCBSVENJY2VUcmFuc3BvcnRTdGF0ZTo6Q2hlY2tpbmcpKTsKLSAgICBt
X2ljZVRyYW5zcG9ydFN0YXRlQ2hhbmdlcy5hcHBlbmQoc3RkOjptYWtlX3BhaXIobV9taWRzWzJd
LCBSVENJY2VUcmFuc3BvcnRTdGF0ZTo6Q2hlY2tpbmcpKTsKLQotICAgIC8vICdjb25uZWN0ZWQn
Ci0gICAgbV9pY2VUcmFuc3BvcnRTdGF0ZUNoYW5nZXMuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKG1f
bWlkc1swXSwgUlRDSWNlVHJhbnNwb3J0U3RhdGU6OkNvbm5lY3RlZCkpOwotICAgIG1faWNlVHJh
bnNwb3J0U3RhdGVDaGFuZ2VzLmFwcGVuZChzdGQ6Om1ha2VfcGFpcihtX21pZHNbMV0sIFJUQ0lj
ZVRyYW5zcG9ydFN0YXRlOjpDb21wbGV0ZWQpKTsKLSAgICBtX2ljZVRyYW5zcG9ydFN0YXRlQ2hh
bmdlcy5hcHBlbmQoc3RkOjptYWtlX3BhaXIobV9taWRzWzJdLCBSVENJY2VUcmFuc3BvcnRTdGF0
ZTo6Q2xvc2VkKSk7Ci0KLSAgICAvLyAnY29tcGxldGVkJwotICAgIG1faWNlVHJhbnNwb3J0U3Rh
dGVDaGFuZ2VzLmFwcGVuZChzdGQ6Om1ha2VfcGFpcihtX21pZHNbMF0sIFJUQ0ljZVRyYW5zcG9y
dFN0YXRlOjpDb21wbGV0ZWQpKTsKLQotICAgIC8vICdmYWlsZWQnCi0gICAgbV9pY2VUcmFuc3Bv
cnRTdGF0ZUNoYW5nZXMuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKG1fbWlkc1swXSwgUlRDSWNlVHJh
bnNwb3J0U3RhdGU6OkZhaWxlZCkpOwotCi0gICAgLy8gJ2Rpc2Nvbm5lY3RlZCcKLSAgICBtX2lj
ZVRyYW5zcG9ydFN0YXRlQ2hhbmdlcy5hcHBlbmQoc3RkOjptYWtlX3BhaXIobV9taWRzWzFdLCBS
VENJY2VUcmFuc3BvcnRTdGF0ZTo6RGlzY29ubmVjdGVkKSk7Ci0gICAgbV9pY2VUcmFuc3BvcnRT
dGF0ZUNoYW5nZXMuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKG1fbWlkc1swXSwgUlRDSWNlVHJhbnNw
b3J0U3RhdGU6OkNsb3NlZCkpOwotCi0gICAgLy8gJ25ldycKLSAgICBtX2ljZVRyYW5zcG9ydFN0
YXRlQ2hhbmdlcy5hcHBlbmQoc3RkOjptYWtlX3BhaXIobV9taWRzWzFdLCBSVENJY2VUcmFuc3Bv
cnRTdGF0ZTo6Q2xvc2VkKSk7Ci0KLSAgICAvLyBSZXZlcnNlIG9yZGVyIHRvIHVzZSB0YWtlTGFz
dCgpIHdoaWxlIGtlZXBpbmcgdGhlIGFib3ZlIG9yZGVyCi0gICAgbV9pY2VUcmFuc3BvcnRTdGF0
ZUNoYW5nZXMucmV2ZXJzZSgpOwotCi0gICAgbV9pY2VUcmFuc3BvcnRUaW1lci5zdGFydE9uZVNo
b3QoMF9zKTsKLX0KLQotdm9pZCBNb2NrTWVkaWFFbmRwb2ludDo6aWNlVHJhbnNwb3J0VGltZXJG
aXJlZCgpCi17Ci0gICAgaWYgKG1faWNlVHJhbnNwb3J0U3RhdGVDaGFuZ2VzLmlzRW1wdHkoKSB8
fCBtX21pZHMuc2l6ZSgpICE9IDMpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8gc3RhdGVD
aGFuZ2UgPSBtX2ljZVRyYW5zcG9ydFN0YXRlQ2hhbmdlcy50YWtlTGFzdCgpOwotICAgIG1fY2xp
ZW50LmljZVRyYW5zcG9ydFN0YXRlQ2hhbmdlZChzdGF0ZUNoYW5nZS5maXJzdCwgc3RhdGVDaGFu
Z2Uuc2Vjb25kKTsKLQotICAgIG1faWNlVHJhbnNwb3J0VGltZXIuc3RhcnRPbmVTaG90KDBfcyk7
Ci19Ci0KLXZvaWQgTW9ja01lZGlhRW5kcG9pbnQ6OnVubXV0ZVJlbW90ZVNvdXJjZXNCeU1pZCgp
Ci17Ci0gICAgaWYgKG1fbWlkcy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8v
IExvb2tpbmcgdXAgZWFjaCBzb3VyY2UgYnkgaXRzIG1pZCwgaW5zdGVhZCBvZiBzaW1wbHkgaXRl
cmF0aW5nIG92ZXIgdGhlIGxpc3Qgb2YgbXV0ZWQgc291cmNlcywKLSAgICAvLyBlbXVsYXRlcyBy
ZW1vdGUgbWVkaWEgYXJyaXZpbmcgb24gYSBtZWRpYSBkZXNjcmlwdGlvbiB3aXRoIGEgc3BlY2lm
aWMgbWlkIChSVENSdHBUcmFuc2NlaXZlcikuCi0KLSAgICAvLyBDb3B5IHZhbHVlcyBpbiByZXZl
cnNlIG9yZGVyIHRvIG1haW50YWluIHRoZSBvcmlnaW5hbCBvcmRlciB3aGlsZSB1c2luZyB0YWtl
TGFzdCgpCi0gICAgZm9yIChpbnQgaSA9IG1fbWlkcy5zaXplKCkgLSAxOyBpID49IDA7IC0taSkK
LSAgICAgICAgbV9taWRzT2ZTb3VyY2VzVG9Vbm11dGUuYXBwZW5kKG1fbWlkc1tpXSk7Ci0KLSAg
ICBtX3VubXV0ZVRpbWVyLnN0YXJ0T25lU2hvdCgwX3MpOwotfQotCi12b2lkIE1vY2tNZWRpYUVu
ZHBvaW50Ojp1bm11dGVUaW1lckZpcmVkKCkKLXsKLSAgICBhdXRvKiBzb3VyY2UgPSBtX211dGVk
UmVtb3RlU291cmNlcy5nZXQobV9taWRzT2ZTb3VyY2VzVG9Vbm11dGUudGFrZUxhc3QoKSk7Ci0g
ICAgaWYgKHNvdXJjZSkKLSAgICAgICAgc291cmNlLT5zZXRNdXRlZChmYWxzZSk7Ci0KLSAgICBp
ZiAoIW1fbWlkc09mU291cmNlc1RvVW5tdXRlLmlzRW1wdHkoKSkKLSAgICAgICAgbV91bm11dGVU
aW1lci5zdGFydE9uZVNob3QoMF9zKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0j
ZW5kaWYgLy8gRU5BQkxFKFdFQl9SVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tb2NrL01vY2tNZWRpYUVuZHBvaW50LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
b2NrL01vY2tNZWRpYUVuZHBvaW50LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdm
NjY2NGZiODg1NjUzNTc1OTU2ZGJiZjU1NDJjNzIyNjE1YjU5NjQuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9j
ay9Nb2NrTWVkaWFFbmRwb2ludC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTAxICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgRXJpY3Nzb24gQUIuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiAgICBpbiB0aGUg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0g
KiAgICBkaXN0cmlidXRpb24uCi0gKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIEVyaWNzc29uIG5v
ciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICogICAgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0gKiAgICBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICog
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LSNwcmFnbWEgb25jZQotCi0jaWYgRU5BQkxFKFdFQl9SVEMpCi0KLSNpbmNsdWRlICJNZWRpYUVu
ZHBvaW50LmgiCi0jaW5jbHVkZSAiUlRDSWNlVHJhbnNwb3J0U3RhdGUuaCIKLSNpbmNsdWRlICJU
aW1lci5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIE1vY2tNZWRpYUVuZHBvaW50
IGZpbmFsIDogcHVibGljIE1lZGlhRW5kcG9pbnQgewotcHVibGljOgotICAgIFdFQkNPUkVfRVhQ
T1JUIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8TWVkaWFFbmRwb2ludD4gY3JlYXRlKE1lZGlhRW5k
cG9pbnRDbGllbnQmKTsKLQotICAgIE1vY2tNZWRpYUVuZHBvaW50KE1lZGlhRW5kcG9pbnRDbGll
bnQmKTsKLSAgICB+TW9ja01lZGlhRW5kcG9pbnQoKTsKLQotICAgIHZvaWQgc2V0Q29uZmlndXJh
dGlvbihNZWRpYUVuZHBvaW50Q29uZmlndXJhdGlvbiYmKSBmaW5hbCB7IH07Ci0KLSAgICB2b2lk
IGdlbmVyYXRlRHRsc0luZm8oKSBmaW5hbDsKLSAgICBNZWRpYVBheWxvYWRWZWN0b3IgZ2V0RGVm
YXVsdEF1ZGlvUGF5bG9hZHMoKSBmaW5hbDsKLSAgICBNZWRpYVBheWxvYWRWZWN0b3IgZ2V0RGVm
YXVsdFZpZGVvUGF5bG9hZHMoKSBmaW5hbDsKLSAgICBNZWRpYVBheWxvYWRWZWN0b3IgZmlsdGVy
UGF5bG9hZHMoY29uc3QgTWVkaWFQYXlsb2FkVmVjdG9yJiByZW1vdGVQYXlsb2FkcywgY29uc3Qg
TWVkaWFQYXlsb2FkVmVjdG9yJiBkZWZhdWx0UGF5bG9hZHMpIGZpbmFsOwotCi0gICAgVXBkYXRl
UmVzdWx0IHVwZGF0ZVJlY2VpdmVDb25maWd1cmF0aW9uKE1lZGlhRW5kcG9pbnRTZXNzaW9uQ29u
ZmlndXJhdGlvbiosIGJvb2wgaXNJbml0aWF0b3IpIGZpbmFsOwotICAgIFVwZGF0ZVJlc3VsdCB1
cGRhdGVTZW5kQ29uZmlndXJhdGlvbihNZWRpYUVuZHBvaW50U2Vzc2lvbkNvbmZpZ3VyYXRpb24q
LCBjb25zdCBSZWFsdGltZU1lZGlhU291cmNlTWFwJiwgYm9vbCBpc0luaXRpYXRvcikgZmluYWw7
Ci0KLSAgICB2b2lkIGFkZFJlbW90ZUNhbmRpZGF0ZShjb25zdCBJY2VDYW5kaWRhdGUmLCBjb25z
dCBTdHJpbmcmIG1pZCwgY29uc3QgU3RyaW5nJiB1ZnJhZywgY29uc3QgU3RyaW5nJiBwYXNzd29y
ZCkgZmluYWw7Ci0KLSAgICBSZWY8UmVhbHRpbWVNZWRpYVNvdXJjZT4gY3JlYXRlTXV0ZWRSZW1v
dGVTb3VyY2UoY29uc3QgU3RyaW5nJiBtaWQsIFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGUpIGZp
bmFsOwotICAgIHZvaWQgcmVwbGFjZVNlbmRTb3VyY2UoUmVhbHRpbWVNZWRpYVNvdXJjZSYsIGNv
bnN0IFN0cmluZyYgbWlkKSBmaW5hbDsKLSAgICB2b2lkIHJlcGxhY2VNdXRlZFJlbW90ZVNvdXJj
ZU1pZChjb25zdCBTdHJpbmcmIG9sZE1pZCwgY29uc3QgU3RyaW5nJiBuZXdNaWQpIGZpbmFsOwot
Ci0gICAgdm9pZCBzdG9wKCkgZmluYWw7Ci0KLSAgICB2b2lkIGVtdWxhdGVQbGF0Zm9ybUV2ZW50
KGNvbnN0IFN0cmluZyYgYWN0aW9uKSBmaW5hbDsKLQotcHJpdmF0ZToKLSAgICB2b2lkIHVwZGF0
ZUNvbmZpZ3VyYXRpb25NaWRzKGNvbnN0IE1lZGlhRW5kcG9pbnRTZXNzaW9uQ29uZmlndXJhdGlv
biYpOwotCi0gICAgc3RkOjp1bmlxdWVfcHRyPFJUQ0RhdGFDaGFubmVsSGFuZGxlcj4gY3JlYXRl
RGF0YUNoYW5uZWxIYW5kbGVyKGNvbnN0IFN0cmluZyYsIGNvbnN0IFJUQ0RhdGFDaGFubmVsSW5p
dCYpIGZpbmFsOwotCi0gICAgdm9pZCBkaXNwYXRjaEZha2VJY2VDYW5kaWRhdGVzKCk7Ci0gICAg
dm9pZCBpY2VDYW5kaWRhdGVUaW1lckZpcmVkKCk7Ci0KLSAgICB2b2lkIHN0ZXBJY2VUcmFuc3Bv
cnRTdGF0ZXMoKTsKLSAgICB2b2lkIGljZVRyYW5zcG9ydFRpbWVyRmlyZWQoKTsKLQotICAgIHZv
aWQgdW5tdXRlUmVtb3RlU291cmNlc0J5TWlkKCk7Ci0gICAgdm9pZCB1bm11dGVUaW1lckZpcmVk
KCk7Ci0KLSAgICBNZWRpYUVuZHBvaW50Q2xpZW50JiBtX2NsaWVudDsKLSAgICBWZWN0b3I8U3Ry
aW5nPiBtX21pZHM7Ci0gICAgSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxSZWFsdGltZU1lZGlhU291
cmNlPj4gbV9tdXRlZFJlbW90ZVNvdXJjZXM7Ci0KLSAgICBWZWN0b3I8SWNlQ2FuZGlkYXRlPiBt
X2Zha2VJY2VDYW5kaWRhdGVzOwotICAgIFRpbWVyIG1faWNlQ2FuZGlkYXRlVGltZXI7Ci0KLSAg
ICBWZWN0b3I8c3RkOjpwYWlyPFN0cmluZywgUlRDSWNlVHJhbnNwb3J0U3RhdGU+PiBtX2ljZVRy
YW5zcG9ydFN0YXRlQ2hhbmdlczsKLSAgICBUaW1lciBtX2ljZVRyYW5zcG9ydFRpbWVyOwotCi0g
ICAgVmVjdG9yPFN0cmluZz4gbV9taWRzT2ZTb3VyY2VzVG9Vbm11dGU7Ci0gICAgVGltZXIgbV91
bm11dGVUaW1lcjsKLSAgICAKLSAgICBXZWFrUHRyRmFjdG9yeTxNb2NrTWVkaWFFbmRwb2ludD4g
bV93ZWFrUHRyRmFjdG9yeTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlm
IC8vIEVOQUJMRShXRUJfUlRDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bW9jay9Nb2NrUmVhbHRpbWVNZWRpYVNvdXJjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tb2NrL01vY2tSZWFsdGltZU1lZGlhU291cmNlLmNwcAppbmRleCBiNDI0MjdiN2NkZDdkODll
MDIwZDZhNWY2MmY0N2VjYTc0N2YwMmU4Li44NzkxOTQ1ZGZmMzEwODkwZWUyMGUxZmJmNGViNTRh
NjRlZDBkOTA2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL01vY2tS
ZWFsdGltZU1lZGlhU291cmNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2Nr
L01vY2tSZWFsdGltZU1lZGlhU291cmNlLmNwcApAQCAtODIsNyArODIsNyBAQCBWZWN0b3I8Q2Fw
dHVyZURldmljZT4mIE1vY2tSZWFsdGltZU1lZGlhU291cmNlOjp2aWRlb0RldmljZXMoKQogfQog
CiBNb2NrUmVhbHRpbWVNZWRpYVNvdXJjZTo6TW9ja1JlYWx0aW1lTWVkaWFTb3VyY2UoY29uc3Qg
U3RyaW5nJiBpZCwgUmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlwZSB0eXBlLCBjb25zdCBTdHJpbmcm
IG5hbWUpCi0gICAgOiBCYXNlUmVhbHRpbWVNZWRpYVNvdXJjZUNsYXNzKGlkLCB0eXBlLCBuYW1l
KQorICAgIDogUmVhbHRpbWVNZWRpYVNvdXJjZShpZCwgdHlwZSwgbmFtZSkKIHsKICAgICBzd2l0
Y2ggKHR5cGUpIHsKICAgICBjYXNlIFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGU6OkF1ZGlvOgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9Nb2NrUmVhbHRpbWVNZWRp
YVNvdXJjZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9Nb2NrUmVhbHRpbWVNZWRp
YVNvdXJjZS5oCmluZGV4IDk1MDdmMDFhYTNkMzIzMDI2M2ZkNGFmZWI5ZDE2NTI4Y2Q5OWFjMmMu
LjFlYTExNWQ5YjQzM2ZhNGUzMzY5Y2JlZjg0Nzk0ZjlhZjI4ODY3ZWYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svTW9ja1JlYWx0aW1lTWVkaWFTb3VyY2UuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL01vY2tSZWFsdGltZU1lZGlhU291cmNlLmgK
QEAgLTI4LDI4ICsyOCwxNyBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaWZuZGVmIE1vY2tS
ZWFsdGltZU1lZGlhU291cmNlX2gKLSNkZWZpbmUgTW9ja1JlYWx0aW1lTWVkaWFTb3VyY2VfaAor
I3ByYWdtYSBvbmNlCiAKICNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQogCiAjaW5jbHVkZSAiUmVh
bHRpbWVNZWRpYVNvdXJjZS5oIgogCi0jaWYgVVNFKE9QRU5XRUJSVEMpCi0jaW5jbHVkZSAiUmVh
bHRpbWVNZWRpYVNvdXJjZU93ci5oIgotI2VuZGlmCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
Y2xhc3MgQ2FwdHVyZURldmljZTsKIAotI2lmIFVTRShPUEVOV0VCUlRDKQotdXNpbmcgQmFzZVJl
YWx0aW1lTWVkaWFTb3VyY2VDbGFzcyA9IFJlYWx0aW1lTWVkaWFTb3VyY2VPd3I7Ci0jZWxzZQot
dXNpbmcgQmFzZVJlYWx0aW1lTWVkaWFTb3VyY2VDbGFzcyA9IFJlYWx0aW1lTWVkaWFTb3VyY2U7
Ci0jZW5kaWYKLQotY2xhc3MgTW9ja1JlYWx0aW1lTWVkaWFTb3VyY2UgOiBwdWJsaWMgQmFzZVJl
YWx0aW1lTWVkaWFTb3VyY2VDbGFzcyB7CitjbGFzcyBNb2NrUmVhbHRpbWVNZWRpYVNvdXJjZSA6
IHB1YmxpYyBSZWFsdGltZU1lZGlhU291cmNlIHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5Nb2Nr
UmVhbHRpbWVNZWRpYVNvdXJjZSgpIHsgfQogCkBAIC02MSw5ICs1MCw3IEBAIHByb3RlY3RlZDoK
IAogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVTZXR0aW5ncyhSZWFsdGltZU1lZGlhU291cmNlU2V0
dGluZ3MmKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGluaXRpYWxpemVDYXBhYmlsaXRpZXMoUmVh
bHRpbWVNZWRpYVNvdXJjZUNhcGFiaWxpdGllcyYpID0gMDsKLSNpZiAhVVNFKE9QRU5XRUJSVEMp
CiAgICAgdmlydHVhbCB2b2lkIGluaXRpYWxpemVTdXBwb3J0ZWRDb25zdHJhaW50cyhSZWFsdGlt
ZU1lZGlhU291cmNlU3VwcG9ydGVkQ29uc3RyYWludHMmKSA9IDA7Ci0jZW5kaWYKIAogICAgIGNv
bnN0IFJlYWx0aW1lTWVkaWFTb3VyY2VDYXBhYmlsaXRpZXMmIGNhcGFiaWxpdGllcygpIGNvbnN0
IG92ZXJyaWRlOwogICAgIGNvbnN0IFJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5ncyYgc2V0dGlu
Z3MoKSBjb25zdCBvdmVycmlkZTsKQEAgLTc0LDExICs2MSw3IEBAIHByb3RlY3RlZDoKIAogcHJp
dmF0ZToKICAgICB2b2lkIGluaXRpYWxpemVDYXBhYmlsaXRpZXMoKTsKLSNpZiBVU0UoT1BFTldF
QlJUQykKLSAgICB2b2lkIGluaXRpYWxpemVTZXR0aW5ncygpIGZpbmFsOwotI2Vsc2UKICAgICB2
b2lkIGluaXRpYWxpemVTZXR0aW5ncygpOwotI2VuZGlmCiAKICAgICBSZWFsdGltZU1lZGlhU291
cmNlU2V0dGluZ3MgbV9jdXJyZW50U2V0dGluZ3M7CiAgICAgUmVhbHRpbWVNZWRpYVNvdXJjZVN1
cHBvcnRlZENvbnN0cmFpbnRzIG1fc3VwcG9ydGVkQ29uc3RyYWludHM7CkBAIC04OSw1ICs3Miwz
IEBAIHByaXZhdGU6CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUo
TUVESUFfU1RSRUFNKQotCi0jZW5kaWYgLy8gTW9ja1JlYWx0aW1lTWVkaWFTb3VyY2VfaApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwIGIvU291cmNlL1dl
YkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCmluZGV4IDIwZWRmOTc0OGJjZDhmZmVkYzUzMmVl
ZDM1MjNmNzNjYmQzZDk5NzEuLjNhZDU3ZjUzNmM4MWMyNTM3M2U2NjY0ZGYyZDdkYzE5ZWI1ODI0
YjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAKQEAgLTIwMCw3ICsyMDAsNiBA
QAogI2VuZGlmCiAKICNpZiBFTkFCTEUoV0VCX1JUQykKLSNpbmNsdWRlICJNb2NrTWVkaWFFbmRw
b2ludC5oIgogI2luY2x1ZGUgIlJUQ1BlZXJDb25uZWN0aW9uLmgiCiAjZW5kaWYKIApAQCAtNDg3
LDEyICs0ODYsNiBAQCBJbnRlcm5hbHM6OkludGVybmFscyhEb2N1bWVudCYgZG9jdW1lbnQpCiAg
ICAgV2ViQ29yZTo6U2V0dGluZ3M6OnNldE1lZGlhQ2FwdHVyZVJlcXVpcmVzU2VjdXJlQ29ubmVj
dGlvbihmYWxzZSk7CiAjZW5kaWYKIAotI2lmIEVOQUJMRShXRUJfUlRDKQotI2lmIFVTRShPUEVO
V0VCUlRDKQotICAgIGVuYWJsZU1vY2tNZWRpYUVuZHBvaW50KCk7Ci0jZW5kaWYKLSNlbmRpZgot
CiAjaWYgRU5BQkxFKFdJUkVMRVNTX1BMQVlCQUNLX1RBUkdFVCkKICAgICBpZiAoZG9jdW1lbnQu
cGFnZSgpKQogICAgICAgICBkb2N1bWVudC5wYWdlKCktPnNldE1vY2tNZWRpYVBsYXliYWNrVGFy
Z2V0UGlja2VyRW5hYmxlZCh0cnVlKTsKQEAgLTEyNTAsMTMgKzEyNDMsNiBAQCB2b2lkIEludGVy
bmFsczo6ZW5hYmxlTW9ja1NwZWVjaFN5bnRoZXNpemVyKCkKIAogI2lmIEVOQUJMRShXRUJfUlRD
KQogCi0jaWYgVVNFKE9QRU5XRUJSVEMpCi12b2lkIEludGVybmFsczo6ZW5hYmxlTW9ja01lZGlh
RW5kcG9pbnQoKQotewotICAgIE1lZGlhRW5kcG9pbnQ6OmNyZWF0ZSA9IE1vY2tNZWRpYUVuZHBv
aW50OjpjcmVhdGU7Ci19Ci0jZW5kaWYKLQogdm9pZCBJbnRlcm5hbHM6OmVtdWxhdGVSVENQZWVy
Q29ubmVjdGlvblBsYXRmb3JtRXZlbnQoUlRDUGVlckNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIGNv
bnN0IFN0cmluZyYgYWN0aW9uKQogewogICAgIGlmICghTGliV2ViUlRDUHJvdmlkZXI6OndlYlJU
Q0F2YWlsYWJsZSgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5h
bHMuaCBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmgKaW5kZXggOWM0MDAzMmE3
NWU3MDkxZGFmYTI4ODk0ZWExMDk3MzYzZGYzNjIzOC4uMTY2OTY2ODJhYmJhMzI1NmY4MzQ1ZGUz
MTQ5ZTdhNzBjNmExZjliYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRl
cm5hbHMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5oCkBAIC00MzAs
OSArNDMwLDYgQEAgcHVibGljOgogI2VuZGlmCiAKICNpZiBFTkFCTEUoV0VCX1JUQykKLSNpZiBV
U0UoT1BFTldFQlJUQykKLSAgICB2b2lkIGVuYWJsZU1vY2tNZWRpYUVuZHBvaW50KCk7Ci0jZW5k
aWYKICAgICB2b2lkIGVtdWxhdGVSVENQZWVyQ29ubmVjdGlvblBsYXRmb3JtRXZlbnQoUlRDUGVl
ckNvbm5lY3Rpb24mLCBjb25zdCBTdHJpbmcmIGFjdGlvbik7CiAgICAgdm9pZCB1c2VNb2NrUlRD
UGVlckNvbm5lY3Rpb25GYWN0b3J5KGNvbnN0IFN0cmluZyYpOwogICAgIHZvaWQgc2V0SUNFQ2Fu
ZGlkYXRlRmlsdGVyaW5nKGJvb2wpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9v
bHMvQ2hhbmdlTG9nCmluZGV4IDM0YmY3ZWIxYWY3NjhmZmM3ZTIyNTM2OGM2MTQ4MDIwYTZhYjFl
ZjIuLmMyMmQyODQ2YjlhNTY4NjdmYTE3OTkxYzVhNTY1OTAwNDM4OTA4ZDAgMTAwNjQ0Ci0tLSBh
L1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMiBAQAor
MjAxNy0xMC0wNCAgWW91ZW5uIEZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+CisKKyAgICAgICAg
UmVtb3ZlIE9wZW5XZWJSVEMgYmFja2VuZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTc3ODY4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgKiBndGsvamhidWlsZC5tb2R1bGVzOgorCiAyMDE3LTEwLTAzICBH
dXN0YXZvIE5vcm9uaGEgU2lsdmEgIDxndXN0YXZvLm5vcm9uaGFAY29sbGFib3JhLmNvLnVrPgog
CiAgICAgICAgIFtHTGliXSBMZXQgV2ViQ29yZSBrbm93IG9mIGxvdyBwb3dlciBzaXR1YXRpb25z
CmRpZmYgLS1naXQgYS9Ub29scy9ndGsvamhidWlsZC5tb2R1bGVzIGIvVG9vbHMvZ3RrL2poYnVp
bGQubW9kdWxlcwppbmRleCBmYTNiOWI0NmE5MTMwODQ3ODM1ZTM1NDEzNTE1MzdhMGIzYWExZThh
Li5mNTdmMTdhNjM3YmUzMmM0OWVhMTY5ODM0OWQzNDIwMDM2MDhlNzNjIDEwMDY0NAotLS0gYS9U
b29scy9ndGsvamhidWlsZC5tb2R1bGVzCisrKyBiL1Rvb2xzL2d0ay9qaGJ1aWxkLm1vZHVsZXMK
QEAgLTI0LDcgKzI0LDYgQEAKICAgICAgIDxkZXAgcGFja2FnZT0ibGlic291cCIvPgogICAgICAg
PGRlcCBwYWNrYWdlPSJhdGsiLz4KICAgICAgIDxkZXAgcGFja2FnZT0id2Via2l0LWdzdHJlYW1l
ci10ZXN0aW5nLWRlcGVuZGVuY2llcyIvPgotICAgICAgPGRlcCBwYWNrYWdlPSJvcGVud2VicnRj
Ii8+CiAgICAgICA8ZGVwIHBhY2thZ2U9InBhbmdvIi8+CiAgICAgICA8ZGVwIHBhY2thZ2U9Imxs
dm0iLz4KICAgICAgIDxkZXAgcGFja2FnZT0ic2hhcmVkLW1pbWUtaW5mbyIvPgpAQCAtMzkwLDM5
ICszODksNiBAQAogICAgIDwvZGVwZW5kZW5jaWVzPgogICA8L2F1dG90b29scz4KIAotICA8YXV0
b3Rvb2xzIGlkPSJsaWJ1c3JzY3RwIiBzdXBwb3J0cy1ub24tc3JjZGlyLWJ1aWxkcz0ibm8iIGF1
dG9nZW4tc2g9Ii4vYm9vdHN0cmFwOyAuL2NvbmZpZ3VyZSAtLWRpc2FibGUtd2FybmluZ3MtYXMt
ZXJyb3JzIj4KLSAgICA8YnJhbmNoIHJlcG89ImdpdGh1Yi5jb20iIG1vZHVsZT0ic2N0cGxhYi91
c3JzY3RwLmdpdCIgY2hlY2tvdXRkaXI9InVzcnNjdHAiIHRhZz0iMDc4ZmYzMjUyZjczMzI3ZTBh
YzExZDZmZDVlZmY2MjAxMWY2NjQ2ZSIvPgotICA8L2F1dG90b29scz4KLQotICAgPGF1dG90b29s
cyBpZD0iZ3N0LXBsdWdpbnMtb3BlbndlYnJ0YyIgc3VwcG9ydHMtcGFyYWxsZWwtYnVpbGRzPSJu
byIgc3VwcG9ydHMtbm9uLXNyY2Rpci1idWlsZHM9Im5vIiBhdXRvZ2VuLXNoPSIuL2F1dG9nZW4u
c2g7IC4vY29uZmlndXJlIj4KLSAgICAgPGRlcGVuZGVuY2llcz4KLSAgICAgICA8ZGVwIHBhY2th
Z2U9ImdzdC1wbHVnaW5zLWJhc2UiLz4KLSAgICAgICA8ZGVwIHBhY2thZ2U9ImxpYnVzcnNjdHAi
Lz4KLSAgICAgPC9kZXBlbmRlbmNpZXM+Ci0gICAgPGJyYW5jaCByZXBvPSJnaXRodWIuY29tIiBt
b2R1bGU9IklnYWxpYS9vcGVud2VicnRjLWdzdC1wbHVnaW5zLmdpdCIgY2hlY2tvdXRkaXI9Imdz
dC1wbHVnaW5zLW9wZW53ZWJydGMiIHRhZz0iOWIyMTk5ZWE5NzAzNjlkYmYxZDljYTJmOGU2MWM5
NWYyMWRiMmI2ZSIvPgotICAgPC9hdXRvdG9vbHM+Ci0KLSAgIDxhdXRvdG9vbHMgaWQ9ImxpYm5p
Y2UiCi0gICAgICAgICAgICAgIHN1cHBvcnRzLW5vbi1zcmNkaXItYnVpbGRzPSJubyI+Ci0gICAg
PGRlcGVuZGVuY2llcz4KLSAgICAgIDxkZXAgcGFja2FnZT0iZ3N0cmVhbWVyIi8+Ci0gICAgPC9k
ZXBlbmRlbmNpZXM+Ci0gICAgPGJyYW5jaCBtb2R1bGU9ImxpYm5pY2UvbGlibmljZS9hcmNoaXZl
LyR7dmVyc2lvbn0udGFyLmd6IiB2ZXJzaW9uPSIyODAzYTBiNGI3MGFmOTY4NGUwNWVmNWVkM2Yw
YzJmYmNhNGI2YzkzIgotICAgICAgICAgICAgY2hlY2tvdXRkaXI9ImxpYm5pY2UtJHt2ZXJzaW9u
fSIgcmVwbz0iZ2l0aHViLXRhcmJhbGwiPgotICAgICAgPHBhdGNoIGZpbGU9ImxpYm5pY2UtMDAw
MS1uaWNlc3JjLXNwaW4tdGhlLWFnZW50LW1haW5sb29wLWluLWEtc2VwYXJhdGUtdGhyZWFkLnBh
dGNoIiBzdHJpcD0iMSIvPgotICAgICAgPHBhdGNoIGZpbGU9ImxpYm5pY2UtMDAwMS1UVVJOLWFs
bG93LVJFQUxNLXRvLWJlLWVtcHR5LnBhdGNoIiBzdHJpcD0iMSIvPgotICAgIDwvYnJhbmNoPgot
ICA8L2F1dG90b29scz4KLQotICA8YXV0b3Rvb2xzIGlkPSJvcGVud2VicnRjIiBhdXRvZ2VuYXJn
cz0iLS1lbmFibGUtYnJpZGdlPW5vIC0tZW5hYmxlLW93ci1nc3Q9eWVzIj4KLSAgICA8ZGVwZW5k
ZW5jaWVzPgotICAgICAgPGRlcCBwYWNrYWdlPSJnc3QtcGx1Z2lucy1vcGVud2VicnRjIi8+Ci0g
ICAgICA8ZGVwIHBhY2thZ2U9ImdzdC1wbHVnaW5zLWJhZCIvPgotICAgICAgPGRlcCBwYWNrYWdl
PSJsaWJuaWNlIi8+Ci0gICAgIDwvZGVwZW5kZW5jaWVzPgotICAgIDxicmFuY2ggcmVwbz0iZ2l0
aHViLmNvbSIgbW9kdWxlPSJJZ2FsaWEvb3BlbndlYnJ0Yy5naXQiIGNoZWNrb3V0ZGlyPSJvcGVu
d2VicnRjIiB0YWc9IjdmM2QyM2UwMzQ4MTg4OTNkYjE5OGY0YjU2ZTQxNjA5YWJkODg0N2IiLz4K
LSAgPC9hdXRvdG9vbHM+Ci0KICAgPGF1dG90b29scyBpZD0ibGx2bSIKICAgICAgICAgICAgICBh
dXRvZ2VuLXNoPSJjb25maWd1cmUiCiAgICAgICAgICAgICAgYXV0b2dlbmFyZ3M9Ii0tZW5hYmxl
LW9wdGltaXplZCAtLWRpc2FibGUtdGVybWluZm8gLS1kaXNhYmxlLXpsaWIgLS1lbmFibGUtdGFy
Z2V0cz1ob3N0IC0tZGlzYWJsZS1iYWNrdHJhY2VzIC0tZGlzYWJsZS1jcmFzaC1vdmVycmlkZXMg
LS1kaXNhYmxlLWV4cGVuc2l2ZS1jaGVja3MgLS1kaXNhYmxlLWRlYnVnLXJ1bnRpbWUgLS1kaXNh
YmxlLWFzc2VydGlvbnMgLS1lbmFibGUtc2hhcmVkIC0tZW5hYmxlLWJpbmRpbmdzPW5vbmUiPgpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
CmluZGV4IDgxNDNmOTY1YmJkYmM3NzZiNTA3OThjOWRjMjliNzY4MWE3OTE0ZjEuLjcwOWE4ZDhi
YWRkNmFkMWRjN2ZmNGY1ZDNkNTRiMDIyOTU3M2E3NTAgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3Rz
L0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsNSArMSwxNCBAQAog
MjAxNy0xMC0wNCAgWW91ZW5uIEZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+CiAKKyAgICAgICAg
UmVtb3ZlIE9wZW5XZWJSVEMgYmFja2VuZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTc3ODY4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvVGVzdEV4cGVjdGF0aW9uczoKKworMjAx
Ny0xMC0wNCAgWW91ZW5uIEZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+CisKICAgICAgICAgQWRk
IHF1b3RhIHRvIGNhY2hlIEFQSQogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTc3NTUyCiAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0
ay9UZXN0RXhwZWN0YXRpb25zIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1Rlc3RFeHBlY3Rh
dGlvbnMKaW5kZXggOGM2NmRiNjQ0NWUzNzI3OGNjOTgxYTU5NzdhNjVmMjJiNDNhMDIzOS4uNDVh
MjVkZDAwMWY0MDA0MzVjM2IzOTAxYmExMjdhYjYzNzc2MjI3NCAxMDA2NDQKLS0tIGEvTGF5b3V0
VGVzdHMvcGxhdGZvcm0vZ3RrL1Rlc3RFeHBlY3RhdGlvbnMKKysrIGIvTGF5b3V0VGVzdHMvcGxh
dGZvcm0vZ3RrL1Rlc3RFeHBlY3RhdGlvbnMKQEAgLTYxMSw4MiArNjExLDExIEBAIHdlYmtpdC5v
cmcvYi85OTAzNiBmYXN0L3NoYWRvdy1kb20vcG9pbnRlcmxvY2tlbGVtZW50LWluLXNsb3QuaHRt
bCBbIFNraXAgXQogd2Via2l0Lm9yZy9iLzg1MjExIGlldGVzdGNlbnRlci9jc3MzL2ZsZXhib3gv
ZmxleGJveC1hbGlnbi1zdHJldGNoLTAwMS5odG0gWyBJbWFnZU9ubHlGYWlsdXJlIF0KIHdlYmtp
dC5vcmcvYi84NTIxMiBpZXRlc3RjZW50ZXIvY3NzMy9mbGV4Ym94L2ZsZXhib3gtbGF5b3V0LTAw
Mi5odG0gWyBJbWFnZU9ubHlGYWlsdXJlIF0KIAotIyBXZWJSVEMgLyBNZWRpYVN0cmVhbSBpbXBs
ZW1lbnRhdGlvbiBpcyBub3QgY29tcGxldGUgeWV0LgotIyBTb21lIG9mIHRoaXMgdGVzdHMgYXJl
IHNraXBwZWQgb24gdGhlIGdlbmVyYWwgVGVzdEV4cGVjdGF0aW9ucywKLSMgRW5hYmxlIHRoZW0g
aGVyZSBhbmQgbGlzdCB0aGUgaW5kaXZpZHVhbCBleHBlY3RhdGlvbnMgaW4gb3JkZXIgdG8gZ2V0
Ci0jIG5vdGlmaWNhdGlvbnMgb2YgbmV3IGZhaWx1cmVzLgogZmFzdC9tZWRpYXN0cmVhbSBbIFBh
c3MgXQotd2VicnRjIFsgUGFzcyBdCi0jIEdUSyB1c2VzIE9XUiBpbnN0ZWFkIG9mIGxpYndlYnJ0
Ywotd2VicnRjL2xpYndlYnJ0YyBbIFNraXAgXQotIyBTb21lIFdlYlJUQyBmZWF0dXJlcyBsaWtl
IGRhdGFjaGFubmVsIGFyZSBzdGlsbCBub3QgaW1wbGVtZW50ZWQKLXdlYnJ0Yy9hdWRpby1yZXBs
YWNlLXRyYWNrLmh0bWwgWyBGYWlsdXJlIF0KLXdlYnJ0Yy9hdWRpby1tdXRlZC1zdGF0cy5odG1s
IFsgRmFpbHVyZSBdCi13ZWJydGMvYXVkaW8tbXV0ZWQtc3RhdHMyLmh0bWwgWyBGYWlsdXJlIF0K
LXdlYnJ0Yy9jYXB0dXJlQ2FudmFzLXdlYnJ0Yy5odG1sIFsgRmFpbHVyZSBdCi13ZWJydGMvY2xv
c2luZy1wZWVyY29ubmVjdGlvbi5odG1sIFsgVGltZW91dCBdCi13ZWJydGMvY29ubmVjdGlvbi1z
dGF0ZS5odG1sIFsgRmFpbHVyZSBdCi13ZWJydGMvZGF0YWNoYW5uZWwgWyBTa2lwIF0KLXdlYnJ0
Yy9lcGhlbWVyYWwtY2VydGlmaWNhdGVzLWFuZC1jbmFtZXMuaHRtbCBbIEZhaWx1cmUgXQotd2Vi
cnRjL211bHRpLXZpZGVvLmh0bWwgWyBGYWlsdXJlIF0KLXdlYnJ0Yy9uby1wb3J0LXplcm8taW4t
dXBkLWNhbmRpZGF0ZXMuaHRtbCBbIFRpbWVvdXQgXQotd2VicnRjL3BlZXItY29ubmVjdGlvbi1h
dWRpby1tdXRlMi5odG1sIFsgQ3Jhc2ggRmFpbHVyZSBdCi13ZWJydGMvcGVlci1jb25uZWN0aW9u
LWF1ZGlvLW11dGUuaHRtbCBbIEZhaWx1cmUgXQotd2VicnRjL3BlZXItY29ubmVjdGlvbi1hdWRp
by11bm11dGUuaHRtbCBbIEZhaWx1cmUgXQotd2VicnRjL3BlZXItY29ubmVjdGlvbi1yZW1vdGUt
YXVkaW8tbXV0ZTIuaHRtbCBbIENyYXNoIEZhaWx1cmUgXQotd2VicnRjL3BlZXItY29ubmVjdGlv
bi1yZW1vdGUtYXVkaW8tbXV0ZS5odG1sIFsgRmFpbHVyZSBdCi13ZWJydGMvcGVlci1jb25uZWN0
aW9uLXRyYWNrLWVuZC5odG1sIFsgRmFpbHVyZSBdCi13ZWJydGMvdmlkZW8tYWRkVHJhY2suaHRt
bCBbIENyYXNoIF0KLXdlYnJ0Yy92aWRlby1kaXNhYmxlZC1ibGFjay5odG1sIFsgRmFpbHVyZSBd
Ci13ZWJydGMvdmlkZW8tbWVkaWFzdHJlYW10cmFjay1zdGF0cy5odG1sIFsgRmFpbHVyZSBdCi13
ZWJydGMvdmlkZW8tbXV0ZS5odG1sIFsgRmFpbHVyZSBUaW1lb3V0IF0KLXdlYnJ0Yy92aWRlby1y
ZW1vdGUtbXV0ZS5odG1sIFsgRmFpbHVyZSBdCi13ZWJydGMvdmlkZW8tcmVwbGFjZS1tdXRlZC10
cmFjay5odG1sIFsgRmFpbHVyZSBUaW1lb3V0IENyYXNoIF0KLXdlYmtpdC5vcmcvYi8xNzY4MDEg
d2VicnRjL3ZpZGVvLXJlcGxhY2UtdHJhY2suaHRtbCBbIEZhaWx1cmUgQ3Jhc2ggXQotd2Via2l0
Lm9yZy9iLzE3NjgwMSB3ZWJydGMvdmlkZW8tZ2V0UGFyYW1ldGVycy5odG1sIFsgRmFpbHVyZSBD
cmFzaCBdCi13ZWJraXQub3JnL2IvMTc2ODAxIHdlYnJ0Yy92aWRlby5odG1sIFsgRmFpbHVyZSBD
cmFzaCBdCi13ZWJydGMvdmlkZW8tcmVwbGFjZS10cmFjay10by1udWxsLmh0bWwgWyBGYWlsdXJl
IF0KLXdlYnJ0Yy92aWRlby1yb3RhdGlvbi5odG1sIFsgRmFpbHVyZSBdCi13ZWJydGMvdmlkZW8t
c3RhdHMuaHRtbCBbIEZhaWx1cmUgQ3Jhc2ggXQotd2VicnRjL3ZpZGVvLXVubXV0ZS5odG1sIFsg
RmFpbHVyZSBUaW1lb3V0IF0KLXdlYnJ0Yy92aWRlby13aXRoLWRhdGEtY2hhbm5lbC5odG1sIFsg
RmFpbHVyZSBdCi13ZWJydGMvdmlkZW8td2l0aC1yZWNlaXZlci5odG1sIFsgRmFpbHVyZSBdCi1p
bXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3dlYnJ0Yy9SVENQZWVyQ29ubmVjdGlvbi1h
ZGRJY2VDYW5kaWRhdGUuaHRtbCBbIEZhaWx1cmUgXQotaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9y
bS10ZXN0cy93ZWJydGMvUlRDUGVlckNvbm5lY3Rpb24tY3JlYXRlRGF0YUNoYW5uZWwuaHRtbCBb
IEZhaWx1cmUgXQotaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy93ZWJydGMvUlRDUGVl
ckNvbm5lY3Rpb24tc2V0UmVtb3RlRGVzY3JpcHRpb24uaHRtbCBbIEZhaWx1cmUgXQotaW1wb3J0
ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy93ZWJydGMvUlRDUGVlckNvbm5lY3Rpb24taWRsLmh0
bWwgWyBGYWlsdXJlIF0KLWltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvd2VicnRjL1JU
Q1BlZXJDb25uZWN0aW9uLWNyZWF0ZUFuc3dlci5odG1sIFsgRmFpbHVyZSBdCi1pbXBvcnRlZC93
M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3dlYnJ0Yy9SVENQZWVyQ29ubmVjdGlvbi1vbm5lZ290aWF0
aW9ubmVlZGVkLmh0bWwgWyBGYWlsdXJlIF0KLWltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVz
dHMvd2VicnRjL1JUQ0RhdGFDaGFubmVsLWJ1ZmZlcmVkQW1vdW50Lmh0bWwgWyBGYWlsdXJlIF0K
LWltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvd2VicnRjL1JUQ0RhdGFDaGFubmVsLXNl
bmQuaHRtbCBbIEZhaWx1cmUgXQotaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy93ZWJy
dGMvUlRDSWNlVHJhbnNwb3J0Lmh0bWwgWyBGYWlsdXJlIF0KLWltcG9ydGVkL3czYy93ZWItcGxh
dGZvcm0tdGVzdHMvd2VicnRjL1JUQ1BlZXJDb25uZWN0aW9uLWFkZFRyYW5zY2VpdmVyLmh0bWwg
WyBGYWlsdXJlIF0KLWltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvd2VicnRjL1JUQ1Bl
ZXJDb25uZWN0aW9uLWNvbm5lY3Rpb25TdGF0ZS5odG1sIFsgRmFpbHVyZSBdCi1pbXBvcnRlZC93
M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3dlYnJ0Yy9SVENQZWVyQ29ubmVjdGlvbi1nZXRTdGF0cy5o
dG1sIFsgRmFpbHVyZSBdCi1pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3dlYnJ0Yy9S
VENQZWVyQ29ubmVjdGlvbi1pY2VDb25uZWN0aW9uU3RhdGUuaHRtbCBbIEZhaWx1cmUgXQotaW1w
b3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy93ZWJydGMvUlRDUGVlckNvbm5lY3Rpb24taWNl
R2F0aGVyaW5nU3RhdGUuaHRtbCBbIEZhaWx1cmUgXQotaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9y
bS10ZXN0cy93ZWJydGMvUlRDUGVlckNvbm5lY3Rpb24tb25kYXRhY2hhbm5lbC5odG1sIFsgRmFp
bHVyZSBdCi1pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3dlYnJ0Yy9SVENQZWVyQ29u
bmVjdGlvbi1zZXRMb2NhbERlc2NyaXB0aW9uLWFuc3dlci5odG1sIFsgRmFpbHVyZSBdCi1pbXBv
cnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3dlYnJ0Yy9SVENQZWVyQ29ubmVjdGlvbi1zZXRM
b2NhbERlc2NyaXB0aW9uLW9mZmVyLmh0bWwgWyBGYWlsdXJlIF0KLWltcG9ydGVkL3czYy93ZWIt
cGxhdGZvcm0tdGVzdHMvd2VicnRjL1JUQ1BlZXJDb25uZWN0aW9uLXNldFJlbW90ZURlc2NyaXB0
aW9uLW9mZmVyLmh0bWwgWyBGYWlsdXJlIF0KLWltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVz
dHMvd2VicnRjL1JUQ0RUTUZTZW5kZXItaW5zZXJ0RFRNRi5odG1sIFsgQ3Jhc2ggXQotaW1wb3J0
ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy93ZWJydGMvUlRDUGVlckNvbm5lY3Rpb24tb250cmFj
ay5odG1sIFsgQ3Jhc2ggXQotaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy93ZWJydGMv
UlRDUGVlckNvbm5lY3Rpb24tc2V0RGVzY3JpcHRpb24tdHJhbnNjZWl2ZXIuaHRtbCBbIENyYXNo
IF0KLWltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvd2VicnRjL1JUQ1J0cFNlbmRlci1y
ZXBsYWNlVHJhY2suaHRtbCBbIENyYXNoIF0KLWltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVz
dHMvd2VicnRjL2RhdGFjaGFubmVsLWVtcHR5c3RyaW5nLmh0bWwgWyBGYWlsdXJlIF0KLWltcG9y
dGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvd2VicnRjL25vLW1lZGlhLWNhbGwuaHRtbCBbIEZh
aWx1cmUgXQotaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy93ZWJydGMvcHJvbWlzZXMt
Y2FsbC5odG1sIFsgRmFpbHVyZSBdCi1pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3dl
YnJ0Yy9ydGNwZWVyY29ubmVjdGlvbi9zZXRSZW1vdGVEZXNjcmlwdGlvbi5odG1sIFsgRmFpbHVy
ZSBdCi1odHRwL3Rlc3RzL3dlYnJ0Yy9maWx0ZXJpbmctaWNlLWNhbmRpZGF0ZS1jcm9zcy1vcmln
aW4tZnJhbWUuaHRtbCBbIFRpbWVvdXQgXQotaHR0cC90ZXN0cy93ZWJydGMvZmlsdGVyaW5nLWlj
ZS1jYW5kaWRhdGUtc2FtZS1vcmlnaW4tZnJhbWUuaHRtbCBbIFRpbWVvdXQgXQotaHR0cC90ZXN0
cy93ZWJydGMvZmlsdGVyaW5nLWljZS1jYW5kaWRhdGUtc2FtZS1vcmlnaW4tZnJhbWUyLmh0bWwg
WyBUaW1lb3V0IF0KLXdlYnJ0Yy9maWx0ZXJpbmctaWNlLWNhbmRpZGF0ZS1hZnRlci1yZWxvYWQu
aHRtbCBbIFRpbWVvdXQgXQotd2VicnRjL2ljZS1jYW5kaWRhdGUtc2RwTUxpbmVJbmRleC5odG1s
IFsgVGltZW91dCBdCisjIFNraXBwaW5nIHVudGlsIGJhY2tlbmQgaXMgaW1wbGVtZW50ZWQKK3dl
YnJ0YyBbIFNraXAgXQoraW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy93ZWJydGMvIFsg
U2tpcCBdCiBodHRwL3Rlc3RzL21lZGlhL21lZGlhLXN0cmVhbS9nZXR1c2VybWVkaWEtd2l0aC1j
YW52YXMuaHRtbCBbIFRpbWVvdXQgXQotd2Via2l0Lm9yZy9iLzE2OTExMCB3ZWJydGMvYXVkaW8t
cGVlci1jb25uZWN0aW9uLXdlYmF1ZGlvLmh0bWwgWyBGYWlsdXJlIFRpbWVvdXQgXQotd2Via2l0
Lm9yZy9iLzE3MzQ1NiBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3dlYnJ0Yy9SVENQ
ZWVyQ29ubmVjdGlvbi1jcmVhdGVPZmZlci5odG1sIFsgQ3Jhc2ggXQotd2Via2l0Lm9yZy9iLzE3
MzQ1NiB3ZWJydGMvY3JlYXRlT2ZmZXJBbnN3ZXIuaHRtbCAgWyBDcmFzaCBdCi13ZWJraXQub3Jn
L2IvMTczNDU2IHdlYnJ0Yy92aWRlby1hZGRUcmFuc2NlaXZlci5odG1sIFsgQ3Jhc2ggXQogIyBU
aGUgTWVkaWFTdHJlYW0gaW1wbGVtZW50YXRpb24gaXMgYWxzbyBzdGlsbCBub3QgY29tcGxldGVk
CiB3ZWJraXQub3JnL2IvNzkyMDMgZmFzdC9tZWRpYXN0cmVhbS9tb2NrLW1lZGlhLXNvdXJjZS13
ZWJhdWRpby5odG1sIFsgVGltZW91dCBdCiB3ZWJraXQub3JnL2IvNzkyMDMgZmFzdC9tZWRpYXN0
cmVhbS9nZXRVc2VyTWVkaWEtd2ViYXVkaW8uaHRtbCBbIEZhaWx1cmUgXQpAQCAtMTI1Myw3ICsx
MTgyLDYgQEAgd2Via2l0Lm9yZy9iLzE3NTQxOSBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRl
c3RzL3N0cmVhbXMvcmVhZGFibGUtYnl0ZS1zdHJlYW0KIGZhc3QvaW1hZ2VzL2FuaW1hdGVkLWlt
YWdlLW1wNC5odG1sIFsgU2tpcCBdCiAKIHdlYmtpdC5vcmcvYi8xNzc1MzIgYWNjZXNzaWJpbGl0
eS9pbWFnZS1sb2FkLW9uLWRlbGF5Lmh0bWwgWyBGYWlsdXJlIF0KLXdlYmtpdC5vcmcvYi8xNzc1
MzMgd2VicnRjL3ZpZGVvLWludGVycnVwdGlvbi5odG1sIFsgRmFpbHVyZSBdCiAKIHdlYmtpdC5v
cmcvYi8xNzc2MzIgZmFzdC90ZXh0L2ZsYWctY29kZXBvaW50Lmh0bWwgWyBJbWFnZU9ubHlGYWls
dXJlIF0KIApAQCAtMTM4Miw3ICsxMzEwLDYgQEAgd2Via2l0Lm9yZy9iLzE3NjgwNSBtZWRpYS9t
ZWRpYS1oaWdoZXItcHJpby1hdWRpby1zdHJlYW0uaHRtbCBbIENyYXNoIF0KIHdlYmtpdC5vcmcv
Yi8xNzY4MDYgbWVkaWEvdHJhY2svdHJhY2stdGV4dC10cmFjay1jdWUtbGlzdC5odG1sIFsgQ3Jh
c2ggXQogCiB3ZWJraXQub3JnL2IvMTc2ODU2IGZhc3QvbWVkaWFzdHJlYW0vYXBwbHktY29uc3Ry
YWludHMtdmlkZW8uaHRtbCBbIENyYXNoIF0KLXdlYmtpdC5vcmcvYi8xNzY4NTAgd2VicnRjL2Ns
b25lLWF1ZGlvLXRyYWNrLmh0bWwgWyBGYWlsdXJlIENyYXNoIF0KIHdlYmtpdC5vcmcvYi8xNzY4
NjEgaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9tZWRpYS1zb3VyY2UvbWVkaWFzb3Vy
Y2Utc291cmNlYnVmZmVyLW1vZGUuaHRtbCBbIENyYXNoIF0KIAogIyBTZWUgYWxzbyB3ZWJraXQu
b3JnL2IvMTQxNjk5CkBAIC0xMzk0LDggKzEzMjEsNiBAQCB3ZWJraXQub3JnL2IvMTc3NTM3IGh0
dHAvdGVzdHMvbXVsdGlwYXJ0L211bHRpcGFydC1odG1sLnBocCBbIENyYXNoIF0KIAogd2Via2l0
Lm9yZy9iLzE3NzgxNiB3ZWJnbC8xLjAuMi9jb25mb3JtYW5jZS9vZ2xlcy9HTC92ZWMvdmVjXzAw
MV90b18wMDguaHRtbCBbIENyYXNoIFBhc3MgXQogCi13ZWJraXQub3JnL2IvMTc3ODE4IHdlYnJ0
Yy9uZWdvdGlhdGVkbmVlZGVkLWV2ZW50LWFkZFN0cmVhbS5odG1sIFsgQ3Jhc2ggUGFzcyBdCi0K
ICMvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiAjIEVuZCBvZiBDcmFzaGluZyB0ZXN0
cwogIy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>322670</attachid>
            <date>2017-10-04 07:54:48 -0700</date>
            <delta_ts>2017-10-04 08:38:33 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-177868-20171004165446.patch</filename>
            <type>text/plain</type>
            <size>262627</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjIyODM0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzIwOWYyMWRiZDdiYWJk
NjQyODZiYTRjMDYzYTU5NWI2YTk1MzVhMi4uNTE5ZTJkYzVhNjVhNWE0YTcwNjgwOWJlOGNmNzg4
MGMwYjQ4NTQ3OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDU0IEBACiAyMDE3LTEwLTA0ICBZb3Vl
bm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KIAorICAgICAgICBSZW1vdmUgT3BlbldlYlJU
QyBiYWNrZW5kCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNzc4NjgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIERlcml2ZWRTb3VyY2VzLm1ha2U6CisgICAg
ICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYUVuZHBvaW50UGVlckNvbm5lY3Rpb24uY3Bw
OiBSZW1vdmVkLgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFFbmRwb2ludFBl
ZXJDb25uZWN0aW9uLmg6IFJlbW92ZWQuCisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9N
ZWRpYUVuZHBvaW50U2Vzc2lvbkRlc2NyaXB0aW9uLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBN
b2R1bGVzL21lZGlhc3RyZWFtL01lZGlhRW5kcG9pbnRTZXNzaW9uRGVzY3JpcHRpb24uaDogUmVt
b3ZlZC4KKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL1NEUFByb2Nlc3Nvci5jcHA6IFJl
bW92ZWQuCisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9TRFBQcm9jZXNzb3IuaDogUmVt
b3ZlZC4KKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL2xpYndlYnJ0Yy9MaWJXZWJSVENN
ZWRpYUVuZHBvaW50LmNwcDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2o6CisgICAgICAgICogcGxhdGZvcm0vR1N0cmVhbWVyLmNtYWtlOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmJ1aWxk
TWVkaWFFbmdpbmVzVmVjdG9yKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFt
ZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c3VwcG9ydHNUeXBlKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyLmNw
cDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyLmg6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0v
bWVkaWFzdHJlYW0vTWVkaWFFbmRwb2ludC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZv
cm0vbWVkaWFzdHJlYW0vTWVkaWFFbmRwb2ludC5oOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRm
b3JtL21lZGlhc3RyZWFtL01lZGlhRW5kcG9pbnRTZXNzaW9uQ29uZmlndXJhdGlvbi5oOiBSZW1v
dmVkLgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL1NEUFByb2Nlc3NvclNjcmlwdFJl
c291cmNlLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9TRFBQ
cm9jZXNzb3JTY3JpcHRSZXNvdXJjZS5oOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL21l
ZGlhc3RyZWFtL29wZW53ZWJydGMvTWVkaWFFbmRwb2ludE93ci5jcHA6IFJlbW92ZWQuCisgICAg
ICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vb3BlbndlYnJ0Yy9NZWRpYUVuZHBvaW50T3dyLmg6
IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vb3BlbndlYnJ0Yy9PcGVu
V2ViUlRDVXRpbGl0aWVzLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0
cmVhbS9vcGVud2VicnRjL09wZW5XZWJSVENVdGlsaXRpZXMuaDogUmVtb3ZlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9vcGVud2VicnRjL1JlYWx0aW1lQXVkaW9Tb3VyY2VPd3Iu
aDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9vcGVud2VicnRjL1Jl
YWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJPd3IuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRm
b3JtL21lZGlhc3RyZWFtL29wZW53ZWJydGMvUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlck93ci5o
OiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL29wZW53ZWJydGMvUmVh
bHRpbWVNZWRpYVNvdXJjZU93ci5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vbWVk
aWFzdHJlYW0vb3BlbndlYnJ0Yy9SZWFsdGltZU1lZGlhU291cmNlT3dyLmg6IFJlbW92ZWQuCisg
ICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vb3BlbndlYnJ0Yy9SZWFsdGltZVZpZGVvU291
cmNlT3dyLmg6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vbW9jay9Nb2NrTWVkaWFFbmRw
b2ludC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vbW9jay9Nb2NrTWVkaWFFbmRw
b2ludC5oOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL21vY2svTW9ja1JlYWx0aW1lTWVk
aWFTb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TW9ja1JlYWx0aW1lTWVkaWFTb3VyY2U6
Ok1vY2tSZWFsdGltZU1lZGlhU291cmNlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tb2NrL01vY2tS
ZWFsdGltZU1lZGlhU291cmNlLmg6CisgICAgICAgICogdGVzdGluZy9JbnRlcm5hbHMuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjpJbnRlcm5hbHMpOgorICAgICAgICAoV2ViQ29y
ZTo6SW50ZXJuYWxzOjplbmFibGVNb2NrTWVkaWFFbmRwb2ludCk6IERlbGV0ZWQuCisgICAgICAg
ICogdGVzdGluZy9JbnRlcm5hbHMuaDoKKworMjAxNy0xMC0wNCAgWW91ZW5uIEZhYmxldCAgPHlv
dWVubkBhcHBsZS5jb20+CisKICAgICAgICAgQWRkIHF1b3RhIHRvIGNhY2hlIEFQSQogICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc3NTUyCiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNvcmUvQ01h
a2VMaXN0cy50eHQKaW5kZXggMWNjMTZjN2QxZmFiZGVmNjU3OGI0MjIxMTFkYmI1NjVlMzkwNDg5
ZC4uN2YyMmU1MTZmOTdhMjk3ZGQ1NDhlNzVjZWUwODc3YTFjNTYyNWYxYSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VM
aXN0cy50eHQKQEAgLTEwOTMsOCArMTA5Myw2IEBAIHNldChXZWJDb3JlX1NPVVJDRVMKICAgICBN
b2R1bGVzL21lZGlhc3RyZWFtL01lZGlhRGV2aWNlcy5jcHAKICAgICBNb2R1bGVzL21lZGlhc3Ry
ZWFtL01lZGlhRGV2aWNlc0VudW1lcmF0aW9uUmVxdWVzdC5jcHAKICAgICBNb2R1bGVzL21lZGlh
c3RyZWFtL01lZGlhRGV2aWNlc1JlcXVlc3QuY3BwCi0gICAgTW9kdWxlcy9tZWRpYXN0cmVhbS9N
ZWRpYUVuZHBvaW50UGVlckNvbm5lY3Rpb24uY3BwCi0gICAgTW9kdWxlcy9tZWRpYXN0cmVhbS9N
ZWRpYUVuZHBvaW50U2Vzc2lvbkRlc2NyaXB0aW9uLmNwcAogICAgIE1vZHVsZXMvbWVkaWFzdHJl
YW0vTWVkaWFTdHJlYW0uY3BwCiAgICAgTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbUV2
ZW50LmNwcAogICAgIE1vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1SZWdpc3RyeS5jcHAK
QEAgLTExMTYsNyArMTExNCw2IEBAIHNldChXZWJDb3JlX1NPVVJDRVMKICAgICBNb2R1bGVzL21l
ZGlhc3RyZWFtL1JUQ1J0cFRyYW5zY2VpdmVyLmNwcAogICAgIE1vZHVsZXMvbWVkaWFzdHJlYW0v
UlRDU2Vzc2lvbkRlc2NyaXB0aW9uLmNwcAogICAgIE1vZHVsZXMvbWVkaWFzdHJlYW0vUlRDVHJh
Y2tFdmVudC5jcHAKLSAgICBNb2R1bGVzL21lZGlhc3RyZWFtL1NEUFByb2Nlc3Nvci5jcHAKICAg
ICBNb2R1bGVzL21lZGlhc3RyZWFtL1VzZXJNZWRpYUNvbnRyb2xsZXIuY3BwCiAgICAgTW9kdWxl
cy9tZWRpYXN0cmVhbS9Vc2VyTWVkaWFSZXF1ZXN0LmNwcAogCkBAIC0yNTU0LDEzICsyNTUxLDEx
IEBAIHNldChXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGlt
ZU1lZGlhU291cmNlLmNwcAogICAgIHBsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lTWVkaWFT
b3VyY2VDZW50ZXIuY3BwCiAgICAgcGxhdGZvcm0vbWVkaWFzdHJlYW0vUmVhbHRpbWVNZWRpYVNv
dXJjZVNldHRpbmdzLmNwcAotICAgIHBsYXRmb3JtL21lZGlhc3RyZWFtL1NEUFByb2Nlc3NvclNj
cmlwdFJlc291cmNlLmNwcAogCiAgICAgcGxhdGZvcm0vbWVkaWFzdHJlYW0vbGlid2VicnRjL0xp
YldlYlJUQ1Byb3ZpZGVyLmNwcAogCiAgICAgcGxhdGZvcm0vbW9jay9EZXZpY2VPcmllbnRhdGlv
bkNsaWVudE1vY2suY3BwCiAgICAgcGxhdGZvcm0vbW9jay9HZW9sb2NhdGlvbkNsaWVudE1vY2su
Y3BwCi0gICAgcGxhdGZvcm0vbW9jay9Nb2NrTWVkaWFFbmRwb2ludC5jcHAKICAgICBwbGF0Zm9y
bS9tb2NrL01vY2tSZWFsdGltZUF1ZGlvU291cmNlLmNwcAogICAgIHBsYXRmb3JtL21vY2svTW9j
a1JlYWx0aW1lTWVkaWFTb3VyY2UuY3BwCiAgICAgcGxhdGZvcm0vbW9jay9Nb2NrUmVhbHRpbWVN
ZWRpYVNvdXJjZUNlbnRlci5jcHAKQEAgLTM4ODIsMjQgKzM4NzcsNiBAQCBpZiAoV2ViQ29yZV9V
U0VSX0FHRU5UX1NDUklQVFMpCiAgICAgbGlzdChBUFBFTkQgV2ViQ29yZV9ERVJJVkVEX1NPVVJD
RVMgJHtERVJJVkVEX1NPVVJDRVNfV0VCQ09SRV9ESVJ9L1VzZXJBZ2VudFNjcmlwdHNEYXRhLmNw
cCkKIGVuZGlmICgpCiAKLWlmIChFTkFCTEVfV0VCX1JUQykKLSAgICAjIE5lY2Vzc2FyeSB2YXJp
YWJsZXM6Ci0gICAgIyBXZWJDb3JlX1NEUF9QUk9DRVNTT1JfU0NSSVBUUyBjb250YWluaW5nIHRo
ZSBKYXZhU2NyaXB0IHNvdXJjZXMgbGlzdAotICAgICMgV2ViQ29yZV9TRFBfUFJPQ0VTU09SX1ND
UklQVFNfREVQRU5ERU5DSUVTIGNvbnRhaW5pbmcgdGhlIHNvdXJjZSBmaWxlIHRoYXQgd2lsbCBs
b2FkIHRoZSBzY3JpcHRzIHRvIGFkZCB0aGUgcHJvcGVyCi0gICAgIyAgIGRlcGVuZGVuY3kgYW5k
IGhhdmluZyB0aGVtIGJ1aWx0IGF0IHRoZSByaWdodCBtb21lbnQKLSAgICBzZXQoV2ViQ29yZV9T
RFBfUFJPQ0VTU09SX1NDUklQVFMgJHtXRUJDT1JFX0RJUn0vTW9kdWxlcy9tZWRpYXN0cmVhbS9z
ZHAuanMpCi0gICAgc2V0KFdlYkNvcmVfU0RQX1BST0NFU1NPUl9TQ1JJUFRTX0RFUEVOREVOQ0lF
UyAke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9TRFBQcm9jZXNzb3JTY3JpcHRS
ZXNvdXJjZS5jcHApCi0KLSAgICBNQUtFX0pTX0ZJTEVfQVJSQVlTKAotICAgICAgICAke0RFUklW
RURfU09VUkNFU19XRUJDT1JFX0RJUn0vU0RQUHJvY2Vzc29yU2NyaXB0c0RhdGEuY3BwCi0gICAg
ICAgICR7REVSSVZFRF9TT1VSQ0VTX1dFQkNPUkVfRElSfS9TRFBQcm9jZXNzb3JTY3JpcHRzRGF0
YS5oCi0gICAgICAgIFdlYkNvcmUKLSAgICAgICAgV2ViQ29yZV9TRFBfUFJPQ0VTU09SX1NDUklQ
VFMKLSAgICAgICAgV2ViQ29yZV9TRFBfUFJPQ0VTU09SX1NDUklQVFNfREVQRU5ERU5DSUVTCi0g
ICAgKQotICAgIGxpc3QoQVBQRU5EIFdlYkNvcmVfREVSSVZFRF9TT1VSQ0VTICR7REVSSVZFRF9T
T1VSQ0VTX1dFQkNPUkVfRElSfS9TRFBQcm9jZXNzb3JTY3JpcHRzRGF0YS5jcHApCi1lbmRpZiAo
KQotCiAjIEdlbmVyYXRlIHBsdWctaW4gcmVzb3VyY2VzCiBhZGRfY3VzdG9tX2NvbW1hbmQoCiAg
ICAgT1VUUFVUICR7REVSSVZFRF9TT1VSQ0VTX1dFQkNPUkVfRElSfS9QbHVnSW5zUmVzb3VyY2Vz
RGF0YS5jcHAgJHtERVJJVkVEX1NPVVJDRVNfV0VCQ09SRV9ESVJ9L1BsdWdJbnNSZXNvdXJjZXMu
aApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZSBiL1NvdXJj
ZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UKaW5kZXggMWQ1ZWYwMjBiNGMyZTlmYmIwYmUz
MTAxYTgwNzI5ZDdhNjllOWZlZS4uZDM2YTE5ODdjNmQwN2FiMGFjNTQ0NzU5NmExYjRhNGQzYjgx
OGY3ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtlCkBAIC0xMTg0LDIzICsxMTg0LDYg
QEAgQ29sb3JEYXRhLmNwcCA6IHBsYXRmb3JtL0NvbG9yRGF0YS5ncGVyZiAkKFdlYkNvcmUpL21h
a2UtaGFzaC10b29scy5wbAogCiAjIC0tLS0tLS0tCiAKLSMgV2ViUlRDIHNjcmlwdHMKLQotV0VC
Q09SRV9TRFBfUFJPQ0VTU09SX1NDUklQVFMgPSAKLQotaWZlcSAoJChPUyksTUFDT1MpCi0gICAg
V0VCQ09SRV9TRFBfUFJPQ0VTU09SX1NDUklQVFMgOj0gJChXRUJDT1JFX1NEUF9QUk9DRVNTT1Jf
U0NSSVBUUykgJChXZWJDb3JlKS9Nb2R1bGVzL21lZGlhc3RyZWFtL3NkcC5qcwotZW5kaWYKLQot
aWZkZWYgV0VCQ09SRV9TRFBfUFJPQ0VTU09SX1NDUklQVFMKLWFsbCA6IFNEUFByb2Nlc3NvclNj
cmlwdHNEYXRhLmgKLQotU0RQUHJvY2Vzc29yU2NyaXB0c0RhdGEuaCA6ICQoSmF2YVNjcmlwdENv
cmVfU0NSSVBUU19ESVIpL21ha2UtanMtZmlsZS1hcnJheXMucHkgJChXRUJDT1JFX1NEUF9QUk9D
RVNTT1JfU0NSSVBUUykKLQkkKFBZVEhPTikgJChKYXZhU2NyaXB0Q29yZV9TQ1JJUFRTX0RJUikv
bWFrZS1qcy1maWxlLWFycmF5cy5weSAtbiBXZWJDb3JlICRAIFNEUFByb2Nlc3NvclNjcmlwdHNE
YXRhLmNwcCAkKFdFQkNPUkVfU0RQX1BST0NFU1NPUl9TQ1JJUFRTKQotZW5kaWYKLQotIyAtLS0t
LS0tLQotCiAjIHVzZXIgYWdlbnQgc3R5bGUgc2hlZXRzCiAKIFVTRVJfQUdFTlRfU1RZTEVfU0hF
RVRTID0gJChXZWJDb3JlKS9jc3MvaHRtbC5jc3MgJChXZWJDb3JlKS9jc3MvcXVpcmtzLmNzcyAk
KFdlYkNvcmUpL2Nzcy9wbHVnSW5zLmNzcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9tZWRpYXN0cmVhbS9NZWRpYUVuZHBvaW50UGVlckNvbm5lY3Rpb24uY3BwIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYUVuZHBvaW50UGVlckNvbm5lY3Rpb24u
Y3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZTkyNTI3YWUyZmQ2NzZhNzczOWQ0
Zjc5Yzk2ZGY2NmZlMDViMGEwLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFFbmRwb2lu
dFBlZXJDb25uZWN0aW9uLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDg5MyArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDE1IEVyaWNzc29uIEFCLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogICAgaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICog
ICAgZGlzdHJpYnV0aW9uLgotICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBFcmljc3NvbiBub3Ig
dGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotICogICAgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
LSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0j
aW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiTWVkaWFFbmRwb2ludFBlZXJDb25uZWN0aW9u
LmgiCi0KLSNpZiBFTkFCTEUoV0VCX1JUQykKLQotI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKLSNp
bmNsdWRlICJKU1JUQ1Nlc3Npb25EZXNjcmlwdGlvbi5oIgotI2luY2x1ZGUgIk1lZGlhRW5kcG9p
bnRTZXNzaW9uQ29uZmlndXJhdGlvbi5oIgotI2luY2x1ZGUgIk1lZGlhRW5kcG9pbnRTZXNzaW9u
RGVzY3JpcHRpb24uaCIKLSNpbmNsdWRlICJNZWRpYVN0cmVhbS5oIgotI2luY2x1ZGUgIk1lZGlh
U3RyZWFtRXZlbnQuaCIKLSNpbmNsdWRlICJNZWRpYVN0cmVhbVRyYWNrLmgiCi0jaW5jbHVkZSAi
Tm90SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlICJQZWVyTWVkaWFEZXNjcmlwdGlvbi5oIgotI2lu
Y2x1ZGUgIlJUQ0Fuc3dlck9wdGlvbnMuaCIKLSNpbmNsdWRlICJSVENDb25maWd1cmF0aW9uLmgi
Ci0jaW5jbHVkZSAiUlRDSWNlQ2FuZGlkYXRlLmgiCi0jaW5jbHVkZSAiUlRDT2ZmZXJPcHRpb25z
LmgiCi0jaW5jbHVkZSAiUlRDUGVlckNvbm5lY3Rpb24uaCIKLSNpbmNsdWRlICJSVENQZWVyQ29u
bmVjdGlvbkljZUV2ZW50LmgiCi0jaW5jbHVkZSAiUlRDUnRwVHJhbnNjZWl2ZXIuaCIKLSNpbmNs
dWRlICJSVENUcmFja0V2ZW50LmgiCi0jaW5jbHVkZSAiU0RQUHJvY2Vzc29yLmgiCi0jaW5jbHVk
ZSA8d3RmL0Z1bmN0aW9uLmg+Ci0jaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KLSNpbmNsdWRl
IDx3dGYvdGV4dC9CYXNlNjQuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi11c2luZyBuYW1l
c3BhY2UgUGVlckNvbm5lY3Rpb247Ci0KLXVzaW5nIE1lZGlhRGVzY3JpcHRpb25WZWN0b3IgPSBW
ZWN0b3I8UGVlck1lZGlhRGVzY3JpcHRpb24+OwotdXNpbmcgUnRwVHJhbnNjZWl2ZXJWZWN0b3Ig
PSBWZWN0b3I8UmVmUHRyPFJUQ1J0cFRyYW5zY2VpdmVyPj47Ci0KLS8vIFdlIHVzZSBiYXNlNjQg
dG8gZ2VuZXJhdGUgdGhlIHJhbmRvbSBzdHJpbmdzIHNvIHdlIG5lZWQgYSBzaXplIHRoYXQgYXZv
aWRzIHBhZGRpbmcgdG8gZ2V0IGljZS1jaGFycy4KLXN0YXRpYyBjb25zdCBzaXplX3QgY25hbWVT
aXplID0gMTg7Ci0vLyBTaXplIHJhbmdlIGZyb20gNCB0byAyNTYgaWNlLWNoYXJzIGRlZmluZWQg
aW4gUkZDIDUyNDUuCi1zdGF0aWMgY29uc3Qgc2l6ZV90IGljZVVmcmFnU2l6ZSA9IDY7Ci0vLyBT
aXplIHJhbmdlIGZyb20gMjIgdG8gMjU2IGljZS1jaGFycyBkZWZpbmVkIGluIFJGQyA1MjQ1Lgot
c3RhdGljIGNvbnN0IHNpemVfdCBpY2VQYXNzd29yZFNpemUgPSAyNDsKLQotI2lmICFVU0UoTElC
V0VCUlRDKQotc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxQZWVyQ29ubmVjdGlvbkJhY2tlbmQ+IGNy
ZWF0ZU1lZGlhRW5kcG9pbnRQZWVyQ29ubmVjdGlvbihSVENQZWVyQ29ubmVjdGlvbiYgcGVlckNv
bm5lY3Rpb24pCi17Ci0gICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxQZWVyQ29ubmVjdGlvbkJh
Y2tlbmQ+KG5ldyBNZWRpYUVuZHBvaW50UGVlckNvbm5lY3Rpb24ocGVlckNvbm5lY3Rpb24pKTsK
LX0KLQotQ3JlYXRlUGVlckNvbm5lY3Rpb25CYWNrZW5kIFBlZXJDb25uZWN0aW9uQmFja2VuZDo6
Y3JlYXRlID0gY3JlYXRlTWVkaWFFbmRwb2ludFBlZXJDb25uZWN0aW9uOwotI2VuZGlmCi0KLXN0
YXRpYyBTdHJpbmcgcmFuZG9tU3RyaW5nKHNpemVfdCBzaXplKQotewotICAgIHVuc2lnbmVkIGNo
YXIgcmFuZG9tVmFsdWVzW3NpemVdOwotICAgIGNyeXB0b2dyYXBoaWNhbGx5UmFuZG9tVmFsdWVz
KHJhbmRvbVZhbHVlcywgc2l6ZSk7Ci0gICAgcmV0dXJuIGJhc2U2NEVuY29kZShyYW5kb21WYWx1
ZXMsIHNpemUpOwotfQotCi1NZWRpYUVuZHBvaW50UGVlckNvbm5lY3Rpb246Ok1lZGlhRW5kcG9p
bnRQZWVyQ29ubmVjdGlvbihSVENQZWVyQ29ubmVjdGlvbiYgcGVlckNvbm5lY3Rpb24pCi0gICAg
OiBQZWVyQ29ubmVjdGlvbkJhY2tlbmQocGVlckNvbm5lY3Rpb24pCi0gICAgLCBtX21lZGlhRW5k
cG9pbnQoTWVkaWFFbmRwb2ludDo6Y3JlYXRlKCp0aGlzKSkKLSAgICAsIG1fc2RwUHJvY2Vzc29y
KHN0ZDo6bWFrZV91bmlxdWU8U0RQUHJvY2Vzc29yPihtX3BlZXJDb25uZWN0aW9uLnNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoKSkpCi0gICAgLCBtX2NuYW1lKHJhbmRvbVN0cmluZyhjbmFtZVNpemUp
KQotICAgICwgbV9pY2VVZnJhZyhyYW5kb21TdHJpbmcoaWNlVWZyYWdTaXplKSkKLSAgICAsIG1f
aWNlUGFzc3dvcmQocmFuZG9tU3RyaW5nKGljZVBhc3N3b3JkU2l6ZSkpCi17Ci0gICAgQVNTRVJU
KG1fbWVkaWFFbmRwb2ludCk7Ci0KLSAgICBtX2RlZmF1bHRBdWRpb1BheWxvYWRzID0gbV9tZWRp
YUVuZHBvaW50LT5nZXREZWZhdWx0QXVkaW9QYXlsb2FkcygpOwotICAgIG1fZGVmYXVsdFZpZGVv
UGF5bG9hZHMgPSBtX21lZGlhRW5kcG9pbnQtPmdldERlZmF1bHRWaWRlb1BheWxvYWRzKCk7Ci0K
LSAgICAvLyBUYXNrcyAoc2VlIHJ1blRhc2soKSkgd2lsbCBiZSBkZWZlcnJlZCB1bnRpbCB3ZSBn
ZXQgdGhlIERUTFMgZmluZ2VycHJpbnQuCi0gICAgbV9tZWRpYUVuZHBvaW50LT5nZW5lcmF0ZUR0
bHNJbmZvKCk7Ci19Ci0KLXN0YXRpYyBSVENSdHBUcmFuc2NlaXZlciogbWF0Y2hUcmFuc2NlaXZl
cihjb25zdCBSdHBUcmFuc2NlaXZlclZlY3RvciYgdHJhbnNjZWl2ZXJzLCBjb25zdCBXVEY6OkZ1
bmN0aW9uPGJvb2woUlRDUnRwVHJhbnNjZWl2ZXImKT4mIG1hdGNoRnVuY3Rpb24pCi17Ci0gICAg
Zm9yIChhdXRvJiB0cmFuc2NlaXZlciA6IHRyYW5zY2VpdmVycykgewotICAgICAgICBpZiAobWF0
Y2hGdW5jdGlvbigqdHJhbnNjZWl2ZXIpKQotICAgICAgICAgICAgcmV0dXJuIHRyYW5zY2VpdmVy
LmdldCgpOwotICAgIH0KLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQotc3RhdGljIFJUQ1J0cFRy
YW5zY2VpdmVyKiBtYXRjaFRyYW5zY2VpdmVyQnlNaWQoY29uc3QgUnRwVHJhbnNjZWl2ZXJWZWN0
b3ImIHRyYW5zY2VpdmVycywgY29uc3QgU3RyaW5nJiBtaWQpCi17Ci0gICAgcmV0dXJuIG1hdGNo
VHJhbnNjZWl2ZXIodHJhbnNjZWl2ZXJzLCBbJm1pZF0gKFJUQ1J0cFRyYW5zY2VpdmVyJiBjdXJy
ZW50KSB7Ci0gICAgICAgIHJldHVybiBjdXJyZW50Lm1pZCgpID09IG1pZDsKLSAgICB9KTsKLX0K
LQotc3RhdGljIGJvb2wgaGFzVW5hc3NvY2lhdGVkVHJhbnNjZWl2ZXJzKGNvbnN0IFJ0cFRyYW5z
Y2VpdmVyVmVjdG9yJiB0cmFuc2NlaXZlcnMpCi17Ci0gICAgcmV0dXJuIG1hdGNoVHJhbnNjZWl2
ZXIodHJhbnNjZWl2ZXJzLCBbXSAoUlRDUnRwVHJhbnNjZWl2ZXImIGN1cnJlbnQpIHsKLSAgICAg
ICAgcmV0dXJuIGN1cnJlbnQubWlkKCkuaXNOdWxsKCkgJiYgIWN1cnJlbnQuc3RvcHBlZCgpOwot
ICAgIH0pOwotfQotCi12b2lkIE1lZGlhRW5kcG9pbnRQZWVyQ29ubmVjdGlvbjo6cnVuVGFzayhG
dW5jdGlvbjx2b2lkICgpPiYmIHRhc2spCi17Ci0gICAgaWYgKG1fZHRsc0ZpbmdlcnByaW50Lmlz
TnVsbCgpKSB7Ci0gICAgICAgIC8vIE9ubHkgb25lIHRhc2sgbmVlZHMgdG8gYmUgZGVmZXJyZWQg
c2luY2UgaXQgd2lsbCBob2xkIG9mZiBhbnkgb3RoZXJzIHVudGlsIGNvbXBsZXRlZC4KLSAgICAg
ICAgQVNTRVJUKCFtX2luaXRpYWxEZWZlcnJlZFRhc2spOwotICAgICAgICBtX2luaXRpYWxEZWZl
cnJlZFRhc2sgPSBXVEZNb3ZlKHRhc2spOwotICAgIH0gZWxzZQotICAgICAgICBjYWxsT25NYWlu
VGhyZWFkKFdURk1vdmUodGFzaykpOwotfQotCi12b2lkIE1lZGlhRW5kcG9pbnRQZWVyQ29ubmVj
dGlvbjo6c3RhcnRSdW5uaW5nVGFza3MoKQotewotICAgIGlmICghbV9pbml0aWFsRGVmZXJyZWRU
YXNrKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2luaXRpYWxEZWZlcnJlZFRhc2soKTsKLSAg
ICBtX2luaXRpYWxEZWZlcnJlZFRhc2sgPSBudWxscHRyOwotfQotCi12b2lkIE1lZGlhRW5kcG9p
bnRQZWVyQ29ubmVjdGlvbjo6ZG9DcmVhdGVPZmZlcihSVENPZmZlck9wdGlvbnMmJiBvcHRpb25z
KQotewotICAgIHJ1blRhc2soW3RoaXMsIHByb3RlY3RlZE9wdGlvbnMgPSBXVEZNb3ZlKG9wdGlv
bnMpXSgpIG11dGFibGUgewotICAgICAgICBjcmVhdGVPZmZlclRhc2socHJvdGVjdGVkT3B0aW9u
cyk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgTWVkaWFFbmRwb2ludFBlZXJDb25uZWN0aW9uOjpjcmVh
dGVPZmZlclRhc2soY29uc3QgUlRDT2ZmZXJPcHRpb25zJikKLXsKLSAgICBBU1NFUlQoIW1fZHRs
c0ZpbmdlcnByaW50LmlzRW1wdHkoKSk7Ci0KLSAgICBNZWRpYUVuZHBvaW50U2Vzc2lvbkRlc2Ny
aXB0aW9uKiBsb2NhbERlc2NyaXB0aW9uID0gaW50ZXJuYWxMb2NhbERlc2NyaXB0aW9uKCk7Ci0g
ICAgUmVmUHRyPE1lZGlhRW5kcG9pbnRTZXNzaW9uQ29uZmlndXJhdGlvbj4gY29uZmlndXJhdGlv
blNuYXBzaG90ID0gbG9jYWxEZXNjcmlwdGlvbiA/Ci0gICAgICAgIGxvY2FsRGVzY3JpcHRpb24t
PmNvbmZpZ3VyYXRpb24oKS0+Y2xvbmUoKSA6IE1lZGlhRW5kcG9pbnRTZXNzaW9uQ29uZmlndXJh
dGlvbjo6Y3JlYXRlKCk7Ci0KLSAgICBjb25maWd1cmF0aW9uU25hcHNob3QtPnNldEJ1bmRsZVBv
bGljeShtX3BlZXJDb25uZWN0aW9uLmdldENvbmZpZ3VyYXRpb24oKS5idW5kbGVQb2xpY3kpOwot
ICAgIGNvbmZpZ3VyYXRpb25TbmFwc2hvdC0+c2V0U2Vzc2lvblZlcnNpb24obV9zZHBPZmZlclNl
c3Npb25WZXJzaW9uKyspOwotCi0gICAgYXV0byB0cmFuc2NlaXZlcnMgPSBSdHBUcmFuc2NlaXZl
clZlY3RvcihtX3BlZXJDb25uZWN0aW9uLmdldFRyYW5zY2VpdmVycygpKTsKLQotICAgIC8vIFJl
bW92ZSBhbnkgdHJhbnNjZWl2ZXIgb2JqZWN0cyBmcm9tIHRyYW5zY2VpdmVycyB0aGF0IGNhbiBi
ZSBtYXRjaGVkIHRvIGFuIGV4aXN0aW5nIG1lZGlhIGRlc2NyaXB0aW9uLgotICAgIGZvciAoYXV0
byYgbWVkaWFEZXNjcmlwdGlvbiA6IGNvbmZpZ3VyYXRpb25TbmFwc2hvdC0+bWVkaWFEZXNjcmlw
dGlvbnMoKSkgewotICAgICAgICBpZiAoIW1lZGlhRGVzY3JpcHRpb24ucG9ydCkgewotICAgICAg
ICAgICAgLy8gVGhpcyBtZWRpYSBkZXNjcmlwdGlvbiBzaG91bGQgYmUgcmVjeWNsZWQuCi0gICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIFJUQ1J0cFRyYW5zY2VpdmVy
KiB0cmFuc2NlaXZlciA9IG1hdGNoVHJhbnNjZWl2ZXJCeU1pZCh0cmFuc2NlaXZlcnMsIG1lZGlh
RGVzY3JpcHRpb24ubWlkKTsKLSAgICAgICAgaWYgKCF0cmFuc2NlaXZlcikKLSAgICAgICAgICAg
IGNvbnRpbnVlOwotCi0gICAgICAgIG1lZGlhRGVzY3JpcHRpb24ubW9kZSA9IHRyYW5zY2VpdmVy
LT5kaXJlY3Rpb25TdHJpbmcoKTsKLSAgICAgICAgaWYgKHRyYW5zY2VpdmVyLT5oYXNTZW5kaW5n
RGlyZWN0aW9uKCkpIHsKLSAgICAgICAgICAgIGF1dG8mIHNlbmRlciA9IHRyYW5zY2VpdmVyLT5z
ZW5kZXIoKTsKLQotICAgICAgICAgICAgbWVkaWFEZXNjcmlwdGlvbi5tZWRpYVN0cmVhbUlkID0g
c2VuZGVyLm1lZGlhU3RyZWFtSWRzKClbMF07Ci0gICAgICAgICAgICBtZWRpYURlc2NyaXB0aW9u
Lm1lZGlhU3RyZWFtVHJhY2tJZCA9IHNlbmRlci50cmFja0lkKCk7Ci0gICAgICAgIH0KLQotICAg
ICAgICB0cmFuc2NlaXZlcnMucmVtb3ZlRmlyc3QodHJhbnNjZWl2ZXIpOwotICAgIH0KLQotICAg
IC8vIEFkZCBtZWRpYSBkZXNjcmlwdGlvbnMgZm9yIHJlbWFpbmluZyB0cmFuc2NlaXZlcnMuCi0g
ICAgZm9yIChhdXRvJiB0cmFuc2NlaXZlciA6IHRyYW5zY2VpdmVycykgewotICAgICAgICBQZWVy
TWVkaWFEZXNjcmlwdGlvbiBtZWRpYURlc2NyaXB0aW9uOwotICAgICAgICBhdXRvJiBzZW5kZXIg
PSB0cmFuc2NlaXZlci0+c2VuZGVyKCk7Ci0KLSAgICAgICAgbWVkaWFEZXNjcmlwdGlvbi5tb2Rl
ID0gdHJhbnNjZWl2ZXItPmRpcmVjdGlvblN0cmluZygpOwotICAgICAgICBtZWRpYURlc2NyaXB0
aW9uLm1pZCA9IHRyYW5zY2VpdmVyLT5wcm92aXNpb25hbE1pZCgpOwotICAgICAgICBtZWRpYURl
c2NyaXB0aW9uLm1lZGlhU3RyZWFtSWQgPSBzZW5kZXIubWVkaWFTdHJlYW1JZHMoKVswXTsKLSAg
ICAgICAgbWVkaWFEZXNjcmlwdGlvbi50eXBlID0gc2VuZGVyLnRyYWNrS2luZCgpOwotICAgICAg
ICBtZWRpYURlc2NyaXB0aW9uLnBheWxvYWRzID0gc2VuZGVyLnRyYWNrS2luZCgpID09ICJhdWRp
byIgPyBtX2RlZmF1bHRBdWRpb1BheWxvYWRzIDogbV9kZWZhdWx0VmlkZW9QYXlsb2FkczsKLSAg
ICAgICAgbWVkaWFEZXNjcmlwdGlvbi5kdGxzRmluZ2VycHJpbnRIYXNoRnVuY3Rpb24gPSBtX2R0
bHNGaW5nZXJwcmludEZ1bmN0aW9uOwotICAgICAgICBtZWRpYURlc2NyaXB0aW9uLmR0bHNGaW5n
ZXJwcmludCA9IG1fZHRsc0ZpbmdlcnByaW50OwotICAgICAgICBtZWRpYURlc2NyaXB0aW9uLmNu
YW1lID0gbV9jbmFtZTsKLSAgICAgICAgbWVkaWFEZXNjcmlwdGlvbi5hZGRTc3JjKGNyeXB0b2dy
YXBoaWNhbGx5UmFuZG9tTnVtYmVyKCkpOwotICAgICAgICBtZWRpYURlc2NyaXB0aW9uLmljZVVm
cmFnID0gbV9pY2VVZnJhZzsKLSAgICAgICAgbWVkaWFEZXNjcmlwdGlvbi5pY2VQYXNzd29yZCA9
IG1faWNlUGFzc3dvcmQ7Ci0KLSAgICAgICAgaWYgKHNlbmRlci50cmFjaygpKQotICAgICAgICAg
ICAgbWVkaWFEZXNjcmlwdGlvbi5tZWRpYVN0cmVhbVRyYWNrSWQgPSBzZW5kZXIudHJhY2tJZCgp
OwotCi0gICAgICAgIGNvbmZpZ3VyYXRpb25TbmFwc2hvdC0+YWRkTWVkaWFEZXNjcmlwdGlvbihX
VEZNb3ZlKG1lZGlhRGVzY3JpcHRpb24pKTsKLSAgICB9Ci0KLSAgICBTdHJpbmcgc2RwOwotICAg
IFNEUFByb2Nlc3Nvcjo6UmVzdWx0IHJlc3VsdCA9IG1fc2RwUHJvY2Vzc29yLT5nZW5lcmF0ZSgq
Y29uZmlndXJhdGlvblNuYXBzaG90LCBzZHApOwotICAgIGlmIChyZXN1bHQgIT0gU0RQUHJvY2Vz
c29yOjpSZXN1bHQ6OlN1Y2Nlc3MpIHsKLSAgICAgICAgY3JlYXRlT2ZmZXJGYWlsZWQoRXhjZXB0
aW9uIHsgT3BlcmF0aW9uRXJyb3IsICJTRFBQcm9jZXNzb3IgaW50ZXJuYWwgZXJyb3IiIH0pOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGNyZWF0ZU9mZmVyU3VjY2VlZGVkKFdURk1vdmUo
c2RwKSk7Ci19Ci0KLXZvaWQgTWVkaWFFbmRwb2ludFBlZXJDb25uZWN0aW9uOjpkb0NyZWF0ZUFu
c3dlcihSVENBbnN3ZXJPcHRpb25zJiYgb3B0aW9ucykKLXsKLSAgICBydW5UYXNrKFt0aGlzLCBw
cm90ZWN0ZWRPcHRpb25zID0gV1RGTW92ZShvcHRpb25zKV0oKSBtdXRhYmxlIHsKLSAgICAgICAg
Y3JlYXRlQW5zd2VyVGFzayhwcm90ZWN0ZWRPcHRpb25zKTsKLSAgICB9KTsKLX0KLQotdm9pZCBN
ZWRpYUVuZHBvaW50UGVlckNvbm5lY3Rpb246OmNyZWF0ZUFuc3dlclRhc2soY29uc3QgUlRDQW5z
d2VyT3B0aW9ucyYpCi17Ci0gICAgQVNTRVJUKCFtX2R0bHNGaW5nZXJwcmludC5pc0VtcHR5KCkp
OwotCi0gICAgaWYgKCFpbnRlcm5hbFJlbW90ZURlc2NyaXB0aW9uKCkpIHsKLSAgICAgICAgY3Jl
YXRlQW5zd2VyRmFpbGVkKEV4Y2VwdGlvbiB7IEludmFsaWRTdGF0ZUVycm9yLCAiTm8gcmVtb3Rl
IGRlc2NyaXB0aW9uIHNldCIgfSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBNZWRp
YUVuZHBvaW50U2Vzc2lvbkRlc2NyaXB0aW9uKiBsb2NhbERlc2NyaXB0aW9uID0gaW50ZXJuYWxM
b2NhbERlc2NyaXB0aW9uKCk7Ci0gICAgUmVmUHRyPE1lZGlhRW5kcG9pbnRTZXNzaW9uQ29uZmln
dXJhdGlvbj4gY29uZmlndXJhdGlvblNuYXBzaG90ID0gbG9jYWxEZXNjcmlwdGlvbiA/Ci0gICAg
ICAgIGxvY2FsRGVzY3JpcHRpb24tPmNvbmZpZ3VyYXRpb24oKS0+Y2xvbmUoKSA6IE1lZGlhRW5k
cG9pbnRTZXNzaW9uQ29uZmlndXJhdGlvbjo6Y3JlYXRlKCk7Ci0KLSAgICBjb25maWd1cmF0aW9u
U25hcHNob3QtPnNldEJ1bmRsZVBvbGljeShtX3BlZXJDb25uZWN0aW9uLmdldENvbmZpZ3VyYXRp
b24oKS5idW5kbGVQb2xpY3kpOwotICAgIGNvbmZpZ3VyYXRpb25TbmFwc2hvdC0+c2V0U2Vzc2lv
blZlcnNpb24obV9zZHBBbnN3ZXJTZXNzaW9uVmVyc2lvbisrKTsKLQotICAgIGF1dG8gdHJhbnNj
ZWl2ZXJzID0gUnRwVHJhbnNjZWl2ZXJWZWN0b3IobV9wZWVyQ29ubmVjdGlvbi5nZXRUcmFuc2Nl
aXZlcnMoKSk7Ci0gICAgYXV0byYgcmVtb3RlTWVkaWFEZXNjcmlwdGlvbnMgPSBpbnRlcm5hbFJl
bW90ZURlc2NyaXB0aW9uKCktPmNvbmZpZ3VyYXRpb24oKS0+bWVkaWFEZXNjcmlwdGlvbnMoKTsK
LQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCByZW1vdGVNZWRpYURlc2NyaXB0aW9ucy5z
aXplKCk7ICsraSkgewotICAgICAgICBhdXRvJiByZW1vdGVNZWRpYURlc2NyaXB0aW9uID0gcmVt
b3RlTWVkaWFEZXNjcmlwdGlvbnNbaV07Ci0KLSAgICAgICAgYXV0byogdHJhbnNjZWl2ZXIgPSBt
YXRjaFRyYW5zY2VpdmVyQnlNaWQodHJhbnNjZWl2ZXJzLCByZW1vdGVNZWRpYURlc2NyaXB0aW9u
Lm1pZCk7Ci0gICAgICAgIGlmICghdHJhbnNjZWl2ZXIpIHsKLSAgICAgICAgICAgIExPR19FUlJP
UigiQ291bGQgbm90IGZpbmQgYSBtYXRjaGluZyB0cmFuc2NlaXZlciBmb3IgcmVtb3RlIGRlc2Ny
aXB0aW9uIHdoaWxlIGNyZWF0aW5nIGFuc3dlciIpOwotICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgIH0KLQotICAgICAgICBpZiAoaSA+PSBjb25maWd1cmF0aW9uU25hcHNob3QtPm1lZGlh
RGVzY3JpcHRpb25zKCkuc2l6ZSgpKSB7Ci0gICAgICAgICAgICBQZWVyTWVkaWFEZXNjcmlwdGlv
biBuZXdNZWRpYURlc2NyaXB0aW9uOwotCi0gICAgICAgICAgICBhdXRvJiBzZW5kZXIgPSB0cmFu
c2NlaXZlci0+c2VuZGVyKCk7Ci0gICAgICAgICAgICBpZiAoc2VuZGVyLnRyYWNrKCkpIHsKLSAg
ICAgICAgICAgICAgICBpZiAoc2VuZGVyLm1lZGlhU3RyZWFtSWRzKCkuc2l6ZSgpKQotICAgICAg
ICAgICAgICAgICAgICBuZXdNZWRpYURlc2NyaXB0aW9uLm1lZGlhU3RyZWFtSWQgPSBzZW5kZXIu
bWVkaWFTdHJlYW1JZHMoKVswXTsKLSAgICAgICAgICAgICAgICBuZXdNZWRpYURlc2NyaXB0aW9u
Lm1lZGlhU3RyZWFtVHJhY2tJZCA9IHNlbmRlci50cmFja0lkKCk7Ci0gICAgICAgICAgICAgICAg
bmV3TWVkaWFEZXNjcmlwdGlvbi5hZGRTc3JjKGNyeXB0b2dyYXBoaWNhbGx5UmFuZG9tTnVtYmVy
KCkpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBuZXdNZWRpYURlc2NyaXB0aW9uLm1v
ZGUgPSB0cmFuc2NlaXZlci0+ZGlyZWN0aW9uU3RyaW5nKCk7Ci0gICAgICAgICAgICBuZXdNZWRp
YURlc2NyaXB0aW9uLnR5cGUgPSByZW1vdGVNZWRpYURlc2NyaXB0aW9uLnR5cGU7Ci0gICAgICAg
ICAgICBuZXdNZWRpYURlc2NyaXB0aW9uLm1pZCA9IHJlbW90ZU1lZGlhRGVzY3JpcHRpb24ubWlk
OwotICAgICAgICAgICAgbmV3TWVkaWFEZXNjcmlwdGlvbi5kdGxzU2V0dXAgPSByZW1vdGVNZWRp
YURlc2NyaXB0aW9uLmR0bHNTZXR1cCA9PSAiYWN0aXZlIiA/ICJwYXNzaXZlIiA6ICJhY3RpdmUi
OwotICAgICAgICAgICAgbmV3TWVkaWFEZXNjcmlwdGlvbi5kdGxzRmluZ2VycHJpbnRIYXNoRnVu
Y3Rpb24gPSBtX2R0bHNGaW5nZXJwcmludEZ1bmN0aW9uOwotICAgICAgICAgICAgbmV3TWVkaWFE
ZXNjcmlwdGlvbi5kdGxzRmluZ2VycHJpbnQgPSBtX2R0bHNGaW5nZXJwcmludDsKLSAgICAgICAg
ICAgIG5ld01lZGlhRGVzY3JpcHRpb24uY25hbWUgPSBtX2NuYW1lOwotICAgICAgICAgICAgbmV3
TWVkaWFEZXNjcmlwdGlvbi5pY2VVZnJhZyA9IG1faWNlVWZyYWc7Ci0gICAgICAgICAgICBuZXdN
ZWRpYURlc2NyaXB0aW9uLmljZVBhc3N3b3JkID0gbV9pY2VQYXNzd29yZDsKLQotICAgICAgICAg
ICAgY29uZmlndXJhdGlvblNuYXBzaG90LT5hZGRNZWRpYURlc2NyaXB0aW9uKFdURk1vdmUobmV3
TWVkaWFEZXNjcmlwdGlvbikpOwotICAgICAgICB9Ci0KLSAgICAgICAgUGVlck1lZGlhRGVzY3Jp
cHRpb24mIGxvY2FsTWVkaWFEZXNjcmlwdGlvbiA9IGNvbmZpZ3VyYXRpb25TbmFwc2hvdC0+bWVk
aWFEZXNjcmlwdGlvbnMoKVtpXTsKLQotICAgICAgICBsb2NhbE1lZGlhRGVzY3JpcHRpb24ucGF5
bG9hZHMgPSByZW1vdGVNZWRpYURlc2NyaXB0aW9uLnBheWxvYWRzOwotICAgICAgICBsb2NhbE1l
ZGlhRGVzY3JpcHRpb24ucnRjcE11eCA9IHJlbW90ZU1lZGlhRGVzY3JpcHRpb24ucnRjcE11eDsK
LQotICAgICAgICBpZiAoIWxvY2FsTWVkaWFEZXNjcmlwdGlvbi5zc3Jjcy5zaXplKCkpCi0gICAg
ICAgICAgICBsb2NhbE1lZGlhRGVzY3JpcHRpb24uYWRkU3NyYyhjcnlwdG9ncmFwaGljYWxseVJh
bmRvbU51bWJlcigpKTsKLQotICAgICAgICBpZiAobG9jYWxNZWRpYURlc2NyaXB0aW9uLmR0bHNT
ZXR1cCA9PSAiYWN0cGFzcyIpCi0gICAgICAgICAgICBsb2NhbE1lZGlhRGVzY3JpcHRpb24uZHRs
c1NldHVwID0gInBhc3NpdmUiOwotCi0gICAgICAgIHRyYW5zY2VpdmVycy5yZW1vdmVGaXJzdCh0
cmFuc2NlaXZlcik7Ci0gICAgfQotCi0gICAgLy8gVW5hc3NvY2lhdGVkIChub24tc3RvcHBlZCkg
dHJhbnNjZWl2ZXJzIG5lZWQgdG8gYmUgbmVnb3RpYXRlZCBpbiBhIGZvbGxvdy11cCBvZmZlci4K
LSAgICBpZiAoaGFzVW5hc3NvY2lhdGVkVHJhbnNjZWl2ZXJzKHRyYW5zY2VpdmVycykpCi0gICAg
ICAgIG1hcmtBc05lZWRpbmdOZWdvdGlhdGlvbigpOwotCi0gICAgU3RyaW5nIHNkcDsKLSAgICBT
RFBQcm9jZXNzb3I6OlJlc3VsdCByZXN1bHQgPSBtX3NkcFByb2Nlc3Nvci0+Z2VuZXJhdGUoKmNv
bmZpZ3VyYXRpb25TbmFwc2hvdCwgc2RwKTsKLSAgICBpZiAocmVzdWx0ICE9IFNEUFByb2Nlc3Nv
cjo6UmVzdWx0OjpTdWNjZXNzKSB7Ci0gICAgICAgIGNyZWF0ZUFuc3dlckZhaWxlZChFeGNlcHRp
b24geyBPcGVyYXRpb25FcnJvciwgIlNEUFByb2Nlc3NvciBpbnRlcm5hbCBlcnJvciIgfSk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgY3JlYXRlQW5zd2VyU3VjY2VlZGVkKFdURk1vdmUo
c2RwKSk7Ci19Ci0KLXN0YXRpYyBSZWFsdGltZU1lZGlhU291cmNlTWFwIGNyZWF0ZVNvdXJjZU1h
cChjb25zdCBNZWRpYURlc2NyaXB0aW9uVmVjdG9yJiByZW1vdGVNZWRpYURlc2NyaXB0aW9ucywg
dW5zaWduZWQgbG9jYWxNZWRpYURlc2NyaXB0aW9uQ291bnQsIGNvbnN0IFJ0cFRyYW5zY2VpdmVy
VmVjdG9yJiB0cmFuc2NlaXZlcnMpCi17Ci0gICAgUmVhbHRpbWVNZWRpYVNvdXJjZU1hcCBzb3Vy
Y2VNYXA7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcmVtb3RlTWVkaWFEZXNjcmlw
dGlvbnMuc2l6ZSgpICYmIGkgPCBsb2NhbE1lZGlhRGVzY3JpcHRpb25Db3VudDsgKytpKSB7Ci0g
ICAgICAgIGF1dG8mIHJlbW90ZU1lZGlhRGVzY3JpcHRpb24gPSByZW1vdGVNZWRpYURlc2NyaXB0
aW9uc1tpXTsKLSAgICAgICAgaWYgKHJlbW90ZU1lZGlhRGVzY3JpcHRpb24udHlwZSAhPSAiYXVk
aW8iICYmIHJlbW90ZU1lZGlhRGVzY3JpcHRpb24udHlwZSAhPSAidmlkZW8iKQotICAgICAgICAg
ICAgY29udGludWU7Ci0KLSAgICAgICAgUlRDUnRwVHJhbnNjZWl2ZXIqIHRyYW5zY2VpdmVyID0g
bWF0Y2hUcmFuc2NlaXZlckJ5TWlkKHRyYW5zY2VpdmVycywgcmVtb3RlTWVkaWFEZXNjcmlwdGlv
bi5taWQpOwotICAgICAgICBpZiAodHJhbnNjZWl2ZXIpIHsKLSAgICAgICAgICAgIGlmICh0cmFu
c2NlaXZlci0+aGFzU2VuZGluZ0RpcmVjdGlvbigpICYmIHRyYW5zY2VpdmVyLT5zZW5kZXIoKS50
cmFjaygpKQotICAgICAgICAgICAgICAgIHNvdXJjZU1hcC5zZXQodHJhbnNjZWl2ZXItPm1pZCgp
LCAmdHJhbnNjZWl2ZXItPnNlbmRlcigpLnRyYWNrKCktPnNvdXJjZSgpKTsKLSAgICAgICAgfQot
ICAgIH0KLQotICAgIHJldHVybiBzb3VyY2VNYXA7Ci19Ci0KLXZvaWQgTWVkaWFFbmRwb2ludFBl
ZXJDb25uZWN0aW9uOjpkb1NldExvY2FsRGVzY3JpcHRpb24oUlRDU2Vzc2lvbkRlc2NyaXB0aW9u
JiBkZXNjcmlwdGlvbikKLXsKLSAgICBydW5UYXNrKFt0aGlzLCBwcm90ZWN0ZWREZXNjcmlwdGlv
biA9IFJlZlB0cjxSVENTZXNzaW9uRGVzY3JpcHRpb24+KCZkZXNjcmlwdGlvbildKCkgbXV0YWJs
ZSB7Ci0gICAgICAgIHNldExvY2FsRGVzY3JpcHRpb25UYXNrKFdURk1vdmUocHJvdGVjdGVkRGVz
Y3JpcHRpb24pKTsKLSAgICB9KTsKLX0KLQotdm9pZCBNZWRpYUVuZHBvaW50UGVlckNvbm5lY3Rp
b246OnNldExvY2FsRGVzY3JpcHRpb25UYXNrKFJlZlB0cjxSVENTZXNzaW9uRGVzY3JpcHRpb24+
JiYgZGVzY3JpcHRpb24pCi17Ci0gICAgaWYgKG1fcGVlckNvbm5lY3Rpb24uaXNDbG9zZWQoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byByZXN1bHQgPSBNZWRpYUVuZHBvaW50U2Vzc2lv
bkRlc2NyaXB0aW9uOjpjcmVhdGUoV1RGTW92ZShkZXNjcmlwdGlvbiksICptX3NkcFByb2Nlc3Nv
cik7Ci0gICAgaWYgKHJlc3VsdC5oYXNFeGNlcHRpb24oKSkgewotICAgICAgICBzZXRMb2NhbERl
c2NyaXB0aW9uRmFpbGVkKHJlc3VsdC5yZWxlYXNlRXhjZXB0aW9uKCkpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotICAgIGF1dG8gbmV3RGVzY3JpcHRpb24gPSByZXN1bHQucmVsZWFzZVJldHVy
blZhbHVlKCk7Ci0KLSAgICBjb25zdCBSdHBUcmFuc2NlaXZlclZlY3RvciYgdHJhbnNjZWl2ZXJz
ID0gbV9wZWVyQ29ubmVjdGlvbi5nZXRUcmFuc2NlaXZlcnMoKTsKLSAgICBjb25zdCBNZWRpYURl
c2NyaXB0aW9uVmVjdG9yJiBtZWRpYURlc2NyaXB0aW9ucyA9IG5ld0Rlc2NyaXB0aW9uLT5jb25m
aWd1cmF0aW9uKCktPm1lZGlhRGVzY3JpcHRpb25zKCk7Ci0gICAgTWVkaWFFbmRwb2ludFNlc3Np
b25EZXNjcmlwdGlvbiogbG9jYWxEZXNjcmlwdGlvbiA9IGludGVybmFsTG9jYWxEZXNjcmlwdGlv
bigpOwotICAgIHVuc2lnbmVkIHByZXZpb3VzTnVtYmVyT2ZNZWRpYURlc2NyaXB0aW9ucyA9IGxv
Y2FsRGVzY3JpcHRpb24gPyBsb2NhbERlc2NyaXB0aW9uLT5jb25maWd1cmF0aW9uKCktPm1lZGlh
RGVzY3JpcHRpb25zKCkuc2l6ZSgpIDogMDsKLSAgICBib29sIGhhc05ld01lZGlhRGVzY3JpcHRp
b25zID0gbWVkaWFEZXNjcmlwdGlvbnMuc2l6ZSgpID4gcHJldmlvdXNOdW1iZXJPZk1lZGlhRGVz
Y3JpcHRpb25zOwotICAgIGJvb2wgaXNJbml0aWF0b3IgPSBuZXdEZXNjcmlwdGlvbi0+dHlwZSgp
ID09IFJUQ1NkcFR5cGU6Ok9mZmVyOwotCi0gICAgaWYgKGhhc05ld01lZGlhRGVzY3JpcHRpb25z
KSB7Ci0gICAgICAgIE1lZGlhRW5kcG9pbnQ6OlVwZGF0ZVJlc3VsdCByZXN1bHQgPSBtX21lZGlh
RW5kcG9pbnQtPnVwZGF0ZVJlY2VpdmVDb25maWd1cmF0aW9uKG5ld0Rlc2NyaXB0aW9uLT5jb25m
aWd1cmF0aW9uKCksIGlzSW5pdGlhdG9yKTsKLQotICAgICAgICBpZiAocmVzdWx0ID09IE1lZGlh
RW5kcG9pbnQ6OlVwZGF0ZVJlc3VsdDo6U3VjY2Vzc1dpdGhJY2VSZXN0YXJ0KSB7Ci0gICAgICAg
ICAgICBpZiAobV9wZWVyQ29ubmVjdGlvbi5pY2VHYXRoZXJpbmdTdGF0ZSgpICE9IFJUQ0ljZUdh
dGhlcmluZ1N0YXRlOjpHYXRoZXJpbmcpCi0gICAgICAgICAgICAgICAgbV9wZWVyQ29ubmVjdGlv
bi51cGRhdGVJY2VHYXRoZXJpbmdTdGF0ZShSVENJY2VHYXRoZXJpbmdTdGF0ZTo6R2F0aGVyaW5n
KTsKLQotICAgICAgICAgICAgaWYgKG1fcGVlckNvbm5lY3Rpb24uaWNlQ29ubmVjdGlvblN0YXRl
KCkgIT0gUlRDSWNlQ29ubmVjdGlvblN0YXRlOjpDb21wbGV0ZWQpCi0gICAgICAgICAgICAgICAg
bV9wZWVyQ29ubmVjdGlvbi51cGRhdGVJY2VDb25uZWN0aW9uU3RhdGUoUlRDSWNlQ29ubmVjdGlv
blN0YXRlOjpDb25uZWN0ZWQpOwotCi0gICAgICAgICAgICBMT0dfRVJST1IoIklDRSByZXN0YXJ0
IGlzIG5vdCBpbXBsZW1lbnRlZCIpOwotICAgICAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKLQot
ICAgICAgICB9IGVsc2UgaWYgKHJlc3VsdCA9PSBNZWRpYUVuZHBvaW50OjpVcGRhdGVSZXN1bHQ6
OkZhaWxlZCkgewotICAgICAgICAgICAgc2V0TG9jYWxEZXNjcmlwdGlvbkZhaWxlZChFeGNlcHRp
b24geyBPcGVyYXRpb25FcnJvciwgIlVuYWJsZSB0byBhcHBseSBzZXNzaW9uIGRlc2NyaXB0aW9u
IiB9KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIEFzc29j
aWF0ZSBtZWRpYSBkZXNjcmlwdGlvbnMgd2l0aCB0cmFuc2NlaXZlcnMgKHNldCBwcm92aXNpb25h
bCBtaWQgdG8gJ2ZpbmFsJyBtaWQpLgotICAgICAgICBmb3IgKGF1dG8mIG1lZGlhRGVzY3JpcHRp
b24gOiBtZWRpYURlc2NyaXB0aW9ucykgewotICAgICAgICAgICAgUlRDUnRwVHJhbnNjZWl2ZXIq
IHRyYW5zY2VpdmVyID0gbWF0Y2hUcmFuc2NlaXZlcih0cmFuc2NlaXZlcnMsIFsmbWVkaWFEZXNj
cmlwdGlvbl0gKFJUQ1J0cFRyYW5zY2VpdmVyJiBjdXJyZW50KSB7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIGN1cnJlbnQucHJvdmlzaW9uYWxNaWQoKSA9PSBtZWRpYURlc2NyaXB0aW9uLm1pZDsK
LSAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgaWYgKHRyYW5zY2VpdmVyKQotICAgICAgICAg
ICAgICAgIHRyYW5zY2VpdmVyLT5zZXRNaWQodHJhbnNjZWl2ZXItPnByb3Zpc2lvbmFsTWlkKCkp
OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGludGVybmFsUmVtb3RlRGVzY3JpcHRpb24o
KSkgewotICAgICAgICBNZWRpYUVuZHBvaW50U2Vzc2lvbkNvbmZpZ3VyYXRpb24qIHJlbW90ZUNv
bmZpZ3VyYXRpb24gPSBpbnRlcm5hbFJlbW90ZURlc2NyaXB0aW9uKCktPmNvbmZpZ3VyYXRpb24o
KTsKLSAgICAgICAgUmVhbHRpbWVNZWRpYVNvdXJjZU1hcCBzZW5kU291cmNlTWFwID0gY3JlYXRl
U291cmNlTWFwKHJlbW90ZUNvbmZpZ3VyYXRpb24tPm1lZGlhRGVzY3JpcHRpb25zKCksIG1lZGlh
RGVzY3JpcHRpb25zLnNpemUoKSwgdHJhbnNjZWl2ZXJzKTsKLQotICAgICAgICBpZiAobV9tZWRp
YUVuZHBvaW50LT51cGRhdGVTZW5kQ29uZmlndXJhdGlvbihyZW1vdGVDb25maWd1cmF0aW9uLCBz
ZW5kU291cmNlTWFwLCBpc0luaXRpYXRvcikgPT0gTWVkaWFFbmRwb2ludDo6VXBkYXRlUmVzdWx0
OjpGYWlsZWQpIHsKLSAgICAgICAgICAgIHNldExvY2FsRGVzY3JpcHRpb25GYWlsZWQoRXhjZXB0
aW9uIHsgT3BlcmF0aW9uRXJyb3IsICJVbmFibGUgdG8gYXBwbHkgc2Vzc2lvbiBkZXNjcmlwdGlv
biIgfSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAo
IWhhc1VuYXNzb2NpYXRlZFRyYW5zY2VpdmVycyh0cmFuc2NlaXZlcnMpKQotICAgICAgICBjbGVh
ck5lZ290aWF0aW9uTmVlZGVkU3RhdGUoKTsKLQotICAgIFJUQ1NpZ25hbGluZ1N0YXRlIG5ld1Np
Z25hbGluZ1N0YXRlOwotCi0gICAgLy8gVXBkYXRlIHN0YXRlIGFuZCBsb2NhbCBkZXNjcmlwdGlv
bnMgYWNjb3JkaW5nIHRvIHNldExvY2FsL1JlbW90ZURlc2NyaXB0aW9uIHByb2Nlc3NpbmcgbW9k
ZWwKLSAgICBzd2l0Y2ggKG5ld0Rlc2NyaXB0aW9uLT50eXBlKCkpIHsKLSAgICBjYXNlIFJUQ1Nk
cFR5cGU6Ok9mZmVyOgotICAgICAgICBtX3BlbmRpbmdMb2NhbERlc2NyaXB0aW9uID0gV1RGTW92
ZShuZXdEZXNjcmlwdGlvbik7Ci0gICAgICAgIG5ld1NpZ25hbGluZ1N0YXRlID0gUlRDU2lnbmFs
aW5nU3RhdGU6OkhhdmVMb2NhbE9mZmVyOwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgUlRD
U2RwVHlwZTo6QW5zd2VyOgotICAgICAgICBtX2N1cnJlbnRMb2NhbERlc2NyaXB0aW9uID0gV1RG
TW92ZShuZXdEZXNjcmlwdGlvbik7Ci0gICAgICAgIG1fY3VycmVudFJlbW90ZURlc2NyaXB0aW9u
ID0gbV9wZW5kaW5nUmVtb3RlRGVzY3JpcHRpb247Ci0gICAgICAgIG1fcGVuZGluZ0xvY2FsRGVz
Y3JpcHRpb24gPSBudWxscHRyOwotICAgICAgICBtX3BlbmRpbmdSZW1vdGVEZXNjcmlwdGlvbiA9
IG51bGxwdHI7Ci0gICAgICAgIG5ld1NpZ25hbGluZ1N0YXRlID0gUlRDU2lnbmFsaW5nU3RhdGU6
OlN0YWJsZTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIFJUQ1NkcFR5cGU6OlJvbGxiYWNr
OgotICAgICAgICBtX3BlbmRpbmdMb2NhbERlc2NyaXB0aW9uID0gbnVsbHB0cjsKLSAgICAgICAg
bmV3U2lnbmFsaW5nU3RhdGUgPSBSVENTaWduYWxpbmdTdGF0ZTo6U3RhYmxlOwotICAgICAgICBi
cmVhazsKLQotICAgIGNhc2UgUlRDU2RwVHlwZTo6UHJhbnN3ZXI6Ci0gICAgICAgIG1fcGVuZGlu
Z0xvY2FsRGVzY3JpcHRpb24gPSBXVEZNb3ZlKG5ld0Rlc2NyaXB0aW9uKTsKLSAgICAgICAgbmV3
U2lnbmFsaW5nU3RhdGUgPSBSVENTaWduYWxpbmdTdGF0ZTo6SGF2ZUxvY2FsUHJhbnN3ZXI7Ci0g
ICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIHVwZGF0ZVNpZ25hbGluZ1N0YXRlKG5ld1NpZ25h
bGluZ1N0YXRlKTsKLQotICAgIGlmIChtX3BlZXJDb25uZWN0aW9uLmljZUdhdGhlcmluZ1N0YXRl
KCkgPT0gUlRDSWNlR2F0aGVyaW5nU3RhdGU6Ok5ldyAmJiBtZWRpYURlc2NyaXB0aW9ucy5zaXpl
KCkpCi0gICAgICAgIG1fcGVlckNvbm5lY3Rpb24udXBkYXRlSWNlR2F0aGVyaW5nU3RhdGUoUlRD
SWNlR2F0aGVyaW5nU3RhdGU6OkdhdGhlcmluZyk7Ci0KLSAgICBtYXJrQXNOZWVkaW5nTmVnb3Rp
YXRpb24oKTsKLSAgICBzZXRMb2NhbERlc2NyaXB0aW9uU3VjY2VlZGVkKCk7Ci19Ci0KLVJlZlB0
cjxSVENTZXNzaW9uRGVzY3JpcHRpb24+IE1lZGlhRW5kcG9pbnRQZWVyQ29ubmVjdGlvbjo6bG9j
YWxEZXNjcmlwdGlvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGNyZWF0ZVJUQ1Nlc3Npb25EZXNj
cmlwdGlvbihpbnRlcm5hbExvY2FsRGVzY3JpcHRpb24oKSk7Ci19Ci0KLVJlZlB0cjxSVENTZXNz
aW9uRGVzY3JpcHRpb24+IE1lZGlhRW5kcG9pbnRQZWVyQ29ubmVjdGlvbjo6Y3VycmVudExvY2Fs
RGVzY3JpcHRpb24oKSBjb25zdAotewotICAgIHJldHVybiBjcmVhdGVSVENTZXNzaW9uRGVzY3Jp
cHRpb24obV9jdXJyZW50TG9jYWxEZXNjcmlwdGlvbi5nZXQoKSk7Ci19Ci0KLVJlZlB0cjxSVENT
ZXNzaW9uRGVzY3JpcHRpb24+IE1lZGlhRW5kcG9pbnRQZWVyQ29ubmVjdGlvbjo6cGVuZGluZ0xv
Y2FsRGVzY3JpcHRpb24oKSBjb25zdAotewotICAgIHJldHVybiBjcmVhdGVSVENTZXNzaW9uRGVz
Y3JpcHRpb24obV9wZW5kaW5nTG9jYWxEZXNjcmlwdGlvbi5nZXQoKSk7Ci19Ci0KLXZvaWQgTWVk
aWFFbmRwb2ludFBlZXJDb25uZWN0aW9uOjpkb1NldFJlbW90ZURlc2NyaXB0aW9uKFJUQ1Nlc3Np
b25EZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24pCi17Ci0gICAgcnVuVGFzayhbdGhpcywgcHJvdGVj
dGVkRGVzY3JpcHRpb24gPSBSZWZQdHI8UlRDU2Vzc2lvbkRlc2NyaXB0aW9uPigmZGVzY3JpcHRp
b24pXSgpIG11dGFibGUgewotICAgICAgICBzZXRSZW1vdGVEZXNjcmlwdGlvblRhc2soV1RGTW92
ZShwcm90ZWN0ZWREZXNjcmlwdGlvbikpOwotICAgIH0pOwotfQotCi12b2lkIE1lZGlhRW5kcG9p
bnRQZWVyQ29ubmVjdGlvbjo6c2V0UmVtb3RlRGVzY3JpcHRpb25UYXNrKFJlZlB0cjxSVENTZXNz
aW9uRGVzY3JpcHRpb24+JiYgZGVzY3JpcHRpb24pCi17Ci0gICAgYXV0byByZXN1bHQgPSBNZWRp
YUVuZHBvaW50U2Vzc2lvbkRlc2NyaXB0aW9uOjpjcmVhdGUoV1RGTW92ZShkZXNjcmlwdGlvbiks
ICptX3NkcFByb2Nlc3Nvcik7Ci0gICAgaWYgKHJlc3VsdC5oYXNFeGNlcHRpb24oKSkgewotICAg
ICAgICBzZXRSZW1vdGVEZXNjcmlwdGlvbkZhaWxlZChyZXN1bHQucmVsZWFzZUV4Y2VwdGlvbigp
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBhdXRvIG5ld0Rlc2NyaXB0aW9uID0gcmVz
dWx0LnJlbGVhc2VSZXR1cm5WYWx1ZSgpOwotCi0gICAgYXV0byYgbWVkaWFEZXNjcmlwdGlvbnMg
PSBuZXdEZXNjcmlwdGlvbi0+Y29uZmlndXJhdGlvbigpLT5tZWRpYURlc2NyaXB0aW9ucygpOwot
ICAgIGZvciAoYXV0byYgbWVkaWFEZXNjcmlwdGlvbiA6IG1lZGlhRGVzY3JpcHRpb25zKSB7Ci0g
ICAgICAgIGlmIChtZWRpYURlc2NyaXB0aW9uLnR5cGUgIT0gImF1ZGlvIiAmJiBtZWRpYURlc2Ny
aXB0aW9uLnR5cGUgIT0gInZpZGVvIikKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAg
IG1lZGlhRGVzY3JpcHRpb24ucGF5bG9hZHMgPSBtX21lZGlhRW5kcG9pbnQtPmZpbHRlclBheWxv
YWRzKG1lZGlhRGVzY3JpcHRpb24ucGF5bG9hZHMsIG1lZGlhRGVzY3JpcHRpb24udHlwZSA9PSAi
YXVkaW8iID8gbV9kZWZhdWx0QXVkaW9QYXlsb2FkcyA6IG1fZGVmYXVsdFZpZGVvUGF5bG9hZHMp
OwotICAgIH0KLQotICAgIGJvb2wgaXNJbml0aWF0b3IgPSBuZXdEZXNjcmlwdGlvbi0+dHlwZSgp
ID09IFJUQ1NkcFR5cGU6OkFuc3dlcjsKLSAgICBjb25zdCBSdHBUcmFuc2NlaXZlclZlY3RvciYg
dHJhbnNjZWl2ZXJzID0gbV9wZWVyQ29ubmVjdGlvbi5nZXRUcmFuc2NlaXZlcnMoKTsKLQotICAg
IFJlYWx0aW1lTWVkaWFTb3VyY2VNYXAgc2VuZFNvdXJjZU1hcDsKLSAgICBpZiAoaW50ZXJuYWxM
b2NhbERlc2NyaXB0aW9uKCkpCi0gICAgICAgIHNlbmRTb3VyY2VNYXAgPSBjcmVhdGVTb3VyY2VN
YXAobWVkaWFEZXNjcmlwdGlvbnMsIGludGVybmFsTG9jYWxEZXNjcmlwdGlvbigpLT5jb25maWd1
cmF0aW9uKCktPm1lZGlhRGVzY3JpcHRpb25zKCkuc2l6ZSgpLCB0cmFuc2NlaXZlcnMpOwotCi0g
ICAgaWYgKG1fbWVkaWFFbmRwb2ludC0+dXBkYXRlU2VuZENvbmZpZ3VyYXRpb24obmV3RGVzY3Jp
cHRpb24tPmNvbmZpZ3VyYXRpb24oKSwgc2VuZFNvdXJjZU1hcCwgaXNJbml0aWF0b3IpID09IE1l
ZGlhRW5kcG9pbnQ6OlVwZGF0ZVJlc3VsdDo6RmFpbGVkKSB7Ci0gICAgICAgIHNldFJlbW90ZURl
c2NyaXB0aW9uRmFpbGVkKEV4Y2VwdGlvbiB7IE9wZXJhdGlvbkVycm9yLCAiVW5hYmxlIHRvIGFw
cGx5IHNlc3Npb24gZGVzY3JpcHRpb24iIH0pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgLy8gT25lIGxlZ2FjeSBNZWRpYVN0cmVhbUV2ZW50IHdpbGwgYmUgZmlyZWQgZm9yIGV2ZXJ5
IG5ldyBNZWRpYVN0cmVhbSBjcmVhdGVkIGFzIHRoaXMgcmVtb3RlIGRlc2NyaXB0aW9uIGlzIHNl
dC4KLSAgICBWZWN0b3I8UmVmUHRyPE1lZGlhU3RyZWFtRXZlbnQ+PiBsZWdhY3lNZWRpYVN0cmVh
bUV2ZW50czsKLQotICAgIGZvciAoYXV0byYgbWVkaWFEZXNjcmlwdGlvbiA6IG1lZGlhRGVzY3Jp
cHRpb25zKSB7Ci0gICAgICAgIFJUQ1J0cFRyYW5zY2VpdmVyKiB0cmFuc2NlaXZlciA9IG1hdGNo
VHJhbnNjZWl2ZXJCeU1pZCh0cmFuc2NlaXZlcnMsIG1lZGlhRGVzY3JpcHRpb24ubWlkKTsKLSAg
ICAgICAgaWYgKCF0cmFuc2NlaXZlcikgewotICAgICAgICAgICAgYm9vbCByZWNlaXZlT25seUZs
YWcgPSBmYWxzZTsKLQotICAgICAgICAgICAgaWYgKG1lZGlhRGVzY3JpcHRpb24ubW9kZSA9PSAi
c2VuZHJlY3YiIHx8IG1lZGlhRGVzY3JpcHRpb24ubW9kZSA9PSAicmVjdm9ubHkiKSB7Ci0gICAg
ICAgICAgICAgICAgLy8gVHJ5IHRvIG1hdGNoIGFuIGV4aXN0aW5nIHRyYW5zY2VpdmVyLgotICAg
ICAgICAgICAgICAgIHRyYW5zY2VpdmVyID0gbWF0Y2hUcmFuc2NlaXZlcih0cmFuc2NlaXZlcnMs
IFsmbWVkaWFEZXNjcmlwdGlvbl0gKFJUQ1J0cFRyYW5zY2VpdmVyJiBjdXJyZW50KSB7Ci0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiAhY3VycmVudC5zdG9wcGVkKCkgJiYgY3VycmVudC5taWQo
KS5pc051bGwoKSAmJiBjdXJyZW50LnNlbmRlcigpLnRyYWNrS2luZCgpID09IG1lZGlhRGVzY3Jp
cHRpb24udHlwZTsKLSAgICAgICAgICAgICAgICB9KTsKLQotICAgICAgICAgICAgICAgIGlmICh0
cmFuc2NlaXZlcikgewotICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIHRyYW5zY2VpdmVyIHdh
cyBjcmVhdGVkIGxvY2FsbHkgd2l0aCBhIHByb3Zpc2lvbmFsIG1pZC4gSXRzIHJlYWwgbWlkIHdp
bGwgbm93IGJlIHNldCBieSB0aGUgcmVtb3RlCi0gICAgICAgICAgICAgICAgICAgIC8vIGRlc2Ny
aXB0aW9uIHNvIHdlIG5lZWQgdG8gdXBkYXRlIHRoZSBtaWQgb2YgdGhlIHRyYW5zY2VpdmVyJ3Mg
bXV0ZWQgc291cmNlIHRvIHByZXNlcnZlIHRoZSBhc3NvY2lhdGlvbi4KLSAgICAgICAgICAgICAg
ICAgICAgdHJhbnNjZWl2ZXItPnNldE1pZChtZWRpYURlc2NyaXB0aW9uLm1pZCk7Ci0gICAgICAg
ICAgICAgICAgICAgIG1fbWVkaWFFbmRwb2ludC0+cmVwbGFjZU11dGVkUmVtb3RlU291cmNlTWlk
KHRyYW5zY2VpdmVyLT5wcm92aXNpb25hbE1pZCgpLCBtZWRpYURlc2NyaXB0aW9uLm1pZCk7Ci0g
ICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHJlY2VpdmVPbmx5Rmxh
ZyA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICghdHJhbnNjZWl2ZXIp
IHsKLSAgICAgICAgICAgICAgICBhdXRvIHNlbmRlciA9IFJUQ1J0cFNlbmRlcjo6Y3JlYXRlKFN0
cmluZyhtZWRpYURlc2NyaXB0aW9uLnR5cGUpLCBWZWN0b3I8U3RyaW5nPigpLCBtX3BlZXJDb25u
ZWN0aW9uLnNlbmRlckJhY2tlbmQoKSk7Ci0gICAgICAgICAgICAgICAgYXV0byByZWNlaXZlciA9
IGNyZWF0ZVJlY2VpdmVyKG1lZGlhRGVzY3JpcHRpb24ubWlkLCBtZWRpYURlc2NyaXB0aW9uLnR5
cGUsIG1lZGlhRGVzY3JpcHRpb24ubWVkaWFTdHJlYW1UcmFja0lkKTsKLQotICAgICAgICAgICAg
ICAgIGF1dG8gbmV3VHJhbnNjZWl2ZXIgPSBSVENSdHBUcmFuc2NlaXZlcjo6Y3JlYXRlKFdURk1v
dmUoc2VuZGVyKSwgV1RGTW92ZShyZWNlaXZlcikpOwotICAgICAgICAgICAgICAgIG5ld1RyYW5z
Y2VpdmVyLT5zZXRNaWQobWVkaWFEZXNjcmlwdGlvbi5taWQpOwotICAgICAgICAgICAgICAgIGlm
IChyZWNlaXZlT25seUZsYWcpCi0gICAgICAgICAgICAgICAgICAgIG5ld1RyYW5zY2VpdmVyLT5k
aXNhYmxlU2VuZGluZ0RpcmVjdGlvbigpOwotCi0gICAgICAgICAgICAgICAgdHJhbnNjZWl2ZXIg
PSBuZXdUcmFuc2NlaXZlci5wdHIoKTsKLSAgICAgICAgICAgICAgICBtX3BlZXJDb25uZWN0aW9u
LmFkZFRyYW5zY2VpdmVyKFdURk1vdmUobmV3VHJhbnNjZWl2ZXIpKTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotCi0gICAgICAgIGlmIChtZWRpYURlc2NyaXB0aW9uLm1vZGUgPT0gInNlbmRy
ZWN2IiB8fCBtZWRpYURlc2NyaXB0aW9uLm1vZGUgPT0gInNlbmRvbmx5IikgewotICAgICAgICAg
ICAgYXV0byYgcmVjZWl2ZXIgPSB0cmFuc2NlaXZlci0+cmVjZWl2ZXIoKTsKLSAgICAgICAgICAg
IGlmIChyZWNlaXZlci5pc0Rpc3BhdGNoZWQoKSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsK
LSAgICAgICAgICAgIHJlY2VpdmVyLnNldERpc3BhdGNoZWQodHJ1ZSk7Ci0KLSAgICAgICAgICAg
IFZlY3RvcjxTdHJpbmc+IG1lZGlhU3RyZWFtSWRzOwotICAgICAgICAgICAgaWYgKCFtZWRpYURl
c2NyaXB0aW9uLm1lZGlhU3RyZWFtSWQuaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgIG1lZGlh
U3RyZWFtSWRzLmFwcGVuZChtZWRpYURlc2NyaXB0aW9uLm1lZGlhU3RyZWFtSWQpOwotCi0gICAg
ICAgICAgICAvLyBBIHJlbW90ZSB0cmFjayBjYW4gYmUgYXNzb2NpYXRlZCB3aXRoIDAuLiogTWVk
aWFTdHJlYW1zLiBXZSBjcmVhdGUgYSBuZXcgc3RyZWFtIGZvcgotICAgICAgICAgICAgLy8gYSB0
cmFjayBpbiBjYXNlIG9mIGFuIHVucmVjb2duaXplZCBzdHJlYW0gaWQsIG9yIGp1c3QgYWRkIHRo
ZSB0cmFjayBpZiB0aGUgc3RyZWFtCi0gICAgICAgICAgICAvLyBhbHJlYWR5IGV4aXN0cy4KLSAg
ICAgICAgICAgIEhhc2hNYXA8U3RyaW5nLCBSZWZQdHI8TWVkaWFTdHJlYW0+PiB0cmFja0V2ZW50
TWVkaWFTdHJlYW1zOwotICAgICAgICAgICAgZm9yIChhdXRvJiBpZCA6IG1lZGlhU3RyZWFtSWRz
KSB7Ci0gICAgICAgICAgICAgICAgaWYgKG1fcmVtb3RlU3RyZWFtTWFwLmNvbnRhaW5zKGlkKSkg
ewotICAgICAgICAgICAgICAgICAgICBSZWZQdHI8TWVkaWFTdHJlYW0+IHN0cmVhbSA9IG1fcmVt
b3RlU3RyZWFtTWFwLmdldChpZCk7Ci0gICAgICAgICAgICAgICAgICAgIHN0cmVhbS0+YWRkVHJh
Y2soKnJlY2VpdmVyLnRyYWNrKCkpOwotICAgICAgICAgICAgICAgICAgICB0cmFja0V2ZW50TWVk
aWFTdHJlYW1zLmFkZChpZCwgV1RGTW92ZShzdHJlYW0pKTsKLSAgICAgICAgICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgICAgICAgICBhdXRvIG5ld1N0cmVhbSA9IE1lZGlhU3RyZWFtOjpj
cmVhdGUoKm1fcGVlckNvbm5lY3Rpb24uc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCBNZWRpYVN0
cmVhbVRyYWNrVmVjdG9yKHsgcmVjZWl2ZXIudHJhY2soKSB9KSk7Ci0gICAgICAgICAgICAgICAg
ICAgIG1fcmVtb3RlU3RyZWFtTWFwLmFkZChpZCwgbmV3U3RyZWFtLmNvcHlSZWYoKSk7Ci0gICAg
ICAgICAgICAgICAgICAgIGxlZ2FjeU1lZGlhU3RyZWFtRXZlbnRzLmFwcGVuZChNZWRpYVN0cmVh
bUV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmFkZHN0cmVhbUV2ZW50LCBmYWxzZSwgZmFsc2Us
IG5ld1N0cmVhbS5jb3B5UmVmKCkpKTsKLSAgICAgICAgICAgICAgICAgICAgdHJhY2tFdmVudE1l
ZGlhU3RyZWFtcy5hZGQoaWQsIFdURk1vdmUobmV3U3RyZWFtKSk7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBWZWN0b3I8UmVmUHRyPE1lZGlhU3RyZWFt
Pj4gc3RyZWFtczsKLSAgICAgICAgICAgIGNvcHlWYWx1ZXNUb1ZlY3Rvcih0cmFja0V2ZW50TWVk
aWFTdHJlYW1zLCBzdHJlYW1zKTsKLQotICAgICAgICAgICAgbV9wZWVyQ29ubmVjdGlvbi5maXJl
RXZlbnQoUlRDVHJhY2tFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS50cmFja0V2ZW50LCBmYWxz
ZSwgZmFsc2UsCi0gICAgICAgICAgICAgICAgJnJlY2VpdmVyLCByZWNlaXZlci50cmFjaygpLCBX
VEZNb3ZlKHN0cmVhbXMpLCB0cmFuc2NlaXZlcikpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAg
Ly8gRmlyZSBsZWdhY3kgYWRkc3RyZWFtIGV2ZW50cy4KLSAgICBmb3IgKGF1dG8mIGV2ZW50IDog
bGVnYWN5TWVkaWFTdHJlYW1FdmVudHMpCi0gICAgICAgIG1fcGVlckNvbm5lY3Rpb24uZmlyZUV2
ZW50KCpldmVudCk7Ci0KLSAgICBSVENTaWduYWxpbmdTdGF0ZSBuZXdTaWduYWxpbmdTdGF0ZTsK
LQotICAgIC8vIFVwZGF0ZSBzdGF0ZSBhbmQgbG9jYWwgZGVzY3JpcHRpb25zIGFjY29yZGluZyB0
byBzZXRMb2NhbC9SZW1vdGVEZXNjcmlwdGlvbiBwcm9jZXNzaW5nIG1vZGVsCi0gICAgc3dpdGNo
IChuZXdEZXNjcmlwdGlvbi0+dHlwZSgpKSB7Ci0gICAgY2FzZSBSVENTZHBUeXBlOjpPZmZlcjoK
LSAgICAgICAgbV9wZW5kaW5nUmVtb3RlRGVzY3JpcHRpb24gPSBXVEZNb3ZlKG5ld0Rlc2NyaXB0
aW9uKTsKLSAgICAgICAgbmV3U2lnbmFsaW5nU3RhdGUgPSBSVENTaWduYWxpbmdTdGF0ZTo6SGF2
ZVJlbW90ZU9mZmVyOwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgUlRDU2RwVHlwZTo6QW5z
d2VyOgotICAgICAgICBtX2N1cnJlbnRSZW1vdGVEZXNjcmlwdGlvbiA9IFdURk1vdmUobmV3RGVz
Y3JpcHRpb24pOwotICAgICAgICBtX2N1cnJlbnRMb2NhbERlc2NyaXB0aW9uID0gbV9wZW5kaW5n
TG9jYWxEZXNjcmlwdGlvbjsKLSAgICAgICAgbV9wZW5kaW5nUmVtb3RlRGVzY3JpcHRpb24gPSBu
dWxscHRyOwotICAgICAgICBtX3BlbmRpbmdMb2NhbERlc2NyaXB0aW9uID0gbnVsbHB0cjsKLSAg
ICAgICAgbmV3U2lnbmFsaW5nU3RhdGUgPSBSVENTaWduYWxpbmdTdGF0ZTo6U3RhYmxlOwotICAg
ICAgICBicmVhazsKLQotICAgIGNhc2UgUlRDU2RwVHlwZTo6Um9sbGJhY2s6Ci0gICAgICAgIG1f
cGVuZGluZ1JlbW90ZURlc2NyaXB0aW9uID0gbnVsbHB0cjsKLSAgICAgICAgbmV3U2lnbmFsaW5n
U3RhdGUgPSBSVENTaWduYWxpbmdTdGF0ZTo6U3RhYmxlOwotICAgICAgICBicmVhazsKLQotICAg
IGNhc2UgUlRDU2RwVHlwZTo6UHJhbnN3ZXI6Ci0gICAgICAgIG1fcGVuZGluZ1JlbW90ZURlc2Ny
aXB0aW9uID0gV1RGTW92ZShuZXdEZXNjcmlwdGlvbik7Ci0gICAgICAgIG5ld1NpZ25hbGluZ1N0
YXRlID0gUlRDU2lnbmFsaW5nU3RhdGU6OkhhdmVSZW1vdGVQcmFuc3dlcjsKLSAgICAgICAgYnJl
YWs7Ci0gICAgfQotCi0gICAgdXBkYXRlU2lnbmFsaW5nU3RhdGUobmV3U2lnbmFsaW5nU3RhdGUp
OwotICAgIHNldFJlbW90ZURlc2NyaXB0aW9uU3VjY2VlZGVkKCk7Ci19Ci0KLVJlZlB0cjxSVENT
ZXNzaW9uRGVzY3JpcHRpb24+IE1lZGlhRW5kcG9pbnRQZWVyQ29ubmVjdGlvbjo6cmVtb3RlRGVz
Y3JpcHRpb24oKSBjb25zdAotewotICAgIHJldHVybiBjcmVhdGVSVENTZXNzaW9uRGVzY3JpcHRp
b24oaW50ZXJuYWxSZW1vdGVEZXNjcmlwdGlvbigpKTsKLX0KLQotUmVmUHRyPFJUQ1Nlc3Npb25E
ZXNjcmlwdGlvbj4gTWVkaWFFbmRwb2ludFBlZXJDb25uZWN0aW9uOjpjdXJyZW50UmVtb3RlRGVz
Y3JpcHRpb24oKSBjb25zdAotewotICAgIHJldHVybiBjcmVhdGVSVENTZXNzaW9uRGVzY3JpcHRp
b24obV9jdXJyZW50UmVtb3RlRGVzY3JpcHRpb24uZ2V0KCkpOwotfQotCi1SZWZQdHI8UlRDU2Vz
c2lvbkRlc2NyaXB0aW9uPiBNZWRpYUVuZHBvaW50UGVlckNvbm5lY3Rpb246OnBlbmRpbmdSZW1v
dGVEZXNjcmlwdGlvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGNyZWF0ZVJUQ1Nlc3Npb25EZXNj
cmlwdGlvbihtX3BlbmRpbmdSZW1vdGVEZXNjcmlwdGlvbi5nZXQoKSk7Ci19Ci0KLWJvb2wgTWVk
aWFFbmRwb2ludFBlZXJDb25uZWN0aW9uOjpzZXRDb25maWd1cmF0aW9uKE1lZGlhRW5kcG9pbnRD
b25maWd1cmF0aW9uJiYgY29uZmlndXJhdGlvbikKLXsKLSAgICBtX21lZGlhRW5kcG9pbnQtPnNl
dENvbmZpZ3VyYXRpb24oV1RGTW92ZShjb25maWd1cmF0aW9uKSk7Ci0gICAgcmV0dXJuIHRydWU7
Ci19Ci0KLXZvaWQgTWVkaWFFbmRwb2ludFBlZXJDb25uZWN0aW9uOjpkb0FkZEljZUNhbmRpZGF0
ZShSVENJY2VDYW5kaWRhdGUmIHJ0Y0NhbmRpZGF0ZSkKLXsKLSAgICBydW5UYXNrKFt0aGlzLCBw
cm90ZWN0ZWRDYW5kaWRhdGUgPSBSZWZQdHI8UlRDSWNlQ2FuZGlkYXRlPigmcnRjQ2FuZGlkYXRl
KV0oKSBtdXRhYmxlIHsKLSAgICAgICAgYWRkSWNlQ2FuZGlkYXRlVGFzaygqcHJvdGVjdGVkQ2Fu
ZGlkYXRlKTsKLSAgICB9KTsKLX0KLQotdm9pZCBNZWRpYUVuZHBvaW50UGVlckNvbm5lY3Rpb246
OmFkZEljZUNhbmRpZGF0ZVRhc2soUlRDSWNlQ2FuZGlkYXRlJiBydGNDYW5kaWRhdGUpCi17Ci0g
ICAgaWYgKCFpbnRlcm5hbFJlbW90ZURlc2NyaXB0aW9uKCkpIHsKLSAgICAgICAgYWRkSWNlQ2Fu
ZGlkYXRlRmFpbGVkKEV4Y2VwdGlvbiB7IEludmFsaWRTdGF0ZUVycm9yLCAiTm8gcmVtb3RlIGRl
c2NyaXB0aW9uIHNldCIgfSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBhdXRvJiBy
ZW1vdGVNZWRpYURlc2NyaXB0aW9ucyA9IGludGVybmFsUmVtb3RlRGVzY3JpcHRpb24oKS0+Y29u
ZmlndXJhdGlvbigpLT5tZWRpYURlc2NyaXB0aW9ucygpOwotICAgIFBlZXJNZWRpYURlc2NyaXB0
aW9uKiB0YXJnZXRNZWRpYURlc2NyaXB0aW9uID0gbnVsbHB0cjsKLQotICAgIC8vIFdoZW4gaWRl
bnRpZnlpbmcgdGhlIHRhcmdldCBtZWRpYSBkZXNjcmlwdGlvbiwgc2RwTWlkIHRha2VzIHByZWNl
ZGVuY2Ugb3ZlciBzZHBNTGluZUluZGV4Ci0gICAgLy8gaWYgYm90aCBhcmUgcHJlc2VudC4KLSAg
ICBpZiAoIXJ0Y0NhbmRpZGF0ZS5zZHBNaWQoKS5pc051bGwoKSkgewotICAgICAgICBjb25zdCBT
dHJpbmcmIG1pZCA9IHJ0Y0NhbmRpZGF0ZS5zZHBNaWQoKTsKLSAgICAgICAgZm9yIChhdXRvJiBk
ZXNjcmlwdGlvbiA6IHJlbW90ZU1lZGlhRGVzY3JpcHRpb25zKSB7Ci0gICAgICAgICAgICBpZiAo
ZGVzY3JpcHRpb24ubWlkID09IG1pZCkgewotICAgICAgICAgICAgICAgIHRhcmdldE1lZGlhRGVz
Y3JpcHRpb24gPSAmZGVzY3JpcHRpb247Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIXRhcmdldE1lZGlhRGVzY3JpcHRpb24p
IHsKLSAgICAgICAgICAgIGFkZEljZUNhbmRpZGF0ZUZhaWxlZChFeGNlcHRpb24geyBPcGVyYXRp
b25FcnJvciwgInNkcE1pZCBkaWQgbm90IG1hdGNoIGFueSBtZWRpYSBkZXNjcmlwdGlvbiIgfSk7
Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKHJ0Y0NhbmRp
ZGF0ZS5zZHBNTGluZUluZGV4KCkpIHsKLSAgICAgICAgdW5zaWduZWQgc2hvcnQgc2RwTUxpbmVJ
bmRleCA9IHJ0Y0NhbmRpZGF0ZS5zZHBNTGluZUluZGV4KCkudmFsdWUoKTsKLSAgICAgICAgaWYg
KHNkcE1MaW5lSW5kZXggPj0gcmVtb3RlTWVkaWFEZXNjcmlwdGlvbnMuc2l6ZSgpKSB7Ci0gICAg
ICAgICAgICBhZGRJY2VDYW5kaWRhdGVGYWlsZWQoRXhjZXB0aW9uIHsgT3BlcmF0aW9uRXJyb3Is
ICJzZHBNTGluZUluZGV4IGlzIG91dCBvZiByYW5nZSIgfSk7Ci0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIH0KLSAgICAgICAgdGFyZ2V0TWVkaWFEZXNjcmlwdGlvbiA9ICZyZW1vdGVNZWRp
YURlc2NyaXB0aW9uc1tzZHBNTGluZUluZGV4XTsKLSAgICB9IGVsc2UgewotICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGF1dG8gcmVz
dWx0ID0gbV9zZHBQcm9jZXNzb3ItPnBhcnNlQ2FuZGlkYXRlTGluZShydGNDYW5kaWRhdGUuY2Fu
ZGlkYXRlKCkpOwotICAgIGlmIChyZXN1bHQucGFyc2luZ1N0YXR1cygpICE9IFNEUFByb2Nlc3Nv
cjo6UmVzdWx0OjpTdWNjZXNzKSB7Ci0gICAgICAgIGlmIChyZXN1bHQucGFyc2luZ1N0YXR1cygp
ID09IFNEUFByb2Nlc3Nvcjo6UmVzdWx0OjpQYXJzZUVycm9yKQotICAgICAgICAgICAgYWRkSWNl
Q2FuZGlkYXRlRmFpbGVkKEV4Y2VwdGlvbiB7IE9wZXJhdGlvbkVycm9yLCAiSW52YWxpZCBjYW5k
aWRhdGUgY29udGVudCIgfSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIExPR19FUlJPUigi
U0RQUHJvY2Vzc29yIGludGVybmFsIGVycm9yIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICBBU1NFUlQodGFyZ2V0TWVkaWFEZXNjcmlwdGlvbik7Ci0gICAgbV9tZWRpYUVuZHBvaW50
LT5hZGRSZW1vdGVDYW5kaWRhdGUocmVzdWx0LmNhbmRpZGF0ZSgpLCB0YXJnZXRNZWRpYURlc2Ny
aXB0aW9uLT5taWQsIHRhcmdldE1lZGlhRGVzY3JpcHRpb24tPmljZVVmcmFnLCB0YXJnZXRNZWRp
YURlc2NyaXB0aW9uLT5pY2VQYXNzd29yZCk7Ci0KLSAgICB0YXJnZXRNZWRpYURlc2NyaXB0aW9u
LT5hZGRJY2VDYW5kaWRhdGUoV1RGTW92ZShyZXN1bHQuY2FuZGlkYXRlKCkpKTsKLQotICAgIGFk
ZEljZUNhbmRpZGF0ZVN1Y2NlZWRlZCgpOwotfQotCi12b2lkIE1lZGlhRW5kcG9pbnRQZWVyQ29u
bmVjdGlvbjo6Z2V0U3RhdHMoTWVkaWFTdHJlYW1UcmFjayogdHJhY2ssIFJlZjxEZWZlcnJlZFBy
b21pc2U+JiYgcHJvbWlzZSkKLXsKLSAgICBtX21lZGlhRW5kcG9pbnQtPmdldFN0YXRzKHRyYWNr
LCBXVEZNb3ZlKHByb21pc2UpKTsKLX0KLQotVmVjdG9yPFJlZlB0cjxNZWRpYVN0cmVhbT4+IE1l
ZGlhRW5kcG9pbnRQZWVyQ29ubmVjdGlvbjo6Z2V0UmVtb3RlU3RyZWFtcygpIGNvbnN0Ci17Ci0g
ICAgVmVjdG9yPFJlZlB0cjxNZWRpYVN0cmVhbT4+IHJlbW90ZVN0cmVhbXM7Ci0gICAgY29weVZh
bHVlc1RvVmVjdG9yKG1fcmVtb3RlU3RyZWFtTWFwLCByZW1vdGVTdHJlYW1zKTsKLSAgICByZXR1
cm4gcmVtb3RlU3RyZWFtczsKLX0KLQotUmVmPFJUQ1J0cFJlY2VpdmVyPiBNZWRpYUVuZHBvaW50
UGVlckNvbm5lY3Rpb246OmNyZWF0ZVJlY2VpdmVyKGNvbnN0IFN0cmluZyYgdHJhbnNjZWl2ZXJN
aWQsIGNvbnN0IFN0cmluZyYgdHJhY2tLaW5kLCBjb25zdCBTdHJpbmcmIHRyYWNrSWQpCi17Ci0g
ICAgUmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlwZSBzb3VyY2VUeXBlID0gdHJhY2tLaW5kID09ICJh
dWRpbyIgPyBSZWFsdGltZU1lZGlhU291cmNlOjpUeXBlOjpBdWRpbyA6IFJlYWx0aW1lTWVkaWFT
b3VyY2U6OlR5cGU6OlZpZGVvOwotCi0gICAgLy8gQ3JlYXRlIGEgbXV0ZWQgcmVtb3RlIHNvdXJj
ZSB0aGF0IHdpbGwgYmUgdW5tdXRlZCBvbmNlIG1lZGlhIHN0YXJ0cyBhcnJpdmluZy4KLSAgICBh
dXRvIHJlbW90ZVNvdXJjZSA9IG1fbWVkaWFFbmRwb2ludC0+Y3JlYXRlTXV0ZWRSZW1vdGVTb3Vy
Y2UodHJhbnNjZWl2ZXJNaWQsIHNvdXJjZVR5cGUpOwotICAgIGF1dG8gcmVtb3RlVHJhY2tQcml2
YXRlID0gTWVkaWFTdHJlYW1UcmFja1ByaXZhdGU6OmNyZWF0ZShXVEZNb3ZlKHJlbW90ZVNvdXJj
ZSksIFN0cmluZyh0cmFja0lkKSk7Ci0gICAgYXV0byByZW1vdGVUcmFjayA9IE1lZGlhU3RyZWFt
VHJhY2s6OmNyZWF0ZSgqbV9wZWVyQ29ubmVjdGlvbi5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCks
IFdURk1vdmUocmVtb3RlVHJhY2tQcml2YXRlKSk7Ci0KLSAgICByZXR1cm4gUlRDUnRwUmVjZWl2
ZXI6OmNyZWF0ZShXVEZNb3ZlKHJlbW90ZVRyYWNrKSk7Ci19Ci0KLXN0ZDo6dW5pcXVlX3B0cjxS
VENEYXRhQ2hhbm5lbEhhbmRsZXI+IE1lZGlhRW5kcG9pbnRQZWVyQ29ubmVjdGlvbjo6Y3JlYXRl
RGF0YUNoYW5uZWxIYW5kbGVyKGNvbnN0IFN0cmluZyYgbGFiZWwsIGNvbnN0IFJUQ0RhdGFDaGFu
bmVsSW5pdCYgb3B0aW9ucykKLXsKLSAgICByZXR1cm4gbV9tZWRpYUVuZHBvaW50LT5jcmVhdGVE
YXRhQ2hhbm5lbEhhbmRsZXIobGFiZWwsIG9wdGlvbnMpOwotfQotCi12b2lkIE1lZGlhRW5kcG9p
bnRQZWVyQ29ubmVjdGlvbjo6cmVwbGFjZVRyYWNrKFJUQ1J0cFNlbmRlciYgc2VuZGVyLCBSZWY8
TWVkaWFTdHJlYW1UcmFjaz4mJiB3aXRoVHJhY2ssIERPTVByb21pc2VEZWZlcnJlZDx2b2lkPiYm
IHByb21pc2UpCi17Ci0gICAgUlRDUnRwVHJhbnNjZWl2ZXIqIHRyYW5zY2VpdmVyID0gbWF0Y2hU
cmFuc2NlaXZlcihtX3BlZXJDb25uZWN0aW9uLmdldFRyYW5zY2VpdmVycygpLCBbJnNlbmRlcl0g
KFJUQ1J0cFRyYW5zY2VpdmVyJiBjdXJyZW50KSB7Ci0gICAgICAgIHJldHVybiAmY3VycmVudC5z
ZW5kZXIoKSA9PSAmc2VuZGVyOwotICAgIH0pOwotICAgIEFTU0VSVCh0cmFuc2NlaXZlcik7Ci0K
LSAgICBjb25zdCBTdHJpbmcmIG1pZCA9IHRyYW5zY2VpdmVyLT5taWQoKTsKLSAgICBpZiAobWlk
LmlzTnVsbCgpKSB7Ci0gICAgICAgIC8vIFRyYW5zY2VpdmVyIGlzIG5vdCBhc3NvY2lhdGVkIHdp
dGggYSBtZWRpYSBkZXNjcmlwdGlvbiB5ZXQuCi0gICAgICAgIHNlbmRlci5zZXRUcmFjayhXVEZN
b3ZlKHdpdGhUcmFjaykpOwotICAgICAgICBwcm9taXNlLnJlc29sdmUoKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIHJ1blRhc2soW3RoaXMsIHByb3RlY3RlZFNlbmRlciA9IFJlZlB0
cjxSVENSdHBTZW5kZXI+KCZzZW5kZXIpLCBtaWQsIHByb3RlY3RlZFRyYWNrID0gV1RGTW92ZSh3
aXRoVHJhY2spLCBwcm90ZWN0ZWRQcm9taXNlID0gV1RGTW92ZShwcm9taXNlKV0oKSBtdXRhYmxl
IHsKLSAgICAgICAgcmVwbGFjZVRyYWNrVGFzaygqcHJvdGVjdGVkU2VuZGVyLCBtaWQsIFdURk1v
dmUocHJvdGVjdGVkVHJhY2spLCBwcm90ZWN0ZWRQcm9taXNlKTsKLSAgICB9KTsKLX0KLQotdm9p
ZCBNZWRpYUVuZHBvaW50UGVlckNvbm5lY3Rpb246OnJlcGxhY2VUcmFja1Rhc2soUlRDUnRwU2Vu
ZGVyJiBzZW5kZXIsIGNvbnN0IFN0cmluZyYgbWlkLCBSZWY8TWVkaWFTdHJlYW1UcmFjaz4mJiB3
aXRoVHJhY2ssIERPTVByb21pc2VEZWZlcnJlZDx2b2lkPiYgcHJvbWlzZSkKLXsKLSAgICBpZiAo
bV9wZWVyQ29ubmVjdGlvbi5pc0Nsb3NlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX21l
ZGlhRW5kcG9pbnQtPnJlcGxhY2VTZW5kU291cmNlKHdpdGhUcmFjay0+c291cmNlKCksIG1pZCk7
Ci0KLSAgICBzZW5kZXIuc2V0VHJhY2soV1RGTW92ZSh3aXRoVHJhY2spKTsKLSAgICBwcm9taXNl
LnJlc29sdmUoKTsKLX0KLQotdm9pZCBNZWRpYUVuZHBvaW50UGVlckNvbm5lY3Rpb246OmRvU3Rv
cCgpCi17Ci0gICAgbV9tZWRpYUVuZHBvaW50LT5zdG9wKCk7Ci19Ci0KLXZvaWQgTWVkaWFFbmRw
b2ludFBlZXJDb25uZWN0aW9uOjplbXVsYXRlUGxhdGZvcm1FdmVudChjb25zdCBTdHJpbmcmIGFj
dGlvbikKLXsKLSAgICBtX21lZGlhRW5kcG9pbnQtPmVtdWxhdGVQbGF0Zm9ybUV2ZW50KGFjdGlv
bik7Ci19Ci0KLU1lZGlhRW5kcG9pbnRTZXNzaW9uRGVzY3JpcHRpb24qIE1lZGlhRW5kcG9pbnRQ
ZWVyQ29ubmVjdGlvbjo6aW50ZXJuYWxMb2NhbERlc2NyaXB0aW9uKCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gbV9wZW5kaW5nTG9jYWxEZXNjcmlwdGlvbiA/IG1fcGVuZGluZ0xvY2FsRGVzY3JpcHRp
b24uZ2V0KCkgOiBtX2N1cnJlbnRMb2NhbERlc2NyaXB0aW9uLmdldCgpOwotfQotCi1NZWRpYUVu
ZHBvaW50U2Vzc2lvbkRlc2NyaXB0aW9uKiBNZWRpYUVuZHBvaW50UGVlckNvbm5lY3Rpb246Omlu
dGVybmFsUmVtb3RlRGVzY3JpcHRpb24oKSBjb25zdAotewotICAgIHJldHVybiBtX3BlbmRpbmdS
ZW1vdGVEZXNjcmlwdGlvbiA/IG1fcGVuZGluZ1JlbW90ZURlc2NyaXB0aW9uLmdldCgpIDogbV9j
dXJyZW50UmVtb3RlRGVzY3JpcHRpb24uZ2V0KCk7Ci19Ci0KLVJlZlB0cjxSVENTZXNzaW9uRGVz
Y3JpcHRpb24+IE1lZGlhRW5kcG9pbnRQZWVyQ29ubmVjdGlvbjo6Y3JlYXRlUlRDU2Vzc2lvbkRl
c2NyaXB0aW9uKE1lZGlhRW5kcG9pbnRTZXNzaW9uRGVzY3JpcHRpb24qIGRlc2NyaXB0aW9uKSBj
b25zdAotewotICAgIHJldHVybiBkZXNjcmlwdGlvbiA/IGRlc2NyaXB0aW9uLT50b1JUQ1Nlc3Np
b25EZXNjcmlwdGlvbigqbV9zZHBQcm9jZXNzb3IpIDogbnVsbHB0cjsKLX0KLQotdm9pZCBNZWRp
YUVuZHBvaW50UGVlckNvbm5lY3Rpb246OmdvdER0bHNGaW5nZXJwcmludChjb25zdCBTdHJpbmcm
IGZpbmdlcnByaW50LCBjb25zdCBTdHJpbmcmIGZpbmdlcnByaW50RnVuY3Rpb24pCi17Ci0gICAg
QVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLQotICAgIG1fZHRsc0ZpbmdlcnByaW50ID0gZmluZ2Vy
cHJpbnQ7Ci0gICAgbV9kdGxzRmluZ2VycHJpbnRGdW5jdGlvbiA9IGZpbmdlcnByaW50RnVuY3Rp
b247Ci0KLSAgICBzdGFydFJ1bm5pbmdUYXNrcygpOwotfQotCi12b2lkIE1lZGlhRW5kcG9pbnRQ
ZWVyQ29ubmVjdGlvbjo6Z290SWNlQ2FuZGlkYXRlKGNvbnN0IFN0cmluZyYgbWlkLCBJY2VDYW5k
aWRhdGUmJiBjYW5kaWRhdGUpCi17Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLQotICAg
IGF1dG8mIG1lZGlhRGVzY3JpcHRpb25zID0gaW50ZXJuYWxMb2NhbERlc2NyaXB0aW9uKCktPmNv
bmZpZ3VyYXRpb24oKS0+bWVkaWFEZXNjcmlwdGlvbnMoKTsKLSAgICBzaXplX3QgbWVkaWFEZXNj
cmlwdGlvbkluZGV4ID0gbm90Rm91bmQ7Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1l
ZGlhRGVzY3JpcHRpb25zLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmIChtZWRpYURlc2NyaXB0
aW9uc1tpXS5taWQgPT0gbWlkKSB7Ci0gICAgICAgICAgICBtZWRpYURlc2NyaXB0aW9uSW5kZXgg
PSBpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgQVNTRVJUKG1l
ZGlhRGVzY3JpcHRpb25JbmRleCAhPSBub3RGb3VuZCk7Ci0KLSAgICBTdHJpbmcgY2FuZGlkYXRl
TGluZTsKLSAgICBhdXRvIHJlc3VsdCA9IG1fc2RwUHJvY2Vzc29yLT5nZW5lcmF0ZUNhbmRpZGF0
ZUxpbmUoY2FuZGlkYXRlLCBjYW5kaWRhdGVMaW5lKTsKLSAgICBpZiAocmVzdWx0ICE9IFNEUFBy
b2Nlc3Nvcjo6UmVzdWx0OjpTdWNjZXNzKSB7Ci0gICAgICAgIExPR19FUlJPUigiU0RQUHJvY2Vz
c29yIGludGVybmFsIGVycm9yIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtZWRp
YURlc2NyaXB0aW9uc1ttZWRpYURlc2NyaXB0aW9uSW5kZXhdLmFkZEljZUNhbmRpZGF0ZShXVEZN
b3ZlKGNhbmRpZGF0ZSkpOwotCi0gICAgZmlyZUlDRUNhbmRpZGF0ZUV2ZW50KFJUQ0ljZUNhbmRp
ZGF0ZTo6Y3JlYXRlKGNhbmRpZGF0ZUxpbmUsIG1pZCwgbWVkaWFEZXNjcmlwdGlvbkluZGV4KSk7
Ci19Ci0KLXZvaWQgTWVkaWFFbmRwb2ludFBlZXJDb25uZWN0aW9uOjpkb25lR2F0aGVyaW5nQ2Fu
ZGlkYXRlcyhjb25zdCBTdHJpbmcmIG1pZCkKLXsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkp
OwotCi0gICAgUnRwVHJhbnNjZWl2ZXJWZWN0b3IgdHJhbnNjZWl2ZXJzID0gUnRwVHJhbnNjZWl2
ZXJWZWN0b3IobV9wZWVyQ29ubmVjdGlvbi5nZXRUcmFuc2NlaXZlcnMoKSk7Ci0gICAgUlRDUnRw
VHJhbnNjZWl2ZXIqIG5vdGlmeWluZ1RyYW5zY2VpdmVyID0gbWF0Y2hUcmFuc2NlaXZlckJ5TWlk
KHRyYW5zY2VpdmVycywgbWlkKTsKLSAgICBBU1NFUlQobm90aWZ5aW5nVHJhbnNjZWl2ZXIpOwot
Ci0gICAgbm90aWZ5aW5nVHJhbnNjZWl2ZXItPmljZVRyYW5zcG9ydCgpLnNldEdhdGhlcmluZ1N0
YXRlKFJUQ0ljZUdhdGhlcmluZ1N0YXRlOjpDb21wbGV0ZSk7Ci0KLSAgICAvLyBEb24ndCBub3Rp
ZnkgdGhlIHNjcmlwdCBpZiB0aGVyZSBhcmUgdHJhbnNjZWl2ZXJzIHN0aWxsIGdhdGhlcmluZy4K
LSAgICBSVENSdHBUcmFuc2NlaXZlciogc3RpbGxHYXRoZXJpbmdUcmFuc2NlaXZlciA9IG1hdGNo
VHJhbnNjZWl2ZXIodHJhbnNjZWl2ZXJzLCBbXSAoUlRDUnRwVHJhbnNjZWl2ZXImIGN1cnJlbnQp
IHsKLSAgICAgICAgcmV0dXJuICFjdXJyZW50LnN0b3BwZWQoKSAmJiAhY3VycmVudC5taWQoKS5p
c051bGwoKQotICAgICAgICAgICAgJiYgY3VycmVudC5pY2VUcmFuc3BvcnQoKS5nYXRoZXJpbmdT
dGF0ZSgpICE9IFJUQ0ljZUdhdGhlcmluZ1N0YXRlOjpDb21wbGV0ZTsKLSAgICB9KTsKLSAgICBp
ZiAoIXN0aWxsR2F0aGVyaW5nVHJhbnNjZWl2ZXIpCi0gICAgICAgIFBlZXJDb25uZWN0aW9uQmFj
a2VuZDo6ZG9uZUdhdGhlcmluZ0NhbmRpZGF0ZXMoKTsKLX0KLQotc3RhdGljIFJUQ0ljZUNvbm5l
Y3Rpb25TdGF0ZSBkZXJpdmVBZ2dyZWdhdGVkSWNlQ29ubmVjdGlvblN0YXRlKGNvbnN0IFZlY3Rv
cjxSVENJY2VUcmFuc3BvcnRTdGF0ZT4mIHN0YXRlcykKLXsKLSAgICB1bnNpZ25lZCBuZXdDb3Vu
dCA9IDA7Ci0gICAgdW5zaWduZWQgY2hlY2tpbmdDb3VudCA9IDA7Ci0gICAgdW5zaWduZWQgY29u
bmVjdGVkQ291bnQgPSAwOwotICAgIHVuc2lnbmVkIGNvbXBsZXRlZENvdW50ID0gMDsKLSAgICB1
bnNpZ25lZCBmYWlsZWRDb3VudCA9IDA7Ci0gICAgdW5zaWduZWQgZGlzY29ubmVjdGVkQ291bnQg
PSAwOwotICAgIHVuc2lnbmVkIGNsb3NlZENvdW50ID0gMDsKLQotICAgIGZvciAoYXV0byYgc3Rh
dGUgOiBzdGF0ZXMpIHsKLSAgICAgICAgc3dpdGNoIChzdGF0ZSkgewotICAgICAgICBjYXNlIFJU
Q0ljZVRyYW5zcG9ydFN0YXRlOjpOZXc6Ci0gICAgICAgICAgICArK25ld0NvdW50OwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUlRDSWNlVHJhbnNwb3J0U3RhdGU6OkNoZWNraW5n
OgotICAgICAgICAgICAgKytjaGVja2luZ0NvdW50OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgUlRDSWNlVHJhbnNwb3J0U3RhdGU6OkNvbm5lY3RlZDoKLSAgICAgICAgICAgICsr
Y29ubmVjdGVkQ291bnQ7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBSVENJY2VU
cmFuc3BvcnRTdGF0ZTo6Q29tcGxldGVkOgotICAgICAgICAgICAgKytjb21wbGV0ZWRDb3VudDsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFJUQ0ljZVRyYW5zcG9ydFN0YXRlOjpG
YWlsZWQ6Ci0gICAgICAgICAgICArK2ZhaWxlZENvdW50OwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgUlRDSWNlVHJhbnNwb3J0U3RhdGU6OkRpc2Nvbm5lY3RlZDoKLSAgICAgICAg
ICAgICsrZGlzY29ubmVjdGVkQ291bnQ7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBSVENJY2VUcmFuc3BvcnRTdGF0ZTo6Q2xvc2VkOgotICAgICAgICAgICAgKytjbG9zZWRDb3Vu
dDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gVGhlIGFn
Z3JlZ2F0ZWQgUlRDSWNlQ29ubmVjdGlvblN0YXRlIGlzIGRlcml2ZWQgZnJvbSB0aGUgUlRDSWNl
VHJhbnNwb3J0U3RhdGUgb2YgYWxsIFJUQ0ljZVRyYW5zcG9ydHMuCi0gICAgaWYgKChuZXdDb3Vu
dCA+IDAgJiYgIWNoZWNraW5nQ291bnQgJiYgIWZhaWxlZENvdW50ICYmICFkaXNjb25uZWN0ZWRD
b3VudCkgfHwgKGNsb3NlZENvdW50ID09IHN0YXRlcy5zaXplKCkpKQotICAgICAgICByZXR1cm4g
UlRDSWNlQ29ubmVjdGlvblN0YXRlOjpOZXc7Ci0KLSAgICBpZiAoY2hlY2tpbmdDb3VudCA+IDAg
JiYgIWZhaWxlZENvdW50ICYmICFkaXNjb25uZWN0ZWRDb3VudCkKLSAgICAgICAgcmV0dXJuIFJU
Q0ljZUNvbm5lY3Rpb25TdGF0ZTo6Q2hlY2tpbmc7Ci0KLSAgICBpZiAoKGNvbm5lY3RlZENvdW50
ICsgY29tcGxldGVkQ291bnQgKyBjbG9zZWRDb3VudCkgPT0gc3RhdGVzLnNpemUoKSAmJiBjb25u
ZWN0ZWRDb3VudCA+IDApCi0gICAgICAgIHJldHVybiBSVENJY2VDb25uZWN0aW9uU3RhdGU6OkNv
bm5lY3RlZDsKLQotICAgIGlmICgoY29tcGxldGVkQ291bnQgKyBjbG9zZWRDb3VudCkgPT0gc3Rh
dGVzLnNpemUoKSAmJiBjb21wbGV0ZWRDb3VudCA+IDApCi0gICAgICAgIHJldHVybiBSVENJY2VD
b25uZWN0aW9uU3RhdGU6OkNvbXBsZXRlZDsKLQotICAgIGlmIChmYWlsZWRDb3VudCA+IDApCi0g
ICAgICAgIHJldHVybiBSVENJY2VDb25uZWN0aW9uU3RhdGU6OkZhaWxlZDsKLQotICAgIGlmIChk
aXNjb25uZWN0ZWRDb3VudCA+IDApIC8vIEFueSBmYWlsZWQgY2F1Z2h0IGFib3ZlLgotICAgICAg
ICByZXR1cm4gUlRDSWNlQ29ubmVjdGlvblN0YXRlOjpEaXNjb25uZWN0ZWQ7Ci0KLSAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gUlRDSWNlQ29ubmVjdGlvblN0YXRlOjpOZXc7
Ci19Ci0KLXZvaWQgTWVkaWFFbmRwb2ludFBlZXJDb25uZWN0aW9uOjppY2VUcmFuc3BvcnRTdGF0
ZUNoYW5nZWQoY29uc3QgU3RyaW5nJiBtaWQsIFJUQ0ljZVRyYW5zcG9ydFN0YXRlIG1lZGlhRW5k
cG9pbnRJY2VUcmFuc3BvcnRTdGF0ZSkKLXsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwot
Ci0gICAgUlRDUnRwVHJhbnNjZWl2ZXIqIHRyYW5zY2VpdmVyID0gbWF0Y2hUcmFuc2NlaXZlckJ5
TWlkKG1fcGVlckNvbm5lY3Rpb24uZ2V0VHJhbnNjZWl2ZXJzKCksIG1pZCk7Ci0gICAgQVNTRVJU
KHRyYW5zY2VpdmVyKTsKLQotICAgIFJUQ0ljZVRyYW5zcG9ydFN0YXRlIHRyYW5zcG9ydFN0YXRl
ID0gc3RhdGljX2Nhc3Q8UlRDSWNlVHJhbnNwb3J0U3RhdGU+KG1lZGlhRW5kcG9pbnRJY2VUcmFu
c3BvcnRTdGF0ZSk7Ci0gICAgdHJhbnNjZWl2ZXItPmljZVRyYW5zcG9ydCgpLnNldFN0YXRlKHRy
YW5zcG9ydFN0YXRlKTsKLQotICAgIC8vIERldGVybWluZSBpZiB0aGUgc2NyaXB0IG5lZWRzIHRv
IGJlIG5vdGlmaWVkLgotICAgIFZlY3RvcjxSVENJY2VUcmFuc3BvcnRTdGF0ZT4gdHJhbnNwb3J0
U3RhdGVzOwotICAgIHRyYW5zcG9ydFN0YXRlcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG1fcGVl
ckNvbm5lY3Rpb24uZ2V0VHJhbnNjZWl2ZXJzKCkuc2l6ZSgpKTsKLSAgICBmb3IgKGF1dG8mIHRy
YW5zY2VpdmVyIDogbV9wZWVyQ29ubmVjdGlvbi5nZXRUcmFuc2NlaXZlcnMoKSkKLSAgICAgICAg
dHJhbnNwb3J0U3RhdGVzLnVuY2hlY2tlZEFwcGVuZCh0cmFuc2NlaXZlci0+aWNlVHJhbnNwb3J0
KCkuc3RhdGUoKSk7Ci0KLSAgICBtX3BlZXJDb25uZWN0aW9uLnVwZGF0ZUljZUNvbm5lY3Rpb25T
dGF0ZShkZXJpdmVBZ2dyZWdhdGVkSWNlQ29ubmVjdGlvblN0YXRlKHRyYW5zcG9ydFN0YXRlcykp
OwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoV0VCX1JU
QykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFF
bmRwb2ludFBlZXJDb25uZWN0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3Ry
ZWFtL01lZGlhRW5kcG9pbnRQZWVyQ29ubmVjdGlvbi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCBiYjgxMzEyMWM5MmNkMzFkNjU2NTdkMDVhMzQ5YjYyOTYzYzc5YmU1Li4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFFbmRwb2ludFBlZXJDb25uZWN0aW9uLmgKKysrIC9kZXYv
bnVsbApAQCAtMSwxMzMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSwgMjAxNiBF
cmljc3NvbiBBQi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIKLSAqICAgIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqICAgIGRpc3RyaWJ1dGlvbi4KLSAqIDMu
IE5laXRoZXIgdGhlIG5hbWUgb2YgRXJpY3Nzb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJp
YnV0b3JzCi0gKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tIHRoaXMKLSAqICAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
LSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBFTkFC
TEUoV0VCX1JUQykKLQotI2luY2x1ZGUgIk1lZGlhRW5kcG9pbnQuaCIKLSNpbmNsdWRlICJQZWVy
Q29ubmVjdGlvbkJhY2tlbmQuaCIKLSNpbmNsdWRlICJSVENTZXNzaW9uRGVzY3JpcHRpb24uaCIK
LSNpbmNsdWRlIDx3dGYvRnVuY3Rpb24uaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFz
cyBNZWRpYUVuZHBvaW50U2Vzc2lvbkRlc2NyaXB0aW9uOwotY2xhc3MgU0RQUHJvY2Vzc29yOwot
Ci1jbGFzcyBNZWRpYUVuZHBvaW50UGVlckNvbm5lY3Rpb24gZmluYWwgOiBwdWJsaWMgUGVlckNv
bm5lY3Rpb25CYWNrZW5kLCBwdWJsaWMgTWVkaWFFbmRwb2ludENsaWVudCB7Ci1wdWJsaWM6Ci0g
ICAgV0VCQ09SRV9FWFBPUlQgZXhwbGljaXQgTWVkaWFFbmRwb2ludFBlZXJDb25uZWN0aW9uKFJU
Q1BlZXJDb25uZWN0aW9uJik7Ci0KLXByaXZhdGU6Ci0gICAgUmVmUHRyPFJUQ1Nlc3Npb25EZXNj
cmlwdGlvbj4gbG9jYWxEZXNjcmlwdGlvbigpIGNvbnN0IGZpbmFsOwotICAgIFJlZlB0cjxSVENT
ZXNzaW9uRGVzY3JpcHRpb24+IGN1cnJlbnRMb2NhbERlc2NyaXB0aW9uKCkgY29uc3QgZmluYWw7
Ci0gICAgUmVmUHRyPFJUQ1Nlc3Npb25EZXNjcmlwdGlvbj4gcGVuZGluZ0xvY2FsRGVzY3JpcHRp
b24oKSBjb25zdCBmaW5hbDsKLQotICAgIFJlZlB0cjxSVENTZXNzaW9uRGVzY3JpcHRpb24+IHJl
bW90ZURlc2NyaXB0aW9uKCkgY29uc3QgZmluYWw7Ci0gICAgUmVmUHRyPFJUQ1Nlc3Npb25EZXNj
cmlwdGlvbj4gY3VycmVudFJlbW90ZURlc2NyaXB0aW9uKCkgY29uc3QgZmluYWw7Ci0gICAgUmVm
UHRyPFJUQ1Nlc3Npb25EZXNjcmlwdGlvbj4gcGVuZGluZ1JlbW90ZURlc2NyaXB0aW9uKCkgY29u
c3QgZmluYWw7Ci0KLSAgICBib29sIHNldENvbmZpZ3VyYXRpb24oTWVkaWFFbmRwb2ludENvbmZp
Z3VyYXRpb24mJikgZmluYWw7Ci0KLSAgICB2b2lkIGdldFN0YXRzKE1lZGlhU3RyZWFtVHJhY2sq
LCBSZWY8RGVmZXJyZWRQcm9taXNlPiYmKSBmaW5hbDsKLQotICAgIFZlY3RvcjxSZWZQdHI8TWVk
aWFTdHJlYW0+PiBnZXRSZW1vdGVTdHJlYW1zKCkgY29uc3QgZmluYWw7Ci0KLSAgICBSZWY8UlRD
UnRwUmVjZWl2ZXI+IGNyZWF0ZVJlY2VpdmVyKGNvbnN0IFN0cmluZyYgdHJhbnNjZWl2ZXJNaWQs
IGNvbnN0IFN0cmluZyYgdHJhY2tLaW5kLCBjb25zdCBTdHJpbmcmIHRyYWNrSWQpIGZpbmFsOwot
ICAgIHZvaWQgcmVwbGFjZVRyYWNrKFJUQ1J0cFNlbmRlciYsIFJlZjxNZWRpYVN0cmVhbVRyYWNr
PiYmLCBET01Qcm9taXNlRGVmZXJyZWQ8dm9pZD4mJikgZmluYWw7Ci0KLSAgICB2b2lkIGVtdWxh
dGVQbGF0Zm9ybUV2ZW50KGNvbnN0IFN0cmluZyYgYWN0aW9uKSBmaW5hbDsKLQotICAgIHZvaWQg
cnVuVGFzayhGdW5jdGlvbjx2b2lkICgpPiYmKTsKLSAgICB2b2lkIHN0YXJ0UnVubmluZ1Rhc2tz
KCk7Ci0KLSAgICB2b2lkIGRvQ3JlYXRlT2ZmZXIoUlRDT2ZmZXJPcHRpb25zJiYpIGZpbmFsOwot
ICAgIHZvaWQgZG9DcmVhdGVBbnN3ZXIoUlRDQW5zd2VyT3B0aW9ucyYmKSBmaW5hbDsKLSAgICB2
b2lkIGRvU2V0TG9jYWxEZXNjcmlwdGlvbihSVENTZXNzaW9uRGVzY3JpcHRpb24mKSBmaW5hbDsK
LSAgICB2b2lkIGRvU2V0UmVtb3RlRGVzY3JpcHRpb24oUlRDU2Vzc2lvbkRlc2NyaXB0aW9uJikg
ZmluYWw7Ci0gICAgdm9pZCBkb0FkZEljZUNhbmRpZGF0ZShSVENJY2VDYW5kaWRhdGUmKSBmaW5h
bDsKLSAgICB2b2lkIGRvU3RvcCgpIGZpbmFsOwotCi0gICAgdm9pZCBjcmVhdGVPZmZlclRhc2so
Y29uc3QgUlRDT2ZmZXJPcHRpb25zJik7Ci0gICAgdm9pZCBjcmVhdGVBbnN3ZXJUYXNrKGNvbnN0
IFJUQ0Fuc3dlck9wdGlvbnMmKTsKLQotICAgIHZvaWQgc2V0TG9jYWxEZXNjcmlwdGlvblRhc2so
UmVmUHRyPFJUQ1Nlc3Npb25EZXNjcmlwdGlvbj4mJik7Ci0gICAgdm9pZCBzZXRSZW1vdGVEZXNj
cmlwdGlvblRhc2soUmVmUHRyPFJUQ1Nlc3Npb25EZXNjcmlwdGlvbj4mJik7Ci0KLSAgICB2b2lk
IGFkZEljZUNhbmRpZGF0ZVRhc2soUlRDSWNlQ2FuZGlkYXRlJik7Ci0KLSAgICB2b2lkIHJlcGxh
Y2VUcmFja1Rhc2soUlRDUnRwU2VuZGVyJiwgY29uc3QgU3RyaW5nJiBtaWQsIFJlZjxNZWRpYVN0
cmVhbVRyYWNrPiYmLCBET01Qcm9taXNlRGVmZXJyZWQ8dm9pZD4mKTsKLQotICAgIGJvb2wgbG9j
YWxEZXNjcmlwdGlvblR5cGVWYWxpZEZvclN0YXRlKFJUQ1NkcFR5cGUpIGNvbnN0OwotICAgIGJv
b2wgcmVtb3RlRGVzY3JpcHRpb25UeXBlVmFsaWRGb3JTdGF0ZShSVENTZHBUeXBlKSBjb25zdDsK
LQotICAgIE1lZGlhRW5kcG9pbnRTZXNzaW9uRGVzY3JpcHRpb24qIGludGVybmFsTG9jYWxEZXNj
cmlwdGlvbigpIGNvbnN0OwotICAgIE1lZGlhRW5kcG9pbnRTZXNzaW9uRGVzY3JpcHRpb24qIGlu
dGVybmFsUmVtb3RlRGVzY3JpcHRpb24oKSBjb25zdDsKLSAgICBSZWZQdHI8UlRDU2Vzc2lvbkRl
c2NyaXB0aW9uPiBjcmVhdGVSVENTZXNzaW9uRGVzY3JpcHRpb24oTWVkaWFFbmRwb2ludFNlc3Np
b25EZXNjcmlwdGlvbiopIGNvbnN0OwotCi0gICAgLy8gTWVkaWFFbmRwb2ludENsaWVudAotICAg
IHZvaWQgZ290RHRsc0ZpbmdlcnByaW50KGNvbnN0IFN0cmluZyYgZmluZ2VycHJpbnQsIGNvbnN0
IFN0cmluZyYgZmluZ2VycHJpbnRGdW5jdGlvbikgZmluYWw7Ci0gICAgdm9pZCBnb3RJY2VDYW5k
aWRhdGUoY29uc3QgU3RyaW5nJiBtaWQsIEljZUNhbmRpZGF0ZSYmKSBmaW5hbDsKLSAgICB2b2lk
IGRvbmVHYXRoZXJpbmdDYW5kaWRhdGVzKGNvbnN0IFN0cmluZyYgbWlkKSBmaW5hbDsKLSAgICB2
b2lkIGljZVRyYW5zcG9ydFN0YXRlQ2hhbmdlZChjb25zdCBTdHJpbmcmIG1pZCwgUlRDSWNlVHJh
bnNwb3J0U3RhdGUpIGZpbmFsOwotCi0gICAgc3RkOjp1bmlxdWVfcHRyPFJUQ0RhdGFDaGFubmVs
SGFuZGxlcj4gY3JlYXRlRGF0YUNoYW5uZWxIYW5kbGVyKGNvbnN0IFN0cmluZyYsIGNvbnN0IFJU
Q0RhdGFDaGFubmVsSW5pdCYpIGZpbmFsOwotCi0gICAgc3RkOjp1bmlxdWVfcHRyPE1lZGlhRW5k
cG9pbnQ+IG1fbWVkaWFFbmRwb2ludDsKLQotICAgIEZ1bmN0aW9uPHZvaWQgKCk+IG1faW5pdGlh
bERlZmVycmVkVGFzazsKLQotICAgIHN0ZDo6dW5pcXVlX3B0cjxTRFBQcm9jZXNzb3I+IG1fc2Rw
UHJvY2Vzc29yOwotCi0gICAgVmVjdG9yPE1lZGlhUGF5bG9hZD4gbV9kZWZhdWx0QXVkaW9QYXls
b2FkczsKLSAgICBWZWN0b3I8TWVkaWFQYXlsb2FkPiBtX2RlZmF1bHRWaWRlb1BheWxvYWRzOwot
Ci0gICAgU3RyaW5nIG1fY25hbWU7Ci0gICAgU3RyaW5nIG1faWNlVWZyYWc7Ci0gICAgU3RyaW5n
IG1faWNlUGFzc3dvcmQ7Ci0gICAgU3RyaW5nIG1fZHRsc0ZpbmdlcnByaW50OwotICAgIFN0cmlu
ZyBtX2R0bHNGaW5nZXJwcmludEZ1bmN0aW9uOwotICAgIHVuc2lnbmVkIG1fc2RwT2ZmZXJTZXNz
aW9uVmVyc2lvbiB7IDAgfTsKLSAgICB1bnNpZ25lZCBtX3NkcEFuc3dlclNlc3Npb25WZXJzaW9u
IHsgMCB9OwotCi0gICAgUmVmUHRyPE1lZGlhRW5kcG9pbnRTZXNzaW9uRGVzY3JpcHRpb24+IG1f
Y3VycmVudExvY2FsRGVzY3JpcHRpb247Ci0gICAgUmVmUHRyPE1lZGlhRW5kcG9pbnRTZXNzaW9u
RGVzY3JpcHRpb24+IG1fcGVuZGluZ0xvY2FsRGVzY3JpcHRpb247Ci0KLSAgICBSZWZQdHI8TWVk
aWFFbmRwb2ludFNlc3Npb25EZXNjcmlwdGlvbj4gbV9jdXJyZW50UmVtb3RlRGVzY3JpcHRpb247
Ci0gICAgUmVmUHRyPE1lZGlhRW5kcG9pbnRTZXNzaW9uRGVzY3JpcHRpb24+IG1fcGVuZGluZ1Jl
bW90ZURlc2NyaXB0aW9uOwotCi0gICAgSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxNZWRpYVN0cmVh
bT4+IG1fcmVtb3RlU3RyZWFtTWFwOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0j
ZW5kaWYgLy8gRU5BQkxFKFdFQl9SVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL21lZGlhc3RyZWFtL01lZGlhRW5kcG9pbnRTZXNzaW9uRGVzY3JpcHRpb24uY3BwIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYUVuZHBvaW50U2Vzc2lvbkRlc2Ny
aXB0aW9uLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWM2MDZmNTBjMmE5ZGQ3
ZWU4MTIzY2JlMzM5Zjc0N2Y3NDQwZmU3OS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlh
RW5kcG9pbnRTZXNzaW9uRGVzY3JpcHRpb24uY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTE3ICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUsIDIwMTYgRXJpY3Nzb24gQUIuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
Ci0gKiAgICBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlCi0gKiAgICBkaXN0cmlidXRpb24uCi0gKiAzLiBOZWl0aGVyIHRoZSBuYW1l
IG9mIEVyaWNzc29uIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICogICAgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlz
Ci0gKiAgICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
LSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJNZWRpYUVuZHBv
aW50U2Vzc2lvbkRlc2NyaXB0aW9uLmgiCi0KLSNpZiBFTkFCTEUoV0VCX1JUQykKLQotI2luY2x1
ZGUgIlNEUFByb2Nlc3Nvci5oIgotI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Ci0KLSNkZWZpbmUgU1RSSU5HX0ZVTkNUSU9OKG5hbWUpIFwKLSAg
ICBzdGF0aWMgY29uc3QgU3RyaW5nJiBuYW1lIyNTdHJpbmcoKSBcCi0gICAgeyBcCi0gICAgICAg
IHN0YXRpYyBOZXZlckRlc3Ryb3llZDxjb25zdCBTdHJpbmc+IG5hbWUoTUFLRV9TVEFUSUNfU1RS
SU5HX0lNUEwoI25hbWUpKTsgXAotICAgICAgICByZXR1cm4gbmFtZTsgXAotICAgIH0KLQotU1RS
SU5HX0ZVTkNUSU9OKG9mZmVyKQotU1RSSU5HX0ZVTkNUSU9OKHByYW5zd2VyKQotU1RSSU5HX0ZV
TkNUSU9OKGFuc3dlcikKLVNUUklOR19GVU5DVElPTihyb2xsYmFjaykKLQotUmVmPE1lZGlhRW5k
cG9pbnRTZXNzaW9uRGVzY3JpcHRpb24+IE1lZGlhRW5kcG9pbnRTZXNzaW9uRGVzY3JpcHRpb246
OmNyZWF0ZShSVENTZHBUeXBlIHR5cGUsIFJlZlB0cjxNZWRpYUVuZHBvaW50U2Vzc2lvbkNvbmZp
Z3VyYXRpb24+JiYgY29uZmlndXJhdGlvbikKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBN
ZWRpYUVuZHBvaW50U2Vzc2lvbkRlc2NyaXB0aW9uKHR5cGUsIFdURk1vdmUoY29uZmlndXJhdGlv
biksIG51bGxwdHIpKTsKLX0KLQotRXhjZXB0aW9uT3I8UmVmPE1lZGlhRW5kcG9pbnRTZXNzaW9u
RGVzY3JpcHRpb24+PiBNZWRpYUVuZHBvaW50U2Vzc2lvbkRlc2NyaXB0aW9uOjpjcmVhdGUoUmVm
UHRyPFJUQ1Nlc3Npb25EZXNjcmlwdGlvbj4mJiBydGNEZXNjcmlwdGlvbiwgY29uc3QgU0RQUHJv
Y2Vzc29yJiBzZHBQcm9jZXNzb3IpCi17Ci0gICAgUmVmUHRyPE1lZGlhRW5kcG9pbnRTZXNzaW9u
Q29uZmlndXJhdGlvbj4gY29uZmlndXJhdGlvbjsKLSAgICBhdXRvIHJlc3VsdCA9IHNkcFByb2Nl
c3Nvci5wYXJzZShydGNEZXNjcmlwdGlvbi0+c2RwKCksIGNvbmZpZ3VyYXRpb24pOwotICAgIGlm
IChyZXN1bHQgIT0gU0RQUHJvY2Vzc29yOjpSZXN1bHQ6OlN1Y2Nlc3MpIHsKLSAgICAgICAgaWYg
KHJlc3VsdCA9PSBTRFBQcm9jZXNzb3I6OlJlc3VsdDo6UGFyc2VFcnJvcikKLSAgICAgICAgICAg
IHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3IsIEFTQ0lJTGl0ZXJhbCgiU0RQ
IGNvbnRlbnQgaXMgaW52YWxpZCIpIH07Ci0gICAgICAgIExPR19FUlJPUigiU0RQUHJvY2Vzc29y
IGludGVybmFsIGVycm9yIik7Ci0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBBYm9ydEVycm9y
LCBBU0NJSUxpdGVyYWwoIkludGVybmFsIGVycm9yIikgfTsKLSAgICB9Ci0gICAgcmV0dXJuIGFk
b3B0UmVmKCpuZXcgTWVkaWFFbmRwb2ludFNlc3Npb25EZXNjcmlwdGlvbihydGNEZXNjcmlwdGlv
bi0+dHlwZSgpLCBXVEZNb3ZlKGNvbmZpZ3VyYXRpb24pLCBXVEZNb3ZlKHJ0Y0Rlc2NyaXB0aW9u
KSkpOwotfQotCi1SZWZQdHI8UlRDU2Vzc2lvbkRlc2NyaXB0aW9uPiBNZWRpYUVuZHBvaW50U2Vz
c2lvbkRlc2NyaXB0aW9uOjp0b1JUQ1Nlc3Npb25EZXNjcmlwdGlvbihjb25zdCBTRFBQcm9jZXNz
b3ImIHNkcFByb2Nlc3NvcikgY29uc3QKLXsKLSAgICBTdHJpbmcgc2RwU3RyaW5nOwotICAgIFNE
UFByb2Nlc3Nvcjo6UmVzdWx0IHJlc3VsdCA9IHNkcFByb2Nlc3Nvci5nZW5lcmF0ZSgqbV9jb25m
aWd1cmF0aW9uLCBzZHBTdHJpbmcpOwotICAgIGlmIChyZXN1bHQgIT0gU0RQUHJvY2Vzc29yOjpS
ZXN1bHQ6OlN1Y2Nlc3MpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJTRFBQcm9jZXNzb3IgaW50ZXJu
YWwgZXJyb3IiKTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAgLy8gSWYg
dGhpcyBvYmplY3Qgd2FzIGNyZWF0ZWQgZnJvbSBhbiBSVENTZXNzaW9uRGVzY3JpcHRpb24sIHRv
UlRDU2Vzc2lvbkRlc2NyaXB0aW9uIHdpbGwgcmV0dXJuCi0gICAgLy8gdGhhdCBzYW1lIGluc3Rh
bmNlIGJ1dCB3aXRoIGFuIHVwZGF0ZWQgc2RwLiBJdCBpcyB1c2VkIGZvciBSVENQZWVyQ29ubmVj
dGlvbidzIGRlc2NyaXB0aW9uCi0gICAgLy8gYXRyaWJ1dGVzIChlLmcuIGxvY2FsRGVzY3JpcHRp
b24gYW5kIHBlbmRpbmdMb2NhbERlc2NyaXB0aW9uKS4KLSAgICBpZiAobV9ydGNEZXNjcmlwdGlv
bikgewotICAgICAgICBtX3J0Y0Rlc2NyaXB0aW9uLT5zZXRTZHAoV1RGTW92ZShzZHBTdHJpbmcp
KTsKLSAgICAgICAgcmV0dXJuIG1fcnRjRGVzY3JpcHRpb247Ci0gICAgfQotCi0gICAgcmV0dXJu
IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbjo6Y3JlYXRlKG1fdHlwZSwgV1RGTW92ZShzZHBTdHJpbmcp
KTsKLX0KLQotLy8gRklYTUU6IHVuaWZ5IHdpdGggTGliV2ViUlRDTWVkaWFFbmRwb2ludCBzZXNz
aW9uRGVzY3JpcHRpb25UeXBlKCkuCi1jb25zdCBTdHJpbmcmIE1lZGlhRW5kcG9pbnRTZXNzaW9u
RGVzY3JpcHRpb246OnR5cGVTdHJpbmcoKSBjb25zdAotewotICAgIHN3aXRjaCAobV90eXBlKSB7
Ci0gICAgY2FzZSBSVENTZHBUeXBlOjpPZmZlcjoKLSAgICAgICAgcmV0dXJuIG9mZmVyU3RyaW5n
KCk7Ci0gICAgY2FzZSBSVENTZHBUeXBlOjpQcmFuc3dlcjoKLSAgICAgICAgcmV0dXJuIHByYW5z
d2VyU3RyaW5nKCk7Ci0gICAgY2FzZSBSVENTZHBUeXBlOjpBbnN3ZXI6Ci0gICAgICAgIHJldHVy
biBhbnN3ZXJTdHJpbmcoKTsKLSAgICBjYXNlIFJUQ1NkcFR5cGU6OlJvbGxiYWNrOgotICAgICAg
ICByZXR1cm4gcm9sbGJhY2tTdHJpbmcoKTsKLSAgICB9Ci0KLSAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKLSAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKLX0KLQotYm9vbCBNZWRpYUVuZHBvaW50
U2Vzc2lvbkRlc2NyaXB0aW9uOjppc0xhdGVyVGhhbihNZWRpYUVuZHBvaW50U2Vzc2lvbkRlc2Ny
aXB0aW9uKiBvdGhlcikgY29uc3QKLXsKLSAgICByZXR1cm4gIW90aGVyIHx8IGNvbmZpZ3VyYXRp
b24oKS0+c2Vzc2lvblZlcnNpb24oKSA+IG90aGVyLT5jb25maWd1cmF0aW9uKCktPnNlc3Npb25W
ZXJzaW9uKCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJM
RShXRUJfUlRDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVh
bS9NZWRpYUVuZHBvaW50U2Vzc2lvbkRlc2NyaXB0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL21lZGlhc3RyZWFtL01lZGlhRW5kcG9pbnRTZXNzaW9uRGVzY3JpcHRpb24uaApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWQwNWM3MjkyY2VjMjkxZGU5ZjEzMTFmMTM4OGQzN2Ri
YWEzYzY3NS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhRW5kcG9pbnRTZXNzaW9uRGVz
Y3JpcHRpb24uaAorKysgL2Rldi9udWxsCkBAIC0xLDc0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTUsIDIwMTYgRXJpY3Nzb24gQUIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqICAgIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqICAg
IGRpc3RyaWJ1dGlvbi4KLSAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgRXJpY3Nzb24gbm9yIHRo
ZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0gKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSAqICAgIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0g
KiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3By
YWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUoV0VCX1JUQykKLQotI2luY2x1ZGUgIkV4Y2VwdGlvbk9y
LmgiCi0jaW5jbHVkZSAiUlRDU2Vzc2lvbkRlc2NyaXB0aW9uLmgiCi0jaW5jbHVkZSA8d3RmL1Jl
ZkNvdW50ZWQuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotY2xhc3MgTWVkaWFFbmRwb2ludFNlc3Npb25Db25maWd1cmF0aW9uOwotY2xhc3MgU0RQ
UHJvY2Vzc29yOwotCi1jbGFzcyBNZWRpYUVuZHBvaW50U2Vzc2lvbkRlc2NyaXB0aW9uIDogcHVi
bGljIFJlZkNvdW50ZWQ8TWVkaWFFbmRwb2ludFNlc3Npb25EZXNjcmlwdGlvbj4gewotcHVibGlj
OgotICAgIHN0YXRpYyBSZWY8TWVkaWFFbmRwb2ludFNlc3Npb25EZXNjcmlwdGlvbj4gY3JlYXRl
KFJUQ1NkcFR5cGUsIFJlZlB0cjxNZWRpYUVuZHBvaW50U2Vzc2lvbkNvbmZpZ3VyYXRpb24+JiYp
OwotICAgIHN0YXRpYyBFeGNlcHRpb25PcjxSZWY8TWVkaWFFbmRwb2ludFNlc3Npb25EZXNjcmlw
dGlvbj4+IGNyZWF0ZShSZWZQdHI8UlRDU2Vzc2lvbkRlc2NyaXB0aW9uPiYmLCBjb25zdCBTRFBQ
cm9jZXNzb3ImKTsKLSAgICB2aXJ0dWFsIH5NZWRpYUVuZHBvaW50U2Vzc2lvbkRlc2NyaXB0aW9u
KCkgeyB9IC8vIEZJWE1FOiBXaHkgaXMgdGhpcyB2aXJ0dWFsPyBUaGVyZSBhcmUgbm8gb3RoZXIg
dmlydHVhbCBmdW5jdGlvbnMgaW4gdGhpcyBjbGFzcy4KLQotICAgIFJlZlB0cjxSVENTZXNzaW9u
RGVzY3JpcHRpb24+IHRvUlRDU2Vzc2lvbkRlc2NyaXB0aW9uKGNvbnN0IFNEUFByb2Nlc3NvciYp
IGNvbnN0OwotCi0gICAgUlRDU2RwVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9
Ci0gICAgY29uc3QgU3RyaW5nJiB0eXBlU3RyaW5nKCkgY29uc3Q7Ci0gICAgTWVkaWFFbmRwb2lu
dFNlc3Npb25Db25maWd1cmF0aW9uKiBjb25maWd1cmF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9j
b25maWd1cmF0aW9uLmdldCgpOyB9Ci0KLSAgICBib29sIGlzTGF0ZXJUaGFuKE1lZGlhRW5kcG9p
bnRTZXNzaW9uRGVzY3JpcHRpb24qIG90aGVyKSBjb25zdDsKLQotcHJpdmF0ZToKLSAgICBNZWRp
YUVuZHBvaW50U2Vzc2lvbkRlc2NyaXB0aW9uKFJUQ1NkcFR5cGUgdHlwZSwgUmVmUHRyPE1lZGlh
RW5kcG9pbnRTZXNzaW9uQ29uZmlndXJhdGlvbj4mJiBjb25maWd1cmF0aW9uLCBSZWZQdHI8UlRD
U2Vzc2lvbkRlc2NyaXB0aW9uPiYmIHJ0Y0Rlc2NyaXB0aW9uKQotICAgICAgICA6IG1fdHlwZSh0
eXBlKQotICAgICAgICAsIG1fY29uZmlndXJhdGlvbihjb25maWd1cmF0aW9uKQotICAgICAgICAs
IG1fcnRjRGVzY3JpcHRpb24oV1RGTW92ZShydGNEZXNjcmlwdGlvbikpCi0gICAgeyB9Ci0KLSAg
ICBSVENTZHBUeXBlIG1fdHlwZTsKLSAgICBSZWZQdHI8TWVkaWFFbmRwb2ludFNlc3Npb25Db25m
aWd1cmF0aW9uPiBtX2NvbmZpZ3VyYXRpb247Ci0KLSAgICBSZWZQdHI8UlRDU2Vzc2lvbkRlc2Ny
aXB0aW9uPiBtX3J0Y0Rlc2NyaXB0aW9uOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQot
Ci0jZW5kaWYgLy8gRU5BQkxFKFdFQl9SVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL21lZGlhc3RyZWFtL1NEUFByb2Nlc3Nvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL21lZGlhc3RyZWFtL1NEUFByb2Nlc3Nvci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDcxNWNmMmYyODg4ZmY3NDA3ZTVjNjVkYzI4YjNiY2RkNWIyNzg1MTIuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9tZWRpYXN0cmVhbS9TRFBQcm9jZXNzb3IuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNTYy
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUsIDIwMTYgRXJpY3Nzb24gQUIuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIKLSAqICAgIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqICAgIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIE5laXRoZXIg
dGhlIG5hbWUgb2YgRXJpY3Nzb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0g
KiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tIHRoaXMKLSAqICAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
LSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxF
KFdFQl9SVEMpCi0jaW5jbHVkZSAiU0RQUHJvY2Vzc29yLmgiCi0KLSNpbmNsdWRlICJDb21tb25W
TS5oIgotI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRl
ICJTRFBQcm9jZXNzb3JTY3JpcHRSZXNvdXJjZS5oIgotI2luY2x1ZGUgIlNjcmlwdENvbnRyb2xs
ZXIuaCIKLSNpbmNsdWRlICJTY3JpcHRTb3VyY2VDb2RlLmgiCi0jaW5jbHVkZSAiaW5zcGVjdG9y
L0luc3BlY3RvclZhbHVlcy5oIgotI2luY2x1ZGUgPGJpbmRpbmdzL1NjcmlwdE9iamVjdC5oPgot
I2luY2x1ZGUgPHJ1bnRpbWUvQ2F0Y2hTY29wZS5oPgotI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ry
b3llZC5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0KLSNkZWZpbmUgU1RSSU5HX0ZVTkNUSU9OKG5hbWUpIFwKLSAgICBzdGF0aWMgY29uc3Qg
U3RyaW5nJiBuYW1lIyNTdHJpbmcoKSBcCi0gICAgeyBcCi0gICAgICAgIHN0YXRpYyBOZXZlckRl
c3Ryb3llZDxjb25zdCBTdHJpbmc+IG5hbWUoTUFLRV9TVEFUSUNfU1RSSU5HX0lNUEwoI25hbWUp
KTsgXAotICAgICAgICByZXR1cm4gbmFtZTsgXAotICAgIH0KLQotU1RSSU5HX0ZVTkNUSU9OKGFk
ZHJlc3MpCi1TVFJJTkdfRlVOQ1RJT04oYXB0KQotU1RSSU5HX0ZVTkNUSU9OKGJ1bmRsZVBvbGlj
eSkKLVNUUklOR19GVU5DVElPTihjYW5kaWRhdGVzKQotU1RSSU5HX0ZVTkNUSU9OKGNjbWZpcikK
LVNUUklOR19GVU5DVElPTihjaGFubmVscykKLVNUUklOR19GVU5DVElPTihjbG9ja1JhdGUpCi1T
VFJJTkdfRlVOQ1RJT04oY25hbWUpCi1TVFJJTkdfRlVOQ1RJT04oY29tcG9uZW50SWQpCi1TVFJJ
TkdfRlVOQ1RJT04oZHRscykKLVNUUklOR19GVU5DVElPTihlbmNvZGluZ05hbWUpCi1TVFJJTkdf
RlVOQ1RJT04oZmluZ2VycHJpbnQpCi1TVFJJTkdfRlVOQ1RJT04oZmluZ2VycHJpbnRIYXNoRnVu
Y3Rpb24pCi1TVFJJTkdfRlVOQ1RJT04oZm91bmRhdGlvbikKLVNUUklOR19GVU5DVElPTihpY2Up
Ci1TVFJJTkdfRlVOQ1RJT04obWVkaWFEZXNjcmlwdGlvbnMpCi1TVFJJTkdfRlVOQ1RJT04obWVk
aWFTdHJlYW1JZCkKLVNUUklOR19GVU5DVElPTihtZWRpYVN0cmVhbVRyYWNrSWQpCi1TVFJJTkdf
RlVOQ1RJT04obWlkKQotU1RSSU5HX0ZVTkNUSU9OKG1vZGUpCi1TVFJJTkdfRlVOQ1RJT04obXV4
KQotU1RSSU5HX0ZVTkNUSU9OKG5hY2spCi1TVFJJTkdfRlVOQ1RJT04obmFja3BsaSkKLVNUUklO
R19GVU5DVElPTihvcmlnaW5hdG9yKQotU1RSSU5HX0ZVTkNUSU9OKHBhY2tldGl6YXRpb25Nb2Rl
KQotU1RSSU5HX0ZVTkNUSU9OKHBhcmFtZXRlcnMpCi1TVFJJTkdfRlVOQ1RJT04ocGFzc3dvcmQp
Ci1TVFJJTkdfRlVOQ1RJT04ocGF5bG9hZHMpCi1TVFJJTkdfRlVOQ1RJT04ocG9ydCkKLVNUUklO
R19GVU5DVElPTihwcmlvcml0eSkKLVNUUklOR19GVU5DVElPTihyZWxhdGVkQWRkcmVzcykKLVNU
UklOR19GVU5DVElPTihyZWxhdGVkUG9ydCkKLVNUUklOR19GVU5DVElPTihydGNwKQotU1RSSU5H
X0ZVTkNUSU9OKHJ0Y3BBZGRyZXNzKQotU1RSSU5HX0ZVTkNUSU9OKHJ0Y3BQb3J0KQotU1RSSU5H
X0ZVTkNUSU9OKHJ0eFRpbWUpCi1TVFJJTkdfRlVOQ1RJT04oc2Vzc2lvbklkKQotU1RSSU5HX0ZV
TkNUSU9OKHNlc3Npb25WZXJzaW9uKQotU1RSSU5HX0ZVTkNUSU9OKHNldHVwKQotU1RSSU5HX0ZV
TkNUSU9OKHNzcmNzKQotU1RSSU5HX0ZVTkNUSU9OKHRjcFR5cGUpCi1TVFJJTkdfRlVOQ1RJT04o
dHJhbnNwb3J0KQotU1RSSU5HX0ZVTkNUSU9OKHR5cGUpCi1TVFJJTkdfRlVOQ1RJT04odWZyYWcp
Ci0KLVNEUFByb2Nlc3Nvcjo6U0RQUHJvY2Vzc29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNv
bnRleHQpCi0gICAgOiBDb250ZXh0RGVzdHJ1Y3Rpb25PYnNlcnZlcihjb250ZXh0KQotewotfQot
Ci0vLyBOb3RlIHRoYXQgTWVkaWFFbmRwb2ludFNlc3Npb25Db25maWd1cmF0aW9uIGlzIGEgImZs
YXR0ZXIiIHN0cnVjdHVyZSB0aGF0IHRoZSBKU09OIHJlcHJlc2VudGF0aW9uLiBGb3IKLS8vIGV4
YW1wbGUsIHRoZSBKU09OIHJlcHJlc2VudGF0aW9uIGhhcyBhbiAiaWNlIiBvYmplY3Qgd2hpY2gg
Y29sbGVjdHMgYSBzZXQgb2YgcHJvcGVydGllcyB1bmRlciBhCi0vLyBuYW1lc3BhY2UuIE1lZGlh
RW5kcG9pbnRTZXNzaW9uQ29uZmlndXJhdGlvbiBoYXMgImljZSItcHJlZml4ZXMgb24gdGhlIGNv
cnJlc3BvbmRpbmcgcHJvcGVydGllcy4KLQotc3RhdGljIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IGNyZWF0ZUNhbmRpZGF0ZU9iamVjdChjb25zdCBJY2VDYW5kaWRhdGUmIGNhbmRpZGF0ZSkKLXsK
LSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBjYW5kaWRhdGVPYmplY3QgPSBJbnNwZWN0b3JP
YmplY3Q6OmNyZWF0ZSgpOwotCi0gICAgY2FuZGlkYXRlT2JqZWN0LT5zZXRTdHJpbmcodHlwZVN0
cmluZygpLCBjYW5kaWRhdGUudHlwZSk7Ci0gICAgY2FuZGlkYXRlT2JqZWN0LT5zZXRTdHJpbmco
Zm91bmRhdGlvblN0cmluZygpLCBjYW5kaWRhdGUuZm91bmRhdGlvbik7Ci0gICAgY2FuZGlkYXRl
T2JqZWN0LT5zZXRJbnRlZ2VyKGNvbXBvbmVudElkU3RyaW5nKCksIGNhbmRpZGF0ZS5jb21wb25l
bnRJZCk7Ci0gICAgY2FuZGlkYXRlT2JqZWN0LT5zZXRTdHJpbmcodHJhbnNwb3J0U3RyaW5nKCks
IGNhbmRpZGF0ZS50cmFuc3BvcnQpOwotICAgIGNhbmRpZGF0ZU9iamVjdC0+c2V0SW50ZWdlcihw
cmlvcml0eVN0cmluZygpLCBjYW5kaWRhdGUucHJpb3JpdHkpOwotICAgIGNhbmRpZGF0ZU9iamVj
dC0+c2V0U3RyaW5nKGFkZHJlc3NTdHJpbmcoKSwgY2FuZGlkYXRlLmFkZHJlc3MpOwotICAgIGNh
bmRpZGF0ZU9iamVjdC0+c2V0SW50ZWdlcihwb3J0U3RyaW5nKCksIGNhbmRpZGF0ZS5wb3J0KTsK
LSAgICBpZiAoIWNhbmRpZGF0ZS50Y3BUeXBlLmlzRW1wdHkoKSkKLSAgICAgICAgY2FuZGlkYXRl
T2JqZWN0LT5zZXRTdHJpbmcodGNwVHlwZVN0cmluZygpLCBjYW5kaWRhdGUudGNwVHlwZSk7Ci0g
ICAgaWYgKGNhbmRpZGF0ZS50eXBlLmNvbnZlcnRUb0FTQ0lJVXBwZXJjYXNlKCkgIT0gIkhPU1Qi
KSB7Ci0gICAgICAgIGNhbmRpZGF0ZU9iamVjdC0+c2V0U3RyaW5nKHJlbGF0ZWRBZGRyZXNzU3Ry
aW5nKCksIGNhbmRpZGF0ZS5yZWxhdGVkQWRkcmVzcyk7Ci0gICAgICAgIGNhbmRpZGF0ZU9iamVj
dC0+c2V0SW50ZWdlcihyZWxhdGVkUG9ydFN0cmluZygpLCBjYW5kaWRhdGUucmVsYXRlZFBvcnQp
OwotICAgIH0KLQotICAgIHJldHVybiBjYW5kaWRhdGVPYmplY3Q7Ci19Ci0KLXN0YXRpYyBJY2VD
YW5kaWRhdGUgY3JlYXRlQ2FuZGlkYXRlKGNvbnN0IEluc3BlY3Rvck9iamVjdCYgY2FuZGlkYXRl
T2JqZWN0KQotewotICAgIEljZUNhbmRpZGF0ZSBjYW5kaWRhdGU7Ci0gICAgU3RyaW5nIHN0cmlu
Z1ZhbHVlOwotICAgIHVuc2lnbmVkIGludFZhbHVlOwotCi0gICAgaWYgKGNhbmRpZGF0ZU9iamVj
dC5nZXRTdHJpbmcodHlwZVN0cmluZygpLCBzdHJpbmdWYWx1ZSkpCi0gICAgICAgIGNhbmRpZGF0
ZS50eXBlID0gc3RyaW5nVmFsdWU7Ci0KLSAgICBpZiAoY2FuZGlkYXRlT2JqZWN0LmdldFN0cmlu
Zyhmb3VuZGF0aW9uU3RyaW5nKCksIHN0cmluZ1ZhbHVlKSkKLSAgICAgICAgY2FuZGlkYXRlLmZv
dW5kYXRpb24gPSBzdHJpbmdWYWx1ZTsKLQotICAgIGlmIChjYW5kaWRhdGVPYmplY3QuZ2V0SW50
ZWdlcihjb21wb25lbnRJZFN0cmluZygpLCBpbnRWYWx1ZSkpCi0gICAgICAgIGNhbmRpZGF0ZS5j
b21wb25lbnRJZCA9IGludFZhbHVlOwotCi0gICAgaWYgKGNhbmRpZGF0ZU9iamVjdC5nZXRTdHJp
bmcodHJhbnNwb3J0U3RyaW5nKCksIHN0cmluZ1ZhbHVlKSkKLSAgICAgICAgY2FuZGlkYXRlLnRy
YW5zcG9ydCA9IHN0cmluZ1ZhbHVlOwotCi0gICAgaWYgKGNhbmRpZGF0ZU9iamVjdC5nZXRJbnRl
Z2VyKHByaW9yaXR5U3RyaW5nKCksIGludFZhbHVlKSkKLSAgICAgICAgY2FuZGlkYXRlLnByaW9y
aXR5ID0gaW50VmFsdWU7Ci0KLSAgICBpZiAoY2FuZGlkYXRlT2JqZWN0LmdldFN0cmluZyhhZGRy
ZXNzU3RyaW5nKCksIHN0cmluZ1ZhbHVlKSkKLSAgICAgICAgY2FuZGlkYXRlLmFkZHJlc3MgPSBz
dHJpbmdWYWx1ZTsKLQotICAgIGlmIChjYW5kaWRhdGVPYmplY3QuZ2V0SW50ZWdlcihwb3J0U3Ry
aW5nKCksIGludFZhbHVlKSkKLSAgICAgICAgY2FuZGlkYXRlLnBvcnQgPSBpbnRWYWx1ZTsKLQot
ICAgIGlmIChjYW5kaWRhdGVPYmplY3QuZ2V0U3RyaW5nKHRjcFR5cGVTdHJpbmcoKSwgc3RyaW5n
VmFsdWUpKQotICAgICAgICBjYW5kaWRhdGUudGNwVHlwZSA9IHN0cmluZ1ZhbHVlOwotCi0gICAg
aWYgKGNhbmRpZGF0ZU9iamVjdC5nZXRTdHJpbmcocmVsYXRlZEFkZHJlc3NTdHJpbmcoKSwgc3Ry
aW5nVmFsdWUpKQotICAgICAgICBjYW5kaWRhdGUucmVsYXRlZEFkZHJlc3MgPSBzdHJpbmdWYWx1
ZTsKLQotICAgIGlmIChjYW5kaWRhdGVPYmplY3QuZ2V0SW50ZWdlcihyZWxhdGVkUG9ydFN0cmlu
ZygpLCBpbnRWYWx1ZSkpCi0gICAgICAgIGNhbmRpZGF0ZS5yZWxhdGVkUG9ydCA9IGludFZhbHVl
OwotCi0gICAgcmV0dXJuIGNhbmRpZGF0ZTsKLX0KLQotc3RhdGljIFJlZlB0cjxNZWRpYUVuZHBv
aW50U2Vzc2lvbkNvbmZpZ3VyYXRpb24+IGNvbmZpZ3VyYXRpb25Gcm9tSlNPTihjb25zdCBTdHJp
bmcmIGpzb24pCi17Ci0gICAgUmVmUHRyPEluc3BlY3RvclZhbHVlPiB2YWx1ZTsKLSAgICBpZiAo
IUluc3BlY3RvclZhbHVlOjpwYXJzZUpTT04oanNvbiwgdmFsdWUpKQotICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLQotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG9iamVjdDsKLSAgICBpZiAo
IXZhbHVlLT5hc09iamVjdChvYmplY3QpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAg
IFJlZlB0cjxNZWRpYUVuZHBvaW50U2Vzc2lvbkNvbmZpZ3VyYXRpb24+IGNvbmZpZ3VyYXRpb24g
PSBNZWRpYUVuZHBvaW50U2Vzc2lvbkNvbmZpZ3VyYXRpb246OmNyZWF0ZSgpOwotCi0gICAgU3Ry
aW5nIHN0cmluZ1ZhbHVlOwotICAgIHVuc2lnbmVkIGludFZhbHVlOwotICAgIGJvb2wgYm9vbFZh
bHVlOwotCi0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gb3JpZ2luYXRvck9iamVjdCA9IElu
c3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgaWYgKG9iamVjdC0+Z2V0T2JqZWN0KG9yaWdp
bmF0b3JTdHJpbmcoKSwgb3JpZ2luYXRvck9iamVjdCkpIHsKLSAgICAgICAgaWYgKG9yaWdpbmF0
b3JPYmplY3QtPmdldFN0cmluZyhzZXNzaW9uSWRTdHJpbmcoKSwgc3RyaW5nVmFsdWUpKQotICAg
ICAgICAgICAgY29uZmlndXJhdGlvbi0+c2V0U2Vzc2lvbklkKHN0cmluZ1ZhbHVlLnRvSW50NjQo
KSk7Ci0gICAgICAgIGlmIChvcmlnaW5hdG9yT2JqZWN0LT5nZXRJbnRlZ2VyKHNlc3Npb25WZXJz
aW9uU3RyaW5nKCksIGludFZhbHVlKSkKLSAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24tPnNldFNl
c3Npb25WZXJzaW9uKGludFZhbHVlKTsKLSAgICB9Ci0KLSAgICBSZWZQdHI8SW5zcGVjdG9yQXJy
YXk+IG1lZGlhRGVzY3JpcHRpb25zQXJyYXkgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7Ci0g
ICAgb2JqZWN0LT5nZXRBcnJheShtZWRpYURlc2NyaXB0aW9uc1N0cmluZygpLCBtZWRpYURlc2Ny
aXB0aW9uc0FycmF5KTsKLQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtZWRpYURlc2Ny
aXB0aW9uc0FycmF5LT5sZW5ndGgoKTsgKytpKSB7Ci0gICAgICAgIFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IG1lZGlhRGVzY3JpcHRpb25PYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgp
OwotICAgICAgICBtZWRpYURlc2NyaXB0aW9uc0FycmF5LT5nZXQoaSktPmFzT2JqZWN0KG1lZGlh
RGVzY3JpcHRpb25PYmplY3QpOwotCi0gICAgICAgIFBlZXJNZWRpYURlc2NyaXB0aW9uIG1lZGlh
RGVzY3JpcHRpb247Ci0KLSAgICAgICAgaWYgKG1lZGlhRGVzY3JpcHRpb25PYmplY3QtPmdldFN0
cmluZyh0eXBlU3RyaW5nKCksIHN0cmluZ1ZhbHVlKSkKLSAgICAgICAgICAgIG1lZGlhRGVzY3Jp
cHRpb24udHlwZSA9IHN0cmluZ1ZhbHVlOwotCi0gICAgICAgIGlmIChtZWRpYURlc2NyaXB0aW9u
T2JqZWN0LT5nZXRJbnRlZ2VyKHBvcnRTdHJpbmcoKSwgaW50VmFsdWUpKQotICAgICAgICAgICAg
bWVkaWFEZXNjcmlwdGlvbi5wb3J0ID0gaW50VmFsdWU7Ci0KLSAgICAgICAgaWYgKG1lZGlhRGVz
Y3JpcHRpb25PYmplY3QtPmdldFN0cmluZyhhZGRyZXNzU3RyaW5nKCksIHN0cmluZ1ZhbHVlKSkK
LSAgICAgICAgICAgIG1lZGlhRGVzY3JpcHRpb24uYWRkcmVzcyA9IHN0cmluZ1ZhbHVlOwotCi0g
ICAgICAgIGlmIChtZWRpYURlc2NyaXB0aW9uT2JqZWN0LT5nZXRTdHJpbmcobW9kZVN0cmluZygp
LCBzdHJpbmdWYWx1ZSkpCi0gICAgICAgICAgICBtZWRpYURlc2NyaXB0aW9uLm1vZGUgPSBzdHJp
bmdWYWx1ZTsKLQotICAgICAgICBpZiAobWVkaWFEZXNjcmlwdGlvbk9iamVjdC0+Z2V0U3RyaW5n
KG1pZFN0cmluZygpLCBzdHJpbmdWYWx1ZSkpCi0gICAgICAgICAgICBtZWRpYURlc2NyaXB0aW9u
Lm1pZCA9IHN0cmluZ1ZhbHVlOwotCi0gICAgICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcGF5
bG9hZHNBcnJheSA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKLSAgICAgICAgbWVkaWFEZXNj
cmlwdGlvbk9iamVjdC0+Z2V0QXJyYXkocGF5bG9hZHNTdHJpbmcoKSwgcGF5bG9hZHNBcnJheSk7
Ci0KLSAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IHBheWxvYWRzQXJyYXktPmxlbmd0
aCgpOyArK2opIHsKLSAgICAgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBheWxvYWRz
T2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKLSAgICAgICAgICAgIHBheWxvYWRz
QXJyYXktPmdldChqKS0+YXNPYmplY3QocGF5bG9hZHNPYmplY3QpOwotCi0gICAgICAgICAgICBN
ZWRpYVBheWxvYWQgcGF5bG9hZDsKLQotICAgICAgICAgICAgaWYgKHBheWxvYWRzT2JqZWN0LT5n
ZXRJbnRlZ2VyKHR5cGVTdHJpbmcoKSwgaW50VmFsdWUpKQotICAgICAgICAgICAgICAgIHBheWxv
YWQudHlwZSA9IGludFZhbHVlOwotCi0gICAgICAgICAgICBpZiAocGF5bG9hZHNPYmplY3QtPmdl
dFN0cmluZyhlbmNvZGluZ05hbWVTdHJpbmcoKSwgc3RyaW5nVmFsdWUpKQotICAgICAgICAgICAg
ICAgIHBheWxvYWQuZW5jb2RpbmdOYW1lID0gc3RyaW5nVmFsdWU7Ci0KLSAgICAgICAgICAgIGlm
IChwYXlsb2Fkc09iamVjdC0+Z2V0SW50ZWdlcihjbG9ja1JhdGVTdHJpbmcoKSwgaW50VmFsdWUp
KQotICAgICAgICAgICAgICAgIHBheWxvYWQuY2xvY2tSYXRlID0gaW50VmFsdWU7Ci0KLSAgICAg
ICAgICAgIGlmIChwYXlsb2Fkc09iamVjdC0+Z2V0SW50ZWdlcihjaGFubmVsc1N0cmluZygpLCBp
bnRWYWx1ZSkpCi0gICAgICAgICAgICAgICAgcGF5bG9hZC5jaGFubmVscyA9IGludFZhbHVlOwot
Ci0gICAgICAgICAgICBpZiAocGF5bG9hZHNPYmplY3QtPmdldEJvb2xlYW4oY2NtZmlyU3RyaW5n
KCksIGJvb2xWYWx1ZSkpCi0gICAgICAgICAgICAgICAgcGF5bG9hZC5jY21maXIgPSBib29sVmFs
dWU7Ci0KLSAgICAgICAgICAgIGlmIChwYXlsb2Fkc09iamVjdC0+Z2V0Qm9vbGVhbihuYWNrcGxp
U3RyaW5nKCksIGJvb2xWYWx1ZSkpCi0gICAgICAgICAgICAgICAgcGF5bG9hZC5uYWNrcGxpID0g
Ym9vbFZhbHVlOwotCi0gICAgICAgICAgICBpZiAocGF5bG9hZHNPYmplY3QtPmdldEJvb2xlYW4o
bmFja1N0cmluZygpLCBib29sVmFsdWUpKQotICAgICAgICAgICAgICAgIHBheWxvYWQubmFjayA9
IGJvb2xWYWx1ZTsKLQotICAgICAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1l
dGVyc09iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgICAgICAgICBpZiAo
cGF5bG9hZHNPYmplY3QtPmdldE9iamVjdChwYXJhbWV0ZXJzU3RyaW5nKCksIHBhcmFtZXRlcnNP
YmplY3QpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHBhcmFtZXRlcnNPYmplY3QtPmdldEludGVn
ZXIocGFja2V0aXphdGlvbk1vZGVTdHJpbmcoKSwgaW50VmFsdWUpKQotICAgICAgICAgICAgICAg
ICAgICBwYXlsb2FkLmFkZFBhcmFtZXRlcigicGFja2V0aXphdGlvbk1vZGUiLCBpbnRWYWx1ZSk7
Ci0KLSAgICAgICAgICAgICAgICBpZiAocGFyYW1ldGVyc09iamVjdC0+Z2V0SW50ZWdlcihhcHRT
dHJpbmcoKSwgaW50VmFsdWUpKQotICAgICAgICAgICAgICAgICAgICBwYXlsb2FkLmFkZFBhcmFt
ZXRlcigiYXB0IiwgaW50VmFsdWUpOwotCi0gICAgICAgICAgICAgICAgaWYgKHBhcmFtZXRlcnNP
YmplY3QtPmdldEludGVnZXIocnR4VGltZVN0cmluZygpLCBpbnRWYWx1ZSkpCi0gICAgICAgICAg
ICAgICAgICAgIHBheWxvYWQuYWRkUGFyYW1ldGVyKCJydHhUaW1lIiwgaW50VmFsdWUpOwotICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICBtZWRpYURlc2NyaXB0aW9uLmFkZFBheWxvYWQoV1RG
TW92ZShwYXlsb2FkKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiBydGNwT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKLSAgICAgICAgaWYg
KG1lZGlhRGVzY3JpcHRpb25PYmplY3QtPmdldE9iamVjdChydGNwU3RyaW5nKCksIHJ0Y3BPYmpl
Y3QpKSB7Ci0gICAgICAgICAgICBpZiAocnRjcE9iamVjdC0+Z2V0Qm9vbGVhbihtdXhTdHJpbmco
KSwgYm9vbFZhbHVlKSkKLSAgICAgICAgICAgICAgICBtZWRpYURlc2NyaXB0aW9uLnJ0Y3BNdXgg
PSBib29sVmFsdWU7Ci0KLSAgICAgICAgICAgIGlmIChydGNwT2JqZWN0LT5nZXRTdHJpbmcocnRj
cEFkZHJlc3NTdHJpbmcoKSwgc3RyaW5nVmFsdWUpKQotICAgICAgICAgICAgICAgIG1lZGlhRGVz
Y3JpcHRpb24ucnRjcEFkZHJlc3MgPSBzdHJpbmdWYWx1ZTsKLQotICAgICAgICAgICAgaWYgKHJ0
Y3BPYmplY3QtPmdldEludGVnZXIocnRjcFBvcnRTdHJpbmcoKSwgaW50VmFsdWUpKQotICAgICAg
ICAgICAgICAgIG1lZGlhRGVzY3JpcHRpb24ucnRjcFBvcnQgPSBpbnRWYWx1ZTsKLSAgICAgICAg
fQotCi0gICAgICAgIGlmIChtZWRpYURlc2NyaXB0aW9uT2JqZWN0LT5nZXRTdHJpbmcobWVkaWFT
dHJlYW1JZFN0cmluZygpLCBzdHJpbmdWYWx1ZSkpCi0gICAgICAgICAgICBtZWRpYURlc2NyaXB0
aW9uLm1lZGlhU3RyZWFtSWQgPSBzdHJpbmdWYWx1ZTsKLQotICAgICAgICBpZiAobWVkaWFEZXNj
cmlwdGlvbk9iamVjdC0+Z2V0U3RyaW5nKG1lZGlhU3RyZWFtVHJhY2tJZFN0cmluZygpLCBzdHJp
bmdWYWx1ZSkpCi0gICAgICAgICAgICBtZWRpYURlc2NyaXB0aW9uLm1lZGlhU3RyZWFtVHJhY2tJ
ZCA9IHN0cmluZ1ZhbHVlOwotCi0gICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGR0bHNP
YmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwotICAgICAgICBpZiAobWVkaWFEZXNj
cmlwdGlvbk9iamVjdC0+Z2V0T2JqZWN0KGR0bHNTdHJpbmcoKSwgZHRsc09iamVjdCkpIHsKLSAg
ICAgICAgICAgIGlmIChkdGxzT2JqZWN0LT5nZXRTdHJpbmcoc2V0dXBTdHJpbmcoKSwgc3RyaW5n
VmFsdWUpKQotICAgICAgICAgICAgICAgIG1lZGlhRGVzY3JpcHRpb24uZHRsc1NldHVwID0gc3Ry
aW5nVmFsdWU7Ci0KLSAgICAgICAgICAgIGlmIChkdGxzT2JqZWN0LT5nZXRTdHJpbmcoZmluZ2Vy
cHJpbnRIYXNoRnVuY3Rpb25TdHJpbmcoKSwgc3RyaW5nVmFsdWUpKQotICAgICAgICAgICAgICAg
IG1lZGlhRGVzY3JpcHRpb24uZHRsc0ZpbmdlcnByaW50SGFzaEZ1bmN0aW9uID0gc3RyaW5nVmFs
dWU7Ci0KLSAgICAgICAgICAgIGlmIChkdGxzT2JqZWN0LT5nZXRTdHJpbmcoZmluZ2VycHJpbnRT
dHJpbmcoKSwgc3RyaW5nVmFsdWUpKQotICAgICAgICAgICAgICAgIG1lZGlhRGVzY3JpcHRpb24u
ZHRsc0ZpbmdlcnByaW50ID0gc3RyaW5nVmFsdWU7Ci0gICAgICAgIH0KLQotICAgICAgICBSZWZQ
dHI8SW5zcGVjdG9yQXJyYXk+IHNzcmNzQXJyYXkgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7
Ci0gICAgICAgIG1lZGlhRGVzY3JpcHRpb25PYmplY3QtPmdldEFycmF5KHNzcmNzU3RyaW5nKCks
IHNzcmNzQXJyYXkpOwotCi0gICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGogPCBzc3Jjc0Fy
cmF5LT5sZW5ndGgoKTsgKytqKSB7Ci0gICAgICAgICAgICBzc3Jjc0FycmF5LT5nZXQoaiktPmFz
SW50ZWdlcihpbnRWYWx1ZSk7Ci0gICAgICAgICAgICBtZWRpYURlc2NyaXB0aW9uLmFkZFNzcmMo
aW50VmFsdWUpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG1lZGlhRGVzY3JpcHRpb25PYmpl
Y3QtPmdldFN0cmluZyhjbmFtZVN0cmluZygpLCBzdHJpbmdWYWx1ZSkpCi0gICAgICAgICAgICBt
ZWRpYURlc2NyaXB0aW9uLmNuYW1lID0gc3RyaW5nVmFsdWU7Ci0KLSAgICAgICAgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gaWNlT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKLSAg
ICAgICAgaWYgKG1lZGlhRGVzY3JpcHRpb25PYmplY3QtPmdldE9iamVjdChpY2VTdHJpbmcoKSwg
aWNlT2JqZWN0KSkgewotICAgICAgICAgICAgaWYgKGljZU9iamVjdC0+Z2V0U3RyaW5nKHVmcmFn
U3RyaW5nKCksIHN0cmluZ1ZhbHVlKSkKLSAgICAgICAgICAgICAgICBtZWRpYURlc2NyaXB0aW9u
LmljZVVmcmFnID0gc3RyaW5nVmFsdWU7Ci0KLSAgICAgICAgICAgIGlmIChpY2VPYmplY3QtPmdl
dFN0cmluZyhwYXNzd29yZFN0cmluZygpLCBzdHJpbmdWYWx1ZSkpCi0gICAgICAgICAgICAgICAg
bWVkaWFEZXNjcmlwdGlvbi5pY2VQYXNzd29yZCA9IHN0cmluZ1ZhbHVlOwotCi0gICAgICAgICAg
ICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGNhbmRpZGF0ZXNBcnJheSA9IEluc3BlY3RvckFycmF5
OjpjcmVhdGUoKTsKLSAgICAgICAgICAgIGljZU9iamVjdC0+Z2V0QXJyYXkoY2FuZGlkYXRlc1N0
cmluZygpLCBjYW5kaWRhdGVzQXJyYXkpOwotCi0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGog
PSAwOyBqIDwgY2FuZGlkYXRlc0FycmF5LT5sZW5ndGgoKTsgKytqKSB7Ci0gICAgICAgICAgICAg
ICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gY2FuZGlkYXRlT2JqZWN0ID0gSW5zcGVjdG9yT2Jq
ZWN0OjpjcmVhdGUoKTsKLSAgICAgICAgICAgICAgICBjYW5kaWRhdGVzQXJyYXktPmdldChqKS0+
YXNPYmplY3QoY2FuZGlkYXRlT2JqZWN0KTsKLQotICAgICAgICAgICAgICAgIG1lZGlhRGVzY3Jp
cHRpb24uYWRkSWNlQ2FuZGlkYXRlKGNyZWF0ZUNhbmRpZGF0ZSgqY2FuZGlkYXRlT2JqZWN0KSk7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBjb25maWd1cmF0aW9uLT5hZGRN
ZWRpYURlc2NyaXB0aW9uKFdURk1vdmUobWVkaWFEZXNjcmlwdGlvbikpOwotICAgIH0KLQotICAg
IHJldHVybiBjb25maWd1cmF0aW9uOwotfQotCi1zdGF0aWMgc3RkOjpvcHRpb25hbDxJY2VDYW5k
aWRhdGU+IGljZUNhbmRpZGF0ZUZyb21KU09OKGNvbnN0IFN0cmluZyYganNvbikKLXsKLSAgICBS
ZWZQdHI8SW5zcGVjdG9yVmFsdWU+IHZhbHVlOwotICAgIGlmICghSW5zcGVjdG9yVmFsdWU6OnBh
cnNlSlNPTihqc29uLCB2YWx1ZSkpCi0gICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAg
ICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBjYW5kaWRhdGVPYmplY3Q7Ci0gICAgaWYgKCF2YWx1
ZS0+YXNPYmplY3QoY2FuZGlkYXRlT2JqZWN0KSkKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9w
dDsKLQotICAgIHJldHVybiBjcmVhdGVDYW5kaWRhdGUoKmNhbmRpZGF0ZU9iamVjdCk7Ci19Ci0K
LXN0YXRpYyBTdHJpbmcgZ2V0QnVuZGxlUG9saWN5TmFtZShjb25zdCBQZWVyQ29ubmVjdGlvblN0
YXRlczo6QnVuZGxlUG9saWN5IGJ1bmRsZVBvbGljeSkKLXsKLSAgICBzd2l0Y2ggKGJ1bmRsZVBv
bGljeSkgewotICAgIGNhc2UgUGVlckNvbm5lY3Rpb25TdGF0ZXM6OkJ1bmRsZVBvbGljeTo6TWF4
Q29tcGF0OgotICAgICAgICByZXR1cm4gIm1heC1jb21wYXQiOwotICAgIGNhc2UgUGVlckNvbm5l
Y3Rpb25TdGF0ZXM6OkJ1bmRsZVBvbGljeTo6TWF4QnVuZGxlOgotICAgICAgICByZXR1cm4gIm1h
eC1idW5kbGUiOwotICAgIGNhc2UgUGVlckNvbm5lY3Rpb25TdGF0ZXM6OkJ1bmRsZVBvbGljeTo6
QmFsYW5jZWQ6Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuICJiYWxhbmNlZCI7Ci0gICAg
fTsKLX0KLQotc3RhdGljIFN0cmluZyBjb25maWd1cmF0aW9uVG9KU09OKGNvbnN0IE1lZGlhRW5k
cG9pbnRTZXNzaW9uQ29uZmlndXJhdGlvbiYgY29uZmlndXJhdGlvbikKLXsKLSAgICBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiBvYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwotICAg
IG9iamVjdC0+c2V0U3RyaW5nKGJ1bmRsZVBvbGljeVN0cmluZygpLCBnZXRCdW5kbGVQb2xpY3lO
YW1lKGNvbmZpZ3VyYXRpb24uYnVuZGxlUG9saWN5KCkpKTsKLQotICAgIFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IG9yaWdpbmF0b3JPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwot
ICAgIG9yaWdpbmF0b3JPYmplY3QtPnNldFN0cmluZyhzZXNzaW9uSWRTdHJpbmcoKSwgU3RyaW5n
OjpudW1iZXIoY29uZmlndXJhdGlvbi5zZXNzaW9uSWQoKSkpOwotICAgIG9yaWdpbmF0b3JPYmpl
Y3QtPnNldEludGVnZXIoc2Vzc2lvblZlcnNpb25TdHJpbmcoKSwgY29uZmlndXJhdGlvbi5zZXNz
aW9uVmVyc2lvbigpKTsKLSAgICBvYmplY3QtPnNldE9iamVjdChvcmlnaW5hdG9yU3RyaW5nKCks
IG9yaWdpbmF0b3JPYmplY3QpOwotCi0gICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBtZWRpYURl
c2NyaXB0aW9uc0FycmF5ID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwotCi0gICAgZm9yIChj
b25zdCBhdXRvJiBtZWRpYURlc2NyaXB0aW9uIDogY29uZmlndXJhdGlvbi5tZWRpYURlc2NyaXB0
aW9ucygpKSB7Ci0gICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1lZGlhRGVzY3JpcHRp
b25PYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwotCi0gICAgICAgIG1lZGlhRGVz
Y3JpcHRpb25PYmplY3QtPnNldFN0cmluZyh0eXBlU3RyaW5nKCksIG1lZGlhRGVzY3JpcHRpb24u
dHlwZSk7Ci0gICAgICAgIG1lZGlhRGVzY3JpcHRpb25PYmplY3QtPnNldEludGVnZXIocG9ydFN0
cmluZygpLCBtZWRpYURlc2NyaXB0aW9uLnBvcnQpOwotICAgICAgICBtZWRpYURlc2NyaXB0aW9u
T2JqZWN0LT5zZXRTdHJpbmcoYWRkcmVzc1N0cmluZygpLCBtZWRpYURlc2NyaXB0aW9uLmFkZHJl
c3MpOwotICAgICAgICBtZWRpYURlc2NyaXB0aW9uT2JqZWN0LT5zZXRTdHJpbmcobW9kZVN0cmlu
ZygpLCBtZWRpYURlc2NyaXB0aW9uLm1vZGUpOwotICAgICAgICBtZWRpYURlc2NyaXB0aW9uT2Jq
ZWN0LT5zZXRTdHJpbmcobWlkU3RyaW5nKCksIG1lZGlhRGVzY3JpcHRpb24ubWlkKTsKLQotICAg
ICAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHBheWxvYWRzQXJyYXkgPSBJbnNwZWN0b3JBcnJh
eTo6Y3JlYXRlKCk7Ci0KLSAgICAgICAgZm9yIChhdXRvJiBwYXlsb2FkIDogbWVkaWFEZXNjcmlw
dGlvbi5wYXlsb2FkcykgewotICAgICAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGF5
bG9hZE9iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7Ci0KLSAgICAgICAgICAgIHBh
eWxvYWRPYmplY3QtPnNldEludGVnZXIodHlwZVN0cmluZygpLCBwYXlsb2FkLnR5cGUpOwotICAg
ICAgICAgICAgcGF5bG9hZE9iamVjdC0+c2V0U3RyaW5nKGVuY29kaW5nTmFtZVN0cmluZygpLCBw
YXlsb2FkLmVuY29kaW5nTmFtZSk7Ci0gICAgICAgICAgICBwYXlsb2FkT2JqZWN0LT5zZXRJbnRl
Z2VyKGNsb2NrUmF0ZVN0cmluZygpLCBwYXlsb2FkLmNsb2NrUmF0ZSk7Ci0gICAgICAgICAgICBw
YXlsb2FkT2JqZWN0LT5zZXRJbnRlZ2VyKGNoYW5uZWxzU3RyaW5nKCksIHBheWxvYWQuY2hhbm5l
bHMpOwotICAgICAgICAgICAgcGF5bG9hZE9iamVjdC0+c2V0Qm9vbGVhbihjY21maXJTdHJpbmco
KSwgcGF5bG9hZC5jY21maXIpOwotICAgICAgICAgICAgcGF5bG9hZE9iamVjdC0+c2V0Qm9vbGVh
bihuYWNrcGxpU3RyaW5nKCksIHBheWxvYWQubmFja3BsaSk7Ci0gICAgICAgICAgICBwYXlsb2Fk
T2JqZWN0LT5zZXRCb29sZWFuKG5hY2tTdHJpbmcoKSwgcGF5bG9hZC5uYWNrKTsKLQotICAgICAg
ICAgICAgaWYgKCFwYXlsb2FkLnBhcmFtZXRlcnMuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAg
ICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1ldGVyc09iamVjdCA9IEluc3BlY3Rvck9i
amVjdDo6Y3JlYXRlKCk7Ci0KLSAgICAgICAgICAgICAgICBmb3IgKGF1dG8mIG5hbWUgOiBwYXls
b2FkLnBhcmFtZXRlcnMua2V5cygpKQotICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzT2Jq
ZWN0LT5zZXRJbnRlZ2VyKG5hbWUsIHBheWxvYWQucGFyYW1ldGVycy5nZXQobmFtZSkpOwotCi0g
ICAgICAgICAgICAgICAgcGF5bG9hZE9iamVjdC0+c2V0T2JqZWN0KHBhcmFtZXRlcnNTdHJpbmco
KSwgcGFyYW1ldGVyc09iamVjdCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHBheWxv
YWRzQXJyYXktPnB1c2hPYmplY3QocGF5bG9hZE9iamVjdCk7Ci0gICAgICAgIH0KLSAgICAgICAg
bWVkaWFEZXNjcmlwdGlvbk9iamVjdC0+c2V0QXJyYXkocGF5bG9hZHNTdHJpbmcoKSwgcGF5bG9h
ZHNBcnJheSk7Ci0KLSAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcnRjcE9iamVjdCA9
IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgICAgIHJ0Y3BPYmplY3QtPnNldEJvb2xl
YW4obXV4U3RyaW5nKCksIG1lZGlhRGVzY3JpcHRpb24ucnRjcE11eCk7Ci0gICAgICAgIHJ0Y3BP
YmplY3QtPnNldFN0cmluZyhhZGRyZXNzU3RyaW5nKCksIG1lZGlhRGVzY3JpcHRpb24ucnRjcEFk
ZHJlc3MpOwotICAgICAgICBydGNwT2JqZWN0LT5zZXRJbnRlZ2VyKHBvcnRTdHJpbmcoKSwgbWVk
aWFEZXNjcmlwdGlvbi5ydGNwUG9ydCk7Ci0gICAgICAgIG1lZGlhRGVzY3JpcHRpb25PYmplY3Qt
PnNldE9iamVjdChydGNwU3RyaW5nKCksIHJ0Y3BPYmplY3QpOwotCi0gICAgICAgIG1lZGlhRGVz
Y3JpcHRpb25PYmplY3QtPnNldFN0cmluZyhtZWRpYVN0cmVhbUlkU3RyaW5nKCksIG1lZGlhRGVz
Y3JpcHRpb24ubWVkaWFTdHJlYW1JZCk7Ci0gICAgICAgIG1lZGlhRGVzY3JpcHRpb25PYmplY3Qt
PnNldFN0cmluZyhtZWRpYVN0cmVhbVRyYWNrSWRTdHJpbmcoKSwgbWVkaWFEZXNjcmlwdGlvbi5t
ZWRpYVN0cmVhbVRyYWNrSWQpOwotCi0gICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGR0
bHNPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwotICAgICAgICBkdGxzT2JqZWN0
LT5zZXRTdHJpbmcoc2V0dXBTdHJpbmcoKSwgbWVkaWFEZXNjcmlwdGlvbi5kdGxzU2V0dXApOwot
ICAgICAgICBkdGxzT2JqZWN0LT5zZXRTdHJpbmcoZmluZ2VycHJpbnRIYXNoRnVuY3Rpb25TdHJp
bmcoKSwgbWVkaWFEZXNjcmlwdGlvbi5kdGxzRmluZ2VycHJpbnRIYXNoRnVuY3Rpb24pOwotICAg
ICAgICBkdGxzT2JqZWN0LT5zZXRTdHJpbmcoZmluZ2VycHJpbnRTdHJpbmcoKSwgbWVkaWFEZXNj
cmlwdGlvbi5kdGxzRmluZ2VycHJpbnQpOwotICAgICAgICBtZWRpYURlc2NyaXB0aW9uT2JqZWN0
LT5zZXRPYmplY3QoZHRsc1N0cmluZygpLCBkdGxzT2JqZWN0KTsKLQotICAgICAgICBSZWZQdHI8
SW5zcGVjdG9yQXJyYXk+IHNzcmNzQXJyYXkgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7Ci0K
LSAgICAgICAgZm9yIChhdXRvIHNzcmMgOiBtZWRpYURlc2NyaXB0aW9uLnNzcmNzKQotICAgICAg
ICAgICAgc3NyY3NBcnJheS0+cHVzaERvdWJsZShzc3JjKTsKLSAgICAgICAgbWVkaWFEZXNjcmlw
dGlvbk9iamVjdC0+c2V0QXJyYXkoc3NyY3NTdHJpbmcoKSwgc3NyY3NBcnJheSk7Ci0KLSAgICAg
ICAgbWVkaWFEZXNjcmlwdGlvbk9iamVjdC0+c2V0U3RyaW5nKGNuYW1lU3RyaW5nKCksIG1lZGlh
RGVzY3JpcHRpb24uY25hbWUpOwotCi0gICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGlj
ZU9iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgICAgIGljZU9iamVjdC0+
c2V0U3RyaW5nKHVmcmFnU3RyaW5nKCksIG1lZGlhRGVzY3JpcHRpb24uaWNlVWZyYWcpOwotICAg
ICAgICBpY2VPYmplY3QtPnNldFN0cmluZyhwYXNzd29yZFN0cmluZygpLCBtZWRpYURlc2NyaXB0
aW9uLmljZVBhc3N3b3JkKTsKLQotICAgICAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGNhbmRp
ZGF0ZXNBcnJheSA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKLQotICAgICAgICBmb3IgKGF1
dG8mIGNhbmRpZGF0ZSA6IG1lZGlhRGVzY3JpcHRpb24uaWNlQ2FuZGlkYXRlcykKLSAgICAgICAg
ICAgIGNhbmRpZGF0ZXNBcnJheS0+cHVzaE9iamVjdChjcmVhdGVDYW5kaWRhdGVPYmplY3QoY2Fu
ZGlkYXRlKSk7Ci0KLSAgICAgICAgaWNlT2JqZWN0LT5zZXRBcnJheShjYW5kaWRhdGVzU3RyaW5n
KCksIGNhbmRpZGF0ZXNBcnJheSk7Ci0gICAgICAgIG1lZGlhRGVzY3JpcHRpb25PYmplY3QtPnNl
dE9iamVjdChpY2VTdHJpbmcoKSwgaWNlT2JqZWN0KTsKLQotICAgICAgICBtZWRpYURlc2NyaXB0
aW9uc0FycmF5LT5wdXNoT2JqZWN0KG1lZGlhRGVzY3JpcHRpb25PYmplY3QpOwotICAgIH0KLSAg
ICBvYmplY3QtPnNldEFycmF5KG1lZGlhRGVzY3JpcHRpb25zU3RyaW5nKCksIG1lZGlhRGVzY3Jp
cHRpb25zQXJyYXkpOwotCi0gICAgcmV0dXJuIG9iamVjdC0+dG9KU09OU3RyaW5nKCk7Ci19Ci0K
LXN0YXRpYyBTdHJpbmcgaWNlQ2FuZGlkYXRlVG9KU09OKGNvbnN0IEljZUNhbmRpZGF0ZSYgY2Fu
ZGlkYXRlKQotewotICAgIHJldHVybiBjcmVhdGVDYW5kaWRhdGVPYmplY3QoY2FuZGlkYXRlKS0+
dG9KU09OU3RyaW5nKCk7Ci19Ci0KLVNEUFByb2Nlc3Nvcjo6UmVzdWx0IFNEUFByb2Nlc3Nvcjo6
Z2VuZXJhdGUoY29uc3QgTWVkaWFFbmRwb2ludFNlc3Npb25Db25maWd1cmF0aW9uJiBjb25maWd1
cmF0aW9uLCBTdHJpbmcmIG91dFNkcFN0cmluZykgY29uc3QKLXsKLSAgICBTdHJpbmcgc2RwU3Ry
aW5nOwotICAgIGlmICghY2FsbFNjcmlwdCgiZ2VuZXJhdGUiLCBjb25maWd1cmF0aW9uVG9KU09O
KGNvbmZpZ3VyYXRpb24pLCBzZHBTdHJpbmcpKQotICAgICAgICByZXR1cm4gUmVzdWx0OjpJbnRl
cm5hbEVycm9yOwotCi0gICAgb3V0U2RwU3RyaW5nID0gc2RwU3RyaW5nOwotICAgIHJldHVybiBS
ZXN1bHQ6OlN1Y2Nlc3M7Ci19Ci0KLVNEUFByb2Nlc3Nvcjo6UmVzdWx0IFNEUFByb2Nlc3Nvcjo6
cGFyc2UoY29uc3QgU3RyaW5nJiBzZHAsIFJlZlB0cjxNZWRpYUVuZHBvaW50U2Vzc2lvbkNvbmZp
Z3VyYXRpb24+JiBvdXRDb25maWd1cmF0aW9uKSBjb25zdAotewotICAgIFN0cmluZyBzY3JpcHRP
dXRwdXQ7Ci0gICAgaWYgKCFjYWxsU2NyaXB0KCJwYXJzZSIsIHNkcCwgc2NyaXB0T3V0cHV0KSkK
LSAgICAgICAgcmV0dXJuIFJlc3VsdDo6SW50ZXJuYWxFcnJvcjsKLQotICAgIGlmIChzY3JpcHRP
dXRwdXQgPT0gIlBhcnNlRXJyb3IiKQotICAgICAgICByZXR1cm4gUmVzdWx0OjpQYXJzZUVycm9y
OwotCi0gICAgUmVmUHRyPE1lZGlhRW5kcG9pbnRTZXNzaW9uQ29uZmlndXJhdGlvbj4gY29uZmln
dXJhdGlvbiA9IGNvbmZpZ3VyYXRpb25Gcm9tSlNPTihzY3JpcHRPdXRwdXQpOwotICAgIGlmICgh
Y29uZmlndXJhdGlvbikKLSAgICAgICAgcmV0dXJuIFJlc3VsdDo6SW50ZXJuYWxFcnJvcjsKLQot
ICAgIG91dENvbmZpZ3VyYXRpb24gPSBjb25maWd1cmF0aW9uOwotICAgIHJldHVybiBSZXN1bHQ6
OlN1Y2Nlc3M7Ci19Ci0KLVNEUFByb2Nlc3Nvcjo6UmVzdWx0IFNEUFByb2Nlc3Nvcjo6Z2VuZXJh
dGVDYW5kaWRhdGVMaW5lKGNvbnN0IEljZUNhbmRpZGF0ZSYgY2FuZGlkYXRlLCBTdHJpbmcmIG91
dENhbmRpZGF0ZUxpbmUpIGNvbnN0Ci17Ci0gICAgU3RyaW5nIGNhbmRpZGF0ZUxpbmU7Ci0gICAg
aWYgKCFjYWxsU2NyaXB0KCJnZW5lcmF0ZUNhbmRpZGF0ZUxpbmUiLCBpY2VDYW5kaWRhdGVUb0pT
T04oY2FuZGlkYXRlKSwgY2FuZGlkYXRlTGluZSkpCi0gICAgICAgIHJldHVybiBSZXN1bHQ6Oklu
dGVybmFsRXJyb3I7Ci0KLSAgICBvdXRDYW5kaWRhdGVMaW5lID0gY2FuZGlkYXRlTGluZTsKLSAg
ICByZXR1cm4gUmVzdWx0OjpTdWNjZXNzOwotfQotCi1TRFBQcm9jZXNzb3I6OlBhcnNpbmdSZXN1
bHQgU0RQUHJvY2Vzc29yOjpwYXJzZUNhbmRpZGF0ZUxpbmUoY29uc3QgU3RyaW5nJiBjYW5kaWRh
dGVMaW5lKSBjb25zdAotewotICAgIFN0cmluZyBzY3JpcHRPdXRwdXQ7Ci0gICAgaWYgKCFjYWxs
U2NyaXB0KCJwYXJzZUNhbmRpZGF0ZUxpbmUiLCBjYW5kaWRhdGVMaW5lLCBzY3JpcHRPdXRwdXQp
KQotICAgICAgICByZXR1cm4geyBSZXN1bHQ6OkludGVybmFsRXJyb3IgfTsKLQotICAgIGlmIChz
Y3JpcHRPdXRwdXQgPT0gIlBhcnNlRXJyb3IiKQotICAgICAgICByZXR1cm4geyBSZXN1bHQ6OlBh
cnNlRXJyb3IgfTsKLQotICAgIGF1dG8gY2FuZGlkYXRlID0gaWNlQ2FuZGlkYXRlRnJvbUpTT04o
c2NyaXB0T3V0cHV0KTsKLSAgICBpZiAoIWNhbmRpZGF0ZSkKLSAgICAgICAgcmV0dXJuIHsgUmVz
dWx0OjpJbnRlcm5hbEVycm9yIH07Ci0gICAgcmV0dXJuIHsgV1RGTW92ZShjYW5kaWRhdGUudmFs
dWUoKSkgfTsKLX0KLQotYm9vbCBTRFBQcm9jZXNzb3I6OmNhbGxTY3JpcHQoY29uc3QgU3RyaW5n
JiBmdW5jdGlvbk5hbWUsIGNvbnN0IFN0cmluZyYgYXJndW1lbnQsIFN0cmluZyYgb3V0UmVzdWx0
KSBjb25zdAotewotICAgIGlmICghc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVu
dD4oc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsKLSAgICBpZiAoIWRvY3VtZW50LT5mcmFtZSgp
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIW1faXNvbGF0ZWRXb3JsZCkKLSAg
ICAgICAgbV9pc29sYXRlZFdvcmxkID0gRE9NV3JhcHBlcldvcmxkOjpjcmVhdGUoY29tbW9uVk0o
KSk7Ci0KLSAgICBTY3JpcHRDb250cm9sbGVyJiBzY3JpcHRDb250cm9sbGVyID0gZG9jdW1lbnQt
PmZyYW1lKCktPnNjcmlwdCgpOwotICAgIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qg
PSBKU0M6OmpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KHNjcmlwdENvbnRyb2xsZXIuZ2xvYmFs
T2JqZWN0KCptX2lzb2xhdGVkV29ybGQpKTsKLSAgICBKU0M6OlZNJiB2bSA9IGdsb2JhbE9iamVj
dC0+dm0oKTsKLSAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKHZtKTsKLSAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7Ci0gICAgSlNDOjpFeGVjU3RhdGUqIGV4ZWMgPSBn
bG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKLQotICAgIEpTQzo6SlNWYWx1ZSBwcm9iZUZ1bmN0
aW9uVmFsdWUgPSBnbG9iYWxPYmplY3QtPmdldChleGVjLCBKU0M6OklkZW50aWZpZXI6OmZyb21T
dHJpbmcoZXhlYywgImdlbmVyYXRlIikpOwotICAgIGlmICghcHJvYmVGdW5jdGlvblZhbHVlLmlz
RnVuY3Rpb24oKSkgewotICAgICAgICBVUkwgc2NyaXB0VVJMOwotICAgICAgICBzY3JpcHRDb250
cm9sbGVyLmV2YWx1YXRlSW5Xb3JsZChTY3JpcHRTb3VyY2VDb2RlKFNEUFByb2Nlc3NvclNjcmlw
dFJlc291cmNlOjpzY3JpcHRTdHJpbmcoKSwgc2NyaXB0VVJMKSwgKm1faXNvbGF0ZWRXb3JsZCk7
Ci0gICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpIHsKLSAgICAgICAgICAg
IHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgIH0KLSAgICB9Ci0KLSAgICBKU0M6OkpTVmFsdWUgZnVuY3Rpb25WYWx1ZSA9IGdsb2JhbE9i
amVjdC0+Z2V0KGV4ZWMsIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCBmdW5jdGlv
bk5hbWUpKTsKLSAgICBpZiAoIWZ1bmN0aW9uVmFsdWUuaXNGdW5jdGlvbigpKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICBKU0M6OkpTT2JqZWN0KiBmdW5jdGlvbiA9IGZ1bmN0aW9uVmFs
dWUudG9PYmplY3QoZXhlYyk7Ci0gICAgSlNDOjpDYWxsRGF0YSBjYWxsRGF0YTsKLSAgICBKU0M6
OkNhbGxUeXBlIGNhbGxUeXBlID0gZnVuY3Rpb24tPm1ldGhvZFRhYmxlKHZtKS0+Z2V0Q2FsbERh
dGEoZnVuY3Rpb24sIGNhbGxEYXRhKTsKLSAgICBpZiAoY2FsbFR5cGUgPT0gSlNDOjpDYWxsVHlw
ZTo6Tm9uZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgSlNDOjpNYXJrZWRBcmd1bWVu
dEJ1ZmZlciBhcmdMaXN0OwotICAgIGFyZ0xpc3QuYXBwZW5kKEpTQzo6anNTdHJpbmcoZXhlYywg
YXJndW1lbnQpKTsKLQotICAgIEpTQzo6SlNWYWx1ZSByZXN1bHQgPSBKU0M6OmNhbGwoZXhlYywg
ZnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSwgZ2xvYmFsT2JqZWN0LCBhcmdMaXN0KTsKLSAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKSB7Ci0gICAgICAgIExPR19FUlJPUigi
U0RQUHJvY2Vzc29yIHNjcmlwdCB0aHJldyBpbiBmdW5jdGlvbiAlcyIsIGZ1bmN0aW9uTmFtZS5h
c2NpaSgpLmRhdGEoKSk7Ci0gICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7Ci0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAoIXJlc3VsdC5pc1N0cmluZygpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBvdXRSZXN1bHQgPSBhc1N0cmluZyhyZXN1bHQpLT52
YWx1ZShleGVjKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQotCi0jZW5kaWYgLy8gRU5BQkxFKFdFQl9SVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1NEUFByb2Nlc3Nvci5oIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9tZWRpYXN0cmVhbS9TRFBQcm9jZXNzb3IuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggY2E2MWM5YTkyZTQ3Y2UzZTkwMWVjMzYzMWE2OGY3N2IxMmM5MDJjNC4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL21lZGlhc3RyZWFtL1NEUFByb2Nlc3Nvci5oCisrKyAvZGV2L251bGwKQEAgLTEsNzggKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBFcmljc3NvbiBBQi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICog
ICAgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZQotICogICAgZGlzdHJpYnV0aW9uLgotICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBF
cmljc3NvbiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotICog
ICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShXRUJfUlRDKQotCi0jaW5jbHVk
ZSAiQ29udGV4dERlc3RydWN0aW9uT2JzZXJ2ZXIuaCIKLSNpbmNsdWRlICJJY2VDYW5kaWRhdGUu
aCIKLSNpbmNsdWRlICJNZWRpYUVuZHBvaW50U2Vzc2lvbkNvbmZpZ3VyYXRpb24uaCIKLSNpbmNs
dWRlIDx3dGYvUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1ZhcmlhbnQuaD4KLSNpbmNsdWRlIDx3
dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBET01X
cmFwcGVyV29ybGQ7Ci1jbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OwotCi1jbGFzcyBTRFBQ
cm9jZXNzb3IgOiBwdWJsaWMgQ29udGV4dERlc3RydWN0aW9uT2JzZXJ2ZXIgewotcHVibGljOgot
ICAgIGVudW0gY2xhc3MgUmVzdWx0IHsKLSAgICAgICAgU3VjY2VzcyA9IDEsCi0gICAgICAgIElu
dGVybmFsRXJyb3IgPSAyLAotICAgICAgICBQYXJzZUVycm9yID0gMwotICAgIH07Ci0KLSAgICBT
RFBQcm9jZXNzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCopOwotCi0gICAgUmVzdWx0IGdlbmVy
YXRlKGNvbnN0IE1lZGlhRW5kcG9pbnRTZXNzaW9uQ29uZmlndXJhdGlvbiYsIFN0cmluZyYgb3V0
U2RwU3RyaW5nKSBjb25zdDsKLSAgICBSZXN1bHQgcGFyc2UoY29uc3QgU3RyaW5nJiBzZHAsIFJl
ZlB0cjxNZWRpYUVuZHBvaW50U2Vzc2lvbkNvbmZpZ3VyYXRpb24+JikgY29uc3Q7Ci0KLSAgICBS
ZXN1bHQgZ2VuZXJhdGVDYW5kaWRhdGVMaW5lKGNvbnN0IEljZUNhbmRpZGF0ZSYsIFN0cmluZyYg
b3V0Q2FuZGlkYXRlTGluZSkgY29uc3Q7Ci0KLSAgICBzdHJ1Y3QgUGFyc2luZ1Jlc3VsdCB7Ci0g
ICAgICAgIFZhcmlhbnQ8SWNlQ2FuZGlkYXRlLCBSZXN1bHQ+IHJlc3VsdDsKLQotICAgICAgICBS
ZXN1bHQgcGFyc2luZ1N0YXR1cygpIGNvbnN0IHsgcmV0dXJuIFdURjo6aG9sZHNfYWx0ZXJuYXRp
dmU8SWNlQ2FuZGlkYXRlPihyZXN1bHQpID8gUmVzdWx0OjpTdWNjZXNzIDogV1RGOjpnZXQ8U0RQ
UHJvY2Vzc29yOjpSZXN1bHQ+KHJlc3VsdCk7IH0KLSAgICAgICAgSWNlQ2FuZGlkYXRlJiBjYW5k
aWRhdGUoKSB7IHJldHVybiBXVEY6OmdldDxJY2VDYW5kaWRhdGU+KHJlc3VsdCk7IH0KLSAgICB9
OwotICAgIFBhcnNpbmdSZXN1bHQgcGFyc2VDYW5kaWRhdGVMaW5lKGNvbnN0IFN0cmluZyYgY2Fu
ZGlkYXRlTGluZSkgY29uc3Q7Ci0KLXByaXZhdGU6Ci0gICAgYm9vbCBjYWxsU2NyaXB0KGNvbnN0
IFN0cmluZyYgZnVuY3Rpb25OYW1lLCBjb25zdCBTdHJpbmcmIGFyZ3VtZW50LCBTdHJpbmcmIG91
dFJlc3VsdCkgY29uc3Q7Ci0KLSAgICBtdXRhYmxlIFJlZlB0cjxET01XcmFwcGVyV29ybGQ+IG1f
aXNvbGF0ZWRXb3JsZDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8v
IEVOQUJMRShXRUJfUlRDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRp
YXN0cmVhbS9saWJ3ZWJydGMvTGliV2ViUlRDTWVkaWFFbmRwb2ludC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2xpYndlYnJ0Yy9MaWJXZWJSVENNZWRpYUVuZHBvaW50
LmNwcAppbmRleCA2ZWI0YTc0MDRjMmRiNjJmYmM3NWQ1ZjYzMGIwY2E4MWRjMzBjZmQ3Li4yMzg1
MWY5NjdkMWJkODc2ZmZkMWYzOTkzYzU2ZWVjN2ZjNGU2YThlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2xpYndlYnJ0Yy9MaWJXZWJSVENNZWRpYUVuZHBv
aW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2xpYndlYnJ0
Yy9MaWJXZWJSVENNZWRpYUVuZHBvaW50LmNwcApAQCAtODAsNyArODAsNiBAQCBib29sIExpYldl
YlJUQ01lZGlhRW5kcG9pbnQ6OnNldENvbmZpZ3VyYXRpb24oTGliV2ViUlRDUHJvdmlkZXImIGNs
aWVudCwgd2VicnRjOgogICAgIHJldHVybiBtX2JhY2tlbmQtPlNldENvbmZpZ3VyYXRpb24oV1RG
TW92ZShjb25maWd1cmF0aW9uKSk7CiB9CiAKLS8vIEZJWE1FOiB1bmlmeSB3aXRoIE1lZGlhRW5k
cG9pbnRTZXNzaW9uRGVzY3JpcHRpb246OnR5cGVTdHJpbmcoKQogc3RhdGljIGlubGluZSBjb25z
dCBjaGFyKiBzZXNzaW9uRGVzY3JpcHRpb25UeXBlKFJUQ1NkcFR5cGUgc2RwVHlwZSkKIHsKICAg
ICBzd2l0Y2ggKHNkcFR5cGUpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBiMGU3NTQ5NzBiMDQwYjNjNTUwYjA3MTcwNTA5NjFi
ZGRkODc2ZjI1Li4zNzM4YTBlN2U3NDI3YmI4MmYwMmFmYjk0NDA2ZTJlZTMxMjAxODg1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
KysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBA
IC0xNzkzLDYgKzE3OTMsOCBAQAogCQk0MUFCRTY3QjFEMDU4MERCMDA2RDg2MkQgLyogQ3Jvc3NP
cmlnaW5QcmVmbGlnaHRDaGVja2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA0MUFCRTY3QTFEMDU4MEQ1MDA2RDg2MkQgLyogQ3Jvc3NPcmlnaW5QcmVm
bGlnaHRDaGVja2VyLmggKi87IH07CiAJCTQxQUJFNjdDMUQwNTgwRTAwMDZEODYyRCAvKiBDcm9z
c09yaWdpblByZWZsaWdodENoZWNrZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNDFBQkU2NzkxRDA1ODBENTAwNkQ4NjJEIC8qIENyb3NzT3JpZ2lu
UHJlZmxpZ2h0Q2hlY2tlci5jcHAgKi87IH07CiAJCTQxQUQ3NTNBMUNFRjZCRDEwMEEzMTQ4NiAv
KiBGZXRjaE9wdGlvbnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDQxQUQ3NTM5MUNFRjZCQ0UwMEEzMTQ4NiAvKiBGZXRjaE9wdGlvbnMuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk0MUIyOEIxNDFGODUw
MUE2MDBGQjUyQUMgLyogTWVkaWFFbmRwb2ludENvbmZpZ3VyYXRpb24uY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDFCMjhCMTMxRjg1MDFBNDAwRkI1
MkFDIC8qIE1lZGlhRW5kcG9pbnRDb25maWd1cmF0aW9uLmNwcCAqLzsgfTsKKwkJNDFCMjhCMTUx
Rjg1MDFEMzAwRkI1MkFDIC8qIE1lZGlhRW5kcG9pbnRDb25maWd1cmF0aW9uLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MUIyOEIxMjFGODUwMUEzMDBG
QjUyQUMgLyogTWVkaWFFbmRwb2ludENvbmZpZ3VyYXRpb24uaCAqLzsgfTsKIAkJNDFCMkE2MjYx
RUYxQkY2RDAwMkI5RDdBIC8qIFdlYkF1ZGlvU291cmNlUHJvdmlkZXIuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxQjJBNjI1MUVGMUJGNjAwMDJCOUQ3
QSAvKiBXZWJBdWRpb1NvdXJjZVByb3ZpZGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNDFCNDU5RUYxRjU1RUJEMTAwMDBGNkZEIC8qIFJlYWRh
YmxlU3RyZWFtLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDQxQjQ1OUVEMUY1NUVCQzcwMDAwRjZGRCAvKiBSZWFkYWJsZVN0cmVhbS5jcHAgKi87IH07
CiAJCTQxQkY3MDBDMEZFODZGNDkwMDVFOERFQyAvKiBNZXNzYWdlUG9ydENoYW5uZWwuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxQkY3MDBBMEZFODZG
NDkwMDVFOERFQyAvKiBNZXNzYWdlUG9ydENoYW5uZWwuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMjc3OSw4ICsyNzgxLDYgQEAKIAkJNURGRThG
NTYwRDE2NDc3QjAwNzZFOTM3IC8qIFNjaGVkdWxlZEFjdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0EzNzhCQTBEMTVGNjQyMDBCNzkzRDYg
LyogU2NoZWR1bGVkQWN0aW9uLmNwcCAqLzsgfTsKIAkJNURGRThGNTcwRDE2NDc3QzAwNzZFOTM3
IC8qIFNjaGVkdWxlZEFjdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQkNBMzc4QkIwRDE1RjY0MjAwQjc5M0Q2IC8qIFNjaGVkdWxlZEFjdGlvbi5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTVERkVC
QUI3MTg1OTJCNkQwMEM3NUJFQiAvKiBXZWJLaXRBdmFpbGFiaWxpdHkuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVERkVCQUI2MTg1OTJCNkQwMEM3NUJF
QiAvKiBXZWJLaXRBdmFpbGFiaWxpdHkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwotCQk1RTE2QTJFNDFCRkE2NTBCMDAyOUEyMUUgLyogTWVkaWFFbmRw
b2ludFBlZXJDb25uZWN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1RTE2QTJFMzFCRkE2NEZCMDAyOUEyMUUgLyogTWVkaWFFbmRwb2ludFBlZXJD
b25uZWN0aW9uLmggKi87IH07Ci0JCTVFMTZBMkU1MUJGQTY1MEYwMDI5QTIxRSAvKiBNZWRpYUVu
ZHBvaW50UGVlckNvbm5lY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNUUxNkEyRTIxQkZBNjRGQjAwMjlBMjFFIC8qIE1lZGlhRW5kcG9pbnRQ
ZWVyQ29ubmVjdGlvbi5jcHAgKi87IH07CiAJCTVFMkM0MzUxMUJDRUUyRjYwMDAxRTJCQyAvKiBQ
ZWVyQ29ubmVjdGlvbkJhY2tlbmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDVFMkM0MzREMUJDRUUyRTUwMDAxRTJCQyAvKiBQZWVyQ29ubmVjdGlvbkJh
Y2tlbmQuaCAqLzsgfTsKIAkJNUUyQzQzNUYxQkNFRTMxRTAwMDFFMkJDIC8qIFJUQ1J0cFNlbmRl
clJlY2VpdmVyQmFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNUUyQzQzNUQxQkNFRTMwRDAwMDFFMkJDIC8qIFJUQ1J0cFNlbmRlclJlY2VpdmVyQmFz
ZS5oICovOyB9OwogCQk1RTJDNDM2MDFCQ0VFMzIzMDAwMUUyQkMgLyogUlRDUnRwU2VuZGVyLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVFMkM0MzU5
MUJDRUUzMEQwMDAxRTJCQyAvKiBSVENSdHBTZW5kZXIuY3BwICovOyB9OwpAQCAtMjgwMSwyNyAr
MjgwMSwxNCBAQAogCQk1RTJDNDM3NDFCQ0YwRDc1MDAwMUUyQkUgLyogSlNSVENSdHBQYXJhbWV0
ZXJzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1RTJD
NDM3MDFCQ0YwRDY5MDAwMUUyQkUgLyogSlNSVENSdHBQYXJhbWV0ZXJzLmggKi87IH07CiAJCTVF
MkM0MzdCMUJDRjlBNTcwMDAxRTJCQyAvKiBSVENQZWVyQ29ubmVjdGlvbkJ1aWx0aW5zLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1RTJDNDM3NjFCQ0Y5
QTBCMDAwMUUyQkMgLyogUlRDUGVlckNvbm5lY3Rpb25CdWlsdGlucy5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTVFMkM0MzdDMUJDRjlBODQwMDAx
RTJCQyAvKiBSVENQZWVyQ29ubmVjdGlvbkludGVybmFsc0J1aWx0aW5zLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1RTJDNDM3OTFCQ0Y5QTBCMDAwMUUy
QkMgLyogUlRDUGVlckNvbm5lY3Rpb25JbnRlcm5hbHNCdWlsdGlucy5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTVFNEVBQjA0MUQwNzE2NkEwMDA2
QTE4NCAvKiBNZWRpYUVuZHBvaW50U2Vzc2lvbkRlc2NyaXB0aW9uLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1RTRFQUIwMzFEMDcxNjRDMDAwNkExODQg
LyogTWVkaWFFbmRwb2ludFNlc3Npb25EZXNjcmlwdGlvbi5oICovOyB9OwotCQk1RTRFQUIwNTFE
MDcxNjZFMDAwNkExODQgLyogTWVkaWFFbmRwb2ludFNlc3Npb25EZXNjcmlwdGlvbi5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1RTRFQUIwMjFEMDcx
NjRDMDAwNkExODQgLyogTWVkaWFFbmRwb2ludFNlc3Npb25EZXNjcmlwdGlvbi5jcHAgKi87IH07
CiAJCTVFNUUyQjEzMUNGQzNFNzAwMDBDMEQ4NSAvKiBSVENSdHBUcmFuc2NlaXZlci5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1RTVFMkIxMDFDRkMz
RTRCMDAwQzBEODUgLyogUlRDUnRwVHJhbnNjZWl2ZXIuY3BwICovOyB9OwogCQk1RTVFMkIxNDFD
RkMzRTc1MDAwQzBEODUgLyogUlRDUnRwVHJhbnNjZWl2ZXIuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVFNUUyQjExMUNGQzNFNEIwMDBDMEQ4NSAvKiBS
VENSdHBUcmFuc2NlaXZlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07Ci0JCTVFQTNENkRGMUM4NTlEN0YwMDMwMEJCQiAvKiBNb2NrTWVkaWFFbmRwb2lu
dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUVBM0Q2
REUxQzg1OUQ1MzAwMzAwQkJCIC8qIE1vY2tNZWRpYUVuZHBvaW50LmggKi87IH07Ci0JCTVFQTNE
NkUwMUM4NTlEODQwMDMwMEJCQiAvKiBNb2NrTWVkaWFFbmRwb2ludC5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1RUEzRDZERDFDODU5RDUzMDAzMDBC
QkIgLyogTW9ja01lZGlhRW5kcG9pbnQuY3BwICovOyB9OwotCQk1RUEzRDZFMzFDODU5REMxMDAz
MDBCQkIgLyogU0RQUHJvY2Vzc29yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDVFQTNENkUxMUM4NTlEQUEwMDMwMEJCQiAvKiBTRFBQcm9jZXNzb3Iu
Y3BwICovOyB9OwotCQk1RUEzRDZFNDFDODU5REMxMDAzMDBCQkIgLyogU0RQUHJvY2Vzc29yLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1RUEzRDZFMjFD
ODU5REFBMDAzMDBCQkIgLyogU0RQUHJvY2Vzc29yLmggKi87IH07Ci0JCTVFQTNENkU3MUM4NUE5
REIwMDMwMEJCQiAvKiBTRFBQcm9jZXNzb3JTY3JpcHRSZXNvdXJjZS5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1RUEzRDZFNTFDODVBOUMzMDAzMDBC
QkIgLyogU0RQUHJvY2Vzc29yU2NyaXB0UmVzb3VyY2UuY3BwICovOyB9OwotCQk1RUEzRDZFODFD
ODVBOURCMDAzMDBCQkIgLyogU0RQUHJvY2Vzc29yU2NyaXB0UmVzb3VyY2UuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVFQTNENkU2MUM4NUE5QzMwMDMw
MEJCQiAvKiBTRFBQcm9jZXNzb3JTY3JpcHRSZXNvdXJjZS5oICovOyB9OwogCQk1RUE3MjVEMjFB
Q0FCRDQ3MDBFQUQxN0IgLyogTWVkaWFEZXZpY2VzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVFQTcyNUNEMUFDQUJDRDkwMEVBRDE3QiAvKiBNZWRp
YURldmljZXMuY3BwICovOyB9OwogCQk1RUE3MjVEMzFBQ0FCRDQ3MDBFQUQxN0IgLyogTWVkaWFE
ZXZpY2VzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
RUE3MjVDRTFBQ0FCQ0Q5MDBFQUQxN0IgLyogTWVkaWFEZXZpY2VzLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNUVBNzI1RDUxQUNBQkQ1NzAwRUFE
MTdCIC8qIE5hdmlnYXRvck1lZGlhRGV2aWNlcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1RUE3MjVDQTFBQ0FCQ0I1MDBFQUQxN0IgLyogTmF2aWdh
dG9yTWVkaWFEZXZpY2VzLmNwcCAqLzsgfTsKIAkJNUVBNzI1RDYxQUNBQkQ1NzAwRUFEMTdCIC8q
IE5hdmlnYXRvck1lZGlhRGV2aWNlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNUVBNzI1Q0IxQUNBQkNCNTAwRUFEMTdCIC8qIE5hdmlnYXRvck1lZGlh
RGV2aWNlcy5oICovOyB9OwogCQk1RUJCODkzMTFDNzc3N0ZGMDBDNjVENDEgLyogTWVkaWFQYXls
b2FkLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1RUJC
ODkyRjFDNzc3N0QwMDBDNjVENDEgLyogTWVkaWFQYXlsb2FkLmggKi87IH07Ci0JCTVFQkI4OTMy
MUM3Nzc4MjMwMEM2NUQ0MSAvKiBNZWRpYUVuZHBvaW50U2Vzc2lvbkNvbmZpZ3VyYXRpb24uaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVFQkI4OTJFMUM3
Nzc3RDAwMEM2NUQ0MSAvKiBNZWRpYUVuZHBvaW50U2Vzc2lvbkNvbmZpZ3VyYXRpb24uaCAqLzsg
fTsKIAkJNUVCQjg5MzMxQzc3NzgyOTAwQzY1RDQxIC8qIEljZUNhbmRpZGF0ZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUVCQjg5MzAxQzc3NzdFMTAw
QzY1RDQxIC8qIEljZUNhbmRpZGF0ZS5oICovOyB9OwotCQk1RUJCODkzNDFDNzc3ODI5MDBDNjVE
NDEgLyogTWVkaWFFbmRwb2ludC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1RUJCODkyQTFDNzc3N0QwMDBDNjVENDEgLyogTWVkaWFFbmRwb2ludC5j
cHAgKi87IH07Ci0JCTVFQkI4OTM1MUM3Nzc4MjkwMEM2NUQ0MSAvKiBNZWRpYUVuZHBvaW50Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1RUJCODkyQjFD
Nzc3N0QwMDBDNjVENDEgLyogTWVkaWFFbmRwb2ludC5oICovOyB9OwotCQk1RUJCODkzNjFDNzc3
ODI5MDBDNjVENDEgLyogTWVkaWFFbmRwb2ludENvbmZpZ3VyYXRpb24uY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUVCQjg5MkMxQzc3NzdEMDAwQzY1
RDQxIC8qIE1lZGlhRW5kcG9pbnRDb25maWd1cmF0aW9uLmNwcCAqLzsgfTsKLQkJNUVCQjg5Mzcx
Qzc3NzgyOTAwQzY1RDQxIC8qIE1lZGlhRW5kcG9pbnRDb25maWd1cmF0aW9uLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1RUJCODkyRDFDNzc3N0QwMDBD
NjVENDEgLyogTWVkaWFFbmRwb2ludENvbmZpZ3VyYXRpb24uaCAqLzsgfTsKIAkJNUVCQjg5Mzkx
Qzc3QzM5OTAwQzY1RDQxIC8qIFBlZXJNZWRpYURlc2NyaXB0aW9uLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1RUJCODkzODFDNzdCREE0MDBDNjVENDEg
LyogUGVlck1lZGlhRGVzY3JpcHRpb24uaCAqLzsgfTsKIAkJNUYyREJCRTkxNzhFM0M4MTAwMTQx
NDg2IC8qIENlcnRpZmljYXRlSW5mb01hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDVGMkRCQkU3MTc4RTMzMkQwMDE0MTQ4NiAvKiBDZXJ0aWZpY2F0
ZUluZm9NYWMubW0gKi87IH07CiAJCTVGQTkwNENBMTc4RTYxRjUwMDRDOEEyRCAvKiBDZXJ0aWZp
Y2F0ZUluZm8uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDVGMkRCQkU4MTc4RTMzNjkwMDE0MTQ4NiAvKiBDZXJ0aWZpY2F0ZUluZm8uaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtNjM5MCw3ICs2Mzc3LDYg
QEAKIAkJQ0RBQjZEMkUxN0M4MTRFRTAwQzYwQjM0IC8qIEpTTWVkaWFDb250cm9sc0hvc3QuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQUI2RDJDMTdD
ODE0RUUwMEM2MEIzNCAvKiBKU01lZGlhQ29udHJvbHNIb3N0LmggKi87IH07CiAJCUNEQUI2RDMx
MTdDOTI1OTUwMEM2MEIzNCAvKiBVc2VyQWdlbnRTY3JpcHRzLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREFCNkQyRjE3QzkyNTk1MDBDNjBCMzQgLyog
VXNlckFnZW50U2NyaXB0cy5oICovOyB9OwogCQlDREFCNkQzMjE3QzkyNTk1MDBDNjBCMzQgLyog
VXNlckFnZW50U2NyaXB0c0RhdGEuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQ0RBQjZEMzAxN0M5MjU5NTAwQzYwQjM0IC8qIFVzZXJBZ2VudFNjcmlw
dHNEYXRhLmNwcCAqLzsgfTsKLQkJQ0RBQjZEMzIxN0M5MjU5NTAwQzYwQjM1IC8qIFNEUFByb2Nl
c3NvclNjcmlwdHNEYXRhLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IENEQUI2RDMwMTdDOTI1OTUwMEM2MEIzNSAvKiBTRFBQcm9jZXNzb3JTY3JpcHRz
RGF0YS5jcHAgKi87IH07CiAJCUNEQUU4QzA5MTc0NkI5NTcwMDUzMkQ3OCAvKiBQbGF0Zm9ybU1l
ZGlhU2Vzc2lvbk1hbmFnZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQ0RBRThDMDcxNzQ2Qjk1NzAwNTMyRDc4IC8qIFBsYXRmb3JtTWVkaWFTZXNz
aW9uTWFuYWdlci5jcHAgKi87IH07CiAJCUNEQkVBRUFDMTlEOTJCNkMwMEJFQkE4OCAvKiBNZWRp
YVNlbGVjdGlvbkdyb3VwQVZGT2JqQy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IENEQkVBRUFBMTlEOTJCNkMwMEJFQkE4OCAvKiBNZWRpYVNlbGVjdGlv
bkdyb3VwQVZGT2JqQy5tbSAqLzsgfTsKIAkJQ0RCRUFFQUQxOUQ5MkI2QzAwQkVCQTg4IC8qIE1l
ZGlhU2VsZWN0aW9uR3JvdXBBVkZPYmpDLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBDREJFQUVBQjE5RDkyQjZDMDBCRUJBODggLyogTWVkaWFTZWxlY3Rp
b25Hcm91cEFWRk9iakMuaCAqLzsgfTsKQEAgLTk2MDYsNiArOTU5Miw4IEBACiAJCTQxQUJFNjc5
MUQwNTgwRDUwMDZEODYyRCAvKiBDcm9zc09yaWdpblByZWZsaWdodENoZWNrZXIuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ3Jvc3NPcmlnaW5QcmVmbGlnaHRDaGVj
a2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDFBQkU2N0ExRDA1ODBENTAw
NkQ4NjJEIC8qIENyb3NzT3JpZ2luUHJlZmxpZ2h0Q2hlY2tlci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBDcm9zc09yaWdpblByZWZsaWdodENoZWNrZXIuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDFBRDc1MzkxQ0VGNkJDRTAwQTMxNDg2IC8qIEZldGNoT3B0
aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGZXRjaE9wdGlvbnMuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDFCMjhCMTIxRjg1MDFBMzAwRkI1MkFDIC8q
IE1lZGlhRW5kcG9pbnRDb25maWd1cmF0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IE1lZGlhRW5kcG9pbnRDb25maWd1cmF0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTQxQjI4QjEzMUY4NTAxQTQwMEZCNTJBQyAvKiBNZWRpYUVuZHBvaW50Q29uZmln
dXJhdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNZWRpYUVu
ZHBvaW50Q29uZmlndXJhdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQx
QjJBNjI1MUVGMUJGNjAwMDJCOUQ3QSAvKiBXZWJBdWRpb1NvdXJjZVByb3ZpZGVyLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFdlYkF1ZGlvU291cmNlUHJvdmlkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNDFCNDU5REExRjRDQURCOTAwMDBGNkZEIC8qIFJlYWRhYmxlU3RyZWFtLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlYWRhYmxlU3RyZWFtLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxQjQ1OUVEMUY1NUVCQzcwMDAwRjZGRCAvKiBSZWFkYWJs
ZVN0cmVhbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZWFkYWJs
ZVN0cmVhbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMDczNCw4ICsxMDcy
Miw2IEBACiAJCTVEQjFCQzY4MTA3MTVBNjQwMEVGQUE0OSAvKiBUcmFuc2Zvcm1Tb3VyY2UuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVHJhbnNmb3JtU291cmNlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVEQjFCQzY5MTA3MTVBNjQwMEVGQUE0OSAvKiBUcmFu
c2Zvcm1Tb3VyY2VMaWJ4c2x0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFRyYW5zZm9ybVNvdXJjZUxpYnhzbHQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk1REZFQkFCNjE4NTkyQjZEMDBDNzVCRUIgLyogV2ViS2l0QXZhaWxhYmlsaXR5LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYktpdEF2YWlsYWJpbGl0eS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1RTE2QTJFMjFCRkE2NEZCMDAyOUEyMUUgLyogTWVk
aWFFbmRwb2ludFBlZXJDb25uZWN0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IE1lZGlhRW5kcG9pbnRQZWVyQ29ubmVjdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCTVFMTZBMkUzMUJGQTY0RkIwMDI5QTIxRSAvKiBNZWRpYUVuZHBvaW50
UGVlckNvbm5lY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWVkaWFF
bmRwb2ludFBlZXJDb25uZWN0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVF
MkM0MzREMUJDRUUyRTUwMDAxRTJCQyAvKiBQZWVyQ29ubmVjdGlvbkJhY2tlbmQuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGVlckNvbm5lY3Rpb25CYWNrZW5kLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVFMkM0MzU0MUJDRUUzMEQwMDAxRTJCQyAvKiBSVENQ
ZWVyQ29ubmVjdGlvbi5qcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuamF2YXNjcmlwdDsgcGF0aCA9
IFJUQ1BlZXJDb25uZWN0aW9uLmpzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1RTJD
NDM1NTFCQ0VFMzBEMDAwMUUyQkMgLyogUlRDUGVlckNvbm5lY3Rpb25JbnRlcm5hbHMuanMgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmphdmFzY3JpcHQ7IHBhdGggPSBSVENQZWVyQ29ubmVjdGlvbklu
dGVybmFscy5qczsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEwNzYzLDI5ICsxMDc0
OSwxNiBAQAogCQk1RTJDNDM3NjFCQ0Y5QTBCMDAwMUUyQkMgLyogUlRDUGVlckNvbm5lY3Rpb25C
dWlsdGlucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSVENQZWVyQ29ubmVj
dGlvbkJ1aWx0aW5zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVFMkM0Mzc4MUJD
RjlBMEIwMDAxRTJCQyAvKiBSVENQZWVyQ29ubmVjdGlvbkludGVybmFsc0J1aWx0aW5zLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJUQ1BlZXJDb25uZWN0aW9uSW50
ZXJuYWxzQnVpbHRpbnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1RTJDNDM3
OTFCQ0Y5QTBCMDAwMUUyQkMgLyogUlRDUGVlckNvbm5lY3Rpb25JbnRlcm5hbHNCdWlsdGlucy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSVENQZWVyQ29ubmVjdGlvbkludGVy
bmFsc0J1aWx0aW5zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTVFNEVBQjAyMUQw
NzE2NEMwMDA2QTE4NCAvKiBNZWRpYUVuZHBvaW50U2Vzc2lvbkRlc2NyaXB0aW9uLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1lZGlhRW5kcG9pbnRTZXNzaW9uRGVz
Y3JpcHRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1RTRFQUIwMzFEMDcx
NjRDMDAwNkExODQgLyogTWVkaWFFbmRwb2ludFNlc3Npb25EZXNjcmlwdGlvbi5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNZWRpYUVuZHBvaW50U2Vzc2lvbkRlc2NyaXB0aW9u
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVFNUUyQjEwMUNGQzNFNEIwMDBDMEQ4
NSAvKiBSVENSdHBUcmFuc2NlaXZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBSVENSdHBUcmFuc2NlaXZlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTVFNUUyQjExMUNGQzNFNEIwMDBDMEQ4NSAvKiBSVENSdHBUcmFuc2NlaXZlci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSVENSdHBUcmFuc2NlaXZlci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk1RTVFMkIxMjFDRkMzRTRCMDAwQzBEODUgLyogUlRDUnRw
VHJhbnNjZWl2ZXIuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFJUQ1J0cFRyYW5zY2VpdmVy
LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUU2NjUzMDkxREE0MzdCRjAwRkRE
ODRDIC8qIFJUQ0ljZVRyYW5zcG9ydC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBSVENJY2VUcmFuc3BvcnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNUVBM0Q2
REQxQzg1OUQ1MzAwMzAwQkJCIC8qIE1vY2tNZWRpYUVuZHBvaW50LmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1vY2tNZWRpYUVuZHBvaW50LmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNUVBM0Q2REUxQzg1OUQ1MzAwMzAwQkJCIC8qIE1vY2tNZWRp
YUVuZHBvaW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1vY2tNZWRpYUVu
ZHBvaW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTVFQTNENkUxMUM4NTlEQUEw
MDMwMEJCQiAvKiBTRFBQcm9jZXNzb3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gU0RQUHJvY2Vzc29yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
NUVBM0Q2RTIxQzg1OURBQTAwMzAwQkJCIC8qIFNEUFByb2Nlc3Nvci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBTRFBQcm9jZXNzb3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJNUVBM0Q2RTUxQzg1QTlDMzAwMzAwQkJCIC8qIFNEUFByb2Nlc3NvclNjcmlwdFJl
c291cmNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNEUFByb2Nl
c3NvclNjcmlwdFJlc291cmNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNUVB
M0Q2RTYxQzg1QTlDMzAwMzAwQkJCIC8qIFNEUFByb2Nlc3NvclNjcmlwdFJlc291cmNlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNEUFByb2Nlc3NvclNjcmlwdFJlc291cmNl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVFQTcyNUNBMUFDQUJDQjUwMEVBRDE3
QiAvKiBOYXZpZ2F0b3JNZWRpYURldmljZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gTmF2aWdhdG9yTWVkaWFEZXZpY2VzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNUVBNzI1Q0IxQUNBQkNCNTAwRUFEMTdCIC8qIE5hdmlnYXRvck1lZGlhRGV2
aWNlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBOYXZpZ2F0b3JNZWRpYURl
dmljZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUVBNzI1Q0MxQUNBQkNCNTAw
RUFEMTdCIC8qIE5hdmlnYXRvck1lZGlhRGV2aWNlcy5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRo
ID0gTmF2aWdhdG9yTWVkaWFEZXZpY2VzLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNUVBNzI1Q0QxQUNBQkNEOTAwRUFEMTdCIC8qIE1lZGlhRGV2aWNlcy5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNZWRpYURldmljZXMuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk1RUE3MjVDRTFBQ0FCQ0Q5MDBFQUQxN0IgLyogTWVkaWFEZXZp
Y2VzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1lZGlhRGV2aWNlcy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1RUE3MjVDRjFBQ0FCQ0Q5MDBFQUQxN0IgLyog
TWVkaWFEZXZpY2VzLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBNZWRpYURldmljZXMuaWRs
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1RUJCODkyQTFDNzc3N0QwMDBDNjVENDEg
LyogTWVkaWFFbmRwb2ludC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBNZWRpYUVuZHBvaW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNUVCQjg5
MkIxQzc3NzdEMDAwQzY1RDQxIC8qIE1lZGlhRW5kcG9pbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gTWVkaWFFbmRwb2ludC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQk1RUJCODkyQzFDNzc3N0QwMDBDNjVENDEgLyogTWVkaWFFbmRwb2ludENvbmZpZ3VyYXRp
b24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWVkaWFFbmRwb2lu
dENvbmZpZ3VyYXRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1RUJCODky
RDFDNzc3N0QwMDBDNjVENDEgLyogTWVkaWFFbmRwb2ludENvbmZpZ3VyYXRpb24uaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWVkaWFFbmRwb2ludENvbmZpZ3VyYXRpb24uaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNUVCQjg5MkUxQzc3NzdEMDAwQzY1RDQxIC8q
IE1lZGlhRW5kcG9pbnRTZXNzaW9uQ29uZmlndXJhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBNZWRpYUVuZHBvaW50U2Vzc2lvbkNvbmZpZ3VyYXRpb24uaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUVCQjg5MkYxQzc3NzdEMDAwQzY1RDQxIC8qIE1lZGlh
UGF5bG9hZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNZWRpYVBheWxvYWQu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUVCQjg5MzAxQzc3NzdFMTAwQzY1RDQx
IC8qIEljZUNhbmRpZGF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJY2VD
YW5kaWRhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUVCQjg5MzgxQzc3QkRB
NDAwQzY1RDQxIC8qIFBlZXJNZWRpYURlc2NyaXB0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFBlZXJNZWRpYURlc2NyaXB0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC0xNTE1Niw3ICsxNTEyOSw2IEBACiAJCUNEQUI2RDJDMTdDODE0RUUwMEM2MEIz
NCAvKiBKU01lZGlhQ29udHJvbHNIb3N0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEpTTWVkaWFDb250cm9sc0hvc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
Q0RBQjZEMkYxN0M5MjU5NTAwQzYwQjM0IC8qIFVzZXJBZ2VudFNjcmlwdHMuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVXNlckFnZW50U2NyaXB0cy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlDREFCNkQzMDE3QzkyNTk1MDBDNjBCMzQgLyogVXNlckFnZW50U2Ny
aXB0c0RhdGEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVXNlckFn
ZW50U2NyaXB0c0RhdGEuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlDREFCNkQz
MDE3QzkyNTk1MDBDNjBCMzUgLyogU0RQUHJvY2Vzc29yU2NyaXB0c0RhdGEuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU0RQUHJvY2Vzc29yU2NyaXB0c0RhdGEuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDREFFOEMwNzE3NDZCOTU3MDA1MzJENzgg
LyogUGxhdGZvcm1NZWRpYVNlc3Npb25NYW5hZ2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFBsYXRmb3JtTWVkaWFTZXNzaW9uTWFuYWdlci5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNEQUU4QzA4MTc0NkI5NTcwMDUzMkQ3OCAvKiBQbGF0Zm9y
bU1lZGlhU2Vzc2lvbk1hbmFnZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
UGxhdGZvcm1NZWRpYVNlc3Npb25NYW5hZ2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUNEQkVBRUFBMTlEOTJCNkMwMEJFQkE4OCAvKiBNZWRpYVNlbGVjdGlvbkdyb3VwQVZGT2Jq
Qy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IE1lZGlhU2VsZWN0
aW9uR3JvdXBBVkZPYmpDLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTY0MDMs
MTAgKzE2Mzc1LDYgQEAKIAkJCQkwN0FCRUY2RDFEOEExQzc2MDBGMjE5NzIgLyogTWVkaWFEZXZp
Y2VzRW51bWVyYXRpb25SZXF1ZXN0LmggKi8sCiAJCQkJMDczOTRFQzcxQkFCMkNDRDAwQkU5OUNE
IC8qIE1lZGlhRGV2aWNlc1JlcXVlc3QuY3BwICovLAogCQkJCTA3Mzk0RUM5MUJBQjJDRDcwMEJF
OTlDRCAvKiBNZWRpYURldmljZXNSZXF1ZXN0LmggKi8sCi0JCQkJNUUxNkEyRTIxQkZBNjRGQjAw
MjlBMjFFIC8qIE1lZGlhRW5kcG9pbnRQZWVyQ29ubmVjdGlvbi5jcHAgKi8sCi0JCQkJNUUxNkEy
RTMxQkZBNjRGQjAwMjlBMjFFIC8qIE1lZGlhRW5kcG9pbnRQZWVyQ29ubmVjdGlvbi5oICovLAot
CQkJCTVFNEVBQjAyMUQwNzE2NEMwMDA2QTE4NCAvKiBNZWRpYUVuZHBvaW50U2Vzc2lvbkRlc2Ny
aXB0aW9uLmNwcCAqLywKLQkJCQk1RTRFQUIwMzFEMDcxNjRDMDAwNkExODQgLyogTWVkaWFFbmRw
b2ludFNlc3Npb25EZXNjcmlwdGlvbi5oICovLAogCQkJCTA3MjIxQjRDMTdDRUMzMjcwMDg0OEU1
MSAvKiBNZWRpYVN0cmVhbS5jcHAgKi8sCiAJCQkJMDcyMjFCNEQxN0NFQzMyNzAwODQ4RTUxIC8q
IE1lZGlhU3RyZWFtLmggKi8sCiAJCQkJMDcyMjFCNEUxN0NFQzMyNzAwODQ4RTUxIC8qIE1lZGlh
U3RyZWFtLmlkbCAqLywKQEAgLTE2NTAxLDggKzE2NDY5LDYgQEAKIAkJCQk1RTJDNDM2NDFCQ0VF
MzcyMDAwMUUyQkMgLyogUlRDVHJhY2tFdmVudC5jcHAgKi8sCiAJCQkJNUUyQzQzNjUxQkNFRTM3
MjAwMDFFMkJDIC8qIFJUQ1RyYWNrRXZlbnQuaCAqLywKIAkJCQk1RTJDNDM2NjFCQ0VFMzcyMDAw
MUUyQkMgLyogUlRDVHJhY2tFdmVudC5pZGwgKi8sCi0JCQkJNUVBM0Q2RTExQzg1OURBQTAwMzAw
QkJCIC8qIFNEUFByb2Nlc3Nvci5jcHAgKi8sCi0JCQkJNUVBM0Q2RTIxQzg1OURBQTAwMzAwQkJC
IC8qIFNEUFByb2Nlc3Nvci5oICovLAogCQkJCTA3MjIxQjhEMTdDRUMzMjcwMDg0OEU1MSAvKiBV
c2VyTWVkaWFDbGllbnQuaCAqLywKIAkJCQkwNzIyMUI4RTE3Q0VDMzI3MDA4NDhFNTEgLyogVXNl
ck1lZGlhQ29udHJvbGxlci5jcHAgKi8sCiAJCQkJMDcyMjFCOEYxN0NFQzMyNzAwODQ4RTUxIC8q
IFVzZXJNZWRpYUNvbnRyb2xsZXIuaCAqLywKQEAgLTE2NTI1LDExICsxNjQ5MSw4IEBACiAJCQkJ
NUVCQjg5MzAxQzc3NzdFMTAwQzY1RDQxIC8qIEljZUNhbmRpZGF0ZS5oICovLAogCQkJCTFCRTVC
RkMxMUQ1MTU3MTUwMDE2NjZEOSAvKiBNZWRpYUNvbnN0cmFpbnRzLmNwcCAqLywKIAkJCQkwNzIy
MUI5OTE3Q0YwQUQ0MDA4NDhFNTEgLyogTWVkaWFDb25zdHJhaW50cy5oICovLAotCQkJCTVFQkI4
OTJBMUM3Nzc3RDAwMEM2NUQ0MSAvKiBNZWRpYUVuZHBvaW50LmNwcCAqLywKLQkJCQk1RUJCODky
QjFDNzc3N0QwMDBDNjVENDEgLyogTWVkaWFFbmRwb2ludC5oICovLAotCQkJCTVFQkI4OTJDMUM3
Nzc3RDAwMEM2NUQ0MSAvKiBNZWRpYUVuZHBvaW50Q29uZmlndXJhdGlvbi5jcHAgKi8sCi0JCQkJ
NUVCQjg5MkQxQzc3NzdEMDAwQzY1RDQxIC8qIE1lZGlhRW5kcG9pbnRDb25maWd1cmF0aW9uLmgg
Ki8sCi0JCQkJNUVCQjg5MkUxQzc3NzdEMDAwQzY1RDQxIC8qIE1lZGlhRW5kcG9pbnRTZXNzaW9u
Q29uZmlndXJhdGlvbi5oICovLAorCQkJCTQxQjI4QjEzMUY4NTAxQTQwMEZCNTJBQyAvKiBNZWRp
YUVuZHBvaW50Q29uZmlndXJhdGlvbi5jcHAgKi8sCisJCQkJNDFCMjhCMTIxRjg1MDFBMzAwRkI1
MkFDIC8qIE1lZGlhRW5kcG9pbnRDb25maWd1cmF0aW9uLmggKi8sCiAJCQkJNUVCQjg5MkYxQzc3
NzdEMDAwQzY1RDQxIC8qIE1lZGlhUGF5bG9hZC5oICovLAogCQkJCTA3MEY1NDk3MTdGMTJGNkIw
MDE2OUUwNCAvKiBNZWRpYVN0cmVhbUNvbnN0cmFpbnRzVmFsaWRhdGlvbkNsaWVudC5oICovLAog
CQkJCTA3MTE1ODhGMTdERjYzMzcwMEVERkUyQiAvKiBNZWRpYVN0cmVhbVByaXZhdGUuY3BwICov
LApAQCAtMTY1NjcsOCArMTY1MzAsNiBAQAogCQkJCTA3MjIxQkFEMTdDRjBBRDQwMDg0OEU1MSAv
KiBSVENTZXNzaW9uRGVzY3JpcHRpb25SZXF1ZXN0LmggKi8sCiAJCQkJMzEzNTkxMDUxRTdEREM2
MDAwRjMwNjMwIC8qIFJUQ1NpZ25hbGluZ1N0YXRlLmggKi8sCiAJCQkJMDcyMjFCQjAxN0NGMEFE
NDAwODQ4RTUxIC8qIFJUQ1ZvaWRSZXF1ZXN0LmggKi8sCi0JCQkJNUVBM0Q2RTUxQzg1QTlDMzAw
MzAwQkJCIC8qIFNEUFByb2Nlc3NvclNjcmlwdFJlc291cmNlLmNwcCAqLywKLQkJCQk1RUEzRDZF
NjFDODVBOUMzMDAzMDBCQkIgLyogU0RQUHJvY2Vzc29yU2NyaXB0UmVzb3VyY2UuaCAqLywKIAkJ
CQkwNzBFODFEMDFCRjI3NjU2MDAxRkRBNDggLyogVmlkZW9UcmFja1ByaXZhdGVNZWRpYVN0cmVh
bS5oICovLAogCQkJCTQxQjJBNjI1MUVGMUJGNjAwMDJCOUQ3QSAvKiBXZWJBdWRpb1NvdXJjZVBy
b3ZpZGVyLmggKi8sCiAJCQkpOwpAQCAtMTkyNDUsOCArMTkyMDYsNiBAQAogCQkJCTA3N0I2NDE1
MUI5NUY3MDMwMDNFOUFENSAvKiBNZWRpYVBsYXliYWNrVGFyZ2V0TW9jay5oICovLAogCQkJCTA3
N0I2NDEwMUI5NEYxMkUwMDNFOUFENSAvKiBNZWRpYVBsYXliYWNrVGFyZ2V0UGlja2VyTW9jay5j
cHAgKi8sCiAJCQkJMDc3QjY0MTExQjk0RjEyRTAwM0U5QUQ1IC8qIE1lZGlhUGxheWJhY2tUYXJn
ZXRQaWNrZXJNb2NrLmggKi8sCi0JCQkJNUVBM0Q2REQxQzg1OUQ1MzAwMzAwQkJCIC8qIE1vY2tN
ZWRpYUVuZHBvaW50LmNwcCAqLywKLQkJCQk1RUEzRDZERTFDODU5RDUzMDAzMDBCQkIgLyogTW9j
a01lZGlhRW5kcG9pbnQuaCAqLywKIAkJCQkwN0Q2QTRGMTFCRUQ1Rjg4MDAxNzQxNDYgLyogTW9j
a1JlYWx0aW1lQXVkaW9Tb3VyY2UuY3BwICovLAogCQkJCTA3RDZBNEYyMUJFRDVGODgwMDE3NDE0
NiAvKiBNb2NrUmVhbHRpbWVBdWRpb1NvdXJjZS5oICovLAogCQkJCTA3RDZBNEVEMUJFQ0YyRDIw
MDE3NDE0NiAvKiBNb2NrUmVhbHRpbWVNZWRpYVNvdXJjZS5jcHAgKi8sCkBAIC0xOTQwMyw3ICsx
OTM2Miw2IEBACiAJCQkJNUUyQzQzNzYxQkNGOUEwQjAwMDFFMkJDIC8qIFJUQ1BlZXJDb25uZWN0
aW9uQnVpbHRpbnMuaCAqLywKIAkJCQk1RTJDNDM3ODFCQ0Y5QTBCMDAwMUUyQkMgLyogUlRDUGVl
ckNvbm5lY3Rpb25JbnRlcm5hbHNCdWlsdGlucy5jcHAgKi8sCiAJCQkJNUUyQzQzNzkxQkNGOUEw
QjAwMDFFMkJDIC8qIFJUQ1BlZXJDb25uZWN0aW9uSW50ZXJuYWxzQnVpbHRpbnMuaCAqLywKLQkJ
CQlDREFCNkQzMDE3QzkyNTk1MDBDNjBCMzUgLyogU0RQUHJvY2Vzc29yU2NyaXB0c0RhdGEuY3Bw
ICovLAogCQkJCTQzQjg1RUQyMThDQkVDNTIwMEUzMUFGNCAvKiBTZWxlY3RvclBzZXVkb0NsYXNz
QW5kQ29tcGF0aWJpbGl0eUVsZW1lbnRNYXAuY3BwICovLAogCQkJCTQzQjg1RUQzMThDQkVDNTIw
MEUzMUFGNCAvKiBTZWxlY3RvclBzZXVkb0NsYXNzQW5kQ29tcGF0aWJpbGl0eUVsZW1lbnRNYXAu
Z3BlcmYgKi8sCiAJCQkJMjZBQTBGOUQxOEQyQTE4QjAwNDE5MzgxIC8qIFNlbGVjdG9yUHNldWRv
RWxlbWVudFR5cGVNYXAuY3BwICovLApAQCAtMjYxMjksNiArMjYwODcsMTIgQEAKIAkJCWNoaWxk
cmVuID0gKAogCQkJCUNFMjYxNkE0MTg3RTY1QzEwMDc5NTVGMyAvKiBpb3MgKi8sCiAJCQkJMkQ1
MDM2NjYxQkNERERDNDAwRTIwQkIzIC8qIG1hYyAqLywKKwkJCQk3Q0QwRTJCNjFGODBBNDgyMDAx
NkE0Q0UgLyogQWJvcnRDb250cm9sbGVyLmNwcCAqLywKKwkJCQk3Q0QwRTJCNTFGODBBNDgyMDAx
NkE0Q0UgLyogQWJvcnRDb250cm9sbGVyLmggKi8sCisJCQkJN0NEMEUyQjcxRjgwQTQ4MjAwMTZB
NENFIC8qIEFib3J0Q29udHJvbGxlci5pZGwgKi8sCisJCQkJN0NEMEUyQkQxRjgwQTU2RTAwMTZB
NENFIC8qIEFib3J0U2lnbmFsLmNwcCAqLywKKwkJCQk3Q0QwRTJCQzFGODBBNTZFMDAxNkE0Q0Ug
LyogQWJvcnRTaWduYWwuaCAqLywKKwkJCQk3Q0QwRTJCRTFGODBBNTZFMDAxNkE0Q0UgLyogQWJv
cnRTaWduYWwuaWRsICovLAogCQkJCTdDNTIyMjk3MUUxREFFMTYwMDJDQjhGNyAvKiBBY3RpdmVE
T01DYWxsYmFjay5jcHAgKi8sCiAJCQkJN0M1MjIyOTgxRTFEQUUxNjAwMkNCOEY3IC8qIEFjdGl2
ZURPTUNhbGxiYWNrLmggKi8sCiAJCQkJN0NEMEJBMDIxQjhGNzlDOTAwNUNFQkJFIC8qIEFjdGl2
ZURPTUNhbGxiYWNrTWljcm90YXNrLmNwcCAqLywKQEAgLTI2MTM2LDEyICsyNjEwMCw2IEBACiAJ
CQkJRTFDNERFNkQwRUE3NUM2NTAwMjNDQ0Q2IC8qIEFjdGl2ZURPTU9iamVjdC5jcHAgKi8sCiAJ
CQkJRTFDNERFNjgwRUE3NUMxRTAwMjNDQ0Q2IC8qIEFjdGl2ZURPTU9iamVjdC5oICovLAogCQkJ
CTgzQkI1Qzg3MUQ1RDZGM0EwMDVBNzFGNCAvKiBBbGxEZXNjZW5kYW50c0NvbGxlY3Rpb24uaCAq
LywKLQkJCQk3Q0QwRTJCNTFGODBBNDgyMDAxNkE0Q0UgLyogQWJvcnRDb250cm9sbGVyLmggKi8s
Ci0JCQkJN0NEMEUyQjYxRjgwQTQ4MjAwMTZBNENFIC8qIEFib3J0Q29udHJvbGxlci5jcHAgKi8s
Ci0JCQkJN0NEMEUyQjcxRjgwQTQ4MjAwMTZBNENFIC8qIEFib3J0Q29udHJvbGxlci5pZGwgKi8s
Ci0JCQkJN0NEMEUyQkMxRjgwQTU2RTAwMTZBNENFIC8qIEFib3J0U2lnbmFsLmggKi8sCi0JCQkJ
N0NEMEUyQkQxRjgwQTU2RTAwMTZBNENFIC8qIEFib3J0U2lnbmFsLmNwcCAqLywKLQkJCQk3Q0Qw
RTJCRTFGODBBNTZFMDAxNkE0Q0UgLyogQWJvcnRTaWduYWwuaWRsICovLAogCQkJCTMxOTg0N0ZF
MUExRDgxNjcwMEExMzMxOCAvKiBBbmltYXRpb25FdmVudC5jcHAgKi8sCiAJCQkJMzE5ODQ3RkYx
QTFEODE2NzAwQTEzMzE4IC8qIEFuaW1hdGlvbkV2ZW50LmggKi8sCiAJCQkJMzE5ODQ4MDAxQTFE
ODE2NzAwQTEzMzE4IC8qIEFuaW1hdGlvbkV2ZW50LmlkbCAqLywKQEAgLTI3MDM2LDYgKzI2OTk0
LDggQEAKIAkJCWlzYSA9IFBCWEhlYWRlcnNCdWlsZFBoYXNlOwogCQkJYnVpbGRBY3Rpb25NYXNr
ID0gMjE0NzQ4MzY0NzsKIAkJCWZpbGVzID0gKAorCQkJCTdDRDBFMkI4MUY4MEE0ODIwMDE2QTRD
RSAvKiBBYm9ydENvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTdDRDBFMkJGMUY4MEE1
NkUwMDE2QTRDRSAvKiBBYm9ydFNpZ25hbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRjQ4MjIzMTMx
RTM4NkUyNDAwNjZGQzc5IC8qIEFic3RyYWN0UGFzdGVib2FyZC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJNDFFMUIxRDEwRkY1OTg2OTAwNTc2QjNCIC8qIEFic3RyYWN0V29ya2VyLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkyOUE4MTIyRTBGQkI5QzFEMDA1MTAyOTMgLyogQWNjZXNzaWJpbGl0eUFSSUFH
cmlkQ2VsbC5oIGluIEhlYWRlcnMgKi8sCkBAIC0yODMzMyw2ICsyODI5Myw4IEBACiAJCQkJMkQw
QjRBQUIxOERBMUNDRDAwNDM0REUxIC8qIElPU3VyZmFjZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MUMyMUU1N0QxODNFRDFGRjAwMUMyODlEIC8qIElPU3VyZmFjZVBvb2wuaCBpbiBIZWFkZXJzICov
LAogCQkJCTA3QUM0NzAyMTk1MjEwMjEwMEVFOTcyMyAvKiBJU09WVFRDdWUuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTdDMzBEOTg0MUY4MTVBRUMwMDI2ODM1NiAvKiBKU0Fib3J0Q29udHJvbGxlci5o
IGluIEhlYWRlcnMgKi8sCisJCQkJN0MzMEQ5ODYxRjgxNUFFQzAwMjY4MzU2IC8qIEpTQWJvcnRT
aWduYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTQxOEY4ODA1MEZGOTU3QUYwMDgwRjA0NSAvKiBK
U0Fic3RyYWN0V29ya2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQk1NzA0NDA1QTFFNTM5MzYyMDAz
NTY2MDEgLyogSlNBZXNDYmNDZmJQYXJhbXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTU3RTFFNUFE
MUU4REQwOUIwMEVFMzdDOSAvKiBKU0Flc0N0clBhcmFtcy5oIGluIEhlYWRlcnMgKi8sCkBAIC0y
OTI1NiwxMSArMjkyMTgsNyBAQAogCQkJCTA3RkU5OUREMTg4MDdBN0QwMDI1NjY0OCAvKiBNZWRp
YUVsZW1lbnRTZXNzaW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkyRDlCRjcwNjFEQkZCQjI0MDA3
QTdEOTkgLyogTWVkaWFFbmNyeXB0ZWRFdmVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkQ5QkY3
MDgxREJGQkIyNDAwN0E3RDk5IC8qIE1lZGlhRW5jcnlwdGVkRXZlbnRJbml0LmggaW4gSGVhZGVy
cyAqLywKLQkJCQk1RUJCODkzNTFDNzc3ODI5MDBDNjVENDEgLyogTWVkaWFFbmRwb2ludC5oIGlu
IEhlYWRlcnMgKi8sCi0JCQkJNUVCQjg5MzcxQzc3NzgyOTAwQzY1RDQxIC8qIE1lZGlhRW5kcG9p
bnRDb25maWd1cmF0aW9uLmggaW4gSGVhZGVycyAqLywKLQkJCQk1RTE2QTJFNDFCRkE2NTBCMDAy
OUEyMUUgLyogTWVkaWFFbmRwb2ludFBlZXJDb25uZWN0aW9uLmggaW4gSGVhZGVycyAqLywKLQkJ
CQk1RUJCODkzMjFDNzc3ODIzMDBDNjVENDEgLyogTWVkaWFFbmRwb2ludFNlc3Npb25Db25maWd1
cmF0aW9uLmggaW4gSGVhZGVycyAqLywKLQkJCQk1RTRFQUIwNDFEMDcxNjZBMDAwNkExODQgLyog
TWVkaWFFbmRwb2ludFNlc3Npb25EZXNjcmlwdGlvbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJNDFC
MjhCMTUxRjg1MDFEMzAwRkI1MkFDIC8qIE1lZGlhRW5kcG9pbnRDb25maWd1cmF0aW9uLmggaW4g
SGVhZGVycyAqLywKIAkJCQlFNDQ2MTNBRDBDRDYzMzEwMDBGQURBNzUgLyogTWVkaWFFcnJvci5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJNEUxOTU5MjIwQTM5REFCQTAwMjIwRkU1IC8qIE1lZGlhRmVh
dHVyZU5hbWVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwN0E2RDFFQzE0OTExMzc3MDAwNTFEMEMg
LyogTWVkaWFGcmFnbWVudFVSSVBhcnNlci5oIGluIEhlYWRlcnMgKi8sCkBAIC0yOTM0NSwxMSAr
MjkzMDMsOSBAQAogCQkJCTUyRjEwODY2MTYyQjZEQTgwMDlBQzgxRSAvKiBNaXhlZENvbnRlbnRD
aGVja2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQlDREYyQjAxMTE4MjA1NDA2MDBGMkI0MjQgLyog
TW9ja0JveC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQ0RGNEI3MjQxRTAzQkY4MTAwRTIzNUEyIC8q
IE1vY2tDRE1GYWN0b3J5LmggaW4gSGVhZGVycyAqLywKLQkJCQk3QzMwRDk4NDFGODE1QUVDMDAy
NjgzNTYgLyogSlNBYm9ydENvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUNERjRCNzIw
MUUwM0JGNkYwMEUyMzVBMiAvKiBNb2NrQ0RNRmFjdG9yeS5pZGwgaW4gSGVhZGVycyAqLywKIAkJ
CQk1MTA1OEFFMDFENjdDMjI5MDA5QTUzOEMgLyogTW9ja0dhbWVwYWQuaCBpbiBIZWFkZXJzICov
LAogCQkJCTUxMDU4QUUyMUQ2N0MyMjkwMDlBNTM4QyAvKiBNb2NrR2FtZXBhZFByb3ZpZGVyLmgg
aW4gSGVhZGVycyAqLywKLQkJCQk1RUEzRDZERjFDODU5RDdGMDAzMDBCQkIgLyogTW9ja01lZGlh
RW5kcG9pbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUNERjJCMDEzMTgyMDU0MDYwMEYyQjQyNCAv
KiBNb2NrTWVkaWFQbGF5ZXJNZWRpYVNvdXJjZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQ0RGMkIw
MTUxODIwNTQwNjAwRjJCNDI0IC8qIE1vY2tNZWRpYVNvdXJjZVByaXZhdGUuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTA3RDZBNEY0MUJFRDVGODgwMDE3NDE0NiAvKiBNb2NrUmVhbHRpbWVBdWRpb1Nv
dXJjZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0yOTk4NCw4ICsyOTk0MCw2IEBACiAJCQkJODNDNTc5
NUQxREE1QzMwMTAwNkZBQ0E4IC8qIFNjcm9sbFRvT3B0aW9ucy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJOTNDMDlDODYwQjA2NTdBQTAwNUFCRDREIC8qIFNjcm9sbFR5cGVzLmggaW4gSGVhZGVycyAq
LywKIAkJCQlCQzZENkUyNjA5QUY5NDM1MDBGNTk3NTkgLyogU2Nyb2xsVmlldy5oIGluIEhlYWRl
cnMgKi8sCi0JCQkJNUVBM0Q2RTQxQzg1OURDMTAwMzAwQkJCIC8qIFNEUFByb2Nlc3Nvci5oIGlu
IEhlYWRlcnMgKi8sCi0JCQkJNUVBM0Q2RTgxQzg1QTlEQjAwMzAwQkJCIC8qIFNEUFByb2Nlc3Nv
clNjcmlwdFJlc291cmNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlGNTVCM0REMjEyNTFGMTJEMDAz
RUYyNjkgLyogU2VhcmNoSW5wdXRUeXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBQjcxNzA4OTBC
MzExODA4MDAxNzEyM0UgLyogU2VhcmNoUG9wdXBNZW51LmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RTcwNThGNDFCQzVDRURBMDA0NUE1MDcgLyogU2VhcmNoUG9wdXBNZW51Q29jb2EuaCBpbiBIZWFk
ZXJzICovLApAQCAtMzAyMzcsNyArMzAxOTEsNiBAQAogCQkJCUIyMjI3OTk1MEQwMEJGMjIwMDcx
Qjc4MiAvKiBTVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QjIyMjc5OTgwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR0FuaW1hdGlvbkVsZW1lbnQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTQzOUQzMzQ1MTNBNjkxMUMwMEMyMEY0RiAvKiBTVkdBbmltYXRvckZhY3Rv
cnkuaCBpbiBIZWFkZXJzICovLAotCQkJCTdDMzBEOTg2MUY4MTVBRUMwMDI2ODM1NiAvKiBKU0Fi
b3J0U2lnbmFsLmggaW4gSGVhZGVycyAqLywKIAkJCQkwOEZCM0Y4NDEzQkM3NTRDMDA5OUZDMTgg
LyogU1ZHQXR0cmlidXRlVG9Qcm9wZXJ0eU1hcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjIyMjc5
OUMwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR0NpcmNsZUVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAog
CQkJCUIyMjI3OTlGMEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdDbGlwUGF0aEVsZW1lbnQuaCBpbiBI
ZWFkZXJzICovLApAQCAtMzAyODEsNyArMzAyMzQsNiBAQAogCQkJCUIyMjI3QTA2MEQwMEJGMjIw
MDcxQjc4MiAvKiBTVkdGRVRpbGVFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjIyN0Ew
OTBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHRkVUdXJidWxlbmNlRWxlbWVudC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJODQ1RTcyRkMwRkQyNjIzOTAwQTg3RDc5IC8qIFNWR0ZpbHRlci5oIGluIEhlYWRl
cnMgKi8sCi0JCQkJN0NEMEUyQkYxRjgwQTU2RTAwMTZBNENFIC8qIEFib3J0U2lnbmFsLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwODFFQkYzQjBGRDM0RjQxMDBEQTc1NTkgLyogU1ZHRmlsdGVyQnVp
bGRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjIyMjdBMEMwRDAwQkYyMjAwNzFCNzgyIC8qIFNW
R0ZpbHRlckVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyMjI3QTBGMEQwMEJGMjIwMDcx
Qjc4MiAvKiBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMuaCBpbiBIZWFkZXJz
ICovLApAQCAtMzA3MzYsNyArMzA2ODgsNiBAQAogCQkJCTc3QTE3QTc4MTJGMjg2NDIwMDRFMDJG
NiAvKiBXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMTZC
REI4QzFFNkUxNTMwMDBERTBENUEgLyogV2ViR1BVTGF5ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUE1RTIxMjNDMUU0OTI0QTQwMENFMTA0NCAvKiBXZWJIZWFwQWdlbnQuaCBpbiBIZWFkZXJzICov
LAotCQkJCTdDRDBFMkI4MUY4MEE0ODIwMDE2QTRDRSAvKiBBYm9ydENvbnRyb2xsZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUE1ODQwRTI1MTg3QjhBQzIwMDg0M0IxMCAvKiBXZWJJbmplY3RlZFNj
cmlwdEhvc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1ODRGRTMwMTg2NENCODQwMDg0M0IxMCAv
KiBXZWJJbmplY3RlZFNjcmlwdE1hbmFnZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUY0ODIyMzEx
MUUzODY5QjgwMDY2RkM3OSAvKiBXZWJJdGVtUHJvdmlkZXJQYXN0ZWJvYXJkLmggaW4gSGVhZGVy
cyAqLywKQEAgLTMxMjI2LDYgKzMxMTc3LDggQEAKIAkJCWlzYSA9IFBCWFNvdXJjZXNCdWlsZFBo
YXNlOwogCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKIAkJCWZpbGVzID0gKAorCQkJ
CTdDRDBFMkI5MUY4MEE0ODIwMDE2QTRDRSAvKiBBYm9ydENvbnRyb2xsZXIuY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJN0NEMEUyQzAxRjgwQTU2RTAwMTZBNENFIC8qIEFib3J0U2lnbmFsLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTQxRTFCMUQwMEZGNTk4NjkwMDU3NkIzQiAvKiBBYnN0cmFjdFdv
cmtlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzN0Y1N0FCOTFBNTA3MjY5MDA4NzZGOTggLyog
QWNjZXNzaWJpbGl0eUFSSUFHcmlkLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTM3RjU3QUJBMUE1
MDcyNkYwMDg3NkY5OCAvKiBBY2Nlc3NpYmlsaXR5QVJJQUdyaWRDZWxsLmNwcCBpbiBTb3VyY2Vz
ICovLApAQCAtMzE1MDMsNyArMzE0NTYsNiBAQAogCQkJCUNFMjg0OTg5MUNBMzYxNDYwMEI0QTU3
RiAvKiBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVOYW1lcy5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlDRTc5OUZBNzFDNkE1MDU3MDA5N0I1MTggLyogQ29udGVudFNlY3VyaXR5UG9saWN5
TWVkaWFMaXN0RGlyZWN0aXZlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUNFNkRBREY5MUM1OTFF
NkEwMDNGNkE4OCAvKiBDb250ZW50U2VjdXJpdHlQb2xpY3lSZXNwb25zZUhlYWRlcnMuY3BwIGlu
IFNvdXJjZXMgKi8sCi0JCQkJN0MzMEQ5ODUxRjgxNUFFQzAwMjY4MzU2IC8qIEpTQWJvcnRTaWdu
YWwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQ0U3OTlGOUYxQzZBNEMxNjAwOTdCNTE4IC8qIENv
bnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDRTc5OUY5
NzFDNkE0NkJDMDA5N0I1MTggLyogQ29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlDRTc5OUZBQjFDNkE1MDY2MDA5N0I1MTggLyogQ29udGVudFNl
Y3VyaXR5UG9saWN5U291cmNlTGlzdERpcmVjdGl2ZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTMx
NTc1LDcgKzMxNTI3LDYgQEAKIAkJCQlFMTIzM0YxMDE4NUE0MTMwMDA4REZBRjUgLyogQ3J5cHRv
QWxnb3JpdGhtUlNBRVNfUEtDUzFfdjFfNU1hYy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFMUJE
MzMxOTE4MkQ4REREMDBDMDVEOUYgLyogQ3J5cHRvQWxnb3JpdGhtUlNBU1NBX1BLQ1MxX3YxXzUu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTFDMjY2RDgxODMxN0FCNDAwM0Y4QjMzIC8qIENyeXB0
b0FsZ29yaXRobVJTQVNTQV9QS0NTMV92MV81TWFjLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTdD
MzBEOTgzMUY4MTVBRUMwMDI2ODM1NiAvKiBKU0Fib3J0Q29udHJvbGxlci5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlFMTI1RjgyQjE4MjJDRkVDMDBEODRDRDkgLyogQ3J5cHRvQWxnb3JpdGhtU0hB
MS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFMTlBQzNFRTE4MjREQzc5MDAzNDk0MjYgLyogQ3J5
cHRvQWxnb3JpdGhtU0hBMjI0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUxOUFDM0YwMTgyNERD
NzkwMDM0OTQyNiAvKiBDcnlwdG9BbGdvcml0aG1TSEEyNTYuY3BwIGluIFNvdXJjZXMgKi8sCkBA
IC0zMjM1Niw2ICszMjMwNyw4IEBACiAJCQkJMUMyMUU1N0MxODNFRDFGRjAwMUMyODlEIC8qIElP
U3VyZmFjZVBvb2wuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQUQ5RkY2RTExOTA4MzkxRDAwM0I2
MUUwIC8qIElPU3VyZmFjZVBvb2xDb2NvYS5tbSBpbiBTb3VyY2VzICovLAogCQkJCTA3QUM0NzAx
MTk1MjEwMjEwMEVFOTcyMyAvKiBJU09WVFRDdWUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJN0Mz
MEQ5ODMxRjgxNUFFQzAwMjY4MzU2IC8qIEpTQWJvcnRDb250cm9sbGVyLmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCTdDMzBEOTg1MUY4MTVBRUMwMDI2ODM1NiAvKiBKU0Fib3J0U2lnbmFsLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTQxOEY4ODA0MEZGOTU3QUUwMDgwRjA0NSAvKiBKU0Fic3RyYWN0
V29ya2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTU3MDQ0MDVDMUU1MzkzNzkwMDM1NjYwMSAv
KiBKU0Flc0NiY0NmYlBhcmFtcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1N0UxRTVBQzFFOERE
MDlCMDBFRTM3QzkgLyogSlNBZXNDdHJQYXJhbXMuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0zMjQz
NCw3ICszMjM4Nyw2IEBACiAJCQkJQTU4NEZFM0IxODY0RTJEODAwODQzQjEwIC8qIEpTQ29tbWFu
ZExpbmVBUElIb3N0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkzRjlCNkUwMEJBMEZCNzIwMDg1
NDA2NCAvKiBKU0NvbW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNzlBQzkyMTgxMDk5NDVD
ODAwMjEyNjZFIC8qIEpTQ29tcG9zaXRpb25FdmVudC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk3
Q0QwRTJDMDFGODBBNTZFMDAxNkE0Q0UgLyogQWJvcnRTaWduYWwuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJRkRBMTVFQkQxMkIwM0YwQjAwM0E1ODNBIC8qIEpTQ29udm9sdmVyTm9kZS5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlGRTZGRDQ4RDBGNjc2RTkzMDAwOTI4NzMgLyogSlNDb29yZGluYXRl
cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNERDRjNCMjFCNkJFMjA4MDA2MkQ0QzIgLyogSlND
b3VudFF1ZXVpbmdTdHJhdGVneS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTMyNTI3LDcgKzMyNDc5
LDYgQEAKIAkJCQk4MzZBQ0VEMjFFQ0FBQjE5MDA0QkQwMTIgLyogSlNET01NYXRyaXguY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJN0NCQkJDQ0IxRjU2MTgwRDAwNUVGQUFDIC8qIEpTRE9NTWF0cml4
MkRJbml0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTgzNTY1N0M3MUVDQUIxMDcwMENERTcyRCAv
KiBKU0RPTU1hdHJpeEluaXQuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJN0NEMEUyQjkxRjgwQTQ4
MjAwMTZBNENFIC8qIEFib3J0Q29udHJvbGxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4MzZB
Q0VENTFFQ0FBQjE5MDA0QkQwMTIgLyogSlNET01NYXRyaXhSZWFkT25seS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlBOUQyNDgwNjBENzU3RTdEMDBGREY5NTkgLyogSlNET01NaW1lVHlwZS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlBOUQyNDgwODBENzU3RTdEMDBGREY5NTkgLyogSlNET01NaW1l
VHlwZUFycmF5LmNwcCBpbiBTb3VyY2VzICovLApAQCAtMzMzMzMsMTAgKzMzMjg0LDcgQEAKIAkJ
CQlGRDZGMjUyQzEzRjVFRjBFMDA2NTE2NUYgLyogTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2Rl
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTA3RkU5OURDMTg4MDdBN0QwMDI1NjY0OCAvKiBNZWRp
YUVsZW1lbnRTZXNzaW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTJEOUJGNzA1MURCRkJCMjQw
MDdBN0Q5OSAvKiBNZWRpYUVuY3J5cHRlZEV2ZW50LmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTVF
QkI4OTM0MUM3Nzc4MjkwMEM2NUQ0MSAvKiBNZWRpYUVuZHBvaW50LmNwcCBpbiBTb3VyY2VzICov
LAotCQkJCTVFQkI4OTM2MUM3Nzc4MjkwMEM2NUQ0MSAvKiBNZWRpYUVuZHBvaW50Q29uZmlndXJh
dGlvbi5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk1RTE2QTJFNTFCRkE2NTBGMDAyOUEyMUUgLyog
TWVkaWFFbmRwb2ludFBlZXJDb25uZWN0aW9uLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTVFNEVB
QjA1MUQwNzE2NkUwMDA2QTE4NCAvKiBNZWRpYUVuZHBvaW50U2Vzc2lvbkRlc2NyaXB0aW9uLmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCTQxQjI4QjE0MUY4NTAxQTYwMEZCNTJBQyAvKiBNZWRpYUVu
ZHBvaW50Q29uZmlndXJhdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0RTE5NTkyMTBBMzlE
QUJBMDAyMjBGRTUgLyogTWVkaWFGZWF0dXJlTmFtZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MDdBNkQxRUIxNDkxMTM3NzAwMDUxRDBDIC8qIE1lZGlhRnJhZ21lbnRVUklQYXJzZXIuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMkQ5QkY3NDcxREJGREM0OTAwN0E3RDk5IC8qIE1lZGlhS2V5TWVz
c2FnZUV2ZW50LmNwcCBpbiBTb3VyY2VzICovLApAQCAtMzM0MTEsNyArMzMzNTksNiBAQAogCQkJ
CUNERjJCMDEwMTgyMDU0MDYwMEYyQjQyNCAvKiBNb2NrQm94LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTUxMDU4QURGMUQ2N0MyMjkwMDlBNTM4QyAvKiBNb2NrR2FtZXBhZC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQk1MTA1OEFFMTFENjdDMjI5MDA5QTUzOEMgLyogTW9ja0dhbWVwYWRQcm92aWRl
ci5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk1RUEzRDZFMDFDODU5RDg0MDAzMDBCQkIgLyogTW9j
a01lZGlhRW5kcG9pbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQ0RGMkIwMTIxODIwNTQwNjAw
RjJCNDI0IC8qIE1vY2tNZWRpYVBsYXllck1lZGlhU291cmNlLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUNERjJCMDE0MTgyMDU0MDYwMEYyQjQyNCAvKiBNb2NrTWVkaWFTb3VyY2VQcml2YXRlLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTA3RDZBNEYzMUJFRDVGODgwMDE3NDE0NiAvKiBNb2NrUmVh
bHRpbWVBdWRpb1NvdXJjZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTMzOTA2LDkgKzMzODUzLDYg
QEAKIAkJCQlCQzI0NDFDNDBFOEI2NUQwMDA1NTMyMEYgLyogU2Nyb2xsVmlldy5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlFNDUzOTA0NTBFQUZENjM3MDAzNjk1QzggLyogU2Nyb2xsVmlld0lPUy5t
bSBpbiBTb3VyY2VzICovLAogCQkJCTkzNTM2NzZCMDlBRUQ4OEIwMEQzNUNENiAvKiBTY3JvbGxW
aWV3TWFjLm1tIGluIFNvdXJjZXMgKi8sCi0JCQkJNUVBM0Q2RTMxQzg1OURDMTAwMzAwQkJCIC8q
IFNEUFByb2Nlc3Nvci5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk1RUEzRDZFNzFDODVBOURCMDAz
MDBCQkIgLyogU0RQUHJvY2Vzc29yU2NyaXB0UmVzb3VyY2UuY3BwIGluIFNvdXJjZXMgKi8sCi0J
CQkJQ0RBQjZEMzIxN0M5MjU5NTAwQzYwQjM1IC8qIFNEUFByb2Nlc3NvclNjcmlwdHNEYXRhLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUY1NUIzREQxMTI1MUYxMkQwMDNFRjI2OSAvKiBTZWFyY2hJ
bnB1dFR5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEU3MDU4RUUxQkM1QkMxOTAwNDVBNTA3
IC8qIFNlYXJjaFBvcHVwTWVudUNvY29hLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJOTc2RjM2RUEx
NDY4NjIyNTAwNUU5M0I0IC8qIFNlY3VyaXR5Q29udGV4dC5jcHAgaW4gU291cmNlcyAqLywKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0dTdHJlYW1lci5jbWFrZSBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL0dTdHJlYW1lci5jbWFrZQppbmRleCA5OWNmNWZmYTIwNzM3NmNi
NWFiOWVjZGRhZmI2Y2E0N2FiMjAzYTQwLi43ZTIyNGQ3NzQ3NTQ0YWQzN2QzODhkN2M3NGI5ZjZl
NjI1MDhkODBmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9HU3RyZWFtZXIu
Y21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vR1N0cmVhbWVyLmNtYWtlCkBAIC0x
LDI2ICsxLDMgQEAKLWxpc3QoQVBQRU5EIFdlYkNvcmVfSU5DTFVERV9ESVJFQ1RPUklFUwotICAg
ICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9vcGVud2VicnRjIgotKQotCi1p
ZiAoRU5BQkxFX01FRElBX1NUUkVBTSkKLSAgICBsaXN0KEFQUEVORCBXZWJDb3JlX1NZU1RFTV9J
TkNMVURFX0RJUkVDVE9SSUVTCi0gICAgICAgICR7T1BFTldFQlJUQ19JTkNMVURFX0RJUlN9Ci0g
ICAgKQotCi0gICAgbGlzdChBUFBFTkQgV2ViQ29yZV9MSUJSQVJJRVMKLSAgICAgICAgJHtPUEVO
V0VCUlRDX0xJQlJBUklFU30KLSAgICApCi0KLSAgICBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJD
RVMKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lck93ci5jcHAKLQotICAgICAgICBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9vcGVud2Vi
cnRjL01lZGlhRW5kcG9pbnRPd3IuY3BwCi0gICAgICAgIHBsYXRmb3JtL21lZGlhc3RyZWFtL29w
ZW53ZWJydGMvT3BlbldlYlJUQ1V0aWxpdGllcy5jcHAKLSAgICAgICAgcGxhdGZvcm0vbWVkaWFz
dHJlYW0vb3BlbndlYnJ0Yy9SZWFsdGltZU1lZGlhU291cmNlT3dyLmNwcAotICAgICAgICBwbGF0
Zm9ybS9tZWRpYXN0cmVhbS9vcGVud2VicnRjL1JlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJPd3Iu
Y3BwCi0gICAgKQotZW5kaWYgKCkKLQogaWYgKEVOQUJMRV9WSURFTyBPUiBFTkFCTEVfV0VCX0FV
RElPKQogICAgIGxpc3QoQVBQRU5EIFdlYkNvcmVfSU5DTFVERV9ESVJFQ1RPUklFUwogICAgICAg
ICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyIgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3BwCmluZGV4IDQ4Nzcx
NjBjZmFhYjNhZWMyNjljOWZiY2Y2YzQ4NmZmMjE3YTIyYTAuLmYwOTNkNDUxYjI1NThhNWE5MWFh
ODhkMTEzNTk2NDc4NDQxNzg4NzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL01lZGlhUGxheWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9NZWRpYVBsYXllci5jcHAKQEAgLTUzLDkgKzUzLDYgQEAKIAogI2lmIFVTRShHU1RS
RUFNRVIpCiAjaW5jbHVkZSAiTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmgiCi0jaWYgRU5B
QkxFKE1FRElBX1NUUkVBTSkgJiYgVVNFKE9QRU5XRUJSVEMpCi0jaW5jbHVkZSAiTWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyT3dyLmgiCi0jZW5kaWYKICNkZWZpbmUgUGxhdGZvcm1NZWRpYUVu
Z2luZUNsYXNzTmFtZSBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIKICNpZiBFTkFCTEUoVklE
RU8pICYmIEVOQUJMRShNRURJQV9TT1VSQ0UpICYmIEVOQUJMRShWSURFT19UUkFDSykKICNpbmNs
dWRlICJNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0UuaCIKQEAgLTI2OCwxMSArMjY1LDYg
QEAgc3RhdGljIHZvaWQgYnVpbGRNZWRpYUVuZ2luZXNWZWN0b3IoKQogICAgICAgICBQbGF0Zm9y
bU1lZGlhRW5naW5lQ2xhc3NOYW1lOjpyZWdpc3Rlck1lZGlhRW5naW5lKGFkZE1lZGlhRW5naW5l
KTsKICNlbmRpZgogCi0jaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkgJiYgVVNFKEdTVFJFQU1FUikg
JiYgVVNFKE9QRU5XRUJSVEMpCi0gICAgaWYgKFNldHRpbmdzOjppc0dTdHJlYW1lckVuYWJsZWQo
KSkKLSAgICAgICAgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyOjpyZWdpc3Rlck1lZGlh
RW5naW5lKGFkZE1lZGlhRW5naW5lKTsKLSNlbmRpZgotCiAjaWYgRU5BQkxFKFZJREVPKSAmJiBV
U0UoR1NUUkVBTUVSKSAmJiBFTkFCTEUoTUVESUFfU09VUkNFKSAmJiBFTkFCTEUoVklERU9fVFJB
Q0spCiAgICAgaWYgKFNldHRpbmdzOjppc0dTdHJlYW1lckVuYWJsZWQoKSkKICAgICAgICAgTWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjpyZWdpc3Rlck1lZGlhRW5naW5lKGFkZE1lZGlh
RW5naW5lKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dz
dHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5j
cHAKaW5kZXggZjM4ZTYzNzEyOTdhNDk0ZWQ3YWJjMjIwNGMxYjJhYTFkM2Q0YmYxYi4uODQ3OTRm
NGM1YmM5MGNlYTk2ODcyYjBjOGYxMmMyZTFjNGJiYTJiMiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVy
L01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5jcHAKQEAgLTE5MzEsNyArMTkzMSw2IEBAIE1l
ZGlhUGxheWVyOjpTdXBwb3J0c1R5cGUgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpzdXBw
b3J0c1R5cGUoY29uc3QgTWVkaWFFCiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAjZW5kaWYKIAot
ICAgIC8vIE1lZGlhU3RyZWFtIHBsYXliYWNrIGlzIGhhbmRsZWQgYnkgdGhlIE9wZW5XZWJSVEMg
cGxheWVyLgogICAgIGlmIChwYXJhbWV0ZXJzLmlzTWVkaWFTdHJlYW0pCiAgICAgICAgIHJldHVy
biByZXN1bHQ7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3IuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lck93ci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU1MWZmNmNmNzdmZTNj
MTc2OGJhOTA3MTA4NmM5NmUyZWRjOWFhOTUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVh
bWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93ci5jcHAKKysrIC9kZXYvbnVsbApAQCAt
MSw1MDEgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMTIgQ29sbGFib3JhIEx0ZC4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqICBDb3B5cmlnaHQgKEMpIDIwMTQsIDIwMTUgSWdhbGlh
IFMuTC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqICBDb3B5cmlnaHQgKEMpIDIwMTUgTWV0cm9s
b2dpY2FsIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqICBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiAgTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
Ci0gKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0g
KiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0g
KiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5l
cmFsIFB1YmxpYwotICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwg
d3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKLSAq
LwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpbmNsdWRlICJNZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXJPd3IuaCIKLQotI2lmIEVOQUJMRShWSURFTykgJiYgRU5BQkxFKE1FRElBX1NUUkVB
TSkgJiYgVVNFKEdTVFJFQU1FUikgJiYgVVNFKE9QRU5XRUJSVEMpCi0KLSNpbmNsdWRlICJHU3Ry
ZWFtZXJVdGlsaXRpZXMuaCIKLSNpbmNsdWRlICJNZWRpYVBsYXllci5oIgotI2luY2x1ZGUgIk1l
ZGlhU3RyZWFtUHJpdmF0ZS5oIgotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0jaW5jbHVk
ZSAiUmVhbHRpbWVNZWRpYVNvdXJjZU93ci5oIgotI2luY2x1ZGUgIlVSTC5oIgotI2luY2x1ZGUg
PG93ci9vd3IuaD4KLSNpbmNsdWRlIDxvd3Ivb3dyX2dzdF9hdWRpb19yZW5kZXJlci5oPgotI2lu
Y2x1ZGUgPG93ci9vd3JfZ3N0X3ZpZGVvX3JlbmRlcmVyLmg+Ci0jaW5jbHVkZSA8d3RmL05ldmVy
RGVzdHJveWVkLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1HU1RfREVCVUdf
Q0FURUdPUlkod2Via2l0X29wZW53ZWJydGNfZGVidWcpOwotI2RlZmluZSBHU1RfQ0FUX0RFRkFV
TFQgd2Via2l0X29wZW53ZWJydGNfZGVidWcKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1NZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3I6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93
cihNZWRpYVBsYXllciogcGxheWVyKQotICAgIDogTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
QmFzZShwbGF5ZXIpCi17Ci0gICAgaW5pdGlhbGl6ZUdTdHJlYW1lckFuZEdTdHJlYW1lckRlYnVn
Z2luZygpOwotfQotCi1NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3I6On5NZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXJPd3IoKQotewotICAgIEdTVF9UUkFDRSgiRGVzdHJveWluZyIpOwot
Ci0gICAgaWYgKGhhc0F1ZGlvKCkpCi0gICAgICAgIG1fYXVkaW9UcmFjay0+cmVtb3ZlT2JzZXJ2
ZXIoKnRoaXMpOwotICAgIGlmIChoYXNWaWRlbygpKQotICAgICAgICBtX3ZpZGVvVHJhY2stPnJl
bW92ZU9ic2VydmVyKCp0aGlzKTsKLQotICAgIG1fYXVkaW9UcmFja01hcC5jbGVhcigpOwotICAg
IG1fdmlkZW9UcmFja01hcC5jbGVhcigpOwotCi0gICAgc3RvcCgpOwotfQotCi12b2lkIE1lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lck93cjo6cGxheSgpCi17Ci0gICAgR1NUX0RFQlVHKCJQbGF5
Iik7Ci0KLSAgICBpZiAoIW1fc3RyZWFtUHJpdmF0ZSB8fCAhbV9zdHJlYW1Qcml2YXRlLT5hY3Rp
dmUoKSkgewotICAgICAgICBtX3JlYWR5U3RhdGUgPSBNZWRpYVBsYXllcjo6SGF2ZU5vdGhpbmc7
Ci0gICAgICAgIGxvYWRpbmdGYWlsZWQoTWVkaWFQbGF5ZXI6OkVtcHR5KTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIG1fZW5kZWQgPSBmYWxzZTsKLSAgICBtX3BhdXNlZCA9IGZhbHNl
OwotCi0gICAgR1NUX0RFQlVHKCJDb25uZWN0aW5nIHRvIGxpdmUgc3RyZWFtLCBkZXNjcmlwdG9y
OiAlcCIsIG1fc3RyZWFtUHJpdmF0ZS5nZXQoKSk7Ci0KLSAgICBpZiAobV92aWRlb1RyYWNrKQot
ICAgICAgICBtYXliZUhhbmRsZUNoYW5nZU11dGVkU3RhdGUoKm1fdmlkZW9UcmFjay5nZXQoKSk7
Ci0KLSAgICBpZiAobV9hdWRpb1RyYWNrKQotICAgICAgICBtYXliZUhhbmRsZUNoYW5nZU11dGVk
U3RhdGUoKm1fYXVkaW9UcmFjay5nZXQoKSk7Ci19Ci0KLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyT3dyOjpwYXVzZSgpCi17Ci0gICAgR1NUX0RFQlVHKCJQYXVzZSIpOwotICAgIG1f
cGF1c2VkID0gdHJ1ZTsKLSAgICBkaXNhYmxlTWVkaWFUcmFja3MoKTsKLX0KLQotYm9vbCBNZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3I6Omhhc1ZpZGVvKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gbV92aWRlb1RyYWNrOwotfQotCi1ib29sIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93
cjo6aGFzQXVkaW8oKSBjb25zdAotewotICAgIHJldHVybiBtX2F1ZGlvVHJhY2s7Ci19Ci0KLXZv
aWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyOjpzZXRWb2x1bWUoZmxvYXQgdm9sdW1l
KQotewotICAgIGlmICghbV9hdWRpb1RyYWNrKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRv
JiByZWFsVGltZU1lZGlhU291cmNlID0gc3RhdGljX2Nhc3Q8UmVhbHRpbWVNZWRpYVNvdXJjZU93
ciY+KG1fYXVkaW9UcmFjay0+c291cmNlKCkpOwotICAgIGF1dG8gbWVkaWFTb3VyY2UgPSBPV1Jf
TUVESUFfU09VUkNFKHJlYWxUaW1lTWVkaWFTb3VyY2UubWVkaWFTb3VyY2UoKSk7Ci0KLSAgICBH
U1RfREVCVUcoIlNldHRpbmcgdm9sdW1lOiAlZiIsIHZvbHVtZSk7Ci0gICAgZ19vYmplY3Rfc2V0
KG1lZGlhU291cmNlLCAidm9sdW1lIiwgc3RhdGljX2Nhc3Q8Z2RvdWJsZT4odm9sdW1lKSwgbnVs
bHB0cik7Ci19Ci0KLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyOjpzZXRNdXRl
ZChib29sIG11dGVkKQotewotICAgIGlmICghbV9hdWRpb1RyYWNrKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBhdXRvJiByZWFsVGltZU1lZGlhU291cmNlID0gc3RhdGljX2Nhc3Q8UmVhbHRpbWVN
ZWRpYVNvdXJjZU93ciY+KG1fYXVkaW9UcmFjay0+c291cmNlKCkpOwotICAgIGF1dG8gbWVkaWFT
b3VyY2UgPSBPV1JfTUVESUFfU09VUkNFKHJlYWxUaW1lTWVkaWFTb3VyY2UubWVkaWFTb3VyY2Uo
KSk7Ci0gICAgaWYgKCFtZWRpYVNvdXJjZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgR1NUX0RF
QlVHKCJTZXR0aW5nIG11dGU6ICVzIiwgbXV0ZWQgPyAib24iOiJvZmYiKTsKLSAgICBnX29iamVj
dF9zZXQobWVkaWFTb3VyY2UsICJtdXRlIiwgbXV0ZWQsIG51bGxwdHIpOwotfQotCi1mbG9hdCBN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3I6OmN1cnJlbnRUaW1lKCkgY29uc3QKLXsKLSAg
ICBnaW50NjQgcG9zaXRpb24gPSBHU1RfQ0xPQ0tfVElNRV9OT05FOwotICAgIEdzdFF1ZXJ5KiBx
dWVyeSA9IGdzdF9xdWVyeV9uZXdfcG9zaXRpb24oR1NUX0ZPUk1BVF9USU1FKTsKLQotICAgIGlm
IChtX3ZpZGVvVHJhY2sgJiYgZ3N0X2VsZW1lbnRfcXVlcnkobV92aWRlb1NpbmsuZ2V0KCksIHF1
ZXJ5KSkKLSAgICAgICAgZ3N0X3F1ZXJ5X3BhcnNlX3Bvc2l0aW9uKHF1ZXJ5LCAwLCAmcG9zaXRp
b24pOwotICAgIGVsc2UgaWYgKG1fYXVkaW9UcmFjayAmJiBnc3RfZWxlbWVudF9xdWVyeShtX2F1
ZGlvU2luay5nZXQoKSwgcXVlcnkpKQotICAgICAgICBnc3RfcXVlcnlfcGFyc2VfcG9zaXRpb24o
cXVlcnksIDAsICZwb3NpdGlvbik7Ci0KLSAgICBmbG9hdCByZXN1bHQgPSAwOwotICAgIGlmIChz
dGF0aWNfY2FzdDxHc3RDbG9ja1RpbWU+KHBvc2l0aW9uKSAhPSBHU1RfQ0xPQ0tfVElNRV9OT05F
KQotICAgICAgICByZXN1bHQgPSBzdGF0aWNfY2FzdDxkb3VibGU+KHBvc2l0aW9uKSAvIEdTVF9T
RUNPTkQ7Ci0KLSAgICBHU1RfTE9HKCJQb3NpdGlvbiAlIiBHU1RfVElNRV9GT1JNQVQsIEdTVF9U
SU1FX0FSR1MocG9zaXRpb24pKTsKLSAgICBnc3RfcXVlcnlfdW5yZWYocXVlcnkpOwotCi0gICAg
cmV0dXJuIHJlc3VsdDsKLX0KLQotdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3I6
OmxvYWQoY29uc3QgU3RyaW5nICYpCi17Ci0gICAgLy8gUHJvcGVybHkgZmFpbCBzbyB0aGUgZ2xv
YmFsIE1lZGlhUGxheWVyIHRyaWVzIHRvIGZhbGxiYWNrIHRvIHRoZSBuZXh0IE1lZGlhUGxheWVy
UHJpdmF0ZS4KLSAgICBtX25ldHdvcmtTdGF0ZSA9IE1lZGlhUGxheWVyOjpGb3JtYXRFcnJvcjsK
LSAgICBtX3BsYXllci0+bmV0d29ya1N0YXRlQ2hhbmdlZCgpOwotfQotCi0jaWYgRU5BQkxFKE1F
RElBX1NPVVJDRSkKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyOjpsb2FkKGNv
bnN0IFN0cmluZyYsIE1lZGlhU291cmNlUHJpdmF0ZUNsaWVudCopCi17Ci0gICAgLy8gUHJvcGVy
bHkgZmFpbCBzbyB0aGUgZ2xvYmFsIE1lZGlhUGxheWVyIHRyaWVzIHRvIGZhbGxiYWNrIHRvIHRo
ZSBuZXh0IE1lZGlhUGxheWVyUHJpdmF0ZS4KLSAgICBtX25ldHdvcmtTdGF0ZSA9IE1lZGlhUGxh
eWVyOjpGb3JtYXRFcnJvcjsKLSAgICBtX3BsYXllci0+bmV0d29ya1N0YXRlQ2hhbmdlZCgpOwot
fQotI2VuZGlmCi0KLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyOjpsb2FkKE1l
ZGlhU3RyZWFtUHJpdmF0ZSYgc3RyZWFtUHJpdmF0ZSkKLXsKLSAgICBpZiAoIWluaXRpYWxpemVH
U3RyZWFtZXIoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9zdHJlYW1Qcml2YXRlID0gJnN0
cmVhbVByaXZhdGU7Ci0gICAgaWYgKCFtX3N0cmVhbVByaXZhdGUtPmFjdGl2ZSgpKSB7Ci0gICAg
ICAgIGxvYWRpbmdGYWlsZWQoTWVkaWFQbGF5ZXI6Ok5ldHdvcmtFcnJvcik7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBpZiAoc3RyZWFtUHJpdmF0ZS5oYXNWaWRlbygpICYmICFtX3Zp
ZGVvU2luaykKLSAgICAgICAgY3JlYXRlVmlkZW9TaW5rKCk7Ci0KLSAgICBpZiAoc3RyZWFtUHJp
dmF0ZS5oYXNBdWRpbygpICYmICFtX2F1ZGlvU2luaykKLSAgICAgICAgY3JlYXRlR1NUQXVkaW9T
aW5rQmluKCk7Ci0KLSAgICBHU1RfREVCVUcoIkxvYWRpbmcgTWVkaWFTdHJlYW1Qcml2YXRlICVw
IHZpZGVvOiAlcywgYXVkaW86ICVzIiwgJnN0cmVhbVByaXZhdGUsIHN0cmVhbVByaXZhdGUuaGFz
VmlkZW8oKSA/ICJ5ZXMiOiJubyIsIHN0cmVhbVByaXZhdGUuaGFzQXVkaW8oKSA/ICJ5ZXMiOiJu
byIpOwotCi0gICAgbV9yZWFkeVN0YXRlID0gTWVkaWFQbGF5ZXI6OkhhdmVOb3RoaW5nOwotICAg
IG1fbmV0d29ya1N0YXRlID0gTWVkaWFQbGF5ZXI6OkxvYWRpbmc7Ci0gICAgbV9wbGF5ZXItPm5l
dHdvcmtTdGF0ZUNoYW5nZWQoKTsKLSAgICBtX3BsYXllci0+cmVhZHlTdGF0ZUNoYW5nZWQoKTsK
LQotICAgIGZvciAoYXV0byB0cmFjayA6IG1fc3RyZWFtUHJpdmF0ZS0+dHJhY2tzKCkpIHsKLSAg
ICAgICAgaWYgKCF0cmFjay0+ZW5hYmxlZCgpKSB7Ci0gICAgICAgICAgICBHU1RfREVCVUcoIlRy
YWNrICVzIGRpc2FibGVkIiwgdHJhY2stPmxhYmVsKCkuYXNjaWkoKS5kYXRhKCkpOwotICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICBHU1RfREVCVUcoIlByb2Nlc3Np
bmcgdHJhY2sgJXMiLCB0cmFjay0+bGFiZWwoKS5hc2NpaSgpLmRhdGEoKSk7Ci0KLSAgICAgICAg
Ym9vbCBvYnNlcnZlVHJhY2sgPSBmYWxzZTsKLQotICAgICAgICAvLyBUT0RPOiBTdXBwb3J0IGZv
ciBtdWx0aXBsZSB0cmFja3Mgb2YgdGhlIHNhbWUgdHlwZS4KLQotICAgICAgICBzd2l0Y2ggKHRy
YWNrLT50eXBlKCkpIHsKLSAgICAgICAgY2FzZSBSZWFsdGltZU1lZGlhU291cmNlOjpUeXBlOjpB
dWRpbzoKLSAgICAgICAgICAgIGlmICghbV9hdWRpb1RyYWNrKSB7Ci0gICAgICAgICAgICAgICAg
U3RyaW5nIHByZVNlbGVjdGVkRGV2aWNlID0gZ2V0ZW52KCJXRUJLSVRfQVVESU9fREVWSUNFIik7
Ci0gICAgICAgICAgICAgICAgaWYgKCFwcmVTZWxlY3RlZERldmljZSB8fCAocHJlU2VsZWN0ZWRE
ZXZpY2UgPT0gdHJhY2stPmxhYmVsKCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1fYXVkaW9U
cmFjayA9IHRyYWNrOwotICAgICAgICAgICAgICAgICAgICBhdXRvIGF1ZGlvVHJhY2sgPSBBdWRp
b1RyYWNrUHJpdmF0ZU1lZGlhU3RyZWFtOjpjcmVhdGUoKm1fYXVkaW9UcmFjay5nZXQoKSk7Ci0g
ICAgICAgICAgICAgICAgICAgIG1fcGxheWVyLT5hZGRBdWRpb1RyYWNrKCphdWRpb1RyYWNrKTsK
LSAgICAgICAgICAgICAgICAgICAgbV9hdWRpb1RyYWNrTWFwLmFkZCh0cmFjay0+aWQoKSwgYXVk
aW9UcmFjayk7Ci0gICAgICAgICAgICAgICAgICAgIG9ic2VydmVUcmFjayA9IHRydWU7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGNhc2UgUmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlwZTo6VmlkZW86Ci0gICAgICAgICAgICBpZiAo
IW1fdmlkZW9UcmFjaykgewotICAgICAgICAgICAgICAgIFN0cmluZyBwcmVTZWxlY3RlZERldmlj
ZSA9IGdldGVudigiV0VCS0lUX1ZJREVPX0RFVklDRSIpOwotICAgICAgICAgICAgICAgIGlmICgh
cHJlU2VsZWN0ZWREZXZpY2UgfHwgKHByZVNlbGVjdGVkRGV2aWNlID09IHRyYWNrLT5sYWJlbCgp
KSkgewotICAgICAgICAgICAgICAgICAgICBtX3ZpZGVvVHJhY2sgPSB0cmFjazsKLSAgICAgICAg
ICAgICAgICAgICAgYXV0byB2aWRlb1RyYWNrID0gVmlkZW9UcmFja1ByaXZhdGVNZWRpYVN0cmVh
bTo6Y3JlYXRlKCptX3ZpZGVvVHJhY2suZ2V0KCkpOwotICAgICAgICAgICAgICAgICAgICBtX3Bs
YXllci0+YWRkVmlkZW9UcmFjaygqdmlkZW9UcmFjayk7Ci0gICAgICAgICAgICAgICAgICAgIHZp
ZGVvVHJhY2stPnNldFNlbGVjdGVkKHRydWUpOwotICAgICAgICAgICAgICAgICAgICBtX3ZpZGVv
VHJhY2tNYXAuYWRkKHRyYWNrLT5pZCgpLCB2aWRlb1RyYWNrKTsKLSAgICAgICAgICAgICAgICAg
ICAgb2JzZXJ2ZVRyYWNrID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBSZWFsdGltZU1lZGlhU291cmNlOjpU
eXBlOjpOb25lOgotICAgICAgICAgICAgR1NUX1dBUk5JTkcoIkxvYWRpbmcgYSB0cmFjayB3aXRo
IE5vbmUgdHlwZSIpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG9ic2VydmVUcmFjaykKLSAg
ICAgICAgICAgIHRyYWNrLT5hZGRPYnNlcnZlcigqdGhpcyk7Ci0gICAgfQotCi0gICAgbV9yZWFk
eVN0YXRlID0gTWVkaWFQbGF5ZXI6OkhhdmVFbm91Z2hEYXRhOwotICAgIG1fcGxheWVyLT5yZWFk
eVN0YXRlQ2hhbmdlZCgpOwotfQotCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93
cjo6bG9hZGluZ0ZhaWxlZChNZWRpYVBsYXllcjo6TmV0d29ya1N0YXRlIGVycm9yKQotewotICAg
IGlmIChtX25ldHdvcmtTdGF0ZSAhPSBlcnJvcikgewotICAgICAgICBHU1RfV0FSTklORygiTG9h
ZGluZyBmYWlsZWQsIGVycm9yOiAlZCIsIGVycm9yKTsKLSAgICAgICAgbV9uZXR3b3JrU3RhdGUg
PSBlcnJvcjsKLSAgICAgICAgbV9wbGF5ZXItPm5ldHdvcmtTdGF0ZUNoYW5nZWQoKTsKLSAgICB9
Ci0gICAgaWYgKG1fcmVhZHlTdGF0ZSAhPSBNZWRpYVBsYXllcjo6SGF2ZU5vdGhpbmcpIHsKLSAg
ICAgICAgbV9yZWFkeVN0YXRlID0gTWVkaWFQbGF5ZXI6OkhhdmVOb3RoaW5nOwotICAgICAgICBt
X3BsYXllci0+cmVhZHlTdGF0ZUNoYW5nZWQoKTsKLSAgICB9Ci19Ci0KLWJvb2wgTWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyT3dyOjpkaWRMb2FkaW5nUHJvZ3Jlc3MoKSBjb25zdAotewotICAg
IC8vIEZJWE1FOiBJbXBsZW1lbnQgbG9hZGluZyBwcm9ncmVzcyBzdXBwb3J0LgotICAgIHJldHVy
biB0cnVlOwotfQotCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93cjo6ZGlzYWJs
ZU1lZGlhVHJhY2tzKCkKLXsKLSAgICBpZiAobV9hdWRpb1RyYWNrKSB7Ci0gICAgICAgIEdTVF9E
RUJVRygiU3RvcDogZGlzY29ubmVjdGluZyBhdWRpbyIpOwotICAgICAgICBnX29iamVjdF9zZXQo
bV9hdWRpb1JlbmRlcmVyLmdldCgpLCAiZGlzYWJsZWQiLCB0cnVlLCBudWxscHRyKTsKLSAgICAg
ICAgb3dyX21lZGlhX3JlbmRlcmVyX3NldF9zb3VyY2UoT1dSX01FRElBX1JFTkRFUkVSKG1fYXVk
aW9SZW5kZXJlci5nZXQoKSksIG51bGxwdHIpOwotICAgIH0KLQotICAgIGlmIChtX3ZpZGVvVHJh
Y2spIHsKLSAgICAgICAgR1NUX0RFQlVHKCJTdG9wOiBkaXNjb25uZWN0aW5nIHZpZGVvIik7Ci0g
ICAgICAgIGdfb2JqZWN0X3NldChtX3ZpZGVvUmVuZGVyZXIuZ2V0KCksICJkaXNhYmxlZCIsIHRy
dWUsIG51bGxwdHIpOwotICAgICAgICBvd3JfbWVkaWFfcmVuZGVyZXJfc2V0X3NvdXJjZShPV1Jf
TUVESUFfUkVOREVSRVIobV92aWRlb1JlbmRlcmVyLmdldCgpKSwgbnVsbHB0cik7Ci0gICAgfQot
fQotCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93cjo6c3RvcCgpCi17Ci0gICAg
ZGlzYWJsZU1lZGlhVHJhY2tzKCk7Ci0gICAgaWYgKG1fdmlkZW9UcmFjaykgewotICAgICAgICBh
dXRvIHZpZGVvVHJhY2sgPSBtX3ZpZGVvVHJhY2tNYXAuZ2V0KG1fdmlkZW9UcmFjay0+aWQoKSk7
Ci0gICAgICAgIGlmICh2aWRlb1RyYWNrKQotICAgICAgICAgICAgdmlkZW9UcmFjay0+c2V0U2Vs
ZWN0ZWQoZmFsc2UpOwotICAgIH0KLX0KLQotdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXJPd3I6OnJlZ2lzdGVyTWVkaWFFbmdpbmUoTWVkaWFFbmdpbmVSZWdpc3RyYXIgcmVnaXN0cmFy
KQotewotICAgIGlmIChpbml0aWFsaXplR1N0cmVhbWVyQW5kR1N0cmVhbWVyRGVidWdnaW5nKCkp
IHsKLSAgICAgICAgcmVnaXN0cmFyKFtdKE1lZGlhUGxheWVyKiBwbGF5ZXIpIHsKLSAgICAgICAg
ICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93
cj4ocGxheWVyKTsKLSAgICAgICAgfSwgZ2V0U3VwcG9ydGVkVHlwZXMsIHN1cHBvcnRzVHlwZSwg
bnVsbHB0ciwgbnVsbHB0ciwgbnVsbHB0ciwgbnVsbHB0cik7Ci0gICAgfQotfQotCi12b2lkIE1l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93cjo6Z2V0U3VwcG9ydGVkVHlwZXMoSGFzaFNldDxT
dHJpbmcsIEFTQ0lJQ2FzZUluc2Vuc2l0aXZlSGFzaD4mIHR5cGVzKQotewotICAgIC8vIE5vdCBz
dXBwb3J0ZWQgaW4gdGhpcyBtZWRpYSBwbGF5ZXIuCi0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVk
PEhhc2hTZXQ8U3RyaW5nLCBBU0NJSUNhc2VJbnNlbnNpdGl2ZUhhc2g+PiBjYWNoZTsKLSAgICB0
eXBlcyA9IGNhY2hlOwotfQotCi1NZWRpYVBsYXllcjo6U3VwcG9ydHNUeXBlIE1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lck93cjo6c3VwcG9ydHNUeXBlKGNvbnN0IE1lZGlhRW5naW5lU3VwcG9y
dFBhcmFtZXRlcnMmIHBhcmFtZXRlcnMpCi17Ci0gICAgaWYgKHBhcmFtZXRlcnMuaXNNZWRpYVN0
cmVhbSkKLSAgICAgICAgcmV0dXJuIE1lZGlhUGxheWVyOjpJc1N1cHBvcnRlZDsKLSAgICByZXR1
cm4gTWVkaWFQbGF5ZXI6OklzTm90U3VwcG9ydGVkOwotfQotCi1ib29sIE1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lck93cjo6aW5pdGlhbGl6ZUdTdHJlYW1lckFuZEdTdHJlYW1lckRlYnVnZ2lu
ZygpCi17Ci0gICAgaWYgKCFpbml0aWFsaXplR1N0cmVhbWVyKCkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBkZWJ1Z1JlZ2lzdGVyZWRGbGFnOwot
ICAgIHN0ZDo6Y2FsbF9vbmNlKGRlYnVnUmVnaXN0ZXJlZEZsYWcsIFtdIHsKLSAgICAgICAgR1NU
X0RFQlVHX0NBVEVHT1JZX0lOSVQod2Via2l0X29wZW53ZWJydGNfZGVidWcsICJ3ZWJraXRvd3Jw
bGF5ZXIiLCAwLCAiV2ViS2l0IE9wZW5XZWJSVEMgcGxheWVyIik7Ci0gICAgfSk7Ci0KLSAgICBy
ZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3I6OmNy
ZWF0ZUdTVEF1ZGlvU2lua0JpbigpCi17Ci0gICAgQVNTRVJUKCFtX2F1ZGlvU2luayk7Ci0gICAg
R1NUX0RFQlVHKCJDcmVhdGluZyBhdWRpbyBzaW5rIik7Ci0gICAgLy8gRklYTUU6IHZvbHVtZS9t
dXRlIHN1cHBvcnQ6IGh0dHBzOi8vd2Via2l0Lm9yZy9iLzE1MzgyOC4KLQotICAgIC8vIFByZS1y
b2xsIGFuIGF1dG9hdWRpb3Npbmsgc28gdGhhdCB0aGUgcGxhdGZvcm0gYXVkaW8gc2luayBpcyBj
cmVhdGVkIGFuZAotICAgIC8vIGNhbiBiZSByZXRyaWV2ZWQgZnJvbSB0aGUgYXV0b2F1ZGlvc2lu
ayBiaW4uCi0gICAgR1JlZlB0cjxHc3RFbGVtZW50PiBzaW5rID0gZ3N0X2VsZW1lbnRfZmFjdG9y
eV9tYWtlKCJhdXRvYXVkaW9zaW5rIiwgbnVsbHB0cik7Ci0gICAgR3N0Q2hpbGRQcm94eSogY2hp
bGRQcm94eSA9IEdTVF9DSElMRF9QUk9YWShzaW5rLmdldCgpKTsKLSAgICBnc3RfZWxlbWVudF9z
ZXRfc3RhdGUoc2luay5nZXQoKSwgR1NUX1NUQVRFX1JFQURZKTsKLSAgICBHUmVmUHRyPEdzdEVs
ZW1lbnQ+IHBsYXRmb3JtU2luayA9IGFkb3B0R1JlZihHU1RfRUxFTUVOVChnc3RfY2hpbGRfcHJv
eHlfZ2V0X2NoaWxkX2J5X2luZGV4KGNoaWxkUHJveHksIDApKSk7Ci0gICAgR3N0RWxlbWVudEZh
Y3RvcnkqIGZhY3RvcnkgPSBnc3RfZWxlbWVudF9nZXRfZmFjdG9yeShwbGF0Zm9ybVNpbmsuZ2V0
KCkpOwotCi0gICAgLy8gRGlzcG9zZSBub3cgdW4tbmVlZGVkIGF1dG9hdWRpb3NpbmsuCi0gICAg
Z3N0X2VsZW1lbnRfc2V0X3N0YXRlKHNpbmsuZ2V0KCksIEdTVF9TVEFURV9OVUxMKTsKLQotICAg
IC8vIENyZWF0ZSBhIGZyZXNoIG5ldyBhdWRpbyBzaW5rIGNvbXBhdGlibGUgd2l0aCB0aGUgcGxh
dGZvcm0uCi0gICAgbV9hdWRpb1NpbmsgPSBnc3RfZWxlbWVudF9mYWN0b3J5X2NyZWF0ZShmYWN0
b3J5LCBudWxscHRyKTsKLSAgICBtX2F1ZGlvUmVuZGVyZXIgPSBhZG9wdEdSZWYob3dyX2dzdF9h
dWRpb19yZW5kZXJlcl9uZXcobV9hdWRpb1NpbmsuZ2V0KCkpKTsKLX0KLQotdm9pZCBNZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXJPd3I6OnRyYWNrRW5kZWQoTWVkaWFTdHJlYW1UcmFja1ByaXZh
dGUmIHRyYWNrKQotewotICAgIEdTVF9ERUJVRygiVHJhY2sgZW5kZWQiKTsKLQotICAgIGlmICgh
bV9zdHJlYW1Qcml2YXRlIHx8ICFtX3N0cmVhbVByaXZhdGUtPmFjdGl2ZSgpKSB7Ci0gICAgICAg
IHN0b3AoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICgmdHJhY2sgPT0gbV9h
dWRpb1RyYWNrKQotICAgICAgICBnX29iamVjdF9zZXQobV9hdWRpb1JlbmRlcmVyLmdldCgpLCAi
ZGlzYWJsZWQiLCB0cnVlLCBudWxscHRyKTsKLSAgICBlbHNlIGlmICgmdHJhY2sgPT0gbV92aWRl
b1RyYWNrKSB7Ci0gICAgICAgIGdfb2JqZWN0X3NldChtX3ZpZGVvUmVuZGVyZXIuZ2V0KCksICJk
aXNhYmxlZCIsIHRydWUsIG51bGxwdHIpOwotICAgICAgICBhdXRvJiByZWFsVGltZU1lZGlhU291
cmNlID0gc3RhdGljX2Nhc3Q8UmVhbHRpbWVNZWRpYVNvdXJjZU93ciY+KG1fdmlkZW9UcmFjay0+
c291cmNlKCkpOwotICAgICAgICByZWFsVGltZU1lZGlhU291cmNlLnNldFdpZHRoKDApOwotICAg
ICAgICByZWFsVGltZU1lZGlhU291cmNlLnNldEhlaWdodCgwKTsKLSAgICAgICAgYXV0byB2aWRl
b1RyYWNrID0gbV92aWRlb1RyYWNrTWFwLmdldChtX3ZpZGVvVHJhY2stPmlkKCkpOwotICAgICAg
ICBpZiAodmlkZW9UcmFjaykKLSAgICAgICAgICAgIHZpZGVvVHJhY2stPnNldFNlbGVjdGVkKGZh
bHNlKTsKLSAgICB9Ci0KLSAgICBnYm9vbGVhbiBhdWRpb0Rpc2FibGVkOwotICAgIGdib29sZWFu
IHZpZGVvRGlzYWJsZWQ7Ci0gICAgZ19vYmplY3RfZ2V0KG1fYXVkaW9SZW5kZXJlci5nZXQoKSwg
ImRpc2FibGVkIiwgJmF1ZGlvRGlzYWJsZWQsIG51bGxwdHIpOwotICAgIGdfb2JqZWN0X2dldCht
X3ZpZGVvUmVuZGVyZXIuZ2V0KCksICJkaXNhYmxlZCIsICZ2aWRlb0Rpc2FibGVkLCBudWxscHRy
KTsKLSAgICBpZiAoYXVkaW9EaXNhYmxlZCAmJiB2aWRlb0Rpc2FibGVkKSB7Ci0gICAgICAgIG1f
ZW5kZWQgPSB0cnVlOwotICAgICAgICBtX3BsYXllci0+dGltZUNoYW5nZWQoKTsKLSAgICB9Ci19
Ci0KLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyOjp0cmFja011dGVkQ2hhbmdl
ZChNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZSYgdHJhY2spCi17Ci0gICAgR1NUX0RFQlVHKCJUcmFj
ayBtdXRlZCBzdGF0ZSBjaGFuZ2VkIik7Ci0KLSAgICBtYXliZUhhbmRsZUNoYW5nZU11dGVkU3Rh
dGUodHJhY2spOwotfQotCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93cjo6bWF5
YmVIYW5kbGVDaGFuZ2VNdXRlZFN0YXRlKE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlJiB0cmFjaykK
LXsKLSAgICBhdXRvJiByZWFsVGltZU1lZGlhU291cmNlID0gc3RhdGljX2Nhc3Q8UmVhbHRpbWVN
ZWRpYVNvdXJjZU93ciY+KHRyYWNrLnNvdXJjZSgpKTsKLSAgICBhdXRvIG1lZGlhU291cmNlID0g
T1dSX01FRElBX1NPVVJDRShyZWFsVGltZU1lZGlhU291cmNlLm1lZGlhU291cmNlKCkpOwotCi0g
ICAgR1NUX0RFQlVHKCIlcyB0cmFjayBub3cgJXMiLCB0cmFjay50eXBlKCkgPT0gUmVhbHRpbWVN
ZWRpYVNvdXJjZTo6VHlwZTo6QXVkaW8gPyAiYXVkaW8iOiJ2aWRlbyIsIHJlYWxUaW1lTWVkaWFT
b3VyY2UubXV0ZWQoKSA/ICJtdXRlZCI6InVuLW11dGVkIik7Ci0gICAgc3dpdGNoICh0cmFjay50
eXBlKCkpIHsKLSAgICBjYXNlIFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGU6OkF1ZGlvOgotICAg
ICAgICBpZiAoIXJlYWxUaW1lTWVkaWFTb3VyY2UubXV0ZWQoKSkgewotICAgICAgICAgICAgZ19v
YmplY3Rfc2V0KG1fYXVkaW9SZW5kZXJlci5nZXQoKSwgImRpc2FibGVkIiwgZmFsc2UsIG51bGxw
dHIpOwotICAgICAgICAgICAgb3dyX21lZGlhX3JlbmRlcmVyX3NldF9zb3VyY2UoT1dSX01FRElB
X1JFTkRFUkVSKG1fYXVkaW9SZW5kZXJlci5nZXQoKSksIG1lZGlhU291cmNlKTsKLSAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgIGdfb2JqZWN0X3NldChtX2F1ZGlvUmVuZGVyZXIuZ2V0KCks
ICJkaXNhYmxlZCIsIHRydWUsIG51bGxwdHIpOwotICAgICAgICAgICAgb3dyX21lZGlhX3JlbmRl
cmVyX3NldF9zb3VyY2UoT1dSX01FRElBX1JFTkRFUkVSKG1fYXVkaW9SZW5kZXJlci5nZXQoKSks
IG51bGxwdHIpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChtZWRpYVNvdXJjZSkKLSAgICAgICAg
ICAgIGdfb2JqZWN0X3NldChtZWRpYVNvdXJjZSwgIm11dGUiLCAhdHJhY2suZW5hYmxlZCgpLCBu
dWxscHRyKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBSZWFsdGltZU1lZGlhU291cmNlOjpU
eXBlOjpWaWRlbzoKLSAgICAgICAgaWYgKCFyZWFsVGltZU1lZGlhU291cmNlLm11dGVkKCkpIHsK
LSAgICAgICAgICAgIGdfb2JqZWN0X3NldChtX3ZpZGVvUmVuZGVyZXIuZ2V0KCksICJkaXNhYmxl
ZCIsIGZhbHNlLCBudWxscHRyKTsKLSAgICAgICAgICAgIG93cl9tZWRpYV9yZW5kZXJlcl9zZXRf
c291cmNlKE9XUl9NRURJQV9SRU5ERVJFUihtX3ZpZGVvUmVuZGVyZXIuZ2V0KCkpLCBtZWRpYVNv
dXJjZSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBnX29iamVjdF9zZXQobV92aWRl
b1JlbmRlcmVyLmdldCgpLCAiZGlzYWJsZWQiLCB0cnVlLCBudWxscHRyKTsKLSAgICAgICAgICAg
IG93cl9tZWRpYV9yZW5kZXJlcl9zZXRfc291cmNlKE9XUl9NRURJQV9SRU5ERVJFUihtX3ZpZGVv
UmVuZGVyZXIuZ2V0KCkpLCBudWxscHRyKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGU6Ok5vbmU6Ci0gICAgICAgIEdTVF9XQVJO
SU5HKCJUcnlpbmcgdG8gY2hhbmdlIG11dGUgc3RhdGUgb2YgYSB0cmFjayB3aXRoIE5vbmUgdHlw
ZSIpOwotICAgIH0KLX0KLQotdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3I6OnRy
YWNrU2V0dGluZ3NDaGFuZ2VkKE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlJikKLXsKLSAgICBHU1Rf
REVCVUcoIlRyYWNrIHNldHRpbmdzIGNoYW5nZWQiKTsKLX0KLQotdm9pZCBNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXJPd3I6OnRyYWNrRW5hYmxlZENoYW5nZWQoTWVkaWFTdHJlYW1UcmFja1By
aXZhdGUmIHRyYWNrKQotewotICAgIEdTVF9ERUJVRygiJXMgdHJhY2sgbm93ICVzIiwgdHJhY2su
dHlwZSgpID09IFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGU6OkF1ZGlvID8gImF1ZGlvIjoidmlk
ZW8iLCB0cmFjay5lbmFibGVkKCkgPyAiZW5hYmxlZCI6ImRpc2FibGVkIik7Ci0KLSAgICBzd2l0
Y2ggKHRyYWNrLnR5cGUoKSkgewotICAgIGNhc2UgUmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlwZTo6
QXVkaW86Ci0gICAgICAgIGdfb2JqZWN0X3NldChtX2F1ZGlvUmVuZGVyZXIuZ2V0KCksICJkaXNh
YmxlZCIsICF0cmFjay5lbmFibGVkKCksIG51bGxwdHIpOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGU6OlZpZGVvOgotICAgICAgICBnX29iamVjdF9z
ZXQobV92aWRlb1JlbmRlcmVyLmdldCgpLCAiZGlzYWJsZWQiLCAhdHJhY2suZW5hYmxlZCgpLCBu
dWxscHRyKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBSZWFsdGltZU1lZGlhU291cmNlOjpU
eXBlOjpOb25lOgotICAgICAgICBHU1RfV0FSTklORygiVHJ5aW5nIHRvIGNoYW5nZSBlbmFibGVk
IHN0YXRlIG9mIGEgdHJhY2sgd2l0aCBOb25lIHR5cGUiKTsKLSAgICB9Ci19Ci0KLUdzdEVsZW1l
bnQqIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93cjo6Y3JlYXRlVmlkZW9TaW5rKCkKLXsK
LSAgICBHc3RFbGVtZW50KiBzaW5rOwotI2lmIFVTRShHU1RSRUFNRVJfR0wpCi0gICAgLy8gTm8g
bmVlZCB0byBjcmVhdGUgZ2x1cGxvYWQgYW5kIGdsY29sb3Jjb252ZXJ0IGhlcmUgYmVjYXVzZSB0
aGV5IGFyZQotICAgIC8vIGFscmVhZHkgY3JlYXRlZCBieSB0aGUgdmlkZW8gcmVuZGVyZXIuCi0g
ICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHByb2JhYmx5IHJldHVybiBhIFJlZlB0ci4gU2VlIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjQ3MDkuCi0gICAgc2luayA9
IE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6OmNyZWF0ZUdMQXBwU2luaygpOwotICAg
IG1fdmlkZW9TaW5rID0gc2luazsKLSNlbHNlCi0gICAgaWYgKG1fc3RyZWFtUHJpdmF0ZS0+Z2V0
VmlkZW9SZW5kZXJlcigpKSB7Ci0gICAgICAgIG1fdmlkZW9SZW5kZXJlciA9IG1fc3RyZWFtUHJp
dmF0ZS0+Z2V0VmlkZW9SZW5kZXJlcigpOwotICAgICAgICBtX3ZpZGVvU2luayA9IG1fc3RyZWFt
UHJpdmF0ZS0+Z2V0VmlkZW9TaW5rRWxlbWVudCgpOwotICAgICAgICBnX3NpZ25hbF9jb25uZWN0
X3N3YXBwZWQobV92aWRlb1NpbmsuZ2V0KCksICJyZXBhaW50LXJlcXVlc3RlZCIsIEdfQ0FMTEJB
Q0soTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6cmVwYWludENhbGxiYWNrKSwgdGhp
cyk7Ci0gICAgICAgIGdfb2JqZWN0X2dldChtX3ZpZGVvUmVuZGVyZXIuZ2V0KCksICJzaW5rIiwg
JnNpbmssIG51bGxwdHIpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIEdzdEVsZW1lbnQqIGdsZG93
bmxvYWQgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UoImdsZG93bmxvYWQiLCBudWxscHRyKTsK
LSAgICAgICAgR3N0RWxlbWVudCogdmlkZW9jb252ZXJ0ID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9t
YWtlKCJ2aWRlb2NvbnZlcnQiLCBudWxscHRyKTsKLSAgICAgICAgR3N0RWxlbWVudCogd2Via2l0
U2luayA9IE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6OmNyZWF0ZVZpZGVvU2luaygp
OwotICAgICAgICBzaW5rID0gZ3N0X2Jpbl9uZXcobnVsbHB0cik7Ci0gICAgICAgIGdzdF9iaW5f
YWRkX21hbnkoR1NUX0JJTihzaW5rKSwgZ2xkb3dubG9hZCwgdmlkZW9jb252ZXJ0LCB3ZWJraXRT
aW5rLCBudWxscHRyKTsKLSAgICAgICAgZ3N0X2VsZW1lbnRfbGlua19tYW55KGdsZG93bmxvYWQs
IHZpZGVvY29udmVydCwgd2Via2l0U2luaywgbnVsbHB0cik7Ci0gICAgICAgIEdSZWZQdHI8R3N0
UGFkPiBwYWQgPSBhZG9wdEdSZWYoZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQoZ2xkb3dubG9h
ZCwgInNpbmsiKSk7Ci0gICAgICAgIGdzdF9lbGVtZW50X2FkZF9wYWQoc2luaywgZ3N0X2dob3N0
X3BhZF9uZXcoInNpbmsiLCBwYWQuZ2V0KCkpKTsKLSAgICB9Ci0jZW5kaWYKLSAgICBpZiAoIW1f
dmlkZW9SZW5kZXJlcikgewotICAgICAgICBtX3ZpZGVvUmVuZGVyZXIgPSBhZG9wdEdSZWYob3dy
X2dzdF92aWRlb19yZW5kZXJlcl9uZXcoc2luaykpOwotI2lmIFVTRShHU1RSRUFNRVJfR0wpCi0g
ICAgICAgIG93cl92aWRlb19yZW5kZXJlcl9zZXRfcmVxdWVzdF9jb250ZXh0X2NhbGxiYWNrKE9X
Ul9WSURFT19SRU5ERVJFUihtX3ZpZGVvUmVuZGVyZXIuZ2V0KCkpLCAoT3dyVmlkZW9SZW5kZXJl
clJlcXVlc3RDb250ZXh0Q2FsbGJhY2spIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6
OnJlcXVlc3RHTENvbnRleHQsIHRoaXMsIG51bGxwdHIpOwotI2VuZGlmCi0gICAgICAgIG1fc3Ry
ZWFtUHJpdmF0ZS0+c2V0VmlkZW9SZW5kZXJlcihtX3ZpZGVvUmVuZGVyZXIuZ2V0KCksIHZpZGVv
U2luaygpKTsKLSAgICB9Ci0gICAgcmV0dXJuIHNpbms7Ci19Ci0KLXZvaWQgTWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyT3dyOjpzZXRTaXplKGNvbnN0IEludFNpemUmIHNpemUpCi17Ci0gICAg
aWYgKHNpemUgPT0gbV9zaXplKQotICAgICAgICByZXR1cm47Ci0KLSAgICBNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXJCYXNlOjpzZXRTaXplKHNpemUpOwotICAgIGlmIChtX3ZpZGVvUmVuZGVy
ZXIpCi0gICAgICAgIGdfb2JqZWN0X3NldChtX3ZpZGVvUmVuZGVyZXIuZ2V0KCksICJ3aWR0aCIs
IHNpemUud2lkdGgoKSwgImhlaWdodCIsIHNpemUuaGVpZ2h0KCksIG51bGxwdHIpOwotCi0gICAg
aWYgKCFtX3ZpZGVvVHJhY2spCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8mIHJlYWxUaW1l
TWVkaWFTb3VyY2UgPSBzdGF0aWNfY2FzdDxSZWFsdGltZU1lZGlhU291cmNlT3dyJj4obV92aWRl
b1RyYWNrLT5zb3VyY2UoKSk7Ci0gICAgcmVhbFRpbWVNZWRpYVNvdXJjZS5zZXRXaWR0aChzaXpl
LndpZHRoKCkpOwotICAgIHJlYWxUaW1lTWVkaWFTb3VyY2Uuc2V0SGVpZ2h0KHNpemUuaGVpZ2h0
KCkpOwotfQotCi1GbG9hdFNpemUgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyOjpuYXR1
cmFsU2l6ZSgpIGNvbnN0Ci17Ci0gICAgYXV0byBzaXplID0gTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyQmFzZTo6bmF0dXJhbFNpemUoKTsKLQotICAgIC8vIEluIGNhc2Ugd2UgYXJlIG5vdCBw
bGF5aW5nIHRoZSB2aWRlbyB3ZSByZXR1cm4gdGhlIHNpemUgd2Ugc2V0IHRvIHRoZSBtZWRpYSBz
b3VyY2UuCi0gICAgaWYgKG1fdmlkZW9UcmFjayAmJiBzaXplLmlzWmVybygpKSB7Ci0gICAgICAg
IGF1dG8mIHJlYWxUaW1lTWVkaWFTb3VyY2UgPSBzdGF0aWNfY2FzdDxSZWFsdGltZU1lZGlhU291
cmNlT3dyJj4obV92aWRlb1RyYWNrLT5zb3VyY2UoKSk7Ci0gICAgICAgIHJldHVybiByZWFsVGlt
ZU1lZGlhU291cmNlLnNpemUoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gc2l6ZTsKLX0KLQotfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKFZJREVPKSAmJiBFTkFCTEUo
TUVESUFfU1RSRUFNKSAmJiBVU0UoR1NUUkVBTUVSKSAmJiBVU0UoT1BFTldFQlJUQykKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXJPd3IuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3IuaApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMzM0NjMwZTQ1YzM0ODFiYTdkNDJmNTY2MzdlMGRhYTA1MTU0
YmQyZi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyT3dyLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMjggKzAsMCBAQAotLyoKLSAqICBD
b3B5cmlnaHQgKEMpIDIwMTUgSWdhbGlhIFMuTC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqICBD
b3B5cmlnaHQgKEMpIDIwMTUgTWV0cm9sb2dpY2FsLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCi0gKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3Nl
ciBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0g
KiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiAg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9u
LCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0gKi8KLQotI2lmbmRlZiBNZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXJPd3JfaAotI2RlZmluZSBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3JfaAot
Ci0jaWYgRU5BQkxFKFZJREVPKSAmJiBFTkFCTEUoTUVESUFfU1RSRUFNKSAmJiBVU0UoR1NUUkVB
TUVSKSAmJiBVU0UoT1BFTldFQlJUQykKLQotI2luY2x1ZGUgIkF1ZGlvVHJhY2tQcml2YXRlTWVk
aWFTdHJlYW0uaCIKLSNpbmNsdWRlICJNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlLmgi
Ci0jaW5jbHVkZSAiTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUuaCIKLSNpbmNsdWRlICJWaWRlb1Ry
YWNrUHJpdmF0ZU1lZGlhU3RyZWFtLmgiCi0KLXR5cGVkZWYgc3RydWN0IF9Pd3JHc3RWaWRlb1Jl
bmRlcmVyIE93ckdzdFZpZGVvUmVuZGVyZXI7Ci10eXBlZGVmIHN0cnVjdCBfT3dyR3N0QXVkaW9S
ZW5kZXJlciBPd3JHc3RBdWRpb1JlbmRlcmVyOwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNs
YXNzIE1lZGlhU3RyZWFtUHJpdmF0ZTsKLWNsYXNzIFJlYWx0aW1lTWVkaWFTb3VyY2VPd3I7Ci0K
LWNsYXNzIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93ciA6IHB1YmxpYyBNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXJCYXNlLCBwcml2YXRlIE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlOjpP
YnNlcnZlciB7Ci1wdWJsaWM6Ci0gICAgZXhwbGljaXQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyT3dyKE1lZGlhUGxheWVyKik7Ci0gICAgfk1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93
cigpOwotCi0gICAgc3RhdGljIHZvaWQgcmVnaXN0ZXJNZWRpYUVuZ2luZShNZWRpYUVuZ2luZVJl
Z2lzdHJhcik7Ci0KLSAgICB2b2lkIHNldFNpemUoY29uc3QgSW50U2l6ZSYpIGZpbmFsOwotCi0g
ICAgRmxvYXRTaXplIG5hdHVyYWxTaXplKCkgY29uc3QgZmluYWw7Ci0KLXByaXZhdGU6Ci0gICAg
R3N0RWxlbWVudCogY3JlYXRlVmlkZW9TaW5rKCkgZmluYWw7Ci0gICAgR3N0RWxlbWVudCogYXVk
aW9TaW5rKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9hdWRpb1NpbmsuZ2V0KCk7IH0KLSAgICBi
b29sIGlzTGl2ZVN0cmVhbSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHRydWU7IH0KLQotICAgIFN0
cmluZyBlbmdpbmVEZXNjcmlwdGlvbigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJPcGVuV2ViUlRD
IjsgfQotCi0gICAgdm9pZCBsb2FkKGNvbnN0IFN0cmluZyYpIGZpbmFsOwotI2lmIEVOQUJMRShN
RURJQV9TT1VSQ0UpCi0gICAgdm9pZCBsb2FkKGNvbnN0IFN0cmluZyYsIE1lZGlhU291cmNlUHJp
dmF0ZUNsaWVudCopIGZpbmFsOwotI2VuZGlmCi0gICAgdm9pZCBsb2FkKE1lZGlhU3RyZWFtUHJp
dmF0ZSYpIGZpbmFsOwotICAgIHZvaWQgY2FuY2VsTG9hZCgpIGZpbmFsIHsgfQotCi0gICAgdm9p
ZCBwcmVwYXJlVG9QbGF5KCkgZmluYWwgeyB9Ci0gICAgdm9pZCBwbGF5KCkgZmluYWw7Ci0gICAg
dm9pZCBwYXVzZSgpIGZpbmFsOwotCi0gICAgYm9vbCBoYXNWaWRlbygpIGNvbnN0IGZpbmFsOwot
ICAgIGJvb2wgaGFzQXVkaW8oKSBjb25zdCBmaW5hbDsKLQotICAgIGZsb2F0IGR1cmF0aW9uKCkg
Y29uc3QgZmluYWwgeyByZXR1cm4gMDsgfQotCi0gICAgZmxvYXQgY3VycmVudFRpbWUoKSBjb25z
dCBmaW5hbDsKLSAgICB2b2lkIHNlZWsoZmxvYXQpIGZpbmFsIHsgfQotICAgIGJvb2wgc2Vla2lu
ZygpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9Ci0KLSAgICB2b2lkIHNldFJhdGUoZmxv
YXQpIGZpbmFsIHsgfQotICAgIHZvaWQgc2V0UHJlc2VydmVzUGl0Y2goYm9vbCkgZmluYWwgeyB9
Ci0gICAgYm9vbCBwYXVzZWQoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3BhdXNlZDsgfQotCi0g
ICAgdm9pZCBzZXRWb2x1bWUoZmxvYXQpIGZpbmFsOwotICAgIHZvaWQgc2V0TXV0ZWQoYm9vbCkg
ZmluYWw7Ci0KLSAgICBib29sIGhhc0Nsb3NlZENhcHRpb25zKCkgY29uc3QgZmluYWwgeyByZXR1
cm4gZmFsc2U7IH0KLSAgICB2b2lkIHNldENsb3NlZENhcHRpb25zVmlzaWJsZShib29sKSBmaW5h
bCB7IH07Ci0KLSAgICBmbG9hdCBtYXhUaW1lU2Vla2FibGUoKSBjb25zdCBmaW5hbCB7IHJldHVy
biAwOyB9Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFBsYXRmb3JtVGltZVJhbmdlcz4gYnVmZmVyZWQo
KSBjb25zdCBmaW5hbCB7IHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPFBsYXRmb3JtVGltZVJhbmdl
cz4oKTsgfQotICAgIGJvb2wgZGlkTG9hZGluZ1Byb2dyZXNzKCkgY29uc3QgZmluYWw7Ci0KLSAg
ICB1bnNpZ25lZCBsb25nIGxvbmcgdG90YWxCeXRlcygpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIDA7
IH0KLQotICAgIGJvb2wgY2FuTG9hZFBvc3RlcigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIGZhbHNl
OyB9Ci0gICAgdm9pZCBzZXRQb3N0ZXIoY29uc3QgU3RyaW5nJikgZmluYWwgeyB9Ci0gICAgYm9v
bCBlbmRlZCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fZW5kZWQ7IH0KLQotICAgIC8vIE1lZGlh
U3RyZWFtVHJhY2tQcml2YXRlOjpPYnNlcnZlciBpbXBsZW1lbnRhdGlvbi4KLSAgICB2b2lkIHRy
YWNrRW5kZWQoTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUmKSBmaW5hbDsKLSAgICB2b2lkIHRyYWNr
TXV0ZWRDaGFuZ2VkKE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlJikgZmluYWw7Ci0gICAgdm9pZCB0
cmFja1NldHRpbmdzQ2hhbmdlZChNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZSYpIGZpbmFsOwotICAg
IHZvaWQgdHJhY2tFbmFibGVkQ2hhbmdlZChNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZSYpIGZpbmFs
OwotCi0gICAgc3RhdGljIHZvaWQgZ2V0U3VwcG9ydGVkVHlwZXMoSGFzaFNldDxTdHJpbmcsIEFT
Q0lJQ2FzZUluc2Vuc2l0aXZlSGFzaD4mKTsKLSAgICBzdGF0aWMgTWVkaWFQbGF5ZXI6OlN1cHBv
cnRzVHlwZSBzdXBwb3J0c1R5cGUoY29uc3QgTWVkaWFFbmdpbmVTdXBwb3J0UGFyYW1ldGVycyYp
OwotICAgIHN0YXRpYyBib29sIGluaXRpYWxpemVHU3RyZWFtZXJBbmRHU3RyZWFtZXJEZWJ1Z2dp
bmcoKTsKLSAgICB2b2lkIGNyZWF0ZUdTVEF1ZGlvU2lua0JpbigpOwotICAgIHZvaWQgbG9hZGlu
Z0ZhaWxlZChNZWRpYVBsYXllcjo6TmV0d29ya1N0YXRlIGVycm9yKTsKLSAgICB2b2lkIHN0b3Ao
KTsKLSAgICB2b2lkIG1heWJlSGFuZGxlQ2hhbmdlTXV0ZWRTdGF0ZShNZWRpYVN0cmVhbVRyYWNr
UHJpdmF0ZSYpOwotICAgIHZvaWQgZGlzYWJsZU1lZGlhVHJhY2tzKCk7Ci0KLSAgICBib29sIG1f
cGF1c2VkIHsgdHJ1ZSB9OwotICAgIGJvb2wgbV9lbmRlZCB7IGZhbHNlIH07Ci0gICAgUmVmUHRy
PE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlPiBtX3ZpZGVvVHJhY2s7Ci0gICAgUmVmUHRyPE1lZGlh
U3RyZWFtVHJhY2tQcml2YXRlPiBtX2F1ZGlvVHJhY2s7Ci0gICAgR1JlZlB0cjxHc3RFbGVtZW50
PiBtX2F1ZGlvU2luazsKLSAgICBSZWZQdHI8TWVkaWFTdHJlYW1Qcml2YXRlPiBtX3N0cmVhbVBy
aXZhdGU7Ci0gICAgR1JlZlB0cjxPd3JHc3RWaWRlb1JlbmRlcmVyPiBtX3ZpZGVvUmVuZGVyZXI7
Ci0gICAgR1JlZlB0cjxPd3JHc3RBdWRpb1JlbmRlcmVyPiBtX2F1ZGlvUmVuZGVyZXI7Ci0KLSAg
ICBIYXNoTWFwPFN0cmluZywgUmVmUHRyPEF1ZGlvVHJhY2tQcml2YXRlTWVkaWFTdHJlYW0+PiBt
X2F1ZGlvVHJhY2tNYXA7Ci0gICAgSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxWaWRlb1RyYWNrUHJp
dmF0ZU1lZGlhU3RyZWFtPj4gbV92aWRlb1RyYWNrTWFwOwotfTsKLQotfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKFZJREVPKSAmJiBFTkFCTEUoTUVESUFfU1RSRUFN
KSAmJiBVU0UoR1NUUkVBTUVSKSAmJiBVU0UoT1BFTldFQlJUQykKLQotI2VuZGlmIC8vIE1lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lck93cl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYUVuZHBvaW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21lZGlhc3RyZWFtL01lZGlhRW5kcG9pbnQuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCBkMTM3NWZkNGMwNDEzOGRmZTE2NWMzNTRiMjFlYTliNTYyNWZhZmJjLi4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhRW5kcG9pbnQuY3BwCisrKyAvZGV2L251bGwKQEAg
LTEsODYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBFcmljc3NvbiBBQi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqCi0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgotICogICAgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZQotICogICAgZGlzdHJpYnV0aW9uLgotICogMy4gTmVpdGhlciB0aGUg
bmFtZSBvZiBFcmljc3NvbiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAg
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20g
dGhpcwotICogICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgot
ICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoV0VC
X1JUQykKLSNpbmNsdWRlICJNZWRpYUVuZHBvaW50LmgiCi0KLSNpbmNsdWRlICJNZWRpYVBheWxv
YWQuaCIKLSNpbmNsdWRlICJSVENEYXRhQ2hhbm5lbEhhbmRsZXIuaCIKLSNpbmNsdWRlICJSZWFs
dGltZU1lZGlhU291cmNlLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgRW1wdHlS
ZWFsdGltZU1lZGlhU291cmNlIGZpbmFsIDogcHVibGljIFJlYWx0aW1lTWVkaWFTb3VyY2Ugewot
cHVibGljOgotICAgIHN0YXRpYyBSZWY8RW1wdHlSZWFsdGltZU1lZGlhU291cmNlPiBjcmVhdGUo
KSB7IHJldHVybiBhZG9wdFJlZigqbmV3IEVtcHR5UmVhbHRpbWVNZWRpYVNvdXJjZSgpKTsgfQot
Ci1wcml2YXRlOgotICAgIEVtcHR5UmVhbHRpbWVNZWRpYVNvdXJjZSgpIDogUmVhbHRpbWVNZWRp
YVNvdXJjZShlbXB0eVN0cmluZygpLCBUeXBlOjpOb25lLCBlbXB0eVN0cmluZygpKSB7IH0KLQot
ICAgIGNvbnN0IFJlYWx0aW1lTWVkaWFTb3VyY2VDYXBhYmlsaXRpZXMmIGNhcGFiaWxpdGllcygp
IGNvbnN0IGZpbmFsIHsgcmV0dXJuIFJlYWx0aW1lTWVkaWFTb3VyY2VDYXBhYmlsaXRpZXM6OmVt
cHR5Q2FwYWJpbGl0aWVzKCk7IH0KLSAgICBjb25zdCBSZWFsdGltZU1lZGlhU291cmNlU2V0dGlu
Z3MmIHNldHRpbmdzKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9zb3VyY2VTZXR0aW5nczsgfQot
Ci0gICAgUmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzIG1fc291cmNlU2V0dGluZ3M7Ci19Owot
Ci1jbGFzcyBFbXB0eU1lZGlhRW5kcG9pbnQgZmluYWwgOiBwdWJsaWMgTWVkaWFFbmRwb2ludCB7
Ci1wcml2YXRlOgotICAgIHZvaWQgc2V0Q29uZmlndXJhdGlvbihNZWRpYUVuZHBvaW50Q29uZmln
dXJhdGlvbiYmKSBmaW5hbCB7IH0KLQotICAgIHZvaWQgZ2VuZXJhdGVEdGxzSW5mbygpIGZpbmFs
IHsgfQotICAgIE1lZGlhUGF5bG9hZFZlY3RvciBnZXREZWZhdWx0QXVkaW9QYXlsb2FkcygpIGZp
bmFsIHsgcmV0dXJuIE1lZGlhUGF5bG9hZFZlY3RvcigpOyB9Ci0gICAgTWVkaWFQYXlsb2FkVmVj
dG9yIGdldERlZmF1bHRWaWRlb1BheWxvYWRzKCkgZmluYWwgeyByZXR1cm4gTWVkaWFQYXlsb2Fk
VmVjdG9yKCk7IH0KLSAgICBNZWRpYVBheWxvYWRWZWN0b3IgZmlsdGVyUGF5bG9hZHMoY29uc3Qg
TWVkaWFQYXlsb2FkVmVjdG9yJiwgY29uc3QgTWVkaWFQYXlsb2FkVmVjdG9yJikgZmluYWwgeyBy
ZXR1cm4gTWVkaWFQYXlsb2FkVmVjdG9yKCk7IH0KLQotICAgIFVwZGF0ZVJlc3VsdCB1cGRhdGVS
ZWNlaXZlQ29uZmlndXJhdGlvbihNZWRpYUVuZHBvaW50U2Vzc2lvbkNvbmZpZ3VyYXRpb24qLCBi
b29sKSBmaW5hbCB7IHJldHVybiBVcGRhdGVSZXN1bHQ6OkZhaWxlZDsgfQotICAgIFVwZGF0ZVJl
c3VsdCB1cGRhdGVTZW5kQ29uZmlndXJhdGlvbihNZWRpYUVuZHBvaW50U2Vzc2lvbkNvbmZpZ3Vy
YXRpb24qLCBjb25zdCBSZWFsdGltZU1lZGlhU291cmNlTWFwJiwgYm9vbCkgZmluYWwgeyByZXR1
cm4gVXBkYXRlUmVzdWx0OjpGYWlsZWQ7IH0KLQotICAgIHZvaWQgYWRkUmVtb3RlQ2FuZGlkYXRl
KGNvbnN0IEljZUNhbmRpZGF0ZSYsIGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYsIGNvbnN0
IFN0cmluZyYpIGZpbmFsIHsgfQotCi0gICAgUmVmPFJlYWx0aW1lTWVkaWFTb3VyY2U+IGNyZWF0
ZU11dGVkUmVtb3RlU291cmNlKGNvbnN0IFN0cmluZyYsIFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5
cGUpIGZpbmFsIHsgcmV0dXJuIEVtcHR5UmVhbHRpbWVNZWRpYVNvdXJjZTo6Y3JlYXRlKCk7IH0K
LSAgICB2b2lkIHJlcGxhY2VTZW5kU291cmNlKFJlYWx0aW1lTWVkaWFTb3VyY2UmLCBjb25zdCBT
dHJpbmcmKSBmaW5hbCB7IH0KLSAgICB2b2lkIHJlcGxhY2VNdXRlZFJlbW90ZVNvdXJjZU1pZChj
b25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmKSBmaW5hbCB7IH07Ci0KLSAgICBzdGQ6OnVuaXF1
ZV9wdHI8UlRDRGF0YUNoYW5uZWxIYW5kbGVyPiBjcmVhdGVEYXRhQ2hhbm5lbEhhbmRsZXIoY29u
c3QgU3RyaW5nJiwgY29uc3QgUlRDRGF0YUNoYW5uZWxJbml0JikgZmluYWwgeyByZXR1cm4gbnVs
bHB0cjsgfQotICAgIHZvaWQgc3RvcCgpIGZpbmFsIHsgfQotfTsKLQotc3RhdGljIHN0ZDo6dW5p
cXVlX3B0cjxNZWRpYUVuZHBvaW50PiBjcmVhdGVNZWRpYUVuZHBvaW50KE1lZGlhRW5kcG9pbnRD
bGllbnQmKQotewotICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPEVtcHR5TWVkaWFFbmRwb2lu
dD4oKTsKLX0KLQotQ3JlYXRlTWVkaWFFbmRwb2ludCBNZWRpYUVuZHBvaW50OjpjcmVhdGUgPSBj
cmVhdGVNZWRpYUVuZHBvaW50OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAv
LyBFTkFCTEUoV0VCX1JUQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21l
ZGlhc3RyZWFtL01lZGlhRW5kcG9pbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlh
c3RyZWFtL01lZGlhRW5kcG9pbnQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTFi
NTFkNGUwOGEzZGQzZWZiMDlhMDExZTMyOTc0ZDI4Yjc5ZGY3OC4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRp
YXN0cmVhbS9NZWRpYUVuZHBvaW50LmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMDggKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBFcmljc3NvbiBBQi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqICAgIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK
LSAqICAgIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgRXJpY3Nzb24g
bm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0gKiAgICBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSAqICAgIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0g
KiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotI3ByYWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUoV0VCX1JUQykKLQotI2luY2x1ZGUgIk1lZGlh
RW5kcG9pbnRDb25maWd1cmF0aW9uLmgiCi0jaW5jbHVkZSAiUGVlckNvbm5lY3Rpb25CYWNrZW5k
LmgiCi0jaW5jbHVkZSAiUlRDSWNlVHJhbnNwb3J0U3RhdGUuaCIKLSNpbmNsdWRlICJSZWFsdGlt
ZU1lZGlhU291cmNlLmgiCi0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KLSNpbmNsdWRlIDx3dGYv
dGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBNZWRpYUVu
ZHBvaW50OwotY2xhc3MgTWVkaWFFbmRwb2ludENsaWVudDsKLWNsYXNzIE1lZGlhRW5kcG9pbnRT
ZXNzaW9uQ29uZmlndXJhdGlvbjsKLWNsYXNzIE1lZGlhU3RyZWFtVHJhY2s7Ci1jbGFzcyBSVENE
YXRhQ2hhbm5lbEhhbmRsZXI7Ci1jbGFzcyBSZWFsdGltZU1lZGlhU291cmNlOwotCi1zdHJ1Y3Qg
SWNlQ2FuZGlkYXRlOwotc3RydWN0IE1lZGlhUGF5bG9hZDsKLXN0cnVjdCBSVENEYXRhQ2hhbm5l
bEluaXQ7Ci0KLXR5cGVkZWYgc3RkOjp1bmlxdWVfcHRyPE1lZGlhRW5kcG9pbnQ+ICgqQ3JlYXRl
TWVkaWFFbmRwb2ludCkoTWVkaWFFbmRwb2ludENsaWVudCYpOwotdHlwZWRlZiBWZWN0b3I8TWVk
aWFQYXlsb2FkPiBNZWRpYVBheWxvYWRWZWN0b3I7Ci10eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBS
ZWFsdGltZU1lZGlhU291cmNlKj4gUmVhbHRpbWVNZWRpYVNvdXJjZU1hcDsKLQotY2xhc3MgTWVk
aWFFbmRwb2ludCB7Ci1wdWJsaWM6Ci0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIENyZWF0ZU1l
ZGlhRW5kcG9pbnQgY3JlYXRlOwotICAgIHZpcnR1YWwgfk1lZGlhRW5kcG9pbnQoKSB7IH0KLQot
ICAgIGVudW0gY2xhc3MgVXBkYXRlUmVzdWx0IHsKLSAgICAgICAgU3VjY2VzcywKLSAgICAgICAg
U3VjY2Vzc1dpdGhJY2VSZXN0YXJ0LAotICAgICAgICBGYWlsZWQKLSAgICB9OwotCi0gICAgdmly
dHVhbCB2b2lkIHNldENvbmZpZ3VyYXRpb24oTWVkaWFFbmRwb2ludENvbmZpZ3VyYXRpb24mJikg
PSAwOwotCi0gICAgdmlydHVhbCB2b2lkIGdlbmVyYXRlRHRsc0luZm8oKSA9IDA7Ci0gICAgdmly
dHVhbCBNZWRpYVBheWxvYWRWZWN0b3IgZ2V0RGVmYXVsdEF1ZGlvUGF5bG9hZHMoKSA9IDA7Ci0g
ICAgdmlydHVhbCBNZWRpYVBheWxvYWRWZWN0b3IgZ2V0RGVmYXVsdFZpZGVvUGF5bG9hZHMoKSA9
IDA7Ci0gICAgdmlydHVhbCBNZWRpYVBheWxvYWRWZWN0b3IgZmlsdGVyUGF5bG9hZHMoY29uc3Qg
TWVkaWFQYXlsb2FkVmVjdG9yJiByZW1vdGVQYXlsb2FkcywgY29uc3QgTWVkaWFQYXlsb2FkVmVj
dG9yJiBkZWZhdWx0UGF5bG9hZHMpID0gMDsKLQotICAgIHZpcnR1YWwgVXBkYXRlUmVzdWx0IHVw
ZGF0ZVJlY2VpdmVDb25maWd1cmF0aW9uKE1lZGlhRW5kcG9pbnRTZXNzaW9uQ29uZmlndXJhdGlv
biosIGJvb2wgaXNJbml0aWF0b3IpID0gMDsKLSAgICB2aXJ0dWFsIFVwZGF0ZVJlc3VsdCB1cGRh
dGVTZW5kQ29uZmlndXJhdGlvbihNZWRpYUVuZHBvaW50U2Vzc2lvbkNvbmZpZ3VyYXRpb24qLCBj
b25zdCBSZWFsdGltZU1lZGlhU291cmNlTWFwJiwgYm9vbCBpc0luaXRpYXRvcikgPSAwOwotCi0g
ICAgdmlydHVhbCB2b2lkIGFkZFJlbW90ZUNhbmRpZGF0ZShjb25zdCBJY2VDYW5kaWRhdGUmLCBj
b25zdCBTdHJpbmcmIG1pZCwgY29uc3QgU3RyaW5nJiB1ZnJhZywgY29uc3QgU3RyaW5nJiBwYXNz
d29yZCkgPSAwOwotCi0gICAgdmlydHVhbCBSZWY8UmVhbHRpbWVNZWRpYVNvdXJjZT4gY3JlYXRl
TXV0ZWRSZW1vdGVTb3VyY2UoY29uc3QgU3RyaW5nJiBtaWQsIFJlYWx0aW1lTWVkaWFTb3VyY2U6
OlR5cGUpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVwbGFjZVNlbmRTb3VyY2UoUmVhbHRpbWVN
ZWRpYVNvdXJjZSYsIGNvbnN0IFN0cmluZyYgbWlkKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJl
cGxhY2VNdXRlZFJlbW90ZVNvdXJjZU1pZChjb25zdCBTdHJpbmcmIG9sZE1pZCwgY29uc3QgU3Ry
aW5nJiBuZXdNaWQpID0gMDsKLQotICAgIHZpcnR1YWwgc3RkOjp1bmlxdWVfcHRyPFJUQ0RhdGFD
aGFubmVsSGFuZGxlcj4gY3JlYXRlRGF0YUNoYW5uZWxIYW5kbGVyKGNvbnN0IFN0cmluZyYsIGNv
bnN0IFJUQ0RhdGFDaGFubmVsSW5pdCYpID0gMDsKLQotICAgIHZpcnR1YWwgdm9pZCBzdG9wKCkg
PSAwOwotCi0gICAgdmlydHVhbCB2b2lkIGVtdWxhdGVQbGF0Zm9ybUV2ZW50KGNvbnN0IFN0cmlu
ZyYpIHsgfTsKLQotICAgIHZpcnR1YWwgdm9pZCBnZXRTdGF0cyhNZWRpYVN0cmVhbVRyYWNrKiwg
UGVlckNvbm5lY3Rpb246OlN0YXRzUHJvbWlzZSYmIHByb21pc2UpIHsgcHJvbWlzZS5yZWplY3Qo
Tm90U3VwcG9ydGVkRXJyb3IpOyB9Ci19OwotCi1jbGFzcyBNZWRpYUVuZHBvaW50Q2xpZW50IHsK
LXB1YmxpYzoKLSAgICB2aXJ0dWFsIHZvaWQgZ290RHRsc0ZpbmdlcnByaW50KGNvbnN0IFN0cmlu
ZyYgZmluZ2VycHJpbnQsIGNvbnN0IFN0cmluZyYgZmluZ2VycHJpbnRGdW5jdGlvbikgPSAwOwot
ICAgIHZpcnR1YWwgdm9pZCBnb3RJY2VDYW5kaWRhdGUoY29uc3QgU3RyaW5nJiBtaWQsIEljZUNh
bmRpZGF0ZSYmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRvbmVHYXRoZXJpbmdDYW5kaWRhdGVz
KGNvbnN0IFN0cmluZyYgbWlkKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGljZVRyYW5zcG9ydFN0
YXRlQ2hhbmdlZChjb25zdCBTdHJpbmcmIG1pZCwgUlRDSWNlVHJhbnNwb3J0U3RhdGUpID0gMDsK
LQotICAgIHZpcnR1YWwgfk1lZGlhRW5kcG9pbnRDbGllbnQoKSB7IH0KLX07Ci0KLX0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShXRUJfUlRDKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFFbmRwb2ludFNlc3Npb25D
b25maWd1cmF0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRp
YUVuZHBvaW50U2Vzc2lvbkNvbmZpZ3VyYXRpb24uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggYmYyYmQxZThiOTdjNGU3ODk5MTkxMzEzZGEyYThmZWYyYmIzOGVkOS4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYUVuZHBvaW50U2Vzc2lvbkNvbmZpZ3VyYXRpb24uaAorKysg
L2Rldi9udWxsCkBAIC0xLDkzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgRXJp
Y3Nzb24gQUIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIKLSAqICAgIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqICAgIGRpc3RyaWJ1dGlvbi4KLSAqIDMu
IE5laXRoZXIgdGhlIG5hbWUgb2YgRXJpY3Nzb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJp
YnV0b3JzCi0gKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tIHRoaXMKLSAqICAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
LSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBNZWRpYUVuZHBvaW50U2Vz
c2lvbkNvbmZpZ3VyYXRpb25faAotI2RlZmluZSBNZWRpYUVuZHBvaW50U2Vzc2lvbkNvbmZpZ3Vy
YXRpb25faAotCi0jaWYgRU5BQkxFKFdFQl9SVEMpCi0KLSNpbmNsdWRlICJQZWVyQ29ubmVjdGlv
blN0YXRlcy5oIgotI2luY2x1ZGUgIlBlZXJNZWRpYURlc2NyaXB0aW9uLmgiCi0jaW5jbHVkZSA8
d3RmL0NyeXB0b2dyYXBoaWNhbGx5UmFuZG9tTnVtYmVyLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotY2xhc3MgTWVkaWFFbmRwb2ludFNlc3Npb25Db25maWd1cmF0aW9uIDogcHVibGljIFJl
ZkNvdW50ZWQ8TWVkaWFFbmRwb2ludFNlc3Npb25Db25maWd1cmF0aW9uPiB7Ci1wdWJsaWM6Ci0g
ICAgc3RhdGljIFJlZlB0cjxNZWRpYUVuZHBvaW50U2Vzc2lvbkNvbmZpZ3VyYXRpb24+IGNyZWF0
ZSgpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IE1lZGlhRW5kcG9pbnRTZXNz
aW9uQ29uZmlndXJhdGlvbigpKTsKLSAgICB9Ci0gICAgdmlydHVhbCB+TWVkaWFFbmRwb2ludFNl
c3Npb25Db25maWd1cmF0aW9uKCkgeyB9Ci0KLSAgICBpbnQ2NF90IHNlc3Npb25JZCgpIGNvbnN0
IHsgcmV0dXJuIG1fc2Vzc2lvbklkOyB9Ci0gICAgdm9pZCBzZXRTZXNzaW9uSWQoaW50NjRfdCBz
ZXNzaW9uSWQpIHsgbV9zZXNzaW9uSWQgPSBzZXNzaW9uSWQ7IH0KLQotICAgIHVuc2lnbmVkIHNl
c3Npb25WZXJzaW9uKCkgY29uc3QgeyByZXR1cm4gbV9zZXNzaW9uVmVyc2lvbjsgfQotICAgIHZv
aWQgc2V0U2Vzc2lvblZlcnNpb24odW5zaWduZWQgc2Vzc2lvblZlcnNpb24pIHsgbV9zZXNzaW9u
VmVyc2lvbiA9IHNlc3Npb25WZXJzaW9uOyB9Ci0KLSAgICBWZWN0b3I8UGVlck1lZGlhRGVzY3Jp
cHRpb24+JiBtZWRpYURlc2NyaXB0aW9ucygpIHsgcmV0dXJuIG1fbWVkaWFEZXNjcmlwdGlvbnM7
IH0KLSAgICBjb25zdCBWZWN0b3I8UGVlck1lZGlhRGVzY3JpcHRpb24+JiBtZWRpYURlc2NyaXB0
aW9ucygpIGNvbnN0IHsgcmV0dXJuIG1fbWVkaWFEZXNjcmlwdGlvbnM7IH0KLSAgICB2b2lkIGFk
ZE1lZGlhRGVzY3JpcHRpb24oUGVlck1lZGlhRGVzY3JpcHRpb24mJiBkZXNjcmlwdGlvbikgeyBt
X21lZGlhRGVzY3JpcHRpb25zLmFwcGVuZChXVEZNb3ZlKGRlc2NyaXB0aW9uKSk7IH0KLQotICAg
IFBlZXJDb25uZWN0aW9uU3RhdGVzOjpCdW5kbGVQb2xpY3kgYnVuZGxlUG9saWN5KCkgY29uc3Qg
eyByZXR1cm4gbV9idW5kbGVQb2xpY3k7IH0KLSAgICB2b2lkIHNldEJ1bmRsZVBvbGljeShQZWVy
Q29ubmVjdGlvblN0YXRlczo6QnVuZGxlUG9saWN5IGJ1bmRsZVBvbGljeSkgeyBtX2J1bmRsZVBv
bGljeSA9IGJ1bmRsZVBvbGljeTsgfQotCi0gICAgUmVmUHRyPE1lZGlhRW5kcG9pbnRTZXNzaW9u
Q29uZmlndXJhdGlvbj4gY2xvbmUoKSBjb25zdAotICAgIHsKLSAgICAgICAgUmVmUHRyPE1lZGlh
RW5kcG9pbnRTZXNzaW9uQ29uZmlndXJhdGlvbj4gY29weSA9IGNyZWF0ZSgpOwotICAgICAgICBj
b3B5LT5tX3Nlc3Npb25JZCA9IG1fc2Vzc2lvbklkOwotICAgICAgICBjb3B5LT5tX3Nlc3Npb25W
ZXJzaW9uID0gbV9zZXNzaW9uVmVyc2lvbjsKLSAgICAgICAgY29weS0+bV9tZWRpYURlc2NyaXB0
aW9ucyA9IG1fbWVkaWFEZXNjcmlwdGlvbnM7Ci0gICAgICAgIGNvcHktPm1fYnVuZGxlUG9saWN5
ID0gbV9idW5kbGVQb2xpY3k7Ci0KLSAgICAgICAgcmV0dXJuIGNvcHk7Ci0gICAgfQotCi1wcml2
YXRlOgotICAgIE1lZGlhRW5kcG9pbnRTZXNzaW9uQ29uZmlndXJhdGlvbigpCi0gICAgewotICAg
ICAgICBtX3Nlc3Npb25JZCA9IGNyeXB0b2dyYXBoaWNhbGx5UmFuZG9tTnVtYmVyKCk7Ci0gICAg
ICAgIG1fc2Vzc2lvbklkID0gbV9zZXNzaW9uSWQgPDwgMzEgfCBjcnlwdG9ncmFwaGljYWxseVJh
bmRvbU51bWJlcigpOwotICAgIH0KLQotICAgIGludDY0X3QgbV9zZXNzaW9uSWQ7Ci0gICAgdW5z
aWduZWQgbV9zZXNzaW9uVmVyc2lvbiB7IDAgfTsKLQotICAgIFZlY3RvcjxQZWVyTWVkaWFEZXNj
cmlwdGlvbj4gbV9tZWRpYURlc2NyaXB0aW9uczsKLQotICAgIFBlZXJDb25uZWN0aW9uU3RhdGVz
OjpCdW5kbGVQb2xpY3kgbV9idW5kbGVQb2xpY3kgeyBQZWVyQ29ubmVjdGlvblN0YXRlczo6QnVu
ZGxlUG9saWN5OjpCYWxhbmNlZCB9OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0j
ZW5kaWYgLy8gRU5BQkxFKFdFQl9SVEMpCi0KLSNlbmRpZiAvLyBNZWRpYUVuZHBvaW50U2Vzc2lv
bkNvbmZpZ3VyYXRpb25faApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVk
aWFzdHJlYW0vTWVkaWFTdHJlYW1Qcml2YXRlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
ZWRpYXN0cmVhbS9NZWRpYVN0cmVhbVByaXZhdGUuaAppbmRleCA5ZjFhYjUyYjVjNmRiMjg5OWRi
ZjZhYzc5OTc4Nzg5MTA2MjQ5YzBmLi4xMjVlODIxODY0MTgzYmYwNGViN2MyNDc1MDgxOTA5MzM1
MDA4NTIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9N
ZWRpYVN0cmVhbVByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0
cmVhbS9NZWRpYVN0cmVhbVByaXZhdGUuaApAQCAtNTAsNyArNTAsNiBAQAogCiAjaWYgVVNFKEdT
VFJFQU1FUikKICNpbmNsdWRlICJHUmVmUHRyR1N0cmVhbWVyLmgiCi0jaW5jbHVkZSA8b3dyL293
cl9nc3RfdmlkZW9fcmVuZGVyZXIuaD4KICNlbmRpZgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZU1l
ZGlhU291cmNlQ2VudGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFt
L1JlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXIuY3BwCmluZGV4IDc2M2ZiMmVkZjYyMDhhOTFiYmQ3
MDlhY2JlZjE0YTk1NDEzZGI4YjYuLjZhZDlhZmRjZjNmZjY1YzM0YTgzZGI5YjNiZGU1YTE0MzM1
MTNjNWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1Jl
YWx0aW1lTWVkaWFTb3VyY2VDZW50ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21lZGlhc3RyZWFtL1JlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXIuY3BwCkBAIC0zNSw2ICszNSwx
MSBAQAogCiAjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKIAorLy8gRklYTUU6IEdUSyB0byBpbXBs
ZW1lbnQgaXRzIG93biBSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyLgorI2lmIFBMQVRGT1JNKEdU
SykKKyNpbmNsdWRlICJNb2NrUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlci5oIgorI2VuZGlmCisK
ICNpbmNsdWRlICJDYXB0dXJlRGV2aWNlTWFuYWdlci5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIK
ICNpbmNsdWRlICJNZWRpYVN0cmVhbVByaXZhdGUuaCIKQEAgLTU5LDggKzY0LDE0IEBAIFJlYWx0
aW1lTWVkaWFTb3VyY2VDZW50ZXImIFJlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXI6OnNpbmdsZXRv
bigpCiAgICAgUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlciogb3ZlcnJpZGUgPSBtZWRpYVN0cmVh
bUNlbnRlck92ZXJyaWRlKCk7CiAgICAgaWYgKG92ZXJyaWRlKQogICAgICAgICByZXR1cm4gKm92
ZXJyaWRlOwotICAgIAorI2lmIFBMQVRGT1JNKEdUSykKKyAgICBXVEZMb2dBbHdheXMoIldlYktp
dEdUSyBMSUJXRUJSVEMgUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlciBOT1QgSU1QTEVNRU5URUQu
IFJldHVybmluZyBNb2NrUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlciBpbnN0ZWFkIHRvIGF2b2lk
IGNyYXNoIVxuIik7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBzdGF0aWMgTmV2
ZXJEZXN0cm95ZWQ8TW9ja1JlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXI+IGNlbnRlcjsKKyAgICBy
ZXR1cm4gY2VudGVyOworI2Vsc2UKICAgICByZXR1cm4gUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRl
cjo6cGxhdGZvcm1DZW50ZXIoKTsKKyNlbmRpZgogfQogCiB2b2lkIFJlYWx0aW1lTWVkaWFTb3Vy
Y2VDZW50ZXI6OnNldFNoYXJlZFN0cmVhbUNlbnRlck92ZXJyaWRlKFJlYWx0aW1lTWVkaWFTb3Vy
Y2VDZW50ZXIqIGNlbnRlcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21l
ZGlhc3RyZWFtL1NEUFByb2Nlc3NvclNjcmlwdFJlc291cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21lZGlhc3RyZWFtL1NEUFByb2Nlc3NvclNjcmlwdFJlc291cmNlLmNwcApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjY5ZWQyYTc2MTU4MTcyOTcwYzE0OWM4MzA0Y2Uw
YTM0MmZmMDk2MS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9TRFBQcm9jZXNzb3JTY3JpcHRS
ZXNvdXJjZS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw1MyArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDE1IEVyaWNzc29uIEFCLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiAgICBpbiB0aGUgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiAgICBkaXN0
cmlidXRpb24uCi0gKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIEVyaWNzc29uIG5vciB0aGUgbmFt
ZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0gKiAgICBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0g
KiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRl
ICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShXRUJfUlRDKQotI2luY2x1ZGUgIlNEUFByb2Nlc3Nv
clNjcmlwdFJlc291cmNlLmgiCi0KLSNpbmNsdWRlICJTRFBQcm9jZXNzb3JTY3JpcHRzRGF0YS5o
IgotI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci0KLW5hbWVzcGFjZSBTRFBQcm9jZXNzb3JTY3JpcHRSZXNvdXJjZSB7Ci0KLWNvbnN0IFN0cmlu
ZyYgc2NyaXB0U3RyaW5nKCkKLXsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgU3Ry
aW5nPiBzY3JpcHQoc2RwSmF2YVNjcmlwdCwgc2l6ZW9mKHNkcEphdmFTY3JpcHQpKTsKLSAgICBy
ZXR1cm4gc2NyaXB0OwotfQotCi19IC8vIG5hbWVzcGFjZSBTRFBQcm9jZXNzb3JTY3JpcHRSZXNv
dXJjZQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoV0VCX1JU
QykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1NEUFBy
b2Nlc3NvclNjcmlwdFJlc291cmNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0
cmVhbS9TRFBQcm9jZXNzb3JTY3JpcHRSZXNvdXJjZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCBjYjU0NDNiYjA3MGNmNzdmMWI2ZWVmMzBjMjNlNTEyZjZkNDU1NDY0Li4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21lZGlhc3RyZWFtL1NEUFByb2Nlc3NvclNjcmlwdFJlc291cmNlLmgKKysrIC9kZXYv
bnVsbApAQCAtMSw1MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEVyaWNzc29u
IEFCLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyCi0gKiAgICBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiAgICBkaXN0cmlidXRpb24uCi0gKiAzLiBOZWl0
aGVyIHRoZSBuYW1lIG9mIEVyaWNzc29uIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9y
cwotICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbSB0aGlzCi0gKiAgICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgU0RQUHJvY2Vzc29yU2NyaXB0UmVz
b3VyY2VfaAotI2RlZmluZSBTRFBQcm9jZXNzb3JTY3JpcHRSZXNvdXJjZV9oCi0KLSNpZiBFTkFC
TEUoV0VCX1JUQykKLQotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3Bh
Y2UgV2ViQ29yZSB7Ci0KLW5hbWVzcGFjZSBTRFBQcm9jZXNzb3JTY3JpcHRSZXNvdXJjZSB7Ci0K
LWNvbnN0IFN0cmluZyYgc2NyaXB0U3RyaW5nKCk7Ci0KLX0gLy8gbmFtZXNwYWNlIFNEUFByb2Nl
c3NvclNjcmlwdFJlc291cmNlCi0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8v
IEVOQUJMRShXRUJfUlRDKQotCi0jZW5kaWYgLy8gU0RQUHJvY2Vzc29yU2NyaXB0UmVzb3VyY2Vf
aApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vb3Blbndl
YnJ0Yy9NZWRpYUVuZHBvaW50T3dyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlh
c3RyZWFtL29wZW53ZWJydGMvTWVkaWFFbmRwb2ludE93ci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDhhNTg0ODY3MjU0ODNjMmRjZTBhNDI0NGI0ZWRlMTVmYmZhYmQyZTkuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vb3BlbndlYnJ0Yy9NZWRpYUVuZHBvaW50T3dyLmNwcAor
KysgL2Rldi9udWxsCkBAIC0xLDc1MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE1
LCAyMDE2IEVyaWNzc29uIEFCLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiAgICBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiAgICBkaXN0cmlidXRp
b24uCi0gKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIEVyaWNzc29uIG5vciB0aGUgbmFtZXMgb2Yg
aXRzIGNvbnRyaWJ1dG9ycwotICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0gKiAgICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMg
SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0g
KiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25m
aWcuaCIKLQotI2lmIEVOQUJMRShXRUJfUlRDKQotI2luY2x1ZGUgIk1lZGlhRW5kcG9pbnRPd3Iu
aCIKLQotI2luY2x1ZGUgIk1lZGlhRW5kcG9pbnRTZXNzaW9uQ29uZmlndXJhdGlvbi5oIgotI2lu
Y2x1ZGUgIk1lZGlhUGF5bG9hZC5oIgotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0jaW5j
bHVkZSAiT3BlbldlYlJUQ1V0aWxpdGllcy5oIgotI2luY2x1ZGUgIlBlZXJDb25uZWN0aW9uU3Rh
dGVzLmgiCi0jaW5jbHVkZSAiUlRDRGF0YUNoYW5uZWxIYW5kbGVyLmgiCi0jaW5jbHVkZSAiUmVh
bHRpbWVBdWRpb1NvdXJjZU93ci5oIgotI2luY2x1ZGUgIlJlYWx0aW1lVmlkZW9Tb3VyY2VPd3Iu
aCIKLSNpbmNsdWRlIDxvd3Ivb3dyLmg+Ci0jaW5jbHVkZSA8b3dyL293cl9hdWRpb19wYXlsb2Fk
Lmg+Ci0jaW5jbHVkZSA8b3dyL293cl9jcnlwdG9fdXRpbHMuaD4KLSNpbmNsdWRlIDxvd3Ivb3dy
X21lZGlhX3Nlc3Npb24uaD4KLSNpbmNsdWRlIDxvd3Ivb3dyX3RyYW5zcG9ydF9hZ2VudC5oPgot
I2luY2x1ZGUgPG93ci9vd3JfdmlkZW9fcGF5bG9hZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NT
dHJpbmcuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdGF0aWMgdm9pZCBnb3RDYW5kaWRh
dGUoT3dyU2Vzc2lvbiosIE93ckNhbmRpZGF0ZSosIE1lZGlhRW5kcG9pbnRPd3IqKTsKLXN0YXRp
YyB2b2lkIGNhbmRpZGF0ZUdhdGhlcmluZ0RvbmUoT3dyU2Vzc2lvbiosIE1lZGlhRW5kcG9pbnRP
d3IqKTsKLXN0YXRpYyB2b2lkIGljZUNvbm5lY3Rpb25TdGF0ZUNoYW5nZShPd3JTZXNzaW9uKiwg
R1BhcmFtU3BlYyosIE1lZGlhRW5kcG9pbnRPd3IqKTsKLXN0YXRpYyB2b2lkIGdvdEluY29taW5n
U291cmNlKE93ck1lZGlhU2Vzc2lvbiosIE93ck1lZGlhU291cmNlKiwgTWVkaWFFbmRwb2ludE93
ciopOwotCi1zdGF0aWMgY29uc3QgVmVjdG9yPFN0cmluZz4gY2FuZGlkYXRlVHlwZXMgPSB7ICJo
b3N0IiwgInNyZmx4IiwgInByZmx4IiwgInJlbGF5IiB9Owotc3RhdGljIGNvbnN0IFZlY3RvcjxT
dHJpbmc+IGNhbmRpZGF0ZVRjcFR5cGVzID0geyAiIiwgImFjdGl2ZSIsICJwYXNzaXZlIiwgInNv
IiB9Owotc3RhdGljIGNvbnN0IFZlY3RvcjxTdHJpbmc+IGNvZGVjVHlwZXMgPSB7ICJOT05FIiwg
IlBDTVUiLCAiUENNQSIsICJPUFVTIiwgIkgyNjQiLCAiVlA4IiB9OwotCi1zdGF0aWMgY29uc3Qg
Y2hhciogaGVscGVyU2VydmVyUmVnRXggPSAiKHR1cm5zfHR1cm58c3R1bik6KFtcXHdcXC5cXC1d
K3xcXFtbXFx3XFw6XStcXF0pKDpcXGQrKT8oXFw/LispPyI7Ci0KLXN0YXRpYyBjb25zdCB1bnNp
Z25lZCBzaG9ydCBoZWxwZXJTZXJ2ZXJEZWZhdWx0UG9ydCA9IDM0Nzg7Ci1zdGF0aWMgY29uc3Qg
dW5zaWduZWQgc2hvcnQgY2FuZGlkYXRlRGVmYXVsdFBvcnQgPSA5OwotCi1zdGF0aWMgc3RkOjp1
bmlxdWVfcHRyPE1lZGlhRW5kcG9pbnQ+IGNyZWF0ZU1lZGlhRW5kcG9pbnRPd3IoTWVkaWFFbmRw
b2ludENsaWVudCYgY2xpZW50KQotewotICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8TWVkaWFF
bmRwb2ludD4obmV3IE1lZGlhRW5kcG9pbnRPd3IoY2xpZW50KSk7Ci19Ci0KLUNyZWF0ZU1lZGlh
RW5kcG9pbnQgTWVkaWFFbmRwb2ludDo6Y3JlYXRlID0gY3JlYXRlTWVkaWFFbmRwb2ludE93cjsK
LQotTWVkaWFFbmRwb2ludE93cjo6TWVkaWFFbmRwb2ludE93cihNZWRpYUVuZHBvaW50Q2xpZW50
JiBjbGllbnQpCi0gICAgOiBtX3RyYW5zcG9ydEFnZW50KG51bGxwdHIpCi0gICAgLCBtX2NsaWVu
dChjbGllbnQpCi0gICAgLCBtX251bWJlck9mUmVjZWl2ZVByZXBhcmVkU2Vzc2lvbnMoMCkKLSAg
ICAsIG1fbnVtYmVyT2ZTZW5kUHJlcGFyZWRTZXNzaW9ucygwKQotewotICAgIGluaXRpYWxpemVP
cGVuV2ViUlRDKCk7Ci0KLSAgICBHUmVnZXhDb21waWxlRmxhZ3MgY29tcGlsZUZsYWdzID0gR19S
RUdFWF9KQVZBU0NSSVBUX0NPTVBBVDsKLSAgICBHUmVnZXhNYXRjaEZsYWdzIG1hdGNoRmxhZ3Mg
PSBzdGF0aWNfY2FzdDxHUmVnZXhNYXRjaEZsYWdzPigwKTsKLSAgICBtX2hlbHBlclNlcnZlclJl
Z0V4ID0gZ19yZWdleF9uZXcoaGVscGVyU2VydmVyUmVnRXgsIGNvbXBpbGVGbGFncywgbWF0Y2hG
bGFncywgbnVsbHB0cik7Ci19Ci0KLU1lZGlhRW5kcG9pbnRPd3I6On5NZWRpYUVuZHBvaW50T3dy
KCkKLXsKLSAgICBzdG9wKCk7Ci0KLSAgICBnX3JlZ2V4X3VucmVmKG1faGVscGVyU2VydmVyUmVn
RXgpOwotfQotCi12b2lkIE1lZGlhRW5kcG9pbnRPd3I6OnNldENvbmZpZ3VyYXRpb24oTWVkaWFF
bmRwb2ludENvbmZpZ3VyYXRpb24mJiBjb25maWd1cmF0aW9uKQotewotICAgIG1fY29uZmlndXJh
dGlvbiA9IFdURk1vdmUoY29uZmlndXJhdGlvbik7Ci19Ci0KLXN0ZDo6dW5pcXVlX3B0cjxSVENE
YXRhQ2hhbm5lbEhhbmRsZXI+IE1lZGlhRW5kcG9pbnRPd3I6OmNyZWF0ZURhdGFDaGFubmVsSGFu
ZGxlcihjb25zdCBTdHJpbmcmLCBjb25zdCBSVENEYXRhQ2hhbm5lbEluaXQmKQotewotICAgIC8v
IEZJWE1FOiBJbXBsZW1lbnQgZGF0YSBjaGFubmVsLgotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwotICAgIHJldHVybiBudWxscHRyOwotfQotCi1zdGF0aWMgdm9pZCBjcnlwdG9EYXRhQ2FsbGJh
Y2soZ2NoYXIqIHByaXZhdGVLZXksIGdjaGFyKiBjZXJ0aWZpY2F0ZSwgZ2NoYXIqIGZpbmdlcnBy
aW50LCBnY2hhciogZmluZ2VycHJpbnRGdW5jdGlvbiwgZ3BvaW50ZXIgZGF0YSkKLXsKLSAgICBN
ZWRpYUVuZHBvaW50T3dyKiBtZWRpYUVuZHBvaW50ID0gKE1lZGlhRW5kcG9pbnRPd3IqKSBkYXRh
OwotICAgIG1lZGlhRW5kcG9pbnQtPmRpc3BhdGNoRHRsc0ZpbmdlcnByaW50KGdfc3RyZHVwKHBy
aXZhdGVLZXkpLCBnX3N0cmR1cChjZXJ0aWZpY2F0ZSksIFN0cmluZyhmaW5nZXJwcmludCksIFN0
cmluZyhmaW5nZXJwcmludEZ1bmN0aW9uKSk7Ci19Ci0KLXZvaWQgTWVkaWFFbmRwb2ludE93cjo6
Z2VuZXJhdGVEdGxzSW5mbygpCi17Ci0gICAgb3dyX2NyeXB0b19jcmVhdGVfY3J5cHRvX2RhdGEo
Y3J5cHRvRGF0YUNhbGxiYWNrLCB0aGlzKTsKLX0KLQotTWVkaWFQYXlsb2FkVmVjdG9yIE1lZGlh
RW5kcG9pbnRPd3I6OmdldERlZmF1bHRBdWRpb1BheWxvYWRzKCkKLXsKLSAgICBNZWRpYVBheWxv
YWRWZWN0b3IgcGF5bG9hZHM7Ci0KLSAgICAvLyBGSVhNRTogVGhpcyBsaXN0IHNob3VsZCBiZSBi
YXNlZCBvbiB3aGF0IGlzIGF2YWlsYWJsZSBpbiB0aGUgcGxhdGZvcm0gKGJ1ZzogaHR0cDovL3dl
YmtpdC5vcmcvYi8xNjM3MjMpCi0gICAgTWVkaWFQYXlsb2FkIHBheWxvYWQxOwotICAgIHBheWxv
YWQxLnR5cGUgPSAxMTE7Ci0gICAgcGF5bG9hZDEuZW5jb2RpbmdOYW1lID0gIk9QVVMiOwotICAg
IHBheWxvYWQxLmNsb2NrUmF0ZSA9IDQ4MDAwOwotICAgIHBheWxvYWQxLmNoYW5uZWxzID0gMjsK
LSAgICBwYXlsb2Fkcy5hcHBlbmQoV1RGTW92ZShwYXlsb2FkMSkpOwotCi0gICAgTWVkaWFQYXls
b2FkIHBheWxvYWQyOwotICAgIHBheWxvYWQyLnR5cGUgPSA4OwotICAgIHBheWxvYWQyLmVuY29k
aW5nTmFtZSA9ICJQQ01BIjsKLSAgICBwYXlsb2FkMi5jbG9ja1JhdGUgPSA4MDAwOwotICAgIHBh
eWxvYWQyLmNoYW5uZWxzID0gMTsKLSAgICBwYXlsb2Fkcy5hcHBlbmQoV1RGTW92ZShwYXlsb2Fk
MikpOwotCi0gICAgTWVkaWFQYXlsb2FkIHBheWxvYWQzOwotICAgIHBheWxvYWQzLnR5cGUgPSAw
OwotICAgIHBheWxvYWQzLmVuY29kaW5nTmFtZSA9ICJQQ01VIjsKLSAgICBwYXlsb2FkMy5jbG9j
a1JhdGUgPSA4MDAwOwotICAgIHBheWxvYWQzLmNoYW5uZWxzID0gMTsKLSAgICBwYXlsb2Fkcy5h
cHBlbmQoV1RGTW92ZShwYXlsb2FkMykpOwotCi0gICAgcmV0dXJuIHBheWxvYWRzOwotfQotCi1N
ZWRpYVBheWxvYWRWZWN0b3IgTWVkaWFFbmRwb2ludE93cjo6Z2V0RGVmYXVsdFZpZGVvUGF5bG9h
ZHMoKQotewotICAgIE1lZGlhUGF5bG9hZFZlY3RvciBwYXlsb2FkczsKLQotICAgIC8vIEZJWE1F
OiBUaGlzIGxpc3Qgc2hvdWxkIGJlIGJhc2VkIG9uIHdoYXQgaXMgYXZhaWxhYmxlIGluIHRoZSBw
bGF0Zm9ybSAoYnVnOiBodHRwOi8vd2Via2l0Lm9yZy9iLzE2MzcyMykKLSAgICBNZWRpYVBheWxv
YWQgcGF5bG9hZDE7Ci0gICAgcGF5bG9hZDEudHlwZSA9IDEwMzsKLSAgICBwYXlsb2FkMS5lbmNv
ZGluZ05hbWUgPSAiSDI2NCI7Ci0gICAgcGF5bG9hZDEuY2xvY2tSYXRlID0gOTAwMDA7Ci0gICAg
cGF5bG9hZDEuY2NtZmlyID0gdHJ1ZTsKLSAgICBwYXlsb2FkMS5uYWNrcGxpID0gdHJ1ZTsKLSAg
ICBwYXlsb2FkMS5hZGRQYXJhbWV0ZXIoInBhY2tldGl6YXRpb25Nb2RlIiwgMSk7Ci0gICAgcGF5
bG9hZHMuYXBwZW5kKFdURk1vdmUocGF5bG9hZDEpKTsKLQotICAgIE1lZGlhUGF5bG9hZCBwYXls
b2FkMjsKLSAgICBwYXlsb2FkMi50eXBlID0gMTAwOwotICAgIHBheWxvYWQyLmVuY29kaW5nTmFt
ZSA9ICJWUDgiOwotICAgIHBheWxvYWQyLmNsb2NrUmF0ZSA9IDkwMDAwOwotICAgIHBheWxvYWQy
LmNjbWZpciA9IHRydWU7Ci0gICAgcGF5bG9hZDIubmFja3BsaSA9IHRydWU7Ci0gICAgcGF5bG9h
ZDIubmFjayA9IHRydWU7Ci0gICAgcGF5bG9hZHMuYXBwZW5kKFdURk1vdmUocGF5bG9hZDIpKTsK
LQotICAgIE1lZGlhUGF5bG9hZCBwYXlsb2FkMzsKLSAgICBwYXlsb2FkMy50eXBlID0gMTIwOwot
ICAgIHBheWxvYWQzLmVuY29kaW5nTmFtZSA9ICJSVFgiOwotICAgIHBheWxvYWQzLmNsb2NrUmF0
ZSA9IDkwMDAwOwotICAgIHBheWxvYWQzLmFkZFBhcmFtZXRlcigiYXB0IiwgMTAwKTsKLSAgICBw
YXlsb2FkMy5hZGRQYXJhbWV0ZXIoInJ0eFRpbWUiLCAyMDApOwotICAgIHBheWxvYWRzLmFwcGVu
ZChXVEZNb3ZlKHBheWxvYWQzKSk7Ci0KLSAgICByZXR1cm4gcGF5bG9hZHM7Ci19Ci0KLXN0YXRp
YyBib29sIHBheWxvYWRzQ29udGFpblR5cGUoY29uc3QgVmVjdG9yPGNvbnN0IE1lZGlhUGF5bG9h
ZCo+JiBwYXlsb2FkcywgdW5zaWduZWQgcGF5bG9hZFR5cGUpCi17Ci0gICAgZm9yIChhdXRvIHBh
eWxvYWQgOiBwYXlsb2FkcykgewotICAgICAgICBBU1NFUlQocGF5bG9hZCk7Ci0gICAgICAgIGlm
IChwYXlsb2FkLT50eXBlID09IHBheWxvYWRUeXBlKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotTWVkaWFQYXlsb2FkVmVjdG9yIE1lZGlh
RW5kcG9pbnRPd3I6OmZpbHRlclBheWxvYWRzKGNvbnN0IE1lZGlhUGF5bG9hZFZlY3RvciYgcmVt
b3RlUGF5bG9hZHMsIGNvbnN0IE1lZGlhUGF5bG9hZFZlY3RvciYgZGVmYXVsdFBheWxvYWRzKQot
ewotICAgIFZlY3Rvcjxjb25zdCBNZWRpYVBheWxvYWQqPiBmaWx0ZXJlZFBheWxvYWRzOwotCi0g
ICAgZm9yIChhdXRvJiByZW1vdGVQYXlsb2FkIDogcmVtb3RlUGF5bG9hZHMpIHsKLSAgICAgICAg
Y29uc3QgTWVkaWFQYXlsb2FkKiBkZWZhdWx0UGF5bG9hZCA9IG51bGxwdHI7Ci0gICAgICAgIGZv
ciAoYXV0byYgcCA6IGRlZmF1bHRQYXlsb2FkcykgewotICAgICAgICAgICAgaWYgKHAuZW5jb2Rp
bmdOYW1lID09IHJlbW90ZVBheWxvYWQuZW5jb2RpbmdOYW1lLmNvbnZlcnRUb0FTQ0lJVXBwZXJj
YXNlKCkpIHsKLSAgICAgICAgICAgICAgICBkZWZhdWx0UGF5bG9hZCA9ICZwOwotICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGlmICghZGVm
YXVsdFBheWxvYWQpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBpZiAoZGVmYXVs
dFBheWxvYWQtPnBhcmFtZXRlcnMuY29udGFpbnMoInBhY2tldGl6YXRpb25Nb2RlIikgJiYgcmVt
b3RlUGF5bG9hZC5wYXJhbWV0ZXJzLmNvbnRhaW5zKCJwYWNrZXRpemF0aW9uTW9kZSIpCi0gICAg
ICAgICAgICAmJiAoZGVmYXVsdFBheWxvYWQtPnBhcmFtZXRlcnMuZ2V0KCJwYWNrZXRpemF0aW9u
TW9kZSIpICE9IGRlZmF1bHRQYXlsb2FkLT5wYXJhbWV0ZXJzLmdldCgicGFja2V0aXphdGlvbk1v
ZGUiKSkpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBmaWx0ZXJlZFBheWxvYWRz
LmFwcGVuZCgmcmVtb3RlUGF5bG9hZCk7Ci0gICAgfQotCi0gICAgTWVkaWFQYXlsb2FkVmVjdG9y
IGZpbHRlcmVkQXB0UGF5bG9hZHM7Ci0KLSAgICBmb3IgKGF1dG8gZmlsdGVyZWRQYXlsb2FkIDog
ZmlsdGVyZWRQYXlsb2FkcykgewotICAgICAgICBpZiAoZmlsdGVyZWRQYXlsb2FkLT5wYXJhbWV0
ZXJzLmNvbnRhaW5zKCJhcHQiKSAmJiAoIXBheWxvYWRzQ29udGFpblR5cGUoZmlsdGVyZWRQYXls
b2FkcywgZmlsdGVyZWRQYXlsb2FkLT5wYXJhbWV0ZXJzLmdldCgiYXB0IikpKSkKLSAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICBmaWx0ZXJlZEFwdFBheWxvYWRzLmFwcGVuZCgqZmlsdGVy
ZWRQYXlsb2FkKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmlsdGVyZWRBcHRQYXlsb2FkczsKLX0K
LQotTWVkaWFFbmRwb2ludDo6VXBkYXRlUmVzdWx0IE1lZGlhRW5kcG9pbnRPd3I6OnVwZGF0ZVJl
Y2VpdmVDb25maWd1cmF0aW9uKE1lZGlhRW5kcG9pbnRTZXNzaW9uQ29uZmlndXJhdGlvbiogY29u
ZmlndXJhdGlvbiwgYm9vbCBpc0luaXRpYXRvcikKLXsKLSAgICBWZWN0b3I8VHJhbnNjZWl2ZXJD
b25maWc+IHRyYW5zY2VpdmVyQ29uZmlnczsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX3RyYW5z
Y2VpdmVycy5zaXplKCk7IGkgPCBjb25maWd1cmF0aW9uLT5tZWRpYURlc2NyaXB0aW9ucygpLnNp
emUoKTsgKytpKSB7Ci0gICAgICAgIFRyYW5zY2VpdmVyQ29uZmlnIGNvbmZpZzsKLSAgICAgICAg
Y29uZmlnLnR5cGUgPSBTZXNzaW9uVHlwZU1lZGlhOwotICAgICAgICBjb25maWcuaXNEdGxzQ2xp
ZW50ID0gY29uZmlndXJhdGlvbi0+bWVkaWFEZXNjcmlwdGlvbnMoKVtpXS5kdGxzU2V0dXAgPT0g
ImFjdGl2ZSI7Ci0gICAgICAgIGNvbmZpZy5taWQgPSBjb25maWd1cmF0aW9uLT5tZWRpYURlc2Ny
aXB0aW9ucygpW2ldLm1pZDsKLSAgICAgICAgdHJhbnNjZWl2ZXJDb25maWdzLmFwcGVuZChXVEZN
b3ZlKGNvbmZpZykpOwotICAgIH0KLQotICAgIGVuc3VyZVRyYW5zcG9ydEFnZW50QW5kVHJhbnNj
ZWl2ZXJzKGlzSW5pdGlhdG9yLCB0cmFuc2NlaXZlckNvbmZpZ3MpOwotCi0gICAgLy8gUHJlcGFy
ZSB0aGUgbmV3IHNlc3Npb25zLgotICAgIGZvciAodW5zaWduZWQgaSA9IG1fbnVtYmVyT2ZSZWNl
aXZlUHJlcGFyZWRTZXNzaW9uczsgaSA8IG1fdHJhbnNjZWl2ZXJzLnNpemUoKTsgKytpKSB7Ci0g
ICAgICAgIE93clNlc3Npb24qIHNlc3Npb24gPSBtX3RyYW5zY2VpdmVyc1tpXS0+c2Vzc2lvbigp
OwotICAgICAgICBwcmVwYXJlTWVkaWFTZXNzaW9uKE9XUl9NRURJQV9TRVNTSU9OKHNlc3Npb24p
LCAmY29uZmlndXJhdGlvbi0+bWVkaWFEZXNjcmlwdGlvbnMoKVtpXSwgaXNJbml0aWF0b3IpOwot
ICAgICAgICBvd3JfdHJhbnNwb3J0X2FnZW50X2FkZF9zZXNzaW9uKG1fdHJhbnNwb3J0QWdlbnQs
IHNlc3Npb24pOwotICAgIH0KLQotICAgIG93cl90cmFuc3BvcnRfYWdlbnRfc3RhcnQobV90cmFu
c3BvcnRBZ2VudCk7Ci0gICAgbV9udW1iZXJPZlJlY2VpdmVQcmVwYXJlZFNlc3Npb25zID0gbV90
cmFuc2NlaXZlcnMuc2l6ZSgpOwotCi0gICAgcmV0dXJuIFVwZGF0ZVJlc3VsdDo6U3VjY2VzczsK
LX0KLQotc3RhdGljIGNvbnN0IE1lZGlhUGF5bG9hZCogZmluZFJ0eFBheWxvYWQoY29uc3QgTWVk
aWFQYXlsb2FkVmVjdG9yJiBwYXlsb2FkcywgdW5zaWduZWQgYXB0KQotewotICAgIGZvciAoYXV0
byYgcGF5bG9hZCA6IHBheWxvYWRzKSB7Ci0gICAgICAgIGlmIChwYXlsb2FkLmVuY29kaW5nTmFt
ZS5jb252ZXJ0VG9BU0NJSVVwcGVyY2FzZSgpID09ICJSVFgiICYmIHBheWxvYWQucGFyYW1ldGVy
cy5jb250YWlucygiYXB0IikKLSAgICAgICAgICAgICYmIChwYXlsb2FkLnBhcmFtZXRlcnMuZ2V0
KCJhcHQiKSA9PSBhcHQpKQotICAgICAgICAgICAgcmV0dXJuICZwYXlsb2FkOwotICAgIH0KLSAg
ICByZXR1cm4gbnVsbHB0cjsKLX0KLQotTWVkaWFFbmRwb2ludDo6VXBkYXRlUmVzdWx0IE1lZGlh
RW5kcG9pbnRPd3I6OnVwZGF0ZVNlbmRDb25maWd1cmF0aW9uKE1lZGlhRW5kcG9pbnRTZXNzaW9u
Q29uZmlndXJhdGlvbiogY29uZmlndXJhdGlvbiwgY29uc3QgUmVhbHRpbWVNZWRpYVNvdXJjZU1h
cCYgc2VuZFNvdXJjZU1hcCwgYm9vbCBpc0luaXRpYXRvcikKLXsKLSAgICBWZWN0b3I8VHJhbnNj
ZWl2ZXJDb25maWc+IHRyYW5zY2VpdmVyQ29uZmlnczsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBt
X3RyYW5zY2VpdmVycy5zaXplKCk7IGkgPCBjb25maWd1cmF0aW9uLT5tZWRpYURlc2NyaXB0aW9u
cygpLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIFRyYW5zY2VpdmVyQ29uZmlnIGNvbmZpZzsKLSAg
ICAgICAgY29uZmlnLnR5cGUgPSBTZXNzaW9uVHlwZU1lZGlhOwotICAgICAgICBjb25maWcuaXNE
dGxzQ2xpZW50ID0gY29uZmlndXJhdGlvbi0+bWVkaWFEZXNjcmlwdGlvbnMoKVtpXS5kdGxzU2V0
dXAgIT0gImFjdGl2ZSI7Ci0gICAgICAgIGNvbmZpZy5taWQgPSBjb25maWd1cmF0aW9uLT5tZWRp
YURlc2NyaXB0aW9ucygpW2ldLm1pZDsKLSAgICAgICAgdHJhbnNjZWl2ZXJDb25maWdzLmFwcGVu
ZChXVEZNb3ZlKGNvbmZpZykpOwotICAgIH0KLQotICAgIGVuc3VyZVRyYW5zcG9ydEFnZW50QW5k
VHJhbnNjZWl2ZXJzKGlzSW5pdGlhdG9yLCB0cmFuc2NlaXZlckNvbmZpZ3MpOwotCi0gICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fdHJhbnNjZWl2ZXJzLnNpemUoKTsgKytpKSB7Ci0gICAg
ICAgIGF1dG8qIHNlc3Npb24gPSBtX3RyYW5zY2VpdmVyc1tpXS0+c2Vzc2lvbigpOwotICAgICAg
ICBhdXRvJiBtZGVzYyA9IGNvbmZpZ3VyYXRpb24tPm1lZGlhRGVzY3JpcHRpb25zKClbaV07Ci0K
LSAgICAgICAgaWYgKG1kZXNjLnR5cGUgPT0gImF1ZGlvIiB8fCBtZGVzYy50eXBlID09ICJ2aWRl
byIpCi0gICAgICAgICAgICBnX29iamVjdF9zZXQoc2Vzc2lvbiwgInJ0Y3AtbXV4IiwgbWRlc2Mu
cnRjcE11eCwgbnVsbHB0cik7Ci0KLSAgICAgICAgaWYgKG1kZXNjLmljZUNhbmRpZGF0ZXMuc2l6
ZSgpKSB7Ci0gICAgICAgICAgICBmb3IgKGF1dG8mIGNhbmRpZGF0ZSA6IG1kZXNjLmljZUNhbmRp
ZGF0ZXMpCi0gICAgICAgICAgICAgICAgaW50ZXJuYWxBZGRSZW1vdGVDYW5kaWRhdGUoc2Vzc2lv
biwgY2FuZGlkYXRlLCBtZGVzYy5pY2VVZnJhZywgbWRlc2MuaWNlUGFzc3dvcmQpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgaWYgKGkgPCBtX251bWJlck9mU2VuZFByZXBhcmVkU2Vzc2lvbnMpCi0g
ICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBpZiAoIXNlbmRTb3VyY2VNYXAuY29udGFp
bnMobWRlc2MubWlkKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGNvbnN0IE1l
ZGlhUGF5bG9hZCogcGF5bG9hZCA9IG51bGxwdHI7Ci0gICAgICAgIGZvciAoYXV0byYgcCA6IG1k
ZXNjLnBheWxvYWRzKSB7Ci0gICAgICAgICAgICBpZiAocC5lbmNvZGluZ05hbWUuY29udmVydFRv
QVNDSUlVcHBlcmNhc2UoKSAhPSAiUlRYIikgewotICAgICAgICAgICAgICAgIHBheWxvYWQgPSAm
cDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0g
ICAgICAgIGlmICghcGF5bG9hZCkKLSAgICAgICAgICAgIHJldHVybiBVcGRhdGVSZXN1bHQ6OkZh
aWxlZDsKLQotICAgICAgICBhdXRvKiBydHhQYXlsb2FkID0gZmluZFJ0eFBheWxvYWQobWRlc2Mu
cGF5bG9hZHMsIHBheWxvYWQtPnR5cGUpOwotICAgICAgICBhdXRvKiBzb3VyY2UgPSBzdGF0aWNf
Y2FzdDxSZWFsdGltZU1lZGlhU291cmNlT3dyKj4oc2VuZFNvdXJjZU1hcC5nZXQobWRlc2MubWlk
KSk7Ci0KLSAgICAgICAgQVNTRVJUKGNvZGVjVHlwZXMuZmluZChwYXlsb2FkLT5lbmNvZGluZ05h
bWUuY29udmVydFRvQVNDSUlVcHBlcmNhc2UoKSkgIT0gbm90Rm91bmQpOwotICAgICAgICBhdXRv
IGNvZGVjVHlwZSA9IHN0YXRpY19jYXN0PE93ckNvZGVjVHlwZT4oY29kZWNUeXBlcy5maW5kKHBh
eWxvYWQtPmVuY29kaW5nTmFtZS5jb252ZXJ0VG9BU0NJSVVwcGVyY2FzZSgpKSk7Ci0KLSAgICAg
ICAgT3dyUGF5bG9hZCogc2VuZFBheWxvYWQ7Ci0gICAgICAgIGlmIChtZGVzYy50eXBlID09ICJh
dWRpbyIpCi0gICAgICAgICAgICBzZW5kUGF5bG9hZCA9IG93cl9hdWRpb19wYXlsb2FkX25ldyhj
b2RlY1R5cGUsIHBheWxvYWQtPnR5cGUsIHBheWxvYWQtPmNsb2NrUmF0ZSwgcGF5bG9hZC0+Y2hh
bm5lbHMpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIHNlbmRQYXlsb2FkID0gb3dyX3Zp
ZGVvX3BheWxvYWRfbmV3KGNvZGVjVHlwZSwgcGF5bG9hZC0+dHlwZSwgcGF5bG9hZC0+Y2xvY2tS
YXRlLCBwYXlsb2FkLT5jY21maXIsIHBheWxvYWQtPm5hY2twbGkpOwotICAgICAgICAgICAgZ19v
YmplY3Rfc2V0KHNlbmRQYXlsb2FkLCAicnR4LXBheWxvYWQtdHlwZSIsIHJ0eFBheWxvYWQgPyBy
dHhQYXlsb2FkLT50eXBlIDogLTEsCi0gICAgICAgICAgICAgICAgInJ0eC10aW1lIiwgcnR4UGF5
bG9hZCAmJiBydHhQYXlsb2FkLT5wYXJhbWV0ZXJzLmNvbnRhaW5zKCJydHhUaW1lIikgPyBydHhQ
YXlsb2FkLT5wYXJhbWV0ZXJzLmdldCgicnR4VGltZSIpIDogMCwgbnVsbHB0cik7Ci0gICAgICAg
IH0KLQotICAgICAgICBvd3JfbWVkaWFfc2Vzc2lvbl9zZXRfc2VuZF9wYXlsb2FkKE9XUl9NRURJ
QV9TRVNTSU9OKHNlc3Npb24pLCBzZW5kUGF5bG9hZCk7Ci0gICAgICAgIG93cl9tZWRpYV9zZXNz
aW9uX3NldF9zZW5kX3NvdXJjZShPV1JfTUVESUFfU0VTU0lPTihzZXNzaW9uKSwgc291cmNlLT5t
ZWRpYVNvdXJjZSgpKTsKLQotICAgICAgICAvLyBGSVhNRTogU3VwcG9ydCBmb3IgZ3JvdXAtc3Ny
YyBTRFAgbGluZSBpcyBtaXNzaW5nLgotICAgICAgICBjb25zdCBWZWN0b3I8dW5zaWduZWQ+IHJl
Y2VpdmVTc3JjcyA9IG1kZXNjLnNzcmNzOwotICAgICAgICBpZiAocmVjZWl2ZVNzcmNzLnNpemUo
KSkgewotICAgICAgICAgICAgZ19vYmplY3Rfc2V0KHNlc3Npb24sICJyZWNlaXZlLXNzcmMiLCBy
ZWNlaXZlU3NyY3NbMF0sIG51bGxwdHIpOwotICAgICAgICAgICAgaWYgKHJlY2VpdmVTc3Jjcy5z
aXplKCkgPT0gMikKLSAgICAgICAgICAgICAgICBnX29iamVjdF9zZXQoc2Vzc2lvbiwgInJlY2Vp
dmUtcnR4LXNzcmMiLCByZWNlaXZlU3NyY3NbMV0sIG51bGxwdHIpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgbV9udW1iZXJPZlNlbmRQcmVwYXJlZFNlc3Npb25zID0gaSArIDE7Ci0gICAgfQotCi0g
ICAgcmV0dXJuIFVwZGF0ZVJlc3VsdDo6U3VjY2VzczsKLX0KLQotdm9pZCBNZWRpYUVuZHBvaW50
T3dyOjphZGRSZW1vdGVDYW5kaWRhdGUoY29uc3QgSWNlQ2FuZGlkYXRlJiBjYW5kaWRhdGUsIGNv
bnN0IFN0cmluZyYgbWlkLCBjb25zdCBTdHJpbmcmIHVmcmFnLCBjb25zdCBTdHJpbmcmIHBhc3N3
b3JkKQotewotICAgIGZvciAoYXV0byYgdHJhbnNjZWl2ZXIgOiBtX3RyYW5zY2VpdmVycykgewot
ICAgICAgICBpZiAodHJhbnNjZWl2ZXItPm1pZCgpID09IG1pZCkgewotICAgICAgICAgICAgaW50
ZXJuYWxBZGRSZW1vdGVDYW5kaWRhdGUodHJhbnNjZWl2ZXItPnNlc3Npb24oKSwgY2FuZGlkYXRl
LCB1ZnJhZywgcGFzc3dvcmQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9
Ci19Ci0KLXZvaWQgTWVkaWFFbmRwb2ludE93cjo6cmVwbGFjZU11dGVkUmVtb3RlU291cmNlTWlk
KGNvbnN0IFN0cmluZyYgb2xkTWlkLCBjb25zdCBTdHJpbmcmIG5ld01pZCkKLXsKLSAgICBSZWZQ
dHI8UmVhbHRpbWVNZWRpYVNvdXJjZU93cj4gcmVtb3RlU291cmNlID0gbV9tdXRlZFJlbW90ZVNv
dXJjZXMudGFrZShvbGRNaWQpOwotICAgIG1fbXV0ZWRSZW1vdGVTb3VyY2VzLnNldChuZXdNaWQs
IHJlbW90ZVNvdXJjZSk7Ci19Ci0KLVJlZjxSZWFsdGltZU1lZGlhU291cmNlPiBNZWRpYUVuZHBv
aW50T3dyOjpjcmVhdGVNdXRlZFJlbW90ZVNvdXJjZShjb25zdCBTdHJpbmcmIG1pZCwgUmVhbHRp
bWVNZWRpYVNvdXJjZTo6VHlwZSB0eXBlKQotewotICAgIFN0cmluZyBuYW1lOwotICAgIFN0cmlu
ZyBpZCgibm90IHVzZWQiKTsKLSAgICBSZWZQdHI8UmVhbHRpbWVNZWRpYVNvdXJjZU93cj4gc291
cmNlOwotCi0gICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgY2FzZSBSZWFsdGltZU1lZGlhU291cmNl
OjpUeXBlOjpBdWRpbzoKLSAgICAgICAgbmFtZSA9ICJyZW1vdGUgYXVkaW8iOwotICAgICAgICBz
b3VyY2UgPSBhZG9wdFJlZihuZXcgUmVhbHRpbWVBdWRpb1NvdXJjZU93cihudWxscHRyLCBpZCwg
dHlwZSwgbmFtZSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFJlYWx0aW1lTWVkaWFTb3Vy
Y2U6OlR5cGU6OlZpZGVvOgotICAgICAgICBuYW1lID0gInJlbW90ZSB2aWRlbyI7Ci0gICAgICAg
IHNvdXJjZSA9IGFkb3B0UmVmKG5ldyBSZWFsdGltZVZpZGVvU291cmNlT3dyKG51bGxwdHIsIGlk
LCB0eXBlLCBuYW1lKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgUmVhbHRpbWVNZWRpYVNv
dXJjZTo6VHlwZTo6Tm9uZToKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQot
Ci0gICAgbV9tdXRlZFJlbW90ZVNvdXJjZXMuc2V0KG1pZCwgc291cmNlKTsKLQotICAgIHJldHVy
biAqc291cmNlOwotfQotCi12b2lkIE1lZGlhRW5kcG9pbnRPd3I6OnJlcGxhY2VTZW5kU291cmNl
KFJlYWx0aW1lTWVkaWFTb3VyY2UmIG5ld1NvdXJjZSwgY29uc3QgU3RyaW5nJiBtaWQpCi17Ci0g
ICAgVU5VU0VEX1BBUkFNKG5ld1NvdXJjZSk7Ci0gICAgVU5VU0VEX1BBUkFNKG1pZCk7Ci0KLSAg
ICAvLyBGSVhNRTogV2Ugd2FudCB0byB1c2Ugb3dyX21lZGlhX3Nlc3Npb25fc2V0X3NlbmRfc291
cmNlIGhlcmUsIGJ1dCBpdCBkb2Vzbid0IHdvcmsgYXMgaW50ZW5kZWQuCi0gICAgLy8gSXNzdWUg
dHJhY2tlZCBieSBPcGVuV2ViUlRDIGJ1ZzogaHR0cHM6Ly9naXRodWIuY29tL0VyaWNzc29uUmVz
ZWFyY2gvb3BlbndlYnJ0Yy9pc3N1ZXMvNTMzCi0KLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQot
Ci12b2lkIE1lZGlhRW5kcG9pbnRPd3I6OnN0b3AoKQotewotICAgIGlmICghbV90cmFuc3BvcnRB
Z2VudCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZm9yIChhdXRvJiB0cmFuc2NlaXZlciA6IG1f
dHJhbnNjZWl2ZXJzKQotICAgICAgICBvd3JfbWVkaWFfc2Vzc2lvbl9zZXRfc2VuZF9zb3VyY2Uo
T1dSX01FRElBX1NFU1NJT04odHJhbnNjZWl2ZXItPnNlc3Npb24oKSksIG51bGxwdHIpOwotCi0g
ICAgZ19vYmplY3RfdW5yZWYobV90cmFuc3BvcnRBZ2VudCk7Ci0gICAgbV90cmFuc3BvcnRBZ2Vu
dCA9IG51bGxwdHI7Ci19Ci0KLXNpemVfdCBNZWRpYUVuZHBvaW50T3dyOjp0cmFuc2NlaXZlcklu
ZGV4Rm9yU2Vzc2lvbihPd3JTZXNzaW9uKiBzZXNzaW9uKSBjb25zdAotewotICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBtX3RyYW5zY2VpdmVycy5zaXplKCk7ICsraSkgewotICAgICAgICBp
ZiAobV90cmFuc2NlaXZlcnNbaV0tPnNlc3Npb24oKSA9PSBzZXNzaW9uKQotICAgICAgICAgICAg
cmV0dXJuIGk7Ci0gICAgfQotCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJu
IG5vdEZvdW5kOwotfQotCi1jb25zdCBTdHJpbmcmIE1lZGlhRW5kcG9pbnRPd3I6OnNlc3Npb25N
aWQoT3dyU2Vzc2lvbiogc2Vzc2lvbikgY29uc3QKLXsKLSAgICBzaXplX3QgaW5kZXggPSB0cmFu
c2NlaXZlckluZGV4Rm9yU2Vzc2lvbihzZXNzaW9uKTsKLSAgICByZXR1cm4gbV90cmFuc2NlaXZl
cnNbaW5kZXhdLT5taWQoKTsKLX0KLQotT3dyVHJhbnNjZWl2ZXIqIE1lZGlhRW5kcG9pbnRPd3I6
Om1hdGNoVHJhbnNjZWl2ZXJCeU1pZChjb25zdCBTdHJpbmcmIG1pZCkgY29uc3QKLXsKLSAgICBm
b3IgKGF1dG8mIHRyYW5zY2VpdmVyIDogbV90cmFuc2NlaXZlcnMpIHsKLSAgICAgICAgaWYgKHRy
YW5zY2VpdmVyLT5taWQoKSA9PSBtaWQpCi0gICAgICAgICAgICByZXR1cm4gdHJhbnNjZWl2ZXIu
Z2V0KCk7Ci0gICAgfQotICAgIHJldHVybiBudWxscHRyOwotfQotCi12b2lkIE1lZGlhRW5kcG9p
bnRPd3I6OmRpc3BhdGNoTmV3SWNlQ2FuZGlkYXRlKGNvbnN0IFN0cmluZyYgbWlkLCBJY2VDYW5k
aWRhdGUmJiBpY2VDYW5kaWRhdGUpCi17Ci0gICAgbV9jbGllbnQuZ290SWNlQ2FuZGlkYXRlKG1p
ZCwgV1RGTW92ZShpY2VDYW5kaWRhdGUpKTsKLX0KLQotdm9pZCBNZWRpYUVuZHBvaW50T3dyOjpk
aXNwYXRjaEdhdGhlcmluZ0RvbmUoY29uc3QgU3RyaW5nJiBtaWQpCi17Ci0gICAgbV9jbGllbnQu
ZG9uZUdhdGhlcmluZ0NhbmRpZGF0ZXMobWlkKTsKLX0KLQotdm9pZCBNZWRpYUVuZHBvaW50T3dy
Ojpwcm9jZXNzSWNlVHJhbnNwb3J0U3RhdGVDaGFuZ2UoT3dyU2Vzc2lvbiogc2Vzc2lvbikKLXsK
LSAgICBPd3JJY2VTdGF0ZSBvd3JJY2VTdGF0ZTsKLSAgICBnX29iamVjdF9nZXQoc2Vzc2lvbiwg
ImljZS1jb25uZWN0aW9uLXN0YXRlIiwgJm93ckljZVN0YXRlLCBudWxscHRyKTsKLQotICAgIE93
clRyYW5zY2VpdmVyJiB0cmFuc2NlaXZlciA9ICptX3RyYW5zY2VpdmVyc1t0cmFuc2NlaXZlcklu
ZGV4Rm9yU2Vzc2lvbihzZXNzaW9uKV07Ci0gICAgaWYgKG93ckljZVN0YXRlIDwgdHJhbnNjZWl2
ZXIub3dySWNlU3RhdGUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgdHJhbnNjZWl2ZXIuc2V0
T3dySWNlU3RhdGUob3dySWNlU3RhdGUpOwotCi0gICAgLy8gV2UgY2Fubm90IGdvIHRvIENvbXBs
ZXRlZCBpZiB0aGVyZSBtYXkgYmUgbW9yZSByZW1vdGUgY2FuZGlkYXRlcy4KLSAgICBpZiAob3dy
SWNlU3RhdGUgPT0gT1dSX0lDRV9TVEFURV9SRUFEWSAmJiAhdHJhbnNjZWl2ZXIuZ290RW5kT2ZS
ZW1vdGVDYW5kaWRhdGVzKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFJUQ0ljZVRyYW5zcG9y
dFN0YXRlIHRyYW5zcG9ydFN0YXRlOwotICAgIHN3aXRjaCAob3dySWNlU3RhdGUpIHsKLSAgICBj
YXNlIE9XUl9JQ0VfU1RBVEVfQ09OTkVDVElORzoKLSAgICAgICAgdHJhbnNwb3J0U3RhdGUgPSBS
VENJY2VUcmFuc3BvcnRTdGF0ZTo6Q2hlY2tpbmc7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
T1dSX0lDRV9TVEFURV9DT05ORUNURUQ6Ci0gICAgICAgIHRyYW5zcG9ydFN0YXRlID0gUlRDSWNl
VHJhbnNwb3J0U3RhdGU6OkNvbm5lY3RlZDsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBPV1Jf
SUNFX1NUQVRFX1JFQURZOgotICAgICAgICB0cmFuc3BvcnRTdGF0ZSA9IFJUQ0ljZVRyYW5zcG9y
dFN0YXRlOjpDb21wbGV0ZWQ7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgT1dSX0lDRV9TVEFU
RV9GQUlMRUQ6Ci0gICAgICAgIHRyYW5zcG9ydFN0YXRlID0gUlRDSWNlVHJhbnNwb3J0U3RhdGU6
OkZhaWxlZDsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIG1fY2xpZW50LmljZVRyYW5zcG9ydFN0YXRlQ2hhbmdlZCh0cmFuc2NlaXZl
ci5taWQoKSwgdHJhbnNwb3J0U3RhdGUpOwotfQotCi12b2lkIE1lZGlhRW5kcG9pbnRPd3I6OmRp
c3BhdGNoRHRsc0ZpbmdlcnByaW50KGdjaGFyKiBwcml2YXRlS2V5LCBnY2hhciogY2VydGlmaWNh
dGUsIGNvbnN0IFN0cmluZyYgZmluZ2VycHJpbnQsIGNvbnN0IFN0cmluZyYgZmluZ2VycHJpbnRG
dW5jdGlvbikKLXsKLSAgICBtX2R0bHNQcml2YXRlS2V5ID0gU3RyaW5nKHByaXZhdGVLZXkpOwot
ICAgIG1fZHRsc0NlcnRpZmljYXRlID0gU3RyaW5nKGNlcnRpZmljYXRlKTsKLQotICAgIGdfZnJl
ZShwcml2YXRlS2V5KTsKLSAgICBnX2ZyZWUoY2VydGlmaWNhdGUpOwotCi0gICAgbV9jbGllbnQu
Z290RHRsc0ZpbmdlcnByaW50KGZpbmdlcnByaW50LCBmaW5nZXJwcmludEZ1bmN0aW9uKTsKLX0K
LQotdm9pZCBNZWRpYUVuZHBvaW50T3dyOjp1bm11dGVSZW1vdGVTb3VyY2UoY29uc3QgU3RyaW5n
JiBtaWQsIE93ck1lZGlhU291cmNlKiByZWFsU291cmNlKQotewotICAgIFJlZlB0cjxSZWFsdGlt
ZU1lZGlhU291cmNlT3dyPiByZW1vdGVTb3VyY2UgPSBtX211dGVkUmVtb3RlU291cmNlcy50YWtl
KG1pZCk7Ci0gICAgaWYgKCFyZW1vdGVTb3VyY2UpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJVbmFi
bGUgdG8gZmluZCBtdXRlZCByZW1vdGUgc291cmNlLiIpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgaWYgKHJlbW90ZVNvdXJjZS0+aXNQcm9kdWNpbmdEYXRhKCkpCi0gICAgICAgIHJl
bW90ZVNvdXJjZS0+c3dhcE91dFNoYWxsb3dTb3VyY2UoKnJlYWxTb3VyY2UpOwotfQotCi12b2lk
IE1lZGlhRW5kcG9pbnRPd3I6OnByZXBhcmVTZXNzaW9uKE93clNlc3Npb24qIHNlc3Npb24sIFBl
ZXJNZWRpYURlc2NyaXB0aW9uKiBtZWRpYURlc2NyaXB0aW9uKQotewotICAgIGdfb2JqZWN0X3Nl
dF9kYXRhX2Z1bGwoR19PQkpFQ1Qoc2Vzc2lvbiksICJpY2UtdWZyYWciLCBnX3N0cmR1cChtZWRp
YURlc2NyaXB0aW9uLT5pY2VVZnJhZy5hc2NpaSgpLmRhdGEoKSksIGdfZnJlZSk7Ci0gICAgZ19v
YmplY3Rfc2V0X2RhdGFfZnVsbChHX09CSkVDVChzZXNzaW9uKSwgImljZS1wYXNzd29yZCIsIGdf
c3RyZHVwKG1lZGlhRGVzY3JpcHRpb24tPmljZVBhc3N3b3JkLmFzY2lpKCkuZGF0YSgpKSwgZ19m
cmVlKTsKLQotICAgIGdfc2lnbmFsX2Nvbm5lY3Qoc2Vzc2lvbiwgIm9uLW5ldy1jYW5kaWRhdGUi
LCBHX0NBTExCQUNLKGdvdENhbmRpZGF0ZSksIHRoaXMpOwotICAgIGdfc2lnbmFsX2Nvbm5lY3Qo
c2Vzc2lvbiwgIm9uLWNhbmRpZGF0ZS1nYXRoZXJpbmctZG9uZSIsIEdfQ0FMTEJBQ0soY2FuZGlk
YXRlR2F0aGVyaW5nRG9uZSksIHRoaXMpOwotICAgIGdfc2lnbmFsX2Nvbm5lY3Qoc2Vzc2lvbiwg
Im5vdGlmeTo6aWNlLWNvbm5lY3Rpb24tc3RhdGUiLCBHX0NBTExCQUNLKGljZUNvbm5lY3Rpb25T
dGF0ZUNoYW5nZSksIHRoaXMpOwotfQotCi12b2lkIE1lZGlhRW5kcG9pbnRPd3I6OnByZXBhcmVN
ZWRpYVNlc3Npb24oT3dyTWVkaWFTZXNzaW9uKiBtZWRpYVNlc3Npb24sIFBlZXJNZWRpYURlc2Ny
aXB0aW9uKiBtZWRpYURlc2NyaXB0aW9uLCBib29sIGlzSW5pdGlhdG9yKQotewotICAgIHByZXBh
cmVTZXNzaW9uKE9XUl9TRVNTSU9OKG1lZGlhU2Vzc2lvbiksIG1lZGlhRGVzY3JpcHRpb24pOwot
Ci0gICAgYm9vbCB1c2VSdGNwTXV4ID0gIWlzSW5pdGlhdG9yICYmIG1lZGlhRGVzY3JpcHRpb24t
PnJ0Y3BNdXg7Ci0gICAgZ19vYmplY3Rfc2V0KG1lZGlhU2Vzc2lvbiwgInJ0Y3AtbXV4IiwgdXNl
UnRjcE11eCwgbnVsbHB0cik7Ci0KLSAgICBpZiAoIW1lZGlhRGVzY3JpcHRpb24tPmNuYW1lLmlz
RW1wdHkoKSAmJiBtZWRpYURlc2NyaXB0aW9uLT5zc3Jjcy5zaXplKCkpIHsKLSAgICAgICAgZ19v
YmplY3Rfc2V0KG1lZGlhU2Vzc2lvbiwgImNuYW1lIiwgbWVkaWFEZXNjcmlwdGlvbi0+Y25hbWUu
YXNjaWkoKS5kYXRhKCksCi0gICAgICAgICAgICAic2VuZC1zc3JjIiwgbWVkaWFEZXNjcmlwdGlv
bi0+c3NyY3NbMF0sCi0gICAgICAgICAgICBudWxscHRyKTsKLSAgICB9Ci0KLSAgICBnX3NpZ25h
bF9jb25uZWN0KG1lZGlhU2Vzc2lvbiwgIm9uLWluY29taW5nLXNvdXJjZSIsIEdfQ0FMTEJBQ0so
Z290SW5jb21pbmdTb3VyY2UpLCB0aGlzKTsKLQotICAgIGZvciAoYXV0byYgcGF5bG9hZCA6IG1l
ZGlhRGVzY3JpcHRpb24tPnBheWxvYWRzKSB7Ci0gICAgICAgIGlmIChwYXlsb2FkLmVuY29kaW5n
TmFtZS5jb252ZXJ0VG9BU0NJSVVwcGVyY2FzZSgpID09ICJSVFgiKQotICAgICAgICAgICAgY29u
dGludWU7Ci0KLSAgICAgICAgYXV0byogcnR4UGF5bG9hZCA9IGZpbmRSdHhQYXlsb2FkKG1lZGlh
RGVzY3JpcHRpb24tPnBheWxvYWRzLCBwYXlsb2FkLnR5cGUpOwotCi0gICAgICAgIEFTU0VSVF9X
SVRIX01FU1NBR0UoY29kZWNUeXBlcy5maW5kKHBheWxvYWQuZW5jb2RpbmdOYW1lLmNvbnZlcnRU
b0FTQ0lJVXBwZXJjYXNlKCkpICE9IG5vdEZvdW5kLCAiVW5hYmxlIHRvIGZpbmQgY29kZWM6ICVz
IiwgcGF5bG9hZC5lbmNvZGluZ05hbWUudXRmOCgpLmRhdGEoKSk7Ci0gICAgICAgIE93ckNvZGVj
VHlwZSBjb2RlY1R5cGUgPSBzdGF0aWNfY2FzdDxPd3JDb2RlY1R5cGU+KGNvZGVjVHlwZXMuZmlu
ZChwYXlsb2FkLmVuY29kaW5nTmFtZS5jb252ZXJ0VG9BU0NJSVVwcGVyY2FzZSgpKSk7Ci0KLSAg
ICAgICAgT3dyUGF5bG9hZCogcmVjZWl2ZVBheWxvYWQ7Ci0gICAgICAgIGlmIChtZWRpYURlc2Ny
aXB0aW9uLT50eXBlID09ICJhdWRpbyIpCi0gICAgICAgICAgICByZWNlaXZlUGF5bG9hZCA9IG93
cl9hdWRpb19wYXlsb2FkX25ldyhjb2RlY1R5cGUsIHBheWxvYWQudHlwZSwgcGF5bG9hZC5jbG9j
a1JhdGUsIHBheWxvYWQuY2hhbm5lbHMpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIHJl
Y2VpdmVQYXlsb2FkID0gb3dyX3ZpZGVvX3BheWxvYWRfbmV3KGNvZGVjVHlwZSwgcGF5bG9hZC50
eXBlLCBwYXlsb2FkLmNsb2NrUmF0ZSwgcGF5bG9hZC5jY21maXIsIHBheWxvYWQubmFja3BsaSk7
Ci0gICAgICAgICAgICBnX29iamVjdF9zZXQocmVjZWl2ZVBheWxvYWQsICJydHgtcGF5bG9hZC10
eXBlIiwgcnR4UGF5bG9hZCA/IHJ0eFBheWxvYWQtPnR5cGUgOiAtMSwKLSAgICAgICAgICAgICAg
ICAicnR4LXRpbWUiLCBydHhQYXlsb2FkICYmIHJ0eFBheWxvYWQtPnBhcmFtZXRlcnMuY29udGFp
bnMoInJ0eFRpbWUiKSA/IHJ0eFBheWxvYWQtPnBhcmFtZXRlcnMuZ2V0KCJydHhUaW1lIikgOiAw
LCBudWxscHRyKTsKLSAgICAgICAgfQotCi0gICAgICAgIG93cl9tZWRpYV9zZXNzaW9uX2FkZF9y
ZWNlaXZlX3BheWxvYWQobWVkaWFTZXNzaW9uLCByZWNlaXZlUGF5bG9hZCk7Ci0gICAgfQotfQot
Ci1zdHJ1Y3QgSGVscGVyU2VydmVyVXJsIHsKLSAgICBTdHJpbmcgcHJvdG9jb2w7Ci0gICAgU3Ry
aW5nIGhvc3Q7Ci0gICAgdW5zaWduZWQgc2hvcnQgcG9ydDsKLSAgICBTdHJpbmcgcXVlcnk7Ci19
OwotCi1zdGF0aWMgdm9pZCBwYXJzZUhlbHBlclNlcnZlclVybChHUmVnZXgmIHJlZ2V4LCBjb25z
dCBVUkwmIHVybCwgSGVscGVyU2VydmVyVXJsJiBvdXRVcmwpCi17Ci0gICAgR01hdGNoSW5mbyog
bWF0Y2hJbmZvOwotCi0gICAgaWYgKGdfcmVnZXhfbWF0Y2goJnJlZ2V4LCB1cmwuc3RyaW5nKCku
YXNjaWkoKS5kYXRhKCksIHN0YXRpY19jYXN0PEdSZWdleE1hdGNoRmxhZ3M+KDApLCAmbWF0Y2hJ
bmZvKSkgewotICAgICAgICBnY2hhcioqIG1hdGNoZXMgPSAgZ19tYXRjaF9pbmZvX2ZldGNoX2Fs
bChtYXRjaEluZm8pOwotICAgICAgICBnaW50IG1hdGNoQ291bnQgPSBnX3N0cnZfbGVuZ3RoKG1h
dGNoZXMpOwotCi0gICAgICAgIG91dFVybC5wcm90b2NvbCA9IG1hdGNoZXNbMV07Ci0gICAgICAg
IG91dFVybC5ob3N0ID0gbWF0Y2hlc1syXVswXSA9PSAnWycgPyBTdHJpbmcobWF0Y2hlc1syXSAr
IDEsIHN0cmxlbihtYXRjaGVzWzJdKSAtIDIpIC8vIElQdjYKLSAgICAgICAgICAgIDogbWF0Y2hl
c1syXTsKLQotICAgICAgICBvdXRVcmwucG9ydCA9IDA7Ci0gICAgICAgIGlmIChtYXRjaENvdW50
ID49IDQpIHsKLSAgICAgICAgICAgIFN0cmluZyBwb3J0U3RyaW5nID0gU3RyaW5nKG1hdGNoZXNb
M10gKyAxKTsgLy8gU2tpcCBwb3J0IGNvbG9uCi0gICAgICAgICAgICBvdXRVcmwucG9ydCA9IHBv
cnRTdHJpbmcudG9VSW50U3RyaWN0KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobWF0Y2hD
b3VudCA9PSA1KQotICAgICAgICAgICAgb3V0VXJsLnF1ZXJ5ID0gU3RyaW5nKG1hdGNoZXNbNF0g
KyAxKTsgLy8gU2tpcCBxdWVzdGlvbiBtYXJrCi0KLSAgICAgICAgZ19zdHJmcmVldihtYXRjaGVz
KTsKLSAgICB9Ci0KLSAgICBnX21hdGNoX2luZm9fZnJlZShtYXRjaEluZm8pOwotfQotCi12b2lk
IE1lZGlhRW5kcG9pbnRPd3I6OmVuc3VyZVRyYW5zcG9ydEFnZW50QW5kVHJhbnNjZWl2ZXJzKGJv
b2wgaXNJbml0aWF0b3IsIGNvbnN0IFZlY3RvcjxUcmFuc2NlaXZlckNvbmZpZz4mIHRyYW5zY2Vp
dmVyQ29uZmlncykKLXsKLSAgICBBU1NFUlQobV9kdGxzUHJpdmF0ZUtleSk7Ci0gICAgQVNTRVJU
KG1fZHRsc0NlcnRpZmljYXRlKTsKLQotICAgIGlmICghbV90cmFuc3BvcnRBZ2VudCkgewotICAg
ICAgICAvLyBGSVhNRTogSGFuZGxlIFNEUCBCVU5ETEUgbGluZSBmcm9tIHRoZSByZW1vdGUgc291
cmNlIGluc3RlYWQgb2YgZmFsbGluZyBiYWNrIHRvIGJhbGFuY2VkLgotICAgICAgICBPd3JCdW5k
bGVQb2xpY3lUeXBlIGJ1bmRsZVBvbGljeSA9IE9XUl9CVU5ETEVfUE9MSUNZX1RZUEVfQkFMQU5D
RUQ7Ci0KLSAgICAgICAgc3dpdGNoIChtX2NvbmZpZ3VyYXRpb24tPmJ1bmRsZVBvbGljeSkgewot
ICAgICAgICBjYXNlIFBlZXJDb25uZWN0aW9uU3RhdGVzOjpCdW5kbGVQb2xpY3k6OkJhbGFuY2Vk
OgotICAgICAgICAgICAgYnVuZGxlUG9saWN5ID0gT1dSX0JVTkRMRV9QT0xJQ1lfVFlQRV9CQUxB
TkNFRDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFBlZXJDb25uZWN0aW9uU3Rh
dGVzOjpCdW5kbGVQb2xpY3k6Ok1heENvbXBhdDoKLSAgICAgICAgICAgIGJ1bmRsZVBvbGljeSA9
IE9XUl9CVU5ETEVfUE9MSUNZX1RZUEVfTUFYX0NPTVBBVDsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIFBlZXJDb25uZWN0aW9uU3RhdGVzOjpCdW5kbGVQb2xpY3k6Ok1heEJ1bmRs
ZToKLSAgICAgICAgICAgIGJ1bmRsZVBvbGljeSA9IE9XUl9CVU5ETEVfUE9MSUNZX1RZUEVfTUFY
X0JVTkRMRTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIH07Ci0KLSAgICAgICAgbV90cmFuc3Bv
cnRBZ2VudCA9IG93cl90cmFuc3BvcnRfYWdlbnRfbmV3KGZhbHNlLCBidW5kbGVQb2xpY3kpOwot
Ci0gICAgICAgIEFTU0VSVChtX2NvbmZpZ3VyYXRpb24pOwotICAgICAgICBmb3IgKGF1dG8mIHNl
cnZlciA6IG1fY29uZmlndXJhdGlvbi0+aWNlU2VydmVycykgewotICAgICAgICAgICAgZm9yIChh
dXRvJiB3ZWJraXRVcmwgOiBzZXJ2ZXIudXJscykgewotICAgICAgICAgICAgICAgIEhlbHBlclNl
cnZlclVybCB1cmw7Ci0gICAgICAgICAgICAgICAgLy8gV2ViS2l0J3MgVVJMIGNsYXNzIGNhbid0
IGhhbmRsZSBJQ0UgaGVscGVyIHNlcnZlciB1cmxzIHByb3Blcmx5Ci0gICAgICAgICAgICAgICAg
cGFyc2VIZWxwZXJTZXJ2ZXJVcmwoKm1faGVscGVyU2VydmVyUmVnRXgsIHdlYmtpdFVybCwgdXJs
KTsKLQotICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IHBvcnQgPSB1cmwucG9ydCA/IHVy
bC5wb3J0IDogaGVscGVyU2VydmVyRGVmYXVsdFBvcnQ7Ci0KLSAgICAgICAgICAgICAgICBpZiAo
dXJsLnByb3RvY29sID09ICJzdHVuIikgewotICAgICAgICAgICAgICAgICAgICBvd3JfdHJhbnNw
b3J0X2FnZW50X2FkZF9oZWxwZXJfc2VydmVyKG1fdHJhbnNwb3J0QWdlbnQsIE9XUl9IRUxQRVJf
U0VSVkVSX1RZUEVfU1RVTiwKLSAgICAgICAgICAgICAgICAgICAgICAgIHVybC5ob3N0LmFzY2lp
KCkuZGF0YSgpLCBwb3J0LCBudWxscHRyLCBudWxscHRyKTsKLQotICAgICAgICAgICAgICAgIH0g
ZWxzZSBpZiAodXJsLnByb3RvY29sID09ICJ0dXJuIikgewotICAgICAgICAgICAgICAgICAgICBP
d3JIZWxwZXJTZXJ2ZXJUeXBlIHNlcnZlclR5cGUgPSB1cmwucXVlcnkgPT0gInRyYW5zcG9ydD10
Y3AiID8gT1dSX0hFTFBFUl9TRVJWRVJfVFlQRV9UVVJOX1RDUAotICAgICAgICAgICAgICAgICAg
ICAgICAgOiBPV1JfSEVMUEVSX1NFUlZFUl9UWVBFX1RVUk5fVURQOwotCi0gICAgICAgICAgICAg
ICAgICAgIG93cl90cmFuc3BvcnRfYWdlbnRfYWRkX2hlbHBlcl9zZXJ2ZXIobV90cmFuc3BvcnRB
Z2VudCwgc2VydmVyVHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHVybC5ob3N0LmFzY2lp
KCkuZGF0YSgpLCBwb3J0LAotICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyLnVzZXJuYW1l
LmFzY2lpKCkuZGF0YSgpLCBzZXJ2ZXIuY3JlZGVudGlhbC5hc2NpaSgpLmRhdGEoKSk7Ci0gICAg
ICAgICAgICAgICAgfSBlbHNlIGlmICh1cmwucHJvdG9jb2wgPT0gInR1cm5zIikgewotICAgICAg
ICAgICAgICAgICAgICBvd3JfdHJhbnNwb3J0X2FnZW50X2FkZF9oZWxwZXJfc2VydmVyKG1fdHJh
bnNwb3J0QWdlbnQsIE9XUl9IRUxQRVJfU0VSVkVSX1RZUEVfVFVSTl9UTFMsCi0gICAgICAgICAg
ICAgICAgICAgICAgICB1cmwuaG9zdC5hc2NpaSgpLmRhdGEoKSwgcG9ydCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHNlcnZlci51c2VybmFtZS5hc2NpaSgpLmRhdGEoKSwgc2VydmVyLmNyZWRl
bnRpYWwuYXNjaWkoKS5kYXRhKCkpOwotICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAg
ICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotICAgIH0KLQotICAgIGdfb2JqZWN0X3NldChtX3RyYW5zcG9ydEFnZW50LCAiaWNlLWNvbnRy
b2xsaW5nLW1vZGUiLCBpc0luaXRpYXRvciwgbnVsbHB0cik7Ci0KLSAgICBmb3IgKGF1dG8mIGNv
bmZpZyA6IHRyYW5zY2VpdmVyQ29uZmlncykgewotICAgICAgICBPd3JTZXNzaW9uKiBzZXNzaW9u
ID0gT1dSX1NFU1NJT04ob3dyX21lZGlhX3Nlc3Npb25fbmV3KGNvbmZpZy5pc0R0bHNDbGllbnQp
KTsKLSAgICAgICAgZ19vYmplY3Rfc2V0KHNlc3Npb24sICJkdGxzLWNlcnRpZmljYXRlIiwgbV9k
dGxzQ2VydGlmaWNhdGUudXRmOCgpLmRhdGEoKSwKLSAgICAgICAgICAgICJkdGxzLWtleSIsIG1f
ZHRsc1ByaXZhdGVLZXkudXRmOCgpLmRhdGEoKSwKLSAgICAgICAgICAgIG51bGxwdHIpOwotCi0g
ICAgICAgIG1fdHJhbnNjZWl2ZXJzLmFwcGVuZChPd3JUcmFuc2NlaXZlcjo6Y3JlYXRlKGNvbmZp
Zy5taWQsIHNlc3Npb24pKTsKLSAgICB9Ci19Ci0KLXZvaWQgTWVkaWFFbmRwb2ludE93cjo6aW50
ZXJuYWxBZGRSZW1vdGVDYW5kaWRhdGUoT3dyU2Vzc2lvbiogc2Vzc2lvbiwgY29uc3QgSWNlQ2Fu
ZGlkYXRlJiBjYW5kaWRhdGUsIGNvbnN0IFN0cmluZyYgdWZyYWcsIGNvbnN0IFN0cmluZyYgcGFz
c3dvcmQpCi17Ci0gICAgZ2Jvb2xlYW4gcnRjcE11eDsKLSAgICBnX29iamVjdF9nZXQoc2Vzc2lv
biwgInJ0Y3AtbXV4IiwgJnJ0Y3BNdXgsIG51bGxwdHIpOwotCi0gICAgaWYgKHJ0Y3BNdXggJiYg
Y2FuZGlkYXRlLmNvbXBvbmVudElkID09IE9XUl9DT01QT05FTlRfVFlQRV9SVENQKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBBU1NFUlQoY2FuZGlkYXRlVHlwZXMuZmluZChjYW5kaWRhdGUudHlw
ZSkgIT0gbm90Rm91bmQpOwotCi0gICAgT3dyQ2FuZGlkYXRlVHlwZSBjYW5kaWRhdGVUeXBlID0g
c3RhdGljX2Nhc3Q8T3dyQ2FuZGlkYXRlVHlwZT4oY2FuZGlkYXRlVHlwZXMuZmluZChjYW5kaWRh
dGUudHlwZSkpOwotICAgIE93ckNvbXBvbmVudFR5cGUgY29tcG9uZW50SWQgPSBzdGF0aWNfY2Fz
dDxPd3JDb21wb25lbnRUeXBlPihjYW5kaWRhdGUuY29tcG9uZW50SWQpOwotICAgIE93clRyYW5z
cG9ydFR5cGUgdHJhbnNwb3J0VHlwZTsKLQotICAgIGlmIChjYW5kaWRhdGUudHJhbnNwb3J0LmNv
bnZlcnRUb0FTQ0lJVXBwZXJjYXNlKCkgPT0gIlVEUCIpCi0gICAgICAgIHRyYW5zcG9ydFR5cGUg
PSBPV1JfVFJBTlNQT1JUX1RZUEVfVURQOwotICAgIGVsc2UgewotICAgICAgICBBU1NFUlQoY2Fu
ZGlkYXRlVGNwVHlwZXMuZmluZChjYW5kaWRhdGUudGNwVHlwZSkgIT0gbm90Rm91bmQpOwotICAg
ICAgICB0cmFuc3BvcnRUeXBlID0gc3RhdGljX2Nhc3Q8T3dyVHJhbnNwb3J0VHlwZT4oY2FuZGlk
YXRlVGNwVHlwZXMuZmluZChjYW5kaWRhdGUudGNwVHlwZSkpOwotICAgIH0KLQotICAgIE93ckNh
bmRpZGF0ZSogb3dyQ2FuZGlkYXRlID0gb3dyX2NhbmRpZGF0ZV9uZXcoY2FuZGlkYXRlVHlwZSwg
Y29tcG9uZW50SWQpOwotICAgIGdfb2JqZWN0X3NldChvd3JDYW5kaWRhdGUsICJ0cmFuc3BvcnQt
dHlwZSIsIHRyYW5zcG9ydFR5cGUsCi0gICAgICAgICJhZGRyZXNzIiwgY2FuZGlkYXRlLmFkZHJl
c3MuYXNjaWkoKS5kYXRhKCksCi0gICAgICAgICJwb3J0IiwgY2FuZGlkYXRlLnBvcnQsCi0gICAg
ICAgICJiYXNlLWFkZHJlc3MiLCBjYW5kaWRhdGUucmVsYXRlZEFkZHJlc3MuYXNjaWkoKS5kYXRh
KCksCi0gICAgICAgICJiYXNlLXBvcnQiLCBjYW5kaWRhdGUucmVsYXRlZFBvcnQsCi0gICAgICAg
ICJwcmlvcml0eSIsIGNhbmRpZGF0ZS5wcmlvcml0eSwKLSAgICAgICAgImZvdW5kYXRpb24iLCBj
YW5kaWRhdGUuZm91bmRhdGlvbi5hc2NpaSgpLmRhdGEoKSwKLSAgICAgICAgInVmcmFnIiwgdWZy
YWcuYXNjaWkoKS5kYXRhKCksCi0gICAgICAgICJwYXNzd29yZCIsIHBhc3N3b3JkLmFzY2lpKCku
ZGF0YSgpLAotICAgICAgICBudWxscHRyKTsKLQotICAgIG93cl9zZXNzaW9uX2FkZF9yZW1vdGVf
Y2FuZGlkYXRlKHNlc3Npb24sIG93ckNhbmRpZGF0ZSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGdvdENh
bmRpZGF0ZShPd3JTZXNzaW9uKiBzZXNzaW9uLCBPd3JDYW5kaWRhdGUqIGNhbmRpZGF0ZSwgTWVk
aWFFbmRwb2ludE93ciogbWVkaWFFbmRwb2ludCkKLXsKLSAgICBPd3JDYW5kaWRhdGVUeXBlIGNh
bmRpZGF0ZVR5cGU7Ci0gICAgZ2NoYXIqIGZvdW5kYXRpb247Ci0gICAgT3dyQ29tcG9uZW50VHlw
ZSBjb21wb25lbnRJZDsKLSAgICBPd3JUcmFuc3BvcnRUeXBlIHRyYW5zcG9ydFR5cGU7Ci0gICAg
Z2ludCBwcmlvcml0eTsKLSAgICBnY2hhciogYWRkcmVzczsKLSAgICBndWludCBwb3J0OwotICAg
IGdjaGFyKiByZWxhdGVkQWRkcmVzczsKLSAgICBndWludCByZWxhdGVkUG9ydDsKLQotICAgIGdf
b2JqZWN0X2dldChjYW5kaWRhdGUsICJ0eXBlIiwgJmNhbmRpZGF0ZVR5cGUsCi0gICAgICAgICJm
b3VuZGF0aW9uIiwgJmZvdW5kYXRpb24sCi0gICAgICAgICJjb21wb25lbnQtdHlwZSIsICZjb21w
b25lbnRJZCwKLSAgICAgICAgInRyYW5zcG9ydC10eXBlIiwgJnRyYW5zcG9ydFR5cGUsCi0gICAg
ICAgICJwcmlvcml0eSIsICZwcmlvcml0eSwKLSAgICAgICAgImFkZHJlc3MiLCAmYWRkcmVzcywK
LSAgICAgICAgInBvcnQiLCAmcG9ydCwKLSAgICAgICAgImJhc2UtYWRkcmVzcyIsICZyZWxhdGVk
QWRkcmVzcywKLSAgICAgICAgImJhc2UtcG9ydCIsICZyZWxhdGVkUG9ydCwKLSAgICAgICAgbnVs
bHB0cik7Ci0KLSAgICBBU1NFUlQoY2FuZGlkYXRlVHlwZSA+PSAwICYmIGNhbmRpZGF0ZVR5cGUg
PCBjYW5kaWRhdGVUeXBlcy5zaXplKCkpOwotICAgIEFTU0VSVCh0cmFuc3BvcnRUeXBlID49IDAg
JiYgdHJhbnNwb3J0VHlwZSA8IGNhbmRpZGF0ZVRjcFR5cGVzLnNpemUoKSk7Ci0KLSAgICBJY2VD
YW5kaWRhdGUgaWNlQ2FuZGlkYXRlOwotICAgIGljZUNhbmRpZGF0ZS50eXBlID0gY2FuZGlkYXRl
VHlwZXNbY2FuZGlkYXRlVHlwZV07Ci0gICAgaWNlQ2FuZGlkYXRlLmZvdW5kYXRpb24gPSBmb3Vu
ZGF0aW9uOwotICAgIGljZUNhbmRpZGF0ZS5jb21wb25lbnRJZCA9IGNvbXBvbmVudElkOwotICAg
IGljZUNhbmRpZGF0ZS5wcmlvcml0eSA9IHByaW9yaXR5OwotICAgIGljZUNhbmRpZGF0ZS5hZGRy
ZXNzID0gYWRkcmVzczsKLSAgICBpY2VDYW5kaWRhdGUucG9ydCA9IHBvcnQgPyBwb3J0IDogY2Fu
ZGlkYXRlRGVmYXVsdFBvcnQ7Ci0KLSAgICBpZiAodHJhbnNwb3J0VHlwZSA9PSBPV1JfVFJBTlNQ
T1JUX1RZUEVfVURQKQotICAgICAgICBpY2VDYW5kaWRhdGUudHJhbnNwb3J0ID0gIlVEUCI7Ci0g
ICAgZWxzZSB7Ci0gICAgICAgIGljZUNhbmRpZGF0ZS50cmFuc3BvcnQgPSAiVENQIjsKLSAgICAg
ICAgaWNlQ2FuZGlkYXRlLnRjcFR5cGUgPSBjYW5kaWRhdGVUY3BUeXBlc1t0cmFuc3BvcnRUeXBl
XTsKLSAgICB9Ci0KLSAgICBpZiAoY2FuZGlkYXRlVHlwZSAhPSBPV1JfQ0FORElEQVRFX1RZUEVf
SE9TVCkgewotICAgICAgICBpY2VDYW5kaWRhdGUucmVsYXRlZEFkZHJlc3MgPSByZWxhdGVkQWRk
cmVzczsKLSAgICAgICAgaWNlQ2FuZGlkYXRlLnJlbGF0ZWRQb3J0ID0gcmVsYXRlZFBvcnQgPyBy
ZWxhdGVkUG9ydCA6IGNhbmRpZGF0ZURlZmF1bHRQb3J0OwotICAgIH0KLQotICAgIGdfb2JqZWN0
X3NldChHX09CSkVDVChjYW5kaWRhdGUpLCAidWZyYWciLCBnX29iamVjdF9nZXRfZGF0YShHX09C
SkVDVChzZXNzaW9uKSwgImljZS11ZnJhZyIpLAotICAgICAgICAicGFzc3dvcmQiLCBnX29iamVj
dF9nZXRfZGF0YShHX09CSkVDVChzZXNzaW9uKSwgImljZS1wYXNzd29yZCIpLAotICAgICAgICBu
dWxscHRyKTsKLQotICAgIG1lZGlhRW5kcG9pbnQtPmRpc3BhdGNoTmV3SWNlQ2FuZGlkYXRlKG1l
ZGlhRW5kcG9pbnQtPnNlc3Npb25NaWQoc2Vzc2lvbiksIFdURk1vdmUoaWNlQ2FuZGlkYXRlKSk7
Ci0KLSAgICBnX2ZyZWUoZm91bmRhdGlvbik7Ci0gICAgZ19mcmVlKGFkZHJlc3MpOwotICAgIGdf
ZnJlZShyZWxhdGVkQWRkcmVzcyk7Ci19Ci0KLXN0YXRpYyB2b2lkIGNhbmRpZGF0ZUdhdGhlcmlu
Z0RvbmUoT3dyU2Vzc2lvbiogc2Vzc2lvbiwgTWVkaWFFbmRwb2ludE93ciogbWVkaWFFbmRwb2lu
dCkKLXsKLSAgICBtZWRpYUVuZHBvaW50LT5kaXNwYXRjaEdhdGhlcmluZ0RvbmUobWVkaWFFbmRw
b2ludC0+c2Vzc2lvbk1pZChzZXNzaW9uKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGljZUNvbm5lY3Rp
b25TdGF0ZUNoYW5nZShPd3JTZXNzaW9uKiBzZXNzaW9uLCBHUGFyYW1TcGVjKiwgTWVkaWFFbmRw
b2ludE93ciogbWVkaWFFbmRwb2ludCkKLXsKLSAgICBtZWRpYUVuZHBvaW50LT5wcm9jZXNzSWNl
VHJhbnNwb3J0U3RhdGVDaGFuZ2Uoc2Vzc2lvbik7Ci19Ci0KLXN0YXRpYyB2b2lkIGdvdEluY29t
aW5nU291cmNlKE93ck1lZGlhU2Vzc2lvbiogbWVkaWFTZXNzaW9uLCBPd3JNZWRpYVNvdXJjZSog
c291cmNlLCBNZWRpYUVuZHBvaW50T3dyKiBtZWRpYUVuZHBvaW50KQotewotICAgIG1lZGlhRW5k
cG9pbnQtPnVubXV0ZVJlbW90ZVNvdXJjZShtZWRpYUVuZHBvaW50LT5zZXNzaW9uTWlkKE9XUl9T
RVNTSU9OKG1lZGlhU2Vzc2lvbikpLCBzb3VyY2UpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoV0VCX1JUQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL29wZW53ZWJydGMvTWVkaWFFbmRwb2ludE93ci5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vb3BlbndlYnJ0Yy9NZWRpYUVuZHBv
aW50T3dyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYzMTA0OGM5ZWNmZWVlMzUw
YWMyOWY2MjIxYWNkMGMyZWFkYjkwZjcuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vb3Blbndl
YnJ0Yy9NZWRpYUVuZHBvaW50T3dyLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNDkgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSwgMjAxNiBFcmljc3NvbiBBQi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICog
ICAgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZQotICogICAgZGlzdHJpYnV0aW9uLgotICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBF
cmljc3NvbiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotICog
ICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShXRUJfUlRDKQotCi0jaW5jbHVk
ZSAiTWVkaWFFbmRwb2ludC5oIgotI2luY2x1ZGUgPG93ci9vd3Jfc2Vzc2lvbi5oPgotI2luY2x1
ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotCi10eXBlZGVm
IHN0cnVjdCBfT3dyTWVkaWFTZXNzaW9uIE93ck1lZGlhU2Vzc2lvbjsKLXR5cGVkZWYgc3RydWN0
IF9Pd3JNZWRpYVNvdXJjZSBPd3JNZWRpYVNvdXJjZTsKLXR5cGVkZWYgc3RydWN0IF9Pd3JUcmFu
c3BvcnRBZ2VudCBPd3JUcmFuc3BvcnRBZ2VudDsKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1j
bGFzcyBSZWFsdGltZU1lZGlhU291cmNlT3dyOwotY2xhc3MgUlRDQ29uZmlndXJhdGlvblByaXZh
dGU7Ci0KLXN0cnVjdCBQZWVyTWVkaWFEZXNjcmlwdGlvbjsKLQotY2xhc3MgT3dyVHJhbnNjZWl2
ZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxPd3JUcmFuc2NlaXZlcj4gewotcHVibGljOgotICAgIHN0
YXRpYyBSZWY8T3dyVHJhbnNjZWl2ZXI+IGNyZWF0ZShjb25zdCBTdHJpbmcmIG1pZCwgT3dyU2Vz
c2lvbiogc2Vzc2lvbikKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IE93clRy
YW5zY2VpdmVyKG1pZCwgc2Vzc2lvbikpOwotICAgIH0KLSAgICB2aXJ0dWFsIH5Pd3JUcmFuc2Nl
aXZlcigpIHsgfQotCi0gICAgY29uc3QgU3RyaW5nJiBtaWQoKSBjb25zdCB7IHJldHVybiBtX21p
ZDsgfQotICAgIE93clNlc3Npb24qIHNlc3Npb24oKSBjb25zdCB7IHJldHVybiBtX3Nlc3Npb247
IH0KLQotICAgIE93ckljZVN0YXRlIG93ckljZVN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9vd3JJ
Y2VTdGF0ZTsgfQotICAgIHZvaWQgc2V0T3dySWNlU3RhdGUoT3dySWNlU3RhdGUgc3RhdGUpIHsg
bV9vd3JJY2VTdGF0ZSA9IHN0YXRlOyB9Ci0KLSAgICBib29sIGdvdEVuZE9mUmVtb3RlQ2FuZGlk
YXRlcygpIGNvbnN0IHsgcmV0dXJuIG1fZ290RW5kT2ZSZW1vdGVDYW5kaWRhdGVzOyB9Ci0gICAg
dm9pZCBtYXJrR290RW5kT2ZSZW1vdGVDYW5kaWRhdGVzKCkgeyBtX2dvdEVuZE9mUmVtb3RlQ2Fu
ZGlkYXRlcyA9IHRydWU7IH0KLQotcHJpdmF0ZToKLSAgICBPd3JUcmFuc2NlaXZlcihjb25zdCBT
dHJpbmcmIG1pZCwgT3dyU2Vzc2lvbiogc2Vzc2lvbikKLSAgICAgICAgOiBtX21pZChtaWQpCi0g
ICAgICAgICwgbV9zZXNzaW9uKHNlc3Npb24pCi0gICAgeyB9Ci0KLSAgICBTdHJpbmcgbV9taWQ7
Ci0gICAgT3dyU2Vzc2lvbiogbV9zZXNzaW9uOwotCi0gICAgT3dySWNlU3RhdGUgbV9vd3JJY2VT
dGF0ZSB7IE9XUl9JQ0VfU1RBVEVfRElTQ09OTkVDVEVEIH07Ci0gICAgYm9vbCBtX2dvdEVuZE9m
UmVtb3RlQ2FuZGlkYXRlcyB7IGZhbHNlIH07Ci19OwotCi1jbGFzcyBNZWRpYUVuZHBvaW50T3dy
IDogcHVibGljIE1lZGlhRW5kcG9pbnQgewotcHVibGljOgotICAgIE1lZGlhRW5kcG9pbnRPd3Io
TWVkaWFFbmRwb2ludENsaWVudCYpOwotICAgIH5NZWRpYUVuZHBvaW50T3dyKCk7Ci0KLSAgICB2
b2lkIHNldENvbmZpZ3VyYXRpb24oTWVkaWFFbmRwb2ludENvbmZpZ3VyYXRpb24mJikgb3ZlcnJp
ZGU7Ci0KLSAgICB2b2lkIGdlbmVyYXRlRHRsc0luZm8oKSBvdmVycmlkZTsKLSAgICBNZWRpYVBh
eWxvYWRWZWN0b3IgZ2V0RGVmYXVsdEF1ZGlvUGF5bG9hZHMoKSBvdmVycmlkZTsKLSAgICBNZWRp
YVBheWxvYWRWZWN0b3IgZ2V0RGVmYXVsdFZpZGVvUGF5bG9hZHMoKSBvdmVycmlkZTsKLSAgICBN
ZWRpYVBheWxvYWRWZWN0b3IgZmlsdGVyUGF5bG9hZHMoY29uc3QgTWVkaWFQYXlsb2FkVmVjdG9y
JiByZW1vdGVQYXlsb2FkcywgY29uc3QgTWVkaWFQYXlsb2FkVmVjdG9yJiBkZWZhdWx0UGF5bG9h
ZHMpIG92ZXJyaWRlOwotCi0gICAgVXBkYXRlUmVzdWx0IHVwZGF0ZVJlY2VpdmVDb25maWd1cmF0
aW9uKE1lZGlhRW5kcG9pbnRTZXNzaW9uQ29uZmlndXJhdGlvbiosIGJvb2wgaXNJbml0aWF0b3Ip
IG92ZXJyaWRlOwotICAgIFVwZGF0ZVJlc3VsdCB1cGRhdGVTZW5kQ29uZmlndXJhdGlvbihNZWRp
YUVuZHBvaW50U2Vzc2lvbkNvbmZpZ3VyYXRpb24qLCBjb25zdCBSZWFsdGltZU1lZGlhU291cmNl
TWFwJiwgYm9vbCBpc0luaXRpYXRvcikgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIGFkZFJlbW90ZUNh
bmRpZGF0ZShjb25zdCBJY2VDYW5kaWRhdGUmLCBjb25zdCBTdHJpbmcmIG1pZCwgY29uc3QgU3Ry
aW5nJiB1ZnJhZywgY29uc3QgU3RyaW5nJiBwYXNzd29yZCkgb3ZlcnJpZGU7Ci0KLSAgICBSZWY8
UmVhbHRpbWVNZWRpYVNvdXJjZT4gY3JlYXRlTXV0ZWRSZW1vdGVTb3VyY2UoY29uc3QgU3RyaW5n
JiBtaWQsIFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGUpIG92ZXJyaWRlOwotICAgIHZvaWQgcmVw
bGFjZU11dGVkUmVtb3RlU291cmNlTWlkKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYpIGZp
bmFsOwotICAgIHZvaWQgcmVwbGFjZVNlbmRTb3VyY2UoUmVhbHRpbWVNZWRpYVNvdXJjZSYsIGNv
bnN0IFN0cmluZyYgbWlkKSBvdmVycmlkZTsKLQotICAgIHZvaWQgc3RvcCgpIG92ZXJyaWRlOwot
Ci0gICAgc2l6ZV90IHRyYW5zY2VpdmVySW5kZXhGb3JTZXNzaW9uKE93clNlc3Npb24qKSBjb25z
dDsKLSAgICBjb25zdCBTdHJpbmcmIHNlc3Npb25NaWQoT3dyU2Vzc2lvbiopIGNvbnN0OwotICAg
IE93clRyYW5zY2VpdmVyKiBtYXRjaFRyYW5zY2VpdmVyQnlNaWQoY29uc3QgU3RyaW5nJiBtaWQp
IGNvbnN0OwotCi0gICAgdm9pZCBkaXNwYXRjaE5ld0ljZUNhbmRpZGF0ZShjb25zdCBTdHJpbmcm
IG1pZCwgSWNlQ2FuZGlkYXRlJiYpOwotICAgIHZvaWQgZGlzcGF0Y2hHYXRoZXJpbmdEb25lKGNv
bnN0IFN0cmluZyYgbWlkKTsKLSAgICB2b2lkIHByb2Nlc3NJY2VUcmFuc3BvcnRTdGF0ZUNoYW5n
ZShPd3JTZXNzaW9uKik7Ci0gICAgdm9pZCBkaXNwYXRjaER0bHNGaW5nZXJwcmludChnY2hhciog
cHJpdmF0ZUtleSwgZ2NoYXIqIGNlcnRpZmljYXRlLCBjb25zdCBTdHJpbmcmIGZpbmdlcnByaW50
LCBjb25zdCBTdHJpbmcmIGZpbmdlcnByaW50RnVuY3Rpb24pOwotICAgIHZvaWQgdW5tdXRlUmVt
b3RlU291cmNlKGNvbnN0IFN0cmluZyYgbWlkLCBPd3JNZWRpYVNvdXJjZSopOwotCi1wcml2YXRl
OgotICAgIGVudW0gU2Vzc2lvblR5cGUgeyBTZXNzaW9uVHlwZU1lZGlhIH07Ci0KLSAgICBzdHJ1
Y3QgVHJhbnNjZWl2ZXJDb25maWcgewotICAgICAgICBTZXNzaW9uVHlwZSB0eXBlOwotICAgICAg
ICBib29sIGlzRHRsc0NsaWVudDsKLSAgICAgICAgU3RyaW5nIG1pZDsKLSAgICB9OwotCi0gICAg
c3RkOjp1bmlxdWVfcHRyPFJUQ0RhdGFDaGFubmVsSGFuZGxlcj4gY3JlYXRlRGF0YUNoYW5uZWxI
YW5kbGVyKGNvbnN0IFN0cmluZyYsIGNvbnN0IFJUQ0RhdGFDaGFubmVsSW5pdCYpIGZpbmFsOwot
Ci0gICAgdm9pZCBwcmVwYXJlU2Vzc2lvbihPd3JTZXNzaW9uKiwgUGVlck1lZGlhRGVzY3JpcHRp
b24qKTsKLSAgICB2b2lkIHByZXBhcmVNZWRpYVNlc3Npb24oT3dyTWVkaWFTZXNzaW9uKiwgUGVl
ck1lZGlhRGVzY3JpcHRpb24qLCBib29sIGlzSW5pdGlhdG9yKTsKLQotICAgIHZvaWQgZW5zdXJl
VHJhbnNwb3J0QWdlbnRBbmRUcmFuc2NlaXZlcnMoYm9vbCBpc0luaXRpYXRvciwgY29uc3QgVmVj
dG9yPFRyYW5zY2VpdmVyQ29uZmlnPiYpOwotICAgIHZvaWQgaW50ZXJuYWxBZGRSZW1vdGVDYW5k
aWRhdGUoT3dyU2Vzc2lvbiosIGNvbnN0IEljZUNhbmRpZGF0ZSYsIGNvbnN0IFN0cmluZyYgdWZy
YWcsIGNvbnN0IFN0cmluZyYgcGFzc3dvcmQpOwotCi0gICAgc3RkOjpvcHRpb25hbDxNZWRpYUVu
ZHBvaW50Q29uZmlndXJhdGlvbj4gbV9jb25maWd1cmF0aW9uOwotICAgIEdSZWdleCogbV9oZWxw
ZXJTZXJ2ZXJSZWdFeDsKLQotICAgIE93clRyYW5zcG9ydEFnZW50KiBtX3RyYW5zcG9ydEFnZW50
OwotICAgIFZlY3RvcjxSZWZQdHI8T3dyVHJhbnNjZWl2ZXI+PiBtX3RyYW5zY2VpdmVyczsKLSAg
ICBIYXNoTWFwPFN0cmluZywgUmVmUHRyPFJlYWx0aW1lTWVkaWFTb3VyY2VPd3I+PiBtX211dGVk
UmVtb3RlU291cmNlczsKLQotICAgIE1lZGlhRW5kcG9pbnRDbGllbnQmIG1fY2xpZW50OwotCi0g
ICAgdW5zaWduZWQgbV9udW1iZXJPZlJlY2VpdmVQcmVwYXJlZFNlc3Npb25zOwotICAgIHVuc2ln
bmVkIG1fbnVtYmVyT2ZTZW5kUHJlcGFyZWRTZXNzaW9uczsKLQotICAgIFN0cmluZyBtX2R0bHNQ
cml2YXRlS2V5OwotICAgIFN0cmluZyBtX2R0bHNDZXJ0aWZpY2F0ZTsKLX07Ci0KLX0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShXRUJfUlRDKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vb3BlbndlYnJ0Yy9PcGVuV2ViUlRD
VXRpbGl0aWVzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL29wZW53
ZWJydGMvT3BlbldlYlJUQ1V0aWxpdGllcy5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IGU0Y2ZiNTlkZjUwMWQ5YjFlMTc0ZTc3NDBiNzY0N2IxYTQ4YzkzNjAuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWVkaWFzdHJlYW0vb3BlbndlYnJ0Yy9PcGVuV2ViUlRDVXRpbGl0aWVzLmNwcAorKysgL2Rl
di9udWxsCkBAIC0xLDU3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgSWdhbGlh
IFMuTAotICogQ29weXJpZ2h0IChDKSAyMDE1IE1ldHJvbG9naWNhbAotICoKLSAqIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6
Ci0gKgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBj
b3B5cmlnaHQgaG9sZGVyIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICog
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVAotICogSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0g
KiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIFVTRShPUEVOV0VCUlRD
KQotI2luY2x1ZGUgIk9wZW5XZWJSVENVdGlsaXRpZXMuaCIKLQotI2luY2x1ZGUgPG93ci9vd3Iu
aD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi12b2lkIGluaXRpYWxpemVPcGVuV2ViUlRDKCkK
LXsKLSAgICBzdGF0aWMgYm9vbCBpc0luaXRpYWxpemVkID0gZmFsc2U7Ci0gICAgaWYgKGlzSW5p
dGlhbGl6ZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIG93cl9pbml0KGdfbWFpbl9jb250ZXh0
X2RlZmF1bHQoKSk7Ci0gICAgaXNJbml0aWFsaXplZCA9IHRydWU7Ci19Ci0KLX0KLQotI2VuZGlm
IC8vIFVTRShPUEVOV0VCUlRDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWVkaWFzdHJlYW0vb3BlbndlYnJ0Yy9PcGVuV2ViUlRDVXRpbGl0aWVzLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9vcGVud2VicnRjL09wZW5XZWJSVENVdGlsaXRpZXMu
aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmVkNDc0YmJmYTRjNTMyMjdmYjU2Njlh
YjRiMzMwYzYyZmFjODliOC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9vcGVud2VicnRjL09w
ZW5XZWJSVENVdGlsaXRpZXMuaAorKysgL2Rldi9udWxsCkBAIC0xLDQwICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTUgSWdhbGlhIFMuTAotICogQ29weXJpZ2h0IChDKSAyMDE1IE1l
dHJvbG9naWNhbAotICoKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiAz
LiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUgbmFtZXMg
b2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogSE9MREVSIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICog
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLQotdm9pZCBpbml0aWFsaXplT3BlbldlYlJUQygpOwotCi19CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9vcGVud2VicnRjL1JlYWx0aW1lQXVk
aW9Tb3VyY2VPd3IuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL29wZW53
ZWJydGMvUmVhbHRpbWVBdWRpb1NvdXJjZU93ci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCBjYWI3MDUwODRiOTRjZmM4ZTdiMTlmN2Q3ZTgyMzI2OGNiY2VmNDY2Li4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21lZGlhc3RyZWFtL29wZW53ZWJydGMvUmVhbHRpbWVBdWRpb1NvdXJjZU93ci5oCisrKyAv
ZGV2L251bGwKQEAgLTEsNzAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSwyMDE2
IElnYWxpYSBTLkwKLSAqIENvcHlyaWdodCAoQykgMjAxNSBNZXRyb2xvZ2ljYWwKLSAqCi0gKiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQot
ICogbWV0OgotICoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogMy4gTmVpdGhlciB0aGUgbmFtZSBv
ZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgot
ICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQKLSAqIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUoTUVESUFfU1RS
RUFNKSAmJiBVU0UoT1BFTldFQlJUQykKLQotI2luY2x1ZGUgIlJlYWx0aW1lTWVkaWFTb3VyY2VP
d3IuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBSZWFsdGltZUF1ZGlvU291cmNl
T3dyIDogcHVibGljIFJlYWx0aW1lTWVkaWFTb3VyY2VPd3IgewotcHVibGljOgotUmVhbHRpbWVB
dWRpb1NvdXJjZU93cihPd3JNZWRpYVNvdXJjZSogbWVkaWFTb3VyY2UsIGNvbnN0IFN0cmluZyYg
aWQsIFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGUgdHlwZSwgY29uc3QgU3RyaW5nJiBuYW1lKQot
ICAgIDogUmVhbHRpbWVNZWRpYVNvdXJjZU93cihtZWRpYVNvdXJjZSwgaWQsIHR5cGUsIG5hbWUp
Ci0gICAgewotICAgIH0KLQotUmVhbHRpbWVBdWRpb1NvdXJjZU93cihjb25zdCBTdHJpbmcmIGlk
LCBSZWFsdGltZU1lZGlhU291cmNlOjpUeXBlIHR5cGUsIGNvbnN0IFN0cmluZyYgbmFtZSkKLSAg
ICA6IFJlYWx0aW1lTWVkaWFTb3VyY2VPd3IoaWQsIHR5cGUsIG5hbWUpCi0gICAgewotICAgIH0K
LQotICAgIHZpcnR1YWwgflJlYWx0aW1lQXVkaW9Tb3VyY2VPd3IoKSB7IH0KLQotICAgIGJvb2wg
YXBwbHlTaXplKGNvbnN0IEludFNpemUmKSBmaW5hbCB7IHJldHVybiBmYWxzZTsgfQotCi1wcm90
ZWN0ZWQ6Ci0gICAgdm9pZCBpbml0aWFsaXplU2V0dGluZ3MoKSBmaW5hbCB7Ci0gICAgICAgIGlm
IChtX2N1cnJlbnRTZXR0aW5ncy5kZXZpY2VJZCgpLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIG1f
Y3VycmVudFNldHRpbmdzLnNldFN1cHBvcnRlZENvbnN0cmFpbnRzKHN1cHBvcnRlZENvbnN0cmFp
bnRzKCkpOwotCi0gICAgICAgIG1fY3VycmVudFNldHRpbmdzLnNldERldmljZUlkKGlkKCkpOwot
ICAgIH0KLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShN
RURJQV9TVFJFQU0pICYmIFVTRShPUEVOV0VCUlRDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vb3BlbndlYnJ0Yy9SZWFsdGltZU1lZGlhU291cmNlQ2Vu
dGVyT3dyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL29wZW53ZWJy
dGMvUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlck93ci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IGFhYWQ4YTIzOTAyNzdmMzc5NzAxNDEyNDk5MWY0YWRkYThhZDg0MzguLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWVkaWFzdHJlYW0vb3BlbndlYnJ0Yy9SZWFsdGltZU1lZGlhU291cmNlQ2VudGVy
T3dyLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE5MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDExIEVyaWNzc29uIEFCLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTUgSWdhbGlhIFMuTC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxNSBNZXRyb2xvZ2ljYWwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqICAgIGluIHRoZSBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqICAgIGRpc3RyaWJ1
dGlvbi4KLSAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgRXJpY3Nzb24gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMgY29udHJpYnV0b3JzCi0gKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSAqICAgIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
LSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNv
bmZpZy5oIgotCi0jaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkgJiYgVVNFKE9QRU5XRUJSVEMpCi0j
aW5jbHVkZSAiUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlck93ci5oIgotCi0jaW5jbHVkZSAiQ2Fw
dHVyZURldmljZS5oIgotI2luY2x1ZGUgIk1lZGlhU3RyZWFtUHJpdmF0ZS5oIgotI2luY2x1ZGUg
Ik5vdEltcGxlbWVudGVkLmgiCi0jaW5jbHVkZSAiT3BlbldlYlJUQ1V0aWxpdGllcy5oIgotI2lu
Y2x1ZGUgIlJlYWx0aW1lQXVkaW9Tb3VyY2VPd3IuaCIKLSNpbmNsdWRlICJSZWFsdGltZU1lZGlh
U291cmNlQ2FwYWJpbGl0aWVzLmgiCi0jaW5jbHVkZSAiUmVhbHRpbWVWaWRlb1NvdXJjZU93ci5o
IgotI2luY2x1ZGUgPG93ci9vd3IuaD4KLSNpbmNsdWRlIDxvd3Ivb3dyX2xvY2FsLmg+Ci0jaW5j
bHVkZSA8b3dyL293cl9tZWRpYV9zb3VyY2UuaD4KLSNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5o
PgotI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi9VVUlELmg+
Ci0jaW5jbHVkZSA8d3RmL2dsaWIvR1VuaXF1ZVB0ci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NT
dHJpbmcuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+Ci0KLW5hbWVzcGFjZSBX
ZWJDb3JlIHsKLQotUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlciYgUmVhbHRpbWVNZWRpYVNvdXJj
ZUNlbnRlcjo6cGxhdGZvcm1DZW50ZXIoKQotewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7
Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFJlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJPd3I+
IGNlbnRlcjsKLSAgICByZXR1cm4gY2VudGVyOwotfQotCi1zdGF0aWMgdm9pZCBtZWRpYVNvdXJj
ZXNBdmFpbGFibGVDYWxsYmFjayhHTGlzdCogc291cmNlcywgZ3BvaW50ZXIgdXNlckRhdGEpCi17
Ci0gICAgUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlck93ciogY2VudGVyID0gcmVpbnRlcnByZXRf
Y2FzdDxSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyT3dyKj4odXNlckRhdGEpOwotICAgIGNlbnRl
ci0+bWVkaWFTb3VyY2VzQXZhaWxhYmxlKHNvdXJjZXMpOwotfQotCi1SZWFsdGltZU1lZGlhU291
cmNlQ2VudGVyT3dyOjpSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyT3dyKCkKLXsKLSAgICBpbml0
aWFsaXplT3BlbldlYlJUQygpOwotfQotCi1SZWFsdGltZU1lZGlhU291cmNlQ2VudGVyT3dyOjp+
UmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlck93cigpCi17Ci19Ci0KLXZvaWQgUmVhbHRpbWVNZWRp
YVNvdXJjZUNlbnRlck93cjo6dmFsaWRhdGVSZXF1ZXN0Q29uc3RyYWludHMoVmFsaWRDb25zdHJh
aW50c0hhbmRsZXImJiB2YWxpZEhhbmRsZXIsIEludmFsaWRDb25zdHJhaW50c0hhbmRsZXImJiBp
bnZhbGlkSGFuZGxlciwgY29uc3QgTWVkaWFDb25zdHJhaW50cyYgYXVkaW9Db25zdHJhaW50cywg
Y29uc3QgTWVkaWFDb25zdHJhaW50cyYgdmlkZW9Db25zdHJhaW50cywgU3RyaW5nJiYgZGV2aWNl
SWRlbnRpZmllckhhc2hTYWx0KQotewotICAgIG1fdmFsaWRDb25zdHJhaW50c0hhbmRsZXIgPSBX
VEZNb3ZlKHZhbGlkSGFuZGxlcik7Ci0gICAgbV9pbnZhbGlkQ29uc3RyYWludHNIYW5kbGVyID0g
V1RGTW92ZShpbnZhbGlkSGFuZGxlcik7Ci0KLSAgICBWZWN0b3I8U3RyaW5nPiBhdWRpb1NvdXJj
ZXM7Ci0gICAgVmVjdG9yPFN0cmluZz4gdmlkZW9Tb3VyY2VzOwotCi0gICAgLy8gRklYTUU6IEFj
dHVhbGx5IGRvIGNvbnN0cmFpbnRzIHZhbGlkYXRpb24uIFRoZSBNZWRpYUNvbnN0cmFpbnRzCi0g
ICAgLy8gbmVlZCB0byBjb21wbHkgd2l0aCB0aGUgYXZhaWxhYmxlIGF1ZGlvL3ZpZGVvIGRldmlj
ZShzKQotICAgIC8vIGNhcGFiaWxpdGllcy4gU2VlIGJ1ZyAjMTIzMzQ1LgotICAgIGlmIChhdWRp
b0NvbnN0cmFpbnRzLmlzVmFsaWQpCi0gICAgICAgIGF1ZGlvU291cmNlcy5hcHBlbmQoU3RyaW5n
KCJhdWRpbyIpKTsKLQotICAgIGlmICh2aWRlb0NvbnN0cmFpbnRzLmlzVmFsaWQpCi0gICAgICAg
IHZpZGVvU291cmNlcy5hcHBlbmQoU3RyaW5nKCJ2aWRlbyIpKTsKLQotICAgIG1fdmFsaWRDb25z
dHJhaW50c0hhbmRsZXIoV1RGTW92ZShhdWRpb1NvdXJjZXMpLCBXVEZNb3ZlKHZpZGVvU291cmNl
cyksIFdURk1vdmUoZGV2aWNlSWRlbnRpZmllckhhc2hTYWx0KSk7Ci0gICAgbV92YWxpZENvbnN0
cmFpbnRzSGFuZGxlciA9IG51bGxwdHI7Ci0gICAgbV9pbnZhbGlkQ29uc3RyYWludHNIYW5kbGVy
ID0gbnVsbHB0cjsKLX0KLQotdm9pZCBSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyT3dyOjpjcmVh
dGVNZWRpYVN0cmVhbShOZXdNZWRpYVN0cmVhbUhhbmRsZXImJiBjb21wbGV0aW9uSGFuZGxlciwg
Y29uc3QgU3RyaW5nJiBhdWRpb0RldmljZUlELCBjb25zdCBTdHJpbmcmIHZpZGVvRGV2aWNlSUQs
IGNvbnN0IE1lZGlhQ29uc3RyYWludHMqLCBjb25zdCBNZWRpYUNvbnN0cmFpbnRzKikKLXsKLSAg
ICBpbnQgdHlwZXMgPSBPV1JfTUVESUFfVFlQRV9VTktOT1dOOwotCi0gICAgaWYgKCFhdWRpb0Rl
dmljZUlELmlzRW1wdHkoKSkKLSAgICAgICAgdHlwZXMgfD0gT1dSX01FRElBX1RZUEVfQVVESU87
Ci0gICAgaWYgKCF2aWRlb0RldmljZUlELmlzRW1wdHkoKSkKLSAgICAgICAgdHlwZXMgfD0gT1dS
X01FRElBX1RZUEVfVklERU87Ci0KLSAgICBtX2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcik7Ci0KLSAgICBvd3JfZ2V0X2NhcHR1cmVfc291cmNlcyhzdGF0aWNf
Y2FzdDxPd3JNZWRpYVR5cGU+KHR5cGVzKSwgbWVkaWFTb3VyY2VzQXZhaWxhYmxlQ2FsbGJhY2ss
IHRoaXMpOwotfQotCi1WZWN0b3I8Q2FwdHVyZURldmljZT4gUmVhbHRpbWVNZWRpYVNvdXJjZUNl
bnRlck93cjo6Z2V0TWVkaWFTdHJlYW1EZXZpY2VzKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgp
OwotICAgIHJldHVybiBWZWN0b3I8Q2FwdHVyZURldmljZT4oKTsKLX0KLQotdm9pZCBSZWFsdGlt
ZU1lZGlhU291cmNlQ2VudGVyT3dyOjptZWRpYVNvdXJjZXNBdmFpbGFibGUoR0xpc3QqIHNvdXJj
ZXMpCi17Ci0gICAgVmVjdG9yPFJlZjxSZWFsdGltZU1lZGlhU291cmNlPj4gYXVkaW9Tb3VyY2Vz
OwotICAgIFZlY3RvcjxSZWY8UmVhbHRpbWVNZWRpYVNvdXJjZT4+IHZpZGVvU291cmNlczsKLQot
ICAgIGZvciAoYXV0byBpdGVtID0gc291cmNlczsgaXRlbTsgaXRlbSA9IGl0ZW0tPm5leHQpIHsK
LSAgICAgICAgT3dyTWVkaWFTb3VyY2UqIHNvdXJjZSA9IE9XUl9NRURJQV9TT1VSQ0UoaXRlbS0+
ZGF0YSk7Ci0KLSAgICAgICAgR1VuaXF1ZU91dFB0cjxnY2hhcj4gbmFtZTsKLSAgICAgICAgT3dy
TWVkaWFUeXBlIG1lZGlhVHlwZTsKLSAgICAgICAgZ19vYmplY3RfZ2V0KHNvdXJjZSwgIm1lZGlh
LXR5cGUiLCAmbWVkaWFUeXBlLCAibmFtZSIsICZuYW1lLm91dFB0cigpLCBOVUxMKTsKLSAgICAg
ICAgU3RyaW5nIHNvdXJjZU5hbWUobmFtZS5nZXQoKSk7Ci0gICAgICAgIFN0cmluZyBpZChjcmVh
dGVDYW5vbmljYWxVVUlEU3RyaW5nKCkpOwotCi0gICAgICAgIGlmIChnX2dldGVudigiT1dSX1VT
RV9URVNUX1NPVVJDRVMiKSkgewotICAgICAgICAgICAgT3dyU291cmNlVHlwZSBzb3VyY2VUeXBl
ID0gT1dSX1NPVVJDRV9UWVBFX1VOS05PV047Ci0gICAgICAgICAgICBnX29iamVjdF9nZXQoc291
cmNlLCAidHlwZSIsICZzb3VyY2VUeXBlLCBOVUxMKTsKLSAgICAgICAgICAgIGlmIChzb3VyY2VU
eXBlICE9IE9XUl9TT1VSQ0VfVFlQRV9URVNUKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICB9Ci0KLSAgICAgICAgUmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlwZSBtZWRpYVNvdXJj
ZVR5cGU7Ci0gICAgICAgIGlmIChtZWRpYVR5cGUgJiBPV1JfTUVESUFfVFlQRV9BVURJTykKLSAg
ICAgICAgICAgIG1lZGlhU291cmNlVHlwZSA9IFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGU6OkF1
ZGlvOwotICAgICAgICBlbHNlIGlmIChtZWRpYVR5cGUgJiBPV1JfTUVESUFfVFlQRV9WSURFTykK
LSAgICAgICAgICAgIG1lZGlhU291cmNlVHlwZSA9IFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGU6
OlZpZGVvOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIG1lZGlhU291cmNlVHlwZSA9IFJl
YWx0aW1lTWVkaWFTb3VyY2U6OlR5cGU6Ok5vbmU7Ci0gICAgICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKLSAgICAgICAgfQotCi0gICAgICAgIFJlZlB0cjxSZWFsdGltZU1lZGlhU291cmNl
T3dyPiBtZWRpYVNvdXJjZTsKLSAgICAgICAgaWYgKG1lZGlhU291cmNlVHlwZSA9PSBSZWFsdGlt
ZU1lZGlhU291cmNlOjpUeXBlOjpBdWRpbykKLSAgICAgICAgICAgIG1lZGlhU291cmNlID0gYWRv
cHRSZWYobmV3IFJlYWx0aW1lQXVkaW9Tb3VyY2VPd3Ioc291cmNlLCBpZCwgbWVkaWFTb3VyY2VU
eXBlLCBzb3VyY2VOYW1lKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1lZGlhU291cmNl
ID0gYWRvcHRSZWYobmV3IFJlYWx0aW1lVmlkZW9Tb3VyY2VPd3Ioc291cmNlLCBpZCwgbWVkaWFT
b3VyY2VUeXBlLCBzb3VyY2VOYW1lKSk7Ci0KLSAgICAgICAgUmVhbHRpbWVNZWRpYVNvdXJjZU93
ck1hcDo6aXRlcmF0b3Igc291cmNlSXRlcmF0b3IgPSBtX3NvdXJjZU1hcC5maW5kKGlkKTsKLSAg
ICAgICAgaWYgKHNvdXJjZUl0ZXJhdG9yID09IG1fc291cmNlTWFwLmVuZCgpKQotICAgICAgICAg
ICAgbV9zb3VyY2VNYXAuYWRkKGlkLCBtZWRpYVNvdXJjZS5jb3B5UmVmKCkpOwotCi0gICAgICAg
IGlmIChtZWRpYVR5cGUgJiBPV1JfTUVESUFfVFlQRV9BVURJTykKLSAgICAgICAgICAgIGF1ZGlv
U291cmNlcy5hcHBlbmQobWVkaWFTb3VyY2UucmVsZWFzZU5vbk51bGwoKSk7Ci0gICAgICAgIGVs
c2UgaWYgKG1lZGlhVHlwZSAmIE9XUl9NRURJQV9UWVBFX1ZJREVPKQotICAgICAgICAgICAgdmlk
ZW9Tb3VyY2VzLmFwcGVuZChtZWRpYVNvdXJjZS5yZWxlYXNlTm9uTnVsbCgpKTsKLQotICAgIH0K
LQotICAgIGlmICh2aWRlb1NvdXJjZXMuaXNFbXB0eSgpICYmIGF1ZGlvU291cmNlcy5pc0VtcHR5
KCkpCi0gICAgICAgIG1fY29tcGxldGlvbkhhbmRsZXIobnVsbHB0cik7Ci0gICAgZWxzZQotICAg
ICAgICBtX2NvbXBsZXRpb25IYW5kbGVyKE1lZGlhU3RyZWFtUHJpdmF0ZTo6Y3JlYXRlKGF1ZGlv
U291cmNlcywgdmlkZW9Tb3VyY2VzKSk7Ci0KLX0KLQotUmVhbHRpbWVNZWRpYVNvdXJjZSogUmVh
bHRpbWVNZWRpYVNvdXJjZUNlbnRlck93cjo6Zmlyc3RTb3VyY2UoUmVhbHRpbWVNZWRpYVNvdXJj
ZTo6VHlwZSB0eXBlKQotewotICAgIGZvciAoYXV0byBpdGVyID0gbV9zb3VyY2VNYXAuYmVnaW4o
KTsgaXRlciAhPSBtX3NvdXJjZU1hcC5lbmQoKTsgKytpdGVyKSB7Ci0gICAgICAgIFJlZlB0cjxS
ZWFsdGltZU1lZGlhU291cmNlPiBzb3VyY2UgPSBpdGVyLT52YWx1ZTsKLSAgICAgICAgaWYgKHNv
dXJjZS0+dHlwZSgpID09IHR5cGUpCi0gICAgICAgICAgICByZXR1cm4gc291cmNlLmdldCgpOwot
ICAgIH0KLQotICAgIHJldHVybiBudWxscHRyOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
Ci0KLSNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFNKSAmJiBVU0UoT1BFTldFQlJUQykKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL29wZW53ZWJydGMv
UmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlck93ci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWVkaWFzdHJlYW0vb3BlbndlYnJ0Yy9SZWFsdGltZU1lZGlhU291cmNlQ2VudGVyT3dyLmgKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY4MGQ5MTgyMTMwMzgyZjQzMDJmMTI3OGRhYmJm
YTI0ODJhMzM1MzAuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vb3BlbndlYnJ0Yy9SZWFsdGlt
ZU1lZGlhU291cmNlQ2VudGVyT3dyLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMDEgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBFcmljc3NvbiBBQi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDE1IElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgTWV0cm9sb2dpY2FsLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiAgICBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
Ci0gKiAgICBkaXN0cmlidXRpb24uCi0gKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIEVyaWNzc29u
IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICogICAgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0gKiAgICBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O
VFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAot
ICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLSNwcmFnbWEgb25jZQotCi0jaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkgJiYgVVNFKE9QRU5X
RUJSVEMpCi0KLSNpbmNsdWRlICJDYXB0dXJlRGV2aWNlTWFuYWdlci5oIgotI2luY2x1ZGUgIlJl
YWx0aW1lTWVkaWFTb3VyY2VDZW50ZXIuaCIKLSNpbmNsdWRlICJSZWFsdGltZU1lZGlhU291cmNl
T3dyLmgiCi0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0K
LWNsYXNzIENhcHR1cmVEZXZpY2U7Ci1jbGFzcyBNZWRpYVN0cmVhbVByaXZhdGU7Ci1jbGFzcyBS
ZWFsdGltZU1lZGlhU291cmNlOwotY2xhc3MgTWVkaWFTdHJlYW1Tb3VyY2VzUXVlcnlDbGllbnQ7
Ci1jbGFzcyBUcmFja1NvdXJjZUluZm87Ci0KLWNsYXNzIFJlYWx0aW1lTWVkaWFTb3VyY2VDZW50
ZXJPd3IgZmluYWwgOiBwdWJsaWMgUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlciB7Ci1wdWJsaWM6
Ci0gICAgUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlck93cigpOwotICAgIH5SZWFsdGltZU1lZGlh
U291cmNlQ2VudGVyT3dyKCk7Ci0KLSAgICB2b2lkIHZhbGlkYXRlUmVxdWVzdENvbnN0cmFpbnRz
KFZhbGlkQ29uc3RyYWludHNIYW5kbGVyJiYgdmFsaWRIYW5kbGVyLCBJbnZhbGlkQ29uc3RyYWlu
dHNIYW5kbGVyJiYgaW52YWxpZEhhbmRsZXIsIGNvbnN0IE1lZGlhQ29uc3RyYWludHMmIGF1ZGlv
Q29uc3RyYWludHMsIGNvbnN0IE1lZGlhQ29uc3RyYWludHMmIHZpZGVvQ29uc3RyYWludHMsIFN0
cmluZyYmKSBmaW5hbDsKLQotICAgIHZvaWQgY3JlYXRlTWVkaWFTdHJlYW0oTmV3TWVkaWFTdHJl
YW1IYW5kbGVyJiYsIGNvbnN0IFN0cmluZyYgYXVkaW9EZXZpY2VJRCwgY29uc3QgU3RyaW5nJiB2
aWRlb0RldmljZUlELCBjb25zdCBNZWRpYUNvbnN0cmFpbnRzKiB2aWRlb0NvbnN0cmFpbnRzLCBj
b25zdCBNZWRpYUNvbnN0cmFpbnRzKiBhdWRpb0NvbnN0cmFpbnRzKSBmaW5hbDsKLQotICAgIFZl
Y3RvcjxDYXB0dXJlRGV2aWNlPiBnZXRNZWRpYVN0cmVhbURldmljZXMoKSBmaW5hbDsKLQotICAg
IHZvaWQgbWVkaWFTb3VyY2VzQXZhaWxhYmxlKEdMaXN0KiBzb3VyY2VzKTsKLQotcHJpdmF0ZToK
LSAgICBSZWFsdGltZU1lZGlhU291cmNlOjpBdWRpb0NhcHR1cmVGYWN0b3J5JiBkZWZhdWx0QXVk
aW9GYWN0b3J5KCkgZmluYWwgeyByZXR1cm4gbV9kZWZhdWx0QXVkaW9GYWN0b3J5OyB9Ci0gICAg
UmVhbHRpbWVNZWRpYVNvdXJjZTo6VmlkZW9DYXB0dXJlRmFjdG9yeSYgZGVmYXVsdFZpZGVvRmFj
dG9yeSgpIGZpbmFsIHsgcmV0dXJuIG1fZGVmYXVsdFZpZGVvRmFjdG9yeTsgfQotICAgIENhcHR1
cmVEZXZpY2VNYW5hZ2VyJiBkZWZhdWx0QXVkaW9DYXB0dXJlRGV2aWNlTWFuYWdlcigpIGZpbmFs
IHsgcmV0dXJuIG1fZGVmYXVsdEF1ZGlvQ2FwdHVyZURldmljZU1hbmFnZXI7IH0KLSAgICBDYXB0
dXJlRGV2aWNlTWFuYWdlciYgZGVmYXVsdFZpZGVvQ2FwdHVyZURldmljZU1hbmFnZXIoKSBmaW5h
bCB7IHJldHVybiBtX2RlZmF1bHRWaWRlb0NhcHR1cmVEZXZpY2VNYW5hZ2VyOyB9Ci0KLSAgICBS
ZWFsdGltZU1lZGlhU291cmNlKiBmaXJzdFNvdXJjZShSZWFsdGltZU1lZGlhU291cmNlOjpUeXBl
KTsKLSAgICBSZWFsdGltZU1lZGlhU291cmNlT3dyTWFwIG1fc291cmNlTWFwOwotICAgIFZhbGlk
Q29uc3RyYWludHNIYW5kbGVyIG1fdmFsaWRDb25zdHJhaW50c0hhbmRsZXI7Ci0gICAgSW52YWxp
ZENvbnN0cmFpbnRzSGFuZGxlciBtX2ludmFsaWRDb25zdHJhaW50c0hhbmRsZXI7Ci0gICAgTmV3
TWVkaWFTdHJlYW1IYW5kbGVyIG1fY29tcGxldGlvbkhhbmRsZXI7Ci0KLSAgICBjbGFzcyBBdWRp
b0NhcHR1cmVGYWN0b3J5T3dyIDogcHVibGljIFJlYWx0aW1lTWVkaWFTb3VyY2U6OkF1ZGlvQ2Fw
dHVyZUZhY3RvcnkgewotICAgIHByaXZhdGU6Ci0gICAgICAgIENhcHR1cmVTb3VyY2VPckVycm9y
IGNyZWF0ZUF1ZGlvQ2FwdHVyZVNvdXJjZShjb25zdCBTdHJpbmcmLCBjb25zdCBNZWRpYUNvbnN0
cmFpbnRzKikgZmluYWwgeyByZXR1cm4geyB9OyB9Ci0gICAgfTsKLQotICAgIGNsYXNzIFZpZGVv
Q2FwdHVyZUZhY3RvcnlPd3IgOiBwdWJsaWMgUmVhbHRpbWVNZWRpYVNvdXJjZTo6VmlkZW9DYXB0
dXJlRmFjdG9yeSB7Ci0gICAgcHJpdmF0ZToKLSAgICAgICAgQ2FwdHVyZVNvdXJjZU9yRXJyb3Ig
Y3JlYXRlVmlkZW9DYXB0dXJlU291cmNlKGNvbnN0IFN0cmluZyYsIGNvbnN0IE1lZGlhQ29uc3Ry
YWludHMqKSBmaW5hbCB7IHJldHVybiB7IH07IH0KLSAgICB9OwotCi0gICAgY2xhc3MgQ2FwdHVy
ZURldmljZU1hbmFnZXJPd3IgOiBwdWJsaWMgQ2FwdHVyZURldmljZU1hbmFnZXIgewotICAgIHBy
aXZhdGU6Ci0gICAgICAgIFZlY3RvcjxDYXB0dXJlRGV2aWNlPiYgY2FwdHVyZURldmljZXMoKSBm
aW5hbCB7IHJldHVybiBtX2RldmljZXM7IH0KLQotICAgICAgICBWZWN0b3I8Q2FwdHVyZURldmlj
ZT4gbV9kZXZpY2VzOwotICAgIH07Ci0KLSAgICBBdWRpb0NhcHR1cmVGYWN0b3J5T3dyIG1fZGVm
YXVsdEF1ZGlvRmFjdG9yeTsKLSAgICBWaWRlb0NhcHR1cmVGYWN0b3J5T3dyIG1fZGVmYXVsdFZp
ZGVvRmFjdG9yeTsKLSAgICBDYXB0dXJlRGV2aWNlTWFuYWdlck93ciBtX2RlZmF1bHRBdWRpb0Nh
cHR1cmVEZXZpY2VNYW5hZ2VyOwotICAgIENhcHR1cmVEZXZpY2VNYW5hZ2VyT3dyIG1fZGVmYXVs
dFZpZGVvQ2FwdHVyZURldmljZU1hbmFnZXI7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
Ci0KLSNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFNKSAmJiBVU0UoT1BFTldFQlJUQykKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL29wZW53ZWJydGMv
UmVhbHRpbWVNZWRpYVNvdXJjZU93ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRp
YXN0cmVhbS9vcGVud2VicnRjL1JlYWx0aW1lTWVkaWFTb3VyY2VPd3IuY3BwCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCBlZTc0OTlkMzgwMDY2ZjE0YWI2YzljYjAwODdiZTRiNmRkMDg3
ODVmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL29wZW53ZWJydGMvUmVhbHRpbWVNZWRpYVNv
dXJjZU93ci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw2MCArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDE2IElnYWxpYSBTLkwKLSAqCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBu
b3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9S
UwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIEhPTERF
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0g
KiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lu
Y2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkgJiYgVVNFKE9QRU5X
RUJSVEMpCi0jaW5jbHVkZSAiUmVhbHRpbWVNZWRpYVNvdXJjZU93ci5oIgotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci0KLWNvbnN0IFJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5ncyYgUmVhbHRpbWVN
ZWRpYVNvdXJjZU93cjo6c2V0dGluZ3MoKSBjb25zdAotewotICAgIGNvbnN0X2Nhc3Q8UmVhbHRp
bWVNZWRpYVNvdXJjZU93ciY+KCp0aGlzKS5pbml0aWFsaXplU2V0dGluZ3MoKTsKLSAgICByZXR1
cm4gbV9jdXJyZW50U2V0dGluZ3M7Ci19Ci0KLVJlYWx0aW1lTWVkaWFTb3VyY2VTdXBwb3J0ZWRD
b25zdHJhaW50cyYgUmVhbHRpbWVNZWRpYVNvdXJjZU93cjo6c3VwcG9ydGVkQ29uc3RyYWludHMo
KQotewotICAgIGlmIChtX3N1cHBvcnRlZENvbnN0cmFpbnRzLnN1cHBvcnRzRGV2aWNlSWQoKSkK
LSAgICAgICAgcmV0dXJuIG1fc3VwcG9ydGVkQ29uc3RyYWludHM7Ci0KLSAgICBtX3N1cHBvcnRl
ZENvbnN0cmFpbnRzLnNldFN1cHBvcnRzRGV2aWNlSWQodHJ1ZSk7Ci0gICAgaW5pdGlhbGl6ZVN1
cHBvcnRlZENvbnN0cmFpbnRzKG1fc3VwcG9ydGVkQ29uc3RyYWludHMpOwotCi0gICAgcmV0dXJu
IG1fc3VwcG9ydGVkQ29uc3RyYWludHM7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQot
I2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0pICYmIFVTRShPUEVOV0VCUlRDKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vb3BlbndlYnJ0Yy9SZWFs
dGltZU1lZGlhU291cmNlT3dyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVh
bS9vcGVud2VicnRjL1JlYWx0aW1lTWVkaWFTb3VyY2VPd3IuaApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggN2NmYmY3OGYyNThkOTA4YTU0NGI5OWIxZWM5ODI4NGI1MzNlNGE4NC4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9vcGVud2VicnRjL1JlYWx0aW1lTWVkaWFTb3VyY2VPd3Iu
aAorKysgL2Rldi9udWxsCkBAIC0xLDk5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTUgSWdhbGlhIFMuTAotICogQ29weXJpZ2h0IChDKSAyMDE1IE1ldHJvbG9naWNhbAotICoKLSAq
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
Ci0gKiBtZXQ6Ci0gKgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiAzLiBOZWl0aGVyIHRoZSBuYW1l
IG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
Ci0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAotICogSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIFJlYWx0aW1lTWVkaWFTb3VyY2VPd3JfaAot
I2RlZmluZSBSZWFsdGltZU1lZGlhU291cmNlT3dyX2gKLQotI2lmIEVOQUJMRShNRURJQV9TVFJF
QU0pICYmIFVTRShPUEVOV0VCUlRDKQotCi0jaW5jbHVkZSAiR1JlZlB0ckdTdHJlYW1lci5oIgot
I2luY2x1ZGUgIlJlYWx0aW1lTWVkaWFTb3VyY2UuaCIKLSNpbmNsdWRlIDxvd3Ivb3dyX21lZGlh
X3NvdXJjZS5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0
ci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0KLWNsYXNzIFJlYWx0aW1lTWVkaWFTb3VyY2VDYXBhYmlsaXRpZXM7Ci0KLWNsYXNzIFJl
YWx0aW1lTWVkaWFTb3VyY2VPd3IgOiBwdWJsaWMgUmVhbHRpbWVNZWRpYVNvdXJjZSB7Ci1wdWJs
aWM6Ci1SZWFsdGltZU1lZGlhU291cmNlT3dyKE93ck1lZGlhU291cmNlKiBtZWRpYVNvdXJjZSwg
Y29uc3QgU3RyaW5nJiBpZCwgUmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlwZSB0eXBlLCBjb25zdCBT
dHJpbmcmIG5hbWUpCi0gICAgOiBSZWFsdGltZU1lZGlhU291cmNlKGlkLCB0eXBlLCBuYW1lKQot
ICAgICwgbV9tZWRpYVNvdXJjZShtZWRpYVNvdXJjZSkKLSAgICB7Ci0gICAgICAgIGlmICghbWVk
aWFTb3VyY2UpCi0gICAgICAgICAgICBub3RpZnlNdXRlZENoYW5nZSh0cnVlKTsKLSAgICB9Ci0K
LVJlYWx0aW1lTWVkaWFTb3VyY2VPd3IoY29uc3QgU3RyaW5nJiBpZCwgUmVhbHRpbWVNZWRpYVNv
dXJjZTo6VHlwZSB0eXBlLCBjb25zdCBTdHJpbmcmIG5hbWUpCi0gICAgOiBSZWFsdGltZU1lZGlh
U291cmNlKGlkLCB0eXBlLCBuYW1lKQotICAgICwgbV9tZWRpYVNvdXJjZShudWxscHRyKQotICAg
IHsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIH5SZWFsdGltZU1lZGlhU291cmNlT3dyKCkgeyB9Ci0K
LSAgICB2b2lkIHN3YXBPdXRTaGFsbG93U291cmNlKE93ck1lZGlhU291cmNlJiByZWFsU291cmNl
KQotICAgIHsKLSAgICAgICAgbV9tZWRpYVNvdXJjZSA9ICZyZWFsU291cmNlOwotICAgICAgICBz
ZXRNdXRlZChmYWxzZSk7Ci0gICAgfQotCi0gICAgY29uc3QgUmVhbHRpbWVNZWRpYVNvdXJjZUNh
cGFiaWxpdGllcyYgY2FwYWJpbGl0aWVzKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9jYXBh
YmlsaXRpZXM7IH0KLSAgICBjb25zdCBSZWFsdGltZU1lZGlhU291cmNlU2V0dGluZ3MmIHNldHRp
bmdzKCkgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICBPd3JNZWRpYVNvdXJjZSogbWVkaWFTb3VyY2Uo
KSBjb25zdCB7IHJldHVybiBtX21lZGlhU291cmNlOyB9Ci0KLXByb3RlY3RlZDoKLSAgICB2aXJ0
dWFsIHZvaWQgaW5pdGlhbGl6ZVNldHRpbmdzKCkgeyB9OwotICAgIHZpcnR1YWwgdm9pZCBpbml0
aWFsaXplU3VwcG9ydGVkQ29uc3RyYWludHMoUmVhbHRpbWVNZWRpYVNvdXJjZVN1cHBvcnRlZENv
bnN0cmFpbnRzJikgeyB9OwotICAgIFJlYWx0aW1lTWVkaWFTb3VyY2VTdXBwb3J0ZWRDb25zdHJh
aW50cyYgc3VwcG9ydGVkQ29uc3RyYWludHMoKTsKLQotICAgIFJlYWx0aW1lTWVkaWFTb3VyY2VT
ZXR0aW5ncyBtX2N1cnJlbnRTZXR0aW5nczsKLQotcHJpdmF0ZToKLSAgICBSZWFsdGltZU1lZGlh
U291cmNlU3VwcG9ydGVkQ29uc3RyYWludHMgbV9zdXBwb3J0ZWRDb25zdHJhaW50czsKLSAgICBS
ZWFsdGltZU1lZGlhU291cmNlQ2FwYWJpbGl0aWVzIG1fY2FwYWJpbGl0aWVzOwotICAgIE93ck1l
ZGlhU291cmNlKiBtX21lZGlhU291cmNlOwotfTsKLQotdHlwZWRlZiBIYXNoTWFwPFN0cmluZywg
UmVmUHRyPFJlYWx0aW1lTWVkaWFTb3VyY2VPd3I+PiBSZWFsdGltZU1lZGlhU291cmNlT3dyTWFw
OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU1RS
RUFNKSAmJiBVU0UoT1BFTldFQlJUQykKLQotI2VuZGlmIC8vIFJlYWx0aW1lTWVkaWFTb3VyY2VP
d3JfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vb3Bl
bndlYnJ0Yy9SZWFsdGltZVZpZGVvU291cmNlT3dyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tZWRpYXN0cmVhbS9vcGVud2VicnRjL1JlYWx0aW1lVmlkZW9Tb3VyY2VPd3IuaApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDE4ZWY4NGE3MWE1NzM0N2U4NWQzNTI4MzY5ZTI3OWM3
YTY2ZjQ1NC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9vcGVud2VicnRjL1JlYWx0aW1lVmlk
ZW9Tb3VyY2VPd3IuaAorKysgL2Rldi9udWxsCkBAIC0xLDgyICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTUsMjAxNiBJZ2FsaWEgUy5MCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgTWV0
cm9sb2dpY2FsCi0gKgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICoK
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIDMu
IE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
Ci0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBIT0xERVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0j
aWYgRU5BQkxFKE1FRElBX1NUUkVBTSkgJiYgVVNFKE9QRU5XRUJSVEMpCi0KLSNpbmNsdWRlICJS
ZWFsdGltZU1lZGlhU291cmNlT3dyLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3Mg
UmVhbHRpbWVWaWRlb1NvdXJjZU93ciA6IHB1YmxpYyBSZWFsdGltZU1lZGlhU291cmNlT3dyIHsK
LXB1YmxpYzoKLVJlYWx0aW1lVmlkZW9Tb3VyY2VPd3IoT3dyTWVkaWFTb3VyY2UqIG1lZGlhU291
cmNlLCBjb25zdCBTdHJpbmcmIGlkLCBSZWFsdGltZU1lZGlhU291cmNlOjpUeXBlIHR5cGUsIGNv
bnN0IFN0cmluZyYgbmFtZSkKLSAgICA6IFJlYWx0aW1lTWVkaWFTb3VyY2VPd3IobWVkaWFTb3Vy
Y2UsIGlkLCB0eXBlLCBuYW1lKQotICAgIHsKLSAgICB9Ci0KLVJlYWx0aW1lVmlkZW9Tb3VyY2VP
d3IoY29uc3QgU3RyaW5nJiBpZCwgUmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlwZSB0eXBlLCBjb25z
dCBTdHJpbmcmIG5hbWUpCi0gICAgOiBSZWFsdGltZU1lZGlhU291cmNlT3dyKGlkLCB0eXBlLCBu
YW1lKQotICAgIHsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIH5SZWFsdGltZVZpZGVvU291cmNlT3dy
KCkgeyB9Ci0KLSAgICBib29sIGFwcGx5U2l6ZShjb25zdCBJbnRTaXplJikgZmluYWwgeyByZXR1
cm4gdHJ1ZTsgfQotCi1wcm90ZWN0ZWQ6Ci0gICAgdm9pZCBpbml0aWFsaXplU2V0dGluZ3MoKSBm
aW5hbCB7Ci0gICAgICAgIGlmIChtX2N1cnJlbnRTZXR0aW5ncy5kZXZpY2VJZCgpLmlzRW1wdHko
KSkKLSAgICAgICAgICAgIG1fY3VycmVudFNldHRpbmdzLnNldFN1cHBvcnRlZENvbnN0cmFpbnRz
KHN1cHBvcnRlZENvbnN0cmFpbnRzKCkpOwotCi0gICAgICAgIG1fY3VycmVudFNldHRpbmdzLnNl
dERldmljZUlkKGlkKCkpOwotCi0gICAgICAgIG1fY3VycmVudFNldHRpbmdzLnNldEZyYW1lUmF0
ZShmcmFtZVJhdGUoKSk7Ci0gICAgICAgIG1fY3VycmVudFNldHRpbmdzLnNldFdpZHRoKHNpemUo
KS53aWR0aCgpKTsKLSAgICAgICAgbV9jdXJyZW50U2V0dGluZ3Muc2V0SGVpZ2h0KHNpemUoKS5o
ZWlnaHQoKSk7Ci0gICAgfQotCi0gICAgdm9pZCBpbml0aWFsaXplU3VwcG9ydGVkQ29uc3RyYWlu
dHMoUmVhbHRpbWVNZWRpYVNvdXJjZVN1cHBvcnRlZENvbnN0cmFpbnRzJiBzdXBwb3J0ZWRDb25z
dHJhaW50cykgZmluYWwgewotICAgICAgICBzdXBwb3J0ZWRDb25zdHJhaW50cy5zZXRTdXBwb3J0
c0ZhY2luZ01vZGUoUmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzOjpVbmtub3duKTsKLSAgICAg
ICAgc3VwcG9ydGVkQ29uc3RyYWludHMuc2V0U3VwcG9ydHNXaWR0aCh0cnVlKTsKLSAgICAgICAg
c3VwcG9ydGVkQ29uc3RyYWludHMuc2V0U3VwcG9ydHNIZWlnaHQodHJ1ZSk7Ci0gICAgICAgIHN1
cHBvcnRlZENvbnN0cmFpbnRzLnNldFN1cHBvcnRzQXNwZWN0UmF0aW8odHJ1ZSk7Ci0gICAgICAg
IHN1cHBvcnRlZENvbnN0cmFpbnRzLnNldFN1cHBvcnRzRnJhbWVSYXRlKHRydWUpOwotICAgIH0K
LX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShNRURJQV9T
VFJFQU0pICYmIFVTRShPUEVOV0VCUlRDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbW9jay9Nb2NrTWVkaWFFbmRwb2ludC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tb2NrL01vY2tNZWRpYUVuZHBvaW50LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMGU5YjQxZTVjMTE5NWM2ZTNlYzEzNzA3NWVhNGZmYTY2ODZjN2FhZi4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tb2NrL01vY2tNZWRpYUVuZHBvaW50LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDM0NiArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEVyaWNzc29uIEFCLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogICAg
aW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZQotICogICAgZGlzdHJpYnV0aW9uLgotICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBFcmlj
c3NvbiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotICogICAg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoV0VCX1JUQykKLSNpbmNs
dWRlICJNb2NrTWVkaWFFbmRwb2ludC5oIgotCi0jaW5jbHVkZSAiTWVkaWFFbmRwb2ludFNlc3Np
b25Db25maWd1cmF0aW9uLmgiCi0jaW5jbHVkZSAiTWVkaWFQYXlsb2FkLmgiCi0jaW5jbHVkZSAi
TW9ja1JlYWx0aW1lQXVkaW9Tb3VyY2UuaCIKLSNpbmNsdWRlICJNb2NrUmVhbHRpbWVWaWRlb1Nv
dXJjZS5oIgotI2luY2x1ZGUgIlJUQ0RhdGFDaGFubmVsSGFuZGxlck1vY2suaCIKLSNpbmNsdWRl
ICJSZWFsdGltZU1lZGlhU291cmNlLmgiCi0jaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdGF0aWMgY29uc3QgY2hhciogZmluZ2VycHJpbnQgPSAi
OEI6ODc6MDk6OEE6NUQ6QzI6RjM6MzM6RUY6QzU6QjE6RjY6ODQ6M0E6M0Q6RDY6QTM6RTI6OUM6
MTc6NEM6RTc6NDY6M0I6MUI6Q0U6ODQ6OTg6REQ6OEU6QUY6N0IiOwotc3RhdGljIGNvbnN0IGNo
YXIqIGZpbmdlcnByaW50RnVuY3Rpb24gPSAic2hhLTI1NiI7Ci0KLXN0ZDo6dW5pcXVlX3B0cjxN
ZWRpYUVuZHBvaW50PiBNb2NrTWVkaWFFbmRwb2ludDo6Y3JlYXRlKE1lZGlhRW5kcG9pbnRDbGll
bnQmIGNsaWVudCkKLXsKLSAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPE1lZGlhRW5kcG9pbnQ+
KG5ldyBNb2NrTWVkaWFFbmRwb2ludChjbGllbnQpKTsKLX0KLQotTW9ja01lZGlhRW5kcG9pbnQ6
Ok1vY2tNZWRpYUVuZHBvaW50KE1lZGlhRW5kcG9pbnRDbGllbnQmIGNsaWVudCkKLSAgICA6IG1f
Y2xpZW50KGNsaWVudCkKLSAgICAsIG1faWNlQ2FuZGlkYXRlVGltZXIoKnRoaXMsICZNb2NrTWVk
aWFFbmRwb2ludDo6aWNlQ2FuZGlkYXRlVGltZXJGaXJlZCkKLSAgICAsIG1faWNlVHJhbnNwb3J0
VGltZXIoKnRoaXMsICZNb2NrTWVkaWFFbmRwb2ludDo6aWNlVHJhbnNwb3J0VGltZXJGaXJlZCkK
LSAgICAsIG1fdW5tdXRlVGltZXIoKnRoaXMsICZNb2NrTWVkaWFFbmRwb2ludDo6dW5tdXRlVGlt
ZXJGaXJlZCkKLXsKLX0KLQotTW9ja01lZGlhRW5kcG9pbnQ6On5Nb2NrTWVkaWFFbmRwb2ludCgp
Ci17Ci0gICAgc3RvcCgpOwotfQotCi1zdGQ6OnVuaXF1ZV9wdHI8UlRDRGF0YUNoYW5uZWxIYW5k
bGVyPiBNb2NrTWVkaWFFbmRwb2ludDo6Y3JlYXRlRGF0YUNoYW5uZWxIYW5kbGVyKGNvbnN0IFN0
cmluZyYgbGFiZWwsIGNvbnN0IFJUQ0RhdGFDaGFubmVsSW5pdCYgb3B0aW9ucykKLXsKLSAgICBy
ZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxSVENEYXRhQ2hhbm5lbEhhbmRsZXJNb2NrPihsYWJlbCwg
b3B0aW9ucyk7Ci19Ci0KLXZvaWQgTW9ja01lZGlhRW5kcG9pbnQ6OmdlbmVyYXRlRHRsc0luZm8o
KQotewotICAgIGF1dG8gd2Vha1RoaXMgPSBtX3dlYWtQdHJGYWN0b3J5LmNyZWF0ZVdlYWtQdHIo
KnRoaXMpOwotCi0gICAgY2FsbE9uTWFpblRocmVhZChbd2Vha1RoaXNdIHsKLSAgICAgICAgaWYg
KHdlYWtUaGlzKQotICAgICAgICAgICAgd2Vha1RoaXMtPm1fY2xpZW50LmdvdER0bHNGaW5nZXJw
cmludChmaW5nZXJwcmludCwgZmluZ2VycHJpbnRGdW5jdGlvbik7Ci0gICAgfSk7Ci19Ci0KLU1l
ZGlhUGF5bG9hZFZlY3RvciBNb2NrTWVkaWFFbmRwb2ludDo6Z2V0RGVmYXVsdEF1ZGlvUGF5bG9h
ZHMoKQotewotICAgIE1lZGlhUGF5bG9hZFZlY3RvciBwYXlsb2FkczsKLQotICAgIE1lZGlhUGF5
bG9hZCBwYXlsb2FkMTsKLSAgICBwYXlsb2FkMS50eXBlID0gMTExOwotICAgIHBheWxvYWQxLmVu
Y29kaW5nTmFtZSA9ICJPUFVTIjsKLSAgICBwYXlsb2FkMS5jbG9ja1JhdGUgPSA0ODAwMDsKLSAg
ICBwYXlsb2FkMS5jaGFubmVscyA9IDI7Ci0gICAgcGF5bG9hZHMuYXBwZW5kKFdURk1vdmUocGF5
bG9hZDEpKTsKLQotICAgIE1lZGlhUGF5bG9hZCBwYXlsb2FkMjsKLSAgICBwYXlsb2FkMi50eXBl
ID0gODsKLSAgICBwYXlsb2FkMi5lbmNvZGluZ05hbWUgPSAiUENNQSI7Ci0gICAgcGF5bG9hZDIu
Y2xvY2tSYXRlID0gODAwMDsKLSAgICBwYXlsb2FkMi5jaGFubmVscyA9IDE7Ci0gICAgcGF5bG9h
ZHMuYXBwZW5kKFdURk1vdmUocGF5bG9hZDIpKTsKLQotICAgIE1lZGlhUGF5bG9hZCBwYXlsb2Fk
MzsKLSAgICBwYXlsb2FkMy50eXBlID0gMDsKLSAgICBwYXlsb2FkMy5lbmNvZGluZ05hbWUgPSAi
UENNVSI7Ci0gICAgcGF5bG9hZDMuY2xvY2tSYXRlID0gODAwMDsKLSAgICBwYXlsb2FkMy5jaGFu
bmVscyA9IDE7Ci0gICAgcGF5bG9hZHMuYXBwZW5kKFdURk1vdmUocGF5bG9hZDMpKTsKLQotICAg
IHJldHVybiBwYXlsb2FkczsKLX0KLQotTWVkaWFQYXlsb2FkVmVjdG9yIE1vY2tNZWRpYUVuZHBv
aW50OjpnZXREZWZhdWx0VmlkZW9QYXlsb2FkcygpCi17Ci0gICAgTWVkaWFQYXlsb2FkVmVjdG9y
IHBheWxvYWRzOwotCi0gICAgTWVkaWFQYXlsb2FkIHBheWxvYWQxOwotICAgIHBheWxvYWQxLnR5
cGUgPSAxMDM7Ci0gICAgcGF5bG9hZDEuZW5jb2RpbmdOYW1lID0gIkgyNjQiOwotICAgIHBheWxv
YWQxLmNsb2NrUmF0ZSA9IDkwMDAwOwotICAgIHBheWxvYWQxLmNjbWZpciA9IHRydWU7Ci0gICAg
cGF5bG9hZDEubmFja3BsaSA9IHRydWU7Ci0gICAgcGF5bG9hZDEuYWRkUGFyYW1ldGVyKCJwYWNr
ZXRpemF0aW9uTW9kZSIsIDEpOwotICAgIHBheWxvYWRzLmFwcGVuZChXVEZNb3ZlKHBheWxvYWQx
KSk7Ci0KLSAgICBNZWRpYVBheWxvYWQgcGF5bG9hZDI7Ci0gICAgcGF5bG9hZDIudHlwZSA9IDEw
MDsKLSAgICBwYXlsb2FkMi5lbmNvZGluZ05hbWUgPSAiVlA4IjsKLSAgICBwYXlsb2FkMi5jbG9j
a1JhdGUgPSA5MDAwMDsKLSAgICBwYXlsb2FkMi5jY21maXIgPSB0cnVlOwotICAgIHBheWxvYWQy
Lm5hY2twbGkgPSB0cnVlOwotICAgIHBheWxvYWQyLm5hY2sgPSB0cnVlOwotICAgIHBheWxvYWRz
LmFwcGVuZChXVEZNb3ZlKHBheWxvYWQyKSk7Ci0KLSAgICBNZWRpYVBheWxvYWQgcGF5bG9hZDM7
Ci0gICAgcGF5bG9hZDMudHlwZSA9IDEyMDsKLSAgICBwYXlsb2FkMy5lbmNvZGluZ05hbWUgPSAi
UlRYIjsKLSAgICBwYXlsb2FkMy5jbG9ja1JhdGUgPSA5MDAwMDsKLSAgICBwYXlsb2FkMy5hZGRQ
YXJhbWV0ZXIoImFwdCIsIDEwMCk7Ci0gICAgcGF5bG9hZDMuYWRkUGFyYW1ldGVyKCJydHhUaW1l
IiwgMjAwKTsKLSAgICBwYXlsb2Fkcy5hcHBlbmQoV1RGTW92ZShwYXlsb2FkMykpOwotCi0gICAg
cmV0dXJuIHBheWxvYWRzOwotfQotCi1NZWRpYVBheWxvYWRWZWN0b3IgTW9ja01lZGlhRW5kcG9p
bnQ6OmZpbHRlclBheWxvYWRzKGNvbnN0IE1lZGlhUGF5bG9hZFZlY3RvciYgcmVtb3RlUGF5bG9h
ZHMsIGNvbnN0IE1lZGlhUGF5bG9hZFZlY3RvciYgZGVmYXVsdFBheWxvYWRzKQotewotICAgIE1l
ZGlhUGF5bG9hZFZlY3RvciBmaWx0ZXJlZFBheWxvYWRzOwotCi0gICAgZm9yIChhdXRvJiByZW1v
dGVQYXlsb2FkIDogcmVtb3RlUGF5bG9hZHMpIHsKLSAgICAgICAgY29uc3QgTWVkaWFQYXlsb2Fk
KiBkZWZhdWx0UGF5bG9hZCA9IG51bGxwdHI7Ci0gICAgICAgIGZvciAoYXV0byYgcGF5bG9hZCA6
IGRlZmF1bHRQYXlsb2FkcykgewotICAgICAgICAgICAgaWYgKHBheWxvYWQuZW5jb2RpbmdOYW1l
ID09IHJlbW90ZVBheWxvYWQuZW5jb2RpbmdOYW1lLmNvbnZlcnRUb0FTQ0lJVXBwZXJjYXNlKCkp
IHsKLSAgICAgICAgICAgICAgICBkZWZhdWx0UGF5bG9hZCA9ICZwYXlsb2FkOwotICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGlmICghZGVm
YXVsdFBheWxvYWQpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBpZiAoZGVmYXVs
dFBheWxvYWQtPnBhcmFtZXRlcnMuY29udGFpbnMoInBhY2tldGl6YXRpb25Nb2RlIikgJiYgcmVt
b3RlUGF5bG9hZC5wYXJhbWV0ZXJzLmNvbnRhaW5zKCJwYWNrZXRpemF0aW9uTW9kZSIpCi0gICAg
ICAgICAgICAmJiAoZGVmYXVsdFBheWxvYWQtPnBhcmFtZXRlcnMuZ2V0KCJwYWNrZXRpemF0aW9u
TW9kZSIpICE9IGRlZmF1bHRQYXlsb2FkLT5wYXJhbWV0ZXJzLmdldCgicGFja2V0aXphdGlvbk1v
ZGUiKSkpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBmaWx0ZXJlZFBheWxvYWRz
LmFwcGVuZChyZW1vdGVQYXlsb2FkKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmlsdGVyZWRQYXls
b2FkczsKLX0KLQotTWVkaWFFbmRwb2ludDo6VXBkYXRlUmVzdWx0IE1vY2tNZWRpYUVuZHBvaW50
Ojp1cGRhdGVSZWNlaXZlQ29uZmlndXJhdGlvbihNZWRpYUVuZHBvaW50U2Vzc2lvbkNvbmZpZ3Vy
YXRpb24qIGNvbmZpZ3VyYXRpb24sIGJvb2wgaXNJbml0aWF0b3IpCi17Ci0gICAgVU5VU0VEX1BB
UkFNKGlzSW5pdGlhdG9yKTsKLQotICAgIHVwZGF0ZUNvbmZpZ3VyYXRpb25NaWRzKCpjb25maWd1
cmF0aW9uKTsKLSAgICByZXR1cm4gVXBkYXRlUmVzdWx0OjpTdWNjZXNzOwotfQotCi1NZWRpYUVu
ZHBvaW50OjpVcGRhdGVSZXN1bHQgTW9ja01lZGlhRW5kcG9pbnQ6OnVwZGF0ZVNlbmRDb25maWd1
cmF0aW9uKE1lZGlhRW5kcG9pbnRTZXNzaW9uQ29uZmlndXJhdGlvbiogY29uZmlndXJhdGlvbiwg
Y29uc3QgUmVhbHRpbWVNZWRpYVNvdXJjZU1hcCYgc2VuZFNvdXJjZU1hcCwgYm9vbCBpc0luaXRp
YXRvcikKLXsKLSAgICBVTlVTRURfUEFSQU0oc2VuZFNvdXJjZU1hcCk7Ci0gICAgVU5VU0VEX1BB
UkFNKGlzSW5pdGlhdG9yKTsKLQotICAgIHVwZGF0ZUNvbmZpZ3VyYXRpb25NaWRzKCpjb25maWd1
cmF0aW9uKTsKLSAgICByZXR1cm4gVXBkYXRlUmVzdWx0OjpTdWNjZXNzOwotfQotCi12b2lkIE1v
Y2tNZWRpYUVuZHBvaW50OjphZGRSZW1vdGVDYW5kaWRhdGUoY29uc3QgSWNlQ2FuZGlkYXRlJiBj
YW5kaWRhdGUsIGNvbnN0IFN0cmluZyYgbWlkLCBjb25zdCBTdHJpbmcmIHVmcmFnLCBjb25zdCBT
dHJpbmcmIHBhc3N3b3JkKQotewotICAgIFVOVVNFRF9QQVJBTShjYW5kaWRhdGUpOwotICAgIFVO
VVNFRF9QQVJBTShtaWQpOwotICAgIFVOVVNFRF9QQVJBTSh1ZnJhZyk7Ci0gICAgVU5VU0VEX1BB
UkFNKHBhc3N3b3JkKTsKLX0KLQotUmVmPFJlYWx0aW1lTWVkaWFTb3VyY2U+IE1vY2tNZWRpYUVu
ZHBvaW50OjpjcmVhdGVNdXRlZFJlbW90ZVNvdXJjZShjb25zdCBTdHJpbmcmIG1pZCwgUmVhbHRp
bWVNZWRpYVNvdXJjZTo6VHlwZSB0eXBlKQotewotICAgIFJlZlB0cjxSZWFsdGltZU1lZGlhU291
cmNlPiBzb3VyY2U7Ci0KLSAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICBjYXNlIFJlYWx0aW1lTWVk
aWFTb3VyY2U6OlR5cGU6OkF1ZGlvOgotICAgICAgICBzb3VyY2UgPSBNb2NrUmVhbHRpbWVBdWRp
b1NvdXJjZTo6Y3JlYXRlTXV0ZWQoInJlbW90ZSBhdWRpbyIpOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGU6OlZpZGVvOgotICAgICAgICBzb3VyY2Ug
PSBNb2NrUmVhbHRpbWVWaWRlb1NvdXJjZTo6Y3JlYXRlTXV0ZWQoInJlbW90ZSB2aWRlbyIpOwot
ICAgICAgICBicmVhazsKLSAgICBjYXNlIFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGU6Ok5vbmU6
Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH0KLQotICAgIG1fbXV0ZWRSZW1v
dGVTb3VyY2VzLnNldChtaWQsIHNvdXJjZSk7Ci0gICAgcmV0dXJuIHNvdXJjZS5yZWxlYXNlTm9u
TnVsbCgpOwotfQotCi12b2lkIE1vY2tNZWRpYUVuZHBvaW50OjpyZXBsYWNlU2VuZFNvdXJjZShS
ZWFsdGltZU1lZGlhU291cmNlJiBuZXdTb3VyY2UsIGNvbnN0IFN0cmluZyYgbWlkKQotewotICAg
IFVOVVNFRF9QQVJBTShuZXdTb3VyY2UpOwotICAgIFVOVVNFRF9QQVJBTShtaWQpOwotfQotCi12
b2lkIE1vY2tNZWRpYUVuZHBvaW50OjpyZXBsYWNlTXV0ZWRSZW1vdGVTb3VyY2VNaWQoY29uc3Qg
U3RyaW5nJiBvbGRNaWQsIGNvbnN0IFN0cmluZyYgbmV3TWlkKQotewotICAgIFJlZlB0cjxSZWFs
dGltZU1lZGlhU291cmNlPiByZW1vdGVTb3VyY2UgPSBtX211dGVkUmVtb3RlU291cmNlcy50YWtl
KG9sZE1pZCk7Ci0gICAgbV9tdXRlZFJlbW90ZVNvdXJjZXMuc2V0KG5ld01pZCwgV1RGTW92ZShy
ZW1vdGVTb3VyY2UpKTsKLX0KLQotdm9pZCBNb2NrTWVkaWFFbmRwb2ludDo6c3RvcCgpCi17Ci19
Ci0KLXZvaWQgTW9ja01lZGlhRW5kcG9pbnQ6OmVtdWxhdGVQbGF0Zm9ybUV2ZW50KGNvbnN0IFN0
cmluZyYgYWN0aW9uKQotewotICAgIGlmIChhY3Rpb24gPT0gImRpc3BhdGNoLWZha2UtaWNlLWNh
bmRpZGF0ZXMiKQotICAgICAgICBkaXNwYXRjaEZha2VJY2VDYW5kaWRhdGVzKCk7Ci0gICAgZWxz
ZSBpZiAoYWN0aW9uID09ICJzdGVwLWljZS10cmFuc3BvcnQtc3RhdGVzIikKLSAgICAgICAgc3Rl
cEljZVRyYW5zcG9ydFN0YXRlcygpOwotICAgIGVsc2UgaWYgKGFjdGlvbiA9PSAidW5tdXRlLXJl
bW90ZS1zb3VyY2VzLWJ5LW1pZCIpCi0gICAgICAgIHVubXV0ZVJlbW90ZVNvdXJjZXNCeU1pZCgp
OwotfQotCi12b2lkIE1vY2tNZWRpYUVuZHBvaW50Ojp1cGRhdGVDb25maWd1cmF0aW9uTWlkcyhj
b25zdCBNZWRpYUVuZHBvaW50U2Vzc2lvbkNvbmZpZ3VyYXRpb24mIGNvbmZpZ3VyYXRpb24pCi17
Ci0gICAgVmVjdG9yPFN0cmluZz4gbWlkczsKLSAgICBmb3IgKGF1dG8mIG1lZGlhRGVzY3JpcHRp
b24gOiBjb25maWd1cmF0aW9uLm1lZGlhRGVzY3JpcHRpb25zKCkpCi0gICAgICAgIG1pZHMuYXBw
ZW5kKG1lZGlhRGVzY3JpcHRpb24ubWlkKTsKLSAgICBtX21pZHMuc3dhcChtaWRzKTsKLX0KLQot
dm9pZCBNb2NrTWVkaWFFbmRwb2ludDo6ZGlzcGF0Y2hGYWtlSWNlQ2FuZGlkYXRlcygpCi17Ci0g
ICAgbV9mYWtlSWNlQ2FuZGlkYXRlcy5hcHBlbmQoeyAiaG9zdCIsICIxIiwgMSwgIlVEUCIsIDIw
MTMyNjY0MzEsICIxOTIuMTY4LjAuMTAwIiwgMzg4MzgsIHsgfSwgeyB9LCAwIH0pOwotICAgIG1f
ZmFrZUljZUNhbmRpZGF0ZXMuYXBwZW5kKHsgImhvc3QiLCAiMiIsIDEsICJUQ1AiLCAxMDE5MjE2
MzgzLCAiMTkyLjE2OC4wLjEwMCIsIDksICJhY3RpdmUiLCB7IH0sIDAgfSk7Ci0gICAgbV9mYWtl
SWNlQ2FuZGlkYXRlcy5hcHBlbmQoeyAic3JmbHgiLCAiMyIsIDEsICJVRFAiLCAxNjc3NzIyMTEx
LCAiMTcyLjE4LjAuMSIsIDQ3OTg5LCB7IH0sICIxOTIuMTY4LjAuMTAwIiwgNDc5ODkgfSk7Ci0K
LSAgICAvLyBSZXZlcnNlIG9yZGVyIHRvIHVzZSB0YWtlTGFzdCgpIHdoaWxlIGtlZXBpbmcgdGhl
IGFib3ZlIG9yZGVyCi0gICAgbV9mYWtlSWNlQ2FuZGlkYXRlcy5yZXZlcnNlKCk7Ci0KLSAgICBt
X2ljZUNhbmRpZGF0ZVRpbWVyLnN0YXJ0T25lU2hvdCgwX3MpOwotfQotCi12b2lkIE1vY2tNZWRp
YUVuZHBvaW50OjppY2VDYW5kaWRhdGVUaW1lckZpcmVkKCkKLXsKLSAgICBpZiAobV9taWRzLmlz
RW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFtX2Zha2VJY2VDYW5kaWRhdGVz
LmlzRW1wdHkoKSkgewotICAgICAgICBtX2NsaWVudC5nb3RJY2VDYW5kaWRhdGUobV9taWRzWzBd
LCBtX2Zha2VJY2VDYW5kaWRhdGVzLnRha2VMYXN0KCkpOwotICAgICAgICBtX2ljZUNhbmRpZGF0
ZVRpbWVyLnN0YXJ0T25lU2hvdCgwX3MpOwotICAgIH0gZWxzZQotICAgICAgICBtX2NsaWVudC5k
b25lR2F0aGVyaW5nQ2FuZGlkYXRlcyhtX21pZHNbMF0pOwotfQotCi12b2lkIE1vY2tNZWRpYUVu
ZHBvaW50OjpzdGVwSWNlVHJhbnNwb3J0U3RhdGVzKCkKLXsKLSAgICBpZiAobV9taWRzLnNpemUo
KSAhPSAzKSB7Ci0gICAgICAgIExPR19FUlJPUigiVGhlICdzdGVwLWljZS10cmFuc3BvcnQtc3Rh
dGVzJyBhY3Rpb24gcmVxdWlyZXMgMyB0cmFuc2NlaXZlcnMiKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIC8vIFNob3VsZCBnbyB0bzoKLSAgICAvLyAnY2hlY2tpbmcnCi0gICAgbV9p
Y2VUcmFuc3BvcnRTdGF0ZUNoYW5nZXMuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKG1fbWlkc1swXSwg
UlRDSWNlVHJhbnNwb3J0U3RhdGU6OkNoZWNraW5nKSk7Ci0gICAgbV9pY2VUcmFuc3BvcnRTdGF0
ZUNoYW5nZXMuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKG1fbWlkc1sxXSwgUlRDSWNlVHJhbnNwb3J0
U3RhdGU6OkNoZWNraW5nKSk7Ci0gICAgbV9pY2VUcmFuc3BvcnRTdGF0ZUNoYW5nZXMuYXBwZW5k
KHN0ZDo6bWFrZV9wYWlyKG1fbWlkc1syXSwgUlRDSWNlVHJhbnNwb3J0U3RhdGU6OkNoZWNraW5n
KSk7Ci0KLSAgICAvLyAnY29ubmVjdGVkJwotICAgIG1faWNlVHJhbnNwb3J0U3RhdGVDaGFuZ2Vz
LmFwcGVuZChzdGQ6Om1ha2VfcGFpcihtX21pZHNbMF0sIFJUQ0ljZVRyYW5zcG9ydFN0YXRlOjpD
b25uZWN0ZWQpKTsKLSAgICBtX2ljZVRyYW5zcG9ydFN0YXRlQ2hhbmdlcy5hcHBlbmQoc3RkOjpt
YWtlX3BhaXIobV9taWRzWzFdLCBSVENJY2VUcmFuc3BvcnRTdGF0ZTo6Q29tcGxldGVkKSk7Ci0g
ICAgbV9pY2VUcmFuc3BvcnRTdGF0ZUNoYW5nZXMuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKG1fbWlk
c1syXSwgUlRDSWNlVHJhbnNwb3J0U3RhdGU6OkNsb3NlZCkpOwotCi0gICAgLy8gJ2NvbXBsZXRl
ZCcKLSAgICBtX2ljZVRyYW5zcG9ydFN0YXRlQ2hhbmdlcy5hcHBlbmQoc3RkOjptYWtlX3BhaXIo
bV9taWRzWzBdLCBSVENJY2VUcmFuc3BvcnRTdGF0ZTo6Q29tcGxldGVkKSk7Ci0KLSAgICAvLyAn
ZmFpbGVkJwotICAgIG1faWNlVHJhbnNwb3J0U3RhdGVDaGFuZ2VzLmFwcGVuZChzdGQ6Om1ha2Vf
cGFpcihtX21pZHNbMF0sIFJUQ0ljZVRyYW5zcG9ydFN0YXRlOjpGYWlsZWQpKTsKLQotICAgIC8v
ICdkaXNjb25uZWN0ZWQnCi0gICAgbV9pY2VUcmFuc3BvcnRTdGF0ZUNoYW5nZXMuYXBwZW5kKHN0
ZDo6bWFrZV9wYWlyKG1fbWlkc1sxXSwgUlRDSWNlVHJhbnNwb3J0U3RhdGU6OkRpc2Nvbm5lY3Rl
ZCkpOwotICAgIG1faWNlVHJhbnNwb3J0U3RhdGVDaGFuZ2VzLmFwcGVuZChzdGQ6Om1ha2VfcGFp
cihtX21pZHNbMF0sIFJUQ0ljZVRyYW5zcG9ydFN0YXRlOjpDbG9zZWQpKTsKLQotICAgIC8vICdu
ZXcnCi0gICAgbV9pY2VUcmFuc3BvcnRTdGF0ZUNoYW5nZXMuYXBwZW5kKHN0ZDo6bWFrZV9wYWly
KG1fbWlkc1sxXSwgUlRDSWNlVHJhbnNwb3J0U3RhdGU6OkNsb3NlZCkpOwotCi0gICAgLy8gUmV2
ZXJzZSBvcmRlciB0byB1c2UgdGFrZUxhc3QoKSB3aGlsZSBrZWVwaW5nIHRoZSBhYm92ZSBvcmRl
cgotICAgIG1faWNlVHJhbnNwb3J0U3RhdGVDaGFuZ2VzLnJldmVyc2UoKTsKLQotICAgIG1faWNl
VHJhbnNwb3J0VGltZXIuc3RhcnRPbmVTaG90KDBfcyk7Ci19Ci0KLXZvaWQgTW9ja01lZGlhRW5k
cG9pbnQ6OmljZVRyYW5zcG9ydFRpbWVyRmlyZWQoKQotewotICAgIGlmIChtX2ljZVRyYW5zcG9y
dFN0YXRlQ2hhbmdlcy5pc0VtcHR5KCkgfHwgbV9taWRzLnNpemUoKSAhPSAzKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBhdXRvIHN0YXRlQ2hhbmdlID0gbV9pY2VUcmFuc3BvcnRTdGF0ZUNoYW5n
ZXMudGFrZUxhc3QoKTsKLSAgICBtX2NsaWVudC5pY2VUcmFuc3BvcnRTdGF0ZUNoYW5nZWQoc3Rh
dGVDaGFuZ2UuZmlyc3QsIHN0YXRlQ2hhbmdlLnNlY29uZCk7Ci0KLSAgICBtX2ljZVRyYW5zcG9y
dFRpbWVyLnN0YXJ0T25lU2hvdCgwX3MpOwotfQotCi12b2lkIE1vY2tNZWRpYUVuZHBvaW50Ojp1
bm11dGVSZW1vdGVTb3VyY2VzQnlNaWQoKQotewotICAgIGlmIChtX21pZHMuaXNFbXB0eSgpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBMb29raW5nIHVwIGVhY2ggc291cmNlIGJ5IGl0cyBt
aWQsIGluc3RlYWQgb2Ygc2ltcGx5IGl0ZXJhdGluZyBvdmVyIHRoZSBsaXN0IG9mIG11dGVkIHNv
dXJjZXMsCi0gICAgLy8gZW11bGF0ZXMgcmVtb3RlIG1lZGlhIGFycml2aW5nIG9uIGEgbWVkaWEg
ZGVzY3JpcHRpb24gd2l0aCBhIHNwZWNpZmljIG1pZCAoUlRDUnRwVHJhbnNjZWl2ZXIpLgotCi0g
ICAgLy8gQ29weSB2YWx1ZXMgaW4gcmV2ZXJzZSBvcmRlciB0byBtYWludGFpbiB0aGUgb3JpZ2lu
YWwgb3JkZXIgd2hpbGUgdXNpbmcgdGFrZUxhc3QoKQotICAgIGZvciAoaW50IGkgPSBtX21pZHMu
c2l6ZSgpIC0gMTsgaSA+PSAwOyAtLWkpCi0gICAgICAgIG1fbWlkc09mU291cmNlc1RvVW5tdXRl
LmFwcGVuZChtX21pZHNbaV0pOwotCi0gICAgbV91bm11dGVUaW1lci5zdGFydE9uZVNob3QoMF9z
KTsKLX0KLQotdm9pZCBNb2NrTWVkaWFFbmRwb2ludDo6dW5tdXRlVGltZXJGaXJlZCgpCi17Ci0g
ICAgYXV0byogc291cmNlID0gbV9tdXRlZFJlbW90ZVNvdXJjZXMuZ2V0KG1fbWlkc09mU291cmNl
c1RvVW5tdXRlLnRha2VMYXN0KCkpOwotICAgIGlmIChzb3VyY2UpCi0gICAgICAgIHNvdXJjZS0+
c2V0TXV0ZWQoZmFsc2UpOwotCi0gICAgaWYgKCFtX21pZHNPZlNvdXJjZXNUb1VubXV0ZS5pc0Vt
cHR5KCkpCi0gICAgICAgIG1fdW5tdXRlVGltZXIuc3RhcnRPbmVTaG90KDBfcyk7Ci19Ci0KLX0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShXRUJfUlRDKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9Nb2NrTWVkaWFFbmRwb2ludC5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9Nb2NrTWVkaWFFbmRwb2ludC5oCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZjY2NjRmYjg4NTY1MzU3NTk1NmRiYmY1NTQyYzcyMjYx
NWI1OTY0Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svTW9ja01lZGlhRW5kcG9pbnQuaAorKysgL2Rldi9u
dWxsCkBAIC0xLDEwMSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEVyaWNzc29u
IEFCLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqCi0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lcgotICogICAgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogICAgZGlzdHJpYnV0aW9uLgotICogMy4gTmVpdGhl
ciB0aGUgbmFtZSBvZiBFcmljc3NvbiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMK
LSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20gdGhpcwotICogICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShXRUJf
UlRDKQotCi0jaW5jbHVkZSAiTWVkaWFFbmRwb2ludC5oIgotI2luY2x1ZGUgIlJUQ0ljZVRyYW5z
cG9ydFN0YXRlLmgiCi0jaW5jbHVkZSAiVGltZXIuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewot
Ci1jbGFzcyBNb2NrTWVkaWFFbmRwb2ludCBmaW5hbCA6IHB1YmxpYyBNZWRpYUVuZHBvaW50IHsK
LXB1YmxpYzoKLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPE1lZGlh
RW5kcG9pbnQ+IGNyZWF0ZShNZWRpYUVuZHBvaW50Q2xpZW50Jik7Ci0KLSAgICBNb2NrTWVkaWFF
bmRwb2ludChNZWRpYUVuZHBvaW50Q2xpZW50Jik7Ci0gICAgfk1vY2tNZWRpYUVuZHBvaW50KCk7
Ci0KLSAgICB2b2lkIHNldENvbmZpZ3VyYXRpb24oTWVkaWFFbmRwb2ludENvbmZpZ3VyYXRpb24m
JikgZmluYWwgeyB9OwotCi0gICAgdm9pZCBnZW5lcmF0ZUR0bHNJbmZvKCkgZmluYWw7Ci0gICAg
TWVkaWFQYXlsb2FkVmVjdG9yIGdldERlZmF1bHRBdWRpb1BheWxvYWRzKCkgZmluYWw7Ci0gICAg
TWVkaWFQYXlsb2FkVmVjdG9yIGdldERlZmF1bHRWaWRlb1BheWxvYWRzKCkgZmluYWw7Ci0gICAg
TWVkaWFQYXlsb2FkVmVjdG9yIGZpbHRlclBheWxvYWRzKGNvbnN0IE1lZGlhUGF5bG9hZFZlY3Rv
ciYgcmVtb3RlUGF5bG9hZHMsIGNvbnN0IE1lZGlhUGF5bG9hZFZlY3RvciYgZGVmYXVsdFBheWxv
YWRzKSBmaW5hbDsKLQotICAgIFVwZGF0ZVJlc3VsdCB1cGRhdGVSZWNlaXZlQ29uZmlndXJhdGlv
bihNZWRpYUVuZHBvaW50U2Vzc2lvbkNvbmZpZ3VyYXRpb24qLCBib29sIGlzSW5pdGlhdG9yKSBm
aW5hbDsKLSAgICBVcGRhdGVSZXN1bHQgdXBkYXRlU2VuZENvbmZpZ3VyYXRpb24oTWVkaWFFbmRw
b2ludFNlc3Npb25Db25maWd1cmF0aW9uKiwgY29uc3QgUmVhbHRpbWVNZWRpYVNvdXJjZU1hcCYs
IGJvb2wgaXNJbml0aWF0b3IpIGZpbmFsOwotCi0gICAgdm9pZCBhZGRSZW1vdGVDYW5kaWRhdGUo
Y29uc3QgSWNlQ2FuZGlkYXRlJiwgY29uc3QgU3RyaW5nJiBtaWQsIGNvbnN0IFN0cmluZyYgdWZy
YWcsIGNvbnN0IFN0cmluZyYgcGFzc3dvcmQpIGZpbmFsOwotCi0gICAgUmVmPFJlYWx0aW1lTWVk
aWFTb3VyY2U+IGNyZWF0ZU11dGVkUmVtb3RlU291cmNlKGNvbnN0IFN0cmluZyYgbWlkLCBSZWFs
dGltZU1lZGlhU291cmNlOjpUeXBlKSBmaW5hbDsKLSAgICB2b2lkIHJlcGxhY2VTZW5kU291cmNl
KFJlYWx0aW1lTWVkaWFTb3VyY2UmLCBjb25zdCBTdHJpbmcmIG1pZCkgZmluYWw7Ci0gICAgdm9p
ZCByZXBsYWNlTXV0ZWRSZW1vdGVTb3VyY2VNaWQoY29uc3QgU3RyaW5nJiBvbGRNaWQsIGNvbnN0
IFN0cmluZyYgbmV3TWlkKSBmaW5hbDsKLQotICAgIHZvaWQgc3RvcCgpIGZpbmFsOwotCi0gICAg
dm9pZCBlbXVsYXRlUGxhdGZvcm1FdmVudChjb25zdCBTdHJpbmcmIGFjdGlvbikgZmluYWw7Ci0K
LXByaXZhdGU6Ci0gICAgdm9pZCB1cGRhdGVDb25maWd1cmF0aW9uTWlkcyhjb25zdCBNZWRpYUVu
ZHBvaW50U2Vzc2lvbkNvbmZpZ3VyYXRpb24mKTsKLQotICAgIHN0ZDo6dW5pcXVlX3B0cjxSVENE
YXRhQ2hhbm5lbEhhbmRsZXI+IGNyZWF0ZURhdGFDaGFubmVsSGFuZGxlcihjb25zdCBTdHJpbmcm
LCBjb25zdCBSVENEYXRhQ2hhbm5lbEluaXQmKSBmaW5hbDsKLQotICAgIHZvaWQgZGlzcGF0Y2hG
YWtlSWNlQ2FuZGlkYXRlcygpOwotICAgIHZvaWQgaWNlQ2FuZGlkYXRlVGltZXJGaXJlZCgpOwot
Ci0gICAgdm9pZCBzdGVwSWNlVHJhbnNwb3J0U3RhdGVzKCk7Ci0gICAgdm9pZCBpY2VUcmFuc3Bv
cnRUaW1lckZpcmVkKCk7Ci0KLSAgICB2b2lkIHVubXV0ZVJlbW90ZVNvdXJjZXNCeU1pZCgpOwot
ICAgIHZvaWQgdW5tdXRlVGltZXJGaXJlZCgpOwotCi0gICAgTWVkaWFFbmRwb2ludENsaWVudCYg
bV9jbGllbnQ7Ci0gICAgVmVjdG9yPFN0cmluZz4gbV9taWRzOwotICAgIEhhc2hNYXA8U3RyaW5n
LCBSZWZQdHI8UmVhbHRpbWVNZWRpYVNvdXJjZT4+IG1fbXV0ZWRSZW1vdGVTb3VyY2VzOwotCi0g
ICAgVmVjdG9yPEljZUNhbmRpZGF0ZT4gbV9mYWtlSWNlQ2FuZGlkYXRlczsKLSAgICBUaW1lciBt
X2ljZUNhbmRpZGF0ZVRpbWVyOwotCi0gICAgVmVjdG9yPHN0ZDo6cGFpcjxTdHJpbmcsIFJUQ0lj
ZVRyYW5zcG9ydFN0YXRlPj4gbV9pY2VUcmFuc3BvcnRTdGF0ZUNoYW5nZXM7Ci0gICAgVGltZXIg
bV9pY2VUcmFuc3BvcnRUaW1lcjsKLQotICAgIFZlY3RvcjxTdHJpbmc+IG1fbWlkc09mU291cmNl
c1RvVW5tdXRlOwotICAgIFRpbWVyIG1fdW5tdXRlVGltZXI7Ci0gICAgCi0gICAgV2Vha1B0ckZh
Y3Rvcnk8TW9ja01lZGlhRW5kcG9pbnQ+IG1fd2Vha1B0ckZhY3Rvcnk7Ci19OwotCi19IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoV0VCX1JUQykKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svTW9ja1JlYWx0aW1lTWVkaWFTb3VyY2UuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9Nb2NrUmVhbHRpbWVNZWRpYVNvdXJjZS5j
cHAKaW5kZXggYjQyNDI3YjdjZGQ3ZDg5ZTAyMGQ2YTVmNjJmNDdlY2E3NDdmMDJlOC4uODc5MTk0
NWRmZjMxMDg5MGVlMjBlMWZiZjRlYjU0YTY0ZWQwZDkwNiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbW9jay9Nb2NrUmVhbHRpbWVNZWRpYVNvdXJjZS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9Nb2NrUmVhbHRpbWVNZWRpYVNvdXJjZS5jcHAKQEAg
LTgyLDcgKzgyLDcgQEAgVmVjdG9yPENhcHR1cmVEZXZpY2U+JiBNb2NrUmVhbHRpbWVNZWRpYVNv
dXJjZTo6dmlkZW9EZXZpY2VzKCkKIH0KIAogTW9ja1JlYWx0aW1lTWVkaWFTb3VyY2U6Ok1vY2tS
ZWFsdGltZU1lZGlhU291cmNlKGNvbnN0IFN0cmluZyYgaWQsIFJlYWx0aW1lTWVkaWFTb3VyY2U6
OlR5cGUgdHlwZSwgY29uc3QgU3RyaW5nJiBuYW1lKQotICAgIDogQmFzZVJlYWx0aW1lTWVkaWFT
b3VyY2VDbGFzcyhpZCwgdHlwZSwgbmFtZSkKKyAgICA6IFJlYWx0aW1lTWVkaWFTb3VyY2UoaWQs
IHR5cGUsIG5hbWUpCiB7CiAgICAgc3dpdGNoICh0eXBlKSB7CiAgICAgY2FzZSBSZWFsdGltZU1l
ZGlhU291cmNlOjpUeXBlOjpBdWRpbzoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21vY2svTW9ja1JlYWx0aW1lTWVkaWFTb3VyY2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21vY2svTW9ja1JlYWx0aW1lTWVkaWFTb3VyY2UuaAppbmRleCA5NTA3ZjAxYWEzZDMyMzAy
NjNmZDRhZmViOWQxNjUyOGNkOTlhYzJjLi4xZWExMTVkOWI0MzNmYTRlMzM2OWNiZWY4NDc5NGY5
YWYyODg2N2VmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL01vY2tS
ZWFsdGltZU1lZGlhU291cmNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9N
b2NrUmVhbHRpbWVNZWRpYVNvdXJjZS5oCkBAIC0yOCwyOCArMjgsMTcgQEAKICAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCiAgKi8KIAotI2lmbmRlZiBNb2NrUmVhbHRpbWVNZWRpYVNvdXJjZV9oCi0jZGVmaW5lIE1v
Y2tSZWFsdGltZU1lZGlhU291cmNlX2gKKyNwcmFnbWEgb25jZQogCiAjaWYgRU5BQkxFKE1FRElB
X1NUUkVBTSkKIAogI2luY2x1ZGUgIlJlYWx0aW1lTWVkaWFTb3VyY2UuaCIKIAotI2lmIFVTRShP
UEVOV0VCUlRDKQotI2luY2x1ZGUgIlJlYWx0aW1lTWVkaWFTb3VyY2VPd3IuaCIKLSNlbmRpZgot
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIENhcHR1cmVEZXZpY2U7CiAKLSNpZiBVU0Uo
T1BFTldFQlJUQykKLXVzaW5nIEJhc2VSZWFsdGltZU1lZGlhU291cmNlQ2xhc3MgPSBSZWFsdGlt
ZU1lZGlhU291cmNlT3dyOwotI2Vsc2UKLXVzaW5nIEJhc2VSZWFsdGltZU1lZGlhU291cmNlQ2xh
c3MgPSBSZWFsdGltZU1lZGlhU291cmNlOwotI2VuZGlmCi0KLWNsYXNzIE1vY2tSZWFsdGltZU1l
ZGlhU291cmNlIDogcHVibGljIEJhc2VSZWFsdGltZU1lZGlhU291cmNlQ2xhc3MgeworY2xhc3Mg
TW9ja1JlYWx0aW1lTWVkaWFTb3VyY2UgOiBwdWJsaWMgUmVhbHRpbWVNZWRpYVNvdXJjZSB7CiBw
dWJsaWM6CiAgICAgdmlydHVhbCB+TW9ja1JlYWx0aW1lTWVkaWFTb3VyY2UoKSB7IH0KIApAQCAt
NjEsOSArNTAsNyBAQCBwcm90ZWN0ZWQ6CiAKICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlU2V0dGlu
Z3MoUmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzJikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBp
bml0aWFsaXplQ2FwYWJpbGl0aWVzKFJlYWx0aW1lTWVkaWFTb3VyY2VDYXBhYmlsaXRpZXMmKSA9
IDA7Ci0jaWYgIVVTRShPUEVOV0VCUlRDKQogICAgIHZpcnR1YWwgdm9pZCBpbml0aWFsaXplU3Vw
cG9ydGVkQ29uc3RyYWludHMoUmVhbHRpbWVNZWRpYVNvdXJjZVN1cHBvcnRlZENvbnN0cmFpbnRz
JikgPSAwOwotI2VuZGlmCiAKICAgICBjb25zdCBSZWFsdGltZU1lZGlhU291cmNlQ2FwYWJpbGl0
aWVzJiBjYXBhYmlsaXRpZXMoKSBjb25zdCBvdmVycmlkZTsKICAgICBjb25zdCBSZWFsdGltZU1l
ZGlhU291cmNlU2V0dGluZ3MmIHNldHRpbmdzKCkgY29uc3Qgb3ZlcnJpZGU7CkBAIC03NCwxMSAr
NjEsNyBAQCBwcm90ZWN0ZWQ6CiAKIHByaXZhdGU6CiAgICAgdm9pZCBpbml0aWFsaXplQ2FwYWJp
bGl0aWVzKCk7Ci0jaWYgVVNFKE9QRU5XRUJSVEMpCi0gICAgdm9pZCBpbml0aWFsaXplU2V0dGlu
Z3MoKSBmaW5hbDsKLSNlbHNlCiAgICAgdm9pZCBpbml0aWFsaXplU2V0dGluZ3MoKTsKLSNlbmRp
ZgogCiAgICAgUmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzIG1fY3VycmVudFNldHRpbmdzOwog
ICAgIFJlYWx0aW1lTWVkaWFTb3VyY2VTdXBwb3J0ZWRDb25zdHJhaW50cyBtX3N1cHBvcnRlZENv
bnN0cmFpbnRzOwpAQCAtODksNSArNzIsMyBAQCBwcml2YXRlOgogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVBTSkKLQotI2VuZGlmIC8vIE1vY2tS
ZWFsdGltZU1lZGlhU291cmNlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Rlc3Rpbmcv
SW50ZXJuYWxzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcAppbmRl
eCAyMGVkZjk3NDhiY2Q4ZmZlZGM1MzJlZWQzNTIzZjczY2JkM2Q5OTcxLi4zYWQ1N2Y1MzZjODFj
MjUzNzNlNjY2NGRmMmQ3ZGMxOWViNTgyNGI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS90
ZXN0aW5nL0ludGVybmFscy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5h
bHMuY3BwCkBAIC0yMDAsNyArMjAwLDYgQEAKICNlbmRpZgogCiAjaWYgRU5BQkxFKFdFQl9SVEMp
Ci0jaW5jbHVkZSAiTW9ja01lZGlhRW5kcG9pbnQuaCIKICNpbmNsdWRlICJSVENQZWVyQ29ubmVj
dGlvbi5oIgogI2VuZGlmCiAKQEAgLTQ4NywxMiArNDg2LDYgQEAgSW50ZXJuYWxzOjpJbnRlcm5h
bHMoRG9jdW1lbnQmIGRvY3VtZW50KQogICAgIFdlYkNvcmU6OlNldHRpbmdzOjpzZXRNZWRpYUNh
cHR1cmVSZXF1aXJlc1NlY3VyZUNvbm5lY3Rpb24oZmFsc2UpOwogI2VuZGlmCiAKLSNpZiBFTkFC
TEUoV0VCX1JUQykKLSNpZiBVU0UoT1BFTldFQlJUQykKLSAgICBlbmFibGVNb2NrTWVkaWFFbmRw
b2ludCgpOwotI2VuZGlmCi0jZW5kaWYKLQogI2lmIEVOQUJMRShXSVJFTEVTU19QTEFZQkFDS19U
QVJHRVQpCiAgICAgaWYgKGRvY3VtZW50LnBhZ2UoKSkKICAgICAgICAgZG9jdW1lbnQucGFnZSgp
LT5zZXRNb2NrTWVkaWFQbGF5YmFja1RhcmdldFBpY2tlckVuYWJsZWQodHJ1ZSk7CkBAIC0xMjUw
LDEzICsxMjQzLDYgQEAgdm9pZCBJbnRlcm5hbHM6OmVuYWJsZU1vY2tTcGVlY2hTeW50aGVzaXpl
cigpCiAKICNpZiBFTkFCTEUoV0VCX1JUQykKIAotI2lmIFVTRShPUEVOV0VCUlRDKQotdm9pZCBJ
bnRlcm5hbHM6OmVuYWJsZU1vY2tNZWRpYUVuZHBvaW50KCkKLXsKLSAgICBNZWRpYUVuZHBvaW50
OjpjcmVhdGUgPSBNb2NrTWVkaWFFbmRwb2ludDo6Y3JlYXRlOwotfQotI2VuZGlmCi0KIHZvaWQg
SW50ZXJuYWxzOjplbXVsYXRlUlRDUGVlckNvbm5lY3Rpb25QbGF0Zm9ybUV2ZW50KFJUQ1BlZXJD
b25uZWN0aW9uJiBjb25uZWN0aW9uLCBjb25zdCBTdHJpbmcmIGFjdGlvbikKIHsKICAgICBpZiAo
IUxpYldlYlJUQ1Byb3ZpZGVyOjp3ZWJSVENBdmFpbGFibGUoKSkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmggYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0lu
dGVybmFscy5oCmluZGV4IDljNDAwMzJhNzVlNzA5MWRhZmEyODg5NGVhMTA5NzM2M2RmMzYyMzgu
LjE2Njk2NjgyYWJiYTMyNTZmODM0NWRlMzE0OWU3YTcwYzZhMWY5YmIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvdGVz
dGluZy9JbnRlcm5hbHMuaApAQCAtNDMwLDkgKzQzMCw2IEBAIHB1YmxpYzoKICNlbmRpZgogCiAj
aWYgRU5BQkxFKFdFQl9SVEMpCi0jaWYgVVNFKE9QRU5XRUJSVEMpCi0gICAgdm9pZCBlbmFibGVN
b2NrTWVkaWFFbmRwb2ludCgpOwotI2VuZGlmCiAgICAgdm9pZCBlbXVsYXRlUlRDUGVlckNvbm5l
Y3Rpb25QbGF0Zm9ybUV2ZW50KFJUQ1BlZXJDb25uZWN0aW9uJiwgY29uc3QgU3RyaW5nJiBhY3Rp
b24pOwogICAgIHZvaWQgdXNlTW9ja1JUQ1BlZXJDb25uZWN0aW9uRmFjdG9yeShjb25zdCBTdHJp
bmcmKTsKICAgICB2b2lkIHNldElDRUNhbmRpZGF0ZUZpbHRlcmluZyhib29sKTsKZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCA4
MTQzZjk2NWJiZGJjNzc2YjUwNzk4YzlkYzI5Yjc2ODFhNzkxNGYxLi43MDlhOGQ4YmFkZDZhZDFk
YzdmZjRmNWQzZDU0YjAyMjk1NzNhNzUwIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsMTQgQEAKIDIwMTctMTAt
MDQgIFlvdWVubiBGYWJsZXQgIDx5b3Vlbm5AYXBwbGUuY29tPgogCisgICAgICAgIFJlbW92ZSBP
cGVuV2ViUlRDIGJhY2tlbmQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE3Nzg2OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgICogcGxhdGZvcm0vZ3RrL1Rlc3RFeHBlY3RhdGlvbnM6CisKKzIwMTctMTAtMDQg
IFlvdWVubiBGYWJsZXQgIDx5b3Vlbm5AYXBwbGUuY29tPgorCiAgICAgICAgIEFkZCBxdW90YSB0
byBjYWNoZSBBUEkKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE3NzU1MgogCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvVGVzdEV4
cGVjdGF0aW9ucyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9UZXN0RXhwZWN0YXRpb25zCmlu
ZGV4IDhjNjZkYjY0NDVlMzcyNzhjYzk4MWE1OTc3YTY1ZjIyYjQzYTAyMzkuLjQ1YTI1ZGQwMDFm
NDAwNDM1YzNiMzkwMWJhMTI3YWI2Mzc3NjIyNzQgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3Bs
YXRmb3JtL2d0ay9UZXN0RXhwZWN0YXRpb25zCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0
ay9UZXN0RXhwZWN0YXRpb25zCkBAIC02MTEsODIgKzYxMSwxMSBAQCB3ZWJraXQub3JnL2IvOTkw
MzYgZmFzdC9zaGFkb3ctZG9tL3BvaW50ZXJsb2NrZWxlbWVudC1pbi1zbG90Lmh0bWwgWyBTa2lw
IF0KIHdlYmtpdC5vcmcvYi84NTIxMSBpZXRlc3RjZW50ZXIvY3NzMy9mbGV4Ym94L2ZsZXhib3gt
YWxpZ24tc3RyZXRjaC0wMDEuaHRtIFsgSW1hZ2VPbmx5RmFpbHVyZSBdCiB3ZWJraXQub3JnL2Iv
ODUyMTIgaWV0ZXN0Y2VudGVyL2NzczMvZmxleGJveC9mbGV4Ym94LWxheW91dC0wMDIuaHRtIFsg
SW1hZ2VPbmx5RmFpbHVyZSBdCiAKLSMgV2ViUlRDIC8gTWVkaWFTdHJlYW0gaW1wbGVtZW50YXRp
b24gaXMgbm90IGNvbXBsZXRlIHlldC4KLSMgU29tZSBvZiB0aGlzIHRlc3RzIGFyZSBza2lwcGVk
IG9uIHRoZSBnZW5lcmFsIFRlc3RFeHBlY3RhdGlvbnMsCi0jIEVuYWJsZSB0aGVtIGhlcmUgYW5k
IGxpc3QgdGhlIGluZGl2aWR1YWwgZXhwZWN0YXRpb25zIGluIG9yZGVyIHRvIGdldAotIyBub3Rp
ZmljYXRpb25zIG9mIG5ldyBmYWlsdXJlcy4KIGZhc3QvbWVkaWFzdHJlYW0gWyBQYXNzIF0KLXdl
YnJ0YyBbIFBhc3MgXQotIyBHVEsgdXNlcyBPV1IgaW5zdGVhZCBvZiBsaWJ3ZWJydGMKLXdlYnJ0
Yy9saWJ3ZWJydGMgWyBTa2lwIF0KLSMgU29tZSBXZWJSVEMgZmVhdHVyZXMgbGlrZSBkYXRhY2hh
bm5lbCBhcmUgc3RpbGwgbm90IGltcGxlbWVudGVkCi13ZWJydGMvYXVkaW8tcmVwbGFjZS10cmFj
ay5odG1sIFsgRmFpbHVyZSBdCi13ZWJydGMvYXVkaW8tbXV0ZWQtc3RhdHMuaHRtbCBbIEZhaWx1
cmUgXQotd2VicnRjL2F1ZGlvLW11dGVkLXN0YXRzMi5odG1sIFsgRmFpbHVyZSBdCi13ZWJydGMv
Y2FwdHVyZUNhbnZhcy13ZWJydGMuaHRtbCBbIEZhaWx1cmUgXQotd2VicnRjL2Nsb3NpbmctcGVl
cmNvbm5lY3Rpb24uaHRtbCBbIFRpbWVvdXQgXQotd2VicnRjL2Nvbm5lY3Rpb24tc3RhdGUuaHRt
bCBbIEZhaWx1cmUgXQotd2VicnRjL2RhdGFjaGFubmVsIFsgU2tpcCBdCi13ZWJydGMvZXBoZW1l
cmFsLWNlcnRpZmljYXRlcy1hbmQtY25hbWVzLmh0bWwgWyBGYWlsdXJlIF0KLXdlYnJ0Yy9tdWx0
aS12aWRlby5odG1sIFsgRmFpbHVyZSBdCi13ZWJydGMvbm8tcG9ydC16ZXJvLWluLXVwZC1jYW5k
aWRhdGVzLmh0bWwgWyBUaW1lb3V0IF0KLXdlYnJ0Yy9wZWVyLWNvbm5lY3Rpb24tYXVkaW8tbXV0
ZTIuaHRtbCBbIENyYXNoIEZhaWx1cmUgXQotd2VicnRjL3BlZXItY29ubmVjdGlvbi1hdWRpby1t
dXRlLmh0bWwgWyBGYWlsdXJlIF0KLXdlYnJ0Yy9wZWVyLWNvbm5lY3Rpb24tYXVkaW8tdW5tdXRl
Lmh0bWwgWyBGYWlsdXJlIF0KLXdlYnJ0Yy9wZWVyLWNvbm5lY3Rpb24tcmVtb3RlLWF1ZGlvLW11
dGUyLmh0bWwgWyBDcmFzaCBGYWlsdXJlIF0KLXdlYnJ0Yy9wZWVyLWNvbm5lY3Rpb24tcmVtb3Rl
LWF1ZGlvLW11dGUuaHRtbCBbIEZhaWx1cmUgXQotd2VicnRjL3BlZXItY29ubmVjdGlvbi10cmFj
ay1lbmQuaHRtbCBbIEZhaWx1cmUgXQotd2VicnRjL3ZpZGVvLWFkZFRyYWNrLmh0bWwgWyBDcmFz
aCBdCi13ZWJydGMvdmlkZW8tZGlzYWJsZWQtYmxhY2suaHRtbCBbIEZhaWx1cmUgXQotd2VicnRj
L3ZpZGVvLW1lZGlhc3RyZWFtdHJhY2stc3RhdHMuaHRtbCBbIEZhaWx1cmUgXQotd2VicnRjL3Zp
ZGVvLW11dGUuaHRtbCBbIEZhaWx1cmUgVGltZW91dCBdCi13ZWJydGMvdmlkZW8tcmVtb3RlLW11
dGUuaHRtbCBbIEZhaWx1cmUgXQotd2VicnRjL3ZpZGVvLXJlcGxhY2UtbXV0ZWQtdHJhY2suaHRt
bCBbIEZhaWx1cmUgVGltZW91dCBDcmFzaCBdCi13ZWJraXQub3JnL2IvMTc2ODAxIHdlYnJ0Yy92
aWRlby1yZXBsYWNlLXRyYWNrLmh0bWwgWyBGYWlsdXJlIENyYXNoIF0KLXdlYmtpdC5vcmcvYi8x
NzY4MDEgd2VicnRjL3ZpZGVvLWdldFBhcmFtZXRlcnMuaHRtbCBbIEZhaWx1cmUgQ3Jhc2ggXQot
d2Via2l0Lm9yZy9iLzE3NjgwMSB3ZWJydGMvdmlkZW8uaHRtbCBbIEZhaWx1cmUgQ3Jhc2ggXQot
d2VicnRjL3ZpZGVvLXJlcGxhY2UtdHJhY2stdG8tbnVsbC5odG1sIFsgRmFpbHVyZSBdCi13ZWJy
dGMvdmlkZW8tcm90YXRpb24uaHRtbCBbIEZhaWx1cmUgXQotd2VicnRjL3ZpZGVvLXN0YXRzLmh0
bWwgWyBGYWlsdXJlIENyYXNoIF0KLXdlYnJ0Yy92aWRlby11bm11dGUuaHRtbCBbIEZhaWx1cmUg
VGltZW91dCBdCi13ZWJydGMvdmlkZW8td2l0aC1kYXRhLWNoYW5uZWwuaHRtbCBbIEZhaWx1cmUg
XQotd2VicnRjL3ZpZGVvLXdpdGgtcmVjZWl2ZXIuaHRtbCBbIEZhaWx1cmUgXQotaW1wb3J0ZWQv
dzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy93ZWJydGMvUlRDUGVlckNvbm5lY3Rpb24tYWRkSWNlQ2Fu
ZGlkYXRlLmh0bWwgWyBGYWlsdXJlIF0KLWltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMv
d2VicnRjL1JUQ1BlZXJDb25uZWN0aW9uLWNyZWF0ZURhdGFDaGFubmVsLmh0bWwgWyBGYWlsdXJl
IF0KLWltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvd2VicnRjL1JUQ1BlZXJDb25uZWN0
aW9uLXNldFJlbW90ZURlc2NyaXB0aW9uLmh0bWwgWyBGYWlsdXJlIF0KLWltcG9ydGVkL3czYy93
ZWItcGxhdGZvcm0tdGVzdHMvd2VicnRjL1JUQ1BlZXJDb25uZWN0aW9uLWlkbC5odG1sIFsgRmFp
bHVyZSBdCi1pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3dlYnJ0Yy9SVENQZWVyQ29u
bmVjdGlvbi1jcmVhdGVBbnN3ZXIuaHRtbCBbIEZhaWx1cmUgXQotaW1wb3J0ZWQvdzNjL3dlYi1w
bGF0Zm9ybS10ZXN0cy93ZWJydGMvUlRDUGVlckNvbm5lY3Rpb24tb25uZWdvdGlhdGlvbm5lZWRl
ZC5odG1sIFsgRmFpbHVyZSBdCi1pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3dlYnJ0
Yy9SVENEYXRhQ2hhbm5lbC1idWZmZXJlZEFtb3VudC5odG1sIFsgRmFpbHVyZSBdCi1pbXBvcnRl
ZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3dlYnJ0Yy9SVENEYXRhQ2hhbm5lbC1zZW5kLmh0bWwg
WyBGYWlsdXJlIF0KLWltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvd2VicnRjL1JUQ0lj
ZVRyYW5zcG9ydC5odG1sIFsgRmFpbHVyZSBdCi1pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRl
c3RzL3dlYnJ0Yy9SVENQZWVyQ29ubmVjdGlvbi1hZGRUcmFuc2NlaXZlci5odG1sIFsgRmFpbHVy
ZSBdCi1pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3dlYnJ0Yy9SVENQZWVyQ29ubmVj
dGlvbi1jb25uZWN0aW9uU3RhdGUuaHRtbCBbIEZhaWx1cmUgXQotaW1wb3J0ZWQvdzNjL3dlYi1w
bGF0Zm9ybS10ZXN0cy93ZWJydGMvUlRDUGVlckNvbm5lY3Rpb24tZ2V0U3RhdHMuaHRtbCBbIEZh
aWx1cmUgXQotaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy93ZWJydGMvUlRDUGVlckNv
bm5lY3Rpb24taWNlQ29ubmVjdGlvblN0YXRlLmh0bWwgWyBGYWlsdXJlIF0KLWltcG9ydGVkL3cz
Yy93ZWItcGxhdGZvcm0tdGVzdHMvd2VicnRjL1JUQ1BlZXJDb25uZWN0aW9uLWljZUdhdGhlcmlu
Z1N0YXRlLmh0bWwgWyBGYWlsdXJlIF0KLWltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMv
d2VicnRjL1JUQ1BlZXJDb25uZWN0aW9uLW9uZGF0YWNoYW5uZWwuaHRtbCBbIEZhaWx1cmUgXQot
aW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy93ZWJydGMvUlRDUGVlckNvbm5lY3Rpb24t
c2V0TG9jYWxEZXNjcmlwdGlvbi1hbnN3ZXIuaHRtbCBbIEZhaWx1cmUgXQotaW1wb3J0ZWQvdzNj
L3dlYi1wbGF0Zm9ybS10ZXN0cy93ZWJydGMvUlRDUGVlckNvbm5lY3Rpb24tc2V0TG9jYWxEZXNj
cmlwdGlvbi1vZmZlci5odG1sIFsgRmFpbHVyZSBdCi1pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3Jt
LXRlc3RzL3dlYnJ0Yy9SVENQZWVyQ29ubmVjdGlvbi1zZXRSZW1vdGVEZXNjcmlwdGlvbi1vZmZl
ci5odG1sIFsgRmFpbHVyZSBdCi1pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3dlYnJ0
Yy9SVENEVE1GU2VuZGVyLWluc2VydERUTUYuaHRtbCBbIENyYXNoIF0KLWltcG9ydGVkL3czYy93
ZWItcGxhdGZvcm0tdGVzdHMvd2VicnRjL1JUQ1BlZXJDb25uZWN0aW9uLW9udHJhY2suaHRtbCBb
IENyYXNoIF0KLWltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvd2VicnRjL1JUQ1BlZXJD
b25uZWN0aW9uLXNldERlc2NyaXB0aW9uLXRyYW5zY2VpdmVyLmh0bWwgWyBDcmFzaCBdCi1pbXBv
cnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3dlYnJ0Yy9SVENSdHBTZW5kZXItcmVwbGFjZVRy
YWNrLmh0bWwgWyBDcmFzaCBdCi1pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3dlYnJ0
Yy9kYXRhY2hhbm5lbC1lbXB0eXN0cmluZy5odG1sIFsgRmFpbHVyZSBdCi1pbXBvcnRlZC93M2Mv
d2ViLXBsYXRmb3JtLXRlc3RzL3dlYnJ0Yy9uby1tZWRpYS1jYWxsLmh0bWwgWyBGYWlsdXJlIF0K
LWltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvd2VicnRjL3Byb21pc2VzLWNhbGwuaHRt
bCBbIEZhaWx1cmUgXQotaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy93ZWJydGMvcnRj
cGVlcmNvbm5lY3Rpb24vc2V0UmVtb3RlRGVzY3JpcHRpb24uaHRtbCBbIEZhaWx1cmUgXQotaHR0
cC90ZXN0cy93ZWJydGMvZmlsdGVyaW5nLWljZS1jYW5kaWRhdGUtY3Jvc3Mtb3JpZ2luLWZyYW1l
Lmh0bWwgWyBUaW1lb3V0IF0KLWh0dHAvdGVzdHMvd2VicnRjL2ZpbHRlcmluZy1pY2UtY2FuZGlk
YXRlLXNhbWUtb3JpZ2luLWZyYW1lLmh0bWwgWyBUaW1lb3V0IF0KLWh0dHAvdGVzdHMvd2VicnRj
L2ZpbHRlcmluZy1pY2UtY2FuZGlkYXRlLXNhbWUtb3JpZ2luLWZyYW1lMi5odG1sIFsgVGltZW91
dCBdCi13ZWJydGMvZmlsdGVyaW5nLWljZS1jYW5kaWRhdGUtYWZ0ZXItcmVsb2FkLmh0bWwgWyBU
aW1lb3V0IF0KLXdlYnJ0Yy9pY2UtY2FuZGlkYXRlLXNkcE1MaW5lSW5kZXguaHRtbCBbIFRpbWVv
dXQgXQorIyBTa2lwcGluZyB1bnRpbCBiYWNrZW5kIGlzIGltcGxlbWVudGVkCit3ZWJydGMgWyBT
a2lwIF0KK2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvd2VicnRjLyBbIFNraXAgXQog
aHR0cC90ZXN0cy9tZWRpYS9tZWRpYS1zdHJlYW0vZ2V0dXNlcm1lZGlhLXdpdGgtY2FudmFzLmh0
bWwgWyBUaW1lb3V0IF0KLXdlYmtpdC5vcmcvYi8xNjkxMTAgd2VicnRjL2F1ZGlvLXBlZXItY29u
bmVjdGlvbi13ZWJhdWRpby5odG1sIFsgRmFpbHVyZSBUaW1lb3V0IF0KLXdlYmtpdC5vcmcvYi8x
NzM0NTYgaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy93ZWJydGMvUlRDUGVlckNvbm5l
Y3Rpb24tY3JlYXRlT2ZmZXIuaHRtbCBbIENyYXNoIF0KLXdlYmtpdC5vcmcvYi8xNzM0NTYgd2Vi
cnRjL2NyZWF0ZU9mZmVyQW5zd2VyLmh0bWwgIFsgQ3Jhc2ggXQotd2Via2l0Lm9yZy9iLzE3MzQ1
NiB3ZWJydGMvdmlkZW8tYWRkVHJhbnNjZWl2ZXIuaHRtbCBbIENyYXNoIF0KICMgVGhlIE1lZGlh
U3RyZWFtIGltcGxlbWVudGF0aW9uIGlzIGFsc28gc3RpbGwgbm90IGNvbXBsZXRlZAogd2Via2l0
Lm9yZy9iLzc5MjAzIGZhc3QvbWVkaWFzdHJlYW0vbW9jay1tZWRpYS1zb3VyY2Utd2ViYXVkaW8u
aHRtbCBbIFRpbWVvdXQgXQogd2Via2l0Lm9yZy9iLzc5MjAzIGZhc3QvbWVkaWFzdHJlYW0vZ2V0
VXNlck1lZGlhLXdlYmF1ZGlvLmh0bWwgWyBGYWlsdXJlIF0KQEAgLTEyNTMsNyArMTE4Miw2IEBA
IHdlYmtpdC5vcmcvYi8xNzU0MTkgaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9zdHJl
YW1zL3JlYWRhYmxlLWJ5dGUtc3RyZWFtCiBmYXN0L2ltYWdlcy9hbmltYXRlZC1pbWFnZS1tcDQu
aHRtbCBbIFNraXAgXQogCiB3ZWJraXQub3JnL2IvMTc3NTMyIGFjY2Vzc2liaWxpdHkvaW1hZ2Ut
bG9hZC1vbi1kZWxheS5odG1sIFsgRmFpbHVyZSBdCi13ZWJraXQub3JnL2IvMTc3NTMzIHdlYnJ0
Yy92aWRlby1pbnRlcnJ1cHRpb24uaHRtbCBbIEZhaWx1cmUgXQogCiB3ZWJraXQub3JnL2IvMTc3
NjMyIGZhc3QvdGV4dC9mbGFnLWNvZGVwb2ludC5odG1sIFsgSW1hZ2VPbmx5RmFpbHVyZSBdCiAK
QEAgLTEzODIsNyArMTMxMCw2IEBAIHdlYmtpdC5vcmcvYi8xNzY4MDUgbWVkaWEvbWVkaWEtaGln
aGVyLXByaW8tYXVkaW8tc3RyZWFtLmh0bWwgWyBDcmFzaCBdCiB3ZWJraXQub3JnL2IvMTc2ODA2
IG1lZGlhL3RyYWNrL3RyYWNrLXRleHQtdHJhY2stY3VlLWxpc3QuaHRtbCBbIENyYXNoIF0KIAog
d2Via2l0Lm9yZy9iLzE3Njg1NiBmYXN0L21lZGlhc3RyZWFtL2FwcGx5LWNvbnN0cmFpbnRzLXZp
ZGVvLmh0bWwgWyBDcmFzaCBdCi13ZWJraXQub3JnL2IvMTc2ODUwIHdlYnJ0Yy9jbG9uZS1hdWRp
by10cmFjay5odG1sIFsgRmFpbHVyZSBDcmFzaCBdCiB3ZWJraXQub3JnL2IvMTc2ODYxIGltcG9y
dGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvbWVkaWEtc291cmNlL21lZGlhc291cmNlLXNvdXJj
ZWJ1ZmZlci1tb2RlLmh0bWwgWyBDcmFzaCBdCiAKICMgU2VlIGFsc28gd2Via2l0Lm9yZy9iLzE0
MTY5OQpAQCAtMTM5NCw4ICsxMzIxLDYgQEAgd2Via2l0Lm9yZy9iLzE3NzUzNyBodHRwL3Rlc3Rz
L211bHRpcGFydC9tdWx0aXBhcnQtaHRtbC5waHAgWyBDcmFzaCBdCiAKIHdlYmtpdC5vcmcvYi8x
Nzc4MTYgd2ViZ2wvMS4wLjIvY29uZm9ybWFuY2Uvb2dsZXMvR0wvdmVjL3ZlY18wMDFfdG9fMDA4
Lmh0bWwgWyBDcmFzaCBQYXNzIF0KIAotd2Via2l0Lm9yZy9iLzE3NzgxOCB3ZWJydGMvbmVnb3Rp
YXRlZG5lZWRlZC1ldmVudC1hZGRTdHJlYW0uaHRtbCBbIENyYXNoIFBhc3MgXQotCiAjLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwogIyBFbmQgb2YgQ3Jhc2hpbmcgdGVzdHMKICMvLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>322673</attachid>
            <date>2017-10-04 08:38:38 -0700</date>
            <delta_ts>2017-10-04 08:54:25 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-177868-20171004173836.patch</filename>
            <type>text/plain</type>
            <size>263333</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjIyODM0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzIwOWYyMWRiZDdiYWJk
NjQyODZiYTRjMDYzYTU5NWI2YTk1MzVhMi4uNTE5ZTJkYzVhNjVhNWE0YTcwNjgwOWJlOGNmNzg4
MGMwYjQ4NTQ3OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDU0IEBACiAyMDE3LTEwLTA0ICBZb3Vl
bm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KIAorICAgICAgICBSZW1vdmUgT3BlbldlYlJU
QyBiYWNrZW5kCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNzc4NjgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIERlcml2ZWRTb3VyY2VzLm1ha2U6CisgICAg
ICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYUVuZHBvaW50UGVlckNvbm5lY3Rpb24uY3Bw
OiBSZW1vdmVkLgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFFbmRwb2ludFBl
ZXJDb25uZWN0aW9uLmg6IFJlbW92ZWQuCisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9N
ZWRpYUVuZHBvaW50U2Vzc2lvbkRlc2NyaXB0aW9uLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBN
b2R1bGVzL21lZGlhc3RyZWFtL01lZGlhRW5kcG9pbnRTZXNzaW9uRGVzY3JpcHRpb24uaDogUmVt
b3ZlZC4KKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL1NEUFByb2Nlc3Nvci5jcHA6IFJl
bW92ZWQuCisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9TRFBQcm9jZXNzb3IuaDogUmVt
b3ZlZC4KKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL2xpYndlYnJ0Yy9MaWJXZWJSVENN
ZWRpYUVuZHBvaW50LmNwcDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2o6CisgICAgICAgICogcGxhdGZvcm0vR1N0cmVhbWVyLmNtYWtlOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmJ1aWxk
TWVkaWFFbmdpbmVzVmVjdG9yKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFt
ZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c3VwcG9ydHNUeXBlKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyLmNw
cDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyLmg6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0v
bWVkaWFzdHJlYW0vTWVkaWFFbmRwb2ludC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZv
cm0vbWVkaWFzdHJlYW0vTWVkaWFFbmRwb2ludC5oOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRm
b3JtL21lZGlhc3RyZWFtL01lZGlhRW5kcG9pbnRTZXNzaW9uQ29uZmlndXJhdGlvbi5oOiBSZW1v
dmVkLgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL1NEUFByb2Nlc3NvclNjcmlwdFJl
c291cmNlLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9TRFBQ
cm9jZXNzb3JTY3JpcHRSZXNvdXJjZS5oOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL21l
ZGlhc3RyZWFtL29wZW53ZWJydGMvTWVkaWFFbmRwb2ludE93ci5jcHA6IFJlbW92ZWQuCisgICAg
ICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vb3BlbndlYnJ0Yy9NZWRpYUVuZHBvaW50T3dyLmg6
IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vb3BlbndlYnJ0Yy9PcGVu
V2ViUlRDVXRpbGl0aWVzLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0
cmVhbS9vcGVud2VicnRjL09wZW5XZWJSVENVdGlsaXRpZXMuaDogUmVtb3ZlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9vcGVud2VicnRjL1JlYWx0aW1lQXVkaW9Tb3VyY2VPd3Iu
aDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9vcGVud2VicnRjL1Jl
YWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJPd3IuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRm
b3JtL21lZGlhc3RyZWFtL29wZW53ZWJydGMvUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlck93ci5o
OiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL29wZW53ZWJydGMvUmVh
bHRpbWVNZWRpYVNvdXJjZU93ci5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vbWVk
aWFzdHJlYW0vb3BlbndlYnJ0Yy9SZWFsdGltZU1lZGlhU291cmNlT3dyLmg6IFJlbW92ZWQuCisg
ICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vb3BlbndlYnJ0Yy9SZWFsdGltZVZpZGVvU291
cmNlT3dyLmg6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vbW9jay9Nb2NrTWVkaWFFbmRw
b2ludC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vbW9jay9Nb2NrTWVkaWFFbmRw
b2ludC5oOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL21vY2svTW9ja1JlYWx0aW1lTWVk
aWFTb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TW9ja1JlYWx0aW1lTWVkaWFTb3VyY2U6
Ok1vY2tSZWFsdGltZU1lZGlhU291cmNlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tb2NrL01vY2tS
ZWFsdGltZU1lZGlhU291cmNlLmg6CisgICAgICAgICogdGVzdGluZy9JbnRlcm5hbHMuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjpJbnRlcm5hbHMpOgorICAgICAgICAoV2ViQ29y
ZTo6SW50ZXJuYWxzOjplbmFibGVNb2NrTWVkaWFFbmRwb2ludCk6IERlbGV0ZWQuCisgICAgICAg
ICogdGVzdGluZy9JbnRlcm5hbHMuaDoKKworMjAxNy0xMC0wNCAgWW91ZW5uIEZhYmxldCAgPHlv
dWVubkBhcHBsZS5jb20+CisKICAgICAgICAgQWRkIHF1b3RhIHRvIGNhY2hlIEFQSQogICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc3NTUyCiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNvcmUvQ01h
a2VMaXN0cy50eHQKaW5kZXggMWNjMTZjN2QxZmFiZGVmNjU3OGI0MjIxMTFkYmI1NjVlMzkwNDg5
ZC4uN2YyMmU1MTZmOTdhMjk3ZGQ1NDhlNzVjZWUwODc3YTFjNTYyNWYxYSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VM
aXN0cy50eHQKQEAgLTEwOTMsOCArMTA5Myw2IEBAIHNldChXZWJDb3JlX1NPVVJDRVMKICAgICBN
b2R1bGVzL21lZGlhc3RyZWFtL01lZGlhRGV2aWNlcy5jcHAKICAgICBNb2R1bGVzL21lZGlhc3Ry
ZWFtL01lZGlhRGV2aWNlc0VudW1lcmF0aW9uUmVxdWVzdC5jcHAKICAgICBNb2R1bGVzL21lZGlh
c3RyZWFtL01lZGlhRGV2aWNlc1JlcXVlc3QuY3BwCi0gICAgTW9kdWxlcy9tZWRpYXN0cmVhbS9N
ZWRpYUVuZHBvaW50UGVlckNvbm5lY3Rpb24uY3BwCi0gICAgTW9kdWxlcy9tZWRpYXN0cmVhbS9N
ZWRpYUVuZHBvaW50U2Vzc2lvbkRlc2NyaXB0aW9uLmNwcAogICAgIE1vZHVsZXMvbWVkaWFzdHJl
YW0vTWVkaWFTdHJlYW0uY3BwCiAgICAgTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbUV2
ZW50LmNwcAogICAgIE1vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1SZWdpc3RyeS5jcHAK
QEAgLTExMTYsNyArMTExNCw2IEBAIHNldChXZWJDb3JlX1NPVVJDRVMKICAgICBNb2R1bGVzL21l
ZGlhc3RyZWFtL1JUQ1J0cFRyYW5zY2VpdmVyLmNwcAogICAgIE1vZHVsZXMvbWVkaWFzdHJlYW0v
UlRDU2Vzc2lvbkRlc2NyaXB0aW9uLmNwcAogICAgIE1vZHVsZXMvbWVkaWFzdHJlYW0vUlRDVHJh
Y2tFdmVudC5jcHAKLSAgICBNb2R1bGVzL21lZGlhc3RyZWFtL1NEUFByb2Nlc3Nvci5jcHAKICAg
ICBNb2R1bGVzL21lZGlhc3RyZWFtL1VzZXJNZWRpYUNvbnRyb2xsZXIuY3BwCiAgICAgTW9kdWxl
cy9tZWRpYXN0cmVhbS9Vc2VyTWVkaWFSZXF1ZXN0LmNwcAogCkBAIC0yNTU0LDEzICsyNTUxLDEx
IEBAIHNldChXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGlt
ZU1lZGlhU291cmNlLmNwcAogICAgIHBsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lTWVkaWFT
b3VyY2VDZW50ZXIuY3BwCiAgICAgcGxhdGZvcm0vbWVkaWFzdHJlYW0vUmVhbHRpbWVNZWRpYVNv
dXJjZVNldHRpbmdzLmNwcAotICAgIHBsYXRmb3JtL21lZGlhc3RyZWFtL1NEUFByb2Nlc3NvclNj
cmlwdFJlc291cmNlLmNwcAogCiAgICAgcGxhdGZvcm0vbWVkaWFzdHJlYW0vbGlid2VicnRjL0xp
YldlYlJUQ1Byb3ZpZGVyLmNwcAogCiAgICAgcGxhdGZvcm0vbW9jay9EZXZpY2VPcmllbnRhdGlv
bkNsaWVudE1vY2suY3BwCiAgICAgcGxhdGZvcm0vbW9jay9HZW9sb2NhdGlvbkNsaWVudE1vY2su
Y3BwCi0gICAgcGxhdGZvcm0vbW9jay9Nb2NrTWVkaWFFbmRwb2ludC5jcHAKICAgICBwbGF0Zm9y
bS9tb2NrL01vY2tSZWFsdGltZUF1ZGlvU291cmNlLmNwcAogICAgIHBsYXRmb3JtL21vY2svTW9j
a1JlYWx0aW1lTWVkaWFTb3VyY2UuY3BwCiAgICAgcGxhdGZvcm0vbW9jay9Nb2NrUmVhbHRpbWVN
ZWRpYVNvdXJjZUNlbnRlci5jcHAKQEAgLTM4ODIsMjQgKzM4NzcsNiBAQCBpZiAoV2ViQ29yZV9V
U0VSX0FHRU5UX1NDUklQVFMpCiAgICAgbGlzdChBUFBFTkQgV2ViQ29yZV9ERVJJVkVEX1NPVVJD
RVMgJHtERVJJVkVEX1NPVVJDRVNfV0VCQ09SRV9ESVJ9L1VzZXJBZ2VudFNjcmlwdHNEYXRhLmNw
cCkKIGVuZGlmICgpCiAKLWlmIChFTkFCTEVfV0VCX1JUQykKLSAgICAjIE5lY2Vzc2FyeSB2YXJp
YWJsZXM6Ci0gICAgIyBXZWJDb3JlX1NEUF9QUk9DRVNTT1JfU0NSSVBUUyBjb250YWluaW5nIHRo
ZSBKYXZhU2NyaXB0IHNvdXJjZXMgbGlzdAotICAgICMgV2ViQ29yZV9TRFBfUFJPQ0VTU09SX1ND
UklQVFNfREVQRU5ERU5DSUVTIGNvbnRhaW5pbmcgdGhlIHNvdXJjZSBmaWxlIHRoYXQgd2lsbCBs
b2FkIHRoZSBzY3JpcHRzIHRvIGFkZCB0aGUgcHJvcGVyCi0gICAgIyAgIGRlcGVuZGVuY3kgYW5k
IGhhdmluZyB0aGVtIGJ1aWx0IGF0IHRoZSByaWdodCBtb21lbnQKLSAgICBzZXQoV2ViQ29yZV9T
RFBfUFJPQ0VTU09SX1NDUklQVFMgJHtXRUJDT1JFX0RJUn0vTW9kdWxlcy9tZWRpYXN0cmVhbS9z
ZHAuanMpCi0gICAgc2V0KFdlYkNvcmVfU0RQX1BST0NFU1NPUl9TQ1JJUFRTX0RFUEVOREVOQ0lF
UyAke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9TRFBQcm9jZXNzb3JTY3JpcHRS
ZXNvdXJjZS5jcHApCi0KLSAgICBNQUtFX0pTX0ZJTEVfQVJSQVlTKAotICAgICAgICAke0RFUklW
RURfU09VUkNFU19XRUJDT1JFX0RJUn0vU0RQUHJvY2Vzc29yU2NyaXB0c0RhdGEuY3BwCi0gICAg
ICAgICR7REVSSVZFRF9TT1VSQ0VTX1dFQkNPUkVfRElSfS9TRFBQcm9jZXNzb3JTY3JpcHRzRGF0
YS5oCi0gICAgICAgIFdlYkNvcmUKLSAgICAgICAgV2ViQ29yZV9TRFBfUFJPQ0VTU09SX1NDUklQ
VFMKLSAgICAgICAgV2ViQ29yZV9TRFBfUFJPQ0VTU09SX1NDUklQVFNfREVQRU5ERU5DSUVTCi0g
ICAgKQotICAgIGxpc3QoQVBQRU5EIFdlYkNvcmVfREVSSVZFRF9TT1VSQ0VTICR7REVSSVZFRF9T
T1VSQ0VTX1dFQkNPUkVfRElSfS9TRFBQcm9jZXNzb3JTY3JpcHRzRGF0YS5jcHApCi1lbmRpZiAo
KQotCiAjIEdlbmVyYXRlIHBsdWctaW4gcmVzb3VyY2VzCiBhZGRfY3VzdG9tX2NvbW1hbmQoCiAg
ICAgT1VUUFVUICR7REVSSVZFRF9TT1VSQ0VTX1dFQkNPUkVfRElSfS9QbHVnSW5zUmVzb3VyY2Vz
RGF0YS5jcHAgJHtERVJJVkVEX1NPVVJDRVNfV0VCQ09SRV9ESVJ9L1BsdWdJbnNSZXNvdXJjZXMu
aApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZSBiL1NvdXJj
ZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UKaW5kZXggMWQ1ZWYwMjBiNGMyZTlmYmIwYmUz
MTAxYTgwNzI5ZDdhNjllOWZlZS4uZDM2YTE5ODdjNmQwN2FiMGFjNTQ0NzU5NmExYjRhNGQzYjgx
OGY3ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtlCkBAIC0xMTg0LDIzICsxMTg0LDYg
QEAgQ29sb3JEYXRhLmNwcCA6IHBsYXRmb3JtL0NvbG9yRGF0YS5ncGVyZiAkKFdlYkNvcmUpL21h
a2UtaGFzaC10b29scy5wbAogCiAjIC0tLS0tLS0tCiAKLSMgV2ViUlRDIHNjcmlwdHMKLQotV0VC
Q09SRV9TRFBfUFJPQ0VTU09SX1NDUklQVFMgPSAKLQotaWZlcSAoJChPUyksTUFDT1MpCi0gICAg
V0VCQ09SRV9TRFBfUFJPQ0VTU09SX1NDUklQVFMgOj0gJChXRUJDT1JFX1NEUF9QUk9DRVNTT1Jf
U0NSSVBUUykgJChXZWJDb3JlKS9Nb2R1bGVzL21lZGlhc3RyZWFtL3NkcC5qcwotZW5kaWYKLQot
aWZkZWYgV0VCQ09SRV9TRFBfUFJPQ0VTU09SX1NDUklQVFMKLWFsbCA6IFNEUFByb2Nlc3NvclNj
cmlwdHNEYXRhLmgKLQotU0RQUHJvY2Vzc29yU2NyaXB0c0RhdGEuaCA6ICQoSmF2YVNjcmlwdENv
cmVfU0NSSVBUU19ESVIpL21ha2UtanMtZmlsZS1hcnJheXMucHkgJChXRUJDT1JFX1NEUF9QUk9D
RVNTT1JfU0NSSVBUUykKLQkkKFBZVEhPTikgJChKYXZhU2NyaXB0Q29yZV9TQ1JJUFRTX0RJUikv
bWFrZS1qcy1maWxlLWFycmF5cy5weSAtbiBXZWJDb3JlICRAIFNEUFByb2Nlc3NvclNjcmlwdHNE
YXRhLmNwcCAkKFdFQkNPUkVfU0RQX1BST0NFU1NPUl9TQ1JJUFRTKQotZW5kaWYKLQotIyAtLS0t
LS0tLQotCiAjIHVzZXIgYWdlbnQgc3R5bGUgc2hlZXRzCiAKIFVTRVJfQUdFTlRfU1RZTEVfU0hF
RVRTID0gJChXZWJDb3JlKS9jc3MvaHRtbC5jc3MgJChXZWJDb3JlKS9jc3MvcXVpcmtzLmNzcyAk
KFdlYkNvcmUpL2Nzcy9wbHVnSW5zLmNzcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9tZWRpYXN0cmVhbS9NZWRpYUVuZHBvaW50UGVlckNvbm5lY3Rpb24uY3BwIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYUVuZHBvaW50UGVlckNvbm5lY3Rpb24u
Y3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZTkyNTI3YWUyZmQ2NzZhNzczOWQ0
Zjc5Yzk2ZGY2NmZlMDViMGEwLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFFbmRwb2lu
dFBlZXJDb25uZWN0aW9uLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDg5MyArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDE1IEVyaWNzc29uIEFCLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogICAgaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICog
ICAgZGlzdHJpYnV0aW9uLgotICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBFcmljc3NvbiBub3Ig
dGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotICogICAgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
LSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0j
aW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiTWVkaWFFbmRwb2ludFBlZXJDb25uZWN0aW9u
LmgiCi0KLSNpZiBFTkFCTEUoV0VCX1JUQykKLQotI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKLSNp
bmNsdWRlICJKU1JUQ1Nlc3Npb25EZXNjcmlwdGlvbi5oIgotI2luY2x1ZGUgIk1lZGlhRW5kcG9p
bnRTZXNzaW9uQ29uZmlndXJhdGlvbi5oIgotI2luY2x1ZGUgIk1lZGlhRW5kcG9pbnRTZXNzaW9u
RGVzY3JpcHRpb24uaCIKLSNpbmNsdWRlICJNZWRpYVN0cmVhbS5oIgotI2luY2x1ZGUgIk1lZGlh
U3RyZWFtRXZlbnQuaCIKLSNpbmNsdWRlICJNZWRpYVN0cmVhbVRyYWNrLmgiCi0jaW5jbHVkZSAi
Tm90SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlICJQZWVyTWVkaWFEZXNjcmlwdGlvbi5oIgotI2lu
Y2x1ZGUgIlJUQ0Fuc3dlck9wdGlvbnMuaCIKLSNpbmNsdWRlICJSVENDb25maWd1cmF0aW9uLmgi
Ci0jaW5jbHVkZSAiUlRDSWNlQ2FuZGlkYXRlLmgiCi0jaW5jbHVkZSAiUlRDT2ZmZXJPcHRpb25z
LmgiCi0jaW5jbHVkZSAiUlRDUGVlckNvbm5lY3Rpb24uaCIKLSNpbmNsdWRlICJSVENQZWVyQ29u
bmVjdGlvbkljZUV2ZW50LmgiCi0jaW5jbHVkZSAiUlRDUnRwVHJhbnNjZWl2ZXIuaCIKLSNpbmNs
dWRlICJSVENUcmFja0V2ZW50LmgiCi0jaW5jbHVkZSAiU0RQUHJvY2Vzc29yLmgiCi0jaW5jbHVk
ZSA8d3RmL0Z1bmN0aW9uLmg+Ci0jaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KLSNpbmNsdWRl
IDx3dGYvdGV4dC9CYXNlNjQuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi11c2luZyBuYW1l
c3BhY2UgUGVlckNvbm5lY3Rpb247Ci0KLXVzaW5nIE1lZGlhRGVzY3JpcHRpb25WZWN0b3IgPSBW
ZWN0b3I8UGVlck1lZGlhRGVzY3JpcHRpb24+OwotdXNpbmcgUnRwVHJhbnNjZWl2ZXJWZWN0b3Ig
PSBWZWN0b3I8UmVmUHRyPFJUQ1J0cFRyYW5zY2VpdmVyPj47Ci0KLS8vIFdlIHVzZSBiYXNlNjQg
dG8gZ2VuZXJhdGUgdGhlIHJhbmRvbSBzdHJpbmdzIHNvIHdlIG5lZWQgYSBzaXplIHRoYXQgYXZv
aWRzIHBhZGRpbmcgdG8gZ2V0IGljZS1jaGFycy4KLXN0YXRpYyBjb25zdCBzaXplX3QgY25hbWVT
aXplID0gMTg7Ci0vLyBTaXplIHJhbmdlIGZyb20gNCB0byAyNTYgaWNlLWNoYXJzIGRlZmluZWQg
aW4gUkZDIDUyNDUuCi1zdGF0aWMgY29uc3Qgc2l6ZV90IGljZVVmcmFnU2l6ZSA9IDY7Ci0vLyBT
aXplIHJhbmdlIGZyb20gMjIgdG8gMjU2IGljZS1jaGFycyBkZWZpbmVkIGluIFJGQyA1MjQ1Lgot
c3RhdGljIGNvbnN0IHNpemVfdCBpY2VQYXNzd29yZFNpemUgPSAyNDsKLQotI2lmICFVU0UoTElC
V0VCUlRDKQotc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxQZWVyQ29ubmVjdGlvbkJhY2tlbmQ+IGNy
ZWF0ZU1lZGlhRW5kcG9pbnRQZWVyQ29ubmVjdGlvbihSVENQZWVyQ29ubmVjdGlvbiYgcGVlckNv
bm5lY3Rpb24pCi17Ci0gICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxQZWVyQ29ubmVjdGlvbkJh
Y2tlbmQ+KG5ldyBNZWRpYUVuZHBvaW50UGVlckNvbm5lY3Rpb24ocGVlckNvbm5lY3Rpb24pKTsK
LX0KLQotQ3JlYXRlUGVlckNvbm5lY3Rpb25CYWNrZW5kIFBlZXJDb25uZWN0aW9uQmFja2VuZDo6
Y3JlYXRlID0gY3JlYXRlTWVkaWFFbmRwb2ludFBlZXJDb25uZWN0aW9uOwotI2VuZGlmCi0KLXN0
YXRpYyBTdHJpbmcgcmFuZG9tU3RyaW5nKHNpemVfdCBzaXplKQotewotICAgIHVuc2lnbmVkIGNo
YXIgcmFuZG9tVmFsdWVzW3NpemVdOwotICAgIGNyeXB0b2dyYXBoaWNhbGx5UmFuZG9tVmFsdWVz
KHJhbmRvbVZhbHVlcywgc2l6ZSk7Ci0gICAgcmV0dXJuIGJhc2U2NEVuY29kZShyYW5kb21WYWx1
ZXMsIHNpemUpOwotfQotCi1NZWRpYUVuZHBvaW50UGVlckNvbm5lY3Rpb246Ok1lZGlhRW5kcG9p
bnRQZWVyQ29ubmVjdGlvbihSVENQZWVyQ29ubmVjdGlvbiYgcGVlckNvbm5lY3Rpb24pCi0gICAg
OiBQZWVyQ29ubmVjdGlvbkJhY2tlbmQocGVlckNvbm5lY3Rpb24pCi0gICAgLCBtX21lZGlhRW5k
cG9pbnQoTWVkaWFFbmRwb2ludDo6Y3JlYXRlKCp0aGlzKSkKLSAgICAsIG1fc2RwUHJvY2Vzc29y
KHN0ZDo6bWFrZV91bmlxdWU8U0RQUHJvY2Vzc29yPihtX3BlZXJDb25uZWN0aW9uLnNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoKSkpCi0gICAgLCBtX2NuYW1lKHJhbmRvbVN0cmluZyhjbmFtZVNpemUp
KQotICAgICwgbV9pY2VVZnJhZyhyYW5kb21TdHJpbmcoaWNlVWZyYWdTaXplKSkKLSAgICAsIG1f
aWNlUGFzc3dvcmQocmFuZG9tU3RyaW5nKGljZVBhc3N3b3JkU2l6ZSkpCi17Ci0gICAgQVNTRVJU
KG1fbWVkaWFFbmRwb2ludCk7Ci0KLSAgICBtX2RlZmF1bHRBdWRpb1BheWxvYWRzID0gbV9tZWRp
YUVuZHBvaW50LT5nZXREZWZhdWx0QXVkaW9QYXlsb2FkcygpOwotICAgIG1fZGVmYXVsdFZpZGVv
UGF5bG9hZHMgPSBtX21lZGlhRW5kcG9pbnQtPmdldERlZmF1bHRWaWRlb1BheWxvYWRzKCk7Ci0K
LSAgICAvLyBUYXNrcyAoc2VlIHJ1blRhc2soKSkgd2lsbCBiZSBkZWZlcnJlZCB1bnRpbCB3ZSBn
ZXQgdGhlIERUTFMgZmluZ2VycHJpbnQuCi0gICAgbV9tZWRpYUVuZHBvaW50LT5nZW5lcmF0ZUR0
bHNJbmZvKCk7Ci19Ci0KLXN0YXRpYyBSVENSdHBUcmFuc2NlaXZlciogbWF0Y2hUcmFuc2NlaXZl
cihjb25zdCBSdHBUcmFuc2NlaXZlclZlY3RvciYgdHJhbnNjZWl2ZXJzLCBjb25zdCBXVEY6OkZ1
bmN0aW9uPGJvb2woUlRDUnRwVHJhbnNjZWl2ZXImKT4mIG1hdGNoRnVuY3Rpb24pCi17Ci0gICAg
Zm9yIChhdXRvJiB0cmFuc2NlaXZlciA6IHRyYW5zY2VpdmVycykgewotICAgICAgICBpZiAobWF0
Y2hGdW5jdGlvbigqdHJhbnNjZWl2ZXIpKQotICAgICAgICAgICAgcmV0dXJuIHRyYW5zY2VpdmVy
LmdldCgpOwotICAgIH0KLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQotc3RhdGljIFJUQ1J0cFRy
YW5zY2VpdmVyKiBtYXRjaFRyYW5zY2VpdmVyQnlNaWQoY29uc3QgUnRwVHJhbnNjZWl2ZXJWZWN0
b3ImIHRyYW5zY2VpdmVycywgY29uc3QgU3RyaW5nJiBtaWQpCi17Ci0gICAgcmV0dXJuIG1hdGNo
VHJhbnNjZWl2ZXIodHJhbnNjZWl2ZXJzLCBbJm1pZF0gKFJUQ1J0cFRyYW5zY2VpdmVyJiBjdXJy
ZW50KSB7Ci0gICAgICAgIHJldHVybiBjdXJyZW50Lm1pZCgpID09IG1pZDsKLSAgICB9KTsKLX0K
LQotc3RhdGljIGJvb2wgaGFzVW5hc3NvY2lhdGVkVHJhbnNjZWl2ZXJzKGNvbnN0IFJ0cFRyYW5z
Y2VpdmVyVmVjdG9yJiB0cmFuc2NlaXZlcnMpCi17Ci0gICAgcmV0dXJuIG1hdGNoVHJhbnNjZWl2
ZXIodHJhbnNjZWl2ZXJzLCBbXSAoUlRDUnRwVHJhbnNjZWl2ZXImIGN1cnJlbnQpIHsKLSAgICAg
ICAgcmV0dXJuIGN1cnJlbnQubWlkKCkuaXNOdWxsKCkgJiYgIWN1cnJlbnQuc3RvcHBlZCgpOwot
ICAgIH0pOwotfQotCi12b2lkIE1lZGlhRW5kcG9pbnRQZWVyQ29ubmVjdGlvbjo6cnVuVGFzayhG
dW5jdGlvbjx2b2lkICgpPiYmIHRhc2spCi17Ci0gICAgaWYgKG1fZHRsc0ZpbmdlcnByaW50Lmlz
TnVsbCgpKSB7Ci0gICAgICAgIC8vIE9ubHkgb25lIHRhc2sgbmVlZHMgdG8gYmUgZGVmZXJyZWQg
c2luY2UgaXQgd2lsbCBob2xkIG9mZiBhbnkgb3RoZXJzIHVudGlsIGNvbXBsZXRlZC4KLSAgICAg
ICAgQVNTRVJUKCFtX2luaXRpYWxEZWZlcnJlZFRhc2spOwotICAgICAgICBtX2luaXRpYWxEZWZl
cnJlZFRhc2sgPSBXVEZNb3ZlKHRhc2spOwotICAgIH0gZWxzZQotICAgICAgICBjYWxsT25NYWlu
VGhyZWFkKFdURk1vdmUodGFzaykpOwotfQotCi12b2lkIE1lZGlhRW5kcG9pbnRQZWVyQ29ubmVj
dGlvbjo6c3RhcnRSdW5uaW5nVGFza3MoKQotewotICAgIGlmICghbV9pbml0aWFsRGVmZXJyZWRU
YXNrKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2luaXRpYWxEZWZlcnJlZFRhc2soKTsKLSAg
ICBtX2luaXRpYWxEZWZlcnJlZFRhc2sgPSBudWxscHRyOwotfQotCi12b2lkIE1lZGlhRW5kcG9p
bnRQZWVyQ29ubmVjdGlvbjo6ZG9DcmVhdGVPZmZlcihSVENPZmZlck9wdGlvbnMmJiBvcHRpb25z
KQotewotICAgIHJ1blRhc2soW3RoaXMsIHByb3RlY3RlZE9wdGlvbnMgPSBXVEZNb3ZlKG9wdGlv
bnMpXSgpIG11dGFibGUgewotICAgICAgICBjcmVhdGVPZmZlclRhc2socHJvdGVjdGVkT3B0aW9u
cyk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgTWVkaWFFbmRwb2ludFBlZXJDb25uZWN0aW9uOjpjcmVh
dGVPZmZlclRhc2soY29uc3QgUlRDT2ZmZXJPcHRpb25zJikKLXsKLSAgICBBU1NFUlQoIW1fZHRs
c0ZpbmdlcnByaW50LmlzRW1wdHkoKSk7Ci0KLSAgICBNZWRpYUVuZHBvaW50U2Vzc2lvbkRlc2Ny
aXB0aW9uKiBsb2NhbERlc2NyaXB0aW9uID0gaW50ZXJuYWxMb2NhbERlc2NyaXB0aW9uKCk7Ci0g
ICAgUmVmUHRyPE1lZGlhRW5kcG9pbnRTZXNzaW9uQ29uZmlndXJhdGlvbj4gY29uZmlndXJhdGlv
blNuYXBzaG90ID0gbG9jYWxEZXNjcmlwdGlvbiA/Ci0gICAgICAgIGxvY2FsRGVzY3JpcHRpb24t
PmNvbmZpZ3VyYXRpb24oKS0+Y2xvbmUoKSA6IE1lZGlhRW5kcG9pbnRTZXNzaW9uQ29uZmlndXJh
dGlvbjo6Y3JlYXRlKCk7Ci0KLSAgICBjb25maWd1cmF0aW9uU25hcHNob3QtPnNldEJ1bmRsZVBv
bGljeShtX3BlZXJDb25uZWN0aW9uLmdldENvbmZpZ3VyYXRpb24oKS5idW5kbGVQb2xpY3kpOwot
ICAgIGNvbmZpZ3VyYXRpb25TbmFwc2hvdC0+c2V0U2Vzc2lvblZlcnNpb24obV9zZHBPZmZlclNl
c3Npb25WZXJzaW9uKyspOwotCi0gICAgYXV0byB0cmFuc2NlaXZlcnMgPSBSdHBUcmFuc2NlaXZl
clZlY3RvcihtX3BlZXJDb25uZWN0aW9uLmdldFRyYW5zY2VpdmVycygpKTsKLQotICAgIC8vIFJl
bW92ZSBhbnkgdHJhbnNjZWl2ZXIgb2JqZWN0cyBmcm9tIHRyYW5zY2VpdmVycyB0aGF0IGNhbiBi
ZSBtYXRjaGVkIHRvIGFuIGV4aXN0aW5nIG1lZGlhIGRlc2NyaXB0aW9uLgotICAgIGZvciAoYXV0
byYgbWVkaWFEZXNjcmlwdGlvbiA6IGNvbmZpZ3VyYXRpb25TbmFwc2hvdC0+bWVkaWFEZXNjcmlw
dGlvbnMoKSkgewotICAgICAgICBpZiAoIW1lZGlhRGVzY3JpcHRpb24ucG9ydCkgewotICAgICAg
ICAgICAgLy8gVGhpcyBtZWRpYSBkZXNjcmlwdGlvbiBzaG91bGQgYmUgcmVjeWNsZWQuCi0gICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIFJUQ1J0cFRyYW5zY2VpdmVy
KiB0cmFuc2NlaXZlciA9IG1hdGNoVHJhbnNjZWl2ZXJCeU1pZCh0cmFuc2NlaXZlcnMsIG1lZGlh
RGVzY3JpcHRpb24ubWlkKTsKLSAgICAgICAgaWYgKCF0cmFuc2NlaXZlcikKLSAgICAgICAgICAg
IGNvbnRpbnVlOwotCi0gICAgICAgIG1lZGlhRGVzY3JpcHRpb24ubW9kZSA9IHRyYW5zY2VpdmVy
LT5kaXJlY3Rpb25TdHJpbmcoKTsKLSAgICAgICAgaWYgKHRyYW5zY2VpdmVyLT5oYXNTZW5kaW5n
RGlyZWN0aW9uKCkpIHsKLSAgICAgICAgICAgIGF1dG8mIHNlbmRlciA9IHRyYW5zY2VpdmVyLT5z
ZW5kZXIoKTsKLQotICAgICAgICAgICAgbWVkaWFEZXNjcmlwdGlvbi5tZWRpYVN0cmVhbUlkID0g
c2VuZGVyLm1lZGlhU3RyZWFtSWRzKClbMF07Ci0gICAgICAgICAgICBtZWRpYURlc2NyaXB0aW9u
Lm1lZGlhU3RyZWFtVHJhY2tJZCA9IHNlbmRlci50cmFja0lkKCk7Ci0gICAgICAgIH0KLQotICAg
ICAgICB0cmFuc2NlaXZlcnMucmVtb3ZlRmlyc3QodHJhbnNjZWl2ZXIpOwotICAgIH0KLQotICAg
IC8vIEFkZCBtZWRpYSBkZXNjcmlwdGlvbnMgZm9yIHJlbWFpbmluZyB0cmFuc2NlaXZlcnMuCi0g
ICAgZm9yIChhdXRvJiB0cmFuc2NlaXZlciA6IHRyYW5zY2VpdmVycykgewotICAgICAgICBQZWVy
TWVkaWFEZXNjcmlwdGlvbiBtZWRpYURlc2NyaXB0aW9uOwotICAgICAgICBhdXRvJiBzZW5kZXIg
PSB0cmFuc2NlaXZlci0+c2VuZGVyKCk7Ci0KLSAgICAgICAgbWVkaWFEZXNjcmlwdGlvbi5tb2Rl
ID0gdHJhbnNjZWl2ZXItPmRpcmVjdGlvblN0cmluZygpOwotICAgICAgICBtZWRpYURlc2NyaXB0
aW9uLm1pZCA9IHRyYW5zY2VpdmVyLT5wcm92aXNpb25hbE1pZCgpOwotICAgICAgICBtZWRpYURl
c2NyaXB0aW9uLm1lZGlhU3RyZWFtSWQgPSBzZW5kZXIubWVkaWFTdHJlYW1JZHMoKVswXTsKLSAg
ICAgICAgbWVkaWFEZXNjcmlwdGlvbi50eXBlID0gc2VuZGVyLnRyYWNrS2luZCgpOwotICAgICAg
ICBtZWRpYURlc2NyaXB0aW9uLnBheWxvYWRzID0gc2VuZGVyLnRyYWNrS2luZCgpID09ICJhdWRp
byIgPyBtX2RlZmF1bHRBdWRpb1BheWxvYWRzIDogbV9kZWZhdWx0VmlkZW9QYXlsb2FkczsKLSAg
ICAgICAgbWVkaWFEZXNjcmlwdGlvbi5kdGxzRmluZ2VycHJpbnRIYXNoRnVuY3Rpb24gPSBtX2R0
bHNGaW5nZXJwcmludEZ1bmN0aW9uOwotICAgICAgICBtZWRpYURlc2NyaXB0aW9uLmR0bHNGaW5n
ZXJwcmludCA9IG1fZHRsc0ZpbmdlcnByaW50OwotICAgICAgICBtZWRpYURlc2NyaXB0aW9uLmNu
YW1lID0gbV9jbmFtZTsKLSAgICAgICAgbWVkaWFEZXNjcmlwdGlvbi5hZGRTc3JjKGNyeXB0b2dy
YXBoaWNhbGx5UmFuZG9tTnVtYmVyKCkpOwotICAgICAgICBtZWRpYURlc2NyaXB0aW9uLmljZVVm
cmFnID0gbV9pY2VVZnJhZzsKLSAgICAgICAgbWVkaWFEZXNjcmlwdGlvbi5pY2VQYXNzd29yZCA9
IG1faWNlUGFzc3dvcmQ7Ci0KLSAgICAgICAgaWYgKHNlbmRlci50cmFjaygpKQotICAgICAgICAg
ICAgbWVkaWFEZXNjcmlwdGlvbi5tZWRpYVN0cmVhbVRyYWNrSWQgPSBzZW5kZXIudHJhY2tJZCgp
OwotCi0gICAgICAgIGNvbmZpZ3VyYXRpb25TbmFwc2hvdC0+YWRkTWVkaWFEZXNjcmlwdGlvbihX
VEZNb3ZlKG1lZGlhRGVzY3JpcHRpb24pKTsKLSAgICB9Ci0KLSAgICBTdHJpbmcgc2RwOwotICAg
IFNEUFByb2Nlc3Nvcjo6UmVzdWx0IHJlc3VsdCA9IG1fc2RwUHJvY2Vzc29yLT5nZW5lcmF0ZSgq
Y29uZmlndXJhdGlvblNuYXBzaG90LCBzZHApOwotICAgIGlmIChyZXN1bHQgIT0gU0RQUHJvY2Vz
c29yOjpSZXN1bHQ6OlN1Y2Nlc3MpIHsKLSAgICAgICAgY3JlYXRlT2ZmZXJGYWlsZWQoRXhjZXB0
aW9uIHsgT3BlcmF0aW9uRXJyb3IsICJTRFBQcm9jZXNzb3IgaW50ZXJuYWwgZXJyb3IiIH0pOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGNyZWF0ZU9mZmVyU3VjY2VlZGVkKFdURk1vdmUo
c2RwKSk7Ci19Ci0KLXZvaWQgTWVkaWFFbmRwb2ludFBlZXJDb25uZWN0aW9uOjpkb0NyZWF0ZUFu
c3dlcihSVENBbnN3ZXJPcHRpb25zJiYgb3B0aW9ucykKLXsKLSAgICBydW5UYXNrKFt0aGlzLCBw
cm90ZWN0ZWRPcHRpb25zID0gV1RGTW92ZShvcHRpb25zKV0oKSBtdXRhYmxlIHsKLSAgICAgICAg
Y3JlYXRlQW5zd2VyVGFzayhwcm90ZWN0ZWRPcHRpb25zKTsKLSAgICB9KTsKLX0KLQotdm9pZCBN
ZWRpYUVuZHBvaW50UGVlckNvbm5lY3Rpb246OmNyZWF0ZUFuc3dlclRhc2soY29uc3QgUlRDQW5z
d2VyT3B0aW9ucyYpCi17Ci0gICAgQVNTRVJUKCFtX2R0bHNGaW5nZXJwcmludC5pc0VtcHR5KCkp
OwotCi0gICAgaWYgKCFpbnRlcm5hbFJlbW90ZURlc2NyaXB0aW9uKCkpIHsKLSAgICAgICAgY3Jl
YXRlQW5zd2VyRmFpbGVkKEV4Y2VwdGlvbiB7IEludmFsaWRTdGF0ZUVycm9yLCAiTm8gcmVtb3Rl
IGRlc2NyaXB0aW9uIHNldCIgfSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBNZWRp
YUVuZHBvaW50U2Vzc2lvbkRlc2NyaXB0aW9uKiBsb2NhbERlc2NyaXB0aW9uID0gaW50ZXJuYWxM
b2NhbERlc2NyaXB0aW9uKCk7Ci0gICAgUmVmUHRyPE1lZGlhRW5kcG9pbnRTZXNzaW9uQ29uZmln
dXJhdGlvbj4gY29uZmlndXJhdGlvblNuYXBzaG90ID0gbG9jYWxEZXNjcmlwdGlvbiA/Ci0gICAg
ICAgIGxvY2FsRGVzY3JpcHRpb24tPmNvbmZpZ3VyYXRpb24oKS0+Y2xvbmUoKSA6IE1lZGlhRW5k
cG9pbnRTZXNzaW9uQ29uZmlndXJhdGlvbjo6Y3JlYXRlKCk7Ci0KLSAgICBjb25maWd1cmF0aW9u
U25hcHNob3QtPnNldEJ1bmRsZVBvbGljeShtX3BlZXJDb25uZWN0aW9uLmdldENvbmZpZ3VyYXRp
b24oKS5idW5kbGVQb2xpY3kpOwotICAgIGNvbmZpZ3VyYXRpb25TbmFwc2hvdC0+c2V0U2Vzc2lv
blZlcnNpb24obV9zZHBBbnN3ZXJTZXNzaW9uVmVyc2lvbisrKTsKLQotICAgIGF1dG8gdHJhbnNj
ZWl2ZXJzID0gUnRwVHJhbnNjZWl2ZXJWZWN0b3IobV9wZWVyQ29ubmVjdGlvbi5nZXRUcmFuc2Nl
aXZlcnMoKSk7Ci0gICAgYXV0byYgcmVtb3RlTWVkaWFEZXNjcmlwdGlvbnMgPSBpbnRlcm5hbFJl
bW90ZURlc2NyaXB0aW9uKCktPmNvbmZpZ3VyYXRpb24oKS0+bWVkaWFEZXNjcmlwdGlvbnMoKTsK
LQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCByZW1vdGVNZWRpYURlc2NyaXB0aW9ucy5z
aXplKCk7ICsraSkgewotICAgICAgICBhdXRvJiByZW1vdGVNZWRpYURlc2NyaXB0aW9uID0gcmVt
b3RlTWVkaWFEZXNjcmlwdGlvbnNbaV07Ci0KLSAgICAgICAgYXV0byogdHJhbnNjZWl2ZXIgPSBt
YXRjaFRyYW5zY2VpdmVyQnlNaWQodHJhbnNjZWl2ZXJzLCByZW1vdGVNZWRpYURlc2NyaXB0aW9u
Lm1pZCk7Ci0gICAgICAgIGlmICghdHJhbnNjZWl2ZXIpIHsKLSAgICAgICAgICAgIExPR19FUlJP
UigiQ291bGQgbm90IGZpbmQgYSBtYXRjaGluZyB0cmFuc2NlaXZlciBmb3IgcmVtb3RlIGRlc2Ny
aXB0aW9uIHdoaWxlIGNyZWF0aW5nIGFuc3dlciIpOwotICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgIH0KLQotICAgICAgICBpZiAoaSA+PSBjb25maWd1cmF0aW9uU25hcHNob3QtPm1lZGlh
RGVzY3JpcHRpb25zKCkuc2l6ZSgpKSB7Ci0gICAgICAgICAgICBQZWVyTWVkaWFEZXNjcmlwdGlv
biBuZXdNZWRpYURlc2NyaXB0aW9uOwotCi0gICAgICAgICAgICBhdXRvJiBzZW5kZXIgPSB0cmFu
c2NlaXZlci0+c2VuZGVyKCk7Ci0gICAgICAgICAgICBpZiAoc2VuZGVyLnRyYWNrKCkpIHsKLSAg
ICAgICAgICAgICAgICBpZiAoc2VuZGVyLm1lZGlhU3RyZWFtSWRzKCkuc2l6ZSgpKQotICAgICAg
ICAgICAgICAgICAgICBuZXdNZWRpYURlc2NyaXB0aW9uLm1lZGlhU3RyZWFtSWQgPSBzZW5kZXIu
bWVkaWFTdHJlYW1JZHMoKVswXTsKLSAgICAgICAgICAgICAgICBuZXdNZWRpYURlc2NyaXB0aW9u
Lm1lZGlhU3RyZWFtVHJhY2tJZCA9IHNlbmRlci50cmFja0lkKCk7Ci0gICAgICAgICAgICAgICAg
bmV3TWVkaWFEZXNjcmlwdGlvbi5hZGRTc3JjKGNyeXB0b2dyYXBoaWNhbGx5UmFuZG9tTnVtYmVy
KCkpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBuZXdNZWRpYURlc2NyaXB0aW9uLm1v
ZGUgPSB0cmFuc2NlaXZlci0+ZGlyZWN0aW9uU3RyaW5nKCk7Ci0gICAgICAgICAgICBuZXdNZWRp
YURlc2NyaXB0aW9uLnR5cGUgPSByZW1vdGVNZWRpYURlc2NyaXB0aW9uLnR5cGU7Ci0gICAgICAg
ICAgICBuZXdNZWRpYURlc2NyaXB0aW9uLm1pZCA9IHJlbW90ZU1lZGlhRGVzY3JpcHRpb24ubWlk
OwotICAgICAgICAgICAgbmV3TWVkaWFEZXNjcmlwdGlvbi5kdGxzU2V0dXAgPSByZW1vdGVNZWRp
YURlc2NyaXB0aW9uLmR0bHNTZXR1cCA9PSAiYWN0aXZlIiA/ICJwYXNzaXZlIiA6ICJhY3RpdmUi
OwotICAgICAgICAgICAgbmV3TWVkaWFEZXNjcmlwdGlvbi5kdGxzRmluZ2VycHJpbnRIYXNoRnVu
Y3Rpb24gPSBtX2R0bHNGaW5nZXJwcmludEZ1bmN0aW9uOwotICAgICAgICAgICAgbmV3TWVkaWFE
ZXNjcmlwdGlvbi5kdGxzRmluZ2VycHJpbnQgPSBtX2R0bHNGaW5nZXJwcmludDsKLSAgICAgICAg
ICAgIG5ld01lZGlhRGVzY3JpcHRpb24uY25hbWUgPSBtX2NuYW1lOwotICAgICAgICAgICAgbmV3
TWVkaWFEZXNjcmlwdGlvbi5pY2VVZnJhZyA9IG1faWNlVWZyYWc7Ci0gICAgICAgICAgICBuZXdN
ZWRpYURlc2NyaXB0aW9uLmljZVBhc3N3b3JkID0gbV9pY2VQYXNzd29yZDsKLQotICAgICAgICAg
ICAgY29uZmlndXJhdGlvblNuYXBzaG90LT5hZGRNZWRpYURlc2NyaXB0aW9uKFdURk1vdmUobmV3
TWVkaWFEZXNjcmlwdGlvbikpOwotICAgICAgICB9Ci0KLSAgICAgICAgUGVlck1lZGlhRGVzY3Jp
cHRpb24mIGxvY2FsTWVkaWFEZXNjcmlwdGlvbiA9IGNvbmZpZ3VyYXRpb25TbmFwc2hvdC0+bWVk
aWFEZXNjcmlwdGlvbnMoKVtpXTsKLQotICAgICAgICBsb2NhbE1lZGlhRGVzY3JpcHRpb24ucGF5
bG9hZHMgPSByZW1vdGVNZWRpYURlc2NyaXB0aW9uLnBheWxvYWRzOwotICAgICAgICBsb2NhbE1l
ZGlhRGVzY3JpcHRpb24ucnRjcE11eCA9IHJlbW90ZU1lZGlhRGVzY3JpcHRpb24ucnRjcE11eDsK
LQotICAgICAgICBpZiAoIWxvY2FsTWVkaWFEZXNjcmlwdGlvbi5zc3Jjcy5zaXplKCkpCi0gICAg
ICAgICAgICBsb2NhbE1lZGlhRGVzY3JpcHRpb24uYWRkU3NyYyhjcnlwdG9ncmFwaGljYWxseVJh
bmRvbU51bWJlcigpKTsKLQotICAgICAgICBpZiAobG9jYWxNZWRpYURlc2NyaXB0aW9uLmR0bHNT
ZXR1cCA9PSAiYWN0cGFzcyIpCi0gICAgICAgICAgICBsb2NhbE1lZGlhRGVzY3JpcHRpb24uZHRs
c1NldHVwID0gInBhc3NpdmUiOwotCi0gICAgICAgIHRyYW5zY2VpdmVycy5yZW1vdmVGaXJzdCh0
cmFuc2NlaXZlcik7Ci0gICAgfQotCi0gICAgLy8gVW5hc3NvY2lhdGVkIChub24tc3RvcHBlZCkg
dHJhbnNjZWl2ZXJzIG5lZWQgdG8gYmUgbmVnb3RpYXRlZCBpbiBhIGZvbGxvdy11cCBvZmZlci4K
LSAgICBpZiAoaGFzVW5hc3NvY2lhdGVkVHJhbnNjZWl2ZXJzKHRyYW5zY2VpdmVycykpCi0gICAg
ICAgIG1hcmtBc05lZWRpbmdOZWdvdGlhdGlvbigpOwotCi0gICAgU3RyaW5nIHNkcDsKLSAgICBT
RFBQcm9jZXNzb3I6OlJlc3VsdCByZXN1bHQgPSBtX3NkcFByb2Nlc3Nvci0+Z2VuZXJhdGUoKmNv
bmZpZ3VyYXRpb25TbmFwc2hvdCwgc2RwKTsKLSAgICBpZiAocmVzdWx0ICE9IFNEUFByb2Nlc3Nv
cjo6UmVzdWx0OjpTdWNjZXNzKSB7Ci0gICAgICAgIGNyZWF0ZUFuc3dlckZhaWxlZChFeGNlcHRp
b24geyBPcGVyYXRpb25FcnJvciwgIlNEUFByb2Nlc3NvciBpbnRlcm5hbCBlcnJvciIgfSk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgY3JlYXRlQW5zd2VyU3VjY2VlZGVkKFdURk1vdmUo
c2RwKSk7Ci19Ci0KLXN0YXRpYyBSZWFsdGltZU1lZGlhU291cmNlTWFwIGNyZWF0ZVNvdXJjZU1h
cChjb25zdCBNZWRpYURlc2NyaXB0aW9uVmVjdG9yJiByZW1vdGVNZWRpYURlc2NyaXB0aW9ucywg
dW5zaWduZWQgbG9jYWxNZWRpYURlc2NyaXB0aW9uQ291bnQsIGNvbnN0IFJ0cFRyYW5zY2VpdmVy
VmVjdG9yJiB0cmFuc2NlaXZlcnMpCi17Ci0gICAgUmVhbHRpbWVNZWRpYVNvdXJjZU1hcCBzb3Vy
Y2VNYXA7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcmVtb3RlTWVkaWFEZXNjcmlw
dGlvbnMuc2l6ZSgpICYmIGkgPCBsb2NhbE1lZGlhRGVzY3JpcHRpb25Db3VudDsgKytpKSB7Ci0g
ICAgICAgIGF1dG8mIHJlbW90ZU1lZGlhRGVzY3JpcHRpb24gPSByZW1vdGVNZWRpYURlc2NyaXB0
aW9uc1tpXTsKLSAgICAgICAgaWYgKHJlbW90ZU1lZGlhRGVzY3JpcHRpb24udHlwZSAhPSAiYXVk
aW8iICYmIHJlbW90ZU1lZGlhRGVzY3JpcHRpb24udHlwZSAhPSAidmlkZW8iKQotICAgICAgICAg
ICAgY29udGludWU7Ci0KLSAgICAgICAgUlRDUnRwVHJhbnNjZWl2ZXIqIHRyYW5zY2VpdmVyID0g
bWF0Y2hUcmFuc2NlaXZlckJ5TWlkKHRyYW5zY2VpdmVycywgcmVtb3RlTWVkaWFEZXNjcmlwdGlv
bi5taWQpOwotICAgICAgICBpZiAodHJhbnNjZWl2ZXIpIHsKLSAgICAgICAgICAgIGlmICh0cmFu
c2NlaXZlci0+aGFzU2VuZGluZ0RpcmVjdGlvbigpICYmIHRyYW5zY2VpdmVyLT5zZW5kZXIoKS50
cmFjaygpKQotICAgICAgICAgICAgICAgIHNvdXJjZU1hcC5zZXQodHJhbnNjZWl2ZXItPm1pZCgp
LCAmdHJhbnNjZWl2ZXItPnNlbmRlcigpLnRyYWNrKCktPnNvdXJjZSgpKTsKLSAgICAgICAgfQot
ICAgIH0KLQotICAgIHJldHVybiBzb3VyY2VNYXA7Ci19Ci0KLXZvaWQgTWVkaWFFbmRwb2ludFBl
ZXJDb25uZWN0aW9uOjpkb1NldExvY2FsRGVzY3JpcHRpb24oUlRDU2Vzc2lvbkRlc2NyaXB0aW9u
JiBkZXNjcmlwdGlvbikKLXsKLSAgICBydW5UYXNrKFt0aGlzLCBwcm90ZWN0ZWREZXNjcmlwdGlv
biA9IFJlZlB0cjxSVENTZXNzaW9uRGVzY3JpcHRpb24+KCZkZXNjcmlwdGlvbildKCkgbXV0YWJs
ZSB7Ci0gICAgICAgIHNldExvY2FsRGVzY3JpcHRpb25UYXNrKFdURk1vdmUocHJvdGVjdGVkRGVz
Y3JpcHRpb24pKTsKLSAgICB9KTsKLX0KLQotdm9pZCBNZWRpYUVuZHBvaW50UGVlckNvbm5lY3Rp
b246OnNldExvY2FsRGVzY3JpcHRpb25UYXNrKFJlZlB0cjxSVENTZXNzaW9uRGVzY3JpcHRpb24+
JiYgZGVzY3JpcHRpb24pCi17Ci0gICAgaWYgKG1fcGVlckNvbm5lY3Rpb24uaXNDbG9zZWQoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byByZXN1bHQgPSBNZWRpYUVuZHBvaW50U2Vzc2lv
bkRlc2NyaXB0aW9uOjpjcmVhdGUoV1RGTW92ZShkZXNjcmlwdGlvbiksICptX3NkcFByb2Nlc3Nv
cik7Ci0gICAgaWYgKHJlc3VsdC5oYXNFeGNlcHRpb24oKSkgewotICAgICAgICBzZXRMb2NhbERl
c2NyaXB0aW9uRmFpbGVkKHJlc3VsdC5yZWxlYXNlRXhjZXB0aW9uKCkpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotICAgIGF1dG8gbmV3RGVzY3JpcHRpb24gPSByZXN1bHQucmVsZWFzZVJldHVy
blZhbHVlKCk7Ci0KLSAgICBjb25zdCBSdHBUcmFuc2NlaXZlclZlY3RvciYgdHJhbnNjZWl2ZXJz
ID0gbV9wZWVyQ29ubmVjdGlvbi5nZXRUcmFuc2NlaXZlcnMoKTsKLSAgICBjb25zdCBNZWRpYURl
c2NyaXB0aW9uVmVjdG9yJiBtZWRpYURlc2NyaXB0aW9ucyA9IG5ld0Rlc2NyaXB0aW9uLT5jb25m
aWd1cmF0aW9uKCktPm1lZGlhRGVzY3JpcHRpb25zKCk7Ci0gICAgTWVkaWFFbmRwb2ludFNlc3Np
b25EZXNjcmlwdGlvbiogbG9jYWxEZXNjcmlwdGlvbiA9IGludGVybmFsTG9jYWxEZXNjcmlwdGlv
bigpOwotICAgIHVuc2lnbmVkIHByZXZpb3VzTnVtYmVyT2ZNZWRpYURlc2NyaXB0aW9ucyA9IGxv
Y2FsRGVzY3JpcHRpb24gPyBsb2NhbERlc2NyaXB0aW9uLT5jb25maWd1cmF0aW9uKCktPm1lZGlh
RGVzY3JpcHRpb25zKCkuc2l6ZSgpIDogMDsKLSAgICBib29sIGhhc05ld01lZGlhRGVzY3JpcHRp
b25zID0gbWVkaWFEZXNjcmlwdGlvbnMuc2l6ZSgpID4gcHJldmlvdXNOdW1iZXJPZk1lZGlhRGVz
Y3JpcHRpb25zOwotICAgIGJvb2wgaXNJbml0aWF0b3IgPSBuZXdEZXNjcmlwdGlvbi0+dHlwZSgp
ID09IFJUQ1NkcFR5cGU6Ok9mZmVyOwotCi0gICAgaWYgKGhhc05ld01lZGlhRGVzY3JpcHRpb25z
KSB7Ci0gICAgICAgIE1lZGlhRW5kcG9pbnQ6OlVwZGF0ZVJlc3VsdCByZXN1bHQgPSBtX21lZGlh
RW5kcG9pbnQtPnVwZGF0ZVJlY2VpdmVDb25maWd1cmF0aW9uKG5ld0Rlc2NyaXB0aW9uLT5jb25m
aWd1cmF0aW9uKCksIGlzSW5pdGlhdG9yKTsKLQotICAgICAgICBpZiAocmVzdWx0ID09IE1lZGlh
RW5kcG9pbnQ6OlVwZGF0ZVJlc3VsdDo6U3VjY2Vzc1dpdGhJY2VSZXN0YXJ0KSB7Ci0gICAgICAg
ICAgICBpZiAobV9wZWVyQ29ubmVjdGlvbi5pY2VHYXRoZXJpbmdTdGF0ZSgpICE9IFJUQ0ljZUdh
dGhlcmluZ1N0YXRlOjpHYXRoZXJpbmcpCi0gICAgICAgICAgICAgICAgbV9wZWVyQ29ubmVjdGlv
bi51cGRhdGVJY2VHYXRoZXJpbmdTdGF0ZShSVENJY2VHYXRoZXJpbmdTdGF0ZTo6R2F0aGVyaW5n
KTsKLQotICAgICAgICAgICAgaWYgKG1fcGVlckNvbm5lY3Rpb24uaWNlQ29ubmVjdGlvblN0YXRl
KCkgIT0gUlRDSWNlQ29ubmVjdGlvblN0YXRlOjpDb21wbGV0ZWQpCi0gICAgICAgICAgICAgICAg
bV9wZWVyQ29ubmVjdGlvbi51cGRhdGVJY2VDb25uZWN0aW9uU3RhdGUoUlRDSWNlQ29ubmVjdGlv
blN0YXRlOjpDb25uZWN0ZWQpOwotCi0gICAgICAgICAgICBMT0dfRVJST1IoIklDRSByZXN0YXJ0
IGlzIG5vdCBpbXBsZW1lbnRlZCIpOwotICAgICAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKLQot
ICAgICAgICB9IGVsc2UgaWYgKHJlc3VsdCA9PSBNZWRpYUVuZHBvaW50OjpVcGRhdGVSZXN1bHQ6
OkZhaWxlZCkgewotICAgICAgICAgICAgc2V0TG9jYWxEZXNjcmlwdGlvbkZhaWxlZChFeGNlcHRp
b24geyBPcGVyYXRpb25FcnJvciwgIlVuYWJsZSB0byBhcHBseSBzZXNzaW9uIGRlc2NyaXB0aW9u
IiB9KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIEFzc29j
aWF0ZSBtZWRpYSBkZXNjcmlwdGlvbnMgd2l0aCB0cmFuc2NlaXZlcnMgKHNldCBwcm92aXNpb25h
bCBtaWQgdG8gJ2ZpbmFsJyBtaWQpLgotICAgICAgICBmb3IgKGF1dG8mIG1lZGlhRGVzY3JpcHRp
b24gOiBtZWRpYURlc2NyaXB0aW9ucykgewotICAgICAgICAgICAgUlRDUnRwVHJhbnNjZWl2ZXIq
IHRyYW5zY2VpdmVyID0gbWF0Y2hUcmFuc2NlaXZlcih0cmFuc2NlaXZlcnMsIFsmbWVkaWFEZXNj
cmlwdGlvbl0gKFJUQ1J0cFRyYW5zY2VpdmVyJiBjdXJyZW50KSB7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIGN1cnJlbnQucHJvdmlzaW9uYWxNaWQoKSA9PSBtZWRpYURlc2NyaXB0aW9uLm1pZDsK
LSAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgaWYgKHRyYW5zY2VpdmVyKQotICAgICAgICAg
ICAgICAgIHRyYW5zY2VpdmVyLT5zZXRNaWQodHJhbnNjZWl2ZXItPnByb3Zpc2lvbmFsTWlkKCkp
OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGludGVybmFsUmVtb3RlRGVzY3JpcHRpb24o
KSkgewotICAgICAgICBNZWRpYUVuZHBvaW50U2Vzc2lvbkNvbmZpZ3VyYXRpb24qIHJlbW90ZUNv
bmZpZ3VyYXRpb24gPSBpbnRlcm5hbFJlbW90ZURlc2NyaXB0aW9uKCktPmNvbmZpZ3VyYXRpb24o
KTsKLSAgICAgICAgUmVhbHRpbWVNZWRpYVNvdXJjZU1hcCBzZW5kU291cmNlTWFwID0gY3JlYXRl
U291cmNlTWFwKHJlbW90ZUNvbmZpZ3VyYXRpb24tPm1lZGlhRGVzY3JpcHRpb25zKCksIG1lZGlh
RGVzY3JpcHRpb25zLnNpemUoKSwgdHJhbnNjZWl2ZXJzKTsKLQotICAgICAgICBpZiAobV9tZWRp
YUVuZHBvaW50LT51cGRhdGVTZW5kQ29uZmlndXJhdGlvbihyZW1vdGVDb25maWd1cmF0aW9uLCBz
ZW5kU291cmNlTWFwLCBpc0luaXRpYXRvcikgPT0gTWVkaWFFbmRwb2ludDo6VXBkYXRlUmVzdWx0
OjpGYWlsZWQpIHsKLSAgICAgICAgICAgIHNldExvY2FsRGVzY3JpcHRpb25GYWlsZWQoRXhjZXB0
aW9uIHsgT3BlcmF0aW9uRXJyb3IsICJVbmFibGUgdG8gYXBwbHkgc2Vzc2lvbiBkZXNjcmlwdGlv
biIgfSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAo
IWhhc1VuYXNzb2NpYXRlZFRyYW5zY2VpdmVycyh0cmFuc2NlaXZlcnMpKQotICAgICAgICBjbGVh
ck5lZ290aWF0aW9uTmVlZGVkU3RhdGUoKTsKLQotICAgIFJUQ1NpZ25hbGluZ1N0YXRlIG5ld1Np
Z25hbGluZ1N0YXRlOwotCi0gICAgLy8gVXBkYXRlIHN0YXRlIGFuZCBsb2NhbCBkZXNjcmlwdGlv
bnMgYWNjb3JkaW5nIHRvIHNldExvY2FsL1JlbW90ZURlc2NyaXB0aW9uIHByb2Nlc3NpbmcgbW9k
ZWwKLSAgICBzd2l0Y2ggKG5ld0Rlc2NyaXB0aW9uLT50eXBlKCkpIHsKLSAgICBjYXNlIFJUQ1Nk
cFR5cGU6Ok9mZmVyOgotICAgICAgICBtX3BlbmRpbmdMb2NhbERlc2NyaXB0aW9uID0gV1RGTW92
ZShuZXdEZXNjcmlwdGlvbik7Ci0gICAgICAgIG5ld1NpZ25hbGluZ1N0YXRlID0gUlRDU2lnbmFs
aW5nU3RhdGU6OkhhdmVMb2NhbE9mZmVyOwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgUlRD
U2RwVHlwZTo6QW5zd2VyOgotICAgICAgICBtX2N1cnJlbnRMb2NhbERlc2NyaXB0aW9uID0gV1RG
TW92ZShuZXdEZXNjcmlwdGlvbik7Ci0gICAgICAgIG1fY3VycmVudFJlbW90ZURlc2NyaXB0aW9u
ID0gbV9wZW5kaW5nUmVtb3RlRGVzY3JpcHRpb247Ci0gICAgICAgIG1fcGVuZGluZ0xvY2FsRGVz
Y3JpcHRpb24gPSBudWxscHRyOwotICAgICAgICBtX3BlbmRpbmdSZW1vdGVEZXNjcmlwdGlvbiA9
IG51bGxwdHI7Ci0gICAgICAgIG5ld1NpZ25hbGluZ1N0YXRlID0gUlRDU2lnbmFsaW5nU3RhdGU6
OlN0YWJsZTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIFJUQ1NkcFR5cGU6OlJvbGxiYWNr
OgotICAgICAgICBtX3BlbmRpbmdMb2NhbERlc2NyaXB0aW9uID0gbnVsbHB0cjsKLSAgICAgICAg
bmV3U2lnbmFsaW5nU3RhdGUgPSBSVENTaWduYWxpbmdTdGF0ZTo6U3RhYmxlOwotICAgICAgICBi
cmVhazsKLQotICAgIGNhc2UgUlRDU2RwVHlwZTo6UHJhbnN3ZXI6Ci0gICAgICAgIG1fcGVuZGlu
Z0xvY2FsRGVzY3JpcHRpb24gPSBXVEZNb3ZlKG5ld0Rlc2NyaXB0aW9uKTsKLSAgICAgICAgbmV3
U2lnbmFsaW5nU3RhdGUgPSBSVENTaWduYWxpbmdTdGF0ZTo6SGF2ZUxvY2FsUHJhbnN3ZXI7Ci0g
ICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIHVwZGF0ZVNpZ25hbGluZ1N0YXRlKG5ld1NpZ25h
bGluZ1N0YXRlKTsKLQotICAgIGlmIChtX3BlZXJDb25uZWN0aW9uLmljZUdhdGhlcmluZ1N0YXRl
KCkgPT0gUlRDSWNlR2F0aGVyaW5nU3RhdGU6Ok5ldyAmJiBtZWRpYURlc2NyaXB0aW9ucy5zaXpl
KCkpCi0gICAgICAgIG1fcGVlckNvbm5lY3Rpb24udXBkYXRlSWNlR2F0aGVyaW5nU3RhdGUoUlRD
SWNlR2F0aGVyaW5nU3RhdGU6OkdhdGhlcmluZyk7Ci0KLSAgICBtYXJrQXNOZWVkaW5nTmVnb3Rp
YXRpb24oKTsKLSAgICBzZXRMb2NhbERlc2NyaXB0aW9uU3VjY2VlZGVkKCk7Ci19Ci0KLVJlZlB0
cjxSVENTZXNzaW9uRGVzY3JpcHRpb24+IE1lZGlhRW5kcG9pbnRQZWVyQ29ubmVjdGlvbjo6bG9j
YWxEZXNjcmlwdGlvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGNyZWF0ZVJUQ1Nlc3Npb25EZXNj
cmlwdGlvbihpbnRlcm5hbExvY2FsRGVzY3JpcHRpb24oKSk7Ci19Ci0KLVJlZlB0cjxSVENTZXNz
aW9uRGVzY3JpcHRpb24+IE1lZGlhRW5kcG9pbnRQZWVyQ29ubmVjdGlvbjo6Y3VycmVudExvY2Fs
RGVzY3JpcHRpb24oKSBjb25zdAotewotICAgIHJldHVybiBjcmVhdGVSVENTZXNzaW9uRGVzY3Jp
cHRpb24obV9jdXJyZW50TG9jYWxEZXNjcmlwdGlvbi5nZXQoKSk7Ci19Ci0KLVJlZlB0cjxSVENT
ZXNzaW9uRGVzY3JpcHRpb24+IE1lZGlhRW5kcG9pbnRQZWVyQ29ubmVjdGlvbjo6cGVuZGluZ0xv
Y2FsRGVzY3JpcHRpb24oKSBjb25zdAotewotICAgIHJldHVybiBjcmVhdGVSVENTZXNzaW9uRGVz
Y3JpcHRpb24obV9wZW5kaW5nTG9jYWxEZXNjcmlwdGlvbi5nZXQoKSk7Ci19Ci0KLXZvaWQgTWVk
aWFFbmRwb2ludFBlZXJDb25uZWN0aW9uOjpkb1NldFJlbW90ZURlc2NyaXB0aW9uKFJUQ1Nlc3Np
b25EZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24pCi17Ci0gICAgcnVuVGFzayhbdGhpcywgcHJvdGVj
dGVkRGVzY3JpcHRpb24gPSBSZWZQdHI8UlRDU2Vzc2lvbkRlc2NyaXB0aW9uPigmZGVzY3JpcHRp
b24pXSgpIG11dGFibGUgewotICAgICAgICBzZXRSZW1vdGVEZXNjcmlwdGlvblRhc2soV1RGTW92
ZShwcm90ZWN0ZWREZXNjcmlwdGlvbikpOwotICAgIH0pOwotfQotCi12b2lkIE1lZGlhRW5kcG9p
bnRQZWVyQ29ubmVjdGlvbjo6c2V0UmVtb3RlRGVzY3JpcHRpb25UYXNrKFJlZlB0cjxSVENTZXNz
aW9uRGVzY3JpcHRpb24+JiYgZGVzY3JpcHRpb24pCi17Ci0gICAgYXV0byByZXN1bHQgPSBNZWRp
YUVuZHBvaW50U2Vzc2lvbkRlc2NyaXB0aW9uOjpjcmVhdGUoV1RGTW92ZShkZXNjcmlwdGlvbiks
ICptX3NkcFByb2Nlc3Nvcik7Ci0gICAgaWYgKHJlc3VsdC5oYXNFeGNlcHRpb24oKSkgewotICAg
ICAgICBzZXRSZW1vdGVEZXNjcmlwdGlvbkZhaWxlZChyZXN1bHQucmVsZWFzZUV4Y2VwdGlvbigp
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBhdXRvIG5ld0Rlc2NyaXB0aW9uID0gcmVz
dWx0LnJlbGVhc2VSZXR1cm5WYWx1ZSgpOwotCi0gICAgYXV0byYgbWVkaWFEZXNjcmlwdGlvbnMg
PSBuZXdEZXNjcmlwdGlvbi0+Y29uZmlndXJhdGlvbigpLT5tZWRpYURlc2NyaXB0aW9ucygpOwot
ICAgIGZvciAoYXV0byYgbWVkaWFEZXNjcmlwdGlvbiA6IG1lZGlhRGVzY3JpcHRpb25zKSB7Ci0g
ICAgICAgIGlmIChtZWRpYURlc2NyaXB0aW9uLnR5cGUgIT0gImF1ZGlvIiAmJiBtZWRpYURlc2Ny
aXB0aW9uLnR5cGUgIT0gInZpZGVvIikKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAg
IG1lZGlhRGVzY3JpcHRpb24ucGF5bG9hZHMgPSBtX21lZGlhRW5kcG9pbnQtPmZpbHRlclBheWxv
YWRzKG1lZGlhRGVzY3JpcHRpb24ucGF5bG9hZHMsIG1lZGlhRGVzY3JpcHRpb24udHlwZSA9PSAi
YXVkaW8iID8gbV9kZWZhdWx0QXVkaW9QYXlsb2FkcyA6IG1fZGVmYXVsdFZpZGVvUGF5bG9hZHMp
OwotICAgIH0KLQotICAgIGJvb2wgaXNJbml0aWF0b3IgPSBuZXdEZXNjcmlwdGlvbi0+dHlwZSgp
ID09IFJUQ1NkcFR5cGU6OkFuc3dlcjsKLSAgICBjb25zdCBSdHBUcmFuc2NlaXZlclZlY3RvciYg
dHJhbnNjZWl2ZXJzID0gbV9wZWVyQ29ubmVjdGlvbi5nZXRUcmFuc2NlaXZlcnMoKTsKLQotICAg
IFJlYWx0aW1lTWVkaWFTb3VyY2VNYXAgc2VuZFNvdXJjZU1hcDsKLSAgICBpZiAoaW50ZXJuYWxM
b2NhbERlc2NyaXB0aW9uKCkpCi0gICAgICAgIHNlbmRTb3VyY2VNYXAgPSBjcmVhdGVTb3VyY2VN
YXAobWVkaWFEZXNjcmlwdGlvbnMsIGludGVybmFsTG9jYWxEZXNjcmlwdGlvbigpLT5jb25maWd1
cmF0aW9uKCktPm1lZGlhRGVzY3JpcHRpb25zKCkuc2l6ZSgpLCB0cmFuc2NlaXZlcnMpOwotCi0g
ICAgaWYgKG1fbWVkaWFFbmRwb2ludC0+dXBkYXRlU2VuZENvbmZpZ3VyYXRpb24obmV3RGVzY3Jp
cHRpb24tPmNvbmZpZ3VyYXRpb24oKSwgc2VuZFNvdXJjZU1hcCwgaXNJbml0aWF0b3IpID09IE1l
ZGlhRW5kcG9pbnQ6OlVwZGF0ZVJlc3VsdDo6RmFpbGVkKSB7Ci0gICAgICAgIHNldFJlbW90ZURl
c2NyaXB0aW9uRmFpbGVkKEV4Y2VwdGlvbiB7IE9wZXJhdGlvbkVycm9yLCAiVW5hYmxlIHRvIGFw
cGx5IHNlc3Npb24gZGVzY3JpcHRpb24iIH0pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgLy8gT25lIGxlZ2FjeSBNZWRpYVN0cmVhbUV2ZW50IHdpbGwgYmUgZmlyZWQgZm9yIGV2ZXJ5
IG5ldyBNZWRpYVN0cmVhbSBjcmVhdGVkIGFzIHRoaXMgcmVtb3RlIGRlc2NyaXB0aW9uIGlzIHNl
dC4KLSAgICBWZWN0b3I8UmVmUHRyPE1lZGlhU3RyZWFtRXZlbnQ+PiBsZWdhY3lNZWRpYVN0cmVh
bUV2ZW50czsKLQotICAgIGZvciAoYXV0byYgbWVkaWFEZXNjcmlwdGlvbiA6IG1lZGlhRGVzY3Jp
cHRpb25zKSB7Ci0gICAgICAgIFJUQ1J0cFRyYW5zY2VpdmVyKiB0cmFuc2NlaXZlciA9IG1hdGNo
VHJhbnNjZWl2ZXJCeU1pZCh0cmFuc2NlaXZlcnMsIG1lZGlhRGVzY3JpcHRpb24ubWlkKTsKLSAg
ICAgICAgaWYgKCF0cmFuc2NlaXZlcikgewotICAgICAgICAgICAgYm9vbCByZWNlaXZlT25seUZs
YWcgPSBmYWxzZTsKLQotICAgICAgICAgICAgaWYgKG1lZGlhRGVzY3JpcHRpb24ubW9kZSA9PSAi
c2VuZHJlY3YiIHx8IG1lZGlhRGVzY3JpcHRpb24ubW9kZSA9PSAicmVjdm9ubHkiKSB7Ci0gICAg
ICAgICAgICAgICAgLy8gVHJ5IHRvIG1hdGNoIGFuIGV4aXN0aW5nIHRyYW5zY2VpdmVyLgotICAg
ICAgICAgICAgICAgIHRyYW5zY2VpdmVyID0gbWF0Y2hUcmFuc2NlaXZlcih0cmFuc2NlaXZlcnMs
IFsmbWVkaWFEZXNjcmlwdGlvbl0gKFJUQ1J0cFRyYW5zY2VpdmVyJiBjdXJyZW50KSB7Ci0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiAhY3VycmVudC5zdG9wcGVkKCkgJiYgY3VycmVudC5taWQo
KS5pc051bGwoKSAmJiBjdXJyZW50LnNlbmRlcigpLnRyYWNrS2luZCgpID09IG1lZGlhRGVzY3Jp
cHRpb24udHlwZTsKLSAgICAgICAgICAgICAgICB9KTsKLQotICAgICAgICAgICAgICAgIGlmICh0
cmFuc2NlaXZlcikgewotICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIHRyYW5zY2VpdmVyIHdh
cyBjcmVhdGVkIGxvY2FsbHkgd2l0aCBhIHByb3Zpc2lvbmFsIG1pZC4gSXRzIHJlYWwgbWlkIHdp
bGwgbm93IGJlIHNldCBieSB0aGUgcmVtb3RlCi0gICAgICAgICAgICAgICAgICAgIC8vIGRlc2Ny
aXB0aW9uIHNvIHdlIG5lZWQgdG8gdXBkYXRlIHRoZSBtaWQgb2YgdGhlIHRyYW5zY2VpdmVyJ3Mg
bXV0ZWQgc291cmNlIHRvIHByZXNlcnZlIHRoZSBhc3NvY2lhdGlvbi4KLSAgICAgICAgICAgICAg
ICAgICAgdHJhbnNjZWl2ZXItPnNldE1pZChtZWRpYURlc2NyaXB0aW9uLm1pZCk7Ci0gICAgICAg
ICAgICAgICAgICAgIG1fbWVkaWFFbmRwb2ludC0+cmVwbGFjZU11dGVkUmVtb3RlU291cmNlTWlk
KHRyYW5zY2VpdmVyLT5wcm92aXNpb25hbE1pZCgpLCBtZWRpYURlc2NyaXB0aW9uLm1pZCk7Ci0g
ICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHJlY2VpdmVPbmx5Rmxh
ZyA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICghdHJhbnNjZWl2ZXIp
IHsKLSAgICAgICAgICAgICAgICBhdXRvIHNlbmRlciA9IFJUQ1J0cFNlbmRlcjo6Y3JlYXRlKFN0
cmluZyhtZWRpYURlc2NyaXB0aW9uLnR5cGUpLCBWZWN0b3I8U3RyaW5nPigpLCBtX3BlZXJDb25u
ZWN0aW9uLnNlbmRlckJhY2tlbmQoKSk7Ci0gICAgICAgICAgICAgICAgYXV0byByZWNlaXZlciA9
IGNyZWF0ZVJlY2VpdmVyKG1lZGlhRGVzY3JpcHRpb24ubWlkLCBtZWRpYURlc2NyaXB0aW9uLnR5
cGUsIG1lZGlhRGVzY3JpcHRpb24ubWVkaWFTdHJlYW1UcmFja0lkKTsKLQotICAgICAgICAgICAg
ICAgIGF1dG8gbmV3VHJhbnNjZWl2ZXIgPSBSVENSdHBUcmFuc2NlaXZlcjo6Y3JlYXRlKFdURk1v
dmUoc2VuZGVyKSwgV1RGTW92ZShyZWNlaXZlcikpOwotICAgICAgICAgICAgICAgIG5ld1RyYW5z
Y2VpdmVyLT5zZXRNaWQobWVkaWFEZXNjcmlwdGlvbi5taWQpOwotICAgICAgICAgICAgICAgIGlm
IChyZWNlaXZlT25seUZsYWcpCi0gICAgICAgICAgICAgICAgICAgIG5ld1RyYW5zY2VpdmVyLT5k
aXNhYmxlU2VuZGluZ0RpcmVjdGlvbigpOwotCi0gICAgICAgICAgICAgICAgdHJhbnNjZWl2ZXIg
PSBuZXdUcmFuc2NlaXZlci5wdHIoKTsKLSAgICAgICAgICAgICAgICBtX3BlZXJDb25uZWN0aW9u
LmFkZFRyYW5zY2VpdmVyKFdURk1vdmUobmV3VHJhbnNjZWl2ZXIpKTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotCi0gICAgICAgIGlmIChtZWRpYURlc2NyaXB0aW9uLm1vZGUgPT0gInNlbmRy
ZWN2IiB8fCBtZWRpYURlc2NyaXB0aW9uLm1vZGUgPT0gInNlbmRvbmx5IikgewotICAgICAgICAg
ICAgYXV0byYgcmVjZWl2ZXIgPSB0cmFuc2NlaXZlci0+cmVjZWl2ZXIoKTsKLSAgICAgICAgICAg
IGlmIChyZWNlaXZlci5pc0Rpc3BhdGNoZWQoKSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsK
LSAgICAgICAgICAgIHJlY2VpdmVyLnNldERpc3BhdGNoZWQodHJ1ZSk7Ci0KLSAgICAgICAgICAg
IFZlY3RvcjxTdHJpbmc+IG1lZGlhU3RyZWFtSWRzOwotICAgICAgICAgICAgaWYgKCFtZWRpYURl
c2NyaXB0aW9uLm1lZGlhU3RyZWFtSWQuaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgIG1lZGlh
U3RyZWFtSWRzLmFwcGVuZChtZWRpYURlc2NyaXB0aW9uLm1lZGlhU3RyZWFtSWQpOwotCi0gICAg
ICAgICAgICAvLyBBIHJlbW90ZSB0cmFjayBjYW4gYmUgYXNzb2NpYXRlZCB3aXRoIDAuLiogTWVk
aWFTdHJlYW1zLiBXZSBjcmVhdGUgYSBuZXcgc3RyZWFtIGZvcgotICAgICAgICAgICAgLy8gYSB0
cmFjayBpbiBjYXNlIG9mIGFuIHVucmVjb2duaXplZCBzdHJlYW0gaWQsIG9yIGp1c3QgYWRkIHRo
ZSB0cmFjayBpZiB0aGUgc3RyZWFtCi0gICAgICAgICAgICAvLyBhbHJlYWR5IGV4aXN0cy4KLSAg
ICAgICAgICAgIEhhc2hNYXA8U3RyaW5nLCBSZWZQdHI8TWVkaWFTdHJlYW0+PiB0cmFja0V2ZW50
TWVkaWFTdHJlYW1zOwotICAgICAgICAgICAgZm9yIChhdXRvJiBpZCA6IG1lZGlhU3RyZWFtSWRz
KSB7Ci0gICAgICAgICAgICAgICAgaWYgKG1fcmVtb3RlU3RyZWFtTWFwLmNvbnRhaW5zKGlkKSkg
ewotICAgICAgICAgICAgICAgICAgICBSZWZQdHI8TWVkaWFTdHJlYW0+IHN0cmVhbSA9IG1fcmVt
b3RlU3RyZWFtTWFwLmdldChpZCk7Ci0gICAgICAgICAgICAgICAgICAgIHN0cmVhbS0+YWRkVHJh
Y2soKnJlY2VpdmVyLnRyYWNrKCkpOwotICAgICAgICAgICAgICAgICAgICB0cmFja0V2ZW50TWVk
aWFTdHJlYW1zLmFkZChpZCwgV1RGTW92ZShzdHJlYW0pKTsKLSAgICAgICAgICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgICAgICAgICBhdXRvIG5ld1N0cmVhbSA9IE1lZGlhU3RyZWFtOjpj
cmVhdGUoKm1fcGVlckNvbm5lY3Rpb24uc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCBNZWRpYVN0
cmVhbVRyYWNrVmVjdG9yKHsgcmVjZWl2ZXIudHJhY2soKSB9KSk7Ci0gICAgICAgICAgICAgICAg
ICAgIG1fcmVtb3RlU3RyZWFtTWFwLmFkZChpZCwgbmV3U3RyZWFtLmNvcHlSZWYoKSk7Ci0gICAg
ICAgICAgICAgICAgICAgIGxlZ2FjeU1lZGlhU3RyZWFtRXZlbnRzLmFwcGVuZChNZWRpYVN0cmVh
bUV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmFkZHN0cmVhbUV2ZW50LCBmYWxzZSwgZmFsc2Us
IG5ld1N0cmVhbS5jb3B5UmVmKCkpKTsKLSAgICAgICAgICAgICAgICAgICAgdHJhY2tFdmVudE1l
ZGlhU3RyZWFtcy5hZGQoaWQsIFdURk1vdmUobmV3U3RyZWFtKSk7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBWZWN0b3I8UmVmUHRyPE1lZGlhU3RyZWFt
Pj4gc3RyZWFtczsKLSAgICAgICAgICAgIGNvcHlWYWx1ZXNUb1ZlY3Rvcih0cmFja0V2ZW50TWVk
aWFTdHJlYW1zLCBzdHJlYW1zKTsKLQotICAgICAgICAgICAgbV9wZWVyQ29ubmVjdGlvbi5maXJl
RXZlbnQoUlRDVHJhY2tFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS50cmFja0V2ZW50LCBmYWxz
ZSwgZmFsc2UsCi0gICAgICAgICAgICAgICAgJnJlY2VpdmVyLCByZWNlaXZlci50cmFjaygpLCBX
VEZNb3ZlKHN0cmVhbXMpLCB0cmFuc2NlaXZlcikpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAg
Ly8gRmlyZSBsZWdhY3kgYWRkc3RyZWFtIGV2ZW50cy4KLSAgICBmb3IgKGF1dG8mIGV2ZW50IDog
bGVnYWN5TWVkaWFTdHJlYW1FdmVudHMpCi0gICAgICAgIG1fcGVlckNvbm5lY3Rpb24uZmlyZUV2
ZW50KCpldmVudCk7Ci0KLSAgICBSVENTaWduYWxpbmdTdGF0ZSBuZXdTaWduYWxpbmdTdGF0ZTsK
LQotICAgIC8vIFVwZGF0ZSBzdGF0ZSBhbmQgbG9jYWwgZGVzY3JpcHRpb25zIGFjY29yZGluZyB0
byBzZXRMb2NhbC9SZW1vdGVEZXNjcmlwdGlvbiBwcm9jZXNzaW5nIG1vZGVsCi0gICAgc3dpdGNo
IChuZXdEZXNjcmlwdGlvbi0+dHlwZSgpKSB7Ci0gICAgY2FzZSBSVENTZHBUeXBlOjpPZmZlcjoK
LSAgICAgICAgbV9wZW5kaW5nUmVtb3RlRGVzY3JpcHRpb24gPSBXVEZNb3ZlKG5ld0Rlc2NyaXB0
aW9uKTsKLSAgICAgICAgbmV3U2lnbmFsaW5nU3RhdGUgPSBSVENTaWduYWxpbmdTdGF0ZTo6SGF2
ZVJlbW90ZU9mZmVyOwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgUlRDU2RwVHlwZTo6QW5z
d2VyOgotICAgICAgICBtX2N1cnJlbnRSZW1vdGVEZXNjcmlwdGlvbiA9IFdURk1vdmUobmV3RGVz
Y3JpcHRpb24pOwotICAgICAgICBtX2N1cnJlbnRMb2NhbERlc2NyaXB0aW9uID0gbV9wZW5kaW5n
TG9jYWxEZXNjcmlwdGlvbjsKLSAgICAgICAgbV9wZW5kaW5nUmVtb3RlRGVzY3JpcHRpb24gPSBu
dWxscHRyOwotICAgICAgICBtX3BlbmRpbmdMb2NhbERlc2NyaXB0aW9uID0gbnVsbHB0cjsKLSAg
ICAgICAgbmV3U2lnbmFsaW5nU3RhdGUgPSBSVENTaWduYWxpbmdTdGF0ZTo6U3RhYmxlOwotICAg
ICAgICBicmVhazsKLQotICAgIGNhc2UgUlRDU2RwVHlwZTo6Um9sbGJhY2s6Ci0gICAgICAgIG1f
cGVuZGluZ1JlbW90ZURlc2NyaXB0aW9uID0gbnVsbHB0cjsKLSAgICAgICAgbmV3U2lnbmFsaW5n
U3RhdGUgPSBSVENTaWduYWxpbmdTdGF0ZTo6U3RhYmxlOwotICAgICAgICBicmVhazsKLQotICAg
IGNhc2UgUlRDU2RwVHlwZTo6UHJhbnN3ZXI6Ci0gICAgICAgIG1fcGVuZGluZ1JlbW90ZURlc2Ny
aXB0aW9uID0gV1RGTW92ZShuZXdEZXNjcmlwdGlvbik7Ci0gICAgICAgIG5ld1NpZ25hbGluZ1N0
YXRlID0gUlRDU2lnbmFsaW5nU3RhdGU6OkhhdmVSZW1vdGVQcmFuc3dlcjsKLSAgICAgICAgYnJl
YWs7Ci0gICAgfQotCi0gICAgdXBkYXRlU2lnbmFsaW5nU3RhdGUobmV3U2lnbmFsaW5nU3RhdGUp
OwotICAgIHNldFJlbW90ZURlc2NyaXB0aW9uU3VjY2VlZGVkKCk7Ci19Ci0KLVJlZlB0cjxSVENT
ZXNzaW9uRGVzY3JpcHRpb24+IE1lZGlhRW5kcG9pbnRQZWVyQ29ubmVjdGlvbjo6cmVtb3RlRGVz
Y3JpcHRpb24oKSBjb25zdAotewotICAgIHJldHVybiBjcmVhdGVSVENTZXNzaW9uRGVzY3JpcHRp
b24oaW50ZXJuYWxSZW1vdGVEZXNjcmlwdGlvbigpKTsKLX0KLQotUmVmUHRyPFJUQ1Nlc3Npb25E
ZXNjcmlwdGlvbj4gTWVkaWFFbmRwb2ludFBlZXJDb25uZWN0aW9uOjpjdXJyZW50UmVtb3RlRGVz
Y3JpcHRpb24oKSBjb25zdAotewotICAgIHJldHVybiBjcmVhdGVSVENTZXNzaW9uRGVzY3JpcHRp
b24obV9jdXJyZW50UmVtb3RlRGVzY3JpcHRpb24uZ2V0KCkpOwotfQotCi1SZWZQdHI8UlRDU2Vz
c2lvbkRlc2NyaXB0aW9uPiBNZWRpYUVuZHBvaW50UGVlckNvbm5lY3Rpb246OnBlbmRpbmdSZW1v
dGVEZXNjcmlwdGlvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGNyZWF0ZVJUQ1Nlc3Npb25EZXNj
cmlwdGlvbihtX3BlbmRpbmdSZW1vdGVEZXNjcmlwdGlvbi5nZXQoKSk7Ci19Ci0KLWJvb2wgTWVk
aWFFbmRwb2ludFBlZXJDb25uZWN0aW9uOjpzZXRDb25maWd1cmF0aW9uKE1lZGlhRW5kcG9pbnRD
b25maWd1cmF0aW9uJiYgY29uZmlndXJhdGlvbikKLXsKLSAgICBtX21lZGlhRW5kcG9pbnQtPnNl
dENvbmZpZ3VyYXRpb24oV1RGTW92ZShjb25maWd1cmF0aW9uKSk7Ci0gICAgcmV0dXJuIHRydWU7
Ci19Ci0KLXZvaWQgTWVkaWFFbmRwb2ludFBlZXJDb25uZWN0aW9uOjpkb0FkZEljZUNhbmRpZGF0
ZShSVENJY2VDYW5kaWRhdGUmIHJ0Y0NhbmRpZGF0ZSkKLXsKLSAgICBydW5UYXNrKFt0aGlzLCBw
cm90ZWN0ZWRDYW5kaWRhdGUgPSBSZWZQdHI8UlRDSWNlQ2FuZGlkYXRlPigmcnRjQ2FuZGlkYXRl
KV0oKSBtdXRhYmxlIHsKLSAgICAgICAgYWRkSWNlQ2FuZGlkYXRlVGFzaygqcHJvdGVjdGVkQ2Fu
ZGlkYXRlKTsKLSAgICB9KTsKLX0KLQotdm9pZCBNZWRpYUVuZHBvaW50UGVlckNvbm5lY3Rpb246
OmFkZEljZUNhbmRpZGF0ZVRhc2soUlRDSWNlQ2FuZGlkYXRlJiBydGNDYW5kaWRhdGUpCi17Ci0g
ICAgaWYgKCFpbnRlcm5hbFJlbW90ZURlc2NyaXB0aW9uKCkpIHsKLSAgICAgICAgYWRkSWNlQ2Fu
ZGlkYXRlRmFpbGVkKEV4Y2VwdGlvbiB7IEludmFsaWRTdGF0ZUVycm9yLCAiTm8gcmVtb3RlIGRl
c2NyaXB0aW9uIHNldCIgfSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBhdXRvJiBy
ZW1vdGVNZWRpYURlc2NyaXB0aW9ucyA9IGludGVybmFsUmVtb3RlRGVzY3JpcHRpb24oKS0+Y29u
ZmlndXJhdGlvbigpLT5tZWRpYURlc2NyaXB0aW9ucygpOwotICAgIFBlZXJNZWRpYURlc2NyaXB0
aW9uKiB0YXJnZXRNZWRpYURlc2NyaXB0aW9uID0gbnVsbHB0cjsKLQotICAgIC8vIFdoZW4gaWRl
bnRpZnlpbmcgdGhlIHRhcmdldCBtZWRpYSBkZXNjcmlwdGlvbiwgc2RwTWlkIHRha2VzIHByZWNl
ZGVuY2Ugb3ZlciBzZHBNTGluZUluZGV4Ci0gICAgLy8gaWYgYm90aCBhcmUgcHJlc2VudC4KLSAg
ICBpZiAoIXJ0Y0NhbmRpZGF0ZS5zZHBNaWQoKS5pc051bGwoKSkgewotICAgICAgICBjb25zdCBT
dHJpbmcmIG1pZCA9IHJ0Y0NhbmRpZGF0ZS5zZHBNaWQoKTsKLSAgICAgICAgZm9yIChhdXRvJiBk
ZXNjcmlwdGlvbiA6IHJlbW90ZU1lZGlhRGVzY3JpcHRpb25zKSB7Ci0gICAgICAgICAgICBpZiAo
ZGVzY3JpcHRpb24ubWlkID09IG1pZCkgewotICAgICAgICAgICAgICAgIHRhcmdldE1lZGlhRGVz
Y3JpcHRpb24gPSAmZGVzY3JpcHRpb247Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIXRhcmdldE1lZGlhRGVzY3JpcHRpb24p
IHsKLSAgICAgICAgICAgIGFkZEljZUNhbmRpZGF0ZUZhaWxlZChFeGNlcHRpb24geyBPcGVyYXRp
b25FcnJvciwgInNkcE1pZCBkaWQgbm90IG1hdGNoIGFueSBtZWRpYSBkZXNjcmlwdGlvbiIgfSk7
Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKHJ0Y0NhbmRp
ZGF0ZS5zZHBNTGluZUluZGV4KCkpIHsKLSAgICAgICAgdW5zaWduZWQgc2hvcnQgc2RwTUxpbmVJ
bmRleCA9IHJ0Y0NhbmRpZGF0ZS5zZHBNTGluZUluZGV4KCkudmFsdWUoKTsKLSAgICAgICAgaWYg
KHNkcE1MaW5lSW5kZXggPj0gcmVtb3RlTWVkaWFEZXNjcmlwdGlvbnMuc2l6ZSgpKSB7Ci0gICAg
ICAgICAgICBhZGRJY2VDYW5kaWRhdGVGYWlsZWQoRXhjZXB0aW9uIHsgT3BlcmF0aW9uRXJyb3Is
ICJzZHBNTGluZUluZGV4IGlzIG91dCBvZiByYW5nZSIgfSk7Ci0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIH0KLSAgICAgICAgdGFyZ2V0TWVkaWFEZXNjcmlwdGlvbiA9ICZyZW1vdGVNZWRp
YURlc2NyaXB0aW9uc1tzZHBNTGluZUluZGV4XTsKLSAgICB9IGVsc2UgewotICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGF1dG8gcmVz
dWx0ID0gbV9zZHBQcm9jZXNzb3ItPnBhcnNlQ2FuZGlkYXRlTGluZShydGNDYW5kaWRhdGUuY2Fu
ZGlkYXRlKCkpOwotICAgIGlmIChyZXN1bHQucGFyc2luZ1N0YXR1cygpICE9IFNEUFByb2Nlc3Nv
cjo6UmVzdWx0OjpTdWNjZXNzKSB7Ci0gICAgICAgIGlmIChyZXN1bHQucGFyc2luZ1N0YXR1cygp
ID09IFNEUFByb2Nlc3Nvcjo6UmVzdWx0OjpQYXJzZUVycm9yKQotICAgICAgICAgICAgYWRkSWNl
Q2FuZGlkYXRlRmFpbGVkKEV4Y2VwdGlvbiB7IE9wZXJhdGlvbkVycm9yLCAiSW52YWxpZCBjYW5k
aWRhdGUgY29udGVudCIgfSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIExPR19FUlJPUigi
U0RQUHJvY2Vzc29yIGludGVybmFsIGVycm9yIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICBBU1NFUlQodGFyZ2V0TWVkaWFEZXNjcmlwdGlvbik7Ci0gICAgbV9tZWRpYUVuZHBvaW50
LT5hZGRSZW1vdGVDYW5kaWRhdGUocmVzdWx0LmNhbmRpZGF0ZSgpLCB0YXJnZXRNZWRpYURlc2Ny
aXB0aW9uLT5taWQsIHRhcmdldE1lZGlhRGVzY3JpcHRpb24tPmljZVVmcmFnLCB0YXJnZXRNZWRp
YURlc2NyaXB0aW9uLT5pY2VQYXNzd29yZCk7Ci0KLSAgICB0YXJnZXRNZWRpYURlc2NyaXB0aW9u
LT5hZGRJY2VDYW5kaWRhdGUoV1RGTW92ZShyZXN1bHQuY2FuZGlkYXRlKCkpKTsKLQotICAgIGFk
ZEljZUNhbmRpZGF0ZVN1Y2NlZWRlZCgpOwotfQotCi12b2lkIE1lZGlhRW5kcG9pbnRQZWVyQ29u
bmVjdGlvbjo6Z2V0U3RhdHMoTWVkaWFTdHJlYW1UcmFjayogdHJhY2ssIFJlZjxEZWZlcnJlZFBy
b21pc2U+JiYgcHJvbWlzZSkKLXsKLSAgICBtX21lZGlhRW5kcG9pbnQtPmdldFN0YXRzKHRyYWNr
LCBXVEZNb3ZlKHByb21pc2UpKTsKLX0KLQotVmVjdG9yPFJlZlB0cjxNZWRpYVN0cmVhbT4+IE1l
ZGlhRW5kcG9pbnRQZWVyQ29ubmVjdGlvbjo6Z2V0UmVtb3RlU3RyZWFtcygpIGNvbnN0Ci17Ci0g
ICAgVmVjdG9yPFJlZlB0cjxNZWRpYVN0cmVhbT4+IHJlbW90ZVN0cmVhbXM7Ci0gICAgY29weVZh
bHVlc1RvVmVjdG9yKG1fcmVtb3RlU3RyZWFtTWFwLCByZW1vdGVTdHJlYW1zKTsKLSAgICByZXR1
cm4gcmVtb3RlU3RyZWFtczsKLX0KLQotUmVmPFJUQ1J0cFJlY2VpdmVyPiBNZWRpYUVuZHBvaW50
UGVlckNvbm5lY3Rpb246OmNyZWF0ZVJlY2VpdmVyKGNvbnN0IFN0cmluZyYgdHJhbnNjZWl2ZXJN
aWQsIGNvbnN0IFN0cmluZyYgdHJhY2tLaW5kLCBjb25zdCBTdHJpbmcmIHRyYWNrSWQpCi17Ci0g
ICAgUmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlwZSBzb3VyY2VUeXBlID0gdHJhY2tLaW5kID09ICJh
dWRpbyIgPyBSZWFsdGltZU1lZGlhU291cmNlOjpUeXBlOjpBdWRpbyA6IFJlYWx0aW1lTWVkaWFT
b3VyY2U6OlR5cGU6OlZpZGVvOwotCi0gICAgLy8gQ3JlYXRlIGEgbXV0ZWQgcmVtb3RlIHNvdXJj
ZSB0aGF0IHdpbGwgYmUgdW5tdXRlZCBvbmNlIG1lZGlhIHN0YXJ0cyBhcnJpdmluZy4KLSAgICBh
dXRvIHJlbW90ZVNvdXJjZSA9IG1fbWVkaWFFbmRwb2ludC0+Y3JlYXRlTXV0ZWRSZW1vdGVTb3Vy
Y2UodHJhbnNjZWl2ZXJNaWQsIHNvdXJjZVR5cGUpOwotICAgIGF1dG8gcmVtb3RlVHJhY2tQcml2
YXRlID0gTWVkaWFTdHJlYW1UcmFja1ByaXZhdGU6OmNyZWF0ZShXVEZNb3ZlKHJlbW90ZVNvdXJj
ZSksIFN0cmluZyh0cmFja0lkKSk7Ci0gICAgYXV0byByZW1vdGVUcmFjayA9IE1lZGlhU3RyZWFt
VHJhY2s6OmNyZWF0ZSgqbV9wZWVyQ29ubmVjdGlvbi5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCks
IFdURk1vdmUocmVtb3RlVHJhY2tQcml2YXRlKSk7Ci0KLSAgICByZXR1cm4gUlRDUnRwUmVjZWl2
ZXI6OmNyZWF0ZShXVEZNb3ZlKHJlbW90ZVRyYWNrKSk7Ci19Ci0KLXN0ZDo6dW5pcXVlX3B0cjxS
VENEYXRhQ2hhbm5lbEhhbmRsZXI+IE1lZGlhRW5kcG9pbnRQZWVyQ29ubmVjdGlvbjo6Y3JlYXRl
RGF0YUNoYW5uZWxIYW5kbGVyKGNvbnN0IFN0cmluZyYgbGFiZWwsIGNvbnN0IFJUQ0RhdGFDaGFu
bmVsSW5pdCYgb3B0aW9ucykKLXsKLSAgICByZXR1cm4gbV9tZWRpYUVuZHBvaW50LT5jcmVhdGVE
YXRhQ2hhbm5lbEhhbmRsZXIobGFiZWwsIG9wdGlvbnMpOwotfQotCi12b2lkIE1lZGlhRW5kcG9p
bnRQZWVyQ29ubmVjdGlvbjo6cmVwbGFjZVRyYWNrKFJUQ1J0cFNlbmRlciYgc2VuZGVyLCBSZWY8
TWVkaWFTdHJlYW1UcmFjaz4mJiB3aXRoVHJhY2ssIERPTVByb21pc2VEZWZlcnJlZDx2b2lkPiYm
IHByb21pc2UpCi17Ci0gICAgUlRDUnRwVHJhbnNjZWl2ZXIqIHRyYW5zY2VpdmVyID0gbWF0Y2hU
cmFuc2NlaXZlcihtX3BlZXJDb25uZWN0aW9uLmdldFRyYW5zY2VpdmVycygpLCBbJnNlbmRlcl0g
KFJUQ1J0cFRyYW5zY2VpdmVyJiBjdXJyZW50KSB7Ci0gICAgICAgIHJldHVybiAmY3VycmVudC5z
ZW5kZXIoKSA9PSAmc2VuZGVyOwotICAgIH0pOwotICAgIEFTU0VSVCh0cmFuc2NlaXZlcik7Ci0K
LSAgICBjb25zdCBTdHJpbmcmIG1pZCA9IHRyYW5zY2VpdmVyLT5taWQoKTsKLSAgICBpZiAobWlk
LmlzTnVsbCgpKSB7Ci0gICAgICAgIC8vIFRyYW5zY2VpdmVyIGlzIG5vdCBhc3NvY2lhdGVkIHdp
dGggYSBtZWRpYSBkZXNjcmlwdGlvbiB5ZXQuCi0gICAgICAgIHNlbmRlci5zZXRUcmFjayhXVEZN
b3ZlKHdpdGhUcmFjaykpOwotICAgICAgICBwcm9taXNlLnJlc29sdmUoKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIHJ1blRhc2soW3RoaXMsIHByb3RlY3RlZFNlbmRlciA9IFJlZlB0
cjxSVENSdHBTZW5kZXI+KCZzZW5kZXIpLCBtaWQsIHByb3RlY3RlZFRyYWNrID0gV1RGTW92ZSh3
aXRoVHJhY2spLCBwcm90ZWN0ZWRQcm9taXNlID0gV1RGTW92ZShwcm9taXNlKV0oKSBtdXRhYmxl
IHsKLSAgICAgICAgcmVwbGFjZVRyYWNrVGFzaygqcHJvdGVjdGVkU2VuZGVyLCBtaWQsIFdURk1v
dmUocHJvdGVjdGVkVHJhY2spLCBwcm90ZWN0ZWRQcm9taXNlKTsKLSAgICB9KTsKLX0KLQotdm9p
ZCBNZWRpYUVuZHBvaW50UGVlckNvbm5lY3Rpb246OnJlcGxhY2VUcmFja1Rhc2soUlRDUnRwU2Vu
ZGVyJiBzZW5kZXIsIGNvbnN0IFN0cmluZyYgbWlkLCBSZWY8TWVkaWFTdHJlYW1UcmFjaz4mJiB3
aXRoVHJhY2ssIERPTVByb21pc2VEZWZlcnJlZDx2b2lkPiYgcHJvbWlzZSkKLXsKLSAgICBpZiAo
bV9wZWVyQ29ubmVjdGlvbi5pc0Nsb3NlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX21l
ZGlhRW5kcG9pbnQtPnJlcGxhY2VTZW5kU291cmNlKHdpdGhUcmFjay0+c291cmNlKCksIG1pZCk7
Ci0KLSAgICBzZW5kZXIuc2V0VHJhY2soV1RGTW92ZSh3aXRoVHJhY2spKTsKLSAgICBwcm9taXNl
LnJlc29sdmUoKTsKLX0KLQotdm9pZCBNZWRpYUVuZHBvaW50UGVlckNvbm5lY3Rpb246OmRvU3Rv
cCgpCi17Ci0gICAgbV9tZWRpYUVuZHBvaW50LT5zdG9wKCk7Ci19Ci0KLXZvaWQgTWVkaWFFbmRw
b2ludFBlZXJDb25uZWN0aW9uOjplbXVsYXRlUGxhdGZvcm1FdmVudChjb25zdCBTdHJpbmcmIGFj
dGlvbikKLXsKLSAgICBtX21lZGlhRW5kcG9pbnQtPmVtdWxhdGVQbGF0Zm9ybUV2ZW50KGFjdGlv
bik7Ci19Ci0KLU1lZGlhRW5kcG9pbnRTZXNzaW9uRGVzY3JpcHRpb24qIE1lZGlhRW5kcG9pbnRQ
ZWVyQ29ubmVjdGlvbjo6aW50ZXJuYWxMb2NhbERlc2NyaXB0aW9uKCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gbV9wZW5kaW5nTG9jYWxEZXNjcmlwdGlvbiA/IG1fcGVuZGluZ0xvY2FsRGVzY3JpcHRp
b24uZ2V0KCkgOiBtX2N1cnJlbnRMb2NhbERlc2NyaXB0aW9uLmdldCgpOwotfQotCi1NZWRpYUVu
ZHBvaW50U2Vzc2lvbkRlc2NyaXB0aW9uKiBNZWRpYUVuZHBvaW50UGVlckNvbm5lY3Rpb246Omlu
dGVybmFsUmVtb3RlRGVzY3JpcHRpb24oKSBjb25zdAotewotICAgIHJldHVybiBtX3BlbmRpbmdS
ZW1vdGVEZXNjcmlwdGlvbiA/IG1fcGVuZGluZ1JlbW90ZURlc2NyaXB0aW9uLmdldCgpIDogbV9j
dXJyZW50UmVtb3RlRGVzY3JpcHRpb24uZ2V0KCk7Ci19Ci0KLVJlZlB0cjxSVENTZXNzaW9uRGVz
Y3JpcHRpb24+IE1lZGlhRW5kcG9pbnRQZWVyQ29ubmVjdGlvbjo6Y3JlYXRlUlRDU2Vzc2lvbkRl
c2NyaXB0aW9uKE1lZGlhRW5kcG9pbnRTZXNzaW9uRGVzY3JpcHRpb24qIGRlc2NyaXB0aW9uKSBj
b25zdAotewotICAgIHJldHVybiBkZXNjcmlwdGlvbiA/IGRlc2NyaXB0aW9uLT50b1JUQ1Nlc3Np
b25EZXNjcmlwdGlvbigqbV9zZHBQcm9jZXNzb3IpIDogbnVsbHB0cjsKLX0KLQotdm9pZCBNZWRp
YUVuZHBvaW50UGVlckNvbm5lY3Rpb246OmdvdER0bHNGaW5nZXJwcmludChjb25zdCBTdHJpbmcm
IGZpbmdlcnByaW50LCBjb25zdCBTdHJpbmcmIGZpbmdlcnByaW50RnVuY3Rpb24pCi17Ci0gICAg
QVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLQotICAgIG1fZHRsc0ZpbmdlcnByaW50ID0gZmluZ2Vy
cHJpbnQ7Ci0gICAgbV9kdGxzRmluZ2VycHJpbnRGdW5jdGlvbiA9IGZpbmdlcnByaW50RnVuY3Rp
b247Ci0KLSAgICBzdGFydFJ1bm5pbmdUYXNrcygpOwotfQotCi12b2lkIE1lZGlhRW5kcG9pbnRQ
ZWVyQ29ubmVjdGlvbjo6Z290SWNlQ2FuZGlkYXRlKGNvbnN0IFN0cmluZyYgbWlkLCBJY2VDYW5k
aWRhdGUmJiBjYW5kaWRhdGUpCi17Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLQotICAg
IGF1dG8mIG1lZGlhRGVzY3JpcHRpb25zID0gaW50ZXJuYWxMb2NhbERlc2NyaXB0aW9uKCktPmNv
bmZpZ3VyYXRpb24oKS0+bWVkaWFEZXNjcmlwdGlvbnMoKTsKLSAgICBzaXplX3QgbWVkaWFEZXNj
cmlwdGlvbkluZGV4ID0gbm90Rm91bmQ7Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1l
ZGlhRGVzY3JpcHRpb25zLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmIChtZWRpYURlc2NyaXB0
aW9uc1tpXS5taWQgPT0gbWlkKSB7Ci0gICAgICAgICAgICBtZWRpYURlc2NyaXB0aW9uSW5kZXgg
PSBpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgQVNTRVJUKG1l
ZGlhRGVzY3JpcHRpb25JbmRleCAhPSBub3RGb3VuZCk7Ci0KLSAgICBTdHJpbmcgY2FuZGlkYXRl
TGluZTsKLSAgICBhdXRvIHJlc3VsdCA9IG1fc2RwUHJvY2Vzc29yLT5nZW5lcmF0ZUNhbmRpZGF0
ZUxpbmUoY2FuZGlkYXRlLCBjYW5kaWRhdGVMaW5lKTsKLSAgICBpZiAocmVzdWx0ICE9IFNEUFBy
b2Nlc3Nvcjo6UmVzdWx0OjpTdWNjZXNzKSB7Ci0gICAgICAgIExPR19FUlJPUigiU0RQUHJvY2Vz
c29yIGludGVybmFsIGVycm9yIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtZWRp
YURlc2NyaXB0aW9uc1ttZWRpYURlc2NyaXB0aW9uSW5kZXhdLmFkZEljZUNhbmRpZGF0ZShXVEZN
b3ZlKGNhbmRpZGF0ZSkpOwotCi0gICAgZmlyZUlDRUNhbmRpZGF0ZUV2ZW50KFJUQ0ljZUNhbmRp
ZGF0ZTo6Y3JlYXRlKGNhbmRpZGF0ZUxpbmUsIG1pZCwgbWVkaWFEZXNjcmlwdGlvbkluZGV4KSk7
Ci19Ci0KLXZvaWQgTWVkaWFFbmRwb2ludFBlZXJDb25uZWN0aW9uOjpkb25lR2F0aGVyaW5nQ2Fu
ZGlkYXRlcyhjb25zdCBTdHJpbmcmIG1pZCkKLXsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkp
OwotCi0gICAgUnRwVHJhbnNjZWl2ZXJWZWN0b3IgdHJhbnNjZWl2ZXJzID0gUnRwVHJhbnNjZWl2
ZXJWZWN0b3IobV9wZWVyQ29ubmVjdGlvbi5nZXRUcmFuc2NlaXZlcnMoKSk7Ci0gICAgUlRDUnRw
VHJhbnNjZWl2ZXIqIG5vdGlmeWluZ1RyYW5zY2VpdmVyID0gbWF0Y2hUcmFuc2NlaXZlckJ5TWlk
KHRyYW5zY2VpdmVycywgbWlkKTsKLSAgICBBU1NFUlQobm90aWZ5aW5nVHJhbnNjZWl2ZXIpOwot
Ci0gICAgbm90aWZ5aW5nVHJhbnNjZWl2ZXItPmljZVRyYW5zcG9ydCgpLnNldEdhdGhlcmluZ1N0
YXRlKFJUQ0ljZUdhdGhlcmluZ1N0YXRlOjpDb21wbGV0ZSk7Ci0KLSAgICAvLyBEb24ndCBub3Rp
ZnkgdGhlIHNjcmlwdCBpZiB0aGVyZSBhcmUgdHJhbnNjZWl2ZXJzIHN0aWxsIGdhdGhlcmluZy4K
LSAgICBSVENSdHBUcmFuc2NlaXZlciogc3RpbGxHYXRoZXJpbmdUcmFuc2NlaXZlciA9IG1hdGNo
VHJhbnNjZWl2ZXIodHJhbnNjZWl2ZXJzLCBbXSAoUlRDUnRwVHJhbnNjZWl2ZXImIGN1cnJlbnQp
IHsKLSAgICAgICAgcmV0dXJuICFjdXJyZW50LnN0b3BwZWQoKSAmJiAhY3VycmVudC5taWQoKS5p
c051bGwoKQotICAgICAgICAgICAgJiYgY3VycmVudC5pY2VUcmFuc3BvcnQoKS5nYXRoZXJpbmdT
dGF0ZSgpICE9IFJUQ0ljZUdhdGhlcmluZ1N0YXRlOjpDb21wbGV0ZTsKLSAgICB9KTsKLSAgICBp
ZiAoIXN0aWxsR2F0aGVyaW5nVHJhbnNjZWl2ZXIpCi0gICAgICAgIFBlZXJDb25uZWN0aW9uQmFj
a2VuZDo6ZG9uZUdhdGhlcmluZ0NhbmRpZGF0ZXMoKTsKLX0KLQotc3RhdGljIFJUQ0ljZUNvbm5l
Y3Rpb25TdGF0ZSBkZXJpdmVBZ2dyZWdhdGVkSWNlQ29ubmVjdGlvblN0YXRlKGNvbnN0IFZlY3Rv
cjxSVENJY2VUcmFuc3BvcnRTdGF0ZT4mIHN0YXRlcykKLXsKLSAgICB1bnNpZ25lZCBuZXdDb3Vu
dCA9IDA7Ci0gICAgdW5zaWduZWQgY2hlY2tpbmdDb3VudCA9IDA7Ci0gICAgdW5zaWduZWQgY29u
bmVjdGVkQ291bnQgPSAwOwotICAgIHVuc2lnbmVkIGNvbXBsZXRlZENvdW50ID0gMDsKLSAgICB1
bnNpZ25lZCBmYWlsZWRDb3VudCA9IDA7Ci0gICAgdW5zaWduZWQgZGlzY29ubmVjdGVkQ291bnQg
PSAwOwotICAgIHVuc2lnbmVkIGNsb3NlZENvdW50ID0gMDsKLQotICAgIGZvciAoYXV0byYgc3Rh
dGUgOiBzdGF0ZXMpIHsKLSAgICAgICAgc3dpdGNoIChzdGF0ZSkgewotICAgICAgICBjYXNlIFJU
Q0ljZVRyYW5zcG9ydFN0YXRlOjpOZXc6Ci0gICAgICAgICAgICArK25ld0NvdW50OwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUlRDSWNlVHJhbnNwb3J0U3RhdGU6OkNoZWNraW5n
OgotICAgICAgICAgICAgKytjaGVja2luZ0NvdW50OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgUlRDSWNlVHJhbnNwb3J0U3RhdGU6OkNvbm5lY3RlZDoKLSAgICAgICAgICAgICsr
Y29ubmVjdGVkQ291bnQ7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBSVENJY2VU
cmFuc3BvcnRTdGF0ZTo6Q29tcGxldGVkOgotICAgICAgICAgICAgKytjb21wbGV0ZWRDb3VudDsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFJUQ0ljZVRyYW5zcG9ydFN0YXRlOjpG
YWlsZWQ6Ci0gICAgICAgICAgICArK2ZhaWxlZENvdW50OwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgUlRDSWNlVHJhbnNwb3J0U3RhdGU6OkRpc2Nvbm5lY3RlZDoKLSAgICAgICAg
ICAgICsrZGlzY29ubmVjdGVkQ291bnQ7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBSVENJY2VUcmFuc3BvcnRTdGF0ZTo6Q2xvc2VkOgotICAgICAgICAgICAgKytjbG9zZWRDb3Vu
dDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gVGhlIGFn
Z3JlZ2F0ZWQgUlRDSWNlQ29ubmVjdGlvblN0YXRlIGlzIGRlcml2ZWQgZnJvbSB0aGUgUlRDSWNl
VHJhbnNwb3J0U3RhdGUgb2YgYWxsIFJUQ0ljZVRyYW5zcG9ydHMuCi0gICAgaWYgKChuZXdDb3Vu
dCA+IDAgJiYgIWNoZWNraW5nQ291bnQgJiYgIWZhaWxlZENvdW50ICYmICFkaXNjb25uZWN0ZWRD
b3VudCkgfHwgKGNsb3NlZENvdW50ID09IHN0YXRlcy5zaXplKCkpKQotICAgICAgICByZXR1cm4g
UlRDSWNlQ29ubmVjdGlvblN0YXRlOjpOZXc7Ci0KLSAgICBpZiAoY2hlY2tpbmdDb3VudCA+IDAg
JiYgIWZhaWxlZENvdW50ICYmICFkaXNjb25uZWN0ZWRDb3VudCkKLSAgICAgICAgcmV0dXJuIFJU
Q0ljZUNvbm5lY3Rpb25TdGF0ZTo6Q2hlY2tpbmc7Ci0KLSAgICBpZiAoKGNvbm5lY3RlZENvdW50
ICsgY29tcGxldGVkQ291bnQgKyBjbG9zZWRDb3VudCkgPT0gc3RhdGVzLnNpemUoKSAmJiBjb25u
ZWN0ZWRDb3VudCA+IDApCi0gICAgICAgIHJldHVybiBSVENJY2VDb25uZWN0aW9uU3RhdGU6OkNv
bm5lY3RlZDsKLQotICAgIGlmICgoY29tcGxldGVkQ291bnQgKyBjbG9zZWRDb3VudCkgPT0gc3Rh
dGVzLnNpemUoKSAmJiBjb21wbGV0ZWRDb3VudCA+IDApCi0gICAgICAgIHJldHVybiBSVENJY2VD
b25uZWN0aW9uU3RhdGU6OkNvbXBsZXRlZDsKLQotICAgIGlmIChmYWlsZWRDb3VudCA+IDApCi0g
ICAgICAgIHJldHVybiBSVENJY2VDb25uZWN0aW9uU3RhdGU6OkZhaWxlZDsKLQotICAgIGlmIChk
aXNjb25uZWN0ZWRDb3VudCA+IDApIC8vIEFueSBmYWlsZWQgY2F1Z2h0IGFib3ZlLgotICAgICAg
ICByZXR1cm4gUlRDSWNlQ29ubmVjdGlvblN0YXRlOjpEaXNjb25uZWN0ZWQ7Ci0KLSAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gUlRDSWNlQ29ubmVjdGlvblN0YXRlOjpOZXc7
Ci19Ci0KLXZvaWQgTWVkaWFFbmRwb2ludFBlZXJDb25uZWN0aW9uOjppY2VUcmFuc3BvcnRTdGF0
ZUNoYW5nZWQoY29uc3QgU3RyaW5nJiBtaWQsIFJUQ0ljZVRyYW5zcG9ydFN0YXRlIG1lZGlhRW5k
cG9pbnRJY2VUcmFuc3BvcnRTdGF0ZSkKLXsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwot
Ci0gICAgUlRDUnRwVHJhbnNjZWl2ZXIqIHRyYW5zY2VpdmVyID0gbWF0Y2hUcmFuc2NlaXZlckJ5
TWlkKG1fcGVlckNvbm5lY3Rpb24uZ2V0VHJhbnNjZWl2ZXJzKCksIG1pZCk7Ci0gICAgQVNTRVJU
KHRyYW5zY2VpdmVyKTsKLQotICAgIFJUQ0ljZVRyYW5zcG9ydFN0YXRlIHRyYW5zcG9ydFN0YXRl
ID0gc3RhdGljX2Nhc3Q8UlRDSWNlVHJhbnNwb3J0U3RhdGU+KG1lZGlhRW5kcG9pbnRJY2VUcmFu
c3BvcnRTdGF0ZSk7Ci0gICAgdHJhbnNjZWl2ZXItPmljZVRyYW5zcG9ydCgpLnNldFN0YXRlKHRy
YW5zcG9ydFN0YXRlKTsKLQotICAgIC8vIERldGVybWluZSBpZiB0aGUgc2NyaXB0IG5lZWRzIHRv
IGJlIG5vdGlmaWVkLgotICAgIFZlY3RvcjxSVENJY2VUcmFuc3BvcnRTdGF0ZT4gdHJhbnNwb3J0
U3RhdGVzOwotICAgIHRyYW5zcG9ydFN0YXRlcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG1fcGVl
ckNvbm5lY3Rpb24uZ2V0VHJhbnNjZWl2ZXJzKCkuc2l6ZSgpKTsKLSAgICBmb3IgKGF1dG8mIHRy
YW5zY2VpdmVyIDogbV9wZWVyQ29ubmVjdGlvbi5nZXRUcmFuc2NlaXZlcnMoKSkKLSAgICAgICAg
dHJhbnNwb3J0U3RhdGVzLnVuY2hlY2tlZEFwcGVuZCh0cmFuc2NlaXZlci0+aWNlVHJhbnNwb3J0
KCkuc3RhdGUoKSk7Ci0KLSAgICBtX3BlZXJDb25uZWN0aW9uLnVwZGF0ZUljZUNvbm5lY3Rpb25T
dGF0ZShkZXJpdmVBZ2dyZWdhdGVkSWNlQ29ubmVjdGlvblN0YXRlKHRyYW5zcG9ydFN0YXRlcykp
OwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoV0VCX1JU
QykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFF
bmRwb2ludFBlZXJDb25uZWN0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3Ry
ZWFtL01lZGlhRW5kcG9pbnRQZWVyQ29ubmVjdGlvbi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCBiYjgxMzEyMWM5MmNkMzFkNjU2NTdkMDVhMzQ5YjYyOTYzYzc5YmU1Li4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFFbmRwb2ludFBlZXJDb25uZWN0aW9uLmgKKysrIC9kZXYv
bnVsbApAQCAtMSwxMzMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSwgMjAxNiBF
cmljc3NvbiBBQi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIKLSAqICAgIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqICAgIGRpc3RyaWJ1dGlvbi4KLSAqIDMu
IE5laXRoZXIgdGhlIG5hbWUgb2YgRXJpY3Nzb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJp
YnV0b3JzCi0gKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tIHRoaXMKLSAqICAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
LSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBFTkFC
TEUoV0VCX1JUQykKLQotI2luY2x1ZGUgIk1lZGlhRW5kcG9pbnQuaCIKLSNpbmNsdWRlICJQZWVy
Q29ubmVjdGlvbkJhY2tlbmQuaCIKLSNpbmNsdWRlICJSVENTZXNzaW9uRGVzY3JpcHRpb24uaCIK
LSNpbmNsdWRlIDx3dGYvRnVuY3Rpb24uaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFz
cyBNZWRpYUVuZHBvaW50U2Vzc2lvbkRlc2NyaXB0aW9uOwotY2xhc3MgU0RQUHJvY2Vzc29yOwot
Ci1jbGFzcyBNZWRpYUVuZHBvaW50UGVlckNvbm5lY3Rpb24gZmluYWwgOiBwdWJsaWMgUGVlckNv
bm5lY3Rpb25CYWNrZW5kLCBwdWJsaWMgTWVkaWFFbmRwb2ludENsaWVudCB7Ci1wdWJsaWM6Ci0g
ICAgV0VCQ09SRV9FWFBPUlQgZXhwbGljaXQgTWVkaWFFbmRwb2ludFBlZXJDb25uZWN0aW9uKFJU
Q1BlZXJDb25uZWN0aW9uJik7Ci0KLXByaXZhdGU6Ci0gICAgUmVmUHRyPFJUQ1Nlc3Npb25EZXNj
cmlwdGlvbj4gbG9jYWxEZXNjcmlwdGlvbigpIGNvbnN0IGZpbmFsOwotICAgIFJlZlB0cjxSVENT
ZXNzaW9uRGVzY3JpcHRpb24+IGN1cnJlbnRMb2NhbERlc2NyaXB0aW9uKCkgY29uc3QgZmluYWw7
Ci0gICAgUmVmUHRyPFJUQ1Nlc3Npb25EZXNjcmlwdGlvbj4gcGVuZGluZ0xvY2FsRGVzY3JpcHRp
b24oKSBjb25zdCBmaW5hbDsKLQotICAgIFJlZlB0cjxSVENTZXNzaW9uRGVzY3JpcHRpb24+IHJl
bW90ZURlc2NyaXB0aW9uKCkgY29uc3QgZmluYWw7Ci0gICAgUmVmUHRyPFJUQ1Nlc3Npb25EZXNj
cmlwdGlvbj4gY3VycmVudFJlbW90ZURlc2NyaXB0aW9uKCkgY29uc3QgZmluYWw7Ci0gICAgUmVm
UHRyPFJUQ1Nlc3Npb25EZXNjcmlwdGlvbj4gcGVuZGluZ1JlbW90ZURlc2NyaXB0aW9uKCkgY29u
c3QgZmluYWw7Ci0KLSAgICBib29sIHNldENvbmZpZ3VyYXRpb24oTWVkaWFFbmRwb2ludENvbmZp
Z3VyYXRpb24mJikgZmluYWw7Ci0KLSAgICB2b2lkIGdldFN0YXRzKE1lZGlhU3RyZWFtVHJhY2sq
LCBSZWY8RGVmZXJyZWRQcm9taXNlPiYmKSBmaW5hbDsKLQotICAgIFZlY3RvcjxSZWZQdHI8TWVk
aWFTdHJlYW0+PiBnZXRSZW1vdGVTdHJlYW1zKCkgY29uc3QgZmluYWw7Ci0KLSAgICBSZWY8UlRD
UnRwUmVjZWl2ZXI+IGNyZWF0ZVJlY2VpdmVyKGNvbnN0IFN0cmluZyYgdHJhbnNjZWl2ZXJNaWQs
IGNvbnN0IFN0cmluZyYgdHJhY2tLaW5kLCBjb25zdCBTdHJpbmcmIHRyYWNrSWQpIGZpbmFsOwot
ICAgIHZvaWQgcmVwbGFjZVRyYWNrKFJUQ1J0cFNlbmRlciYsIFJlZjxNZWRpYVN0cmVhbVRyYWNr
PiYmLCBET01Qcm9taXNlRGVmZXJyZWQ8dm9pZD4mJikgZmluYWw7Ci0KLSAgICB2b2lkIGVtdWxh
dGVQbGF0Zm9ybUV2ZW50KGNvbnN0IFN0cmluZyYgYWN0aW9uKSBmaW5hbDsKLQotICAgIHZvaWQg
cnVuVGFzayhGdW5jdGlvbjx2b2lkICgpPiYmKTsKLSAgICB2b2lkIHN0YXJ0UnVubmluZ1Rhc2tz
KCk7Ci0KLSAgICB2b2lkIGRvQ3JlYXRlT2ZmZXIoUlRDT2ZmZXJPcHRpb25zJiYpIGZpbmFsOwot
ICAgIHZvaWQgZG9DcmVhdGVBbnN3ZXIoUlRDQW5zd2VyT3B0aW9ucyYmKSBmaW5hbDsKLSAgICB2
b2lkIGRvU2V0TG9jYWxEZXNjcmlwdGlvbihSVENTZXNzaW9uRGVzY3JpcHRpb24mKSBmaW5hbDsK
LSAgICB2b2lkIGRvU2V0UmVtb3RlRGVzY3JpcHRpb24oUlRDU2Vzc2lvbkRlc2NyaXB0aW9uJikg
ZmluYWw7Ci0gICAgdm9pZCBkb0FkZEljZUNhbmRpZGF0ZShSVENJY2VDYW5kaWRhdGUmKSBmaW5h
bDsKLSAgICB2b2lkIGRvU3RvcCgpIGZpbmFsOwotCi0gICAgdm9pZCBjcmVhdGVPZmZlclRhc2so
Y29uc3QgUlRDT2ZmZXJPcHRpb25zJik7Ci0gICAgdm9pZCBjcmVhdGVBbnN3ZXJUYXNrKGNvbnN0
IFJUQ0Fuc3dlck9wdGlvbnMmKTsKLQotICAgIHZvaWQgc2V0TG9jYWxEZXNjcmlwdGlvblRhc2so
UmVmUHRyPFJUQ1Nlc3Npb25EZXNjcmlwdGlvbj4mJik7Ci0gICAgdm9pZCBzZXRSZW1vdGVEZXNj
cmlwdGlvblRhc2soUmVmUHRyPFJUQ1Nlc3Npb25EZXNjcmlwdGlvbj4mJik7Ci0KLSAgICB2b2lk
IGFkZEljZUNhbmRpZGF0ZVRhc2soUlRDSWNlQ2FuZGlkYXRlJik7Ci0KLSAgICB2b2lkIHJlcGxh
Y2VUcmFja1Rhc2soUlRDUnRwU2VuZGVyJiwgY29uc3QgU3RyaW5nJiBtaWQsIFJlZjxNZWRpYVN0
cmVhbVRyYWNrPiYmLCBET01Qcm9taXNlRGVmZXJyZWQ8dm9pZD4mKTsKLQotICAgIGJvb2wgbG9j
YWxEZXNjcmlwdGlvblR5cGVWYWxpZEZvclN0YXRlKFJUQ1NkcFR5cGUpIGNvbnN0OwotICAgIGJv
b2wgcmVtb3RlRGVzY3JpcHRpb25UeXBlVmFsaWRGb3JTdGF0ZShSVENTZHBUeXBlKSBjb25zdDsK
LQotICAgIE1lZGlhRW5kcG9pbnRTZXNzaW9uRGVzY3JpcHRpb24qIGludGVybmFsTG9jYWxEZXNj
cmlwdGlvbigpIGNvbnN0OwotICAgIE1lZGlhRW5kcG9pbnRTZXNzaW9uRGVzY3JpcHRpb24qIGlu
dGVybmFsUmVtb3RlRGVzY3JpcHRpb24oKSBjb25zdDsKLSAgICBSZWZQdHI8UlRDU2Vzc2lvbkRl
c2NyaXB0aW9uPiBjcmVhdGVSVENTZXNzaW9uRGVzY3JpcHRpb24oTWVkaWFFbmRwb2ludFNlc3Np
b25EZXNjcmlwdGlvbiopIGNvbnN0OwotCi0gICAgLy8gTWVkaWFFbmRwb2ludENsaWVudAotICAg
IHZvaWQgZ290RHRsc0ZpbmdlcnByaW50KGNvbnN0IFN0cmluZyYgZmluZ2VycHJpbnQsIGNvbnN0
IFN0cmluZyYgZmluZ2VycHJpbnRGdW5jdGlvbikgZmluYWw7Ci0gICAgdm9pZCBnb3RJY2VDYW5k
aWRhdGUoY29uc3QgU3RyaW5nJiBtaWQsIEljZUNhbmRpZGF0ZSYmKSBmaW5hbDsKLSAgICB2b2lk
IGRvbmVHYXRoZXJpbmdDYW5kaWRhdGVzKGNvbnN0IFN0cmluZyYgbWlkKSBmaW5hbDsKLSAgICB2
b2lkIGljZVRyYW5zcG9ydFN0YXRlQ2hhbmdlZChjb25zdCBTdHJpbmcmIG1pZCwgUlRDSWNlVHJh
bnNwb3J0U3RhdGUpIGZpbmFsOwotCi0gICAgc3RkOjp1bmlxdWVfcHRyPFJUQ0RhdGFDaGFubmVs
SGFuZGxlcj4gY3JlYXRlRGF0YUNoYW5uZWxIYW5kbGVyKGNvbnN0IFN0cmluZyYsIGNvbnN0IFJU
Q0RhdGFDaGFubmVsSW5pdCYpIGZpbmFsOwotCi0gICAgc3RkOjp1bmlxdWVfcHRyPE1lZGlhRW5k
cG9pbnQ+IG1fbWVkaWFFbmRwb2ludDsKLQotICAgIEZ1bmN0aW9uPHZvaWQgKCk+IG1faW5pdGlh
bERlZmVycmVkVGFzazsKLQotICAgIHN0ZDo6dW5pcXVlX3B0cjxTRFBQcm9jZXNzb3I+IG1fc2Rw
UHJvY2Vzc29yOwotCi0gICAgVmVjdG9yPE1lZGlhUGF5bG9hZD4gbV9kZWZhdWx0QXVkaW9QYXls
b2FkczsKLSAgICBWZWN0b3I8TWVkaWFQYXlsb2FkPiBtX2RlZmF1bHRWaWRlb1BheWxvYWRzOwot
Ci0gICAgU3RyaW5nIG1fY25hbWU7Ci0gICAgU3RyaW5nIG1faWNlVWZyYWc7Ci0gICAgU3RyaW5n
IG1faWNlUGFzc3dvcmQ7Ci0gICAgU3RyaW5nIG1fZHRsc0ZpbmdlcnByaW50OwotICAgIFN0cmlu
ZyBtX2R0bHNGaW5nZXJwcmludEZ1bmN0aW9uOwotICAgIHVuc2lnbmVkIG1fc2RwT2ZmZXJTZXNz
aW9uVmVyc2lvbiB7IDAgfTsKLSAgICB1bnNpZ25lZCBtX3NkcEFuc3dlclNlc3Npb25WZXJzaW9u
IHsgMCB9OwotCi0gICAgUmVmUHRyPE1lZGlhRW5kcG9pbnRTZXNzaW9uRGVzY3JpcHRpb24+IG1f
Y3VycmVudExvY2FsRGVzY3JpcHRpb247Ci0gICAgUmVmUHRyPE1lZGlhRW5kcG9pbnRTZXNzaW9u
RGVzY3JpcHRpb24+IG1fcGVuZGluZ0xvY2FsRGVzY3JpcHRpb247Ci0KLSAgICBSZWZQdHI8TWVk
aWFFbmRwb2ludFNlc3Npb25EZXNjcmlwdGlvbj4gbV9jdXJyZW50UmVtb3RlRGVzY3JpcHRpb247
Ci0gICAgUmVmUHRyPE1lZGlhRW5kcG9pbnRTZXNzaW9uRGVzY3JpcHRpb24+IG1fcGVuZGluZ1Jl
bW90ZURlc2NyaXB0aW9uOwotCi0gICAgSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxNZWRpYVN0cmVh
bT4+IG1fcmVtb3RlU3RyZWFtTWFwOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0j
ZW5kaWYgLy8gRU5BQkxFKFdFQl9SVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL21lZGlhc3RyZWFtL01lZGlhRW5kcG9pbnRTZXNzaW9uRGVzY3JpcHRpb24uY3BwIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYUVuZHBvaW50U2Vzc2lvbkRlc2Ny
aXB0aW9uLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWM2MDZmNTBjMmE5ZGQ3
ZWU4MTIzY2JlMzM5Zjc0N2Y3NDQwZmU3OS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlh
RW5kcG9pbnRTZXNzaW9uRGVzY3JpcHRpb24uY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTE3ICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUsIDIwMTYgRXJpY3Nzb24gQUIuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
Ci0gKiAgICBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlCi0gKiAgICBkaXN0cmlidXRpb24uCi0gKiAzLiBOZWl0aGVyIHRoZSBuYW1l
IG9mIEVyaWNzc29uIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICogICAgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlz
Ci0gKiAgICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
LSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJNZWRpYUVuZHBv
aW50U2Vzc2lvbkRlc2NyaXB0aW9uLmgiCi0KLSNpZiBFTkFCTEUoV0VCX1JUQykKLQotI2luY2x1
ZGUgIlNEUFByb2Nlc3Nvci5oIgotI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Ci0KLSNkZWZpbmUgU1RSSU5HX0ZVTkNUSU9OKG5hbWUpIFwKLSAg
ICBzdGF0aWMgY29uc3QgU3RyaW5nJiBuYW1lIyNTdHJpbmcoKSBcCi0gICAgeyBcCi0gICAgICAg
IHN0YXRpYyBOZXZlckRlc3Ryb3llZDxjb25zdCBTdHJpbmc+IG5hbWUoTUFLRV9TVEFUSUNfU1RS
SU5HX0lNUEwoI25hbWUpKTsgXAotICAgICAgICByZXR1cm4gbmFtZTsgXAotICAgIH0KLQotU1RS
SU5HX0ZVTkNUSU9OKG9mZmVyKQotU1RSSU5HX0ZVTkNUSU9OKHByYW5zd2VyKQotU1RSSU5HX0ZV
TkNUSU9OKGFuc3dlcikKLVNUUklOR19GVU5DVElPTihyb2xsYmFjaykKLQotUmVmPE1lZGlhRW5k
cG9pbnRTZXNzaW9uRGVzY3JpcHRpb24+IE1lZGlhRW5kcG9pbnRTZXNzaW9uRGVzY3JpcHRpb246
OmNyZWF0ZShSVENTZHBUeXBlIHR5cGUsIFJlZlB0cjxNZWRpYUVuZHBvaW50U2Vzc2lvbkNvbmZp
Z3VyYXRpb24+JiYgY29uZmlndXJhdGlvbikKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBN
ZWRpYUVuZHBvaW50U2Vzc2lvbkRlc2NyaXB0aW9uKHR5cGUsIFdURk1vdmUoY29uZmlndXJhdGlv
biksIG51bGxwdHIpKTsKLX0KLQotRXhjZXB0aW9uT3I8UmVmPE1lZGlhRW5kcG9pbnRTZXNzaW9u
RGVzY3JpcHRpb24+PiBNZWRpYUVuZHBvaW50U2Vzc2lvbkRlc2NyaXB0aW9uOjpjcmVhdGUoUmVm
UHRyPFJUQ1Nlc3Npb25EZXNjcmlwdGlvbj4mJiBydGNEZXNjcmlwdGlvbiwgY29uc3QgU0RQUHJv
Y2Vzc29yJiBzZHBQcm9jZXNzb3IpCi17Ci0gICAgUmVmUHRyPE1lZGlhRW5kcG9pbnRTZXNzaW9u
Q29uZmlndXJhdGlvbj4gY29uZmlndXJhdGlvbjsKLSAgICBhdXRvIHJlc3VsdCA9IHNkcFByb2Nl
c3Nvci5wYXJzZShydGNEZXNjcmlwdGlvbi0+c2RwKCksIGNvbmZpZ3VyYXRpb24pOwotICAgIGlm
IChyZXN1bHQgIT0gU0RQUHJvY2Vzc29yOjpSZXN1bHQ6OlN1Y2Nlc3MpIHsKLSAgICAgICAgaWYg
KHJlc3VsdCA9PSBTRFBQcm9jZXNzb3I6OlJlc3VsdDo6UGFyc2VFcnJvcikKLSAgICAgICAgICAg
IHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3IsIEFTQ0lJTGl0ZXJhbCgiU0RQ
IGNvbnRlbnQgaXMgaW52YWxpZCIpIH07Ci0gICAgICAgIExPR19FUlJPUigiU0RQUHJvY2Vzc29y
IGludGVybmFsIGVycm9yIik7Ci0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBBYm9ydEVycm9y
LCBBU0NJSUxpdGVyYWwoIkludGVybmFsIGVycm9yIikgfTsKLSAgICB9Ci0gICAgcmV0dXJuIGFk
b3B0UmVmKCpuZXcgTWVkaWFFbmRwb2ludFNlc3Npb25EZXNjcmlwdGlvbihydGNEZXNjcmlwdGlv
bi0+dHlwZSgpLCBXVEZNb3ZlKGNvbmZpZ3VyYXRpb24pLCBXVEZNb3ZlKHJ0Y0Rlc2NyaXB0aW9u
KSkpOwotfQotCi1SZWZQdHI8UlRDU2Vzc2lvbkRlc2NyaXB0aW9uPiBNZWRpYUVuZHBvaW50U2Vz
c2lvbkRlc2NyaXB0aW9uOjp0b1JUQ1Nlc3Npb25EZXNjcmlwdGlvbihjb25zdCBTRFBQcm9jZXNz
b3ImIHNkcFByb2Nlc3NvcikgY29uc3QKLXsKLSAgICBTdHJpbmcgc2RwU3RyaW5nOwotICAgIFNE
UFByb2Nlc3Nvcjo6UmVzdWx0IHJlc3VsdCA9IHNkcFByb2Nlc3Nvci5nZW5lcmF0ZSgqbV9jb25m
aWd1cmF0aW9uLCBzZHBTdHJpbmcpOwotICAgIGlmIChyZXN1bHQgIT0gU0RQUHJvY2Vzc29yOjpS
ZXN1bHQ6OlN1Y2Nlc3MpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJTRFBQcm9jZXNzb3IgaW50ZXJu
YWwgZXJyb3IiKTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAgLy8gSWYg
dGhpcyBvYmplY3Qgd2FzIGNyZWF0ZWQgZnJvbSBhbiBSVENTZXNzaW9uRGVzY3JpcHRpb24sIHRv
UlRDU2Vzc2lvbkRlc2NyaXB0aW9uIHdpbGwgcmV0dXJuCi0gICAgLy8gdGhhdCBzYW1lIGluc3Rh
bmNlIGJ1dCB3aXRoIGFuIHVwZGF0ZWQgc2RwLiBJdCBpcyB1c2VkIGZvciBSVENQZWVyQ29ubmVj
dGlvbidzIGRlc2NyaXB0aW9uCi0gICAgLy8gYXRyaWJ1dGVzIChlLmcuIGxvY2FsRGVzY3JpcHRp
b24gYW5kIHBlbmRpbmdMb2NhbERlc2NyaXB0aW9uKS4KLSAgICBpZiAobV9ydGNEZXNjcmlwdGlv
bikgewotICAgICAgICBtX3J0Y0Rlc2NyaXB0aW9uLT5zZXRTZHAoV1RGTW92ZShzZHBTdHJpbmcp
KTsKLSAgICAgICAgcmV0dXJuIG1fcnRjRGVzY3JpcHRpb247Ci0gICAgfQotCi0gICAgcmV0dXJu
IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbjo6Y3JlYXRlKG1fdHlwZSwgV1RGTW92ZShzZHBTdHJpbmcp
KTsKLX0KLQotLy8gRklYTUU6IHVuaWZ5IHdpdGggTGliV2ViUlRDTWVkaWFFbmRwb2ludCBzZXNz
aW9uRGVzY3JpcHRpb25UeXBlKCkuCi1jb25zdCBTdHJpbmcmIE1lZGlhRW5kcG9pbnRTZXNzaW9u
RGVzY3JpcHRpb246OnR5cGVTdHJpbmcoKSBjb25zdAotewotICAgIHN3aXRjaCAobV90eXBlKSB7
Ci0gICAgY2FzZSBSVENTZHBUeXBlOjpPZmZlcjoKLSAgICAgICAgcmV0dXJuIG9mZmVyU3RyaW5n
KCk7Ci0gICAgY2FzZSBSVENTZHBUeXBlOjpQcmFuc3dlcjoKLSAgICAgICAgcmV0dXJuIHByYW5z
d2VyU3RyaW5nKCk7Ci0gICAgY2FzZSBSVENTZHBUeXBlOjpBbnN3ZXI6Ci0gICAgICAgIHJldHVy
biBhbnN3ZXJTdHJpbmcoKTsKLSAgICBjYXNlIFJUQ1NkcFR5cGU6OlJvbGxiYWNrOgotICAgICAg
ICByZXR1cm4gcm9sbGJhY2tTdHJpbmcoKTsKLSAgICB9Ci0KLSAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKLSAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKLX0KLQotYm9vbCBNZWRpYUVuZHBvaW50
U2Vzc2lvbkRlc2NyaXB0aW9uOjppc0xhdGVyVGhhbihNZWRpYUVuZHBvaW50U2Vzc2lvbkRlc2Ny
aXB0aW9uKiBvdGhlcikgY29uc3QKLXsKLSAgICByZXR1cm4gIW90aGVyIHx8IGNvbmZpZ3VyYXRp
b24oKS0+c2Vzc2lvblZlcnNpb24oKSA+IG90aGVyLT5jb25maWd1cmF0aW9uKCktPnNlc3Npb25W
ZXJzaW9uKCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJM
RShXRUJfUlRDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVh
bS9NZWRpYUVuZHBvaW50U2Vzc2lvbkRlc2NyaXB0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL21lZGlhc3RyZWFtL01lZGlhRW5kcG9pbnRTZXNzaW9uRGVzY3JpcHRpb24uaApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWQwNWM3MjkyY2VjMjkxZGU5ZjEzMTFmMTM4OGQzN2Ri
YWEzYzY3NS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhRW5kcG9pbnRTZXNzaW9uRGVz
Y3JpcHRpb24uaAorKysgL2Rldi9udWxsCkBAIC0xLDc0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTUsIDIwMTYgRXJpY3Nzb24gQUIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqICAgIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqICAg
IGRpc3RyaWJ1dGlvbi4KLSAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgRXJpY3Nzb24gbm9yIHRo
ZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0gKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSAqICAgIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0g
KiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3By
YWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUoV0VCX1JUQykKLQotI2luY2x1ZGUgIkV4Y2VwdGlvbk9y
LmgiCi0jaW5jbHVkZSAiUlRDU2Vzc2lvbkRlc2NyaXB0aW9uLmgiCi0jaW5jbHVkZSA8d3RmL1Jl
ZkNvdW50ZWQuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotY2xhc3MgTWVkaWFFbmRwb2ludFNlc3Npb25Db25maWd1cmF0aW9uOwotY2xhc3MgU0RQ
UHJvY2Vzc29yOwotCi1jbGFzcyBNZWRpYUVuZHBvaW50U2Vzc2lvbkRlc2NyaXB0aW9uIDogcHVi
bGljIFJlZkNvdW50ZWQ8TWVkaWFFbmRwb2ludFNlc3Npb25EZXNjcmlwdGlvbj4gewotcHVibGlj
OgotICAgIHN0YXRpYyBSZWY8TWVkaWFFbmRwb2ludFNlc3Npb25EZXNjcmlwdGlvbj4gY3JlYXRl
KFJUQ1NkcFR5cGUsIFJlZlB0cjxNZWRpYUVuZHBvaW50U2Vzc2lvbkNvbmZpZ3VyYXRpb24+JiYp
OwotICAgIHN0YXRpYyBFeGNlcHRpb25PcjxSZWY8TWVkaWFFbmRwb2ludFNlc3Npb25EZXNjcmlw
dGlvbj4+IGNyZWF0ZShSZWZQdHI8UlRDU2Vzc2lvbkRlc2NyaXB0aW9uPiYmLCBjb25zdCBTRFBQ
cm9jZXNzb3ImKTsKLSAgICB2aXJ0dWFsIH5NZWRpYUVuZHBvaW50U2Vzc2lvbkRlc2NyaXB0aW9u
KCkgeyB9IC8vIEZJWE1FOiBXaHkgaXMgdGhpcyB2aXJ0dWFsPyBUaGVyZSBhcmUgbm8gb3RoZXIg
dmlydHVhbCBmdW5jdGlvbnMgaW4gdGhpcyBjbGFzcy4KLQotICAgIFJlZlB0cjxSVENTZXNzaW9u
RGVzY3JpcHRpb24+IHRvUlRDU2Vzc2lvbkRlc2NyaXB0aW9uKGNvbnN0IFNEUFByb2Nlc3NvciYp
IGNvbnN0OwotCi0gICAgUlRDU2RwVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9
Ci0gICAgY29uc3QgU3RyaW5nJiB0eXBlU3RyaW5nKCkgY29uc3Q7Ci0gICAgTWVkaWFFbmRwb2lu
dFNlc3Npb25Db25maWd1cmF0aW9uKiBjb25maWd1cmF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9j
b25maWd1cmF0aW9uLmdldCgpOyB9Ci0KLSAgICBib29sIGlzTGF0ZXJUaGFuKE1lZGlhRW5kcG9p
bnRTZXNzaW9uRGVzY3JpcHRpb24qIG90aGVyKSBjb25zdDsKLQotcHJpdmF0ZToKLSAgICBNZWRp
YUVuZHBvaW50U2Vzc2lvbkRlc2NyaXB0aW9uKFJUQ1NkcFR5cGUgdHlwZSwgUmVmUHRyPE1lZGlh
RW5kcG9pbnRTZXNzaW9uQ29uZmlndXJhdGlvbj4mJiBjb25maWd1cmF0aW9uLCBSZWZQdHI8UlRD
U2Vzc2lvbkRlc2NyaXB0aW9uPiYmIHJ0Y0Rlc2NyaXB0aW9uKQotICAgICAgICA6IG1fdHlwZSh0
eXBlKQotICAgICAgICAsIG1fY29uZmlndXJhdGlvbihjb25maWd1cmF0aW9uKQotICAgICAgICAs
IG1fcnRjRGVzY3JpcHRpb24oV1RGTW92ZShydGNEZXNjcmlwdGlvbikpCi0gICAgeyB9Ci0KLSAg
ICBSVENTZHBUeXBlIG1fdHlwZTsKLSAgICBSZWZQdHI8TWVkaWFFbmRwb2ludFNlc3Npb25Db25m
aWd1cmF0aW9uPiBtX2NvbmZpZ3VyYXRpb247Ci0KLSAgICBSZWZQdHI8UlRDU2Vzc2lvbkRlc2Ny
aXB0aW9uPiBtX3J0Y0Rlc2NyaXB0aW9uOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQot
Ci0jZW5kaWYgLy8gRU5BQkxFKFdFQl9SVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL21lZGlhc3RyZWFtL1NEUFByb2Nlc3Nvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL21lZGlhc3RyZWFtL1NEUFByb2Nlc3Nvci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDcxNWNmMmYyODg4ZmY3NDA3ZTVjNjVkYzI4YjNiY2RkNWIyNzg1MTIuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9tZWRpYXN0cmVhbS9TRFBQcm9jZXNzb3IuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNTYy
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUsIDIwMTYgRXJpY3Nzb24gQUIuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIKLSAqICAgIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqICAgIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIE5laXRoZXIg
dGhlIG5hbWUgb2YgRXJpY3Nzb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0g
KiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tIHRoaXMKLSAqICAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
LSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxF
KFdFQl9SVEMpCi0jaW5jbHVkZSAiU0RQUHJvY2Vzc29yLmgiCi0KLSNpbmNsdWRlICJDb21tb25W
TS5oIgotI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRl
ICJTRFBQcm9jZXNzb3JTY3JpcHRSZXNvdXJjZS5oIgotI2luY2x1ZGUgIlNjcmlwdENvbnRyb2xs
ZXIuaCIKLSNpbmNsdWRlICJTY3JpcHRTb3VyY2VDb2RlLmgiCi0jaW5jbHVkZSAiaW5zcGVjdG9y
L0luc3BlY3RvclZhbHVlcy5oIgotI2luY2x1ZGUgPGJpbmRpbmdzL1NjcmlwdE9iamVjdC5oPgot
I2luY2x1ZGUgPHJ1bnRpbWUvQ2F0Y2hTY29wZS5oPgotI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ry
b3llZC5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0KLSNkZWZpbmUgU1RSSU5HX0ZVTkNUSU9OKG5hbWUpIFwKLSAgICBzdGF0aWMgY29uc3Qg
U3RyaW5nJiBuYW1lIyNTdHJpbmcoKSBcCi0gICAgeyBcCi0gICAgICAgIHN0YXRpYyBOZXZlckRl
c3Ryb3llZDxjb25zdCBTdHJpbmc+IG5hbWUoTUFLRV9TVEFUSUNfU1RSSU5HX0lNUEwoI25hbWUp
KTsgXAotICAgICAgICByZXR1cm4gbmFtZTsgXAotICAgIH0KLQotU1RSSU5HX0ZVTkNUSU9OKGFk
ZHJlc3MpCi1TVFJJTkdfRlVOQ1RJT04oYXB0KQotU1RSSU5HX0ZVTkNUSU9OKGJ1bmRsZVBvbGlj
eSkKLVNUUklOR19GVU5DVElPTihjYW5kaWRhdGVzKQotU1RSSU5HX0ZVTkNUSU9OKGNjbWZpcikK
LVNUUklOR19GVU5DVElPTihjaGFubmVscykKLVNUUklOR19GVU5DVElPTihjbG9ja1JhdGUpCi1T
VFJJTkdfRlVOQ1RJT04oY25hbWUpCi1TVFJJTkdfRlVOQ1RJT04oY29tcG9uZW50SWQpCi1TVFJJ
TkdfRlVOQ1RJT04oZHRscykKLVNUUklOR19GVU5DVElPTihlbmNvZGluZ05hbWUpCi1TVFJJTkdf
RlVOQ1RJT04oZmluZ2VycHJpbnQpCi1TVFJJTkdfRlVOQ1RJT04oZmluZ2VycHJpbnRIYXNoRnVu
Y3Rpb24pCi1TVFJJTkdfRlVOQ1RJT04oZm91bmRhdGlvbikKLVNUUklOR19GVU5DVElPTihpY2Up
Ci1TVFJJTkdfRlVOQ1RJT04obWVkaWFEZXNjcmlwdGlvbnMpCi1TVFJJTkdfRlVOQ1RJT04obWVk
aWFTdHJlYW1JZCkKLVNUUklOR19GVU5DVElPTihtZWRpYVN0cmVhbVRyYWNrSWQpCi1TVFJJTkdf
RlVOQ1RJT04obWlkKQotU1RSSU5HX0ZVTkNUSU9OKG1vZGUpCi1TVFJJTkdfRlVOQ1RJT04obXV4
KQotU1RSSU5HX0ZVTkNUSU9OKG5hY2spCi1TVFJJTkdfRlVOQ1RJT04obmFja3BsaSkKLVNUUklO
R19GVU5DVElPTihvcmlnaW5hdG9yKQotU1RSSU5HX0ZVTkNUSU9OKHBhY2tldGl6YXRpb25Nb2Rl
KQotU1RSSU5HX0ZVTkNUSU9OKHBhcmFtZXRlcnMpCi1TVFJJTkdfRlVOQ1RJT04ocGFzc3dvcmQp
Ci1TVFJJTkdfRlVOQ1RJT04ocGF5bG9hZHMpCi1TVFJJTkdfRlVOQ1RJT04ocG9ydCkKLVNUUklO
R19GVU5DVElPTihwcmlvcml0eSkKLVNUUklOR19GVU5DVElPTihyZWxhdGVkQWRkcmVzcykKLVNU
UklOR19GVU5DVElPTihyZWxhdGVkUG9ydCkKLVNUUklOR19GVU5DVElPTihydGNwKQotU1RSSU5H
X0ZVTkNUSU9OKHJ0Y3BBZGRyZXNzKQotU1RSSU5HX0ZVTkNUSU9OKHJ0Y3BQb3J0KQotU1RSSU5H
X0ZVTkNUSU9OKHJ0eFRpbWUpCi1TVFJJTkdfRlVOQ1RJT04oc2Vzc2lvbklkKQotU1RSSU5HX0ZV
TkNUSU9OKHNlc3Npb25WZXJzaW9uKQotU1RSSU5HX0ZVTkNUSU9OKHNldHVwKQotU1RSSU5HX0ZV
TkNUSU9OKHNzcmNzKQotU1RSSU5HX0ZVTkNUSU9OKHRjcFR5cGUpCi1TVFJJTkdfRlVOQ1RJT04o
dHJhbnNwb3J0KQotU1RSSU5HX0ZVTkNUSU9OKHR5cGUpCi1TVFJJTkdfRlVOQ1RJT04odWZyYWcp
Ci0KLVNEUFByb2Nlc3Nvcjo6U0RQUHJvY2Vzc29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNv
bnRleHQpCi0gICAgOiBDb250ZXh0RGVzdHJ1Y3Rpb25PYnNlcnZlcihjb250ZXh0KQotewotfQot
Ci0vLyBOb3RlIHRoYXQgTWVkaWFFbmRwb2ludFNlc3Npb25Db25maWd1cmF0aW9uIGlzIGEgImZs
YXR0ZXIiIHN0cnVjdHVyZSB0aGF0IHRoZSBKU09OIHJlcHJlc2VudGF0aW9uLiBGb3IKLS8vIGV4
YW1wbGUsIHRoZSBKU09OIHJlcHJlc2VudGF0aW9uIGhhcyBhbiAiaWNlIiBvYmplY3Qgd2hpY2gg
Y29sbGVjdHMgYSBzZXQgb2YgcHJvcGVydGllcyB1bmRlciBhCi0vLyBuYW1lc3BhY2UuIE1lZGlh
RW5kcG9pbnRTZXNzaW9uQ29uZmlndXJhdGlvbiBoYXMgImljZSItcHJlZml4ZXMgb24gdGhlIGNv
cnJlc3BvbmRpbmcgcHJvcGVydGllcy4KLQotc3RhdGljIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IGNyZWF0ZUNhbmRpZGF0ZU9iamVjdChjb25zdCBJY2VDYW5kaWRhdGUmIGNhbmRpZGF0ZSkKLXsK
LSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBjYW5kaWRhdGVPYmplY3QgPSBJbnNwZWN0b3JP
YmplY3Q6OmNyZWF0ZSgpOwotCi0gICAgY2FuZGlkYXRlT2JqZWN0LT5zZXRTdHJpbmcodHlwZVN0
cmluZygpLCBjYW5kaWRhdGUudHlwZSk7Ci0gICAgY2FuZGlkYXRlT2JqZWN0LT5zZXRTdHJpbmco
Zm91bmRhdGlvblN0cmluZygpLCBjYW5kaWRhdGUuZm91bmRhdGlvbik7Ci0gICAgY2FuZGlkYXRl
T2JqZWN0LT5zZXRJbnRlZ2VyKGNvbXBvbmVudElkU3RyaW5nKCksIGNhbmRpZGF0ZS5jb21wb25l
bnRJZCk7Ci0gICAgY2FuZGlkYXRlT2JqZWN0LT5zZXRTdHJpbmcodHJhbnNwb3J0U3RyaW5nKCks
IGNhbmRpZGF0ZS50cmFuc3BvcnQpOwotICAgIGNhbmRpZGF0ZU9iamVjdC0+c2V0SW50ZWdlcihw
cmlvcml0eVN0cmluZygpLCBjYW5kaWRhdGUucHJpb3JpdHkpOwotICAgIGNhbmRpZGF0ZU9iamVj
dC0+c2V0U3RyaW5nKGFkZHJlc3NTdHJpbmcoKSwgY2FuZGlkYXRlLmFkZHJlc3MpOwotICAgIGNh
bmRpZGF0ZU9iamVjdC0+c2V0SW50ZWdlcihwb3J0U3RyaW5nKCksIGNhbmRpZGF0ZS5wb3J0KTsK
LSAgICBpZiAoIWNhbmRpZGF0ZS50Y3BUeXBlLmlzRW1wdHkoKSkKLSAgICAgICAgY2FuZGlkYXRl
T2JqZWN0LT5zZXRTdHJpbmcodGNwVHlwZVN0cmluZygpLCBjYW5kaWRhdGUudGNwVHlwZSk7Ci0g
ICAgaWYgKGNhbmRpZGF0ZS50eXBlLmNvbnZlcnRUb0FTQ0lJVXBwZXJjYXNlKCkgIT0gIkhPU1Qi
KSB7Ci0gICAgICAgIGNhbmRpZGF0ZU9iamVjdC0+c2V0U3RyaW5nKHJlbGF0ZWRBZGRyZXNzU3Ry
aW5nKCksIGNhbmRpZGF0ZS5yZWxhdGVkQWRkcmVzcyk7Ci0gICAgICAgIGNhbmRpZGF0ZU9iamVj
dC0+c2V0SW50ZWdlcihyZWxhdGVkUG9ydFN0cmluZygpLCBjYW5kaWRhdGUucmVsYXRlZFBvcnQp
OwotICAgIH0KLQotICAgIHJldHVybiBjYW5kaWRhdGVPYmplY3Q7Ci19Ci0KLXN0YXRpYyBJY2VD
YW5kaWRhdGUgY3JlYXRlQ2FuZGlkYXRlKGNvbnN0IEluc3BlY3Rvck9iamVjdCYgY2FuZGlkYXRl
T2JqZWN0KQotewotICAgIEljZUNhbmRpZGF0ZSBjYW5kaWRhdGU7Ci0gICAgU3RyaW5nIHN0cmlu
Z1ZhbHVlOwotICAgIHVuc2lnbmVkIGludFZhbHVlOwotCi0gICAgaWYgKGNhbmRpZGF0ZU9iamVj
dC5nZXRTdHJpbmcodHlwZVN0cmluZygpLCBzdHJpbmdWYWx1ZSkpCi0gICAgICAgIGNhbmRpZGF0
ZS50eXBlID0gc3RyaW5nVmFsdWU7Ci0KLSAgICBpZiAoY2FuZGlkYXRlT2JqZWN0LmdldFN0cmlu
Zyhmb3VuZGF0aW9uU3RyaW5nKCksIHN0cmluZ1ZhbHVlKSkKLSAgICAgICAgY2FuZGlkYXRlLmZv
dW5kYXRpb24gPSBzdHJpbmdWYWx1ZTsKLQotICAgIGlmIChjYW5kaWRhdGVPYmplY3QuZ2V0SW50
ZWdlcihjb21wb25lbnRJZFN0cmluZygpLCBpbnRWYWx1ZSkpCi0gICAgICAgIGNhbmRpZGF0ZS5j
b21wb25lbnRJZCA9IGludFZhbHVlOwotCi0gICAgaWYgKGNhbmRpZGF0ZU9iamVjdC5nZXRTdHJp
bmcodHJhbnNwb3J0U3RyaW5nKCksIHN0cmluZ1ZhbHVlKSkKLSAgICAgICAgY2FuZGlkYXRlLnRy
YW5zcG9ydCA9IHN0cmluZ1ZhbHVlOwotCi0gICAgaWYgKGNhbmRpZGF0ZU9iamVjdC5nZXRJbnRl
Z2VyKHByaW9yaXR5U3RyaW5nKCksIGludFZhbHVlKSkKLSAgICAgICAgY2FuZGlkYXRlLnByaW9y
aXR5ID0gaW50VmFsdWU7Ci0KLSAgICBpZiAoY2FuZGlkYXRlT2JqZWN0LmdldFN0cmluZyhhZGRy
ZXNzU3RyaW5nKCksIHN0cmluZ1ZhbHVlKSkKLSAgICAgICAgY2FuZGlkYXRlLmFkZHJlc3MgPSBz
dHJpbmdWYWx1ZTsKLQotICAgIGlmIChjYW5kaWRhdGVPYmplY3QuZ2V0SW50ZWdlcihwb3J0U3Ry
aW5nKCksIGludFZhbHVlKSkKLSAgICAgICAgY2FuZGlkYXRlLnBvcnQgPSBpbnRWYWx1ZTsKLQot
ICAgIGlmIChjYW5kaWRhdGVPYmplY3QuZ2V0U3RyaW5nKHRjcFR5cGVTdHJpbmcoKSwgc3RyaW5n
VmFsdWUpKQotICAgICAgICBjYW5kaWRhdGUudGNwVHlwZSA9IHN0cmluZ1ZhbHVlOwotCi0gICAg
aWYgKGNhbmRpZGF0ZU9iamVjdC5nZXRTdHJpbmcocmVsYXRlZEFkZHJlc3NTdHJpbmcoKSwgc3Ry
aW5nVmFsdWUpKQotICAgICAgICBjYW5kaWRhdGUucmVsYXRlZEFkZHJlc3MgPSBzdHJpbmdWYWx1
ZTsKLQotICAgIGlmIChjYW5kaWRhdGVPYmplY3QuZ2V0SW50ZWdlcihyZWxhdGVkUG9ydFN0cmlu
ZygpLCBpbnRWYWx1ZSkpCi0gICAgICAgIGNhbmRpZGF0ZS5yZWxhdGVkUG9ydCA9IGludFZhbHVl
OwotCi0gICAgcmV0dXJuIGNhbmRpZGF0ZTsKLX0KLQotc3RhdGljIFJlZlB0cjxNZWRpYUVuZHBv
aW50U2Vzc2lvbkNvbmZpZ3VyYXRpb24+IGNvbmZpZ3VyYXRpb25Gcm9tSlNPTihjb25zdCBTdHJp
bmcmIGpzb24pCi17Ci0gICAgUmVmUHRyPEluc3BlY3RvclZhbHVlPiB2YWx1ZTsKLSAgICBpZiAo
IUluc3BlY3RvclZhbHVlOjpwYXJzZUpTT04oanNvbiwgdmFsdWUpKQotICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLQotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG9iamVjdDsKLSAgICBpZiAo
IXZhbHVlLT5hc09iamVjdChvYmplY3QpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAg
IFJlZlB0cjxNZWRpYUVuZHBvaW50U2Vzc2lvbkNvbmZpZ3VyYXRpb24+IGNvbmZpZ3VyYXRpb24g
PSBNZWRpYUVuZHBvaW50U2Vzc2lvbkNvbmZpZ3VyYXRpb246OmNyZWF0ZSgpOwotCi0gICAgU3Ry
aW5nIHN0cmluZ1ZhbHVlOwotICAgIHVuc2lnbmVkIGludFZhbHVlOwotICAgIGJvb2wgYm9vbFZh
bHVlOwotCi0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gb3JpZ2luYXRvck9iamVjdCA9IElu
c3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgaWYgKG9iamVjdC0+Z2V0T2JqZWN0KG9yaWdp
bmF0b3JTdHJpbmcoKSwgb3JpZ2luYXRvck9iamVjdCkpIHsKLSAgICAgICAgaWYgKG9yaWdpbmF0
b3JPYmplY3QtPmdldFN0cmluZyhzZXNzaW9uSWRTdHJpbmcoKSwgc3RyaW5nVmFsdWUpKQotICAg
ICAgICAgICAgY29uZmlndXJhdGlvbi0+c2V0U2Vzc2lvbklkKHN0cmluZ1ZhbHVlLnRvSW50NjQo
KSk7Ci0gICAgICAgIGlmIChvcmlnaW5hdG9yT2JqZWN0LT5nZXRJbnRlZ2VyKHNlc3Npb25WZXJz
aW9uU3RyaW5nKCksIGludFZhbHVlKSkKLSAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24tPnNldFNl
c3Npb25WZXJzaW9uKGludFZhbHVlKTsKLSAgICB9Ci0KLSAgICBSZWZQdHI8SW5zcGVjdG9yQXJy
YXk+IG1lZGlhRGVzY3JpcHRpb25zQXJyYXkgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7Ci0g
ICAgb2JqZWN0LT5nZXRBcnJheShtZWRpYURlc2NyaXB0aW9uc1N0cmluZygpLCBtZWRpYURlc2Ny
aXB0aW9uc0FycmF5KTsKLQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtZWRpYURlc2Ny
aXB0aW9uc0FycmF5LT5sZW5ndGgoKTsgKytpKSB7Ci0gICAgICAgIFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IG1lZGlhRGVzY3JpcHRpb25PYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgp
OwotICAgICAgICBtZWRpYURlc2NyaXB0aW9uc0FycmF5LT5nZXQoaSktPmFzT2JqZWN0KG1lZGlh
RGVzY3JpcHRpb25PYmplY3QpOwotCi0gICAgICAgIFBlZXJNZWRpYURlc2NyaXB0aW9uIG1lZGlh
RGVzY3JpcHRpb247Ci0KLSAgICAgICAgaWYgKG1lZGlhRGVzY3JpcHRpb25PYmplY3QtPmdldFN0
cmluZyh0eXBlU3RyaW5nKCksIHN0cmluZ1ZhbHVlKSkKLSAgICAgICAgICAgIG1lZGlhRGVzY3Jp
cHRpb24udHlwZSA9IHN0cmluZ1ZhbHVlOwotCi0gICAgICAgIGlmIChtZWRpYURlc2NyaXB0aW9u
T2JqZWN0LT5nZXRJbnRlZ2VyKHBvcnRTdHJpbmcoKSwgaW50VmFsdWUpKQotICAgICAgICAgICAg
bWVkaWFEZXNjcmlwdGlvbi5wb3J0ID0gaW50VmFsdWU7Ci0KLSAgICAgICAgaWYgKG1lZGlhRGVz
Y3JpcHRpb25PYmplY3QtPmdldFN0cmluZyhhZGRyZXNzU3RyaW5nKCksIHN0cmluZ1ZhbHVlKSkK
LSAgICAgICAgICAgIG1lZGlhRGVzY3JpcHRpb24uYWRkcmVzcyA9IHN0cmluZ1ZhbHVlOwotCi0g
ICAgICAgIGlmIChtZWRpYURlc2NyaXB0aW9uT2JqZWN0LT5nZXRTdHJpbmcobW9kZVN0cmluZygp
LCBzdHJpbmdWYWx1ZSkpCi0gICAgICAgICAgICBtZWRpYURlc2NyaXB0aW9uLm1vZGUgPSBzdHJp
bmdWYWx1ZTsKLQotICAgICAgICBpZiAobWVkaWFEZXNjcmlwdGlvbk9iamVjdC0+Z2V0U3RyaW5n
KG1pZFN0cmluZygpLCBzdHJpbmdWYWx1ZSkpCi0gICAgICAgICAgICBtZWRpYURlc2NyaXB0aW9u
Lm1pZCA9IHN0cmluZ1ZhbHVlOwotCi0gICAgICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcGF5
bG9hZHNBcnJheSA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKLSAgICAgICAgbWVkaWFEZXNj
cmlwdGlvbk9iamVjdC0+Z2V0QXJyYXkocGF5bG9hZHNTdHJpbmcoKSwgcGF5bG9hZHNBcnJheSk7
Ci0KLSAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IHBheWxvYWRzQXJyYXktPmxlbmd0
aCgpOyArK2opIHsKLSAgICAgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBheWxvYWRz
T2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKLSAgICAgICAgICAgIHBheWxvYWRz
QXJyYXktPmdldChqKS0+YXNPYmplY3QocGF5bG9hZHNPYmplY3QpOwotCi0gICAgICAgICAgICBN
ZWRpYVBheWxvYWQgcGF5bG9hZDsKLQotICAgICAgICAgICAgaWYgKHBheWxvYWRzT2JqZWN0LT5n
ZXRJbnRlZ2VyKHR5cGVTdHJpbmcoKSwgaW50VmFsdWUpKQotICAgICAgICAgICAgICAgIHBheWxv
YWQudHlwZSA9IGludFZhbHVlOwotCi0gICAgICAgICAgICBpZiAocGF5bG9hZHNPYmplY3QtPmdl
dFN0cmluZyhlbmNvZGluZ05hbWVTdHJpbmcoKSwgc3RyaW5nVmFsdWUpKQotICAgICAgICAgICAg
ICAgIHBheWxvYWQuZW5jb2RpbmdOYW1lID0gc3RyaW5nVmFsdWU7Ci0KLSAgICAgICAgICAgIGlm
IChwYXlsb2Fkc09iamVjdC0+Z2V0SW50ZWdlcihjbG9ja1JhdGVTdHJpbmcoKSwgaW50VmFsdWUp
KQotICAgICAgICAgICAgICAgIHBheWxvYWQuY2xvY2tSYXRlID0gaW50VmFsdWU7Ci0KLSAgICAg
ICAgICAgIGlmIChwYXlsb2Fkc09iamVjdC0+Z2V0SW50ZWdlcihjaGFubmVsc1N0cmluZygpLCBp
bnRWYWx1ZSkpCi0gICAgICAgICAgICAgICAgcGF5bG9hZC5jaGFubmVscyA9IGludFZhbHVlOwot
Ci0gICAgICAgICAgICBpZiAocGF5bG9hZHNPYmplY3QtPmdldEJvb2xlYW4oY2NtZmlyU3RyaW5n
KCksIGJvb2xWYWx1ZSkpCi0gICAgICAgICAgICAgICAgcGF5bG9hZC5jY21maXIgPSBib29sVmFs
dWU7Ci0KLSAgICAgICAgICAgIGlmIChwYXlsb2Fkc09iamVjdC0+Z2V0Qm9vbGVhbihuYWNrcGxp
U3RyaW5nKCksIGJvb2xWYWx1ZSkpCi0gICAgICAgICAgICAgICAgcGF5bG9hZC5uYWNrcGxpID0g
Ym9vbFZhbHVlOwotCi0gICAgICAgICAgICBpZiAocGF5bG9hZHNPYmplY3QtPmdldEJvb2xlYW4o
bmFja1N0cmluZygpLCBib29sVmFsdWUpKQotICAgICAgICAgICAgICAgIHBheWxvYWQubmFjayA9
IGJvb2xWYWx1ZTsKLQotICAgICAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1l
dGVyc09iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgICAgICAgICBpZiAo
cGF5bG9hZHNPYmplY3QtPmdldE9iamVjdChwYXJhbWV0ZXJzU3RyaW5nKCksIHBhcmFtZXRlcnNP
YmplY3QpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHBhcmFtZXRlcnNPYmplY3QtPmdldEludGVn
ZXIocGFja2V0aXphdGlvbk1vZGVTdHJpbmcoKSwgaW50VmFsdWUpKQotICAgICAgICAgICAgICAg
ICAgICBwYXlsb2FkLmFkZFBhcmFtZXRlcigicGFja2V0aXphdGlvbk1vZGUiLCBpbnRWYWx1ZSk7
Ci0KLSAgICAgICAgICAgICAgICBpZiAocGFyYW1ldGVyc09iamVjdC0+Z2V0SW50ZWdlcihhcHRT
dHJpbmcoKSwgaW50VmFsdWUpKQotICAgICAgICAgICAgICAgICAgICBwYXlsb2FkLmFkZFBhcmFt
ZXRlcigiYXB0IiwgaW50VmFsdWUpOwotCi0gICAgICAgICAgICAgICAgaWYgKHBhcmFtZXRlcnNP
YmplY3QtPmdldEludGVnZXIocnR4VGltZVN0cmluZygpLCBpbnRWYWx1ZSkpCi0gICAgICAgICAg
ICAgICAgICAgIHBheWxvYWQuYWRkUGFyYW1ldGVyKCJydHhUaW1lIiwgaW50VmFsdWUpOwotICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICBtZWRpYURlc2NyaXB0aW9uLmFkZFBheWxvYWQoV1RG
TW92ZShwYXlsb2FkKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiBydGNwT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKLSAgICAgICAgaWYg
KG1lZGlhRGVzY3JpcHRpb25PYmplY3QtPmdldE9iamVjdChydGNwU3RyaW5nKCksIHJ0Y3BPYmpl
Y3QpKSB7Ci0gICAgICAgICAgICBpZiAocnRjcE9iamVjdC0+Z2V0Qm9vbGVhbihtdXhTdHJpbmco
KSwgYm9vbFZhbHVlKSkKLSAgICAgICAgICAgICAgICBtZWRpYURlc2NyaXB0aW9uLnJ0Y3BNdXgg
PSBib29sVmFsdWU7Ci0KLSAgICAgICAgICAgIGlmIChydGNwT2JqZWN0LT5nZXRTdHJpbmcocnRj
cEFkZHJlc3NTdHJpbmcoKSwgc3RyaW5nVmFsdWUpKQotICAgICAgICAgICAgICAgIG1lZGlhRGVz
Y3JpcHRpb24ucnRjcEFkZHJlc3MgPSBzdHJpbmdWYWx1ZTsKLQotICAgICAgICAgICAgaWYgKHJ0
Y3BPYmplY3QtPmdldEludGVnZXIocnRjcFBvcnRTdHJpbmcoKSwgaW50VmFsdWUpKQotICAgICAg
ICAgICAgICAgIG1lZGlhRGVzY3JpcHRpb24ucnRjcFBvcnQgPSBpbnRWYWx1ZTsKLSAgICAgICAg
fQotCi0gICAgICAgIGlmIChtZWRpYURlc2NyaXB0aW9uT2JqZWN0LT5nZXRTdHJpbmcobWVkaWFT
dHJlYW1JZFN0cmluZygpLCBzdHJpbmdWYWx1ZSkpCi0gICAgICAgICAgICBtZWRpYURlc2NyaXB0
aW9uLm1lZGlhU3RyZWFtSWQgPSBzdHJpbmdWYWx1ZTsKLQotICAgICAgICBpZiAobWVkaWFEZXNj
cmlwdGlvbk9iamVjdC0+Z2V0U3RyaW5nKG1lZGlhU3RyZWFtVHJhY2tJZFN0cmluZygpLCBzdHJp
bmdWYWx1ZSkpCi0gICAgICAgICAgICBtZWRpYURlc2NyaXB0aW9uLm1lZGlhU3RyZWFtVHJhY2tJ
ZCA9IHN0cmluZ1ZhbHVlOwotCi0gICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGR0bHNP
YmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwotICAgICAgICBpZiAobWVkaWFEZXNj
cmlwdGlvbk9iamVjdC0+Z2V0T2JqZWN0KGR0bHNTdHJpbmcoKSwgZHRsc09iamVjdCkpIHsKLSAg
ICAgICAgICAgIGlmIChkdGxzT2JqZWN0LT5nZXRTdHJpbmcoc2V0dXBTdHJpbmcoKSwgc3RyaW5n
VmFsdWUpKQotICAgICAgICAgICAgICAgIG1lZGlhRGVzY3JpcHRpb24uZHRsc1NldHVwID0gc3Ry
aW5nVmFsdWU7Ci0KLSAgICAgICAgICAgIGlmIChkdGxzT2JqZWN0LT5nZXRTdHJpbmcoZmluZ2Vy
cHJpbnRIYXNoRnVuY3Rpb25TdHJpbmcoKSwgc3RyaW5nVmFsdWUpKQotICAgICAgICAgICAgICAg
IG1lZGlhRGVzY3JpcHRpb24uZHRsc0ZpbmdlcnByaW50SGFzaEZ1bmN0aW9uID0gc3RyaW5nVmFs
dWU7Ci0KLSAgICAgICAgICAgIGlmIChkdGxzT2JqZWN0LT5nZXRTdHJpbmcoZmluZ2VycHJpbnRT
dHJpbmcoKSwgc3RyaW5nVmFsdWUpKQotICAgICAgICAgICAgICAgIG1lZGlhRGVzY3JpcHRpb24u
ZHRsc0ZpbmdlcnByaW50ID0gc3RyaW5nVmFsdWU7Ci0gICAgICAgIH0KLQotICAgICAgICBSZWZQ
dHI8SW5zcGVjdG9yQXJyYXk+IHNzcmNzQXJyYXkgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7
Ci0gICAgICAgIG1lZGlhRGVzY3JpcHRpb25PYmplY3QtPmdldEFycmF5KHNzcmNzU3RyaW5nKCks
IHNzcmNzQXJyYXkpOwotCi0gICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGogPCBzc3Jjc0Fy
cmF5LT5sZW5ndGgoKTsgKytqKSB7Ci0gICAgICAgICAgICBzc3Jjc0FycmF5LT5nZXQoaiktPmFz
SW50ZWdlcihpbnRWYWx1ZSk7Ci0gICAgICAgICAgICBtZWRpYURlc2NyaXB0aW9uLmFkZFNzcmMo
aW50VmFsdWUpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG1lZGlhRGVzY3JpcHRpb25PYmpl
Y3QtPmdldFN0cmluZyhjbmFtZVN0cmluZygpLCBzdHJpbmdWYWx1ZSkpCi0gICAgICAgICAgICBt
ZWRpYURlc2NyaXB0aW9uLmNuYW1lID0gc3RyaW5nVmFsdWU7Ci0KLSAgICAgICAgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gaWNlT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKLSAg
ICAgICAgaWYgKG1lZGlhRGVzY3JpcHRpb25PYmplY3QtPmdldE9iamVjdChpY2VTdHJpbmcoKSwg
aWNlT2JqZWN0KSkgewotICAgICAgICAgICAgaWYgKGljZU9iamVjdC0+Z2V0U3RyaW5nKHVmcmFn
U3RyaW5nKCksIHN0cmluZ1ZhbHVlKSkKLSAgICAgICAgICAgICAgICBtZWRpYURlc2NyaXB0aW9u
LmljZVVmcmFnID0gc3RyaW5nVmFsdWU7Ci0KLSAgICAgICAgICAgIGlmIChpY2VPYmplY3QtPmdl
dFN0cmluZyhwYXNzd29yZFN0cmluZygpLCBzdHJpbmdWYWx1ZSkpCi0gICAgICAgICAgICAgICAg
bWVkaWFEZXNjcmlwdGlvbi5pY2VQYXNzd29yZCA9IHN0cmluZ1ZhbHVlOwotCi0gICAgICAgICAg
ICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGNhbmRpZGF0ZXNBcnJheSA9IEluc3BlY3RvckFycmF5
OjpjcmVhdGUoKTsKLSAgICAgICAgICAgIGljZU9iamVjdC0+Z2V0QXJyYXkoY2FuZGlkYXRlc1N0
cmluZygpLCBjYW5kaWRhdGVzQXJyYXkpOwotCi0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGog
PSAwOyBqIDwgY2FuZGlkYXRlc0FycmF5LT5sZW5ndGgoKTsgKytqKSB7Ci0gICAgICAgICAgICAg
ICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gY2FuZGlkYXRlT2JqZWN0ID0gSW5zcGVjdG9yT2Jq
ZWN0OjpjcmVhdGUoKTsKLSAgICAgICAgICAgICAgICBjYW5kaWRhdGVzQXJyYXktPmdldChqKS0+
YXNPYmplY3QoY2FuZGlkYXRlT2JqZWN0KTsKLQotICAgICAgICAgICAgICAgIG1lZGlhRGVzY3Jp
cHRpb24uYWRkSWNlQ2FuZGlkYXRlKGNyZWF0ZUNhbmRpZGF0ZSgqY2FuZGlkYXRlT2JqZWN0KSk7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBjb25maWd1cmF0aW9uLT5hZGRN
ZWRpYURlc2NyaXB0aW9uKFdURk1vdmUobWVkaWFEZXNjcmlwdGlvbikpOwotICAgIH0KLQotICAg
IHJldHVybiBjb25maWd1cmF0aW9uOwotfQotCi1zdGF0aWMgc3RkOjpvcHRpb25hbDxJY2VDYW5k
aWRhdGU+IGljZUNhbmRpZGF0ZUZyb21KU09OKGNvbnN0IFN0cmluZyYganNvbikKLXsKLSAgICBS
ZWZQdHI8SW5zcGVjdG9yVmFsdWU+IHZhbHVlOwotICAgIGlmICghSW5zcGVjdG9yVmFsdWU6OnBh
cnNlSlNPTihqc29uLCB2YWx1ZSkpCi0gICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAg
ICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBjYW5kaWRhdGVPYmplY3Q7Ci0gICAgaWYgKCF2YWx1
ZS0+YXNPYmplY3QoY2FuZGlkYXRlT2JqZWN0KSkKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9w
dDsKLQotICAgIHJldHVybiBjcmVhdGVDYW5kaWRhdGUoKmNhbmRpZGF0ZU9iamVjdCk7Ci19Ci0K
LXN0YXRpYyBTdHJpbmcgZ2V0QnVuZGxlUG9saWN5TmFtZShjb25zdCBQZWVyQ29ubmVjdGlvblN0
YXRlczo6QnVuZGxlUG9saWN5IGJ1bmRsZVBvbGljeSkKLXsKLSAgICBzd2l0Y2ggKGJ1bmRsZVBv
bGljeSkgewotICAgIGNhc2UgUGVlckNvbm5lY3Rpb25TdGF0ZXM6OkJ1bmRsZVBvbGljeTo6TWF4
Q29tcGF0OgotICAgICAgICByZXR1cm4gIm1heC1jb21wYXQiOwotICAgIGNhc2UgUGVlckNvbm5l
Y3Rpb25TdGF0ZXM6OkJ1bmRsZVBvbGljeTo6TWF4QnVuZGxlOgotICAgICAgICByZXR1cm4gIm1h
eC1idW5kbGUiOwotICAgIGNhc2UgUGVlckNvbm5lY3Rpb25TdGF0ZXM6OkJ1bmRsZVBvbGljeTo6
QmFsYW5jZWQ6Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuICJiYWxhbmNlZCI7Ci0gICAg
fTsKLX0KLQotc3RhdGljIFN0cmluZyBjb25maWd1cmF0aW9uVG9KU09OKGNvbnN0IE1lZGlhRW5k
cG9pbnRTZXNzaW9uQ29uZmlndXJhdGlvbiYgY29uZmlndXJhdGlvbikKLXsKLSAgICBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiBvYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwotICAg
IG9iamVjdC0+c2V0U3RyaW5nKGJ1bmRsZVBvbGljeVN0cmluZygpLCBnZXRCdW5kbGVQb2xpY3lO
YW1lKGNvbmZpZ3VyYXRpb24uYnVuZGxlUG9saWN5KCkpKTsKLQotICAgIFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IG9yaWdpbmF0b3JPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwot
ICAgIG9yaWdpbmF0b3JPYmplY3QtPnNldFN0cmluZyhzZXNzaW9uSWRTdHJpbmcoKSwgU3RyaW5n
OjpudW1iZXIoY29uZmlndXJhdGlvbi5zZXNzaW9uSWQoKSkpOwotICAgIG9yaWdpbmF0b3JPYmpl
Y3QtPnNldEludGVnZXIoc2Vzc2lvblZlcnNpb25TdHJpbmcoKSwgY29uZmlndXJhdGlvbi5zZXNz
aW9uVmVyc2lvbigpKTsKLSAgICBvYmplY3QtPnNldE9iamVjdChvcmlnaW5hdG9yU3RyaW5nKCks
IG9yaWdpbmF0b3JPYmplY3QpOwotCi0gICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBtZWRpYURl
c2NyaXB0aW9uc0FycmF5ID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwotCi0gICAgZm9yIChj
b25zdCBhdXRvJiBtZWRpYURlc2NyaXB0aW9uIDogY29uZmlndXJhdGlvbi5tZWRpYURlc2NyaXB0
aW9ucygpKSB7Ci0gICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1lZGlhRGVzY3JpcHRp
b25PYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwotCi0gICAgICAgIG1lZGlhRGVz
Y3JpcHRpb25PYmplY3QtPnNldFN0cmluZyh0eXBlU3RyaW5nKCksIG1lZGlhRGVzY3JpcHRpb24u
dHlwZSk7Ci0gICAgICAgIG1lZGlhRGVzY3JpcHRpb25PYmplY3QtPnNldEludGVnZXIocG9ydFN0
cmluZygpLCBtZWRpYURlc2NyaXB0aW9uLnBvcnQpOwotICAgICAgICBtZWRpYURlc2NyaXB0aW9u
T2JqZWN0LT5zZXRTdHJpbmcoYWRkcmVzc1N0cmluZygpLCBtZWRpYURlc2NyaXB0aW9uLmFkZHJl
c3MpOwotICAgICAgICBtZWRpYURlc2NyaXB0aW9uT2JqZWN0LT5zZXRTdHJpbmcobW9kZVN0cmlu
ZygpLCBtZWRpYURlc2NyaXB0aW9uLm1vZGUpOwotICAgICAgICBtZWRpYURlc2NyaXB0aW9uT2Jq
ZWN0LT5zZXRTdHJpbmcobWlkU3RyaW5nKCksIG1lZGlhRGVzY3JpcHRpb24ubWlkKTsKLQotICAg
ICAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHBheWxvYWRzQXJyYXkgPSBJbnNwZWN0b3JBcnJh
eTo6Y3JlYXRlKCk7Ci0KLSAgICAgICAgZm9yIChhdXRvJiBwYXlsb2FkIDogbWVkaWFEZXNjcmlw
dGlvbi5wYXlsb2FkcykgewotICAgICAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGF5
bG9hZE9iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7Ci0KLSAgICAgICAgICAgIHBh
eWxvYWRPYmplY3QtPnNldEludGVnZXIodHlwZVN0cmluZygpLCBwYXlsb2FkLnR5cGUpOwotICAg
ICAgICAgICAgcGF5bG9hZE9iamVjdC0+c2V0U3RyaW5nKGVuY29kaW5nTmFtZVN0cmluZygpLCBw
YXlsb2FkLmVuY29kaW5nTmFtZSk7Ci0gICAgICAgICAgICBwYXlsb2FkT2JqZWN0LT5zZXRJbnRl
Z2VyKGNsb2NrUmF0ZVN0cmluZygpLCBwYXlsb2FkLmNsb2NrUmF0ZSk7Ci0gICAgICAgICAgICBw
YXlsb2FkT2JqZWN0LT5zZXRJbnRlZ2VyKGNoYW5uZWxzU3RyaW5nKCksIHBheWxvYWQuY2hhbm5l
bHMpOwotICAgICAgICAgICAgcGF5bG9hZE9iamVjdC0+c2V0Qm9vbGVhbihjY21maXJTdHJpbmco
KSwgcGF5bG9hZC5jY21maXIpOwotICAgICAgICAgICAgcGF5bG9hZE9iamVjdC0+c2V0Qm9vbGVh
bihuYWNrcGxpU3RyaW5nKCksIHBheWxvYWQubmFja3BsaSk7Ci0gICAgICAgICAgICBwYXlsb2Fk
T2JqZWN0LT5zZXRCb29sZWFuKG5hY2tTdHJpbmcoKSwgcGF5bG9hZC5uYWNrKTsKLQotICAgICAg
ICAgICAgaWYgKCFwYXlsb2FkLnBhcmFtZXRlcnMuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAg
ICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1ldGVyc09iamVjdCA9IEluc3BlY3Rvck9i
amVjdDo6Y3JlYXRlKCk7Ci0KLSAgICAgICAgICAgICAgICBmb3IgKGF1dG8mIG5hbWUgOiBwYXls
b2FkLnBhcmFtZXRlcnMua2V5cygpKQotICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzT2Jq
ZWN0LT5zZXRJbnRlZ2VyKG5hbWUsIHBheWxvYWQucGFyYW1ldGVycy5nZXQobmFtZSkpOwotCi0g
ICAgICAgICAgICAgICAgcGF5bG9hZE9iamVjdC0+c2V0T2JqZWN0KHBhcmFtZXRlcnNTdHJpbmco
KSwgcGFyYW1ldGVyc09iamVjdCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHBheWxv
YWRzQXJyYXktPnB1c2hPYmplY3QocGF5bG9hZE9iamVjdCk7Ci0gICAgICAgIH0KLSAgICAgICAg
bWVkaWFEZXNjcmlwdGlvbk9iamVjdC0+c2V0QXJyYXkocGF5bG9hZHNTdHJpbmcoKSwgcGF5bG9h
ZHNBcnJheSk7Ci0KLSAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcnRjcE9iamVjdCA9
IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgICAgIHJ0Y3BPYmplY3QtPnNldEJvb2xl
YW4obXV4U3RyaW5nKCksIG1lZGlhRGVzY3JpcHRpb24ucnRjcE11eCk7Ci0gICAgICAgIHJ0Y3BP
YmplY3QtPnNldFN0cmluZyhhZGRyZXNzU3RyaW5nKCksIG1lZGlhRGVzY3JpcHRpb24ucnRjcEFk
ZHJlc3MpOwotICAgICAgICBydGNwT2JqZWN0LT5zZXRJbnRlZ2VyKHBvcnRTdHJpbmcoKSwgbWVk
aWFEZXNjcmlwdGlvbi5ydGNwUG9ydCk7Ci0gICAgICAgIG1lZGlhRGVzY3JpcHRpb25PYmplY3Qt
PnNldE9iamVjdChydGNwU3RyaW5nKCksIHJ0Y3BPYmplY3QpOwotCi0gICAgICAgIG1lZGlhRGVz
Y3JpcHRpb25PYmplY3QtPnNldFN0cmluZyhtZWRpYVN0cmVhbUlkU3RyaW5nKCksIG1lZGlhRGVz
Y3JpcHRpb24ubWVkaWFTdHJlYW1JZCk7Ci0gICAgICAgIG1lZGlhRGVzY3JpcHRpb25PYmplY3Qt
PnNldFN0cmluZyhtZWRpYVN0cmVhbVRyYWNrSWRTdHJpbmcoKSwgbWVkaWFEZXNjcmlwdGlvbi5t
ZWRpYVN0cmVhbVRyYWNrSWQpOwotCi0gICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGR0
bHNPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwotICAgICAgICBkdGxzT2JqZWN0
LT5zZXRTdHJpbmcoc2V0dXBTdHJpbmcoKSwgbWVkaWFEZXNjcmlwdGlvbi5kdGxzU2V0dXApOwot
ICAgICAgICBkdGxzT2JqZWN0LT5zZXRTdHJpbmcoZmluZ2VycHJpbnRIYXNoRnVuY3Rpb25TdHJp
bmcoKSwgbWVkaWFEZXNjcmlwdGlvbi5kdGxzRmluZ2VycHJpbnRIYXNoRnVuY3Rpb24pOwotICAg
ICAgICBkdGxzT2JqZWN0LT5zZXRTdHJpbmcoZmluZ2VycHJpbnRTdHJpbmcoKSwgbWVkaWFEZXNj
cmlwdGlvbi5kdGxzRmluZ2VycHJpbnQpOwotICAgICAgICBtZWRpYURlc2NyaXB0aW9uT2JqZWN0
LT5zZXRPYmplY3QoZHRsc1N0cmluZygpLCBkdGxzT2JqZWN0KTsKLQotICAgICAgICBSZWZQdHI8
SW5zcGVjdG9yQXJyYXk+IHNzcmNzQXJyYXkgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7Ci0K
LSAgICAgICAgZm9yIChhdXRvIHNzcmMgOiBtZWRpYURlc2NyaXB0aW9uLnNzcmNzKQotICAgICAg
ICAgICAgc3NyY3NBcnJheS0+cHVzaERvdWJsZShzc3JjKTsKLSAgICAgICAgbWVkaWFEZXNjcmlw
dGlvbk9iamVjdC0+c2V0QXJyYXkoc3NyY3NTdHJpbmcoKSwgc3NyY3NBcnJheSk7Ci0KLSAgICAg
ICAgbWVkaWFEZXNjcmlwdGlvbk9iamVjdC0+c2V0U3RyaW5nKGNuYW1lU3RyaW5nKCksIG1lZGlh
RGVzY3JpcHRpb24uY25hbWUpOwotCi0gICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGlj
ZU9iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgICAgIGljZU9iamVjdC0+
c2V0U3RyaW5nKHVmcmFnU3RyaW5nKCksIG1lZGlhRGVzY3JpcHRpb24uaWNlVWZyYWcpOwotICAg
ICAgICBpY2VPYmplY3QtPnNldFN0cmluZyhwYXNzd29yZFN0cmluZygpLCBtZWRpYURlc2NyaXB0
aW9uLmljZVBhc3N3b3JkKTsKLQotICAgICAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGNhbmRp
ZGF0ZXNBcnJheSA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKLQotICAgICAgICBmb3IgKGF1
dG8mIGNhbmRpZGF0ZSA6IG1lZGlhRGVzY3JpcHRpb24uaWNlQ2FuZGlkYXRlcykKLSAgICAgICAg
ICAgIGNhbmRpZGF0ZXNBcnJheS0+cHVzaE9iamVjdChjcmVhdGVDYW5kaWRhdGVPYmplY3QoY2Fu
ZGlkYXRlKSk7Ci0KLSAgICAgICAgaWNlT2JqZWN0LT5zZXRBcnJheShjYW5kaWRhdGVzU3RyaW5n
KCksIGNhbmRpZGF0ZXNBcnJheSk7Ci0gICAgICAgIG1lZGlhRGVzY3JpcHRpb25PYmplY3QtPnNl
dE9iamVjdChpY2VTdHJpbmcoKSwgaWNlT2JqZWN0KTsKLQotICAgICAgICBtZWRpYURlc2NyaXB0
aW9uc0FycmF5LT5wdXNoT2JqZWN0KG1lZGlhRGVzY3JpcHRpb25PYmplY3QpOwotICAgIH0KLSAg
ICBvYmplY3QtPnNldEFycmF5KG1lZGlhRGVzY3JpcHRpb25zU3RyaW5nKCksIG1lZGlhRGVzY3Jp
cHRpb25zQXJyYXkpOwotCi0gICAgcmV0dXJuIG9iamVjdC0+dG9KU09OU3RyaW5nKCk7Ci19Ci0K
LXN0YXRpYyBTdHJpbmcgaWNlQ2FuZGlkYXRlVG9KU09OKGNvbnN0IEljZUNhbmRpZGF0ZSYgY2Fu
ZGlkYXRlKQotewotICAgIHJldHVybiBjcmVhdGVDYW5kaWRhdGVPYmplY3QoY2FuZGlkYXRlKS0+
dG9KU09OU3RyaW5nKCk7Ci19Ci0KLVNEUFByb2Nlc3Nvcjo6UmVzdWx0IFNEUFByb2Nlc3Nvcjo6
Z2VuZXJhdGUoY29uc3QgTWVkaWFFbmRwb2ludFNlc3Npb25Db25maWd1cmF0aW9uJiBjb25maWd1
cmF0aW9uLCBTdHJpbmcmIG91dFNkcFN0cmluZykgY29uc3QKLXsKLSAgICBTdHJpbmcgc2RwU3Ry
aW5nOwotICAgIGlmICghY2FsbFNjcmlwdCgiZ2VuZXJhdGUiLCBjb25maWd1cmF0aW9uVG9KU09O
KGNvbmZpZ3VyYXRpb24pLCBzZHBTdHJpbmcpKQotICAgICAgICByZXR1cm4gUmVzdWx0OjpJbnRl
cm5hbEVycm9yOwotCi0gICAgb3V0U2RwU3RyaW5nID0gc2RwU3RyaW5nOwotICAgIHJldHVybiBS
ZXN1bHQ6OlN1Y2Nlc3M7Ci19Ci0KLVNEUFByb2Nlc3Nvcjo6UmVzdWx0IFNEUFByb2Nlc3Nvcjo6
cGFyc2UoY29uc3QgU3RyaW5nJiBzZHAsIFJlZlB0cjxNZWRpYUVuZHBvaW50U2Vzc2lvbkNvbmZp
Z3VyYXRpb24+JiBvdXRDb25maWd1cmF0aW9uKSBjb25zdAotewotICAgIFN0cmluZyBzY3JpcHRP
dXRwdXQ7Ci0gICAgaWYgKCFjYWxsU2NyaXB0KCJwYXJzZSIsIHNkcCwgc2NyaXB0T3V0cHV0KSkK
LSAgICAgICAgcmV0dXJuIFJlc3VsdDo6SW50ZXJuYWxFcnJvcjsKLQotICAgIGlmIChzY3JpcHRP
dXRwdXQgPT0gIlBhcnNlRXJyb3IiKQotICAgICAgICByZXR1cm4gUmVzdWx0OjpQYXJzZUVycm9y
OwotCi0gICAgUmVmUHRyPE1lZGlhRW5kcG9pbnRTZXNzaW9uQ29uZmlndXJhdGlvbj4gY29uZmln
dXJhdGlvbiA9IGNvbmZpZ3VyYXRpb25Gcm9tSlNPTihzY3JpcHRPdXRwdXQpOwotICAgIGlmICgh
Y29uZmlndXJhdGlvbikKLSAgICAgICAgcmV0dXJuIFJlc3VsdDo6SW50ZXJuYWxFcnJvcjsKLQot
ICAgIG91dENvbmZpZ3VyYXRpb24gPSBjb25maWd1cmF0aW9uOwotICAgIHJldHVybiBSZXN1bHQ6
OlN1Y2Nlc3M7Ci19Ci0KLVNEUFByb2Nlc3Nvcjo6UmVzdWx0IFNEUFByb2Nlc3Nvcjo6Z2VuZXJh
dGVDYW5kaWRhdGVMaW5lKGNvbnN0IEljZUNhbmRpZGF0ZSYgY2FuZGlkYXRlLCBTdHJpbmcmIG91
dENhbmRpZGF0ZUxpbmUpIGNvbnN0Ci17Ci0gICAgU3RyaW5nIGNhbmRpZGF0ZUxpbmU7Ci0gICAg
aWYgKCFjYWxsU2NyaXB0KCJnZW5lcmF0ZUNhbmRpZGF0ZUxpbmUiLCBpY2VDYW5kaWRhdGVUb0pT
T04oY2FuZGlkYXRlKSwgY2FuZGlkYXRlTGluZSkpCi0gICAgICAgIHJldHVybiBSZXN1bHQ6Oklu
dGVybmFsRXJyb3I7Ci0KLSAgICBvdXRDYW5kaWRhdGVMaW5lID0gY2FuZGlkYXRlTGluZTsKLSAg
ICByZXR1cm4gUmVzdWx0OjpTdWNjZXNzOwotfQotCi1TRFBQcm9jZXNzb3I6OlBhcnNpbmdSZXN1
bHQgU0RQUHJvY2Vzc29yOjpwYXJzZUNhbmRpZGF0ZUxpbmUoY29uc3QgU3RyaW5nJiBjYW5kaWRh
dGVMaW5lKSBjb25zdAotewotICAgIFN0cmluZyBzY3JpcHRPdXRwdXQ7Ci0gICAgaWYgKCFjYWxs
U2NyaXB0KCJwYXJzZUNhbmRpZGF0ZUxpbmUiLCBjYW5kaWRhdGVMaW5lLCBzY3JpcHRPdXRwdXQp
KQotICAgICAgICByZXR1cm4geyBSZXN1bHQ6OkludGVybmFsRXJyb3IgfTsKLQotICAgIGlmIChz
Y3JpcHRPdXRwdXQgPT0gIlBhcnNlRXJyb3IiKQotICAgICAgICByZXR1cm4geyBSZXN1bHQ6OlBh
cnNlRXJyb3IgfTsKLQotICAgIGF1dG8gY2FuZGlkYXRlID0gaWNlQ2FuZGlkYXRlRnJvbUpTT04o
c2NyaXB0T3V0cHV0KTsKLSAgICBpZiAoIWNhbmRpZGF0ZSkKLSAgICAgICAgcmV0dXJuIHsgUmVz
dWx0OjpJbnRlcm5hbEVycm9yIH07Ci0gICAgcmV0dXJuIHsgV1RGTW92ZShjYW5kaWRhdGUudmFs
dWUoKSkgfTsKLX0KLQotYm9vbCBTRFBQcm9jZXNzb3I6OmNhbGxTY3JpcHQoY29uc3QgU3RyaW5n
JiBmdW5jdGlvbk5hbWUsIGNvbnN0IFN0cmluZyYgYXJndW1lbnQsIFN0cmluZyYgb3V0UmVzdWx0
KSBjb25zdAotewotICAgIGlmICghc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVu
dD4oc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsKLSAgICBpZiAoIWRvY3VtZW50LT5mcmFtZSgp
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIW1faXNvbGF0ZWRXb3JsZCkKLSAg
ICAgICAgbV9pc29sYXRlZFdvcmxkID0gRE9NV3JhcHBlcldvcmxkOjpjcmVhdGUoY29tbW9uVk0o
KSk7Ci0KLSAgICBTY3JpcHRDb250cm9sbGVyJiBzY3JpcHRDb250cm9sbGVyID0gZG9jdW1lbnQt
PmZyYW1lKCktPnNjcmlwdCgpOwotICAgIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qg
PSBKU0M6OmpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KHNjcmlwdENvbnRyb2xsZXIuZ2xvYmFs
T2JqZWN0KCptX2lzb2xhdGVkV29ybGQpKTsKLSAgICBKU0M6OlZNJiB2bSA9IGdsb2JhbE9iamVj
dC0+dm0oKTsKLSAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKHZtKTsKLSAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7Ci0gICAgSlNDOjpFeGVjU3RhdGUqIGV4ZWMgPSBn
bG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKLQotICAgIEpTQzo6SlNWYWx1ZSBwcm9iZUZ1bmN0
aW9uVmFsdWUgPSBnbG9iYWxPYmplY3QtPmdldChleGVjLCBKU0M6OklkZW50aWZpZXI6OmZyb21T
dHJpbmcoZXhlYywgImdlbmVyYXRlIikpOwotICAgIGlmICghcHJvYmVGdW5jdGlvblZhbHVlLmlz
RnVuY3Rpb24oKSkgewotICAgICAgICBVUkwgc2NyaXB0VVJMOwotICAgICAgICBzY3JpcHRDb250
cm9sbGVyLmV2YWx1YXRlSW5Xb3JsZChTY3JpcHRTb3VyY2VDb2RlKFNEUFByb2Nlc3NvclNjcmlw
dFJlc291cmNlOjpzY3JpcHRTdHJpbmcoKSwgc2NyaXB0VVJMKSwgKm1faXNvbGF0ZWRXb3JsZCk7
Ci0gICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpIHsKLSAgICAgICAgICAg
IHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgIH0KLSAgICB9Ci0KLSAgICBKU0M6OkpTVmFsdWUgZnVuY3Rpb25WYWx1ZSA9IGdsb2JhbE9i
amVjdC0+Z2V0KGV4ZWMsIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCBmdW5jdGlv
bk5hbWUpKTsKLSAgICBpZiAoIWZ1bmN0aW9uVmFsdWUuaXNGdW5jdGlvbigpKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICBKU0M6OkpTT2JqZWN0KiBmdW5jdGlvbiA9IGZ1bmN0aW9uVmFs
dWUudG9PYmplY3QoZXhlYyk7Ci0gICAgSlNDOjpDYWxsRGF0YSBjYWxsRGF0YTsKLSAgICBKU0M6
OkNhbGxUeXBlIGNhbGxUeXBlID0gZnVuY3Rpb24tPm1ldGhvZFRhYmxlKHZtKS0+Z2V0Q2FsbERh
dGEoZnVuY3Rpb24sIGNhbGxEYXRhKTsKLSAgICBpZiAoY2FsbFR5cGUgPT0gSlNDOjpDYWxsVHlw
ZTo6Tm9uZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgSlNDOjpNYXJrZWRBcmd1bWVu
dEJ1ZmZlciBhcmdMaXN0OwotICAgIGFyZ0xpc3QuYXBwZW5kKEpTQzo6anNTdHJpbmcoZXhlYywg
YXJndW1lbnQpKTsKLQotICAgIEpTQzo6SlNWYWx1ZSByZXN1bHQgPSBKU0M6OmNhbGwoZXhlYywg
ZnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSwgZ2xvYmFsT2JqZWN0LCBhcmdMaXN0KTsKLSAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKSB7Ci0gICAgICAgIExPR19FUlJPUigi
U0RQUHJvY2Vzc29yIHNjcmlwdCB0aHJldyBpbiBmdW5jdGlvbiAlcyIsIGZ1bmN0aW9uTmFtZS5h
c2NpaSgpLmRhdGEoKSk7Ci0gICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7Ci0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAoIXJlc3VsdC5pc1N0cmluZygpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBvdXRSZXN1bHQgPSBhc1N0cmluZyhyZXN1bHQpLT52
YWx1ZShleGVjKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQotCi0jZW5kaWYgLy8gRU5BQkxFKFdFQl9SVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1NEUFByb2Nlc3Nvci5oIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9tZWRpYXN0cmVhbS9TRFBQcm9jZXNzb3IuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggY2E2MWM5YTkyZTQ3Y2UzZTkwMWVjMzYzMWE2OGY3N2IxMmM5MDJjNC4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL21lZGlhc3RyZWFtL1NEUFByb2Nlc3Nvci5oCisrKyAvZGV2L251bGwKQEAgLTEsNzggKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBFcmljc3NvbiBBQi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICog
ICAgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZQotICogICAgZGlzdHJpYnV0aW9uLgotICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBF
cmljc3NvbiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotICog
ICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShXRUJfUlRDKQotCi0jaW5jbHVk
ZSAiQ29udGV4dERlc3RydWN0aW9uT2JzZXJ2ZXIuaCIKLSNpbmNsdWRlICJJY2VDYW5kaWRhdGUu
aCIKLSNpbmNsdWRlICJNZWRpYUVuZHBvaW50U2Vzc2lvbkNvbmZpZ3VyYXRpb24uaCIKLSNpbmNs
dWRlIDx3dGYvUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1ZhcmlhbnQuaD4KLSNpbmNsdWRlIDx3
dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBET01X
cmFwcGVyV29ybGQ7Ci1jbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OwotCi1jbGFzcyBTRFBQ
cm9jZXNzb3IgOiBwdWJsaWMgQ29udGV4dERlc3RydWN0aW9uT2JzZXJ2ZXIgewotcHVibGljOgot
ICAgIGVudW0gY2xhc3MgUmVzdWx0IHsKLSAgICAgICAgU3VjY2VzcyA9IDEsCi0gICAgICAgIElu
dGVybmFsRXJyb3IgPSAyLAotICAgICAgICBQYXJzZUVycm9yID0gMwotICAgIH07Ci0KLSAgICBT
RFBQcm9jZXNzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCopOwotCi0gICAgUmVzdWx0IGdlbmVy
YXRlKGNvbnN0IE1lZGlhRW5kcG9pbnRTZXNzaW9uQ29uZmlndXJhdGlvbiYsIFN0cmluZyYgb3V0
U2RwU3RyaW5nKSBjb25zdDsKLSAgICBSZXN1bHQgcGFyc2UoY29uc3QgU3RyaW5nJiBzZHAsIFJl
ZlB0cjxNZWRpYUVuZHBvaW50U2Vzc2lvbkNvbmZpZ3VyYXRpb24+JikgY29uc3Q7Ci0KLSAgICBS
ZXN1bHQgZ2VuZXJhdGVDYW5kaWRhdGVMaW5lKGNvbnN0IEljZUNhbmRpZGF0ZSYsIFN0cmluZyYg
b3V0Q2FuZGlkYXRlTGluZSkgY29uc3Q7Ci0KLSAgICBzdHJ1Y3QgUGFyc2luZ1Jlc3VsdCB7Ci0g
ICAgICAgIFZhcmlhbnQ8SWNlQ2FuZGlkYXRlLCBSZXN1bHQ+IHJlc3VsdDsKLQotICAgICAgICBS
ZXN1bHQgcGFyc2luZ1N0YXR1cygpIGNvbnN0IHsgcmV0dXJuIFdURjo6aG9sZHNfYWx0ZXJuYXRp
dmU8SWNlQ2FuZGlkYXRlPihyZXN1bHQpID8gUmVzdWx0OjpTdWNjZXNzIDogV1RGOjpnZXQ8U0RQ
UHJvY2Vzc29yOjpSZXN1bHQ+KHJlc3VsdCk7IH0KLSAgICAgICAgSWNlQ2FuZGlkYXRlJiBjYW5k
aWRhdGUoKSB7IHJldHVybiBXVEY6OmdldDxJY2VDYW5kaWRhdGU+KHJlc3VsdCk7IH0KLSAgICB9
OwotICAgIFBhcnNpbmdSZXN1bHQgcGFyc2VDYW5kaWRhdGVMaW5lKGNvbnN0IFN0cmluZyYgY2Fu
ZGlkYXRlTGluZSkgY29uc3Q7Ci0KLXByaXZhdGU6Ci0gICAgYm9vbCBjYWxsU2NyaXB0KGNvbnN0
IFN0cmluZyYgZnVuY3Rpb25OYW1lLCBjb25zdCBTdHJpbmcmIGFyZ3VtZW50LCBTdHJpbmcmIG91
dFJlc3VsdCkgY29uc3Q7Ci0KLSAgICBtdXRhYmxlIFJlZlB0cjxET01XcmFwcGVyV29ybGQ+IG1f
aXNvbGF0ZWRXb3JsZDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8v
IEVOQUJMRShXRUJfUlRDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRp
YXN0cmVhbS9saWJ3ZWJydGMvTGliV2ViUlRDTWVkaWFFbmRwb2ludC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2xpYndlYnJ0Yy9MaWJXZWJSVENNZWRpYUVuZHBvaW50
LmNwcAppbmRleCA2ZWI0YTc0MDRjMmRiNjJmYmM3NWQ1ZjYzMGIwY2E4MWRjMzBjZmQ3Li4yMzg1
MWY5NjdkMWJkODc2ZmZkMWYzOTkzYzU2ZWVjN2ZjNGU2YThlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2xpYndlYnJ0Yy9MaWJXZWJSVENNZWRpYUVuZHBv
aW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2xpYndlYnJ0
Yy9MaWJXZWJSVENNZWRpYUVuZHBvaW50LmNwcApAQCAtODAsNyArODAsNiBAQCBib29sIExpYldl
YlJUQ01lZGlhRW5kcG9pbnQ6OnNldENvbmZpZ3VyYXRpb24oTGliV2ViUlRDUHJvdmlkZXImIGNs
aWVudCwgd2VicnRjOgogICAgIHJldHVybiBtX2JhY2tlbmQtPlNldENvbmZpZ3VyYXRpb24oV1RG
TW92ZShjb25maWd1cmF0aW9uKSk7CiB9CiAKLS8vIEZJWE1FOiB1bmlmeSB3aXRoIE1lZGlhRW5k
cG9pbnRTZXNzaW9uRGVzY3JpcHRpb246OnR5cGVTdHJpbmcoKQogc3RhdGljIGlubGluZSBjb25z
dCBjaGFyKiBzZXNzaW9uRGVzY3JpcHRpb25UeXBlKFJUQ1NkcFR5cGUgc2RwVHlwZSkKIHsKICAg
ICBzd2l0Y2ggKHNkcFR5cGUpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBiMGU3NTQ5NzBiMDQwYjNjNTUwYjA3MTcwNTA5NjFi
ZGRkODc2ZjI1Li4zNzM4YTBlN2U3NDI3YmI4MmYwMmFmYjk0NDA2ZTJlZTMxMjAxODg1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
KysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBA
IC0xNzkzLDYgKzE3OTMsOCBAQAogCQk0MUFCRTY3QjFEMDU4MERCMDA2RDg2MkQgLyogQ3Jvc3NP
cmlnaW5QcmVmbGlnaHRDaGVja2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA0MUFCRTY3QTFEMDU4MEQ1MDA2RDg2MkQgLyogQ3Jvc3NPcmlnaW5QcmVm
bGlnaHRDaGVja2VyLmggKi87IH07CiAJCTQxQUJFNjdDMUQwNTgwRTAwMDZEODYyRCAvKiBDcm9z
c09yaWdpblByZWZsaWdodENoZWNrZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNDFBQkU2NzkxRDA1ODBENTAwNkQ4NjJEIC8qIENyb3NzT3JpZ2lu
UHJlZmxpZ2h0Q2hlY2tlci5jcHAgKi87IH07CiAJCTQxQUQ3NTNBMUNFRjZCRDEwMEEzMTQ4NiAv
KiBGZXRjaE9wdGlvbnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDQxQUQ3NTM5MUNFRjZCQ0UwMEEzMTQ4NiAvKiBGZXRjaE9wdGlvbnMuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk0MUIyOEIxNDFGODUw
MUE2MDBGQjUyQUMgLyogTWVkaWFFbmRwb2ludENvbmZpZ3VyYXRpb24uY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDFCMjhCMTMxRjg1MDFBNDAwRkI1
MkFDIC8qIE1lZGlhRW5kcG9pbnRDb25maWd1cmF0aW9uLmNwcCAqLzsgfTsKKwkJNDFCMjhCMTUx
Rjg1MDFEMzAwRkI1MkFDIC8qIE1lZGlhRW5kcG9pbnRDb25maWd1cmF0aW9uLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MUIyOEIxMjFGODUwMUEzMDBG
QjUyQUMgLyogTWVkaWFFbmRwb2ludENvbmZpZ3VyYXRpb24uaCAqLzsgfTsKIAkJNDFCMkE2MjYx
RUYxQkY2RDAwMkI5RDdBIC8qIFdlYkF1ZGlvU291cmNlUHJvdmlkZXIuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxQjJBNjI1MUVGMUJGNjAwMDJCOUQ3
QSAvKiBXZWJBdWRpb1NvdXJjZVByb3ZpZGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNDFCNDU5RUYxRjU1RUJEMTAwMDBGNkZEIC8qIFJlYWRh
YmxlU3RyZWFtLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDQxQjQ1OUVEMUY1NUVCQzcwMDAwRjZGRCAvKiBSZWFkYWJsZVN0cmVhbS5jcHAgKi87IH07
CiAJCTQxQkY3MDBDMEZFODZGNDkwMDVFOERFQyAvKiBNZXNzYWdlUG9ydENoYW5uZWwuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxQkY3MDBBMEZFODZG
NDkwMDVFOERFQyAvKiBNZXNzYWdlUG9ydENoYW5uZWwuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMjc3OSw4ICsyNzgxLDYgQEAKIAkJNURGRThG
NTYwRDE2NDc3QjAwNzZFOTM3IC8qIFNjaGVkdWxlZEFjdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0EzNzhCQTBEMTVGNjQyMDBCNzkzRDYg
LyogU2NoZWR1bGVkQWN0aW9uLmNwcCAqLzsgfTsKIAkJNURGRThGNTcwRDE2NDc3QzAwNzZFOTM3
IC8qIFNjaGVkdWxlZEFjdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQkNBMzc4QkIwRDE1RjY0MjAwQjc5M0Q2IC8qIFNjaGVkdWxlZEFjdGlvbi5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTVERkVC
QUI3MTg1OTJCNkQwMEM3NUJFQiAvKiBXZWJLaXRBdmFpbGFiaWxpdHkuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVERkVCQUI2MTg1OTJCNkQwMEM3NUJF
QiAvKiBXZWJLaXRBdmFpbGFiaWxpdHkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwotCQk1RTE2QTJFNDFCRkE2NTBCMDAyOUEyMUUgLyogTWVkaWFFbmRw
b2ludFBlZXJDb25uZWN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1RTE2QTJFMzFCRkE2NEZCMDAyOUEyMUUgLyogTWVkaWFFbmRwb2ludFBlZXJD
b25uZWN0aW9uLmggKi87IH07Ci0JCTVFMTZBMkU1MUJGQTY1MEYwMDI5QTIxRSAvKiBNZWRpYUVu
ZHBvaW50UGVlckNvbm5lY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNUUxNkEyRTIxQkZBNjRGQjAwMjlBMjFFIC8qIE1lZGlhRW5kcG9pbnRQ
ZWVyQ29ubmVjdGlvbi5jcHAgKi87IH07CiAJCTVFMkM0MzUxMUJDRUUyRjYwMDAxRTJCQyAvKiBQ
ZWVyQ29ubmVjdGlvbkJhY2tlbmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDVFMkM0MzREMUJDRUUyRTUwMDAxRTJCQyAvKiBQZWVyQ29ubmVjdGlvbkJh
Y2tlbmQuaCAqLzsgfTsKIAkJNUUyQzQzNUYxQkNFRTMxRTAwMDFFMkJDIC8qIFJUQ1J0cFNlbmRl
clJlY2VpdmVyQmFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNUUyQzQzNUQxQkNFRTMwRDAwMDFFMkJDIC8qIFJUQ1J0cFNlbmRlclJlY2VpdmVyQmFz
ZS5oICovOyB9OwogCQk1RTJDNDM2MDFCQ0VFMzIzMDAwMUUyQkMgLyogUlRDUnRwU2VuZGVyLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVFMkM0MzU5
MUJDRUUzMEQwMDAxRTJCQyAvKiBSVENSdHBTZW5kZXIuY3BwICovOyB9OwpAQCAtMjgwMSwyNyAr
MjgwMSwxNCBAQAogCQk1RTJDNDM3NDFCQ0YwRDc1MDAwMUUyQkUgLyogSlNSVENSdHBQYXJhbWV0
ZXJzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1RTJD
NDM3MDFCQ0YwRDY5MDAwMUUyQkUgLyogSlNSVENSdHBQYXJhbWV0ZXJzLmggKi87IH07CiAJCTVF
MkM0MzdCMUJDRjlBNTcwMDAxRTJCQyAvKiBSVENQZWVyQ29ubmVjdGlvbkJ1aWx0aW5zLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1RTJDNDM3NjFCQ0Y5
QTBCMDAwMUUyQkMgLyogUlRDUGVlckNvbm5lY3Rpb25CdWlsdGlucy5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTVFMkM0MzdDMUJDRjlBODQwMDAx
RTJCQyAvKiBSVENQZWVyQ29ubmVjdGlvbkludGVybmFsc0J1aWx0aW5zLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1RTJDNDM3OTFCQ0Y5QTBCMDAwMUUy
QkMgLyogUlRDUGVlckNvbm5lY3Rpb25JbnRlcm5hbHNCdWlsdGlucy5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTVFNEVBQjA0MUQwNzE2NkEwMDA2
QTE4NCAvKiBNZWRpYUVuZHBvaW50U2Vzc2lvbkRlc2NyaXB0aW9uLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1RTRFQUIwMzFEMDcxNjRDMDAwNkExODQg
LyogTWVkaWFFbmRwb2ludFNlc3Npb25EZXNjcmlwdGlvbi5oICovOyB9OwotCQk1RTRFQUIwNTFE
MDcxNjZFMDAwNkExODQgLyogTWVkaWFFbmRwb2ludFNlc3Npb25EZXNjcmlwdGlvbi5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1RTRFQUIwMjFEMDcx
NjRDMDAwNkExODQgLyogTWVkaWFFbmRwb2ludFNlc3Npb25EZXNjcmlwdGlvbi5jcHAgKi87IH07
CiAJCTVFNUUyQjEzMUNGQzNFNzAwMDBDMEQ4NSAvKiBSVENSdHBUcmFuc2NlaXZlci5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1RTVFMkIxMDFDRkMz
RTRCMDAwQzBEODUgLyogUlRDUnRwVHJhbnNjZWl2ZXIuY3BwICovOyB9OwogCQk1RTVFMkIxNDFD
RkMzRTc1MDAwQzBEODUgLyogUlRDUnRwVHJhbnNjZWl2ZXIuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVFNUUyQjExMUNGQzNFNEIwMDBDMEQ4NSAvKiBS
VENSdHBUcmFuc2NlaXZlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07Ci0JCTVFQTNENkRGMUM4NTlEN0YwMDMwMEJCQiAvKiBNb2NrTWVkaWFFbmRwb2lu
dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUVBM0Q2
REUxQzg1OUQ1MzAwMzAwQkJCIC8qIE1vY2tNZWRpYUVuZHBvaW50LmggKi87IH07Ci0JCTVFQTNE
NkUwMUM4NTlEODQwMDMwMEJCQiAvKiBNb2NrTWVkaWFFbmRwb2ludC5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1RUEzRDZERDFDODU5RDUzMDAzMDBC
QkIgLyogTW9ja01lZGlhRW5kcG9pbnQuY3BwICovOyB9OwotCQk1RUEzRDZFMzFDODU5REMxMDAz
MDBCQkIgLyogU0RQUHJvY2Vzc29yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDVFQTNENkUxMUM4NTlEQUEwMDMwMEJCQiAvKiBTRFBQcm9jZXNzb3Iu
Y3BwICovOyB9OwotCQk1RUEzRDZFNDFDODU5REMxMDAzMDBCQkIgLyogU0RQUHJvY2Vzc29yLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1RUEzRDZFMjFD
ODU5REFBMDAzMDBCQkIgLyogU0RQUHJvY2Vzc29yLmggKi87IH07Ci0JCTVFQTNENkU3MUM4NUE5
REIwMDMwMEJCQiAvKiBTRFBQcm9jZXNzb3JTY3JpcHRSZXNvdXJjZS5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1RUEzRDZFNTFDODVBOUMzMDAzMDBC
QkIgLyogU0RQUHJvY2Vzc29yU2NyaXB0UmVzb3VyY2UuY3BwICovOyB9OwotCQk1RUEzRDZFODFD
ODVBOURCMDAzMDBCQkIgLyogU0RQUHJvY2Vzc29yU2NyaXB0UmVzb3VyY2UuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVFQTNENkU2MUM4NUE5QzMwMDMw
MEJCQiAvKiBTRFBQcm9jZXNzb3JTY3JpcHRSZXNvdXJjZS5oICovOyB9OwogCQk1RUE3MjVEMjFB
Q0FCRDQ3MDBFQUQxN0IgLyogTWVkaWFEZXZpY2VzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVFQTcyNUNEMUFDQUJDRDkwMEVBRDE3QiAvKiBNZWRp
YURldmljZXMuY3BwICovOyB9OwogCQk1RUE3MjVEMzFBQ0FCRDQ3MDBFQUQxN0IgLyogTWVkaWFE
ZXZpY2VzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
RUE3MjVDRTFBQ0FCQ0Q5MDBFQUQxN0IgLyogTWVkaWFEZXZpY2VzLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNUVBNzI1RDUxQUNBQkQ1NzAwRUFE
MTdCIC8qIE5hdmlnYXRvck1lZGlhRGV2aWNlcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1RUE3MjVDQTFBQ0FCQ0I1MDBFQUQxN0IgLyogTmF2aWdh
dG9yTWVkaWFEZXZpY2VzLmNwcCAqLzsgfTsKIAkJNUVBNzI1RDYxQUNBQkQ1NzAwRUFEMTdCIC8q
IE5hdmlnYXRvck1lZGlhRGV2aWNlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNUVBNzI1Q0IxQUNBQkNCNTAwRUFEMTdCIC8qIE5hdmlnYXRvck1lZGlh
RGV2aWNlcy5oICovOyB9OwogCQk1RUJCODkzMTFDNzc3N0ZGMDBDNjVENDEgLyogTWVkaWFQYXls
b2FkLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1RUJC
ODkyRjFDNzc3N0QwMDBDNjVENDEgLyogTWVkaWFQYXlsb2FkLmggKi87IH07Ci0JCTVFQkI4OTMy
MUM3Nzc4MjMwMEM2NUQ0MSAvKiBNZWRpYUVuZHBvaW50U2Vzc2lvbkNvbmZpZ3VyYXRpb24uaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVFQkI4OTJFMUM3
Nzc3RDAwMEM2NUQ0MSAvKiBNZWRpYUVuZHBvaW50U2Vzc2lvbkNvbmZpZ3VyYXRpb24uaCAqLzsg
fTsKIAkJNUVCQjg5MzMxQzc3NzgyOTAwQzY1RDQxIC8qIEljZUNhbmRpZGF0ZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUVCQjg5MzAxQzc3NzdFMTAw
QzY1RDQxIC8qIEljZUNhbmRpZGF0ZS5oICovOyB9OwotCQk1RUJCODkzNDFDNzc3ODI5MDBDNjVE
NDEgLyogTWVkaWFFbmRwb2ludC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1RUJCODkyQTFDNzc3N0QwMDBDNjVENDEgLyogTWVkaWFFbmRwb2ludC5j
cHAgKi87IH07Ci0JCTVFQkI4OTM1MUM3Nzc4MjkwMEM2NUQ0MSAvKiBNZWRpYUVuZHBvaW50Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1RUJCODkyQjFD
Nzc3N0QwMDBDNjVENDEgLyogTWVkaWFFbmRwb2ludC5oICovOyB9OwotCQk1RUJCODkzNjFDNzc3
ODI5MDBDNjVENDEgLyogTWVkaWFFbmRwb2ludENvbmZpZ3VyYXRpb24uY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUVCQjg5MkMxQzc3NzdEMDAwQzY1
RDQxIC8qIE1lZGlhRW5kcG9pbnRDb25maWd1cmF0aW9uLmNwcCAqLzsgfTsKLQkJNUVCQjg5Mzcx
Qzc3NzgyOTAwQzY1RDQxIC8qIE1lZGlhRW5kcG9pbnRDb25maWd1cmF0aW9uLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1RUJCODkyRDFDNzc3N0QwMDBD
NjVENDEgLyogTWVkaWFFbmRwb2ludENvbmZpZ3VyYXRpb24uaCAqLzsgfTsKIAkJNUVCQjg5Mzkx
Qzc3QzM5OTAwQzY1RDQxIC8qIFBlZXJNZWRpYURlc2NyaXB0aW9uLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1RUJCODkzODFDNzdCREE0MDBDNjVENDEg
LyogUGVlck1lZGlhRGVzY3JpcHRpb24uaCAqLzsgfTsKIAkJNUYyREJCRTkxNzhFM0M4MTAwMTQx
NDg2IC8qIENlcnRpZmljYXRlSW5mb01hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDVGMkRCQkU3MTc4RTMzMkQwMDE0MTQ4NiAvKiBDZXJ0aWZpY2F0
ZUluZm9NYWMubW0gKi87IH07CiAJCTVGQTkwNENBMTc4RTYxRjUwMDRDOEEyRCAvKiBDZXJ0aWZp
Y2F0ZUluZm8uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDVGMkRCQkU4MTc4RTMzNjkwMDE0MTQ4NiAvKiBDZXJ0aWZpY2F0ZUluZm8uaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtNjM5MCw3ICs2Mzc3LDYg
QEAKIAkJQ0RBQjZEMkUxN0M4MTRFRTAwQzYwQjM0IC8qIEpTTWVkaWFDb250cm9sc0hvc3QuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQUI2RDJDMTdD
ODE0RUUwMEM2MEIzNCAvKiBKU01lZGlhQ29udHJvbHNIb3N0LmggKi87IH07CiAJCUNEQUI2RDMx
MTdDOTI1OTUwMEM2MEIzNCAvKiBVc2VyQWdlbnRTY3JpcHRzLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREFCNkQyRjE3QzkyNTk1MDBDNjBCMzQgLyog
VXNlckFnZW50U2NyaXB0cy5oICovOyB9OwogCQlDREFCNkQzMjE3QzkyNTk1MDBDNjBCMzQgLyog
VXNlckFnZW50U2NyaXB0c0RhdGEuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQ0RBQjZEMzAxN0M5MjU5NTAwQzYwQjM0IC8qIFVzZXJBZ2VudFNjcmlw
dHNEYXRhLmNwcCAqLzsgfTsKLQkJQ0RBQjZEMzIxN0M5MjU5NTAwQzYwQjM1IC8qIFNEUFByb2Nl
c3NvclNjcmlwdHNEYXRhLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IENEQUI2RDMwMTdDOTI1OTUwMEM2MEIzNSAvKiBTRFBQcm9jZXNzb3JTY3JpcHRz
RGF0YS5jcHAgKi87IH07CiAJCUNEQUU4QzA5MTc0NkI5NTcwMDUzMkQ3OCAvKiBQbGF0Zm9ybU1l
ZGlhU2Vzc2lvbk1hbmFnZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQ0RBRThDMDcxNzQ2Qjk1NzAwNTMyRDc4IC8qIFBsYXRmb3JtTWVkaWFTZXNz
aW9uTWFuYWdlci5jcHAgKi87IH07CiAJCUNEQkVBRUFDMTlEOTJCNkMwMEJFQkE4OCAvKiBNZWRp
YVNlbGVjdGlvbkdyb3VwQVZGT2JqQy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IENEQkVBRUFBMTlEOTJCNkMwMEJFQkE4OCAvKiBNZWRpYVNlbGVjdGlv
bkdyb3VwQVZGT2JqQy5tbSAqLzsgfTsKIAkJQ0RCRUFFQUQxOUQ5MkI2QzAwQkVCQTg4IC8qIE1l
ZGlhU2VsZWN0aW9uR3JvdXBBVkZPYmpDLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBDREJFQUVBQjE5RDkyQjZDMDBCRUJBODggLyogTWVkaWFTZWxlY3Rp
b25Hcm91cEFWRk9iakMuaCAqLzsgfTsKQEAgLTk2MDYsNiArOTU5Miw4IEBACiAJCTQxQUJFNjc5
MUQwNTgwRDUwMDZEODYyRCAvKiBDcm9zc09yaWdpblByZWZsaWdodENoZWNrZXIuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ3Jvc3NPcmlnaW5QcmVmbGlnaHRDaGVj
a2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDFBQkU2N0ExRDA1ODBENTAw
NkQ4NjJEIC8qIENyb3NzT3JpZ2luUHJlZmxpZ2h0Q2hlY2tlci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBDcm9zc09yaWdpblByZWZsaWdodENoZWNrZXIuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDFBRDc1MzkxQ0VGNkJDRTAwQTMxNDg2IC8qIEZldGNoT3B0
aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGZXRjaE9wdGlvbnMuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDFCMjhCMTIxRjg1MDFBMzAwRkI1MkFDIC8q
IE1lZGlhRW5kcG9pbnRDb25maWd1cmF0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IE1lZGlhRW5kcG9pbnRDb25maWd1cmF0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTQxQjI4QjEzMUY4NTAxQTQwMEZCNTJBQyAvKiBNZWRpYUVuZHBvaW50Q29uZmln
dXJhdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNZWRpYUVu
ZHBvaW50Q29uZmlndXJhdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQx
QjJBNjI1MUVGMUJGNjAwMDJCOUQ3QSAvKiBXZWJBdWRpb1NvdXJjZVByb3ZpZGVyLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFdlYkF1ZGlvU291cmNlUHJvdmlkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNDFCNDU5REExRjRDQURCOTAwMDBGNkZEIC8qIFJlYWRhYmxlU3RyZWFtLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlYWRhYmxlU3RyZWFtLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxQjQ1OUVEMUY1NUVCQzcwMDAwRjZGRCAvKiBSZWFkYWJs
ZVN0cmVhbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZWFkYWJs
ZVN0cmVhbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMDczNCw4ICsxMDcy
Miw2IEBACiAJCTVEQjFCQzY4MTA3MTVBNjQwMEVGQUE0OSAvKiBUcmFuc2Zvcm1Tb3VyY2UuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVHJhbnNmb3JtU291cmNlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVEQjFCQzY5MTA3MTVBNjQwMEVGQUE0OSAvKiBUcmFu
c2Zvcm1Tb3VyY2VMaWJ4c2x0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFRyYW5zZm9ybVNvdXJjZUxpYnhzbHQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk1REZFQkFCNjE4NTkyQjZEMDBDNzVCRUIgLyogV2ViS2l0QXZhaWxhYmlsaXR5LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYktpdEF2YWlsYWJpbGl0eS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1RTE2QTJFMjFCRkE2NEZCMDAyOUEyMUUgLyogTWVk
aWFFbmRwb2ludFBlZXJDb25uZWN0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IE1lZGlhRW5kcG9pbnRQZWVyQ29ubmVjdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCTVFMTZBMkUzMUJGQTY0RkIwMDI5QTIxRSAvKiBNZWRpYUVuZHBvaW50
UGVlckNvbm5lY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWVkaWFF
bmRwb2ludFBlZXJDb25uZWN0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVF
MkM0MzREMUJDRUUyRTUwMDAxRTJCQyAvKiBQZWVyQ29ubmVjdGlvbkJhY2tlbmQuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGVlckNvbm5lY3Rpb25CYWNrZW5kLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVFMkM0MzU0MUJDRUUzMEQwMDAxRTJCQyAvKiBSVENQ
ZWVyQ29ubmVjdGlvbi5qcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuamF2YXNjcmlwdDsgcGF0aCA9
IFJUQ1BlZXJDb25uZWN0aW9uLmpzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1RTJD
NDM1NTFCQ0VFMzBEMDAwMUUyQkMgLyogUlRDUGVlckNvbm5lY3Rpb25JbnRlcm5hbHMuanMgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmphdmFzY3JpcHQ7IHBhdGggPSBSVENQZWVyQ29ubmVjdGlvbklu
dGVybmFscy5qczsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEwNzYzLDI5ICsxMDc0
OSwxNiBAQAogCQk1RTJDNDM3NjFCQ0Y5QTBCMDAwMUUyQkMgLyogUlRDUGVlckNvbm5lY3Rpb25C
dWlsdGlucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSVENQZWVyQ29ubmVj
dGlvbkJ1aWx0aW5zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVFMkM0Mzc4MUJD
RjlBMEIwMDAxRTJCQyAvKiBSVENQZWVyQ29ubmVjdGlvbkludGVybmFsc0J1aWx0aW5zLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJUQ1BlZXJDb25uZWN0aW9uSW50
ZXJuYWxzQnVpbHRpbnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1RTJDNDM3
OTFCQ0Y5QTBCMDAwMUUyQkMgLyogUlRDUGVlckNvbm5lY3Rpb25JbnRlcm5hbHNCdWlsdGlucy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSVENQZWVyQ29ubmVjdGlvbkludGVy
bmFsc0J1aWx0aW5zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTVFNEVBQjAyMUQw
NzE2NEMwMDA2QTE4NCAvKiBNZWRpYUVuZHBvaW50U2Vzc2lvbkRlc2NyaXB0aW9uLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1lZGlhRW5kcG9pbnRTZXNzaW9uRGVz
Y3JpcHRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1RTRFQUIwMzFEMDcx
NjRDMDAwNkExODQgLyogTWVkaWFFbmRwb2ludFNlc3Npb25EZXNjcmlwdGlvbi5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNZWRpYUVuZHBvaW50U2Vzc2lvbkRlc2NyaXB0aW9u
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVFNUUyQjEwMUNGQzNFNEIwMDBDMEQ4
NSAvKiBSVENSdHBUcmFuc2NlaXZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBSVENSdHBUcmFuc2NlaXZlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTVFNUUyQjExMUNGQzNFNEIwMDBDMEQ4NSAvKiBSVENSdHBUcmFuc2NlaXZlci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSVENSdHBUcmFuc2NlaXZlci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk1RTVFMkIxMjFDRkMzRTRCMDAwQzBEODUgLyogUlRDUnRw
VHJhbnNjZWl2ZXIuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFJUQ1J0cFRyYW5zY2VpdmVy
LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUU2NjUzMDkxREE0MzdCRjAwRkRE
ODRDIC8qIFJUQ0ljZVRyYW5zcG9ydC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBSVENJY2VUcmFuc3BvcnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNUVBM0Q2
REQxQzg1OUQ1MzAwMzAwQkJCIC8qIE1vY2tNZWRpYUVuZHBvaW50LmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1vY2tNZWRpYUVuZHBvaW50LmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNUVBM0Q2REUxQzg1OUQ1MzAwMzAwQkJCIC8qIE1vY2tNZWRp
YUVuZHBvaW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1vY2tNZWRpYUVu
ZHBvaW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTVFQTNENkUxMUM4NTlEQUEw
MDMwMEJCQiAvKiBTRFBQcm9jZXNzb3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gU0RQUHJvY2Vzc29yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
NUVBM0Q2RTIxQzg1OURBQTAwMzAwQkJCIC8qIFNEUFByb2Nlc3Nvci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBTRFBQcm9jZXNzb3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJNUVBM0Q2RTUxQzg1QTlDMzAwMzAwQkJCIC8qIFNEUFByb2Nlc3NvclNjcmlwdFJl
c291cmNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNEUFByb2Nl
c3NvclNjcmlwdFJlc291cmNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNUVB
M0Q2RTYxQzg1QTlDMzAwMzAwQkJCIC8qIFNEUFByb2Nlc3NvclNjcmlwdFJlc291cmNlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNEUFByb2Nlc3NvclNjcmlwdFJlc291cmNl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVFQTcyNUNBMUFDQUJDQjUwMEVBRDE3
QiAvKiBOYXZpZ2F0b3JNZWRpYURldmljZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gTmF2aWdhdG9yTWVkaWFEZXZpY2VzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNUVBNzI1Q0IxQUNBQkNCNTAwRUFEMTdCIC8qIE5hdmlnYXRvck1lZGlhRGV2
aWNlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBOYXZpZ2F0b3JNZWRpYURl
dmljZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUVBNzI1Q0MxQUNBQkNCNTAw
RUFEMTdCIC8qIE5hdmlnYXRvck1lZGlhRGV2aWNlcy5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRo
ID0gTmF2aWdhdG9yTWVkaWFEZXZpY2VzLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNUVBNzI1Q0QxQUNBQkNEOTAwRUFEMTdCIC8qIE1lZGlhRGV2aWNlcy5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNZWRpYURldmljZXMuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk1RUE3MjVDRTFBQ0FCQ0Q5MDBFQUQxN0IgLyogTWVkaWFEZXZp
Y2VzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1lZGlhRGV2aWNlcy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1RUE3MjVDRjFBQ0FCQ0Q5MDBFQUQxN0IgLyog
TWVkaWFEZXZpY2VzLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBNZWRpYURldmljZXMuaWRs
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1RUJCODkyQTFDNzc3N0QwMDBDNjVENDEg
LyogTWVkaWFFbmRwb2ludC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBNZWRpYUVuZHBvaW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNUVCQjg5
MkIxQzc3NzdEMDAwQzY1RDQxIC8qIE1lZGlhRW5kcG9pbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gTWVkaWFFbmRwb2ludC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQk1RUJCODkyQzFDNzc3N0QwMDBDNjVENDEgLyogTWVkaWFFbmRwb2ludENvbmZpZ3VyYXRp
b24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWVkaWFFbmRwb2lu
dENvbmZpZ3VyYXRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1RUJCODky
RDFDNzc3N0QwMDBDNjVENDEgLyogTWVkaWFFbmRwb2ludENvbmZpZ3VyYXRpb24uaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWVkaWFFbmRwb2ludENvbmZpZ3VyYXRpb24uaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNUVCQjg5MkUxQzc3NzdEMDAwQzY1RDQxIC8q
IE1lZGlhRW5kcG9pbnRTZXNzaW9uQ29uZmlndXJhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBNZWRpYUVuZHBvaW50U2Vzc2lvbkNvbmZpZ3VyYXRpb24uaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUVCQjg5MkYxQzc3NzdEMDAwQzY1RDQxIC8qIE1lZGlh
UGF5bG9hZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNZWRpYVBheWxvYWQu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUVCQjg5MzAxQzc3NzdFMTAwQzY1RDQx
IC8qIEljZUNhbmRpZGF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJY2VD
YW5kaWRhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUVCQjg5MzgxQzc3QkRB
NDAwQzY1RDQxIC8qIFBlZXJNZWRpYURlc2NyaXB0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFBlZXJNZWRpYURlc2NyaXB0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC0xNTE1Niw3ICsxNTEyOSw2IEBACiAJCUNEQUI2RDJDMTdDODE0RUUwMEM2MEIz
NCAvKiBKU01lZGlhQ29udHJvbHNIb3N0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEpTTWVkaWFDb250cm9sc0hvc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
Q0RBQjZEMkYxN0M5MjU5NTAwQzYwQjM0IC8qIFVzZXJBZ2VudFNjcmlwdHMuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVXNlckFnZW50U2NyaXB0cy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlDREFCNkQzMDE3QzkyNTk1MDBDNjBCMzQgLyogVXNlckFnZW50U2Ny
aXB0c0RhdGEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVXNlckFn
ZW50U2NyaXB0c0RhdGEuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlDREFCNkQz
MDE3QzkyNTk1MDBDNjBCMzUgLyogU0RQUHJvY2Vzc29yU2NyaXB0c0RhdGEuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU0RQUHJvY2Vzc29yU2NyaXB0c0RhdGEuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDREFFOEMwNzE3NDZCOTU3MDA1MzJENzgg
LyogUGxhdGZvcm1NZWRpYVNlc3Npb25NYW5hZ2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFBsYXRmb3JtTWVkaWFTZXNzaW9uTWFuYWdlci5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNEQUU4QzA4MTc0NkI5NTcwMDUzMkQ3OCAvKiBQbGF0Zm9y
bU1lZGlhU2Vzc2lvbk1hbmFnZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
UGxhdGZvcm1NZWRpYVNlc3Npb25NYW5hZ2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUNEQkVBRUFBMTlEOTJCNkMwMEJFQkE4OCAvKiBNZWRpYVNlbGVjdGlvbkdyb3VwQVZGT2Jq
Qy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IE1lZGlhU2VsZWN0
aW9uR3JvdXBBVkZPYmpDLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTY0MDMs
MTAgKzE2Mzc1LDYgQEAKIAkJCQkwN0FCRUY2RDFEOEExQzc2MDBGMjE5NzIgLyogTWVkaWFEZXZp
Y2VzRW51bWVyYXRpb25SZXF1ZXN0LmggKi8sCiAJCQkJMDczOTRFQzcxQkFCMkNDRDAwQkU5OUNE
IC8qIE1lZGlhRGV2aWNlc1JlcXVlc3QuY3BwICovLAogCQkJCTA3Mzk0RUM5MUJBQjJDRDcwMEJF
OTlDRCAvKiBNZWRpYURldmljZXNSZXF1ZXN0LmggKi8sCi0JCQkJNUUxNkEyRTIxQkZBNjRGQjAw
MjlBMjFFIC8qIE1lZGlhRW5kcG9pbnRQZWVyQ29ubmVjdGlvbi5jcHAgKi8sCi0JCQkJNUUxNkEy
RTMxQkZBNjRGQjAwMjlBMjFFIC8qIE1lZGlhRW5kcG9pbnRQZWVyQ29ubmVjdGlvbi5oICovLAot
CQkJCTVFNEVBQjAyMUQwNzE2NEMwMDA2QTE4NCAvKiBNZWRpYUVuZHBvaW50U2Vzc2lvbkRlc2Ny
aXB0aW9uLmNwcCAqLywKLQkJCQk1RTRFQUIwMzFEMDcxNjRDMDAwNkExODQgLyogTWVkaWFFbmRw
b2ludFNlc3Npb25EZXNjcmlwdGlvbi5oICovLAogCQkJCTA3MjIxQjRDMTdDRUMzMjcwMDg0OEU1
MSAvKiBNZWRpYVN0cmVhbS5jcHAgKi8sCiAJCQkJMDcyMjFCNEQxN0NFQzMyNzAwODQ4RTUxIC8q
IE1lZGlhU3RyZWFtLmggKi8sCiAJCQkJMDcyMjFCNEUxN0NFQzMyNzAwODQ4RTUxIC8qIE1lZGlh
U3RyZWFtLmlkbCAqLywKQEAgLTE2NTAxLDggKzE2NDY5LDYgQEAKIAkJCQk1RTJDNDM2NDFCQ0VF
MzcyMDAwMUUyQkMgLyogUlRDVHJhY2tFdmVudC5jcHAgKi8sCiAJCQkJNUUyQzQzNjUxQkNFRTM3
MjAwMDFFMkJDIC8qIFJUQ1RyYWNrRXZlbnQuaCAqLywKIAkJCQk1RTJDNDM2NjFCQ0VFMzcyMDAw
MUUyQkMgLyogUlRDVHJhY2tFdmVudC5pZGwgKi8sCi0JCQkJNUVBM0Q2RTExQzg1OURBQTAwMzAw
QkJCIC8qIFNEUFByb2Nlc3Nvci5jcHAgKi8sCi0JCQkJNUVBM0Q2RTIxQzg1OURBQTAwMzAwQkJC
IC8qIFNEUFByb2Nlc3Nvci5oICovLAogCQkJCTA3MjIxQjhEMTdDRUMzMjcwMDg0OEU1MSAvKiBV
c2VyTWVkaWFDbGllbnQuaCAqLywKIAkJCQkwNzIyMUI4RTE3Q0VDMzI3MDA4NDhFNTEgLyogVXNl
ck1lZGlhQ29udHJvbGxlci5jcHAgKi8sCiAJCQkJMDcyMjFCOEYxN0NFQzMyNzAwODQ4RTUxIC8q
IFVzZXJNZWRpYUNvbnRyb2xsZXIuaCAqLywKQEAgLTE2NTI1LDExICsxNjQ5MSw4IEBACiAJCQkJ
NUVCQjg5MzAxQzc3NzdFMTAwQzY1RDQxIC8qIEljZUNhbmRpZGF0ZS5oICovLAogCQkJCTFCRTVC
RkMxMUQ1MTU3MTUwMDE2NjZEOSAvKiBNZWRpYUNvbnN0cmFpbnRzLmNwcCAqLywKIAkJCQkwNzIy
MUI5OTE3Q0YwQUQ0MDA4NDhFNTEgLyogTWVkaWFDb25zdHJhaW50cy5oICovLAotCQkJCTVFQkI4
OTJBMUM3Nzc3RDAwMEM2NUQ0MSAvKiBNZWRpYUVuZHBvaW50LmNwcCAqLywKLQkJCQk1RUJCODky
QjFDNzc3N0QwMDBDNjVENDEgLyogTWVkaWFFbmRwb2ludC5oICovLAotCQkJCTVFQkI4OTJDMUM3
Nzc3RDAwMEM2NUQ0MSAvKiBNZWRpYUVuZHBvaW50Q29uZmlndXJhdGlvbi5jcHAgKi8sCi0JCQkJ
NUVCQjg5MkQxQzc3NzdEMDAwQzY1RDQxIC8qIE1lZGlhRW5kcG9pbnRDb25maWd1cmF0aW9uLmgg
Ki8sCi0JCQkJNUVCQjg5MkUxQzc3NzdEMDAwQzY1RDQxIC8qIE1lZGlhRW5kcG9pbnRTZXNzaW9u
Q29uZmlndXJhdGlvbi5oICovLAorCQkJCTQxQjI4QjEzMUY4NTAxQTQwMEZCNTJBQyAvKiBNZWRp
YUVuZHBvaW50Q29uZmlndXJhdGlvbi5jcHAgKi8sCisJCQkJNDFCMjhCMTIxRjg1MDFBMzAwRkI1
MkFDIC8qIE1lZGlhRW5kcG9pbnRDb25maWd1cmF0aW9uLmggKi8sCiAJCQkJNUVCQjg5MkYxQzc3
NzdEMDAwQzY1RDQxIC8qIE1lZGlhUGF5bG9hZC5oICovLAogCQkJCTA3MEY1NDk3MTdGMTJGNkIw
MDE2OUUwNCAvKiBNZWRpYVN0cmVhbUNvbnN0cmFpbnRzVmFsaWRhdGlvbkNsaWVudC5oICovLAog
CQkJCTA3MTE1ODhGMTdERjYzMzcwMEVERkUyQiAvKiBNZWRpYVN0cmVhbVByaXZhdGUuY3BwICov
LApAQCAtMTY1NjcsOCArMTY1MzAsNiBAQAogCQkJCTA3MjIxQkFEMTdDRjBBRDQwMDg0OEU1MSAv
KiBSVENTZXNzaW9uRGVzY3JpcHRpb25SZXF1ZXN0LmggKi8sCiAJCQkJMzEzNTkxMDUxRTdEREM2
MDAwRjMwNjMwIC8qIFJUQ1NpZ25hbGluZ1N0YXRlLmggKi8sCiAJCQkJMDcyMjFCQjAxN0NGMEFE
NDAwODQ4RTUxIC8qIFJUQ1ZvaWRSZXF1ZXN0LmggKi8sCi0JCQkJNUVBM0Q2RTUxQzg1QTlDMzAw
MzAwQkJCIC8qIFNEUFByb2Nlc3NvclNjcmlwdFJlc291cmNlLmNwcCAqLywKLQkJCQk1RUEzRDZF
NjFDODVBOUMzMDAzMDBCQkIgLyogU0RQUHJvY2Vzc29yU2NyaXB0UmVzb3VyY2UuaCAqLywKIAkJ
CQkwNzBFODFEMDFCRjI3NjU2MDAxRkRBNDggLyogVmlkZW9UcmFja1ByaXZhdGVNZWRpYVN0cmVh
bS5oICovLAogCQkJCTQxQjJBNjI1MUVGMUJGNjAwMDJCOUQ3QSAvKiBXZWJBdWRpb1NvdXJjZVBy
b3ZpZGVyLmggKi8sCiAJCQkpOwpAQCAtMTkyNDUsOCArMTkyMDYsNiBAQAogCQkJCTA3N0I2NDE1
MUI5NUY3MDMwMDNFOUFENSAvKiBNZWRpYVBsYXliYWNrVGFyZ2V0TW9jay5oICovLAogCQkJCTA3
N0I2NDEwMUI5NEYxMkUwMDNFOUFENSAvKiBNZWRpYVBsYXliYWNrVGFyZ2V0UGlja2VyTW9jay5j
cHAgKi8sCiAJCQkJMDc3QjY0MTExQjk0RjEyRTAwM0U5QUQ1IC8qIE1lZGlhUGxheWJhY2tUYXJn
ZXRQaWNrZXJNb2NrLmggKi8sCi0JCQkJNUVBM0Q2REQxQzg1OUQ1MzAwMzAwQkJCIC8qIE1vY2tN
ZWRpYUVuZHBvaW50LmNwcCAqLywKLQkJCQk1RUEzRDZERTFDODU5RDUzMDAzMDBCQkIgLyogTW9j
a01lZGlhRW5kcG9pbnQuaCAqLywKIAkJCQkwN0Q2QTRGMTFCRUQ1Rjg4MDAxNzQxNDYgLyogTW9j
a1JlYWx0aW1lQXVkaW9Tb3VyY2UuY3BwICovLAogCQkJCTA3RDZBNEYyMUJFRDVGODgwMDE3NDE0
NiAvKiBNb2NrUmVhbHRpbWVBdWRpb1NvdXJjZS5oICovLAogCQkJCTA3RDZBNEVEMUJFQ0YyRDIw
MDE3NDE0NiAvKiBNb2NrUmVhbHRpbWVNZWRpYVNvdXJjZS5jcHAgKi8sCkBAIC0xOTQwMyw3ICsx
OTM2Miw2IEBACiAJCQkJNUUyQzQzNzYxQkNGOUEwQjAwMDFFMkJDIC8qIFJUQ1BlZXJDb25uZWN0
aW9uQnVpbHRpbnMuaCAqLywKIAkJCQk1RTJDNDM3ODFCQ0Y5QTBCMDAwMUUyQkMgLyogUlRDUGVl
ckNvbm5lY3Rpb25JbnRlcm5hbHNCdWlsdGlucy5jcHAgKi8sCiAJCQkJNUUyQzQzNzkxQkNGOUEw
QjAwMDFFMkJDIC8qIFJUQ1BlZXJDb25uZWN0aW9uSW50ZXJuYWxzQnVpbHRpbnMuaCAqLywKLQkJ
CQlDREFCNkQzMDE3QzkyNTk1MDBDNjBCMzUgLyogU0RQUHJvY2Vzc29yU2NyaXB0c0RhdGEuY3Bw
ICovLAogCQkJCTQzQjg1RUQyMThDQkVDNTIwMEUzMUFGNCAvKiBTZWxlY3RvclBzZXVkb0NsYXNz
QW5kQ29tcGF0aWJpbGl0eUVsZW1lbnRNYXAuY3BwICovLAogCQkJCTQzQjg1RUQzMThDQkVDNTIw
MEUzMUFGNCAvKiBTZWxlY3RvclBzZXVkb0NsYXNzQW5kQ29tcGF0aWJpbGl0eUVsZW1lbnRNYXAu
Z3BlcmYgKi8sCiAJCQkJMjZBQTBGOUQxOEQyQTE4QjAwNDE5MzgxIC8qIFNlbGVjdG9yUHNldWRv
RWxlbWVudFR5cGVNYXAuY3BwICovLApAQCAtMjYxMjksNiArMjYwODcsMTIgQEAKIAkJCWNoaWxk
cmVuID0gKAogCQkJCUNFMjYxNkE0MTg3RTY1QzEwMDc5NTVGMyAvKiBpb3MgKi8sCiAJCQkJMkQ1
MDM2NjYxQkNERERDNDAwRTIwQkIzIC8qIG1hYyAqLywKKwkJCQk3Q0QwRTJCNjFGODBBNDgyMDAx
NkE0Q0UgLyogQWJvcnRDb250cm9sbGVyLmNwcCAqLywKKwkJCQk3Q0QwRTJCNTFGODBBNDgyMDAx
NkE0Q0UgLyogQWJvcnRDb250cm9sbGVyLmggKi8sCisJCQkJN0NEMEUyQjcxRjgwQTQ4MjAwMTZB
NENFIC8qIEFib3J0Q29udHJvbGxlci5pZGwgKi8sCisJCQkJN0NEMEUyQkQxRjgwQTU2RTAwMTZB
NENFIC8qIEFib3J0U2lnbmFsLmNwcCAqLywKKwkJCQk3Q0QwRTJCQzFGODBBNTZFMDAxNkE0Q0Ug
LyogQWJvcnRTaWduYWwuaCAqLywKKwkJCQk3Q0QwRTJCRTFGODBBNTZFMDAxNkE0Q0UgLyogQWJv
cnRTaWduYWwuaWRsICovLAogCQkJCTdDNTIyMjk3MUUxREFFMTYwMDJDQjhGNyAvKiBBY3RpdmVE
T01DYWxsYmFjay5jcHAgKi8sCiAJCQkJN0M1MjIyOTgxRTFEQUUxNjAwMkNCOEY3IC8qIEFjdGl2
ZURPTUNhbGxiYWNrLmggKi8sCiAJCQkJN0NEMEJBMDIxQjhGNzlDOTAwNUNFQkJFIC8qIEFjdGl2
ZURPTUNhbGxiYWNrTWljcm90YXNrLmNwcCAqLywKQEAgLTI2MTM2LDEyICsyNjEwMCw2IEBACiAJ
CQkJRTFDNERFNkQwRUE3NUM2NTAwMjNDQ0Q2IC8qIEFjdGl2ZURPTU9iamVjdC5jcHAgKi8sCiAJ
CQkJRTFDNERFNjgwRUE3NUMxRTAwMjNDQ0Q2IC8qIEFjdGl2ZURPTU9iamVjdC5oICovLAogCQkJ
CTgzQkI1Qzg3MUQ1RDZGM0EwMDVBNzFGNCAvKiBBbGxEZXNjZW5kYW50c0NvbGxlY3Rpb24uaCAq
LywKLQkJCQk3Q0QwRTJCNTFGODBBNDgyMDAxNkE0Q0UgLyogQWJvcnRDb250cm9sbGVyLmggKi8s
Ci0JCQkJN0NEMEUyQjYxRjgwQTQ4MjAwMTZBNENFIC8qIEFib3J0Q29udHJvbGxlci5jcHAgKi8s
Ci0JCQkJN0NEMEUyQjcxRjgwQTQ4MjAwMTZBNENFIC8qIEFib3J0Q29udHJvbGxlci5pZGwgKi8s
Ci0JCQkJN0NEMEUyQkMxRjgwQTU2RTAwMTZBNENFIC8qIEFib3J0U2lnbmFsLmggKi8sCi0JCQkJ
N0NEMEUyQkQxRjgwQTU2RTAwMTZBNENFIC8qIEFib3J0U2lnbmFsLmNwcCAqLywKLQkJCQk3Q0Qw
RTJCRTFGODBBNTZFMDAxNkE0Q0UgLyogQWJvcnRTaWduYWwuaWRsICovLAogCQkJCTMxOTg0N0ZF
MUExRDgxNjcwMEExMzMxOCAvKiBBbmltYXRpb25FdmVudC5jcHAgKi8sCiAJCQkJMzE5ODQ3RkYx
QTFEODE2NzAwQTEzMzE4IC8qIEFuaW1hdGlvbkV2ZW50LmggKi8sCiAJCQkJMzE5ODQ4MDAxQTFE
ODE2NzAwQTEzMzE4IC8qIEFuaW1hdGlvbkV2ZW50LmlkbCAqLywKQEAgLTI3MDM2LDYgKzI2OTk0
LDggQEAKIAkJCWlzYSA9IFBCWEhlYWRlcnNCdWlsZFBoYXNlOwogCQkJYnVpbGRBY3Rpb25NYXNr
ID0gMjE0NzQ4MzY0NzsKIAkJCWZpbGVzID0gKAorCQkJCTdDRDBFMkI4MUY4MEE0ODIwMDE2QTRD
RSAvKiBBYm9ydENvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTdDRDBFMkJGMUY4MEE1
NkUwMDE2QTRDRSAvKiBBYm9ydFNpZ25hbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRjQ4MjIzMTMx
RTM4NkUyNDAwNjZGQzc5IC8qIEFic3RyYWN0UGFzdGVib2FyZC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJNDFFMUIxRDEwRkY1OTg2OTAwNTc2QjNCIC8qIEFic3RyYWN0V29ya2VyLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkyOUE4MTIyRTBGQkI5QzFEMDA1MTAyOTMgLyogQWNjZXNzaWJpbGl0eUFSSUFH
cmlkQ2VsbC5oIGluIEhlYWRlcnMgKi8sCkBAIC0yODMzMyw2ICsyODI5Myw4IEBACiAJCQkJMkQw
QjRBQUIxOERBMUNDRDAwNDM0REUxIC8qIElPU3VyZmFjZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MUMyMUU1N0QxODNFRDFGRjAwMUMyODlEIC8qIElPU3VyZmFjZVBvb2wuaCBpbiBIZWFkZXJzICov
LAogCQkJCTA3QUM0NzAyMTk1MjEwMjEwMEVFOTcyMyAvKiBJU09WVFRDdWUuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTdDMzBEOTg0MUY4MTVBRUMwMDI2ODM1NiAvKiBKU0Fib3J0Q29udHJvbGxlci5o
IGluIEhlYWRlcnMgKi8sCisJCQkJN0MzMEQ5ODYxRjgxNUFFQzAwMjY4MzU2IC8qIEpTQWJvcnRT
aWduYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTQxOEY4ODA1MEZGOTU3QUYwMDgwRjA0NSAvKiBK
U0Fic3RyYWN0V29ya2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQk1NzA0NDA1QTFFNTM5MzYyMDAz
NTY2MDEgLyogSlNBZXNDYmNDZmJQYXJhbXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTU3RTFFNUFE
MUU4REQwOUIwMEVFMzdDOSAvKiBKU0Flc0N0clBhcmFtcy5oIGluIEhlYWRlcnMgKi8sCkBAIC0y
OTI1NiwxMSArMjkyMTgsNyBAQAogCQkJCTA3RkU5OUREMTg4MDdBN0QwMDI1NjY0OCAvKiBNZWRp
YUVsZW1lbnRTZXNzaW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkyRDlCRjcwNjFEQkZCQjI0MDA3
QTdEOTkgLyogTWVkaWFFbmNyeXB0ZWRFdmVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkQ5QkY3
MDgxREJGQkIyNDAwN0E3RDk5IC8qIE1lZGlhRW5jcnlwdGVkRXZlbnRJbml0LmggaW4gSGVhZGVy
cyAqLywKLQkJCQk1RUJCODkzNTFDNzc3ODI5MDBDNjVENDEgLyogTWVkaWFFbmRwb2ludC5oIGlu
IEhlYWRlcnMgKi8sCi0JCQkJNUVCQjg5MzcxQzc3NzgyOTAwQzY1RDQxIC8qIE1lZGlhRW5kcG9p
bnRDb25maWd1cmF0aW9uLmggaW4gSGVhZGVycyAqLywKLQkJCQk1RTE2QTJFNDFCRkE2NTBCMDAy
OUEyMUUgLyogTWVkaWFFbmRwb2ludFBlZXJDb25uZWN0aW9uLmggaW4gSGVhZGVycyAqLywKLQkJ
CQk1RUJCODkzMjFDNzc3ODIzMDBDNjVENDEgLyogTWVkaWFFbmRwb2ludFNlc3Npb25Db25maWd1
cmF0aW9uLmggaW4gSGVhZGVycyAqLywKLQkJCQk1RTRFQUIwNDFEMDcxNjZBMDAwNkExODQgLyog
TWVkaWFFbmRwb2ludFNlc3Npb25EZXNjcmlwdGlvbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJNDFC
MjhCMTUxRjg1MDFEMzAwRkI1MkFDIC8qIE1lZGlhRW5kcG9pbnRDb25maWd1cmF0aW9uLmggaW4g
SGVhZGVycyAqLywKIAkJCQlFNDQ2MTNBRDBDRDYzMzEwMDBGQURBNzUgLyogTWVkaWFFcnJvci5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJNEUxOTU5MjIwQTM5REFCQTAwMjIwRkU1IC8qIE1lZGlhRmVh
dHVyZU5hbWVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwN0E2RDFFQzE0OTExMzc3MDAwNTFEMEMg
LyogTWVkaWFGcmFnbWVudFVSSVBhcnNlci5oIGluIEhlYWRlcnMgKi8sCkBAIC0yOTM0NSwxMSAr
MjkzMDMsOSBAQAogCQkJCTUyRjEwODY2MTYyQjZEQTgwMDlBQzgxRSAvKiBNaXhlZENvbnRlbnRD
aGVja2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQlDREYyQjAxMTE4MjA1NDA2MDBGMkI0MjQgLyog
TW9ja0JveC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQ0RGNEI3MjQxRTAzQkY4MTAwRTIzNUEyIC8q
IE1vY2tDRE1GYWN0b3J5LmggaW4gSGVhZGVycyAqLywKLQkJCQk3QzMwRDk4NDFGODE1QUVDMDAy
NjgzNTYgLyogSlNBYm9ydENvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUNERjRCNzIw
MUUwM0JGNkYwMEUyMzVBMiAvKiBNb2NrQ0RNRmFjdG9yeS5pZGwgaW4gSGVhZGVycyAqLywKIAkJ
CQk1MTA1OEFFMDFENjdDMjI5MDA5QTUzOEMgLyogTW9ja0dhbWVwYWQuaCBpbiBIZWFkZXJzICov
LAogCQkJCTUxMDU4QUUyMUQ2N0MyMjkwMDlBNTM4QyAvKiBNb2NrR2FtZXBhZFByb3ZpZGVyLmgg
aW4gSGVhZGVycyAqLywKLQkJCQk1RUEzRDZERjFDODU5RDdGMDAzMDBCQkIgLyogTW9ja01lZGlh
RW5kcG9pbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUNERjJCMDEzMTgyMDU0MDYwMEYyQjQyNCAv
KiBNb2NrTWVkaWFQbGF5ZXJNZWRpYVNvdXJjZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQ0RGMkIw
MTUxODIwNTQwNjAwRjJCNDI0IC8qIE1vY2tNZWRpYVNvdXJjZVByaXZhdGUuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTA3RDZBNEY0MUJFRDVGODgwMDE3NDE0NiAvKiBNb2NrUmVhbHRpbWVBdWRpb1Nv
dXJjZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0yOTk4NCw4ICsyOTk0MCw2IEBACiAJCQkJODNDNTc5
NUQxREE1QzMwMTAwNkZBQ0E4IC8qIFNjcm9sbFRvT3B0aW9ucy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJOTNDMDlDODYwQjA2NTdBQTAwNUFCRDREIC8qIFNjcm9sbFR5cGVzLmggaW4gSGVhZGVycyAq
LywKIAkJCQlCQzZENkUyNjA5QUY5NDM1MDBGNTk3NTkgLyogU2Nyb2xsVmlldy5oIGluIEhlYWRl
cnMgKi8sCi0JCQkJNUVBM0Q2RTQxQzg1OURDMTAwMzAwQkJCIC8qIFNEUFByb2Nlc3Nvci5oIGlu
IEhlYWRlcnMgKi8sCi0JCQkJNUVBM0Q2RTgxQzg1QTlEQjAwMzAwQkJCIC8qIFNEUFByb2Nlc3Nv
clNjcmlwdFJlc291cmNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlGNTVCM0REMjEyNTFGMTJEMDAz
RUYyNjkgLyogU2VhcmNoSW5wdXRUeXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBQjcxNzA4OTBC
MzExODA4MDAxNzEyM0UgLyogU2VhcmNoUG9wdXBNZW51LmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RTcwNThGNDFCQzVDRURBMDA0NUE1MDcgLyogU2VhcmNoUG9wdXBNZW51Q29jb2EuaCBpbiBIZWFk
ZXJzICovLApAQCAtMzAyMzcsNyArMzAxOTEsNiBAQAogCQkJCUIyMjI3OTk1MEQwMEJGMjIwMDcx
Qjc4MiAvKiBTVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QjIyMjc5OTgwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR0FuaW1hdGlvbkVsZW1lbnQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTQzOUQzMzQ1MTNBNjkxMUMwMEMyMEY0RiAvKiBTVkdBbmltYXRvckZhY3Rv
cnkuaCBpbiBIZWFkZXJzICovLAotCQkJCTdDMzBEOTg2MUY4MTVBRUMwMDI2ODM1NiAvKiBKU0Fi
b3J0U2lnbmFsLmggaW4gSGVhZGVycyAqLywKIAkJCQkwOEZCM0Y4NDEzQkM3NTRDMDA5OUZDMTgg
LyogU1ZHQXR0cmlidXRlVG9Qcm9wZXJ0eU1hcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjIyMjc5
OUMwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR0NpcmNsZUVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAog
CQkJCUIyMjI3OTlGMEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdDbGlwUGF0aEVsZW1lbnQuaCBpbiBI
ZWFkZXJzICovLApAQCAtMzAyODEsNyArMzAyMzQsNiBAQAogCQkJCUIyMjI3QTA2MEQwMEJGMjIw
MDcxQjc4MiAvKiBTVkdGRVRpbGVFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjIyN0Ew
OTBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHRkVUdXJidWxlbmNlRWxlbWVudC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJODQ1RTcyRkMwRkQyNjIzOTAwQTg3RDc5IC8qIFNWR0ZpbHRlci5oIGluIEhlYWRl
cnMgKi8sCi0JCQkJN0NEMEUyQkYxRjgwQTU2RTAwMTZBNENFIC8qIEFib3J0U2lnbmFsLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwODFFQkYzQjBGRDM0RjQxMDBEQTc1NTkgLyogU1ZHRmlsdGVyQnVp
bGRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjIyMjdBMEMwRDAwQkYyMjAwNzFCNzgyIC8qIFNW
R0ZpbHRlckVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyMjI3QTBGMEQwMEJGMjIwMDcx
Qjc4MiAvKiBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMuaCBpbiBIZWFkZXJz
ICovLApAQCAtMzA3MzYsNyArMzA2ODgsNiBAQAogCQkJCTc3QTE3QTc4MTJGMjg2NDIwMDRFMDJG
NiAvKiBXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMTZC
REI4QzFFNkUxNTMwMDBERTBENUEgLyogV2ViR1BVTGF5ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUE1RTIxMjNDMUU0OTI0QTQwMENFMTA0NCAvKiBXZWJIZWFwQWdlbnQuaCBpbiBIZWFkZXJzICov
LAotCQkJCTdDRDBFMkI4MUY4MEE0ODIwMDE2QTRDRSAvKiBBYm9ydENvbnRyb2xsZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUE1ODQwRTI1MTg3QjhBQzIwMDg0M0IxMCAvKiBXZWJJbmplY3RlZFNj
cmlwdEhvc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1ODRGRTMwMTg2NENCODQwMDg0M0IxMCAv
KiBXZWJJbmplY3RlZFNjcmlwdE1hbmFnZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUY0ODIyMzEx
MUUzODY5QjgwMDY2RkM3OSAvKiBXZWJJdGVtUHJvdmlkZXJQYXN0ZWJvYXJkLmggaW4gSGVhZGVy
cyAqLywKQEAgLTMxMjI2LDYgKzMxMTc3LDggQEAKIAkJCWlzYSA9IFBCWFNvdXJjZXNCdWlsZFBo
YXNlOwogCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKIAkJCWZpbGVzID0gKAorCQkJ
CTdDRDBFMkI5MUY4MEE0ODIwMDE2QTRDRSAvKiBBYm9ydENvbnRyb2xsZXIuY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJN0NEMEUyQzAxRjgwQTU2RTAwMTZBNENFIC8qIEFib3J0U2lnbmFsLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTQxRTFCMUQwMEZGNTk4NjkwMDU3NkIzQiAvKiBBYnN0cmFjdFdv
cmtlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzN0Y1N0FCOTFBNTA3MjY5MDA4NzZGOTggLyog
QWNjZXNzaWJpbGl0eUFSSUFHcmlkLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTM3RjU3QUJBMUE1
MDcyNkYwMDg3NkY5OCAvKiBBY2Nlc3NpYmlsaXR5QVJJQUdyaWRDZWxsLmNwcCBpbiBTb3VyY2Vz
ICovLApAQCAtMzE1MDMsNyArMzE0NTYsNiBAQAogCQkJCUNFMjg0OTg5MUNBMzYxNDYwMEI0QTU3
RiAvKiBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVOYW1lcy5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlDRTc5OUZBNzFDNkE1MDU3MDA5N0I1MTggLyogQ29udGVudFNlY3VyaXR5UG9saWN5
TWVkaWFMaXN0RGlyZWN0aXZlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUNFNkRBREY5MUM1OTFF
NkEwMDNGNkE4OCAvKiBDb250ZW50U2VjdXJpdHlQb2xpY3lSZXNwb25zZUhlYWRlcnMuY3BwIGlu
IFNvdXJjZXMgKi8sCi0JCQkJN0MzMEQ5ODUxRjgxNUFFQzAwMjY4MzU2IC8qIEpTQWJvcnRTaWdu
YWwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQ0U3OTlGOUYxQzZBNEMxNjAwOTdCNTE4IC8qIENv
bnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDRTc5OUY5
NzFDNkE0NkJDMDA5N0I1MTggLyogQ29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlDRTc5OUZBQjFDNkE1MDY2MDA5N0I1MTggLyogQ29udGVudFNl
Y3VyaXR5UG9saWN5U291cmNlTGlzdERpcmVjdGl2ZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTMx
NTc1LDcgKzMxNTI3LDYgQEAKIAkJCQlFMTIzM0YxMDE4NUE0MTMwMDA4REZBRjUgLyogQ3J5cHRv
QWxnb3JpdGhtUlNBRVNfUEtDUzFfdjFfNU1hYy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFMUJE
MzMxOTE4MkQ4REREMDBDMDVEOUYgLyogQ3J5cHRvQWxnb3JpdGhtUlNBU1NBX1BLQ1MxX3YxXzUu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTFDMjY2RDgxODMxN0FCNDAwM0Y4QjMzIC8qIENyeXB0
b0FsZ29yaXRobVJTQVNTQV9QS0NTMV92MV81TWFjLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTdD
MzBEOTgzMUY4MTVBRUMwMDI2ODM1NiAvKiBKU0Fib3J0Q29udHJvbGxlci5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlFMTI1RjgyQjE4MjJDRkVDMDBEODRDRDkgLyogQ3J5cHRvQWxnb3JpdGhtU0hB
MS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFMTlBQzNFRTE4MjREQzc5MDAzNDk0MjYgLyogQ3J5
cHRvQWxnb3JpdGhtU0hBMjI0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUxOUFDM0YwMTgyNERD
NzkwMDM0OTQyNiAvKiBDcnlwdG9BbGdvcml0aG1TSEEyNTYuY3BwIGluIFNvdXJjZXMgKi8sCkBA
IC0zMjM1Niw2ICszMjMwNyw4IEBACiAJCQkJMUMyMUU1N0MxODNFRDFGRjAwMUMyODlEIC8qIElP
U3VyZmFjZVBvb2wuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQUQ5RkY2RTExOTA4MzkxRDAwM0I2
MUUwIC8qIElPU3VyZmFjZVBvb2xDb2NvYS5tbSBpbiBTb3VyY2VzICovLAogCQkJCTA3QUM0NzAx
MTk1MjEwMjEwMEVFOTcyMyAvKiBJU09WVFRDdWUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJN0Mz
MEQ5ODMxRjgxNUFFQzAwMjY4MzU2IC8qIEpTQWJvcnRDb250cm9sbGVyLmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCTdDMzBEOTg1MUY4MTVBRUMwMDI2ODM1NiAvKiBKU0Fib3J0U2lnbmFsLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTQxOEY4ODA0MEZGOTU3QUUwMDgwRjA0NSAvKiBKU0Fic3RyYWN0
V29ya2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTU3MDQ0MDVDMUU1MzkzNzkwMDM1NjYwMSAv
KiBKU0Flc0NiY0NmYlBhcmFtcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1N0UxRTVBQzFFOERE
MDlCMDBFRTM3QzkgLyogSlNBZXNDdHJQYXJhbXMuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0zMjQz
NCw3ICszMjM4Nyw2IEBACiAJCQkJQTU4NEZFM0IxODY0RTJEODAwODQzQjEwIC8qIEpTQ29tbWFu
ZExpbmVBUElIb3N0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkzRjlCNkUwMEJBMEZCNzIwMDg1
NDA2NCAvKiBKU0NvbW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNzlBQzkyMTgxMDk5NDVD
ODAwMjEyNjZFIC8qIEpTQ29tcG9zaXRpb25FdmVudC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk3
Q0QwRTJDMDFGODBBNTZFMDAxNkE0Q0UgLyogQWJvcnRTaWduYWwuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJRkRBMTVFQkQxMkIwM0YwQjAwM0E1ODNBIC8qIEpTQ29udm9sdmVyTm9kZS5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlGRTZGRDQ4RDBGNjc2RTkzMDAwOTI4NzMgLyogSlNDb29yZGluYXRl
cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNERDRjNCMjFCNkJFMjA4MDA2MkQ0QzIgLyogSlND
b3VudFF1ZXVpbmdTdHJhdGVneS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTMyNTI3LDcgKzMyNDc5
LDYgQEAKIAkJCQk4MzZBQ0VEMjFFQ0FBQjE5MDA0QkQwMTIgLyogSlNET01NYXRyaXguY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJN0NCQkJDQ0IxRjU2MTgwRDAwNUVGQUFDIC8qIEpTRE9NTWF0cml4
MkRJbml0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTgzNTY1N0M3MUVDQUIxMDcwMENERTcyRCAv
KiBKU0RPTU1hdHJpeEluaXQuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJN0NEMEUyQjkxRjgwQTQ4
MjAwMTZBNENFIC8qIEFib3J0Q29udHJvbGxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4MzZB
Q0VENTFFQ0FBQjE5MDA0QkQwMTIgLyogSlNET01NYXRyaXhSZWFkT25seS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlBOUQyNDgwNjBENzU3RTdEMDBGREY5NTkgLyogSlNET01NaW1lVHlwZS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlBOUQyNDgwODBENzU3RTdEMDBGREY5NTkgLyogSlNET01NaW1l
VHlwZUFycmF5LmNwcCBpbiBTb3VyY2VzICovLApAQCAtMzMzMzMsMTAgKzMzMjg0LDcgQEAKIAkJ
CQlGRDZGMjUyQzEzRjVFRjBFMDA2NTE2NUYgLyogTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2Rl
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTA3RkU5OURDMTg4MDdBN0QwMDI1NjY0OCAvKiBNZWRp
YUVsZW1lbnRTZXNzaW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTJEOUJGNzA1MURCRkJCMjQw
MDdBN0Q5OSAvKiBNZWRpYUVuY3J5cHRlZEV2ZW50LmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTVF
QkI4OTM0MUM3Nzc4MjkwMEM2NUQ0MSAvKiBNZWRpYUVuZHBvaW50LmNwcCBpbiBTb3VyY2VzICov
LAotCQkJCTVFQkI4OTM2MUM3Nzc4MjkwMEM2NUQ0MSAvKiBNZWRpYUVuZHBvaW50Q29uZmlndXJh
dGlvbi5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk1RTE2QTJFNTFCRkE2NTBGMDAyOUEyMUUgLyog
TWVkaWFFbmRwb2ludFBlZXJDb25uZWN0aW9uLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTVFNEVB
QjA1MUQwNzE2NkUwMDA2QTE4NCAvKiBNZWRpYUVuZHBvaW50U2Vzc2lvbkRlc2NyaXB0aW9uLmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCTQxQjI4QjE0MUY4NTAxQTYwMEZCNTJBQyAvKiBNZWRpYUVu
ZHBvaW50Q29uZmlndXJhdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0RTE5NTkyMTBBMzlE
QUJBMDAyMjBGRTUgLyogTWVkaWFGZWF0dXJlTmFtZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MDdBNkQxRUIxNDkxMTM3NzAwMDUxRDBDIC8qIE1lZGlhRnJhZ21lbnRVUklQYXJzZXIuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMkQ5QkY3NDcxREJGREM0OTAwN0E3RDk5IC8qIE1lZGlhS2V5TWVz
c2FnZUV2ZW50LmNwcCBpbiBTb3VyY2VzICovLApAQCAtMzM0MTEsNyArMzMzNTksNiBAQAogCQkJ
CUNERjJCMDEwMTgyMDU0MDYwMEYyQjQyNCAvKiBNb2NrQm94LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTUxMDU4QURGMUQ2N0MyMjkwMDlBNTM4QyAvKiBNb2NrR2FtZXBhZC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQk1MTA1OEFFMTFENjdDMjI5MDA5QTUzOEMgLyogTW9ja0dhbWVwYWRQcm92aWRl
ci5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk1RUEzRDZFMDFDODU5RDg0MDAzMDBCQkIgLyogTW9j
a01lZGlhRW5kcG9pbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQ0RGMkIwMTIxODIwNTQwNjAw
RjJCNDI0IC8qIE1vY2tNZWRpYVBsYXllck1lZGlhU291cmNlLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUNERjJCMDE0MTgyMDU0MDYwMEYyQjQyNCAvKiBNb2NrTWVkaWFTb3VyY2VQcml2YXRlLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTA3RDZBNEYzMUJFRDVGODgwMDE3NDE0NiAvKiBNb2NrUmVh
bHRpbWVBdWRpb1NvdXJjZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTMzOTA2LDkgKzMzODUzLDYg
QEAKIAkJCQlCQzI0NDFDNDBFOEI2NUQwMDA1NTMyMEYgLyogU2Nyb2xsVmlldy5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlFNDUzOTA0NTBFQUZENjM3MDAzNjk1QzggLyogU2Nyb2xsVmlld0lPUy5t
bSBpbiBTb3VyY2VzICovLAogCQkJCTkzNTM2NzZCMDlBRUQ4OEIwMEQzNUNENiAvKiBTY3JvbGxW
aWV3TWFjLm1tIGluIFNvdXJjZXMgKi8sCi0JCQkJNUVBM0Q2RTMxQzg1OURDMTAwMzAwQkJCIC8q
IFNEUFByb2Nlc3Nvci5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk1RUEzRDZFNzFDODVBOURCMDAz
MDBCQkIgLyogU0RQUHJvY2Vzc29yU2NyaXB0UmVzb3VyY2UuY3BwIGluIFNvdXJjZXMgKi8sCi0J
CQkJQ0RBQjZEMzIxN0M5MjU5NTAwQzYwQjM1IC8qIFNEUFByb2Nlc3NvclNjcmlwdHNEYXRhLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUY1NUIzREQxMTI1MUYxMkQwMDNFRjI2OSAvKiBTZWFyY2hJ
bnB1dFR5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEU3MDU4RUUxQkM1QkMxOTAwNDVBNTA3
IC8qIFNlYXJjaFBvcHVwTWVudUNvY29hLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJOTc2RjM2RUEx
NDY4NjIyNTAwNUU5M0I0IC8qIFNlY3VyaXR5Q29udGV4dC5jcHAgaW4gU291cmNlcyAqLywKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0dTdHJlYW1lci5jbWFrZSBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL0dTdHJlYW1lci5jbWFrZQppbmRleCA5OWNmNWZmYTIwNzM3NmNi
NWFiOWVjZGRhZmI2Y2E0N2FiMjAzYTQwLi43ZTIyNGQ3NzQ3NTQ0YWQzN2QzODhkN2M3NGI5ZjZl
NjI1MDhkODBmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9HU3RyZWFtZXIu
Y21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vR1N0cmVhbWVyLmNtYWtlCkBAIC0x
LDI2ICsxLDMgQEAKLWxpc3QoQVBQRU5EIFdlYkNvcmVfSU5DTFVERV9ESVJFQ1RPUklFUwotICAg
ICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9vcGVud2VicnRjIgotKQotCi1p
ZiAoRU5BQkxFX01FRElBX1NUUkVBTSkKLSAgICBsaXN0KEFQUEVORCBXZWJDb3JlX1NZU1RFTV9J
TkNMVURFX0RJUkVDVE9SSUVTCi0gICAgICAgICR7T1BFTldFQlJUQ19JTkNMVURFX0RJUlN9Ci0g
ICAgKQotCi0gICAgbGlzdChBUFBFTkQgV2ViQ29yZV9MSUJSQVJJRVMKLSAgICAgICAgJHtPUEVO
V0VCUlRDX0xJQlJBUklFU30KLSAgICApCi0KLSAgICBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJD
RVMKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lck93ci5jcHAKLQotICAgICAgICBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9vcGVud2Vi
cnRjL01lZGlhRW5kcG9pbnRPd3IuY3BwCi0gICAgICAgIHBsYXRmb3JtL21lZGlhc3RyZWFtL29w
ZW53ZWJydGMvT3BlbldlYlJUQ1V0aWxpdGllcy5jcHAKLSAgICAgICAgcGxhdGZvcm0vbWVkaWFz
dHJlYW0vb3BlbndlYnJ0Yy9SZWFsdGltZU1lZGlhU291cmNlT3dyLmNwcAotICAgICAgICBwbGF0
Zm9ybS9tZWRpYXN0cmVhbS9vcGVud2VicnRjL1JlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJPd3Iu
Y3BwCi0gICAgKQotZW5kaWYgKCkKLQogaWYgKEVOQUJMRV9WSURFTyBPUiBFTkFCTEVfV0VCX0FV
RElPKQogICAgIGxpc3QoQVBQRU5EIFdlYkNvcmVfSU5DTFVERV9ESVJFQ1RPUklFUwogICAgICAg
ICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyIgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3BwCmluZGV4IDQ4Nzcx
NjBjZmFhYjNhZWMyNjljOWZiY2Y2YzQ4NmZmMjE3YTIyYTAuLmYwOTNkNDUxYjI1NThhNWE5MWFh
ODhkMTEzNTk2NDc4NDQxNzg4NzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL01lZGlhUGxheWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9NZWRpYVBsYXllci5jcHAKQEAgLTUzLDkgKzUzLDYgQEAKIAogI2lmIFVTRShHU1RS
RUFNRVIpCiAjaW5jbHVkZSAiTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmgiCi0jaWYgRU5B
QkxFKE1FRElBX1NUUkVBTSkgJiYgVVNFKE9QRU5XRUJSVEMpCi0jaW5jbHVkZSAiTWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyT3dyLmgiCi0jZW5kaWYKICNkZWZpbmUgUGxhdGZvcm1NZWRpYUVu
Z2luZUNsYXNzTmFtZSBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIKICNpZiBFTkFCTEUoVklE
RU8pICYmIEVOQUJMRShNRURJQV9TT1VSQ0UpICYmIEVOQUJMRShWSURFT19UUkFDSykKICNpbmNs
dWRlICJNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0UuaCIKQEAgLTI2OCwxMSArMjY1LDYg
QEAgc3RhdGljIHZvaWQgYnVpbGRNZWRpYUVuZ2luZXNWZWN0b3IoKQogICAgICAgICBQbGF0Zm9y
bU1lZGlhRW5naW5lQ2xhc3NOYW1lOjpyZWdpc3Rlck1lZGlhRW5naW5lKGFkZE1lZGlhRW5naW5l
KTsKICNlbmRpZgogCi0jaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkgJiYgVVNFKEdTVFJFQU1FUikg
JiYgVVNFKE9QRU5XRUJSVEMpCi0gICAgaWYgKFNldHRpbmdzOjppc0dTdHJlYW1lckVuYWJsZWQo
KSkKLSAgICAgICAgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyOjpyZWdpc3Rlck1lZGlh
RW5naW5lKGFkZE1lZGlhRW5naW5lKTsKLSNlbmRpZgotCiAjaWYgRU5BQkxFKFZJREVPKSAmJiBV
U0UoR1NUUkVBTUVSKSAmJiBFTkFCTEUoTUVESUFfU09VUkNFKSAmJiBFTkFCTEUoVklERU9fVFJB
Q0spCiAgICAgaWYgKFNldHRpbmdzOjppc0dTdHJlYW1lckVuYWJsZWQoKSkKICAgICAgICAgTWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjpyZWdpc3Rlck1lZGlhRW5naW5lKGFkZE1lZGlh
RW5naW5lKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dz
dHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5j
cHAKaW5kZXggZjM4ZTYzNzEyOTdhNDk0ZWQ3YWJjMjIwNGMxYjJhYTFkM2Q0YmYxYi4uODQ3OTRm
NGM1YmM5MGNlYTk2ODcyYjBjOGYxMmMyZTFjNGJiYTJiMiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVy
L01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5jcHAKQEAgLTE5MzEsNyArMTkzMSw2IEBAIE1l
ZGlhUGxheWVyOjpTdXBwb3J0c1R5cGUgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpzdXBw
b3J0c1R5cGUoY29uc3QgTWVkaWFFCiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAjZW5kaWYKIAot
ICAgIC8vIE1lZGlhU3RyZWFtIHBsYXliYWNrIGlzIGhhbmRsZWQgYnkgdGhlIE9wZW5XZWJSVEMg
cGxheWVyLgogICAgIGlmIChwYXJhbWV0ZXJzLmlzTWVkaWFTdHJlYW0pCiAgICAgICAgIHJldHVy
biByZXN1bHQ7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3IuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lck93ci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU1MWZmNmNmNzdmZTNj
MTc2OGJhOTA3MTA4NmM5NmUyZWRjOWFhOTUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVh
bWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93ci5jcHAKKysrIC9kZXYvbnVsbApAQCAt
MSw1MDEgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMTIgQ29sbGFib3JhIEx0ZC4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqICBDb3B5cmlnaHQgKEMpIDIwMTQsIDIwMTUgSWdhbGlh
IFMuTC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqICBDb3B5cmlnaHQgKEMpIDIwMTUgTWV0cm9s
b2dpY2FsIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqICBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiAgTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
Ci0gKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0g
KiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0g
KiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5l
cmFsIFB1YmxpYwotICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwg
d3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKLSAq
LwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpbmNsdWRlICJNZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXJPd3IuaCIKLQotI2lmIEVOQUJMRShWSURFTykgJiYgRU5BQkxFKE1FRElBX1NUUkVB
TSkgJiYgVVNFKEdTVFJFQU1FUikgJiYgVVNFKE9QRU5XRUJSVEMpCi0KLSNpbmNsdWRlICJHU3Ry
ZWFtZXJVdGlsaXRpZXMuaCIKLSNpbmNsdWRlICJNZWRpYVBsYXllci5oIgotI2luY2x1ZGUgIk1l
ZGlhU3RyZWFtUHJpdmF0ZS5oIgotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0jaW5jbHVk
ZSAiUmVhbHRpbWVNZWRpYVNvdXJjZU93ci5oIgotI2luY2x1ZGUgIlVSTC5oIgotI2luY2x1ZGUg
PG93ci9vd3IuaD4KLSNpbmNsdWRlIDxvd3Ivb3dyX2dzdF9hdWRpb19yZW5kZXJlci5oPgotI2lu
Y2x1ZGUgPG93ci9vd3JfZ3N0X3ZpZGVvX3JlbmRlcmVyLmg+Ci0jaW5jbHVkZSA8d3RmL05ldmVy
RGVzdHJveWVkLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1HU1RfREVCVUdf
Q0FURUdPUlkod2Via2l0X29wZW53ZWJydGNfZGVidWcpOwotI2RlZmluZSBHU1RfQ0FUX0RFRkFV
TFQgd2Via2l0X29wZW53ZWJydGNfZGVidWcKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1NZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3I6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93
cihNZWRpYVBsYXllciogcGxheWVyKQotICAgIDogTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
QmFzZShwbGF5ZXIpCi17Ci0gICAgaW5pdGlhbGl6ZUdTdHJlYW1lckFuZEdTdHJlYW1lckRlYnVn
Z2luZygpOwotfQotCi1NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3I6On5NZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXJPd3IoKQotewotICAgIEdTVF9UUkFDRSgiRGVzdHJveWluZyIpOwot
Ci0gICAgaWYgKGhhc0F1ZGlvKCkpCi0gICAgICAgIG1fYXVkaW9UcmFjay0+cmVtb3ZlT2JzZXJ2
ZXIoKnRoaXMpOwotICAgIGlmIChoYXNWaWRlbygpKQotICAgICAgICBtX3ZpZGVvVHJhY2stPnJl
bW92ZU9ic2VydmVyKCp0aGlzKTsKLQotICAgIG1fYXVkaW9UcmFja01hcC5jbGVhcigpOwotICAg
IG1fdmlkZW9UcmFja01hcC5jbGVhcigpOwotCi0gICAgc3RvcCgpOwotfQotCi12b2lkIE1lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lck93cjo6cGxheSgpCi17Ci0gICAgR1NUX0RFQlVHKCJQbGF5
Iik7Ci0KLSAgICBpZiAoIW1fc3RyZWFtUHJpdmF0ZSB8fCAhbV9zdHJlYW1Qcml2YXRlLT5hY3Rp
dmUoKSkgewotICAgICAgICBtX3JlYWR5U3RhdGUgPSBNZWRpYVBsYXllcjo6SGF2ZU5vdGhpbmc7
Ci0gICAgICAgIGxvYWRpbmdGYWlsZWQoTWVkaWFQbGF5ZXI6OkVtcHR5KTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIG1fZW5kZWQgPSBmYWxzZTsKLSAgICBtX3BhdXNlZCA9IGZhbHNl
OwotCi0gICAgR1NUX0RFQlVHKCJDb25uZWN0aW5nIHRvIGxpdmUgc3RyZWFtLCBkZXNjcmlwdG9y
OiAlcCIsIG1fc3RyZWFtUHJpdmF0ZS5nZXQoKSk7Ci0KLSAgICBpZiAobV92aWRlb1RyYWNrKQot
ICAgICAgICBtYXliZUhhbmRsZUNoYW5nZU11dGVkU3RhdGUoKm1fdmlkZW9UcmFjay5nZXQoKSk7
Ci0KLSAgICBpZiAobV9hdWRpb1RyYWNrKQotICAgICAgICBtYXliZUhhbmRsZUNoYW5nZU11dGVk
U3RhdGUoKm1fYXVkaW9UcmFjay5nZXQoKSk7Ci19Ci0KLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyT3dyOjpwYXVzZSgpCi17Ci0gICAgR1NUX0RFQlVHKCJQYXVzZSIpOwotICAgIG1f
cGF1c2VkID0gdHJ1ZTsKLSAgICBkaXNhYmxlTWVkaWFUcmFja3MoKTsKLX0KLQotYm9vbCBNZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3I6Omhhc1ZpZGVvKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gbV92aWRlb1RyYWNrOwotfQotCi1ib29sIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93
cjo6aGFzQXVkaW8oKSBjb25zdAotewotICAgIHJldHVybiBtX2F1ZGlvVHJhY2s7Ci19Ci0KLXZv
aWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyOjpzZXRWb2x1bWUoZmxvYXQgdm9sdW1l
KQotewotICAgIGlmICghbV9hdWRpb1RyYWNrKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRv
JiByZWFsVGltZU1lZGlhU291cmNlID0gc3RhdGljX2Nhc3Q8UmVhbHRpbWVNZWRpYVNvdXJjZU93
ciY+KG1fYXVkaW9UcmFjay0+c291cmNlKCkpOwotICAgIGF1dG8gbWVkaWFTb3VyY2UgPSBPV1Jf
TUVESUFfU09VUkNFKHJlYWxUaW1lTWVkaWFTb3VyY2UubWVkaWFTb3VyY2UoKSk7Ci0KLSAgICBH
U1RfREVCVUcoIlNldHRpbmcgdm9sdW1lOiAlZiIsIHZvbHVtZSk7Ci0gICAgZ19vYmplY3Rfc2V0
KG1lZGlhU291cmNlLCAidm9sdW1lIiwgc3RhdGljX2Nhc3Q8Z2RvdWJsZT4odm9sdW1lKSwgbnVs
bHB0cik7Ci19Ci0KLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyOjpzZXRNdXRl
ZChib29sIG11dGVkKQotewotICAgIGlmICghbV9hdWRpb1RyYWNrKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBhdXRvJiByZWFsVGltZU1lZGlhU291cmNlID0gc3RhdGljX2Nhc3Q8UmVhbHRpbWVN
ZWRpYVNvdXJjZU93ciY+KG1fYXVkaW9UcmFjay0+c291cmNlKCkpOwotICAgIGF1dG8gbWVkaWFT
b3VyY2UgPSBPV1JfTUVESUFfU09VUkNFKHJlYWxUaW1lTWVkaWFTb3VyY2UubWVkaWFTb3VyY2Uo
KSk7Ci0gICAgaWYgKCFtZWRpYVNvdXJjZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgR1NUX0RF
QlVHKCJTZXR0aW5nIG11dGU6ICVzIiwgbXV0ZWQgPyAib24iOiJvZmYiKTsKLSAgICBnX29iamVj
dF9zZXQobWVkaWFTb3VyY2UsICJtdXRlIiwgbXV0ZWQsIG51bGxwdHIpOwotfQotCi1mbG9hdCBN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3I6OmN1cnJlbnRUaW1lKCkgY29uc3QKLXsKLSAg
ICBnaW50NjQgcG9zaXRpb24gPSBHU1RfQ0xPQ0tfVElNRV9OT05FOwotICAgIEdzdFF1ZXJ5KiBx
dWVyeSA9IGdzdF9xdWVyeV9uZXdfcG9zaXRpb24oR1NUX0ZPUk1BVF9USU1FKTsKLQotICAgIGlm
IChtX3ZpZGVvVHJhY2sgJiYgZ3N0X2VsZW1lbnRfcXVlcnkobV92aWRlb1NpbmsuZ2V0KCksIHF1
ZXJ5KSkKLSAgICAgICAgZ3N0X3F1ZXJ5X3BhcnNlX3Bvc2l0aW9uKHF1ZXJ5LCAwLCAmcG9zaXRp
b24pOwotICAgIGVsc2UgaWYgKG1fYXVkaW9UcmFjayAmJiBnc3RfZWxlbWVudF9xdWVyeShtX2F1
ZGlvU2luay5nZXQoKSwgcXVlcnkpKQotICAgICAgICBnc3RfcXVlcnlfcGFyc2VfcG9zaXRpb24o
cXVlcnksIDAsICZwb3NpdGlvbik7Ci0KLSAgICBmbG9hdCByZXN1bHQgPSAwOwotICAgIGlmIChz
dGF0aWNfY2FzdDxHc3RDbG9ja1RpbWU+KHBvc2l0aW9uKSAhPSBHU1RfQ0xPQ0tfVElNRV9OT05F
KQotICAgICAgICByZXN1bHQgPSBzdGF0aWNfY2FzdDxkb3VibGU+KHBvc2l0aW9uKSAvIEdTVF9T
RUNPTkQ7Ci0KLSAgICBHU1RfTE9HKCJQb3NpdGlvbiAlIiBHU1RfVElNRV9GT1JNQVQsIEdTVF9U
SU1FX0FSR1MocG9zaXRpb24pKTsKLSAgICBnc3RfcXVlcnlfdW5yZWYocXVlcnkpOwotCi0gICAg
cmV0dXJuIHJlc3VsdDsKLX0KLQotdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3I6
OmxvYWQoY29uc3QgU3RyaW5nICYpCi17Ci0gICAgLy8gUHJvcGVybHkgZmFpbCBzbyB0aGUgZ2xv
YmFsIE1lZGlhUGxheWVyIHRyaWVzIHRvIGZhbGxiYWNrIHRvIHRoZSBuZXh0IE1lZGlhUGxheWVy
UHJpdmF0ZS4KLSAgICBtX25ldHdvcmtTdGF0ZSA9IE1lZGlhUGxheWVyOjpGb3JtYXRFcnJvcjsK
LSAgICBtX3BsYXllci0+bmV0d29ya1N0YXRlQ2hhbmdlZCgpOwotfQotCi0jaWYgRU5BQkxFKE1F
RElBX1NPVVJDRSkKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyOjpsb2FkKGNv
bnN0IFN0cmluZyYsIE1lZGlhU291cmNlUHJpdmF0ZUNsaWVudCopCi17Ci0gICAgLy8gUHJvcGVy
bHkgZmFpbCBzbyB0aGUgZ2xvYmFsIE1lZGlhUGxheWVyIHRyaWVzIHRvIGZhbGxiYWNrIHRvIHRo
ZSBuZXh0IE1lZGlhUGxheWVyUHJpdmF0ZS4KLSAgICBtX25ldHdvcmtTdGF0ZSA9IE1lZGlhUGxh
eWVyOjpGb3JtYXRFcnJvcjsKLSAgICBtX3BsYXllci0+bmV0d29ya1N0YXRlQ2hhbmdlZCgpOwot
fQotI2VuZGlmCi0KLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyOjpsb2FkKE1l
ZGlhU3RyZWFtUHJpdmF0ZSYgc3RyZWFtUHJpdmF0ZSkKLXsKLSAgICBpZiAoIWluaXRpYWxpemVH
U3RyZWFtZXIoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9zdHJlYW1Qcml2YXRlID0gJnN0
cmVhbVByaXZhdGU7Ci0gICAgaWYgKCFtX3N0cmVhbVByaXZhdGUtPmFjdGl2ZSgpKSB7Ci0gICAg
ICAgIGxvYWRpbmdGYWlsZWQoTWVkaWFQbGF5ZXI6Ok5ldHdvcmtFcnJvcik7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBpZiAoc3RyZWFtUHJpdmF0ZS5oYXNWaWRlbygpICYmICFtX3Zp
ZGVvU2luaykKLSAgICAgICAgY3JlYXRlVmlkZW9TaW5rKCk7Ci0KLSAgICBpZiAoc3RyZWFtUHJp
dmF0ZS5oYXNBdWRpbygpICYmICFtX2F1ZGlvU2luaykKLSAgICAgICAgY3JlYXRlR1NUQXVkaW9T
aW5rQmluKCk7Ci0KLSAgICBHU1RfREVCVUcoIkxvYWRpbmcgTWVkaWFTdHJlYW1Qcml2YXRlICVw
IHZpZGVvOiAlcywgYXVkaW86ICVzIiwgJnN0cmVhbVByaXZhdGUsIHN0cmVhbVByaXZhdGUuaGFz
VmlkZW8oKSA/ICJ5ZXMiOiJubyIsIHN0cmVhbVByaXZhdGUuaGFzQXVkaW8oKSA/ICJ5ZXMiOiJu
byIpOwotCi0gICAgbV9yZWFkeVN0YXRlID0gTWVkaWFQbGF5ZXI6OkhhdmVOb3RoaW5nOwotICAg
IG1fbmV0d29ya1N0YXRlID0gTWVkaWFQbGF5ZXI6OkxvYWRpbmc7Ci0gICAgbV9wbGF5ZXItPm5l
dHdvcmtTdGF0ZUNoYW5nZWQoKTsKLSAgICBtX3BsYXllci0+cmVhZHlTdGF0ZUNoYW5nZWQoKTsK
LQotICAgIGZvciAoYXV0byB0cmFjayA6IG1fc3RyZWFtUHJpdmF0ZS0+dHJhY2tzKCkpIHsKLSAg
ICAgICAgaWYgKCF0cmFjay0+ZW5hYmxlZCgpKSB7Ci0gICAgICAgICAgICBHU1RfREVCVUcoIlRy
YWNrICVzIGRpc2FibGVkIiwgdHJhY2stPmxhYmVsKCkuYXNjaWkoKS5kYXRhKCkpOwotICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICBHU1RfREVCVUcoIlByb2Nlc3Np
bmcgdHJhY2sgJXMiLCB0cmFjay0+bGFiZWwoKS5hc2NpaSgpLmRhdGEoKSk7Ci0KLSAgICAgICAg
Ym9vbCBvYnNlcnZlVHJhY2sgPSBmYWxzZTsKLQotICAgICAgICAvLyBUT0RPOiBTdXBwb3J0IGZv
ciBtdWx0aXBsZSB0cmFja3Mgb2YgdGhlIHNhbWUgdHlwZS4KLQotICAgICAgICBzd2l0Y2ggKHRy
YWNrLT50eXBlKCkpIHsKLSAgICAgICAgY2FzZSBSZWFsdGltZU1lZGlhU291cmNlOjpUeXBlOjpB
dWRpbzoKLSAgICAgICAgICAgIGlmICghbV9hdWRpb1RyYWNrKSB7Ci0gICAgICAgICAgICAgICAg
U3RyaW5nIHByZVNlbGVjdGVkRGV2aWNlID0gZ2V0ZW52KCJXRUJLSVRfQVVESU9fREVWSUNFIik7
Ci0gICAgICAgICAgICAgICAgaWYgKCFwcmVTZWxlY3RlZERldmljZSB8fCAocHJlU2VsZWN0ZWRE
ZXZpY2UgPT0gdHJhY2stPmxhYmVsKCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1fYXVkaW9U
cmFjayA9IHRyYWNrOwotICAgICAgICAgICAgICAgICAgICBhdXRvIGF1ZGlvVHJhY2sgPSBBdWRp
b1RyYWNrUHJpdmF0ZU1lZGlhU3RyZWFtOjpjcmVhdGUoKm1fYXVkaW9UcmFjay5nZXQoKSk7Ci0g
ICAgICAgICAgICAgICAgICAgIG1fcGxheWVyLT5hZGRBdWRpb1RyYWNrKCphdWRpb1RyYWNrKTsK
LSAgICAgICAgICAgICAgICAgICAgbV9hdWRpb1RyYWNrTWFwLmFkZCh0cmFjay0+aWQoKSwgYXVk
aW9UcmFjayk7Ci0gICAgICAgICAgICAgICAgICAgIG9ic2VydmVUcmFjayA9IHRydWU7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGNhc2UgUmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlwZTo6VmlkZW86Ci0gICAgICAgICAgICBpZiAo
IW1fdmlkZW9UcmFjaykgewotICAgICAgICAgICAgICAgIFN0cmluZyBwcmVTZWxlY3RlZERldmlj
ZSA9IGdldGVudigiV0VCS0lUX1ZJREVPX0RFVklDRSIpOwotICAgICAgICAgICAgICAgIGlmICgh
cHJlU2VsZWN0ZWREZXZpY2UgfHwgKHByZVNlbGVjdGVkRGV2aWNlID09IHRyYWNrLT5sYWJlbCgp
KSkgewotICAgICAgICAgICAgICAgICAgICBtX3ZpZGVvVHJhY2sgPSB0cmFjazsKLSAgICAgICAg
ICAgICAgICAgICAgYXV0byB2aWRlb1RyYWNrID0gVmlkZW9UcmFja1ByaXZhdGVNZWRpYVN0cmVh
bTo6Y3JlYXRlKCptX3ZpZGVvVHJhY2suZ2V0KCkpOwotICAgICAgICAgICAgICAgICAgICBtX3Bs
YXllci0+YWRkVmlkZW9UcmFjaygqdmlkZW9UcmFjayk7Ci0gICAgICAgICAgICAgICAgICAgIHZp
ZGVvVHJhY2stPnNldFNlbGVjdGVkKHRydWUpOwotICAgICAgICAgICAgICAgICAgICBtX3ZpZGVv
VHJhY2tNYXAuYWRkKHRyYWNrLT5pZCgpLCB2aWRlb1RyYWNrKTsKLSAgICAgICAgICAgICAgICAg
ICAgb2JzZXJ2ZVRyYWNrID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBSZWFsdGltZU1lZGlhU291cmNlOjpU
eXBlOjpOb25lOgotICAgICAgICAgICAgR1NUX1dBUk5JTkcoIkxvYWRpbmcgYSB0cmFjayB3aXRo
IE5vbmUgdHlwZSIpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG9ic2VydmVUcmFjaykKLSAg
ICAgICAgICAgIHRyYWNrLT5hZGRPYnNlcnZlcigqdGhpcyk7Ci0gICAgfQotCi0gICAgbV9yZWFk
eVN0YXRlID0gTWVkaWFQbGF5ZXI6OkhhdmVFbm91Z2hEYXRhOwotICAgIG1fcGxheWVyLT5yZWFk
eVN0YXRlQ2hhbmdlZCgpOwotfQotCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93
cjo6bG9hZGluZ0ZhaWxlZChNZWRpYVBsYXllcjo6TmV0d29ya1N0YXRlIGVycm9yKQotewotICAg
IGlmIChtX25ldHdvcmtTdGF0ZSAhPSBlcnJvcikgewotICAgICAgICBHU1RfV0FSTklORygiTG9h
ZGluZyBmYWlsZWQsIGVycm9yOiAlZCIsIGVycm9yKTsKLSAgICAgICAgbV9uZXR3b3JrU3RhdGUg
PSBlcnJvcjsKLSAgICAgICAgbV9wbGF5ZXItPm5ldHdvcmtTdGF0ZUNoYW5nZWQoKTsKLSAgICB9
Ci0gICAgaWYgKG1fcmVhZHlTdGF0ZSAhPSBNZWRpYVBsYXllcjo6SGF2ZU5vdGhpbmcpIHsKLSAg
ICAgICAgbV9yZWFkeVN0YXRlID0gTWVkaWFQbGF5ZXI6OkhhdmVOb3RoaW5nOwotICAgICAgICBt
X3BsYXllci0+cmVhZHlTdGF0ZUNoYW5nZWQoKTsKLSAgICB9Ci19Ci0KLWJvb2wgTWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyT3dyOjpkaWRMb2FkaW5nUHJvZ3Jlc3MoKSBjb25zdAotewotICAg
IC8vIEZJWE1FOiBJbXBsZW1lbnQgbG9hZGluZyBwcm9ncmVzcyBzdXBwb3J0LgotICAgIHJldHVy
biB0cnVlOwotfQotCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93cjo6ZGlzYWJs
ZU1lZGlhVHJhY2tzKCkKLXsKLSAgICBpZiAobV9hdWRpb1RyYWNrKSB7Ci0gICAgICAgIEdTVF9E
RUJVRygiU3RvcDogZGlzY29ubmVjdGluZyBhdWRpbyIpOwotICAgICAgICBnX29iamVjdF9zZXQo
bV9hdWRpb1JlbmRlcmVyLmdldCgpLCAiZGlzYWJsZWQiLCB0cnVlLCBudWxscHRyKTsKLSAgICAg
ICAgb3dyX21lZGlhX3JlbmRlcmVyX3NldF9zb3VyY2UoT1dSX01FRElBX1JFTkRFUkVSKG1fYXVk
aW9SZW5kZXJlci5nZXQoKSksIG51bGxwdHIpOwotICAgIH0KLQotICAgIGlmIChtX3ZpZGVvVHJh
Y2spIHsKLSAgICAgICAgR1NUX0RFQlVHKCJTdG9wOiBkaXNjb25uZWN0aW5nIHZpZGVvIik7Ci0g
ICAgICAgIGdfb2JqZWN0X3NldChtX3ZpZGVvUmVuZGVyZXIuZ2V0KCksICJkaXNhYmxlZCIsIHRy
dWUsIG51bGxwdHIpOwotICAgICAgICBvd3JfbWVkaWFfcmVuZGVyZXJfc2V0X3NvdXJjZShPV1Jf
TUVESUFfUkVOREVSRVIobV92aWRlb1JlbmRlcmVyLmdldCgpKSwgbnVsbHB0cik7Ci0gICAgfQot
fQotCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93cjo6c3RvcCgpCi17Ci0gICAg
ZGlzYWJsZU1lZGlhVHJhY2tzKCk7Ci0gICAgaWYgKG1fdmlkZW9UcmFjaykgewotICAgICAgICBh
dXRvIHZpZGVvVHJhY2sgPSBtX3ZpZGVvVHJhY2tNYXAuZ2V0KG1fdmlkZW9UcmFjay0+aWQoKSk7
Ci0gICAgICAgIGlmICh2aWRlb1RyYWNrKQotICAgICAgICAgICAgdmlkZW9UcmFjay0+c2V0U2Vs
ZWN0ZWQoZmFsc2UpOwotICAgIH0KLX0KLQotdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXJPd3I6OnJlZ2lzdGVyTWVkaWFFbmdpbmUoTWVkaWFFbmdpbmVSZWdpc3RyYXIgcmVnaXN0cmFy
KQotewotICAgIGlmIChpbml0aWFsaXplR1N0cmVhbWVyQW5kR1N0cmVhbWVyRGVidWdnaW5nKCkp
IHsKLSAgICAgICAgcmVnaXN0cmFyKFtdKE1lZGlhUGxheWVyKiBwbGF5ZXIpIHsKLSAgICAgICAg
ICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93
cj4ocGxheWVyKTsKLSAgICAgICAgfSwgZ2V0U3VwcG9ydGVkVHlwZXMsIHN1cHBvcnRzVHlwZSwg
bnVsbHB0ciwgbnVsbHB0ciwgbnVsbHB0ciwgbnVsbHB0cik7Ci0gICAgfQotfQotCi12b2lkIE1l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93cjo6Z2V0U3VwcG9ydGVkVHlwZXMoSGFzaFNldDxT
dHJpbmcsIEFTQ0lJQ2FzZUluc2Vuc2l0aXZlSGFzaD4mIHR5cGVzKQotewotICAgIC8vIE5vdCBz
dXBwb3J0ZWQgaW4gdGhpcyBtZWRpYSBwbGF5ZXIuCi0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVk
PEhhc2hTZXQ8U3RyaW5nLCBBU0NJSUNhc2VJbnNlbnNpdGl2ZUhhc2g+PiBjYWNoZTsKLSAgICB0
eXBlcyA9IGNhY2hlOwotfQotCi1NZWRpYVBsYXllcjo6U3VwcG9ydHNUeXBlIE1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lck93cjo6c3VwcG9ydHNUeXBlKGNvbnN0IE1lZGlhRW5naW5lU3VwcG9y
dFBhcmFtZXRlcnMmIHBhcmFtZXRlcnMpCi17Ci0gICAgaWYgKHBhcmFtZXRlcnMuaXNNZWRpYVN0
cmVhbSkKLSAgICAgICAgcmV0dXJuIE1lZGlhUGxheWVyOjpJc1N1cHBvcnRlZDsKLSAgICByZXR1
cm4gTWVkaWFQbGF5ZXI6OklzTm90U3VwcG9ydGVkOwotfQotCi1ib29sIE1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lck93cjo6aW5pdGlhbGl6ZUdTdHJlYW1lckFuZEdTdHJlYW1lckRlYnVnZ2lu
ZygpCi17Ci0gICAgaWYgKCFpbml0aWFsaXplR1N0cmVhbWVyKCkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBkZWJ1Z1JlZ2lzdGVyZWRGbGFnOwot
ICAgIHN0ZDo6Y2FsbF9vbmNlKGRlYnVnUmVnaXN0ZXJlZEZsYWcsIFtdIHsKLSAgICAgICAgR1NU
X0RFQlVHX0NBVEVHT1JZX0lOSVQod2Via2l0X29wZW53ZWJydGNfZGVidWcsICJ3ZWJraXRvd3Jw
bGF5ZXIiLCAwLCAiV2ViS2l0IE9wZW5XZWJSVEMgcGxheWVyIik7Ci0gICAgfSk7Ci0KLSAgICBy
ZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3I6OmNy
ZWF0ZUdTVEF1ZGlvU2lua0JpbigpCi17Ci0gICAgQVNTRVJUKCFtX2F1ZGlvU2luayk7Ci0gICAg
R1NUX0RFQlVHKCJDcmVhdGluZyBhdWRpbyBzaW5rIik7Ci0gICAgLy8gRklYTUU6IHZvbHVtZS9t
dXRlIHN1cHBvcnQ6IGh0dHBzOi8vd2Via2l0Lm9yZy9iLzE1MzgyOC4KLQotICAgIC8vIFByZS1y
b2xsIGFuIGF1dG9hdWRpb3Npbmsgc28gdGhhdCB0aGUgcGxhdGZvcm0gYXVkaW8gc2luayBpcyBj
cmVhdGVkIGFuZAotICAgIC8vIGNhbiBiZSByZXRyaWV2ZWQgZnJvbSB0aGUgYXV0b2F1ZGlvc2lu
ayBiaW4uCi0gICAgR1JlZlB0cjxHc3RFbGVtZW50PiBzaW5rID0gZ3N0X2VsZW1lbnRfZmFjdG9y
eV9tYWtlKCJhdXRvYXVkaW9zaW5rIiwgbnVsbHB0cik7Ci0gICAgR3N0Q2hpbGRQcm94eSogY2hp
bGRQcm94eSA9IEdTVF9DSElMRF9QUk9YWShzaW5rLmdldCgpKTsKLSAgICBnc3RfZWxlbWVudF9z
ZXRfc3RhdGUoc2luay5nZXQoKSwgR1NUX1NUQVRFX1JFQURZKTsKLSAgICBHUmVmUHRyPEdzdEVs
ZW1lbnQ+IHBsYXRmb3JtU2luayA9IGFkb3B0R1JlZihHU1RfRUxFTUVOVChnc3RfY2hpbGRfcHJv
eHlfZ2V0X2NoaWxkX2J5X2luZGV4KGNoaWxkUHJveHksIDApKSk7Ci0gICAgR3N0RWxlbWVudEZh
Y3RvcnkqIGZhY3RvcnkgPSBnc3RfZWxlbWVudF9nZXRfZmFjdG9yeShwbGF0Zm9ybVNpbmsuZ2V0
KCkpOwotCi0gICAgLy8gRGlzcG9zZSBub3cgdW4tbmVlZGVkIGF1dG9hdWRpb3NpbmsuCi0gICAg
Z3N0X2VsZW1lbnRfc2V0X3N0YXRlKHNpbmsuZ2V0KCksIEdTVF9TVEFURV9OVUxMKTsKLQotICAg
IC8vIENyZWF0ZSBhIGZyZXNoIG5ldyBhdWRpbyBzaW5rIGNvbXBhdGlibGUgd2l0aCB0aGUgcGxh
dGZvcm0uCi0gICAgbV9hdWRpb1NpbmsgPSBnc3RfZWxlbWVudF9mYWN0b3J5X2NyZWF0ZShmYWN0
b3J5LCBudWxscHRyKTsKLSAgICBtX2F1ZGlvUmVuZGVyZXIgPSBhZG9wdEdSZWYob3dyX2dzdF9h
dWRpb19yZW5kZXJlcl9uZXcobV9hdWRpb1NpbmsuZ2V0KCkpKTsKLX0KLQotdm9pZCBNZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXJPd3I6OnRyYWNrRW5kZWQoTWVkaWFTdHJlYW1UcmFja1ByaXZh
dGUmIHRyYWNrKQotewotICAgIEdTVF9ERUJVRygiVHJhY2sgZW5kZWQiKTsKLQotICAgIGlmICgh
bV9zdHJlYW1Qcml2YXRlIHx8ICFtX3N0cmVhbVByaXZhdGUtPmFjdGl2ZSgpKSB7Ci0gICAgICAg
IHN0b3AoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICgmdHJhY2sgPT0gbV9h
dWRpb1RyYWNrKQotICAgICAgICBnX29iamVjdF9zZXQobV9hdWRpb1JlbmRlcmVyLmdldCgpLCAi
ZGlzYWJsZWQiLCB0cnVlLCBudWxscHRyKTsKLSAgICBlbHNlIGlmICgmdHJhY2sgPT0gbV92aWRl
b1RyYWNrKSB7Ci0gICAgICAgIGdfb2JqZWN0X3NldChtX3ZpZGVvUmVuZGVyZXIuZ2V0KCksICJk
aXNhYmxlZCIsIHRydWUsIG51bGxwdHIpOwotICAgICAgICBhdXRvJiByZWFsVGltZU1lZGlhU291
cmNlID0gc3RhdGljX2Nhc3Q8UmVhbHRpbWVNZWRpYVNvdXJjZU93ciY+KG1fdmlkZW9UcmFjay0+
c291cmNlKCkpOwotICAgICAgICByZWFsVGltZU1lZGlhU291cmNlLnNldFdpZHRoKDApOwotICAg
ICAgICByZWFsVGltZU1lZGlhU291cmNlLnNldEhlaWdodCgwKTsKLSAgICAgICAgYXV0byB2aWRl
b1RyYWNrID0gbV92aWRlb1RyYWNrTWFwLmdldChtX3ZpZGVvVHJhY2stPmlkKCkpOwotICAgICAg
ICBpZiAodmlkZW9UcmFjaykKLSAgICAgICAgICAgIHZpZGVvVHJhY2stPnNldFNlbGVjdGVkKGZh
bHNlKTsKLSAgICB9Ci0KLSAgICBnYm9vbGVhbiBhdWRpb0Rpc2FibGVkOwotICAgIGdib29sZWFu
IHZpZGVvRGlzYWJsZWQ7Ci0gICAgZ19vYmplY3RfZ2V0KG1fYXVkaW9SZW5kZXJlci5nZXQoKSwg
ImRpc2FibGVkIiwgJmF1ZGlvRGlzYWJsZWQsIG51bGxwdHIpOwotICAgIGdfb2JqZWN0X2dldCht
X3ZpZGVvUmVuZGVyZXIuZ2V0KCksICJkaXNhYmxlZCIsICZ2aWRlb0Rpc2FibGVkLCBudWxscHRy
KTsKLSAgICBpZiAoYXVkaW9EaXNhYmxlZCAmJiB2aWRlb0Rpc2FibGVkKSB7Ci0gICAgICAgIG1f
ZW5kZWQgPSB0cnVlOwotICAgICAgICBtX3BsYXllci0+dGltZUNoYW5nZWQoKTsKLSAgICB9Ci19
Ci0KLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyOjp0cmFja011dGVkQ2hhbmdl
ZChNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZSYgdHJhY2spCi17Ci0gICAgR1NUX0RFQlVHKCJUcmFj
ayBtdXRlZCBzdGF0ZSBjaGFuZ2VkIik7Ci0KLSAgICBtYXliZUhhbmRsZUNoYW5nZU11dGVkU3Rh
dGUodHJhY2spOwotfQotCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93cjo6bWF5
YmVIYW5kbGVDaGFuZ2VNdXRlZFN0YXRlKE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlJiB0cmFjaykK
LXsKLSAgICBhdXRvJiByZWFsVGltZU1lZGlhU291cmNlID0gc3RhdGljX2Nhc3Q8UmVhbHRpbWVN
ZWRpYVNvdXJjZU93ciY+KHRyYWNrLnNvdXJjZSgpKTsKLSAgICBhdXRvIG1lZGlhU291cmNlID0g
T1dSX01FRElBX1NPVVJDRShyZWFsVGltZU1lZGlhU291cmNlLm1lZGlhU291cmNlKCkpOwotCi0g
ICAgR1NUX0RFQlVHKCIlcyB0cmFjayBub3cgJXMiLCB0cmFjay50eXBlKCkgPT0gUmVhbHRpbWVN
ZWRpYVNvdXJjZTo6VHlwZTo6QXVkaW8gPyAiYXVkaW8iOiJ2aWRlbyIsIHJlYWxUaW1lTWVkaWFT
b3VyY2UubXV0ZWQoKSA/ICJtdXRlZCI6InVuLW11dGVkIik7Ci0gICAgc3dpdGNoICh0cmFjay50
eXBlKCkpIHsKLSAgICBjYXNlIFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGU6OkF1ZGlvOgotICAg
ICAgICBpZiAoIXJlYWxUaW1lTWVkaWFTb3VyY2UubXV0ZWQoKSkgewotICAgICAgICAgICAgZ19v
YmplY3Rfc2V0KG1fYXVkaW9SZW5kZXJlci5nZXQoKSwgImRpc2FibGVkIiwgZmFsc2UsIG51bGxw
dHIpOwotICAgICAgICAgICAgb3dyX21lZGlhX3JlbmRlcmVyX3NldF9zb3VyY2UoT1dSX01FRElB
X1JFTkRFUkVSKG1fYXVkaW9SZW5kZXJlci5nZXQoKSksIG1lZGlhU291cmNlKTsKLSAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgIGdfb2JqZWN0X3NldChtX2F1ZGlvUmVuZGVyZXIuZ2V0KCks
ICJkaXNhYmxlZCIsIHRydWUsIG51bGxwdHIpOwotICAgICAgICAgICAgb3dyX21lZGlhX3JlbmRl
cmVyX3NldF9zb3VyY2UoT1dSX01FRElBX1JFTkRFUkVSKG1fYXVkaW9SZW5kZXJlci5nZXQoKSks
IG51bGxwdHIpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChtZWRpYVNvdXJjZSkKLSAgICAgICAg
ICAgIGdfb2JqZWN0X3NldChtZWRpYVNvdXJjZSwgIm11dGUiLCAhdHJhY2suZW5hYmxlZCgpLCBu
dWxscHRyKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBSZWFsdGltZU1lZGlhU291cmNlOjpU
eXBlOjpWaWRlbzoKLSAgICAgICAgaWYgKCFyZWFsVGltZU1lZGlhU291cmNlLm11dGVkKCkpIHsK
LSAgICAgICAgICAgIGdfb2JqZWN0X3NldChtX3ZpZGVvUmVuZGVyZXIuZ2V0KCksICJkaXNhYmxl
ZCIsIGZhbHNlLCBudWxscHRyKTsKLSAgICAgICAgICAgIG93cl9tZWRpYV9yZW5kZXJlcl9zZXRf
c291cmNlKE9XUl9NRURJQV9SRU5ERVJFUihtX3ZpZGVvUmVuZGVyZXIuZ2V0KCkpLCBtZWRpYVNv
dXJjZSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBnX29iamVjdF9zZXQobV92aWRl
b1JlbmRlcmVyLmdldCgpLCAiZGlzYWJsZWQiLCB0cnVlLCBudWxscHRyKTsKLSAgICAgICAgICAg
IG93cl9tZWRpYV9yZW5kZXJlcl9zZXRfc291cmNlKE9XUl9NRURJQV9SRU5ERVJFUihtX3ZpZGVv
UmVuZGVyZXIuZ2V0KCkpLCBudWxscHRyKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGU6Ok5vbmU6Ci0gICAgICAgIEdTVF9XQVJO
SU5HKCJUcnlpbmcgdG8gY2hhbmdlIG11dGUgc3RhdGUgb2YgYSB0cmFjayB3aXRoIE5vbmUgdHlw
ZSIpOwotICAgIH0KLX0KLQotdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3I6OnRy
YWNrU2V0dGluZ3NDaGFuZ2VkKE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlJikKLXsKLSAgICBHU1Rf
REVCVUcoIlRyYWNrIHNldHRpbmdzIGNoYW5nZWQiKTsKLX0KLQotdm9pZCBNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXJPd3I6OnRyYWNrRW5hYmxlZENoYW5nZWQoTWVkaWFTdHJlYW1UcmFja1By
aXZhdGUmIHRyYWNrKQotewotICAgIEdTVF9ERUJVRygiJXMgdHJhY2sgbm93ICVzIiwgdHJhY2su
dHlwZSgpID09IFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGU6OkF1ZGlvID8gImF1ZGlvIjoidmlk
ZW8iLCB0cmFjay5lbmFibGVkKCkgPyAiZW5hYmxlZCI6ImRpc2FibGVkIik7Ci0KLSAgICBzd2l0
Y2ggKHRyYWNrLnR5cGUoKSkgewotICAgIGNhc2UgUmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlwZTo6
QXVkaW86Ci0gICAgICAgIGdfb2JqZWN0X3NldChtX2F1ZGlvUmVuZGVyZXIuZ2V0KCksICJkaXNh
YmxlZCIsICF0cmFjay5lbmFibGVkKCksIG51bGxwdHIpOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGU6OlZpZGVvOgotICAgICAgICBnX29iamVjdF9z
ZXQobV92aWRlb1JlbmRlcmVyLmdldCgpLCAiZGlzYWJsZWQiLCAhdHJhY2suZW5hYmxlZCgpLCBu
dWxscHRyKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBSZWFsdGltZU1lZGlhU291cmNlOjpU
eXBlOjpOb25lOgotICAgICAgICBHU1RfV0FSTklORygiVHJ5aW5nIHRvIGNoYW5nZSBlbmFibGVk
IHN0YXRlIG9mIGEgdHJhY2sgd2l0aCBOb25lIHR5cGUiKTsKLSAgICB9Ci19Ci0KLUdzdEVsZW1l
bnQqIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93cjo6Y3JlYXRlVmlkZW9TaW5rKCkKLXsK
LSAgICBHc3RFbGVtZW50KiBzaW5rOwotI2lmIFVTRShHU1RSRUFNRVJfR0wpCi0gICAgLy8gTm8g
bmVlZCB0byBjcmVhdGUgZ2x1cGxvYWQgYW5kIGdsY29sb3Jjb252ZXJ0IGhlcmUgYmVjYXVzZSB0
aGV5IGFyZQotICAgIC8vIGFscmVhZHkgY3JlYXRlZCBieSB0aGUgdmlkZW8gcmVuZGVyZXIuCi0g
ICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHByb2JhYmx5IHJldHVybiBhIFJlZlB0ci4gU2VlIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjQ3MDkuCi0gICAgc2luayA9
IE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6OmNyZWF0ZUdMQXBwU2luaygpOwotICAg
IG1fdmlkZW9TaW5rID0gc2luazsKLSNlbHNlCi0gICAgaWYgKG1fc3RyZWFtUHJpdmF0ZS0+Z2V0
VmlkZW9SZW5kZXJlcigpKSB7Ci0gICAgICAgIG1fdmlkZW9SZW5kZXJlciA9IG1fc3RyZWFtUHJp
dmF0ZS0+Z2V0VmlkZW9SZW5kZXJlcigpOwotICAgICAgICBtX3ZpZGVvU2luayA9IG1fc3RyZWFt
UHJpdmF0ZS0+Z2V0VmlkZW9TaW5rRWxlbWVudCgpOwotICAgICAgICBnX3NpZ25hbF9jb25uZWN0
X3N3YXBwZWQobV92aWRlb1NpbmsuZ2V0KCksICJyZXBhaW50LXJlcXVlc3RlZCIsIEdfQ0FMTEJB
Q0soTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6cmVwYWludENhbGxiYWNrKSwgdGhp
cyk7Ci0gICAgICAgIGdfb2JqZWN0X2dldChtX3ZpZGVvUmVuZGVyZXIuZ2V0KCksICJzaW5rIiwg
JnNpbmssIG51bGxwdHIpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIEdzdEVsZW1lbnQqIGdsZG93
bmxvYWQgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UoImdsZG93bmxvYWQiLCBudWxscHRyKTsK
LSAgICAgICAgR3N0RWxlbWVudCogdmlkZW9jb252ZXJ0ID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9t
YWtlKCJ2aWRlb2NvbnZlcnQiLCBudWxscHRyKTsKLSAgICAgICAgR3N0RWxlbWVudCogd2Via2l0
U2luayA9IE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6OmNyZWF0ZVZpZGVvU2luaygp
OwotICAgICAgICBzaW5rID0gZ3N0X2Jpbl9uZXcobnVsbHB0cik7Ci0gICAgICAgIGdzdF9iaW5f
YWRkX21hbnkoR1NUX0JJTihzaW5rKSwgZ2xkb3dubG9hZCwgdmlkZW9jb252ZXJ0LCB3ZWJraXRT
aW5rLCBudWxscHRyKTsKLSAgICAgICAgZ3N0X2VsZW1lbnRfbGlua19tYW55KGdsZG93bmxvYWQs
IHZpZGVvY29udmVydCwgd2Via2l0U2luaywgbnVsbHB0cik7Ci0gICAgICAgIEdSZWZQdHI8R3N0
UGFkPiBwYWQgPSBhZG9wdEdSZWYoZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQoZ2xkb3dubG9h
ZCwgInNpbmsiKSk7Ci0gICAgICAgIGdzdF9lbGVtZW50X2FkZF9wYWQoc2luaywgZ3N0X2dob3N0
X3BhZF9uZXcoInNpbmsiLCBwYWQuZ2V0KCkpKTsKLSAgICB9Ci0jZW5kaWYKLSAgICBpZiAoIW1f
dmlkZW9SZW5kZXJlcikgewotICAgICAgICBtX3ZpZGVvUmVuZGVyZXIgPSBhZG9wdEdSZWYob3dy
X2dzdF92aWRlb19yZW5kZXJlcl9uZXcoc2luaykpOwotI2lmIFVTRShHU1RSRUFNRVJfR0wpCi0g
ICAgICAgIG93cl92aWRlb19yZW5kZXJlcl9zZXRfcmVxdWVzdF9jb250ZXh0X2NhbGxiYWNrKE9X
Ul9WSURFT19SRU5ERVJFUihtX3ZpZGVvUmVuZGVyZXIuZ2V0KCkpLCAoT3dyVmlkZW9SZW5kZXJl
clJlcXVlc3RDb250ZXh0Q2FsbGJhY2spIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6
OnJlcXVlc3RHTENvbnRleHQsIHRoaXMsIG51bGxwdHIpOwotI2VuZGlmCi0gICAgICAgIG1fc3Ry
ZWFtUHJpdmF0ZS0+c2V0VmlkZW9SZW5kZXJlcihtX3ZpZGVvUmVuZGVyZXIuZ2V0KCksIHZpZGVv
U2luaygpKTsKLSAgICB9Ci0gICAgcmV0dXJuIHNpbms7Ci19Ci0KLXZvaWQgTWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyT3dyOjpzZXRTaXplKGNvbnN0IEludFNpemUmIHNpemUpCi17Ci0gICAg
aWYgKHNpemUgPT0gbV9zaXplKQotICAgICAgICByZXR1cm47Ci0KLSAgICBNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXJCYXNlOjpzZXRTaXplKHNpemUpOwotICAgIGlmIChtX3ZpZGVvUmVuZGVy
ZXIpCi0gICAgICAgIGdfb2JqZWN0X3NldChtX3ZpZGVvUmVuZGVyZXIuZ2V0KCksICJ3aWR0aCIs
IHNpemUud2lkdGgoKSwgImhlaWdodCIsIHNpemUuaGVpZ2h0KCksIG51bGxwdHIpOwotCi0gICAg
aWYgKCFtX3ZpZGVvVHJhY2spCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8mIHJlYWxUaW1l
TWVkaWFTb3VyY2UgPSBzdGF0aWNfY2FzdDxSZWFsdGltZU1lZGlhU291cmNlT3dyJj4obV92aWRl
b1RyYWNrLT5zb3VyY2UoKSk7Ci0gICAgcmVhbFRpbWVNZWRpYVNvdXJjZS5zZXRXaWR0aChzaXpl
LndpZHRoKCkpOwotICAgIHJlYWxUaW1lTWVkaWFTb3VyY2Uuc2V0SGVpZ2h0KHNpemUuaGVpZ2h0
KCkpOwotfQotCi1GbG9hdFNpemUgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyOjpuYXR1
cmFsU2l6ZSgpIGNvbnN0Ci17Ci0gICAgYXV0byBzaXplID0gTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyQmFzZTo6bmF0dXJhbFNpemUoKTsKLQotICAgIC8vIEluIGNhc2Ugd2UgYXJlIG5vdCBw
bGF5aW5nIHRoZSB2aWRlbyB3ZSByZXR1cm4gdGhlIHNpemUgd2Ugc2V0IHRvIHRoZSBtZWRpYSBz
b3VyY2UuCi0gICAgaWYgKG1fdmlkZW9UcmFjayAmJiBzaXplLmlzWmVybygpKSB7Ci0gICAgICAg
IGF1dG8mIHJlYWxUaW1lTWVkaWFTb3VyY2UgPSBzdGF0aWNfY2FzdDxSZWFsdGltZU1lZGlhU291
cmNlT3dyJj4obV92aWRlb1RyYWNrLT5zb3VyY2UoKSk7Ci0gICAgICAgIHJldHVybiByZWFsVGlt
ZU1lZGlhU291cmNlLnNpemUoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gc2l6ZTsKLX0KLQotfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKFZJREVPKSAmJiBFTkFCTEUo
TUVESUFfU1RSRUFNKSAmJiBVU0UoR1NUUkVBTUVSKSAmJiBVU0UoT1BFTldFQlJUQykKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXJPd3IuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3IuaApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMzM0NjMwZTQ1YzM0ODFiYTdkNDJmNTY2MzdlMGRhYTA1MTU0
YmQyZi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyT3dyLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMjggKzAsMCBAQAotLyoKLSAqICBD
b3B5cmlnaHQgKEMpIDIwMTUgSWdhbGlhIFMuTC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqICBD
b3B5cmlnaHQgKEMpIDIwMTUgTWV0cm9sb2dpY2FsLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCi0gKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3Nl
ciBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0g
KiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiAg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9u
LCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0gKi8KLQotI2lmbmRlZiBNZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXJPd3JfaAotI2RlZmluZSBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3JfaAot
Ci0jaWYgRU5BQkxFKFZJREVPKSAmJiBFTkFCTEUoTUVESUFfU1RSRUFNKSAmJiBVU0UoR1NUUkVB
TUVSKSAmJiBVU0UoT1BFTldFQlJUQykKLQotI2luY2x1ZGUgIkF1ZGlvVHJhY2tQcml2YXRlTWVk
aWFTdHJlYW0uaCIKLSNpbmNsdWRlICJNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlLmgi
Ci0jaW5jbHVkZSAiTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUuaCIKLSNpbmNsdWRlICJWaWRlb1Ry
YWNrUHJpdmF0ZU1lZGlhU3RyZWFtLmgiCi0KLXR5cGVkZWYgc3RydWN0IF9Pd3JHc3RWaWRlb1Jl
bmRlcmVyIE93ckdzdFZpZGVvUmVuZGVyZXI7Ci10eXBlZGVmIHN0cnVjdCBfT3dyR3N0QXVkaW9S
ZW5kZXJlciBPd3JHc3RBdWRpb1JlbmRlcmVyOwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNs
YXNzIE1lZGlhU3RyZWFtUHJpdmF0ZTsKLWNsYXNzIFJlYWx0aW1lTWVkaWFTb3VyY2VPd3I7Ci0K
LWNsYXNzIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93ciA6IHB1YmxpYyBNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXJCYXNlLCBwcml2YXRlIE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlOjpP
YnNlcnZlciB7Ci1wdWJsaWM6Ci0gICAgZXhwbGljaXQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyT3dyKE1lZGlhUGxheWVyKik7Ci0gICAgfk1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93
cigpOwotCi0gICAgc3RhdGljIHZvaWQgcmVnaXN0ZXJNZWRpYUVuZ2luZShNZWRpYUVuZ2luZVJl
Z2lzdHJhcik7Ci0KLSAgICB2b2lkIHNldFNpemUoY29uc3QgSW50U2l6ZSYpIGZpbmFsOwotCi0g
ICAgRmxvYXRTaXplIG5hdHVyYWxTaXplKCkgY29uc3QgZmluYWw7Ci0KLXByaXZhdGU6Ci0gICAg
R3N0RWxlbWVudCogY3JlYXRlVmlkZW9TaW5rKCkgZmluYWw7Ci0gICAgR3N0RWxlbWVudCogYXVk
aW9TaW5rKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9hdWRpb1NpbmsuZ2V0KCk7IH0KLSAgICBi
b29sIGlzTGl2ZVN0cmVhbSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHRydWU7IH0KLQotICAgIFN0
cmluZyBlbmdpbmVEZXNjcmlwdGlvbigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJPcGVuV2ViUlRD
IjsgfQotCi0gICAgdm9pZCBsb2FkKGNvbnN0IFN0cmluZyYpIGZpbmFsOwotI2lmIEVOQUJMRShN
RURJQV9TT1VSQ0UpCi0gICAgdm9pZCBsb2FkKGNvbnN0IFN0cmluZyYsIE1lZGlhU291cmNlUHJp
dmF0ZUNsaWVudCopIGZpbmFsOwotI2VuZGlmCi0gICAgdm9pZCBsb2FkKE1lZGlhU3RyZWFtUHJp
dmF0ZSYpIGZpbmFsOwotICAgIHZvaWQgY2FuY2VsTG9hZCgpIGZpbmFsIHsgfQotCi0gICAgdm9p
ZCBwcmVwYXJlVG9QbGF5KCkgZmluYWwgeyB9Ci0gICAgdm9pZCBwbGF5KCkgZmluYWw7Ci0gICAg
dm9pZCBwYXVzZSgpIGZpbmFsOwotCi0gICAgYm9vbCBoYXNWaWRlbygpIGNvbnN0IGZpbmFsOwot
ICAgIGJvb2wgaGFzQXVkaW8oKSBjb25zdCBmaW5hbDsKLQotICAgIGZsb2F0IGR1cmF0aW9uKCkg
Y29uc3QgZmluYWwgeyByZXR1cm4gMDsgfQotCi0gICAgZmxvYXQgY3VycmVudFRpbWUoKSBjb25z
dCBmaW5hbDsKLSAgICB2b2lkIHNlZWsoZmxvYXQpIGZpbmFsIHsgfQotICAgIGJvb2wgc2Vla2lu
ZygpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9Ci0KLSAgICB2b2lkIHNldFJhdGUoZmxv
YXQpIGZpbmFsIHsgfQotICAgIHZvaWQgc2V0UHJlc2VydmVzUGl0Y2goYm9vbCkgZmluYWwgeyB9
Ci0gICAgYm9vbCBwYXVzZWQoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3BhdXNlZDsgfQotCi0g
ICAgdm9pZCBzZXRWb2x1bWUoZmxvYXQpIGZpbmFsOwotICAgIHZvaWQgc2V0TXV0ZWQoYm9vbCkg
ZmluYWw7Ci0KLSAgICBib29sIGhhc0Nsb3NlZENhcHRpb25zKCkgY29uc3QgZmluYWwgeyByZXR1
cm4gZmFsc2U7IH0KLSAgICB2b2lkIHNldENsb3NlZENhcHRpb25zVmlzaWJsZShib29sKSBmaW5h
bCB7IH07Ci0KLSAgICBmbG9hdCBtYXhUaW1lU2Vla2FibGUoKSBjb25zdCBmaW5hbCB7IHJldHVy
biAwOyB9Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFBsYXRmb3JtVGltZVJhbmdlcz4gYnVmZmVyZWQo
KSBjb25zdCBmaW5hbCB7IHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPFBsYXRmb3JtVGltZVJhbmdl
cz4oKTsgfQotICAgIGJvb2wgZGlkTG9hZGluZ1Byb2dyZXNzKCkgY29uc3QgZmluYWw7Ci0KLSAg
ICB1bnNpZ25lZCBsb25nIGxvbmcgdG90YWxCeXRlcygpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIDA7
IH0KLQotICAgIGJvb2wgY2FuTG9hZFBvc3RlcigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIGZhbHNl
OyB9Ci0gICAgdm9pZCBzZXRQb3N0ZXIoY29uc3QgU3RyaW5nJikgZmluYWwgeyB9Ci0gICAgYm9v
bCBlbmRlZCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fZW5kZWQ7IH0KLQotICAgIC8vIE1lZGlh
U3RyZWFtVHJhY2tQcml2YXRlOjpPYnNlcnZlciBpbXBsZW1lbnRhdGlvbi4KLSAgICB2b2lkIHRy
YWNrRW5kZWQoTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUmKSBmaW5hbDsKLSAgICB2b2lkIHRyYWNr
TXV0ZWRDaGFuZ2VkKE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlJikgZmluYWw7Ci0gICAgdm9pZCB0
cmFja1NldHRpbmdzQ2hhbmdlZChNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZSYpIGZpbmFsOwotICAg
IHZvaWQgdHJhY2tFbmFibGVkQ2hhbmdlZChNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZSYpIGZpbmFs
OwotCi0gICAgc3RhdGljIHZvaWQgZ2V0U3VwcG9ydGVkVHlwZXMoSGFzaFNldDxTdHJpbmcsIEFT
Q0lJQ2FzZUluc2Vuc2l0aXZlSGFzaD4mKTsKLSAgICBzdGF0aWMgTWVkaWFQbGF5ZXI6OlN1cHBv
cnRzVHlwZSBzdXBwb3J0c1R5cGUoY29uc3QgTWVkaWFFbmdpbmVTdXBwb3J0UGFyYW1ldGVycyYp
OwotICAgIHN0YXRpYyBib29sIGluaXRpYWxpemVHU3RyZWFtZXJBbmRHU3RyZWFtZXJEZWJ1Z2dp
bmcoKTsKLSAgICB2b2lkIGNyZWF0ZUdTVEF1ZGlvU2lua0JpbigpOwotICAgIHZvaWQgbG9hZGlu
Z0ZhaWxlZChNZWRpYVBsYXllcjo6TmV0d29ya1N0YXRlIGVycm9yKTsKLSAgICB2b2lkIHN0b3Ao
KTsKLSAgICB2b2lkIG1heWJlSGFuZGxlQ2hhbmdlTXV0ZWRTdGF0ZShNZWRpYVN0cmVhbVRyYWNr
UHJpdmF0ZSYpOwotICAgIHZvaWQgZGlzYWJsZU1lZGlhVHJhY2tzKCk7Ci0KLSAgICBib29sIG1f
cGF1c2VkIHsgdHJ1ZSB9OwotICAgIGJvb2wgbV9lbmRlZCB7IGZhbHNlIH07Ci0gICAgUmVmUHRy
PE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlPiBtX3ZpZGVvVHJhY2s7Ci0gICAgUmVmUHRyPE1lZGlh
U3RyZWFtVHJhY2tQcml2YXRlPiBtX2F1ZGlvVHJhY2s7Ci0gICAgR1JlZlB0cjxHc3RFbGVtZW50
PiBtX2F1ZGlvU2luazsKLSAgICBSZWZQdHI8TWVkaWFTdHJlYW1Qcml2YXRlPiBtX3N0cmVhbVBy
aXZhdGU7Ci0gICAgR1JlZlB0cjxPd3JHc3RWaWRlb1JlbmRlcmVyPiBtX3ZpZGVvUmVuZGVyZXI7
Ci0gICAgR1JlZlB0cjxPd3JHc3RBdWRpb1JlbmRlcmVyPiBtX2F1ZGlvUmVuZGVyZXI7Ci0KLSAg
ICBIYXNoTWFwPFN0cmluZywgUmVmUHRyPEF1ZGlvVHJhY2tQcml2YXRlTWVkaWFTdHJlYW0+PiBt
X2F1ZGlvVHJhY2tNYXA7Ci0gICAgSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxWaWRlb1RyYWNrUHJp
dmF0ZU1lZGlhU3RyZWFtPj4gbV92aWRlb1RyYWNrTWFwOwotfTsKLQotfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKFZJREVPKSAmJiBFTkFCTEUoTUVESUFfU1RSRUFN
KSAmJiBVU0UoR1NUUkVBTUVSKSAmJiBVU0UoT1BFTldFQlJUQykKLQotI2VuZGlmIC8vIE1lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lck93cl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYUVuZHBvaW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21lZGlhc3RyZWFtL01lZGlhRW5kcG9pbnQuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCBkMTM3NWZkNGMwNDEzOGRmZTE2NWMzNTRiMjFlYTliNTYyNWZhZmJjLi4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhRW5kcG9pbnQuY3BwCisrKyAvZGV2L251bGwKQEAg
LTEsODYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBFcmljc3NvbiBBQi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqCi0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgotICogICAgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZQotICogICAgZGlzdHJpYnV0aW9uLgotICogMy4gTmVpdGhlciB0aGUg
bmFtZSBvZiBFcmljc3NvbiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAg
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20g
dGhpcwotICogICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgot
ICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoV0VC
X1JUQykKLSNpbmNsdWRlICJNZWRpYUVuZHBvaW50LmgiCi0KLSNpbmNsdWRlICJNZWRpYVBheWxv
YWQuaCIKLSNpbmNsdWRlICJSVENEYXRhQ2hhbm5lbEhhbmRsZXIuaCIKLSNpbmNsdWRlICJSZWFs
dGltZU1lZGlhU291cmNlLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgRW1wdHlS
ZWFsdGltZU1lZGlhU291cmNlIGZpbmFsIDogcHVibGljIFJlYWx0aW1lTWVkaWFTb3VyY2Ugewot
cHVibGljOgotICAgIHN0YXRpYyBSZWY8RW1wdHlSZWFsdGltZU1lZGlhU291cmNlPiBjcmVhdGUo
KSB7IHJldHVybiBhZG9wdFJlZigqbmV3IEVtcHR5UmVhbHRpbWVNZWRpYVNvdXJjZSgpKTsgfQot
Ci1wcml2YXRlOgotICAgIEVtcHR5UmVhbHRpbWVNZWRpYVNvdXJjZSgpIDogUmVhbHRpbWVNZWRp
YVNvdXJjZShlbXB0eVN0cmluZygpLCBUeXBlOjpOb25lLCBlbXB0eVN0cmluZygpKSB7IH0KLQot
ICAgIGNvbnN0IFJlYWx0aW1lTWVkaWFTb3VyY2VDYXBhYmlsaXRpZXMmIGNhcGFiaWxpdGllcygp
IGNvbnN0IGZpbmFsIHsgcmV0dXJuIFJlYWx0aW1lTWVkaWFTb3VyY2VDYXBhYmlsaXRpZXM6OmVt
cHR5Q2FwYWJpbGl0aWVzKCk7IH0KLSAgICBjb25zdCBSZWFsdGltZU1lZGlhU291cmNlU2V0dGlu
Z3MmIHNldHRpbmdzKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9zb3VyY2VTZXR0aW5nczsgfQot
Ci0gICAgUmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzIG1fc291cmNlU2V0dGluZ3M7Ci19Owot
Ci1jbGFzcyBFbXB0eU1lZGlhRW5kcG9pbnQgZmluYWwgOiBwdWJsaWMgTWVkaWFFbmRwb2ludCB7
Ci1wcml2YXRlOgotICAgIHZvaWQgc2V0Q29uZmlndXJhdGlvbihNZWRpYUVuZHBvaW50Q29uZmln
dXJhdGlvbiYmKSBmaW5hbCB7IH0KLQotICAgIHZvaWQgZ2VuZXJhdGVEdGxzSW5mbygpIGZpbmFs
IHsgfQotICAgIE1lZGlhUGF5bG9hZFZlY3RvciBnZXREZWZhdWx0QXVkaW9QYXlsb2FkcygpIGZp
bmFsIHsgcmV0dXJuIE1lZGlhUGF5bG9hZFZlY3RvcigpOyB9Ci0gICAgTWVkaWFQYXlsb2FkVmVj
dG9yIGdldERlZmF1bHRWaWRlb1BheWxvYWRzKCkgZmluYWwgeyByZXR1cm4gTWVkaWFQYXlsb2Fk
VmVjdG9yKCk7IH0KLSAgICBNZWRpYVBheWxvYWRWZWN0b3IgZmlsdGVyUGF5bG9hZHMoY29uc3Qg
TWVkaWFQYXlsb2FkVmVjdG9yJiwgY29uc3QgTWVkaWFQYXlsb2FkVmVjdG9yJikgZmluYWwgeyBy
ZXR1cm4gTWVkaWFQYXlsb2FkVmVjdG9yKCk7IH0KLQotICAgIFVwZGF0ZVJlc3VsdCB1cGRhdGVS
ZWNlaXZlQ29uZmlndXJhdGlvbihNZWRpYUVuZHBvaW50U2Vzc2lvbkNvbmZpZ3VyYXRpb24qLCBi
b29sKSBmaW5hbCB7IHJldHVybiBVcGRhdGVSZXN1bHQ6OkZhaWxlZDsgfQotICAgIFVwZGF0ZVJl
c3VsdCB1cGRhdGVTZW5kQ29uZmlndXJhdGlvbihNZWRpYUVuZHBvaW50U2Vzc2lvbkNvbmZpZ3Vy
YXRpb24qLCBjb25zdCBSZWFsdGltZU1lZGlhU291cmNlTWFwJiwgYm9vbCkgZmluYWwgeyByZXR1
cm4gVXBkYXRlUmVzdWx0OjpGYWlsZWQ7IH0KLQotICAgIHZvaWQgYWRkUmVtb3RlQ2FuZGlkYXRl
KGNvbnN0IEljZUNhbmRpZGF0ZSYsIGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYsIGNvbnN0
IFN0cmluZyYpIGZpbmFsIHsgfQotCi0gICAgUmVmPFJlYWx0aW1lTWVkaWFTb3VyY2U+IGNyZWF0
ZU11dGVkUmVtb3RlU291cmNlKGNvbnN0IFN0cmluZyYsIFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5
cGUpIGZpbmFsIHsgcmV0dXJuIEVtcHR5UmVhbHRpbWVNZWRpYVNvdXJjZTo6Y3JlYXRlKCk7IH0K
LSAgICB2b2lkIHJlcGxhY2VTZW5kU291cmNlKFJlYWx0aW1lTWVkaWFTb3VyY2UmLCBjb25zdCBT
dHJpbmcmKSBmaW5hbCB7IH0KLSAgICB2b2lkIHJlcGxhY2VNdXRlZFJlbW90ZVNvdXJjZU1pZChj
b25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmKSBmaW5hbCB7IH07Ci0KLSAgICBzdGQ6OnVuaXF1
ZV9wdHI8UlRDRGF0YUNoYW5uZWxIYW5kbGVyPiBjcmVhdGVEYXRhQ2hhbm5lbEhhbmRsZXIoY29u
c3QgU3RyaW5nJiwgY29uc3QgUlRDRGF0YUNoYW5uZWxJbml0JikgZmluYWwgeyByZXR1cm4gbnVs
bHB0cjsgfQotICAgIHZvaWQgc3RvcCgpIGZpbmFsIHsgfQotfTsKLQotc3RhdGljIHN0ZDo6dW5p
cXVlX3B0cjxNZWRpYUVuZHBvaW50PiBjcmVhdGVNZWRpYUVuZHBvaW50KE1lZGlhRW5kcG9pbnRD
bGllbnQmKQotewotICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPEVtcHR5TWVkaWFFbmRwb2lu
dD4oKTsKLX0KLQotQ3JlYXRlTWVkaWFFbmRwb2ludCBNZWRpYUVuZHBvaW50OjpjcmVhdGUgPSBj
cmVhdGVNZWRpYUVuZHBvaW50OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAv
LyBFTkFCTEUoV0VCX1JUQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21l
ZGlhc3RyZWFtL01lZGlhRW5kcG9pbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlh
c3RyZWFtL01lZGlhRW5kcG9pbnQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTFi
NTFkNGUwOGEzZGQzZWZiMDlhMDExZTMyOTc0ZDI4Yjc5ZGY3OC4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRp
YXN0cmVhbS9NZWRpYUVuZHBvaW50LmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMDggKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBFcmljc3NvbiBBQi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqICAgIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK
LSAqICAgIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgRXJpY3Nzb24g
bm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0gKiAgICBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSAqICAgIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0g
KiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotI3ByYWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUoV0VCX1JUQykKLQotI2luY2x1ZGUgIk1lZGlh
RW5kcG9pbnRDb25maWd1cmF0aW9uLmgiCi0jaW5jbHVkZSAiUGVlckNvbm5lY3Rpb25CYWNrZW5k
LmgiCi0jaW5jbHVkZSAiUlRDSWNlVHJhbnNwb3J0U3RhdGUuaCIKLSNpbmNsdWRlICJSZWFsdGlt
ZU1lZGlhU291cmNlLmgiCi0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KLSNpbmNsdWRlIDx3dGYv
dGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBNZWRpYUVu
ZHBvaW50OwotY2xhc3MgTWVkaWFFbmRwb2ludENsaWVudDsKLWNsYXNzIE1lZGlhRW5kcG9pbnRT
ZXNzaW9uQ29uZmlndXJhdGlvbjsKLWNsYXNzIE1lZGlhU3RyZWFtVHJhY2s7Ci1jbGFzcyBSVENE
YXRhQ2hhbm5lbEhhbmRsZXI7Ci1jbGFzcyBSZWFsdGltZU1lZGlhU291cmNlOwotCi1zdHJ1Y3Qg
SWNlQ2FuZGlkYXRlOwotc3RydWN0IE1lZGlhUGF5bG9hZDsKLXN0cnVjdCBSVENEYXRhQ2hhbm5l
bEluaXQ7Ci0KLXR5cGVkZWYgc3RkOjp1bmlxdWVfcHRyPE1lZGlhRW5kcG9pbnQ+ICgqQ3JlYXRl
TWVkaWFFbmRwb2ludCkoTWVkaWFFbmRwb2ludENsaWVudCYpOwotdHlwZWRlZiBWZWN0b3I8TWVk
aWFQYXlsb2FkPiBNZWRpYVBheWxvYWRWZWN0b3I7Ci10eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBS
ZWFsdGltZU1lZGlhU291cmNlKj4gUmVhbHRpbWVNZWRpYVNvdXJjZU1hcDsKLQotY2xhc3MgTWVk
aWFFbmRwb2ludCB7Ci1wdWJsaWM6Ci0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIENyZWF0ZU1l
ZGlhRW5kcG9pbnQgY3JlYXRlOwotICAgIHZpcnR1YWwgfk1lZGlhRW5kcG9pbnQoKSB7IH0KLQot
ICAgIGVudW0gY2xhc3MgVXBkYXRlUmVzdWx0IHsKLSAgICAgICAgU3VjY2VzcywKLSAgICAgICAg
U3VjY2Vzc1dpdGhJY2VSZXN0YXJ0LAotICAgICAgICBGYWlsZWQKLSAgICB9OwotCi0gICAgdmly
dHVhbCB2b2lkIHNldENvbmZpZ3VyYXRpb24oTWVkaWFFbmRwb2ludENvbmZpZ3VyYXRpb24mJikg
PSAwOwotCi0gICAgdmlydHVhbCB2b2lkIGdlbmVyYXRlRHRsc0luZm8oKSA9IDA7Ci0gICAgdmly
dHVhbCBNZWRpYVBheWxvYWRWZWN0b3IgZ2V0RGVmYXVsdEF1ZGlvUGF5bG9hZHMoKSA9IDA7Ci0g
ICAgdmlydHVhbCBNZWRpYVBheWxvYWRWZWN0b3IgZ2V0RGVmYXVsdFZpZGVvUGF5bG9hZHMoKSA9
IDA7Ci0gICAgdmlydHVhbCBNZWRpYVBheWxvYWRWZWN0b3IgZmlsdGVyUGF5bG9hZHMoY29uc3Qg
TWVkaWFQYXlsb2FkVmVjdG9yJiByZW1vdGVQYXlsb2FkcywgY29uc3QgTWVkaWFQYXlsb2FkVmVj
dG9yJiBkZWZhdWx0UGF5bG9hZHMpID0gMDsKLQotICAgIHZpcnR1YWwgVXBkYXRlUmVzdWx0IHVw
ZGF0ZVJlY2VpdmVDb25maWd1cmF0aW9uKE1lZGlhRW5kcG9pbnRTZXNzaW9uQ29uZmlndXJhdGlv
biosIGJvb2wgaXNJbml0aWF0b3IpID0gMDsKLSAgICB2aXJ0dWFsIFVwZGF0ZVJlc3VsdCB1cGRh
dGVTZW5kQ29uZmlndXJhdGlvbihNZWRpYUVuZHBvaW50U2Vzc2lvbkNvbmZpZ3VyYXRpb24qLCBj
b25zdCBSZWFsdGltZU1lZGlhU291cmNlTWFwJiwgYm9vbCBpc0luaXRpYXRvcikgPSAwOwotCi0g
ICAgdmlydHVhbCB2b2lkIGFkZFJlbW90ZUNhbmRpZGF0ZShjb25zdCBJY2VDYW5kaWRhdGUmLCBj
b25zdCBTdHJpbmcmIG1pZCwgY29uc3QgU3RyaW5nJiB1ZnJhZywgY29uc3QgU3RyaW5nJiBwYXNz
d29yZCkgPSAwOwotCi0gICAgdmlydHVhbCBSZWY8UmVhbHRpbWVNZWRpYVNvdXJjZT4gY3JlYXRl
TXV0ZWRSZW1vdGVTb3VyY2UoY29uc3QgU3RyaW5nJiBtaWQsIFJlYWx0aW1lTWVkaWFTb3VyY2U6
OlR5cGUpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVwbGFjZVNlbmRTb3VyY2UoUmVhbHRpbWVN
ZWRpYVNvdXJjZSYsIGNvbnN0IFN0cmluZyYgbWlkKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJl
cGxhY2VNdXRlZFJlbW90ZVNvdXJjZU1pZChjb25zdCBTdHJpbmcmIG9sZE1pZCwgY29uc3QgU3Ry
aW5nJiBuZXdNaWQpID0gMDsKLQotICAgIHZpcnR1YWwgc3RkOjp1bmlxdWVfcHRyPFJUQ0RhdGFD
aGFubmVsSGFuZGxlcj4gY3JlYXRlRGF0YUNoYW5uZWxIYW5kbGVyKGNvbnN0IFN0cmluZyYsIGNv
bnN0IFJUQ0RhdGFDaGFubmVsSW5pdCYpID0gMDsKLQotICAgIHZpcnR1YWwgdm9pZCBzdG9wKCkg
PSAwOwotCi0gICAgdmlydHVhbCB2b2lkIGVtdWxhdGVQbGF0Zm9ybUV2ZW50KGNvbnN0IFN0cmlu
ZyYpIHsgfTsKLQotICAgIHZpcnR1YWwgdm9pZCBnZXRTdGF0cyhNZWRpYVN0cmVhbVRyYWNrKiwg
UGVlckNvbm5lY3Rpb246OlN0YXRzUHJvbWlzZSYmIHByb21pc2UpIHsgcHJvbWlzZS5yZWplY3Qo
Tm90U3VwcG9ydGVkRXJyb3IpOyB9Ci19OwotCi1jbGFzcyBNZWRpYUVuZHBvaW50Q2xpZW50IHsK
LXB1YmxpYzoKLSAgICB2aXJ0dWFsIHZvaWQgZ290RHRsc0ZpbmdlcnByaW50KGNvbnN0IFN0cmlu
ZyYgZmluZ2VycHJpbnQsIGNvbnN0IFN0cmluZyYgZmluZ2VycHJpbnRGdW5jdGlvbikgPSAwOwot
ICAgIHZpcnR1YWwgdm9pZCBnb3RJY2VDYW5kaWRhdGUoY29uc3QgU3RyaW5nJiBtaWQsIEljZUNh
bmRpZGF0ZSYmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRvbmVHYXRoZXJpbmdDYW5kaWRhdGVz
KGNvbnN0IFN0cmluZyYgbWlkKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGljZVRyYW5zcG9ydFN0
YXRlQ2hhbmdlZChjb25zdCBTdHJpbmcmIG1pZCwgUlRDSWNlVHJhbnNwb3J0U3RhdGUpID0gMDsK
LQotICAgIHZpcnR1YWwgfk1lZGlhRW5kcG9pbnRDbGllbnQoKSB7IH0KLX07Ci0KLX0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShXRUJfUlRDKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFFbmRwb2ludFNlc3Npb25D
b25maWd1cmF0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRp
YUVuZHBvaW50U2Vzc2lvbkNvbmZpZ3VyYXRpb24uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggYmYyYmQxZThiOTdjNGU3ODk5MTkxMzEzZGEyYThmZWYyYmIzOGVkOS4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYUVuZHBvaW50U2Vzc2lvbkNvbmZpZ3VyYXRpb24uaAorKysg
L2Rldi9udWxsCkBAIC0xLDkzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgRXJp
Y3Nzb24gQUIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIKLSAqICAgIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqICAgIGRpc3RyaWJ1dGlvbi4KLSAqIDMu
IE5laXRoZXIgdGhlIG5hbWUgb2YgRXJpY3Nzb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJp
YnV0b3JzCi0gKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tIHRoaXMKLSAqICAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
LSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBNZWRpYUVuZHBvaW50U2Vz
c2lvbkNvbmZpZ3VyYXRpb25faAotI2RlZmluZSBNZWRpYUVuZHBvaW50U2Vzc2lvbkNvbmZpZ3Vy
YXRpb25faAotCi0jaWYgRU5BQkxFKFdFQl9SVEMpCi0KLSNpbmNsdWRlICJQZWVyQ29ubmVjdGlv
blN0YXRlcy5oIgotI2luY2x1ZGUgIlBlZXJNZWRpYURlc2NyaXB0aW9uLmgiCi0jaW5jbHVkZSA8
d3RmL0NyeXB0b2dyYXBoaWNhbGx5UmFuZG9tTnVtYmVyLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotY2xhc3MgTWVkaWFFbmRwb2ludFNlc3Npb25Db25maWd1cmF0aW9uIDogcHVibGljIFJl
ZkNvdW50ZWQ8TWVkaWFFbmRwb2ludFNlc3Npb25Db25maWd1cmF0aW9uPiB7Ci1wdWJsaWM6Ci0g
ICAgc3RhdGljIFJlZlB0cjxNZWRpYUVuZHBvaW50U2Vzc2lvbkNvbmZpZ3VyYXRpb24+IGNyZWF0
ZSgpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IE1lZGlhRW5kcG9pbnRTZXNz
aW9uQ29uZmlndXJhdGlvbigpKTsKLSAgICB9Ci0gICAgdmlydHVhbCB+TWVkaWFFbmRwb2ludFNl
c3Npb25Db25maWd1cmF0aW9uKCkgeyB9Ci0KLSAgICBpbnQ2NF90IHNlc3Npb25JZCgpIGNvbnN0
IHsgcmV0dXJuIG1fc2Vzc2lvbklkOyB9Ci0gICAgdm9pZCBzZXRTZXNzaW9uSWQoaW50NjRfdCBz
ZXNzaW9uSWQpIHsgbV9zZXNzaW9uSWQgPSBzZXNzaW9uSWQ7IH0KLQotICAgIHVuc2lnbmVkIHNl
c3Npb25WZXJzaW9uKCkgY29uc3QgeyByZXR1cm4gbV9zZXNzaW9uVmVyc2lvbjsgfQotICAgIHZv
aWQgc2V0U2Vzc2lvblZlcnNpb24odW5zaWduZWQgc2Vzc2lvblZlcnNpb24pIHsgbV9zZXNzaW9u
VmVyc2lvbiA9IHNlc3Npb25WZXJzaW9uOyB9Ci0KLSAgICBWZWN0b3I8UGVlck1lZGlhRGVzY3Jp
cHRpb24+JiBtZWRpYURlc2NyaXB0aW9ucygpIHsgcmV0dXJuIG1fbWVkaWFEZXNjcmlwdGlvbnM7
IH0KLSAgICBjb25zdCBWZWN0b3I8UGVlck1lZGlhRGVzY3JpcHRpb24+JiBtZWRpYURlc2NyaXB0
aW9ucygpIGNvbnN0IHsgcmV0dXJuIG1fbWVkaWFEZXNjcmlwdGlvbnM7IH0KLSAgICB2b2lkIGFk
ZE1lZGlhRGVzY3JpcHRpb24oUGVlck1lZGlhRGVzY3JpcHRpb24mJiBkZXNjcmlwdGlvbikgeyBt
X21lZGlhRGVzY3JpcHRpb25zLmFwcGVuZChXVEZNb3ZlKGRlc2NyaXB0aW9uKSk7IH0KLQotICAg
IFBlZXJDb25uZWN0aW9uU3RhdGVzOjpCdW5kbGVQb2xpY3kgYnVuZGxlUG9saWN5KCkgY29uc3Qg
eyByZXR1cm4gbV9idW5kbGVQb2xpY3k7IH0KLSAgICB2b2lkIHNldEJ1bmRsZVBvbGljeShQZWVy
Q29ubmVjdGlvblN0YXRlczo6QnVuZGxlUG9saWN5IGJ1bmRsZVBvbGljeSkgeyBtX2J1bmRsZVBv
bGljeSA9IGJ1bmRsZVBvbGljeTsgfQotCi0gICAgUmVmUHRyPE1lZGlhRW5kcG9pbnRTZXNzaW9u
Q29uZmlndXJhdGlvbj4gY2xvbmUoKSBjb25zdAotICAgIHsKLSAgICAgICAgUmVmUHRyPE1lZGlh
RW5kcG9pbnRTZXNzaW9uQ29uZmlndXJhdGlvbj4gY29weSA9IGNyZWF0ZSgpOwotICAgICAgICBj
b3B5LT5tX3Nlc3Npb25JZCA9IG1fc2Vzc2lvbklkOwotICAgICAgICBjb3B5LT5tX3Nlc3Npb25W
ZXJzaW9uID0gbV9zZXNzaW9uVmVyc2lvbjsKLSAgICAgICAgY29weS0+bV9tZWRpYURlc2NyaXB0
aW9ucyA9IG1fbWVkaWFEZXNjcmlwdGlvbnM7Ci0gICAgICAgIGNvcHktPm1fYnVuZGxlUG9saWN5
ID0gbV9idW5kbGVQb2xpY3k7Ci0KLSAgICAgICAgcmV0dXJuIGNvcHk7Ci0gICAgfQotCi1wcml2
YXRlOgotICAgIE1lZGlhRW5kcG9pbnRTZXNzaW9uQ29uZmlndXJhdGlvbigpCi0gICAgewotICAg
ICAgICBtX3Nlc3Npb25JZCA9IGNyeXB0b2dyYXBoaWNhbGx5UmFuZG9tTnVtYmVyKCk7Ci0gICAg
ICAgIG1fc2Vzc2lvbklkID0gbV9zZXNzaW9uSWQgPDwgMzEgfCBjcnlwdG9ncmFwaGljYWxseVJh
bmRvbU51bWJlcigpOwotICAgIH0KLQotICAgIGludDY0X3QgbV9zZXNzaW9uSWQ7Ci0gICAgdW5z
aWduZWQgbV9zZXNzaW9uVmVyc2lvbiB7IDAgfTsKLQotICAgIFZlY3RvcjxQZWVyTWVkaWFEZXNj
cmlwdGlvbj4gbV9tZWRpYURlc2NyaXB0aW9uczsKLQotICAgIFBlZXJDb25uZWN0aW9uU3RhdGVz
OjpCdW5kbGVQb2xpY3kgbV9idW5kbGVQb2xpY3kgeyBQZWVyQ29ubmVjdGlvblN0YXRlczo6QnVu
ZGxlUG9saWN5OjpCYWxhbmNlZCB9OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0j
ZW5kaWYgLy8gRU5BQkxFKFdFQl9SVEMpCi0KLSNlbmRpZiAvLyBNZWRpYUVuZHBvaW50U2Vzc2lv
bkNvbmZpZ3VyYXRpb25faApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVk
aWFzdHJlYW0vTWVkaWFTdHJlYW1Qcml2YXRlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
ZWRpYXN0cmVhbS9NZWRpYVN0cmVhbVByaXZhdGUuaAppbmRleCA5ZjFhYjUyYjVjNmRiMjg5OWRi
ZjZhYzc5OTc4Nzg5MTA2MjQ5YzBmLi4zMzE4YWFiNTFjYWNiNGQwOTRmYWYzMzNlOGQ2YjY2ZWYw
Mzc5YmY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9N
ZWRpYVN0cmVhbVByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0
cmVhbS9NZWRpYVN0cmVhbVByaXZhdGUuaApAQCAtNDgsMTEgKzQ4LDYgQEAKICNpbmNsdWRlIDx3
dGYvVmVjdG9yLmg+CiAjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KIAotI2lmIFVTRShHU1RSRUFN
RVIpCi0jaW5jbHVkZSAiR1JlZlB0ckdTdHJlYW1lci5oIgotI2luY2x1ZGUgPG93ci9vd3JfZ3N0
X3ZpZGVvX3JlbmRlcmVyLmg+Ci0jZW5kaWYKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFz
cyBNZWRpYVN0cmVhbTsKQEAgLTExMSwxNiArMTA2LDYgQEAgcHVibGljOgogCiAgICAgdm9pZCBt
b25pdG9yT3JpZW50YXRpb24oT3JpZW50YXRpb25Ob3RpZmllciYpOwogCi0jaWYgVVNFKEdTVFJF
QU1FUikKLSAgICB2b2lkIHNldFZpZGVvUmVuZGVyZXIoT3dyR3N0VmlkZW9SZW5kZXJlciogcmVu
ZGVyZXIsIEdzdEVsZW1lbnQqIHNpbmspIHsgbV9nc3RWaWRlb1JlbmRlcmVyID0gcmVuZGVyZXI7
IG1fZ3N0VmlkZW9TaW5rRWxlbWVudCA9IHNpbms7IH0KLSAgICBHUmVmUHRyPEdzdEVsZW1lbnQ+
IGdldFZpZGVvU2lua0VsZW1lbnQoKSBjb25zdCB7IHJldHVybiBtX2dzdFZpZGVvU2lua0VsZW1l
bnQ7IH0KLSAgICBHUmVmUHRyPE93ckdzdFZpZGVvUmVuZGVyZXI+IGdldFZpZGVvUmVuZGVyZXIo
KSBjb25zdCB7IHJldHVybiBtX2dzdFZpZGVvUmVuZGVyZXI7IH0KLQotcHJpdmF0ZToKLSAgICBH
UmVmUHRyPEdzdEVsZW1lbnQ+IG1fZ3N0VmlkZW9TaW5rRWxlbWVudDsKLSAgICBHUmVmUHRyPE93
ckdzdFZpZGVvUmVuZGVyZXI+IG1fZ3N0VmlkZW9SZW5kZXJlcjsKLSNlbmRpZgotCiBwcml2YXRl
OgogICAgIE1lZGlhU3RyZWFtUHJpdmF0ZShjb25zdCBNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZVZl
Y3RvciYsIFN0cmluZyYmKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWVkaWFzdHJlYW0vUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZU1lZGlhU291cmNlQ2VudGVyLmNwcAppbmRl
eCA3NjNmYjJlZGY2MjA4YTkxYmJkNzA5YWNiZWYxNGE5NTQxM2RiOGI2Li42YWQ5YWZkY2YzZmY2
NWMzNGE4M2RiOWIzYmRlNWExNDMzNTEzYzVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZU1lZGlhU291cmNlQ2VudGVyLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZU1lZGlhU291cmNlQ2Vu
dGVyLmNwcApAQCAtMzUsNiArMzUsMTEgQEAKIAogI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCiAK
Ky8vIEZJWE1FOiBHVEsgdG8gaW1wbGVtZW50IGl0cyBvd24gUmVhbHRpbWVNZWRpYVNvdXJjZUNl
bnRlci4KKyNpZiBQTEFURk9STShHVEspCisjaW5jbHVkZSAiTW9ja1JlYWx0aW1lTWVkaWFTb3Vy
Y2VDZW50ZXIuaCIKKyNlbmRpZgorCiAjaW5jbHVkZSAiQ2FwdHVyZURldmljZU1hbmFnZXIuaCIK
ICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiTWVkaWFTdHJlYW1Qcml2YXRlLmgiCkBA
IC01OSw4ICs2NCwxNCBAQCBSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyJiBSZWFsdGltZU1lZGlh
U291cmNlQ2VudGVyOjpzaW5nbGV0b24oKQogICAgIFJlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXIq
IG92ZXJyaWRlID0gbWVkaWFTdHJlYW1DZW50ZXJPdmVycmlkZSgpOwogICAgIGlmIChvdmVycmlk
ZSkKICAgICAgICAgcmV0dXJuICpvdmVycmlkZTsKLSAgICAKKyNpZiBQTEFURk9STShHVEspCisg
ICAgV1RGTG9nQWx3YXlzKCJXZWJLaXRHVEsgTElCV0VCUlRDIFJlYWx0aW1lTWVkaWFTb3VyY2VD
ZW50ZXIgTk9UIElNUExFTUVOVEVELiBSZXR1cm5pbmcgTW9ja1JlYWx0aW1lTWVkaWFTb3VyY2VD
ZW50ZXIgaW5zdGVhZCB0byBhdm9pZCBjcmFzaCFcbiIpOworICAgIEFTU0VSVChpc01haW5UaHJl
YWQoKSk7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPE1vY2tSZWFsdGltZU1lZGlhU291cmNl
Q2VudGVyPiBjZW50ZXI7CisgICAgcmV0dXJuIGNlbnRlcjsKKyNlbHNlCiAgICAgcmV0dXJuIFJl
YWx0aW1lTWVkaWFTb3VyY2VDZW50ZXI6OnBsYXRmb3JtQ2VudGVyKCk7CisjZW5kaWYKIH0KIAog
dm9pZCBSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyOjpzZXRTaGFyZWRTdHJlYW1DZW50ZXJPdmVy
cmlkZShSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyKiBjZW50ZXIpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9TRFBQcm9jZXNzb3JTY3JpcHRSZXNvdXJj
ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9TRFBQcm9jZXNzb3JT
Y3JpcHRSZXNvdXJjZS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY2OWVkMmE3
NjE1ODE3Mjk3MGMxNDljODMwNGNlMGEzNDJmZjA5NjEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJl
YW0vU0RQUHJvY2Vzc29yU2NyaXB0UmVzb3VyY2UuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNTMg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBFcmljc3NvbiBBQi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqCi0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgot
ICogICAgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZQotICogICAgZGlzdHJpYnV0aW9uLgotICogMy4gTmVpdGhlciB0aGUgbmFtZSBv
ZiBFcmljc3NvbiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwot
ICogICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0g
KiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoV0VCX1JUQykK
LSNpbmNsdWRlICJTRFBQcm9jZXNzb3JTY3JpcHRSZXNvdXJjZS5oIgotCi0jaW5jbHVkZSAiU0RQ
UHJvY2Vzc29yU2NyaXB0c0RhdGEuaCIKLSNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4K
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1uYW1lc3BhY2UgU0RQUHJvY2Vzc29yU2NyaXB0UmVz
b3VyY2UgewotCi1jb25zdCBTdHJpbmcmIHNjcmlwdFN0cmluZygpCi17Ci0gICAgc3RhdGljIE5l
dmVyRGVzdHJveWVkPGNvbnN0IFN0cmluZz4gc2NyaXB0KHNkcEphdmFTY3JpcHQsIHNpemVvZihz
ZHBKYXZhU2NyaXB0KSk7Ci0gICAgcmV0dXJuIHNjcmlwdDsKLX0KLQotfSAvLyBuYW1lc3BhY2Ug
U0RQUHJvY2Vzc29yU2NyaXB0UmVzb3VyY2UKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0j
ZW5kaWYgLy8gRU5BQkxFKFdFQl9SVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tZWRpYXN0cmVhbS9TRFBQcm9jZXNzb3JTY3JpcHRSZXNvdXJjZS5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vU0RQUHJvY2Vzc29yU2NyaXB0UmVzb3VyY2UuaApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2I1NDQzYmIwNzBjZjc3ZjFiNmVlZjMwYzIz
ZTUxMmY2ZDQ1NTQ2NC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9TRFBQcm9jZXNzb3JTY3Jp
cHRSZXNvdXJjZS5oCisrKyAvZGV2L251bGwKQEAgLTEsNTAgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxNSBFcmljc3NvbiBBQi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogICAgaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogICAgZGlz
dHJpYnV0aW9uLgotICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBFcmljc3NvbiBub3IgdGhlIG5h
bWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotICogICAgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwot
ICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9S
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVm
IFNEUFByb2Nlc3NvclNjcmlwdFJlc291cmNlX2gKLSNkZWZpbmUgU0RQUHJvY2Vzc29yU2NyaXB0
UmVzb3VyY2VfaAotCi0jaWYgRU5BQkxFKFdFQl9SVEMpCi0KLSNpbmNsdWRlIDx3dGYvdGV4dC9X
VEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1uYW1lc3BhY2UgU0RQUHJvY2Vz
c29yU2NyaXB0UmVzb3VyY2UgewotCi1jb25zdCBTdHJpbmcmIHNjcmlwdFN0cmluZygpOwotCi19
IC8vIG5hbWVzcGFjZSBTRFBQcm9jZXNzb3JTY3JpcHRSZXNvdXJjZQotCi19IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoV0VCX1JUQykKLQotI2VuZGlmIC8vIFNEUFBy
b2Nlc3NvclNjcmlwdFJlc291cmNlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21lZGlhc3RyZWFtL29wZW53ZWJydGMvTWVkaWFFbmRwb2ludE93ci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9vcGVud2VicnRjL01lZGlhRW5kcG9pbnRPd3Iu
Y3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YTU4NDg2NzI1NDgzYzJkY2UwYTQy
NDRiNGVkZTE1ZmJmYWJkMmU5Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL29wZW53ZWJydGMv
TWVkaWFFbmRwb2ludE93ci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw3NTAgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxNSwgMjAxNiBFcmljc3NvbiBBQi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogICAg
aW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZQotICogICAgZGlzdHJpYnV0aW9uLgotICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBFcmlj
c3NvbiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotICogICAg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoV0VCX1JUQykKLSNpbmNs
dWRlICJNZWRpYUVuZHBvaW50T3dyLmgiCi0KLSNpbmNsdWRlICJNZWRpYUVuZHBvaW50U2Vzc2lv
bkNvbmZpZ3VyYXRpb24uaCIKLSNpbmNsdWRlICJNZWRpYVBheWxvYWQuaCIKLSNpbmNsdWRlICJO
b3RJbXBsZW1lbnRlZC5oIgotI2luY2x1ZGUgIk9wZW5XZWJSVENVdGlsaXRpZXMuaCIKLSNpbmNs
dWRlICJQZWVyQ29ubmVjdGlvblN0YXRlcy5oIgotI2luY2x1ZGUgIlJUQ0RhdGFDaGFubmVsSGFu
ZGxlci5oIgotI2luY2x1ZGUgIlJlYWx0aW1lQXVkaW9Tb3VyY2VPd3IuaCIKLSNpbmNsdWRlICJS
ZWFsdGltZVZpZGVvU291cmNlT3dyLmgiCi0jaW5jbHVkZSA8b3dyL293ci5oPgotI2luY2x1ZGUg
PG93ci9vd3JfYXVkaW9fcGF5bG9hZC5oPgotI2luY2x1ZGUgPG93ci9vd3JfY3J5cHRvX3V0aWxz
Lmg+Ci0jaW5jbHVkZSA8b3dyL293cl9tZWRpYV9zZXNzaW9uLmg+Ci0jaW5jbHVkZSA8b3dyL293
cl90cmFuc3BvcnRfYWdlbnQuaD4KLSNpbmNsdWRlIDxvd3Ivb3dyX3ZpZGVvX3BheWxvYWQuaD4K
LSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQot
c3RhdGljIHZvaWQgZ290Q2FuZGlkYXRlKE93clNlc3Npb24qLCBPd3JDYW5kaWRhdGUqLCBNZWRp
YUVuZHBvaW50T3dyKik7Ci1zdGF0aWMgdm9pZCBjYW5kaWRhdGVHYXRoZXJpbmdEb25lKE93clNl
c3Npb24qLCBNZWRpYUVuZHBvaW50T3dyKik7Ci1zdGF0aWMgdm9pZCBpY2VDb25uZWN0aW9uU3Rh
dGVDaGFuZ2UoT3dyU2Vzc2lvbiosIEdQYXJhbVNwZWMqLCBNZWRpYUVuZHBvaW50T3dyKik7Ci1z
dGF0aWMgdm9pZCBnb3RJbmNvbWluZ1NvdXJjZShPd3JNZWRpYVNlc3Npb24qLCBPd3JNZWRpYVNv
dXJjZSosIE1lZGlhRW5kcG9pbnRPd3IqKTsKLQotc3RhdGljIGNvbnN0IFZlY3RvcjxTdHJpbmc+
IGNhbmRpZGF0ZVR5cGVzID0geyAiaG9zdCIsICJzcmZseCIsICJwcmZseCIsICJyZWxheSIgfTsK
LXN0YXRpYyBjb25zdCBWZWN0b3I8U3RyaW5nPiBjYW5kaWRhdGVUY3BUeXBlcyA9IHsgIiIsICJh
Y3RpdmUiLCAicGFzc2l2ZSIsICJzbyIgfTsKLXN0YXRpYyBjb25zdCBWZWN0b3I8U3RyaW5nPiBj
b2RlY1R5cGVzID0geyAiTk9ORSIsICJQQ01VIiwgIlBDTUEiLCAiT1BVUyIsICJIMjY0IiwgIlZQ
OCIgfTsKLQotc3RhdGljIGNvbnN0IGNoYXIqIGhlbHBlclNlcnZlclJlZ0V4ID0gIih0dXJuc3x0
dXJufHN0dW4pOihbXFx3XFwuXFwtXSt8XFxbW1xcd1xcOl0rXFxdKSg6XFxkKyk/KFxcPy4rKT8i
OwotCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgaGVscGVyU2VydmVyRGVmYXVsdFBvcnQg
PSAzNDc4Owotc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IGNhbmRpZGF0ZURlZmF1bHRQb3J0
ID0gOTsKLQotc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxNZWRpYUVuZHBvaW50PiBjcmVhdGVNZWRp
YUVuZHBvaW50T3dyKE1lZGlhRW5kcG9pbnRDbGllbnQmIGNsaWVudCkKLXsKLSAgICByZXR1cm4g
c3RkOjp1bmlxdWVfcHRyPE1lZGlhRW5kcG9pbnQ+KG5ldyBNZWRpYUVuZHBvaW50T3dyKGNsaWVu
dCkpOwotfQotCi1DcmVhdGVNZWRpYUVuZHBvaW50IE1lZGlhRW5kcG9pbnQ6OmNyZWF0ZSA9IGNy
ZWF0ZU1lZGlhRW5kcG9pbnRPd3I7Ci0KLU1lZGlhRW5kcG9pbnRPd3I6Ok1lZGlhRW5kcG9pbnRP
d3IoTWVkaWFFbmRwb2ludENsaWVudCYgY2xpZW50KQotICAgIDogbV90cmFuc3BvcnRBZ2VudChu
dWxscHRyKQotICAgICwgbV9jbGllbnQoY2xpZW50KQotICAgICwgbV9udW1iZXJPZlJlY2VpdmVQ
cmVwYXJlZFNlc3Npb25zKDApCi0gICAgLCBtX251bWJlck9mU2VuZFByZXBhcmVkU2Vzc2lvbnMo
MCkKLXsKLSAgICBpbml0aWFsaXplT3BlbldlYlJUQygpOwotCi0gICAgR1JlZ2V4Q29tcGlsZUZs
YWdzIGNvbXBpbGVGbGFncyA9IEdfUkVHRVhfSkFWQVNDUklQVF9DT01QQVQ7Ci0gICAgR1JlZ2V4
TWF0Y2hGbGFncyBtYXRjaEZsYWdzID0gc3RhdGljX2Nhc3Q8R1JlZ2V4TWF0Y2hGbGFncz4oMCk7
Ci0gICAgbV9oZWxwZXJTZXJ2ZXJSZWdFeCA9IGdfcmVnZXhfbmV3KGhlbHBlclNlcnZlclJlZ0V4
LCBjb21waWxlRmxhZ3MsIG1hdGNoRmxhZ3MsIG51bGxwdHIpOwotfQotCi1NZWRpYUVuZHBvaW50
T3dyOjp+TWVkaWFFbmRwb2ludE93cigpCi17Ci0gICAgc3RvcCgpOwotCi0gICAgZ19yZWdleF91
bnJlZihtX2hlbHBlclNlcnZlclJlZ0V4KTsKLX0KLQotdm9pZCBNZWRpYUVuZHBvaW50T3dyOjpz
ZXRDb25maWd1cmF0aW9uKE1lZGlhRW5kcG9pbnRDb25maWd1cmF0aW9uJiYgY29uZmlndXJhdGlv
bikKLXsKLSAgICBtX2NvbmZpZ3VyYXRpb24gPSBXVEZNb3ZlKGNvbmZpZ3VyYXRpb24pOwotfQot
Ci1zdGQ6OnVuaXF1ZV9wdHI8UlRDRGF0YUNoYW5uZWxIYW5kbGVyPiBNZWRpYUVuZHBvaW50T3dy
OjpjcmVhdGVEYXRhQ2hhbm5lbEhhbmRsZXIoY29uc3QgU3RyaW5nJiwgY29uc3QgUlRDRGF0YUNo
YW5uZWxJbml0JikKLXsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IGRhdGEgY2hhbm5lbC4KLSAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQotc3RhdGlj
IHZvaWQgY3J5cHRvRGF0YUNhbGxiYWNrKGdjaGFyKiBwcml2YXRlS2V5LCBnY2hhciogY2VydGlm
aWNhdGUsIGdjaGFyKiBmaW5nZXJwcmludCwgZ2NoYXIqIGZpbmdlcnByaW50RnVuY3Rpb24sIGdw
b2ludGVyIGRhdGEpCi17Ci0gICAgTWVkaWFFbmRwb2ludE93ciogbWVkaWFFbmRwb2ludCA9IChN
ZWRpYUVuZHBvaW50T3dyKikgZGF0YTsKLSAgICBtZWRpYUVuZHBvaW50LT5kaXNwYXRjaER0bHNG
aW5nZXJwcmludChnX3N0cmR1cChwcml2YXRlS2V5KSwgZ19zdHJkdXAoY2VydGlmaWNhdGUpLCBT
dHJpbmcoZmluZ2VycHJpbnQpLCBTdHJpbmcoZmluZ2VycHJpbnRGdW5jdGlvbikpOwotfQotCi12
b2lkIE1lZGlhRW5kcG9pbnRPd3I6OmdlbmVyYXRlRHRsc0luZm8oKQotewotICAgIG93cl9jcnlw
dG9fY3JlYXRlX2NyeXB0b19kYXRhKGNyeXB0b0RhdGFDYWxsYmFjaywgdGhpcyk7Ci19Ci0KLU1l
ZGlhUGF5bG9hZFZlY3RvciBNZWRpYUVuZHBvaW50T3dyOjpnZXREZWZhdWx0QXVkaW9QYXlsb2Fk
cygpCi17Ci0gICAgTWVkaWFQYXlsb2FkVmVjdG9yIHBheWxvYWRzOwotCi0gICAgLy8gRklYTUU6
IFRoaXMgbGlzdCBzaG91bGQgYmUgYmFzZWQgb24gd2hhdCBpcyBhdmFpbGFibGUgaW4gdGhlIHBs
YXRmb3JtIChidWc6IGh0dHA6Ly93ZWJraXQub3JnL2IvMTYzNzIzKQotICAgIE1lZGlhUGF5bG9h
ZCBwYXlsb2FkMTsKLSAgICBwYXlsb2FkMS50eXBlID0gMTExOwotICAgIHBheWxvYWQxLmVuY29k
aW5nTmFtZSA9ICJPUFVTIjsKLSAgICBwYXlsb2FkMS5jbG9ja1JhdGUgPSA0ODAwMDsKLSAgICBw
YXlsb2FkMS5jaGFubmVscyA9IDI7Ci0gICAgcGF5bG9hZHMuYXBwZW5kKFdURk1vdmUocGF5bG9h
ZDEpKTsKLQotICAgIE1lZGlhUGF5bG9hZCBwYXlsb2FkMjsKLSAgICBwYXlsb2FkMi50eXBlID0g
ODsKLSAgICBwYXlsb2FkMi5lbmNvZGluZ05hbWUgPSAiUENNQSI7Ci0gICAgcGF5bG9hZDIuY2xv
Y2tSYXRlID0gODAwMDsKLSAgICBwYXlsb2FkMi5jaGFubmVscyA9IDE7Ci0gICAgcGF5bG9hZHMu
YXBwZW5kKFdURk1vdmUocGF5bG9hZDIpKTsKLQotICAgIE1lZGlhUGF5bG9hZCBwYXlsb2FkMzsK
LSAgICBwYXlsb2FkMy50eXBlID0gMDsKLSAgICBwYXlsb2FkMy5lbmNvZGluZ05hbWUgPSAiUENN
VSI7Ci0gICAgcGF5bG9hZDMuY2xvY2tSYXRlID0gODAwMDsKLSAgICBwYXlsb2FkMy5jaGFubmVs
cyA9IDE7Ci0gICAgcGF5bG9hZHMuYXBwZW5kKFdURk1vdmUocGF5bG9hZDMpKTsKLQotICAgIHJl
dHVybiBwYXlsb2FkczsKLX0KLQotTWVkaWFQYXlsb2FkVmVjdG9yIE1lZGlhRW5kcG9pbnRPd3I6
OmdldERlZmF1bHRWaWRlb1BheWxvYWRzKCkKLXsKLSAgICBNZWRpYVBheWxvYWRWZWN0b3IgcGF5
bG9hZHM7Ci0KLSAgICAvLyBGSVhNRTogVGhpcyBsaXN0IHNob3VsZCBiZSBiYXNlZCBvbiB3aGF0
IGlzIGF2YWlsYWJsZSBpbiB0aGUgcGxhdGZvcm0gKGJ1ZzogaHR0cDovL3dlYmtpdC5vcmcvYi8x
NjM3MjMpCi0gICAgTWVkaWFQYXlsb2FkIHBheWxvYWQxOwotICAgIHBheWxvYWQxLnR5cGUgPSAx
MDM7Ci0gICAgcGF5bG9hZDEuZW5jb2RpbmdOYW1lID0gIkgyNjQiOwotICAgIHBheWxvYWQxLmNs
b2NrUmF0ZSA9IDkwMDAwOwotICAgIHBheWxvYWQxLmNjbWZpciA9IHRydWU7Ci0gICAgcGF5bG9h
ZDEubmFja3BsaSA9IHRydWU7Ci0gICAgcGF5bG9hZDEuYWRkUGFyYW1ldGVyKCJwYWNrZXRpemF0
aW9uTW9kZSIsIDEpOwotICAgIHBheWxvYWRzLmFwcGVuZChXVEZNb3ZlKHBheWxvYWQxKSk7Ci0K
LSAgICBNZWRpYVBheWxvYWQgcGF5bG9hZDI7Ci0gICAgcGF5bG9hZDIudHlwZSA9IDEwMDsKLSAg
ICBwYXlsb2FkMi5lbmNvZGluZ05hbWUgPSAiVlA4IjsKLSAgICBwYXlsb2FkMi5jbG9ja1JhdGUg
PSA5MDAwMDsKLSAgICBwYXlsb2FkMi5jY21maXIgPSB0cnVlOwotICAgIHBheWxvYWQyLm5hY2tw
bGkgPSB0cnVlOwotICAgIHBheWxvYWQyLm5hY2sgPSB0cnVlOwotICAgIHBheWxvYWRzLmFwcGVu
ZChXVEZNb3ZlKHBheWxvYWQyKSk7Ci0KLSAgICBNZWRpYVBheWxvYWQgcGF5bG9hZDM7Ci0gICAg
cGF5bG9hZDMudHlwZSA9IDEyMDsKLSAgICBwYXlsb2FkMy5lbmNvZGluZ05hbWUgPSAiUlRYIjsK
LSAgICBwYXlsb2FkMy5jbG9ja1JhdGUgPSA5MDAwMDsKLSAgICBwYXlsb2FkMy5hZGRQYXJhbWV0
ZXIoImFwdCIsIDEwMCk7Ci0gICAgcGF5bG9hZDMuYWRkUGFyYW1ldGVyKCJydHhUaW1lIiwgMjAw
KTsKLSAgICBwYXlsb2Fkcy5hcHBlbmQoV1RGTW92ZShwYXlsb2FkMykpOwotCi0gICAgcmV0dXJu
IHBheWxvYWRzOwotfQotCi1zdGF0aWMgYm9vbCBwYXlsb2Fkc0NvbnRhaW5UeXBlKGNvbnN0IFZl
Y3Rvcjxjb25zdCBNZWRpYVBheWxvYWQqPiYgcGF5bG9hZHMsIHVuc2lnbmVkIHBheWxvYWRUeXBl
KQotewotICAgIGZvciAoYXV0byBwYXlsb2FkIDogcGF5bG9hZHMpIHsKLSAgICAgICAgQVNTRVJU
KHBheWxvYWQpOwotICAgICAgICBpZiAocGF5bG9hZC0+dHlwZSA9PSBwYXlsb2FkVHlwZSkKLSAg
ICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLU1l
ZGlhUGF5bG9hZFZlY3RvciBNZWRpYUVuZHBvaW50T3dyOjpmaWx0ZXJQYXlsb2Fkcyhjb25zdCBN
ZWRpYVBheWxvYWRWZWN0b3ImIHJlbW90ZVBheWxvYWRzLCBjb25zdCBNZWRpYVBheWxvYWRWZWN0
b3ImIGRlZmF1bHRQYXlsb2FkcykKLXsKLSAgICBWZWN0b3I8Y29uc3QgTWVkaWFQYXlsb2FkKj4g
ZmlsdGVyZWRQYXlsb2FkczsKLQotICAgIGZvciAoYXV0byYgcmVtb3RlUGF5bG9hZCA6IHJlbW90
ZVBheWxvYWRzKSB7Ci0gICAgICAgIGNvbnN0IE1lZGlhUGF5bG9hZCogZGVmYXVsdFBheWxvYWQg
PSBudWxscHRyOwotICAgICAgICBmb3IgKGF1dG8mIHAgOiBkZWZhdWx0UGF5bG9hZHMpIHsKLSAg
ICAgICAgICAgIGlmIChwLmVuY29kaW5nTmFtZSA9PSByZW1vdGVQYXlsb2FkLmVuY29kaW5nTmFt
ZS5jb252ZXJ0VG9BU0NJSVVwcGVyY2FzZSgpKSB7Ci0gICAgICAgICAgICAgICAgZGVmYXVsdFBh
eWxvYWQgPSAmcDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotICAgICAgICBpZiAoIWRlZmF1bHRQYXlsb2FkKQotICAgICAgICAgICAgY29udGludWU7
Ci0KLSAgICAgICAgaWYgKGRlZmF1bHRQYXlsb2FkLT5wYXJhbWV0ZXJzLmNvbnRhaW5zKCJwYWNr
ZXRpemF0aW9uTW9kZSIpICYmIHJlbW90ZVBheWxvYWQucGFyYW1ldGVycy5jb250YWlucygicGFj
a2V0aXphdGlvbk1vZGUiKQotICAgICAgICAgICAgJiYgKGRlZmF1bHRQYXlsb2FkLT5wYXJhbWV0
ZXJzLmdldCgicGFja2V0aXphdGlvbk1vZGUiKSAhPSBkZWZhdWx0UGF5bG9hZC0+cGFyYW1ldGVy
cy5nZXQoInBhY2tldGl6YXRpb25Nb2RlIikpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAg
ICAgICAgZmlsdGVyZWRQYXlsb2Fkcy5hcHBlbmQoJnJlbW90ZVBheWxvYWQpOwotICAgIH0KLQot
ICAgIE1lZGlhUGF5bG9hZFZlY3RvciBmaWx0ZXJlZEFwdFBheWxvYWRzOwotCi0gICAgZm9yIChh
dXRvIGZpbHRlcmVkUGF5bG9hZCA6IGZpbHRlcmVkUGF5bG9hZHMpIHsKLSAgICAgICAgaWYgKGZp
bHRlcmVkUGF5bG9hZC0+cGFyYW1ldGVycy5jb250YWlucygiYXB0IikgJiYgKCFwYXlsb2Fkc0Nv
bnRhaW5UeXBlKGZpbHRlcmVkUGF5bG9hZHMsIGZpbHRlcmVkUGF5bG9hZC0+cGFyYW1ldGVycy5n
ZXQoImFwdCIpKSkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgZmlsdGVyZWRBcHRQ
YXlsb2Fkcy5hcHBlbmQoKmZpbHRlcmVkUGF5bG9hZCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZp
bHRlcmVkQXB0UGF5bG9hZHM7Ci19Ci0KLU1lZGlhRW5kcG9pbnQ6OlVwZGF0ZVJlc3VsdCBNZWRp
YUVuZHBvaW50T3dyOjp1cGRhdGVSZWNlaXZlQ29uZmlndXJhdGlvbihNZWRpYUVuZHBvaW50U2Vz
c2lvbkNvbmZpZ3VyYXRpb24qIGNvbmZpZ3VyYXRpb24sIGJvb2wgaXNJbml0aWF0b3IpCi17Ci0g
ICAgVmVjdG9yPFRyYW5zY2VpdmVyQ29uZmlnPiB0cmFuc2NlaXZlckNvbmZpZ3M7Ci0gICAgZm9y
ICh1bnNpZ25lZCBpID0gbV90cmFuc2NlaXZlcnMuc2l6ZSgpOyBpIDwgY29uZmlndXJhdGlvbi0+
bWVkaWFEZXNjcmlwdGlvbnMoKS5zaXplKCk7ICsraSkgewotICAgICAgICBUcmFuc2NlaXZlckNv
bmZpZyBjb25maWc7Ci0gICAgICAgIGNvbmZpZy50eXBlID0gU2Vzc2lvblR5cGVNZWRpYTsKLSAg
ICAgICAgY29uZmlnLmlzRHRsc0NsaWVudCA9IGNvbmZpZ3VyYXRpb24tPm1lZGlhRGVzY3JpcHRp
b25zKClbaV0uZHRsc1NldHVwID09ICJhY3RpdmUiOwotICAgICAgICBjb25maWcubWlkID0gY29u
ZmlndXJhdGlvbi0+bWVkaWFEZXNjcmlwdGlvbnMoKVtpXS5taWQ7Ci0gICAgICAgIHRyYW5zY2Vp
dmVyQ29uZmlncy5hcHBlbmQoV1RGTW92ZShjb25maWcpKTsKLSAgICB9Ci0KLSAgICBlbnN1cmVU
cmFuc3BvcnRBZ2VudEFuZFRyYW5zY2VpdmVycyhpc0luaXRpYXRvciwgdHJhbnNjZWl2ZXJDb25m
aWdzKTsKLQotICAgIC8vIFByZXBhcmUgdGhlIG5ldyBzZXNzaW9ucy4KLSAgICBmb3IgKHVuc2ln
bmVkIGkgPSBtX251bWJlck9mUmVjZWl2ZVByZXBhcmVkU2Vzc2lvbnM7IGkgPCBtX3RyYW5zY2Vp
dmVycy5zaXplKCk7ICsraSkgewotICAgICAgICBPd3JTZXNzaW9uKiBzZXNzaW9uID0gbV90cmFu
c2NlaXZlcnNbaV0tPnNlc3Npb24oKTsKLSAgICAgICAgcHJlcGFyZU1lZGlhU2Vzc2lvbihPV1Jf
TUVESUFfU0VTU0lPTihzZXNzaW9uKSwgJmNvbmZpZ3VyYXRpb24tPm1lZGlhRGVzY3JpcHRpb25z
KClbaV0sIGlzSW5pdGlhdG9yKTsKLSAgICAgICAgb3dyX3RyYW5zcG9ydF9hZ2VudF9hZGRfc2Vz
c2lvbihtX3RyYW5zcG9ydEFnZW50LCBzZXNzaW9uKTsKLSAgICB9Ci0KLSAgICBvd3JfdHJhbnNw
b3J0X2FnZW50X3N0YXJ0KG1fdHJhbnNwb3J0QWdlbnQpOwotICAgIG1fbnVtYmVyT2ZSZWNlaXZl
UHJlcGFyZWRTZXNzaW9ucyA9IG1fdHJhbnNjZWl2ZXJzLnNpemUoKTsKLQotICAgIHJldHVybiBV
cGRhdGVSZXN1bHQ6OlN1Y2Nlc3M7Ci19Ci0KLXN0YXRpYyBjb25zdCBNZWRpYVBheWxvYWQqIGZp
bmRSdHhQYXlsb2FkKGNvbnN0IE1lZGlhUGF5bG9hZFZlY3RvciYgcGF5bG9hZHMsIHVuc2lnbmVk
IGFwdCkKLXsKLSAgICBmb3IgKGF1dG8mIHBheWxvYWQgOiBwYXlsb2FkcykgewotICAgICAgICBp
ZiAocGF5bG9hZC5lbmNvZGluZ05hbWUuY29udmVydFRvQVNDSUlVcHBlcmNhc2UoKSA9PSAiUlRY
IiAmJiBwYXlsb2FkLnBhcmFtZXRlcnMuY29udGFpbnMoImFwdCIpCi0gICAgICAgICAgICAmJiAo
cGF5bG9hZC5wYXJhbWV0ZXJzLmdldCgiYXB0IikgPT0gYXB0KSkKLSAgICAgICAgICAgIHJldHVy
biAmcGF5bG9hZDsKLSAgICB9Ci0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLU1lZGlhRW5kcG9p
bnQ6OlVwZGF0ZVJlc3VsdCBNZWRpYUVuZHBvaW50T3dyOjp1cGRhdGVTZW5kQ29uZmlndXJhdGlv
bihNZWRpYUVuZHBvaW50U2Vzc2lvbkNvbmZpZ3VyYXRpb24qIGNvbmZpZ3VyYXRpb24sIGNvbnN0
IFJlYWx0aW1lTWVkaWFTb3VyY2VNYXAmIHNlbmRTb3VyY2VNYXAsIGJvb2wgaXNJbml0aWF0b3Ip
Ci17Ci0gICAgVmVjdG9yPFRyYW5zY2VpdmVyQ29uZmlnPiB0cmFuc2NlaXZlckNvbmZpZ3M7Ci0g
ICAgZm9yICh1bnNpZ25lZCBpID0gbV90cmFuc2NlaXZlcnMuc2l6ZSgpOyBpIDwgY29uZmlndXJh
dGlvbi0+bWVkaWFEZXNjcmlwdGlvbnMoKS5zaXplKCk7ICsraSkgewotICAgICAgICBUcmFuc2Nl
aXZlckNvbmZpZyBjb25maWc7Ci0gICAgICAgIGNvbmZpZy50eXBlID0gU2Vzc2lvblR5cGVNZWRp
YTsKLSAgICAgICAgY29uZmlnLmlzRHRsc0NsaWVudCA9IGNvbmZpZ3VyYXRpb24tPm1lZGlhRGVz
Y3JpcHRpb25zKClbaV0uZHRsc1NldHVwICE9ICJhY3RpdmUiOwotICAgICAgICBjb25maWcubWlk
ID0gY29uZmlndXJhdGlvbi0+bWVkaWFEZXNjcmlwdGlvbnMoKVtpXS5taWQ7Ci0gICAgICAgIHRy
YW5zY2VpdmVyQ29uZmlncy5hcHBlbmQoV1RGTW92ZShjb25maWcpKTsKLSAgICB9Ci0KLSAgICBl
bnN1cmVUcmFuc3BvcnRBZ2VudEFuZFRyYW5zY2VpdmVycyhpc0luaXRpYXRvciwgdHJhbnNjZWl2
ZXJDb25maWdzKTsKLQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3RyYW5zY2VpdmVy
cy5zaXplKCk7ICsraSkgewotICAgICAgICBhdXRvKiBzZXNzaW9uID0gbV90cmFuc2NlaXZlcnNb
aV0tPnNlc3Npb24oKTsKLSAgICAgICAgYXV0byYgbWRlc2MgPSBjb25maWd1cmF0aW9uLT5tZWRp
YURlc2NyaXB0aW9ucygpW2ldOwotCi0gICAgICAgIGlmIChtZGVzYy50eXBlID09ICJhdWRpbyIg
fHwgbWRlc2MudHlwZSA9PSAidmlkZW8iKQotICAgICAgICAgICAgZ19vYmplY3Rfc2V0KHNlc3Np
b24sICJydGNwLW11eCIsIG1kZXNjLnJ0Y3BNdXgsIG51bGxwdHIpOwotCi0gICAgICAgIGlmICht
ZGVzYy5pY2VDYW5kaWRhdGVzLnNpemUoKSkgewotICAgICAgICAgICAgZm9yIChhdXRvJiBjYW5k
aWRhdGUgOiBtZGVzYy5pY2VDYW5kaWRhdGVzKQotICAgICAgICAgICAgICAgIGludGVybmFsQWRk
UmVtb3RlQ2FuZGlkYXRlKHNlc3Npb24sIGNhbmRpZGF0ZSwgbWRlc2MuaWNlVWZyYWcsIG1kZXNj
LmljZVBhc3N3b3JkKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChpIDwgbV9udW1iZXJPZlNl
bmRQcmVwYXJlZFNlc3Npb25zKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgaWYg
KCFzZW5kU291cmNlTWFwLmNvbnRhaW5zKG1kZXNjLm1pZCkpCi0gICAgICAgICAgICBjb250aW51
ZTsKLQotICAgICAgICBjb25zdCBNZWRpYVBheWxvYWQqIHBheWxvYWQgPSBudWxscHRyOwotICAg
ICAgICBmb3IgKGF1dG8mIHAgOiBtZGVzYy5wYXlsb2FkcykgewotICAgICAgICAgICAgaWYgKHAu
ZW5jb2RpbmdOYW1lLmNvbnZlcnRUb0FTQ0lJVXBwZXJjYXNlKCkgIT0gIlJUWCIpIHsKLSAgICAg
ICAgICAgICAgICBwYXlsb2FkID0gJnA7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIXBheWxvYWQpCi0gICAgICAgICAgICBy
ZXR1cm4gVXBkYXRlUmVzdWx0OjpGYWlsZWQ7Ci0KLSAgICAgICAgYXV0byogcnR4UGF5bG9hZCA9
IGZpbmRSdHhQYXlsb2FkKG1kZXNjLnBheWxvYWRzLCBwYXlsb2FkLT50eXBlKTsKLSAgICAgICAg
YXV0byogc291cmNlID0gc3RhdGljX2Nhc3Q8UmVhbHRpbWVNZWRpYVNvdXJjZU93cio+KHNlbmRT
b3VyY2VNYXAuZ2V0KG1kZXNjLm1pZCkpOwotCi0gICAgICAgIEFTU0VSVChjb2RlY1R5cGVzLmZp
bmQocGF5bG9hZC0+ZW5jb2RpbmdOYW1lLmNvbnZlcnRUb0FTQ0lJVXBwZXJjYXNlKCkpICE9IG5v
dEZvdW5kKTsKLSAgICAgICAgYXV0byBjb2RlY1R5cGUgPSBzdGF0aWNfY2FzdDxPd3JDb2RlY1R5
cGU+KGNvZGVjVHlwZXMuZmluZChwYXlsb2FkLT5lbmNvZGluZ05hbWUuY29udmVydFRvQVNDSUlV
cHBlcmNhc2UoKSkpOwotCi0gICAgICAgIE93clBheWxvYWQqIHNlbmRQYXlsb2FkOwotICAgICAg
ICBpZiAobWRlc2MudHlwZSA9PSAiYXVkaW8iKQotICAgICAgICAgICAgc2VuZFBheWxvYWQgPSBv
d3JfYXVkaW9fcGF5bG9hZF9uZXcoY29kZWNUeXBlLCBwYXlsb2FkLT50eXBlLCBwYXlsb2FkLT5j
bG9ja1JhdGUsIHBheWxvYWQtPmNoYW5uZWxzKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAg
ICBzZW5kUGF5bG9hZCA9IG93cl92aWRlb19wYXlsb2FkX25ldyhjb2RlY1R5cGUsIHBheWxvYWQt
PnR5cGUsIHBheWxvYWQtPmNsb2NrUmF0ZSwgcGF5bG9hZC0+Y2NtZmlyLCBwYXlsb2FkLT5uYWNr
cGxpKTsKLSAgICAgICAgICAgIGdfb2JqZWN0X3NldChzZW5kUGF5bG9hZCwgInJ0eC1wYXlsb2Fk
LXR5cGUiLCBydHhQYXlsb2FkID8gcnR4UGF5bG9hZC0+dHlwZSA6IC0xLAotICAgICAgICAgICAg
ICAgICJydHgtdGltZSIsIHJ0eFBheWxvYWQgJiYgcnR4UGF5bG9hZC0+cGFyYW1ldGVycy5jb250
YWlucygicnR4VGltZSIpID8gcnR4UGF5bG9hZC0+cGFyYW1ldGVycy5nZXQoInJ0eFRpbWUiKSA6
IDAsIG51bGxwdHIpOwotICAgICAgICB9Ci0KLSAgICAgICAgb3dyX21lZGlhX3Nlc3Npb25fc2V0
X3NlbmRfcGF5bG9hZChPV1JfTUVESUFfU0VTU0lPTihzZXNzaW9uKSwgc2VuZFBheWxvYWQpOwot
ICAgICAgICBvd3JfbWVkaWFfc2Vzc2lvbl9zZXRfc2VuZF9zb3VyY2UoT1dSX01FRElBX1NFU1NJ
T04oc2Vzc2lvbiksIHNvdXJjZS0+bWVkaWFTb3VyY2UoKSk7Ci0KLSAgICAgICAgLy8gRklYTUU6
IFN1cHBvcnQgZm9yIGdyb3VwLXNzcmMgU0RQIGxpbmUgaXMgbWlzc2luZy4KLSAgICAgICAgY29u
c3QgVmVjdG9yPHVuc2lnbmVkPiByZWNlaXZlU3NyY3MgPSBtZGVzYy5zc3JjczsKLSAgICAgICAg
aWYgKHJlY2VpdmVTc3Jjcy5zaXplKCkpIHsKLSAgICAgICAgICAgIGdfb2JqZWN0X3NldChzZXNz
aW9uLCAicmVjZWl2ZS1zc3JjIiwgcmVjZWl2ZVNzcmNzWzBdLCBudWxscHRyKTsKLSAgICAgICAg
ICAgIGlmIChyZWNlaXZlU3NyY3Muc2l6ZSgpID09IDIpCi0gICAgICAgICAgICAgICAgZ19vYmpl
Y3Rfc2V0KHNlc3Npb24sICJyZWNlaXZlLXJ0eC1zc3JjIiwgcmVjZWl2ZVNzcmNzWzFdLCBudWxs
cHRyKTsKLSAgICAgICAgfQotCi0gICAgICAgIG1fbnVtYmVyT2ZTZW5kUHJlcGFyZWRTZXNzaW9u
cyA9IGkgKyAxOwotICAgIH0KLQotICAgIHJldHVybiBVcGRhdGVSZXN1bHQ6OlN1Y2Nlc3M7Ci19
Ci0KLXZvaWQgTWVkaWFFbmRwb2ludE93cjo6YWRkUmVtb3RlQ2FuZGlkYXRlKGNvbnN0IEljZUNh
bmRpZGF0ZSYgY2FuZGlkYXRlLCBjb25zdCBTdHJpbmcmIG1pZCwgY29uc3QgU3RyaW5nJiB1ZnJh
ZywgY29uc3QgU3RyaW5nJiBwYXNzd29yZCkKLXsKLSAgICBmb3IgKGF1dG8mIHRyYW5zY2VpdmVy
IDogbV90cmFuc2NlaXZlcnMpIHsKLSAgICAgICAgaWYgKHRyYW5zY2VpdmVyLT5taWQoKSA9PSBt
aWQpIHsKLSAgICAgICAgICAgIGludGVybmFsQWRkUmVtb3RlQ2FuZGlkYXRlKHRyYW5zY2VpdmVy
LT5zZXNzaW9uKCksIGNhbmRpZGF0ZSwgdWZyYWcsIHBhc3N3b3JkKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIE1lZGlhRW5kcG9pbnRPd3I6OnJlcGxh
Y2VNdXRlZFJlbW90ZVNvdXJjZU1pZChjb25zdCBTdHJpbmcmIG9sZE1pZCwgY29uc3QgU3RyaW5n
JiBuZXdNaWQpCi17Ci0gICAgUmVmUHRyPFJlYWx0aW1lTWVkaWFTb3VyY2VPd3I+IHJlbW90ZVNv
dXJjZSA9IG1fbXV0ZWRSZW1vdGVTb3VyY2VzLnRha2Uob2xkTWlkKTsKLSAgICBtX211dGVkUmVt
b3RlU291cmNlcy5zZXQobmV3TWlkLCByZW1vdGVTb3VyY2UpOwotfQotCi1SZWY8UmVhbHRpbWVN
ZWRpYVNvdXJjZT4gTWVkaWFFbmRwb2ludE93cjo6Y3JlYXRlTXV0ZWRSZW1vdGVTb3VyY2UoY29u
c3QgU3RyaW5nJiBtaWQsIFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGUgdHlwZSkKLXsKLSAgICBT
dHJpbmcgbmFtZTsKLSAgICBTdHJpbmcgaWQoIm5vdCB1c2VkIik7Ci0gICAgUmVmUHRyPFJlYWx0
aW1lTWVkaWFTb3VyY2VPd3I+IHNvdXJjZTsKLQotICAgIHN3aXRjaCAodHlwZSkgewotICAgIGNh
c2UgUmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlwZTo6QXVkaW86Ci0gICAgICAgIG5hbWUgPSAicmVt
b3RlIGF1ZGlvIjsKLSAgICAgICAgc291cmNlID0gYWRvcHRSZWYobmV3IFJlYWx0aW1lQXVkaW9T
b3VyY2VPd3IobnVsbHB0ciwgaWQsIHR5cGUsIG5hbWUpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBSZWFsdGltZU1lZGlhU291cmNlOjpUeXBlOjpWaWRlbzoKLSAgICAgICAgbmFtZSA9ICJy
ZW1vdGUgdmlkZW8iOwotICAgICAgICBzb3VyY2UgPSBhZG9wdFJlZihuZXcgUmVhbHRpbWVWaWRl
b1NvdXJjZU93cihudWxscHRyLCBpZCwgdHlwZSwgbmFtZSkpOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGU6Ok5vbmU6Ci0gICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwotICAgIH0KLQotICAgIG1fbXV0ZWRSZW1vdGVTb3VyY2VzLnNldChtaWQs
IHNvdXJjZSk7Ci0KLSAgICByZXR1cm4gKnNvdXJjZTsKLX0KLQotdm9pZCBNZWRpYUVuZHBvaW50
T3dyOjpyZXBsYWNlU2VuZFNvdXJjZShSZWFsdGltZU1lZGlhU291cmNlJiBuZXdTb3VyY2UsIGNv
bnN0IFN0cmluZyYgbWlkKQotewotICAgIFVOVVNFRF9QQVJBTShuZXdTb3VyY2UpOwotICAgIFVO
VVNFRF9QQVJBTShtaWQpOwotCi0gICAgLy8gRklYTUU6IFdlIHdhbnQgdG8gdXNlIG93cl9tZWRp
YV9zZXNzaW9uX3NldF9zZW5kX3NvdXJjZSBoZXJlLCBidXQgaXQgZG9lc24ndCB3b3JrIGFzIGlu
dGVuZGVkLgotICAgIC8vIElzc3VlIHRyYWNrZWQgYnkgT3BlbldlYlJUQyBidWc6IGh0dHBzOi8v
Z2l0aHViLmNvbS9Fcmljc3NvblJlc2VhcmNoL29wZW53ZWJydGMvaXNzdWVzLzUzMwotCi0gICAg
bm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBNZWRpYUVuZHBvaW50T3dyOjpzdG9wKCkKLXsK
LSAgICBpZiAoIW1fdHJhbnNwb3J0QWdlbnQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGZvciAo
YXV0byYgdHJhbnNjZWl2ZXIgOiBtX3RyYW5zY2VpdmVycykKLSAgICAgICAgb3dyX21lZGlhX3Nl
c3Npb25fc2V0X3NlbmRfc291cmNlKE9XUl9NRURJQV9TRVNTSU9OKHRyYW5zY2VpdmVyLT5zZXNz
aW9uKCkpLCBudWxscHRyKTsKLQotICAgIGdfb2JqZWN0X3VucmVmKG1fdHJhbnNwb3J0QWdlbnQp
OwotICAgIG1fdHJhbnNwb3J0QWdlbnQgPSBudWxscHRyOwotfQotCi1zaXplX3QgTWVkaWFFbmRw
b2ludE93cjo6dHJhbnNjZWl2ZXJJbmRleEZvclNlc3Npb24oT3dyU2Vzc2lvbiogc2Vzc2lvbikg
Y29uc3QKLXsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV90cmFuc2NlaXZlcnMuc2l6
ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKG1fdHJhbnNjZWl2ZXJzW2ldLT5zZXNzaW9uKCkgPT0g
c2Vzc2lvbikKLSAgICAgICAgICAgIHJldHVybiBpOwotICAgIH0KLQotICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgIHJldHVybiBub3RGb3VuZDsKLX0KLQotY29uc3QgU3RyaW5nJiBNZWRp
YUVuZHBvaW50T3dyOjpzZXNzaW9uTWlkKE93clNlc3Npb24qIHNlc3Npb24pIGNvbnN0Ci17Ci0g
ICAgc2l6ZV90IGluZGV4ID0gdHJhbnNjZWl2ZXJJbmRleEZvclNlc3Npb24oc2Vzc2lvbik7Ci0g
ICAgcmV0dXJuIG1fdHJhbnNjZWl2ZXJzW2luZGV4XS0+bWlkKCk7Ci19Ci0KLU93clRyYW5zY2Vp
dmVyKiBNZWRpYUVuZHBvaW50T3dyOjptYXRjaFRyYW5zY2VpdmVyQnlNaWQoY29uc3QgU3RyaW5n
JiBtaWQpIGNvbnN0Ci17Ci0gICAgZm9yIChhdXRvJiB0cmFuc2NlaXZlciA6IG1fdHJhbnNjZWl2
ZXJzKSB7Ci0gICAgICAgIGlmICh0cmFuc2NlaXZlci0+bWlkKCkgPT0gbWlkKQotICAgICAgICAg
ICAgcmV0dXJuIHRyYW5zY2VpdmVyLmdldCgpOwotICAgIH0KLSAgICByZXR1cm4gbnVsbHB0cjsK
LX0KLQotdm9pZCBNZWRpYUVuZHBvaW50T3dyOjpkaXNwYXRjaE5ld0ljZUNhbmRpZGF0ZShjb25z
dCBTdHJpbmcmIG1pZCwgSWNlQ2FuZGlkYXRlJiYgaWNlQ2FuZGlkYXRlKQotewotICAgIG1fY2xp
ZW50LmdvdEljZUNhbmRpZGF0ZShtaWQsIFdURk1vdmUoaWNlQ2FuZGlkYXRlKSk7Ci19Ci0KLXZv
aWQgTWVkaWFFbmRwb2ludE93cjo6ZGlzcGF0Y2hHYXRoZXJpbmdEb25lKGNvbnN0IFN0cmluZyYg
bWlkKQotewotICAgIG1fY2xpZW50LmRvbmVHYXRoZXJpbmdDYW5kaWRhdGVzKG1pZCk7Ci19Ci0K
LXZvaWQgTWVkaWFFbmRwb2ludE93cjo6cHJvY2Vzc0ljZVRyYW5zcG9ydFN0YXRlQ2hhbmdlKE93
clNlc3Npb24qIHNlc3Npb24pCi17Ci0gICAgT3dySWNlU3RhdGUgb3dySWNlU3RhdGU7Ci0gICAg
Z19vYmplY3RfZ2V0KHNlc3Npb24sICJpY2UtY29ubmVjdGlvbi1zdGF0ZSIsICZvd3JJY2VTdGF0
ZSwgbnVsbHB0cik7Ci0KLSAgICBPd3JUcmFuc2NlaXZlciYgdHJhbnNjZWl2ZXIgPSAqbV90cmFu
c2NlaXZlcnNbdHJhbnNjZWl2ZXJJbmRleEZvclNlc3Npb24oc2Vzc2lvbildOwotICAgIGlmIChv
d3JJY2VTdGF0ZSA8IHRyYW5zY2VpdmVyLm93ckljZVN0YXRlKCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIHRyYW5zY2VpdmVyLnNldE93ckljZVN0YXRlKG93ckljZVN0YXRlKTsKLQotICAgIC8v
IFdlIGNhbm5vdCBnbyB0byBDb21wbGV0ZWQgaWYgdGhlcmUgbWF5IGJlIG1vcmUgcmVtb3RlIGNh
bmRpZGF0ZXMuCi0gICAgaWYgKG93ckljZVN0YXRlID09IE9XUl9JQ0VfU1RBVEVfUkVBRFkgJiYg
IXRyYW5zY2VpdmVyLmdvdEVuZE9mUmVtb3RlQ2FuZGlkYXRlcygpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBSVENJY2VUcmFuc3BvcnRTdGF0ZSB0cmFuc3BvcnRTdGF0ZTsKLSAgICBzd2l0Y2gg
KG93ckljZVN0YXRlKSB7Ci0gICAgY2FzZSBPV1JfSUNFX1NUQVRFX0NPTk5FQ1RJTkc6Ci0gICAg
ICAgIHRyYW5zcG9ydFN0YXRlID0gUlRDSWNlVHJhbnNwb3J0U3RhdGU6OkNoZWNraW5nOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIE9XUl9JQ0VfU1RBVEVfQ09OTkVDVEVEOgotICAgICAgICB0
cmFuc3BvcnRTdGF0ZSA9IFJUQ0ljZVRyYW5zcG9ydFN0YXRlOjpDb25uZWN0ZWQ7Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgT1dSX0lDRV9TVEFURV9SRUFEWToKLSAgICAgICAgdHJhbnNwb3J0
U3RhdGUgPSBSVENJY2VUcmFuc3BvcnRTdGF0ZTo6Q29tcGxldGVkOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIE9XUl9JQ0VfU1RBVEVfRkFJTEVEOgotICAgICAgICB0cmFuc3BvcnRTdGF0ZSA9
IFJUQ0ljZVRyYW5zcG9ydFN0YXRlOjpGYWlsZWQ7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1
bHQ6Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtX2NsaWVudC5pY2VUcmFuc3BvcnRT
dGF0ZUNoYW5nZWQodHJhbnNjZWl2ZXIubWlkKCksIHRyYW5zcG9ydFN0YXRlKTsKLX0KLQotdm9p
ZCBNZWRpYUVuZHBvaW50T3dyOjpkaXNwYXRjaER0bHNGaW5nZXJwcmludChnY2hhciogcHJpdmF0
ZUtleSwgZ2NoYXIqIGNlcnRpZmljYXRlLCBjb25zdCBTdHJpbmcmIGZpbmdlcnByaW50LCBjb25z
dCBTdHJpbmcmIGZpbmdlcnByaW50RnVuY3Rpb24pCi17Ci0gICAgbV9kdGxzUHJpdmF0ZUtleSA9
IFN0cmluZyhwcml2YXRlS2V5KTsKLSAgICBtX2R0bHNDZXJ0aWZpY2F0ZSA9IFN0cmluZyhjZXJ0
aWZpY2F0ZSk7Ci0KLSAgICBnX2ZyZWUocHJpdmF0ZUtleSk7Ci0gICAgZ19mcmVlKGNlcnRpZmlj
YXRlKTsKLQotICAgIG1fY2xpZW50LmdvdER0bHNGaW5nZXJwcmludChmaW5nZXJwcmludCwgZmlu
Z2VycHJpbnRGdW5jdGlvbik7Ci19Ci0KLXZvaWQgTWVkaWFFbmRwb2ludE93cjo6dW5tdXRlUmVt
b3RlU291cmNlKGNvbnN0IFN0cmluZyYgbWlkLCBPd3JNZWRpYVNvdXJjZSogcmVhbFNvdXJjZSkK
LXsKLSAgICBSZWZQdHI8UmVhbHRpbWVNZWRpYVNvdXJjZU93cj4gcmVtb3RlU291cmNlID0gbV9t
dXRlZFJlbW90ZVNvdXJjZXMudGFrZShtaWQpOwotICAgIGlmICghcmVtb3RlU291cmNlKSB7Ci0g
ICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIGZpbmQgbXV0ZWQgcmVtb3RlIHNvdXJjZS4iKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChyZW1vdGVTb3VyY2UtPmlzUHJvZHVj
aW5nRGF0YSgpKQotICAgICAgICByZW1vdGVTb3VyY2UtPnN3YXBPdXRTaGFsbG93U291cmNlKCpy
ZWFsU291cmNlKTsKLX0KLQotdm9pZCBNZWRpYUVuZHBvaW50T3dyOjpwcmVwYXJlU2Vzc2lvbihP
d3JTZXNzaW9uKiBzZXNzaW9uLCBQZWVyTWVkaWFEZXNjcmlwdGlvbiogbWVkaWFEZXNjcmlwdGlv
bikKLXsKLSAgICBnX29iamVjdF9zZXRfZGF0YV9mdWxsKEdfT0JKRUNUKHNlc3Npb24pLCAiaWNl
LXVmcmFnIiwgZ19zdHJkdXAobWVkaWFEZXNjcmlwdGlvbi0+aWNlVWZyYWcuYXNjaWkoKS5kYXRh
KCkpLCBnX2ZyZWUpOwotICAgIGdfb2JqZWN0X3NldF9kYXRhX2Z1bGwoR19PQkpFQ1Qoc2Vzc2lv
biksICJpY2UtcGFzc3dvcmQiLCBnX3N0cmR1cChtZWRpYURlc2NyaXB0aW9uLT5pY2VQYXNzd29y
ZC5hc2NpaSgpLmRhdGEoKSksIGdfZnJlZSk7Ci0KLSAgICBnX3NpZ25hbF9jb25uZWN0KHNlc3Np
b24sICJvbi1uZXctY2FuZGlkYXRlIiwgR19DQUxMQkFDSyhnb3RDYW5kaWRhdGUpLCB0aGlzKTsK
LSAgICBnX3NpZ25hbF9jb25uZWN0KHNlc3Npb24sICJvbi1jYW5kaWRhdGUtZ2F0aGVyaW5nLWRv
bmUiLCBHX0NBTExCQUNLKGNhbmRpZGF0ZUdhdGhlcmluZ0RvbmUpLCB0aGlzKTsKLSAgICBnX3Np
Z25hbF9jb25uZWN0KHNlc3Npb24sICJub3RpZnk6OmljZS1jb25uZWN0aW9uLXN0YXRlIiwgR19D
QUxMQkFDSyhpY2VDb25uZWN0aW9uU3RhdGVDaGFuZ2UpLCB0aGlzKTsKLX0KLQotdm9pZCBNZWRp
YUVuZHBvaW50T3dyOjpwcmVwYXJlTWVkaWFTZXNzaW9uKE93ck1lZGlhU2Vzc2lvbiogbWVkaWFT
ZXNzaW9uLCBQZWVyTWVkaWFEZXNjcmlwdGlvbiogbWVkaWFEZXNjcmlwdGlvbiwgYm9vbCBpc0lu
aXRpYXRvcikKLXsKLSAgICBwcmVwYXJlU2Vzc2lvbihPV1JfU0VTU0lPTihtZWRpYVNlc3Npb24p
LCBtZWRpYURlc2NyaXB0aW9uKTsKLQotICAgIGJvb2wgdXNlUnRjcE11eCA9ICFpc0luaXRpYXRv
ciAmJiBtZWRpYURlc2NyaXB0aW9uLT5ydGNwTXV4OwotICAgIGdfb2JqZWN0X3NldChtZWRpYVNl
c3Npb24sICJydGNwLW11eCIsIHVzZVJ0Y3BNdXgsIG51bGxwdHIpOwotCi0gICAgaWYgKCFtZWRp
YURlc2NyaXB0aW9uLT5jbmFtZS5pc0VtcHR5KCkgJiYgbWVkaWFEZXNjcmlwdGlvbi0+c3NyY3Mu
c2l6ZSgpKSB7Ci0gICAgICAgIGdfb2JqZWN0X3NldChtZWRpYVNlc3Npb24sICJjbmFtZSIsIG1l
ZGlhRGVzY3JpcHRpb24tPmNuYW1lLmFzY2lpKCkuZGF0YSgpLAotICAgICAgICAgICAgInNlbmQt
c3NyYyIsIG1lZGlhRGVzY3JpcHRpb24tPnNzcmNzWzBdLAotICAgICAgICAgICAgbnVsbHB0cik7
Ci0gICAgfQotCi0gICAgZ19zaWduYWxfY29ubmVjdChtZWRpYVNlc3Npb24sICJvbi1pbmNvbWlu
Zy1zb3VyY2UiLCBHX0NBTExCQUNLKGdvdEluY29taW5nU291cmNlKSwgdGhpcyk7Ci0KLSAgICBm
b3IgKGF1dG8mIHBheWxvYWQgOiBtZWRpYURlc2NyaXB0aW9uLT5wYXlsb2FkcykgewotICAgICAg
ICBpZiAocGF5bG9hZC5lbmNvZGluZ05hbWUuY29udmVydFRvQVNDSUlVcHBlcmNhc2UoKSA9PSAi
UlRYIikKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGF1dG8qIHJ0eFBheWxvYWQg
PSBmaW5kUnR4UGF5bG9hZChtZWRpYURlc2NyaXB0aW9uLT5wYXlsb2FkcywgcGF5bG9hZC50eXBl
KTsKLQotICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKGNvZGVjVHlwZXMuZmluZChwYXlsb2Fk
LmVuY29kaW5nTmFtZS5jb252ZXJ0VG9BU0NJSVVwcGVyY2FzZSgpKSAhPSBub3RGb3VuZCwgIlVu
YWJsZSB0byBmaW5kIGNvZGVjOiAlcyIsIHBheWxvYWQuZW5jb2RpbmdOYW1lLnV0ZjgoKS5kYXRh
KCkpOwotICAgICAgICBPd3JDb2RlY1R5cGUgY29kZWNUeXBlID0gc3RhdGljX2Nhc3Q8T3dyQ29k
ZWNUeXBlPihjb2RlY1R5cGVzLmZpbmQocGF5bG9hZC5lbmNvZGluZ05hbWUuY29udmVydFRvQVND
SUlVcHBlcmNhc2UoKSkpOwotCi0gICAgICAgIE93clBheWxvYWQqIHJlY2VpdmVQYXlsb2FkOwot
ICAgICAgICBpZiAobWVkaWFEZXNjcmlwdGlvbi0+dHlwZSA9PSAiYXVkaW8iKQotICAgICAgICAg
ICAgcmVjZWl2ZVBheWxvYWQgPSBvd3JfYXVkaW9fcGF5bG9hZF9uZXcoY29kZWNUeXBlLCBwYXls
b2FkLnR5cGUsIHBheWxvYWQuY2xvY2tSYXRlLCBwYXlsb2FkLmNoYW5uZWxzKTsKLSAgICAgICAg
ZWxzZSB7Ci0gICAgICAgICAgICByZWNlaXZlUGF5bG9hZCA9IG93cl92aWRlb19wYXlsb2FkX25l
dyhjb2RlY1R5cGUsIHBheWxvYWQudHlwZSwgcGF5bG9hZC5jbG9ja1JhdGUsIHBheWxvYWQuY2Nt
ZmlyLCBwYXlsb2FkLm5hY2twbGkpOwotICAgICAgICAgICAgZ19vYmplY3Rfc2V0KHJlY2VpdmVQ
YXlsb2FkLCAicnR4LXBheWxvYWQtdHlwZSIsIHJ0eFBheWxvYWQgPyBydHhQYXlsb2FkLT50eXBl
IDogLTEsCi0gICAgICAgICAgICAgICAgInJ0eC10aW1lIiwgcnR4UGF5bG9hZCAmJiBydHhQYXls
b2FkLT5wYXJhbWV0ZXJzLmNvbnRhaW5zKCJydHhUaW1lIikgPyBydHhQYXlsb2FkLT5wYXJhbWV0
ZXJzLmdldCgicnR4VGltZSIpIDogMCwgbnVsbHB0cik7Ci0gICAgICAgIH0KLQotICAgICAgICBv
d3JfbWVkaWFfc2Vzc2lvbl9hZGRfcmVjZWl2ZV9wYXlsb2FkKG1lZGlhU2Vzc2lvbiwgcmVjZWl2
ZVBheWxvYWQpOwotICAgIH0KLX0KLQotc3RydWN0IEhlbHBlclNlcnZlclVybCB7Ci0gICAgU3Ry
aW5nIHByb3RvY29sOwotICAgIFN0cmluZyBob3N0OwotICAgIHVuc2lnbmVkIHNob3J0IHBvcnQ7
Ci0gICAgU3RyaW5nIHF1ZXJ5OwotfTsKLQotc3RhdGljIHZvaWQgcGFyc2VIZWxwZXJTZXJ2ZXJV
cmwoR1JlZ2V4JiByZWdleCwgY29uc3QgVVJMJiB1cmwsIEhlbHBlclNlcnZlclVybCYgb3V0VXJs
KQotewotICAgIEdNYXRjaEluZm8qIG1hdGNoSW5mbzsKLQotICAgIGlmIChnX3JlZ2V4X21hdGNo
KCZyZWdleCwgdXJsLnN0cmluZygpLmFzY2lpKCkuZGF0YSgpLCBzdGF0aWNfY2FzdDxHUmVnZXhN
YXRjaEZsYWdzPigwKSwgJm1hdGNoSW5mbykpIHsKLSAgICAgICAgZ2NoYXIqKiBtYXRjaGVzID0g
IGdfbWF0Y2hfaW5mb19mZXRjaF9hbGwobWF0Y2hJbmZvKTsKLSAgICAgICAgZ2ludCBtYXRjaENv
dW50ID0gZ19zdHJ2X2xlbmd0aChtYXRjaGVzKTsKLQotICAgICAgICBvdXRVcmwucHJvdG9jb2wg
PSBtYXRjaGVzWzFdOwotICAgICAgICBvdXRVcmwuaG9zdCA9IG1hdGNoZXNbMl1bMF0gPT0gJ1sn
ID8gU3RyaW5nKG1hdGNoZXNbMl0gKyAxLCBzdHJsZW4obWF0Y2hlc1syXSkgLSAyKSAvLyBJUHY2
Ci0gICAgICAgICAgICA6IG1hdGNoZXNbMl07Ci0KLSAgICAgICAgb3V0VXJsLnBvcnQgPSAwOwot
ICAgICAgICBpZiAobWF0Y2hDb3VudCA+PSA0KSB7Ci0gICAgICAgICAgICBTdHJpbmcgcG9ydFN0
cmluZyA9IFN0cmluZyhtYXRjaGVzWzNdICsgMSk7IC8vIFNraXAgcG9ydCBjb2xvbgotICAgICAg
ICAgICAgb3V0VXJsLnBvcnQgPSBwb3J0U3RyaW5nLnRvVUludFN0cmljdCgpOwotICAgICAgICB9
Ci0KLSAgICAgICAgaWYgKG1hdGNoQ291bnQgPT0gNSkKLSAgICAgICAgICAgIG91dFVybC5xdWVy
eSA9IFN0cmluZyhtYXRjaGVzWzRdICsgMSk7IC8vIFNraXAgcXVlc3Rpb24gbWFyawotCi0gICAg
ICAgIGdfc3RyZnJlZXYobWF0Y2hlcyk7Ci0gICAgfQotCi0gICAgZ19tYXRjaF9pbmZvX2ZyZWUo
bWF0Y2hJbmZvKTsKLX0KLQotdm9pZCBNZWRpYUVuZHBvaW50T3dyOjplbnN1cmVUcmFuc3BvcnRB
Z2VudEFuZFRyYW5zY2VpdmVycyhib29sIGlzSW5pdGlhdG9yLCBjb25zdCBWZWN0b3I8VHJhbnNj
ZWl2ZXJDb25maWc+JiB0cmFuc2NlaXZlckNvbmZpZ3MpCi17Ci0gICAgQVNTRVJUKG1fZHRsc1By
aXZhdGVLZXkpOwotICAgIEFTU0VSVChtX2R0bHNDZXJ0aWZpY2F0ZSk7Ci0KLSAgICBpZiAoIW1f
dHJhbnNwb3J0QWdlbnQpIHsKLSAgICAgICAgLy8gRklYTUU6IEhhbmRsZSBTRFAgQlVORExFIGxp
bmUgZnJvbSB0aGUgcmVtb3RlIHNvdXJjZSBpbnN0ZWFkIG9mIGZhbGxpbmcgYmFjayB0byBiYWxh
bmNlZC4KLSAgICAgICAgT3dyQnVuZGxlUG9saWN5VHlwZSBidW5kbGVQb2xpY3kgPSBPV1JfQlVO
RExFX1BPTElDWV9UWVBFX0JBTEFOQ0VEOwotCi0gICAgICAgIHN3aXRjaCAobV9jb25maWd1cmF0
aW9uLT5idW5kbGVQb2xpY3kpIHsKLSAgICAgICAgY2FzZSBQZWVyQ29ubmVjdGlvblN0YXRlczo6
QnVuZGxlUG9saWN5OjpCYWxhbmNlZDoKLSAgICAgICAgICAgIGJ1bmRsZVBvbGljeSA9IE9XUl9C
VU5ETEVfUE9MSUNZX1RZUEVfQkFMQU5DRUQ7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
Y2FzZSBQZWVyQ29ubmVjdGlvblN0YXRlczo6QnVuZGxlUG9saWN5OjpNYXhDb21wYXQ6Ci0gICAg
ICAgICAgICBidW5kbGVQb2xpY3kgPSBPV1JfQlVORExFX1BPTElDWV9UWVBFX01BWF9DT01QQVQ7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBQZWVyQ29ubmVjdGlvblN0YXRlczo6
QnVuZGxlUG9saWN5OjpNYXhCdW5kbGU6Ci0gICAgICAgICAgICBidW5kbGVQb2xpY3kgPSBPV1Jf
QlVORExFX1BPTElDWV9UWVBFX01BWF9CVU5ETEU7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgZGVmYXVsdDoKLSAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICB9
OwotCi0gICAgICAgIG1fdHJhbnNwb3J0QWdlbnQgPSBvd3JfdHJhbnNwb3J0X2FnZW50X25ldyhm
YWxzZSwgYnVuZGxlUG9saWN5KTsKLQotICAgICAgICBBU1NFUlQobV9jb25maWd1cmF0aW9uKTsK
LSAgICAgICAgZm9yIChhdXRvJiBzZXJ2ZXIgOiBtX2NvbmZpZ3VyYXRpb24tPmljZVNlcnZlcnMp
IHsKLSAgICAgICAgICAgIGZvciAoYXV0byYgd2Via2l0VXJsIDogc2VydmVyLnVybHMpIHsKLSAg
ICAgICAgICAgICAgICBIZWxwZXJTZXJ2ZXJVcmwgdXJsOwotICAgICAgICAgICAgICAgIC8vIFdl
YktpdCdzIFVSTCBjbGFzcyBjYW4ndCBoYW5kbGUgSUNFIGhlbHBlciBzZXJ2ZXIgdXJscyBwcm9w
ZXJseQotICAgICAgICAgICAgICAgIHBhcnNlSGVscGVyU2VydmVyVXJsKCptX2hlbHBlclNlcnZl
clJlZ0V4LCB3ZWJraXRVcmwsIHVybCk7Ci0KLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9y
dCBwb3J0ID0gdXJsLnBvcnQgPyB1cmwucG9ydCA6IGhlbHBlclNlcnZlckRlZmF1bHRQb3J0Owot
Ci0gICAgICAgICAgICAgICAgaWYgKHVybC5wcm90b2NvbCA9PSAic3R1biIpIHsKLSAgICAgICAg
ICAgICAgICAgICAgb3dyX3RyYW5zcG9ydF9hZ2VudF9hZGRfaGVscGVyX3NlcnZlcihtX3RyYW5z
cG9ydEFnZW50LCBPV1JfSEVMUEVSX1NFUlZFUl9UWVBFX1NUVU4sCi0gICAgICAgICAgICAgICAg
ICAgICAgICB1cmwuaG9zdC5hc2NpaSgpLmRhdGEoKSwgcG9ydCwgbnVsbHB0ciwgbnVsbHB0cik7
Ci0KLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHVybC5wcm90b2NvbCA9PSAidHVybiIpIHsK
LSAgICAgICAgICAgICAgICAgICAgT3dySGVscGVyU2VydmVyVHlwZSBzZXJ2ZXJUeXBlID0gdXJs
LnF1ZXJ5ID09ICJ0cmFuc3BvcnQ9dGNwIiA/IE9XUl9IRUxQRVJfU0VSVkVSX1RZUEVfVFVSTl9U
Q1AKLSAgICAgICAgICAgICAgICAgICAgICAgIDogT1dSX0hFTFBFUl9TRVJWRVJfVFlQRV9UVVJO
X1VEUDsKLQotICAgICAgICAgICAgICAgICAgICBvd3JfdHJhbnNwb3J0X2FnZW50X2FkZF9oZWxw
ZXJfc2VydmVyKG1fdHJhbnNwb3J0QWdlbnQsIHNlcnZlclR5cGUsCi0gICAgICAgICAgICAgICAg
ICAgICAgICB1cmwuaG9zdC5hc2NpaSgpLmRhdGEoKSwgcG9ydCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHNlcnZlci51c2VybmFtZS5hc2NpaSgpLmRhdGEoKSwgc2VydmVyLmNyZWRlbnRpYWwu
YXNjaWkoKS5kYXRhKCkpOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodXJsLnByb3RvY29s
ID09ICJ0dXJucyIpIHsKLSAgICAgICAgICAgICAgICAgICAgb3dyX3RyYW5zcG9ydF9hZ2VudF9h
ZGRfaGVscGVyX3NlcnZlcihtX3RyYW5zcG9ydEFnZW50LCBPV1JfSEVMUEVSX1NFUlZFUl9UWVBF
X1RVUk5fVExTLAotICAgICAgICAgICAgICAgICAgICAgICAgdXJsLmhvc3QuYXNjaWkoKS5kYXRh
KCksIHBvcnQsCi0gICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXIudXNlcm5hbWUuYXNjaWko
KS5kYXRhKCksIHNlcnZlci5jcmVkZW50aWFsLmFzY2lpKCkuZGF0YSgpKTsKLSAgICAgICAgICAg
ICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBnX29iamVjdF9zZXQobV90cmFu
c3BvcnRBZ2VudCwgImljZS1jb250cm9sbGluZy1tb2RlIiwgaXNJbml0aWF0b3IsIG51bGxwdHIp
OwotCi0gICAgZm9yIChhdXRvJiBjb25maWcgOiB0cmFuc2NlaXZlckNvbmZpZ3MpIHsKLSAgICAg
ICAgT3dyU2Vzc2lvbiogc2Vzc2lvbiA9IE9XUl9TRVNTSU9OKG93cl9tZWRpYV9zZXNzaW9uX25l
dyhjb25maWcuaXNEdGxzQ2xpZW50KSk7Ci0gICAgICAgIGdfb2JqZWN0X3NldChzZXNzaW9uLCAi
ZHRscy1jZXJ0aWZpY2F0ZSIsIG1fZHRsc0NlcnRpZmljYXRlLnV0ZjgoKS5kYXRhKCksCi0gICAg
ICAgICAgICAiZHRscy1rZXkiLCBtX2R0bHNQcml2YXRlS2V5LnV0ZjgoKS5kYXRhKCksCi0gICAg
ICAgICAgICBudWxscHRyKTsKLQotICAgICAgICBtX3RyYW5zY2VpdmVycy5hcHBlbmQoT3dyVHJh
bnNjZWl2ZXI6OmNyZWF0ZShjb25maWcubWlkLCBzZXNzaW9uKSk7Ci0gICAgfQotfQotCi12b2lk
IE1lZGlhRW5kcG9pbnRPd3I6OmludGVybmFsQWRkUmVtb3RlQ2FuZGlkYXRlKE93clNlc3Npb24q
IHNlc3Npb24sIGNvbnN0IEljZUNhbmRpZGF0ZSYgY2FuZGlkYXRlLCBjb25zdCBTdHJpbmcmIHVm
cmFnLCBjb25zdCBTdHJpbmcmIHBhc3N3b3JkKQotewotICAgIGdib29sZWFuIHJ0Y3BNdXg7Ci0g
ICAgZ19vYmplY3RfZ2V0KHNlc3Npb24sICJydGNwLW11eCIsICZydGNwTXV4LCBudWxscHRyKTsK
LQotICAgIGlmIChydGNwTXV4ICYmIGNhbmRpZGF0ZS5jb21wb25lbnRJZCA9PSBPV1JfQ09NUE9O
RU5UX1RZUEVfUlRDUCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKGNhbmRpZGF0ZVR5
cGVzLmZpbmQoY2FuZGlkYXRlLnR5cGUpICE9IG5vdEZvdW5kKTsKLQotICAgIE93ckNhbmRpZGF0
ZVR5cGUgY2FuZGlkYXRlVHlwZSA9IHN0YXRpY19jYXN0PE93ckNhbmRpZGF0ZVR5cGU+KGNhbmRp
ZGF0ZVR5cGVzLmZpbmQoY2FuZGlkYXRlLnR5cGUpKTsKLSAgICBPd3JDb21wb25lbnRUeXBlIGNv
bXBvbmVudElkID0gc3RhdGljX2Nhc3Q8T3dyQ29tcG9uZW50VHlwZT4oY2FuZGlkYXRlLmNvbXBv
bmVudElkKTsKLSAgICBPd3JUcmFuc3BvcnRUeXBlIHRyYW5zcG9ydFR5cGU7Ci0KLSAgICBpZiAo
Y2FuZGlkYXRlLnRyYW5zcG9ydC5jb252ZXJ0VG9BU0NJSVVwcGVyY2FzZSgpID09ICJVRFAiKQot
ICAgICAgICB0cmFuc3BvcnRUeXBlID0gT1dSX1RSQU5TUE9SVF9UWVBFX1VEUDsKLSAgICBlbHNl
IHsKLSAgICAgICAgQVNTRVJUKGNhbmRpZGF0ZVRjcFR5cGVzLmZpbmQoY2FuZGlkYXRlLnRjcFR5
cGUpICE9IG5vdEZvdW5kKTsKLSAgICAgICAgdHJhbnNwb3J0VHlwZSA9IHN0YXRpY19jYXN0PE93
clRyYW5zcG9ydFR5cGU+KGNhbmRpZGF0ZVRjcFR5cGVzLmZpbmQoY2FuZGlkYXRlLnRjcFR5cGUp
KTsKLSAgICB9Ci0KLSAgICBPd3JDYW5kaWRhdGUqIG93ckNhbmRpZGF0ZSA9IG93cl9jYW5kaWRh
dGVfbmV3KGNhbmRpZGF0ZVR5cGUsIGNvbXBvbmVudElkKTsKLSAgICBnX29iamVjdF9zZXQob3dy
Q2FuZGlkYXRlLCAidHJhbnNwb3J0LXR5cGUiLCB0cmFuc3BvcnRUeXBlLAotICAgICAgICAiYWRk
cmVzcyIsIGNhbmRpZGF0ZS5hZGRyZXNzLmFzY2lpKCkuZGF0YSgpLAotICAgICAgICAicG9ydCIs
IGNhbmRpZGF0ZS5wb3J0LAotICAgICAgICAiYmFzZS1hZGRyZXNzIiwgY2FuZGlkYXRlLnJlbGF0
ZWRBZGRyZXNzLmFzY2lpKCkuZGF0YSgpLAotICAgICAgICAiYmFzZS1wb3J0IiwgY2FuZGlkYXRl
LnJlbGF0ZWRQb3J0LAotICAgICAgICAicHJpb3JpdHkiLCBjYW5kaWRhdGUucHJpb3JpdHksCi0g
ICAgICAgICJmb3VuZGF0aW9uIiwgY2FuZGlkYXRlLmZvdW5kYXRpb24uYXNjaWkoKS5kYXRhKCks
Ci0gICAgICAgICJ1ZnJhZyIsIHVmcmFnLmFzY2lpKCkuZGF0YSgpLAotICAgICAgICAicGFzc3dv
cmQiLCBwYXNzd29yZC5hc2NpaSgpLmRhdGEoKSwKLSAgICAgICAgbnVsbHB0cik7Ci0KLSAgICBv
d3Jfc2Vzc2lvbl9hZGRfcmVtb3RlX2NhbmRpZGF0ZShzZXNzaW9uLCBvd3JDYW5kaWRhdGUpOwot
fQotCi1zdGF0aWMgdm9pZCBnb3RDYW5kaWRhdGUoT3dyU2Vzc2lvbiogc2Vzc2lvbiwgT3dyQ2Fu
ZGlkYXRlKiBjYW5kaWRhdGUsIE1lZGlhRW5kcG9pbnRPd3IqIG1lZGlhRW5kcG9pbnQpCi17Ci0g
ICAgT3dyQ2FuZGlkYXRlVHlwZSBjYW5kaWRhdGVUeXBlOwotICAgIGdjaGFyKiBmb3VuZGF0aW9u
OwotICAgIE93ckNvbXBvbmVudFR5cGUgY29tcG9uZW50SWQ7Ci0gICAgT3dyVHJhbnNwb3J0VHlw
ZSB0cmFuc3BvcnRUeXBlOwotICAgIGdpbnQgcHJpb3JpdHk7Ci0gICAgZ2NoYXIqIGFkZHJlc3M7
Ci0gICAgZ3VpbnQgcG9ydDsKLSAgICBnY2hhciogcmVsYXRlZEFkZHJlc3M7Ci0gICAgZ3VpbnQg
cmVsYXRlZFBvcnQ7Ci0KLSAgICBnX29iamVjdF9nZXQoY2FuZGlkYXRlLCAidHlwZSIsICZjYW5k
aWRhdGVUeXBlLAotICAgICAgICAiZm91bmRhdGlvbiIsICZmb3VuZGF0aW9uLAotICAgICAgICAi
Y29tcG9uZW50LXR5cGUiLCAmY29tcG9uZW50SWQsCi0gICAgICAgICJ0cmFuc3BvcnQtdHlwZSIs
ICZ0cmFuc3BvcnRUeXBlLAotICAgICAgICAicHJpb3JpdHkiLCAmcHJpb3JpdHksCi0gICAgICAg
ICJhZGRyZXNzIiwgJmFkZHJlc3MsCi0gICAgICAgICJwb3J0IiwgJnBvcnQsCi0gICAgICAgICJi
YXNlLWFkZHJlc3MiLCAmcmVsYXRlZEFkZHJlc3MsCi0gICAgICAgICJiYXNlLXBvcnQiLCAmcmVs
YXRlZFBvcnQsCi0gICAgICAgIG51bGxwdHIpOwotCi0gICAgQVNTRVJUKGNhbmRpZGF0ZVR5cGUg
Pj0gMCAmJiBjYW5kaWRhdGVUeXBlIDwgY2FuZGlkYXRlVHlwZXMuc2l6ZSgpKTsKLSAgICBBU1NF
UlQodHJhbnNwb3J0VHlwZSA+PSAwICYmIHRyYW5zcG9ydFR5cGUgPCBjYW5kaWRhdGVUY3BUeXBl
cy5zaXplKCkpOwotCi0gICAgSWNlQ2FuZGlkYXRlIGljZUNhbmRpZGF0ZTsKLSAgICBpY2VDYW5k
aWRhdGUudHlwZSA9IGNhbmRpZGF0ZVR5cGVzW2NhbmRpZGF0ZVR5cGVdOwotICAgIGljZUNhbmRp
ZGF0ZS5mb3VuZGF0aW9uID0gZm91bmRhdGlvbjsKLSAgICBpY2VDYW5kaWRhdGUuY29tcG9uZW50
SWQgPSBjb21wb25lbnRJZDsKLSAgICBpY2VDYW5kaWRhdGUucHJpb3JpdHkgPSBwcmlvcml0eTsK
LSAgICBpY2VDYW5kaWRhdGUuYWRkcmVzcyA9IGFkZHJlc3M7Ci0gICAgaWNlQ2FuZGlkYXRlLnBv
cnQgPSBwb3J0ID8gcG9ydCA6IGNhbmRpZGF0ZURlZmF1bHRQb3J0OwotCi0gICAgaWYgKHRyYW5z
cG9ydFR5cGUgPT0gT1dSX1RSQU5TUE9SVF9UWVBFX1VEUCkKLSAgICAgICAgaWNlQ2FuZGlkYXRl
LnRyYW5zcG9ydCA9ICJVRFAiOwotICAgIGVsc2UgewotICAgICAgICBpY2VDYW5kaWRhdGUudHJh
bnNwb3J0ID0gIlRDUCI7Ci0gICAgICAgIGljZUNhbmRpZGF0ZS50Y3BUeXBlID0gY2FuZGlkYXRl
VGNwVHlwZXNbdHJhbnNwb3J0VHlwZV07Ci0gICAgfQotCi0gICAgaWYgKGNhbmRpZGF0ZVR5cGUg
IT0gT1dSX0NBTkRJREFURV9UWVBFX0hPU1QpIHsKLSAgICAgICAgaWNlQ2FuZGlkYXRlLnJlbGF0
ZWRBZGRyZXNzID0gcmVsYXRlZEFkZHJlc3M7Ci0gICAgICAgIGljZUNhbmRpZGF0ZS5yZWxhdGVk
UG9ydCA9IHJlbGF0ZWRQb3J0ID8gcmVsYXRlZFBvcnQgOiBjYW5kaWRhdGVEZWZhdWx0UG9ydDsK
LSAgICB9Ci0KLSAgICBnX29iamVjdF9zZXQoR19PQkpFQ1QoY2FuZGlkYXRlKSwgInVmcmFnIiwg
Z19vYmplY3RfZ2V0X2RhdGEoR19PQkpFQ1Qoc2Vzc2lvbiksICJpY2UtdWZyYWciKSwKLSAgICAg
ICAgInBhc3N3b3JkIiwgZ19vYmplY3RfZ2V0X2RhdGEoR19PQkpFQ1Qoc2Vzc2lvbiksICJpY2Ut
cGFzc3dvcmQiKSwKLSAgICAgICAgbnVsbHB0cik7Ci0KLSAgICBtZWRpYUVuZHBvaW50LT5kaXNw
YXRjaE5ld0ljZUNhbmRpZGF0ZShtZWRpYUVuZHBvaW50LT5zZXNzaW9uTWlkKHNlc3Npb24pLCBX
VEZNb3ZlKGljZUNhbmRpZGF0ZSkpOwotCi0gICAgZ19mcmVlKGZvdW5kYXRpb24pOwotICAgIGdf
ZnJlZShhZGRyZXNzKTsKLSAgICBnX2ZyZWUocmVsYXRlZEFkZHJlc3MpOwotfQotCi1zdGF0aWMg
dm9pZCBjYW5kaWRhdGVHYXRoZXJpbmdEb25lKE93clNlc3Npb24qIHNlc3Npb24sIE1lZGlhRW5k
cG9pbnRPd3IqIG1lZGlhRW5kcG9pbnQpCi17Ci0gICAgbWVkaWFFbmRwb2ludC0+ZGlzcGF0Y2hH
YXRoZXJpbmdEb25lKG1lZGlhRW5kcG9pbnQtPnNlc3Npb25NaWQoc2Vzc2lvbikpOwotfQotCi1z
dGF0aWMgdm9pZCBpY2VDb25uZWN0aW9uU3RhdGVDaGFuZ2UoT3dyU2Vzc2lvbiogc2Vzc2lvbiwg
R1BhcmFtU3BlYyosIE1lZGlhRW5kcG9pbnRPd3IqIG1lZGlhRW5kcG9pbnQpCi17Ci0gICAgbWVk
aWFFbmRwb2ludC0+cHJvY2Vzc0ljZVRyYW5zcG9ydFN0YXRlQ2hhbmdlKHNlc3Npb24pOwotfQot
Ci1zdGF0aWMgdm9pZCBnb3RJbmNvbWluZ1NvdXJjZShPd3JNZWRpYVNlc3Npb24qIG1lZGlhU2Vz
c2lvbiwgT3dyTWVkaWFTb3VyY2UqIHNvdXJjZSwgTWVkaWFFbmRwb2ludE93ciogbWVkaWFFbmRw
b2ludCkKLXsKLSAgICBtZWRpYUVuZHBvaW50LT51bm11dGVSZW1vdGVTb3VyY2UobWVkaWFFbmRw
b2ludC0+c2Vzc2lvbk1pZChPV1JfU0VTU0lPTihtZWRpYVNlc3Npb24pKSwgc291cmNlKTsKLX0K
LQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKFdFQl9SVEMpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9vcGVud2VicnRj
L01lZGlhRW5kcG9pbnRPd3IuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFt
L29wZW53ZWJydGMvTWVkaWFFbmRwb2ludE93ci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCBmMzEwNDhjOWVjZmVlZTM1MGFjMjlmNjIyMWFjZDBjMmVhZGI5MGY3Li4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21lZGlhc3RyZWFtL29wZW53ZWJydGMvTWVkaWFFbmRwb2ludE93ci5oCisrKyAvZGV2L251
bGwKQEAgLTEsMTQ5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUsIDIwMTYgRXJp
Y3Nzb24gQUIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIKLSAqICAgIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqICAgIGRpc3RyaWJ1dGlvbi4KLSAqIDMu
IE5laXRoZXIgdGhlIG5hbWUgb2YgRXJpY3Nzb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJp
YnV0b3JzCi0gKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tIHRoaXMKLSAqICAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
LSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBFTkFC
TEUoV0VCX1JUQykKLQotI2luY2x1ZGUgIk1lZGlhRW5kcG9pbnQuaCIKLSNpbmNsdWRlIDxvd3Iv
b3dyX3Nlc3Npb24uaD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotI2luY2x1ZGUgPHd0
Zi9SZWZQdHIuaD4KLQotdHlwZWRlZiBzdHJ1Y3QgX093ck1lZGlhU2Vzc2lvbiBPd3JNZWRpYVNl
c3Npb247Ci10eXBlZGVmIHN0cnVjdCBfT3dyTWVkaWFTb3VyY2UgT3dyTWVkaWFTb3VyY2U7Ci10
eXBlZGVmIHN0cnVjdCBfT3dyVHJhbnNwb3J0QWdlbnQgT3dyVHJhbnNwb3J0QWdlbnQ7Ci0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgUmVhbHRpbWVNZWRpYVNvdXJjZU93cjsKLWNsYXNz
IFJUQ0NvbmZpZ3VyYXRpb25Qcml2YXRlOwotCi1zdHJ1Y3QgUGVlck1lZGlhRGVzY3JpcHRpb247
Ci0KLWNsYXNzIE93clRyYW5zY2VpdmVyIDogcHVibGljIFJlZkNvdW50ZWQ8T3dyVHJhbnNjZWl2
ZXI+IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPE93clRyYW5zY2VpdmVyPiBjcmVhdGUoY29u
c3QgU3RyaW5nJiBtaWQsIE93clNlc3Npb24qIHNlc3Npb24pCi0gICAgewotICAgICAgICByZXR1
cm4gYWRvcHRSZWYoKm5ldyBPd3JUcmFuc2NlaXZlcihtaWQsIHNlc3Npb24pKTsKLSAgICB9Ci0g
ICAgdmlydHVhbCB+T3dyVHJhbnNjZWl2ZXIoKSB7IH0KLQotICAgIGNvbnN0IFN0cmluZyYgbWlk
KCkgY29uc3QgeyByZXR1cm4gbV9taWQ7IH0KLSAgICBPd3JTZXNzaW9uKiBzZXNzaW9uKCkgY29u
c3QgeyByZXR1cm4gbV9zZXNzaW9uOyB9Ci0KLSAgICBPd3JJY2VTdGF0ZSBvd3JJY2VTdGF0ZSgp
IGNvbnN0IHsgcmV0dXJuIG1fb3dySWNlU3RhdGU7IH0KLSAgICB2b2lkIHNldE93ckljZVN0YXRl
KE93ckljZVN0YXRlIHN0YXRlKSB7IG1fb3dySWNlU3RhdGUgPSBzdGF0ZTsgfQotCi0gICAgYm9v
bCBnb3RFbmRPZlJlbW90ZUNhbmRpZGF0ZXMoKSBjb25zdCB7IHJldHVybiBtX2dvdEVuZE9mUmVt
b3RlQ2FuZGlkYXRlczsgfQotICAgIHZvaWQgbWFya0dvdEVuZE9mUmVtb3RlQ2FuZGlkYXRlcygp
IHsgbV9nb3RFbmRPZlJlbW90ZUNhbmRpZGF0ZXMgPSB0cnVlOyB9Ci0KLXByaXZhdGU6Ci0gICAg
T3dyVHJhbnNjZWl2ZXIoY29uc3QgU3RyaW5nJiBtaWQsIE93clNlc3Npb24qIHNlc3Npb24pCi0g
ICAgICAgIDogbV9taWQobWlkKQotICAgICAgICAsIG1fc2Vzc2lvbihzZXNzaW9uKQotICAgIHsg
fQotCi0gICAgU3RyaW5nIG1fbWlkOwotICAgIE93clNlc3Npb24qIG1fc2Vzc2lvbjsKLQotICAg
IE93ckljZVN0YXRlIG1fb3dySWNlU3RhdGUgeyBPV1JfSUNFX1NUQVRFX0RJU0NPTk5FQ1RFRCB9
OwotICAgIGJvb2wgbV9nb3RFbmRPZlJlbW90ZUNhbmRpZGF0ZXMgeyBmYWxzZSB9OwotfTsKLQot
Y2xhc3MgTWVkaWFFbmRwb2ludE93ciA6IHB1YmxpYyBNZWRpYUVuZHBvaW50IHsKLXB1YmxpYzoK
LSAgICBNZWRpYUVuZHBvaW50T3dyKE1lZGlhRW5kcG9pbnRDbGllbnQmKTsKLSAgICB+TWVkaWFF
bmRwb2ludE93cigpOwotCi0gICAgdm9pZCBzZXRDb25maWd1cmF0aW9uKE1lZGlhRW5kcG9pbnRD
b25maWd1cmF0aW9uJiYpIG92ZXJyaWRlOwotCi0gICAgdm9pZCBnZW5lcmF0ZUR0bHNJbmZvKCkg
b3ZlcnJpZGU7Ci0gICAgTWVkaWFQYXlsb2FkVmVjdG9yIGdldERlZmF1bHRBdWRpb1BheWxvYWRz
KCkgb3ZlcnJpZGU7Ci0gICAgTWVkaWFQYXlsb2FkVmVjdG9yIGdldERlZmF1bHRWaWRlb1BheWxv
YWRzKCkgb3ZlcnJpZGU7Ci0gICAgTWVkaWFQYXlsb2FkVmVjdG9yIGZpbHRlclBheWxvYWRzKGNv
bnN0IE1lZGlhUGF5bG9hZFZlY3RvciYgcmVtb3RlUGF5bG9hZHMsIGNvbnN0IE1lZGlhUGF5bG9h
ZFZlY3RvciYgZGVmYXVsdFBheWxvYWRzKSBvdmVycmlkZTsKLQotICAgIFVwZGF0ZVJlc3VsdCB1
cGRhdGVSZWNlaXZlQ29uZmlndXJhdGlvbihNZWRpYUVuZHBvaW50U2Vzc2lvbkNvbmZpZ3VyYXRp
b24qLCBib29sIGlzSW5pdGlhdG9yKSBvdmVycmlkZTsKLSAgICBVcGRhdGVSZXN1bHQgdXBkYXRl
U2VuZENvbmZpZ3VyYXRpb24oTWVkaWFFbmRwb2ludFNlc3Npb25Db25maWd1cmF0aW9uKiwgY29u
c3QgUmVhbHRpbWVNZWRpYVNvdXJjZU1hcCYsIGJvb2wgaXNJbml0aWF0b3IpIG92ZXJyaWRlOwot
Ci0gICAgdm9pZCBhZGRSZW1vdGVDYW5kaWRhdGUoY29uc3QgSWNlQ2FuZGlkYXRlJiwgY29uc3Qg
U3RyaW5nJiBtaWQsIGNvbnN0IFN0cmluZyYgdWZyYWcsIGNvbnN0IFN0cmluZyYgcGFzc3dvcmQp
IG92ZXJyaWRlOwotCi0gICAgUmVmPFJlYWx0aW1lTWVkaWFTb3VyY2U+IGNyZWF0ZU11dGVkUmVt
b3RlU291cmNlKGNvbnN0IFN0cmluZyYgbWlkLCBSZWFsdGltZU1lZGlhU291cmNlOjpUeXBlKSBv
dmVycmlkZTsKLSAgICB2b2lkIHJlcGxhY2VNdXRlZFJlbW90ZVNvdXJjZU1pZChjb25zdCBTdHJp
bmcmLCBjb25zdCBTdHJpbmcmKSBmaW5hbDsKLSAgICB2b2lkIHJlcGxhY2VTZW5kU291cmNlKFJl
YWx0aW1lTWVkaWFTb3VyY2UmLCBjb25zdCBTdHJpbmcmIG1pZCkgb3ZlcnJpZGU7Ci0KLSAgICB2
b2lkIHN0b3AoKSBvdmVycmlkZTsKLQotICAgIHNpemVfdCB0cmFuc2NlaXZlckluZGV4Rm9yU2Vz
c2lvbihPd3JTZXNzaW9uKikgY29uc3Q7Ci0gICAgY29uc3QgU3RyaW5nJiBzZXNzaW9uTWlkKE93
clNlc3Npb24qKSBjb25zdDsKLSAgICBPd3JUcmFuc2NlaXZlciogbWF0Y2hUcmFuc2NlaXZlckJ5
TWlkKGNvbnN0IFN0cmluZyYgbWlkKSBjb25zdDsKLQotICAgIHZvaWQgZGlzcGF0Y2hOZXdJY2VD
YW5kaWRhdGUoY29uc3QgU3RyaW5nJiBtaWQsIEljZUNhbmRpZGF0ZSYmKTsKLSAgICB2b2lkIGRp
c3BhdGNoR2F0aGVyaW5nRG9uZShjb25zdCBTdHJpbmcmIG1pZCk7Ci0gICAgdm9pZCBwcm9jZXNz
SWNlVHJhbnNwb3J0U3RhdGVDaGFuZ2UoT3dyU2Vzc2lvbiopOwotICAgIHZvaWQgZGlzcGF0Y2hE
dGxzRmluZ2VycHJpbnQoZ2NoYXIqIHByaXZhdGVLZXksIGdjaGFyKiBjZXJ0aWZpY2F0ZSwgY29u
c3QgU3RyaW5nJiBmaW5nZXJwcmludCwgY29uc3QgU3RyaW5nJiBmaW5nZXJwcmludEZ1bmN0aW9u
KTsKLSAgICB2b2lkIHVubXV0ZVJlbW90ZVNvdXJjZShjb25zdCBTdHJpbmcmIG1pZCwgT3dyTWVk
aWFTb3VyY2UqKTsKLQotcHJpdmF0ZToKLSAgICBlbnVtIFNlc3Npb25UeXBlIHsgU2Vzc2lvblR5
cGVNZWRpYSB9OwotCi0gICAgc3RydWN0IFRyYW5zY2VpdmVyQ29uZmlnIHsKLSAgICAgICAgU2Vz
c2lvblR5cGUgdHlwZTsKLSAgICAgICAgYm9vbCBpc0R0bHNDbGllbnQ7Ci0gICAgICAgIFN0cmlu
ZyBtaWQ7Ci0gICAgfTsKLQotICAgIHN0ZDo6dW5pcXVlX3B0cjxSVENEYXRhQ2hhbm5lbEhhbmRs
ZXI+IGNyZWF0ZURhdGFDaGFubmVsSGFuZGxlcihjb25zdCBTdHJpbmcmLCBjb25zdCBSVENEYXRh
Q2hhbm5lbEluaXQmKSBmaW5hbDsKLQotICAgIHZvaWQgcHJlcGFyZVNlc3Npb24oT3dyU2Vzc2lv
biosIFBlZXJNZWRpYURlc2NyaXB0aW9uKik7Ci0gICAgdm9pZCBwcmVwYXJlTWVkaWFTZXNzaW9u
KE93ck1lZGlhU2Vzc2lvbiosIFBlZXJNZWRpYURlc2NyaXB0aW9uKiwgYm9vbCBpc0luaXRpYXRv
cik7Ci0KLSAgICB2b2lkIGVuc3VyZVRyYW5zcG9ydEFnZW50QW5kVHJhbnNjZWl2ZXJzKGJvb2wg
aXNJbml0aWF0b3IsIGNvbnN0IFZlY3RvcjxUcmFuc2NlaXZlckNvbmZpZz4mKTsKLSAgICB2b2lk
IGludGVybmFsQWRkUmVtb3RlQ2FuZGlkYXRlKE93clNlc3Npb24qLCBjb25zdCBJY2VDYW5kaWRh
dGUmLCBjb25zdCBTdHJpbmcmIHVmcmFnLCBjb25zdCBTdHJpbmcmIHBhc3N3b3JkKTsKLQotICAg
IHN0ZDo6b3B0aW9uYWw8TWVkaWFFbmRwb2ludENvbmZpZ3VyYXRpb24+IG1fY29uZmlndXJhdGlv
bjsKLSAgICBHUmVnZXgqIG1faGVscGVyU2VydmVyUmVnRXg7Ci0KLSAgICBPd3JUcmFuc3BvcnRB
Z2VudCogbV90cmFuc3BvcnRBZ2VudDsKLSAgICBWZWN0b3I8UmVmUHRyPE93clRyYW5zY2VpdmVy
Pj4gbV90cmFuc2NlaXZlcnM7Ci0gICAgSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxSZWFsdGltZU1l
ZGlhU291cmNlT3dyPj4gbV9tdXRlZFJlbW90ZVNvdXJjZXM7Ci0KLSAgICBNZWRpYUVuZHBvaW50
Q2xpZW50JiBtX2NsaWVudDsKLQotICAgIHVuc2lnbmVkIG1fbnVtYmVyT2ZSZWNlaXZlUHJlcGFy
ZWRTZXNzaW9uczsKLSAgICB1bnNpZ25lZCBtX251bWJlck9mU2VuZFByZXBhcmVkU2Vzc2lvbnM7
Ci0KLSAgICBTdHJpbmcgbV9kdGxzUHJpdmF0ZUtleTsKLSAgICBTdHJpbmcgbV9kdGxzQ2VydGlm
aWNhdGU7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUo
V0VCX1JUQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFt
L29wZW53ZWJydGMvT3BlbldlYlJUQ1V0aWxpdGllcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tZWRpYXN0cmVhbS9vcGVud2VicnRjL09wZW5XZWJSVENVdGlsaXRpZXMuY3BwCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNGNmYjU5ZGY1MDFkOWIxZTE3NGU3NzQwYjc2NDdi
MWE0OGM5MzYwLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL29wZW53ZWJydGMvT3BlbldlYlJU
Q1V0aWxpdGllcy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw1NyArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDE1IElnYWxpYSBTLkwKLSAqIENvcHlyaWdodCAoQykgMjAxNSBNZXRyb2xv
Z2ljYWwKLSAqCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogMy4gTmVp
dGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlIG5hbWVzIG9mIGl0
cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAq
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIEhPTERFUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotCi0jaW5jbHVkZSAiY29uZmlnLmgi
Ci0KLSNpZiBVU0UoT1BFTldFQlJUQykKLSNpbmNsdWRlICJPcGVuV2ViUlRDVXRpbGl0aWVzLmgi
Ci0KLSNpbmNsdWRlIDxvd3Ivb3dyLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotdm9pZCBp
bml0aWFsaXplT3BlbldlYlJUQygpCi17Ci0gICAgc3RhdGljIGJvb2wgaXNJbml0aWFsaXplZCA9
IGZhbHNlOwotICAgIGlmIChpc0luaXRpYWxpemVkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBv
d3JfaW5pdChnX21haW5fY29udGV4dF9kZWZhdWx0KCkpOwotICAgIGlzSW5pdGlhbGl6ZWQgPSB0
cnVlOwotfQotCi19Ci0KLSNlbmRpZiAvLyBVU0UoT1BFTldFQlJUQykKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL29wZW53ZWJydGMvT3BlbldlYlJUQ1V0
aWxpdGllcy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vb3BlbndlYnJ0
Yy9PcGVuV2ViUlRDVXRpbGl0aWVzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJl
ZDQ3NGJiZmE0YzUzMjI3ZmI1NjY5YWI0YjMzMGM2MmZhYzg5YjguLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVk
aWFzdHJlYW0vb3BlbndlYnJ0Yy9PcGVuV2ViUlRDVXRpbGl0aWVzLmgKKysrIC9kZXYvbnVsbApA
QCAtMSw0MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE1IElnYWxpYSBTLkwKLSAq
IENvcHlyaWdodCAoQykgMjAxNSBNZXRyb2xvZ2ljYWwKLSAqCi0gKiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0
IGhvbGRlciBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQK
LSAqIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXZvaWQgaW5pdGlhbGl6ZU9wZW5XZWJSVEMo
KTsKLQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0v
b3BlbndlYnJ0Yy9SZWFsdGltZUF1ZGlvU291cmNlT3dyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tZWRpYXN0cmVhbS9vcGVud2VicnRjL1JlYWx0aW1lQXVkaW9Tb3VyY2VPd3IuaApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2FiNzA1MDg0Yjk0Y2ZjOGU3YjE5ZjdkN2U4MjMy
NjhjYmNlZjQ2Ni4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9vcGVud2VicnRjL1JlYWx0aW1l
QXVkaW9Tb3VyY2VPd3IuaAorKysgL2Rldi9udWxsCkBAIC0xLDcwICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTUsMjAxNiBJZ2FsaWEgUy5MCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUg
TWV0cm9sb2dpY2FsCi0gKgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICoKLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZSBuYW1l
cyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJ
UyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBIT0xERVIgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0g
KiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQot
Ci0jaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkgJiYgVVNFKE9QRU5XRUJSVEMpCi0KLSNpbmNsdWRl
ICJSZWFsdGltZU1lZGlhU291cmNlT3dyLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xh
c3MgUmVhbHRpbWVBdWRpb1NvdXJjZU93ciA6IHB1YmxpYyBSZWFsdGltZU1lZGlhU291cmNlT3dy
IHsKLXB1YmxpYzoKLVJlYWx0aW1lQXVkaW9Tb3VyY2VPd3IoT3dyTWVkaWFTb3VyY2UqIG1lZGlh
U291cmNlLCBjb25zdCBTdHJpbmcmIGlkLCBSZWFsdGltZU1lZGlhU291cmNlOjpUeXBlIHR5cGUs
IGNvbnN0IFN0cmluZyYgbmFtZSkKLSAgICA6IFJlYWx0aW1lTWVkaWFTb3VyY2VPd3IobWVkaWFT
b3VyY2UsIGlkLCB0eXBlLCBuYW1lKQotICAgIHsKLSAgICB9Ci0KLVJlYWx0aW1lQXVkaW9Tb3Vy
Y2VPd3IoY29uc3QgU3RyaW5nJiBpZCwgUmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlwZSB0eXBlLCBj
b25zdCBTdHJpbmcmIG5hbWUpCi0gICAgOiBSZWFsdGltZU1lZGlhU291cmNlT3dyKGlkLCB0eXBl
LCBuYW1lKQotICAgIHsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIH5SZWFsdGltZUF1ZGlvU291cmNl
T3dyKCkgeyB9Ci0KLSAgICBib29sIGFwcGx5U2l6ZShjb25zdCBJbnRTaXplJikgZmluYWwgeyBy
ZXR1cm4gZmFsc2U7IH0KLQotcHJvdGVjdGVkOgotICAgIHZvaWQgaW5pdGlhbGl6ZVNldHRpbmdz
KCkgZmluYWwgewotICAgICAgICBpZiAobV9jdXJyZW50U2V0dGluZ3MuZGV2aWNlSWQoKS5pc0Vt
cHR5KCkpCi0gICAgICAgICAgICBtX2N1cnJlbnRTZXR0aW5ncy5zZXRTdXBwb3J0ZWRDb25zdHJh
aW50cyhzdXBwb3J0ZWRDb25zdHJhaW50cygpKTsKLQotICAgICAgICBtX2N1cnJlbnRTZXR0aW5n
cy5zZXREZXZpY2VJZChpZCgpKTsKLSAgICB9Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
Ci0KLSNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFNKSAmJiBVU0UoT1BFTldFQlJUQykKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL29wZW53ZWJydGMv
UmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlck93ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tZWRpYXN0cmVhbS9vcGVud2VicnRjL1JlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJPd3IuY3Bw
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYWFkOGEyMzkwMjc3ZjM3OTcwMTQxMjQ5
OTFmNGFkZGE4YWQ4NDM4Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL29wZW53ZWJydGMvUmVh
bHRpbWVNZWRpYVNvdXJjZUNlbnRlck93ci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxOTAgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBFcmljc3NvbiBBQi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE1IElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgTWV0cm9sb2dpY2FsLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiAg
ICBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlCi0gKiAgICBkaXN0cmlidXRpb24uCi0gKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIEVy
aWNzc29uIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICogICAgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0gKiAg
ICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShNRURJQV9TVFJFQU0p
ICYmIFVTRShPUEVOV0VCUlRDKQotI2luY2x1ZGUgIlJlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJP
d3IuaCIKLQotI2luY2x1ZGUgIkNhcHR1cmVEZXZpY2UuaCIKLSNpbmNsdWRlICJNZWRpYVN0cmVh
bVByaXZhdGUuaCIKLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotI2luY2x1ZGUgIk9wZW5X
ZWJSVENVdGlsaXRpZXMuaCIKLSNpbmNsdWRlICJSZWFsdGltZUF1ZGlvU291cmNlT3dyLmgiCi0j
aW5jbHVkZSAiUmVhbHRpbWVNZWRpYVNvdXJjZUNhcGFiaWxpdGllcy5oIgotI2luY2x1ZGUgIlJl
YWx0aW1lVmlkZW9Tb3VyY2VPd3IuaCIKLSNpbmNsdWRlIDxvd3Ivb3dyLmg+Ci0jaW5jbHVkZSA8
b3dyL293cl9sb2NhbC5oPgotI2luY2x1ZGUgPG93ci9vd3JfbWVkaWFfc291cmNlLmg+Ci0jaW5j
bHVkZSA8d3RmL01haW5UaHJlYWQuaD4KLSNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4K
LSNpbmNsdWRlIDx3dGYvVVVJRC5oPgotI2luY2x1ZGUgPHd0Zi9nbGliL0dVbmlxdWVQdHIuaD4K
LSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5n
SGFzaC5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVJlYWx0aW1lTWVkaWFTb3VyY2VDZW50
ZXImIFJlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXI6OnBsYXRmb3JtQ2VudGVyKCkKLXsKLSAgICBB
U1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxSZWFsdGlt
ZU1lZGlhU291cmNlQ2VudGVyT3dyPiBjZW50ZXI7Ci0gICAgcmV0dXJuIGNlbnRlcjsKLX0KLQot
c3RhdGljIHZvaWQgbWVkaWFTb3VyY2VzQXZhaWxhYmxlQ2FsbGJhY2soR0xpc3QqIHNvdXJjZXMs
IGdwb2ludGVyIHVzZXJEYXRhKQotewotICAgIFJlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJPd3Iq
IGNlbnRlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8UmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlck93cio+
KHVzZXJEYXRhKTsKLSAgICBjZW50ZXItPm1lZGlhU291cmNlc0F2YWlsYWJsZShzb3VyY2VzKTsK
LX0KLQotUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlck93cjo6UmVhbHRpbWVNZWRpYVNvdXJjZUNl
bnRlck93cigpCi17Ci0gICAgaW5pdGlhbGl6ZU9wZW5XZWJSVEMoKTsKLX0KLQotUmVhbHRpbWVN
ZWRpYVNvdXJjZUNlbnRlck93cjo6flJlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJPd3IoKQotewot
fQotCi12b2lkIFJlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJPd3I6OnZhbGlkYXRlUmVxdWVzdENv
bnN0cmFpbnRzKFZhbGlkQ29uc3RyYWludHNIYW5kbGVyJiYgdmFsaWRIYW5kbGVyLCBJbnZhbGlk
Q29uc3RyYWludHNIYW5kbGVyJiYgaW52YWxpZEhhbmRsZXIsIGNvbnN0IE1lZGlhQ29uc3RyYWlu
dHMmIGF1ZGlvQ29uc3RyYWludHMsIGNvbnN0IE1lZGlhQ29uc3RyYWludHMmIHZpZGVvQ29uc3Ry
YWludHMsIFN0cmluZyYmIGRldmljZUlkZW50aWZpZXJIYXNoU2FsdCkKLXsKLSAgICBtX3ZhbGlk
Q29uc3RyYWludHNIYW5kbGVyID0gV1RGTW92ZSh2YWxpZEhhbmRsZXIpOwotICAgIG1faW52YWxp
ZENvbnN0cmFpbnRzSGFuZGxlciA9IFdURk1vdmUoaW52YWxpZEhhbmRsZXIpOwotCi0gICAgVmVj
dG9yPFN0cmluZz4gYXVkaW9Tb3VyY2VzOwotICAgIFZlY3RvcjxTdHJpbmc+IHZpZGVvU291cmNl
czsKLQotICAgIC8vIEZJWE1FOiBBY3R1YWxseSBkbyBjb25zdHJhaW50cyB2YWxpZGF0aW9uLiBU
aGUgTWVkaWFDb25zdHJhaW50cwotICAgIC8vIG5lZWQgdG8gY29tcGx5IHdpdGggdGhlIGF2YWls
YWJsZSBhdWRpby92aWRlbyBkZXZpY2UocykKLSAgICAvLyBjYXBhYmlsaXRpZXMuIFNlZSBidWcg
IzEyMzM0NS4KLSAgICBpZiAoYXVkaW9Db25zdHJhaW50cy5pc1ZhbGlkKQotICAgICAgICBhdWRp
b1NvdXJjZXMuYXBwZW5kKFN0cmluZygiYXVkaW8iKSk7Ci0KLSAgICBpZiAodmlkZW9Db25zdHJh
aW50cy5pc1ZhbGlkKQotICAgICAgICB2aWRlb1NvdXJjZXMuYXBwZW5kKFN0cmluZygidmlkZW8i
KSk7Ci0KLSAgICBtX3ZhbGlkQ29uc3RyYWludHNIYW5kbGVyKFdURk1vdmUoYXVkaW9Tb3VyY2Vz
KSwgV1RGTW92ZSh2aWRlb1NvdXJjZXMpLCBXVEZNb3ZlKGRldmljZUlkZW50aWZpZXJIYXNoU2Fs
dCkpOwotICAgIG1fdmFsaWRDb25zdHJhaW50c0hhbmRsZXIgPSBudWxscHRyOwotICAgIG1faW52
YWxpZENvbnN0cmFpbnRzSGFuZGxlciA9IG51bGxwdHI7Ci19Ci0KLXZvaWQgUmVhbHRpbWVNZWRp
YVNvdXJjZUNlbnRlck93cjo6Y3JlYXRlTWVkaWFTdHJlYW0oTmV3TWVkaWFTdHJlYW1IYW5kbGVy
JiYgY29tcGxldGlvbkhhbmRsZXIsIGNvbnN0IFN0cmluZyYgYXVkaW9EZXZpY2VJRCwgY29uc3Qg
U3RyaW5nJiB2aWRlb0RldmljZUlELCBjb25zdCBNZWRpYUNvbnN0cmFpbnRzKiwgY29uc3QgTWVk
aWFDb25zdHJhaW50cyopCi17Ci0gICAgaW50IHR5cGVzID0gT1dSX01FRElBX1RZUEVfVU5LTk9X
TjsKLQotICAgIGlmICghYXVkaW9EZXZpY2VJRC5pc0VtcHR5KCkpCi0gICAgICAgIHR5cGVzIHw9
IE9XUl9NRURJQV9UWVBFX0FVRElPOwotICAgIGlmICghdmlkZW9EZXZpY2VJRC5pc0VtcHR5KCkp
Ci0gICAgICAgIHR5cGVzIHw9IE9XUl9NRURJQV9UWVBFX1ZJREVPOwotCi0gICAgbV9jb21wbGV0
aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpOwotCi0gICAgb3dyX2dldF9j
YXB0dXJlX3NvdXJjZXMoc3RhdGljX2Nhc3Q8T3dyTWVkaWFUeXBlPih0eXBlcyksIG1lZGlhU291
cmNlc0F2YWlsYWJsZUNhbGxiYWNrLCB0aGlzKTsKLX0KLQotVmVjdG9yPENhcHR1cmVEZXZpY2U+
IFJlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJPd3I6OmdldE1lZGlhU3RyZWFtRGV2aWNlcygpCi17
Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gVmVjdG9yPENhcHR1cmVEZXZpY2U+
KCk7Ci19Ci0KLXZvaWQgUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlck93cjo6bWVkaWFTb3VyY2Vz
QXZhaWxhYmxlKEdMaXN0KiBzb3VyY2VzKQotewotICAgIFZlY3RvcjxSZWY8UmVhbHRpbWVNZWRp
YVNvdXJjZT4+IGF1ZGlvU291cmNlczsKLSAgICBWZWN0b3I8UmVmPFJlYWx0aW1lTWVkaWFTb3Vy
Y2U+PiB2aWRlb1NvdXJjZXM7Ci0KLSAgICBmb3IgKGF1dG8gaXRlbSA9IHNvdXJjZXM7IGl0ZW07
IGl0ZW0gPSBpdGVtLT5uZXh0KSB7Ci0gICAgICAgIE93ck1lZGlhU291cmNlKiBzb3VyY2UgPSBP
V1JfTUVESUFfU09VUkNFKGl0ZW0tPmRhdGEpOwotCi0gICAgICAgIEdVbmlxdWVPdXRQdHI8Z2No
YXI+IG5hbWU7Ci0gICAgICAgIE93ck1lZGlhVHlwZSBtZWRpYVR5cGU7Ci0gICAgICAgIGdfb2Jq
ZWN0X2dldChzb3VyY2UsICJtZWRpYS10eXBlIiwgJm1lZGlhVHlwZSwgIm5hbWUiLCAmbmFtZS5v
dXRQdHIoKSwgTlVMTCk7Ci0gICAgICAgIFN0cmluZyBzb3VyY2VOYW1lKG5hbWUuZ2V0KCkpOwot
ICAgICAgICBTdHJpbmcgaWQoY3JlYXRlQ2Fub25pY2FsVVVJRFN0cmluZygpKTsKLQotICAgICAg
ICBpZiAoZ19nZXRlbnYoIk9XUl9VU0VfVEVTVF9TT1VSQ0VTIikpIHsKLSAgICAgICAgICAgIE93
clNvdXJjZVR5cGUgc291cmNlVHlwZSA9IE9XUl9TT1VSQ0VfVFlQRV9VTktOT1dOOwotICAgICAg
ICAgICAgZ19vYmplY3RfZ2V0KHNvdXJjZSwgInR5cGUiLCAmc291cmNlVHlwZSwgTlVMTCk7Ci0g
ICAgICAgICAgICBpZiAoc291cmNlVHlwZSAhPSBPV1JfU09VUkNFX1RZUEVfVEVTVCkKLSAgICAg
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIFJlYWx0aW1lTWVkaWFT
b3VyY2U6OlR5cGUgbWVkaWFTb3VyY2VUeXBlOwotICAgICAgICBpZiAobWVkaWFUeXBlICYgT1dS
X01FRElBX1RZUEVfQVVESU8pCi0gICAgICAgICAgICBtZWRpYVNvdXJjZVR5cGUgPSBSZWFsdGlt
ZU1lZGlhU291cmNlOjpUeXBlOjpBdWRpbzsKLSAgICAgICAgZWxzZSBpZiAobWVkaWFUeXBlICYg
T1dSX01FRElBX1RZUEVfVklERU8pCi0gICAgICAgICAgICBtZWRpYVNvdXJjZVR5cGUgPSBSZWFs
dGltZU1lZGlhU291cmNlOjpUeXBlOjpWaWRlbzsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAg
ICBtZWRpYVNvdXJjZVR5cGUgPSBSZWFsdGltZU1lZGlhU291cmNlOjpUeXBlOjpOb25lOwotICAg
ICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBSZWZQ
dHI8UmVhbHRpbWVNZWRpYVNvdXJjZU93cj4gbWVkaWFTb3VyY2U7Ci0gICAgICAgIGlmIChtZWRp
YVNvdXJjZVR5cGUgPT0gUmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlwZTo6QXVkaW8pCi0gICAgICAg
ICAgICBtZWRpYVNvdXJjZSA9IGFkb3B0UmVmKG5ldyBSZWFsdGltZUF1ZGlvU291cmNlT3dyKHNv
dXJjZSwgaWQsIG1lZGlhU291cmNlVHlwZSwgc291cmNlTmFtZSkpOwotICAgICAgICBlbHNlCi0g
ICAgICAgICAgICBtZWRpYVNvdXJjZSA9IGFkb3B0UmVmKG5ldyBSZWFsdGltZVZpZGVvU291cmNl
T3dyKHNvdXJjZSwgaWQsIG1lZGlhU291cmNlVHlwZSwgc291cmNlTmFtZSkpOwotCi0gICAgICAg
IFJlYWx0aW1lTWVkaWFTb3VyY2VPd3JNYXA6Oml0ZXJhdG9yIHNvdXJjZUl0ZXJhdG9yID0gbV9z
b3VyY2VNYXAuZmluZChpZCk7Ci0gICAgICAgIGlmIChzb3VyY2VJdGVyYXRvciA9PSBtX3NvdXJj
ZU1hcC5lbmQoKSkKLSAgICAgICAgICAgIG1fc291cmNlTWFwLmFkZChpZCwgbWVkaWFTb3VyY2Uu
Y29weVJlZigpKTsKLQotICAgICAgICBpZiAobWVkaWFUeXBlICYgT1dSX01FRElBX1RZUEVfQVVE
SU8pCi0gICAgICAgICAgICBhdWRpb1NvdXJjZXMuYXBwZW5kKG1lZGlhU291cmNlLnJlbGVhc2VO
b25OdWxsKCkpOwotICAgICAgICBlbHNlIGlmIChtZWRpYVR5cGUgJiBPV1JfTUVESUFfVFlQRV9W
SURFTykKLSAgICAgICAgICAgIHZpZGVvU291cmNlcy5hcHBlbmQobWVkaWFTb3VyY2UucmVsZWFz
ZU5vbk51bGwoKSk7Ci0KLSAgICB9Ci0KLSAgICBpZiAodmlkZW9Tb3VyY2VzLmlzRW1wdHkoKSAm
JiBhdWRpb1NvdXJjZXMuaXNFbXB0eSgpKQotICAgICAgICBtX2NvbXBsZXRpb25IYW5kbGVyKG51
bGxwdHIpOwotICAgIGVsc2UKLSAgICAgICAgbV9jb21wbGV0aW9uSGFuZGxlcihNZWRpYVN0cmVh
bVByaXZhdGU6OmNyZWF0ZShhdWRpb1NvdXJjZXMsIHZpZGVvU291cmNlcykpOwotCi19Ci0KLVJl
YWx0aW1lTWVkaWFTb3VyY2UqIFJlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJPd3I6OmZpcnN0U291
cmNlKFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGUgdHlwZSkKLXsKLSAgICBmb3IgKGF1dG8gaXRl
ciA9IG1fc291cmNlTWFwLmJlZ2luKCk7IGl0ZXIgIT0gbV9zb3VyY2VNYXAuZW5kKCk7ICsraXRl
cikgewotICAgICAgICBSZWZQdHI8UmVhbHRpbWVNZWRpYVNvdXJjZT4gc291cmNlID0gaXRlci0+
dmFsdWU7Ci0gICAgICAgIGlmIChzb3VyY2UtPnR5cGUoKSA9PSB0eXBlKQotICAgICAgICAgICAg
cmV0dXJuIHNvdXJjZS5nZXQoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQot
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVBTSkg
JiYgVVNFKE9QRU5XRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
ZWRpYXN0cmVhbS9vcGVud2VicnRjL1JlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJPd3IuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL29wZW53ZWJydGMvUmVhbHRpbWVNZWRp
YVNvdXJjZUNlbnRlck93ci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ODBkOTE4
MjEzMDM4MmY0MzAyZjEyNzhkYWJiZmEyNDgyYTMzNTMwLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3Ry
ZWFtL29wZW53ZWJydGMvUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlck93ci5oCisrKyAvZGV2L251
bGwKQEAgLTEsMTAxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgRXJpY3Nzb24g
QUIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNSBJZ2FsaWEgUy5M
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE1IE1ldHJvbG9naWNh
bC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqCi0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lcgotICogICAgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogICAgZGlzdHJpYnV0aW9uLgotICogMy4gTmVpdGhl
ciB0aGUgbmFtZSBvZiBFcmljc3NvbiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMK
LSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20gdGhpcwotICogICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShNRURJ
QV9TVFJFQU0pICYmIFVTRShPUEVOV0VCUlRDKQotCi0jaW5jbHVkZSAiQ2FwdHVyZURldmljZU1h
bmFnZXIuaCIKLSNpbmNsdWRlICJSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyLmgiCi0jaW5jbHVk
ZSAiUmVhbHRpbWVNZWRpYVNvdXJjZU93ci5oIgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBDYXB0dXJlRGV2aWNlOwotY2xhc3MgTWVkaWFT
dHJlYW1Qcml2YXRlOwotY2xhc3MgUmVhbHRpbWVNZWRpYVNvdXJjZTsKLWNsYXNzIE1lZGlhU3Ry
ZWFtU291cmNlc1F1ZXJ5Q2xpZW50OwotY2xhc3MgVHJhY2tTb3VyY2VJbmZvOwotCi1jbGFzcyBS
ZWFsdGltZU1lZGlhU291cmNlQ2VudGVyT3dyIGZpbmFsIDogcHVibGljIFJlYWx0aW1lTWVkaWFT
b3VyY2VDZW50ZXIgewotcHVibGljOgotICAgIFJlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJPd3Io
KTsKLSAgICB+UmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlck93cigpOwotCi0gICAgdm9pZCB2YWxp
ZGF0ZVJlcXVlc3RDb25zdHJhaW50cyhWYWxpZENvbnN0cmFpbnRzSGFuZGxlciYmIHZhbGlkSGFu
ZGxlciwgSW52YWxpZENvbnN0cmFpbnRzSGFuZGxlciYmIGludmFsaWRIYW5kbGVyLCBjb25zdCBN
ZWRpYUNvbnN0cmFpbnRzJiBhdWRpb0NvbnN0cmFpbnRzLCBjb25zdCBNZWRpYUNvbnN0cmFpbnRz
JiB2aWRlb0NvbnN0cmFpbnRzLCBTdHJpbmcmJikgZmluYWw7Ci0KLSAgICB2b2lkIGNyZWF0ZU1l
ZGlhU3RyZWFtKE5ld01lZGlhU3RyZWFtSGFuZGxlciYmLCBjb25zdCBTdHJpbmcmIGF1ZGlvRGV2
aWNlSUQsIGNvbnN0IFN0cmluZyYgdmlkZW9EZXZpY2VJRCwgY29uc3QgTWVkaWFDb25zdHJhaW50
cyogdmlkZW9Db25zdHJhaW50cywgY29uc3QgTWVkaWFDb25zdHJhaW50cyogYXVkaW9Db25zdHJh
aW50cykgZmluYWw7Ci0KLSAgICBWZWN0b3I8Q2FwdHVyZURldmljZT4gZ2V0TWVkaWFTdHJlYW1E
ZXZpY2VzKCkgZmluYWw7Ci0KLSAgICB2b2lkIG1lZGlhU291cmNlc0F2YWlsYWJsZShHTGlzdCog
c291cmNlcyk7Ci0KLXByaXZhdGU6Ci0gICAgUmVhbHRpbWVNZWRpYVNvdXJjZTo6QXVkaW9DYXB0
dXJlRmFjdG9yeSYgZGVmYXVsdEF1ZGlvRmFjdG9yeSgpIGZpbmFsIHsgcmV0dXJuIG1fZGVmYXVs
dEF1ZGlvRmFjdG9yeTsgfQotICAgIFJlYWx0aW1lTWVkaWFTb3VyY2U6OlZpZGVvQ2FwdHVyZUZh
Y3RvcnkmIGRlZmF1bHRWaWRlb0ZhY3RvcnkoKSBmaW5hbCB7IHJldHVybiBtX2RlZmF1bHRWaWRl
b0ZhY3Rvcnk7IH0KLSAgICBDYXB0dXJlRGV2aWNlTWFuYWdlciYgZGVmYXVsdEF1ZGlvQ2FwdHVy
ZURldmljZU1hbmFnZXIoKSBmaW5hbCB7IHJldHVybiBtX2RlZmF1bHRBdWRpb0NhcHR1cmVEZXZp
Y2VNYW5hZ2VyOyB9Ci0gICAgQ2FwdHVyZURldmljZU1hbmFnZXImIGRlZmF1bHRWaWRlb0NhcHR1
cmVEZXZpY2VNYW5hZ2VyKCkgZmluYWwgeyByZXR1cm4gbV9kZWZhdWx0VmlkZW9DYXB0dXJlRGV2
aWNlTWFuYWdlcjsgfQotCi0gICAgUmVhbHRpbWVNZWRpYVNvdXJjZSogZmlyc3RTb3VyY2UoUmVh
bHRpbWVNZWRpYVNvdXJjZTo6VHlwZSk7Ci0gICAgUmVhbHRpbWVNZWRpYVNvdXJjZU93ck1hcCBt
X3NvdXJjZU1hcDsKLSAgICBWYWxpZENvbnN0cmFpbnRzSGFuZGxlciBtX3ZhbGlkQ29uc3RyYWlu
dHNIYW5kbGVyOwotICAgIEludmFsaWRDb25zdHJhaW50c0hhbmRsZXIgbV9pbnZhbGlkQ29uc3Ry
YWludHNIYW5kbGVyOwotICAgIE5ld01lZGlhU3RyZWFtSGFuZGxlciBtX2NvbXBsZXRpb25IYW5k
bGVyOwotCi0gICAgY2xhc3MgQXVkaW9DYXB0dXJlRmFjdG9yeU93ciA6IHB1YmxpYyBSZWFsdGlt
ZU1lZGlhU291cmNlOjpBdWRpb0NhcHR1cmVGYWN0b3J5IHsKLSAgICBwcml2YXRlOgotICAgICAg
ICBDYXB0dXJlU291cmNlT3JFcnJvciBjcmVhdGVBdWRpb0NhcHR1cmVTb3VyY2UoY29uc3QgU3Ry
aW5nJiwgY29uc3QgTWVkaWFDb25zdHJhaW50cyopIGZpbmFsIHsgcmV0dXJuIHsgfTsgfQotICAg
IH07Ci0KLSAgICBjbGFzcyBWaWRlb0NhcHR1cmVGYWN0b3J5T3dyIDogcHVibGljIFJlYWx0aW1l
TWVkaWFTb3VyY2U6OlZpZGVvQ2FwdHVyZUZhY3RvcnkgewotICAgIHByaXZhdGU6Ci0gICAgICAg
IENhcHR1cmVTb3VyY2VPckVycm9yIGNyZWF0ZVZpZGVvQ2FwdHVyZVNvdXJjZShjb25zdCBTdHJp
bmcmLCBjb25zdCBNZWRpYUNvbnN0cmFpbnRzKikgZmluYWwgeyByZXR1cm4geyB9OyB9Ci0gICAg
fTsKLQotICAgIGNsYXNzIENhcHR1cmVEZXZpY2VNYW5hZ2VyT3dyIDogcHVibGljIENhcHR1cmVE
ZXZpY2VNYW5hZ2VyIHsKLSAgICBwcml2YXRlOgotICAgICAgICBWZWN0b3I8Q2FwdHVyZURldmlj
ZT4mIGNhcHR1cmVEZXZpY2VzKCkgZmluYWwgeyByZXR1cm4gbV9kZXZpY2VzOyB9Ci0KLSAgICAg
ICAgVmVjdG9yPENhcHR1cmVEZXZpY2U+IG1fZGV2aWNlczsKLSAgICB9OwotCi0gICAgQXVkaW9D
YXB0dXJlRmFjdG9yeU93ciBtX2RlZmF1bHRBdWRpb0ZhY3Rvcnk7Ci0gICAgVmlkZW9DYXB0dXJl
RmFjdG9yeU93ciBtX2RlZmF1bHRWaWRlb0ZhY3Rvcnk7Ci0gICAgQ2FwdHVyZURldmljZU1hbmFn
ZXJPd3IgbV9kZWZhdWx0QXVkaW9DYXB0dXJlRGV2aWNlTWFuYWdlcjsKLSAgICBDYXB0dXJlRGV2
aWNlTWFuYWdlck93ciBtX2RlZmF1bHRWaWRlb0NhcHR1cmVEZXZpY2VNYW5hZ2VyOwotfTsKLQot
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVBTSkg
JiYgVVNFKE9QRU5XRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
ZWRpYXN0cmVhbS9vcGVud2VicnRjL1JlYWx0aW1lTWVkaWFTb3VyY2VPd3IuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vb3BlbndlYnJ0Yy9SZWFsdGltZU1lZGlhU291
cmNlT3dyLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWU3NDk5ZDM4MDA2NmYx
NGFiNmM5Y2IwMDg3YmU0YjZkZDA4Nzg1Zi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9vcGVu
d2VicnRjL1JlYWx0aW1lTWVkaWFTb3VyY2VPd3IuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNjAg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBJZ2FsaWEgUy5MCi0gKgotICogQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAq
IG1ldDoKLSAqCi0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICoKLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2Yg
dGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
Ci0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAq
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCi0gKiBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShNRURJ
QV9TVFJFQU0pICYmIFVTRShPUEVOV0VCUlRDKQotI2luY2x1ZGUgIlJlYWx0aW1lTWVkaWFTb3Vy
Y2VPd3IuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jb25zdCBSZWFsdGltZU1lZGlhU291
cmNlU2V0dGluZ3MmIFJlYWx0aW1lTWVkaWFTb3VyY2VPd3I6OnNldHRpbmdzKCkgY29uc3QKLXsK
LSAgICBjb25zdF9jYXN0PFJlYWx0aW1lTWVkaWFTb3VyY2VPd3ImPigqdGhpcykuaW5pdGlhbGl6
ZVNldHRpbmdzKCk7Ci0gICAgcmV0dXJuIG1fY3VycmVudFNldHRpbmdzOwotfQotCi1SZWFsdGlt
ZU1lZGlhU291cmNlU3VwcG9ydGVkQ29uc3RyYWludHMmIFJlYWx0aW1lTWVkaWFTb3VyY2VPd3I6
OnN1cHBvcnRlZENvbnN0cmFpbnRzKCkKLXsKLSAgICBpZiAobV9zdXBwb3J0ZWRDb25zdHJhaW50
cy5zdXBwb3J0c0RldmljZUlkKCkpCi0gICAgICAgIHJldHVybiBtX3N1cHBvcnRlZENvbnN0cmFp
bnRzOwotCi0gICAgbV9zdXBwb3J0ZWRDb25zdHJhaW50cy5zZXRTdXBwb3J0c0RldmljZUlkKHRy
dWUpOwotICAgIGluaXRpYWxpemVTdXBwb3J0ZWRDb25zdHJhaW50cyhtX3N1cHBvcnRlZENvbnN0
cmFpbnRzKTsKLQotICAgIHJldHVybiBtX3N1cHBvcnRlZENvbnN0cmFpbnRzOwotfQotCi19IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFNKSAmJiBV
U0UoT1BFTldFQlJUQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlh
c3RyZWFtL29wZW53ZWJydGMvUmVhbHRpbWVNZWRpYVNvdXJjZU93ci5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vb3BlbndlYnJ0Yy9SZWFsdGltZU1lZGlhU291cmNlT3dy
LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdjZmJmNzhmMjU4ZDkwOGE1NDRiOTli
MWVjOTgyODRiNTMzZTRhODQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vb3BlbndlYnJ0Yy9S
ZWFsdGltZU1lZGlhU291cmNlT3dyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw5OSArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDE1IElnYWxpYSBTLkwKLSAqIENvcHlyaWdodCAoQykgMjAx
NSBNZXRyb2xvZ2ljYWwKLSAqCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlIG5h
bWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIEhPTERFUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
LSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBSZWFs
dGltZU1lZGlhU291cmNlT3dyX2gKLSNkZWZpbmUgUmVhbHRpbWVNZWRpYVNvdXJjZU93cl9oCi0K
LSNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKSAmJiBVU0UoT1BFTldFQlJUQykKLQotI2luY2x1ZGUg
IkdSZWZQdHJHU3RyZWFtZXIuaCIKLSNpbmNsdWRlICJSZWFsdGltZU1lZGlhU291cmNlLmgiCi0j
aW5jbHVkZSA8b3dyL293cl9tZWRpYV9zb3VyY2UuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5o
PgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcu
aD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBSZWFsdGltZU1lZGlhU291cmNlQ2Fw
YWJpbGl0aWVzOwotCi1jbGFzcyBSZWFsdGltZU1lZGlhU291cmNlT3dyIDogcHVibGljIFJlYWx0
aW1lTWVkaWFTb3VyY2UgewotcHVibGljOgotUmVhbHRpbWVNZWRpYVNvdXJjZU93cihPd3JNZWRp
YVNvdXJjZSogbWVkaWFTb3VyY2UsIGNvbnN0IFN0cmluZyYgaWQsIFJlYWx0aW1lTWVkaWFTb3Vy
Y2U6OlR5cGUgdHlwZSwgY29uc3QgU3RyaW5nJiBuYW1lKQotICAgIDogUmVhbHRpbWVNZWRpYVNv
dXJjZShpZCwgdHlwZSwgbmFtZSkKLSAgICAsIG1fbWVkaWFTb3VyY2UobWVkaWFTb3VyY2UpCi0g
ICAgewotICAgICAgICBpZiAoIW1lZGlhU291cmNlKQotICAgICAgICAgICAgbm90aWZ5TXV0ZWRD
aGFuZ2UodHJ1ZSk7Ci0gICAgfQotCi1SZWFsdGltZU1lZGlhU291cmNlT3dyKGNvbnN0IFN0cmlu
ZyYgaWQsIFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGUgdHlwZSwgY29uc3QgU3RyaW5nJiBuYW1l
KQotICAgIDogUmVhbHRpbWVNZWRpYVNvdXJjZShpZCwgdHlwZSwgbmFtZSkKLSAgICAsIG1fbWVk
aWFTb3VyY2UobnVsbHB0cikKLSAgICB7Ci0gICAgfQotCi0gICAgdmlydHVhbCB+UmVhbHRpbWVN
ZWRpYVNvdXJjZU93cigpIHsgfQotCi0gICAgdm9pZCBzd2FwT3V0U2hhbGxvd1NvdXJjZShPd3JN
ZWRpYVNvdXJjZSYgcmVhbFNvdXJjZSkKLSAgICB7Ci0gICAgICAgIG1fbWVkaWFTb3VyY2UgPSAm
cmVhbFNvdXJjZTsKLSAgICAgICAgc2V0TXV0ZWQoZmFsc2UpOwotICAgIH0KLQotICAgIGNvbnN0
IFJlYWx0aW1lTWVkaWFTb3VyY2VDYXBhYmlsaXRpZXMmIGNhcGFiaWxpdGllcygpIGNvbnN0IG92
ZXJyaWRlIHsgcmV0dXJuIG1fY2FwYWJpbGl0aWVzOyB9Ci0gICAgY29uc3QgUmVhbHRpbWVNZWRp
YVNvdXJjZVNldHRpbmdzJiBzZXR0aW5ncygpIGNvbnN0IG92ZXJyaWRlOwotCi0gICAgT3dyTWVk
aWFTb3VyY2UqIG1lZGlhU291cmNlKCkgY29uc3QgeyByZXR1cm4gbV9tZWRpYVNvdXJjZTsgfQot
Ci1wcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCB2b2lkIGluaXRpYWxpemVTZXR0aW5ncygpIHsgfTsK
LSAgICB2aXJ0dWFsIHZvaWQgaW5pdGlhbGl6ZVN1cHBvcnRlZENvbnN0cmFpbnRzKFJlYWx0aW1l
TWVkaWFTb3VyY2VTdXBwb3J0ZWRDb25zdHJhaW50cyYpIHsgfTsKLSAgICBSZWFsdGltZU1lZGlh
U291cmNlU3VwcG9ydGVkQ29uc3RyYWludHMmIHN1cHBvcnRlZENvbnN0cmFpbnRzKCk7Ci0KLSAg
ICBSZWFsdGltZU1lZGlhU291cmNlU2V0dGluZ3MgbV9jdXJyZW50U2V0dGluZ3M7Ci0KLXByaXZh
dGU6Ci0gICAgUmVhbHRpbWVNZWRpYVNvdXJjZVN1cHBvcnRlZENvbnN0cmFpbnRzIG1fc3VwcG9y
dGVkQ29uc3RyYWludHM7Ci0gICAgUmVhbHRpbWVNZWRpYVNvdXJjZUNhcGFiaWxpdGllcyBtX2Nh
cGFiaWxpdGllczsKLSAgICBPd3JNZWRpYVNvdXJjZSogbV9tZWRpYVNvdXJjZTsKLX07Ci0KLXR5
cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxSZWFsdGltZU1lZGlhU291cmNlT3dyPj4gUmVh
bHRpbWVNZWRpYVNvdXJjZU93ck1hcDsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5k
aWYgLy8gRU5BQkxFKE1FRElBX1NUUkVBTSkgJiYgVVNFKE9QRU5XRUJSVEMpCi0KLSNlbmRpZiAv
LyBSZWFsdGltZU1lZGlhU291cmNlT3dyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21lZGlhc3RyZWFtL29wZW53ZWJydGMvUmVhbHRpbWVWaWRlb1NvdXJjZU93ci5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vb3BlbndlYnJ0Yy9SZWFsdGltZVZp
ZGVvU291cmNlT3dyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQxOGVmODRhNzFh
NTczNDdlODVkMzUyODM2OWUyNzljN2E2NmY0NTQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0v
b3BlbndlYnJ0Yy9SZWFsdGltZVZpZGVvU291cmNlT3dyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw4
MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE1LDIwMTYgSWdhbGlhIFMuTAotICog
Q29weXJpZ2h0IChDKSAyMDE1IE1ldHJvbG9naWNhbAotICoKLSAqIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQg
aG9sZGVyIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O
VFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAot
ICogSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pICYmIFVTRShPUEVO
V0VCUlRDKQotCi0jaW5jbHVkZSAiUmVhbHRpbWVNZWRpYVNvdXJjZU93ci5oIgotCi1uYW1lc3Bh
Y2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFJlYWx0aW1lVmlkZW9Tb3VyY2VPd3IgOiBwdWJsaWMgUmVh
bHRpbWVNZWRpYVNvdXJjZU93ciB7Ci1wdWJsaWM6Ci1SZWFsdGltZVZpZGVvU291cmNlT3dyKE93
ck1lZGlhU291cmNlKiBtZWRpYVNvdXJjZSwgY29uc3QgU3RyaW5nJiBpZCwgUmVhbHRpbWVNZWRp
YVNvdXJjZTo6VHlwZSB0eXBlLCBjb25zdCBTdHJpbmcmIG5hbWUpCi0gICAgOiBSZWFsdGltZU1l
ZGlhU291cmNlT3dyKG1lZGlhU291cmNlLCBpZCwgdHlwZSwgbmFtZSkKLSAgICB7Ci0gICAgfQot
Ci1SZWFsdGltZVZpZGVvU291cmNlT3dyKGNvbnN0IFN0cmluZyYgaWQsIFJlYWx0aW1lTWVkaWFT
b3VyY2U6OlR5cGUgdHlwZSwgY29uc3QgU3RyaW5nJiBuYW1lKQotICAgIDogUmVhbHRpbWVNZWRp
YVNvdXJjZU93cihpZCwgdHlwZSwgbmFtZSkKLSAgICB7Ci0gICAgfQotCi0gICAgdmlydHVhbCB+
UmVhbHRpbWVWaWRlb1NvdXJjZU93cigpIHsgfQotCi0gICAgYm9vbCBhcHBseVNpemUoY29uc3Qg
SW50U2l6ZSYpIGZpbmFsIHsgcmV0dXJuIHRydWU7IH0KLQotcHJvdGVjdGVkOgotICAgIHZvaWQg
aW5pdGlhbGl6ZVNldHRpbmdzKCkgZmluYWwgewotICAgICAgICBpZiAobV9jdXJyZW50U2V0dGlu
Z3MuZGV2aWNlSWQoKS5pc0VtcHR5KCkpCi0gICAgICAgICAgICBtX2N1cnJlbnRTZXR0aW5ncy5z
ZXRTdXBwb3J0ZWRDb25zdHJhaW50cyhzdXBwb3J0ZWRDb25zdHJhaW50cygpKTsKLQotICAgICAg
ICBtX2N1cnJlbnRTZXR0aW5ncy5zZXREZXZpY2VJZChpZCgpKTsKLQotICAgICAgICBtX2N1cnJl
bnRTZXR0aW5ncy5zZXRGcmFtZVJhdGUoZnJhbWVSYXRlKCkpOwotICAgICAgICBtX2N1cnJlbnRT
ZXR0aW5ncy5zZXRXaWR0aChzaXplKCkud2lkdGgoKSk7Ci0gICAgICAgIG1fY3VycmVudFNldHRp
bmdzLnNldEhlaWdodChzaXplKCkuaGVpZ2h0KCkpOwotICAgIH0KLQotICAgIHZvaWQgaW5pdGlh
bGl6ZVN1cHBvcnRlZENvbnN0cmFpbnRzKFJlYWx0aW1lTWVkaWFTb3VyY2VTdXBwb3J0ZWRDb25z
dHJhaW50cyYgc3VwcG9ydGVkQ29uc3RyYWludHMpIGZpbmFsIHsKLSAgICAgICAgc3VwcG9ydGVk
Q29uc3RyYWludHMuc2V0U3VwcG9ydHNGYWNpbmdNb2RlKFJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0
aW5nczo6VW5rbm93bik7Ci0gICAgICAgIHN1cHBvcnRlZENvbnN0cmFpbnRzLnNldFN1cHBvcnRz
V2lkdGgodHJ1ZSk7Ci0gICAgICAgIHN1cHBvcnRlZENvbnN0cmFpbnRzLnNldFN1cHBvcnRzSGVp
Z2h0KHRydWUpOwotICAgICAgICBzdXBwb3J0ZWRDb25zdHJhaW50cy5zZXRTdXBwb3J0c0FzcGVj
dFJhdGlvKHRydWUpOwotICAgICAgICBzdXBwb3J0ZWRDb25zdHJhaW50cy5zZXRTdXBwb3J0c0Zy
YW1lUmF0ZSh0cnVlKTsKLSAgICB9Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNl
bmRpZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFNKSAmJiBVU0UoT1BFTldFQlJUQykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svTW9ja01lZGlhRW5kcG9pbnQuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9Nb2NrTWVkaWFFbmRwb2ludC5jcHAKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBlOWI0MWU1YzExOTVjNmUzZWMxMzcwNzVlYTRmZmE2
Njg2YzdhYWYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9Nb2NrTWVkaWFFbmRwb2ludC5jcHAKKysrIC9k
ZXYvbnVsbApAQCAtMSwzNDYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBFcmlj
c3NvbiBBQi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIKLSAqICAgIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqICAgIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIE5l
aXRoZXIgdGhlIG5hbWUgb2YgRXJpY3Nzb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0
b3JzCi0gKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZCBmcm9tIHRoaXMKLSAqICAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAq
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYg
RU5BQkxFKFdFQl9SVEMpCi0jaW5jbHVkZSAiTW9ja01lZGlhRW5kcG9pbnQuaCIKLQotI2luY2x1
ZGUgIk1lZGlhRW5kcG9pbnRTZXNzaW9uQ29uZmlndXJhdGlvbi5oIgotI2luY2x1ZGUgIk1lZGlh
UGF5bG9hZC5oIgotI2luY2x1ZGUgIk1vY2tSZWFsdGltZUF1ZGlvU291cmNlLmgiCi0jaW5jbHVk
ZSAiTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2UuaCIKLSNpbmNsdWRlICJSVENEYXRhQ2hhbm5lbEhh
bmRsZXJNb2NrLmgiCi0jaW5jbHVkZSAiUmVhbHRpbWVNZWRpYVNvdXJjZS5oIgotI2luY2x1ZGUg
PHd0Zi9NYWluVGhyZWFkLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RhdGljIGNvbnN0
IGNoYXIqIGZpbmdlcnByaW50ID0gIjhCOjg3OjA5OjhBOjVEOkMyOkYzOjMzOkVGOkM1OkIxOkY2
Ojg0OjNBOjNEOkQ2OkEzOkUyOjlDOjE3OjRDOkU3OjQ2OjNCOjFCOkNFOjg0Ojk4OkREOjhFOkFG
OjdCIjsKLXN0YXRpYyBjb25zdCBjaGFyKiBmaW5nZXJwcmludEZ1bmN0aW9uID0gInNoYS0yNTYi
OwotCi1zdGQ6OnVuaXF1ZV9wdHI8TWVkaWFFbmRwb2ludD4gTW9ja01lZGlhRW5kcG9pbnQ6OmNy
ZWF0ZShNZWRpYUVuZHBvaW50Q2xpZW50JiBjbGllbnQpCi17Ci0gICAgcmV0dXJuIHN0ZDo6dW5p
cXVlX3B0cjxNZWRpYUVuZHBvaW50PihuZXcgTW9ja01lZGlhRW5kcG9pbnQoY2xpZW50KSk7Ci19
Ci0KLU1vY2tNZWRpYUVuZHBvaW50OjpNb2NrTWVkaWFFbmRwb2ludChNZWRpYUVuZHBvaW50Q2xp
ZW50JiBjbGllbnQpCi0gICAgOiBtX2NsaWVudChjbGllbnQpCi0gICAgLCBtX2ljZUNhbmRpZGF0
ZVRpbWVyKCp0aGlzLCAmTW9ja01lZGlhRW5kcG9pbnQ6OmljZUNhbmRpZGF0ZVRpbWVyRmlyZWQp
Ci0gICAgLCBtX2ljZVRyYW5zcG9ydFRpbWVyKCp0aGlzLCAmTW9ja01lZGlhRW5kcG9pbnQ6Omlj
ZVRyYW5zcG9ydFRpbWVyRmlyZWQpCi0gICAgLCBtX3VubXV0ZVRpbWVyKCp0aGlzLCAmTW9ja01l
ZGlhRW5kcG9pbnQ6OnVubXV0ZVRpbWVyRmlyZWQpCi17Ci19Ci0KLU1vY2tNZWRpYUVuZHBvaW50
Ojp+TW9ja01lZGlhRW5kcG9pbnQoKQotewotICAgIHN0b3AoKTsKLX0KLQotc3RkOjp1bmlxdWVf
cHRyPFJUQ0RhdGFDaGFubmVsSGFuZGxlcj4gTW9ja01lZGlhRW5kcG9pbnQ6OmNyZWF0ZURhdGFD
aGFubmVsSGFuZGxlcihjb25zdCBTdHJpbmcmIGxhYmVsLCBjb25zdCBSVENEYXRhQ2hhbm5lbElu
aXQmIG9wdGlvbnMpCi17Ci0gICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8UlRDRGF0YUNoYW5u
ZWxIYW5kbGVyTW9jaz4obGFiZWwsIG9wdGlvbnMpOwotfQotCi12b2lkIE1vY2tNZWRpYUVuZHBv
aW50OjpnZW5lcmF0ZUR0bHNJbmZvKCkKLXsKLSAgICBhdXRvIHdlYWtUaGlzID0gbV93ZWFrUHRy
RmFjdG9yeS5jcmVhdGVXZWFrUHRyKCp0aGlzKTsKLQotICAgIGNhbGxPbk1haW5UaHJlYWQoW3dl
YWtUaGlzXSB7Ci0gICAgICAgIGlmICh3ZWFrVGhpcykKLSAgICAgICAgICAgIHdlYWtUaGlzLT5t
X2NsaWVudC5nb3REdGxzRmluZ2VycHJpbnQoZmluZ2VycHJpbnQsIGZpbmdlcnByaW50RnVuY3Rp
b24pOwotICAgIH0pOwotfQotCi1NZWRpYVBheWxvYWRWZWN0b3IgTW9ja01lZGlhRW5kcG9pbnQ6
OmdldERlZmF1bHRBdWRpb1BheWxvYWRzKCkKLXsKLSAgICBNZWRpYVBheWxvYWRWZWN0b3IgcGF5
bG9hZHM7Ci0KLSAgICBNZWRpYVBheWxvYWQgcGF5bG9hZDE7Ci0gICAgcGF5bG9hZDEudHlwZSA9
IDExMTsKLSAgICBwYXlsb2FkMS5lbmNvZGluZ05hbWUgPSAiT1BVUyI7Ci0gICAgcGF5bG9hZDEu
Y2xvY2tSYXRlID0gNDgwMDA7Ci0gICAgcGF5bG9hZDEuY2hhbm5lbHMgPSAyOwotICAgIHBheWxv
YWRzLmFwcGVuZChXVEZNb3ZlKHBheWxvYWQxKSk7Ci0KLSAgICBNZWRpYVBheWxvYWQgcGF5bG9h
ZDI7Ci0gICAgcGF5bG9hZDIudHlwZSA9IDg7Ci0gICAgcGF5bG9hZDIuZW5jb2RpbmdOYW1lID0g
IlBDTUEiOwotICAgIHBheWxvYWQyLmNsb2NrUmF0ZSA9IDgwMDA7Ci0gICAgcGF5bG9hZDIuY2hh
bm5lbHMgPSAxOwotICAgIHBheWxvYWRzLmFwcGVuZChXVEZNb3ZlKHBheWxvYWQyKSk7Ci0KLSAg
ICBNZWRpYVBheWxvYWQgcGF5bG9hZDM7Ci0gICAgcGF5bG9hZDMudHlwZSA9IDA7Ci0gICAgcGF5
bG9hZDMuZW5jb2RpbmdOYW1lID0gIlBDTVUiOwotICAgIHBheWxvYWQzLmNsb2NrUmF0ZSA9IDgw
MDA7Ci0gICAgcGF5bG9hZDMuY2hhbm5lbHMgPSAxOwotICAgIHBheWxvYWRzLmFwcGVuZChXVEZN
b3ZlKHBheWxvYWQzKSk7Ci0KLSAgICByZXR1cm4gcGF5bG9hZHM7Ci19Ci0KLU1lZGlhUGF5bG9h
ZFZlY3RvciBNb2NrTWVkaWFFbmRwb2ludDo6Z2V0RGVmYXVsdFZpZGVvUGF5bG9hZHMoKQotewot
ICAgIE1lZGlhUGF5bG9hZFZlY3RvciBwYXlsb2FkczsKLQotICAgIE1lZGlhUGF5bG9hZCBwYXls
b2FkMTsKLSAgICBwYXlsb2FkMS50eXBlID0gMTAzOwotICAgIHBheWxvYWQxLmVuY29kaW5nTmFt
ZSA9ICJIMjY0IjsKLSAgICBwYXlsb2FkMS5jbG9ja1JhdGUgPSA5MDAwMDsKLSAgICBwYXlsb2Fk
MS5jY21maXIgPSB0cnVlOwotICAgIHBheWxvYWQxLm5hY2twbGkgPSB0cnVlOwotICAgIHBheWxv
YWQxLmFkZFBhcmFtZXRlcigicGFja2V0aXphdGlvbk1vZGUiLCAxKTsKLSAgICBwYXlsb2Fkcy5h
cHBlbmQoV1RGTW92ZShwYXlsb2FkMSkpOwotCi0gICAgTWVkaWFQYXlsb2FkIHBheWxvYWQyOwot
ICAgIHBheWxvYWQyLnR5cGUgPSAxMDA7Ci0gICAgcGF5bG9hZDIuZW5jb2RpbmdOYW1lID0gIlZQ
OCI7Ci0gICAgcGF5bG9hZDIuY2xvY2tSYXRlID0gOTAwMDA7Ci0gICAgcGF5bG9hZDIuY2NtZmly
ID0gdHJ1ZTsKLSAgICBwYXlsb2FkMi5uYWNrcGxpID0gdHJ1ZTsKLSAgICBwYXlsb2FkMi5uYWNr
ID0gdHJ1ZTsKLSAgICBwYXlsb2Fkcy5hcHBlbmQoV1RGTW92ZShwYXlsb2FkMikpOwotCi0gICAg
TWVkaWFQYXlsb2FkIHBheWxvYWQzOwotICAgIHBheWxvYWQzLnR5cGUgPSAxMjA7Ci0gICAgcGF5
bG9hZDMuZW5jb2RpbmdOYW1lID0gIlJUWCI7Ci0gICAgcGF5bG9hZDMuY2xvY2tSYXRlID0gOTAw
MDA7Ci0gICAgcGF5bG9hZDMuYWRkUGFyYW1ldGVyKCJhcHQiLCAxMDApOwotICAgIHBheWxvYWQz
LmFkZFBhcmFtZXRlcigicnR4VGltZSIsIDIwMCk7Ci0gICAgcGF5bG9hZHMuYXBwZW5kKFdURk1v
dmUocGF5bG9hZDMpKTsKLQotICAgIHJldHVybiBwYXlsb2FkczsKLX0KLQotTWVkaWFQYXlsb2Fk
VmVjdG9yIE1vY2tNZWRpYUVuZHBvaW50OjpmaWx0ZXJQYXlsb2Fkcyhjb25zdCBNZWRpYVBheWxv
YWRWZWN0b3ImIHJlbW90ZVBheWxvYWRzLCBjb25zdCBNZWRpYVBheWxvYWRWZWN0b3ImIGRlZmF1
bHRQYXlsb2FkcykKLXsKLSAgICBNZWRpYVBheWxvYWRWZWN0b3IgZmlsdGVyZWRQYXlsb2FkczsK
LQotICAgIGZvciAoYXV0byYgcmVtb3RlUGF5bG9hZCA6IHJlbW90ZVBheWxvYWRzKSB7Ci0gICAg
ICAgIGNvbnN0IE1lZGlhUGF5bG9hZCogZGVmYXVsdFBheWxvYWQgPSBudWxscHRyOwotICAgICAg
ICBmb3IgKGF1dG8mIHBheWxvYWQgOiBkZWZhdWx0UGF5bG9hZHMpIHsKLSAgICAgICAgICAgIGlm
IChwYXlsb2FkLmVuY29kaW5nTmFtZSA9PSByZW1vdGVQYXlsb2FkLmVuY29kaW5nTmFtZS5jb252
ZXJ0VG9BU0NJSVVwcGVyY2FzZSgpKSB7Ci0gICAgICAgICAgICAgICAgZGVmYXVsdFBheWxvYWQg
PSAmcGF5bG9hZDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotICAgICAgICBpZiAoIWRlZmF1bHRQYXlsb2FkKQotICAgICAgICAgICAgY29udGludWU7
Ci0KLSAgICAgICAgaWYgKGRlZmF1bHRQYXlsb2FkLT5wYXJhbWV0ZXJzLmNvbnRhaW5zKCJwYWNr
ZXRpemF0aW9uTW9kZSIpICYmIHJlbW90ZVBheWxvYWQucGFyYW1ldGVycy5jb250YWlucygicGFj
a2V0aXphdGlvbk1vZGUiKQotICAgICAgICAgICAgJiYgKGRlZmF1bHRQYXlsb2FkLT5wYXJhbWV0
ZXJzLmdldCgicGFja2V0aXphdGlvbk1vZGUiKSAhPSBkZWZhdWx0UGF5bG9hZC0+cGFyYW1ldGVy
cy5nZXQoInBhY2tldGl6YXRpb25Nb2RlIikpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAg
ICAgICAgZmlsdGVyZWRQYXlsb2Fkcy5hcHBlbmQocmVtb3RlUGF5bG9hZCk7Ci0gICAgfQotCi0g
ICAgcmV0dXJuIGZpbHRlcmVkUGF5bG9hZHM7Ci19Ci0KLU1lZGlhRW5kcG9pbnQ6OlVwZGF0ZVJl
c3VsdCBNb2NrTWVkaWFFbmRwb2ludDo6dXBkYXRlUmVjZWl2ZUNvbmZpZ3VyYXRpb24oTWVkaWFF
bmRwb2ludFNlc3Npb25Db25maWd1cmF0aW9uKiBjb25maWd1cmF0aW9uLCBib29sIGlzSW5pdGlh
dG9yKQotewotICAgIFVOVVNFRF9QQVJBTShpc0luaXRpYXRvcik7Ci0KLSAgICB1cGRhdGVDb25m
aWd1cmF0aW9uTWlkcygqY29uZmlndXJhdGlvbik7Ci0gICAgcmV0dXJuIFVwZGF0ZVJlc3VsdDo6
U3VjY2VzczsKLX0KLQotTWVkaWFFbmRwb2ludDo6VXBkYXRlUmVzdWx0IE1vY2tNZWRpYUVuZHBv
aW50Ojp1cGRhdGVTZW5kQ29uZmlndXJhdGlvbihNZWRpYUVuZHBvaW50U2Vzc2lvbkNvbmZpZ3Vy
YXRpb24qIGNvbmZpZ3VyYXRpb24sIGNvbnN0IFJlYWx0aW1lTWVkaWFTb3VyY2VNYXAmIHNlbmRT
b3VyY2VNYXAsIGJvb2wgaXNJbml0aWF0b3IpCi17Ci0gICAgVU5VU0VEX1BBUkFNKHNlbmRTb3Vy
Y2VNYXApOwotICAgIFVOVVNFRF9QQVJBTShpc0luaXRpYXRvcik7Ci0KLSAgICB1cGRhdGVDb25m
aWd1cmF0aW9uTWlkcygqY29uZmlndXJhdGlvbik7Ci0gICAgcmV0dXJuIFVwZGF0ZVJlc3VsdDo6
U3VjY2VzczsKLX0KLQotdm9pZCBNb2NrTWVkaWFFbmRwb2ludDo6YWRkUmVtb3RlQ2FuZGlkYXRl
KGNvbnN0IEljZUNhbmRpZGF0ZSYgY2FuZGlkYXRlLCBjb25zdCBTdHJpbmcmIG1pZCwgY29uc3Qg
U3RyaW5nJiB1ZnJhZywgY29uc3QgU3RyaW5nJiBwYXNzd29yZCkKLXsKLSAgICBVTlVTRURfUEFS
QU0oY2FuZGlkYXRlKTsKLSAgICBVTlVTRURfUEFSQU0obWlkKTsKLSAgICBVTlVTRURfUEFSQU0o
dWZyYWcpOwotICAgIFVOVVNFRF9QQVJBTShwYXNzd29yZCk7Ci19Ci0KLVJlZjxSZWFsdGltZU1l
ZGlhU291cmNlPiBNb2NrTWVkaWFFbmRwb2ludDo6Y3JlYXRlTXV0ZWRSZW1vdGVTb3VyY2UoY29u
c3QgU3RyaW5nJiBtaWQsIFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGUgdHlwZSkKLXsKLSAgICBS
ZWZQdHI8UmVhbHRpbWVNZWRpYVNvdXJjZT4gc291cmNlOwotCi0gICAgc3dpdGNoICh0eXBlKSB7
Ci0gICAgY2FzZSBSZWFsdGltZU1lZGlhU291cmNlOjpUeXBlOjpBdWRpbzoKLSAgICAgICAgc291
cmNlID0gTW9ja1JlYWx0aW1lQXVkaW9Tb3VyY2U6OmNyZWF0ZU11dGVkKCJyZW1vdGUgYXVkaW8i
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBSZWFsdGltZU1lZGlhU291cmNlOjpUeXBlOjpW
aWRlbzoKLSAgICAgICAgc291cmNlID0gTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2U6OmNyZWF0ZU11
dGVkKCJyZW1vdGUgdmlkZW8iKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBSZWFsdGltZU1l
ZGlhU291cmNlOjpUeXBlOjpOb25lOgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAg
ICB9Ci0KLSAgICBtX211dGVkUmVtb3RlU291cmNlcy5zZXQobWlkLCBzb3VyY2UpOwotICAgIHJl
dHVybiBzb3VyY2UucmVsZWFzZU5vbk51bGwoKTsKLX0KLQotdm9pZCBNb2NrTWVkaWFFbmRwb2lu
dDo6cmVwbGFjZVNlbmRTb3VyY2UoUmVhbHRpbWVNZWRpYVNvdXJjZSYgbmV3U291cmNlLCBjb25z
dCBTdHJpbmcmIG1pZCkKLXsKLSAgICBVTlVTRURfUEFSQU0obmV3U291cmNlKTsKLSAgICBVTlVT
RURfUEFSQU0obWlkKTsKLX0KLQotdm9pZCBNb2NrTWVkaWFFbmRwb2ludDo6cmVwbGFjZU11dGVk
UmVtb3RlU291cmNlTWlkKGNvbnN0IFN0cmluZyYgb2xkTWlkLCBjb25zdCBTdHJpbmcmIG5ld01p
ZCkKLXsKLSAgICBSZWZQdHI8UmVhbHRpbWVNZWRpYVNvdXJjZT4gcmVtb3RlU291cmNlID0gbV9t
dXRlZFJlbW90ZVNvdXJjZXMudGFrZShvbGRNaWQpOwotICAgIG1fbXV0ZWRSZW1vdGVTb3VyY2Vz
LnNldChuZXdNaWQsIFdURk1vdmUocmVtb3RlU291cmNlKSk7Ci19Ci0KLXZvaWQgTW9ja01lZGlh
RW5kcG9pbnQ6OnN0b3AoKQotewotfQotCi12b2lkIE1vY2tNZWRpYUVuZHBvaW50OjplbXVsYXRl
UGxhdGZvcm1FdmVudChjb25zdCBTdHJpbmcmIGFjdGlvbikKLXsKLSAgICBpZiAoYWN0aW9uID09
ICJkaXNwYXRjaC1mYWtlLWljZS1jYW5kaWRhdGVzIikKLSAgICAgICAgZGlzcGF0Y2hGYWtlSWNl
Q2FuZGlkYXRlcygpOwotICAgIGVsc2UgaWYgKGFjdGlvbiA9PSAic3RlcC1pY2UtdHJhbnNwb3J0
LXN0YXRlcyIpCi0gICAgICAgIHN0ZXBJY2VUcmFuc3BvcnRTdGF0ZXMoKTsKLSAgICBlbHNlIGlm
IChhY3Rpb24gPT0gInVubXV0ZS1yZW1vdGUtc291cmNlcy1ieS1taWQiKQotICAgICAgICB1bm11
dGVSZW1vdGVTb3VyY2VzQnlNaWQoKTsKLX0KLQotdm9pZCBNb2NrTWVkaWFFbmRwb2ludDo6dXBk
YXRlQ29uZmlndXJhdGlvbk1pZHMoY29uc3QgTWVkaWFFbmRwb2ludFNlc3Npb25Db25maWd1cmF0
aW9uJiBjb25maWd1cmF0aW9uKQotewotICAgIFZlY3RvcjxTdHJpbmc+IG1pZHM7Ci0gICAgZm9y
IChhdXRvJiBtZWRpYURlc2NyaXB0aW9uIDogY29uZmlndXJhdGlvbi5tZWRpYURlc2NyaXB0aW9u
cygpKQotICAgICAgICBtaWRzLmFwcGVuZChtZWRpYURlc2NyaXB0aW9uLm1pZCk7Ci0gICAgbV9t
aWRzLnN3YXAobWlkcyk7Ci19Ci0KLXZvaWQgTW9ja01lZGlhRW5kcG9pbnQ6OmRpc3BhdGNoRmFr
ZUljZUNhbmRpZGF0ZXMoKQotewotICAgIG1fZmFrZUljZUNhbmRpZGF0ZXMuYXBwZW5kKHsgImhv
c3QiLCAiMSIsIDEsICJVRFAiLCAyMDEzMjY2NDMxLCAiMTkyLjE2OC4wLjEwMCIsIDM4ODM4LCB7
IH0sIHsgfSwgMCB9KTsKLSAgICBtX2Zha2VJY2VDYW5kaWRhdGVzLmFwcGVuZCh7ICJob3N0Iiwg
IjIiLCAxLCAiVENQIiwgMTAxOTIxNjM4MywgIjE5Mi4xNjguMC4xMDAiLCA5LCAiYWN0aXZlIiwg
eyB9LCAwIH0pOwotICAgIG1fZmFrZUljZUNhbmRpZGF0ZXMuYXBwZW5kKHsgInNyZmx4IiwgIjMi
LCAxLCAiVURQIiwgMTY3NzcyMjExMSwgIjE3Mi4xOC4wLjEiLCA0Nzk4OSwgeyB9LCAiMTkyLjE2
OC4wLjEwMCIsIDQ3OTg5IH0pOwotCi0gICAgLy8gUmV2ZXJzZSBvcmRlciB0byB1c2UgdGFrZUxh
c3QoKSB3aGlsZSBrZWVwaW5nIHRoZSBhYm92ZSBvcmRlcgotICAgIG1fZmFrZUljZUNhbmRpZGF0
ZXMucmV2ZXJzZSgpOwotCi0gICAgbV9pY2VDYW5kaWRhdGVUaW1lci5zdGFydE9uZVNob3QoMF9z
KTsKLX0KLQotdm9pZCBNb2NrTWVkaWFFbmRwb2ludDo6aWNlQ2FuZGlkYXRlVGltZXJGaXJlZCgp
Ci17Ci0gICAgaWYgKG1fbWlkcy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlm
ICghbV9mYWtlSWNlQ2FuZGlkYXRlcy5pc0VtcHR5KCkpIHsKLSAgICAgICAgbV9jbGllbnQuZ290
SWNlQ2FuZGlkYXRlKG1fbWlkc1swXSwgbV9mYWtlSWNlQ2FuZGlkYXRlcy50YWtlTGFzdCgpKTsK
LSAgICAgICAgbV9pY2VDYW5kaWRhdGVUaW1lci5zdGFydE9uZVNob3QoMF9zKTsKLSAgICB9IGVs
c2UKLSAgICAgICAgbV9jbGllbnQuZG9uZUdhdGhlcmluZ0NhbmRpZGF0ZXMobV9taWRzWzBdKTsK
LX0KLQotdm9pZCBNb2NrTWVkaWFFbmRwb2ludDo6c3RlcEljZVRyYW5zcG9ydFN0YXRlcygpCi17
Ci0gICAgaWYgKG1fbWlkcy5zaXplKCkgIT0gMykgewotICAgICAgICBMT0dfRVJST1IoIlRoZSAn
c3RlcC1pY2UtdHJhbnNwb3J0LXN0YXRlcycgYWN0aW9uIHJlcXVpcmVzIDMgdHJhbnNjZWl2ZXJz
Iik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBTaG91bGQgZ28gdG86Ci0gICAg
Ly8gJ2NoZWNraW5nJwotICAgIG1faWNlVHJhbnNwb3J0U3RhdGVDaGFuZ2VzLmFwcGVuZChzdGQ6
Om1ha2VfcGFpcihtX21pZHNbMF0sIFJUQ0ljZVRyYW5zcG9ydFN0YXRlOjpDaGVja2luZykpOwot
ICAgIG1faWNlVHJhbnNwb3J0U3RhdGVDaGFuZ2VzLmFwcGVuZChzdGQ6Om1ha2VfcGFpcihtX21p
ZHNbMV0sIFJUQ0ljZVRyYW5zcG9ydFN0YXRlOjpDaGVja2luZykpOwotICAgIG1faWNlVHJhbnNw
b3J0U3RhdGVDaGFuZ2VzLmFwcGVuZChzdGQ6Om1ha2VfcGFpcihtX21pZHNbMl0sIFJUQ0ljZVRy
YW5zcG9ydFN0YXRlOjpDaGVja2luZykpOwotCi0gICAgLy8gJ2Nvbm5lY3RlZCcKLSAgICBtX2lj
ZVRyYW5zcG9ydFN0YXRlQ2hhbmdlcy5hcHBlbmQoc3RkOjptYWtlX3BhaXIobV9taWRzWzBdLCBS
VENJY2VUcmFuc3BvcnRTdGF0ZTo6Q29ubmVjdGVkKSk7Ci0gICAgbV9pY2VUcmFuc3BvcnRTdGF0
ZUNoYW5nZXMuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKG1fbWlkc1sxXSwgUlRDSWNlVHJhbnNwb3J0
U3RhdGU6OkNvbXBsZXRlZCkpOwotICAgIG1faWNlVHJhbnNwb3J0U3RhdGVDaGFuZ2VzLmFwcGVu
ZChzdGQ6Om1ha2VfcGFpcihtX21pZHNbMl0sIFJUQ0ljZVRyYW5zcG9ydFN0YXRlOjpDbG9zZWQp
KTsKLQotICAgIC8vICdjb21wbGV0ZWQnCi0gICAgbV9pY2VUcmFuc3BvcnRTdGF0ZUNoYW5nZXMu
YXBwZW5kKHN0ZDo6bWFrZV9wYWlyKG1fbWlkc1swXSwgUlRDSWNlVHJhbnNwb3J0U3RhdGU6OkNv
bXBsZXRlZCkpOwotCi0gICAgLy8gJ2ZhaWxlZCcKLSAgICBtX2ljZVRyYW5zcG9ydFN0YXRlQ2hh
bmdlcy5hcHBlbmQoc3RkOjptYWtlX3BhaXIobV9taWRzWzBdLCBSVENJY2VUcmFuc3BvcnRTdGF0
ZTo6RmFpbGVkKSk7Ci0KLSAgICAvLyAnZGlzY29ubmVjdGVkJwotICAgIG1faWNlVHJhbnNwb3J0
U3RhdGVDaGFuZ2VzLmFwcGVuZChzdGQ6Om1ha2VfcGFpcihtX21pZHNbMV0sIFJUQ0ljZVRyYW5z
cG9ydFN0YXRlOjpEaXNjb25uZWN0ZWQpKTsKLSAgICBtX2ljZVRyYW5zcG9ydFN0YXRlQ2hhbmdl
cy5hcHBlbmQoc3RkOjptYWtlX3BhaXIobV9taWRzWzBdLCBSVENJY2VUcmFuc3BvcnRTdGF0ZTo6
Q2xvc2VkKSk7Ci0KLSAgICAvLyAnbmV3JwotICAgIG1faWNlVHJhbnNwb3J0U3RhdGVDaGFuZ2Vz
LmFwcGVuZChzdGQ6Om1ha2VfcGFpcihtX21pZHNbMV0sIFJUQ0ljZVRyYW5zcG9ydFN0YXRlOjpD
bG9zZWQpKTsKLQotICAgIC8vIFJldmVyc2Ugb3JkZXIgdG8gdXNlIHRha2VMYXN0KCkgd2hpbGUg
a2VlcGluZyB0aGUgYWJvdmUgb3JkZXIKLSAgICBtX2ljZVRyYW5zcG9ydFN0YXRlQ2hhbmdlcy5y
ZXZlcnNlKCk7Ci0KLSAgICBtX2ljZVRyYW5zcG9ydFRpbWVyLnN0YXJ0T25lU2hvdCgwX3MpOwot
fQotCi12b2lkIE1vY2tNZWRpYUVuZHBvaW50OjppY2VUcmFuc3BvcnRUaW1lckZpcmVkKCkKLXsK
LSAgICBpZiAobV9pY2VUcmFuc3BvcnRTdGF0ZUNoYW5nZXMuaXNFbXB0eSgpIHx8IG1fbWlkcy5z
aXplKCkgIT0gMykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byBzdGF0ZUNoYW5nZSA9IG1f
aWNlVHJhbnNwb3J0U3RhdGVDaGFuZ2VzLnRha2VMYXN0KCk7Ci0gICAgbV9jbGllbnQuaWNlVHJh
bnNwb3J0U3RhdGVDaGFuZ2VkKHN0YXRlQ2hhbmdlLmZpcnN0LCBzdGF0ZUNoYW5nZS5zZWNvbmQp
OwotCi0gICAgbV9pY2VUcmFuc3BvcnRUaW1lci5zdGFydE9uZVNob3QoMF9zKTsKLX0KLQotdm9p
ZCBNb2NrTWVkaWFFbmRwb2ludDo6dW5tdXRlUmVtb3RlU291cmNlc0J5TWlkKCkKLXsKLSAgICBp
ZiAobV9taWRzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gTG9va2luZyB1
cCBlYWNoIHNvdXJjZSBieSBpdHMgbWlkLCBpbnN0ZWFkIG9mIHNpbXBseSBpdGVyYXRpbmcgb3Zl
ciB0aGUgbGlzdCBvZiBtdXRlZCBzb3VyY2VzLAotICAgIC8vIGVtdWxhdGVzIHJlbW90ZSBtZWRp
YSBhcnJpdmluZyBvbiBhIG1lZGlhIGRlc2NyaXB0aW9uIHdpdGggYSBzcGVjaWZpYyBtaWQgKFJU
Q1J0cFRyYW5zY2VpdmVyKS4KLQotICAgIC8vIENvcHkgdmFsdWVzIGluIHJldmVyc2Ugb3JkZXIg
dG8gbWFpbnRhaW4gdGhlIG9yaWdpbmFsIG9yZGVyIHdoaWxlIHVzaW5nIHRha2VMYXN0KCkKLSAg
ICBmb3IgKGludCBpID0gbV9taWRzLnNpemUoKSAtIDE7IGkgPj0gMDsgLS1pKQotICAgICAgICBt
X21pZHNPZlNvdXJjZXNUb1VubXV0ZS5hcHBlbmQobV9taWRzW2ldKTsKLQotICAgIG1fdW5tdXRl
VGltZXIuc3RhcnRPbmVTaG90KDBfcyk7Ci19Ci0KLXZvaWQgTW9ja01lZGlhRW5kcG9pbnQ6OnVu
bXV0ZVRpbWVyRmlyZWQoKQotewotICAgIGF1dG8qIHNvdXJjZSA9IG1fbXV0ZWRSZW1vdGVTb3Vy
Y2VzLmdldChtX21pZHNPZlNvdXJjZXNUb1VubXV0ZS50YWtlTGFzdCgpKTsKLSAgICBpZiAoc291
cmNlKQotICAgICAgICBzb3VyY2UtPnNldE11dGVkKGZhbHNlKTsKLQotICAgIGlmICghbV9taWRz
T2ZTb3VyY2VzVG9Vbm11dGUuaXNFbXB0eSgpKQotICAgICAgICBtX3VubXV0ZVRpbWVyLnN0YXJ0
T25lU2hvdCgwX3MpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBF
TkFCTEUoV0VCX1JUQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2sv
TW9ja01lZGlhRW5kcG9pbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svTW9ja01l
ZGlhRW5kcG9pbnQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2Y2NjY0ZmI4ODU2
NTM1NzU5NTZkYmJmNTU0MmM3MjI2MTViNTk2NC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL01vY2tNZWRp
YUVuZHBvaW50LmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMDEgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxNSBFcmljc3NvbiBBQi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqICAgIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqICAgIGRpc3Ry
aWJ1dGlvbi4KLSAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgRXJpY3Nzb24gbm9yIHRoZSBuYW1l
cyBvZiBpdHMgY29udHJpYnV0b3JzCi0gKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSAqICAgIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAq
ICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBv
bmNlCi0KLSNpZiBFTkFCTEUoV0VCX1JUQykKLQotI2luY2x1ZGUgIk1lZGlhRW5kcG9pbnQuaCIK
LSNpbmNsdWRlICJSVENJY2VUcmFuc3BvcnRTdGF0ZS5oIgotI2luY2x1ZGUgIlRpbWVyLmgiCi0K
LW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgTW9ja01lZGlhRW5kcG9pbnQgZmluYWwgOiBw
dWJsaWMgTWVkaWFFbmRwb2ludCB7Ci1wdWJsaWM6Ci0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGlj
IHN0ZDo6dW5pcXVlX3B0cjxNZWRpYUVuZHBvaW50PiBjcmVhdGUoTWVkaWFFbmRwb2ludENsaWVu
dCYpOwotCi0gICAgTW9ja01lZGlhRW5kcG9pbnQoTWVkaWFFbmRwb2ludENsaWVudCYpOwotICAg
IH5Nb2NrTWVkaWFFbmRwb2ludCgpOwotCi0gICAgdm9pZCBzZXRDb25maWd1cmF0aW9uKE1lZGlh
RW5kcG9pbnRDb25maWd1cmF0aW9uJiYpIGZpbmFsIHsgfTsKLQotICAgIHZvaWQgZ2VuZXJhdGVE
dGxzSW5mbygpIGZpbmFsOwotICAgIE1lZGlhUGF5bG9hZFZlY3RvciBnZXREZWZhdWx0QXVkaW9Q
YXlsb2FkcygpIGZpbmFsOwotICAgIE1lZGlhUGF5bG9hZFZlY3RvciBnZXREZWZhdWx0VmlkZW9Q
YXlsb2FkcygpIGZpbmFsOwotICAgIE1lZGlhUGF5bG9hZFZlY3RvciBmaWx0ZXJQYXlsb2Fkcyhj
b25zdCBNZWRpYVBheWxvYWRWZWN0b3ImIHJlbW90ZVBheWxvYWRzLCBjb25zdCBNZWRpYVBheWxv
YWRWZWN0b3ImIGRlZmF1bHRQYXlsb2FkcykgZmluYWw7Ci0KLSAgICBVcGRhdGVSZXN1bHQgdXBk
YXRlUmVjZWl2ZUNvbmZpZ3VyYXRpb24oTWVkaWFFbmRwb2ludFNlc3Npb25Db25maWd1cmF0aW9u
KiwgYm9vbCBpc0luaXRpYXRvcikgZmluYWw7Ci0gICAgVXBkYXRlUmVzdWx0IHVwZGF0ZVNlbmRD
b25maWd1cmF0aW9uKE1lZGlhRW5kcG9pbnRTZXNzaW9uQ29uZmlndXJhdGlvbiosIGNvbnN0IFJl
YWx0aW1lTWVkaWFTb3VyY2VNYXAmLCBib29sIGlzSW5pdGlhdG9yKSBmaW5hbDsKLQotICAgIHZv
aWQgYWRkUmVtb3RlQ2FuZGlkYXRlKGNvbnN0IEljZUNhbmRpZGF0ZSYsIGNvbnN0IFN0cmluZyYg
bWlkLCBjb25zdCBTdHJpbmcmIHVmcmFnLCBjb25zdCBTdHJpbmcmIHBhc3N3b3JkKSBmaW5hbDsK
LQotICAgIFJlZjxSZWFsdGltZU1lZGlhU291cmNlPiBjcmVhdGVNdXRlZFJlbW90ZVNvdXJjZShj
b25zdCBTdHJpbmcmIG1pZCwgUmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlwZSkgZmluYWw7Ci0gICAg
dm9pZCByZXBsYWNlU2VuZFNvdXJjZShSZWFsdGltZU1lZGlhU291cmNlJiwgY29uc3QgU3RyaW5n
JiBtaWQpIGZpbmFsOwotICAgIHZvaWQgcmVwbGFjZU11dGVkUmVtb3RlU291cmNlTWlkKGNvbnN0
IFN0cmluZyYgb2xkTWlkLCBjb25zdCBTdHJpbmcmIG5ld01pZCkgZmluYWw7Ci0KLSAgICB2b2lk
IHN0b3AoKSBmaW5hbDsKLQotICAgIHZvaWQgZW11bGF0ZVBsYXRmb3JtRXZlbnQoY29uc3QgU3Ry
aW5nJiBhY3Rpb24pIGZpbmFsOwotCi1wcml2YXRlOgotICAgIHZvaWQgdXBkYXRlQ29uZmlndXJh
dGlvbk1pZHMoY29uc3QgTWVkaWFFbmRwb2ludFNlc3Npb25Db25maWd1cmF0aW9uJik7Ci0KLSAg
ICBzdGQ6OnVuaXF1ZV9wdHI8UlRDRGF0YUNoYW5uZWxIYW5kbGVyPiBjcmVhdGVEYXRhQ2hhbm5l
bEhhbmRsZXIoY29uc3QgU3RyaW5nJiwgY29uc3QgUlRDRGF0YUNoYW5uZWxJbml0JikgZmluYWw7
Ci0KLSAgICB2b2lkIGRpc3BhdGNoRmFrZUljZUNhbmRpZGF0ZXMoKTsKLSAgICB2b2lkIGljZUNh
bmRpZGF0ZVRpbWVyRmlyZWQoKTsKLQotICAgIHZvaWQgc3RlcEljZVRyYW5zcG9ydFN0YXRlcygp
OwotICAgIHZvaWQgaWNlVHJhbnNwb3J0VGltZXJGaXJlZCgpOwotCi0gICAgdm9pZCB1bm11dGVS
ZW1vdGVTb3VyY2VzQnlNaWQoKTsKLSAgICB2b2lkIHVubXV0ZVRpbWVyRmlyZWQoKTsKLQotICAg
IE1lZGlhRW5kcG9pbnRDbGllbnQmIG1fY2xpZW50OwotICAgIFZlY3RvcjxTdHJpbmc+IG1fbWlk
czsKLSAgICBIYXNoTWFwPFN0cmluZywgUmVmUHRyPFJlYWx0aW1lTWVkaWFTb3VyY2U+PiBtX211
dGVkUmVtb3RlU291cmNlczsKLQotICAgIFZlY3RvcjxJY2VDYW5kaWRhdGU+IG1fZmFrZUljZUNh
bmRpZGF0ZXM7Ci0gICAgVGltZXIgbV9pY2VDYW5kaWRhdGVUaW1lcjsKLQotICAgIFZlY3Rvcjxz
dGQ6OnBhaXI8U3RyaW5nLCBSVENJY2VUcmFuc3BvcnRTdGF0ZT4+IG1faWNlVHJhbnNwb3J0U3Rh
dGVDaGFuZ2VzOwotICAgIFRpbWVyIG1faWNlVHJhbnNwb3J0VGltZXI7Ci0KLSAgICBWZWN0b3I8
U3RyaW5nPiBtX21pZHNPZlNvdXJjZXNUb1VubXV0ZTsKLSAgICBUaW1lciBtX3VubXV0ZVRpbWVy
OwotICAgIAotICAgIFdlYWtQdHJGYWN0b3J5PE1vY2tNZWRpYUVuZHBvaW50PiBtX3dlYWtQdHJG
YWN0b3J5OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxF
KFdFQl9SVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL01vY2tS
ZWFsdGltZU1lZGlhU291cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svTW9j
a1JlYWx0aW1lTWVkaWFTb3VyY2UuY3BwCmluZGV4IGI0MjQyN2I3Y2RkN2Q4OWUwMjBkNmE1ZjYy
ZjQ3ZWNhNzQ3ZjAyZTguLjg3OTE5NDVkZmYzMTA4OTBlZTIwZTFmYmY0ZWI1NGE2NGVkMGQ5MDYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svTW9ja1JlYWx0aW1lTWVk
aWFTb3VyY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svTW9ja1JlYWx0
aW1lTWVkaWFTb3VyY2UuY3BwCkBAIC04Miw3ICs4Miw3IEBAIFZlY3RvcjxDYXB0dXJlRGV2aWNl
PiYgTW9ja1JlYWx0aW1lTWVkaWFTb3VyY2U6OnZpZGVvRGV2aWNlcygpCiB9CiAKIE1vY2tSZWFs
dGltZU1lZGlhU291cmNlOjpNb2NrUmVhbHRpbWVNZWRpYVNvdXJjZShjb25zdCBTdHJpbmcmIGlk
LCBSZWFsdGltZU1lZGlhU291cmNlOjpUeXBlIHR5cGUsIGNvbnN0IFN0cmluZyYgbmFtZSkKLSAg
ICA6IEJhc2VSZWFsdGltZU1lZGlhU291cmNlQ2xhc3MoaWQsIHR5cGUsIG5hbWUpCisgICAgOiBS
ZWFsdGltZU1lZGlhU291cmNlKGlkLCB0eXBlLCBuYW1lKQogewogICAgIHN3aXRjaCAodHlwZSkg
ewogICAgIGNhc2UgUmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlwZTo6QXVkaW86CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL01vY2tSZWFsdGltZU1lZGlhU291cmNlLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL01vY2tSZWFsdGltZU1lZGlhU291cmNlLmgK
aW5kZXggOTUwN2YwMWFhM2QzMjMwMjYzZmQ0YWZlYjlkMTY1MjhjZDk5YWMyYy4uMWVhMTE1ZDli
NDMzZmE0ZTMzNjljYmVmODQ3OTRmOWFmMjg4NjdlZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbW9jay9Nb2NrUmVhbHRpbWVNZWRpYVNvdXJjZS5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21vY2svTW9ja1JlYWx0aW1lTWVkaWFTb3VyY2UuaApAQCAtMjgsMjgg
KzI4LDE3IEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNpZm5kZWYgTW9ja1JlYWx0aW1lTWVk
aWFTb3VyY2VfaAotI2RlZmluZSBNb2NrUmVhbHRpbWVNZWRpYVNvdXJjZV9oCisjcHJhZ21hIG9u
Y2UKIAogI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCiAKICNpbmNsdWRlICJSZWFsdGltZU1lZGlh
U291cmNlLmgiCiAKLSNpZiBVU0UoT1BFTldFQlJUQykKLSNpbmNsdWRlICJSZWFsdGltZU1lZGlh
U291cmNlT3dyLmgiCi0jZW5kaWYKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBDYXB0
dXJlRGV2aWNlOwogCi0jaWYgVVNFKE9QRU5XRUJSVEMpCi11c2luZyBCYXNlUmVhbHRpbWVNZWRp
YVNvdXJjZUNsYXNzID0gUmVhbHRpbWVNZWRpYVNvdXJjZU93cjsKLSNlbHNlCi11c2luZyBCYXNl
UmVhbHRpbWVNZWRpYVNvdXJjZUNsYXNzID0gUmVhbHRpbWVNZWRpYVNvdXJjZTsKLSNlbmRpZgot
Ci1jbGFzcyBNb2NrUmVhbHRpbWVNZWRpYVNvdXJjZSA6IHB1YmxpYyBCYXNlUmVhbHRpbWVNZWRp
YVNvdXJjZUNsYXNzIHsKK2NsYXNzIE1vY2tSZWFsdGltZU1lZGlhU291cmNlIDogcHVibGljIFJl
YWx0aW1lTWVkaWFTb3VyY2UgewogcHVibGljOgogICAgIHZpcnR1YWwgfk1vY2tSZWFsdGltZU1l
ZGlhU291cmNlKCkgeyB9CiAKQEAgLTYxLDkgKzUwLDcgQEAgcHJvdGVjdGVkOgogCiAgICAgdmly
dHVhbCB2b2lkIHVwZGF0ZVNldHRpbmdzKFJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5ncyYpID0g
MDsKICAgICB2aXJ0dWFsIHZvaWQgaW5pdGlhbGl6ZUNhcGFiaWxpdGllcyhSZWFsdGltZU1lZGlh
U291cmNlQ2FwYWJpbGl0aWVzJikgPSAwOwotI2lmICFVU0UoT1BFTldFQlJUQykKICAgICB2aXJ0
dWFsIHZvaWQgaW5pdGlhbGl6ZVN1cHBvcnRlZENvbnN0cmFpbnRzKFJlYWx0aW1lTWVkaWFTb3Vy
Y2VTdXBwb3J0ZWRDb25zdHJhaW50cyYpID0gMDsKLSNlbmRpZgogCiAgICAgY29uc3QgUmVhbHRp
bWVNZWRpYVNvdXJjZUNhcGFiaWxpdGllcyYgY2FwYWJpbGl0aWVzKCkgY29uc3Qgb3ZlcnJpZGU7
CiAgICAgY29uc3QgUmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzJiBzZXR0aW5ncygpIGNvbnN0
IG92ZXJyaWRlOwpAQCAtNzQsMTEgKzYxLDcgQEAgcHJvdGVjdGVkOgogCiBwcml2YXRlOgogICAg
IHZvaWQgaW5pdGlhbGl6ZUNhcGFiaWxpdGllcygpOwotI2lmIFVTRShPUEVOV0VCUlRDKQotICAg
IHZvaWQgaW5pdGlhbGl6ZVNldHRpbmdzKCkgZmluYWw7Ci0jZWxzZQogICAgIHZvaWQgaW5pdGlh
bGl6ZVNldHRpbmdzKCk7Ci0jZW5kaWYKIAogICAgIFJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5n
cyBtX2N1cnJlbnRTZXR0aW5nczsKICAgICBSZWFsdGltZU1lZGlhU291cmNlU3VwcG9ydGVkQ29u
c3RyYWludHMgbV9zdXBwb3J0ZWRDb25zdHJhaW50czsKQEAgLTg5LDUgKzcyLDMgQEAgcHJpdmF0
ZToKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJF
QU0pCi0KLSNlbmRpZiAvLyBNb2NrUmVhbHRpbWVNZWRpYVNvdXJjZV9oCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0
aW5nL0ludGVybmFscy5jcHAKaW5kZXggMjBlZGY5NzQ4YmNkOGZmZWRjNTMyZWVkMzUyM2Y3M2Ni
ZDNkOTk3MS4uM2FkNTdmNTM2YzgxYzI1MzczZTY2NjRkZjJkN2RjMTllYjU4MjRiOSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcApAQCAtMjAwLDcgKzIwMCw2IEBACiAjZW5kaWYK
IAogI2lmIEVOQUJMRShXRUJfUlRDKQotI2luY2x1ZGUgIk1vY2tNZWRpYUVuZHBvaW50LmgiCiAj
aW5jbHVkZSAiUlRDUGVlckNvbm5lY3Rpb24uaCIKICNlbmRpZgogCkBAIC00ODcsMTIgKzQ4Niw2
IEBAIEludGVybmFsczo6SW50ZXJuYWxzKERvY3VtZW50JiBkb2N1bWVudCkKICAgICBXZWJDb3Jl
OjpTZXR0aW5nczo6c2V0TWVkaWFDYXB0dXJlUmVxdWlyZXNTZWN1cmVDb25uZWN0aW9uKGZhbHNl
KTsKICNlbmRpZgogCi0jaWYgRU5BQkxFKFdFQl9SVEMpCi0jaWYgVVNFKE9QRU5XRUJSVEMpCi0g
ICAgZW5hYmxlTW9ja01lZGlhRW5kcG9pbnQoKTsKLSNlbmRpZgotI2VuZGlmCi0KICNpZiBFTkFC
TEUoV0lSRUxFU1NfUExBWUJBQ0tfVEFSR0VUKQogICAgIGlmIChkb2N1bWVudC5wYWdlKCkpCiAg
ICAgICAgIGRvY3VtZW50LnBhZ2UoKS0+c2V0TW9ja01lZGlhUGxheWJhY2tUYXJnZXRQaWNrZXJF
bmFibGVkKHRydWUpOwpAQCAtMTI1MCwxMyArMTI0Myw2IEBAIHZvaWQgSW50ZXJuYWxzOjplbmFi
bGVNb2NrU3BlZWNoU3ludGhlc2l6ZXIoKQogCiAjaWYgRU5BQkxFKFdFQl9SVEMpCiAKLSNpZiBV
U0UoT1BFTldFQlJUQykKLXZvaWQgSW50ZXJuYWxzOjplbmFibGVNb2NrTWVkaWFFbmRwb2ludCgp
Ci17Ci0gICAgTWVkaWFFbmRwb2ludDo6Y3JlYXRlID0gTW9ja01lZGlhRW5kcG9pbnQ6OmNyZWF0
ZTsKLX0KLSNlbmRpZgotCiB2b2lkIEludGVybmFsczo6ZW11bGF0ZVJUQ1BlZXJDb25uZWN0aW9u
UGxhdGZvcm1FdmVudChSVENQZWVyQ29ubmVjdGlvbiYgY29ubmVjdGlvbiwgY29uc3QgU3RyaW5n
JiBhY3Rpb24pCiB7CiAgICAgaWYgKCFMaWJXZWJSVENQcm92aWRlcjo6d2ViUlRDQXZhaWxhYmxl
KCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5oIGIvU291
cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaAppbmRleCA5YzQwMDMyYTc1ZTcwOTFkYWZh
Mjg4OTRlYTEwOTczNjNkZjM2MjM4Li4xNjY5NjY4MmFiYmEzMjU2ZjgzNDVkZTMxNDllN2E3MGM2
YTFmOWJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmgKQEAgLTQzMCw5ICs0MzAsNiBA
QCBwdWJsaWM6CiAjZW5kaWYKIAogI2lmIEVOQUJMRShXRUJfUlRDKQotI2lmIFVTRShPUEVOV0VC
UlRDKQotICAgIHZvaWQgZW5hYmxlTW9ja01lZGlhRW5kcG9pbnQoKTsKLSNlbmRpZgogICAgIHZv
aWQgZW11bGF0ZVJUQ1BlZXJDb25uZWN0aW9uUGxhdGZvcm1FdmVudChSVENQZWVyQ29ubmVjdGlv
biYsIGNvbnN0IFN0cmluZyYgYWN0aW9uKTsKICAgICB2b2lkIHVzZU1vY2tSVENQZWVyQ29ubmVj
dGlvbkZhY3RvcnkoY29uc3QgU3RyaW5nJik7CiAgICAgdm9pZCBzZXRJQ0VDYW5kaWRhdGVGaWx0
ZXJpbmcoYm9vbCk7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cKaW5kZXggODE0M2Y5NjViYmRiYzc3NmI1MDc5OGM5ZGMyOWI3NjgxYTc5
MTRmMS4uNzA5YThkOGJhZGQ2YWQxZGM3ZmY0ZjVkM2Q1NGIwMjI5NTczYTc1MCAxMDA2NDQKLS0t
IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAt
MSw1ICsxLDE0IEBACiAyMDE3LTEwLTA0ICBZb3Vlbm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNv
bT4KIAorICAgICAgICBSZW1vdmUgT3BlbldlYlJUQyBiYWNrZW5kCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzc4NjgKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHBsYXRmb3JtL2d0ay9UZXN0RXhwZWN0
YXRpb25zOgorCisyMDE3LTEwLTA0ICBZb3Vlbm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4K
KwogICAgICAgICBBZGQgcXVvdGEgdG8gY2FjaGUgQVBJCiAgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzc1NTIKIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvcGxhdGZvcm0vZ3RrL1Rlc3RFeHBlY3RhdGlvbnMgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9n
dGsvVGVzdEV4cGVjdGF0aW9ucwppbmRleCA4YzY2ZGI2NDQ1ZTM3Mjc4Y2M5ODFhNTk3N2E2NWYy
MmI0M2EwMjM5Li40NWEyNWRkMDAxZjQwMDQzNWMzYjM5MDFiYTEyN2FiNjM3NzYyMjc0IDEwMDY0
NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvVGVzdEV4cGVjdGF0aW9ucworKysgYi9M
YXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvVGVzdEV4cGVjdGF0aW9ucwpAQCAtNjExLDgyICs2MTEs
MTEgQEAgd2Via2l0Lm9yZy9iLzk5MDM2IGZhc3Qvc2hhZG93LWRvbS9wb2ludGVybG9ja2VsZW1l
bnQtaW4tc2xvdC5odG1sIFsgU2tpcCBdCiB3ZWJraXQub3JnL2IvODUyMTEgaWV0ZXN0Y2VudGVy
L2NzczMvZmxleGJveC9mbGV4Ym94LWFsaWduLXN0cmV0Y2gtMDAxLmh0bSBbIEltYWdlT25seUZh
aWx1cmUgXQogd2Via2l0Lm9yZy9iLzg1MjEyIGlldGVzdGNlbnRlci9jc3MzL2ZsZXhib3gvZmxl
eGJveC1sYXlvdXQtMDAyLmh0bSBbIEltYWdlT25seUZhaWx1cmUgXQogCi0jIFdlYlJUQyAvIE1l
ZGlhU3RyZWFtIGltcGxlbWVudGF0aW9uIGlzIG5vdCBjb21wbGV0ZSB5ZXQuCi0jIFNvbWUgb2Yg
dGhpcyB0ZXN0cyBhcmUgc2tpcHBlZCBvbiB0aGUgZ2VuZXJhbCBUZXN0RXhwZWN0YXRpb25zLAot
IyBFbmFibGUgdGhlbSBoZXJlIGFuZCBsaXN0IHRoZSBpbmRpdmlkdWFsIGV4cGVjdGF0aW9ucyBp
biBvcmRlciB0byBnZXQKLSMgbm90aWZpY2F0aW9ucyBvZiBuZXcgZmFpbHVyZXMuCiBmYXN0L21l
ZGlhc3RyZWFtIFsgUGFzcyBdCi13ZWJydGMgWyBQYXNzIF0KLSMgR1RLIHVzZXMgT1dSIGluc3Rl
YWQgb2YgbGlid2VicnRjCi13ZWJydGMvbGlid2VicnRjIFsgU2tpcCBdCi0jIFNvbWUgV2ViUlRD
IGZlYXR1cmVzIGxpa2UgZGF0YWNoYW5uZWwgYXJlIHN0aWxsIG5vdCBpbXBsZW1lbnRlZAotd2Vi
cnRjL2F1ZGlvLXJlcGxhY2UtdHJhY2suaHRtbCBbIEZhaWx1cmUgXQotd2VicnRjL2F1ZGlvLW11
dGVkLXN0YXRzLmh0bWwgWyBGYWlsdXJlIF0KLXdlYnJ0Yy9hdWRpby1tdXRlZC1zdGF0czIuaHRt
bCBbIEZhaWx1cmUgXQotd2VicnRjL2NhcHR1cmVDYW52YXMtd2VicnRjLmh0bWwgWyBGYWlsdXJl
IF0KLXdlYnJ0Yy9jbG9zaW5nLXBlZXJjb25uZWN0aW9uLmh0bWwgWyBUaW1lb3V0IF0KLXdlYnJ0
Yy9jb25uZWN0aW9uLXN0YXRlLmh0bWwgWyBGYWlsdXJlIF0KLXdlYnJ0Yy9kYXRhY2hhbm5lbCBb
IFNraXAgXQotd2VicnRjL2VwaGVtZXJhbC1jZXJ0aWZpY2F0ZXMtYW5kLWNuYW1lcy5odG1sIFsg
RmFpbHVyZSBdCi13ZWJydGMvbXVsdGktdmlkZW8uaHRtbCBbIEZhaWx1cmUgXQotd2VicnRjL25v
LXBvcnQtemVyby1pbi11cGQtY2FuZGlkYXRlcy5odG1sIFsgVGltZW91dCBdCi13ZWJydGMvcGVl
ci1jb25uZWN0aW9uLWF1ZGlvLW11dGUyLmh0bWwgWyBDcmFzaCBGYWlsdXJlIF0KLXdlYnJ0Yy9w
ZWVyLWNvbm5lY3Rpb24tYXVkaW8tbXV0ZS5odG1sIFsgRmFpbHVyZSBdCi13ZWJydGMvcGVlci1j
b25uZWN0aW9uLWF1ZGlvLXVubXV0ZS5odG1sIFsgRmFpbHVyZSBdCi13ZWJydGMvcGVlci1jb25u
ZWN0aW9uLXJlbW90ZS1hdWRpby1tdXRlMi5odG1sIFsgQ3Jhc2ggRmFpbHVyZSBdCi13ZWJydGMv
cGVlci1jb25uZWN0aW9uLXJlbW90ZS1hdWRpby1tdXRlLmh0bWwgWyBGYWlsdXJlIF0KLXdlYnJ0
Yy9wZWVyLWNvbm5lY3Rpb24tdHJhY2stZW5kLmh0bWwgWyBGYWlsdXJlIF0KLXdlYnJ0Yy92aWRl
by1hZGRUcmFjay5odG1sIFsgQ3Jhc2ggXQotd2VicnRjL3ZpZGVvLWRpc2FibGVkLWJsYWNrLmh0
bWwgWyBGYWlsdXJlIF0KLXdlYnJ0Yy92aWRlby1tZWRpYXN0cmVhbXRyYWNrLXN0YXRzLmh0bWwg
WyBGYWlsdXJlIF0KLXdlYnJ0Yy92aWRlby1tdXRlLmh0bWwgWyBGYWlsdXJlIFRpbWVvdXQgXQot
d2VicnRjL3ZpZGVvLXJlbW90ZS1tdXRlLmh0bWwgWyBGYWlsdXJlIF0KLXdlYnJ0Yy92aWRlby1y
ZXBsYWNlLW11dGVkLXRyYWNrLmh0bWwgWyBGYWlsdXJlIFRpbWVvdXQgQ3Jhc2ggXQotd2Via2l0
Lm9yZy9iLzE3NjgwMSB3ZWJydGMvdmlkZW8tcmVwbGFjZS10cmFjay5odG1sIFsgRmFpbHVyZSBD
cmFzaCBdCi13ZWJraXQub3JnL2IvMTc2ODAxIHdlYnJ0Yy92aWRlby1nZXRQYXJhbWV0ZXJzLmh0
bWwgWyBGYWlsdXJlIENyYXNoIF0KLXdlYmtpdC5vcmcvYi8xNzY4MDEgd2VicnRjL3ZpZGVvLmh0
bWwgWyBGYWlsdXJlIENyYXNoIF0KLXdlYnJ0Yy92aWRlby1yZXBsYWNlLXRyYWNrLXRvLW51bGwu
aHRtbCBbIEZhaWx1cmUgXQotd2VicnRjL3ZpZGVvLXJvdGF0aW9uLmh0bWwgWyBGYWlsdXJlIF0K
LXdlYnJ0Yy92aWRlby1zdGF0cy5odG1sIFsgRmFpbHVyZSBDcmFzaCBdCi13ZWJydGMvdmlkZW8t
dW5tdXRlLmh0bWwgWyBGYWlsdXJlIFRpbWVvdXQgXQotd2VicnRjL3ZpZGVvLXdpdGgtZGF0YS1j
aGFubmVsLmh0bWwgWyBGYWlsdXJlIF0KLXdlYnJ0Yy92aWRlby13aXRoLXJlY2VpdmVyLmh0bWwg
WyBGYWlsdXJlIF0KLWltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvd2VicnRjL1JUQ1Bl
ZXJDb25uZWN0aW9uLWFkZEljZUNhbmRpZGF0ZS5odG1sIFsgRmFpbHVyZSBdCi1pbXBvcnRlZC93
M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3dlYnJ0Yy9SVENQZWVyQ29ubmVjdGlvbi1jcmVhdGVEYXRh
Q2hhbm5lbC5odG1sIFsgRmFpbHVyZSBdCi1pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3Rz
L3dlYnJ0Yy9SVENQZWVyQ29ubmVjdGlvbi1zZXRSZW1vdGVEZXNjcmlwdGlvbi5odG1sIFsgRmFp
bHVyZSBdCi1pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3dlYnJ0Yy9SVENQZWVyQ29u
bmVjdGlvbi1pZGwuaHRtbCBbIEZhaWx1cmUgXQotaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10
ZXN0cy93ZWJydGMvUlRDUGVlckNvbm5lY3Rpb24tY3JlYXRlQW5zd2VyLmh0bWwgWyBGYWlsdXJl
IF0KLWltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvd2VicnRjL1JUQ1BlZXJDb25uZWN0
aW9uLW9ubmVnb3RpYXRpb25uZWVkZWQuaHRtbCBbIEZhaWx1cmUgXQotaW1wb3J0ZWQvdzNjL3dl
Yi1wbGF0Zm9ybS10ZXN0cy93ZWJydGMvUlRDRGF0YUNoYW5uZWwtYnVmZmVyZWRBbW91bnQuaHRt
bCBbIEZhaWx1cmUgXQotaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy93ZWJydGMvUlRD
RGF0YUNoYW5uZWwtc2VuZC5odG1sIFsgRmFpbHVyZSBdCi1pbXBvcnRlZC93M2Mvd2ViLXBsYXRm
b3JtLXRlc3RzL3dlYnJ0Yy9SVENJY2VUcmFuc3BvcnQuaHRtbCBbIEZhaWx1cmUgXQotaW1wb3J0
ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy93ZWJydGMvUlRDUGVlckNvbm5lY3Rpb24tYWRkVHJh
bnNjZWl2ZXIuaHRtbCBbIEZhaWx1cmUgXQotaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0
cy93ZWJydGMvUlRDUGVlckNvbm5lY3Rpb24tY29ubmVjdGlvblN0YXRlLmh0bWwgWyBGYWlsdXJl
IF0KLWltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvd2VicnRjL1JUQ1BlZXJDb25uZWN0
aW9uLWdldFN0YXRzLmh0bWwgWyBGYWlsdXJlIF0KLWltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0t
dGVzdHMvd2VicnRjL1JUQ1BlZXJDb25uZWN0aW9uLWljZUNvbm5lY3Rpb25TdGF0ZS5odG1sIFsg
RmFpbHVyZSBdCi1pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3dlYnJ0Yy9SVENQZWVy
Q29ubmVjdGlvbi1pY2VHYXRoZXJpbmdTdGF0ZS5odG1sIFsgRmFpbHVyZSBdCi1pbXBvcnRlZC93
M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3dlYnJ0Yy9SVENQZWVyQ29ubmVjdGlvbi1vbmRhdGFjaGFu
bmVsLmh0bWwgWyBGYWlsdXJlIF0KLWltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvd2Vi
cnRjL1JUQ1BlZXJDb25uZWN0aW9uLXNldExvY2FsRGVzY3JpcHRpb24tYW5zd2VyLmh0bWwgWyBG
YWlsdXJlIF0KLWltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvd2VicnRjL1JUQ1BlZXJD
b25uZWN0aW9uLXNldExvY2FsRGVzY3JpcHRpb24tb2ZmZXIuaHRtbCBbIEZhaWx1cmUgXQotaW1w
b3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy93ZWJydGMvUlRDUGVlckNvbm5lY3Rpb24tc2V0
UmVtb3RlRGVzY3JpcHRpb24tb2ZmZXIuaHRtbCBbIEZhaWx1cmUgXQotaW1wb3J0ZWQvdzNjL3dl
Yi1wbGF0Zm9ybS10ZXN0cy93ZWJydGMvUlRDRFRNRlNlbmRlci1pbnNlcnREVE1GLmh0bWwgWyBD
cmFzaCBdCi1pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3dlYnJ0Yy9SVENQZWVyQ29u
bmVjdGlvbi1vbnRyYWNrLmh0bWwgWyBDcmFzaCBdCi1pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3Jt
LXRlc3RzL3dlYnJ0Yy9SVENQZWVyQ29ubmVjdGlvbi1zZXREZXNjcmlwdGlvbi10cmFuc2NlaXZl
ci5odG1sIFsgQ3Jhc2ggXQotaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy93ZWJydGMv
UlRDUnRwU2VuZGVyLXJlcGxhY2VUcmFjay5odG1sIFsgQ3Jhc2ggXQotaW1wb3J0ZWQvdzNjL3dl
Yi1wbGF0Zm9ybS10ZXN0cy93ZWJydGMvZGF0YWNoYW5uZWwtZW1wdHlzdHJpbmcuaHRtbCBbIEZh
aWx1cmUgXQotaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy93ZWJydGMvbm8tbWVkaWEt
Y2FsbC5odG1sIFsgRmFpbHVyZSBdCi1pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3dl
YnJ0Yy9wcm9taXNlcy1jYWxsLmh0bWwgWyBGYWlsdXJlIF0KLWltcG9ydGVkL3czYy93ZWItcGxh
dGZvcm0tdGVzdHMvd2VicnRjL3J0Y3BlZXJjb25uZWN0aW9uL3NldFJlbW90ZURlc2NyaXB0aW9u
Lmh0bWwgWyBGYWlsdXJlIF0KLWh0dHAvdGVzdHMvd2VicnRjL2ZpbHRlcmluZy1pY2UtY2FuZGlk
YXRlLWNyb3NzLW9yaWdpbi1mcmFtZS5odG1sIFsgVGltZW91dCBdCi1odHRwL3Rlc3RzL3dlYnJ0
Yy9maWx0ZXJpbmctaWNlLWNhbmRpZGF0ZS1zYW1lLW9yaWdpbi1mcmFtZS5odG1sIFsgVGltZW91
dCBdCi1odHRwL3Rlc3RzL3dlYnJ0Yy9maWx0ZXJpbmctaWNlLWNhbmRpZGF0ZS1zYW1lLW9yaWdp
bi1mcmFtZTIuaHRtbCBbIFRpbWVvdXQgXQotd2VicnRjL2ZpbHRlcmluZy1pY2UtY2FuZGlkYXRl
LWFmdGVyLXJlbG9hZC5odG1sIFsgVGltZW91dCBdCi13ZWJydGMvaWNlLWNhbmRpZGF0ZS1zZHBN
TGluZUluZGV4Lmh0bWwgWyBUaW1lb3V0IF0KKyMgU2tpcHBpbmcgdW50aWwgYmFja2VuZCBpcyBp
bXBsZW1lbnRlZAord2VicnRjIFsgU2tpcCBdCitpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRl
c3RzL3dlYnJ0Yy8gWyBTa2lwIF0KIGh0dHAvdGVzdHMvbWVkaWEvbWVkaWEtc3RyZWFtL2dldHVz
ZXJtZWRpYS13aXRoLWNhbnZhcy5odG1sIFsgVGltZW91dCBdCi13ZWJraXQub3JnL2IvMTY5MTEw
IHdlYnJ0Yy9hdWRpby1wZWVyLWNvbm5lY3Rpb24td2ViYXVkaW8uaHRtbCBbIEZhaWx1cmUgVGlt
ZW91dCBdCi13ZWJraXQub3JnL2IvMTczNDU2IGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVz
dHMvd2VicnRjL1JUQ1BlZXJDb25uZWN0aW9uLWNyZWF0ZU9mZmVyLmh0bWwgWyBDcmFzaCBdCi13
ZWJraXQub3JnL2IvMTczNDU2IHdlYnJ0Yy9jcmVhdGVPZmZlckFuc3dlci5odG1sICBbIENyYXNo
IF0KLXdlYmtpdC5vcmcvYi8xNzM0NTYgd2VicnRjL3ZpZGVvLWFkZFRyYW5zY2VpdmVyLmh0bWwg
WyBDcmFzaCBdCiAjIFRoZSBNZWRpYVN0cmVhbSBpbXBsZW1lbnRhdGlvbiBpcyBhbHNvIHN0aWxs
IG5vdCBjb21wbGV0ZWQKIHdlYmtpdC5vcmcvYi83OTIwMyBmYXN0L21lZGlhc3RyZWFtL21vY2st
bWVkaWEtc291cmNlLXdlYmF1ZGlvLmh0bWwgWyBUaW1lb3V0IF0KIHdlYmtpdC5vcmcvYi83OTIw
MyBmYXN0L21lZGlhc3RyZWFtL2dldFVzZXJNZWRpYS13ZWJhdWRpby5odG1sIFsgRmFpbHVyZSBd
CkBAIC0xMjUzLDcgKzExODIsNiBAQCB3ZWJraXQub3JnL2IvMTc1NDE5IGltcG9ydGVkL3czYy93
ZWItcGxhdGZvcm0tdGVzdHMvc3RyZWFtcy9yZWFkYWJsZS1ieXRlLXN0cmVhbQogZmFzdC9pbWFn
ZXMvYW5pbWF0ZWQtaW1hZ2UtbXA0Lmh0bWwgWyBTa2lwIF0KIAogd2Via2l0Lm9yZy9iLzE3NzUz
MiBhY2Nlc3NpYmlsaXR5L2ltYWdlLWxvYWQtb24tZGVsYXkuaHRtbCBbIEZhaWx1cmUgXQotd2Vi
a2l0Lm9yZy9iLzE3NzUzMyB3ZWJydGMvdmlkZW8taW50ZXJydXB0aW9uLmh0bWwgWyBGYWlsdXJl
IF0KIAogd2Via2l0Lm9yZy9iLzE3NzYzMiBmYXN0L3RleHQvZmxhZy1jb2RlcG9pbnQuaHRtbCBb
IEltYWdlT25seUZhaWx1cmUgXQogCkBAIC0xMzgyLDcgKzEzMTAsNiBAQCB3ZWJraXQub3JnL2Iv
MTc2ODA1IG1lZGlhL21lZGlhLWhpZ2hlci1wcmlvLWF1ZGlvLXN0cmVhbS5odG1sIFsgQ3Jhc2gg
XQogd2Via2l0Lm9yZy9iLzE3NjgwNiBtZWRpYS90cmFjay90cmFjay10ZXh0LXRyYWNrLWN1ZS1s
aXN0Lmh0bWwgWyBDcmFzaCBdCiAKIHdlYmtpdC5vcmcvYi8xNzY4NTYgZmFzdC9tZWRpYXN0cmVh
bS9hcHBseS1jb25zdHJhaW50cy12aWRlby5odG1sIFsgQ3Jhc2ggXQotd2Via2l0Lm9yZy9iLzE3
Njg1MCB3ZWJydGMvY2xvbmUtYXVkaW8tdHJhY2suaHRtbCBbIEZhaWx1cmUgQ3Jhc2ggXQogd2Vi
a2l0Lm9yZy9iLzE3Njg2MSBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL21lZGlhLXNv
dXJjZS9tZWRpYXNvdXJjZS1zb3VyY2VidWZmZXItbW9kZS5odG1sIFsgQ3Jhc2ggXQogCiAjIFNl
ZSBhbHNvIHdlYmtpdC5vcmcvYi8xNDE2OTkKQEAgLTEzOTQsOCArMTMyMSw2IEBAIHdlYmtpdC5v
cmcvYi8xNzc1MzcgaHR0cC90ZXN0cy9tdWx0aXBhcnQvbXVsdGlwYXJ0LWh0bWwucGhwIFsgQ3Jh
c2ggXQogCiB3ZWJraXQub3JnL2IvMTc3ODE2IHdlYmdsLzEuMC4yL2NvbmZvcm1hbmNlL29nbGVz
L0dML3ZlYy92ZWNfMDAxX3RvXzAwOC5odG1sIFsgQ3Jhc2ggUGFzcyBdCiAKLXdlYmtpdC5vcmcv
Yi8xNzc4MTggd2VicnRjL25lZ290aWF0ZWRuZWVkZWQtZXZlbnQtYWRkU3RyZWFtLmh0bWwgWyBD
cmFzaCBQYXNzIF0KLQogIy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KICMgRW5kIG9m
IENyYXNoaW5nIHRlc3RzCiAjLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>322676</attachid>
            <date>2017-10-04 08:54:30 -0700</date>
            <delta_ts>2017-10-04 10:50:12 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-177868-20171004175427.patch</filename>
            <type>text/plain</type>
            <size>264162</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjIyODM0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzIwOWYyMWRiZDdiYWJk
NjQyODZiYTRjMDYzYTU5NWI2YTk1MzVhMi4uNTE5ZTJkYzVhNjVhNWE0YTcwNjgwOWJlOGNmNzg4
MGMwYjQ4NTQ3OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDU0IEBACiAyMDE3LTEwLTA0ICBZb3Vl
bm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KIAorICAgICAgICBSZW1vdmUgT3BlbldlYlJU
QyBiYWNrZW5kCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNzc4NjgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIERlcml2ZWRTb3VyY2VzLm1ha2U6CisgICAg
ICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYUVuZHBvaW50UGVlckNvbm5lY3Rpb24uY3Bw
OiBSZW1vdmVkLgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFFbmRwb2ludFBl
ZXJDb25uZWN0aW9uLmg6IFJlbW92ZWQuCisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9N
ZWRpYUVuZHBvaW50U2Vzc2lvbkRlc2NyaXB0aW9uLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBN
b2R1bGVzL21lZGlhc3RyZWFtL01lZGlhRW5kcG9pbnRTZXNzaW9uRGVzY3JpcHRpb24uaDogUmVt
b3ZlZC4KKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL1NEUFByb2Nlc3Nvci5jcHA6IFJl
bW92ZWQuCisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9TRFBQcm9jZXNzb3IuaDogUmVt
b3ZlZC4KKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL2xpYndlYnJ0Yy9MaWJXZWJSVENN
ZWRpYUVuZHBvaW50LmNwcDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2o6CisgICAgICAgICogcGxhdGZvcm0vR1N0cmVhbWVyLmNtYWtlOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmJ1aWxk
TWVkaWFFbmdpbmVzVmVjdG9yKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFt
ZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c3VwcG9ydHNUeXBlKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyLmNw
cDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyLmg6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0v
bWVkaWFzdHJlYW0vTWVkaWFFbmRwb2ludC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZv
cm0vbWVkaWFzdHJlYW0vTWVkaWFFbmRwb2ludC5oOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRm
b3JtL21lZGlhc3RyZWFtL01lZGlhRW5kcG9pbnRTZXNzaW9uQ29uZmlndXJhdGlvbi5oOiBSZW1v
dmVkLgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL1NEUFByb2Nlc3NvclNjcmlwdFJl
c291cmNlLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9TRFBQ
cm9jZXNzb3JTY3JpcHRSZXNvdXJjZS5oOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL21l
ZGlhc3RyZWFtL29wZW53ZWJydGMvTWVkaWFFbmRwb2ludE93ci5jcHA6IFJlbW92ZWQuCisgICAg
ICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vb3BlbndlYnJ0Yy9NZWRpYUVuZHBvaW50T3dyLmg6
IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vb3BlbndlYnJ0Yy9PcGVu
V2ViUlRDVXRpbGl0aWVzLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0
cmVhbS9vcGVud2VicnRjL09wZW5XZWJSVENVdGlsaXRpZXMuaDogUmVtb3ZlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9vcGVud2VicnRjL1JlYWx0aW1lQXVkaW9Tb3VyY2VPd3Iu
aDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9vcGVud2VicnRjL1Jl
YWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJPd3IuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRm
b3JtL21lZGlhc3RyZWFtL29wZW53ZWJydGMvUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlck93ci5o
OiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL29wZW53ZWJydGMvUmVh
bHRpbWVNZWRpYVNvdXJjZU93ci5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vbWVk
aWFzdHJlYW0vb3BlbndlYnJ0Yy9SZWFsdGltZU1lZGlhU291cmNlT3dyLmg6IFJlbW92ZWQuCisg
ICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vb3BlbndlYnJ0Yy9SZWFsdGltZVZpZGVvU291
cmNlT3dyLmg6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vbW9jay9Nb2NrTWVkaWFFbmRw
b2ludC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vbW9jay9Nb2NrTWVkaWFFbmRw
b2ludC5oOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL21vY2svTW9ja1JlYWx0aW1lTWVk
aWFTb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TW9ja1JlYWx0aW1lTWVkaWFTb3VyY2U6
Ok1vY2tSZWFsdGltZU1lZGlhU291cmNlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tb2NrL01vY2tS
ZWFsdGltZU1lZGlhU291cmNlLmg6CisgICAgICAgICogdGVzdGluZy9JbnRlcm5hbHMuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjpJbnRlcm5hbHMpOgorICAgICAgICAoV2ViQ29y
ZTo6SW50ZXJuYWxzOjplbmFibGVNb2NrTWVkaWFFbmRwb2ludCk6IERlbGV0ZWQuCisgICAgICAg
ICogdGVzdGluZy9JbnRlcm5hbHMuaDoKKworMjAxNy0xMC0wNCAgWW91ZW5uIEZhYmxldCAgPHlv
dWVubkBhcHBsZS5jb20+CisKICAgICAgICAgQWRkIHF1b3RhIHRvIGNhY2hlIEFQSQogICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc3NTUyCiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNvcmUvQ01h
a2VMaXN0cy50eHQKaW5kZXggMWNjMTZjN2QxZmFiZGVmNjU3OGI0MjIxMTFkYmI1NjVlMzkwNDg5
ZC4uN2YyMmU1MTZmOTdhMjk3ZGQ1NDhlNzVjZWUwODc3YTFjNTYyNWYxYSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VM
aXN0cy50eHQKQEAgLTEwOTMsOCArMTA5Myw2IEBAIHNldChXZWJDb3JlX1NPVVJDRVMKICAgICBN
b2R1bGVzL21lZGlhc3RyZWFtL01lZGlhRGV2aWNlcy5jcHAKICAgICBNb2R1bGVzL21lZGlhc3Ry
ZWFtL01lZGlhRGV2aWNlc0VudW1lcmF0aW9uUmVxdWVzdC5jcHAKICAgICBNb2R1bGVzL21lZGlh
c3RyZWFtL01lZGlhRGV2aWNlc1JlcXVlc3QuY3BwCi0gICAgTW9kdWxlcy9tZWRpYXN0cmVhbS9N
ZWRpYUVuZHBvaW50UGVlckNvbm5lY3Rpb24uY3BwCi0gICAgTW9kdWxlcy9tZWRpYXN0cmVhbS9N
ZWRpYUVuZHBvaW50U2Vzc2lvbkRlc2NyaXB0aW9uLmNwcAogICAgIE1vZHVsZXMvbWVkaWFzdHJl
YW0vTWVkaWFTdHJlYW0uY3BwCiAgICAgTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbUV2
ZW50LmNwcAogICAgIE1vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1SZWdpc3RyeS5jcHAK
QEAgLTExMTYsNyArMTExNCw2IEBAIHNldChXZWJDb3JlX1NPVVJDRVMKICAgICBNb2R1bGVzL21l
ZGlhc3RyZWFtL1JUQ1J0cFRyYW5zY2VpdmVyLmNwcAogICAgIE1vZHVsZXMvbWVkaWFzdHJlYW0v
UlRDU2Vzc2lvbkRlc2NyaXB0aW9uLmNwcAogICAgIE1vZHVsZXMvbWVkaWFzdHJlYW0vUlRDVHJh
Y2tFdmVudC5jcHAKLSAgICBNb2R1bGVzL21lZGlhc3RyZWFtL1NEUFByb2Nlc3Nvci5jcHAKICAg
ICBNb2R1bGVzL21lZGlhc3RyZWFtL1VzZXJNZWRpYUNvbnRyb2xsZXIuY3BwCiAgICAgTW9kdWxl
cy9tZWRpYXN0cmVhbS9Vc2VyTWVkaWFSZXF1ZXN0LmNwcAogCkBAIC0yNTU0LDEzICsyNTUxLDEx
IEBAIHNldChXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGlt
ZU1lZGlhU291cmNlLmNwcAogICAgIHBsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lTWVkaWFT
b3VyY2VDZW50ZXIuY3BwCiAgICAgcGxhdGZvcm0vbWVkaWFzdHJlYW0vUmVhbHRpbWVNZWRpYVNv
dXJjZVNldHRpbmdzLmNwcAotICAgIHBsYXRmb3JtL21lZGlhc3RyZWFtL1NEUFByb2Nlc3NvclNj
cmlwdFJlc291cmNlLmNwcAogCiAgICAgcGxhdGZvcm0vbWVkaWFzdHJlYW0vbGlid2VicnRjL0xp
YldlYlJUQ1Byb3ZpZGVyLmNwcAogCiAgICAgcGxhdGZvcm0vbW9jay9EZXZpY2VPcmllbnRhdGlv
bkNsaWVudE1vY2suY3BwCiAgICAgcGxhdGZvcm0vbW9jay9HZW9sb2NhdGlvbkNsaWVudE1vY2su
Y3BwCi0gICAgcGxhdGZvcm0vbW9jay9Nb2NrTWVkaWFFbmRwb2ludC5jcHAKICAgICBwbGF0Zm9y
bS9tb2NrL01vY2tSZWFsdGltZUF1ZGlvU291cmNlLmNwcAogICAgIHBsYXRmb3JtL21vY2svTW9j
a1JlYWx0aW1lTWVkaWFTb3VyY2UuY3BwCiAgICAgcGxhdGZvcm0vbW9jay9Nb2NrUmVhbHRpbWVN
ZWRpYVNvdXJjZUNlbnRlci5jcHAKQEAgLTM4ODIsMjQgKzM4NzcsNiBAQCBpZiAoV2ViQ29yZV9V
U0VSX0FHRU5UX1NDUklQVFMpCiAgICAgbGlzdChBUFBFTkQgV2ViQ29yZV9ERVJJVkVEX1NPVVJD
RVMgJHtERVJJVkVEX1NPVVJDRVNfV0VCQ09SRV9ESVJ9L1VzZXJBZ2VudFNjcmlwdHNEYXRhLmNw
cCkKIGVuZGlmICgpCiAKLWlmIChFTkFCTEVfV0VCX1JUQykKLSAgICAjIE5lY2Vzc2FyeSB2YXJp
YWJsZXM6Ci0gICAgIyBXZWJDb3JlX1NEUF9QUk9DRVNTT1JfU0NSSVBUUyBjb250YWluaW5nIHRo
ZSBKYXZhU2NyaXB0IHNvdXJjZXMgbGlzdAotICAgICMgV2ViQ29yZV9TRFBfUFJPQ0VTU09SX1ND
UklQVFNfREVQRU5ERU5DSUVTIGNvbnRhaW5pbmcgdGhlIHNvdXJjZSBmaWxlIHRoYXQgd2lsbCBs
b2FkIHRoZSBzY3JpcHRzIHRvIGFkZCB0aGUgcHJvcGVyCi0gICAgIyAgIGRlcGVuZGVuY3kgYW5k
IGhhdmluZyB0aGVtIGJ1aWx0IGF0IHRoZSByaWdodCBtb21lbnQKLSAgICBzZXQoV2ViQ29yZV9T
RFBfUFJPQ0VTU09SX1NDUklQVFMgJHtXRUJDT1JFX0RJUn0vTW9kdWxlcy9tZWRpYXN0cmVhbS9z
ZHAuanMpCi0gICAgc2V0KFdlYkNvcmVfU0RQX1BST0NFU1NPUl9TQ1JJUFRTX0RFUEVOREVOQ0lF
UyAke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9TRFBQcm9jZXNzb3JTY3JpcHRS
ZXNvdXJjZS5jcHApCi0KLSAgICBNQUtFX0pTX0ZJTEVfQVJSQVlTKAotICAgICAgICAke0RFUklW
RURfU09VUkNFU19XRUJDT1JFX0RJUn0vU0RQUHJvY2Vzc29yU2NyaXB0c0RhdGEuY3BwCi0gICAg
ICAgICR7REVSSVZFRF9TT1VSQ0VTX1dFQkNPUkVfRElSfS9TRFBQcm9jZXNzb3JTY3JpcHRzRGF0
YS5oCi0gICAgICAgIFdlYkNvcmUKLSAgICAgICAgV2ViQ29yZV9TRFBfUFJPQ0VTU09SX1NDUklQ
VFMKLSAgICAgICAgV2ViQ29yZV9TRFBfUFJPQ0VTU09SX1NDUklQVFNfREVQRU5ERU5DSUVTCi0g
ICAgKQotICAgIGxpc3QoQVBQRU5EIFdlYkNvcmVfREVSSVZFRF9TT1VSQ0VTICR7REVSSVZFRF9T
T1VSQ0VTX1dFQkNPUkVfRElSfS9TRFBQcm9jZXNzb3JTY3JpcHRzRGF0YS5jcHApCi1lbmRpZiAo
KQotCiAjIEdlbmVyYXRlIHBsdWctaW4gcmVzb3VyY2VzCiBhZGRfY3VzdG9tX2NvbW1hbmQoCiAg
ICAgT1VUUFVUICR7REVSSVZFRF9TT1VSQ0VTX1dFQkNPUkVfRElSfS9QbHVnSW5zUmVzb3VyY2Vz
RGF0YS5jcHAgJHtERVJJVkVEX1NPVVJDRVNfV0VCQ09SRV9ESVJ9L1BsdWdJbnNSZXNvdXJjZXMu
aApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZSBiL1NvdXJj
ZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UKaW5kZXggMWQ1ZWYwMjBiNGMyZTlmYmIwYmUz
MTAxYTgwNzI5ZDdhNjllOWZlZS4uZDM2YTE5ODdjNmQwN2FiMGFjNTQ0NzU5NmExYjRhNGQzYjgx
OGY3ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtlCkBAIC0xMTg0LDIzICsxMTg0LDYg
QEAgQ29sb3JEYXRhLmNwcCA6IHBsYXRmb3JtL0NvbG9yRGF0YS5ncGVyZiAkKFdlYkNvcmUpL21h
a2UtaGFzaC10b29scy5wbAogCiAjIC0tLS0tLS0tCiAKLSMgV2ViUlRDIHNjcmlwdHMKLQotV0VC
Q09SRV9TRFBfUFJPQ0VTU09SX1NDUklQVFMgPSAKLQotaWZlcSAoJChPUyksTUFDT1MpCi0gICAg
V0VCQ09SRV9TRFBfUFJPQ0VTU09SX1NDUklQVFMgOj0gJChXRUJDT1JFX1NEUF9QUk9DRVNTT1Jf
U0NSSVBUUykgJChXZWJDb3JlKS9Nb2R1bGVzL21lZGlhc3RyZWFtL3NkcC5qcwotZW5kaWYKLQot
aWZkZWYgV0VCQ09SRV9TRFBfUFJPQ0VTU09SX1NDUklQVFMKLWFsbCA6IFNEUFByb2Nlc3NvclNj
cmlwdHNEYXRhLmgKLQotU0RQUHJvY2Vzc29yU2NyaXB0c0RhdGEuaCA6ICQoSmF2YVNjcmlwdENv
cmVfU0NSSVBUU19ESVIpL21ha2UtanMtZmlsZS1hcnJheXMucHkgJChXRUJDT1JFX1NEUF9QUk9D
RVNTT1JfU0NSSVBUUykKLQkkKFBZVEhPTikgJChKYXZhU2NyaXB0Q29yZV9TQ1JJUFRTX0RJUikv
bWFrZS1qcy1maWxlLWFycmF5cy5weSAtbiBXZWJDb3JlICRAIFNEUFByb2Nlc3NvclNjcmlwdHNE
YXRhLmNwcCAkKFdFQkNPUkVfU0RQX1BST0NFU1NPUl9TQ1JJUFRTKQotZW5kaWYKLQotIyAtLS0t
LS0tLQotCiAjIHVzZXIgYWdlbnQgc3R5bGUgc2hlZXRzCiAKIFVTRVJfQUdFTlRfU1RZTEVfU0hF
RVRTID0gJChXZWJDb3JlKS9jc3MvaHRtbC5jc3MgJChXZWJDb3JlKS9jc3MvcXVpcmtzLmNzcyAk
KFdlYkNvcmUpL2Nzcy9wbHVnSW5zLmNzcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9tZWRpYXN0cmVhbS9NZWRpYUVuZHBvaW50UGVlckNvbm5lY3Rpb24uY3BwIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYUVuZHBvaW50UGVlckNvbm5lY3Rpb24u
Y3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZTkyNTI3YWUyZmQ2NzZhNzczOWQ0
Zjc5Yzk2ZGY2NmZlMDViMGEwLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFFbmRwb2lu
dFBlZXJDb25uZWN0aW9uLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDg5MyArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDE1IEVyaWNzc29uIEFCLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogICAgaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICog
ICAgZGlzdHJpYnV0aW9uLgotICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBFcmljc3NvbiBub3Ig
dGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotICogICAgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
LSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0j
aW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiTWVkaWFFbmRwb2ludFBlZXJDb25uZWN0aW9u
LmgiCi0KLSNpZiBFTkFCTEUoV0VCX1JUQykKLQotI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKLSNp
bmNsdWRlICJKU1JUQ1Nlc3Npb25EZXNjcmlwdGlvbi5oIgotI2luY2x1ZGUgIk1lZGlhRW5kcG9p
bnRTZXNzaW9uQ29uZmlndXJhdGlvbi5oIgotI2luY2x1ZGUgIk1lZGlhRW5kcG9pbnRTZXNzaW9u
RGVzY3JpcHRpb24uaCIKLSNpbmNsdWRlICJNZWRpYVN0cmVhbS5oIgotI2luY2x1ZGUgIk1lZGlh
U3RyZWFtRXZlbnQuaCIKLSNpbmNsdWRlICJNZWRpYVN0cmVhbVRyYWNrLmgiCi0jaW5jbHVkZSAi
Tm90SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlICJQZWVyTWVkaWFEZXNjcmlwdGlvbi5oIgotI2lu
Y2x1ZGUgIlJUQ0Fuc3dlck9wdGlvbnMuaCIKLSNpbmNsdWRlICJSVENDb25maWd1cmF0aW9uLmgi
Ci0jaW5jbHVkZSAiUlRDSWNlQ2FuZGlkYXRlLmgiCi0jaW5jbHVkZSAiUlRDT2ZmZXJPcHRpb25z
LmgiCi0jaW5jbHVkZSAiUlRDUGVlckNvbm5lY3Rpb24uaCIKLSNpbmNsdWRlICJSVENQZWVyQ29u
bmVjdGlvbkljZUV2ZW50LmgiCi0jaW5jbHVkZSAiUlRDUnRwVHJhbnNjZWl2ZXIuaCIKLSNpbmNs
dWRlICJSVENUcmFja0V2ZW50LmgiCi0jaW5jbHVkZSAiU0RQUHJvY2Vzc29yLmgiCi0jaW5jbHVk
ZSA8d3RmL0Z1bmN0aW9uLmg+Ci0jaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KLSNpbmNsdWRl
IDx3dGYvdGV4dC9CYXNlNjQuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi11c2luZyBuYW1l
c3BhY2UgUGVlckNvbm5lY3Rpb247Ci0KLXVzaW5nIE1lZGlhRGVzY3JpcHRpb25WZWN0b3IgPSBW
ZWN0b3I8UGVlck1lZGlhRGVzY3JpcHRpb24+OwotdXNpbmcgUnRwVHJhbnNjZWl2ZXJWZWN0b3Ig
PSBWZWN0b3I8UmVmUHRyPFJUQ1J0cFRyYW5zY2VpdmVyPj47Ci0KLS8vIFdlIHVzZSBiYXNlNjQg
dG8gZ2VuZXJhdGUgdGhlIHJhbmRvbSBzdHJpbmdzIHNvIHdlIG5lZWQgYSBzaXplIHRoYXQgYXZv
aWRzIHBhZGRpbmcgdG8gZ2V0IGljZS1jaGFycy4KLXN0YXRpYyBjb25zdCBzaXplX3QgY25hbWVT
aXplID0gMTg7Ci0vLyBTaXplIHJhbmdlIGZyb20gNCB0byAyNTYgaWNlLWNoYXJzIGRlZmluZWQg
aW4gUkZDIDUyNDUuCi1zdGF0aWMgY29uc3Qgc2l6ZV90IGljZVVmcmFnU2l6ZSA9IDY7Ci0vLyBT
aXplIHJhbmdlIGZyb20gMjIgdG8gMjU2IGljZS1jaGFycyBkZWZpbmVkIGluIFJGQyA1MjQ1Lgot
c3RhdGljIGNvbnN0IHNpemVfdCBpY2VQYXNzd29yZFNpemUgPSAyNDsKLQotI2lmICFVU0UoTElC
V0VCUlRDKQotc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxQZWVyQ29ubmVjdGlvbkJhY2tlbmQ+IGNy
ZWF0ZU1lZGlhRW5kcG9pbnRQZWVyQ29ubmVjdGlvbihSVENQZWVyQ29ubmVjdGlvbiYgcGVlckNv
bm5lY3Rpb24pCi17Ci0gICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxQZWVyQ29ubmVjdGlvbkJh
Y2tlbmQ+KG5ldyBNZWRpYUVuZHBvaW50UGVlckNvbm5lY3Rpb24ocGVlckNvbm5lY3Rpb24pKTsK
LX0KLQotQ3JlYXRlUGVlckNvbm5lY3Rpb25CYWNrZW5kIFBlZXJDb25uZWN0aW9uQmFja2VuZDo6
Y3JlYXRlID0gY3JlYXRlTWVkaWFFbmRwb2ludFBlZXJDb25uZWN0aW9uOwotI2VuZGlmCi0KLXN0
YXRpYyBTdHJpbmcgcmFuZG9tU3RyaW5nKHNpemVfdCBzaXplKQotewotICAgIHVuc2lnbmVkIGNo
YXIgcmFuZG9tVmFsdWVzW3NpemVdOwotICAgIGNyeXB0b2dyYXBoaWNhbGx5UmFuZG9tVmFsdWVz
KHJhbmRvbVZhbHVlcywgc2l6ZSk7Ci0gICAgcmV0dXJuIGJhc2U2NEVuY29kZShyYW5kb21WYWx1
ZXMsIHNpemUpOwotfQotCi1NZWRpYUVuZHBvaW50UGVlckNvbm5lY3Rpb246Ok1lZGlhRW5kcG9p
bnRQZWVyQ29ubmVjdGlvbihSVENQZWVyQ29ubmVjdGlvbiYgcGVlckNvbm5lY3Rpb24pCi0gICAg
OiBQZWVyQ29ubmVjdGlvbkJhY2tlbmQocGVlckNvbm5lY3Rpb24pCi0gICAgLCBtX21lZGlhRW5k
cG9pbnQoTWVkaWFFbmRwb2ludDo6Y3JlYXRlKCp0aGlzKSkKLSAgICAsIG1fc2RwUHJvY2Vzc29y
KHN0ZDo6bWFrZV91bmlxdWU8U0RQUHJvY2Vzc29yPihtX3BlZXJDb25uZWN0aW9uLnNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoKSkpCi0gICAgLCBtX2NuYW1lKHJhbmRvbVN0cmluZyhjbmFtZVNpemUp
KQotICAgICwgbV9pY2VVZnJhZyhyYW5kb21TdHJpbmcoaWNlVWZyYWdTaXplKSkKLSAgICAsIG1f
aWNlUGFzc3dvcmQocmFuZG9tU3RyaW5nKGljZVBhc3N3b3JkU2l6ZSkpCi17Ci0gICAgQVNTRVJU
KG1fbWVkaWFFbmRwb2ludCk7Ci0KLSAgICBtX2RlZmF1bHRBdWRpb1BheWxvYWRzID0gbV9tZWRp
YUVuZHBvaW50LT5nZXREZWZhdWx0QXVkaW9QYXlsb2FkcygpOwotICAgIG1fZGVmYXVsdFZpZGVv
UGF5bG9hZHMgPSBtX21lZGlhRW5kcG9pbnQtPmdldERlZmF1bHRWaWRlb1BheWxvYWRzKCk7Ci0K
LSAgICAvLyBUYXNrcyAoc2VlIHJ1blRhc2soKSkgd2lsbCBiZSBkZWZlcnJlZCB1bnRpbCB3ZSBn
ZXQgdGhlIERUTFMgZmluZ2VycHJpbnQuCi0gICAgbV9tZWRpYUVuZHBvaW50LT5nZW5lcmF0ZUR0
bHNJbmZvKCk7Ci19Ci0KLXN0YXRpYyBSVENSdHBUcmFuc2NlaXZlciogbWF0Y2hUcmFuc2NlaXZl
cihjb25zdCBSdHBUcmFuc2NlaXZlclZlY3RvciYgdHJhbnNjZWl2ZXJzLCBjb25zdCBXVEY6OkZ1
bmN0aW9uPGJvb2woUlRDUnRwVHJhbnNjZWl2ZXImKT4mIG1hdGNoRnVuY3Rpb24pCi17Ci0gICAg
Zm9yIChhdXRvJiB0cmFuc2NlaXZlciA6IHRyYW5zY2VpdmVycykgewotICAgICAgICBpZiAobWF0
Y2hGdW5jdGlvbigqdHJhbnNjZWl2ZXIpKQotICAgICAgICAgICAgcmV0dXJuIHRyYW5zY2VpdmVy
LmdldCgpOwotICAgIH0KLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQotc3RhdGljIFJUQ1J0cFRy
YW5zY2VpdmVyKiBtYXRjaFRyYW5zY2VpdmVyQnlNaWQoY29uc3QgUnRwVHJhbnNjZWl2ZXJWZWN0
b3ImIHRyYW5zY2VpdmVycywgY29uc3QgU3RyaW5nJiBtaWQpCi17Ci0gICAgcmV0dXJuIG1hdGNo
VHJhbnNjZWl2ZXIodHJhbnNjZWl2ZXJzLCBbJm1pZF0gKFJUQ1J0cFRyYW5zY2VpdmVyJiBjdXJy
ZW50KSB7Ci0gICAgICAgIHJldHVybiBjdXJyZW50Lm1pZCgpID09IG1pZDsKLSAgICB9KTsKLX0K
LQotc3RhdGljIGJvb2wgaGFzVW5hc3NvY2lhdGVkVHJhbnNjZWl2ZXJzKGNvbnN0IFJ0cFRyYW5z
Y2VpdmVyVmVjdG9yJiB0cmFuc2NlaXZlcnMpCi17Ci0gICAgcmV0dXJuIG1hdGNoVHJhbnNjZWl2
ZXIodHJhbnNjZWl2ZXJzLCBbXSAoUlRDUnRwVHJhbnNjZWl2ZXImIGN1cnJlbnQpIHsKLSAgICAg
ICAgcmV0dXJuIGN1cnJlbnQubWlkKCkuaXNOdWxsKCkgJiYgIWN1cnJlbnQuc3RvcHBlZCgpOwot
ICAgIH0pOwotfQotCi12b2lkIE1lZGlhRW5kcG9pbnRQZWVyQ29ubmVjdGlvbjo6cnVuVGFzayhG
dW5jdGlvbjx2b2lkICgpPiYmIHRhc2spCi17Ci0gICAgaWYgKG1fZHRsc0ZpbmdlcnByaW50Lmlz
TnVsbCgpKSB7Ci0gICAgICAgIC8vIE9ubHkgb25lIHRhc2sgbmVlZHMgdG8gYmUgZGVmZXJyZWQg
c2luY2UgaXQgd2lsbCBob2xkIG9mZiBhbnkgb3RoZXJzIHVudGlsIGNvbXBsZXRlZC4KLSAgICAg
ICAgQVNTRVJUKCFtX2luaXRpYWxEZWZlcnJlZFRhc2spOwotICAgICAgICBtX2luaXRpYWxEZWZl
cnJlZFRhc2sgPSBXVEZNb3ZlKHRhc2spOwotICAgIH0gZWxzZQotICAgICAgICBjYWxsT25NYWlu
VGhyZWFkKFdURk1vdmUodGFzaykpOwotfQotCi12b2lkIE1lZGlhRW5kcG9pbnRQZWVyQ29ubmVj
dGlvbjo6c3RhcnRSdW5uaW5nVGFza3MoKQotewotICAgIGlmICghbV9pbml0aWFsRGVmZXJyZWRU
YXNrKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2luaXRpYWxEZWZlcnJlZFRhc2soKTsKLSAg
ICBtX2luaXRpYWxEZWZlcnJlZFRhc2sgPSBudWxscHRyOwotfQotCi12b2lkIE1lZGlhRW5kcG9p
bnRQZWVyQ29ubmVjdGlvbjo6ZG9DcmVhdGVPZmZlcihSVENPZmZlck9wdGlvbnMmJiBvcHRpb25z
KQotewotICAgIHJ1blRhc2soW3RoaXMsIHByb3RlY3RlZE9wdGlvbnMgPSBXVEZNb3ZlKG9wdGlv
bnMpXSgpIG11dGFibGUgewotICAgICAgICBjcmVhdGVPZmZlclRhc2socHJvdGVjdGVkT3B0aW9u
cyk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgTWVkaWFFbmRwb2ludFBlZXJDb25uZWN0aW9uOjpjcmVh
dGVPZmZlclRhc2soY29uc3QgUlRDT2ZmZXJPcHRpb25zJikKLXsKLSAgICBBU1NFUlQoIW1fZHRs
c0ZpbmdlcnByaW50LmlzRW1wdHkoKSk7Ci0KLSAgICBNZWRpYUVuZHBvaW50U2Vzc2lvbkRlc2Ny
aXB0aW9uKiBsb2NhbERlc2NyaXB0aW9uID0gaW50ZXJuYWxMb2NhbERlc2NyaXB0aW9uKCk7Ci0g
ICAgUmVmUHRyPE1lZGlhRW5kcG9pbnRTZXNzaW9uQ29uZmlndXJhdGlvbj4gY29uZmlndXJhdGlv
blNuYXBzaG90ID0gbG9jYWxEZXNjcmlwdGlvbiA/Ci0gICAgICAgIGxvY2FsRGVzY3JpcHRpb24t
PmNvbmZpZ3VyYXRpb24oKS0+Y2xvbmUoKSA6IE1lZGlhRW5kcG9pbnRTZXNzaW9uQ29uZmlndXJh
dGlvbjo6Y3JlYXRlKCk7Ci0KLSAgICBjb25maWd1cmF0aW9uU25hcHNob3QtPnNldEJ1bmRsZVBv
bGljeShtX3BlZXJDb25uZWN0aW9uLmdldENvbmZpZ3VyYXRpb24oKS5idW5kbGVQb2xpY3kpOwot
ICAgIGNvbmZpZ3VyYXRpb25TbmFwc2hvdC0+c2V0U2Vzc2lvblZlcnNpb24obV9zZHBPZmZlclNl
c3Npb25WZXJzaW9uKyspOwotCi0gICAgYXV0byB0cmFuc2NlaXZlcnMgPSBSdHBUcmFuc2NlaXZl
clZlY3RvcihtX3BlZXJDb25uZWN0aW9uLmdldFRyYW5zY2VpdmVycygpKTsKLQotICAgIC8vIFJl
bW92ZSBhbnkgdHJhbnNjZWl2ZXIgb2JqZWN0cyBmcm9tIHRyYW5zY2VpdmVycyB0aGF0IGNhbiBi
ZSBtYXRjaGVkIHRvIGFuIGV4aXN0aW5nIG1lZGlhIGRlc2NyaXB0aW9uLgotICAgIGZvciAoYXV0
byYgbWVkaWFEZXNjcmlwdGlvbiA6IGNvbmZpZ3VyYXRpb25TbmFwc2hvdC0+bWVkaWFEZXNjcmlw
dGlvbnMoKSkgewotICAgICAgICBpZiAoIW1lZGlhRGVzY3JpcHRpb24ucG9ydCkgewotICAgICAg
ICAgICAgLy8gVGhpcyBtZWRpYSBkZXNjcmlwdGlvbiBzaG91bGQgYmUgcmVjeWNsZWQuCi0gICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIFJUQ1J0cFRyYW5zY2VpdmVy
KiB0cmFuc2NlaXZlciA9IG1hdGNoVHJhbnNjZWl2ZXJCeU1pZCh0cmFuc2NlaXZlcnMsIG1lZGlh
RGVzY3JpcHRpb24ubWlkKTsKLSAgICAgICAgaWYgKCF0cmFuc2NlaXZlcikKLSAgICAgICAgICAg
IGNvbnRpbnVlOwotCi0gICAgICAgIG1lZGlhRGVzY3JpcHRpb24ubW9kZSA9IHRyYW5zY2VpdmVy
LT5kaXJlY3Rpb25TdHJpbmcoKTsKLSAgICAgICAgaWYgKHRyYW5zY2VpdmVyLT5oYXNTZW5kaW5n
RGlyZWN0aW9uKCkpIHsKLSAgICAgICAgICAgIGF1dG8mIHNlbmRlciA9IHRyYW5zY2VpdmVyLT5z
ZW5kZXIoKTsKLQotICAgICAgICAgICAgbWVkaWFEZXNjcmlwdGlvbi5tZWRpYVN0cmVhbUlkID0g
c2VuZGVyLm1lZGlhU3RyZWFtSWRzKClbMF07Ci0gICAgICAgICAgICBtZWRpYURlc2NyaXB0aW9u
Lm1lZGlhU3RyZWFtVHJhY2tJZCA9IHNlbmRlci50cmFja0lkKCk7Ci0gICAgICAgIH0KLQotICAg
ICAgICB0cmFuc2NlaXZlcnMucmVtb3ZlRmlyc3QodHJhbnNjZWl2ZXIpOwotICAgIH0KLQotICAg
IC8vIEFkZCBtZWRpYSBkZXNjcmlwdGlvbnMgZm9yIHJlbWFpbmluZyB0cmFuc2NlaXZlcnMuCi0g
ICAgZm9yIChhdXRvJiB0cmFuc2NlaXZlciA6IHRyYW5zY2VpdmVycykgewotICAgICAgICBQZWVy
TWVkaWFEZXNjcmlwdGlvbiBtZWRpYURlc2NyaXB0aW9uOwotICAgICAgICBhdXRvJiBzZW5kZXIg
PSB0cmFuc2NlaXZlci0+c2VuZGVyKCk7Ci0KLSAgICAgICAgbWVkaWFEZXNjcmlwdGlvbi5tb2Rl
ID0gdHJhbnNjZWl2ZXItPmRpcmVjdGlvblN0cmluZygpOwotICAgICAgICBtZWRpYURlc2NyaXB0
aW9uLm1pZCA9IHRyYW5zY2VpdmVyLT5wcm92aXNpb25hbE1pZCgpOwotICAgICAgICBtZWRpYURl
c2NyaXB0aW9uLm1lZGlhU3RyZWFtSWQgPSBzZW5kZXIubWVkaWFTdHJlYW1JZHMoKVswXTsKLSAg
ICAgICAgbWVkaWFEZXNjcmlwdGlvbi50eXBlID0gc2VuZGVyLnRyYWNrS2luZCgpOwotICAgICAg
ICBtZWRpYURlc2NyaXB0aW9uLnBheWxvYWRzID0gc2VuZGVyLnRyYWNrS2luZCgpID09ICJhdWRp
byIgPyBtX2RlZmF1bHRBdWRpb1BheWxvYWRzIDogbV9kZWZhdWx0VmlkZW9QYXlsb2FkczsKLSAg
ICAgICAgbWVkaWFEZXNjcmlwdGlvbi5kdGxzRmluZ2VycHJpbnRIYXNoRnVuY3Rpb24gPSBtX2R0
bHNGaW5nZXJwcmludEZ1bmN0aW9uOwotICAgICAgICBtZWRpYURlc2NyaXB0aW9uLmR0bHNGaW5n
ZXJwcmludCA9IG1fZHRsc0ZpbmdlcnByaW50OwotICAgICAgICBtZWRpYURlc2NyaXB0aW9uLmNu
YW1lID0gbV9jbmFtZTsKLSAgICAgICAgbWVkaWFEZXNjcmlwdGlvbi5hZGRTc3JjKGNyeXB0b2dy
YXBoaWNhbGx5UmFuZG9tTnVtYmVyKCkpOwotICAgICAgICBtZWRpYURlc2NyaXB0aW9uLmljZVVm
cmFnID0gbV9pY2VVZnJhZzsKLSAgICAgICAgbWVkaWFEZXNjcmlwdGlvbi5pY2VQYXNzd29yZCA9
IG1faWNlUGFzc3dvcmQ7Ci0KLSAgICAgICAgaWYgKHNlbmRlci50cmFjaygpKQotICAgICAgICAg
ICAgbWVkaWFEZXNjcmlwdGlvbi5tZWRpYVN0cmVhbVRyYWNrSWQgPSBzZW5kZXIudHJhY2tJZCgp
OwotCi0gICAgICAgIGNvbmZpZ3VyYXRpb25TbmFwc2hvdC0+YWRkTWVkaWFEZXNjcmlwdGlvbihX
VEZNb3ZlKG1lZGlhRGVzY3JpcHRpb24pKTsKLSAgICB9Ci0KLSAgICBTdHJpbmcgc2RwOwotICAg
IFNEUFByb2Nlc3Nvcjo6UmVzdWx0IHJlc3VsdCA9IG1fc2RwUHJvY2Vzc29yLT5nZW5lcmF0ZSgq
Y29uZmlndXJhdGlvblNuYXBzaG90LCBzZHApOwotICAgIGlmIChyZXN1bHQgIT0gU0RQUHJvY2Vz
c29yOjpSZXN1bHQ6OlN1Y2Nlc3MpIHsKLSAgICAgICAgY3JlYXRlT2ZmZXJGYWlsZWQoRXhjZXB0
aW9uIHsgT3BlcmF0aW9uRXJyb3IsICJTRFBQcm9jZXNzb3IgaW50ZXJuYWwgZXJyb3IiIH0pOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGNyZWF0ZU9mZmVyU3VjY2VlZGVkKFdURk1vdmUo
c2RwKSk7Ci19Ci0KLXZvaWQgTWVkaWFFbmRwb2ludFBlZXJDb25uZWN0aW9uOjpkb0NyZWF0ZUFu
c3dlcihSVENBbnN3ZXJPcHRpb25zJiYgb3B0aW9ucykKLXsKLSAgICBydW5UYXNrKFt0aGlzLCBw
cm90ZWN0ZWRPcHRpb25zID0gV1RGTW92ZShvcHRpb25zKV0oKSBtdXRhYmxlIHsKLSAgICAgICAg
Y3JlYXRlQW5zd2VyVGFzayhwcm90ZWN0ZWRPcHRpb25zKTsKLSAgICB9KTsKLX0KLQotdm9pZCBN
ZWRpYUVuZHBvaW50UGVlckNvbm5lY3Rpb246OmNyZWF0ZUFuc3dlclRhc2soY29uc3QgUlRDQW5z
d2VyT3B0aW9ucyYpCi17Ci0gICAgQVNTRVJUKCFtX2R0bHNGaW5nZXJwcmludC5pc0VtcHR5KCkp
OwotCi0gICAgaWYgKCFpbnRlcm5hbFJlbW90ZURlc2NyaXB0aW9uKCkpIHsKLSAgICAgICAgY3Jl
YXRlQW5zd2VyRmFpbGVkKEV4Y2VwdGlvbiB7IEludmFsaWRTdGF0ZUVycm9yLCAiTm8gcmVtb3Rl
IGRlc2NyaXB0aW9uIHNldCIgfSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBNZWRp
YUVuZHBvaW50U2Vzc2lvbkRlc2NyaXB0aW9uKiBsb2NhbERlc2NyaXB0aW9uID0gaW50ZXJuYWxM
b2NhbERlc2NyaXB0aW9uKCk7Ci0gICAgUmVmUHRyPE1lZGlhRW5kcG9pbnRTZXNzaW9uQ29uZmln
dXJhdGlvbj4gY29uZmlndXJhdGlvblNuYXBzaG90ID0gbG9jYWxEZXNjcmlwdGlvbiA/Ci0gICAg
ICAgIGxvY2FsRGVzY3JpcHRpb24tPmNvbmZpZ3VyYXRpb24oKS0+Y2xvbmUoKSA6IE1lZGlhRW5k
cG9pbnRTZXNzaW9uQ29uZmlndXJhdGlvbjo6Y3JlYXRlKCk7Ci0KLSAgICBjb25maWd1cmF0aW9u
U25hcHNob3QtPnNldEJ1bmRsZVBvbGljeShtX3BlZXJDb25uZWN0aW9uLmdldENvbmZpZ3VyYXRp
b24oKS5idW5kbGVQb2xpY3kpOwotICAgIGNvbmZpZ3VyYXRpb25TbmFwc2hvdC0+c2V0U2Vzc2lv
blZlcnNpb24obV9zZHBBbnN3ZXJTZXNzaW9uVmVyc2lvbisrKTsKLQotICAgIGF1dG8gdHJhbnNj
ZWl2ZXJzID0gUnRwVHJhbnNjZWl2ZXJWZWN0b3IobV9wZWVyQ29ubmVjdGlvbi5nZXRUcmFuc2Nl
aXZlcnMoKSk7Ci0gICAgYXV0byYgcmVtb3RlTWVkaWFEZXNjcmlwdGlvbnMgPSBpbnRlcm5hbFJl
bW90ZURlc2NyaXB0aW9uKCktPmNvbmZpZ3VyYXRpb24oKS0+bWVkaWFEZXNjcmlwdGlvbnMoKTsK
LQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCByZW1vdGVNZWRpYURlc2NyaXB0aW9ucy5z
aXplKCk7ICsraSkgewotICAgICAgICBhdXRvJiByZW1vdGVNZWRpYURlc2NyaXB0aW9uID0gcmVt
b3RlTWVkaWFEZXNjcmlwdGlvbnNbaV07Ci0KLSAgICAgICAgYXV0byogdHJhbnNjZWl2ZXIgPSBt
YXRjaFRyYW5zY2VpdmVyQnlNaWQodHJhbnNjZWl2ZXJzLCByZW1vdGVNZWRpYURlc2NyaXB0aW9u
Lm1pZCk7Ci0gICAgICAgIGlmICghdHJhbnNjZWl2ZXIpIHsKLSAgICAgICAgICAgIExPR19FUlJP
UigiQ291bGQgbm90IGZpbmQgYSBtYXRjaGluZyB0cmFuc2NlaXZlciBmb3IgcmVtb3RlIGRlc2Ny
aXB0aW9uIHdoaWxlIGNyZWF0aW5nIGFuc3dlciIpOwotICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgIH0KLQotICAgICAgICBpZiAoaSA+PSBjb25maWd1cmF0aW9uU25hcHNob3QtPm1lZGlh
RGVzY3JpcHRpb25zKCkuc2l6ZSgpKSB7Ci0gICAgICAgICAgICBQZWVyTWVkaWFEZXNjcmlwdGlv
biBuZXdNZWRpYURlc2NyaXB0aW9uOwotCi0gICAgICAgICAgICBhdXRvJiBzZW5kZXIgPSB0cmFu
c2NlaXZlci0+c2VuZGVyKCk7Ci0gICAgICAgICAgICBpZiAoc2VuZGVyLnRyYWNrKCkpIHsKLSAg
ICAgICAgICAgICAgICBpZiAoc2VuZGVyLm1lZGlhU3RyZWFtSWRzKCkuc2l6ZSgpKQotICAgICAg
ICAgICAgICAgICAgICBuZXdNZWRpYURlc2NyaXB0aW9uLm1lZGlhU3RyZWFtSWQgPSBzZW5kZXIu
bWVkaWFTdHJlYW1JZHMoKVswXTsKLSAgICAgICAgICAgICAgICBuZXdNZWRpYURlc2NyaXB0aW9u
Lm1lZGlhU3RyZWFtVHJhY2tJZCA9IHNlbmRlci50cmFja0lkKCk7Ci0gICAgICAgICAgICAgICAg
bmV3TWVkaWFEZXNjcmlwdGlvbi5hZGRTc3JjKGNyeXB0b2dyYXBoaWNhbGx5UmFuZG9tTnVtYmVy
KCkpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBuZXdNZWRpYURlc2NyaXB0aW9uLm1v
ZGUgPSB0cmFuc2NlaXZlci0+ZGlyZWN0aW9uU3RyaW5nKCk7Ci0gICAgICAgICAgICBuZXdNZWRp
YURlc2NyaXB0aW9uLnR5cGUgPSByZW1vdGVNZWRpYURlc2NyaXB0aW9uLnR5cGU7Ci0gICAgICAg
ICAgICBuZXdNZWRpYURlc2NyaXB0aW9uLm1pZCA9IHJlbW90ZU1lZGlhRGVzY3JpcHRpb24ubWlk
OwotICAgICAgICAgICAgbmV3TWVkaWFEZXNjcmlwdGlvbi5kdGxzU2V0dXAgPSByZW1vdGVNZWRp
YURlc2NyaXB0aW9uLmR0bHNTZXR1cCA9PSAiYWN0aXZlIiA/ICJwYXNzaXZlIiA6ICJhY3RpdmUi
OwotICAgICAgICAgICAgbmV3TWVkaWFEZXNjcmlwdGlvbi5kdGxzRmluZ2VycHJpbnRIYXNoRnVu
Y3Rpb24gPSBtX2R0bHNGaW5nZXJwcmludEZ1bmN0aW9uOwotICAgICAgICAgICAgbmV3TWVkaWFE
ZXNjcmlwdGlvbi5kdGxzRmluZ2VycHJpbnQgPSBtX2R0bHNGaW5nZXJwcmludDsKLSAgICAgICAg
ICAgIG5ld01lZGlhRGVzY3JpcHRpb24uY25hbWUgPSBtX2NuYW1lOwotICAgICAgICAgICAgbmV3
TWVkaWFEZXNjcmlwdGlvbi5pY2VVZnJhZyA9IG1faWNlVWZyYWc7Ci0gICAgICAgICAgICBuZXdN
ZWRpYURlc2NyaXB0aW9uLmljZVBhc3N3b3JkID0gbV9pY2VQYXNzd29yZDsKLQotICAgICAgICAg
ICAgY29uZmlndXJhdGlvblNuYXBzaG90LT5hZGRNZWRpYURlc2NyaXB0aW9uKFdURk1vdmUobmV3
TWVkaWFEZXNjcmlwdGlvbikpOwotICAgICAgICB9Ci0KLSAgICAgICAgUGVlck1lZGlhRGVzY3Jp
cHRpb24mIGxvY2FsTWVkaWFEZXNjcmlwdGlvbiA9IGNvbmZpZ3VyYXRpb25TbmFwc2hvdC0+bWVk
aWFEZXNjcmlwdGlvbnMoKVtpXTsKLQotICAgICAgICBsb2NhbE1lZGlhRGVzY3JpcHRpb24ucGF5
bG9hZHMgPSByZW1vdGVNZWRpYURlc2NyaXB0aW9uLnBheWxvYWRzOwotICAgICAgICBsb2NhbE1l
ZGlhRGVzY3JpcHRpb24ucnRjcE11eCA9IHJlbW90ZU1lZGlhRGVzY3JpcHRpb24ucnRjcE11eDsK
LQotICAgICAgICBpZiAoIWxvY2FsTWVkaWFEZXNjcmlwdGlvbi5zc3Jjcy5zaXplKCkpCi0gICAg
ICAgICAgICBsb2NhbE1lZGlhRGVzY3JpcHRpb24uYWRkU3NyYyhjcnlwdG9ncmFwaGljYWxseVJh
bmRvbU51bWJlcigpKTsKLQotICAgICAgICBpZiAobG9jYWxNZWRpYURlc2NyaXB0aW9uLmR0bHNT
ZXR1cCA9PSAiYWN0cGFzcyIpCi0gICAgICAgICAgICBsb2NhbE1lZGlhRGVzY3JpcHRpb24uZHRs
c1NldHVwID0gInBhc3NpdmUiOwotCi0gICAgICAgIHRyYW5zY2VpdmVycy5yZW1vdmVGaXJzdCh0
cmFuc2NlaXZlcik7Ci0gICAgfQotCi0gICAgLy8gVW5hc3NvY2lhdGVkIChub24tc3RvcHBlZCkg
dHJhbnNjZWl2ZXJzIG5lZWQgdG8gYmUgbmVnb3RpYXRlZCBpbiBhIGZvbGxvdy11cCBvZmZlci4K
LSAgICBpZiAoaGFzVW5hc3NvY2lhdGVkVHJhbnNjZWl2ZXJzKHRyYW5zY2VpdmVycykpCi0gICAg
ICAgIG1hcmtBc05lZWRpbmdOZWdvdGlhdGlvbigpOwotCi0gICAgU3RyaW5nIHNkcDsKLSAgICBT
RFBQcm9jZXNzb3I6OlJlc3VsdCByZXN1bHQgPSBtX3NkcFByb2Nlc3Nvci0+Z2VuZXJhdGUoKmNv
bmZpZ3VyYXRpb25TbmFwc2hvdCwgc2RwKTsKLSAgICBpZiAocmVzdWx0ICE9IFNEUFByb2Nlc3Nv
cjo6UmVzdWx0OjpTdWNjZXNzKSB7Ci0gICAgICAgIGNyZWF0ZUFuc3dlckZhaWxlZChFeGNlcHRp
b24geyBPcGVyYXRpb25FcnJvciwgIlNEUFByb2Nlc3NvciBpbnRlcm5hbCBlcnJvciIgfSk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgY3JlYXRlQW5zd2VyU3VjY2VlZGVkKFdURk1vdmUo
c2RwKSk7Ci19Ci0KLXN0YXRpYyBSZWFsdGltZU1lZGlhU291cmNlTWFwIGNyZWF0ZVNvdXJjZU1h
cChjb25zdCBNZWRpYURlc2NyaXB0aW9uVmVjdG9yJiByZW1vdGVNZWRpYURlc2NyaXB0aW9ucywg
dW5zaWduZWQgbG9jYWxNZWRpYURlc2NyaXB0aW9uQ291bnQsIGNvbnN0IFJ0cFRyYW5zY2VpdmVy
VmVjdG9yJiB0cmFuc2NlaXZlcnMpCi17Ci0gICAgUmVhbHRpbWVNZWRpYVNvdXJjZU1hcCBzb3Vy
Y2VNYXA7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcmVtb3RlTWVkaWFEZXNjcmlw
dGlvbnMuc2l6ZSgpICYmIGkgPCBsb2NhbE1lZGlhRGVzY3JpcHRpb25Db3VudDsgKytpKSB7Ci0g
ICAgICAgIGF1dG8mIHJlbW90ZU1lZGlhRGVzY3JpcHRpb24gPSByZW1vdGVNZWRpYURlc2NyaXB0
aW9uc1tpXTsKLSAgICAgICAgaWYgKHJlbW90ZU1lZGlhRGVzY3JpcHRpb24udHlwZSAhPSAiYXVk
aW8iICYmIHJlbW90ZU1lZGlhRGVzY3JpcHRpb24udHlwZSAhPSAidmlkZW8iKQotICAgICAgICAg
ICAgY29udGludWU7Ci0KLSAgICAgICAgUlRDUnRwVHJhbnNjZWl2ZXIqIHRyYW5zY2VpdmVyID0g
bWF0Y2hUcmFuc2NlaXZlckJ5TWlkKHRyYW5zY2VpdmVycywgcmVtb3RlTWVkaWFEZXNjcmlwdGlv
bi5taWQpOwotICAgICAgICBpZiAodHJhbnNjZWl2ZXIpIHsKLSAgICAgICAgICAgIGlmICh0cmFu
c2NlaXZlci0+aGFzU2VuZGluZ0RpcmVjdGlvbigpICYmIHRyYW5zY2VpdmVyLT5zZW5kZXIoKS50
cmFjaygpKQotICAgICAgICAgICAgICAgIHNvdXJjZU1hcC5zZXQodHJhbnNjZWl2ZXItPm1pZCgp
LCAmdHJhbnNjZWl2ZXItPnNlbmRlcigpLnRyYWNrKCktPnNvdXJjZSgpKTsKLSAgICAgICAgfQot
ICAgIH0KLQotICAgIHJldHVybiBzb3VyY2VNYXA7Ci19Ci0KLXZvaWQgTWVkaWFFbmRwb2ludFBl
ZXJDb25uZWN0aW9uOjpkb1NldExvY2FsRGVzY3JpcHRpb24oUlRDU2Vzc2lvbkRlc2NyaXB0aW9u
JiBkZXNjcmlwdGlvbikKLXsKLSAgICBydW5UYXNrKFt0aGlzLCBwcm90ZWN0ZWREZXNjcmlwdGlv
biA9IFJlZlB0cjxSVENTZXNzaW9uRGVzY3JpcHRpb24+KCZkZXNjcmlwdGlvbildKCkgbXV0YWJs
ZSB7Ci0gICAgICAgIHNldExvY2FsRGVzY3JpcHRpb25UYXNrKFdURk1vdmUocHJvdGVjdGVkRGVz
Y3JpcHRpb24pKTsKLSAgICB9KTsKLX0KLQotdm9pZCBNZWRpYUVuZHBvaW50UGVlckNvbm5lY3Rp
b246OnNldExvY2FsRGVzY3JpcHRpb25UYXNrKFJlZlB0cjxSVENTZXNzaW9uRGVzY3JpcHRpb24+
JiYgZGVzY3JpcHRpb24pCi17Ci0gICAgaWYgKG1fcGVlckNvbm5lY3Rpb24uaXNDbG9zZWQoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byByZXN1bHQgPSBNZWRpYUVuZHBvaW50U2Vzc2lv
bkRlc2NyaXB0aW9uOjpjcmVhdGUoV1RGTW92ZShkZXNjcmlwdGlvbiksICptX3NkcFByb2Nlc3Nv
cik7Ci0gICAgaWYgKHJlc3VsdC5oYXNFeGNlcHRpb24oKSkgewotICAgICAgICBzZXRMb2NhbERl
c2NyaXB0aW9uRmFpbGVkKHJlc3VsdC5yZWxlYXNlRXhjZXB0aW9uKCkpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotICAgIGF1dG8gbmV3RGVzY3JpcHRpb24gPSByZXN1bHQucmVsZWFzZVJldHVy
blZhbHVlKCk7Ci0KLSAgICBjb25zdCBSdHBUcmFuc2NlaXZlclZlY3RvciYgdHJhbnNjZWl2ZXJz
ID0gbV9wZWVyQ29ubmVjdGlvbi5nZXRUcmFuc2NlaXZlcnMoKTsKLSAgICBjb25zdCBNZWRpYURl
c2NyaXB0aW9uVmVjdG9yJiBtZWRpYURlc2NyaXB0aW9ucyA9IG5ld0Rlc2NyaXB0aW9uLT5jb25m
aWd1cmF0aW9uKCktPm1lZGlhRGVzY3JpcHRpb25zKCk7Ci0gICAgTWVkaWFFbmRwb2ludFNlc3Np
b25EZXNjcmlwdGlvbiogbG9jYWxEZXNjcmlwdGlvbiA9IGludGVybmFsTG9jYWxEZXNjcmlwdGlv
bigpOwotICAgIHVuc2lnbmVkIHByZXZpb3VzTnVtYmVyT2ZNZWRpYURlc2NyaXB0aW9ucyA9IGxv
Y2FsRGVzY3JpcHRpb24gPyBsb2NhbERlc2NyaXB0aW9uLT5jb25maWd1cmF0aW9uKCktPm1lZGlh
RGVzY3JpcHRpb25zKCkuc2l6ZSgpIDogMDsKLSAgICBib29sIGhhc05ld01lZGlhRGVzY3JpcHRp
b25zID0gbWVkaWFEZXNjcmlwdGlvbnMuc2l6ZSgpID4gcHJldmlvdXNOdW1iZXJPZk1lZGlhRGVz
Y3JpcHRpb25zOwotICAgIGJvb2wgaXNJbml0aWF0b3IgPSBuZXdEZXNjcmlwdGlvbi0+dHlwZSgp
ID09IFJUQ1NkcFR5cGU6Ok9mZmVyOwotCi0gICAgaWYgKGhhc05ld01lZGlhRGVzY3JpcHRpb25z
KSB7Ci0gICAgICAgIE1lZGlhRW5kcG9pbnQ6OlVwZGF0ZVJlc3VsdCByZXN1bHQgPSBtX21lZGlh
RW5kcG9pbnQtPnVwZGF0ZVJlY2VpdmVDb25maWd1cmF0aW9uKG5ld0Rlc2NyaXB0aW9uLT5jb25m
aWd1cmF0aW9uKCksIGlzSW5pdGlhdG9yKTsKLQotICAgICAgICBpZiAocmVzdWx0ID09IE1lZGlh
RW5kcG9pbnQ6OlVwZGF0ZVJlc3VsdDo6U3VjY2Vzc1dpdGhJY2VSZXN0YXJ0KSB7Ci0gICAgICAg
ICAgICBpZiAobV9wZWVyQ29ubmVjdGlvbi5pY2VHYXRoZXJpbmdTdGF0ZSgpICE9IFJUQ0ljZUdh
dGhlcmluZ1N0YXRlOjpHYXRoZXJpbmcpCi0gICAgICAgICAgICAgICAgbV9wZWVyQ29ubmVjdGlv
bi51cGRhdGVJY2VHYXRoZXJpbmdTdGF0ZShSVENJY2VHYXRoZXJpbmdTdGF0ZTo6R2F0aGVyaW5n
KTsKLQotICAgICAgICAgICAgaWYgKG1fcGVlckNvbm5lY3Rpb24uaWNlQ29ubmVjdGlvblN0YXRl
KCkgIT0gUlRDSWNlQ29ubmVjdGlvblN0YXRlOjpDb21wbGV0ZWQpCi0gICAgICAgICAgICAgICAg
bV9wZWVyQ29ubmVjdGlvbi51cGRhdGVJY2VDb25uZWN0aW9uU3RhdGUoUlRDSWNlQ29ubmVjdGlv
blN0YXRlOjpDb25uZWN0ZWQpOwotCi0gICAgICAgICAgICBMT0dfRVJST1IoIklDRSByZXN0YXJ0
IGlzIG5vdCBpbXBsZW1lbnRlZCIpOwotICAgICAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKLQot
ICAgICAgICB9IGVsc2UgaWYgKHJlc3VsdCA9PSBNZWRpYUVuZHBvaW50OjpVcGRhdGVSZXN1bHQ6
OkZhaWxlZCkgewotICAgICAgICAgICAgc2V0TG9jYWxEZXNjcmlwdGlvbkZhaWxlZChFeGNlcHRp
b24geyBPcGVyYXRpb25FcnJvciwgIlVuYWJsZSB0byBhcHBseSBzZXNzaW9uIGRlc2NyaXB0aW9u
IiB9KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIEFzc29j
aWF0ZSBtZWRpYSBkZXNjcmlwdGlvbnMgd2l0aCB0cmFuc2NlaXZlcnMgKHNldCBwcm92aXNpb25h
bCBtaWQgdG8gJ2ZpbmFsJyBtaWQpLgotICAgICAgICBmb3IgKGF1dG8mIG1lZGlhRGVzY3JpcHRp
b24gOiBtZWRpYURlc2NyaXB0aW9ucykgewotICAgICAgICAgICAgUlRDUnRwVHJhbnNjZWl2ZXIq
IHRyYW5zY2VpdmVyID0gbWF0Y2hUcmFuc2NlaXZlcih0cmFuc2NlaXZlcnMsIFsmbWVkaWFEZXNj
cmlwdGlvbl0gKFJUQ1J0cFRyYW5zY2VpdmVyJiBjdXJyZW50KSB7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIGN1cnJlbnQucHJvdmlzaW9uYWxNaWQoKSA9PSBtZWRpYURlc2NyaXB0aW9uLm1pZDsK
LSAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgaWYgKHRyYW5zY2VpdmVyKQotICAgICAgICAg
ICAgICAgIHRyYW5zY2VpdmVyLT5zZXRNaWQodHJhbnNjZWl2ZXItPnByb3Zpc2lvbmFsTWlkKCkp
OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGludGVybmFsUmVtb3RlRGVzY3JpcHRpb24o
KSkgewotICAgICAgICBNZWRpYUVuZHBvaW50U2Vzc2lvbkNvbmZpZ3VyYXRpb24qIHJlbW90ZUNv
bmZpZ3VyYXRpb24gPSBpbnRlcm5hbFJlbW90ZURlc2NyaXB0aW9uKCktPmNvbmZpZ3VyYXRpb24o
KTsKLSAgICAgICAgUmVhbHRpbWVNZWRpYVNvdXJjZU1hcCBzZW5kU291cmNlTWFwID0gY3JlYXRl
U291cmNlTWFwKHJlbW90ZUNvbmZpZ3VyYXRpb24tPm1lZGlhRGVzY3JpcHRpb25zKCksIG1lZGlh
RGVzY3JpcHRpb25zLnNpemUoKSwgdHJhbnNjZWl2ZXJzKTsKLQotICAgICAgICBpZiAobV9tZWRp
YUVuZHBvaW50LT51cGRhdGVTZW5kQ29uZmlndXJhdGlvbihyZW1vdGVDb25maWd1cmF0aW9uLCBz
ZW5kU291cmNlTWFwLCBpc0luaXRpYXRvcikgPT0gTWVkaWFFbmRwb2ludDo6VXBkYXRlUmVzdWx0
OjpGYWlsZWQpIHsKLSAgICAgICAgICAgIHNldExvY2FsRGVzY3JpcHRpb25GYWlsZWQoRXhjZXB0
aW9uIHsgT3BlcmF0aW9uRXJyb3IsICJVbmFibGUgdG8gYXBwbHkgc2Vzc2lvbiBkZXNjcmlwdGlv
biIgfSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAo
IWhhc1VuYXNzb2NpYXRlZFRyYW5zY2VpdmVycyh0cmFuc2NlaXZlcnMpKQotICAgICAgICBjbGVh
ck5lZ290aWF0aW9uTmVlZGVkU3RhdGUoKTsKLQotICAgIFJUQ1NpZ25hbGluZ1N0YXRlIG5ld1Np
Z25hbGluZ1N0YXRlOwotCi0gICAgLy8gVXBkYXRlIHN0YXRlIGFuZCBsb2NhbCBkZXNjcmlwdGlv
bnMgYWNjb3JkaW5nIHRvIHNldExvY2FsL1JlbW90ZURlc2NyaXB0aW9uIHByb2Nlc3NpbmcgbW9k
ZWwKLSAgICBzd2l0Y2ggKG5ld0Rlc2NyaXB0aW9uLT50eXBlKCkpIHsKLSAgICBjYXNlIFJUQ1Nk
cFR5cGU6Ok9mZmVyOgotICAgICAgICBtX3BlbmRpbmdMb2NhbERlc2NyaXB0aW9uID0gV1RGTW92
ZShuZXdEZXNjcmlwdGlvbik7Ci0gICAgICAgIG5ld1NpZ25hbGluZ1N0YXRlID0gUlRDU2lnbmFs
aW5nU3RhdGU6OkhhdmVMb2NhbE9mZmVyOwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgUlRD
U2RwVHlwZTo6QW5zd2VyOgotICAgICAgICBtX2N1cnJlbnRMb2NhbERlc2NyaXB0aW9uID0gV1RG
TW92ZShuZXdEZXNjcmlwdGlvbik7Ci0gICAgICAgIG1fY3VycmVudFJlbW90ZURlc2NyaXB0aW9u
ID0gbV9wZW5kaW5nUmVtb3RlRGVzY3JpcHRpb247Ci0gICAgICAgIG1fcGVuZGluZ0xvY2FsRGVz
Y3JpcHRpb24gPSBudWxscHRyOwotICAgICAgICBtX3BlbmRpbmdSZW1vdGVEZXNjcmlwdGlvbiA9
IG51bGxwdHI7Ci0gICAgICAgIG5ld1NpZ25hbGluZ1N0YXRlID0gUlRDU2lnbmFsaW5nU3RhdGU6
OlN0YWJsZTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIFJUQ1NkcFR5cGU6OlJvbGxiYWNr
OgotICAgICAgICBtX3BlbmRpbmdMb2NhbERlc2NyaXB0aW9uID0gbnVsbHB0cjsKLSAgICAgICAg
bmV3U2lnbmFsaW5nU3RhdGUgPSBSVENTaWduYWxpbmdTdGF0ZTo6U3RhYmxlOwotICAgICAgICBi
cmVhazsKLQotICAgIGNhc2UgUlRDU2RwVHlwZTo6UHJhbnN3ZXI6Ci0gICAgICAgIG1fcGVuZGlu
Z0xvY2FsRGVzY3JpcHRpb24gPSBXVEZNb3ZlKG5ld0Rlc2NyaXB0aW9uKTsKLSAgICAgICAgbmV3
U2lnbmFsaW5nU3RhdGUgPSBSVENTaWduYWxpbmdTdGF0ZTo6SGF2ZUxvY2FsUHJhbnN3ZXI7Ci0g
ICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIHVwZGF0ZVNpZ25hbGluZ1N0YXRlKG5ld1NpZ25h
bGluZ1N0YXRlKTsKLQotICAgIGlmIChtX3BlZXJDb25uZWN0aW9uLmljZUdhdGhlcmluZ1N0YXRl
KCkgPT0gUlRDSWNlR2F0aGVyaW5nU3RhdGU6Ok5ldyAmJiBtZWRpYURlc2NyaXB0aW9ucy5zaXpl
KCkpCi0gICAgICAgIG1fcGVlckNvbm5lY3Rpb24udXBkYXRlSWNlR2F0aGVyaW5nU3RhdGUoUlRD
SWNlR2F0aGVyaW5nU3RhdGU6OkdhdGhlcmluZyk7Ci0KLSAgICBtYXJrQXNOZWVkaW5nTmVnb3Rp
YXRpb24oKTsKLSAgICBzZXRMb2NhbERlc2NyaXB0aW9uU3VjY2VlZGVkKCk7Ci19Ci0KLVJlZlB0
cjxSVENTZXNzaW9uRGVzY3JpcHRpb24+IE1lZGlhRW5kcG9pbnRQZWVyQ29ubmVjdGlvbjo6bG9j
YWxEZXNjcmlwdGlvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGNyZWF0ZVJUQ1Nlc3Npb25EZXNj
cmlwdGlvbihpbnRlcm5hbExvY2FsRGVzY3JpcHRpb24oKSk7Ci19Ci0KLVJlZlB0cjxSVENTZXNz
aW9uRGVzY3JpcHRpb24+IE1lZGlhRW5kcG9pbnRQZWVyQ29ubmVjdGlvbjo6Y3VycmVudExvY2Fs
RGVzY3JpcHRpb24oKSBjb25zdAotewotICAgIHJldHVybiBjcmVhdGVSVENTZXNzaW9uRGVzY3Jp
cHRpb24obV9jdXJyZW50TG9jYWxEZXNjcmlwdGlvbi5nZXQoKSk7Ci19Ci0KLVJlZlB0cjxSVENT
ZXNzaW9uRGVzY3JpcHRpb24+IE1lZGlhRW5kcG9pbnRQZWVyQ29ubmVjdGlvbjo6cGVuZGluZ0xv
Y2FsRGVzY3JpcHRpb24oKSBjb25zdAotewotICAgIHJldHVybiBjcmVhdGVSVENTZXNzaW9uRGVz
Y3JpcHRpb24obV9wZW5kaW5nTG9jYWxEZXNjcmlwdGlvbi5nZXQoKSk7Ci19Ci0KLXZvaWQgTWVk
aWFFbmRwb2ludFBlZXJDb25uZWN0aW9uOjpkb1NldFJlbW90ZURlc2NyaXB0aW9uKFJUQ1Nlc3Np
b25EZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24pCi17Ci0gICAgcnVuVGFzayhbdGhpcywgcHJvdGVj
dGVkRGVzY3JpcHRpb24gPSBSZWZQdHI8UlRDU2Vzc2lvbkRlc2NyaXB0aW9uPigmZGVzY3JpcHRp
b24pXSgpIG11dGFibGUgewotICAgICAgICBzZXRSZW1vdGVEZXNjcmlwdGlvblRhc2soV1RGTW92
ZShwcm90ZWN0ZWREZXNjcmlwdGlvbikpOwotICAgIH0pOwotfQotCi12b2lkIE1lZGlhRW5kcG9p
bnRQZWVyQ29ubmVjdGlvbjo6c2V0UmVtb3RlRGVzY3JpcHRpb25UYXNrKFJlZlB0cjxSVENTZXNz
aW9uRGVzY3JpcHRpb24+JiYgZGVzY3JpcHRpb24pCi17Ci0gICAgYXV0byByZXN1bHQgPSBNZWRp
YUVuZHBvaW50U2Vzc2lvbkRlc2NyaXB0aW9uOjpjcmVhdGUoV1RGTW92ZShkZXNjcmlwdGlvbiks
ICptX3NkcFByb2Nlc3Nvcik7Ci0gICAgaWYgKHJlc3VsdC5oYXNFeGNlcHRpb24oKSkgewotICAg
ICAgICBzZXRSZW1vdGVEZXNjcmlwdGlvbkZhaWxlZChyZXN1bHQucmVsZWFzZUV4Y2VwdGlvbigp
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBhdXRvIG5ld0Rlc2NyaXB0aW9uID0gcmVz
dWx0LnJlbGVhc2VSZXR1cm5WYWx1ZSgpOwotCi0gICAgYXV0byYgbWVkaWFEZXNjcmlwdGlvbnMg
PSBuZXdEZXNjcmlwdGlvbi0+Y29uZmlndXJhdGlvbigpLT5tZWRpYURlc2NyaXB0aW9ucygpOwot
ICAgIGZvciAoYXV0byYgbWVkaWFEZXNjcmlwdGlvbiA6IG1lZGlhRGVzY3JpcHRpb25zKSB7Ci0g
ICAgICAgIGlmIChtZWRpYURlc2NyaXB0aW9uLnR5cGUgIT0gImF1ZGlvIiAmJiBtZWRpYURlc2Ny
aXB0aW9uLnR5cGUgIT0gInZpZGVvIikKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAg
IG1lZGlhRGVzY3JpcHRpb24ucGF5bG9hZHMgPSBtX21lZGlhRW5kcG9pbnQtPmZpbHRlclBheWxv
YWRzKG1lZGlhRGVzY3JpcHRpb24ucGF5bG9hZHMsIG1lZGlhRGVzY3JpcHRpb24udHlwZSA9PSAi
YXVkaW8iID8gbV9kZWZhdWx0QXVkaW9QYXlsb2FkcyA6IG1fZGVmYXVsdFZpZGVvUGF5bG9hZHMp
OwotICAgIH0KLQotICAgIGJvb2wgaXNJbml0aWF0b3IgPSBuZXdEZXNjcmlwdGlvbi0+dHlwZSgp
ID09IFJUQ1NkcFR5cGU6OkFuc3dlcjsKLSAgICBjb25zdCBSdHBUcmFuc2NlaXZlclZlY3RvciYg
dHJhbnNjZWl2ZXJzID0gbV9wZWVyQ29ubmVjdGlvbi5nZXRUcmFuc2NlaXZlcnMoKTsKLQotICAg
IFJlYWx0aW1lTWVkaWFTb3VyY2VNYXAgc2VuZFNvdXJjZU1hcDsKLSAgICBpZiAoaW50ZXJuYWxM
b2NhbERlc2NyaXB0aW9uKCkpCi0gICAgICAgIHNlbmRTb3VyY2VNYXAgPSBjcmVhdGVTb3VyY2VN
YXAobWVkaWFEZXNjcmlwdGlvbnMsIGludGVybmFsTG9jYWxEZXNjcmlwdGlvbigpLT5jb25maWd1
cmF0aW9uKCktPm1lZGlhRGVzY3JpcHRpb25zKCkuc2l6ZSgpLCB0cmFuc2NlaXZlcnMpOwotCi0g
ICAgaWYgKG1fbWVkaWFFbmRwb2ludC0+dXBkYXRlU2VuZENvbmZpZ3VyYXRpb24obmV3RGVzY3Jp
cHRpb24tPmNvbmZpZ3VyYXRpb24oKSwgc2VuZFNvdXJjZU1hcCwgaXNJbml0aWF0b3IpID09IE1l
ZGlhRW5kcG9pbnQ6OlVwZGF0ZVJlc3VsdDo6RmFpbGVkKSB7Ci0gICAgICAgIHNldFJlbW90ZURl
c2NyaXB0aW9uRmFpbGVkKEV4Y2VwdGlvbiB7IE9wZXJhdGlvbkVycm9yLCAiVW5hYmxlIHRvIGFw
cGx5IHNlc3Npb24gZGVzY3JpcHRpb24iIH0pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgLy8gT25lIGxlZ2FjeSBNZWRpYVN0cmVhbUV2ZW50IHdpbGwgYmUgZmlyZWQgZm9yIGV2ZXJ5
IG5ldyBNZWRpYVN0cmVhbSBjcmVhdGVkIGFzIHRoaXMgcmVtb3RlIGRlc2NyaXB0aW9uIGlzIHNl
dC4KLSAgICBWZWN0b3I8UmVmUHRyPE1lZGlhU3RyZWFtRXZlbnQ+PiBsZWdhY3lNZWRpYVN0cmVh
bUV2ZW50czsKLQotICAgIGZvciAoYXV0byYgbWVkaWFEZXNjcmlwdGlvbiA6IG1lZGlhRGVzY3Jp
cHRpb25zKSB7Ci0gICAgICAgIFJUQ1J0cFRyYW5zY2VpdmVyKiB0cmFuc2NlaXZlciA9IG1hdGNo
VHJhbnNjZWl2ZXJCeU1pZCh0cmFuc2NlaXZlcnMsIG1lZGlhRGVzY3JpcHRpb24ubWlkKTsKLSAg
ICAgICAgaWYgKCF0cmFuc2NlaXZlcikgewotICAgICAgICAgICAgYm9vbCByZWNlaXZlT25seUZs
YWcgPSBmYWxzZTsKLQotICAgICAgICAgICAgaWYgKG1lZGlhRGVzY3JpcHRpb24ubW9kZSA9PSAi
c2VuZHJlY3YiIHx8IG1lZGlhRGVzY3JpcHRpb24ubW9kZSA9PSAicmVjdm9ubHkiKSB7Ci0gICAg
ICAgICAgICAgICAgLy8gVHJ5IHRvIG1hdGNoIGFuIGV4aXN0aW5nIHRyYW5zY2VpdmVyLgotICAg
ICAgICAgICAgICAgIHRyYW5zY2VpdmVyID0gbWF0Y2hUcmFuc2NlaXZlcih0cmFuc2NlaXZlcnMs
IFsmbWVkaWFEZXNjcmlwdGlvbl0gKFJUQ1J0cFRyYW5zY2VpdmVyJiBjdXJyZW50KSB7Ci0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiAhY3VycmVudC5zdG9wcGVkKCkgJiYgY3VycmVudC5taWQo
KS5pc051bGwoKSAmJiBjdXJyZW50LnNlbmRlcigpLnRyYWNrS2luZCgpID09IG1lZGlhRGVzY3Jp
cHRpb24udHlwZTsKLSAgICAgICAgICAgICAgICB9KTsKLQotICAgICAgICAgICAgICAgIGlmICh0
cmFuc2NlaXZlcikgewotICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIHRyYW5zY2VpdmVyIHdh
cyBjcmVhdGVkIGxvY2FsbHkgd2l0aCBhIHByb3Zpc2lvbmFsIG1pZC4gSXRzIHJlYWwgbWlkIHdp
bGwgbm93IGJlIHNldCBieSB0aGUgcmVtb3RlCi0gICAgICAgICAgICAgICAgICAgIC8vIGRlc2Ny
aXB0aW9uIHNvIHdlIG5lZWQgdG8gdXBkYXRlIHRoZSBtaWQgb2YgdGhlIHRyYW5zY2VpdmVyJ3Mg
bXV0ZWQgc291cmNlIHRvIHByZXNlcnZlIHRoZSBhc3NvY2lhdGlvbi4KLSAgICAgICAgICAgICAg
ICAgICAgdHJhbnNjZWl2ZXItPnNldE1pZChtZWRpYURlc2NyaXB0aW9uLm1pZCk7Ci0gICAgICAg
ICAgICAgICAgICAgIG1fbWVkaWFFbmRwb2ludC0+cmVwbGFjZU11dGVkUmVtb3RlU291cmNlTWlk
KHRyYW5zY2VpdmVyLT5wcm92aXNpb25hbE1pZCgpLCBtZWRpYURlc2NyaXB0aW9uLm1pZCk7Ci0g
ICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHJlY2VpdmVPbmx5Rmxh
ZyA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICghdHJhbnNjZWl2ZXIp
IHsKLSAgICAgICAgICAgICAgICBhdXRvIHNlbmRlciA9IFJUQ1J0cFNlbmRlcjo6Y3JlYXRlKFN0
cmluZyhtZWRpYURlc2NyaXB0aW9uLnR5cGUpLCBWZWN0b3I8U3RyaW5nPigpLCBtX3BlZXJDb25u
ZWN0aW9uLnNlbmRlckJhY2tlbmQoKSk7Ci0gICAgICAgICAgICAgICAgYXV0byByZWNlaXZlciA9
IGNyZWF0ZVJlY2VpdmVyKG1lZGlhRGVzY3JpcHRpb24ubWlkLCBtZWRpYURlc2NyaXB0aW9uLnR5
cGUsIG1lZGlhRGVzY3JpcHRpb24ubWVkaWFTdHJlYW1UcmFja0lkKTsKLQotICAgICAgICAgICAg
ICAgIGF1dG8gbmV3VHJhbnNjZWl2ZXIgPSBSVENSdHBUcmFuc2NlaXZlcjo6Y3JlYXRlKFdURk1v
dmUoc2VuZGVyKSwgV1RGTW92ZShyZWNlaXZlcikpOwotICAgICAgICAgICAgICAgIG5ld1RyYW5z
Y2VpdmVyLT5zZXRNaWQobWVkaWFEZXNjcmlwdGlvbi5taWQpOwotICAgICAgICAgICAgICAgIGlm
IChyZWNlaXZlT25seUZsYWcpCi0gICAgICAgICAgICAgICAgICAgIG5ld1RyYW5zY2VpdmVyLT5k
aXNhYmxlU2VuZGluZ0RpcmVjdGlvbigpOwotCi0gICAgICAgICAgICAgICAgdHJhbnNjZWl2ZXIg
PSBuZXdUcmFuc2NlaXZlci5wdHIoKTsKLSAgICAgICAgICAgICAgICBtX3BlZXJDb25uZWN0aW9u
LmFkZFRyYW5zY2VpdmVyKFdURk1vdmUobmV3VHJhbnNjZWl2ZXIpKTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotCi0gICAgICAgIGlmIChtZWRpYURlc2NyaXB0aW9uLm1vZGUgPT0gInNlbmRy
ZWN2IiB8fCBtZWRpYURlc2NyaXB0aW9uLm1vZGUgPT0gInNlbmRvbmx5IikgewotICAgICAgICAg
ICAgYXV0byYgcmVjZWl2ZXIgPSB0cmFuc2NlaXZlci0+cmVjZWl2ZXIoKTsKLSAgICAgICAgICAg
IGlmIChyZWNlaXZlci5pc0Rpc3BhdGNoZWQoKSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsK
LSAgICAgICAgICAgIHJlY2VpdmVyLnNldERpc3BhdGNoZWQodHJ1ZSk7Ci0KLSAgICAgICAgICAg
IFZlY3RvcjxTdHJpbmc+IG1lZGlhU3RyZWFtSWRzOwotICAgICAgICAgICAgaWYgKCFtZWRpYURl
c2NyaXB0aW9uLm1lZGlhU3RyZWFtSWQuaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgIG1lZGlh
U3RyZWFtSWRzLmFwcGVuZChtZWRpYURlc2NyaXB0aW9uLm1lZGlhU3RyZWFtSWQpOwotCi0gICAg
ICAgICAgICAvLyBBIHJlbW90ZSB0cmFjayBjYW4gYmUgYXNzb2NpYXRlZCB3aXRoIDAuLiogTWVk
aWFTdHJlYW1zLiBXZSBjcmVhdGUgYSBuZXcgc3RyZWFtIGZvcgotICAgICAgICAgICAgLy8gYSB0
cmFjayBpbiBjYXNlIG9mIGFuIHVucmVjb2duaXplZCBzdHJlYW0gaWQsIG9yIGp1c3QgYWRkIHRo
ZSB0cmFjayBpZiB0aGUgc3RyZWFtCi0gICAgICAgICAgICAvLyBhbHJlYWR5IGV4aXN0cy4KLSAg
ICAgICAgICAgIEhhc2hNYXA8U3RyaW5nLCBSZWZQdHI8TWVkaWFTdHJlYW0+PiB0cmFja0V2ZW50
TWVkaWFTdHJlYW1zOwotICAgICAgICAgICAgZm9yIChhdXRvJiBpZCA6IG1lZGlhU3RyZWFtSWRz
KSB7Ci0gICAgICAgICAgICAgICAgaWYgKG1fcmVtb3RlU3RyZWFtTWFwLmNvbnRhaW5zKGlkKSkg
ewotICAgICAgICAgICAgICAgICAgICBSZWZQdHI8TWVkaWFTdHJlYW0+IHN0cmVhbSA9IG1fcmVt
b3RlU3RyZWFtTWFwLmdldChpZCk7Ci0gICAgICAgICAgICAgICAgICAgIHN0cmVhbS0+YWRkVHJh
Y2soKnJlY2VpdmVyLnRyYWNrKCkpOwotICAgICAgICAgICAgICAgICAgICB0cmFja0V2ZW50TWVk
aWFTdHJlYW1zLmFkZChpZCwgV1RGTW92ZShzdHJlYW0pKTsKLSAgICAgICAgICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgICAgICAgICBhdXRvIG5ld1N0cmVhbSA9IE1lZGlhU3RyZWFtOjpj
cmVhdGUoKm1fcGVlckNvbm5lY3Rpb24uc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCBNZWRpYVN0
cmVhbVRyYWNrVmVjdG9yKHsgcmVjZWl2ZXIudHJhY2soKSB9KSk7Ci0gICAgICAgICAgICAgICAg
ICAgIG1fcmVtb3RlU3RyZWFtTWFwLmFkZChpZCwgbmV3U3RyZWFtLmNvcHlSZWYoKSk7Ci0gICAg
ICAgICAgICAgICAgICAgIGxlZ2FjeU1lZGlhU3RyZWFtRXZlbnRzLmFwcGVuZChNZWRpYVN0cmVh
bUV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmFkZHN0cmVhbUV2ZW50LCBmYWxzZSwgZmFsc2Us
IG5ld1N0cmVhbS5jb3B5UmVmKCkpKTsKLSAgICAgICAgICAgICAgICAgICAgdHJhY2tFdmVudE1l
ZGlhU3RyZWFtcy5hZGQoaWQsIFdURk1vdmUobmV3U3RyZWFtKSk7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBWZWN0b3I8UmVmUHRyPE1lZGlhU3RyZWFt
Pj4gc3RyZWFtczsKLSAgICAgICAgICAgIGNvcHlWYWx1ZXNUb1ZlY3Rvcih0cmFja0V2ZW50TWVk
aWFTdHJlYW1zLCBzdHJlYW1zKTsKLQotICAgICAgICAgICAgbV9wZWVyQ29ubmVjdGlvbi5maXJl
RXZlbnQoUlRDVHJhY2tFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS50cmFja0V2ZW50LCBmYWxz
ZSwgZmFsc2UsCi0gICAgICAgICAgICAgICAgJnJlY2VpdmVyLCByZWNlaXZlci50cmFjaygpLCBX
VEZNb3ZlKHN0cmVhbXMpLCB0cmFuc2NlaXZlcikpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAg
Ly8gRmlyZSBsZWdhY3kgYWRkc3RyZWFtIGV2ZW50cy4KLSAgICBmb3IgKGF1dG8mIGV2ZW50IDog
bGVnYWN5TWVkaWFTdHJlYW1FdmVudHMpCi0gICAgICAgIG1fcGVlckNvbm5lY3Rpb24uZmlyZUV2
ZW50KCpldmVudCk7Ci0KLSAgICBSVENTaWduYWxpbmdTdGF0ZSBuZXdTaWduYWxpbmdTdGF0ZTsK
LQotICAgIC8vIFVwZGF0ZSBzdGF0ZSBhbmQgbG9jYWwgZGVzY3JpcHRpb25zIGFjY29yZGluZyB0
byBzZXRMb2NhbC9SZW1vdGVEZXNjcmlwdGlvbiBwcm9jZXNzaW5nIG1vZGVsCi0gICAgc3dpdGNo
IChuZXdEZXNjcmlwdGlvbi0+dHlwZSgpKSB7Ci0gICAgY2FzZSBSVENTZHBUeXBlOjpPZmZlcjoK
LSAgICAgICAgbV9wZW5kaW5nUmVtb3RlRGVzY3JpcHRpb24gPSBXVEZNb3ZlKG5ld0Rlc2NyaXB0
aW9uKTsKLSAgICAgICAgbmV3U2lnbmFsaW5nU3RhdGUgPSBSVENTaWduYWxpbmdTdGF0ZTo6SGF2
ZVJlbW90ZU9mZmVyOwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgUlRDU2RwVHlwZTo6QW5z
d2VyOgotICAgICAgICBtX2N1cnJlbnRSZW1vdGVEZXNjcmlwdGlvbiA9IFdURk1vdmUobmV3RGVz
Y3JpcHRpb24pOwotICAgICAgICBtX2N1cnJlbnRMb2NhbERlc2NyaXB0aW9uID0gbV9wZW5kaW5n
TG9jYWxEZXNjcmlwdGlvbjsKLSAgICAgICAgbV9wZW5kaW5nUmVtb3RlRGVzY3JpcHRpb24gPSBu
dWxscHRyOwotICAgICAgICBtX3BlbmRpbmdMb2NhbERlc2NyaXB0aW9uID0gbnVsbHB0cjsKLSAg
ICAgICAgbmV3U2lnbmFsaW5nU3RhdGUgPSBSVENTaWduYWxpbmdTdGF0ZTo6U3RhYmxlOwotICAg
ICAgICBicmVhazsKLQotICAgIGNhc2UgUlRDU2RwVHlwZTo6Um9sbGJhY2s6Ci0gICAgICAgIG1f
cGVuZGluZ1JlbW90ZURlc2NyaXB0aW9uID0gbnVsbHB0cjsKLSAgICAgICAgbmV3U2lnbmFsaW5n
U3RhdGUgPSBSVENTaWduYWxpbmdTdGF0ZTo6U3RhYmxlOwotICAgICAgICBicmVhazsKLQotICAg
IGNhc2UgUlRDU2RwVHlwZTo6UHJhbnN3ZXI6Ci0gICAgICAgIG1fcGVuZGluZ1JlbW90ZURlc2Ny
aXB0aW9uID0gV1RGTW92ZShuZXdEZXNjcmlwdGlvbik7Ci0gICAgICAgIG5ld1NpZ25hbGluZ1N0
YXRlID0gUlRDU2lnbmFsaW5nU3RhdGU6OkhhdmVSZW1vdGVQcmFuc3dlcjsKLSAgICAgICAgYnJl
YWs7Ci0gICAgfQotCi0gICAgdXBkYXRlU2lnbmFsaW5nU3RhdGUobmV3U2lnbmFsaW5nU3RhdGUp
OwotICAgIHNldFJlbW90ZURlc2NyaXB0aW9uU3VjY2VlZGVkKCk7Ci19Ci0KLVJlZlB0cjxSVENT
ZXNzaW9uRGVzY3JpcHRpb24+IE1lZGlhRW5kcG9pbnRQZWVyQ29ubmVjdGlvbjo6cmVtb3RlRGVz
Y3JpcHRpb24oKSBjb25zdAotewotICAgIHJldHVybiBjcmVhdGVSVENTZXNzaW9uRGVzY3JpcHRp
b24oaW50ZXJuYWxSZW1vdGVEZXNjcmlwdGlvbigpKTsKLX0KLQotUmVmUHRyPFJUQ1Nlc3Npb25E
ZXNjcmlwdGlvbj4gTWVkaWFFbmRwb2ludFBlZXJDb25uZWN0aW9uOjpjdXJyZW50UmVtb3RlRGVz
Y3JpcHRpb24oKSBjb25zdAotewotICAgIHJldHVybiBjcmVhdGVSVENTZXNzaW9uRGVzY3JpcHRp
b24obV9jdXJyZW50UmVtb3RlRGVzY3JpcHRpb24uZ2V0KCkpOwotfQotCi1SZWZQdHI8UlRDU2Vz
c2lvbkRlc2NyaXB0aW9uPiBNZWRpYUVuZHBvaW50UGVlckNvbm5lY3Rpb246OnBlbmRpbmdSZW1v
dGVEZXNjcmlwdGlvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGNyZWF0ZVJUQ1Nlc3Npb25EZXNj
cmlwdGlvbihtX3BlbmRpbmdSZW1vdGVEZXNjcmlwdGlvbi5nZXQoKSk7Ci19Ci0KLWJvb2wgTWVk
aWFFbmRwb2ludFBlZXJDb25uZWN0aW9uOjpzZXRDb25maWd1cmF0aW9uKE1lZGlhRW5kcG9pbnRD
b25maWd1cmF0aW9uJiYgY29uZmlndXJhdGlvbikKLXsKLSAgICBtX21lZGlhRW5kcG9pbnQtPnNl
dENvbmZpZ3VyYXRpb24oV1RGTW92ZShjb25maWd1cmF0aW9uKSk7Ci0gICAgcmV0dXJuIHRydWU7
Ci19Ci0KLXZvaWQgTWVkaWFFbmRwb2ludFBlZXJDb25uZWN0aW9uOjpkb0FkZEljZUNhbmRpZGF0
ZShSVENJY2VDYW5kaWRhdGUmIHJ0Y0NhbmRpZGF0ZSkKLXsKLSAgICBydW5UYXNrKFt0aGlzLCBw
cm90ZWN0ZWRDYW5kaWRhdGUgPSBSZWZQdHI8UlRDSWNlQ2FuZGlkYXRlPigmcnRjQ2FuZGlkYXRl
KV0oKSBtdXRhYmxlIHsKLSAgICAgICAgYWRkSWNlQ2FuZGlkYXRlVGFzaygqcHJvdGVjdGVkQ2Fu
ZGlkYXRlKTsKLSAgICB9KTsKLX0KLQotdm9pZCBNZWRpYUVuZHBvaW50UGVlckNvbm5lY3Rpb246
OmFkZEljZUNhbmRpZGF0ZVRhc2soUlRDSWNlQ2FuZGlkYXRlJiBydGNDYW5kaWRhdGUpCi17Ci0g
ICAgaWYgKCFpbnRlcm5hbFJlbW90ZURlc2NyaXB0aW9uKCkpIHsKLSAgICAgICAgYWRkSWNlQ2Fu
ZGlkYXRlRmFpbGVkKEV4Y2VwdGlvbiB7IEludmFsaWRTdGF0ZUVycm9yLCAiTm8gcmVtb3RlIGRl
c2NyaXB0aW9uIHNldCIgfSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBhdXRvJiBy
ZW1vdGVNZWRpYURlc2NyaXB0aW9ucyA9IGludGVybmFsUmVtb3RlRGVzY3JpcHRpb24oKS0+Y29u
ZmlndXJhdGlvbigpLT5tZWRpYURlc2NyaXB0aW9ucygpOwotICAgIFBlZXJNZWRpYURlc2NyaXB0
aW9uKiB0YXJnZXRNZWRpYURlc2NyaXB0aW9uID0gbnVsbHB0cjsKLQotICAgIC8vIFdoZW4gaWRl
bnRpZnlpbmcgdGhlIHRhcmdldCBtZWRpYSBkZXNjcmlwdGlvbiwgc2RwTWlkIHRha2VzIHByZWNl
ZGVuY2Ugb3ZlciBzZHBNTGluZUluZGV4Ci0gICAgLy8gaWYgYm90aCBhcmUgcHJlc2VudC4KLSAg
ICBpZiAoIXJ0Y0NhbmRpZGF0ZS5zZHBNaWQoKS5pc051bGwoKSkgewotICAgICAgICBjb25zdCBT
dHJpbmcmIG1pZCA9IHJ0Y0NhbmRpZGF0ZS5zZHBNaWQoKTsKLSAgICAgICAgZm9yIChhdXRvJiBk
ZXNjcmlwdGlvbiA6IHJlbW90ZU1lZGlhRGVzY3JpcHRpb25zKSB7Ci0gICAgICAgICAgICBpZiAo
ZGVzY3JpcHRpb24ubWlkID09IG1pZCkgewotICAgICAgICAgICAgICAgIHRhcmdldE1lZGlhRGVz
Y3JpcHRpb24gPSAmZGVzY3JpcHRpb247Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIXRhcmdldE1lZGlhRGVzY3JpcHRpb24p
IHsKLSAgICAgICAgICAgIGFkZEljZUNhbmRpZGF0ZUZhaWxlZChFeGNlcHRpb24geyBPcGVyYXRp
b25FcnJvciwgInNkcE1pZCBkaWQgbm90IG1hdGNoIGFueSBtZWRpYSBkZXNjcmlwdGlvbiIgfSk7
Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKHJ0Y0NhbmRp
ZGF0ZS5zZHBNTGluZUluZGV4KCkpIHsKLSAgICAgICAgdW5zaWduZWQgc2hvcnQgc2RwTUxpbmVJ
bmRleCA9IHJ0Y0NhbmRpZGF0ZS5zZHBNTGluZUluZGV4KCkudmFsdWUoKTsKLSAgICAgICAgaWYg
KHNkcE1MaW5lSW5kZXggPj0gcmVtb3RlTWVkaWFEZXNjcmlwdGlvbnMuc2l6ZSgpKSB7Ci0gICAg
ICAgICAgICBhZGRJY2VDYW5kaWRhdGVGYWlsZWQoRXhjZXB0aW9uIHsgT3BlcmF0aW9uRXJyb3Is
ICJzZHBNTGluZUluZGV4IGlzIG91dCBvZiByYW5nZSIgfSk7Ci0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIH0KLSAgICAgICAgdGFyZ2V0TWVkaWFEZXNjcmlwdGlvbiA9ICZyZW1vdGVNZWRp
YURlc2NyaXB0aW9uc1tzZHBNTGluZUluZGV4XTsKLSAgICB9IGVsc2UgewotICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGF1dG8gcmVz
dWx0ID0gbV9zZHBQcm9jZXNzb3ItPnBhcnNlQ2FuZGlkYXRlTGluZShydGNDYW5kaWRhdGUuY2Fu
ZGlkYXRlKCkpOwotICAgIGlmIChyZXN1bHQucGFyc2luZ1N0YXR1cygpICE9IFNEUFByb2Nlc3Nv
cjo6UmVzdWx0OjpTdWNjZXNzKSB7Ci0gICAgICAgIGlmIChyZXN1bHQucGFyc2luZ1N0YXR1cygp
ID09IFNEUFByb2Nlc3Nvcjo6UmVzdWx0OjpQYXJzZUVycm9yKQotICAgICAgICAgICAgYWRkSWNl
Q2FuZGlkYXRlRmFpbGVkKEV4Y2VwdGlvbiB7IE9wZXJhdGlvbkVycm9yLCAiSW52YWxpZCBjYW5k
aWRhdGUgY29udGVudCIgfSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIExPR19FUlJPUigi
U0RQUHJvY2Vzc29yIGludGVybmFsIGVycm9yIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICBBU1NFUlQodGFyZ2V0TWVkaWFEZXNjcmlwdGlvbik7Ci0gICAgbV9tZWRpYUVuZHBvaW50
LT5hZGRSZW1vdGVDYW5kaWRhdGUocmVzdWx0LmNhbmRpZGF0ZSgpLCB0YXJnZXRNZWRpYURlc2Ny
aXB0aW9uLT5taWQsIHRhcmdldE1lZGlhRGVzY3JpcHRpb24tPmljZVVmcmFnLCB0YXJnZXRNZWRp
YURlc2NyaXB0aW9uLT5pY2VQYXNzd29yZCk7Ci0KLSAgICB0YXJnZXRNZWRpYURlc2NyaXB0aW9u
LT5hZGRJY2VDYW5kaWRhdGUoV1RGTW92ZShyZXN1bHQuY2FuZGlkYXRlKCkpKTsKLQotICAgIGFk
ZEljZUNhbmRpZGF0ZVN1Y2NlZWRlZCgpOwotfQotCi12b2lkIE1lZGlhRW5kcG9pbnRQZWVyQ29u
bmVjdGlvbjo6Z2V0U3RhdHMoTWVkaWFTdHJlYW1UcmFjayogdHJhY2ssIFJlZjxEZWZlcnJlZFBy
b21pc2U+JiYgcHJvbWlzZSkKLXsKLSAgICBtX21lZGlhRW5kcG9pbnQtPmdldFN0YXRzKHRyYWNr
LCBXVEZNb3ZlKHByb21pc2UpKTsKLX0KLQotVmVjdG9yPFJlZlB0cjxNZWRpYVN0cmVhbT4+IE1l
ZGlhRW5kcG9pbnRQZWVyQ29ubmVjdGlvbjo6Z2V0UmVtb3RlU3RyZWFtcygpIGNvbnN0Ci17Ci0g
ICAgVmVjdG9yPFJlZlB0cjxNZWRpYVN0cmVhbT4+IHJlbW90ZVN0cmVhbXM7Ci0gICAgY29weVZh
bHVlc1RvVmVjdG9yKG1fcmVtb3RlU3RyZWFtTWFwLCByZW1vdGVTdHJlYW1zKTsKLSAgICByZXR1
cm4gcmVtb3RlU3RyZWFtczsKLX0KLQotUmVmPFJUQ1J0cFJlY2VpdmVyPiBNZWRpYUVuZHBvaW50
UGVlckNvbm5lY3Rpb246OmNyZWF0ZVJlY2VpdmVyKGNvbnN0IFN0cmluZyYgdHJhbnNjZWl2ZXJN
aWQsIGNvbnN0IFN0cmluZyYgdHJhY2tLaW5kLCBjb25zdCBTdHJpbmcmIHRyYWNrSWQpCi17Ci0g
ICAgUmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlwZSBzb3VyY2VUeXBlID0gdHJhY2tLaW5kID09ICJh
dWRpbyIgPyBSZWFsdGltZU1lZGlhU291cmNlOjpUeXBlOjpBdWRpbyA6IFJlYWx0aW1lTWVkaWFT
b3VyY2U6OlR5cGU6OlZpZGVvOwotCi0gICAgLy8gQ3JlYXRlIGEgbXV0ZWQgcmVtb3RlIHNvdXJj
ZSB0aGF0IHdpbGwgYmUgdW5tdXRlZCBvbmNlIG1lZGlhIHN0YXJ0cyBhcnJpdmluZy4KLSAgICBh
dXRvIHJlbW90ZVNvdXJjZSA9IG1fbWVkaWFFbmRwb2ludC0+Y3JlYXRlTXV0ZWRSZW1vdGVTb3Vy
Y2UodHJhbnNjZWl2ZXJNaWQsIHNvdXJjZVR5cGUpOwotICAgIGF1dG8gcmVtb3RlVHJhY2tQcml2
YXRlID0gTWVkaWFTdHJlYW1UcmFja1ByaXZhdGU6OmNyZWF0ZShXVEZNb3ZlKHJlbW90ZVNvdXJj
ZSksIFN0cmluZyh0cmFja0lkKSk7Ci0gICAgYXV0byByZW1vdGVUcmFjayA9IE1lZGlhU3RyZWFt
VHJhY2s6OmNyZWF0ZSgqbV9wZWVyQ29ubmVjdGlvbi5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCks
IFdURk1vdmUocmVtb3RlVHJhY2tQcml2YXRlKSk7Ci0KLSAgICByZXR1cm4gUlRDUnRwUmVjZWl2
ZXI6OmNyZWF0ZShXVEZNb3ZlKHJlbW90ZVRyYWNrKSk7Ci19Ci0KLXN0ZDo6dW5pcXVlX3B0cjxS
VENEYXRhQ2hhbm5lbEhhbmRsZXI+IE1lZGlhRW5kcG9pbnRQZWVyQ29ubmVjdGlvbjo6Y3JlYXRl
RGF0YUNoYW5uZWxIYW5kbGVyKGNvbnN0IFN0cmluZyYgbGFiZWwsIGNvbnN0IFJUQ0RhdGFDaGFu
bmVsSW5pdCYgb3B0aW9ucykKLXsKLSAgICByZXR1cm4gbV9tZWRpYUVuZHBvaW50LT5jcmVhdGVE
YXRhQ2hhbm5lbEhhbmRsZXIobGFiZWwsIG9wdGlvbnMpOwotfQotCi12b2lkIE1lZGlhRW5kcG9p
bnRQZWVyQ29ubmVjdGlvbjo6cmVwbGFjZVRyYWNrKFJUQ1J0cFNlbmRlciYgc2VuZGVyLCBSZWY8
TWVkaWFTdHJlYW1UcmFjaz4mJiB3aXRoVHJhY2ssIERPTVByb21pc2VEZWZlcnJlZDx2b2lkPiYm
IHByb21pc2UpCi17Ci0gICAgUlRDUnRwVHJhbnNjZWl2ZXIqIHRyYW5zY2VpdmVyID0gbWF0Y2hU
cmFuc2NlaXZlcihtX3BlZXJDb25uZWN0aW9uLmdldFRyYW5zY2VpdmVycygpLCBbJnNlbmRlcl0g
KFJUQ1J0cFRyYW5zY2VpdmVyJiBjdXJyZW50KSB7Ci0gICAgICAgIHJldHVybiAmY3VycmVudC5z
ZW5kZXIoKSA9PSAmc2VuZGVyOwotICAgIH0pOwotICAgIEFTU0VSVCh0cmFuc2NlaXZlcik7Ci0K
LSAgICBjb25zdCBTdHJpbmcmIG1pZCA9IHRyYW5zY2VpdmVyLT5taWQoKTsKLSAgICBpZiAobWlk
LmlzTnVsbCgpKSB7Ci0gICAgICAgIC8vIFRyYW5zY2VpdmVyIGlzIG5vdCBhc3NvY2lhdGVkIHdp
dGggYSBtZWRpYSBkZXNjcmlwdGlvbiB5ZXQuCi0gICAgICAgIHNlbmRlci5zZXRUcmFjayhXVEZN
b3ZlKHdpdGhUcmFjaykpOwotICAgICAgICBwcm9taXNlLnJlc29sdmUoKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIHJ1blRhc2soW3RoaXMsIHByb3RlY3RlZFNlbmRlciA9IFJlZlB0
cjxSVENSdHBTZW5kZXI+KCZzZW5kZXIpLCBtaWQsIHByb3RlY3RlZFRyYWNrID0gV1RGTW92ZSh3
aXRoVHJhY2spLCBwcm90ZWN0ZWRQcm9taXNlID0gV1RGTW92ZShwcm9taXNlKV0oKSBtdXRhYmxl
IHsKLSAgICAgICAgcmVwbGFjZVRyYWNrVGFzaygqcHJvdGVjdGVkU2VuZGVyLCBtaWQsIFdURk1v
dmUocHJvdGVjdGVkVHJhY2spLCBwcm90ZWN0ZWRQcm9taXNlKTsKLSAgICB9KTsKLX0KLQotdm9p
ZCBNZWRpYUVuZHBvaW50UGVlckNvbm5lY3Rpb246OnJlcGxhY2VUcmFja1Rhc2soUlRDUnRwU2Vu
ZGVyJiBzZW5kZXIsIGNvbnN0IFN0cmluZyYgbWlkLCBSZWY8TWVkaWFTdHJlYW1UcmFjaz4mJiB3
aXRoVHJhY2ssIERPTVByb21pc2VEZWZlcnJlZDx2b2lkPiYgcHJvbWlzZSkKLXsKLSAgICBpZiAo
bV9wZWVyQ29ubmVjdGlvbi5pc0Nsb3NlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX21l
ZGlhRW5kcG9pbnQtPnJlcGxhY2VTZW5kU291cmNlKHdpdGhUcmFjay0+c291cmNlKCksIG1pZCk7
Ci0KLSAgICBzZW5kZXIuc2V0VHJhY2soV1RGTW92ZSh3aXRoVHJhY2spKTsKLSAgICBwcm9taXNl
LnJlc29sdmUoKTsKLX0KLQotdm9pZCBNZWRpYUVuZHBvaW50UGVlckNvbm5lY3Rpb246OmRvU3Rv
cCgpCi17Ci0gICAgbV9tZWRpYUVuZHBvaW50LT5zdG9wKCk7Ci19Ci0KLXZvaWQgTWVkaWFFbmRw
b2ludFBlZXJDb25uZWN0aW9uOjplbXVsYXRlUGxhdGZvcm1FdmVudChjb25zdCBTdHJpbmcmIGFj
dGlvbikKLXsKLSAgICBtX21lZGlhRW5kcG9pbnQtPmVtdWxhdGVQbGF0Zm9ybUV2ZW50KGFjdGlv
bik7Ci19Ci0KLU1lZGlhRW5kcG9pbnRTZXNzaW9uRGVzY3JpcHRpb24qIE1lZGlhRW5kcG9pbnRQ
ZWVyQ29ubmVjdGlvbjo6aW50ZXJuYWxMb2NhbERlc2NyaXB0aW9uKCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gbV9wZW5kaW5nTG9jYWxEZXNjcmlwdGlvbiA/IG1fcGVuZGluZ0xvY2FsRGVzY3JpcHRp
b24uZ2V0KCkgOiBtX2N1cnJlbnRMb2NhbERlc2NyaXB0aW9uLmdldCgpOwotfQotCi1NZWRpYUVu
ZHBvaW50U2Vzc2lvbkRlc2NyaXB0aW9uKiBNZWRpYUVuZHBvaW50UGVlckNvbm5lY3Rpb246Omlu
dGVybmFsUmVtb3RlRGVzY3JpcHRpb24oKSBjb25zdAotewotICAgIHJldHVybiBtX3BlbmRpbmdS
ZW1vdGVEZXNjcmlwdGlvbiA/IG1fcGVuZGluZ1JlbW90ZURlc2NyaXB0aW9uLmdldCgpIDogbV9j
dXJyZW50UmVtb3RlRGVzY3JpcHRpb24uZ2V0KCk7Ci19Ci0KLVJlZlB0cjxSVENTZXNzaW9uRGVz
Y3JpcHRpb24+IE1lZGlhRW5kcG9pbnRQZWVyQ29ubmVjdGlvbjo6Y3JlYXRlUlRDU2Vzc2lvbkRl
c2NyaXB0aW9uKE1lZGlhRW5kcG9pbnRTZXNzaW9uRGVzY3JpcHRpb24qIGRlc2NyaXB0aW9uKSBj
b25zdAotewotICAgIHJldHVybiBkZXNjcmlwdGlvbiA/IGRlc2NyaXB0aW9uLT50b1JUQ1Nlc3Np
b25EZXNjcmlwdGlvbigqbV9zZHBQcm9jZXNzb3IpIDogbnVsbHB0cjsKLX0KLQotdm9pZCBNZWRp
YUVuZHBvaW50UGVlckNvbm5lY3Rpb246OmdvdER0bHNGaW5nZXJwcmludChjb25zdCBTdHJpbmcm
IGZpbmdlcnByaW50LCBjb25zdCBTdHJpbmcmIGZpbmdlcnByaW50RnVuY3Rpb24pCi17Ci0gICAg
QVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLQotICAgIG1fZHRsc0ZpbmdlcnByaW50ID0gZmluZ2Vy
cHJpbnQ7Ci0gICAgbV9kdGxzRmluZ2VycHJpbnRGdW5jdGlvbiA9IGZpbmdlcnByaW50RnVuY3Rp
b247Ci0KLSAgICBzdGFydFJ1bm5pbmdUYXNrcygpOwotfQotCi12b2lkIE1lZGlhRW5kcG9pbnRQ
ZWVyQ29ubmVjdGlvbjo6Z290SWNlQ2FuZGlkYXRlKGNvbnN0IFN0cmluZyYgbWlkLCBJY2VDYW5k
aWRhdGUmJiBjYW5kaWRhdGUpCi17Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLQotICAg
IGF1dG8mIG1lZGlhRGVzY3JpcHRpb25zID0gaW50ZXJuYWxMb2NhbERlc2NyaXB0aW9uKCktPmNv
bmZpZ3VyYXRpb24oKS0+bWVkaWFEZXNjcmlwdGlvbnMoKTsKLSAgICBzaXplX3QgbWVkaWFEZXNj
cmlwdGlvbkluZGV4ID0gbm90Rm91bmQ7Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1l
ZGlhRGVzY3JpcHRpb25zLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmIChtZWRpYURlc2NyaXB0
aW9uc1tpXS5taWQgPT0gbWlkKSB7Ci0gICAgICAgICAgICBtZWRpYURlc2NyaXB0aW9uSW5kZXgg
PSBpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgQVNTRVJUKG1l
ZGlhRGVzY3JpcHRpb25JbmRleCAhPSBub3RGb3VuZCk7Ci0KLSAgICBTdHJpbmcgY2FuZGlkYXRl
TGluZTsKLSAgICBhdXRvIHJlc3VsdCA9IG1fc2RwUHJvY2Vzc29yLT5nZW5lcmF0ZUNhbmRpZGF0
ZUxpbmUoY2FuZGlkYXRlLCBjYW5kaWRhdGVMaW5lKTsKLSAgICBpZiAocmVzdWx0ICE9IFNEUFBy
b2Nlc3Nvcjo6UmVzdWx0OjpTdWNjZXNzKSB7Ci0gICAgICAgIExPR19FUlJPUigiU0RQUHJvY2Vz
c29yIGludGVybmFsIGVycm9yIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtZWRp
YURlc2NyaXB0aW9uc1ttZWRpYURlc2NyaXB0aW9uSW5kZXhdLmFkZEljZUNhbmRpZGF0ZShXVEZN
b3ZlKGNhbmRpZGF0ZSkpOwotCi0gICAgZmlyZUlDRUNhbmRpZGF0ZUV2ZW50KFJUQ0ljZUNhbmRp
ZGF0ZTo6Y3JlYXRlKGNhbmRpZGF0ZUxpbmUsIG1pZCwgbWVkaWFEZXNjcmlwdGlvbkluZGV4KSk7
Ci19Ci0KLXZvaWQgTWVkaWFFbmRwb2ludFBlZXJDb25uZWN0aW9uOjpkb25lR2F0aGVyaW5nQ2Fu
ZGlkYXRlcyhjb25zdCBTdHJpbmcmIG1pZCkKLXsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkp
OwotCi0gICAgUnRwVHJhbnNjZWl2ZXJWZWN0b3IgdHJhbnNjZWl2ZXJzID0gUnRwVHJhbnNjZWl2
ZXJWZWN0b3IobV9wZWVyQ29ubmVjdGlvbi5nZXRUcmFuc2NlaXZlcnMoKSk7Ci0gICAgUlRDUnRw
VHJhbnNjZWl2ZXIqIG5vdGlmeWluZ1RyYW5zY2VpdmVyID0gbWF0Y2hUcmFuc2NlaXZlckJ5TWlk
KHRyYW5zY2VpdmVycywgbWlkKTsKLSAgICBBU1NFUlQobm90aWZ5aW5nVHJhbnNjZWl2ZXIpOwot
Ci0gICAgbm90aWZ5aW5nVHJhbnNjZWl2ZXItPmljZVRyYW5zcG9ydCgpLnNldEdhdGhlcmluZ1N0
YXRlKFJUQ0ljZUdhdGhlcmluZ1N0YXRlOjpDb21wbGV0ZSk7Ci0KLSAgICAvLyBEb24ndCBub3Rp
ZnkgdGhlIHNjcmlwdCBpZiB0aGVyZSBhcmUgdHJhbnNjZWl2ZXJzIHN0aWxsIGdhdGhlcmluZy4K
LSAgICBSVENSdHBUcmFuc2NlaXZlciogc3RpbGxHYXRoZXJpbmdUcmFuc2NlaXZlciA9IG1hdGNo
VHJhbnNjZWl2ZXIodHJhbnNjZWl2ZXJzLCBbXSAoUlRDUnRwVHJhbnNjZWl2ZXImIGN1cnJlbnQp
IHsKLSAgICAgICAgcmV0dXJuICFjdXJyZW50LnN0b3BwZWQoKSAmJiAhY3VycmVudC5taWQoKS5p
c051bGwoKQotICAgICAgICAgICAgJiYgY3VycmVudC5pY2VUcmFuc3BvcnQoKS5nYXRoZXJpbmdT
dGF0ZSgpICE9IFJUQ0ljZUdhdGhlcmluZ1N0YXRlOjpDb21wbGV0ZTsKLSAgICB9KTsKLSAgICBp
ZiAoIXN0aWxsR2F0aGVyaW5nVHJhbnNjZWl2ZXIpCi0gICAgICAgIFBlZXJDb25uZWN0aW9uQmFj
a2VuZDo6ZG9uZUdhdGhlcmluZ0NhbmRpZGF0ZXMoKTsKLX0KLQotc3RhdGljIFJUQ0ljZUNvbm5l
Y3Rpb25TdGF0ZSBkZXJpdmVBZ2dyZWdhdGVkSWNlQ29ubmVjdGlvblN0YXRlKGNvbnN0IFZlY3Rv
cjxSVENJY2VUcmFuc3BvcnRTdGF0ZT4mIHN0YXRlcykKLXsKLSAgICB1bnNpZ25lZCBuZXdDb3Vu
dCA9IDA7Ci0gICAgdW5zaWduZWQgY2hlY2tpbmdDb3VudCA9IDA7Ci0gICAgdW5zaWduZWQgY29u
bmVjdGVkQ291bnQgPSAwOwotICAgIHVuc2lnbmVkIGNvbXBsZXRlZENvdW50ID0gMDsKLSAgICB1
bnNpZ25lZCBmYWlsZWRDb3VudCA9IDA7Ci0gICAgdW5zaWduZWQgZGlzY29ubmVjdGVkQ291bnQg
PSAwOwotICAgIHVuc2lnbmVkIGNsb3NlZENvdW50ID0gMDsKLQotICAgIGZvciAoYXV0byYgc3Rh
dGUgOiBzdGF0ZXMpIHsKLSAgICAgICAgc3dpdGNoIChzdGF0ZSkgewotICAgICAgICBjYXNlIFJU
Q0ljZVRyYW5zcG9ydFN0YXRlOjpOZXc6Ci0gICAgICAgICAgICArK25ld0NvdW50OwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUlRDSWNlVHJhbnNwb3J0U3RhdGU6OkNoZWNraW5n
OgotICAgICAgICAgICAgKytjaGVja2luZ0NvdW50OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgUlRDSWNlVHJhbnNwb3J0U3RhdGU6OkNvbm5lY3RlZDoKLSAgICAgICAgICAgICsr
Y29ubmVjdGVkQ291bnQ7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBSVENJY2VU
cmFuc3BvcnRTdGF0ZTo6Q29tcGxldGVkOgotICAgICAgICAgICAgKytjb21wbGV0ZWRDb3VudDsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFJUQ0ljZVRyYW5zcG9ydFN0YXRlOjpG
YWlsZWQ6Ci0gICAgICAgICAgICArK2ZhaWxlZENvdW50OwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgUlRDSWNlVHJhbnNwb3J0U3RhdGU6OkRpc2Nvbm5lY3RlZDoKLSAgICAgICAg
ICAgICsrZGlzY29ubmVjdGVkQ291bnQ7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBSVENJY2VUcmFuc3BvcnRTdGF0ZTo6Q2xvc2VkOgotICAgICAgICAgICAgKytjbG9zZWRDb3Vu
dDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gVGhlIGFn
Z3JlZ2F0ZWQgUlRDSWNlQ29ubmVjdGlvblN0YXRlIGlzIGRlcml2ZWQgZnJvbSB0aGUgUlRDSWNl
VHJhbnNwb3J0U3RhdGUgb2YgYWxsIFJUQ0ljZVRyYW5zcG9ydHMuCi0gICAgaWYgKChuZXdDb3Vu
dCA+IDAgJiYgIWNoZWNraW5nQ291bnQgJiYgIWZhaWxlZENvdW50ICYmICFkaXNjb25uZWN0ZWRD
b3VudCkgfHwgKGNsb3NlZENvdW50ID09IHN0YXRlcy5zaXplKCkpKQotICAgICAgICByZXR1cm4g
UlRDSWNlQ29ubmVjdGlvblN0YXRlOjpOZXc7Ci0KLSAgICBpZiAoY2hlY2tpbmdDb3VudCA+IDAg
JiYgIWZhaWxlZENvdW50ICYmICFkaXNjb25uZWN0ZWRDb3VudCkKLSAgICAgICAgcmV0dXJuIFJU
Q0ljZUNvbm5lY3Rpb25TdGF0ZTo6Q2hlY2tpbmc7Ci0KLSAgICBpZiAoKGNvbm5lY3RlZENvdW50
ICsgY29tcGxldGVkQ291bnQgKyBjbG9zZWRDb3VudCkgPT0gc3RhdGVzLnNpemUoKSAmJiBjb25u
ZWN0ZWRDb3VudCA+IDApCi0gICAgICAgIHJldHVybiBSVENJY2VDb25uZWN0aW9uU3RhdGU6OkNv
bm5lY3RlZDsKLQotICAgIGlmICgoY29tcGxldGVkQ291bnQgKyBjbG9zZWRDb3VudCkgPT0gc3Rh
dGVzLnNpemUoKSAmJiBjb21wbGV0ZWRDb3VudCA+IDApCi0gICAgICAgIHJldHVybiBSVENJY2VD
b25uZWN0aW9uU3RhdGU6OkNvbXBsZXRlZDsKLQotICAgIGlmIChmYWlsZWRDb3VudCA+IDApCi0g
ICAgICAgIHJldHVybiBSVENJY2VDb25uZWN0aW9uU3RhdGU6OkZhaWxlZDsKLQotICAgIGlmIChk
aXNjb25uZWN0ZWRDb3VudCA+IDApIC8vIEFueSBmYWlsZWQgY2F1Z2h0IGFib3ZlLgotICAgICAg
ICByZXR1cm4gUlRDSWNlQ29ubmVjdGlvblN0YXRlOjpEaXNjb25uZWN0ZWQ7Ci0KLSAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gUlRDSWNlQ29ubmVjdGlvblN0YXRlOjpOZXc7
Ci19Ci0KLXZvaWQgTWVkaWFFbmRwb2ludFBlZXJDb25uZWN0aW9uOjppY2VUcmFuc3BvcnRTdGF0
ZUNoYW5nZWQoY29uc3QgU3RyaW5nJiBtaWQsIFJUQ0ljZVRyYW5zcG9ydFN0YXRlIG1lZGlhRW5k
cG9pbnRJY2VUcmFuc3BvcnRTdGF0ZSkKLXsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwot
Ci0gICAgUlRDUnRwVHJhbnNjZWl2ZXIqIHRyYW5zY2VpdmVyID0gbWF0Y2hUcmFuc2NlaXZlckJ5
TWlkKG1fcGVlckNvbm5lY3Rpb24uZ2V0VHJhbnNjZWl2ZXJzKCksIG1pZCk7Ci0gICAgQVNTRVJU
KHRyYW5zY2VpdmVyKTsKLQotICAgIFJUQ0ljZVRyYW5zcG9ydFN0YXRlIHRyYW5zcG9ydFN0YXRl
ID0gc3RhdGljX2Nhc3Q8UlRDSWNlVHJhbnNwb3J0U3RhdGU+KG1lZGlhRW5kcG9pbnRJY2VUcmFu
c3BvcnRTdGF0ZSk7Ci0gICAgdHJhbnNjZWl2ZXItPmljZVRyYW5zcG9ydCgpLnNldFN0YXRlKHRy
YW5zcG9ydFN0YXRlKTsKLQotICAgIC8vIERldGVybWluZSBpZiB0aGUgc2NyaXB0IG5lZWRzIHRv
IGJlIG5vdGlmaWVkLgotICAgIFZlY3RvcjxSVENJY2VUcmFuc3BvcnRTdGF0ZT4gdHJhbnNwb3J0
U3RhdGVzOwotICAgIHRyYW5zcG9ydFN0YXRlcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG1fcGVl
ckNvbm5lY3Rpb24uZ2V0VHJhbnNjZWl2ZXJzKCkuc2l6ZSgpKTsKLSAgICBmb3IgKGF1dG8mIHRy
YW5zY2VpdmVyIDogbV9wZWVyQ29ubmVjdGlvbi5nZXRUcmFuc2NlaXZlcnMoKSkKLSAgICAgICAg
dHJhbnNwb3J0U3RhdGVzLnVuY2hlY2tlZEFwcGVuZCh0cmFuc2NlaXZlci0+aWNlVHJhbnNwb3J0
KCkuc3RhdGUoKSk7Ci0KLSAgICBtX3BlZXJDb25uZWN0aW9uLnVwZGF0ZUljZUNvbm5lY3Rpb25T
dGF0ZShkZXJpdmVBZ2dyZWdhdGVkSWNlQ29ubmVjdGlvblN0YXRlKHRyYW5zcG9ydFN0YXRlcykp
OwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoV0VCX1JU
QykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFF
bmRwb2ludFBlZXJDb25uZWN0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3Ry
ZWFtL01lZGlhRW5kcG9pbnRQZWVyQ29ubmVjdGlvbi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCBiYjgxMzEyMWM5MmNkMzFkNjU2NTdkMDVhMzQ5YjYyOTYzYzc5YmU1Li4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFFbmRwb2ludFBlZXJDb25uZWN0aW9uLmgKKysrIC9kZXYv
bnVsbApAQCAtMSwxMzMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSwgMjAxNiBF
cmljc3NvbiBBQi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIKLSAqICAgIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqICAgIGRpc3RyaWJ1dGlvbi4KLSAqIDMu
IE5laXRoZXIgdGhlIG5hbWUgb2YgRXJpY3Nzb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJp
YnV0b3JzCi0gKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tIHRoaXMKLSAqICAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
LSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBFTkFC
TEUoV0VCX1JUQykKLQotI2luY2x1ZGUgIk1lZGlhRW5kcG9pbnQuaCIKLSNpbmNsdWRlICJQZWVy
Q29ubmVjdGlvbkJhY2tlbmQuaCIKLSNpbmNsdWRlICJSVENTZXNzaW9uRGVzY3JpcHRpb24uaCIK
LSNpbmNsdWRlIDx3dGYvRnVuY3Rpb24uaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFz
cyBNZWRpYUVuZHBvaW50U2Vzc2lvbkRlc2NyaXB0aW9uOwotY2xhc3MgU0RQUHJvY2Vzc29yOwot
Ci1jbGFzcyBNZWRpYUVuZHBvaW50UGVlckNvbm5lY3Rpb24gZmluYWwgOiBwdWJsaWMgUGVlckNv
bm5lY3Rpb25CYWNrZW5kLCBwdWJsaWMgTWVkaWFFbmRwb2ludENsaWVudCB7Ci1wdWJsaWM6Ci0g
ICAgV0VCQ09SRV9FWFBPUlQgZXhwbGljaXQgTWVkaWFFbmRwb2ludFBlZXJDb25uZWN0aW9uKFJU
Q1BlZXJDb25uZWN0aW9uJik7Ci0KLXByaXZhdGU6Ci0gICAgUmVmUHRyPFJUQ1Nlc3Npb25EZXNj
cmlwdGlvbj4gbG9jYWxEZXNjcmlwdGlvbigpIGNvbnN0IGZpbmFsOwotICAgIFJlZlB0cjxSVENT
ZXNzaW9uRGVzY3JpcHRpb24+IGN1cnJlbnRMb2NhbERlc2NyaXB0aW9uKCkgY29uc3QgZmluYWw7
Ci0gICAgUmVmUHRyPFJUQ1Nlc3Npb25EZXNjcmlwdGlvbj4gcGVuZGluZ0xvY2FsRGVzY3JpcHRp
b24oKSBjb25zdCBmaW5hbDsKLQotICAgIFJlZlB0cjxSVENTZXNzaW9uRGVzY3JpcHRpb24+IHJl
bW90ZURlc2NyaXB0aW9uKCkgY29uc3QgZmluYWw7Ci0gICAgUmVmUHRyPFJUQ1Nlc3Npb25EZXNj
cmlwdGlvbj4gY3VycmVudFJlbW90ZURlc2NyaXB0aW9uKCkgY29uc3QgZmluYWw7Ci0gICAgUmVm
UHRyPFJUQ1Nlc3Npb25EZXNjcmlwdGlvbj4gcGVuZGluZ1JlbW90ZURlc2NyaXB0aW9uKCkgY29u
c3QgZmluYWw7Ci0KLSAgICBib29sIHNldENvbmZpZ3VyYXRpb24oTWVkaWFFbmRwb2ludENvbmZp
Z3VyYXRpb24mJikgZmluYWw7Ci0KLSAgICB2b2lkIGdldFN0YXRzKE1lZGlhU3RyZWFtVHJhY2sq
LCBSZWY8RGVmZXJyZWRQcm9taXNlPiYmKSBmaW5hbDsKLQotICAgIFZlY3RvcjxSZWZQdHI8TWVk
aWFTdHJlYW0+PiBnZXRSZW1vdGVTdHJlYW1zKCkgY29uc3QgZmluYWw7Ci0KLSAgICBSZWY8UlRD
UnRwUmVjZWl2ZXI+IGNyZWF0ZVJlY2VpdmVyKGNvbnN0IFN0cmluZyYgdHJhbnNjZWl2ZXJNaWQs
IGNvbnN0IFN0cmluZyYgdHJhY2tLaW5kLCBjb25zdCBTdHJpbmcmIHRyYWNrSWQpIGZpbmFsOwot
ICAgIHZvaWQgcmVwbGFjZVRyYWNrKFJUQ1J0cFNlbmRlciYsIFJlZjxNZWRpYVN0cmVhbVRyYWNr
PiYmLCBET01Qcm9taXNlRGVmZXJyZWQ8dm9pZD4mJikgZmluYWw7Ci0KLSAgICB2b2lkIGVtdWxh
dGVQbGF0Zm9ybUV2ZW50KGNvbnN0IFN0cmluZyYgYWN0aW9uKSBmaW5hbDsKLQotICAgIHZvaWQg
cnVuVGFzayhGdW5jdGlvbjx2b2lkICgpPiYmKTsKLSAgICB2b2lkIHN0YXJ0UnVubmluZ1Rhc2tz
KCk7Ci0KLSAgICB2b2lkIGRvQ3JlYXRlT2ZmZXIoUlRDT2ZmZXJPcHRpb25zJiYpIGZpbmFsOwot
ICAgIHZvaWQgZG9DcmVhdGVBbnN3ZXIoUlRDQW5zd2VyT3B0aW9ucyYmKSBmaW5hbDsKLSAgICB2
b2lkIGRvU2V0TG9jYWxEZXNjcmlwdGlvbihSVENTZXNzaW9uRGVzY3JpcHRpb24mKSBmaW5hbDsK
LSAgICB2b2lkIGRvU2V0UmVtb3RlRGVzY3JpcHRpb24oUlRDU2Vzc2lvbkRlc2NyaXB0aW9uJikg
ZmluYWw7Ci0gICAgdm9pZCBkb0FkZEljZUNhbmRpZGF0ZShSVENJY2VDYW5kaWRhdGUmKSBmaW5h
bDsKLSAgICB2b2lkIGRvU3RvcCgpIGZpbmFsOwotCi0gICAgdm9pZCBjcmVhdGVPZmZlclRhc2so
Y29uc3QgUlRDT2ZmZXJPcHRpb25zJik7Ci0gICAgdm9pZCBjcmVhdGVBbnN3ZXJUYXNrKGNvbnN0
IFJUQ0Fuc3dlck9wdGlvbnMmKTsKLQotICAgIHZvaWQgc2V0TG9jYWxEZXNjcmlwdGlvblRhc2so
UmVmUHRyPFJUQ1Nlc3Npb25EZXNjcmlwdGlvbj4mJik7Ci0gICAgdm9pZCBzZXRSZW1vdGVEZXNj
cmlwdGlvblRhc2soUmVmUHRyPFJUQ1Nlc3Npb25EZXNjcmlwdGlvbj4mJik7Ci0KLSAgICB2b2lk
IGFkZEljZUNhbmRpZGF0ZVRhc2soUlRDSWNlQ2FuZGlkYXRlJik7Ci0KLSAgICB2b2lkIHJlcGxh
Y2VUcmFja1Rhc2soUlRDUnRwU2VuZGVyJiwgY29uc3QgU3RyaW5nJiBtaWQsIFJlZjxNZWRpYVN0
cmVhbVRyYWNrPiYmLCBET01Qcm9taXNlRGVmZXJyZWQ8dm9pZD4mKTsKLQotICAgIGJvb2wgbG9j
YWxEZXNjcmlwdGlvblR5cGVWYWxpZEZvclN0YXRlKFJUQ1NkcFR5cGUpIGNvbnN0OwotICAgIGJv
b2wgcmVtb3RlRGVzY3JpcHRpb25UeXBlVmFsaWRGb3JTdGF0ZShSVENTZHBUeXBlKSBjb25zdDsK
LQotICAgIE1lZGlhRW5kcG9pbnRTZXNzaW9uRGVzY3JpcHRpb24qIGludGVybmFsTG9jYWxEZXNj
cmlwdGlvbigpIGNvbnN0OwotICAgIE1lZGlhRW5kcG9pbnRTZXNzaW9uRGVzY3JpcHRpb24qIGlu
dGVybmFsUmVtb3RlRGVzY3JpcHRpb24oKSBjb25zdDsKLSAgICBSZWZQdHI8UlRDU2Vzc2lvbkRl
c2NyaXB0aW9uPiBjcmVhdGVSVENTZXNzaW9uRGVzY3JpcHRpb24oTWVkaWFFbmRwb2ludFNlc3Np
b25EZXNjcmlwdGlvbiopIGNvbnN0OwotCi0gICAgLy8gTWVkaWFFbmRwb2ludENsaWVudAotICAg
IHZvaWQgZ290RHRsc0ZpbmdlcnByaW50KGNvbnN0IFN0cmluZyYgZmluZ2VycHJpbnQsIGNvbnN0
IFN0cmluZyYgZmluZ2VycHJpbnRGdW5jdGlvbikgZmluYWw7Ci0gICAgdm9pZCBnb3RJY2VDYW5k
aWRhdGUoY29uc3QgU3RyaW5nJiBtaWQsIEljZUNhbmRpZGF0ZSYmKSBmaW5hbDsKLSAgICB2b2lk
IGRvbmVHYXRoZXJpbmdDYW5kaWRhdGVzKGNvbnN0IFN0cmluZyYgbWlkKSBmaW5hbDsKLSAgICB2
b2lkIGljZVRyYW5zcG9ydFN0YXRlQ2hhbmdlZChjb25zdCBTdHJpbmcmIG1pZCwgUlRDSWNlVHJh
bnNwb3J0U3RhdGUpIGZpbmFsOwotCi0gICAgc3RkOjp1bmlxdWVfcHRyPFJUQ0RhdGFDaGFubmVs
SGFuZGxlcj4gY3JlYXRlRGF0YUNoYW5uZWxIYW5kbGVyKGNvbnN0IFN0cmluZyYsIGNvbnN0IFJU
Q0RhdGFDaGFubmVsSW5pdCYpIGZpbmFsOwotCi0gICAgc3RkOjp1bmlxdWVfcHRyPE1lZGlhRW5k
cG9pbnQ+IG1fbWVkaWFFbmRwb2ludDsKLQotICAgIEZ1bmN0aW9uPHZvaWQgKCk+IG1faW5pdGlh
bERlZmVycmVkVGFzazsKLQotICAgIHN0ZDo6dW5pcXVlX3B0cjxTRFBQcm9jZXNzb3I+IG1fc2Rw
UHJvY2Vzc29yOwotCi0gICAgVmVjdG9yPE1lZGlhUGF5bG9hZD4gbV9kZWZhdWx0QXVkaW9QYXls
b2FkczsKLSAgICBWZWN0b3I8TWVkaWFQYXlsb2FkPiBtX2RlZmF1bHRWaWRlb1BheWxvYWRzOwot
Ci0gICAgU3RyaW5nIG1fY25hbWU7Ci0gICAgU3RyaW5nIG1faWNlVWZyYWc7Ci0gICAgU3RyaW5n
IG1faWNlUGFzc3dvcmQ7Ci0gICAgU3RyaW5nIG1fZHRsc0ZpbmdlcnByaW50OwotICAgIFN0cmlu
ZyBtX2R0bHNGaW5nZXJwcmludEZ1bmN0aW9uOwotICAgIHVuc2lnbmVkIG1fc2RwT2ZmZXJTZXNz
aW9uVmVyc2lvbiB7IDAgfTsKLSAgICB1bnNpZ25lZCBtX3NkcEFuc3dlclNlc3Npb25WZXJzaW9u
IHsgMCB9OwotCi0gICAgUmVmUHRyPE1lZGlhRW5kcG9pbnRTZXNzaW9uRGVzY3JpcHRpb24+IG1f
Y3VycmVudExvY2FsRGVzY3JpcHRpb247Ci0gICAgUmVmUHRyPE1lZGlhRW5kcG9pbnRTZXNzaW9u
RGVzY3JpcHRpb24+IG1fcGVuZGluZ0xvY2FsRGVzY3JpcHRpb247Ci0KLSAgICBSZWZQdHI8TWVk
aWFFbmRwb2ludFNlc3Npb25EZXNjcmlwdGlvbj4gbV9jdXJyZW50UmVtb3RlRGVzY3JpcHRpb247
Ci0gICAgUmVmUHRyPE1lZGlhRW5kcG9pbnRTZXNzaW9uRGVzY3JpcHRpb24+IG1fcGVuZGluZ1Jl
bW90ZURlc2NyaXB0aW9uOwotCi0gICAgSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxNZWRpYVN0cmVh
bT4+IG1fcmVtb3RlU3RyZWFtTWFwOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0j
ZW5kaWYgLy8gRU5BQkxFKFdFQl9SVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL21lZGlhc3RyZWFtL01lZGlhRW5kcG9pbnRTZXNzaW9uRGVzY3JpcHRpb24uY3BwIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYUVuZHBvaW50U2Vzc2lvbkRlc2Ny
aXB0aW9uLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWM2MDZmNTBjMmE5ZGQ3
ZWU4MTIzY2JlMzM5Zjc0N2Y3NDQwZmU3OS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlh
RW5kcG9pbnRTZXNzaW9uRGVzY3JpcHRpb24uY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTE3ICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUsIDIwMTYgRXJpY3Nzb24gQUIuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
Ci0gKiAgICBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlCi0gKiAgICBkaXN0cmlidXRpb24uCi0gKiAzLiBOZWl0aGVyIHRoZSBuYW1l
IG9mIEVyaWNzc29uIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICogICAgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlz
Ci0gKiAgICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
LSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJNZWRpYUVuZHBv
aW50U2Vzc2lvbkRlc2NyaXB0aW9uLmgiCi0KLSNpZiBFTkFCTEUoV0VCX1JUQykKLQotI2luY2x1
ZGUgIlNEUFByb2Nlc3Nvci5oIgotI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Ci0KLSNkZWZpbmUgU1RSSU5HX0ZVTkNUSU9OKG5hbWUpIFwKLSAg
ICBzdGF0aWMgY29uc3QgU3RyaW5nJiBuYW1lIyNTdHJpbmcoKSBcCi0gICAgeyBcCi0gICAgICAg
IHN0YXRpYyBOZXZlckRlc3Ryb3llZDxjb25zdCBTdHJpbmc+IG5hbWUoTUFLRV9TVEFUSUNfU1RS
SU5HX0lNUEwoI25hbWUpKTsgXAotICAgICAgICByZXR1cm4gbmFtZTsgXAotICAgIH0KLQotU1RS
SU5HX0ZVTkNUSU9OKG9mZmVyKQotU1RSSU5HX0ZVTkNUSU9OKHByYW5zd2VyKQotU1RSSU5HX0ZV
TkNUSU9OKGFuc3dlcikKLVNUUklOR19GVU5DVElPTihyb2xsYmFjaykKLQotUmVmPE1lZGlhRW5k
cG9pbnRTZXNzaW9uRGVzY3JpcHRpb24+IE1lZGlhRW5kcG9pbnRTZXNzaW9uRGVzY3JpcHRpb246
OmNyZWF0ZShSVENTZHBUeXBlIHR5cGUsIFJlZlB0cjxNZWRpYUVuZHBvaW50U2Vzc2lvbkNvbmZp
Z3VyYXRpb24+JiYgY29uZmlndXJhdGlvbikKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBN
ZWRpYUVuZHBvaW50U2Vzc2lvbkRlc2NyaXB0aW9uKHR5cGUsIFdURk1vdmUoY29uZmlndXJhdGlv
biksIG51bGxwdHIpKTsKLX0KLQotRXhjZXB0aW9uT3I8UmVmPE1lZGlhRW5kcG9pbnRTZXNzaW9u
RGVzY3JpcHRpb24+PiBNZWRpYUVuZHBvaW50U2Vzc2lvbkRlc2NyaXB0aW9uOjpjcmVhdGUoUmVm
UHRyPFJUQ1Nlc3Npb25EZXNjcmlwdGlvbj4mJiBydGNEZXNjcmlwdGlvbiwgY29uc3QgU0RQUHJv
Y2Vzc29yJiBzZHBQcm9jZXNzb3IpCi17Ci0gICAgUmVmUHRyPE1lZGlhRW5kcG9pbnRTZXNzaW9u
Q29uZmlndXJhdGlvbj4gY29uZmlndXJhdGlvbjsKLSAgICBhdXRvIHJlc3VsdCA9IHNkcFByb2Nl
c3Nvci5wYXJzZShydGNEZXNjcmlwdGlvbi0+c2RwKCksIGNvbmZpZ3VyYXRpb24pOwotICAgIGlm
IChyZXN1bHQgIT0gU0RQUHJvY2Vzc29yOjpSZXN1bHQ6OlN1Y2Nlc3MpIHsKLSAgICAgICAgaWYg
KHJlc3VsdCA9PSBTRFBQcm9jZXNzb3I6OlJlc3VsdDo6UGFyc2VFcnJvcikKLSAgICAgICAgICAg
IHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3IsIEFTQ0lJTGl0ZXJhbCgiU0RQ
IGNvbnRlbnQgaXMgaW52YWxpZCIpIH07Ci0gICAgICAgIExPR19FUlJPUigiU0RQUHJvY2Vzc29y
IGludGVybmFsIGVycm9yIik7Ci0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBBYm9ydEVycm9y
LCBBU0NJSUxpdGVyYWwoIkludGVybmFsIGVycm9yIikgfTsKLSAgICB9Ci0gICAgcmV0dXJuIGFk
b3B0UmVmKCpuZXcgTWVkaWFFbmRwb2ludFNlc3Npb25EZXNjcmlwdGlvbihydGNEZXNjcmlwdGlv
bi0+dHlwZSgpLCBXVEZNb3ZlKGNvbmZpZ3VyYXRpb24pLCBXVEZNb3ZlKHJ0Y0Rlc2NyaXB0aW9u
KSkpOwotfQotCi1SZWZQdHI8UlRDU2Vzc2lvbkRlc2NyaXB0aW9uPiBNZWRpYUVuZHBvaW50U2Vz
c2lvbkRlc2NyaXB0aW9uOjp0b1JUQ1Nlc3Npb25EZXNjcmlwdGlvbihjb25zdCBTRFBQcm9jZXNz
b3ImIHNkcFByb2Nlc3NvcikgY29uc3QKLXsKLSAgICBTdHJpbmcgc2RwU3RyaW5nOwotICAgIFNE
UFByb2Nlc3Nvcjo6UmVzdWx0IHJlc3VsdCA9IHNkcFByb2Nlc3Nvci5nZW5lcmF0ZSgqbV9jb25m
aWd1cmF0aW9uLCBzZHBTdHJpbmcpOwotICAgIGlmIChyZXN1bHQgIT0gU0RQUHJvY2Vzc29yOjpS
ZXN1bHQ6OlN1Y2Nlc3MpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJTRFBQcm9jZXNzb3IgaW50ZXJu
YWwgZXJyb3IiKTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAgLy8gSWYg
dGhpcyBvYmplY3Qgd2FzIGNyZWF0ZWQgZnJvbSBhbiBSVENTZXNzaW9uRGVzY3JpcHRpb24sIHRv
UlRDU2Vzc2lvbkRlc2NyaXB0aW9uIHdpbGwgcmV0dXJuCi0gICAgLy8gdGhhdCBzYW1lIGluc3Rh
bmNlIGJ1dCB3aXRoIGFuIHVwZGF0ZWQgc2RwLiBJdCBpcyB1c2VkIGZvciBSVENQZWVyQ29ubmVj
dGlvbidzIGRlc2NyaXB0aW9uCi0gICAgLy8gYXRyaWJ1dGVzIChlLmcuIGxvY2FsRGVzY3JpcHRp
b24gYW5kIHBlbmRpbmdMb2NhbERlc2NyaXB0aW9uKS4KLSAgICBpZiAobV9ydGNEZXNjcmlwdGlv
bikgewotICAgICAgICBtX3J0Y0Rlc2NyaXB0aW9uLT5zZXRTZHAoV1RGTW92ZShzZHBTdHJpbmcp
KTsKLSAgICAgICAgcmV0dXJuIG1fcnRjRGVzY3JpcHRpb247Ci0gICAgfQotCi0gICAgcmV0dXJu
IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbjo6Y3JlYXRlKG1fdHlwZSwgV1RGTW92ZShzZHBTdHJpbmcp
KTsKLX0KLQotLy8gRklYTUU6IHVuaWZ5IHdpdGggTGliV2ViUlRDTWVkaWFFbmRwb2ludCBzZXNz
aW9uRGVzY3JpcHRpb25UeXBlKCkuCi1jb25zdCBTdHJpbmcmIE1lZGlhRW5kcG9pbnRTZXNzaW9u
RGVzY3JpcHRpb246OnR5cGVTdHJpbmcoKSBjb25zdAotewotICAgIHN3aXRjaCAobV90eXBlKSB7
Ci0gICAgY2FzZSBSVENTZHBUeXBlOjpPZmZlcjoKLSAgICAgICAgcmV0dXJuIG9mZmVyU3RyaW5n
KCk7Ci0gICAgY2FzZSBSVENTZHBUeXBlOjpQcmFuc3dlcjoKLSAgICAgICAgcmV0dXJuIHByYW5z
d2VyU3RyaW5nKCk7Ci0gICAgY2FzZSBSVENTZHBUeXBlOjpBbnN3ZXI6Ci0gICAgICAgIHJldHVy
biBhbnN3ZXJTdHJpbmcoKTsKLSAgICBjYXNlIFJUQ1NkcFR5cGU6OlJvbGxiYWNrOgotICAgICAg
ICByZXR1cm4gcm9sbGJhY2tTdHJpbmcoKTsKLSAgICB9Ci0KLSAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKLSAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKLX0KLQotYm9vbCBNZWRpYUVuZHBvaW50
U2Vzc2lvbkRlc2NyaXB0aW9uOjppc0xhdGVyVGhhbihNZWRpYUVuZHBvaW50U2Vzc2lvbkRlc2Ny
aXB0aW9uKiBvdGhlcikgY29uc3QKLXsKLSAgICByZXR1cm4gIW90aGVyIHx8IGNvbmZpZ3VyYXRp
b24oKS0+c2Vzc2lvblZlcnNpb24oKSA+IG90aGVyLT5jb25maWd1cmF0aW9uKCktPnNlc3Npb25W
ZXJzaW9uKCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJM
RShXRUJfUlRDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVh
bS9NZWRpYUVuZHBvaW50U2Vzc2lvbkRlc2NyaXB0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL21lZGlhc3RyZWFtL01lZGlhRW5kcG9pbnRTZXNzaW9uRGVzY3JpcHRpb24uaApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWQwNWM3MjkyY2VjMjkxZGU5ZjEzMTFmMTM4OGQzN2Ri
YWEzYzY3NS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhRW5kcG9pbnRTZXNzaW9uRGVz
Y3JpcHRpb24uaAorKysgL2Rldi9udWxsCkBAIC0xLDc0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTUsIDIwMTYgRXJpY3Nzb24gQUIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqICAgIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqICAg
IGRpc3RyaWJ1dGlvbi4KLSAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgRXJpY3Nzb24gbm9yIHRo
ZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0gKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSAqICAgIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0g
KiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3By
YWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUoV0VCX1JUQykKLQotI2luY2x1ZGUgIkV4Y2VwdGlvbk9y
LmgiCi0jaW5jbHVkZSAiUlRDU2Vzc2lvbkRlc2NyaXB0aW9uLmgiCi0jaW5jbHVkZSA8d3RmL1Jl
ZkNvdW50ZWQuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotY2xhc3MgTWVkaWFFbmRwb2ludFNlc3Npb25Db25maWd1cmF0aW9uOwotY2xhc3MgU0RQ
UHJvY2Vzc29yOwotCi1jbGFzcyBNZWRpYUVuZHBvaW50U2Vzc2lvbkRlc2NyaXB0aW9uIDogcHVi
bGljIFJlZkNvdW50ZWQ8TWVkaWFFbmRwb2ludFNlc3Npb25EZXNjcmlwdGlvbj4gewotcHVibGlj
OgotICAgIHN0YXRpYyBSZWY8TWVkaWFFbmRwb2ludFNlc3Npb25EZXNjcmlwdGlvbj4gY3JlYXRl
KFJUQ1NkcFR5cGUsIFJlZlB0cjxNZWRpYUVuZHBvaW50U2Vzc2lvbkNvbmZpZ3VyYXRpb24+JiYp
OwotICAgIHN0YXRpYyBFeGNlcHRpb25PcjxSZWY8TWVkaWFFbmRwb2ludFNlc3Npb25EZXNjcmlw
dGlvbj4+IGNyZWF0ZShSZWZQdHI8UlRDU2Vzc2lvbkRlc2NyaXB0aW9uPiYmLCBjb25zdCBTRFBQ
cm9jZXNzb3ImKTsKLSAgICB2aXJ0dWFsIH5NZWRpYUVuZHBvaW50U2Vzc2lvbkRlc2NyaXB0aW9u
KCkgeyB9IC8vIEZJWE1FOiBXaHkgaXMgdGhpcyB2aXJ0dWFsPyBUaGVyZSBhcmUgbm8gb3RoZXIg
dmlydHVhbCBmdW5jdGlvbnMgaW4gdGhpcyBjbGFzcy4KLQotICAgIFJlZlB0cjxSVENTZXNzaW9u
RGVzY3JpcHRpb24+IHRvUlRDU2Vzc2lvbkRlc2NyaXB0aW9uKGNvbnN0IFNEUFByb2Nlc3NvciYp
IGNvbnN0OwotCi0gICAgUlRDU2RwVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9
Ci0gICAgY29uc3QgU3RyaW5nJiB0eXBlU3RyaW5nKCkgY29uc3Q7Ci0gICAgTWVkaWFFbmRwb2lu
dFNlc3Npb25Db25maWd1cmF0aW9uKiBjb25maWd1cmF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9j
b25maWd1cmF0aW9uLmdldCgpOyB9Ci0KLSAgICBib29sIGlzTGF0ZXJUaGFuKE1lZGlhRW5kcG9p
bnRTZXNzaW9uRGVzY3JpcHRpb24qIG90aGVyKSBjb25zdDsKLQotcHJpdmF0ZToKLSAgICBNZWRp
YUVuZHBvaW50U2Vzc2lvbkRlc2NyaXB0aW9uKFJUQ1NkcFR5cGUgdHlwZSwgUmVmUHRyPE1lZGlh
RW5kcG9pbnRTZXNzaW9uQ29uZmlndXJhdGlvbj4mJiBjb25maWd1cmF0aW9uLCBSZWZQdHI8UlRD
U2Vzc2lvbkRlc2NyaXB0aW9uPiYmIHJ0Y0Rlc2NyaXB0aW9uKQotICAgICAgICA6IG1fdHlwZSh0
eXBlKQotICAgICAgICAsIG1fY29uZmlndXJhdGlvbihjb25maWd1cmF0aW9uKQotICAgICAgICAs
IG1fcnRjRGVzY3JpcHRpb24oV1RGTW92ZShydGNEZXNjcmlwdGlvbikpCi0gICAgeyB9Ci0KLSAg
ICBSVENTZHBUeXBlIG1fdHlwZTsKLSAgICBSZWZQdHI8TWVkaWFFbmRwb2ludFNlc3Npb25Db25m
aWd1cmF0aW9uPiBtX2NvbmZpZ3VyYXRpb247Ci0KLSAgICBSZWZQdHI8UlRDU2Vzc2lvbkRlc2Ny
aXB0aW9uPiBtX3J0Y0Rlc2NyaXB0aW9uOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQot
Ci0jZW5kaWYgLy8gRU5BQkxFKFdFQl9SVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL21lZGlhc3RyZWFtL1BlZXJDb25uZWN0aW9uQmFja2VuZC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1BlZXJDb25uZWN0aW9uQmFja2VuZC5jcHAKaW5kZXgg
M2YyYjk1ZjExOTdlMjNiZTM4M2E0ZjY5MTU5YzJmMGU5OGI1MmNjOS4uMmFkODRiZDk4MjU4Zjdj
Y2Y2ZTU5Y2U1YTIyNjJkNjFlYTUzMGU1OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9tZWRpYXN0cmVhbS9QZWVyQ29ubmVjdGlvbkJhY2tlbmQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUGVlckNvbm5lY3Rpb25CYWNrZW5kLmNwcApAQCAt
NDYsNiArNDYsMTUgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2UgUEFM
OwogCisjaWYgIVVTRShMSUJXRUJSVEMpCitzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPFBlZXJDb25u
ZWN0aW9uQmFja2VuZD4gY3JlYXRlTm9QZWVyQ29ubmVjdGlvbkJhY2tlbmQoUlRDUGVlckNvbm5l
Y3Rpb24mKQoreworICAgIHJldHVybiBudWxscHRyOworfQorCitDcmVhdGVQZWVyQ29ubmVjdGlv
bkJhY2tlbmQgUGVlckNvbm5lY3Rpb25CYWNrZW5kOjpjcmVhdGUgPSBjcmVhdGVOb1BlZXJDb25u
ZWN0aW9uQmFja2VuZDsKKyNlbmRpZgorCiBQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OlBlZXJDb25u
ZWN0aW9uQmFja2VuZChSVENQZWVyQ29ubmVjdGlvbiYgcGVlckNvbm5lY3Rpb24pCiAgICAgOiBt
X3BlZXJDb25uZWN0aW9uKHBlZXJDb25uZWN0aW9uKQogI2lmICFSRUxFQVNFX0xPR19ESVNBQkxF
RApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9TRFBQcm9j
ZXNzb3IuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9TRFBQcm9jZXNz
b3IuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MTVjZjJmMjg4OGZmNzQwN2U1
YzY1ZGMyOGIzYmNkZDViMjc4NTEyLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vU0RQUHJvY2Vz
c29yLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDU2MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDE1LCAyMDE2IEVyaWNzc29uIEFCLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiAgICBpbiB0aGUgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiAg
ICBkaXN0cmlidXRpb24uCi0gKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIEVyaWNzc29uIG5vciB0
aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0gKiAgICBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dO
RVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQot
ICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNp
bmNsdWRlICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShXRUJfUlRDKQotI2luY2x1ZGUgIlNEUFBy
b2Nlc3Nvci5oIgotCi0jaW5jbHVkZSAiQ29tbW9uVk0uaCIKLSNpbmNsdWRlICJEb2N1bWVudC5o
IgotI2luY2x1ZGUgIkZyYW1lLmgiCi0jaW5jbHVkZSAiU0RQUHJvY2Vzc29yU2NyaXB0UmVzb3Vy
Y2UuaCIKLSNpbmNsdWRlICJTY3JpcHRDb250cm9sbGVyLmgiCi0jaW5jbHVkZSAiU2NyaXB0U291
cmNlQ29kZS5oIgotI2luY2x1ZGUgImluc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaCIKLSNpbmNs
dWRlIDxiaW5kaW5ncy9TY3JpcHRPYmplY3QuaD4KLSNpbmNsdWRlIDxydW50aW1lL0NhdGNoU2Nv
cGUuaD4KLSNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLQotdXNpbmcgbmFtZXNwYWNl
IEluc3BlY3RvcjsKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0jZGVmaW5lIFNUUklOR19GVU5D
VElPTihuYW1lKSBcCi0gICAgc3RhdGljIGNvbnN0IFN0cmluZyYgbmFtZSMjU3RyaW5nKCkgXAot
ICAgIHsgXAotICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgU3RyaW5nPiBuYW1l
KE1BS0VfU1RBVElDX1NUUklOR19JTVBMKCNuYW1lKSk7IFwKLSAgICAgICAgcmV0dXJuIG5hbWU7
IFwKLSAgICB9Ci0KLVNUUklOR19GVU5DVElPTihhZGRyZXNzKQotU1RSSU5HX0ZVTkNUSU9OKGFw
dCkKLVNUUklOR19GVU5DVElPTihidW5kbGVQb2xpY3kpCi1TVFJJTkdfRlVOQ1RJT04oY2FuZGlk
YXRlcykKLVNUUklOR19GVU5DVElPTihjY21maXIpCi1TVFJJTkdfRlVOQ1RJT04oY2hhbm5lbHMp
Ci1TVFJJTkdfRlVOQ1RJT04oY2xvY2tSYXRlKQotU1RSSU5HX0ZVTkNUSU9OKGNuYW1lKQotU1RS
SU5HX0ZVTkNUSU9OKGNvbXBvbmVudElkKQotU1RSSU5HX0ZVTkNUSU9OKGR0bHMpCi1TVFJJTkdf
RlVOQ1RJT04oZW5jb2RpbmdOYW1lKQotU1RSSU5HX0ZVTkNUSU9OKGZpbmdlcnByaW50KQotU1RS
SU5HX0ZVTkNUSU9OKGZpbmdlcnByaW50SGFzaEZ1bmN0aW9uKQotU1RSSU5HX0ZVTkNUSU9OKGZv
dW5kYXRpb24pCi1TVFJJTkdfRlVOQ1RJT04oaWNlKQotU1RSSU5HX0ZVTkNUSU9OKG1lZGlhRGVz
Y3JpcHRpb25zKQotU1RSSU5HX0ZVTkNUSU9OKG1lZGlhU3RyZWFtSWQpCi1TVFJJTkdfRlVOQ1RJ
T04obWVkaWFTdHJlYW1UcmFja0lkKQotU1RSSU5HX0ZVTkNUSU9OKG1pZCkKLVNUUklOR19GVU5D
VElPTihtb2RlKQotU1RSSU5HX0ZVTkNUSU9OKG11eCkKLVNUUklOR19GVU5DVElPTihuYWNrKQot
U1RSSU5HX0ZVTkNUSU9OKG5hY2twbGkpCi1TVFJJTkdfRlVOQ1RJT04ob3JpZ2luYXRvcikKLVNU
UklOR19GVU5DVElPTihwYWNrZXRpemF0aW9uTW9kZSkKLVNUUklOR19GVU5DVElPTihwYXJhbWV0
ZXJzKQotU1RSSU5HX0ZVTkNUSU9OKHBhc3N3b3JkKQotU1RSSU5HX0ZVTkNUSU9OKHBheWxvYWRz
KQotU1RSSU5HX0ZVTkNUSU9OKHBvcnQpCi1TVFJJTkdfRlVOQ1RJT04ocHJpb3JpdHkpCi1TVFJJ
TkdfRlVOQ1RJT04ocmVsYXRlZEFkZHJlc3MpCi1TVFJJTkdfRlVOQ1RJT04ocmVsYXRlZFBvcnQp
Ci1TVFJJTkdfRlVOQ1RJT04ocnRjcCkKLVNUUklOR19GVU5DVElPTihydGNwQWRkcmVzcykKLVNU
UklOR19GVU5DVElPTihydGNwUG9ydCkKLVNUUklOR19GVU5DVElPTihydHhUaW1lKQotU1RSSU5H
X0ZVTkNUSU9OKHNlc3Npb25JZCkKLVNUUklOR19GVU5DVElPTihzZXNzaW9uVmVyc2lvbikKLVNU
UklOR19GVU5DVElPTihzZXR1cCkKLVNUUklOR19GVU5DVElPTihzc3JjcykKLVNUUklOR19GVU5D
VElPTih0Y3BUeXBlKQotU1RSSU5HX0ZVTkNUSU9OKHRyYW5zcG9ydCkKLVNUUklOR19GVU5DVElP
Tih0eXBlKQotU1RSSU5HX0ZVTkNUSU9OKHVmcmFnKQotCi1TRFBQcm9jZXNzb3I6OlNEUFByb2Nl
c3NvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQotICAgIDogQ29udGV4dERlc3Ry
dWN0aW9uT2JzZXJ2ZXIoY29udGV4dCkKLXsKLX0KLQotLy8gTm90ZSB0aGF0IE1lZGlhRW5kcG9p
bnRTZXNzaW9uQ29uZmlndXJhdGlvbiBpcyBhICJmbGF0dGVyIiBzdHJ1Y3R1cmUgdGhhdCB0aGUg
SlNPTiByZXByZXNlbnRhdGlvbi4gRm9yCi0vLyBleGFtcGxlLCB0aGUgSlNPTiByZXByZXNlbnRh
dGlvbiBoYXMgYW4gImljZSIgb2JqZWN0IHdoaWNoIGNvbGxlY3RzIGEgc2V0IG9mIHByb3BlcnRp
ZXMgdW5kZXIgYQotLy8gbmFtZXNwYWNlLiBNZWRpYUVuZHBvaW50U2Vzc2lvbkNvbmZpZ3VyYXRp
b24gaGFzICJpY2UiLXByZWZpeGVzIG9uIHRoZSBjb3JyZXNwb25kaW5nIHByb3BlcnRpZXMuCi0K
LXN0YXRpYyBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBjcmVhdGVDYW5kaWRhdGVPYmplY3QoY29u
c3QgSWNlQ2FuZGlkYXRlJiBjYW5kaWRhdGUpCi17Ci0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gY2FuZGlkYXRlT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKLQotICAgIGNh
bmRpZGF0ZU9iamVjdC0+c2V0U3RyaW5nKHR5cGVTdHJpbmcoKSwgY2FuZGlkYXRlLnR5cGUpOwot
ICAgIGNhbmRpZGF0ZU9iamVjdC0+c2V0U3RyaW5nKGZvdW5kYXRpb25TdHJpbmcoKSwgY2FuZGlk
YXRlLmZvdW5kYXRpb24pOwotICAgIGNhbmRpZGF0ZU9iamVjdC0+c2V0SW50ZWdlcihjb21wb25l
bnRJZFN0cmluZygpLCBjYW5kaWRhdGUuY29tcG9uZW50SWQpOwotICAgIGNhbmRpZGF0ZU9iamVj
dC0+c2V0U3RyaW5nKHRyYW5zcG9ydFN0cmluZygpLCBjYW5kaWRhdGUudHJhbnNwb3J0KTsKLSAg
ICBjYW5kaWRhdGVPYmplY3QtPnNldEludGVnZXIocHJpb3JpdHlTdHJpbmcoKSwgY2FuZGlkYXRl
LnByaW9yaXR5KTsKLSAgICBjYW5kaWRhdGVPYmplY3QtPnNldFN0cmluZyhhZGRyZXNzU3RyaW5n
KCksIGNhbmRpZGF0ZS5hZGRyZXNzKTsKLSAgICBjYW5kaWRhdGVPYmplY3QtPnNldEludGVnZXIo
cG9ydFN0cmluZygpLCBjYW5kaWRhdGUucG9ydCk7Ci0gICAgaWYgKCFjYW5kaWRhdGUudGNwVHlw
ZS5pc0VtcHR5KCkpCi0gICAgICAgIGNhbmRpZGF0ZU9iamVjdC0+c2V0U3RyaW5nKHRjcFR5cGVT
dHJpbmcoKSwgY2FuZGlkYXRlLnRjcFR5cGUpOwotICAgIGlmIChjYW5kaWRhdGUudHlwZS5jb252
ZXJ0VG9BU0NJSVVwcGVyY2FzZSgpICE9ICJIT1NUIikgewotICAgICAgICBjYW5kaWRhdGVPYmpl
Y3QtPnNldFN0cmluZyhyZWxhdGVkQWRkcmVzc1N0cmluZygpLCBjYW5kaWRhdGUucmVsYXRlZEFk
ZHJlc3MpOwotICAgICAgICBjYW5kaWRhdGVPYmplY3QtPnNldEludGVnZXIocmVsYXRlZFBvcnRT
dHJpbmcoKSwgY2FuZGlkYXRlLnJlbGF0ZWRQb3J0KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gY2Fu
ZGlkYXRlT2JqZWN0OwotfQotCi1zdGF0aWMgSWNlQ2FuZGlkYXRlIGNyZWF0ZUNhbmRpZGF0ZShj
b25zdCBJbnNwZWN0b3JPYmplY3QmIGNhbmRpZGF0ZU9iamVjdCkKLXsKLSAgICBJY2VDYW5kaWRh
dGUgY2FuZGlkYXRlOwotICAgIFN0cmluZyBzdHJpbmdWYWx1ZTsKLSAgICB1bnNpZ25lZCBpbnRW
YWx1ZTsKLQotICAgIGlmIChjYW5kaWRhdGVPYmplY3QuZ2V0U3RyaW5nKHR5cGVTdHJpbmcoKSwg
c3RyaW5nVmFsdWUpKQotICAgICAgICBjYW5kaWRhdGUudHlwZSA9IHN0cmluZ1ZhbHVlOwotCi0g
ICAgaWYgKGNhbmRpZGF0ZU9iamVjdC5nZXRTdHJpbmcoZm91bmRhdGlvblN0cmluZygpLCBzdHJp
bmdWYWx1ZSkpCi0gICAgICAgIGNhbmRpZGF0ZS5mb3VuZGF0aW9uID0gc3RyaW5nVmFsdWU7Ci0K
LSAgICBpZiAoY2FuZGlkYXRlT2JqZWN0LmdldEludGVnZXIoY29tcG9uZW50SWRTdHJpbmcoKSwg
aW50VmFsdWUpKQotICAgICAgICBjYW5kaWRhdGUuY29tcG9uZW50SWQgPSBpbnRWYWx1ZTsKLQot
ICAgIGlmIChjYW5kaWRhdGVPYmplY3QuZ2V0U3RyaW5nKHRyYW5zcG9ydFN0cmluZygpLCBzdHJp
bmdWYWx1ZSkpCi0gICAgICAgIGNhbmRpZGF0ZS50cmFuc3BvcnQgPSBzdHJpbmdWYWx1ZTsKLQot
ICAgIGlmIChjYW5kaWRhdGVPYmplY3QuZ2V0SW50ZWdlcihwcmlvcml0eVN0cmluZygpLCBpbnRW
YWx1ZSkpCi0gICAgICAgIGNhbmRpZGF0ZS5wcmlvcml0eSA9IGludFZhbHVlOwotCi0gICAgaWYg
KGNhbmRpZGF0ZU9iamVjdC5nZXRTdHJpbmcoYWRkcmVzc1N0cmluZygpLCBzdHJpbmdWYWx1ZSkp
Ci0gICAgICAgIGNhbmRpZGF0ZS5hZGRyZXNzID0gc3RyaW5nVmFsdWU7Ci0KLSAgICBpZiAoY2Fu
ZGlkYXRlT2JqZWN0LmdldEludGVnZXIocG9ydFN0cmluZygpLCBpbnRWYWx1ZSkpCi0gICAgICAg
IGNhbmRpZGF0ZS5wb3J0ID0gaW50VmFsdWU7Ci0KLSAgICBpZiAoY2FuZGlkYXRlT2JqZWN0Lmdl
dFN0cmluZyh0Y3BUeXBlU3RyaW5nKCksIHN0cmluZ1ZhbHVlKSkKLSAgICAgICAgY2FuZGlkYXRl
LnRjcFR5cGUgPSBzdHJpbmdWYWx1ZTsKLQotICAgIGlmIChjYW5kaWRhdGVPYmplY3QuZ2V0U3Ry
aW5nKHJlbGF0ZWRBZGRyZXNzU3RyaW5nKCksIHN0cmluZ1ZhbHVlKSkKLSAgICAgICAgY2FuZGlk
YXRlLnJlbGF0ZWRBZGRyZXNzID0gc3RyaW5nVmFsdWU7Ci0KLSAgICBpZiAoY2FuZGlkYXRlT2Jq
ZWN0LmdldEludGVnZXIocmVsYXRlZFBvcnRTdHJpbmcoKSwgaW50VmFsdWUpKQotICAgICAgICBj
YW5kaWRhdGUucmVsYXRlZFBvcnQgPSBpbnRWYWx1ZTsKLQotICAgIHJldHVybiBjYW5kaWRhdGU7
Ci19Ci0KLXN0YXRpYyBSZWZQdHI8TWVkaWFFbmRwb2ludFNlc3Npb25Db25maWd1cmF0aW9uPiBj
b25maWd1cmF0aW9uRnJvbUpTT04oY29uc3QgU3RyaW5nJiBqc29uKQotewotICAgIFJlZlB0cjxJ
bnNwZWN0b3JWYWx1ZT4gdmFsdWU7Ci0gICAgaWYgKCFJbnNwZWN0b3JWYWx1ZTo6cGFyc2VKU09O
KGpzb24sIHZhbHVlKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiBvYmplY3Q7Ci0gICAgaWYgKCF2YWx1ZS0+YXNPYmplY3Qob2JqZWN0KSkK
LSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBSZWZQdHI8TWVkaWFFbmRwb2ludFNlc3Np
b25Db25maWd1cmF0aW9uPiBjb25maWd1cmF0aW9uID0gTWVkaWFFbmRwb2ludFNlc3Npb25Db25m
aWd1cmF0aW9uOjpjcmVhdGUoKTsKLQotICAgIFN0cmluZyBzdHJpbmdWYWx1ZTsKLSAgICB1bnNp
Z25lZCBpbnRWYWx1ZTsKLSAgICBib29sIGJvb2xWYWx1ZTsKLQotICAgIFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IG9yaWdpbmF0b3JPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwot
ICAgIGlmIChvYmplY3QtPmdldE9iamVjdChvcmlnaW5hdG9yU3RyaW5nKCksIG9yaWdpbmF0b3JP
YmplY3QpKSB7Ci0gICAgICAgIGlmIChvcmlnaW5hdG9yT2JqZWN0LT5nZXRTdHJpbmcoc2Vzc2lv
bklkU3RyaW5nKCksIHN0cmluZ1ZhbHVlKSkKLSAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24tPnNl
dFNlc3Npb25JZChzdHJpbmdWYWx1ZS50b0ludDY0KCkpOwotICAgICAgICBpZiAob3JpZ2luYXRv
ck9iamVjdC0+Z2V0SW50ZWdlcihzZXNzaW9uVmVyc2lvblN0cmluZygpLCBpbnRWYWx1ZSkpCi0g
ICAgICAgICAgICBjb25maWd1cmF0aW9uLT5zZXRTZXNzaW9uVmVyc2lvbihpbnRWYWx1ZSk7Ci0g
ICAgfQotCi0gICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBtZWRpYURlc2NyaXB0aW9uc0FycmF5
ID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwotICAgIG9iamVjdC0+Z2V0QXJyYXkobWVkaWFE
ZXNjcmlwdGlvbnNTdHJpbmcoKSwgbWVkaWFEZXNjcmlwdGlvbnNBcnJheSk7Ci0KLSAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbWVkaWFEZXNjcmlwdGlvbnNBcnJheS0+bGVuZ3RoKCk7ICsr
aSkgewotICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtZWRpYURlc2NyaXB0aW9uT2Jq
ZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKLSAgICAgICAgbWVkaWFEZXNjcmlwdGlv
bnNBcnJheS0+Z2V0KGkpLT5hc09iamVjdChtZWRpYURlc2NyaXB0aW9uT2JqZWN0KTsKLQotICAg
ICAgICBQZWVyTWVkaWFEZXNjcmlwdGlvbiBtZWRpYURlc2NyaXB0aW9uOwotCi0gICAgICAgIGlm
IChtZWRpYURlc2NyaXB0aW9uT2JqZWN0LT5nZXRTdHJpbmcodHlwZVN0cmluZygpLCBzdHJpbmdW
YWx1ZSkpCi0gICAgICAgICAgICBtZWRpYURlc2NyaXB0aW9uLnR5cGUgPSBzdHJpbmdWYWx1ZTsK
LQotICAgICAgICBpZiAobWVkaWFEZXNjcmlwdGlvbk9iamVjdC0+Z2V0SW50ZWdlcihwb3J0U3Ry
aW5nKCksIGludFZhbHVlKSkKLSAgICAgICAgICAgIG1lZGlhRGVzY3JpcHRpb24ucG9ydCA9IGlu
dFZhbHVlOwotCi0gICAgICAgIGlmIChtZWRpYURlc2NyaXB0aW9uT2JqZWN0LT5nZXRTdHJpbmco
YWRkcmVzc1N0cmluZygpLCBzdHJpbmdWYWx1ZSkpCi0gICAgICAgICAgICBtZWRpYURlc2NyaXB0
aW9uLmFkZHJlc3MgPSBzdHJpbmdWYWx1ZTsKLQotICAgICAgICBpZiAobWVkaWFEZXNjcmlwdGlv
bk9iamVjdC0+Z2V0U3RyaW5nKG1vZGVTdHJpbmcoKSwgc3RyaW5nVmFsdWUpKQotICAgICAgICAg
ICAgbWVkaWFEZXNjcmlwdGlvbi5tb2RlID0gc3RyaW5nVmFsdWU7Ci0KLSAgICAgICAgaWYgKG1l
ZGlhRGVzY3JpcHRpb25PYmplY3QtPmdldFN0cmluZyhtaWRTdHJpbmcoKSwgc3RyaW5nVmFsdWUp
KQotICAgICAgICAgICAgbWVkaWFEZXNjcmlwdGlvbi5taWQgPSBzdHJpbmdWYWx1ZTsKLQotICAg
ICAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHBheWxvYWRzQXJyYXkgPSBJbnNwZWN0b3JBcnJh
eTo6Y3JlYXRlKCk7Ci0gICAgICAgIG1lZGlhRGVzY3JpcHRpb25PYmplY3QtPmdldEFycmF5KHBh
eWxvYWRzU3RyaW5nKCksIHBheWxvYWRzQXJyYXkpOwotCi0gICAgICAgIGZvciAodW5zaWduZWQg
aiA9IDA7IGogPCBwYXlsb2Fkc0FycmF5LT5sZW5ndGgoKTsgKytqKSB7Ci0gICAgICAgICAgICBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXlsb2Fkc09iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6
Y3JlYXRlKCk7Ci0gICAgICAgICAgICBwYXlsb2Fkc0FycmF5LT5nZXQoaiktPmFzT2JqZWN0KHBh
eWxvYWRzT2JqZWN0KTsKLQotICAgICAgICAgICAgTWVkaWFQYXlsb2FkIHBheWxvYWQ7Ci0KLSAg
ICAgICAgICAgIGlmIChwYXlsb2Fkc09iamVjdC0+Z2V0SW50ZWdlcih0eXBlU3RyaW5nKCksIGlu
dFZhbHVlKSkKLSAgICAgICAgICAgICAgICBwYXlsb2FkLnR5cGUgPSBpbnRWYWx1ZTsKLQotICAg
ICAgICAgICAgaWYgKHBheWxvYWRzT2JqZWN0LT5nZXRTdHJpbmcoZW5jb2RpbmdOYW1lU3RyaW5n
KCksIHN0cmluZ1ZhbHVlKSkKLSAgICAgICAgICAgICAgICBwYXlsb2FkLmVuY29kaW5nTmFtZSA9
IHN0cmluZ1ZhbHVlOwotCi0gICAgICAgICAgICBpZiAocGF5bG9hZHNPYmplY3QtPmdldEludGVn
ZXIoY2xvY2tSYXRlU3RyaW5nKCksIGludFZhbHVlKSkKLSAgICAgICAgICAgICAgICBwYXlsb2Fk
LmNsb2NrUmF0ZSA9IGludFZhbHVlOwotCi0gICAgICAgICAgICBpZiAocGF5bG9hZHNPYmplY3Qt
PmdldEludGVnZXIoY2hhbm5lbHNTdHJpbmcoKSwgaW50VmFsdWUpKQotICAgICAgICAgICAgICAg
IHBheWxvYWQuY2hhbm5lbHMgPSBpbnRWYWx1ZTsKLQotICAgICAgICAgICAgaWYgKHBheWxvYWRz
T2JqZWN0LT5nZXRCb29sZWFuKGNjbWZpclN0cmluZygpLCBib29sVmFsdWUpKQotICAgICAgICAg
ICAgICAgIHBheWxvYWQuY2NtZmlyID0gYm9vbFZhbHVlOwotCi0gICAgICAgICAgICBpZiAocGF5
bG9hZHNPYmplY3QtPmdldEJvb2xlYW4obmFja3BsaVN0cmluZygpLCBib29sVmFsdWUpKQotICAg
ICAgICAgICAgICAgIHBheWxvYWQubmFja3BsaSA9IGJvb2xWYWx1ZTsKLQotICAgICAgICAgICAg
aWYgKHBheWxvYWRzT2JqZWN0LT5nZXRCb29sZWFuKG5hY2tTdHJpbmcoKSwgYm9vbFZhbHVlKSkK
LSAgICAgICAgICAgICAgICBwYXlsb2FkLm5hY2sgPSBib29sVmFsdWU7Ci0KLSAgICAgICAgICAg
IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtZXRlcnNPYmplY3QgPSBJbnNwZWN0b3JPYmpl
Y3Q6OmNyZWF0ZSgpOwotICAgICAgICAgICAgaWYgKHBheWxvYWRzT2JqZWN0LT5nZXRPYmplY3Qo
cGFyYW1ldGVyc1N0cmluZygpLCBwYXJhbWV0ZXJzT2JqZWN0KSkgewotICAgICAgICAgICAgICAg
IGlmIChwYXJhbWV0ZXJzT2JqZWN0LT5nZXRJbnRlZ2VyKHBhY2tldGl6YXRpb25Nb2RlU3RyaW5n
KCksIGludFZhbHVlKSkKLSAgICAgICAgICAgICAgICAgICAgcGF5bG9hZC5hZGRQYXJhbWV0ZXIo
InBhY2tldGl6YXRpb25Nb2RlIiwgaW50VmFsdWUpOwotCi0gICAgICAgICAgICAgICAgaWYgKHBh
cmFtZXRlcnNPYmplY3QtPmdldEludGVnZXIoYXB0U3RyaW5nKCksIGludFZhbHVlKSkKLSAgICAg
ICAgICAgICAgICAgICAgcGF5bG9hZC5hZGRQYXJhbWV0ZXIoImFwdCIsIGludFZhbHVlKTsKLQot
ICAgICAgICAgICAgICAgIGlmIChwYXJhbWV0ZXJzT2JqZWN0LT5nZXRJbnRlZ2VyKHJ0eFRpbWVT
dHJpbmcoKSwgaW50VmFsdWUpKQotICAgICAgICAgICAgICAgICAgICBwYXlsb2FkLmFkZFBhcmFt
ZXRlcigicnR4VGltZSIsIGludFZhbHVlKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
bWVkaWFEZXNjcmlwdGlvbi5hZGRQYXlsb2FkKFdURk1vdmUocGF5bG9hZCkpOwotICAgICAgICB9
Ci0KLSAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcnRjcE9iamVjdCA9IEluc3BlY3Rv
ck9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgICAgIGlmIChtZWRpYURlc2NyaXB0aW9uT2JqZWN0LT5n
ZXRPYmplY3QocnRjcFN0cmluZygpLCBydGNwT2JqZWN0KSkgewotICAgICAgICAgICAgaWYgKHJ0
Y3BPYmplY3QtPmdldEJvb2xlYW4obXV4U3RyaW5nKCksIGJvb2xWYWx1ZSkpCi0gICAgICAgICAg
ICAgICAgbWVkaWFEZXNjcmlwdGlvbi5ydGNwTXV4ID0gYm9vbFZhbHVlOwotCi0gICAgICAgICAg
ICBpZiAocnRjcE9iamVjdC0+Z2V0U3RyaW5nKHJ0Y3BBZGRyZXNzU3RyaW5nKCksIHN0cmluZ1Zh
bHVlKSkKLSAgICAgICAgICAgICAgICBtZWRpYURlc2NyaXB0aW9uLnJ0Y3BBZGRyZXNzID0gc3Ry
aW5nVmFsdWU7Ci0KLSAgICAgICAgICAgIGlmIChydGNwT2JqZWN0LT5nZXRJbnRlZ2VyKHJ0Y3BQ
b3J0U3RyaW5nKCksIGludFZhbHVlKSkKLSAgICAgICAgICAgICAgICBtZWRpYURlc2NyaXB0aW9u
LnJ0Y3BQb3J0ID0gaW50VmFsdWU7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobWVkaWFEZXNj
cmlwdGlvbk9iamVjdC0+Z2V0U3RyaW5nKG1lZGlhU3RyZWFtSWRTdHJpbmcoKSwgc3RyaW5nVmFs
dWUpKQotICAgICAgICAgICAgbWVkaWFEZXNjcmlwdGlvbi5tZWRpYVN0cmVhbUlkID0gc3RyaW5n
VmFsdWU7Ci0KLSAgICAgICAgaWYgKG1lZGlhRGVzY3JpcHRpb25PYmplY3QtPmdldFN0cmluZyht
ZWRpYVN0cmVhbVRyYWNrSWRTdHJpbmcoKSwgc3RyaW5nVmFsdWUpKQotICAgICAgICAgICAgbWVk
aWFEZXNjcmlwdGlvbi5tZWRpYVN0cmVhbVRyYWNrSWQgPSBzdHJpbmdWYWx1ZTsKLQotICAgICAg
ICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBkdGxzT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0Ojpj
cmVhdGUoKTsKLSAgICAgICAgaWYgKG1lZGlhRGVzY3JpcHRpb25PYmplY3QtPmdldE9iamVjdChk
dGxzU3RyaW5nKCksIGR0bHNPYmplY3QpKSB7Ci0gICAgICAgICAgICBpZiAoZHRsc09iamVjdC0+
Z2V0U3RyaW5nKHNldHVwU3RyaW5nKCksIHN0cmluZ1ZhbHVlKSkKLSAgICAgICAgICAgICAgICBt
ZWRpYURlc2NyaXB0aW9uLmR0bHNTZXR1cCA9IHN0cmluZ1ZhbHVlOwotCi0gICAgICAgICAgICBp
ZiAoZHRsc09iamVjdC0+Z2V0U3RyaW5nKGZpbmdlcnByaW50SGFzaEZ1bmN0aW9uU3RyaW5nKCks
IHN0cmluZ1ZhbHVlKSkKLSAgICAgICAgICAgICAgICBtZWRpYURlc2NyaXB0aW9uLmR0bHNGaW5n
ZXJwcmludEhhc2hGdW5jdGlvbiA9IHN0cmluZ1ZhbHVlOwotCi0gICAgICAgICAgICBpZiAoZHRs
c09iamVjdC0+Z2V0U3RyaW5nKGZpbmdlcnByaW50U3RyaW5nKCksIHN0cmluZ1ZhbHVlKSkKLSAg
ICAgICAgICAgICAgICBtZWRpYURlc2NyaXB0aW9uLmR0bHNGaW5nZXJwcmludCA9IHN0cmluZ1Zh
bHVlOwotICAgICAgICB9Ci0KLSAgICAgICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBzc3Jjc0Fy
cmF5ID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwotICAgICAgICBtZWRpYURlc2NyaXB0aW9u
T2JqZWN0LT5nZXRBcnJheShzc3Jjc1N0cmluZygpLCBzc3Jjc0FycmF5KTsKLQotICAgICAgICBm
b3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgc3NyY3NBcnJheS0+bGVuZ3RoKCk7ICsraikgewotICAg
ICAgICAgICAgc3NyY3NBcnJheS0+Z2V0KGopLT5hc0ludGVnZXIoaW50VmFsdWUpOwotICAgICAg
ICAgICAgbWVkaWFEZXNjcmlwdGlvbi5hZGRTc3JjKGludFZhbHVlKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIGlmIChtZWRpYURlc2NyaXB0aW9uT2JqZWN0LT5nZXRTdHJpbmcoY25hbWVTdHJpbmco
KSwgc3RyaW5nVmFsdWUpKQotICAgICAgICAgICAgbWVkaWFEZXNjcmlwdGlvbi5jbmFtZSA9IHN0
cmluZ1ZhbHVlOwotCi0gICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGljZU9iamVjdCA9
IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgICAgIGlmIChtZWRpYURlc2NyaXB0aW9u
T2JqZWN0LT5nZXRPYmplY3QoaWNlU3RyaW5nKCksIGljZU9iamVjdCkpIHsKLSAgICAgICAgICAg
IGlmIChpY2VPYmplY3QtPmdldFN0cmluZyh1ZnJhZ1N0cmluZygpLCBzdHJpbmdWYWx1ZSkpCi0g
ICAgICAgICAgICAgICAgbWVkaWFEZXNjcmlwdGlvbi5pY2VVZnJhZyA9IHN0cmluZ1ZhbHVlOwot
Ci0gICAgICAgICAgICBpZiAoaWNlT2JqZWN0LT5nZXRTdHJpbmcocGFzc3dvcmRTdHJpbmcoKSwg
c3RyaW5nVmFsdWUpKQotICAgICAgICAgICAgICAgIG1lZGlhRGVzY3JpcHRpb24uaWNlUGFzc3dv
cmQgPSBzdHJpbmdWYWx1ZTsKLQotICAgICAgICAgICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBj
YW5kaWRhdGVzQXJyYXkgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7Ci0gICAgICAgICAgICBp
Y2VPYmplY3QtPmdldEFycmF5KGNhbmRpZGF0ZXNTdHJpbmcoKSwgY2FuZGlkYXRlc0FycmF5KTsK
LQotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IGNhbmRpZGF0ZXNBcnJheS0+
bGVuZ3RoKCk7ICsraikgewotICAgICAgICAgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IGNhbmRpZGF0ZU9iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgICAgICAg
ICAgICAgY2FuZGlkYXRlc0FycmF5LT5nZXQoaiktPmFzT2JqZWN0KGNhbmRpZGF0ZU9iamVjdCk7
Ci0KLSAgICAgICAgICAgICAgICBtZWRpYURlc2NyaXB0aW9uLmFkZEljZUNhbmRpZGF0ZShjcmVh
dGVDYW5kaWRhdGUoKmNhbmRpZGF0ZU9iamVjdCkpOwotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0KLSAgICAgICAgY29uZmlndXJhdGlvbi0+YWRkTWVkaWFEZXNjcmlwdGlvbihXVEZNb3ZlKG1l
ZGlhRGVzY3JpcHRpb24pKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gY29uZmlndXJhdGlvbjsKLX0K
LQotc3RhdGljIHN0ZDo6b3B0aW9uYWw8SWNlQ2FuZGlkYXRlPiBpY2VDYW5kaWRhdGVGcm9tSlNP
Tihjb25zdCBTdHJpbmcmIGpzb24pCi17Ci0gICAgUmVmUHRyPEluc3BlY3RvclZhbHVlPiB2YWx1
ZTsKLSAgICBpZiAoIUluc3BlY3RvclZhbHVlOjpwYXJzZUpTT04oanNvbiwgdmFsdWUpKQotICAg
ICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotCi0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
Y2FuZGlkYXRlT2JqZWN0OwotICAgIGlmICghdmFsdWUtPmFzT2JqZWN0KGNhbmRpZGF0ZU9iamVj
dCkpCi0gICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICByZXR1cm4gY3JlYXRlQ2Fu
ZGlkYXRlKCpjYW5kaWRhdGVPYmplY3QpOwotfQotCi1zdGF0aWMgU3RyaW5nIGdldEJ1bmRsZVBv
bGljeU5hbWUoY29uc3QgUGVlckNvbm5lY3Rpb25TdGF0ZXM6OkJ1bmRsZVBvbGljeSBidW5kbGVQ
b2xpY3kpCi17Ci0gICAgc3dpdGNoIChidW5kbGVQb2xpY3kpIHsKLSAgICBjYXNlIFBlZXJDb25u
ZWN0aW9uU3RhdGVzOjpCdW5kbGVQb2xpY3k6Ok1heENvbXBhdDoKLSAgICAgICAgcmV0dXJuICJt
YXgtY29tcGF0IjsKLSAgICBjYXNlIFBlZXJDb25uZWN0aW9uU3RhdGVzOjpCdW5kbGVQb2xpY3k6
Ok1heEJ1bmRsZToKLSAgICAgICAgcmV0dXJuICJtYXgtYnVuZGxlIjsKLSAgICBjYXNlIFBlZXJD
b25uZWN0aW9uU3RhdGVzOjpCdW5kbGVQb2xpY3k6OkJhbGFuY2VkOgotICAgIGRlZmF1bHQ6Ci0g
ICAgICAgIHJldHVybiAiYmFsYW5jZWQiOwotICAgIH07Ci19Ci0KLXN0YXRpYyBTdHJpbmcgY29u
ZmlndXJhdGlvblRvSlNPTihjb25zdCBNZWRpYUVuZHBvaW50U2Vzc2lvbkNvbmZpZ3VyYXRpb24m
IGNvbmZpZ3VyYXRpb24pCi17Ci0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gb2JqZWN0ID0g
SW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKLSAgICBvYmplY3QtPnNldFN0cmluZyhidW5kbGVQ
b2xpY3lTdHJpbmcoKSwgZ2V0QnVuZGxlUG9saWN5TmFtZShjb25maWd1cmF0aW9uLmJ1bmRsZVBv
bGljeSgpKSk7Ci0KLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBvcmlnaW5hdG9yT2JqZWN0
ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKLSAgICBvcmlnaW5hdG9yT2JqZWN0LT5zZXRT
dHJpbmcoc2Vzc2lvbklkU3RyaW5nKCksIFN0cmluZzo6bnVtYmVyKGNvbmZpZ3VyYXRpb24uc2Vz
c2lvbklkKCkpKTsKLSAgICBvcmlnaW5hdG9yT2JqZWN0LT5zZXRJbnRlZ2VyKHNlc3Npb25WZXJz
aW9uU3RyaW5nKCksIGNvbmZpZ3VyYXRpb24uc2Vzc2lvblZlcnNpb24oKSk7Ci0gICAgb2JqZWN0
LT5zZXRPYmplY3Qob3JpZ2luYXRvclN0cmluZygpLCBvcmlnaW5hdG9yT2JqZWN0KTsKLQotICAg
IFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gbWVkaWFEZXNjcmlwdGlvbnNBcnJheSA9IEluc3BlY3Rv
ckFycmF5OjpjcmVhdGUoKTsKLQotICAgIGZvciAoY29uc3QgYXV0byYgbWVkaWFEZXNjcmlwdGlv
biA6IGNvbmZpZ3VyYXRpb24ubWVkaWFEZXNjcmlwdGlvbnMoKSkgewotICAgICAgICBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiBtZWRpYURlc2NyaXB0aW9uT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0
OjpjcmVhdGUoKTsKLQotICAgICAgICBtZWRpYURlc2NyaXB0aW9uT2JqZWN0LT5zZXRTdHJpbmco
dHlwZVN0cmluZygpLCBtZWRpYURlc2NyaXB0aW9uLnR5cGUpOwotICAgICAgICBtZWRpYURlc2Ny
aXB0aW9uT2JqZWN0LT5zZXRJbnRlZ2VyKHBvcnRTdHJpbmcoKSwgbWVkaWFEZXNjcmlwdGlvbi5w
b3J0KTsKLSAgICAgICAgbWVkaWFEZXNjcmlwdGlvbk9iamVjdC0+c2V0U3RyaW5nKGFkZHJlc3NT
dHJpbmcoKSwgbWVkaWFEZXNjcmlwdGlvbi5hZGRyZXNzKTsKLSAgICAgICAgbWVkaWFEZXNjcmlw
dGlvbk9iamVjdC0+c2V0U3RyaW5nKG1vZGVTdHJpbmcoKSwgbWVkaWFEZXNjcmlwdGlvbi5tb2Rl
KTsKLSAgICAgICAgbWVkaWFEZXNjcmlwdGlvbk9iamVjdC0+c2V0U3RyaW5nKG1pZFN0cmluZygp
LCBtZWRpYURlc2NyaXB0aW9uLm1pZCk7Ci0KLSAgICAgICAgUmVmUHRyPEluc3BlY3RvckFycmF5
PiBwYXlsb2Fkc0FycmF5ID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwotCi0gICAgICAgIGZv
ciAoYXV0byYgcGF5bG9hZCA6IG1lZGlhRGVzY3JpcHRpb24ucGF5bG9hZHMpIHsKLSAgICAgICAg
ICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBheWxvYWRPYmplY3QgPSBJbnNwZWN0b3JPYmpl
Y3Q6OmNyZWF0ZSgpOwotCi0gICAgICAgICAgICBwYXlsb2FkT2JqZWN0LT5zZXRJbnRlZ2VyKHR5
cGVTdHJpbmcoKSwgcGF5bG9hZC50eXBlKTsKLSAgICAgICAgICAgIHBheWxvYWRPYmplY3QtPnNl
dFN0cmluZyhlbmNvZGluZ05hbWVTdHJpbmcoKSwgcGF5bG9hZC5lbmNvZGluZ05hbWUpOwotICAg
ICAgICAgICAgcGF5bG9hZE9iamVjdC0+c2V0SW50ZWdlcihjbG9ja1JhdGVTdHJpbmcoKSwgcGF5
bG9hZC5jbG9ja1JhdGUpOwotICAgICAgICAgICAgcGF5bG9hZE9iamVjdC0+c2V0SW50ZWdlcihj
aGFubmVsc1N0cmluZygpLCBwYXlsb2FkLmNoYW5uZWxzKTsKLSAgICAgICAgICAgIHBheWxvYWRP
YmplY3QtPnNldEJvb2xlYW4oY2NtZmlyU3RyaW5nKCksIHBheWxvYWQuY2NtZmlyKTsKLSAgICAg
ICAgICAgIHBheWxvYWRPYmplY3QtPnNldEJvb2xlYW4obmFja3BsaVN0cmluZygpLCBwYXlsb2Fk
Lm5hY2twbGkpOwotICAgICAgICAgICAgcGF5bG9hZE9iamVjdC0+c2V0Qm9vbGVhbihuYWNrU3Ry
aW5nKCksIHBheWxvYWQubmFjayk7Ci0KLSAgICAgICAgICAgIGlmICghcGF5bG9hZC5wYXJhbWV0
ZXJzLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IHBhcmFtZXRlcnNPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwotCi0gICAgICAg
ICAgICAgICAgZm9yIChhdXRvJiBuYW1lIDogcGF5bG9hZC5wYXJhbWV0ZXJzLmtleXMoKSkKLSAg
ICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyc09iamVjdC0+c2V0SW50ZWdlcihuYW1lLCBwYXls
b2FkLnBhcmFtZXRlcnMuZ2V0KG5hbWUpKTsKLQotICAgICAgICAgICAgICAgIHBheWxvYWRPYmpl
Y3QtPnNldE9iamVjdChwYXJhbWV0ZXJzU3RyaW5nKCksIHBhcmFtZXRlcnNPYmplY3QpOwotICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICBwYXlsb2Fkc0FycmF5LT5wdXNoT2JqZWN0KHBheWxv
YWRPYmplY3QpOwotICAgICAgICB9Ci0gICAgICAgIG1lZGlhRGVzY3JpcHRpb25PYmplY3QtPnNl
dEFycmF5KHBheWxvYWRzU3RyaW5nKCksIHBheWxvYWRzQXJyYXkpOwotCi0gICAgICAgIFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IHJ0Y3BPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgp
OwotICAgICAgICBydGNwT2JqZWN0LT5zZXRCb29sZWFuKG11eFN0cmluZygpLCBtZWRpYURlc2Ny
aXB0aW9uLnJ0Y3BNdXgpOwotICAgICAgICBydGNwT2JqZWN0LT5zZXRTdHJpbmcoYWRkcmVzc1N0
cmluZygpLCBtZWRpYURlc2NyaXB0aW9uLnJ0Y3BBZGRyZXNzKTsKLSAgICAgICAgcnRjcE9iamVj
dC0+c2V0SW50ZWdlcihwb3J0U3RyaW5nKCksIG1lZGlhRGVzY3JpcHRpb24ucnRjcFBvcnQpOwot
ICAgICAgICBtZWRpYURlc2NyaXB0aW9uT2JqZWN0LT5zZXRPYmplY3QocnRjcFN0cmluZygpLCBy
dGNwT2JqZWN0KTsKLQotICAgICAgICBtZWRpYURlc2NyaXB0aW9uT2JqZWN0LT5zZXRTdHJpbmco
bWVkaWFTdHJlYW1JZFN0cmluZygpLCBtZWRpYURlc2NyaXB0aW9uLm1lZGlhU3RyZWFtSWQpOwot
ICAgICAgICBtZWRpYURlc2NyaXB0aW9uT2JqZWN0LT5zZXRTdHJpbmcobWVkaWFTdHJlYW1UcmFj
a0lkU3RyaW5nKCksIG1lZGlhRGVzY3JpcHRpb24ubWVkaWFTdHJlYW1UcmFja0lkKTsKLQotICAg
ICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBkdGxzT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0
OjpjcmVhdGUoKTsKLSAgICAgICAgZHRsc09iamVjdC0+c2V0U3RyaW5nKHNldHVwU3RyaW5nKCks
IG1lZGlhRGVzY3JpcHRpb24uZHRsc1NldHVwKTsKLSAgICAgICAgZHRsc09iamVjdC0+c2V0U3Ry
aW5nKGZpbmdlcnByaW50SGFzaEZ1bmN0aW9uU3RyaW5nKCksIG1lZGlhRGVzY3JpcHRpb24uZHRs
c0ZpbmdlcnByaW50SGFzaEZ1bmN0aW9uKTsKLSAgICAgICAgZHRsc09iamVjdC0+c2V0U3RyaW5n
KGZpbmdlcnByaW50U3RyaW5nKCksIG1lZGlhRGVzY3JpcHRpb24uZHRsc0ZpbmdlcnByaW50KTsK
LSAgICAgICAgbWVkaWFEZXNjcmlwdGlvbk9iamVjdC0+c2V0T2JqZWN0KGR0bHNTdHJpbmcoKSwg
ZHRsc09iamVjdCk7Ci0KLSAgICAgICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBzc3Jjc0FycmF5
ID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwotCi0gICAgICAgIGZvciAoYXV0byBzc3JjIDog
bWVkaWFEZXNjcmlwdGlvbi5zc3JjcykKLSAgICAgICAgICAgIHNzcmNzQXJyYXktPnB1c2hEb3Vi
bGUoc3NyYyk7Ci0gICAgICAgIG1lZGlhRGVzY3JpcHRpb25PYmplY3QtPnNldEFycmF5KHNzcmNz
U3RyaW5nKCksIHNzcmNzQXJyYXkpOwotCi0gICAgICAgIG1lZGlhRGVzY3JpcHRpb25PYmplY3Qt
PnNldFN0cmluZyhjbmFtZVN0cmluZygpLCBtZWRpYURlc2NyaXB0aW9uLmNuYW1lKTsKLQotICAg
ICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBpY2VPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6
OmNyZWF0ZSgpOwotICAgICAgICBpY2VPYmplY3QtPnNldFN0cmluZyh1ZnJhZ1N0cmluZygpLCBt
ZWRpYURlc2NyaXB0aW9uLmljZVVmcmFnKTsKLSAgICAgICAgaWNlT2JqZWN0LT5zZXRTdHJpbmco
cGFzc3dvcmRTdHJpbmcoKSwgbWVkaWFEZXNjcmlwdGlvbi5pY2VQYXNzd29yZCk7Ci0KLSAgICAg
ICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBjYW5kaWRhdGVzQXJyYXkgPSBJbnNwZWN0b3JBcnJh
eTo6Y3JlYXRlKCk7Ci0KLSAgICAgICAgZm9yIChhdXRvJiBjYW5kaWRhdGUgOiBtZWRpYURlc2Ny
aXB0aW9uLmljZUNhbmRpZGF0ZXMpCi0gICAgICAgICAgICBjYW5kaWRhdGVzQXJyYXktPnB1c2hP
YmplY3QoY3JlYXRlQ2FuZGlkYXRlT2JqZWN0KGNhbmRpZGF0ZSkpOwotCi0gICAgICAgIGljZU9i
amVjdC0+c2V0QXJyYXkoY2FuZGlkYXRlc1N0cmluZygpLCBjYW5kaWRhdGVzQXJyYXkpOwotICAg
ICAgICBtZWRpYURlc2NyaXB0aW9uT2JqZWN0LT5zZXRPYmplY3QoaWNlU3RyaW5nKCksIGljZU9i
amVjdCk7Ci0KLSAgICAgICAgbWVkaWFEZXNjcmlwdGlvbnNBcnJheS0+cHVzaE9iamVjdChtZWRp
YURlc2NyaXB0aW9uT2JqZWN0KTsKLSAgICB9Ci0gICAgb2JqZWN0LT5zZXRBcnJheShtZWRpYURl
c2NyaXB0aW9uc1N0cmluZygpLCBtZWRpYURlc2NyaXB0aW9uc0FycmF5KTsKLQotICAgIHJldHVy
biBvYmplY3QtPnRvSlNPTlN0cmluZygpOwotfQotCi1zdGF0aWMgU3RyaW5nIGljZUNhbmRpZGF0
ZVRvSlNPTihjb25zdCBJY2VDYW5kaWRhdGUmIGNhbmRpZGF0ZSkKLXsKLSAgICByZXR1cm4gY3Jl
YXRlQ2FuZGlkYXRlT2JqZWN0KGNhbmRpZGF0ZSktPnRvSlNPTlN0cmluZygpOwotfQotCi1TRFBQ
cm9jZXNzb3I6OlJlc3VsdCBTRFBQcm9jZXNzb3I6OmdlbmVyYXRlKGNvbnN0IE1lZGlhRW5kcG9p
bnRTZXNzaW9uQ29uZmlndXJhdGlvbiYgY29uZmlndXJhdGlvbiwgU3RyaW5nJiBvdXRTZHBTdHJp
bmcpIGNvbnN0Ci17Ci0gICAgU3RyaW5nIHNkcFN0cmluZzsKLSAgICBpZiAoIWNhbGxTY3JpcHQo
ImdlbmVyYXRlIiwgY29uZmlndXJhdGlvblRvSlNPTihjb25maWd1cmF0aW9uKSwgc2RwU3RyaW5n
KSkKLSAgICAgICAgcmV0dXJuIFJlc3VsdDo6SW50ZXJuYWxFcnJvcjsKLQotICAgIG91dFNkcFN0
cmluZyA9IHNkcFN0cmluZzsKLSAgICByZXR1cm4gUmVzdWx0OjpTdWNjZXNzOwotfQotCi1TRFBQ
cm9jZXNzb3I6OlJlc3VsdCBTRFBQcm9jZXNzb3I6OnBhcnNlKGNvbnN0IFN0cmluZyYgc2RwLCBS
ZWZQdHI8TWVkaWFFbmRwb2ludFNlc3Npb25Db25maWd1cmF0aW9uPiYgb3V0Q29uZmlndXJhdGlv
bikgY29uc3QKLXsKLSAgICBTdHJpbmcgc2NyaXB0T3V0cHV0OwotICAgIGlmICghY2FsbFNjcmlw
dCgicGFyc2UiLCBzZHAsIHNjcmlwdE91dHB1dCkpCi0gICAgICAgIHJldHVybiBSZXN1bHQ6Oklu
dGVybmFsRXJyb3I7Ci0KLSAgICBpZiAoc2NyaXB0T3V0cHV0ID09ICJQYXJzZUVycm9yIikKLSAg
ICAgICAgcmV0dXJuIFJlc3VsdDo6UGFyc2VFcnJvcjsKLQotICAgIFJlZlB0cjxNZWRpYUVuZHBv
aW50U2Vzc2lvbkNvbmZpZ3VyYXRpb24+IGNvbmZpZ3VyYXRpb24gPSBjb25maWd1cmF0aW9uRnJv
bUpTT04oc2NyaXB0T3V0cHV0KTsKLSAgICBpZiAoIWNvbmZpZ3VyYXRpb24pCi0gICAgICAgIHJl
dHVybiBSZXN1bHQ6OkludGVybmFsRXJyb3I7Ci0KLSAgICBvdXRDb25maWd1cmF0aW9uID0gY29u
ZmlndXJhdGlvbjsKLSAgICByZXR1cm4gUmVzdWx0OjpTdWNjZXNzOwotfQotCi1TRFBQcm9jZXNz
b3I6OlJlc3VsdCBTRFBQcm9jZXNzb3I6OmdlbmVyYXRlQ2FuZGlkYXRlTGluZShjb25zdCBJY2VD
YW5kaWRhdGUmIGNhbmRpZGF0ZSwgU3RyaW5nJiBvdXRDYW5kaWRhdGVMaW5lKSBjb25zdAotewot
ICAgIFN0cmluZyBjYW5kaWRhdGVMaW5lOwotICAgIGlmICghY2FsbFNjcmlwdCgiZ2VuZXJhdGVD
YW5kaWRhdGVMaW5lIiwgaWNlQ2FuZGlkYXRlVG9KU09OKGNhbmRpZGF0ZSksIGNhbmRpZGF0ZUxp
bmUpKQotICAgICAgICByZXR1cm4gUmVzdWx0OjpJbnRlcm5hbEVycm9yOwotCi0gICAgb3V0Q2Fu
ZGlkYXRlTGluZSA9IGNhbmRpZGF0ZUxpbmU7Ci0gICAgcmV0dXJuIFJlc3VsdDo6U3VjY2VzczsK
LX0KLQotU0RQUHJvY2Vzc29yOjpQYXJzaW5nUmVzdWx0IFNEUFByb2Nlc3Nvcjo6cGFyc2VDYW5k
aWRhdGVMaW5lKGNvbnN0IFN0cmluZyYgY2FuZGlkYXRlTGluZSkgY29uc3QKLXsKLSAgICBTdHJp
bmcgc2NyaXB0T3V0cHV0OwotICAgIGlmICghY2FsbFNjcmlwdCgicGFyc2VDYW5kaWRhdGVMaW5l
IiwgY2FuZGlkYXRlTGluZSwgc2NyaXB0T3V0cHV0KSkKLSAgICAgICAgcmV0dXJuIHsgUmVzdWx0
OjpJbnRlcm5hbEVycm9yIH07Ci0KLSAgICBpZiAoc2NyaXB0T3V0cHV0ID09ICJQYXJzZUVycm9y
IikKLSAgICAgICAgcmV0dXJuIHsgUmVzdWx0OjpQYXJzZUVycm9yIH07Ci0KLSAgICBhdXRvIGNh
bmRpZGF0ZSA9IGljZUNhbmRpZGF0ZUZyb21KU09OKHNjcmlwdE91dHB1dCk7Ci0gICAgaWYgKCFj
YW5kaWRhdGUpCi0gICAgICAgIHJldHVybiB7IFJlc3VsdDo6SW50ZXJuYWxFcnJvciB9OwotICAg
IHJldHVybiB7IFdURk1vdmUoY2FuZGlkYXRlLnZhbHVlKCkpIH07Ci19Ci0KLWJvb2wgU0RQUHJv
Y2Vzc29yOjpjYWxsU2NyaXB0KGNvbnN0IFN0cmluZyYgZnVuY3Rpb25OYW1lLCBjb25zdCBTdHJp
bmcmIGFyZ3VtZW50LCBTdHJpbmcmIG91dFJlc3VsdCkgY29uc3QKLXsKLSAgICBpZiAoIXNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgRG9jdW1l
bnQqIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQo
KSk7Ci0gICAgaWYgKCFkb2N1bWVudC0+ZnJhbWUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgaWYgKCFtX2lzb2xhdGVkV29ybGQpCi0gICAgICAgIG1faXNvbGF0ZWRXb3JsZCA9IERP
TVdyYXBwZXJXb3JsZDo6Y3JlYXRlKGNvbW1vblZNKCkpOwotCi0gICAgU2NyaXB0Q29udHJvbGxl
ciYgc2NyaXB0Q29udHJvbGxlciA9IGRvY3VtZW50LT5mcmFtZSgpLT5zY3JpcHQoKTsKLSAgICBK
U0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gSlNDOjpqc0Nhc3Q8SlNET01HbG9iYWxP
YmplY3QqPihzY3JpcHRDb250cm9sbGVyLmdsb2JhbE9iamVjdCgqbV9pc29sYXRlZFdvcmxkKSk7
Ci0gICAgSlNDOjpWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7Ci0gICAgSlNDOjpKU0xvY2tI
b2xkZXIgbG9jayh2bSk7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0p
OwotICAgIEpTQzo6RXhlY1N0YXRlKiBleGVjID0gZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7
Ci0KLSAgICBKU0M6OkpTVmFsdWUgcHJvYmVGdW5jdGlvblZhbHVlID0gZ2xvYmFsT2JqZWN0LT5n
ZXQoZXhlYywgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsICJnZW5lcmF0ZSIpKTsK
LSAgICBpZiAoIXByb2JlRnVuY3Rpb25WYWx1ZS5pc0Z1bmN0aW9uKCkpIHsKLSAgICAgICAgVVJM
IHNjcmlwdFVSTDsKLSAgICAgICAgc2NyaXB0Q29udHJvbGxlci5ldmFsdWF0ZUluV29ybGQoU2Ny
aXB0U291cmNlQ29kZShTRFBQcm9jZXNzb3JTY3JpcHRSZXNvdXJjZTo6c2NyaXB0U3RyaW5nKCks
IHNjcmlwdFVSTCksICptX2lzb2xhdGVkV29ybGQpOwotICAgICAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKSB7Ci0gICAgICAgICAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgSlNDOjpK
U1ZhbHVlIGZ1bmN0aW9uVmFsdWUgPSBnbG9iYWxPYmplY3QtPmdldChleGVjLCBKU0M6OklkZW50
aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgZnVuY3Rpb25OYW1lKSk7Ci0gICAgaWYgKCFmdW5jdGlv
blZhbHVlLmlzRnVuY3Rpb24oKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgSlNDOjpK
U09iamVjdCogZnVuY3Rpb24gPSBmdW5jdGlvblZhbHVlLnRvT2JqZWN0KGV4ZWMpOwotICAgIEpT
Qzo6Q2FsbERhdGEgY2FsbERhdGE7Ci0gICAgSlNDOjpDYWxsVHlwZSBjYWxsVHlwZSA9IGZ1bmN0
aW9uLT5tZXRob2RUYWJsZSh2bSktPmdldENhbGxEYXRhKGZ1bmN0aW9uLCBjYWxsRGF0YSk7Ci0g
ICAgaWYgKGNhbGxUeXBlID09IEpTQzo6Q2FsbFR5cGU6Ok5vbmUpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIEpTQzo6TWFya2VkQXJndW1lbnRCdWZmZXIgYXJnTGlzdDsKLSAgICBhcmdM
aXN0LmFwcGVuZChKU0M6OmpzU3RyaW5nKGV4ZWMsIGFyZ3VtZW50KSk7Ci0KLSAgICBKU0M6OkpT
VmFsdWUgcmVzdWx0ID0gSlNDOjpjYWxsKGV4ZWMsIGZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERh
dGEsIGdsb2JhbE9iamVjdCwgYXJnTGlzdCk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2Vw
dGlvbigpKSkgewotICAgICAgICBMT0dfRVJST1IoIlNEUFByb2Nlc3NvciBzY3JpcHQgdGhyZXcg
aW4gZnVuY3Rpb24gJXMiLCBmdW5jdGlvbk5hbWUuYXNjaWkoKS5kYXRhKCkpOwotICAgICAgICBz
Y29wZS5jbGVhckV4Y2VwdGlvbigpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0g
ICAgaWYgKCFyZXN1bHQuaXNTdHJpbmcoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
b3V0UmVzdWx0ID0gYXNTdHJpbmcocmVzdWx0KS0+dmFsdWUoZXhlYyk7Ci0gICAgcmV0dXJuIHRy
dWU7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShXRUJf
UlRDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9TRFBQ
cm9jZXNzb3IuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vU0RQUHJvY2Vz
c29yLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNhNjFjOWE5MmU0N2NlM2U5MDFl
YzM2MzFhNjhmNzdiMTJjOTAyYzQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9TRFBQcm9jZXNz
b3IuaAorKysgL2Rldi9udWxsCkBAIC0xLDc4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTUgRXJpY3Nzb24gQUIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqICAgIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqICAgIGRpc3RyaWJ1dGlv
bi4KLSAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgRXJpY3Nzb24gbm9yIHRoZSBuYW1lcyBvZiBp
dHMgY29udHJpYnV0b3JzCi0gKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSAqICAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJ
UyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAq
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0K
LSNpZiBFTkFCTEUoV0VCX1JUQykKLQotI2luY2x1ZGUgIkNvbnRleHREZXN0cnVjdGlvbk9ic2Vy
dmVyLmgiCi0jaW5jbHVkZSAiSWNlQ2FuZGlkYXRlLmgiCi0jaW5jbHVkZSAiTWVkaWFFbmRwb2lu
dFNlc3Npb25Db25maWd1cmF0aW9uLmgiCi0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotI2luY2x1
ZGUgPHd0Zi9WYXJpYW50Lmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgRE9NV3JhcHBlcldvcmxkOwotY2xhc3MgU2NyaXB0
RXhlY3V0aW9uQ29udGV4dDsKLQotY2xhc3MgU0RQUHJvY2Vzc29yIDogcHVibGljIENvbnRleHRE
ZXN0cnVjdGlvbk9ic2VydmVyIHsKLXB1YmxpYzoKLSAgICBlbnVtIGNsYXNzIFJlc3VsdCB7Ci0g
ICAgICAgIFN1Y2Nlc3MgPSAxLAotICAgICAgICBJbnRlcm5hbEVycm9yID0gMiwKLSAgICAgICAg
UGFyc2VFcnJvciA9IDMKLSAgICB9OwotCi0gICAgU0RQUHJvY2Vzc29yKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqKTsKLQotICAgIFJlc3VsdCBnZW5lcmF0ZShjb25zdCBNZWRpYUVuZHBvaW50U2Vz
c2lvbkNvbmZpZ3VyYXRpb24mLCBTdHJpbmcmIG91dFNkcFN0cmluZykgY29uc3Q7Ci0gICAgUmVz
dWx0IHBhcnNlKGNvbnN0IFN0cmluZyYgc2RwLCBSZWZQdHI8TWVkaWFFbmRwb2ludFNlc3Npb25D
b25maWd1cmF0aW9uPiYpIGNvbnN0OwotCi0gICAgUmVzdWx0IGdlbmVyYXRlQ2FuZGlkYXRlTGlu
ZShjb25zdCBJY2VDYW5kaWRhdGUmLCBTdHJpbmcmIG91dENhbmRpZGF0ZUxpbmUpIGNvbnN0Owot
Ci0gICAgc3RydWN0IFBhcnNpbmdSZXN1bHQgewotICAgICAgICBWYXJpYW50PEljZUNhbmRpZGF0
ZSwgUmVzdWx0PiByZXN1bHQ7Ci0KLSAgICAgICAgUmVzdWx0IHBhcnNpbmdTdGF0dXMoKSBjb25z
dCB7IHJldHVybiBXVEY6OmhvbGRzX2FsdGVybmF0aXZlPEljZUNhbmRpZGF0ZT4ocmVzdWx0KSA/
IFJlc3VsdDo6U3VjY2VzcyA6IFdURjo6Z2V0PFNEUFByb2Nlc3Nvcjo6UmVzdWx0PihyZXN1bHQp
OyB9Ci0gICAgICAgIEljZUNhbmRpZGF0ZSYgY2FuZGlkYXRlKCkgeyByZXR1cm4gV1RGOjpnZXQ8
SWNlQ2FuZGlkYXRlPihyZXN1bHQpOyB9Ci0gICAgfTsKLSAgICBQYXJzaW5nUmVzdWx0IHBhcnNl
Q2FuZGlkYXRlTGluZShjb25zdCBTdHJpbmcmIGNhbmRpZGF0ZUxpbmUpIGNvbnN0OwotCi1wcml2
YXRlOgotICAgIGJvb2wgY2FsbFNjcmlwdChjb25zdCBTdHJpbmcmIGZ1bmN0aW9uTmFtZSwgY29u
c3QgU3RyaW5nJiBhcmd1bWVudCwgU3RyaW5nJiBvdXRSZXN1bHQpIGNvbnN0OwotCi0gICAgbXV0
YWJsZSBSZWZQdHI8RE9NV3JhcHBlcldvcmxkPiBtX2lzb2xhdGVkV29ybGQ7Ci19OwotCi19IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoV0VCX1JUQykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vbGlid2VicnRjL0xpYldlYlJU
Q01lZGlhRW5kcG9pbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9s
aWJ3ZWJydGMvTGliV2ViUlRDTWVkaWFFbmRwb2ludC5jcHAKaW5kZXggNmViNGE3NDA0YzJkYjYy
ZmJjNzVkNWY2MzBiMGNhODFkYzMwY2ZkNy4uMjM4NTFmOTY3ZDFiZDg3NmZmZDFmMzk5M2M1NmVl
YzdmYzRlNmE4ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVh
bS9saWJ3ZWJydGMvTGliV2ViUlRDTWVkaWFFbmRwb2ludC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9saWJ3ZWJydGMvTGliV2ViUlRDTWVkaWFFbmRwb2ludC5j
cHAKQEAgLTgwLDcgKzgwLDYgQEAgYm9vbCBMaWJXZWJSVENNZWRpYUVuZHBvaW50OjpzZXRDb25m
aWd1cmF0aW9uKExpYldlYlJUQ1Byb3ZpZGVyJiBjbGllbnQsIHdlYnJ0YzoKICAgICByZXR1cm4g
bV9iYWNrZW5kLT5TZXRDb25maWd1cmF0aW9uKFdURk1vdmUoY29uZmlndXJhdGlvbikpOwogfQog
Ci0vLyBGSVhNRTogdW5pZnkgd2l0aCBNZWRpYUVuZHBvaW50U2Vzc2lvbkRlc2NyaXB0aW9uOjp0
eXBlU3RyaW5nKCkKIHN0YXRpYyBpbmxpbmUgY29uc3QgY2hhciogc2Vzc2lvbkRlc2NyaXB0aW9u
VHlwZShSVENTZHBUeXBlIHNkcFR5cGUpCiB7CiAgICAgc3dpdGNoIChzZHBUeXBlKSB7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2og
Yi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXgg
YjBlNzU0OTcwYjA0MGIzYzU1MGIwNzE3MDUwOTYxYmRkZDg3NmYyNS4uMzczOGEwZTdlNzQyN2Ji
ODJmMDJhZmI5NDQwNmUyZWUzMTIwMTg4NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTc5Myw2ICsxNzkzLDggQEAKIAkJNDFB
QkU2N0IxRDA1ODBEQjAwNkQ4NjJEIC8qIENyb3NzT3JpZ2luUHJlZmxpZ2h0Q2hlY2tlci5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDFBQkU2N0ExRDA1
ODBENTAwNkQ4NjJEIC8qIENyb3NzT3JpZ2luUHJlZmxpZ2h0Q2hlY2tlci5oICovOyB9OwogCQk0
MUFCRTY3QzFEMDU4MEUwMDA2RDg2MkQgLyogQ3Jvc3NPcmlnaW5QcmVmbGlnaHRDaGVja2VyLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxQUJFNjc5
MUQwNTgwRDUwMDZEODYyRCAvKiBDcm9zc09yaWdpblByZWZsaWdodENoZWNrZXIuY3BwICovOyB9
OwogCQk0MUFENzUzQTFDRUY2QkQxMDBBMzE0ODYgLyogRmV0Y2hPcHRpb25zLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MUFENzUzOTFDRUY2QkNFMDBB
MzE0ODYgLyogRmV0Y2hPcHRpb25zLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKKwkJNDFCMjhCMTQxRjg1MDFBNjAwRkI1MkFDIC8qIE1lZGlhRW5kcG9p
bnRDb25maWd1cmF0aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDQxQjI4QjEzMUY4NTAxQTQwMEZCNTJBQyAvKiBNZWRpYUVuZHBvaW50Q29uZmln
dXJhdGlvbi5jcHAgKi87IH07CisJCTQxQjI4QjE1MUY4NTAxRDMwMEZCNTJBQyAvKiBNZWRpYUVu
ZHBvaW50Q29uZmlndXJhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNDFCMjhCMTIxRjg1MDFBMzAwRkI1MkFDIC8qIE1lZGlhRW5kcG9pbnRDb25m
aWd1cmF0aW9uLmggKi87IH07CiAJCTQxQjJBNjI2MUVGMUJGNkQwMDJCOUQ3QSAvKiBXZWJBdWRp
b1NvdXJjZVByb3ZpZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA0MUIyQTYyNTFFRjFCRjYwMDAyQjlEN0EgLyogV2ViQXVkaW9Tb3VyY2VQcm92aWRl
ci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTQx
QjQ1OUVGMUY1NUVCRDEwMDAwRjZGRCAvKiBSZWFkYWJsZVN0cmVhbS5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MUI0NTlFRDFGNTVFQkM3MDAwMEY2
RkQgLyogUmVhZGFibGVTdHJlYW0uY3BwICovOyB9OwogCQk0MUJGNzAwQzBGRTg2RjQ5MDA1RThE
RUMgLyogTWVzc2FnZVBvcnRDaGFubmVsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA0MUJGNzAwQTBGRTg2RjQ5MDA1RThERUMgLyogTWVzc2FnZVBvcnRD
aGFubmVsLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
QEAgLTI3NzksOCArMjc4MSw2IEBACiAJCTVERkU4RjU2MEQxNjQ3N0IwMDc2RTkzNyAvKiBTY2hl
ZHVsZWRBY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQkNBMzc4QkEwRDE1RjY0MjAwQjc5M0Q2IC8qIFNjaGVkdWxlZEFjdGlvbi5jcHAgKi87
IH07CiAJCTVERkU4RjU3MEQxNjQ3N0MwMDc2RTkzNyAvKiBTY2hlZHVsZWRBY3Rpb24uaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDQTM3OEJCMEQxNUY2
NDIwMEI3OTNENiAvKiBTY2hlZHVsZWRBY3Rpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1REZFQkFCNzE4NTkyQjZEMDBDNzVCRUIgLyogV2Vi
S2l0QXZhaWxhYmlsaXR5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1REZFQkFCNjE4NTkyQjZEMDBDNzVCRUIgLyogV2ViS2l0QXZhaWxhYmlsaXR5Lmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJNUUxNkEy
RTQxQkZBNjUwQjAwMjlBMjFFIC8qIE1lZGlhRW5kcG9pbnRQZWVyQ29ubmVjdGlvbi5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUUxNkEyRTMxQkZBNjRG
QjAwMjlBMjFFIC8qIE1lZGlhRW5kcG9pbnRQZWVyQ29ubmVjdGlvbi5oICovOyB9OwotCQk1RTE2
QTJFNTFCRkE2NTBGMDAyOUEyMUUgLyogTWVkaWFFbmRwb2ludFBlZXJDb25uZWN0aW9uLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVFMTZBMkUyMUJG
QTY0RkIwMDI5QTIxRSAvKiBNZWRpYUVuZHBvaW50UGVlckNvbm5lY3Rpb24uY3BwICovOyB9Owog
CQk1RTJDNDM1MTFCQ0VFMkY2MDAwMUUyQkMgLyogUGVlckNvbm5lY3Rpb25CYWNrZW5kLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1RTJDNDM0RDFCQ0VF
MkU1MDAwMUUyQkMgLyogUGVlckNvbm5lY3Rpb25CYWNrZW5kLmggKi87IH07CiAJCTVFMkM0MzVG
MUJDRUUzMUUwMDAxRTJCQyAvKiBSVENSdHBTZW5kZXJSZWNlaXZlckJhc2UuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVFMkM0MzVEMUJDRUUzMEQwMDAx
RTJCQyAvKiBSVENSdHBTZW5kZXJSZWNlaXZlckJhc2UuaCAqLzsgfTsKIAkJNUUyQzQzNjAxQkNF
RTMyMzAwMDFFMkJDIC8qIFJUQ1J0cFNlbmRlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1RTJDNDM1OTFCQ0VFMzBEMDAwMUUyQkMgLyogUlRDUnRw
U2VuZGVyLmNwcCAqLzsgfTsKQEAgLTI4MDEsMjcgKzI4MDEsMTQgQEAKIAkJNUUyQzQzNzQxQkNG
MEQ3NTAwMDFFMkJFIC8qIEpTUlRDUnRwUGFyYW1ldGVycy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUUyQzQzNzAxQkNGMEQ2OTAwMDFFMkJFIC8qIEpT
UlRDUnRwUGFyYW1ldGVycy5oICovOyB9OwogCQk1RTJDNDM3QjFCQ0Y5QTU3MDAwMUUyQkMgLyog
UlRDUGVlckNvbm5lY3Rpb25CdWlsdGlucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNUUyQzQzNzYxQkNGOUEwQjAwMDFFMkJDIC8qIFJUQ1BlZXJDb25u
ZWN0aW9uQnVpbHRpbnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQk1RTJDNDM3QzFCQ0Y5QTg0MDAwMUUyQkMgLyogUlRDUGVlckNvbm5lY3Rpb25J
bnRlcm5hbHNCdWlsdGlucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNUUyQzQzNzkxQkNGOUEwQjAwMDFFMkJDIC8qIFJUQ1BlZXJDb25uZWN0aW9uSW50
ZXJuYWxzQnVpbHRpbnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwotCQk1RTRFQUIwNDFEMDcxNjZBMDAwNkExODQgLyogTWVkaWFFbmRwb2ludFNlc3Np
b25EZXNjcmlwdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNUU0RUFCMDMxRDA3MTY0QzAwMDZBMTg0IC8qIE1lZGlhRW5kcG9pbnRTZXNzaW9uRGVz
Y3JpcHRpb24uaCAqLzsgfTsKLQkJNUU0RUFCMDUxRDA3MTY2RTAwMDZBMTg0IC8qIE1lZGlhRW5k
cG9pbnRTZXNzaW9uRGVzY3JpcHRpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNUU0RUFCMDIxRDA3MTY0QzAwMDZBMTg0IC8qIE1lZGlhRW5kcG9p
bnRTZXNzaW9uRGVzY3JpcHRpb24uY3BwICovOyB9OwogCQk1RTVFMkIxMzFDRkMzRTcwMDAwQzBE
ODUgLyogUlRDUnRwVHJhbnNjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNUU1RTJCMTAxQ0ZDM0U0QjAwMEMwRDg1IC8qIFJUQ1J0cFRyYW5z
Y2VpdmVyLmNwcCAqLzsgfTsKIAkJNUU1RTJCMTQxQ0ZDM0U3NTAwMEMwRDg1IC8qIFJUQ1J0cFRy
YW5zY2VpdmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1RTVFMkIxMTFDRkMzRTRCMDAwQzBEODUgLyogUlRDUnRwVHJhbnNjZWl2ZXIuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQk1RUEzRDZERjFDODU5
RDdGMDAzMDBCQkIgLyogTW9ja01lZGlhRW5kcG9pbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVFQTNENkRFMUM4NTlENTMwMDMwMEJCQiAvKiBNb2Nr
TWVkaWFFbmRwb2ludC5oICovOyB9OwotCQk1RUEzRDZFMDFDODU5RDg0MDAzMDBCQkIgLyogTW9j
a01lZGlhRW5kcG9pbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNUVBM0Q2REQxQzg1OUQ1MzAwMzAwQkJCIC8qIE1vY2tNZWRpYUVuZHBvaW50LmNw
cCAqLzsgfTsKLQkJNUVBM0Q2RTMxQzg1OURDMTAwMzAwQkJCIC8qIFNEUFByb2Nlc3Nvci5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1RUEzRDZFMTFD
ODU5REFBMDAzMDBCQkIgLyogU0RQUHJvY2Vzc29yLmNwcCAqLzsgfTsKLQkJNUVBM0Q2RTQxQzg1
OURDMTAwMzAwQkJCIC8qIFNEUFByb2Nlc3Nvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNUVBM0Q2RTIxQzg1OURBQTAwMzAwQkJCIC8qIFNEUFByb2Nl
c3Nvci5oICovOyB9OwotCQk1RUEzRDZFNzFDODVBOURCMDAzMDBCQkIgLyogU0RQUHJvY2Vzc29y
U2NyaXB0UmVzb3VyY2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNUVBM0Q2RTUxQzg1QTlDMzAwMzAwQkJCIC8qIFNEUFByb2Nlc3NvclNjcmlwdFJl
c291cmNlLmNwcCAqLzsgfTsKLQkJNUVBM0Q2RTgxQzg1QTlEQjAwMzAwQkJCIC8qIFNEUFByb2Nl
c3NvclNjcmlwdFJlc291cmNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1RUEzRDZFNjFDODVBOUMzMDAzMDBCQkIgLyogU0RQUHJvY2Vzc29yU2NyaXB0
UmVzb3VyY2UuaCAqLzsgfTsKIAkJNUVBNzI1RDIxQUNBQkQ0NzAwRUFEMTdCIC8qIE1lZGlhRGV2
aWNlcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
RUE3MjVDRDFBQ0FCQ0Q5MDBFQUQxN0IgLyogTWVkaWFEZXZpY2VzLmNwcCAqLzsgfTsKIAkJNUVB
NzI1RDMxQUNBQkQ0NzAwRUFEMTdCIC8qIE1lZGlhRGV2aWNlcy5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUVBNzI1Q0UxQUNBQkNEOTAwRUFEMTdCIC8q
IE1lZGlhRGV2aWNlcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTVFQTcyNUQ1MUFDQUJENTcwMEVBRDE3QiAvKiBOYXZpZ2F0b3JNZWRpYURldmlj
ZXMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUVB
NzI1Q0ExQUNBQkNCNTAwRUFEMTdCIC8qIE5hdmlnYXRvck1lZGlhRGV2aWNlcy5jcHAgKi87IH07
CiAJCTVFQTcyNUQ2MUFDQUJENTcwMEVBRDE3QiAvKiBOYXZpZ2F0b3JNZWRpYURldmljZXMuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVFQTcyNUNCMUFD
QUJDQjUwMEVBRDE3QiAvKiBOYXZpZ2F0b3JNZWRpYURldmljZXMuaCAqLzsgfTsKIAkJNUVCQjg5
MzExQzc3NzdGRjAwQzY1RDQxIC8qIE1lZGlhUGF5bG9hZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUVCQjg5MkYxQzc3NzdEMDAwQzY1RDQxIC8qIE1l
ZGlhUGF5bG9hZC5oICovOyB9OwotCQk1RUJCODkzMjFDNzc3ODIzMDBDNjVENDEgLyogTWVkaWFF
bmRwb2ludFNlc3Npb25Db25maWd1cmF0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1RUJCODkyRTFDNzc3N0QwMDBDNjVENDEgLyogTWVkaWFFbmRw
b2ludFNlc3Npb25Db25maWd1cmF0aW9uLmggKi87IH07CiAJCTVFQkI4OTMzMUM3Nzc4MjkwMEM2
NUQ0MSAvKiBJY2VDYW5kaWRhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDVFQkI4OTMwMUM3Nzc3RTEwMEM2NUQ0MSAvKiBJY2VDYW5kaWRhdGUuaCAq
LzsgfTsKLQkJNUVCQjg5MzQxQzc3NzgyOTAwQzY1RDQxIC8qIE1lZGlhRW5kcG9pbnQuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUVCQjg5MkExQzc3
NzdEMDAwQzY1RDQxIC8qIE1lZGlhRW5kcG9pbnQuY3BwICovOyB9OwotCQk1RUJCODkzNTFDNzc3
ODI5MDBDNjVENDEgLyogTWVkaWFFbmRwb2ludC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNUVCQjg5MkIxQzc3NzdEMDAwQzY1RDQxIC8qIE1lZGlhRW5k
cG9pbnQuaCAqLzsgfTsKLQkJNUVCQjg5MzYxQzc3NzgyOTAwQzY1RDQxIC8qIE1lZGlhRW5kcG9p
bnRDb25maWd1cmF0aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDVFQkI4OTJDMUM3Nzc3RDAwMEM2NUQ0MSAvKiBNZWRpYUVuZHBvaW50Q29uZmln
dXJhdGlvbi5jcHAgKi87IH07Ci0JCTVFQkI4OTM3MUM3Nzc4MjkwMEM2NUQ0MSAvKiBNZWRpYUVu
ZHBvaW50Q29uZmlndXJhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNUVCQjg5MkQxQzc3NzdEMDAwQzY1RDQxIC8qIE1lZGlhRW5kcG9pbnRDb25m
aWd1cmF0aW9uLmggKi87IH07CiAJCTVFQkI4OTM5MUM3N0MzOTkwMEM2NUQ0MSAvKiBQZWVyTWVk
aWFEZXNjcmlwdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNUVCQjg5MzgxQzc3QkRBNDAwQzY1RDQxIC8qIFBlZXJNZWRpYURlc2NyaXB0aW9uLmgg
Ki87IH07CiAJCTVGMkRCQkU5MTc4RTNDODEwMDE0MTQ4NiAvKiBDZXJ0aWZpY2F0ZUluZm9NYWMu
bW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1RjJEQkJF
NzE3OEUzMzJEMDAxNDE0ODYgLyogQ2VydGlmaWNhdGVJbmZvTWFjLm1tICovOyB9OwogCQk1RkE5
MDRDQTE3OEU2MUY1MDA0QzhBMkQgLyogQ2VydGlmaWNhdGVJbmZvLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1RjJEQkJFODE3OEUzMzY5MDAxNDE0ODYg
LyogQ2VydGlmaWNhdGVJbmZvLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKQEAgLTYzOTAsNyArNjM3Nyw2IEBACiAJCUNEQUI2RDJFMTdDODE0RUUwMEM2
MEIzNCAvKiBKU01lZGlhQ29udHJvbHNIb3N0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBDREFCNkQyQzE3QzgxNEVFMDBDNjBCMzQgLyogSlNNZWRpYUNv
bnRyb2xzSG9zdC5oICovOyB9OwogCQlDREFCNkQzMTE3QzkyNTk1MDBDNjBCMzQgLyogVXNlckFn
ZW50U2NyaXB0cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQ0RBQjZEMkYxN0M5MjU5NTAwQzYwQjM0IC8qIFVzZXJBZ2VudFNjcmlwdHMuaCAqLzsgfTsK
IAkJQ0RBQjZEMzIxN0M5MjU5NTAwQzYwQjM0IC8qIFVzZXJBZ2VudFNjcmlwdHNEYXRhLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQUI2RDMwMTdD
OTI1OTUwMEM2MEIzNCAvKiBVc2VyQWdlbnRTY3JpcHRzRGF0YS5jcHAgKi87IH07Ci0JCUNEQUI2
RDMyMTdDOTI1OTUwMEM2MEIzNSAvKiBTRFBQcm9jZXNzb3JTY3JpcHRzRGF0YS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREFCNkQzMDE3QzkyNTk1
MDBDNjBCMzUgLyogU0RQUHJvY2Vzc29yU2NyaXB0c0RhdGEuY3BwICovOyB9OwogCQlDREFFOEMw
OTE3NDZCOTU3MDA1MzJENzggLyogUGxhdGZvcm1NZWRpYVNlc3Npb25NYW5hZ2VyLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQUU4QzA3MTc0NkI5
NTcwMDUzMkQ3OCAvKiBQbGF0Zm9ybU1lZGlhU2Vzc2lvbk1hbmFnZXIuY3BwICovOyB9OwogCQlD
REJFQUVBQzE5RDkyQjZDMDBCRUJBODggLyogTWVkaWFTZWxlY3Rpb25Hcm91cEFWRk9iakMubW0g
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREJFQUVBQTE5
RDkyQjZDMDBCRUJBODggLyogTWVkaWFTZWxlY3Rpb25Hcm91cEFWRk9iakMubW0gKi87IH07CiAJ
CUNEQkVBRUFEMTlEOTJCNkMwMEJFQkE4OCAvKiBNZWRpYVNlbGVjdGlvbkdyb3VwQVZGT2JqQy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RCRUFFQUIx
OUQ5MkI2QzAwQkVCQTg4IC8qIE1lZGlhU2VsZWN0aW9uR3JvdXBBVkZPYmpDLmggKi87IH07CkBA
IC05NjA2LDYgKzk1OTIsOCBAQAogCQk0MUFCRTY3OTFEMDU4MEQ1MDA2RDg2MkQgLyogQ3Jvc3NP
cmlnaW5QcmVmbGlnaHRDaGVja2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IENyb3NzT3JpZ2luUHJlZmxpZ2h0Q2hlY2tlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTQxQUJFNjdBMUQwNTgwRDUwMDZEODYyRCAvKiBDcm9zc09yaWdpblByZWZs
aWdodENoZWNrZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ3Jvc3NPcmln
aW5QcmVmbGlnaHRDaGVja2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxQUQ3
NTM5MUNFRjZCQ0UwMEEzMTQ4NiAvKiBGZXRjaE9wdGlvbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gRmV0Y2hPcHRpb25zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTQxQjI4QjEyMUY4NTAxQTMwMEZCNTJBQyAvKiBNZWRpYUVuZHBvaW50Q29uZmlndXJhdGlv
bi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNZWRpYUVuZHBvaW50Q29uZmln
dXJhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0MUIyOEIxMzFGODUwMUE0
MDBGQjUyQUMgLyogTWVkaWFFbmRwb2ludENvbmZpZ3VyYXRpb24uY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWVkaWFFbmRwb2ludENvbmZpZ3VyYXRpb24uY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MUIyQTYyNTFFRjFCRjYwMDAyQjlEN0EgLyog
V2ViQXVkaW9Tb3VyY2VQcm92aWRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJBdWRpb1NvdXJjZVBy
b3ZpZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxQjQ1OURBMUY0Q0FEQjkw
MDAwRjZGRCAvKiBSZWFkYWJsZVN0cmVhbS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBSZWFkYWJsZVN0cmVhbS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MUI0
NTlFRDFGNTVFQkM3MDAwMEY2RkQgLyogUmVhZGFibGVTdHJlYW0uY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVhZGFibGVTdHJlYW0uY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtMTA3MzQsOCArMTA3MjIsNiBAQAogCQk1REIxQkM2ODEwNzE1QTY0
MDBFRkFBNDkgLyogVHJhbnNmb3JtU291cmNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFRyYW5zZm9ybVNvdXJjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1
REIxQkM2OTEwNzE1QTY0MDBFRkFBNDkgLyogVHJhbnNmb3JtU291cmNlTGlieHNsdC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUcmFuc2Zvcm1Tb3VyY2VMaWJ4c2x0
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNURGRUJBQjYxODU5MkI2RDAwQzc1
QkVCIC8qIFdlYktpdEF2YWlsYWJpbGl0eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBXZWJLaXRBdmFpbGFiaWxpdHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
NUUxNkEyRTIxQkZBNjRGQjAwMjlBMjFFIC8qIE1lZGlhRW5kcG9pbnRQZWVyQ29ubmVjdGlvbi5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNZWRpYUVuZHBvaW50UGVl
ckNvbm5lY3Rpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1RTE2QTJFMzFC
RkE2NEZCMDAyOUEyMUUgLyogTWVkaWFFbmRwb2ludFBlZXJDb25uZWN0aW9uLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1lZGlhRW5kcG9pbnRQZWVyQ29ubmVjdGlvbi5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1RTJDNDM0RDFCQ0VFMkU1MDAwMUUyQkMgLyog
UGVlckNvbm5lY3Rpb25CYWNrZW5kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFBlZXJDb25uZWN0aW9uQmFja2VuZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1
RTJDNDM1NDFCQ0VFMzBEMDAwMUUyQkMgLyogUlRDUGVlckNvbm5lY3Rpb24uanMgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmphdmFzY3JpcHQ7IHBhdGggPSBSVENQZWVyQ29ubmVjdGlvbi5qczsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUUyQzQzNTUxQkNFRTMwRDAwMDFFMkJDIC8qIFJU
Q1BlZXJDb25uZWN0aW9uSW50ZXJuYWxzLmpzICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5qYXZhc2Ny
aXB0OyBwYXRoID0gUlRDUGVlckNvbm5lY3Rpb25JbnRlcm5hbHMuanM7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC0xMDc2MywyOSArMTA3NDksMTYgQEAKIAkJNUUyQzQzNzYxQkNGOUEw
QjAwMDFFMkJDIC8qIFJUQ1BlZXJDb25uZWN0aW9uQnVpbHRpbnMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gUlRDUGVlckNvbm5lY3Rpb25CdWlsdGlucy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk1RTJDNDM3ODFCQ0Y5QTBCMDAwMUUyQkMgLyogUlRDUGVlckNv
bm5lY3Rpb25JbnRlcm5hbHNCdWlsdGlucy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBSVENQZWVyQ29ubmVjdGlvbkludGVybmFsc0J1aWx0aW5zLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUUyQzQzNzkxQkNGOUEwQjAwMDFFMkJDIC8qIFJUQ1Bl
ZXJDb25uZWN0aW9uSW50ZXJuYWxzQnVpbHRpbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gUlRDUGVlckNvbm5lY3Rpb25JbnRlcm5hbHNCdWlsdGlucy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQk1RTRFQUIwMjFEMDcxNjRDMDAwNkExODQgLyogTWVkaWFFbmRw
b2ludFNlc3Npb25EZXNjcmlwdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBNZWRpYUVuZHBvaW50U2Vzc2lvbkRlc2NyaXB0aW9uLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJNUU0RUFCMDMxRDA3MTY0QzAwMDZBMTg0IC8qIE1lZGlhRW5kcG9p
bnRTZXNzaW9uRGVzY3JpcHRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
TWVkaWFFbmRwb2ludFNlc3Npb25EZXNjcmlwdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk1RTVFMkIxMDFDRkMzRTRCMDAwQzBEODUgLyogUlRDUnRwVHJhbnNjZWl2ZXIuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUlRDUnRwVHJhbnNjZWl2ZXIu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1RTVFMkIxMTFDRkMzRTRCMDAwQzBE
ODUgLyogUlRDUnRwVHJhbnNjZWl2ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gUlRDUnRwVHJhbnNjZWl2ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUU1
RTJCMTIxQ0ZDM0U0QjAwMEMwRDg1IC8qIFJUQ1J0cFRyYW5zY2VpdmVyLmlkbCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHRleHQ7IHBhdGggPSBSVENSdHBUcmFuc2NlaXZlci5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTVFNjY1MzA5MURBNDM3QkYwMEZERDg0QyAvKiBSVENJY2VUcmFuc3BvcnQuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUlRDSWNlVHJhbnNwb3J0Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTVFQTNENkREMUM4NTlENTMwMDMwMEJCQiAvKiBNb2Nr
TWVkaWFFbmRwb2ludC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBN
b2NrTWVkaWFFbmRwb2ludC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTVFQTNE
NkRFMUM4NTlENTMwMDMwMEJCQiAvKiBNb2NrTWVkaWFFbmRwb2ludC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBNb2NrTWVkaWFFbmRwb2ludC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQk1RUEzRDZFMTFDODU5REFBMDAzMDBCQkIgLyogU0RQUHJvY2Vzc29yLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNEUFByb2Nlc3Nvci5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTVFQTNENkUyMUM4NTlEQUEwMDMwMEJCQiAv
KiBTRFBQcm9jZXNzb3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU0RQUHJv
Y2Vzc29yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTVFQTNENkU1MUM4NUE5QzMw
MDMwMEJCQiAvKiBTRFBQcm9jZXNzb3JTY3JpcHRSZXNvdXJjZS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTRFBQcm9jZXNzb3JTY3JpcHRSZXNvdXJjZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTVFQTNENkU2MUM4NUE5QzMwMDMwMEJCQiAvKiBT
RFBQcm9jZXNzb3JTY3JpcHRSZXNvdXJjZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBTRFBQcm9jZXNzb3JTY3JpcHRSZXNvdXJjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk1RUE3MjVDQTFBQ0FCQ0I1MDBFQUQxN0IgLyogTmF2aWdhdG9yTWVkaWFEZXZpY2Vz
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE5hdmlnYXRvck1lZGlh
RGV2aWNlcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVFQTcyNUNCMUFDQUJD
QjUwMEVBRDE3QiAvKiBOYXZpZ2F0b3JNZWRpYURldmljZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gTmF2aWdhdG9yTWVkaWFEZXZpY2VzLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTVFQTcyNUNDMUFDQUJDQjUwMEVBRDE3QiAvKiBOYXZpZ2F0b3JNZWRpYURl
dmljZXMuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IE5hdmlnYXRvck1lZGlhRGV2aWNlcy5p
ZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVFQTcyNUNEMUFDQUJDRDkwMEVBRDE3
QiAvKiBNZWRpYURldmljZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gTWVkaWFEZXZpY2VzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUVBNzI1
Q0UxQUNBQkNEOTAwRUFEMTdCIC8qIE1lZGlhRGV2aWNlcy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBNZWRpYURldmljZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNUVBNzI1Q0YxQUNBQkNEOTAwRUFEMTdCIC8qIE1lZGlhRGV2aWNlcy5pZGwgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSB0ZXh0OyBwYXRoID0gTWVkaWFEZXZpY2VzLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJNUVCQjg5MkExQzc3NzdEMDAwQzY1RDQxIC8qIE1lZGlhRW5kcG9pbnQuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWVkaWFFbmRwb2ludC5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTVFQkI4OTJCMUM3Nzc3RDAwMEM2NUQ0MSAvKiBNZWRp
YUVuZHBvaW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1lZGlhRW5kcG9p
bnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNUVCQjg5MkMxQzc3NzdEMDAwQzY1
RDQxIC8qIE1lZGlhRW5kcG9pbnRDb25maWd1cmF0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IE1lZGlhRW5kcG9pbnRDb25maWd1cmF0aW9uLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNUVCQjg5MkQxQzc3NzdEMDAwQzY1RDQxIC8qIE1lZGlh
RW5kcG9pbnRDb25maWd1cmF0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IE1lZGlhRW5kcG9pbnRDb25maWd1cmF0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCTVFQkI4OTJFMUM3Nzc3RDAwMEM2NUQ0MSAvKiBNZWRpYUVuZHBvaW50U2Vzc2lvbkNvbmZp
Z3VyYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWVkaWFFbmRwb2lu
dFNlc3Npb25Db25maWd1cmF0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVF
QkI4OTJGMUM3Nzc3RDAwMEM2NUQ0MSAvKiBNZWRpYVBheWxvYWQuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gTWVkaWFQYXlsb2FkLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTVFQkI4OTMwMUM3Nzc3RTEwMEM2NUQ0MSAvKiBJY2VDYW5kaWRhdGUuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSWNlQ2FuZGlkYXRlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTVFQkI4OTM4MUM3N0JEQTQwMEM2NUQ0MSAvKiBQZWVyTWVkaWFEZXNj
cmlwdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQZWVyTWVkaWFEZXNj
cmlwdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTUxNTYsNyArMTUxMjks
NiBAQAogCQlDREFCNkQyQzE3QzgxNEVFMDBDNjBCMzQgLyogSlNNZWRpYUNvbnRyb2xzSG9zdC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU01lZGlhQ29udHJvbHNIb3N0Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNEQUI2RDJGMTdDOTI1OTUwMEM2MEIzNCAv
KiBVc2VyQWdlbnRTY3JpcHRzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFVz
ZXJBZ2VudFNjcmlwdHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0RBQjZEMzAx
N0M5MjU5NTAwQzYwQjM0IC8qIFVzZXJBZ2VudFNjcmlwdHNEYXRhLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFVzZXJBZ2VudFNjcmlwdHNEYXRhLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQ0RBQjZEMzAxN0M5MjU5NTAwQzYwQjM1IC8qIFNEUFBy
b2Nlc3NvclNjcmlwdHNEYXRhLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFNEUFByb2Nlc3NvclNjcmlwdHNEYXRhLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQ0RBRThDMDcxNzQ2Qjk1NzAwNTMyRDc4IC8qIFBsYXRmb3JtTWVkaWFTZXNzaW9uTWFu
YWdlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQbGF0Zm9ybU1l
ZGlhU2Vzc2lvbk1hbmFnZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDREFF
OEMwODE3NDZCOTU3MDA1MzJENzggLyogUGxhdGZvcm1NZWRpYVNlc3Npb25NYW5hZ2VyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBsYXRmb3JtTWVkaWFTZXNzaW9uTWFuYWdl
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDREJFQUVBQTE5RDkyQjZDMDBCRUJB
ODggLyogTWVkaWFTZWxlY3Rpb25Hcm91cEFWRk9iakMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5vYmpjcHA7IHBhdGggPSBNZWRpYVNlbGVjdGlvbkdyb3VwQVZGT2JqQy5tbTsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE2NDAzLDEwICsxNjM3NSw2IEBACiAJCQkJMDdBQkVG
NkQxRDhBMUM3NjAwRjIxOTcyIC8qIE1lZGlhRGV2aWNlc0VudW1lcmF0aW9uUmVxdWVzdC5oICov
LAogCQkJCTA3Mzk0RUM3MUJBQjJDQ0QwMEJFOTlDRCAvKiBNZWRpYURldmljZXNSZXF1ZXN0LmNw
cCAqLywKIAkJCQkwNzM5NEVDOTFCQUIyQ0Q3MDBCRTk5Q0QgLyogTWVkaWFEZXZpY2VzUmVxdWVz
dC5oICovLAotCQkJCTVFMTZBMkUyMUJGQTY0RkIwMDI5QTIxRSAvKiBNZWRpYUVuZHBvaW50UGVl
ckNvbm5lY3Rpb24uY3BwICovLAotCQkJCTVFMTZBMkUzMUJGQTY0RkIwMDI5QTIxRSAvKiBNZWRp
YUVuZHBvaW50UGVlckNvbm5lY3Rpb24uaCAqLywKLQkJCQk1RTRFQUIwMjFEMDcxNjRDMDAwNkEx
ODQgLyogTWVkaWFFbmRwb2ludFNlc3Npb25EZXNjcmlwdGlvbi5jcHAgKi8sCi0JCQkJNUU0RUFC
MDMxRDA3MTY0QzAwMDZBMTg0IC8qIE1lZGlhRW5kcG9pbnRTZXNzaW9uRGVzY3JpcHRpb24uaCAq
LywKIAkJCQkwNzIyMUI0QzE3Q0VDMzI3MDA4NDhFNTEgLyogTWVkaWFTdHJlYW0uY3BwICovLAog
CQkJCTA3MjIxQjREMTdDRUMzMjcwMDg0OEU1MSAvKiBNZWRpYVN0cmVhbS5oICovLAogCQkJCTA3
MjIxQjRFMTdDRUMzMjcwMDg0OEU1MSAvKiBNZWRpYVN0cmVhbS5pZGwgKi8sCkBAIC0xNjUwMSw4
ICsxNjQ2OSw2IEBACiAJCQkJNUUyQzQzNjQxQkNFRTM3MjAwMDFFMkJDIC8qIFJUQ1RyYWNrRXZl
bnQuY3BwICovLAogCQkJCTVFMkM0MzY1MUJDRUUzNzIwMDAxRTJCQyAvKiBSVENUcmFja0V2ZW50
LmggKi8sCiAJCQkJNUUyQzQzNjYxQkNFRTM3MjAwMDFFMkJDIC8qIFJUQ1RyYWNrRXZlbnQuaWRs
ICovLAotCQkJCTVFQTNENkUxMUM4NTlEQUEwMDMwMEJCQiAvKiBTRFBQcm9jZXNzb3IuY3BwICov
LAotCQkJCTVFQTNENkUyMUM4NTlEQUEwMDMwMEJCQiAvKiBTRFBQcm9jZXNzb3IuaCAqLywKIAkJ
CQkwNzIyMUI4RDE3Q0VDMzI3MDA4NDhFNTEgLyogVXNlck1lZGlhQ2xpZW50LmggKi8sCiAJCQkJ
MDcyMjFCOEUxN0NFQzMyNzAwODQ4RTUxIC8qIFVzZXJNZWRpYUNvbnRyb2xsZXIuY3BwICovLAog
CQkJCTA3MjIxQjhGMTdDRUMzMjcwMDg0OEU1MSAvKiBVc2VyTWVkaWFDb250cm9sbGVyLmggKi8s
CkBAIC0xNjUyNSwxMSArMTY0OTEsOCBAQAogCQkJCTVFQkI4OTMwMUM3Nzc3RTEwMEM2NUQ0MSAv
KiBJY2VDYW5kaWRhdGUuaCAqLywKIAkJCQkxQkU1QkZDMTFENTE1NzE1MDAxNjY2RDkgLyogTWVk
aWFDb25zdHJhaW50cy5jcHAgKi8sCiAJCQkJMDcyMjFCOTkxN0NGMEFENDAwODQ4RTUxIC8qIE1l
ZGlhQ29uc3RyYWludHMuaCAqLywKLQkJCQk1RUJCODkyQTFDNzc3N0QwMDBDNjVENDEgLyogTWVk
aWFFbmRwb2ludC5jcHAgKi8sCi0JCQkJNUVCQjg5MkIxQzc3NzdEMDAwQzY1RDQxIC8qIE1lZGlh
RW5kcG9pbnQuaCAqLywKLQkJCQk1RUJCODkyQzFDNzc3N0QwMDBDNjVENDEgLyogTWVkaWFFbmRw
b2ludENvbmZpZ3VyYXRpb24uY3BwICovLAotCQkJCTVFQkI4OTJEMUM3Nzc3RDAwMEM2NUQ0MSAv
KiBNZWRpYUVuZHBvaW50Q29uZmlndXJhdGlvbi5oICovLAotCQkJCTVFQkI4OTJFMUM3Nzc3RDAw
MEM2NUQ0MSAvKiBNZWRpYUVuZHBvaW50U2Vzc2lvbkNvbmZpZ3VyYXRpb24uaCAqLywKKwkJCQk0
MUIyOEIxMzFGODUwMUE0MDBGQjUyQUMgLyogTWVkaWFFbmRwb2ludENvbmZpZ3VyYXRpb24uY3Bw
ICovLAorCQkJCTQxQjI4QjEyMUY4NTAxQTMwMEZCNTJBQyAvKiBNZWRpYUVuZHBvaW50Q29uZmln
dXJhdGlvbi5oICovLAogCQkJCTVFQkI4OTJGMUM3Nzc3RDAwMEM2NUQ0MSAvKiBNZWRpYVBheWxv
YWQuaCAqLywKIAkJCQkwNzBGNTQ5NzE3RjEyRjZCMDAxNjlFMDQgLyogTWVkaWFTdHJlYW1Db25z
dHJhaW50c1ZhbGlkYXRpb25DbGllbnQuaCAqLywKIAkJCQkwNzExNTg4RjE3REY2MzM3MDBFREZF
MkIgLyogTWVkaWFTdHJlYW1Qcml2YXRlLmNwcCAqLywKQEAgLTE2NTY3LDggKzE2NTMwLDYgQEAK
IAkJCQkwNzIyMUJBRDE3Q0YwQUQ0MDA4NDhFNTEgLyogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uUmVx
dWVzdC5oICovLAogCQkJCTMxMzU5MTA1MUU3RERDNjAwMEYzMDYzMCAvKiBSVENTaWduYWxpbmdT
dGF0ZS5oICovLAogCQkJCTA3MjIxQkIwMTdDRjBBRDQwMDg0OEU1MSAvKiBSVENWb2lkUmVxdWVz
dC5oICovLAotCQkJCTVFQTNENkU1MUM4NUE5QzMwMDMwMEJCQiAvKiBTRFBQcm9jZXNzb3JTY3Jp
cHRSZXNvdXJjZS5jcHAgKi8sCi0JCQkJNUVBM0Q2RTYxQzg1QTlDMzAwMzAwQkJCIC8qIFNEUFBy
b2Nlc3NvclNjcmlwdFJlc291cmNlLmggKi8sCiAJCQkJMDcwRTgxRDAxQkYyNzY1NjAwMUZEQTQ4
IC8qIFZpZGVvVHJhY2tQcml2YXRlTWVkaWFTdHJlYW0uaCAqLywKIAkJCQk0MUIyQTYyNTFFRjFC
RjYwMDAyQjlEN0EgLyogV2ViQXVkaW9Tb3VyY2VQcm92aWRlci5oICovLAogCQkJKTsKQEAgLTE5
MjQ1LDggKzE5MjA2LDYgQEAKIAkJCQkwNzdCNjQxNTFCOTVGNzAzMDAzRTlBRDUgLyogTWVkaWFQ
bGF5YmFja1RhcmdldE1vY2suaCAqLywKIAkJCQkwNzdCNjQxMDFCOTRGMTJFMDAzRTlBRDUgLyog
TWVkaWFQbGF5YmFja1RhcmdldFBpY2tlck1vY2suY3BwICovLAogCQkJCTA3N0I2NDExMUI5NEYx
MkUwMDNFOUFENSAvKiBNZWRpYVBsYXliYWNrVGFyZ2V0UGlja2VyTW9jay5oICovLAotCQkJCTVF
QTNENkREMUM4NTlENTMwMDMwMEJCQiAvKiBNb2NrTWVkaWFFbmRwb2ludC5jcHAgKi8sCi0JCQkJ
NUVBM0Q2REUxQzg1OUQ1MzAwMzAwQkJCIC8qIE1vY2tNZWRpYUVuZHBvaW50LmggKi8sCiAJCQkJ
MDdENkE0RjExQkVENUY4ODAwMTc0MTQ2IC8qIE1vY2tSZWFsdGltZUF1ZGlvU291cmNlLmNwcCAq
LywKIAkJCQkwN0Q2QTRGMjFCRUQ1Rjg4MDAxNzQxNDYgLyogTW9ja1JlYWx0aW1lQXVkaW9Tb3Vy
Y2UuaCAqLywKIAkJCQkwN0Q2QTRFRDFCRUNGMkQyMDAxNzQxNDYgLyogTW9ja1JlYWx0aW1lTWVk
aWFTb3VyY2UuY3BwICovLApAQCAtMTk0MDMsNyArMTkzNjIsNiBAQAogCQkJCTVFMkM0Mzc2MUJD
RjlBMEIwMDAxRTJCQyAvKiBSVENQZWVyQ29ubmVjdGlvbkJ1aWx0aW5zLmggKi8sCiAJCQkJNUUy
QzQzNzgxQkNGOUEwQjAwMDFFMkJDIC8qIFJUQ1BlZXJDb25uZWN0aW9uSW50ZXJuYWxzQnVpbHRp
bnMuY3BwICovLAogCQkJCTVFMkM0Mzc5MUJDRjlBMEIwMDAxRTJCQyAvKiBSVENQZWVyQ29ubmVj
dGlvbkludGVybmFsc0J1aWx0aW5zLmggKi8sCi0JCQkJQ0RBQjZEMzAxN0M5MjU5NTAwQzYwQjM1
IC8qIFNEUFByb2Nlc3NvclNjcmlwdHNEYXRhLmNwcCAqLywKIAkJCQk0M0I4NUVEMjE4Q0JFQzUy
MDBFMzFBRjQgLyogU2VsZWN0b3JQc2V1ZG9DbGFzc0FuZENvbXBhdGliaWxpdHlFbGVtZW50TWFw
LmNwcCAqLywKIAkJCQk0M0I4NUVEMzE4Q0JFQzUyMDBFMzFBRjQgLyogU2VsZWN0b3JQc2V1ZG9D
bGFzc0FuZENvbXBhdGliaWxpdHlFbGVtZW50TWFwLmdwZXJmICovLAogCQkJCTI2QUEwRjlEMThE
MkExOEIwMDQxOTM4MSAvKiBTZWxlY3RvclBzZXVkb0VsZW1lbnRUeXBlTWFwLmNwcCAqLywKQEAg
LTI2MTI5LDYgKzI2MDg3LDEyIEBACiAJCQljaGlsZHJlbiA9ICgKIAkJCQlDRTI2MTZBNDE4N0U2
NUMxMDA3OTU1RjMgLyogaW9zICovLAogCQkJCTJENTAzNjY2MUJDREREQzQwMEUyMEJCMyAvKiBt
YWMgKi8sCisJCQkJN0NEMEUyQjYxRjgwQTQ4MjAwMTZBNENFIC8qIEFib3J0Q29udHJvbGxlci5j
cHAgKi8sCisJCQkJN0NEMEUyQjUxRjgwQTQ4MjAwMTZBNENFIC8qIEFib3J0Q29udHJvbGxlci5o
ICovLAorCQkJCTdDRDBFMkI3MUY4MEE0ODIwMDE2QTRDRSAvKiBBYm9ydENvbnRyb2xsZXIuaWRs
ICovLAorCQkJCTdDRDBFMkJEMUY4MEE1NkUwMDE2QTRDRSAvKiBBYm9ydFNpZ25hbC5jcHAgKi8s
CisJCQkJN0NEMEUyQkMxRjgwQTU2RTAwMTZBNENFIC8qIEFib3J0U2lnbmFsLmggKi8sCisJCQkJ
N0NEMEUyQkUxRjgwQTU2RTAwMTZBNENFIC8qIEFib3J0U2lnbmFsLmlkbCAqLywKIAkJCQk3QzUy
MjI5NzFFMURBRTE2MDAyQ0I4RjcgLyogQWN0aXZlRE9NQ2FsbGJhY2suY3BwICovLAogCQkJCTdD
NTIyMjk4MUUxREFFMTYwMDJDQjhGNyAvKiBBY3RpdmVET01DYWxsYmFjay5oICovLAogCQkJCTdD
RDBCQTAyMUI4Rjc5QzkwMDVDRUJCRSAvKiBBY3RpdmVET01DYWxsYmFja01pY3JvdGFzay5jcHAg
Ki8sCkBAIC0yNjEzNiwxMiArMjYxMDAsNiBAQAogCQkJCUUxQzRERTZEMEVBNzVDNjUwMDIzQ0NE
NiAvKiBBY3RpdmVET01PYmplY3QuY3BwICovLAogCQkJCUUxQzRERTY4MEVBNzVDMUUwMDIzQ0NE
NiAvKiBBY3RpdmVET01PYmplY3QuaCAqLywKIAkJCQk4M0JCNUM4NzFENUQ2RjNBMDA1QTcxRjQg
LyogQWxsRGVzY2VuZGFudHNDb2xsZWN0aW9uLmggKi8sCi0JCQkJN0NEMEUyQjUxRjgwQTQ4MjAw
MTZBNENFIC8qIEFib3J0Q29udHJvbGxlci5oICovLAotCQkJCTdDRDBFMkI2MUY4MEE0ODIwMDE2
QTRDRSAvKiBBYm9ydENvbnRyb2xsZXIuY3BwICovLAotCQkJCTdDRDBFMkI3MUY4MEE0ODIwMDE2
QTRDRSAvKiBBYm9ydENvbnRyb2xsZXIuaWRsICovLAotCQkJCTdDRDBFMkJDMUY4MEE1NkUwMDE2
QTRDRSAvKiBBYm9ydFNpZ25hbC5oICovLAotCQkJCTdDRDBFMkJEMUY4MEE1NkUwMDE2QTRDRSAv
KiBBYm9ydFNpZ25hbC5jcHAgKi8sCi0JCQkJN0NEMEUyQkUxRjgwQTU2RTAwMTZBNENFIC8qIEFi
b3J0U2lnbmFsLmlkbCAqLywKIAkJCQkzMTk4NDdGRTFBMUQ4MTY3MDBBMTMzMTggLyogQW5pbWF0
aW9uRXZlbnQuY3BwICovLAogCQkJCTMxOTg0N0ZGMUExRDgxNjcwMEExMzMxOCAvKiBBbmltYXRp
b25FdmVudC5oICovLAogCQkJCTMxOTg0ODAwMUExRDgxNjcwMEExMzMxOCAvKiBBbmltYXRpb25F
dmVudC5pZGwgKi8sCkBAIC0yNzAzNiw2ICsyNjk5NCw4IEBACiAJCQlpc2EgPSBQQlhIZWFkZXJz
QnVpbGRQaGFzZTsKIAkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CiAJCQlmaWxlcyA9
ICgKKwkJCQk3Q0QwRTJCODFGODBBNDgyMDAxNkE0Q0UgLyogQWJvcnRDb250cm9sbGVyLmggaW4g
SGVhZGVycyAqLywKKwkJCQk3Q0QwRTJCRjFGODBBNTZFMDAxNkE0Q0UgLyogQWJvcnRTaWduYWwu
aCBpbiBIZWFkZXJzICovLAogCQkJCUY0ODIyMzEzMUUzODZFMjQwMDY2RkM3OSAvKiBBYnN0cmFj
dFBhc3RlYm9hcmQuaCBpbiBIZWFkZXJzICovLAogCQkJCTQxRTFCMUQxMEZGNTk4NjkwMDU3NkIz
QiAvKiBBYnN0cmFjdFdvcmtlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMjlBODEyMkUwRkJCOUMx
RDAwNTEwMjkzIC8qIEFjY2Vzc2liaWxpdHlBUklBR3JpZENlbGwuaCBpbiBIZWFkZXJzICovLApA
QCAtMjgzMzMsNiArMjgyOTMsOCBAQAogCQkJCTJEMEI0QUFCMThEQTFDQ0QwMDQzNERFMSAvKiBJ
T1N1cmZhY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTFDMjFFNTdEMTgzRUQxRkYwMDFDMjg5RCAv
KiBJT1N1cmZhY2VQb29sLmggaW4gSGVhZGVycyAqLywKIAkJCQkwN0FDNDcwMjE5NTIxMDIxMDBF
RTk3MjMgLyogSVNPVlRUQ3VlLmggaW4gSGVhZGVycyAqLywKKwkJCQk3QzMwRDk4NDFGODE1QUVD
MDAyNjgzNTYgLyogSlNBYm9ydENvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTdDMzBE
OTg2MUY4MTVBRUMwMDI2ODM1NiAvKiBKU0Fib3J0U2lnbmFsLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk0MThGODgwNTBGRjk1N0FGMDA4MEYwNDUgLyogSlNBYnN0cmFjdFdvcmtlci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJNTcwNDQwNUExRTUzOTM2MjAwMzU2NjAxIC8qIEpTQWVzQ2JjQ2ZiUGFyYW1z
LmggaW4gSGVhZGVycyAqLywKIAkJCQk1N0UxRTVBRDFFOEREMDlCMDBFRTM3QzkgLyogSlNBZXND
dHJQYXJhbXMuaCBpbiBIZWFkZXJzICovLApAQCAtMjkyNTYsMTEgKzI5MjE4LDcgQEAKIAkJCQkw
N0ZFOTlERDE4ODA3QTdEMDAyNTY2NDggLyogTWVkaWFFbGVtZW50U2Vzc2lvbi5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMkQ5QkY3MDYxREJGQkIyNDAwN0E3RDk5IC8qIE1lZGlhRW5jcnlwdGVkRXZl
bnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTJEOUJGNzA4MURCRkJCMjQwMDdBN0Q5OSAvKiBNZWRp
YUVuY3J5cHRlZEV2ZW50SW5pdC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNUVCQjg5MzUxQzc3Nzgy
OTAwQzY1RDQxIC8qIE1lZGlhRW5kcG9pbnQuaCBpbiBIZWFkZXJzICovLAotCQkJCTVFQkI4OTM3
MUM3Nzc4MjkwMEM2NUQ0MSAvKiBNZWRpYUVuZHBvaW50Q29uZmlndXJhdGlvbi5oIGluIEhlYWRl
cnMgKi8sCi0JCQkJNUUxNkEyRTQxQkZBNjUwQjAwMjlBMjFFIC8qIE1lZGlhRW5kcG9pbnRQZWVy
Q29ubmVjdGlvbi5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNUVCQjg5MzIxQzc3NzgyMzAwQzY1RDQx
IC8qIE1lZGlhRW5kcG9pbnRTZXNzaW9uQ29uZmlndXJhdGlvbi5oIGluIEhlYWRlcnMgKi8sCi0J
CQkJNUU0RUFCMDQxRDA3MTY2QTAwMDZBMTg0IC8qIE1lZGlhRW5kcG9pbnRTZXNzaW9uRGVzY3Jp
cHRpb24uaCBpbiBIZWFkZXJzICovLAorCQkJCTQxQjI4QjE1MUY4NTAxRDMwMEZCNTJBQyAvKiBN
ZWRpYUVuZHBvaW50Q29uZmlndXJhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTQ0NjEzQUQw
Q0Q2MzMxMDAwRkFEQTc1IC8qIE1lZGlhRXJyb3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTRFMTk1
OTIyMEEzOURBQkEwMDIyMEZFNSAvKiBNZWRpYUZlYXR1cmVOYW1lcy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMDdBNkQxRUMxNDkxMTM3NzAwMDUxRDBDIC8qIE1lZGlhRnJhZ21lbnRVUklQYXJzZXIu
aCBpbiBIZWFkZXJzICovLApAQCAtMjkzNDUsMTEgKzI5MzAzLDkgQEAKIAkJCQk1MkYxMDg2NjE2
MkI2REE4MDA5QUM4MUUgLyogTWl4ZWRDb250ZW50Q2hlY2tlci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQ0RGMkIwMTExODIwNTQwNjAwRjJCNDI0IC8qIE1vY2tCb3guaCBpbiBIZWFkZXJzICovLAog
CQkJCUNERjRCNzI0MUUwM0JGODEwMEUyMzVBMiAvKiBNb2NrQ0RNRmFjdG9yeS5oIGluIEhlYWRl
cnMgKi8sCi0JCQkJN0MzMEQ5ODQxRjgxNUFFQzAwMjY4MzU2IC8qIEpTQWJvcnRDb250cm9sbGVy
LmggaW4gSGVhZGVycyAqLywKIAkJCQlDREY0QjcyMDFFMDNCRjZGMDBFMjM1QTIgLyogTW9ja0NE
TUZhY3RvcnkuaWRsIGluIEhlYWRlcnMgKi8sCiAJCQkJNTEwNThBRTAxRDY3QzIyOTAwOUE1MzhD
IC8qIE1vY2tHYW1lcGFkLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTA1OEFFMjFENjdDMjI5MDA5
QTUzOEMgLyogTW9ja0dhbWVwYWRQcm92aWRlci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNUVBM0Q2
REYxQzg1OUQ3RjAwMzAwQkJCIC8qIE1vY2tNZWRpYUVuZHBvaW50LmggaW4gSGVhZGVycyAqLywK
IAkJCQlDREYyQjAxMzE4MjA1NDA2MDBGMkI0MjQgLyogTW9ja01lZGlhUGxheWVyTWVkaWFTb3Vy
Y2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUNERjJCMDE1MTgyMDU0MDYwMEYyQjQyNCAvKiBNb2Nr
TWVkaWFTb3VyY2VQcml2YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwN0Q2QTRGNDFCRUQ1Rjg4
MDAxNzQxNDYgLyogTW9ja1JlYWx0aW1lQXVkaW9Tb3VyY2UuaCBpbiBIZWFkZXJzICovLApAQCAt
Mjk5ODQsOCArMjk5NDAsNiBAQAogCQkJCTgzQzU3OTVEMURBNUMzMDEwMDZGQUNBOCAvKiBTY3Jv
bGxUb09wdGlvbnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzQzA5Qzg2MEIwNjU3QUEwMDVBQkQ0
RCAvKiBTY3JvbGxUeXBlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM2RDZFMjYwOUFGOTQzNTAw
RjU5NzU5IC8qIFNjcm9sbFZpZXcuaCBpbiBIZWFkZXJzICovLAotCQkJCTVFQTNENkU0MUM4NTlE
QzEwMDMwMEJCQiAvKiBTRFBQcm9jZXNzb3IuaCBpbiBIZWFkZXJzICovLAotCQkJCTVFQTNENkU4
MUM4NUE5REIwMDMwMEJCQiAvKiBTRFBQcm9jZXNzb3JTY3JpcHRSZXNvdXJjZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJRjU1QjNERDIxMjUxRjEyRDAwM0VGMjY5IC8qIFNlYXJjaElucHV0VHlwZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQUI3MTcwODkwQjMxMTgwODAwMTcxMjNFIC8qIFNlYXJjaFBv
cHVwTWVudS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEU3MDU4RjQxQkM1Q0VEQTAwNDVBNTA3IC8q
IFNlYXJjaFBvcHVwTWVudUNvY29hLmggaW4gSGVhZGVycyAqLywKQEAgLTMwMjM3LDcgKzMwMTkx
LDYgQEAKIAkJCQlCMjIyNzk5NTBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHQW5pbWF0ZVRyYW5zZm9y
bUVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyMjI3OTk4MEQwMEJGMjIwMDcxQjc4MiAv
KiBTVkdBbmltYXRpb25FbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk0MzlEMzM0NTEzQTY5
MTFDMDBDMjBGNEYgLyogU1ZHQW5pbWF0b3JGYWN0b3J5LmggaW4gSGVhZGVycyAqLywKLQkJCQk3
QzMwRDk4NjFGODE1QUVDMDAyNjgzNTYgLyogSlNBYm9ydFNpZ25hbC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMDhGQjNGODQxM0JDNzU0QzAwOTlGQzE4IC8qIFNWR0F0dHJpYnV0ZVRvUHJvcGVydHlN
YXAuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyMjI3OTlDMEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdD
aXJjbGVFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjIyNzk5RjBEMDBCRjIyMDA3MUI3
ODIgLyogU1ZHQ2xpcFBhdGhFbGVtZW50LmggaW4gSGVhZGVycyAqLywKQEAgLTMwMjgxLDcgKzMw
MjM0LDYgQEAKIAkJCQlCMjIyN0EwNjBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHRkVUaWxlRWxlbWVu
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjIyMjdBMDkwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR0ZF
VHVyYnVsZW5jZUVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTg0NUU3MkZDMEZEMjYyMzkw
MEE4N0Q3OSAvKiBTVkdGaWx0ZXIuaCBpbiBIZWFkZXJzICovLAotCQkJCTdDRDBFMkJGMUY4MEE1
NkUwMDE2QTRDRSAvKiBBYm9ydFNpZ25hbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDgxRUJGM0Iw
RkQzNEY0MTAwREE3NTU5IC8qIFNWR0ZpbHRlckJ1aWxkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUIyMjI3QTBDMEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdGaWx0ZXJFbGVtZW50LmggaW4gSGVhZGVy
cyAqLywKIAkJCQlCMjIyN0EwRjBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHRmlsdGVyUHJpbWl0aXZl
U3RhbmRhcmRBdHRyaWJ1dGVzLmggaW4gSGVhZGVycyAqLywKQEAgLTMwNzM2LDcgKzMwNjg4LDYg
QEAKIAkJCQk3N0ExN0E3ODEyRjI4NjQyMDA0RTAyRjYgLyogV2ViR0xWZXJ0ZXhBcnJheU9iamVj
dE9FUy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzE2QkRCOEMxRTZFMTUzMDAwREUwRDVBIC8qIFdl
YkdQVUxheWVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNUUyMTIzQzFFNDkyNEE0MDBDRTEwNDQg
LyogV2ViSGVhcEFnZW50LmggaW4gSGVhZGVycyAqLywKLQkJCQk3Q0QwRTJCODFGODBBNDgyMDAx
NkE0Q0UgLyogQWJvcnRDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNTg0MEUyNTE4
N0I4QUMyMDA4NDNCMTAgLyogV2ViSW5qZWN0ZWRTY3JpcHRIb3N0LmggaW4gSGVhZGVycyAqLywK
IAkJCQlBNTg0RkUzMDE4NjRDQjg0MDA4NDNCMTAgLyogV2ViSW5qZWN0ZWRTY3JpcHRNYW5hZ2Vy
LmggaW4gSGVhZGVycyAqLywKIAkJCQlGNDgyMjMxMTFFMzg2OUI4MDA2NkZDNzkgLyogV2ViSXRl
bVByb3ZpZGVyUGFzdGVib2FyZC5oIGluIEhlYWRlcnMgKi8sCkBAIC0zMTIyNiw2ICszMTE3Nyw4
IEBACiAJCQlpc2EgPSBQQlhTb3VyY2VzQnVpbGRQaGFzZTsKIAkJCWJ1aWxkQWN0aW9uTWFzayA9
IDIxNDc0ODM2NDc7CiAJCQlmaWxlcyA9ICgKKwkJCQk3Q0QwRTJCOTFGODBBNDgyMDAxNkE0Q0Ug
LyogQWJvcnRDb250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTdDRDBFMkMwMUY4MEE1
NkUwMDE2QTRDRSAvKiBBYm9ydFNpZ25hbC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0MUUxQjFE
MDBGRjU5ODY5MDA1NzZCM0IgLyogQWJzdHJhY3RXb3JrZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMzdGNTdBQjkxQTUwNzI2OTAwODc2Rjk4IC8qIEFjY2Vzc2liaWxpdHlBUklBR3JpZC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkzN0Y1N0FCQTFBNTA3MjZGMDA4NzZGOTggLyogQWNjZXNzaWJp
bGl0eUFSSUFHcmlkQ2VsbC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTMxNTAzLDcgKzMxNDU2LDYg
QEAKIAkJCQlDRTI4NDk4OTFDQTM2MTQ2MDBCNEE1N0YgLyogQ29udGVudFNlY3VyaXR5UG9saWN5
RGlyZWN0aXZlTmFtZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQ0U3OTlGQTcxQzZBNTA1NzAw
OTdCNTE4IC8qIENvbnRlbnRTZWN1cml0eVBvbGljeU1lZGlhTGlzdERpcmVjdGl2ZS5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlDRTZEQURGOTFDNTkxRTZBMDAzRjZBODggLyogQ29udGVudFNlY3Vy
aXR5UG9saWN5UmVzcG9uc2VIZWFkZXJzLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTdDMzBEOTg1
MUY4MTVBRUMwMDI2ODM1NiAvKiBKU0Fib3J0U2lnbmFsLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUNFNzk5RjlGMUM2QTRDMTYwMDk3QjUxOCAvKiBDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2Uu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQ0U3OTlGOTcxQzZBNDZCQzAwOTdCNTE4IC8qIENvbnRl
bnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQ0U3OTlG
QUIxQzZBNTA2NjAwOTdCNTE4IC8qIENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3REaXJl
Y3RpdmUuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0zMTU3NSw3ICszMTUyNyw2IEBACiAJCQkJRTEy
MzNGMTAxODVBNDEzMDAwOERGQUY1IC8qIENyeXB0b0FsZ29yaXRobVJTQUVTX1BLQ1MxX3YxXzVN
YWMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTFCRDMzMTkxODJEOERERDAwQzA1RDlGIC8qIENy
eXB0b0FsZ29yaXRobVJTQVNTQV9QS0NTMV92MV81LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUx
QzI2NkQ4MTgzMTdBQjQwMDNGOEIzMyAvKiBDcnlwdG9BbGdvcml0aG1SU0FTU0FfUEtDUzFfdjFf
NU1hYy5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk3QzMwRDk4MzFGODE1QUVDMDAyNjgzNTYgLyog
SlNBYm9ydENvbnRyb2xsZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTEyNUY4MkIxODIyQ0ZF
QzAwRDg0Q0Q5IC8qIENyeXB0b0FsZ29yaXRobVNIQTEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
RTE5QUMzRUUxODI0REM3OTAwMzQ5NDI2IC8qIENyeXB0b0FsZ29yaXRobVNIQTIyNC5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlFMTlBQzNGMDE4MjREQzc5MDAzNDk0MjYgLyogQ3J5cHRvQWxnb3Jp
dGhtU0hBMjU2LmNwcCBpbiBTb3VyY2VzICovLApAQCAtMzIzNTYsNiArMzIzMDcsOCBAQAogCQkJ
CTFDMjFFNTdDMTgzRUQxRkYwMDFDMjg5RCAvKiBJT1N1cmZhY2VQb29sLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUFEOUZGNkUxMTkwODM5MUQwMDNCNjFFMCAvKiBJT1N1cmZhY2VQb29sQ29jb2Eu
bW0gaW4gU291cmNlcyAqLywKIAkJCQkwN0FDNDcwMTE5NTIxMDIxMDBFRTk3MjMgLyogSVNPVlRU
Q3VlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTdDMzBEOTgzMUY4MTVBRUMwMDI2ODM1NiAvKiBK
U0Fib3J0Q29udHJvbGxlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk3QzMwRDk4NTFGODE1QUVD
MDAyNjgzNTYgLyogSlNBYm9ydFNpZ25hbC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0MThGODgw
NDBGRjk1N0FFMDA4MEYwNDUgLyogSlNBYnN0cmFjdFdvcmtlci5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk1NzA0NDA1QzFFNTM5Mzc5MDAzNTY2MDEgLyogSlNBZXNDYmNDZmJQYXJhbXMuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJNTdFMUU1QUMxRThERDA5QjAwRUUzN0M5IC8qIEpTQWVzQ3RyUGFy
YW1zLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMzI0MzQsNyArMzIzODcsNiBAQAogCQkJCUE1ODRG
RTNCMTg2NEUyRDgwMDg0M0IxMCAvKiBKU0NvbW1hbmRMaW5lQVBJSG9zdC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQk5M0Y5QjZFMDBCQTBGQjcyMDA4NTQwNjQgLyogSlNDb21tZW50LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTc5QUM5MjE4MTA5OTQ1QzgwMDIxMjY2RSAvKiBKU0NvbXBvc2l0aW9u
RXZlbnQuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJN0NEMEUyQzAxRjgwQTU2RTAwMTZBNENFIC8q
IEFib3J0U2lnbmFsLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZEQTE1RUJEMTJCMDNGMEIwMDNB
NTgzQSAvKiBKU0NvbnZvbHZlck5vZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkU2RkQ0OEQw
RjY3NkU5MzAwMDkyODczIC8qIEpTQ29vcmRpbmF0ZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MTREQ0YzQjIxQjZCRTIwODAwNjJENEMyIC8qIEpTQ291bnRRdWV1aW5nU3RyYXRlZ3kuY3BwIGlu
IFNvdXJjZXMgKi8sCkBAIC0zMjUyNyw3ICszMjQ3OSw2IEBACiAJCQkJODM2QUNFRDIxRUNBQUIx
OTAwNEJEMDEyIC8qIEpTRE9NTWF0cml4LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdDQkJCQ0NC
MUY1NjE4MEQwMDVFRkFBQyAvKiBKU0RPTU1hdHJpeDJESW5pdC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk4MzU2NTdDNzFFQ0FCMTA3MDBDREU3MkQgLyogSlNET01NYXRyaXhJbml0LmNwcCBpbiBT
b3VyY2VzICovLAotCQkJCTdDRDBFMkI5MUY4MEE0ODIwMDE2QTRDRSAvKiBBYm9ydENvbnRyb2xs
ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODM2QUNFRDUxRUNBQUIxOTAwNEJEMDEyIC8qIEpT
RE9NTWF0cml4UmVhZE9ubHkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTlEMjQ4MDYwRDc1N0U3
RDAwRkRGOTU5IC8qIEpTRE9NTWltZVR5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTlEMjQ4
MDgwRDc1N0U3RDAwRkRGOTU5IC8qIEpTRE9NTWltZVR5cGVBcnJheS5jcHAgaW4gU291cmNlcyAq
LywKQEAgLTMzMzMzLDEwICszMzI4NCw3IEBACiAJCQkJRkQ2RjI1MkMxM0Y1RUYwRTAwNjUxNjVG
IC8qIE1lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkw
N0ZFOTlEQzE4ODA3QTdEMDAyNTY2NDggLyogTWVkaWFFbGVtZW50U2Vzc2lvbi5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkyRDlCRjcwNTFEQkZCQjI0MDA3QTdEOTkgLyogTWVkaWFFbmNyeXB0ZWRF
dmVudC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk1RUJCODkzNDFDNzc3ODI5MDBDNjVENDEgLyog
TWVkaWFFbmRwb2ludC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk1RUJCODkzNjFDNzc3ODI5MDBD
NjVENDEgLyogTWVkaWFFbmRwb2ludENvbmZpZ3VyYXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCi0J
CQkJNUUxNkEyRTUxQkZBNjUwRjAwMjlBMjFFIC8qIE1lZGlhRW5kcG9pbnRQZWVyQ29ubmVjdGlv
bi5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk1RTRFQUIwNTFEMDcxNjZFMDAwNkExODQgLyogTWVk
aWFFbmRwb2ludFNlc3Npb25EZXNjcmlwdGlvbi5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk0MUIy
OEIxNDFGODUwMUE2MDBGQjUyQUMgLyogTWVkaWFFbmRwb2ludENvbmZpZ3VyYXRpb24uY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJNEUxOTU5MjEwQTM5REFCQTAwMjIwRkU1IC8qIE1lZGlhRmVhdHVy
ZU5hbWVzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTA3QTZEMUVCMTQ5MTEzNzcwMDA1MUQwQyAv
KiBNZWRpYUZyYWdtZW50VVJJUGFyc2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTJEOUJGNzQ3
MURCRkRDNDkwMDdBN0Q5OSAvKiBNZWRpYUtleU1lc3NhZ2VFdmVudC5jcHAgaW4gU291cmNlcyAq
LywKQEAgLTMzNDExLDcgKzMzMzU5LDYgQEAKIAkJCQlDREYyQjAxMDE4MjA1NDA2MDBGMkI0MjQg
LyogTW9ja0JveC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MTA1OEFERjFENjdDMjI5MDA5QTUz
OEMgLyogTW9ja0dhbWVwYWQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTEwNThBRTExRDY3QzIy
OTAwOUE1MzhDIC8qIE1vY2tHYW1lcGFkUHJvdmlkZXIuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJ
NUVBM0Q2RTAxQzg1OUQ4NDAwMzAwQkJCIC8qIE1vY2tNZWRpYUVuZHBvaW50LmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUNERjJCMDEyMTgyMDU0MDYwMEYyQjQyNCAvKiBNb2NrTWVkaWFQbGF5ZXJN
ZWRpYVNvdXJjZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDREYyQjAxNDE4MjA1NDA2MDBGMkI0
MjQgLyogTW9ja01lZGlhU291cmNlUHJpdmF0ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwN0Q2
QTRGMzFCRUQ1Rjg4MDAxNzQxNDYgLyogTW9ja1JlYWx0aW1lQXVkaW9Tb3VyY2UuY3BwIGluIFNv
dXJjZXMgKi8sCkBAIC0zMzkwNiw5ICszMzg1Myw2IEBACiAJCQkJQkMyNDQxQzQwRThCNjVEMDAw
NTUzMjBGIC8qIFNjcm9sbFZpZXcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTQ1MzkwNDUwRUFG
RDYzNzAwMzY5NUM4IC8qIFNjcm9sbFZpZXdJT1MubW0gaW4gU291cmNlcyAqLywKIAkJCQk5MzUz
Njc2QjA5QUVEODhCMDBEMzVDRDYgLyogU2Nyb2xsVmlld01hYy5tbSBpbiBTb3VyY2VzICovLAot
CQkJCTVFQTNENkUzMUM4NTlEQzEwMDMwMEJCQiAvKiBTRFBQcm9jZXNzb3IuY3BwIGluIFNvdXJj
ZXMgKi8sCi0JCQkJNUVBM0Q2RTcxQzg1QTlEQjAwMzAwQkJCIC8qIFNEUFByb2Nlc3NvclNjcmlw
dFJlc291cmNlLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUNEQUI2RDMyMTdDOTI1OTUwMEM2MEIz
NSAvKiBTRFBQcm9jZXNzb3JTY3JpcHRzRGF0YS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGNTVC
M0REMTEyNTFGMTJEMDAzRUYyNjkgLyogU2VhcmNoSW5wdXRUeXBlLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTBFNzA1OEVFMUJDNUJDMTkwMDQ1QTUwNyAvKiBTZWFyY2hQb3B1cE1lbnVDb2NvYS5t
bSBpbiBTb3VyY2VzICovLAogCQkJCTk3NkYzNkVBMTQ2ODYyMjUwMDVFOTNCNCAvKiBTZWN1cml0
eUNvbnRleHQuY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9HU3RyZWFtZXIuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9HU3RyZWFt
ZXIuY21ha2UKaW5kZXggOTljZjVmZmEyMDczNzZjYjVhYjllY2RkYWZiNmNhNDdhYjIwM2E0MC4u
N2UyMjRkNzc0NzU0NGFkMzdkMzg4ZDdjNzRiOWY2ZTYyNTA4ZDgwZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vR1N0cmVhbWVyLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL0dTdHJlYW1lci5jbWFrZQpAQCAtMSwyNiArMSwzIEBACi1saXN0KEFQUEVORCBX
ZWJDb3JlX0lOQ0xVREVfRElSRUNUT1JJRVMKLSAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0v
bWVkaWFzdHJlYW0vb3BlbndlYnJ0YyIKLSkKLQotaWYgKEVOQUJMRV9NRURJQV9TVFJFQU0pCi0g
ICAgbGlzdChBUFBFTkQgV2ViQ29yZV9TWVNURU1fSU5DTFVERV9ESVJFQ1RPUklFUwotICAgICAg
ICAke09QRU5XRUJSVENfSU5DTFVERV9ESVJTfQotICAgICkKLQotICAgIGxpc3QoQVBQRU5EIFdl
YkNvcmVfTElCUkFSSUVTCi0gICAgICAgICR7T1BFTldFQlJUQ19MSUJSQVJJRVN9Ci0gICAgKQot
Ci0gICAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCi0gICAgICAgIHBsYXRmb3JtL2dyYXBo
aWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3IuY3BwCi0KLSAgICAg
ICAgcGxhdGZvcm0vbWVkaWFzdHJlYW0vb3BlbndlYnJ0Yy9NZWRpYUVuZHBvaW50T3dyLmNwcAot
ICAgICAgICBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9vcGVud2VicnRjL09wZW5XZWJSVENVdGlsaXRp
ZXMuY3BwCi0gICAgICAgIHBsYXRmb3JtL21lZGlhc3RyZWFtL29wZW53ZWJydGMvUmVhbHRpbWVN
ZWRpYVNvdXJjZU93ci5jcHAKLSAgICAgICAgcGxhdGZvcm0vbWVkaWFzdHJlYW0vb3BlbndlYnJ0
Yy9SZWFsdGltZU1lZGlhU291cmNlQ2VudGVyT3dyLmNwcAotICAgICkKLWVuZGlmICgpCi0KIGlm
IChFTkFCTEVfVklERU8gT1IgRU5BQkxFX1dFQl9BVURJTykKICAgICBsaXN0KEFQUEVORCBXZWJD
b3JlX0lOQ0xVREVfRElSRUNUT1JJRVMKICAgICAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3Jt
L2dyYXBoaWNzL2dzdHJlYW1lciIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL01lZGlhUGxheWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL01lZGlhUGxheWVyLmNwcAppbmRleCA0ODc3MTYwY2ZhYWIzYWVjMjY5YzlmYmNmNmM0ODZm
ZjIxN2EyMmEwLi5mMDkzZDQ1MWIyNTU4YTVhOTFhYTg4ZDExMzU5NjQ3ODQ0MTc4ODc2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3BwCkBA
IC01Myw5ICs1Myw2IEBACiAKICNpZiBVU0UoR1NUUkVBTUVSKQogI2luY2x1ZGUgIk1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lci5oIgotI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pICYmIFVTRShP
UEVOV0VCUlRDKQotI2luY2x1ZGUgIk1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93ci5oIgot
I2VuZGlmCiAjZGVmaW5lIFBsYXRmb3JtTWVkaWFFbmdpbmVDbGFzc05hbWUgTWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyCiAjaWYgRU5BQkxFKFZJREVPKSAmJiBFTkFCTEUoTUVESUFfU09VUkNF
KSAmJiBFTkFCTEUoVklERU9fVFJBQ0spCiAjaW5jbHVkZSAiTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyTVNFLmgiCkBAIC0yNjgsMTEgKzI2NSw2IEBAIHN0YXRpYyB2b2lkIGJ1aWxkTWVkaWFF
bmdpbmVzVmVjdG9yKCkKICAgICAgICAgUGxhdGZvcm1NZWRpYUVuZ2luZUNsYXNzTmFtZTo6cmVn
aXN0ZXJNZWRpYUVuZ2luZShhZGRNZWRpYUVuZ2luZSk7CiAjZW5kaWYKIAotI2lmIEVOQUJMRShN
RURJQV9TVFJFQU0pICYmIFVTRShHU1RSRUFNRVIpICYmIFVTRShPUEVOV0VCUlRDKQotICAgIGlm
IChTZXR0aW5nczo6aXNHU3RyZWFtZXJFbmFibGVkKCkpCi0gICAgICAgIE1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lck93cjo6cmVnaXN0ZXJNZWRpYUVuZ2luZShhZGRNZWRpYUVuZ2luZSk7Ci0j
ZW5kaWYKLQogI2lmIEVOQUJMRShWSURFTykgJiYgVVNFKEdTVFJFQU1FUikgJiYgRU5BQkxFKE1F
RElBX1NPVVJDRSkgJiYgRU5BQkxFKFZJREVPX1RSQUNLKQogICAgIGlmIChTZXR0aW5nczo6aXNH
U3RyZWFtZXJFbmFibGVkKCkpCiAgICAgICAgIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1T
RTo6cmVnaXN0ZXJNZWRpYUVuZ2luZShhZGRNZWRpYUVuZ2luZSk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1l
ci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3BwCmluZGV4IGYzOGU2MzcxMjk3YTQ5NGVk
N2FiYzIyMDRjMWIyYWExZDNkNGJmMWIuLjg0Nzk0ZjRjNWJjOTBjZWE5Njg3MmIwYzhmMTJjMmUx
YzRiYmEyYjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dz
dHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXIuY3BwCkBAIC0xOTMxLDcgKzE5MzEsNiBAQCBNZWRpYVBsYXllcjo6U3VwcG9ydHNUeXBlIE1l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c3VwcG9ydHNUeXBlKGNvbnN0IE1lZGlhRQogICAg
ICAgICByZXR1cm4gcmVzdWx0OwogI2VuZGlmCiAKLSAgICAvLyBNZWRpYVN0cmVhbSBwbGF5YmFj
ayBpcyBoYW5kbGVkIGJ5IHRoZSBPcGVuV2ViUlRDIHBsYXllci4KICAgICBpZiAocGFyYW1ldGVy
cy5pc01lZGlhU3RyZWFtKQogICAgICAgICByZXR1cm4gcmVzdWx0OwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyT3dyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dz
dHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3IuY3BwCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCBlNTFmZjZjZjc3ZmUzYzE3NjhiYTkwNzEwODZjOTZlMmVkYzlhYTk1
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXJPd3IuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNTAxICswLDAgQEAKLS8qCi0gKiAgQ29w
eXJpZ2h0IChDKSAyMDEyIENvbGxhYm9yYSBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiAg
Q29weXJpZ2h0IChDKSAyMDE0LCAyMDE1IElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiAgQ29weXJpZ2h0IChDKSAyMDE1IE1ldHJvbG9naWNhbCBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCi0gKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCi0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJl
Ci0gKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwg
Qm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgot
Ci0jaW5jbHVkZSAiTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyLmgiCi0KLSNpZiBFTkFC
TEUoVklERU8pICYmIEVOQUJMRShNRURJQV9TVFJFQU0pICYmIFVTRShHU1RSRUFNRVIpICYmIFVT
RShPUEVOV0VCUlRDKQotCi0jaW5jbHVkZSAiR1N0cmVhbWVyVXRpbGl0aWVzLmgiCi0jaW5jbHVk
ZSAiTWVkaWFQbGF5ZXIuaCIKLSNpbmNsdWRlICJNZWRpYVN0cmVhbVByaXZhdGUuaCIKLSNpbmNs
dWRlICJOb3RJbXBsZW1lbnRlZC5oIgotI2luY2x1ZGUgIlJlYWx0aW1lTWVkaWFTb3VyY2VPd3Iu
aCIKLSNpbmNsdWRlICJVUkwuaCIKLSNpbmNsdWRlIDxvd3Ivb3dyLmg+Ci0jaW5jbHVkZSA8b3dy
L293cl9nc3RfYXVkaW9fcmVuZGVyZXIuaD4KLSNpbmNsdWRlIDxvd3Ivb3dyX2dzdF92aWRlb19y
ZW5kZXJlci5oPgotI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0
Zi90ZXh0L0NTdHJpbmcuaD4KLQotR1NUX0RFQlVHX0NBVEVHT1JZKHdlYmtpdF9vcGVud2VicnRj
X2RlYnVnKTsKLSNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIHdlYmtpdF9vcGVud2VicnRjX2RlYnVn
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dy
OjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3IoTWVkaWFQbGF5ZXIqIHBsYXllcikKLSAg
ICA6IE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2UocGxheWVyKQotewotICAgIGluaXRp
YWxpemVHU3RyZWFtZXJBbmRHU3RyZWFtZXJEZWJ1Z2dpbmcoKTsKLX0KLQotTWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyT3dyOjp+TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyKCkKLXsK
LSAgICBHU1RfVFJBQ0UoIkRlc3Ryb3lpbmciKTsKLQotICAgIGlmIChoYXNBdWRpbygpKQotICAg
ICAgICBtX2F1ZGlvVHJhY2stPnJlbW92ZU9ic2VydmVyKCp0aGlzKTsKLSAgICBpZiAoaGFzVmlk
ZW8oKSkKLSAgICAgICAgbV92aWRlb1RyYWNrLT5yZW1vdmVPYnNlcnZlcigqdGhpcyk7Ci0KLSAg
ICBtX2F1ZGlvVHJhY2tNYXAuY2xlYXIoKTsKLSAgICBtX3ZpZGVvVHJhY2tNYXAuY2xlYXIoKTsK
LQotICAgIHN0b3AoKTsKLX0KLQotdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3I6
OnBsYXkoKQotewotICAgIEdTVF9ERUJVRygiUGxheSIpOwotCi0gICAgaWYgKCFtX3N0cmVhbVBy
aXZhdGUgfHwgIW1fc3RyZWFtUHJpdmF0ZS0+YWN0aXZlKCkpIHsKLSAgICAgICAgbV9yZWFkeVN0
YXRlID0gTWVkaWFQbGF5ZXI6OkhhdmVOb3RoaW5nOwotICAgICAgICBsb2FkaW5nRmFpbGVkKE1l
ZGlhUGxheWVyOjpFbXB0eSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtX2VuZGVk
ID0gZmFsc2U7Ci0gICAgbV9wYXVzZWQgPSBmYWxzZTsKLQotICAgIEdTVF9ERUJVRygiQ29ubmVj
dGluZyB0byBsaXZlIHN0cmVhbSwgZGVzY3JpcHRvcjogJXAiLCBtX3N0cmVhbVByaXZhdGUuZ2V0
KCkpOwotCi0gICAgaWYgKG1fdmlkZW9UcmFjaykKLSAgICAgICAgbWF5YmVIYW5kbGVDaGFuZ2VN
dXRlZFN0YXRlKCptX3ZpZGVvVHJhY2suZ2V0KCkpOwotCi0gICAgaWYgKG1fYXVkaW9UcmFjaykK
LSAgICAgICAgbWF5YmVIYW5kbGVDaGFuZ2VNdXRlZFN0YXRlKCptX2F1ZGlvVHJhY2suZ2V0KCkp
OwotfQotCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93cjo6cGF1c2UoKQotewot
ICAgIEdTVF9ERUJVRygiUGF1c2UiKTsKLSAgICBtX3BhdXNlZCA9IHRydWU7Ci0gICAgZGlzYWJs
ZU1lZGlhVHJhY2tzKCk7Ci19Ci0KLWJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dy
OjpoYXNWaWRlbygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fdmlkZW9UcmFjazsKLX0KLQotYm9v
bCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3I6Omhhc0F1ZGlvKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gbV9hdWRpb1RyYWNrOwotfQotCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lck93cjo6c2V0Vm9sdW1lKGZsb2F0IHZvbHVtZSkKLXsKLSAgICBpZiAoIW1fYXVkaW9UcmFj
aykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byYgcmVhbFRpbWVNZWRpYVNvdXJjZSA9IHN0
YXRpY19jYXN0PFJlYWx0aW1lTWVkaWFTb3VyY2VPd3ImPihtX2F1ZGlvVHJhY2stPnNvdXJjZSgp
KTsKLSAgICBhdXRvIG1lZGlhU291cmNlID0gT1dSX01FRElBX1NPVVJDRShyZWFsVGltZU1lZGlh
U291cmNlLm1lZGlhU291cmNlKCkpOwotCi0gICAgR1NUX0RFQlVHKCJTZXR0aW5nIHZvbHVtZTog
JWYiLCB2b2x1bWUpOwotICAgIGdfb2JqZWN0X3NldChtZWRpYVNvdXJjZSwgInZvbHVtZSIsIHN0
YXRpY19jYXN0PGdkb3VibGU+KHZvbHVtZSksIG51bGxwdHIpOwotfQotCi12b2lkIE1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lck93cjo6c2V0TXV0ZWQoYm9vbCBtdXRlZCkKLXsKLSAgICBpZiAo
IW1fYXVkaW9UcmFjaykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byYgcmVhbFRpbWVNZWRp
YVNvdXJjZSA9IHN0YXRpY19jYXN0PFJlYWx0aW1lTWVkaWFTb3VyY2VPd3ImPihtX2F1ZGlvVHJh
Y2stPnNvdXJjZSgpKTsKLSAgICBhdXRvIG1lZGlhU291cmNlID0gT1dSX01FRElBX1NPVVJDRShy
ZWFsVGltZU1lZGlhU291cmNlLm1lZGlhU291cmNlKCkpOwotICAgIGlmICghbWVkaWFTb3VyY2Up
Ci0gICAgICAgIHJldHVybjsKLQotICAgIEdTVF9ERUJVRygiU2V0dGluZyBtdXRlOiAlcyIsIG11
dGVkID8gIm9uIjoib2ZmIik7Ci0gICAgZ19vYmplY3Rfc2V0KG1lZGlhU291cmNlLCAibXV0ZSIs
IG11dGVkLCBudWxscHRyKTsKLX0KLQotZmxvYXQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
T3dyOjpjdXJyZW50VGltZSgpIGNvbnN0Ci17Ci0gICAgZ2ludDY0IHBvc2l0aW9uID0gR1NUX0NM
T0NLX1RJTUVfTk9ORTsKLSAgICBHc3RRdWVyeSogcXVlcnkgPSBnc3RfcXVlcnlfbmV3X3Bvc2l0
aW9uKEdTVF9GT1JNQVRfVElNRSk7Ci0KLSAgICBpZiAobV92aWRlb1RyYWNrICYmIGdzdF9lbGVt
ZW50X3F1ZXJ5KG1fdmlkZW9TaW5rLmdldCgpLCBxdWVyeSkpCi0gICAgICAgIGdzdF9xdWVyeV9w
YXJzZV9wb3NpdGlvbihxdWVyeSwgMCwgJnBvc2l0aW9uKTsKLSAgICBlbHNlIGlmIChtX2F1ZGlv
VHJhY2sgJiYgZ3N0X2VsZW1lbnRfcXVlcnkobV9hdWRpb1NpbmsuZ2V0KCksIHF1ZXJ5KSkKLSAg
ICAgICAgZ3N0X3F1ZXJ5X3BhcnNlX3Bvc2l0aW9uKHF1ZXJ5LCAwLCAmcG9zaXRpb24pOwotCi0g
ICAgZmxvYXQgcmVzdWx0ID0gMDsKLSAgICBpZiAoc3RhdGljX2Nhc3Q8R3N0Q2xvY2tUaW1lPihw
b3NpdGlvbikgIT0gR1NUX0NMT0NLX1RJTUVfTk9ORSkKLSAgICAgICAgcmVzdWx0ID0gc3RhdGlj
X2Nhc3Q8ZG91YmxlPihwb3NpdGlvbikgLyBHU1RfU0VDT05EOwotCi0gICAgR1NUX0xPRygiUG9z
aXRpb24gJSIgR1NUX1RJTUVfRk9STUFULCBHU1RfVElNRV9BUkdTKHBvc2l0aW9uKSk7Ci0gICAg
Z3N0X3F1ZXJ5X3VucmVmKHF1ZXJ5KTsKLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXZvaWQg
TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyOjpsb2FkKGNvbnN0IFN0cmluZyAmKQotewot
ICAgIC8vIFByb3Blcmx5IGZhaWwgc28gdGhlIGdsb2JhbCBNZWRpYVBsYXllciB0cmllcyB0byBm
YWxsYmFjayB0byB0aGUgbmV4dCBNZWRpYVBsYXllclByaXZhdGUuCi0gICAgbV9uZXR3b3JrU3Rh
dGUgPSBNZWRpYVBsYXllcjo6Rm9ybWF0RXJyb3I7Ci0gICAgbV9wbGF5ZXItPm5ldHdvcmtTdGF0
ZUNoYW5nZWQoKTsKLX0KLQotI2lmIEVOQUJMRShNRURJQV9TT1VSQ0UpCi12b2lkIE1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lck93cjo6bG9hZChjb25zdCBTdHJpbmcmLCBNZWRpYVNvdXJjZVBy
aXZhdGVDbGllbnQqKQotewotICAgIC8vIFByb3Blcmx5IGZhaWwgc28gdGhlIGdsb2JhbCBNZWRp
YVBsYXllciB0cmllcyB0byBmYWxsYmFjayB0byB0aGUgbmV4dCBNZWRpYVBsYXllclByaXZhdGUu
Ci0gICAgbV9uZXR3b3JrU3RhdGUgPSBNZWRpYVBsYXllcjo6Rm9ybWF0RXJyb3I7Ci0gICAgbV9w
bGF5ZXItPm5ldHdvcmtTdGF0ZUNoYW5nZWQoKTsKLX0KLSNlbmRpZgotCi12b2lkIE1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lck93cjo6bG9hZChNZWRpYVN0cmVhbVByaXZhdGUmIHN0cmVhbVBy
aXZhdGUpCi17Ci0gICAgaWYgKCFpbml0aWFsaXplR1N0cmVhbWVyKCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIG1fc3RyZWFtUHJpdmF0ZSA9ICZzdHJlYW1Qcml2YXRlOwotICAgIGlmICghbV9z
dHJlYW1Qcml2YXRlLT5hY3RpdmUoKSkgewotICAgICAgICBsb2FkaW5nRmFpbGVkKE1lZGlhUGxh
eWVyOjpOZXR3b3JrRXJyb3IpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKHN0
cmVhbVByaXZhdGUuaGFzVmlkZW8oKSAmJiAhbV92aWRlb1NpbmspCi0gICAgICAgIGNyZWF0ZVZp
ZGVvU2luaygpOwotCi0gICAgaWYgKHN0cmVhbVByaXZhdGUuaGFzQXVkaW8oKSAmJiAhbV9hdWRp
b1NpbmspCi0gICAgICAgIGNyZWF0ZUdTVEF1ZGlvU2lua0JpbigpOwotCi0gICAgR1NUX0RFQlVH
KCJMb2FkaW5nIE1lZGlhU3RyZWFtUHJpdmF0ZSAlcCB2aWRlbzogJXMsIGF1ZGlvOiAlcyIsICZz
dHJlYW1Qcml2YXRlLCBzdHJlYW1Qcml2YXRlLmhhc1ZpZGVvKCkgPyAieWVzIjoibm8iLCBzdHJl
YW1Qcml2YXRlLmhhc0F1ZGlvKCkgPyAieWVzIjoibm8iKTsKLQotICAgIG1fcmVhZHlTdGF0ZSA9
IE1lZGlhUGxheWVyOjpIYXZlTm90aGluZzsKLSAgICBtX25ldHdvcmtTdGF0ZSA9IE1lZGlhUGxh
eWVyOjpMb2FkaW5nOwotICAgIG1fcGxheWVyLT5uZXR3b3JrU3RhdGVDaGFuZ2VkKCk7Ci0gICAg
bV9wbGF5ZXItPnJlYWR5U3RhdGVDaGFuZ2VkKCk7Ci0KLSAgICBmb3IgKGF1dG8gdHJhY2sgOiBt
X3N0cmVhbVByaXZhdGUtPnRyYWNrcygpKSB7Ci0gICAgICAgIGlmICghdHJhY2stPmVuYWJsZWQo
KSkgewotICAgICAgICAgICAgR1NUX0RFQlVHKCJUcmFjayAlcyBkaXNhYmxlZCIsIHRyYWNrLT5s
YWJlbCgpLmFzY2lpKCkuZGF0YSgpKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9
Ci0KLSAgICAgICAgR1NUX0RFQlVHKCJQcm9jZXNzaW5nIHRyYWNrICVzIiwgdHJhY2stPmxhYmVs
KCkuYXNjaWkoKS5kYXRhKCkpOwotCi0gICAgICAgIGJvb2wgb2JzZXJ2ZVRyYWNrID0gZmFsc2U7
Ci0KLSAgICAgICAgLy8gVE9ETzogU3VwcG9ydCBmb3IgbXVsdGlwbGUgdHJhY2tzIG9mIHRoZSBz
YW1lIHR5cGUuCi0KLSAgICAgICAgc3dpdGNoICh0cmFjay0+dHlwZSgpKSB7Ci0gICAgICAgIGNh
c2UgUmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlwZTo6QXVkaW86Ci0gICAgICAgICAgICBpZiAoIW1f
YXVkaW9UcmFjaykgewotICAgICAgICAgICAgICAgIFN0cmluZyBwcmVTZWxlY3RlZERldmljZSA9
IGdldGVudigiV0VCS0lUX0FVRElPX0RFVklDRSIpOwotICAgICAgICAgICAgICAgIGlmICghcHJl
U2VsZWN0ZWREZXZpY2UgfHwgKHByZVNlbGVjdGVkRGV2aWNlID09IHRyYWNrLT5sYWJlbCgpKSkg
ewotICAgICAgICAgICAgICAgICAgICBtX2F1ZGlvVHJhY2sgPSB0cmFjazsKLSAgICAgICAgICAg
ICAgICAgICAgYXV0byBhdWRpb1RyYWNrID0gQXVkaW9UcmFja1ByaXZhdGVNZWRpYVN0cmVhbTo6
Y3JlYXRlKCptX2F1ZGlvVHJhY2suZ2V0KCkpOwotICAgICAgICAgICAgICAgICAgICBtX3BsYXll
ci0+YWRkQXVkaW9UcmFjaygqYXVkaW9UcmFjayk7Ci0gICAgICAgICAgICAgICAgICAgIG1fYXVk
aW9UcmFja01hcC5hZGQodHJhY2stPmlkKCksIGF1ZGlvVHJhY2spOwotICAgICAgICAgICAgICAg
ICAgICBvYnNlcnZlVHJhY2sgPSB0cnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFJlYWx0aW1lTWVkaWFTb3VyY2U6
OlR5cGU6OlZpZGVvOgotICAgICAgICAgICAgaWYgKCFtX3ZpZGVvVHJhY2spIHsKLSAgICAgICAg
ICAgICAgICBTdHJpbmcgcHJlU2VsZWN0ZWREZXZpY2UgPSBnZXRlbnYoIldFQktJVF9WSURFT19E
RVZJQ0UiKTsKLSAgICAgICAgICAgICAgICBpZiAoIXByZVNlbGVjdGVkRGV2aWNlIHx8IChwcmVT
ZWxlY3RlZERldmljZSA9PSB0cmFjay0+bGFiZWwoKSkpIHsKLSAgICAgICAgICAgICAgICAgICAg
bV92aWRlb1RyYWNrID0gdHJhY2s7Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8gdmlkZW9UcmFj
ayA9IFZpZGVvVHJhY2tQcml2YXRlTWVkaWFTdHJlYW06OmNyZWF0ZSgqbV92aWRlb1RyYWNrLmdl
dCgpKTsKLSAgICAgICAgICAgICAgICAgICAgbV9wbGF5ZXItPmFkZFZpZGVvVHJhY2soKnZpZGVv
VHJhY2spOwotICAgICAgICAgICAgICAgICAgICB2aWRlb1RyYWNrLT5zZXRTZWxlY3RlZCh0cnVl
KTsKLSAgICAgICAgICAgICAgICAgICAgbV92aWRlb1RyYWNrTWFwLmFkZCh0cmFjay0+aWQoKSwg
dmlkZW9UcmFjayk7Ci0gICAgICAgICAgICAgICAgICAgIG9ic2VydmVUcmFjayA9IHRydWU7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgUmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlwZTo6Tm9uZToKLSAgICAgICAgICAgIEdT
VF9XQVJOSU5HKCJMb2FkaW5nIGEgdHJhY2sgd2l0aCBOb25lIHR5cGUiKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIGlmIChvYnNlcnZlVHJhY2spCi0gICAgICAgICAgICB0cmFjay0+YWRkT2JzZXJ2
ZXIoKnRoaXMpOwotICAgIH0KLQotICAgIG1fcmVhZHlTdGF0ZSA9IE1lZGlhUGxheWVyOjpIYXZl
RW5vdWdoRGF0YTsKLSAgICBtX3BsYXllci0+cmVhZHlTdGF0ZUNoYW5nZWQoKTsKLX0KLQotdm9p
ZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3I6OmxvYWRpbmdGYWlsZWQoTWVkaWFQbGF5
ZXI6Ok5ldHdvcmtTdGF0ZSBlcnJvcikKLXsKLSAgICBpZiAobV9uZXR3b3JrU3RhdGUgIT0gZXJy
b3IpIHsKLSAgICAgICAgR1NUX1dBUk5JTkcoIkxvYWRpbmcgZmFpbGVkLCBlcnJvcjogJWQiLCBl
cnJvcik7Ci0gICAgICAgIG1fbmV0d29ya1N0YXRlID0gZXJyb3I7Ci0gICAgICAgIG1fcGxheWVy
LT5uZXR3b3JrU3RhdGVDaGFuZ2VkKCk7Ci0gICAgfQotICAgIGlmIChtX3JlYWR5U3RhdGUgIT0g
TWVkaWFQbGF5ZXI6OkhhdmVOb3RoaW5nKSB7Ci0gICAgICAgIG1fcmVhZHlTdGF0ZSA9IE1lZGlh
UGxheWVyOjpIYXZlTm90aGluZzsKLSAgICAgICAgbV9wbGF5ZXItPnJlYWR5U3RhdGVDaGFuZ2Vk
KCk7Ci0gICAgfQotfQotCi1ib29sIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93cjo6ZGlk
TG9hZGluZ1Byb2dyZXNzKCkgY29uc3QKLXsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IGxvYWRp
bmcgcHJvZ3Jlc3Mgc3VwcG9ydC4KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBNZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXJPd3I6OmRpc2FibGVNZWRpYVRyYWNrcygpCi17Ci0gICAgaWYg
KG1fYXVkaW9UcmFjaykgewotICAgICAgICBHU1RfREVCVUcoIlN0b3A6IGRpc2Nvbm5lY3Rpbmcg
YXVkaW8iKTsKLSAgICAgICAgZ19vYmplY3Rfc2V0KG1fYXVkaW9SZW5kZXJlci5nZXQoKSwgImRp
c2FibGVkIiwgdHJ1ZSwgbnVsbHB0cik7Ci0gICAgICAgIG93cl9tZWRpYV9yZW5kZXJlcl9zZXRf
c291cmNlKE9XUl9NRURJQV9SRU5ERVJFUihtX2F1ZGlvUmVuZGVyZXIuZ2V0KCkpLCBudWxscHRy
KTsKLSAgICB9Ci0KLSAgICBpZiAobV92aWRlb1RyYWNrKSB7Ci0gICAgICAgIEdTVF9ERUJVRygi
U3RvcDogZGlzY29ubmVjdGluZyB2aWRlbyIpOwotICAgICAgICBnX29iamVjdF9zZXQobV92aWRl
b1JlbmRlcmVyLmdldCgpLCAiZGlzYWJsZWQiLCB0cnVlLCBudWxscHRyKTsKLSAgICAgICAgb3dy
X21lZGlhX3JlbmRlcmVyX3NldF9zb3VyY2UoT1dSX01FRElBX1JFTkRFUkVSKG1fdmlkZW9SZW5k
ZXJlci5nZXQoKSksIG51bGxwdHIpOwotICAgIH0KLX0KLQotdm9pZCBNZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXJPd3I6OnN0b3AoKQotewotICAgIGRpc2FibGVNZWRpYVRyYWNrcygpOwotICAg
IGlmIChtX3ZpZGVvVHJhY2spIHsKLSAgICAgICAgYXV0byB2aWRlb1RyYWNrID0gbV92aWRlb1Ry
YWNrTWFwLmdldChtX3ZpZGVvVHJhY2stPmlkKCkpOwotICAgICAgICBpZiAodmlkZW9UcmFjaykK
LSAgICAgICAgICAgIHZpZGVvVHJhY2stPnNldFNlbGVjdGVkKGZhbHNlKTsKLSAgICB9Ci19Ci0K
LXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyOjpyZWdpc3Rlck1lZGlhRW5naW5l
KE1lZGlhRW5naW5lUmVnaXN0cmFyIHJlZ2lzdHJhcikKLXsKLSAgICBpZiAoaW5pdGlhbGl6ZUdT
dHJlYW1lckFuZEdTdHJlYW1lckRlYnVnZ2luZygpKSB7Ci0gICAgICAgIHJlZ2lzdHJhcihbXShN
ZWRpYVBsYXllciogcGxheWVyKSB7Ci0gICAgICAgICAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1
ZTxNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3I+KHBsYXllcik7Ci0gICAgICAgIH0sIGdl
dFN1cHBvcnRlZFR5cGVzLCBzdXBwb3J0c1R5cGUsIG51bGxwdHIsIG51bGxwdHIsIG51bGxwdHIs
IG51bGxwdHIpOwotICAgIH0KLX0KLQotdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJP
d3I6OmdldFN1cHBvcnRlZFR5cGVzKEhhc2hTZXQ8U3RyaW5nLCBBU0NJSUNhc2VJbnNlbnNpdGl2
ZUhhc2g+JiB0eXBlcykKLXsKLSAgICAvLyBOb3Qgc3VwcG9ydGVkIGluIHRoaXMgbWVkaWEgcGxh
eWVyLgotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxIYXNoU2V0PFN0cmluZywgQVNDSUlDYXNl
SW5zZW5zaXRpdmVIYXNoPj4gY2FjaGU7Ci0gICAgdHlwZXMgPSBjYWNoZTsKLX0KLQotTWVkaWFQ
bGF5ZXI6OlN1cHBvcnRzVHlwZSBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3I6OnN1cHBv
cnRzVHlwZShjb25zdCBNZWRpYUVuZ2luZVN1cHBvcnRQYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzKQot
ewotICAgIGlmIChwYXJhbWV0ZXJzLmlzTWVkaWFTdHJlYW0pCi0gICAgICAgIHJldHVybiBNZWRp
YVBsYXllcjo6SXNTdXBwb3J0ZWQ7Ci0gICAgcmV0dXJuIE1lZGlhUGxheWVyOjpJc05vdFN1cHBv
cnRlZDsKLX0KLQotYm9vbCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3I6OmluaXRpYWxp
emVHU3RyZWFtZXJBbmRHU3RyZWFtZXJEZWJ1Z2dpbmcoKQotewotICAgIGlmICghaW5pdGlhbGl6
ZUdTdHJlYW1lcigpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBzdGF0aWMgc3RkOjpv
bmNlX2ZsYWcgZGVidWdSZWdpc3RlcmVkRmxhZzsKLSAgICBzdGQ6OmNhbGxfb25jZShkZWJ1Z1Jl
Z2lzdGVyZWRGbGFnLCBbXSB7Ci0gICAgICAgIEdTVF9ERUJVR19DQVRFR09SWV9JTklUKHdlYmtp
dF9vcGVud2VicnRjX2RlYnVnLCAid2Via2l0b3dycGxheWVyIiwgMCwgIldlYktpdCBPcGVuV2Vi
UlRDIHBsYXllciIpOwotICAgIH0pOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgTWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyOjpjcmVhdGVHU1RBdWRpb1NpbmtCaW4oKQotewot
ICAgIEFTU0VSVCghbV9hdWRpb1NpbmspOwotICAgIEdTVF9ERUJVRygiQ3JlYXRpbmcgYXVkaW8g
c2luayIpOwotICAgIC8vIEZJWE1FOiB2b2x1bWUvbXV0ZSBzdXBwb3J0OiBodHRwczovL3dlYmtp
dC5vcmcvYi8xNTM4MjguCi0KLSAgICAvLyBQcmUtcm9sbCBhbiBhdXRvYXVkaW9zaW5rIHNvIHRo
YXQgdGhlIHBsYXRmb3JtIGF1ZGlvIHNpbmsgaXMgY3JlYXRlZCBhbmQKLSAgICAvLyBjYW4gYmUg
cmV0cmlldmVkIGZyb20gdGhlIGF1dG9hdWRpb3NpbmsgYmluLgotICAgIEdSZWZQdHI8R3N0RWxl
bWVudD4gc2luayA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSgiYXV0b2F1ZGlvc2luayIsIG51
bGxwdHIpOwotICAgIEdzdENoaWxkUHJveHkqIGNoaWxkUHJveHkgPSBHU1RfQ0hJTERfUFJPWFko
c2luay5nZXQoKSk7Ci0gICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlKHNpbmsuZ2V0KCksIEdTVF9T
VEFURV9SRUFEWSk7Ci0gICAgR1JlZlB0cjxHc3RFbGVtZW50PiBwbGF0Zm9ybVNpbmsgPSBhZG9w
dEdSZWYoR1NUX0VMRU1FTlQoZ3N0X2NoaWxkX3Byb3h5X2dldF9jaGlsZF9ieV9pbmRleChjaGls
ZFByb3h5LCAwKSkpOwotICAgIEdzdEVsZW1lbnRGYWN0b3J5KiBmYWN0b3J5ID0gZ3N0X2VsZW1l
bnRfZ2V0X2ZhY3RvcnkocGxhdGZvcm1TaW5rLmdldCgpKTsKLQotICAgIC8vIERpc3Bvc2Ugbm93
IHVuLW5lZWRlZCBhdXRvYXVkaW9zaW5rLgotICAgIGdzdF9lbGVtZW50X3NldF9zdGF0ZShzaW5r
LmdldCgpLCBHU1RfU1RBVEVfTlVMTCk7Ci0KLSAgICAvLyBDcmVhdGUgYSBmcmVzaCBuZXcgYXVk
aW8gc2luayBjb21wYXRpYmxlIHdpdGggdGhlIHBsYXRmb3JtLgotICAgIG1fYXVkaW9TaW5rID0g
Z3N0X2VsZW1lbnRfZmFjdG9yeV9jcmVhdGUoZmFjdG9yeSwgbnVsbHB0cik7Ci0gICAgbV9hdWRp
b1JlbmRlcmVyID0gYWRvcHRHUmVmKG93cl9nc3RfYXVkaW9fcmVuZGVyZXJfbmV3KG1fYXVkaW9T
aW5rLmdldCgpKSk7Ci19Ci0KLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyOjp0
cmFja0VuZGVkKE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlJiB0cmFjaykKLXsKLSAgICBHU1RfREVC
VUcoIlRyYWNrIGVuZGVkIik7Ci0KLSAgICBpZiAoIW1fc3RyZWFtUHJpdmF0ZSB8fCAhbV9zdHJl
YW1Qcml2YXRlLT5hY3RpdmUoKSkgewotICAgICAgICBzdG9wKCk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICBpZiAoJnRyYWNrID09IG1fYXVkaW9UcmFjaykKLSAgICAgICAgZ19vYmpl
Y3Rfc2V0KG1fYXVkaW9SZW5kZXJlci5nZXQoKSwgImRpc2FibGVkIiwgdHJ1ZSwgbnVsbHB0cik7
Ci0gICAgZWxzZSBpZiAoJnRyYWNrID09IG1fdmlkZW9UcmFjaykgewotICAgICAgICBnX29iamVj
dF9zZXQobV92aWRlb1JlbmRlcmVyLmdldCgpLCAiZGlzYWJsZWQiLCB0cnVlLCBudWxscHRyKTsK
LSAgICAgICAgYXV0byYgcmVhbFRpbWVNZWRpYVNvdXJjZSA9IHN0YXRpY19jYXN0PFJlYWx0aW1l
TWVkaWFTb3VyY2VPd3ImPihtX3ZpZGVvVHJhY2stPnNvdXJjZSgpKTsKLSAgICAgICAgcmVhbFRp
bWVNZWRpYVNvdXJjZS5zZXRXaWR0aCgwKTsKLSAgICAgICAgcmVhbFRpbWVNZWRpYVNvdXJjZS5z
ZXRIZWlnaHQoMCk7Ci0gICAgICAgIGF1dG8gdmlkZW9UcmFjayA9IG1fdmlkZW9UcmFja01hcC5n
ZXQobV92aWRlb1RyYWNrLT5pZCgpKTsKLSAgICAgICAgaWYgKHZpZGVvVHJhY2spCi0gICAgICAg
ICAgICB2aWRlb1RyYWNrLT5zZXRTZWxlY3RlZChmYWxzZSk7Ci0gICAgfQotCi0gICAgZ2Jvb2xl
YW4gYXVkaW9EaXNhYmxlZDsKLSAgICBnYm9vbGVhbiB2aWRlb0Rpc2FibGVkOwotICAgIGdfb2Jq
ZWN0X2dldChtX2F1ZGlvUmVuZGVyZXIuZ2V0KCksICJkaXNhYmxlZCIsICZhdWRpb0Rpc2FibGVk
LCBudWxscHRyKTsKLSAgICBnX29iamVjdF9nZXQobV92aWRlb1JlbmRlcmVyLmdldCgpLCAiZGlz
YWJsZWQiLCAmdmlkZW9EaXNhYmxlZCwgbnVsbHB0cik7Ci0gICAgaWYgKGF1ZGlvRGlzYWJsZWQg
JiYgdmlkZW9EaXNhYmxlZCkgewotICAgICAgICBtX2VuZGVkID0gdHJ1ZTsKLSAgICAgICAgbV9w
bGF5ZXItPnRpbWVDaGFuZ2VkKCk7Ci0gICAgfQotfQotCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lck93cjo6dHJhY2tNdXRlZENoYW5nZWQoTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUm
IHRyYWNrKQotewotICAgIEdTVF9ERUJVRygiVHJhY2sgbXV0ZWQgc3RhdGUgY2hhbmdlZCIpOwot
Ci0gICAgbWF5YmVIYW5kbGVDaGFuZ2VNdXRlZFN0YXRlKHRyYWNrKTsKLX0KLQotdm9pZCBNZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3I6Om1heWJlSGFuZGxlQ2hhbmdlTXV0ZWRTdGF0ZShN
ZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZSYgdHJhY2spCi17Ci0gICAgYXV0byYgcmVhbFRpbWVNZWRp
YVNvdXJjZSA9IHN0YXRpY19jYXN0PFJlYWx0aW1lTWVkaWFTb3VyY2VPd3ImPih0cmFjay5zb3Vy
Y2UoKSk7Ci0gICAgYXV0byBtZWRpYVNvdXJjZSA9IE9XUl9NRURJQV9TT1VSQ0UocmVhbFRpbWVN
ZWRpYVNvdXJjZS5tZWRpYVNvdXJjZSgpKTsKLQotICAgIEdTVF9ERUJVRygiJXMgdHJhY2sgbm93
ICVzIiwgdHJhY2sudHlwZSgpID09IFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGU6OkF1ZGlvID8g
ImF1ZGlvIjoidmlkZW8iLCByZWFsVGltZU1lZGlhU291cmNlLm11dGVkKCkgPyAibXV0ZWQiOiJ1
bi1tdXRlZCIpOwotICAgIHN3aXRjaCAodHJhY2sudHlwZSgpKSB7Ci0gICAgY2FzZSBSZWFsdGlt
ZU1lZGlhU291cmNlOjpUeXBlOjpBdWRpbzoKLSAgICAgICAgaWYgKCFyZWFsVGltZU1lZGlhU291
cmNlLm11dGVkKCkpIHsKLSAgICAgICAgICAgIGdfb2JqZWN0X3NldChtX2F1ZGlvUmVuZGVyZXIu
Z2V0KCksICJkaXNhYmxlZCIsIGZhbHNlLCBudWxscHRyKTsKLSAgICAgICAgICAgIG93cl9tZWRp
YV9yZW5kZXJlcl9zZXRfc291cmNlKE9XUl9NRURJQV9SRU5ERVJFUihtX2F1ZGlvUmVuZGVyZXIu
Z2V0KCkpLCBtZWRpYVNvdXJjZSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBnX29i
amVjdF9zZXQobV9hdWRpb1JlbmRlcmVyLmdldCgpLCAiZGlzYWJsZWQiLCB0cnVlLCBudWxscHRy
KTsKLSAgICAgICAgICAgIG93cl9tZWRpYV9yZW5kZXJlcl9zZXRfc291cmNlKE9XUl9NRURJQV9S
RU5ERVJFUihtX2F1ZGlvUmVuZGVyZXIuZ2V0KCkpLCBudWxscHRyKTsKLSAgICAgICAgfQotICAg
ICAgICBpZiAobWVkaWFTb3VyY2UpCi0gICAgICAgICAgICBnX29iamVjdF9zZXQobWVkaWFTb3Vy
Y2UsICJtdXRlIiwgIXRyYWNrLmVuYWJsZWQoKSwgbnVsbHB0cik7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgUmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlwZTo6VmlkZW86Ci0gICAgICAgIGlmICgh
cmVhbFRpbWVNZWRpYVNvdXJjZS5tdXRlZCgpKSB7Ci0gICAgICAgICAgICBnX29iamVjdF9zZXQo
bV92aWRlb1JlbmRlcmVyLmdldCgpLCAiZGlzYWJsZWQiLCBmYWxzZSwgbnVsbHB0cik7Ci0gICAg
ICAgICAgICBvd3JfbWVkaWFfcmVuZGVyZXJfc2V0X3NvdXJjZShPV1JfTUVESUFfUkVOREVSRVIo
bV92aWRlb1JlbmRlcmVyLmdldCgpKSwgbWVkaWFTb3VyY2UpOwotICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgZ19vYmplY3Rfc2V0KG1fdmlkZW9SZW5kZXJlci5nZXQoKSwgImRpc2FibGVk
IiwgdHJ1ZSwgbnVsbHB0cik7Ci0gICAgICAgICAgICBvd3JfbWVkaWFfcmVuZGVyZXJfc2V0X3Nv
dXJjZShPV1JfTUVESUFfUkVOREVSRVIobV92aWRlb1JlbmRlcmVyLmdldCgpKSwgbnVsbHB0cik7
Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBSZWFsdGltZU1lZGlhU291cmNl
OjpUeXBlOjpOb25lOgotICAgICAgICBHU1RfV0FSTklORygiVHJ5aW5nIHRvIGNoYW5nZSBtdXRl
IHN0YXRlIG9mIGEgdHJhY2sgd2l0aCBOb25lIHR5cGUiKTsKLSAgICB9Ci19Ci0KLXZvaWQgTWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyOjp0cmFja1NldHRpbmdzQ2hhbmdlZChNZWRpYVN0
cmVhbVRyYWNrUHJpdmF0ZSYpCi17Ci0gICAgR1NUX0RFQlVHKCJUcmFjayBzZXR0aW5ncyBjaGFu
Z2VkIik7Ci19Ci0KLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyOjp0cmFja0Vu
YWJsZWRDaGFuZ2VkKE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlJiB0cmFjaykKLXsKLSAgICBHU1Rf
REVCVUcoIiVzIHRyYWNrIG5vdyAlcyIsIHRyYWNrLnR5cGUoKSA9PSBSZWFsdGltZU1lZGlhU291
cmNlOjpUeXBlOjpBdWRpbyA/ICJhdWRpbyI6InZpZGVvIiwgdHJhY2suZW5hYmxlZCgpID8gImVu
YWJsZWQiOiJkaXNhYmxlZCIpOwotCi0gICAgc3dpdGNoICh0cmFjay50eXBlKCkpIHsKLSAgICBj
YXNlIFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGU6OkF1ZGlvOgotICAgICAgICBnX29iamVjdF9z
ZXQobV9hdWRpb1JlbmRlcmVyLmdldCgpLCAiZGlzYWJsZWQiLCAhdHJhY2suZW5hYmxlZCgpLCBu
dWxscHRyKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBSZWFsdGltZU1lZGlhU291cmNlOjpU
eXBlOjpWaWRlbzoKLSAgICAgICAgZ19vYmplY3Rfc2V0KG1fdmlkZW9SZW5kZXJlci5nZXQoKSwg
ImRpc2FibGVkIiwgIXRyYWNrLmVuYWJsZWQoKSwgbnVsbHB0cik7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgUmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlwZTo6Tm9uZToKLSAgICAgICAgR1NUX1dB
Uk5JTkcoIlRyeWluZyB0byBjaGFuZ2UgZW5hYmxlZCBzdGF0ZSBvZiBhIHRyYWNrIHdpdGggTm9u
ZSB0eXBlIik7Ci0gICAgfQotfQotCi1Hc3RFbGVtZW50KiBNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXJPd3I6OmNyZWF0ZVZpZGVvU2luaygpCi17Ci0gICAgR3N0RWxlbWVudCogc2luazsKLSNp
ZiBVU0UoR1NUUkVBTUVSX0dMKQotICAgIC8vIE5vIG5lZWQgdG8gY3JlYXRlIGdsdXBsb2FkIGFu
ZCBnbGNvbG9yY29udmVydCBoZXJlIGJlY2F1c2UgdGhleSBhcmUKLSAgICAvLyBhbHJlYWR5IGNy
ZWF0ZWQgYnkgdGhlIHZpZGVvIHJlbmRlcmVyLgotICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBw
cm9iYWJseSByZXR1cm4gYSBSZWZQdHIuIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTY0NzA5LgotICAgIHNpbmsgPSBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXJCYXNlOjpjcmVhdGVHTEFwcFNpbmsoKTsKLSAgICBtX3ZpZGVvU2luayA9IHNpbms7Ci0jZWxz
ZQotICAgIGlmIChtX3N0cmVhbVByaXZhdGUtPmdldFZpZGVvUmVuZGVyZXIoKSkgewotICAgICAg
ICBtX3ZpZGVvUmVuZGVyZXIgPSBtX3N0cmVhbVByaXZhdGUtPmdldFZpZGVvUmVuZGVyZXIoKTsK
LSAgICAgICAgbV92aWRlb1NpbmsgPSBtX3N0cmVhbVByaXZhdGUtPmdldFZpZGVvU2lua0VsZW1l
bnQoKTsKLSAgICAgICAgZ19zaWduYWxfY29ubmVjdF9zd2FwcGVkKG1fdmlkZW9TaW5rLmdldCgp
LCAicmVwYWludC1yZXF1ZXN0ZWQiLCBHX0NBTExCQUNLKE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lckJhc2U6OnJlcGFpbnRDYWxsYmFjayksIHRoaXMpOwotICAgICAgICBnX29iamVjdF9nZXQo
bV92aWRlb1JlbmRlcmVyLmdldCgpLCAic2luayIsICZzaW5rLCBudWxscHRyKTsKLSAgICB9IGVs
c2UgewotICAgICAgICBHc3RFbGVtZW50KiBnbGRvd25sb2FkID0gZ3N0X2VsZW1lbnRfZmFjdG9y
eV9tYWtlKCJnbGRvd25sb2FkIiwgbnVsbHB0cik7Ci0gICAgICAgIEdzdEVsZW1lbnQqIHZpZGVv
Y29udmVydCA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSgidmlkZW9jb252ZXJ0IiwgbnVsbHB0
cik7Ci0gICAgICAgIEdzdEVsZW1lbnQqIHdlYmtpdFNpbmsgPSBNZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXJCYXNlOjpjcmVhdGVWaWRlb1NpbmsoKTsKLSAgICAgICAgc2luayA9IGdzdF9iaW5f
bmV3KG51bGxwdHIpOwotICAgICAgICBnc3RfYmluX2FkZF9tYW55KEdTVF9CSU4oc2luayksIGds
ZG93bmxvYWQsIHZpZGVvY29udmVydCwgd2Via2l0U2luaywgbnVsbHB0cik7Ci0gICAgICAgIGdz
dF9lbGVtZW50X2xpbmtfbWFueShnbGRvd25sb2FkLCB2aWRlb2NvbnZlcnQsIHdlYmtpdFNpbmss
IG51bGxwdHIpOwotICAgICAgICBHUmVmUHRyPEdzdFBhZD4gcGFkID0gYWRvcHRHUmVmKGdzdF9l
bGVtZW50X2dldF9zdGF0aWNfcGFkKGdsZG93bmxvYWQsICJzaW5rIikpOwotICAgICAgICBnc3Rf
ZWxlbWVudF9hZGRfcGFkKHNpbmssIGdzdF9naG9zdF9wYWRfbmV3KCJzaW5rIiwgcGFkLmdldCgp
KSk7Ci0gICAgfQotI2VuZGlmCi0gICAgaWYgKCFtX3ZpZGVvUmVuZGVyZXIpIHsKLSAgICAgICAg
bV92aWRlb1JlbmRlcmVyID0gYWRvcHRHUmVmKG93cl9nc3RfdmlkZW9fcmVuZGVyZXJfbmV3KHNp
bmspKTsKLSNpZiBVU0UoR1NUUkVBTUVSX0dMKQotICAgICAgICBvd3JfdmlkZW9fcmVuZGVyZXJf
c2V0X3JlcXVlc3RfY29udGV4dF9jYWxsYmFjayhPV1JfVklERU9fUkVOREVSRVIobV92aWRlb1Jl
bmRlcmVyLmdldCgpKSwgKE93clZpZGVvUmVuZGVyZXJSZXF1ZXN0Q29udGV4dENhbGxiYWNrKSBN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjpyZXF1ZXN0R0xDb250ZXh0LCB0aGlzLCBu
dWxscHRyKTsKLSNlbmRpZgotICAgICAgICBtX3N0cmVhbVByaXZhdGUtPnNldFZpZGVvUmVuZGVy
ZXIobV92aWRlb1JlbmRlcmVyLmdldCgpLCB2aWRlb1NpbmsoKSk7Ci0gICAgfQotICAgIHJldHVy
biBzaW5rOwotfQotCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93cjo6c2V0U2l6
ZShjb25zdCBJbnRTaXplJiBzaXplKQotewotICAgIGlmIChzaXplID09IG1fc2l6ZSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6c2V0U2l6
ZShzaXplKTsKLSAgICBpZiAobV92aWRlb1JlbmRlcmVyKQotICAgICAgICBnX29iamVjdF9zZXQo
bV92aWRlb1JlbmRlcmVyLmdldCgpLCAid2lkdGgiLCBzaXplLndpZHRoKCksICJoZWlnaHQiLCBz
aXplLmhlaWdodCgpLCBudWxscHRyKTsKLQotICAgIGlmICghbV92aWRlb1RyYWNrKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBhdXRvJiByZWFsVGltZU1lZGlhU291cmNlID0gc3RhdGljX2Nhc3Q8
UmVhbHRpbWVNZWRpYVNvdXJjZU93ciY+KG1fdmlkZW9UcmFjay0+c291cmNlKCkpOwotICAgIHJl
YWxUaW1lTWVkaWFTb3VyY2Uuc2V0V2lkdGgoc2l6ZS53aWR0aCgpKTsKLSAgICByZWFsVGltZU1l
ZGlhU291cmNlLnNldEhlaWdodChzaXplLmhlaWdodCgpKTsKLX0KLQotRmxvYXRTaXplIE1lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lck93cjo6bmF0dXJhbFNpemUoKSBjb25zdAotewotICAgIGF1
dG8gc2l6ZSA9IE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6Om5hdHVyYWxTaXplKCk7
Ci0KLSAgICAvLyBJbiBjYXNlIHdlIGFyZSBub3QgcGxheWluZyB0aGUgdmlkZW8gd2UgcmV0dXJu
IHRoZSBzaXplIHdlIHNldCB0byB0aGUgbWVkaWEgc291cmNlLgotICAgIGlmIChtX3ZpZGVvVHJh
Y2sgJiYgc2l6ZS5pc1plcm8oKSkgewotICAgICAgICBhdXRvJiByZWFsVGltZU1lZGlhU291cmNl
ID0gc3RhdGljX2Nhc3Q8UmVhbHRpbWVNZWRpYVNvdXJjZU93ciY+KG1fdmlkZW9UcmFjay0+c291
cmNlKCkpOwotICAgICAgICByZXR1cm4gcmVhbFRpbWVNZWRpYVNvdXJjZS5zaXplKCk7Ci0gICAg
fQotCi0gICAgcmV0dXJuIHNpemU7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2Vu
ZGlmIC8vIEVOQUJMRShWSURFTykgJiYgRU5BQkxFKE1FRElBX1NUUkVBTSkgJiYgVVNFKEdTVFJF
QU1FUikgJiYgVVNFKE9QRU5XRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyT3dyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMzNDYz
MGU0NWMzNDgxYmE3ZDQyZjU2NjM3ZTBkYWEwNTE1NGJkMmYuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93ci5oCisrKyAvZGV2L251
bGwKQEAgLTEsMTI4ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IChDKSAyMDE1IElnYWxpYSBT
LkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiAgQ29weXJpZ2h0IChDKSAyMDE1IE1ldHJvbG9n
aWNhbC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
LSAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAq
ICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAq
ICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVy
YWwgUHVibGljCi0gKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3
cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQotICov
Ci0KLSNpZm5kZWYgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyX2gKLSNkZWZpbmUgTWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyX2gKLQotI2lmIEVOQUJMRShWSURFTykgJiYgRU5B
QkxFKE1FRElBX1NUUkVBTSkgJiYgVVNFKEdTVFJFQU1FUikgJiYgVVNFKE9QRU5XRUJSVEMpCi0K
LSNpbmNsdWRlICJBdWRpb1RyYWNrUHJpdmF0ZU1lZGlhU3RyZWFtLmgiCi0jaW5jbHVkZSAiTWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZS5oIgotI2luY2x1ZGUgIk1lZGlhU3RyZWFtVHJh
Y2tQcml2YXRlLmgiCi0jaW5jbHVkZSAiVmlkZW9UcmFja1ByaXZhdGVNZWRpYVN0cmVhbS5oIgot
Ci10eXBlZGVmIHN0cnVjdCBfT3dyR3N0VmlkZW9SZW5kZXJlciBPd3JHc3RWaWRlb1JlbmRlcmVy
OwotdHlwZWRlZiBzdHJ1Y3QgX093ckdzdEF1ZGlvUmVuZGVyZXIgT3dyR3N0QXVkaW9SZW5kZXJl
cjsKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBNZWRpYVN0cmVhbVByaXZhdGU7Ci1j
bGFzcyBSZWFsdGltZU1lZGlhU291cmNlT3dyOwotCi1jbGFzcyBNZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXJPd3IgOiBwdWJsaWMgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZSwgcHJp
dmF0ZSBNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZTo6T2JzZXJ2ZXIgewotcHVibGljOgotICAgIGV4
cGxpY2l0IE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93cihNZWRpYVBsYXllciopOwotICAg
IH5NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3IoKTsKLQotICAgIHN0YXRpYyB2b2lkIHJl
Z2lzdGVyTWVkaWFFbmdpbmUoTWVkaWFFbmdpbmVSZWdpc3RyYXIpOwotCi0gICAgdm9pZCBzZXRT
aXplKGNvbnN0IEludFNpemUmKSBmaW5hbDsKLQotICAgIEZsb2F0U2l6ZSBuYXR1cmFsU2l6ZSgp
IGNvbnN0IGZpbmFsOwotCi1wcml2YXRlOgotICAgIEdzdEVsZW1lbnQqIGNyZWF0ZVZpZGVvU2lu
aygpIGZpbmFsOwotICAgIEdzdEVsZW1lbnQqIGF1ZGlvU2luaygpIGNvbnN0IGZpbmFsIHsgcmV0
dXJuIG1fYXVkaW9TaW5rLmdldCgpOyB9Ci0gICAgYm9vbCBpc0xpdmVTdHJlYW0oKSBjb25zdCBm
aW5hbCB7IHJldHVybiB0cnVlOyB9Ci0KLSAgICBTdHJpbmcgZW5naW5lRGVzY3JpcHRpb24oKSBj
b25zdCBmaW5hbCB7IHJldHVybiAiT3BlbldlYlJUQyI7IH0KLQotICAgIHZvaWQgbG9hZChjb25z
dCBTdHJpbmcmKSBmaW5hbDsKLSNpZiBFTkFCTEUoTUVESUFfU09VUkNFKQotICAgIHZvaWQgbG9h
ZChjb25zdCBTdHJpbmcmLCBNZWRpYVNvdXJjZVByaXZhdGVDbGllbnQqKSBmaW5hbDsKLSNlbmRp
ZgotICAgIHZvaWQgbG9hZChNZWRpYVN0cmVhbVByaXZhdGUmKSBmaW5hbDsKLSAgICB2b2lkIGNh
bmNlbExvYWQoKSBmaW5hbCB7IH0KLQotICAgIHZvaWQgcHJlcGFyZVRvUGxheSgpIGZpbmFsIHsg
fQotICAgIHZvaWQgcGxheSgpIGZpbmFsOwotICAgIHZvaWQgcGF1c2UoKSBmaW5hbDsKLQotICAg
IGJvb2wgaGFzVmlkZW8oKSBjb25zdCBmaW5hbDsKLSAgICBib29sIGhhc0F1ZGlvKCkgY29uc3Qg
ZmluYWw7Ci0KLSAgICBmbG9hdCBkdXJhdGlvbigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIDA7IH0K
LQotICAgIGZsb2F0IGN1cnJlbnRUaW1lKCkgY29uc3QgZmluYWw7Ci0gICAgdm9pZCBzZWVrKGZs
b2F0KSBmaW5hbCB7IH0KLSAgICBib29sIHNlZWtpbmcoKSBjb25zdCBmaW5hbCB7IHJldHVybiBm
YWxzZTsgfQotCi0gICAgdm9pZCBzZXRSYXRlKGZsb2F0KSBmaW5hbCB7IH0KLSAgICB2b2lkIHNl
dFByZXNlcnZlc1BpdGNoKGJvb2wpIGZpbmFsIHsgfQotICAgIGJvb2wgcGF1c2VkKCkgY29uc3Qg
ZmluYWwgeyByZXR1cm4gbV9wYXVzZWQ7IH0KLQotICAgIHZvaWQgc2V0Vm9sdW1lKGZsb2F0KSBm
aW5hbDsKLSAgICB2b2lkIHNldE11dGVkKGJvb2wpIGZpbmFsOwotCi0gICAgYm9vbCBoYXNDbG9z
ZWRDYXB0aW9ucygpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdm9pZCBzZXRD
bG9zZWRDYXB0aW9uc1Zpc2libGUoYm9vbCkgZmluYWwgeyB9OwotCi0gICAgZmxvYXQgbWF4VGlt
ZVNlZWthYmxlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gMDsgfQotICAgIHN0ZDo6dW5pcXVlX3B0
cjxQbGF0Zm9ybVRpbWVSYW5nZXM+IGJ1ZmZlcmVkKCkgY29uc3QgZmluYWwgeyByZXR1cm4gc3Rk
OjptYWtlX3VuaXF1ZTxQbGF0Zm9ybVRpbWVSYW5nZXM+KCk7IH0KLSAgICBib29sIGRpZExvYWRp
bmdQcm9ncmVzcygpIGNvbnN0IGZpbmFsOwotCi0gICAgdW5zaWduZWQgbG9uZyBsb25nIHRvdGFs
Qnl0ZXMoKSBjb25zdCBmaW5hbCB7IHJldHVybiAwOyB9Ci0KLSAgICBib29sIGNhbkxvYWRQb3N0
ZXIoKSBjb25zdCBmaW5hbCB7IHJldHVybiBmYWxzZTsgfQotICAgIHZvaWQgc2V0UG9zdGVyKGNv
bnN0IFN0cmluZyYpIGZpbmFsIHsgfQotICAgIGJvb2wgZW5kZWQoKSBjb25zdCBmaW5hbCB7IHJl
dHVybiBtX2VuZGVkOyB9Ci0KLSAgICAvLyBNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZTo6T2JzZXJ2
ZXIgaW1wbGVtZW50YXRpb24uCi0gICAgdm9pZCB0cmFja0VuZGVkKE1lZGlhU3RyZWFtVHJhY2tQ
cml2YXRlJikgZmluYWw7Ci0gICAgdm9pZCB0cmFja011dGVkQ2hhbmdlZChNZWRpYVN0cmVhbVRy
YWNrUHJpdmF0ZSYpIGZpbmFsOwotICAgIHZvaWQgdHJhY2tTZXR0aW5nc0NoYW5nZWQoTWVkaWFT
dHJlYW1UcmFja1ByaXZhdGUmKSBmaW5hbDsKLSAgICB2b2lkIHRyYWNrRW5hYmxlZENoYW5nZWQo
TWVkaWFTdHJlYW1UcmFja1ByaXZhdGUmKSBmaW5hbDsKLQotICAgIHN0YXRpYyB2b2lkIGdldFN1
cHBvcnRlZFR5cGVzKEhhc2hTZXQ8U3RyaW5nLCBBU0NJSUNhc2VJbnNlbnNpdGl2ZUhhc2g+Jik7
Ci0gICAgc3RhdGljIE1lZGlhUGxheWVyOjpTdXBwb3J0c1R5cGUgc3VwcG9ydHNUeXBlKGNvbnN0
IE1lZGlhRW5naW5lU3VwcG9ydFBhcmFtZXRlcnMmKTsKLSAgICBzdGF0aWMgYm9vbCBpbml0aWFs
aXplR1N0cmVhbWVyQW5kR1N0cmVhbWVyRGVidWdnaW5nKCk7Ci0gICAgdm9pZCBjcmVhdGVHU1RB
dWRpb1NpbmtCaW4oKTsKLSAgICB2b2lkIGxvYWRpbmdGYWlsZWQoTWVkaWFQbGF5ZXI6Ok5ldHdv
cmtTdGF0ZSBlcnJvcik7Ci0gICAgdm9pZCBzdG9wKCk7Ci0gICAgdm9pZCBtYXliZUhhbmRsZUNo
YW5nZU11dGVkU3RhdGUoTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUmKTsKLSAgICB2b2lkIGRpc2Fi
bGVNZWRpYVRyYWNrcygpOwotCi0gICAgYm9vbCBtX3BhdXNlZCB7IHRydWUgfTsKLSAgICBib29s
IG1fZW5kZWQgeyBmYWxzZSB9OwotICAgIFJlZlB0cjxNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZT4g
bV92aWRlb1RyYWNrOwotICAgIFJlZlB0cjxNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZT4gbV9hdWRp
b1RyYWNrOwotICAgIEdSZWZQdHI8R3N0RWxlbWVudD4gbV9hdWRpb1Npbms7Ci0gICAgUmVmUHRy
PE1lZGlhU3RyZWFtUHJpdmF0ZT4gbV9zdHJlYW1Qcml2YXRlOwotICAgIEdSZWZQdHI8T3dyR3N0
VmlkZW9SZW5kZXJlcj4gbV92aWRlb1JlbmRlcmVyOwotICAgIEdSZWZQdHI8T3dyR3N0QXVkaW9S
ZW5kZXJlcj4gbV9hdWRpb1JlbmRlcmVyOwotCi0gICAgSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxB
dWRpb1RyYWNrUHJpdmF0ZU1lZGlhU3RyZWFtPj4gbV9hdWRpb1RyYWNrTWFwOwotICAgIEhhc2hN
YXA8U3RyaW5nLCBSZWZQdHI8VmlkZW9UcmFja1ByaXZhdGVNZWRpYVN0cmVhbT4+IG1fdmlkZW9U
cmFja01hcDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJM
RShWSURFTykgJiYgRU5BQkxFKE1FRElBX1NUUkVBTSkgJiYgVVNFKEdTVFJFQU1FUikgJiYgVVNF
KE9QRU5XRUJSVEMpCi0KLSNlbmRpZiAvLyBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3Jf
aApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFF
bmRwb2ludC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYUVu
ZHBvaW50LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDEzNzVmZDRjMDQxMzhk
ZmUxNjVjMzU0YjIxZWE5YjU2MjVmYWZiYy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRp
YUVuZHBvaW50LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDg2ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTUgRXJpY3Nzb24gQUIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqICAgIGluIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqICAgIGRp
c3RyaWJ1dGlvbi4KLSAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgRXJpY3Nzb24gbm9yIHRoZSBu
YW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0gKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSAqICAgIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
LSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1
ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKFdFQl9SVEMpCi0jaW5jbHVkZSAiTWVkaWFFbmRw
b2ludC5oIgotCi0jaW5jbHVkZSAiTWVkaWFQYXlsb2FkLmgiCi0jaW5jbHVkZSAiUlRDRGF0YUNo
YW5uZWxIYW5kbGVyLmgiCi0jaW5jbHVkZSAiUmVhbHRpbWVNZWRpYVNvdXJjZS5oIgotCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEVtcHR5UmVhbHRpbWVNZWRpYVNvdXJjZSBmaW5hbCA6
IHB1YmxpYyBSZWFsdGltZU1lZGlhU291cmNlIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEVt
cHR5UmVhbHRpbWVNZWRpYVNvdXJjZT4gY3JlYXRlKCkgeyByZXR1cm4gYWRvcHRSZWYoKm5ldyBF
bXB0eVJlYWx0aW1lTWVkaWFTb3VyY2UoKSk7IH0KLQotcHJpdmF0ZToKLSAgICBFbXB0eVJlYWx0
aW1lTWVkaWFTb3VyY2UoKSA6IFJlYWx0aW1lTWVkaWFTb3VyY2UoZW1wdHlTdHJpbmcoKSwgVHlw
ZTo6Tm9uZSwgZW1wdHlTdHJpbmcoKSkgeyB9Ci0KLSAgICBjb25zdCBSZWFsdGltZU1lZGlhU291
cmNlQ2FwYWJpbGl0aWVzJiBjYXBhYmlsaXRpZXMoKSBjb25zdCBmaW5hbCB7IHJldHVybiBSZWFs
dGltZU1lZGlhU291cmNlQ2FwYWJpbGl0aWVzOjplbXB0eUNhcGFiaWxpdGllcygpOyB9Ci0gICAg
Y29uc3QgUmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzJiBzZXR0aW5ncygpIGNvbnN0IGZpbmFs
IHsgcmV0dXJuIG1fc291cmNlU2V0dGluZ3M7IH0KLQotICAgIFJlYWx0aW1lTWVkaWFTb3VyY2VT
ZXR0aW5ncyBtX3NvdXJjZVNldHRpbmdzOwotfTsKLQotY2xhc3MgRW1wdHlNZWRpYUVuZHBvaW50
IGZpbmFsIDogcHVibGljIE1lZGlhRW5kcG9pbnQgewotcHJpdmF0ZToKLSAgICB2b2lkIHNldENv
bmZpZ3VyYXRpb24oTWVkaWFFbmRwb2ludENvbmZpZ3VyYXRpb24mJikgZmluYWwgeyB9Ci0KLSAg
ICB2b2lkIGdlbmVyYXRlRHRsc0luZm8oKSBmaW5hbCB7IH0KLSAgICBNZWRpYVBheWxvYWRWZWN0
b3IgZ2V0RGVmYXVsdEF1ZGlvUGF5bG9hZHMoKSBmaW5hbCB7IHJldHVybiBNZWRpYVBheWxvYWRW
ZWN0b3IoKTsgfQotICAgIE1lZGlhUGF5bG9hZFZlY3RvciBnZXREZWZhdWx0VmlkZW9QYXlsb2Fk
cygpIGZpbmFsIHsgcmV0dXJuIE1lZGlhUGF5bG9hZFZlY3RvcigpOyB9Ci0gICAgTWVkaWFQYXls
b2FkVmVjdG9yIGZpbHRlclBheWxvYWRzKGNvbnN0IE1lZGlhUGF5bG9hZFZlY3RvciYsIGNvbnN0
IE1lZGlhUGF5bG9hZFZlY3RvciYpIGZpbmFsIHsgcmV0dXJuIE1lZGlhUGF5bG9hZFZlY3Rvcigp
OyB9Ci0KLSAgICBVcGRhdGVSZXN1bHQgdXBkYXRlUmVjZWl2ZUNvbmZpZ3VyYXRpb24oTWVkaWFF
bmRwb2ludFNlc3Npb25Db25maWd1cmF0aW9uKiwgYm9vbCkgZmluYWwgeyByZXR1cm4gVXBkYXRl
UmVzdWx0OjpGYWlsZWQ7IH0KLSAgICBVcGRhdGVSZXN1bHQgdXBkYXRlU2VuZENvbmZpZ3VyYXRp
b24oTWVkaWFFbmRwb2ludFNlc3Npb25Db25maWd1cmF0aW9uKiwgY29uc3QgUmVhbHRpbWVNZWRp
YVNvdXJjZU1hcCYsIGJvb2wpIGZpbmFsIHsgcmV0dXJuIFVwZGF0ZVJlc3VsdDo6RmFpbGVkOyB9
Ci0KLSAgICB2b2lkIGFkZFJlbW90ZUNhbmRpZGF0ZShjb25zdCBJY2VDYW5kaWRhdGUmLCBjb25z
dCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmKSBmaW5hbCB7IH0KLQotICAg
IFJlZjxSZWFsdGltZU1lZGlhU291cmNlPiBjcmVhdGVNdXRlZFJlbW90ZVNvdXJjZShjb25zdCBT
dHJpbmcmLCBSZWFsdGltZU1lZGlhU291cmNlOjpUeXBlKSBmaW5hbCB7IHJldHVybiBFbXB0eVJl
YWx0aW1lTWVkaWFTb3VyY2U6OmNyZWF0ZSgpOyB9Ci0gICAgdm9pZCByZXBsYWNlU2VuZFNvdXJj
ZShSZWFsdGltZU1lZGlhU291cmNlJiwgY29uc3QgU3RyaW5nJikgZmluYWwgeyB9Ci0gICAgdm9p
ZCByZXBsYWNlTXV0ZWRSZW1vdGVTb3VyY2VNaWQoY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5n
JikgZmluYWwgeyB9OwotCi0gICAgc3RkOjp1bmlxdWVfcHRyPFJUQ0RhdGFDaGFubmVsSGFuZGxl
cj4gY3JlYXRlRGF0YUNoYW5uZWxIYW5kbGVyKGNvbnN0IFN0cmluZyYsIGNvbnN0IFJUQ0RhdGFD
aGFubmVsSW5pdCYpIGZpbmFsIHsgcmV0dXJuIG51bGxwdHI7IH0KLSAgICB2b2lkIHN0b3AoKSBm
aW5hbCB7IH0KLX07Ci0KLXN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8TWVkaWFFbmRwb2ludD4gY3Jl
YXRlTWVkaWFFbmRwb2ludChNZWRpYUVuZHBvaW50Q2xpZW50JikKLXsKLSAgICByZXR1cm4gc3Rk
OjptYWtlX3VuaXF1ZTxFbXB0eU1lZGlhRW5kcG9pbnQ+KCk7Ci19Ci0KLUNyZWF0ZU1lZGlhRW5k
cG9pbnQgTWVkaWFFbmRwb2ludDo6Y3JlYXRlID0gY3JlYXRlTWVkaWFFbmRwb2ludDsKLQotfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKFdFQl9SVEMpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYUVuZHBvaW50Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYUVuZHBvaW50LmgKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUxYjUxZDRlMDhhM2RkM2VmYjA5YTAxMWUzMjk3
NGQyOGI3OWRmNzguLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFFbmRwb2ludC5oCisr
KyAvZGV2L251bGwKQEAgLTEsMTA4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUg
RXJpY3Nzb24gQUIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyCi0gKiAgICBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiAgICBkaXN0cmlidXRpb24uCi0gKiAz
LiBOZWl0aGVyIHRoZSBuYW1lIG9mIEVyaWNzc29uIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRy
aWJ1dG9ycwotICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQgZnJvbSB0aGlzCi0gKiAgICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICog
TElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
Ci0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaWYgRU5B
QkxFKFdFQl9SVEMpCi0KLSNpbmNsdWRlICJNZWRpYUVuZHBvaW50Q29uZmlndXJhdGlvbi5oIgot
I2luY2x1ZGUgIlBlZXJDb25uZWN0aW9uQmFja2VuZC5oIgotI2luY2x1ZGUgIlJUQ0ljZVRyYW5z
cG9ydFN0YXRlLmgiCi0jaW5jbHVkZSAiUmVhbHRpbWVNZWRpYVNvdXJjZS5oIgotI2luY2x1ZGUg
PHd0Zi9IYXNoTWFwLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgTWVkaWFFbmRwb2ludDsKLWNsYXNzIE1lZGlhRW5kcG9p
bnRDbGllbnQ7Ci1jbGFzcyBNZWRpYUVuZHBvaW50U2Vzc2lvbkNvbmZpZ3VyYXRpb247Ci1jbGFz
cyBNZWRpYVN0cmVhbVRyYWNrOwotY2xhc3MgUlRDRGF0YUNoYW5uZWxIYW5kbGVyOwotY2xhc3Mg
UmVhbHRpbWVNZWRpYVNvdXJjZTsKLQotc3RydWN0IEljZUNhbmRpZGF0ZTsKLXN0cnVjdCBNZWRp
YVBheWxvYWQ7Ci1zdHJ1Y3QgUlRDRGF0YUNoYW5uZWxJbml0OwotCi10eXBlZGVmIHN0ZDo6dW5p
cXVlX3B0cjxNZWRpYUVuZHBvaW50PiAoKkNyZWF0ZU1lZGlhRW5kcG9pbnQpKE1lZGlhRW5kcG9p
bnRDbGllbnQmKTsKLXR5cGVkZWYgVmVjdG9yPE1lZGlhUGF5bG9hZD4gTWVkaWFQYXlsb2FkVmVj
dG9yOwotdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgUmVhbHRpbWVNZWRpYVNvdXJjZSo+IFJlYWx0
aW1lTWVkaWFTb3VyY2VNYXA7Ci0KLWNsYXNzIE1lZGlhRW5kcG9pbnQgewotcHVibGljOgotICAg
IFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBDcmVhdGVNZWRpYUVuZHBvaW50IGNyZWF0ZTsKLSAgICB2
aXJ0dWFsIH5NZWRpYUVuZHBvaW50KCkgeyB9Ci0KLSAgICBlbnVtIGNsYXNzIFVwZGF0ZVJlc3Vs
dCB7Ci0gICAgICAgIFN1Y2Nlc3MsCi0gICAgICAgIFN1Y2Nlc3NXaXRoSWNlUmVzdGFydCwKLSAg
ICAgICAgRmFpbGVkCi0gICAgfTsKLQotICAgIHZpcnR1YWwgdm9pZCBzZXRDb25maWd1cmF0aW9u
KE1lZGlhRW5kcG9pbnRDb25maWd1cmF0aW9uJiYpID0gMDsKLQotICAgIHZpcnR1YWwgdm9pZCBn
ZW5lcmF0ZUR0bHNJbmZvKCkgPSAwOwotICAgIHZpcnR1YWwgTWVkaWFQYXlsb2FkVmVjdG9yIGdl
dERlZmF1bHRBdWRpb1BheWxvYWRzKCkgPSAwOwotICAgIHZpcnR1YWwgTWVkaWFQYXlsb2FkVmVj
dG9yIGdldERlZmF1bHRWaWRlb1BheWxvYWRzKCkgPSAwOwotICAgIHZpcnR1YWwgTWVkaWFQYXls
b2FkVmVjdG9yIGZpbHRlclBheWxvYWRzKGNvbnN0IE1lZGlhUGF5bG9hZFZlY3RvciYgcmVtb3Rl
UGF5bG9hZHMsIGNvbnN0IE1lZGlhUGF5bG9hZFZlY3RvciYgZGVmYXVsdFBheWxvYWRzKSA9IDA7
Ci0KLSAgICB2aXJ0dWFsIFVwZGF0ZVJlc3VsdCB1cGRhdGVSZWNlaXZlQ29uZmlndXJhdGlvbihN
ZWRpYUVuZHBvaW50U2Vzc2lvbkNvbmZpZ3VyYXRpb24qLCBib29sIGlzSW5pdGlhdG9yKSA9IDA7
Ci0gICAgdmlydHVhbCBVcGRhdGVSZXN1bHQgdXBkYXRlU2VuZENvbmZpZ3VyYXRpb24oTWVkaWFF
bmRwb2ludFNlc3Npb25Db25maWd1cmF0aW9uKiwgY29uc3QgUmVhbHRpbWVNZWRpYVNvdXJjZU1h
cCYsIGJvb2wgaXNJbml0aWF0b3IpID0gMDsKLQotICAgIHZpcnR1YWwgdm9pZCBhZGRSZW1vdGVD
YW5kaWRhdGUoY29uc3QgSWNlQ2FuZGlkYXRlJiwgY29uc3QgU3RyaW5nJiBtaWQsIGNvbnN0IFN0
cmluZyYgdWZyYWcsIGNvbnN0IFN0cmluZyYgcGFzc3dvcmQpID0gMDsKLQotICAgIHZpcnR1YWwg
UmVmPFJlYWx0aW1lTWVkaWFTb3VyY2U+IGNyZWF0ZU11dGVkUmVtb3RlU291cmNlKGNvbnN0IFN0
cmluZyYgbWlkLCBSZWFsdGltZU1lZGlhU291cmNlOjpUeXBlKSA9IDA7Ci0gICAgdmlydHVhbCB2
b2lkIHJlcGxhY2VTZW5kU291cmNlKFJlYWx0aW1lTWVkaWFTb3VyY2UmLCBjb25zdCBTdHJpbmcm
IG1pZCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZXBsYWNlTXV0ZWRSZW1vdGVTb3VyY2VNaWQo
Y29uc3QgU3RyaW5nJiBvbGRNaWQsIGNvbnN0IFN0cmluZyYgbmV3TWlkKSA9IDA7Ci0KLSAgICB2
aXJ0dWFsIHN0ZDo6dW5pcXVlX3B0cjxSVENEYXRhQ2hhbm5lbEhhbmRsZXI+IGNyZWF0ZURhdGFD
aGFubmVsSGFuZGxlcihjb25zdCBTdHJpbmcmLCBjb25zdCBSVENEYXRhQ2hhbm5lbEluaXQmKSA9
IDA7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgc3RvcCgpID0gMDsKLQotICAgIHZpcnR1YWwgdm9pZCBl
bXVsYXRlUGxhdGZvcm1FdmVudChjb25zdCBTdHJpbmcmKSB7IH07Ci0KLSAgICB2aXJ0dWFsIHZv
aWQgZ2V0U3RhdHMoTWVkaWFTdHJlYW1UcmFjayosIFBlZXJDb25uZWN0aW9uOjpTdGF0c1Byb21p
c2UmJiBwcm9taXNlKSB7IHByb21pc2UucmVqZWN0KE5vdFN1cHBvcnRlZEVycm9yKTsgfQotfTsK
LQotY2xhc3MgTWVkaWFFbmRwb2ludENsaWVudCB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB2b2lk
IGdvdER0bHNGaW5nZXJwcmludChjb25zdCBTdHJpbmcmIGZpbmdlcnByaW50LCBjb25zdCBTdHJp
bmcmIGZpbmdlcnByaW50RnVuY3Rpb24pID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZ290SWNlQ2Fu
ZGlkYXRlKGNvbnN0IFN0cmluZyYgbWlkLCBJY2VDYW5kaWRhdGUmJikgPSAwOwotICAgIHZpcnR1
YWwgdm9pZCBkb25lR2F0aGVyaW5nQ2FuZGlkYXRlcyhjb25zdCBTdHJpbmcmIG1pZCkgPSAwOwot
ICAgIHZpcnR1YWwgdm9pZCBpY2VUcmFuc3BvcnRTdGF0ZUNoYW5nZWQoY29uc3QgU3RyaW5nJiBt
aWQsIFJUQ0ljZVRyYW5zcG9ydFN0YXRlKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIH5NZWRpYUVuZHBv
aW50Q2xpZW50KCkgeyB9Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAv
LyBFTkFCTEUoV0VCX1JUQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21l
ZGlhc3RyZWFtL01lZGlhRW5kcG9pbnRTZXNzaW9uQ29uZmlndXJhdGlvbi5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFFbmRwb2ludFNlc3Npb25Db25maWd1cmF0
aW9uLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmMmJkMWU4Yjk3YzRlNzg5OTE5
MTMxM2RhMmE4ZmVmMmJiMzhlZDkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFFbmRw
b2ludFNlc3Npb25Db25maWd1cmF0aW9uLmgKKysrIC9kZXYvbnVsbApAQCAtMSw5MyArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEVyaWNzc29uIEFCLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiAgICBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlCi0gKiAgICBkaXN0cmlidXRpb24uCi0gKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIEVyaWNz
c29uIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICogICAgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0gKiAgICBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQg
Q09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdI
VAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLSNpZm5kZWYgTWVkaWFFbmRwb2ludFNlc3Npb25Db25maWd1cmF0aW9uX2gKLSNkZWZp
bmUgTWVkaWFFbmRwb2ludFNlc3Npb25Db25maWd1cmF0aW9uX2gKLQotI2lmIEVOQUJMRShXRUJf
UlRDKQotCi0jaW5jbHVkZSAiUGVlckNvbm5lY3Rpb25TdGF0ZXMuaCIKLSNpbmNsdWRlICJQZWVy
TWVkaWFEZXNjcmlwdGlvbi5oIgotI2luY2x1ZGUgPHd0Zi9DcnlwdG9ncmFwaGljYWxseVJhbmRv
bU51bWJlci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIE1lZGlhRW5kcG9pbnRT
ZXNzaW9uQ29uZmlndXJhdGlvbiA6IHB1YmxpYyBSZWZDb3VudGVkPE1lZGlhRW5kcG9pbnRTZXNz
aW9uQ29uZmlndXJhdGlvbj4gewotcHVibGljOgotICAgIHN0YXRpYyBSZWZQdHI8TWVkaWFFbmRw
b2ludFNlc3Npb25Db25maWd1cmF0aW9uPiBjcmVhdGUoKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBNZWRpYUVuZHBvaW50U2Vzc2lvbkNvbmZpZ3VyYXRpb24oKSk7Ci0gICAg
fQotICAgIHZpcnR1YWwgfk1lZGlhRW5kcG9pbnRTZXNzaW9uQ29uZmlndXJhdGlvbigpIHsgfQot
Ci0gICAgaW50NjRfdCBzZXNzaW9uSWQoKSBjb25zdCB7IHJldHVybiBtX3Nlc3Npb25JZDsgfQot
ICAgIHZvaWQgc2V0U2Vzc2lvbklkKGludDY0X3Qgc2Vzc2lvbklkKSB7IG1fc2Vzc2lvbklkID0g
c2Vzc2lvbklkOyB9Ci0KLSAgICB1bnNpZ25lZCBzZXNzaW9uVmVyc2lvbigpIGNvbnN0IHsgcmV0
dXJuIG1fc2Vzc2lvblZlcnNpb247IH0KLSAgICB2b2lkIHNldFNlc3Npb25WZXJzaW9uKHVuc2ln
bmVkIHNlc3Npb25WZXJzaW9uKSB7IG1fc2Vzc2lvblZlcnNpb24gPSBzZXNzaW9uVmVyc2lvbjsg
fQotCi0gICAgVmVjdG9yPFBlZXJNZWRpYURlc2NyaXB0aW9uPiYgbWVkaWFEZXNjcmlwdGlvbnMo
KSB7IHJldHVybiBtX21lZGlhRGVzY3JpcHRpb25zOyB9Ci0gICAgY29uc3QgVmVjdG9yPFBlZXJN
ZWRpYURlc2NyaXB0aW9uPiYgbWVkaWFEZXNjcmlwdGlvbnMoKSBjb25zdCB7IHJldHVybiBtX21l
ZGlhRGVzY3JpcHRpb25zOyB9Ci0gICAgdm9pZCBhZGRNZWRpYURlc2NyaXB0aW9uKFBlZXJNZWRp
YURlc2NyaXB0aW9uJiYgZGVzY3JpcHRpb24pIHsgbV9tZWRpYURlc2NyaXB0aW9ucy5hcHBlbmQo
V1RGTW92ZShkZXNjcmlwdGlvbikpOyB9Ci0KLSAgICBQZWVyQ29ubmVjdGlvblN0YXRlczo6QnVu
ZGxlUG9saWN5IGJ1bmRsZVBvbGljeSgpIGNvbnN0IHsgcmV0dXJuIG1fYnVuZGxlUG9saWN5OyB9
Ci0gICAgdm9pZCBzZXRCdW5kbGVQb2xpY3koUGVlckNvbm5lY3Rpb25TdGF0ZXM6OkJ1bmRsZVBv
bGljeSBidW5kbGVQb2xpY3kpIHsgbV9idW5kbGVQb2xpY3kgPSBidW5kbGVQb2xpY3k7IH0KLQot
ICAgIFJlZlB0cjxNZWRpYUVuZHBvaW50U2Vzc2lvbkNvbmZpZ3VyYXRpb24+IGNsb25lKCkgY29u
c3QKLSAgICB7Ci0gICAgICAgIFJlZlB0cjxNZWRpYUVuZHBvaW50U2Vzc2lvbkNvbmZpZ3VyYXRp
b24+IGNvcHkgPSBjcmVhdGUoKTsKLSAgICAgICAgY29weS0+bV9zZXNzaW9uSWQgPSBtX3Nlc3Np
b25JZDsKLSAgICAgICAgY29weS0+bV9zZXNzaW9uVmVyc2lvbiA9IG1fc2Vzc2lvblZlcnNpb247
Ci0gICAgICAgIGNvcHktPm1fbWVkaWFEZXNjcmlwdGlvbnMgPSBtX21lZGlhRGVzY3JpcHRpb25z
OwotICAgICAgICBjb3B5LT5tX2J1bmRsZVBvbGljeSA9IG1fYnVuZGxlUG9saWN5OwotCi0gICAg
ICAgIHJldHVybiBjb3B5OwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBNZWRpYUVuZHBvaW50U2Vz
c2lvbkNvbmZpZ3VyYXRpb24oKQotICAgIHsKLSAgICAgICAgbV9zZXNzaW9uSWQgPSBjcnlwdG9n
cmFwaGljYWxseVJhbmRvbU51bWJlcigpOwotICAgICAgICBtX3Nlc3Npb25JZCA9IG1fc2Vzc2lv
bklkIDw8IDMxIHwgY3J5cHRvZ3JhcGhpY2FsbHlSYW5kb21OdW1iZXIoKTsKLSAgICB9Ci0KLSAg
ICBpbnQ2NF90IG1fc2Vzc2lvbklkOwotICAgIHVuc2lnbmVkIG1fc2Vzc2lvblZlcnNpb24geyAw
IH07Ci0KLSAgICBWZWN0b3I8UGVlck1lZGlhRGVzY3JpcHRpb24+IG1fbWVkaWFEZXNjcmlwdGlv
bnM7Ci0KLSAgICBQZWVyQ29ubmVjdGlvblN0YXRlczo6QnVuZGxlUG9saWN5IG1fYnVuZGxlUG9s
aWN5IHsgUGVlckNvbm5lY3Rpb25TdGF0ZXM6OkJ1bmRsZVBvbGljeTo6QmFsYW5jZWQgfTsKLX07
Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShXRUJfUlRDKQot
Ci0jZW5kaWYgLy8gTWVkaWFFbmRwb2ludFNlc3Npb25Db25maWd1cmF0aW9uX2gKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtUHJpdmF0
ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1Qcml2
YXRlLmgKaW5kZXggOWYxYWI1MmI1YzZkYjI4OTlkYmY2YWM3OTk3ODc4OTEwNjI0OWMwZi4uMzMx
OGFhYjUxY2FjYjRkMDk0ZmFmMzMzZThkNmI2NmVmMDM3OWJmNSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1Qcml2YXRlLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1Qcml2YXRlLmgK
QEAgLTQ4LDExICs0OCw2IEBACiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1ZGUgPHd0
Zi9XZWFrUHRyLmg+CiAKLSNpZiBVU0UoR1NUUkVBTUVSKQotI2luY2x1ZGUgIkdSZWZQdHJHU3Ry
ZWFtZXIuaCIKLSNpbmNsdWRlIDxvd3Ivb3dyX2dzdF92aWRlb19yZW5kZXJlci5oPgotI2VuZGlm
Ci0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgTWVkaWFTdHJlYW07CkBAIC0xMTEsMTYg
KzEwNiw2IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgbW9uaXRvck9yaWVudGF0aW9uKE9yaWVudGF0
aW9uTm90aWZpZXImKTsKIAotI2lmIFVTRShHU1RSRUFNRVIpCi0gICAgdm9pZCBzZXRWaWRlb1Jl
bmRlcmVyKE93ckdzdFZpZGVvUmVuZGVyZXIqIHJlbmRlcmVyLCBHc3RFbGVtZW50KiBzaW5rKSB7
IG1fZ3N0VmlkZW9SZW5kZXJlciA9IHJlbmRlcmVyOyBtX2dzdFZpZGVvU2lua0VsZW1lbnQgPSBz
aW5rOyB9Ci0gICAgR1JlZlB0cjxHc3RFbGVtZW50PiBnZXRWaWRlb1NpbmtFbGVtZW50KCkgY29u
c3QgeyByZXR1cm4gbV9nc3RWaWRlb1NpbmtFbGVtZW50OyB9Ci0gICAgR1JlZlB0cjxPd3JHc3RW
aWRlb1JlbmRlcmVyPiBnZXRWaWRlb1JlbmRlcmVyKCkgY29uc3QgeyByZXR1cm4gbV9nc3RWaWRl
b1JlbmRlcmVyOyB9Ci0KLXByaXZhdGU6Ci0gICAgR1JlZlB0cjxHc3RFbGVtZW50PiBtX2dzdFZp
ZGVvU2lua0VsZW1lbnQ7Ci0gICAgR1JlZlB0cjxPd3JHc3RWaWRlb1JlbmRlcmVyPiBtX2dzdFZp
ZGVvUmVuZGVyZXI7Ci0jZW5kaWYKLQogcHJpdmF0ZToKICAgICBNZWRpYVN0cmVhbVByaXZhdGUo
Y29uc3QgTWVkaWFTdHJlYW1UcmFja1ByaXZhdGVWZWN0b3ImLCBTdHJpbmcmJik7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lTWVkaWFT
b3VyY2VDZW50ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vUmVh
bHRpbWVNZWRpYVNvdXJjZUNlbnRlci5jcHAKaW5kZXggNzYzZmIyZWRmNjIwOGE5MWJiZDcwOWFj
YmVmMTRhOTU0MTNkYjhiNi4uNmFkOWFmZGNmM2ZmNjVjMzRhODNkYjliM2JkZTVhMTQzMzUxM2M1
ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vUmVhbHRp
bWVNZWRpYVNvdXJjZUNlbnRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVk
aWFzdHJlYW0vUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlci5jcHAKQEAgLTM1LDYgKzM1LDExIEBA
CiAKICNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQogCisvLyBGSVhNRTogR1RLIHRvIGltcGxlbWVu
dCBpdHMgb3duIFJlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXIuCisjaWYgUExBVEZPUk0oR1RLKQor
I2luY2x1ZGUgIk1vY2tSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyLmgiCisjZW5kaWYKKwogI2lu
Y2x1ZGUgIkNhcHR1cmVEZXZpY2VNYW5hZ2VyLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2lu
Y2x1ZGUgIk1lZGlhU3RyZWFtUHJpdmF0ZS5oIgpAQCAtNTksOCArNjQsMTQgQEAgUmVhbHRpbWVN
ZWRpYVNvdXJjZUNlbnRlciYgUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlcjo6c2luZ2xldG9uKCkK
ICAgICBSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyKiBvdmVycmlkZSA9IG1lZGlhU3RyZWFtQ2Vu
dGVyT3ZlcnJpZGUoKTsKICAgICBpZiAob3ZlcnJpZGUpCiAgICAgICAgIHJldHVybiAqb3ZlcnJp
ZGU7Ci0gICAgCisjaWYgUExBVEZPUk0oR1RLKQorICAgIFdURkxvZ0Fsd2F5cygiV2ViS2l0R1RL
IExJQldFQlJUQyBSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyIE5PVCBJTVBMRU1FTlRFRC4gUmV0
dXJuaW5nIE1vY2tSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyIGluc3RlYWQgdG8gYXZvaWQgY3Jh
c2ghXG4iKTsKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIHN0YXRpYyBOZXZlckRl
c3Ryb3llZDxNb2NrUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlcj4gY2VudGVyOworICAgIHJldHVy
biBjZW50ZXI7CisjZWxzZQogICAgIHJldHVybiBSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyOjpw
bGF0Zm9ybUNlbnRlcigpOworI2VuZGlmCiB9CiAKIHZvaWQgUmVhbHRpbWVNZWRpYVNvdXJjZUNl
bnRlcjo6c2V0U2hhcmVkU3RyZWFtQ2VudGVyT3ZlcnJpZGUoUmVhbHRpbWVNZWRpYVNvdXJjZUNl
bnRlciogY2VudGVyKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFz
dHJlYW0vU0RQUHJvY2Vzc29yU2NyaXB0UmVzb3VyY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWVkaWFzdHJlYW0vU0RQUHJvY2Vzc29yU2NyaXB0UmVzb3VyY2UuY3BwCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NjllZDJhNzYxNTgxNzI5NzBjMTQ5YzgzMDRjZTBhMzQy
ZmYwOTYxLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1NEUFByb2Nlc3NvclNjcmlwdFJlc291
cmNlLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDUzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTUgRXJpY3Nzb24gQUIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqICAgIGluIHRoZSBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqICAgIGRpc3RyaWJ1
dGlvbi4KLSAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgRXJpY3Nzb24gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMgY29udHJpYnV0b3JzCi0gKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSAqICAgIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
LSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNv
bmZpZy5oIgotCi0jaWYgRU5BQkxFKFdFQl9SVEMpCi0jaW5jbHVkZSAiU0RQUHJvY2Vzc29yU2Ny
aXB0UmVzb3VyY2UuaCIKLQotI2luY2x1ZGUgIlNEUFByb2Nlc3NvclNjcmlwdHNEYXRhLmgiCi0j
aW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQot
bmFtZXNwYWNlIFNEUFByb2Nlc3NvclNjcmlwdFJlc291cmNlIHsKLQotY29uc3QgU3RyaW5nJiBz
Y3JpcHRTdHJpbmcoKQotewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxjb25zdCBTdHJpbmc+
IHNjcmlwdChzZHBKYXZhU2NyaXB0LCBzaXplb2Yoc2RwSmF2YVNjcmlwdCkpOwotICAgIHJldHVy
biBzY3JpcHQ7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFNEUFByb2Nlc3NvclNjcmlwdFJlc291cmNl
Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShXRUJfUlRDKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vU0RQUHJvY2Vz
c29yU2NyaXB0UmVzb3VyY2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFt
L1NEUFByb2Nlc3NvclNjcmlwdFJlc291cmNlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IGNiNTQ0M2JiMDcwY2Y3N2YxYjZlZWYzMGMyM2U1MTJmNmQ0NTU0NjQuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWVkaWFzdHJlYW0vU0RQUHJvY2Vzc29yU2NyaXB0UmVzb3VyY2UuaAorKysgL2Rldi9udWxs
CkBAIC0xLDUwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgRXJpY3Nzb24gQUIu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIKLSAqICAgIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqICAgIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIE5laXRoZXIg
dGhlIG5hbWUgb2YgRXJpY3Nzb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0g
KiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tIHRoaXMKLSAqICAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
LSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBTRFBQcm9jZXNzb3JTY3JpcHRSZXNvdXJj
ZV9oCi0jZGVmaW5lIFNEUFByb2Nlc3NvclNjcmlwdFJlc291cmNlX2gKLQotI2lmIEVOQUJMRShX
RUJfUlRDKQotCi0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBX
ZWJDb3JlIHsKLQotbmFtZXNwYWNlIFNEUFByb2Nlc3NvclNjcmlwdFJlc291cmNlIHsKLQotY29u
c3QgU3RyaW5nJiBzY3JpcHRTdHJpbmcoKTsKLQotfSAvLyBuYW1lc3BhY2UgU0RQUHJvY2Vzc29y
U2NyaXB0UmVzb3VyY2UKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5B
QkxFKFdFQl9SVEMpCi0KLSNlbmRpZiAvLyBTRFBQcm9jZXNzb3JTY3JpcHRSZXNvdXJjZV9oCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9vcGVud2VicnRj
L01lZGlhRW5kcG9pbnRPd3IuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJl
YW0vb3BlbndlYnJ0Yy9NZWRpYUVuZHBvaW50T3dyLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggOGE1ODQ4NjcyNTQ4M2MyZGNlMGE0MjQ0YjRlZGUxNWZiZmFiZDJlOS4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tZWRpYXN0cmVhbS9vcGVud2VicnRjL01lZGlhRW5kcG9pbnRPd3IuY3BwCisrKyAv
ZGV2L251bGwKQEAgLTEsNzUwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUsIDIw
MTYgRXJpY3Nzb24gQUIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqICAgIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqICAgIGRpc3RyaWJ1dGlvbi4K
LSAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgRXJpY3Nzb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMg
Y29udHJpYnV0b3JzCi0gKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSAqICAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
Ci0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5o
IgotCi0jaWYgRU5BQkxFKFdFQl9SVEMpCi0jaW5jbHVkZSAiTWVkaWFFbmRwb2ludE93ci5oIgot
Ci0jaW5jbHVkZSAiTWVkaWFFbmRwb2ludFNlc3Npb25Db25maWd1cmF0aW9uLmgiCi0jaW5jbHVk
ZSAiTWVkaWFQYXlsb2FkLmgiCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRl
ICJPcGVuV2ViUlRDVXRpbGl0aWVzLmgiCi0jaW5jbHVkZSAiUGVlckNvbm5lY3Rpb25TdGF0ZXMu
aCIKLSNpbmNsdWRlICJSVENEYXRhQ2hhbm5lbEhhbmRsZXIuaCIKLSNpbmNsdWRlICJSZWFsdGlt
ZUF1ZGlvU291cmNlT3dyLmgiCi0jaW5jbHVkZSAiUmVhbHRpbWVWaWRlb1NvdXJjZU93ci5oIgot
I2luY2x1ZGUgPG93ci9vd3IuaD4KLSNpbmNsdWRlIDxvd3Ivb3dyX2F1ZGlvX3BheWxvYWQuaD4K
LSNpbmNsdWRlIDxvd3Ivb3dyX2NyeXB0b191dGlscy5oPgotI2luY2x1ZGUgPG93ci9vd3JfbWVk
aWFfc2Vzc2lvbi5oPgotI2luY2x1ZGUgPG93ci9vd3JfdHJhbnNwb3J0X2FnZW50Lmg+Ci0jaW5j
bHVkZSA8b3dyL293cl92aWRlb19wYXlsb2FkLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmlu
Zy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0YXRpYyB2b2lkIGdvdENhbmRpZGF0ZShP
d3JTZXNzaW9uKiwgT3dyQ2FuZGlkYXRlKiwgTWVkaWFFbmRwb2ludE93ciopOwotc3RhdGljIHZv
aWQgY2FuZGlkYXRlR2F0aGVyaW5nRG9uZShPd3JTZXNzaW9uKiwgTWVkaWFFbmRwb2ludE93ciop
Owotc3RhdGljIHZvaWQgaWNlQ29ubmVjdGlvblN0YXRlQ2hhbmdlKE93clNlc3Npb24qLCBHUGFy
YW1TcGVjKiwgTWVkaWFFbmRwb2ludE93ciopOwotc3RhdGljIHZvaWQgZ290SW5jb21pbmdTb3Vy
Y2UoT3dyTWVkaWFTZXNzaW9uKiwgT3dyTWVkaWFTb3VyY2UqLCBNZWRpYUVuZHBvaW50T3dyKik7
Ci0KLXN0YXRpYyBjb25zdCBWZWN0b3I8U3RyaW5nPiBjYW5kaWRhdGVUeXBlcyA9IHsgImhvc3Qi
LCAic3JmbHgiLCAicHJmbHgiLCAicmVsYXkiIH07Ci1zdGF0aWMgY29uc3QgVmVjdG9yPFN0cmlu
Zz4gY2FuZGlkYXRlVGNwVHlwZXMgPSB7ICIiLCAiYWN0aXZlIiwgInBhc3NpdmUiLCAic28iIH07
Ci1zdGF0aWMgY29uc3QgVmVjdG9yPFN0cmluZz4gY29kZWNUeXBlcyA9IHsgIk5PTkUiLCAiUENN
VSIsICJQQ01BIiwgIk9QVVMiLCAiSDI2NCIsICJWUDgiIH07Ci0KLXN0YXRpYyBjb25zdCBjaGFy
KiBoZWxwZXJTZXJ2ZXJSZWdFeCA9ICIodHVybnN8dHVybnxzdHVuKTooW1xcd1xcLlxcLV0rfFxc
W1tcXHdcXDpdK1xcXSkoOlxcZCspPyhcXD8uKyk/IjsKLQotc3RhdGljIGNvbnN0IHVuc2lnbmVk
IHNob3J0IGhlbHBlclNlcnZlckRlZmF1bHRQb3J0ID0gMzQ3ODsKLXN0YXRpYyBjb25zdCB1bnNp
Z25lZCBzaG9ydCBjYW5kaWRhdGVEZWZhdWx0UG9ydCA9IDk7Ci0KLXN0YXRpYyBzdGQ6OnVuaXF1
ZV9wdHI8TWVkaWFFbmRwb2ludD4gY3JlYXRlTWVkaWFFbmRwb2ludE93cihNZWRpYUVuZHBvaW50
Q2xpZW50JiBjbGllbnQpCi17Ci0gICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxNZWRpYUVuZHBv
aW50PihuZXcgTWVkaWFFbmRwb2ludE93cihjbGllbnQpKTsKLX0KLQotQ3JlYXRlTWVkaWFFbmRw
b2ludCBNZWRpYUVuZHBvaW50OjpjcmVhdGUgPSBjcmVhdGVNZWRpYUVuZHBvaW50T3dyOwotCi1N
ZWRpYUVuZHBvaW50T3dyOjpNZWRpYUVuZHBvaW50T3dyKE1lZGlhRW5kcG9pbnRDbGllbnQmIGNs
aWVudCkKLSAgICA6IG1fdHJhbnNwb3J0QWdlbnQobnVsbHB0cikKLSAgICAsIG1fY2xpZW50KGNs
aWVudCkKLSAgICAsIG1fbnVtYmVyT2ZSZWNlaXZlUHJlcGFyZWRTZXNzaW9ucygwKQotICAgICwg
bV9udW1iZXJPZlNlbmRQcmVwYXJlZFNlc3Npb25zKDApCi17Ci0gICAgaW5pdGlhbGl6ZU9wZW5X
ZWJSVEMoKTsKLQotICAgIEdSZWdleENvbXBpbGVGbGFncyBjb21waWxlRmxhZ3MgPSBHX1JFR0VY
X0pBVkFTQ1JJUFRfQ09NUEFUOwotICAgIEdSZWdleE1hdGNoRmxhZ3MgbWF0Y2hGbGFncyA9IHN0
YXRpY19jYXN0PEdSZWdleE1hdGNoRmxhZ3M+KDApOwotICAgIG1faGVscGVyU2VydmVyUmVnRXgg
PSBnX3JlZ2V4X25ldyhoZWxwZXJTZXJ2ZXJSZWdFeCwgY29tcGlsZUZsYWdzLCBtYXRjaEZsYWdz
LCBudWxscHRyKTsKLX0KLQotTWVkaWFFbmRwb2ludE93cjo6fk1lZGlhRW5kcG9pbnRPd3IoKQot
ewotICAgIHN0b3AoKTsKLQotICAgIGdfcmVnZXhfdW5yZWYobV9oZWxwZXJTZXJ2ZXJSZWdFeCk7
Ci19Ci0KLXZvaWQgTWVkaWFFbmRwb2ludE93cjo6c2V0Q29uZmlndXJhdGlvbihNZWRpYUVuZHBv
aW50Q29uZmlndXJhdGlvbiYmIGNvbmZpZ3VyYXRpb24pCi17Ci0gICAgbV9jb25maWd1cmF0aW9u
ID0gV1RGTW92ZShjb25maWd1cmF0aW9uKTsKLX0KLQotc3RkOjp1bmlxdWVfcHRyPFJUQ0RhdGFD
aGFubmVsSGFuZGxlcj4gTWVkaWFFbmRwb2ludE93cjo6Y3JlYXRlRGF0YUNoYW5uZWxIYW5kbGVy
KGNvbnN0IFN0cmluZyYsIGNvbnN0IFJUQ0RhdGFDaGFubmVsSW5pdCYpCi17Ci0gICAgLy8gRklY
TUU6IEltcGxlbWVudCBkYXRhIGNoYW5uZWwuCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0g
ICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLXN0YXRpYyB2b2lkIGNyeXB0b0RhdGFDYWxsYmFjayhn
Y2hhciogcHJpdmF0ZUtleSwgZ2NoYXIqIGNlcnRpZmljYXRlLCBnY2hhciogZmluZ2VycHJpbnQs
IGdjaGFyKiBmaW5nZXJwcmludEZ1bmN0aW9uLCBncG9pbnRlciBkYXRhKQotewotICAgIE1lZGlh
RW5kcG9pbnRPd3IqIG1lZGlhRW5kcG9pbnQgPSAoTWVkaWFFbmRwb2ludE93ciopIGRhdGE7Ci0g
ICAgbWVkaWFFbmRwb2ludC0+ZGlzcGF0Y2hEdGxzRmluZ2VycHJpbnQoZ19zdHJkdXAocHJpdmF0
ZUtleSksIGdfc3RyZHVwKGNlcnRpZmljYXRlKSwgU3RyaW5nKGZpbmdlcnByaW50KSwgU3RyaW5n
KGZpbmdlcnByaW50RnVuY3Rpb24pKTsKLX0KLQotdm9pZCBNZWRpYUVuZHBvaW50T3dyOjpnZW5l
cmF0ZUR0bHNJbmZvKCkKLXsKLSAgICBvd3JfY3J5cHRvX2NyZWF0ZV9jcnlwdG9fZGF0YShjcnlw
dG9EYXRhQ2FsbGJhY2ssIHRoaXMpOwotfQotCi1NZWRpYVBheWxvYWRWZWN0b3IgTWVkaWFFbmRw
b2ludE93cjo6Z2V0RGVmYXVsdEF1ZGlvUGF5bG9hZHMoKQotewotICAgIE1lZGlhUGF5bG9hZFZl
Y3RvciBwYXlsb2FkczsKLQotICAgIC8vIEZJWE1FOiBUaGlzIGxpc3Qgc2hvdWxkIGJlIGJhc2Vk
IG9uIHdoYXQgaXMgYXZhaWxhYmxlIGluIHRoZSBwbGF0Zm9ybSAoYnVnOiBodHRwOi8vd2Via2l0
Lm9yZy9iLzE2MzcyMykKLSAgICBNZWRpYVBheWxvYWQgcGF5bG9hZDE7Ci0gICAgcGF5bG9hZDEu
dHlwZSA9IDExMTsKLSAgICBwYXlsb2FkMS5lbmNvZGluZ05hbWUgPSAiT1BVUyI7Ci0gICAgcGF5
bG9hZDEuY2xvY2tSYXRlID0gNDgwMDA7Ci0gICAgcGF5bG9hZDEuY2hhbm5lbHMgPSAyOwotICAg
IHBheWxvYWRzLmFwcGVuZChXVEZNb3ZlKHBheWxvYWQxKSk7Ci0KLSAgICBNZWRpYVBheWxvYWQg
cGF5bG9hZDI7Ci0gICAgcGF5bG9hZDIudHlwZSA9IDg7Ci0gICAgcGF5bG9hZDIuZW5jb2RpbmdO
YW1lID0gIlBDTUEiOwotICAgIHBheWxvYWQyLmNsb2NrUmF0ZSA9IDgwMDA7Ci0gICAgcGF5bG9h
ZDIuY2hhbm5lbHMgPSAxOwotICAgIHBheWxvYWRzLmFwcGVuZChXVEZNb3ZlKHBheWxvYWQyKSk7
Ci0KLSAgICBNZWRpYVBheWxvYWQgcGF5bG9hZDM7Ci0gICAgcGF5bG9hZDMudHlwZSA9IDA7Ci0g
ICAgcGF5bG9hZDMuZW5jb2RpbmdOYW1lID0gIlBDTVUiOwotICAgIHBheWxvYWQzLmNsb2NrUmF0
ZSA9IDgwMDA7Ci0gICAgcGF5bG9hZDMuY2hhbm5lbHMgPSAxOwotICAgIHBheWxvYWRzLmFwcGVu
ZChXVEZNb3ZlKHBheWxvYWQzKSk7Ci0KLSAgICByZXR1cm4gcGF5bG9hZHM7Ci19Ci0KLU1lZGlh
UGF5bG9hZFZlY3RvciBNZWRpYUVuZHBvaW50T3dyOjpnZXREZWZhdWx0VmlkZW9QYXlsb2Fkcygp
Ci17Ci0gICAgTWVkaWFQYXlsb2FkVmVjdG9yIHBheWxvYWRzOwotCi0gICAgLy8gRklYTUU6IFRo
aXMgbGlzdCBzaG91bGQgYmUgYmFzZWQgb24gd2hhdCBpcyBhdmFpbGFibGUgaW4gdGhlIHBsYXRm
b3JtIChidWc6IGh0dHA6Ly93ZWJraXQub3JnL2IvMTYzNzIzKQotICAgIE1lZGlhUGF5bG9hZCBw
YXlsb2FkMTsKLSAgICBwYXlsb2FkMS50eXBlID0gMTAzOwotICAgIHBheWxvYWQxLmVuY29kaW5n
TmFtZSA9ICJIMjY0IjsKLSAgICBwYXlsb2FkMS5jbG9ja1JhdGUgPSA5MDAwMDsKLSAgICBwYXls
b2FkMS5jY21maXIgPSB0cnVlOwotICAgIHBheWxvYWQxLm5hY2twbGkgPSB0cnVlOwotICAgIHBh
eWxvYWQxLmFkZFBhcmFtZXRlcigicGFja2V0aXphdGlvbk1vZGUiLCAxKTsKLSAgICBwYXlsb2Fk
cy5hcHBlbmQoV1RGTW92ZShwYXlsb2FkMSkpOwotCi0gICAgTWVkaWFQYXlsb2FkIHBheWxvYWQy
OwotICAgIHBheWxvYWQyLnR5cGUgPSAxMDA7Ci0gICAgcGF5bG9hZDIuZW5jb2RpbmdOYW1lID0g
IlZQOCI7Ci0gICAgcGF5bG9hZDIuY2xvY2tSYXRlID0gOTAwMDA7Ci0gICAgcGF5bG9hZDIuY2Nt
ZmlyID0gdHJ1ZTsKLSAgICBwYXlsb2FkMi5uYWNrcGxpID0gdHJ1ZTsKLSAgICBwYXlsb2FkMi5u
YWNrID0gdHJ1ZTsKLSAgICBwYXlsb2Fkcy5hcHBlbmQoV1RGTW92ZShwYXlsb2FkMikpOwotCi0g
ICAgTWVkaWFQYXlsb2FkIHBheWxvYWQzOwotICAgIHBheWxvYWQzLnR5cGUgPSAxMjA7Ci0gICAg
cGF5bG9hZDMuZW5jb2RpbmdOYW1lID0gIlJUWCI7Ci0gICAgcGF5bG9hZDMuY2xvY2tSYXRlID0g
OTAwMDA7Ci0gICAgcGF5bG9hZDMuYWRkUGFyYW1ldGVyKCJhcHQiLCAxMDApOwotICAgIHBheWxv
YWQzLmFkZFBhcmFtZXRlcigicnR4VGltZSIsIDIwMCk7Ci0gICAgcGF5bG9hZHMuYXBwZW5kKFdU
Rk1vdmUocGF5bG9hZDMpKTsKLQotICAgIHJldHVybiBwYXlsb2FkczsKLX0KLQotc3RhdGljIGJv
b2wgcGF5bG9hZHNDb250YWluVHlwZShjb25zdCBWZWN0b3I8Y29uc3QgTWVkaWFQYXlsb2FkKj4m
IHBheWxvYWRzLCB1bnNpZ25lZCBwYXlsb2FkVHlwZSkKLXsKLSAgICBmb3IgKGF1dG8gcGF5bG9h
ZCA6IHBheWxvYWRzKSB7Ci0gICAgICAgIEFTU0VSVChwYXlsb2FkKTsKLSAgICAgICAgaWYgKHBh
eWxvYWQtPnR5cGUgPT0gcGF5bG9hZFR5cGUpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1NZWRpYVBheWxvYWRWZWN0b3IgTWVkaWFFbmRw
b2ludE93cjo6ZmlsdGVyUGF5bG9hZHMoY29uc3QgTWVkaWFQYXlsb2FkVmVjdG9yJiByZW1vdGVQ
YXlsb2FkcywgY29uc3QgTWVkaWFQYXlsb2FkVmVjdG9yJiBkZWZhdWx0UGF5bG9hZHMpCi17Ci0g
ICAgVmVjdG9yPGNvbnN0IE1lZGlhUGF5bG9hZCo+IGZpbHRlcmVkUGF5bG9hZHM7Ci0KLSAgICBm
b3IgKGF1dG8mIHJlbW90ZVBheWxvYWQgOiByZW1vdGVQYXlsb2FkcykgewotICAgICAgICBjb25z
dCBNZWRpYVBheWxvYWQqIGRlZmF1bHRQYXlsb2FkID0gbnVsbHB0cjsKLSAgICAgICAgZm9yIChh
dXRvJiBwIDogZGVmYXVsdFBheWxvYWRzKSB7Ci0gICAgICAgICAgICBpZiAocC5lbmNvZGluZ05h
bWUgPT0gcmVtb3RlUGF5bG9hZC5lbmNvZGluZ05hbWUuY29udmVydFRvQVNDSUlVcHBlcmNhc2Uo
KSkgewotICAgICAgICAgICAgICAgIGRlZmF1bHRQYXlsb2FkID0gJnA7Ci0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCFkZWZhdWx0
UGF5bG9hZCkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGlmIChkZWZhdWx0UGF5
bG9hZC0+cGFyYW1ldGVycy5jb250YWlucygicGFja2V0aXphdGlvbk1vZGUiKSAmJiByZW1vdGVQ
YXlsb2FkLnBhcmFtZXRlcnMuY29udGFpbnMoInBhY2tldGl6YXRpb25Nb2RlIikKLSAgICAgICAg
ICAgICYmIChkZWZhdWx0UGF5bG9hZC0+cGFyYW1ldGVycy5nZXQoInBhY2tldGl6YXRpb25Nb2Rl
IikgIT0gZGVmYXVsdFBheWxvYWQtPnBhcmFtZXRlcnMuZ2V0KCJwYWNrZXRpemF0aW9uTW9kZSIp
KSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGZpbHRlcmVkUGF5bG9hZHMuYXBw
ZW5kKCZyZW1vdGVQYXlsb2FkKTsKLSAgICB9Ci0KLSAgICBNZWRpYVBheWxvYWRWZWN0b3IgZmls
dGVyZWRBcHRQYXlsb2FkczsKLQotICAgIGZvciAoYXV0byBmaWx0ZXJlZFBheWxvYWQgOiBmaWx0
ZXJlZFBheWxvYWRzKSB7Ci0gICAgICAgIGlmIChmaWx0ZXJlZFBheWxvYWQtPnBhcmFtZXRlcnMu
Y29udGFpbnMoImFwdCIpICYmICghcGF5bG9hZHNDb250YWluVHlwZShmaWx0ZXJlZFBheWxvYWRz
LCBmaWx0ZXJlZFBheWxvYWQtPnBhcmFtZXRlcnMuZ2V0KCJhcHQiKSkpKQotICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgIGZpbHRlcmVkQXB0UGF5bG9hZHMuYXBwZW5kKCpmaWx0ZXJlZFBh
eWxvYWQpOwotICAgIH0KLQotICAgIHJldHVybiBmaWx0ZXJlZEFwdFBheWxvYWRzOwotfQotCi1N
ZWRpYUVuZHBvaW50OjpVcGRhdGVSZXN1bHQgTWVkaWFFbmRwb2ludE93cjo6dXBkYXRlUmVjZWl2
ZUNvbmZpZ3VyYXRpb24oTWVkaWFFbmRwb2ludFNlc3Npb25Db25maWd1cmF0aW9uKiBjb25maWd1
cmF0aW9uLCBib29sIGlzSW5pdGlhdG9yKQotewotICAgIFZlY3RvcjxUcmFuc2NlaXZlckNvbmZp
Zz4gdHJhbnNjZWl2ZXJDb25maWdzOwotICAgIGZvciAodW5zaWduZWQgaSA9IG1fdHJhbnNjZWl2
ZXJzLnNpemUoKTsgaSA8IGNvbmZpZ3VyYXRpb24tPm1lZGlhRGVzY3JpcHRpb25zKCkuc2l6ZSgp
OyArK2kpIHsKLSAgICAgICAgVHJhbnNjZWl2ZXJDb25maWcgY29uZmlnOwotICAgICAgICBjb25m
aWcudHlwZSA9IFNlc3Npb25UeXBlTWVkaWE7Ci0gICAgICAgIGNvbmZpZy5pc0R0bHNDbGllbnQg
PSBjb25maWd1cmF0aW9uLT5tZWRpYURlc2NyaXB0aW9ucygpW2ldLmR0bHNTZXR1cCA9PSAiYWN0
aXZlIjsKLSAgICAgICAgY29uZmlnLm1pZCA9IGNvbmZpZ3VyYXRpb24tPm1lZGlhRGVzY3JpcHRp
b25zKClbaV0ubWlkOwotICAgICAgICB0cmFuc2NlaXZlckNvbmZpZ3MuYXBwZW5kKFdURk1vdmUo
Y29uZmlnKSk7Ci0gICAgfQotCi0gICAgZW5zdXJlVHJhbnNwb3J0QWdlbnRBbmRUcmFuc2NlaXZl
cnMoaXNJbml0aWF0b3IsIHRyYW5zY2VpdmVyQ29uZmlncyk7Ci0KLSAgICAvLyBQcmVwYXJlIHRo
ZSBuZXcgc2Vzc2lvbnMuCi0gICAgZm9yICh1bnNpZ25lZCBpID0gbV9udW1iZXJPZlJlY2VpdmVQ
cmVwYXJlZFNlc3Npb25zOyBpIDwgbV90cmFuc2NlaXZlcnMuc2l6ZSgpOyArK2kpIHsKLSAgICAg
ICAgT3dyU2Vzc2lvbiogc2Vzc2lvbiA9IG1fdHJhbnNjZWl2ZXJzW2ldLT5zZXNzaW9uKCk7Ci0g
ICAgICAgIHByZXBhcmVNZWRpYVNlc3Npb24oT1dSX01FRElBX1NFU1NJT04oc2Vzc2lvbiksICZj
b25maWd1cmF0aW9uLT5tZWRpYURlc2NyaXB0aW9ucygpW2ldLCBpc0luaXRpYXRvcik7Ci0gICAg
ICAgIG93cl90cmFuc3BvcnRfYWdlbnRfYWRkX3Nlc3Npb24obV90cmFuc3BvcnRBZ2VudCwgc2Vz
c2lvbik7Ci0gICAgfQotCi0gICAgb3dyX3RyYW5zcG9ydF9hZ2VudF9zdGFydChtX3RyYW5zcG9y
dEFnZW50KTsKLSAgICBtX251bWJlck9mUmVjZWl2ZVByZXBhcmVkU2Vzc2lvbnMgPSBtX3RyYW5z
Y2VpdmVycy5zaXplKCk7Ci0KLSAgICByZXR1cm4gVXBkYXRlUmVzdWx0OjpTdWNjZXNzOwotfQot
Ci1zdGF0aWMgY29uc3QgTWVkaWFQYXlsb2FkKiBmaW5kUnR4UGF5bG9hZChjb25zdCBNZWRpYVBh
eWxvYWRWZWN0b3ImIHBheWxvYWRzLCB1bnNpZ25lZCBhcHQpCi17Ci0gICAgZm9yIChhdXRvJiBw
YXlsb2FkIDogcGF5bG9hZHMpIHsKLSAgICAgICAgaWYgKHBheWxvYWQuZW5jb2RpbmdOYW1lLmNv
bnZlcnRUb0FTQ0lJVXBwZXJjYXNlKCkgPT0gIlJUWCIgJiYgcGF5bG9hZC5wYXJhbWV0ZXJzLmNv
bnRhaW5zKCJhcHQiKQotICAgICAgICAgICAgJiYgKHBheWxvYWQucGFyYW1ldGVycy5nZXQoImFw
dCIpID09IGFwdCkpCi0gICAgICAgICAgICByZXR1cm4gJnBheWxvYWQ7Ci0gICAgfQotICAgIHJl
dHVybiBudWxscHRyOwotfQotCi1NZWRpYUVuZHBvaW50OjpVcGRhdGVSZXN1bHQgTWVkaWFFbmRw
b2ludE93cjo6dXBkYXRlU2VuZENvbmZpZ3VyYXRpb24oTWVkaWFFbmRwb2ludFNlc3Npb25Db25m
aWd1cmF0aW9uKiBjb25maWd1cmF0aW9uLCBjb25zdCBSZWFsdGltZU1lZGlhU291cmNlTWFwJiBz
ZW5kU291cmNlTWFwLCBib29sIGlzSW5pdGlhdG9yKQotewotICAgIFZlY3RvcjxUcmFuc2NlaXZl
ckNvbmZpZz4gdHJhbnNjZWl2ZXJDb25maWdzOwotICAgIGZvciAodW5zaWduZWQgaSA9IG1fdHJh
bnNjZWl2ZXJzLnNpemUoKTsgaSA8IGNvbmZpZ3VyYXRpb24tPm1lZGlhRGVzY3JpcHRpb25zKCku
c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgVHJhbnNjZWl2ZXJDb25maWcgY29uZmlnOwotICAgICAg
ICBjb25maWcudHlwZSA9IFNlc3Npb25UeXBlTWVkaWE7Ci0gICAgICAgIGNvbmZpZy5pc0R0bHND
bGllbnQgPSBjb25maWd1cmF0aW9uLT5tZWRpYURlc2NyaXB0aW9ucygpW2ldLmR0bHNTZXR1cCAh
PSAiYWN0aXZlIjsKLSAgICAgICAgY29uZmlnLm1pZCA9IGNvbmZpZ3VyYXRpb24tPm1lZGlhRGVz
Y3JpcHRpb25zKClbaV0ubWlkOwotICAgICAgICB0cmFuc2NlaXZlckNvbmZpZ3MuYXBwZW5kKFdU
Rk1vdmUoY29uZmlnKSk7Ci0gICAgfQotCi0gICAgZW5zdXJlVHJhbnNwb3J0QWdlbnRBbmRUcmFu
c2NlaXZlcnMoaXNJbml0aWF0b3IsIHRyYW5zY2VpdmVyQ29uZmlncyk7Ci0KLSAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbV90cmFuc2NlaXZlcnMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAg
YXV0byogc2Vzc2lvbiA9IG1fdHJhbnNjZWl2ZXJzW2ldLT5zZXNzaW9uKCk7Ci0gICAgICAgIGF1
dG8mIG1kZXNjID0gY29uZmlndXJhdGlvbi0+bWVkaWFEZXNjcmlwdGlvbnMoKVtpXTsKLQotICAg
ICAgICBpZiAobWRlc2MudHlwZSA9PSAiYXVkaW8iIHx8IG1kZXNjLnR5cGUgPT0gInZpZGVvIikK
LSAgICAgICAgICAgIGdfb2JqZWN0X3NldChzZXNzaW9uLCAicnRjcC1tdXgiLCBtZGVzYy5ydGNw
TXV4LCBudWxscHRyKTsKLQotICAgICAgICBpZiAobWRlc2MuaWNlQ2FuZGlkYXRlcy5zaXplKCkp
IHsKLSAgICAgICAgICAgIGZvciAoYXV0byYgY2FuZGlkYXRlIDogbWRlc2MuaWNlQ2FuZGlkYXRl
cykKLSAgICAgICAgICAgICAgICBpbnRlcm5hbEFkZFJlbW90ZUNhbmRpZGF0ZShzZXNzaW9uLCBj
YW5kaWRhdGUsIG1kZXNjLmljZVVmcmFnLCBtZGVzYy5pY2VQYXNzd29yZCk7Ci0gICAgICAgIH0K
LQotICAgICAgICBpZiAoaSA8IG1fbnVtYmVyT2ZTZW5kUHJlcGFyZWRTZXNzaW9ucykKLSAgICAg
ICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGlmICghc2VuZFNvdXJjZU1hcC5jb250YWlucyht
ZGVzYy5taWQpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgY29uc3QgTWVkaWFQ
YXlsb2FkKiBwYXlsb2FkID0gbnVsbHB0cjsKLSAgICAgICAgZm9yIChhdXRvJiBwIDogbWRlc2Mu
cGF5bG9hZHMpIHsKLSAgICAgICAgICAgIGlmIChwLmVuY29kaW5nTmFtZS5jb252ZXJ0VG9BU0NJ
SVVwcGVyY2FzZSgpICE9ICJSVFgiKSB7Ci0gICAgICAgICAgICAgICAgcGF5bG9hZCA9ICZwOwot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAg
ICAgaWYgKCFwYXlsb2FkKQotICAgICAgICAgICAgcmV0dXJuIFVwZGF0ZVJlc3VsdDo6RmFpbGVk
OwotCi0gICAgICAgIGF1dG8qIHJ0eFBheWxvYWQgPSBmaW5kUnR4UGF5bG9hZChtZGVzYy5wYXls
b2FkcywgcGF5bG9hZC0+dHlwZSk7Ci0gICAgICAgIGF1dG8qIHNvdXJjZSA9IHN0YXRpY19jYXN0
PFJlYWx0aW1lTWVkaWFTb3VyY2VPd3IqPihzZW5kU291cmNlTWFwLmdldChtZGVzYy5taWQpKTsK
LQotICAgICAgICBBU1NFUlQoY29kZWNUeXBlcy5maW5kKHBheWxvYWQtPmVuY29kaW5nTmFtZS5j
b252ZXJ0VG9BU0NJSVVwcGVyY2FzZSgpKSAhPSBub3RGb3VuZCk7Ci0gICAgICAgIGF1dG8gY29k
ZWNUeXBlID0gc3RhdGljX2Nhc3Q8T3dyQ29kZWNUeXBlPihjb2RlY1R5cGVzLmZpbmQocGF5bG9h
ZC0+ZW5jb2RpbmdOYW1lLmNvbnZlcnRUb0FTQ0lJVXBwZXJjYXNlKCkpKTsKLQotICAgICAgICBP
d3JQYXlsb2FkKiBzZW5kUGF5bG9hZDsKLSAgICAgICAgaWYgKG1kZXNjLnR5cGUgPT0gImF1ZGlv
IikKLSAgICAgICAgICAgIHNlbmRQYXlsb2FkID0gb3dyX2F1ZGlvX3BheWxvYWRfbmV3KGNvZGVj
VHlwZSwgcGF5bG9hZC0+dHlwZSwgcGF5bG9hZC0+Y2xvY2tSYXRlLCBwYXlsb2FkLT5jaGFubmVs
cyk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgc2VuZFBheWxvYWQgPSBvd3JfdmlkZW9f
cGF5bG9hZF9uZXcoY29kZWNUeXBlLCBwYXlsb2FkLT50eXBlLCBwYXlsb2FkLT5jbG9ja1JhdGUs
IHBheWxvYWQtPmNjbWZpciwgcGF5bG9hZC0+bmFja3BsaSk7Ci0gICAgICAgICAgICBnX29iamVj
dF9zZXQoc2VuZFBheWxvYWQsICJydHgtcGF5bG9hZC10eXBlIiwgcnR4UGF5bG9hZCA/IHJ0eFBh
eWxvYWQtPnR5cGUgOiAtMSwKLSAgICAgICAgICAgICAgICAicnR4LXRpbWUiLCBydHhQYXlsb2Fk
ICYmIHJ0eFBheWxvYWQtPnBhcmFtZXRlcnMuY29udGFpbnMoInJ0eFRpbWUiKSA/IHJ0eFBheWxv
YWQtPnBhcmFtZXRlcnMuZ2V0KCJydHhUaW1lIikgOiAwLCBudWxscHRyKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIG93cl9tZWRpYV9zZXNzaW9uX3NldF9zZW5kX3BheWxvYWQoT1dSX01FRElBX1NF
U1NJT04oc2Vzc2lvbiksIHNlbmRQYXlsb2FkKTsKLSAgICAgICAgb3dyX21lZGlhX3Nlc3Npb25f
c2V0X3NlbmRfc291cmNlKE9XUl9NRURJQV9TRVNTSU9OKHNlc3Npb24pLCBzb3VyY2UtPm1lZGlh
U291cmNlKCkpOwotCi0gICAgICAgIC8vIEZJWE1FOiBTdXBwb3J0IGZvciBncm91cC1zc3JjIFNE
UCBsaW5lIGlzIG1pc3NpbmcuCi0gICAgICAgIGNvbnN0IFZlY3Rvcjx1bnNpZ25lZD4gcmVjZWl2
ZVNzcmNzID0gbWRlc2Muc3NyY3M7Ci0gICAgICAgIGlmIChyZWNlaXZlU3NyY3Muc2l6ZSgpKSB7
Ci0gICAgICAgICAgICBnX29iamVjdF9zZXQoc2Vzc2lvbiwgInJlY2VpdmUtc3NyYyIsIHJlY2Vp
dmVTc3Jjc1swXSwgbnVsbHB0cik7Ci0gICAgICAgICAgICBpZiAocmVjZWl2ZVNzcmNzLnNpemUo
KSA9PSAyKQotICAgICAgICAgICAgICAgIGdfb2JqZWN0X3NldChzZXNzaW9uLCAicmVjZWl2ZS1y
dHgtc3NyYyIsIHJlY2VpdmVTc3Jjc1sxXSwgbnVsbHB0cik7Ci0gICAgICAgIH0KLQotICAgICAg
ICBtX251bWJlck9mU2VuZFByZXBhcmVkU2Vzc2lvbnMgPSBpICsgMTsKLSAgICB9Ci0KLSAgICBy
ZXR1cm4gVXBkYXRlUmVzdWx0OjpTdWNjZXNzOwotfQotCi12b2lkIE1lZGlhRW5kcG9pbnRPd3I6
OmFkZFJlbW90ZUNhbmRpZGF0ZShjb25zdCBJY2VDYW5kaWRhdGUmIGNhbmRpZGF0ZSwgY29uc3Qg
U3RyaW5nJiBtaWQsIGNvbnN0IFN0cmluZyYgdWZyYWcsIGNvbnN0IFN0cmluZyYgcGFzc3dvcmQp
Ci17Ci0gICAgZm9yIChhdXRvJiB0cmFuc2NlaXZlciA6IG1fdHJhbnNjZWl2ZXJzKSB7Ci0gICAg
ICAgIGlmICh0cmFuc2NlaXZlci0+bWlkKCkgPT0gbWlkKSB7Ci0gICAgICAgICAgICBpbnRlcm5h
bEFkZFJlbW90ZUNhbmRpZGF0ZSh0cmFuc2NlaXZlci0+c2Vzc2lvbigpLCBjYW5kaWRhdGUsIHVm
cmFnLCBwYXNzd29yZCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLX0K
LQotdm9pZCBNZWRpYUVuZHBvaW50T3dyOjpyZXBsYWNlTXV0ZWRSZW1vdGVTb3VyY2VNaWQoY29u
c3QgU3RyaW5nJiBvbGRNaWQsIGNvbnN0IFN0cmluZyYgbmV3TWlkKQotewotICAgIFJlZlB0cjxS
ZWFsdGltZU1lZGlhU291cmNlT3dyPiByZW1vdGVTb3VyY2UgPSBtX211dGVkUmVtb3RlU291cmNl
cy50YWtlKG9sZE1pZCk7Ci0gICAgbV9tdXRlZFJlbW90ZVNvdXJjZXMuc2V0KG5ld01pZCwgcmVt
b3RlU291cmNlKTsKLX0KLQotUmVmPFJlYWx0aW1lTWVkaWFTb3VyY2U+IE1lZGlhRW5kcG9pbnRP
d3I6OmNyZWF0ZU11dGVkUmVtb3RlU291cmNlKGNvbnN0IFN0cmluZyYgbWlkLCBSZWFsdGltZU1l
ZGlhU291cmNlOjpUeXBlIHR5cGUpCi17Ci0gICAgU3RyaW5nIG5hbWU7Ci0gICAgU3RyaW5nIGlk
KCJub3QgdXNlZCIpOwotICAgIFJlZlB0cjxSZWFsdGltZU1lZGlhU291cmNlT3dyPiBzb3VyY2U7
Ci0KLSAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICBjYXNlIFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5
cGU6OkF1ZGlvOgotICAgICAgICBuYW1lID0gInJlbW90ZSBhdWRpbyI7Ci0gICAgICAgIHNvdXJj
ZSA9IGFkb3B0UmVmKG5ldyBSZWFsdGltZUF1ZGlvU291cmNlT3dyKG51bGxwdHIsIGlkLCB0eXBl
LCBuYW1lKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgUmVhbHRpbWVNZWRpYVNvdXJjZTo6
VHlwZTo6VmlkZW86Ci0gICAgICAgIG5hbWUgPSAicmVtb3RlIHZpZGVvIjsKLSAgICAgICAgc291
cmNlID0gYWRvcHRSZWYobmV3IFJlYWx0aW1lVmlkZW9Tb3VyY2VPd3IobnVsbHB0ciwgaWQsIHR5
cGUsIG5hbWUpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBSZWFsdGltZU1lZGlhU291cmNl
OjpUeXBlOjpOb25lOgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9Ci0KLSAg
ICBtX211dGVkUmVtb3RlU291cmNlcy5zZXQobWlkLCBzb3VyY2UpOwotCi0gICAgcmV0dXJuICpz
b3VyY2U7Ci19Ci0KLXZvaWQgTWVkaWFFbmRwb2ludE93cjo6cmVwbGFjZVNlbmRTb3VyY2UoUmVh
bHRpbWVNZWRpYVNvdXJjZSYgbmV3U291cmNlLCBjb25zdCBTdHJpbmcmIG1pZCkKLXsKLSAgICBV
TlVTRURfUEFSQU0obmV3U291cmNlKTsKLSAgICBVTlVTRURfUEFSQU0obWlkKTsKLQotICAgIC8v
IEZJWE1FOiBXZSB3YW50IHRvIHVzZSBvd3JfbWVkaWFfc2Vzc2lvbl9zZXRfc2VuZF9zb3VyY2Ug
aGVyZSwgYnV0IGl0IGRvZXNuJ3Qgd29yayBhcyBpbnRlbmRlZC4KLSAgICAvLyBJc3N1ZSB0cmFj
a2VkIGJ5IE9wZW5XZWJSVEMgYnVnOiBodHRwczovL2dpdGh1Yi5jb20vRXJpY3Nzb25SZXNlYXJj
aC9vcGVud2VicnRjL2lzc3Vlcy81MzMKLQotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZv
aWQgTWVkaWFFbmRwb2ludE93cjo6c3RvcCgpCi17Ci0gICAgaWYgKCFtX3RyYW5zcG9ydEFnZW50
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBmb3IgKGF1dG8mIHRyYW5zY2VpdmVyIDogbV90cmFu
c2NlaXZlcnMpCi0gICAgICAgIG93cl9tZWRpYV9zZXNzaW9uX3NldF9zZW5kX3NvdXJjZShPV1Jf
TUVESUFfU0VTU0lPTih0cmFuc2NlaXZlci0+c2Vzc2lvbigpKSwgbnVsbHB0cik7Ci0KLSAgICBn
X29iamVjdF91bnJlZihtX3RyYW5zcG9ydEFnZW50KTsKLSAgICBtX3RyYW5zcG9ydEFnZW50ID0g
bnVsbHB0cjsKLX0KLQotc2l6ZV90IE1lZGlhRW5kcG9pbnRPd3I6OnRyYW5zY2VpdmVySW5kZXhG
b3JTZXNzaW9uKE93clNlc3Npb24qIHNlc3Npb24pIGNvbnN0Ci17Ci0gICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IG1fdHJhbnNjZWl2ZXJzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmICht
X3RyYW5zY2VpdmVyc1tpXS0+c2Vzc2lvbigpID09IHNlc3Npb24pCi0gICAgICAgICAgICByZXR1
cm4gaTsKLSAgICB9Ci0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gbm90
Rm91bmQ7Ci19Ci0KLWNvbnN0IFN0cmluZyYgTWVkaWFFbmRwb2ludE93cjo6c2Vzc2lvbk1pZChP
d3JTZXNzaW9uKiBzZXNzaW9uKSBjb25zdAotewotICAgIHNpemVfdCBpbmRleCA9IHRyYW5zY2Vp
dmVySW5kZXhGb3JTZXNzaW9uKHNlc3Npb24pOwotICAgIHJldHVybiBtX3RyYW5zY2VpdmVyc1tp
bmRleF0tPm1pZCgpOwotfQotCi1Pd3JUcmFuc2NlaXZlciogTWVkaWFFbmRwb2ludE93cjo6bWF0
Y2hUcmFuc2NlaXZlckJ5TWlkKGNvbnN0IFN0cmluZyYgbWlkKSBjb25zdAotewotICAgIGZvciAo
YXV0byYgdHJhbnNjZWl2ZXIgOiBtX3RyYW5zY2VpdmVycykgewotICAgICAgICBpZiAodHJhbnNj
ZWl2ZXItPm1pZCgpID09IG1pZCkKLSAgICAgICAgICAgIHJldHVybiB0cmFuc2NlaXZlci5nZXQo
KTsKLSAgICB9Ci0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLXZvaWQgTWVkaWFFbmRwb2ludE93
cjo6ZGlzcGF0Y2hOZXdJY2VDYW5kaWRhdGUoY29uc3QgU3RyaW5nJiBtaWQsIEljZUNhbmRpZGF0
ZSYmIGljZUNhbmRpZGF0ZSkKLXsKLSAgICBtX2NsaWVudC5nb3RJY2VDYW5kaWRhdGUobWlkLCBX
VEZNb3ZlKGljZUNhbmRpZGF0ZSkpOwotfQotCi12b2lkIE1lZGlhRW5kcG9pbnRPd3I6OmRpc3Bh
dGNoR2F0aGVyaW5nRG9uZShjb25zdCBTdHJpbmcmIG1pZCkKLXsKLSAgICBtX2NsaWVudC5kb25l
R2F0aGVyaW5nQ2FuZGlkYXRlcyhtaWQpOwotfQotCi12b2lkIE1lZGlhRW5kcG9pbnRPd3I6OnBy
b2Nlc3NJY2VUcmFuc3BvcnRTdGF0ZUNoYW5nZShPd3JTZXNzaW9uKiBzZXNzaW9uKQotewotICAg
IE93ckljZVN0YXRlIG93ckljZVN0YXRlOwotICAgIGdfb2JqZWN0X2dldChzZXNzaW9uLCAiaWNl
LWNvbm5lY3Rpb24tc3RhdGUiLCAmb3dySWNlU3RhdGUsIG51bGxwdHIpOwotCi0gICAgT3dyVHJh
bnNjZWl2ZXImIHRyYW5zY2VpdmVyID0gKm1fdHJhbnNjZWl2ZXJzW3RyYW5zY2VpdmVySW5kZXhG
b3JTZXNzaW9uKHNlc3Npb24pXTsKLSAgICBpZiAob3dySWNlU3RhdGUgPCB0cmFuc2NlaXZlci5v
d3JJY2VTdGF0ZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICB0cmFuc2NlaXZlci5zZXRPd3JJ
Y2VTdGF0ZShvd3JJY2VTdGF0ZSk7Ci0KLSAgICAvLyBXZSBjYW5ub3QgZ28gdG8gQ29tcGxldGVk
IGlmIHRoZXJlIG1heSBiZSBtb3JlIHJlbW90ZSBjYW5kaWRhdGVzLgotICAgIGlmIChvd3JJY2VT
dGF0ZSA9PSBPV1JfSUNFX1NUQVRFX1JFQURZICYmICF0cmFuc2NlaXZlci5nb3RFbmRPZlJlbW90
ZUNhbmRpZGF0ZXMoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUlRDSWNlVHJhbnNwb3J0U3Rh
dGUgdHJhbnNwb3J0U3RhdGU7Ci0gICAgc3dpdGNoIChvd3JJY2VTdGF0ZSkgewotICAgIGNhc2Ug
T1dSX0lDRV9TVEFURV9DT05ORUNUSU5HOgotICAgICAgICB0cmFuc3BvcnRTdGF0ZSA9IFJUQ0lj
ZVRyYW5zcG9ydFN0YXRlOjpDaGVja2luZzsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBPV1Jf
SUNFX1NUQVRFX0NPTk5FQ1RFRDoKLSAgICAgICAgdHJhbnNwb3J0U3RhdGUgPSBSVENJY2VUcmFu
c3BvcnRTdGF0ZTo6Q29ubmVjdGVkOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIE9XUl9JQ0Vf
U1RBVEVfUkVBRFk6Ci0gICAgICAgIHRyYW5zcG9ydFN0YXRlID0gUlRDSWNlVHJhbnNwb3J0U3Rh
dGU6OkNvbXBsZXRlZDsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBPV1JfSUNFX1NUQVRFX0ZB
SUxFRDoKLSAgICAgICAgdHJhbnNwb3J0U3RhdGUgPSBSVENJY2VUcmFuc3BvcnRTdGF0ZTo6RmFp
bGVkOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgbV9jbGllbnQuaWNlVHJhbnNwb3J0U3RhdGVDaGFuZ2VkKHRyYW5zY2VpdmVyLm1p
ZCgpLCB0cmFuc3BvcnRTdGF0ZSk7Ci19Ci0KLXZvaWQgTWVkaWFFbmRwb2ludE93cjo6ZGlzcGF0
Y2hEdGxzRmluZ2VycHJpbnQoZ2NoYXIqIHByaXZhdGVLZXksIGdjaGFyKiBjZXJ0aWZpY2F0ZSwg
Y29uc3QgU3RyaW5nJiBmaW5nZXJwcmludCwgY29uc3QgU3RyaW5nJiBmaW5nZXJwcmludEZ1bmN0
aW9uKQotewotICAgIG1fZHRsc1ByaXZhdGVLZXkgPSBTdHJpbmcocHJpdmF0ZUtleSk7Ci0gICAg
bV9kdGxzQ2VydGlmaWNhdGUgPSBTdHJpbmcoY2VydGlmaWNhdGUpOwotCi0gICAgZ19mcmVlKHBy
aXZhdGVLZXkpOwotICAgIGdfZnJlZShjZXJ0aWZpY2F0ZSk7Ci0KLSAgICBtX2NsaWVudC5nb3RE
dGxzRmluZ2VycHJpbnQoZmluZ2VycHJpbnQsIGZpbmdlcnByaW50RnVuY3Rpb24pOwotfQotCi12
b2lkIE1lZGlhRW5kcG9pbnRPd3I6OnVubXV0ZVJlbW90ZVNvdXJjZShjb25zdCBTdHJpbmcmIG1p
ZCwgT3dyTWVkaWFTb3VyY2UqIHJlYWxTb3VyY2UpCi17Ci0gICAgUmVmUHRyPFJlYWx0aW1lTWVk
aWFTb3VyY2VPd3I+IHJlbW90ZVNvdXJjZSA9IG1fbXV0ZWRSZW1vdGVTb3VyY2VzLnRha2UobWlk
KTsKLSAgICBpZiAoIXJlbW90ZVNvdXJjZSkgewotICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0
byBmaW5kIG11dGVkIHJlbW90ZSBzb3VyY2UuIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICBpZiAocmVtb3RlU291cmNlLT5pc1Byb2R1Y2luZ0RhdGEoKSkKLSAgICAgICAgcmVtb3Rl
U291cmNlLT5zd2FwT3V0U2hhbGxvd1NvdXJjZSgqcmVhbFNvdXJjZSk7Ci19Ci0KLXZvaWQgTWVk
aWFFbmRwb2ludE93cjo6cHJlcGFyZVNlc3Npb24oT3dyU2Vzc2lvbiogc2Vzc2lvbiwgUGVlck1l
ZGlhRGVzY3JpcHRpb24qIG1lZGlhRGVzY3JpcHRpb24pCi17Ci0gICAgZ19vYmplY3Rfc2V0X2Rh
dGFfZnVsbChHX09CSkVDVChzZXNzaW9uKSwgImljZS11ZnJhZyIsIGdfc3RyZHVwKG1lZGlhRGVz
Y3JpcHRpb24tPmljZVVmcmFnLmFzY2lpKCkuZGF0YSgpKSwgZ19mcmVlKTsKLSAgICBnX29iamVj
dF9zZXRfZGF0YV9mdWxsKEdfT0JKRUNUKHNlc3Npb24pLCAiaWNlLXBhc3N3b3JkIiwgZ19zdHJk
dXAobWVkaWFEZXNjcmlwdGlvbi0+aWNlUGFzc3dvcmQuYXNjaWkoKS5kYXRhKCkpLCBnX2ZyZWUp
OwotCi0gICAgZ19zaWduYWxfY29ubmVjdChzZXNzaW9uLCAib24tbmV3LWNhbmRpZGF0ZSIsIEdf
Q0FMTEJBQ0soZ290Q2FuZGlkYXRlKSwgdGhpcyk7Ci0gICAgZ19zaWduYWxfY29ubmVjdChzZXNz
aW9uLCAib24tY2FuZGlkYXRlLWdhdGhlcmluZy1kb25lIiwgR19DQUxMQkFDSyhjYW5kaWRhdGVH
YXRoZXJpbmdEb25lKSwgdGhpcyk7Ci0gICAgZ19zaWduYWxfY29ubmVjdChzZXNzaW9uLCAibm90
aWZ5OjppY2UtY29ubmVjdGlvbi1zdGF0ZSIsIEdfQ0FMTEJBQ0soaWNlQ29ubmVjdGlvblN0YXRl
Q2hhbmdlKSwgdGhpcyk7Ci19Ci0KLXZvaWQgTWVkaWFFbmRwb2ludE93cjo6cHJlcGFyZU1lZGlh
U2Vzc2lvbihPd3JNZWRpYVNlc3Npb24qIG1lZGlhU2Vzc2lvbiwgUGVlck1lZGlhRGVzY3JpcHRp
b24qIG1lZGlhRGVzY3JpcHRpb24sIGJvb2wgaXNJbml0aWF0b3IpCi17Ci0gICAgcHJlcGFyZVNl
c3Npb24oT1dSX1NFU1NJT04obWVkaWFTZXNzaW9uKSwgbWVkaWFEZXNjcmlwdGlvbik7Ci0KLSAg
ICBib29sIHVzZVJ0Y3BNdXggPSAhaXNJbml0aWF0b3IgJiYgbWVkaWFEZXNjcmlwdGlvbi0+cnRj
cE11eDsKLSAgICBnX29iamVjdF9zZXQobWVkaWFTZXNzaW9uLCAicnRjcC1tdXgiLCB1c2VSdGNw
TXV4LCBudWxscHRyKTsKLQotICAgIGlmICghbWVkaWFEZXNjcmlwdGlvbi0+Y25hbWUuaXNFbXB0
eSgpICYmIG1lZGlhRGVzY3JpcHRpb24tPnNzcmNzLnNpemUoKSkgewotICAgICAgICBnX29iamVj
dF9zZXQobWVkaWFTZXNzaW9uLCAiY25hbWUiLCBtZWRpYURlc2NyaXB0aW9uLT5jbmFtZS5hc2Np
aSgpLmRhdGEoKSwKLSAgICAgICAgICAgICJzZW5kLXNzcmMiLCBtZWRpYURlc2NyaXB0aW9uLT5z
c3Jjc1swXSwKLSAgICAgICAgICAgIG51bGxwdHIpOwotICAgIH0KLQotICAgIGdfc2lnbmFsX2Nv
bm5lY3QobWVkaWFTZXNzaW9uLCAib24taW5jb21pbmctc291cmNlIiwgR19DQUxMQkFDSyhnb3RJ
bmNvbWluZ1NvdXJjZSksIHRoaXMpOwotCi0gICAgZm9yIChhdXRvJiBwYXlsb2FkIDogbWVkaWFE
ZXNjcmlwdGlvbi0+cGF5bG9hZHMpIHsKLSAgICAgICAgaWYgKHBheWxvYWQuZW5jb2RpbmdOYW1l
LmNvbnZlcnRUb0FTQ0lJVXBwZXJjYXNlKCkgPT0gIlJUWCIpCi0gICAgICAgICAgICBjb250aW51
ZTsKLQotICAgICAgICBhdXRvKiBydHhQYXlsb2FkID0gZmluZFJ0eFBheWxvYWQobWVkaWFEZXNj
cmlwdGlvbi0+cGF5bG9hZHMsIHBheWxvYWQudHlwZSk7Ci0KLSAgICAgICAgQVNTRVJUX1dJVEhf
TUVTU0FHRShjb2RlY1R5cGVzLmZpbmQocGF5bG9hZC5lbmNvZGluZ05hbWUuY29udmVydFRvQVND
SUlVcHBlcmNhc2UoKSkgIT0gbm90Rm91bmQsICJVbmFibGUgdG8gZmluZCBjb2RlYzogJXMiLCBw
YXlsb2FkLmVuY29kaW5nTmFtZS51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgT3dyQ29kZWNUeXBl
IGNvZGVjVHlwZSA9IHN0YXRpY19jYXN0PE93ckNvZGVjVHlwZT4oY29kZWNUeXBlcy5maW5kKHBh
eWxvYWQuZW5jb2RpbmdOYW1lLmNvbnZlcnRUb0FTQ0lJVXBwZXJjYXNlKCkpKTsKLQotICAgICAg
ICBPd3JQYXlsb2FkKiByZWNlaXZlUGF5bG9hZDsKLSAgICAgICAgaWYgKG1lZGlhRGVzY3JpcHRp
b24tPnR5cGUgPT0gImF1ZGlvIikKLSAgICAgICAgICAgIHJlY2VpdmVQYXlsb2FkID0gb3dyX2F1
ZGlvX3BheWxvYWRfbmV3KGNvZGVjVHlwZSwgcGF5bG9hZC50eXBlLCBwYXlsb2FkLmNsb2NrUmF0
ZSwgcGF5bG9hZC5jaGFubmVscyk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgcmVjZWl2
ZVBheWxvYWQgPSBvd3JfdmlkZW9fcGF5bG9hZF9uZXcoY29kZWNUeXBlLCBwYXlsb2FkLnR5cGUs
IHBheWxvYWQuY2xvY2tSYXRlLCBwYXlsb2FkLmNjbWZpciwgcGF5bG9hZC5uYWNrcGxpKTsKLSAg
ICAgICAgICAgIGdfb2JqZWN0X3NldChyZWNlaXZlUGF5bG9hZCwgInJ0eC1wYXlsb2FkLXR5cGUi
LCBydHhQYXlsb2FkID8gcnR4UGF5bG9hZC0+dHlwZSA6IC0xLAotICAgICAgICAgICAgICAgICJy
dHgtdGltZSIsIHJ0eFBheWxvYWQgJiYgcnR4UGF5bG9hZC0+cGFyYW1ldGVycy5jb250YWlucygi
cnR4VGltZSIpID8gcnR4UGF5bG9hZC0+cGFyYW1ldGVycy5nZXQoInJ0eFRpbWUiKSA6IDAsIG51
bGxwdHIpOwotICAgICAgICB9Ci0KLSAgICAgICAgb3dyX21lZGlhX3Nlc3Npb25fYWRkX3JlY2Vp
dmVfcGF5bG9hZChtZWRpYVNlc3Npb24sIHJlY2VpdmVQYXlsb2FkKTsKLSAgICB9Ci19Ci0KLXN0
cnVjdCBIZWxwZXJTZXJ2ZXJVcmwgewotICAgIFN0cmluZyBwcm90b2NvbDsKLSAgICBTdHJpbmcg
aG9zdDsKLSAgICB1bnNpZ25lZCBzaG9ydCBwb3J0OwotICAgIFN0cmluZyBxdWVyeTsKLX07Ci0K
LXN0YXRpYyB2b2lkIHBhcnNlSGVscGVyU2VydmVyVXJsKEdSZWdleCYgcmVnZXgsIGNvbnN0IFVS
TCYgdXJsLCBIZWxwZXJTZXJ2ZXJVcmwmIG91dFVybCkKLXsKLSAgICBHTWF0Y2hJbmZvKiBtYXRj
aEluZm87Ci0KLSAgICBpZiAoZ19yZWdleF9tYXRjaCgmcmVnZXgsIHVybC5zdHJpbmcoKS5hc2Np
aSgpLmRhdGEoKSwgc3RhdGljX2Nhc3Q8R1JlZ2V4TWF0Y2hGbGFncz4oMCksICZtYXRjaEluZm8p
KSB7Ci0gICAgICAgIGdjaGFyKiogbWF0Y2hlcyA9ICBnX21hdGNoX2luZm9fZmV0Y2hfYWxsKG1h
dGNoSW5mbyk7Ci0gICAgICAgIGdpbnQgbWF0Y2hDb3VudCA9IGdfc3Rydl9sZW5ndGgobWF0Y2hl
cyk7Ci0KLSAgICAgICAgb3V0VXJsLnByb3RvY29sID0gbWF0Y2hlc1sxXTsKLSAgICAgICAgb3V0
VXJsLmhvc3QgPSBtYXRjaGVzWzJdWzBdID09ICdbJyA/IFN0cmluZyhtYXRjaGVzWzJdICsgMSwg
c3RybGVuKG1hdGNoZXNbMl0pIC0gMikgLy8gSVB2NgotICAgICAgICAgICAgOiBtYXRjaGVzWzJd
OwotCi0gICAgICAgIG91dFVybC5wb3J0ID0gMDsKLSAgICAgICAgaWYgKG1hdGNoQ291bnQgPj0g
NCkgewotICAgICAgICAgICAgU3RyaW5nIHBvcnRTdHJpbmcgPSBTdHJpbmcobWF0Y2hlc1szXSAr
IDEpOyAvLyBTa2lwIHBvcnQgY29sb24KLSAgICAgICAgICAgIG91dFVybC5wb3J0ID0gcG9ydFN0
cmluZy50b1VJbnRTdHJpY3QoKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChtYXRjaENvdW50
ID09IDUpCi0gICAgICAgICAgICBvdXRVcmwucXVlcnkgPSBTdHJpbmcobWF0Y2hlc1s0XSArIDEp
OyAvLyBTa2lwIHF1ZXN0aW9uIG1hcmsKLQotICAgICAgICBnX3N0cmZyZWV2KG1hdGNoZXMpOwot
ICAgIH0KLQotICAgIGdfbWF0Y2hfaW5mb19mcmVlKG1hdGNoSW5mbyk7Ci19Ci0KLXZvaWQgTWVk
aWFFbmRwb2ludE93cjo6ZW5zdXJlVHJhbnNwb3J0QWdlbnRBbmRUcmFuc2NlaXZlcnMoYm9vbCBp
c0luaXRpYXRvciwgY29uc3QgVmVjdG9yPFRyYW5zY2VpdmVyQ29uZmlnPiYgdHJhbnNjZWl2ZXJD
b25maWdzKQotewotICAgIEFTU0VSVChtX2R0bHNQcml2YXRlS2V5KTsKLSAgICBBU1NFUlQobV9k
dGxzQ2VydGlmaWNhdGUpOwotCi0gICAgaWYgKCFtX3RyYW5zcG9ydEFnZW50KSB7Ci0gICAgICAg
IC8vIEZJWE1FOiBIYW5kbGUgU0RQIEJVTkRMRSBsaW5lIGZyb20gdGhlIHJlbW90ZSBzb3VyY2Ug
aW5zdGVhZCBvZiBmYWxsaW5nIGJhY2sgdG8gYmFsYW5jZWQuCi0gICAgICAgIE93ckJ1bmRsZVBv
bGljeVR5cGUgYnVuZGxlUG9saWN5ID0gT1dSX0JVTkRMRV9QT0xJQ1lfVFlQRV9CQUxBTkNFRDsK
LQotICAgICAgICBzd2l0Y2ggKG1fY29uZmlndXJhdGlvbi0+YnVuZGxlUG9saWN5KSB7Ci0gICAg
ICAgIGNhc2UgUGVlckNvbm5lY3Rpb25TdGF0ZXM6OkJ1bmRsZVBvbGljeTo6QmFsYW5jZWQ6Ci0g
ICAgICAgICAgICBidW5kbGVQb2xpY3kgPSBPV1JfQlVORExFX1BPTElDWV9UWVBFX0JBTEFOQ0VE
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUGVlckNvbm5lY3Rpb25TdGF0ZXM6
OkJ1bmRsZVBvbGljeTo6TWF4Q29tcGF0OgotICAgICAgICAgICAgYnVuZGxlUG9saWN5ID0gT1dS
X0JVTkRMRV9QT0xJQ1lfVFlQRV9NQVhfQ09NUEFUOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgUGVlckNvbm5lY3Rpb25TdGF0ZXM6OkJ1bmRsZVBvbGljeTo6TWF4QnVuZGxlOgot
ICAgICAgICAgICAgYnVuZGxlUG9saWN5ID0gT1dSX0JVTkRMRV9QT0xJQ1lfVFlQRV9NQVhfQlVO
RExFOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgfTsKLQotICAgICAgICBtX3RyYW5zcG9ydEFn
ZW50ID0gb3dyX3RyYW5zcG9ydF9hZ2VudF9uZXcoZmFsc2UsIGJ1bmRsZVBvbGljeSk7Ci0KLSAg
ICAgICAgQVNTRVJUKG1fY29uZmlndXJhdGlvbik7Ci0gICAgICAgIGZvciAoYXV0byYgc2VydmVy
IDogbV9jb25maWd1cmF0aW9uLT5pY2VTZXJ2ZXJzKSB7Ci0gICAgICAgICAgICBmb3IgKGF1dG8m
IHdlYmtpdFVybCA6IHNlcnZlci51cmxzKSB7Ci0gICAgICAgICAgICAgICAgSGVscGVyU2VydmVy
VXJsIHVybDsKLSAgICAgICAgICAgICAgICAvLyBXZWJLaXQncyBVUkwgY2xhc3MgY2FuJ3QgaGFu
ZGxlIElDRSBoZWxwZXIgc2VydmVyIHVybHMgcHJvcGVybHkKLSAgICAgICAgICAgICAgICBwYXJz
ZUhlbHBlclNlcnZlclVybCgqbV9oZWxwZXJTZXJ2ZXJSZWdFeCwgd2Via2l0VXJsLCB1cmwpOwot
Ci0gICAgICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgcG9ydCA9IHVybC5wb3J0ID8gdXJsLnBv
cnQgOiBoZWxwZXJTZXJ2ZXJEZWZhdWx0UG9ydDsKLQotICAgICAgICAgICAgICAgIGlmICh1cmwu
cHJvdG9jb2wgPT0gInN0dW4iKSB7Ci0gICAgICAgICAgICAgICAgICAgIG93cl90cmFuc3BvcnRf
YWdlbnRfYWRkX2hlbHBlcl9zZXJ2ZXIobV90cmFuc3BvcnRBZ2VudCwgT1dSX0hFTFBFUl9TRVJW
RVJfVFlQRV9TVFVOLAotICAgICAgICAgICAgICAgICAgICAgICAgdXJsLmhvc3QuYXNjaWkoKS5k
YXRhKCksIHBvcnQsIG51bGxwdHIsIG51bGxwdHIpOwotCi0gICAgICAgICAgICAgICAgfSBlbHNl
IGlmICh1cmwucHJvdG9jb2wgPT0gInR1cm4iKSB7Ci0gICAgICAgICAgICAgICAgICAgIE93ckhl
bHBlclNlcnZlclR5cGUgc2VydmVyVHlwZSA9IHVybC5xdWVyeSA9PSAidHJhbnNwb3J0PXRjcCIg
PyBPV1JfSEVMUEVSX1NFUlZFUl9UWVBFX1RVUk5fVENQCi0gICAgICAgICAgICAgICAgICAgICAg
ICA6IE9XUl9IRUxQRVJfU0VSVkVSX1RZUEVfVFVSTl9VRFA7Ci0KLSAgICAgICAgICAgICAgICAg
ICAgb3dyX3RyYW5zcG9ydF9hZ2VudF9hZGRfaGVscGVyX3NlcnZlcihtX3RyYW5zcG9ydEFnZW50
LCBzZXJ2ZXJUeXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgdXJsLmhvc3QuYXNjaWkoKS5k
YXRhKCksIHBvcnQsCi0gICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXIudXNlcm5hbWUuYXNj
aWkoKS5kYXRhKCksIHNlcnZlci5jcmVkZW50aWFsLmFzY2lpKCkuZGF0YSgpKTsKLSAgICAgICAg
ICAgICAgICB9IGVsc2UgaWYgKHVybC5wcm90b2NvbCA9PSAidHVybnMiKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIG93cl90cmFuc3BvcnRfYWdlbnRfYWRkX2hlbHBlcl9zZXJ2ZXIobV90cmFuc3Bv
cnRBZ2VudCwgT1dSX0hFTFBFUl9TRVJWRVJfVFlQRV9UVVJOX1RMUywKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHVybC5ob3N0LmFzY2lpKCkuZGF0YSgpLCBwb3J0LAotICAgICAgICAgICAgICAg
ICAgICAgICAgc2VydmVyLnVzZXJuYW1lLmFzY2lpKCkuZGF0YSgpLCBzZXJ2ZXIuY3JlZGVudGlh
bC5hc2NpaSgpLmRhdGEoKSk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0g
ICAgfQotCi0gICAgZ19vYmplY3Rfc2V0KG1fdHJhbnNwb3J0QWdlbnQsICJpY2UtY29udHJvbGxp
bmctbW9kZSIsIGlzSW5pdGlhdG9yLCBudWxscHRyKTsKLQotICAgIGZvciAoYXV0byYgY29uZmln
IDogdHJhbnNjZWl2ZXJDb25maWdzKSB7Ci0gICAgICAgIE93clNlc3Npb24qIHNlc3Npb24gPSBP
V1JfU0VTU0lPTihvd3JfbWVkaWFfc2Vzc2lvbl9uZXcoY29uZmlnLmlzRHRsc0NsaWVudCkpOwot
ICAgICAgICBnX29iamVjdF9zZXQoc2Vzc2lvbiwgImR0bHMtY2VydGlmaWNhdGUiLCBtX2R0bHND
ZXJ0aWZpY2F0ZS51dGY4KCkuZGF0YSgpLAotICAgICAgICAgICAgImR0bHMta2V5IiwgbV9kdGxz
UHJpdmF0ZUtleS51dGY4KCkuZGF0YSgpLAotICAgICAgICAgICAgbnVsbHB0cik7Ci0KLSAgICAg
ICAgbV90cmFuc2NlaXZlcnMuYXBwZW5kKE93clRyYW5zY2VpdmVyOjpjcmVhdGUoY29uZmlnLm1p
ZCwgc2Vzc2lvbikpOwotICAgIH0KLX0KLQotdm9pZCBNZWRpYUVuZHBvaW50T3dyOjppbnRlcm5h
bEFkZFJlbW90ZUNhbmRpZGF0ZShPd3JTZXNzaW9uKiBzZXNzaW9uLCBjb25zdCBJY2VDYW5kaWRh
dGUmIGNhbmRpZGF0ZSwgY29uc3QgU3RyaW5nJiB1ZnJhZywgY29uc3QgU3RyaW5nJiBwYXNzd29y
ZCkKLXsKLSAgICBnYm9vbGVhbiBydGNwTXV4OwotICAgIGdfb2JqZWN0X2dldChzZXNzaW9uLCAi
cnRjcC1tdXgiLCAmcnRjcE11eCwgbnVsbHB0cik7Ci0KLSAgICBpZiAocnRjcE11eCAmJiBjYW5k
aWRhdGUuY29tcG9uZW50SWQgPT0gT1dSX0NPTVBPTkVOVF9UWVBFX1JUQ1ApCi0gICAgICAgIHJl
dHVybjsKLQotICAgIEFTU0VSVChjYW5kaWRhdGVUeXBlcy5maW5kKGNhbmRpZGF0ZS50eXBlKSAh
PSBub3RGb3VuZCk7Ci0KLSAgICBPd3JDYW5kaWRhdGVUeXBlIGNhbmRpZGF0ZVR5cGUgPSBzdGF0
aWNfY2FzdDxPd3JDYW5kaWRhdGVUeXBlPihjYW5kaWRhdGVUeXBlcy5maW5kKGNhbmRpZGF0ZS50
eXBlKSk7Ci0gICAgT3dyQ29tcG9uZW50VHlwZSBjb21wb25lbnRJZCA9IHN0YXRpY19jYXN0PE93
ckNvbXBvbmVudFR5cGU+KGNhbmRpZGF0ZS5jb21wb25lbnRJZCk7Ci0gICAgT3dyVHJhbnNwb3J0
VHlwZSB0cmFuc3BvcnRUeXBlOwotCi0gICAgaWYgKGNhbmRpZGF0ZS50cmFuc3BvcnQuY29udmVy
dFRvQVNDSUlVcHBlcmNhc2UoKSA9PSAiVURQIikKLSAgICAgICAgdHJhbnNwb3J0VHlwZSA9IE9X
Ul9UUkFOU1BPUlRfVFlQRV9VRFA7Ci0gICAgZWxzZSB7Ci0gICAgICAgIEFTU0VSVChjYW5kaWRh
dGVUY3BUeXBlcy5maW5kKGNhbmRpZGF0ZS50Y3BUeXBlKSAhPSBub3RGb3VuZCk7Ci0gICAgICAg
IHRyYW5zcG9ydFR5cGUgPSBzdGF0aWNfY2FzdDxPd3JUcmFuc3BvcnRUeXBlPihjYW5kaWRhdGVU
Y3BUeXBlcy5maW5kKGNhbmRpZGF0ZS50Y3BUeXBlKSk7Ci0gICAgfQotCi0gICAgT3dyQ2FuZGlk
YXRlKiBvd3JDYW5kaWRhdGUgPSBvd3JfY2FuZGlkYXRlX25ldyhjYW5kaWRhdGVUeXBlLCBjb21w
b25lbnRJZCk7Ci0gICAgZ19vYmplY3Rfc2V0KG93ckNhbmRpZGF0ZSwgInRyYW5zcG9ydC10eXBl
IiwgdHJhbnNwb3J0VHlwZSwKLSAgICAgICAgImFkZHJlc3MiLCBjYW5kaWRhdGUuYWRkcmVzcy5h
c2NpaSgpLmRhdGEoKSwKLSAgICAgICAgInBvcnQiLCBjYW5kaWRhdGUucG9ydCwKLSAgICAgICAg
ImJhc2UtYWRkcmVzcyIsIGNhbmRpZGF0ZS5yZWxhdGVkQWRkcmVzcy5hc2NpaSgpLmRhdGEoKSwK
LSAgICAgICAgImJhc2UtcG9ydCIsIGNhbmRpZGF0ZS5yZWxhdGVkUG9ydCwKLSAgICAgICAgInBy
aW9yaXR5IiwgY2FuZGlkYXRlLnByaW9yaXR5LAotICAgICAgICAiZm91bmRhdGlvbiIsIGNhbmRp
ZGF0ZS5mb3VuZGF0aW9uLmFzY2lpKCkuZGF0YSgpLAotICAgICAgICAidWZyYWciLCB1ZnJhZy5h
c2NpaSgpLmRhdGEoKSwKLSAgICAgICAgInBhc3N3b3JkIiwgcGFzc3dvcmQuYXNjaWkoKS5kYXRh
KCksCi0gICAgICAgIG51bGxwdHIpOwotCi0gICAgb3dyX3Nlc3Npb25fYWRkX3JlbW90ZV9jYW5k
aWRhdGUoc2Vzc2lvbiwgb3dyQ2FuZGlkYXRlKTsKLX0KLQotc3RhdGljIHZvaWQgZ290Q2FuZGlk
YXRlKE93clNlc3Npb24qIHNlc3Npb24sIE93ckNhbmRpZGF0ZSogY2FuZGlkYXRlLCBNZWRpYUVu
ZHBvaW50T3dyKiBtZWRpYUVuZHBvaW50KQotewotICAgIE93ckNhbmRpZGF0ZVR5cGUgY2FuZGlk
YXRlVHlwZTsKLSAgICBnY2hhciogZm91bmRhdGlvbjsKLSAgICBPd3JDb21wb25lbnRUeXBlIGNv
bXBvbmVudElkOwotICAgIE93clRyYW5zcG9ydFR5cGUgdHJhbnNwb3J0VHlwZTsKLSAgICBnaW50
IHByaW9yaXR5OwotICAgIGdjaGFyKiBhZGRyZXNzOwotICAgIGd1aW50IHBvcnQ7Ci0gICAgZ2No
YXIqIHJlbGF0ZWRBZGRyZXNzOwotICAgIGd1aW50IHJlbGF0ZWRQb3J0OwotCi0gICAgZ19vYmpl
Y3RfZ2V0KGNhbmRpZGF0ZSwgInR5cGUiLCAmY2FuZGlkYXRlVHlwZSwKLSAgICAgICAgImZvdW5k
YXRpb24iLCAmZm91bmRhdGlvbiwKLSAgICAgICAgImNvbXBvbmVudC10eXBlIiwgJmNvbXBvbmVu
dElkLAotICAgICAgICAidHJhbnNwb3J0LXR5cGUiLCAmdHJhbnNwb3J0VHlwZSwKLSAgICAgICAg
InByaW9yaXR5IiwgJnByaW9yaXR5LAotICAgICAgICAiYWRkcmVzcyIsICZhZGRyZXNzLAotICAg
ICAgICAicG9ydCIsICZwb3J0LAotICAgICAgICAiYmFzZS1hZGRyZXNzIiwgJnJlbGF0ZWRBZGRy
ZXNzLAotICAgICAgICAiYmFzZS1wb3J0IiwgJnJlbGF0ZWRQb3J0LAotICAgICAgICBudWxscHRy
KTsKLQotICAgIEFTU0VSVChjYW5kaWRhdGVUeXBlID49IDAgJiYgY2FuZGlkYXRlVHlwZSA8IGNh
bmRpZGF0ZVR5cGVzLnNpemUoKSk7Ci0gICAgQVNTRVJUKHRyYW5zcG9ydFR5cGUgPj0gMCAmJiB0
cmFuc3BvcnRUeXBlIDwgY2FuZGlkYXRlVGNwVHlwZXMuc2l6ZSgpKTsKLQotICAgIEljZUNhbmRp
ZGF0ZSBpY2VDYW5kaWRhdGU7Ci0gICAgaWNlQ2FuZGlkYXRlLnR5cGUgPSBjYW5kaWRhdGVUeXBl
c1tjYW5kaWRhdGVUeXBlXTsKLSAgICBpY2VDYW5kaWRhdGUuZm91bmRhdGlvbiA9IGZvdW5kYXRp
b247Ci0gICAgaWNlQ2FuZGlkYXRlLmNvbXBvbmVudElkID0gY29tcG9uZW50SWQ7Ci0gICAgaWNl
Q2FuZGlkYXRlLnByaW9yaXR5ID0gcHJpb3JpdHk7Ci0gICAgaWNlQ2FuZGlkYXRlLmFkZHJlc3Mg
PSBhZGRyZXNzOwotICAgIGljZUNhbmRpZGF0ZS5wb3J0ID0gcG9ydCA/IHBvcnQgOiBjYW5kaWRh
dGVEZWZhdWx0UG9ydDsKLQotICAgIGlmICh0cmFuc3BvcnRUeXBlID09IE9XUl9UUkFOU1BPUlRf
VFlQRV9VRFApCi0gICAgICAgIGljZUNhbmRpZGF0ZS50cmFuc3BvcnQgPSAiVURQIjsKLSAgICBl
bHNlIHsKLSAgICAgICAgaWNlQ2FuZGlkYXRlLnRyYW5zcG9ydCA9ICJUQ1AiOwotICAgICAgICBp
Y2VDYW5kaWRhdGUudGNwVHlwZSA9IGNhbmRpZGF0ZVRjcFR5cGVzW3RyYW5zcG9ydFR5cGVdOwot
ICAgIH0KLQotICAgIGlmIChjYW5kaWRhdGVUeXBlICE9IE9XUl9DQU5ESURBVEVfVFlQRV9IT1NU
KSB7Ci0gICAgICAgIGljZUNhbmRpZGF0ZS5yZWxhdGVkQWRkcmVzcyA9IHJlbGF0ZWRBZGRyZXNz
OwotICAgICAgICBpY2VDYW5kaWRhdGUucmVsYXRlZFBvcnQgPSByZWxhdGVkUG9ydCA/IHJlbGF0
ZWRQb3J0IDogY2FuZGlkYXRlRGVmYXVsdFBvcnQ7Ci0gICAgfQotCi0gICAgZ19vYmplY3Rfc2V0
KEdfT0JKRUNUKGNhbmRpZGF0ZSksICJ1ZnJhZyIsIGdfb2JqZWN0X2dldF9kYXRhKEdfT0JKRUNU
KHNlc3Npb24pLCAiaWNlLXVmcmFnIiksCi0gICAgICAgICJwYXNzd29yZCIsIGdfb2JqZWN0X2dl
dF9kYXRhKEdfT0JKRUNUKHNlc3Npb24pLCAiaWNlLXBhc3N3b3JkIiksCi0gICAgICAgIG51bGxw
dHIpOwotCi0gICAgbWVkaWFFbmRwb2ludC0+ZGlzcGF0Y2hOZXdJY2VDYW5kaWRhdGUobWVkaWFF
bmRwb2ludC0+c2Vzc2lvbk1pZChzZXNzaW9uKSwgV1RGTW92ZShpY2VDYW5kaWRhdGUpKTsKLQot
ICAgIGdfZnJlZShmb3VuZGF0aW9uKTsKLSAgICBnX2ZyZWUoYWRkcmVzcyk7Ci0gICAgZ19mcmVl
KHJlbGF0ZWRBZGRyZXNzKTsKLX0KLQotc3RhdGljIHZvaWQgY2FuZGlkYXRlR2F0aGVyaW5nRG9u
ZShPd3JTZXNzaW9uKiBzZXNzaW9uLCBNZWRpYUVuZHBvaW50T3dyKiBtZWRpYUVuZHBvaW50KQot
ewotICAgIG1lZGlhRW5kcG9pbnQtPmRpc3BhdGNoR2F0aGVyaW5nRG9uZShtZWRpYUVuZHBvaW50
LT5zZXNzaW9uTWlkKHNlc3Npb24pKTsKLX0KLQotc3RhdGljIHZvaWQgaWNlQ29ubmVjdGlvblN0
YXRlQ2hhbmdlKE93clNlc3Npb24qIHNlc3Npb24sIEdQYXJhbVNwZWMqLCBNZWRpYUVuZHBvaW50
T3dyKiBtZWRpYUVuZHBvaW50KQotewotICAgIG1lZGlhRW5kcG9pbnQtPnByb2Nlc3NJY2VUcmFu
c3BvcnRTdGF0ZUNoYW5nZShzZXNzaW9uKTsKLX0KLQotc3RhdGljIHZvaWQgZ290SW5jb21pbmdT
b3VyY2UoT3dyTWVkaWFTZXNzaW9uKiBtZWRpYVNlc3Npb24sIE93ck1lZGlhU291cmNlKiBzb3Vy
Y2UsIE1lZGlhRW5kcG9pbnRPd3IqIG1lZGlhRW5kcG9pbnQpCi17Ci0gICAgbWVkaWFFbmRwb2lu
dC0+dW5tdXRlUmVtb3RlU291cmNlKG1lZGlhRW5kcG9pbnQtPnNlc3Npb25NaWQoT1dSX1NFU1NJ
T04obWVkaWFTZXNzaW9uKSksIHNvdXJjZSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
LQotI2VuZGlmIC8vIEVOQUJMRShXRUJfUlRDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWVkaWFzdHJlYW0vb3BlbndlYnJ0Yy9NZWRpYUVuZHBvaW50T3dyLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9vcGVud2VicnRjL01lZGlhRW5kcG9pbnRP
d3IuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjMxMDQ4YzllY2ZlZWUzNTBhYzI5
ZjYyMjFhY2QwYzJlYWRiOTBmNy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9vcGVud2VicnRj
L01lZGlhRW5kcG9pbnRPd3IuaAorKysgL2Rldi9udWxsCkBAIC0xLDE0OSArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDE1LCAyMDE2IEVyaWNzc29uIEFCLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiAgICBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlCi0gKiAgICBkaXN0cmlidXRpb24uCi0gKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIEVyaWNz
c29uIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICogICAgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0gKiAgICBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQg
Q09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdI
VAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLSNwcmFnbWEgb25jZQotCi0jaWYgRU5BQkxFKFdFQl9SVEMpCi0KLSNpbmNsdWRlICJN
ZWRpYUVuZHBvaW50LmgiCi0jaW5jbHVkZSA8b3dyL293cl9zZXNzaW9uLmg+Ci0jaW5jbHVkZSA8
d3RmL1JlZkNvdW50ZWQuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0KLXR5cGVkZWYgc3Ry
dWN0IF9Pd3JNZWRpYVNlc3Npb24gT3dyTWVkaWFTZXNzaW9uOwotdHlwZWRlZiBzdHJ1Y3QgX093
ck1lZGlhU291cmNlIE93ck1lZGlhU291cmNlOwotdHlwZWRlZiBzdHJ1Y3QgX093clRyYW5zcG9y
dEFnZW50IE93clRyYW5zcG9ydEFnZW50OwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNz
IFJlYWx0aW1lTWVkaWFTb3VyY2VPd3I7Ci1jbGFzcyBSVENDb25maWd1cmF0aW9uUHJpdmF0ZTsK
LQotc3RydWN0IFBlZXJNZWRpYURlc2NyaXB0aW9uOwotCi1jbGFzcyBPd3JUcmFuc2NlaXZlciA6
IHB1YmxpYyBSZWZDb3VudGVkPE93clRyYW5zY2VpdmVyPiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGlj
IFJlZjxPd3JUcmFuc2NlaXZlcj4gY3JlYXRlKGNvbnN0IFN0cmluZyYgbWlkLCBPd3JTZXNzaW9u
KiBzZXNzaW9uKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgT3dyVHJhbnNj
ZWl2ZXIobWlkLCBzZXNzaW9uKSk7Ci0gICAgfQotICAgIHZpcnR1YWwgfk93clRyYW5zY2VpdmVy
KCkgeyB9Ci0KLSAgICBjb25zdCBTdHJpbmcmIG1pZCgpIGNvbnN0IHsgcmV0dXJuIG1fbWlkOyB9
Ci0gICAgT3dyU2Vzc2lvbiogc2Vzc2lvbigpIGNvbnN0IHsgcmV0dXJuIG1fc2Vzc2lvbjsgfQot
Ci0gICAgT3dySWNlU3RhdGUgb3dySWNlU3RhdGUoKSBjb25zdCB7IHJldHVybiBtX293ckljZVN0
YXRlOyB9Ci0gICAgdm9pZCBzZXRPd3JJY2VTdGF0ZShPd3JJY2VTdGF0ZSBzdGF0ZSkgeyBtX293
ckljZVN0YXRlID0gc3RhdGU7IH0KLQotICAgIGJvb2wgZ290RW5kT2ZSZW1vdGVDYW5kaWRhdGVz
KCkgY29uc3QgeyByZXR1cm4gbV9nb3RFbmRPZlJlbW90ZUNhbmRpZGF0ZXM7IH0KLSAgICB2b2lk
IG1hcmtHb3RFbmRPZlJlbW90ZUNhbmRpZGF0ZXMoKSB7IG1fZ290RW5kT2ZSZW1vdGVDYW5kaWRh
dGVzID0gdHJ1ZTsgfQotCi1wcml2YXRlOgotICAgIE93clRyYW5zY2VpdmVyKGNvbnN0IFN0cmlu
ZyYgbWlkLCBPd3JTZXNzaW9uKiBzZXNzaW9uKQotICAgICAgICA6IG1fbWlkKG1pZCkKLSAgICAg
ICAgLCBtX3Nlc3Npb24oc2Vzc2lvbikKLSAgICB7IH0KLQotICAgIFN0cmluZyBtX21pZDsKLSAg
ICBPd3JTZXNzaW9uKiBtX3Nlc3Npb247Ci0KLSAgICBPd3JJY2VTdGF0ZSBtX293ckljZVN0YXRl
IHsgT1dSX0lDRV9TVEFURV9ESVNDT05ORUNURUQgfTsKLSAgICBib29sIG1fZ290RW5kT2ZSZW1v
dGVDYW5kaWRhdGVzIHsgZmFsc2UgfTsKLX07Ci0KLWNsYXNzIE1lZGlhRW5kcG9pbnRPd3IgOiBw
dWJsaWMgTWVkaWFFbmRwb2ludCB7Ci1wdWJsaWM6Ci0gICAgTWVkaWFFbmRwb2ludE93cihNZWRp
YUVuZHBvaW50Q2xpZW50Jik7Ci0gICAgfk1lZGlhRW5kcG9pbnRPd3IoKTsKLQotICAgIHZvaWQg
c2V0Q29uZmlndXJhdGlvbihNZWRpYUVuZHBvaW50Q29uZmlndXJhdGlvbiYmKSBvdmVycmlkZTsK
LQotICAgIHZvaWQgZ2VuZXJhdGVEdGxzSW5mbygpIG92ZXJyaWRlOwotICAgIE1lZGlhUGF5bG9h
ZFZlY3RvciBnZXREZWZhdWx0QXVkaW9QYXlsb2FkcygpIG92ZXJyaWRlOwotICAgIE1lZGlhUGF5
bG9hZFZlY3RvciBnZXREZWZhdWx0VmlkZW9QYXlsb2FkcygpIG92ZXJyaWRlOwotICAgIE1lZGlh
UGF5bG9hZFZlY3RvciBmaWx0ZXJQYXlsb2Fkcyhjb25zdCBNZWRpYVBheWxvYWRWZWN0b3ImIHJl
bW90ZVBheWxvYWRzLCBjb25zdCBNZWRpYVBheWxvYWRWZWN0b3ImIGRlZmF1bHRQYXlsb2Fkcykg
b3ZlcnJpZGU7Ci0KLSAgICBVcGRhdGVSZXN1bHQgdXBkYXRlUmVjZWl2ZUNvbmZpZ3VyYXRpb24o
TWVkaWFFbmRwb2ludFNlc3Npb25Db25maWd1cmF0aW9uKiwgYm9vbCBpc0luaXRpYXRvcikgb3Zl
cnJpZGU7Ci0gICAgVXBkYXRlUmVzdWx0IHVwZGF0ZVNlbmRDb25maWd1cmF0aW9uKE1lZGlhRW5k
cG9pbnRTZXNzaW9uQ29uZmlndXJhdGlvbiosIGNvbnN0IFJlYWx0aW1lTWVkaWFTb3VyY2VNYXAm
LCBib29sIGlzSW5pdGlhdG9yKSBvdmVycmlkZTsKLQotICAgIHZvaWQgYWRkUmVtb3RlQ2FuZGlk
YXRlKGNvbnN0IEljZUNhbmRpZGF0ZSYsIGNvbnN0IFN0cmluZyYgbWlkLCBjb25zdCBTdHJpbmcm
IHVmcmFnLCBjb25zdCBTdHJpbmcmIHBhc3N3b3JkKSBvdmVycmlkZTsKLQotICAgIFJlZjxSZWFs
dGltZU1lZGlhU291cmNlPiBjcmVhdGVNdXRlZFJlbW90ZVNvdXJjZShjb25zdCBTdHJpbmcmIG1p
ZCwgUmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlwZSkgb3ZlcnJpZGU7Ci0gICAgdm9pZCByZXBsYWNl
TXV0ZWRSZW1vdGVTb3VyY2VNaWQoY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJikgZmluYWw7
Ci0gICAgdm9pZCByZXBsYWNlU2VuZFNvdXJjZShSZWFsdGltZU1lZGlhU291cmNlJiwgY29uc3Qg
U3RyaW5nJiBtaWQpIG92ZXJyaWRlOwotCi0gICAgdm9pZCBzdG9wKCkgb3ZlcnJpZGU7Ci0KLSAg
ICBzaXplX3QgdHJhbnNjZWl2ZXJJbmRleEZvclNlc3Npb24oT3dyU2Vzc2lvbiopIGNvbnN0Owot
ICAgIGNvbnN0IFN0cmluZyYgc2Vzc2lvbk1pZChPd3JTZXNzaW9uKikgY29uc3Q7Ci0gICAgT3dy
VHJhbnNjZWl2ZXIqIG1hdGNoVHJhbnNjZWl2ZXJCeU1pZChjb25zdCBTdHJpbmcmIG1pZCkgY29u
c3Q7Ci0KLSAgICB2b2lkIGRpc3BhdGNoTmV3SWNlQ2FuZGlkYXRlKGNvbnN0IFN0cmluZyYgbWlk
LCBJY2VDYW5kaWRhdGUmJik7Ci0gICAgdm9pZCBkaXNwYXRjaEdhdGhlcmluZ0RvbmUoY29uc3Qg
U3RyaW5nJiBtaWQpOwotICAgIHZvaWQgcHJvY2Vzc0ljZVRyYW5zcG9ydFN0YXRlQ2hhbmdlKE93
clNlc3Npb24qKTsKLSAgICB2b2lkIGRpc3BhdGNoRHRsc0ZpbmdlcnByaW50KGdjaGFyKiBwcml2
YXRlS2V5LCBnY2hhciogY2VydGlmaWNhdGUsIGNvbnN0IFN0cmluZyYgZmluZ2VycHJpbnQsIGNv
bnN0IFN0cmluZyYgZmluZ2VycHJpbnRGdW5jdGlvbik7Ci0gICAgdm9pZCB1bm11dGVSZW1vdGVT
b3VyY2UoY29uc3QgU3RyaW5nJiBtaWQsIE93ck1lZGlhU291cmNlKik7Ci0KLXByaXZhdGU6Ci0g
ICAgZW51bSBTZXNzaW9uVHlwZSB7IFNlc3Npb25UeXBlTWVkaWEgfTsKLQotICAgIHN0cnVjdCBU
cmFuc2NlaXZlckNvbmZpZyB7Ci0gICAgICAgIFNlc3Npb25UeXBlIHR5cGU7Ci0gICAgICAgIGJv
b2wgaXNEdGxzQ2xpZW50OwotICAgICAgICBTdHJpbmcgbWlkOwotICAgIH07Ci0KLSAgICBzdGQ6
OnVuaXF1ZV9wdHI8UlRDRGF0YUNoYW5uZWxIYW5kbGVyPiBjcmVhdGVEYXRhQ2hhbm5lbEhhbmRs
ZXIoY29uc3QgU3RyaW5nJiwgY29uc3QgUlRDRGF0YUNoYW5uZWxJbml0JikgZmluYWw7Ci0KLSAg
ICB2b2lkIHByZXBhcmVTZXNzaW9uKE93clNlc3Npb24qLCBQZWVyTWVkaWFEZXNjcmlwdGlvbiop
OwotICAgIHZvaWQgcHJlcGFyZU1lZGlhU2Vzc2lvbihPd3JNZWRpYVNlc3Npb24qLCBQZWVyTWVk
aWFEZXNjcmlwdGlvbiosIGJvb2wgaXNJbml0aWF0b3IpOwotCi0gICAgdm9pZCBlbnN1cmVUcmFu
c3BvcnRBZ2VudEFuZFRyYW5zY2VpdmVycyhib29sIGlzSW5pdGlhdG9yLCBjb25zdCBWZWN0b3I8
VHJhbnNjZWl2ZXJDb25maWc+Jik7Ci0gICAgdm9pZCBpbnRlcm5hbEFkZFJlbW90ZUNhbmRpZGF0
ZShPd3JTZXNzaW9uKiwgY29uc3QgSWNlQ2FuZGlkYXRlJiwgY29uc3QgU3RyaW5nJiB1ZnJhZywg
Y29uc3QgU3RyaW5nJiBwYXNzd29yZCk7Ci0KLSAgICBzdGQ6Om9wdGlvbmFsPE1lZGlhRW5kcG9p
bnRDb25maWd1cmF0aW9uPiBtX2NvbmZpZ3VyYXRpb247Ci0gICAgR1JlZ2V4KiBtX2hlbHBlclNl
cnZlclJlZ0V4OwotCi0gICAgT3dyVHJhbnNwb3J0QWdlbnQqIG1fdHJhbnNwb3J0QWdlbnQ7Ci0g
ICAgVmVjdG9yPFJlZlB0cjxPd3JUcmFuc2NlaXZlcj4+IG1fdHJhbnNjZWl2ZXJzOwotICAgIEhh
c2hNYXA8U3RyaW5nLCBSZWZQdHI8UmVhbHRpbWVNZWRpYVNvdXJjZU93cj4+IG1fbXV0ZWRSZW1v
dGVTb3VyY2VzOwotCi0gICAgTWVkaWFFbmRwb2ludENsaWVudCYgbV9jbGllbnQ7Ci0KLSAgICB1
bnNpZ25lZCBtX251bWJlck9mUmVjZWl2ZVByZXBhcmVkU2Vzc2lvbnM7Ci0gICAgdW5zaWduZWQg
bV9udW1iZXJPZlNlbmRQcmVwYXJlZFNlc3Npb25zOwotCi0gICAgU3RyaW5nIG1fZHRsc1ByaXZh
dGVLZXk7Ci0gICAgU3RyaW5nIG1fZHRsc0NlcnRpZmljYXRlOwotfTsKLQotfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKFdFQl9SVEMpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9vcGVud2VicnRjL09wZW5XZWJSVENVdGls
aXRpZXMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vb3BlbndlYnJ0
Yy9PcGVuV2ViUlRDVXRpbGl0aWVzLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
ZTRjZmI1OWRmNTAxZDliMWUxNzRlNzc0MGI3NjQ3YjFhNDhjOTM2MC4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
ZWRpYXN0cmVhbS9vcGVud2VicnRjL09wZW5XZWJSVENVdGlsaXRpZXMuY3BwCisrKyAvZGV2L251
bGwKQEAgLTEsNTcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBJZ2FsaWEgUy5M
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgTWV0cm9sb2dpY2FsCi0gKgotICogQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAq
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICoKLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHly
aWdodCBob2xkZXIgbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO
RCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUCi0gKiBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgVVNFKE9QRU5XRUJSVEMpCi0j
aW5jbHVkZSAiT3BlbldlYlJUQ1V0aWxpdGllcy5oIgotCi0jaW5jbHVkZSA8b3dyL293ci5oPgot
Ci1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXZvaWQgaW5pdGlhbGl6ZU9wZW5XZWJSVEMoKQotewot
ICAgIHN0YXRpYyBib29sIGlzSW5pdGlhbGl6ZWQgPSBmYWxzZTsKLSAgICBpZiAoaXNJbml0aWFs
aXplZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgb3dyX2luaXQoZ19tYWluX2NvbnRleHRfZGVm
YXVsdCgpKTsKLSAgICBpc0luaXRpYWxpemVkID0gdHJ1ZTsKLX0KLQotfQotCi0jZW5kaWYgLy8g
VVNFKE9QRU5XRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRp
YXN0cmVhbS9vcGVud2VicnRjL09wZW5XZWJSVENVdGlsaXRpZXMuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21lZGlhc3RyZWFtL29wZW53ZWJydGMvT3BlbldlYlJUQ1V0aWxpdGllcy5oCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZWQ0NzRiYmZhNGM1MzIyN2ZiNTY2OWFiNGIz
MzBjNjJmYWM4OWI4Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL29wZW53ZWJydGMvT3Blbldl
YlJUQ1V0aWxpdGllcy5oCisrKyAvZGV2L251bGwKQEAgLTEsNDAgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxNSBJZ2FsaWEgUy5MCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgTWV0cm9s
b2dpY2FsCi0gKgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICoKLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIDMuIE5l
aXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZSBuYW1lcyBvZiBp
dHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0g
KiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBIT0xERVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotCi12b2lkIGluaXRpYWxpemVPcGVuV2ViUlRDKCk7Ci0KLX0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL29wZW53ZWJydGMvUmVhbHRpbWVBdWRpb1Nv
dXJjZU93ci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vb3BlbndlYnJ0
Yy9SZWFsdGltZUF1ZGlvU291cmNlT3dyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IGNhYjcwNTA4NGI5NGNmYzhlN2IxOWY3ZDdlODIzMjY4Y2JjZWY0NjYuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWVkaWFzdHJlYW0vb3BlbndlYnJ0Yy9SZWFsdGltZUF1ZGlvU291cmNlT3dyLmgKKysrIC9kZXYv
bnVsbApAQCAtMSw3MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE1LDIwMTYgSWdh
bGlhIFMuTAotICogQ29weXJpZ2h0IChDKSAyMDE1IE1ldHJvbG9naWNhbAotICoKLSAqIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBt
ZXQ6Ci0gKgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRo
ZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQot
ICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVAotICogSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
Ci0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShNRURJQV9TVFJFQU0p
ICYmIFVTRShPUEVOV0VCUlRDKQotCi0jaW5jbHVkZSAiUmVhbHRpbWVNZWRpYVNvdXJjZU93ci5o
IgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFJlYWx0aW1lQXVkaW9Tb3VyY2VPd3Ig
OiBwdWJsaWMgUmVhbHRpbWVNZWRpYVNvdXJjZU93ciB7Ci1wdWJsaWM6Ci1SZWFsdGltZUF1ZGlv
U291cmNlT3dyKE93ck1lZGlhU291cmNlKiBtZWRpYVNvdXJjZSwgY29uc3QgU3RyaW5nJiBpZCwg
UmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlwZSB0eXBlLCBjb25zdCBTdHJpbmcmIG5hbWUpCi0gICAg
OiBSZWFsdGltZU1lZGlhU291cmNlT3dyKG1lZGlhU291cmNlLCBpZCwgdHlwZSwgbmFtZSkKLSAg
ICB7Ci0gICAgfQotCi1SZWFsdGltZUF1ZGlvU291cmNlT3dyKGNvbnN0IFN0cmluZyYgaWQsIFJl
YWx0aW1lTWVkaWFTb3VyY2U6OlR5cGUgdHlwZSwgY29uc3QgU3RyaW5nJiBuYW1lKQotICAgIDog
UmVhbHRpbWVNZWRpYVNvdXJjZU93cihpZCwgdHlwZSwgbmFtZSkKLSAgICB7Ci0gICAgfQotCi0g
ICAgdmlydHVhbCB+UmVhbHRpbWVBdWRpb1NvdXJjZU93cigpIHsgfQotCi0gICAgYm9vbCBhcHBs
eVNpemUoY29uc3QgSW50U2l6ZSYpIGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9Ci0KLXByb3RlY3Rl
ZDoKLSAgICB2b2lkIGluaXRpYWxpemVTZXR0aW5ncygpIGZpbmFsIHsKLSAgICAgICAgaWYgKG1f
Y3VycmVudFNldHRpbmdzLmRldmljZUlkKCkuaXNFbXB0eSgpKQotICAgICAgICAgICAgbV9jdXJy
ZW50U2V0dGluZ3Muc2V0U3VwcG9ydGVkQ29uc3RyYWludHMoc3VwcG9ydGVkQ29uc3RyYWludHMo
KSk7Ci0KLSAgICAgICAgbV9jdXJyZW50U2V0dGluZ3Muc2V0RGV2aWNlSWQoaWQoKSk7Ci0gICAg
fQotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKE1FRElB
X1NUUkVBTSkgJiYgVVNFKE9QRU5XRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tZWRpYXN0cmVhbS9vcGVud2VicnRjL1JlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJP
d3IuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vb3BlbndlYnJ0Yy9S
ZWFsdGltZU1lZGlhU291cmNlQ2VudGVyT3dyLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggYWFhZDhhMjM5MDI3N2YzNzk3MDE0MTI0OTkxZjRhZGRhOGFkODQzOC4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tZWRpYXN0cmVhbS9vcGVud2VicnRjL1JlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJPd3Iu
Y3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTkwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTEgRXJpY3Nzb24gQUIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxNSBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDE1IE1ldHJvbG9naWNhbC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogICAgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogICAgZGlzdHJpYnV0aW9u
LgotICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBFcmljc3NvbiBub3IgdGhlIG5hbWVzIG9mIGl0
cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotICogICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICog
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmln
LmgiCi0KLSNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKSAmJiBVU0UoT1BFTldFQlJUQykKLSNpbmNs
dWRlICJSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyT3dyLmgiCi0KLSNpbmNsdWRlICJDYXB0dXJl
RGV2aWNlLmgiCi0jaW5jbHVkZSAiTWVkaWFTdHJlYW1Qcml2YXRlLmgiCi0jaW5jbHVkZSAiTm90
SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlICJPcGVuV2ViUlRDVXRpbGl0aWVzLmgiCi0jaW5jbHVk
ZSAiUmVhbHRpbWVBdWRpb1NvdXJjZU93ci5oIgotI2luY2x1ZGUgIlJlYWx0aW1lTWVkaWFTb3Vy
Y2VDYXBhYmlsaXRpZXMuaCIKLSNpbmNsdWRlICJSZWFsdGltZVZpZGVvU291cmNlT3dyLmgiCi0j
aW5jbHVkZSA8b3dyL293ci5oPgotI2luY2x1ZGUgPG93ci9vd3JfbG9jYWwuaD4KLSNpbmNsdWRl
IDxvd3Ivb3dyX21lZGlhX3NvdXJjZS5oPgotI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+Ci0j
aW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0jaW5jbHVkZSA8d3RmL1VVSUQuaD4KLSNp
bmNsdWRlIDx3dGYvZ2xpYi9HVW5pcXVlUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmlu
Zy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KLQotbmFtZXNwYWNlIFdlYkNv
cmUgewotCi1SZWFsdGltZU1lZGlhU291cmNlQ2VudGVyJiBSZWFsdGltZU1lZGlhU291cmNlQ2Vu
dGVyOjpwbGF0Zm9ybUNlbnRlcigpCi17Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAg
ICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8UmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlck93cj4gY2Vu
dGVyOwotICAgIHJldHVybiBjZW50ZXI7Ci19Ci0KLXN0YXRpYyB2b2lkIG1lZGlhU291cmNlc0F2
YWlsYWJsZUNhbGxiYWNrKEdMaXN0KiBzb3VyY2VzLCBncG9pbnRlciB1c2VyRGF0YSkKLXsKLSAg
ICBSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyT3dyKiBjZW50ZXIgPSByZWludGVycHJldF9jYXN0
PFJlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJPd3IqPih1c2VyRGF0YSk7Ci0gICAgY2VudGVyLT5t
ZWRpYVNvdXJjZXNBdmFpbGFibGUoc291cmNlcyk7Ci19Ci0KLVJlYWx0aW1lTWVkaWFTb3VyY2VD
ZW50ZXJPd3I6OlJlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJPd3IoKQotewotICAgIGluaXRpYWxp
emVPcGVuV2ViUlRDKCk7Ci19Ci0KLVJlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJPd3I6On5SZWFs
dGltZU1lZGlhU291cmNlQ2VudGVyT3dyKCkKLXsKLX0KLQotdm9pZCBSZWFsdGltZU1lZGlhU291
cmNlQ2VudGVyT3dyOjp2YWxpZGF0ZVJlcXVlc3RDb25zdHJhaW50cyhWYWxpZENvbnN0cmFpbnRz
SGFuZGxlciYmIHZhbGlkSGFuZGxlciwgSW52YWxpZENvbnN0cmFpbnRzSGFuZGxlciYmIGludmFs
aWRIYW5kbGVyLCBjb25zdCBNZWRpYUNvbnN0cmFpbnRzJiBhdWRpb0NvbnN0cmFpbnRzLCBjb25z
dCBNZWRpYUNvbnN0cmFpbnRzJiB2aWRlb0NvbnN0cmFpbnRzLCBTdHJpbmcmJiBkZXZpY2VJZGVu
dGlmaWVySGFzaFNhbHQpCi17Ci0gICAgbV92YWxpZENvbnN0cmFpbnRzSGFuZGxlciA9IFdURk1v
dmUodmFsaWRIYW5kbGVyKTsKLSAgICBtX2ludmFsaWRDb25zdHJhaW50c0hhbmRsZXIgPSBXVEZN
b3ZlKGludmFsaWRIYW5kbGVyKTsKLQotICAgIFZlY3RvcjxTdHJpbmc+IGF1ZGlvU291cmNlczsK
LSAgICBWZWN0b3I8U3RyaW5nPiB2aWRlb1NvdXJjZXM7Ci0KLSAgICAvLyBGSVhNRTogQWN0dWFs
bHkgZG8gY29uc3RyYWludHMgdmFsaWRhdGlvbi4gVGhlIE1lZGlhQ29uc3RyYWludHMKLSAgICAv
LyBuZWVkIHRvIGNvbXBseSB3aXRoIHRoZSBhdmFpbGFibGUgYXVkaW8vdmlkZW8gZGV2aWNlKHMp
Ci0gICAgLy8gY2FwYWJpbGl0aWVzLiBTZWUgYnVnICMxMjMzNDUuCi0gICAgaWYgKGF1ZGlvQ29u
c3RyYWludHMuaXNWYWxpZCkKLSAgICAgICAgYXVkaW9Tb3VyY2VzLmFwcGVuZChTdHJpbmcoImF1
ZGlvIikpOwotCi0gICAgaWYgKHZpZGVvQ29uc3RyYWludHMuaXNWYWxpZCkKLSAgICAgICAgdmlk
ZW9Tb3VyY2VzLmFwcGVuZChTdHJpbmcoInZpZGVvIikpOwotCi0gICAgbV92YWxpZENvbnN0cmFp
bnRzSGFuZGxlcihXVEZNb3ZlKGF1ZGlvU291cmNlcyksIFdURk1vdmUodmlkZW9Tb3VyY2VzKSwg
V1RGTW92ZShkZXZpY2VJZGVudGlmaWVySGFzaFNhbHQpKTsKLSAgICBtX3ZhbGlkQ29uc3RyYWlu
dHNIYW5kbGVyID0gbnVsbHB0cjsKLSAgICBtX2ludmFsaWRDb25zdHJhaW50c0hhbmRsZXIgPSBu
dWxscHRyOwotfQotCi12b2lkIFJlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJPd3I6OmNyZWF0ZU1l
ZGlhU3RyZWFtKE5ld01lZGlhU3RyZWFtSGFuZGxlciYmIGNvbXBsZXRpb25IYW5kbGVyLCBjb25z
dCBTdHJpbmcmIGF1ZGlvRGV2aWNlSUQsIGNvbnN0IFN0cmluZyYgdmlkZW9EZXZpY2VJRCwgY29u
c3QgTWVkaWFDb25zdHJhaW50cyosIGNvbnN0IE1lZGlhQ29uc3RyYWludHMqKQotewotICAgIGlu
dCB0eXBlcyA9IE9XUl9NRURJQV9UWVBFX1VOS05PV047Ci0KLSAgICBpZiAoIWF1ZGlvRGV2aWNl
SUQuaXNFbXB0eSgpKQotICAgICAgICB0eXBlcyB8PSBPV1JfTUVESUFfVFlQRV9BVURJTzsKLSAg
ICBpZiAoIXZpZGVvRGV2aWNlSUQuaXNFbXB0eSgpKQotICAgICAgICB0eXBlcyB8PSBPV1JfTUVE
SUFfVFlQRV9WSURFTzsKLQotICAgIG1fY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKTsKLQotICAgIG93cl9nZXRfY2FwdHVyZV9zb3VyY2VzKHN0YXRpY19jYXN0
PE93ck1lZGlhVHlwZT4odHlwZXMpLCBtZWRpYVNvdXJjZXNBdmFpbGFibGVDYWxsYmFjaywgdGhp
cyk7Ci19Ci0KLVZlY3RvcjxDYXB0dXJlRGV2aWNlPiBSZWFsdGltZU1lZGlhU291cmNlQ2VudGVy
T3dyOjpnZXRNZWRpYVN0cmVhbURldmljZXMoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0g
ICAgcmV0dXJuIFZlY3RvcjxDYXB0dXJlRGV2aWNlPigpOwotfQotCi12b2lkIFJlYWx0aW1lTWVk
aWFTb3VyY2VDZW50ZXJPd3I6Om1lZGlhU291cmNlc0F2YWlsYWJsZShHTGlzdCogc291cmNlcykK
LXsKLSAgICBWZWN0b3I8UmVmPFJlYWx0aW1lTWVkaWFTb3VyY2U+PiBhdWRpb1NvdXJjZXM7Ci0g
ICAgVmVjdG9yPFJlZjxSZWFsdGltZU1lZGlhU291cmNlPj4gdmlkZW9Tb3VyY2VzOwotCi0gICAg
Zm9yIChhdXRvIGl0ZW0gPSBzb3VyY2VzOyBpdGVtOyBpdGVtID0gaXRlbS0+bmV4dCkgewotICAg
ICAgICBPd3JNZWRpYVNvdXJjZSogc291cmNlID0gT1dSX01FRElBX1NPVVJDRShpdGVtLT5kYXRh
KTsKLQotICAgICAgICBHVW5pcXVlT3V0UHRyPGdjaGFyPiBuYW1lOwotICAgICAgICBPd3JNZWRp
YVR5cGUgbWVkaWFUeXBlOwotICAgICAgICBnX29iamVjdF9nZXQoc291cmNlLCAibWVkaWEtdHlw
ZSIsICZtZWRpYVR5cGUsICJuYW1lIiwgJm5hbWUub3V0UHRyKCksIE5VTEwpOwotICAgICAgICBT
dHJpbmcgc291cmNlTmFtZShuYW1lLmdldCgpKTsKLSAgICAgICAgU3RyaW5nIGlkKGNyZWF0ZUNh
bm9uaWNhbFVVSURTdHJpbmcoKSk7Ci0KLSAgICAgICAgaWYgKGdfZ2V0ZW52KCJPV1JfVVNFX1RF
U1RfU09VUkNFUyIpKSB7Ci0gICAgICAgICAgICBPd3JTb3VyY2VUeXBlIHNvdXJjZVR5cGUgPSBP
V1JfU09VUkNFX1RZUEVfVU5LTk9XTjsKLSAgICAgICAgICAgIGdfb2JqZWN0X2dldChzb3VyY2Us
ICJ0eXBlIiwgJnNvdXJjZVR5cGUsIE5VTEwpOwotICAgICAgICAgICAgaWYgKHNvdXJjZVR5cGUg
IT0gT1dSX1NPVVJDRV9UWVBFX1RFU1QpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgIH0KLQotICAgICAgICBSZWFsdGltZU1lZGlhU291cmNlOjpUeXBlIG1lZGlhU291cmNlVHlw
ZTsKLSAgICAgICAgaWYgKG1lZGlhVHlwZSAmIE9XUl9NRURJQV9UWVBFX0FVRElPKQotICAgICAg
ICAgICAgbWVkaWFTb3VyY2VUeXBlID0gUmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlwZTo6QXVkaW87
Ci0gICAgICAgIGVsc2UgaWYgKG1lZGlhVHlwZSAmIE9XUl9NRURJQV9UWVBFX1ZJREVPKQotICAg
ICAgICAgICAgbWVkaWFTb3VyY2VUeXBlID0gUmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlwZTo6Vmlk
ZW87Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgbWVkaWFTb3VyY2VUeXBlID0gUmVhbHRp
bWVNZWRpYVNvdXJjZTo6VHlwZTo6Tm9uZTsKLSAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgUmVmUHRyPFJlYWx0aW1lTWVkaWFTb3VyY2VPd3I+
IG1lZGlhU291cmNlOwotICAgICAgICBpZiAobWVkaWFTb3VyY2VUeXBlID09IFJlYWx0aW1lTWVk
aWFTb3VyY2U6OlR5cGU6OkF1ZGlvKQotICAgICAgICAgICAgbWVkaWFTb3VyY2UgPSBhZG9wdFJl
ZihuZXcgUmVhbHRpbWVBdWRpb1NvdXJjZU93cihzb3VyY2UsIGlkLCBtZWRpYVNvdXJjZVR5cGUs
IHNvdXJjZU5hbWUpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgbWVkaWFTb3VyY2UgPSBh
ZG9wdFJlZihuZXcgUmVhbHRpbWVWaWRlb1NvdXJjZU93cihzb3VyY2UsIGlkLCBtZWRpYVNvdXJj
ZVR5cGUsIHNvdXJjZU5hbWUpKTsKLQotICAgICAgICBSZWFsdGltZU1lZGlhU291cmNlT3dyTWFw
OjppdGVyYXRvciBzb3VyY2VJdGVyYXRvciA9IG1fc291cmNlTWFwLmZpbmQoaWQpOwotICAgICAg
ICBpZiAoc291cmNlSXRlcmF0b3IgPT0gbV9zb3VyY2VNYXAuZW5kKCkpCi0gICAgICAgICAgICBt
X3NvdXJjZU1hcC5hZGQoaWQsIG1lZGlhU291cmNlLmNvcHlSZWYoKSk7Ci0KLSAgICAgICAgaWYg
KG1lZGlhVHlwZSAmIE9XUl9NRURJQV9UWVBFX0FVRElPKQotICAgICAgICAgICAgYXVkaW9Tb3Vy
Y2VzLmFwcGVuZChtZWRpYVNvdXJjZS5yZWxlYXNlTm9uTnVsbCgpKTsKLSAgICAgICAgZWxzZSBp
ZiAobWVkaWFUeXBlICYgT1dSX01FRElBX1RZUEVfVklERU8pCi0gICAgICAgICAgICB2aWRlb1Nv
dXJjZXMuYXBwZW5kKG1lZGlhU291cmNlLnJlbGVhc2VOb25OdWxsKCkpOwotCi0gICAgfQotCi0g
ICAgaWYgKHZpZGVvU291cmNlcy5pc0VtcHR5KCkgJiYgYXVkaW9Tb3VyY2VzLmlzRW1wdHkoKSkK
LSAgICAgICAgbV9jb21wbGV0aW9uSGFuZGxlcihudWxscHRyKTsKLSAgICBlbHNlCi0gICAgICAg
IG1fY29tcGxldGlvbkhhbmRsZXIoTWVkaWFTdHJlYW1Qcml2YXRlOjpjcmVhdGUoYXVkaW9Tb3Vy
Y2VzLCB2aWRlb1NvdXJjZXMpKTsKLQotfQotCi1SZWFsdGltZU1lZGlhU291cmNlKiBSZWFsdGlt
ZU1lZGlhU291cmNlQ2VudGVyT3dyOjpmaXJzdFNvdXJjZShSZWFsdGltZU1lZGlhU291cmNlOjpU
eXBlIHR5cGUpCi17Ci0gICAgZm9yIChhdXRvIGl0ZXIgPSBtX3NvdXJjZU1hcC5iZWdpbigpOyBp
dGVyICE9IG1fc291cmNlTWFwLmVuZCgpOyArK2l0ZXIpIHsKLSAgICAgICAgUmVmUHRyPFJlYWx0
aW1lTWVkaWFTb3VyY2U+IHNvdXJjZSA9IGl0ZXItPnZhbHVlOwotICAgICAgICBpZiAoc291cmNl
LT50eXBlKCkgPT0gdHlwZSkKLSAgICAgICAgICAgIHJldHVybiBzb3VyY2UuZ2V0KCk7Ci0gICAg
fQotCi0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQot
I2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0pICYmIFVTRShPUEVOV0VCUlRDKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vb3BlbndlYnJ0Yy9SZWFs
dGltZU1lZGlhU291cmNlQ2VudGVyT3dyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRp
YXN0cmVhbS9vcGVud2VicnRjL1JlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJPd3IuaApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjgwZDkxODIxMzAzODJmNDMwMmYxMjc4ZGFiYmZhMjQ4
MmEzMzUzMC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9vcGVud2VicnRjL1JlYWx0aW1lTWVk
aWFTb3VyY2VDZW50ZXJPd3IuaAorKysgL2Rldi9udWxsCkBAIC0xLDEwMSArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDExIEVyaWNzc29uIEFCLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTUgSWdhbGlhIFMuTC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxNSBNZXRyb2xvZ2ljYWwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqICAgIGluIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAq
ICAgIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgRXJpY3Nzb24gbm9y
IHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0gKiAgICBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSAqICAgIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBP
V05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
Ci0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
I3ByYWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKSAmJiBVU0UoT1BFTldFQlJU
QykKLQotI2luY2x1ZGUgIkNhcHR1cmVEZXZpY2VNYW5hZ2VyLmgiCi0jaW5jbHVkZSAiUmVhbHRp
bWVNZWRpYVNvdXJjZUNlbnRlci5oIgotI2luY2x1ZGUgIlJlYWx0aW1lTWVkaWFTb3VyY2VPd3Iu
aCIKLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xh
c3MgQ2FwdHVyZURldmljZTsKLWNsYXNzIE1lZGlhU3RyZWFtUHJpdmF0ZTsKLWNsYXNzIFJlYWx0
aW1lTWVkaWFTb3VyY2U7Ci1jbGFzcyBNZWRpYVN0cmVhbVNvdXJjZXNRdWVyeUNsaWVudDsKLWNs
YXNzIFRyYWNrU291cmNlSW5mbzsKLQotY2xhc3MgUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlck93
ciBmaW5hbCA6IHB1YmxpYyBSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyIHsKLXB1YmxpYzoKLSAg
ICBSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyT3dyKCk7Ci0gICAgflJlYWx0aW1lTWVkaWFTb3Vy
Y2VDZW50ZXJPd3IoKTsKLQotICAgIHZvaWQgdmFsaWRhdGVSZXF1ZXN0Q29uc3RyYWludHMoVmFs
aWRDb25zdHJhaW50c0hhbmRsZXImJiB2YWxpZEhhbmRsZXIsIEludmFsaWRDb25zdHJhaW50c0hh
bmRsZXImJiBpbnZhbGlkSGFuZGxlciwgY29uc3QgTWVkaWFDb25zdHJhaW50cyYgYXVkaW9Db25z
dHJhaW50cywgY29uc3QgTWVkaWFDb25zdHJhaW50cyYgdmlkZW9Db25zdHJhaW50cywgU3RyaW5n
JiYpIGZpbmFsOwotCi0gICAgdm9pZCBjcmVhdGVNZWRpYVN0cmVhbShOZXdNZWRpYVN0cmVhbUhh
bmRsZXImJiwgY29uc3QgU3RyaW5nJiBhdWRpb0RldmljZUlELCBjb25zdCBTdHJpbmcmIHZpZGVv
RGV2aWNlSUQsIGNvbnN0IE1lZGlhQ29uc3RyYWludHMqIHZpZGVvQ29uc3RyYWludHMsIGNvbnN0
IE1lZGlhQ29uc3RyYWludHMqIGF1ZGlvQ29uc3RyYWludHMpIGZpbmFsOwotCi0gICAgVmVjdG9y
PENhcHR1cmVEZXZpY2U+IGdldE1lZGlhU3RyZWFtRGV2aWNlcygpIGZpbmFsOwotCi0gICAgdm9p
ZCBtZWRpYVNvdXJjZXNBdmFpbGFibGUoR0xpc3QqIHNvdXJjZXMpOwotCi1wcml2YXRlOgotICAg
IFJlYWx0aW1lTWVkaWFTb3VyY2U6OkF1ZGlvQ2FwdHVyZUZhY3RvcnkmIGRlZmF1bHRBdWRpb0Zh
Y3RvcnkoKSBmaW5hbCB7IHJldHVybiBtX2RlZmF1bHRBdWRpb0ZhY3Rvcnk7IH0KLSAgICBSZWFs
dGltZU1lZGlhU291cmNlOjpWaWRlb0NhcHR1cmVGYWN0b3J5JiBkZWZhdWx0VmlkZW9GYWN0b3J5
KCkgZmluYWwgeyByZXR1cm4gbV9kZWZhdWx0VmlkZW9GYWN0b3J5OyB9Ci0gICAgQ2FwdHVyZURl
dmljZU1hbmFnZXImIGRlZmF1bHRBdWRpb0NhcHR1cmVEZXZpY2VNYW5hZ2VyKCkgZmluYWwgeyBy
ZXR1cm4gbV9kZWZhdWx0QXVkaW9DYXB0dXJlRGV2aWNlTWFuYWdlcjsgfQotICAgIENhcHR1cmVE
ZXZpY2VNYW5hZ2VyJiBkZWZhdWx0VmlkZW9DYXB0dXJlRGV2aWNlTWFuYWdlcigpIGZpbmFsIHsg
cmV0dXJuIG1fZGVmYXVsdFZpZGVvQ2FwdHVyZURldmljZU1hbmFnZXI7IH0KLQotICAgIFJlYWx0
aW1lTWVkaWFTb3VyY2UqIGZpcnN0U291cmNlKFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGUpOwot
ICAgIFJlYWx0aW1lTWVkaWFTb3VyY2VPd3JNYXAgbV9zb3VyY2VNYXA7Ci0gICAgVmFsaWRDb25z
dHJhaW50c0hhbmRsZXIgbV92YWxpZENvbnN0cmFpbnRzSGFuZGxlcjsKLSAgICBJbnZhbGlkQ29u
c3RyYWludHNIYW5kbGVyIG1faW52YWxpZENvbnN0cmFpbnRzSGFuZGxlcjsKLSAgICBOZXdNZWRp
YVN0cmVhbUhhbmRsZXIgbV9jb21wbGV0aW9uSGFuZGxlcjsKLQotICAgIGNsYXNzIEF1ZGlvQ2Fw
dHVyZUZhY3RvcnlPd3IgOiBwdWJsaWMgUmVhbHRpbWVNZWRpYVNvdXJjZTo6QXVkaW9DYXB0dXJl
RmFjdG9yeSB7Ci0gICAgcHJpdmF0ZToKLSAgICAgICAgQ2FwdHVyZVNvdXJjZU9yRXJyb3IgY3Jl
YXRlQXVkaW9DYXB0dXJlU291cmNlKGNvbnN0IFN0cmluZyYsIGNvbnN0IE1lZGlhQ29uc3RyYWlu
dHMqKSBmaW5hbCB7IHJldHVybiB7IH07IH0KLSAgICB9OwotCi0gICAgY2xhc3MgVmlkZW9DYXB0
dXJlRmFjdG9yeU93ciA6IHB1YmxpYyBSZWFsdGltZU1lZGlhU291cmNlOjpWaWRlb0NhcHR1cmVG
YWN0b3J5IHsKLSAgICBwcml2YXRlOgotICAgICAgICBDYXB0dXJlU291cmNlT3JFcnJvciBjcmVh
dGVWaWRlb0NhcHR1cmVTb3VyY2UoY29uc3QgU3RyaW5nJiwgY29uc3QgTWVkaWFDb25zdHJhaW50
cyopIGZpbmFsIHsgcmV0dXJuIHsgfTsgfQotICAgIH07Ci0KLSAgICBjbGFzcyBDYXB0dXJlRGV2
aWNlTWFuYWdlck93ciA6IHB1YmxpYyBDYXB0dXJlRGV2aWNlTWFuYWdlciB7Ci0gICAgcHJpdmF0
ZToKLSAgICAgICAgVmVjdG9yPENhcHR1cmVEZXZpY2U+JiBjYXB0dXJlRGV2aWNlcygpIGZpbmFs
IHsgcmV0dXJuIG1fZGV2aWNlczsgfQotCi0gICAgICAgIFZlY3RvcjxDYXB0dXJlRGV2aWNlPiBt
X2RldmljZXM7Ci0gICAgfTsKLQotICAgIEF1ZGlvQ2FwdHVyZUZhY3RvcnlPd3IgbV9kZWZhdWx0
QXVkaW9GYWN0b3J5OwotICAgIFZpZGVvQ2FwdHVyZUZhY3RvcnlPd3IgbV9kZWZhdWx0VmlkZW9G
YWN0b3J5OwotICAgIENhcHR1cmVEZXZpY2VNYW5hZ2VyT3dyIG1fZGVmYXVsdEF1ZGlvQ2FwdHVy
ZURldmljZU1hbmFnZXI7Ci0gICAgQ2FwdHVyZURldmljZU1hbmFnZXJPd3IgbV9kZWZhdWx0Vmlk
ZW9DYXB0dXJlRGV2aWNlTWFuYWdlcjsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQot
I2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0pICYmIFVTRShPUEVOV0VCUlRDKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vb3BlbndlYnJ0Yy9SZWFs
dGltZU1lZGlhU291cmNlT3dyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3Ry
ZWFtL29wZW53ZWJydGMvUmVhbHRpbWVNZWRpYVNvdXJjZU93ci5jcHAKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IGVlNzQ5OWQzODAwNjZmMTRhYjZjOWNiMDA4N2JlNGI2ZGQwODc4NWYu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vb3BlbndlYnJ0Yy9SZWFsdGltZU1lZGlhU291cmNl
T3dyLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDYwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTYgSWdhbGlhIFMuTAotICoKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0
aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0g
KiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogSE9MREVSIE9S
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKSAmJiBVU0UoT1BFTldFQlJU
QykKLSNpbmNsdWRlICJSZWFsdGltZU1lZGlhU291cmNlT3dyLmgiCi0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLQotY29uc3QgUmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzJiBSZWFsdGltZU1lZGlh
U291cmNlT3dyOjpzZXR0aW5ncygpIGNvbnN0Ci17Ci0gICAgY29uc3RfY2FzdDxSZWFsdGltZU1l
ZGlhU291cmNlT3dyJj4oKnRoaXMpLmluaXRpYWxpemVTZXR0aW5ncygpOwotICAgIHJldHVybiBt
X2N1cnJlbnRTZXR0aW5nczsKLX0KLQotUmVhbHRpbWVNZWRpYVNvdXJjZVN1cHBvcnRlZENvbnN0
cmFpbnRzJiBSZWFsdGltZU1lZGlhU291cmNlT3dyOjpzdXBwb3J0ZWRDb25zdHJhaW50cygpCi17
Ci0gICAgaWYgKG1fc3VwcG9ydGVkQ29uc3RyYWludHMuc3VwcG9ydHNEZXZpY2VJZCgpKQotICAg
ICAgICByZXR1cm4gbV9zdXBwb3J0ZWRDb25zdHJhaW50czsKLQotICAgIG1fc3VwcG9ydGVkQ29u
c3RyYWludHMuc2V0U3VwcG9ydHNEZXZpY2VJZCh0cnVlKTsKLSAgICBpbml0aWFsaXplU3VwcG9y
dGVkQ29uc3RyYWludHMobV9zdXBwb3J0ZWRDb25zdHJhaW50cyk7Ci0KLSAgICByZXR1cm4gbV9z
dXBwb3J0ZWRDb25zdHJhaW50czsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5k
aWYgLy8gRU5BQkxFKE1FRElBX1NUUkVBTSkgJiYgVVNFKE9QRU5XRUJSVEMpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9vcGVud2VicnRjL1JlYWx0aW1l
TWVkaWFTb3VyY2VPd3IuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL29w
ZW53ZWJydGMvUmVhbHRpbWVNZWRpYVNvdXJjZU93ci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCA3Y2ZiZjc4ZjI1OGQ5MDhhNTQ0Yjk5YjFlYzk4Mjg0YjUzM2U0YTg0Li4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21lZGlhc3RyZWFtL29wZW53ZWJydGMvUmVhbHRpbWVNZWRpYVNvdXJjZU93ci5oCisr
KyAvZGV2L251bGwKQEAgLTEsOTkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBJ
Z2FsaWEgUy5MCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgTWV0cm9sb2dpY2FsCi0gKgotICogQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAq
IG1ldDoKLSAqCi0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICoKLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2Yg
dGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
Ci0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAq
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCi0gKiBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgUmVhbHRpbWVNZWRpYVNvdXJjZU93cl9oCi0jZGVm
aW5lIFJlYWx0aW1lTWVkaWFTb3VyY2VPd3JfaAotCi0jaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkg
JiYgVVNFKE9QRU5XRUJSVEMpCi0KLSNpbmNsdWRlICJHUmVmUHRyR1N0cmVhbWVyLmgiCi0jaW5j
bHVkZSAiUmVhbHRpbWVNZWRpYVNvdXJjZS5oIgotI2luY2x1ZGUgPG93ci9vd3JfbWVkaWFfc291
cmNlLmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+
Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsK
LQotY2xhc3MgUmVhbHRpbWVNZWRpYVNvdXJjZUNhcGFiaWxpdGllczsKLQotY2xhc3MgUmVhbHRp
bWVNZWRpYVNvdXJjZU93ciA6IHB1YmxpYyBSZWFsdGltZU1lZGlhU291cmNlIHsKLXB1YmxpYzoK
LVJlYWx0aW1lTWVkaWFTb3VyY2VPd3IoT3dyTWVkaWFTb3VyY2UqIG1lZGlhU291cmNlLCBjb25z
dCBTdHJpbmcmIGlkLCBSZWFsdGltZU1lZGlhU291cmNlOjpUeXBlIHR5cGUsIGNvbnN0IFN0cmlu
ZyYgbmFtZSkKLSAgICA6IFJlYWx0aW1lTWVkaWFTb3VyY2UoaWQsIHR5cGUsIG5hbWUpCi0gICAg
LCBtX21lZGlhU291cmNlKG1lZGlhU291cmNlKQotICAgIHsKLSAgICAgICAgaWYgKCFtZWRpYVNv
dXJjZSkKLSAgICAgICAgICAgIG5vdGlmeU11dGVkQ2hhbmdlKHRydWUpOwotICAgIH0KLQotUmVh
bHRpbWVNZWRpYVNvdXJjZU93cihjb25zdCBTdHJpbmcmIGlkLCBSZWFsdGltZU1lZGlhU291cmNl
OjpUeXBlIHR5cGUsIGNvbnN0IFN0cmluZyYgbmFtZSkKLSAgICA6IFJlYWx0aW1lTWVkaWFTb3Vy
Y2UoaWQsIHR5cGUsIG5hbWUpCi0gICAgLCBtX21lZGlhU291cmNlKG51bGxwdHIpCi0gICAgewot
ICAgIH0KLQotICAgIHZpcnR1YWwgflJlYWx0aW1lTWVkaWFTb3VyY2VPd3IoKSB7IH0KLQotICAg
IHZvaWQgc3dhcE91dFNoYWxsb3dTb3VyY2UoT3dyTWVkaWFTb3VyY2UmIHJlYWxTb3VyY2UpCi0g
ICAgewotICAgICAgICBtX21lZGlhU291cmNlID0gJnJlYWxTb3VyY2U7Ci0gICAgICAgIHNldE11
dGVkKGZhbHNlKTsKLSAgICB9Ci0KLSAgICBjb25zdCBSZWFsdGltZU1lZGlhU291cmNlQ2FwYWJp
bGl0aWVzJiBjYXBhYmlsaXRpZXMoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX2NhcGFiaWxp
dGllczsgfQotICAgIGNvbnN0IFJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5ncyYgc2V0dGluZ3Mo
KSBjb25zdCBvdmVycmlkZTsKLQotICAgIE93ck1lZGlhU291cmNlKiBtZWRpYVNvdXJjZSgpIGNv
bnN0IHsgcmV0dXJuIG1fbWVkaWFTb3VyY2U7IH0KLQotcHJvdGVjdGVkOgotICAgIHZpcnR1YWwg
dm9pZCBpbml0aWFsaXplU2V0dGluZ3MoKSB7IH07Ci0gICAgdmlydHVhbCB2b2lkIGluaXRpYWxp
emVTdXBwb3J0ZWRDb25zdHJhaW50cyhSZWFsdGltZU1lZGlhU291cmNlU3VwcG9ydGVkQ29uc3Ry
YWludHMmKSB7IH07Ci0gICAgUmVhbHRpbWVNZWRpYVNvdXJjZVN1cHBvcnRlZENvbnN0cmFpbnRz
JiBzdXBwb3J0ZWRDb25zdHJhaW50cygpOwotCi0gICAgUmVhbHRpbWVNZWRpYVNvdXJjZVNldHRp
bmdzIG1fY3VycmVudFNldHRpbmdzOwotCi1wcml2YXRlOgotICAgIFJlYWx0aW1lTWVkaWFTb3Vy
Y2VTdXBwb3J0ZWRDb25zdHJhaW50cyBtX3N1cHBvcnRlZENvbnN0cmFpbnRzOwotICAgIFJlYWx0
aW1lTWVkaWFTb3VyY2VDYXBhYmlsaXRpZXMgbV9jYXBhYmlsaXRpZXM7Ci0gICAgT3dyTWVkaWFT
b3VyY2UqIG1fbWVkaWFTb3VyY2U7Ci19OwotCi10eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBSZWZQ
dHI8UmVhbHRpbWVNZWRpYVNvdXJjZU93cj4+IFJlYWx0aW1lTWVkaWFTb3VyY2VPd3JNYXA7Ci0K
LX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0p
ICYmIFVTRShPUEVOV0VCUlRDKQotCi0jZW5kaWYgLy8gUmVhbHRpbWVNZWRpYVNvdXJjZU93cl9o
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9vcGVud2Vi
cnRjL1JlYWx0aW1lVmlkZW9Tb3VyY2VPd3IuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21l
ZGlhc3RyZWFtL29wZW53ZWJydGMvUmVhbHRpbWVWaWRlb1NvdXJjZU93ci5oCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCA0MThlZjg0YTcxYTU3MzQ3ZTg1ZDM1MjgzNjllMjc5YzdhNjZm
NDU0Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL29wZW53ZWJydGMvUmVhbHRpbWVWaWRlb1Nv
dXJjZU93ci5oCisrKyAvZGV2L251bGwKQEAgLTEsODIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxNSwyMDE2IElnYWxpYSBTLkwKLSAqIENvcHlyaWdodCAoQykgMjAxNSBNZXRyb2xv
Z2ljYWwKLSAqCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogMy4gTmVp
dGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlIG5hbWVzIG9mIGl0
cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAq
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIEhPTERFUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBF
TkFCTEUoTUVESUFfU1RSRUFNKSAmJiBVU0UoT1BFTldFQlJUQykKLQotI2luY2x1ZGUgIlJlYWx0
aW1lTWVkaWFTb3VyY2VPd3IuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBSZWFs
dGltZVZpZGVvU291cmNlT3dyIDogcHVibGljIFJlYWx0aW1lTWVkaWFTb3VyY2VPd3IgewotcHVi
bGljOgotUmVhbHRpbWVWaWRlb1NvdXJjZU93cihPd3JNZWRpYVNvdXJjZSogbWVkaWFTb3VyY2Us
IGNvbnN0IFN0cmluZyYgaWQsIFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGUgdHlwZSwgY29uc3Qg
U3RyaW5nJiBuYW1lKQotICAgIDogUmVhbHRpbWVNZWRpYVNvdXJjZU93cihtZWRpYVNvdXJjZSwg
aWQsIHR5cGUsIG5hbWUpCi0gICAgewotICAgIH0KLQotUmVhbHRpbWVWaWRlb1NvdXJjZU93cihj
b25zdCBTdHJpbmcmIGlkLCBSZWFsdGltZU1lZGlhU291cmNlOjpUeXBlIHR5cGUsIGNvbnN0IFN0
cmluZyYgbmFtZSkKLSAgICA6IFJlYWx0aW1lTWVkaWFTb3VyY2VPd3IoaWQsIHR5cGUsIG5hbWUp
Ci0gICAgewotICAgIH0KLQotICAgIHZpcnR1YWwgflJlYWx0aW1lVmlkZW9Tb3VyY2VPd3IoKSB7
IH0KLQotICAgIGJvb2wgYXBwbHlTaXplKGNvbnN0IEludFNpemUmKSBmaW5hbCB7IHJldHVybiB0
cnVlOyB9Ci0KLXByb3RlY3RlZDoKLSAgICB2b2lkIGluaXRpYWxpemVTZXR0aW5ncygpIGZpbmFs
IHsKLSAgICAgICAgaWYgKG1fY3VycmVudFNldHRpbmdzLmRldmljZUlkKCkuaXNFbXB0eSgpKQot
ICAgICAgICAgICAgbV9jdXJyZW50U2V0dGluZ3Muc2V0U3VwcG9ydGVkQ29uc3RyYWludHMoc3Vw
cG9ydGVkQ29uc3RyYWludHMoKSk7Ci0KLSAgICAgICAgbV9jdXJyZW50U2V0dGluZ3Muc2V0RGV2
aWNlSWQoaWQoKSk7Ci0KLSAgICAgICAgbV9jdXJyZW50U2V0dGluZ3Muc2V0RnJhbWVSYXRlKGZy
YW1lUmF0ZSgpKTsKLSAgICAgICAgbV9jdXJyZW50U2V0dGluZ3Muc2V0V2lkdGgoc2l6ZSgpLndp
ZHRoKCkpOwotICAgICAgICBtX2N1cnJlbnRTZXR0aW5ncy5zZXRIZWlnaHQoc2l6ZSgpLmhlaWdo
dCgpKTsKLSAgICB9Ci0KLSAgICB2b2lkIGluaXRpYWxpemVTdXBwb3J0ZWRDb25zdHJhaW50cyhS
ZWFsdGltZU1lZGlhU291cmNlU3VwcG9ydGVkQ29uc3RyYWludHMmIHN1cHBvcnRlZENvbnN0cmFp
bnRzKSBmaW5hbCB7Ci0gICAgICAgIHN1cHBvcnRlZENvbnN0cmFpbnRzLnNldFN1cHBvcnRzRmFj
aW5nTW9kZShSZWFsdGltZU1lZGlhU291cmNlU2V0dGluZ3M6OlVua25vd24pOwotICAgICAgICBz
dXBwb3J0ZWRDb25zdHJhaW50cy5zZXRTdXBwb3J0c1dpZHRoKHRydWUpOwotICAgICAgICBzdXBw
b3J0ZWRDb25zdHJhaW50cy5zZXRTdXBwb3J0c0hlaWdodCh0cnVlKTsKLSAgICAgICAgc3VwcG9y
dGVkQ29uc3RyYWludHMuc2V0U3VwcG9ydHNBc3BlY3RSYXRpbyh0cnVlKTsKLSAgICAgICAgc3Vw
cG9ydGVkQ29uc3RyYWludHMuc2V0U3VwcG9ydHNGcmFtZVJhdGUodHJ1ZSk7Ci0gICAgfQotfTsK
LQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVB
TSkgJiYgVVNFKE9QRU5XRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tb2NrL01vY2tNZWRpYUVuZHBvaW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21v
Y2svTW9ja01lZGlhRW5kcG9pbnQuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
ZTliNDFlNWMxMTk1YzZlM2VjMTM3MDc1ZWE0ZmZhNjY4NmM3YWFmLi4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21v
Y2svTW9ja01lZGlhRW5kcG9pbnQuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMzQ2ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgRXJpY3Nzb24gQUIuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiAgICBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
Ci0gKiAgICBkaXN0cmlidXRpb24uCi0gKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIEVyaWNzc29u
IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICogICAgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0gKiAgICBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O
VFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAot
ICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShXRUJfUlRDKQotI2luY2x1ZGUg
Ik1vY2tNZWRpYUVuZHBvaW50LmgiCi0KLSNpbmNsdWRlICJNZWRpYUVuZHBvaW50U2Vzc2lvbkNv
bmZpZ3VyYXRpb24uaCIKLSNpbmNsdWRlICJNZWRpYVBheWxvYWQuaCIKLSNpbmNsdWRlICJNb2Nr
UmVhbHRpbWVBdWRpb1NvdXJjZS5oIgotI2luY2x1ZGUgIk1vY2tSZWFsdGltZVZpZGVvU291cmNl
LmgiCi0jaW5jbHVkZSAiUlRDRGF0YUNoYW5uZWxIYW5kbGVyTW9jay5oIgotI2luY2x1ZGUgIlJl
YWx0aW1lTWVkaWFTb3VyY2UuaCIKLSNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgotCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci0KLXN0YXRpYyBjb25zdCBjaGFyKiBmaW5nZXJwcmludCA9ICI4Qjo4
NzowOTo4QTo1RDpDMjpGMzozMzpFRjpDNTpCMTpGNjo4NDozQTozRDpENjpBMzpFMjo5QzoxNzo0
QzpFNzo0NjozQjoxQjpDRTo4NDo5ODpERDo4RTpBRjo3QiI7Ci1zdGF0aWMgY29uc3QgY2hhciog
ZmluZ2VycHJpbnRGdW5jdGlvbiA9ICJzaGEtMjU2IjsKLQotc3RkOjp1bmlxdWVfcHRyPE1lZGlh
RW5kcG9pbnQ+IE1vY2tNZWRpYUVuZHBvaW50OjpjcmVhdGUoTWVkaWFFbmRwb2ludENsaWVudCYg
Y2xpZW50KQotewotICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8TWVkaWFFbmRwb2ludD4obmV3
IE1vY2tNZWRpYUVuZHBvaW50KGNsaWVudCkpOwotfQotCi1Nb2NrTWVkaWFFbmRwb2ludDo6TW9j
a01lZGlhRW5kcG9pbnQoTWVkaWFFbmRwb2ludENsaWVudCYgY2xpZW50KQotICAgIDogbV9jbGll
bnQoY2xpZW50KQotICAgICwgbV9pY2VDYW5kaWRhdGVUaW1lcigqdGhpcywgJk1vY2tNZWRpYUVu
ZHBvaW50OjppY2VDYW5kaWRhdGVUaW1lckZpcmVkKQotICAgICwgbV9pY2VUcmFuc3BvcnRUaW1l
cigqdGhpcywgJk1vY2tNZWRpYUVuZHBvaW50OjppY2VUcmFuc3BvcnRUaW1lckZpcmVkKQotICAg
ICwgbV91bm11dGVUaW1lcigqdGhpcywgJk1vY2tNZWRpYUVuZHBvaW50Ojp1bm11dGVUaW1lckZp
cmVkKQotewotfQotCi1Nb2NrTWVkaWFFbmRwb2ludDo6fk1vY2tNZWRpYUVuZHBvaW50KCkKLXsK
LSAgICBzdG9wKCk7Ci19Ci0KLXN0ZDo6dW5pcXVlX3B0cjxSVENEYXRhQ2hhbm5lbEhhbmRsZXI+
IE1vY2tNZWRpYUVuZHBvaW50OjpjcmVhdGVEYXRhQ2hhbm5lbEhhbmRsZXIoY29uc3QgU3RyaW5n
JiBsYWJlbCwgY29uc3QgUlRDRGF0YUNoYW5uZWxJbml0JiBvcHRpb25zKQotewotICAgIHJldHVy
biBzdGQ6Om1ha2VfdW5pcXVlPFJUQ0RhdGFDaGFubmVsSGFuZGxlck1vY2s+KGxhYmVsLCBvcHRp
b25zKTsKLX0KLQotdm9pZCBNb2NrTWVkaWFFbmRwb2ludDo6Z2VuZXJhdGVEdGxzSW5mbygpCi17
Ci0gICAgYXV0byB3ZWFrVGhpcyA9IG1fd2Vha1B0ckZhY3RvcnkuY3JlYXRlV2Vha1B0cigqdGhp
cyk7Ci0KLSAgICBjYWxsT25NYWluVGhyZWFkKFt3ZWFrVGhpc10gewotICAgICAgICBpZiAod2Vh
a1RoaXMpCi0gICAgICAgICAgICB3ZWFrVGhpcy0+bV9jbGllbnQuZ290RHRsc0ZpbmdlcnByaW50
KGZpbmdlcnByaW50LCBmaW5nZXJwcmludEZ1bmN0aW9uKTsKLSAgICB9KTsKLX0KLQotTWVkaWFQ
YXlsb2FkVmVjdG9yIE1vY2tNZWRpYUVuZHBvaW50OjpnZXREZWZhdWx0QXVkaW9QYXlsb2Fkcygp
Ci17Ci0gICAgTWVkaWFQYXlsb2FkVmVjdG9yIHBheWxvYWRzOwotCi0gICAgTWVkaWFQYXlsb2Fk
IHBheWxvYWQxOwotICAgIHBheWxvYWQxLnR5cGUgPSAxMTE7Ci0gICAgcGF5bG9hZDEuZW5jb2Rp
bmdOYW1lID0gIk9QVVMiOwotICAgIHBheWxvYWQxLmNsb2NrUmF0ZSA9IDQ4MDAwOwotICAgIHBh
eWxvYWQxLmNoYW5uZWxzID0gMjsKLSAgICBwYXlsb2Fkcy5hcHBlbmQoV1RGTW92ZShwYXlsb2Fk
MSkpOwotCi0gICAgTWVkaWFQYXlsb2FkIHBheWxvYWQyOwotICAgIHBheWxvYWQyLnR5cGUgPSA4
OwotICAgIHBheWxvYWQyLmVuY29kaW5nTmFtZSA9ICJQQ01BIjsKLSAgICBwYXlsb2FkMi5jbG9j
a1JhdGUgPSA4MDAwOwotICAgIHBheWxvYWQyLmNoYW5uZWxzID0gMTsKLSAgICBwYXlsb2Fkcy5h
cHBlbmQoV1RGTW92ZShwYXlsb2FkMikpOwotCi0gICAgTWVkaWFQYXlsb2FkIHBheWxvYWQzOwot
ICAgIHBheWxvYWQzLnR5cGUgPSAwOwotICAgIHBheWxvYWQzLmVuY29kaW5nTmFtZSA9ICJQQ01V
IjsKLSAgICBwYXlsb2FkMy5jbG9ja1JhdGUgPSA4MDAwOwotICAgIHBheWxvYWQzLmNoYW5uZWxz
ID0gMTsKLSAgICBwYXlsb2Fkcy5hcHBlbmQoV1RGTW92ZShwYXlsb2FkMykpOwotCi0gICAgcmV0
dXJuIHBheWxvYWRzOwotfQotCi1NZWRpYVBheWxvYWRWZWN0b3IgTW9ja01lZGlhRW5kcG9pbnQ6
OmdldERlZmF1bHRWaWRlb1BheWxvYWRzKCkKLXsKLSAgICBNZWRpYVBheWxvYWRWZWN0b3IgcGF5
bG9hZHM7Ci0KLSAgICBNZWRpYVBheWxvYWQgcGF5bG9hZDE7Ci0gICAgcGF5bG9hZDEudHlwZSA9
IDEwMzsKLSAgICBwYXlsb2FkMS5lbmNvZGluZ05hbWUgPSAiSDI2NCI7Ci0gICAgcGF5bG9hZDEu
Y2xvY2tSYXRlID0gOTAwMDA7Ci0gICAgcGF5bG9hZDEuY2NtZmlyID0gdHJ1ZTsKLSAgICBwYXls
b2FkMS5uYWNrcGxpID0gdHJ1ZTsKLSAgICBwYXlsb2FkMS5hZGRQYXJhbWV0ZXIoInBhY2tldGl6
YXRpb25Nb2RlIiwgMSk7Ci0gICAgcGF5bG9hZHMuYXBwZW5kKFdURk1vdmUocGF5bG9hZDEpKTsK
LQotICAgIE1lZGlhUGF5bG9hZCBwYXlsb2FkMjsKLSAgICBwYXlsb2FkMi50eXBlID0gMTAwOwot
ICAgIHBheWxvYWQyLmVuY29kaW5nTmFtZSA9ICJWUDgiOwotICAgIHBheWxvYWQyLmNsb2NrUmF0
ZSA9IDkwMDAwOwotICAgIHBheWxvYWQyLmNjbWZpciA9IHRydWU7Ci0gICAgcGF5bG9hZDIubmFj
a3BsaSA9IHRydWU7Ci0gICAgcGF5bG9hZDIubmFjayA9IHRydWU7Ci0gICAgcGF5bG9hZHMuYXBw
ZW5kKFdURk1vdmUocGF5bG9hZDIpKTsKLQotICAgIE1lZGlhUGF5bG9hZCBwYXlsb2FkMzsKLSAg
ICBwYXlsb2FkMy50eXBlID0gMTIwOwotICAgIHBheWxvYWQzLmVuY29kaW5nTmFtZSA9ICJSVFgi
OwotICAgIHBheWxvYWQzLmNsb2NrUmF0ZSA9IDkwMDAwOwotICAgIHBheWxvYWQzLmFkZFBhcmFt
ZXRlcigiYXB0IiwgMTAwKTsKLSAgICBwYXlsb2FkMy5hZGRQYXJhbWV0ZXIoInJ0eFRpbWUiLCAy
MDApOwotICAgIHBheWxvYWRzLmFwcGVuZChXVEZNb3ZlKHBheWxvYWQzKSk7Ci0KLSAgICByZXR1
cm4gcGF5bG9hZHM7Ci19Ci0KLU1lZGlhUGF5bG9hZFZlY3RvciBNb2NrTWVkaWFFbmRwb2ludDo6
ZmlsdGVyUGF5bG9hZHMoY29uc3QgTWVkaWFQYXlsb2FkVmVjdG9yJiByZW1vdGVQYXlsb2Fkcywg
Y29uc3QgTWVkaWFQYXlsb2FkVmVjdG9yJiBkZWZhdWx0UGF5bG9hZHMpCi17Ci0gICAgTWVkaWFQ
YXlsb2FkVmVjdG9yIGZpbHRlcmVkUGF5bG9hZHM7Ci0KLSAgICBmb3IgKGF1dG8mIHJlbW90ZVBh
eWxvYWQgOiByZW1vdGVQYXlsb2FkcykgewotICAgICAgICBjb25zdCBNZWRpYVBheWxvYWQqIGRl
ZmF1bHRQYXlsb2FkID0gbnVsbHB0cjsKLSAgICAgICAgZm9yIChhdXRvJiBwYXlsb2FkIDogZGVm
YXVsdFBheWxvYWRzKSB7Ci0gICAgICAgICAgICBpZiAocGF5bG9hZC5lbmNvZGluZ05hbWUgPT0g
cmVtb3RlUGF5bG9hZC5lbmNvZGluZ05hbWUuY29udmVydFRvQVNDSUlVcHBlcmNhc2UoKSkgewot
ICAgICAgICAgICAgICAgIGRlZmF1bHRQYXlsb2FkID0gJnBheWxvYWQ7Ci0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCFkZWZhdWx0
UGF5bG9hZCkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGlmIChkZWZhdWx0UGF5
bG9hZC0+cGFyYW1ldGVycy5jb250YWlucygicGFja2V0aXphdGlvbk1vZGUiKSAmJiByZW1vdGVQ
YXlsb2FkLnBhcmFtZXRlcnMuY29udGFpbnMoInBhY2tldGl6YXRpb25Nb2RlIikKLSAgICAgICAg
ICAgICYmIChkZWZhdWx0UGF5bG9hZC0+cGFyYW1ldGVycy5nZXQoInBhY2tldGl6YXRpb25Nb2Rl
IikgIT0gZGVmYXVsdFBheWxvYWQtPnBhcmFtZXRlcnMuZ2V0KCJwYWNrZXRpemF0aW9uTW9kZSIp
KSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGZpbHRlcmVkUGF5bG9hZHMuYXBw
ZW5kKHJlbW90ZVBheWxvYWQpOwotICAgIH0KLQotICAgIHJldHVybiBmaWx0ZXJlZFBheWxvYWRz
OwotfQotCi1NZWRpYUVuZHBvaW50OjpVcGRhdGVSZXN1bHQgTW9ja01lZGlhRW5kcG9pbnQ6OnVw
ZGF0ZVJlY2VpdmVDb25maWd1cmF0aW9uKE1lZGlhRW5kcG9pbnRTZXNzaW9uQ29uZmlndXJhdGlv
biogY29uZmlndXJhdGlvbiwgYm9vbCBpc0luaXRpYXRvcikKLXsKLSAgICBVTlVTRURfUEFSQU0o
aXNJbml0aWF0b3IpOwotCi0gICAgdXBkYXRlQ29uZmlndXJhdGlvbk1pZHMoKmNvbmZpZ3VyYXRp
b24pOwotICAgIHJldHVybiBVcGRhdGVSZXN1bHQ6OlN1Y2Nlc3M7Ci19Ci0KLU1lZGlhRW5kcG9p
bnQ6OlVwZGF0ZVJlc3VsdCBNb2NrTWVkaWFFbmRwb2ludDo6dXBkYXRlU2VuZENvbmZpZ3VyYXRp
b24oTWVkaWFFbmRwb2ludFNlc3Npb25Db25maWd1cmF0aW9uKiBjb25maWd1cmF0aW9uLCBjb25z
dCBSZWFsdGltZU1lZGlhU291cmNlTWFwJiBzZW5kU291cmNlTWFwLCBib29sIGlzSW5pdGlhdG9y
KQotewotICAgIFVOVVNFRF9QQVJBTShzZW5kU291cmNlTWFwKTsKLSAgICBVTlVTRURfUEFSQU0o
aXNJbml0aWF0b3IpOwotCi0gICAgdXBkYXRlQ29uZmlndXJhdGlvbk1pZHMoKmNvbmZpZ3VyYXRp
b24pOwotICAgIHJldHVybiBVcGRhdGVSZXN1bHQ6OlN1Y2Nlc3M7Ci19Ci0KLXZvaWQgTW9ja01l
ZGlhRW5kcG9pbnQ6OmFkZFJlbW90ZUNhbmRpZGF0ZShjb25zdCBJY2VDYW5kaWRhdGUmIGNhbmRp
ZGF0ZSwgY29uc3QgU3RyaW5nJiBtaWQsIGNvbnN0IFN0cmluZyYgdWZyYWcsIGNvbnN0IFN0cmlu
ZyYgcGFzc3dvcmQpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGNhbmRpZGF0ZSk7Ci0gICAgVU5VU0VE
X1BBUkFNKG1pZCk7Ci0gICAgVU5VU0VEX1BBUkFNKHVmcmFnKTsKLSAgICBVTlVTRURfUEFSQU0o
cGFzc3dvcmQpOwotfQotCi1SZWY8UmVhbHRpbWVNZWRpYVNvdXJjZT4gTW9ja01lZGlhRW5kcG9p
bnQ6OmNyZWF0ZU11dGVkUmVtb3RlU291cmNlKGNvbnN0IFN0cmluZyYgbWlkLCBSZWFsdGltZU1l
ZGlhU291cmNlOjpUeXBlIHR5cGUpCi17Ci0gICAgUmVmUHRyPFJlYWx0aW1lTWVkaWFTb3VyY2U+
IHNvdXJjZTsKLQotICAgIHN3aXRjaCAodHlwZSkgewotICAgIGNhc2UgUmVhbHRpbWVNZWRpYVNv
dXJjZTo6VHlwZTo6QXVkaW86Ci0gICAgICAgIHNvdXJjZSA9IE1vY2tSZWFsdGltZUF1ZGlvU291
cmNlOjpjcmVhdGVNdXRlZCgicmVtb3RlIGF1ZGlvIik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgUmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlwZTo6VmlkZW86Ci0gICAgICAgIHNvdXJjZSA9IE1v
Y2tSZWFsdGltZVZpZGVvU291cmNlOjpjcmVhdGVNdXRlZCgicmVtb3RlIHZpZGVvIik7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgUmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlwZTo6Tm9uZToKLSAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQotCi0gICAgbV9tdXRlZFJlbW90ZVNv
dXJjZXMuc2V0KG1pZCwgc291cmNlKTsKLSAgICByZXR1cm4gc291cmNlLnJlbGVhc2VOb25OdWxs
KCk7Ci19Ci0KLXZvaWQgTW9ja01lZGlhRW5kcG9pbnQ6OnJlcGxhY2VTZW5kU291cmNlKFJlYWx0
aW1lTWVkaWFTb3VyY2UmIG5ld1NvdXJjZSwgY29uc3QgU3RyaW5nJiBtaWQpCi17Ci0gICAgVU5V
U0VEX1BBUkFNKG5ld1NvdXJjZSk7Ci0gICAgVU5VU0VEX1BBUkFNKG1pZCk7Ci19Ci0KLXZvaWQg
TW9ja01lZGlhRW5kcG9pbnQ6OnJlcGxhY2VNdXRlZFJlbW90ZVNvdXJjZU1pZChjb25zdCBTdHJp
bmcmIG9sZE1pZCwgY29uc3QgU3RyaW5nJiBuZXdNaWQpCi17Ci0gICAgUmVmUHRyPFJlYWx0aW1l
TWVkaWFTb3VyY2U+IHJlbW90ZVNvdXJjZSA9IG1fbXV0ZWRSZW1vdGVTb3VyY2VzLnRha2Uob2xk
TWlkKTsKLSAgICBtX211dGVkUmVtb3RlU291cmNlcy5zZXQobmV3TWlkLCBXVEZNb3ZlKHJlbW90
ZVNvdXJjZSkpOwotfQotCi12b2lkIE1vY2tNZWRpYUVuZHBvaW50OjpzdG9wKCkKLXsKLX0KLQot
dm9pZCBNb2NrTWVkaWFFbmRwb2ludDo6ZW11bGF0ZVBsYXRmb3JtRXZlbnQoY29uc3QgU3RyaW5n
JiBhY3Rpb24pCi17Ci0gICAgaWYgKGFjdGlvbiA9PSAiZGlzcGF0Y2gtZmFrZS1pY2UtY2FuZGlk
YXRlcyIpCi0gICAgICAgIGRpc3BhdGNoRmFrZUljZUNhbmRpZGF0ZXMoKTsKLSAgICBlbHNlIGlm
IChhY3Rpb24gPT0gInN0ZXAtaWNlLXRyYW5zcG9ydC1zdGF0ZXMiKQotICAgICAgICBzdGVwSWNl
VHJhbnNwb3J0U3RhdGVzKCk7Ci0gICAgZWxzZSBpZiAoYWN0aW9uID09ICJ1bm11dGUtcmVtb3Rl
LXNvdXJjZXMtYnktbWlkIikKLSAgICAgICAgdW5tdXRlUmVtb3RlU291cmNlc0J5TWlkKCk7Ci19
Ci0KLXZvaWQgTW9ja01lZGlhRW5kcG9pbnQ6OnVwZGF0ZUNvbmZpZ3VyYXRpb25NaWRzKGNvbnN0
IE1lZGlhRW5kcG9pbnRTZXNzaW9uQ29uZmlndXJhdGlvbiYgY29uZmlndXJhdGlvbikKLXsKLSAg
ICBWZWN0b3I8U3RyaW5nPiBtaWRzOwotICAgIGZvciAoYXV0byYgbWVkaWFEZXNjcmlwdGlvbiA6
IGNvbmZpZ3VyYXRpb24ubWVkaWFEZXNjcmlwdGlvbnMoKSkKLSAgICAgICAgbWlkcy5hcHBlbmQo
bWVkaWFEZXNjcmlwdGlvbi5taWQpOwotICAgIG1fbWlkcy5zd2FwKG1pZHMpOwotfQotCi12b2lk
IE1vY2tNZWRpYUVuZHBvaW50OjpkaXNwYXRjaEZha2VJY2VDYW5kaWRhdGVzKCkKLXsKLSAgICBt
X2Zha2VJY2VDYW5kaWRhdGVzLmFwcGVuZCh7ICJob3N0IiwgIjEiLCAxLCAiVURQIiwgMjAxMzI2
NjQzMSwgIjE5Mi4xNjguMC4xMDAiLCAzODgzOCwgeyB9LCB7IH0sIDAgfSk7Ci0gICAgbV9mYWtl
SWNlQ2FuZGlkYXRlcy5hcHBlbmQoeyAiaG9zdCIsICIyIiwgMSwgIlRDUCIsIDEwMTkyMTYzODMs
ICIxOTIuMTY4LjAuMTAwIiwgOSwgImFjdGl2ZSIsIHsgfSwgMCB9KTsKLSAgICBtX2Zha2VJY2VD
YW5kaWRhdGVzLmFwcGVuZCh7ICJzcmZseCIsICIzIiwgMSwgIlVEUCIsIDE2Nzc3MjIxMTEsICIx
NzIuMTguMC4xIiwgNDc5ODksIHsgfSwgIjE5Mi4xNjguMC4xMDAiLCA0Nzk4OSB9KTsKLQotICAg
IC8vIFJldmVyc2Ugb3JkZXIgdG8gdXNlIHRha2VMYXN0KCkgd2hpbGUga2VlcGluZyB0aGUgYWJv
dmUgb3JkZXIKLSAgICBtX2Zha2VJY2VDYW5kaWRhdGVzLnJldmVyc2UoKTsKLQotICAgIG1faWNl
Q2FuZGlkYXRlVGltZXIuc3RhcnRPbmVTaG90KDBfcyk7Ci19Ci0KLXZvaWQgTW9ja01lZGlhRW5k
cG9pbnQ6OmljZUNhbmRpZGF0ZVRpbWVyRmlyZWQoKQotewotICAgIGlmIChtX21pZHMuaXNFbXB0
eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIW1fZmFrZUljZUNhbmRpZGF0ZXMuaXNF
bXB0eSgpKSB7Ci0gICAgICAgIG1fY2xpZW50LmdvdEljZUNhbmRpZGF0ZShtX21pZHNbMF0sIG1f
ZmFrZUljZUNhbmRpZGF0ZXMudGFrZUxhc3QoKSk7Ci0gICAgICAgIG1faWNlQ2FuZGlkYXRlVGlt
ZXIuc3RhcnRPbmVTaG90KDBfcyk7Ci0gICAgfSBlbHNlCi0gICAgICAgIG1fY2xpZW50LmRvbmVH
YXRoZXJpbmdDYW5kaWRhdGVzKG1fbWlkc1swXSk7Ci19Ci0KLXZvaWQgTW9ja01lZGlhRW5kcG9p
bnQ6OnN0ZXBJY2VUcmFuc3BvcnRTdGF0ZXMoKQotewotICAgIGlmIChtX21pZHMuc2l6ZSgpICE9
IDMpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJUaGUgJ3N0ZXAtaWNlLXRyYW5zcG9ydC1zdGF0ZXMn
IGFjdGlvbiByZXF1aXJlcyAzIHRyYW5zY2VpdmVycyIpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgLy8gU2hvdWxkIGdvIHRvOgotICAgIC8vICdjaGVja2luZycKLSAgICBtX2ljZVRy
YW5zcG9ydFN0YXRlQ2hhbmdlcy5hcHBlbmQoc3RkOjptYWtlX3BhaXIobV9taWRzWzBdLCBSVENJ
Y2VUcmFuc3BvcnRTdGF0ZTo6Q2hlY2tpbmcpKTsKLSAgICBtX2ljZVRyYW5zcG9ydFN0YXRlQ2hh
bmdlcy5hcHBlbmQoc3RkOjptYWtlX3BhaXIobV9taWRzWzFdLCBSVENJY2VUcmFuc3BvcnRTdGF0
ZTo6Q2hlY2tpbmcpKTsKLSAgICBtX2ljZVRyYW5zcG9ydFN0YXRlQ2hhbmdlcy5hcHBlbmQoc3Rk
OjptYWtlX3BhaXIobV9taWRzWzJdLCBSVENJY2VUcmFuc3BvcnRTdGF0ZTo6Q2hlY2tpbmcpKTsK
LQotICAgIC8vICdjb25uZWN0ZWQnCi0gICAgbV9pY2VUcmFuc3BvcnRTdGF0ZUNoYW5nZXMuYXBw
ZW5kKHN0ZDo6bWFrZV9wYWlyKG1fbWlkc1swXSwgUlRDSWNlVHJhbnNwb3J0U3RhdGU6OkNvbm5l
Y3RlZCkpOwotICAgIG1faWNlVHJhbnNwb3J0U3RhdGVDaGFuZ2VzLmFwcGVuZChzdGQ6Om1ha2Vf
cGFpcihtX21pZHNbMV0sIFJUQ0ljZVRyYW5zcG9ydFN0YXRlOjpDb21wbGV0ZWQpKTsKLSAgICBt
X2ljZVRyYW5zcG9ydFN0YXRlQ2hhbmdlcy5hcHBlbmQoc3RkOjptYWtlX3BhaXIobV9taWRzWzJd
LCBSVENJY2VUcmFuc3BvcnRTdGF0ZTo6Q2xvc2VkKSk7Ci0KLSAgICAvLyAnY29tcGxldGVkJwot
ICAgIG1faWNlVHJhbnNwb3J0U3RhdGVDaGFuZ2VzLmFwcGVuZChzdGQ6Om1ha2VfcGFpcihtX21p
ZHNbMF0sIFJUQ0ljZVRyYW5zcG9ydFN0YXRlOjpDb21wbGV0ZWQpKTsKLQotICAgIC8vICdmYWls
ZWQnCi0gICAgbV9pY2VUcmFuc3BvcnRTdGF0ZUNoYW5nZXMuYXBwZW5kKHN0ZDo6bWFrZV9wYWly
KG1fbWlkc1swXSwgUlRDSWNlVHJhbnNwb3J0U3RhdGU6OkZhaWxlZCkpOwotCi0gICAgLy8gJ2Rp
c2Nvbm5lY3RlZCcKLSAgICBtX2ljZVRyYW5zcG9ydFN0YXRlQ2hhbmdlcy5hcHBlbmQoc3RkOjpt
YWtlX3BhaXIobV9taWRzWzFdLCBSVENJY2VUcmFuc3BvcnRTdGF0ZTo6RGlzY29ubmVjdGVkKSk7
Ci0gICAgbV9pY2VUcmFuc3BvcnRTdGF0ZUNoYW5nZXMuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKG1f
bWlkc1swXSwgUlRDSWNlVHJhbnNwb3J0U3RhdGU6OkNsb3NlZCkpOwotCi0gICAgLy8gJ25ldycK
LSAgICBtX2ljZVRyYW5zcG9ydFN0YXRlQ2hhbmdlcy5hcHBlbmQoc3RkOjptYWtlX3BhaXIobV9t
aWRzWzFdLCBSVENJY2VUcmFuc3BvcnRTdGF0ZTo6Q2xvc2VkKSk7Ci0KLSAgICAvLyBSZXZlcnNl
IG9yZGVyIHRvIHVzZSB0YWtlTGFzdCgpIHdoaWxlIGtlZXBpbmcgdGhlIGFib3ZlIG9yZGVyCi0g
ICAgbV9pY2VUcmFuc3BvcnRTdGF0ZUNoYW5nZXMucmV2ZXJzZSgpOwotCi0gICAgbV9pY2VUcmFu
c3BvcnRUaW1lci5zdGFydE9uZVNob3QoMF9zKTsKLX0KLQotdm9pZCBNb2NrTWVkaWFFbmRwb2lu
dDo6aWNlVHJhbnNwb3J0VGltZXJGaXJlZCgpCi17Ci0gICAgaWYgKG1faWNlVHJhbnNwb3J0U3Rh
dGVDaGFuZ2VzLmlzRW1wdHkoKSB8fCBtX21pZHMuc2l6ZSgpICE9IDMpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIGF1dG8gc3RhdGVDaGFuZ2UgPSBtX2ljZVRyYW5zcG9ydFN0YXRlQ2hhbmdlcy50
YWtlTGFzdCgpOwotICAgIG1fY2xpZW50LmljZVRyYW5zcG9ydFN0YXRlQ2hhbmdlZChzdGF0ZUNo
YW5nZS5maXJzdCwgc3RhdGVDaGFuZ2Uuc2Vjb25kKTsKLQotICAgIG1faWNlVHJhbnNwb3J0VGlt
ZXIuc3RhcnRPbmVTaG90KDBfcyk7Ci19Ci0KLXZvaWQgTW9ja01lZGlhRW5kcG9pbnQ6OnVubXV0
ZVJlbW90ZVNvdXJjZXNCeU1pZCgpCi17Ci0gICAgaWYgKG1fbWlkcy5pc0VtcHR5KCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIC8vIExvb2tpbmcgdXAgZWFjaCBzb3VyY2UgYnkgaXRzIG1pZCwg
aW5zdGVhZCBvZiBzaW1wbHkgaXRlcmF0aW5nIG92ZXIgdGhlIGxpc3Qgb2YgbXV0ZWQgc291cmNl
cywKLSAgICAvLyBlbXVsYXRlcyByZW1vdGUgbWVkaWEgYXJyaXZpbmcgb24gYSBtZWRpYSBkZXNj
cmlwdGlvbiB3aXRoIGEgc3BlY2lmaWMgbWlkIChSVENSdHBUcmFuc2NlaXZlcikuCi0KLSAgICAv
LyBDb3B5IHZhbHVlcyBpbiByZXZlcnNlIG9yZGVyIHRvIG1haW50YWluIHRoZSBvcmlnaW5hbCBv
cmRlciB3aGlsZSB1c2luZyB0YWtlTGFzdCgpCi0gICAgZm9yIChpbnQgaSA9IG1fbWlkcy5zaXpl
KCkgLSAxOyBpID49IDA7IC0taSkKLSAgICAgICAgbV9taWRzT2ZTb3VyY2VzVG9Vbm11dGUuYXBw
ZW5kKG1fbWlkc1tpXSk7Ci0KLSAgICBtX3VubXV0ZVRpbWVyLnN0YXJ0T25lU2hvdCgwX3MpOwot
fQotCi12b2lkIE1vY2tNZWRpYUVuZHBvaW50Ojp1bm11dGVUaW1lckZpcmVkKCkKLXsKLSAgICBh
dXRvKiBzb3VyY2UgPSBtX211dGVkUmVtb3RlU291cmNlcy5nZXQobV9taWRzT2ZTb3VyY2VzVG9V
bm11dGUudGFrZUxhc3QoKSk7Ci0gICAgaWYgKHNvdXJjZSkKLSAgICAgICAgc291cmNlLT5zZXRN
dXRlZChmYWxzZSk7Ci0KLSAgICBpZiAoIW1fbWlkc09mU291cmNlc1RvVW5tdXRlLmlzRW1wdHko
KSkKLSAgICAgICAgbV91bm11dGVUaW1lci5zdGFydE9uZVNob3QoMF9zKTsKLX0KLQotfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKFdFQl9SVEMpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL01vY2tNZWRpYUVuZHBvaW50LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL01vY2tNZWRpYUVuZHBvaW50LmgKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDdmNjY2NGZiODg1NjUzNTc1OTU2ZGJiZjU1NDJjNzIyNjE1YjU5
NjQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbW9jay9Nb2NrTWVkaWFFbmRwb2ludC5oCisrKyAvZGV2L251bGwK
QEAgLTEsMTAxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgRXJpY3Nzb24gQUIu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyCi0gKiAgICBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlCi0gKiAgICBkaXN0cmlidXRpb24uCi0gKiAzLiBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEVyaWNzc29uIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICog
ICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv
bSB0aGlzCi0gKiAgICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
Ci0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0g
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaWYgRU5BQkxFKFdFQl9SVEMp
Ci0KLSNpbmNsdWRlICJNZWRpYUVuZHBvaW50LmgiCi0jaW5jbHVkZSAiUlRDSWNlVHJhbnNwb3J0
U3RhdGUuaCIKLSNpbmNsdWRlICJUaW1lci5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNs
YXNzIE1vY2tNZWRpYUVuZHBvaW50IGZpbmFsIDogcHVibGljIE1lZGlhRW5kcG9pbnQgewotcHVi
bGljOgotICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8TWVkaWFFbmRw
b2ludD4gY3JlYXRlKE1lZGlhRW5kcG9pbnRDbGllbnQmKTsKLQotICAgIE1vY2tNZWRpYUVuZHBv
aW50KE1lZGlhRW5kcG9pbnRDbGllbnQmKTsKLSAgICB+TW9ja01lZGlhRW5kcG9pbnQoKTsKLQot
ICAgIHZvaWQgc2V0Q29uZmlndXJhdGlvbihNZWRpYUVuZHBvaW50Q29uZmlndXJhdGlvbiYmKSBm
aW5hbCB7IH07Ci0KLSAgICB2b2lkIGdlbmVyYXRlRHRsc0luZm8oKSBmaW5hbDsKLSAgICBNZWRp
YVBheWxvYWRWZWN0b3IgZ2V0RGVmYXVsdEF1ZGlvUGF5bG9hZHMoKSBmaW5hbDsKLSAgICBNZWRp
YVBheWxvYWRWZWN0b3IgZ2V0RGVmYXVsdFZpZGVvUGF5bG9hZHMoKSBmaW5hbDsKLSAgICBNZWRp
YVBheWxvYWRWZWN0b3IgZmlsdGVyUGF5bG9hZHMoY29uc3QgTWVkaWFQYXlsb2FkVmVjdG9yJiBy
ZW1vdGVQYXlsb2FkcywgY29uc3QgTWVkaWFQYXlsb2FkVmVjdG9yJiBkZWZhdWx0UGF5bG9hZHMp
IGZpbmFsOwotCi0gICAgVXBkYXRlUmVzdWx0IHVwZGF0ZVJlY2VpdmVDb25maWd1cmF0aW9uKE1l
ZGlhRW5kcG9pbnRTZXNzaW9uQ29uZmlndXJhdGlvbiosIGJvb2wgaXNJbml0aWF0b3IpIGZpbmFs
OwotICAgIFVwZGF0ZVJlc3VsdCB1cGRhdGVTZW5kQ29uZmlndXJhdGlvbihNZWRpYUVuZHBvaW50
U2Vzc2lvbkNvbmZpZ3VyYXRpb24qLCBjb25zdCBSZWFsdGltZU1lZGlhU291cmNlTWFwJiwgYm9v
bCBpc0luaXRpYXRvcikgZmluYWw7Ci0KLSAgICB2b2lkIGFkZFJlbW90ZUNhbmRpZGF0ZShjb25z
dCBJY2VDYW5kaWRhdGUmLCBjb25zdCBTdHJpbmcmIG1pZCwgY29uc3QgU3RyaW5nJiB1ZnJhZywg
Y29uc3QgU3RyaW5nJiBwYXNzd29yZCkgZmluYWw7Ci0KLSAgICBSZWY8UmVhbHRpbWVNZWRpYVNv
dXJjZT4gY3JlYXRlTXV0ZWRSZW1vdGVTb3VyY2UoY29uc3QgU3RyaW5nJiBtaWQsIFJlYWx0aW1l
TWVkaWFTb3VyY2U6OlR5cGUpIGZpbmFsOwotICAgIHZvaWQgcmVwbGFjZVNlbmRTb3VyY2UoUmVh
bHRpbWVNZWRpYVNvdXJjZSYsIGNvbnN0IFN0cmluZyYgbWlkKSBmaW5hbDsKLSAgICB2b2lkIHJl
cGxhY2VNdXRlZFJlbW90ZVNvdXJjZU1pZChjb25zdCBTdHJpbmcmIG9sZE1pZCwgY29uc3QgU3Ry
aW5nJiBuZXdNaWQpIGZpbmFsOwotCi0gICAgdm9pZCBzdG9wKCkgZmluYWw7Ci0KLSAgICB2b2lk
IGVtdWxhdGVQbGF0Zm9ybUV2ZW50KGNvbnN0IFN0cmluZyYgYWN0aW9uKSBmaW5hbDsKLQotcHJp
dmF0ZToKLSAgICB2b2lkIHVwZGF0ZUNvbmZpZ3VyYXRpb25NaWRzKGNvbnN0IE1lZGlhRW5kcG9p
bnRTZXNzaW9uQ29uZmlndXJhdGlvbiYpOwotCi0gICAgc3RkOjp1bmlxdWVfcHRyPFJUQ0RhdGFD
aGFubmVsSGFuZGxlcj4gY3JlYXRlRGF0YUNoYW5uZWxIYW5kbGVyKGNvbnN0IFN0cmluZyYsIGNv
bnN0IFJUQ0RhdGFDaGFubmVsSW5pdCYpIGZpbmFsOwotCi0gICAgdm9pZCBkaXNwYXRjaEZha2VJ
Y2VDYW5kaWRhdGVzKCk7Ci0gICAgdm9pZCBpY2VDYW5kaWRhdGVUaW1lckZpcmVkKCk7Ci0KLSAg
ICB2b2lkIHN0ZXBJY2VUcmFuc3BvcnRTdGF0ZXMoKTsKLSAgICB2b2lkIGljZVRyYW5zcG9ydFRp
bWVyRmlyZWQoKTsKLQotICAgIHZvaWQgdW5tdXRlUmVtb3RlU291cmNlc0J5TWlkKCk7Ci0gICAg
dm9pZCB1bm11dGVUaW1lckZpcmVkKCk7Ci0KLSAgICBNZWRpYUVuZHBvaW50Q2xpZW50JiBtX2Ns
aWVudDsKLSAgICBWZWN0b3I8U3RyaW5nPiBtX21pZHM7Ci0gICAgSGFzaE1hcDxTdHJpbmcsIFJl
ZlB0cjxSZWFsdGltZU1lZGlhU291cmNlPj4gbV9tdXRlZFJlbW90ZVNvdXJjZXM7Ci0KLSAgICBW
ZWN0b3I8SWNlQ2FuZGlkYXRlPiBtX2Zha2VJY2VDYW5kaWRhdGVzOwotICAgIFRpbWVyIG1faWNl
Q2FuZGlkYXRlVGltZXI7Ci0KLSAgICBWZWN0b3I8c3RkOjpwYWlyPFN0cmluZywgUlRDSWNlVHJh
bnNwb3J0U3RhdGU+PiBtX2ljZVRyYW5zcG9ydFN0YXRlQ2hhbmdlczsKLSAgICBUaW1lciBtX2lj
ZVRyYW5zcG9ydFRpbWVyOwotCi0gICAgVmVjdG9yPFN0cmluZz4gbV9taWRzT2ZTb3VyY2VzVG9V
bm11dGU7Ci0gICAgVGltZXIgbV91bm11dGVUaW1lcjsKLSAgICAKLSAgICBXZWFrUHRyRmFjdG9y
eTxNb2NrTWVkaWFFbmRwb2ludD4gbV93ZWFrUHRyRmFjdG9yeTsKLX07Ci0KLX0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShXRUJfUlRDKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9Nb2NrUmVhbHRpbWVNZWRpYVNvdXJjZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL01vY2tSZWFsdGltZU1lZGlhU291cmNlLmNwcApp
bmRleCBiNDI0MjdiN2NkZDdkODllMDIwZDZhNWY2MmY0N2VjYTc0N2YwMmU4Li44NzkxOTQ1ZGZm
MzEwODkwZWUyMGUxZmJmNGViNTRhNjRlZDBkOTA2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tb2NrL01vY2tSZWFsdGltZU1lZGlhU291cmNlLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tb2NrL01vY2tSZWFsdGltZU1lZGlhU291cmNlLmNwcApAQCAtODIs
NyArODIsNyBAQCBWZWN0b3I8Q2FwdHVyZURldmljZT4mIE1vY2tSZWFsdGltZU1lZGlhU291cmNl
Ojp2aWRlb0RldmljZXMoKQogfQogCiBNb2NrUmVhbHRpbWVNZWRpYVNvdXJjZTo6TW9ja1JlYWx0
aW1lTWVkaWFTb3VyY2UoY29uc3QgU3RyaW5nJiBpZCwgUmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlw
ZSB0eXBlLCBjb25zdCBTdHJpbmcmIG5hbWUpCi0gICAgOiBCYXNlUmVhbHRpbWVNZWRpYVNvdXJj
ZUNsYXNzKGlkLCB0eXBlLCBuYW1lKQorICAgIDogUmVhbHRpbWVNZWRpYVNvdXJjZShpZCwgdHlw
ZSwgbmFtZSkKIHsKICAgICBzd2l0Y2ggKHR5cGUpIHsKICAgICBjYXNlIFJlYWx0aW1lTWVkaWFT
b3VyY2U6OlR5cGU6OkF1ZGlvOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bW9jay9Nb2NrUmVhbHRpbWVNZWRpYVNvdXJjZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bW9jay9Nb2NrUmVhbHRpbWVNZWRpYVNvdXJjZS5oCmluZGV4IDk1MDdmMDFhYTNkMzIzMDI2M2Zk
NGFmZWI5ZDE2NTI4Y2Q5OWFjMmMuLjFlYTExNWQ5YjQzM2ZhNGUzMzY5Y2JlZjg0Nzk0ZjlhZjI4
ODY3ZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svTW9ja1JlYWx0
aW1lTWVkaWFTb3VyY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL01vY2tS
ZWFsdGltZU1lZGlhU291cmNlLmgKQEAgLTI4LDI4ICsyOCwxNyBAQAogICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
ICAqLwogCi0jaWZuZGVmIE1vY2tSZWFsdGltZU1lZGlhU291cmNlX2gKLSNkZWZpbmUgTW9ja1Jl
YWx0aW1lTWVkaWFTb3VyY2VfaAorI3ByYWdtYSBvbmNlCiAKICNpZiBFTkFCTEUoTUVESUFfU1RS
RUFNKQogCiAjaW5jbHVkZSAiUmVhbHRpbWVNZWRpYVNvdXJjZS5oIgogCi0jaWYgVVNFKE9QRU5X
RUJSVEMpCi0jaW5jbHVkZSAiUmVhbHRpbWVNZWRpYVNvdXJjZU93ci5oIgotI2VuZGlmCi0KIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ2FwdHVyZURldmljZTsKIAotI2lmIFVTRShPUEVO
V0VCUlRDKQotdXNpbmcgQmFzZVJlYWx0aW1lTWVkaWFTb3VyY2VDbGFzcyA9IFJlYWx0aW1lTWVk
aWFTb3VyY2VPd3I7Ci0jZWxzZQotdXNpbmcgQmFzZVJlYWx0aW1lTWVkaWFTb3VyY2VDbGFzcyA9
IFJlYWx0aW1lTWVkaWFTb3VyY2U7Ci0jZW5kaWYKLQotY2xhc3MgTW9ja1JlYWx0aW1lTWVkaWFT
b3VyY2UgOiBwdWJsaWMgQmFzZVJlYWx0aW1lTWVkaWFTb3VyY2VDbGFzcyB7CitjbGFzcyBNb2Nr
UmVhbHRpbWVNZWRpYVNvdXJjZSA6IHB1YmxpYyBSZWFsdGltZU1lZGlhU291cmNlIHsKIHB1Ymxp
YzoKICAgICB2aXJ0dWFsIH5Nb2NrUmVhbHRpbWVNZWRpYVNvdXJjZSgpIHsgfQogCkBAIC02MSw5
ICs1MCw3IEBAIHByb3RlY3RlZDoKIAogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVTZXR0aW5ncyhS
ZWFsdGltZU1lZGlhU291cmNlU2V0dGluZ3MmKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGluaXRp
YWxpemVDYXBhYmlsaXRpZXMoUmVhbHRpbWVNZWRpYVNvdXJjZUNhcGFiaWxpdGllcyYpID0gMDsK
LSNpZiAhVVNFKE9QRU5XRUJSVEMpCiAgICAgdmlydHVhbCB2b2lkIGluaXRpYWxpemVTdXBwb3J0
ZWRDb25zdHJhaW50cyhSZWFsdGltZU1lZGlhU291cmNlU3VwcG9ydGVkQ29uc3RyYWludHMmKSA9
IDA7Ci0jZW5kaWYKIAogICAgIGNvbnN0IFJlYWx0aW1lTWVkaWFTb3VyY2VDYXBhYmlsaXRpZXMm
IGNhcGFiaWxpdGllcygpIGNvbnN0IG92ZXJyaWRlOwogICAgIGNvbnN0IFJlYWx0aW1lTWVkaWFT
b3VyY2VTZXR0aW5ncyYgc2V0dGluZ3MoKSBjb25zdCBvdmVycmlkZTsKQEAgLTc0LDExICs2MSw3
IEBAIHByb3RlY3RlZDoKIAogcHJpdmF0ZToKICAgICB2b2lkIGluaXRpYWxpemVDYXBhYmlsaXRp
ZXMoKTsKLSNpZiBVU0UoT1BFTldFQlJUQykKLSAgICB2b2lkIGluaXRpYWxpemVTZXR0aW5ncygp
IGZpbmFsOwotI2Vsc2UKICAgICB2b2lkIGluaXRpYWxpemVTZXR0aW5ncygpOwotI2VuZGlmCiAK
ICAgICBSZWFsdGltZU1lZGlhU291cmNlU2V0dGluZ3MgbV9jdXJyZW50U2V0dGluZ3M7CiAgICAg
UmVhbHRpbWVNZWRpYVNvdXJjZVN1cHBvcnRlZENvbnN0cmFpbnRzIG1fc3VwcG9ydGVkQ29uc3Ry
YWludHM7CkBAIC04OSw1ICs3MiwzIEBAIHByaXZhdGU6CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CiAKICNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFNKQotCi0jZW5kaWYgLy8gTW9ja1JlYWx0
aW1lTWVkaWFTb3VyY2VfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRl
cm5hbHMuY3BwIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCmluZGV4IDIw
ZWRmOTc0OGJjZDhmZmVkYzUzMmVlZDM1MjNmNzNjYmQzZDk5NzEuLjNhZDU3ZjUzNmM4MWMyNTM3
M2U2NjY0ZGYyZDdkYzE5ZWI1ODI0YjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Rlc3Rp
bmcvSW50ZXJuYWxzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5j
cHAKQEAgLTIwMCw3ICsyMDAsNiBAQAogI2VuZGlmCiAKICNpZiBFTkFCTEUoV0VCX1JUQykKLSNp
bmNsdWRlICJNb2NrTWVkaWFFbmRwb2ludC5oIgogI2luY2x1ZGUgIlJUQ1BlZXJDb25uZWN0aW9u
LmgiCiAjZW5kaWYKIApAQCAtNDg3LDEyICs0ODYsNiBAQCBJbnRlcm5hbHM6OkludGVybmFscyhE
b2N1bWVudCYgZG9jdW1lbnQpCiAgICAgV2ViQ29yZTo6U2V0dGluZ3M6OnNldE1lZGlhQ2FwdHVy
ZVJlcXVpcmVzU2VjdXJlQ29ubmVjdGlvbihmYWxzZSk7CiAjZW5kaWYKIAotI2lmIEVOQUJMRShX
RUJfUlRDKQotI2lmIFVTRShPUEVOV0VCUlRDKQotICAgIGVuYWJsZU1vY2tNZWRpYUVuZHBvaW50
KCk7Ci0jZW5kaWYKLSNlbmRpZgotCiAjaWYgRU5BQkxFKFdJUkVMRVNTX1BMQVlCQUNLX1RBUkdF
VCkKICAgICBpZiAoZG9jdW1lbnQucGFnZSgpKQogICAgICAgICBkb2N1bWVudC5wYWdlKCktPnNl
dE1vY2tNZWRpYVBsYXliYWNrVGFyZ2V0UGlja2VyRW5hYmxlZCh0cnVlKTsKQEAgLTEyNTAsMTMg
KzEyNDMsNiBAQCB2b2lkIEludGVybmFsczo6ZW5hYmxlTW9ja1NwZWVjaFN5bnRoZXNpemVyKCkK
IAogI2lmIEVOQUJMRShXRUJfUlRDKQogCi0jaWYgVVNFKE9QRU5XRUJSVEMpCi12b2lkIEludGVy
bmFsczo6ZW5hYmxlTW9ja01lZGlhRW5kcG9pbnQoKQotewotICAgIE1lZGlhRW5kcG9pbnQ6OmNy
ZWF0ZSA9IE1vY2tNZWRpYUVuZHBvaW50OjpjcmVhdGU7Ci19Ci0jZW5kaWYKLQogdm9pZCBJbnRl
cm5hbHM6OmVtdWxhdGVSVENQZWVyQ29ubmVjdGlvblBsYXRmb3JtRXZlbnQoUlRDUGVlckNvbm5l
Y3Rpb24mIGNvbm5lY3Rpb24sIGNvbnN0IFN0cmluZyYgYWN0aW9uKQogewogICAgIGlmICghTGli
V2ViUlRDUHJvdmlkZXI6OndlYlJUQ0F2YWlsYWJsZSgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaCBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJu
YWxzLmgKaW5kZXggOWM0MDAzMmE3NWU3MDkxZGFmYTI4ODk0ZWExMDk3MzYzZGYzNjIzOC4uMTY2
OTY2ODJhYmJhMzI1NmY4MzQ1ZGUzMTQ5ZTdhNzBjNmExZjliYiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5n
L0ludGVybmFscy5oCkBAIC00MzAsOSArNDMwLDYgQEAgcHVibGljOgogI2VuZGlmCiAKICNpZiBF
TkFCTEUoV0VCX1JUQykKLSNpZiBVU0UoT1BFTldFQlJUQykKLSAgICB2b2lkIGVuYWJsZU1vY2tN
ZWRpYUVuZHBvaW50KCk7Ci0jZW5kaWYKICAgICB2b2lkIGVtdWxhdGVSVENQZWVyQ29ubmVjdGlv
blBsYXRmb3JtRXZlbnQoUlRDUGVlckNvbm5lY3Rpb24mLCBjb25zdCBTdHJpbmcmIGFjdGlvbik7
CiAgICAgdm9pZCB1c2VNb2NrUlRDUGVlckNvbm5lY3Rpb25GYWN0b3J5KGNvbnN0IFN0cmluZyYp
OwogICAgIHZvaWQgc2V0SUNFQ2FuZGlkYXRlRmlsdGVyaW5nKGJvb2wpOwpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDgxNDNm
OTY1YmJkYmM3NzZiNTA3OThjOWRjMjliNzY4MWE3OTE0ZjEuLjcwOWE4ZDhiYWRkNmFkMWRjN2Zm
NGY1ZDNkNTRiMDIyOTU3M2E3NTAgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZwor
KysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsNSArMSwxNCBAQAogMjAxNy0xMC0wNCAg
WW91ZW5uIEZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+CiAKKyAgICAgICAgUmVtb3ZlIE9wZW5X
ZWJSVEMgYmFja2VuZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTc3ODY4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ndGsvVGVzdEV4cGVjdGF0aW9uczoKKworMjAxNy0xMC0wNCAgWW91
ZW5uIEZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+CisKICAgICAgICAgQWRkIHF1b3RhIHRvIGNh
Y2hlIEFQSQogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTc3NTUyCiAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9UZXN0RXhwZWN0
YXRpb25zIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1Rlc3RFeHBlY3RhdGlvbnMKaW5kZXgg
OGM2NmRiNjQ0NWUzNzI3OGNjOTgxYTU5NzdhNjVmMjJiNDNhMDIzOS4uNDVhMjVkZDAwMWY0MDA0
MzVjM2IzOTAxYmExMjdhYjYzNzc2MjI3NCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZv
cm0vZ3RrL1Rlc3RFeHBlY3RhdGlvbnMKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1Rl
c3RFeHBlY3RhdGlvbnMKQEAgLTYxMSw4MiArNjExLDExIEBAIHdlYmtpdC5vcmcvYi85OTAzNiBm
YXN0L3NoYWRvdy1kb20vcG9pbnRlcmxvY2tlbGVtZW50LWluLXNsb3QuaHRtbCBbIFNraXAgXQog
d2Via2l0Lm9yZy9iLzg1MjExIGlldGVzdGNlbnRlci9jc3MzL2ZsZXhib3gvZmxleGJveC1hbGln
bi1zdHJldGNoLTAwMS5odG0gWyBJbWFnZU9ubHlGYWlsdXJlIF0KIHdlYmtpdC5vcmcvYi84NTIx
MiBpZXRlc3RjZW50ZXIvY3NzMy9mbGV4Ym94L2ZsZXhib3gtbGF5b3V0LTAwMi5odG0gWyBJbWFn
ZU9ubHlGYWlsdXJlIF0KIAotIyBXZWJSVEMgLyBNZWRpYVN0cmVhbSBpbXBsZW1lbnRhdGlvbiBp
cyBub3QgY29tcGxldGUgeWV0LgotIyBTb21lIG9mIHRoaXMgdGVzdHMgYXJlIHNraXBwZWQgb24g
dGhlIGdlbmVyYWwgVGVzdEV4cGVjdGF0aW9ucywKLSMgRW5hYmxlIHRoZW0gaGVyZSBhbmQgbGlz
dCB0aGUgaW5kaXZpZHVhbCBleHBlY3RhdGlvbnMgaW4gb3JkZXIgdG8gZ2V0Ci0jIG5vdGlmaWNh
dGlvbnMgb2YgbmV3IGZhaWx1cmVzLgogZmFzdC9tZWRpYXN0cmVhbSBbIFBhc3MgXQotd2VicnRj
IFsgUGFzcyBdCi0jIEdUSyB1c2VzIE9XUiBpbnN0ZWFkIG9mIGxpYndlYnJ0Ywotd2VicnRjL2xp
YndlYnJ0YyBbIFNraXAgXQotIyBTb21lIFdlYlJUQyBmZWF0dXJlcyBsaWtlIGRhdGFjaGFubmVs
IGFyZSBzdGlsbCBub3QgaW1wbGVtZW50ZWQKLXdlYnJ0Yy9hdWRpby1yZXBsYWNlLXRyYWNrLmh0
bWwgWyBGYWlsdXJlIF0KLXdlYnJ0Yy9hdWRpby1tdXRlZC1zdGF0cy5odG1sIFsgRmFpbHVyZSBd
Ci13ZWJydGMvYXVkaW8tbXV0ZWQtc3RhdHMyLmh0bWwgWyBGYWlsdXJlIF0KLXdlYnJ0Yy9jYXB0
dXJlQ2FudmFzLXdlYnJ0Yy5odG1sIFsgRmFpbHVyZSBdCi13ZWJydGMvY2xvc2luZy1wZWVyY29u
bmVjdGlvbi5odG1sIFsgVGltZW91dCBdCi13ZWJydGMvY29ubmVjdGlvbi1zdGF0ZS5odG1sIFsg
RmFpbHVyZSBdCi13ZWJydGMvZGF0YWNoYW5uZWwgWyBTa2lwIF0KLXdlYnJ0Yy9lcGhlbWVyYWwt
Y2VydGlmaWNhdGVzLWFuZC1jbmFtZXMuaHRtbCBbIEZhaWx1cmUgXQotd2VicnRjL211bHRpLXZp
ZGVvLmh0bWwgWyBGYWlsdXJlIF0KLXdlYnJ0Yy9uby1wb3J0LXplcm8taW4tdXBkLWNhbmRpZGF0
ZXMuaHRtbCBbIFRpbWVvdXQgXQotd2VicnRjL3BlZXItY29ubmVjdGlvbi1hdWRpby1tdXRlMi5o
dG1sIFsgQ3Jhc2ggRmFpbHVyZSBdCi13ZWJydGMvcGVlci1jb25uZWN0aW9uLWF1ZGlvLW11dGUu
aHRtbCBbIEZhaWx1cmUgXQotd2VicnRjL3BlZXItY29ubmVjdGlvbi1hdWRpby11bm11dGUuaHRt
bCBbIEZhaWx1cmUgXQotd2VicnRjL3BlZXItY29ubmVjdGlvbi1yZW1vdGUtYXVkaW8tbXV0ZTIu
aHRtbCBbIENyYXNoIEZhaWx1cmUgXQotd2VicnRjL3BlZXItY29ubmVjdGlvbi1yZW1vdGUtYXVk
aW8tbXV0ZS5odG1sIFsgRmFpbHVyZSBdCi13ZWJydGMvcGVlci1jb25uZWN0aW9uLXRyYWNrLWVu
ZC5odG1sIFsgRmFpbHVyZSBdCi13ZWJydGMvdmlkZW8tYWRkVHJhY2suaHRtbCBbIENyYXNoIF0K
LXdlYnJ0Yy92aWRlby1kaXNhYmxlZC1ibGFjay5odG1sIFsgRmFpbHVyZSBdCi13ZWJydGMvdmlk
ZW8tbWVkaWFzdHJlYW10cmFjay1zdGF0cy5odG1sIFsgRmFpbHVyZSBdCi13ZWJydGMvdmlkZW8t
bXV0ZS5odG1sIFsgRmFpbHVyZSBUaW1lb3V0IF0KLXdlYnJ0Yy92aWRlby1yZW1vdGUtbXV0ZS5o
dG1sIFsgRmFpbHVyZSBdCi13ZWJydGMvdmlkZW8tcmVwbGFjZS1tdXRlZC10cmFjay5odG1sIFsg
RmFpbHVyZSBUaW1lb3V0IENyYXNoIF0KLXdlYmtpdC5vcmcvYi8xNzY4MDEgd2VicnRjL3ZpZGVv
LXJlcGxhY2UtdHJhY2suaHRtbCBbIEZhaWx1cmUgQ3Jhc2ggXQotd2Via2l0Lm9yZy9iLzE3Njgw
MSB3ZWJydGMvdmlkZW8tZ2V0UGFyYW1ldGVycy5odG1sIFsgRmFpbHVyZSBDcmFzaCBdCi13ZWJr
aXQub3JnL2IvMTc2ODAxIHdlYnJ0Yy92aWRlby5odG1sIFsgRmFpbHVyZSBDcmFzaCBdCi13ZWJy
dGMvdmlkZW8tcmVwbGFjZS10cmFjay10by1udWxsLmh0bWwgWyBGYWlsdXJlIF0KLXdlYnJ0Yy92
aWRlby1yb3RhdGlvbi5odG1sIFsgRmFpbHVyZSBdCi13ZWJydGMvdmlkZW8tc3RhdHMuaHRtbCBb
IEZhaWx1cmUgQ3Jhc2ggXQotd2VicnRjL3ZpZGVvLXVubXV0ZS5odG1sIFsgRmFpbHVyZSBUaW1l
b3V0IF0KLXdlYnJ0Yy92aWRlby13aXRoLWRhdGEtY2hhbm5lbC5odG1sIFsgRmFpbHVyZSBdCi13
ZWJydGMvdmlkZW8td2l0aC1yZWNlaXZlci5odG1sIFsgRmFpbHVyZSBdCi1pbXBvcnRlZC93M2Mv
d2ViLXBsYXRmb3JtLXRlc3RzL3dlYnJ0Yy9SVENQZWVyQ29ubmVjdGlvbi1hZGRJY2VDYW5kaWRh
dGUuaHRtbCBbIEZhaWx1cmUgXQotaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy93ZWJy
dGMvUlRDUGVlckNvbm5lY3Rpb24tY3JlYXRlRGF0YUNoYW5uZWwuaHRtbCBbIEZhaWx1cmUgXQot
aW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy93ZWJydGMvUlRDUGVlckNvbm5lY3Rpb24t
c2V0UmVtb3RlRGVzY3JpcHRpb24uaHRtbCBbIEZhaWx1cmUgXQotaW1wb3J0ZWQvdzNjL3dlYi1w
bGF0Zm9ybS10ZXN0cy93ZWJydGMvUlRDUGVlckNvbm5lY3Rpb24taWRsLmh0bWwgWyBGYWlsdXJl
IF0KLWltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvd2VicnRjL1JUQ1BlZXJDb25uZWN0
aW9uLWNyZWF0ZUFuc3dlci5odG1sIFsgRmFpbHVyZSBdCi1pbXBvcnRlZC93M2Mvd2ViLXBsYXRm
b3JtLXRlc3RzL3dlYnJ0Yy9SVENQZWVyQ29ubmVjdGlvbi1vbm5lZ290aWF0aW9ubmVlZGVkLmh0
bWwgWyBGYWlsdXJlIF0KLWltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvd2VicnRjL1JU
Q0RhdGFDaGFubmVsLWJ1ZmZlcmVkQW1vdW50Lmh0bWwgWyBGYWlsdXJlIF0KLWltcG9ydGVkL3cz
Yy93ZWItcGxhdGZvcm0tdGVzdHMvd2VicnRjL1JUQ0RhdGFDaGFubmVsLXNlbmQuaHRtbCBbIEZh
aWx1cmUgXQotaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy93ZWJydGMvUlRDSWNlVHJh
bnNwb3J0Lmh0bWwgWyBGYWlsdXJlIF0KLWltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMv
d2VicnRjL1JUQ1BlZXJDb25uZWN0aW9uLWFkZFRyYW5zY2VpdmVyLmh0bWwgWyBGYWlsdXJlIF0K
LWltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvd2VicnRjL1JUQ1BlZXJDb25uZWN0aW9u
LWNvbm5lY3Rpb25TdGF0ZS5odG1sIFsgRmFpbHVyZSBdCi1pbXBvcnRlZC93M2Mvd2ViLXBsYXRm
b3JtLXRlc3RzL3dlYnJ0Yy9SVENQZWVyQ29ubmVjdGlvbi1nZXRTdGF0cy5odG1sIFsgRmFpbHVy
ZSBdCi1pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3dlYnJ0Yy9SVENQZWVyQ29ubmVj
dGlvbi1pY2VDb25uZWN0aW9uU3RhdGUuaHRtbCBbIEZhaWx1cmUgXQotaW1wb3J0ZWQvdzNjL3dl
Yi1wbGF0Zm9ybS10ZXN0cy93ZWJydGMvUlRDUGVlckNvbm5lY3Rpb24taWNlR2F0aGVyaW5nU3Rh
dGUuaHRtbCBbIEZhaWx1cmUgXQotaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy93ZWJy
dGMvUlRDUGVlckNvbm5lY3Rpb24tb25kYXRhY2hhbm5lbC5odG1sIFsgRmFpbHVyZSBdCi1pbXBv
cnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3dlYnJ0Yy9SVENQZWVyQ29ubmVjdGlvbi1zZXRM
b2NhbERlc2NyaXB0aW9uLWFuc3dlci5odG1sIFsgRmFpbHVyZSBdCi1pbXBvcnRlZC93M2Mvd2Vi
LXBsYXRmb3JtLXRlc3RzL3dlYnJ0Yy9SVENQZWVyQ29ubmVjdGlvbi1zZXRMb2NhbERlc2NyaXB0
aW9uLW9mZmVyLmh0bWwgWyBGYWlsdXJlIF0KLWltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVz
dHMvd2VicnRjL1JUQ1BlZXJDb25uZWN0aW9uLXNldFJlbW90ZURlc2NyaXB0aW9uLW9mZmVyLmh0
bWwgWyBGYWlsdXJlIF0KLWltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvd2VicnRjL1JU
Q0RUTUZTZW5kZXItaW5zZXJ0RFRNRi5odG1sIFsgQ3Jhc2ggXQotaW1wb3J0ZWQvdzNjL3dlYi1w
bGF0Zm9ybS10ZXN0cy93ZWJydGMvUlRDUGVlckNvbm5lY3Rpb24tb250cmFjay5odG1sIFsgQ3Jh
c2ggXQotaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy93ZWJydGMvUlRDUGVlckNvbm5l
Y3Rpb24tc2V0RGVzY3JpcHRpb24tdHJhbnNjZWl2ZXIuaHRtbCBbIENyYXNoIF0KLWltcG9ydGVk
L3czYy93ZWItcGxhdGZvcm0tdGVzdHMvd2VicnRjL1JUQ1J0cFNlbmRlci1yZXBsYWNlVHJhY2su
aHRtbCBbIENyYXNoIF0KLWltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvd2VicnRjL2Rh
dGFjaGFubmVsLWVtcHR5c3RyaW5nLmh0bWwgWyBGYWlsdXJlIF0KLWltcG9ydGVkL3czYy93ZWIt
cGxhdGZvcm0tdGVzdHMvd2VicnRjL25vLW1lZGlhLWNhbGwuaHRtbCBbIEZhaWx1cmUgXQotaW1w
b3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy93ZWJydGMvcHJvbWlzZXMtY2FsbC5odG1sIFsg
RmFpbHVyZSBdCi1pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3dlYnJ0Yy9ydGNwZWVy
Y29ubmVjdGlvbi9zZXRSZW1vdGVEZXNjcmlwdGlvbi5odG1sIFsgRmFpbHVyZSBdCi1odHRwL3Rl
c3RzL3dlYnJ0Yy9maWx0ZXJpbmctaWNlLWNhbmRpZGF0ZS1jcm9zcy1vcmlnaW4tZnJhbWUuaHRt
bCBbIFRpbWVvdXQgXQotaHR0cC90ZXN0cy93ZWJydGMvZmlsdGVyaW5nLWljZS1jYW5kaWRhdGUt
c2FtZS1vcmlnaW4tZnJhbWUuaHRtbCBbIFRpbWVvdXQgXQotaHR0cC90ZXN0cy93ZWJydGMvZmls
dGVyaW5nLWljZS1jYW5kaWRhdGUtc2FtZS1vcmlnaW4tZnJhbWUyLmh0bWwgWyBUaW1lb3V0IF0K
LXdlYnJ0Yy9maWx0ZXJpbmctaWNlLWNhbmRpZGF0ZS1hZnRlci1yZWxvYWQuaHRtbCBbIFRpbWVv
dXQgXQotd2VicnRjL2ljZS1jYW5kaWRhdGUtc2RwTUxpbmVJbmRleC5odG1sIFsgVGltZW91dCBd
CisjIFNraXBwaW5nIHVudGlsIGJhY2tlbmQgaXMgaW1wbGVtZW50ZWQKK3dlYnJ0YyBbIFNraXAg
XQoraW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy93ZWJydGMvIFsgU2tpcCBdCiBodHRw
L3Rlc3RzL21lZGlhL21lZGlhLXN0cmVhbS9nZXR1c2VybWVkaWEtd2l0aC1jYW52YXMuaHRtbCBb
IFRpbWVvdXQgXQotd2Via2l0Lm9yZy9iLzE2OTExMCB3ZWJydGMvYXVkaW8tcGVlci1jb25uZWN0
aW9uLXdlYmF1ZGlvLmh0bWwgWyBGYWlsdXJlIFRpbWVvdXQgXQotd2Via2l0Lm9yZy9iLzE3MzQ1
NiBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3dlYnJ0Yy9SVENQZWVyQ29ubmVjdGlv
bi1jcmVhdGVPZmZlci5odG1sIFsgQ3Jhc2ggXQotd2Via2l0Lm9yZy9iLzE3MzQ1NiB3ZWJydGMv
Y3JlYXRlT2ZmZXJBbnN3ZXIuaHRtbCAgWyBDcmFzaCBdCi13ZWJraXQub3JnL2IvMTczNDU2IHdl
YnJ0Yy92aWRlby1hZGRUcmFuc2NlaXZlci5odG1sIFsgQ3Jhc2ggXQogIyBUaGUgTWVkaWFTdHJl
YW0gaW1wbGVtZW50YXRpb24gaXMgYWxzbyBzdGlsbCBub3QgY29tcGxldGVkCiB3ZWJraXQub3Jn
L2IvNzkyMDMgZmFzdC9tZWRpYXN0cmVhbS9tb2NrLW1lZGlhLXNvdXJjZS13ZWJhdWRpby5odG1s
IFsgVGltZW91dCBdCiB3ZWJraXQub3JnL2IvNzkyMDMgZmFzdC9tZWRpYXN0cmVhbS9nZXRVc2Vy
TWVkaWEtd2ViYXVkaW8uaHRtbCBbIEZhaWx1cmUgXQpAQCAtMTI1Myw3ICsxMTgyLDYgQEAgd2Vi
a2l0Lm9yZy9iLzE3NTQxOSBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3N0cmVhbXMv
cmVhZGFibGUtYnl0ZS1zdHJlYW0KIGZhc3QvaW1hZ2VzL2FuaW1hdGVkLWltYWdlLW1wNC5odG1s
IFsgU2tpcCBdCiAKIHdlYmtpdC5vcmcvYi8xNzc1MzIgYWNjZXNzaWJpbGl0eS9pbWFnZS1sb2Fk
LW9uLWRlbGF5Lmh0bWwgWyBGYWlsdXJlIF0KLXdlYmtpdC5vcmcvYi8xNzc1MzMgd2VicnRjL3Zp
ZGVvLWludGVycnVwdGlvbi5odG1sIFsgRmFpbHVyZSBdCiAKIHdlYmtpdC5vcmcvYi8xNzc2MzIg
ZmFzdC90ZXh0L2ZsYWctY29kZXBvaW50Lmh0bWwgWyBJbWFnZU9ubHlGYWlsdXJlIF0KIApAQCAt
MTM4Miw3ICsxMzEwLDYgQEAgd2Via2l0Lm9yZy9iLzE3NjgwNSBtZWRpYS9tZWRpYS1oaWdoZXIt
cHJpby1hdWRpby1zdHJlYW0uaHRtbCBbIENyYXNoIF0KIHdlYmtpdC5vcmcvYi8xNzY4MDYgbWVk
aWEvdHJhY2svdHJhY2stdGV4dC10cmFjay1jdWUtbGlzdC5odG1sIFsgQ3Jhc2ggXQogCiB3ZWJr
aXQub3JnL2IvMTc2ODU2IGZhc3QvbWVkaWFzdHJlYW0vYXBwbHktY29uc3RyYWludHMtdmlkZW8u
aHRtbCBbIENyYXNoIF0KLXdlYmtpdC5vcmcvYi8xNzY4NTAgd2VicnRjL2Nsb25lLWF1ZGlvLXRy
YWNrLmh0bWwgWyBGYWlsdXJlIENyYXNoIF0KIHdlYmtpdC5vcmcvYi8xNzY4NjEgaW1wb3J0ZWQv
dzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9tZWRpYS1zb3VyY2UvbWVkaWFzb3VyY2Utc291cmNlYnVm
ZmVyLW1vZGUuaHRtbCBbIENyYXNoIF0KIAogIyBTZWUgYWxzbyB3ZWJraXQub3JnL2IvMTQxNjk5
CkBAIC0xMzk0LDggKzEzMjEsNiBAQCB3ZWJraXQub3JnL2IvMTc3NTM3IGh0dHAvdGVzdHMvbXVs
dGlwYXJ0L211bHRpcGFydC1odG1sLnBocCBbIENyYXNoIF0KIAogd2Via2l0Lm9yZy9iLzE3Nzgx
NiB3ZWJnbC8xLjAuMi9jb25mb3JtYW5jZS9vZ2xlcy9HTC92ZWMvdmVjXzAwMV90b18wMDguaHRt
bCBbIENyYXNoIFBhc3MgXQogCi13ZWJraXQub3JnL2IvMTc3ODE4IHdlYnJ0Yy9uZWdvdGlhdGVk
bmVlZGVkLWV2ZW50LWFkZFN0cmVhbS5odG1sIFsgQ3Jhc2ggUGFzcyBdCi0KICMvLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vCiAjIEVuZCBvZiBDcmFzaGluZyB0ZXN0cwogIy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8K
</data>

          </attachment>
      

    </bug>

</bugzilla>