<?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>227991</bug_id>
          
          <creation_ts>2021-07-15 09:24:07 -0700</creation_ts>
          <short_desc>[GStreamer] LibWebRTC files should be in libwebrtc/gstreamer</short_desc>
          <delta_ts>2021-07-16 02:08:51 -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>Platform</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="Philippe Normand">pnormand</reporter>
          <assigned_to name="Philippe Normand">pnormand</assigned_to>
          <cc>annulen</cc>
    
    <cc>calvaris</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>hta</cc>
    
    <cc>jbedard</cc>
    
    <cc>jer.noble</cc>
    
    <cc>philipj</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>sergio</cc>
    
    <cc>tommyw</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1777222</commentid>
    <comment_count>0</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2021-07-15 09:24:07 -0700</bug_when>
    <thetext>SSIA</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1777230</commentid>
    <comment_count>1</comment_count>
      <attachid>433594</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2021-07-15 09:47:05 -0700</bug_when>
    <thetext>Created attachment 433594
[fast-cq] Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1777231</commentid>
    <comment_count>2</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2021-07-15 09:48:04 -0700</bug_when>
    <thetext>Just moving files around, no change made in their code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1777468</commentid>
    <comment_count>3</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-07-16 01:43:12 -0700</bug_when>
    <thetext>Committed r279982 (239725@main): &lt;https://commits.webkit.org/239725@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 433594.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1777469</commentid>
    <comment_count>4</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-07-16 01:44:17 -0700</bug_when>
    <thetext>&lt;rdar://problem/80674906&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1777472</commentid>
    <comment_count>5</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2021-07-16 02:08:51 -0700</bug_when>
    <thetext>I&apos;ve just realised the RealtimeMediaSourceCenter and VideoEncoder are not libwebrtc-specific, I&apos;ll move them out of libwebrtc/ in another patch :) Sorry for the churn.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>433594</attachid>
            <date>2021-07-15 09:47:05 -0700</date>
            <delta_ts>2021-07-16 01:43:14 -0700</delta_ts>
            <desc>[fast-cq] Patch</desc>
            <filename>bug-227991-20210715094702.patch</filename>
            <type>text/plain</type>
            <size>223245</size>
            <attacher name="Philippe Normand">pnormand</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc5OTUwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTg2OTY2YzRlMjRjN2M1
MDIwZWJmNTMyZWUyZjRhODgzNDBjYjgyYi4uOTlkNGQ5MDlkZDhmNzljYjM2MzU2MDA4ODM3MDdm
ODlmOTk0NjdiNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyMyBAQAorMjAyMS0wNy0xNSAgUGhp
bGlwcGUgTm9ybWFuZCAgPHBub3JtYW5kQGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dTdHJlYW1l
cl0gTGliV2ViUlRDIGZpbGVzIHNob3VsZCBiZSBpbiBsaWJ3ZWJydGMvZ3N0cmVhbWVyCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjc5OTEKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBGb3IgY29uc2lzdGVu
Y3kgcHVycG9zZXMsIHRoZSBHU3RyZWFtZXIgYmFja2VuZCBtb2R1bGVzIHVzZWQgYnkgTGliV2Vi
UlRDIGFyZSBub3cgaW4KKyAgICAgICAgcGxhdGZvcm0vbWVkaWFzdHJlYW0vbGlid2VicnRjL2dz
dHJlYW1lci4gcGxhdGZvcm0vbWVkaWFzdHJlYW0vIGNvbnRhaW5zIHRoZSBwdXJlIEdTdHJlYW1l
cgorICAgICAgICBtb2R1bGVzIHJlbGF0ZWQgd2l0aCBtZWRpYSBjYXB0dXJlLgorCisgICAgICAg
ICogcGxhdGZvcm0vR1N0cmVhbWVyLmNtYWtlOgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3Ry
ZWFtL2xpYndlYnJ0Yy9nc3RyZWFtZXIvR1N0cmVhbWVyVmlkZW9Db21tb24uY3BwOiBSZW5hbWVk
IGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbGlid2VicnRjL0dTdHJl
YW1lclZpZGVvQ29tbW9uLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUgyNjRGb3JtYXQp
OgorICAgICAgICAoV2ViQ29yZTo6c3VwcG9ydGVkSDI2NEZvcm1hdHMpOgorICAgICAgICAqIHBs
YXRmb3JtL21lZGlhc3RyZWFtL2xpYndlYnJ0Yy9nc3RyZWFtZXIvR1N0cmVhbWVyVmlkZW9Db21t
b24uaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2xp
YndlYnJ0Yy9HU3RyZWFtZXJWaWRlb0NvbW1vbi5oLgorICAgICAgICAqIHBsYXRmb3JtL21lZGlh
c3RyZWFtL2xpYndlYnJ0Yy9nc3RyZWFtZXIvR1N0cmVhbWVyVmlkZW9EZWNvZGVyRmFjdG9yeS5j
cHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9saWJ3
ZWJydGMvR1N0cmVhbWVyVmlkZW9EZWNvZGVyRmFjdG9yeS5jcHAuCisgICAgICAgIChXZWJDb3Jl
OjpHU3RyZWFtZXJWaWRlb0RlY29kZXI6OkdTdHJlYW1lclZpZGVvRGVjb2Rlcik6CisgICAgICAg
IChXZWJDb3JlOjpHU3RyZWFtZXJWaWRlb0RlY29kZXI6OmRlY29kZWJpblBhZEFkZGVkQ2IpOgor
ICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyVmlkZW9EZWNvZGVyOjpwaXBlbGluZSk6CisgICAg
ICAgIChXZWJDb3JlOjpHU3RyZWFtZXJWaWRlb0RlY29kZXI6Om1ha2VFbGVtZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdTdHJlYW1lclZpZGVvRGVjb2Rlcjo6aGFuZGxlRXJyb3IpOgorICAgICAg
ICAoV2ViQ29yZTo6R1N0cmVhbWVyVmlkZW9EZWNvZGVyOjpDcmVhdGVGaWx0ZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6R1N0cmVhbWVyVmlkZW9EZWNvZGVyOjpwdWxsU2FtcGxlKToKKyAgICAgICAg
KFdlYkNvcmU6OkdTdHJlYW1lclZpZGVvRGVjb2Rlcjo6R2V0Q2Fwc0ZvckZyYW1lKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdTdHJlYW1lclZpZGVvRGVjb2Rlcjo6QWRkRGVjb2RlcklmU3VwcG9ydGVk
KToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclZpZGVvRGVjb2Rlcjo6Q29uZmlndXJlU3Vw
cG9ydGVkRGVjb2Rlcik6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJWaWRlb0RlY29kZXI6
OkdzdERlY29kZXJGYWN0b3J5KToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclZpZGVvRGVj
b2Rlcjo6SGFzR3N0RGVjb2Rlcik6CisgICAgICAgIChXZWJDb3JlOjpIMjY0RGVjb2Rlcjo6SDI2
NERlY29kZXIpOgorICAgICAgICAoV2ViQ29yZTo6VlA4RGVjb2Rlcjo6VlA4RGVjb2Rlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpWUDhEZWNvZGVyOjpDcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
VlA5RGVjb2Rlcjo6VlA5RGVjb2Rlcik6CisgICAgICAgIChXZWJDb3JlOjpWUDlEZWNvZGVyOjpD
cmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyVmlkZW9EZWNvZGVyRmFjdG9yeTo6
Q3JlYXRlVmlkZW9EZWNvZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclZpZGVvRGVj
b2RlckZhY3Rvcnk6OkdTdHJlYW1lclZpZGVvRGVjb2RlckZhY3RvcnkpOgorICAgICAgICAoV2Vi
Q29yZTo6R1N0cmVhbWVyVmlkZW9EZWNvZGVyRmFjdG9yeTo6R2V0U3VwcG9ydGVkRm9ybWF0cyBj
b25zdCk6CisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vbGlid2VicnRjL2dzdHJlYW1l
ci9HU3RyZWFtZXJWaWRlb0RlY29kZXJGYWN0b3J5Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9saWJ3ZWJydGMvR1N0cmVhbWVyVmlkZW9EZWNvZGVy
RmFjdG9yeS5oLgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL2xpYndlYnJ0Yy9nc3Ry
ZWFtZXIvR1N0cmVhbWVyVmlkZW9FbmNvZGVyLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2xpYndlYnJ0Yy9HU3RyZWFtZXJWaWRlb0VuY29kZXIu
Y3BwLgorICAgICAgICAoRW5jb2RlcnM6OnNpbmdsZXRvbik6CisgICAgICAgIChFbmNvZGVyczo6
cmVnaXN0ZXJFbmNvZGVyKToKKyAgICAgICAgKEVuY29kZXJzOjpkZWZpbml0aW9uKToKKyAgICAg
ICAgKHdlYnJ0Y1ZpZGVvRW5jb2RlckdldFByb3BlcnR5KToKKyAgICAgICAgKHdlYnJ0Y1ZpZGVv
RW5jb2RlclNldEJpdHJhdGUpOgorICAgICAgICAod2VicnRjVmlkZW9FbmNvZGVyU2V0RW5jb2Rl
cik6CisgICAgICAgICh3ZWJydGNWaWRlb0VuY29kZXJTZXRGb3JtYXQpOgorICAgICAgICAod2Vi
cnRjVmlkZW9FbmNvZGVyU2V0UHJvcGVydHkpOgorICAgICAgICAoc2V0Qml0cmF0ZUtiaXRQZXJT
ZWMpOgorICAgICAgICAoc2V0Qml0cmF0ZUJpdFBlclNlYyk6CisgICAgICAgICh3ZWJydGNWaWRl
b0VuY29kZXJDb25zdHJ1Y3RlZCk6CisgICAgICAgICh3ZWJraXRfd2VicnRjX3ZpZGVvX2VuY29k
ZXJfY2xhc3NfaW5pdCk6CisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vbGlid2VicnRj
L2dzdHJlYW1lci9HU3RyZWFtZXJWaWRlb0VuY29kZXIuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2xpYndlYnJ0Yy9HU3RyZWFtZXJWaWRlb0VuY29k
ZXIuaC4KKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9saWJ3ZWJydGMvZ3N0cmVhbWVy
L0dTdHJlYW1lclZpZGVvRW5jb2RlckZhY3RvcnkuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbGlid2VicnRjL0dTdHJlYW1lclZpZGVvRW5jb2Rl
ckZhY3RvcnkuY3BwLgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyRW5jb2RlZEltYWdlQnVm
ZmVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyRW5jb2RlZEltYWdlQnVm
ZmVyOjpnZXRCdWZmZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyRW5jb2Rl
ZEltYWdlQnVmZmVyOjpnZXRWaWRlb1Jlc29sdXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6R1N0cmVhbWVyRW5jb2RlZEltYWdlQnVmZmVyOjpHU3RyZWFtZXJFbmNvZGVkSW1hZ2VCdWZm
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyVmlkZW9FbmNvZGVyOjpHU3RyZWFtZXJW
aWRlb0VuY29kZXIpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyVmlkZW9FbmNvZGVyOjpw
aXBlbGluZSk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJWaWRlb0VuY29kZXI6Om1ha2VF
bGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclZpZGVvRW5jb2Rlcjo6cmV0dXJu
RnJvbUZsb3dSZXR1cm4pOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyVmlkZW9FbmNvZGVy
OjpjcmVhdGVFbmNvZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclZpZGVvRW5jb2Rl
cjo6QWRkQ29kZWNJZlN1cHBvcnRlZCk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJWaWRl
b0VuY29kZXI6OkNhcHMpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyVmlkZW9FbmNvZGVy
OjpDb25maWd1cmVTdXBwb3J0ZWRDb2RlYyk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJW
aWRlb0VuY29kZXI6OlNldFJlc3RyaWN0aW9uQ2Fwcyk6CisgICAgICAgIChXZWJDb3JlOjpHU3Ry
ZWFtZXJIMjY0RW5jb2Rlcjo6R1N0cmVhbWVySDI2NEVuY29kZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6R1N0cmVhbWVyVmlkZW9FbmNvZGVyRmFjdG9yeTo6Q3JlYXRlVmlkZW9FbmNvZGVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclZpZGVvRW5jb2RlckZhY3Rvcnk6OkdTdHJlYW1lclZp
ZGVvRW5jb2RlckZhY3RvcnkpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyVmlkZW9FbmNv
ZGVyRmFjdG9yeTo6R2V0U3VwcG9ydGVkRm9ybWF0cyBjb25zdCk6CisgICAgICAgICogcGxhdGZv
cm0vbWVkaWFzdHJlYW0vbGlid2VicnRjL2dzdHJlYW1lci9HU3RyZWFtZXJWaWRlb0VuY29kZXJG
YWN0b3J5Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVh
bS9saWJ3ZWJydGMvR1N0cmVhbWVyVmlkZW9FbmNvZGVyRmFjdG9yeS5oLgorICAgICAgICAqIHBs
YXRmb3JtL21lZGlhc3RyZWFtL2xpYndlYnJ0Yy9nc3RyZWFtZXIvR1N0cmVhbWVyVmlkZW9GcmFt
ZUxpYldlYlJUQy5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRp
YXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyVmlkZW9GcmFtZUxpYldlYlJUQy5jcHAuCisgICAg
ICAgIChXZWJDb3JlOjpHU3RyZWFtZXJTYW1wbGVGcm9tTGliV2ViUlRDVmlkZW9GcmFtZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJWaWRlb0ZyYW1lTGliV2ViUlRDOjpjcmVhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6TGliV2ViUlRDVmlkZW9GcmFtZUZyb21HU3RyZWFtZXJTYW1wbGUp
OgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyVmlkZW9GcmFtZUxpYldlYlJUQzo6VG9JNDIw
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9saWJ3ZWJydGMvZ3N0cmVhbWVyL0dT
dHJlYW1lclZpZGVvRnJhbWVMaWJXZWJSVEMuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJWaWRlb0ZyYW1lTGliV2Vi
UlRDLmguCisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJWaWRlb0ZyYW1lTGliV2ViUlRDOjpH
U3RyZWFtZXJWaWRlb0ZyYW1lTGliV2ViUlRDKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1l
clZpZGVvRnJhbWVMaWJXZWJSVEM6OnRha2VTYW1wbGUpOgorICAgICAgICAqIHBsYXRmb3JtL21l
ZGlhc3RyZWFtL2xpYndlYnJ0Yy9nc3RyZWFtZXIvTGliV2ViUlRDUHJvdmlkZXJHU3RyZWFtZXIu
Y3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbGli
d2VicnRjL0xpYldlYlJUQ1Byb3ZpZGVyR1N0cmVhbWVyLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6
OkxpYldlYlJUQ1Byb3ZpZGVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6TGliV2ViUlRD
UHJvdmlkZXI6OndlYlJUQ0F2YWlsYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpMaWJXZWJSVENQ
cm92aWRlckdTdHJlYW1lcjo6Y3JlYXRlRGVjb2RlckZhY3RvcnkpOgorICAgICAgICAoV2ViQ29y
ZTo6TGliV2ViUlRDUHJvdmlkZXJHU3RyZWFtZXI6OmNyZWF0ZUVuY29kZXJGYWN0b3J5KToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9saWJ3ZWJydGMvZ3N0cmVhbWVyL0xpYldlYlJU
Q1Byb3ZpZGVyR1N0cmVhbWVyLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tZWRpYXN0cmVhbS9saWJ3ZWJydGMvTGliV2ViUlRDUHJvdmlkZXJHU3RyZWFtZXIuaC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9saWJ3ZWJydGMvZ3N0cmVhbWVyL1JlYWx0aW1l
SW5jb21pbmdBdWRpb1NvdXJjZUxpYldlYlJUQy5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVJbmNvbWluZ0F1ZGlv
U291cmNlTGliV2ViUlRDLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lSW5jb21pbmdB
dWRpb1NvdXJjZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lSW5jb21pbmdB
dWRpb1NvdXJjZUxpYldlYlJUQzo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlYWx0aW1l
SW5jb21pbmdBdWRpb1NvdXJjZUxpYldlYlJUQzo6UmVhbHRpbWVJbmNvbWluZ0F1ZGlvU291cmNl
TGliV2ViUlRDKToKKyAgICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lSW5jb21pbmdBdWRpb1NvdXJj
ZUxpYldlYlJUQzo6T25EYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9saWJ3
ZWJydGMvZ3N0cmVhbWVyL1JlYWx0aW1lSW5jb21pbmdBdWRpb1NvdXJjZUxpYldlYlJUQy5oOiBS
ZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVy
L1JlYWx0aW1lSW5jb21pbmdBdWRpb1NvdXJjZUxpYldlYlJUQy5oLgorICAgICAgICAqIHBsYXRm
b3JtL21lZGlhc3RyZWFtL2xpYndlYnJ0Yy9nc3RyZWFtZXIvUmVhbHRpbWVJbmNvbWluZ1ZpZGVv
U291cmNlTGliV2ViUlRDLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VMaWJXZWJS
VEMuY3BwLgorICAgICAgICAoV2ViQ29yZTo6UmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlOjpj
cmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlTGli
V2ViUlRDOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVhbHRpbWVJbmNvbWluZ1ZpZGVv
U291cmNlTGliV2ViUlRDOjpSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VMaWJXZWJSVEMpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlTGliV2ViUlRDOjpP
bkZyYW1lKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9saWJ3ZWJydGMvZ3N0cmVh
bWVyL1JlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZUxpYldlYlJUQy5oOiBSZW5hbWVkIGZyb20g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1JlYWx0aW1lSW5j
b21pbmdWaWRlb1NvdXJjZUxpYldlYlJUQy5oLgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3Ry
ZWFtL2xpYndlYnJ0Yy9nc3RyZWFtZXIvUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlckxpYldlYlJU
Qy5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9n
c3RyZWFtZXIvUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlckxpYldlYlJUQy5jcHAuCisgICAgICAg
IChXZWJDb3JlOjpSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyOjpkZWZhdWx0QXVkaW9DYXB0dXJl
RmFjdG9yeSk6CisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyOjpk
ZWZhdWx0VmlkZW9DYXB0dXJlRmFjdG9yeSk6CisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZU1l
ZGlhU291cmNlQ2VudGVyOjpkZWZhdWx0RGlzcGxheUNhcHR1cmVGYWN0b3J5KToKKyAgICAgICAg
KiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9saWJ3ZWJydGMvZ3N0cmVhbWVyL1JlYWx0aW1lT3V0Z29p
bmdBdWRpb1NvdXJjZUxpYldlYlJUQy5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVPdXRnb2luZ0F1ZGlvU291cmNl
TGliV2ViUlRDLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lT3V0Z29pbmdBdWRpb1Nv
dXJjZUxpYldlYlJUQzo6UmVhbHRpbWVPdXRnb2luZ0F1ZGlvU291cmNlTGliV2ViUlRDKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lT3V0Z29pbmdBdWRpb1NvdXJjZUxpYldlYlJUQzo6flJl
YWx0aW1lT3V0Z29pbmdBdWRpb1NvdXJjZUxpYldlYlJUQyk6CisgICAgICAgIChXZWJDb3JlOjpS
ZWFsdGltZU91dGdvaW5nQXVkaW9Tb3VyY2U6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjps
aWJ3ZWJydGNBdWRpb0Zvcm1hdCk6CisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZU91dGdvaW5n
QXVkaW9Tb3VyY2VMaWJXZWJSVEM6OmF1ZGlvU2FtcGxlc0F2YWlsYWJsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpSZWFsdGltZU91dGdvaW5nQXVkaW9Tb3VyY2VMaWJXZWJSVEM6OnB1bGxBdWRpb0Rh
dGEpOgorICAgICAgICAoV2ViQ29yZTo6UmVhbHRpbWVPdXRnb2luZ0F1ZGlvU291cmNlTGliV2Vi
UlRDOjppc1JlYWNoaW5nQnVmZmVyZWRBdWRpb0RhdGFIaWdoTGltaXQpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVhbHRpbWVPdXRnb2luZ0F1ZGlvU291cmNlTGliV2ViUlRDOjppc1JlYWNoaW5nQnVm
ZmVyZWRBdWRpb0RhdGFMb3dMaW1pdCk6CisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZU91dGdv
aW5nQXVkaW9Tb3VyY2VMaWJXZWJSVEM6Omhhc0J1ZmZlcmVkRW5vdWdoRGF0YSk6CisgICAgICAg
ICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vbGlid2VicnRjL2dzdHJlYW1lci9SZWFsdGltZU91dGdv
aW5nQXVkaW9Tb3VyY2VMaWJXZWJSVEMuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZU91dGdvaW5nQXVkaW9Tb3VyY2VM
aWJXZWJSVEMuaC4KKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9saWJ3ZWJydGMvZ3N0
cmVhbWVyL1JlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZUxpYldlYlJUQy5jcHA6IFJlbmFtZWQg
ZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRp
bWVPdXRnb2luZ1ZpZGVvU291cmNlTGliV2ViUlRDLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OlJl
YWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
YWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZUxpYldlYlJUQzo6Y3JlYXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZUxpYldlYlJUQzo6UmVhbHRpbWVPdXRn
b2luZ1ZpZGVvU291cmNlTGliV2ViUlRDKToKKyAgICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lT3V0
Z29pbmdWaWRlb1NvdXJjZUxpYldlYlJUQzo6dmlkZW9TYW1wbGVBdmFpbGFibGUpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlTGliV2ViUlRDOjpjcmVhdGVC
bGFja0ZyYW1lKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9saWJ3ZWJydGMvZ3N0
cmVhbWVyL1JlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZUxpYldlYlJUQy5oOiBSZW5hbWVkIGZy
b20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1JlYWx0aW1l
T3V0Z29pbmdWaWRlb1NvdXJjZUxpYldlYlJUQy5oLgorCiAyMDIxLTA3LTE1ICBUaW0gTmd1eWVu
ICA8bnRpbUBhcHBsZS5jb20+CiAKICAgICAgICAgPGRpYWxvZz4gZWxlbWVudDogZG8gbm90IHBl
cmZvcm0gY2xvc2UoKSBtZXRob2Qgc3RlcHMgd2hlbiByZW1vdmluZyBvcGVuIGF0dHJpYnV0ZS4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0dTdHJlYW1lci5jbWFrZSBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL0dTdHJlYW1lci5jbWFrZQppbmRleCBhYzk1ZmZjZWYyNThk
NTZkNDBhYTE3ZWFhM2YwODlkMTMzZjRiNzkzLi5hYmEyMTA4YTUzN2UyY2YyZGVlYmU1N2I3OTQ0
ZTIwNmU4NzRlZGVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9HU3RyZWFt
ZXIuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vR1N0cmVhbWVyLmNtYWtlCkBA
IC00MiwxMiArNDIsMTkgQEAgaWYgKEVOQUJMRV9WSURFTyBPUiBFTkFCTEVfV0VCX0FVRElPKQog
ICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL1RyYWNrUXVldWUuY3BwCiAg
ICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvV2ViS2l0TWVkaWFTb3VyY2VH
U3RyZWFtZXIuY3BwCiAKLSAgICAgICAgcGxhdGZvcm0vbWVkaWFzdHJlYW0vbGlid2VicnRjL0dT
dHJlYW1lclZpZGVvQ29tbW9uLmNwcAotICAgICAgICBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9saWJ3
ZWJydGMvR1N0cmVhbWVyVmlkZW9EZWNvZGVyRmFjdG9yeS5jcHAKLSAgICAgICAgcGxhdGZvcm0v
bWVkaWFzdHJlYW0vbGlid2VicnRjL0dTdHJlYW1lclZpZGVvRW5jb2Rlci5jcHAKLSAgICAgICAg
cGxhdGZvcm0vbWVkaWFzdHJlYW0vbGlid2VicnRjL0dTdHJlYW1lclZpZGVvRW5jb2RlckZhY3Rv
cnkuY3BwCiAgICAgICAgIHBsYXRmb3JtL21lZGlhc3RyZWFtL2xpYndlYnJ0Yy9MaWJXZWJSVENB
dWRpb01vZHVsZS5jcHAKLSAgICAgICAgcGxhdGZvcm0vbWVkaWFzdHJlYW0vbGlid2VicnRjL0xp
YldlYlJUQ1Byb3ZpZGVyR1N0cmVhbWVyLmNwcAorCisgICAgICAgIHBsYXRmb3JtL21lZGlhc3Ry
ZWFtL2xpYndlYnJ0Yy9nc3RyZWFtZXIvR1N0cmVhbWVyVmlkZW9Db21tb24uY3BwCisgICAgICAg
IHBsYXRmb3JtL21lZGlhc3RyZWFtL2xpYndlYnJ0Yy9nc3RyZWFtZXIvR1N0cmVhbWVyVmlkZW9E
ZWNvZGVyRmFjdG9yeS5jcHAKKyAgICAgICAgcGxhdGZvcm0vbWVkaWFzdHJlYW0vbGlid2VicnRj
L2dzdHJlYW1lci9HU3RyZWFtZXJWaWRlb0VuY29kZXIuY3BwCisgICAgICAgIHBsYXRmb3JtL21l
ZGlhc3RyZWFtL2xpYndlYnJ0Yy9nc3RyZWFtZXIvR1N0cmVhbWVyVmlkZW9FbmNvZGVyRmFjdG9y
eS5jcHAKKyAgICAgICAgcGxhdGZvcm0vbWVkaWFzdHJlYW0vbGlid2VicnRjL2dzdHJlYW1lci9H
U3RyZWFtZXJWaWRlb0ZyYW1lTGliV2ViUlRDLmNwcAorICAgICAgICBwbGF0Zm9ybS9tZWRpYXN0
cmVhbS9saWJ3ZWJydGMvZ3N0cmVhbWVyL0xpYldlYlJUQ1Byb3ZpZGVyR1N0cmVhbWVyLmNwcAor
ICAgICAgICBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9saWJ3ZWJydGMvZ3N0cmVhbWVyL1JlYWx0aW1l
SW5jb21pbmdBdWRpb1NvdXJjZUxpYldlYlJUQy5jcHAKKyAgICAgICAgcGxhdGZvcm0vbWVkaWFz
dHJlYW0vbGlid2VicnRjL2dzdHJlYW1lci9SZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VMaWJX
ZWJSVEMuY3BwCisgICAgICAgIHBsYXRmb3JtL21lZGlhc3RyZWFtL2xpYndlYnJ0Yy9nc3RyZWFt
ZXIvUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlckxpYldlYlJUQy5jcHAKKyAgICAgICAgcGxhdGZv
cm0vbWVkaWFzdHJlYW0vbGlid2VicnRjL2dzdHJlYW1lci9SZWFsdGltZU91dGdvaW5nQXVkaW9T
b3VyY2VMaWJXZWJSVEMuY3BwCisgICAgICAgIHBsYXRmb3JtL21lZGlhc3RyZWFtL2xpYndlYnJ0
Yy9nc3RyZWFtZXIvUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlTGliV2ViUlRDLmNwcAogCiAg
ICAgICAgIHBsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJBdWRpb0NhcHR1
cmVTb3VyY2UuY3BwCiAgICAgICAgIHBsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3Ry
ZWFtZXJBdWRpb0NhcHR1cmVyLmNwcApAQCAtNTYsMTQgKzYzLDggQEAgaWYgKEVOQUJMRV9WSURF
TyBPUiBFTkFCTEVfV0VCX0FVRElPKQogICAgICAgICBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3Ry
ZWFtZXIvR1N0cmVhbWVyTWVkaWFTdHJlYW1Tb3VyY2UuY3BwCiAgICAgICAgIHBsYXRmb3JtL21l
ZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJWaWRlb0NhcHR1cmVTb3VyY2UuY3BwCiAgICAg
ICAgIHBsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJWaWRlb0NhcHR1cmVy
LmNwcAotICAgICAgICBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyVmlk
ZW9GcmFtZUxpYldlYlJUQy5jcHAKICAgICAgICAgcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVh
bWVyL01vY2tSZWFsdGltZUF1ZGlvU291cmNlR1N0cmVhbWVyLmNwcAogICAgICAgICBwbGF0Zm9y
bS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2VHU3RyZWFtZXIu
Y3BwCi0gICAgICAgIHBsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZUluY29t
aW5nQXVkaW9Tb3VyY2VMaWJXZWJSVEMuY3BwCi0gICAgICAgIHBsYXRmb3JtL21lZGlhc3RyZWFt
L2dzdHJlYW1lci9SZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VMaWJXZWJSVEMuY3BwCi0gICAg
ICAgIHBsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZU1lZGlhU291cmNlQ2Vu
dGVyTGliV2ViUlRDLmNwcAotICAgICAgICBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIv
UmVhbHRpbWVPdXRnb2luZ0F1ZGlvU291cmNlTGliV2ViUlRDLmNwcAotICAgICAgICBwbGF0Zm9y
bS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlTGliV2Vi
UlRDLmNwcAogICAgICkKIAogICAgIGxpc3QoQVBQRU5EIFdlYkNvcmVfUFJJVkFURV9GUkFNRVdP
UktfSEVBREVSUwpAQCAtNzIsOSArNzMsOSBAQCBpZiAoRU5BQkxFX1ZJREVPIE9SIEVOQUJMRV9X
RUJfQVVESU8pCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HVW5pcXVlUHRy
R1N0cmVhbWVyLmgKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxh
eWVyUmVxdWVzdEluc3RhbGxNaXNzaW5nUGx1Z2luc0NhbGxiYWNrLmgKIAotICAgICAgICBwbGF0
Zm9ybS9tZWRpYXN0cmVhbS9saWJ3ZWJydGMvR1N0cmVhbWVyVmlkZW9EZWNvZGVyRmFjdG9yeS5o
Ci0gICAgICAgIHBsYXRmb3JtL21lZGlhc3RyZWFtL2xpYndlYnJ0Yy9HU3RyZWFtZXJWaWRlb0Vu
Y29kZXJGYWN0b3J5LmgKLSAgICAgICAgcGxhdGZvcm0vbWVkaWFzdHJlYW0vbGlid2VicnRjL0xp
YldlYlJUQ1Byb3ZpZGVyR1N0cmVhbWVyLmgKKyAgICAgICAgcGxhdGZvcm0vbWVkaWFzdHJlYW0v
bGlid2VicnRjL2dzdHJlYW1lci9HU3RyZWFtZXJWaWRlb0RlY29kZXJGYWN0b3J5LmgKKyAgICAg
ICAgcGxhdGZvcm0vbWVkaWFzdHJlYW0vbGlid2VicnRjL2dzdHJlYW1lci9HU3RyZWFtZXJWaWRl
b0VuY29kZXJGYWN0b3J5LmgKKyAgICAgICAgcGxhdGZvcm0vbWVkaWFzdHJlYW0vbGlid2VicnRj
L2dzdHJlYW1lci9MaWJXZWJSVENQcm92aWRlckdTdHJlYW1lci5oCiAgICAgKQogCiAgICAgaWYg
KFVTRV9HU1RSRUFNRVJfRlVMTCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJWaWRlb0ZyYW1lTGliV2ViUlRDLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJW
aWRlb0ZyYW1lTGliV2ViUlRDLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWE3
MDU1NTMwMGEzZTFmOGJmYzRhZmI0NzI1ZDVlNjI1MTcwOTc5MC4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRp
YXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyVmlkZW9GcmFtZUxpYldlYlJUQy5jcHAKKysrIC9k
ZXYvbnVsbApAQCAtMSwxMTMgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMTIsIDIw
MTUsIDIwMTYsIDIwMTggSWdhbGlhIFMuTAotICogIENvcHlyaWdodCAoQykgMjAxNSwgMjAxNiwg
MjAxOCBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiAgbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgotICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQot
ICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgot
ICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2Vu
ZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3Qs
IHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0g
Ki8KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIFVTRShHU1RSRUFNRVIpICYmIFVTRShMSUJX
RUJSVEMpCi0jaW5jbHVkZSAiR1N0cmVhbWVyVmlkZW9GcmFtZUxpYldlYlJUQy5oIgotCi0jaW5j
bHVkZSA8Z3N0L3ZpZGVvL3ZpZGVvLWZvcm1hdC5oPgotI2luY2x1ZGUgPGdzdC92aWRlby92aWRl
by1pbmZvLmg+Ci0jaW5jbHVkZSA8dGhyZWFkPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUdS
ZWZQdHI8R3N0U2FtcGxlPiBHU3RyZWFtZXJTYW1wbGVGcm9tTGliV2ViUlRDVmlkZW9GcmFtZShj
b25zdCB3ZWJydGM6OlZpZGVvRnJhbWUmIGZyYW1lKQotewotICAgIGlmIChmcmFtZS52aWRlb19m
cmFtZV9idWZmZXIoKS0+dHlwZSgpID09IHdlYnJ0Yzo6VmlkZW9GcmFtZUJ1ZmZlcjo6VHlwZTo6
a05hdGl2ZSkgewotICAgICAgICBhdXRvKiBmcmFtZWJ1ZmZlciA9IHN0YXRpY19jYXN0PEdTdHJl
YW1lclZpZGVvRnJhbWVMaWJXZWJSVEMqPihmcmFtZS52aWRlb19mcmFtZV9idWZmZXIoKS5nZXQo
KSk7Ci0gICAgICAgIHJldHVybiBmcmFtZWJ1ZmZlci0+dGFrZVNhbXBsZSgpOwotICAgIH0KLQot
ICAgIGF1dG8qIGk0MjBCdWZmZXIgPSBmcmFtZS52aWRlb19mcmFtZV9idWZmZXIoKS0+VG9JNDIw
KCkucmVsZWFzZSgpOwotICAgIGludCBoZWlnaHQgPSBpNDIwQnVmZmVyLT5oZWlnaHQoKTsKLSAg
ICBpbnQgc3RyaWRlc1szXSA9IHsKLSAgICAgICAgaTQyMEJ1ZmZlci0+U3RyaWRlWSgpLAotICAg
ICAgICBpNDIwQnVmZmVyLT5TdHJpZGVVKCksCi0gICAgICAgIGk0MjBCdWZmZXItPlN0cmlkZVYo
KQotICAgIH07Ci0gICAgc2l6ZV90IG9mZnNldHNbM10gPSB7Ci0gICAgICAgIDAsCi0gICAgICAg
IHN0YXRpY19jYXN0PGdzaXplPihpNDIwQnVmZmVyLT5TdHJpZGVZKCkgKiBoZWlnaHQpLAotICAg
ICAgICBzdGF0aWNfY2FzdDxnc2l6ZT4oaTQyMEJ1ZmZlci0+U3RyaWRlWSgpICogaGVpZ2h0ICsg
aTQyMEJ1ZmZlci0+U3RyaWRlVSgpICogKChoZWlnaHQgKyAxKSAvIDIpKQotICAgIH07Ci0gICAg
R3N0VmlkZW9JbmZvIGluZm87Ci0gICAgZ3N0X3ZpZGVvX2luZm9fc2V0X2Zvcm1hdCgmaW5mbywg
R1NUX1ZJREVPX0ZPUk1BVF9JNDIwLCBmcmFtZS53aWR0aCgpLCBmcmFtZS5oZWlnaHQoKSk7Ci0g
ICAgYXV0byBidWZmZXIgPSBhZG9wdEdSZWYoZ3N0X2J1ZmZlcl9uZXdfd3JhcHBlZF9mdWxsKHN0
YXRpY19jYXN0PEdzdE1lbW9yeUZsYWdzPihHU1RfTUVNT1JZX0ZMQUdfTk9fU0hBUkUgfCBHU1Rf
TUVNT1JZX0ZMQUdfUkVBRE9OTFkpLAotICAgICAgICBjb25zdF9jYXN0PGdwb2ludGVyPihyZWlu
dGVycHJldF9jYXN0PGNvbnN0IHZvaWQqPihpNDIwQnVmZmVyLT5EYXRhWSgpKSksIGluZm8uc2l6
ZSwgMCwgaW5mby5zaXplLCBpNDIwQnVmZmVyLCBbXShncG9pbnRlciBidWZmZXIpIHsKLSAgICAg
ICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8d2VicnRjOjpJNDIwQnVmZmVyKj4oYnVmZmVyKS0+UmVs
ZWFzZSgpOwotICAgIH0pKTsKLQotICAgIGdzdF9idWZmZXJfYWRkX3ZpZGVvX21ldGFfZnVsbChi
dWZmZXIuZ2V0KCksIEdTVF9WSURFT19GUkFNRV9GTEFHX05PTkUsIEdTVF9WSURFT19GT1JNQVRf
STQyMCwgZnJhbWUud2lkdGgoKSwgZnJhbWUuaGVpZ2h0KCksIDMsIG9mZnNldHMsIHN0cmlkZXMp
OwotCi0gICAgYXV0byBjYXBzID0gYWRvcHRHUmVmKGdzdF92aWRlb19pbmZvX3RvX2NhcHMoJmlu
Zm8pKTsKLSAgICBhdXRvIHNhbXBsZSA9IGFkb3B0R1JlZihnc3Rfc2FtcGxlX25ldyhidWZmZXIu
Z2V0KCksIGNhcHMuZ2V0KCksIG51bGxwdHIsIG51bGxwdHIpKTsKLSAgICByZXR1cm4gc2FtcGxl
OwotfQotCi1ydGM6OnNjb3BlZF9yZWZwdHI8d2VicnRjOjpWaWRlb0ZyYW1lQnVmZmVyPiBHU3Ry
ZWFtZXJWaWRlb0ZyYW1lTGliV2ViUlRDOjpjcmVhdGUoR1JlZlB0cjxHc3RTYW1wbGU+JiYgc2Ft
cGxlKQotewotICAgIEdzdFZpZGVvSW5mbyBpbmZvOwotCi0gICAgaWYgKCFnc3RfdmlkZW9faW5m
b19mcm9tX2NhcHMoJmluZm8sIGdzdF9zYW1wbGVfZ2V0X2NhcHMoc2FtcGxlLmdldCgpKSkpCi0g
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotCi0gICAgcmV0dXJuIHJ0Yzo6c2NvcGVkX3Jl
ZnB0cjx3ZWJydGM6OlZpZGVvRnJhbWVCdWZmZXI+KG5ldyBHU3RyZWFtZXJWaWRlb0ZyYW1lTGli
V2ViUlRDKFdURk1vdmUoc2FtcGxlKSwgaW5mbykpOwotfQotCi1zdGQ6OnVuaXF1ZV9wdHI8d2Vi
cnRjOjpWaWRlb0ZyYW1lPiBMaWJXZWJSVENWaWRlb0ZyYW1lRnJvbUdTdHJlYW1lclNhbXBsZShH
UmVmUHRyPEdzdFNhbXBsZT4mJiBzYW1wbGUsIHdlYnJ0Yzo6VmlkZW9Sb3RhdGlvbiByb3RhdGlv
biwKLSAgICBpbnQ2NF90IHRpbWVzdGFtcCwgaW50NjRfdCByZW5kZXJUaW1lTXMpCi17Ci0gICAg
YXV0byBmcmFtZUJ1ZmZlcihHU3RyZWFtZXJWaWRlb0ZyYW1lTGliV2ViUlRDOjpjcmVhdGUoV1RG
TW92ZShzYW1wbGUpKSk7Ci0gICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjx3ZWJydGM6OlZpZGVv
RnJhbWU+KG5ldyB3ZWJydGM6OlZpZGVvRnJhbWUoZnJhbWVCdWZmZXIsIHRpbWVzdGFtcCwgcmVu
ZGVyVGltZU1zLCByb3RhdGlvbikpOwotfQotCi1ydGM6OnNjb3BlZF9yZWZwdHI8d2VicnRjOjpJ
NDIwQnVmZmVySW50ZXJmYWNlPiBHU3RyZWFtZXJWaWRlb0ZyYW1lTGliV2ViUlRDOjpUb0k0MjAo
KQotewotICAgIEdzdE1hcHBlZEZyYW1lIGluRnJhbWUobV9zYW1wbGUsIEdTVF9NQVBfUkVBRCk7
Ci0gICAgaWYgKCFpbkZyYW1lKSB7Ci0gICAgICAgIEdTVF9XQVJOSU5HKCJDb3VsZCBub3QgbWFw
IGZyYW1lIik7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLQotICAgIGlmIChpbkZy
YW1lLmZvcm1hdCgpICE9IEdTVF9WSURFT19GT1JNQVRfSTQyMCkgewotICAgICAgICBHc3RWaWRl
b0luZm8gb3V0SW5mbzsKLSAgICAgICAgZ3N0X3ZpZGVvX2luZm9fc2V0X2Zvcm1hdCgmb3V0SW5m
bywgR1NUX1ZJREVPX0ZPUk1BVF9JNDIwLCBpbkZyYW1lLndpZHRoKCksIGluRnJhbWUuaGVpZ2h0
KCkpOwotCi0gICAgICAgIGF1dG8gaW5mbyA9IGluRnJhbWUuaW5mbygpOwotICAgICAgICBvdXRJ
bmZvLmZwc19uID0gaW5mby0+ZnBzX247Ci0gICAgICAgIG91dEluZm8uZnBzX2QgPSBpbmZvLT5m
cHNfZDsKLQotICAgICAgICBhdXRvIGJ1ZmZlciA9IGFkb3B0R1JlZihnc3RfYnVmZmVyX25ld19h
bGxvY2F0ZShudWxscHRyLCBHU1RfVklERU9fSU5GT19TSVpFKCZvdXRJbmZvKSwgbnVsbHB0cikp
OwotICAgICAgICBHc3RNYXBwZWRGcmFtZSBvdXRGcmFtZShidWZmZXIuZ2V0KCksIG91dEluZm8s
IEdTVF9NQVBfV1JJVEUpOwotICAgICAgICBHVW5pcXVlUHRyPEdzdFZpZGVvQ29udmVydGVyPiB2
aWRlb0NvbnZlcnRlcihnc3RfdmlkZW9fY29udmVydGVyX25ldyhpbkZyYW1lLmluZm8oKSwgJm91
dEluZm8sIGdzdF9zdHJ1Y3R1cmVfbmV3KCJHc3RWaWRlb0NvbnZlcnRDb25maWciLAotICAgICAg
ICAgICAgR1NUX1ZJREVPX0NPTlZFUlRFUl9PUFRfVEhSRUFEUywgR19UWVBFX1VJTlQsIHN0ZDo6
bWF4KHN0ZDo6dGhyZWFkOjpoYXJkd2FyZV9jb25jdXJyZW5jeSgpLCAxdSksIG51bGxwdHIpKSk7
Ci0KLSAgICAgICAgQVNTRVJUKHZpZGVvQ29udmVydGVyKTsKLSAgICAgICAgZ3N0X3ZpZGVvX2Nv
bnZlcnRlcl9mcmFtZSh2aWRlb0NvbnZlcnRlci5nZXQoKSwgaW5GcmFtZS5nZXQoKSwgb3V0RnJh
bWUuZ2V0KCkpOwotICAgICAgICByZXR1cm4gd2VicnRjOjpJNDIwQnVmZmVyOjpDb3B5KG91dEZy
YW1lLndpZHRoKCksIG91dEZyYW1lLmhlaWdodCgpLCBvdXRGcmFtZS5Db21wb25lbnREYXRhKDAp
LCBvdXRGcmFtZS5Db21wb25lbnRTdHJpZGUoMCksCi0gICAgICAgICAgICBvdXRGcmFtZS5Db21w
b25lbnREYXRhKDEpLCBvdXRGcmFtZS5Db21wb25lbnRTdHJpZGUoMSksIG91dEZyYW1lLkNvbXBv
bmVudERhdGEoMiksIG91dEZyYW1lLkNvbXBvbmVudFN0cmlkZSgyKSk7Ci0gICAgfQotCi0gICAg
cmV0dXJuIHdlYnJ0Yzo6STQyMEJ1ZmZlcjo6Q29weShpbkZyYW1lLndpZHRoKCksIGluRnJhbWUu
aGVpZ2h0KCksIGluRnJhbWUuQ29tcG9uZW50RGF0YSgwKSwgaW5GcmFtZS5Db21wb25lbnRTdHJp
ZGUoMCksCi0gICAgICAgIGluRnJhbWUuQ29tcG9uZW50RGF0YSgxKSwgaW5GcmFtZS5Db21wb25l
bnRTdHJpZGUoMSksIGluRnJhbWUuQ29tcG9uZW50RGF0YSgyKSwgaW5GcmFtZS5Db21wb25lbnRT
dHJpZGUoMikpOwotfQotCi19Ci0KLSNlbmRpZiAvLyBVU0UoTElCV0VCUlRDKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1l
clZpZGVvRnJhbWVMaWJXZWJSVEMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3Ry
ZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJWaWRlb0ZyYW1lTGliV2ViUlRDLmgKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IGNkODRhODUyMTA3YmQ2OTZhYThhMmRiZjVhMGFjMDAzYjg5MmQw
NjkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclZpZGVvRnJh
bWVMaWJXZWJSVEMuaAorKysgL2Rldi9udWxsCkBAIC0xLDYwICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTggTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KLSAqIENvcHlyaWdodCAoQykg
MjAxOCBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
Ci0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0g
KgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWludCB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAq
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaWYg
VVNFKEdTVFJFQU1FUikgJiYgVVNFKExJQldFQlJUQykKLQotI2luY2x1ZGUgIkdTdHJlYW1lckNv
bW1vbi5oIgotI2luY2x1ZGUgIkxpYldlYlJUQ01hY3Jvcy5oIgotI2luY2x1ZGUgIndlYnJ0Yy9h
cGkvdmlkZW8vaTQyMF9idWZmZXIuaCIKLSNpbmNsdWRlICJ3ZWJydGMvYXBpL3ZpZGVvL3ZpZGVv
X2ZyYW1lLmgiCi0jaW5jbHVkZSAid2VicnRjL2NvbW1vbl92aWRlby9pbmNsdWRlL3ZpZGVvX2Zy
YW1lX2J1ZmZlci5oIgotI2luY2x1ZGUgIndlYnJ0Yy9ydGNfYmFzZS9yZWZfY291bnRlZF9vYmpl
Y3QuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1XQVJOX1VOVVNFRF9SRVRVUk4gR1JlZlB0
cjxHc3RTYW1wbGU+IEdTdHJlYW1lclNhbXBsZUZyb21MaWJXZWJSVENWaWRlb0ZyYW1lKGNvbnN0
IHdlYnJ0Yzo6VmlkZW9GcmFtZSYpOwotCi1zdGQ6OnVuaXF1ZV9wdHI8d2VicnRjOjpWaWRlb0Zy
YW1lPiBMaWJXZWJSVENWaWRlb0ZyYW1lRnJvbUdTdHJlYW1lclNhbXBsZShHUmVmUHRyPEdzdFNh
bXBsZT4mJiwgd2VicnRjOjpWaWRlb1JvdGF0aW9uLCBpbnQ2NF90IHRpbWVzdGFtcCwgaW50NjRf
dCByZW5kZXJUaW1lTXMpOwotCi1jbGFzcyBHU3RyZWFtZXJWaWRlb0ZyYW1lTGliV2ViUlRDIDog
cHVibGljIHJ0Yzo6UmVmQ291bnRlZE9iamVjdDx3ZWJydGM6OlZpZGVvRnJhbWVCdWZmZXI+IHsK
LXB1YmxpYzoKLSAgICBHU3RyZWFtZXJWaWRlb0ZyYW1lTGliV2ViUlRDKEdSZWZQdHI8R3N0U2Ft
cGxlPiYmIHNhbXBsZSwgR3N0VmlkZW9JbmZvIGluZm8pCi0gICAgICAgIDogbV9zYW1wbGUoV1RG
TW92ZShzYW1wbGUpKQotICAgICAgICAsIG1faW5mbyhpbmZvKSB7IH0KLQotICAgIHN0YXRpYyBy
dGM6OnNjb3BlZF9yZWZwdHI8d2VicnRjOjpWaWRlb0ZyYW1lQnVmZmVyPiBjcmVhdGUoR1JlZlB0
cjxHc3RTYW1wbGU+JiYpOwotCi0gICAgR1JlZlB0cjxHc3RTYW1wbGU+JiYgdGFrZVNhbXBsZSgp
IHsgcmV0dXJuIFdURk1vdmUobV9zYW1wbGUpOyB9Ci0gICAgcnRjOjpzY29wZWRfcmVmcHRyPHdl
YnJ0Yzo6STQyMEJ1ZmZlckludGVyZmFjZT4gVG9JNDIwKCkgZmluYWw7Ci0KLSAgICBpbnQgd2lk
dGgoKSBjb25zdCBmaW5hbCB7IHJldHVybiBHU1RfVklERU9fSU5GT19XSURUSCgmbV9pbmZvKTsg
fQotICAgIGludCBoZWlnaHQoKSBjb25zdCBmaW5hbCB7IHJldHVybiBHU1RfVklERU9fSU5GT19I
RUlHSFQoJm1faW5mbyk7IH0KLQotcHJpdmF0ZToKLSAgICB3ZWJydGM6OlZpZGVvRnJhbWVCdWZm
ZXI6OlR5cGUgdHlwZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIFR5cGU6OmtOYXRpdmU7IH0KLQot
ICAgIEdSZWZQdHI8R3N0U2FtcGxlPiBtX3NhbXBsZTsKLSAgICBHc3RWaWRlb0luZm8gbV9pbmZv
OwotfTsKLX0KLQotI2VuZGlmIC8vIFVTRShHU1RSRUFNRVIpICYmIFVTRShMSUJXRUJSVEMpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIv
UmVhbHRpbWVJbmNvbWluZ0F1ZGlvU291cmNlTGliV2ViUlRDLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZUluY29taW5nQXVkaW9Tb3Vy
Y2VMaWJXZWJSVEMuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNmI4NDA2YTI0
ZWU1OTEzODA3NTg3ODA0MjFkMGE5YTdhZjM0ZThiLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFt
L2dzdHJlYW1lci9SZWFsdGltZUluY29taW5nQXVkaW9Tb3VyY2VMaWJXZWJSVEMuY3BwCisrKyAv
ZGV2L251bGwKQEAgLTEsNzkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBJZ2Fs
aWEgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyCi0gKiAgICBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiAgICBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQK
LSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBVU0UoTElCV0VCUlRDKSAmJiBVU0UoR1NU
UkVBTUVSKQotI2luY2x1ZGUgIlJlYWx0aW1lSW5jb21pbmdBdWRpb1NvdXJjZUxpYldlYlJUQy5o
IgotCi0jaW5jbHVkZSAiTGliV2ViUlRDQXVkaW9Gb3JtYXQuaCIKLSNpbmNsdWRlICJnc3RyZWFt
ZXIvR1N0cmVhbWVyQXVkaW9EYXRhLmgiCi0jaW5jbHVkZSAiZ3N0cmVhbWVyL0dTdHJlYW1lckF1
ZGlvU3RyZWFtRGVzY3JpcHRpb24uaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1SZWY8UmVh
bHRpbWVJbmNvbWluZ0F1ZGlvU291cmNlPiBSZWFsdGltZUluY29taW5nQXVkaW9Tb3VyY2U6OmNy
ZWF0ZShydGM6OnNjb3BlZF9yZWZwdHI8d2VicnRjOjpBdWRpb1RyYWNrSW50ZXJmYWNlPiYmIGF1
ZGlvVHJhY2ssIFN0cmluZyYmIGF1ZGlvVHJhY2tJZCkKLXsKLSAgICBhdXRvIHNvdXJjZSA9IFJl
YWx0aW1lSW5jb21pbmdBdWRpb1NvdXJjZUxpYldlYlJUQzo6Y3JlYXRlKFdURk1vdmUoYXVkaW9U
cmFjayksIFdURk1vdmUoYXVkaW9UcmFja0lkKSk7Ci0gICAgc291cmNlLT5zdGFydCgpOwotICAg
IHJldHVybiBzb3VyY2U7Ci19Ci0KLVJlZjxSZWFsdGltZUluY29taW5nQXVkaW9Tb3VyY2VMaWJX
ZWJSVEM+IFJlYWx0aW1lSW5jb21pbmdBdWRpb1NvdXJjZUxpYldlYlJUQzo6Y3JlYXRlKHJ0Yzo6
c2NvcGVkX3JlZnB0cjx3ZWJydGM6OkF1ZGlvVHJhY2tJbnRlcmZhY2U+JiYgYXVkaW9UcmFjaywg
U3RyaW5nJiYgYXVkaW9UcmFja0lkKQotewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFJlYWx0
aW1lSW5jb21pbmdBdWRpb1NvdXJjZUxpYldlYlJUQyhXVEZNb3ZlKGF1ZGlvVHJhY2spLCBXVEZN
b3ZlKGF1ZGlvVHJhY2tJZCkpKTsKLX0KLQotUmVhbHRpbWVJbmNvbWluZ0F1ZGlvU291cmNlTGli
V2ViUlRDOjpSZWFsdGltZUluY29taW5nQXVkaW9Tb3VyY2VMaWJXZWJSVEMocnRjOjpzY29wZWRf
cmVmcHRyPHdlYnJ0Yzo6QXVkaW9UcmFja0ludGVyZmFjZT4mJiBhdWRpb1RyYWNrLCBTdHJpbmcm
JiBhdWRpb1RyYWNrSWQpCi0gICAgOiBSZWFsdGltZUluY29taW5nQXVkaW9Tb3VyY2UoV1RGTW92
ZShhdWRpb1RyYWNrKSwgV1RGTW92ZShhdWRpb1RyYWNrSWQpKQotewotfQotCi12b2lkIFJlYWx0
aW1lSW5jb21pbmdBdWRpb1NvdXJjZUxpYldlYlJUQzo6T25EYXRhKGNvbnN0IHZvaWQqIGF1ZGlv
RGF0YSwgaW50LCBpbnQgc2FtcGxlUmF0ZSwgc2l6ZV90IG51bWJlck9mQ2hhbm5lbHMsIHNpemVf
dCBudW1iZXJPZkZyYW1lcykKLXsKLSAgICBHc3RBdWRpb0luZm8gaW5mbzsKLSAgICBHc3RBdWRp
b0Zvcm1hdCBmb3JtYXQgPSBnc3RfYXVkaW9fZm9ybWF0X2J1aWxkX2ludGVnZXIoCi0gICAgICAg
IExpYldlYlJUQ0F1ZGlvRm9ybWF0Ojppc1NpZ25lZCwKLSAgICAgICAgTGliV2ViUlRDQXVkaW9G
b3JtYXQ6OmlzQmlnRW5kaWFuID8gR19CSUdfRU5ESUFOIDogR19MSVRUTEVfRU5ESUFOLAotICAg
ICAgICBMaWJXZWJSVENBdWRpb0Zvcm1hdDo6c2FtcGxlU2l6ZSwKLSAgICAgICAgTGliV2ViUlRD
QXVkaW9Gb3JtYXQ6OnNhbXBsZVNpemUpOwotCi0gICAgZ3N0X2F1ZGlvX2luZm9fc2V0X2Zvcm1h
dCgmaW5mbywgZm9ybWF0LCBzYW1wbGVSYXRlLCBudW1iZXJPZkNoYW5uZWxzLCBOVUxMKTsKLQot
ICAgIGF1dG8gYnVmZmVyU2l6ZSA9IEdTVF9BVURJT19JTkZPX0JQRigmaW5mbykgKiBudW1iZXJP
ZkZyYW1lczsKLSAgICBhdXRvIGJ1ZmZlciA9IGFkb3B0R1JlZihnc3RfYnVmZmVyX25ld193cmFw
cGVkX2Z1bGwoR1NUX01FTU9SWV9GTEFHX1JFQURPTkxZLCBjb25zdF9jYXN0PGdwb2ludGVyPihh
dWRpb0RhdGEpLCBidWZmZXJTaXplLCAwLCBidWZmZXJTaXplLCBudWxscHRyLCBudWxscHRyKSk7
Ci0gICAgYXV0byBjYXBzID0gYWRvcHRHUmVmKGdzdF9hdWRpb19pbmZvX3RvX2NhcHMoJmluZm8p
KTsKLSAgICBhdXRvIHNhbXBsZSA9IGFkb3B0R1JlZihnc3Rfc2FtcGxlX25ldyhidWZmZXIuZ2V0
KCksIGNhcHMuZ2V0KCksIG51bGxwdHIsIG51bGxwdHIpKTsKLSAgICBHU3RyZWFtZXJBdWRpb0Rh
dGEgZGF0YShXVEZNb3ZlKHNhbXBsZSksIGluZm8pOwotICAgIE1lZGlhVGltZSBtZWRpYVRpbWUo
KG1fbnVtYmVyT2ZGcmFtZXMgKiBHX1VTRUNfUEVSX1NFQykgLyBzYW1wbGVSYXRlLCBHX1VTRUNf
UEVSX1NFQyk7Ci0gICAgYXVkaW9TYW1wbGVzQXZhaWxhYmxlKG1lZGlhVGltZSwgZGF0YSwgR1N0
cmVhbWVyQXVkaW9TdHJlYW1EZXNjcmlwdGlvbihpbmZvKSwgbnVtYmVyT2ZGcmFtZXMpOwotCi0g
ICAgbV9udW1iZXJPZkZyYW1lcyArPSBudW1iZXJPZkZyYW1lczsKLX0KLX0KLQotI2VuZGlmIC8v
IFVTRShMSUJXRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRp
YXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVJbmNvbWluZ0F1ZGlvU291cmNlTGliV2ViUlRDLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVJ
bmNvbWluZ0F1ZGlvU291cmNlTGliV2ViUlRDLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDU3MzNjNTJmODYxZGVjZGFkMWZmNGVhNGJjMDBiZmY5ZjVlY2NlY2IuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1JlYWx0aW1lSW5jb21pbmdBdWRpb1NvdXJjZUxpYldl
YlJUQy5oCisrKyAvZGV2L251bGwKQEAgLTEsNTIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqICAgIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqICAgIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
LSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaWYgVVNFKExJQldFQlJUQykgJiYgVVNF
KEdTVFJFQU1FUikKLQotI2luY2x1ZGUgIlJlYWx0aW1lSW5jb21pbmdBdWRpb1NvdXJjZS5oIgot
Ci1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFJlYWx0aW1lSW5jb21pbmdBdWRpb1NvdXJj
ZUxpYldlYlJUQyBmaW5hbCA6IHB1YmxpYyBSZWFsdGltZUluY29taW5nQXVkaW9Tb3VyY2Ugewot
cHVibGljOgotICAgIHN0YXRpYyBSZWY8UmVhbHRpbWVJbmNvbWluZ0F1ZGlvU291cmNlTGliV2Vi
UlRDPiBjcmVhdGUocnRjOjpzY29wZWRfcmVmcHRyPHdlYnJ0Yzo6QXVkaW9UcmFja0ludGVyZmFj
ZT4mJiwgU3RyaW5nJiYpOwotCi1wcml2YXRlOgotICAgIFJlYWx0aW1lSW5jb21pbmdBdWRpb1Nv
dXJjZUxpYldlYlJUQyhydGM6OnNjb3BlZF9yZWZwdHI8d2VicnRjOjpBdWRpb1RyYWNrSW50ZXJm
YWNlPiYmLCBTdHJpbmcmJik7Ci0KLSAgICAvLyB3ZWJydGM6OkF1ZGlvVHJhY2tTaW5rSW50ZXJm
YWNlIEFQSQotICAgIHZvaWQgT25EYXRhKGNvbnN0IHZvaWQqIGF1ZGlvRGF0YSwgaW50IGJpdHNQ
ZXJTYW1wbGUsIGludCBzYW1wbGVSYXRlLCBzaXplX3QgbnVtYmVyT2ZDaGFubmVscywgc2l6ZV90
IG51bWJlck9mRnJhbWVzKSBmaW5hbDsKLQotICAgIHVpbnQ2NF90IG1fbnVtYmVyT2ZGcmFtZXMg
eyAwIH07Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBVU0UoTElC
V0VCUlRDKQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVh
bS9nc3RyZWFtZXIvUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlTGliV2ViUlRDLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZUluY29t
aW5nVmlkZW9Tb3VyY2VMaWJXZWJSVEMuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCA4M2NiNDFiNDdiMDA2YTg1OTUyZjg1ZDc2YmRlOWU4N2ZjZWVhMDRlLi4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VMaWJXZWJS
VEMuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNzAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxNyBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogICAgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogICAgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAot
ICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgVVNFKExJQldFQlJUQykg
JiYgVVNFKEdTVFJFQU1FUikKLSNpbmNsdWRlICJSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VM
aWJXZWJSVEMuaCIKLQotI2luY2x1ZGUgIkdTdHJlYW1lclZpZGVvRnJhbWVMaWJXZWJSVEMuaCIK
LSNpbmNsdWRlICJNZWRpYVNhbXBsZUdTdHJlYW1lci5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci0KLVJlZjxSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2U+IFJlYWx0aW1lSW5jb21pbmdWaWRl
b1NvdXJjZTo6Y3JlYXRlKHJ0Yzo6c2NvcGVkX3JlZnB0cjx3ZWJydGM6OlZpZGVvVHJhY2tJbnRl
cmZhY2U+JiYgdmlkZW9UcmFjaywgU3RyaW5nJiYgdHJhY2tJZCkKLXsKLSAgICBhdXRvIHNvdXJj
ZSA9IFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZUxpYldlYlJUQzo6Y3JlYXRlKFdURk1vdmUo
dmlkZW9UcmFjayksIFdURk1vdmUodHJhY2tJZCkpOwotICAgIHNvdXJjZS0+c3RhcnQoKTsKLSAg
ICByZXR1cm4gc291cmNlOwotfQotCi1SZWY8UmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlTGli
V2ViUlRDPiBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VMaWJXZWJSVEM6OmNyZWF0ZShydGM6
OnNjb3BlZF9yZWZwdHI8d2VicnRjOjpWaWRlb1RyYWNrSW50ZXJmYWNlPiYmIHZpZGVvVHJhY2ss
IFN0cmluZyYmIHRyYWNrSWQpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgUmVhbHRpbWVJ
bmNvbWluZ1ZpZGVvU291cmNlTGliV2ViUlRDKFdURk1vdmUodmlkZW9UcmFjayksIFdURk1vdmUo
dHJhY2tJZCkpKTsKLX0KLQotUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlTGliV2ViUlRDOjpS
ZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VMaWJXZWJSVEMocnRjOjpzY29wZWRfcmVmcHRyPHdl
YnJ0Yzo6VmlkZW9UcmFja0ludGVyZmFjZT4mJiB2aWRlb1RyYWNrLCBTdHJpbmcmJiB2aWRlb1Ry
YWNrSWQpCi0gICAgOiBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2UoV1RGTW92ZSh2aWRlb1Ry
YWNrKSwgV1RGTW92ZSh2aWRlb1RyYWNrSWQpKQotewotfQotCi12b2lkIFJlYWx0aW1lSW5jb21p
bmdWaWRlb1NvdXJjZUxpYldlYlJUQzo6T25GcmFtZShjb25zdCB3ZWJydGM6OlZpZGVvRnJhbWUm
IGZyYW1lKQotewotICAgIGlmICghaXNQcm9kdWNpbmdEYXRhKCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIGNhbGxPbk1haW5UaHJlYWQoW3Byb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwg
ZnJhbWVdIHsKLSAgICAgICAgYXV0byBnc3RTYW1wbGUgPSBHU3RyZWFtZXJTYW1wbGVGcm9tTGli
V2ViUlRDVmlkZW9GcmFtZShmcmFtZSk7Ci0gICAgICAgIGF1dG8gc2FtcGxlID0gTWVkaWFTYW1w
bGVHU3RyZWFtZXI6OmNyZWF0ZShXVEZNb3ZlKGdzdFNhbXBsZSksIHsgfSwgeyB9KTsKLSAgICAg
ICAgcHJvdGVjdGVkVGhpcy0+dmlkZW9TYW1wbGVBdmFpbGFibGUoc2FtcGxlLmdldCgpKTsKLSAg
ICB9KTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gVVNFKExJQldF
QlJUQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dz
dHJlYW1lci9SZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VMaWJXZWJSVEMuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZUluY29taW5nVmlk
ZW9Tb3VyY2VMaWJXZWJSVEMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzZiYmM1
M2Q2NTY5MzliMmQ5OTM2MDlmMGZkODA5NzljMmU3NmE1Yi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0
cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlTGliV2ViUlRDLmgKKysr
IC9kZXYvbnVsbApAQCAtMSw1NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEln
YWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyCi0gKiAgICBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiAgICBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQK
LSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIFVTRShMSUJXRUJSVEMpICYmIFVTRShHU1RSRUFNRVIp
Ci0KLSNpbmNsdWRlICJHU3RyZWFtZXJDb21tb24uaCIKLSNpbmNsdWRlICJSZWFsdGltZUluY29t
aW5nVmlkZW9Tb3VyY2UuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBSZWFsdGlt
ZUluY29taW5nVmlkZW9Tb3VyY2VMaWJXZWJSVEMgZmluYWwgOiBwdWJsaWMgUmVhbHRpbWVJbmNv
bWluZ1ZpZGVvU291cmNlIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFJlYWx0aW1lSW5jb21p
bmdWaWRlb1NvdXJjZUxpYldlYlJUQz4gY3JlYXRlKHJ0Yzo6c2NvcGVkX3JlZnB0cjx3ZWJydGM6
OlZpZGVvVHJhY2tJbnRlcmZhY2U+JiYsIFN0cmluZyYmKTsKLQotcHJpdmF0ZToKLSAgICBSZWFs
dGltZUluY29taW5nVmlkZW9Tb3VyY2VMaWJXZWJSVEMocnRjOjpzY29wZWRfcmVmcHRyPHdlYnJ0
Yzo6VmlkZW9UcmFja0ludGVyZmFjZT4mJiwgU3RyaW5nJiYpOwotICAgIH5SZWFsdGltZUluY29t
aW5nVmlkZW9Tb3VyY2VMaWJXZWJSVEMoKSB7IH0KLQotICAgIC8vIHJ0Yzo6VmlkZW9TaW5rSW50
ZXJmYWNlCi0gICAgdm9pZCBPbkZyYW1lKGNvbnN0IHdlYnJ0Yzo6VmlkZW9GcmFtZSYpIGZpbmFs
OwotICAgIHZvaWQgc2V0Q2Fwc0Zyb21TZXR0aW5ncygpOwotICAgIEdSZWZQdHI8R3N0Q2Fwcz4g
bV9jYXBzOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gVVNFKExJ
QldFQlJUQykKLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJl
YW0vZ3N0cmVhbWVyL1JlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJMaWJXZWJSVEMuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1JlYWx0aW1lTWVkaWFT
b3VyY2VDZW50ZXJMaWJXZWJSVEMuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAy
YzFlMDkxZTQ2YmViYzZhZWRkMWExZDBjYTY0NGRjOTZhMDYzY2Q3Li4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21l
ZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZU1lZGlhU291cmNlQ2VudGVyTGliV2ViUlRDLmNw
cAorKysgL2Rldi9udWxsCkBAIC0xLDUyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTggTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KLSAqIENvcHlyaWdodCAoQykgMjAyMCBJZ2FsaWEg
Uy5MLgotICogQXV0aG9yOiBUaGliYXVsdCBTYXVuaWVyIDx0c2F1bmllckBpZ2FsaWEuY29tPgot
ICogQXV0aG9yOiBBbGVqYW5kcm8gRy4gQ2FzdHJvIDxhbGV4QGlnYWxpYS5jb20+Ci0gKgotICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
LSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhaW50IHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUg
ImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKLSNpbmNsdWRlICJSZWFsdGlt
ZU1lZGlhU291cmNlQ2VudGVyLmgiCi0KLSNpbmNsdWRlICJHU3RyZWFtZXJBdWRpb0NhcHR1cmVT
b3VyY2UuaCIKLSNpbmNsdWRlICJHU3RyZWFtZXJDYXB0dXJlRGV2aWNlLmgiCi0jaW5jbHVkZSAi
R1N0cmVhbWVyVmlkZW9DYXB0dXJlU291cmNlLmgiCi0jaW5jbHVkZSA8d3RmL01haW5UaHJlYWQu
aD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1BdWRpb0NhcHR1cmVGYWN0b3J5JiBSZWFsdGlt
ZU1lZGlhU291cmNlQ2VudGVyOjpkZWZhdWx0QXVkaW9DYXB0dXJlRmFjdG9yeSgpCi17Ci0gICAg
cmV0dXJuIEdTdHJlYW1lckF1ZGlvQ2FwdHVyZVNvdXJjZTo6ZmFjdG9yeSgpOwotfQotCi1WaWRl
b0NhcHR1cmVGYWN0b3J5JiBSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyOjpkZWZhdWx0VmlkZW9D
YXB0dXJlRmFjdG9yeSgpCi17Ci0gICAgcmV0dXJuIEdTdHJlYW1lclZpZGVvQ2FwdHVyZVNvdXJj
ZTo6ZmFjdG9yeSgpOwotfQotCi1EaXNwbGF5Q2FwdHVyZUZhY3RvcnkmIFJlYWx0aW1lTWVkaWFT
b3VyY2VDZW50ZXI6OmRlZmF1bHREaXNwbGF5Q2FwdHVyZUZhY3RvcnkoKQotewotICAgIHJldHVy
biBHU3RyZWFtZXJWaWRlb0NhcHR1cmVTb3VyY2U6OmRpc3BsYXlGYWN0b3J5KCk7Ci19Ci0KLX0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0pCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIv
UmVhbHRpbWVPdXRnb2luZ0F1ZGlvU291cmNlTGliV2ViUlRDLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZU91dGdvaW5nQXVkaW9Tb3Vy
Y2VMaWJXZWJSVEMuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YzljYzNmYTI1
MTEzNjQyMjFhYThlZDk1N2VjMjNmMThmZTUxZTQ3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFt
L2dzdHJlYW1lci9SZWFsdGltZU91dGdvaW5nQXVkaW9Tb3VyY2VMaWJXZWJSVEMuY3BwCisrKyAv
ZGV2L251bGwKQEAgLTEsMTUwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgSWdh
bGlhIFMuTAotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWlu
dCB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgot
ICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIFVTRShMSUJXRUJSVEMpICYmIFVTRShH
U1RSRUFNRVIpCi0jaW5jbHVkZSAiUmVhbHRpbWVPdXRnb2luZ0F1ZGlvU291cmNlTGliV2ViUlRD
LmgiCi0KLSNpbmNsdWRlICJHU3RyZWFtZXJBdWRpb0RhdGEuaCIKLSNpbmNsdWRlICJHU3RyZWFt
ZXJBdWRpb1N0cmVhbURlc2NyaXB0aW9uLmgiCi0jaW5jbHVkZSAiTGliV2ViUlRDQXVkaW9Gb3Jt
YXQuaCIKLSNpbmNsdWRlICJMaWJXZWJSVENQcm92aWRlci5oIgotI2luY2x1ZGUgIk5vdEltcGxl
bWVudGVkLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotUmVhbHRpbWVPdXRnb2luZ0F1ZGlv
U291cmNlTGliV2ViUlRDOjpSZWFsdGltZU91dGdvaW5nQXVkaW9Tb3VyY2VMaWJXZWJSVEMoUmVm
PE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlPiYmIGF1ZGlvU291cmNlKQotICAgIDogUmVhbHRpbWVP
dXRnb2luZ0F1ZGlvU291cmNlKFdURk1vdmUoYXVkaW9Tb3VyY2UpKQotewotICAgIG1fYWRhcHRl
ciA9IGFkb3B0R1JlZihnc3RfYWRhcHRlcl9uZXcoKSksCi0gICAgbV9zYW1wbGVDb252ZXJ0ZXIg
PSBudWxscHRyOwotfQotCi1SZWFsdGltZU91dGdvaW5nQXVkaW9Tb3VyY2VMaWJXZWJSVEM6On5S
ZWFsdGltZU91dGdvaW5nQXVkaW9Tb3VyY2VMaWJXZWJSVEMoKQotewotICAgIG1fc2FtcGxlQ29u
dmVydGVyID0gbnVsbHB0cjsKLX0KLQotUmVmPFJlYWx0aW1lT3V0Z29pbmdBdWRpb1NvdXJjZT4g
UmVhbHRpbWVPdXRnb2luZ0F1ZGlvU291cmNlOjpjcmVhdGUoUmVmPE1lZGlhU3RyZWFtVHJhY2tQ
cml2YXRlPiYmIGF1ZGlvU291cmNlKQotewotICAgIHJldHVybiBSZWFsdGltZU91dGdvaW5nQXVk
aW9Tb3VyY2VMaWJXZWJSVEM6OmNyZWF0ZShXVEZNb3ZlKGF1ZGlvU291cmNlKSk7Ci19Ci0KLXN0
YXRpYyBpbmxpbmUgR3N0QXVkaW9JbmZvIGxpYndlYnJ0Y0F1ZGlvRm9ybWF0KGludCBzYW1wbGVS
YXRlLCBzaXplX3QgY2hhbm5lbENvdW50KQotewotICAgIEdzdEF1ZGlvRm9ybWF0IGZvcm1hdCA9
IGdzdF9hdWRpb19mb3JtYXRfYnVpbGRfaW50ZWdlcigKLSAgICAgICAgTGliV2ViUlRDQXVkaW9G
b3JtYXQ6OmlzU2lnbmVkLAotICAgICAgICBMaWJXZWJSVENBdWRpb0Zvcm1hdDo6aXNCaWdFbmRp
YW4gPyBHX0JJR19FTkRJQU4gOiBHX0xJVFRMRV9FTkRJQU4sCi0gICAgICAgIExpYldlYlJUQ0F1
ZGlvRm9ybWF0OjpzYW1wbGVTaXplLAotICAgICAgICBMaWJXZWJSVENBdWRpb0Zvcm1hdDo6c2Ft
cGxlU2l6ZSk7Ci0KLSAgICBHc3RBdWRpb0luZm8gaW5mbzsKLQotICAgIHNpemVfdCBsaWJXZWJS
VENDaGFubmVsQ291bnQgPSBjaGFubmVsQ291bnQgPj0gMiA/IDIgOiBjaGFubmVsQ291bnQ7Ci0g
ICAgZ3N0X2F1ZGlvX2luZm9fc2V0X2Zvcm1hdCgmaW5mbywgZm9ybWF0LCBzYW1wbGVSYXRlLCBs
aWJXZWJSVENDaGFubmVsQ291bnQsIG51bGxwdHIpOwotICAgIHJldHVybiBpbmZvOwotfQotCi12
b2lkIFJlYWx0aW1lT3V0Z29pbmdBdWRpb1NvdXJjZUxpYldlYlJUQzo6YXVkaW9TYW1wbGVzQXZh
aWxhYmxlKGNvbnN0IE1lZGlhVGltZSYsIGNvbnN0IFBsYXRmb3JtQXVkaW9EYXRhJiBhdWRpb0Rh
dGEsIGNvbnN0IEF1ZGlvU3RyZWFtRGVzY3JpcHRpb24mIHN0cmVhbURlc2NyaXB0aW9uLCBzaXpl
X3QgLyogc2FtcGxlQ291bnQgKi8pCi17Ci0gICAgRGlzYWJsZU1hbGxvY1Jlc3RyaWN0aW9uc0Zv
ckN1cnJlbnRUaHJlYWRTY29wZSBkaXNhYmxlTWFsbG9jUmVzdHJpY3Rpb25zOwotICAgIGF1dG8g
ZGF0YSA9IHN0YXRpY19jYXN0PGNvbnN0IEdTdHJlYW1lckF1ZGlvRGF0YSY+KGF1ZGlvRGF0YSk7
Ci0gICAgYXV0byBkZXNjID0gc3RhdGljX2Nhc3Q8Y29uc3QgR1N0cmVhbWVyQXVkaW9TdHJlYW1E
ZXNjcmlwdGlvbiY+KHN0cmVhbURlc2NyaXB0aW9uKTsKLQotICAgIGlmIChtX3NhbXBsZUNvbnZl
cnRlciAmJiAhZ3N0X2F1ZGlvX2luZm9faXNfZXF1YWwoJm1faW5wdXRTdHJlYW1EZXNjcmlwdGlv
biwgJmRlc2MuZ2V0SW5mbygpKSkgewotICAgICAgICBHU1RfRVJST1JfT0JKRUNUKHRoaXMsICJG
SVhNRSAtIEF1ZGlvIGZvcm1hdCByZW5lZ290aWF0aW9uIGlzIG5vdCBwb3NzaWJsZSB5ZXQhIik7
Ci0gICAgICAgIG1fc2FtcGxlQ29udmVydGVyID0gbnVsbHB0cjsKLSAgICB9Ci0KLSAgICBpZiAo
IW1fc2FtcGxlQ29udmVydGVyKSB7Ci0gICAgICAgIG1faW5wdXRTdHJlYW1EZXNjcmlwdGlvbiA9
IGRlc2MuZ2V0SW5mbygpOwotICAgICAgICBtX291dHB1dFN0cmVhbURlc2NyaXB0aW9uID0gbGli
d2VicnRjQXVkaW9Gb3JtYXQoTGliV2ViUlRDQXVkaW9Gb3JtYXQ6OnNhbXBsZVJhdGUsIGRlc2Mu
bnVtYmVyT2ZDaGFubmVscygpKTsKLSAgICAgICAgbV9zYW1wbGVDb252ZXJ0ZXIucmVzZXQoZ3N0
X2F1ZGlvX2NvbnZlcnRlcl9uZXcoR1NUX0FVRElPX0NPTlZFUlRFUl9GTEFHX0lOX1dSSVRBQkxF
LCAmbV9pbnB1dFN0cmVhbURlc2NyaXB0aW9uLAotICAgICAgICAgICAgJm1fb3V0cHV0U3RyZWFt
RGVzY3JpcHRpb24sIG51bGxwdHIpKTsKLSAgICB9Ci0KLSAgICB7Ci0gICAgICAgIExvY2tlciBs
b2NrZXIgeyBtX2FkYXB0ZXJMb2NrIH07Ci0gICAgICAgIGNvbnN0IGF1dG8mIHNhbXBsZSA9IGRh
dGEuZ2V0U2FtcGxlKCk7Ci0gICAgICAgIGF1dG8qIGJ1ZmZlciA9IGdzdF9zYW1wbGVfZ2V0X2J1
ZmZlcihzYW1wbGUuZ2V0KCkpOwotICAgICAgICBnc3RfYWRhcHRlcl9wdXNoKG1fYWRhcHRlci5n
ZXQoKSwgZ3N0X2J1ZmZlcl9yZWYoYnVmZmVyKSk7Ci0gICAgfQotICAgIExpYldlYlJUQ1Byb3Zp
ZGVyOjpjYWxsT25XZWJSVENTaWduYWxpbmdUaHJlYWQoW3Byb3RlY3RlZFRoaXMgPSBtYWtlUmVm
KCp0aGlzKV0gewotICAgICAgICBwcm90ZWN0ZWRUaGlzLT5wdWxsQXVkaW9EYXRhKCk7Ci0gICAg
fSk7Ci19Ci0KLXZvaWQgUmVhbHRpbWVPdXRnb2luZ0F1ZGlvU291cmNlTGliV2ViUlRDOjpwdWxs
QXVkaW9EYXRhKCkKLXsKLSAgICBpZiAoIUdTVF9BVURJT19JTkZPX0lTX1ZBTElEKCZtX2lucHV0
U3RyZWFtRGVzY3JpcHRpb24pIHx8ICFHU1RfQVVESU9fSU5GT19JU19WQUxJRCgmbV9vdXRwdXRT
dHJlYW1EZXNjcmlwdGlvbikpIHsKLSAgICAgICAgR1NUX0lORk8oIk5vIHN0cmVhbSBkZXNjcmlw
dGlvbiBzZXQgeWV0LiIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgc2l6ZV90IG91
dENodW5rU2FtcGxlQ291bnQgPSBMaWJXZWJSVENBdWRpb0Zvcm1hdDo6Y2h1bmtTYW1wbGVDb3Vu
dDsKLSAgICBzaXplX3Qgb3V0QnVmZmVyU2l6ZSA9IG91dENodW5rU2FtcGxlQ291bnQgKiBtX291
dHB1dFN0cmVhbURlc2NyaXB0aW9uLmJwZjsKLQotICAgIExvY2tlciBsb2NrZXIgeyBtX2FkYXB0
ZXJMb2NrIH07Ci0gICAgc2l6ZV90IGluQ2h1bmtTYW1wbGVDb3VudCA9IGdzdF9hdWRpb19jb252
ZXJ0ZXJfZ2V0X2luX2ZyYW1lcyhtX3NhbXBsZUNvbnZlcnRlci5nZXQoKSwgb3V0Q2h1bmtTYW1w
bGVDb3VudCk7Ci0gICAgc2l6ZV90IGluQnVmZmVyU2l6ZSA9IGluQ2h1bmtTYW1wbGVDb3VudCAq
IG1faW5wdXRTdHJlYW1EZXNjcmlwdGlvbi5icGY7Ci0KLSAgICB3aGlsZSAoZ3N0X2FkYXB0ZXJf
YXZhaWxhYmxlKG1fYWRhcHRlci5nZXQoKSkgPiBpbkJ1ZmZlclNpemUpIHsKLSAgICAgICAgYXV0
byBpbkJ1ZmZlciA9IGFkb3B0R1JlZihnc3RfYWRhcHRlcl90YWtlX2J1ZmZlcihtX2FkYXB0ZXIu
Z2V0KCksIGluQnVmZmVyU2l6ZSkpOwotICAgICAgICBtX2F1ZGlvQnVmZmVyLmdyb3cob3V0QnVm
ZmVyU2l6ZSk7Ci0gICAgICAgIGlmIChpc1NpbGVuY2VkKCkpCi0gICAgICAgICAgICB3ZWJraXRH
c3RBdWRpb0Zvcm1hdEZpbGxTaWxlbmNlKG1fb3V0cHV0U3RyZWFtRGVzY3JpcHRpb24uZmluZm8s
IG1fYXVkaW9CdWZmZXIuZGF0YSgpLCBvdXRCdWZmZXJTaXplKTsKLSAgICAgICAgZWxzZSB7Ci0g
ICAgICAgICAgICBHc3RNYXBwZWRCdWZmZXIgaW5NYXAoaW5CdWZmZXIuZ2V0KCksIEdTVF9NQVBf
UkVBRCk7Ci0KLSAgICAgICAgICAgIGdwb2ludGVyIGluWzFdID0geyBpbk1hcC5kYXRhKCkgfTsK
LSAgICAgICAgICAgIGdwb2ludGVyIG91dFsxXSA9IHsgbV9hdWRpb0J1ZmZlci5kYXRhKCkgfTsK
LSAgICAgICAgICAgIGlmICghZ3N0X2F1ZGlvX2NvbnZlcnRlcl9zYW1wbGVzKG1fc2FtcGxlQ29u
dmVydGVyLmdldCgpLCBzdGF0aWNfY2FzdDxHc3RBdWRpb0NvbnZlcnRlckZsYWdzPigwKSwgaW4s
IGluQ2h1bmtTYW1wbGVDb3VudCwgb3V0LCBvdXRDaHVua1NhbXBsZUNvdW50KSkgewotICAgICAg
ICAgICAgICAgIEdTVF9FUlJPUigiQ291bGQgbm90IGNvbnZlcnQgc2FtcGxlcy4iKTsKLQotICAg
ICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAg
IHNlbmRBdWRpb0ZyYW1lcyhtX2F1ZGlvQnVmZmVyLmRhdGEoKSwgTGliV2ViUlRDQXVkaW9Gb3Jt
YXQ6OnNhbXBsZVNpemUsIEdTVF9BVURJT19JTkZPX1JBVEUoJm1fb3V0cHV0U3RyZWFtRGVzY3Jp
cHRpb24pLAotICAgICAgICAgICAgR1NUX0FVRElPX0lORk9fQ0hBTk5FTFMoJm1fb3V0cHV0U3Ry
ZWFtRGVzY3JpcHRpb24pLCBvdXRDaHVua1NhbXBsZUNvdW50KTsKLSAgICB9Ci19Ci0KLWJvb2wg
UmVhbHRpbWVPdXRnb2luZ0F1ZGlvU291cmNlTGliV2ViUlRDOjppc1JlYWNoaW5nQnVmZmVyZWRB
dWRpb0RhdGFIaWdoTGltaXQoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJu
IGZhbHNlOwotfQotCi1ib29sIFJlYWx0aW1lT3V0Z29pbmdBdWRpb1NvdXJjZUxpYldlYlJUQzo6
aXNSZWFjaGluZ0J1ZmZlcmVkQXVkaW9EYXRhTG93TGltaXQoKQotewotICAgIG5vdEltcGxlbWVu
dGVkKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIFJlYWx0aW1lT3V0Z29pbmdBdWRp
b1NvdXJjZUxpYldlYlJUQzo6aGFzQnVmZmVyZWRFbm91Z2hEYXRhKCkKLXsKLSAgICBub3RJbXBs
ZW1lbnRlZCgpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQotCi0jZW5kaWYgLy8gVVNFKExJQldFQlJUQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZU91dGdvaW5nQXVkaW9Tb3Vy
Y2VMaWJXZWJSVEMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJl
YW1lci9SZWFsdGltZU91dGdvaW5nQXVkaW9Tb3VyY2VMaWJXZWJSVEMuaApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggNTkyM2Q2MjY4YjNhNGFjYTA2MjUyMGYyNGM1MjM5OWY2YTdkNzNh
Yy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVPdXRnb2luZ0F1
ZGlvU291cmNlTGliV2ViUlRDLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2MiArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDE3IElnYWxpYSBTLkwKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICog
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAq
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAq
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKLSAqIGFpbnQgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIFVTRShM
SUJXRUJSVEMpCi0KLSNpbmNsdWRlICJHU3RyZWFtZXJDb21tb24uaCIKLSNpbmNsdWRlICJSZWFs
dGltZU91dGdvaW5nQXVkaW9Tb3VyY2UuaCIKLQotI2luY2x1ZGUgPGdzdC9hdWRpby9hdWRpby5o
PgotI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3Mg
UmVhbHRpbWVPdXRnb2luZ0F1ZGlvU291cmNlTGliV2ViUlRDIGZpbmFsIDogcHVibGljIFJlYWx0
aW1lT3V0Z29pbmdBdWRpb1NvdXJjZSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxSZWFsdGlt
ZU91dGdvaW5nQXVkaW9Tb3VyY2VMaWJXZWJSVEM+IGNyZWF0ZShSZWY8TWVkaWFTdHJlYW1UcmFj
a1ByaXZhdGU+JiYgYXVkaW9UcmFja1ByaXZhdGUpCi0gICAgewotICAgICAgICByZXR1cm4gYWRv
cHRSZWYoKm5ldyBSZWFsdGltZU91dGdvaW5nQXVkaW9Tb3VyY2VMaWJXZWJSVEMoV1RGTW92ZShh
dWRpb1RyYWNrUHJpdmF0ZSkpKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgZXhwbGljaXQgUmVh
bHRpbWVPdXRnb2luZ0F1ZGlvU291cmNlTGliV2ViUlRDKFJlZjxNZWRpYVN0cmVhbVRyYWNrUHJp
dmF0ZT4mJik7Ci0gICAgflJlYWx0aW1lT3V0Z29pbmdBdWRpb1NvdXJjZUxpYldlYlJUQygpOwot
Ci0gICAgdm9pZCBhdWRpb1NhbXBsZXNBdmFpbGFibGUoY29uc3QgTWVkaWFUaW1lJiwgY29uc3Qg
UGxhdGZvcm1BdWRpb0RhdGEmLCBjb25zdCBBdWRpb1N0cmVhbURlc2NyaXB0aW9uJiwgc2l6ZV90
KSBmaW5hbDsKLQotICAgIGJvb2wgaXNSZWFjaGluZ0J1ZmZlcmVkQXVkaW9EYXRhSGlnaExpbWl0
KCkgZmluYWw7Ci0gICAgYm9vbCBpc1JlYWNoaW5nQnVmZmVyZWRBdWRpb0RhdGFMb3dMaW1pdCgp
IGZpbmFsOwotICAgIGJvb2wgaGFzQnVmZmVyZWRFbm91Z2hEYXRhKCkgZmluYWw7Ci0KLSAgICB2
b2lkIHB1bGxBdWRpb0RhdGEoKTsKLQotICAgIEdVbmlxdWVQdHI8R3N0QXVkaW9Db252ZXJ0ZXI+
IG1fc2FtcGxlQ29udmVydGVyOwotICAgIEdzdEF1ZGlvSW5mbyBtX2lucHV0U3RyZWFtRGVzY3Jp
cHRpb247Ci0gICAgR3N0QXVkaW9JbmZvIG1fb3V0cHV0U3RyZWFtRGVzY3JpcHRpb247Ci0KLSAg
ICBMb2NrIG1fYWRhcHRlckxvY2s7Ci0gICAgR1JlZlB0cjxHc3RBZGFwdGVyPiBtX2FkYXB0ZXIg
V1RGX0dVQVJERURfQllfTE9DSyhtX2FkYXB0ZXJMb2NrKTsKLSAgICBWZWN0b3I8dWludDhfdD4g
bV9hdWRpb0J1ZmZlcjsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8v
IFVTRShMSUJXRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRp
YXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlTGliV2ViUlRDLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGlt
ZU91dGdvaW5nVmlkZW9Tb3VyY2VMaWJXZWJSVEMuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCBjMTI0ZDRiMzQ1ZmFjNWM2OGIxNGY4ZjZhNTg5NDhkZTY4ZWVjYzhjLi4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VM
aWJXZWJSVEMuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsOTQgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxNyBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCwgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSByZXF1aXJlZCB0byBiZSBtZXQ6Ci0gKgotICog
MS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCi0g
KiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgotICogU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIKLSAqIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0gKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIFVTRShMSUJX
RUJSVEMpICYmIFVTRShHU1RSRUFNRVIpCi0jaW5jbHVkZSAiUmVhbHRpbWVPdXRnb2luZ1ZpZGVv
U291cmNlTGliV2ViUlRDLmgiCi0KLSNpbmNsdWRlICJHU3RyZWFtZXJWaWRlb0ZyYW1lTGliV2Vi
UlRDLmgiCi0jaW5jbHVkZSAiTWVkaWFTYW1wbGVHU3RyZWFtZXIuaCIKLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotCi1SZWY8UmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlPiBSZWFsdGltZU91dGdv
aW5nVmlkZW9Tb3VyY2U6OmNyZWF0ZShSZWY8TWVkaWFTdHJlYW1UcmFja1ByaXZhdGU+JiYgdmlk
ZW9Tb3VyY2UpCi17Ci0gICAgcmV0dXJuIFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZUxpYldl
YlJUQzo6Y3JlYXRlKFdURk1vdmUodmlkZW9Tb3VyY2UpKTsKLX0KLQotUmVmPFJlYWx0aW1lT3V0
Z29pbmdWaWRlb1NvdXJjZUxpYldlYlJUQz4gUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlTGli
V2ViUlRDOjpjcmVhdGUoUmVmPE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlPiYmIHZpZGVvU291cmNl
KQotewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJj
ZUxpYldlYlJUQyhXVEZNb3ZlKHZpZGVvU291cmNlKSkpOwotfQotCi1SZWFsdGltZU91dGdvaW5n
VmlkZW9Tb3VyY2VMaWJXZWJSVEM6OlJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZUxpYldlYlJU
QyhSZWY8TWVkaWFTdHJlYW1UcmFja1ByaXZhdGU+JiYgdmlkZW9Tb3VyY2UpCi0gICAgOiBSZWFs
dGltZU91dGdvaW5nVmlkZW9Tb3VyY2UoV1RGTW92ZSh2aWRlb1NvdXJjZSkpCi17Ci19Ci0KLXZv
aWQgUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlTGliV2ViUlRDOjp2aWRlb1NhbXBsZUF2YWls
YWJsZShNZWRpYVNhbXBsZSYgc2FtcGxlKQotewotICAgIHN3aXRjaCAoc2FtcGxlLnZpZGVvUm90
YXRpb24oKSkgewotICAgIGNhc2UgTWVkaWFTYW1wbGU6OlZpZGVvUm90YXRpb246Ok5vbmU6Ci0g
ICAgICAgIG1fY3VycmVudFJvdGF0aW9uID0gd2VicnRjOjprVmlkZW9Sb3RhdGlvbl8wOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIE1lZGlhU2FtcGxlOjpWaWRlb1JvdGF0aW9uOjpVcHNpZGVE
b3duOgotICAgICAgICBtX2N1cnJlbnRSb3RhdGlvbiA9IHdlYnJ0Yzo6a1ZpZGVvUm90YXRpb25f
MTgwOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIE1lZGlhU2FtcGxlOjpWaWRlb1JvdGF0aW9u
OjpSaWdodDoKLSAgICAgICAgbV9jdXJyZW50Um90YXRpb24gPSB3ZWJydGM6OmtWaWRlb1JvdGF0
aW9uXzkwOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIE1lZGlhU2FtcGxlOjpWaWRlb1JvdGF0
aW9uOjpMZWZ0OgotICAgICAgICBtX2N1cnJlbnRSb3RhdGlvbiA9IHdlYnJ0Yzo6a1ZpZGVvUm90
YXRpb25fMjcwOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBBU1NFUlQoc2FtcGxlLnBs
YXRmb3JtU2FtcGxlKCkudHlwZSA9PSBQbGF0Zm9ybVNhbXBsZTo6R1N0cmVhbWVyU2FtcGxlVHlw
ZSk7Ci0gICAgYXV0byYgbWVkaWFTYW1wbGUgPSBzdGF0aWNfY2FzdDxNZWRpYVNhbXBsZUdTdHJl
YW1lciY+KHNhbXBsZSk7Ci0gICAgYXV0byBmcmFtZUJ1ZmZlciA9IEdTdHJlYW1lclZpZGVvRnJh
bWVMaWJXZWJSVEM6OmNyZWF0ZShnc3Rfc2FtcGxlX3JlZihtZWRpYVNhbXBsZS5wbGF0Zm9ybVNh
bXBsZSgpLnNhbXBsZS5nc3RTYW1wbGUpKTsKLQotICAgIHNlbmRGcmFtZShXVEZNb3ZlKGZyYW1l
QnVmZmVyKSk7Ci19Ci0KLXJ0Yzo6c2NvcGVkX3JlZnB0cjx3ZWJydGM6OlZpZGVvRnJhbWVCdWZm
ZXI+IFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZUxpYldlYlJUQzo6Y3JlYXRlQmxhY2tGcmFt
ZShzaXplX3QgIHdpZHRoLCBzaXplX3QgIGhlaWdodCkKLXsKLSAgICBHc3RWaWRlb0luZm8gaW5m
bzsKLQotICAgIGdzdF92aWRlb19pbmZvX3NldF9mb3JtYXQoJmluZm8sIEdTVF9WSURFT19GT1JN
QVRfUkdCLCB3aWR0aCwgaGVpZ2h0KTsKLQotICAgIEdSZWZQdHI8R3N0QnVmZmVyPiBidWZmZXIg
PSBhZG9wdEdSZWYoZ3N0X2J1ZmZlcl9uZXdfYWxsb2NhdGUobnVsbHB0ciwgaW5mby5zaXplLCBu
dWxscHRyKSk7Ci0gICAgR1JlZlB0cjxHc3RDYXBzPiBjYXBzID0gYWRvcHRHUmVmKGdzdF92aWRl
b19pbmZvX3RvX2NhcHMoJmluZm8pKTsKLQotICAgIEdzdE1hcHBlZEJ1ZmZlciBtYXAoYnVmZmVy
LmdldCgpLCBHU1RfTUFQX1dSSVRFKTsKLSAgICBtZW1zZXQobWFwLmRhdGEoKSwgMCwgaW5mby5z
aXplKTsKLQotICAgIHJldHVybiBHU3RyZWFtZXJWaWRlb0ZyYW1lTGliV2ViUlRDOjpjcmVhdGUo
Z3N0X3NhbXBsZV9uZXcoYnVmZmVyLmdldCgpLCBjYXBzLmdldCgpLCBOVUxMLCBOVUxMKSk7Ci19
Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIFVTRShMSUJXRUJSVEMpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIv
UmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlTGliV2ViUlRDLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNl
TGliV2ViUlRDLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwYzUwOWExYmMwODFm
NTk0NjAyYWMwMjc3NDhmZGYxMmI1MTMwODQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0
cmVhbWVyL1JlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZUxpYldlYlJUQy5oCisrKyAvZGV2L251
bGwKQEAgLTEsNTEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBJZ2FsaWEgUy5M
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSByZXF1aXJlZCB0byBiZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCi0gKiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUgotICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKLSAqIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksCi0gKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJh
Z21hIG9uY2UKLQotI2lmIFVTRShMSUJXRUJSVEMpICYmIFVTRShHU1RSRUFNRVIpCi0KLSNpbmNs
dWRlICJSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2UuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotCi1jbGFzcyBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VMaWJXZWJSVEMgZmluYWwgOiBw
dWJsaWMgUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMg
UmVmPFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZUxpYldlYlJUQz4gY3JlYXRlKFJlZjxNZWRp
YVN0cmVhbVRyYWNrUHJpdmF0ZT4mJik7Ci0KLXByaXZhdGU6Ci0gICAgZXhwbGljaXQgUmVhbHRp
bWVPdXRnb2luZ1ZpZGVvU291cmNlTGliV2ViUlRDKFJlZjxNZWRpYVN0cmVhbVRyYWNrUHJpdmF0
ZT4mJik7Ci0KLSAgICBydGM6OnNjb3BlZF9yZWZwdHI8d2VicnRjOjpWaWRlb0ZyYW1lQnVmZmVy
PiBjcmVhdGVCbGFja0ZyYW1lKHNpemVfdCwgc2l6ZV90KSBmaW5hbDsKLQotICAgIC8vIFJlYWx0
aW1lTWVkaWFTb3VyY2U6OlZpZGVvU2FtcGxlT2JzZXJ2ZXIgQVBJCi0gICAgdm9pZCB2aWRlb1Nh
bXBsZUF2YWlsYWJsZShNZWRpYVNhbXBsZSYpIGZpbmFsOwotfTsKLQotfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQotCi0jZW5kaWYgLy8gVVNFKExJQldFQlJUQykKLQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbGlid2VicnRjL0dTdHJlYW1lclZpZGVvQ29t
bW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2xpYndlYnJ0Yy9H
U3RyZWFtZXJWaWRlb0NvbW1vbi5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU0
NjNkYmI1NjE3M2ViNzRiZmU1NGE4OTY5YmQ0ZmZmOTgzNDQxN2IuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVk
aWFzdHJlYW0vbGlid2VicnRjL0dTdHJlYW1lclZpZGVvQ29tbW9uLmNwcAorKysgL2Rldi9udWxs
CkBAIC0xLDYxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjAgTWV0cm9sb2dpY2Fs
IEdyb3VwIEIuVi4KLSAqIENvcHlyaWdodCAoQykgMjAyMCBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0g
KiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICog
YWludCB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShWSURFTykgJiYgRU5B
QkxFKE1FRElBX1NUUkVBTSkgJiYgVVNFKExJQldFQlJUQykgJiYgVVNFKEdTVFJFQU1FUikKLSNp
bmNsdWRlICJHU3RyZWFtZXJWaWRlb0NvbW1vbi5oIgotCi0jaW5jbHVkZSAiYWJzbC90eXBlcy9v
cHRpb25hbC5oIgotI2luY2x1ZGUgIndlYnJ0Yy9tZWRpYS9iYXNlL2NvZGVjLmgiCi0jaW5jbHVk
ZSAid2VicnRjL21lZGlhL2Jhc2UvaDI2NF9wcm9maWxlX2xldmVsX2lkLmgiCi0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLQotc3RhdGljIHdlYnJ0Yzo6U2RwVmlkZW9Gb3JtYXQgY3JlYXRlSDI2NEZv
cm1hdCh3ZWJydGM6OkgyNjQ6OlByb2ZpbGUgcHJvZmlsZSwgd2VicnRjOjpIMjY0OjpMZXZlbCBs
ZXZlbCwgY29uc3Qgc3RkOjpzdHJpbmcmIHBhY2tldGl6YXRpb25Nb2RlKQotewotICAgIGNvbnN0
IGF1dG8gcHJvZmlsZVN0cmluZyA9IHdlYnJ0Yzo6SDI2NDo6UHJvZmlsZUxldmVsSWRUb1N0cmlu
Zyh3ZWJydGM6OkgyNjQ6OlByb2ZpbGVMZXZlbElkKHByb2ZpbGUsIGxldmVsKSk7Ci0KLSAgICBy
ZXR1cm4gd2VicnRjOjpTZHBWaWRlb0Zvcm1hdChjcmlja2V0OjprSDI2NENvZGVjTmFtZSwKLSAg
ICAgICAgeyB7IGNyaWNrZXQ6OmtIMjY0Rm10cFByb2ZpbGVMZXZlbElkLCAqcHJvZmlsZVN0cmlu
ZyB9LAotICAgICAgICAgICAgeyBjcmlja2V0OjprSDI2NEZtdHBMZXZlbEFzeW1tZXRyeUFsbG93
ZWQsICIxIiB9LAotICAgICAgICAgICAgeyBjcmlja2V0OjprSDI2NEZtdHBQYWNrZXRpemF0aW9u
TW9kZSwgcGFja2V0aXphdGlvbk1vZGUgfSB9KTsKLX0KLQotc3RkOjp2ZWN0b3I8d2VicnRjOjpT
ZHBWaWRlb0Zvcm1hdD4gc3VwcG9ydGVkSDI2NEZvcm1hdHMoKQotewotICAgIC8vIEBUT0RPIENy
ZWF0ZSBmcm9tIGVuY29kZXIgc3JjIHBhZCBjYXBzIHRlbXBsYXRlCi0gICAgLy8KLSAgICAvLyBX
ZSBvbmx5IHN1cHBvcnQgZW5jb2RpbmcgQ29uc3RyYWluZWQgQmFzZWxpbmUgUHJvZmlsZSAoQ0JQ
KSwgYnV0IHRoZSBkZWNvZGVyIHN1cHBvcnRzIG1vcmUKLSAgICAvLyBwcm9maWxlcy4gV2UgY2Fu
IGxpc3QgYWxsIHByb2ZpbGVzIGhlcmUgdGhhdCBhcmUgc3VwcG9ydGVkIGJ5IHRoZSBkZWNvZGVy
IGFuZCB0aGF0IGFyZSBhbHNvCi0gICAgLy8gc3VwZXJzZXRzIG9mIENCUCwgaS5lLiB0aGUgZGVj
b2RlciBmb3IgdGhhdCBwcm9maWxlIGlzIHJlcXVpcmVkIHRvIGJlIGFibGUgdG8gZGVjb2RlCi0g
ICAgLy8gQ0JQLiBUaGlzIG1lYW5zIHdlIGNhbiBlbmNvZGUgYW5kIHNlbmQgQ0JQIGV2ZW4gdGhv
dWdoIHdlIG5lZ290aWF0ZWQgYSBwb3RlbnRpYWxseSBoaWdoZXIKLSAgICAvLyBwcm9maWxlLiBT
ZWUgdGhlIEgyNjQgc3BlYyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KLSAgICAvLwotICAgIC8vIFdl
IHN1cHBvcnQgYm90aCBwYWNrZXRpemF0aW9uIG1vZGVzIDAgKG1hbmRhdG9yeSkgYW5kIDEgKG9w
dGlvbmFsLCBwcmVmZXJyZWQpLgotICAgIHJldHVybiB7IGNyZWF0ZUgyNjRGb3JtYXQod2VicnRj
OjpIMjY0OjprUHJvZmlsZUJhc2VsaW5lLCB3ZWJydGM6OkgyNjQ6OmtMZXZlbDNfMSwgIjEiKSwK
LSAgICAgICAgY3JlYXRlSDI2NEZvcm1hdCh3ZWJydGM6OkgyNjQ6OmtQcm9maWxlQmFzZWxpbmUs
IHdlYnJ0Yzo6SDI2NDo6a0xldmVsM18xLCAiMCIpLAotICAgICAgICBjcmVhdGVIMjY0Rm9ybWF0
KHdlYnJ0Yzo6SDI2NDo6a1Byb2ZpbGVDb25zdHJhaW5lZEJhc2VsaW5lLCB3ZWJydGM6OkgyNjQ6
OmtMZXZlbDNfMSwgIjEiKSwKLSAgICAgICAgY3JlYXRlSDI2NEZvcm1hdCh3ZWJydGM6OkgyNjQ6
OmtQcm9maWxlQ29uc3RyYWluZWRCYXNlbGluZSwgd2VicnRjOjpIMjY0OjprTGV2ZWwzXzEsICIw
IiksIH07Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9saWJ3ZWJydGMvR1N0cmVhbWVy
VmlkZW9Db21tb24uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2xpYndl
YnJ0Yy9HU3RyZWFtZXJWaWRlb0NvbW1vbi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCBiNjVmMTdiODBhMmQ0YjkyNGJiMmI4NGEyZDQxNDFhOTJjMTY2NmY4Li4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21lZGlhc3RyZWFtL2xpYndlYnJ0Yy9HU3RyZWFtZXJWaWRlb0NvbW1vbi5oCisrKyAvZGV2L251
bGwKQEAgLTEsMzUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAyMCBNZXRyb2xvZ2lj
YWwgR3JvdXAgQi5WLgotICogQ29weXJpZ2h0IChDKSAyMDIwIElnYWxpYSBTLkwuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoK
LSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0g
KiBhaW50IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUoVklERU8pICYmIEVOQUJMRShN
RURJQV9TVFJFQU0pICYmIFVTRShMSUJXRUJSVEMpICYmIFVTRShHU1RSRUFNRVIpCi0KLSNpbmNs
dWRlICJMaWJXZWJSVENNYWNyb3MuaCIKLSNpbmNsdWRlICJhcGkvdmlkZW9fY29kZWNzL3NkcF92
aWRlb19mb3JtYXQuaCIKLSNpbmNsdWRlIDx2ZWN0b3I+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsK
LQotc3RkOjp2ZWN0b3I8d2VicnRjOjpTZHBWaWRlb0Zvcm1hdD4gc3VwcG9ydGVkSDI2NEZvcm1h
dHMoKTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2xpYndlYnJ0Yy9HU3RyZWFtZXJWaWRl
b0RlY29kZXJGYWN0b3J5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFt
L2xpYndlYnJ0Yy9HU3RyZWFtZXJWaWRlb0RlY29kZXJGYWN0b3J5LmNwcApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggOWU3ZDU1Yjg0YjgyMTY1YTNkZjAxNjc3ZDczN2VjMDM1ZGE4NDA2
Ni4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9saWJ3ZWJydGMvR1N0cmVhbWVyVmlkZW9EZWNv
ZGVyRmFjdG9yeS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw0NTIgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxOCwyMDIwIE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTgsMjAyMCBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
Ci0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWludCB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRl
ICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShWSURFTykgJiYgRU5BQkxFKE1FRElBX1NUUkVBTSkg
JiYgVVNFKExJQldFQlJUQykgJiYgVVNFKEdTVFJFQU1FUikKLSNpbmNsdWRlICJHU3RyZWFtZXJW
aWRlb0RlY29kZXJGYWN0b3J5LmgiCi0KLSNpbmNsdWRlICJHU3RyZWFtZXJWaWRlb0NvbW1vbi5o
IgotI2luY2x1ZGUgIkdTdHJlYW1lclZpZGVvRnJhbWVMaWJXZWJSVEMuaCIKLSNpbmNsdWRlICJ3
ZWJydGMvbW9kdWxlcy92aWRlb19jb2RpbmcvY29kZWNzL2gyNjQvaW5jbHVkZS9oMjY0LmgiCi0j
aW5jbHVkZSAid2VicnRjL21vZHVsZXMvdmlkZW9fY29kaW5nL2NvZGVjcy92cDgvaW5jbHVkZS92
cDguaCIKLSNpbmNsdWRlICJ3ZWJydGMvbW9kdWxlcy92aWRlb19jb2RpbmcvY29kZWNzL3ZwOC9s
aWJ2cHhfdnA4X2RlY29kZXIuaCIKLSNpbmNsdWRlICJ3ZWJydGMvbW9kdWxlcy92aWRlb19jb2Rp
bmcvaW5jbHVkZS92aWRlb19jb2RlY19pbnRlcmZhY2UuaCIKLSNpbmNsdWRlIDxnc3QvYXBwL2dz
dGFwcHNpbmsuaD4KLSNpbmNsdWRlIDxnc3QvYXBwL2dzdGFwcHNyYy5oPgotI2luY2x1ZGUgPGdz
dC92aWRlby92aWRlby5oPgotI2luY2x1ZGUgPG11dGV4PgotI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+
Ci0jaW5jbHVkZSA8d3RmL1N0ZE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9nbGliL1J1bkxvb3BTb3Vy
Y2VQcmlvcml0eS5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1HU1RfREVC
VUdfQ0FURUdPUlkod2Via2l0X3dlYnJ0Y2RlY19kZWJ1Zyk7Ci0jZGVmaW5lIEdTVF9DQVRfREVG
QVVMVCB3ZWJraXRfd2VicnRjZGVjX2RlYnVnCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotdHlw
ZWRlZiBzdHJ1Y3QgewotICAgIHVpbnQ2NF90IHRpbWVzdGFtcDsKLSAgICBpbnQ2NF90IHJlbmRl
clRpbWVNczsKLX0gSW5wdXRUaW1lc3RhbXBzOwotCi1jbGFzcyBHU3RyZWFtZXJWaWRlb0RlY29k
ZXIgOiBwdWJsaWMgd2VicnRjOjpWaWRlb0RlY29kZXIgewotcHVibGljOgotICAgIEdTdHJlYW1l
clZpZGVvRGVjb2RlcigpCi0gICAgICAgIDogbV9waWN0dXJlSWQoMCkKLSAgICAgICAgLCBtX3dp
ZHRoKDApCi0gICAgICAgICwgbV9oZWlnaHQoMCkKLSAgICAgICAgLCBtX3JlcXVpcmVQYXJzZShm
YWxzZSkKLSAgICAgICAgLCBtX25lZWRzS2V5ZnJhbWUodHJ1ZSkKLSAgICAgICAgLCBtX2ZpcnN0
QnVmZmVyUHRzKEdTVF9DTE9DS19USU1FX05PTkUpCi0gICAgICAgICwgbV9maXJzdEJ1ZmZlckR0
cyhHU1RfQ0xPQ0tfVElNRV9OT05FKQotICAgIHsKLSAgICB9Ci0KLSAgICBzdGF0aWMgdm9pZCBk
ZWNvZGViaW5QYWRBZGRlZENiKEdzdEVsZW1lbnQqLCBHc3RQYWQqIHNyY3BhZCwgR3N0UGFkKiBz
aW5rcGFkKQotICAgIHsKLSAgICAgICAgR1NUX0lORk9fT0JKRUNUKHNyY3BhZCwgImNvbm5lY3Rp
bmcgcGFkIHdpdGggJSIgR1NUX1BUUl9GT1JNQVQsIHNpbmtwYWQpOwotICAgICAgICBpZiAoZ3N0
X3BhZF9saW5rKHNyY3BhZCwgc2lua3BhZCkgIT0gR1NUX1BBRF9MSU5LX09LKQotICAgICAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQotCi0gICAgR3N0RWxlbWVudCogcGlwZWxp
bmUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fcGlwZWxpbmUuZ2V0KCk7Ci0gICAgfQotCi0g
ICAgR3N0RWxlbWVudCogbWFrZUVsZW1lbnQoY29uc3QgZ2NoYXIqIGZhY3RvcnlOYW1lKQotICAg
IHsKLSAgICAgICAgR1VuaXF1ZVB0cjxjaGFyPiBuYW1lKGdfc3RyZHVwX3ByaW50ZigiJXNfZGVj
XyVzXyVwIiwgTmFtZSgpLCBmYWN0b3J5TmFtZSwgdGhpcykpOwotCi0gICAgICAgIHJldHVybiBt
YWtlR1N0cmVhbWVyRWxlbWVudChmYWN0b3J5TmFtZSwgbmFtZS5nZXQoKSk7Ci0gICAgfQotCi0g
ICAgdm9pZCBoYW5kbGVFcnJvcihHRXJyb3IqIGVycm9yKQotICAgIHsKLSAgICAgICAgaWYgKCFn
X2Vycm9yX21hdGNoZXMoZXJyb3IsIEdTVF9TVFJFQU1fRVJST1IsIEdTVF9TVFJFQU1fRVJST1Jf
REVDT0RFKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgR1NUX0lORk9fT0JKRUNUKHBp
cGVsaW5lKCksICItLT4gbmVlZHMga2V5ZnJhbWUgKCVzKSIsIGVycm9yLT5tZXNzYWdlKTsKLSAg
ICAgICAgbV9uZWVkc0tleWZyYW1lID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICBpbnQzMl90IEluaXRE
ZWNvZGUoY29uc3Qgd2VicnRjOjpWaWRlb0NvZGVjKiBjb2RlY1NldHRpbmdzLCBpbnQzMl90KSBv
dmVycmlkZQotICAgIHsKLSAgICAgICAgbV9zcmMgPSBtYWtlRWxlbWVudCgiYXBwc3JjIik7Ci0K
LSAgICAgICAgR1JlZlB0cjxHc3RDYXBzPiBjYXBzID0gbnVsbHB0cjsKLSAgICAgICAgYXV0byBj
YXBzZmlsdGVyID0gQ3JlYXRlRmlsdGVyKCk7Ci0gICAgICAgIGF1dG8gZGVjb2RlciA9IG1ha2VF
bGVtZW50KCJkZWNvZGViaW4iKTsKLQotICAgICAgICBpZiAoY29kZWNTZXR0aW5ncykgewotICAg
ICAgICAgICAgbV93aWR0aCA9IGNvZGVjU2V0dGluZ3MtPndpZHRoOwotICAgICAgICAgICAgbV9o
ZWlnaHQgPSBjb2RlY1NldHRpbmdzLT5oZWlnaHQ7Ci0gICAgICAgIH0KLQotICAgICAgICBtX3Bp
cGVsaW5lID0gbWFrZUVsZW1lbnQoInBpcGVsaW5lIik7Ci0gICAgICAgIGNvbm5lY3RTaW1wbGVC
dXNNZXNzYWdlQ2FsbGJhY2sobV9waXBlbGluZS5nZXQoKSk7Ci0KLSAgICAgICAgYXV0byBzaW5r
cGFkID0gYWRvcHRHUmVmKGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkKGNhcHNmaWx0ZXIsICJz
aW5rIikpOwotICAgICAgICBnX3NpZ25hbF9jb25uZWN0KGRlY29kZXIsICJwYWQtYWRkZWQiLCBH
X0NBTExCQUNLKGRlY29kZWJpblBhZEFkZGVkQ2IpLCBzaW5rcGFkLmdldCgpKTsKLSAgICAgICAg
Ly8gTWFrZSB0aGUgZGVjb2RlciBvdXRwdXQgInBhcnNlZCIgZnJhbWVzIG9ubHkgYW5kIGxldCB0
aGUgbWFpbiBkZWNvZGViaW4KLSAgICAgICAgLy8gZG8gdGhlIHJlYWwgZGVjb2RpbmcuIFRoaXMg
YWxsb3dzIHVzIHRvIGhhdmUgb3B0aW1pemVkIGRlY29kaW5nL3JlbmRlcmluZwotICAgICAgICAv
LyBoYXBwZW5pbmcgaW4gdGhlIG1haW4gcGlwZWxpbmUuCi0gICAgICAgIGlmIChtX3JlcXVpcmVQ
YXJzZSkgewotICAgICAgICAgICAgY2FwcyA9IGdzdF9jYXBzX25ld19zaW1wbGUoQ2FwcygpLCAi
cGFyc2VkIiwgR19UWVBFX0JPT0xFQU4sIFRSVUUsIG51bGxwdHIpOwotCi0gICAgICAgICAgICBh
dXRvIGJ1cyA9IGFkb3B0R1JlZihnc3RfcGlwZWxpbmVfZ2V0X2J1cyhHU1RfUElQRUxJTkUobV9w
aXBlbGluZS5nZXQoKSkpKTsKLSAgICAgICAgICAgIGdzdF9idXNfZW5hYmxlX3N5bmNfbWVzc2Fn
ZV9lbWlzc2lvbihidXMuZ2V0KCkpOwotICAgICAgICAgICAgZ19zaWduYWxfY29ubmVjdF9zd2Fw
cGVkKGJ1cy5nZXQoKSwgInN5bmMtbWVzc2FnZTo6d2FybmluZyIsIEdfQ0FMTEJBQ0soK1tdKEdT
dHJlYW1lclZpZGVvRGVjb2RlciogZGVjb2RlciwgR3N0TWVzc2FnZSogbWVzc2FnZSkgewotICAg
ICAgICAgICAgICAgIEdVbmlxdWVPdXRQdHI8R0Vycm9yPiBlcnJvcjsKLSAgICAgICAgICAgICAg
ICBnc3RfbWVzc2FnZV9wYXJzZV93YXJuaW5nKG1lc3NhZ2UsICZlcnJvci5vdXRQdHIoKSwgbnVs
bHB0cik7Ci0gICAgICAgICAgICAgICAgZGVjb2Rlci0+aGFuZGxlRXJyb3IoZXJyb3IuZ2V0KCkp
OwotICAgICAgICAgICAgfSksIHRoaXMpOwotICAgICAgICAgICAgZ19zaWduYWxfY29ubmVjdF9z
d2FwcGVkKGJ1cy5nZXQoKSwgInN5bmMtbWVzc2FnZTo6ZXJyb3IiLCBHX0NBTExCQUNLKCtbXShH
U3RyZWFtZXJWaWRlb0RlY29kZXIqIGRlY29kZXIsIEdzdE1lc3NhZ2UqIG1lc3NhZ2UpIHsKLSAg
ICAgICAgICAgICAgICBHVW5pcXVlT3V0UHRyPEdFcnJvcj4gZXJyb3I7Ci0gICAgICAgICAgICAg
ICAgZ3N0X21lc3NhZ2VfcGFyc2VfZXJyb3IobWVzc2FnZSwgJmVycm9yLm91dFB0cigpLCBudWxs
cHRyKTsKLSAgICAgICAgICAgICAgICBkZWNvZGVyLT5oYW5kbGVFcnJvcihlcnJvci5nZXQoKSk7
Ci0gICAgICAgICAgICB9KSwgdGhpcyk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAv
KiBGSVhNRSAtIEhvdyBjb3VsZCB3ZSBoYW5kbGUgbWlzc2luZyBrZXlmcmFtZXMgY2FzZSB3ZSBk
byBub3QgcGx1ZyBwYXJzZXJzID8gKi8KLSAgICAgICAgICAgIGNhcHMgPSBnc3RfY2Fwc19uZXdf
ZW1wdHlfc2ltcGxlKENhcHMoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgZ19vYmplY3Rfc2V0KGRl
Y29kZXIsICJjYXBzIiwgY2Fwcy5nZXQoKSwgbnVsbHB0cik7Ci0KLSAgICAgICAgbV9zaW5rID0g
bWFrZUVsZW1lbnQoImFwcHNpbmsiKTsKLSAgICAgICAgZ3N0X2FwcF9zaW5rX3NldF9lbWl0X3Np
Z25hbHMoR1NUX0FQUF9TSU5LKG1fc2luayksIHRydWUpOwotICAgICAgICAvLyBUaGlzIGlzIGFu
IGRlY29kZXIsIGV2ZXJ5dGhpbmcgc2hvdWxkIGhhcHBlbiBhcyBmYXN0IGFzIHBvc3NpYmxlIGFu
ZCBub3QKLSAgICAgICAgLy8gYmUgc3luY2VkIG9uIHRoZSBjbG9jay4KLSAgICAgICAgZ19vYmpl
Y3Rfc2V0KG1fc2luaywgInN5bmMiLCBmYWxzZSwgbnVsbHB0cik7Ci0KLSAgICAgICAgZ3N0X2Jp
bl9hZGRfbWFueShHU1RfQklOKHBpcGVsaW5lKCkpLCBtX3NyYywgZGVjb2RlciwgY2Fwc2ZpbHRl
ciwgbV9zaW5rLCBudWxscHRyKTsKLSAgICAgICAgaWYgKCFnc3RfZWxlbWVudF9saW5rKG1fc3Jj
LCBkZWNvZGVyKSkgewotICAgICAgICAgICAgR1NUX0VSUk9SX09CSkVDVChwaXBlbGluZSgpLCAi
Q291bGQgbm90IGxpbmsgc3JjIHRvIGRlY29kZXIuIik7Ci0gICAgICAgICAgICByZXR1cm4gV0VC
UlRDX1ZJREVPX0NPREVDX0VSUk9SOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFnc3RfZWxl
bWVudF9saW5rKGNhcHNmaWx0ZXIsIG1fc2luaykpIHsKLSAgICAgICAgICAgIEdTVF9FUlJPUl9P
QkpFQ1QocGlwZWxpbmUoKSwgIkNvdWxkIG5vdCBsaW5rIGNhcHNmaWx0ZXIgdG8gc2luay4iKTsK
LSAgICAgICAgICAgIHJldHVybiBXRUJSVENfVklERU9fQ09ERUNfRVJST1I7Ci0gICAgICAgIH0K
LQotICAgICAgICBpZiAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlKHBpcGVsaW5lKCksIEdTVF9TVEFU
RV9QTEFZSU5HKSA9PSBHU1RfU1RBVEVfQ0hBTkdFX0ZBSUxVUkUpIHsKLSAgICAgICAgICAgIEdT
VF9FUlJPUl9PQkpFQ1QocGlwZWxpbmUoKSwgIkNvdWxkIG5vdCBzZXQgc3RhdGUgdG8gUExBWUlO
Ry4iKTsKLSAgICAgICAgICAgIHJldHVybiBXRUJSVENfVklERU9fQ09ERUNfRVJST1I7Ci0gICAg
ICAgIH0KLQotICAgICAgICByZXR1cm4gV0VCUlRDX1ZJREVPX0NPREVDX09LOwotICAgIH0KLQot
ICAgIGludDMyX3QgUmVnaXN0ZXJEZWNvZGVDb21wbGV0ZUNhbGxiYWNrKHdlYnJ0Yzo6RGVjb2Rl
ZEltYWdlQ2FsbGJhY2sqIGNhbGxiYWNrKSBvdmVycmlkZQotICAgIHsKLSAgICAgICAgbV9pbWFn
ZVJlYWR5Q2IgPSBjYWxsYmFjazsKLQotICAgICAgICByZXR1cm4gV0VCUlRDX1ZJREVPX0NPREVD
X09LOwotICAgIH0KLQotICAgIHZpcnR1YWwgR3N0RWxlbWVudCogQ3JlYXRlRmlsdGVyKCkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBtYWtlRWxlbWVudCgiaWRlbnRpdHkiKTsKLSAgICB9Ci0KLSAg
ICBpbnQzMl90IFJlbGVhc2UoKSBmaW5hbAotICAgIHsKLSAgICAgICAgaWYgKG1fcGlwZWxpbmUp
IHsKLSAgICAgICAgICAgIGRpc2Nvbm5lY3RTaW1wbGVCdXNNZXNzYWdlQ2FsbGJhY2sobV9waXBl
bGluZS5nZXQoKSk7Ci0gICAgICAgICAgICBhdXRvIGJ1cyA9IGFkb3B0R1JlZihnc3RfcGlwZWxp
bmVfZ2V0X2J1cyhHU1RfUElQRUxJTkUobV9waXBlbGluZS5nZXQoKSkpKTsKLSAgICAgICAgICAg
IGdzdF9idXNfc2V0X3N5bmNfaGFuZGxlcihidXMuZ2V0KCksIG51bGxwdHIsIG51bGxwdHIsIG51
bGxwdHIpOwotICAgICAgICAgICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlKG1fcGlwZWxpbmUuZ2V0
KCksIEdTVF9TVEFURV9OVUxMKTsKLSAgICAgICAgICAgIG1fc3JjID0gbnVsbHB0cjsKLSAgICAg
ICAgICAgIG1fc2luayA9IG51bGxwdHI7Ci0gICAgICAgICAgICBtX3BpcGVsaW5lID0gbnVsbHB0
cjsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBXRUJSVENfVklERU9fQ09ERUNfT0s7Ci0g
ICAgfQotCi0gICAgaW50MzJfdCBEZWNvZGUoY29uc3Qgd2VicnRjOjpFbmNvZGVkSW1hZ2UmIGlu
cHV0SW1hZ2UsCi0gICAgICAgIGJvb2wsCi0gICAgICAgIGludDY0X3QgcmVuZGVyVGltZU1zKSBv
dmVycmlkZQotICAgIHsKLSAgICAgICAgaWYgKG1fbmVlZHNLZXlmcmFtZSkgewotICAgICAgICAg
ICAgaWYgKGlucHV0SW1hZ2UuX2ZyYW1lVHlwZSAhPSB3ZWJydGM6OlZpZGVvRnJhbWVUeXBlOjpr
VmlkZW9GcmFtZUtleSkgewotICAgICAgICAgICAgICAgIEdTVF9FUlJPUigiV2FpdGluZyBmb3Ig
a2V5ZnJhbWUgYnV0IGdvdCBhIGRlbHRhIHVuaXQuLi4gYXNraW5nIGZvciBrZXlmcmFtZSIpOwot
ICAgICAgICAgICAgICAgIHJldHVybiBXRUJSVENfVklERU9fQ09ERUNfRVJST1I7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBtX25lZWRzS2V5ZnJhbWUgPSBmYWxzZTsKLSAgICAgICAgfQot
Ci0gICAgICAgIGlmICghbV9zcmMpIHsKLSAgICAgICAgICAgIEdTVF9FUlJPUigiTm8gc291cmNl
IHNldCwgY2FuJ3QgZGVjb2RlLiIpOwotCi0gICAgICAgICAgICByZXR1cm4gV0VCUlRDX1ZJREVP
X0NPREVDX1VOSU5JVElBTElaRUQ7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIUdTVF9DTE9D
S19USU1FX0lTX1ZBTElEKG1fZmlyc3RCdWZmZXJQdHMpKSB7Ci0gICAgICAgICAgICBHUmVmUHRy
PEdzdFBhZD4gc3JjcGFkID0gYWRvcHRHUmVmKGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkKG1f
c3JjLCAic3JjIikpOwotICAgICAgICAgICAgbV9maXJzdEJ1ZmZlclB0cyA9IChzdGF0aWNfY2Fz
dDxndWludDY0PihyZW5kZXJUaW1lTXMpKSAqIEdTVF9NU0VDT05EOwotICAgICAgICAgICAgbV9m
aXJzdEJ1ZmZlckR0cyA9IChzdGF0aWNfY2FzdDxndWludDY0PihpbnB1dEltYWdlLlRpbWVzdGFt
cCgpKSkgKiBHU1RfTVNFQ09ORDsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIEZJWE1FLSBVc2Ug
YSBHc3RCdWZmZXJQb29sLgotICAgICAgICBhdXRvIGJ1ZmZlciA9IGFkb3B0R1JlZihnc3RCdWZm
ZXJOZXdXcmFwcGVkRmFzdChmYXN0TWVtRHVwKGlucHV0SW1hZ2UuZGF0YSgpLCBpbnB1dEltYWdl
LnNpemUoKSksCi0gICAgICAgICAgICBpbnB1dEltYWdlLnNpemUoKSkpOwotICAgICAgICBHU1Rf
QlVGRkVSX0RUUyhidWZmZXIuZ2V0KCkpID0gKHN0YXRpY19jYXN0PGd1aW50NjQ+KGlucHV0SW1h
Z2UuVGltZXN0YW1wKCkpICogR1NUX01TRUNPTkQpIC0gbV9maXJzdEJ1ZmZlckR0czsKLSAgICAg
ICAgR1NUX0JVRkZFUl9QVFMoYnVmZmVyLmdldCgpKSA9IChzdGF0aWNfY2FzdDxndWludDY0Pihy
ZW5kZXJUaW1lTXMpICogR1NUX01TRUNPTkQpIC0gbV9maXJzdEJ1ZmZlclB0czsKLSAgICAgICAg
SW5wdXRUaW1lc3RhbXBzIHRpbWVzdGFtcHMgPSB7IGlucHV0SW1hZ2UuVGltZXN0YW1wKCksIHJl
bmRlclRpbWVNcyB9OwotICAgICAgICBtX2R0c1B0c01hcFtHU1RfQlVGRkVSX1BUUyhidWZmZXIu
Z2V0KCkpXSA9IHRpbWVzdGFtcHM7Ci0KLSAgICAgICAgR1NUX0xPR19PQkpFQ1QocGlwZWxpbmUo
KSwgIiUiIEdfR0lOVDY0X0ZPUk1BVCAiIERlY29kaW5nOiAlIiBHU1RfUFRSX0ZPUk1BVCwgcmVu
ZGVyVGltZU1zLCBidWZmZXIuZ2V0KCkpOwotICAgICAgICBhdXRvIHNhbXBsZSA9IGFkb3B0R1Jl
Zihnc3Rfc2FtcGxlX25ldyhidWZmZXIuZ2V0KCksIEdldENhcHNGb3JGcmFtZShpbnB1dEltYWdl
KSwgbnVsbHB0ciwgbnVsbHB0cikpOwotICAgICAgICBzd2l0Y2ggKGdzdF9hcHBfc3JjX3B1c2hf
c2FtcGxlKEdTVF9BUFBfU1JDKG1fc3JjKSwgc2FtcGxlLmdldCgpKSkgewotICAgICAgICBjYXNl
IEdTVF9GTE9XX09LOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgR1NUX0ZMT1df
RkxVU0hJTkc6Ci0gICAgICAgICAgICByZXR1cm4gV0VCUlRDX1ZJREVPX0NPREVDX1VOSU5JVElB
TElaRUQ7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gV0VCUlRDX1ZJREVP
X0NPREVDX0VSUk9SOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHB1bGxTYW1wbGUoKTsK
LSAgICB9Ci0KLSAgICBpbnQzMl90IHB1bGxTYW1wbGUoKQotICAgIHsKLSAgICAgICAgYXV0byBz
YW1wbGUgPSBhZG9wdEdSZWYoZ3N0X2FwcF9zaW5rX3RyeV9wdWxsX3NhbXBsZShHU1RfQVBQX1NJ
TksobV9zaW5rKSwgR1NUX1NFQ09ORCAvIDMwKSk7Ci0gICAgICAgIGlmICghc2FtcGxlKSB7Ci0g
ICAgICAgICAgICBHU1RfRVJST1IoIk5lZWRzIG1vcmUgZGF0YSIpOwotICAgICAgICAgICAgcmV0
dXJuIFdFQlJUQ19WSURFT19DT0RFQ19PSzsKLSAgICAgICAgfQotICAgICAgICBhdXRvIGJ1ZmZl
ciA9IGdzdF9zYW1wbGVfZ2V0X2J1ZmZlcihzYW1wbGUuZ2V0KCkpOwotCi0gICAgICAgIC8vIE1h
a2Ugc3VyZSB0aGF0IHRoZSBmcmFtZS50aW1lc3RhbXAgPT0gcHJldmlzb3VseSBpbnB1dF9mcmFt
ZS5fdGltZVN0YW1wCi0gICAgICAgIC8vIGFzIGl0IGlzIHJlcXVpcmVkIGJ5IHRoZSBWaWRlb0Rl
Y29kZXIgYmFzZWNsYXNzLgotICAgICAgICBhdXRvIHRpbWVzdGFtcHMgPSBtX2R0c1B0c01hcFtH
U1RfQlVGRkVSX1BUUyhidWZmZXIpXTsKLSAgICAgICAgbV9kdHNQdHNNYXAuZXJhc2UoR1NUX0JV
RkZFUl9QVFMoYnVmZmVyKSk7Ci0KLSAgICAgICAgYXV0byBmcmFtZShMaWJXZWJSVENWaWRlb0Zy
YW1lRnJvbUdTdHJlYW1lclNhbXBsZShXVEZNb3ZlKHNhbXBsZSksIHdlYnJ0Yzo6a1ZpZGVvUm90
YXRpb25fMCwKLSAgICAgICAgICAgIHRpbWVzdGFtcHMudGltZXN0YW1wLCB0aW1lc3RhbXBzLnJl
bmRlclRpbWVNcykpOwotCi0gICAgICAgIEdTVF9CVUZGRVJfRFRTKGJ1ZmZlcikgPSBHU1RfQ0xP
Q0tfVElNRV9OT05FOwotICAgICAgICBHU1RfTE9HX09CSkVDVChwaXBlbGluZSgpLCAiT3V0cHV0
IGRlY29kZWQgZnJhbWUhICVkIC0+ICUiIEdTVF9QVFJfRk9STUFULAotICAgICAgICAgICAgZnJh
bWUtPnRpbWVzdGFtcCgpLCBidWZmZXIpOwotCi0gICAgICAgIG1faW1hZ2VSZWFkeUNiLT5EZWNv
ZGVkKCpmcmFtZS5nZXQoKSwgYWJzbDo6b3B0aW9uYWw8aW50MzJfdD4oKSwgYWJzbDo6b3B0aW9u
YWw8dWludDhfdD4oKSk7Ci0KLSAgICAgICAgcmV0dXJuIFdFQlJUQ19WSURFT19DT0RFQ19PSzsK
LSAgICB9Ci0KLSAgICB2aXJ0dWFsIEdzdENhcHMqIEdldENhcHNGb3JGcmFtZShjb25zdCB3ZWJy
dGM6OkVuY29kZWRJbWFnZSYgaW1hZ2UpCi0gICAgewotICAgICAgICBpZiAoIW1fY2Fwcykgewot
ICAgICAgICAgICAgbV9jYXBzID0gYWRvcHRHUmVmKGdzdF9jYXBzX25ld19zaW1wbGUoQ2Fwcygp
LAotICAgICAgICAgICAgICAgICJ3aWR0aCIsIEdfVFlQRV9JTlQsIGltYWdlLl9lbmNvZGVkV2lk
dGggPyBpbWFnZS5fZW5jb2RlZFdpZHRoIDogbV93aWR0aCwKLSAgICAgICAgICAgICAgICAiaGVp
Z2h0IiwgR19UWVBFX0lOVCwgaW1hZ2UuX2VuY29kZWRIZWlnaHQgPyBpbWFnZS5fZW5jb2RlZEhl
aWdodCA6IG1faGVpZ2h0LAotICAgICAgICAgICAgICAgIG51bGxwdHIpKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIHJldHVybiBtX2NhcHMuZ2V0KCk7Ci0gICAgfQotCi0gICAgdm9pZCBBZGREZWNv
ZGVySWZTdXBwb3J0ZWQoc3RkOjp2ZWN0b3I8d2VicnRjOjpTZHBWaWRlb0Zvcm1hdD4mIGNvZGVj
TGlzdCkKLSAgICB7Ci0gICAgICAgIGlmIChIYXNHc3REZWNvZGVyKCkpIHsKLSAgICAgICAgICAg
IGF1dG8gZm9ybWF0cyA9IENvbmZpZ3VyZVN1cHBvcnRlZERlY29kZXIoKTsKLSAgICAgICAgICAg
IGNvZGVjTGlzdC5pbnNlcnQoY29kZWNMaXN0LmVuZCgpLCBmb3JtYXRzLmJlZ2luKCksIGZvcm1h
dHMuZW5kKCkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgdmlydHVhbCBzdGQ6OnZlY3Rvcjx3
ZWJydGM6OlNkcFZpZGVvRm9ybWF0PiBDb25maWd1cmVTdXBwb3J0ZWREZWNvZGVyKCkKLSAgICB7
Ci0gICAgICAgIHJldHVybiB7IHdlYnJ0Yzo6U2RwVmlkZW9Gb3JtYXQoTmFtZSgpKSB9OwotICAg
IH0KLQotICAgIHN0YXRpYyBHUmVmUHRyPEdzdEVsZW1lbnRGYWN0b3J5PiBHc3REZWNvZGVyRmFj
dG9yeShjb25zdCBjaGFyICpjYXBzU3RyKQotICAgIHsKLSAgICAgICAgYXV0byBhbGxfZGVjb2Rl
cnMgPSBnc3RfZWxlbWVudF9mYWN0b3J5X2xpc3RfZ2V0X2VsZW1lbnRzKEdTVF9FTEVNRU5UX0ZB
Q1RPUllfVFlQRV9ERUNPREVSLAotICAgICAgICAgICAgR1NUX1JBTktfTUFSR0lOQUwpOwotICAg
ICAgICBhdXRvIGNhcHMgPSBhZG9wdEdSZWYoZ3N0X2NhcHNfZnJvbV9zdHJpbmcoY2Fwc1N0cikp
OwotICAgICAgICBhdXRvIGRlY29kZXJzID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9saXN0X2ZpbHRl
cihhbGxfZGVjb2RlcnMsCi0gICAgICAgICAgICBjYXBzLmdldCgpLCBHU1RfUEFEX1NJTkssIEZB
TFNFKTsKLQotICAgICAgICBnc3RfcGx1Z2luX2ZlYXR1cmVfbGlzdF9mcmVlKGFsbF9kZWNvZGVy
cyk7Ci0gICAgICAgIEdSZWZQdHI8R3N0RWxlbWVudEZhY3Rvcnk+IHJlczsKLSAgICAgICAgaWYg
KGRlY29kZXJzKQotICAgICAgICAgICAgcmVzID0gR1NUX0VMRU1FTlRfRkFDVE9SWShkZWNvZGVy
cy0+ZGF0YSk7Ci0gICAgICAgIGdzdF9wbHVnaW5fZmVhdHVyZV9saXN0X2ZyZWUoZGVjb2RlcnMp
OwotCi0gICAgICAgIHJldHVybiByZXM7Ci0gICAgfQotCi0gICAgYm9vbCBIYXNHc3REZWNvZGVy
KCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBHc3REZWNvZGVyRmFjdG9yeShDYXBzKCkpOwotICAg
IH0KLQotICAgIHZpcnR1YWwgY29uc3QgZ2NoYXIqIENhcHMoKSA9IDA7Ci0gICAgdmlydHVhbCB3
ZWJydGM6OlZpZGVvQ29kZWNUeXBlIENvZGVjVHlwZSgpID0gMDsKLSAgICBjb25zdCBjaGFyKiBJ
bXBsZW1lbnRhdGlvbk5hbWUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiAiR1N0cmVhbWVyIjsg
fQotICAgIHZpcnR1YWwgY29uc3QgZ2NoYXIqIE5hbWUoKSA9IDA7Ci0KLXByb3RlY3RlZDoKLSAg
ICBHUmVmUHRyPEdzdENhcHM+IG1fY2FwczsKLSAgICBnaW50IG1fcGljdHVyZUlkOwotICAgIGdp
bnQgbV93aWR0aDsKLSAgICBnaW50IG1faGVpZ2h0OwotICAgIGJvb2wgbV9yZXF1aXJlUGFyc2Ug
PSBmYWxzZTsKLSAgICBib29sIG1fbmVlZHNLZXlmcmFtZTsKLQotcHJpdmF0ZToKLSAgICBHUmVm
UHRyPEdzdEVsZW1lbnQ+IG1fcGlwZWxpbmU7Ci0gICAgR3N0RWxlbWVudCogbV9zaW5rOwotICAg
IEdzdEVsZW1lbnQqIG1fc3JjOwotCi0gICAgd2VicnRjOjpEZWNvZGVkSW1hZ2VDYWxsYmFjayog
bV9pbWFnZVJlYWR5Q2I7Ci0KLSAgICBTdGRNYXA8R3N0Q2xvY2tUaW1lLCBJbnB1dFRpbWVzdGFt
cHM+IG1fZHRzUHRzTWFwOwotICAgIEdzdENsb2NrVGltZSBtX2ZpcnN0QnVmZmVyUHRzOwotICAg
IEdzdENsb2NrVGltZSBtX2ZpcnN0QnVmZmVyRHRzOwotfTsKLQotY2xhc3MgSDI2NERlY29kZXIg
OiBwdWJsaWMgR1N0cmVhbWVyVmlkZW9EZWNvZGVyIHsKLXB1YmxpYzoKLSAgICBIMjY0RGVjb2Rl
cigpIHsgbV9yZXF1aXJlUGFyc2UgPSB0cnVlOyB9Ci0KLSAgICBpbnQzMl90IEluaXREZWNvZGUo
Y29uc3Qgd2VicnRjOjpWaWRlb0NvZGVjKiBjb2RlY0luZm8sIGludDMyX3QgbkNvcmVzKSBmaW5h
bAotICAgIHsKLSAgICAgICAgaWYgKGNvZGVjSW5mbyAmJiBjb2RlY0luZm8tPmNvZGVjVHlwZSAh
PSB3ZWJydGM6OmtWaWRlb0NvZGVjSDI2NCkKLSAgICAgICAgICAgIHJldHVybiBXRUJSVENfVklE
RU9fQ09ERUNfRVJSX1BBUkFNRVRFUjsKLQotICAgICAgICByZXR1cm4gR1N0cmVhbWVyVmlkZW9E
ZWNvZGVyOjpJbml0RGVjb2RlKGNvZGVjSW5mbywgbkNvcmVzKTsKLSAgICB9Ci0KLSAgICBHc3RD
YXBzKiBHZXRDYXBzRm9yRnJhbWUoY29uc3Qgd2VicnRjOjpFbmNvZGVkSW1hZ2UmIGltYWdlKSBm
aW5hbAotICAgIHsKLSAgICAgICAgaWYgKCFtX2NhcHMpIHsKLSAgICAgICAgICAgIG1fY2FwcyA9
IGFkb3B0R1JlZihnc3RfY2Fwc19uZXdfc2ltcGxlKENhcHMoKSwKLSAgICAgICAgICAgICAgICAi
d2lkdGgiLCBHX1RZUEVfSU5ULCBpbWFnZS5fZW5jb2RlZFdpZHRoID8gaW1hZ2UuX2VuY29kZWRX
aWR0aCA6IG1fd2lkdGgsCi0gICAgICAgICAgICAgICAgImhlaWdodCIsIEdfVFlQRV9JTlQsIGlt
YWdlLl9lbmNvZGVkSGVpZ2h0ID8gaW1hZ2UuX2VuY29kZWRIZWlnaHQgOiBtX2hlaWdodCwKLSAg
ICAgICAgICAgICAgICAiYWxpZ25tZW50IiwgR19UWVBFX1NUUklORywgImF1IiwKLSAgICAgICAg
ICAgICAgICBudWxscHRyKSk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gbV9jYXBzLmdl
dCgpOwotICAgIH0KLSAgICBjb25zdCBnY2hhciogQ2FwcygpIGZpbmFsIHsgcmV0dXJuICJ2aWRl
by94LWgyNjQiOyB9Ci0gICAgY29uc3QgZ2NoYXIqIE5hbWUoKSBmaW5hbCB7IHJldHVybiBjcmlj
a2V0OjprSDI2NENvZGVjTmFtZTsgfQotICAgIHdlYnJ0Yzo6VmlkZW9Db2RlY1R5cGUgQ29kZWNU
eXBlKCkgZmluYWwgeyByZXR1cm4gd2VicnRjOjprVmlkZW9Db2RlY0gyNjQ7IH0KLQotICAgIHN0
ZDo6dmVjdG9yPHdlYnJ0Yzo6U2RwVmlkZW9Gb3JtYXQ+IENvbmZpZ3VyZVN1cHBvcnRlZERlY29k
ZXIoKSBmaW5hbAotICAgIHsKLSAgICAgICAgcmV0dXJuIHN1cHBvcnRlZEgyNjRGb3JtYXRzKCk7
Ci0gICAgfQotfTsKLQotY2xhc3MgVlA4RGVjb2RlciA6IHB1YmxpYyBHU3RyZWFtZXJWaWRlb0Rl
Y29kZXIgewotcHVibGljOgotICAgIFZQOERlY29kZXIoKSB7IH0KLSAgICBjb25zdCBnY2hhciog
Q2FwcygpIGZpbmFsIHsgcmV0dXJuICJ2aWRlby94LXZwOCI7IH0KLSAgICBjb25zdCBnY2hhciog
TmFtZSgpIGZpbmFsIHsgcmV0dXJuIGNyaWNrZXQ6OmtWcDhDb2RlY05hbWU7IH0KLSAgICB3ZWJy
dGM6OlZpZGVvQ29kZWNUeXBlIENvZGVjVHlwZSgpIGZpbmFsIHsgcmV0dXJuIHdlYnJ0Yzo6a1Zp
ZGVvQ29kZWNWUDg7IH0KLSAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPHdlYnJ0Yzo6VmlkZW9E
ZWNvZGVyPiBDcmVhdGUoKQotICAgIHsKLSAgICAgICAgYXV0byBmYWN0b3J5ID0gR3N0RGVjb2Rl
ckZhY3RvcnkoInZpZGVvL3gtdnA4Iik7Ci0KLSAgICAgICAgaWYgKGZhY3RvcnkgJiYgIWdfc3Ry
Y21wMChHU1RfT0JKRUNUX05BTUUoR1NUX09CSkVDVChmYWN0b3J5LmdldCgpKSksICJ2cDhkZWMi
KSkgewotICAgICAgICAgICAgR1NUX0lORk8oIk91ciBiZXN0IEdTdHJlYW1lciBWUDggZGVjb2Rl
ciBpcyB2cDhkZWMsIGJldHRlciB1c2UgdGhlIG9uZSBmcm9tIExpYldlYlJUQyIpOwotCi0gICAg
ICAgICAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPHdlYnJ0Yzo6VmlkZW9EZWNvZGVyPihuZXcg
d2VicnRjOjpMaWJ2cHhWcDhEZWNvZGVyKCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJu
IHN0ZDo6dW5pcXVlX3B0cjx3ZWJydGM6OlZpZGVvRGVjb2Rlcj4obmV3IFZQOERlY29kZXIoKSk7
Ci0gICAgfQotfTsKLQotY2xhc3MgVlA5RGVjb2RlciA6IHB1YmxpYyBHU3RyZWFtZXJWaWRlb0Rl
Y29kZXIgewotcHVibGljOgotICAgIFZQOURlY29kZXIoYm9vbCBpc1N1cHBvcnRpbmdWUDlQcm9m
aWxlMCA9IHRydWUsIGJvb2wgaXNTdXBwb3J0aW5nVlA5UHJvZmlsZTIgPSB0cnVlKQotICAgICAg
ICA6IG1faXNTdXBwb3J0aW5nVlA5UHJvZmlsZTAoaXNTdXBwb3J0aW5nVlA5UHJvZmlsZTApCi0g
ICAgICAgICwgbV9pc1N1cHBvcnRpbmdWUDlQcm9maWxlMihpc1N1cHBvcnRpbmdWUDlQcm9maWxl
MikgeyB9OwotCi0gICAgY29uc3QgZ2NoYXIqIENhcHMoKSBmaW5hbCB7IHJldHVybiAidmlkZW8v
eC12cDkiOyB9Ci0gICAgY29uc3QgZ2NoYXIqIE5hbWUoKSBmaW5hbCB7IHJldHVybiBjcmlja2V0
OjprVnA5Q29kZWNOYW1lOyB9Ci0gICAgd2VicnRjOjpWaWRlb0NvZGVjVHlwZSBDb2RlY1R5cGUo
KSBmaW5hbCB7IHJldHVybiB3ZWJydGM6OmtWaWRlb0NvZGVjVlA5OyB9Ci0gICAgc3RhdGljIHN0
ZDo6dW5pcXVlX3B0cjx3ZWJydGM6OlZpZGVvRGVjb2Rlcj4gQ3JlYXRlKCkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8d2VicnRjOjpWaWRlb0RlY29kZXI+KG5ldyBWUDlE
ZWNvZGVyKCkpOwotICAgIH0KLQotICAgIHN0ZDo6dmVjdG9yPHdlYnJ0Yzo6U2RwVmlkZW9Gb3Jt
YXQ+IENvbmZpZ3VyZVN1cHBvcnRlZERlY29kZXIoKSBmaW5hbAotICAgIHsKLSAgICAgICAgc3Rk
Ojp2ZWN0b3I8d2VicnRjOjpTZHBWaWRlb0Zvcm1hdD4gZm9ybWF0czsKLSAgICAgICAgaWYgKG1f
aXNTdXBwb3J0aW5nVlA5UHJvZmlsZTApCi0gICAgICAgICAgICBmb3JtYXRzLnB1c2hfYmFjayh3
ZWJydGM6OlNkcFZpZGVvRm9ybWF0KGNyaWNrZXQ6OmtWcDlDb2RlY05hbWUsIHsgeyAicHJvZmls
ZS1pZCIsICIwIiB9IH0pKTsKLSAgICAgICAgaWYgKG1faXNTdXBwb3J0aW5nVlA5UHJvZmlsZTIp
Ci0gICAgICAgICAgICBmb3JtYXRzLnB1c2hfYmFjayh3ZWJydGM6OlNkcFZpZGVvRm9ybWF0KGNy
aWNrZXQ6OmtWcDlDb2RlY05hbWUsIHsgeyAicHJvZmlsZS1pZCIsICIyIiB9IH0pKTsKLSAgICAg
ICAgcmV0dXJuIGZvcm1hdHM7Ci0gICAgfQotcHJpdmF0ZToKLSAgICBib29sIG1faXNTdXBwb3J0
aW5nVlA5UHJvZmlsZTA7Ci0gICAgYm9vbCBtX2lzU3VwcG9ydGluZ1ZQOVByb2ZpbGUyOwotfTsK
LQotc3RkOjp1bmlxdWVfcHRyPHdlYnJ0Yzo6VmlkZW9EZWNvZGVyPiBHU3RyZWFtZXJWaWRlb0Rl
Y29kZXJGYWN0b3J5OjpDcmVhdGVWaWRlb0RlY29kZXIoY29uc3Qgd2VicnRjOjpTZHBWaWRlb0Zv
cm1hdCYgZm9ybWF0KQotewotICAgIHdlYnJ0Yzo6VmlkZW9EZWNvZGVyKiBkZWM7Ci0KLSAgICBp
ZiAoZm9ybWF0Lm5hbWUgPT0gY3JpY2tldDo6a0gyNjRDb2RlY05hbWUpCi0gICAgICAgIGRlYyA9
IG5ldyBIMjY0RGVjb2RlcigpOwotICAgIGVsc2UgaWYgKGZvcm1hdC5uYW1lID09IGNyaWNrZXQ6
OmtWcDhDb2RlY05hbWUpCi0gICAgICAgIHJldHVybiBWUDhEZWNvZGVyOjpDcmVhdGUoKTsKLSAg
ICBlbHNlIGlmIChmb3JtYXQubmFtZSA9PSBjcmlja2V0OjprVnA5Q29kZWNOYW1lKQotICAgICAg
ICByZXR1cm4gVlA5RGVjb2Rlcjo6Q3JlYXRlKCk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIEdTVF9F
UlJPUigiQ291bGQgbm90IGNyZWF0ZSBkZWNvZGVyIGZvciAlcyIsIGZvcm1hdC5uYW1lLmNfc3Ry
KCkpOwotCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLQotICAgIHJldHVybiBzdGQ6
OnVuaXF1ZV9wdHI8d2VicnRjOjpWaWRlb0RlY29kZXI+KGRlYyk7Ci19Ci0KLUdTdHJlYW1lclZp
ZGVvRGVjb2RlckZhY3Rvcnk6OkdTdHJlYW1lclZpZGVvRGVjb2RlckZhY3RvcnkoYm9vbCBpc1N1
cHBvcnRpbmdWUDlQcm9maWxlMCwgYm9vbCBpc1N1cHBvcnRpbmdWUDlQcm9maWxlMikKLSAgICA6
IG1faXNTdXBwb3J0aW5nVlA5UHJvZmlsZTAoaXNTdXBwb3J0aW5nVlA5UHJvZmlsZTApCi0gICAg
LCBtX2lzU3VwcG9ydGluZ1ZQOVByb2ZpbGUyKGlzU3VwcG9ydGluZ1ZQOVByb2ZpbGUyKQotewot
ICAgIGVuc3VyZUdTdHJlYW1lckluaXRpYWxpemVkKCk7Ci0KLSAgICBzdGF0aWMgc3RkOjpvbmNl
X2ZsYWcgZGVidWdSZWdpc3RlcmVkRmxhZzsKLSAgICBzdGQ6OmNhbGxfb25jZShkZWJ1Z1JlZ2lz
dGVyZWRGbGFnLCBbXSB7Ci0gICAgICAgIEdTVF9ERUJVR19DQVRFR09SWV9JTklUKHdlYmtpdF93
ZWJydGNkZWNfZGVidWcsICJ3ZWJraXRsaWJ3ZWJydGN2aWRlb2RlY29kZXIiLCAwLCAiV2ViS2l0
IFdlYlJUQyB2aWRlbyBkZWNvZGVyIik7Ci0gICAgfSk7Ci19Ci1zdGQ6OnZlY3Rvcjx3ZWJydGM6
OlNkcFZpZGVvRm9ybWF0PiBHU3RyZWFtZXJWaWRlb0RlY29kZXJGYWN0b3J5OjpHZXRTdXBwb3J0
ZWRGb3JtYXRzKCkgY29uc3QKLXsKLSAgICBzdGQ6OnZlY3Rvcjx3ZWJydGM6OlNkcFZpZGVvRm9y
bWF0PiBmb3JtYXRzOwotCi0gICAgVlA4RGVjb2RlcigpLkFkZERlY29kZXJJZlN1cHBvcnRlZChm
b3JtYXRzKTsKLSAgICBWUDlEZWNvZGVyKG1faXNTdXBwb3J0aW5nVlA5UHJvZmlsZTAsIG1faXNT
dXBwb3J0aW5nVlA5UHJvZmlsZTIpLkFkZERlY29kZXJJZlN1cHBvcnRlZChmb3JtYXRzKTsKLSAg
ICBIMjY0RGVjb2RlcigpLkFkZERlY29kZXJJZlN1cHBvcnRlZChmb3JtYXRzKTsKLQotICAgIHJl
dHVybiBmb3JtYXRzOwotfQotfQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tZWRpYXN0cmVhbS9saWJ3ZWJydGMvR1N0cmVhbWVyVmlkZW9EZWNvZGVyRmFjdG9y
eS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbGlid2VicnRjL0dTdHJl
YW1lclZpZGVvRGVjb2RlckZhY3RvcnkuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
NGM2ZGQwMjA4MjcwZGJlOTBiMWFhYWUzMDU4MzZmNjQzMWI2NjZlNC4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
ZWRpYXN0cmVhbS9saWJ3ZWJydGMvR1N0cmVhbWVyVmlkZW9EZWNvZGVyRmFjdG9yeS5oCisrKyAv
ZGV2L251bGwKQEAgLTEsNDUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOCBNZXRy
b2xvZ2ljYWwgR3JvdXAgQi5WLgotICogQ29weXJpZ2h0IChDKSAyMDE4IElnYWxpYSBTLkwuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCi0gKiBhaW50IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBVU0UoTElCV0VCUlRDKSAmJiBV
U0UoR1NUUkVBTUVSKQotCi0jaW5jbHVkZSAiTGliV2ViUlRDTWFjcm9zLmgiCi0jaW5jbHVkZSAi
YXBpL3ZpZGVvX2NvZGVjcy92aWRlb19kZWNvZGVyX2ZhY3RvcnkuaCIKLSNpbmNsdWRlIDx3dGYv
Rm9yd2FyZC5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEdTdHJlYW1lclZpZGVv
RGVjb2RlckZhY3RvcnkgOiBwdWJsaWMgd2VicnRjOjpWaWRlb0RlY29kZXJGYWN0b3J5IHsKLSAg
ICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBHU3RyZWFtZXJWaWRlb0Rl
Y29kZXJGYWN0b3J5KGJvb2wgaXNTdXBwb3J0aW5nVlA5UHJvZmlsZTAsIGJvb2wgaXNTdXBwb3J0
aW5nVlA5UHJvZmlsZTIpOwotCi1wcml2YXRlOgotICAgIHN0ZDo6dW5pcXVlX3B0cjx3ZWJydGM6
OlZpZGVvRGVjb2Rlcj4gQ3JlYXRlVmlkZW9EZWNvZGVyKGNvbnN0IHdlYnJ0Yzo6U2RwVmlkZW9G
b3JtYXQmKSBmaW5hbDsKLSAgICBzdGQ6OnZlY3Rvcjx3ZWJydGM6OlNkcFZpZGVvRm9ybWF0PiBH
ZXRTdXBwb3J0ZWRGb3JtYXRzKCkgY29uc3QgZmluYWw7Ci0KLSAgICBib29sIG1faXNTdXBwb3J0
aW5nVlA5UHJvZmlsZTA7Ci0gICAgYm9vbCBtX2lzU3VwcG9ydGluZ1ZQOVByb2ZpbGUyOwotfTsK
LX0KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0
cmVhbS9saWJ3ZWJydGMvR1N0cmVhbWVyVmlkZW9FbmNvZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21lZGlhc3RyZWFtL2xpYndlYnJ0Yy9HU3RyZWFtZXJWaWRlb0VuY29kZXIuY3Bw
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMzQyODg0YWFlNjBkMzI0NGMxZjNiN2Qw
MzZlMTYyZjgxOTcyN2FhLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2xpYndlYnJ0Yy9HU3Ry
ZWFtZXJWaWRlb0VuY29kZXIuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjkwICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAyMCBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgotICog
Q29weXJpZ2h0IChDKSAyMDE4LTIwMjAgSWdhbGlhIFMuTC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0g
KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFpbnQgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
LSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0j
aW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiR1N0cmVhbWVyVmlkZW9FbmNvZGVyLmgiCi0K
LSNpZiBFTkFCTEUoVklERU8pICYmIEVOQUJMRShNRURJQV9TVFJFQU0pICYmIFVTRShMSUJXRUJS
VEMpICYmIFVTRShHU1RSRUFNRVIpCi0KLSNpbmNsdWRlICJHU3RyZWFtZXJDb21tb24uaCIKLSNp
bmNsdWRlIDx3dGYvU3RkTWFwLmg+Ci0jaW5jbHVkZSA8d3RmL2dsaWIvV1RGR1R5cGUuaD4KLQot
dXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLUdTVF9ERUJVR19DQVRFR09SWSh3ZWJydGNfdmVu
Y19kZWJ1Zyk7Ci0jZGVmaW5lIEdTVF9DQVRfREVGQVVMVCB3ZWJydGNfdmVuY19kZWJ1ZwotCi0j
ZGVmaW5lIEtCSVRfVE9fQklUIDEwMjQKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIHNp
bmtUZW1wbGF0ZSA9IEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFKCJzaW5rIiwgR1NUX1BBRF9TSU5L
LCBHU1RfUEFEX0FMV0FZUywgR1NUX1NUQVRJQ19DQVBTKCJ2aWRlby94LXJhdyhBTlkpIikpOwot
c3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIHNyY1RlbXBsYXRlID0gR1NUX1NUQVRJQ19QQURf
VEVNUExBVEUoInNyYyIsIEdTVF9QQURfU1JDLCBHU1RfUEFEX0FMV0FZUywgR1NUX1NUQVRJQ19D
QVBTKCJ2aWRlby94LWgyNjQiKSk7Ci0KLXVzaW5nIFNldEJpdHJhdGVGdW5jID0gRnVuY3Rpb248
dm9pZChHT2JqZWN0KiBlbmNvZGVyLCBjb25zdCBjaGFyKiBwcm9wZXJ0eU5hbWUsIGludCBiaXRy
YXRlKT47Ci11c2luZyBTZXR1cEZ1bmMgPSBGdW5jdGlvbjx2b2lkKFdlYktpdFdlYnJ0Y1ZpZGVv
RW5jb2RlciopPjsKLQotc3RydWN0IEVuY29kZXJEZWZpbml0aW9uIHsKLSAgICBHUmVmUHRyPEdz
dENhcHM+IGNhcHM7Ci0gICAgY29uc3QgY2hhciogbmFtZTsKLSAgICBjb25zdCBjaGFyKiBwYXJz
ZXJOYW1lOwotICAgIEdSZWZQdHI8R3N0Q2Fwcz4gZW5jb2RlZEZvcm1hdDsKLSAgICBTZXRCaXRy
YXRlRnVuYyBzZXRCaXRyYXRlOwotICAgIFNldHVwRnVuYyBzZXR1cEVuY29kZXI7Ci0gICAgY29u
c3QgY2hhciogYml0cmF0ZVByb3BlcnR5TmFtZTsKLSAgICBjb25zdCBjaGFyKiBrZXlmcmFtZUlu
dGVydmFsUHJvcGVydHlOYW1lOwotfTsKLQotZW51bSBFbmNvZGVySWQgeyBOb25lLCBYMjY0LCBP
cGVuSDI2NCwgT214SDI2NCB9OwotCi1jbGFzcyBFbmNvZGVycyB7Ci1wdWJsaWM6Ci0gICAgc3Rh
dGljIFN0ZE1hcDxFbmNvZGVySWQsIEVuY29kZXJEZWZpbml0aW9uPiYgc2luZ2xldG9uKCkKLSAg
ICB7Ci0gICAgICAgIHN0YXRpYyBTdGRNYXA8RW5jb2RlcklkLCBFbmNvZGVyRGVmaW5pdGlvbj4g
ZW5jb2RlcnM7Ci0gICAgICAgIHJldHVybiBlbmNvZGVyczsKLSAgICB9Ci0KLSAgICBzdGF0aWMg
dm9pZCByZWdpc3RlckVuY29kZXIoRW5jb2RlcklkIGlkLCBjb25zdCBjaGFyKiBuYW1lLCBjb25z
dCBjaGFyKiBwYXJzZXJOYW1lLCBjb25zdCBjaGFyKiBjYXBzLCBjb25zdCBjaGFyKiBlbmNvZGVk
Rm9ybWF0LAotICAgICAgICBTZXR1cEZ1bmMmJiBzZXR1cEVuY29kZXIsIGNvbnN0IGNoYXIqIGJp
dHJhdGVQcm9wZXJ0eU5hbWUsIFNldEJpdHJhdGVGdW5jJiYgc2V0Qml0cmF0ZSwgY29uc3QgY2hh
cioga2V5ZnJhbWVJbnRlcnZhbFByb3BlcnR5TmFtZSkKLSAgICB7Ci0gICAgICAgIGF1dG8gZmVh
dHVyZSA9IGFkb3B0R1JlZihnc3RfcmVnaXN0cnlfbG9va3VwX2ZlYXR1cmUoZ3N0X3JlZ2lzdHJ5
X2dldCgpLCBuYW1lKSk7Ci0gICAgICAgIGlmICghZmVhdHVyZSkKLSAgICAgICAgICAgIHJldHVy
bjsKLQotICAgICAgICBzaW5nbGV0b24oKS5lbXBsYWNlKHN0ZDo6bWFrZV9wYWlyKGlkLCAoRW5j
b2RlckRlZmluaXRpb24pIHsKLSAgICAgICAgICAgIC5jYXBzID0gYWRvcHRHUmVmKGdzdF9jYXBz
X2Zyb21fc3RyaW5nKGNhcHMpKSwKLSAgICAgICAgICAgIC5uYW1lID0gbmFtZSwKLSAgICAgICAg
ICAgIC5wYXJzZXJOYW1lID0gcGFyc2VyTmFtZSwKLSAgICAgICAgICAgIC5lbmNvZGVkRm9ybWF0
ID0gZW5jb2RlZEZvcm1hdCA/IGFkb3B0R1JlZihnc3RfY2Fwc19mcm9tX3N0cmluZyhlbmNvZGVk
Rm9ybWF0KSkgOiBudWxscHRyLAotICAgICAgICAgICAgLnNldEJpdHJhdGUgPSBXVEZNb3ZlKHNl
dEJpdHJhdGUpLAotICAgICAgICAgICAgLnNldHVwRW5jb2RlciA9IFdURk1vdmUoc2V0dXBFbmNv
ZGVyKSwKLSAgICAgICAgICAgIC5iaXRyYXRlUHJvcGVydHlOYW1lID0gYml0cmF0ZVByb3BlcnR5
TmFtZSwKLSAgICAgICAgICAgIC5rZXlmcmFtZUludGVydmFsUHJvcGVydHlOYW1lID0ga2V5ZnJh
bWVJbnRlcnZhbFByb3BlcnR5TmFtZSwKLSAgICAgICAgfSkpOwotICAgIH0KLQotICAgIHN0YXRp
YyBFbmNvZGVyRGVmaW5pdGlvbiogZGVmaW5pdGlvbihFbmNvZGVySWQgaWQpCi0gICAgewotICAg
ICAgICBpZiAoaWQgPT0gTm9uZSkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAg
ICByZXR1cm4gJnNpbmdsZXRvbigpW2lkXTsKLSAgICB9Ci19OwotCi1zdHJ1Y3QgX1dlYktpdFdl
YnJ0Y1ZpZGVvRW5jb2RlclByaXZhdGUgewotICAgIEVuY29kZXJJZCBlbmNvZGVySWQ7Ci0gICAg
R1JlZlB0cjxHc3RFbGVtZW50PiBlbmNvZGVyOwotICAgIEdSZWZQdHI8R3N0RWxlbWVudD4gcGFy
c2VyOwotICAgIHVuc2lnbmVkIGJpdHJhdGU7Ci19OwotCi0jZGVmaW5lIHdlYmtpdF93ZWJydGNf
dmlkZW9fZW5jb2Rlcl9wYXJlbnRfY2xhc3MgcGFyZW50X2NsYXNzCi1XRUJLSVRfREVGSU5FX1RZ
UEVfV0lUSF9DT0RFKFdlYktpdFdlYnJ0Y1ZpZGVvRW5jb2Rlciwgd2Via2l0X3dlYnJ0Y192aWRl
b19lbmNvZGVyLCBHU1RfVFlQRV9CSU4sCi0gICAgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQod2Vi
cnRjX3ZlbmNfZGVidWcsICJ3ZWJydGNlbmNvZGVyIiwgMCwgIlZpZGVvIGVuY29kZXIgZm9yIFdl
YlJUQyIpKQotCi1lbnVtIHsKLSAgICBQUk9QX0ZPUk1BVCA9IDEsCi0gICAgUFJPUF9FTkNPREVS
LAotICAgIFBST1BfQklUUkFURSwKLSAgICBQUk9QX0tFWUZSQU1FX0lOVEVSVkFMLAotICAgIE5f
UFJPUFMKLX07Ci0KLXN0YXRpYyB2b2lkIHdlYnJ0Y1ZpZGVvRW5jb2RlckdldFByb3BlcnR5KEdP
YmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyog
cHNwZWMpCi17Ci0gICAgYXV0byogc2VsZiA9IFdFQktJVF9XRUJSVENfVklERU9fRU5DT0RFUihv
YmplY3QpOwotICAgIGF1dG8qIHByaXYgPSBzZWxmLT5wcml2OwotCi0gICAgc3dpdGNoIChwcm9w
X2lkKSB7Ci0gICAgY2FzZSBQUk9QX0ZPUk1BVDoKLSAgICAgICAgaWYgKHByaXYtPmVuY29kZXJJ
ZCAhPSBOb25lKSB7Ci0gICAgICAgICAgICBhdXRvIGVuY29kZXIgPSBFbmNvZGVyczo6ZGVmaW5p
dGlvbihwcml2LT5lbmNvZGVySWQpOwotICAgICAgICAgICAgZ192YWx1ZV9zZXRfYm94ZWQodmFs
dWUsIGVuY29kZXItPmNhcHMuZ2V0KCkpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGdf
dmFsdWVfc2V0X2JveGVkKHZhbHVlLCBudWxscHRyKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBQUk9QX0VOQ09ERVI6Ci0gICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgcHJpdi0+
ZW5jb2Rlci5nZXQoKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9CSVRSQVRFOgot
ICAgICAgICBnX3ZhbHVlX3NldF91aW50KHZhbHVlLCBwcml2LT5iaXRyYXRlKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBQUk9QX0tFWUZSQU1FX0lOVEVSVkFMOgotICAgICAgICBpZiAocHJp
di0+ZW5jb2RlcikgewotICAgICAgICAgICAgYXV0byBlbmNvZGVyID0gRW5jb2RlcnM6OmRlZmlu
aXRpb24ocHJpdi0+ZW5jb2RlcklkKTsKLSAgICAgICAgICAgIGdfb2JqZWN0X2dldF9wcm9wZXJ0
eShHX09CSkVDVChwcml2LT5lbmNvZGVyLmdldCgpKSwgZW5jb2Rlci0+a2V5ZnJhbWVJbnRlcnZh
bFByb3BlcnR5TmFtZSwgdmFsdWUpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIGRl
ZmF1bHQ6Ci0gICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3Qs
IHByb3BfaWQsIHBzcGVjKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotfQotCi1zdGF0aWMgdm9p
ZCB3ZWJydGNWaWRlb0VuY29kZXJTZXRCaXRyYXRlKFdlYktpdFdlYnJ0Y1ZpZGVvRW5jb2Rlciog
c2VsZiwgZ3VpbnQgYml0cmF0ZSkKLXsKLSAgICBhdXRvKiBwcml2ID0gc2VsZi0+cHJpdjsKLSAg
ICBwcml2LT5iaXRyYXRlID0gYml0cmF0ZTsKLQotICAgIGlmIChwcml2LT5lbmNvZGVySWQgIT0g
Tm9uZSkgewotICAgICAgICBhdXRvIGVuY29kZXIgPSBFbmNvZGVyczo6ZGVmaW5pdGlvbihwcml2
LT5lbmNvZGVySWQpOwotICAgICAgICBlbmNvZGVyLT5zZXRCaXRyYXRlKEdfT0JKRUNUKHByaXYt
PmVuY29kZXIuZ2V0KCkpLCBlbmNvZGVyLT5iaXRyYXRlUHJvcGVydHlOYW1lLCBwcml2LT5iaXRy
YXRlKTsKLSAgICB9Ci19Ci0KLXN0YXRpYyB2b2lkIHdlYnJ0Y1ZpZGVvRW5jb2RlclNldEVuY29k
ZXIoV2ViS2l0V2VicnRjVmlkZW9FbmNvZGVyKiBzZWxmLCBHUmVmUHRyPEdzdEVsZW1lbnQ+JiYg
ZW5jb2RlckVsZW1lbnQsIEVuY29kZXJJZCBlbmNvZGVySWQpCi17Ci0gICAgYXV0byogcHJpdiA9
IHNlbGYtPnByaXY7Ci0gICAgcHJpdi0+ZW5jb2RlcklkID0gZW5jb2RlcklkOwotICAgIHByaXYt
PmVuY29kZXIgPSBXVEZNb3ZlKGVuY29kZXJFbGVtZW50KTsKLQotICAgIGF1dG8gZW5jb2RlciA9
IEVuY29kZXJzOjpkZWZpbml0aW9uKGVuY29kZXJJZCk7Ci0gICAgQVNTRVJUKGVuY29kZXIpOwot
ICAgIGlmIChlbmNvZGVyLT5wYXJzZXJOYW1lKQotICAgICAgICBwcml2LT5wYXJzZXIgPSBtYWtl
R1N0cmVhbWVyRWxlbWVudChlbmNvZGVyLT5wYXJzZXJOYW1lLCBudWxscHRyKTsKLQotICAgIGVu
Y29kZXItPnNldHVwRW5jb2RlcihzZWxmKTsKLQotICAgIGdzdF9iaW5fYWRkKEdTVF9CSU5fQ0FT
VChzZWxmKSwgcHJpdi0+ZW5jb2Rlci5nZXQoKSk7Ci0KLSAgICBhdXRvIHNpbmtQYWRUYXJnZXQg
PSBhZG9wdEdSZWYoZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQocHJpdi0+ZW5jb2Rlci5nZXQo
KSwgInNpbmsiKSk7Ci0gICAgYXV0byBzaW5rUGFkID0gYWRvcHRHUmVmKGdzdF9lbGVtZW50X2dl
dF9zdGF0aWNfcGFkKEdTVF9FTEVNRU5UX0NBU1Qoc2VsZiksICJzaW5rIikpOwotICAgIGdzdF9n
aG9zdF9wYWRfc2V0X3RhcmdldChHU1RfR0hPU1RfUEFEKHNpbmtQYWQuZ2V0KCkpLCBzaW5rUGFk
VGFyZ2V0LmdldCgpKTsKLQotICAgIEdSZWZQdHI8R3N0UGFkPiBzcmNQYWRUYXJnZXQ7Ci0gICAg
aWYgKHByaXYtPnBhcnNlcikgewotICAgICAgICBnc3RfYmluX2FkZChHU1RfQklOX0NBU1Qoc2Vs
ZiksIHByaXYtPnBhcnNlci5nZXQoKSk7Ci0gICAgICAgIGdzdF9lbGVtZW50X2xpbmsocHJpdi0+
ZW5jb2Rlci5nZXQoKSwgcHJpdi0+cGFyc2VyLmdldCgpKTsKLSAgICAgICAgc3JjUGFkVGFyZ2V0
ID0gYWRvcHRHUmVmKGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkKHByaXYtPnBhcnNlci5nZXQo
KSwgInNyYyIpKTsKLSAgICB9IGVsc2UKLSAgICAgICAgc3JjUGFkVGFyZ2V0ID0gYWRvcHRHUmVm
KGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkKHByaXYtPmVuY29kZXIuZ2V0KCksICJzcmMiKSk7
Ci0KLSAgICBpZiAoZW5jb2Rlci0+ZW5jb2RlZEZvcm1hdCkgewotICAgICAgICBhdXRvKiBjYXBz
ZmlsdGVyID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlKCJjYXBzZmlsdGVyIiwgbnVsbHB0cik7
Ci0gICAgICAgIGdfb2JqZWN0X3NldChjYXBzZmlsdGVyLCAiY2FwcyIsIGVuY29kZXItPmVuY29k
ZWRGb3JtYXQuZ2V0KCksIG51bGxwdHIpOwotCi0gICAgICAgIGdzdF9iaW5fYWRkKEdTVF9CSU5f
Q0FTVChzZWxmKSwgY2Fwc2ZpbHRlcik7Ci0gICAgICAgIGF1dG8gc2lua1BhZCA9IGFkb3B0R1Jl
Zihnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZChjYXBzZmlsdGVyLCAic2luayIpKTsKLSAgICAg
ICAgZ3N0X3BhZF9saW5rKHNyY1BhZFRhcmdldC5nZXQoKSwgc2lua1BhZC5nZXQoKSk7Ci0gICAg
ICAgIHNyY1BhZFRhcmdldCA9IGFkb3B0R1JlZihnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZChj
YXBzZmlsdGVyLCAic3JjIikpOwotICAgIH0KLQotICAgIGF1dG8gc3JjUGFkID0gYWRvcHRHUmVm
KGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkKEdTVF9FTEVNRU5UX0NBU1Qoc2VsZiksICJzcmMi
KSk7Ci0gICAgZ3N0X2dob3N0X3BhZF9zZXRfdGFyZ2V0KEdTVF9HSE9TVF9QQUQoc3JjUGFkLmdl
dCgpKSwgc3JjUGFkVGFyZ2V0LmdldCgpKTsKLQotICAgIHdlYnJ0Y1ZpZGVvRW5jb2RlclNldEJp
dHJhdGUoc2VsZiwgcHJpdi0+Yml0cmF0ZSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHdlYnJ0Y1ZpZGVv
RW5jb2RlclNldEZvcm1hdChXZWJLaXRXZWJydGNWaWRlb0VuY29kZXIqIHNlbGYsIGNvbnN0IEdz
dENhcHMqIGNhcHMpCi17Ci0gICAgaWYgKCFjYXBzKQotICAgICAgICByZXR1cm47Ci0KLSAgICBm
b3IgKGNvbnN0IGF1dG8mIHBhaXIgOiBFbmNvZGVyczo6c2luZ2xldG9uKCkpIHsKLSAgICAgICAg
Y29uc3QgYXV0byYgZW5jb2RlciA9IHBhaXIuc2Vjb25kOwotICAgICAgICBpZiAoZ3N0X2NhcHNf
Y2FuX2ludGVyc2VjdChlbmNvZGVyLmNhcHMuZ2V0KCksIGNhcHMpKSB7Ci0gICAgICAgICAgICBH
UmVmUHRyPEdzdEVsZW1lbnQ+IGVsZW1lbnQgPSBtYWtlR1N0cmVhbWVyRWxlbWVudChlbmNvZGVy
Lm5hbWUsIG51bGxwdHIpOwotICAgICAgICAgICAgd2VicnRjVmlkZW9FbmNvZGVyU2V0RW5jb2Rl
cihzZWxmLCBXVEZNb3ZlKGVsZW1lbnQpLCBwYWlyLmZpcnN0KTsKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEdTVF9FUlJPUigiTm8gZW5jb2RlciBmb3VuZCBm
b3IgZm9ybWF0ICUiIEdTVF9QVFJfRk9STUFULCBjYXBzKTsKLX0KLQotc3RhdGljIHZvaWQgd2Vi
cnRjVmlkZW9FbmNvZGVyU2V0UHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wX2lk
LCBjb25zdCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKLXsKLSAgICBhdXRvKiBz
ZWxmID0gV0VCS0lUX1dFQlJUQ19WSURFT19FTkNPREVSKG9iamVjdCk7Ci0gICAgYXV0byogcHJp
diA9IHNlbGYtPnByaXY7Ci0KLSAgICBzd2l0Y2ggKHByb3BfaWQpIHsKLSAgICBjYXNlIFBST1Bf
Rk9STUFUOgotICAgICAgICB3ZWJydGNWaWRlb0VuY29kZXJTZXRGb3JtYXQoc2VsZiwgZ3N0X3Zh
bHVlX2dldF9jYXBzKHZhbHVlKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9CSVRS
QVRFOgotICAgICAgICB3ZWJydGNWaWRlb0VuY29kZXJTZXRCaXRyYXRlKHNlbGYsIGdfdmFsdWVf
Z2V0X3VpbnQodmFsdWUpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0tFWUZSQU1F
X0lOVEVSVkFMOgotICAgICAgICBpZiAocHJpdi0+ZW5jb2RlcikgewotICAgICAgICAgICAgYXV0
byBlbmNvZGVyID0gRW5jb2RlcnM6OmRlZmluaXRpb24ocHJpdi0+ZW5jb2RlcklkKTsKLSAgICAg
ICAgICAgIGdfb2JqZWN0X3NldChwcml2LT5lbmNvZGVyLmdldCgpLCBlbmNvZGVyLT5rZXlmcmFt
ZUludGVydmFsUHJvcGVydHlOYW1lLCBnX3ZhbHVlX2dldF91aW50KHZhbHVlKSwgbnVsbHB0cik7
Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgR19PQkpF
Q1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOwotICAg
ICAgICBicmVhazsKLSAgICB9Ci19Ci0KLXN0YXRpYyB2b2lkIHNldEJpdHJhdGVLYml0UGVyU2Vj
KEdPYmplY3QqIGVuY29kZXIsIGNvbnN0IGNoYXIqIHByb3BlcnR5TmFtZSwgaW50IGJpdHJhdGUp
Ci17Ci0gICAgZ19vYmplY3Rfc2V0KGVuY29kZXIsIHByb3BlcnR5TmFtZSwgYml0cmF0ZSwgbnVs
bHB0cik7Ci19Ci0KLXN0YXRpYyB2b2lkIHNldEJpdHJhdGVCaXRQZXJTZWMoR09iamVjdCogZW5j
b2RlciwgY29uc3QgY2hhciogcHJvcGVydHlOYW1lLCBpbnQgYml0cmF0ZSkKLXsKLSAgICBnX29i
amVjdF9zZXQoZW5jb2RlciwgcHJvcGVydHlOYW1lLCBiaXRyYXRlICogS0JJVF9UT19CSVQsIG51
bGxwdHIpOwotfQotCi1zdGF0aWMgdm9pZCB3ZWJydGNWaWRlb0VuY29kZXJDb25zdHJ1Y3RlZChH
T2JqZWN0KiBlbmNvZGVyKQotewotICAgIGF1dG8qIHNlbGYgPSBXRUJLSVRfV0VCUlRDX1ZJREVP
X0VOQ09ERVIoZW5jb2Rlcik7Ci0gICAgc2VsZi0+cHJpdi0+ZW5jb2RlcklkID0gTm9uZTsKLSAg
ICBnc3RfZWxlbWVudF9hZGRfcGFkKEdTVF9FTEVNRU5UX0NBU1Qoc2VsZiksIHdlYmtpdEdzdEdo
b3N0UGFkRnJvbVN0YXRpY1RlbXBsYXRlKCZzaW5rVGVtcGxhdGUsICJzaW5rIiwgbnVsbHB0cikp
OwotICAgIGdzdF9lbGVtZW50X2FkZF9wYWQoR1NUX0VMRU1FTlRfQ0FTVChzZWxmKSwgd2Via2l0
R3N0R2hvc3RQYWRGcm9tU3RhdGljVGVtcGxhdGUoJnNyY1RlbXBsYXRlLCAic3JjIiwgbnVsbHB0
cikpOwotfQotCi1zdGF0aWMgdm9pZCB3ZWJraXRfd2VicnRjX3ZpZGVvX2VuY29kZXJfY2xhc3Nf
aW5pdChXZWJLaXRXZWJydGNWaWRlb0VuY29kZXJDbGFzcyoga2xhc3MpCi17Ci0gICAgR09iamVj
dENsYXNzKiBvYmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKGtsYXNzKTsKLSAgICBvYmplY3RD
bGFzcy0+Y29uc3RydWN0ZWQgPSB3ZWJydGNWaWRlb0VuY29kZXJDb25zdHJ1Y3RlZDsKLSAgICBv
YmplY3RDbGFzcy0+Z2V0X3Byb3BlcnR5ID0gd2VicnRjVmlkZW9FbmNvZGVyR2V0UHJvcGVydHk7
Ci0gICAgb2JqZWN0Q2xhc3MtPnNldF9wcm9wZXJ0eSA9IHdlYnJ0Y1ZpZGVvRW5jb2RlclNldFBy
b3BlcnR5OwotCi0gICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eShvYmplY3RDbGFz
cywgUFJPUF9GT1JNQVQsIGdfcGFyYW1fc3BlY19ib3hlZCgiZm9ybWF0IiwgIkZvcm1hdCBhcyBj
YXBzIiwgIlNldCB0aGUgY2FwcyBvZiB0aGUgZm9ybWF0IHRvIGJlIHVzZWQuIiwgR1NUX1RZUEVf
Q0FQUywgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOwotCi0gICAgZ19vYmplY3RfY2xhc3NfaW5z
dGFsbF9wcm9wZXJ0eShvYmplY3RDbGFzcywgUFJPUF9FTkNPREVSLCBnX3BhcmFtX3NwZWNfb2Jq
ZWN0KCJlbmNvZGVyIiwgIlRoZSBhY3R1YWwgZW5jb2RlciBlbGVtZW50IiwgIlRoZSBlbmNvZGVy
IGVsZW1lbnQiLCBHU1RfVFlQRV9FTEVNRU5ULCBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKLQot
ICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkob2JqZWN0Q2xhc3MsIFBST1BfQklU
UkFURSwgZ19wYXJhbV9zcGVjX3VpbnQoImJpdHJhdGUiLCAiQml0cmF0ZSIsICJUaGUgYml0cmF0
ZSBpbiBrYml0IHBlciBzZWNvbmQiLCAwLCBHX01BWElOVCwgMjA0OCwKLSAgICAgICAgc3RhdGlj
X2Nhc3Q8R1BhcmFtRmxhZ3M+KEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RS
SU5HUyB8IEdfUEFSQU1fQ09OU1RSVUNUKSkpOwotCi0gICAgZ19vYmplY3RfY2xhc3NfaW5zdGFs
bF9wcm9wZXJ0eShvYmplY3RDbGFzcywgUFJPUF9LRVlGUkFNRV9JTlRFUlZBTCwgZ19wYXJhbV9z
cGVjX3VpbnQoImtleWZyYW1lLWludGVydmFsIiwgIktleWZyYW1lIGludGVydmFsIiwgIlRoZSBp
bnRlcnZhbCBiZXR3ZWVuIGtleWZyYW1lcyIsIDAsIEdfTUFYSU5ULCAwLAotICAgICAgICBzdGF0
aWNfY2FzdDxHUGFyYW1GbGFncz4oR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19T
VFJJTkdTIHwgR19QQVJBTV9DT05TVFJVQ1QpKSk7Ci0KLSAgICBFbmNvZGVyczo6cmVnaXN0ZXJF
bmNvZGVyKE9teEgyNjQsICJvbXhoMjY0ZW5jIiwgImgyNjRwYXJzZSIsICJ2aWRlby94LWgyNjQi
LAotICAgICAgICAidmlkZW8veC1oMjY0LGFsaWdubWVudD1hdSxzdHJlYW0tZm9ybWF0PWJ5dGUt
c3RyZWFtLHByb2ZpbGU9YmFzZWxpbmUiLAotICAgICAgICBbXShXZWJLaXRXZWJydGNWaWRlb0Vu
Y29kZXIqIHNlbGYpIHsKLSAgICAgICAgICAgIGdzdF91dGlsX3NldF9vYmplY3RfYXJnKEdfT0JK
RUNUKHNlbGYtPnByaXYtPmVuY29kZXIuZ2V0KCkpLCAiY29udHJvbC1yYXRlIiwgInZhcmlhYmxl
Iik7Ci0gICAgICAgICAgICBnX29iamVjdF9zZXQoc2VsZi0+cHJpdi0+cGFyc2VyLmdldCgpLCAi
Y29uZmlnLWludGVydmFsIiwgMSwgbnVsbHB0cik7Ci0gICAgICAgIH0sICJ0YXJnZXQtYml0cmF0
ZSIsIHNldEJpdHJhdGVCaXRQZXJTZWMsICJpbnRlcnZhbC1pbnRyYWZyYW1lcyIpOwotICAgIEVu
Y29kZXJzOjpyZWdpc3RlckVuY29kZXIoWDI2NCwgIngyNjRlbmMiLCAiaDI2NHBhcnNlIiwgInZp
ZGVvL3gtaDI2NCIsCi0gICAgICAgICJ2aWRlby94LWgyNjQsYWxpZ25tZW50PWF1LHN0cmVhbS1m
b3JtYXQ9Ynl0ZS1zdHJlYW0scHJvZmlsZT1iYXNlbGluZSIsCi0gICAgICAgIFtdKFdlYktpdFdl
YnJ0Y1ZpZGVvRW5jb2Rlciogc2VsZikgewotICAgICAgICAgICAgZ3N0X3V0aWxfc2V0X29iamVj
dF9hcmcoR19PQkpFQ1Qoc2VsZi0+cHJpdi0+ZW5jb2Rlci5nZXQoKSksICJ0dW5lIiwgInplcm9s
YXRlbmN5Iik7Ci0gICAgICAgICAgICBnX29iamVjdF9zZXQoc2VsZi0+cHJpdi0+cGFyc2VyLmdl
dCgpLCAiY29uZmlnLWludGVydmFsIiwgMSwgbnVsbHB0cik7Ci0gICAgICAgIH0sICJiaXRyYXRl
Iiwgc2V0Qml0cmF0ZUtiaXRQZXJTZWMsICJrZXktaW50LW1heCIpOwotICAgIEVuY29kZXJzOjpy
ZWdpc3RlckVuY29kZXIoT3BlbkgyNjQsICJvcGVuaDI2NGVuYyIsICJoMjY0cGFyc2UiLCAidmlk
ZW8veC1oMjY0IiwKLSAgICAgICAgInZpZGVvL3gtaDI2NCxhbGlnbm1lbnQ9YXUsc3RyZWFtLWZv
cm1hdD1ieXRlLXN0cmVhbSxwcm9maWxlPWJhc2VsaW5lIiwKLSAgICAgICAgW10oV2ViS2l0V2Vi
cnRjVmlkZW9FbmNvZGVyKiBzZWxmKSB7Ci0gICAgICAgICAgICBnX29iamVjdF9zZXQoc2VsZi0+
cHJpdi0+cGFyc2VyLmdldCgpLCAiY29uZmlnLWludGVydmFsIiwgMSwgbnVsbHB0cik7Ci0gICAg
ICAgIH0sICJiaXRyYXRlIiwgc2V0Qml0cmF0ZUJpdFBlclNlYywgImdvcC1zaXplIik7Ci19Ci0K
LSNlbmRpZiAvLyBFTkFCTEUoVklERU8pICYmIEVOQUJMRShNRURJQV9TVFJFQU0pICYmIFVTRShM
SUJXRUJSVEMpICYmIFVTRShHU1RSRUFNRVIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tZWRpYXN0cmVhbS9saWJ3ZWJydGMvR1N0cmVhbWVyVmlkZW9FbmNvZGVyLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9saWJ3ZWJydGMvR1N0cmVhbWVyVmlk
ZW9FbmNvZGVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRkNjZlZDdlYjM5M2Jk
ZmExOTEzOTJhYTEyN2UzOGUyMTA1OTkwZjYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbGli
d2VicnRjL0dTdHJlYW1lclZpZGVvRW5jb2Rlci5oCisrKyAvZGV2L251bGwKQEAgLTEsNDkgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOCBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgot
ICogQ29weXJpZ2h0IChDKSAyMDE4IElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICog
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhaW50IHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0g
KiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI3By
YWdtYSBvbmNlCi0KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0KLUdfQkVHSU5fREVDTFMKLQotI2Rl
ZmluZSBXRUJLSVRfVFlQRV9XRUJSVENfVklERU9fRU5DT0RFUiAod2Via2l0X3dlYnJ0Y192aWRl
b19lbmNvZGVyX2dldF90eXBlKCkpCi0jZGVmaW5lIFdFQktJVF9XRUJSVENfVklERU9fRU5DT0RF
UihvYmopIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX1RZUEVfV0VC
UlRDX1ZJREVPX0VOQ09ERVIsIFdlYktpdFdlYnJ0Y1ZpZGVvRW5jb2RlcikpCi0jZGVmaW5lIFdF
QktJVF9XRUJSVENfVklERU9fRU5DT0RFUl9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFT
U19DQVNUKChrbGFzcyksIFdFQktJVF9UWVBFX1dFQlJUQ19WSURFT19FTkNPREVSLCBXZWJLaXRX
ZWJydGNWaWRlb0VuY29kZXJDbGFzcykpCi0jZGVmaW5lIFdFQktJVF9JU19XRUJSVENfVklERU9f
RU5DT0RFUihvYmopIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX1RZ
UEVfV0VCUlRDX1ZJREVPX0VOQ09ERVIpKQotI2RlZmluZSBXRUJLSVRfSVNfV0VCUlRDX1ZJREVP
X0VOQ09ERVJfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCBX
RUJLSVRfVFlQRV9XRUJSVENfVklERU9fRU5DT0RFUikpCi0KLXR5cGVkZWYgc3RydWN0IF9XZWJL
aXRXZWJydGNWaWRlb0VuY29kZXIgV2ViS2l0V2VicnRjVmlkZW9FbmNvZGVyOwotdHlwZWRlZiBz
dHJ1Y3QgX1dlYktpdFdlYnJ0Y1ZpZGVvRW5jb2RlckNsYXNzIFdlYktpdFdlYnJ0Y1ZpZGVvRW5j
b2RlckNsYXNzOwotdHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFdlYnJ0Y1ZpZGVvRW5jb2RlclByaXZh
dGUgV2ViS2l0V2VicnRjVmlkZW9FbmNvZGVyUHJpdmF0ZTsKLQotc3RydWN0IF9XZWJLaXRXZWJy
dGNWaWRlb0VuY29kZXIgewotICAgIEdzdEJpbiBwYXJlbnQ7Ci0KLSAgICBXZWJLaXRXZWJydGNW
aWRlb0VuY29kZXJQcml2YXRlKiBwcml2OwotfTsKLQotc3RydWN0IF9XZWJLaXRXZWJydGNWaWRl
b0VuY29kZXJDbGFzcyB7Ci0gICAgR3N0QmluQ2xhc3MgcGFyZW50Q2xhc3M7Ci19OwotCi1HVHlw
ZSB3ZWJraXRfd2VicnRjX3ZpZGVvX2VuY29kZXJfZ2V0X3R5cGUodm9pZCk7Ci0KLUdfRU5EX0RF
Q0xTCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9saWJ3
ZWJydGMvR1N0cmVhbWVyVmlkZW9FbmNvZGVyRmFjdG9yeS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tZWRpYXN0cmVhbS9saWJ3ZWJydGMvR1N0cmVhbWVyVmlkZW9FbmNvZGVyRmFjdG9y
eS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE4NjI5NmZlZGM4N2JkNWUyMDIx
MjY1MjU3MjBlYzQ1ZmVlNjcyNmMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbGlid2VicnRj
L0dTdHJlYW1lclZpZGVvRW5jb2RlckZhY3RvcnkuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNDU0
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTggTWV0cm9sb2dpY2FsIEdyb3VwIEIu
Vi4KLSAqIENvcHlyaWdodCAoQykgMjAxOCBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
LSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWludCB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0K
LSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShWSURFTykgJiYgRU5BQkxFKE1FRElB
X1NUUkVBTSkgJiYgVVNFKExJQldFQlJUQykgJiYgVVNFKEdTVFJFQU1FUikKLSNpbmNsdWRlICJH
U3RyZWFtZXJWaWRlb0VuY29kZXJGYWN0b3J5LmgiCi0KLSNpbmNsdWRlICJHU3RyZWFtZXJWaWRl
b0NvbW1vbi5oIgotI2luY2x1ZGUgIkdTdHJlYW1lclZpZGVvRW5jb2Rlci5oIgotI2luY2x1ZGUg
IkdTdHJlYW1lclZpZGVvRnJhbWVMaWJXZWJSVEMuaCIKLSNpbmNsdWRlICJMaWJXZWJSVENXZWJL
aXRNYWNyb3MuaCIKLSNpbmNsdWRlICJ3ZWJydGMvY29tbW9uX3ZpZGVvL2gyNjQvaDI2NF9jb21t
b24uaCIKLSNpbmNsdWRlICJ3ZWJydGMvbWVkaWEvYmFzZS92cDlfcHJvZmlsZS5oIgotI2luY2x1
ZGUgIndlYnJ0Yy9tb2R1bGVzL3ZpZGVvX2NvZGluZy9jb2RlY3MvaDI2NC9pbmNsdWRlL2gyNjQu
aCIKLSNpbmNsdWRlICJ3ZWJydGMvbW9kdWxlcy92aWRlb19jb2RpbmcvY29kZWNzL3ZwOC9pbmNs
dWRlL3ZwOC5oIgotI2luY2x1ZGUgIndlYnJ0Yy9tb2R1bGVzL3ZpZGVvX2NvZGluZy9jb2RlY3Mv
dnA4L2xpYnZweF92cDhfZW5jb2Rlci5oIgotI2luY2x1ZGUgIndlYnJ0Yy9tb2R1bGVzL3ZpZGVv
X2NvZGluZy9jb2RlY3MvdnA5L2luY2x1ZGUvdnA5LmgiCi0jaW5jbHVkZSAid2VicnRjL21vZHVs
ZXMvdmlkZW9fY29kaW5nL2luY2x1ZGUvdmlkZW9fY29kZWNfaW50ZXJmYWNlLmgiCi0jaW5jbHVk
ZSAid2VicnRjL21vZHVsZXMvdmlkZW9fY29kaW5nL3V0aWxpdHkvc2ltdWxjYXN0X3V0aWxpdHku
aCIKLSNpbmNsdWRlIDxnc3QvYXBwL2dzdGFwcHNpbmsuaD4KLSNpbmNsdWRlIDxnc3QvYXBwL2dz
dGFwcHNyYy5oPgotCi0jZGVmaW5lIEdTVF9VU0VfVU5TVEFCTEVfQVBJCi0jaW5jbHVkZSA8Z3N0
L2NvZGVjcGFyc2Vycy9nc3RoMjY0cGFyc2VyLmg+Ci0jdW5kZWYgR1NUX1VTRV9VTlNUQUJMRV9B
UEkKLQotI2luY2x1ZGUgPGdzdC9wYnV0aWxzL2VuY29kaW5nLXByb2ZpbGUuaD4KLSNpbmNsdWRl
IDxnc3QvdmlkZW8vdmlkZW8uaD4KLSNpbmNsdWRlIDx3dGYvQXRvbWljcy5oPgotI2luY2x1ZGUg
PHd0Zi9IYXNoTWFwLmg+Ci0jaW5jbHVkZSA8d3RmL0xvY2suaD4KLSNpbmNsdWRlIDx3dGYvU3Rk
TWFwLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQ29uY2F0ZW5hdGVOdW1iZXJzLmg+Ci0K
LUdTVF9ERUJVR19DQVRFR09SWSh3ZWJraXRfd2VicnRjZW5jX2RlYnVnKTsKLSNkZWZpbmUgR1NU
X0NBVF9ERUZBVUxUIHdlYmtpdF93ZWJydGNlbmNfZGVidWcKLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotCi1jbGFzcyBHU3RyZWFtZXJFbmNvZGVkSW1hZ2VCdWZmZXIgOiBwdWJsaWMgd2VicnRjOjpF
bmNvZGVkSW1hZ2VCdWZmZXJJbnRlcmZhY2UgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OwotCi1wdWJsaWM6Ci0gICAgc3RhdGljIHJ0Yzo6c2NvcGVkX3JlZnB0cjxHU3RyZWFtZXJFbmNv
ZGVkSW1hZ2VCdWZmZXI+IGNyZWF0ZShHUmVmUHRyPEdzdFNhbXBsZT4mJiBzYW1wbGUpCi0gICAg
ewotICAgICAgICByZXR1cm4gbmV3IHJ0Yzo6UmVmQ291bnRlZE9iamVjdDxHU3RyZWFtZXJFbmNv
ZGVkSW1hZ2VCdWZmZXI+KFdURk1vdmUoc2FtcGxlKSk7Ci0gICAgfQotCi0gICAgY29uc3QgdWlu
dDhfdCogZGF0YSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fbWFwcGVkQnVmZmVyLT5kYXRhKCk7
IH0KLSAgICB1aW50OF90KiBkYXRhKCkgZmluYWwgeyByZXR1cm4gbV9tYXBwZWRCdWZmZXItPmRh
dGEoKTsgfQotICAgIHNpemVfdCBzaXplKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9tYXBwZWRC
dWZmZXItPnNpemUoKTsgfQotCi0gICAgY29uc3QgR3N0QnVmZmVyKiBnZXRCdWZmZXIoKSBjb25z
dCB7IHJldHVybiBnc3Rfc2FtcGxlX2dldF9idWZmZXIobV9zYW1wbGUuZ2V0KCkpOyB9Ci0gICAg
c3RkOjpvcHRpb25hbDxGbG9hdFNpemU+IGdldFZpZGVvUmVzb2x1dGlvbigpIGNvbnN0IHsgcmV0
dXJuIGdldFZpZGVvUmVzb2x1dGlvbkZyb21DYXBzKGdzdF9zYW1wbGVfZ2V0X2NhcHMobV9zYW1w
bGUuZ2V0KCkpKTsgfQotCi1wcm90ZWN0ZWQ6Ci0gICAgR1N0cmVhbWVyRW5jb2RlZEltYWdlQnVm
ZmVyKCkgPSBkZWZhdWx0OwotICAgIH5HU3RyZWFtZXJFbmNvZGVkSW1hZ2VCdWZmZXIoKSA9IGRl
ZmF1bHQ7Ci0gICAgR1N0cmVhbWVyRW5jb2RlZEltYWdlQnVmZmVyKEdSZWZQdHI8R3N0U2FtcGxl
PiYmIHNhbXBsZSkKLSAgICAgICAgOiBtX3NhbXBsZShzYW1wbGUpCi0gICAgewotICAgICAgICBt
X21hcHBlZEJ1ZmZlciA9IEdzdE1hcHBlZE93bmVkQnVmZmVyOjpjcmVhdGUoZ3N0X3NhbXBsZV9n
ZXRfYnVmZmVyKG1fc2FtcGxlLmdldCgpKSk7Ci0gICAgfQotCi0gICAgR1JlZlB0cjxHc3RTYW1w
bGU+IG1fc2FtcGxlOwotICAgIFJlZlB0cjxHc3RNYXBwZWRPd25lZEJ1ZmZlcj4gbV9tYXBwZWRC
dWZmZXI7Ci19OwotCi1jbGFzcyBHU3RyZWFtZXJWaWRlb0VuY29kZXIgOiBwdWJsaWMgd2VicnRj
OjpWaWRlb0VuY29kZXIgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgot
ICAgIEdTdHJlYW1lclZpZGVvRW5jb2Rlcihjb25zdCB3ZWJydGM6OlNkcFZpZGVvRm9ybWF0JikK
LSAgICAgICAgOiBtX2ZpcnN0RnJhbWVQdHMoR1NUX0NMT0NLX1RJTUVfTk9ORSkKLSAgICAgICAg
LCBtX3Jlc3RyaWN0aW9uQ2FwcyhhZG9wdEdSZWYoZ3N0X2NhcHNfbmV3X2VtcHR5X3NpbXBsZSgi
dmlkZW8veC1yYXciKSkpCi0gICAgewotICAgIH0KLSAgICBHU3RyZWFtZXJWaWRlb0VuY29kZXIo
KQotICAgICAgICA6IG1fZmlyc3RGcmFtZVB0cyhHU1RfQ0xPQ0tfVElNRV9OT05FKQotICAgICAg
ICAsIG1fcmVzdHJpY3Rpb25DYXBzKGFkb3B0R1JlZihnc3RfY2Fwc19uZXdfZW1wdHlfc2ltcGxl
KCJ2aWRlby94LXJhdyIpKSkKLSAgICB7Ci0gICAgfQotCi0gICAgdm9pZCBTZXRSYXRlcyhjb25z
dCB3ZWJydGM6OlZpZGVvRW5jb2Rlcjo6UmF0ZUNvbnRyb2xQYXJhbWV0ZXJzJiBwYXJhbWV0ZXJz
KSBvdmVycmlkZQotICAgIHsKLSAgICAgICAgR1NUX0lORk9fT0JKRUNUKG1fcGlwZWxpbmUuZ2V0
KCksICJOZXcgYml0cmF0ZTogJWQgLSBmcmFtZXJhdGUgaXMgJWYiLAotICAgICAgICAgICAgcGFy
YW1ldGVycy5iaXRyYXRlLmdldF9zdW1fYnBzKCksIHBhcmFtZXRlcnMuZnJhbWVyYXRlX2Zwcyk7
Ci0KLSAgICAgICAgYXV0byBjYXBzID0gYWRvcHRHUmVmKGdzdF9jYXBzX2NvcHkobV9yZXN0cmlj
dGlvbkNhcHMuZ2V0KCkpKTsKLQotICAgICAgICBTZXRSZXN0cmljdGlvbkNhcHMoV1RGTW92ZShj
YXBzKSk7Ci0KLSAgICAgICAgaWYgKG1fZW5jb2RlcikKLSAgICAgICAgICAgIGdfb2JqZWN0X3Nl
dChtX2VuY29kZXIuZ2V0KCksICJiaXRyYXRlIiwgcGFyYW1ldGVycy5iaXRyYXRlLmdldF9zdW1f
YnBzKCksIG51bGxwdHIpOwotICAgIH0KLQotICAgIEdzdEVsZW1lbnQqIHBpcGVsaW5lKCkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBtX3BpcGVsaW5lLmdldCgpOwotICAgIH0KLQotICAgIEdzdEVs
ZW1lbnQqIG1ha2VFbGVtZW50KGNvbnN0IGdjaGFyKiBmYWN0b3J5TmFtZSkKLSAgICB7Ci0gICAg
ICAgIHN0YXRpYyBBdG9taWM8dWludDMyX3Q+IGVsZW1lbnRJZDsKLSAgICAgICAgYXV0byBuYW1l
ID0gbWFrZVN0cmluZyhOYW1lKCksICItZW5jLSIsIGZhY3RvcnlOYW1lLCAiLSIsIGVsZW1lbnRJ
ZC5leGNoYW5nZUFkZCgxKSk7Ci0gICAgICAgIGF1dG8qIGVsZW0gPSBtYWtlR1N0cmVhbWVyRWxl
bWVudChmYWN0b3J5TmFtZSwgbmFtZS51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgcmV0dXJuIGVs
ZW07Ci0gICAgfQotCi0gICAgaW50MzJfdCBJbml0RW5jb2RlKGNvbnN0IHdlYnJ0Yzo6VmlkZW9D
b2RlYyogY29kZWNTZXR0aW5ncywgaW50MzJfdCwgc2l6ZV90KSBvdmVycmlkZQotICAgIHsKLSAg
ICAgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoY29kZWNTZXR0aW5ncywgV0VCUlRDX1ZJREVPX0NP
REVDX0VSUl9QQVJBTUVURVIpOwotICAgICAgICBnX3JldHVybl92YWxfaWZfZmFpbChjb2RlY1Nl
dHRpbmdzLT5jb2RlY1R5cGUgPT0gQ29kZWNUeXBlKCksIFdFQlJUQ19WSURFT19DT0RFQ19FUlJf
UEFSQU1FVEVSKTsKLQotICAgICAgICBpZiAod2VicnRjOjpTaW11bGNhc3RVdGlsaXR5OjpOdW1i
ZXJPZlNpbXVsY2FzdFN0cmVhbXMoKmNvZGVjU2V0dGluZ3MpID4gMSkgewotICAgICAgICAgICAg
R1NUX0VSUk9SKCJTaW11bGNhc3Qgbm90IHN1cHBvcnRlZC4iKTsKLSAgICAgICAgICAgIHJldHVy
biBXRUJSVENfVklERU9fQ09ERUNfRVJSX1NJTVVMQ0FTVF9QQVJBTUVURVJTX05PVF9TVVBQT1JU
RUQ7Ci0gICAgICAgIH0KLQotICAgICAgICBtX3BpcGVsaW5lID0gbWFrZUVsZW1lbnQoInBpcGVs
aW5lIik7Ci0KLSAgICAgICAgY29ubmVjdFNpbXBsZUJ1c01lc3NhZ2VDYWxsYmFjayhtX3BpcGVs
aW5lLmdldCgpKTsKLSAgICAgICAgbV9lbmNvZGVyID0gY3JlYXRlRW5jb2RlcigpOwotICAgICAg
ICBBU1NFUlQobV9lbmNvZGVyKTsKLQotICAgICAgICBnX29iamVjdF9zZXQobV9lbmNvZGVyLmdl
dCgpLCAia2V5ZnJhbWUtaW50ZXJ2YWwiLCBLZXlmcmFtZUludGVydmFsKGNvZGVjU2V0dGluZ3Mp
LCBudWxscHRyKTsKLQotICAgICAgICBtX3NyYyA9IG1ha2VFbGVtZW50KCJhcHBzcmMiKTsKLSAg
ICAgICAgZ19vYmplY3Rfc2V0KG1fc3JjLmdldCgpLCAiaXMtbGl2ZSIsIHRydWUsICJmb3JtYXQi
LCBHU1RfRk9STUFUX1RJTUUsIG51bGxwdHIpOwotCi0gICAgICAgIGF1dG8qIHZpZGVvY29udmVy
dCA9IG1ha2VFbGVtZW50KCJ2aWRlb2NvbnZlcnQiKTsKLSAgICAgICAgYXV0byogdmlkZW9zY2Fs
ZSA9IG1ha2VFbGVtZW50KCJ2aWRlb3NjYWxlIik7Ci0gICAgICAgIG1fc2luayA9IG1ha2VFbGVt
ZW50KCJhcHBzaW5rIik7Ci0gICAgICAgIGdfb2JqZWN0X3NldChtX3NpbmsuZ2V0KCksICJzeW5j
IiwgRkFMU0UsIG51bGxwdHIpOwotCi0gICAgICAgIG1fY2Fwc0ZpbHRlciA9IG1ha2VFbGVtZW50
KCJjYXBzZmlsdGVyIik7Ci0gICAgICAgIGlmIChtX3Jlc3RyaWN0aW9uQ2FwcykKLSAgICAgICAg
ICAgIGdfb2JqZWN0X3NldChtX2NhcHNGaWx0ZXIuZ2V0KCksICJjYXBzIiwgbV9yZXN0cmljdGlv
bkNhcHMuZ2V0KCksIG51bGxwdHIpOwotCi0gICAgICAgIGdzdF9iaW5fYWRkX21hbnkoR1NUX0JJ
Tl9DQVNUKG1fcGlwZWxpbmUuZ2V0KCkpLCBtX3NyYy5nZXQoKSwgdmlkZW9jb252ZXJ0LCB2aWRl
b3NjYWxlLCBtX2NhcHNGaWx0ZXIuZ2V0KCksIG1fZW5jb2Rlci5nZXQoKSwgbV9zaW5rLmdldCgp
LCBudWxscHRyKTsKLSAgICAgICAgaWYgKCFnc3RfZWxlbWVudF9saW5rX21hbnkobV9zcmMuZ2V0
KCksIHZpZGVvY29udmVydCwgdmlkZW9zY2FsZSwgbV9jYXBzRmlsdGVyLmdldCgpLCBtX2VuY29k
ZXIuZ2V0KCksIG1fc2luay5nZXQoKSwgbnVsbHB0cikpIHsKLSAgICAgICAgICAgIEdTVF9ERUJV
R19CSU5fVE9fRE9UX0ZJTEVfV0lUSF9UUyhHU1RfQklOX0NBU1QobV9waXBlbGluZS5nZXQoKSks
IEdTVF9ERUJVR19HUkFQSF9TSE9XX1ZFUkJPU0UsICJ3ZWJraXQtd2VicnRjLWVuY29kZXIuZXJy
b3IiKTsKLSAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlKG1fcGlwZWxpbmUuZ2V0KCksIEdTVF9TVEFURV9Q
TEFZSU5HKTsKLSAgICAgICAgR1NUX0RFQlVHX0JJTl9UT19ET1RfRklMRV9XSVRIX1RTKEdTVF9C
SU5fQ0FTVChtX3BpcGVsaW5lLmdldCgpKSwgR1NUX0RFQlVHX0dSQVBIX1NIT1dfVkVSQk9TRSwg
IndlYmtpdC13ZWJydGMtZW5jb2RlciIpOwotICAgICAgICByZXR1cm4gV0VCUlRDX1ZJREVPX0NP
REVDX09LOwotICAgIH0KLQotICAgIGludDMyX3QgUmVnaXN0ZXJFbmNvZGVDb21wbGV0ZUNhbGxi
YWNrKHdlYnJ0Yzo6RW5jb2RlZEltYWdlQ2FsbGJhY2sqIGNhbGxiYWNrKSBmaW5hbAotICAgIHsK
LSAgICAgICAgbV9pbWFnZVJlYWR5Q2IgPSBjYWxsYmFjazsKLQotICAgICAgICByZXR1cm4gV0VC
UlRDX1ZJREVPX0NPREVDX09LOwotICAgIH0KLQotICAgIGludDMyX3QgUmVsZWFzZSgpIGZpbmFs
Ci0gICAgewotICAgICAgICBtX2VuY29kZWRGcmFtZS5DbGVhckVuY29kZWREYXRhKCk7Ci0gICAg
ICAgIGlmIChtX3BpcGVsaW5lKSB7Ci0gICAgICAgICAgICBkaXNjb25uZWN0U2ltcGxlQnVzTWVz
c2FnZUNhbGxiYWNrKG1fcGlwZWxpbmUuZ2V0KCkpOwotICAgICAgICAgICAgZ3N0X2VsZW1lbnRf
c2V0X3N0YXRlKG1fcGlwZWxpbmUuZ2V0KCksIEdTVF9TVEFURV9OVUxMKTsKLSAgICAgICAgICAg
IG1fc3JjID0gbnVsbHB0cjsKLSAgICAgICAgICAgIG1fZW5jb2RlciA9IG51bGxwdHI7Ci0gICAg
ICAgICAgICBtX2NhcHNGaWx0ZXIgPSBudWxscHRyOwotICAgICAgICAgICAgbV9zaW5rID0gbnVs
bHB0cjsKLSAgICAgICAgICAgIG1fcGlwZWxpbmUgPSBudWxscHRyOwotICAgICAgICB9Ci0KLSAg
ICAgICAgcmV0dXJuIFdFQlJUQ19WSURFT19DT0RFQ19PSzsKLSAgICB9Ci0KLSAgICBpbnQzMl90
IHJldHVybkZyb21GbG93UmV0dXJuKEdzdEZsb3dSZXR1cm4gZmxvdykKLSAgICB7Ci0gICAgICAg
IHN3aXRjaCAoZmxvdykgewotICAgICAgICBjYXNlIEdTVF9GTE9XX09LOgotICAgICAgICAgICAg
cmV0dXJuIFdFQlJUQ19WSURFT19DT0RFQ19PSzsKLSAgICAgICAgY2FzZSBHU1RfRkxPV19GTFVT
SElORzoKLSAgICAgICAgICAgIHJldHVybiBXRUJSVENfVklERU9fQ09ERUNfVU5JTklUSUFMSVpF
RDsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBXRUJSVENfVklERU9fQ09E
RUNfRVJST1I7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBWaWRlb0VuY29kZXI6OkVuY29kZXJJ
bmZvIEdldEVuY29kZXJJbmZvKCkgY29uc3Qgb3ZlcnJpZGUKLSAgICB7Ci0gICAgICAgIEVuY29k
ZXJJbmZvIGluZm87Ci0gICAgICAgIGluZm8uc3VwcG9ydHNfbmF0aXZlX2hhbmRsZSA9IGZhbHNl
OwotICAgICAgICBpbmZvLmltcGxlbWVudGF0aW9uX25hbWUgPSAiR1N0cmVhbWVyIjsKLSAgICAg
ICAgaW5mby5oYXNfdHJ1c3RlZF9yYXRlX2NvbnRyb2xsZXIgPSB0cnVlOwotICAgICAgICBpbmZv
LmlzX2hhcmR3YXJlX2FjY2VsZXJhdGVkID0gdHJ1ZTsKLSAgICAgICAgaW5mby5oYXNfaW50ZXJu
YWxfc291cmNlID0gZmFsc2U7Ci0gICAgICAgIHJldHVybiBpbmZvOwotICAgIH0KLQotICAgIGlu
dDMyX3QgRW5jb2RlKGNvbnN0IHdlYnJ0Yzo6VmlkZW9GcmFtZSYgZnJhbWUsCi0gICAgICAgIGNv
bnN0IHN0ZDo6dmVjdG9yPHdlYnJ0Yzo6VmlkZW9GcmFtZVR5cGU+KiBmcmFtZVR5cGVzKSBmaW5h
bAotICAgIHsKLSAgICAgICAgaW50MzJfdCByZXM7Ci0KLSAgICAgICAgaWYgKCFtX2ltYWdlUmVh
ZHlDYikgewotICAgICAgICAgICAgR1NUX0lORk9fT0JKRUNUKG1fcGlwZWxpbmUuZ2V0KCksICJO
byBlbmNvZGVkIGNhbGxiYWNrIHNldCB5ZXQhIik7Ci0KLSAgICAgICAgICAgIHJldHVybiBXRUJS
VENfVklERU9fQ09ERUNfVU5JTklUSUFMSVpFRDsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICgh
bV9zcmMpIHsKLSAgICAgICAgICAgIEdTVF9JTkZPX09CSkVDVChtX3BpcGVsaW5lLmdldCgpLCAi
Tm8gc291cmNlIHNldCB5ZXQhIik7Ci0KLSAgICAgICAgICAgIHJldHVybiBXRUJSVENfVklERU9f
Q09ERUNfVU5JTklUSUFMSVpFRDsKLSAgICAgICAgfQotCi0gICAgICAgIGF1dG8gc2FtcGxlID0g
R1N0cmVhbWVyU2FtcGxlRnJvbUxpYldlYlJUQ1ZpZGVvRnJhbWUoZnJhbWUpOwotICAgICAgICBh
dXRvIGJ1ZmZlciA9IGdzdF9zYW1wbGVfZ2V0X2J1ZmZlcihzYW1wbGUuZ2V0KCkpOwotCi0gICAg
ICAgIGlmICghR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQobV9maXJzdEZyYW1lUHRzKSkgewotICAg
ICAgICAgICAgbV9maXJzdEZyYW1lUHRzID0gR1NUX0JVRkZFUl9QVFMoYnVmZmVyKTsKLSAgICAg
ICAgICAgIGF1dG8gcGFkID0gYWRvcHRHUmVmKGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkKG1f
c3JjLmdldCgpLCAic3JjIikpOwotICAgICAgICAgICAgZ3N0X3BhZF9zZXRfb2Zmc2V0KHBhZC5n
ZXQoKSwgLW1fZmlyc3RGcmFtZVB0cyk7Ci0gICAgICAgIH0KLQotICAgICAgICBmb3IgKGF1dG8g
ZnJhbWVfdHlwZSA6ICpmcmFtZVR5cGVzKSB7Ci0gICAgICAgICAgICBpZiAoZnJhbWVfdHlwZSA9
PSB3ZWJydGM6OlZpZGVvRnJhbWVUeXBlOjprVmlkZW9GcmFtZUtleSkgewotICAgICAgICAgICAg
ICAgIGF1dG8gcGFkID0gYWRvcHRHUmVmKGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkKG1fc3Jj
LmdldCgpLCAic3JjIikpOwotICAgICAgICAgICAgICAgIGF1dG8gZm9yY2VLZXlVbml0ID0gZ3N0
X3ZpZGVvX2V2ZW50X25ld19kb3duc3RyZWFtX2ZvcmNlX2tleV91bml0KEdTVF9DTE9DS19USU1F
X05PTkUsCi0gICAgICAgICAgICAgICAgICAgIEdTVF9DTE9DS19USU1FX05PTkUsIEdTVF9DTE9D
S19USU1FX05PTkUsIEZBTFNFLCAxKTsKLSAgICAgICAgICAgICAgICBHU1RfSU5GT19PQkpFQ1Qo
bV9waXBlbGluZS5nZXQoKSwgIlJlcXVlc3RpbmcgS0VZRlJBTUUhIik7Ci0KLSAgICAgICAgICAg
ICAgICBpZiAoIWdzdF9wYWRfcHVzaF9ldmVudChwYWQuZ2V0KCksIGZvcmNlS2V5VW5pdCkpCi0g
ICAgICAgICAgICAgICAgICAgIEdTVF9XQVJOSU5HX09CSkVDVChwaXBlbGluZSgpLCAiQ291bGQg
bm90IHNlbmQgRm9yY2VLZXlVbml0IGV2ZW50Iik7Ci0KLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHJlcyA9IHJldHVybkZyb21GbG93
UmV0dXJuKGdzdF9hcHBfc3JjX3B1c2hfc2FtcGxlKEdTVF9BUFBfU1JDKG1fc3JjLmdldCgpKSwg
c2FtcGxlLmdldCgpKSk7Ci0gICAgICAgIGlmIChyZXMgIT0gV0VCUlRDX1ZJREVPX0NPREVDX09L
KQotICAgICAgICAgICAgcmV0dXJuIHJlczsKLQotICAgICAgICBhdXRvIGVuY29kZWRTYW1wbGUg
PSBhZG9wdEdSZWYoZ3N0X2FwcF9zaW5rX3RyeV9wdWxsX3NhbXBsZShHU1RfQVBQX1NJTksobV9z
aW5rLmdldCgpKSwgNSAqIEdTVF9TRUNPTkQpKTsKLSAgICAgICAgaWYgKCFlbmNvZGVkU2FtcGxl
KSB7Ci0gICAgICAgICAgICBHU1RfRVJST1IoIkRpZG4ndCBnZXQgYW55IGVuY29kZWRTYW1wbGUi
KTsKLSAgICAgICAgICAgIHJldHVybiBXRUJSVENfVklERU9fQ09ERUNfRVJST1I7Ci0gICAgICAg
IH0KLQotICAgICAgICBhdXRvIGVuY29kZWREYXRhID0gR1N0cmVhbWVyRW5jb2RlZEltYWdlQnVm
ZmVyOjpjcmVhdGUoV1RGTW92ZShlbmNvZGVkU2FtcGxlKSk7Ci0gICAgICAgIGNvbnN0IGF1dG8q
IGVuY29kZWRCdWZmZXIgPSBlbmNvZGVkRGF0YS0+Z2V0QnVmZmVyKCk7Ci0gICAgICAgIGF1dG8g
cmVzb2x1dGlvbiA9IGVuY29kZWREYXRhLT5nZXRWaWRlb1Jlc29sdXRpb24oKTsKLSAgICAgICAg
bV9lbmNvZGVkRnJhbWUuU2V0RW5jb2RlZERhdGEoZW5jb2RlZERhdGEpOwotICAgICAgICBpZiAo
IW1fZW5jb2RlZEZyYW1lLnNpemUoKSkKLSAgICAgICAgICAgIHJldHVybiBXRUJSVENfVklERU9f
Q09ERUNfT0s7Ci0KLSAgICAgICAgQVNTRVJUKHJlc29sdXRpb24pOwotICAgICAgICBtX2VuY29k
ZWRGcmFtZS5fZW5jb2RlZFdpZHRoID0gcmVzb2x1dGlvbi0+d2lkdGgoKTsKLSAgICAgICAgbV9l
bmNvZGVkRnJhbWUuX2VuY29kZWRIZWlnaHQgPSByZXNvbHV0aW9uLT5oZWlnaHQoKTsKLSAgICAg
ICAgbV9lbmNvZGVkRnJhbWUuX2ZyYW1lVHlwZSA9IEdTVF9CVUZGRVJfRkxBR19JU19TRVQoZW5j
b2RlZEJ1ZmZlciwgR1NUX0JVRkZFUl9GTEFHX0RFTFRBX1VOSVQpID8gd2VicnRjOjpWaWRlb0Zy
YW1lVHlwZTo6a1ZpZGVvRnJhbWVEZWx0YSA6IHdlYnJ0Yzo6VmlkZW9GcmFtZVR5cGU6OmtWaWRl
b0ZyYW1lS2V5OwotICAgICAgICBtX2VuY29kZWRGcmFtZS5jYXB0dXJlX3RpbWVfbXNfID0gZnJh
bWUucmVuZGVyX3RpbWVfbXMoKTsKLSAgICAgICAgbV9lbmNvZGVkRnJhbWUuU2V0VGltZXN0YW1w
KGZyYW1lLnRpbWVzdGFtcCgpKTsKLQotICAgICAgICBHU1RfTE9HX09CSkVDVChtX3BpcGVsaW5l
LmdldCgpLCAiR290IGJ1ZmZlciBjYXB0dXJlX3RpbWVfbXM6ICUiIEdfR0lOVDY0X0ZPUk1BVCAi
IF90aW1lc3RhbXA6ICV1IiwKLSAgICAgICAgICAgIG1fZW5jb2RlZEZyYW1lLmNhcHR1cmVfdGlt
ZV9tc18sIG1fZW5jb2RlZEZyYW1lLlRpbWVzdGFtcCgpKTsKLQotICAgICAgICB3ZWJydGM6OkNv
ZGVjU3BlY2lmaWNJbmZvIGNvZGVjSW5mbzsKLSAgICAgICAgUG9wdWxhdGVDb2RlY1NwZWNpZmlj
KCZjb2RlY0luZm8sIGVuY29kZWRCdWZmZXIpOwotICAgICAgICB3ZWJydGM6OkVuY29kZWRJbWFn
ZUNhbGxiYWNrOjpSZXN1bHQgcmVzdWx0ID0gbV9pbWFnZVJlYWR5Q2ItPk9uRW5jb2RlZEltYWdl
KG1fZW5jb2RlZEZyYW1lLCAmY29kZWNJbmZvKTsKLSAgICAgICAgaWYgKHJlc3VsdC5lcnJvciAh
PSB3ZWJydGM6OkVuY29kZWRJbWFnZUNhbGxiYWNrOjpSZXN1bHQ6Ok9LKQotICAgICAgICAgICAg
R1NUX0VSUk9SX09CSkVDVChtX3BpcGVsaW5lLmdldCgpLCAiRW5jb2RlIGNhbGxiYWNrIGZhaWxl
ZDogJWQiLCByZXN1bHQuZXJyb3IpOwotCi0gICAgICAgIHJldHVybiBXRUJSVENfVklERU9fQ09E
RUNfT0s7Ci0gICAgfQotCi0gICAgR1JlZlB0cjxHc3RFbGVtZW50PiBjcmVhdGVFbmNvZGVyKHZv
aWQpCi0gICAgewotICAgICAgICBHUmVmUHRyPEdzdEVsZW1lbnQ+IHdlYnJ0Y2VuY29kZXIgPSBn
c3RfZWxlbWVudF9mYWN0b3J5X21ha2UoIndlYnJ0Y3ZpZGVvZW5jb2RlciIsIE5VTEwpOwotICAg
ICAgICBnX29iamVjdF9zZXQod2VicnRjZW5jb2Rlci5nZXQoKSwgImZvcm1hdCIsIGFkb3B0R1Jl
Zihnc3RfY2Fwc19mcm9tX3N0cmluZyhDYXBzKCkpKS5nZXQoKSwgTlVMTCk7Ci0KLSAgICAgICAg
R1JlZlB0cjxHc3RFbGVtZW50PiBlbmNvZGVyID0gbnVsbHB0cjsKLSAgICAgICAgZ19vYmplY3Rf
Z2V0KHdlYnJ0Y2VuY29kZXIuZ2V0KCksICJlbmNvZGVyIiwgJmVuY29kZXIub3V0UHRyKCksIE5V
TEwpOwotICAgICAgICBpZiAoIWVuY29kZXIpIHsKLSAgICAgICAgICAgIEdTVF9JTkZPKCJObyBl
bmNvZGVyIGZvdW5kIGZvciAlcyIsIENhcHMoKSk7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiB3ZWJydGNlbmNvZGVyOwotICAgIH0KLQot
ICAgIHZvaWQgQWRkQ29kZWNJZlN1cHBvcnRlZChzdGQ6OnZlY3Rvcjx3ZWJydGM6OlNkcFZpZGVv
Rm9ybWF0PiYgc3VwcG9ydGVkRm9ybWF0cykKLSAgICB7Ci0gICAgICAgIGlmIChhdXRvIGVuY29k
ZXIgPSBjcmVhdGVFbmNvZGVyKCkpIHsKLSAgICAgICAgICAgIGF1dG8gZm9ybWF0cyA9IENvbmZp
Z3VyZVN1cHBvcnRlZENvZGVjKCk7Ci0gICAgICAgICAgICBzdXBwb3J0ZWRGb3JtYXRzLmluc2Vy
dChzdXBwb3J0ZWRGb3JtYXRzLmVuZCgpLCBmb3JtYXRzLmJlZ2luKCksIGZvcm1hdHMuZW5kKCkp
OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgdmlydHVhbCBjb25zdCBnY2hhciogQ2FwcygpCi0g
ICAgewotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHN0ZDo6
dmVjdG9yPHdlYnJ0Yzo6U2RwVmlkZW9Gb3JtYXQ+IENvbmZpZ3VyZVN1cHBvcnRlZENvZGVjKCkK
LSAgICB7Ci0gICAgICAgIHJldHVybiB7IHdlYnJ0Yzo6U2RwVmlkZW9Gb3JtYXQoTmFtZSgpKSB9
OwotICAgIH0KLQotICAgIHZpcnR1YWwgd2VicnRjOjpWaWRlb0NvZGVjVHlwZSBDb2RlY1R5cGUo
KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIFBvcHVsYXRlQ29kZWNTcGVjaWZpYyh3ZWJydGM6OkNv
ZGVjU3BlY2lmaWNJbmZvKiwgY29uc3QgR3N0QnVmZmVyKikgPSAwOwotICAgIHZpcnR1YWwgY29u
c3QgZ2NoYXIqIE5hbWUoKSA9IDA7Ci0gICAgdmlydHVhbCBpbnQgS2V5ZnJhbWVJbnRlcnZhbChj
b25zdCB3ZWJydGM6OlZpZGVvQ29kZWMqIGNvZGVjU2V0dGluZ3MpID0gMDsKLQotICAgIHZvaWQg
U2V0UmVzdHJpY3Rpb25DYXBzKEdSZWZQdHI8R3N0Q2Fwcz4gY2FwcykKLSAgICB7Ci0gICAgICAg
IGlmIChtX3Jlc3RyaWN0aW9uQ2FwcykKLSAgICAgICAgICAgIGdfb2JqZWN0X3NldChtX2NhcHNG
aWx0ZXIuZ2V0KCksICJjYXBzIiwgbV9yZXN0cmljdGlvbkNhcHMuZ2V0KCksIG51bGxwdHIpOwot
Ci0gICAgICAgIG1fcmVzdHJpY3Rpb25DYXBzID0gY2FwczsKLSAgICB9Ci0KLXByaXZhdGU6Ci0g
ICAgR1JlZlB0cjxHc3RFbGVtZW50PiBtX3BpcGVsaW5lOwotICAgIEdSZWZQdHI8R3N0RWxlbWVu
dD4gbV9zcmM7Ci0gICAgR1JlZlB0cjxHc3RFbGVtZW50PiBtX2VuY29kZXI7Ci0gICAgR1JlZlB0
cjxHc3RFbGVtZW50PiBtX2NhcHNGaWx0ZXI7Ci0KLSAgICB3ZWJydGM6OkVuY29kZWRJbWFnZUNh
bGxiYWNrKiBtX2ltYWdlUmVhZHlDYjsKLSAgICBHc3RDbG9ja1RpbWUgbV9maXJzdEZyYW1lUHRz
OwotICAgIEdSZWZQdHI8R3N0Q2Fwcz4gbV9yZXN0cmljdGlvbkNhcHM7Ci0gICAgd2VicnRjOjpF
bmNvZGVkSW1hZ2UgbV9lbmNvZGVkRnJhbWU7Ci0KLSAgICBHUmVmUHRyPEdzdEVsZW1lbnQ+IG1f
c2luazsKLX07Ci0KLWNsYXNzIEdTdHJlYW1lckgyNjRFbmNvZGVyIDogcHVibGljIEdTdHJlYW1l
clZpZGVvRW5jb2RlciB7Ci1wdWJsaWM6Ci0gICAgR1N0cmVhbWVySDI2NEVuY29kZXIoKSB7IH0K
LQotICAgIEdTdHJlYW1lckgyNjRFbmNvZGVyKGNvbnN0IHdlYnJ0Yzo6U2RwVmlkZW9Gb3JtYXQm
IGZvcm1hdCkKLSAgICAgICAgOiBtX3BhcnNlcihnc3RfaDI2NF9uYWxfcGFyc2VyX25ldygpKQot
ICAgICAgICAsIHBhY2tldGl6YXRpb25Nb2RlKHdlYnJ0Yzo6SDI2NFBhY2tldGl6YXRpb25Nb2Rl
OjpOb25JbnRlcmxlYXZlZCkKLSAgICB7Ci0gICAgICAgIGF1dG8gaXQgPSBmb3JtYXQucGFyYW1l
dGVycy5maW5kKGNyaWNrZXQ6OmtIMjY0Rm10cFBhY2tldGl6YXRpb25Nb2RlKTsKLQotICAgICAg
ICBpZiAoaXQgIT0gZm9ybWF0LnBhcmFtZXRlcnMuZW5kKCkgJiYgaXQtPnNlY29uZCA9PSAiMSIp
Ci0gICAgICAgICAgICBwYWNrZXRpemF0aW9uTW9kZSA9IHdlYnJ0Yzo6SDI2NFBhY2tldGl6YXRp
b25Nb2RlOjpOb25JbnRlcmxlYXZlZDsKLSAgICB9Ci0KLSAgICBpbnQgS2V5ZnJhbWVJbnRlcnZh
bChjb25zdCB3ZWJydGM6OlZpZGVvQ29kZWMqIGNvZGVjU2V0dGluZ3MpIGZpbmFsCi0gICAgewot
ICAgICAgICByZXR1cm4gY29kZWNTZXR0aW5ncy0+SDI2NCgpLmtleUZyYW1lSW50ZXJ2YWw7Ci0g
ICAgfQotCi0gICAgc3RkOjp2ZWN0b3I8d2VicnRjOjpTZHBWaWRlb0Zvcm1hdD4gQ29uZmlndXJl
U3VwcG9ydGVkQ29kZWMoKSBmaW5hbAotICAgIHsKLSAgICAgICAgcmV0dXJuIHN1cHBvcnRlZEgy
NjRGb3JtYXRzKCk7Ci0gICAgfQotCi0gICAgY29uc3QgZ2NoYXIqIENhcHMoKSBmaW5hbCB7IHJl
dHVybiAidmlkZW8veC1oMjY0IjsgfQotICAgIGNvbnN0IGdjaGFyKiBOYW1lKCkgZmluYWwgeyBy
ZXR1cm4gY3JpY2tldDo6a0gyNjRDb2RlY05hbWU7IH0KLSAgICBHc3RIMjY0TmFsUGFyc2VyKiBt
X3BhcnNlcjsKLSAgICB3ZWJydGM6OlZpZGVvQ29kZWNUeXBlIENvZGVjVHlwZSgpIGZpbmFsIHsg
cmV0dXJuIHdlYnJ0Yzo6a1ZpZGVvQ29kZWNIMjY0OyB9Ci0KLSAgICB2b2lkIFBvcHVsYXRlQ29k
ZWNTcGVjaWZpYyh3ZWJydGM6OkNvZGVjU3BlY2lmaWNJbmZvKiBjb2RlY1NwZWNpZmljSW5mb3Ms
IGNvbnN0IEdzdEJ1ZmZlciopIGZpbmFsCi0gICAgewotICAgICAgICBjb2RlY1NwZWNpZmljSW5m
b3MtPmNvZGVjVHlwZSA9IENvZGVjVHlwZSgpOwotICAgICAgICB3ZWJydGM6OkNvZGVjU3BlY2lm
aWNJbmZvSDI2NCogaDI2NEluZm8gPSAmKGNvZGVjU3BlY2lmaWNJbmZvcy0+Y29kZWNTcGVjaWZp
Yy5IMjY0KTsKLSAgICAgICAgaDI2NEluZm8tPnBhY2tldGl6YXRpb25fbW9kZSA9IHBhY2tldGl6
YXRpb25Nb2RlOwotICAgIH0KLQotICAgIHdlYnJ0Yzo6SDI2NFBhY2tldGl6YXRpb25Nb2RlIHBh
Y2tldGl6YXRpb25Nb2RlOwotfTsKLQotc3RkOjp1bmlxdWVfcHRyPHdlYnJ0Yzo6VmlkZW9FbmNv
ZGVyPiBHU3RyZWFtZXJWaWRlb0VuY29kZXJGYWN0b3J5OjpDcmVhdGVWaWRlb0VuY29kZXIoY29u
c3Qgd2VicnRjOjpTZHBWaWRlb0Zvcm1hdCYgZm9ybWF0KQotewotICAgIC8vIEZJWE1FOiB2cHhl
bmMgZG9lc24ndCBzdXBwb3J0IHNpbXVsY2FzdCBub3IgU1ZDLiB2cDllbmMgc3VwcG9ydHMgb25s
eSBwcm9maWxlIDAuIFRoZXNlCi0gICAgLy8gc2hvcnRjb21pbmdzIHRyaWdnZXIgd2VicnRjL3Zw
OS5odG1sIGFuZCB3ZWJydGMvc2ltdWxjYXN0LWgyNjQuaHRtbCB0aW1lb3V0cyBhbmQgbW9zdCBs
aWtlbHkKLSAgICAvLyBiYWQgVVggaW4gV1BFL0dUSyBicm93c2Vycy4gU28gZm9yIG5vdyB3ZSBw
cmVmZXIgdG8gdXNlIExpYldlYlJUQydzIFZQeCBlbmNvZGVycy4KLSAgICBpZiAoZm9ybWF0Lm5h
bWUgPT0gY3JpY2tldDo6a1ZwOUNvZGVjTmFtZSkgewotICAgICAgICBHU1RfSU5GTygiVXNpbmcg
VlA5IEVuY29kZXIgZnJvbSBMaWJXZWJSVEMuIik7Ci0gICAgICAgIHJldHVybiB3ZWJydGM6OlZQ
OUVuY29kZXI6OkNyZWF0ZShjcmlja2V0OjpWaWRlb0NvZGVjKGZvcm1hdCkpOwotICAgIH0KLQot
ICAgIGlmIChmb3JtYXQubmFtZSA9PSBjcmlja2V0OjprVnA4Q29kZWNOYW1lKSB7Ci0gICAgICAg
IEdTVF9JTkZPKCJVc2luZyBWUDggRW5jb2RlciBmcm9tIExpYldlYlJUQy4iKTsKLSAgICAgICAg
cmV0dXJuIG1ha2VVbmlxdWVXaXRob3V0RmFzdE1hbGxvY0NoZWNrPHdlYnJ0Yzo6TGlidnB4VnA4
RW5jb2Rlcj4od2VicnRjOjpMaWJ2cHhJbnRlcmZhY2U6OkNyZWF0ZSgpLCB3ZWJydGM6OlZQOEVu
Y29kZXI6OlNldHRpbmdzKCkpOwotICAgIH0KLQotICAgIGlmIChmb3JtYXQubmFtZSA9PSBjcmlj
a2V0OjprSDI2NENvZGVjTmFtZSkgewotI2lmIFdFQktJVF9MSUJXRUJSVENfT1BFTkgyNjRfRU5D
T0RFUgotICAgICAgICBHU1RfSU5GTygiVXNpbmcgT3BlbkgyNjQgbGlid2VicnRjIGVuY29kZXIu
Iik7Ci0gICAgICAgIHJldHVybiB3ZWJydGM6OkgyNjRFbmNvZGVyOjpDcmVhdGUoY3JpY2tldDo6
VmlkZW9Db2RlYyhmb3JtYXQpKTsKLSNlbHNlCi0gICAgICAgIEdTVF9JTkZPKCJVc2luZyBIMjY0
IEdTdHJlYW1lciBlbmNvZGVyLiIpOwotICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZTxHU3RyZWFt
ZXJIMjY0RW5jb2Rlcj4oZm9ybWF0KTsKLSNlbmRpZgotICAgIH0KLQotICAgIHJldHVybiBudWxs
cHRyOwotfQotCi1HU3RyZWFtZXJWaWRlb0VuY29kZXJGYWN0b3J5OjpHU3RyZWFtZXJWaWRlb0Vu
Y29kZXJGYWN0b3J5KGJvb2wgaXNTdXBwb3J0aW5nVlA5UHJvZmlsZTAsIGJvb2wgaXNTdXBwb3J0
aW5nVlA5UHJvZmlsZTIpCi0gICAgOiBtX2lzU3VwcG9ydGluZ1ZQOVByb2ZpbGUwKGlzU3VwcG9y
dGluZ1ZQOVByb2ZpbGUwKQotICAgICwgbV9pc1N1cHBvcnRpbmdWUDlQcm9maWxlMihpc1N1cHBv
cnRpbmdWUDlQcm9maWxlMikKLXsKLSAgICBlbnN1cmVHU3RyZWFtZXJJbml0aWFsaXplZCgpOwot
Ci0gICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIGRlYnVnUmVnaXN0ZXJlZEZsYWc7Ci0gICAgc3Rk
OjpjYWxsX29uY2UoZGVidWdSZWdpc3RlcmVkRmxhZywgW10gewotICAgICAgICBHU1RfREVCVUdf
Q0FURUdPUllfSU5JVCh3ZWJraXRfd2VicnRjZW5jX2RlYnVnLCAid2Via2l0bGlid2VicnRjdmlk
ZW9lbmNvZGVyIiwgMCwgIldlYktpdCBXZWJSVEMgdmlkZW8gZW5jb2RlciIpOwotICAgICAgICBh
dXRvIGZhY3RvcnkgPSBhZG9wdEdSZWYoZ3N0X2VsZW1lbnRfZmFjdG9yeV9maW5kKCJ3ZWJydGN2
aWRlb2VuY29kZXIiKSk7Ci0gICAgICAgIGlmICghZmFjdG9yeSkKLSAgICAgICAgICAgIGdzdF9l
bGVtZW50X3JlZ2lzdGVyKG51bGxwdHIsICJ3ZWJydGN2aWRlb2VuY29kZXIiLCBHU1RfUkFOS19O
T05FLCBXRUJLSVRfVFlQRV9XRUJSVENfVklERU9fRU5DT0RFUik7Ci0gICAgfSk7Ci19Ci0KLXN0
ZDo6dmVjdG9yPHdlYnJ0Yzo6U2RwVmlkZW9Gb3JtYXQ+IEdTdHJlYW1lclZpZGVvRW5jb2RlckZh
Y3Rvcnk6OkdldFN1cHBvcnRlZEZvcm1hdHMoKSBjb25zdAotewotICAgIHN0ZDo6dmVjdG9yPHdl
YnJ0Yzo6U2RwVmlkZW9Gb3JtYXQ+IHN1cHBvcnRlZENvZGVjczsKLQotICAgIHN1cHBvcnRlZENv
ZGVjcy5wdXNoX2JhY2sod2VicnRjOjpTZHBWaWRlb0Zvcm1hdChjcmlja2V0OjprVnA4Q29kZWNO
YW1lKSk7Ci0gICAgaWYgKG1faXNTdXBwb3J0aW5nVlA5UHJvZmlsZTApCi0gICAgICAgIHN1cHBv
cnRlZENvZGVjcy5wdXNoX2JhY2sod2VicnRjOjpTZHBWaWRlb0Zvcm1hdChjcmlja2V0OjprVnA5
Q29kZWNOYW1lLCB7eyJwcm9maWxlLWlkIiwgIjAifX0pKTsKLSAgICBpZiAobV9pc1N1cHBvcnRp
bmdWUDlQcm9maWxlMikKLSAgICAgICAgc3VwcG9ydGVkQ29kZWNzLnB1c2hfYmFjayh3ZWJydGM6
OlNkcFZpZGVvRm9ybWF0KGNyaWNrZXQ6OmtWcDlDb2RlY05hbWUsIHt7InByb2ZpbGUtaWQiLCAi
MiJ9fSkpOwotCi0gICAgLy8gSWYgT3BlbkgyNjQgaXMgcHJlc2VudCwgcHJlZmVyIGl0IG92ZXIg
dGhlIEdTdHJlYW1lciBlbmNvZGVycyAoeDI2NGVuYywgdXN1YWxseSkuCi0jaWYgV0VCS0lUX0xJ
QldFQlJUQ19PUEVOSDI2NF9FTkNPREVSCi0gICAgYXV0byBmb3JtYXRzID0gc3VwcG9ydGVkSDI2
NEZvcm1hdHMoKTsKLSAgICBzdXBwb3J0ZWRDb2RlY3MuaW5zZXJ0KHN1cHBvcnRlZENvZGVjcy5l
bmQoKSwgZm9ybWF0cy5iZWdpbigpLCBmb3JtYXRzLmVuZCgpKTsKLSNlbHNlCi0gICAgR1N0cmVh
bWVySDI2NEVuY29kZXIoKS5BZGRDb2RlY0lmU3VwcG9ydGVkKHN1cHBvcnRlZENvZGVjcyk7Ci0j
ZW5kaWYKLQotICAgIHJldHVybiBzdXBwb3J0ZWRDb2RlY3M7Ci19Ci0KLX0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVk
aWFzdHJlYW0vbGlid2VicnRjL0dTdHJlYW1lclZpZGVvRW5jb2RlckZhY3RvcnkuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2xpYndlYnJ0Yy9HU3RyZWFtZXJWaWRlb0Vu
Y29kZXJGYWN0b3J5LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYyMDcxNTQ5YTM0
YWQ2NWVkMzcwY2M2ODAzMzI2YjRhZjhlYjAyMTguLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0v
bGlid2VicnRjL0dTdHJlYW1lclZpZGVvRW5jb2RlckZhY3RvcnkuaAorKysgL2Rldi9udWxsCkBA
IC0xLDQ5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTggTWV0cm9sb2dpY2FsIEdy
b3VwIEIuVi4KLSAqIENvcHlyaWdodCAoQykgMjAxOCBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWlu
dCB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgot
ICovCi0KLSNwcmFnbWEgb25jZQotCi0jaWYgVVNFKExJQldFQlJUQykgJiYgVVNFKEdTVFJFQU1F
UikKLSNpbmNsdWRlICJMaWJXZWJSVENNYWNyb3MuaCIKLSNpbmNsdWRlICJhcGkvdmlkZW9fY29k
ZWNzL3ZpZGVvX2VuY29kZXJfZmFjdG9yeS5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNs
YXNzIEdTdHJlYW1lclZpZGVvRW5jb2RlckZhY3RvcnkgZmluYWwgOiBwdWJsaWMgd2VicnRjOjpW
aWRlb0VuY29kZXJGYWN0b3J5IHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1Ymxp
YzoKLSAgICBHU3RyZWFtZXJWaWRlb0VuY29kZXJGYWN0b3J5KGJvb2wgaXNTdXBwb3J0aW5nVlA5
UHJvZmlsZTAsIGJvb2wgaXNTdXBwb3J0aW5nVlA5UHJvZmlsZTIpOwotCi1wcml2YXRlOgotICAg
IHN0ZDo6dmVjdG9yPHdlYnJ0Yzo6U2RwVmlkZW9Gb3JtYXQ+IEdldFN1cHBvcnRlZEZvcm1hdHMo
KSBjb25zdCBvdmVycmlkZTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8d2VicnRjOjpWaWRlb0VuY29k
ZXI+IENyZWF0ZVZpZGVvRW5jb2Rlcihjb25zdCB3ZWJydGM6OlNkcFZpZGVvRm9ybWF0JikgZmlu
YWw7Ci0gICAgQ29kZWNJbmZvIFF1ZXJ5VmlkZW9FbmNvZGVyKGNvbnN0IHdlYnJ0Yzo6U2RwVmlk
ZW9Gb3JtYXQmKSBjb25zdCBvdmVycmlkZQotICAgIHsKLSAgICAgICAgLy8gRklYTUU6IERldGVj
dCB3aGV0aGVyIHRoZSBkZWNvZGVyIGlzIEhXIGFjY2VsZXJhdGVkLgotCi0gICAgICAgIHJldHVy
biB7IGZhbHNlIH07Ci0gICAgfQotCi0gICAgYm9vbCBtX2lzU3VwcG9ydGluZ1ZQOVByb2ZpbGUw
OwotICAgIGJvb2wgbV9pc1N1cHBvcnRpbmdWUDlQcm9maWxlMjsKLX07Ci19Ci0KLSNlbmRpZgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbGlid2VicnRj
L0xpYldlYlJUQ1Byb3ZpZGVyR1N0cmVhbWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21lZGlhc3RyZWFtL2xpYndlYnJ0Yy9MaWJXZWJSVENQcm92aWRlckdTdHJlYW1lci5jcHAKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcwZTgxNDdjNmMxZGE5MmZjNjhmNjUyYjkzYzJj
M2Y1NmE3Y2Y5YzYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbGlid2VicnRjL0xpYldlYlJU
Q1Byb3ZpZGVyR1N0cmVhbWVyLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDU4ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgSWdhbGlhIFMuTC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkxpYldlYlJUQ1Byb3Zp
ZGVyR1N0cmVhbWVyLmgiCi0KLSNpZiBVU0UoTElCV0VCUlRDKSAmJiBVU0UoR1NUUkVBTUVSKQot
Ci0jaW5jbHVkZSAiUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oIgotI2luY2x1ZGUgPHd0Zi9Vbmlx
dWVSZWYuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1VbmlxdWVSZWY8TGliV2ViUlRDUHJv
dmlkZXI+IExpYldlYlJUQ1Byb3ZpZGVyOjpjcmVhdGUoKQotewotICAgIHJldHVybiBtYWtlVW5p
cXVlUmVmPExpYldlYlJUQ1Byb3ZpZGVyR1N0cmVhbWVyPigpOwotfQotCi1ib29sIExpYldlYlJU
Q1Byb3ZpZGVyOjp3ZWJSVENBdmFpbGFibGUoKQotewotICAgIHJldHVybiB0cnVlOwotfQotCi1z
dGQ6OnVuaXF1ZV9wdHI8d2VicnRjOjpWaWRlb0RlY29kZXJGYWN0b3J5PiBMaWJXZWJSVENQcm92
aWRlckdTdHJlYW1lcjo6Y3JlYXRlRGVjb2RlckZhY3RvcnkoKQotewotICAgIHJldHVybiBtYWtl
VW5pcXVlPEdTdHJlYW1lclZpZGVvRGVjb2RlckZhY3Rvcnk+KGlzU3VwcG9ydGluZ1ZQOVByb2Zp
bGUwKCksIGlzU3VwcG9ydGluZ1ZQOVByb2ZpbGUyKCkpOwotfQotCi1zdGQ6OnVuaXF1ZV9wdHI8
d2VicnRjOjpWaWRlb0VuY29kZXJGYWN0b3J5PiBMaWJXZWJSVENQcm92aWRlckdTdHJlYW1lcjo6
Y3JlYXRlRW5jb2RlckZhY3RvcnkoKQotewotICAgIHJldHVybiBtYWtlVW5pcXVlPEdTdHJlYW1l
clZpZGVvRW5jb2RlckZhY3Rvcnk+KGlzU3VwcG9ydGluZ1ZQOVByb2ZpbGUwKCksIGlzU3VwcG9y
dGluZ1ZQOVByb2ZpbGUyKCkpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRp
ZiAvLyBVU0UoTElCV0VCUlRDKSAmJiBVU0UoR1NUUkVBTUVSKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbGlid2VicnRjL0xpYldlYlJUQ1Byb3ZpZGVy
R1N0cmVhbWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9saWJ3ZWJy
dGMvTGliV2ViUlRDUHJvdmlkZXJHU3RyZWFtZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggZWI5YjMzZjkzMjEwOGNiYTgzZmYxMzI2MzMxYTRiNjQ3YjlkNTYyMS4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tZWRpYXN0cmVhbS9saWJ3ZWJydGMvTGliV2ViUlRDUHJvdmlkZXJHU3RyZWFtZXIuaAor
KysgL2Rldi9udWxsCkBAIC0xLDQ3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcg
SWdhbGlhIFMuTC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
Ci0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNl
Ci0KLSNpbmNsdWRlICJMaWJXZWJSVENQcm92aWRlci5oIgotCi0jaWYgVVNFKExJQldFQlJUQykg
JiYgVVNFKEdTVFJFQU1FUikKLQotI2luY2x1ZGUgIkdTdHJlYW1lclZpZGVvRGVjb2RlckZhY3Rv
cnkuaCIKLSNpbmNsdWRlICJHU3RyZWFtZXJWaWRlb0VuY29kZXJGYWN0b3J5LmgiCi0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgV0VCQ09SRV9FWFBPUlQgTGliV2ViUlRDUHJvdmlkZXJH
U3RyZWFtZXIgOiBwdWJsaWMgTGliV2ViUlRDUHJvdmlkZXIgewotcHVibGljOgotICAgIExpYldl
YlJUQ1Byb3ZpZGVyR1N0cmVhbWVyKCkgPSBkZWZhdWx0OwotCi0gICAgc3RkOjp1bmlxdWVfcHRy
PHdlYnJ0Yzo6VmlkZW9FbmNvZGVyRmFjdG9yeT4gY3JlYXRlRW5jb2RlckZhY3RvcnkoKSBmaW5h
bDsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8d2VicnRjOjpWaWRlb0RlY29kZXJGYWN0b3J5PiBjcmVh
dGVEZWNvZGVyRmFjdG9yeSgpIGZpbmFsOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQot
Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFt
L2xpYndlYnJ0Yy9nc3RyZWFtZXIvR1N0cmVhbWVyVmlkZW9Db21tb24uY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbGlid2VicnRjL2dzdHJlYW1lci9HU3RyZWFtZXJW
aWRlb0NvbW1vbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTQ2M2RiYjU2MTczZWI3NGJmZTU0YTg5NjliZDRm
ZmY5ODM0NDE3YgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21l
ZGlhc3RyZWFtL2xpYndlYnJ0Yy9nc3RyZWFtZXIvR1N0cmVhbWVyVmlkZW9Db21tb24uY3BwCkBA
IC0wLDAgKzEsNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgTWV0cm9sb2dpY2FsIEdy
b3VwIEIuVi4KKyAqIENvcHlyaWdodCAoQykgMjAyMCBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWlu
dCB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShWSURFTykgJiYgRU5BQkxF
KE1FRElBX1NUUkVBTSkgJiYgVVNFKExJQldFQlJUQykgJiYgVVNFKEdTVFJFQU1FUikKKyNpbmNs
dWRlICJHU3RyZWFtZXJWaWRlb0NvbW1vbi5oIgorCisjaW5jbHVkZSAiYWJzbC90eXBlcy9vcHRp
b25hbC5oIgorI2luY2x1ZGUgIndlYnJ0Yy9tZWRpYS9iYXNlL2NvZGVjLmgiCisjaW5jbHVkZSAi
d2VicnRjL21lZGlhL2Jhc2UvaDI2NF9wcm9maWxlX2xldmVsX2lkLmgiCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworc3RhdGljIHdlYnJ0Yzo6U2RwVmlkZW9Gb3JtYXQgY3JlYXRlSDI2NEZvcm1h
dCh3ZWJydGM6OkgyNjQ6OlByb2ZpbGUgcHJvZmlsZSwgd2VicnRjOjpIMjY0OjpMZXZlbCBsZXZl
bCwgY29uc3Qgc3RkOjpzdHJpbmcmIHBhY2tldGl6YXRpb25Nb2RlKQoreworICAgIGNvbnN0IGF1
dG8gcHJvZmlsZVN0cmluZyA9IHdlYnJ0Yzo6SDI2NDo6UHJvZmlsZUxldmVsSWRUb1N0cmluZyh3
ZWJydGM6OkgyNjQ6OlByb2ZpbGVMZXZlbElkKHByb2ZpbGUsIGxldmVsKSk7CisKKyAgICByZXR1
cm4gd2VicnRjOjpTZHBWaWRlb0Zvcm1hdChjcmlja2V0OjprSDI2NENvZGVjTmFtZSwKKyAgICAg
ICAgeyB7IGNyaWNrZXQ6OmtIMjY0Rm10cFByb2ZpbGVMZXZlbElkLCAqcHJvZmlsZVN0cmluZyB9
LAorICAgICAgICAgICAgeyBjcmlja2V0OjprSDI2NEZtdHBMZXZlbEFzeW1tZXRyeUFsbG93ZWQs
ICIxIiB9LAorICAgICAgICAgICAgeyBjcmlja2V0OjprSDI2NEZtdHBQYWNrZXRpemF0aW9uTW9k
ZSwgcGFja2V0aXphdGlvbk1vZGUgfSB9KTsKK30KKworc3RkOjp2ZWN0b3I8d2VicnRjOjpTZHBW
aWRlb0Zvcm1hdD4gc3VwcG9ydGVkSDI2NEZvcm1hdHMoKQoreworICAgIC8vIEBUT0RPIENyZWF0
ZSBmcm9tIGVuY29kZXIgc3JjIHBhZCBjYXBzIHRlbXBsYXRlCisgICAgLy8KKyAgICAvLyBXZSBv
bmx5IHN1cHBvcnQgZW5jb2RpbmcgQ29uc3RyYWluZWQgQmFzZWxpbmUgUHJvZmlsZSAoQ0JQKSwg
YnV0IHRoZSBkZWNvZGVyIHN1cHBvcnRzIG1vcmUKKyAgICAvLyBwcm9maWxlcy4gV2UgY2FuIGxp
c3QgYWxsIHByb2ZpbGVzIGhlcmUgdGhhdCBhcmUgc3VwcG9ydGVkIGJ5IHRoZSBkZWNvZGVyIGFu
ZCB0aGF0IGFyZSBhbHNvCisgICAgLy8gc3VwZXJzZXRzIG9mIENCUCwgaS5lLiB0aGUgZGVjb2Rl
ciBmb3IgdGhhdCBwcm9maWxlIGlzIHJlcXVpcmVkIHRvIGJlIGFibGUgdG8gZGVjb2RlCisgICAg
Ly8gQ0JQLiBUaGlzIG1lYW5zIHdlIGNhbiBlbmNvZGUgYW5kIHNlbmQgQ0JQIGV2ZW4gdGhvdWdo
IHdlIG5lZ290aWF0ZWQgYSBwb3RlbnRpYWxseSBoaWdoZXIKKyAgICAvLyBwcm9maWxlLiBTZWUg
dGhlIEgyNjQgc3BlYyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKyAgICAvLworICAgIC8vIFdlIHN1
cHBvcnQgYm90aCBwYWNrZXRpemF0aW9uIG1vZGVzIDAgKG1hbmRhdG9yeSkgYW5kIDEgKG9wdGlv
bmFsLCBwcmVmZXJyZWQpLgorICAgIHJldHVybiB7IGNyZWF0ZUgyNjRGb3JtYXQod2VicnRjOjpI
MjY0OjprUHJvZmlsZUJhc2VsaW5lLCB3ZWJydGM6OkgyNjQ6OmtMZXZlbDNfMSwgIjEiKSwKKyAg
ICAgICAgY3JlYXRlSDI2NEZvcm1hdCh3ZWJydGM6OkgyNjQ6OmtQcm9maWxlQmFzZWxpbmUsIHdl
YnJ0Yzo6SDI2NDo6a0xldmVsM18xLCAiMCIpLAorICAgICAgICBjcmVhdGVIMjY0Rm9ybWF0KHdl
YnJ0Yzo6SDI2NDo6a1Byb2ZpbGVDb25zdHJhaW5lZEJhc2VsaW5lLCB3ZWJydGM6OkgyNjQ6OmtM
ZXZlbDNfMSwgIjEiKSwKKyAgICAgICAgY3JlYXRlSDI2NEZvcm1hdCh3ZWJydGM6OkgyNjQ6OmtQ
cm9maWxlQ29uc3RyYWluZWRCYXNlbGluZSwgd2VicnRjOjpIMjY0OjprTGV2ZWwzXzEsICIwIiks
IH07Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9saWJ3ZWJydGMvZ3N0cmVhbWVyL0dT
dHJlYW1lclZpZGVvQ29tbW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVh
bS9saWJ3ZWJydGMvZ3N0cmVhbWVyL0dTdHJlYW1lclZpZGVvQ29tbW9uLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
YjY1ZjE3YjgwYTJkNGI5MjRiYjJiODRhMmQ0MTQxYTkyYzE2NjZmOAotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2xpYndlYnJ0Yy9nc3RyZWFt
ZXIvR1N0cmVhbWVyVmlkZW9Db21tb24uaApAQCAtMCwwICsxLDM1IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDIwIE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MjAgSWdhbGlhIFMuTC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFpbnQgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVO
QUJMRShWSURFTykgJiYgRU5BQkxFKE1FRElBX1NUUkVBTSkgJiYgVVNFKExJQldFQlJUQykgJiYg
VVNFKEdTVFJFQU1FUikKKworI2luY2x1ZGUgIkxpYldlYlJUQ01hY3Jvcy5oIgorI2luY2x1ZGUg
ImFwaS92aWRlb19jb2RlY3Mvc2RwX3ZpZGVvX2Zvcm1hdC5oIgorI2luY2x1ZGUgPHZlY3Rvcj4K
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGQ6OnZlY3Rvcjx3ZWJydGM6OlNkcFZpZGVvRm9y
bWF0PiBzdXBwb3J0ZWRIMjY0Rm9ybWF0cygpOworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
KyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0v
bGlid2VicnRjL2dzdHJlYW1lci9HU3RyZWFtZXJWaWRlb0RlY29kZXJGYWN0b3J5LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2xpYndlYnJ0Yy9nc3RyZWFtZXIvR1N0
cmVhbWVyVmlkZW9EZWNvZGVyRmFjdG9yeS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjFkYTk0YTY5YWU5NjYx
ZThkODNkNzBkOGI3MjQ2MjViZTQzZWMwMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2xpYndlYnJ0Yy9nc3RyZWFtZXIvR1N0cmVhbWVyVmlk
ZW9EZWNvZGVyRmFjdG9yeS5jcHAKQEAgLTAsMCArMSw0NTIgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTgsMjAyMCBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICogQ29weXJpZ2h0IChDKSAy
MDE4LDIwMjAgSWdhbGlhIFMuTC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFpbnQgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisKKyNpZiBFTkFCTEUoVklERU8pICYmIEVOQUJMRShNRURJQV9TVFJFQU0pICYmIFVTRShM
SUJXRUJSVEMpICYmIFVTRShHU1RSRUFNRVIpCisjaW5jbHVkZSAiR1N0cmVhbWVyVmlkZW9EZWNv
ZGVyRmFjdG9yeS5oIgorCisjaW5jbHVkZSAiR1N0cmVhbWVyVmlkZW9Db21tb24uaCIKKyNpbmNs
dWRlICJHU3RyZWFtZXJWaWRlb0ZyYW1lTGliV2ViUlRDLmgiCisjaW5jbHVkZSAid2VicnRjL21v
ZHVsZXMvdmlkZW9fY29kaW5nL2NvZGVjcy9oMjY0L2luY2x1ZGUvaDI2NC5oIgorI2luY2x1ZGUg
IndlYnJ0Yy9tb2R1bGVzL3ZpZGVvX2NvZGluZy9jb2RlY3MvdnA4L2luY2x1ZGUvdnA4LmgiCisj
aW5jbHVkZSAid2VicnRjL21vZHVsZXMvdmlkZW9fY29kaW5nL2NvZGVjcy92cDgvbGlidnB4X3Zw
OF9kZWNvZGVyLmgiCisjaW5jbHVkZSAid2VicnRjL21vZHVsZXMvdmlkZW9fY29kaW5nL2luY2x1
ZGUvdmlkZW9fY29kZWNfaW50ZXJmYWNlLmgiCisjaW5jbHVkZSA8Z3N0L2FwcC9nc3RhcHBzaW5r
Lmg+CisjaW5jbHVkZSA8Z3N0L2FwcC9nc3RhcHBzcmMuaD4KKyNpbmNsdWRlIDxnc3QvdmlkZW8v
dmlkZW8uaD4KKyNpbmNsdWRlIDxtdXRleD4KKyNpbmNsdWRlIDx3dGYvTG9jay5oPgorI2luY2x1
ZGUgPHd0Zi9TdGRNYXAuaD4KKyNpbmNsdWRlIDx3dGYvZ2xpYi9SdW5Mb29wU291cmNlUHJpb3Jp
dHkuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworR1NUX0RFQlVHX0NBVEVH
T1JZKHdlYmtpdF93ZWJydGNkZWNfZGVidWcpOworI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgd2Vi
a2l0X3dlYnJ0Y2RlY19kZWJ1ZworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3R5cGVkZWYgc3Ry
dWN0IHsKKyAgICB1aW50NjRfdCB0aW1lc3RhbXA7CisgICAgaW50NjRfdCByZW5kZXJUaW1lTXM7
Cit9IElucHV0VGltZXN0YW1wczsKKworY2xhc3MgR1N0cmVhbWVyVmlkZW9EZWNvZGVyIDogcHVi
bGljIHdlYnJ0Yzo6VmlkZW9EZWNvZGVyIHsKK3B1YmxpYzoKKyAgICBHU3RyZWFtZXJWaWRlb0Rl
Y29kZXIoKQorICAgICAgICA6IG1fcGljdHVyZUlkKDApCisgICAgICAgICwgbV93aWR0aCgwKQor
ICAgICAgICAsIG1faGVpZ2h0KDApCisgICAgICAgICwgbV9yZXF1aXJlUGFyc2UoZmFsc2UpCisg
ICAgICAgICwgbV9uZWVkc0tleWZyYW1lKHRydWUpCisgICAgICAgICwgbV9maXJzdEJ1ZmZlclB0
cyhHU1RfQ0xPQ0tfVElNRV9OT05FKQorICAgICAgICAsIG1fZmlyc3RCdWZmZXJEdHMoR1NUX0NM
T0NLX1RJTUVfTk9ORSkKKyAgICB7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgZGVjb2RlYmlu
UGFkQWRkZWRDYihHc3RFbGVtZW50KiwgR3N0UGFkKiBzcmNwYWQsIEdzdFBhZCogc2lua3BhZCkK
KyAgICB7CisgICAgICAgIEdTVF9JTkZPX09CSkVDVChzcmNwYWQsICJjb25uZWN0aW5nIHBhZCB3
aXRoICUiIEdTVF9QVFJfRk9STUFULCBzaW5rcGFkKTsKKyAgICAgICAgaWYgKGdzdF9wYWRfbGlu
ayhzcmNwYWQsIHNpbmtwYWQpICE9IEdTVF9QQURfTElOS19PSykKKyAgICAgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKworICAgIEdzdEVsZW1lbnQqIHBpcGVsaW5lKCkKKyAg
ICB7CisgICAgICAgIHJldHVybiBtX3BpcGVsaW5lLmdldCgpOworICAgIH0KKworICAgIEdzdEVs
ZW1lbnQqIG1ha2VFbGVtZW50KGNvbnN0IGdjaGFyKiBmYWN0b3J5TmFtZSkKKyAgICB7CisgICAg
ICAgIEdVbmlxdWVQdHI8Y2hhcj4gbmFtZShnX3N0cmR1cF9wcmludGYoIiVzX2RlY18lc18lcCIs
IE5hbWUoKSwgZmFjdG9yeU5hbWUsIHRoaXMpKTsKKworICAgICAgICByZXR1cm4gbWFrZUdTdHJl
YW1lckVsZW1lbnQoZmFjdG9yeU5hbWUsIG5hbWUuZ2V0KCkpOworICAgIH0KKworICAgIHZvaWQg
aGFuZGxlRXJyb3IoR0Vycm9yKiBlcnJvcikKKyAgICB7CisgICAgICAgIGlmICghZ19lcnJvcl9t
YXRjaGVzKGVycm9yLCBHU1RfU1RSRUFNX0VSUk9SLCBHU1RfU1RSRUFNX0VSUk9SX0RFQ09ERSkp
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIEdTVF9JTkZPX09CSkVDVChwaXBlbGluZSgp
LCAiLS0+IG5lZWRzIGtleWZyYW1lICglcykiLCBlcnJvci0+bWVzc2FnZSk7CisgICAgICAgIG1f
bmVlZHNLZXlmcmFtZSA9IHRydWU7CisgICAgfQorCisgICAgaW50MzJfdCBJbml0RGVjb2RlKGNv
bnN0IHdlYnJ0Yzo6VmlkZW9Db2RlYyogY29kZWNTZXR0aW5ncywgaW50MzJfdCkgb3ZlcnJpZGUK
KyAgICB7CisgICAgICAgIG1fc3JjID0gbWFrZUVsZW1lbnQoImFwcHNyYyIpOworCisgICAgICAg
IEdSZWZQdHI8R3N0Q2Fwcz4gY2FwcyA9IG51bGxwdHI7CisgICAgICAgIGF1dG8gY2Fwc2ZpbHRl
ciA9IENyZWF0ZUZpbHRlcigpOworICAgICAgICBhdXRvIGRlY29kZXIgPSBtYWtlRWxlbWVudCgi
ZGVjb2RlYmluIik7CisKKyAgICAgICAgaWYgKGNvZGVjU2V0dGluZ3MpIHsKKyAgICAgICAgICAg
IG1fd2lkdGggPSBjb2RlY1NldHRpbmdzLT53aWR0aDsKKyAgICAgICAgICAgIG1faGVpZ2h0ID0g
Y29kZWNTZXR0aW5ncy0+aGVpZ2h0OworICAgICAgICB9CisKKyAgICAgICAgbV9waXBlbGluZSA9
IG1ha2VFbGVtZW50KCJwaXBlbGluZSIpOworICAgICAgICBjb25uZWN0U2ltcGxlQnVzTWVzc2Fn
ZUNhbGxiYWNrKG1fcGlwZWxpbmUuZ2V0KCkpOworCisgICAgICAgIGF1dG8gc2lua3BhZCA9IGFk
b3B0R1JlZihnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZChjYXBzZmlsdGVyLCAic2luayIpKTsK
KyAgICAgICAgZ19zaWduYWxfY29ubmVjdChkZWNvZGVyLCAicGFkLWFkZGVkIiwgR19DQUxMQkFD
SyhkZWNvZGViaW5QYWRBZGRlZENiKSwgc2lua3BhZC5nZXQoKSk7CisgICAgICAgIC8vIE1ha2Ug
dGhlIGRlY29kZXIgb3V0cHV0ICJwYXJzZWQiIGZyYW1lcyBvbmx5IGFuZCBsZXQgdGhlIG1haW4g
ZGVjb2RlYmluCisgICAgICAgIC8vIGRvIHRoZSByZWFsIGRlY29kaW5nLiBUaGlzIGFsbG93cyB1
cyB0byBoYXZlIG9wdGltaXplZCBkZWNvZGluZy9yZW5kZXJpbmcKKyAgICAgICAgLy8gaGFwcGVu
aW5nIGluIHRoZSBtYWluIHBpcGVsaW5lLgorICAgICAgICBpZiAobV9yZXF1aXJlUGFyc2UpIHsK
KyAgICAgICAgICAgIGNhcHMgPSBnc3RfY2Fwc19uZXdfc2ltcGxlKENhcHMoKSwgInBhcnNlZCIs
IEdfVFlQRV9CT09MRUFOLCBUUlVFLCBudWxscHRyKTsKKworICAgICAgICAgICAgYXV0byBidXMg
PSBhZG9wdEdSZWYoZ3N0X3BpcGVsaW5lX2dldF9idXMoR1NUX1BJUEVMSU5FKG1fcGlwZWxpbmUu
Z2V0KCkpKSk7CisgICAgICAgICAgICBnc3RfYnVzX2VuYWJsZV9zeW5jX21lc3NhZ2VfZW1pc3Np
b24oYnVzLmdldCgpKTsKKyAgICAgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZChidXMu
Z2V0KCksICJzeW5jLW1lc3NhZ2U6Ondhcm5pbmciLCBHX0NBTExCQUNLKCtbXShHU3RyZWFtZXJW
aWRlb0RlY29kZXIqIGRlY29kZXIsIEdzdE1lc3NhZ2UqIG1lc3NhZ2UpIHsKKyAgICAgICAgICAg
ICAgICBHVW5pcXVlT3V0UHRyPEdFcnJvcj4gZXJyb3I7CisgICAgICAgICAgICAgICAgZ3N0X21l
c3NhZ2VfcGFyc2Vfd2FybmluZyhtZXNzYWdlLCAmZXJyb3Iub3V0UHRyKCksIG51bGxwdHIpOwor
ICAgICAgICAgICAgICAgIGRlY29kZXItPmhhbmRsZUVycm9yKGVycm9yLmdldCgpKTsKKyAgICAg
ICAgICAgIH0pLCB0aGlzKTsKKyAgICAgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZChi
dXMuZ2V0KCksICJzeW5jLW1lc3NhZ2U6OmVycm9yIiwgR19DQUxMQkFDSygrW10oR1N0cmVhbWVy
VmlkZW9EZWNvZGVyKiBkZWNvZGVyLCBHc3RNZXNzYWdlKiBtZXNzYWdlKSB7CisgICAgICAgICAg
ICAgICAgR1VuaXF1ZU91dFB0cjxHRXJyb3I+IGVycm9yOworICAgICAgICAgICAgICAgIGdzdF9t
ZXNzYWdlX3BhcnNlX2Vycm9yKG1lc3NhZ2UsICZlcnJvci5vdXRQdHIoKSwgbnVsbHB0cik7Cisg
ICAgICAgICAgICAgICAgZGVjb2Rlci0+aGFuZGxlRXJyb3IoZXJyb3IuZ2V0KCkpOworICAgICAg
ICAgICAgfSksIHRoaXMpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLyogRklYTUUg
LSBIb3cgY291bGQgd2UgaGFuZGxlIG1pc3Npbmcga2V5ZnJhbWVzIGNhc2Ugd2UgZG8gbm90IHBs
dWcgcGFyc2VycyA/ICovCisgICAgICAgICAgICBjYXBzID0gZ3N0X2NhcHNfbmV3X2VtcHR5X3Np
bXBsZShDYXBzKCkpOworICAgICAgICB9CisgICAgICAgIGdfb2JqZWN0X3NldChkZWNvZGVyLCAi
Y2FwcyIsIGNhcHMuZ2V0KCksIG51bGxwdHIpOworCisgICAgICAgIG1fc2luayA9IG1ha2VFbGVt
ZW50KCJhcHBzaW5rIik7CisgICAgICAgIGdzdF9hcHBfc2lua19zZXRfZW1pdF9zaWduYWxzKEdT
VF9BUFBfU0lOSyhtX3NpbmspLCB0cnVlKTsKKyAgICAgICAgLy8gVGhpcyBpcyBhbiBkZWNvZGVy
LCBldmVyeXRoaW5nIHNob3VsZCBoYXBwZW4gYXMgZmFzdCBhcyBwb3NzaWJsZSBhbmQgbm90Cisg
ICAgICAgIC8vIGJlIHN5bmNlZCBvbiB0aGUgY2xvY2suCisgICAgICAgIGdfb2JqZWN0X3NldCht
X3NpbmssICJzeW5jIiwgZmFsc2UsIG51bGxwdHIpOworCisgICAgICAgIGdzdF9iaW5fYWRkX21h
bnkoR1NUX0JJTihwaXBlbGluZSgpKSwgbV9zcmMsIGRlY29kZXIsIGNhcHNmaWx0ZXIsIG1fc2lu
aywgbnVsbHB0cik7CisgICAgICAgIGlmICghZ3N0X2VsZW1lbnRfbGluayhtX3NyYywgZGVjb2Rl
cikpIHsKKyAgICAgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1QocGlwZWxpbmUoKSwgIkNvdWxkIG5v
dCBsaW5rIHNyYyB0byBkZWNvZGVyLiIpOworICAgICAgICAgICAgcmV0dXJuIFdFQlJUQ19WSURF
T19DT0RFQ19FUlJPUjsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghZ3N0X2VsZW1lbnRfbGlu
ayhjYXBzZmlsdGVyLCBtX3NpbmspKSB7CisgICAgICAgICAgICBHU1RfRVJST1JfT0JKRUNUKHBp
cGVsaW5lKCksICJDb3VsZCBub3QgbGluayBjYXBzZmlsdGVyIHRvIHNpbmsuIik7CisgICAgICAg
ICAgICByZXR1cm4gV0VCUlRDX1ZJREVPX0NPREVDX0VSUk9SOworICAgICAgICB9CisKKyAgICAg
ICAgaWYgKGdzdF9lbGVtZW50X3NldF9zdGF0ZShwaXBlbGluZSgpLCBHU1RfU1RBVEVfUExBWUlO
RykgPT0gR1NUX1NUQVRFX0NIQU5HRV9GQUlMVVJFKSB7CisgICAgICAgICAgICBHU1RfRVJST1Jf
T0JKRUNUKHBpcGVsaW5lKCksICJDb3VsZCBub3Qgc2V0IHN0YXRlIHRvIFBMQVlJTkcuIik7Cisg
ICAgICAgICAgICByZXR1cm4gV0VCUlRDX1ZJREVPX0NPREVDX0VSUk9SOworICAgICAgICB9CisK
KyAgICAgICAgcmV0dXJuIFdFQlJUQ19WSURFT19DT0RFQ19PSzsKKyAgICB9CisKKyAgICBpbnQz
Ml90IFJlZ2lzdGVyRGVjb2RlQ29tcGxldGVDYWxsYmFjayh3ZWJydGM6OkRlY29kZWRJbWFnZUNh
bGxiYWNrKiBjYWxsYmFjaykgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIG1faW1hZ2VSZWFkeUNi
ID0gY2FsbGJhY2s7CisKKyAgICAgICAgcmV0dXJuIFdFQlJUQ19WSURFT19DT0RFQ19PSzsKKyAg
ICB9CisKKyAgICB2aXJ0dWFsIEdzdEVsZW1lbnQqIENyZWF0ZUZpbHRlcigpCisgICAgeworICAg
ICAgICByZXR1cm4gbWFrZUVsZW1lbnQoImlkZW50aXR5Iik7CisgICAgfQorCisgICAgaW50MzJf
dCBSZWxlYXNlKCkgZmluYWwKKyAgICB7CisgICAgICAgIGlmIChtX3BpcGVsaW5lKSB7CisgICAg
ICAgICAgICBkaXNjb25uZWN0U2ltcGxlQnVzTWVzc2FnZUNhbGxiYWNrKG1fcGlwZWxpbmUuZ2V0
KCkpOworICAgICAgICAgICAgYXV0byBidXMgPSBhZG9wdEdSZWYoZ3N0X3BpcGVsaW5lX2dldF9i
dXMoR1NUX1BJUEVMSU5FKG1fcGlwZWxpbmUuZ2V0KCkpKSk7CisgICAgICAgICAgICBnc3RfYnVz
X3NldF9zeW5jX2hhbmRsZXIoYnVzLmdldCgpLCBudWxscHRyLCBudWxscHRyLCBudWxscHRyKTsK
KyAgICAgICAgICAgIGdzdF9lbGVtZW50X3NldF9zdGF0ZShtX3BpcGVsaW5lLmdldCgpLCBHU1Rf
U1RBVEVfTlVMTCk7CisgICAgICAgICAgICBtX3NyYyA9IG51bGxwdHI7CisgICAgICAgICAgICBt
X3NpbmsgPSBudWxscHRyOworICAgICAgICAgICAgbV9waXBlbGluZSA9IG51bGxwdHI7CisgICAg
ICAgIH0KKworICAgICAgICByZXR1cm4gV0VCUlRDX1ZJREVPX0NPREVDX09LOworICAgIH0KKwor
ICAgIGludDMyX3QgRGVjb2RlKGNvbnN0IHdlYnJ0Yzo6RW5jb2RlZEltYWdlJiBpbnB1dEltYWdl
LAorICAgICAgICBib29sLAorICAgICAgICBpbnQ2NF90IHJlbmRlclRpbWVNcykgb3ZlcnJpZGUK
KyAgICB7CisgICAgICAgIGlmIChtX25lZWRzS2V5ZnJhbWUpIHsKKyAgICAgICAgICAgIGlmIChp
bnB1dEltYWdlLl9mcmFtZVR5cGUgIT0gd2VicnRjOjpWaWRlb0ZyYW1lVHlwZTo6a1ZpZGVvRnJh
bWVLZXkpIHsKKyAgICAgICAgICAgICAgICBHU1RfRVJST1IoIldhaXRpbmcgZm9yIGtleWZyYW1l
IGJ1dCBnb3QgYSBkZWx0YSB1bml0Li4uIGFza2luZyBmb3Iga2V5ZnJhbWUiKTsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gV0VCUlRDX1ZJREVPX0NPREVDX0VSUk9SOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgbV9uZWVkc0tleWZyYW1lID0gZmFsc2U7CisgICAgICAgIH0KKworICAgICAg
ICBpZiAoIW1fc3JjKSB7CisgICAgICAgICAgICBHU1RfRVJST1IoIk5vIHNvdXJjZSBzZXQsIGNh
bid0IGRlY29kZS4iKTsKKworICAgICAgICAgICAgcmV0dXJuIFdFQlJUQ19WSURFT19DT0RFQ19V
TklOSVRJQUxJWkVEOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFHU1RfQ0xPQ0tfVElNRV9J
U19WQUxJRChtX2ZpcnN0QnVmZmVyUHRzKSkgeworICAgICAgICAgICAgR1JlZlB0cjxHc3RQYWQ+
IHNyY3BhZCA9IGFkb3B0R1JlZihnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZChtX3NyYywgInNy
YyIpKTsKKyAgICAgICAgICAgIG1fZmlyc3RCdWZmZXJQdHMgPSAoc3RhdGljX2Nhc3Q8Z3VpbnQ2
ND4ocmVuZGVyVGltZU1zKSkgKiBHU1RfTVNFQ09ORDsKKyAgICAgICAgICAgIG1fZmlyc3RCdWZm
ZXJEdHMgPSAoc3RhdGljX2Nhc3Q8Z3VpbnQ2ND4oaW5wdXRJbWFnZS5UaW1lc3RhbXAoKSkpICog
R1NUX01TRUNPTkQ7CisgICAgICAgIH0KKworICAgICAgICAvLyBGSVhNRS0gVXNlIGEgR3N0QnVm
ZmVyUG9vbC4KKyAgICAgICAgYXV0byBidWZmZXIgPSBhZG9wdEdSZWYoZ3N0QnVmZmVyTmV3V3Jh
cHBlZEZhc3QoZmFzdE1lbUR1cChpbnB1dEltYWdlLmRhdGEoKSwgaW5wdXRJbWFnZS5zaXplKCkp
LAorICAgICAgICAgICAgaW5wdXRJbWFnZS5zaXplKCkpKTsKKyAgICAgICAgR1NUX0JVRkZFUl9E
VFMoYnVmZmVyLmdldCgpKSA9IChzdGF0aWNfY2FzdDxndWludDY0PihpbnB1dEltYWdlLlRpbWVz
dGFtcCgpKSAqIEdTVF9NU0VDT05EKSAtIG1fZmlyc3RCdWZmZXJEdHM7CisgICAgICAgIEdTVF9C
VUZGRVJfUFRTKGJ1ZmZlci5nZXQoKSkgPSAoc3RhdGljX2Nhc3Q8Z3VpbnQ2ND4ocmVuZGVyVGlt
ZU1zKSAqIEdTVF9NU0VDT05EKSAtIG1fZmlyc3RCdWZmZXJQdHM7CisgICAgICAgIElucHV0VGlt
ZXN0YW1wcyB0aW1lc3RhbXBzID0geyBpbnB1dEltYWdlLlRpbWVzdGFtcCgpLCByZW5kZXJUaW1l
TXMgfTsKKyAgICAgICAgbV9kdHNQdHNNYXBbR1NUX0JVRkZFUl9QVFMoYnVmZmVyLmdldCgpKV0g
PSB0aW1lc3RhbXBzOworCisgICAgICAgIEdTVF9MT0dfT0JKRUNUKHBpcGVsaW5lKCksICIlIiBH
X0dJTlQ2NF9GT1JNQVQgIiBEZWNvZGluZzogJSIgR1NUX1BUUl9GT1JNQVQsIHJlbmRlclRpbWVN
cywgYnVmZmVyLmdldCgpKTsKKyAgICAgICAgYXV0byBzYW1wbGUgPSBhZG9wdEdSZWYoZ3N0X3Nh
bXBsZV9uZXcoYnVmZmVyLmdldCgpLCBHZXRDYXBzRm9yRnJhbWUoaW5wdXRJbWFnZSksIG51bGxw
dHIsIG51bGxwdHIpKTsKKyAgICAgICAgc3dpdGNoIChnc3RfYXBwX3NyY19wdXNoX3NhbXBsZShH
U1RfQVBQX1NSQyhtX3NyYyksIHNhbXBsZS5nZXQoKSkpIHsKKyAgICAgICAgY2FzZSBHU1RfRkxP
V19PSzoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEdTVF9GTE9XX0ZMVVNISU5H
OgorICAgICAgICAgICAgcmV0dXJuIFdFQlJUQ19WSURFT19DT0RFQ19VTklOSVRJQUxJWkVEOwor
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIFdFQlJUQ19WSURFT19DT0RFQ19F
UlJPUjsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBwdWxsU2FtcGxlKCk7CisgICAgfQor
CisgICAgaW50MzJfdCBwdWxsU2FtcGxlKCkKKyAgICB7CisgICAgICAgIGF1dG8gc2FtcGxlID0g
YWRvcHRHUmVmKGdzdF9hcHBfc2lua190cnlfcHVsbF9zYW1wbGUoR1NUX0FQUF9TSU5LKG1fc2lu
ayksIEdTVF9TRUNPTkQgLyAzMCkpOworICAgICAgICBpZiAoIXNhbXBsZSkgeworICAgICAgICAg
ICAgR1NUX0VSUk9SKCJOZWVkcyBtb3JlIGRhdGEiKTsKKyAgICAgICAgICAgIHJldHVybiBXRUJS
VENfVklERU9fQ09ERUNfT0s7CisgICAgICAgIH0KKyAgICAgICAgYXV0byBidWZmZXIgPSBnc3Rf
c2FtcGxlX2dldF9idWZmZXIoc2FtcGxlLmdldCgpKTsKKworICAgICAgICAvLyBNYWtlIHN1cmUg
dGhhdCB0aGUgZnJhbWUudGltZXN0YW1wID09IHByZXZpc291bHkgaW5wdXRfZnJhbWUuX3RpbWVT
dGFtcAorICAgICAgICAvLyBhcyBpdCBpcyByZXF1aXJlZCBieSB0aGUgVmlkZW9EZWNvZGVyIGJh
c2VjbGFzcy4KKyAgICAgICAgYXV0byB0aW1lc3RhbXBzID0gbV9kdHNQdHNNYXBbR1NUX0JVRkZF
Ul9QVFMoYnVmZmVyKV07CisgICAgICAgIG1fZHRzUHRzTWFwLmVyYXNlKEdTVF9CVUZGRVJfUFRT
KGJ1ZmZlcikpOworCisgICAgICAgIGF1dG8gZnJhbWUoTGliV2ViUlRDVmlkZW9GcmFtZUZyb21H
U3RyZWFtZXJTYW1wbGUoV1RGTW92ZShzYW1wbGUpLCB3ZWJydGM6OmtWaWRlb1JvdGF0aW9uXzAs
CisgICAgICAgICAgICB0aW1lc3RhbXBzLnRpbWVzdGFtcCwgdGltZXN0YW1wcy5yZW5kZXJUaW1l
TXMpKTsKKworICAgICAgICBHU1RfQlVGRkVSX0RUUyhidWZmZXIpID0gR1NUX0NMT0NLX1RJTUVf
Tk9ORTsKKyAgICAgICAgR1NUX0xPR19PQkpFQ1QocGlwZWxpbmUoKSwgIk91dHB1dCBkZWNvZGVk
IGZyYW1lISAlZCAtPiAlIiBHU1RfUFRSX0ZPUk1BVCwKKyAgICAgICAgICAgIGZyYW1lLT50aW1l
c3RhbXAoKSwgYnVmZmVyKTsKKworICAgICAgICBtX2ltYWdlUmVhZHlDYi0+RGVjb2RlZCgqZnJh
bWUuZ2V0KCksIGFic2w6Om9wdGlvbmFsPGludDMyX3Q+KCksIGFic2w6Om9wdGlvbmFsPHVpbnQ4
X3Q+KCkpOworCisgICAgICAgIHJldHVybiBXRUJSVENfVklERU9fQ09ERUNfT0s7CisgICAgfQor
CisgICAgdmlydHVhbCBHc3RDYXBzKiBHZXRDYXBzRm9yRnJhbWUoY29uc3Qgd2VicnRjOjpFbmNv
ZGVkSW1hZ2UmIGltYWdlKQorICAgIHsKKyAgICAgICAgaWYgKCFtX2NhcHMpIHsKKyAgICAgICAg
ICAgIG1fY2FwcyA9IGFkb3B0R1JlZihnc3RfY2Fwc19uZXdfc2ltcGxlKENhcHMoKSwKKyAgICAg
ICAgICAgICAgICAid2lkdGgiLCBHX1RZUEVfSU5ULCBpbWFnZS5fZW5jb2RlZFdpZHRoID8gaW1h
Z2UuX2VuY29kZWRXaWR0aCA6IG1fd2lkdGgsCisgICAgICAgICAgICAgICAgImhlaWdodCIsIEdf
VFlQRV9JTlQsIGltYWdlLl9lbmNvZGVkSGVpZ2h0ID8gaW1hZ2UuX2VuY29kZWRIZWlnaHQgOiBt
X2hlaWdodCwKKyAgICAgICAgICAgICAgICBudWxscHRyKSk7CisgICAgICAgIH0KKworICAgICAg
ICByZXR1cm4gbV9jYXBzLmdldCgpOworICAgIH0KKworICAgIHZvaWQgQWRkRGVjb2RlcklmU3Vw
cG9ydGVkKHN0ZDo6dmVjdG9yPHdlYnJ0Yzo6U2RwVmlkZW9Gb3JtYXQ+JiBjb2RlY0xpc3QpCisg
ICAgeworICAgICAgICBpZiAoSGFzR3N0RGVjb2RlcigpKSB7CisgICAgICAgICAgICBhdXRvIGZv
cm1hdHMgPSBDb25maWd1cmVTdXBwb3J0ZWREZWNvZGVyKCk7CisgICAgICAgICAgICBjb2RlY0xp
c3QuaW5zZXJ0KGNvZGVjTGlzdC5lbmQoKSwgZm9ybWF0cy5iZWdpbigpLCBmb3JtYXRzLmVuZCgp
KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZpcnR1YWwgc3RkOjp2ZWN0b3I8d2VicnRjOjpT
ZHBWaWRlb0Zvcm1hdD4gQ29uZmlndXJlU3VwcG9ydGVkRGVjb2RlcigpCisgICAgeworICAgICAg
ICByZXR1cm4geyB3ZWJydGM6OlNkcFZpZGVvRm9ybWF0KE5hbWUoKSkgfTsKKyAgICB9CisKKyAg
ICBzdGF0aWMgR1JlZlB0cjxHc3RFbGVtZW50RmFjdG9yeT4gR3N0RGVjb2RlckZhY3RvcnkoY29u
c3QgY2hhciAqY2Fwc1N0cikKKyAgICB7CisgICAgICAgIGF1dG8gYWxsRGVjb2RlcnMgPSBnc3Rf
ZWxlbWVudF9mYWN0b3J5X2xpc3RfZ2V0X2VsZW1lbnRzKEdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQ
RV9ERUNPREVSLAorICAgICAgICAgICAgR1NUX1JBTktfTUFSR0lOQUwpOworICAgICAgICBhdXRv
IGNhcHMgPSBhZG9wdEdSZWYoZ3N0X2NhcHNfZnJvbV9zdHJpbmcoY2Fwc1N0cikpOworICAgICAg
ICBhdXRvIGRlY29kZXJzID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9saXN0X2ZpbHRlcihhbGxEZWNv
ZGVycywKKyAgICAgICAgICAgIGNhcHMuZ2V0KCksIEdTVF9QQURfU0lOSywgRkFMU0UpOworCisg
ICAgICAgIGdzdF9wbHVnaW5fZmVhdHVyZV9saXN0X2ZyZWUoYWxsRGVjb2RlcnMpOworICAgICAg
ICBHUmVmUHRyPEdzdEVsZW1lbnRGYWN0b3J5PiByZXM7CisgICAgICAgIGlmIChkZWNvZGVycykK
KyAgICAgICAgICAgIHJlcyA9IEdTVF9FTEVNRU5UX0ZBQ1RPUlkoZGVjb2RlcnMtPmRhdGEpOwor
ICAgICAgICBnc3RfcGx1Z2luX2ZlYXR1cmVfbGlzdF9mcmVlKGRlY29kZXJzKTsKKworICAgICAg
ICByZXR1cm4gcmVzOworICAgIH0KKworICAgIGJvb2wgSGFzR3N0RGVjb2RlcigpCisgICAgewor
ICAgICAgICByZXR1cm4gR3N0RGVjb2RlckZhY3RvcnkoQ2FwcygpKTsKKyAgICB9CisKKyAgICB2
aXJ0dWFsIGNvbnN0IGdjaGFyKiBDYXBzKCkgPSAwOworICAgIHZpcnR1YWwgd2VicnRjOjpWaWRl
b0NvZGVjVHlwZSBDb2RlY1R5cGUoKSA9IDA7CisgICAgY29uc3QgY2hhciogSW1wbGVtZW50YXRp
b25OYW1lKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gIkdTdHJlYW1lciI7IH0KKyAgICB2aXJ0
dWFsIGNvbnN0IGdjaGFyKiBOYW1lKCkgPSAwOworCitwcm90ZWN0ZWQ6CisgICAgR1JlZlB0cjxH
c3RDYXBzPiBtX2NhcHM7CisgICAgZ2ludCBtX3BpY3R1cmVJZDsKKyAgICBnaW50IG1fd2lkdGg7
CisgICAgZ2ludCBtX2hlaWdodDsKKyAgICBib29sIG1fcmVxdWlyZVBhcnNlID0gZmFsc2U7Cisg
ICAgYm9vbCBtX25lZWRzS2V5ZnJhbWU7CisKK3ByaXZhdGU6CisgICAgR1JlZlB0cjxHc3RFbGVt
ZW50PiBtX3BpcGVsaW5lOworICAgIEdzdEVsZW1lbnQqIG1fc2luazsKKyAgICBHc3RFbGVtZW50
KiBtX3NyYzsKKworICAgIHdlYnJ0Yzo6RGVjb2RlZEltYWdlQ2FsbGJhY2sqIG1faW1hZ2VSZWFk
eUNiOworCisgICAgU3RkTWFwPEdzdENsb2NrVGltZSwgSW5wdXRUaW1lc3RhbXBzPiBtX2R0c1B0
c01hcDsKKyAgICBHc3RDbG9ja1RpbWUgbV9maXJzdEJ1ZmZlclB0czsKKyAgICBHc3RDbG9ja1Rp
bWUgbV9maXJzdEJ1ZmZlckR0czsKK307CisKK2NsYXNzIEgyNjREZWNvZGVyIDogcHVibGljIEdT
dHJlYW1lclZpZGVvRGVjb2RlciB7CitwdWJsaWM6CisgICAgSDI2NERlY29kZXIoKSB7IG1fcmVx
dWlyZVBhcnNlID0gdHJ1ZTsgfQorCisgICAgaW50MzJfdCBJbml0RGVjb2RlKGNvbnN0IHdlYnJ0
Yzo6VmlkZW9Db2RlYyogY29kZWNJbmZvLCBpbnQzMl90IG5Db3JlcykgZmluYWwKKyAgICB7Cisg
ICAgICAgIGlmIChjb2RlY0luZm8gJiYgY29kZWNJbmZvLT5jb2RlY1R5cGUgIT0gd2VicnRjOjpr
VmlkZW9Db2RlY0gyNjQpCisgICAgICAgICAgICByZXR1cm4gV0VCUlRDX1ZJREVPX0NPREVDX0VS
Ul9QQVJBTUVURVI7CisKKyAgICAgICAgcmV0dXJuIEdTdHJlYW1lclZpZGVvRGVjb2Rlcjo6SW5p
dERlY29kZShjb2RlY0luZm8sIG5Db3Jlcyk7CisgICAgfQorCisgICAgR3N0Q2FwcyogR2V0Q2Fw
c0ZvckZyYW1lKGNvbnN0IHdlYnJ0Yzo6RW5jb2RlZEltYWdlJiBpbWFnZSkgZmluYWwKKyAgICB7
CisgICAgICAgIGlmICghbV9jYXBzKSB7CisgICAgICAgICAgICBtX2NhcHMgPSBhZG9wdEdSZWYo
Z3N0X2NhcHNfbmV3X3NpbXBsZShDYXBzKCksCisgICAgICAgICAgICAgICAgIndpZHRoIiwgR19U
WVBFX0lOVCwgaW1hZ2UuX2VuY29kZWRXaWR0aCA/IGltYWdlLl9lbmNvZGVkV2lkdGggOiBtX3dp
ZHRoLAorICAgICAgICAgICAgICAgICJoZWlnaHQiLCBHX1RZUEVfSU5ULCBpbWFnZS5fZW5jb2Rl
ZEhlaWdodCA/IGltYWdlLl9lbmNvZGVkSGVpZ2h0IDogbV9oZWlnaHQsCisgICAgICAgICAgICAg
ICAgImFsaWdubWVudCIsIEdfVFlQRV9TVFJJTkcsICJhdSIsCisgICAgICAgICAgICAgICAgbnVs
bHB0cikpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIG1fY2Fwcy5nZXQoKTsKKyAgICB9
CisgICAgY29uc3QgZ2NoYXIqIENhcHMoKSBmaW5hbCB7IHJldHVybiAidmlkZW8veC1oMjY0Ijsg
fQorICAgIGNvbnN0IGdjaGFyKiBOYW1lKCkgZmluYWwgeyByZXR1cm4gY3JpY2tldDo6a0gyNjRD
b2RlY05hbWU7IH0KKyAgICB3ZWJydGM6OlZpZGVvQ29kZWNUeXBlIENvZGVjVHlwZSgpIGZpbmFs
IHsgcmV0dXJuIHdlYnJ0Yzo6a1ZpZGVvQ29kZWNIMjY0OyB9CisKKyAgICBzdGQ6OnZlY3Rvcjx3
ZWJydGM6OlNkcFZpZGVvRm9ybWF0PiBDb25maWd1cmVTdXBwb3J0ZWREZWNvZGVyKCkgZmluYWwK
KyAgICB7CisgICAgICAgIHJldHVybiBzdXBwb3J0ZWRIMjY0Rm9ybWF0cygpOworICAgIH0KK307
CisKK2NsYXNzIFZQOERlY29kZXIgOiBwdWJsaWMgR1N0cmVhbWVyVmlkZW9EZWNvZGVyIHsKK3B1
YmxpYzoKKyAgICBWUDhEZWNvZGVyKCkgeyB9CisgICAgY29uc3QgZ2NoYXIqIENhcHMoKSBmaW5h
bCB7IHJldHVybiAidmlkZW8veC12cDgiOyB9CisgICAgY29uc3QgZ2NoYXIqIE5hbWUoKSBmaW5h
bCB7IHJldHVybiBjcmlja2V0OjprVnA4Q29kZWNOYW1lOyB9CisgICAgd2VicnRjOjpWaWRlb0Nv
ZGVjVHlwZSBDb2RlY1R5cGUoKSBmaW5hbCB7IHJldHVybiB3ZWJydGM6OmtWaWRlb0NvZGVjVlA4
OyB9CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjx3ZWJydGM6OlZpZGVvRGVjb2Rlcj4gQ3Jl
YXRlKCkKKyAgICB7CisgICAgICAgIGF1dG8gZmFjdG9yeSA9IEdzdERlY29kZXJGYWN0b3J5KCJ2
aWRlby94LXZwOCIpOworCisgICAgICAgIGlmIChmYWN0b3J5ICYmICFnX3N0cmNtcDAoR1NUX09C
SkVDVF9OQU1FKEdTVF9PQkpFQ1QoZmFjdG9yeS5nZXQoKSkpLCAidnA4ZGVjIikpIHsKKyAgICAg
ICAgICAgIEdTVF9JTkZPKCJPdXIgYmVzdCBHU3RyZWFtZXIgVlA4IGRlY29kZXIgaXMgdnA4ZGVj
LCBiZXR0ZXIgdXNlIHRoZSBvbmUgZnJvbSBMaWJXZWJSVEMiKTsKKworICAgICAgICAgICAgcmV0
dXJuIHN0ZDo6dW5pcXVlX3B0cjx3ZWJydGM6OlZpZGVvRGVjb2Rlcj4obmV3IHdlYnJ0Yzo6TGli
dnB4VnA4RGVjb2RlcigpKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBzdGQ6OnVuaXF1
ZV9wdHI8d2VicnRjOjpWaWRlb0RlY29kZXI+KG5ldyBWUDhEZWNvZGVyKCkpOworICAgIH0KK307
CisKK2NsYXNzIFZQOURlY29kZXIgOiBwdWJsaWMgR1N0cmVhbWVyVmlkZW9EZWNvZGVyIHsKK3B1
YmxpYzoKKyAgICBWUDlEZWNvZGVyKGJvb2wgaXNTdXBwb3J0aW5nVlA5UHJvZmlsZTAgPSB0cnVl
LCBib29sIGlzU3VwcG9ydGluZ1ZQOVByb2ZpbGUyID0gdHJ1ZSkKKyAgICAgICAgOiBtX2lzU3Vw
cG9ydGluZ1ZQOVByb2ZpbGUwKGlzU3VwcG9ydGluZ1ZQOVByb2ZpbGUwKQorICAgICAgICAsIG1f
aXNTdXBwb3J0aW5nVlA5UHJvZmlsZTIoaXNTdXBwb3J0aW5nVlA5UHJvZmlsZTIpIHsgfTsKKwor
ICAgIGNvbnN0IGdjaGFyKiBDYXBzKCkgZmluYWwgeyByZXR1cm4gInZpZGVvL3gtdnA5IjsgfQor
ICAgIGNvbnN0IGdjaGFyKiBOYW1lKCkgZmluYWwgeyByZXR1cm4gY3JpY2tldDo6a1ZwOUNvZGVj
TmFtZTsgfQorICAgIHdlYnJ0Yzo6VmlkZW9Db2RlY1R5cGUgQ29kZWNUeXBlKCkgZmluYWwgeyBy
ZXR1cm4gd2VicnRjOjprVmlkZW9Db2RlY1ZQOTsgfQorICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9w
dHI8d2VicnRjOjpWaWRlb0RlY29kZXI+IENyZWF0ZSgpCisgICAgeworICAgICAgICByZXR1cm4g
c3RkOjp1bmlxdWVfcHRyPHdlYnJ0Yzo6VmlkZW9EZWNvZGVyPihuZXcgVlA5RGVjb2RlcigpKTsK
KyAgICB9CisKKyAgICBzdGQ6OnZlY3Rvcjx3ZWJydGM6OlNkcFZpZGVvRm9ybWF0PiBDb25maWd1
cmVTdXBwb3J0ZWREZWNvZGVyKCkgZmluYWwKKyAgICB7CisgICAgICAgIHN0ZDo6dmVjdG9yPHdl
YnJ0Yzo6U2RwVmlkZW9Gb3JtYXQ+IGZvcm1hdHM7CisgICAgICAgIGlmIChtX2lzU3VwcG9ydGlu
Z1ZQOVByb2ZpbGUwKQorICAgICAgICAgICAgZm9ybWF0cy5wdXNoX2JhY2sod2VicnRjOjpTZHBW
aWRlb0Zvcm1hdChjcmlja2V0OjprVnA5Q29kZWNOYW1lLCB7IHsgInByb2ZpbGUtaWQiLCAiMCIg
fSB9KSk7CisgICAgICAgIGlmIChtX2lzU3VwcG9ydGluZ1ZQOVByb2ZpbGUyKQorICAgICAgICAg
ICAgZm9ybWF0cy5wdXNoX2JhY2sod2VicnRjOjpTZHBWaWRlb0Zvcm1hdChjcmlja2V0OjprVnA5
Q29kZWNOYW1lLCB7IHsgInByb2ZpbGUtaWQiLCAiMiIgfSB9KSk7CisgICAgICAgIHJldHVybiBm
b3JtYXRzOworICAgIH0KK3ByaXZhdGU6CisgICAgYm9vbCBtX2lzU3VwcG9ydGluZ1ZQOVByb2Zp
bGUwOworICAgIGJvb2wgbV9pc1N1cHBvcnRpbmdWUDlQcm9maWxlMjsKK307CisKK3N0ZDo6dW5p
cXVlX3B0cjx3ZWJydGM6OlZpZGVvRGVjb2Rlcj4gR1N0cmVhbWVyVmlkZW9EZWNvZGVyRmFjdG9y
eTo6Q3JlYXRlVmlkZW9EZWNvZGVyKGNvbnN0IHdlYnJ0Yzo6U2RwVmlkZW9Gb3JtYXQmIGZvcm1h
dCkKK3sKKyAgICB3ZWJydGM6OlZpZGVvRGVjb2RlciogZGVjOworCisgICAgaWYgKGZvcm1hdC5u
YW1lID09IGNyaWNrZXQ6OmtIMjY0Q29kZWNOYW1lKQorICAgICAgICBkZWMgPSBuZXcgSDI2NERl
Y29kZXIoKTsKKyAgICBlbHNlIGlmIChmb3JtYXQubmFtZSA9PSBjcmlja2V0OjprVnA4Q29kZWNO
YW1lKQorICAgICAgICByZXR1cm4gVlA4RGVjb2Rlcjo6Q3JlYXRlKCk7CisgICAgZWxzZSBpZiAo
Zm9ybWF0Lm5hbWUgPT0gY3JpY2tldDo6a1ZwOUNvZGVjTmFtZSkKKyAgICAgICAgcmV0dXJuIFZQ
OURlY29kZXI6OkNyZWF0ZSgpOworICAgIGVsc2UgeworICAgICAgICBHU1RfRVJST1IoIkNvdWxk
IG5vdCBjcmVhdGUgZGVjb2RlciBmb3IgJXMiLCBmb3JtYXQubmFtZS5jX3N0cigpKTsKKworICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRy
PHdlYnJ0Yzo6VmlkZW9EZWNvZGVyPihkZWMpOworfQorCitHU3RyZWFtZXJWaWRlb0RlY29kZXJG
YWN0b3J5OjpHU3RyZWFtZXJWaWRlb0RlY29kZXJGYWN0b3J5KGJvb2wgaXNTdXBwb3J0aW5nVlA5
UHJvZmlsZTAsIGJvb2wgaXNTdXBwb3J0aW5nVlA5UHJvZmlsZTIpCisgICAgOiBtX2lzU3VwcG9y
dGluZ1ZQOVByb2ZpbGUwKGlzU3VwcG9ydGluZ1ZQOVByb2ZpbGUwKQorICAgICwgbV9pc1N1cHBv
cnRpbmdWUDlQcm9maWxlMihpc1N1cHBvcnRpbmdWUDlQcm9maWxlMikKK3sKKyAgICBlbnN1cmVH
U3RyZWFtZXJJbml0aWFsaXplZCgpOworCisgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIGRlYnVn
UmVnaXN0ZXJlZEZsYWc7CisgICAgc3RkOjpjYWxsX29uY2UoZGVidWdSZWdpc3RlcmVkRmxhZywg
W10geworICAgICAgICBHU1RfREVCVUdfQ0FURUdPUllfSU5JVCh3ZWJraXRfd2VicnRjZGVjX2Rl
YnVnLCAid2Via2l0bGlid2VicnRjdmlkZW9kZWNvZGVyIiwgMCwgIldlYktpdCBXZWJSVEMgdmlk
ZW8gZGVjb2RlciIpOworICAgIH0pOworfQorc3RkOjp2ZWN0b3I8d2VicnRjOjpTZHBWaWRlb0Zv
cm1hdD4gR1N0cmVhbWVyVmlkZW9EZWNvZGVyRmFjdG9yeTo6R2V0U3VwcG9ydGVkRm9ybWF0cygp
IGNvbnN0Cit7CisgICAgc3RkOjp2ZWN0b3I8d2VicnRjOjpTZHBWaWRlb0Zvcm1hdD4gZm9ybWF0
czsKKworICAgIFZQOERlY29kZXIoKS5BZGREZWNvZGVySWZTdXBwb3J0ZWQoZm9ybWF0cyk7Cisg
ICAgVlA5RGVjb2RlcihtX2lzU3VwcG9ydGluZ1ZQOVByb2ZpbGUwLCBtX2lzU3VwcG9ydGluZ1ZQ
OVByb2ZpbGUyKS5BZGREZWNvZGVySWZTdXBwb3J0ZWQoZm9ybWF0cyk7CisgICAgSDI2NERlY29k
ZXIoKS5BZGREZWNvZGVySWZTdXBwb3J0ZWQoZm9ybWF0cyk7CisKKyAgICByZXR1cm4gZm9ybWF0
czsKK30KK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVk
aWFzdHJlYW0vbGlid2VicnRjL2dzdHJlYW1lci9HU3RyZWFtZXJWaWRlb0RlY29kZXJGYWN0b3J5
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9saWJ3ZWJydGMvZ3N0cmVh
bWVyL0dTdHJlYW1lclZpZGVvRGVjb2RlckZhY3RvcnkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40YzZkZDAyMDgy
NzBkYmU5MGIxYWFhZTMwNTgzNmY2NDMxYjY2NmU0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbGlid2VicnRjL2dzdHJlYW1lci9HU3RyZWFt
ZXJWaWRlb0RlY29kZXJGYWN0b3J5LmgKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxOCBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICogQ29weXJpZ2h0IChDKSAyMDE4
IElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAq
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
KiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisg
KiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhaW50IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBVU0Uo
TElCV0VCUlRDKSAmJiBVU0UoR1NUUkVBTUVSKQorCisjaW5jbHVkZSAiTGliV2ViUlRDTWFjcm9z
LmgiCisjaW5jbHVkZSAiYXBpL3ZpZGVvX2NvZGVjcy92aWRlb19kZWNvZGVyX2ZhY3RvcnkuaCIK
KyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNz
IEdTdHJlYW1lclZpZGVvRGVjb2RlckZhY3RvcnkgOiBwdWJsaWMgd2VicnRjOjpWaWRlb0RlY29k
ZXJGYWN0b3J5IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBH
U3RyZWFtZXJWaWRlb0RlY29kZXJGYWN0b3J5KGJvb2wgaXNTdXBwb3J0aW5nVlA5UHJvZmlsZTAs
IGJvb2wgaXNTdXBwb3J0aW5nVlA5UHJvZmlsZTIpOworCitwcml2YXRlOgorICAgIHN0ZDo6dW5p
cXVlX3B0cjx3ZWJydGM6OlZpZGVvRGVjb2Rlcj4gQ3JlYXRlVmlkZW9EZWNvZGVyKGNvbnN0IHdl
YnJ0Yzo6U2RwVmlkZW9Gb3JtYXQmKSBmaW5hbDsKKyAgICBzdGQ6OnZlY3Rvcjx3ZWJydGM6OlNk
cFZpZGVvRm9ybWF0PiBHZXRTdXBwb3J0ZWRGb3JtYXRzKCkgY29uc3QgZmluYWw7CisKKyAgICBi
b29sIG1faXNTdXBwb3J0aW5nVlA5UHJvZmlsZTA7CisgICAgYm9vbCBtX2lzU3VwcG9ydGluZ1ZQ
OVByb2ZpbGUyOworfTsKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tZWRpYXN0cmVhbS9saWJ3ZWJydGMvZ3N0cmVhbWVyL0dTdHJlYW1lclZpZGVvRW5j
b2Rlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9saWJ3ZWJydGMv
Z3N0cmVhbWVyL0dTdHJlYW1lclZpZGVvRW5jb2Rlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDM0Mjg4NGFh
ZTYwZDMyNDRjMWYzYjdkMDM2ZTE2MmY4MTk3MjdhYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2xpYndlYnJ0Yy9nc3RyZWFtZXIvR1N0cmVh
bWVyVmlkZW9FbmNvZGVyLmNwcApAQCAtMCwwICsxLDI5MCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxOC0yMDIwIE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTgtMjAyMCBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWludCB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJHU3RyZWFtZXJWaWRlb0VuY29kZXIuaCIKKworI2lmIEVOQUJMRShWSURF
TykgJiYgRU5BQkxFKE1FRElBX1NUUkVBTSkgJiYgVVNFKExJQldFQlJUQykgJiYgVVNFKEdTVFJF
QU1FUikKKworI2luY2x1ZGUgIkdTdHJlYW1lckNvbW1vbi5oIgorI2luY2x1ZGUgPHd0Zi9TdGRN
YXAuaD4KKyNpbmNsdWRlIDx3dGYvZ2xpYi9XVEZHVHlwZS5oPgorCit1c2luZyBuYW1lc3BhY2Ug
V2ViQ29yZTsKKworR1NUX0RFQlVHX0NBVEVHT1JZKHdlYnJ0Y192ZW5jX2RlYnVnKTsKKyNkZWZp
bmUgR1NUX0NBVF9ERUZBVUxUIHdlYnJ0Y192ZW5jX2RlYnVnCisKKyNkZWZpbmUgS0JJVF9UT19C
SVQgMTAyNAorCitzdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgc2lua1RlbXBsYXRlID0gR1NU
X1NUQVRJQ19QQURfVEVNUExBVEUoInNpbmsiLCBHU1RfUEFEX1NJTkssIEdTVF9QQURfQUxXQVlT
LCBHU1RfU1RBVElDX0NBUFMoInZpZGVvL3gtcmF3KEFOWSkiKSk7CitzdGF0aWMgR3N0U3RhdGlj
UGFkVGVtcGxhdGUgc3JjVGVtcGxhdGUgPSBHU1RfU1RBVElDX1BBRF9URU1QTEFURSgic3JjIiwg
R1NUX1BBRF9TUkMsIEdTVF9QQURfQUxXQVlTLCBHU1RfU1RBVElDX0NBUFMoInZpZGVvL3gtaDI2
NCIpKTsKKwordXNpbmcgU2V0Qml0cmF0ZUZ1bmMgPSBGdW5jdGlvbjx2b2lkKEdPYmplY3QqIGVu
Y29kZXIsIGNvbnN0IGNoYXIqIHByb3BlcnR5TmFtZSwgaW50IGJpdHJhdGUpPjsKK3VzaW5nIFNl
dHVwRnVuYyA9IEZ1bmN0aW9uPHZvaWQoV2ViS2l0V2VicnRjVmlkZW9FbmNvZGVyKik+OworCitz
dHJ1Y3QgRW5jb2RlckRlZmluaXRpb24geworICAgIEdSZWZQdHI8R3N0Q2Fwcz4gY2FwczsKKyAg
ICBjb25zdCBjaGFyKiBuYW1lOworICAgIGNvbnN0IGNoYXIqIHBhcnNlck5hbWU7CisgICAgR1Jl
ZlB0cjxHc3RDYXBzPiBlbmNvZGVkRm9ybWF0OworICAgIFNldEJpdHJhdGVGdW5jIHNldEJpdHJh
dGU7CisgICAgU2V0dXBGdW5jIHNldHVwRW5jb2RlcjsKKyAgICBjb25zdCBjaGFyKiBiaXRyYXRl
UHJvcGVydHlOYW1lOworICAgIGNvbnN0IGNoYXIqIGtleWZyYW1lSW50ZXJ2YWxQcm9wZXJ0eU5h
bWU7Cit9OworCitlbnVtIEVuY29kZXJJZCB7IE5vbmUsIFgyNjQsIE9wZW5IMjY0LCBPbXhIMjY0
IH07CisKK2NsYXNzIEVuY29kZXJzIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgU3RkTWFwPEVuY29k
ZXJJZCwgRW5jb2RlckRlZmluaXRpb24+JiBzaW5nbGV0b24oKQorICAgIHsKKyAgICAgICAgc3Rh
dGljIFN0ZE1hcDxFbmNvZGVySWQsIEVuY29kZXJEZWZpbml0aW9uPiBlbmNvZGVyczsKKyAgICAg
ICAgcmV0dXJuIGVuY29kZXJzOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVyRW5j
b2RlcihFbmNvZGVySWQgaWQsIGNvbnN0IGNoYXIqIG5hbWUsIGNvbnN0IGNoYXIqIHBhcnNlck5h
bWUsIGNvbnN0IGNoYXIqIGNhcHMsIGNvbnN0IGNoYXIqIGVuY29kZWRGb3JtYXQsCisgICAgICAg
IFNldHVwRnVuYyYmIHNldHVwRW5jb2RlciwgY29uc3QgY2hhciogYml0cmF0ZVByb3BlcnR5TmFt
ZSwgU2V0Qml0cmF0ZUZ1bmMmJiBzZXRCaXRyYXRlLCBjb25zdCBjaGFyKiBrZXlmcmFtZUludGVy
dmFsUHJvcGVydHlOYW1lKQorICAgIHsKKyAgICAgICAgYXV0byBmZWF0dXJlID0gYWRvcHRHUmVm
KGdzdF9yZWdpc3RyeV9sb29rdXBfZmVhdHVyZShnc3RfcmVnaXN0cnlfZ2V0KCksIG5hbWUpKTsK
KyAgICAgICAgaWYgKCFmZWF0dXJlKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHNp
bmdsZXRvbigpLmVtcGxhY2Uoc3RkOjptYWtlX3BhaXIoaWQsIChFbmNvZGVyRGVmaW5pdGlvbikg
eworICAgICAgICAgICAgLmNhcHMgPSBhZG9wdEdSZWYoZ3N0X2NhcHNfZnJvbV9zdHJpbmcoY2Fw
cykpLAorICAgICAgICAgICAgLm5hbWUgPSBuYW1lLAorICAgICAgICAgICAgLnBhcnNlck5hbWUg
PSBwYXJzZXJOYW1lLAorICAgICAgICAgICAgLmVuY29kZWRGb3JtYXQgPSBlbmNvZGVkRm9ybWF0
ID8gYWRvcHRHUmVmKGdzdF9jYXBzX2Zyb21fc3RyaW5nKGVuY29kZWRGb3JtYXQpKSA6IG51bGxw
dHIsCisgICAgICAgICAgICAuc2V0Qml0cmF0ZSA9IFdURk1vdmUoc2V0Qml0cmF0ZSksCisgICAg
ICAgICAgICAuc2V0dXBFbmNvZGVyID0gV1RGTW92ZShzZXR1cEVuY29kZXIpLAorICAgICAgICAg
ICAgLmJpdHJhdGVQcm9wZXJ0eU5hbWUgPSBiaXRyYXRlUHJvcGVydHlOYW1lLAorICAgICAgICAg
ICAgLmtleWZyYW1lSW50ZXJ2YWxQcm9wZXJ0eU5hbWUgPSBrZXlmcmFtZUludGVydmFsUHJvcGVy
dHlOYW1lLAorICAgICAgICB9KSk7CisgICAgfQorCisgICAgc3RhdGljIEVuY29kZXJEZWZpbml0
aW9uKiBkZWZpbml0aW9uKEVuY29kZXJJZCBpZCkKKyAgICB7CisgICAgICAgIGlmIChpZCA9PSBO
b25lKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiAmc2luZ2xl
dG9uKClbaWRdOworICAgIH0KK307CisKK3N0cnVjdCBfV2ViS2l0V2VicnRjVmlkZW9FbmNvZGVy
UHJpdmF0ZSB7CisgICAgRW5jb2RlcklkIGVuY29kZXJJZDsKKyAgICBHUmVmUHRyPEdzdEVsZW1l
bnQ+IGVuY29kZXI7CisgICAgR1JlZlB0cjxHc3RFbGVtZW50PiBwYXJzZXI7CisgICAgdW5zaWdu
ZWQgYml0cmF0ZTsKK307CisKKyNkZWZpbmUgd2Via2l0X3dlYnJ0Y192aWRlb19lbmNvZGVyX3Bh
cmVudF9jbGFzcyBwYXJlbnRfY2xhc3MKK1dFQktJVF9ERUZJTkVfVFlQRV9XSVRIX0NPREUoV2Vi
S2l0V2VicnRjVmlkZW9FbmNvZGVyLCB3ZWJraXRfd2VicnRjX3ZpZGVvX2VuY29kZXIsIEdTVF9U
WVBFX0JJTiwKKyAgICBHU1RfREVCVUdfQ0FURUdPUllfSU5JVCh3ZWJydGNfdmVuY19kZWJ1Zywg
IndlYnJ0Y2VuY29kZXIiLCAwLCAiVmlkZW8gZW5jb2RlciBmb3IgV2ViUlRDIikpCisKK2VudW0g
eworICAgIFBST1BfRk9STUFUID0gMSwKKyAgICBQUk9QX0VOQ09ERVIsCisgICAgUFJPUF9CSVRS
QVRFLAorICAgIFBST1BfS0VZRlJBTUVfSU5URVJWQUwsCisgICAgTl9QUk9QUworfTsKKworc3Rh
dGljIHZvaWQgd2VicnRjVmlkZW9FbmNvZGVyR2V0UHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBn
dWludCBwcm9wX2lkLCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKK3sKKyAgICBh
dXRvKiBzZWxmID0gV0VCS0lUX1dFQlJUQ19WSURFT19FTkNPREVSKG9iamVjdCk7CisgICAgYXV0
byogcHJpdiA9IHNlbGYtPnByaXY7CisKKyAgICBzd2l0Y2ggKHByb3BfaWQpIHsKKyAgICBjYXNl
IFBST1BfRk9STUFUOgorICAgICAgICBpZiAocHJpdi0+ZW5jb2RlcklkICE9IE5vbmUpIHsKKyAg
ICAgICAgICAgIGF1dG8gZW5jb2RlciA9IEVuY29kZXJzOjpkZWZpbml0aW9uKHByaXYtPmVuY29k
ZXJJZCk7CisgICAgICAgICAgICBnX3ZhbHVlX3NldF9ib3hlZCh2YWx1ZSwgZW5jb2Rlci0+Y2Fw
cy5nZXQoKSk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgZ192YWx1ZV9zZXRfYm94ZWQo
dmFsdWUsIG51bGxwdHIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfRU5DT0RFUjoK
KyAgICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCBwcml2LT5lbmNvZGVyLmdldCgpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0JJVFJBVEU6CisgICAgICAgIGdfdmFsdWVf
c2V0X3VpbnQodmFsdWUsIHByaXYtPmJpdHJhdGUpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IFBST1BfS0VZRlJBTUVfSU5URVJWQUw6CisgICAgICAgIGlmIChwcml2LT5lbmNvZGVyKSB7Cisg
ICAgICAgICAgICBhdXRvIGVuY29kZXIgPSBFbmNvZGVyczo6ZGVmaW5pdGlvbihwcml2LT5lbmNv
ZGVySWQpOworICAgICAgICAgICAgZ19vYmplY3RfZ2V0X3Byb3BlcnR5KEdfT0JKRUNUKHByaXYt
PmVuY29kZXIuZ2V0KCkpLCBlbmNvZGVyLT5rZXlmcmFtZUludGVydmFsUHJvcGVydHlOYW1lLCB2
YWx1ZSk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAg
R19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMp
OworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHdlYnJ0Y1ZpZGVvRW5j
b2RlclNldEJpdHJhdGUoV2ViS2l0V2VicnRjVmlkZW9FbmNvZGVyKiBzZWxmLCBndWludCBiaXRy
YXRlKQoreworICAgIGF1dG8qIHByaXYgPSBzZWxmLT5wcml2OworICAgIHByaXYtPmJpdHJhdGUg
PSBiaXRyYXRlOworCisgICAgaWYgKHByaXYtPmVuY29kZXJJZCAhPSBOb25lKSB7CisgICAgICAg
IGF1dG8gZW5jb2RlciA9IEVuY29kZXJzOjpkZWZpbml0aW9uKHByaXYtPmVuY29kZXJJZCk7Cisg
ICAgICAgIGVuY29kZXItPnNldEJpdHJhdGUoR19PQkpFQ1QocHJpdi0+ZW5jb2Rlci5nZXQoKSks
IGVuY29kZXItPmJpdHJhdGVQcm9wZXJ0eU5hbWUsIHByaXYtPmJpdHJhdGUpOworICAgIH0KK30K
Kworc3RhdGljIHZvaWQgd2VicnRjVmlkZW9FbmNvZGVyU2V0RW5jb2RlcihXZWJLaXRXZWJydGNW
aWRlb0VuY29kZXIqIHNlbGYsIEdSZWZQdHI8R3N0RWxlbWVudD4mJiBlbmNvZGVyRWxlbWVudCwg
RW5jb2RlcklkIGVuY29kZXJJZCkKK3sKKyAgICBhdXRvKiBwcml2ID0gc2VsZi0+cHJpdjsKKyAg
ICBwcml2LT5lbmNvZGVySWQgPSBlbmNvZGVySWQ7CisgICAgcHJpdi0+ZW5jb2RlciA9IFdURk1v
dmUoZW5jb2RlckVsZW1lbnQpOworCisgICAgYXV0byBlbmNvZGVyID0gRW5jb2RlcnM6OmRlZmlu
aXRpb24oZW5jb2RlcklkKTsKKyAgICBBU1NFUlQoZW5jb2Rlcik7CisgICAgaWYgKGVuY29kZXIt
PnBhcnNlck5hbWUpCisgICAgICAgIHByaXYtPnBhcnNlciA9IG1ha2VHU3RyZWFtZXJFbGVtZW50
KGVuY29kZXItPnBhcnNlck5hbWUsIG51bGxwdHIpOworCisgICAgZW5jb2Rlci0+c2V0dXBFbmNv
ZGVyKHNlbGYpOworCisgICAgZ3N0X2Jpbl9hZGQoR1NUX0JJTl9DQVNUKHNlbGYpLCBwcml2LT5l
bmNvZGVyLmdldCgpKTsKKworICAgIGF1dG8gc2lua1BhZFRhcmdldCA9IGFkb3B0R1JlZihnc3Rf
ZWxlbWVudF9nZXRfc3RhdGljX3BhZChwcml2LT5lbmNvZGVyLmdldCgpLCAic2luayIpKTsKKyAg
ICBhdXRvIHNpbmtQYWQgPSBhZG9wdEdSZWYoZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQoR1NU
X0VMRU1FTlRfQ0FTVChzZWxmKSwgInNpbmsiKSk7CisgICAgZ3N0X2dob3N0X3BhZF9zZXRfdGFy
Z2V0KEdTVF9HSE9TVF9QQUQoc2lua1BhZC5nZXQoKSksIHNpbmtQYWRUYXJnZXQuZ2V0KCkpOwor
CisgICAgR1JlZlB0cjxHc3RQYWQ+IHNyY1BhZFRhcmdldDsKKyAgICBpZiAocHJpdi0+cGFyc2Vy
KSB7CisgICAgICAgIGdzdF9iaW5fYWRkKEdTVF9CSU5fQ0FTVChzZWxmKSwgcHJpdi0+cGFyc2Vy
LmdldCgpKTsKKyAgICAgICAgZ3N0X2VsZW1lbnRfbGluayhwcml2LT5lbmNvZGVyLmdldCgpLCBw
cml2LT5wYXJzZXIuZ2V0KCkpOworICAgICAgICBzcmNQYWRUYXJnZXQgPSBhZG9wdEdSZWYoZ3N0
X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQocHJpdi0+cGFyc2VyLmdldCgpLCAic3JjIikpOworICAg
IH0gZWxzZQorICAgICAgICBzcmNQYWRUYXJnZXQgPSBhZG9wdEdSZWYoZ3N0X2VsZW1lbnRfZ2V0
X3N0YXRpY19wYWQocHJpdi0+ZW5jb2Rlci5nZXQoKSwgInNyYyIpKTsKKworICAgIGlmIChlbmNv
ZGVyLT5lbmNvZGVkRm9ybWF0KSB7CisgICAgICAgIGF1dG8qIGNhcHNmaWx0ZXIgPSBnc3RfZWxl
bWVudF9mYWN0b3J5X21ha2UoImNhcHNmaWx0ZXIiLCBudWxscHRyKTsKKyAgICAgICAgZ19vYmpl
Y3Rfc2V0KGNhcHNmaWx0ZXIsICJjYXBzIiwgZW5jb2Rlci0+ZW5jb2RlZEZvcm1hdC5nZXQoKSwg
bnVsbHB0cik7CisKKyAgICAgICAgZ3N0X2Jpbl9hZGQoR1NUX0JJTl9DQVNUKHNlbGYpLCBjYXBz
ZmlsdGVyKTsKKyAgICAgICAgYXV0byBzaW5rUGFkID0gYWRvcHRHUmVmKGdzdF9lbGVtZW50X2dl
dF9zdGF0aWNfcGFkKGNhcHNmaWx0ZXIsICJzaW5rIikpOworICAgICAgICBnc3RfcGFkX2xpbmso
c3JjUGFkVGFyZ2V0LmdldCgpLCBzaW5rUGFkLmdldCgpKTsKKyAgICAgICAgc3JjUGFkVGFyZ2V0
ID0gYWRvcHRHUmVmKGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkKGNhcHNmaWx0ZXIsICJzcmMi
KSk7CisgICAgfQorCisgICAgYXV0byBzcmNQYWQgPSBhZG9wdEdSZWYoZ3N0X2VsZW1lbnRfZ2V0
X3N0YXRpY19wYWQoR1NUX0VMRU1FTlRfQ0FTVChzZWxmKSwgInNyYyIpKTsKKyAgICBnc3RfZ2hv
c3RfcGFkX3NldF90YXJnZXQoR1NUX0dIT1NUX1BBRChzcmNQYWQuZ2V0KCkpLCBzcmNQYWRUYXJn
ZXQuZ2V0KCkpOworCisgICAgd2VicnRjVmlkZW9FbmNvZGVyU2V0Qml0cmF0ZShzZWxmLCBwcml2
LT5iaXRyYXRlKTsKK30KKworc3RhdGljIHZvaWQgd2VicnRjVmlkZW9FbmNvZGVyU2V0Rm9ybWF0
KFdlYktpdFdlYnJ0Y1ZpZGVvRW5jb2Rlciogc2VsZiwgY29uc3QgR3N0Q2FwcyogY2FwcykKK3sK
KyAgICBpZiAoIWNhcHMpCisgICAgICAgIHJldHVybjsKKworICAgIGZvciAoY29uc3QgYXV0byYg
cGFpciA6IEVuY29kZXJzOjpzaW5nbGV0b24oKSkgeworICAgICAgICBjb25zdCBhdXRvJiBlbmNv
ZGVyID0gcGFpci5zZWNvbmQ7CisgICAgICAgIGlmIChnc3RfY2Fwc19jYW5faW50ZXJzZWN0KGVu
Y29kZXIuY2Fwcy5nZXQoKSwgY2FwcykpIHsKKyAgICAgICAgICAgIEdSZWZQdHI8R3N0RWxlbWVu
dD4gZWxlbWVudCA9IG1ha2VHU3RyZWFtZXJFbGVtZW50KGVuY29kZXIubmFtZSwgbnVsbHB0cik7
CisgICAgICAgICAgICB3ZWJydGNWaWRlb0VuY29kZXJTZXRFbmNvZGVyKHNlbGYsIFdURk1vdmUo
ZWxlbWVudCksIHBhaXIuZmlyc3QpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9Cisg
ICAgfQorCisgICAgR1NUX0VSUk9SKCJObyBlbmNvZGVyIGZvdW5kIGZvciBmb3JtYXQgJSIgR1NU
X1BUUl9GT1JNQVQsIGNhcHMpOworfQorCitzdGF0aWMgdm9pZCB3ZWJydGNWaWRlb0VuY29kZXJT
ZXRQcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BfaWQsIGNvbnN0IEdWYWx1ZSog
dmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQoreworICAgIGF1dG8qIHNlbGYgPSBXRUJLSVRfV0VC
UlRDX1ZJREVPX0VOQ09ERVIob2JqZWN0KTsKKyAgICBhdXRvKiBwcml2ID0gc2VsZi0+cHJpdjsK
KworICAgIHN3aXRjaCAocHJvcF9pZCkgeworICAgIGNhc2UgUFJPUF9GT1JNQVQ6CisgICAgICAg
IHdlYnJ0Y1ZpZGVvRW5jb2RlclNldEZvcm1hdChzZWxmLCBnc3RfdmFsdWVfZ2V0X2NhcHModmFs
dWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0JJVFJBVEU6CisgICAgICAgIHdl
YnJ0Y1ZpZGVvRW5jb2RlclNldEJpdHJhdGUoc2VsZiwgZ192YWx1ZV9nZXRfdWludCh2YWx1ZSkp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfS0VZRlJBTUVfSU5URVJWQUw6CisgICAg
ICAgIGlmIChwcml2LT5lbmNvZGVyKSB7CisgICAgICAgICAgICBhdXRvIGVuY29kZXIgPSBFbmNv
ZGVyczo6ZGVmaW5pdGlvbihwcml2LT5lbmNvZGVySWQpOworICAgICAgICAgICAgZ19vYmplY3Rf
c2V0KHByaXYtPmVuY29kZXIuZ2V0KCksIGVuY29kZXItPmtleWZyYW1lSW50ZXJ2YWxQcm9wZXJ0
eU5hbWUsIGdfdmFsdWVfZ2V0X3VpbnQodmFsdWUpLCBudWxscHRyKTsKKyAgICAgICAgfQorICAg
ICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURf
UFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7CisgICAgICAgIGJyZWFrOworICAg
IH0KK30KKworc3RhdGljIHZvaWQgc2V0Qml0cmF0ZUtiaXRQZXJTZWMoR09iamVjdCogZW5jb2Rl
ciwgY29uc3QgY2hhciogcHJvcGVydHlOYW1lLCBpbnQgYml0cmF0ZSkKK3sKKyAgICBnX29iamVj
dF9zZXQoZW5jb2RlciwgcHJvcGVydHlOYW1lLCBiaXRyYXRlLCBudWxscHRyKTsKK30KKworc3Rh
dGljIHZvaWQgc2V0Qml0cmF0ZUJpdFBlclNlYyhHT2JqZWN0KiBlbmNvZGVyLCBjb25zdCBjaGFy
KiBwcm9wZXJ0eU5hbWUsIGludCBiaXRyYXRlKQoreworICAgIGdfb2JqZWN0X3NldChlbmNvZGVy
LCBwcm9wZXJ0eU5hbWUsIGJpdHJhdGUgKiBLQklUX1RPX0JJVCwgbnVsbHB0cik7Cit9CisKK3N0
YXRpYyB2b2lkIHdlYnJ0Y1ZpZGVvRW5jb2RlckNvbnN0cnVjdGVkKEdPYmplY3QqIGVuY29kZXIp
Cit7CisgICAgYXV0byogc2VsZiA9IFdFQktJVF9XRUJSVENfVklERU9fRU5DT0RFUihlbmNvZGVy
KTsKKyAgICBzZWxmLT5wcml2LT5lbmNvZGVySWQgPSBOb25lOworICAgIGdzdF9lbGVtZW50X2Fk
ZF9wYWQoR1NUX0VMRU1FTlRfQ0FTVChzZWxmKSwgd2Via2l0R3N0R2hvc3RQYWRGcm9tU3RhdGlj
VGVtcGxhdGUoJnNpbmtUZW1wbGF0ZSwgInNpbmsiLCBudWxscHRyKSk7CisgICAgZ3N0X2VsZW1l
bnRfYWRkX3BhZChHU1RfRUxFTUVOVF9DQVNUKHNlbGYpLCB3ZWJraXRHc3RHaG9zdFBhZEZyb21T
dGF0aWNUZW1wbGF0ZSgmc3JjVGVtcGxhdGUsICJzcmMiLCBudWxscHRyKSk7Cit9CisKK3N0YXRp
YyB2b2lkIHdlYmtpdF93ZWJydGNfdmlkZW9fZW5jb2Rlcl9jbGFzc19pbml0KFdlYktpdFdlYnJ0
Y1ZpZGVvRW5jb2RlckNsYXNzKiBrbGFzcykKK3sKKyAgICBHT2JqZWN0Q2xhc3MqIG9iamVjdENs
YXNzID0gR19PQkpFQ1RfQ0xBU1Moa2xhc3MpOworICAgIG9iamVjdENsYXNzLT5jb25zdHJ1Y3Rl
ZCA9IHdlYnJ0Y1ZpZGVvRW5jb2RlckNvbnN0cnVjdGVkOworICAgIG9iamVjdENsYXNzLT5nZXRf
cHJvcGVydHkgPSB3ZWJydGNWaWRlb0VuY29kZXJHZXRQcm9wZXJ0eTsKKyAgICBvYmplY3RDbGFz
cy0+c2V0X3Byb3BlcnR5ID0gd2VicnRjVmlkZW9FbmNvZGVyU2V0UHJvcGVydHk7CisKKyAgICBn
X29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KG9iamVjdENsYXNzLCBQUk9QX0ZPUk1BVCwg
Z19wYXJhbV9zcGVjX2JveGVkKCJmb3JtYXQiLCAiRm9ybWF0IGFzIGNhcHMiLCAiU2V0IHRoZSBj
YXBzIG9mIHRoZSBmb3JtYXQgdG8gYmUgdXNlZC4iLCBHU1RfVFlQRV9DQVBTLCBXRUJLSVRfUEFS
QU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KG9i
amVjdENsYXNzLCBQUk9QX0VOQ09ERVIsIGdfcGFyYW1fc3BlY19vYmplY3QoImVuY29kZXIiLCAi
VGhlIGFjdHVhbCBlbmNvZGVyIGVsZW1lbnQiLCAiVGhlIGVuY29kZXIgZWxlbWVudCIsIEdTVF9U
WVBFX0VMRU1FTlQsIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xh
c3NfaW5zdGFsbF9wcm9wZXJ0eShvYmplY3RDbGFzcywgUFJPUF9CSVRSQVRFLCBnX3BhcmFtX3Nw
ZWNfdWludCgiYml0cmF0ZSIsICJCaXRyYXRlIiwgIlRoZSBiaXRyYXRlIGluIGtiaXQgcGVyIHNl
Y29uZCIsIDAsIEdfTUFYSU5ULCAyMDQ4LAorICAgICAgICBzdGF0aWNfY2FzdDxHUGFyYW1GbGFn
cz4oR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTIHwgR19QQVJBTV9D
T05TVFJVQ1QpKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KG9iamVj
dENsYXNzLCBQUk9QX0tFWUZSQU1FX0lOVEVSVkFMLCBnX3BhcmFtX3NwZWNfdWludCgia2V5ZnJh
bWUtaW50ZXJ2YWwiLCAiS2V5ZnJhbWUgaW50ZXJ2YWwiLCAiVGhlIGludGVydmFsIGJldHdlZW4g
a2V5ZnJhbWVzIiwgMCwgR19NQVhJTlQsIDAsCisgICAgICAgIHN0YXRpY19jYXN0PEdQYXJhbUZs
YWdzPihHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MgfCBHX1BBUkFN
X0NPTlNUUlVDVCkpKTsKKworICAgIEVuY29kZXJzOjpyZWdpc3RlckVuY29kZXIoT214SDI2NCwg
Im9teGgyNjRlbmMiLCAiaDI2NHBhcnNlIiwgInZpZGVvL3gtaDI2NCIsCisgICAgICAgICJ2aWRl
by94LWgyNjQsYWxpZ25tZW50PWF1LHN0cmVhbS1mb3JtYXQ9Ynl0ZS1zdHJlYW0scHJvZmlsZT1i
YXNlbGluZSIsCisgICAgICAgIFtdKFdlYktpdFdlYnJ0Y1ZpZGVvRW5jb2Rlciogc2VsZikgewor
ICAgICAgICAgICAgZ3N0X3V0aWxfc2V0X29iamVjdF9hcmcoR19PQkpFQ1Qoc2VsZi0+cHJpdi0+
ZW5jb2Rlci5nZXQoKSksICJjb250cm9sLXJhdGUiLCAidmFyaWFibGUiKTsKKyAgICAgICAgICAg
IGdfb2JqZWN0X3NldChzZWxmLT5wcml2LT5wYXJzZXIuZ2V0KCksICJjb25maWctaW50ZXJ2YWwi
LCAxLCBudWxscHRyKTsKKyAgICAgICAgfSwgInRhcmdldC1iaXRyYXRlIiwgc2V0Qml0cmF0ZUJp
dFBlclNlYywgImludGVydmFsLWludHJhZnJhbWVzIik7CisgICAgRW5jb2RlcnM6OnJlZ2lzdGVy
RW5jb2RlcihYMjY0LCAieDI2NGVuYyIsICJoMjY0cGFyc2UiLCAidmlkZW8veC1oMjY0IiwKKyAg
ICAgICAgInZpZGVvL3gtaDI2NCxhbGlnbm1lbnQ9YXUsc3RyZWFtLWZvcm1hdD1ieXRlLXN0cmVh
bSxwcm9maWxlPWJhc2VsaW5lIiwKKyAgICAgICAgW10oV2ViS2l0V2VicnRjVmlkZW9FbmNvZGVy
KiBzZWxmKSB7CisgICAgICAgICAgICBnc3RfdXRpbF9zZXRfb2JqZWN0X2FyZyhHX09CSkVDVChz
ZWxmLT5wcml2LT5lbmNvZGVyLmdldCgpKSwgInR1bmUiLCAiemVyb2xhdGVuY3kiKTsKKyAgICAg
ICAgICAgIGdfb2JqZWN0X3NldChzZWxmLT5wcml2LT5wYXJzZXIuZ2V0KCksICJjb25maWctaW50
ZXJ2YWwiLCAxLCBudWxscHRyKTsKKyAgICAgICAgfSwgImJpdHJhdGUiLCBzZXRCaXRyYXRlS2Jp
dFBlclNlYywgImtleS1pbnQtbWF4Iik7CisgICAgRW5jb2RlcnM6OnJlZ2lzdGVyRW5jb2RlcihP
cGVuSDI2NCwgIm9wZW5oMjY0ZW5jIiwgImgyNjRwYXJzZSIsICJ2aWRlby94LWgyNjQiLAorICAg
ICAgICAidmlkZW8veC1oMjY0LGFsaWdubWVudD1hdSxzdHJlYW0tZm9ybWF0PWJ5dGUtc3RyZWFt
LHByb2ZpbGU9YmFzZWxpbmUiLAorICAgICAgICBbXShXZWJLaXRXZWJydGNWaWRlb0VuY29kZXIq
IHNlbGYpIHsKKyAgICAgICAgICAgIGdfb2JqZWN0X3NldChzZWxmLT5wcml2LT5wYXJzZXIuZ2V0
KCksICJjb25maWctaW50ZXJ2YWwiLCAxLCBudWxscHRyKTsKKyAgICAgICAgfSwgImJpdHJhdGUi
LCBzZXRCaXRyYXRlQml0UGVyU2VjLCAiZ29wLXNpemUiKTsKK30KKworI2VuZGlmIC8vIEVOQUJM
RShWSURFTykgJiYgRU5BQkxFKE1FRElBX1NUUkVBTSkgJiYgVVNFKExJQldFQlJUQykgJiYgVVNF
KEdTVFJFQU1FUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3Ry
ZWFtL2xpYndlYnJ0Yy9nc3RyZWFtZXIvR1N0cmVhbWVyVmlkZW9FbmNvZGVyLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9saWJ3ZWJydGMvZ3N0cmVhbWVyL0dTdHJlYW1l
clZpZGVvRW5jb2Rlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjRkNjZlZDdlYjM5M2JkZmExOTEzOTJhYTEyN2Uz
OGUyMTA1OTkwZjYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
ZWRpYXN0cmVhbS9saWJ3ZWJydGMvZ3N0cmVhbWVyL0dTdHJlYW1lclZpZGVvRW5jb2Rlci5oCkBA
IC0wLDAgKzEsNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggTWV0cm9sb2dpY2FsIEdy
b3VwIEIuVi4KKyAqIENvcHlyaWdodCAoQykgMjAxOCBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWlu
dCB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgor
ICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8Z3N0L2dzdC5oPgorCitHX0JFR0lOX0RF
Q0xTCisKKyNkZWZpbmUgV0VCS0lUX1RZUEVfV0VCUlRDX1ZJREVPX0VOQ09ERVIgKHdlYmtpdF93
ZWJydGNfdmlkZW9fZW5jb2Rlcl9nZXRfdHlwZSgpKQorI2RlZmluZSBXRUJLSVRfV0VCUlRDX1ZJ
REVPX0VOQ09ERVIob2JqKSAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJ
VF9UWVBFX1dFQlJUQ19WSURFT19FTkNPREVSLCBXZWJLaXRXZWJydGNWaWRlb0VuY29kZXIpKQor
I2RlZmluZSBXRUJLSVRfV0VCUlRDX1ZJREVPX0VOQ09ERVJfQ0xBU1Moa2xhc3MpIChHX1RZUEVf
Q0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCBXRUJLSVRfVFlQRV9XRUJSVENfVklERU9fRU5DT0RF
UiwgV2ViS2l0V2VicnRjVmlkZW9FbmNvZGVyQ2xhc3MpKQorI2RlZmluZSBXRUJLSVRfSVNfV0VC
UlRDX1ZJREVPX0VOQ09ERVIob2JqKSAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiks
IFdFQktJVF9UWVBFX1dFQlJUQ19WSURFT19FTkNPREVSKSkKKyNkZWZpbmUgV0VCS0lUX0lTX1dF
QlJUQ19WSURFT19FTkNPREVSX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUo
KGtsYXNzKSwgV0VCS0lUX1RZUEVfV0VCUlRDX1ZJREVPX0VOQ09ERVIpKQorCit0eXBlZGVmIHN0
cnVjdCBfV2ViS2l0V2VicnRjVmlkZW9FbmNvZGVyIFdlYktpdFdlYnJ0Y1ZpZGVvRW5jb2RlcjsK
K3R5cGVkZWYgc3RydWN0IF9XZWJLaXRXZWJydGNWaWRlb0VuY29kZXJDbGFzcyBXZWJLaXRXZWJy
dGNWaWRlb0VuY29kZXJDbGFzczsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRXZWJydGNWaWRlb0Vu
Y29kZXJQcml2YXRlIFdlYktpdFdlYnJ0Y1ZpZGVvRW5jb2RlclByaXZhdGU7CisKK3N0cnVjdCBf
V2ViS2l0V2VicnRjVmlkZW9FbmNvZGVyIHsKKyAgICBHc3RCaW4gcGFyZW50OworCisgICAgV2Vi
S2l0V2VicnRjVmlkZW9FbmNvZGVyUHJpdmF0ZSogcHJpdjsKK307CisKK3N0cnVjdCBfV2ViS2l0
V2VicnRjVmlkZW9FbmNvZGVyQ2xhc3MgeworICAgIEdzdEJpbkNsYXNzIHBhcmVudENsYXNzOwor
fTsKKworR1R5cGUgd2Via2l0X3dlYnJ0Y192aWRlb19lbmNvZGVyX2dldF90eXBlKHZvaWQpOwor
CitHX0VORF9ERUNMUwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFz
dHJlYW0vbGlid2VicnRjL2dzdHJlYW1lci9HU3RyZWFtZXJWaWRlb0VuY29kZXJGYWN0b3J5LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2xpYndlYnJ0Yy9nc3RyZWFt
ZXIvR1N0cmVhbWVyVmlkZW9FbmNvZGVyRmFjdG9yeS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTg2Mjk2ZmVk
Yzg3YmQ1ZTIwMjEyNjUyNTcyMGVjNDVmZWU2NzI2YwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2xpYndlYnJ0Yy9nc3RyZWFtZXIvR1N0cmVh
bWVyVmlkZW9FbmNvZGVyRmFjdG9yeS5jcHAKQEAgLTAsMCArMSw0NTQgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTggTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqIENvcHlyaWdodCAoQykg
MjAxOCBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWludCB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAq
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KworI2lmIEVOQUJMRShWSURFTykgJiYgRU5BQkxFKE1FRElBX1NUUkVBTSkgJiYgVVNFKExJQldF
QlJUQykgJiYgVVNFKEdTVFJFQU1FUikKKyNpbmNsdWRlICJHU3RyZWFtZXJWaWRlb0VuY29kZXJG
YWN0b3J5LmgiCisKKyNpbmNsdWRlICJHU3RyZWFtZXJWaWRlb0NvbW1vbi5oIgorI2luY2x1ZGUg
IkdTdHJlYW1lclZpZGVvRW5jb2Rlci5oIgorI2luY2x1ZGUgIkdTdHJlYW1lclZpZGVvRnJhbWVM
aWJXZWJSVEMuaCIKKyNpbmNsdWRlICJMaWJXZWJSVENXZWJLaXRNYWNyb3MuaCIKKyNpbmNsdWRl
ICJ3ZWJydGMvY29tbW9uX3ZpZGVvL2gyNjQvaDI2NF9jb21tb24uaCIKKyNpbmNsdWRlICJ3ZWJy
dGMvbWVkaWEvYmFzZS92cDlfcHJvZmlsZS5oIgorI2luY2x1ZGUgIndlYnJ0Yy9tb2R1bGVzL3Zp
ZGVvX2NvZGluZy9jb2RlY3MvaDI2NC9pbmNsdWRlL2gyNjQuaCIKKyNpbmNsdWRlICJ3ZWJydGMv
bW9kdWxlcy92aWRlb19jb2RpbmcvY29kZWNzL3ZwOC9pbmNsdWRlL3ZwOC5oIgorI2luY2x1ZGUg
IndlYnJ0Yy9tb2R1bGVzL3ZpZGVvX2NvZGluZy9jb2RlY3MvdnA4L2xpYnZweF92cDhfZW5jb2Rl
ci5oIgorI2luY2x1ZGUgIndlYnJ0Yy9tb2R1bGVzL3ZpZGVvX2NvZGluZy9jb2RlY3MvdnA5L2lu
Y2x1ZGUvdnA5LmgiCisjaW5jbHVkZSAid2VicnRjL21vZHVsZXMvdmlkZW9fY29kaW5nL2luY2x1
ZGUvdmlkZW9fY29kZWNfaW50ZXJmYWNlLmgiCisjaW5jbHVkZSAid2VicnRjL21vZHVsZXMvdmlk
ZW9fY29kaW5nL3V0aWxpdHkvc2ltdWxjYXN0X3V0aWxpdHkuaCIKKyNpbmNsdWRlIDxnc3QvYXBw
L2dzdGFwcHNpbmsuaD4KKyNpbmNsdWRlIDxnc3QvYXBwL2dzdGFwcHNyYy5oPgorCisjZGVmaW5l
IEdTVF9VU0VfVU5TVEFCTEVfQVBJCisjaW5jbHVkZSA8Z3N0L2NvZGVjcGFyc2Vycy9nc3RoMjY0
cGFyc2VyLmg+CisjdW5kZWYgR1NUX1VTRV9VTlNUQUJMRV9BUEkKKworI2luY2x1ZGUgPGdzdC9w
YnV0aWxzL2VuY29kaW5nLXByb2ZpbGUuaD4KKyNpbmNsdWRlIDxnc3QvdmlkZW8vdmlkZW8uaD4K
KyNpbmNsdWRlIDx3dGYvQXRvbWljcy5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5j
bHVkZSA8d3RmL0xvY2suaD4KKyNpbmNsdWRlIDx3dGYvU3RkTWFwLmg+CisjaW5jbHVkZSA8d3Rm
L3RleHQvU3RyaW5nQ29uY2F0ZW5hdGVOdW1iZXJzLmg+CisKK0dTVF9ERUJVR19DQVRFR09SWSh3
ZWJraXRfd2VicnRjZW5jX2RlYnVnKTsKKyNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIHdlYmtpdF93
ZWJydGNlbmNfZGVidWcKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBHU3RyZWFtZXJF
bmNvZGVkSW1hZ2VCdWZmZXIgOiBwdWJsaWMgd2VicnRjOjpFbmNvZGVkSW1hZ2VCdWZmZXJJbnRl
cmZhY2UgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworCitwdWJsaWM6CisgICAgc3Rh
dGljIHJ0Yzo6c2NvcGVkX3JlZnB0cjxHU3RyZWFtZXJFbmNvZGVkSW1hZ2VCdWZmZXI+IGNyZWF0
ZShHUmVmUHRyPEdzdFNhbXBsZT4mJiBzYW1wbGUpCisgICAgeworICAgICAgICByZXR1cm4gbmV3
IHJ0Yzo6UmVmQ291bnRlZE9iamVjdDxHU3RyZWFtZXJFbmNvZGVkSW1hZ2VCdWZmZXI+KFdURk1v
dmUoc2FtcGxlKSk7CisgICAgfQorCisgICAgY29uc3QgdWludDhfdCogZGF0YSgpIGNvbnN0IGZp
bmFsIHsgcmV0dXJuIG1fbWFwcGVkQnVmZmVyLT5kYXRhKCk7IH0KKyAgICB1aW50OF90KiBkYXRh
KCkgZmluYWwgeyByZXR1cm4gbV9tYXBwZWRCdWZmZXItPmRhdGEoKTsgfQorICAgIHNpemVfdCBz
aXplKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9tYXBwZWRCdWZmZXItPnNpemUoKTsgfQorCisg
ICAgY29uc3QgR3N0QnVmZmVyKiBnZXRCdWZmZXIoKSBjb25zdCB7IHJldHVybiBnc3Rfc2FtcGxl
X2dldF9idWZmZXIobV9zYW1wbGUuZ2V0KCkpOyB9CisgICAgc3RkOjpvcHRpb25hbDxGbG9hdFNp
emU+IGdldFZpZGVvUmVzb2x1dGlvbigpIGNvbnN0IHsgcmV0dXJuIGdldFZpZGVvUmVzb2x1dGlv
bkZyb21DYXBzKGdzdF9zYW1wbGVfZ2V0X2NhcHMobV9zYW1wbGUuZ2V0KCkpKTsgfQorCitwcm90
ZWN0ZWQ6CisgICAgR1N0cmVhbWVyRW5jb2RlZEltYWdlQnVmZmVyKCkgPSBkZWZhdWx0OworICAg
IH5HU3RyZWFtZXJFbmNvZGVkSW1hZ2VCdWZmZXIoKSA9IGRlZmF1bHQ7CisgICAgR1N0cmVhbWVy
RW5jb2RlZEltYWdlQnVmZmVyKEdSZWZQdHI8R3N0U2FtcGxlPiYmIHNhbXBsZSkKKyAgICAgICAg
OiBtX3NhbXBsZShzYW1wbGUpCisgICAgeworICAgICAgICBtX21hcHBlZEJ1ZmZlciA9IEdzdE1h
cHBlZE93bmVkQnVmZmVyOjpjcmVhdGUoZ3N0X3NhbXBsZV9nZXRfYnVmZmVyKG1fc2FtcGxlLmdl
dCgpKSk7CisgICAgfQorCisgICAgR1JlZlB0cjxHc3RTYW1wbGU+IG1fc2FtcGxlOworICAgIFJl
ZlB0cjxHc3RNYXBwZWRPd25lZEJ1ZmZlcj4gbV9tYXBwZWRCdWZmZXI7Cit9OworCitjbGFzcyBH
U3RyZWFtZXJWaWRlb0VuY29kZXIgOiBwdWJsaWMgd2VicnRjOjpWaWRlb0VuY29kZXIgeworICAg
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIEdTdHJlYW1lclZpZGVvRW5j
b2Rlcihjb25zdCB3ZWJydGM6OlNkcFZpZGVvRm9ybWF0JikKKyAgICAgICAgOiBtX2ZpcnN0RnJh
bWVQdHMoR1NUX0NMT0NLX1RJTUVfTk9ORSkKKyAgICAgICAgLCBtX3Jlc3RyaWN0aW9uQ2Fwcyhh
ZG9wdEdSZWYoZ3N0X2NhcHNfbmV3X2VtcHR5X3NpbXBsZSgidmlkZW8veC1yYXciKSkpCisgICAg
eworICAgIH0KKyAgICBHU3RyZWFtZXJWaWRlb0VuY29kZXIoKQorICAgICAgICA6IG1fZmlyc3RG
cmFtZVB0cyhHU1RfQ0xPQ0tfVElNRV9OT05FKQorICAgICAgICAsIG1fcmVzdHJpY3Rpb25DYXBz
KGFkb3B0R1JlZihnc3RfY2Fwc19uZXdfZW1wdHlfc2ltcGxlKCJ2aWRlby94LXJhdyIpKSkKKyAg
ICB7CisgICAgfQorCisgICAgdm9pZCBTZXRSYXRlcyhjb25zdCB3ZWJydGM6OlZpZGVvRW5jb2Rl
cjo6UmF0ZUNvbnRyb2xQYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzKSBvdmVycmlkZQorICAgIHsKKyAg
ICAgICAgR1NUX0lORk9fT0JKRUNUKG1fcGlwZWxpbmUuZ2V0KCksICJOZXcgYml0cmF0ZTogJWQg
LSBmcmFtZXJhdGUgaXMgJWYiLAorICAgICAgICAgICAgcGFyYW1ldGVycy5iaXRyYXRlLmdldF9z
dW1fYnBzKCksIHBhcmFtZXRlcnMuZnJhbWVyYXRlX2Zwcyk7CisKKyAgICAgICAgYXV0byBjYXBz
ID0gYWRvcHRHUmVmKGdzdF9jYXBzX2NvcHkobV9yZXN0cmljdGlvbkNhcHMuZ2V0KCkpKTsKKwor
ICAgICAgICBTZXRSZXN0cmljdGlvbkNhcHMoV1RGTW92ZShjYXBzKSk7CisKKyAgICAgICAgaWYg
KG1fZW5jb2RlcikKKyAgICAgICAgICAgIGdfb2JqZWN0X3NldChtX2VuY29kZXIuZ2V0KCksICJi
aXRyYXRlIiwgcGFyYW1ldGVycy5iaXRyYXRlLmdldF9zdW1fYnBzKCksIG51bGxwdHIpOworICAg
IH0KKworICAgIEdzdEVsZW1lbnQqIHBpcGVsaW5lKCkKKyAgICB7CisgICAgICAgIHJldHVybiBt
X3BpcGVsaW5lLmdldCgpOworICAgIH0KKworICAgIEdzdEVsZW1lbnQqIG1ha2VFbGVtZW50KGNv
bnN0IGdjaGFyKiBmYWN0b3J5TmFtZSkKKyAgICB7CisgICAgICAgIHN0YXRpYyBBdG9taWM8dWlu
dDMyX3Q+IGVsZW1lbnRJZDsKKyAgICAgICAgYXV0byBuYW1lID0gbWFrZVN0cmluZyhOYW1lKCks
ICItZW5jLSIsIGZhY3RvcnlOYW1lLCAiLSIsIGVsZW1lbnRJZC5leGNoYW5nZUFkZCgxKSk7Cisg
ICAgICAgIGF1dG8qIGVsZW0gPSBtYWtlR1N0cmVhbWVyRWxlbWVudChmYWN0b3J5TmFtZSwgbmFt
ZS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgcmV0dXJuIGVsZW07CisgICAgfQorCisgICAgaW50
MzJfdCBJbml0RW5jb2RlKGNvbnN0IHdlYnJ0Yzo6VmlkZW9Db2RlYyogY29kZWNTZXR0aW5ncywg
aW50MzJfdCwgc2l6ZV90KSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgZ19yZXR1cm5fdmFsX2lm
X2ZhaWwoY29kZWNTZXR0aW5ncywgV0VCUlRDX1ZJREVPX0NPREVDX0VSUl9QQVJBTUVURVIpOwor
ICAgICAgICBnX3JldHVybl92YWxfaWZfZmFpbChjb2RlY1NldHRpbmdzLT5jb2RlY1R5cGUgPT0g
Q29kZWNUeXBlKCksIFdFQlJUQ19WSURFT19DT0RFQ19FUlJfUEFSQU1FVEVSKTsKKworICAgICAg
ICBpZiAod2VicnRjOjpTaW11bGNhc3RVdGlsaXR5OjpOdW1iZXJPZlNpbXVsY2FzdFN0cmVhbXMo
KmNvZGVjU2V0dGluZ3MpID4gMSkgeworICAgICAgICAgICAgR1NUX0VSUk9SKCJTaW11bGNhc3Qg
bm90IHN1cHBvcnRlZC4iKTsKKyAgICAgICAgICAgIHJldHVybiBXRUJSVENfVklERU9fQ09ERUNf
RVJSX1NJTVVMQ0FTVF9QQVJBTUVURVJTX05PVF9TVVBQT1JURUQ7CisgICAgICAgIH0KKworICAg
ICAgICBtX3BpcGVsaW5lID0gbWFrZUVsZW1lbnQoInBpcGVsaW5lIik7CisKKyAgICAgICAgY29u
bmVjdFNpbXBsZUJ1c01lc3NhZ2VDYWxsYmFjayhtX3BpcGVsaW5lLmdldCgpKTsKKyAgICAgICAg
bV9lbmNvZGVyID0gY3JlYXRlRW5jb2RlcigpOworICAgICAgICBBU1NFUlQobV9lbmNvZGVyKTsK
KworICAgICAgICBnX29iamVjdF9zZXQobV9lbmNvZGVyLmdldCgpLCAia2V5ZnJhbWUtaW50ZXJ2
YWwiLCBLZXlmcmFtZUludGVydmFsKGNvZGVjU2V0dGluZ3MpLCBudWxscHRyKTsKKworICAgICAg
ICBtX3NyYyA9IG1ha2VFbGVtZW50KCJhcHBzcmMiKTsKKyAgICAgICAgZ19vYmplY3Rfc2V0KG1f
c3JjLmdldCgpLCAiaXMtbGl2ZSIsIHRydWUsICJmb3JtYXQiLCBHU1RfRk9STUFUX1RJTUUsIG51
bGxwdHIpOworCisgICAgICAgIGF1dG8qIHZpZGVvY29udmVydCA9IG1ha2VFbGVtZW50KCJ2aWRl
b2NvbnZlcnQiKTsKKyAgICAgICAgYXV0byogdmlkZW9zY2FsZSA9IG1ha2VFbGVtZW50KCJ2aWRl
b3NjYWxlIik7CisgICAgICAgIG1fc2luayA9IG1ha2VFbGVtZW50KCJhcHBzaW5rIik7CisgICAg
ICAgIGdfb2JqZWN0X3NldChtX3NpbmsuZ2V0KCksICJzeW5jIiwgRkFMU0UsIG51bGxwdHIpOwor
CisgICAgICAgIG1fY2Fwc0ZpbHRlciA9IG1ha2VFbGVtZW50KCJjYXBzZmlsdGVyIik7CisgICAg
ICAgIGlmIChtX3Jlc3RyaWN0aW9uQ2FwcykKKyAgICAgICAgICAgIGdfb2JqZWN0X3NldChtX2Nh
cHNGaWx0ZXIuZ2V0KCksICJjYXBzIiwgbV9yZXN0cmljdGlvbkNhcHMuZ2V0KCksIG51bGxwdHIp
OworCisgICAgICAgIGdzdF9iaW5fYWRkX21hbnkoR1NUX0JJTl9DQVNUKG1fcGlwZWxpbmUuZ2V0
KCkpLCBtX3NyYy5nZXQoKSwgdmlkZW9jb252ZXJ0LCB2aWRlb3NjYWxlLCBtX2NhcHNGaWx0ZXIu
Z2V0KCksIG1fZW5jb2Rlci5nZXQoKSwgbV9zaW5rLmdldCgpLCBudWxscHRyKTsKKyAgICAgICAg
aWYgKCFnc3RfZWxlbWVudF9saW5rX21hbnkobV9zcmMuZ2V0KCksIHZpZGVvY29udmVydCwgdmlk
ZW9zY2FsZSwgbV9jYXBzRmlsdGVyLmdldCgpLCBtX2VuY29kZXIuZ2V0KCksIG1fc2luay5nZXQo
KSwgbnVsbHB0cikpIHsKKyAgICAgICAgICAgIEdTVF9ERUJVR19CSU5fVE9fRE9UX0ZJTEVfV0lU
SF9UUyhHU1RfQklOX0NBU1QobV9waXBlbGluZS5nZXQoKSksIEdTVF9ERUJVR19HUkFQSF9TSE9X
X1ZFUkJPU0UsICJ3ZWJraXQtd2VicnRjLWVuY29kZXIuZXJyb3IiKTsKKyAgICAgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisKKyAgICAgICAgZ3N0X2VsZW1lbnRfc2V0
X3N0YXRlKG1fcGlwZWxpbmUuZ2V0KCksIEdTVF9TVEFURV9QTEFZSU5HKTsKKyAgICAgICAgR1NU
X0RFQlVHX0JJTl9UT19ET1RfRklMRV9XSVRIX1RTKEdTVF9CSU5fQ0FTVChtX3BpcGVsaW5lLmdl
dCgpKSwgR1NUX0RFQlVHX0dSQVBIX1NIT1dfVkVSQk9TRSwgIndlYmtpdC13ZWJydGMtZW5jb2Rl
ciIpOworICAgICAgICByZXR1cm4gV0VCUlRDX1ZJREVPX0NPREVDX09LOworICAgIH0KKworICAg
IGludDMyX3QgUmVnaXN0ZXJFbmNvZGVDb21wbGV0ZUNhbGxiYWNrKHdlYnJ0Yzo6RW5jb2RlZElt
YWdlQ2FsbGJhY2sqIGNhbGxiYWNrKSBmaW5hbAorICAgIHsKKyAgICAgICAgbV9pbWFnZVJlYWR5
Q2IgPSBjYWxsYmFjazsKKworICAgICAgICByZXR1cm4gV0VCUlRDX1ZJREVPX0NPREVDX09LOwor
ICAgIH0KKworICAgIGludDMyX3QgUmVsZWFzZSgpIGZpbmFsCisgICAgeworICAgICAgICBtX2Vu
Y29kZWRGcmFtZS5DbGVhckVuY29kZWREYXRhKCk7CisgICAgICAgIGlmIChtX3BpcGVsaW5lKSB7
CisgICAgICAgICAgICBkaXNjb25uZWN0U2ltcGxlQnVzTWVzc2FnZUNhbGxiYWNrKG1fcGlwZWxp
bmUuZ2V0KCkpOworICAgICAgICAgICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlKG1fcGlwZWxpbmUu
Z2V0KCksIEdTVF9TVEFURV9OVUxMKTsKKyAgICAgICAgICAgIG1fc3JjID0gbnVsbHB0cjsKKyAg
ICAgICAgICAgIG1fZW5jb2RlciA9IG51bGxwdHI7CisgICAgICAgICAgICBtX2NhcHNGaWx0ZXIg
PSBudWxscHRyOworICAgICAgICAgICAgbV9zaW5rID0gbnVsbHB0cjsKKyAgICAgICAgICAgIG1f
cGlwZWxpbmUgPSBudWxscHRyOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIFdFQlJUQ19W
SURFT19DT0RFQ19PSzsKKyAgICB9CisKKyAgICBpbnQzMl90IHJldHVybkZyb21GbG93UmV0dXJu
KEdzdEZsb3dSZXR1cm4gZmxvdykKKyAgICB7CisgICAgICAgIHN3aXRjaCAoZmxvdykgeworICAg
ICAgICBjYXNlIEdTVF9GTE9XX09LOgorICAgICAgICAgICAgcmV0dXJuIFdFQlJUQ19WSURFT19D
T0RFQ19PSzsKKyAgICAgICAgY2FzZSBHU1RfRkxPV19GTFVTSElORzoKKyAgICAgICAgICAgIHJl
dHVybiBXRUJSVENfVklERU9fQ09ERUNfVU5JTklUSUFMSVpFRDsKKyAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgIHJldHVybiBXRUJSVENfVklERU9fQ09ERUNfRVJST1I7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICBWaWRlb0VuY29kZXI6OkVuY29kZXJJbmZvIEdldEVuY29kZXJJbmZvKCkg
Y29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIEVuY29kZXJJbmZvIGluZm87CisgICAgICAg
IGluZm8uc3VwcG9ydHNfbmF0aXZlX2hhbmRsZSA9IGZhbHNlOworICAgICAgICBpbmZvLmltcGxl
bWVudGF0aW9uX25hbWUgPSAiR1N0cmVhbWVyIjsKKyAgICAgICAgaW5mby5oYXNfdHJ1c3RlZF9y
YXRlX2NvbnRyb2xsZXIgPSB0cnVlOworICAgICAgICBpbmZvLmlzX2hhcmR3YXJlX2FjY2VsZXJh
dGVkID0gdHJ1ZTsKKyAgICAgICAgaW5mby5oYXNfaW50ZXJuYWxfc291cmNlID0gZmFsc2U7Cisg
ICAgICAgIHJldHVybiBpbmZvOworICAgIH0KKworICAgIGludDMyX3QgRW5jb2RlKGNvbnN0IHdl
YnJ0Yzo6VmlkZW9GcmFtZSYgZnJhbWUsCisgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPHdlYnJ0
Yzo6VmlkZW9GcmFtZVR5cGU+KiBmcmFtZVR5cGVzKSBmaW5hbAorICAgIHsKKyAgICAgICAgaW50
MzJfdCByZXM7CisKKyAgICAgICAgaWYgKCFtX2ltYWdlUmVhZHlDYikgeworICAgICAgICAgICAg
R1NUX0lORk9fT0JKRUNUKG1fcGlwZWxpbmUuZ2V0KCksICJObyBlbmNvZGVkIGNhbGxiYWNrIHNl
dCB5ZXQhIik7CisKKyAgICAgICAgICAgIHJldHVybiBXRUJSVENfVklERU9fQ09ERUNfVU5JTklU
SUFMSVpFRDsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghbV9zcmMpIHsKKyAgICAgICAgICAg
IEdTVF9JTkZPX09CSkVDVChtX3BpcGVsaW5lLmdldCgpLCAiTm8gc291cmNlIHNldCB5ZXQhIik7
CisKKyAgICAgICAgICAgIHJldHVybiBXRUJSVENfVklERU9fQ09ERUNfVU5JTklUSUFMSVpFRDsK
KyAgICAgICAgfQorCisgICAgICAgIGF1dG8gc2FtcGxlID0gR1N0cmVhbWVyU2FtcGxlRnJvbUxp
YldlYlJUQ1ZpZGVvRnJhbWUoZnJhbWUpOworICAgICAgICBhdXRvIGJ1ZmZlciA9IGdzdF9zYW1w
bGVfZ2V0X2J1ZmZlcihzYW1wbGUuZ2V0KCkpOworCisgICAgICAgIGlmICghR1NUX0NMT0NLX1RJ
TUVfSVNfVkFMSUQobV9maXJzdEZyYW1lUHRzKSkgeworICAgICAgICAgICAgbV9maXJzdEZyYW1l
UHRzID0gR1NUX0JVRkZFUl9QVFMoYnVmZmVyKTsKKyAgICAgICAgICAgIGF1dG8gcGFkID0gYWRv
cHRHUmVmKGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkKG1fc3JjLmdldCgpLCAic3JjIikpOwor
ICAgICAgICAgICAgZ3N0X3BhZF9zZXRfb2Zmc2V0KHBhZC5nZXQoKSwgLW1fZmlyc3RGcmFtZVB0
cyk7CisgICAgICAgIH0KKworICAgICAgICBmb3IgKGF1dG8gZnJhbWVfdHlwZSA6ICpmcmFtZVR5
cGVzKSB7CisgICAgICAgICAgICBpZiAoZnJhbWVfdHlwZSA9PSB3ZWJydGM6OlZpZGVvRnJhbWVU
eXBlOjprVmlkZW9GcmFtZUtleSkgeworICAgICAgICAgICAgICAgIGF1dG8gcGFkID0gYWRvcHRH
UmVmKGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkKG1fc3JjLmdldCgpLCAic3JjIikpOworICAg
ICAgICAgICAgICAgIGF1dG8gZm9yY2VLZXlVbml0ID0gZ3N0X3ZpZGVvX2V2ZW50X25ld19kb3du
c3RyZWFtX2ZvcmNlX2tleV91bml0KEdTVF9DTE9DS19USU1FX05PTkUsCisgICAgICAgICAgICAg
ICAgICAgIEdTVF9DTE9DS19USU1FX05PTkUsIEdTVF9DTE9DS19USU1FX05PTkUsIEZBTFNFLCAx
KTsKKyAgICAgICAgICAgICAgICBHU1RfSU5GT19PQkpFQ1QobV9waXBlbGluZS5nZXQoKSwgIlJl
cXVlc3RpbmcgS0VZRlJBTUUhIik7CisKKyAgICAgICAgICAgICAgICBpZiAoIWdzdF9wYWRfcHVz
aF9ldmVudChwYWQuZ2V0KCksIGZvcmNlS2V5VW5pdCkpCisgICAgICAgICAgICAgICAgICAgIEdT
VF9XQVJOSU5HX09CSkVDVChwaXBlbGluZSgpLCAiQ291bGQgbm90IHNlbmQgRm9yY2VLZXlVbml0
IGV2ZW50Iik7CisKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorCisgICAgICAgIHJlcyA9IHJldHVybkZyb21GbG93UmV0dXJuKGdzdF9hcHBfc3JjX3B1
c2hfc2FtcGxlKEdTVF9BUFBfU1JDKG1fc3JjLmdldCgpKSwgc2FtcGxlLmdldCgpKSk7CisgICAg
ICAgIGlmIChyZXMgIT0gV0VCUlRDX1ZJREVPX0NPREVDX09LKQorICAgICAgICAgICAgcmV0dXJu
IHJlczsKKworICAgICAgICBhdXRvIGVuY29kZWRTYW1wbGUgPSBhZG9wdEdSZWYoZ3N0X2FwcF9z
aW5rX3RyeV9wdWxsX3NhbXBsZShHU1RfQVBQX1NJTksobV9zaW5rLmdldCgpKSwgNSAqIEdTVF9T
RUNPTkQpKTsKKyAgICAgICAgaWYgKCFlbmNvZGVkU2FtcGxlKSB7CisgICAgICAgICAgICBHU1Rf
RVJST1IoIkRpZG4ndCBnZXQgYW55IGVuY29kZWRTYW1wbGUiKTsKKyAgICAgICAgICAgIHJldHVy
biBXRUJSVENfVklERU9fQ09ERUNfRVJST1I7CisgICAgICAgIH0KKworICAgICAgICBhdXRvIGVu
Y29kZWREYXRhID0gR1N0cmVhbWVyRW5jb2RlZEltYWdlQnVmZmVyOjpjcmVhdGUoV1RGTW92ZShl
bmNvZGVkU2FtcGxlKSk7CisgICAgICAgIGNvbnN0IGF1dG8qIGVuY29kZWRCdWZmZXIgPSBlbmNv
ZGVkRGF0YS0+Z2V0QnVmZmVyKCk7CisgICAgICAgIGF1dG8gcmVzb2x1dGlvbiA9IGVuY29kZWRE
YXRhLT5nZXRWaWRlb1Jlc29sdXRpb24oKTsKKyAgICAgICAgbV9lbmNvZGVkRnJhbWUuU2V0RW5j
b2RlZERhdGEoZW5jb2RlZERhdGEpOworICAgICAgICBpZiAoIW1fZW5jb2RlZEZyYW1lLnNpemUo
KSkKKyAgICAgICAgICAgIHJldHVybiBXRUJSVENfVklERU9fQ09ERUNfT0s7CisKKyAgICAgICAg
QVNTRVJUKHJlc29sdXRpb24pOworICAgICAgICBtX2VuY29kZWRGcmFtZS5fZW5jb2RlZFdpZHRo
ID0gcmVzb2x1dGlvbi0+d2lkdGgoKTsKKyAgICAgICAgbV9lbmNvZGVkRnJhbWUuX2VuY29kZWRI
ZWlnaHQgPSByZXNvbHV0aW9uLT5oZWlnaHQoKTsKKyAgICAgICAgbV9lbmNvZGVkRnJhbWUuX2Zy
YW1lVHlwZSA9IEdTVF9CVUZGRVJfRkxBR19JU19TRVQoZW5jb2RlZEJ1ZmZlciwgR1NUX0JVRkZF
Ul9GTEFHX0RFTFRBX1VOSVQpID8gd2VicnRjOjpWaWRlb0ZyYW1lVHlwZTo6a1ZpZGVvRnJhbWVE
ZWx0YSA6IHdlYnJ0Yzo6VmlkZW9GcmFtZVR5cGU6OmtWaWRlb0ZyYW1lS2V5OworICAgICAgICBt
X2VuY29kZWRGcmFtZS5jYXB0dXJlX3RpbWVfbXNfID0gZnJhbWUucmVuZGVyX3RpbWVfbXMoKTsK
KyAgICAgICAgbV9lbmNvZGVkRnJhbWUuU2V0VGltZXN0YW1wKGZyYW1lLnRpbWVzdGFtcCgpKTsK
KworICAgICAgICBHU1RfTE9HX09CSkVDVChtX3BpcGVsaW5lLmdldCgpLCAiR290IGJ1ZmZlciBj
YXB0dXJlX3RpbWVfbXM6ICUiIEdfR0lOVDY0X0ZPUk1BVCAiIF90aW1lc3RhbXA6ICV1IiwKKyAg
ICAgICAgICAgIG1fZW5jb2RlZEZyYW1lLmNhcHR1cmVfdGltZV9tc18sIG1fZW5jb2RlZEZyYW1l
LlRpbWVzdGFtcCgpKTsKKworICAgICAgICB3ZWJydGM6OkNvZGVjU3BlY2lmaWNJbmZvIGNvZGVj
SW5mbzsKKyAgICAgICAgUG9wdWxhdGVDb2RlY1NwZWNpZmljKCZjb2RlY0luZm8sIGVuY29kZWRC
dWZmZXIpOworICAgICAgICB3ZWJydGM6OkVuY29kZWRJbWFnZUNhbGxiYWNrOjpSZXN1bHQgcmVz
dWx0ID0gbV9pbWFnZVJlYWR5Q2ItPk9uRW5jb2RlZEltYWdlKG1fZW5jb2RlZEZyYW1lLCAmY29k
ZWNJbmZvKTsKKyAgICAgICAgaWYgKHJlc3VsdC5lcnJvciAhPSB3ZWJydGM6OkVuY29kZWRJbWFn
ZUNhbGxiYWNrOjpSZXN1bHQ6Ok9LKQorICAgICAgICAgICAgR1NUX0VSUk9SX09CSkVDVChtX3Bp
cGVsaW5lLmdldCgpLCAiRW5jb2RlIGNhbGxiYWNrIGZhaWxlZDogJWQiLCByZXN1bHQuZXJyb3Ip
OworCisgICAgICAgIHJldHVybiBXRUJSVENfVklERU9fQ09ERUNfT0s7CisgICAgfQorCisgICAg
R1JlZlB0cjxHc3RFbGVtZW50PiBjcmVhdGVFbmNvZGVyKHZvaWQpCisgICAgeworICAgICAgICBH
UmVmUHRyPEdzdEVsZW1lbnQ+IHdlYnJ0Y2VuY29kZXIgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21h
a2UoIndlYnJ0Y3ZpZGVvZW5jb2RlciIsIE5VTEwpOworICAgICAgICBnX29iamVjdF9zZXQod2Vi
cnRjZW5jb2Rlci5nZXQoKSwgImZvcm1hdCIsIGFkb3B0R1JlZihnc3RfY2Fwc19mcm9tX3N0cmlu
ZyhDYXBzKCkpKS5nZXQoKSwgTlVMTCk7CisKKyAgICAgICAgR1JlZlB0cjxHc3RFbGVtZW50PiBl
bmNvZGVyID0gbnVsbHB0cjsKKyAgICAgICAgZ19vYmplY3RfZ2V0KHdlYnJ0Y2VuY29kZXIuZ2V0
KCksICJlbmNvZGVyIiwgJmVuY29kZXIub3V0UHRyKCksIE5VTEwpOworICAgICAgICBpZiAoIWVu
Y29kZXIpIHsKKyAgICAgICAgICAgIEdTVF9JTkZPKCJObyBlbmNvZGVyIGZvdW5kIGZvciAlcyIs
IENhcHMoKSk7CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgfQorCisgICAg
ICAgIHJldHVybiB3ZWJydGNlbmNvZGVyOworICAgIH0KKworICAgIHZvaWQgQWRkQ29kZWNJZlN1
cHBvcnRlZChzdGQ6OnZlY3Rvcjx3ZWJydGM6OlNkcFZpZGVvRm9ybWF0PiYgc3VwcG9ydGVkRm9y
bWF0cykKKyAgICB7CisgICAgICAgIGlmIChhdXRvIGVuY29kZXIgPSBjcmVhdGVFbmNvZGVyKCkp
IHsKKyAgICAgICAgICAgIGF1dG8gZm9ybWF0cyA9IENvbmZpZ3VyZVN1cHBvcnRlZENvZGVjKCk7
CisgICAgICAgICAgICBzdXBwb3J0ZWRGb3JtYXRzLmluc2VydChzdXBwb3J0ZWRGb3JtYXRzLmVu
ZCgpLCBmb3JtYXRzLmJlZ2luKCksIGZvcm1hdHMuZW5kKCkpOworICAgICAgICB9CisgICAgfQor
CisgICAgdmlydHVhbCBjb25zdCBnY2hhciogQ2FwcygpCisgICAgeworICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHN0ZDo6dmVjdG9yPHdlYnJ0Yzo6U2RwVmlk
ZW9Gb3JtYXQ+IENvbmZpZ3VyZVN1cHBvcnRlZENvZGVjKCkKKyAgICB7CisgICAgICAgIHJldHVy
biB7IHdlYnJ0Yzo6U2RwVmlkZW9Gb3JtYXQoTmFtZSgpKSB9OworICAgIH0KKworICAgIHZpcnR1
YWwgd2VicnRjOjpWaWRlb0NvZGVjVHlwZSBDb2RlY1R5cGUoKSA9IDA7CisgICAgdmlydHVhbCB2
b2lkIFBvcHVsYXRlQ29kZWNTcGVjaWZpYyh3ZWJydGM6OkNvZGVjU3BlY2lmaWNJbmZvKiwgY29u
c3QgR3N0QnVmZmVyKikgPSAwOworICAgIHZpcnR1YWwgY29uc3QgZ2NoYXIqIE5hbWUoKSA9IDA7
CisgICAgdmlydHVhbCBpbnQgS2V5ZnJhbWVJbnRlcnZhbChjb25zdCB3ZWJydGM6OlZpZGVvQ29k
ZWMqIGNvZGVjU2V0dGluZ3MpID0gMDsKKworICAgIHZvaWQgU2V0UmVzdHJpY3Rpb25DYXBzKEdS
ZWZQdHI8R3N0Q2Fwcz4gY2FwcykKKyAgICB7CisgICAgICAgIGlmIChtX3Jlc3RyaWN0aW9uQ2Fw
cykKKyAgICAgICAgICAgIGdfb2JqZWN0X3NldChtX2NhcHNGaWx0ZXIuZ2V0KCksICJjYXBzIiwg
bV9yZXN0cmljdGlvbkNhcHMuZ2V0KCksIG51bGxwdHIpOworCisgICAgICAgIG1fcmVzdHJpY3Rp
b25DYXBzID0gY2FwczsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgR1JlZlB0cjxHc3RFbGVtZW50
PiBtX3BpcGVsaW5lOworICAgIEdSZWZQdHI8R3N0RWxlbWVudD4gbV9zcmM7CisgICAgR1JlZlB0
cjxHc3RFbGVtZW50PiBtX2VuY29kZXI7CisgICAgR1JlZlB0cjxHc3RFbGVtZW50PiBtX2NhcHNG
aWx0ZXI7CisKKyAgICB3ZWJydGM6OkVuY29kZWRJbWFnZUNhbGxiYWNrKiBtX2ltYWdlUmVhZHlD
YjsKKyAgICBHc3RDbG9ja1RpbWUgbV9maXJzdEZyYW1lUHRzOworICAgIEdSZWZQdHI8R3N0Q2Fw
cz4gbV9yZXN0cmljdGlvbkNhcHM7CisgICAgd2VicnRjOjpFbmNvZGVkSW1hZ2UgbV9lbmNvZGVk
RnJhbWU7CisKKyAgICBHUmVmUHRyPEdzdEVsZW1lbnQ+IG1fc2luazsKK307CisKK2NsYXNzIEdT
dHJlYW1lckgyNjRFbmNvZGVyIDogcHVibGljIEdTdHJlYW1lclZpZGVvRW5jb2RlciB7CitwdWJs
aWM6CisgICAgR1N0cmVhbWVySDI2NEVuY29kZXIoKSB7IH0KKworICAgIEdTdHJlYW1lckgyNjRF
bmNvZGVyKGNvbnN0IHdlYnJ0Yzo6U2RwVmlkZW9Gb3JtYXQmIGZvcm1hdCkKKyAgICAgICAgOiBt
X3BhcnNlcihnc3RfaDI2NF9uYWxfcGFyc2VyX25ldygpKQorICAgICAgICAsIHBhY2tldGl6YXRp
b25Nb2RlKHdlYnJ0Yzo6SDI2NFBhY2tldGl6YXRpb25Nb2RlOjpOb25JbnRlcmxlYXZlZCkKKyAg
ICB7CisgICAgICAgIGF1dG8gaXQgPSBmb3JtYXQucGFyYW1ldGVycy5maW5kKGNyaWNrZXQ6OmtI
MjY0Rm10cFBhY2tldGl6YXRpb25Nb2RlKTsKKworICAgICAgICBpZiAoaXQgIT0gZm9ybWF0LnBh
cmFtZXRlcnMuZW5kKCkgJiYgaXQtPnNlY29uZCA9PSAiMSIpCisgICAgICAgICAgICBwYWNrZXRp
emF0aW9uTW9kZSA9IHdlYnJ0Yzo6SDI2NFBhY2tldGl6YXRpb25Nb2RlOjpOb25JbnRlcmxlYXZl
ZDsKKyAgICB9CisKKyAgICBpbnQgS2V5ZnJhbWVJbnRlcnZhbChjb25zdCB3ZWJydGM6OlZpZGVv
Q29kZWMqIGNvZGVjU2V0dGluZ3MpIGZpbmFsCisgICAgeworICAgICAgICByZXR1cm4gY29kZWNT
ZXR0aW5ncy0+SDI2NCgpLmtleUZyYW1lSW50ZXJ2YWw7CisgICAgfQorCisgICAgc3RkOjp2ZWN0
b3I8d2VicnRjOjpTZHBWaWRlb0Zvcm1hdD4gQ29uZmlndXJlU3VwcG9ydGVkQ29kZWMoKSBmaW5h
bAorICAgIHsKKyAgICAgICAgcmV0dXJuIHN1cHBvcnRlZEgyNjRGb3JtYXRzKCk7CisgICAgfQor
CisgICAgY29uc3QgZ2NoYXIqIENhcHMoKSBmaW5hbCB7IHJldHVybiAidmlkZW8veC1oMjY0Ijsg
fQorICAgIGNvbnN0IGdjaGFyKiBOYW1lKCkgZmluYWwgeyByZXR1cm4gY3JpY2tldDo6a0gyNjRD
b2RlY05hbWU7IH0KKyAgICBHc3RIMjY0TmFsUGFyc2VyKiBtX3BhcnNlcjsKKyAgICB3ZWJydGM6
OlZpZGVvQ29kZWNUeXBlIENvZGVjVHlwZSgpIGZpbmFsIHsgcmV0dXJuIHdlYnJ0Yzo6a1ZpZGVv
Q29kZWNIMjY0OyB9CisKKyAgICB2b2lkIFBvcHVsYXRlQ29kZWNTcGVjaWZpYyh3ZWJydGM6OkNv
ZGVjU3BlY2lmaWNJbmZvKiBjb2RlY1NwZWNpZmljSW5mb3MsIGNvbnN0IEdzdEJ1ZmZlciopIGZp
bmFsCisgICAgeworICAgICAgICBjb2RlY1NwZWNpZmljSW5mb3MtPmNvZGVjVHlwZSA9IENvZGVj
VHlwZSgpOworICAgICAgICB3ZWJydGM6OkNvZGVjU3BlY2lmaWNJbmZvSDI2NCogaDI2NEluZm8g
PSAmKGNvZGVjU3BlY2lmaWNJbmZvcy0+Y29kZWNTcGVjaWZpYy5IMjY0KTsKKyAgICAgICAgaDI2
NEluZm8tPnBhY2tldGl6YXRpb25fbW9kZSA9IHBhY2tldGl6YXRpb25Nb2RlOworICAgIH0KKwor
ICAgIHdlYnJ0Yzo6SDI2NFBhY2tldGl6YXRpb25Nb2RlIHBhY2tldGl6YXRpb25Nb2RlOworfTsK
Kworc3RkOjp1bmlxdWVfcHRyPHdlYnJ0Yzo6VmlkZW9FbmNvZGVyPiBHU3RyZWFtZXJWaWRlb0Vu
Y29kZXJGYWN0b3J5OjpDcmVhdGVWaWRlb0VuY29kZXIoY29uc3Qgd2VicnRjOjpTZHBWaWRlb0Zv
cm1hdCYgZm9ybWF0KQoreworICAgIC8vIEZJWE1FOiB2cHhlbmMgZG9lc24ndCBzdXBwb3J0IHNp
bXVsY2FzdCBub3IgU1ZDLiB2cDllbmMgc3VwcG9ydHMgb25seSBwcm9maWxlIDAuIFRoZXNlCisg
ICAgLy8gc2hvcnRjb21pbmdzIHRyaWdnZXIgd2VicnRjL3ZwOS5odG1sIGFuZCB3ZWJydGMvc2lt
dWxjYXN0LWgyNjQuaHRtbCB0aW1lb3V0cyBhbmQgbW9zdCBsaWtlbHkKKyAgICAvLyBiYWQgVVgg
aW4gV1BFL0dUSyBicm93c2Vycy4gU28gZm9yIG5vdyB3ZSBwcmVmZXIgdG8gdXNlIExpYldlYlJU
QydzIFZQeCBlbmNvZGVycy4KKyAgICBpZiAoZm9ybWF0Lm5hbWUgPT0gY3JpY2tldDo6a1ZwOUNv
ZGVjTmFtZSkgeworICAgICAgICBHU1RfSU5GTygiVXNpbmcgVlA5IEVuY29kZXIgZnJvbSBMaWJX
ZWJSVEMuIik7CisgICAgICAgIHJldHVybiB3ZWJydGM6OlZQOUVuY29kZXI6OkNyZWF0ZShjcmlj
a2V0OjpWaWRlb0NvZGVjKGZvcm1hdCkpOworICAgIH0KKworICAgIGlmIChmb3JtYXQubmFtZSA9
PSBjcmlja2V0OjprVnA4Q29kZWNOYW1lKSB7CisgICAgICAgIEdTVF9JTkZPKCJVc2luZyBWUDgg
RW5jb2RlciBmcm9tIExpYldlYlJUQy4iKTsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmlxdWVXaXRo
b3V0RmFzdE1hbGxvY0NoZWNrPHdlYnJ0Yzo6TGlidnB4VnA4RW5jb2Rlcj4od2VicnRjOjpMaWJ2
cHhJbnRlcmZhY2U6OkNyZWF0ZSgpLCB3ZWJydGM6OlZQOEVuY29kZXI6OlNldHRpbmdzKCkpOwor
ICAgIH0KKworICAgIGlmIChmb3JtYXQubmFtZSA9PSBjcmlja2V0OjprSDI2NENvZGVjTmFtZSkg
eworI2lmIFdFQktJVF9MSUJXRUJSVENfT1BFTkgyNjRfRU5DT0RFUgorICAgICAgICBHU1RfSU5G
TygiVXNpbmcgT3BlbkgyNjQgbGlid2VicnRjIGVuY29kZXIuIik7CisgICAgICAgIHJldHVybiB3
ZWJydGM6OkgyNjRFbmNvZGVyOjpDcmVhdGUoY3JpY2tldDo6VmlkZW9Db2RlYyhmb3JtYXQpKTsK
KyNlbHNlCisgICAgICAgIEdTVF9JTkZPKCJVc2luZyBIMjY0IEdTdHJlYW1lciBlbmNvZGVyLiIp
OworICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZTxHU3RyZWFtZXJIMjY0RW5jb2Rlcj4oZm9ybWF0
KTsKKyNlbmRpZgorICAgIH0KKworICAgIHJldHVybiBudWxscHRyOworfQorCitHU3RyZWFtZXJW
aWRlb0VuY29kZXJGYWN0b3J5OjpHU3RyZWFtZXJWaWRlb0VuY29kZXJGYWN0b3J5KGJvb2wgaXNT
dXBwb3J0aW5nVlA5UHJvZmlsZTAsIGJvb2wgaXNTdXBwb3J0aW5nVlA5UHJvZmlsZTIpCisgICAg
OiBtX2lzU3VwcG9ydGluZ1ZQOVByb2ZpbGUwKGlzU3VwcG9ydGluZ1ZQOVByb2ZpbGUwKQorICAg
ICwgbV9pc1N1cHBvcnRpbmdWUDlQcm9maWxlMihpc1N1cHBvcnRpbmdWUDlQcm9maWxlMikKK3sK
KyAgICBlbnN1cmVHU3RyZWFtZXJJbml0aWFsaXplZCgpOworCisgICAgc3RhdGljIHN0ZDo6b25j
ZV9mbGFnIGRlYnVnUmVnaXN0ZXJlZEZsYWc7CisgICAgc3RkOjpjYWxsX29uY2UoZGVidWdSZWdp
c3RlcmVkRmxhZywgW10geworICAgICAgICBHU1RfREVCVUdfQ0FURUdPUllfSU5JVCh3ZWJraXRf
d2VicnRjZW5jX2RlYnVnLCAid2Via2l0bGlid2VicnRjdmlkZW9lbmNvZGVyIiwgMCwgIldlYktp
dCBXZWJSVEMgdmlkZW8gZW5jb2RlciIpOworICAgICAgICBhdXRvIGZhY3RvcnkgPSBhZG9wdEdS
ZWYoZ3N0X2VsZW1lbnRfZmFjdG9yeV9maW5kKCJ3ZWJydGN2aWRlb2VuY29kZXIiKSk7CisgICAg
ICAgIGlmICghZmFjdG9yeSkKKyAgICAgICAgICAgIGdzdF9lbGVtZW50X3JlZ2lzdGVyKG51bGxw
dHIsICJ3ZWJydGN2aWRlb2VuY29kZXIiLCBHU1RfUkFOS19OT05FLCBXRUJLSVRfVFlQRV9XRUJS
VENfVklERU9fRU5DT0RFUik7CisgICAgfSk7Cit9CisKK3N0ZDo6dmVjdG9yPHdlYnJ0Yzo6U2Rw
VmlkZW9Gb3JtYXQ+IEdTdHJlYW1lclZpZGVvRW5jb2RlckZhY3Rvcnk6OkdldFN1cHBvcnRlZEZv
cm1hdHMoKSBjb25zdAoreworICAgIHN0ZDo6dmVjdG9yPHdlYnJ0Yzo6U2RwVmlkZW9Gb3JtYXQ+
IHN1cHBvcnRlZENvZGVjczsKKworICAgIHN1cHBvcnRlZENvZGVjcy5wdXNoX2JhY2sod2VicnRj
OjpTZHBWaWRlb0Zvcm1hdChjcmlja2V0OjprVnA4Q29kZWNOYW1lKSk7CisgICAgaWYgKG1faXNT
dXBwb3J0aW5nVlA5UHJvZmlsZTApCisgICAgICAgIHN1cHBvcnRlZENvZGVjcy5wdXNoX2JhY2so
d2VicnRjOjpTZHBWaWRlb0Zvcm1hdChjcmlja2V0OjprVnA5Q29kZWNOYW1lLCB7eyJwcm9maWxl
LWlkIiwgIjAifX0pKTsKKyAgICBpZiAobV9pc1N1cHBvcnRpbmdWUDlQcm9maWxlMikKKyAgICAg
ICAgc3VwcG9ydGVkQ29kZWNzLnB1c2hfYmFjayh3ZWJydGM6OlNkcFZpZGVvRm9ybWF0KGNyaWNr
ZXQ6OmtWcDlDb2RlY05hbWUsIHt7InByb2ZpbGUtaWQiLCAiMiJ9fSkpOworCisgICAgLy8gSWYg
T3BlbkgyNjQgaXMgcHJlc2VudCwgcHJlZmVyIGl0IG92ZXIgdGhlIEdTdHJlYW1lciBlbmNvZGVy
cyAoeDI2NGVuYywgdXN1YWxseSkuCisjaWYgV0VCS0lUX0xJQldFQlJUQ19PUEVOSDI2NF9FTkNP
REVSCisgICAgYXV0byBmb3JtYXRzID0gc3VwcG9ydGVkSDI2NEZvcm1hdHMoKTsKKyAgICBzdXBw
b3J0ZWRDb2RlY3MuaW5zZXJ0KHN1cHBvcnRlZENvZGVjcy5lbmQoKSwgZm9ybWF0cy5iZWdpbigp
LCBmb3JtYXRzLmVuZCgpKTsKKyNlbHNlCisgICAgR1N0cmVhbWVySDI2NEVuY29kZXIoKS5BZGRD
b2RlY0lmU3VwcG9ydGVkKHN1cHBvcnRlZENvZGVjcyk7CisjZW5kaWYKKworICAgIHJldHVybiBz
dXBwb3J0ZWRDb2RlY3M7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKyNlbmRpZgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbGlid2VicnRjL2dz
dHJlYW1lci9HU3RyZWFtZXJWaWRlb0VuY29kZXJGYWN0b3J5LmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tZWRpYXN0cmVhbS9saWJ3ZWJydGMvZ3N0cmVhbWVyL0dTdHJlYW1lclZpZGVvRW5j
b2RlckZhY3RvcnkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mMjA3MTU0OWEzNGFkNjVlZDM3MGNjNjgwMzMyNmI0
YWY4ZWIwMjE4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVk
aWFzdHJlYW0vbGlid2VicnRjL2dzdHJlYW1lci9HU3RyZWFtZXJWaWRlb0VuY29kZXJGYWN0b3J5
LmgKQEAgLTAsMCArMSw0OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBNZXRyb2xvZ2lj
YWwgR3JvdXAgQi5WLgorICogQ29weXJpZ2h0IChDKSAyMDE4IElnYWxpYSBTLkwuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg
KiBhaW50IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBVU0UoTElCV0VCUlRDKSAmJiBVU0UoR1NU
UkVBTUVSKQorI2luY2x1ZGUgIkxpYldlYlJUQ01hY3Jvcy5oIgorI2luY2x1ZGUgImFwaS92aWRl
b19jb2RlY3MvdmlkZW9fZW5jb2Rlcl9mYWN0b3J5LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworY2xhc3MgR1N0cmVhbWVyVmlkZW9FbmNvZGVyRmFjdG9yeSBmaW5hbCA6IHB1YmxpYyB3ZWJy
dGM6OlZpZGVvRW5jb2RlckZhY3RvcnkgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwor
cHVibGljOgorICAgIEdTdHJlYW1lclZpZGVvRW5jb2RlckZhY3RvcnkoYm9vbCBpc1N1cHBvcnRp
bmdWUDlQcm9maWxlMCwgYm9vbCBpc1N1cHBvcnRpbmdWUDlQcm9maWxlMik7CisKK3ByaXZhdGU6
CisgICAgc3RkOjp2ZWN0b3I8d2VicnRjOjpTZHBWaWRlb0Zvcm1hdD4gR2V0U3VwcG9ydGVkRm9y
bWF0cygpIGNvbnN0IG92ZXJyaWRlOworICAgIHN0ZDo6dW5pcXVlX3B0cjx3ZWJydGM6OlZpZGVv
RW5jb2Rlcj4gQ3JlYXRlVmlkZW9FbmNvZGVyKGNvbnN0IHdlYnJ0Yzo6U2RwVmlkZW9Gb3JtYXQm
KSBmaW5hbDsKKyAgICBDb2RlY0luZm8gUXVlcnlWaWRlb0VuY29kZXIoY29uc3Qgd2VicnRjOjpT
ZHBWaWRlb0Zvcm1hdCYpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICAvLyBGSVhNRTog
RGV0ZWN0IHdoZXRoZXIgdGhlIGRlY29kZXIgaXMgSFcgYWNjZWxlcmF0ZWQuCisKKyAgICAgICAg
cmV0dXJuIHsgZmFsc2UgfTsKKyAgICB9CisKKyAgICBib29sIG1faXNTdXBwb3J0aW5nVlA5UHJv
ZmlsZTA7CisgICAgYm9vbCBtX2lzU3VwcG9ydGluZ1ZQOVByb2ZpbGUyOworfTsKK30KKworI2Vu
ZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9saWJ3
ZWJydGMvZ3N0cmVhbWVyL0dTdHJlYW1lclZpZGVvRnJhbWVMaWJXZWJSVEMuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbGlid2VicnRjL2dzdHJlYW1lci9HU3RyZWFt
ZXJWaWRlb0ZyYW1lTGliV2ViUlRDLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xYTcwNTU1MzAwYTNlMWY4YmZj
NGFmYjQ3MjVkNWU2MjUxNzA5NzkwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWVkaWFzdHJlYW0vbGlid2VicnRjL2dzdHJlYW1lci9HU3RyZWFtZXJWaWRlb0Zy
YW1lTGliV2ViUlRDLmNwcApAQCAtMCwwICsxLDExMyBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMp
IDIwMTIsIDIwMTUsIDIwMTYsIDIwMTggSWdhbGlhIFMuTAorICogIENvcHlyaWdodCAoQykgMjAx
NSwgMjAxNiwgMjAxOCBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICoKKyAqICBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAg
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1Ymxp
YworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMw
MSAgVVNBCisgKi8KKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIFVTRShHU1RSRUFNRVIpICYm
IFVTRShMSUJXRUJSVEMpCisjaW5jbHVkZSAiR1N0cmVhbWVyVmlkZW9GcmFtZUxpYldlYlJUQy5o
IgorCisjaW5jbHVkZSA8Z3N0L3ZpZGVvL3ZpZGVvLWZvcm1hdC5oPgorI2luY2x1ZGUgPGdzdC92
aWRlby92aWRlby1pbmZvLmg+CisjaW5jbHVkZSA8dGhyZWFkPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK0dSZWZQdHI8R3N0U2FtcGxlPiBHU3RyZWFtZXJTYW1wbGVGcm9tTGliV2ViUlRDVmlk
ZW9GcmFtZShjb25zdCB3ZWJydGM6OlZpZGVvRnJhbWUmIGZyYW1lKQoreworICAgIGlmIChmcmFt
ZS52aWRlb19mcmFtZV9idWZmZXIoKS0+dHlwZSgpID09IHdlYnJ0Yzo6VmlkZW9GcmFtZUJ1ZmZl
cjo6VHlwZTo6a05hdGl2ZSkgeworICAgICAgICBhdXRvKiBmcmFtZWJ1ZmZlciA9IHN0YXRpY19j
YXN0PEdTdHJlYW1lclZpZGVvRnJhbWVMaWJXZWJSVEMqPihmcmFtZS52aWRlb19mcmFtZV9idWZm
ZXIoKS5nZXQoKSk7CisgICAgICAgIHJldHVybiBmcmFtZWJ1ZmZlci0+dGFrZVNhbXBsZSgpOwor
ICAgIH0KKworICAgIGF1dG8qIGk0MjBCdWZmZXIgPSBmcmFtZS52aWRlb19mcmFtZV9idWZmZXIo
KS0+VG9JNDIwKCkucmVsZWFzZSgpOworICAgIGludCBoZWlnaHQgPSBpNDIwQnVmZmVyLT5oZWln
aHQoKTsKKyAgICBpbnQgc3RyaWRlc1szXSA9IHsKKyAgICAgICAgaTQyMEJ1ZmZlci0+U3RyaWRl
WSgpLAorICAgICAgICBpNDIwQnVmZmVyLT5TdHJpZGVVKCksCisgICAgICAgIGk0MjBCdWZmZXIt
PlN0cmlkZVYoKQorICAgIH07CisgICAgc2l6ZV90IG9mZnNldHNbM10gPSB7CisgICAgICAgIDAs
CisgICAgICAgIHN0YXRpY19jYXN0PGdzaXplPihpNDIwQnVmZmVyLT5TdHJpZGVZKCkgKiBoZWln
aHQpLAorICAgICAgICBzdGF0aWNfY2FzdDxnc2l6ZT4oaTQyMEJ1ZmZlci0+U3RyaWRlWSgpICog
aGVpZ2h0ICsgaTQyMEJ1ZmZlci0+U3RyaWRlVSgpICogKChoZWlnaHQgKyAxKSAvIDIpKQorICAg
IH07CisgICAgR3N0VmlkZW9JbmZvIGluZm87CisgICAgZ3N0X3ZpZGVvX2luZm9fc2V0X2Zvcm1h
dCgmaW5mbywgR1NUX1ZJREVPX0ZPUk1BVF9JNDIwLCBmcmFtZS53aWR0aCgpLCBmcmFtZS5oZWln
aHQoKSk7CisgICAgYXV0byBidWZmZXIgPSBhZG9wdEdSZWYoZ3N0X2J1ZmZlcl9uZXdfd3JhcHBl
ZF9mdWxsKHN0YXRpY19jYXN0PEdzdE1lbW9yeUZsYWdzPihHU1RfTUVNT1JZX0ZMQUdfTk9fU0hB
UkUgfCBHU1RfTUVNT1JZX0ZMQUdfUkVBRE9OTFkpLAorICAgICAgICBjb25zdF9jYXN0PGdwb2lu
dGVyPihyZWludGVycHJldF9jYXN0PGNvbnN0IHZvaWQqPihpNDIwQnVmZmVyLT5EYXRhWSgpKSks
IGluZm8uc2l6ZSwgMCwgaW5mby5zaXplLCBpNDIwQnVmZmVyLCBbXShncG9pbnRlciBidWZmZXIp
IHsKKyAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8d2VicnRjOjpJNDIwQnVmZmVyKj4oYnVm
ZmVyKS0+UmVsZWFzZSgpOworICAgIH0pKTsKKworICAgIGdzdF9idWZmZXJfYWRkX3ZpZGVvX21l
dGFfZnVsbChidWZmZXIuZ2V0KCksIEdTVF9WSURFT19GUkFNRV9GTEFHX05PTkUsIEdTVF9WSURF
T19GT1JNQVRfSTQyMCwgZnJhbWUud2lkdGgoKSwgZnJhbWUuaGVpZ2h0KCksIDMsIG9mZnNldHMs
IHN0cmlkZXMpOworCisgICAgYXV0byBjYXBzID0gYWRvcHRHUmVmKGdzdF92aWRlb19pbmZvX3Rv
X2NhcHMoJmluZm8pKTsKKyAgICBhdXRvIHNhbXBsZSA9IGFkb3B0R1JlZihnc3Rfc2FtcGxlX25l
dyhidWZmZXIuZ2V0KCksIGNhcHMuZ2V0KCksIG51bGxwdHIsIG51bGxwdHIpKTsKKyAgICByZXR1
cm4gc2FtcGxlOworfQorCitydGM6OnNjb3BlZF9yZWZwdHI8d2VicnRjOjpWaWRlb0ZyYW1lQnVm
ZmVyPiBHU3RyZWFtZXJWaWRlb0ZyYW1lTGliV2ViUlRDOjpjcmVhdGUoR1JlZlB0cjxHc3RTYW1w
bGU+JiYgc2FtcGxlKQoreworICAgIEdzdFZpZGVvSW5mbyBpbmZvOworCisgICAgaWYgKCFnc3Rf
dmlkZW9faW5mb19mcm9tX2NhcHMoJmluZm8sIGdzdF9zYW1wbGVfZ2V0X2NhcHMoc2FtcGxlLmdl
dCgpKSkpCisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworCisgICAgcmV0dXJuIHJ0Yzo6
c2NvcGVkX3JlZnB0cjx3ZWJydGM6OlZpZGVvRnJhbWVCdWZmZXI+KG5ldyBHU3RyZWFtZXJWaWRl
b0ZyYW1lTGliV2ViUlRDKFdURk1vdmUoc2FtcGxlKSwgaW5mbykpOworfQorCitzdGQ6OnVuaXF1
ZV9wdHI8d2VicnRjOjpWaWRlb0ZyYW1lPiBMaWJXZWJSVENWaWRlb0ZyYW1lRnJvbUdTdHJlYW1l
clNhbXBsZShHUmVmUHRyPEdzdFNhbXBsZT4mJiBzYW1wbGUsIHdlYnJ0Yzo6VmlkZW9Sb3RhdGlv
biByb3RhdGlvbiwKKyAgICBpbnQ2NF90IHRpbWVzdGFtcCwgaW50NjRfdCByZW5kZXJUaW1lTXMp
Cit7CisgICAgYXV0byBmcmFtZUJ1ZmZlcihHU3RyZWFtZXJWaWRlb0ZyYW1lTGliV2ViUlRDOjpj
cmVhdGUoV1RGTW92ZShzYW1wbGUpKSk7CisgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjx3ZWJy
dGM6OlZpZGVvRnJhbWU+KG5ldyB3ZWJydGM6OlZpZGVvRnJhbWUoZnJhbWVCdWZmZXIsIHRpbWVz
dGFtcCwgcmVuZGVyVGltZU1zLCByb3RhdGlvbikpOworfQorCitydGM6OnNjb3BlZF9yZWZwdHI8
d2VicnRjOjpJNDIwQnVmZmVySW50ZXJmYWNlPiBHU3RyZWFtZXJWaWRlb0ZyYW1lTGliV2ViUlRD
OjpUb0k0MjAoKQoreworICAgIEdzdE1hcHBlZEZyYW1lIGluRnJhbWUobV9zYW1wbGUsIEdTVF9N
QVBfUkVBRCk7CisgICAgaWYgKCFpbkZyYW1lKSB7CisgICAgICAgIEdTVF9XQVJOSU5HKCJDb3Vs
ZCBub3QgbWFwIGZyYW1lIik7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAg
IGlmIChpbkZyYW1lLmZvcm1hdCgpICE9IEdTVF9WSURFT19GT1JNQVRfSTQyMCkgeworICAgICAg
ICBHc3RWaWRlb0luZm8gb3V0SW5mbzsKKyAgICAgICAgZ3N0X3ZpZGVvX2luZm9fc2V0X2Zvcm1h
dCgmb3V0SW5mbywgR1NUX1ZJREVPX0ZPUk1BVF9JNDIwLCBpbkZyYW1lLndpZHRoKCksIGluRnJh
bWUuaGVpZ2h0KCkpOworCisgICAgICAgIGF1dG8gaW5mbyA9IGluRnJhbWUuaW5mbygpOworICAg
ICAgICBvdXRJbmZvLmZwc19uID0gaW5mby0+ZnBzX247CisgICAgICAgIG91dEluZm8uZnBzX2Qg
PSBpbmZvLT5mcHNfZDsKKworICAgICAgICBhdXRvIGJ1ZmZlciA9IGFkb3B0R1JlZihnc3RfYnVm
ZmVyX25ld19hbGxvY2F0ZShudWxscHRyLCBHU1RfVklERU9fSU5GT19TSVpFKCZvdXRJbmZvKSwg
bnVsbHB0cikpOworICAgICAgICBHc3RNYXBwZWRGcmFtZSBvdXRGcmFtZShidWZmZXIuZ2V0KCks
IG91dEluZm8sIEdTVF9NQVBfV1JJVEUpOworICAgICAgICBHVW5pcXVlUHRyPEdzdFZpZGVvQ29u
dmVydGVyPiB2aWRlb0NvbnZlcnRlcihnc3RfdmlkZW9fY29udmVydGVyX25ldyhpbkZyYW1lLmlu
Zm8oKSwgJm91dEluZm8sIGdzdF9zdHJ1Y3R1cmVfbmV3KCJHc3RWaWRlb0NvbnZlcnRDb25maWci
LAorICAgICAgICAgICAgR1NUX1ZJREVPX0NPTlZFUlRFUl9PUFRfVEhSRUFEUywgR19UWVBFX1VJ
TlQsIHN0ZDo6bWF4KHN0ZDo6dGhyZWFkOjpoYXJkd2FyZV9jb25jdXJyZW5jeSgpLCAxdSksIG51
bGxwdHIpKSk7CisKKyAgICAgICAgQVNTRVJUKHZpZGVvQ29udmVydGVyKTsKKyAgICAgICAgZ3N0
X3ZpZGVvX2NvbnZlcnRlcl9mcmFtZSh2aWRlb0NvbnZlcnRlci5nZXQoKSwgaW5GcmFtZS5nZXQo
KSwgb3V0RnJhbWUuZ2V0KCkpOworICAgICAgICByZXR1cm4gd2VicnRjOjpJNDIwQnVmZmVyOjpD
b3B5KG91dEZyYW1lLndpZHRoKCksIG91dEZyYW1lLmhlaWdodCgpLCBvdXRGcmFtZS5Db21wb25l
bnREYXRhKDApLCBvdXRGcmFtZS5Db21wb25lbnRTdHJpZGUoMCksCisgICAgICAgICAgICBvdXRG
cmFtZS5Db21wb25lbnREYXRhKDEpLCBvdXRGcmFtZS5Db21wb25lbnRTdHJpZGUoMSksIG91dEZy
YW1lLkNvbXBvbmVudERhdGEoMiksIG91dEZyYW1lLkNvbXBvbmVudFN0cmlkZSgyKSk7CisgICAg
fQorCisgICAgcmV0dXJuIHdlYnJ0Yzo6STQyMEJ1ZmZlcjo6Q29weShpbkZyYW1lLndpZHRoKCks
IGluRnJhbWUuaGVpZ2h0KCksIGluRnJhbWUuQ29tcG9uZW50RGF0YSgwKSwgaW5GcmFtZS5Db21w
b25lbnRTdHJpZGUoMCksCisgICAgICAgIGluRnJhbWUuQ29tcG9uZW50RGF0YSgxKSwgaW5GcmFt
ZS5Db21wb25lbnRTdHJpZGUoMSksIGluRnJhbWUuQ29tcG9uZW50RGF0YSgyKSwgaW5GcmFtZS5D
b21wb25lbnRTdHJpZGUoMikpOworfQorCit9CisKKyNlbmRpZiAvLyBVU0UoTElCV0VCUlRDKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbGlid2VicnRj
L2dzdHJlYW1lci9HU3RyZWFtZXJWaWRlb0ZyYW1lTGliV2ViUlRDLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9saWJ3ZWJydGMvZ3N0cmVhbWVyL0dTdHJlYW1lclZpZGVv
RnJhbWVMaWJXZWJSVEMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jZDg0YTg1MjEwN2JkNjk2YWE4YTJkYmY1YTBh
YzAwM2I4OTJkMDY5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWVkaWFzdHJlYW0vbGlid2VicnRjL2dzdHJlYW1lci9HU3RyZWFtZXJWaWRlb0ZyYW1lTGliV2Vi
UlRDLmgKQEAgLTAsMCArMSw2MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBNZXRyb2xv
Z2ljYWwgR3JvdXAgQi5WLgorICogQ29weXJpZ2h0IChDKSAyMDE4IElnYWxpYSBTLkwuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
CisgKiBhaW50IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBVU0UoR1NUUkVBTUVSKSAmJiBVU0Uo
TElCV0VCUlRDKQorCisjaW5jbHVkZSAiR1N0cmVhbWVyQ29tbW9uLmgiCisjaW5jbHVkZSAiTGli
V2ViUlRDTWFjcm9zLmgiCisjaW5jbHVkZSAid2VicnRjL2FwaS92aWRlby9pNDIwX2J1ZmZlci5o
IgorI2luY2x1ZGUgIndlYnJ0Yy9hcGkvdmlkZW8vdmlkZW9fZnJhbWUuaCIKKyNpbmNsdWRlICJ3
ZWJydGMvY29tbW9uX3ZpZGVvL2luY2x1ZGUvdmlkZW9fZnJhbWVfYnVmZmVyLmgiCisjaW5jbHVk
ZSAid2VicnRjL3J0Y19iYXNlL3JlZl9jb3VudGVkX29iamVjdC5oIgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK1dBUk5fVU5VU0VEX1JFVFVSTiBHUmVmUHRyPEdzdFNhbXBsZT4gR1N0cmVhbWVy
U2FtcGxlRnJvbUxpYldlYlJUQ1ZpZGVvRnJhbWUoY29uc3Qgd2VicnRjOjpWaWRlb0ZyYW1lJik7
CisKK3N0ZDo6dW5pcXVlX3B0cjx3ZWJydGM6OlZpZGVvRnJhbWU+IExpYldlYlJUQ1ZpZGVvRnJh
bWVGcm9tR1N0cmVhbWVyU2FtcGxlKEdSZWZQdHI8R3N0U2FtcGxlPiYmLCB3ZWJydGM6OlZpZGVv
Um90YXRpb24sIGludDY0X3QgdGltZXN0YW1wLCBpbnQ2NF90IHJlbmRlclRpbWVNcyk7CisKK2Ns
YXNzIEdTdHJlYW1lclZpZGVvRnJhbWVMaWJXZWJSVEMgOiBwdWJsaWMgcnRjOjpSZWZDb3VudGVk
T2JqZWN0PHdlYnJ0Yzo6VmlkZW9GcmFtZUJ1ZmZlcj4geworcHVibGljOgorICAgIEdTdHJlYW1l
clZpZGVvRnJhbWVMaWJXZWJSVEMoR1JlZlB0cjxHc3RTYW1wbGU+JiYgc2FtcGxlLCBHc3RWaWRl
b0luZm8gaW5mbykKKyAgICAgICAgOiBtX3NhbXBsZShXVEZNb3ZlKHNhbXBsZSkpCisgICAgICAg
ICwgbV9pbmZvKGluZm8pIHsgfQorCisgICAgc3RhdGljIHJ0Yzo6c2NvcGVkX3JlZnB0cjx3ZWJy
dGM6OlZpZGVvRnJhbWVCdWZmZXI+IGNyZWF0ZShHUmVmUHRyPEdzdFNhbXBsZT4mJik7CisKKyAg
ICBHUmVmUHRyPEdzdFNhbXBsZT4mJiB0YWtlU2FtcGxlKCkgeyByZXR1cm4gV1RGTW92ZShtX3Nh
bXBsZSk7IH0KKyAgICBydGM6OnNjb3BlZF9yZWZwdHI8d2VicnRjOjpJNDIwQnVmZmVySW50ZXJm
YWNlPiBUb0k0MjAoKSBmaW5hbDsKKworICAgIGludCB3aWR0aCgpIGNvbnN0IGZpbmFsIHsgcmV0
dXJuIEdTVF9WSURFT19JTkZPX1dJRFRIKCZtX2luZm8pOyB9CisgICAgaW50IGhlaWdodCgpIGNv
bnN0IGZpbmFsIHsgcmV0dXJuIEdTVF9WSURFT19JTkZPX0hFSUdIVCgmbV9pbmZvKTsgfQorCitw
cml2YXRlOgorICAgIHdlYnJ0Yzo6VmlkZW9GcmFtZUJ1ZmZlcjo6VHlwZSB0eXBlKCkgY29uc3Qg
ZmluYWwgeyByZXR1cm4gVHlwZTo6a05hdGl2ZTsgfQorCisgICAgR1JlZlB0cjxHc3RTYW1wbGU+
IG1fc2FtcGxlOworICAgIEdzdFZpZGVvSW5mbyBtX2luZm87Cit9OworfQorCisjZW5kaWYgLy8g
VVNFKEdTVFJFQU1FUikgJiYgVVNFKExJQldFQlJUQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2xpYndlYnJ0Yy9nc3RyZWFtZXIvTGliV2ViUlRDUHJv
dmlkZXJHU3RyZWFtZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0v
bGlid2VicnRjL2dzdHJlYW1lci9MaWJXZWJSVENQcm92aWRlckdTdHJlYW1lci5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uNzBlODE0N2M2YzFkYTkyZmM2OGY2NTJiOTNjMmMzZjU2YTdjZjljNgotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2xpYndlYnJ0Yy9n
c3RyZWFtZXIvTGliV2ViUlRDUHJvdmlkZXJHU3RyZWFtZXIuY3BwCkBAIC0wLDAgKzEsNTggQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgSWdhbGlhIFMuTC4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkxpYldlYlJUQ1By
b3ZpZGVyR1N0cmVhbWVyLmgiCisKKyNpZiBVU0UoTElCV0VCUlRDKSAmJiBVU0UoR1NUUkVBTUVS
KQorCisjaW5jbHVkZSAiUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oIgorI2luY2x1ZGUgPHd0Zi9V
bmlxdWVSZWYuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitVbmlxdWVSZWY8TGliV2ViUlRD
UHJvdmlkZXI+IExpYldlYlJUQ1Byb3ZpZGVyOjpjcmVhdGUoKQoreworICAgIHJldHVybiBtYWtl
VW5pcXVlUmVmPExpYldlYlJUQ1Byb3ZpZGVyR1N0cmVhbWVyPigpOworfQorCitib29sIExpYldl
YlJUQ1Byb3ZpZGVyOjp3ZWJSVENBdmFpbGFibGUoKQoreworICAgIHJldHVybiB0cnVlOworfQor
CitzdGQ6OnVuaXF1ZV9wdHI8d2VicnRjOjpWaWRlb0RlY29kZXJGYWN0b3J5PiBMaWJXZWJSVENQ
cm92aWRlckdTdHJlYW1lcjo6Y3JlYXRlRGVjb2RlckZhY3RvcnkoKQoreworICAgIHJldHVybiBt
YWtlVW5pcXVlPEdTdHJlYW1lclZpZGVvRGVjb2RlckZhY3Rvcnk+KGlzU3VwcG9ydGluZ1ZQOVBy
b2ZpbGUwKCksIGlzU3VwcG9ydGluZ1ZQOVByb2ZpbGUyKCkpOworfQorCitzdGQ6OnVuaXF1ZV9w
dHI8d2VicnRjOjpWaWRlb0VuY29kZXJGYWN0b3J5PiBMaWJXZWJSVENQcm92aWRlckdTdHJlYW1l
cjo6Y3JlYXRlRW5jb2RlckZhY3RvcnkoKQoreworICAgIHJldHVybiBtYWtlVW5pcXVlPEdTdHJl
YW1lclZpZGVvRW5jb2RlckZhY3Rvcnk+KGlzU3VwcG9ydGluZ1ZQOVByb2ZpbGUwKCksIGlzU3Vw
cG9ydGluZ1ZQOVByb2ZpbGUyKCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNl
bmRpZiAvLyBVU0UoTElCV0VCUlRDKSAmJiBVU0UoR1NUUkVBTUVSKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbGlid2VicnRjL2dzdHJlYW1lci9MaWJX
ZWJSVENQcm92aWRlckdTdHJlYW1lci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFz
dHJlYW0vbGlid2VicnRjL2dzdHJlYW1lci9MaWJXZWJSVENQcm92aWRlckdTdHJlYW1lci5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmViOWIzM2Y5MzIxMDhjYmE4M2ZmMTMyNjMzMWE0YjY0N2I5ZDU2MjEKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9saWJ3ZWJy
dGMvZ3N0cmVhbWVyL0xpYldlYlJUQ1Byb3ZpZGVyR1N0cmVhbWVyLmgKQEAgLTAsMCArMSw0NyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkxpYldlYlJUQ1Byb3Zp
ZGVyLmgiCisKKyNpZiBVU0UoTElCV0VCUlRDKSAmJiBVU0UoR1NUUkVBTUVSKQorCisjaW5jbHVk
ZSAiR1N0cmVhbWVyVmlkZW9EZWNvZGVyRmFjdG9yeS5oIgorI2luY2x1ZGUgIkdTdHJlYW1lclZp
ZGVvRW5jb2RlckZhY3RvcnkuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBXRUJD
T1JFX0VYUE9SVCBMaWJXZWJSVENQcm92aWRlckdTdHJlYW1lciA6IHB1YmxpYyBMaWJXZWJSVENQ
cm92aWRlciB7CitwdWJsaWM6CisgICAgTGliV2ViUlRDUHJvdmlkZXJHU3RyZWFtZXIoKSA9IGRl
ZmF1bHQ7CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8d2VicnRjOjpWaWRlb0VuY29kZXJGYWN0b3J5
PiBjcmVhdGVFbmNvZGVyRmFjdG9yeSgpIGZpbmFsOworICAgIHN0ZDo6dW5pcXVlX3B0cjx3ZWJy
dGM6OlZpZGVvRGVjb2RlckZhY3Rvcnk+IGNyZWF0ZURlY29kZXJGYWN0b3J5KCkgZmluYWw7Cit9
OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbGlid2VicnRjL2dzdHJlYW1lci9SZWFsdGlt
ZUluY29taW5nQXVkaW9Tb3VyY2VMaWJXZWJSVEMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWVkaWFzdHJlYW0vbGlid2VicnRjL2dzdHJlYW1lci9SZWFsdGltZUluY29taW5nQXVkaW9T
b3VyY2VMaWJXZWJSVEMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmU2Yjg0MDZhMjRlZTU5MTM4MDc1ODc4MDQy
MWQwYTlhN2FmMzRlOGIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tZWRpYXN0cmVhbS9saWJ3ZWJydGMvZ3N0cmVhbWVyL1JlYWx0aW1lSW5jb21pbmdBdWRpb1Nv
dXJjZUxpYldlYlJUQy5jcHAKQEAgLTAsMCArMSw3OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNyBJZ2FsaWEgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiAgICBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisg
KiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBVU0UoTElCV0VCUlRDKSAm
JiBVU0UoR1NUUkVBTUVSKQorI2luY2x1ZGUgIlJlYWx0aW1lSW5jb21pbmdBdWRpb1NvdXJjZUxp
YldlYlJUQy5oIgorCisjaW5jbHVkZSAiTGliV2ViUlRDQXVkaW9Gb3JtYXQuaCIKKyNpbmNsdWRl
ICJnc3RyZWFtZXIvR1N0cmVhbWVyQXVkaW9EYXRhLmgiCisjaW5jbHVkZSAiZ3N0cmVhbWVyL0dT
dHJlYW1lckF1ZGlvU3RyZWFtRGVzY3JpcHRpb24uaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitSZWY8UmVhbHRpbWVJbmNvbWluZ0F1ZGlvU291cmNlPiBSZWFsdGltZUluY29taW5nQXVkaW9T
b3VyY2U6OmNyZWF0ZShydGM6OnNjb3BlZF9yZWZwdHI8d2VicnRjOjpBdWRpb1RyYWNrSW50ZXJm
YWNlPiYmIGF1ZGlvVHJhY2ssIFN0cmluZyYmIGF1ZGlvVHJhY2tJZCkKK3sKKyAgICBhdXRvIHNv
dXJjZSA9IFJlYWx0aW1lSW5jb21pbmdBdWRpb1NvdXJjZUxpYldlYlJUQzo6Y3JlYXRlKFdURk1v
dmUoYXVkaW9UcmFjayksIFdURk1vdmUoYXVkaW9UcmFja0lkKSk7CisgICAgc291cmNlLT5zdGFy
dCgpOworICAgIHJldHVybiBzb3VyY2U7Cit9CisKK1JlZjxSZWFsdGltZUluY29taW5nQXVkaW9T
b3VyY2VMaWJXZWJSVEM+IFJlYWx0aW1lSW5jb21pbmdBdWRpb1NvdXJjZUxpYldlYlJUQzo6Y3Jl
YXRlKHJ0Yzo6c2NvcGVkX3JlZnB0cjx3ZWJydGM6OkF1ZGlvVHJhY2tJbnRlcmZhY2U+JiYgYXVk
aW9UcmFjaywgU3RyaW5nJiYgYXVkaW9UcmFja0lkKQoreworICAgIHJldHVybiBhZG9wdFJlZigq
bmV3IFJlYWx0aW1lSW5jb21pbmdBdWRpb1NvdXJjZUxpYldlYlJUQyhXVEZNb3ZlKGF1ZGlvVHJh
Y2spLCBXVEZNb3ZlKGF1ZGlvVHJhY2tJZCkpKTsKK30KKworUmVhbHRpbWVJbmNvbWluZ0F1ZGlv
U291cmNlTGliV2ViUlRDOjpSZWFsdGltZUluY29taW5nQXVkaW9Tb3VyY2VMaWJXZWJSVEMocnRj
OjpzY29wZWRfcmVmcHRyPHdlYnJ0Yzo6QXVkaW9UcmFja0ludGVyZmFjZT4mJiBhdWRpb1RyYWNr
LCBTdHJpbmcmJiBhdWRpb1RyYWNrSWQpCisgICAgOiBSZWFsdGltZUluY29taW5nQXVkaW9Tb3Vy
Y2UoV1RGTW92ZShhdWRpb1RyYWNrKSwgV1RGTW92ZShhdWRpb1RyYWNrSWQpKQoreworfQorCit2
b2lkIFJlYWx0aW1lSW5jb21pbmdBdWRpb1NvdXJjZUxpYldlYlJUQzo6T25EYXRhKGNvbnN0IHZv
aWQqIGF1ZGlvRGF0YSwgaW50LCBpbnQgc2FtcGxlUmF0ZSwgc2l6ZV90IG51bWJlck9mQ2hhbm5l
bHMsIHNpemVfdCBudW1iZXJPZkZyYW1lcykKK3sKKyAgICBHc3RBdWRpb0luZm8gaW5mbzsKKyAg
ICBHc3RBdWRpb0Zvcm1hdCBmb3JtYXQgPSBnc3RfYXVkaW9fZm9ybWF0X2J1aWxkX2ludGVnZXIo
CisgICAgICAgIExpYldlYlJUQ0F1ZGlvRm9ybWF0Ojppc1NpZ25lZCwKKyAgICAgICAgTGliV2Vi
UlRDQXVkaW9Gb3JtYXQ6OmlzQmlnRW5kaWFuID8gR19CSUdfRU5ESUFOIDogR19MSVRUTEVfRU5E
SUFOLAorICAgICAgICBMaWJXZWJSVENBdWRpb0Zvcm1hdDo6c2FtcGxlU2l6ZSwKKyAgICAgICAg
TGliV2ViUlRDQXVkaW9Gb3JtYXQ6OnNhbXBsZVNpemUpOworCisgICAgZ3N0X2F1ZGlvX2luZm9f
c2V0X2Zvcm1hdCgmaW5mbywgZm9ybWF0LCBzYW1wbGVSYXRlLCBudW1iZXJPZkNoYW5uZWxzLCBO
VUxMKTsKKworICAgIGF1dG8gYnVmZmVyU2l6ZSA9IEdTVF9BVURJT19JTkZPX0JQRigmaW5mbykg
KiBudW1iZXJPZkZyYW1lczsKKyAgICBhdXRvIGJ1ZmZlciA9IGFkb3B0R1JlZihnc3RfYnVmZmVy
X25ld193cmFwcGVkX2Z1bGwoR1NUX01FTU9SWV9GTEFHX1JFQURPTkxZLCBjb25zdF9jYXN0PGdw
b2ludGVyPihhdWRpb0RhdGEpLCBidWZmZXJTaXplLCAwLCBidWZmZXJTaXplLCBudWxscHRyLCBu
dWxscHRyKSk7CisgICAgYXV0byBjYXBzID0gYWRvcHRHUmVmKGdzdF9hdWRpb19pbmZvX3RvX2Nh
cHMoJmluZm8pKTsKKyAgICBhdXRvIHNhbXBsZSA9IGFkb3B0R1JlZihnc3Rfc2FtcGxlX25ldyhi
dWZmZXIuZ2V0KCksIGNhcHMuZ2V0KCksIG51bGxwdHIsIG51bGxwdHIpKTsKKyAgICBHU3RyZWFt
ZXJBdWRpb0RhdGEgZGF0YShXVEZNb3ZlKHNhbXBsZSksIGluZm8pOworICAgIE1lZGlhVGltZSBt
ZWRpYVRpbWUoKG1fbnVtYmVyT2ZGcmFtZXMgKiBHX1VTRUNfUEVSX1NFQykgLyBzYW1wbGVSYXRl
LCBHX1VTRUNfUEVSX1NFQyk7CisgICAgYXVkaW9TYW1wbGVzQXZhaWxhYmxlKG1lZGlhVGltZSwg
ZGF0YSwgR1N0cmVhbWVyQXVkaW9TdHJlYW1EZXNjcmlwdGlvbihpbmZvKSwgbnVtYmVyT2ZGcmFt
ZXMpOworCisgICAgbV9udW1iZXJPZkZyYW1lcyArPSBudW1iZXJPZkZyYW1lczsKK30KK30KKwor
I2VuZGlmIC8vIFVTRShMSUJXRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tZWRpYXN0cmVhbS9saWJ3ZWJydGMvZ3N0cmVhbWVyL1JlYWx0aW1lSW5jb21pbmdBdWRp
b1NvdXJjZUxpYldlYlJUQy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0v
bGlid2VicnRjL2dzdHJlYW1lci9SZWFsdGltZUluY29taW5nQXVkaW9Tb3VyY2VMaWJXZWJSVEMu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi41NzMzYzUyZjg2MWRlY2RhZDFmZjRlYTRiYzAwYmZmOWY1ZWNjZWNiCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbGli
d2VicnRjL2dzdHJlYW1lci9SZWFsdGltZUluY29taW5nQXVkaW9Tb3VyY2VMaWJXZWJSVEMuaApA
QCAtMCwwICsxLDUyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgorICogICAgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
KyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdt
YSBvbmNlCisKKyNpZiBVU0UoTElCV0VCUlRDKSAmJiBVU0UoR1NUUkVBTUVSKQorCisjaW5jbHVk
ZSAiUmVhbHRpbWVJbmNvbWluZ0F1ZGlvU291cmNlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworY2xhc3MgUmVhbHRpbWVJbmNvbWluZ0F1ZGlvU291cmNlTGliV2ViUlRDIGZpbmFsIDogcHVi
bGljIFJlYWx0aW1lSW5jb21pbmdBdWRpb1NvdXJjZSB7CitwdWJsaWM6CisgICAgc3RhdGljIFJl
ZjxSZWFsdGltZUluY29taW5nQXVkaW9Tb3VyY2VMaWJXZWJSVEM+IGNyZWF0ZShydGM6OnNjb3Bl
ZF9yZWZwdHI8d2VicnRjOjpBdWRpb1RyYWNrSW50ZXJmYWNlPiYmLCBTdHJpbmcmJik7CisKK3By
aXZhdGU6CisgICAgUmVhbHRpbWVJbmNvbWluZ0F1ZGlvU291cmNlTGliV2ViUlRDKHJ0Yzo6c2Nv
cGVkX3JlZnB0cjx3ZWJydGM6OkF1ZGlvVHJhY2tJbnRlcmZhY2U+JiYsIFN0cmluZyYmKTsKKwor
ICAgIC8vIHdlYnJ0Yzo6QXVkaW9UcmFja1NpbmtJbnRlcmZhY2UgQVBJCisgICAgdm9pZCBPbkRh
dGEoY29uc3Qgdm9pZCogYXVkaW9EYXRhLCBpbnQgYml0c1BlclNhbXBsZSwgaW50IHNhbXBsZVJh
dGUsIHNpemVfdCBudW1iZXJPZkNoYW5uZWxzLCBzaXplX3QgbnVtYmVyT2ZGcmFtZXMpIGZpbmFs
OworCisgICAgdWludDY0X3QgbV9udW1iZXJPZkZyYW1lcyB7IDAgfTsKK307CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShMSUJXRUJSVEMpCisKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2xpYndlYnJ0Yy9nc3RyZWFtZXIv
UmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlTGliV2ViUlRDLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21lZGlhc3RyZWFtL2xpYndlYnJ0Yy9nc3RyZWFtZXIvUmVhbHRpbWVJbmNvbWlu
Z1ZpZGVvU291cmNlTGliV2ViUlRDLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44M2NiNDFiNDdiMDA2YTg1OTUy
Zjg1ZDc2YmRlOWU4N2ZjZWVhMDRlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWVkaWFzdHJlYW0vbGlid2VicnRjL2dzdHJlYW1lci9SZWFsdGltZUluY29taW5n
VmlkZW9Tb3VyY2VMaWJXZWJSVEMuY3BwCkBAIC0wLDAgKzEsNzAgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTcgSWdhbGlhIFMuTC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqICAgIGluIHRoZSBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisg
KiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIFVTRShMSUJXRUJS
VEMpICYmIFVTRShHU1RSRUFNRVIpCisjaW5jbHVkZSAiUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291
cmNlTGliV2ViUlRDLmgiCisKKyNpbmNsdWRlICJHU3RyZWFtZXJWaWRlb0ZyYW1lTGliV2ViUlRD
LmgiCisjaW5jbHVkZSAiTWVkaWFTYW1wbGVHU3RyZWFtZXIuaCIKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitSZWY8UmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlPiBSZWFsdGltZUluY29taW5n
VmlkZW9Tb3VyY2U6OmNyZWF0ZShydGM6OnNjb3BlZF9yZWZwdHI8d2VicnRjOjpWaWRlb1RyYWNr
SW50ZXJmYWNlPiYmIHZpZGVvVHJhY2ssIFN0cmluZyYmIHRyYWNrSWQpCit7CisgICAgYXV0byBz
b3VyY2UgPSBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VMaWJXZWJSVEM6OmNyZWF0ZShXVEZN
b3ZlKHZpZGVvVHJhY2spLCBXVEZNb3ZlKHRyYWNrSWQpKTsKKyAgICBzb3VyY2UtPnN0YXJ0KCk7
CisgICAgcmV0dXJuIHNvdXJjZTsKK30KKworUmVmPFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJj
ZUxpYldlYlJUQz4gUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlTGliV2ViUlRDOjpjcmVhdGUo
cnRjOjpzY29wZWRfcmVmcHRyPHdlYnJ0Yzo6VmlkZW9UcmFja0ludGVyZmFjZT4mJiB2aWRlb1Ry
YWNrLCBTdHJpbmcmJiB0cmFja0lkKQoreworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFJlYWx0
aW1lSW5jb21pbmdWaWRlb1NvdXJjZUxpYldlYlJUQyhXVEZNb3ZlKHZpZGVvVHJhY2spLCBXVEZN
b3ZlKHRyYWNrSWQpKSk7Cit9CisKK1JlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZUxpYldlYlJU
Qzo6UmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlTGliV2ViUlRDKHJ0Yzo6c2NvcGVkX3JlZnB0
cjx3ZWJydGM6OlZpZGVvVHJhY2tJbnRlcmZhY2U+JiYgdmlkZW9UcmFjaywgU3RyaW5nJiYgdmlk
ZW9UcmFja0lkKQorICAgIDogUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlKFdURk1vdmUodmlk
ZW9UcmFjayksIFdURk1vdmUodmlkZW9UcmFja0lkKSkKK3sKK30KKwordm9pZCBSZWFsdGltZUlu
Y29taW5nVmlkZW9Tb3VyY2VMaWJXZWJSVEM6Ok9uRnJhbWUoY29uc3Qgd2VicnRjOjpWaWRlb0Zy
YW1lJiBmcmFtZSkKK3sKKyAgICBpZiAoIWlzUHJvZHVjaW5nRGF0YSgpKQorICAgICAgICByZXR1
cm47CisKKyAgICBjYWxsT25NYWluVGhyZWFkKFtwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhp
cyksIGZyYW1lXSB7CisgICAgICAgIGF1dG8gZ3N0U2FtcGxlID0gR1N0cmVhbWVyU2FtcGxlRnJv
bUxpYldlYlJUQ1ZpZGVvRnJhbWUoZnJhbWUpOworICAgICAgICBhdXRvIHNhbXBsZSA9IE1lZGlh
U2FtcGxlR1N0cmVhbWVyOjpjcmVhdGUoV1RGTW92ZShnc3RTYW1wbGUpLCB7IH0sIHsgfSk7Cisg
ICAgICAgIHByb3RlY3RlZFRoaXMtPnZpZGVvU2FtcGxlQXZhaWxhYmxlKHNhbXBsZS5nZXQoKSk7
CisgICAgfSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShM
SUJXRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVh
bS9saWJ3ZWJydGMvZ3N0cmVhbWVyL1JlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZUxpYldlYlJU
Qy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbGlid2VicnRjL2dzdHJl
YW1lci9SZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VMaWJXZWJSVEMuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5j
NmJiYzUzZDY1NjkzOWIyZDk5MzYwOWYwZmQ4MDk3OWMyZTc2YTViCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbGlid2VicnRjL2dzdHJlYW1l
ci9SZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VMaWJXZWJSVEMuaApAQCAtMCwwICsxLDU1IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiAgICBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
CisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAq
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIFVT
RShMSUJXRUJSVEMpICYmIFVTRShHU1RSRUFNRVIpCisKKyNpbmNsdWRlICJHU3RyZWFtZXJDb21t
b24uaCIKKyNpbmNsdWRlICJSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2UuaCIKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitjbGFzcyBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VMaWJXZWJS
VEMgZmluYWwgOiBwdWJsaWMgUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlIHsKK3B1YmxpYzoK
KyAgICBzdGF0aWMgUmVmPFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZUxpYldlYlJUQz4gY3Jl
YXRlKHJ0Yzo6c2NvcGVkX3JlZnB0cjx3ZWJydGM6OlZpZGVvVHJhY2tJbnRlcmZhY2U+JiYsIFN0
cmluZyYmKTsKKworcHJpdmF0ZToKKyAgICBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VMaWJX
ZWJSVEMocnRjOjpzY29wZWRfcmVmcHRyPHdlYnJ0Yzo6VmlkZW9UcmFja0ludGVyZmFjZT4mJiwg
U3RyaW5nJiYpOworICAgIH5SZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VMaWJXZWJSVEMoKSB7
IH0KKworICAgIC8vIHJ0Yzo6VmlkZW9TaW5rSW50ZXJmYWNlCisgICAgdm9pZCBPbkZyYW1lKGNv
bnN0IHdlYnJ0Yzo6VmlkZW9GcmFtZSYpIGZpbmFsOworICAgIHZvaWQgc2V0Q2Fwc0Zyb21TZXR0
aW5ncygpOworICAgIEdSZWZQdHI8R3N0Q2Fwcz4gbV9jYXBzOworfTsKKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKExJQldFQlJUQykKKwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbGlid2VicnRjL2dzdHJlYW1lci9SZWFs
dGltZU1lZGlhU291cmNlQ2VudGVyTGliV2ViUlRDLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21lZGlhc3RyZWFtL2xpYndlYnJ0Yy9nc3RyZWFtZXIvUmVhbHRpbWVNZWRpYVNvdXJjZUNl
bnRlckxpYldlYlJUQy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMmMxZTA5MWU0NmJlYmM2YWVkZDFhMWQwY2E2
NDRkYzk2YTA2M2NkNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21lZGlhc3RyZWFtL2xpYndlYnJ0Yy9nc3RyZWFtZXIvUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRl
ckxpYldlYlJUQy5jcHAKQEAgLTAsMCArMSw1MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
OCBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICogQ29weXJpZ2h0IChDKSAyMDIwIElnYWxpYSBT
LkwuCisgKiBBdXRob3I6IFRoaWJhdWx0IFNhdW5pZXIgPHRzYXVuaWVyQGlnYWxpYS5jb20+Cisg
KiBBdXRob3I6IEFsZWphbmRybyBHLiBDYXN0cm8gPGFsZXhAaWdhbGlhLmNvbT4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFpbnQgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisKKyNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQorI2luY2x1ZGUgIlJlYWx0aW1l
TWVkaWFTb3VyY2VDZW50ZXIuaCIKKworI2luY2x1ZGUgIkdTdHJlYW1lckF1ZGlvQ2FwdHVyZVNv
dXJjZS5oIgorI2luY2x1ZGUgIkdTdHJlYW1lckNhcHR1cmVEZXZpY2UuaCIKKyNpbmNsdWRlICJH
U3RyZWFtZXJWaWRlb0NhcHR1cmVTb3VyY2UuaCIKKyNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5o
PgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0F1ZGlvQ2FwdHVyZUZhY3RvcnkmIFJlYWx0aW1l
TWVkaWFTb3VyY2VDZW50ZXI6OmRlZmF1bHRBdWRpb0NhcHR1cmVGYWN0b3J5KCkKK3sKKyAgICBy
ZXR1cm4gR1N0cmVhbWVyQXVkaW9DYXB0dXJlU291cmNlOjpmYWN0b3J5KCk7Cit9CisKK1ZpZGVv
Q2FwdHVyZUZhY3RvcnkmIFJlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXI6OmRlZmF1bHRWaWRlb0Nh
cHR1cmVGYWN0b3J5KCkKK3sKKyAgICByZXR1cm4gR1N0cmVhbWVyVmlkZW9DYXB0dXJlU291cmNl
OjpmYWN0b3J5KCk7Cit9CisKK0Rpc3BsYXlDYXB0dXJlRmFjdG9yeSYgUmVhbHRpbWVNZWRpYVNv
dXJjZUNlbnRlcjo6ZGVmYXVsdERpc3BsYXlDYXB0dXJlRmFjdG9yeSgpCit7CisgICAgcmV0dXJu
IEdTdHJlYW1lclZpZGVvQ2FwdHVyZVNvdXJjZTo6ZGlzcGxheUZhY3RvcnkoKTsKK30KKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVBTSkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2xpYndlYnJ0Yy9n
c3RyZWFtZXIvUmVhbHRpbWVPdXRnb2luZ0F1ZGlvU291cmNlTGliV2ViUlRDLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2xpYndlYnJ0Yy9nc3RyZWFtZXIvUmVhbHRp
bWVPdXRnb2luZ0F1ZGlvU291cmNlTGliV2ViUlRDLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44YzljYzNmYTI1
MTEzNjQyMjFhYThlZDk1N2VjMjNmMThmZTUxZTQ3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbGlid2VicnRjL2dzdHJlYW1lci9SZWFsdGlt
ZU91dGdvaW5nQXVkaW9Tb3VyY2VMaWJXZWJSVEMuY3BwCkBAIC0wLDAgKzEsMTUwIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE3IElnYWxpYSBTLkwKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICog
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyAqIGFpbnQgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNp
ZiBVU0UoTElCV0VCUlRDKSAmJiBVU0UoR1NUUkVBTUVSKQorI2luY2x1ZGUgIlJlYWx0aW1lT3V0
Z29pbmdBdWRpb1NvdXJjZUxpYldlYlJUQy5oIgorCisjaW5jbHVkZSAiR1N0cmVhbWVyQXVkaW9E
YXRhLmgiCisjaW5jbHVkZSAiR1N0cmVhbWVyQXVkaW9TdHJlYW1EZXNjcmlwdGlvbi5oIgorI2lu
Y2x1ZGUgIkxpYldlYlJUQ0F1ZGlvRm9ybWF0LmgiCisjaW5jbHVkZSAiTGliV2ViUlRDUHJvdmlk
ZXIuaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK1JlYWx0aW1lT3V0Z29pbmdBdWRpb1NvdXJjZUxpYldlYlJUQzo6UmVhbHRpbWVPdXRnb2lu
Z0F1ZGlvU291cmNlTGliV2ViUlRDKFJlZjxNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZT4mJiBhdWRp
b1NvdXJjZSkKKyAgICA6IFJlYWx0aW1lT3V0Z29pbmdBdWRpb1NvdXJjZShXVEZNb3ZlKGF1ZGlv
U291cmNlKSkKK3sKKyAgICBtX2FkYXB0ZXIgPSBhZG9wdEdSZWYoZ3N0X2FkYXB0ZXJfbmV3KCkp
LAorICAgIG1fc2FtcGxlQ29udmVydGVyID0gbnVsbHB0cjsKK30KKworUmVhbHRpbWVPdXRnb2lu
Z0F1ZGlvU291cmNlTGliV2ViUlRDOjp+UmVhbHRpbWVPdXRnb2luZ0F1ZGlvU291cmNlTGliV2Vi
UlRDKCkKK3sKKyAgICBtX3NhbXBsZUNvbnZlcnRlciA9IG51bGxwdHI7Cit9CisKK1JlZjxSZWFs
dGltZU91dGdvaW5nQXVkaW9Tb3VyY2U+IFJlYWx0aW1lT3V0Z29pbmdBdWRpb1NvdXJjZTo6Y3Jl
YXRlKFJlZjxNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZT4mJiBhdWRpb1NvdXJjZSkKK3sKKyAgICBy
ZXR1cm4gUmVhbHRpbWVPdXRnb2luZ0F1ZGlvU291cmNlTGliV2ViUlRDOjpjcmVhdGUoV1RGTW92
ZShhdWRpb1NvdXJjZSkpOworfQorCitzdGF0aWMgaW5saW5lIEdzdEF1ZGlvSW5mbyBsaWJ3ZWJy
dGNBdWRpb0Zvcm1hdChpbnQgc2FtcGxlUmF0ZSwgc2l6ZV90IGNoYW5uZWxDb3VudCkKK3sKKyAg
ICBHc3RBdWRpb0Zvcm1hdCBmb3JtYXQgPSBnc3RfYXVkaW9fZm9ybWF0X2J1aWxkX2ludGVnZXIo
CisgICAgICAgIExpYldlYlJUQ0F1ZGlvRm9ybWF0Ojppc1NpZ25lZCwKKyAgICAgICAgTGliV2Vi
UlRDQXVkaW9Gb3JtYXQ6OmlzQmlnRW5kaWFuID8gR19CSUdfRU5ESUFOIDogR19MSVRUTEVfRU5E
SUFOLAorICAgICAgICBMaWJXZWJSVENBdWRpb0Zvcm1hdDo6c2FtcGxlU2l6ZSwKKyAgICAgICAg
TGliV2ViUlRDQXVkaW9Gb3JtYXQ6OnNhbXBsZVNpemUpOworCisgICAgR3N0QXVkaW9JbmZvIGlu
Zm87CisKKyAgICBzaXplX3QgbGliV2ViUlRDQ2hhbm5lbENvdW50ID0gY2hhbm5lbENvdW50ID49
IDIgPyAyIDogY2hhbm5lbENvdW50OworICAgIGdzdF9hdWRpb19pbmZvX3NldF9mb3JtYXQoJmlu
Zm8sIGZvcm1hdCwgc2FtcGxlUmF0ZSwgbGliV2ViUlRDQ2hhbm5lbENvdW50LCBudWxscHRyKTsK
KyAgICByZXR1cm4gaW5mbzsKK30KKwordm9pZCBSZWFsdGltZU91dGdvaW5nQXVkaW9Tb3VyY2VM
aWJXZWJSVEM6OmF1ZGlvU2FtcGxlc0F2YWlsYWJsZShjb25zdCBNZWRpYVRpbWUmLCBjb25zdCBQ
bGF0Zm9ybUF1ZGlvRGF0YSYgYXVkaW9EYXRhLCBjb25zdCBBdWRpb1N0cmVhbURlc2NyaXB0aW9u
JiBzdHJlYW1EZXNjcmlwdGlvbiwgc2l6ZV90IC8qIHNhbXBsZUNvdW50ICovKQoreworICAgIERp
c2FibGVNYWxsb2NSZXN0cmljdGlvbnNGb3JDdXJyZW50VGhyZWFkU2NvcGUgZGlzYWJsZU1hbGxv
Y1Jlc3RyaWN0aW9uczsKKyAgICBhdXRvIGRhdGEgPSBzdGF0aWNfY2FzdDxjb25zdCBHU3RyZWFt
ZXJBdWRpb0RhdGEmPihhdWRpb0RhdGEpOworICAgIGF1dG8gZGVzYyA9IHN0YXRpY19jYXN0PGNv
bnN0IEdTdHJlYW1lckF1ZGlvU3RyZWFtRGVzY3JpcHRpb24mPihzdHJlYW1EZXNjcmlwdGlvbik7
CisKKyAgICBpZiAobV9zYW1wbGVDb252ZXJ0ZXIgJiYgIWdzdF9hdWRpb19pbmZvX2lzX2VxdWFs
KCZtX2lucHV0U3RyZWFtRGVzY3JpcHRpb24sICZkZXNjLmdldEluZm8oKSkpIHsKKyAgICAgICAg
R1NUX0VSUk9SX09CSkVDVCh0aGlzLCAiRklYTUUgLSBBdWRpbyBmb3JtYXQgcmVuZWdvdGlhdGlv
biBpcyBub3QgcG9zc2libGUgeWV0ISIpOworICAgICAgICBtX3NhbXBsZUNvbnZlcnRlciA9IG51
bGxwdHI7CisgICAgfQorCisgICAgaWYgKCFtX3NhbXBsZUNvbnZlcnRlcikgeworICAgICAgICBt
X2lucHV0U3RyZWFtRGVzY3JpcHRpb24gPSBkZXNjLmdldEluZm8oKTsKKyAgICAgICAgbV9vdXRw
dXRTdHJlYW1EZXNjcmlwdGlvbiA9IGxpYndlYnJ0Y0F1ZGlvRm9ybWF0KExpYldlYlJUQ0F1ZGlv
Rm9ybWF0OjpzYW1wbGVSYXRlLCBkZXNjLm51bWJlck9mQ2hhbm5lbHMoKSk7CisgICAgICAgIG1f
c2FtcGxlQ29udmVydGVyLnJlc2V0KGdzdF9hdWRpb19jb252ZXJ0ZXJfbmV3KEdTVF9BVURJT19D
T05WRVJURVJfRkxBR19JTl9XUklUQUJMRSwgJm1faW5wdXRTdHJlYW1EZXNjcmlwdGlvbiwKKyAg
ICAgICAgICAgICZtX291dHB1dFN0cmVhbURlc2NyaXB0aW9uLCBudWxscHRyKSk7CisgICAgfQor
CisgICAgeworICAgICAgICBMb2NrZXIgbG9ja2VyIHsgbV9hZGFwdGVyTG9jayB9OworICAgICAg
ICBjb25zdCBhdXRvJiBzYW1wbGUgPSBkYXRhLmdldFNhbXBsZSgpOworICAgICAgICBhdXRvKiBi
dWZmZXIgPSBnc3Rfc2FtcGxlX2dldF9idWZmZXIoc2FtcGxlLmdldCgpKTsKKyAgICAgICAgZ3N0
X2FkYXB0ZXJfcHVzaChtX2FkYXB0ZXIuZ2V0KCksIGdzdF9idWZmZXJfcmVmKGJ1ZmZlcikpOwor
ICAgIH0KKyAgICBMaWJXZWJSVENQcm92aWRlcjo6Y2FsbE9uV2ViUlRDU2lnbmFsaW5nVGhyZWFk
KFtwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyldIHsKKyAgICAgICAgcHJvdGVjdGVkVGhp
cy0+cHVsbEF1ZGlvRGF0YSgpOworICAgIH0pOworfQorCit2b2lkIFJlYWx0aW1lT3V0Z29pbmdB
dWRpb1NvdXJjZUxpYldlYlJUQzo6cHVsbEF1ZGlvRGF0YSgpCit7CisgICAgaWYgKCFHU1RfQVVE
SU9fSU5GT19JU19WQUxJRCgmbV9pbnB1dFN0cmVhbURlc2NyaXB0aW9uKSB8fCAhR1NUX0FVRElP
X0lORk9fSVNfVkFMSUQoJm1fb3V0cHV0U3RyZWFtRGVzY3JpcHRpb24pKSB7CisgICAgICAgIEdT
VF9JTkZPKCJObyBzdHJlYW0gZGVzY3JpcHRpb24gc2V0IHlldC4iKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIHNpemVfdCBvdXRDaHVua1NhbXBsZUNvdW50ID0gTGliV2ViUlRDQXVk
aW9Gb3JtYXQ6OmNodW5rU2FtcGxlQ291bnQ7CisgICAgc2l6ZV90IG91dEJ1ZmZlclNpemUgPSBv
dXRDaHVua1NhbXBsZUNvdW50ICogbV9vdXRwdXRTdHJlYW1EZXNjcmlwdGlvbi5icGY7CisKKyAg
ICBMb2NrZXIgbG9ja2VyIHsgbV9hZGFwdGVyTG9jayB9OworICAgIHNpemVfdCBpbkNodW5rU2Ft
cGxlQ291bnQgPSBnc3RfYXVkaW9fY29udmVydGVyX2dldF9pbl9mcmFtZXMobV9zYW1wbGVDb252
ZXJ0ZXIuZ2V0KCksIG91dENodW5rU2FtcGxlQ291bnQpOworICAgIHNpemVfdCBpbkJ1ZmZlclNp
emUgPSBpbkNodW5rU2FtcGxlQ291bnQgKiBtX2lucHV0U3RyZWFtRGVzY3JpcHRpb24uYnBmOwor
CisgICAgd2hpbGUgKGdzdF9hZGFwdGVyX2F2YWlsYWJsZShtX2FkYXB0ZXIuZ2V0KCkpID4gaW5C
dWZmZXJTaXplKSB7CisgICAgICAgIGF1dG8gaW5CdWZmZXIgPSBhZG9wdEdSZWYoZ3N0X2FkYXB0
ZXJfdGFrZV9idWZmZXIobV9hZGFwdGVyLmdldCgpLCBpbkJ1ZmZlclNpemUpKTsKKyAgICAgICAg
bV9hdWRpb0J1ZmZlci5ncm93KG91dEJ1ZmZlclNpemUpOworICAgICAgICBpZiAoaXNTaWxlbmNl
ZCgpKQorICAgICAgICAgICAgd2Via2l0R3N0QXVkaW9Gb3JtYXRGaWxsU2lsZW5jZShtX291dHB1
dFN0cmVhbURlc2NyaXB0aW9uLmZpbmZvLCBtX2F1ZGlvQnVmZmVyLmRhdGEoKSwgb3V0QnVmZmVy
U2l6ZSk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgR3N0TWFwcGVkQnVmZmVyIGluTWFw
KGluQnVmZmVyLmdldCgpLCBHU1RfTUFQX1JFQUQpOworCisgICAgICAgICAgICBncG9pbnRlciBp
blsxXSA9IHsgaW5NYXAuZGF0YSgpIH07CisgICAgICAgICAgICBncG9pbnRlciBvdXRbMV0gPSB7
IG1fYXVkaW9CdWZmZXIuZGF0YSgpIH07CisgICAgICAgICAgICBpZiAoIWdzdF9hdWRpb19jb252
ZXJ0ZXJfc2FtcGxlcyhtX3NhbXBsZUNvbnZlcnRlci5nZXQoKSwgc3RhdGljX2Nhc3Q8R3N0QXVk
aW9Db252ZXJ0ZXJGbGFncz4oMCksIGluLCBpbkNodW5rU2FtcGxlQ291bnQsIG91dCwgb3V0Q2h1
bmtTYW1wbGVDb3VudCkpIHsKKyAgICAgICAgICAgICAgICBHU1RfRVJST1IoIkNvdWxkIG5vdCBj
b252ZXJ0IHNhbXBsZXMuIik7CisKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKworICAgICAgICBzZW5kQXVkaW9GcmFtZXMobV9hdWRpb0J1ZmZlci5k
YXRhKCksIExpYldlYlJUQ0F1ZGlvRm9ybWF0OjpzYW1wbGVTaXplLCBHU1RfQVVESU9fSU5GT19S
QVRFKCZtX291dHB1dFN0cmVhbURlc2NyaXB0aW9uKSwKKyAgICAgICAgICAgIEdTVF9BVURJT19J
TkZPX0NIQU5ORUxTKCZtX291dHB1dFN0cmVhbURlc2NyaXB0aW9uKSwgb3V0Q2h1bmtTYW1wbGVD
b3VudCk7CisgICAgfQorfQorCitib29sIFJlYWx0aW1lT3V0Z29pbmdBdWRpb1NvdXJjZUxpYldl
YlJUQzo6aXNSZWFjaGluZ0J1ZmZlcmVkQXVkaW9EYXRhSGlnaExpbWl0KCkKK3sKKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBSZWFsdGltZU91dGdv
aW5nQXVkaW9Tb3VyY2VMaWJXZWJSVEM6OmlzUmVhY2hpbmdCdWZmZXJlZEF1ZGlvRGF0YUxvd0xp
bWl0KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKwor
Ym9vbCBSZWFsdGltZU91dGdvaW5nQXVkaW9Tb3VyY2VMaWJXZWJSVEM6Omhhc0J1ZmZlcmVkRW5v
dWdoRGF0YSgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShMSUJXRUJSVEMpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9saWJ3ZWJydGMv
Z3N0cmVhbWVyL1JlYWx0aW1lT3V0Z29pbmdBdWRpb1NvdXJjZUxpYldlYlJUQy5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbGlid2VicnRjL2dzdHJlYW1lci9SZWFsdGlt
ZU91dGdvaW5nQXVkaW9Tb3VyY2VMaWJXZWJSVEMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41OTIzZDYyNjhiM2E0
YWNhMDYyNTIwZjI0YzUyMzk5ZjZhN2Q3M2FjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbGlid2VicnRjL2dzdHJlYW1lci9SZWFsdGltZU91
dGdvaW5nQXVkaW9Tb3VyY2VMaWJXZWJSVEMuaApAQCAtMCwwICsxLDYyIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE3IElnYWxpYSBTLkwKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
KiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKKyAqIGFpbnQgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIFVTRShMSUJXRUJS
VEMpCisKKyNpbmNsdWRlICJHU3RyZWFtZXJDb21tb24uaCIKKyNpbmNsdWRlICJSZWFsdGltZU91
dGdvaW5nQXVkaW9Tb3VyY2UuaCIKKworI2luY2x1ZGUgPGdzdC9hdWRpby9hdWRpby5oPgorI2lu
Y2x1ZGUgPHd0Zi9Mb2NrLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgUmVhbHRp
bWVPdXRnb2luZ0F1ZGlvU291cmNlTGliV2ViUlRDIGZpbmFsIDogcHVibGljIFJlYWx0aW1lT3V0
Z29pbmdBdWRpb1NvdXJjZSB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxSZWFsdGltZU91dGdv
aW5nQXVkaW9Tb3VyY2VMaWJXZWJSVEM+IGNyZWF0ZShSZWY8TWVkaWFTdHJlYW1UcmFja1ByaXZh
dGU+JiYgYXVkaW9UcmFja1ByaXZhdGUpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYo
Km5ldyBSZWFsdGltZU91dGdvaW5nQXVkaW9Tb3VyY2VMaWJXZWJSVEMoV1RGTW92ZShhdWRpb1Ry
YWNrUHJpdmF0ZSkpKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgZXhwbGljaXQgUmVhbHRpbWVP
dXRnb2luZ0F1ZGlvU291cmNlTGliV2ViUlRDKFJlZjxNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZT4m
Jik7CisgICAgflJlYWx0aW1lT3V0Z29pbmdBdWRpb1NvdXJjZUxpYldlYlJUQygpOworCisgICAg
dm9pZCBhdWRpb1NhbXBsZXNBdmFpbGFibGUoY29uc3QgTWVkaWFUaW1lJiwgY29uc3QgUGxhdGZv
cm1BdWRpb0RhdGEmLCBjb25zdCBBdWRpb1N0cmVhbURlc2NyaXB0aW9uJiwgc2l6ZV90KSBmaW5h
bDsKKworICAgIGJvb2wgaXNSZWFjaGluZ0J1ZmZlcmVkQXVkaW9EYXRhSGlnaExpbWl0KCkgZmlu
YWw7CisgICAgYm9vbCBpc1JlYWNoaW5nQnVmZmVyZWRBdWRpb0RhdGFMb3dMaW1pdCgpIGZpbmFs
OworICAgIGJvb2wgaGFzQnVmZmVyZWRFbm91Z2hEYXRhKCkgZmluYWw7CisKKyAgICB2b2lkIHB1
bGxBdWRpb0RhdGEoKTsKKworICAgIEdVbmlxdWVQdHI8R3N0QXVkaW9Db252ZXJ0ZXI+IG1fc2Ft
cGxlQ29udmVydGVyOworICAgIEdzdEF1ZGlvSW5mbyBtX2lucHV0U3RyZWFtRGVzY3JpcHRpb247
CisgICAgR3N0QXVkaW9JbmZvIG1fb3V0cHV0U3RyZWFtRGVzY3JpcHRpb247CisKKyAgICBMb2Nr
IG1fYWRhcHRlckxvY2s7CisgICAgR1JlZlB0cjxHc3RBZGFwdGVyPiBtX2FkYXB0ZXIgV1RGX0dV
QVJERURfQllfTE9DSyhtX2FkYXB0ZXJMb2NrKTsKKyAgICBWZWN0b3I8dWludDhfdD4gbV9hdWRp
b0J1ZmZlcjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShM
SUJXRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVh
bS9saWJ3ZWJydGMvZ3N0cmVhbWVyL1JlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZUxpYldlYlJU
Qy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9saWJ3ZWJydGMvZ3N0
cmVhbWVyL1JlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZUxpYldlYlJUQy5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uYzEyNGQ0YjM0NWZhYzVjNjhiMTRmOGY2YTU4OTQ4ZGU2OGVlY2M4YwotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2xpYndlYnJ0Yy9nc3Ry
ZWFtZXIvUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlTGliV2ViUlRDLmNwcApAQCAtMCwwICsx
LDk0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IElnYWxpYSBTLkwuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
LCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIHJlcXVpcmVk
IHRvIGJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgIkFT
IElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
CisgKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUgorICogQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorCisjaWYgVVNFKExJQldFQlJUQykgJiYgVVNFKEdTVFJFQU1FUikKKyNpbmNsdWRlICJS
ZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VMaWJXZWJSVEMuaCIKKworI2luY2x1ZGUgIkdTdHJl
YW1lclZpZGVvRnJhbWVMaWJXZWJSVEMuaCIKKyNpbmNsdWRlICJNZWRpYVNhbXBsZUdTdHJlYW1l
ci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1JlZjxSZWFsdGltZU91dGdvaW5nVmlkZW9T
b3VyY2U+IFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZTo6Y3JlYXRlKFJlZjxNZWRpYVN0cmVh
bVRyYWNrUHJpdmF0ZT4mJiB2aWRlb1NvdXJjZSkKK3sKKyAgICByZXR1cm4gUmVhbHRpbWVPdXRn
b2luZ1ZpZGVvU291cmNlTGliV2ViUlRDOjpjcmVhdGUoV1RGTW92ZSh2aWRlb1NvdXJjZSkpOwor
fQorCitSZWY8UmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlTGliV2ViUlRDPiBSZWFsdGltZU91
dGdvaW5nVmlkZW9Tb3VyY2VMaWJXZWJSVEM6OmNyZWF0ZShSZWY8TWVkaWFTdHJlYW1UcmFja1By
aXZhdGU+JiYgdmlkZW9Tb3VyY2UpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgUmVhbHRp
bWVPdXRnb2luZ1ZpZGVvU291cmNlTGliV2ViUlRDKFdURk1vdmUodmlkZW9Tb3VyY2UpKSk7Cit9
CisKK1JlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZUxpYldlYlJUQzo6UmVhbHRpbWVPdXRnb2lu
Z1ZpZGVvU291cmNlTGliV2ViUlRDKFJlZjxNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZT4mJiB2aWRl
b1NvdXJjZSkKKyAgICA6IFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZShXVEZNb3ZlKHZpZGVv
U291cmNlKSkKK3sKK30KKwordm9pZCBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VMaWJXZWJS
VEM6OnZpZGVvU2FtcGxlQXZhaWxhYmxlKE1lZGlhU2FtcGxlJiBzYW1wbGUpCit7CisgICAgc3dp
dGNoIChzYW1wbGUudmlkZW9Sb3RhdGlvbigpKSB7CisgICAgY2FzZSBNZWRpYVNhbXBsZTo6Vmlk
ZW9Sb3RhdGlvbjo6Tm9uZToKKyAgICAgICAgbV9jdXJyZW50Um90YXRpb24gPSB3ZWJydGM6OmtW
aWRlb1JvdGF0aW9uXzA7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTWVkaWFTYW1wbGU6OlZp
ZGVvUm90YXRpb246OlVwc2lkZURvd246CisgICAgICAgIG1fY3VycmVudFJvdGF0aW9uID0gd2Vi
cnRjOjprVmlkZW9Sb3RhdGlvbl8xODA7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTWVkaWFT
YW1wbGU6OlZpZGVvUm90YXRpb246OlJpZ2h0OgorICAgICAgICBtX2N1cnJlbnRSb3RhdGlvbiA9
IHdlYnJ0Yzo6a1ZpZGVvUm90YXRpb25fOTA7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTWVk
aWFTYW1wbGU6OlZpZGVvUm90YXRpb246OkxlZnQ6CisgICAgICAgIG1fY3VycmVudFJvdGF0aW9u
ID0gd2VicnRjOjprVmlkZW9Sb3RhdGlvbl8yNzA7CisgICAgICAgIGJyZWFrOworICAgIH0KKwor
ICAgIEFTU0VSVChzYW1wbGUucGxhdGZvcm1TYW1wbGUoKS50eXBlID09IFBsYXRmb3JtU2FtcGxl
OjpHU3RyZWFtZXJTYW1wbGVUeXBlKTsKKyAgICBhdXRvJiBtZWRpYVNhbXBsZSA9IHN0YXRpY19j
YXN0PE1lZGlhU2FtcGxlR1N0cmVhbWVyJj4oc2FtcGxlKTsKKyAgICBhdXRvIGZyYW1lQnVmZmVy
ID0gR1N0cmVhbWVyVmlkZW9GcmFtZUxpYldlYlJUQzo6Y3JlYXRlKGdzdF9zYW1wbGVfcmVmKG1l
ZGlhU2FtcGxlLnBsYXRmb3JtU2FtcGxlKCkuc2FtcGxlLmdzdFNhbXBsZSkpOworCisgICAgc2Vu
ZEZyYW1lKFdURk1vdmUoZnJhbWVCdWZmZXIpKTsKK30KKworcnRjOjpzY29wZWRfcmVmcHRyPHdl
YnJ0Yzo6VmlkZW9GcmFtZUJ1ZmZlcj4gUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlTGliV2Vi
UlRDOjpjcmVhdGVCbGFja0ZyYW1lKHNpemVfdCAgd2lkdGgsIHNpemVfdCAgaGVpZ2h0KQorewor
ICAgIEdzdFZpZGVvSW5mbyBpbmZvOworCisgICAgZ3N0X3ZpZGVvX2luZm9fc2V0X2Zvcm1hdCgm
aW5mbywgR1NUX1ZJREVPX0ZPUk1BVF9SR0IsIHdpZHRoLCBoZWlnaHQpOworCisgICAgR1JlZlB0
cjxHc3RCdWZmZXI+IGJ1ZmZlciA9IGFkb3B0R1JlZihnc3RfYnVmZmVyX25ld19hbGxvY2F0ZShu
dWxscHRyLCBpbmZvLnNpemUsIG51bGxwdHIpKTsKKyAgICBHUmVmUHRyPEdzdENhcHM+IGNhcHMg
PSBhZG9wdEdSZWYoZ3N0X3ZpZGVvX2luZm9fdG9fY2FwcygmaW5mbykpOworCisgICAgR3N0TWFw
cGVkQnVmZmVyIG1hcChidWZmZXIuZ2V0KCksIEdTVF9NQVBfV1JJVEUpOworICAgIG1lbXNldCht
YXAuZGF0YSgpLCAwLCBpbmZvLnNpemUpOworCisgICAgcmV0dXJuIEdTdHJlYW1lclZpZGVvRnJh
bWVMaWJXZWJSVEM6OmNyZWF0ZShnc3Rfc2FtcGxlX25ldyhidWZmZXIuZ2V0KCksIGNhcHMuZ2V0
KCksIE5VTEwsIE5VTEwpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYg
Ly8gVVNFKExJQldFQlJUQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21l
ZGlhc3RyZWFtL2xpYndlYnJ0Yy9nc3RyZWFtZXIvUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNl
TGliV2ViUlRDLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9saWJ3ZWJy
dGMvZ3N0cmVhbWVyL1JlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZUxpYldlYlJUQy5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjAwYzUwOWExYmMwODFmNTk0NjAyYWMwMjc3NDhmZGYxMmI1MTMwODQKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9saWJ3ZWJydGMv
Z3N0cmVhbWVyL1JlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZUxpYldlYlJUQy5oCkBAIC0wLDAg
KzEsNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgSWdhbGlhIFMuTC4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgcmVxdWly
ZWQgdG8gYmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyAi
QVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAq
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUgorICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IKKyAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisgKiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisK
KyNpZiBVU0UoTElCV0VCUlRDKSAmJiBVU0UoR1NUUkVBTUVSKQorCisjaW5jbHVkZSAiUmVhbHRp
bWVPdXRnb2luZ1ZpZGVvU291cmNlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3Mg
UmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlTGliV2ViUlRDIGZpbmFsIDogcHVibGljIFJlYWx0
aW1lT3V0Z29pbmdWaWRlb1NvdXJjZSB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxSZWFsdGlt
ZU91dGdvaW5nVmlkZW9Tb3VyY2VMaWJXZWJSVEM+IGNyZWF0ZShSZWY8TWVkaWFTdHJlYW1UcmFj
a1ByaXZhdGU+JiYpOworCitwcml2YXRlOgorICAgIGV4cGxpY2l0IFJlYWx0aW1lT3V0Z29pbmdW
aWRlb1NvdXJjZUxpYldlYlJUQyhSZWY8TWVkaWFTdHJlYW1UcmFja1ByaXZhdGU+JiYpOworCisg
ICAgcnRjOjpzY29wZWRfcmVmcHRyPHdlYnJ0Yzo6VmlkZW9GcmFtZUJ1ZmZlcj4gY3JlYXRlQmxh
Y2tGcmFtZShzaXplX3QsIHNpemVfdCkgZmluYWw7CisKKyAgICAvLyBSZWFsdGltZU1lZGlhU291
cmNlOjpWaWRlb1NhbXBsZU9ic2VydmVyIEFQSQorICAgIHZvaWQgdmlkZW9TYW1wbGVBdmFpbGFi
bGUoTWVkaWFTYW1wbGUmKSBmaW5hbDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwor
I2VuZGlmIC8vIFVTRShMSUJXRUJSVEMpCisKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBi
L1Rvb2xzL0NoYW5nZUxvZwppbmRleCBkMjE1ZDQ0NmNjNjBkYTRjZTdmMDIzN2RiMzIyNWMxZTgx
NmNjZTExLi5lOWQ3ODcxOGQzYWYxZjUxZDkyMjFhZTVkZjJiYjU4NGM4NTNmZGRkIDEwMDY0NAot
LS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIg
QEAKKzIwMjEtMDctMTUgIFBoaWxpcHBlIE5vcm1hbmQgIDxwbm9ybWFuZEBpZ2FsaWEuY29tPgor
CisgICAgICAgIFtHU3RyZWFtZXJdIExpYldlYlJUQyBmaWxlcyBzaG91bGQgYmUgaW4gbGlid2Vi
cnRjL2dzdHJlYW1lcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjI3OTkxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXIucHk6CisKIDIwMjEtMDctMTUg
IEFha2FzaCBKYWluICA8YWFrYXNoX2phaW5AYXBwbGUuY29tPgogCiAgICAgICAgIFtpT1NdVGVz
dFdlYktpdEFQSS5JbkFwcEJyb3dzZXJQcml2YWN5LkFwcEJvdW5kRG9tYWluQWxsb3dzU2Vydmlj
ZVdvcmtlcnMgaXMgZmFpbGluZwpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9z
dHlsZS9jaGVja2VyLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2VyLnB5
CmluZGV4IDMwOTRhMjVjNjA3MzUwYWEwYmRhZTdiNzliZWI3NmE4YmJkYWM4ZDQuLjFkYjJiY2Fh
ZGJiMGI3ODkyZDcxNzRjM2RjMmJiYTM1NTYzZTRiYTUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlci5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5
L3N0eWxlL2NoZWNrZXIucHkKQEAgLTIzOSw4ICsyMzksOCBAQCBfUEFUSF9SVUxFU19TUEVDSUZJ
RVIgPSBbCiAgICAgICBvcy5wYXRoLmpvaW4oJ1NvdXJjZScsICdXZWJDb3JlJywgJ3BsYXRmb3Jt
JywgJ2F1ZGlvJywgJ2dzdHJlYW1lcicsICdXZWJLaXRXZWJBdWRpb1NvdXJjZUdTdHJlYW1lci5j
cHAnKSwKICAgICAgIG9zLnBhdGguam9pbignU291cmNlJywgJ1dlYkNvcmUnLCAncGxhdGZvcm0n
LCAnbWVkaWFzdHJlYW0nLCAnZ3N0cmVhbWVyJywgJ0dTdHJlYW1lck1lZGlhU3RyZWFtU291cmNl
LmgnKSwKICAgICAgIG9zLnBhdGguam9pbignU291cmNlJywgJ1dlYkNvcmUnLCAncGxhdGZvcm0n
LCAnbWVkaWFzdHJlYW0nLCAnZ3N0cmVhbWVyJywgJ0dTdHJlYW1lck1lZGlhU3RyZWFtU291cmNl
LmNwcCcpLAotICAgICAgb3MucGF0aC5qb2luKCdTb3VyY2UnLCAnV2ViQ29yZScsICdwbGF0Zm9y
bScsICdtZWRpYXN0cmVhbScsICdsaWJ3ZWJydGMnLCAnR1N0cmVhbWVyVmlkZW9FbmNvZGVyLmgn
KSwKLSAgICAgIG9zLnBhdGguam9pbignU291cmNlJywgJ1dlYkNvcmUnLCAncGxhdGZvcm0nLCAn
bWVkaWFzdHJlYW0nLCAnbGlid2VicnRjJywgJ0dTdHJlYW1lclZpZGVvRW5jb2Rlci5jcHAnKSwK
KyAgICAgIG9zLnBhdGguam9pbignU291cmNlJywgJ1dlYkNvcmUnLCAncGxhdGZvcm0nLCAnbWVk
aWFzdHJlYW0nLCAnbGlid2VicnRjJywgJ2dzdHJlYW1lcicsICdHU3RyZWFtZXJWaWRlb0VuY29k
ZXIuaCcpLAorICAgICAgb3MucGF0aC5qb2luKCdTb3VyY2UnLCAnV2ViQ29yZScsICdwbGF0Zm9y
bScsICdtZWRpYXN0cmVhbScsICdsaWJ3ZWJydGMnLCAnZ3N0cmVhbWVyJywgJ0dTdHJlYW1lclZp
ZGVvRW5jb2Rlci5jcHAnKSwKICAgICAgIG9zLnBhdGguam9pbignU291cmNlJywgJ1dlYkNvcmUn
LCAncGxhdGZvcm0nLCAnbmV0d29yaycsICdzb3VwJywgJ1Byb3h5UmVzb2x2ZXJTb3VwLmNwcCcp
LAogICAgICAgb3MucGF0aC5qb2luKCdTb3VyY2UnLCAnV2ViQ29yZScsICdwbGF0Zm9ybScsICdu
ZXR3b3JrJywgJ3NvdXAnLCAnUHJveHlSZXNvbHZlclNvdXAuaCcpLAogICAgICAgb3MucGF0aC5q
b2luKCdTb3VyY2UnLCAnV2ViQ29yZScsICdwbGF0Zm9ybScsICduZXR3b3JrJywgJ3NvdXAnLCAn
V2ViS2l0Rm9ybURhdGFJbnB1dFN0cmVhbS5jcHAnKSwK
</data>

          </attachment>
      

    </bug>

</bugzilla>