<?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>94835</bug_id>
          
          <creation_ts>2012-08-23 12:51:54 -0700</creation_ts>
          <short_desc>[chromium] Rename LayerRendererChromium to GL-specific name</short_desc>
          <delta_ts>2012-08-23 13:31:29 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alexandre Elias">aelias</reporter>
          <assigned_to name="Alexandre Elias">aelias</assigned_to>
          <cc>aelias</cc>
    
    <cc>cc-bugs</cc>
    
    <cc>danakj</cc>
    
    <cc>enne</cc>
    
    <cc>jamesr</cc>
    
    <cc>nduca</cc>
    
    <cc>piman</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>703270</commentid>
    <comment_count>0</comment_count>
    <who name="Alexandre Elias">aelias</who>
    <bug_when>2012-08-23 12:51:54 -0700</bug_when>
    <thetext>[chromium] Rename LayerRendererChromium to GL-specific name</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>703275</commentid>
    <comment_count>1</comment_count>
      <attachid>160220</attachid>
    <who name="Alexandre Elias">aelias</who>
    <bug_when>2012-08-23 12:57:15 -0700</bug_when>
    <thetext>Created attachment 160220
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>703305</commentid>
    <comment_count>2</comment_count>
      <attachid>160220</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-08-23 13:31:25 -0700</bug_when>
    <thetext>Comment on attachment 160220
Patch

Clearing flags on attachment: 160220

Committed r126473: &lt;http://trac.webkit.org/changeset/126473&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>703306</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-08-23 13:31:29 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>160220</attachid>
            <date>2012-08-23 12:57:15 -0700</date>
            <delta_ts>2012-08-23 13:31:25 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-94835-20120823125712.patch</filename>
            <type>text/plain</type>
            <size>307524</size>
            <attacher name="Alexandre Elias">aelias</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI2MzYxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggY2Y1NWY1MzRiZjIzM2E4
MzhmZDU1MGY3NmMxZmU1YmY5OWJiNWRiMS4uOWNjMGZiN2FiOTc5MDZlNjM2YjY3MGQwYjBiMTJm
YWMyOWY1NmU4ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE5MSBAQAorMjAxMi0wOC0yMyAgQWxl
eGFuZHJlIEVsaWFzICA8YWVsaWFzQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1d
IFJlbmFtZSBMYXllclJlbmRlcmVyQ2hyb21pdW0gdG8gR0wtc3BlY2lmaWMgbmFtZQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTQ4MzUKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBPdmVyIHRpbWUsIExheWVy
UmVuZGVyZXJDaHJvbWl1bSBoYXMgZXZvbHZlZCB0byBiZSBhIEdMLXNwZWNpZmljCisgICAgICAg
IHN1YmNsYXNzIG9mIENDUmVuZGVyZXIgdGhhdCBoYXMgbm8gYXdhcmVuZXNzIG9mIGxheWVycyAo
YXMgaXQgb3BlcmF0ZXMKKyAgICAgICAgb25seSB3aXRoIGRyYXdRdWFkcykuCisKKyAgICAgICAg
VGhpcyBwYXRjaCByZW5hbWVzIExheWVyUmVuZGVyZXJDaHJvbWl1bSB0byBDQ1JlbmRlcmVyR0ws
IHJlcGxhY2VzIGFsbAorICAgICAgICBpbnN0YW5jZXMgb2YgImxheWVyUmVuZGVyZXIiIHdpdGgg
anVzdCAicmVuZGVyZXIiLCBhbmQgcmVtb3ZlcyBhCisgICAgICAgIGZldyB1bm5lY2Vzc2FyeSBp
bmNsdWRlcyBvZiBMYXllclJlbmRlcmVyQ2hyb21pdW0uaC4KKworICAgICAgICBObyBuZXcgdGVz
dHMgKG5vLW9wIHJlZmFjdG9yaW5nKS4KKworICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyQnJpZGdlLmNwcDoK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1
bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50TGF5ZXJDaHJvbWl1bTo6Y3JlYXRlVGV4
dHVyZVVwZGF0ZXJJZk5lZWRlZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vR2VvbWV0cnlCaW5kaW5nLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9IZWFkc1VwRGlzcGxheUxheWVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SGVhZHNVcERpc3BsYXlMYXllckNocm9taXVtOjp1cGRhdGUpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUxheWVyQ2hyb21pdW06OmNyZWF0ZVRleHR1cmVVcGRhdGVySWZOZWVkZWQpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGV4dHVyZVN1YkltYWdl
LmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Qcm9ncmFtQmluZGlu
Zy5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUmVuZGVyU3VyZmFj
ZUNocm9taXVtLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9TY3JvbGxiYXJMYXllckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbGJhckxheWVyQ2hyb21pdW06OmNyZWF0ZVRleHR1cmVVcGRhdGVySWZOZWVkZWQp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RleHR1cmVDb3BpZXIuY3Bw
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1
bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUaWxlZExheWVyQ2hyb21pdW06OnVwZGF0ZVRpbGVT
aXplQW5kVGlsaW5nT3B0aW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0hlYWRzVXBEaXNwbGF5TGF5ZXJJbXBsLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0lPU3VyZmFjZUxheWVySW1wbC5jcHA6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6c29ydExheWVycyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVl
SG9zdDo6Q0NMYXllclRyZWVIb3N0KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9z
dDo6aW5pdGlhbGl6ZVJlbmRlcmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9z
dDo6ZGVsZXRlQ29udGVudHNUZXh0dXJlc09uSW1wbFRocmVhZCk6CisgICAgICAgIChXZWJDb3Jl
OjpDQ0xheWVyVHJlZUhvc3Q6OmZpbmlzaEFsbFJlbmRlcmluZyk6CisgICAgICAgIChXZWJDb3Jl
OjpDQ0xheWVyVHJlZUhvc3Q6OnJlbmRlcmVyQ2FwYWJpbGl0aWVzKToKKyAgICAgICAgKFdlYkNv
cmU6OkNDTGF5ZXJUcmVlSG9zdDo6aW5pdGlhbGl6ZVJlbmRlcmVySWZOZWVkZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0Ojp1cGRhdGVMYXllcnMpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5oOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyZXJDYXBhYmlsaXRpZXM6OlJlbmRlcmVyQ2FwYWJpbGl0aWVzKToKKyAg
ICAgICAgKENDTGF5ZXJUcmVlSG9zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ0xh
eWVyVHJlZUhvc3RJbXBsOjpjYW5EcmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVl
SG9zdEltcGw6OmNhbGN1bGF0ZVJlbmRlclN1cmZhY2VMYXllckxpc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6Y2FsY3VsYXRlUmVuZGVyUGFzc2VzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OmRyYXdMYXllcnMpOgorICAgICAgICAo
V2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6ZmluaXNoQWxsUmVuZGVyaW5nKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OmlzQ29udGV4dExvc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6cmVuZGVyZXJDYXBhYmlsaXRpZXMpOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6c3dhcEJ1ZmZlcnMpOgorICAg
ICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6cmVhZGJhY2spOgorICAgICAgICAo
V2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6c2V0VmlzaWJsZSk6CisgICAgICAgIChXZWJD
b3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjppbml0aWFsaXplUmVuZGVyZXIpOgorICAgICAgICAo
V2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6c2V0Vmlld3BvcnRTaXplKToKKyAgICAgICAg
KFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OmVuc3VyZVJlbmRlclN1cmZhY2VMYXllckxp
c3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVl
SG9zdEltcGwuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXll
clRyZWVIb3N0SW1wbDo6cmVuZGVyZXIpOgorICAgICAgICAoQ0NMYXllclRyZWVIb3N0SW1wbCk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQcmlvcml0aXplZFRl
eHR1cmUuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUHJp
b3JpdGl6ZWRUZXh0dXJlTWFuYWdlci5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NQcmlvcml0eUNhbGN1bGF0b3IuY3BwOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUHJveHkuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAg
ICAgICAoQ0NQcm94eSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NSZW5kZXJTdXJmYWNlLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ1JlbmRlclN1cmZhY2UuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyZXIuaDoKKyAgICAgICAgKENDUmVu
ZGVyZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVy
ZXJHTC5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwLgorICAgICAgICAoV2ViQ29yZTo6Q0NS
ZW5kZXJlckdMOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3Jl
OjpDQ1JlbmRlcmVyR0w6OkNDUmVuZGVyZXJHTCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1JlbmRl
cmVyR0w6OmluaXRpYWxpemUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZW5kZXJlckdMOjp+Q0NS
ZW5kZXJlckdMKToKKyAgICAgICAgKFdlYkNvcmU6OkNDUmVuZGVyZXJHTDo6Y29udGV4dCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ1JlbmRlcmVyR0w6OmRlYnVnR0xDYWxsKToKKyAgICAgICAgKFdl
YkNvcmU6OkNDUmVuZGVyZXJHTDo6c2V0VmlzaWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1Jl
bmRlcmVyR0w6OnJlbGVhc2VSZW5kZXJQYXNzVGV4dHVyZXMpOgorICAgICAgICAoV2ViQ29yZTo6
Q0NSZW5kZXJlckdMOjp2aWV3cG9ydENoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZW5k
ZXJlckdMOjpjbGVhckZyYW1lYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNDUmVuZGVyZXJH
TDo6YmVnaW5EcmF3aW5nRnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZW5kZXJlckdMOjpk
b05vT3ApOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZW5kZXJlckdMOjpkcmF3UXVhZCk6CisgICAg
ICAgIChXZWJDb3JlOjpDQ1JlbmRlcmVyR0w6OmRyYXdDaGVja2VyYm9hcmRRdWFkKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNDUmVuZGVyZXJHTDo6ZHJhd0RlYnVnQm9yZGVyUXVhZCk6CisgICAgICAg
IChXZWJDb3JlOjphcHBseUZpbHRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZW5kZXJlckdM
OjpkcmF3QmFja2dyb3VuZEZpbHRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZW5kZXJlckdM
OjpkcmF3UmVuZGVyUGFzc1F1YWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZW5kZXJlckdMOjpk
cmF3U29saWRDb2xvclF1YWQpOgorICAgICAgICAoVGlsZVByb2dyYW1Vbmlmb3Jtcyk6CisgICAg
ICAgIChXZWJDb3JlOjp0aWxlVW5pZm9ybUxvY2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkND
UmVuZGVyZXJHTDo6ZHJhd1RpbGVRdWFkKToKKyAgICAgICAgKFdlYkNvcmU6OkNDUmVuZGVyZXJH
TDo6ZHJhd1lVVlZpZGVvUXVhZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1JlbmRlcmVyR0w6OmRy
YXdTdHJlYW1WaWRlb1F1YWQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZVByb2dyYW1CaW5k
aW5nOjpzZXQpOgorICAgICAgICAoVGV4dHVyZVByb2dyYW1CaW5kaW5nKToKKyAgICAgICAgKFdl
YkNvcmU6OlRleFRyYW5zZm9ybVRleHR1cmVQcm9ncmFtQmluZGluZzo6c2V0KToKKyAgICAgICAg
KFRleFRyYW5zZm9ybVRleHR1cmVQcm9ncmFtQmluZGluZyk6CisgICAgICAgIChXZWJDb3JlOjpD
Q1JlbmRlcmVyR0w6OmRyYXdUZXh0dXJlUXVhZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1JlbmRl
cmVyR0w6OmRyYXdJT1N1cmZhY2VRdWFkKToKKyAgICAgICAgKFdlYkNvcmU6OkNDUmVuZGVyZXJH
TDo6ZmluaXNoRHJhd2luZ0ZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkNDUmVuZGVyZXJHTDo6
dG9HTE1hdHJpeCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1JlbmRlcmVyR0w6OnNldFNoYWRlckZs
b2F0UXVhZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1JlbmRlcmVyR0w6OnNldFNoYWRlck9wYWNp
dHkpOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZW5kZXJlckdMOjpkcmF3UXVhZEdlb21ldHJ5KToK
KyAgICAgICAgKFdlYkNvcmU6OkNDUmVuZGVyZXJHTDo6Y29weVRleHR1cmVUb0ZyYW1lYnVmZmVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkNDUmVuZGVyZXJHTDo6ZmluaXNoKToKKyAgICAgICAgKFdl
YkNvcmU6OkNDUmVuZGVyZXJHTDo6c3dhcEJ1ZmZlcnMpOgorICAgICAgICAoV2ViQ29yZTo6Q0NS
ZW5kZXJlckdMOjpvblN3YXBCdWZmZXJzQ29tcGxldGUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NS
ZW5kZXJlckdMOjpvbk1lbW9yeUFsbG9jYXRpb25DaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6
OkNDUmVuZGVyZXJHTDo6b25NZW1vcnlBbGxvY2F0aW9uQ2hhbmdlZE9uSW1wbFRocmVhZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ1JlbmRlcmVyR0w6OmRpc2NhcmRGcmFtZWJ1ZmZlcik6CisgICAg
ICAgIChXZWJDb3JlOjpDQ1JlbmRlcmVyR0w6OmVuc3VyZUZyYW1lYnVmZmVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkNDUmVuZGVyZXJHTDo6b25Db250ZXh0TG9zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpDQ1JlbmRlcmVyR0w6OmdldEZyYW1lYnVmZmVyUGl4ZWxzKToKKyAgICAgICAgKFdlYkNvcmU6
OkNDUmVuZGVyZXJHTDo6Z2V0RnJhbWVidWZmZXJUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6
OkNDUmVuZGVyZXJHTDo6dXNlU2NvcGVkVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1Jl
bmRlcmVyR0w6OmJpbmRGcmFtZWJ1ZmZlclRvT3V0cHV0U3VyZmFjZSk6CisgICAgICAgIChXZWJD
b3JlOjpDQ1JlbmRlcmVyR0w6OmJpbmRGcmFtZWJ1ZmZlclRvVGV4dHVyZSk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ1JlbmRlcmVyR0w6OmVuYWJsZVNjaXNzb3JUZXN0UmVjdCk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ1JlbmRlcmVyR0w6OmRpc2FibGVTY2lzc29yVGVzdCk6CisgICAgICAgIChXZWJD
b3JlOjpDQ1JlbmRlcmVyR0w6OnNldERyYXdWaWV3cG9ydFNpemUpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NSZW5kZXJlckdMOjptYWtlQ29udGV4dEN1cnJlbnQpOgorICAgICAgICAoV2ViQ29yZTo6
Q0NSZW5kZXJlckdMOjppbml0aWFsaXplU2hhcmVkT2JqZWN0cyk6CisgICAgICAgIChXZWJDb3Jl
OjpDQ1JlbmRlcmVyR0w6OnRpbGVDaGVja2VyYm9hcmRQcm9ncmFtKToKKyAgICAgICAgKFdlYkNv
cmU6OkNDUmVuZGVyZXJHTDo6c29saWRDb2xvclByb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6
Q0NSZW5kZXJlckdMOjpyZW5kZXJQYXNzUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1Jl
bmRlcmVyR0w6OnJlbmRlclBhc3NQcm9ncmFtQUEpOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZW5k
ZXJlckdMOjpyZW5kZXJQYXNzTWFza1Byb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZW5k
ZXJlckdMOjpyZW5kZXJQYXNzTWFza1Byb2dyYW1BQSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1Jl
bmRlcmVyR0w6OnRpbGVQcm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6OkNDUmVuZGVyZXJHTDo6
dGlsZVByb2dyYW1PcGFxdWUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZW5kZXJlckdMOjp0aWxl
UHJvZ3JhbUFBKToKKyAgICAgICAgKFdlYkNvcmU6OkNDUmVuZGVyZXJHTDo6dGlsZVByb2dyYW1T
d2l6emxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDUmVuZGVyZXJHTDo6dGlsZVByb2dyYW1Td2l6
emxlT3BhcXVlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDUmVuZGVyZXJHTDo6dGlsZVByb2dyYW1T
d2l6emxlQUEpOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZW5kZXJlckdMOjp0ZXh0dXJlUHJvZ3Jh
bSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1JlbmRlcmVyR0w6OnRleHR1cmVQcm9ncmFtRmxpcCk6
CisgICAgICAgIChXZWJDb3JlOjpDQ1JlbmRlcmVyR0w6OnRleHR1cmVJT1N1cmZhY2VQcm9ncmFt
KToKKyAgICAgICAgKFdlYkNvcmU6OkNDUmVuZGVyZXJHTDo6dmlkZW9ZVVZQcm9ncmFtKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNDUmVuZGVyZXJHTDo6dmlkZW9TdHJlYW1UZXh0dXJlUHJvZ3JhbSk6
CisgICAgICAgIChXZWJDb3JlOjpDQ1JlbmRlcmVyR0w6OmNsZWFudXBTaGFyZWRPYmplY3RzKToK
KyAgICAgICAgKFdlYkNvcmU6OkNDUmVuZGVyZXJHTDo6aXNDb250ZXh0TG9zdCk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJlckdMLmg6IFJlbmFtZWQg
ZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRl
cmVyQ2hyb21pdW0uaC4KKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJDb3JlKToKKyAg
ICAgICAgKENDUmVuZGVyZXJHTCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1JlbmRlcmVyR0w6OnNo
YXJlZEdlb21ldHJ5UXVhZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1JlbmRlcmVyR0w6OnNoYXJl
ZEdlb21ldHJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkNDUmVuZGVyZXJHTDo6aXNGcmFtZWJ1ZmZl
ckRpc2NhcmRlZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NS
ZXNvdXJjZVByb3ZpZGVyLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ1NpbmdsZVRocmVhZFByb3h5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDU2luZ2xl
VGhyZWFkUHJveHk6OkNDU2luZ2xlVGhyZWFkUHJveHkpOgorICAgICAgICAoV2ViQ29yZTo6Q0NT
aW5nbGVUaHJlYWRQcm94eTo6aW5pdGlhbGl6ZVJlbmRlcmVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkNDU2luZ2xlVGhyZWFkUHJveHk6OnJlY3JlYXRlQ29udGV4dCk6CisgICAgICAgIChXZWJDb3Jl
OjpDQ1NpbmdsZVRocmVhZFByb3h5OjpyZW5kZXJlckNhcGFiaWxpdGllcyk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ1NpbmdsZVRocmVhZFByb3h5Ojpkb0NvbW1pdCk6CisgICAgICAgIChXZWJDb3Jl
OjpDQ1NpbmdsZVRocmVhZFByb3h5Ojpmb3JjZVNlcmlhbGl6ZU9uU3dhcEJ1ZmZlcnMpOgorICAg
ICAgICAoV2ViQ29yZTo6Q0NTaW5nbGVUaHJlYWRQcm94eTo6Y29tbWl0QW5kQ29tcG9zaXRlKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NpbmdsZVRocmVhZFBy
b3h5Lmg6CisgICAgICAgIChDQ1NpbmdsZVRocmVhZFByb3h5KToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NvbGlkQ29sb3JMYXllckltcGwuaDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkNDVGhyZWFkUHJveHk6OkNDVGhyZWFkUHJveHkpOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NUaHJlYWRQcm94eTo6Y29tcG9zaXRlQW5kUmVhZGJhY2spOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NUaHJlYWRQcm94eTo6aW5pdGlhbGl6ZVJlbmRlcmVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkNDVGhyZWFkUHJveHk6OnJlY3JlYXRlQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpD
Q1RocmVhZFByb3h5OjpyZW5kZXJlckNhcGFiaWxpdGllcyk6CisgICAgICAgIChXZWJDb3JlOjpD
Q1RocmVhZFByb3h5Ojpmb3JjZVNlcmlhbGl6ZU9uU3dhcEJ1ZmZlcnNPbkltcGxUaHJlYWQpOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NUaHJlYWRQcm94eTo6YmVnaW5GcmFtZSk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ1RocmVhZFByb3h5OjpiZWdpbkZyYW1lQ29tcGxldGVPbkltcGxUaHJlYWQpOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NUaHJlYWRQcm94eTo6c2NoZWR1bGVkQWN0aW9uRHJhd0FuZFN3
YXBJbnRlcm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1RocmVhZFByb3h5Ojppbml0aWFsaXpl
UmVuZGVyZXJPbkltcGxUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NUaHJlYWRQcm94eTo6
cmVjcmVhdGVDb250ZXh0T25JbXBsVGhyZWFkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5Lmg6CisgICAgICAgIChDQ1RocmVhZFByb3h5KToK
KwogMjAxMi0wOC0yMiAgSm9zaHVhIEJlbGwgIDxqc2JlbGxAY2hyb21pdW0ub3JnPgogCiAgICAg
ICAgIEluZGV4ZWREQjogSURCUmVxdWVzdCBjYW4gYmUgZGVzdHJ1Y3RlZCBkdXJpbmcgYWJvcnQK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggMzdlNmNkOWRmMGIwNjRmMzAwN2RiNDFiODVk
NGNiNjYyMTNiMGExMy4uYzIyM2FlN2ZlMmRhMGI0YjJhYjQ5MWU1MWY0NzEzMzY5NzcwZjQ2YyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw5MiBAQAorMjAxMi0wOC0yMyAg
QWxleGFuZHJlIEVsaWFzICA8YWVsaWFzQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21p
dW1dIFJlbmFtZSBMYXllclJlbmRlcmVyQ2hyb21pdW0gdG8gR0wtc3BlY2lmaWMgbmFtZQorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTQ4MzUKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBPdmVyIHRpbWUsIExh
eWVyUmVuZGVyZXJDaHJvbWl1bSBoYXMgZXZvbHZlZCB0byBiZSBhIEdMLXNwZWNpZmljCisgICAg
ICAgIHN1YmNsYXNzIG9mIENDUmVuZGVyZXIgdGhhdCBoYXMgbm8gYXdhcmVuZXNzIG9mIGxheWVy
cyAoYXMgaXQgb3BlcmF0ZXMKKyAgICAgICAgb25seSB3aXRoIGRyYXdRdWFkcykuCisKKyAgICAg
ICAgVGhpcyBwYXRjaCByZW5hbWVzIExheWVyUmVuZGVyZXJDaHJvbWl1bSB0byBDQ1JlbmRlcmVy
R0wsIHJlcGxhY2VzIGFsbAorICAgICAgICBpbnN0YW5jZXMgb2YgImxheWVyUmVuZGVyZXIiIHdp
dGgganVzdCAicmVuZGVyZXIiLCBhbmQgcmVtb3ZlcyBhCisgICAgICAgIGZldyB1bm5lY2Vzc2Fy
eSBpbmNsdWRlcyBvZiBMYXllclJlbmRlcmVyQ2hyb21pdW0uaC4KKworICAgICAgICAqIFdlYktp
dC5neXBpOgorICAgICAgICAqIHRlc3RzL0NDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LmNwcDoKKyAg
ICAgICAgKiB0ZXN0cy9DQ0xheWVyVHJlZUhvc3RUZXN0LmNwcDoKKyAgICAgICAgKFdURjo6Q0NM
YXllclRyZWVIb3N0VGVzdExheWVyT2NjbHVzaW9uOjpiZWdpblRlc3QpOgorICAgICAgICAoV1RG
OjpDQ0xheWVyVHJlZUhvc3RUZXN0TGF5ZXJPY2NsdXNpb25XaXRoRmlsdGVyczo6YmVnaW5UZXN0
KToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdE1hbnlTdXJmYWNlczo6YmVnaW5U
ZXN0KToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdFN1cmZhY2VOb3RBbGxvY2F0
ZWRGb3JMYXllcnNPdXRzaWRlTWVtb3J5TGltaXQ6OmRyYXdMYXllcnNPbkNDVGhyZWFkKToKKyAg
ICAgICAgKiB0ZXN0cy9DQ1JlbmRlcmVyR0xUZXN0LmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vdGVzdHMvTGF5ZXJSZW5kZXJlckNocm9taXVtVGVzdC5jcHAuCisgICAg
ICAgIChGcmFtZUNvdW50aW5nTWVtb3J5QWxsb2NhdGlvblNldHRpbmdDb250ZXh0KToKKyAgICAg
ICAgKEZyYW1lQ291bnRpbmdNZW1vcnlBbGxvY2F0aW9uU2V0dGluZ0NvbnRleHQ6OkZyYW1lQ291
bnRpbmdNZW1vcnlBbGxvY2F0aW9uU2V0dGluZ0NvbnRleHQpOgorICAgICAgICAoRnJhbWVDb3Vu
dGluZ01lbW9yeUFsbG9jYXRpb25TZXR0aW5nQ29udGV4dDo6cHJlcGFyZVRleHR1cmUpOgorICAg
ICAgICAoRnJhbWVDb3VudGluZ01lbW9yeUFsbG9jYXRpb25TZXR0aW5nQ29udGV4dDo6c2V0TWVt
b3J5QWxsb2NhdGlvbkNoYW5nZWRDYWxsYmFja0NIUk9NSVVNKToKKyAgICAgICAgKEZyYW1lQ291
bnRpbmdNZW1vcnlBbGxvY2F0aW9uU2V0dGluZ0NvbnRleHQ6OmdldFN0cmluZyk6CisgICAgICAg
IChGcmFtZUNvdW50aW5nTWVtb3J5QWxsb2NhdGlvblNldHRpbmdDb250ZXh0OjpmcmFtZUNvdW50
KToKKyAgICAgICAgKEZyYW1lQ291bnRpbmdNZW1vcnlBbGxvY2F0aW9uU2V0dGluZ0NvbnRleHQ6
OnNldE1lbW9yeUFsbG9jYXRpb24pOgorICAgICAgICAoRmFrZUNDUmVuZGVyZXJDbGllbnQpOgor
ICAgICAgICAoRmFrZUNDUmVuZGVyZXJDbGllbnQ6OkZha2VDQ1JlbmRlcmVyQ2xpZW50KToKKyAg
ICAgICAgKEZha2VDQ1JlbmRlcmVyQ2xpZW50OjpzZXRGdWxsUm9vdExheWVyRGFtYWdlQ291bnQp
OgorICAgICAgICAoRmFrZUNDUmVuZGVyZXJDbGllbnQ6OnJvb3RSZW5kZXJQYXNzKToKKyAgICAg
ICAgKEZha2VDQ1JlbmRlcmVyQ2xpZW50OjpyZW5kZXJQYXNzZXNJbkRyYXdPcmRlcik6CisgICAg
ICAgIChGYWtlQ0NSZW5kZXJlckNsaWVudDo6cmVuZGVyUGFzc2VzKToKKyAgICAgICAgKEZha2VD
Q1JlbmRlcmVyQ2xpZW50OjptZW1vcnlBbGxvY2F0aW9uTGltaXRCeXRlcyk6CisgICAgICAgIChG
YWtlQ0NSZW5kZXJlckdMKToKKyAgICAgICAgKEZha2VDQ1JlbmRlcmVyR0w6OkZha2VDQ1JlbmRl
cmVyR0wpOgorICAgICAgICAoQ0NSZW5kZXJlckdMVGVzdCk6CisgICAgICAgIChDQ1JlbmRlcmVy
R0xUZXN0OjpDQ1JlbmRlcmVyR0xUZXN0KToKKyAgICAgICAgKENDUmVuZGVyZXJHTFRlc3Q6OlNl
dFVwKToKKyAgICAgICAgKENDUmVuZGVyZXJHTFRlc3Q6OlRlYXJEb3duKToKKyAgICAgICAgKEND
UmVuZGVyZXJHTFRlc3Q6OnN3YXBCdWZmZXJzKToKKyAgICAgICAgKENDUmVuZGVyZXJHTFRlc3Q6
OmNvbnRleHQpOgorICAgICAgICAoVEVTVF9GKToKKyAgICAgICAgKEZvcmJpZFN5bmNocm9ub3Vz
Q2FsbENvbnRleHQpOgorICAgICAgICAoRm9yYmlkU3luY2hyb25vdXNDYWxsQ29udGV4dDo6Rm9y
YmlkU3luY2hyb25vdXNDYWxsQ29udGV4dCk6CisgICAgICAgIChGb3JiaWRTeW5jaHJvbm91c0Nh
bGxDb250ZXh0OjpnZXRBY3RpdmVBdHRyaWIpOgorICAgICAgICAoRm9yYmlkU3luY2hyb25vdXND
YWxsQ29udGV4dDo6Z2V0QWN0aXZlVW5pZm9ybSk6CisgICAgICAgIChGb3JiaWRTeW5jaHJvbm91
c0NhbGxDb250ZXh0OjpnZXRBdHRhY2hlZFNoYWRlcnMpOgorICAgICAgICAoRm9yYmlkU3luY2hy
b25vdXNDYWxsQ29udGV4dDo6Z2V0QXR0cmliTG9jYXRpb24pOgorICAgICAgICAoRm9yYmlkU3lu
Y2hyb25vdXNDYWxsQ29udGV4dDo6Z2V0Qm9vbGVhbnYpOgorICAgICAgICAoRm9yYmlkU3luY2hy
b25vdXNDYWxsQ29udGV4dDo6Z2V0QnVmZmVyUGFyYW1ldGVyaXYpOgorICAgICAgICAoRm9yYmlk
U3luY2hyb25vdXNDYWxsQ29udGV4dDo6Z2V0Q29udGV4dEF0dHJpYnV0ZXMpOgorICAgICAgICAo
Rm9yYmlkU3luY2hyb25vdXNDYWxsQ29udGV4dDo6Z2V0RXJyb3IpOgorICAgICAgICAoRm9yYmlk
U3luY2hyb25vdXNDYWxsQ29udGV4dDo6Z2V0RmxvYXR2KToKKyAgICAgICAgKEZvcmJpZFN5bmNo
cm9ub3VzQ2FsbENvbnRleHQ6OmdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcml2KToK
KyAgICAgICAgKEZvcmJpZFN5bmNocm9ub3VzQ2FsbENvbnRleHQ6OmdldEludGVnZXJ2KToKKyAg
ICAgICAgKEZvcmJpZFN5bmNocm9ub3VzQ2FsbENvbnRleHQ6OmdldFByb2dyYW1pdik6CisgICAg
ICAgIChGb3JiaWRTeW5jaHJvbm91c0NhbGxDb250ZXh0OjpnZXRTaGFkZXJpdik6CisgICAgICAg
IChGb3JiaWRTeW5jaHJvbm91c0NhbGxDb250ZXh0OjpnZXRTdHJpbmcpOgorICAgICAgICAoRm9y
YmlkU3luY2hyb25vdXNDYWxsQ29udGV4dDo6Z2V0UHJvZ3JhbUluZm9Mb2cpOgorICAgICAgICAo
Rm9yYmlkU3luY2hyb25vdXNDYWxsQ29udGV4dDo6Z2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaXYp
OgorICAgICAgICAoRm9yYmlkU3luY2hyb25vdXNDYWxsQ29udGV4dDo6Z2V0U2hhZGVySW5mb0xv
Zyk6CisgICAgICAgIChGb3JiaWRTeW5jaHJvbm91c0NhbGxDb250ZXh0OjpnZXRTaGFkZXJQcmVj
aXNpb25Gb3JtYXQpOgorICAgICAgICAoRm9yYmlkU3luY2hyb25vdXNDYWxsQ29udGV4dDo6Z2V0
U2hhZGVyU291cmNlKToKKyAgICAgICAgKEZvcmJpZFN5bmNocm9ub3VzQ2FsbENvbnRleHQ6Omdl
dFRleFBhcmFtZXRlcmZ2KToKKyAgICAgICAgKEZvcmJpZFN5bmNocm9ub3VzQ2FsbENvbnRleHQ6
OmdldFRleFBhcmFtZXRlcml2KToKKyAgICAgICAgKEZvcmJpZFN5bmNocm9ub3VzQ2FsbENvbnRl
eHQ6OmdldFVuaWZvcm1mdik6CisgICAgICAgIChGb3JiaWRTeW5jaHJvbm91c0NhbGxDb250ZXh0
OjpnZXRVbmlmb3JtaXYpOgorICAgICAgICAoRm9yYmlkU3luY2hyb25vdXNDYWxsQ29udGV4dDo6
Z2V0VW5pZm9ybUxvY2F0aW9uKToKKyAgICAgICAgKEZvcmJpZFN5bmNocm9ub3VzQ2FsbENvbnRl
eHQ6OmdldFZlcnRleEF0dHJpYmZ2KToKKyAgICAgICAgKEZvcmJpZFN5bmNocm9ub3VzQ2FsbENv
bnRleHQ6OmdldFZlcnRleEF0dHJpYml2KToKKyAgICAgICAgKEZvcmJpZFN5bmNocm9ub3VzQ2Fs
bENvbnRleHQ6OmdldFZlcnRleEF0dHJpYk9mZnNldCk6CisgICAgICAgIChURVNUKToKKyAgICAg
ICAgKExvc2VDb250ZXh0T25GaXJzdEdldENvbnRleHQpOgorICAgICAgICAoTG9zZUNvbnRleHRP
bkZpcnN0R2V0Q29udGV4dDo6TG9zZUNvbnRleHRPbkZpcnN0R2V0Q29udGV4dCk6CisgICAgICAg
IChDb250ZXh0VGhhdERvZXNOb3RTdXBwb3J0TWVtb3J5TWFuYWdtZW50RXh0ZW5zaW9ucyk6Cisg
ICAgICAgIChDb250ZXh0VGhhdERvZXNOb3RTdXBwb3J0TWVtb3J5TWFuYWdtZW50RXh0ZW5zaW9u
czo6Q29udGV4dFRoYXREb2VzTm90U3VwcG9ydE1lbW9yeU1hbmFnbWVudEV4dGVuc2lvbnMpOgor
ICAgICAgICAoQ29udGV4dFRoYXREb2VzTm90U3VwcG9ydE1lbW9yeU1hbmFnbWVudEV4dGVuc2lv
bnM6OnByZXBhcmVUZXh0dXJlKToKKyAgICAgICAgKENvbnRleHRUaGF0RG9lc05vdFN1cHBvcnRN
ZW1vcnlNYW5hZ21lbnRFeHRlbnNpb25zOjpzZXRNZW1vcnlBbGxvY2F0aW9uQ2hhbmdlZENhbGxi
YWNrQ0hST01JVU0pOgorICAgICAgICAoQ29udGV4dFRoYXREb2VzTm90U3VwcG9ydE1lbW9yeU1h
bmFnbWVudEV4dGVuc2lvbnM6OmdldFN0cmluZyk6CisgICAgICAgIChDbGVhckNvdW50aW5nQ29u
dGV4dCk6CisgICAgICAgIChDbGVhckNvdW50aW5nQ29udGV4dDo6Q2xlYXJDb3VudGluZ0NvbnRl
eHQpOgorICAgICAgICAoQ2xlYXJDb3VudGluZ0NvbnRleHQ6OmNsZWFyKToKKyAgICAgICAgKENs
ZWFyQ291bnRpbmdDb250ZXh0OjpjbGVhckNvdW50KToKKyAgICAgICAgKiB0ZXN0cy9UaWxlZExh
eWVyQ2hyb21pdW1UZXN0LmNwcDoKKwogMjAxMi0wOC0yMiAgTmlraGlsIEJoYXJnYXZhICA8bmJo
YXJnYXZhQGdvb2dsZS5jb20+CiAKICAgICAgICAgUmVkdWNlIEZvbnQuaCBpbmNsdWRlcyBhY3Jv
c3MgcHJvamVjdCAtLSBpbXByb3ZlcyBSZW5kZXJPYmplY3QuaCBjb21waWxlIHRpbWUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUuZ3lwaQppbmRleCA5ZGMxYWUyODVlMDczYzAyNGFiYTA2NWY3NWM2ZjFiMzg4YTU2N2FlLi5m
MjZjNDg4N2EzZjUyOGUyMzEwNjc1ZGI4MGY2MGY0N2YxNTVlZDJmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBp
CkBAIC04MzQ1LDggKzgzNDUsNiBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0xheWVyQ2hyb21pdW0uY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0xheWVyUGFpbnRlckNocm9taXVtLmgnLAotICAgICAgICAgICAgJ3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAnLAotICAgICAg
ICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5o
JywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRleHR1cmVT
dWJJbWFnZS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xh
eWVyVGV4dHVyZVN1YkltYWdlLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0xheWVyVGV4dHVyZVVwZGF0ZXIuaCcsCkBAIC04NDU2LDYgKzg0NTQsOCBAQAogICAg
ICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUXVhZEN1bGxlci5jcHAn
LAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUXVhZEN1bGxl
ci5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRl
cmVyLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVu
ZGVyZXJHTC5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDUmVuZGVyZXJHTC5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ1JlbmRlclBhc3MuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ1JlbmRlclBhc3MuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJQYXNzRHJhd1F1YWQuY3BwJywKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJCcmlk
Z2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFz
MkRMYXllckJyaWRnZS5jcHAKaW5kZXggZGI1MTdjYWQyNjMzYjhiZjRlNzE1NGI1NzQ4MjI1NzJj
NDY1OTBhYS4uMzhiZmQ2OGJjNjRhYzg3MDMwMmE5YTBmMjFkOTkzMjYzMjhkYWQyMSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRM
YXllckJyaWRnZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vQ2FudmFzMkRMYXllckJyaWRnZS5jcHAKQEAgLTI3LDEwICsyNywxMCBAQAogCiAjaW5j
bHVkZSAiQ2FudmFzMkRMYXllckJyaWRnZS5oIgogCisjaW5jbHVkZSAiQ0NSZW5kZXJlckdMLmgi
IC8vIEZvciB0aGUgR0xDKCkgbWFjcm8uCiAjaW5jbHVkZSAiR3JDb250ZXh0LmgiCiAjaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRFByaXZh
dGUuaCIKLSNpbmNsdWRlICJMYXllclJlbmRlcmVyQ2hyb21pdW0uaCIgLy8gRm9yIEdMQygpIG1h
Y3JvLgogI2luY2x1ZGUgIlRyYWNlRXZlbnQuaCIKICNpbmNsdWRlIDxwdWJsaWMvV2ViQ29tcG9z
aXRvci5oPgogI2luY2x1ZGUgPHB1YmxpYy9XZWJHcmFwaGljc0NvbnRleHQzRC5oPgpAQCAtMTY3
LDQgKzE2NywzIEBAIHVuc2lnbmVkIENhbnZhczJETGF5ZXJCcmlkZ2U6OmJhY2tCdWZmZXJUZXh0
dXJlKCkKIH0KIAogfQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXgg
YThmNTdlMjk2ZDFhZmNiZDU2MDk0OWQxYzUwZmE1NWEzNDM2MzMzZS4uYzJiZjQ1ZWFkNTIzMTY3
OGU1MmE1ODUwMWE4NDc4OGYzZWQ0YjUyZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9t
aXVtLmNwcApAQCAtMTE3LDcgKzExNyw3IEBAIHZvaWQgQ29udGVudExheWVyQ2hyb21pdW06OmNy
ZWF0ZVRleHR1cmVVcGRhdGVySWZOZWVkZWQoKQogICAgICAgICBtX3RleHR1cmVVcGRhdGVyID0g
Qml0bWFwQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6Y3JlYXRlKENvbnRlbnRMYXllclBhaW50
ZXI6OmNyZWF0ZShtX2RlbGVnYXRlKSk7CiAgICAgbV90ZXh0dXJlVXBkYXRlci0+c2V0T3BhcXVl
KG9wYXF1ZSgpKTsKIAotICAgIEdDM0RlbnVtIHRleHR1cmVGb3JtYXQgPSBsYXllclRyZWVIb3N0
KCktPmxheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMoKS5iZXN0VGV4dHVyZUZvcm1hdDsKKyAgICBH
QzNEZW51bSB0ZXh0dXJlRm9ybWF0ID0gbGF5ZXJUcmVlSG9zdCgpLT5yZW5kZXJlckNhcGFiaWxp
dGllcygpLmJlc3RUZXh0dXJlRm9ybWF0OwogICAgIHNldFRleHR1cmVGb3JtYXQodGV4dHVyZUZv
cm1hdCk7CiAgICAgc2V0U2FtcGxlZFRleGVsRm9ybWF0KHRleHR1cmVVcGRhdGVyKCktPnNhbXBs
ZWRUZXhlbEZvcm1hdCh0ZXh0dXJlRm9ybWF0KSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HZW9tZXRyeUJpbmRpbmcuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR2VvbWV0cnlCaW5kaW5nLmNw
cAppbmRleCA2N2FiNDYyNGYxMGFmNTI5MzgzZjcwN2MzMzk0MTA2YmZmZTQ0NWUxLi45NjBlZjk1
OGVjZWZlMTI4ODViNzA2ZWY4ZmM5OGIxNDg4NWZkOGU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HZW9tZXRyeUJpbmRpbmcuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dlb21ldHJ5QmluZGlu
Zy5jcHAKQEAgLTI5LDggKzI5LDggQEAKIAogI2luY2x1ZGUgIkdlb21ldHJ5QmluZGluZy5oIgog
CisjaW5jbHVkZSAiQ0NSZW5kZXJlckdMLmgiIC8vIEZvciB0aGUgR0xDKCkgbWFjcm8uCiAjaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKLSNpbmNsdWRlICJMYXllclJlbmRlcmVyQ2hyb21p
dW0uaCIKICNpbmNsdWRlIDxwdWJsaWMvV2ViR3JhcGhpY3NDb250ZXh0M0QuaD4KIAogbmFtZXNw
YWNlIFdlYkNvcmUgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vSGVhZHNVcERpc3BsYXlMYXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0hlYWRzVXBEaXNwbGF5TGF5ZXJDaHJvbWl1
bS5jcHAKaW5kZXggMmFlNThhYjdiZDg0ZWQyNjkwZGI4N2QzNGM2ZGZkYThlMzRjY2Q1Zi4uZGM3
MWQyNzFjNzY0ODZhYWUzMWI4ZjNmMTdjNmE3ZmJhMzJmYzIyZSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSGVhZHNVcERpc3BsYXlMYXllckNo
cm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9IZWFkc1VwRGlzcGxheUxheWVyQ2hyb21pdW0uY3BwCkBAIC01Miw3ICs1Miw3IEBAIEhlYWRz
VXBEaXNwbGF5TGF5ZXJDaHJvbWl1bTo6fkhlYWRzVXBEaXNwbGF5TGF5ZXJDaHJvbWl1bSgpCiB2
b2lkIEhlYWRzVXBEaXNwbGF5TGF5ZXJDaHJvbWl1bTo6dXBkYXRlKENDVGV4dHVyZVVwZGF0ZVF1
ZXVlJiwgY29uc3QgQ0NPY2NsdXNpb25UcmFja2VyKiwgQ0NSZW5kZXJpbmdTdGF0cyYpCiB7CiAg
ICAgY29uc3QgQ0NMYXllclRyZWVTZXR0aW5ncyYgc2V0dGluZ3MgPSBsYXllclRyZWVIb3N0KCkt
PnNldHRpbmdzKCk7Ci0gICAgaW50IG1heFRleHR1cmVTaXplID0gbGF5ZXJUcmVlSG9zdCgpLT5s
YXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzKCkubWF4VGV4dHVyZVNpemU7CisgICAgaW50IG1heFRl
eHR1cmVTaXplID0gbGF5ZXJUcmVlSG9zdCgpLT5yZW5kZXJlckNhcGFiaWxpdGllcygpLm1heFRl
eHR1cmVTaXplOwogCiAgICAgSW50U2l6ZSBib3VuZHM7CiAgICAgaWYgKHNldHRpbmdzLnNob3dQ
bGF0Zm9ybUxheWVyVHJlZSB8fCBzZXR0aW5ncy5zaG93RGVidWdSZWN0cygpKSB7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUxheWVy
Q2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
SW1hZ2VMYXllckNocm9taXVtLmNwcAppbmRleCBmOGQ4NjlmYWQ1NzczMWNmM2Y3ZTM4YjcwMmNm
YTRjYWI2NTdhNmIwLi4xMDQ5ZTAzZWUwNzYzNzA5M2FmYWMzMjQyM2VlYTU2ZjA3ZGQ3NGEwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFn
ZUxheWVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTE1Nyw3ICsxNTcsNyBAQCB2b2lk
IEltYWdlTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlVGV4dHVyZVVwZGF0ZXJJZk5lZWRlZCgpCiAgICAg
ICAgIHJldHVybjsKIAogICAgIG1fdGV4dHVyZVVwZGF0ZXIgPSBJbWFnZUxheWVyVGV4dHVyZVVw
ZGF0ZXI6OmNyZWF0ZSgpOwotICAgIEdDM0RlbnVtIHRleHR1cmVGb3JtYXQgPSBsYXllclRyZWVI
b3N0KCktPmxheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMoKS5iZXN0VGV4dHVyZUZvcm1hdDsKKyAg
ICBHQzNEZW51bSB0ZXh0dXJlRm9ybWF0ID0gbGF5ZXJUcmVlSG9zdCgpLT5yZW5kZXJlckNhcGFi
aWxpdGllcygpLmJlc3RUZXh0dXJlRm9ybWF0OwogICAgIHNldFRleHR1cmVGb3JtYXQodGV4dHVy
ZUZvcm1hdCk7CiAgICAgc2V0U2FtcGxlZFRleGVsRm9ybWF0KHRleHR1cmVVcGRhdGVyKCktPnNh
bXBsZWRUZXhlbEZvcm1hdCh0ZXh0dXJlRm9ybWF0KSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0u
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5k
ZXJlckNocm9taXVtLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODRmMDBhMWM3
YjljNDQzMGJkMzE1YWMxMzY2OTFjMjEwMmNlZWM3My4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTUz
OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6
Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIK
LSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2Yg
R29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO
RCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBVU0UoQUNDRUxFUkFURURfQ09N
UE9TSVRJTkcpCi0jaW5jbHVkZSAiTGF5ZXJSZW5kZXJlckNocm9taXVtLmgiCi0KLSNpbmNsdWRl
ICJDQ0RhbWFnZVRyYWNrZXIuaCIKLSNpbmNsdWRlICJDQ0xheWVyUXVhZC5oIgotI2luY2x1ZGUg
IkNDTWF0aFV0aWwuaCIKLSNpbmNsdWRlICJDQ1Byb3h5LmgiCi0jaW5jbHVkZSAiQ0NSZW5kZXJQ
YXNzLmgiCi0jaW5jbHVkZSAiQ0NSZW5kZXJTdXJmYWNlRmlsdGVycy5oIgotI2luY2x1ZGUgIkND
U2NvcGVkVGV4dHVyZS5oIgotI2luY2x1ZGUgIkNDU2V0dGluZ3MuaCIKLSNpbmNsdWRlICJDQ1Np
bmdsZVRocmVhZFByb3h5LmgiCi0jaW5jbHVkZSAiQ0NWaWRlb0xheWVySW1wbC5oIgotI2luY2x1
ZGUgIkV4dGVuc2lvbnMzRC5oIgotI2luY2x1ZGUgIkZsb2F0UXVhZC5oIgotI2luY2x1ZGUgIkdl
b21ldHJ5QmluZGluZy5oIgotI2luY2x1ZGUgIkdyVGV4dHVyZS5oIgotI2luY2x1ZGUgIk5vdElt
cGxlbWVudGVkLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1Db2xvci5oIgotI2luY2x1ZGUgIlNrQml0
bWFwLmgiCi0jaW5jbHVkZSAiU2tDb2xvci5oIgotI2luY2x1ZGUgIlRocm90dGxlZFRleHR1cmVV
cGxvYWRlci5oIgotI2luY2x1ZGUgIlRyYWNlRXZlbnQuaCIKLSNpbmNsdWRlICJVbnRocm90dGxl
ZFRleHR1cmVVcGxvYWRlci5oIgotI2luY2x1ZGUgPHB1YmxpYy9XZWJHcmFwaGljc0NvbnRleHQz
RC5oPgotI2luY2x1ZGUgPHB1YmxpYy9XZWJTaGFyZWRHcmFwaGljc0NvbnRleHQzRC5oPgotI2lu
Y2x1ZGUgPHB1YmxpYy9XZWJWaWRlb0ZyYW1lLmg+Ci0jaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1l
Lmg+Ci0jaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJp
bmdIYXNoLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBzdGQ7Ci11c2luZyBXZWJLaXQ6OldlYkdyYXBo
aWNzQ29udGV4dDNEOwotdXNpbmcgV2ViS2l0OjpXZWJHcmFwaGljc01lbW9yeUFsbG9jYXRpb247
Ci11c2luZyBXZWJLaXQ6OldlYlNoYXJlZEdyYXBoaWNzQ29udGV4dDNEOwotdXNpbmcgV2ViS2l0
OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeDsKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1uYW1l
c3BhY2UgewotCi1ib29sIG5lZWRzSU9TdXJmYWNlUmVhZGJhY2tXb3JrYXJvdW5kKCkKLXsKLSNp
ZiBPUyhEQVJXSU4pCi0gICAgcmV0dXJuIHRydWU7Ci0jZWxzZQotICAgIHJldHVybiBmYWxzZTsK
LSNlbmRpZgotfQotCi19IC8vIGFub255bW91cyBuYW1lc3BhY2UKLQotUGFzc093blB0cjxMYXll
clJlbmRlcmVyQ2hyb21pdW0+IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y3JlYXRlKENDUmVuZGVy
ZXJDbGllbnQqIGNsaWVudCwgQ0NSZXNvdXJjZVByb3ZpZGVyKiByZXNvdXJjZVByb3ZpZGVyLCBU
ZXh0dXJlVXBsb2FkZXJPcHRpb24gdGV4dHVyZVVwbG9hZGVyU2V0dGluZykKLXsKLSAgICBPd25Q
dHI8TGF5ZXJSZW5kZXJlckNocm9taXVtPiBsYXllclJlbmRlcmVyKGFkb3B0UHRyKG5ldyBMYXll
clJlbmRlcmVyQ2hyb21pdW0oY2xpZW50LCByZXNvdXJjZVByb3ZpZGVyLCB0ZXh0dXJlVXBsb2Fk
ZXJTZXR0aW5nKSkpOwotICAgIGlmICghbGF5ZXJSZW5kZXJlci0+aW5pdGlhbGl6ZSgpKQotICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIHJldHVybiBsYXllclJlbmRlcmVyLnJlbGVhc2Uo
KTsKLX0KLQotTGF5ZXJSZW5kZXJlckNocm9taXVtOjpMYXllclJlbmRlcmVyQ2hyb21pdW0oQ0NS
ZW5kZXJlckNsaWVudCogY2xpZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgQ0NSZXNvdXJjZVByb3ZpZGVyKiByZXNvdXJjZVByb3ZpZGVyLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGV4dHVyZVVwbG9hZGVyT3B0
aW9uIHRleHR1cmVVcGxvYWRlclNldHRpbmcpCi0gICAgOiBDQ0RpcmVjdFJlbmRlcmVyKGNsaWVu
dCwgcmVzb3VyY2VQcm92aWRlcikKLSAgICAsIG1fb2Zmc2NyZWVuRnJhbWVidWZmZXJJZCgwKQot
ICAgICwgbV9zaGFyZWRHZW9tZXRyeVF1YWQoRmxvYXRSZWN0KC0wLjVmLCAtMC41ZiwgMS4wZiwg
MS4wZikpCi0gICAgLCBtX2NvbnRleHQocmVzb3VyY2VQcm92aWRlci0+Z3JhcGhpY3NDb250ZXh0
M0QoKSkKLSAgICAsIG1faXNWaWV3cG9ydENoYW5nZWQoZmFsc2UpCi0gICAgLCBtX2lzRnJhbWVi
dWZmZXJEaXNjYXJkZWQoZmFsc2UpCi0gICAgLCBtX2lzVXNpbmdCaW5kVW5pZm9ybShmYWxzZSkK
LSAgICAsIG1fdmlzaWJsZSh0cnVlKQotICAgICwgbV90ZXh0dXJlVXBsb2FkZXJTZXR0aW5nKHRl
eHR1cmVVcGxvYWRlclNldHRpbmcpCi17Ci0gICAgQVNTRVJUKG1fY29udGV4dCk7Ci19Ci0KLWJv
b2wgTGF5ZXJSZW5kZXJlckNocm9taXVtOjppbml0aWFsaXplKCkKLXsKLSAgICBpZiAoIW1fY29u
dGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IG1fY29udGV4dC0+c2V0Q29udGV4dExvc3RDYWxsYmFjayh0aGlzKTsKLSAgICBtX2NvbnRleHQt
PnB1c2hHcm91cE1hcmtlckVYVCgiQ29tcG9zaXRvckNvbnRleHQiKTsKLQotICAgIFdlYktpdDo6
V2ViU3RyaW5nIGV4dGVuc2lvbnNXZWJTdHJpbmcgPSBtX2NvbnRleHQtPmdldFN0cmluZyhHcmFw
aGljc0NvbnRleHQzRDo6RVhURU5TSU9OUyk7Ci0gICAgU3RyaW5nIGV4dGVuc2lvbnNTdHJpbmco
ZXh0ZW5zaW9uc1dlYlN0cmluZy5kYXRhKCksIGV4dGVuc2lvbnNXZWJTdHJpbmcubGVuZ3RoKCkp
OwotICAgIFZlY3RvcjxTdHJpbmc+IGV4dGVuc2lvbnNMaXN0OwotICAgIGV4dGVuc2lvbnNTdHJp
bmcuc3BsaXQoJyAnLCBleHRlbnNpb25zTGlzdCk7Ci0gICAgSGFzaFNldDxTdHJpbmc+IGV4dGVu
c2lvbnM7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBleHRlbnNpb25zTGlzdC5zaXplKCk7
ICsraSkKLSAgICAgICAgZXh0ZW5zaW9ucy5hZGQoZXh0ZW5zaW9uc0xpc3RbaV0pOwotCi0gICAg
aWYgKHNldHRpbmdzKCkuYWNjZWxlcmF0ZVBhaW50aW5nICYmIGV4dGVuc2lvbnMuY29udGFpbnMo
IkdMX0VYVF90ZXh0dXJlX2Zvcm1hdF9CR1JBODg4OCIpCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICYmIGV4dGVuc2lvbnMuY29udGFpbnMoIkdMX0VYVF9yZWFkX2Zvcm1h
dF9iZ3JhIikpCi0gICAgICAgIG1fY2FwYWJpbGl0aWVzLnVzaW5nQWNjZWxlcmF0ZWRQYWludGlu
ZyA9IHRydWU7Ci0gICAgZWxzZQotICAgICAgICBtX2NhcGFiaWxpdGllcy51c2luZ0FjY2VsZXJh
dGVkUGFpbnRpbmcgPSBmYWxzZTsKLQotCi0gICAgbV9jYXBhYmlsaXRpZXMuY29udGV4dEhhc0Nh
Y2hlZEZyb250QnVmZmVyID0gZXh0ZW5zaW9ucy5jb250YWlucygiR0xfQ0hST01JVU1fZnJvbnRf
YnVmZmVyX2NhY2hlZCIpOwotCi0gICAgbV9jYXBhYmlsaXRpZXMudXNpbmdQYXJ0aWFsU3dhcCA9
IENDU2V0dGluZ3M6OnBhcnRpYWxTd2FwRW5hYmxlZCgpICYmIGV4dGVuc2lvbnMuY29udGFpbnMo
IkdMX0NIUk9NSVVNX3Bvc3Rfc3ViX2J1ZmZlciIpOwotCi0gICAgLy8gVXNlIHRoZSBzd2FwQnVm
ZmVycyBjYWxsYmFjayBvbmx5IHdpdGggdGhlIHRocmVhZGVkIHByb3h5LgotICAgIGlmIChDQ1By
b3h5OjpoYXNJbXBsVGhyZWFkKCkpCi0gICAgICAgIG1fY2FwYWJpbGl0aWVzLnVzaW5nU3dhcENv
bXBsZXRlQ2FsbGJhY2sgPSBleHRlbnNpb25zLmNvbnRhaW5zKCJHTF9DSFJPTUlVTV9zd2FwYnVm
ZmVyc19jb21wbGV0ZV9jYWxsYmFjayIpOwotICAgIGlmIChtX2NhcGFiaWxpdGllcy51c2luZ1N3
YXBDb21wbGV0ZUNhbGxiYWNrKSB7Ci0gICAgICAgIG1fY29udGV4dC0+c2V0U3dhcEJ1ZmZlcnND
b21wbGV0ZUNhbGxiYWNrQ0hST01JVU0odGhpcyk7Ci0gICAgfQotCi0gICAgbV9jYXBhYmlsaXRp
ZXMudXNpbmdTZXRWaXNpYmlsaXR5ID0gZXh0ZW5zaW9ucy5jb250YWlucygiR0xfQ0hST01JVU1f
c2V0X3Zpc2liaWxpdHkiKTsKLQotICAgIGlmIChleHRlbnNpb25zLmNvbnRhaW5zKCJHTF9DSFJP
TUlVTV9pb3N1cmZhY2UiKSkgewotICAgICAgICBBU1NFUlQoZXh0ZW5zaW9ucy5jb250YWlucygi
R0xfQVJCX3RleHR1cmVfcmVjdGFuZ2xlIikpOwotICAgIH0KLQotICAgIG1fY2FwYWJpbGl0aWVz
LnVzaW5nR3B1TWVtb3J5TWFuYWdlciA9IGV4dGVuc2lvbnMuY29udGFpbnMoIkdMX0NIUk9NSVVN
X2dwdV9tZW1vcnlfbWFuYWdlciIpOwotICAgIGlmIChtX2NhcGFiaWxpdGllcy51c2luZ0dwdU1l
bW9yeU1hbmFnZXIpCi0gICAgICAgIG1fY29udGV4dC0+c2V0TWVtb3J5QWxsb2NhdGlvbkNoYW5n
ZWRDYWxsYmFja0NIUk9NSVVNKHRoaXMpOwotCi0gICAgbV9jYXBhYmlsaXRpZXMudXNpbmdEaXNj
YXJkRnJhbWVidWZmZXIgPSBleHRlbnNpb25zLmNvbnRhaW5zKCJHTF9DSFJPTUlVTV9kaXNjYXJk
X2ZyYW1lYnVmZmVyIik7Ci0KLSAgICBtX2NhcGFiaWxpdGllcy51c2luZ0VnbEltYWdlID0gZXh0
ZW5zaW9ucy5jb250YWlucygiR0xfT0VTX0VHTF9pbWFnZV9leHRlcm5hbCIpOwotCi0gICAgR0xD
KG1fY29udGV4dCwgbV9jb250ZXh0LT5nZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFY
X1RFWFRVUkVfU0laRSwgJm1fY2FwYWJpbGl0aWVzLm1heFRleHR1cmVTaXplKSk7Ci0gICAgbV9j
YXBhYmlsaXRpZXMuYmVzdFRleHR1cmVGb3JtYXQgPSBQbGF0Zm9ybUNvbG9yOjpiZXN0VGV4dHVy
ZUZvcm1hdChtX2NvbnRleHQsIGV4dGVuc2lvbnMuY29udGFpbnMoIkdMX0VYVF90ZXh0dXJlX2Zv
cm1hdF9CR1JBODg4OCIpKTsKLQotICAgIG1faXNVc2luZ0JpbmRVbmlmb3JtID0gZXh0ZW5zaW9u
cy5jb250YWlucygiR0xfQ0hST01JVU1fYmluZF91bmlmb3JtX2xvY2F0aW9uIik7Ci0KLSAgICBp
ZiAoIWluaXRpYWxpemVTaGFyZWRPYmplY3RzKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgIC8vIE1ha2Ugc3VyZSB0aGUgdmlld3BvcnQgYW5kIGNvbnRleHQgZ2V0cyBpbml0aWFsaXpl
ZCwgZXZlbiBpZiBpdCBpcyB0byB6ZXJvLgotICAgIHZpZXdwb3J0Q2hhbmdlZCgpOwotICAgIHJl
dHVybiB0cnVlOwotfQotCi1MYXllclJlbmRlcmVyQ2hyb21pdW06On5MYXllclJlbmRlcmVyQ2hy
b21pdW0oKQotewotICAgIEFTU0VSVChDQ1Byb3h5Ojppc0ltcGxUaHJlYWQoKSk7Ci0gICAgbV9j
b250ZXh0LT5zZXRTd2FwQnVmZmVyc0NvbXBsZXRlQ2FsbGJhY2tDSFJPTUlVTSgwKTsKLSAgICBt
X2NvbnRleHQtPnNldE1lbW9yeUFsbG9jYXRpb25DaGFuZ2VkQ2FsbGJhY2tDSFJPTUlVTSgwKTsK
LSAgICBtX2NvbnRleHQtPnNldENvbnRleHRMb3N0Q2FsbGJhY2soMCk7Ci0gICAgY2xlYW51cFNo
YXJlZE9iamVjdHMoKTsKLX0KLQotV2ViR3JhcGhpY3NDb250ZXh0M0QqIExheWVyUmVuZGVyZXJD
aHJvbWl1bTo6Y29udGV4dCgpCi17Ci0gICAgcmV0dXJuIG1fY29udGV4dDsKLX0KLQotdm9pZCBM
YXllclJlbmRlcmVyQ2hyb21pdW06OmRlYnVnR0xDYWxsKFdlYkdyYXBoaWNzQ29udGV4dDNEKiBj
b250ZXh0LCBjb25zdCBjaGFyKiBjb21tYW5kLCBjb25zdCBjaGFyKiBmaWxlLCBpbnQgbGluZSkK
LXsKLSAgICB1bnNpZ25lZCBsb25nIGVycm9yID0gY29udGV4dC0+Z2V0RXJyb3IoKTsKLSAgICBp
ZiAoZXJyb3IgIT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok5PX0VSUk9SKQotICAgICAgICBMT0dfRVJS
T1IoIkdMIGNvbW1hbmQgZmFpbGVkOiBGaWxlOiAlc1xuXHRMaW5lICVkXG5cdGNvbW1hbmQ6ICVz
LCBlcnJvciAleFxuIiwgZmlsZSwgbGluZSwgY29tbWFuZCwgc3RhdGljX2Nhc3Q8aW50PihlcnJv
cikpOwotfQotCi12b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6c2V0VmlzaWJsZShib29sIHZp
c2libGUpCi17Ci0gICAgaWYgKG1fdmlzaWJsZSA9PSB2aXNpYmxlKQotICAgICAgICByZXR1cm47
Ci0gICAgbV92aXNpYmxlID0gdmlzaWJsZTsKLQotICAgIC8vIFRPRE86IFJlcGxhY2Ugc2V0Vmlz
aWJpbGl0eUNIUk9NSVVNIHdpdGggYW4gZXh0ZW5zaW9uIHRvIGV4cGxpY2l0bHkgbWFuYWdlIGZy
b250L2JhY2tidWZmZXJzCi0gICAgLy8gY3JidWcuY29tLzExNjA0OQotICAgIGlmIChtX2NhcGFi
aWxpdGllcy51c2luZ1NldFZpc2liaWxpdHkpIHsKLSAgICAgICAgbV9jb250ZXh0LT5zZXRWaXNp
YmlsaXR5Q0hST01JVU0odmlzaWJsZSk7Ci0gICAgfQotfQotCi12b2lkIExheWVyUmVuZGVyZXJD
aHJvbWl1bTo6cmVsZWFzZVJlbmRlclBhc3NUZXh0dXJlcygpCi17Ci0gICAgbV9yZW5kZXJQYXNz
VGV4dHVyZXMuY2xlYXIoKTsKLX0KLQotdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnZpZXdw
b3J0Q2hhbmdlZCgpCi17Ci0gICAgbV9pc1ZpZXdwb3J0Q2hhbmdlZCA9IHRydWU7Ci19Ci0KLXZv
aWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpjbGVhckZyYW1lYnVmZmVyKERyYXdpbmdGcmFtZSYg
ZnJhbWUpCi17Ci0gICAgLy8gT24gREVCVUcgYnVpbGRzLCBvcGFxdWUgcmVuZGVyIHBhc3NlcyBh
cmUgY2xlYXJlZCB0byBibHVlIHRvIGVhc2lseSBzZWUgcmVnaW9ucyB0aGF0IHdlcmUgbm90IGRy
YXduIG9uIHRoZSBzY3JlZW4uCi0gICAgaWYgKGZyYW1lLmN1cnJlbnRSZW5kZXJQYXNzLT5oYXNU
cmFuc3BhcmVudEJhY2tncm91bmQoKSkKLSAgICAgICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0
LT5jbGVhckNvbG9yKDAsIDAsIDAsIDApKTsKLSAgICBlbHNlCi0gICAgICAgIEdMQyhtX2NvbnRl
eHQsIG1fY29udGV4dC0+Y2xlYXJDb2xvcigwLCAwLCAxLCAxKSk7Ci0KLSNpZiBkZWZpbmVkKE5E
RUJVRykKLSAgICBpZiAoZnJhbWUuY3VycmVudFJlbmRlclBhc3MtPmhhc1RyYW5zcGFyZW50QmFj
a2dyb3VuZCgpKQotI2VuZGlmCi0gICAgICAgIG1fY29udGV4dC0+Y2xlYXIoR3JhcGhpY3NDb250
ZXh0M0Q6OkNPTE9SX0JVRkZFUl9CSVQpOwotfQotCi12b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1
bTo6YmVnaW5EcmF3aW5nRnJhbWUoRHJhd2luZ0ZyYW1lJiBmcmFtZSkKLXsKLSAgICAvLyBGSVhN
RTogUmVtb3ZlIHRoaXMgb25jZSBmcmFtZWJ1ZmZlciBpcyBhdXRvbWF0aWNhbGx5IHJlY3JlYXRl
ZCBvbiBmaXJzdCB1c2UKLSAgICBlbnN1cmVGcmFtZWJ1ZmZlcigpOwotCi0gICAgaWYgKHZpZXdw
b3J0U2l6ZSgpLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgVFJBQ0VfRVZFTlQw
KCJjYyIsICJMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcnMiKTsKLSAgICBpZiAobV9p
c1ZpZXdwb3J0Q2hhbmdlZCkgewotICAgICAgICAvLyBPbmx5IHJlc2hhcGUgd2hlbiB3ZSBrbm93
IHdlIGFyZSBnb2luZyB0byBkcmF3LiBPdGhlcndpc2UsIHRoZSByZXNoYXBlCi0gICAgICAgIC8v
IGNhbiBsZWF2ZSB0aGUgd2luZG93IGF0IHRoZSB3cm9uZyBzaXplIGlmIHdlIG5ldmVyIGRyYXcg
YW5kIHRoZSBwcm9wZXIKLSAgICAgICAgLy8gdmlld3BvcnQgc2l6ZSBpcyBuZXZlciBzZXQuCi0g
ICAgICAgIG1faXNWaWV3cG9ydENoYW5nZWQgPSBmYWxzZTsKLSAgICAgICAgbV9jb250ZXh0LT5y
ZXNoYXBlKHZpZXdwb3J0V2lkdGgoKSwgdmlld3BvcnRIZWlnaHQoKSk7Ci0gICAgfQotCi0gICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgLy8gQmluZCB0aGUgY29tbW9uIHZlcnRleCBhdHRy
aWJ1dGVzIHVzZWQgZm9yIGRyYXdpbmcgYWxsIHRoZSBsYXllcnMuCi0gICAgbV9zaGFyZWRHZW9t
ZXRyeS0+cHJlcGFyZUZvckRyYXcoKTsKLQotICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+
ZGlzYWJsZShHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfVEVTVCkpOwotICAgIEdMQyhtX2NvbnRl
eHQsIG1fY29udGV4dC0+ZGlzYWJsZShHcmFwaGljc0NvbnRleHQzRDo6Q1VMTF9GQUNFKSk7Ci0g
ICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT5jb2xvck1hc2sodHJ1ZSwgdHJ1ZSwgdHJ1ZSwg
dHJ1ZSkpOwotICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+ZW5hYmxlKEdyYXBoaWNzQ29u
dGV4dDNEOjpCTEVORCkpOwotICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+YmxlbmRGdW5j
KEdyYXBoaWNzQ29udGV4dDNEOjpPTkUsIEdyYXBoaWNzQ29udGV4dDNEOjpPTkVfTUlOVVNfU1JD
X0FMUEhBKSk7Ci19Ci0KLXZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkb05vT3AoKQotewot
ICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29u
dGV4dDNEOjpGUkFNRUJVRkZFUiwgMCkpOwotICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+
Zmx1c2goKSk7Ci19Ci0KLXZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3UXVhZChEcmF3
aW5nRnJhbWUmIGZyYW1lLCBjb25zdCBDQ0RyYXdRdWFkKiBxdWFkKQotewotICAgIGlmIChxdWFk
LT5uZWVkc0JsZW5kaW5nKCkpCi0gICAgICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+ZW5h
YmxlKEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORCkpOwotICAgIGVsc2UKLSAgICAgICAgR0xDKG1f
Y29udGV4dCwgbV9jb250ZXh0LT5kaXNhYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORCkpOwot
Ci0gICAgc3dpdGNoIChxdWFkLT5tYXRlcmlhbCgpKSB7Ci0gICAgY2FzZSBDQ0RyYXdRdWFkOjpJ
bnZhbGlkOgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBDQ0RyYXdRdWFkOjpDaGVja2VyYm9hcmQ6Ci0gICAgICAgIGRyYXdDaGVja2VyYm9h
cmRRdWFkKGZyYW1lLCBDQ0NoZWNrZXJib2FyZERyYXdRdWFkOjptYXRlcmlhbENhc3QocXVhZCkp
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENDRHJhd1F1YWQ6OkRlYnVnQm9yZGVyOgotICAg
ICAgICBkcmF3RGVidWdCb3JkZXJRdWFkKGZyYW1lLCBDQ0RlYnVnQm9yZGVyRHJhd1F1YWQ6Om1h
dGVyaWFsQ2FzdChxdWFkKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ0NEcmF3UXVhZDo6
SU9TdXJmYWNlQ29udGVudDoKLSAgICAgICAgZHJhd0lPU3VyZmFjZVF1YWQoZnJhbWUsIENDSU9T
dXJmYWNlRHJhd1F1YWQ6Om1hdGVyaWFsQ2FzdChxdWFkKSk7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgQ0NEcmF3UXVhZDo6UmVuZGVyUGFzczoKLSAgICAgICAgZHJhd1JlbmRlclBhc3NRdWFk
KGZyYW1lLCBDQ1JlbmRlclBhc3NEcmF3UXVhZDo6bWF0ZXJpYWxDYXN0KHF1YWQpKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBDQ0RyYXdRdWFkOjpTb2xpZENvbG9yOgotICAgICAgICBkcmF3
U29saWRDb2xvclF1YWQoZnJhbWUsIENDU29saWRDb2xvckRyYXdRdWFkOjptYXRlcmlhbENhc3Qo
cXVhZCkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENDRHJhd1F1YWQ6OlN0cmVhbVZpZGVv
Q29udGVudDoKLSAgICAgICAgZHJhd1N0cmVhbVZpZGVvUXVhZChmcmFtZSwgQ0NTdHJlYW1WaWRl
b0RyYXdRdWFkOjptYXRlcmlhbENhc3QocXVhZCkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IENDRHJhd1F1YWQ6OlRleHR1cmVDb250ZW50OgotICAgICAgICBkcmF3VGV4dHVyZVF1YWQoZnJh
bWUsIENDVGV4dHVyZURyYXdRdWFkOjptYXRlcmlhbENhc3QocXVhZCkpOwotICAgICAgICBicmVh
azsKLSAgICBjYXNlIENDRHJhd1F1YWQ6OlRpbGVkQ29udGVudDoKLSAgICAgICAgZHJhd1RpbGVR
dWFkKGZyYW1lLCBDQ1RpbGVEcmF3UXVhZDo6bWF0ZXJpYWxDYXN0KHF1YWQpKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBDQ0RyYXdRdWFkOjpZVVZWaWRlb0NvbnRlbnQ6Ci0gICAgICAgIGRy
YXdZVVZWaWRlb1F1YWQoZnJhbWUsIENDWVVWVmlkZW9EcmF3UXVhZDo6bWF0ZXJpYWxDYXN0KHF1
YWQpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotfQotCi12b2lkIExheWVyUmVuZGVyZXJDaHJv
bWl1bTo6ZHJhd0NoZWNrZXJib2FyZFF1YWQoY29uc3QgRHJhd2luZ0ZyYW1lJiBmcmFtZSwgY29u
c3QgQ0NDaGVja2VyYm9hcmREcmF3UXVhZCogcXVhZCkKLXsKLSAgICBjb25zdCBUaWxlQ2hlY2tl
cmJvYXJkUHJvZ3JhbSogcHJvZ3JhbSA9IHRpbGVDaGVja2VyYm9hcmRQcm9ncmFtKCk7Ci0gICAg
QVNTRVJUKHByb2dyYW0gJiYgcHJvZ3JhbS0+aW5pdGlhbGl6ZWQoKSk7Ci0gICAgR0xDKGNvbnRl
eHQoKSwgY29udGV4dCgpLT51c2VQcm9ncmFtKHByb2dyYW0tPnByb2dyYW0oKSkpOwotCi0gICAg
SW50UmVjdCB0aWxlUmVjdCA9IHF1YWQtPnF1YWRSZWN0KCk7Ci0gICAgZmxvYXQgdGV4T2Zmc2V0
WCA9IHRpbGVSZWN0LngoKTsKLSAgICBmbG9hdCB0ZXhPZmZzZXRZID0gdGlsZVJlY3QueSgpOwot
ICAgIGZsb2F0IHRleFNjYWxlWCA9IHRpbGVSZWN0LndpZHRoKCk7Ci0gICAgZmxvYXQgdGV4U2Nh
bGVZID0gdGlsZVJlY3QuaGVpZ2h0KCk7Ci0gICAgR0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT51
bmlmb3JtNGYocHJvZ3JhbS0+ZnJhZ21lbnRTaGFkZXIoKS50ZXhUcmFuc2Zvcm1Mb2NhdGlvbigp
LCB0ZXhPZmZzZXRYLCB0ZXhPZmZzZXRZLCB0ZXhTY2FsZVgsIHRleFNjYWxlWSkpOwotCi0gICAg
Y29uc3QgaW50IGNoZWNrZXJib2FyZFdpZHRoID0gMTY7Ci0gICAgZmxvYXQgZnJlcXVlbmN5ID0g
MS4wIC8gY2hlY2tlcmJvYXJkV2lkdGg7Ci0KLSAgICBHTEMoY29udGV4dCgpLCBjb250ZXh0KCkt
PnVuaWZvcm0xZihwcm9ncmFtLT5mcmFnbWVudFNoYWRlcigpLmZyZXF1ZW5jeUxvY2F0aW9uKCks
IGZyZXF1ZW5jeSkpOwotCi0gICAgc2V0U2hhZGVyT3BhY2l0eShxdWFkLT5vcGFjaXR5KCksIHBy
b2dyYW0tPmZyYWdtZW50U2hhZGVyKCkuYWxwaGFMb2NhdGlvbigpKTsKLSAgICBkcmF3UXVhZEdl
b21ldHJ5KGZyYW1lLCBxdWFkLT5xdWFkVHJhbnNmb3JtKCksIHF1YWQtPnF1YWRSZWN0KCksIHBy
b2dyYW0tPnZlcnRleFNoYWRlcigpLm1hdHJpeExvY2F0aW9uKCkpOwotfQotCi12b2lkIExheWVy
UmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0RlYnVnQm9yZGVyUXVhZChjb25zdCBEcmF3aW5nRnJhbWUm
IGZyYW1lLCBjb25zdCBDQ0RlYnVnQm9yZGVyRHJhd1F1YWQqIHF1YWQpCi17Ci0gICAgc3RhdGlj
IGZsb2F0IGdsTWF0cml4WzE2XTsKLSAgICBjb25zdCBTb2xpZENvbG9yUHJvZ3JhbSogcHJvZ3Jh
bSA9IHNvbGlkQ29sb3JQcm9ncmFtKCk7Ci0gICAgQVNTRVJUKHByb2dyYW0gJiYgcHJvZ3JhbS0+
aW5pdGlhbGl6ZWQoKSk7Ci0gICAgR0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT51c2VQcm9ncmFt
KHByb2dyYW0tPnByb2dyYW0oKSkpOwotCi0gICAgLy8gVXNlIHRoZSBmdWxsIHF1YWRSZWN0IGZv
ciBkZWJ1ZyBxdWFkcyB0byBub3QgbW92ZSB0aGUgZWRnZXMgYmFzZWQgb24gcGFydGlhbCBzd2Fw
cy4KLSAgICBjb25zdCBJbnRSZWN0JiBsYXllclJlY3QgPSBxdWFkLT5xdWFkUmVjdCgpOwotICAg
IFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IHJlbmRlck1hdHJpeCA9IHF1YWQtPnF1YWRUcmFuc2Zv
cm0oKTsKLSAgICByZW5kZXJNYXRyaXgudHJhbnNsYXRlKDAuNSAqIGxheWVyUmVjdC53aWR0aCgp
ICsgbGF5ZXJSZWN0LngoKSwgMC41ICogbGF5ZXJSZWN0LmhlaWdodCgpICsgbGF5ZXJSZWN0Lnko
KSk7Ci0gICAgcmVuZGVyTWF0cml4LnNjYWxlTm9uVW5pZm9ybShsYXllclJlY3Qud2lkdGgoKSwg
bGF5ZXJSZWN0LmhlaWdodCgpKTsKLSAgICBMYXllclJlbmRlcmVyQ2hyb21pdW06OnRvR0xNYXRy
aXgoJmdsTWF0cml4WzBdLCBmcmFtZS5wcm9qZWN0aW9uTWF0cml4ICogcmVuZGVyTWF0cml4KTsK
LSAgICBHTEMoY29udGV4dCgpLCBjb250ZXh0KCktPnVuaWZvcm1NYXRyaXg0ZnYocHJvZ3JhbS0+
dmVydGV4U2hhZGVyKCkubWF0cml4TG9jYXRpb24oKSwgMSwgZmFsc2UsICZnbE1hdHJpeFswXSkp
OwotCi0gICAgU2tDb2xvciBjb2xvciA9IHF1YWQtPmNvbG9yKCk7Ci0gICAgZmxvYXQgYWxwaGEg
PSBTa0NvbG9yR2V0QShjb2xvcikgLyAyNTUuMDsKLQotICAgIEdMQyhjb250ZXh0KCksIGNvbnRl
eHQoKS0+dW5pZm9ybTRmKHByb2dyYW0tPmZyYWdtZW50U2hhZGVyKCkuY29sb3JMb2NhdGlvbigp
LCAoU2tDb2xvckdldFIoY29sb3IpIC8gMjU1LjApICogYWxwaGEsIChTa0NvbG9yR2V0Ryhjb2xv
cikgLyAyNTUuMCkgKiBhbHBoYSwgKFNrQ29sb3JHZXRCKGNvbG9yKSAvIDI1NS4wKSAqIGFscGhh
LCBhbHBoYSkpOwotCi0gICAgR0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT5saW5lV2lkdGgocXVh
ZC0+d2lkdGgoKSkpOwotCi0gICAgLy8gVGhlIGluZGljZXMgZm9yIHRoZSBsaW5lIGFyZSBzdG9y
ZWQgaW4gdGhlIHNhbWUgYXJyYXkgYXMgdGhlIHRyaWFuZ2xlIGluZGljZXMuCi0gICAgR0xDKGNv
bnRleHQoKSwgY29udGV4dCgpLT5kcmF3RWxlbWVudHMoR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVf
TE9PUCwgNCwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JULCA2ICogc2l6ZW9mKHVu
c2lnbmVkIHNob3J0KSkpOwotfQotCi1zdGF0aWMgaW5saW5lIFNrQml0bWFwIGFwcGx5RmlsdGVy
cyhMYXllclJlbmRlcmVyQ2hyb21pdW0qIGxheWVyUmVuZGVyZXIsIGNvbnN0IFdlYktpdDo6V2Vi
RmlsdGVyT3BlcmF0aW9ucyYgZmlsdGVycywgQ0NTY29wZWRUZXh0dXJlKiBzb3VyY2VUZXh0dXJl
KQotewotICAgIGlmIChmaWx0ZXJzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIFNrQml0bWFw
KCk7Ci0KLSAgICBXZWJHcmFwaGljc0NvbnRleHQzRCogZmlsdGVyQ29udGV4dCA9IENDUHJveHk6
Omhhc0ltcGxUaHJlYWQoKSA/IFdlYlNoYXJlZEdyYXBoaWNzQ29udGV4dDNEOjpjb21wb3NpdG9y
VGhyZWFkQ29udGV4dCgpIDogV2ViU2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q6Om1haW5UaHJlYWRD
b250ZXh0KCk7Ci0gICAgR3JDb250ZXh0KiBmaWx0ZXJHckNvbnRleHQgPSBDQ1Byb3h5OjpoYXNJ
bXBsVGhyZWFkKCkgPyBXZWJTaGFyZWRHcmFwaGljc0NvbnRleHQzRDo6Y29tcG9zaXRvclRocmVh
ZEdyQ29udGV4dCgpIDogV2ViU2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q6Om1haW5UaHJlYWRHckNv
bnRleHQoKTsKLQotICAgIGlmICghZmlsdGVyQ29udGV4dCB8fCAhZmlsdGVyR3JDb250ZXh0KQot
ICAgICAgICByZXR1cm4gU2tCaXRtYXAoKTsKLQotICAgIGxheWVyUmVuZGVyZXItPmNvbnRleHQo
KS0+Zmx1c2goKTsKLQotICAgIENDUmVzb3VyY2VQcm92aWRlcjo6U2NvcGVkV3JpdGVMb2NrR0wg
bG9jayhsYXllclJlbmRlcmVyLT5yZXNvdXJjZVByb3ZpZGVyKCksIHNvdXJjZVRleHR1cmUtPmlk
KCkpOwotICAgIFNrQml0bWFwIHNvdXJjZSA9IENDUmVuZGVyU3VyZmFjZUZpbHRlcnM6OmFwcGx5
KGZpbHRlcnMsIGxvY2sudGV4dHVyZUlkKCksIHNvdXJjZVRleHR1cmUtPnNpemUoKSwgZmlsdGVy
Q29udGV4dCwgZmlsdGVyR3JDb250ZXh0KTsKLSAgICByZXR1cm4gc291cmNlOwotfQotCi1QYXNz
T3duUHRyPENDU2NvcGVkVGV4dHVyZT4gTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3QmFja2dy
b3VuZEZpbHRlcnMoRHJhd2luZ0ZyYW1lJiBmcmFtZSwgY29uc3QgQ0NSZW5kZXJQYXNzRHJhd1F1
YWQqIHF1YWQsIGNvbnN0IFdlYktpdDo6V2ViRmlsdGVyT3BlcmF0aW9ucyYgZmlsdGVycywgY29u
c3QgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIGNvbnRlbnRzRGV2aWNlVHJhbnNmb3JtKQotewot
ICAgIC8vIFRoaXMgbWV0aG9kIGRyYXdzIGEgYmFja2dyb3VuZCBmaWx0ZXIsIHdoaWNoIGFwcGxp
ZXMgYSBmaWx0ZXIgdG8gYW55IHBpeGVscyBiZWhpbmQgdGhlIHF1YWQgYW5kIHNlZW4gdGhyb3Vn
aCBpdHMgYmFja2dyb3VuZC4KLSAgICAvLyBUaGUgYWxnb3JpdGhtIHdvcmtzIGFzIGZvbGxvd3M6
Ci0gICAgLy8gMS4gQ29tcHV0ZSBhIGJvdW5kaW5nIGJveCBhcm91bmQgdGhlIHBpeGVscyB0aGF0
IHdpbGwgYmUgdmlzaWJsZSB0aHJvdWdoIHRoZSBxdWFkLgotICAgIC8vIDIuIFJlYWQgdGhlIHBp
eGVscyBpbiB0aGUgYm91bmRpbmcgYm94IGludG8gYSBidWZmZXIgUi4KLSAgICAvLyAzLiBBcHBs
eSB0aGUgYmFja2dyb3VuZCBmaWx0ZXIgdG8gUiwgc28gdGhhdCBpdCBpcyBhcHBsaWVkIGluIHRo
ZSBwaXhlbHMnIGNvb3JkaW5hdGUgc3BhY2UuCi0gICAgLy8gNC4gQXBwbHkgdGhlIHF1YWQncyBp
bnZlcnNlIHRyYW5zZm9ybSB0byBtYXAgdGhlIHBpeGVscyBpbiBSIGludG8gdGhlIHF1YWQncyBj
b250ZW50IHNwYWNlLiBUaGlzIGltcGxpY2l0bHkKLSAgICAvLyBjbGlwcyBSIGJ5IHRoZSBjb250
ZW50IGJvdW5kcyBvZiB0aGUgcXVhZCBzaW5jZSB0aGUgZGVzdGluYXRpb24gdGV4dHVyZSBoYXMg
Ym91bmRzIG1hdGNoaW5nIHRoZSBxdWFkJ3MgY29udGVudC4KLSAgICAvLyA1LiBEcmF3IHRoZSBi
YWNrZ3JvdW5kIHRleHR1cmUgZm9yIHRoZSBjb250ZW50cyB1c2luZyB0aGUgc2FtZSB0cmFuc2Zv
cm0gYXMgdXNlZCB0byBkcmF3IHRoZSBjb250ZW50cyBpdHNlbGYuIFRoaXMgaXMgZG9uZQotICAg
IC8vIHdpdGhvdXQgYmxlbmRpbmcgdG8gcmVwbGFjZSB0aGUgY3VycmVudCBiYWNrZ3JvdW5kIHBp
eGVscyB3aXRoIHRoZSBuZXcgZmlsdGVyZWQgYmFja2dyb3VuZC4KLSAgICAvLyA2LiBEcmF3IHRo
ZSBjb250ZW50cyBvZiB0aGUgcXVhZCBvdmVyIGRyb3Agb2YgdGhlIG5ldyBiYWNrZ3JvdW5kIHdp
dGggYmxlbmRpbmcsIGFzIHBlciB1c3VhbC4gVGhlIGZpbHRlcmVkIGJhY2tncm91bmQKLSAgICAv
LyBwaXhlbHMgd2lsbCBzaG93IHRocm91Z2ggYW55IG5vbi1vcGFxdWUgcGl4ZWxzIGluIHRoaXMg
ZHJhd3MuCi0gICAgLy8KLSAgICAvLyBQaXhlbCBjb3BpZXMgaW4gdGhpcyBhbGdvcml0aG0gb2Nj
dXIgYXQgc3RlcHMgMiwgMywgNCwgYW5kIDUuCi0KLSAgICAvLyBGSVhNRTogV2hlbiB0aGlzIGFs
Z29yaXRobSBjaGFuZ2VzLCB1cGRhdGUgQ0NMYXllclRyZWVIb3N0Ojpwcmlvcml0aXplVGV4dHVy
ZXMoKSBhY2NvcmRpbmdseS4KLQotICAgIGlmIChmaWx0ZXJzLmlzRW1wdHkoKSkKLSAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0KLSAgICAvLyBGSVhNRTogV2Ugb25seSBhbGxvdyBiYWNrZ3JvdW5k
IGZpbHRlcnMgb24gYW4gb3BhcXVlIHJlbmRlciBzdXJmYWNlIGJlY2F1c2Ugb3RoZXIgc3VyZmFj
ZXMgbWF5IGNvbnRhaW4KLSAgICAvLyB0cmFuc2x1Y2VudCBwaXhlbHMsIGFuZCB0aGUgY29udGVu
dHMgYmVoaW5kIHRob3NlIHRyYW5zbHVjZW50IHBpeGVscyB3b3VsZG4ndCBoYXZlIHRoZSBmaWx0
ZXIgYXBwbGllZC4KLSAgICBpZiAoZnJhbWUuY3VycmVudFJlbmRlclBhc3MtPmhhc1RyYW5zcGFy
ZW50QmFja2dyb3VuZCgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBBU1NFUlQoIWZy
YW1lLmN1cnJlbnRUZXh0dXJlKTsKLQotICAgIC8vIEZJWE1FOiBEbyBhIHNpbmdsZSByZWFkYmFj
ayBmb3IgYm90aCB0aGUgc3VyZmFjZSBhbmQgcmVwbGljYSBhbmQgY2FjaGUgdGhlIGZpbHRlcmVk
IHJlc3VsdHMgKG9uY2UgZmlsdGVyIHRleHR1cmVzIGFyZSBub3QgcmV1c2VkKS4KLSAgICBJbnRS
ZWN0IGRldmljZVJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KENDTWF0aFV0aWw6Om1hcENsaXBwZWRS
ZWN0KGNvbnRlbnRzRGV2aWNlVHJhbnNmb3JtLCBzaGFyZWRHZW9tZXRyeVF1YWQoKS5ib3VuZGlu
Z0JveCgpKSk7Ci0KLSAgICBpbnQgdG9wLCByaWdodCwgYm90dG9tLCBsZWZ0OwotICAgIGZpbHRl
cnMuZ2V0T3V0c2V0cyh0b3AsIHJpZ2h0LCBib3R0b20sIGxlZnQpOwotICAgIGRldmljZVJlY3Qu
bW92ZSgtbGVmdCwgLXRvcCk7Ci0gICAgZGV2aWNlUmVjdC5leHBhbmQobGVmdCArIHJpZ2h0LCB0
b3AgKyBib3R0b20pOwotCi0gICAgZGV2aWNlUmVjdC5pbnRlcnNlY3QoZnJhbWUuY3VycmVudFJl
bmRlclBhc3MtPm91dHB1dFJlY3QoKSk7Ci0KLSAgICBPd25QdHI8Q0NTY29wZWRUZXh0dXJlPiBk
ZXZpY2VCYWNrZ3JvdW5kVGV4dHVyZSA9IENDU2NvcGVkVGV4dHVyZTo6Y3JlYXRlKG1fcmVzb3Vy
Y2VQcm92aWRlcik7Ci0gICAgaWYgKCFnZXRGcmFtZWJ1ZmZlclRleHR1cmUoZGV2aWNlQmFja2dy
b3VuZFRleHR1cmUuZ2V0KCksIGRldmljZVJlY3QpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LQotICAgIFNrQml0bWFwIGZpbHRlcmVkRGV2aWNlQmFja2dyb3VuZCA9IGFwcGx5RmlsdGVycyh0
aGlzLCBmaWx0ZXJzLCBkZXZpY2VCYWNrZ3JvdW5kVGV4dHVyZS5nZXQoKSk7Ci0gICAgaWYgKCFm
aWx0ZXJlZERldmljZUJhY2tncm91bmQuZ2V0VGV4dHVyZSgpKQotICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLQotICAgIEdyVGV4dHVyZSogdGV4dHVyZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8R3JUZXh0
dXJlKj4oZmlsdGVyZWREZXZpY2VCYWNrZ3JvdW5kLmdldFRleHR1cmUoKSk7Ci0gICAgaW50IGZp
bHRlcmVkRGV2aWNlQmFja2dyb3VuZFRleHR1cmVJZCA9IHRleHR1cmUtPmdldFRleHR1cmVIYW5k
bGUoKTsKLQotICAgIE93blB0cjxDQ1Njb3BlZFRleHR1cmU+IGJhY2tncm91bmRUZXh0dXJlID0g
Q0NTY29wZWRUZXh0dXJlOjpjcmVhdGUobV9yZXNvdXJjZVByb3ZpZGVyKTsKLSAgICBpZiAoIWJh
Y2tncm91bmRUZXh0dXJlLT5hbGxvY2F0ZShDQ1JlbmRlcmVyOjpJbXBsUG9vbCwgcXVhZC0+cXVh
ZFJlY3QoKS5zaXplKCksIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCBDQ1Jlc291cmNlUHJvdmlk
ZXI6OlRleHR1cmVVc2FnZUZyYW1lYnVmZmVyKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0K
LSAgICBjb25zdCBDQ1JlbmRlclBhc3MqIHRhcmdldFJlbmRlclBhc3MgPSBmcmFtZS5jdXJyZW50
UmVuZGVyUGFzczsKLSAgICBib29sIHVzaW5nQmFja2dyb3VuZFRleHR1cmUgPSB1c2VTY29wZWRU
ZXh0dXJlKGZyYW1lLCBiYWNrZ3JvdW5kVGV4dHVyZS5nZXQoKSwgcXVhZC0+cXVhZFJlY3QoKSk7
Ci0KLSAgICBpZiAodXNpbmdCYWNrZ3JvdW5kVGV4dHVyZSkgewotICAgICAgICAvLyBDb3B5IHRo
ZSByZWFkYmFjayBwaXhlbHMgZnJvbSBkZXZpY2UgdG8gdGhlIGJhY2tncm91bmQgdGV4dHVyZSBm
b3IgdGhlIHN1cmZhY2UuCi0gICAgICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IGRldmljZVRv
RnJhbWVidWZmZXJUcmFuc2Zvcm07Ci0gICAgICAgIGRldmljZVRvRnJhbWVidWZmZXJUcmFuc2Zv
cm0udHJhbnNsYXRlKHF1YWQtPnF1YWRSZWN0KCkud2lkdGgoKSAvIDIuMCwgcXVhZC0+cXVhZFJl
Y3QoKS5oZWlnaHQoKSAvIDIuMCk7Ci0gICAgICAgIGRldmljZVRvRnJhbWVidWZmZXJUcmFuc2Zv
cm0uc2NhbGUzZChxdWFkLT5xdWFkUmVjdCgpLndpZHRoKCksIHF1YWQtPnF1YWRSZWN0KCkuaGVp
Z2h0KCksIDEpOwotICAgICAgICBkZXZpY2VUb0ZyYW1lYnVmZmVyVHJhbnNmb3JtLm11bHRpcGx5
KGNvbnRlbnRzRGV2aWNlVHJhbnNmb3JtLmludmVyc2UoKSk7Ci0gICAgICAgIGNvcHlUZXh0dXJl
VG9GcmFtZWJ1ZmZlcihmcmFtZSwgZmlsdGVyZWREZXZpY2VCYWNrZ3JvdW5kVGV4dHVyZUlkLCBk
ZXZpY2VSZWN0LCBkZXZpY2VUb0ZyYW1lYnVmZmVyVHJhbnNmb3JtKTsKLSAgICB9Ci0KLSAgICB1
c2VSZW5kZXJQYXNzKGZyYW1lLCB0YXJnZXRSZW5kZXJQYXNzKTsKLQotICAgIGlmICghdXNpbmdC
YWNrZ3JvdW5kVGV4dHVyZSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJuIGJh
Y2tncm91bmRUZXh0dXJlLnJlbGVhc2UoKTsKLX0KLQotdm9pZCBMYXllclJlbmRlcmVyQ2hyb21p
dW06OmRyYXdSZW5kZXJQYXNzUXVhZChEcmF3aW5nRnJhbWUmIGZyYW1lLCBjb25zdCBDQ1JlbmRl
clBhc3NEcmF3UXVhZCogcXVhZCkKLXsKLSAgICBDYWNoZWRUZXh0dXJlKiBjb250ZW50c1RleHR1
cmUgPSBtX3JlbmRlclBhc3NUZXh0dXJlcy5nZXQocXVhZC0+cmVuZGVyUGFzc0lkKCkpOwotICAg
IGlmICghY29udGVudHNUZXh0dXJlIHx8ICFjb250ZW50c1RleHR1cmUtPmlkKCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIGNvbnN0IENDUmVuZGVyUGFzcyogcmVuZGVyUGFzcyA9IGZyYW1lLnJl
bmRlclBhc3Nlc0J5SWQtPmdldChxdWFkLT5yZW5kZXJQYXNzSWQoKSk7Ci0gICAgQVNTRVJUKHJl
bmRlclBhc3MpOwotICAgIGlmICghcmVuZGVyUGFzcykKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
V2ViVHJhbnNmb3JtYXRpb25NYXRyaXggcmVuZGVyTWF0cml4ID0gcXVhZC0+cXVhZFRyYW5zZm9y
bSgpOwotICAgIHJlbmRlck1hdHJpeC50cmFuc2xhdGUoMC41ICogcXVhZC0+cXVhZFJlY3QoKS53
aWR0aCgpICsgcXVhZC0+cXVhZFJlY3QoKS54KCksIDAuNSAqIHF1YWQtPnF1YWRSZWN0KCkuaGVp
Z2h0KCkgKyBxdWFkLT5xdWFkUmVjdCgpLnkoKSk7Ci0gICAgV2ViVHJhbnNmb3JtYXRpb25NYXRy
aXggZGV2aWNlTWF0cml4ID0gcmVuZGVyTWF0cml4OwotICAgIGRldmljZU1hdHJpeC5zY2FsZU5v
blVuaWZvcm0ocXVhZC0+cXVhZFJlY3QoKS53aWR0aCgpLCBxdWFkLT5xdWFkUmVjdCgpLmhlaWdo
dCgpKTsKLSAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBjb250ZW50c0RldmljZVRyYW5zZm9y
bSA9IFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4KGZyYW1lLndpbmRvd01hdHJpeCAqIGZyYW1lLnBy
b2plY3Rpb25NYXRyaXggKiBkZXZpY2VNYXRyaXgpLnRvMmRUcmFuc2Zvcm0oKTsKLQotICAgIC8v
IENhbiBvbmx5IGRyYXcgc3VyZmFjZSBpZiBkZXZpY2UgbWF0cml4IGlzIGludmVydGlibGUuCi0g
ICAgaWYgKCFjb250ZW50c0RldmljZVRyYW5zZm9ybS5pc0ludmVydGlibGUoKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgT3duUHRyPENDU2NvcGVkVGV4dHVyZT4gYmFja2dyb3VuZFRleHR1cmUg
PSBkcmF3QmFja2dyb3VuZEZpbHRlcnMoZnJhbWUsIHF1YWQsIHJlbmRlclBhc3MtPmJhY2tncm91
bmRGaWx0ZXJzKCksIGNvbnRlbnRzRGV2aWNlVHJhbnNmb3JtKTsKLQotICAgIC8vIEZJWE1FOiBD
YWNoZSB0aGlzIHZhbHVlIHNvIHRoYXQgd2UgZG9uJ3QgaGF2ZSB0byBkbyBpdCBmb3IgYm90aCB0
aGUgc3VyZmFjZSBhbmQgaXRzIHJlcGxpY2EuCi0gICAgLy8gQXBwbHkgZmlsdGVycyB0byB0aGUg
Y29udGVudHMgdGV4dHVyZS4KLSAgICBTa0JpdG1hcCBmaWx0ZXJCaXRtYXAgPSBhcHBseUZpbHRl
cnModGhpcywgcmVuZGVyUGFzcy0+ZmlsdGVycygpLCBjb250ZW50c1RleHR1cmUpOwotICAgIE93
blB0cjxDQ1Jlc291cmNlUHJvdmlkZXI6OlNjb3BlZFJlYWRMb2NrR0w+IGNvbnRlbnRzUmVzb3Vy
Y2VMb2NrOwotICAgIHVuc2lnbmVkIGNvbnRlbnRzVGV4dHVyZUlkID0gMDsKLSAgICBpZiAoZmls
dGVyQml0bWFwLmdldFRleHR1cmUoKSkgewotICAgICAgICBHclRleHR1cmUqIHRleHR1cmUgPSBy
ZWludGVycHJldF9jYXN0PEdyVGV4dHVyZSo+KGZpbHRlckJpdG1hcC5nZXRUZXh0dXJlKCkpOwot
ICAgICAgICBjb250ZW50c1RleHR1cmVJZCA9IHRleHR1cmUtPmdldFRleHR1cmVIYW5kbGUoKTsK
LSAgICB9IGVsc2UgewotICAgICAgICBjb250ZW50c1Jlc291cmNlTG9jayA9IGFkb3B0UHRyKG5l
dyBDQ1Jlc291cmNlUHJvdmlkZXI6OlNjb3BlZFJlYWRMb2NrR0wobV9yZXNvdXJjZVByb3ZpZGVy
LCBjb250ZW50c1RleHR1cmUtPmlkKCkpKTsKLSAgICAgICAgY29udGVudHNUZXh0dXJlSWQgPSBj
b250ZW50c1Jlc291cmNlTG9jay0+dGV4dHVyZUlkKCk7Ci0gICAgfQotCi0gICAgLy8gRHJhdyB0
aGUgYmFja2dyb3VuZCB0ZXh0dXJlIGlmIHRoZXJlIGlzIG9uZS4KLSAgICBpZiAoYmFja2dyb3Vu
ZFRleHR1cmUpIHsKLSAgICAgICAgQVNTRVJUKGJhY2tncm91bmRUZXh0dXJlLT5zaXplKCkgPT0g
cXVhZC0+cXVhZFJlY3QoKS5zaXplKCkpOwotICAgICAgICBDQ1Jlc291cmNlUHJvdmlkZXI6OlNj
b3BlZFJlYWRMb2NrR0wgbG9jayhtX3Jlc291cmNlUHJvdmlkZXIsIGJhY2tncm91bmRUZXh0dXJl
LT5pZCgpKTsKLSAgICAgICAgY29weVRleHR1cmVUb0ZyYW1lYnVmZmVyKGZyYW1lLCBsb2NrLnRl
eHR1cmVJZCgpLCBxdWFkLT5xdWFkUmVjdCgpLCBxdWFkLT5xdWFkVHJhbnNmb3JtKCkpOwotICAg
IH0KLQotICAgIGJvb2wgY2xpcHBlZCA9IGZhbHNlOwotICAgIEZsb2F0UXVhZCBkZXZpY2VRdWFk
ID0gQ0NNYXRoVXRpbDo6bWFwUXVhZChjb250ZW50c0RldmljZVRyYW5zZm9ybSwgc2hhcmVkR2Vv
bWV0cnlRdWFkKCksIGNsaXBwZWQpOwotICAgIEFTU0VSVCghY2xpcHBlZCk7Ci0gICAgQ0NMYXll
clF1YWQgZGV2aWNlTGF5ZXJCb3VuZHMgPSBDQ0xheWVyUXVhZChGbG9hdFF1YWQoZGV2aWNlUXVh
ZC5ib3VuZGluZ0JveCgpKSk7Ci0gICAgQ0NMYXllclF1YWQgZGV2aWNlTGF5ZXJFZGdlcyA9IEND
TGF5ZXJRdWFkKGRldmljZVF1YWQpOwotCi0gICAgLy8gVXNlIGFudGktYWxpYXNpbmcgcHJvZ3Jh
bXMgb25seSB3aGVuIG5lY2Vzc2FyeS4KLSAgICBib29sIHVzZUFBID0gKCFkZXZpY2VRdWFkLmlz
UmVjdGlsaW5lYXIoKSB8fCAhZGV2aWNlUXVhZC5ib3VuZGluZ0JveCgpLmlzRXhwcmVzc2libGVB
c0ludFJlY3QoKSk7Ci0gICAgaWYgKHVzZUFBKSB7Ci0gICAgICAgIGRldmljZUxheWVyQm91bmRz
LmluZmxhdGVBbnRpQWxpYXNpbmdEaXN0YW5jZSgpOwotICAgICAgICBkZXZpY2VMYXllckVkZ2Vz
LmluZmxhdGVBbnRpQWxpYXNpbmdEaXN0YW5jZSgpOwotICAgIH0KLQotICAgIE93blB0cjxDQ1Jl
c291cmNlUHJvdmlkZXI6OlNjb3BlZFJlYWRMb2NrR0w+IG1hc2tSZXNvdXJjZUxvY2s7Ci0gICAg
dW5zaWduZWQgbWFza1RleHR1cmVJZCA9IDA7Ci0gICAgaWYgKHF1YWQtPm1hc2tSZXNvdXJjZUlk
KCkpIHsKLSAgICAgICAgbWFza1Jlc291cmNlTG9jayA9IGFkb3B0UHRyKG5ldyBDQ1Jlc291cmNl
UHJvdmlkZXI6OlNjb3BlZFJlYWRMb2NrR0wobV9yZXNvdXJjZVByb3ZpZGVyLCBxdWFkLT5tYXNr
UmVzb3VyY2VJZCgpKSk7Ci0gICAgICAgIG1hc2tUZXh0dXJlSWQgPSBtYXNrUmVzb3VyY2VMb2Nr
LT50ZXh0dXJlSWQoKTsKLSAgICB9Ci0KLSAgICAvLyBGSVhNRTogdXNlIHRoZSBiYWNrZ3JvdW5k
VGV4dHVyZSBhbmQgYmxlbmQgdGhlIGJhY2tncm91bmQgaW4gd2l0aCB0aGlzIGRyYXcgaW5zdGVh
ZCBvZiBoYXZpbmcgYSBzZXBhcmF0ZSBjb3B5IG9mIHRoZSBiYWNrZ3JvdW5kIHRleHR1cmUuCi0K
LSAgICBHTEMoY29udGV4dCgpLCBjb250ZXh0KCktPmFjdGl2ZVRleHR1cmUoR3JhcGhpY3NDb250
ZXh0M0Q6OlRFWFRVUkUwKSk7Ci0gICAgY29udGV4dCgpLT5iaW5kVGV4dHVyZShHcmFwaGljc0Nv
bnRleHQzRDo6VEVYVFVSRV8yRCwgY29udGVudHNUZXh0dXJlSWQpOwotCi0gICAgaW50IHNoYWRl
clF1YWRMb2NhdGlvbiA9IC0xOwotICAgIGludCBzaGFkZXJFZGdlTG9jYXRpb24gPSAtMTsKLSAg
ICBpbnQgc2hhZGVyTWFza1NhbXBsZXJMb2NhdGlvbiA9IC0xOwotICAgIGludCBzaGFkZXJNYXNr
VGV4Q29vcmRTY2FsZUxvY2F0aW9uID0gLTE7Ci0gICAgaW50IHNoYWRlck1hc2tUZXhDb29yZE9m
ZnNldExvY2F0aW9uID0gLTE7Ci0gICAgaW50IHNoYWRlck1hdHJpeExvY2F0aW9uID0gLTE7Ci0g
ICAgaW50IHNoYWRlckFscGhhTG9jYXRpb24gPSAtMTsKLSAgICBpZiAodXNlQUEgJiYgbWFza1Rl
eHR1cmVJZCkgewotICAgICAgICBjb25zdCBSZW5kZXJQYXNzTWFza1Byb2dyYW1BQSogcHJvZ3Jh
bSA9IHJlbmRlclBhc3NNYXNrUHJvZ3JhbUFBKCk7Ci0gICAgICAgIEdMQyhjb250ZXh0KCksIGNv
bnRleHQoKS0+dXNlUHJvZ3JhbShwcm9ncmFtLT5wcm9ncmFtKCkpKTsKLSAgICAgICAgR0xDKGNv
bnRleHQoKSwgY29udGV4dCgpLT51bmlmb3JtMWkocHJvZ3JhbS0+ZnJhZ21lbnRTaGFkZXIoKS5z
YW1wbGVyTG9jYXRpb24oKSwgMCkpOwotCi0gICAgICAgIHNoYWRlclF1YWRMb2NhdGlvbiA9IHBy
b2dyYW0tPnZlcnRleFNoYWRlcigpLnBvaW50TG9jYXRpb24oKTsKLSAgICAgICAgc2hhZGVyRWRn
ZUxvY2F0aW9uID0gcHJvZ3JhbS0+ZnJhZ21lbnRTaGFkZXIoKS5lZGdlTG9jYXRpb24oKTsKLSAg
ICAgICAgc2hhZGVyTWFza1NhbXBsZXJMb2NhdGlvbiA9IHByb2dyYW0tPmZyYWdtZW50U2hhZGVy
KCkubWFza1NhbXBsZXJMb2NhdGlvbigpOwotICAgICAgICBzaGFkZXJNYXNrVGV4Q29vcmRTY2Fs
ZUxvY2F0aW9uID0gcHJvZ3JhbS0+ZnJhZ21lbnRTaGFkZXIoKS5tYXNrVGV4Q29vcmRTY2FsZUxv
Y2F0aW9uKCk7Ci0gICAgICAgIHNoYWRlck1hc2tUZXhDb29yZE9mZnNldExvY2F0aW9uID0gcHJv
Z3JhbS0+ZnJhZ21lbnRTaGFkZXIoKS5tYXNrVGV4Q29vcmRPZmZzZXRMb2NhdGlvbigpOwotICAg
ICAgICBzaGFkZXJNYXRyaXhMb2NhdGlvbiA9IHByb2dyYW0tPnZlcnRleFNoYWRlcigpLm1hdHJp
eExvY2F0aW9uKCk7Ci0gICAgICAgIHNoYWRlckFscGhhTG9jYXRpb24gPSBwcm9ncmFtLT5mcmFn
bWVudFNoYWRlcigpLmFscGhhTG9jYXRpb24oKTsKLSAgICB9IGVsc2UgaWYgKCF1c2VBQSAmJiBt
YXNrVGV4dHVyZUlkKSB7Ci0gICAgICAgIGNvbnN0IFJlbmRlclBhc3NNYXNrUHJvZ3JhbSogcHJv
Z3JhbSA9IHJlbmRlclBhc3NNYXNrUHJvZ3JhbSgpOwotICAgICAgICBHTEMoY29udGV4dCgpLCBj
b250ZXh0KCktPnVzZVByb2dyYW0ocHJvZ3JhbS0+cHJvZ3JhbSgpKSk7Ci0gICAgICAgIEdMQyhj
b250ZXh0KCksIGNvbnRleHQoKS0+dW5pZm9ybTFpKHByb2dyYW0tPmZyYWdtZW50U2hhZGVyKCku
c2FtcGxlckxvY2F0aW9uKCksIDApKTsKLQotICAgICAgICBzaGFkZXJNYXNrU2FtcGxlckxvY2F0
aW9uID0gcHJvZ3JhbS0+ZnJhZ21lbnRTaGFkZXIoKS5tYXNrU2FtcGxlckxvY2F0aW9uKCk7Ci0g
ICAgICAgIHNoYWRlck1hc2tUZXhDb29yZFNjYWxlTG9jYXRpb24gPSBwcm9ncmFtLT5mcmFnbWVu
dFNoYWRlcigpLm1hc2tUZXhDb29yZFNjYWxlTG9jYXRpb24oKTsKLSAgICAgICAgc2hhZGVyTWFz
a1RleENvb3JkT2Zmc2V0TG9jYXRpb24gPSBwcm9ncmFtLT5mcmFnbWVudFNoYWRlcigpLm1hc2tU
ZXhDb29yZE9mZnNldExvY2F0aW9uKCk7Ci0gICAgICAgIHNoYWRlck1hdHJpeExvY2F0aW9uID0g
cHJvZ3JhbS0+dmVydGV4U2hhZGVyKCkubWF0cml4TG9jYXRpb24oKTsKLSAgICAgICAgc2hhZGVy
QWxwaGFMb2NhdGlvbiA9IHByb2dyYW0tPmZyYWdtZW50U2hhZGVyKCkuYWxwaGFMb2NhdGlvbigp
OwotICAgIH0gZWxzZSBpZiAodXNlQUEgJiYgIW1hc2tUZXh0dXJlSWQpIHsKLSAgICAgICAgY29u
c3QgUmVuZGVyUGFzc1Byb2dyYW1BQSogcHJvZ3JhbSA9IHJlbmRlclBhc3NQcm9ncmFtQUEoKTsK
LSAgICAgICAgR0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT51c2VQcm9ncmFtKHByb2dyYW0tPnBy
b2dyYW0oKSkpOwotICAgICAgICBHTEMoY29udGV4dCgpLCBjb250ZXh0KCktPnVuaWZvcm0xaShw
cm9ncmFtLT5mcmFnbWVudFNoYWRlcigpLnNhbXBsZXJMb2NhdGlvbigpLCAwKSk7Ci0KLSAgICAg
ICAgc2hhZGVyUXVhZExvY2F0aW9uID0gcHJvZ3JhbS0+dmVydGV4U2hhZGVyKCkucG9pbnRMb2Nh
dGlvbigpOwotICAgICAgICBzaGFkZXJFZGdlTG9jYXRpb24gPSBwcm9ncmFtLT5mcmFnbWVudFNo
YWRlcigpLmVkZ2VMb2NhdGlvbigpOwotICAgICAgICBzaGFkZXJNYXRyaXhMb2NhdGlvbiA9IHBy
b2dyYW0tPnZlcnRleFNoYWRlcigpLm1hdHJpeExvY2F0aW9uKCk7Ci0gICAgICAgIHNoYWRlckFs
cGhhTG9jYXRpb24gPSBwcm9ncmFtLT5mcmFnbWVudFNoYWRlcigpLmFscGhhTG9jYXRpb24oKTsK
LSAgICB9IGVsc2UgewotICAgICAgICBjb25zdCBSZW5kZXJQYXNzUHJvZ3JhbSogcHJvZ3JhbSA9
IHJlbmRlclBhc3NQcm9ncmFtKCk7Ci0gICAgICAgIEdMQyhjb250ZXh0KCksIGNvbnRleHQoKS0+
dXNlUHJvZ3JhbShwcm9ncmFtLT5wcm9ncmFtKCkpKTsKLSAgICAgICAgR0xDKGNvbnRleHQoKSwg
Y29udGV4dCgpLT51bmlmb3JtMWkocHJvZ3JhbS0+ZnJhZ21lbnRTaGFkZXIoKS5zYW1wbGVyTG9j
YXRpb24oKSwgMCkpOwotCi0gICAgICAgIHNoYWRlck1hdHJpeExvY2F0aW9uID0gcHJvZ3JhbS0+
dmVydGV4U2hhZGVyKCkubWF0cml4TG9jYXRpb24oKTsKLSAgICAgICAgc2hhZGVyQWxwaGFMb2Nh
dGlvbiA9IHByb2dyYW0tPmZyYWdtZW50U2hhZGVyKCkuYWxwaGFMb2NhdGlvbigpOwotICAgIH0K
LQotICAgIGlmIChzaGFkZXJNYXNrU2FtcGxlckxvY2F0aW9uICE9IC0xKSB7Ci0gICAgICAgIEFT
U0VSVChzaGFkZXJNYXNrVGV4Q29vcmRTY2FsZUxvY2F0aW9uICE9IDEpOwotICAgICAgICBBU1NF
UlQoc2hhZGVyTWFza1RleENvb3JkT2Zmc2V0TG9jYXRpb24gIT0gMSk7Ci0gICAgICAgIEdMQyhj
b250ZXh0KCksIGNvbnRleHQoKS0+YWN0aXZlVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVY
VFVSRTEpKTsKLSAgICAgICAgR0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT51bmlmb3JtMWkoc2hh
ZGVyTWFza1NhbXBsZXJMb2NhdGlvbiwgMSkpOwotICAgICAgICBHTEMoY29udGV4dCgpLCBjb250
ZXh0KCktPnVuaWZvcm0yZihzaGFkZXJNYXNrVGV4Q29vcmRTY2FsZUxvY2F0aW9uLCBxdWFkLT5t
YXNrVGV4Q29vcmRTY2FsZVgoKSwgcXVhZC0+bWFza1RleENvb3JkU2NhbGVZKCkpKTsKLSAgICAg
ICAgR0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT51bmlmb3JtMmYoc2hhZGVyTWFza1RleENvb3Jk
T2Zmc2V0TG9jYXRpb24sIHF1YWQtPm1hc2tUZXhDb29yZE9mZnNldFgoKSwgcXVhZC0+bWFza1Rl
eENvb3JkT2Zmc2V0WSgpKSk7Ci0gICAgICAgIGNvbnRleHQoKS0+YmluZFRleHR1cmUoR3JhcGhp
Y3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIG1hc2tUZXh0dXJlSWQpOwotICAgICAgICBHTEMoY29u
dGV4dCgpLCBjb250ZXh0KCktPmFjdGl2ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRV
UkUwKSk7Ci0gICAgfQotCi0gICAgaWYgKHNoYWRlckVkZ2VMb2NhdGlvbiAhPSAtMSkgewotICAg
ICAgICBmbG9hdCBlZGdlWzI0XTsKLSAgICAgICAgZGV2aWNlTGF5ZXJFZGdlcy50b0Zsb2F0QXJy
YXkoZWRnZSk7Ci0gICAgICAgIGRldmljZUxheWVyQm91bmRzLnRvRmxvYXRBcnJheSgmZWRnZVsx
Ml0pOwotICAgICAgICBHTEMoY29udGV4dCgpLCBjb250ZXh0KCktPnVuaWZvcm0zZnYoc2hhZGVy
RWRnZUxvY2F0aW9uLCA4LCBlZGdlKSk7Ci0gICAgfQotCi0gICAgLy8gTWFwIGRldmljZSBzcGFj
ZSBxdWFkIHRvIHN1cmZhY2Ugc3BhY2UuIGNvbnRlbnRzRGV2aWNlVHJhbnNmb3JtIGhhcyBubyAz
ZCBjb21wb25lbnQgc2luY2UgaXQgd2FzIGdlbmVyYXRlZCB3aXRoIHRvMmRUcmFuc2Zvcm0oKSBz
byB3ZSBkb24ndCBuZWVkIHRvIHByb2plY3QuCi0gICAgRmxvYXRRdWFkIHN1cmZhY2VRdWFkID0g
Q0NNYXRoVXRpbDo6bWFwUXVhZChjb250ZW50c0RldmljZVRyYW5zZm9ybS5pbnZlcnNlKCksIGRl
dmljZUxheWVyRWRnZXMuZmxvYXRRdWFkKCksIGNsaXBwZWQpOwotICAgIEFTU0VSVCghY2xpcHBl
ZCk7Ci0KLSAgICBzZXRTaGFkZXJPcGFjaXR5KHF1YWQtPm9wYWNpdHkoKSwgc2hhZGVyQWxwaGFM
b2NhdGlvbik7Ci0gICAgc2V0U2hhZGVyRmxvYXRRdWFkKHN1cmZhY2VRdWFkLCBzaGFkZXJRdWFk
TG9jYXRpb24pOwotICAgIGRyYXdRdWFkR2VvbWV0cnkoZnJhbWUsIHF1YWQtPnF1YWRUcmFuc2Zv
cm0oKSwgcXVhZC0+cXVhZFJlY3QoKSwgc2hhZGVyTWF0cml4TG9jYXRpb24pOwotfQotCi12b2lk
IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd1NvbGlkQ29sb3JRdWFkKGNvbnN0IERyYXdpbmdG
cmFtZSYgZnJhbWUsIGNvbnN0IENDU29saWRDb2xvckRyYXdRdWFkKiBxdWFkKQotewotICAgIGNv
bnN0IFNvbGlkQ29sb3JQcm9ncmFtKiBwcm9ncmFtID0gc29saWRDb2xvclByb2dyYW0oKTsKLSAg
ICBHTEMoY29udGV4dCgpLCBjb250ZXh0KCktPnVzZVByb2dyYW0ocHJvZ3JhbS0+cHJvZ3JhbSgp
KSk7Ci0KLSAgICBTa0NvbG9yIGNvbG9yID0gcXVhZC0+Y29sb3IoKTsKLSAgICBmbG9hdCBvcGFj
aXR5ID0gcXVhZC0+b3BhY2l0eSgpOwotICAgIGZsb2F0IGFscGhhID0gKFNrQ29sb3JHZXRBKGNv
bG9yKSAvIDI1NS4wKSAqIG9wYWNpdHk7Ci0KLSAgICBHTEMoY29udGV4dCgpLCBjb250ZXh0KCkt
PnVuaWZvcm00Zihwcm9ncmFtLT5mcmFnbWVudFNoYWRlcigpLmNvbG9yTG9jYXRpb24oKSwgKFNr
Q29sb3JHZXRSKGNvbG9yKSAvIDI1NS4wKSAqIGFscGhhLCAoU2tDb2xvckdldEcoY29sb3IpIC8g
MjU1LjApICogYWxwaGEsIChTa0NvbG9yR2V0Qihjb2xvcikgLyAyNTUuMCkgKiBhbHBoYSwgYWxw
aGEpKTsKLQotICAgIGRyYXdRdWFkR2VvbWV0cnkoZnJhbWUsIHF1YWQtPnF1YWRUcmFuc2Zvcm0o
KSwgcXVhZC0+cXVhZFJlY3QoKSwgcHJvZ3JhbS0+dmVydGV4U2hhZGVyKCkubWF0cml4TG9jYXRp
b24oKSk7Ci19Ci0KLXN0cnVjdCBUaWxlUHJvZ3JhbVVuaWZvcm1zIHsKLSAgICB1bnNpZ25lZCBw
cm9ncmFtOwotICAgIHVuc2lnbmVkIHNhbXBsZXJMb2NhdGlvbjsKLSAgICB1bnNpZ25lZCB2ZXJ0
ZXhUZXhUcmFuc2Zvcm1Mb2NhdGlvbjsKLSAgICB1bnNpZ25lZCBmcmFnbWVudFRleFRyYW5zZm9y
bUxvY2F0aW9uOwotICAgIHVuc2lnbmVkIGVkZ2VMb2NhdGlvbjsKLSAgICB1bnNpZ25lZCBtYXRy
aXhMb2NhdGlvbjsKLSAgICB1bnNpZ25lZCBhbHBoYUxvY2F0aW9uOwotICAgIHVuc2lnbmVkIHBv
aW50TG9jYXRpb247Ci19OwotCi10ZW1wbGF0ZTxjbGFzcyBUPgotc3RhdGljIHZvaWQgdGlsZVVu
aWZvcm1Mb2NhdGlvbihUIHByb2dyYW0sIFRpbGVQcm9ncmFtVW5pZm9ybXMmIHVuaWZvcm1zKQot
ewotICAgIHVuaWZvcm1zLnByb2dyYW0gPSBwcm9ncmFtLT5wcm9ncmFtKCk7Ci0gICAgdW5pZm9y
bXMudmVydGV4VGV4VHJhbnNmb3JtTG9jYXRpb24gPSBwcm9ncmFtLT52ZXJ0ZXhTaGFkZXIoKS52
ZXJ0ZXhUZXhUcmFuc2Zvcm1Mb2NhdGlvbigpOwotICAgIHVuaWZvcm1zLm1hdHJpeExvY2F0aW9u
ID0gcHJvZ3JhbS0+dmVydGV4U2hhZGVyKCkubWF0cml4TG9jYXRpb24oKTsKLSAgICB1bmlmb3Jt
cy5wb2ludExvY2F0aW9uID0gcHJvZ3JhbS0+dmVydGV4U2hhZGVyKCkucG9pbnRMb2NhdGlvbigp
OwotCi0gICAgdW5pZm9ybXMuc2FtcGxlckxvY2F0aW9uID0gcHJvZ3JhbS0+ZnJhZ21lbnRTaGFk
ZXIoKS5zYW1wbGVyTG9jYXRpb24oKTsKLSAgICB1bmlmb3Jtcy5hbHBoYUxvY2F0aW9uID0gcHJv
Z3JhbS0+ZnJhZ21lbnRTaGFkZXIoKS5hbHBoYUxvY2F0aW9uKCk7Ci0gICAgdW5pZm9ybXMuZnJh
Z21lbnRUZXhUcmFuc2Zvcm1Mb2NhdGlvbiA9IHByb2dyYW0tPmZyYWdtZW50U2hhZGVyKCkuZnJh
Z21lbnRUZXhUcmFuc2Zvcm1Mb2NhdGlvbigpOwotICAgIHVuaWZvcm1zLmVkZ2VMb2NhdGlvbiA9
IHByb2dyYW0tPmZyYWdtZW50U2hhZGVyKCkuZWRnZUxvY2F0aW9uKCk7Ci19Ci0KLXZvaWQgTGF5
ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3VGlsZVF1YWQoY29uc3QgRHJhd2luZ0ZyYW1lJiBmcmFt
ZSwgY29uc3QgQ0NUaWxlRHJhd1F1YWQqIHF1YWQpCi17Ci0gICAgSW50UmVjdCB0aWxlUmVjdCA9
IHF1YWQtPnF1YWRWaXNpYmxlUmVjdCgpOwotCi0gICAgRmxvYXRSZWN0IGNsYW1wUmVjdCh0aWxl
UmVjdCk7Ci0gICAgLy8gQ2xhbXAgdGV4dHVyZSBjb29yZGluYXRlcyB0byBhdm9pZCBzYW1wbGlu
ZyBvdXRzaWRlIHRoZSBsYXllcgotICAgIC8vIGJ5IGRlZmxhdGluZyB0aGUgdGlsZSByZWdpb24g
aGFsZiBhIHRleGVsIG9yIGhhbGYgYSB0ZXhlbAotICAgIC8vIG1pbnVzIGVwc2lsb24gZm9yIG9u
ZSBwaXhlbCBsYXllcnMuIFRoZSByZXN1bHRpbmcgY2xhbXAgcmVnaW9uCi0gICAgLy8gaXMgbWFw
cGVkIHRvIHRoZSB1bml0IHNxdWFyZSBieSB0aGUgdmVydGV4IHNoYWRlciBhbmQgbWFwcGVkCi0g
ICAgLy8gYmFjayB0byBub3JtYWxpemVkIHRleHR1cmUgY29vcmRpbmF0ZXMgYnkgdGhlIGZyYWdt
ZW50IHNoYWRlcgotICAgIC8vIGFmdGVyIGJlaW5nIGNsYW1wZWQgdG8gMC0xIHJhbmdlLgotICAg
IGNvbnN0IGZsb2F0IGVwc2lsb24gPSAxIC8gMTAyNC4wZjsKLSAgICBmbG9hdCBjbGFtcFggPSBt
aW4oMC41LCBjbGFtcFJlY3Qud2lkdGgoKSAvIDIuMCAtIGVwc2lsb24pOwotICAgIGZsb2F0IGNs
YW1wWSA9IG1pbigwLjUsIGNsYW1wUmVjdC5oZWlnaHQoKSAvIDIuMCAtIGVwc2lsb24pOwotICAg
IGNsYW1wUmVjdC5pbmZsYXRlWCgtY2xhbXBYKTsKLSAgICBjbGFtcFJlY3QuaW5mbGF0ZVkoLWNs
YW1wWSk7Ci0gICAgRmxvYXRTaXplIGNsYW1wT2Zmc2V0ID0gY2xhbXBSZWN0Lm1pblhNaW5ZQ29y
bmVyKCkgLSBGbG9hdFJlY3QodGlsZVJlY3QpLm1pblhNaW5ZQ29ybmVyKCk7Ci0KLSAgICBGbG9h
dFBvaW50IHRleHR1cmVPZmZzZXQgPSBxdWFkLT50ZXh0dXJlT2Zmc2V0KCkgKyBjbGFtcE9mZnNl
dCArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50UG9pbnQodGlsZVJlY3QubG9j
YXRpb24oKSAtIHF1YWQtPnF1YWRSZWN0KCkubG9jYXRpb24oKSk7Ci0KLSAgICAvLyBNYXAgY2xh
bXBpbmcgcmVjdGFuZ2xlIHRvIHVuaXQgc3F1YXJlLgotICAgIGZsb2F0IHZlcnRleFRleFRyYW5z
bGF0ZVggPSAtY2xhbXBSZWN0LngoKSAvIGNsYW1wUmVjdC53aWR0aCgpOwotICAgIGZsb2F0IHZl
cnRleFRleFRyYW5zbGF0ZVkgPSAtY2xhbXBSZWN0LnkoKSAvIGNsYW1wUmVjdC5oZWlnaHQoKTsK
LSAgICBmbG9hdCB2ZXJ0ZXhUZXhTY2FsZVggPSB0aWxlUmVjdC53aWR0aCgpIC8gY2xhbXBSZWN0
LndpZHRoKCk7Ci0gICAgZmxvYXQgdmVydGV4VGV4U2NhbGVZID0gdGlsZVJlY3QuaGVpZ2h0KCkg
LyBjbGFtcFJlY3QuaGVpZ2h0KCk7Ci0KLSAgICAvLyBNYXAgdG8gbm9ybWFsaXplZCB0ZXh0dXJl
IGNvb3JkaW5hdGVzLgotICAgIGNvbnN0IEludFNpemUmIHRleHR1cmVTaXplID0gcXVhZC0+dGV4
dHVyZVNpemUoKTsKLSAgICBmbG9hdCBmcmFnbWVudFRleFRyYW5zbGF0ZVggPSB0ZXh0dXJlT2Zm
c2V0LngoKSAvIHRleHR1cmVTaXplLndpZHRoKCk7Ci0gICAgZmxvYXQgZnJhZ21lbnRUZXhUcmFu
c2xhdGVZID0gdGV4dHVyZU9mZnNldC55KCkgLyB0ZXh0dXJlU2l6ZS5oZWlnaHQoKTsKLSAgICBm
bG9hdCBmcmFnbWVudFRleFNjYWxlWCA9IGNsYW1wUmVjdC53aWR0aCgpIC8gdGV4dHVyZVNpemUu
d2lkdGgoKTsKLSAgICBmbG9hdCBmcmFnbWVudFRleFNjYWxlWSA9IGNsYW1wUmVjdC5oZWlnaHQo
KSAvIHRleHR1cmVTaXplLmhlaWdodCgpOwotCi0KLSAgICBGbG9hdFF1YWQgbG9jYWxRdWFkOwot
ICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IGRldmljZVRyYW5zZm9ybSA9IFdlYlRyYW5zZm9y
bWF0aW9uTWF0cml4KGZyYW1lLndpbmRvd01hdHJpeCAqIGZyYW1lLnByb2plY3Rpb25NYXRyaXgg
KiBxdWFkLT5xdWFkVHJhbnNmb3JtKCkpLnRvMmRUcmFuc2Zvcm0oKTsKLSAgICBpZiAoIWRldmlj
ZVRyYW5zZm9ybS5pc0ludmVydGlibGUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYm9vbCBj
bGlwcGVkID0gZmFsc2U7Ci0gICAgRmxvYXRRdWFkIGRldmljZUxheWVyUXVhZCA9IENDTWF0aFV0
aWw6Om1hcFF1YWQoZGV2aWNlVHJhbnNmb3JtLCBGbG9hdFF1YWQocXVhZC0+dmlzaWJsZUNvbnRl
bnRSZWN0KCkpLCBjbGlwcGVkKTsKLSAgICBBU1NFUlQoIWNsaXBwZWQpOwotCi0gICAgVGlsZVBy
b2dyYW1Vbmlmb3JtcyB1bmlmb3JtczsKLSAgICAvLyBGb3Igbm93LCB3ZSBzaW1wbHkgc2tpcCBh
bnRpLWFsaWFzaW5nIHdpdGggdGhlIHF1YWQgaXMgY2xpcHBlZC4gVGhpcyBvbmx5IGhhcHBlbnMK
LSAgICAvLyBvbiBwZXJzcGVjdGl2ZSB0cmFuc2Zvcm1lZCBsYXllcnMgdGhhdCBnbyBwYXJ0aWFs
bHkgYmVoaW5kIHRoZSBjYW1lcmEuCi0gICAgaWYgKHF1YWQtPmlzQW50aWFsaWFzZWQoKSAmJiAh
Y2xpcHBlZCkgewotICAgICAgICBpZiAocXVhZC0+c3dpenpsZUNvbnRlbnRzKCkpCi0gICAgICAg
ICAgICB0aWxlVW5pZm9ybUxvY2F0aW9uKHRpbGVQcm9ncmFtU3dpenpsZUFBKCksIHVuaWZvcm1z
KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgdGlsZVVuaWZvcm1Mb2NhdGlvbih0aWxlUHJv
Z3JhbUFBKCksIHVuaWZvcm1zKTsKLSAgICB9IGVsc2UgewotICAgICAgICBpZiAocXVhZC0+bmVl
ZHNCbGVuZGluZygpKSB7Ci0gICAgICAgICAgICBpZiAocXVhZC0+c3dpenpsZUNvbnRlbnRzKCkp
Ci0gICAgICAgICAgICAgICAgdGlsZVVuaWZvcm1Mb2NhdGlvbih0aWxlUHJvZ3JhbVN3aXp6bGUo
KSwgdW5pZm9ybXMpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHRpbGVVbmlm
b3JtTG9jYXRpb24odGlsZVByb2dyYW0oKSwgdW5pZm9ybXMpOwotICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgaWYgKHF1YWQtPnN3aXp6bGVDb250ZW50cygpKQotICAgICAgICAgICAgICAg
IHRpbGVVbmlmb3JtTG9jYXRpb24odGlsZVByb2dyYW1Td2l6emxlT3BhcXVlKCksIHVuaWZvcm1z
KTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB0aWxlVW5pZm9ybUxvY2F0aW9u
KHRpbGVQcm9ncmFtT3BhcXVlKCksIHVuaWZvcm1zKTsKLSAgICAgICAgfQotICAgIH0KLQotICAg
IEdMQyhjb250ZXh0KCksIGNvbnRleHQoKS0+dXNlUHJvZ3JhbSh1bmlmb3Jtcy5wcm9ncmFtKSk7
Ci0gICAgR0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT51bmlmb3JtMWkodW5pZm9ybXMuc2FtcGxl
ckxvY2F0aW9uLCAwKSk7Ci0gICAgR0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT5hY3RpdmVUZXh0
dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFMCkpOwotICAgIENDUmVzb3VyY2VQcm92aWRl
cjo6U2NvcGVkUmVhZExvY2tHTCBxdWFkUmVzb3VyY2VMb2NrKG1fcmVzb3VyY2VQcm92aWRlciwg
cXVhZC0+cmVzb3VyY2VJZCgpKTsKLSAgICBHTEMoY29udGV4dCgpLCBjb250ZXh0KCktPmJpbmRU
ZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBxdWFkUmVzb3VyY2VMb2NrLnRl
eHR1cmVJZCgpKSk7Ci0gICAgR0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT50ZXhQYXJhbWV0ZXJp
KEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVS
RV9NSU5fRklMVEVSLCBxdWFkLT50ZXh0dXJlRmlsdGVyKCkpKTsKLSAgICBHTEMoY29udGV4dCgp
LCBjb250ZXh0KCktPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQs
IEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01BR19GSUxURVIsIHF1YWQtPnRleHR1cmVGaWx0
ZXIoKSkpOwotCi0gICAgYm9vbCB1c2VBQSA9ICFjbGlwcGVkICYmIHF1YWQtPmlzQW50aWFsaWFz
ZWQoKTsKLSAgICBpZiAodXNlQUEpIHsKLSAgICAgICAgQ0NMYXllclF1YWQgZGV2aWNlTGF5ZXJC
b3VuZHMgPSBDQ0xheWVyUXVhZChGbG9hdFF1YWQoZGV2aWNlTGF5ZXJRdWFkLmJvdW5kaW5nQm94
KCkpKTsKLSAgICAgICAgZGV2aWNlTGF5ZXJCb3VuZHMuaW5mbGF0ZUFudGlBbGlhc2luZ0Rpc3Rh
bmNlKCk7Ci0KLSAgICAgICAgQ0NMYXllclF1YWQgZGV2aWNlTGF5ZXJFZGdlcyA9IENDTGF5ZXJR
dWFkKGRldmljZUxheWVyUXVhZCk7Ci0gICAgICAgIGRldmljZUxheWVyRWRnZXMuaW5mbGF0ZUFu
dGlBbGlhc2luZ0Rpc3RhbmNlKCk7Ci0KLSAgICAgICAgZmxvYXQgZWRnZVsyNF07Ci0gICAgICAg
IGRldmljZUxheWVyRWRnZXMudG9GbG9hdEFycmF5KGVkZ2UpOwotICAgICAgICBkZXZpY2VMYXll
ckJvdW5kcy50b0Zsb2F0QXJyYXkoJmVkZ2VbMTJdKTsKLSAgICAgICAgR0xDKGNvbnRleHQoKSwg
Y29udGV4dCgpLT51bmlmb3JtM2Z2KHVuaWZvcm1zLmVkZ2VMb2NhdGlvbiwgOCwgZWRnZSkpOwot
Ci0gICAgICAgIEdMQyhjb250ZXh0KCksIGNvbnRleHQoKS0+dW5pZm9ybTRmKHVuaWZvcm1zLnZl
cnRleFRleFRyYW5zZm9ybUxvY2F0aW9uLCB2ZXJ0ZXhUZXhUcmFuc2xhdGVYLCB2ZXJ0ZXhUZXhU
cmFuc2xhdGVZLCB2ZXJ0ZXhUZXhTY2FsZVgsIHZlcnRleFRleFNjYWxlWSkpOwotICAgICAgICBH
TEMoY29udGV4dCgpLCBjb250ZXh0KCktPnVuaWZvcm00Zih1bmlmb3Jtcy5mcmFnbWVudFRleFRy
YW5zZm9ybUxvY2F0aW9uLCBmcmFnbWVudFRleFRyYW5zbGF0ZVgsIGZyYWdtZW50VGV4VHJhbnNs
YXRlWSwgZnJhZ21lbnRUZXhTY2FsZVgsIGZyYWdtZW50VGV4U2NhbGVZKSk7Ci0KLSAgICAgICAg
RmxvYXRQb2ludCBib3R0b21SaWdodCh0aWxlUmVjdC5tYXhYKCksIHRpbGVSZWN0Lm1heFkoKSk7
Ci0gICAgICAgIEZsb2F0UG9pbnQgYm90dG9tTGVmdCh0aWxlUmVjdC54KCksIHRpbGVSZWN0Lm1h
eFkoKSk7Ci0gICAgICAgIEZsb2F0UG9pbnQgdG9wTGVmdCh0aWxlUmVjdC54KCksIHRpbGVSZWN0
LnkoKSk7Ci0gICAgICAgIEZsb2F0UG9pbnQgdG9wUmlnaHQodGlsZVJlY3QubWF4WCgpLCB0aWxl
UmVjdC55KCkpOwotCi0gICAgICAgIC8vIE1hcCBwb2ludHMgdG8gZGV2aWNlIHNwYWNlLgotICAg
ICAgICBib3R0b21SaWdodCA9IENDTWF0aFV0aWw6Om1hcFBvaW50KGRldmljZVRyYW5zZm9ybSwg
Ym90dG9tUmlnaHQsIGNsaXBwZWQpOwotICAgICAgICBBU1NFUlQoIWNsaXBwZWQpOwotICAgICAg
ICBib3R0b21MZWZ0ID0gQ0NNYXRoVXRpbDo6bWFwUG9pbnQoZGV2aWNlVHJhbnNmb3JtLCBib3R0
b21MZWZ0LCBjbGlwcGVkKTsKLSAgICAgICAgQVNTRVJUKCFjbGlwcGVkKTsKLSAgICAgICAgdG9w
TGVmdCA9IENDTWF0aFV0aWw6Om1hcFBvaW50KGRldmljZVRyYW5zZm9ybSwgdG9wTGVmdCwgY2xp
cHBlZCk7Ci0gICAgICAgIEFTU0VSVCghY2xpcHBlZCk7Ci0gICAgICAgIHRvcFJpZ2h0ID0gQ0NN
YXRoVXRpbDo6bWFwUG9pbnQoZGV2aWNlVHJhbnNmb3JtLCB0b3BSaWdodCwgY2xpcHBlZCk7Ci0g
ICAgICAgIEFTU0VSVCghY2xpcHBlZCk7Ci0KLSAgICAgICAgQ0NMYXllclF1YWQ6OkVkZ2UgYm90
dG9tRWRnZShib3R0b21SaWdodCwgYm90dG9tTGVmdCk7Ci0gICAgICAgIENDTGF5ZXJRdWFkOjpF
ZGdlIGxlZnRFZGdlKGJvdHRvbUxlZnQsIHRvcExlZnQpOwotICAgICAgICBDQ0xheWVyUXVhZDo6
RWRnZSB0b3BFZGdlKHRvcExlZnQsIHRvcFJpZ2h0KTsKLSAgICAgICAgQ0NMYXllclF1YWQ6OkVk
Z2UgcmlnaHRFZGdlKHRvcFJpZ2h0LCBib3R0b21SaWdodCk7Ci0KLSAgICAgICAgLy8gT25seSBh
cHBseSBhbnRpLWFsaWFzaW5nIHRvIGVkZ2VzIG5vdCBjbGlwcGVkIGJ5IGN1bGxpbmcgb3Igc2Np
c3NvcmluZy4KLSAgICAgICAgaWYgKHF1YWQtPnRvcEVkZ2VBQSgpICYmIHRpbGVSZWN0LnkoKSA9
PSBxdWFkLT5xdWFkUmVjdCgpLnkoKSkKLSAgICAgICAgICAgIHRvcEVkZ2UgPSBkZXZpY2VMYXll
ckVkZ2VzLnRvcCgpOwotICAgICAgICBpZiAocXVhZC0+bGVmdEVkZ2VBQSgpICYmIHRpbGVSZWN0
LngoKSA9PSBxdWFkLT5xdWFkUmVjdCgpLngoKSkKLSAgICAgICAgICAgIGxlZnRFZGdlID0gZGV2
aWNlTGF5ZXJFZGdlcy5sZWZ0KCk7Ci0gICAgICAgIGlmIChxdWFkLT5yaWdodEVkZ2VBQSgpICYm
IHRpbGVSZWN0Lm1heFgoKSA9PSBxdWFkLT5xdWFkUmVjdCgpLm1heFgoKSkKLSAgICAgICAgICAg
IHJpZ2h0RWRnZSA9IGRldmljZUxheWVyRWRnZXMucmlnaHQoKTsKLSAgICAgICAgaWYgKHF1YWQt
PmJvdHRvbUVkZ2VBQSgpICYmIHRpbGVSZWN0Lm1heFkoKSA9PSBxdWFkLT5xdWFkUmVjdCgpLm1h
eFkoKSkKLSAgICAgICAgICAgIGJvdHRvbUVkZ2UgPSBkZXZpY2VMYXllckVkZ2VzLmJvdHRvbSgp
OwotCi0gICAgICAgIGZsb2F0IHNpZ24gPSBGbG9hdFF1YWQodGlsZVJlY3QpLmlzQ291bnRlcmNs
b2Nrd2lzZSgpID8gLTEgOiAxOwotICAgICAgICBib3R0b21FZGdlLnNjYWxlKHNpZ24pOwotICAg
ICAgICBsZWZ0RWRnZS5zY2FsZShzaWduKTsKLSAgICAgICAgdG9wRWRnZS5zY2FsZShzaWduKTsK
LSAgICAgICAgcmlnaHRFZGdlLnNjYWxlKHNpZ24pOwotCi0gICAgICAgIC8vIENyZWF0ZSBkZXZp
Y2Ugc3BhY2UgcXVhZC4KLSAgICAgICAgQ0NMYXllclF1YWQgZGV2aWNlUXVhZChsZWZ0RWRnZSwg
dG9wRWRnZSwgcmlnaHRFZGdlLCBib3R0b21FZGdlKTsKLQotICAgICAgICAvLyBNYXAgZGV2aWNl
IHNwYWNlIHF1YWQgdG8gbG9jYWwgc3BhY2UuIGNvbnRlbnRzRGV2aWNlVHJhbnNmb3JtIGhhcyBu
byAzZCBjb21wb25lbnQgc2luY2UgaXQgd2FzIGdlbmVyYXRlZCB3aXRoIHRvMmRUcmFuc2Zvcm0o
KSBzbyB3ZSBkb24ndCBuZWVkIHRvIHByb2plY3QuCi0gICAgICAgIFdlYlRyYW5zZm9ybWF0aW9u
TWF0cml4IGludmVyc2VEZXZpY2VUcmFuc2Zvcm0gPSBkZXZpY2VUcmFuc2Zvcm0uaW52ZXJzZSgp
OwotICAgICAgICBsb2NhbFF1YWQgPSBDQ01hdGhVdGlsOjptYXBRdWFkKGludmVyc2VEZXZpY2VU
cmFuc2Zvcm0sIGRldmljZVF1YWQuZmxvYXRRdWFkKCksIGNsaXBwZWQpOwotCi0gICAgICAgIC8v
IFdlIHNob3VsZCBub3QgQVNTRVJUKCFjbGlwcGVkKSBoZXJlLCBiZWNhdXNlIGFudGktYWxpYXNp
bmcgaW5mbGF0aW9uIG1heSBjYXVzZSBkZXZpY2VRdWFkIHRvIGJlY29tZQotICAgICAgICAvLyBj
bGlwcGVkLiAgVG8gb3VyIGtub3dsZWRnZSB0aGlzIHNjZW5hcmlvIGRvZXMgbm90IG5lZWQgdG8g
YmUgaGFuZGxlZCBkaWZmZXJlbnRseSB0aGFuIHRoZSB1bmNsaXBwZWQgY2FzZS4KLSAgICB9IGVs
c2UgewotICAgICAgICAvLyBNb3ZlIGZyYWdtZW50IHNoYWRlciB0cmFuc2Zvcm0gdG8gdmVydGV4
IHNoYWRlci4gV2UgY2FuIGRvIHRoaXMgd2hpbGUKLSAgICAgICAgLy8gc3RpbGwgcHJvZHVjaW5n
IGNvcnJlY3QgcmVzdWx0cyBhcyBmcmFnbWVudFRleFRyYW5zZm9ybUxvY2F0aW9uCi0gICAgICAg
IC8vIHNob3VsZCBhbHdheXMgYmUgbm9uLW5lZ2F0aXZlIHdoZW4gdGlsZXMgYXJlIHRyYW5zZm9y
bWVkIGluIGEgd2F5Ci0gICAgICAgIC8vIHRoYXQgY291bGQgcmVzdWx0IGluIHNhbXBsaW5nIG91
dHNpZGUgdGhlIGxheWVyLgotICAgICAgICB2ZXJ0ZXhUZXhTY2FsZVggKj0gZnJhZ21lbnRUZXhT
Y2FsZVg7Ci0gICAgICAgIHZlcnRleFRleFNjYWxlWSAqPSBmcmFnbWVudFRleFNjYWxlWTsKLSAg
ICAgICAgdmVydGV4VGV4VHJhbnNsYXRlWCAqPSBmcmFnbWVudFRleFNjYWxlWDsKLSAgICAgICAg
dmVydGV4VGV4VHJhbnNsYXRlWSAqPSBmcmFnbWVudFRleFNjYWxlWTsKLSAgICAgICAgdmVydGV4
VGV4VHJhbnNsYXRlWCArPSBmcmFnbWVudFRleFRyYW5zbGF0ZVg7Ci0gICAgICAgIHZlcnRleFRl
eFRyYW5zbGF0ZVkgKz0gZnJhZ21lbnRUZXhUcmFuc2xhdGVZOwotCi0gICAgICAgIEdMQyhjb250
ZXh0KCksIGNvbnRleHQoKS0+dW5pZm9ybTRmKHVuaWZvcm1zLnZlcnRleFRleFRyYW5zZm9ybUxv
Y2F0aW9uLCB2ZXJ0ZXhUZXhUcmFuc2xhdGVYLCB2ZXJ0ZXhUZXhUcmFuc2xhdGVZLCB2ZXJ0ZXhU
ZXhTY2FsZVgsIHZlcnRleFRleFNjYWxlWSkpOwotCi0gICAgICAgIGxvY2FsUXVhZCA9IEZsb2F0
UmVjdCh0aWxlUmVjdCk7Ci0gICAgfQotCi0gICAgLy8gTm9ybWFsaXplIHRvIHRpbGVSZWN0Lgot
ICAgIGxvY2FsUXVhZC5zY2FsZSgxLjBmIC8gdGlsZVJlY3Qud2lkdGgoKSwgMS4wZiAvIHRpbGVS
ZWN0LmhlaWdodCgpKTsKLQotICAgIHNldFNoYWRlck9wYWNpdHkocXVhZC0+b3BhY2l0eSgpLCB1
bmlmb3Jtcy5hbHBoYUxvY2F0aW9uKTsKLSAgICBzZXRTaGFkZXJGbG9hdFF1YWQobG9jYWxRdWFk
LCB1bmlmb3Jtcy5wb2ludExvY2F0aW9uKTsKLQotICAgIC8vIFRoZSB0aWxlIHF1YWQgc2hhZGVy
IGJlaGF2ZXMgZGlmZmVyZW50bHkgY29tcGFyZWQgdG8gYWxsIG90aGVyIHNoYWRlcnMuCi0gICAg
Ly8gVGhlIHRyYW5zZm9ybSBhbmQgdmVydGV4IGRhdGEgYXJlIHVzZWQgdG8gZmlndXJlIG91dCB0
aGUgZXh0ZW50cyB0aGF0IHRoZQotICAgIC8vIHVuLWFudGlhbGlhc2VkIHF1YWQgc2hvdWxkIGhh
dmUgYW5kIHdoaWNoIHZlcnRleCB0aGlzIGlzIGFuZCB0aGUgZmxvYXQKLSAgICAvLyBxdWFkIHBh
c3NlZCBpbiB2aWEgdW5pZm9ybSBpcyB0aGUgYWN0dWFsIGdlb21ldHJ5IHRoYXQgZ2V0cyB1c2Vk
IHRvIGRyYXcKLSAgICAvLyBpdC4gVGhpcyBpcyB3aHkgdGhpcyBjZW50ZXJlZCByZWN0IGlzIHVz
ZWQgYW5kIG5vdCB0aGUgb3JpZ2luYWwgcXVhZFJlY3QuCi0gICAgRmxvYXRSZWN0IGNlbnRlcmVk
UmVjdChGbG9hdFBvaW50KC0wLjUgKiB0aWxlUmVjdC53aWR0aCgpLCAtMC41ICogdGlsZVJlY3Qu
aGVpZ2h0KCkpLCB0aWxlUmVjdC5zaXplKCkpOwotICAgIGRyYXdRdWFkR2VvbWV0cnkoZnJhbWUs
IHF1YWQtPnF1YWRUcmFuc2Zvcm0oKSwgY2VudGVyZWRSZWN0LCB1bmlmb3Jtcy5tYXRyaXhMb2Nh
dGlvbik7Ci19Ci0KLXZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3WVVWVmlkZW9RdWFk
KGNvbnN0IERyYXdpbmdGcmFtZSYgZnJhbWUsIGNvbnN0IENDWVVWVmlkZW9EcmF3UXVhZCogcXVh
ZCkKLXsKLSAgICBjb25zdCBWaWRlb1lVVlByb2dyYW0qIHByb2dyYW0gPSB2aWRlb1lVVlByb2dy
YW0oKTsKLSAgICBBU1NFUlQocHJvZ3JhbSAmJiBwcm9ncmFtLT5pbml0aWFsaXplZCgpKTsKLQot
ICAgIGNvbnN0IENDVmlkZW9MYXllckltcGw6OkZyYW1lUGxhbmUmIHlQbGFuZSA9IHF1YWQtPnlQ
bGFuZSgpOwotICAgIGNvbnN0IENDVmlkZW9MYXllckltcGw6OkZyYW1lUGxhbmUmIHVQbGFuZSA9
IHF1YWQtPnVQbGFuZSgpOwotICAgIGNvbnN0IENDVmlkZW9MYXllckltcGw6OkZyYW1lUGxhbmUm
IHZQbGFuZSA9IHF1YWQtPnZQbGFuZSgpOwotCi0gICAgQ0NSZXNvdXJjZVByb3ZpZGVyOjpTY29w
ZWRSZWFkTG9ja0dMIHlQbGFuZUxvY2sobV9yZXNvdXJjZVByb3ZpZGVyLCB5UGxhbmUucmVzb3Vy
Y2VJZCk7Ci0gICAgQ0NSZXNvdXJjZVByb3ZpZGVyOjpTY29wZWRSZWFkTG9ja0dMIHVQbGFuZUxv
Y2sobV9yZXNvdXJjZVByb3ZpZGVyLCB1UGxhbmUucmVzb3VyY2VJZCk7Ci0gICAgQ0NSZXNvdXJj
ZVByb3ZpZGVyOjpTY29wZWRSZWFkTG9ja0dMIHZQbGFuZUxvY2sobV9yZXNvdXJjZVByb3ZpZGVy
LCB2UGxhbmUucmVzb3VyY2VJZCk7Ci0gICAgR0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT5hY3Rp
dmVUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFMSkpOwotICAgIEdMQyhjb250ZXh0
KCksIGNvbnRleHQoKS0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQs
IHlQbGFuZUxvY2sudGV4dHVyZUlkKCkpKTsKLSAgICBHTEMoY29udGV4dCgpLCBjb250ZXh0KCkt
PmFjdGl2ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUyKSk7Ci0gICAgR0xDKGNv
bnRleHQoKSwgY29udGV4dCgpLT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVS
RV8yRCwgdVBsYW5lTG9jay50ZXh0dXJlSWQoKSkpOwotICAgIEdMQyhjb250ZXh0KCksIGNvbnRl
eHQoKS0+YWN0aXZlVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRTMpKTsKLSAgICBH
TEMoY29udGV4dCgpLCBjb250ZXh0KCktPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpU
RVhUVVJFXzJELCB2UGxhbmVMb2NrLnRleHR1cmVJZCgpKSk7Ci0KLSAgICBHTEMoY29udGV4dCgp
LCBjb250ZXh0KCktPnVzZVByb2dyYW0ocHJvZ3JhbS0+cHJvZ3JhbSgpKSk7Ci0KLSAgICBmbG9h
dCB5V2lkdGhTY2FsZUZhY3RvciA9IHN0YXRpY19jYXN0PGZsb2F0Pih5UGxhbmUudmlzaWJsZVNp
emUud2lkdGgoKSkgLyB5UGxhbmUuc2l6ZS53aWR0aCgpOwotICAgIC8vIEFyYml0cmFyaWx5IHRh
a2UgdGhlIHUgc2l6ZXMgYmVjYXVzZSB1IGFuZCB2IGRpbWVuc2lvbnMgYXJlIGlkZW50aWNhbC4K
LSAgICBmbG9hdCB1dldpZHRoU2NhbGVGYWN0b3IgPSBzdGF0aWNfY2FzdDxmbG9hdD4odVBsYW5l
LnZpc2libGVTaXplLndpZHRoKCkpIC8gdVBsYW5lLnNpemUud2lkdGgoKTsKLSAgICBHTEMoY29u
dGV4dCgpLCBjb250ZXh0KCktPnVuaWZvcm0xZihwcm9ncmFtLT52ZXJ0ZXhTaGFkZXIoKS55V2lk
dGhTY2FsZUZhY3RvckxvY2F0aW9uKCksIHlXaWR0aFNjYWxlRmFjdG9yKSk7Ci0gICAgR0xDKGNv
bnRleHQoKSwgY29udGV4dCgpLT51bmlmb3JtMWYocHJvZ3JhbS0+dmVydGV4U2hhZGVyKCkudXZX
aWR0aFNjYWxlRmFjdG9yTG9jYXRpb24oKSwgdXZXaWR0aFNjYWxlRmFjdG9yKSk7Ci0KLSAgICBH
TEMoY29udGV4dCgpLCBjb250ZXh0KCktPnVuaWZvcm0xaShwcm9ncmFtLT5mcmFnbWVudFNoYWRl
cigpLnlUZXh0dXJlTG9jYXRpb24oKSwgMSkpOwotICAgIEdMQyhjb250ZXh0KCksIGNvbnRleHQo
KS0+dW5pZm9ybTFpKHByb2dyYW0tPmZyYWdtZW50U2hhZGVyKCkudVRleHR1cmVMb2NhdGlvbigp
LCAyKSk7Ci0gICAgR0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT51bmlmb3JtMWkocHJvZ3JhbS0+
ZnJhZ21lbnRTaGFkZXIoKS52VGV4dHVyZUxvY2F0aW9uKCksIDMpKTsKLQotICAgIC8vIFRoZXNl
IHZhbHVlcyBhcmUgbWFnaWMgbnVtYmVycyB0aGF0IGFyZSB1c2VkIGluIHRoZSB0cmFuc2Zvcm1h
dGlvbiBmcm9tIFlVViB0byBSR0IgY29sb3IgdmFsdWVzLgotICAgIC8vIFRoZXkgYXJlIHRha2Vu
IGZyb20gdGhlIGZvbGxvd2luZyB3ZWJwYWdlOiBodHRwOi8vd3d3LmZvdXJjYy5vcmcvZmNjeXZy
Z2IucGhwCi0gICAgZmxvYXQgeXV2MlJHQls5XSA9IHsKLSAgICAgICAgMS4xNjRmLCAxLjE2NGYs
IDEuMTY0ZiwKLSAgICAgICAgMC5mLCAtLjM5MWYsIDIuMDE4ZiwKLSAgICAgICAgMS41OTZmLCAt
LjgxM2YsIDAuZiwKLSAgICB9OwotICAgIEdMQyhjb250ZXh0KCksIGNvbnRleHQoKS0+dW5pZm9y
bU1hdHJpeDNmdihwcm9ncmFtLT5mcmFnbWVudFNoYWRlcigpLmNjTWF0cml4TG9jYXRpb24oKSwg
MSwgMCwgeXV2MlJHQikpOwotCi0gICAgLy8gVGhlc2UgdmFsdWVzIG1hcCB0byAxNiwgMTI4LCBh
bmQgMTI4IHJlc3BlY3RpdmVseSwgYW5kIGFyZSBjb21wdXRlZAotICAgIC8vIGFzIGEgZnJhY3Rp
b24gb3ZlciAyNTYgKGUuZy4gMTYgLyAyNTYgPSAwLjA2MjUpLgotICAgIC8vIFRoZXkgYXJlIHVz
ZWQgaW4gdGhlIFlVViB0byBSR0JBIGNvbnZlcnNpb24gZm9ybXVsYToKLSAgICAvLyAgIFkgLSAx
NiAgIDogR2l2ZXMgMTYgdmFsdWVzIG9mIGhlYWQgYW5kIGZvb3Ryb29tIGZvciBvdmVyc2hvb3Rp
bmcKLSAgICAvLyAgIFUgLSAxMjggIDogVHVybnMgdW5zaWduZWQgVSBpbnRvIHNpZ25lZCBVIFst
MTI4LDEyN10KLSAgICAvLyAgIFYgLSAxMjggIDogVHVybnMgdW5zaWduZWQgViBpbnRvIHNpZ25l
ZCBWIFstMTI4LDEyN10KLSAgICBmbG9hdCB5dXZBZGp1c3RbM10gPSB7Ci0gICAgICAgIC0wLjA2
MjVmLAotICAgICAgICAtMC41ZiwKLSAgICAgICAgLTAuNWYsCi0gICAgfTsKLSAgICBHTEMoY29u
dGV4dCgpLCBjb250ZXh0KCktPnVuaWZvcm0zZnYocHJvZ3JhbS0+ZnJhZ21lbnRTaGFkZXIoKS55
dXZBZGpMb2NhdGlvbigpLCAxLCB5dXZBZGp1c3QpKTsKLQotICAgIHNldFNoYWRlck9wYWNpdHko
cXVhZC0+b3BhY2l0eSgpLCBwcm9ncmFtLT5mcmFnbWVudFNoYWRlcigpLmFscGhhTG9jYXRpb24o
KSk7Ci0gICAgZHJhd1F1YWRHZW9tZXRyeShmcmFtZSwgcXVhZC0+cXVhZFRyYW5zZm9ybSgpLCBx
dWFkLT5xdWFkUmVjdCgpLCBwcm9ncmFtLT52ZXJ0ZXhTaGFkZXIoKS5tYXRyaXhMb2NhdGlvbigp
KTsKLQotICAgIC8vIFJlc2V0IGFjdGl2ZSB0ZXh0dXJlIGJhY2sgdG8gdGV4dHVyZSAwLgotICAg
IEdMQyhjb250ZXh0KCksIGNvbnRleHQoKS0+YWN0aXZlVGV4dHVyZShHcmFwaGljc0NvbnRleHQz
RDo6VEVYVFVSRTApKTsKLX0KLQotdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdTdHJl
YW1WaWRlb1F1YWQoY29uc3QgRHJhd2luZ0ZyYW1lJiBmcmFtZSwgY29uc3QgQ0NTdHJlYW1WaWRl
b0RyYXdRdWFkKiBxdWFkKQotewotICAgIHN0YXRpYyBmbG9hdCBnbE1hdHJpeFsxNl07Ci0KLSAg
ICBBU1NFUlQobV9jYXBhYmlsaXRpZXMudXNpbmdFZ2xJbWFnZSk7Ci0KLSAgICBjb25zdCBWaWRl
b1N0cmVhbVRleHR1cmVQcm9ncmFtKiBwcm9ncmFtID0gdmlkZW9TdHJlYW1UZXh0dXJlUHJvZ3Jh
bSgpOwotICAgIEdMQyhjb250ZXh0KCksIGNvbnRleHQoKS0+dXNlUHJvZ3JhbShwcm9ncmFtLT5w
cm9ncmFtKCkpKTsKLQotICAgIHRvR0xNYXRyaXgoJmdsTWF0cml4WzBdLCBxdWFkLT5tYXRyaXgo
KSk7Ci0gICAgR0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT51bmlmb3JtTWF0cml4NGZ2KHByb2dy
YW0tPnZlcnRleFNoYWRlcigpLnRleE1hdHJpeExvY2F0aW9uKCksIDEsIGZhbHNlLCBnbE1hdHJp
eCkpOwotCi0gICAgR0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT5hY3RpdmVUZXh0dXJlKEdyYXBo
aWNzQ29udGV4dDNEOjpURVhUVVJFMCkpOwotICAgIEdMQyhjb250ZXh0KCksIGNvbnRleHQoKS0+
YmluZFRleHR1cmUoRXh0ZW5zaW9uczNEQ2hyb21pdW06OkdMX1RFWFRVUkVfRVhURVJOQUxfT0VT
LCBxdWFkLT50ZXh0dXJlSWQoKSkpOwotCi0gICAgR0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT51
bmlmb3JtMWkocHJvZ3JhbS0+ZnJhZ21lbnRTaGFkZXIoKS5zYW1wbGVyTG9jYXRpb24oKSwgMCkp
OwotCi0gICAgc2V0U2hhZGVyT3BhY2l0eShxdWFkLT5vcGFjaXR5KCksIHByb2dyYW0tPmZyYWdt
ZW50U2hhZGVyKCkuYWxwaGFMb2NhdGlvbigpKTsKLSAgICBkcmF3UXVhZEdlb21ldHJ5KGZyYW1l
LCBxdWFkLT5xdWFkVHJhbnNmb3JtKCksIHF1YWQtPnF1YWRSZWN0KCksIHByb2dyYW0tPnZlcnRl
eFNoYWRlcigpLm1hdHJpeExvY2F0aW9uKCkpOwotfQotCi1zdHJ1Y3QgVGV4dHVyZVByb2dyYW1C
aW5kaW5nIHsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBQcm9ncmFtPiB2b2lkIHNldChQcm9ncmFtKiBw
cm9ncmFtKQotICAgIHsKLSAgICAgICAgQVNTRVJUKHByb2dyYW0gJiYgcHJvZ3JhbS0+aW5pdGlh
bGl6ZWQoKSk7Ci0gICAgICAgIHByb2dyYW1JZCA9IHByb2dyYW0tPnByb2dyYW0oKTsKLSAgICAg
ICAgc2FtcGxlckxvY2F0aW9uID0gcHJvZ3JhbS0+ZnJhZ21lbnRTaGFkZXIoKS5zYW1wbGVyTG9j
YXRpb24oKTsKLSAgICAgICAgbWF0cml4TG9jYXRpb24gPSBwcm9ncmFtLT52ZXJ0ZXhTaGFkZXIo
KS5tYXRyaXhMb2NhdGlvbigpOwotICAgICAgICBhbHBoYUxvY2F0aW9uID0gcHJvZ3JhbS0+ZnJh
Z21lbnRTaGFkZXIoKS5hbHBoYUxvY2F0aW9uKCk7Ci0gICAgfQotICAgIGludCBwcm9ncmFtSWQ7
Ci0gICAgaW50IHNhbXBsZXJMb2NhdGlvbjsKLSAgICBpbnQgbWF0cml4TG9jYXRpb247Ci0gICAg
aW50IGFscGhhTG9jYXRpb247Ci19OwotCi1zdHJ1Y3QgVGV4VHJhbnNmb3JtVGV4dHVyZVByb2dy
YW1CaW5kaW5nIDogVGV4dHVyZVByb2dyYW1CaW5kaW5nIHsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBQ
cm9ncmFtPiB2b2lkIHNldChQcm9ncmFtKiBwcm9ncmFtKQotICAgIHsKLSAgICAgICAgVGV4dHVy
ZVByb2dyYW1CaW5kaW5nOjpzZXQocHJvZ3JhbSk7Ci0gICAgICAgIHRleFRyYW5zZm9ybUxvY2F0
aW9uID0gcHJvZ3JhbS0+dmVydGV4U2hhZGVyKCkudGV4VHJhbnNmb3JtTG9jYXRpb24oKTsKLSAg
ICB9Ci0gICAgaW50IHRleFRyYW5zZm9ybUxvY2F0aW9uOwotfTsKLQotdm9pZCBMYXllclJlbmRl
cmVyQ2hyb21pdW06OmRyYXdUZXh0dXJlUXVhZChjb25zdCBEcmF3aW5nRnJhbWUmIGZyYW1lLCBj
b25zdCBDQ1RleHR1cmVEcmF3UXVhZCogcXVhZCkKLXsKLSAgICBBU1NFUlQoQ0NQcm94eTo6aXNJ
bXBsVGhyZWFkKCkpOwotCi0gICAgVGV4VHJhbnNmb3JtVGV4dHVyZVByb2dyYW1CaW5kaW5nIGJp
bmRpbmc7Ci0gICAgaWYgKHF1YWQtPmZsaXBwZWQoKSkKLSAgICAgICAgYmluZGluZy5zZXQodGV4
dHVyZVByb2dyYW1GbGlwKCkpOwotICAgIGVsc2UKLSAgICAgICAgYmluZGluZy5zZXQodGV4dHVy
ZVByb2dyYW0oKSk7Ci0gICAgR0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT51c2VQcm9ncmFtKGJp
bmRpbmcucHJvZ3JhbUlkKSk7Ci0gICAgR0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT51bmlmb3Jt
MWkoYmluZGluZy5zYW1wbGVyTG9jYXRpb24sIDApKTsKLSAgICBjb25zdCBGbG9hdFJlY3QmIHV2
UmVjdCA9IHF1YWQtPnV2UmVjdCgpOwotICAgIEdMQyhjb250ZXh0KCksIGNvbnRleHQoKS0+dW5p
Zm9ybTRmKGJpbmRpbmcudGV4VHJhbnNmb3JtTG9jYXRpb24sIHV2UmVjdC54KCksIHV2UmVjdC55
KCksIHV2UmVjdC53aWR0aCgpLCB1dlJlY3QuaGVpZ2h0KCkpKTsKLQotICAgIEdMQyhjb250ZXh0
KCksIGNvbnRleHQoKS0+YWN0aXZlVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRTAp
KTsKLSAgICBDQ1Jlc291cmNlUHJvdmlkZXI6OlNjb3BlZFJlYWRMb2NrR0wgcXVhZFJlc291cmNl
TG9jayhtX3Jlc291cmNlUHJvdmlkZXIsIHF1YWQtPnJlc291cmNlSWQoKSk7Ci0gICAgR0xDKGNv
bnRleHQoKSwgY29udGV4dCgpLT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVS
RV8yRCwgcXVhZFJlc291cmNlTG9jay50ZXh0dXJlSWQoKSkpOwotCi0gICAgLy8gRklYTUU6IHNl
dHRpbmcgdGhlIHRleHR1cmUgcGFyYW1ldGVycyBldmVyeSB0aW1lIGlzIHJlZHVuZGFudC4gTW92
ZSB0aGlzIGNvZGUgc29tZXdoZXJlCi0gICAgLy8gd2hlcmUgaXQgd2lsbCBvbmx5IGhhcHBlbiBv
bmNlIHBlciB0ZXh0dXJlLgotICAgIEdMQyhjb250ZXh0KCksIGNvbnRleHQoKS0+dGV4UGFyYW1l
dGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRF
WFRVUkVfTUlOX0ZJTFRFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVBUikpOwotICAgIEdMQyhj
b250ZXh0KCksIGNvbnRleHQoKS0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVY
VFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUFHX0ZJTFRFUiwgR3JhcGhpY3ND
b250ZXh0M0Q6OkxJTkVBUikpOwotICAgIEdMQyhjb250ZXh0KCksIGNvbnRleHQoKS0+dGV4UGFy
YW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6
OlRFWFRVUkVfV1JBUF9TLCBHcmFwaGljc0NvbnRleHQzRDo6Q0xBTVBfVE9fRURHRSkpOwotICAg
IEdMQyhjb250ZXh0KCksIGNvbnRleHQoKS0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQz
RDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfV1JBUF9ULCBHcmFwaGlj
c0NvbnRleHQzRDo6Q0xBTVBfVE9fRURHRSkpOwotCi0gICAgaWYgKCFxdWFkLT5wcmVtdWx0aXBs
aWVkQWxwaGEoKSkgewotICAgICAgICAvLyBBcyBpdCB0dXJucyBvdXQsIHRoZSBwcmVtdWx0aXBs
aWVkIGFscGhhIGJsZW5kaW5nIGZ1bmN0aW9uIChPTkUsIE9ORV9NSU5VU19TUkNfQUxQSEEpCi0g
ICAgICAgIC8vIHdpbGwgbmV2ZXIgY2F1c2UgdGhlIGFscGhhIGNoYW5uZWwgdG8gYmUgc2V0IHRv
IGFueXRoaW5nIGxlc3MgdGhhbiAxLjAgaWYgaXQgaXMKLSAgICAgICAgLy8gaW5pdGlhbGl6ZWQg
dG8gdGhhdCB2YWx1ZSEgVGhlcmVmb3JlLCBwcmVtdWx0aXBsaWVkQWxwaGEgYmVpbmcgZmFsc2Ug
aXMgdGhlIGZpcnN0Ci0gICAgICAgIC8vIHNpdHVhdGlvbiB3ZSBjYW4gZ2VuZXJhbGx5IHNlZSBh
biBhbHBoYSBjaGFubmVsIGxlc3MgdGhhbiAxLjAgY29taW5nIG91dCBvZiB0aGUKLSAgICAgICAg
Ly8gY29tcG9zaXRvci4gVGhpcyBpcyBjYXVzaW5nIHBsYXRmb3JtIGRpZmZlcmVuY2VzIGluIHNv
bWUgbGF5b3V0IHRlc3RzIChzZWUKLSAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTgyNDEyKSwgc28gaW4gdGhpcyBzaXR1YXRpb24sIHVzZSBhIHNlcGFy
YXRlCi0gICAgICAgIC8vIGJsZW5kIGZ1bmN0aW9uIGZvciB0aGUgYWxwaGEgY2hhbm5lbCB0byBh
dm9pZCBtb2RpZnlpbmcgaXQuIERvbid0IHVzZSBjb2xvck1hc2sgZm9yIHRoaXMKLSAgICAgICAg
Ly8gYXMgaXQgaGFzIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucyBvbiBzb21lIHBsYXRmb3Jtcy4K
LSAgICAgICAgR0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT5ibGVuZEZ1bmNTZXBhcmF0ZShHcmFw
aGljc0NvbnRleHQzRDo6U1JDX0FMUEhBLCBHcmFwaGljc0NvbnRleHQzRDo6T05FX01JTlVTX1NS
Q19BTFBIQSwgR3JhcGhpY3NDb250ZXh0M0Q6OlpFUk8sIEdyYXBoaWNzQ29udGV4dDNEOjpPTkUp
KTsKLSAgICB9Ci0KLSAgICBzZXRTaGFkZXJPcGFjaXR5KHF1YWQtPm9wYWNpdHkoKSwgYmluZGlu
Zy5hbHBoYUxvY2F0aW9uKTsKLSAgICBkcmF3UXVhZEdlb21ldHJ5KGZyYW1lLCBxdWFkLT5xdWFk
VHJhbnNmb3JtKCksIHF1YWQtPnF1YWRSZWN0KCksIGJpbmRpbmcubWF0cml4TG9jYXRpb24pOwot
Ci0gICAgaWYgKCFxdWFkLT5wcmVtdWx0aXBsaWVkQWxwaGEoKSkKLSAgICAgICAgR0xDKG1fY29u
dGV4dCwgbV9jb250ZXh0LT5ibGVuZEZ1bmMoR3JhcGhpY3NDb250ZXh0M0Q6Ok9ORSwgR3JhcGhp
Y3NDb250ZXh0M0Q6Ok9ORV9NSU5VU19TUkNfQUxQSEEpKTsKLX0KLQotdm9pZCBMYXllclJlbmRl
cmVyQ2hyb21pdW06OmRyYXdJT1N1cmZhY2VRdWFkKGNvbnN0IERyYXdpbmdGcmFtZSYgZnJhbWUs
IGNvbnN0IENDSU9TdXJmYWNlRHJhd1F1YWQqIHF1YWQpCi17Ci0gICAgQVNTRVJUKENDUHJveHk6
OmlzSW1wbFRocmVhZCgpKTsKLSAgICBUZXhUcmFuc2Zvcm1UZXh0dXJlUHJvZ3JhbUJpbmRpbmcg
YmluZGluZzsKLSAgICBiaW5kaW5nLnNldCh0ZXh0dXJlSU9TdXJmYWNlUHJvZ3JhbSgpKTsKLQot
ICAgIEdMQyhjb250ZXh0KCksIGNvbnRleHQoKS0+dXNlUHJvZ3JhbShiaW5kaW5nLnByb2dyYW1J
ZCkpOwotICAgIEdMQyhjb250ZXh0KCksIGNvbnRleHQoKS0+dW5pZm9ybTFpKGJpbmRpbmcuc2Ft
cGxlckxvY2F0aW9uLCAwKSk7Ci0gICAgaWYgKHF1YWQtPm9yaWVudGF0aW9uKCkgPT0gQ0NJT1N1
cmZhY2VEcmF3UXVhZDo6RmxpcHBlZCkKLSAgICAgICAgR0xDKGNvbnRleHQoKSwgY29udGV4dCgp
LT51bmlmb3JtNGYoYmluZGluZy50ZXhUcmFuc2Zvcm1Mb2NhdGlvbiwgMCwgcXVhZC0+aW9TdXJm
YWNlU2l6ZSgpLmhlaWdodCgpLCBxdWFkLT5pb1N1cmZhY2VTaXplKCkud2lkdGgoKSwgcXVhZC0+
aW9TdXJmYWNlU2l6ZSgpLmhlaWdodCgpICogLTEuMCkpOwotICAgIGVsc2UKLSAgICAgICAgR0xD
KGNvbnRleHQoKSwgY29udGV4dCgpLT51bmlmb3JtNGYoYmluZGluZy50ZXhUcmFuc2Zvcm1Mb2Nh
dGlvbiwgMCwgMCwgcXVhZC0+aW9TdXJmYWNlU2l6ZSgpLndpZHRoKCksIHF1YWQtPmlvU3VyZmFj
ZVNpemUoKS5oZWlnaHQoKSkpOwotCi0gICAgR0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT5hY3Rp
dmVUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFMCkpOwotICAgIEdMQyhjb250ZXh0
KCksIGNvbnRleHQoKS0+YmluZFRleHR1cmUoRXh0ZW5zaW9uczNEOjpURVhUVVJFX1JFQ1RBTkdM
RV9BUkIsIHF1YWQtPmlvU3VyZmFjZVRleHR1cmVJZCgpKSk7Ci0KLSAgICBzZXRTaGFkZXJPcGFj
aXR5KHF1YWQtPm9wYWNpdHkoKSwgYmluZGluZy5hbHBoYUxvY2F0aW9uKTsKLSAgICBkcmF3UXVh
ZEdlb21ldHJ5KGZyYW1lLCBxdWFkLT5xdWFkVHJhbnNmb3JtKCksIHF1YWQtPnF1YWRSZWN0KCks
IGJpbmRpbmcubWF0cml4TG9jYXRpb24pOwotCi0gICAgR0xDKGNvbnRleHQoKSwgY29udGV4dCgp
LT5iaW5kVGV4dHVyZShFeHRlbnNpb25zM0Q6OlRFWFRVUkVfUkVDVEFOR0xFX0FSQiwgMCkpOwot
fQotCi12b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZmluaXNoRHJhd2luZ0ZyYW1lKERyYXdp
bmdGcmFtZSYgZnJhbWUpCi17Ci0gICAgbV9jdXJyZW50RnJhbWVidWZmZXJMb2NrLmNsZWFyKCk7
Ci0gICAgbV9zd2FwQnVmZmVyUmVjdC51bml0ZShlbmNsb3NpbmdJbnRSZWN0KGZyYW1lLnJvb3RE
YW1hZ2VSZWN0KSk7Ci0KLSAgICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQtPmRpc2FibGUoR3Jh
cGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVCkpOwotICAgIEdMQyhtX2NvbnRleHQsIG1fY29u
dGV4dC0+ZGlzYWJsZShHcmFwaGljc0NvbnRleHQzRDo6QkxFTkQpKTsKLX0KLQotdm9pZCBMYXll
clJlbmRlcmVyQ2hyb21pdW06OnRvR0xNYXRyaXgoZmxvYXQqIGZsYXR0ZW5lZCwgY29uc3QgV2Vi
VHJhbnNmb3JtYXRpb25NYXRyaXgmIG0pCi17Ci0gICAgZmxhdHRlbmVkWzBdID0gbS5tMTEoKTsK
LSAgICBmbGF0dGVuZWRbMV0gPSBtLm0xMigpOwotICAgIGZsYXR0ZW5lZFsyXSA9IG0ubTEzKCk7
Ci0gICAgZmxhdHRlbmVkWzNdID0gbS5tMTQoKTsKLSAgICBmbGF0dGVuZWRbNF0gPSBtLm0yMSgp
OwotICAgIGZsYXR0ZW5lZFs1XSA9IG0ubTIyKCk7Ci0gICAgZmxhdHRlbmVkWzZdID0gbS5tMjMo
KTsKLSAgICBmbGF0dGVuZWRbN10gPSBtLm0yNCgpOwotICAgIGZsYXR0ZW5lZFs4XSA9IG0ubTMx
KCk7Ci0gICAgZmxhdHRlbmVkWzldID0gbS5tMzIoKTsKLSAgICBmbGF0dGVuZWRbMTBdID0gbS5t
MzMoKTsKLSAgICBmbGF0dGVuZWRbMTFdID0gbS5tMzQoKTsKLSAgICBmbGF0dGVuZWRbMTJdID0g
bS5tNDEoKTsKLSAgICBmbGF0dGVuZWRbMTNdID0gbS5tNDIoKTsKLSAgICBmbGF0dGVuZWRbMTRd
ID0gbS5tNDMoKTsKLSAgICBmbGF0dGVuZWRbMTVdID0gbS5tNDQoKTsKLX0KLQotdm9pZCBMYXll
clJlbmRlcmVyQ2hyb21pdW06OnNldFNoYWRlckZsb2F0UXVhZChjb25zdCBGbG9hdFF1YWQmIHF1
YWQsIGludCBxdWFkTG9jYXRpb24pCi17Ci0gICAgaWYgKHF1YWRMb2NhdGlvbiA9PSAtMSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgZmxvYXQgcG9pbnRbOF07Ci0gICAgcG9pbnRbMF0gPSBxdWFk
LnAxKCkueCgpOwotICAgIHBvaW50WzFdID0gcXVhZC5wMSgpLnkoKTsKLSAgICBwb2ludFsyXSA9
IHF1YWQucDIoKS54KCk7Ci0gICAgcG9pbnRbM10gPSBxdWFkLnAyKCkueSgpOwotICAgIHBvaW50
WzRdID0gcXVhZC5wMygpLngoKTsKLSAgICBwb2ludFs1XSA9IHF1YWQucDMoKS55KCk7Ci0gICAg
cG9pbnRbNl0gPSBxdWFkLnA0KCkueCgpOwotICAgIHBvaW50WzddID0gcXVhZC5wNCgpLnkoKTsK
LSAgICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQtPnVuaWZvcm0yZnYocXVhZExvY2F0aW9uLCA0
LCBwb2ludCkpOwotfQotCi12b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6c2V0U2hhZGVyT3Bh
Y2l0eShmbG9hdCBvcGFjaXR5LCBpbnQgYWxwaGFMb2NhdGlvbikKLXsKLSAgICBpZiAoYWxwaGFM
b2NhdGlvbiAhPSAtMSkKLSAgICAgICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT51bmlmb3Jt
MWYoYWxwaGFMb2NhdGlvbiwgb3BhY2l0eSkpOwotfQotCi12b2lkIExheWVyUmVuZGVyZXJDaHJv
bWl1bTo6ZHJhd1F1YWRHZW9tZXRyeShjb25zdCBEcmF3aW5nRnJhbWUmIGZyYW1lLCBjb25zdCBX
ZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiBkcmF3VHJhbnNmb3JtLCBjb25zdCBGbG9h
dFJlY3QmIHF1YWRSZWN0LCBpbnQgbWF0cml4TG9jYXRpb24pCi17Ci0gICAgV2ViVHJhbnNmb3Jt
YXRpb25NYXRyaXggcXVhZFJlY3RNYXRyaXg7Ci0gICAgcXVhZFJlY3RUcmFuc2Zvcm0oJnF1YWRS
ZWN0TWF0cml4LCBkcmF3VHJhbnNmb3JtLCBxdWFkUmVjdCk7Ci0gICAgc3RhdGljIGZsb2F0IGds
TWF0cml4WzE2XTsKLSAgICB0b0dMTWF0cml4KCZnbE1hdHJpeFswXSwgZnJhbWUucHJvamVjdGlv
bk1hdHJpeCAqIHF1YWRSZWN0TWF0cml4KTsKLSAgICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQt
PnVuaWZvcm1NYXRyaXg0ZnYobWF0cml4TG9jYXRpb24sIDEsIGZhbHNlLCAmZ2xNYXRyaXhbMF0p
KTsKLQotICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+ZHJhd0VsZW1lbnRzKEdyYXBoaWNz
Q29udGV4dDNEOjpUUklBTkdMRVMsIDYsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9S
VCwgMCkpOwotfQotCi12b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y29weVRleHR1cmVUb0Zy
YW1lYnVmZmVyKGNvbnN0IERyYXdpbmdGcmFtZSYgZnJhbWUsIGludCB0ZXh0dXJlSWQsIGNvbnN0
IEludFJlY3QmIHJlY3QsIGNvbnN0IFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiBkcmF3TWF0cml4
KQotewotICAgIGNvbnN0IFJlbmRlclBhc3NQcm9ncmFtKiBwcm9ncmFtID0gcmVuZGVyUGFzc1By
b2dyYW0oKTsKLQotICAgIEdMQyhjb250ZXh0KCksIGNvbnRleHQoKS0+YWN0aXZlVGV4dHVyZShH
cmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRTApKTsKLSAgICBHTEMoY29udGV4dCgpLCBjb250ZXh0
KCktPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCB0ZXh0dXJlSWQp
KTsKLSAgICBHTEMoY29udGV4dCgpLCBjb250ZXh0KCktPnRleFBhcmFtZXRlcmkoR3JhcGhpY3ND
b250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01JTl9GSUxU
RVIsIEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FQVIpKTsKLSAgICBHTEMoY29udGV4dCgpLCBjb250
ZXh0KCktPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBo
aWNzQ29udGV4dDNEOjpURVhUVVJFX01BR19GSUxURVIsIEdyYXBoaWNzQ29udGV4dDNEOjpMSU5F
QVIpKTsKLSAgICBHTEMoY29udGV4dCgpLCBjb250ZXh0KCktPnRleFBhcmFtZXRlcmkoR3JhcGhp
Y3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX1dSQVBf
UywgR3JhcGhpY3NDb250ZXh0M0Q6OkNMQU1QX1RPX0VER0UpKTsKLSAgICBHTEMoY29udGV4dCgp
LCBjb250ZXh0KCktPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQs
IEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX1dSQVBfVCwgR3JhcGhpY3NDb250ZXh0M0Q6OkNM
QU1QX1RPX0VER0UpKTsKLQotICAgIEdMQyhjb250ZXh0KCksIGNvbnRleHQoKS0+dXNlUHJvZ3Jh
bShwcm9ncmFtLT5wcm9ncmFtKCkpKTsKLSAgICBHTEMoY29udGV4dCgpLCBjb250ZXh0KCktPnVu
aWZvcm0xaShwcm9ncmFtLT5mcmFnbWVudFNoYWRlcigpLnNhbXBsZXJMb2NhdGlvbigpLCAwKSk7
Ci0gICAgc2V0U2hhZGVyT3BhY2l0eSgxLCBwcm9ncmFtLT5mcmFnbWVudFNoYWRlcigpLmFscGhh
TG9jYXRpb24oKSk7Ci0gICAgZHJhd1F1YWRHZW9tZXRyeShmcmFtZSwgZHJhd01hdHJpeCwgcmVj
dCwgcHJvZ3JhbS0+dmVydGV4U2hhZGVyKCkubWF0cml4TG9jYXRpb24oKSk7Ci19Ci0KLXZvaWQg
TGF5ZXJSZW5kZXJlckNocm9taXVtOjpmaW5pc2goKQotewotICAgIFRSQUNFX0VWRU5UMCgiY2Mi
LCAiTGF5ZXJSZW5kZXJlckNocm9taXVtOjpmaW5pc2giKTsKLSAgICBtX2NvbnRleHQtPmZpbmlz
aCgpOwotfQotCi1ib29sIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6c3dhcEJ1ZmZlcnMoKQotewot
ICAgIEFTU0VSVChtX3Zpc2libGUpOwotICAgIEFTU0VSVCghbV9pc0ZyYW1lYnVmZmVyRGlzY2Fy
ZGVkKTsKLQotICAgIFRSQUNFX0VWRU5UMCgiY2MiLCAiTGF5ZXJSZW5kZXJlckNocm9taXVtOjpz
d2FwQnVmZmVycyIpOwotICAgIC8vIFdlJ3JlIGRvbmUhIFRpbWUgdG8gc3dhcGJ1ZmZlcnMhCi0K
LSAgICBpZiAobV9jYXBhYmlsaXRpZXMudXNpbmdQYXJ0aWFsU3dhcCkgewotICAgICAgICAvLyBJ
ZiBzdXBwb3J0ZWQsIHdlIGNhbiBzYXZlIHNpZ25pZmljYW50IGJhbmR3aWR0aCBieSBvbmx5IHN3
YXBwaW5nIHRoZSBkYW1hZ2VkL3NjaXNzb3JlZCByZWdpb24gKGNsYW1wZWQgdG8gdGhlIHZpZXdw
b3J0KQotICAgICAgICBtX3N3YXBCdWZmZXJSZWN0LmludGVyc2VjdChJbnRSZWN0KEludFBvaW50
KCksIHZpZXdwb3J0U2l6ZSgpKSk7Ci0gICAgICAgIGludCBmbGlwcGVkWVBvc09mUmVjdEJvdHRv
bSA9IHZpZXdwb3J0SGVpZ2h0KCkgLSBtX3N3YXBCdWZmZXJSZWN0LnkoKSAtIG1fc3dhcEJ1ZmZl
clJlY3QuaGVpZ2h0KCk7Ci0gICAgICAgIG1fY29udGV4dC0+cG9zdFN1YkJ1ZmZlckNIUk9NSVVN
KG1fc3dhcEJ1ZmZlclJlY3QueCgpLCBmbGlwcGVkWVBvc09mUmVjdEJvdHRvbSwgbV9zd2FwQnVm
ZmVyUmVjdC53aWR0aCgpLCBtX3N3YXBCdWZmZXJSZWN0LmhlaWdodCgpKTsKLSAgICB9IGVsc2Ug
ewotICAgICAgICAvLyBOb3RlIHRoYXQgY3VycmVudGx5IHRoaXMgaGFzIHRoZSBzYW1lIGVmZmVj
dCBhcyBzd2FwQnVmZmVyczsgd2Ugc2hvdWxkCi0gICAgICAgIC8vIGNvbnNpZGVyIGV4cG9zaW5n
IGEgZGlmZmVyZW50IGVudHJ5IHBvaW50IG9uIFdlYkdyYXBoaWNzQ29udGV4dDNELgotICAgICAg
ICBtX2NvbnRleHQtPnByZXBhcmVUZXh0dXJlKCk7Ci0gICAgfQotCi0gICAgbV9zd2FwQnVmZmVy
UmVjdCA9IEludFJlY3QoKTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIExheWVyUmVu
ZGVyZXJDaHJvbWl1bTo6b25Td2FwQnVmZmVyc0NvbXBsZXRlKCkKLXsKLSAgICBtX2NsaWVudC0+
b25Td2FwQnVmZmVyc0NvbXBsZXRlKCk7Ci19Ci0KLXZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVt
Ojpvbk1lbW9yeUFsbG9jYXRpb25DaGFuZ2VkKFdlYkdyYXBoaWNzTWVtb3J5QWxsb2NhdGlvbiBh
bGxvY2F0aW9uKQotewotICAgIC8vIEZJWE1FOiBUaGlzIGlzIGNhbGxlZCBvbiB0aGUgbWFpbiB0
aHJlYWQgaW4gc2luZ2xlIHRocmVhZGVkIG1vZGUsIGJ1dCB3ZSBleHBlY3QgaXQgb24gdGhlIGlt
cGwgdGhyZWFkLgotICAgIGlmICghQ0NQcm94eTo6aGFzSW1wbFRocmVhZCgpKSB7Ci0gICAgICBB
U1NFUlQoQ0NQcm94eTo6aXNNYWluVGhyZWFkKCkpOwotICAgICAgRGVidWdTY29wZWRTZXRJbXBs
VGhyZWFkIGltcGw7Ci0gICAgICBvbk1lbW9yeUFsbG9jYXRpb25DaGFuZ2VkT25JbXBsVGhyZWFk
KGFsbG9jYXRpb24pOwotICAgIH0gZWxzZSB7Ci0gICAgICBBU1NFUlQoQ0NQcm94eTo6aXNJbXBs
VGhyZWFkKCkpOwotICAgICAgb25NZW1vcnlBbGxvY2F0aW9uQ2hhbmdlZE9uSW1wbFRocmVhZChh
bGxvY2F0aW9uKTsKLSAgICB9Ci19Ci0KLXZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpvbk1l
bW9yeUFsbG9jYXRpb25DaGFuZ2VkT25JbXBsVGhyZWFkKFdlYktpdDo6V2ViR3JhcGhpY3NNZW1v
cnlBbGxvY2F0aW9uIGFsbG9jYXRpb24pCi17Ci0gICAgaWYgKG1fdmlzaWJsZSAmJiAhYWxsb2Nh
dGlvbi5ncHVSZXNvdXJjZVNpemVJbkJ5dGVzKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAo
IWFsbG9jYXRpb24uc3VnZ2VzdEhhdmVCYWNrYnVmZmVyICYmICFtX3Zpc2libGUpCi0gICAgICAg
IGRpc2NhcmRGcmFtZWJ1ZmZlcigpOwotCi0gICAgaWYgKCFhbGxvY2F0aW9uLmdwdVJlc291cmNl
U2l6ZUluQnl0ZXMpIHsKLSAgICAgICAgcmVsZWFzZVJlbmRlclBhc3NUZXh0dXJlcygpOwotICAg
ICAgICBtX2NsaWVudC0+cmVsZWFzZUNvbnRlbnRzVGV4dHVyZXMoKTsKLSAgICAgICAgR0xDKG1f
Y29udGV4dCwgbV9jb250ZXh0LT5mbHVzaCgpKTsKLSAgICB9IGVsc2UKLSAgICAgICAgbV9jbGll
bnQtPnNldE1lbW9yeUFsbG9jYXRpb25MaW1pdEJ5dGVzKGFsbG9jYXRpb24uZ3B1UmVzb3VyY2VT
aXplSW5CeXRlcyk7Ci19Ci0KLXZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkaXNjYXJkRnJh
bWVidWZmZXIoKQotewotICAgIGlmIChtX2lzRnJhbWVidWZmZXJEaXNjYXJkZWQpCi0gICAgICAg
IHJldHVybjsKLQotICAgIGlmICghbV9jYXBhYmlsaXRpZXMudXNpbmdEaXNjYXJkRnJhbWVidWZm
ZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIEZJWE1FOiBVcGRhdGUgYXR0YWNobWVudHMg
YXJndW1lbnQgdG8gYXBwcm9wcmlhdGUgdmFsdWVzIG9uY2UgdGhleSBhcmUgbm8gbG9uZ2VyIGln
bm9yZWQuCi0gICAgbV9jb250ZXh0LT5kaXNjYXJkRnJhbWVidWZmZXJFWFQoR3JhcGhpY3NDb250
ZXh0M0Q6OlRFWFRVUkVfMkQsIDAsIDApOwotICAgIG1faXNGcmFtZWJ1ZmZlckRpc2NhcmRlZCA9
IHRydWU7Ci0KLSAgICAvLyBEYW1hZ2UgdHJhY2tlciBuZWVkcyBhIGZ1bGwgcmVzZXQgZXZlcnkg
dGltZSBmcmFtZWJ1ZmZlciBpcyBkaXNjYXJkZWQuCi0gICAgbV9jbGllbnQtPnNldEZ1bGxSb290
TGF5ZXJEYW1hZ2UoKTsKLX0KLQotdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmVuc3VyZUZy
YW1lYnVmZmVyKCkKLXsKLSAgICBpZiAoIW1faXNGcmFtZWJ1ZmZlckRpc2NhcmRlZCkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgaWYgKCFtX2NhcGFiaWxpdGllcy51c2luZ0Rpc2NhcmRGcmFtZWJ1
ZmZlcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9jb250ZXh0LT5lbnN1cmVGcmFtZWJ1ZmZl
ckNIUk9NSVVNKCk7Ci0gICAgbV9pc0ZyYW1lYnVmZmVyRGlzY2FyZGVkID0gZmFsc2U7Ci19Ci0K
LXZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpvbkNvbnRleHRMb3N0KCkKLXsKLSAgICBtX2Ns
aWVudC0+ZGlkTG9zZUNvbnRleHQoKTsKLX0KLQotCi12b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1
bTo6Z2V0RnJhbWVidWZmZXJQaXhlbHModm9pZCAqcGl4ZWxzLCBjb25zdCBJbnRSZWN0JiByZWN0
KQotewotICAgIEFTU0VSVChyZWN0Lm1heFgoKSA8PSB2aWV3cG9ydFdpZHRoKCkgJiYgcmVjdC5t
YXhZKCkgPD0gdmlld3BvcnRIZWlnaHQoKSk7Ci0KLSAgICBpZiAoIXBpeGVscykKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0KLSAgICBib29sIGRvV29ya2Fy
b3VuZCA9IG5lZWRzSU9TdXJmYWNlUmVhZGJhY2tXb3JrYXJvdW5kKCk7Ci0KLSAgICBQbGF0Zm9y
bTNET2JqZWN0IHRlbXBvcmFyeVRleHR1cmUgPSAwOwotICAgIFBsYXRmb3JtM0RPYmplY3QgdGVt
cG9yYXJ5RkJPID0gMDsKLQotICAgIGlmIChkb1dvcmthcm91bmQpIHsKLSAgICAgICAgLy8gT24g
TWFjIE9TIFgsIGNhbGxpbmcgZ2xSZWFkUGl4ZWxzIGFnYWluc3QgYW4gRkJPIHdob3NlIGNvbG9y
IGF0dGFjaG1lbnQgaXMgYW4KLSAgICAgICAgLy8gSU9TdXJmYWNlLWJhY2tlZCB0ZXh0dXJlIGNh
dXNlcyBjb3JydXB0aW9uIG9mIGZ1dHVyZSBnbFJlYWRQaXhlbHMgY2FsbHMsIGV2ZW4gdGhvc2Ug
b24KLSAgICAgICAgLy8gZGlmZmVyZW50IE9wZW5HTCBjb250ZXh0cy4gSXQgaXMgYmVsaWV2ZWQg
dGhhdCB0aGlzIGlzIHRoZSByb290IGNhdXNlIG9mIHRvcCBjcmFzaGVyCi0gICAgICAgIC8vIGh0
dHA6Ly9jcmJ1Zy5jb20vOTkzOTMuIDxyZGFyOi8vcHJvYmxlbS8xMDk0OTY4Nz4KLQotICAgICAg
ICB0ZW1wb3JhcnlUZXh0dXJlID0gbV9jb250ZXh0LT5jcmVhdGVUZXh0dXJlKCk7Ci0gICAgICAg
IEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6
OlRFWFRVUkVfMkQsIHRlbXBvcmFyeVRleHR1cmUpKTsKLSAgICAgICAgR0xDKG1fY29udGV4dCwg
bV9jb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBH
cmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9NSU5fRklMVEVSLCBHcmFwaGljc0NvbnRleHQzRDo6
TElORUFSKSk7Ci0gICAgICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+dGV4UGFyYW1ldGVy
aShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRV
UkVfTUFHX0ZJTFRFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVBUikpOwotICAgICAgICBHTEMo
bV9jb250ZXh0LCBtX2NvbnRleHQtPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRF
WFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX1dSQVBfUywgR3JhcGhpY3NDb250
ZXh0M0Q6OkNMQU1QX1RPX0VER0UpKTsKLSAgICAgICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0
LT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0Nv
bnRleHQzRDo6VEVYVFVSRV9XUkFQX1QsIEdyYXBoaWNzQ29udGV4dDNEOjpDTEFNUF9UT19FREdF
KSk7Ci0gICAgICAgIC8vIENvcHkgdGhlIGNvbnRlbnRzIG9mIHRoZSBjdXJyZW50IChJT1N1cmZh
Y2UtYmFja2VkKSBmcmFtZWJ1ZmZlciBpbnRvIGEgdGVtcG9yYXJ5IHRleHR1cmUuCi0gICAgICAg
IEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+Y29weVRleEltYWdlMkQoR3JhcGhpY3NDb250ZXh0
M0Q6OlRFWFRVUkVfMkQsIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCAwLCAwLCByZWN0Lm1h
eFgoKSwgcmVjdC5tYXhZKCksIDApKTsKLSAgICAgICAgdGVtcG9yYXJ5RkJPID0gbV9jb250ZXh0
LT5jcmVhdGVGcmFtZWJ1ZmZlcigpOwotICAgICAgICAvLyBBdHRhY2ggdGhpcyB0ZXh0dXJlIHRv
IGFuIEZCTywgYW5kIHBlcmZvcm0gdGhlIHJlYWRiYWNrIGZyb20gdGhhdCBGQk8uCi0gICAgICAg
IEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4
dDNEOjpGUkFNRUJVRkZFUiwgdGVtcG9yYXJ5RkJPKSk7Ci0gICAgICAgIEdMQyhtX2NvbnRleHQs
IG1fY29udGV4dC0+ZnJhbWVidWZmZXJUZXh0dXJlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1F
QlVGRkVSLCBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQVRUQUNITUVOVDAsIEdyYXBoaWNzQ29u
dGV4dDNEOjpURVhUVVJFXzJELCB0ZW1wb3JhcnlUZXh0dXJlLCAwKSk7Ci0KLSAgICAgICAgQVNT
RVJUKG1fY29udGV4dC0+Y2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhHcmFwaGljc0NvbnRleHQzRDo6
RlJBTUVCVUZGRVIpID09IEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUl9DT01QTEVURSk7
Ci0gICAgfQotCi0gICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT5yZWFkUGl4ZWxzKHJlY3Qu
eCgpLCByZWN0LnkoKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCBHcmFwaGlj
c0NvbnRleHQzRDo6VU5TSUdORURfQllURSwgcGl4ZWxzKSk7Ci0KLSAgICBpZiAoZG9Xb3JrYXJv
dW5kKSB7Ci0gICAgICAgIC8vIENsZWFuIHVwLgotICAgICAgICBHTEMobV9jb250ZXh0LCBtX2Nv
bnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIDAp
KTsKLSAgICAgICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGlj
c0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCkpOwotICAgICAgICBHTEMobV9jb250ZXh0LCBtX2Nv
bnRleHQtPmRlbGV0ZUZyYW1lYnVmZmVyKHRlbXBvcmFyeUZCTykpOwotICAgICAgICBHTEMobV9j
b250ZXh0LCBtX2NvbnRleHQtPmRlbGV0ZVRleHR1cmUodGVtcG9yYXJ5VGV4dHVyZSkpOwotICAg
IH0KLQotICAgIGlmICghbV92aXNpYmxlKSB7Ci0gICAgICAgIFRSQUNFX0VWRU5UMCgiY2MiLCAi
TGF5ZXJSZW5kZXJlckNocm9taXVtOjpnZXRGcmFtZWJ1ZmZlclBpeGVscyBkcm9wcGluZyByZXNv
dXJjZXMgYWZ0ZXIgcmVhZGJhY2siKTsKLSAgICAgICAgZGlzY2FyZEZyYW1lYnVmZmVyKCk7Ci0g
ICAgICAgIHJlbGVhc2VSZW5kZXJQYXNzVGV4dHVyZXMoKTsKLSAgICAgICAgbV9jbGllbnQtPnJl
bGVhc2VDb250ZW50c1RleHR1cmVzKCk7Ci0gICAgICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4
dC0+Zmx1c2goKSk7Ci0gICAgfQotfQotCi1ib29sIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Z2V0
RnJhbWVidWZmZXJUZXh0dXJlKENDU2NvcGVkVGV4dHVyZSogdGV4dHVyZSwgY29uc3QgSW50UmVj
dCYgZGV2aWNlUmVjdCkKLXsKLSAgICBBU1NFUlQoIXRleHR1cmUtPmlkKCkgfHwgKHRleHR1cmUt
PnNpemUoKSA9PSBkZXZpY2VSZWN0LnNpemUoKSAmJiB0ZXh0dXJlLT5mb3JtYXQoKSA9PSBHcmFw
aGljc0NvbnRleHQzRDo6UkdCKSk7Ci0KLSAgICBpZiAoIXRleHR1cmUtPmlkKCkgJiYgIXRleHR1
cmUtPmFsbG9jYXRlKENDUmVuZGVyZXI6OkltcGxQb29sLCBkZXZpY2VSZWN0LnNpemUoKSwgR3Jh
cGhpY3NDb250ZXh0M0Q6OlJHQiwgQ0NSZXNvdXJjZVByb3ZpZGVyOjpUZXh0dXJlVXNhZ2VBbnkp
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBDQ1Jlc291cmNlUHJvdmlkZXI6OlNjb3Bl
ZFdyaXRlTG9ja0dMIGxvY2sobV9yZXNvdXJjZVByb3ZpZGVyLCB0ZXh0dXJlLT5pZCgpKTsKLSAg
ICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNE
OjpURVhUVVJFXzJELCBsb2NrLnRleHR1cmVJZCgpKSk7Ci0gICAgR0xDKG1fY29udGV4dCwgbV9j
b250ZXh0LT5jb3B5VGV4SW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCwg
dGV4dHVyZS0+Zm9ybWF0KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBkZXZpY2VSZWN0LngoKSwgZGV2aWNlUmVjdC55KCksIGRldmljZVJlY3Qud2lkdGgo
KSwgZGV2aWNlUmVjdC5oZWlnaHQoKSwgMCkpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29s
IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXNlU2NvcGVkVGV4dHVyZShEcmF3aW5nRnJhbWUmIGZy
YW1lLCBjb25zdCBDQ1Njb3BlZFRleHR1cmUqIHRleHR1cmUsIGNvbnN0IEludFJlY3QmIHZpZXdw
b3J0UmVjdCkKLXsKLSAgICBBU1NFUlQodGV4dHVyZS0+aWQoKSk7Ci0gICAgZnJhbWUuY3VycmVu
dFJlbmRlclBhc3MgPSAwOwotICAgIGZyYW1lLmN1cnJlbnRUZXh0dXJlID0gdGV4dHVyZTsKLQot
ICAgIHJldHVybiBiaW5kRnJhbWVidWZmZXJUb1RleHR1cmUoZnJhbWUsIHRleHR1cmUsIHZpZXdw
b3J0UmVjdCk7Ci19Ci0KLXZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpiaW5kRnJhbWVidWZm
ZXJUb091dHB1dFN1cmZhY2UoRHJhd2luZ0ZyYW1lJiBmcmFtZSkKLXsKLSAgICBtX2N1cnJlbnRG
cmFtZWJ1ZmZlckxvY2suY2xlYXIoKTsKLSAgICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQtPmJp
bmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIDApKTsKLX0KLQot
Ym9vbCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmJpbmRGcmFtZWJ1ZmZlclRvVGV4dHVyZShEcmF3
aW5nRnJhbWUmIGZyYW1lLCBjb25zdCBDQ1Njb3BlZFRleHR1cmUqIHRleHR1cmUsIGNvbnN0IElu
dFJlY3QmIGZyYW1lYnVmZmVyUmVjdCkKLXsKLSAgICBBU1NFUlQodGV4dHVyZS0+aWQoKSk7Ci0K
LSAgICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0Nv
bnRleHQzRDo6RlJBTUVCVUZGRVIsIG1fb2Zmc2NyZWVuRnJhbWVidWZmZXJJZCkpOwotICAgIG1f
Y3VycmVudEZyYW1lYnVmZmVyTG9jayA9IGFkb3B0UHRyKG5ldyBDQ1Jlc291cmNlUHJvdmlkZXI6
OlNjb3BlZFdyaXRlTG9ja0dMKG1fcmVzb3VyY2VQcm92aWRlciwgdGV4dHVyZS0+aWQoKSkpOwot
ICAgIHVuc2lnbmVkIHRleHR1cmVJZCA9IG1fY3VycmVudEZyYW1lYnVmZmVyTG9jay0+dGV4dHVy
ZUlkKCk7Ci0gICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT5mcmFtZWJ1ZmZlclRleHR1cmUy
RChHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIEdyYXBoaWNzQ29udGV4dDNEOjpDT0xP
Ul9BVFRBQ0hNRU5UMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIHRleHR1cmVJZCwg
MCkpOwotCi0jaWYgIWRlZmluZWQgKCBOREVCVUcgKQotICAgIGlmIChtX2NvbnRleHQtPmNoZWNr
RnJhbWVidWZmZXJTdGF0dXMoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSKSAhPSBHcmFw
aGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfQ09NUExFVEUpIHsKLSAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0jZW5kaWYKLQotICAg
IGluaXRpYWxpemVNYXRyaWNlcyhmcmFtZSwgZnJhbWVidWZmZXJSZWN0LCBmYWxzZSk7Ci0gICAg
c2V0RHJhd1ZpZXdwb3J0U2l6ZShmcmFtZWJ1ZmZlclJlY3Quc2l6ZSgpKTsKLQotICAgIHJldHVy
biB0cnVlOwotfQotCi12b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZW5hYmxlU2Npc3NvclRl
c3RSZWN0KGNvbnN0IEludFJlY3QmIHNjaXNzb3JSZWN0KQotewotICAgIEdMQyhtX2NvbnRleHQs
IG1fY29udGV4dC0+ZW5hYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX1RFU1QpKTsKLSAg
ICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQtPnNjaXNzb3Ioc2Npc3NvclJlY3QueCgpLCBzY2lz
c29yUmVjdC55KCksIHNjaXNzb3JSZWN0LndpZHRoKCksIHNjaXNzb3JSZWN0LmhlaWdodCgpKSk7
Ci19Ci0KLXZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkaXNhYmxlU2Npc3NvclRlc3QoKQot
ewotICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+ZGlzYWJsZShHcmFwaGljc0NvbnRleHQz
RDo6U0NJU1NPUl9URVNUKSk7Ci19Ci0KLXZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpzZXRE
cmF3Vmlld3BvcnRTaXplKGNvbnN0IEludFNpemUmIHZpZXdwb3J0U2l6ZSkKLXsKLSAgICBHTEMo
bV9jb250ZXh0LCBtX2NvbnRleHQtPnZpZXdwb3J0KDAsIDAsIHZpZXdwb3J0U2l6ZS53aWR0aCgp
LCB2aWV3cG9ydFNpemUuaGVpZ2h0KCkpKTsKLX0KLQotYm9vbCBMYXllclJlbmRlcmVyQ2hyb21p
dW06Om1ha2VDb250ZXh0Q3VycmVudCgpCi17Ci0gICAgcmV0dXJuIG1fY29udGV4dC0+bWFrZUNv
bnRleHRDdXJyZW50KCk7Ci19Ci0KLWJvb2wgTGF5ZXJSZW5kZXJlckNocm9taXVtOjppbml0aWFs
aXplU2hhcmVkT2JqZWN0cygpCi17Ci0gICAgVFJBQ0VfRVZFTlQwKCJjYyIsICJMYXllclJlbmRl
cmVyQ2hyb21pdW06OmluaXRpYWxpemVTaGFyZWRPYmplY3RzIik7Ci0gICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7Ci0KLSAgICAvLyBDcmVhdGUgYW4gRkJPIGZvciBkb2luZyBvZmZzY3JlZW4gcmVu
ZGVyaW5nLgotICAgIEdMQyhtX2NvbnRleHQsIG1fb2Zmc2NyZWVuRnJhbWVidWZmZXJJZCA9IG1f
Y29udGV4dC0+Y3JlYXRlRnJhbWVidWZmZXIoKSk7Ci0KLSAgICAvLyBXZSB3aWxsIGFsd2F5cyBu
ZWVkIHRoZXNlIHByb2dyYW1zIHRvIHJlbmRlciwgc28gY3JlYXRlIHRoZSBwcm9ncmFtcyBlYWdl
cmx5IHNvIHRoYXQgdGhlIHNoYWRlciBjb21waWxhdGlvbiBjYW4KLSAgICAvLyBzdGFydCB3aGls
ZSB3ZSBkbyBvdGhlciB3b3JrLiBPdGhlciBwcm9ncmFtcyBhcmUgY3JlYXRlZCBsYXppbHkgb24g
Zmlyc3QgYWNjZXNzLgotICAgIG1fc2hhcmVkR2VvbWV0cnkgPSBhZG9wdFB0cihuZXcgR2VvbWV0
cnlCaW5kaW5nKG1fY29udGV4dCwgcXVhZFZlcnRleFJlY3QoKSkpOwotICAgIG1fcmVuZGVyUGFz
c1Byb2dyYW0gPSBhZG9wdFB0cihuZXcgUmVuZGVyUGFzc1Byb2dyYW0obV9jb250ZXh0KSk7Ci0g
ICAgbV90aWxlUHJvZ3JhbSA9IGFkb3B0UHRyKG5ldyBUaWxlUHJvZ3JhbShtX2NvbnRleHQpKTsK
LSAgICBtX3RpbGVQcm9ncmFtT3BhcXVlID0gYWRvcHRQdHIobmV3IFRpbGVQcm9ncmFtT3BhcXVl
KG1fY29udGV4dCkpOwotCi0gICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT5mbHVzaCgpKTsK
LQotICAgIG1fdGV4dHVyZUNvcGllciA9IEFjY2VsZXJhdGVkVGV4dHVyZUNvcGllcjo6Y3JlYXRl
KG1fY29udGV4dCwgbV9pc1VzaW5nQmluZFVuaWZvcm0pOwotICAgIGlmIChtX3RleHR1cmVVcGxv
YWRlclNldHRpbmcgPT0gVGhyb3R0bGVkVXBsb2FkZXIpCi0gICAgICAgIG1fdGV4dHVyZVVwbG9h
ZGVyID0gVGhyb3R0bGVkVGV4dHVyZVVwbG9hZGVyOjpjcmVhdGUobV9jb250ZXh0KTsKLSAgICBl
bHNlCi0gICAgICAgIG1fdGV4dHVyZVVwbG9hZGVyID0gVW50aHJvdHRsZWRUZXh0dXJlVXBsb2Fk
ZXI6OmNyZWF0ZSgpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWNvbnN0IExheWVyUmVuZGVy
ZXJDaHJvbWl1bTo6VGlsZUNoZWNrZXJib2FyZFByb2dyYW0qIExheWVyUmVuZGVyZXJDaHJvbWl1
bTo6dGlsZUNoZWNrZXJib2FyZFByb2dyYW0oKQotewotICAgIGlmICghbV90aWxlQ2hlY2tlcmJv
YXJkUHJvZ3JhbSkKLSAgICAgICAgbV90aWxlQ2hlY2tlcmJvYXJkUHJvZ3JhbSA9IGFkb3B0UHRy
KG5ldyBUaWxlQ2hlY2tlcmJvYXJkUHJvZ3JhbShtX2NvbnRleHQpKTsKLSAgICBpZiAoIW1fdGls
ZUNoZWNrZXJib2FyZFByb2dyYW0tPmluaXRpYWxpemVkKCkpIHsKLSAgICAgICAgVFJBQ0VfRVZF
TlQwKCJjYyIsICJMYXllclJlbmRlcmVyQ2hyb21pdW06OmNoZWNrZXJib2FyZFByb2dyYW06Omlu
aXRhbGl6ZSIpOwotICAgICAgICBtX3RpbGVDaGVja2VyYm9hcmRQcm9ncmFtLT5pbml0aWFsaXpl
KG1fY29udGV4dCwgbV9pc1VzaW5nQmluZFVuaWZvcm0pOwotICAgIH0KLSAgICByZXR1cm4gbV90
aWxlQ2hlY2tlcmJvYXJkUHJvZ3JhbS5nZXQoKTsKLX0KLQotY29uc3QgTGF5ZXJSZW5kZXJlckNo
cm9taXVtOjpTb2xpZENvbG9yUHJvZ3JhbSogTGF5ZXJSZW5kZXJlckNocm9taXVtOjpzb2xpZENv
bG9yUHJvZ3JhbSgpCi17Ci0gICAgaWYgKCFtX3NvbGlkQ29sb3JQcm9ncmFtKQotICAgICAgICBt
X3NvbGlkQ29sb3JQcm9ncmFtID0gYWRvcHRQdHIobmV3IFNvbGlkQ29sb3JQcm9ncmFtKG1fY29u
dGV4dCkpOwotICAgIGlmICghbV9zb2xpZENvbG9yUHJvZ3JhbS0+aW5pdGlhbGl6ZWQoKSkgewot
ICAgICAgICBUUkFDRV9FVkVOVDAoImNjIiwgIkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6c29saWRD
b2xvclByb2dyYW06OmluaXRpYWxpemUiKTsKLSAgICAgICAgbV9zb2xpZENvbG9yUHJvZ3JhbS0+
aW5pdGlhbGl6ZShtX2NvbnRleHQsIG1faXNVc2luZ0JpbmRVbmlmb3JtKTsKLSAgICB9Ci0gICAg
cmV0dXJuIG1fc29saWRDb2xvclByb2dyYW0uZ2V0KCk7Ci19Ci0KLWNvbnN0IExheWVyUmVuZGVy
ZXJDaHJvbWl1bTo6UmVuZGVyUGFzc1Byb2dyYW0qIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6cmVu
ZGVyUGFzc1Byb2dyYW0oKQotewotICAgIEFTU0VSVChtX3JlbmRlclBhc3NQcm9ncmFtKTsKLSAg
ICBpZiAoIW1fcmVuZGVyUGFzc1Byb2dyYW0tPmluaXRpYWxpemVkKCkpIHsKLSAgICAgICAgVFJB
Q0VfRVZFTlQwKCJjYyIsICJMYXllclJlbmRlcmVyQ2hyb21pdW06OnJlbmRlclBhc3NQcm9ncmFt
Ojppbml0aWFsaXplIik7Ci0gICAgICAgIG1fcmVuZGVyUGFzc1Byb2dyYW0tPmluaXRpYWxpemUo
bV9jb250ZXh0LCBtX2lzVXNpbmdCaW5kVW5pZm9ybSk7Ci0gICAgfQotICAgIHJldHVybiBtX3Jl
bmRlclBhc3NQcm9ncmFtLmdldCgpOwotfQotCi1jb25zdCBMYXllclJlbmRlcmVyQ2hyb21pdW06
OlJlbmRlclBhc3NQcm9ncmFtQUEqIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6cmVuZGVyUGFzc1By
b2dyYW1BQSgpCi17Ci0gICAgaWYgKCFtX3JlbmRlclBhc3NQcm9ncmFtQUEpCi0gICAgICAgIG1f
cmVuZGVyUGFzc1Byb2dyYW1BQSA9IGFkb3B0UHRyKG5ldyBSZW5kZXJQYXNzUHJvZ3JhbUFBKG1f
Y29udGV4dCkpOwotICAgIGlmICghbV9yZW5kZXJQYXNzUHJvZ3JhbUFBLT5pbml0aWFsaXplZCgp
KSB7Ci0gICAgICAgIFRSQUNFX0VWRU5UMCgiY2MiLCAiTGF5ZXJSZW5kZXJlckNocm9taXVtOjpy
ZW5kZXJQYXNzUHJvZ3JhbUFBOjppbml0aWFsaXplIik7Ci0gICAgICAgIG1fcmVuZGVyUGFzc1By
b2dyYW1BQS0+aW5pdGlhbGl6ZShtX2NvbnRleHQsIG1faXNVc2luZ0JpbmRVbmlmb3JtKTsKLSAg
ICB9Ci0gICAgcmV0dXJuIG1fcmVuZGVyUGFzc1Byb2dyYW1BQS5nZXQoKTsKLX0KLQotY29uc3Qg
TGF5ZXJSZW5kZXJlckNocm9taXVtOjpSZW5kZXJQYXNzTWFza1Byb2dyYW0qIExheWVyUmVuZGVy
ZXJDaHJvbWl1bTo6cmVuZGVyUGFzc01hc2tQcm9ncmFtKCkKLXsKLSAgICBpZiAoIW1fcmVuZGVy
UGFzc01hc2tQcm9ncmFtKQotICAgICAgICBtX3JlbmRlclBhc3NNYXNrUHJvZ3JhbSA9IGFkb3B0
UHRyKG5ldyBSZW5kZXJQYXNzTWFza1Byb2dyYW0obV9jb250ZXh0KSk7Ci0gICAgaWYgKCFtX3Jl
bmRlclBhc3NNYXNrUHJvZ3JhbS0+aW5pdGlhbGl6ZWQoKSkgewotICAgICAgICBUUkFDRV9FVkVO
VDAoImNjIiwgIkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6cmVuZGVyUGFzc01hc2tQcm9ncmFtOjpp
bml0aWFsaXplIik7Ci0gICAgICAgIG1fcmVuZGVyUGFzc01hc2tQcm9ncmFtLT5pbml0aWFsaXpl
KG1fY29udGV4dCwgbV9pc1VzaW5nQmluZFVuaWZvcm0pOwotICAgIH0KLSAgICByZXR1cm4gbV9y
ZW5kZXJQYXNzTWFza1Byb2dyYW0uZ2V0KCk7Ci19Ci0KLWNvbnN0IExheWVyUmVuZGVyZXJDaHJv
bWl1bTo6UmVuZGVyUGFzc01hc2tQcm9ncmFtQUEqIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6cmVu
ZGVyUGFzc01hc2tQcm9ncmFtQUEoKQotewotICAgIGlmICghbV9yZW5kZXJQYXNzTWFza1Byb2dy
YW1BQSkKLSAgICAgICAgbV9yZW5kZXJQYXNzTWFza1Byb2dyYW1BQSA9IGFkb3B0UHRyKG5ldyBS
ZW5kZXJQYXNzTWFza1Byb2dyYW1BQShtX2NvbnRleHQpKTsKLSAgICBpZiAoIW1fcmVuZGVyUGFz
c01hc2tQcm9ncmFtQUEtPmluaXRpYWxpemVkKCkpIHsKLSAgICAgICAgVFJBQ0VfRVZFTlQwKCJj
YyIsICJMYXllclJlbmRlcmVyQ2hyb21pdW06OnJlbmRlclBhc3NNYXNrUHJvZ3JhbUFBOjppbml0
aWFsaXplIik7Ci0gICAgICAgIG1fcmVuZGVyUGFzc01hc2tQcm9ncmFtQUEtPmluaXRpYWxpemUo
bV9jb250ZXh0LCBtX2lzVXNpbmdCaW5kVW5pZm9ybSk7Ci0gICAgfQotICAgIHJldHVybiBtX3Jl
bmRlclBhc3NNYXNrUHJvZ3JhbUFBLmdldCgpOwotfQotCi1jb25zdCBMYXllclJlbmRlcmVyQ2hy
b21pdW06OlRpbGVQcm9ncmFtKiBMYXllclJlbmRlcmVyQ2hyb21pdW06OnRpbGVQcm9ncmFtKCkK
LXsKLSAgICBBU1NFUlQobV90aWxlUHJvZ3JhbSk7Ci0gICAgaWYgKCFtX3RpbGVQcm9ncmFtLT5p
bml0aWFsaXplZCgpKSB7Ci0gICAgICAgIFRSQUNFX0VWRU5UMCgiY2MiLCAiTGF5ZXJSZW5kZXJl
ckNocm9taXVtOjp0aWxlUHJvZ3JhbTo6aW5pdGlhbGl6ZSIpOwotICAgICAgICBtX3RpbGVQcm9n
cmFtLT5pbml0aWFsaXplKG1fY29udGV4dCwgbV9pc1VzaW5nQmluZFVuaWZvcm0pOwotICAgIH0K
LSAgICByZXR1cm4gbV90aWxlUHJvZ3JhbS5nZXQoKTsKLX0KLQotY29uc3QgTGF5ZXJSZW5kZXJl
ckNocm9taXVtOjpUaWxlUHJvZ3JhbU9wYXF1ZSogTGF5ZXJSZW5kZXJlckNocm9taXVtOjp0aWxl
UHJvZ3JhbU9wYXF1ZSgpCi17Ci0gICAgQVNTRVJUKG1fdGlsZVByb2dyYW1PcGFxdWUpOwotICAg
IGlmICghbV90aWxlUHJvZ3JhbU9wYXF1ZS0+aW5pdGlhbGl6ZWQoKSkgewotICAgICAgICBUUkFD
RV9FVkVOVDAoImNjIiwgIkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6dGlsZVByb2dyYW1PcGFxdWU6
OmluaXRpYWxpemUiKTsKLSAgICAgICAgbV90aWxlUHJvZ3JhbU9wYXF1ZS0+aW5pdGlhbGl6ZSht
X2NvbnRleHQsIG1faXNVc2luZ0JpbmRVbmlmb3JtKTsKLSAgICB9Ci0gICAgcmV0dXJuIG1fdGls
ZVByb2dyYW1PcGFxdWUuZ2V0KCk7Ci19Ci0KLWNvbnN0IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6
VGlsZVByb2dyYW1BQSogTGF5ZXJSZW5kZXJlckNocm9taXVtOjp0aWxlUHJvZ3JhbUFBKCkKLXsK
LSAgICBpZiAoIW1fdGlsZVByb2dyYW1BQSkKLSAgICAgICAgbV90aWxlUHJvZ3JhbUFBID0gYWRv
cHRQdHIobmV3IFRpbGVQcm9ncmFtQUEobV9jb250ZXh0KSk7Ci0gICAgaWYgKCFtX3RpbGVQcm9n
cmFtQUEtPmluaXRpYWxpemVkKCkpIHsKLSAgICAgICAgVFJBQ0VfRVZFTlQwKCJjYyIsICJMYXll
clJlbmRlcmVyQ2hyb21pdW06OnRpbGVQcm9ncmFtQUE6OmluaXRpYWxpemUiKTsKLSAgICAgICAg
bV90aWxlUHJvZ3JhbUFBLT5pbml0aWFsaXplKG1fY29udGV4dCwgbV9pc1VzaW5nQmluZFVuaWZv
cm0pOwotICAgIH0KLSAgICByZXR1cm4gbV90aWxlUHJvZ3JhbUFBLmdldCgpOwotfQotCi1jb25z
dCBMYXllclJlbmRlcmVyQ2hyb21pdW06OlRpbGVQcm9ncmFtU3dpenpsZSogTGF5ZXJSZW5kZXJl
ckNocm9taXVtOjp0aWxlUHJvZ3JhbVN3aXp6bGUoKQotewotICAgIGlmICghbV90aWxlUHJvZ3Jh
bVN3aXp6bGUpCi0gICAgICAgIG1fdGlsZVByb2dyYW1Td2l6emxlID0gYWRvcHRQdHIobmV3IFRp
bGVQcm9ncmFtU3dpenpsZShtX2NvbnRleHQpKTsKLSAgICBpZiAoIW1fdGlsZVByb2dyYW1Td2l6
emxlLT5pbml0aWFsaXplZCgpKSB7Ci0gICAgICAgIFRSQUNFX0VWRU5UMCgiY2MiLCAiTGF5ZXJS
ZW5kZXJlckNocm9taXVtOjp0aWxlUHJvZ3JhbVN3aXp6bGU6OmluaXRpYWxpemUiKTsKLSAgICAg
ICAgbV90aWxlUHJvZ3JhbVN3aXp6bGUtPmluaXRpYWxpemUobV9jb250ZXh0LCBtX2lzVXNpbmdC
aW5kVW5pZm9ybSk7Ci0gICAgfQotICAgIHJldHVybiBtX3RpbGVQcm9ncmFtU3dpenpsZS5nZXQo
KTsKLX0KLQotY29uc3QgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpUaWxlUHJvZ3JhbVN3aXp6bGVP
cGFxdWUqIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dGlsZVByb2dyYW1Td2l6emxlT3BhcXVlKCkK
LXsKLSAgICBpZiAoIW1fdGlsZVByb2dyYW1Td2l6emxlT3BhcXVlKQotICAgICAgICBtX3RpbGVQ
cm9ncmFtU3dpenpsZU9wYXF1ZSA9IGFkb3B0UHRyKG5ldyBUaWxlUHJvZ3JhbVN3aXp6bGVPcGFx
dWUobV9jb250ZXh0KSk7Ci0gICAgaWYgKCFtX3RpbGVQcm9ncmFtU3dpenpsZU9wYXF1ZS0+aW5p
dGlhbGl6ZWQoKSkgewotICAgICAgICBUUkFDRV9FVkVOVDAoImNjIiwgIkxheWVyUmVuZGVyZXJD
aHJvbWl1bTo6dGlsZVByb2dyYW1Td2l6emxlT3BhcXVlOjppbml0aWFsaXplIik7Ci0gICAgICAg
IG1fdGlsZVByb2dyYW1Td2l6emxlT3BhcXVlLT5pbml0aWFsaXplKG1fY29udGV4dCwgbV9pc1Vz
aW5nQmluZFVuaWZvcm0pOwotICAgIH0KLSAgICByZXR1cm4gbV90aWxlUHJvZ3JhbVN3aXp6bGVP
cGFxdWUuZ2V0KCk7Ci19Ci0KLWNvbnN0IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6VGlsZVByb2dy
YW1Td2l6emxlQUEqIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dGlsZVByb2dyYW1Td2l6emxlQUEo
KQotewotICAgIGlmICghbV90aWxlUHJvZ3JhbVN3aXp6bGVBQSkKLSAgICAgICAgbV90aWxlUHJv
Z3JhbVN3aXp6bGVBQSA9IGFkb3B0UHRyKG5ldyBUaWxlUHJvZ3JhbVN3aXp6bGVBQShtX2NvbnRl
eHQpKTsKLSAgICBpZiAoIW1fdGlsZVByb2dyYW1Td2l6emxlQUEtPmluaXRpYWxpemVkKCkpIHsK
LSAgICAgICAgVFJBQ0VfRVZFTlQwKCJjYyIsICJMYXllclJlbmRlcmVyQ2hyb21pdW06OnRpbGVQ
cm9ncmFtU3dpenpsZUFBOjppbml0aWFsaXplIik7Ci0gICAgICAgIG1fdGlsZVByb2dyYW1Td2l6
emxlQUEtPmluaXRpYWxpemUobV9jb250ZXh0LCBtX2lzVXNpbmdCaW5kVW5pZm9ybSk7Ci0gICAg
fQotICAgIHJldHVybiBtX3RpbGVQcm9ncmFtU3dpenpsZUFBLmdldCgpOwotfQotCi1jb25zdCBM
YXllclJlbmRlcmVyQ2hyb21pdW06OlRleHR1cmVQcm9ncmFtKiBMYXllclJlbmRlcmVyQ2hyb21p
dW06OnRleHR1cmVQcm9ncmFtKCkKLXsKLSAgICBpZiAoIW1fdGV4dHVyZVByb2dyYW0pCi0gICAg
ICAgIG1fdGV4dHVyZVByb2dyYW0gPSBhZG9wdFB0cihuZXcgVGV4dHVyZVByb2dyYW0obV9jb250
ZXh0KSk7Ci0gICAgaWYgKCFtX3RleHR1cmVQcm9ncmFtLT5pbml0aWFsaXplZCgpKSB7Ci0gICAg
ICAgIFRSQUNFX0VWRU5UMCgiY2MiLCAiTGF5ZXJSZW5kZXJlckNocm9taXVtOjp0ZXh0dXJlUHJv
Z3JhbTo6aW5pdGlhbGl6ZSIpOwotICAgICAgICBtX3RleHR1cmVQcm9ncmFtLT5pbml0aWFsaXpl
KG1fY29udGV4dCwgbV9pc1VzaW5nQmluZFVuaWZvcm0pOwotICAgIH0KLSAgICByZXR1cm4gbV90
ZXh0dXJlUHJvZ3JhbS5nZXQoKTsKLX0KLQotY29uc3QgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpU
ZXh0dXJlUHJvZ3JhbUZsaXAqIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dGV4dHVyZVByb2dyYW1G
bGlwKCkKLXsKLSAgICBpZiAoIW1fdGV4dHVyZVByb2dyYW1GbGlwKQotICAgICAgICBtX3RleHR1
cmVQcm9ncmFtRmxpcCA9IGFkb3B0UHRyKG5ldyBUZXh0dXJlUHJvZ3JhbUZsaXAobV9jb250ZXh0
KSk7Ci0gICAgaWYgKCFtX3RleHR1cmVQcm9ncmFtRmxpcC0+aW5pdGlhbGl6ZWQoKSkgewotICAg
ICAgICBUUkFDRV9FVkVOVDAoImNjIiwgIkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6dGV4dHVyZVBy
b2dyYW1GbGlwOjppbml0aWFsaXplIik7Ci0gICAgICAgIG1fdGV4dHVyZVByb2dyYW1GbGlwLT5p
bml0aWFsaXplKG1fY29udGV4dCwgbV9pc1VzaW5nQmluZFVuaWZvcm0pOwotICAgIH0KLSAgICBy
ZXR1cm4gbV90ZXh0dXJlUHJvZ3JhbUZsaXAuZ2V0KCk7Ci19Ci0KLWNvbnN0IExheWVyUmVuZGVy
ZXJDaHJvbWl1bTo6VGV4dHVyZUlPU3VyZmFjZVByb2dyYW0qIExheWVyUmVuZGVyZXJDaHJvbWl1
bTo6dGV4dHVyZUlPU3VyZmFjZVByb2dyYW0oKQotewotICAgIGlmICghbV90ZXh0dXJlSU9TdXJm
YWNlUHJvZ3JhbSkKLSAgICAgICAgbV90ZXh0dXJlSU9TdXJmYWNlUHJvZ3JhbSA9IGFkb3B0UHRy
KG5ldyBUZXh0dXJlSU9TdXJmYWNlUHJvZ3JhbShtX2NvbnRleHQpKTsKLSAgICBpZiAoIW1fdGV4
dHVyZUlPU3VyZmFjZVByb2dyYW0tPmluaXRpYWxpemVkKCkpIHsKLSAgICAgICAgVFJBQ0VfRVZF
TlQwKCJjYyIsICJMYXllclJlbmRlcmVyQ2hyb21pdW06OnRleHR1cmVJT1N1cmZhY2VQcm9ncmFt
Ojppbml0aWFsaXplIik7Ci0gICAgICAgIG1fdGV4dHVyZUlPU3VyZmFjZVByb2dyYW0tPmluaXRp
YWxpemUobV9jb250ZXh0LCBtX2lzVXNpbmdCaW5kVW5pZm9ybSk7Ci0gICAgfQotICAgIHJldHVy
biBtX3RleHR1cmVJT1N1cmZhY2VQcm9ncmFtLmdldCgpOwotfQotCi1jb25zdCBMYXllclJlbmRl
cmVyQ2hyb21pdW06OlZpZGVvWVVWUHJvZ3JhbSogTGF5ZXJSZW5kZXJlckNocm9taXVtOjp2aWRl
b1lVVlByb2dyYW0oKQotewotICAgIGlmICghbV92aWRlb1lVVlByb2dyYW0pCi0gICAgICAgIG1f
dmlkZW9ZVVZQcm9ncmFtID0gYWRvcHRQdHIobmV3IFZpZGVvWVVWUHJvZ3JhbShtX2NvbnRleHQp
KTsKLSAgICBpZiAoIW1fdmlkZW9ZVVZQcm9ncmFtLT5pbml0aWFsaXplZCgpKSB7Ci0gICAgICAg
IFRSQUNFX0VWRU5UMCgiY2MiLCAiTGF5ZXJSZW5kZXJlckNocm9taXVtOjp2aWRlb1lVVlByb2dy
YW06OmluaXRpYWxpemUiKTsKLSAgICAgICAgbV92aWRlb1lVVlByb2dyYW0tPmluaXRpYWxpemUo
bV9jb250ZXh0LCBtX2lzVXNpbmdCaW5kVW5pZm9ybSk7Ci0gICAgfQotICAgIHJldHVybiBtX3Zp
ZGVvWVVWUHJvZ3JhbS5nZXQoKTsKLX0KLQotY29uc3QgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpW
aWRlb1N0cmVhbVRleHR1cmVQcm9ncmFtKiBMYXllclJlbmRlcmVyQ2hyb21pdW06OnZpZGVvU3Ry
ZWFtVGV4dHVyZVByb2dyYW0oKQotewotICAgIGlmICghbV92aWRlb1N0cmVhbVRleHR1cmVQcm9n
cmFtKQotICAgICAgICBtX3ZpZGVvU3RyZWFtVGV4dHVyZVByb2dyYW0gPSBhZG9wdFB0cihuZXcg
VmlkZW9TdHJlYW1UZXh0dXJlUHJvZ3JhbShtX2NvbnRleHQpKTsKLSAgICBpZiAoIW1fdmlkZW9T
dHJlYW1UZXh0dXJlUHJvZ3JhbS0+aW5pdGlhbGl6ZWQoKSkgewotICAgICAgICBUUkFDRV9FVkVO
VDAoImNjIiwgIkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6c3RyZWFtVGV4dHVyZVByb2dyYW06Omlu
aXRpYWxpemUiKTsKLSAgICAgICAgbV92aWRlb1N0cmVhbVRleHR1cmVQcm9ncmFtLT5pbml0aWFs
aXplKG1fY29udGV4dCwgbV9pc1VzaW5nQmluZFVuaWZvcm0pOwotICAgIH0KLSAgICByZXR1cm4g
bV92aWRlb1N0cmVhbVRleHR1cmVQcm9ncmFtLmdldCgpOwotfQotCi12b2lkIExheWVyUmVuZGVy
ZXJDaHJvbWl1bTo6Y2xlYW51cFNoYXJlZE9iamVjdHMoKQotewotICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOwotCi0gICAgbV9zaGFyZWRHZW9tZXRyeS5jbGVhcigpOwotCi0gICAgaWYgKG1fdGls
ZVByb2dyYW0pCi0gICAgICAgIG1fdGlsZVByb2dyYW0tPmNsZWFudXAobV9jb250ZXh0KTsKLSAg
ICBpZiAobV90aWxlUHJvZ3JhbU9wYXF1ZSkKLSAgICAgICAgbV90aWxlUHJvZ3JhbU9wYXF1ZS0+
Y2xlYW51cChtX2NvbnRleHQpOwotICAgIGlmIChtX3RpbGVQcm9ncmFtU3dpenpsZSkKLSAgICAg
ICAgbV90aWxlUHJvZ3JhbVN3aXp6bGUtPmNsZWFudXAobV9jb250ZXh0KTsKLSAgICBpZiAobV90
aWxlUHJvZ3JhbVN3aXp6bGVPcGFxdWUpCi0gICAgICAgIG1fdGlsZVByb2dyYW1Td2l6emxlT3Bh
cXVlLT5jbGVhbnVwKG1fY29udGV4dCk7Ci0gICAgaWYgKG1fdGlsZVByb2dyYW1BQSkKLSAgICAg
ICAgbV90aWxlUHJvZ3JhbUFBLT5jbGVhbnVwKG1fY29udGV4dCk7Ci0gICAgaWYgKG1fdGlsZVBy
b2dyYW1Td2l6emxlQUEpCi0gICAgICAgIG1fdGlsZVByb2dyYW1Td2l6emxlQUEtPmNsZWFudXAo
bV9jb250ZXh0KTsKLSAgICBpZiAobV90aWxlQ2hlY2tlcmJvYXJkUHJvZ3JhbSkKLSAgICAgICAg
bV90aWxlQ2hlY2tlcmJvYXJkUHJvZ3JhbS0+Y2xlYW51cChtX2NvbnRleHQpOwotCi0gICAgaWYg
KG1fcmVuZGVyUGFzc01hc2tQcm9ncmFtKQotICAgICAgICBtX3JlbmRlclBhc3NNYXNrUHJvZ3Jh
bS0+Y2xlYW51cChtX2NvbnRleHQpOwotICAgIGlmIChtX3JlbmRlclBhc3NQcm9ncmFtKQotICAg
ICAgICBtX3JlbmRlclBhc3NQcm9ncmFtLT5jbGVhbnVwKG1fY29udGV4dCk7Ci0gICAgaWYgKG1f
cmVuZGVyUGFzc01hc2tQcm9ncmFtQUEpCi0gICAgICAgIG1fcmVuZGVyUGFzc01hc2tQcm9ncmFt
QUEtPmNsZWFudXAobV9jb250ZXh0KTsKLSAgICBpZiAobV9yZW5kZXJQYXNzUHJvZ3JhbUFBKQot
ICAgICAgICBtX3JlbmRlclBhc3NQcm9ncmFtQUEtPmNsZWFudXAobV9jb250ZXh0KTsKLQotICAg
IGlmIChtX3RleHR1cmVQcm9ncmFtKQotICAgICAgICBtX3RleHR1cmVQcm9ncmFtLT5jbGVhbnVw
KG1fY29udGV4dCk7Ci0gICAgaWYgKG1fdGV4dHVyZVByb2dyYW1GbGlwKQotICAgICAgICBtX3Rl
eHR1cmVQcm9ncmFtRmxpcC0+Y2xlYW51cChtX2NvbnRleHQpOwotICAgIGlmIChtX3RleHR1cmVJ
T1N1cmZhY2VQcm9ncmFtKQotICAgICAgICBtX3RleHR1cmVJT1N1cmZhY2VQcm9ncmFtLT5jbGVh
bnVwKG1fY29udGV4dCk7Ci0KLSAgICBpZiAobV92aWRlb1lVVlByb2dyYW0pCi0gICAgICAgIG1f
dmlkZW9ZVVZQcm9ncmFtLT5jbGVhbnVwKG1fY29udGV4dCk7Ci0gICAgaWYgKG1fdmlkZW9TdHJl
YW1UZXh0dXJlUHJvZ3JhbSkKLSAgICAgICAgbV92aWRlb1N0cmVhbVRleHR1cmVQcm9ncmFtLT5j
bGVhbnVwKG1fY29udGV4dCk7Ci0KLSAgICBpZiAobV9zb2xpZENvbG9yUHJvZ3JhbSkKLSAgICAg
ICAgbV9zb2xpZENvbG9yUHJvZ3JhbS0+Y2xlYW51cChtX2NvbnRleHQpOwotCi0gICAgaWYgKG1f
b2Zmc2NyZWVuRnJhbWVidWZmZXJJZCkKLSAgICAgICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0
LT5kZWxldGVGcmFtZWJ1ZmZlcihtX29mZnNjcmVlbkZyYW1lYnVmZmVySWQpKTsKLQotICAgIG1f
dGV4dHVyZUNvcGllci5jbGVhcigpOwotICAgIG1fdGV4dHVyZVVwbG9hZGVyLmNsZWFyKCk7Ci0K
LSAgICByZWxlYXNlUmVuZGVyUGFzc1RleHR1cmVzKCk7Ci19Ci0KLWJvb2wgTGF5ZXJSZW5kZXJl
ckNocm9taXVtOjppc0NvbnRleHRMb3N0KCkKLXsKLSAgICByZXR1cm4gKG1fY29udGV4dC0+Z2V0
R3JhcGhpY3NSZXNldFN0YXR1c0FSQigpICE9IEdyYXBoaWNzQ29udGV4dDNEOjpOT19FUlJPUik7
Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRF
RF9DT01QT1NJVElORykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmgKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM1NzVjMTkzZDc3MDI0NWZjOGVhNGYwMzgzOTNiZTgxNmI5
Yjg3ZTAuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9t
aXVtLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyNzEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0g
KiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAot
ICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLQotI2lmbmRlZiBMYXllclJlbmRl
cmVyQ2hyb21pdW1faAotI2RlZmluZSBMYXllclJlbmRlcmVyQ2hyb21pdW1faAotCi0jaWYgVVNF
KEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotCi0jaW5jbHVkZSAiQ0NDaGVja2VyYm9hcmREcmF3
UXVhZC5oIgotI2luY2x1ZGUgIkNDRGVidWdCb3JkZXJEcmF3UXVhZC5oIgotI2luY2x1ZGUgIkND
RGlyZWN0UmVuZGVyZXIuaCIKLSNpbmNsdWRlICJDQ0lPU3VyZmFjZURyYXdRdWFkLmgiCi0jaW5j
bHVkZSAiQ0NSZW5kZXJQYXNzRHJhd1F1YWQuaCIKLSNpbmNsdWRlICJDQ1JlbmRlcmVyLmgiCi0j
aW5jbHVkZSAiQ0NTb2xpZENvbG9yRHJhd1F1YWQuaCIKLSNpbmNsdWRlICJDQ1N0cmVhbVZpZGVv
RHJhd1F1YWQuaCIKLSNpbmNsdWRlICJDQ1RleHR1cmVEcmF3UXVhZC5oIgotI2luY2x1ZGUgIkND
VGlsZURyYXdRdWFkLmgiCi0jaW5jbHVkZSAiQ0NZVVZWaWRlb0RyYXdRdWFkLmgiCi0jaW5jbHVk
ZSAiRXh0ZW5zaW9uczNEQ2hyb21pdW0uaCIKLSNpbmNsdWRlICJUZXh0dXJlQ29waWVyLmgiCi0j
aW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci1jbGFzcyBX
ZWJHcmFwaGljc0NvbnRleHQzRDsKLX0KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBD
Q1Njb3BlZFRleHR1cmU7Ci1jbGFzcyBHZW9tZXRyeUJpbmRpbmc7Ci1jbGFzcyBTY29wZWRFbnN1
cmVGcmFtZWJ1ZmZlckFsbG9jYXRpb247Ci0KLS8vIENsYXNzIHRoYXQgaGFuZGxlcyBkcmF3aW5n
IG9mIGNvbXBvc2l0ZWQgcmVuZGVyIGxheWVycyB1c2luZyBHTC4KLWNsYXNzIExheWVyUmVuZGVy
ZXJDaHJvbWl1bSA6IHB1YmxpYyBDQ0RpcmVjdFJlbmRlcmVyLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcHVibGljIFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0Q6OldlYkdyYXBo
aWNzU3dhcEJ1ZmZlcnNDb21wbGV0ZUNhbGxiYWNrQ0hST01JVU0sCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBwdWJsaWMgV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRDo6V2ViR3Jh
cGhpY3NNZW1vcnlBbGxvY2F0aW9uQ2hhbmdlZENhbGxiYWNrQ0hST01JVU0gLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcHVibGljIFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0Q6
OldlYkdyYXBoaWNzQ29udGV4dExvc3RDYWxsYmFjayB7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFC
TEUoTGF5ZXJSZW5kZXJlckNocm9taXVtKTsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0
cjxMYXllclJlbmRlcmVyQ2hyb21pdW0+IGNyZWF0ZShDQ1JlbmRlcmVyQ2xpZW50KiwgQ0NSZXNv
dXJjZVByb3ZpZGVyKiwgVGV4dHVyZVVwbG9hZGVyT3B0aW9uKTsKLQotICAgIHZpcnR1YWwgfkxh
eWVyUmVuZGVyZXJDaHJvbWl1bSgpOwotCi0gICAgdmlydHVhbCBjb25zdCBMYXllclJlbmRlcmVy
Q2FwYWJpbGl0aWVzJiBjYXBhYmlsaXRpZXMoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBtX2Nh
cGFiaWxpdGllczsgfQotCi0gICAgV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRCogY29udGV4
dCgpOwotCi0gICAgdmlydHVhbCB2b2lkIHZpZXdwb3J0Q2hhbmdlZCgpIE9WRVJSSURFOwotCi0g
ICAgY29uc3QgRmxvYXRRdWFkJiBzaGFyZWRHZW9tZXRyeVF1YWQoKSBjb25zdCB7IHJldHVybiBt
X3NoYXJlZEdlb21ldHJ5UXVhZDsgfQotCi0gICAgLy8gd2FpdHMgZm9yIHJlbmRlcmluZyB0byBm
aW5pc2gKLSAgICB2aXJ0dWFsIHZvaWQgZmluaXNoKCkgT1ZFUlJJREU7Ci0KLSAgICB2aXJ0dWFs
IHZvaWQgZG9Ob09wKCkgT1ZFUlJJREU7Ci0gICAgLy8gcHV0cyBiYWNrYnVmZmVyIG9uc2NyZWVu
Ci0gICAgdmlydHVhbCBib29sIHN3YXBCdWZmZXJzKCkgT1ZFUlJJREU7Ci0KLSAgICBzdGF0aWMg
dm9pZCBkZWJ1Z0dMQ2FsbChXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNEKiwgY29uc3QgY2hh
ciogY29tbWFuZCwgY29uc3QgY2hhciogZmlsZSwgaW50IGxpbmUpOwotCi0gICAgY29uc3QgR2Vv
bWV0cnlCaW5kaW5nKiBzaGFyZWRHZW9tZXRyeSgpIGNvbnN0IHsgcmV0dXJuIG1fc2hhcmVkR2Vv
bWV0cnkuZ2V0KCk7IH0KLQotICAgIHZpcnR1YWwgdm9pZCBnZXRGcmFtZWJ1ZmZlclBpeGVscyh2
b2lkICpwaXhlbHMsIGNvbnN0IEludFJlY3QmKSBPVkVSUklERTsKLSAgICBib29sIGdldEZyYW1l
YnVmZmVyVGV4dHVyZShDQ1Njb3BlZFRleHR1cmUqLCBjb25zdCBJbnRSZWN0JiBkZXZpY2VSZWN0
KTsKLQotICAgIHZpcnR1YWwgVGV4dHVyZUNvcGllciogdGV4dHVyZUNvcGllcigpIGNvbnN0IE9W
RVJSSURFIHsgcmV0dXJuIG1fdGV4dHVyZUNvcGllci5nZXQoKTsgfQotICAgIHZpcnR1YWwgVGV4
dHVyZVVwbG9hZGVyKiB0ZXh0dXJlVXBsb2FkZXIoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBt
X3RleHR1cmVVcGxvYWRlci5nZXQoKTsgfQotCi0gICAgdmlydHVhbCBib29sIGlzQ29udGV4dExv
c3QoKSBPVkVSUklERTsKLQotICAgIHZpcnR1YWwgdm9pZCBzZXRWaXNpYmxlKGJvb2wpIE9WRVJS
SURFOwotCi1wcm90ZWN0ZWQ6Ci0gICAgTGF5ZXJSZW5kZXJlckNocm9taXVtKENDUmVuZGVyZXJD
bGllbnQqLCBDQ1Jlc291cmNlUHJvdmlkZXIqLCBUZXh0dXJlVXBsb2FkZXJPcHRpb24pOwotCi0g
ICAgYm9vbCBpc0ZyYW1lYnVmZmVyRGlzY2FyZGVkKCkgY29uc3QgeyByZXR1cm4gbV9pc0ZyYW1l
YnVmZmVyRGlzY2FyZGVkOyB9Ci0gICAgYm9vbCBpbml0aWFsaXplKCk7Ci0KLSAgICB2b2lkIHJl
bGVhc2VSZW5kZXJQYXNzVGV4dHVyZXMoKTsKLQotICAgIHZpcnR1YWwgdm9pZCBiaW5kRnJhbWVi
dWZmZXJUb091dHB1dFN1cmZhY2UoRHJhd2luZ0ZyYW1lJikgT1ZFUlJJREU7Ci0gICAgdmlydHVh
bCBib29sIGJpbmRGcmFtZWJ1ZmZlclRvVGV4dHVyZShEcmF3aW5nRnJhbWUmLCBjb25zdCBDQ1Nj
b3BlZFRleHR1cmUqLCBjb25zdCBJbnRSZWN0JiBmcmFtZWJ1ZmZlclJlY3QpIE9WRVJSSURFOwot
ICAgIHZpcnR1YWwgdm9pZCBzZXREcmF3Vmlld3BvcnRTaXplKGNvbnN0IEludFNpemUmKSBPVkVS
UklERTsKLSAgICB2aXJ0dWFsIHZvaWQgZW5hYmxlU2Npc3NvclRlc3RSZWN0KGNvbnN0IEludFJl
Y3QmIHNjaXNzb3JSZWN0KSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlzYWJsZVNjaXNz
b3JUZXN0KCkgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIGNsZWFyRnJhbWVidWZmZXIoRHJh
d2luZ0ZyYW1lJikgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIGRyYXdRdWFkKERyYXdpbmdG
cmFtZSYsIGNvbnN0IENDRHJhd1F1YWQqKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgYmVn
aW5EcmF3aW5nRnJhbWUoRHJhd2luZ0ZyYW1lJikgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lk
IGZpbmlzaERyYXdpbmdGcmFtZShEcmF3aW5nRnJhbWUmKSBPVkVSUklERTsKLQotcHJpdmF0ZToK
LSAgICBzdGF0aWMgdm9pZCB0b0dMTWF0cml4KGZsb2F0KiwgY29uc3QgV2ViS2l0OjpXZWJUcmFu
c2Zvcm1hdGlvbk1hdHJpeCYpOwotCi0gICAgdm9pZCBkcmF3Q2hlY2tlcmJvYXJkUXVhZChjb25z
dCBEcmF3aW5nRnJhbWUmLCBjb25zdCBDQ0NoZWNrZXJib2FyZERyYXdRdWFkKik7Ci0gICAgdm9p
ZCBkcmF3RGVidWdCb3JkZXJRdWFkKGNvbnN0IERyYXdpbmdGcmFtZSYsIGNvbnN0IENDRGVidWdC
b3JkZXJEcmF3UXVhZCopOwotICAgIFBhc3NPd25QdHI8Q0NTY29wZWRUZXh0dXJlPiBkcmF3QmFj
a2dyb3VuZEZpbHRlcnMoRHJhd2luZ0ZyYW1lJiwgY29uc3QgQ0NSZW5kZXJQYXNzRHJhd1F1YWQq
LCBjb25zdCBXZWJLaXQ6OldlYkZpbHRlck9wZXJhdGlvbnMmLCBjb25zdCBXZWJLaXQ6OldlYlRy
YW5zZm9ybWF0aW9uTWF0cml4JiBkZXZpY2VUcmFuc2Zvcm0pOwotICAgIHZvaWQgZHJhd1JlbmRl
clBhc3NRdWFkKERyYXdpbmdGcmFtZSYsIGNvbnN0IENDUmVuZGVyUGFzc0RyYXdRdWFkKik7Ci0g
ICAgdm9pZCBkcmF3U29saWRDb2xvclF1YWQoY29uc3QgRHJhd2luZ0ZyYW1lJiwgY29uc3QgQ0NT
b2xpZENvbG9yRHJhd1F1YWQqKTsKLSAgICB2b2lkIGRyYXdTdHJlYW1WaWRlb1F1YWQoY29uc3Qg
RHJhd2luZ0ZyYW1lJiwgY29uc3QgQ0NTdHJlYW1WaWRlb0RyYXdRdWFkKik7Ci0gICAgdm9pZCBk
cmF3VGV4dHVyZVF1YWQoY29uc3QgRHJhd2luZ0ZyYW1lJiwgY29uc3QgQ0NUZXh0dXJlRHJhd1F1
YWQqKTsKLSAgICB2b2lkIGRyYXdJT1N1cmZhY2VRdWFkKGNvbnN0IERyYXdpbmdGcmFtZSYsIGNv
bnN0IENDSU9TdXJmYWNlRHJhd1F1YWQqKTsKLSAgICB2b2lkIGRyYXdUaWxlUXVhZChjb25zdCBE
cmF3aW5nRnJhbWUmLCBjb25zdCBDQ1RpbGVEcmF3UXVhZCopOwotICAgIHZvaWQgZHJhd1lVVlZp
ZGVvUXVhZChjb25zdCBEcmF3aW5nRnJhbWUmLCBjb25zdCBDQ1lVVlZpZGVvRHJhd1F1YWQqKTsK
LQotICAgIHZvaWQgc2V0U2hhZGVyT3BhY2l0eShmbG9hdCBvcGFjaXR5LCBpbnQgYWxwaGFMb2Nh
dGlvbik7Ci0gICAgdm9pZCBzZXRTaGFkZXJGbG9hdFF1YWQoY29uc3QgRmxvYXRRdWFkJiwgaW50
IHF1YWRMb2NhdGlvbik7Ci0gICAgdm9pZCBkcmF3UXVhZEdlb21ldHJ5KGNvbnN0IERyYXdpbmdG
cmFtZSYsIGNvbnN0IFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIGRyYXdUcmFuc2Zv
cm0sIGNvbnN0IEZsb2F0UmVjdCYgcXVhZFJlY3QsIGludCBtYXRyaXhMb2NhdGlvbik7Ci0KLSAg
ICB2b2lkIGNvcHlUZXh0dXJlVG9GcmFtZWJ1ZmZlcihjb25zdCBEcmF3aW5nRnJhbWUmLCBpbnQg
dGV4dHVyZUlkLCBjb25zdCBJbnRSZWN0JiwgY29uc3QgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlv
bk1hdHJpeCYgZHJhd01hdHJpeCk7Ci0KLSAgICBib29sIHVzZVNjb3BlZFRleHR1cmUoRHJhd2lu
Z0ZyYW1lJiwgY29uc3QgQ0NTY29wZWRUZXh0dXJlKiwgY29uc3QgSW50UmVjdCYgdmlld3BvcnRS
ZWN0KTsKLQotICAgIGJvb2wgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0KLSAgICBib29sIGluaXRp
YWxpemVTaGFyZWRPYmplY3RzKCk7Ci0gICAgdm9pZCBjbGVhbnVwU2hhcmVkT2JqZWN0cygpOwot
Ci0gICAgLy8gV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRDo6V2ViR3JhcGhpY3NTd2FwQnVm
ZmVyc0NvbXBsZXRlQ2FsbGJhY2tDSFJPTUlVTSBpbXBsZW1lbnRhdGlvbi4KLSAgICB2aXJ0dWFs
IHZvaWQgb25Td2FwQnVmZmVyc0NvbXBsZXRlKCkgT1ZFUlJJREU7Ci0KLSAgICAvLyBXZWJLaXQ6
OldlYkdyYXBoaWNzQ29udGV4dDNEOjpXZWJHcmFwaGljc01lbW9yeUFsbG9jYXRpb25DaGFuZ2Vk
Q2FsbGJhY2tDSFJPTUlVTSBpbXBsZW1lbnRhdGlvbi4KLSAgICB2aXJ0dWFsIHZvaWQgb25NZW1v
cnlBbGxvY2F0aW9uQ2hhbmdlZChXZWJLaXQ6OldlYkdyYXBoaWNzTWVtb3J5QWxsb2NhdGlvbikg
T1ZFUlJJREU7Ci0gICAgdm9pZCBvbk1lbW9yeUFsbG9jYXRpb25DaGFuZ2VkT25JbXBsVGhyZWFk
KFdlYktpdDo6V2ViR3JhcGhpY3NNZW1vcnlBbGxvY2F0aW9uKTsKLSAgICB2b2lkIGRpc2NhcmRG
cmFtZWJ1ZmZlcigpOwotICAgIHZvaWQgZW5zdXJlRnJhbWVidWZmZXIoKTsKLQotICAgIC8vIFdl
YkdyYXBoaWNzQ29udGV4dDNEOjpXZWJHcmFwaGljc0NvbnRleHRMb3N0Q2FsbGJhY2sgaW1wbGVt
ZW50YXRpb24uCi0gICAgdmlydHVhbCB2b2lkIG9uQ29udGV4dExvc3QoKSBPVkVSUklERTsKLQot
ICAgIExheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMgbV9jYXBhYmlsaXRpZXM7Ci0KLSAgICB1bnNp
Z25lZCBtX29mZnNjcmVlbkZyYW1lYnVmZmVySWQ7Ci0KLSAgICBPd25QdHI8R2VvbWV0cnlCaW5k
aW5nPiBtX3NoYXJlZEdlb21ldHJ5OwotICAgIEZsb2F0UXVhZCBtX3NoYXJlZEdlb21ldHJ5UXVh
ZDsKLQotICAgIC8vIFRoaXMgYmxvY2sgb2YgYmluZGluZ3MgZGVmaW5lcyBhbGwgb2YgdGhlIHBy
b2dyYW1zIHVzZWQgYnkgdGhlIGNvbXBvc2l0b3IgaXRzZWxmLgotCi0gICAgLy8gVGlsZWQgbGF5
ZXIgc2hhZGVycy4KLSAgICB0eXBlZGVmIFByb2dyYW1CaW5kaW5nPFZlcnRleFNoYWRlclRpbGUs
IEZyYWdtZW50U2hhZGVyUkdCQVRleEFscGhhPiBUaWxlUHJvZ3JhbTsKLSAgICB0eXBlZGVmIFBy
b2dyYW1CaW5kaW5nPFZlcnRleFNoYWRlclRpbGUsIEZyYWdtZW50U2hhZGVyUkdCQVRleENsYW1w
QWxwaGFBQT4gVGlsZVByb2dyYW1BQTsKLSAgICB0eXBlZGVmIFByb2dyYW1CaW5kaW5nPFZlcnRl
eFNoYWRlclRpbGUsIEZyYWdtZW50U2hhZGVyUkdCQVRleENsYW1wU3dpenpsZUFscGhhQUE+IFRp
bGVQcm9ncmFtU3dpenpsZUFBOwotICAgIHR5cGVkZWYgUHJvZ3JhbUJpbmRpbmc8VmVydGV4U2hh
ZGVyVGlsZSwgRnJhZ21lbnRTaGFkZXJSR0JBVGV4T3BhcXVlPiBUaWxlUHJvZ3JhbU9wYXF1ZTsK
LSAgICB0eXBlZGVmIFByb2dyYW1CaW5kaW5nPFZlcnRleFNoYWRlclRpbGUsIEZyYWdtZW50U2hh
ZGVyUkdCQVRleFN3aXp6bGVBbHBoYT4gVGlsZVByb2dyYW1Td2l6emxlOwotICAgIHR5cGVkZWYg
UHJvZ3JhbUJpbmRpbmc8VmVydGV4U2hhZGVyVGlsZSwgRnJhZ21lbnRTaGFkZXJSR0JBVGV4U3dp
enpsZU9wYXF1ZT4gVGlsZVByb2dyYW1Td2l6emxlT3BhcXVlOwotICAgIHR5cGVkZWYgUHJvZ3Jh
bUJpbmRpbmc8VmVydGV4U2hhZGVyUG9zVGV4LCBGcmFnbWVudFNoYWRlckNoZWNrZXJib2FyZD4g
VGlsZUNoZWNrZXJib2FyZFByb2dyYW07Ci0KLSAgICAvLyBSZW5kZXIgc3VyZmFjZSBzaGFkZXJz
LgotICAgIHR5cGVkZWYgUHJvZ3JhbUJpbmRpbmc8VmVydGV4U2hhZGVyUG9zVGV4LCBGcmFnbWVu
dFNoYWRlclJHQkFUZXhBbHBoYT4gUmVuZGVyUGFzc1Byb2dyYW07Ci0gICAgdHlwZWRlZiBQcm9n
cmFtQmluZGluZzxWZXJ0ZXhTaGFkZXJQb3NUZXgsIEZyYWdtZW50U2hhZGVyUkdCQVRleEFscGhh
TWFzaz4gUmVuZGVyUGFzc01hc2tQcm9ncmFtOwotICAgIHR5cGVkZWYgUHJvZ3JhbUJpbmRpbmc8
VmVydGV4U2hhZGVyUXVhZCwgRnJhZ21lbnRTaGFkZXJSR0JBVGV4QWxwaGFBQT4gUmVuZGVyUGFz
c1Byb2dyYW1BQTsKLSAgICB0eXBlZGVmIFByb2dyYW1CaW5kaW5nPFZlcnRleFNoYWRlclF1YWQs
IEZyYWdtZW50U2hhZGVyUkdCQVRleEFscGhhTWFza0FBPiBSZW5kZXJQYXNzTWFza1Byb2dyYW1B
QTsKLQotICAgIC8vIFRleHR1cmUgc2hhZGVycy4KLSAgICB0eXBlZGVmIFByb2dyYW1CaW5kaW5n
PFZlcnRleFNoYWRlclBvc1RleFRyYW5zZm9ybSwgRnJhZ21lbnRTaGFkZXJSR0JBVGV4QWxwaGE+
IFRleHR1cmVQcm9ncmFtOwotICAgIHR5cGVkZWYgUHJvZ3JhbUJpbmRpbmc8VmVydGV4U2hhZGVy
UG9zVGV4VHJhbnNmb3JtLCBGcmFnbWVudFNoYWRlclJHQkFUZXhGbGlwQWxwaGE+IFRleHR1cmVQ
cm9ncmFtRmxpcDsKLSAgICB0eXBlZGVmIFByb2dyYW1CaW5kaW5nPFZlcnRleFNoYWRlclBvc1Rl
eFRyYW5zZm9ybSwgRnJhZ21lbnRTaGFkZXJSR0JBVGV4UmVjdEFscGhhPiBUZXh0dXJlSU9TdXJm
YWNlUHJvZ3JhbTsKLQotICAgIC8vIFZpZGVvIHNoYWRlcnMuCi0gICAgdHlwZWRlZiBQcm9ncmFt
QmluZGluZzxWZXJ0ZXhTaGFkZXJWaWRlb1RyYW5zZm9ybSwgRnJhZ21lbnRTaGFkZXJPRVNJbWFn
ZUV4dGVybmFsPiBWaWRlb1N0cmVhbVRleHR1cmVQcm9ncmFtOwotICAgIHR5cGVkZWYgUHJvZ3Jh
bUJpbmRpbmc8VmVydGV4U2hhZGVyUG9zVGV4WVVWU3RyZXRjaCwgRnJhZ21lbnRTaGFkZXJZVVZW
aWRlbz4gVmlkZW9ZVVZQcm9ncmFtOwotCi0gICAgLy8gU3BlY2lhbCBwdXJwb3NlIC8gZWZmZWN0
cyBzaGFkZXJzLgotICAgIHR5cGVkZWYgUHJvZ3JhbUJpbmRpbmc8VmVydGV4U2hhZGVyUG9zLCBG
cmFnbWVudFNoYWRlckNvbG9yPiBTb2xpZENvbG9yUHJvZ3JhbTsKLQotICAgIGNvbnN0IFRpbGVQ
cm9ncmFtKiB0aWxlUHJvZ3JhbSgpOwotICAgIGNvbnN0IFRpbGVQcm9ncmFtT3BhcXVlKiB0aWxl
UHJvZ3JhbU9wYXF1ZSgpOwotICAgIGNvbnN0IFRpbGVQcm9ncmFtQUEqIHRpbGVQcm9ncmFtQUEo
KTsKLSAgICBjb25zdCBUaWxlUHJvZ3JhbVN3aXp6bGUqIHRpbGVQcm9ncmFtU3dpenpsZSgpOwot
ICAgIGNvbnN0IFRpbGVQcm9ncmFtU3dpenpsZU9wYXF1ZSogdGlsZVByb2dyYW1Td2l6emxlT3Bh
cXVlKCk7Ci0gICAgY29uc3QgVGlsZVByb2dyYW1Td2l6emxlQUEqIHRpbGVQcm9ncmFtU3dpenps
ZUFBKCk7Ci0gICAgY29uc3QgVGlsZUNoZWNrZXJib2FyZFByb2dyYW0qIHRpbGVDaGVja2VyYm9h
cmRQcm9ncmFtKCk7Ci0KLSAgICBjb25zdCBSZW5kZXJQYXNzUHJvZ3JhbSogcmVuZGVyUGFzc1By
b2dyYW0oKTsKLSAgICBjb25zdCBSZW5kZXJQYXNzUHJvZ3JhbUFBKiByZW5kZXJQYXNzUHJvZ3Jh
bUFBKCk7Ci0gICAgY29uc3QgUmVuZGVyUGFzc01hc2tQcm9ncmFtKiByZW5kZXJQYXNzTWFza1By
b2dyYW0oKTsKLSAgICBjb25zdCBSZW5kZXJQYXNzTWFza1Byb2dyYW1BQSogcmVuZGVyUGFzc01h
c2tQcm9ncmFtQUEoKTsKLQotICAgIGNvbnN0IFRleHR1cmVQcm9ncmFtKiB0ZXh0dXJlUHJvZ3Jh
bSgpOwotICAgIGNvbnN0IFRleHR1cmVQcm9ncmFtRmxpcCogdGV4dHVyZVByb2dyYW1GbGlwKCk7
Ci0gICAgY29uc3QgVGV4dHVyZUlPU3VyZmFjZVByb2dyYW0qIHRleHR1cmVJT1N1cmZhY2VQcm9n
cmFtKCk7Ci0KLSAgICBjb25zdCBWaWRlb1lVVlByb2dyYW0qIHZpZGVvWVVWUHJvZ3JhbSgpOwot
ICAgIGNvbnN0IFZpZGVvU3RyZWFtVGV4dHVyZVByb2dyYW0qIHZpZGVvU3RyZWFtVGV4dHVyZVBy
b2dyYW0oKTsKLQotICAgIGNvbnN0IFNvbGlkQ29sb3JQcm9ncmFtKiBzb2xpZENvbG9yUHJvZ3Jh
bSgpOwotCi0gICAgT3duUHRyPFRpbGVQcm9ncmFtPiBtX3RpbGVQcm9ncmFtOwotICAgIE93blB0
cjxUaWxlUHJvZ3JhbU9wYXF1ZT4gbV90aWxlUHJvZ3JhbU9wYXF1ZTsKLSAgICBPd25QdHI8VGls
ZVByb2dyYW1BQT4gbV90aWxlUHJvZ3JhbUFBOwotICAgIE93blB0cjxUaWxlUHJvZ3JhbVN3aXp6
bGU+IG1fdGlsZVByb2dyYW1Td2l6emxlOwotICAgIE93blB0cjxUaWxlUHJvZ3JhbVN3aXp6bGVP
cGFxdWU+IG1fdGlsZVByb2dyYW1Td2l6emxlT3BhcXVlOwotICAgIE93blB0cjxUaWxlUHJvZ3Jh
bVN3aXp6bGVBQT4gbV90aWxlUHJvZ3JhbVN3aXp6bGVBQTsKLSAgICBPd25QdHI8VGlsZUNoZWNr
ZXJib2FyZFByb2dyYW0+IG1fdGlsZUNoZWNrZXJib2FyZFByb2dyYW07Ci0KLSAgICBPd25QdHI8
UmVuZGVyUGFzc1Byb2dyYW0+IG1fcmVuZGVyUGFzc1Byb2dyYW07Ci0gICAgT3duUHRyPFJlbmRl
clBhc3NQcm9ncmFtQUE+IG1fcmVuZGVyUGFzc1Byb2dyYW1BQTsKLSAgICBPd25QdHI8UmVuZGVy
UGFzc01hc2tQcm9ncmFtPiBtX3JlbmRlclBhc3NNYXNrUHJvZ3JhbTsKLSAgICBPd25QdHI8UmVu
ZGVyUGFzc01hc2tQcm9ncmFtQUE+IG1fcmVuZGVyUGFzc01hc2tQcm9ncmFtQUE7Ci0KLSAgICBP
d25QdHI8VGV4dHVyZVByb2dyYW0+IG1fdGV4dHVyZVByb2dyYW07Ci0gICAgT3duUHRyPFRleHR1
cmVQcm9ncmFtRmxpcD4gbV90ZXh0dXJlUHJvZ3JhbUZsaXA7Ci0gICAgT3duUHRyPFRleHR1cmVJ
T1N1cmZhY2VQcm9ncmFtPiBtX3RleHR1cmVJT1N1cmZhY2VQcm9ncmFtOwotCi0gICAgT3duUHRy
PFZpZGVvWVVWUHJvZ3JhbT4gbV92aWRlb1lVVlByb2dyYW07Ci0gICAgT3duUHRyPFZpZGVvU3Ry
ZWFtVGV4dHVyZVByb2dyYW0+IG1fdmlkZW9TdHJlYW1UZXh0dXJlUHJvZ3JhbTsKLQotICAgIE93
blB0cjxTb2xpZENvbG9yUHJvZ3JhbT4gbV9zb2xpZENvbG9yUHJvZ3JhbTsKLQotICAgIE93blB0
cjxBY2NlbGVyYXRlZFRleHR1cmVDb3BpZXI+IG1fdGV4dHVyZUNvcGllcjsKLSAgICBPd25QdHI8
VGV4dHVyZVVwbG9hZGVyPiBtX3RleHR1cmVVcGxvYWRlcjsKLQotICAgIFdlYktpdDo6V2ViR3Jh
cGhpY3NDb250ZXh0M0QqIG1fY29udGV4dDsKLQotICAgIEludFJlY3QgbV9zd2FwQnVmZmVyUmVj
dDsKLSAgICBib29sIG1faXNWaWV3cG9ydENoYW5nZWQ7Ci0gICAgYm9vbCBtX2lzRnJhbWVidWZm
ZXJEaXNjYXJkZWQ7Ci0gICAgYm9vbCBtX2lzVXNpbmdCaW5kVW5pZm9ybTsKLSAgICBib29sIG1f
dmlzaWJsZTsKLSAgICBUZXh0dXJlVXBsb2FkZXJPcHRpb24gbV90ZXh0dXJlVXBsb2FkZXJTZXR0
aW5nOwotCi0gICAgT3duUHRyPENDUmVzb3VyY2VQcm92aWRlcjo6U2NvcGVkV3JpdGVMb2NrR0w+
IG1fY3VycmVudEZyYW1lYnVmZmVyTG9jazsKLX07Ci0KLQotLy8gU2V0dGluZyBERUJVR19HTF9D
QUxMUyB0byAxIHdpbGwgY2FsbCBnbEdldEVycm9yKCkgYWZ0ZXIgYWxtb3N0IGV2ZXJ5IEdMCi0v
LyBjYWxsIG1hZGUgYnkgdGhlIGNvbXBvc2l0b3IuIFVzZWZ1bCBmb3IgZGVidWdnaW5nIHJlbmRl
cmluZyBpc3N1ZXMgYnV0Ci0vLyB3aWxsIHNpZ25pZmljYW50bHkgZGVncmFkZSBwZXJmb3JtYW5j
ZS4KLSNkZWZpbmUgREVCVUdfR0xfQ0FMTFMgMAotCi0jaWYgREVCVUdfR0xfQ0FMTFMgJiYgIWRl
ZmluZWQgKCBOREVCVUcgKQotI2RlZmluZSBHTEMoY29udGV4dCwgeCkgKHgsIExheWVyUmVuZGVy
ZXJDaHJvbWl1bTo6ZGVidWdHTENhbGwoJipjb250ZXh0LCAjeCwgX19GSUxFX18sIF9fTElORV9f
KSkKLSNlbHNlCi0jZGVmaW5lIEdMQyhjb250ZXh0LCB4KSAoeCkKLSNlbmRpZgotCi0KLX0KLQot
I2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLQotI2VuZGlmCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRleHR1
cmVTdWJJbWFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9MYXllclRleHR1cmVTdWJJbWFnZS5jcHAKaW5kZXggODNjNzExNGJhZTRhZTAwMDNlN2I5NGQ0
NDJiNjRmMzU3MDEwYWMzYy4uNWM4OTYwZWUyMTc5ODk3MWI1Mzc2NGJjMTc0YTM1MzdmNTQ3MDEw
MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
TGF5ZXJUZXh0dXJlU3ViSW1hZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0xheWVyVGV4dHVyZVN1YkltYWdlLmNwcApAQCAtMjksOCArMjksOCBA
QAogCiAjaW5jbHVkZSAiTGF5ZXJUZXh0dXJlU3ViSW1hZ2UuaCIKIAorI2luY2x1ZGUgIkNDUmVu
ZGVyZXJHTC5oIiAvLyBGb3IgdGhlIEdMQygpIG1hY3JvLgogI2luY2x1ZGUgIkV4dGVuc2lvbnMz
RENocm9taXVtLmgiCi0jaW5jbHVkZSAiTGF5ZXJSZW5kZXJlckNocm9taXVtLmgiIC8vIEZvciBH
TEMoKSBtYWNybwogI2luY2x1ZGUgIlRyYWNlRXZlbnQuaCIKICNpbmNsdWRlIDxwdWJsaWMvV2Vi
R3JhcGhpY3NDb250ZXh0M0QuaD4KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vUHJvZ3JhbUJpbmRpbmcuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUHJvZ3JhbUJpbmRpbmcuY3BwCmluZGV4IDJmNmNh
MjI4NjUzMjQwMjY4ZjljOTlkMjgwMWI2MmM3MjlhMzI3OWMuLmNjYzE0ODc1Zjc2ZDRjZjllNWNl
YmVkOGJhM2Y4ZDBkNjRlNGI5NzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL1Byb2dyYW1CaW5kaW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Qcm9ncmFtQmluZGluZy5jcHAKQEAgLTI5LDkg
KzI5LDkgQEAKIAogI2luY2x1ZGUgIlByb2dyYW1CaW5kaW5nLmgiCiAKKyNpbmNsdWRlICJDQ1Jl
bmRlcmVyR0wuaCIgLy8gRm9yIHRoZSBHTEMoKSBtYWNyby4KICNpbmNsdWRlICJHZW9tZXRyeUJp
bmRpbmcuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgotI2luY2x1ZGUgIkxheWVy
UmVuZGVyZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIlRyYWNlRXZlbnQuaCIKICNpbmNsdWRlIDxw
dWJsaWMvV2ViR3JhcGhpY3NDb250ZXh0M0QuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5n
Lmg+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9SZW5kZXJTdXJmYWNlQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL1JlbmRlclN1cmZhY2VDaHJvbWl1bS5oCmluZGV4IDdiMTFmNmFhYzAxOTc3
NjEzZmQyODZiNDEwY2YyMjNmYTU4ZWU2NzAuLjc4N2VhYWVjMjU3MTdkNTEzNThmYzIzMDI2YWI4
NWJjZWU3MjAwNTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL1JlbmRlclN1cmZhY2VDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1JlbmRlclN1cmZhY2VDaHJvbWl1bS5oCkBAIC0zNyw3
ICszNyw2IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIExheWVyQ2hyb21pdW07Ci1j
bGFzcyBMYXllclJlbmRlcmVyQ2hyb21pdW07CiAKIGNsYXNzIFJlbmRlclN1cmZhY2VDaHJvbWl1
bSB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUmVuZGVyU3VyZmFjZUNocm9taXVtKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1Njcm9s
bGJhckxheWVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vU2Nyb2xsYmFyTGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggNjdmYmQzNjc5MzM3ZjVm
YjU1ODRmZmM3YmNiYTgxZWViYTEwOGU1Zi4uNWRkMTA0NWFiMTk3MDFmMjIwYzE4NmMyYjM2Njc5
MDliMjlmNzMyOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vU2Nyb2xsYmFyTGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2Nyb2xsYmFyTGF5ZXJDaHJvbWl1bS5jcHAKQEAg
LTE4OCw3ICsxODgsNyBAQCB2b2lkIFNjcm9sbGJhckxheWVyQ2hyb21pdW06OnNldExheWVyVHJl
ZUhvc3QoQ0NMYXllclRyZWVIb3N0KiBob3N0KQogCiB2b2lkIFNjcm9sbGJhckxheWVyQ2hyb21p
dW06OmNyZWF0ZVRleHR1cmVVcGRhdGVySWZOZWVkZWQoKQogewotICAgIG1fdGV4dHVyZUZvcm1h
dCA9IGxheWVyVHJlZUhvc3QoKS0+bGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcygpLmJlc3RUZXh0
dXJlRm9ybWF0OworICAgIG1fdGV4dHVyZUZvcm1hdCA9IGxheWVyVHJlZUhvc3QoKS0+cmVuZGVy
ZXJDYXBhYmlsaXRpZXMoKS5iZXN0VGV4dHVyZUZvcm1hdDsKIAogICAgIGlmICghbV9iYWNrVHJh
Y2tVcGRhdGVyKQogICAgICAgICBtX2JhY2tUcmFja1VwZGF0ZXIgPSBCaXRtYXBDYW52YXNMYXll
clRleHR1cmVVcGRhdGVyOjpjcmVhdGUoU2Nyb2xsYmFyQmFja2dyb3VuZFBhaW50ZXI6OmNyZWF0
ZShtX3Njcm9sbGJhci5nZXQoKSwgbV9wYWludGVyLCBtX2dlb21ldHJ5LmdldCgpLCBXZWJLaXQ6
OldlYlNjcm9sbGJhcjo6QmFja1RyYWNrUGFydCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGV4dHVyZUNvcGllci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UZXh0dXJlQ29waWVyLmNwcAppbmRl
eCBmYmI3Y2ZmZDViODlhYjBiY2I2ZDg2OGY2OTQ5NTZmMWNhMjU1ODU3Li5lMjBjMzIzY2MyODk1
MDI5N2RlZDNiZWJhOWFmMTY2Y2E4ZWM2ZDY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UZXh0dXJlQ29waWVyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UZXh0dXJlQ29waWVyLmNwcApAQCAt
MjYsOCArMjYsOCBAQAogCiAjaW5jbHVkZSAiVGV4dHVyZUNvcGllci5oIgogCisjaW5jbHVkZSAi
Q0NSZW5kZXJlckdMLmgiIC8vIEZvciB0aGUgR0xDKCkgbWFjcm8uCiAjaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0M0QuaCIKLSNpbmNsdWRlICJMYXllclJlbmRlcmVyQ2hyb21pdW0uaCIgLy8gRm9y
IHRoZSBHTEMoKSBtYWNybwogI2luY2x1ZGUgIlRyYWNlRXZlbnQuaCIKICNpbmNsdWRlIDxwdWJs
aWMvV2ViR3JhcGhpY3NDb250ZXh0M0QuaD4KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5j
cHAKaW5kZXggNjhiZmE0NWIwYmNjODYwM2Q3ZjA4Mzk5MzAwMmJmOTFmZmExZGQ4ZC4uNWRjNjVl
YzVhMjA4MWFhZDQ0NzdkMzI4MjkzOTRhMzYyZDAzNzRlYiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVy
Q2hyb21pdW0uY3BwCkBAIC0xNDksNyArMTQ5LDcgQEAgdm9pZCBUaWxlZExheWVyQ2hyb21pdW06
OnVwZGF0ZVRpbGVTaXplQW5kVGlsaW5nT3B0aW9uKCkKICAgICAgICAgaXNUaWxlZCA9IGF1dG9U
aWxlZDsKIAogICAgIEludFNpemUgcmVxdWVzdGVkU2l6ZSA9IGlzVGlsZWQgPyB0aWxlU2l6ZSA6
IGNvbnRlbnRCb3VuZHMoKTsKLSAgICBjb25zdCBpbnQgbWF4U2l6ZSA9IGxheWVyVHJlZUhvc3Qo
KS0+bGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcygpLm1heFRleHR1cmVTaXplOworICAgIGNvbnN0
IGludCBtYXhTaXplID0gbGF5ZXJUcmVlSG9zdCgpLT5yZW5kZXJlckNhcGFiaWxpdGllcygpLm1h
eFRleHR1cmVTaXplOwogICAgIEludFNpemUgY2xhbXBlZFNpemUgPSByZXF1ZXN0ZWRTaXplLnNo
cnVua1RvKEludFNpemUobWF4U2l6ZSwgbWF4U2l6ZSkpOwogICAgIHNldFRpbGVTaXplKGNsYW1w
ZWRTaXplKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDSGVhZHNVcERpc3BsYXlMYXllckltcGwuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NIZWFkc1VwRGlzcGxheUxheWVySW1w
bC5jcHAKaW5kZXggNWZkZDJjZDY5YWRlZDcwYmMwMGU2MDYwY2NkMDc4Mjc2ZDNmNmEyOS4uMzcw
ODEwNWFmMWM0NmVhNzAxM2E0ZDViNzM5OTlhMDA0YmNkOTI2MiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NIZWFkc1VwRGlzcGxheUxh
eWVySW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NIZWFkc1VwRGlzcGxheUxheWVySW1wbC5jcHAKQEAgLTM1LDcgKzM1LDYgQEAKICNp
bmNsdWRlICJDQ1RleHR1cmVEcmF3UXVhZC5oIgogI2luY2x1ZGUgIkV4dGVuc2lvbnMzRENocm9t
aXVtLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKLSNpbmNsdWRlICJMYXllclJl
bmRlcmVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJTa0JpdG1hcC5oIgogI2luY2x1ZGUgIlNrQ29s
b3JNYXRyaXhGaWx0ZXIuaCIKICNpbmNsdWRlICJTa1BhaW50LmgiCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0lPU3VyZmFjZUxheWVy
SW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0lPU3VyZmFjZUxheWVySW1wbC5jcHAKaW5kZXggMjgzYjdjOTlhMGVkYzJjOTdmZTUwMTljNzc2
MDc1ZGQ5ZWVhMzU3MS4uYWI3ZTA4NWE0MTg0ZGIzMjg4ZDgwNWNmZTU0MDhkMDFhYTllYzk1MyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NJT1N1cmZhY2VMYXllckltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDSU9TdXJmYWNlTGF5ZXJJbXBsLmNwcApAQCAtMzMsOCArMzMs
OCBAQAogI2luY2x1ZGUgIkNDSU9TdXJmYWNlRHJhd1F1YWQuaCIKICNpbmNsdWRlICJDQ0xheWVy
VHJlZUhvc3RJbXBsLmgiCiAjaW5jbHVkZSAiQ0NRdWFkU2luay5oIgorI2luY2x1ZGUgIkNDUmVu
ZGVyZXJHTC5oIiAvLyBGb3IgdGhlIEdMQygpIG1hY3JvLgogI2luY2x1ZGUgIkV4dGVuc2lvbnMz
RC5oIgotI2luY2x1ZGUgIkxheWVyUmVuZGVyZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIlRleHRT
dHJlYW0uaCIKICNpbmNsdWRlIDxwdWJsaWMvV2ViR3JhcGhpY3NDb250ZXh0M0QuaD4KIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NM
YXllckltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllckltcGwuY3BwCmluZGV4IDg0NDRkMWQ4ODYwZWNiYmMyMGRmMzc5MWU5N2U0ODNh
Y2NiMmE1ZDUuLjk4YjIxNjBiMDE1ZGYxMjI2NGExNTEyZDRmYmMxNDFkZGQzNDM3OTUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0xheWVySW1wbC5jcHAKQEAgLTI2Myw3ICsyNjMsNyBAQCB2b2lkIENDTGF5ZXJJbXBs
OjpkdW1wTGF5ZXJQcm9wZXJ0aWVzKFRleHRTdHJlYW0mIHRzLCBpbnQgaW5kZW50KSBjb25zdAog
CiB2b2lkIHNvcnRMYXllcnMoVmVjdG9yPENDTGF5ZXJJbXBsKj46Oml0ZXJhdG9yIGZpcnN0LCBW
ZWN0b3I8Q0NMYXllckltcGwqPjo6aXRlcmF0b3IgZW5kLCBDQ0xheWVyU29ydGVyKiBsYXllclNv
cnRlcikKIHsKLSAgICBUUkFDRV9FVkVOVDAoImNjIiwgIkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6
c29ydExheWVycyIpOworICAgIFRSQUNFX0VWRU5UMCgiY2MiLCAiQ0NMYXllckltcGw6OnNvcnRM
YXllcnMiKTsKICAgICBsYXllclNvcnRlci0+c29ydChmaXJzdCwgZW5kKTsKIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
clRyZWVIb3N0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAKaW5kZXggMmUzYTdkZWIzZDE1ZTUzMmU2Mzc4NTgwZTZk
ZDIxYzlhMDE0NmE0OS4uNWVlMWJmNmU5NWM0YjJmNjhlMzIyZjNkZTA3MjEzMDE4MTY3ZjljZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllclRyZWVIb3N0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwCkBAIC03NSw3ICs3NSw3IEBAIENDTGF5
ZXJUcmVlSG9zdDo6Q0NMYXllclRyZWVIb3N0KENDTGF5ZXJUcmVlSG9zdENsaWVudCogY2xpZW50
LCBjb25zdCBDQ0xheWVyVHJlCiAgICAgLCBtX2NsaWVudChjbGllbnQpCiAgICAgLCBtX2NvbW1p
dE51bWJlcigwKQogICAgICwgbV9yZW5kZXJpbmdTdGF0cygpCi0gICAgLCBtX2xheWVyUmVuZGVy
ZXJJbml0aWFsaXplZChmYWxzZSkKKyAgICAsIG1fcmVuZGVyZXJJbml0aWFsaXplZChmYWxzZSkK
ICAgICAsIG1fY29udGV4dExvc3QoZmFsc2UpCiAgICAgLCBtX251bVRpbWVzUmVjcmVhdGVTaG91
bGRGYWlsKDApCiAgICAgLCBtX251bUZhaWxlZFJlY3JlYXRlQXR0ZW1wdHMoMCkKQEAgLTEzMSwz
MCArMTMxLDMwIEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0OjpzZXRTdXJmYWNlUmVhZHkoKQogICAg
IG1fcHJveHktPnNldFN1cmZhY2VSZWFkeSgpOwogfQogCi12b2lkIENDTGF5ZXJUcmVlSG9zdDo6
aW5pdGlhbGl6ZUxheWVyUmVuZGVyZXIoKQordm9pZCBDQ0xheWVyVHJlZUhvc3Q6OmluaXRpYWxp
emVSZW5kZXJlcigpCiB7Ci0gICAgVFJBQ0VfRVZFTlQwKCJjYyIsICJDQ0xheWVyVHJlZUhvc3Q6
OmluaXRpYWxpemVMYXllclJlbmRlcmVyIik7Ci0gICAgaWYgKCFtX3Byb3h5LT5pbml0aWFsaXpl
TGF5ZXJSZW5kZXJlcigpKSB7CisgICAgVFJBQ0VfRVZFTlQwKCJjYyIsICJDQ0xheWVyVHJlZUhv
c3Q6OmluaXRpYWxpemVSZW5kZXJlciIpOworICAgIGlmICghbV9wcm94eS0+aW5pdGlhbGl6ZVJl
bmRlcmVyKCkpIHsKICAgICAgICAgLy8gVWggb2gsIGJldHRlciB0ZWxsIHRoZSBjbGllbnQgdGhh
dCB3ZSBjYW4ndCBkbyBhbnl0aGluZyB3aXRoIHRoaXMgY29udGV4dC4KICAgICAgICAgbV9jbGll
bnQtPmRpZFJlY3JlYXRlT3V0cHV0U3VyZmFjZShmYWxzZSk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKICAgICAvLyBVcGRhdGUgbV9zZXR0aW5ncyBiYXNlZCBvbiBjYXBhYmlsaXRpZXMgdGhh
dCB3ZSBnb3QgYmFjayBmcm9tIHRoZSByZW5kZXJlci4KLSAgICBtX3NldHRpbmdzLmFjY2VsZXJh
dGVQYWludGluZyA9IG1fcHJveHktPmxheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMoKS51c2luZ0Fj
Y2VsZXJhdGVkUGFpbnRpbmc7CisgICAgbV9zZXR0aW5ncy5hY2NlbGVyYXRlUGFpbnRpbmcgPSBt
X3Byb3h5LT5yZW5kZXJlckNhcGFiaWxpdGllcygpLnVzaW5nQWNjZWxlcmF0ZWRQYWludGluZzsK
IAogICAgIC8vIFVwZGF0ZSBtX3NldHRpbmdzIGJhc2VkIG9uIHBhcnRpYWwgdXBkYXRlIGNhcGFi
aWxpdHkuCiAgICAgbV9zZXR0aW5ncy5tYXhQYXJ0aWFsVGV4dHVyZVVwZGF0ZXMgPSBtaW4obV9z
ZXR0aW5ncy5tYXhQYXJ0aWFsVGV4dHVyZVVwZGF0ZXMsIG1fcHJveHktPm1heFBhcnRpYWxUZXh0
dXJlVXBkYXRlcygpKTsKIAotICAgIG1fY29udGVudHNUZXh0dXJlTWFuYWdlciA9IENDUHJpb3Jp
dGl6ZWRUZXh0dXJlTWFuYWdlcjo6Y3JlYXRlKDAsIG1fcHJveHktPmxheWVyUmVuZGVyZXJDYXBh
YmlsaXRpZXMoKS5tYXhUZXh0dXJlU2l6ZSwgQ0NSZW5kZXJlcjo6Q29udGVudFBvb2wpOworICAg
IG1fY29udGVudHNUZXh0dXJlTWFuYWdlciA9IENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6
Y3JlYXRlKDAsIG1fcHJveHktPnJlbmRlcmVyQ2FwYWJpbGl0aWVzKCkubWF4VGV4dHVyZVNpemUs
IENDUmVuZGVyZXI6OkNvbnRlbnRQb29sKTsKICAgICBtX3N1cmZhY2VNZW1vcnlQbGFjZWhvbGRl
ciA9IG1fY29udGVudHNUZXh0dXJlTWFuYWdlci0+Y3JlYXRlVGV4dHVyZShJbnRTaXplKCksIEdy
YXBoaWNzQ29udGV4dDNEOjpSR0JBKTsKIAotICAgIG1fbGF5ZXJSZW5kZXJlckluaXRpYWxpemVk
ID0gdHJ1ZTsKKyAgICBtX3JlbmRlcmVySW5pdGlhbGl6ZWQgPSB0cnVlOwogCi0gICAgbV9zZXR0
aW5ncy5kZWZhdWx0VGlsZVNpemUgPSBJbnRTaXplKG1pbihtX3NldHRpbmdzLmRlZmF1bHRUaWxl
U2l6ZS53aWR0aCgpLCBtX3Byb3h5LT5sYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzKCkubWF4VGV4
dHVyZVNpemUpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW4o
bV9zZXR0aW5ncy5kZWZhdWx0VGlsZVNpemUuaGVpZ2h0KCksIG1fcHJveHktPmxheWVyUmVuZGVy
ZXJDYXBhYmlsaXRpZXMoKS5tYXhUZXh0dXJlU2l6ZSkpOwotICAgIG1fc2V0dGluZ3MubWF4VW50
aWxlZExheWVyU2l6ZSA9IEludFNpemUobWluKG1fc2V0dGluZ3MubWF4VW50aWxlZExheWVyU2l6
ZS53aWR0aCgpLCBtX3Byb3h5LT5sYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzKCkubWF4VGV4dHVy
ZVNpemUpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWlu
KG1fc2V0dGluZ3MubWF4VW50aWxlZExheWVyU2l6ZS5oZWlnaHQoKSwgbV9wcm94eS0+bGF5ZXJS
ZW5kZXJlckNhcGFiaWxpdGllcygpLm1heFRleHR1cmVTaXplKSk7CisgICAgbV9zZXR0aW5ncy5k
ZWZhdWx0VGlsZVNpemUgPSBJbnRTaXplKG1pbihtX3NldHRpbmdzLmRlZmF1bHRUaWxlU2l6ZS53
aWR0aCgpLCBtX3Byb3h5LT5yZW5kZXJlckNhcGFiaWxpdGllcygpLm1heFRleHR1cmVTaXplKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluKG1fc2V0dGluZ3Mu
ZGVmYXVsdFRpbGVTaXplLmhlaWdodCgpLCBtX3Byb3h5LT5yZW5kZXJlckNhcGFiaWxpdGllcygp
Lm1heFRleHR1cmVTaXplKSk7CisgICAgbV9zZXR0aW5ncy5tYXhVbnRpbGVkTGF5ZXJTaXplID0g
SW50U2l6ZShtaW4obV9zZXR0aW5ncy5tYXhVbnRpbGVkTGF5ZXJTaXplLndpZHRoKCksIG1fcHJv
eHktPnJlbmRlcmVyQ2FwYWJpbGl0aWVzKCkubWF4VGV4dHVyZVNpemUpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluKG1fc2V0dGluZ3MubWF4VW50aWxl
ZExheWVyU2l6ZS5oZWlnaHQoKSwgbV9wcm94eS0+cmVuZGVyZXJDYXBhYmlsaXRpZXMoKS5tYXhU
ZXh0dXJlU2l6ZSkpOwogfQogCiBDQ0xheWVyVHJlZUhvc3Q6OlJlY3JlYXRlUmVzdWx0IENDTGF5
ZXJUcmVlSG9zdDo6cmVjcmVhdGVDb250ZXh0KCkKQEAgLTE5NSw3ICsxOTUsNyBAQCBDQ0xheWVy
VHJlZUhvc3Q6OlJlY3JlYXRlUmVzdWx0IENDTGF5ZXJUcmVlSG9zdDo6cmVjcmVhdGVDb250ZXh0
KCkKIHZvaWQgQ0NMYXllclRyZWVIb3N0OjpkZWxldGVDb250ZW50c1RleHR1cmVzT25JbXBsVGhy
ZWFkKENDUmVzb3VyY2VQcm92aWRlciogcmVzb3VyY2VQcm92aWRlcikKIHsKICAgICBBU1NFUlQo
Q0NQcm94eTo6aXNJbXBsVGhyZWFkKCkpOwotICAgIGlmIChtX2xheWVyUmVuZGVyZXJJbml0aWFs
aXplZCkKKyAgICBpZiAobV9yZW5kZXJlckluaXRpYWxpemVkKQogICAgICAgICBtX2NvbnRlbnRz
VGV4dHVyZU1hbmFnZXItPmNsZWFyQWxsTWVtb3J5KHJlc291cmNlUHJvdmlkZXIpOwogfQogCkBA
IC0zMTcsNyArMzE3LDcgQEAgYm9vbCBDQ0xheWVyVHJlZUhvc3Q6OmNvbXBvc2l0ZUFuZFJlYWRi
YWNrKHZvaWQgKnBpeGVscywgY29uc3QgSW50UmVjdCYgcmVjdCkKIAogdm9pZCBDQ0xheWVyVHJl
ZUhvc3Q6OmZpbmlzaEFsbFJlbmRlcmluZygpCiB7Ci0gICAgaWYgKCFtX2xheWVyUmVuZGVyZXJJ
bml0aWFsaXplZCkKKyAgICBpZiAoIW1fcmVuZGVyZXJJbml0aWFsaXplZCkKICAgICAgICAgcmV0
dXJuOwogICAgIG1fcHJveHktPmZpbmlzaEFsbFJlbmRlcmluZygpOwogfQpAQCAtMzI4LDkgKzMy
OCw5IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0OjpyZW5kZXJpbmdTdGF0cyhDQ1JlbmRlcmluZ1N0
YXRzJiBzdGF0cykgY29uc3QKICAgICBtX3Byb3h5LT5pbXBsU2lkZVJlbmRlcmluZ1N0YXRzKHN0
YXRzKTsKIH0KIAotY29uc3QgTGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcyYgQ0NMYXllclRyZWVI
b3N0OjpsYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzKCkgY29uc3QKK2NvbnN0IFJlbmRlcmVyQ2Fw
YWJpbGl0aWVzJiBDQ0xheWVyVHJlZUhvc3Q6OnJlbmRlcmVyQ2FwYWJpbGl0aWVzKCkgY29uc3QK
IHsKLSAgICByZXR1cm4gbV9wcm94eS0+bGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcygpOworICAg
IHJldHVybiBtX3Byb3h5LT5yZW5kZXJlckNhcGFiaWxpdGllcygpOwogfQogCiB2b2lkIENDTGF5
ZXJUcmVlSG9zdDo6c2V0TmVlZHNBbmltYXRlKCkKQEAgLTQ0NiwxMiArNDQ2LDEyIEBAIHZvaWQg
Q0NMYXllclRyZWVIb3N0OjpzY2hlZHVsZUNvbXBvc2l0ZSgpCiAgICAgbV9jbGllbnQtPnNjaGVk
dWxlQ29tcG9zaXRlKCk7CiB9CiAKLWJvb2wgQ0NMYXllclRyZWVIb3N0Ojppbml0aWFsaXplTGF5
ZXJSZW5kZXJlcklmTmVlZGVkKCkKK2Jvb2wgQ0NMYXllclRyZWVIb3N0Ojppbml0aWFsaXplUmVu
ZGVyZXJJZk5lZWRlZCgpCiB7Ci0gICAgaWYgKCFtX2xheWVyUmVuZGVyZXJJbml0aWFsaXplZCkg
ewotICAgICAgICBpbml0aWFsaXplTGF5ZXJSZW5kZXJlcigpOworICAgIGlmICghbV9yZW5kZXJl
ckluaXRpYWxpemVkKSB7CisgICAgICAgIGluaXRpYWxpemVSZW5kZXJlcigpOwogICAgICAgICAv
LyBJZiB3ZSBjb3VsZG4ndCBpbml0aWFsaXplLCB0aGVuIGJhaWwgc2luY2Ugd2UncmUgcmV0dXJu
aW5nIHRvIHNvZnR3YXJlIG1vZGUuCi0gICAgICAgIGlmICghbV9sYXllclJlbmRlcmVySW5pdGlh
bGl6ZWQpCisgICAgICAgIGlmICghbV9yZW5kZXJlckluaXRpYWxpemVkKQogICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIH0KICAgICBpZiAobV9jb250ZXh0TG9zdCkgewpAQCAtNDY0LDcg
KzQ2NCw3IEBAIGJvb2wgQ0NMYXllclRyZWVIb3N0Ojppbml0aWFsaXplTGF5ZXJSZW5kZXJlcklm
TmVlZGVkKCkKIAogdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnVwZGF0ZUxheWVycyhDQ1RleHR1cmVV
cGRhdGVRdWV1ZSYgcXVldWUsIHNpemVfdCBtZW1vcnlBbGxvY2F0aW9uTGltaXRCeXRlcykKIHsK
LSAgICBBU1NFUlQobV9sYXllclJlbmRlcmVySW5pdGlhbGl6ZWQpOworICAgIEFTU0VSVChtX3Jl
bmRlcmVySW5pdGlhbGl6ZWQpOwogICAgIEFTU0VSVChtZW1vcnlBbGxvY2F0aW9uTGltaXRCeXRl
cyk7CiAKICAgICBpZiAoIXJvb3RMYXllcigpKQpAQCAtNDg2LDcgKzQ4Niw3IEBAIHZvaWQgQ0NM
YXllclRyZWVIb3N0Ojp1cGRhdGVMYXllcnMoTGF5ZXJDaHJvbWl1bSogcm9vdExheWVyLCBDQ1Rl
eHR1cmVVcGRhdGVRdWV1CiAKICAgICB7CiAgICAgICAgIFRSQUNFX0VWRU5UMCgiY2MiLCAiQ0NM
YXllclRyZWVIb3N0Ojp1cGRhdGVMYXllcnM6OmNhbGNEcmF3RXRjIik7Ci0gICAgICAgIENDTGF5
ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXMocm9vdExheWVyLCBkZXZp
Y2VWaWV3cG9ydFNpemUoKSwgbV9kZXZpY2VTY2FsZUZhY3RvciwgbGF5ZXJSZW5kZXJlckNhcGFi
aWxpdGllcygpLm1heFRleHR1cmVTaXplLCB1cGRhdGVMaXN0KTsKKyAgICAgICAgQ0NMYXllclRy
ZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtcyhyb290TGF5ZXIsIGRldmljZVZp
ZXdwb3J0U2l6ZSgpLCBtX2RldmljZVNjYWxlRmFjdG9yLCByZW5kZXJlckNhcGFiaWxpdGllcygp
Lm1heFRleHR1cmVTaXplLCB1cGRhdGVMaXN0KTsKICAgICAgICAgQ0NMYXllclRyZWVIb3N0Q29t
bW9uOjpjYWxjdWxhdGVWaXNpYmxlUmVjdHModXBkYXRlTGlzdCk7CiAgICAgfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVy
VHJlZUhvc3QuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDTGF5ZXJUcmVlSG9zdC5oCmluZGV4IGJhZWU5ZTVlNTFjOGVkNjVlNTMzZTIxMGRlZWNmOTUx
NmFkMzhhYzQuLmNjMGI0NWQzZDdmYzdiMTVhNDdjMTUyZTUyNzNmOWJjNmVmNTNjNzAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJUcmVlSG9zdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5oCkBAIC0xMTUsOCArMTE1LDggQEAgc3RydWN0IENDTGF5
ZXJUcmVlU2V0dGluZ3MgewogfTsKIAogLy8gUHJvdmlkZXMgaW5mb3JtYXRpb24gb24gYW4gSW1w
bCdzIHJlbmRlcmluZyBjYXBhYmlsaXRpZXMgYmFjayB0byB0aGUgQ0NMYXllclRyZWVIb3N0Ci1z
dHJ1Y3QgTGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcyB7Ci0gICAgTGF5ZXJSZW5kZXJlckNhcGFi
aWxpdGllcygpCitzdHJ1Y3QgUmVuZGVyZXJDYXBhYmlsaXRpZXMgeworICAgIFJlbmRlcmVyQ2Fw
YWJpbGl0aWVzKCkKICAgICAgICAgOiBiZXN0VGV4dHVyZUZvcm1hdCgwKQogICAgICAgICAsIGNv
bnRleHRIYXNDYWNoZWRGcm9udEJ1ZmZlcihmYWxzZSkKICAgICAgICAgLCB1c2luZ1BhcnRpYWxT
d2FwKGZhbHNlKQpAQCAtMTc4LDcgKzE3OCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGRlbGV0ZUNv
bnRlbnRzVGV4dHVyZXNPbkltcGxUaHJlYWQoQ0NSZXNvdXJjZVByb3ZpZGVyKik7CiAgICAgdmly
dHVhbCB2b2lkIGFjcXVpcmVMYXllclRleHR1cmVzKCk7CiAgICAgLy8gUmV0dXJucyBmYWxzZSBp
ZiB3ZSBzaG91bGQgYWJvcnQgdGhpcyBmcmFtZSBkdWUgdG8gaW5pdGlhbGl6YXRpb24gZmFpbHVy
ZS4KLSAgICBib29sIGluaXRpYWxpemVMYXllclJlbmRlcmVySWZOZWVkZWQoKTsKKyAgICBib29s
IGluaXRpYWxpemVSZW5kZXJlcklmTmVlZGVkKCk7CiAgICAgdm9pZCB1cGRhdGVMYXllcnMoQ0NU
ZXh0dXJlVXBkYXRlUXVldWUmLCBzaXplX3QgY29udGVudHNNZW1vcnlMaW1pdEJ5dGVzKTsKIAog
ICAgIENDTGF5ZXJUcmVlSG9zdENsaWVudCogY2xpZW50KCkgeyByZXR1cm4gbV9jbGllbnQ7IH0K
QEAgLTIwMCw3ICsyMDAsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHJlbmRlcmluZ1N0YXRzKEND
UmVuZGVyaW5nU3RhdHMmKSBjb25zdDsKIAotICAgIGNvbnN0IExheWVyUmVuZGVyZXJDYXBhYmls
aXRpZXMmIGxheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMoKSBjb25zdDsKKyAgICBjb25zdCBSZW5k
ZXJlckNhcGFiaWxpdGllcyYgcmVuZGVyZXJDYXBhYmlsaXRpZXMoKSBjb25zdDsKIAogICAgIC8v
IFRlc3Qgb25seSBob29rCiAgICAgdm9pZCBsb3NlQ29udGV4dChpbnQgbnVtVGltZXMpOwpAQCAt
MjY5LDcgKzI2OSw3IEBAIHByaXZhdGU6CiAgICAgdHlwZWRlZiBWZWN0b3I8UmVmUHRyPExheWVy
Q2hyb21pdW0+ID4gTGF5ZXJMaXN0OwogICAgIHR5cGVkZWYgVmVjdG9yPE93blB0cjxDQ1ByaW9y
aXRpemVkVGV4dHVyZT4gPiBUZXh0dXJlTGlzdDsKIAotICAgIHZvaWQgaW5pdGlhbGl6ZUxheWVy
UmVuZGVyZXIoKTsKKyAgICB2b2lkIGluaXRpYWxpemVSZW5kZXJlcigpOwogCiAgICAgdm9pZCB1
cGRhdGUoTGF5ZXJDaHJvbWl1bSosIENDVGV4dHVyZVVwZGF0ZVF1ZXVlJiwgY29uc3QgQ0NPY2Ns
dXNpb25UcmFja2VyKik7CiAgICAgYm9vbCBwYWludExheWVyQ29udGVudHMoY29uc3QgTGF5ZXJM
aXN0JiwgQ0NUZXh0dXJlVXBkYXRlUXVldWUmKTsKQEAgLTI5Nyw3ICsyOTcsNyBAQCBwcml2YXRl
OgogICAgIENDUmVuZGVyaW5nU3RhdHMgbV9yZW5kZXJpbmdTdGF0czsKIAogICAgIE93blB0cjxD
Q1Byb3h5PiBtX3Byb3h5OwotICAgIGJvb2wgbV9sYXllclJlbmRlcmVySW5pdGlhbGl6ZWQ7Cisg
ICAgYm9vbCBtX3JlbmRlcmVySW5pdGlhbGl6ZWQ7CiAgICAgYm9vbCBtX2NvbnRleHRMb3N0Owog
ICAgIGludCBtX251bVRpbWVzUmVjcmVhdGVTaG91bGRGYWlsOwogICAgIGludCBtX251bUZhaWxl
ZFJlY3JlYXRlQXR0ZW1wdHM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3Bw
CmluZGV4IDQ2ZWRjYzBhODAxNDRlMmNjNzc0N2FhMTk2NmVlNzQ5YzU4YTkxZDQuLjFkNDJjOGVl
NzI1M2I5MjQ4YzlkMTkxMTQ0NDQxMGI3OWYxNzhiNDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJUcmVlSG9zdEltcGwuY3BwCkBAIC00MSwxMiArNDEsMTIgQEAKICNpbmNsdWRlICJDQ1BhZ2VT
Y2FsZUFuaW1hdGlvbi5oIgogI2luY2x1ZGUgIkNDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlci5o
IgogI2luY2x1ZGUgIkNDUmVuZGVyUGFzc0RyYXdRdWFkLmgiCisjaW5jbHVkZSAiQ0NSZW5kZXJl
ckdMLmgiCiAjaW5jbHVkZSAiQ0NSZW5kZXJpbmdTdGF0cy5oIgogI2luY2x1ZGUgIkNDU2Nyb2xs
YmFyQW5pbWF0aW9uQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkNDU2Nyb2xsYmFyTGF5ZXJJbXBs
LmgiCiAjaW5jbHVkZSAiQ0NTZXR0aW5ncy5oIgogI2luY2x1ZGUgIkNDU2luZ2xlVGhyZWFkUHJv
eHkuaCIKLSNpbmNsdWRlICJMYXllclJlbmRlcmVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJUZXh0
U3RyZWFtLmgiCiAjaW5jbHVkZSAiVHJhY2VFdmVudC5oIgogI2luY2x1ZGUgPHd0Zi9DdXJyZW50
VGltZS5oPgpAQCAtMTc1LDggKzE3NSw4IEBAIGJvb2wgQ0NMYXllclRyZWVIb3N0SW1wbDo6Y2Fu
RHJhdygpCiAgICAgICAgIFRSQUNFX0VWRU5UX0lOU1RBTlQwKCJjYyIsICJDQ0xheWVyVHJlZUhv
c3RJbXBsOjpjYW5EcmF3IGVtcHR5IHZpZXdwb3J0Iik7CiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICB9Ci0gICAgaWYgKCFtX2xheWVyUmVuZGVyZXIpIHsKLSAgICAgICAgVFJBQ0VfRVZFTlRf
SU5TVEFOVDAoImNjIiwgIkNDTGF5ZXJUcmVlSG9zdEltcGw6OmNhbkRyYXcgbm8gbGF5ZXJSZW5k
ZXJlciIpOworICAgIGlmICghbV9yZW5kZXJlcikgeworICAgICAgICBUUkFDRV9FVkVOVF9JTlNU
QU5UMCgiY2MiLCAiQ0NMYXllclRyZWVIb3N0SW1wbDo6Y2FuRHJhdyBubyByZW5kZXJlciIpOwog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIGlmIChtX2NvbnRlbnRzVGV4dHVyZXNQ
dXJnZWQpIHsKQEAgLTI1NSwxMSArMjU1LDExIEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6
Y2FsY3VsYXRlUmVuZGVyU3VyZmFjZUxheWVyTGlzdChDQ0xheWVyTGlzdCYgcmVuZGVyU3VyCiB7
CiAgICAgQVNTRVJUKHJlbmRlclN1cmZhY2VMYXllckxpc3QuaXNFbXB0eSgpKTsKICAgICBBU1NF
UlQobV9yb290TGF5ZXJJbXBsKTsKLSAgICBBU1NFUlQobV9sYXllclJlbmRlcmVyKTsgLy8gRm9y
IG1heFRleHR1cmVTaXplLgorICAgIEFTU0VSVChtX3JlbmRlcmVyKTsgLy8gRm9yIG1heFRleHR1
cmVTaXplLgogCiAgICAgewogICAgICAgICBUUkFDRV9FVkVOVDAoImNjIiwgIkNDTGF5ZXJUcmVl
SG9zdEltcGw6OmNhbGNEcmF3RXRjIik7Ci0gICAgICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6
Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXMobV9yb290TGF5ZXJJbXBsLmdldCgpLCBkZXZpY2VWaWV3
cG9ydFNpemUoKSwgbV9kZXZpY2VTY2FsZUZhY3RvciwgJm1fbGF5ZXJTb3J0ZXIsIGxheWVyUmVu
ZGVyZXJDYXBhYmlsaXRpZXMoKS5tYXhUZXh0dXJlU2l6ZSwgcmVuZGVyU3VyZmFjZUxheWVyTGlz
dCk7CisgICAgICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9y
bXMobV9yb290TGF5ZXJJbXBsLmdldCgpLCBkZXZpY2VWaWV3cG9ydFNpemUoKSwgbV9kZXZpY2VT
Y2FsZUZhY3RvciwgJm1fbGF5ZXJTb3J0ZXIsIHJlbmRlcmVyQ2FwYWJpbGl0aWVzKCkubWF4VGV4
dHVyZVNpemUsIHJlbmRlclN1cmZhY2VMYXllckxpc3QpOwogICAgICAgICBDQ0xheWVyVHJlZUhv
c3RDb21tb246OmNhbGN1bGF0ZVZpc2libGVSZWN0cyhyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsK
IAogICAgICAgICB0cmFja0RhbWFnZUZvckFsbFN1cmZhY2VzKG1fcm9vdExheWVySW1wbC5nZXQo
KSwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7CkBAIC0zNDcsOCArMzQ3LDggQEAgYm9vbCBDQ0xh
eWVyVHJlZUhvc3RJbXBsOjpjYWxjdWxhdGVSZW5kZXJQYXNzZXMoRnJhbWVEYXRhJiBmcmFtZSkK
ICAgICAgICAgb2NjbHVzaW9uVHJhY2tlci5vdmVyZHJhd01ldHJpY3MoKS5yZWNvcmRNZXRyaWNz
KHRoaXMpOwogCiAgICAgcmVtb3ZlUmVuZGVyUGFzc2VzKEN1bGxSZW5kZXJQYXNzZXNXaXRoTm9R
dWFkcygpLCBmcmFtZSk7Ci0gICAgbV9sYXllclJlbmRlcmVyLT5kZWNpZGVSZW5kZXJQYXNzQWxs
b2NhdGlvbnNGb3JGcmFtZShmcmFtZS5yZW5kZXJQYXNzZXMpOwotICAgIHJlbW92ZVJlbmRlclBh
c3NlcyhDdWxsUmVuZGVyUGFzc2VzV2l0aENhY2hlZFRleHR1cmVzKCptX2xheWVyUmVuZGVyZXIp
LCBmcmFtZSk7CisgICAgbV9yZW5kZXJlci0+ZGVjaWRlUmVuZGVyUGFzc0FsbG9jYXRpb25zRm9y
RnJhbWUoZnJhbWUucmVuZGVyUGFzc2VzKTsKKyAgICByZW1vdmVSZW5kZXJQYXNzZXMoQ3VsbFJl
bmRlclBhc3Nlc1dpdGhDYWNoZWRUZXh0dXJlcygqbV9yZW5kZXJlciksIGZyYW1lKTsKIAogICAg
IHJldHVybiBkcmF3RnJhbWU7CiB9CkBAIC01NTcsNyArNTU3LDcgQEAgdm9pZCBDQ0xheWVyVHJl
ZUhvc3RJbXBsOjpkcmF3TGF5ZXJzKGNvbnN0IEZyYW1lRGF0YSYgZnJhbWUpCiAgICAgaWYgKG1f
aHVkTGF5ZXJJbXBsKQogICAgICAgICBtX2h1ZExheWVySW1wbC0+dXBkYXRlSHVkVGV4dHVyZSht
X3Jlc291cmNlUHJvdmlkZXIuZ2V0KCkpOwogCi0gICAgbV9sYXllclJlbmRlcmVyLT5kcmF3RnJh
bWUoZnJhbWUucmVuZGVyUGFzc2VzLCBmcmFtZS5yZW5kZXJQYXNzZXNCeUlkKTsKKyAgICBtX3Jl
bmRlcmVyLT5kcmF3RnJhbWUoZnJhbWUucmVuZGVyUGFzc2VzLCBmcmFtZS5yZW5kZXJQYXNzZXNC
eUlkKTsKIAogICAgIC8vIE9uY2UgYSBSZW5kZXJQYXNzIGhhcyBiZWVuIGRyYXduLCBpdHMgZGFt
YWdlIHNob3VsZCBiZSBjbGVhcmVkIGluCiAgICAgLy8gY2FzZSB0aGUgUmVuZGVyUGFzcyB3aWxs
IGJlIHJldXNlZCBuZXh0IGZyYW1lLgpAQCAtNTc4LDI2ICs1NzgsMjYgQEAgdm9pZCBDQ0xheWVy
VHJlZUhvc3RJbXBsOjpkaWREcmF3QWxsTGF5ZXJzKGNvbnN0IEZyYW1lRGF0YSYgZnJhbWUpCiAK
IHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6ZmluaXNoQWxsUmVuZGVyaW5nKCkKIHsKLSAgICBp
ZiAobV9sYXllclJlbmRlcmVyKQotICAgICAgICBtX2xheWVyUmVuZGVyZXItPmZpbmlzaCgpOwor
ICAgIGlmIChtX3JlbmRlcmVyKQorICAgICAgICBtX3JlbmRlcmVyLT5maW5pc2goKTsKIH0KIAog
Ym9vbCBDQ0xheWVyVHJlZUhvc3RJbXBsOjppc0NvbnRleHRMb3N0KCkKIHsKLSAgICByZXR1cm4g
bV9sYXllclJlbmRlcmVyICYmIG1fbGF5ZXJSZW5kZXJlci0+aXNDb250ZXh0TG9zdCgpOworICAg
IHJldHVybiBtX3JlbmRlcmVyICYmIG1fcmVuZGVyZXItPmlzQ29udGV4dExvc3QoKTsKIH0KIAot
Y29uc3QgTGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcyYgQ0NMYXllclRyZWVIb3N0SW1wbDo6bGF5
ZXJSZW5kZXJlckNhcGFiaWxpdGllcygpIGNvbnN0Citjb25zdCBSZW5kZXJlckNhcGFiaWxpdGll
cyYgQ0NMYXllclRyZWVIb3N0SW1wbDo6cmVuZGVyZXJDYXBhYmlsaXRpZXMoKSBjb25zdAogewot
ICAgIHJldHVybiBtX2xheWVyUmVuZGVyZXItPmNhcGFiaWxpdGllcygpOworICAgIHJldHVybiBt
X3JlbmRlcmVyLT5jYXBhYmlsaXRpZXMoKTsKIH0KIAogYm9vbCBDQ0xheWVyVHJlZUhvc3RJbXBs
Ojpzd2FwQnVmZmVycygpCiB7Ci0gICAgQVNTRVJUKG1fbGF5ZXJSZW5kZXJlcik7CisgICAgQVNT
RVJUKG1fcmVuZGVyZXIpOwogCiAgICAgbV9mcHNDb3VudGVyLT5tYXJrRW5kT2ZGcmFtZSgpOwot
ICAgIHJldHVybiBtX2xheWVyUmVuZGVyZXItPnN3YXBCdWZmZXJzKCk7CisgICAgcmV0dXJuIG1f
cmVuZGVyZXItPnN3YXBCdWZmZXJzKCk7CiB9CiAKIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6
ZGlkTG9zZUNvbnRleHQoKQpAQCAtNjEyLDggKzYxMiw4IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0
SW1wbDo6b25Td2FwQnVmZmVyc0NvbXBsZXRlKCkKIAogdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBs
OjpyZWFkYmFjayh2b2lkKiBwaXhlbHMsIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7Ci0gICAgQVNT
RVJUKG1fbGF5ZXJSZW5kZXJlcik7Ci0gICAgbV9sYXllclJlbmRlcmVyLT5nZXRGcmFtZWJ1ZmZl
clBpeGVscyhwaXhlbHMsIHJlY3QpOworICAgIEFTU0VSVChtX3JlbmRlcmVyKTsKKyAgICBtX3Jl
bmRlcmVyLT5nZXRGcmFtZWJ1ZmZlclBpeGVscyhwaXhlbHMsIHJlY3QpOwogfQogCiBzdGF0aWMg
Q0NMYXllckltcGwqIGZpbmRSb290U2Nyb2xsTGF5ZXIoQ0NMYXllckltcGwqIGxheWVyKQpAQCAt
NjgxLDE1ICs2ODEsMTUgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpzZXRWaXNpYmxlKGJv
b2wgdmlzaWJsZSkKICAgICBtX3Zpc2libGUgPSB2aXNpYmxlOwogICAgIGRpZFZpc2liaWxpdHlD
aGFuZ2UodGhpcywgbV92aXNpYmxlKTsKIAotICAgIGlmICghbV9sYXllclJlbmRlcmVyKQorICAg
IGlmICghbV9yZW5kZXJlcikKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9sYXllclJlbmRlcmVy
LT5zZXRWaXNpYmxlKHZpc2libGUpOworICAgIG1fcmVuZGVyZXItPnNldFZpc2libGUodmlzaWJs
ZSk7CiAKICAgICBzZXRCYWNrZ3JvdW5kVGlja2luZ0VuYWJsZWQoIW1fdmlzaWJsZSAmJiBtX25l
ZWRzQW5pbWF0ZUxheWVycyk7CiB9CiAKLWJvb2wgQ0NMYXllclRyZWVIb3N0SW1wbDo6aW5pdGlh
bGl6ZUxheWVyUmVuZGVyZXIoUGFzc093blB0cjxDQ0dyYXBoaWNzQ29udGV4dD4gY29udGV4dCwg
VGV4dHVyZVVwbG9hZGVyT3B0aW9uIHRleHR1cmVVcGxvYWRlcikKK2Jvb2wgQ0NMYXllclRyZWVI
b3N0SW1wbDo6aW5pdGlhbGl6ZVJlbmRlcmVyKFBhc3NPd25QdHI8Q0NHcmFwaGljc0NvbnRleHQ+
IGNvbnRleHQsIFRleHR1cmVVcGxvYWRlck9wdGlvbiB0ZXh0dXJlVXBsb2FkZXIpCiB7CiAgICAg
aWYgKCFjb250ZXh0LT5iaW5kVG9DbGllbnQodGhpcykpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
QEAgLTcwMywyNiArNzAzLDI2IEBAIGJvb2wgQ0NMYXllclRyZWVIb3N0SW1wbDo6aW5pdGlhbGl6
ZUxheWVyUmVuZGVyZXIoUGFzc093blB0cjxDQ0dyYXBoaWNzQ29udGV4dD4KIAogICAgIE93blB0
cjxDQ0dyYXBoaWNzQ29udGV4dD4gY29udGV4dFJlZihjb250ZXh0KTsKICAgICBPd25QdHI8Q0NS
ZXNvdXJjZVByb3ZpZGVyPiByZXNvdXJjZVByb3ZpZGVyID0gQ0NSZXNvdXJjZVByb3ZpZGVyOjpj
cmVhdGUoY29udGV4dFJlZi5nZXQoKSk7Ci0gICAgT3duUHRyPExheWVyUmVuZGVyZXJDaHJvbWl1
bT4gbGF5ZXJSZW5kZXJlcjsKKyAgICBPd25QdHI8Q0NSZW5kZXJlckdMPiByZW5kZXJlcjsKICAg
ICBpZiAocmVzb3VyY2VQcm92aWRlci5nZXQoKSkKLSAgICAgICAgbGF5ZXJSZW5kZXJlciA9IExh
eWVyUmVuZGVyZXJDaHJvbWl1bTo6Y3JlYXRlKHRoaXMsIHJlc291cmNlUHJvdmlkZXIuZ2V0KCks
IHRleHR1cmVVcGxvYWRlcik7CisgICAgICAgIHJlbmRlcmVyID0gQ0NSZW5kZXJlckdMOjpjcmVh
dGUodGhpcywgcmVzb3VyY2VQcm92aWRlci5nZXQoKSwgdGV4dHVyZVVwbG9hZGVyKTsKIAotICAg
IC8vIFNpbmNlIHdlIG5vdyBoYXZlIGEgbmV3IGNvbnRleHQvbGF5ZXJSZW5kZXJlciwgd2UgY2Fu
bm90IGNvbnRpbnVlIHRvIHVzZSB0aGUgb2xkCisgICAgLy8gU2luY2Ugd2Ugbm93IGhhdmUgYSBu
ZXcgY29udGV4dC9yZW5kZXJlciwgd2UgY2Fubm90IGNvbnRpbnVlIHRvIHVzZSB0aGUgb2xkCiAg
ICAgLy8gcmVzb3VyY2VzIChpLmUuIHJlbmRlclN1cmZhY2VzIGFuZCB0ZXh0dXJlIElEcykuCiAg
ICAgaWYgKG1fcm9vdExheWVySW1wbCkgewogICAgICAgICBjbGVhclJlbmRlclN1cmZhY2VzKCk7
CiAgICAgICAgIHNlbmREaWRMb3NlQ29udGV4dFJlY3Vyc2l2ZShtX3Jvb3RMYXllckltcGwuZ2V0
KCkpOwogICAgIH0KIAotICAgIG1fbGF5ZXJSZW5kZXJlciA9IGxheWVyUmVuZGVyZXIucmVsZWFz
ZSgpOworICAgIG1fcmVuZGVyZXIgPSByZW5kZXJlci5yZWxlYXNlKCk7CiAgICAgbV9yZXNvdXJj
ZVByb3ZpZGVyID0gcmVzb3VyY2VQcm92aWRlci5yZWxlYXNlKCk7Ci0gICAgaWYgKG1fbGF5ZXJS
ZW5kZXJlcikKKyAgICBpZiAobV9yZW5kZXJlcikKICAgICAgICAgbV9jb250ZXh0ID0gY29udGV4
dFJlZi5yZWxlYXNlKCk7CiAKLSAgICBpZiAoIW1fdmlzaWJsZSAmJiBtX2xheWVyUmVuZGVyZXIp
Ci0gICAgICAgICBtX2xheWVyUmVuZGVyZXItPnNldFZpc2libGUobV92aXNpYmxlKTsKKyAgICBp
ZiAoIW1fdmlzaWJsZSAmJiBtX3JlbmRlcmVyKQorICAgICAgICAgbV9yZW5kZXJlci0+c2V0Vmlz
aWJsZShtX3Zpc2libGUpOwogCi0gICAgcmV0dXJuIG1fbGF5ZXJSZW5kZXJlcjsKKyAgICByZXR1
cm4gbV9yZW5kZXJlcjsKIH0KIAogdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpzZXRWaWV3cG9y
dFNpemUoY29uc3QgSW50U2l6ZSYgbGF5b3V0Vmlld3BvcnRTaXplLCBjb25zdCBJbnRTaXplJiBk
ZXZpY2VWaWV3cG9ydFNpemUpCkBAIC03MzUsOCArNzM1LDggQEAgdm9pZCBDQ0xheWVyVHJlZUhv
c3RJbXBsOjpzZXRWaWV3cG9ydFNpemUoY29uc3QgSW50U2l6ZSYgbGF5b3V0Vmlld3BvcnRTaXpl
LCBjb24KIAogICAgIHVwZGF0ZU1heFNjcm9sbFBvc2l0aW9uKCk7CiAKLSAgICBpZiAobV9sYXll
clJlbmRlcmVyKQotICAgICAgICBtX2xheWVyUmVuZGVyZXItPnZpZXdwb3J0Q2hhbmdlZCgpOwor
ICAgIGlmIChtX3JlbmRlcmVyKQorICAgICAgICBtX3JlbmRlcmVyLT52aWV3cG9ydENoYW5nZWQo
KTsKIH0KIAogc3RhdGljIHZvaWQgYWRqdXN0U2Nyb2xsc0ZvclBhZ2VTY2FsZUNoYW5nZShDQ0xh
eWVySW1wbCogbGF5ZXJJbXBsLCBmbG9hdCBwYWdlU2NhbGVDaGFuZ2UpCkBAIC04NDAsNyArODQw
LDcgQEAgYm9vbCBDQ0xheWVyVHJlZUhvc3RJbXBsOjplbnN1cmVSZW5kZXJTdXJmYWNlTGF5ZXJM
aXN0KCkKIHsKICAgICBpZiAoIW1fcm9vdExheWVySW1wbCkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIGlmICghbV9sYXllclJlbmRlcmVyKQorICAgIGlmICghbV9yZW5kZXJlcikKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCiAgICAgLy8gV2UgbmVlZCBib3RoIGEgbm9uLWVtcHR5IHJlbmRl
ciBzdXJmYWNlIGxheWVyIGxpc3QgYW5kIGEgcm9vdCByZW5kZXIKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdElt
cGwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJUcmVlSG9zdEltcGwuaAppbmRleCA1YTRiNjRhNTdiZjU0ZGJlNzViNTE2MTdlZTBkYzIwZWI3
ZTg4MGFhLi5iZmRhMmIxMjkyNGRmZDI2NGY3YjVlNGJiZDUyZDExZTQ2MzJiMTJmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVy
VHJlZUhvc3RJbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oCkBAIC00Nyw4ICs0Nyw3IEBAIGNsYXNzIEND
TGF5ZXJUcmVlSG9zdEltcGxUaW1lU291cmNlQWRhcHRlcjsKIGNsYXNzIENDUGFnZVNjYWxlQW5p
bWF0aW9uOwogY2xhc3MgQ0NSZW5kZXJQYXNzRHJhd1F1YWQ7CiBjbGFzcyBDQ1Jlc291cmNlUHJv
dmlkZXI7Ci1jbGFzcyBMYXllclJlbmRlcmVyQ2hyb21pdW07Ci1zdHJ1Y3QgTGF5ZXJSZW5kZXJl
ckNhcGFiaWxpdGllczsKK3N0cnVjdCBSZW5kZXJlckNhcGFiaWxpdGllczsKIHN0cnVjdCBDQ1Jl
bmRlcmluZ1N0YXRzOwogCiAvLyBDQ0xheWVyVHJlZUhvc3QtPkNDUHJveHkgY2FsbGJhY2sgaW50
ZXJmYWNlLgpAQCAtMTI5LDEwICsxMjgsMTAgQEAgcHVibGljOgogICAgIHZvaWQgZmluaXNoQWxs
UmVuZGVyaW5nKCk7CiAgICAgaW50IHNvdXJjZUFuaW1hdGlvbkZyYW1lTnVtYmVyKCkgY29uc3Q7
CiAKLSAgICBib29sIGluaXRpYWxpemVMYXllclJlbmRlcmVyKFBhc3NPd25QdHI8Q0NHcmFwaGlj
c0NvbnRleHQ+LCBUZXh0dXJlVXBsb2FkZXJPcHRpb24pOworICAgIGJvb2wgaW5pdGlhbGl6ZVJl
bmRlcmVyKFBhc3NPd25QdHI8Q0NHcmFwaGljc0NvbnRleHQ+LCBUZXh0dXJlVXBsb2FkZXJPcHRp
b24pOwogICAgIGJvb2wgaXNDb250ZXh0TG9zdCgpOwotICAgIENDUmVuZGVyZXIqIGxheWVyUmVu
ZGVyZXIoKSB7IHJldHVybiBtX2xheWVyUmVuZGVyZXIuZ2V0KCk7IH0KLSAgICBjb25zdCBMYXll
clJlbmRlcmVyQ2FwYWJpbGl0aWVzJiBsYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzKCkgY29uc3Q7
CisgICAgQ0NSZW5kZXJlciogcmVuZGVyZXIoKSB7IHJldHVybiBtX3JlbmRlcmVyLmdldCgpOyB9
CisgICAgY29uc3QgUmVuZGVyZXJDYXBhYmlsaXRpZXMmIHJlbmRlcmVyQ2FwYWJpbGl0aWVzKCkg
Y29uc3Q7CiAKICAgICBib29sIHN3YXBCdWZmZXJzKCk7CiAKQEAgLTI2Nyw3ICsyNjYsNyBAQCBw
cml2YXRlOgogCiAgICAgT3duUHRyPENDR3JhcGhpY3NDb250ZXh0PiBtX2NvbnRleHQ7CiAgICAg
T3duUHRyPENDUmVzb3VyY2VQcm92aWRlcj4gbV9yZXNvdXJjZVByb3ZpZGVyOwotICAgIE93blB0
cjxDQ1JlbmRlcmVyPiBtX2xheWVyUmVuZGVyZXI7CisgICAgT3duUHRyPENDUmVuZGVyZXI+IG1f
cmVuZGVyZXI7CiAgICAgT3duUHRyPENDTGF5ZXJJbXBsPiBtX3Jvb3RMYXllckltcGw7CiAgICAg
Q0NMYXllckltcGwqIG1fcm9vdFNjcm9sbExheWVySW1wbDsKICAgICBDQ0xheWVySW1wbCogbV9j
dXJyZW50bHlTY3JvbGxpbmdMYXllckltcGw7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ByaW9yaXRpemVkVGV4dHVyZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ByaW9yaXRpemVk
VGV4dHVyZS5jcHAKaW5kZXggYjE3MjI3NjNhYzIwNDk3ZTZiYjdlZjM1YzMyMDc5ZTE4MTM1Yzk1
ZS4uZDlmNjhhZjBhZTBiOTkyODEzM2EyMzJkNzQxNjkyNDc2MTIwNmRkYiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQcmlvcml0aXpl
ZFRleHR1cmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDUHJpb3JpdGl6ZWRUZXh0dXJlLmNwcApAQCAtMjgsNyArMjgsNiBAQAogCiAjaW5j
bHVkZSAiQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyLmgiCiAjaW5jbHVkZSAiQ0NQcmlvcml0
eUNhbGN1bGF0b3IuaCIKLSNpbmNsdWRlICJMYXllclJlbmRlcmVyQ2hyb21pdW0uaCIKICNpbmNs
dWRlIDxhbGdvcml0aG0+CiAKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ByaW9yaXRpemVkVGV4
dHVyZU1hbmFnZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyLmNwcAppbmRleCA0YTI0MTc5YzU3ODBh
NjgyYzRlZDRhZDgzM2MxNmEyN2U2ZDBkOGQ3Li45NmZiMDVkOTQ1MmIxMTc2ZTI5YjQ3N2VhN2Y1
ODM1ZTJjMzEwODVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUHJpb3JpdGl6ZWRUZXh0
dXJlTWFuYWdlci5jcHAKQEAgLTI4LDcgKzI4LDYgQEAKIAogI2luY2x1ZGUgIkNDUHJpb3JpdGl6
ZWRUZXh0dXJlLmgiCiAjaW5jbHVkZSAiQ0NQcmlvcml0eUNhbGN1bGF0b3IuaCIKLSNpbmNsdWRl
ICJMYXllclJlbmRlcmVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJUcmFjZUV2ZW50LmgiCiAjaW5j
bHVkZSA8YWxnb3JpdGhtPgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ByaW9yaXR5Q2FsY3VsYXRvci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ByaW9yaXR5Q2FsY3VsYXRvci5j
cHAKaW5kZXggOTAwODQwNDNkOTcxOTg0MGE5ZWNiMjM0NThjZTc1ZmIzMDEyOTYxOC4uNWE4YmVi
YWNhOWFmYWNjMDZkM2NmNzk3YjQ2M2YzMjEwMjdhNTQ2ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQcmlvcml0eUNhbGN1bGF0b3Iu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
UHJpb3JpdHlDYWxjdWxhdG9yLmNwcApAQCAtMjYsOCArMjYsNiBAQAogCiAjaW5jbHVkZSAiQ0NQ
cmlvcml0eUNhbGN1bGF0b3IuaCIKIAotI2luY2x1ZGUgIkxheWVyUmVuZGVyZXJDaHJvbWl1bS5o
IgotCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC05Miw0
ICs5MCwzIEBAIGludCBDQ1ByaW9yaXR5Q2FsY3VsYXRvcjo6cHJpb3JpdHlGcm9tVmlzaWJpbGl0
eShib29sIHZpc2libGUsIGJvb2wgZHJhd3NUb1Jvb3RTCiB9CiAKIH0gLy8gV2ViQ29yZQotCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q1Byb3h5LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q1Byb3h5LmgKaW5kZXggOTM1ZjEzMzYxY2Y1YWYyZGE5Mzc3MDYzODRiZGZjMzhhYWFmZjdhNS4u
NjAyZTlkNDlmZjhkNzJmNjQ3NjNmMmI0YmNlNzVmYjA2ZDQ5MmNhNiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQcm94eS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUHJveHkuaApA
QCAtMzYsNyArMzYsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIENDVGhyZWFkOwog
c3RydWN0IENDUmVuZGVyaW5nU3RhdHM7Ci1zdHJ1Y3QgTGF5ZXJSZW5kZXJlckNhcGFiaWxpdGll
czsKK3N0cnVjdCBSZW5kZXJlckNhcGFiaWxpdGllczsKIAogLy8gQWJzdHJhY3QgY2xhc3MgcmVz
cG9uc2libGUgZm9yIHByb3h5aW5nIGNvbW1hbmRzIGZyb20gdGhlIG1haW4tdGhyZWFkIHNpZGUg
b2YKIC8vIHRoZSBjb21wb3NpdG9yIG92ZXIgdG8gdGhlIGNvbXBvc2l0b3IgaW1wbGVtZW50YXRp
b24uCkBAIC02NCw3ICs2NCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgaXNTdGFydGVk
KCkgY29uc3QgPSAwOwogCiAgICAgLy8gQXR0ZW1wdHMgdG8gaW5pdGlhbGl6ZSBhIGNvbnRleHQg
dG8gdXNlIGZvciByZW5kZXJpbmcuIFJldHVybnMgZmFsc2UgaWYgdGhlIGNvbnRleHQgY291bGQg
bm90IGJlIGNyZWF0ZWQuCi0gICAgLy8gVGhlIGNvbnRleHQgd2lsbCBub3QgYmUgdXNlZCBhbmQg
bm8gZnJhbWVzIG1heSBiZSBwcm9kdWNlZCB1bnRpbCBpbml0aWFsaXplTGF5ZXJSZW5kZXJlcigp
IGlzIGNhbGxlZC4KKyAgICAvLyBUaGUgY29udGV4dCB3aWxsIG5vdCBiZSB1c2VkIGFuZCBubyBm
cmFtZXMgbWF5IGJlIHByb2R1Y2VkIHVudGlsIGluaXRpYWxpemVSZW5kZXJlcigpIGlzIGNhbGxl
ZC4KICAgICB2aXJ0dWFsIGJvb2wgaW5pdGlhbGl6ZUNvbnRleHQoKSA9IDA7CiAKICAgICAvLyBJ
bmRpY2F0ZXMgdGhhdCB0aGUgY29tcG9zaXRpbmcgc3VyZmFjZSBhc3NvY2lhdGVkIHdpdGggb3Vy
IGNvbnRleHQgaXMgcmVhZHkgdG8gdXNlLgpAQCAtNzMsNyArNzMsNyBAQCBwdWJsaWM6CiAgICAg
dmlydHVhbCB2b2lkIHNldFZpc2libGUoYm9vbCkgPSAwOwogCiAgICAgLy8gQXR0ZW1wdHMgdG8g
aW5pdGlhbGl6ZSB0aGUgbGF5ZXIgcmVuZGVyZXIuIFJldHVybnMgZmFsc2UgaWYgdGhlIGNvbnRl
eHQgaXNuJ3QgdXNhYmxlIGZvciBjb21wb3NpdGluZy4KLSAgICB2aXJ0dWFsIGJvb2wgaW5pdGlh
bGl6ZUxheWVyUmVuZGVyZXIoKSA9IDA7CisgICAgdmlydHVhbCBib29sIGluaXRpYWxpemVSZW5k
ZXJlcigpID0gMDsKIAogICAgIC8vIEF0dGVtcHRzIHRvIHJlY3JlYXRlIHRoZSBjb250ZXh0IGFu
ZCBsYXllciByZW5kZXJlciBhZnRlciBhIGNvbnRleHQgbG9zdC4gUmV0dXJucyBmYWxzZSBpZiB0
aGUgcmVuZGVyZXIgY291bGRuJ3QgYmUKICAgICAvLyByZWluaXRpYWxpemVkLgpAQCAtODMsNyAr
ODMsNyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgaW1wbFNpZGVSZW5kZXJpbmdTdGF0
cyhDQ1JlbmRlcmluZ1N0YXRzJikgPSAwOwogCi0gICAgdmlydHVhbCBjb25zdCBMYXllclJlbmRl
cmVyQ2FwYWJpbGl0aWVzJiBsYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzKCkgY29uc3QgPSAwOwor
ICAgIHZpcnR1YWwgY29uc3QgUmVuZGVyZXJDYXBhYmlsaXRpZXMmIHJlbmRlcmVyQ2FwYWJpbGl0
aWVzKCkgY29uc3QgPSAwOwogCiAgICAgdmlydHVhbCB2b2lkIHNldE5lZWRzQW5pbWF0ZSgpID0g
MDsKICAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNDb21taXQoKSA9IDA7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZh
Y2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NS
ZW5kZXJTdXJmYWNlLmNwcAppbmRleCAxMWVkYmZhODhiNDAwNmYyODcxN2VlZWEwNmFjMmJkOWJm
NWZmNTk1Li5lY2FmOTkyZGFjNDRjZGM1NzYxN2Y0MmIwNjYzZTIwN2Y1M2U5ZjgwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRl
clN1cmZhY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5jcHAKQEAgLTM2LDggKzM2LDYgQEAKICNpbmNsdWRlICJD
Q1F1YWRTaW5rLmgiCiAjaW5jbHVkZSAiQ0NSZW5kZXJQYXNzRHJhd1F1YWQuaCIKICNpbmNsdWRl
ICJDQ1NoYXJlZFF1YWRTdGF0ZS5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCi0j
aW5jbHVkZSAiTGF5ZXJSZW5kZXJlckNocm9taXVtLmgiCiAjaW5jbHVkZSAiVGV4dFN0cmVhbS5o
IgogI2luY2x1ZGUgPHB1YmxpYy9XZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oPgogI2luY2x1ZGUg
PHd0Zi90ZXh0L0NTdHJpbmcuaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNlLmgKaW5kZXggMGU1
MThiMmFhZjQ4NzUxODZkZjJlNjk1NmE2NWExYTQyNTc4MWJlZi4uOTczNDc4ODdmNDFkNmQ3NTk2
MWRiMzZiZTg2MDRkYzUzN2EzZmJiNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNlLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNlLmgKQEAg
LTQyLDcgKzQyLDYgQEAgY2xhc3MgQ0NEYW1hZ2VUcmFja2VyOwogY2xhc3MgQ0NRdWFkU2luazsK
IGNsYXNzIENDUmVuZGVyUGFzczsKIGNsYXNzIENDTGF5ZXJJbXBsOwotY2xhc3MgTGF5ZXJSZW5k
ZXJlckNocm9taXVtOwogY2xhc3MgVGV4dFN0cmVhbTsKIAogY2xhc3MgQ0NSZW5kZXJTdXJmYWNl
IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDUmVuZGVyZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDUmVuZGVyZXIuaAppbmRleCA0MGFiMjQxYzVlOTEzNjQxYmVhNjUyOTU5OTFhYTIy
ZmJhZTQ1MGMxLi45NDZhZWM2MzMzNjI5ZWFjY2JhODg2ODNjYTFkOTc4NGRhNDU5NDM2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Jl
bmRlcmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NSZW5kZXJlci5oCkBAIC02Niw3ICs2Niw3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwg
fkNDUmVuZGVyZXIoKSB7IH0KIAotICAgIHZpcnR1YWwgY29uc3QgTGF5ZXJSZW5kZXJlckNhcGFi
aWxpdGllcyYgY2FwYWJpbGl0aWVzKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgY29uc3QgUmVu
ZGVyZXJDYXBhYmlsaXRpZXMmIGNhcGFiaWxpdGllcygpIGNvbnN0ID0gMDsKIAogICAgIGNvbnN0
IENDTGF5ZXJUcmVlU2V0dGluZ3MmIHNldHRpbmdzKCkgY29uc3QgeyByZXR1cm4gbV9jbGllbnQt
PnNldHRpbmdzKCk7IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJlckdMLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyZXJHTC5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjkx
YjU5YTU3YzdmNDMyZmE1MzVjMmVlMjVjNjg4ZThhNTZmNDM3MwotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyZXJH
TC5jcHAKQEAgLTAsMCArMSwxNTM1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAq
IGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRo
ZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBVU0Uo
QUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisjaW5jbHVkZSAiQ0NSZW5kZXJlckdMLmgiCisKKyNp
bmNsdWRlICJDQ0RhbWFnZVRyYWNrZXIuaCIKKyNpbmNsdWRlICJDQ0xheWVyUXVhZC5oIgorI2lu
Y2x1ZGUgIkNDTWF0aFV0aWwuaCIKKyNpbmNsdWRlICJDQ1Byb3h5LmgiCisjaW5jbHVkZSAiQ0NS
ZW5kZXJQYXNzLmgiCisjaW5jbHVkZSAiQ0NSZW5kZXJTdXJmYWNlRmlsdGVycy5oIgorI2luY2x1
ZGUgIkNDU2NvcGVkVGV4dHVyZS5oIgorI2luY2x1ZGUgIkNDU2V0dGluZ3MuaCIKKyNpbmNsdWRl
ICJDQ1NpbmdsZVRocmVhZFByb3h5LmgiCisjaW5jbHVkZSAiQ0NWaWRlb0xheWVySW1wbC5oIgor
I2luY2x1ZGUgIkV4dGVuc2lvbnMzRC5oIgorI2luY2x1ZGUgIkZsb2F0UXVhZC5oIgorI2luY2x1
ZGUgIkdlb21ldHJ5QmluZGluZy5oIgorI2luY2x1ZGUgIkdyVGV4dHVyZS5oIgorI2luY2x1ZGUg
Ik5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1Db2xvci5oIgorI2luY2x1ZGUg
IlNrQml0bWFwLmgiCisjaW5jbHVkZSAiU2tDb2xvci5oIgorI2luY2x1ZGUgIlRocm90dGxlZFRl
eHR1cmVVcGxvYWRlci5oIgorI2luY2x1ZGUgIlRyYWNlRXZlbnQuaCIKKyNpbmNsdWRlICJVbnRo
cm90dGxlZFRleHR1cmVVcGxvYWRlci5oIgorI2luY2x1ZGUgPHB1YmxpYy9XZWJHcmFwaGljc0Nv
bnRleHQzRC5oPgorI2luY2x1ZGUgPHB1YmxpYy9XZWJTaGFyZWRHcmFwaGljc0NvbnRleHQzRC5o
PgorI2luY2x1ZGUgPHB1YmxpYy9XZWJWaWRlb0ZyYW1lLmg+CisjaW5jbHVkZSA8d3RmL0N1cnJl
bnRUaW1lLmg+CisjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4
dC9TdHJpbmdIYXNoLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBzdGQ7Cit1c2luZyBXZWJLaXQ6Oldl
YkdyYXBoaWNzQ29udGV4dDNEOwordXNpbmcgV2ViS2l0OjpXZWJHcmFwaGljc01lbW9yeUFsbG9j
YXRpb247Cit1c2luZyBXZWJLaXQ6OldlYlNoYXJlZEdyYXBoaWNzQ29udGV4dDNEOwordXNpbmcg
V2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeDsKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CituYW1lc3BhY2UgeworCitib29sIG5lZWRzSU9TdXJmYWNlUmVhZGJhY2tXb3JrYXJvdW5kKCkK
K3sKKyNpZiBPUyhEQVJXSU4pCisgICAgcmV0dXJuIHRydWU7CisjZWxzZQorICAgIHJldHVybiBm
YWxzZTsKKyNlbmRpZgorfQorCit9IC8vIGFub255bW91cyBuYW1lc3BhY2UKKworUGFzc093blB0
cjxDQ1JlbmRlcmVyR0w+IENDUmVuZGVyZXJHTDo6Y3JlYXRlKENDUmVuZGVyZXJDbGllbnQqIGNs
aWVudCwgQ0NSZXNvdXJjZVByb3ZpZGVyKiByZXNvdXJjZVByb3ZpZGVyLCBUZXh0dXJlVXBsb2Fk
ZXJPcHRpb24gdGV4dHVyZVVwbG9hZGVyU2V0dGluZykKK3sKKyAgICBPd25QdHI8Q0NSZW5kZXJl
ckdMPiByZW5kZXJlcihhZG9wdFB0cihuZXcgQ0NSZW5kZXJlckdMKGNsaWVudCwgcmVzb3VyY2VQ
cm92aWRlciwgdGV4dHVyZVVwbG9hZGVyU2V0dGluZykpKTsKKyAgICBpZiAoIXJlbmRlcmVyLT5p
bml0aWFsaXplKCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgcmV0dXJuIHJlbmRl
cmVyLnJlbGVhc2UoKTsKK30KKworQ0NSZW5kZXJlckdMOjpDQ1JlbmRlcmVyR0woQ0NSZW5kZXJl
ckNsaWVudCogY2xpZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgQ0NSZXNvdXJjZVByb3ZpZGVyKiByZXNvdXJjZVByb3ZpZGVyLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGV4dHVyZVVwbG9hZGVyT3B0aW9uIHRl
eHR1cmVVcGxvYWRlclNldHRpbmcpCisgICAgOiBDQ0RpcmVjdFJlbmRlcmVyKGNsaWVudCwgcmVz
b3VyY2VQcm92aWRlcikKKyAgICAsIG1fb2Zmc2NyZWVuRnJhbWVidWZmZXJJZCgwKQorICAgICwg
bV9zaGFyZWRHZW9tZXRyeVF1YWQoRmxvYXRSZWN0KC0wLjVmLCAtMC41ZiwgMS4wZiwgMS4wZikp
CisgICAgLCBtX2NvbnRleHQocmVzb3VyY2VQcm92aWRlci0+Z3JhcGhpY3NDb250ZXh0M0QoKSkK
KyAgICAsIG1faXNWaWV3cG9ydENoYW5nZWQoZmFsc2UpCisgICAgLCBtX2lzRnJhbWVidWZmZXJE
aXNjYXJkZWQoZmFsc2UpCisgICAgLCBtX2lzVXNpbmdCaW5kVW5pZm9ybShmYWxzZSkKKyAgICAs
IG1fdmlzaWJsZSh0cnVlKQorICAgICwgbV90ZXh0dXJlVXBsb2FkZXJTZXR0aW5nKHRleHR1cmVV
cGxvYWRlclNldHRpbmcpCit7CisgICAgQVNTRVJUKG1fY29udGV4dCk7Cit9CisKK2Jvb2wgQ0NS
ZW5kZXJlckdMOjppbml0aWFsaXplKCkKK3sKKyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRl
eHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIG1fY29udGV4dC0+c2V0
Q29udGV4dExvc3RDYWxsYmFjayh0aGlzKTsKKyAgICBtX2NvbnRleHQtPnB1c2hHcm91cE1hcmtl
ckVYVCgiQ29tcG9zaXRvckNvbnRleHQiKTsKKworICAgIFdlYktpdDo6V2ViU3RyaW5nIGV4dGVu
c2lvbnNXZWJTdHJpbmcgPSBtX2NvbnRleHQtPmdldFN0cmluZyhHcmFwaGljc0NvbnRleHQzRDo6
RVhURU5TSU9OUyk7CisgICAgU3RyaW5nIGV4dGVuc2lvbnNTdHJpbmcoZXh0ZW5zaW9uc1dlYlN0
cmluZy5kYXRhKCksIGV4dGVuc2lvbnNXZWJTdHJpbmcubGVuZ3RoKCkpOworICAgIFZlY3RvcjxT
dHJpbmc+IGV4dGVuc2lvbnNMaXN0OworICAgIGV4dGVuc2lvbnNTdHJpbmcuc3BsaXQoJyAnLCBl
eHRlbnNpb25zTGlzdCk7CisgICAgSGFzaFNldDxTdHJpbmc+IGV4dGVuc2lvbnM7CisgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBleHRlbnNpb25zTGlzdC5zaXplKCk7ICsraSkKKyAgICAgICAg
ZXh0ZW5zaW9ucy5hZGQoZXh0ZW5zaW9uc0xpc3RbaV0pOworCisgICAgaWYgKHNldHRpbmdzKCku
YWNjZWxlcmF0ZVBhaW50aW5nICYmIGV4dGVuc2lvbnMuY29udGFpbnMoIkdMX0VYVF90ZXh0dXJl
X2Zvcm1hdF9CR1JBODg4OCIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICYmIGV4dGVuc2lvbnMuY29udGFpbnMoIkdMX0VYVF9yZWFkX2Zvcm1hdF9iZ3JhIikpCisgICAg
ICAgIG1fY2FwYWJpbGl0aWVzLnVzaW5nQWNjZWxlcmF0ZWRQYWludGluZyA9IHRydWU7CisgICAg
ZWxzZQorICAgICAgICBtX2NhcGFiaWxpdGllcy51c2luZ0FjY2VsZXJhdGVkUGFpbnRpbmcgPSBm
YWxzZTsKKworCisgICAgbV9jYXBhYmlsaXRpZXMuY29udGV4dEhhc0NhY2hlZEZyb250QnVmZmVy
ID0gZXh0ZW5zaW9ucy5jb250YWlucygiR0xfQ0hST01JVU1fZnJvbnRfYnVmZmVyX2NhY2hlZCIp
OworCisgICAgbV9jYXBhYmlsaXRpZXMudXNpbmdQYXJ0aWFsU3dhcCA9IENDU2V0dGluZ3M6OnBh
cnRpYWxTd2FwRW5hYmxlZCgpICYmIGV4dGVuc2lvbnMuY29udGFpbnMoIkdMX0NIUk9NSVVNX3Bv
c3Rfc3ViX2J1ZmZlciIpOworCisgICAgLy8gVXNlIHRoZSBzd2FwQnVmZmVycyBjYWxsYmFjayBv
bmx5IHdpdGggdGhlIHRocmVhZGVkIHByb3h5LgorICAgIGlmIChDQ1Byb3h5OjpoYXNJbXBsVGhy
ZWFkKCkpCisgICAgICAgIG1fY2FwYWJpbGl0aWVzLnVzaW5nU3dhcENvbXBsZXRlQ2FsbGJhY2sg
PSBleHRlbnNpb25zLmNvbnRhaW5zKCJHTF9DSFJPTUlVTV9zd2FwYnVmZmVyc19jb21wbGV0ZV9j
YWxsYmFjayIpOworICAgIGlmIChtX2NhcGFiaWxpdGllcy51c2luZ1N3YXBDb21wbGV0ZUNhbGxi
YWNrKQorICAgICAgICBtX2NvbnRleHQtPnNldFN3YXBCdWZmZXJzQ29tcGxldGVDYWxsYmFja0NI
Uk9NSVVNKHRoaXMpOworCisgICAgbV9jYXBhYmlsaXRpZXMudXNpbmdTZXRWaXNpYmlsaXR5ID0g
ZXh0ZW5zaW9ucy5jb250YWlucygiR0xfQ0hST01JVU1fc2V0X3Zpc2liaWxpdHkiKTsKKworICAg
IGlmIChleHRlbnNpb25zLmNvbnRhaW5zKCJHTF9DSFJPTUlVTV9pb3N1cmZhY2UiKSkKKyAgICAg
ICAgQVNTRVJUKGV4dGVuc2lvbnMuY29udGFpbnMoIkdMX0FSQl90ZXh0dXJlX3JlY3RhbmdsZSIp
KTsKKworICAgIG1fY2FwYWJpbGl0aWVzLnVzaW5nR3B1TWVtb3J5TWFuYWdlciA9IGV4dGVuc2lv
bnMuY29udGFpbnMoIkdMX0NIUk9NSVVNX2dwdV9tZW1vcnlfbWFuYWdlciIpOworICAgIGlmICht
X2NhcGFiaWxpdGllcy51c2luZ0dwdU1lbW9yeU1hbmFnZXIpCisgICAgICAgIG1fY29udGV4dC0+
c2V0TWVtb3J5QWxsb2NhdGlvbkNoYW5nZWRDYWxsYmFja0NIUk9NSVVNKHRoaXMpOworCisgICAg
bV9jYXBhYmlsaXRpZXMudXNpbmdEaXNjYXJkRnJhbWVidWZmZXIgPSBleHRlbnNpb25zLmNvbnRh
aW5zKCJHTF9DSFJPTUlVTV9kaXNjYXJkX2ZyYW1lYnVmZmVyIik7CisKKyAgICBtX2NhcGFiaWxp
dGllcy51c2luZ0VnbEltYWdlID0gZXh0ZW5zaW9ucy5jb250YWlucygiR0xfT0VTX0VHTF9pbWFn
ZV9leHRlcm5hbCIpOworCisgICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT5nZXRJbnRlZ2Vy
dihHcmFwaGljc0NvbnRleHQzRDo6TUFYX1RFWFRVUkVfU0laRSwgJm1fY2FwYWJpbGl0aWVzLm1h
eFRleHR1cmVTaXplKSk7CisgICAgbV9jYXBhYmlsaXRpZXMuYmVzdFRleHR1cmVGb3JtYXQgPSBQ
bGF0Zm9ybUNvbG9yOjpiZXN0VGV4dHVyZUZvcm1hdChtX2NvbnRleHQsIGV4dGVuc2lvbnMuY29u
dGFpbnMoIkdMX0VYVF90ZXh0dXJlX2Zvcm1hdF9CR1JBODg4OCIpKTsKKworICAgIG1faXNVc2lu
Z0JpbmRVbmlmb3JtID0gZXh0ZW5zaW9ucy5jb250YWlucygiR0xfQ0hST01JVU1fYmluZF91bmlm
b3JtX2xvY2F0aW9uIik7CisKKyAgICBpZiAoIWluaXRpYWxpemVTaGFyZWRPYmplY3RzKCkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIE1ha2Ugc3VyZSB0aGUgdmlld3BvcnQgYW5k
IGNvbnRleHQgZ2V0cyBpbml0aWFsaXplZCwgZXZlbiBpZiBpdCBpcyB0byB6ZXJvLgorICAgIHZp
ZXdwb3J0Q2hhbmdlZCgpOworICAgIHJldHVybiB0cnVlOworfQorCitDQ1JlbmRlcmVyR0w6On5D
Q1JlbmRlcmVyR0woKQoreworICAgIEFTU0VSVChDQ1Byb3h5Ojppc0ltcGxUaHJlYWQoKSk7Cisg
ICAgbV9jb250ZXh0LT5zZXRTd2FwQnVmZmVyc0NvbXBsZXRlQ2FsbGJhY2tDSFJPTUlVTSgwKTsK
KyAgICBtX2NvbnRleHQtPnNldE1lbW9yeUFsbG9jYXRpb25DaGFuZ2VkQ2FsbGJhY2tDSFJPTUlV
TSgwKTsKKyAgICBtX2NvbnRleHQtPnNldENvbnRleHRMb3N0Q2FsbGJhY2soMCk7CisgICAgY2xl
YW51cFNoYXJlZE9iamVjdHMoKTsKK30KKworV2ViR3JhcGhpY3NDb250ZXh0M0QqIENDUmVuZGVy
ZXJHTDo6Y29udGV4dCgpCit7CisgICAgcmV0dXJuIG1fY29udGV4dDsKK30KKwordm9pZCBDQ1Jl
bmRlcmVyR0w6OmRlYnVnR0xDYWxsKFdlYkdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBjb25z
dCBjaGFyKiBjb21tYW5kLCBjb25zdCBjaGFyKiBmaWxlLCBpbnQgbGluZSkKK3sKKyAgICB1bnNp
Z25lZCBsb25nIGVycm9yID0gY29udGV4dC0+Z2V0RXJyb3IoKTsKKyAgICBpZiAoZXJyb3IgIT0g
R3JhcGhpY3NDb250ZXh0M0Q6Ok5PX0VSUk9SKQorICAgICAgICBMT0dfRVJST1IoIkdMIGNvbW1h
bmQgZmFpbGVkOiBGaWxlOiAlc1xuXHRMaW5lICVkXG5cdGNvbW1hbmQ6ICVzLCBlcnJvciAleFxu
IiwgZmlsZSwgbGluZSwgY29tbWFuZCwgc3RhdGljX2Nhc3Q8aW50PihlcnJvcikpOworfQorCit2
b2lkIENDUmVuZGVyZXJHTDo6c2V0VmlzaWJsZShib29sIHZpc2libGUpCit7CisgICAgaWYgKG1f
dmlzaWJsZSA9PSB2aXNpYmxlKQorICAgICAgICByZXR1cm47CisgICAgbV92aXNpYmxlID0gdmlz
aWJsZTsKKworICAgIC8vIFRPRE86IFJlcGxhY2Ugc2V0VmlzaWJpbGl0eUNIUk9NSVVNIHdpdGgg
YW4gZXh0ZW5zaW9uIHRvIGV4cGxpY2l0bHkgbWFuYWdlIGZyb250L2JhY2tidWZmZXJzCisgICAg
Ly8gY3JidWcuY29tLzExNjA0OQorICAgIGlmIChtX2NhcGFiaWxpdGllcy51c2luZ1NldFZpc2li
aWxpdHkpCisgICAgICAgIG1fY29udGV4dC0+c2V0VmlzaWJpbGl0eUNIUk9NSVVNKHZpc2libGUp
OworfQorCit2b2lkIENDUmVuZGVyZXJHTDo6cmVsZWFzZVJlbmRlclBhc3NUZXh0dXJlcygpCit7
CisgICAgbV9yZW5kZXJQYXNzVGV4dHVyZXMuY2xlYXIoKTsKK30KKwordm9pZCBDQ1JlbmRlcmVy
R0w6OnZpZXdwb3J0Q2hhbmdlZCgpCit7CisgICAgbV9pc1ZpZXdwb3J0Q2hhbmdlZCA9IHRydWU7
Cit9CisKK3ZvaWQgQ0NSZW5kZXJlckdMOjpjbGVhckZyYW1lYnVmZmVyKERyYXdpbmdGcmFtZSYg
ZnJhbWUpCit7CisgICAgLy8gT24gREVCVUcgYnVpbGRzLCBvcGFxdWUgcmVuZGVyIHBhc3NlcyBh
cmUgY2xlYXJlZCB0byBibHVlIHRvIGVhc2lseSBzZWUgcmVnaW9ucyB0aGF0IHdlcmUgbm90IGRy
YXduIG9uIHRoZSBzY3JlZW4uCisgICAgaWYgKGZyYW1lLmN1cnJlbnRSZW5kZXJQYXNzLT5oYXNU
cmFuc3BhcmVudEJhY2tncm91bmQoKSkKKyAgICAgICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0
LT5jbGVhckNvbG9yKDAsIDAsIDAsIDApKTsKKyAgICBlbHNlCisgICAgICAgIEdMQyhtX2NvbnRl
eHQsIG1fY29udGV4dC0+Y2xlYXJDb2xvcigwLCAwLCAxLCAxKSk7CisKKyNpZiBkZWZpbmVkKE5E
RUJVRykKKyAgICBpZiAoZnJhbWUuY3VycmVudFJlbmRlclBhc3MtPmhhc1RyYW5zcGFyZW50QmFj
a2dyb3VuZCgpKQorI2VuZGlmCisgICAgICAgIG1fY29udGV4dC0+Y2xlYXIoR3JhcGhpY3NDb250
ZXh0M0Q6OkNPTE9SX0JVRkZFUl9CSVQpOworfQorCit2b2lkIENDUmVuZGVyZXJHTDo6YmVnaW5E
cmF3aW5nRnJhbWUoRHJhd2luZ0ZyYW1lJiBmcmFtZSkKK3sKKyAgICAvLyBGSVhNRTogUmVtb3Zl
IHRoaXMgb25jZSBmcmFtZWJ1ZmZlciBpcyBhdXRvbWF0aWNhbGx5IHJlY3JlYXRlZCBvbiBmaXJz
dCB1c2UKKyAgICBlbnN1cmVGcmFtZWJ1ZmZlcigpOworCisgICAgaWYgKHZpZXdwb3J0U2l6ZSgp
LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgVFJBQ0VfRVZFTlQwKCJjYyIsICJD
Q1JlbmRlcmVyR0w6OmRyYXdMYXllcnMiKTsKKyAgICBpZiAobV9pc1ZpZXdwb3J0Q2hhbmdlZCkg
eworICAgICAgICAvLyBPbmx5IHJlc2hhcGUgd2hlbiB3ZSBrbm93IHdlIGFyZSBnb2luZyB0byBk
cmF3LiBPdGhlcndpc2UsIHRoZSByZXNoYXBlCisgICAgICAgIC8vIGNhbiBsZWF2ZSB0aGUgd2lu
ZG93IGF0IHRoZSB3cm9uZyBzaXplIGlmIHdlIG5ldmVyIGRyYXcgYW5kIHRoZSBwcm9wZXIKKyAg
ICAgICAgLy8gdmlld3BvcnQgc2l6ZSBpcyBuZXZlciBzZXQuCisgICAgICAgIG1faXNWaWV3cG9y
dENoYW5nZWQgPSBmYWxzZTsKKyAgICAgICAgbV9jb250ZXh0LT5yZXNoYXBlKHZpZXdwb3J0V2lk
dGgoKSwgdmlld3BvcnRIZWlnaHQoKSk7CisgICAgfQorCisgICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7CisgICAgLy8gQmluZCB0aGUgY29tbW9uIHZlcnRleCBhdHRyaWJ1dGVzIHVzZWQgZm9yIGRy
YXdpbmcgYWxsIHRoZSBsYXllcnMuCisgICAgbV9zaGFyZWRHZW9tZXRyeS0+cHJlcGFyZUZvckRy
YXcoKTsKKworICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+ZGlzYWJsZShHcmFwaGljc0Nv
bnRleHQzRDo6REVQVEhfVEVTVCkpOworICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+ZGlz
YWJsZShHcmFwaGljc0NvbnRleHQzRDo6Q1VMTF9GQUNFKSk7CisgICAgR0xDKG1fY29udGV4dCwg
bV9jb250ZXh0LT5jb2xvck1hc2sodHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSkpOworICAgIEdMQyht
X2NvbnRleHQsIG1fY29udGV4dC0+ZW5hYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORCkpOwor
ICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+YmxlbmRGdW5jKEdyYXBoaWNzQ29udGV4dDNE
OjpPTkUsIEdyYXBoaWNzQ29udGV4dDNEOjpPTkVfTUlOVVNfU1JDX0FMUEhBKSk7Cit9CisKK3Zv
aWQgQ0NSZW5kZXJlckdMOjpkb05vT3AoKQoreworICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4
dC0+YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgMCkpOwor
ICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+Zmx1c2goKSk7Cit9CisKK3ZvaWQgQ0NSZW5k
ZXJlckdMOjpkcmF3UXVhZChEcmF3aW5nRnJhbWUmIGZyYW1lLCBjb25zdCBDQ0RyYXdRdWFkKiBx
dWFkKQoreworICAgIGlmIChxdWFkLT5uZWVkc0JsZW5kaW5nKCkpCisgICAgICAgIEdMQyhtX2Nv
bnRleHQsIG1fY29udGV4dC0+ZW5hYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORCkpOworICAg
IGVsc2UKKyAgICAgICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT5kaXNhYmxlKEdyYXBoaWNz
Q29udGV4dDNEOjpCTEVORCkpOworCisgICAgc3dpdGNoIChxdWFkLT5tYXRlcmlhbCgpKSB7Cisg
ICAgY2FzZSBDQ0RyYXdRdWFkOjpJbnZhbGlkOgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDQ0RyYXdRdWFkOjpDaGVja2VyYm9hcmQ6Cisg
ICAgICAgIGRyYXdDaGVja2VyYm9hcmRRdWFkKGZyYW1lLCBDQ0NoZWNrZXJib2FyZERyYXdRdWFk
OjptYXRlcmlhbENhc3QocXVhZCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENDRHJhd1F1
YWQ6OkRlYnVnQm9yZGVyOgorICAgICAgICBkcmF3RGVidWdCb3JkZXJRdWFkKGZyYW1lLCBDQ0Rl
YnVnQm9yZGVyRHJhd1F1YWQ6Om1hdGVyaWFsQ2FzdChxdWFkKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgQ0NEcmF3UXVhZDo6SU9TdXJmYWNlQ29udGVudDoKKyAgICAgICAgZHJhd0lPU3Vy
ZmFjZVF1YWQoZnJhbWUsIENDSU9TdXJmYWNlRHJhd1F1YWQ6Om1hdGVyaWFsQ2FzdChxdWFkKSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ0NEcmF3UXVhZDo6UmVuZGVyUGFzczoKKyAgICAg
ICAgZHJhd1JlbmRlclBhc3NRdWFkKGZyYW1lLCBDQ1JlbmRlclBhc3NEcmF3UXVhZDo6bWF0ZXJp
YWxDYXN0KHF1YWQpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDQ0RyYXdRdWFkOjpTb2xp
ZENvbG9yOgorICAgICAgICBkcmF3U29saWRDb2xvclF1YWQoZnJhbWUsIENDU29saWRDb2xvckRy
YXdRdWFkOjptYXRlcmlhbENhc3QocXVhZCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEND
RHJhd1F1YWQ6OlN0cmVhbVZpZGVvQ29udGVudDoKKyAgICAgICAgZHJhd1N0cmVhbVZpZGVvUXVh
ZChmcmFtZSwgQ0NTdHJlYW1WaWRlb0RyYXdRdWFkOjptYXRlcmlhbENhc3QocXVhZCkpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIENDRHJhd1F1YWQ6OlRleHR1cmVDb250ZW50OgorICAgICAg
ICBkcmF3VGV4dHVyZVF1YWQoZnJhbWUsIENDVGV4dHVyZURyYXdRdWFkOjptYXRlcmlhbENhc3Qo
cXVhZCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENDRHJhd1F1YWQ6OlRpbGVkQ29udGVu
dDoKKyAgICAgICAgZHJhd1RpbGVRdWFkKGZyYW1lLCBDQ1RpbGVEcmF3UXVhZDo6bWF0ZXJpYWxD
YXN0KHF1YWQpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDQ0RyYXdRdWFkOjpZVVZWaWRl
b0NvbnRlbnQ6CisgICAgICAgIGRyYXdZVVZWaWRlb1F1YWQoZnJhbWUsIENDWVVWVmlkZW9EcmF3
UXVhZDo6bWF0ZXJpYWxDYXN0KHF1YWQpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCit2
b2lkIENDUmVuZGVyZXJHTDo6ZHJhd0NoZWNrZXJib2FyZFF1YWQoY29uc3QgRHJhd2luZ0ZyYW1l
JiBmcmFtZSwgY29uc3QgQ0NDaGVja2VyYm9hcmREcmF3UXVhZCogcXVhZCkKK3sKKyAgICBjb25z
dCBUaWxlQ2hlY2tlcmJvYXJkUHJvZ3JhbSogcHJvZ3JhbSA9IHRpbGVDaGVja2VyYm9hcmRQcm9n
cmFtKCk7CisgICAgQVNTRVJUKHByb2dyYW0gJiYgcHJvZ3JhbS0+aW5pdGlhbGl6ZWQoKSk7Cisg
ICAgR0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT51c2VQcm9ncmFtKHByb2dyYW0tPnByb2dyYW0o
KSkpOworCisgICAgSW50UmVjdCB0aWxlUmVjdCA9IHF1YWQtPnF1YWRSZWN0KCk7CisgICAgZmxv
YXQgdGV4T2Zmc2V0WCA9IHRpbGVSZWN0LngoKTsKKyAgICBmbG9hdCB0ZXhPZmZzZXRZID0gdGls
ZVJlY3QueSgpOworICAgIGZsb2F0IHRleFNjYWxlWCA9IHRpbGVSZWN0LndpZHRoKCk7CisgICAg
ZmxvYXQgdGV4U2NhbGVZID0gdGlsZVJlY3QuaGVpZ2h0KCk7CisgICAgR0xDKGNvbnRleHQoKSwg
Y29udGV4dCgpLT51bmlmb3JtNGYocHJvZ3JhbS0+ZnJhZ21lbnRTaGFkZXIoKS50ZXhUcmFuc2Zv
cm1Mb2NhdGlvbigpLCB0ZXhPZmZzZXRYLCB0ZXhPZmZzZXRZLCB0ZXhTY2FsZVgsIHRleFNjYWxl
WSkpOworCisgICAgY29uc3QgaW50IGNoZWNrZXJib2FyZFdpZHRoID0gMTY7CisgICAgZmxvYXQg
ZnJlcXVlbmN5ID0gMS4wIC8gY2hlY2tlcmJvYXJkV2lkdGg7CisKKyAgICBHTEMoY29udGV4dCgp
LCBjb250ZXh0KCktPnVuaWZvcm0xZihwcm9ncmFtLT5mcmFnbWVudFNoYWRlcigpLmZyZXF1ZW5j
eUxvY2F0aW9uKCksIGZyZXF1ZW5jeSkpOworCisgICAgc2V0U2hhZGVyT3BhY2l0eShxdWFkLT5v
cGFjaXR5KCksIHByb2dyYW0tPmZyYWdtZW50U2hhZGVyKCkuYWxwaGFMb2NhdGlvbigpKTsKKyAg
ICBkcmF3UXVhZEdlb21ldHJ5KGZyYW1lLCBxdWFkLT5xdWFkVHJhbnNmb3JtKCksIHF1YWQtPnF1
YWRSZWN0KCksIHByb2dyYW0tPnZlcnRleFNoYWRlcigpLm1hdHJpeExvY2F0aW9uKCkpOworfQor
Cit2b2lkIENDUmVuZGVyZXJHTDo6ZHJhd0RlYnVnQm9yZGVyUXVhZChjb25zdCBEcmF3aW5nRnJh
bWUmIGZyYW1lLCBjb25zdCBDQ0RlYnVnQm9yZGVyRHJhd1F1YWQqIHF1YWQpCit7CisgICAgc3Rh
dGljIGZsb2F0IGdsTWF0cml4WzE2XTsKKyAgICBjb25zdCBTb2xpZENvbG9yUHJvZ3JhbSogcHJv
Z3JhbSA9IHNvbGlkQ29sb3JQcm9ncmFtKCk7CisgICAgQVNTRVJUKHByb2dyYW0gJiYgcHJvZ3Jh
bS0+aW5pdGlhbGl6ZWQoKSk7CisgICAgR0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT51c2VQcm9n
cmFtKHByb2dyYW0tPnByb2dyYW0oKSkpOworCisgICAgLy8gVXNlIHRoZSBmdWxsIHF1YWRSZWN0
IGZvciBkZWJ1ZyBxdWFkcyB0byBub3QgbW92ZSB0aGUgZWRnZXMgYmFzZWQgb24gcGFydGlhbCBz
d2Fwcy4KKyAgICBjb25zdCBJbnRSZWN0JiBsYXllclJlY3QgPSBxdWFkLT5xdWFkUmVjdCgpOwor
ICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IHJlbmRlck1hdHJpeCA9IHF1YWQtPnF1YWRUcmFu
c2Zvcm0oKTsKKyAgICByZW5kZXJNYXRyaXgudHJhbnNsYXRlKDAuNSAqIGxheWVyUmVjdC53aWR0
aCgpICsgbGF5ZXJSZWN0LngoKSwgMC41ICogbGF5ZXJSZWN0LmhlaWdodCgpICsgbGF5ZXJSZWN0
LnkoKSk7CisgICAgcmVuZGVyTWF0cml4LnNjYWxlTm9uVW5pZm9ybShsYXllclJlY3Qud2lkdGgo
KSwgbGF5ZXJSZWN0LmhlaWdodCgpKTsKKyAgICBDQ1JlbmRlcmVyR0w6OnRvR0xNYXRyaXgoJmds
TWF0cml4WzBdLCBmcmFtZS5wcm9qZWN0aW9uTWF0cml4ICogcmVuZGVyTWF0cml4KTsKKyAgICBH
TEMoY29udGV4dCgpLCBjb250ZXh0KCktPnVuaWZvcm1NYXRyaXg0ZnYocHJvZ3JhbS0+dmVydGV4
U2hhZGVyKCkubWF0cml4TG9jYXRpb24oKSwgMSwgZmFsc2UsICZnbE1hdHJpeFswXSkpOworCisg
ICAgU2tDb2xvciBjb2xvciA9IHF1YWQtPmNvbG9yKCk7CisgICAgZmxvYXQgYWxwaGEgPSBTa0Nv
bG9yR2V0QShjb2xvcikgLyAyNTUuMDsKKworICAgIEdMQyhjb250ZXh0KCksIGNvbnRleHQoKS0+
dW5pZm9ybTRmKHByb2dyYW0tPmZyYWdtZW50U2hhZGVyKCkuY29sb3JMb2NhdGlvbigpLCAoU2tD
b2xvckdldFIoY29sb3IpIC8gMjU1LjApICogYWxwaGEsIChTa0NvbG9yR2V0Ryhjb2xvcikgLyAy
NTUuMCkgKiBhbHBoYSwgKFNrQ29sb3JHZXRCKGNvbG9yKSAvIDI1NS4wKSAqIGFscGhhLCBhbHBo
YSkpOworCisgICAgR0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT5saW5lV2lkdGgocXVhZC0+d2lk
dGgoKSkpOworCisgICAgLy8gVGhlIGluZGljZXMgZm9yIHRoZSBsaW5lIGFyZSBzdG9yZWQgaW4g
dGhlIHNhbWUgYXJyYXkgYXMgdGhlIHRyaWFuZ2xlIGluZGljZXMuCisgICAgR0xDKGNvbnRleHQo
KSwgY29udGV4dCgpLT5kcmF3RWxlbWVudHMoR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVfTE9PUCwg
NCwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JULCA2ICogc2l6ZW9mKHVuc2lnbmVk
IHNob3J0KSkpOworfQorCitzdGF0aWMgaW5saW5lIFNrQml0bWFwIGFwcGx5RmlsdGVycyhDQ1Jl
bmRlcmVyR0wqIHJlbmRlcmVyLCBjb25zdCBXZWJLaXQ6OldlYkZpbHRlck9wZXJhdGlvbnMmIGZp
bHRlcnMsIENDU2NvcGVkVGV4dHVyZSogc291cmNlVGV4dHVyZSkKK3sKKyAgICBpZiAoZmlsdGVy
cy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBTa0JpdG1hcCgpOworCisgICAgV2ViR3JhcGhp
Y3NDb250ZXh0M0QqIGZpbHRlckNvbnRleHQgPSBDQ1Byb3h5OjpoYXNJbXBsVGhyZWFkKCkgPyBX
ZWJTaGFyZWRHcmFwaGljc0NvbnRleHQzRDo6Y29tcG9zaXRvclRocmVhZENvbnRleHQoKSA6IFdl
YlNoYXJlZEdyYXBoaWNzQ29udGV4dDNEOjptYWluVGhyZWFkQ29udGV4dCgpOworICAgIEdyQ29u
dGV4dCogZmlsdGVyR3JDb250ZXh0ID0gQ0NQcm94eTo6aGFzSW1wbFRocmVhZCgpID8gV2ViU2hh
cmVkR3JhcGhpY3NDb250ZXh0M0Q6OmNvbXBvc2l0b3JUaHJlYWRHckNvbnRleHQoKSA6IFdlYlNo
YXJlZEdyYXBoaWNzQ29udGV4dDNEOjptYWluVGhyZWFkR3JDb250ZXh0KCk7CisKKyAgICBpZiAo
IWZpbHRlckNvbnRleHQgfHwgIWZpbHRlckdyQ29udGV4dCkKKyAgICAgICAgcmV0dXJuIFNrQml0
bWFwKCk7CisKKyAgICByZW5kZXJlci0+Y29udGV4dCgpLT5mbHVzaCgpOworCisgICAgQ0NSZXNv
dXJjZVByb3ZpZGVyOjpTY29wZWRXcml0ZUxvY2tHTCBsb2NrKHJlbmRlcmVyLT5yZXNvdXJjZVBy
b3ZpZGVyKCksIHNvdXJjZVRleHR1cmUtPmlkKCkpOworICAgIFNrQml0bWFwIHNvdXJjZSA9IEND
UmVuZGVyU3VyZmFjZUZpbHRlcnM6OmFwcGx5KGZpbHRlcnMsIGxvY2sudGV4dHVyZUlkKCksIHNv
dXJjZVRleHR1cmUtPnNpemUoKSwgZmlsdGVyQ29udGV4dCwgZmlsdGVyR3JDb250ZXh0KTsKKyAg
ICByZXR1cm4gc291cmNlOworfQorCitQYXNzT3duUHRyPENDU2NvcGVkVGV4dHVyZT4gQ0NSZW5k
ZXJlckdMOjpkcmF3QmFja2dyb3VuZEZpbHRlcnMoRHJhd2luZ0ZyYW1lJiBmcmFtZSwgY29uc3Qg
Q0NSZW5kZXJQYXNzRHJhd1F1YWQqIHF1YWQsIGNvbnN0IFdlYktpdDo6V2ViRmlsdGVyT3BlcmF0
aW9ucyYgZmlsdGVycywgY29uc3QgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIGNvbnRlbnRzRGV2
aWNlVHJhbnNmb3JtKQoreworICAgIC8vIFRoaXMgbWV0aG9kIGRyYXdzIGEgYmFja2dyb3VuZCBm
aWx0ZXIsIHdoaWNoIGFwcGxpZXMgYSBmaWx0ZXIgdG8gYW55IHBpeGVscyBiZWhpbmQgdGhlIHF1
YWQgYW5kIHNlZW4gdGhyb3VnaCBpdHMgYmFja2dyb3VuZC4KKyAgICAvLyBUaGUgYWxnb3JpdGht
IHdvcmtzIGFzIGZvbGxvd3M6CisgICAgLy8gMS4gQ29tcHV0ZSBhIGJvdW5kaW5nIGJveCBhcm91
bmQgdGhlIHBpeGVscyB0aGF0IHdpbGwgYmUgdmlzaWJsZSB0aHJvdWdoIHRoZSBxdWFkLgorICAg
IC8vIDIuIFJlYWQgdGhlIHBpeGVscyBpbiB0aGUgYm91bmRpbmcgYm94IGludG8gYSBidWZmZXIg
Ui4KKyAgICAvLyAzLiBBcHBseSB0aGUgYmFja2dyb3VuZCBmaWx0ZXIgdG8gUiwgc28gdGhhdCBp
dCBpcyBhcHBsaWVkIGluIHRoZSBwaXhlbHMnIGNvb3JkaW5hdGUgc3BhY2UuCisgICAgLy8gNC4g
QXBwbHkgdGhlIHF1YWQncyBpbnZlcnNlIHRyYW5zZm9ybSB0byBtYXAgdGhlIHBpeGVscyBpbiBS
IGludG8gdGhlIHF1YWQncyBjb250ZW50IHNwYWNlLiBUaGlzIGltcGxpY2l0bHkKKyAgICAvLyBj
bGlwcyBSIGJ5IHRoZSBjb250ZW50IGJvdW5kcyBvZiB0aGUgcXVhZCBzaW5jZSB0aGUgZGVzdGlu
YXRpb24gdGV4dHVyZSBoYXMgYm91bmRzIG1hdGNoaW5nIHRoZSBxdWFkJ3MgY29udGVudC4KKyAg
ICAvLyA1LiBEcmF3IHRoZSBiYWNrZ3JvdW5kIHRleHR1cmUgZm9yIHRoZSBjb250ZW50cyB1c2lu
ZyB0aGUgc2FtZSB0cmFuc2Zvcm0gYXMgdXNlZCB0byBkcmF3IHRoZSBjb250ZW50cyBpdHNlbGYu
IFRoaXMgaXMgZG9uZQorICAgIC8vIHdpdGhvdXQgYmxlbmRpbmcgdG8gcmVwbGFjZSB0aGUgY3Vy
cmVudCBiYWNrZ3JvdW5kIHBpeGVscyB3aXRoIHRoZSBuZXcgZmlsdGVyZWQgYmFja2dyb3VuZC4K
KyAgICAvLyA2LiBEcmF3IHRoZSBjb250ZW50cyBvZiB0aGUgcXVhZCBvdmVyIGRyb3Agb2YgdGhl
IG5ldyBiYWNrZ3JvdW5kIHdpdGggYmxlbmRpbmcsIGFzIHBlciB1c3VhbC4gVGhlIGZpbHRlcmVk
IGJhY2tncm91bmQKKyAgICAvLyBwaXhlbHMgd2lsbCBzaG93IHRocm91Z2ggYW55IG5vbi1vcGFx
dWUgcGl4ZWxzIGluIHRoaXMgZHJhd3MuCisgICAgLy8KKyAgICAvLyBQaXhlbCBjb3BpZXMgaW4g
dGhpcyBhbGdvcml0aG0gb2NjdXIgYXQgc3RlcHMgMiwgMywgNCwgYW5kIDUuCisKKyAgICAvLyBG
SVhNRTogV2hlbiB0aGlzIGFsZ29yaXRobSBjaGFuZ2VzLCB1cGRhdGUgQ0NMYXllclRyZWVIb3N0
Ojpwcmlvcml0aXplVGV4dHVyZXMoKSBhY2NvcmRpbmdseS4KKworICAgIGlmIChmaWx0ZXJzLmlz
RW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAvLyBGSVhNRTogV2Ugb25s
eSBhbGxvdyBiYWNrZ3JvdW5kIGZpbHRlcnMgb24gYW4gb3BhcXVlIHJlbmRlciBzdXJmYWNlIGJl
Y2F1c2Ugb3RoZXIgc3VyZmFjZXMgbWF5IGNvbnRhaW4KKyAgICAvLyB0cmFuc2x1Y2VudCBwaXhl
bHMsIGFuZCB0aGUgY29udGVudHMgYmVoaW5kIHRob3NlIHRyYW5zbHVjZW50IHBpeGVscyB3b3Vs
ZG4ndCBoYXZlIHRoZSBmaWx0ZXIgYXBwbGllZC4KKyAgICBpZiAoZnJhbWUuY3VycmVudFJlbmRl
clBhc3MtPmhhc1RyYW5zcGFyZW50QmFja2dyb3VuZCgpKQorICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKyAgICBBU1NFUlQoIWZyYW1lLmN1cnJlbnRUZXh0dXJlKTsKKworICAgIC8vIEZJWE1FOiBE
byBhIHNpbmdsZSByZWFkYmFjayBmb3IgYm90aCB0aGUgc3VyZmFjZSBhbmQgcmVwbGljYSBhbmQg
Y2FjaGUgdGhlIGZpbHRlcmVkIHJlc3VsdHMgKG9uY2UgZmlsdGVyIHRleHR1cmVzIGFyZSBub3Qg
cmV1c2VkKS4KKyAgICBJbnRSZWN0IGRldmljZVJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KENDTWF0
aFV0aWw6Om1hcENsaXBwZWRSZWN0KGNvbnRlbnRzRGV2aWNlVHJhbnNmb3JtLCBzaGFyZWRHZW9t
ZXRyeVF1YWQoKS5ib3VuZGluZ0JveCgpKSk7CisKKyAgICBpbnQgdG9wLCByaWdodCwgYm90dG9t
LCBsZWZ0OworICAgIGZpbHRlcnMuZ2V0T3V0c2V0cyh0b3AsIHJpZ2h0LCBib3R0b20sIGxlZnQp
OworICAgIGRldmljZVJlY3QubW92ZSgtbGVmdCwgLXRvcCk7CisgICAgZGV2aWNlUmVjdC5leHBh
bmQobGVmdCArIHJpZ2h0LCB0b3AgKyBib3R0b20pOworCisgICAgZGV2aWNlUmVjdC5pbnRlcnNl
Y3QoZnJhbWUuY3VycmVudFJlbmRlclBhc3MtPm91dHB1dFJlY3QoKSk7CisKKyAgICBPd25QdHI8
Q0NTY29wZWRUZXh0dXJlPiBkZXZpY2VCYWNrZ3JvdW5kVGV4dHVyZSA9IENDU2NvcGVkVGV4dHVy
ZTo6Y3JlYXRlKG1fcmVzb3VyY2VQcm92aWRlcik7CisgICAgaWYgKCFnZXRGcmFtZWJ1ZmZlclRl
eHR1cmUoZGV2aWNlQmFja2dyb3VuZFRleHR1cmUuZ2V0KCksIGRldmljZVJlY3QpKQorICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKworICAgIFNrQml0bWFwIGZpbHRlcmVkRGV2aWNlQmFja2dyb3Vu
ZCA9IGFwcGx5RmlsdGVycyh0aGlzLCBmaWx0ZXJzLCBkZXZpY2VCYWNrZ3JvdW5kVGV4dHVyZS5n
ZXQoKSk7CisgICAgaWYgKCFmaWx0ZXJlZERldmljZUJhY2tncm91bmQuZ2V0VGV4dHVyZSgpKQor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIEdyVGV4dHVyZSogdGV4dHVyZSA9IHJlaW50
ZXJwcmV0X2Nhc3Q8R3JUZXh0dXJlKj4oZmlsdGVyZWREZXZpY2VCYWNrZ3JvdW5kLmdldFRleHR1
cmUoKSk7CisgICAgaW50IGZpbHRlcmVkRGV2aWNlQmFja2dyb3VuZFRleHR1cmVJZCA9IHRleHR1
cmUtPmdldFRleHR1cmVIYW5kbGUoKTsKKworICAgIE93blB0cjxDQ1Njb3BlZFRleHR1cmU+IGJh
Y2tncm91bmRUZXh0dXJlID0gQ0NTY29wZWRUZXh0dXJlOjpjcmVhdGUobV9yZXNvdXJjZVByb3Zp
ZGVyKTsKKyAgICBpZiAoIWJhY2tncm91bmRUZXh0dXJlLT5hbGxvY2F0ZShDQ1JlbmRlcmVyOjpJ
bXBsUG9vbCwgcXVhZC0+cXVhZFJlY3QoKS5zaXplKCksIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JB
LCBDQ1Jlc291cmNlUHJvdmlkZXI6OlRleHR1cmVVc2FnZUZyYW1lYnVmZmVyKSkKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisKKyAgICBjb25zdCBDQ1JlbmRlclBhc3MqIHRhcmdldFJlbmRlclBh
c3MgPSBmcmFtZS5jdXJyZW50UmVuZGVyUGFzczsKKyAgICBib29sIHVzaW5nQmFja2dyb3VuZFRl
eHR1cmUgPSB1c2VTY29wZWRUZXh0dXJlKGZyYW1lLCBiYWNrZ3JvdW5kVGV4dHVyZS5nZXQoKSwg
cXVhZC0+cXVhZFJlY3QoKSk7CisKKyAgICBpZiAodXNpbmdCYWNrZ3JvdW5kVGV4dHVyZSkgewor
ICAgICAgICAvLyBDb3B5IHRoZSByZWFkYmFjayBwaXhlbHMgZnJvbSBkZXZpY2UgdG8gdGhlIGJh
Y2tncm91bmQgdGV4dHVyZSBmb3IgdGhlIHN1cmZhY2UuCisgICAgICAgIFdlYlRyYW5zZm9ybWF0
aW9uTWF0cml4IGRldmljZVRvRnJhbWVidWZmZXJUcmFuc2Zvcm07CisgICAgICAgIGRldmljZVRv
RnJhbWVidWZmZXJUcmFuc2Zvcm0udHJhbnNsYXRlKHF1YWQtPnF1YWRSZWN0KCkud2lkdGgoKSAv
IDIuMCwgcXVhZC0+cXVhZFJlY3QoKS5oZWlnaHQoKSAvIDIuMCk7CisgICAgICAgIGRldmljZVRv
RnJhbWVidWZmZXJUcmFuc2Zvcm0uc2NhbGUzZChxdWFkLT5xdWFkUmVjdCgpLndpZHRoKCksIHF1
YWQtPnF1YWRSZWN0KCkuaGVpZ2h0KCksIDEpOworICAgICAgICBkZXZpY2VUb0ZyYW1lYnVmZmVy
VHJhbnNmb3JtLm11bHRpcGx5KGNvbnRlbnRzRGV2aWNlVHJhbnNmb3JtLmludmVyc2UoKSk7Cisg
ICAgICAgIGNvcHlUZXh0dXJlVG9GcmFtZWJ1ZmZlcihmcmFtZSwgZmlsdGVyZWREZXZpY2VCYWNr
Z3JvdW5kVGV4dHVyZUlkLCBkZXZpY2VSZWN0LCBkZXZpY2VUb0ZyYW1lYnVmZmVyVHJhbnNmb3Jt
KTsKKyAgICB9CisKKyAgICB1c2VSZW5kZXJQYXNzKGZyYW1lLCB0YXJnZXRSZW5kZXJQYXNzKTsK
KworICAgIGlmICghdXNpbmdCYWNrZ3JvdW5kVGV4dHVyZSkKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisgICAgcmV0dXJuIGJhY2tncm91bmRUZXh0dXJlLnJlbGVhc2UoKTsKK30KKwordm9pZCBD
Q1JlbmRlcmVyR0w6OmRyYXdSZW5kZXJQYXNzUXVhZChEcmF3aW5nRnJhbWUmIGZyYW1lLCBjb25z
dCBDQ1JlbmRlclBhc3NEcmF3UXVhZCogcXVhZCkKK3sKKyAgICBDYWNoZWRUZXh0dXJlKiBjb250
ZW50c1RleHR1cmUgPSBtX3JlbmRlclBhc3NUZXh0dXJlcy5nZXQocXVhZC0+cmVuZGVyUGFzc0lk
KCkpOworICAgIGlmICghY29udGVudHNUZXh0dXJlIHx8ICFjb250ZW50c1RleHR1cmUtPmlkKCkp
CisgICAgICAgIHJldHVybjsKKworICAgIGNvbnN0IENDUmVuZGVyUGFzcyogcmVuZGVyUGFzcyA9
IGZyYW1lLnJlbmRlclBhc3Nlc0J5SWQtPmdldChxdWFkLT5yZW5kZXJQYXNzSWQoKSk7CisgICAg
QVNTRVJUKHJlbmRlclBhc3MpOworICAgIGlmICghcmVuZGVyUGFzcykKKyAgICAgICAgcmV0dXJu
OworCisgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggcmVuZGVyTWF0cml4ID0gcXVhZC0+cXVh
ZFRyYW5zZm9ybSgpOworICAgIHJlbmRlck1hdHJpeC50cmFuc2xhdGUoMC41ICogcXVhZC0+cXVh
ZFJlY3QoKS53aWR0aCgpICsgcXVhZC0+cXVhZFJlY3QoKS54KCksIDAuNSAqIHF1YWQtPnF1YWRS
ZWN0KCkuaGVpZ2h0KCkgKyBxdWFkLT5xdWFkUmVjdCgpLnkoKSk7CisgICAgV2ViVHJhbnNmb3Jt
YXRpb25NYXRyaXggZGV2aWNlTWF0cml4ID0gcmVuZGVyTWF0cml4OworICAgIGRldmljZU1hdHJp
eC5zY2FsZU5vblVuaWZvcm0ocXVhZC0+cXVhZFJlY3QoKS53aWR0aCgpLCBxdWFkLT5xdWFkUmVj
dCgpLmhlaWdodCgpKTsKKyAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBjb250ZW50c0Rldmlj
ZVRyYW5zZm9ybSA9IFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4KGZyYW1lLndpbmRvd01hdHJpeCAq
IGZyYW1lLnByb2plY3Rpb25NYXRyaXggKiBkZXZpY2VNYXRyaXgpLnRvMmRUcmFuc2Zvcm0oKTsK
KworICAgIC8vIENhbiBvbmx5IGRyYXcgc3VyZmFjZSBpZiBkZXZpY2UgbWF0cml4IGlzIGludmVy
dGlibGUuCisgICAgaWYgKCFjb250ZW50c0RldmljZVRyYW5zZm9ybS5pc0ludmVydGlibGUoKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgT3duUHRyPENDU2NvcGVkVGV4dHVyZT4gYmFja2dyb3Vu
ZFRleHR1cmUgPSBkcmF3QmFja2dyb3VuZEZpbHRlcnMoZnJhbWUsIHF1YWQsIHJlbmRlclBhc3Mt
PmJhY2tncm91bmRGaWx0ZXJzKCksIGNvbnRlbnRzRGV2aWNlVHJhbnNmb3JtKTsKKworICAgIC8v
IEZJWE1FOiBDYWNoZSB0aGlzIHZhbHVlIHNvIHRoYXQgd2UgZG9uJ3QgaGF2ZSB0byBkbyBpdCBm
b3IgYm90aCB0aGUgc3VyZmFjZSBhbmQgaXRzIHJlcGxpY2EuCisgICAgLy8gQXBwbHkgZmlsdGVy
cyB0byB0aGUgY29udGVudHMgdGV4dHVyZS4KKyAgICBTa0JpdG1hcCBmaWx0ZXJCaXRtYXAgPSBh
cHBseUZpbHRlcnModGhpcywgcmVuZGVyUGFzcy0+ZmlsdGVycygpLCBjb250ZW50c1RleHR1cmUp
OworICAgIE93blB0cjxDQ1Jlc291cmNlUHJvdmlkZXI6OlNjb3BlZFJlYWRMb2NrR0w+IGNvbnRl
bnRzUmVzb3VyY2VMb2NrOworICAgIHVuc2lnbmVkIGNvbnRlbnRzVGV4dHVyZUlkID0gMDsKKyAg
ICBpZiAoZmlsdGVyQml0bWFwLmdldFRleHR1cmUoKSkgeworICAgICAgICBHclRleHR1cmUqIHRl
eHR1cmUgPSByZWludGVycHJldF9jYXN0PEdyVGV4dHVyZSo+KGZpbHRlckJpdG1hcC5nZXRUZXh0
dXJlKCkpOworICAgICAgICBjb250ZW50c1RleHR1cmVJZCA9IHRleHR1cmUtPmdldFRleHR1cmVI
YW5kbGUoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBjb250ZW50c1Jlc291cmNlTG9jayA9IGFk
b3B0UHRyKG5ldyBDQ1Jlc291cmNlUHJvdmlkZXI6OlNjb3BlZFJlYWRMb2NrR0wobV9yZXNvdXJj
ZVByb3ZpZGVyLCBjb250ZW50c1RleHR1cmUtPmlkKCkpKTsKKyAgICAgICAgY29udGVudHNUZXh0
dXJlSWQgPSBjb250ZW50c1Jlc291cmNlTG9jay0+dGV4dHVyZUlkKCk7CisgICAgfQorCisgICAg
Ly8gRHJhdyB0aGUgYmFja2dyb3VuZCB0ZXh0dXJlIGlmIHRoZXJlIGlzIG9uZS4KKyAgICBpZiAo
YmFja2dyb3VuZFRleHR1cmUpIHsKKyAgICAgICAgQVNTRVJUKGJhY2tncm91bmRUZXh0dXJlLT5z
aXplKCkgPT0gcXVhZC0+cXVhZFJlY3QoKS5zaXplKCkpOworICAgICAgICBDQ1Jlc291cmNlUHJv
dmlkZXI6OlNjb3BlZFJlYWRMb2NrR0wgbG9jayhtX3Jlc291cmNlUHJvdmlkZXIsIGJhY2tncm91
bmRUZXh0dXJlLT5pZCgpKTsKKyAgICAgICAgY29weVRleHR1cmVUb0ZyYW1lYnVmZmVyKGZyYW1l
LCBsb2NrLnRleHR1cmVJZCgpLCBxdWFkLT5xdWFkUmVjdCgpLCBxdWFkLT5xdWFkVHJhbnNmb3Jt
KCkpOworICAgIH0KKworICAgIGJvb2wgY2xpcHBlZCA9IGZhbHNlOworICAgIEZsb2F0UXVhZCBk
ZXZpY2VRdWFkID0gQ0NNYXRoVXRpbDo6bWFwUXVhZChjb250ZW50c0RldmljZVRyYW5zZm9ybSwg
c2hhcmVkR2VvbWV0cnlRdWFkKCksIGNsaXBwZWQpOworICAgIEFTU0VSVCghY2xpcHBlZCk7Cisg
ICAgQ0NMYXllclF1YWQgZGV2aWNlTGF5ZXJCb3VuZHMgPSBDQ0xheWVyUXVhZChGbG9hdFF1YWQo
ZGV2aWNlUXVhZC5ib3VuZGluZ0JveCgpKSk7CisgICAgQ0NMYXllclF1YWQgZGV2aWNlTGF5ZXJF
ZGdlcyA9IENDTGF5ZXJRdWFkKGRldmljZVF1YWQpOworCisgICAgLy8gVXNlIGFudGktYWxpYXNp
bmcgcHJvZ3JhbXMgb25seSB3aGVuIG5lY2Vzc2FyeS4KKyAgICBib29sIHVzZUFBID0gKCFkZXZp
Y2VRdWFkLmlzUmVjdGlsaW5lYXIoKSB8fCAhZGV2aWNlUXVhZC5ib3VuZGluZ0JveCgpLmlzRXhw
cmVzc2libGVBc0ludFJlY3QoKSk7CisgICAgaWYgKHVzZUFBKSB7CisgICAgICAgIGRldmljZUxh
eWVyQm91bmRzLmluZmxhdGVBbnRpQWxpYXNpbmdEaXN0YW5jZSgpOworICAgICAgICBkZXZpY2VM
YXllckVkZ2VzLmluZmxhdGVBbnRpQWxpYXNpbmdEaXN0YW5jZSgpOworICAgIH0KKworICAgIE93
blB0cjxDQ1Jlc291cmNlUHJvdmlkZXI6OlNjb3BlZFJlYWRMb2NrR0w+IG1hc2tSZXNvdXJjZUxv
Y2s7CisgICAgdW5zaWduZWQgbWFza1RleHR1cmVJZCA9IDA7CisgICAgaWYgKHF1YWQtPm1hc2tS
ZXNvdXJjZUlkKCkpIHsKKyAgICAgICAgbWFza1Jlc291cmNlTG9jayA9IGFkb3B0UHRyKG5ldyBD
Q1Jlc291cmNlUHJvdmlkZXI6OlNjb3BlZFJlYWRMb2NrR0wobV9yZXNvdXJjZVByb3ZpZGVyLCBx
dWFkLT5tYXNrUmVzb3VyY2VJZCgpKSk7CisgICAgICAgIG1hc2tUZXh0dXJlSWQgPSBtYXNrUmVz
b3VyY2VMb2NrLT50ZXh0dXJlSWQoKTsKKyAgICB9CisKKyAgICAvLyBGSVhNRTogdXNlIHRoZSBi
YWNrZ3JvdW5kVGV4dHVyZSBhbmQgYmxlbmQgdGhlIGJhY2tncm91bmQgaW4gd2l0aCB0aGlzIGRy
YXcgaW5zdGVhZCBvZiBoYXZpbmcgYSBzZXBhcmF0ZSBjb3B5IG9mIHRoZSBiYWNrZ3JvdW5kIHRl
eHR1cmUuCisKKyAgICBHTEMoY29udGV4dCgpLCBjb250ZXh0KCktPmFjdGl2ZVRleHR1cmUoR3Jh
cGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUwKSk7CisgICAgY29udGV4dCgpLT5iaW5kVGV4dHVyZShH
cmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgY29udGVudHNUZXh0dXJlSWQpOworCisgICAg
aW50IHNoYWRlclF1YWRMb2NhdGlvbiA9IC0xOworICAgIGludCBzaGFkZXJFZGdlTG9jYXRpb24g
PSAtMTsKKyAgICBpbnQgc2hhZGVyTWFza1NhbXBsZXJMb2NhdGlvbiA9IC0xOworICAgIGludCBz
aGFkZXJNYXNrVGV4Q29vcmRTY2FsZUxvY2F0aW9uID0gLTE7CisgICAgaW50IHNoYWRlck1hc2tU
ZXhDb29yZE9mZnNldExvY2F0aW9uID0gLTE7CisgICAgaW50IHNoYWRlck1hdHJpeExvY2F0aW9u
ID0gLTE7CisgICAgaW50IHNoYWRlckFscGhhTG9jYXRpb24gPSAtMTsKKyAgICBpZiAodXNlQUEg
JiYgbWFza1RleHR1cmVJZCkgeworICAgICAgICBjb25zdCBSZW5kZXJQYXNzTWFza1Byb2dyYW1B
QSogcHJvZ3JhbSA9IHJlbmRlclBhc3NNYXNrUHJvZ3JhbUFBKCk7CisgICAgICAgIEdMQyhjb250
ZXh0KCksIGNvbnRleHQoKS0+dXNlUHJvZ3JhbShwcm9ncmFtLT5wcm9ncmFtKCkpKTsKKyAgICAg
ICAgR0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT51bmlmb3JtMWkocHJvZ3JhbS0+ZnJhZ21lbnRT
aGFkZXIoKS5zYW1wbGVyTG9jYXRpb24oKSwgMCkpOworCisgICAgICAgIHNoYWRlclF1YWRMb2Nh
dGlvbiA9IHByb2dyYW0tPnZlcnRleFNoYWRlcigpLnBvaW50TG9jYXRpb24oKTsKKyAgICAgICAg
c2hhZGVyRWRnZUxvY2F0aW9uID0gcHJvZ3JhbS0+ZnJhZ21lbnRTaGFkZXIoKS5lZGdlTG9jYXRp
b24oKTsKKyAgICAgICAgc2hhZGVyTWFza1NhbXBsZXJMb2NhdGlvbiA9IHByb2dyYW0tPmZyYWdt
ZW50U2hhZGVyKCkubWFza1NhbXBsZXJMb2NhdGlvbigpOworICAgICAgICBzaGFkZXJNYXNrVGV4
Q29vcmRTY2FsZUxvY2F0aW9uID0gcHJvZ3JhbS0+ZnJhZ21lbnRTaGFkZXIoKS5tYXNrVGV4Q29v
cmRTY2FsZUxvY2F0aW9uKCk7CisgICAgICAgIHNoYWRlck1hc2tUZXhDb29yZE9mZnNldExvY2F0
aW9uID0gcHJvZ3JhbS0+ZnJhZ21lbnRTaGFkZXIoKS5tYXNrVGV4Q29vcmRPZmZzZXRMb2NhdGlv
bigpOworICAgICAgICBzaGFkZXJNYXRyaXhMb2NhdGlvbiA9IHByb2dyYW0tPnZlcnRleFNoYWRl
cigpLm1hdHJpeExvY2F0aW9uKCk7CisgICAgICAgIHNoYWRlckFscGhhTG9jYXRpb24gPSBwcm9n
cmFtLT5mcmFnbWVudFNoYWRlcigpLmFscGhhTG9jYXRpb24oKTsKKyAgICB9IGVsc2UgaWYgKCF1
c2VBQSAmJiBtYXNrVGV4dHVyZUlkKSB7CisgICAgICAgIGNvbnN0IFJlbmRlclBhc3NNYXNrUHJv
Z3JhbSogcHJvZ3JhbSA9IHJlbmRlclBhc3NNYXNrUHJvZ3JhbSgpOworICAgICAgICBHTEMoY29u
dGV4dCgpLCBjb250ZXh0KCktPnVzZVByb2dyYW0ocHJvZ3JhbS0+cHJvZ3JhbSgpKSk7CisgICAg
ICAgIEdMQyhjb250ZXh0KCksIGNvbnRleHQoKS0+dW5pZm9ybTFpKHByb2dyYW0tPmZyYWdtZW50
U2hhZGVyKCkuc2FtcGxlckxvY2F0aW9uKCksIDApKTsKKworICAgICAgICBzaGFkZXJNYXNrU2Ft
cGxlckxvY2F0aW9uID0gcHJvZ3JhbS0+ZnJhZ21lbnRTaGFkZXIoKS5tYXNrU2FtcGxlckxvY2F0
aW9uKCk7CisgICAgICAgIHNoYWRlck1hc2tUZXhDb29yZFNjYWxlTG9jYXRpb24gPSBwcm9ncmFt
LT5mcmFnbWVudFNoYWRlcigpLm1hc2tUZXhDb29yZFNjYWxlTG9jYXRpb24oKTsKKyAgICAgICAg
c2hhZGVyTWFza1RleENvb3JkT2Zmc2V0TG9jYXRpb24gPSBwcm9ncmFtLT5mcmFnbWVudFNoYWRl
cigpLm1hc2tUZXhDb29yZE9mZnNldExvY2F0aW9uKCk7CisgICAgICAgIHNoYWRlck1hdHJpeExv
Y2F0aW9uID0gcHJvZ3JhbS0+dmVydGV4U2hhZGVyKCkubWF0cml4TG9jYXRpb24oKTsKKyAgICAg
ICAgc2hhZGVyQWxwaGFMb2NhdGlvbiA9IHByb2dyYW0tPmZyYWdtZW50U2hhZGVyKCkuYWxwaGFM
b2NhdGlvbigpOworICAgIH0gZWxzZSBpZiAodXNlQUEgJiYgIW1hc2tUZXh0dXJlSWQpIHsKKyAg
ICAgICAgY29uc3QgUmVuZGVyUGFzc1Byb2dyYW1BQSogcHJvZ3JhbSA9IHJlbmRlclBhc3NQcm9n
cmFtQUEoKTsKKyAgICAgICAgR0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT51c2VQcm9ncmFtKHBy
b2dyYW0tPnByb2dyYW0oKSkpOworICAgICAgICBHTEMoY29udGV4dCgpLCBjb250ZXh0KCktPnVu
aWZvcm0xaShwcm9ncmFtLT5mcmFnbWVudFNoYWRlcigpLnNhbXBsZXJMb2NhdGlvbigpLCAwKSk7
CisKKyAgICAgICAgc2hhZGVyUXVhZExvY2F0aW9uID0gcHJvZ3JhbS0+dmVydGV4U2hhZGVyKCku
cG9pbnRMb2NhdGlvbigpOworICAgICAgICBzaGFkZXJFZGdlTG9jYXRpb24gPSBwcm9ncmFtLT5m
cmFnbWVudFNoYWRlcigpLmVkZ2VMb2NhdGlvbigpOworICAgICAgICBzaGFkZXJNYXRyaXhMb2Nh
dGlvbiA9IHByb2dyYW0tPnZlcnRleFNoYWRlcigpLm1hdHJpeExvY2F0aW9uKCk7CisgICAgICAg
IHNoYWRlckFscGhhTG9jYXRpb24gPSBwcm9ncmFtLT5mcmFnbWVudFNoYWRlcigpLmFscGhhTG9j
YXRpb24oKTsKKyAgICB9IGVsc2UgeworICAgICAgICBjb25zdCBSZW5kZXJQYXNzUHJvZ3JhbSog
cHJvZ3JhbSA9IHJlbmRlclBhc3NQcm9ncmFtKCk7CisgICAgICAgIEdMQyhjb250ZXh0KCksIGNv
bnRleHQoKS0+dXNlUHJvZ3JhbShwcm9ncmFtLT5wcm9ncmFtKCkpKTsKKyAgICAgICAgR0xDKGNv
bnRleHQoKSwgY29udGV4dCgpLT51bmlmb3JtMWkocHJvZ3JhbS0+ZnJhZ21lbnRTaGFkZXIoKS5z
YW1wbGVyTG9jYXRpb24oKSwgMCkpOworCisgICAgICAgIHNoYWRlck1hdHJpeExvY2F0aW9uID0g
cHJvZ3JhbS0+dmVydGV4U2hhZGVyKCkubWF0cml4TG9jYXRpb24oKTsKKyAgICAgICAgc2hhZGVy
QWxwaGFMb2NhdGlvbiA9IHByb2dyYW0tPmZyYWdtZW50U2hhZGVyKCkuYWxwaGFMb2NhdGlvbigp
OworICAgIH0KKworICAgIGlmIChzaGFkZXJNYXNrU2FtcGxlckxvY2F0aW9uICE9IC0xKSB7Cisg
ICAgICAgIEFTU0VSVChzaGFkZXJNYXNrVGV4Q29vcmRTY2FsZUxvY2F0aW9uICE9IDEpOworICAg
ICAgICBBU1NFUlQoc2hhZGVyTWFza1RleENvb3JkT2Zmc2V0TG9jYXRpb24gIT0gMSk7CisgICAg
ICAgIEdMQyhjb250ZXh0KCksIGNvbnRleHQoKS0+YWN0aXZlVGV4dHVyZShHcmFwaGljc0NvbnRl
eHQzRDo6VEVYVFVSRTEpKTsKKyAgICAgICAgR0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT51bmlm
b3JtMWkoc2hhZGVyTWFza1NhbXBsZXJMb2NhdGlvbiwgMSkpOworICAgICAgICBHTEMoY29udGV4
dCgpLCBjb250ZXh0KCktPnVuaWZvcm0yZihzaGFkZXJNYXNrVGV4Q29vcmRTY2FsZUxvY2F0aW9u
LCBxdWFkLT5tYXNrVGV4Q29vcmRTY2FsZVgoKSwgcXVhZC0+bWFza1RleENvb3JkU2NhbGVZKCkp
KTsKKyAgICAgICAgR0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT51bmlmb3JtMmYoc2hhZGVyTWFz
a1RleENvb3JkT2Zmc2V0TG9jYXRpb24sIHF1YWQtPm1hc2tUZXhDb29yZE9mZnNldFgoKSwgcXVh
ZC0+bWFza1RleENvb3JkT2Zmc2V0WSgpKSk7CisgICAgICAgIGNvbnRleHQoKS0+YmluZFRleHR1
cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIG1hc2tUZXh0dXJlSWQpOworICAgICAg
ICBHTEMoY29udGV4dCgpLCBjb250ZXh0KCktPmFjdGl2ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0
M0Q6OlRFWFRVUkUwKSk7CisgICAgfQorCisgICAgaWYgKHNoYWRlckVkZ2VMb2NhdGlvbiAhPSAt
MSkgeworICAgICAgICBmbG9hdCBlZGdlWzI0XTsKKyAgICAgICAgZGV2aWNlTGF5ZXJFZGdlcy50
b0Zsb2F0QXJyYXkoZWRnZSk7CisgICAgICAgIGRldmljZUxheWVyQm91bmRzLnRvRmxvYXRBcnJh
eSgmZWRnZVsxMl0pOworICAgICAgICBHTEMoY29udGV4dCgpLCBjb250ZXh0KCktPnVuaWZvcm0z
ZnYoc2hhZGVyRWRnZUxvY2F0aW9uLCA4LCBlZGdlKSk7CisgICAgfQorCisgICAgLy8gTWFwIGRl
dmljZSBzcGFjZSBxdWFkIHRvIHN1cmZhY2Ugc3BhY2UuIGNvbnRlbnRzRGV2aWNlVHJhbnNmb3Jt
IGhhcyBubyAzZCBjb21wb25lbnQgc2luY2UgaXQgd2FzIGdlbmVyYXRlZCB3aXRoIHRvMmRUcmFu
c2Zvcm0oKSBzbyB3ZSBkb24ndCBuZWVkIHRvIHByb2plY3QuCisgICAgRmxvYXRRdWFkIHN1cmZh
Y2VRdWFkID0gQ0NNYXRoVXRpbDo6bWFwUXVhZChjb250ZW50c0RldmljZVRyYW5zZm9ybS5pbnZl
cnNlKCksIGRldmljZUxheWVyRWRnZXMuZmxvYXRRdWFkKCksIGNsaXBwZWQpOworICAgIEFTU0VS
VCghY2xpcHBlZCk7CisKKyAgICBzZXRTaGFkZXJPcGFjaXR5KHF1YWQtPm9wYWNpdHkoKSwgc2hh
ZGVyQWxwaGFMb2NhdGlvbik7CisgICAgc2V0U2hhZGVyRmxvYXRRdWFkKHN1cmZhY2VRdWFkLCBz
aGFkZXJRdWFkTG9jYXRpb24pOworICAgIGRyYXdRdWFkR2VvbWV0cnkoZnJhbWUsIHF1YWQtPnF1
YWRUcmFuc2Zvcm0oKSwgcXVhZC0+cXVhZFJlY3QoKSwgc2hhZGVyTWF0cml4TG9jYXRpb24pOwor
fQorCit2b2lkIENDUmVuZGVyZXJHTDo6ZHJhd1NvbGlkQ29sb3JRdWFkKGNvbnN0IERyYXdpbmdG
cmFtZSYgZnJhbWUsIGNvbnN0IENDU29saWRDb2xvckRyYXdRdWFkKiBxdWFkKQoreworICAgIGNv
bnN0IFNvbGlkQ29sb3JQcm9ncmFtKiBwcm9ncmFtID0gc29saWRDb2xvclByb2dyYW0oKTsKKyAg
ICBHTEMoY29udGV4dCgpLCBjb250ZXh0KCktPnVzZVByb2dyYW0ocHJvZ3JhbS0+cHJvZ3JhbSgp
KSk7CisKKyAgICBTa0NvbG9yIGNvbG9yID0gcXVhZC0+Y29sb3IoKTsKKyAgICBmbG9hdCBvcGFj
aXR5ID0gcXVhZC0+b3BhY2l0eSgpOworICAgIGZsb2F0IGFscGhhID0gKFNrQ29sb3JHZXRBKGNv
bG9yKSAvIDI1NS4wKSAqIG9wYWNpdHk7CisKKyAgICBHTEMoY29udGV4dCgpLCBjb250ZXh0KCkt
PnVuaWZvcm00Zihwcm9ncmFtLT5mcmFnbWVudFNoYWRlcigpLmNvbG9yTG9jYXRpb24oKSwgKFNr
Q29sb3JHZXRSKGNvbG9yKSAvIDI1NS4wKSAqIGFscGhhLCAoU2tDb2xvckdldEcoY29sb3IpIC8g
MjU1LjApICogYWxwaGEsIChTa0NvbG9yR2V0Qihjb2xvcikgLyAyNTUuMCkgKiBhbHBoYSwgYWxw
aGEpKTsKKworICAgIGRyYXdRdWFkR2VvbWV0cnkoZnJhbWUsIHF1YWQtPnF1YWRUcmFuc2Zvcm0o
KSwgcXVhZC0+cXVhZFJlY3QoKSwgcHJvZ3JhbS0+dmVydGV4U2hhZGVyKCkubWF0cml4TG9jYXRp
b24oKSk7Cit9CisKK3N0cnVjdCBUaWxlUHJvZ3JhbVVuaWZvcm1zIHsKKyAgICB1bnNpZ25lZCBw
cm9ncmFtOworICAgIHVuc2lnbmVkIHNhbXBsZXJMb2NhdGlvbjsKKyAgICB1bnNpZ25lZCB2ZXJ0
ZXhUZXhUcmFuc2Zvcm1Mb2NhdGlvbjsKKyAgICB1bnNpZ25lZCBmcmFnbWVudFRleFRyYW5zZm9y
bUxvY2F0aW9uOworICAgIHVuc2lnbmVkIGVkZ2VMb2NhdGlvbjsKKyAgICB1bnNpZ25lZCBtYXRy
aXhMb2NhdGlvbjsKKyAgICB1bnNpZ25lZCBhbHBoYUxvY2F0aW9uOworICAgIHVuc2lnbmVkIHBv
aW50TG9jYXRpb247Cit9OworCit0ZW1wbGF0ZTxjbGFzcyBUPgorc3RhdGljIHZvaWQgdGlsZVVu
aWZvcm1Mb2NhdGlvbihUIHByb2dyYW0sIFRpbGVQcm9ncmFtVW5pZm9ybXMmIHVuaWZvcm1zKQor
eworICAgIHVuaWZvcm1zLnByb2dyYW0gPSBwcm9ncmFtLT5wcm9ncmFtKCk7CisgICAgdW5pZm9y
bXMudmVydGV4VGV4VHJhbnNmb3JtTG9jYXRpb24gPSBwcm9ncmFtLT52ZXJ0ZXhTaGFkZXIoKS52
ZXJ0ZXhUZXhUcmFuc2Zvcm1Mb2NhdGlvbigpOworICAgIHVuaWZvcm1zLm1hdHJpeExvY2F0aW9u
ID0gcHJvZ3JhbS0+dmVydGV4U2hhZGVyKCkubWF0cml4TG9jYXRpb24oKTsKKyAgICB1bmlmb3Jt
cy5wb2ludExvY2F0aW9uID0gcHJvZ3JhbS0+dmVydGV4U2hhZGVyKCkucG9pbnRMb2NhdGlvbigp
OworCisgICAgdW5pZm9ybXMuc2FtcGxlckxvY2F0aW9uID0gcHJvZ3JhbS0+ZnJhZ21lbnRTaGFk
ZXIoKS5zYW1wbGVyTG9jYXRpb24oKTsKKyAgICB1bmlmb3Jtcy5hbHBoYUxvY2F0aW9uID0gcHJv
Z3JhbS0+ZnJhZ21lbnRTaGFkZXIoKS5hbHBoYUxvY2F0aW9uKCk7CisgICAgdW5pZm9ybXMuZnJh
Z21lbnRUZXhUcmFuc2Zvcm1Mb2NhdGlvbiA9IHByb2dyYW0tPmZyYWdtZW50U2hhZGVyKCkuZnJh
Z21lbnRUZXhUcmFuc2Zvcm1Mb2NhdGlvbigpOworICAgIHVuaWZvcm1zLmVkZ2VMb2NhdGlvbiA9
IHByb2dyYW0tPmZyYWdtZW50U2hhZGVyKCkuZWRnZUxvY2F0aW9uKCk7Cit9CisKK3ZvaWQgQ0NS
ZW5kZXJlckdMOjpkcmF3VGlsZVF1YWQoY29uc3QgRHJhd2luZ0ZyYW1lJiBmcmFtZSwgY29uc3Qg
Q0NUaWxlRHJhd1F1YWQqIHF1YWQpCit7CisgICAgSW50UmVjdCB0aWxlUmVjdCA9IHF1YWQtPnF1
YWRWaXNpYmxlUmVjdCgpOworCisgICAgRmxvYXRSZWN0IGNsYW1wUmVjdCh0aWxlUmVjdCk7Cisg
ICAgLy8gQ2xhbXAgdGV4dHVyZSBjb29yZGluYXRlcyB0byBhdm9pZCBzYW1wbGluZyBvdXRzaWRl
IHRoZSBsYXllcgorICAgIC8vIGJ5IGRlZmxhdGluZyB0aGUgdGlsZSByZWdpb24gaGFsZiBhIHRl
eGVsIG9yIGhhbGYgYSB0ZXhlbAorICAgIC8vIG1pbnVzIGVwc2lsb24gZm9yIG9uZSBwaXhlbCBs
YXllcnMuIFRoZSByZXN1bHRpbmcgY2xhbXAgcmVnaW9uCisgICAgLy8gaXMgbWFwcGVkIHRvIHRo
ZSB1bml0IHNxdWFyZSBieSB0aGUgdmVydGV4IHNoYWRlciBhbmQgbWFwcGVkCisgICAgLy8gYmFj
ayB0byBub3JtYWxpemVkIHRleHR1cmUgY29vcmRpbmF0ZXMgYnkgdGhlIGZyYWdtZW50IHNoYWRl
cgorICAgIC8vIGFmdGVyIGJlaW5nIGNsYW1wZWQgdG8gMC0xIHJhbmdlLgorICAgIGNvbnN0IGZs
b2F0IGVwc2lsb24gPSAxIC8gMTAyNC4wZjsKKyAgICBmbG9hdCBjbGFtcFggPSBtaW4oMC41LCBj
bGFtcFJlY3Qud2lkdGgoKSAvIDIuMCAtIGVwc2lsb24pOworICAgIGZsb2F0IGNsYW1wWSA9IG1p
bigwLjUsIGNsYW1wUmVjdC5oZWlnaHQoKSAvIDIuMCAtIGVwc2lsb24pOworICAgIGNsYW1wUmVj
dC5pbmZsYXRlWCgtY2xhbXBYKTsKKyAgICBjbGFtcFJlY3QuaW5mbGF0ZVkoLWNsYW1wWSk7Cisg
ICAgRmxvYXRTaXplIGNsYW1wT2Zmc2V0ID0gY2xhbXBSZWN0Lm1pblhNaW5ZQ29ybmVyKCkgLSBG
bG9hdFJlY3QodGlsZVJlY3QpLm1pblhNaW5ZQ29ybmVyKCk7CisKKyAgICBGbG9hdFBvaW50IHRl
eHR1cmVPZmZzZXQgPSBxdWFkLT50ZXh0dXJlT2Zmc2V0KCkgKyBjbGFtcE9mZnNldCArCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50UG9pbnQodGlsZVJlY3QubG9jYXRpb24oKSAt
IHF1YWQtPnF1YWRSZWN0KCkubG9jYXRpb24oKSk7CisKKyAgICAvLyBNYXAgY2xhbXBpbmcgcmVj
dGFuZ2xlIHRvIHVuaXQgc3F1YXJlLgorICAgIGZsb2F0IHZlcnRleFRleFRyYW5zbGF0ZVggPSAt
Y2xhbXBSZWN0LngoKSAvIGNsYW1wUmVjdC53aWR0aCgpOworICAgIGZsb2F0IHZlcnRleFRleFRy
YW5zbGF0ZVkgPSAtY2xhbXBSZWN0LnkoKSAvIGNsYW1wUmVjdC5oZWlnaHQoKTsKKyAgICBmbG9h
dCB2ZXJ0ZXhUZXhTY2FsZVggPSB0aWxlUmVjdC53aWR0aCgpIC8gY2xhbXBSZWN0LndpZHRoKCk7
CisgICAgZmxvYXQgdmVydGV4VGV4U2NhbGVZID0gdGlsZVJlY3QuaGVpZ2h0KCkgLyBjbGFtcFJl
Y3QuaGVpZ2h0KCk7CisKKyAgICAvLyBNYXAgdG8gbm9ybWFsaXplZCB0ZXh0dXJlIGNvb3JkaW5h
dGVzLgorICAgIGNvbnN0IEludFNpemUmIHRleHR1cmVTaXplID0gcXVhZC0+dGV4dHVyZVNpemUo
KTsKKyAgICBmbG9hdCBmcmFnbWVudFRleFRyYW5zbGF0ZVggPSB0ZXh0dXJlT2Zmc2V0LngoKSAv
IHRleHR1cmVTaXplLndpZHRoKCk7CisgICAgZmxvYXQgZnJhZ21lbnRUZXhUcmFuc2xhdGVZID0g
dGV4dHVyZU9mZnNldC55KCkgLyB0ZXh0dXJlU2l6ZS5oZWlnaHQoKTsKKyAgICBmbG9hdCBmcmFn
bWVudFRleFNjYWxlWCA9IGNsYW1wUmVjdC53aWR0aCgpIC8gdGV4dHVyZVNpemUud2lkdGgoKTsK
KyAgICBmbG9hdCBmcmFnbWVudFRleFNjYWxlWSA9IGNsYW1wUmVjdC5oZWlnaHQoKSAvIHRleHR1
cmVTaXplLmhlaWdodCgpOworCisKKyAgICBGbG9hdFF1YWQgbG9jYWxRdWFkOworICAgIFdlYlRy
YW5zZm9ybWF0aW9uTWF0cml4IGRldmljZVRyYW5zZm9ybSA9IFdlYlRyYW5zZm9ybWF0aW9uTWF0
cml4KGZyYW1lLndpbmRvd01hdHJpeCAqIGZyYW1lLnByb2plY3Rpb25NYXRyaXggKiBxdWFkLT5x
dWFkVHJhbnNmb3JtKCkpLnRvMmRUcmFuc2Zvcm0oKTsKKyAgICBpZiAoIWRldmljZVRyYW5zZm9y
bS5pc0ludmVydGlibGUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYm9vbCBjbGlwcGVkID0g
ZmFsc2U7CisgICAgRmxvYXRRdWFkIGRldmljZUxheWVyUXVhZCA9IENDTWF0aFV0aWw6Om1hcFF1
YWQoZGV2aWNlVHJhbnNmb3JtLCBGbG9hdFF1YWQocXVhZC0+dmlzaWJsZUNvbnRlbnRSZWN0KCkp
LCBjbGlwcGVkKTsKKyAgICBBU1NFUlQoIWNsaXBwZWQpOworCisgICAgVGlsZVByb2dyYW1Vbmlm
b3JtcyB1bmlmb3JtczsKKyAgICAvLyBGb3Igbm93LCB3ZSBzaW1wbHkgc2tpcCBhbnRpLWFsaWFz
aW5nIHdpdGggdGhlIHF1YWQgaXMgY2xpcHBlZC4gVGhpcyBvbmx5IGhhcHBlbnMKKyAgICAvLyBv
biBwZXJzcGVjdGl2ZSB0cmFuc2Zvcm1lZCBsYXllcnMgdGhhdCBnbyBwYXJ0aWFsbHkgYmVoaW5k
IHRoZSBjYW1lcmEuCisgICAgaWYgKHF1YWQtPmlzQW50aWFsaWFzZWQoKSAmJiAhY2xpcHBlZCkg
eworICAgICAgICBpZiAocXVhZC0+c3dpenpsZUNvbnRlbnRzKCkpCisgICAgICAgICAgICB0aWxl
VW5pZm9ybUxvY2F0aW9uKHRpbGVQcm9ncmFtU3dpenpsZUFBKCksIHVuaWZvcm1zKTsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgdGlsZVVuaWZvcm1Mb2NhdGlvbih0aWxlUHJvZ3JhbUFBKCks
IHVuaWZvcm1zKTsKKyAgICB9IGVsc2UgeworICAgICAgICBpZiAocXVhZC0+bmVlZHNCbGVuZGlu
ZygpKSB7CisgICAgICAgICAgICBpZiAocXVhZC0+c3dpenpsZUNvbnRlbnRzKCkpCisgICAgICAg
ICAgICAgICAgdGlsZVVuaWZvcm1Mb2NhdGlvbih0aWxlUHJvZ3JhbVN3aXp6bGUoKSwgdW5pZm9y
bXMpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHRpbGVVbmlmb3JtTG9jYXRp
b24odGlsZVByb2dyYW0oKSwgdW5pZm9ybXMpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgaWYgKHF1YWQtPnN3aXp6bGVDb250ZW50cygpKQorICAgICAgICAgICAgICAgIHRpbGVVbmlm
b3JtTG9jYXRpb24odGlsZVByb2dyYW1Td2l6emxlT3BhcXVlKCksIHVuaWZvcm1zKTsKKyAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB0aWxlVW5pZm9ybUxvY2F0aW9uKHRpbGVQcm9n
cmFtT3BhcXVlKCksIHVuaWZvcm1zKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIEdMQyhjb250
ZXh0KCksIGNvbnRleHQoKS0+dXNlUHJvZ3JhbSh1bmlmb3Jtcy5wcm9ncmFtKSk7CisgICAgR0xD
KGNvbnRleHQoKSwgY29udGV4dCgpLT51bmlmb3JtMWkodW5pZm9ybXMuc2FtcGxlckxvY2F0aW9u
LCAwKSk7CisgICAgR0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT5hY3RpdmVUZXh0dXJlKEdyYXBo
aWNzQ29udGV4dDNEOjpURVhUVVJFMCkpOworICAgIENDUmVzb3VyY2VQcm92aWRlcjo6U2NvcGVk
UmVhZExvY2tHTCBxdWFkUmVzb3VyY2VMb2NrKG1fcmVzb3VyY2VQcm92aWRlciwgcXVhZC0+cmVz
b3VyY2VJZCgpKTsKKyAgICBHTEMoY29udGV4dCgpLCBjb250ZXh0KCktPmJpbmRUZXh0dXJlKEdy
YXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBxdWFkUmVzb3VyY2VMb2NrLnRleHR1cmVJZCgp
KSk7CisgICAgR0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNz
Q29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9NSU5fRklM
VEVSLCBxdWFkLT50ZXh0dXJlRmlsdGVyKCkpKTsKKyAgICBHTEMoY29udGV4dCgpLCBjb250ZXh0
KCktPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNz
Q29udGV4dDNEOjpURVhUVVJFX01BR19GSUxURVIsIHF1YWQtPnRleHR1cmVGaWx0ZXIoKSkpOwor
CisgICAgYm9vbCB1c2VBQSA9ICFjbGlwcGVkICYmIHF1YWQtPmlzQW50aWFsaWFzZWQoKTsKKyAg
ICBpZiAodXNlQUEpIHsKKyAgICAgICAgQ0NMYXllclF1YWQgZGV2aWNlTGF5ZXJCb3VuZHMgPSBD
Q0xheWVyUXVhZChGbG9hdFF1YWQoZGV2aWNlTGF5ZXJRdWFkLmJvdW5kaW5nQm94KCkpKTsKKyAg
ICAgICAgZGV2aWNlTGF5ZXJCb3VuZHMuaW5mbGF0ZUFudGlBbGlhc2luZ0Rpc3RhbmNlKCk7CisK
KyAgICAgICAgQ0NMYXllclF1YWQgZGV2aWNlTGF5ZXJFZGdlcyA9IENDTGF5ZXJRdWFkKGRldmlj
ZUxheWVyUXVhZCk7CisgICAgICAgIGRldmljZUxheWVyRWRnZXMuaW5mbGF0ZUFudGlBbGlhc2lu
Z0Rpc3RhbmNlKCk7CisKKyAgICAgICAgZmxvYXQgZWRnZVsyNF07CisgICAgICAgIGRldmljZUxh
eWVyRWRnZXMudG9GbG9hdEFycmF5KGVkZ2UpOworICAgICAgICBkZXZpY2VMYXllckJvdW5kcy50
b0Zsb2F0QXJyYXkoJmVkZ2VbMTJdKTsKKyAgICAgICAgR0xDKGNvbnRleHQoKSwgY29udGV4dCgp
LT51bmlmb3JtM2Z2KHVuaWZvcm1zLmVkZ2VMb2NhdGlvbiwgOCwgZWRnZSkpOworCisgICAgICAg
IEdMQyhjb250ZXh0KCksIGNvbnRleHQoKS0+dW5pZm9ybTRmKHVuaWZvcm1zLnZlcnRleFRleFRy
YW5zZm9ybUxvY2F0aW9uLCB2ZXJ0ZXhUZXhUcmFuc2xhdGVYLCB2ZXJ0ZXhUZXhUcmFuc2xhdGVZ
LCB2ZXJ0ZXhUZXhTY2FsZVgsIHZlcnRleFRleFNjYWxlWSkpOworICAgICAgICBHTEMoY29udGV4
dCgpLCBjb250ZXh0KCktPnVuaWZvcm00Zih1bmlmb3Jtcy5mcmFnbWVudFRleFRyYW5zZm9ybUxv
Y2F0aW9uLCBmcmFnbWVudFRleFRyYW5zbGF0ZVgsIGZyYWdtZW50VGV4VHJhbnNsYXRlWSwgZnJh
Z21lbnRUZXhTY2FsZVgsIGZyYWdtZW50VGV4U2NhbGVZKSk7CisKKyAgICAgICAgRmxvYXRQb2lu
dCBib3R0b21SaWdodCh0aWxlUmVjdC5tYXhYKCksIHRpbGVSZWN0Lm1heFkoKSk7CisgICAgICAg
IEZsb2F0UG9pbnQgYm90dG9tTGVmdCh0aWxlUmVjdC54KCksIHRpbGVSZWN0Lm1heFkoKSk7Cisg
ICAgICAgIEZsb2F0UG9pbnQgdG9wTGVmdCh0aWxlUmVjdC54KCksIHRpbGVSZWN0LnkoKSk7Cisg
ICAgICAgIEZsb2F0UG9pbnQgdG9wUmlnaHQodGlsZVJlY3QubWF4WCgpLCB0aWxlUmVjdC55KCkp
OworCisgICAgICAgIC8vIE1hcCBwb2ludHMgdG8gZGV2aWNlIHNwYWNlLgorICAgICAgICBib3R0
b21SaWdodCA9IENDTWF0aFV0aWw6Om1hcFBvaW50KGRldmljZVRyYW5zZm9ybSwgYm90dG9tUmln
aHQsIGNsaXBwZWQpOworICAgICAgICBBU1NFUlQoIWNsaXBwZWQpOworICAgICAgICBib3R0b21M
ZWZ0ID0gQ0NNYXRoVXRpbDo6bWFwUG9pbnQoZGV2aWNlVHJhbnNmb3JtLCBib3R0b21MZWZ0LCBj
bGlwcGVkKTsKKyAgICAgICAgQVNTRVJUKCFjbGlwcGVkKTsKKyAgICAgICAgdG9wTGVmdCA9IEND
TWF0aFV0aWw6Om1hcFBvaW50KGRldmljZVRyYW5zZm9ybSwgdG9wTGVmdCwgY2xpcHBlZCk7Cisg
ICAgICAgIEFTU0VSVCghY2xpcHBlZCk7CisgICAgICAgIHRvcFJpZ2h0ID0gQ0NNYXRoVXRpbDo6
bWFwUG9pbnQoZGV2aWNlVHJhbnNmb3JtLCB0b3BSaWdodCwgY2xpcHBlZCk7CisgICAgICAgIEFT
U0VSVCghY2xpcHBlZCk7CisKKyAgICAgICAgQ0NMYXllclF1YWQ6OkVkZ2UgYm90dG9tRWRnZShi
b3R0b21SaWdodCwgYm90dG9tTGVmdCk7CisgICAgICAgIENDTGF5ZXJRdWFkOjpFZGdlIGxlZnRF
ZGdlKGJvdHRvbUxlZnQsIHRvcExlZnQpOworICAgICAgICBDQ0xheWVyUXVhZDo6RWRnZSB0b3BF
ZGdlKHRvcExlZnQsIHRvcFJpZ2h0KTsKKyAgICAgICAgQ0NMYXllclF1YWQ6OkVkZ2UgcmlnaHRF
ZGdlKHRvcFJpZ2h0LCBib3R0b21SaWdodCk7CisKKyAgICAgICAgLy8gT25seSBhcHBseSBhbnRp
LWFsaWFzaW5nIHRvIGVkZ2VzIG5vdCBjbGlwcGVkIGJ5IGN1bGxpbmcgb3Igc2Npc3NvcmluZy4K
KyAgICAgICAgaWYgKHF1YWQtPnRvcEVkZ2VBQSgpICYmIHRpbGVSZWN0LnkoKSA9PSBxdWFkLT5x
dWFkUmVjdCgpLnkoKSkKKyAgICAgICAgICAgIHRvcEVkZ2UgPSBkZXZpY2VMYXllckVkZ2VzLnRv
cCgpOworICAgICAgICBpZiAocXVhZC0+bGVmdEVkZ2VBQSgpICYmIHRpbGVSZWN0LngoKSA9PSBx
dWFkLT5xdWFkUmVjdCgpLngoKSkKKyAgICAgICAgICAgIGxlZnRFZGdlID0gZGV2aWNlTGF5ZXJF
ZGdlcy5sZWZ0KCk7CisgICAgICAgIGlmIChxdWFkLT5yaWdodEVkZ2VBQSgpICYmIHRpbGVSZWN0
Lm1heFgoKSA9PSBxdWFkLT5xdWFkUmVjdCgpLm1heFgoKSkKKyAgICAgICAgICAgIHJpZ2h0RWRn
ZSA9IGRldmljZUxheWVyRWRnZXMucmlnaHQoKTsKKyAgICAgICAgaWYgKHF1YWQtPmJvdHRvbUVk
Z2VBQSgpICYmIHRpbGVSZWN0Lm1heFkoKSA9PSBxdWFkLT5xdWFkUmVjdCgpLm1heFkoKSkKKyAg
ICAgICAgICAgIGJvdHRvbUVkZ2UgPSBkZXZpY2VMYXllckVkZ2VzLmJvdHRvbSgpOworCisgICAg
ICAgIGZsb2F0IHNpZ24gPSBGbG9hdFF1YWQodGlsZVJlY3QpLmlzQ291bnRlcmNsb2Nrd2lzZSgp
ID8gLTEgOiAxOworICAgICAgICBib3R0b21FZGdlLnNjYWxlKHNpZ24pOworICAgICAgICBsZWZ0
RWRnZS5zY2FsZShzaWduKTsKKyAgICAgICAgdG9wRWRnZS5zY2FsZShzaWduKTsKKyAgICAgICAg
cmlnaHRFZGdlLnNjYWxlKHNpZ24pOworCisgICAgICAgIC8vIENyZWF0ZSBkZXZpY2Ugc3BhY2Ug
cXVhZC4KKyAgICAgICAgQ0NMYXllclF1YWQgZGV2aWNlUXVhZChsZWZ0RWRnZSwgdG9wRWRnZSwg
cmlnaHRFZGdlLCBib3R0b21FZGdlKTsKKworICAgICAgICAvLyBNYXAgZGV2aWNlIHNwYWNlIHF1
YWQgdG8gbG9jYWwgc3BhY2UuIGNvbnRlbnRzRGV2aWNlVHJhbnNmb3JtIGhhcyBubyAzZCBjb21w
b25lbnQgc2luY2UgaXQgd2FzIGdlbmVyYXRlZCB3aXRoIHRvMmRUcmFuc2Zvcm0oKSBzbyB3ZSBk
b24ndCBuZWVkIHRvIHByb2plY3QuCisgICAgICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IGlu
dmVyc2VEZXZpY2VUcmFuc2Zvcm0gPSBkZXZpY2VUcmFuc2Zvcm0uaW52ZXJzZSgpOworICAgICAg
ICBsb2NhbFF1YWQgPSBDQ01hdGhVdGlsOjptYXBRdWFkKGludmVyc2VEZXZpY2VUcmFuc2Zvcm0s
IGRldmljZVF1YWQuZmxvYXRRdWFkKCksIGNsaXBwZWQpOworCisgICAgICAgIC8vIFdlIHNob3Vs
ZCBub3QgQVNTRVJUKCFjbGlwcGVkKSBoZXJlLCBiZWNhdXNlIGFudGktYWxpYXNpbmcgaW5mbGF0
aW9uIG1heSBjYXVzZSBkZXZpY2VRdWFkIHRvIGJlY29tZQorICAgICAgICAvLyBjbGlwcGVkLiBU
byBvdXIga25vd2xlZGdlIHRoaXMgc2NlbmFyaW8gZG9lcyBub3QgbmVlZCB0byBiZSBoYW5kbGVk
IGRpZmZlcmVudGx5IHRoYW4gdGhlIHVuY2xpcHBlZCBjYXNlLgorICAgIH0gZWxzZSB7CisgICAg
ICAgIC8vIE1vdmUgZnJhZ21lbnQgc2hhZGVyIHRyYW5zZm9ybSB0byB2ZXJ0ZXggc2hhZGVyLiBX
ZSBjYW4gZG8gdGhpcyB3aGlsZQorICAgICAgICAvLyBzdGlsbCBwcm9kdWNpbmcgY29ycmVjdCBy
ZXN1bHRzIGFzIGZyYWdtZW50VGV4VHJhbnNmb3JtTG9jYXRpb24KKyAgICAgICAgLy8gc2hvdWxk
IGFsd2F5cyBiZSBub24tbmVnYXRpdmUgd2hlbiB0aWxlcyBhcmUgdHJhbnNmb3JtZWQgaW4gYSB3
YXkKKyAgICAgICAgLy8gdGhhdCBjb3VsZCByZXN1bHQgaW4gc2FtcGxpbmcgb3V0c2lkZSB0aGUg
bGF5ZXIuCisgICAgICAgIHZlcnRleFRleFNjYWxlWCAqPSBmcmFnbWVudFRleFNjYWxlWDsKKyAg
ICAgICAgdmVydGV4VGV4U2NhbGVZICo9IGZyYWdtZW50VGV4U2NhbGVZOworICAgICAgICB2ZXJ0
ZXhUZXhUcmFuc2xhdGVYICo9IGZyYWdtZW50VGV4U2NhbGVYOworICAgICAgICB2ZXJ0ZXhUZXhU
cmFuc2xhdGVZICo9IGZyYWdtZW50VGV4U2NhbGVZOworICAgICAgICB2ZXJ0ZXhUZXhUcmFuc2xh
dGVYICs9IGZyYWdtZW50VGV4VHJhbnNsYXRlWDsKKyAgICAgICAgdmVydGV4VGV4VHJhbnNsYXRl
WSArPSBmcmFnbWVudFRleFRyYW5zbGF0ZVk7CisKKyAgICAgICAgR0xDKGNvbnRleHQoKSwgY29u
dGV4dCgpLT51bmlmb3JtNGYodW5pZm9ybXMudmVydGV4VGV4VHJhbnNmb3JtTG9jYXRpb24sIHZl
cnRleFRleFRyYW5zbGF0ZVgsIHZlcnRleFRleFRyYW5zbGF0ZVksIHZlcnRleFRleFNjYWxlWCwg
dmVydGV4VGV4U2NhbGVZKSk7CisKKyAgICAgICAgbG9jYWxRdWFkID0gRmxvYXRSZWN0KHRpbGVS
ZWN0KTsKKyAgICB9CisKKyAgICAvLyBOb3JtYWxpemUgdG8gdGlsZVJlY3QuCisgICAgbG9jYWxR
dWFkLnNjYWxlKDEuMGYgLyB0aWxlUmVjdC53aWR0aCgpLCAxLjBmIC8gdGlsZVJlY3QuaGVpZ2h0
KCkpOworCisgICAgc2V0U2hhZGVyT3BhY2l0eShxdWFkLT5vcGFjaXR5KCksIHVuaWZvcm1zLmFs
cGhhTG9jYXRpb24pOworICAgIHNldFNoYWRlckZsb2F0UXVhZChsb2NhbFF1YWQsIHVuaWZvcm1z
LnBvaW50TG9jYXRpb24pOworCisgICAgLy8gVGhlIHRpbGUgcXVhZCBzaGFkZXIgYmVoYXZlcyBk
aWZmZXJlbnRseSBjb21wYXJlZCB0byBhbGwgb3RoZXIgc2hhZGVycy4KKyAgICAvLyBUaGUgdHJh
bnNmb3JtIGFuZCB2ZXJ0ZXggZGF0YSBhcmUgdXNlZCB0byBmaWd1cmUgb3V0IHRoZSBleHRlbnRz
IHRoYXQgdGhlCisgICAgLy8gdW4tYW50aWFsaWFzZWQgcXVhZCBzaG91bGQgaGF2ZSBhbmQgd2hp
Y2ggdmVydGV4IHRoaXMgaXMgYW5kIHRoZSBmbG9hdAorICAgIC8vIHF1YWQgcGFzc2VkIGluIHZp
YSB1bmlmb3JtIGlzIHRoZSBhY3R1YWwgZ2VvbWV0cnkgdGhhdCBnZXRzIHVzZWQgdG8gZHJhdwor
ICAgIC8vIGl0LiBUaGlzIGlzIHdoeSB0aGlzIGNlbnRlcmVkIHJlY3QgaXMgdXNlZCBhbmQgbm90
IHRoZSBvcmlnaW5hbCBxdWFkUmVjdC4KKyAgICBGbG9hdFJlY3QgY2VudGVyZWRSZWN0KEZsb2F0
UG9pbnQoLTAuNSAqIHRpbGVSZWN0LndpZHRoKCksIC0wLjUgKiB0aWxlUmVjdC5oZWlnaHQoKSks
IHRpbGVSZWN0LnNpemUoKSk7CisgICAgZHJhd1F1YWRHZW9tZXRyeShmcmFtZSwgcXVhZC0+cXVh
ZFRyYW5zZm9ybSgpLCBjZW50ZXJlZFJlY3QsIHVuaWZvcm1zLm1hdHJpeExvY2F0aW9uKTsKK30K
Kwordm9pZCBDQ1JlbmRlcmVyR0w6OmRyYXdZVVZWaWRlb1F1YWQoY29uc3QgRHJhd2luZ0ZyYW1l
JiBmcmFtZSwgY29uc3QgQ0NZVVZWaWRlb0RyYXdRdWFkKiBxdWFkKQoreworICAgIGNvbnN0IFZp
ZGVvWVVWUHJvZ3JhbSogcHJvZ3JhbSA9IHZpZGVvWVVWUHJvZ3JhbSgpOworICAgIEFTU0VSVChw
cm9ncmFtICYmIHByb2dyYW0tPmluaXRpYWxpemVkKCkpOworCisgICAgY29uc3QgQ0NWaWRlb0xh
eWVySW1wbDo6RnJhbWVQbGFuZSYgeVBsYW5lID0gcXVhZC0+eVBsYW5lKCk7CisgICAgY29uc3Qg
Q0NWaWRlb0xheWVySW1wbDo6RnJhbWVQbGFuZSYgdVBsYW5lID0gcXVhZC0+dVBsYW5lKCk7Cisg
ICAgY29uc3QgQ0NWaWRlb0xheWVySW1wbDo6RnJhbWVQbGFuZSYgdlBsYW5lID0gcXVhZC0+dlBs
YW5lKCk7CisKKyAgICBDQ1Jlc291cmNlUHJvdmlkZXI6OlNjb3BlZFJlYWRMb2NrR0wgeVBsYW5l
TG9jayhtX3Jlc291cmNlUHJvdmlkZXIsIHlQbGFuZS5yZXNvdXJjZUlkKTsKKyAgICBDQ1Jlc291
cmNlUHJvdmlkZXI6OlNjb3BlZFJlYWRMb2NrR0wgdVBsYW5lTG9jayhtX3Jlc291cmNlUHJvdmlk
ZXIsIHVQbGFuZS5yZXNvdXJjZUlkKTsKKyAgICBDQ1Jlc291cmNlUHJvdmlkZXI6OlNjb3BlZFJl
YWRMb2NrR0wgdlBsYW5lTG9jayhtX3Jlc291cmNlUHJvdmlkZXIsIHZQbGFuZS5yZXNvdXJjZUlk
KTsKKyAgICBHTEMoY29udGV4dCgpLCBjb250ZXh0KCktPmFjdGl2ZVRleHR1cmUoR3JhcGhpY3ND
b250ZXh0M0Q6OlRFWFRVUkUxKSk7CisgICAgR0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT5iaW5k
VGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgeVBsYW5lTG9jay50ZXh0dXJl
SWQoKSkpOworICAgIEdMQyhjb250ZXh0KCksIGNvbnRleHQoKS0+YWN0aXZlVGV4dHVyZShHcmFw
aGljc0NvbnRleHQzRDo6VEVYVFVSRTIpKTsKKyAgICBHTEMoY29udGV4dCgpLCBjb250ZXh0KCkt
PmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCB1UGxhbmVMb2NrLnRl
eHR1cmVJZCgpKSk7CisgICAgR0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT5hY3RpdmVUZXh0dXJl
KEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFMykpOworICAgIEdMQyhjb250ZXh0KCksIGNvbnRl
eHQoKS0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIHZQbGFuZUxv
Y2sudGV4dHVyZUlkKCkpKTsKKworICAgIEdMQyhjb250ZXh0KCksIGNvbnRleHQoKS0+dXNlUHJv
Z3JhbShwcm9ncmFtLT5wcm9ncmFtKCkpKTsKKworICAgIGZsb2F0IHlXaWR0aFNjYWxlRmFjdG9y
ID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHlQbGFuZS52aXNpYmxlU2l6ZS53aWR0aCgpKSAvIHlQbGFu
ZS5zaXplLndpZHRoKCk7CisgICAgLy8gQXJiaXRyYXJpbHkgdGFrZSB0aGUgdSBzaXplcyBiZWNh
dXNlIHUgYW5kIHYgZGltZW5zaW9ucyBhcmUgaWRlbnRpY2FsLgorICAgIGZsb2F0IHV2V2lkdGhT
Y2FsZUZhY3RvciA9IHN0YXRpY19jYXN0PGZsb2F0Pih1UGxhbmUudmlzaWJsZVNpemUud2lkdGgo
KSkgLyB1UGxhbmUuc2l6ZS53aWR0aCgpOworICAgIEdMQyhjb250ZXh0KCksIGNvbnRleHQoKS0+
dW5pZm9ybTFmKHByb2dyYW0tPnZlcnRleFNoYWRlcigpLnlXaWR0aFNjYWxlRmFjdG9yTG9jYXRp
b24oKSwgeVdpZHRoU2NhbGVGYWN0b3IpKTsKKyAgICBHTEMoY29udGV4dCgpLCBjb250ZXh0KCkt
PnVuaWZvcm0xZihwcm9ncmFtLT52ZXJ0ZXhTaGFkZXIoKS51dldpZHRoU2NhbGVGYWN0b3JMb2Nh
dGlvbigpLCB1dldpZHRoU2NhbGVGYWN0b3IpKTsKKworICAgIEdMQyhjb250ZXh0KCksIGNvbnRl
eHQoKS0+dW5pZm9ybTFpKHByb2dyYW0tPmZyYWdtZW50U2hhZGVyKCkueVRleHR1cmVMb2NhdGlv
bigpLCAxKSk7CisgICAgR0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT51bmlmb3JtMWkocHJvZ3Jh
bS0+ZnJhZ21lbnRTaGFkZXIoKS51VGV4dHVyZUxvY2F0aW9uKCksIDIpKTsKKyAgICBHTEMoY29u
dGV4dCgpLCBjb250ZXh0KCktPnVuaWZvcm0xaShwcm9ncmFtLT5mcmFnbWVudFNoYWRlcigpLnZU
ZXh0dXJlTG9jYXRpb24oKSwgMykpOworCisgICAgLy8gVGhlc2UgdmFsdWVzIGFyZSBtYWdpYyBu
dW1iZXJzIHRoYXQgYXJlIHVzZWQgaW4gdGhlIHRyYW5zZm9ybWF0aW9uIGZyb20gWVVWIHRvIFJH
QiBjb2xvciB2YWx1ZXMuCisgICAgLy8gVGhleSBhcmUgdGFrZW4gZnJvbSB0aGUgZm9sbG93aW5n
IHdlYnBhZ2U6IGh0dHA6Ly93d3cuZm91cmNjLm9yZy9mY2N5dnJnYi5waHAKKyAgICBmbG9hdCB5
dXYyUkdCWzldID0geworICAgICAgICAxLjE2NGYsIDEuMTY0ZiwgMS4xNjRmLAorICAgICAgICAw
LmYsIC0uMzkxZiwgMi4wMThmLAorICAgICAgICAxLjU5NmYsIC0uODEzZiwgMC5mLAorICAgIH07
CisgICAgR0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT51bmlmb3JtTWF0cml4M2Z2KHByb2dyYW0t
PmZyYWdtZW50U2hhZGVyKCkuY2NNYXRyaXhMb2NhdGlvbigpLCAxLCAwLCB5dXYyUkdCKSk7CisK
KyAgICAvLyBUaGVzZSB2YWx1ZXMgbWFwIHRvIDE2LCAxMjgsIGFuZCAxMjggcmVzcGVjdGl2ZWx5
LCBhbmQgYXJlIGNvbXB1dGVkCisgICAgLy8gYXMgYSBmcmFjdGlvbiBvdmVyIDI1NiAoZS5nLiAx
NiAvIDI1NiA9IDAuMDYyNSkuCisgICAgLy8gVGhleSBhcmUgdXNlZCBpbiB0aGUgWVVWIHRvIFJH
QkEgY29udmVyc2lvbiBmb3JtdWxhOgorICAgIC8vICAgWSAtIDE2ICAgOiBHaXZlcyAxNiB2YWx1
ZXMgb2YgaGVhZCBhbmQgZm9vdHJvb20gZm9yIG92ZXJzaG9vdGluZworICAgIC8vICAgVSAtIDEy
OCAgOiBUdXJucyB1bnNpZ25lZCBVIGludG8gc2lnbmVkIFUgWy0xMjgsMTI3XQorICAgIC8vICAg
ViAtIDEyOCAgOiBUdXJucyB1bnNpZ25lZCBWIGludG8gc2lnbmVkIFYgWy0xMjgsMTI3XQorICAg
IGZsb2F0IHl1dkFkanVzdFszXSA9IHsKKyAgICAgICAgLTAuMDYyNWYsCisgICAgICAgIC0wLjVm
LAorICAgICAgICAtMC41ZiwKKyAgICB9OworICAgIEdMQyhjb250ZXh0KCksIGNvbnRleHQoKS0+
dW5pZm9ybTNmdihwcm9ncmFtLT5mcmFnbWVudFNoYWRlcigpLnl1dkFkakxvY2F0aW9uKCksIDEs
IHl1dkFkanVzdCkpOworCisgICAgc2V0U2hhZGVyT3BhY2l0eShxdWFkLT5vcGFjaXR5KCksIHBy
b2dyYW0tPmZyYWdtZW50U2hhZGVyKCkuYWxwaGFMb2NhdGlvbigpKTsKKyAgICBkcmF3UXVhZEdl
b21ldHJ5KGZyYW1lLCBxdWFkLT5xdWFkVHJhbnNmb3JtKCksIHF1YWQtPnF1YWRSZWN0KCksIHBy
b2dyYW0tPnZlcnRleFNoYWRlcigpLm1hdHJpeExvY2F0aW9uKCkpOworCisgICAgLy8gUmVzZXQg
YWN0aXZlIHRleHR1cmUgYmFjayB0byB0ZXh0dXJlIDAuCisgICAgR0xDKGNvbnRleHQoKSwgY29u
dGV4dCgpLT5hY3RpdmVUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFMCkpOworfQor
Cit2b2lkIENDUmVuZGVyZXJHTDo6ZHJhd1N0cmVhbVZpZGVvUXVhZChjb25zdCBEcmF3aW5nRnJh
bWUmIGZyYW1lLCBjb25zdCBDQ1N0cmVhbVZpZGVvRHJhd1F1YWQqIHF1YWQpCit7CisgICAgc3Rh
dGljIGZsb2F0IGdsTWF0cml4WzE2XTsKKworICAgIEFTU0VSVChtX2NhcGFiaWxpdGllcy51c2lu
Z0VnbEltYWdlKTsKKworICAgIGNvbnN0IFZpZGVvU3RyZWFtVGV4dHVyZVByb2dyYW0qIHByb2dy
YW0gPSB2aWRlb1N0cmVhbVRleHR1cmVQcm9ncmFtKCk7CisgICAgR0xDKGNvbnRleHQoKSwgY29u
dGV4dCgpLT51c2VQcm9ncmFtKHByb2dyYW0tPnByb2dyYW0oKSkpOworCisgICAgdG9HTE1hdHJp
eCgmZ2xNYXRyaXhbMF0sIHF1YWQtPm1hdHJpeCgpKTsKKyAgICBHTEMoY29udGV4dCgpLCBjb250
ZXh0KCktPnVuaWZvcm1NYXRyaXg0ZnYocHJvZ3JhbS0+dmVydGV4U2hhZGVyKCkudGV4TWF0cml4
TG9jYXRpb24oKSwgMSwgZmFsc2UsIGdsTWF0cml4KSk7CisKKyAgICBHTEMoY29udGV4dCgpLCBj
b250ZXh0KCktPmFjdGl2ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUwKSk7Cisg
ICAgR0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT5iaW5kVGV4dHVyZShFeHRlbnNpb25zM0RDaHJv
bWl1bTo6R0xfVEVYVFVSRV9FWFRFUk5BTF9PRVMsIHF1YWQtPnRleHR1cmVJZCgpKSk7CisKKyAg
ICBHTEMoY29udGV4dCgpLCBjb250ZXh0KCktPnVuaWZvcm0xaShwcm9ncmFtLT5mcmFnbWVudFNo
YWRlcigpLnNhbXBsZXJMb2NhdGlvbigpLCAwKSk7CisKKyAgICBzZXRTaGFkZXJPcGFjaXR5KHF1
YWQtPm9wYWNpdHkoKSwgcHJvZ3JhbS0+ZnJhZ21lbnRTaGFkZXIoKS5hbHBoYUxvY2F0aW9uKCkp
OworICAgIGRyYXdRdWFkR2VvbWV0cnkoZnJhbWUsIHF1YWQtPnF1YWRUcmFuc2Zvcm0oKSwgcXVh
ZC0+cXVhZFJlY3QoKSwgcHJvZ3JhbS0+dmVydGV4U2hhZGVyKCkubWF0cml4TG9jYXRpb24oKSk7
Cit9CisKK3N0cnVjdCBUZXh0dXJlUHJvZ3JhbUJpbmRpbmcgeworICAgIHRlbXBsYXRlPGNsYXNz
IFByb2dyYW0+IHZvaWQgc2V0KFByb2dyYW0qIHByb2dyYW0pCisgICAgeworICAgICAgICBBU1NF
UlQocHJvZ3JhbSAmJiBwcm9ncmFtLT5pbml0aWFsaXplZCgpKTsKKyAgICAgICAgcHJvZ3JhbUlk
ID0gcHJvZ3JhbS0+cHJvZ3JhbSgpOworICAgICAgICBzYW1wbGVyTG9jYXRpb24gPSBwcm9ncmFt
LT5mcmFnbWVudFNoYWRlcigpLnNhbXBsZXJMb2NhdGlvbigpOworICAgICAgICBtYXRyaXhMb2Nh
dGlvbiA9IHByb2dyYW0tPnZlcnRleFNoYWRlcigpLm1hdHJpeExvY2F0aW9uKCk7CisgICAgICAg
IGFscGhhTG9jYXRpb24gPSBwcm9ncmFtLT5mcmFnbWVudFNoYWRlcigpLmFscGhhTG9jYXRpb24o
KTsKKyAgICB9CisgICAgaW50IHByb2dyYW1JZDsKKyAgICBpbnQgc2FtcGxlckxvY2F0aW9uOwor
ICAgIGludCBtYXRyaXhMb2NhdGlvbjsKKyAgICBpbnQgYWxwaGFMb2NhdGlvbjsKK307CisKK3N0
cnVjdCBUZXhUcmFuc2Zvcm1UZXh0dXJlUHJvZ3JhbUJpbmRpbmcgOiBUZXh0dXJlUHJvZ3JhbUJp
bmRpbmcgeworICAgIHRlbXBsYXRlPGNsYXNzIFByb2dyYW0+IHZvaWQgc2V0KFByb2dyYW0qIHBy
b2dyYW0pCisgICAgeworICAgICAgICBUZXh0dXJlUHJvZ3JhbUJpbmRpbmc6OnNldChwcm9ncmFt
KTsKKyAgICAgICAgdGV4VHJhbnNmb3JtTG9jYXRpb24gPSBwcm9ncmFtLT52ZXJ0ZXhTaGFkZXIo
KS50ZXhUcmFuc2Zvcm1Mb2NhdGlvbigpOworICAgIH0KKyAgICBpbnQgdGV4VHJhbnNmb3JtTG9j
YXRpb247Cit9OworCit2b2lkIENDUmVuZGVyZXJHTDo6ZHJhd1RleHR1cmVRdWFkKGNvbnN0IERy
YXdpbmdGcmFtZSYgZnJhbWUsIGNvbnN0IENDVGV4dHVyZURyYXdRdWFkKiBxdWFkKQoreworICAg
IEFTU0VSVChDQ1Byb3h5Ojppc0ltcGxUaHJlYWQoKSk7CisKKyAgICBUZXhUcmFuc2Zvcm1UZXh0
dXJlUHJvZ3JhbUJpbmRpbmcgYmluZGluZzsKKyAgICBpZiAocXVhZC0+ZmxpcHBlZCgpKQorICAg
ICAgICBiaW5kaW5nLnNldCh0ZXh0dXJlUHJvZ3JhbUZsaXAoKSk7CisgICAgZWxzZQorICAgICAg
ICBiaW5kaW5nLnNldCh0ZXh0dXJlUHJvZ3JhbSgpKTsKKyAgICBHTEMoY29udGV4dCgpLCBjb250
ZXh0KCktPnVzZVByb2dyYW0oYmluZGluZy5wcm9ncmFtSWQpKTsKKyAgICBHTEMoY29udGV4dCgp
LCBjb250ZXh0KCktPnVuaWZvcm0xaShiaW5kaW5nLnNhbXBsZXJMb2NhdGlvbiwgMCkpOworICAg
IGNvbnN0IEZsb2F0UmVjdCYgdXZSZWN0ID0gcXVhZC0+dXZSZWN0KCk7CisgICAgR0xDKGNvbnRl
eHQoKSwgY29udGV4dCgpLT51bmlmb3JtNGYoYmluZGluZy50ZXhUcmFuc2Zvcm1Mb2NhdGlvbiwg
dXZSZWN0LngoKSwgdXZSZWN0LnkoKSwgdXZSZWN0LndpZHRoKCksIHV2UmVjdC5oZWlnaHQoKSkp
OworCisgICAgR0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT5hY3RpdmVUZXh0dXJlKEdyYXBoaWNz
Q29udGV4dDNEOjpURVhUVVJFMCkpOworICAgIENDUmVzb3VyY2VQcm92aWRlcjo6U2NvcGVkUmVh
ZExvY2tHTCBxdWFkUmVzb3VyY2VMb2NrKG1fcmVzb3VyY2VQcm92aWRlciwgcXVhZC0+cmVzb3Vy
Y2VJZCgpKTsKKyAgICBHTEMoY29udGV4dCgpLCBjb250ZXh0KCktPmJpbmRUZXh0dXJlKEdyYXBo
aWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBxdWFkUmVzb3VyY2VMb2NrLnRleHR1cmVJZCgpKSk7
CisKKyAgICAvLyBGSVhNRTogc2V0dGluZyB0aGUgdGV4dHVyZSBwYXJhbWV0ZXJzIGV2ZXJ5IHRp
bWUgaXMgcmVkdW5kYW50LiBNb3ZlIHRoaXMgY29kZSBzb21ld2hlcmUKKyAgICAvLyB3aGVyZSBp
dCB3aWxsIG9ubHkgaGFwcGVuIG9uY2UgcGVyIHRleHR1cmUuCisgICAgR0xDKGNvbnRleHQoKSwg
Y29udGV4dCgpLT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBH
cmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9NSU5fRklMVEVSLCBHcmFwaGljc0NvbnRleHQzRDo6
TElORUFSKSk7CisgICAgR0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT50ZXhQYXJhbWV0ZXJpKEdy
YXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9N
QUdfRklMVEVSLCBHcmFwaGljc0NvbnRleHQzRDo6TElORUFSKSk7CisgICAgR0xDKGNvbnRleHQo
KSwgY29udGV4dCgpLT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJE
LCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9XUkFQX1MsIEdyYXBoaWNzQ29udGV4dDNEOjpD
TEFNUF9UT19FREdFKSk7CisgICAgR0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT50ZXhQYXJhbWV0
ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVY
VFVSRV9XUkFQX1QsIEdyYXBoaWNzQ29udGV4dDNEOjpDTEFNUF9UT19FREdFKSk7CisKKyAgICBp
ZiAoIXF1YWQtPnByZW11bHRpcGxpZWRBbHBoYSgpKSB7CisgICAgICAgIC8vIEFzIGl0IHR1cm5z
IG91dCwgdGhlIHByZW11bHRpcGxpZWQgYWxwaGEgYmxlbmRpbmcgZnVuY3Rpb24gKE9ORSwgT05F
X01JTlVTX1NSQ19BTFBIQSkKKyAgICAgICAgLy8gd2lsbCBuZXZlciBjYXVzZSB0aGUgYWxwaGEg
Y2hhbm5lbCB0byBiZSBzZXQgdG8gYW55dGhpbmcgbGVzcyB0aGFuIDEuMCBpZiBpdCBpcworICAg
ICAgICAvLyBpbml0aWFsaXplZCB0byB0aGF0IHZhbHVlISBUaGVyZWZvcmUsIHByZW11bHRpcGxp
ZWRBbHBoYSBiZWluZyBmYWxzZSBpcyB0aGUgZmlyc3QKKyAgICAgICAgLy8gc2l0dWF0aW9uIHdl
IGNhbiBnZW5lcmFsbHkgc2VlIGFuIGFscGhhIGNoYW5uZWwgbGVzcyB0aGFuIDEuMCBjb21pbmcg
b3V0IG9mIHRoZQorICAgICAgICAvLyBjb21wb3NpdG9yLiBUaGlzIGlzIGNhdXNpbmcgcGxhdGZv
cm0gZGlmZmVyZW5jZXMgaW4gc29tZSBsYXlvdXQgdGVzdHMgKHNlZQorICAgICAgICAvLyBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODI0MTIpLCBzbyBpbiB0aGlzIHNp
dHVhdGlvbiwgdXNlIGEgc2VwYXJhdGUKKyAgICAgICAgLy8gYmxlbmQgZnVuY3Rpb24gZm9yIHRo
ZSBhbHBoYSBjaGFubmVsIHRvIGF2b2lkIG1vZGlmeWluZyBpdC4gRG9uJ3QgdXNlIGNvbG9yTWFz
ayBmb3IgdGhpcworICAgICAgICAvLyBhcyBpdCBoYXMgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25z
IG9uIHNvbWUgcGxhdGZvcm1zLgorICAgICAgICBHTEMoY29udGV4dCgpLCBjb250ZXh0KCktPmJs
ZW5kRnVuY1NlcGFyYXRlKEdyYXBoaWNzQ29udGV4dDNEOjpTUkNfQUxQSEEsIEdyYXBoaWNzQ29u
dGV4dDNEOjpPTkVfTUlOVVNfU1JDX0FMUEhBLCBHcmFwaGljc0NvbnRleHQzRDo6WkVSTywgR3Jh
cGhpY3NDb250ZXh0M0Q6Ok9ORSkpOworICAgIH0KKworICAgIHNldFNoYWRlck9wYWNpdHkocXVh
ZC0+b3BhY2l0eSgpLCBiaW5kaW5nLmFscGhhTG9jYXRpb24pOworICAgIGRyYXdRdWFkR2VvbWV0
cnkoZnJhbWUsIHF1YWQtPnF1YWRUcmFuc2Zvcm0oKSwgcXVhZC0+cXVhZFJlY3QoKSwgYmluZGlu
Zy5tYXRyaXhMb2NhdGlvbik7CisKKyAgICBpZiAoIXF1YWQtPnByZW11bHRpcGxpZWRBbHBoYSgp
KQorICAgICAgICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQtPmJsZW5kRnVuYyhHcmFwaGljc0Nv
bnRleHQzRDo6T05FLCBHcmFwaGljc0NvbnRleHQzRDo6T05FX01JTlVTX1NSQ19BTFBIQSkpOwor
fQorCit2b2lkIENDUmVuZGVyZXJHTDo6ZHJhd0lPU3VyZmFjZVF1YWQoY29uc3QgRHJhd2luZ0Zy
YW1lJiBmcmFtZSwgY29uc3QgQ0NJT1N1cmZhY2VEcmF3UXVhZCogcXVhZCkKK3sKKyAgICBBU1NF
UlQoQ0NQcm94eTo6aXNJbXBsVGhyZWFkKCkpOworICAgIFRleFRyYW5zZm9ybVRleHR1cmVQcm9n
cmFtQmluZGluZyBiaW5kaW5nOworICAgIGJpbmRpbmcuc2V0KHRleHR1cmVJT1N1cmZhY2VQcm9n
cmFtKCkpOworCisgICAgR0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT51c2VQcm9ncmFtKGJpbmRp
bmcucHJvZ3JhbUlkKSk7CisgICAgR0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT51bmlmb3JtMWko
YmluZGluZy5zYW1wbGVyTG9jYXRpb24sIDApKTsKKyAgICBpZiAocXVhZC0+b3JpZW50YXRpb24o
KSA9PSBDQ0lPU3VyZmFjZURyYXdRdWFkOjpGbGlwcGVkKQorICAgICAgICBHTEMoY29udGV4dCgp
LCBjb250ZXh0KCktPnVuaWZvcm00ZihiaW5kaW5nLnRleFRyYW5zZm9ybUxvY2F0aW9uLCAwLCBx
dWFkLT5pb1N1cmZhY2VTaXplKCkuaGVpZ2h0KCksIHF1YWQtPmlvU3VyZmFjZVNpemUoKS53aWR0
aCgpLCBxdWFkLT5pb1N1cmZhY2VTaXplKCkuaGVpZ2h0KCkgKiAtMS4wKSk7CisgICAgZWxzZQor
ICAgICAgICBHTEMoY29udGV4dCgpLCBjb250ZXh0KCktPnVuaWZvcm00ZihiaW5kaW5nLnRleFRy
YW5zZm9ybUxvY2F0aW9uLCAwLCAwLCBxdWFkLT5pb1N1cmZhY2VTaXplKCkud2lkdGgoKSwgcXVh
ZC0+aW9TdXJmYWNlU2l6ZSgpLmhlaWdodCgpKSk7CisKKyAgICBHTEMoY29udGV4dCgpLCBjb250
ZXh0KCktPmFjdGl2ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUwKSk7CisgICAg
R0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT5iaW5kVGV4dHVyZShFeHRlbnNpb25zM0Q6OlRFWFRV
UkVfUkVDVEFOR0xFX0FSQiwgcXVhZC0+aW9TdXJmYWNlVGV4dHVyZUlkKCkpKTsKKworICAgIHNl
dFNoYWRlck9wYWNpdHkocXVhZC0+b3BhY2l0eSgpLCBiaW5kaW5nLmFscGhhTG9jYXRpb24pOwor
ICAgIGRyYXdRdWFkR2VvbWV0cnkoZnJhbWUsIHF1YWQtPnF1YWRUcmFuc2Zvcm0oKSwgcXVhZC0+
cXVhZFJlY3QoKSwgYmluZGluZy5tYXRyaXhMb2NhdGlvbik7CisKKyAgICBHTEMoY29udGV4dCgp
LCBjb250ZXh0KCktPmJpbmRUZXh0dXJlKEV4dGVuc2lvbnMzRDo6VEVYVFVSRV9SRUNUQU5HTEVf
QVJCLCAwKSk7Cit9CisKK3ZvaWQgQ0NSZW5kZXJlckdMOjpmaW5pc2hEcmF3aW5nRnJhbWUoRHJh
d2luZ0ZyYW1lJiBmcmFtZSkKK3sKKyAgICBtX2N1cnJlbnRGcmFtZWJ1ZmZlckxvY2suY2xlYXIo
KTsKKyAgICBtX3N3YXBCdWZmZXJSZWN0LnVuaXRlKGVuY2xvc2luZ0ludFJlY3QoZnJhbWUucm9v
dERhbWFnZVJlY3QpKTsKKworICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+ZGlzYWJsZShH
cmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9URVNUKSk7CisgICAgR0xDKG1fY29udGV4dCwgbV9j
b250ZXh0LT5kaXNhYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORCkpOworfQorCit2b2lkIEND
UmVuZGVyZXJHTDo6dG9HTE1hdHJpeChmbG9hdCogZmxhdHRlbmVkLCBjb25zdCBXZWJUcmFuc2Zv
cm1hdGlvbk1hdHJpeCYgbSkKK3sKKyAgICBmbGF0dGVuZWRbMF0gPSBtLm0xMSgpOworICAgIGZs
YXR0ZW5lZFsxXSA9IG0ubTEyKCk7CisgICAgZmxhdHRlbmVkWzJdID0gbS5tMTMoKTsKKyAgICBm
bGF0dGVuZWRbM10gPSBtLm0xNCgpOworICAgIGZsYXR0ZW5lZFs0XSA9IG0ubTIxKCk7CisgICAg
ZmxhdHRlbmVkWzVdID0gbS5tMjIoKTsKKyAgICBmbGF0dGVuZWRbNl0gPSBtLm0yMygpOworICAg
IGZsYXR0ZW5lZFs3XSA9IG0ubTI0KCk7CisgICAgZmxhdHRlbmVkWzhdID0gbS5tMzEoKTsKKyAg
ICBmbGF0dGVuZWRbOV0gPSBtLm0zMigpOworICAgIGZsYXR0ZW5lZFsxMF0gPSBtLm0zMygpOwor
ICAgIGZsYXR0ZW5lZFsxMV0gPSBtLm0zNCgpOworICAgIGZsYXR0ZW5lZFsxMl0gPSBtLm00MSgp
OworICAgIGZsYXR0ZW5lZFsxM10gPSBtLm00MigpOworICAgIGZsYXR0ZW5lZFsxNF0gPSBtLm00
MygpOworICAgIGZsYXR0ZW5lZFsxNV0gPSBtLm00NCgpOworfQorCit2b2lkIENDUmVuZGVyZXJH
TDo6c2V0U2hhZGVyRmxvYXRRdWFkKGNvbnN0IEZsb2F0UXVhZCYgcXVhZCwgaW50IHF1YWRMb2Nh
dGlvbikKK3sKKyAgICBpZiAocXVhZExvY2F0aW9uID09IC0xKQorICAgICAgICByZXR1cm47CisK
KyAgICBmbG9hdCBwb2ludFs4XTsKKyAgICBwb2ludFswXSA9IHF1YWQucDEoKS54KCk7CisgICAg
cG9pbnRbMV0gPSBxdWFkLnAxKCkueSgpOworICAgIHBvaW50WzJdID0gcXVhZC5wMigpLngoKTsK
KyAgICBwb2ludFszXSA9IHF1YWQucDIoKS55KCk7CisgICAgcG9pbnRbNF0gPSBxdWFkLnAzKCku
eCgpOworICAgIHBvaW50WzVdID0gcXVhZC5wMygpLnkoKTsKKyAgICBwb2ludFs2XSA9IHF1YWQu
cDQoKS54KCk7CisgICAgcG9pbnRbN10gPSBxdWFkLnA0KCkueSgpOworICAgIEdMQyhtX2NvbnRl
eHQsIG1fY29udGV4dC0+dW5pZm9ybTJmdihxdWFkTG9jYXRpb24sIDQsIHBvaW50KSk7Cit9CisK
K3ZvaWQgQ0NSZW5kZXJlckdMOjpzZXRTaGFkZXJPcGFjaXR5KGZsb2F0IG9wYWNpdHksIGludCBh
bHBoYUxvY2F0aW9uKQoreworICAgIGlmIChhbHBoYUxvY2F0aW9uICE9IC0xKQorICAgICAgICBH
TEMobV9jb250ZXh0LCBtX2NvbnRleHQtPnVuaWZvcm0xZihhbHBoYUxvY2F0aW9uLCBvcGFjaXR5
KSk7Cit9CisKK3ZvaWQgQ0NSZW5kZXJlckdMOjpkcmF3UXVhZEdlb21ldHJ5KGNvbnN0IERyYXdp
bmdGcmFtZSYgZnJhbWUsIGNvbnN0IFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIGRy
YXdUcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UmVjdCYgcXVhZFJlY3QsIGludCBtYXRyaXhMb2NhdGlv
bikKK3sKKyAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBxdWFkUmVjdE1hdHJpeDsKKyAgICBx
dWFkUmVjdFRyYW5zZm9ybSgmcXVhZFJlY3RNYXRyaXgsIGRyYXdUcmFuc2Zvcm0sIHF1YWRSZWN0
KTsKKyAgICBzdGF0aWMgZmxvYXQgZ2xNYXRyaXhbMTZdOworICAgIHRvR0xNYXRyaXgoJmdsTWF0
cml4WzBdLCBmcmFtZS5wcm9qZWN0aW9uTWF0cml4ICogcXVhZFJlY3RNYXRyaXgpOworICAgIEdM
QyhtX2NvbnRleHQsIG1fY29udGV4dC0+dW5pZm9ybU1hdHJpeDRmdihtYXRyaXhMb2NhdGlvbiwg
MSwgZmFsc2UsICZnbE1hdHJpeFswXSkpOworCisgICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0
LT5kcmF3RWxlbWVudHMoR3JhcGhpY3NDb250ZXh0M0Q6OlRSSUFOR0xFUywgNiwgR3JhcGhpY3ND
b250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JULCAwKSk7Cit9CisKK3ZvaWQgQ0NSZW5kZXJlckdMOjpj
b3B5VGV4dHVyZVRvRnJhbWVidWZmZXIoY29uc3QgRHJhd2luZ0ZyYW1lJiBmcmFtZSwgaW50IHRl
eHR1cmVJZCwgY29uc3QgSW50UmVjdCYgcmVjdCwgY29uc3QgV2ViVHJhbnNmb3JtYXRpb25NYXRy
aXgmIGRyYXdNYXRyaXgpCit7CisgICAgY29uc3QgUmVuZGVyUGFzc1Byb2dyYW0qIHByb2dyYW0g
PSByZW5kZXJQYXNzUHJvZ3JhbSgpOworCisgICAgR0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT5h
Y3RpdmVUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFMCkpOworICAgIEdMQyhjb250
ZXh0KCksIGNvbnRleHQoKS0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVf
MkQsIHRleHR1cmVJZCkpOworICAgIEdMQyhjb250ZXh0KCksIGNvbnRleHQoKS0+dGV4UGFyYW1l
dGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRF
WFRVUkVfTUlOX0ZJTFRFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVBUikpOworICAgIEdMQyhj
b250ZXh0KCksIGNvbnRleHQoKS0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVY
VFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUFHX0ZJTFRFUiwgR3JhcGhpY3ND
b250ZXh0M0Q6OkxJTkVBUikpOworICAgIEdMQyhjb250ZXh0KCksIGNvbnRleHQoKS0+dGV4UGFy
YW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6
OlRFWFRVUkVfV1JBUF9TLCBHcmFwaGljc0NvbnRleHQzRDo6Q0xBTVBfVE9fRURHRSkpOworICAg
IEdMQyhjb250ZXh0KCksIGNvbnRleHQoKS0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQz
RDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfV1JBUF9ULCBHcmFwaGlj
c0NvbnRleHQzRDo6Q0xBTVBfVE9fRURHRSkpOworCisgICAgR0xDKGNvbnRleHQoKSwgY29udGV4
dCgpLT51c2VQcm9ncmFtKHByb2dyYW0tPnByb2dyYW0oKSkpOworICAgIEdMQyhjb250ZXh0KCks
IGNvbnRleHQoKS0+dW5pZm9ybTFpKHByb2dyYW0tPmZyYWdtZW50U2hhZGVyKCkuc2FtcGxlckxv
Y2F0aW9uKCksIDApKTsKKyAgICBzZXRTaGFkZXJPcGFjaXR5KDEsIHByb2dyYW0tPmZyYWdtZW50
U2hhZGVyKCkuYWxwaGFMb2NhdGlvbigpKTsKKyAgICBkcmF3UXVhZEdlb21ldHJ5KGZyYW1lLCBk
cmF3TWF0cml4LCByZWN0LCBwcm9ncmFtLT52ZXJ0ZXhTaGFkZXIoKS5tYXRyaXhMb2NhdGlvbigp
KTsKK30KKwordm9pZCBDQ1JlbmRlcmVyR0w6OmZpbmlzaCgpCit7CisgICAgVFJBQ0VfRVZFTlQw
KCJjYyIsICJDQ1JlbmRlcmVyR0w6OmZpbmlzaCIpOworICAgIG1fY29udGV4dC0+ZmluaXNoKCk7
Cit9CisKK2Jvb2wgQ0NSZW5kZXJlckdMOjpzd2FwQnVmZmVycygpCit7CisgICAgQVNTRVJUKG1f
dmlzaWJsZSk7CisgICAgQVNTRVJUKCFtX2lzRnJhbWVidWZmZXJEaXNjYXJkZWQpOworCisgICAg
VFJBQ0VfRVZFTlQwKCJjYyIsICJDQ1JlbmRlcmVyR0w6OnN3YXBCdWZmZXJzIik7CisgICAgLy8g
V2UncmUgZG9uZSEgVGltZSB0byBzd2FwYnVmZmVycyEKKworICAgIGlmIChtX2NhcGFiaWxpdGll
cy51c2luZ1BhcnRpYWxTd2FwKSB7CisgICAgICAgIC8vIElmIHN1cHBvcnRlZCwgd2UgY2FuIHNh
dmUgc2lnbmlmaWNhbnQgYmFuZHdpZHRoIGJ5IG9ubHkgc3dhcHBpbmcgdGhlIGRhbWFnZWQvc2Np
c3NvcmVkIHJlZ2lvbiAoY2xhbXBlZCB0byB0aGUgdmlld3BvcnQpCisgICAgICAgIG1fc3dhcEJ1
ZmZlclJlY3QuaW50ZXJzZWN0KEludFJlY3QoSW50UG9pbnQoKSwgdmlld3BvcnRTaXplKCkpKTsK
KyAgICAgICAgaW50IGZsaXBwZWRZUG9zT2ZSZWN0Qm90dG9tID0gdmlld3BvcnRIZWlnaHQoKSAt
IG1fc3dhcEJ1ZmZlclJlY3QueSgpIC0gbV9zd2FwQnVmZmVyUmVjdC5oZWlnaHQoKTsKKyAgICAg
ICAgbV9jb250ZXh0LT5wb3N0U3ViQnVmZmVyQ0hST01JVU0obV9zd2FwQnVmZmVyUmVjdC54KCks
IGZsaXBwZWRZUG9zT2ZSZWN0Qm90dG9tLCBtX3N3YXBCdWZmZXJSZWN0LndpZHRoKCksIG1fc3dh
cEJ1ZmZlclJlY3QuaGVpZ2h0KCkpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIE5vdGUgdGhh
dCBjdXJyZW50bHkgdGhpcyBoYXMgdGhlIHNhbWUgZWZmZWN0IGFzIHN3YXBCdWZmZXJzOyB3ZSBz
aG91bGQKKyAgICAgICAgLy8gY29uc2lkZXIgZXhwb3NpbmcgYSBkaWZmZXJlbnQgZW50cnkgcG9p
bnQgb24gV2ViR3JhcGhpY3NDb250ZXh0M0QuCisgICAgICAgIG1fY29udGV4dC0+cHJlcGFyZVRl
eHR1cmUoKTsKKyAgICB9CisKKyAgICBtX3N3YXBCdWZmZXJSZWN0ID0gSW50UmVjdCgpOworCisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgQ0NSZW5kZXJlckdMOjpvblN3YXBCdWZmZXJzQ29t
cGxldGUoKQoreworICAgIG1fY2xpZW50LT5vblN3YXBCdWZmZXJzQ29tcGxldGUoKTsKK30KKwor
dm9pZCBDQ1JlbmRlcmVyR0w6Om9uTWVtb3J5QWxsb2NhdGlvbkNoYW5nZWQoV2ViR3JhcGhpY3NN
ZW1vcnlBbGxvY2F0aW9uIGFsbG9jYXRpb24pCit7CisgICAgLy8gRklYTUU6IFRoaXMgaXMgY2Fs
bGVkIG9uIHRoZSBtYWluIHRocmVhZCBpbiBzaW5nbGUgdGhyZWFkZWQgbW9kZSwgYnV0IHdlIGV4
cGVjdCBpdCBvbiB0aGUgaW1wbCB0aHJlYWQuCisgICAgaWYgKCFDQ1Byb3h5OjpoYXNJbXBsVGhy
ZWFkKCkpIHsKKyAgICAgIEFTU0VSVChDQ1Byb3h5Ojppc01haW5UaHJlYWQoKSk7CisgICAgICBE
ZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQgaW1wbDsKKyAgICAgIG9uTWVtb3J5QWxsb2NhdGlvbkNo
YW5nZWRPbkltcGxUaHJlYWQoYWxsb2NhdGlvbik7CisgICAgfSBlbHNlIHsKKyAgICAgIEFTU0VS
VChDQ1Byb3h5Ojppc0ltcGxUaHJlYWQoKSk7CisgICAgICBvbk1lbW9yeUFsbG9jYXRpb25DaGFu
Z2VkT25JbXBsVGhyZWFkKGFsbG9jYXRpb24pOworICAgIH0KK30KKwordm9pZCBDQ1JlbmRlcmVy
R0w6Om9uTWVtb3J5QWxsb2NhdGlvbkNoYW5nZWRPbkltcGxUaHJlYWQoV2ViS2l0OjpXZWJHcmFw
aGljc01lbW9yeUFsbG9jYXRpb24gYWxsb2NhdGlvbikKK3sKKyAgICBpZiAobV92aXNpYmxlICYm
ICFhbGxvY2F0aW9uLmdwdVJlc291cmNlU2l6ZUluQnl0ZXMpCisgICAgICAgIHJldHVybjsKKwor
ICAgIGlmICghYWxsb2NhdGlvbi5zdWdnZXN0SGF2ZUJhY2tidWZmZXIgJiYgIW1fdmlzaWJsZSkK
KyAgICAgICAgZGlzY2FyZEZyYW1lYnVmZmVyKCk7CisKKyAgICBpZiAoIWFsbG9jYXRpb24uZ3B1
UmVzb3VyY2VTaXplSW5CeXRlcykgeworICAgICAgICByZWxlYXNlUmVuZGVyUGFzc1RleHR1cmVz
KCk7CisgICAgICAgIG1fY2xpZW50LT5yZWxlYXNlQ29udGVudHNUZXh0dXJlcygpOworICAgICAg
ICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQtPmZsdXNoKCkpOworICAgIH0gZWxzZQorICAgICAg
ICBtX2NsaWVudC0+c2V0TWVtb3J5QWxsb2NhdGlvbkxpbWl0Qnl0ZXMoYWxsb2NhdGlvbi5ncHVS
ZXNvdXJjZVNpemVJbkJ5dGVzKTsKK30KKwordm9pZCBDQ1JlbmRlcmVyR0w6OmRpc2NhcmRGcmFt
ZWJ1ZmZlcigpCit7CisgICAgaWYgKG1faXNGcmFtZWJ1ZmZlckRpc2NhcmRlZCkKKyAgICAgICAg
cmV0dXJuOworCisgICAgaWYgKCFtX2NhcGFiaWxpdGllcy51c2luZ0Rpc2NhcmRGcmFtZWJ1ZmZl
cikKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gRklYTUU6IFVwZGF0ZSBhdHRhY2htZW50cyBh
cmd1bWVudCB0byBhcHByb3ByaWF0ZSB2YWx1ZXMgb25jZSB0aGV5IGFyZSBubyBsb25nZXIgaWdu
b3JlZC4KKyAgICBtX2NvbnRleHQtPmRpc2NhcmRGcmFtZWJ1ZmZlckVYVChHcmFwaGljc0NvbnRl
eHQzRDo6VEVYVFVSRV8yRCwgMCwgMCk7CisgICAgbV9pc0ZyYW1lYnVmZmVyRGlzY2FyZGVkID0g
dHJ1ZTsKKworICAgIC8vIERhbWFnZSB0cmFja2VyIG5lZWRzIGEgZnVsbCByZXNldCBldmVyeSB0
aW1lIGZyYW1lYnVmZmVyIGlzIGRpc2NhcmRlZC4KKyAgICBtX2NsaWVudC0+c2V0RnVsbFJvb3RM
YXllckRhbWFnZSgpOworfQorCit2b2lkIENDUmVuZGVyZXJHTDo6ZW5zdXJlRnJhbWVidWZmZXIo
KQoreworICAgIGlmICghbV9pc0ZyYW1lYnVmZmVyRGlzY2FyZGVkKQorICAgICAgICByZXR1cm47
CisKKyAgICBpZiAoIW1fY2FwYWJpbGl0aWVzLnVzaW5nRGlzY2FyZEZyYW1lYnVmZmVyKQorICAg
ICAgICByZXR1cm47CisKKyAgICBtX2NvbnRleHQtPmVuc3VyZUZyYW1lYnVmZmVyQ0hST01JVU0o
KTsKKyAgICBtX2lzRnJhbWVidWZmZXJEaXNjYXJkZWQgPSBmYWxzZTsKK30KKwordm9pZCBDQ1Jl
bmRlcmVyR0w6Om9uQ29udGV4dExvc3QoKQoreworICAgIG1fY2xpZW50LT5kaWRMb3NlQ29udGV4
dCgpOworfQorCisKK3ZvaWQgQ0NSZW5kZXJlckdMOjpnZXRGcmFtZWJ1ZmZlclBpeGVscyh2b2lk
ICpwaXhlbHMsIGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgQVNTRVJUKHJlY3QubWF4WCgp
IDw9IHZpZXdwb3J0V2lkdGgoKSAmJiByZWN0Lm1heFkoKSA8PSB2aWV3cG9ydEhlaWdodCgpKTsK
KworICAgIGlmICghcGl4ZWxzKQorICAgICAgICByZXR1cm47CisKKyAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKKworICAgIGJvb2wgZG9Xb3JrYXJvdW5kID0gbmVlZHNJT1N1cmZhY2VSZWFkYmFj
a1dvcmthcm91bmQoKTsKKworICAgIFBsYXRmb3JtM0RPYmplY3QgdGVtcG9yYXJ5VGV4dHVyZSA9
IDA7CisgICAgUGxhdGZvcm0zRE9iamVjdCB0ZW1wb3JhcnlGQk8gPSAwOworCisgICAgaWYgKGRv
V29ya2Fyb3VuZCkgeworICAgICAgICAvLyBPbiBNYWMgT1MgWCwgY2FsbGluZyBnbFJlYWRQaXhl
bHMgYWdhaW5zdCBhbiBGQk8gd2hvc2UgY29sb3IgYXR0YWNobWVudCBpcyBhbgorICAgICAgICAv
LyBJT1N1cmZhY2UtYmFja2VkIHRleHR1cmUgY2F1c2VzIGNvcnJ1cHRpb24gb2YgZnV0dXJlIGds
UmVhZFBpeGVscyBjYWxscywgZXZlbiB0aG9zZSBvbgorICAgICAgICAvLyBkaWZmZXJlbnQgT3Bl
bkdMIGNvbnRleHRzLiBJdCBpcyBiZWxpZXZlZCB0aGF0IHRoaXMgaXMgdGhlIHJvb3QgY2F1c2Ug
b2YgdG9wIGNyYXNoZXIKKyAgICAgICAgLy8gaHR0cDovL2NyYnVnLmNvbS85OTM5My4gPHJkYXI6
Ly9wcm9ibGVtLzEwOTQ5Njg3PgorCisgICAgICAgIHRlbXBvcmFyeVRleHR1cmUgPSBtX2NvbnRl
eHQtPmNyZWF0ZVRleHR1cmUoKTsKKyAgICAgICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT5i
aW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgdGVtcG9yYXJ5VGV4dHVy
ZSkpOworICAgICAgICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQtPnRleFBhcmFtZXRlcmkoR3Jh
cGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01J
Tl9GSUxURVIsIEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FQVIpKTsKKyAgICAgICAgR0xDKG1fY29u
dGV4dCwgbV9jb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJF
XzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9NQUdfRklMVEVSLCBHcmFwaGljc0NvbnRl
eHQzRDo6TElORUFSKSk7CisgICAgICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+dGV4UGFy
YW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6
OlRFWFRVUkVfV1JBUF9TLCBHcmFwaGljc0NvbnRleHQzRDo6Q0xBTVBfVE9fRURHRSkpOworICAg
ICAgICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQtPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250
ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX1dSQVBfVCwgR3Jh
cGhpY3NDb250ZXh0M0Q6OkNMQU1QX1RPX0VER0UpKTsKKyAgICAgICAgLy8gQ29weSB0aGUgY29u
dGVudHMgb2YgdGhlIGN1cnJlbnQgKElPU3VyZmFjZS1iYWNrZWQpIGZyYW1lYnVmZmVyIGludG8g
YSB0ZW1wb3JhcnkgdGV4dHVyZS4KKyAgICAgICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT5j
b3B5VGV4SW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCwgR3JhcGhpY3ND
b250ZXh0M0Q6OlJHQkEsIDAsIDAsIHJlY3QubWF4WCgpLCByZWN0Lm1heFkoKSwgMCkpOworICAg
ICAgICB0ZW1wb3JhcnlGQk8gPSBtX2NvbnRleHQtPmNyZWF0ZUZyYW1lYnVmZmVyKCk7CisgICAg
ICAgIC8vIEF0dGFjaCB0aGlzIHRleHR1cmUgdG8gYW4gRkJPLCBhbmQgcGVyZm9ybSB0aGUgcmVh
ZGJhY2sgZnJvbSB0aGF0IEZCTy4KKyAgICAgICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT5i
aW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCB0ZW1wb3JhcnlG
Qk8pKTsKKyAgICAgICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT5mcmFtZWJ1ZmZlclRleHR1
cmUyRChHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIEdyYXBoaWNzQ29udGV4dDNEOjpD
T0xPUl9BVFRBQ0hNRU5UMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIHRlbXBvcmFy
eVRleHR1cmUsIDApKTsKKworICAgICAgICBBU1NFUlQobV9jb250ZXh0LT5jaGVja0ZyYW1lYnVm
ZmVyU3RhdHVzKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUikgPT0gR3JhcGhpY3NDb250
ZXh0M0Q6OkZSQU1FQlVGRkVSX0NPTVBMRVRFKTsKKyAgICB9CisKKyAgICBHTEMobV9jb250ZXh0
LCBtX2NvbnRleHQtPnJlYWRQaXhlbHMocmVjdC54KCksIHJlY3QueSgpLCByZWN0LndpZHRoKCks
IHJlY3QuaGVpZ2h0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3Jh
cGhpY3NDb250ZXh0M0Q6OlJHQkEsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFLCBw
aXhlbHMpKTsKKworICAgIGlmIChkb1dvcmthcm91bmQpIHsKKyAgICAgICAgLy8gQ2xlYW4gdXAu
CisgICAgICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+YmluZEZyYW1lYnVmZmVyKEdyYXBo
aWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgMCkpOworICAgICAgICBHTEMobV9jb250ZXh0LCBt
X2NvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAwKSk7
CisgICAgICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+ZGVsZXRlRnJhbWVidWZmZXIodGVt
cG9yYXJ5RkJPKSk7CisgICAgICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+ZGVsZXRlVGV4
dHVyZSh0ZW1wb3JhcnlUZXh0dXJlKSk7CisgICAgfQorCisgICAgaWYgKCFtX3Zpc2libGUpIHsK
KyAgICAgICAgVFJBQ0VfRVZFTlQwKCJjYyIsICJDQ1JlbmRlcmVyR0w6OmdldEZyYW1lYnVmZmVy
UGl4ZWxzIGRyb3BwaW5nIHJlc291cmNlcyBhZnRlciByZWFkYmFjayIpOworICAgICAgICBkaXNj
YXJkRnJhbWVidWZmZXIoKTsKKyAgICAgICAgcmVsZWFzZVJlbmRlclBhc3NUZXh0dXJlcygpOwor
ICAgICAgICBtX2NsaWVudC0+cmVsZWFzZUNvbnRlbnRzVGV4dHVyZXMoKTsKKyAgICAgICAgR0xD
KG1fY29udGV4dCwgbV9jb250ZXh0LT5mbHVzaCgpKTsKKyAgICB9Cit9CisKK2Jvb2wgQ0NSZW5k
ZXJlckdMOjpnZXRGcmFtZWJ1ZmZlclRleHR1cmUoQ0NTY29wZWRUZXh0dXJlKiB0ZXh0dXJlLCBj
b25zdCBJbnRSZWN0JiBkZXZpY2VSZWN0KQoreworICAgIEFTU0VSVCghdGV4dHVyZS0+aWQoKSB8
fCAodGV4dHVyZS0+c2l6ZSgpID09IGRldmljZVJlY3Quc2l6ZSgpICYmIHRleHR1cmUtPmZvcm1h
dCgpID09IEdyYXBoaWNzQ29udGV4dDNEOjpSR0IpKTsKKworICAgIGlmICghdGV4dHVyZS0+aWQo
KSAmJiAhdGV4dHVyZS0+YWxsb2NhdGUoQ0NSZW5kZXJlcjo6SW1wbFBvb2wsIGRldmljZVJlY3Qu
c2l6ZSgpLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCLCBDQ1Jlc291cmNlUHJvdmlkZXI6OlRleHR1
cmVVc2FnZUFueSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIENDUmVzb3VyY2VQcm92
aWRlcjo6U2NvcGVkV3JpdGVMb2NrR0wgbG9jayhtX3Jlc291cmNlUHJvdmlkZXIsIHRleHR1cmUt
PmlkKCkpOworICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhp
Y3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIGxvY2sudGV4dHVyZUlkKCkpKTsKKyAgICBHTEMobV9j
b250ZXh0LCBtX2NvbnRleHQtPmNvcHlUZXhJbWFnZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpURVhU
VVJFXzJELCAwLCB0ZXh0dXJlLT5mb3JtYXQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGRldmljZVJlY3QueCgpLCBkZXZpY2VSZWN0LnkoKSwgZGV2aWNl
UmVjdC53aWR0aCgpLCBkZXZpY2VSZWN0LmhlaWdodCgpLCAwKSk7CisgICAgcmV0dXJuIHRydWU7
Cit9CisKK2Jvb2wgQ0NSZW5kZXJlckdMOjp1c2VTY29wZWRUZXh0dXJlKERyYXdpbmdGcmFtZSYg
ZnJhbWUsIGNvbnN0IENDU2NvcGVkVGV4dHVyZSogdGV4dHVyZSwgY29uc3QgSW50UmVjdCYgdmll
d3BvcnRSZWN0KQoreworICAgIEFTU0VSVCh0ZXh0dXJlLT5pZCgpKTsKKyAgICBmcmFtZS5jdXJy
ZW50UmVuZGVyUGFzcyA9IDA7CisgICAgZnJhbWUuY3VycmVudFRleHR1cmUgPSB0ZXh0dXJlOwor
CisgICAgcmV0dXJuIGJpbmRGcmFtZWJ1ZmZlclRvVGV4dHVyZShmcmFtZSwgdGV4dHVyZSwgdmll
d3BvcnRSZWN0KTsKK30KKwordm9pZCBDQ1JlbmRlcmVyR0w6OmJpbmRGcmFtZWJ1ZmZlclRvT3V0
cHV0U3VyZmFjZShEcmF3aW5nRnJhbWUmIGZyYW1lKQoreworICAgIG1fY3VycmVudEZyYW1lYnVm
ZmVyTG9jay5jbGVhcigpOworICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+YmluZEZyYW1l
YnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgMCkpOworfQorCitib29sIEND
UmVuZGVyZXJHTDo6YmluZEZyYW1lYnVmZmVyVG9UZXh0dXJlKERyYXdpbmdGcmFtZSYgZnJhbWUs
IGNvbnN0IENDU2NvcGVkVGV4dHVyZSogdGV4dHVyZSwgY29uc3QgSW50UmVjdCYgZnJhbWVidWZm
ZXJSZWN0KQoreworICAgIEFTU0VSVCh0ZXh0dXJlLT5pZCgpKTsKKworICAgIEdMQyhtX2NvbnRl
eHQsIG1fY29udGV4dC0+YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJV
RkZFUiwgbV9vZmZzY3JlZW5GcmFtZWJ1ZmZlcklkKSk7CisgICAgbV9jdXJyZW50RnJhbWVidWZm
ZXJMb2NrID0gYWRvcHRQdHIobmV3IENDUmVzb3VyY2VQcm92aWRlcjo6U2NvcGVkV3JpdGVMb2Nr
R0wobV9yZXNvdXJjZVByb3ZpZGVyLCB0ZXh0dXJlLT5pZCgpKSk7CisgICAgdW5zaWduZWQgdGV4
dHVyZUlkID0gbV9jdXJyZW50RnJhbWVidWZmZXJMb2NrLT50ZXh0dXJlSWQoKTsKKyAgICBHTEMo
bV9jb250ZXh0LCBtX2NvbnRleHQtPmZyYW1lYnVmZmVyVGV4dHVyZTJEKEdyYXBoaWNzQ29udGV4
dDNEOjpGUkFNRUJVRkZFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0FUVEFDSE1FTlQwLCBH
cmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgdGV4dHVyZUlkLCAwKSk7CisKKyNpZiAhZGVm
aW5lZCAoIE5ERUJVRyApCisgICAgaWYgKG1fY29udGV4dC0+Y2hlY2tGcmFtZWJ1ZmZlclN0YXR1
cyhHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIpICE9IEdyYXBoaWNzQ29udGV4dDNEOjpG
UkFNRUJVRkZFUl9DT01QTEVURSkgeworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyNlbmRpZgorCisgICAgaW5pdGlhbGl6ZU1hdHJp
Y2VzKGZyYW1lLCBmcmFtZWJ1ZmZlclJlY3QsIGZhbHNlKTsKKyAgICBzZXREcmF3Vmlld3BvcnRT
aXplKGZyYW1lYnVmZmVyUmVjdC5zaXplKCkpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3Zv
aWQgQ0NSZW5kZXJlckdMOjplbmFibGVTY2lzc29yVGVzdFJlY3QoY29uc3QgSW50UmVjdCYgc2Np
c3NvclJlY3QpCit7CisgICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT5lbmFibGUoR3JhcGhp
Y3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVCkpOworICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4
dC0+c2Npc3NvcihzY2lzc29yUmVjdC54KCksIHNjaXNzb3JSZWN0LnkoKSwgc2Npc3NvclJlY3Qu
d2lkdGgoKSwgc2Npc3NvclJlY3QuaGVpZ2h0KCkpKTsKK30KKwordm9pZCBDQ1JlbmRlcmVyR0w6
OmRpc2FibGVTY2lzc29yVGVzdCgpCit7CisgICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT5k
aXNhYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX1RFU1QpKTsKK30KKwordm9pZCBDQ1Jl
bmRlcmVyR0w6OnNldERyYXdWaWV3cG9ydFNpemUoY29uc3QgSW50U2l6ZSYgdmlld3BvcnRTaXpl
KQoreworICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+dmlld3BvcnQoMCwgMCwgdmlld3Bv
cnRTaXplLndpZHRoKCksIHZpZXdwb3J0U2l6ZS5oZWlnaHQoKSkpOworfQorCitib29sIENDUmVu
ZGVyZXJHTDo6bWFrZUNvbnRleHRDdXJyZW50KCkKK3sKKyAgICByZXR1cm4gbV9jb250ZXh0LT5t
YWtlQ29udGV4dEN1cnJlbnQoKTsKK30KKworYm9vbCBDQ1JlbmRlcmVyR0w6OmluaXRpYWxpemVT
aGFyZWRPYmplY3RzKCkKK3sKKyAgICBUUkFDRV9FVkVOVDAoImNjIiwgIkNDUmVuZGVyZXJHTDo6
aW5pdGlhbGl6ZVNoYXJlZE9iamVjdHMiKTsKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKwor
ICAgIC8vIENyZWF0ZSBhbiBGQk8gZm9yIGRvaW5nIG9mZnNjcmVlbiByZW5kZXJpbmcuCisgICAg
R0xDKG1fY29udGV4dCwgbV9vZmZzY3JlZW5GcmFtZWJ1ZmZlcklkID0gbV9jb250ZXh0LT5jcmVh
dGVGcmFtZWJ1ZmZlcigpKTsKKworICAgIC8vIFdlIHdpbGwgYWx3YXlzIG5lZWQgdGhlc2UgcHJv
Z3JhbXMgdG8gcmVuZGVyLCBzbyBjcmVhdGUgdGhlIHByb2dyYW1zIGVhZ2VybHkgc28gdGhhdCB0
aGUgc2hhZGVyIGNvbXBpbGF0aW9uIGNhbgorICAgIC8vIHN0YXJ0IHdoaWxlIHdlIGRvIG90aGVy
IHdvcmsuIE90aGVyIHByb2dyYW1zIGFyZSBjcmVhdGVkIGxhemlseSBvbiBmaXJzdCBhY2Nlc3Mu
CisgICAgbV9zaGFyZWRHZW9tZXRyeSA9IGFkb3B0UHRyKG5ldyBHZW9tZXRyeUJpbmRpbmcobV9j
b250ZXh0LCBxdWFkVmVydGV4UmVjdCgpKSk7CisgICAgbV9yZW5kZXJQYXNzUHJvZ3JhbSA9IGFk
b3B0UHRyKG5ldyBSZW5kZXJQYXNzUHJvZ3JhbShtX2NvbnRleHQpKTsKKyAgICBtX3RpbGVQcm9n
cmFtID0gYWRvcHRQdHIobmV3IFRpbGVQcm9ncmFtKG1fY29udGV4dCkpOworICAgIG1fdGlsZVBy
b2dyYW1PcGFxdWUgPSBhZG9wdFB0cihuZXcgVGlsZVByb2dyYW1PcGFxdWUobV9jb250ZXh0KSk7
CisKKyAgICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQtPmZsdXNoKCkpOworCisgICAgbV90ZXh0
dXJlQ29waWVyID0gQWNjZWxlcmF0ZWRUZXh0dXJlQ29waWVyOjpjcmVhdGUobV9jb250ZXh0LCBt
X2lzVXNpbmdCaW5kVW5pZm9ybSk7CisgICAgaWYgKG1fdGV4dHVyZVVwbG9hZGVyU2V0dGluZyA9
PSBUaHJvdHRsZWRVcGxvYWRlcikKKyAgICAgICAgbV90ZXh0dXJlVXBsb2FkZXIgPSBUaHJvdHRs
ZWRUZXh0dXJlVXBsb2FkZXI6OmNyZWF0ZShtX2NvbnRleHQpOworICAgIGVsc2UKKyAgICAgICAg
bV90ZXh0dXJlVXBsb2FkZXIgPSBVbnRocm90dGxlZFRleHR1cmVVcGxvYWRlcjo6Y3JlYXRlKCk7
CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworY29uc3QgQ0NSZW5kZXJlckdMOjpUaWxlQ2hlY2tl
cmJvYXJkUHJvZ3JhbSogQ0NSZW5kZXJlckdMOjp0aWxlQ2hlY2tlcmJvYXJkUHJvZ3JhbSgpCit7
CisgICAgaWYgKCFtX3RpbGVDaGVja2VyYm9hcmRQcm9ncmFtKQorICAgICAgICBtX3RpbGVDaGVj
a2VyYm9hcmRQcm9ncmFtID0gYWRvcHRQdHIobmV3IFRpbGVDaGVja2VyYm9hcmRQcm9ncmFtKG1f
Y29udGV4dCkpOworICAgIGlmICghbV90aWxlQ2hlY2tlcmJvYXJkUHJvZ3JhbS0+aW5pdGlhbGl6
ZWQoKSkgeworICAgICAgICBUUkFDRV9FVkVOVDAoImNjIiwgIkNDUmVuZGVyZXJHTDo6Y2hlY2tl
cmJvYXJkUHJvZ3JhbTo6aW5pdGFsaXplIik7CisgICAgICAgIG1fdGlsZUNoZWNrZXJib2FyZFBy
b2dyYW0tPmluaXRpYWxpemUobV9jb250ZXh0LCBtX2lzVXNpbmdCaW5kVW5pZm9ybSk7CisgICAg
fQorICAgIHJldHVybiBtX3RpbGVDaGVja2VyYm9hcmRQcm9ncmFtLmdldCgpOworfQorCitjb25z
dCBDQ1JlbmRlcmVyR0w6OlNvbGlkQ29sb3JQcm9ncmFtKiBDQ1JlbmRlcmVyR0w6OnNvbGlkQ29s
b3JQcm9ncmFtKCkKK3sKKyAgICBpZiAoIW1fc29saWRDb2xvclByb2dyYW0pCisgICAgICAgIG1f
c29saWRDb2xvclByb2dyYW0gPSBhZG9wdFB0cihuZXcgU29saWRDb2xvclByb2dyYW0obV9jb250
ZXh0KSk7CisgICAgaWYgKCFtX3NvbGlkQ29sb3JQcm9ncmFtLT5pbml0aWFsaXplZCgpKSB7Cisg
ICAgICAgIFRSQUNFX0VWRU5UMCgiY2MiLCAiQ0NSZW5kZXJlckdMOjpzb2xpZENvbG9yUHJvZ3Jh
bTo6aW5pdGlhbGl6ZSIpOworICAgICAgICBtX3NvbGlkQ29sb3JQcm9ncmFtLT5pbml0aWFsaXpl
KG1fY29udGV4dCwgbV9pc1VzaW5nQmluZFVuaWZvcm0pOworICAgIH0KKyAgICByZXR1cm4gbV9z
b2xpZENvbG9yUHJvZ3JhbS5nZXQoKTsKK30KKworY29uc3QgQ0NSZW5kZXJlckdMOjpSZW5kZXJQ
YXNzUHJvZ3JhbSogQ0NSZW5kZXJlckdMOjpyZW5kZXJQYXNzUHJvZ3JhbSgpCit7CisgICAgQVNT
RVJUKG1fcmVuZGVyUGFzc1Byb2dyYW0pOworICAgIGlmICghbV9yZW5kZXJQYXNzUHJvZ3JhbS0+
aW5pdGlhbGl6ZWQoKSkgeworICAgICAgICBUUkFDRV9FVkVOVDAoImNjIiwgIkNDUmVuZGVyZXJH
TDo6cmVuZGVyUGFzc1Byb2dyYW06OmluaXRpYWxpemUiKTsKKyAgICAgICAgbV9yZW5kZXJQYXNz
UHJvZ3JhbS0+aW5pdGlhbGl6ZShtX2NvbnRleHQsIG1faXNVc2luZ0JpbmRVbmlmb3JtKTsKKyAg
ICB9CisgICAgcmV0dXJuIG1fcmVuZGVyUGFzc1Byb2dyYW0uZ2V0KCk7Cit9CisKK2NvbnN0IEND
UmVuZGVyZXJHTDo6UmVuZGVyUGFzc1Byb2dyYW1BQSogQ0NSZW5kZXJlckdMOjpyZW5kZXJQYXNz
UHJvZ3JhbUFBKCkKK3sKKyAgICBpZiAoIW1fcmVuZGVyUGFzc1Byb2dyYW1BQSkKKyAgICAgICAg
bV9yZW5kZXJQYXNzUHJvZ3JhbUFBID0gYWRvcHRQdHIobmV3IFJlbmRlclBhc3NQcm9ncmFtQUEo
bV9jb250ZXh0KSk7CisgICAgaWYgKCFtX3JlbmRlclBhc3NQcm9ncmFtQUEtPmluaXRpYWxpemVk
KCkpIHsKKyAgICAgICAgVFJBQ0VfRVZFTlQwKCJjYyIsICJDQ1JlbmRlcmVyR0w6OnJlbmRlclBh
c3NQcm9ncmFtQUE6OmluaXRpYWxpemUiKTsKKyAgICAgICAgbV9yZW5kZXJQYXNzUHJvZ3JhbUFB
LT5pbml0aWFsaXplKG1fY29udGV4dCwgbV9pc1VzaW5nQmluZFVuaWZvcm0pOworICAgIH0KKyAg
ICByZXR1cm4gbV9yZW5kZXJQYXNzUHJvZ3JhbUFBLmdldCgpOworfQorCitjb25zdCBDQ1JlbmRl
cmVyR0w6OlJlbmRlclBhc3NNYXNrUHJvZ3JhbSogQ0NSZW5kZXJlckdMOjpyZW5kZXJQYXNzTWFz
a1Byb2dyYW0oKQoreworICAgIGlmICghbV9yZW5kZXJQYXNzTWFza1Byb2dyYW0pCisgICAgICAg
IG1fcmVuZGVyUGFzc01hc2tQcm9ncmFtID0gYWRvcHRQdHIobmV3IFJlbmRlclBhc3NNYXNrUHJv
Z3JhbShtX2NvbnRleHQpKTsKKyAgICBpZiAoIW1fcmVuZGVyUGFzc01hc2tQcm9ncmFtLT5pbml0
aWFsaXplZCgpKSB7CisgICAgICAgIFRSQUNFX0VWRU5UMCgiY2MiLCAiQ0NSZW5kZXJlckdMOjpy
ZW5kZXJQYXNzTWFza1Byb2dyYW06OmluaXRpYWxpemUiKTsKKyAgICAgICAgbV9yZW5kZXJQYXNz
TWFza1Byb2dyYW0tPmluaXRpYWxpemUobV9jb250ZXh0LCBtX2lzVXNpbmdCaW5kVW5pZm9ybSk7
CisgICAgfQorICAgIHJldHVybiBtX3JlbmRlclBhc3NNYXNrUHJvZ3JhbS5nZXQoKTsKK30KKwor
Y29uc3QgQ0NSZW5kZXJlckdMOjpSZW5kZXJQYXNzTWFza1Byb2dyYW1BQSogQ0NSZW5kZXJlckdM
OjpyZW5kZXJQYXNzTWFza1Byb2dyYW1BQSgpCit7CisgICAgaWYgKCFtX3JlbmRlclBhc3NNYXNr
UHJvZ3JhbUFBKQorICAgICAgICBtX3JlbmRlclBhc3NNYXNrUHJvZ3JhbUFBID0gYWRvcHRQdHIo
bmV3IFJlbmRlclBhc3NNYXNrUHJvZ3JhbUFBKG1fY29udGV4dCkpOworICAgIGlmICghbV9yZW5k
ZXJQYXNzTWFza1Byb2dyYW1BQS0+aW5pdGlhbGl6ZWQoKSkgeworICAgICAgICBUUkFDRV9FVkVO
VDAoImNjIiwgIkNDUmVuZGVyZXJHTDo6cmVuZGVyUGFzc01hc2tQcm9ncmFtQUE6OmluaXRpYWxp
emUiKTsKKyAgICAgICAgbV9yZW5kZXJQYXNzTWFza1Byb2dyYW1BQS0+aW5pdGlhbGl6ZShtX2Nv
bnRleHQsIG1faXNVc2luZ0JpbmRVbmlmb3JtKTsKKyAgICB9CisgICAgcmV0dXJuIG1fcmVuZGVy
UGFzc01hc2tQcm9ncmFtQUEuZ2V0KCk7Cit9CisKK2NvbnN0IENDUmVuZGVyZXJHTDo6VGlsZVBy
b2dyYW0qIENDUmVuZGVyZXJHTDo6dGlsZVByb2dyYW0oKQoreworICAgIEFTU0VSVChtX3RpbGVQ
cm9ncmFtKTsKKyAgICBpZiAoIW1fdGlsZVByb2dyYW0tPmluaXRpYWxpemVkKCkpIHsKKyAgICAg
ICAgVFJBQ0VfRVZFTlQwKCJjYyIsICJDQ1JlbmRlcmVyR0w6OnRpbGVQcm9ncmFtOjppbml0aWFs
aXplIik7CisgICAgICAgIG1fdGlsZVByb2dyYW0tPmluaXRpYWxpemUobV9jb250ZXh0LCBtX2lz
VXNpbmdCaW5kVW5pZm9ybSk7CisgICAgfQorICAgIHJldHVybiBtX3RpbGVQcm9ncmFtLmdldCgp
OworfQorCitjb25zdCBDQ1JlbmRlcmVyR0w6OlRpbGVQcm9ncmFtT3BhcXVlKiBDQ1JlbmRlcmVy
R0w6OnRpbGVQcm9ncmFtT3BhcXVlKCkKK3sKKyAgICBBU1NFUlQobV90aWxlUHJvZ3JhbU9wYXF1
ZSk7CisgICAgaWYgKCFtX3RpbGVQcm9ncmFtT3BhcXVlLT5pbml0aWFsaXplZCgpKSB7CisgICAg
ICAgIFRSQUNFX0VWRU5UMCgiY2MiLCAiQ0NSZW5kZXJlckdMOjp0aWxlUHJvZ3JhbU9wYXF1ZTo6
aW5pdGlhbGl6ZSIpOworICAgICAgICBtX3RpbGVQcm9ncmFtT3BhcXVlLT5pbml0aWFsaXplKG1f
Y29udGV4dCwgbV9pc1VzaW5nQmluZFVuaWZvcm0pOworICAgIH0KKyAgICByZXR1cm4gbV90aWxl
UHJvZ3JhbU9wYXF1ZS5nZXQoKTsKK30KKworY29uc3QgQ0NSZW5kZXJlckdMOjpUaWxlUHJvZ3Jh
bUFBKiBDQ1JlbmRlcmVyR0w6OnRpbGVQcm9ncmFtQUEoKQoreworICAgIGlmICghbV90aWxlUHJv
Z3JhbUFBKQorICAgICAgICBtX3RpbGVQcm9ncmFtQUEgPSBhZG9wdFB0cihuZXcgVGlsZVByb2dy
YW1BQShtX2NvbnRleHQpKTsKKyAgICBpZiAoIW1fdGlsZVByb2dyYW1BQS0+aW5pdGlhbGl6ZWQo
KSkgeworICAgICAgICBUUkFDRV9FVkVOVDAoImNjIiwgIkNDUmVuZGVyZXJHTDo6dGlsZVByb2dy
YW1BQTo6aW5pdGlhbGl6ZSIpOworICAgICAgICBtX3RpbGVQcm9ncmFtQUEtPmluaXRpYWxpemUo
bV9jb250ZXh0LCBtX2lzVXNpbmdCaW5kVW5pZm9ybSk7CisgICAgfQorICAgIHJldHVybiBtX3Rp
bGVQcm9ncmFtQUEuZ2V0KCk7Cit9CisKK2NvbnN0IENDUmVuZGVyZXJHTDo6VGlsZVByb2dyYW1T
d2l6emxlKiBDQ1JlbmRlcmVyR0w6OnRpbGVQcm9ncmFtU3dpenpsZSgpCit7CisgICAgaWYgKCFt
X3RpbGVQcm9ncmFtU3dpenpsZSkKKyAgICAgICAgbV90aWxlUHJvZ3JhbVN3aXp6bGUgPSBhZG9w
dFB0cihuZXcgVGlsZVByb2dyYW1Td2l6emxlKG1fY29udGV4dCkpOworICAgIGlmICghbV90aWxl
UHJvZ3JhbVN3aXp6bGUtPmluaXRpYWxpemVkKCkpIHsKKyAgICAgICAgVFJBQ0VfRVZFTlQwKCJj
YyIsICJDQ1JlbmRlcmVyR0w6OnRpbGVQcm9ncmFtU3dpenpsZTo6aW5pdGlhbGl6ZSIpOworICAg
ICAgICBtX3RpbGVQcm9ncmFtU3dpenpsZS0+aW5pdGlhbGl6ZShtX2NvbnRleHQsIG1faXNVc2lu
Z0JpbmRVbmlmb3JtKTsKKyAgICB9CisgICAgcmV0dXJuIG1fdGlsZVByb2dyYW1Td2l6emxlLmdl
dCgpOworfQorCitjb25zdCBDQ1JlbmRlcmVyR0w6OlRpbGVQcm9ncmFtU3dpenpsZU9wYXF1ZSog
Q0NSZW5kZXJlckdMOjp0aWxlUHJvZ3JhbVN3aXp6bGVPcGFxdWUoKQoreworICAgIGlmICghbV90
aWxlUHJvZ3JhbVN3aXp6bGVPcGFxdWUpCisgICAgICAgIG1fdGlsZVByb2dyYW1Td2l6emxlT3Bh
cXVlID0gYWRvcHRQdHIobmV3IFRpbGVQcm9ncmFtU3dpenpsZU9wYXF1ZShtX2NvbnRleHQpKTsK
KyAgICBpZiAoIW1fdGlsZVByb2dyYW1Td2l6emxlT3BhcXVlLT5pbml0aWFsaXplZCgpKSB7Cisg
ICAgICAgIFRSQUNFX0VWRU5UMCgiY2MiLCAiQ0NSZW5kZXJlckdMOjp0aWxlUHJvZ3JhbVN3aXp6
bGVPcGFxdWU6OmluaXRpYWxpemUiKTsKKyAgICAgICAgbV90aWxlUHJvZ3JhbVN3aXp6bGVPcGFx
dWUtPmluaXRpYWxpemUobV9jb250ZXh0LCBtX2lzVXNpbmdCaW5kVW5pZm9ybSk7CisgICAgfQor
ICAgIHJldHVybiBtX3RpbGVQcm9ncmFtU3dpenpsZU9wYXF1ZS5nZXQoKTsKK30KKworY29uc3Qg
Q0NSZW5kZXJlckdMOjpUaWxlUHJvZ3JhbVN3aXp6bGVBQSogQ0NSZW5kZXJlckdMOjp0aWxlUHJv
Z3JhbVN3aXp6bGVBQSgpCit7CisgICAgaWYgKCFtX3RpbGVQcm9ncmFtU3dpenpsZUFBKQorICAg
ICAgICBtX3RpbGVQcm9ncmFtU3dpenpsZUFBID0gYWRvcHRQdHIobmV3IFRpbGVQcm9ncmFtU3dp
enpsZUFBKG1fY29udGV4dCkpOworICAgIGlmICghbV90aWxlUHJvZ3JhbVN3aXp6bGVBQS0+aW5p
dGlhbGl6ZWQoKSkgeworICAgICAgICBUUkFDRV9FVkVOVDAoImNjIiwgIkNDUmVuZGVyZXJHTDo6
dGlsZVByb2dyYW1Td2l6emxlQUE6OmluaXRpYWxpemUiKTsKKyAgICAgICAgbV90aWxlUHJvZ3Jh
bVN3aXp6bGVBQS0+aW5pdGlhbGl6ZShtX2NvbnRleHQsIG1faXNVc2luZ0JpbmRVbmlmb3JtKTsK
KyAgICB9CisgICAgcmV0dXJuIG1fdGlsZVByb2dyYW1Td2l6emxlQUEuZ2V0KCk7Cit9CisKK2Nv
bnN0IENDUmVuZGVyZXJHTDo6VGV4dHVyZVByb2dyYW0qIENDUmVuZGVyZXJHTDo6dGV4dHVyZVBy
b2dyYW0oKQoreworICAgIGlmICghbV90ZXh0dXJlUHJvZ3JhbSkKKyAgICAgICAgbV90ZXh0dXJl
UHJvZ3JhbSA9IGFkb3B0UHRyKG5ldyBUZXh0dXJlUHJvZ3JhbShtX2NvbnRleHQpKTsKKyAgICBp
ZiAoIW1fdGV4dHVyZVByb2dyYW0tPmluaXRpYWxpemVkKCkpIHsKKyAgICAgICAgVFJBQ0VfRVZF
TlQwKCJjYyIsICJDQ1JlbmRlcmVyR0w6OnRleHR1cmVQcm9ncmFtOjppbml0aWFsaXplIik7Cisg
ICAgICAgIG1fdGV4dHVyZVByb2dyYW0tPmluaXRpYWxpemUobV9jb250ZXh0LCBtX2lzVXNpbmdC
aW5kVW5pZm9ybSk7CisgICAgfQorICAgIHJldHVybiBtX3RleHR1cmVQcm9ncmFtLmdldCgpOwor
fQorCitjb25zdCBDQ1JlbmRlcmVyR0w6OlRleHR1cmVQcm9ncmFtRmxpcCogQ0NSZW5kZXJlckdM
Ojp0ZXh0dXJlUHJvZ3JhbUZsaXAoKQoreworICAgIGlmICghbV90ZXh0dXJlUHJvZ3JhbUZsaXAp
CisgICAgICAgIG1fdGV4dHVyZVByb2dyYW1GbGlwID0gYWRvcHRQdHIobmV3IFRleHR1cmVQcm9n
cmFtRmxpcChtX2NvbnRleHQpKTsKKyAgICBpZiAoIW1fdGV4dHVyZVByb2dyYW1GbGlwLT5pbml0
aWFsaXplZCgpKSB7CisgICAgICAgIFRSQUNFX0VWRU5UMCgiY2MiLCAiQ0NSZW5kZXJlckdMOjp0
ZXh0dXJlUHJvZ3JhbUZsaXA6OmluaXRpYWxpemUiKTsKKyAgICAgICAgbV90ZXh0dXJlUHJvZ3Jh
bUZsaXAtPmluaXRpYWxpemUobV9jb250ZXh0LCBtX2lzVXNpbmdCaW5kVW5pZm9ybSk7CisgICAg
fQorICAgIHJldHVybiBtX3RleHR1cmVQcm9ncmFtRmxpcC5nZXQoKTsKK30KKworY29uc3QgQ0NS
ZW5kZXJlckdMOjpUZXh0dXJlSU9TdXJmYWNlUHJvZ3JhbSogQ0NSZW5kZXJlckdMOjp0ZXh0dXJl
SU9TdXJmYWNlUHJvZ3JhbSgpCit7CisgICAgaWYgKCFtX3RleHR1cmVJT1N1cmZhY2VQcm9ncmFt
KQorICAgICAgICBtX3RleHR1cmVJT1N1cmZhY2VQcm9ncmFtID0gYWRvcHRQdHIobmV3IFRleHR1
cmVJT1N1cmZhY2VQcm9ncmFtKG1fY29udGV4dCkpOworICAgIGlmICghbV90ZXh0dXJlSU9TdXJm
YWNlUHJvZ3JhbS0+aW5pdGlhbGl6ZWQoKSkgeworICAgICAgICBUUkFDRV9FVkVOVDAoImNjIiwg
IkNDUmVuZGVyZXJHTDo6dGV4dHVyZUlPU3VyZmFjZVByb2dyYW06OmluaXRpYWxpemUiKTsKKyAg
ICAgICAgbV90ZXh0dXJlSU9TdXJmYWNlUHJvZ3JhbS0+aW5pdGlhbGl6ZShtX2NvbnRleHQsIG1f
aXNVc2luZ0JpbmRVbmlmb3JtKTsKKyAgICB9CisgICAgcmV0dXJuIG1fdGV4dHVyZUlPU3VyZmFj
ZVByb2dyYW0uZ2V0KCk7Cit9CisKK2NvbnN0IENDUmVuZGVyZXJHTDo6VmlkZW9ZVVZQcm9ncmFt
KiBDQ1JlbmRlcmVyR0w6OnZpZGVvWVVWUHJvZ3JhbSgpCit7CisgICAgaWYgKCFtX3ZpZGVvWVVW
UHJvZ3JhbSkKKyAgICAgICAgbV92aWRlb1lVVlByb2dyYW0gPSBhZG9wdFB0cihuZXcgVmlkZW9Z
VVZQcm9ncmFtKG1fY29udGV4dCkpOworICAgIGlmICghbV92aWRlb1lVVlByb2dyYW0tPmluaXRp
YWxpemVkKCkpIHsKKyAgICAgICAgVFJBQ0VfRVZFTlQwKCJjYyIsICJDQ1JlbmRlcmVyR0w6OnZp
ZGVvWVVWUHJvZ3JhbTo6aW5pdGlhbGl6ZSIpOworICAgICAgICBtX3ZpZGVvWVVWUHJvZ3JhbS0+
aW5pdGlhbGl6ZShtX2NvbnRleHQsIG1faXNVc2luZ0JpbmRVbmlmb3JtKTsKKyAgICB9CisgICAg
cmV0dXJuIG1fdmlkZW9ZVVZQcm9ncmFtLmdldCgpOworfQorCitjb25zdCBDQ1JlbmRlcmVyR0w6
OlZpZGVvU3RyZWFtVGV4dHVyZVByb2dyYW0qIENDUmVuZGVyZXJHTDo6dmlkZW9TdHJlYW1UZXh0
dXJlUHJvZ3JhbSgpCit7CisgICAgaWYgKCFtX3ZpZGVvU3RyZWFtVGV4dHVyZVByb2dyYW0pCisg
ICAgICAgIG1fdmlkZW9TdHJlYW1UZXh0dXJlUHJvZ3JhbSA9IGFkb3B0UHRyKG5ldyBWaWRlb1N0
cmVhbVRleHR1cmVQcm9ncmFtKG1fY29udGV4dCkpOworICAgIGlmICghbV92aWRlb1N0cmVhbVRl
eHR1cmVQcm9ncmFtLT5pbml0aWFsaXplZCgpKSB7CisgICAgICAgIFRSQUNFX0VWRU5UMCgiY2Mi
LCAiQ0NSZW5kZXJlckdMOjpzdHJlYW1UZXh0dXJlUHJvZ3JhbTo6aW5pdGlhbGl6ZSIpOworICAg
ICAgICBtX3ZpZGVvU3RyZWFtVGV4dHVyZVByb2dyYW0tPmluaXRpYWxpemUobV9jb250ZXh0LCBt
X2lzVXNpbmdCaW5kVW5pZm9ybSk7CisgICAgfQorICAgIHJldHVybiBtX3ZpZGVvU3RyZWFtVGV4
dHVyZVByb2dyYW0uZ2V0KCk7Cit9CisKK3ZvaWQgQ0NSZW5kZXJlckdMOjpjbGVhbnVwU2hhcmVk
T2JqZWN0cygpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisKKyAgICBtX3NoYXJlZEdl
b21ldHJ5LmNsZWFyKCk7CisKKyAgICBpZiAobV90aWxlUHJvZ3JhbSkKKyAgICAgICAgbV90aWxl
UHJvZ3JhbS0+Y2xlYW51cChtX2NvbnRleHQpOworICAgIGlmIChtX3RpbGVQcm9ncmFtT3BhcXVl
KQorICAgICAgICBtX3RpbGVQcm9ncmFtT3BhcXVlLT5jbGVhbnVwKG1fY29udGV4dCk7CisgICAg
aWYgKG1fdGlsZVByb2dyYW1Td2l6emxlKQorICAgICAgICBtX3RpbGVQcm9ncmFtU3dpenpsZS0+
Y2xlYW51cChtX2NvbnRleHQpOworICAgIGlmIChtX3RpbGVQcm9ncmFtU3dpenpsZU9wYXF1ZSkK
KyAgICAgICAgbV90aWxlUHJvZ3JhbVN3aXp6bGVPcGFxdWUtPmNsZWFudXAobV9jb250ZXh0KTsK
KyAgICBpZiAobV90aWxlUHJvZ3JhbUFBKQorICAgICAgICBtX3RpbGVQcm9ncmFtQUEtPmNsZWFu
dXAobV9jb250ZXh0KTsKKyAgICBpZiAobV90aWxlUHJvZ3JhbVN3aXp6bGVBQSkKKyAgICAgICAg
bV90aWxlUHJvZ3JhbVN3aXp6bGVBQS0+Y2xlYW51cChtX2NvbnRleHQpOworICAgIGlmIChtX3Rp
bGVDaGVja2VyYm9hcmRQcm9ncmFtKQorICAgICAgICBtX3RpbGVDaGVja2VyYm9hcmRQcm9ncmFt
LT5jbGVhbnVwKG1fY29udGV4dCk7CisKKyAgICBpZiAobV9yZW5kZXJQYXNzTWFza1Byb2dyYW0p
CisgICAgICAgIG1fcmVuZGVyUGFzc01hc2tQcm9ncmFtLT5jbGVhbnVwKG1fY29udGV4dCk7Cisg
ICAgaWYgKG1fcmVuZGVyUGFzc1Byb2dyYW0pCisgICAgICAgIG1fcmVuZGVyUGFzc1Byb2dyYW0t
PmNsZWFudXAobV9jb250ZXh0KTsKKyAgICBpZiAobV9yZW5kZXJQYXNzTWFza1Byb2dyYW1BQSkK
KyAgICAgICAgbV9yZW5kZXJQYXNzTWFza1Byb2dyYW1BQS0+Y2xlYW51cChtX2NvbnRleHQpOwor
ICAgIGlmIChtX3JlbmRlclBhc3NQcm9ncmFtQUEpCisgICAgICAgIG1fcmVuZGVyUGFzc1Byb2dy
YW1BQS0+Y2xlYW51cChtX2NvbnRleHQpOworCisgICAgaWYgKG1fdGV4dHVyZVByb2dyYW0pCisg
ICAgICAgIG1fdGV4dHVyZVByb2dyYW0tPmNsZWFudXAobV9jb250ZXh0KTsKKyAgICBpZiAobV90
ZXh0dXJlUHJvZ3JhbUZsaXApCisgICAgICAgIG1fdGV4dHVyZVByb2dyYW1GbGlwLT5jbGVhbnVw
KG1fY29udGV4dCk7CisgICAgaWYgKG1fdGV4dHVyZUlPU3VyZmFjZVByb2dyYW0pCisgICAgICAg
IG1fdGV4dHVyZUlPU3VyZmFjZVByb2dyYW0tPmNsZWFudXAobV9jb250ZXh0KTsKKworICAgIGlm
IChtX3ZpZGVvWVVWUHJvZ3JhbSkKKyAgICAgICAgbV92aWRlb1lVVlByb2dyYW0tPmNsZWFudXAo
bV9jb250ZXh0KTsKKyAgICBpZiAobV92aWRlb1N0cmVhbVRleHR1cmVQcm9ncmFtKQorICAgICAg
ICBtX3ZpZGVvU3RyZWFtVGV4dHVyZVByb2dyYW0tPmNsZWFudXAobV9jb250ZXh0KTsKKworICAg
IGlmIChtX3NvbGlkQ29sb3JQcm9ncmFtKQorICAgICAgICBtX3NvbGlkQ29sb3JQcm9ncmFtLT5j
bGVhbnVwKG1fY29udGV4dCk7CisKKyAgICBpZiAobV9vZmZzY3JlZW5GcmFtZWJ1ZmZlcklkKQor
ICAgICAgICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQtPmRlbGV0ZUZyYW1lYnVmZmVyKG1fb2Zm
c2NyZWVuRnJhbWVidWZmZXJJZCkpOworCisgICAgbV90ZXh0dXJlQ29waWVyLmNsZWFyKCk7Cisg
ICAgbV90ZXh0dXJlVXBsb2FkZXIuY2xlYXIoKTsKKworICAgIHJlbGVhc2VSZW5kZXJQYXNzVGV4
dHVyZXMoKTsKK30KKworYm9vbCBDQ1JlbmRlcmVyR0w6OmlzQ29udGV4dExvc3QoKQoreworICAg
IHJldHVybiAobV9jb250ZXh0LT5nZXRHcmFwaGljc1Jlc2V0U3RhdHVzQVJCKCkgIT0gR3JhcGhp
Y3NDb250ZXh0M0Q6Ok5PX0VSUk9SKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisj
ZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJlckdMLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlcmVyR0wu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi44MzI1MDMzNTJjOWE5OGI0MTFjZDM3YTFlNDRlMThjYjc1YjNkNDg5Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NSZW5kZXJlckdMLmgKQEAgLTAsMCArMSwyNzEgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgor
ICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9m
IGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisKKyNpZm5kZWYgQ0NSZW5kZXJl
ckdMX2gKKyNkZWZpbmUgQ0NSZW5kZXJlckdMX2gKKworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01Q
T1NJVElORykKKworI2luY2x1ZGUgIkNDQ2hlY2tlcmJvYXJkRHJhd1F1YWQuaCIKKyNpbmNsdWRl
ICJDQ0RlYnVnQm9yZGVyRHJhd1F1YWQuaCIKKyNpbmNsdWRlICJDQ0RpcmVjdFJlbmRlcmVyLmgi
CisjaW5jbHVkZSAiQ0NJT1N1cmZhY2VEcmF3UXVhZC5oIgorI2luY2x1ZGUgIkNDUmVuZGVyUGFz
c0RyYXdRdWFkLmgiCisjaW5jbHVkZSAiQ0NSZW5kZXJlci5oIgorI2luY2x1ZGUgIkNDU29saWRD
b2xvckRyYXdRdWFkLmgiCisjaW5jbHVkZSAiQ0NTdHJlYW1WaWRlb0RyYXdRdWFkLmgiCisjaW5j
bHVkZSAiQ0NUZXh0dXJlRHJhd1F1YWQuaCIKKyNpbmNsdWRlICJDQ1RpbGVEcmF3UXVhZC5oIgor
I2luY2x1ZGUgIkNDWVVWVmlkZW9EcmF3UXVhZC5oIgorI2luY2x1ZGUgIkV4dGVuc2lvbnMzRENo
cm9taXVtLmgiCisjaW5jbHVkZSAiVGV4dHVyZUNvcGllci5oIgorI2luY2x1ZGUgPHd0Zi9QYXNz
T3duUHRyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworY2xhc3MgV2ViR3JhcGhpY3NDb250ZXh0
M0Q7Cit9CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ0NTY29wZWRUZXh0dXJlOwor
Y2xhc3MgR2VvbWV0cnlCaW5kaW5nOworY2xhc3MgU2NvcGVkRW5zdXJlRnJhbWVidWZmZXJBbGxv
Y2F0aW9uOworCisvLyBDbGFzcyB0aGF0IGhhbmRsZXMgZHJhd2luZyBvZiBjb21wb3NpdGVkIHJl
bmRlciBsYXllcnMgdXNpbmcgR0wuCitjbGFzcyBDQ1JlbmRlcmVyR0wgOiBwdWJsaWMgQ0NEaXJl
Y3RSZW5kZXJlciwKKyAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBXZWJLaXQ6OldlYkdyYXBo
aWNzQ29udGV4dDNEOjpXZWJHcmFwaGljc1N3YXBCdWZmZXJzQ29tcGxldGVDYWxsYmFja0NIUk9N
SVVNLAorICAgICAgICAgICAgICAgICAgICAgcHVibGljIFdlYktpdDo6V2ViR3JhcGhpY3NDb250
ZXh0M0Q6OldlYkdyYXBoaWNzTWVtb3J5QWxsb2NhdGlvbkNoYW5nZWRDYWxsYmFja0NIUk9NSVVN
ICwKKyAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4
dDNEOjpXZWJHcmFwaGljc0NvbnRleHRMb3N0Q2FsbGJhY2sgeworICAgIFdURl9NQUtFX05PTkNP
UFlBQkxFKENDUmVuZGVyZXJHTCk7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8Q0NS
ZW5kZXJlckdMPiBjcmVhdGUoQ0NSZW5kZXJlckNsaWVudCosIENDUmVzb3VyY2VQcm92aWRlcios
IFRleHR1cmVVcGxvYWRlck9wdGlvbik7CisKKyAgICB2aXJ0dWFsIH5DQ1JlbmRlcmVyR0woKTsK
KworICAgIHZpcnR1YWwgY29uc3QgUmVuZGVyZXJDYXBhYmlsaXRpZXMmIGNhcGFiaWxpdGllcygp
IGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIG1fY2FwYWJpbGl0aWVzOyB9CisKKyAgICBXZWJLaXQ6
OldlYkdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgdmll
d3BvcnRDaGFuZ2VkKCkgT1ZFUlJJREU7CisKKyAgICBjb25zdCBGbG9hdFF1YWQmIHNoYXJlZEdl
b21ldHJ5UXVhZCgpIGNvbnN0IHsgcmV0dXJuIG1fc2hhcmVkR2VvbWV0cnlRdWFkOyB9CisKKyAg
ICAvLyB3YWl0cyBmb3IgcmVuZGVyaW5nIHRvIGZpbmlzaAorICAgIHZpcnR1YWwgdm9pZCBmaW5p
c2goKSBPVkVSUklERTsKKworICAgIHZpcnR1YWwgdm9pZCBkb05vT3AoKSBPVkVSUklERTsKKyAg
ICAvLyBwdXRzIGJhY2tidWZmZXIgb25zY3JlZW4KKyAgICB2aXJ0dWFsIGJvb2wgc3dhcEJ1ZmZl
cnMoKSBPVkVSUklERTsKKworICAgIHN0YXRpYyB2b2lkIGRlYnVnR0xDYWxsKFdlYktpdDo6V2Vi
R3JhcGhpY3NDb250ZXh0M0QqLCBjb25zdCBjaGFyKiBjb21tYW5kLCBjb25zdCBjaGFyKiBmaWxl
LCBpbnQgbGluZSk7CisKKyAgICBjb25zdCBHZW9tZXRyeUJpbmRpbmcqIHNoYXJlZEdlb21ldHJ5
KCkgY29uc3QgeyByZXR1cm4gbV9zaGFyZWRHZW9tZXRyeS5nZXQoKTsgfQorCisgICAgdmlydHVh
bCB2b2lkIGdldEZyYW1lYnVmZmVyUGl4ZWxzKHZvaWQgKnBpeGVscywgY29uc3QgSW50UmVjdCYp
IE9WRVJSSURFOworICAgIGJvb2wgZ2V0RnJhbWVidWZmZXJUZXh0dXJlKENDU2NvcGVkVGV4dHVy
ZSosIGNvbnN0IEludFJlY3QmIGRldmljZVJlY3QpOworCisgICAgdmlydHVhbCBUZXh0dXJlQ29w
aWVyKiB0ZXh0dXJlQ29waWVyKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gbV90ZXh0dXJlQ29w
aWVyLmdldCgpOyB9CisgICAgdmlydHVhbCBUZXh0dXJlVXBsb2FkZXIqIHRleHR1cmVVcGxvYWRl
cigpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIG1fdGV4dHVyZVVwbG9hZGVyLmdldCgpOyB9CisK
KyAgICB2aXJ0dWFsIGJvb2wgaXNDb250ZXh0TG9zdCgpIE9WRVJSSURFOworCisgICAgdmlydHVh
bCB2b2lkIHNldFZpc2libGUoYm9vbCkgT1ZFUlJJREU7CisKK3Byb3RlY3RlZDoKKyAgICBDQ1Jl
bmRlcmVyR0woQ0NSZW5kZXJlckNsaWVudCosIENDUmVzb3VyY2VQcm92aWRlciosIFRleHR1cmVV
cGxvYWRlck9wdGlvbik7CisKKyAgICBib29sIGlzRnJhbWVidWZmZXJEaXNjYXJkZWQoKSBjb25z
dCB7IHJldHVybiBtX2lzRnJhbWVidWZmZXJEaXNjYXJkZWQ7IH0KKyAgICBib29sIGluaXRpYWxp
emUoKTsKKworICAgIHZvaWQgcmVsZWFzZVJlbmRlclBhc3NUZXh0dXJlcygpOworCisgICAgdmly
dHVhbCB2b2lkIGJpbmRGcmFtZWJ1ZmZlclRvT3V0cHV0U3VyZmFjZShEcmF3aW5nRnJhbWUmKSBP
VkVSUklERTsKKyAgICB2aXJ0dWFsIGJvb2wgYmluZEZyYW1lYnVmZmVyVG9UZXh0dXJlKERyYXdp
bmdGcmFtZSYsIGNvbnN0IENDU2NvcGVkVGV4dHVyZSosIGNvbnN0IEludFJlY3QmIGZyYW1lYnVm
ZmVyUmVjdCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHNldERyYXdWaWV3cG9ydFNpemUo
Y29uc3QgSW50U2l6ZSYpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBlbmFibGVTY2lzc29y
VGVzdFJlY3QoY29uc3QgSW50UmVjdCYgc2Npc3NvclJlY3QpIE9WRVJSSURFOworICAgIHZpcnR1
YWwgdm9pZCBkaXNhYmxlU2Npc3NvclRlc3QoKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQg
Y2xlYXJGcmFtZWJ1ZmZlcihEcmF3aW5nRnJhbWUmKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZv
aWQgZHJhd1F1YWQoRHJhd2luZ0ZyYW1lJiwgY29uc3QgQ0NEcmF3UXVhZCopIE9WRVJSSURFOwor
ICAgIHZpcnR1YWwgdm9pZCBiZWdpbkRyYXdpbmdGcmFtZShEcmF3aW5nRnJhbWUmKSBPVkVSUklE
RTsKKyAgICB2aXJ0dWFsIHZvaWQgZmluaXNoRHJhd2luZ0ZyYW1lKERyYXdpbmdGcmFtZSYpIE9W
RVJSSURFOworCitwcml2YXRlOgorICAgIHN0YXRpYyB2b2lkIHRvR0xNYXRyaXgoZmxvYXQqLCBj
b25zdCBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4Jik7CisKKyAgICB2b2lkIGRyYXdD
aGVja2VyYm9hcmRRdWFkKGNvbnN0IERyYXdpbmdGcmFtZSYsIGNvbnN0IENDQ2hlY2tlcmJvYXJk
RHJhd1F1YWQqKTsKKyAgICB2b2lkIGRyYXdEZWJ1Z0JvcmRlclF1YWQoY29uc3QgRHJhd2luZ0Zy
YW1lJiwgY29uc3QgQ0NEZWJ1Z0JvcmRlckRyYXdRdWFkKik7CisgICAgUGFzc093blB0cjxDQ1Nj
b3BlZFRleHR1cmU+IGRyYXdCYWNrZ3JvdW5kRmlsdGVycyhEcmF3aW5nRnJhbWUmLCBjb25zdCBD
Q1JlbmRlclBhc3NEcmF3UXVhZCosIGNvbnN0IFdlYktpdDo6V2ViRmlsdGVyT3BlcmF0aW9ucyYs
IGNvbnN0IFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIGRldmljZVRyYW5zZm9ybSk7
CisgICAgdm9pZCBkcmF3UmVuZGVyUGFzc1F1YWQoRHJhd2luZ0ZyYW1lJiwgY29uc3QgQ0NSZW5k
ZXJQYXNzRHJhd1F1YWQqKTsKKyAgICB2b2lkIGRyYXdTb2xpZENvbG9yUXVhZChjb25zdCBEcmF3
aW5nRnJhbWUmLCBjb25zdCBDQ1NvbGlkQ29sb3JEcmF3UXVhZCopOworICAgIHZvaWQgZHJhd1N0
cmVhbVZpZGVvUXVhZChjb25zdCBEcmF3aW5nRnJhbWUmLCBjb25zdCBDQ1N0cmVhbVZpZGVvRHJh
d1F1YWQqKTsKKyAgICB2b2lkIGRyYXdUZXh0dXJlUXVhZChjb25zdCBEcmF3aW5nRnJhbWUmLCBj
b25zdCBDQ1RleHR1cmVEcmF3UXVhZCopOworICAgIHZvaWQgZHJhd0lPU3VyZmFjZVF1YWQoY29u
c3QgRHJhd2luZ0ZyYW1lJiwgY29uc3QgQ0NJT1N1cmZhY2VEcmF3UXVhZCopOworICAgIHZvaWQg
ZHJhd1RpbGVRdWFkKGNvbnN0IERyYXdpbmdGcmFtZSYsIGNvbnN0IENDVGlsZURyYXdRdWFkKik7
CisgICAgdm9pZCBkcmF3WVVWVmlkZW9RdWFkKGNvbnN0IERyYXdpbmdGcmFtZSYsIGNvbnN0IEND
WVVWVmlkZW9EcmF3UXVhZCopOworCisgICAgdm9pZCBzZXRTaGFkZXJPcGFjaXR5KGZsb2F0IG9w
YWNpdHksIGludCBhbHBoYUxvY2F0aW9uKTsKKyAgICB2b2lkIHNldFNoYWRlckZsb2F0UXVhZChj
b25zdCBGbG9hdFF1YWQmLCBpbnQgcXVhZExvY2F0aW9uKTsKKyAgICB2b2lkIGRyYXdRdWFkR2Vv
bWV0cnkoY29uc3QgRHJhd2luZ0ZyYW1lJiwgY29uc3QgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlv
bk1hdHJpeCYgZHJhd1RyYW5zZm9ybSwgY29uc3QgRmxvYXRSZWN0JiBxdWFkUmVjdCwgaW50IG1h
dHJpeExvY2F0aW9uKTsKKworICAgIHZvaWQgY29weVRleHR1cmVUb0ZyYW1lYnVmZmVyKGNvbnN0
IERyYXdpbmdGcmFtZSYsIGludCB0ZXh0dXJlSWQsIGNvbnN0IEludFJlY3QmLCBjb25zdCBXZWJL
aXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiBkcmF3TWF0cml4KTsKKworICAgIGJvb2wgdXNl
U2NvcGVkVGV4dHVyZShEcmF3aW5nRnJhbWUmLCBjb25zdCBDQ1Njb3BlZFRleHR1cmUqLCBjb25z
dCBJbnRSZWN0JiB2aWV3cG9ydFJlY3QpOworCisgICAgYm9vbCBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKKworICAgIGJvb2wgaW5pdGlhbGl6ZVNoYXJlZE9iamVjdHMoKTsKKyAgICB2b2lkIGNsZWFu
dXBTaGFyZWRPYmplY3RzKCk7CisKKyAgICAvLyBXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNE
OjpXZWJHcmFwaGljc1N3YXBCdWZmZXJzQ29tcGxldGVDYWxsYmFja0NIUk9NSVVNIGltcGxlbWVu
dGF0aW9uLgorICAgIHZpcnR1YWwgdm9pZCBvblN3YXBCdWZmZXJzQ29tcGxldGUoKSBPVkVSUklE
RTsKKworICAgIC8vIFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0Q6OldlYkdyYXBoaWNzTWVt
b3J5QWxsb2NhdGlvbkNoYW5nZWRDYWxsYmFja0NIUk9NSVVNIGltcGxlbWVudGF0aW9uLgorICAg
IHZpcnR1YWwgdm9pZCBvbk1lbW9yeUFsbG9jYXRpb25DaGFuZ2VkKFdlYktpdDo6V2ViR3JhcGhp
Y3NNZW1vcnlBbGxvY2F0aW9uKSBPVkVSUklERTsKKyAgICB2b2lkIG9uTWVtb3J5QWxsb2NhdGlv
bkNoYW5nZWRPbkltcGxUaHJlYWQoV2ViS2l0OjpXZWJHcmFwaGljc01lbW9yeUFsbG9jYXRpb24p
OworICAgIHZvaWQgZGlzY2FyZEZyYW1lYnVmZmVyKCk7CisgICAgdm9pZCBlbnN1cmVGcmFtZWJ1
ZmZlcigpOworCisgICAgLy8gV2ViR3JhcGhpY3NDb250ZXh0M0Q6OldlYkdyYXBoaWNzQ29udGV4
dExvc3RDYWxsYmFjayBpbXBsZW1lbnRhdGlvbi4KKyAgICB2aXJ0dWFsIHZvaWQgb25Db250ZXh0
TG9zdCgpIE9WRVJSSURFOworCisgICAgUmVuZGVyZXJDYXBhYmlsaXRpZXMgbV9jYXBhYmlsaXRp
ZXM7CisKKyAgICB1bnNpZ25lZCBtX29mZnNjcmVlbkZyYW1lYnVmZmVySWQ7CisKKyAgICBPd25Q
dHI8R2VvbWV0cnlCaW5kaW5nPiBtX3NoYXJlZEdlb21ldHJ5OworICAgIEZsb2F0UXVhZCBtX3No
YXJlZEdlb21ldHJ5UXVhZDsKKworICAgIC8vIFRoaXMgYmxvY2sgb2YgYmluZGluZ3MgZGVmaW5l
cyBhbGwgb2YgdGhlIHByb2dyYW1zIHVzZWQgYnkgdGhlIGNvbXBvc2l0b3IgaXRzZWxmLgorCisg
ICAgLy8gVGlsZWQgbGF5ZXIgc2hhZGVycy4KKyAgICB0eXBlZGVmIFByb2dyYW1CaW5kaW5nPFZl
cnRleFNoYWRlclRpbGUsIEZyYWdtZW50U2hhZGVyUkdCQVRleEFscGhhPiBUaWxlUHJvZ3JhbTsK
KyAgICB0eXBlZGVmIFByb2dyYW1CaW5kaW5nPFZlcnRleFNoYWRlclRpbGUsIEZyYWdtZW50U2hh
ZGVyUkdCQVRleENsYW1wQWxwaGFBQT4gVGlsZVByb2dyYW1BQTsKKyAgICB0eXBlZGVmIFByb2dy
YW1CaW5kaW5nPFZlcnRleFNoYWRlclRpbGUsIEZyYWdtZW50U2hhZGVyUkdCQVRleENsYW1wU3dp
enpsZUFscGhhQUE+IFRpbGVQcm9ncmFtU3dpenpsZUFBOworICAgIHR5cGVkZWYgUHJvZ3JhbUJp
bmRpbmc8VmVydGV4U2hhZGVyVGlsZSwgRnJhZ21lbnRTaGFkZXJSR0JBVGV4T3BhcXVlPiBUaWxl
UHJvZ3JhbU9wYXF1ZTsKKyAgICB0eXBlZGVmIFByb2dyYW1CaW5kaW5nPFZlcnRleFNoYWRlclRp
bGUsIEZyYWdtZW50U2hhZGVyUkdCQVRleFN3aXp6bGVBbHBoYT4gVGlsZVByb2dyYW1Td2l6emxl
OworICAgIHR5cGVkZWYgUHJvZ3JhbUJpbmRpbmc8VmVydGV4U2hhZGVyVGlsZSwgRnJhZ21lbnRT
aGFkZXJSR0JBVGV4U3dpenpsZU9wYXF1ZT4gVGlsZVByb2dyYW1Td2l6emxlT3BhcXVlOworICAg
IHR5cGVkZWYgUHJvZ3JhbUJpbmRpbmc8VmVydGV4U2hhZGVyUG9zVGV4LCBGcmFnbWVudFNoYWRl
ckNoZWNrZXJib2FyZD4gVGlsZUNoZWNrZXJib2FyZFByb2dyYW07CisKKyAgICAvLyBSZW5kZXIg
c3VyZmFjZSBzaGFkZXJzLgorICAgIHR5cGVkZWYgUHJvZ3JhbUJpbmRpbmc8VmVydGV4U2hhZGVy
UG9zVGV4LCBGcmFnbWVudFNoYWRlclJHQkFUZXhBbHBoYT4gUmVuZGVyUGFzc1Byb2dyYW07Cisg
ICAgdHlwZWRlZiBQcm9ncmFtQmluZGluZzxWZXJ0ZXhTaGFkZXJQb3NUZXgsIEZyYWdtZW50U2hh
ZGVyUkdCQVRleEFscGhhTWFzaz4gUmVuZGVyUGFzc01hc2tQcm9ncmFtOworICAgIHR5cGVkZWYg
UHJvZ3JhbUJpbmRpbmc8VmVydGV4U2hhZGVyUXVhZCwgRnJhZ21lbnRTaGFkZXJSR0JBVGV4QWxw
aGFBQT4gUmVuZGVyUGFzc1Byb2dyYW1BQTsKKyAgICB0eXBlZGVmIFByb2dyYW1CaW5kaW5nPFZl
cnRleFNoYWRlclF1YWQsIEZyYWdtZW50U2hhZGVyUkdCQVRleEFscGhhTWFza0FBPiBSZW5kZXJQ
YXNzTWFza1Byb2dyYW1BQTsKKworICAgIC8vIFRleHR1cmUgc2hhZGVycy4KKyAgICB0eXBlZGVm
IFByb2dyYW1CaW5kaW5nPFZlcnRleFNoYWRlclBvc1RleFRyYW5zZm9ybSwgRnJhZ21lbnRTaGFk
ZXJSR0JBVGV4QWxwaGE+IFRleHR1cmVQcm9ncmFtOworICAgIHR5cGVkZWYgUHJvZ3JhbUJpbmRp
bmc8VmVydGV4U2hhZGVyUG9zVGV4VHJhbnNmb3JtLCBGcmFnbWVudFNoYWRlclJHQkFUZXhGbGlw
QWxwaGE+IFRleHR1cmVQcm9ncmFtRmxpcDsKKyAgICB0eXBlZGVmIFByb2dyYW1CaW5kaW5nPFZl
cnRleFNoYWRlclBvc1RleFRyYW5zZm9ybSwgRnJhZ21lbnRTaGFkZXJSR0JBVGV4UmVjdEFscGhh
PiBUZXh0dXJlSU9TdXJmYWNlUHJvZ3JhbTsKKworICAgIC8vIFZpZGVvIHNoYWRlcnMuCisgICAg
dHlwZWRlZiBQcm9ncmFtQmluZGluZzxWZXJ0ZXhTaGFkZXJWaWRlb1RyYW5zZm9ybSwgRnJhZ21l
bnRTaGFkZXJPRVNJbWFnZUV4dGVybmFsPiBWaWRlb1N0cmVhbVRleHR1cmVQcm9ncmFtOworICAg
IHR5cGVkZWYgUHJvZ3JhbUJpbmRpbmc8VmVydGV4U2hhZGVyUG9zVGV4WVVWU3RyZXRjaCwgRnJh
Z21lbnRTaGFkZXJZVVZWaWRlbz4gVmlkZW9ZVVZQcm9ncmFtOworCisgICAgLy8gU3BlY2lhbCBw
dXJwb3NlIC8gZWZmZWN0cyBzaGFkZXJzLgorICAgIHR5cGVkZWYgUHJvZ3JhbUJpbmRpbmc8VmVy
dGV4U2hhZGVyUG9zLCBGcmFnbWVudFNoYWRlckNvbG9yPiBTb2xpZENvbG9yUHJvZ3JhbTsKKwor
ICAgIGNvbnN0IFRpbGVQcm9ncmFtKiB0aWxlUHJvZ3JhbSgpOworICAgIGNvbnN0IFRpbGVQcm9n
cmFtT3BhcXVlKiB0aWxlUHJvZ3JhbU9wYXF1ZSgpOworICAgIGNvbnN0IFRpbGVQcm9ncmFtQUEq
IHRpbGVQcm9ncmFtQUEoKTsKKyAgICBjb25zdCBUaWxlUHJvZ3JhbVN3aXp6bGUqIHRpbGVQcm9n
cmFtU3dpenpsZSgpOworICAgIGNvbnN0IFRpbGVQcm9ncmFtU3dpenpsZU9wYXF1ZSogdGlsZVBy
b2dyYW1Td2l6emxlT3BhcXVlKCk7CisgICAgY29uc3QgVGlsZVByb2dyYW1Td2l6emxlQUEqIHRp
bGVQcm9ncmFtU3dpenpsZUFBKCk7CisgICAgY29uc3QgVGlsZUNoZWNrZXJib2FyZFByb2dyYW0q
IHRpbGVDaGVja2VyYm9hcmRQcm9ncmFtKCk7CisKKyAgICBjb25zdCBSZW5kZXJQYXNzUHJvZ3Jh
bSogcmVuZGVyUGFzc1Byb2dyYW0oKTsKKyAgICBjb25zdCBSZW5kZXJQYXNzUHJvZ3JhbUFBKiBy
ZW5kZXJQYXNzUHJvZ3JhbUFBKCk7CisgICAgY29uc3QgUmVuZGVyUGFzc01hc2tQcm9ncmFtKiBy
ZW5kZXJQYXNzTWFza1Byb2dyYW0oKTsKKyAgICBjb25zdCBSZW5kZXJQYXNzTWFza1Byb2dyYW1B
QSogcmVuZGVyUGFzc01hc2tQcm9ncmFtQUEoKTsKKworICAgIGNvbnN0IFRleHR1cmVQcm9ncmFt
KiB0ZXh0dXJlUHJvZ3JhbSgpOworICAgIGNvbnN0IFRleHR1cmVQcm9ncmFtRmxpcCogdGV4dHVy
ZVByb2dyYW1GbGlwKCk7CisgICAgY29uc3QgVGV4dHVyZUlPU3VyZmFjZVByb2dyYW0qIHRleHR1
cmVJT1N1cmZhY2VQcm9ncmFtKCk7CisKKyAgICBjb25zdCBWaWRlb1lVVlByb2dyYW0qIHZpZGVv
WVVWUHJvZ3JhbSgpOworICAgIGNvbnN0IFZpZGVvU3RyZWFtVGV4dHVyZVByb2dyYW0qIHZpZGVv
U3RyZWFtVGV4dHVyZVByb2dyYW0oKTsKKworICAgIGNvbnN0IFNvbGlkQ29sb3JQcm9ncmFtKiBz
b2xpZENvbG9yUHJvZ3JhbSgpOworCisgICAgT3duUHRyPFRpbGVQcm9ncmFtPiBtX3RpbGVQcm9n
cmFtOworICAgIE93blB0cjxUaWxlUHJvZ3JhbU9wYXF1ZT4gbV90aWxlUHJvZ3JhbU9wYXF1ZTsK
KyAgICBPd25QdHI8VGlsZVByb2dyYW1BQT4gbV90aWxlUHJvZ3JhbUFBOworICAgIE93blB0cjxU
aWxlUHJvZ3JhbVN3aXp6bGU+IG1fdGlsZVByb2dyYW1Td2l6emxlOworICAgIE93blB0cjxUaWxl
UHJvZ3JhbVN3aXp6bGVPcGFxdWU+IG1fdGlsZVByb2dyYW1Td2l6emxlT3BhcXVlOworICAgIE93
blB0cjxUaWxlUHJvZ3JhbVN3aXp6bGVBQT4gbV90aWxlUHJvZ3JhbVN3aXp6bGVBQTsKKyAgICBP
d25QdHI8VGlsZUNoZWNrZXJib2FyZFByb2dyYW0+IG1fdGlsZUNoZWNrZXJib2FyZFByb2dyYW07
CisKKyAgICBPd25QdHI8UmVuZGVyUGFzc1Byb2dyYW0+IG1fcmVuZGVyUGFzc1Byb2dyYW07Cisg
ICAgT3duUHRyPFJlbmRlclBhc3NQcm9ncmFtQUE+IG1fcmVuZGVyUGFzc1Byb2dyYW1BQTsKKyAg
ICBPd25QdHI8UmVuZGVyUGFzc01hc2tQcm9ncmFtPiBtX3JlbmRlclBhc3NNYXNrUHJvZ3JhbTsK
KyAgICBPd25QdHI8UmVuZGVyUGFzc01hc2tQcm9ncmFtQUE+IG1fcmVuZGVyUGFzc01hc2tQcm9n
cmFtQUE7CisKKyAgICBPd25QdHI8VGV4dHVyZVByb2dyYW0+IG1fdGV4dHVyZVByb2dyYW07Cisg
ICAgT3duUHRyPFRleHR1cmVQcm9ncmFtRmxpcD4gbV90ZXh0dXJlUHJvZ3JhbUZsaXA7CisgICAg
T3duUHRyPFRleHR1cmVJT1N1cmZhY2VQcm9ncmFtPiBtX3RleHR1cmVJT1N1cmZhY2VQcm9ncmFt
OworCisgICAgT3duUHRyPFZpZGVvWVVWUHJvZ3JhbT4gbV92aWRlb1lVVlByb2dyYW07CisgICAg
T3duUHRyPFZpZGVvU3RyZWFtVGV4dHVyZVByb2dyYW0+IG1fdmlkZW9TdHJlYW1UZXh0dXJlUHJv
Z3JhbTsKKworICAgIE93blB0cjxTb2xpZENvbG9yUHJvZ3JhbT4gbV9zb2xpZENvbG9yUHJvZ3Jh
bTsKKworICAgIE93blB0cjxBY2NlbGVyYXRlZFRleHR1cmVDb3BpZXI+IG1fdGV4dHVyZUNvcGll
cjsKKyAgICBPd25QdHI8VGV4dHVyZVVwbG9hZGVyPiBtX3RleHR1cmVVcGxvYWRlcjsKKworICAg
IFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0QqIG1fY29udGV4dDsKKworICAgIEludFJlY3Qg
bV9zd2FwQnVmZmVyUmVjdDsKKyAgICBib29sIG1faXNWaWV3cG9ydENoYW5nZWQ7CisgICAgYm9v
bCBtX2lzRnJhbWVidWZmZXJEaXNjYXJkZWQ7CisgICAgYm9vbCBtX2lzVXNpbmdCaW5kVW5pZm9y
bTsKKyAgICBib29sIG1fdmlzaWJsZTsKKyAgICBUZXh0dXJlVXBsb2FkZXJPcHRpb24gbV90ZXh0
dXJlVXBsb2FkZXJTZXR0aW5nOworCisgICAgT3duUHRyPENDUmVzb3VyY2VQcm92aWRlcjo6U2Nv
cGVkV3JpdGVMb2NrR0w+IG1fY3VycmVudEZyYW1lYnVmZmVyTG9jazsKK307CisKKworLy8gU2V0
dGluZyBERUJVR19HTF9DQUxMUyB0byAxIHdpbGwgY2FsbCBnbEdldEVycm9yKCkgYWZ0ZXIgYWxt
b3N0IGV2ZXJ5IEdMCisvLyBjYWxsIG1hZGUgYnkgdGhlIGNvbXBvc2l0b3IuIFVzZWZ1bCBmb3Ig
ZGVidWdnaW5nIHJlbmRlcmluZyBpc3N1ZXMgYnV0CisvLyB3aWxsIHNpZ25pZmljYW50bHkgZGVn
cmFkZSBwZXJmb3JtYW5jZS4KKyNkZWZpbmUgREVCVUdfR0xfQ0FMTFMgMAorCisjaWYgREVCVUdf
R0xfQ0FMTFMgJiYgIWRlZmluZWQgKCBOREVCVUcgKQorI2RlZmluZSBHTEMoY29udGV4dCwgeCkg
KHgsIENDUmVuZGVyZXJHTDo6ZGVidWdHTENhbGwoJipjb250ZXh0LCAjeCwgX19GSUxFX18sIF9f
TElORV9fKSkKKyNlbHNlCisjZGVmaW5lIEdMQyhjb250ZXh0LCB4KSAoeCkKKyNlbmRpZgorCisK
K30KKworI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKworI2VuZGlmCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q1Jlc291cmNlUHJvdmlkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NSZXNvdXJjZVByb3ZpZGVyLmNwcAppbmRleCBmYjM2YjRjYWVkZDFmN2Zl
YTliY2ExMGFmOWQ4OWMyOTZhZjM3YjZmLi4zYWFkMTQ3Y2E2NDQ3MzdkNGUyZmNmZDkzYWVjNzgx
MmUyZTIwMWY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ1Jlc291cmNlUHJvdmlkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVzb3VyY2VQcm92aWRlci5jcHAKQEAgLTI3
LDkgKzI3LDkgQEAKICNpbmNsdWRlICJDQ1Jlc291cmNlUHJvdmlkZXIuaCIKIAogI2luY2x1ZGUg
IkNDUHJveHkuaCIKKyNpbmNsdWRlICJDQ1JlbmRlcmVyR0wuaCIgLy8gRm9yIHRoZSBHTEMoKSBt
YWNyby4KICNpbmNsdWRlICJFeHRlbnNpb25zM0RDaHJvbWl1bS5oIgogI2luY2x1ZGUgIkludFJl
Y3QuaCIKLSNpbmNsdWRlICJMYXllclJlbmRlcmVyQ2hyb21pdW0uaCIgLy8gRm9yIHRoZSBHTEMo
KSBtYWNybwogI2luY2x1ZGUgIkxheWVyVGV4dHVyZVN1YkltYWdlLmgiCiAjaW5jbHVkZSA8bGlt
aXRzLmg+CiAjaW5jbHVkZSA8cHVibGljL1dlYkdyYXBoaWNzQ29udGV4dDNELmg+CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Npbmds
ZVRocmVhZFByb3h5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHkuY3BwCmluZGV4IDg4YThmZmI4MjEzZDlhYzliODY5
ZGE5NjVlMTU0MGFkNDA2ODQzMGIuLmU4NGViMzMyNTJiYmFhY2M0ZTdkZWI0NjYzNDlkNDhlY2Qz
OGJiZmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHkuY3BwCkBAIC00Nyw3
ICs0Nyw3IEBAIENDU2luZ2xlVGhyZWFkUHJveHk6OkNDU2luZ2xlVGhyZWFkUHJveHkoQ0NMYXll
clRyZWVIb3N0KiBsYXllclRyZWVIb3N0KQogICAgIDogbV9sYXllclRyZWVIb3N0KGxheWVyVHJl
ZUhvc3QpCiAgICAgLCBtX2NvbnRleHRMb3N0KGZhbHNlKQogICAgICwgbV9jb21wb3NpdG9ySWRl
bnRpZmllcigtMSkKLSAgICAsIG1fbGF5ZXJSZW5kZXJlckluaXRpYWxpemVkKGZhbHNlKQorICAg
ICwgbV9yZW5kZXJlckluaXRpYWxpemVkKGZhbHNlKQogICAgICwgbV9uZXh0RnJhbWVJc05ld2x5
Q29tbWl0dGVkRnJhbWUoZmFsc2UpCiB7CiAgICAgVFJBQ0VfRVZFTlQwKCJjYyIsICJDQ1Npbmds
ZVRocmVhZFByb3h5OjpDQ1NpbmdsZVRocmVhZFByb3h5Iik7CkBAIC0xMjcsMTYgKzEyNywxNiBA
QCB2b2lkIENDU2luZ2xlVGhyZWFkUHJveHk6OnNldFZpc2libGUoYm9vbCB2aXNpYmxlKQogICAg
IG1fbGF5ZXJUcmVlSG9zdEltcGwtPnNldFZpc2libGUodmlzaWJsZSk7CiB9CiAKLWJvb2wgQ0NT
aW5nbGVUaHJlYWRQcm94eTo6aW5pdGlhbGl6ZUxheWVyUmVuZGVyZXIoKQorYm9vbCBDQ1Npbmds
ZVRocmVhZFByb3h5Ojppbml0aWFsaXplUmVuZGVyZXIoKQogewogICAgIEFTU0VSVChDQ1Byb3h5
Ojppc01haW5UaHJlYWQoKSk7CiAgICAgQVNTRVJUKG1fY29udGV4dEJlZm9yZUluaXRpYWxpemF0
aW9uKTsKICAgICB7CiAgICAgICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsOwotICAg
ICAgICBib29sIG9rID0gbV9sYXllclRyZWVIb3N0SW1wbC0+aW5pdGlhbGl6ZUxheWVyUmVuZGVy
ZXIobV9jb250ZXh0QmVmb3JlSW5pdGlhbGl6YXRpb24ucmVsZWFzZSgpLCBVbnRocm90dGxlZFVw
bG9hZGVyKTsKKyAgICAgICAgYm9vbCBvayA9IG1fbGF5ZXJUcmVlSG9zdEltcGwtPmluaXRpYWxp
emVSZW5kZXJlcihtX2NvbnRleHRCZWZvcmVJbml0aWFsaXphdGlvbi5yZWxlYXNlKCksIFVudGhy
b3R0bGVkVXBsb2FkZXIpOwogICAgICAgICBpZiAob2spIHsKLSAgICAgICAgICAgIG1fbGF5ZXJS
ZW5kZXJlckluaXRpYWxpemVkID0gdHJ1ZTsKLSAgICAgICAgICAgIG1fbGF5ZXJSZW5kZXJlckNh
cGFiaWxpdGllc0Zvck1haW5UaHJlYWQgPSBtX2xheWVyVHJlZUhvc3RJbXBsLT5sYXllclJlbmRl
cmVyQ2FwYWJpbGl0aWVzKCk7CisgICAgICAgICAgICBtX3JlbmRlcmVySW5pdGlhbGl6ZWQgPSB0
cnVlOworICAgICAgICAgICAgbV9SZW5kZXJlckNhcGFiaWxpdGllc0Zvck1haW5UaHJlYWQgPSBt
X2xheWVyVHJlZUhvc3RJbXBsLT5yZW5kZXJlckNhcGFiaWxpdGllcygpOwogICAgICAgICB9CiAK
ICAgICAgICAgcmV0dXJuIG9rOwpAQCAtMTU3LDkgKzE1Nyw5IEBAIGJvb2wgQ0NTaW5nbGVUaHJl
YWRQcm94eTo6cmVjcmVhdGVDb250ZXh0KCkKICAgICB7CiAgICAgICAgIERlYnVnU2NvcGVkU2V0
SW1wbFRocmVhZCBpbXBsOwogICAgICAgICBtX2xheWVyVHJlZUhvc3QtPmRlbGV0ZUNvbnRlbnRz
VGV4dHVyZXNPbkltcGxUaHJlYWQobV9sYXllclRyZWVIb3N0SW1wbC0+cmVzb3VyY2VQcm92aWRl
cigpKTsKLSAgICAgICAgaW5pdGlhbGl6ZWQgPSBtX2xheWVyVHJlZUhvc3RJbXBsLT5pbml0aWFs
aXplTGF5ZXJSZW5kZXJlcihjb250ZXh0LnJlbGVhc2UoKSwgVW50aHJvdHRsZWRVcGxvYWRlcik7
CisgICAgICAgIGluaXRpYWxpemVkID0gbV9sYXllclRyZWVIb3N0SW1wbC0+aW5pdGlhbGl6ZVJl
bmRlcmVyKGNvbnRleHQucmVsZWFzZSgpLCBVbnRocm90dGxlZFVwbG9hZGVyKTsKICAgICAgICAg
aWYgKGluaXRpYWxpemVkKSB7Ci0gICAgICAgICAgICBtX2xheWVyUmVuZGVyZXJDYXBhYmlsaXRp
ZXNGb3JNYWluVGhyZWFkID0gbV9sYXllclRyZWVIb3N0SW1wbC0+bGF5ZXJSZW5kZXJlckNhcGFi
aWxpdGllcygpOworICAgICAgICAgICAgbV9SZW5kZXJlckNhcGFiaWxpdGllc0Zvck1haW5UaHJl
YWQgPSBtX2xheWVyVHJlZUhvc3RJbXBsLT5yZW5kZXJlckNhcGFiaWxpdGllcygpOwogICAgICAg
ICB9CiAgICAgfQogCkBAIC0xNzQsMTEgKzE3NCwxMSBAQCB2b2lkIENDU2luZ2xlVGhyZWFkUHJv
eHk6OmltcGxTaWRlUmVuZGVyaW5nU3RhdHMoQ0NSZW5kZXJpbmdTdGF0cyYgc3RhdHMpCiAgICAg
bV9sYXllclRyZWVIb3N0SW1wbC0+cmVuZGVyaW5nU3RhdHMoc3RhdHMpOwogfQogCi1jb25zdCBM
YXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzJiBDQ1NpbmdsZVRocmVhZFByb3h5OjpsYXllclJlbmRl
cmVyQ2FwYWJpbGl0aWVzKCkgY29uc3QKK2NvbnN0IFJlbmRlcmVyQ2FwYWJpbGl0aWVzJiBDQ1Np
bmdsZVRocmVhZFByb3h5OjpyZW5kZXJlckNhcGFiaWxpdGllcygpIGNvbnN0CiB7Ci0gICAgQVNT
RVJUKG1fbGF5ZXJSZW5kZXJlckluaXRpYWxpemVkKTsKKyAgICBBU1NFUlQobV9yZW5kZXJlcklu
aXRpYWxpemVkKTsKICAgICAvLyBOb3RlOiB0aGlzIGdldHMgY2FsbGVkIGR1cmluZyB0aGUgY29t
bWl0IGJ5IHRoZSAiaW1wbCIgdGhyZWFkCi0gICAgcmV0dXJuIG1fbGF5ZXJSZW5kZXJlckNhcGFi
aWxpdGllc0Zvck1haW5UaHJlYWQ7CisgICAgcmV0dXJuIG1fUmVuZGVyZXJDYXBhYmlsaXRpZXNG
b3JNYWluVGhyZWFkOwogfQogCiB2b2lkIENDU2luZ2xlVGhyZWFkUHJveHk6Omxvc2VDb250ZXh0
KCkKQEAgLTIxMiw3ICsyMTIsNyBAQCB2b2lkIENDU2luZ2xlVGhyZWFkUHJveHk6OmRvQ29tbWl0
KENDVGV4dHVyZVVwZGF0ZVF1ZXVlJiBxdWV1ZSkKICAgICAgICAgLy8gc2luZ2xlIHRocmVhZCBt
b2RlLiBGb3IgY29ycmVjdG5lc3MsIGxvb3AgdW50aWwgbm8gbW9yZSB1cGRhdGVzIGFyZQogICAg
ICAgICAvLyBwZW5kaW5nLgogICAgICAgICB3aGlsZSAocXVldWUuaGFzTW9yZVVwZGF0ZXMoKSkK
LSAgICAgICAgICAgIENDVGV4dHVyZVVwZGF0ZUNvbnRyb2xsZXI6OnVwZGF0ZVRleHR1cmVzKG1f
bGF5ZXJUcmVlSG9zdEltcGwtPnJlc291cmNlUHJvdmlkZXIoKSwgbV9sYXllclRyZWVIb3N0SW1w
bC0+bGF5ZXJSZW5kZXJlcigpLT50ZXh0dXJlQ29waWVyKCksIG1fbGF5ZXJUcmVlSG9zdEltcGwt
PmxheWVyUmVuZGVyZXIoKS0+dGV4dHVyZVVwbG9hZGVyKCksICZxdWV1ZSwgbWF4UGFydGlhbFRl
eHR1cmVVcGRhdGVzKCkpOworICAgICAgICAgICAgQ0NUZXh0dXJlVXBkYXRlQ29udHJvbGxlcjo6
dXBkYXRlVGV4dHVyZXMobV9sYXllclRyZWVIb3N0SW1wbC0+cmVzb3VyY2VQcm92aWRlcigpLCBt
X2xheWVyVHJlZUhvc3RJbXBsLT5yZW5kZXJlcigpLT50ZXh0dXJlQ29waWVyKCksIG1fbGF5ZXJU
cmVlSG9zdEltcGwtPnJlbmRlcmVyKCktPnRleHR1cmVVcGxvYWRlcigpLCAmcXVldWUsIG1heFBh
cnRpYWxUZXh0dXJlVXBkYXRlcygpKTsKIAogICAgICAgICBtX2xheWVyVHJlZUhvc3QtPmZpbmlz
aENvbW1pdE9uSW1wbFRocmVhZChtX2xheWVyVHJlZUhvc3RJbXBsLmdldCgpKTsKIApAQCAtMjg3
LDggKzI4Nyw4IEBAIHZvaWQgQ0NTaW5nbGVUaHJlYWRQcm94eTo6Zm9yY2VTZXJpYWxpemVPblN3
YXBCdWZmZXJzKCkKIHsKICAgICB7CiAgICAgICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBp
bXBsOwotICAgICAgICBpZiAobV9sYXllclJlbmRlcmVySW5pdGlhbGl6ZWQpCi0gICAgICAgICAg
ICBtX2xheWVyVHJlZUhvc3RJbXBsLT5sYXllclJlbmRlcmVyKCktPmRvTm9PcCgpOworICAgICAg
ICBpZiAobV9yZW5kZXJlckluaXRpYWxpemVkKQorICAgICAgICAgICAgbV9sYXllclRyZWVIb3N0
SW1wbC0+cmVuZGVyZXIoKS0+ZG9Ob09wKCk7CiAgICAgfQogfQogCkBAIC0yOTcsNyArMjk3LDcg
QEAgYm9vbCBDQ1NpbmdsZVRocmVhZFByb3h5Ojpjb21taXRBbmRDb21wb3NpdGUoKQogICAgIEFT
U0VSVChDQ1Byb3h5Ojppc01haW5UaHJlYWQoKSk7CiAKIAotICAgIGlmICghbV9sYXllclRyZWVI
b3N0LT5pbml0aWFsaXplTGF5ZXJSZW5kZXJlcklmTmVlZGVkKCkpCisgICAgaWYgKCFtX2xheWVy
VHJlZUhvc3QtPmluaXRpYWxpemVSZW5kZXJlcklmTmVlZGVkKCkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAogICAgIGlmIChtX2xheWVyVHJlZUhvc3RJbXBsLT5jb250ZW50c1RleHR1cmVzUHVy
Z2VkKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ1NpbmdsZVRocmVhZFByb3h5LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NpbmdsZVRocmVhZFByb3h5LmgKaW5kZXggN2Y4MDQ3ODU5
ODU2YTUyYmNlM2E1ZTQzZjkxOTFhMTQ2MGEyZWNjYS4uYTczYTZhYTE3MDNjM2Q0ZTNkY2Y3Mzgz
NmVkYjRlYmExODdhODA5ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHkuaApA
QCAtNDgsMTEgKzQ4LDExIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgaW5pdGlhbGl6ZUNv
bnRleHQoKSBPVkVSUklERTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0U3VyZmFjZVJlYWR5KCkgT1ZF
UlJJREU7CiAgICAgdmlydHVhbCB2b2lkIHNldFZpc2libGUoYm9vbCkgT1ZFUlJJREU7Ci0gICAg
dmlydHVhbCBib29sIGluaXRpYWxpemVMYXllclJlbmRlcmVyKCkgT1ZFUlJJREU7CisgICAgdmly
dHVhbCBib29sIGluaXRpYWxpemVSZW5kZXJlcigpIE9WRVJSSURFOwogICAgIHZpcnR1YWwgYm9v
bCByZWNyZWF0ZUNvbnRleHQoKSBPVkVSUklERTsKICAgICB2aXJ0dWFsIGludCBjb21wb3NpdG9y
SWRlbnRpZmllcigpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIG1fY29tcG9zaXRvcklkZW50aWZp
ZXI7IH0KICAgICB2aXJ0dWFsIHZvaWQgaW1wbFNpZGVSZW5kZXJpbmdTdGF0cyhDQ1JlbmRlcmlu
Z1N0YXRzJikgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBjb25zdCBMYXllclJlbmRlcmVyQ2FwYWJp
bGl0aWVzJiBsYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzKCkgY29uc3QgT1ZFUlJJREU7CisgICAg
dmlydHVhbCBjb25zdCBSZW5kZXJlckNhcGFiaWxpdGllcyYgcmVuZGVyZXJDYXBhYmlsaXRpZXMo
KSBjb25zdCBPVkVSUklERTsKICAgICB2aXJ0dWFsIHZvaWQgbG9zZUNvbnRleHQoKSBPVkVSUklE
RTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNBbmltYXRlKCkgT1ZFUlJJREU7CiAgICAgdmly
dHVhbCB2b2lkIHNldE5lZWRzQ29tbWl0KCkgT1ZFUlJJREU7CkBAIC04OSwxNCArODksMTQgQEAg
cHJpdmF0ZToKICAgICBib29sIG1fY29udGV4dExvc3Q7CiAgICAgaW50IG1fY29tcG9zaXRvcklk
ZW50aWZpZXI7CiAKLSAgICAvLyBIb2xkcyBvbiB0byB0aGUgY29udGV4dCBiZXR3ZWVuIGluaXRp
YWxpemVDb250ZXh0KCkgYW5kIGluaXRpYWxpemVMYXllclJlbmRlcmVyKCkgY2FsbHMuIFNob3Vs
ZG4ndAorICAgIC8vIEhvbGRzIG9uIHRvIHRoZSBjb250ZXh0IGJldHdlZW4gaW5pdGlhbGl6ZUNv
bnRleHQoKSBhbmQgaW5pdGlhbGl6ZVJlbmRlcmVyKCkgY2FsbHMuIFNob3VsZG4ndAogICAgIC8v
IGJlIHVzZWQgZm9yIGFueXRoaW5nIGVsc2UuCiAgICAgT3duUHRyPENDR3JhcGhpY3NDb250ZXh0
PiBtX2NvbnRleHRCZWZvcmVJbml0aWFsaXphdGlvbjsKIAogICAgIC8vIFVzZWQgb24gdGhlIEND
VGhyZWFkLCBidXQgY2hlY2tlZCBvbiBtYWluIHRocmVhZCBkdXJpbmcgaW5pdGlhbGl6YXRpb24v
c2h1dGRvd24uCiAgICAgT3duUHRyPENDTGF5ZXJUcmVlSG9zdEltcGw+IG1fbGF5ZXJUcmVlSG9z
dEltcGw7Ci0gICAgYm9vbCBtX2xheWVyUmVuZGVyZXJJbml0aWFsaXplZDsKLSAgICBMYXllclJl
bmRlcmVyQ2FwYWJpbGl0aWVzIG1fbGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllc0Zvck1haW5UaHJl
YWQ7CisgICAgYm9vbCBtX3JlbmRlcmVySW5pdGlhbGl6ZWQ7CisgICAgUmVuZGVyZXJDYXBhYmls
aXRpZXMgbV9SZW5kZXJlckNhcGFiaWxpdGllc0Zvck1haW5UaHJlYWQ7CiAKICAgICBib29sIG1f
bmV4dEZyYW1lSXNOZXdseUNvbW1pdHRlZEZyYW1lOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU29saWRDb2xvckxheWVySW1w
bC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTb2xp
ZENvbG9yTGF5ZXJJbXBsLmgKaW5kZXggZDE5YTIzMGRjZTY5NDZkMzM4MjJhZTk5NWIzZDRjZGU1
OGViYjJkMS4uZTQzYzE5NzQ5NDY1M2VjYzY1ZWE5M2Y3MzM0ZWI5NDhmMGY0YTQxZCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTb2xp
ZENvbG9yTGF5ZXJJbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NTb2xpZENvbG9yTGF5ZXJJbXBsLmgKQEAgLTMxLDggKzMxLDYgQEAKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBMYXllclJlbmRlcmVyQ2hyb21pdW07Ci0KIGNs
YXNzIENDU29saWRDb2xvckxheWVySW1wbCA6IHB1YmxpYyBDQ0xheWVySW1wbCB7CiBwdWJsaWM6
CiAgICAgc3RhdGljIFBhc3NPd25QdHI8Q0NTb2xpZENvbG9yTGF5ZXJJbXBsPiBjcmVhdGUoaW50
IGlkKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NUaHJlYWRQcm94eS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5LmNwcAppbmRleCAyOTdiMTM1NjMyMDNhMzBmOTA1
ZDRlNTYxNDY4ZGI1MGRlMGUzYmJlLi45MDc0M2ZkM2M5MjE0OTkzMTU2MjkyMDEzNGRmNjg0MDIy
NTU0MmI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ1RocmVhZFByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5LmNwcApAQCAtNzEsNyArNzEsNyBAQCBD
Q1RocmVhZFByb3h5OjpDQ1RocmVhZFByb3h5KENDTGF5ZXJUcmVlSG9zdCogbGF5ZXJUcmVlSG9z
dCkKICAgICAsIG1fZm9yY2VkQ29tbWl0UmVxdWVzdGVkKGZhbHNlKQogICAgICwgbV9sYXllclRy
ZWVIb3N0KGxheWVyVHJlZUhvc3QpCiAgICAgLCBtX2NvbXBvc2l0b3JJZGVudGlmaWVyKC0xKQot
ICAgICwgbV9sYXllclJlbmRlcmVySW5pdGlhbGl6ZWQoZmFsc2UpCisgICAgLCBtX3JlbmRlcmVy
SW5pdGlhbGl6ZWQoZmFsc2UpCiAgICAgLCBtX3N0YXJ0ZWQoZmFsc2UpCiAgICAgLCBtX3RleHR1
cmVzQWNxdWlyZWQodHJ1ZSkKICAgICAsIG1faW5Db21wb3NpdGVBbmRSZWFkYmFjayhmYWxzZSkK
QEAgLTEwMSw3ICsxMDEsNyBAQCBib29sIENDVGhyZWFkUHJveHk6OmNvbXBvc2l0ZUFuZFJlYWRi
YWNrKHZvaWQgKnBpeGVscywgY29uc3QgSW50UmVjdCYgcmVjdCkKICAgICBBU1NFUlQoaXNNYWlu
VGhyZWFkKCkpOwogICAgIEFTU0VSVChtX2xheWVyVHJlZUhvc3QpOwogCi0gICAgaWYgKCFtX2xh
eWVyVHJlZUhvc3QtPmluaXRpYWxpemVMYXllclJlbmRlcmVySWZOZWVkZWQoKSkgeworICAgIGlm
ICghbV9sYXllclRyZWVIb3N0LT5pbml0aWFsaXplUmVuZGVyZXJJZk5lZWRlZCgpKSB7CiAgICAg
ICAgIFRSQUNFX0VWRU5UMCgiY2MiLCAiY29tcG9zaXRlQW5kUmVhZGJhY2tfRWFybHlPdXRfTFJf
VW5pbml0aWFsaXplZCIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQpAQCAtMjA4LDIz
ICsyMDgsMjMgQEAgdm9pZCBDQ1RocmVhZFByb3h5OjpzZXRWaXNpYmxlT25JbXBsVGhyZWFkKEND
Q29tcGxldGlvbkV2ZW50KiBjb21wbGV0aW9uLCBib29sIHYKICAgICBjb21wbGV0aW9uLT5zaWdu
YWwoKTsKIH0KIAotYm9vbCBDQ1RocmVhZFByb3h5Ojppbml0aWFsaXplTGF5ZXJSZW5kZXJlcigp
Citib29sIENDVGhyZWFkUHJveHk6OmluaXRpYWxpemVSZW5kZXJlcigpCiB7Ci0gICAgVFJBQ0Vf
RVZFTlQwKCJjYyIsICJDQ1RocmVhZFByb3h5Ojppbml0aWFsaXplTGF5ZXJSZW5kZXJlciIpOwot
ICAgIC8vIE1ha2UgYSBibG9ja2luZyBjYWxsIHRvIGluaXRpYWxpemVMYXllclJlbmRlcmVyT25J
bXBsVGhyZWFkLiBUaGUgcmVzdWx0cyBvZiB0aGF0IGNhbGwKKyAgICBUUkFDRV9FVkVOVDAoImNj
IiwgIkNDVGhyZWFkUHJveHk6OmluaXRpYWxpemVSZW5kZXJlciIpOworICAgIC8vIE1ha2UgYSBi
bG9ja2luZyBjYWxsIHRvIGluaXRpYWxpemVSZW5kZXJlck9uSW1wbFRocmVhZC4gVGhlIHJlc3Vs
dHMgb2YgdGhhdCBjYWxsCiAgICAgLy8gYXJlIHB1c2hlZCBpbnRvIHRoZSBpbml0aWFsaXplU3Vj
Y2VlZGVkIGFuZCBjYXBhYmlsaXRpZXMgbG9jYWwgdmFyaWFibGVzLgogICAgIENDQ29tcGxldGlv
bkV2ZW50IGNvbXBsZXRpb247CiAgICAgYm9vbCBpbml0aWFsaXplU3VjY2VlZGVkID0gZmFsc2U7
Ci0gICAgTGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcyBjYXBhYmlsaXRpZXM7Ci0gICAgQ0NQcm94
eTo6aW1wbFRocmVhZCgpLT5wb3N0VGFzayhjcmVhdGVDQ1RocmVhZFRhc2sodGhpcywgJkNDVGhy
ZWFkUHJveHk6OmluaXRpYWxpemVMYXllclJlbmRlcmVyT25JbXBsVGhyZWFkLAorICAgIFJlbmRl
cmVyQ2FwYWJpbGl0aWVzIGNhcGFiaWxpdGllczsKKyAgICBDQ1Byb3h5OjppbXBsVGhyZWFkKCkt
PnBvc3RUYXNrKGNyZWF0ZUNDVGhyZWFkVGFzayh0aGlzLCAmQ0NUaHJlYWRQcm94eTo6aW5pdGlh
bGl6ZVJlbmRlcmVyT25JbXBsVGhyZWFkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICZjb21wbGV0aW9uLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZpbml0aWFsaXplU3VjY2VlZGVk
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICZjYXBhYmlsaXRpZXMpKTsKICAgICBjb21wbGV0aW9uLndhaXQoKTsKIAogICAgIGlmIChpbml0
aWFsaXplU3VjY2VlZGVkKSB7Ci0gICAgICAgIG1fbGF5ZXJSZW5kZXJlckluaXRpYWxpemVkID0g
dHJ1ZTsKLSAgICAgICAgbV9sYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzTWFpblRocmVhZENvcHkg
PSBjYXBhYmlsaXRpZXM7CisgICAgICAgIG1fcmVuZGVyZXJJbml0aWFsaXplZCA9IHRydWU7Cisg
ICAgICAgIG1fUmVuZGVyZXJDYXBhYmlsaXRpZXNNYWluVGhyZWFkQ29weSA9IGNhcGFiaWxpdGll
czsKICAgICB9CiAgICAgcmV0dXJuIGluaXRpYWxpemVTdWNjZWVkZWQ7CiB9CkBAIC0yNDcsNyAr
MjQ3LDcgQEAgYm9vbCBDQ1RocmVhZFByb3h5OjpyZWNyZWF0ZUNvbnRleHQoKQogICAgIC8vIHZh
cmlhYmxlcy4KICAgICBDQ0NvbXBsZXRpb25FdmVudCBjb21wbGV0aW9uOwogICAgIGJvb2wgcmVj
cmVhdGVTdWNjZWVkZWQgPSBmYWxzZTsKLSAgICBMYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzIGNh
cGFiaWxpdGllczsKKyAgICBSZW5kZXJlckNhcGFiaWxpdGllcyBjYXBhYmlsaXRpZXM7CiAgICAg
Q0NQcm94eTo6aW1wbFRocmVhZCgpLT5wb3N0VGFzayhjcmVhdGVDQ1RocmVhZFRhc2sodGhpcywg
JkNDVGhyZWFkUHJveHk6OnJlY3JlYXRlQ29udGV4dE9uSW1wbFRocmVhZCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY29tcGxldGlvbiwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b250ZXh0LmxlYWtQdHIoKSwKQEAgLTI1Niw3ICsyNTYsNyBAQCBib29sIENDVGhyZWFkUHJveHk6
OnJlY3JlYXRlQ29udGV4dCgpCiAgICAgY29tcGxldGlvbi53YWl0KCk7CiAKICAgICBpZiAocmVj
cmVhdGVTdWNjZWVkZWQpCi0gICAgICAgIG1fbGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllc01haW5U
aHJlYWRDb3B5ID0gY2FwYWJpbGl0aWVzOworICAgICAgICBtX1JlbmRlcmVyQ2FwYWJpbGl0aWVz
TWFpblRocmVhZENvcHkgPSBjYXBhYmlsaXRpZXM7CiAgICAgcmV0dXJuIHJlY3JlYXRlU3VjY2Vl
ZGVkOwogfQogCkBAIC0yNzcsMTAgKzI3NywxMCBAQCB2b2lkIENDVGhyZWFkUHJveHk6OmltcGxT
aWRlUmVuZGVyaW5nU3RhdHMoQ0NSZW5kZXJpbmdTdGF0cyYgc3RhdHMpCiAgICAgY29tcGxldGlv
bi53YWl0KCk7CiB9CiAKLWNvbnN0IExheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMmIENDVGhyZWFk
UHJveHk6OmxheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMoKSBjb25zdAorY29uc3QgUmVuZGVyZXJD
YXBhYmlsaXRpZXMmIENDVGhyZWFkUHJveHk6OnJlbmRlcmVyQ2FwYWJpbGl0aWVzKCkgY29uc3QK
IHsKLSAgICBBU1NFUlQobV9sYXllclJlbmRlcmVySW5pdGlhbGl6ZWQpOwotICAgIHJldHVybiBt
X2xheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXNNYWluVGhyZWFkQ29weTsKKyAgICBBU1NFUlQobV9y
ZW5kZXJlckluaXRpYWxpemVkKTsKKyAgICByZXR1cm4gbV9SZW5kZXJlckNhcGFiaWxpdGllc01h
aW5UaHJlYWRDb3B5OwogfQogCiB2b2lkIENDVGhyZWFkUHJveHk6Omxvc2VDb250ZXh0KCkKQEAg
LTQxOCw4ICs0MTgsOCBAQCB2b2lkIENDVGhyZWFkUHJveHk6OmZvcmNlU2VyaWFsaXplT25Td2Fw
QnVmZmVycygpCiAKIHZvaWQgQ0NUaHJlYWRQcm94eTo6Zm9yY2VTZXJpYWxpemVPblN3YXBCdWZm
ZXJzT25JbXBsVGhyZWFkKENDQ29tcGxldGlvbkV2ZW50KiBjb21wbGV0aW9uKQogewotICAgIGlm
IChtX2xheWVyUmVuZGVyZXJJbml0aWFsaXplZCkKLSAgICAgICAgbV9sYXllclRyZWVIb3N0SW1w
bC0+bGF5ZXJSZW5kZXJlcigpLT5kb05vT3AoKTsKKyAgICBpZiAobV9yZW5kZXJlckluaXRpYWxp
emVkKQorICAgICAgICBtX2xheWVyVHJlZUhvc3RJbXBsLT5yZW5kZXJlcigpLT5kb05vT3AoKTsK
ICAgICBjb21wbGV0aW9uLT5zaWduYWwoKTsKIH0KIApAQCAtNTE3LDcgKzUxNyw3IEBAIHZvaWQg
Q0NUaHJlYWRQcm94eTo6YmVnaW5GcmFtZSgpCiAgICAgbV9jb21taXRSZXF1ZXN0ZWQgPSBmYWxz
ZTsKICAgICBtX2ZvcmNlZENvbW1pdFJlcXVlc3RlZCA9IGZhbHNlOwogCi0gICAgaWYgKCFtX2xh
eWVyVHJlZUhvc3QtPmluaXRpYWxpemVMYXllclJlbmRlcmVySWZOZWVkZWQoKSkKKyAgICBpZiAo
IW1fbGF5ZXJUcmVlSG9zdC0+aW5pdGlhbGl6ZVJlbmRlcmVySWZOZWVkZWQoKSkKICAgICAgICAg
cmV0dXJuOwogCiAgICAgaWYgKHJlcXVlc3QtPmNvbnRlbnRzVGV4dHVyZXNXZXJlRGVsZXRlZCkK
QEAgLTU3Nyw3ICs1NzcsNyBAQCB2b2lkIENDVGhyZWFkUHJveHk6OmJlZ2luRnJhbWVDb21wbGV0
ZU9uSW1wbFRocmVhZChDQ0NvbXBsZXRpb25FdmVudCogY29tcGxldGlvbgogICAgIH0gZWxzZQog
ICAgICAgICBtX3Jlc2V0Q29udGVudHNUZXh0dXJlc1B1cmdlZEFmdGVyQ29tbWl0T25JbXBsVGhy
ZWFkID0gdHJ1ZTsKIAotICAgIG1fY3VycmVudFRleHR1cmVVcGRhdGVDb250cm9sbGVyT25JbXBs
VGhyZWFkID0gQ0NUZXh0dXJlVXBkYXRlQ29udHJvbGxlcjo6Y3JlYXRlKENDUHJveHk6OmltcGxU
aHJlYWQoKSwgcXVldWUsIG1fbGF5ZXJUcmVlSG9zdEltcGwtPnJlc291cmNlUHJvdmlkZXIoKSwg
bV9sYXllclRyZWVIb3N0SW1wbC0+bGF5ZXJSZW5kZXJlcigpLT50ZXh0dXJlQ29waWVyKCksIG1f
bGF5ZXJUcmVlSG9zdEltcGwtPmxheWVyUmVuZGVyZXIoKS0+dGV4dHVyZVVwbG9hZGVyKCkpOwor
ICAgIG1fY3VycmVudFRleHR1cmVVcGRhdGVDb250cm9sbGVyT25JbXBsVGhyZWFkID0gQ0NUZXh0
dXJlVXBkYXRlQ29udHJvbGxlcjo6Y3JlYXRlKENDUHJveHk6OmltcGxUaHJlYWQoKSwgcXVldWUs
IG1fbGF5ZXJUcmVlSG9zdEltcGwtPnJlc291cmNlUHJvdmlkZXIoKSwgbV9sYXllclRyZWVIb3N0
SW1wbC0+cmVuZGVyZXIoKS0+dGV4dHVyZUNvcGllcigpLCBtX2xheWVyVHJlZUhvc3RJbXBsLT5y
ZW5kZXJlcigpLT50ZXh0dXJlVXBsb2FkZXIoKSk7CiAgICAgbV9jb21taXRDb21wbGV0aW9uRXZl
bnRPbkltcGxUaHJlYWQgPSBjb21wbGV0aW9uOwogCiAgICAgbV9zY2hlZHVsZXJPbkltcGxUaHJl
YWQtPmJlZ2luRnJhbWVDb21wbGV0ZSgpOwpAQCAtNjYzLDggKzY2Myw4IEBAIENDU2NoZWR1bGVk
QWN0aW9uRHJhd0FuZFN3YXBSZXN1bHQgQ0NUaHJlYWRQcm94eTo6c2NoZWR1bGVkQWN0aW9uRHJh
d0FuZFN3YXBJbnRlCiAgICAgaWYgKCFtX2xheWVyVHJlZUhvc3RJbXBsKQogICAgICAgICByZXR1
cm4gcmVzdWx0OwogCi0gICAgQVNTRVJUKG1fbGF5ZXJUcmVlSG9zdEltcGwtPmxheWVyUmVuZGVy
ZXIoKSk7Ci0gICAgaWYgKCFtX2xheWVyVHJlZUhvc3RJbXBsLT5sYXllclJlbmRlcmVyKCkpCisg
ICAgQVNTRVJUKG1fbGF5ZXJUcmVlSG9zdEltcGwtPnJlbmRlcmVyKCkpOworICAgIGlmICghbV9s
YXllclRyZWVIb3N0SW1wbC0+cmVuZGVyZXIoKSkKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKIAog
ICAgIC8vIEZJWE1FOiBjb21wdXRlIHRoZSBmcmFtZSBkaXNwbGF5IHRpbWUgbW9yZSBpbnRlbGxp
Z2VudGx5CkBAIC04NTAsMTQgKzg1MCwxNCBAQCB2b2lkIENDVGhyZWFkUHJveHk6OmluaXRpYWxp
emVDb250ZXh0T25JbXBsVGhyZWFkKENDR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0KQogICAgIG1f
Y29udGV4dEJlZm9yZUluaXRpYWxpemF0aW9uT25JbXBsVGhyZWFkID0gYWRvcHRQdHIoY29udGV4
dCk7CiB9CiAKLXZvaWQgQ0NUaHJlYWRQcm94eTo6aW5pdGlhbGl6ZUxheWVyUmVuZGVyZXJPbklt
cGxUaHJlYWQoQ0NDb21wbGV0aW9uRXZlbnQqIGNvbXBsZXRpb24sIGJvb2wqIGluaXRpYWxpemVT
dWNjZWVkZWQsIExheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMqIGNhcGFiaWxpdGllcykKK3ZvaWQg
Q0NUaHJlYWRQcm94eTo6aW5pdGlhbGl6ZVJlbmRlcmVyT25JbXBsVGhyZWFkKENDQ29tcGxldGlv
bkV2ZW50KiBjb21wbGV0aW9uLCBib29sKiBpbml0aWFsaXplU3VjY2VlZGVkLCBSZW5kZXJlckNh
cGFiaWxpdGllcyogY2FwYWJpbGl0aWVzKQogewotICAgIFRSQUNFX0VWRU5UMCgiY2MiLCAiQ0NU
aHJlYWRQcm94eTo6aW5pdGlhbGl6ZUxheWVyUmVuZGVyZXJPbkltcGxUaHJlYWQiKTsKKyAgICBU
UkFDRV9FVkVOVDAoImNjIiwgIkNDVGhyZWFkUHJveHk6OmluaXRpYWxpemVSZW5kZXJlck9uSW1w
bFRocmVhZCIpOwogICAgIEFTU0VSVChpc0ltcGxUaHJlYWQoKSk7CiAgICAgQVNTRVJUKG1fY29u
dGV4dEJlZm9yZUluaXRpYWxpemF0aW9uT25JbXBsVGhyZWFkKTsKLSAgICAqaW5pdGlhbGl6ZVN1
Y2NlZWRlZCA9IG1fbGF5ZXJUcmVlSG9zdEltcGwtPmluaXRpYWxpemVMYXllclJlbmRlcmVyKG1f
Y29udGV4dEJlZm9yZUluaXRpYWxpemF0aW9uT25JbXBsVGhyZWFkLnJlbGVhc2UoKSwgdGV4dHVy
ZVVwbG9hZGVyKTsKKyAgICAqaW5pdGlhbGl6ZVN1Y2NlZWRlZCA9IG1fbGF5ZXJUcmVlSG9zdElt
cGwtPmluaXRpYWxpemVSZW5kZXJlcihtX2NvbnRleHRCZWZvcmVJbml0aWFsaXphdGlvbk9uSW1w
bFRocmVhZC5yZWxlYXNlKCksIHRleHR1cmVVcGxvYWRlcik7CiAgICAgaWYgKCppbml0aWFsaXpl
U3VjY2VlZGVkKSB7Ci0gICAgICAgICpjYXBhYmlsaXRpZXMgPSBtX2xheWVyVHJlZUhvc3RJbXBs
LT5sYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzKCk7CisgICAgICAgICpjYXBhYmlsaXRpZXMgPSBt
X2xheWVyVHJlZUhvc3RJbXBsLT5yZW5kZXJlckNhcGFiaWxpdGllcygpOwogICAgICAgICBpZiAo
Y2FwYWJpbGl0aWVzLT51c2luZ1N3YXBDb21wbGV0ZUNhbGxiYWNrKQogICAgICAgICAgICAgbV9z
Y2hlZHVsZXJPbkltcGxUaHJlYWQtPnNldE1heEZyYW1lc1BlbmRpbmcoMik7CiAgICAgfQpAQCAt
ODg4LDE0ICs4ODgsMTQgQEAgc2l6ZV90IENDVGhyZWFkUHJveHk6Om1heFBhcnRpYWxUZXh0dXJl
VXBkYXRlcygpIGNvbnN0CiAgICAgcmV0dXJuIENDVGV4dHVyZVVwZGF0ZUNvbnRyb2xsZXI6Om1h
eFBhcnRpYWxUZXh0dXJlVXBkYXRlcygpOwogfQogCi12b2lkIENDVGhyZWFkUHJveHk6OnJlY3Jl
YXRlQ29udGV4dE9uSW1wbFRocmVhZChDQ0NvbXBsZXRpb25FdmVudCogY29tcGxldGlvbiwgQ0NH
cmFwaGljc0NvbnRleHQqIGNvbnRleHRQdHIsIGJvb2wqIHJlY3JlYXRlU3VjY2VlZGVkLCBMYXll
clJlbmRlcmVyQ2FwYWJpbGl0aWVzKiBjYXBhYmlsaXRpZXMpCit2b2lkIENDVGhyZWFkUHJveHk6
OnJlY3JlYXRlQ29udGV4dE9uSW1wbFRocmVhZChDQ0NvbXBsZXRpb25FdmVudCogY29tcGxldGlv
biwgQ0NHcmFwaGljc0NvbnRleHQqIGNvbnRleHRQdHIsIGJvb2wqIHJlY3JlYXRlU3VjY2VlZGVk
LCBSZW5kZXJlckNhcGFiaWxpdGllcyogY2FwYWJpbGl0aWVzKQogewogICAgIFRSQUNFX0VWRU5U
MCgiY2MiLCAiQ0NUaHJlYWRQcm94eTo6cmVjcmVhdGVDb250ZXh0T25JbXBsVGhyZWFkIik7CiAg
ICAgQVNTRVJUKGlzSW1wbFRocmVhZCgpKTsKICAgICBtX2xheWVyVHJlZUhvc3QtPmRlbGV0ZUNv
bnRlbnRzVGV4dHVyZXNPbkltcGxUaHJlYWQobV9sYXllclRyZWVIb3N0SW1wbC0+cmVzb3VyY2VQ
cm92aWRlcigpKTsKLSAgICAqcmVjcmVhdGVTdWNjZWVkZWQgPSBtX2xheWVyVHJlZUhvc3RJbXBs
LT5pbml0aWFsaXplTGF5ZXJSZW5kZXJlcihhZG9wdFB0cihjb250ZXh0UHRyKSwgdGV4dHVyZVVw
bG9hZGVyKTsKKyAgICAqcmVjcmVhdGVTdWNjZWVkZWQgPSBtX2xheWVyVHJlZUhvc3RJbXBsLT5p
bml0aWFsaXplUmVuZGVyZXIoYWRvcHRQdHIoY29udGV4dFB0ciksIHRleHR1cmVVcGxvYWRlcik7
CiAgICAgaWYgKCpyZWNyZWF0ZVN1Y2NlZWRlZCkgewotICAgICAgICAqY2FwYWJpbGl0aWVzID0g
bV9sYXllclRyZWVIb3N0SW1wbC0+bGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcygpOworICAgICAg
ICAqY2FwYWJpbGl0aWVzID0gbV9sYXllclRyZWVIb3N0SW1wbC0+cmVuZGVyZXJDYXBhYmlsaXRp
ZXMoKTsKICAgICAgICAgbV9zY2hlZHVsZXJPbkltcGxUaHJlYWQtPmRpZFJlY3JlYXRlQ29udGV4
dCgpOwogICAgIH0KICAgICBjb21wbGV0aW9uLT5zaWduYWwoKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkUHJveHkuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkUHJv
eHkuaAppbmRleCA5MWE5ZTRkNDQ2OWVlZWE2NmU4ZDlmZjYzNjU1NWNiYzhjMDBkOGM1Li5hMjQw
MjgxYzU1NjA1YzA1NjVmZGQ4MzljOTk2OGNmNTJhYTc2MzBmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5LmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQ
cm94eS5oCkBAIC01NywxMSArNTcsMTEgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBpbml0
aWFsaXplQ29udGV4dCgpIE9WRVJSSURFOwogICAgIHZpcnR1YWwgdm9pZCBzZXRTdXJmYWNlUmVh
ZHkoKSBPVkVSUklERTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0VmlzaWJsZShib29sKSBPVkVSUklE
RTsKLSAgICB2aXJ0dWFsIGJvb2wgaW5pdGlhbGl6ZUxheWVyUmVuZGVyZXIoKSBPVkVSUklERTsK
KyAgICB2aXJ0dWFsIGJvb2wgaW5pdGlhbGl6ZVJlbmRlcmVyKCkgT1ZFUlJJREU7CiAgICAgdmly
dHVhbCBib29sIHJlY3JlYXRlQ29udGV4dCgpIE9WRVJSSURFOwogICAgIHZpcnR1YWwgaW50IGNv
bXBvc2l0b3JJZGVudGlmaWVyKCkgY29uc3QgT1ZFUlJJREU7CiAgICAgdmlydHVhbCB2b2lkIGlt
cGxTaWRlUmVuZGVyaW5nU3RhdHMoQ0NSZW5kZXJpbmdTdGF0cyYpIE9WRVJSSURFOwotICAgIHZp
cnR1YWwgY29uc3QgTGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcyYgbGF5ZXJSZW5kZXJlckNhcGFi
aWxpdGllcygpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgY29uc3QgUmVuZGVyZXJDYXBh
YmlsaXRpZXMmIHJlbmRlcmVyQ2FwYWJpbGl0aWVzKCkgY29uc3QgT1ZFUlJJREU7CiAgICAgdmly
dHVhbCB2b2lkIGxvc2VDb250ZXh0KCkgT1ZFUlJJREU7CiAgICAgdmlydHVhbCB2b2lkIHNldE5l
ZWRzQW5pbWF0ZSgpIE9WRVJSSURFOwogICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc0NvbW1pdCgp
IE9WRVJSSURFOwpAQCAtMTM2LDExICsxMzYsMTEgQEAgcHJpdmF0ZToKICAgICB2b2lkIHNldFN1
cmZhY2VSZWFkeU9uSW1wbFRocmVhZCgpOwogICAgIHZvaWQgc2V0VmlzaWJsZU9uSW1wbFRocmVh
ZChDQ0NvbXBsZXRpb25FdmVudCosIGJvb2wpOwogICAgIHZvaWQgaW5pdGlhbGl6ZUNvbnRleHRP
bkltcGxUaHJlYWQoQ0NHcmFwaGljc0NvbnRleHQqKTsKLSAgICB2b2lkIGluaXRpYWxpemVMYXll
clJlbmRlcmVyT25JbXBsVGhyZWFkKENDQ29tcGxldGlvbkV2ZW50KiwgYm9vbCogaW5pdGlhbGl6
ZVN1Y2NlZWRlZCwgTGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcyopOworICAgIHZvaWQgaW5pdGlh
bGl6ZVJlbmRlcmVyT25JbXBsVGhyZWFkKENDQ29tcGxldGlvbkV2ZW50KiwgYm9vbCogaW5pdGlh
bGl6ZVN1Y2NlZWRlZCwgUmVuZGVyZXJDYXBhYmlsaXRpZXMqKTsKICAgICB2b2lkIGxheWVyVHJl
ZUhvc3RDbG9zZWRPbkltcGxUaHJlYWQoQ0NDb21wbGV0aW9uRXZlbnQqKTsKICAgICB2b2lkIHNl
dEZ1bGxSb290TGF5ZXJEYW1hZ2VPbkltcGxUaHJlYWQoKTsKICAgICB2b2lkIGFjcXVpcmVMYXll
clRleHR1cmVzRm9yTWFpblRocmVhZE9uSW1wbFRocmVhZChDQ0NvbXBsZXRpb25FdmVudCopOwot
ICAgIHZvaWQgcmVjcmVhdGVDb250ZXh0T25JbXBsVGhyZWFkKENDQ29tcGxldGlvbkV2ZW50Kiwg
Q0NHcmFwaGljc0NvbnRleHQqLCBib29sKiByZWNyZWF0ZVN1Y2NlZWRlZCwgTGF5ZXJSZW5kZXJl
ckNhcGFiaWxpdGllcyopOworICAgIHZvaWQgcmVjcmVhdGVDb250ZXh0T25JbXBsVGhyZWFkKEND
Q29tcGxldGlvbkV2ZW50KiwgQ0NHcmFwaGljc0NvbnRleHQqLCBib29sKiByZWNyZWF0ZVN1Y2Nl
ZWRlZCwgUmVuZGVyZXJDYXBhYmlsaXRpZXMqKTsKICAgICB2b2lkIGltcGxTaWRlUmVuZGVyaW5n
U3RhdHNPbkltcGxUaHJlYWQoQ0NDb21wbGV0aW9uRXZlbnQqLCBDQ1JlbmRlcmluZ1N0YXRzKik7
CiAgICAgQ0NTY2hlZHVsZWRBY3Rpb25EcmF3QW5kU3dhcFJlc3VsdCBzY2hlZHVsZWRBY3Rpb25E
cmF3QW5kU3dhcEludGVybmFsKGJvb2wgZm9yY2VkRHJhdyk7CiAgICAgdm9pZCBmb3JjZVNlcmlh
bGl6ZU9uU3dhcEJ1ZmZlcnNPbkltcGxUaHJlYWQoQ0NDb21wbGV0aW9uRXZlbnQqKTsKQEAgLTE1
Myw4ICsxNTMsOCBAQCBwcml2YXRlOgogICAgIE93blB0cjxDQ1RocmVhZFByb3h5Q29udGV4dFJl
Y3JlYXRpb25UaW1lcj4gbV9jb250ZXh0UmVjcmVhdGlvblRpbWVyOwogICAgIENDTGF5ZXJUcmVl
SG9zdCogbV9sYXllclRyZWVIb3N0OwogICAgIGludCBtX2NvbXBvc2l0b3JJZGVudGlmaWVyOwot
ICAgIGJvb2wgbV9sYXllclJlbmRlcmVySW5pdGlhbGl6ZWQ7Ci0gICAgTGF5ZXJSZW5kZXJlckNh
cGFiaWxpdGllcyBtX2xheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXNNYWluVGhyZWFkQ29weTsKKyAg
ICBib29sIG1fcmVuZGVyZXJJbml0aWFsaXplZDsKKyAgICBSZW5kZXJlckNhcGFiaWxpdGllcyBt
X1JlbmRlcmVyQ2FwYWJpbGl0aWVzTWFpblRocmVhZENvcHk7CiAgICAgYm9vbCBtX3N0YXJ0ZWQ7
CiAgICAgYm9vbCBtX3RleHR1cmVzQWNxdWlyZWQ7CiAgICAgYm9vbCBtX2luQ29tcG9zaXRlQW5k
UmVhZGJhY2s7CkBAIC0xNjgsNyArMTY4LDcgQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8Q0NTY29w
ZWRUaHJlYWRQcm94eT4gbV9tYWluVGhyZWFkUHJveHk7CiAKICAgICAvLyBIb2xkcyBvbiB0byB0
aGUgY29udGV4dCB3ZSBtaWdodCB1c2UgZm9yIGNvbXBvc2l0aW5nIGluIGJldHdlZW4gaW5pdGlh
bGl6ZUNvbnRleHQoKQotICAgIC8vIGFuZCBpbml0aWFsaXplTGF5ZXJSZW5kZXJlcigpIGNhbGxz
LgorICAgIC8vIGFuZCBpbml0aWFsaXplUmVuZGVyZXIoKSBjYWxscy4KICAgICBPd25QdHI8Q0NH
cmFwaGljc0NvbnRleHQ+IG1fY29udGV4dEJlZm9yZUluaXRpYWxpemF0aW9uT25JbXBsVGhyZWFk
OwogCiAgICAgLy8gU2V0IHdoZW4gdGhlIG1haW4gdGhyZWFkIGlzIHdhaXRpbmcgb24gYSBzY2hl
ZHVsZWRBY3Rpb25CZWdpbkZyYW1lIHRvIGJlIGlzc3VlZC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktp
dC5neXBpCmluZGV4IDdmYjBjMGY3MDdlMWQ2ODhjMWJlOTBiZDIzNWYwM2EwYjZlNDQ4ZWMuLmUy
MzEzYmMwY2YyMjRhNDYzZmYxODA5ODM4ZGE1NzNiMjEyZTVhMzMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9XZWJLaXQuZ3lwaQpAQCAtMTI1LDcgKzEyNSw3IEBACiAgICAgICAgICAgICAndGVzdHMvS2V5
Ym9hcmRUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvS1VSTFRlc3QuY3BwJywKICAgICAg
ICAgICAgICd0ZXN0cy9MYXllckNocm9taXVtVGVzdC5jcHAnLAotICAgICAgICAgICAgJ3Rlc3Rz
L0xheWVyUmVuZGVyZXJDaHJvbWl1bVRlc3QuY3BwJywKKyAgICAgICAgICAgICd0ZXN0cy9DQ1Jl
bmRlcmVyR0xUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvTGV2ZWxEQlRlc3QuY3BwJywK
ICAgICAgICAgICAgICd0ZXN0cy9MaW5rSGlnaGxpZ2h0VGVzdC5jcHAnLAogICAgICAgICAgICAg
J3Rlc3RzL0xpc3RlbmVyTGVha1Rlc3QuY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QuY3BwIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RJbXBsVGVzdC5jcHAKaW5kZXggNmVjMGNl
NWQ3YWI1ZTJlMWQ2NTBmMDljNjg5OGE5MDE1YTdiM2E3ZS4uODA0YjZiMWJjOGU2YTZhZWRkNmE2
NDYxNGMwYTUyMzQ4MWM3N2QxNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90
ZXN0cy9DQ0xheWVyVHJlZUhvc3RJbXBsVGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RJbXBsVGVzdC5jcHAKQEAgLTM1LDYgKzM1LDcgQEAK
ICNpbmNsdWRlICJDQ0xheWVyVHJlZVRlc3RDb21tb24uaCIKICNpbmNsdWRlICJDQ1F1YWRDdWxs
ZXIuaCIKICNpbmNsdWRlICJDQ1JlbmRlclBhc3NEcmF3UXVhZC5oIgorI2luY2x1ZGUgIkNDUmVu
ZGVyZXJHTC5oIgogI2luY2x1ZGUgIkNDU2Nyb2xsYmFyTGF5ZXJJbXBsLmgiCiAjaW5jbHVkZSAi
Q0NTZXR0aW5ncy5oIgogI2luY2x1ZGUgIkNDU2luZ2xlVGhyZWFkUHJveHkuaCIKQEAgLTQ3LDcg
KzQ4LDYgQEAKICNpbmNsdWRlICJGYWtlV2ViQ29tcG9zaXRvck91dHB1dFN1cmZhY2UuaCIKICNp
bmNsdWRlICJGYWtlV2ViR3JhcGhpY3NDb250ZXh0M0QuaCIKICNpbmNsdWRlICJGYWtlV2ViU2Ny
b2xsYmFyVGhlbWVHZW9tZXRyeS5oIgotI2luY2x1ZGUgIkxheWVyUmVuZGVyZXJDaHJvbWl1bS5o
IgogI2luY2x1ZGUgPGdtb2NrL2dtb2NrLmg+CiAjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KICNp
bmNsdWRlIDxwdWJsaWMvV2ViVmlkZW9GcmFtZS5oPgpAQCAtNzYsNyArNzYsNyBAQCBwdWJsaWM6
CiAgICAgICAgIHNldHRpbmdzLm1pbmltdW1PY2NsdXNpb25UcmFja2luZ1NpemUgPSBJbnRTaXpl
KCk7CiAKICAgICAgICAgbV9ob3N0SW1wbCA9IENDTGF5ZXJUcmVlSG9zdEltcGw6OmNyZWF0ZShz
ZXR0aW5ncywgdGhpcyk7Ci0gICAgICAgIG1faG9zdEltcGwtPmluaXRpYWxpemVMYXllclJlbmRl
cmVyKGNyZWF0ZUNvbnRleHQoKSwgVW50aHJvdHRsZWRVcGxvYWRlcik7CisgICAgICAgIG1faG9z
dEltcGwtPmluaXRpYWxpemVSZW5kZXJlcihjcmVhdGVDb250ZXh0KCksIFVudGhyb3R0bGVkVXBs
b2FkZXIpOwogICAgICAgICBtX2hvc3RJbXBsLT5zZXRWaWV3cG9ydFNpemUoSW50U2l6ZSgxMCwg
MTApLCBJbnRTaXplKDEwLCAxMCkpOwogICAgIH0KIApAQCAtOTYsNyArOTYsNyBAQCBwdWJsaWM6
CiAKICAgICAgICAgT3duUHRyPENDTGF5ZXJUcmVlSG9zdEltcGw+IG15SG9zdEltcGwgPSBDQ0xh
eWVyVHJlZUhvc3RJbXBsOjpjcmVhdGUoc2V0dGluZ3MsIHRoaXMpOwogCi0gICAgICAgIG15SG9z
dEltcGwtPmluaXRpYWxpemVMYXllclJlbmRlcmVyKGdyYXBoaWNzQ29udGV4dCwgVW50aHJvdHRs
ZWRVcGxvYWRlcik7CisgICAgICAgIG15SG9zdEltcGwtPmluaXRpYWxpemVSZW5kZXJlcihncmFw
aGljc0NvbnRleHQsIFVudGhyb3R0bGVkVXBsb2FkZXIpOwogICAgICAgICBteUhvc3RJbXBsLT5z
ZXRWaWV3cG9ydFNpemUoSW50U2l6ZSgxMCwgMTApLCBJbnRTaXplKDEwLCAxMCkpOwogCiAgICAg
ICAgIE93blB0cjxDQ0xheWVySW1wbD4gcm9vdCA9IHJvb3RQdHI7CkBAIC0xNjUsOSArMTY1LDkg
QEAgcHVibGljOgogICAgICAgICByZXR1cm4gbGF5ZXIucmVsZWFzZSgpOwogICAgIH0KIAotICAg
IHZvaWQgaW5pdGlhbGl6ZUxheWVyUmVuZGVyZXJBbmREcmF3RnJhbWUoKQorICAgIHZvaWQgaW5p
dGlhbGl6ZVJlbmRlcmVyQW5kRHJhd0ZyYW1lKCkKICAgICB7Ci0gICAgICAgIG1faG9zdEltcGwt
PmluaXRpYWxpemVMYXllclJlbmRlcmVyKGNyZWF0ZUNvbnRleHQoKSwgVW50aHJvdHRsZWRVcGxv
YWRlcik7CisgICAgICAgIG1faG9zdEltcGwtPmluaXRpYWxpemVSZW5kZXJlcihjcmVhdGVDb250
ZXh0KCksIFVudGhyb3R0bGVkVXBsb2FkZXIpOwogICAgICAgICBDQ0xheWVyVHJlZUhvc3RJbXBs
OjpGcmFtZURhdGEgZnJhbWU7CiAgICAgICAgIEVYUEVDVF9UUlVFKG1faG9zdEltcGwtPnByZXBh
cmVUb0RyYXcoZnJhbWUpKTsKICAgICAgICAgbV9ob3N0SW1wbC0+ZHJhd0xheWVycyhmcmFtZSk7
CkBAIC0yNjUsNyArMjY1LDcgQEAgVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBzY3Jv
bGxSb290Q2FsbHNDb21taXRBbmRSZWRyYXcpCiB7CiAgICAgc2V0dXBTY3JvbGxBbmRDb250ZW50
c0xheWVycyhJbnRTaXplKDEwMCwgMTAwKSk7CiAgICAgbV9ob3N0SW1wbC0+c2V0Vmlld3BvcnRT
aXplKEludFNpemUoNTAsIDUwKSwgSW50U2l6ZSg1MCwgNTApKTsKLSAgICBpbml0aWFsaXplTGF5
ZXJSZW5kZXJlckFuZERyYXdGcmFtZSgpOworICAgIGluaXRpYWxpemVSZW5kZXJlckFuZERyYXdG
cmFtZSgpOwogCiAgICAgRVhQRUNUX0VRKG1faG9zdEltcGwtPnNjcm9sbEJlZ2luKEludFBvaW50
KDAsIDApLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6V2hlZWwpLCBDQ0lucHV0SGFuZGxlckNsaWVu
dDo6U2Nyb2xsU3RhcnRlZCk7CiAgICAgbV9ob3N0SW1wbC0+c2Nyb2xsQnkoSW50UG9pbnQoKSwg
SW50U2l6ZSgwLCAxMCkpOwpAQCAtMjg2LDcgKzI4Niw3IEBAIFRFU1RfRihDQ0xheWVyVHJlZUhv
c3RJbXBsVGVzdCwgc2Nyb2xsV2l0aG91dFJlbmRlcmVyKQogICAgIG1faG9zdEltcGwgPSBDQ0xh
eWVyVHJlZUhvc3RJbXBsOjpjcmVhdGUoc2V0dGluZ3MsIHRoaXMpOwogCiAgICAgLy8gSW5pdGlh
bGl6YXRpb24gd2lsbCBmYWlsIGhlcmUuCi0gICAgbV9ob3N0SW1wbC0+aW5pdGlhbGl6ZUxheWVy
UmVuZGVyZXIoRmFrZVdlYkNvbXBvc2l0b3JPdXRwdXRTdXJmYWNlOjpjcmVhdGUoYWRvcHRQdHIo
bmV3IEZha2VXZWJHcmFwaGljc0NvbnRleHQzRE1ha2VDdXJyZW50RmFpbHMpKSwgVW50aHJvdHRs
ZWRVcGxvYWRlcik7CisgICAgbV9ob3N0SW1wbC0+aW5pdGlhbGl6ZVJlbmRlcmVyKEZha2VXZWJD
b21wb3NpdG9yT3V0cHV0U3VyZmFjZTo6Y3JlYXRlKGFkb3B0UHRyKG5ldyBGYWtlV2ViR3JhcGhp
Y3NDb250ZXh0M0RNYWtlQ3VycmVudEZhaWxzKSksIFVudGhyb3R0bGVkVXBsb2FkZXIpOwogICAg
IG1faG9zdEltcGwtPnNldFZpZXdwb3J0U2l6ZShJbnRTaXplKDEwLCAxMCksIEludFNpemUoMTAs
IDEwKSk7CiAKICAgICBzZXR1cFNjcm9sbEFuZENvbnRlbnRzTGF5ZXJzKEludFNpemUoMTAwLCAx
MDApKTsKQEAgLTMwMSw3ICszMDEsNyBAQCBURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3Qs
IHJlcGxhY2VUcmVlV2hpbGVTY3JvbGxpbmcpCiAKICAgICBzZXR1cFNjcm9sbEFuZENvbnRlbnRz
TGF5ZXJzKEludFNpemUoMTAwLCAxMDApKTsKICAgICBtX2hvc3RJbXBsLT5zZXRWaWV3cG9ydFNp
emUoSW50U2l6ZSg1MCwgNTApLCBJbnRTaXplKDUwLCA1MCkpOwotICAgIGluaXRpYWxpemVMYXll
clJlbmRlcmVyQW5kRHJhd0ZyYW1lKCk7CisgICAgaW5pdGlhbGl6ZVJlbmRlcmVyQW5kRHJhd0Zy
YW1lKCk7CiAKICAgICAvLyBXZSBzaG91bGQgbm90IGNyYXNoIGlmIHRoZSB0cmVlIGlzIHJlcGxh
Y2VkIHdoaWxlIHdlIGFyZSBzY3JvbGxpbmcuCiAgICAgRVhQRUNUX0VRKG1faG9zdEltcGwtPnNj
cm9sbEJlZ2luKEludFBvaW50KDAsIDApLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6V2hlZWwpLCBD
Q0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsU3RhcnRlZCk7CkBAIC0zMjEsNyArMzIxLDcgQEAg
VEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBjbGVhclJvb3RSZW5kZXJTdXJmYWNlQW5k
U2Nyb2xsKQogewogICAgIHNldHVwU2Nyb2xsQW5kQ29udGVudHNMYXllcnMoSW50U2l6ZSgxMDAs
IDEwMCkpOwogICAgIG1faG9zdEltcGwtPnNldFZpZXdwb3J0U2l6ZShJbnRTaXplKDUwLCA1MCks
IEludFNpemUoNTAsIDUwKSk7Ci0gICAgaW5pdGlhbGl6ZUxheWVyUmVuZGVyZXJBbmREcmF3RnJh
bWUoKTsKKyAgICBpbml0aWFsaXplUmVuZGVyZXJBbmREcmF3RnJhbWUoKTsKIAogICAgIC8vIFdl
IHNob3VsZCBiZSBhYmxlIHRvIHNjcm9sbCBldmVuIGlmIHRoZSByb290IGxheWVyIGxvc2VzIGl0
cyByZW5kZXIgc3VyZmFjZSBhZnRlciB0aGUgbW9zdAogICAgIC8vIHJlY2VudCByZW5kZXIuCkBA
IC0zMzMsNyArMzMzLDcgQEAgVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCB3aGVlbEV2
ZW50SGFuZGxlcnMpCiB7CiAgICAgc2V0dXBTY3JvbGxBbmRDb250ZW50c0xheWVycyhJbnRTaXpl
KDEwMCwgMTAwKSk7CiAgICAgbV9ob3N0SW1wbC0+c2V0Vmlld3BvcnRTaXplKEludFNpemUoNTAs
IDUwKSwgSW50U2l6ZSg1MCwgNTApKTsKLSAgICBpbml0aWFsaXplTGF5ZXJSZW5kZXJlckFuZERy
YXdGcmFtZSgpOworICAgIGluaXRpYWxpemVSZW5kZXJlckFuZERyYXdGcmFtZSgpOwogICAgIEND
TGF5ZXJJbXBsKiByb290ID0gbV9ob3N0SW1wbC0+cm9vdExheWVyKCk7CiAKICAgICByb290LT5z
ZXRIYXZlV2hlZWxFdmVudEhhbmRsZXJzKHRydWUpOwpAQCAtMzQ5LDcgKzM0OSw3IEBAIFRFU1Rf
RihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgc2hvdWxkU2Nyb2xsT25NYWluVGhyZWFkKQogewog
ICAgIHNldHVwU2Nyb2xsQW5kQ29udGVudHNMYXllcnMoSW50U2l6ZSgxMDAsIDEwMCkpOwogICAg
IG1faG9zdEltcGwtPnNldFZpZXdwb3J0U2l6ZShJbnRTaXplKDUwLCA1MCksIEludFNpemUoNTAs
IDUwKSk7Ci0gICAgaW5pdGlhbGl6ZUxheWVyUmVuZGVyZXJBbmREcmF3RnJhbWUoKTsKKyAgICBp
bml0aWFsaXplUmVuZGVyZXJBbmREcmF3RnJhbWUoKTsKICAgICBDQ0xheWVySW1wbCogcm9vdCA9
IG1faG9zdEltcGwtPnJvb3RMYXllcigpOwogCiAgICAgcm9vdC0+c2V0U2hvdWxkU2Nyb2xsT25N
YWluVGhyZWFkKHRydWUpOwpAQCAtMzYyLDcgKzM2Miw3IEBAIFRFU1RfRihDQ0xheWVyVHJlZUhv
c3RJbXBsVGVzdCwgbm9uRmFzdFNjcm9sbGFibGVSZWdpb25CYXNpYykKIHsKICAgICBzZXR1cFNj
cm9sbEFuZENvbnRlbnRzTGF5ZXJzKEludFNpemUoMjAwLCAyMDApKTsKICAgICBtX2hvc3RJbXBs
LT5zZXRWaWV3cG9ydFNpemUoSW50U2l6ZSgxMDAsIDEwMCksIEludFNpemUoMTAwLCAxMDApKTsK
LSAgICBpbml0aWFsaXplTGF5ZXJSZW5kZXJlckFuZERyYXdGcmFtZSgpOworICAgIGluaXRpYWxp
emVSZW5kZXJlckFuZERyYXdGcmFtZSgpOwogICAgIENDTGF5ZXJJbXBsKiByb290ID0gbV9ob3N0
SW1wbC0+cm9vdExheWVyKCk7CiAKICAgICByb290LT5zZXROb25GYXN0U2Nyb2xsYWJsZVJlZ2lv
bihJbnRSZWN0KDAsIDAsIDUwLCA1MCkpOwpAQCAtMzg4LDcgKzM4OCw3IEBAIFRFU1RfRihDQ0xh
eWVyVHJlZUhvc3RJbXBsVGVzdCwgbm9uRmFzdFNjcm9sbGFibGVSZWdpb25XaXRoT2Zmc2V0KQog
CiAgICAgcm9vdC0+c2V0Tm9uRmFzdFNjcm9sbGFibGVSZWdpb24oSW50UmVjdCgwLCAwLCA1MCwg
NTApKTsKICAgICByb290LT5zZXRQb3NpdGlvbihGbG9hdFBvaW50KC0yNSwgMCkpOwotICAgIGlu
aXRpYWxpemVMYXllclJlbmRlcmVyQW5kRHJhd0ZyYW1lKCk7CisgICAgaW5pdGlhbGl6ZVJlbmRl
cmVyQW5kRHJhd0ZyYW1lKCk7CiAKICAgICAvLyBUaGlzIHBvaW50IHdvdWxkIGZhbGwgaW50byB0
aGUgbm9uLWZhc3Qgc2Nyb2xsYWJsZSByZWdpb24gZXhjZXB0IHRoYXQgd2UndmUgbW92ZWQgdGhl
IGxheWVyIGRvd24gYnkgMjUgcGl4ZWxzLgogICAgIEVYUEVDVF9FUShtX2hvc3RJbXBsLT5zY3Jv
bGxCZWdpbihJbnRQb2ludCg0MCwgMTApLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6V2hlZWwpLCBD
Q0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsU3RhcnRlZCk7CkBAIC00MDMsNyArNDAzLDcgQEAg
VEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBwaW5jaEdlc3R1cmUpCiB7CiAgICAgc2V0
dXBTY3JvbGxBbmRDb250ZW50c0xheWVycyhJbnRTaXplKDEwMCwgMTAwKSk7CiAgICAgbV9ob3N0
SW1wbC0+c2V0Vmlld3BvcnRTaXplKEludFNpemUoNTAsIDUwKSwgSW50U2l6ZSg1MCwgNTApKTsK
LSAgICBpbml0aWFsaXplTGF5ZXJSZW5kZXJlckFuZERyYXdGcmFtZSgpOworICAgIGluaXRpYWxp
emVSZW5kZXJlckFuZERyYXdGcmFtZSgpOwogCiAgICAgQ0NMYXllckltcGwqIHNjcm9sbExheWVy
ID0gbV9ob3N0SW1wbC0+cm9vdFNjcm9sbExheWVyKCk7CiAgICAgQVNTRVJUKHNjcm9sbExheWVy
KTsKQEAgLTQ4NCw3ICs0ODQsNyBAQCBURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIHBh
Z2VTY2FsZUFuaW1hdGlvbikKIHsKICAgICBzZXR1cFNjcm9sbEFuZENvbnRlbnRzTGF5ZXJzKElu
dFNpemUoMTAwLCAxMDApKTsKICAgICBtX2hvc3RJbXBsLT5zZXRWaWV3cG9ydFNpemUoSW50U2l6
ZSg1MCwgNTApLCBJbnRTaXplKDUwLCA1MCkpOwotICAgIGluaXRpYWxpemVMYXllclJlbmRlcmVy
QW5kRHJhd0ZyYW1lKCk7CisgICAgaW5pdGlhbGl6ZVJlbmRlcmVyQW5kRHJhd0ZyYW1lKCk7CiAK
ICAgICBDQ0xheWVySW1wbCogc2Nyb2xsTGF5ZXIgPSBtX2hvc3RJbXBsLT5yb290U2Nyb2xsTGF5
ZXIoKTsKICAgICBBU1NFUlQoc2Nyb2xsTGF5ZXIpOwpAQCAtNTM0LDcgKzUzNCw3IEBAIFRFU1Rf
RihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgaW5oaWJpdFNjcm9sbEFuZFBhZ2VTY2FsZVVwZGF0
ZXNXaGlsZVBpbmNoWm9vbWluCiB7CiAgICAgc2V0dXBTY3JvbGxBbmRDb250ZW50c0xheWVycyhJ
bnRTaXplKDEwMCwgMTAwKSk7CiAgICAgbV9ob3N0SW1wbC0+c2V0Vmlld3BvcnRTaXplKEludFNp
emUoNTAsIDUwKSwgSW50U2l6ZSg1MCwgNTApKTsKLSAgICBpbml0aWFsaXplTGF5ZXJSZW5kZXJl
ckFuZERyYXdGcmFtZSgpOworICAgIGluaXRpYWxpemVSZW5kZXJlckFuZERyYXdGcmFtZSgpOwog
CiAgICAgQ0NMYXllckltcGwqIHNjcm9sbExheWVyID0gbV9ob3N0SW1wbC0+cm9vdFNjcm9sbExh
eWVyKCk7CiAgICAgQVNTRVJUKHNjcm9sbExheWVyKTsKQEAgLTU4OCw3ICs1ODgsNyBAQCBURVNU
X0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIGluaGliaXRTY3JvbGxBbmRQYWdlU2NhbGVVcGRh
dGVzV2hpbGVBbmltYXRpbmdQYQogewogICAgIHNldHVwU2Nyb2xsQW5kQ29udGVudHNMYXllcnMo
SW50U2l6ZSgxMDAsIDEwMCkpOwogICAgIG1faG9zdEltcGwtPnNldFZpZXdwb3J0U2l6ZShJbnRT
aXplKDUwLCA1MCksIEludFNpemUoNTAsIDUwKSk7Ci0gICAgaW5pdGlhbGl6ZUxheWVyUmVuZGVy
ZXJBbmREcmF3RnJhbWUoKTsKKyAgICBpbml0aWFsaXplUmVuZGVyZXJBbmREcmF3RnJhbWUoKTsK
IAogICAgIENDTGF5ZXJJbXBsKiBzY3JvbGxMYXllciA9IG1faG9zdEltcGwtPnJvb3RTY3JvbGxM
YXllcigpOwogICAgIEFTU0VSVChzY3JvbGxMYXllcik7CkBAIC04NDksNyArODQ5LDcgQEAgVEVT
VF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBzY3JvbGxSb290SWdub3JlZCkKICAgICBPd25Q
dHI8Q0NMYXllckltcGw+IHJvb3QgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDEpOwogICAgIHJvb3Qt
PnNldFNjcm9sbGFibGUoZmFsc2UpOwogICAgIG1faG9zdEltcGwtPnNldFJvb3RMYXllcihyb290
LnJlbGVhc2UoKSk7Ci0gICAgaW5pdGlhbGl6ZUxheWVyUmVuZGVyZXJBbmREcmF3RnJhbWUoKTsK
KyAgICBpbml0aWFsaXplUmVuZGVyZXJBbmREcmF3RnJhbWUoKTsKIAogICAgIC8vIFNjcm9sbCBl
dmVudCBpcyBpZ25vcmVkIGJlY2F1c2UgbGF5ZXIgaXMgbm90IHNjcm9sbGFibGUuCiAgICAgRVhQ
RUNUX0VRKG1faG9zdEltcGwtPnNjcm9sbEJlZ2luKEludFBvaW50KDAsIDApLCBDQ0lucHV0SGFu
ZGxlckNsaWVudDo6V2hlZWwpLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsSWdub3JlZCk7
CkBAIC04ODIsNyArODgyLDcgQEAgVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBzY3Jv
bGxOb25Db21wb3NpdGVkUm9vdCkKIAogICAgIG1faG9zdEltcGwtPnNldFJvb3RMYXllcihzY3Jv
bGxMYXllci5yZWxlYXNlKCkpOwogICAgIG1faG9zdEltcGwtPnNldFZpZXdwb3J0U2l6ZShzdXJm
YWNlU2l6ZSwgc3VyZmFjZVNpemUpOwotICAgIGluaXRpYWxpemVMYXllclJlbmRlcmVyQW5kRHJh
d0ZyYW1lKCk7CisgICAgaW5pdGlhbGl6ZVJlbmRlcmVyQW5kRHJhd0ZyYW1lKCk7CiAKICAgICBF
WFBFQ1RfRVEobV9ob3N0SW1wbC0+c2Nyb2xsQmVnaW4oSW50UG9pbnQoNSwgNSksIENDSW5wdXRI
YW5kbGVyQ2xpZW50OjpXaGVlbCksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxTdGFydGVk
KTsKICAgICBtX2hvc3RJbXBsLT5zY3JvbGxCeShJbnRQb2ludCgpLCBJbnRTaXplKDAsIDEwKSk7
CkBAIC05MDAsNyArOTAwLDcgQEAgVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBzY3Jv
bGxDaGlsZENhbGxzQ29tbWl0QW5kUmVkcmF3KQogICAgIHJvb3QtPmFkZENoaWxkKGNyZWF0ZVNj
cm9sbGFibGVMYXllcigyLCBzdXJmYWNlU2l6ZSkpOwogICAgIG1faG9zdEltcGwtPnNldFJvb3RM
YXllcihyb290LnJlbGVhc2UoKSk7CiAgICAgbV9ob3N0SW1wbC0+c2V0Vmlld3BvcnRTaXplKHN1
cmZhY2VTaXplLCBzdXJmYWNlU2l6ZSk7Ci0gICAgaW5pdGlhbGl6ZUxheWVyUmVuZGVyZXJBbmRE
cmF3RnJhbWUoKTsKKyAgICBpbml0aWFsaXplUmVuZGVyZXJBbmREcmF3RnJhbWUoKTsKIAogICAg
IEVYUEVDVF9FUShtX2hvc3RJbXBsLT5zY3JvbGxCZWdpbihJbnRQb2ludCg1LCA1KSwgQ0NJbnB1
dEhhbmRsZXJDbGllbnQ6OldoZWVsKSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbFN0YXJ0
ZWQpOwogICAgIG1faG9zdEltcGwtPnNjcm9sbEJ5KEludFBvaW50KCksIEludFNpemUoMCwgMTAp
KTsKQEAgLTkxNiw3ICs5MTYsNyBAQCBURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIHNj
cm9sbE1pc3Nlc0NoaWxkKQogICAgIHJvb3QtPmFkZENoaWxkKGNyZWF0ZVNjcm9sbGFibGVMYXll
cigyLCBzdXJmYWNlU2l6ZSkpOwogICAgIG1faG9zdEltcGwtPnNldFJvb3RMYXllcihyb290LnJl
bGVhc2UoKSk7CiAgICAgbV9ob3N0SW1wbC0+c2V0Vmlld3BvcnRTaXplKHN1cmZhY2VTaXplLCBz
dXJmYWNlU2l6ZSk7Ci0gICAgaW5pdGlhbGl6ZUxheWVyUmVuZGVyZXJBbmREcmF3RnJhbWUoKTsK
KyAgICBpbml0aWFsaXplUmVuZGVyZXJBbmREcmF3RnJhbWUoKTsKIAogICAgIC8vIFNjcm9sbCBl
dmVudCBpcyBpZ25vcmVkIGJlY2F1c2UgdGhlIGlucHV0IGNvb3JkaW5hdGUgaXMgb3V0c2lkZSB0
aGUgbGF5ZXIgYm91bmRhcmllcy4KICAgICBFWFBFQ1RfRVEobV9ob3N0SW1wbC0+c2Nyb2xsQmVn
aW4oSW50UG9pbnQoMTUsIDUpLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6V2hlZWwpLCBDQ0lucHV0
SGFuZGxlckNsaWVudDo6U2Nyb2xsSWdub3JlZCk7CkBAIC05MzgsNyArOTM4LDcgQEAgVEVTVF9G
KENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBzY3JvbGxNaXNzZXNCYWNrZmFjaW5nQ2hpbGQpCiAK
ICAgICByb290LT5hZGRDaGlsZChjaGlsZC5yZWxlYXNlKCkpOwogICAgIG1faG9zdEltcGwtPnNl
dFJvb3RMYXllcihyb290LnJlbGVhc2UoKSk7Ci0gICAgaW5pdGlhbGl6ZUxheWVyUmVuZGVyZXJB
bmREcmF3RnJhbWUoKTsKKyAgICBpbml0aWFsaXplUmVuZGVyZXJBbmREcmF3RnJhbWUoKTsKIAog
ICAgIC8vIFNjcm9sbCBldmVudCBpcyBpZ25vcmVkIGJlY2F1c2UgdGhlIHNjcm9sbGFibGUgbGF5
ZXIgaXMgbm90IGZhY2luZyB0aGUgdmlld2VyIGFuZCB0aGVyZSBpcwogICAgIC8vIG5vdGhpbmcg
c2Nyb2xsYWJsZSBiZWhpbmQgaXQuCkBAIC05NTksNyArOTU5LDcgQEAgVEVTVF9GKENDTGF5ZXJU
cmVlSG9zdEltcGxUZXN0LCBzY3JvbGxCbG9ja2VkQnlDb250ZW50TGF5ZXIpCiAKICAgICBtX2hv
c3RJbXBsLT5zZXRSb290TGF5ZXIoc2Nyb2xsTGF5ZXIucmVsZWFzZSgpKTsKICAgICBtX2hvc3RJ
bXBsLT5zZXRWaWV3cG9ydFNpemUoc3VyZmFjZVNpemUsIHN1cmZhY2VTaXplKTsKLSAgICBpbml0
aWFsaXplTGF5ZXJSZW5kZXJlckFuZERyYXdGcmFtZSgpOworICAgIGluaXRpYWxpemVSZW5kZXJl
ckFuZERyYXdGcmFtZSgpOwogCiAgICAgLy8gU2Nyb2xsaW5nIGZhaWxzIGJlY2F1c2UgdGhlIGNv
bnRlbnQgbGF5ZXIgaXMgYXNraW5nIHRvIGJlIHNjcm9sbGVkIG9uIHRoZSBtYWluIHRocmVhZC4K
ICAgICBFWFBFQ1RfRVEobV9ob3N0SW1wbC0+c2Nyb2xsQmVnaW4oSW50UG9pbnQoNSwgNSksIEND
SW5wdXRIYW5kbGVyQ2xpZW50OjpXaGVlbCksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxP
bk1haW5UaHJlYWQpOwpAQCAtOTcyLDcgKzk3Miw3IEBAIFRFU1RfRihDQ0xheWVyVHJlZUhvc3RJ
bXBsVGVzdCwgc2Nyb2xsUm9vdEFuZENoYW5nZVBhZ2VTY2FsZU9uTWFpblRocmVhZCkKICAgICBP
d25QdHI8Q0NMYXllckltcGw+IHJvb3QgPSBjcmVhdGVTY3JvbGxhYmxlTGF5ZXIoMSwgc3VyZmFj
ZVNpemUpOwogICAgIG1faG9zdEltcGwtPnNldFJvb3RMYXllcihyb290LnJlbGVhc2UoKSk7CiAg
ICAgbV9ob3N0SW1wbC0+c2V0Vmlld3BvcnRTaXplKHN1cmZhY2VTaXplLCBzdXJmYWNlU2l6ZSk7
Ci0gICAgaW5pdGlhbGl6ZUxheWVyUmVuZGVyZXJBbmREcmF3RnJhbWUoKTsKKyAgICBpbml0aWFs
aXplUmVuZGVyZXJBbmREcmF3RnJhbWUoKTsKIAogICAgIEludFNpemUgc2Nyb2xsRGVsdGEoMCwg
MTApOwogICAgIEludFNpemUgZXhwZWN0ZWRTY3JvbGxEZWx0YShzY3JvbGxEZWx0YSk7CkBAIC0x
MDA0LDcgKzEwMDQsNyBAQCBURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIHNjcm9sbFJv
b3RBbmRDaGFuZ2VQYWdlU2NhbGVPbkltcGxUaHJlYWQpCiAgICAgbV9ob3N0SW1wbC0+c2V0Um9v
dExheWVyKHJvb3QucmVsZWFzZSgpKTsKICAgICBtX2hvc3RJbXBsLT5zZXRWaWV3cG9ydFNpemUo
c3VyZmFjZVNpemUsIHN1cmZhY2VTaXplKTsKICAgICBtX2hvc3RJbXBsLT5zZXRQYWdlU2NhbGVG
YWN0b3JBbmRMaW1pdHMoMSwgMSwgcGFnZVNjYWxlKTsKLSAgICBpbml0aWFsaXplTGF5ZXJSZW5k
ZXJlckFuZERyYXdGcmFtZSgpOworICAgIGluaXRpYWxpemVSZW5kZXJlckFuZERyYXdGcmFtZSgp
OwogCiAgICAgSW50U2l6ZSBzY3JvbGxEZWx0YSgwLCAxMCk7CiAgICAgSW50U2l6ZSBleHBlY3Rl
ZFNjcm9sbERlbHRhKHNjcm9sbERlbHRhKTsKQEAgLTEwODEsNyArMTA4MSw3IEBAIFRFU1RfRihD
Q0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgc2Nyb2xsQ2hpbGRBbmRDaGFuZ2VQYWdlU2NhbGVPbk1h
aW5UaHJlYWQpCiAgICAgcm9vdC0+YWRkQ2hpbGQoY3JlYXRlU2Nyb2xsYWJsZUxheWVyKHNjcm9s
bExheWVySWQsIHN1cmZhY2VTaXplKSk7CiAgICAgbV9ob3N0SW1wbC0+c2V0Um9vdExheWVyKHJv
b3QucmVsZWFzZSgpKTsKICAgICBtX2hvc3RJbXBsLT5zZXRWaWV3cG9ydFNpemUoc3VyZmFjZVNp
emUsIHN1cmZhY2VTaXplKTsKLSAgICBpbml0aWFsaXplTGF5ZXJSZW5kZXJlckFuZERyYXdGcmFt
ZSgpOworICAgIGluaXRpYWxpemVSZW5kZXJlckFuZERyYXdGcmFtZSgpOwogCiAgICAgQ0NMYXll
ckltcGwqIGNoaWxkID0gbV9ob3N0SW1wbC0+cm9vdExheWVyKCktPmNoaWxkcmVuKClbMF0uZ2V0
KCk7CiAKQEAgLTExMjUsNyArMTEyNSw3IEBAIFRFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVz
dCwgc2Nyb2xsQ2hpbGRCZXlvbmRMaW1pdCkKICAgICByb290LT5hZGRDaGlsZChjaGlsZC5yZWxl
YXNlKCkpOwogICAgIG1faG9zdEltcGwtPnNldFJvb3RMYXllcihyb290LnJlbGVhc2UoKSk7CiAg
ICAgbV9ob3N0SW1wbC0+c2V0Vmlld3BvcnRTaXplKHN1cmZhY2VTaXplLCBzdXJmYWNlU2l6ZSk7
Ci0gICAgaW5pdGlhbGl6ZUxheWVyUmVuZGVyZXJBbmREcmF3RnJhbWUoKTsKKyAgICBpbml0aWFs
aXplUmVuZGVyZXJBbmREcmF3RnJhbWUoKTsKICAgICB7CiAgICAgICAgIEludFNpemUgc2Nyb2xs
RGVsdGEoLTgsIC03KTsKICAgICAgICAgRVhQRUNUX0VRKG1faG9zdEltcGwtPnNjcm9sbEJlZ2lu
KEludFBvaW50KDUsIDUpLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6V2hlZWwpLCBDQ0lucHV0SGFu
ZGxlckNsaWVudDo6U2Nyb2xsU3RhcnRlZCk7CkBAIC0xMTU3LDcgKzExNTcsNyBAQCBURVNUX0Yo
Q0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIHNjcm9sbEV2ZW50QnViYmxpbmcpCiAKICAgICBtX2hv
c3RJbXBsLT5zZXRSb290TGF5ZXIocm9vdC5yZWxlYXNlKCkpOwogICAgIG1faG9zdEltcGwtPnNl
dFZpZXdwb3J0U2l6ZShzdXJmYWNlU2l6ZSwgc3VyZmFjZVNpemUpOwotICAgIGluaXRpYWxpemVM
YXllclJlbmRlcmVyQW5kRHJhd0ZyYW1lKCk7CisgICAgaW5pdGlhbGl6ZVJlbmRlcmVyQW5kRHJh
d0ZyYW1lKCk7CiAgICAgewogICAgICAgICBJbnRTaXplIHNjcm9sbERlbHRhKDAsIDQpOwogICAg
ICAgICBFWFBFQ1RfRVEobV9ob3N0SW1wbC0+c2Nyb2xsQmVnaW4oSW50UG9pbnQoNSwgNSksIEND
SW5wdXRIYW5kbGVyQ2xpZW50OjpXaGVlbCksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxT
dGFydGVkKTsKQEAgLTExNzksNyArMTE3OSw3IEBAIFRFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBs
VGVzdCwgc2Nyb2xsQmVmb3JlUmVkcmF3KQogICAgIG1faG9zdEltcGwtPnNldFZpZXdwb3J0U2l6
ZShzdXJmYWNlU2l6ZSwgc3VyZmFjZVNpemUpOwogCiAgICAgLy8gRHJhdyBvbmUgZnJhbWUgYW5k
IHRoZW4gaW1tZWRpYXRlbHkgcmVidWlsZCB0aGUgbGF5ZXIgdHJlZSB0byBtaW1pYyBhIHRyZWUg
c3luY2hyb25pemF0aW9uLgotICAgIGluaXRpYWxpemVMYXllclJlbmRlcmVyQW5kRHJhd0ZyYW1l
KCk7CisgICAgaW5pdGlhbGl6ZVJlbmRlcmVyQW5kRHJhd0ZyYW1lKCk7CiAgICAgbV9ob3N0SW1w
bC0+ZGV0YWNoTGF5ZXJUcmVlKCk7CiAgICAgbV9ob3N0SW1wbC0+c2V0Um9vdExheWVyKGNyZWF0
ZVNjcm9sbGFibGVMYXllcigyLCBzdXJmYWNlU2l6ZSkpOwogCkBAIC0xMTk4LDcgKzExOTgsNyBA
QCBURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIHNjcm9sbEF4aXNBbGlnbmVkUm90YXRl
ZExheWVyKQogCiAgICAgSW50U2l6ZSBzdXJmYWNlU2l6ZSg1MCwgNTApOwogICAgIG1faG9zdElt
cGwtPnNldFZpZXdwb3J0U2l6ZShzdXJmYWNlU2l6ZSwgc3VyZmFjZVNpemUpOwotICAgIGluaXRp
YWxpemVMYXllclJlbmRlcmVyQW5kRHJhd0ZyYW1lKCk7CisgICAgaW5pdGlhbGl6ZVJlbmRlcmVy
QW5kRHJhd0ZyYW1lKCk7CiAKICAgICAvLyBTY3JvbGwgdG8gdGhlIHJpZ2h0IGluIHNjcmVlbiBj
b29yZGluYXRlcyB3aXRoIGEgZ2VzdHVyZS4KICAgICBJbnRTaXplIGdlc3R1cmVTY3JvbGxEZWx0
YSgxMCwgMCk7CkBAIC0xMjQyLDcgKzEyNDIsNyBAQCBURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1w
bFRlc3QsIHNjcm9sbE5vbkF4aXNBbGlnbmVkUm90YXRlZExheWVyKQogCiAgICAgSW50U2l6ZSBz
dXJmYWNlU2l6ZSg1MCwgNTApOwogICAgIG1faG9zdEltcGwtPnNldFZpZXdwb3J0U2l6ZShzdXJm
YWNlU2l6ZSwgc3VyZmFjZVNpemUpOwotICAgIGluaXRpYWxpemVMYXllclJlbmRlcmVyQW5kRHJh
d0ZyYW1lKCk7CisgICAgaW5pdGlhbGl6ZVJlbmRlcmVyQW5kRHJhd0ZyYW1lKCk7CiAKICAgICB7
CiAgICAgICAgIC8vIFNjcm9sbCBkb3duIGluIHNjcmVlbiBjb29yZGluYXRlcyB3aXRoIGEgZ2Vz
dHVyZS4KQEAgLTEyOTUsNyArMTI5NSw3IEBAIFRFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVz
dCwgc2Nyb2xsU2NhbGVkTGF5ZXIpCiAKICAgICBJbnRTaXplIHN1cmZhY2VTaXplKDUwLCA1MCk7
CiAgICAgbV9ob3N0SW1wbC0+c2V0Vmlld3BvcnRTaXplKHN1cmZhY2VTaXplLCBzdXJmYWNlU2l6
ZSk7Ci0gICAgaW5pdGlhbGl6ZUxheWVyUmVuZGVyZXJBbmREcmF3RnJhbWUoKTsKKyAgICBpbml0
aWFsaXplUmVuZGVyZXJBbmREcmF3RnJhbWUoKTsKIAogICAgIC8vIFNjcm9sbCBkb3duIGluIHNj
cmVlbiBjb29yZGluYXRlcyB3aXRoIGEgZ2VzdHVyZS4KICAgICBJbnRTaXplIHNjcm9sbERlbHRh
KDAsIDEwKTsKQEAgLTE2MjIsNyArMTYyMiw3IEBAIFRFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBs
VGVzdCwgYmxlbmRpbmdPZmZXaGVuRHJhd2luZ09wYXF1ZUxheWVycykKIAogVEVTVF9GKENDTGF5
ZXJUcmVlSG9zdEltcGxUZXN0LCB2aWV3cG9ydENvdmVyZWQpCiB7Ci0gICAgbV9ob3N0SW1wbC0+
aW5pdGlhbGl6ZUxheWVyUmVuZGVyZXIoY3JlYXRlQ29udGV4dCgpLCBVbnRocm90dGxlZFVwbG9h
ZGVyKTsKKyAgICBtX2hvc3RJbXBsLT5pbml0aWFsaXplUmVuZGVyZXIoY3JlYXRlQ29udGV4dCgp
LCBVbnRocm90dGxlZFVwbG9hZGVyKTsKICAgICBtX2hvc3RJbXBsLT5zZXRCYWNrZ3JvdW5kQ29s
b3IoU0tfQ29sb3JHUkFZKTsKIAogICAgIEludFNpemUgdmlld3BvcnRTaXplKDEwMDAsIDEwMDAp
OwpAQCAtMTczMyw3ICsxNzMzLDcgQEAgVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBy
ZXNoYXBlTm90Q2FsbGVkVW50aWxEcmF3KQogewogICAgIE93blB0cjxDQ0dyYXBoaWNzQ29udGV4
dD4gY2NDb250ZXh0ID0gRmFrZVdlYkNvbXBvc2l0b3JPdXRwdXRTdXJmYWNlOjpjcmVhdGUoYWRv
cHRQdHIobmV3IFJlc2hhcGVUcmFja2VyQ29udGV4dCkpOwogICAgIFJlc2hhcGVUcmFja2VyQ29u
dGV4dCogcmVzaGFwZVRyYWNrZXIgPSBzdGF0aWNfY2FzdDxSZXNoYXBlVHJhY2tlckNvbnRleHQq
PihjY0NvbnRleHQtPmNvbnRleHQzRCgpKTsKLSAgICBtX2hvc3RJbXBsLT5pbml0aWFsaXplTGF5
ZXJSZW5kZXJlcihjY0NvbnRleHQucmVsZWFzZSgpLCBVbnRocm90dGxlZFVwbG9hZGVyKTsKKyAg
ICBtX2hvc3RJbXBsLT5pbml0aWFsaXplUmVuZGVyZXIoY2NDb250ZXh0LnJlbGVhc2UoKSwgVW50
aHJvdHRsZWRVcGxvYWRlcik7CiAKICAgICBDQ0xheWVySW1wbCogcm9vdCA9IG5ldyBGYWtlRHJh
d2FibGVDQ0xheWVySW1wbCgxKTsKICAgICByb290LT5zZXRBbmNob3JQb2ludChGbG9hdFBvaW50
KDAsIDApKTsKQEAgLTE3ODIsNyArMTc4Miw3IEBAIFRFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBs
VGVzdCwgcGFydGlhbFN3YXBSZWNlaXZlc0RhbWFnZVJlY3QpCiAgICAgQ0NMYXllclRyZWVTZXR0
aW5ncyBzZXR0aW5nczsKICAgICBDQ1NldHRpbmdzOjpzZXRQYXJ0aWFsU3dhcEVuYWJsZWQodHJ1
ZSk7CiAgICAgT3duUHRyPENDTGF5ZXJUcmVlSG9zdEltcGw+IGxheWVyVHJlZUhvc3RJbXBsID0g
Q0NMYXllclRyZWVIb3N0SW1wbDo6Y3JlYXRlKHNldHRpbmdzLCB0aGlzKTsKLSAgICBsYXllclRy
ZWVIb3N0SW1wbC0+aW5pdGlhbGl6ZUxheWVyUmVuZGVyZXIoY2NDb250ZXh0LnJlbGVhc2UoKSwg
VW50aHJvdHRsZWRVcGxvYWRlcik7CisgICAgbGF5ZXJUcmVlSG9zdEltcGwtPmluaXRpYWxpemVS
ZW5kZXJlcihjY0NvbnRleHQucmVsZWFzZSgpLCBVbnRocm90dGxlZFVwbG9hZGVyKTsKICAgICBs
YXllclRyZWVIb3N0SW1wbC0+c2V0Vmlld3BvcnRTaXplKEludFNpemUoNTAwLCA1MDApLCBJbnRT
aXplKDUwMCwgNTAwKSk7CiAKICAgICBDQ0xheWVySW1wbCogcm9vdCA9IG5ldyBGYWtlRHJhd2Fi
bGVDQ0xheWVySW1wbCgxKTsKQEAgLTIwNjcsNyArMjA2Nyw3IEBAIHN0YXRpYyBQYXNzT3duUHRy
PENDTGF5ZXJUcmVlSG9zdEltcGw+IHNldHVwTGF5ZXJzRm9yT3BhY2l0eShib29sIHBhcnRpYWxT
d2FwLCBDCiAKICAgICBDQ0xheWVyVHJlZVNldHRpbmdzIHNldHRpbmdzOwogICAgIE93blB0cjxD
Q0xheWVyVHJlZUhvc3RJbXBsPiBteUhvc3RJbXBsID0gQ0NMYXllclRyZWVIb3N0SW1wbDo6Y3Jl
YXRlKHNldHRpbmdzLCBjbGllbnQpOwotICAgIG15SG9zdEltcGwtPmluaXRpYWxpemVMYXllclJl
bmRlcmVyKGNvbnRleHQucmVsZWFzZSgpLCBVbnRocm90dGxlZFVwbG9hZGVyKTsKKyAgICBteUhv
c3RJbXBsLT5pbml0aWFsaXplUmVuZGVyZXIoY29udGV4dC5yZWxlYXNlKCksIFVudGhyb3R0bGVk
VXBsb2FkZXIpOwogICAgIG15SG9zdEltcGwtPnNldFZpZXdwb3J0U2l6ZShJbnRTaXplKDEwMCwg
MTAwKSwgSW50U2l6ZSgxMDAsIDEwMCkpOwogCiAgICAgLyoKQEAgLTIyMDYsNyArMjIwNiw3IEBA
IFRFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgY29udGV4dExvc3RBbmRSZXN0b3JlZE5v
dGlmaWNhdGlvblNlbnRUb0FsbExheWVyCiAgICAgRVhQRUNUX0ZBTFNFKGxheWVyMS0+ZGlkTG9z
ZUNvbnRleHRDYWxsZWQoKSk7CiAgICAgRVhQRUNUX0ZBTFNFKGxheWVyMi0+ZGlkTG9zZUNvbnRl
eHRDYWxsZWQoKSk7CiAKLSAgICBtX2hvc3RJbXBsLT5pbml0aWFsaXplTGF5ZXJSZW5kZXJlcihj
cmVhdGVDb250ZXh0KCksIFVudGhyb3R0bGVkVXBsb2FkZXIpOworICAgIG1faG9zdEltcGwtPmlu
aXRpYWxpemVSZW5kZXJlcihjcmVhdGVDb250ZXh0KCksIFVudGhyb3R0bGVkVXBsb2FkZXIpOwog
CiAgICAgRVhQRUNUX1RSVUUocm9vdC0+ZGlkTG9zZUNvbnRleHRDYWxsZWQoKSk7CiAgICAgRVhQ
RUNUX1RSVUUobGF5ZXIxLT5kaWRMb3NlQ29udGV4dENhbGxlZCgpKTsKQEAgLTIyMTksNyArMjIx
OSw3IEBAIFRFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgZmluaXNoQWxsUmVuZGVyaW5n
QWZ0ZXJDb250ZXh0TG9zdCkKICAgICBtX2hvc3RJbXBsID0gQ0NMYXllclRyZWVIb3N0SW1wbDo6
Y3JlYXRlKHNldHRpbmdzLCB0aGlzKTsKIAogICAgIC8vIFRoZSBjb250ZXh0IGluaXRpYWxpemF0
aW9uIHdpbGwgZmFpbCwgYnV0IHdlIHNob3VsZCBzdGlsbCBiZSBhYmxlIHRvIGNhbGwgZmluaXNo
QWxsUmVuZGVyaW5nKCkgd2l0aG91dCBhbnkgaWxsIGVmZmVjdHMuCi0gICAgbV9ob3N0SW1wbC0+
aW5pdGlhbGl6ZUxheWVyUmVuZGVyZXIoRmFrZVdlYkNvbXBvc2l0b3JPdXRwdXRTdXJmYWNlOjpj
cmVhdGUoYWRvcHRQdHIobmV3IEZha2VXZWJHcmFwaGljc0NvbnRleHQzRE1ha2VDdXJyZW50RmFp
bHMpKSwgVW50aHJvdHRsZWRVcGxvYWRlcik7CisgICAgbV9ob3N0SW1wbC0+aW5pdGlhbGl6ZVJl
bmRlcmVyKEZha2VXZWJDb21wb3NpdG9yT3V0cHV0U3VyZmFjZTo6Y3JlYXRlKGFkb3B0UHRyKG5l
dyBGYWtlV2ViR3JhcGhpY3NDb250ZXh0M0RNYWtlQ3VycmVudEZhaWxzKSksIFVudGhyb3R0bGVk
VXBsb2FkZXIpOwogICAgIG1faG9zdEltcGwtPmZpbmlzaEFsbFJlbmRlcmluZygpOwogfQogCkBA
IC0yNTAxLDcgKzI1MDEsNyBAQCBURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIGRvbnRV
c2VPbGRSZXNvdXJjZXNBZnRlckxvc3RDb250ZXh0KQogICAgIHJvb3RMYXllci0+YWRkQ2hpbGQo
c2Nyb2xsYmFyTGF5ZXIucmVsZWFzZSgpKTsKIAogICAgIC8vIFVzZSBhIGNvbnRleHQgdGhhdCBz
dXBwb3J0cyBJT1N1cmZhY2VzCi0gICAgbV9ob3N0SW1wbC0+aW5pdGlhbGl6ZUxheWVyUmVuZGVy
ZXIoRmFrZVdlYkNvbXBvc2l0b3JPdXRwdXRTdXJmYWNlOjpjcmVhdGUoYWRvcHRQdHIobmV3IEZh
a2VXZWJHcmFwaGljc0NvbnRleHQzRFdpdGhJT1N1cmZhY2UpKSwgVW50aHJvdHRsZWRVcGxvYWRl
cik7CisgICAgbV9ob3N0SW1wbC0+aW5pdGlhbGl6ZVJlbmRlcmVyKEZha2VXZWJDb21wb3NpdG9y
T3V0cHV0U3VyZmFjZTo6Y3JlYXRlKGFkb3B0UHRyKG5ldyBGYWtlV2ViR3JhcGhpY3NDb250ZXh0
M0RXaXRoSU9TdXJmYWNlKSksIFVudGhyb3R0bGVkVXBsb2FkZXIpOwogCiAgICAgaHdWaWRlb0Zy
YW1lLnNldFRleHR1cmVJZChtX2hvc3RJbXBsLT5yZXNvdXJjZVByb3ZpZGVyKCktPmdyYXBoaWNz
Q29udGV4dDNEKCktPmNyZWF0ZVRleHR1cmUoKSk7CiAKQEAgLTI1MTcsNyArMjUxNyw3IEBAIFRF
U1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgZG9udFVzZU9sZFJlc291cmNlc0FmdGVyTG9z
dENvbnRleHQpCiAKICAgICAvLyBMb3NlIHRoZSBjb250ZXh0LCByZXBsYWNpbmcgaXQgd2l0aCBh
IFN0cmljdFdlYkdyYXBoaWNzQ29udGV4dDNEV2l0aElPU3VyZmFjZSwKICAgICAvLyB0aGF0IHdp
bGwgd2FybiBpZiBhbnkgcmVzb3VyY2UgZnJvbSB0aGUgcHJldmlvdXMgY29udGV4dCBnZXRzIHVz
ZWQuCi0gICAgbV9ob3N0SW1wbC0+aW5pdGlhbGl6ZUxheWVyUmVuZGVyZXIoRmFrZVdlYkNvbXBv
c2l0b3JPdXRwdXRTdXJmYWNlOjpjcmVhdGUoYWRvcHRQdHIobmV3IFN0cmljdFdlYkdyYXBoaWNz
Q29udGV4dDNEV2l0aElPU3VyZmFjZSkpLCBVbnRocm90dGxlZFVwbG9hZGVyKTsKKyAgICBtX2hv
c3RJbXBsLT5pbml0aWFsaXplUmVuZGVyZXIoRmFrZVdlYkNvbXBvc2l0b3JPdXRwdXRTdXJmYWNl
OjpjcmVhdGUoYWRvcHRQdHIobmV3IFN0cmljdFdlYkdyYXBoaWNzQ29udGV4dDNEV2l0aElPU3Vy
ZmFjZSkpLCBVbnRocm90dGxlZFVwbG9hZGVyKTsKIAogICAgIC8vIENyZWF0ZSBkdW1teSByZXNv
dXJjZXMgc28gdGhhdCBsb29raW5nIHVwIGFuIG9sZCByZXNvdXJjZSB3aWxsIGdldCBhbgogICAg
IC8vIGludmFsaWQgdGV4dHVyZSBpZCBtYXBwaW5nLgpAQCAtMjYzMCw3ICsyNjMwLDcgQEAgVEVT
VF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBsYXllcnNGcmVlVGV4dHVyZXMpCiAgICAgLy8g
TG9zZSB0aGUgY29udGV4dCwgcmVwbGFjaW5nIGl0IHdpdGggYSBUcmFja2luZ1dlYkdyYXBoaWNz
Q29udGV4dDNEICh3aGljaCB0aGUgQ0NMYXllclRyZWVIb3N0SW1wbCB0YWtlcyBvd25lcnNoaXAg
b2YpLgogICAgIE93blB0cjxDQ0dyYXBoaWNzQ29udGV4dD4gY2NDb250ZXh0KEZha2VXZWJDb21w
b3NpdG9yT3V0cHV0U3VyZmFjZTo6Y3JlYXRlKGFkb3B0UHRyKG5ldyBUcmFja2luZ1dlYkdyYXBo
aWNzQ29udGV4dDNEKSkpOwogICAgIFRyYWNraW5nV2ViR3JhcGhpY3NDb250ZXh0M0QqIHRyYWNr
aW5nV2ViR3JhcGhpY3NDb250ZXh0ID0gc3RhdGljX2Nhc3Q8VHJhY2tpbmdXZWJHcmFwaGljc0Nv
bnRleHQzRCo+KGNjQ29udGV4dC0+Y29udGV4dDNEKCkpOwotICAgIG1faG9zdEltcGwtPmluaXRp
YWxpemVMYXllclJlbmRlcmVyKGNjQ29udGV4dC5yZWxlYXNlKCksIFVudGhyb3R0bGVkVXBsb2Fk
ZXIpOworICAgIG1faG9zdEltcGwtPmluaXRpYWxpemVSZW5kZXJlcihjY0NvbnRleHQucmVsZWFz
ZSgpLCBVbnRocm90dGxlZFVwbG9hZGVyKTsKIAogICAgIG1faG9zdEltcGwtPnNldFJvb3RMYXll
cihyb290TGF5ZXIucmVsZWFzZSgpKTsKIApAQCAtMjcwMiw3ICsyNzAyLDcgQEAgc3RhdGljIHZv
aWQgc2V0dXBMYXllcnNGb3JUZXh0dXJlQ2FjaGluZyhDQ0xheWVyVHJlZUhvc3RJbXBsKiBsYXll
clRyZWVIb3N0SW1wbCwKIHsKICAgICBPd25QdHI8Q0NHcmFwaGljc0NvbnRleHQ+IGNvbnRleHQg
PSBGYWtlV2ViQ29tcG9zaXRvck91dHB1dFN1cmZhY2U6OmNyZWF0ZShhZG9wdFB0cihuZXcgUGFy
dGlhbFN3YXBDb250ZXh0KSk7CiAKLSAgICBsYXllclRyZWVIb3N0SW1wbC0+aW5pdGlhbGl6ZUxh
eWVyUmVuZGVyZXIoY29udGV4dC5yZWxlYXNlKCksIFVudGhyb3R0bGVkVXBsb2FkZXIpOworICAg
IGxheWVyVHJlZUhvc3RJbXBsLT5pbml0aWFsaXplUmVuZGVyZXIoY29udGV4dC5yZWxlYXNlKCks
IFVudGhyb3R0bGVkVXBsb2FkZXIpOwogICAgIGxheWVyVHJlZUhvc3RJbXBsLT5zZXRWaWV3cG9y
dFNpemUocm9vdFNpemUsIHJvb3RTaXplKTsKIAogICAgIE93blB0cjxDQ0xheWVySW1wbD4gcm9v
dCA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMSk7CkBAIC0yNzI4LDkgKzI3MjgsOSBAQCBzdGF0aWMg
dm9pZCBzZXR1cExheWVyc0ZvclRleHR1cmVDYWNoaW5nKENDTGF5ZXJUcmVlSG9zdEltcGwqIGxh
eWVyVHJlZUhvc3RJbXBsLAogICAgIGFkZERyYXdpbmdMYXllclRvKHN1cmZhY2VMYXllclB0ciwg
NCwgSW50UmVjdCg1LCA1LCByb290U2l6ZS53aWR0aCgpIC0gMjUsIHJvb3RTaXplLmhlaWdodCgp
IC0gMjUpLCAmY2hpbGRQdHIpOwogfQogCi1jbGFzcyBMYXllclJlbmRlcmVyQ2hyb21pdW1XaXRo
UmVsZWFzZVRleHR1cmVzIDogcHVibGljIExheWVyUmVuZGVyZXJDaHJvbWl1bSB7CitjbGFzcyBD
Q1JlbmRlcmVyR0xXaXRoUmVsZWFzZVRleHR1cmVzIDogcHVibGljIENDUmVuZGVyZXJHTCB7CiBw
dWJsaWM6Ci0gICAgdXNpbmcgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpyZWxlYXNlUmVuZGVyUGFz
c1RleHR1cmVzOworICAgIHVzaW5nIENDUmVuZGVyZXJHTDo6cmVsZWFzZVJlbmRlclBhc3NUZXh0
dXJlczsKIH07CiAKIFRFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgdGV4dHVyZUNhY2hp
bmdXaXRoQ2xpcHBpbmcpCkBAIC0yNzQ4LDcgKzI3NDgsNyBAQCBURVNUX0YoQ0NMYXllclRyZWVI
b3N0SW1wbFRlc3QsIHRleHR1cmVDYWNoaW5nV2l0aENsaXBwaW5nKQogCiAgICAgSW50U2l6ZSBy
b290U2l6ZSgxMDAsIDEwMCk7CiAKLSAgICBteUhvc3RJbXBsLT5pbml0aWFsaXplTGF5ZXJSZW5k
ZXJlcihjb250ZXh0LnJlbGVhc2UoKSwgVW50aHJvdHRsZWRVcGxvYWRlcik7CisgICAgbXlIb3N0
SW1wbC0+aW5pdGlhbGl6ZVJlbmRlcmVyKGNvbnRleHQucmVsZWFzZSgpLCBVbnRocm90dGxlZFVw
bG9hZGVyKTsKICAgICBteUhvc3RJbXBsLT5zZXRWaWV3cG9ydFNpemUoSW50U2l6ZShyb290U2l6
ZS53aWR0aCgpLCByb290U2l6ZS5oZWlnaHQoKSksIEludFNpemUocm9vdFNpemUud2lkdGgoKSwg
cm9vdFNpemUuaGVpZ2h0KCkpKTsKIAogICAgIE93blB0cjxDQ0xheWVySW1wbD4gcm9vdCA9IEND
TGF5ZXJJbXBsOjpjcmVhdGUoMSk7CkBAIC0yODYwLDcgKzI4NjAsNyBAQCBURVNUX0YoQ0NMYXll
clRyZWVIb3N0SW1wbFRlc3QsIHRleHR1cmVDYWNoaW5nV2l0aE9jY2x1c2lvbikKIAogICAgIElu
dFNpemUgcm9vdFNpemUoMTAwMCwgMTAwMCk7CiAKLSAgICBteUhvc3RJbXBsLT5pbml0aWFsaXpl
TGF5ZXJSZW5kZXJlcihjb250ZXh0LnJlbGVhc2UoKSwgVW50aHJvdHRsZWRVcGxvYWRlcik7Cisg
ICAgbXlIb3N0SW1wbC0+aW5pdGlhbGl6ZVJlbmRlcmVyKGNvbnRleHQucmVsZWFzZSgpLCBVbnRo
cm90dGxlZFVwbG9hZGVyKTsKICAgICBteUhvc3RJbXBsLT5zZXRWaWV3cG9ydFNpemUoSW50U2l6
ZShyb290U2l6ZS53aWR0aCgpLCByb290U2l6ZS5oZWlnaHQoKSksIEludFNpemUocm9vdFNpemUu
d2lkdGgoKSwgcm9vdFNpemUuaGVpZ2h0KCkpKTsKIAogICAgIE93blB0cjxDQ0xheWVySW1wbD4g
cm9vdCA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMSk7CkBAIC0yOTczLDcgKzI5NzMsNyBAQCBURVNU
X0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIHRleHR1cmVDYWNoaW5nV2l0aE9jY2x1c2lvbkVh
cmx5T3V0KQogCiAgICAgSW50U2l6ZSByb290U2l6ZSgxMDAwLCAxMDAwKTsKIAotICAgIG15SG9z
dEltcGwtPmluaXRpYWxpemVMYXllclJlbmRlcmVyKGNvbnRleHQucmVsZWFzZSgpLCBVbnRocm90
dGxlZFVwbG9hZGVyKTsKKyAgICBteUhvc3RJbXBsLT5pbml0aWFsaXplUmVuZGVyZXIoY29udGV4
dC5yZWxlYXNlKCksIFVudGhyb3R0bGVkVXBsb2FkZXIpOwogICAgIG15SG9zdEltcGwtPnNldFZp
ZXdwb3J0U2l6ZShJbnRTaXplKHJvb3RTaXplLndpZHRoKCksIHJvb3RTaXplLmhlaWdodCgpKSwg
SW50U2l6ZShyb290U2l6ZS53aWR0aCgpLCByb290U2l6ZS5oZWlnaHQoKSkpOwogCiAgICAgT3du
UHRyPENDTGF5ZXJJbXBsPiByb290ID0gQ0NMYXllckltcGw6OmNyZWF0ZSgxKTsKQEAgLTMwODcs
NyArMzA4Nyw3IEBAIFRFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgdGV4dHVyZUNhY2hp
bmdXaXRoT2NjbHVzaW9uRXh0ZXJuYWxPdmVySW50ZXJuYWwpCiAKICAgICBJbnRTaXplIHJvb3RT
aXplKDEwMDAsIDEwMDApOwogCi0gICAgbXlIb3N0SW1wbC0+aW5pdGlhbGl6ZUxheWVyUmVuZGVy
ZXIoY29udGV4dC5yZWxlYXNlKCksIFVudGhyb3R0bGVkVXBsb2FkZXIpOworICAgIG15SG9zdElt
cGwtPmluaXRpYWxpemVSZW5kZXJlcihjb250ZXh0LnJlbGVhc2UoKSwgVW50aHJvdHRsZWRVcGxv
YWRlcik7CiAgICAgbXlIb3N0SW1wbC0+c2V0Vmlld3BvcnRTaXplKEludFNpemUocm9vdFNpemUu
d2lkdGgoKSwgcm9vdFNpemUuaGVpZ2h0KCkpLCBJbnRTaXplKHJvb3RTaXplLndpZHRoKCksIHJv
b3RTaXplLmhlaWdodCgpKSk7CiAKICAgICBPd25QdHI8Q0NMYXllckltcGw+IHJvb3QgPSBDQ0xh
eWVySW1wbDo6Y3JlYXRlKDEpOwpAQCAtMzE3MCw3ICszMTcwLDcgQEAgVEVTVF9GKENDTGF5ZXJU
cmVlSG9zdEltcGxUZXN0LCB0ZXh0dXJlQ2FjaGluZ1dpdGhPY2NsdXNpb25FeHRlcm5hbE5vdEFs
aWduZWQpCiAKICAgICBJbnRTaXplIHJvb3RTaXplKDEwMDAsIDEwMDApOwogCi0gICAgbXlIb3N0
SW1wbC0+aW5pdGlhbGl6ZUxheWVyUmVuZGVyZXIoY29udGV4dC5yZWxlYXNlKCksIFVudGhyb3R0
bGVkVXBsb2FkZXIpOworICAgIG15SG9zdEltcGwtPmluaXRpYWxpemVSZW5kZXJlcihjb250ZXh0
LnJlbGVhc2UoKSwgVW50aHJvdHRsZWRVcGxvYWRlcik7CiAgICAgbXlIb3N0SW1wbC0+c2V0Vmll
d3BvcnRTaXplKEludFNpemUocm9vdFNpemUud2lkdGgoKSwgcm9vdFNpemUuaGVpZ2h0KCkpLCBJ
bnRTaXplKHJvb3RTaXplLndpZHRoKCksIHJvb3RTaXplLmhlaWdodCgpKSk7CiAKICAgICBPd25Q
dHI8Q0NMYXllckltcGw+IHJvb3QgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDEpOwpAQCAtMzI1NSw3
ICszMjU1LDcgQEAgVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCB0ZXh0dXJlQ2FjaGlu
Z1dpdGhPY2NsdXNpb25QYXJ0aWFsU3dhcCkKIAogICAgIEludFNpemUgcm9vdFNpemUoMTAwMCwg
MTAwMCk7CiAKLSAgICBteUhvc3RJbXBsLT5pbml0aWFsaXplTGF5ZXJSZW5kZXJlcihjb250ZXh0
LnJlbGVhc2UoKSwgVW50aHJvdHRsZWRVcGxvYWRlcik7CisgICAgbXlIb3N0SW1wbC0+aW5pdGlh
bGl6ZVJlbmRlcmVyKGNvbnRleHQucmVsZWFzZSgpLCBVbnRocm90dGxlZFVwbG9hZGVyKTsKICAg
ICBteUhvc3RJbXBsLT5zZXRWaWV3cG9ydFNpemUoSW50U2l6ZShyb290U2l6ZS53aWR0aCgpLCBy
b290U2l6ZS5oZWlnaHQoKSksIEludFNpemUocm9vdFNpemUud2lkdGgoKSwgcm9vdFNpemUuaGVp
Z2h0KCkpKTsKIAogICAgIE93blB0cjxDQ0xheWVySW1wbD4gcm9vdCA9IENDTGF5ZXJJbXBsOjpj
cmVhdGUoMSk7CkBAIC0zMzczLDcgKzMzNzMsNyBAQCBURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1w
bFRlc3QsIHRleHR1cmVDYWNoaW5nV2l0aFNjaXNzb3IpCiAgICAgSW50UmVjdCBncmFuZENoaWxk
UmVjdCg1LCA1LCAxNTAsIDE1MCk7CiAKICAgICBPd25QdHI8Q0NHcmFwaGljc0NvbnRleHQ+IGNv
bnRleHQgPSBGYWtlV2ViQ29tcG9zaXRvck91dHB1dFN1cmZhY2U6OmNyZWF0ZShhZG9wdFB0cihu
ZXcgUGFydGlhbFN3YXBDb250ZXh0KSk7Ci0gICAgbXlIb3N0SW1wbC0+aW5pdGlhbGl6ZUxheWVy
UmVuZGVyZXIoY29udGV4dC5yZWxlYXNlKCksIFVudGhyb3R0bGVkVXBsb2FkZXIpOworICAgIG15
SG9zdEltcGwtPmluaXRpYWxpemVSZW5kZXJlcihjb250ZXh0LnJlbGVhc2UoKSwgVW50aHJvdHRs
ZWRVcGxvYWRlcik7CiAKICAgICByb290LT5zZXRBbmNob3JQb2ludChGbG9hdFBvaW50KDAsIDAp
KTsKICAgICByb290LT5zZXRQb3NpdGlvbihGbG9hdFBvaW50KHJvb3RSZWN0LngoKSwgcm9vdFJl
Y3QueSgpKSk7CkBAIC0zNDA4LDcgKzM0MDgsNyBAQCBURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1w
bFRlc3QsIHRleHR1cmVDYWNoaW5nV2l0aFNjaXNzb3IpCiAgICAgbXlIb3N0SW1wbC0+c2V0Um9v
dExheWVyKHJvb3QucmVsZWFzZSgpKTsKICAgICBteUhvc3RJbXBsLT5zZXRWaWV3cG9ydFNpemUo
cm9vdFJlY3Quc2l6ZSgpLCByb290UmVjdC5zaXplKCkpOwogCi0gICAgRVhQRUNUX0ZBTFNFKG15
SG9zdEltcGwtPmxheWVyUmVuZGVyZXIoKS0+aGF2ZUNhY2hlZFJlc291cmNlc0ZvclJlbmRlclBh
c3NJZChjaGlsZFB0ci0+aWQoKSkpOworICAgIEVYUEVDVF9GQUxTRShteUhvc3RJbXBsLT5yZW5k
ZXJlcigpLT5oYXZlQ2FjaGVkUmVzb3VyY2VzRm9yUmVuZGVyUGFzc0lkKGNoaWxkUHRyLT5pZCgp
KSk7CiAKICAgICB7CiAgICAgICAgIENDTGF5ZXJUcmVlSG9zdEltcGw6OkZyYW1lRGF0YSBmcmFt
ZTsKQEAgLTM0MTgsNyArMzQxOCw3IEBAIFRFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwg
dGV4dHVyZUNhY2hpbmdXaXRoU2Npc3NvcikKICAgICB9CiAKICAgICAvLyBXZSBzaG91bGQgaGF2
ZSBjYWNoZWQgdGV4dHVyZXMgZm9yIHN1cmZhY2UgMi4KLSAgICBFWFBFQ1RfVFJVRShteUhvc3RJ
bXBsLT5sYXllclJlbmRlcmVyKCktPmhhdmVDYWNoZWRSZXNvdXJjZXNGb3JSZW5kZXJQYXNzSWQo
Y2hpbGRQdHItPmlkKCkpKTsKKyAgICBFWFBFQ1RfVFJVRShteUhvc3RJbXBsLT5yZW5kZXJlcigp
LT5oYXZlQ2FjaGVkUmVzb3VyY2VzRm9yUmVuZGVyUGFzc0lkKGNoaWxkUHRyLT5pZCgpKSk7CiAK
ICAgICB7CiAgICAgICAgIENDTGF5ZXJUcmVlSG9zdEltcGw6OkZyYW1lRGF0YSBmcmFtZTsKQEAg
LTM0MjgsNyArMzQyOCw3IEBAIFRFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgdGV4dHVy
ZUNhY2hpbmdXaXRoU2Npc3NvcikKICAgICB9CiAKICAgICAvLyBXZSBzaG91bGQgc3RpbGwgaGF2
ZSBjYWNoZWQgdGV4dHVyZXMgZm9yIHN1cmZhY2UgMiBhZnRlciBkcmF3aW5nIHdpdGggbm8gZGFt
YWdlLgotICAgIEVYUEVDVF9UUlVFKG15SG9zdEltcGwtPmxheWVyUmVuZGVyZXIoKS0+aGF2ZUNh
Y2hlZFJlc291cmNlc0ZvclJlbmRlclBhc3NJZChjaGlsZFB0ci0+aWQoKSkpOworICAgIEVYUEVD
VF9UUlVFKG15SG9zdEltcGwtPnJlbmRlcmVyKCktPmhhdmVDYWNoZWRSZXNvdXJjZXNGb3JSZW5k
ZXJQYXNzSWQoY2hpbGRQdHItPmlkKCkpKTsKIAogICAgIC8vIERhbWFnZSBhIHNpbmdsZSB0aWxl
IG9mIHN1cmZhY2UgMi4KICAgICBjaGlsZFB0ci0+c2V0VXBkYXRlUmVjdChJbnRSZWN0KDEwLCAx
MCwgMTAsIDEwKSk7CkBAIC0zNDQxLDcgKzM0NDEsNyBAQCBURVNUX0YoQ0NMYXllclRyZWVIb3N0
SW1wbFRlc3QsIHRleHR1cmVDYWNoaW5nV2l0aFNjaXNzb3IpCiAgICAgfQogCiAgICAgLy8gV2Ug
c2hvdWxkIGhhdmUgYSBjYWNoZWQgdGV4dHVyZSBmb3Igc3VyZmFjZSAyIGFnYWluIGV2ZW4gdGhv
dWdoIGl0IHdhcyBkYW1hZ2VkLgotICAgIEVYUEVDVF9UUlVFKG15SG9zdEltcGwtPmxheWVyUmVu
ZGVyZXIoKS0+aGF2ZUNhY2hlZFJlc291cmNlc0ZvclJlbmRlclBhc3NJZChjaGlsZFB0ci0+aWQo
KSkpOworICAgIEVYUEVDVF9UUlVFKG15SG9zdEltcGwtPnJlbmRlcmVyKCktPmhhdmVDYWNoZWRS
ZXNvdXJjZXNGb3JSZW5kZXJQYXNzSWQoY2hpbGRQdHItPmlkKCkpKTsKIH0KIAogVEVTVF9GKEND
TGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBzdXJmYWNlVGV4dHVyZUNhY2hpbmcpCkBAIC0zNTM3LDcg
KzM1MzcsNyBAQCBURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIHN1cmZhY2VUZXh0dXJl
Q2FjaGluZykKIAogICAgIC8vIENoYW5nZSBvcGFjaXR5IGFnYWluLCBhbmQgZXZpY3QgdGhlIGNh
Y2hlZCBzdXJmYWNlIHRleHR1cmUuCiAgICAgc3VyZmFjZUxheWVyUHRyLT5zZXRPcGFjaXR5KDAu
NWYpOwotICAgIHN0YXRpY19jYXN0PExheWVyUmVuZGVyZXJDaHJvbWl1bVdpdGhSZWxlYXNlVGV4
dHVyZXMqPihteUhvc3RJbXBsLT5sYXllclJlbmRlcmVyKCkpLT5yZWxlYXNlUmVuZGVyUGFzc1Rl
eHR1cmVzKCk7CisgICAgc3RhdGljX2Nhc3Q8Q0NSZW5kZXJlckdMV2l0aFJlbGVhc2VUZXh0dXJl
cyo+KG15SG9zdEltcGwtPnJlbmRlcmVyKCkpLT5yZWxlYXNlUmVuZGVyUGFzc1RleHR1cmVzKCk7
CiAKICAgICAvLyBDaGFuZ2Ugb3BhY2l0eSBhbmQgZHJhdwogICAgIHN1cmZhY2VMYXllclB0ci0+
c2V0T3BhY2l0eSgwLjZmKTsKQEAgLTM1NTksNyArMzU1OSw3IEBAIFRFU1RfRihDQ0xheWVyVHJl
ZUhvc3RJbXBsVGVzdCwgc3VyZmFjZVRleHR1cmVDYWNoaW5nKQogICAgICAgICBFWFBFQ1RfVFJV
RSh0YXJnZXRQYXNzLT5kYW1hZ2VSZWN0KCkuaXNFbXB0eSgpKTsKIAogICAgICAgICAvLyBXYXMg
b3VyIHN1cmZhY2UgZXZpY3RlZD8KLSAgICAgICAgRVhQRUNUX0ZBTFNFKG15SG9zdEltcGwtPmxh
eWVyUmVuZGVyZXIoKS0+aGF2ZUNhY2hlZFJlc291cmNlc0ZvclJlbmRlclBhc3NJZCh0YXJnZXRQ
YXNzLT5pZCgpKSk7CisgICAgICAgIEVYUEVDVF9GQUxTRShteUhvc3RJbXBsLT5yZW5kZXJlcigp
LT5oYXZlQ2FjaGVkUmVzb3VyY2VzRm9yUmVuZGVyUGFzc0lkKHRhcmdldFBhc3MtPmlkKCkpKTsK
IAogICAgICAgICBteUhvc3RJbXBsLT5kcmF3TGF5ZXJzKGZyYW1lKTsKICAgICAgICAgbXlIb3N0
SW1wbC0+ZGlkRHJhd0FsbExheWVycyhmcmFtZSk7CkBAIC0zNzAzLDcgKzM3MDMsNyBAQCBURVNU
X0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIHN1cmZhY2VUZXh0dXJlQ2FjaGluZ05vUGFydGlh
bFN3YXApCiAKICAgICAvLyBDaGFuZ2Ugb3BhY2l0eSBhZ2FpbiwgYW5kIGV2aWN0IHRoZSBjYWNo
ZWQgc3VyZmFjZSB0ZXh0dXJlLgogICAgIHN1cmZhY2VMYXllclB0ci0+c2V0T3BhY2l0eSgwLjVm
KTsKLSAgICBzdGF0aWNfY2FzdDxMYXllclJlbmRlcmVyQ2hyb21pdW1XaXRoUmVsZWFzZVRleHR1
cmVzKj4obXlIb3N0SW1wbC0+bGF5ZXJSZW5kZXJlcigpKS0+cmVsZWFzZVJlbmRlclBhc3NUZXh0
dXJlcygpOworICAgIHN0YXRpY19jYXN0PENDUmVuZGVyZXJHTFdpdGhSZWxlYXNlVGV4dHVyZXMq
PihteUhvc3RJbXBsLT5yZW5kZXJlcigpKS0+cmVsZWFzZVJlbmRlclBhc3NUZXh0dXJlcygpOwog
CiAgICAgLy8gQ2hhbmdlIG9wYWNpdHkgYW5kIGRyYXcKICAgICBzdXJmYWNlTGF5ZXJQdHItPnNl
dE9wYWNpdHkoMC42Zik7CkBAIC0zNzI1LDcgKzM3MjUsNyBAQCBURVNUX0YoQ0NMYXllclRyZWVI
b3N0SW1wbFRlc3QsIHN1cmZhY2VUZXh0dXJlQ2FjaGluZ05vUGFydGlhbFN3YXApCiAgICAgICAg
IEVYUEVDVF9UUlVFKHRhcmdldFBhc3MtPmRhbWFnZVJlY3QoKS5pc0VtcHR5KCkpOwogCiAgICAg
ICAgIC8vIFdhcyBvdXIgc3VyZmFjZSBldmljdGVkPwotICAgICAgICBFWFBFQ1RfRkFMU0UobXlI
b3N0SW1wbC0+bGF5ZXJSZW5kZXJlcigpLT5oYXZlQ2FjaGVkUmVzb3VyY2VzRm9yUmVuZGVyUGFz
c0lkKHRhcmdldFBhc3MtPmlkKCkpKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKG15SG9zdEltcGwt
PnJlbmRlcmVyKCktPmhhdmVDYWNoZWRSZXNvdXJjZXNGb3JSZW5kZXJQYXNzSWQodGFyZ2V0UGFz
cy0+aWQoKSkpOwogCiAgICAgICAgIG15SG9zdEltcGwtPmRyYXdMYXllcnMoZnJhbWUpOwogICAg
ICAgICBteUhvc3RJbXBsLT5kaWREcmF3QWxsTGF5ZXJzKGZyYW1lKTsKQEAgLTM4MTksNyArMzgx
OSw3IEBAIHByb3RlY3RlZDoKICAgICBDQ1Rlc3RSZW5kZXJQYXNzKENDUmVuZGVyU3VyZmFjZSog
cmVuZGVyU3VyZmFjZSwgaW50IGlkKSA6IENDUmVuZGVyUGFzcyhyZW5kZXJTdXJmYWNlLCBpZCkg
eyB9CiB9OwogCi1jbGFzcyBDQ1Rlc3RSZW5kZXJlciA6IHB1YmxpYyBMYXllclJlbmRlcmVyQ2hy
b21pdW0sIHB1YmxpYyBDQ1JlbmRlcmVyQ2xpZW50IHsKK2NsYXNzIENDVGVzdFJlbmRlcmVyIDog
cHVibGljIENDUmVuZGVyZXJHTCwgcHVibGljIENDUmVuZGVyZXJDbGllbnQgewogcHVibGljOgog
ICAgIHN0YXRpYyBQYXNzT3duUHRyPENDVGVzdFJlbmRlcmVyPiBjcmVhdGUoQ0NSZXNvdXJjZVBy
b3ZpZGVyKiByZXNvdXJjZVByb3ZpZGVyKQogICAgIHsKQEAgLTM4NDUsNyArMzg0NSw3IEBAIHB1
YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc2V0TWVtb3J5QWxsb2NhdGlvbkxpbWl0Qnl0ZXMoc2l6
ZV90KSBPVkVSUklERSB7IH0KIAogcHJvdGVjdGVkOgotICAgIENDVGVzdFJlbmRlcmVyKENDUmVz
b3VyY2VQcm92aWRlciogcmVzb3VyY2VQcm92aWRlcikgOiBMYXllclJlbmRlcmVyQ2hyb21pdW0o
dGhpcywgcmVzb3VyY2VQcm92aWRlciwgVW50aHJvdHRsZWRVcGxvYWRlcikgeyB9CisgICAgQ0NU
ZXN0UmVuZGVyZXIoQ0NSZXNvdXJjZVByb3ZpZGVyKiByZXNvdXJjZVByb3ZpZGVyKSA6IENDUmVu
ZGVyZXJHTCh0aGlzLCByZXNvdXJjZVByb3ZpZGVyLCBVbnRocm90dGxlZFVwbG9hZGVyKSB7IH0K
IAogcHJpdmF0ZToKICAgICBDQ0xheWVyVHJlZVNldHRpbmdzIG1fc2V0dGluZ3M7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdFRlc3QuY3Bw
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RUZXN0LmNwcApp
bmRleCA1MjAyMjA4Yjk0ZjNkNWVmYTdiYWVmODBiMmUzYTYyYTU4ZTNiZTliLi5mZDcxODczYTBl
NDhlZGE1Y2IwYWNiN2UyNmQ0ZjkwNGQ4YTJhMzA0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdFRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0VGVzdC5jcHAKQEAgLTE2MjUsNyArMTYy
NSw3IEBAIHB1YmxpYzoKIAogICAgICAgICBtX2xheWVyVHJlZUhvc3QtPnNldFJvb3RMYXllcihy
b290TGF5ZXIpOwogICAgICAgICBtX2xheWVyVHJlZUhvc3QtPnNldFZpZXdwb3J0U2l6ZShyb290
TGF5ZXItPmJvdW5kcygpLCByb290TGF5ZXItPmJvdW5kcygpKTsKLSAgICAgICAgQVNTRVJUX1RS
VUUobV9sYXllclRyZWVIb3N0LT5pbml0aWFsaXplTGF5ZXJSZW5kZXJlcklmTmVlZGVkKCkpOwor
ICAgICAgICBBU1NFUlRfVFJVRShtX2xheWVyVHJlZUhvc3QtPmluaXRpYWxpemVSZW5kZXJlcklm
TmVlZGVkKCkpOwogICAgICAgICBDQ1RleHR1cmVVcGRhdGVRdWV1ZSBxdWV1ZTsKICAgICAgICAg
bV9sYXllclRyZWVIb3N0LT51cGRhdGVMYXllcnMocXVldWUsIHN0ZDo6bnVtZXJpY19saW1pdHM8
c2l6ZV90Pjo6bWF4KCkpOwogICAgICAgICBtX2xheWVyVHJlZUhvc3QtPmNvbW1pdENvbXBsZXRl
KCk7CkBAIC0xODMzLDcgKzE4MzMsNyBAQCBwdWJsaWM6CiAKICAgICAgICAgbV9sYXllclRyZWVI
b3N0LT5zZXRSb290TGF5ZXIocm9vdExheWVyKTsKICAgICAgICAgbV9sYXllclRyZWVIb3N0LT5z
ZXRWaWV3cG9ydFNpemUocm9vdExheWVyLT5ib3VuZHMoKSwgcm9vdExheWVyLT5ib3VuZHMoKSk7
Ci0gICAgICAgIEFTU0VSVF9UUlVFKG1fbGF5ZXJUcmVlSG9zdC0+aW5pdGlhbGl6ZUxheWVyUmVu
ZGVyZXJJZk5lZWRlZCgpKTsKKyAgICAgICAgQVNTRVJUX1RSVUUobV9sYXllclRyZWVIb3N0LT5p
bml0aWFsaXplUmVuZGVyZXJJZk5lZWRlZCgpKTsKICAgICAgICAgQ0NUZXh0dXJlVXBkYXRlUXVl
dWUgcXVldWU7CiAgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+dXBkYXRlTGF5ZXJzKHF1ZXVlLCBz
dGQ6Om51bWVyaWNfbGltaXRzPHNpemVfdD46Om1heCgpKTsKICAgICAgICAgbV9sYXllclRyZWVI
b3N0LT5jb21taXRDb21wbGV0ZSgpOwpAQCAtMTkyMiw3ICsxOTIyLDcgQEAgcHVibGljOgogCiAg
ICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+c2V0Um9vdExheWVyKGxheWVyc1swXS5nZXQoKSk7CiAg
ICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+c2V0Vmlld3BvcnRTaXplKGxheWVyc1swXS0+Ym91bmRz
KCksIGxheWVyc1swXS0+Ym91bmRzKCkpOwotICAgICAgICBBU1NFUlRfVFJVRShtX2xheWVyVHJl
ZUhvc3QtPmluaXRpYWxpemVMYXllclJlbmRlcmVySWZOZWVkZWQoKSk7CisgICAgICAgIEFTU0VS
VF9UUlVFKG1fbGF5ZXJUcmVlSG9zdC0+aW5pdGlhbGl6ZVJlbmRlcmVySWZOZWVkZWQoKSk7CiAg
ICAgICAgIENDVGV4dHVyZVVwZGF0ZVF1ZXVlIHF1ZXVlOwogICAgICAgICBtX2xheWVyVHJlZUhv
c3QtPnVwZGF0ZUxheWVycyhxdWV1ZSwgc3RkOjpudW1lcmljX2xpbWl0czxzaXplX3Q+OjptYXgo
KSk7CiAgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+Y29tbWl0Q29tcGxldGUoKTsKQEAgLTIzMDAs
NyArMjMwMCw3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBkcmF3TGF5ZXJzT25DQ1Ro
cmVhZChDQ0xheWVyVHJlZUhvc3RJbXBsKiBob3N0SW1wbCkKICAgICB7Ci0gICAgICAgIENDUmVu
ZGVyZXIqIHJlbmRlcmVyID0gaG9zdEltcGwtPmxheWVyUmVuZGVyZXIoKTsKKyAgICAgICAgQ0NS
ZW5kZXJlciogcmVuZGVyZXIgPSBob3N0SW1wbC0+cmVuZGVyZXIoKTsKICAgICAgICAgdW5zaWdu
ZWQgc3VyZmFjZTFSZW5kZXJQYXNzSWQgPSBob3N0SW1wbC0+cm9vdExheWVyKCktPmNoaWxkcmVu
KClbMF0tPmlkKCk7CiAgICAgICAgIHVuc2lnbmVkIHN1cmZhY2UyUmVuZGVyUGFzc0lkID0gaG9z
dEltcGwtPnJvb3RMYXllcigpLT5jaGlsZHJlbigpWzBdLT5jaGlsZHJlbigpWzBdLT5pZCgpOwog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDUmVuZGVyZXJHTFRl
c3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ1JlbmRlcmVyR0xUZXN0LmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5mZmFlNmFjNDg4MDE2ZTk4ZjQ0Mjk2ZGY2OTUxYWRlNWIxMjVmZTlmCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ1JlbmRlcmVy
R0xUZXN0LmNwcApAQCAtMCwwICsxLDQ0OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
CisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkNDUmVuZGVyZXJHTC5oIgorCisjaW5jbHVkZSAiQ0NEcmF3UXVh
ZC5oIgorI2luY2x1ZGUgIkNDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlci5oIgorI2luY2x1ZGUg
IkNDU2V0dGluZ3MuaCIKKyNpbmNsdWRlICJDQ1NpbmdsZVRocmVhZFByb3h5LmgiCisjaW5jbHVk
ZSAiQ0NUZXN0Q29tbW9uLmgiCisjaW5jbHVkZSAiRmFrZVdlYkNvbXBvc2l0b3JPdXRwdXRTdXJm
YWNlLmgiCisjaW5jbHVkZSAiRmFrZVdlYkdyYXBoaWNzQ29udGV4dDNELmgiCisjaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0M0QuaCIKKyNpbmNsdWRlIDxnbW9jay9nbW9jay5oPgorI2luY2x1ZGUg
PGd0ZXN0L2d0ZXN0Lmg+CisjaW5jbHVkZSA8cHVibGljL1dlYkNvbXBvc2l0b3IuaD4KKwordXNp
bmcgbmFtZXNwYWNlIFdlYkNvcmU7Cit1c2luZyBuYW1lc3BhY2UgV2ViS2l0OwordXNpbmcgbmFt
ZXNwYWNlIFdlYktpdFRlc3RzOworCitjbGFzcyBGcmFtZUNvdW50aW5nTWVtb3J5QWxsb2NhdGlv
blNldHRpbmdDb250ZXh0IDogcHVibGljIEZha2VXZWJHcmFwaGljc0NvbnRleHQzRCB7CitwdWJs
aWM6CisgICAgRnJhbWVDb3VudGluZ01lbW9yeUFsbG9jYXRpb25TZXR0aW5nQ29udGV4dCgpIDog
bV9mcmFtZSgwKSB7IH0KKworICAgIC8vIFdlYkdyYXBoaWNzQ29udGV4dDNEIG1ldGhvZHMuCisK
KyAgICAvLyBUaGlzIG1ldGhvZCB3b3VsZCBub3JtYWxseSBkbyBhIGdsU3dhcEJ1ZmZlcnMgdW5k
ZXIgdGhlIGhvb2QuCisgICAgdmlydHVhbCB2b2lkIHByZXBhcmVUZXh0dXJlKCkgeyBtX2ZyYW1l
Kys7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0TWVtb3J5QWxsb2NhdGlvbkNoYW5nZWRDYWxsYmFj
a0NIUk9NSVVNKFdlYkdyYXBoaWNzTWVtb3J5QWxsb2NhdGlvbkNoYW5nZWRDYWxsYmFja0NIUk9N
SVVNKiBjYWxsYmFjaykgeyBtX21lbW9yeUFsbG9jYXRpb25DaGFuZ2VkQ2FsbGJhY2sgPSBjYWxs
YmFjazsgfQorICAgIHZpcnR1YWwgV2ViU3RyaW5nIGdldFN0cmluZyhXZWJLaXQ6OldHQzNEZW51
bSBuYW1lKQorICAgIHsKKyAgICAgICAgaWYgKG5hbWUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkVY
VEVOU0lPTlMpCisgICAgICAgICAgICByZXR1cm4gV2ViU3RyaW5nKCJHTF9DSFJPTUlVTV9zZXRf
dmlzaWJpbGl0eSBHTF9DSFJPTUlVTV9ncHVfbWVtb3J5X21hbmFnZXIgR0xfQ0hST01JVU1fZGlz
Y2FyZF9mcmFtZWJ1ZmZlciIpOworICAgICAgICByZXR1cm4gV2ViU3RyaW5nKCk7CisgICAgfQor
CisgICAgLy8gTWV0aG9kcyBhZGRlZCBmb3IgdGVzdC4KKyAgICBpbnQgZnJhbWVDb3VudCgpIHsg
cmV0dXJuIG1fZnJhbWU7IH0KKyAgICB2b2lkIHNldE1lbW9yeUFsbG9jYXRpb24oV2ViR3JhcGhp
Y3NNZW1vcnlBbGxvY2F0aW9uIGFsbG9jYXRpb24pCisgICAgeworICAgICAgICBBU1NFUlQoQ0NQ
cm94eTo6aXNJbXBsVGhyZWFkKCkpOworICAgICAgICAvLyBJbiBzaW5nbGUgdGhyZWFkZWQgbW9k
ZSB3ZSBleHBlY3QgdGhpcyBjYWxsYmFjayBvbiBtYWluIHRocmVhZC4KKyAgICAgICAgRGVidWdT
Y29wZWRTZXRNYWluVGhyZWFkIG1haW47CisgICAgICAgIG1fbWVtb3J5QWxsb2NhdGlvbkNoYW5n
ZWRDYWxsYmFjay0+b25NZW1vcnlBbGxvY2F0aW9uQ2hhbmdlZChhbGxvY2F0aW9uKTsKKyAgICB9
CisKK3ByaXZhdGU6CisgICAgaW50IG1fZnJhbWU7CisgICAgV2ViR3JhcGhpY3NNZW1vcnlBbGxv
Y2F0aW9uQ2hhbmdlZENhbGxiYWNrQ0hST01JVU0qIG1fbWVtb3J5QWxsb2NhdGlvbkNoYW5nZWRD
YWxsYmFjazsKK307CisKK2NsYXNzIEZha2VDQ1JlbmRlcmVyQ2xpZW50IDogcHVibGljIENDUmVu
ZGVyZXJDbGllbnQgeworcHVibGljOgorICAgIEZha2VDQ1JlbmRlcmVyQ2xpZW50KCkKKyAgICAg
ICAgOiBtX3NldEZ1bGxSb290TGF5ZXJEYW1hZ2VDb3VudCgwKQorICAgICAgICAsIG1fcm9vdExh
eWVyKENDTGF5ZXJJbXBsOjpjcmVhdGUoMSkpCisgICAgICAgICwgbV9tZW1vcnlBbGxvY2F0aW9u
TGltaXRCeXRlcyhDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OmRlZmF1bHRNZW1vcnlBbGxv
Y2F0aW9uTGltaXQoKSkKKyAgICB7CisgICAgICAgIG1fcm9vdExheWVyLT5jcmVhdGVSZW5kZXJT
dXJmYWNlKCk7CisgICAgICAgIE93blB0cjxDQ1JlbmRlclBhc3M+IHJvb3RSZW5kZXJQYXNzID0g
Q0NSZW5kZXJQYXNzOjpjcmVhdGUobV9yb290TGF5ZXItPnJlbmRlclN1cmZhY2UoKSwgbV9yb290
TGF5ZXItPmlkKCkpOworICAgICAgICBtX3JlbmRlclBhc3Nlc0luRHJhd09yZGVyLmFwcGVuZChy
b290UmVuZGVyUGFzcy5nZXQoKSk7CisgICAgICAgIG1fcmVuZGVyUGFzc2VzLnNldChtX3Jvb3RM
YXllci0+aWQoKSwgcm9vdFJlbmRlclBhc3MucmVsZWFzZSgpKTsKKyAgICB9CisKKyAgICAvLyBD
Q1JlbmRlcmVyQ2xpZW50IG1ldGhvZHMuCisgICAgdmlydHVhbCBjb25zdCBJbnRTaXplJiBkZXZp
Y2VWaWV3cG9ydFNpemUoKSBjb25zdCBPVkVSUklERSB7IHN0YXRpYyBJbnRTaXplIGZha2VTaXpl
KDEsIDEpOyByZXR1cm4gZmFrZVNpemU7IH0KKyAgICB2aXJ0dWFsIGNvbnN0IENDTGF5ZXJUcmVl
U2V0dGluZ3MmIHNldHRpbmdzKCkgY29uc3QgT1ZFUlJJREUgeyBzdGF0aWMgQ0NMYXllclRyZWVT
ZXR0aW5ncyBmYWtlU2V0dGluZ3M7IHJldHVybiBmYWtlU2V0dGluZ3M7IH0KKyAgICB2aXJ0dWFs
IHZvaWQgZGlkTG9zZUNvbnRleHQoKSBPVkVSUklERSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgb25T
d2FwQnVmZmVyc0NvbXBsZXRlKCkgT1ZFUlJJREUgeyB9CisgICAgdmlydHVhbCB2b2lkIHNldEZ1
bGxSb290TGF5ZXJEYW1hZ2UoKSBPVkVSUklERSB7IG1fc2V0RnVsbFJvb3RMYXllckRhbWFnZUNv
dW50Kys7IH0KKyAgICB2aXJ0dWFsIHZvaWQgcmVsZWFzZUNvbnRlbnRzVGV4dHVyZXMoKSBPVkVS
UklERSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0TWVtb3J5QWxsb2NhdGlvbkxpbWl0Qnl0ZXMo
c2l6ZV90IGJ5dGVzKSBPVkVSUklERSB7IG1fbWVtb3J5QWxsb2NhdGlvbkxpbWl0Qnl0ZXMgPSBi
eXRlczsgfQorCisgICAgLy8gTWV0aG9kcyBhZGRlZCBmb3IgdGVzdC4KKyAgICBpbnQgc2V0RnVs
bFJvb3RMYXllckRhbWFnZUNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9zZXRGdWxsUm9vdExheWVy
RGFtYWdlQ291bnQ7IH0KKworICAgIENDUmVuZGVyUGFzcyogcm9vdFJlbmRlclBhc3MoKSB7IHJl
dHVybiBtX3JlbmRlclBhc3Nlc0luRHJhd09yZGVyLmxhc3QoKTsgfQorICAgIGNvbnN0IENDUmVu
ZGVyUGFzc0xpc3QmIHJlbmRlclBhc3Nlc0luRHJhd09yZGVyKCkgY29uc3QgeyByZXR1cm4gbV9y
ZW5kZXJQYXNzZXNJbkRyYXdPcmRlcjsgfQorICAgIGNvbnN0IENDUmVuZGVyUGFzc0lkSGFzaE1h
cCYgcmVuZGVyUGFzc2VzKCkgY29uc3QgeyByZXR1cm4gbV9yZW5kZXJQYXNzZXM7IH0KKworICAg
IHNpemVfdCBtZW1vcnlBbGxvY2F0aW9uTGltaXRCeXRlcygpIGNvbnN0IHsgcmV0dXJuIG1fbWVt
b3J5QWxsb2NhdGlvbkxpbWl0Qnl0ZXM7IH0KKworcHJpdmF0ZToKKyAgICBpbnQgbV9zZXRGdWxs
Um9vdExheWVyRGFtYWdlQ291bnQ7CisgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIG1faW1w
bFRocmVhZDsKKyAgICBPd25QdHI8Q0NMYXllckltcGw+IG1fcm9vdExheWVyOworICAgIENDUmVu
ZGVyUGFzc0xpc3QgbV9yZW5kZXJQYXNzZXNJbkRyYXdPcmRlcjsKKyAgICBDQ1JlbmRlclBhc3NJ
ZEhhc2hNYXAgbV9yZW5kZXJQYXNzZXM7CisgICAgc2l6ZV90IG1fbWVtb3J5QWxsb2NhdGlvbkxp
bWl0Qnl0ZXM7Cit9OworCitjbGFzcyBGYWtlQ0NSZW5kZXJlckdMIDogcHVibGljIENDUmVuZGVy
ZXJHTCB7CitwdWJsaWM6CisgICAgRmFrZUNDUmVuZGVyZXJHTChDQ1JlbmRlcmVyQ2xpZW50KiBj
bGllbnQsIENDUmVzb3VyY2VQcm92aWRlciogcmVzb3VyY2VQcm92aWRlcikgOiBDQ1JlbmRlcmVy
R0woY2xpZW50LCByZXNvdXJjZVByb3ZpZGVyLCBVbnRocm90dGxlZFVwbG9hZGVyKSB7IH0KKwor
ICAgIC8vIENDUmVuZGVyZXJHTCBtZXRob2RzLgorCisgICAgLy8gQ2hhbmdpbmcgdmlzaWJpbGl0
eSB0byBwdWJsaWMuCisgICAgdXNpbmcgQ0NSZW5kZXJlckdMOjppbml0aWFsaXplOworICAgIHVz
aW5nIENDUmVuZGVyZXJHTDo6aXNGcmFtZWJ1ZmZlckRpc2NhcmRlZDsKK307CisKK2NsYXNzIEND
UmVuZGVyZXJHTFRlc3QgOiBwdWJsaWMgdGVzdGluZzo6VGVzdCB7Citwcm90ZWN0ZWQ6CisgICAg
Q0NSZW5kZXJlckdMVGVzdCgpCisgICAgICAgIDogbV9zdWdnZXN0SGF2ZUJhY2tidWZmZXJZZXMo
MSwgdHJ1ZSkKKyAgICAgICAgLCBtX3N1Z2dlc3RIYXZlQmFja2J1ZmZlck5vKDEsIGZhbHNlKQor
ICAgICAgICAsIG1fY29udGV4dChGYWtlV2ViQ29tcG9zaXRvck91dHB1dFN1cmZhY2U6OmNyZWF0
ZShhZG9wdFB0cihuZXcgRnJhbWVDb3VudGluZ01lbW9yeUFsbG9jYXRpb25TZXR0aW5nQ29udGV4
dCgpKSkpCisgICAgICAgICwgbV9yZXNvdXJjZVByb3ZpZGVyKENDUmVzb3VyY2VQcm92aWRlcjo6
Y3JlYXRlKG1fY29udGV4dC5nZXQoKSkpCisgICAgICAgICwgbV9yZW5kZXJlcigmbV9tb2NrQ2xp
ZW50LCBtX3Jlc291cmNlUHJvdmlkZXIuZ2V0KCkpCisgICAgeworICAgIH0KKworICAgIHZpcnR1
YWwgdm9pZCBTZXRVcCgpCisgICAgeworICAgICAgICBXZWJLaXQ6OldlYkNvbXBvc2l0b3I6Omlu
aXRpYWxpemUoMCk7CisgICAgICAgIG1fcmVuZGVyZXIuaW5pdGlhbGl6ZSgpOworICAgIH0KKwor
ICAgIHZpcnR1YWwgdm9pZCBUZWFyRG93bigpCisgICAgeworICAgICAgICBXZWJLaXQ6OldlYkNv
bXBvc2l0b3I6OnNodXRkb3duKCk7CisgICAgfQorCisgICAgdm9pZCBzd2FwQnVmZmVycygpCisg
ICAgeworICAgICAgICBtX3JlbmRlcmVyLnN3YXBCdWZmZXJzKCk7CisgICAgfQorCisgICAgRnJh
bWVDb3VudGluZ01lbW9yeUFsbG9jYXRpb25TZXR0aW5nQ29udGV4dCogY29udGV4dCgpIHsgcmV0
dXJuIHN0YXRpY19jYXN0PEZyYW1lQ291bnRpbmdNZW1vcnlBbGxvY2F0aW9uU2V0dGluZ0NvbnRl
eHQqPihtX2NvbnRleHQtPmNvbnRleHQzRCgpKTsgfQorCisgICAgV2ViR3JhcGhpY3NNZW1vcnlB
bGxvY2F0aW9uIG1fc3VnZ2VzdEhhdmVCYWNrYnVmZmVyWWVzOworICAgIFdlYkdyYXBoaWNzTWVt
b3J5QWxsb2NhdGlvbiBtX3N1Z2dlc3RIYXZlQmFja2J1ZmZlck5vOworCisgICAgT3duUHRyPEND
R3JhcGhpY3NDb250ZXh0PiBtX2NvbnRleHQ7CisgICAgRmFrZUNDUmVuZGVyZXJDbGllbnQgbV9t
b2NrQ2xpZW50OworICAgIE93blB0cjxDQ1Jlc291cmNlUHJvdmlkZXI+IG1fcmVzb3VyY2VQcm92
aWRlcjsKKyAgICBGYWtlQ0NSZW5kZXJlckdMIG1fcmVuZGVyZXI7CisgICAgQ0NTY29wZWRTZXR0
aW5ncyBtX3Njb3BlZFNldHRpbmdzOworfTsKKworLy8gVGVzdCBDQ1JlbmRlcmVyR0wgZGlzY2Fy
ZEZyYW1lYnVmZmVyIGZ1bmN0aW9uYWxpdHk6CisvLyBTdWdnZXN0IHJlY3JlYXRpbmcgZnJhbWVi
dWZmZXIgd2hlbiBvbmUgYWxyZWFkeSBleGlzdHMuCisvLyBFeHBlY3RlZDogaXQgZG9lcyBub3Ro
aW5nLgorVEVTVF9GKENDUmVuZGVyZXJHTFRlc3QsIFN1Z2dlc3RCYWNrYnVmZmVyWWVzV2hlbkl0
QWxyZWFkeUV4aXN0c1Nob3VsZERvTm90aGluZykKK3sKKyAgICBjb250ZXh0KCktPnNldE1lbW9y
eUFsbG9jYXRpb24obV9zdWdnZXN0SGF2ZUJhY2tidWZmZXJZZXMpOworICAgIEVYUEVDVF9FUSgw
LCBtX21vY2tDbGllbnQuc2V0RnVsbFJvb3RMYXllckRhbWFnZUNvdW50KCkpOworICAgIEVYUEVD
VF9GQUxTRShtX3JlbmRlcmVyLmlzRnJhbWVidWZmZXJEaXNjYXJkZWQoKSk7CisKKyAgICBzd2Fw
QnVmZmVycygpOworICAgIEVYUEVDVF9FUSgxLCBjb250ZXh0KCktPmZyYW1lQ291bnQoKSk7Cit9
CisKKy8vIFRlc3QgQ0NSZW5kZXJlckdMIGRpc2NhcmRGcmFtZWJ1ZmZlciBmdW5jdGlvbmFsaXR5
OgorLy8gU3VnZ2VzdCBkaXNjYXJkaW5nIGZyYW1lYnVmZmVyIHdoZW4gb25lIGV4aXN0cyBhbmQg
dGhlIHJlbmRlcmVyIGlzIG5vdCB2aXNpYmxlLgorLy8gRXhwZWN0ZWQ6IGl0IGlzIGRpc2NhcmRl
ZCBhbmQgZGFtYWdlIHRyYWNrZXIgaXMgcmVzZXQuCitURVNUX0YoQ0NSZW5kZXJlckdMVGVzdCwg
U3VnZ2VzdEJhY2tidWZmZXJOb1Nob3VsZERpc2NhcmRCYWNrYnVmZmVyQW5kRGFtYWdlUm9vdExh
eWVyV2hpbGVOb3RWaXNpYmxlKQoreworICAgIG1fcmVuZGVyZXIuc2V0VmlzaWJsZShmYWxzZSk7
CisgICAgY29udGV4dCgpLT5zZXRNZW1vcnlBbGxvY2F0aW9uKG1fc3VnZ2VzdEhhdmVCYWNrYnVm
ZmVyTm8pOworICAgIEVYUEVDVF9FUSgxLCBtX21vY2tDbGllbnQuc2V0RnVsbFJvb3RMYXllckRh
bWFnZUNvdW50KCkpOworICAgIEVYUEVDVF9UUlVFKG1fcmVuZGVyZXIuaXNGcmFtZWJ1ZmZlckRp
c2NhcmRlZCgpKTsKK30KKworLy8gVGVzdCBDQ1JlbmRlcmVyR0wgZGlzY2FyZEZyYW1lYnVmZmVy
IGZ1bmN0aW9uYWxpdHk6CisvLyBTdWdnZXN0IGRpc2NhcmRpbmcgZnJhbWVidWZmZXIgd2hlbiBv
bmUgZXhpc3RzIGFuZCB0aGUgcmVuZGVyZXIgaXMgdmlzaWJsZS4KKy8vIEV4cGVjdGVkOiB0aGUg
YWxsb2NhdGlvbiBpcyBpZ25vcmVkLgorVEVTVF9GKENDUmVuZGVyZXJHTFRlc3QsIFN1Z2dlc3RC
YWNrYnVmZmVyTm9Eb05vdGhpbmdXaGVuVmlzaWJsZSkKK3sKKyAgICBtX3JlbmRlcmVyLnNldFZp
c2libGUodHJ1ZSk7CisgICAgY29udGV4dCgpLT5zZXRNZW1vcnlBbGxvY2F0aW9uKG1fc3VnZ2Vz
dEhhdmVCYWNrYnVmZmVyTm8pOworICAgIEVYUEVDVF9FUSgwLCBtX21vY2tDbGllbnQuc2V0RnVs
bFJvb3RMYXllckRhbWFnZUNvdW50KCkpOworICAgIEVYUEVDVF9GQUxTRShtX3JlbmRlcmVyLmlz
RnJhbWVidWZmZXJEaXNjYXJkZWQoKSk7Cit9CisKKworLy8gVGVzdCBDQ1JlbmRlcmVyR0wgZGlz
Y2FyZEZyYW1lYnVmZmVyIGZ1bmN0aW9uYWxpdHk6CisvLyBTdWdnZXN0IGRpc2NhcmRpbmcgZnJh
bWVidWZmZXIgd2hlbiBvbmUgZG9lcyBub3QgZXhpc3QuCisvLyBFeHBlY3RlZDogaXQgZG9lcyBu
b3RoaW5nLgorVEVTVF9GKENDUmVuZGVyZXJHTFRlc3QsIFN1Z2dlc3RCYWNrYnVmZmVyTm9XaGVu
SXREb2VzbnRFeGlzdFNob3VsZERvTm90aGluZykKK3sKKyAgICBtX3JlbmRlcmVyLnNldFZpc2li
bGUoZmFsc2UpOworICAgIGNvbnRleHQoKS0+c2V0TWVtb3J5QWxsb2NhdGlvbihtX3N1Z2dlc3RI
YXZlQmFja2J1ZmZlck5vKTsKKyAgICBFWFBFQ1RfRVEoMSwgbV9tb2NrQ2xpZW50LnNldEZ1bGxS
b290TGF5ZXJEYW1hZ2VDb3VudCgpKTsKKyAgICBFWFBFQ1RfVFJVRShtX3JlbmRlcmVyLmlzRnJh
bWVidWZmZXJEaXNjYXJkZWQoKSk7CisKKyAgICBjb250ZXh0KCktPnNldE1lbW9yeUFsbG9jYXRp
b24obV9zdWdnZXN0SGF2ZUJhY2tidWZmZXJObyk7CisgICAgRVhQRUNUX0VRKDEsIG1fbW9ja0Ns
aWVudC5zZXRGdWxsUm9vdExheWVyRGFtYWdlQ291bnQoKSk7CisgICAgRVhQRUNUX1RSVUUobV9y
ZW5kZXJlci5pc0ZyYW1lYnVmZmVyRGlzY2FyZGVkKCkpOworfQorCisvLyBUZXN0IENDUmVuZGVy
ZXJHTCBkaXNjYXJkRnJhbWVidWZmZXIgZnVuY3Rpb25hbGl0eToKKy8vIEJlZ2luIGRyYXdpbmcg
YSBmcmFtZSB3aGlsZSBhIGZyYW1lYnVmZmVyIGlzIGRpc2NhcmRlZC4KKy8vIEV4cGVjdGVkOiB3
aWxsIHJlY3JlYXRlIGZyYW1lYnVmZmVyLgorVEVTVF9GKENDUmVuZGVyZXJHTFRlc3QsIERpc2Nh
cmRlZEJhY2tidWZmZXJJc1JlY3JlYXRlZEZvclNjb3BlRHVyYXRpb24pCit7CisgICAgbV9yZW5k
ZXJlci5zZXRWaXNpYmxlKGZhbHNlKTsKKyAgICBjb250ZXh0KCktPnNldE1lbW9yeUFsbG9jYXRp
b24obV9zdWdnZXN0SGF2ZUJhY2tidWZmZXJObyk7CisgICAgRVhQRUNUX1RSVUUobV9yZW5kZXJl
ci5pc0ZyYW1lYnVmZmVyRGlzY2FyZGVkKCkpOworICAgIEVYUEVDVF9FUSgxLCBtX21vY2tDbGll
bnQuc2V0RnVsbFJvb3RMYXllckRhbWFnZUNvdW50KCkpOworCisgICAgbV9yZW5kZXJlci5zZXRW
aXNpYmxlKHRydWUpOworICAgIG1fcmVuZGVyZXIuZHJhd0ZyYW1lKG1fbW9ja0NsaWVudC5yZW5k
ZXJQYXNzZXNJbkRyYXdPcmRlcigpLCBtX21vY2tDbGllbnQucmVuZGVyUGFzc2VzKCkpOworICAg
IEVYUEVDVF9GQUxTRShtX3JlbmRlcmVyLmlzRnJhbWVidWZmZXJEaXNjYXJkZWQoKSk7CisKKyAg
ICBzd2FwQnVmZmVycygpOworICAgIEVYUEVDVF9FUSgxLCBjb250ZXh0KCktPmZyYW1lQ291bnQo
KSk7Cit9CisKK1RFU1RfRihDQ1JlbmRlcmVyR0xUZXN0LCBGcmFtZWJ1ZmZlckRpc2NhcmRlZEFm
dGVyUmVhZGJhY2tXaGVuTm90VmlzaWJsZSkKK3sKKyAgICBtX3JlbmRlcmVyLnNldFZpc2libGUo
ZmFsc2UpOworICAgIGNvbnRleHQoKS0+c2V0TWVtb3J5QWxsb2NhdGlvbihtX3N1Z2dlc3RIYXZl
QmFja2J1ZmZlck5vKTsKKyAgICBFWFBFQ1RfVFJVRShtX3JlbmRlcmVyLmlzRnJhbWVidWZmZXJE
aXNjYXJkZWQoKSk7CisgICAgRVhQRUNUX0VRKDEsIG1fbW9ja0NsaWVudC5zZXRGdWxsUm9vdExh
eWVyRGFtYWdlQ291bnQoKSk7CisKKyAgICBjaGFyIHBpeGVsc1s0XTsKKyAgICBtX3JlbmRlcmVy
LmRyYXdGcmFtZShtX21vY2tDbGllbnQucmVuZGVyUGFzc2VzSW5EcmF3T3JkZXIoKSwgbV9tb2Nr
Q2xpZW50LnJlbmRlclBhc3NlcygpKTsKKyAgICBFWFBFQ1RfRkFMU0UobV9yZW5kZXJlci5pc0Zy
YW1lYnVmZmVyRGlzY2FyZGVkKCkpOworCisgICAgbV9yZW5kZXJlci5nZXRGcmFtZWJ1ZmZlclBp
eGVscyhwaXhlbHMsIEludFJlY3QoMCwgMCwgMSwgMSkpOworICAgIEVYUEVDVF9UUlVFKG1fcmVu
ZGVyZXIuaXNGcmFtZWJ1ZmZlckRpc2NhcmRlZCgpKTsKKyAgICBFWFBFQ1RfRVEoMiwgbV9tb2Nr
Q2xpZW50LnNldEZ1bGxSb290TGF5ZXJEYW1hZ2VDb3VudCgpKTsKK30KKworY2xhc3MgRm9yYmlk
U3luY2hyb25vdXNDYWxsQ29udGV4dCA6IHB1YmxpYyBGYWtlV2ViR3JhcGhpY3NDb250ZXh0M0Qg
eworcHVibGljOgorICAgIEZvcmJpZFN5bmNocm9ub3VzQ2FsbENvbnRleHQoKSB7IH0KKworICAg
IHZpcnR1YWwgYm9vbCBnZXRBY3RpdmVBdHRyaWIoV2ViR0xJZCBwcm9ncmFtLCBXR0MzRHVpbnQg
aW5kZXgsIEFjdGl2ZUluZm8mKSB7IEFERF9GQUlMVVJFKCk7IHJldHVybiBmYWxzZTsgfQorICAg
IHZpcnR1YWwgYm9vbCBnZXRBY3RpdmVVbmlmb3JtKFdlYkdMSWQgcHJvZ3JhbSwgV0dDM0R1aW50
IGluZGV4LCBBY3RpdmVJbmZvJikgeyBBRERfRkFJTFVSRSgpOyByZXR1cm4gZmFsc2U7IH0KKyAg
ICB2aXJ0dWFsIHZvaWQgZ2V0QXR0YWNoZWRTaGFkZXJzKFdlYkdMSWQgcHJvZ3JhbSwgV0dDM0Rz
aXplaSBtYXhDb3VudCwgV0dDM0RzaXplaSogY291bnQsIFdlYkdMSWQqIHNoYWRlcnMpIHsgQURE
X0ZBSUxVUkUoKTsgfQorICAgIHZpcnR1YWwgV0dDM0RpbnQgZ2V0QXR0cmliTG9jYXRpb24oV2Vi
R0xJZCBwcm9ncmFtLCBjb25zdCBXR0MzRGNoYXIqIG5hbWUpIHsgQUREX0ZBSUxVUkUoKTsgcmV0
dXJuIDA7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZ2V0Qm9vbGVhbnYoV0dDM0RlbnVtIHBuYW1lLCBX
R0MzRGJvb2xlYW4qIHZhbHVlKSB7IEFERF9GQUlMVVJFKCk7IH0KKyAgICB2aXJ0dWFsIHZvaWQg
Z2V0QnVmZmVyUGFyYW1ldGVyaXYoV0dDM0RlbnVtIHRhcmdldCwgV0dDM0RlbnVtIHBuYW1lLCBX
R0MzRGludCogdmFsdWUpIHsgQUREX0ZBSUxVUkUoKTsgfQorICAgIHZpcnR1YWwgQXR0cmlidXRl
cyBnZXRDb250ZXh0QXR0cmlidXRlcygpIHsgQUREX0ZBSUxVUkUoKTsgcmV0dXJuIG1fYXR0cnM7
IH0KKyAgICB2aXJ0dWFsIFdHQzNEZW51bSBnZXRFcnJvcigpIHsgQUREX0ZBSUxVUkUoKTsgcmV0
dXJuIDA7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZ2V0RmxvYXR2KFdHQzNEZW51bSBwbmFtZSwgV0dD
M0RmbG9hdCogdmFsdWUpIHsgQUREX0ZBSUxVUkUoKTsgfQorICAgIHZpcnR1YWwgdm9pZCBnZXRG
cmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJpdihXR0MzRGVudW0gdGFyZ2V0LCBXR0MzRGVu
dW0gYXR0YWNobWVudCwgV0dDM0RlbnVtIHBuYW1lLCBXR0MzRGludCogdmFsdWUpIHsgQUREX0ZB
SUxVUkUoKTsgfQorICAgIHZpcnR1YWwgdm9pZCBnZXRJbnRlZ2VydihXR0MzRGVudW0gcG5hbWUs
IFdHQzNEaW50KiB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlmIChwbmFtZSA9PSBXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQzRDo6TUFYX1RFWFRVUkVfU0laRSkKKyAgICAgICAgICAgICp2YWx1ZSA9
IDEwMjQ7IC8vIE1BWF9URVhUVVJFX1NJWkUgaXMgY2FjaGVkIGNsaWVudCBzaWRlLCBzbyBpdCdz
IE9LIHRvIHF1ZXJ5LgorICAgICAgICBlbHNlCisgICAgICAgICAgICBBRERfRkFJTFVSRSgpOwor
ICAgIH0KKworICAgIC8vIFdlIGFsbG93IHF1ZXJ5aW5nIHRoZSBzaGFkZXIgY29tcGlsYXRpb24g
YW5kIHByb2dyYW0gbGluayBzdGF0dXMgaW4gZGVidWcgbW9kZSwgYnV0IG5vdCByZWxlYXNlLgor
ICAgIHZpcnR1YWwgdm9pZCBnZXRQcm9ncmFtaXYoV2ViR0xJZCBwcm9ncmFtLCBXR0MzRGVudW0g
cG5hbWUsIFdHQzNEaW50KiB2YWx1ZSkKKyAgICB7CisjaWZuZGVmIE5ERUJVRworICAgICAgICAq
dmFsdWUgPSAxOworI2Vsc2UKKyAgICAgICAgQUREX0ZBSUxVUkUoKTsKKyNlbmRpZgorICAgIH0K
KworICAgIHZpcnR1YWwgdm9pZCBnZXRTaGFkZXJpdihXZWJHTElkIHNoYWRlciwgV0dDM0RlbnVt
IHBuYW1lLCBXR0MzRGludCogdmFsdWUpCisgICAgeworI2lmbmRlZiBOREVCVUcKKyAgICAgICAg
KnZhbHVlID0gMTsKKyNlbHNlCisgICAgICAgIEFERF9GQUlMVVJFKCk7CisjZW5kaWYKKyAgICB9
CisKKyAgICB2aXJ0dWFsIFdlYlN0cmluZyBnZXRTdHJpbmcoV0dDM0RlbnVtIG5hbWUpCisgICAg
eworICAgICAgICAvLyBXZSBhbGxvdyBxdWVyeWluZyB0aGUgZXh0ZW5zaW9uIHN0cmluZy4KKyAg
ICAgICAgLy8gRklYTUU6IEl0J2QgYmUgYmV0dGVyIHRvIGNoZWNrIHRoYXQgd2Ugb25seSBkbyB0
aGlzIGJlZm9yZSBzdGFydGluZyBhbnkgb3RoZXIgZXhwZW5zaXZlIHdvcmsgKGxpa2Ugc3RhcnRp
bmcgYSBjb21waWxhdGlvbikKKyAgICAgICAgaWYgKG5hbWUgIT0gV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0M0Q6OkVYVEVOU0lPTlMpCisgICAgICAgICAgICBBRERfRkFJTFVSRSgpOworICAgICAg
ICByZXR1cm4gV2ViU3RyaW5nKCk7CisgICAgfQorCisgICAgdmlydHVhbCBXZWJTdHJpbmcgZ2V0
UHJvZ3JhbUluZm9Mb2coV2ViR0xJZCBwcm9ncmFtKSB7IEFERF9GQUlMVVJFKCk7IHJldHVybiBX
ZWJTdHJpbmcoKTsgfQorICAgIHZpcnR1YWwgdm9pZCBnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJp
dihXR0MzRGVudW0gdGFyZ2V0LCBXR0MzRGVudW0gcG5hbWUsIFdHQzNEaW50KiB2YWx1ZSkgeyBB
RERfRkFJTFVSRSgpOyB9CisKKyAgICB2aXJ0dWFsIFdlYlN0cmluZyBnZXRTaGFkZXJJbmZvTG9n
KFdlYkdMSWQgc2hhZGVyKSB7IEFERF9GQUlMVVJFKCk7IHJldHVybiBXZWJTdHJpbmcoKTsgfQor
ICAgIHZpcnR1YWwgdm9pZCBnZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQoV0dDM0RlbnVtIHNoYWRl
cnR5cGUsIFdHQzNEZW51bSBwcmVjaXNpb250eXBlLCBXR0MzRGludCogcmFuZ2UsIFdHQzNEaW50
KiBwcmVjaXNpb24pIHsgQUREX0ZBSUxVUkUoKTsgfQorICAgIHZpcnR1YWwgV2ViU3RyaW5nIGdl
dFNoYWRlclNvdXJjZShXZWJHTElkIHNoYWRlcikgeyBBRERfRkFJTFVSRSgpOyByZXR1cm4gV2Vi
U3RyaW5nKCk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZ2V0VGV4UGFyYW1ldGVyZnYoV0dDM0RlbnVt
IHRhcmdldCwgV0dDM0RlbnVtIHBuYW1lLCBXR0MzRGZsb2F0KiB2YWx1ZSkgeyBBRERfRkFJTFVS
RSgpOyB9CisgICAgdmlydHVhbCB2b2lkIGdldFRleFBhcmFtZXRlcml2KFdHQzNEZW51bSB0YXJn
ZXQsIFdHQzNEZW51bSBwbmFtZSwgV0dDM0RpbnQqIHZhbHVlKSB7IEFERF9GQUlMVVJFKCk7IH0K
KyAgICB2aXJ0dWFsIHZvaWQgZ2V0VW5pZm9ybWZ2KFdlYkdMSWQgcHJvZ3JhbSwgV0dDM0RpbnQg
bG9jYXRpb24sIFdHQzNEZmxvYXQqIHZhbHVlKSB7IEFERF9GQUlMVVJFKCk7IH0KKyAgICB2aXJ0
dWFsIHZvaWQgZ2V0VW5pZm9ybWl2KFdlYkdMSWQgcHJvZ3JhbSwgV0dDM0RpbnQgbG9jYXRpb24s
IFdHQzNEaW50KiB2YWx1ZSkgeyBBRERfRkFJTFVSRSgpOyB9CisgICAgdmlydHVhbCBXR0MzRGlu
dCBnZXRVbmlmb3JtTG9jYXRpb24oV2ViR0xJZCBwcm9ncmFtLCBjb25zdCBXR0MzRGNoYXIqIG5h
bWUpIHsgQUREX0ZBSUxVUkUoKTsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZ2V0VmVy
dGV4QXR0cmliZnYoV0dDM0R1aW50IGluZGV4LCBXR0MzRGVudW0gcG5hbWUsIFdHQzNEZmxvYXQq
IHZhbHVlKSB7IEFERF9GQUlMVVJFKCk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZ2V0VmVydGV4QXR0
cmliaXYoV0dDM0R1aW50IGluZGV4LCBXR0MzRGVudW0gcG5hbWUsIFdHQzNEaW50KiB2YWx1ZSkg
eyBBRERfRkFJTFVSRSgpOyB9CisgICAgdmlydHVhbCBXR0MzRHNpemVpcHRyIGdldFZlcnRleEF0
dHJpYk9mZnNldChXR0MzRHVpbnQgaW5kZXgsIFdHQzNEZW51bSBwbmFtZSkgeyBBRERfRkFJTFVS
RSgpOyByZXR1cm4gMDsgfQorfTsKKworLy8gVGhpcyB0ZXN0IGlzbid0IHVzaW5nIHRoZSBzYW1l
IGZpeHR1cmUgYXMgQ0NSZW5kZXJlckdMVGVzdCwgYW5kIHlvdSBjYW4ndCBtaXggVEVTVCgpIGFu
ZCBURVNUX0YoKSB3aXRoIHRoZSBzYW1lIG5hbWUsIGhlbmNlIExSQzIuCitURVNUKENDUmVuZGVy
ZXJHTFRlc3QyLCBpbml0aWFsaXphdGlvbkRvZXNOb3RNYWtlU3luY2hyb25vdXNDYWxscykKK3sK
KyAgICBDQ1Njb3BlZFNldHRpbmdzIHNjb3BlZFNldHRpbmdzOworICAgIEZha2VDQ1JlbmRlcmVy
Q2xpZW50IG1vY2tDbGllbnQ7CisgICAgT3duUHRyPENDR3JhcGhpY3NDb250ZXh0PiBjb250ZXh0
KEZha2VXZWJDb21wb3NpdG9yT3V0cHV0U3VyZmFjZTo6Y3JlYXRlKGFkb3B0UHRyKG5ldyBGb3Ji
aWRTeW5jaHJvbm91c0NhbGxDb250ZXh0KSkpOworICAgIE93blB0cjxDQ1Jlc291cmNlUHJvdmlk
ZXI+IHJlc291cmNlUHJvdmlkZXIoQ0NSZXNvdXJjZVByb3ZpZGVyOjpjcmVhdGUoY29udGV4dC5n
ZXQoKSkpOworICAgIEZha2VDQ1JlbmRlcmVyR0wgcmVuZGVyZXIoJm1vY2tDbGllbnQsIHJlc291
cmNlUHJvdmlkZXIuZ2V0KCkpOworCisgICAgRVhQRUNUX1RSVUUocmVuZGVyZXIuaW5pdGlhbGl6
ZSgpKTsKK30KKworY2xhc3MgTG9zZUNvbnRleHRPbkZpcnN0R2V0Q29udGV4dCA6IHB1YmxpYyBG
YWtlV2ViR3JhcGhpY3NDb250ZXh0M0QgeworcHVibGljOgorICAgIExvc2VDb250ZXh0T25GaXJz
dEdldENvbnRleHQoKQorICAgICAgICA6IG1fY29udGV4dExvc3QoZmFsc2UpCisgICAgeworICAg
IH0KKworICAgIHZpcnR1YWwgYm9vbCBtYWtlQ29udGV4dEN1cnJlbnQoKSBPVkVSUklERQorICAg
IHsKKyAgICAgICAgcmV0dXJuICFtX2NvbnRleHRMb3N0OworICAgIH0KKworICAgIHZpcnR1YWwg
dm9pZCBnZXRQcm9ncmFtaXYoV2ViR0xJZCBwcm9ncmFtLCBXR0MzRGVudW0gcG5hbWUsIFdHQzNE
aW50KiB2YWx1ZSkgT1ZFUlJJREUKKyAgICB7CisgICAgICAgIG1fY29udGV4dExvc3QgPSB0cnVl
OworICAgICAgICAqdmFsdWUgPSAwOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBnZXRTaGFk
ZXJpdihXZWJHTElkIHNoYWRlciwgV0dDM0RlbnVtIHBuYW1lLCBXR0MzRGludCogdmFsdWUpIE9W
RVJSSURFCisgICAgeworICAgICAgICBtX2NvbnRleHRMb3N0ID0gdHJ1ZTsKKyAgICAgICAgKnZh
bHVlID0gMDsKKyAgICB9CisKKyAgICB2aXJ0dWFsIFdHQzNEZW51bSBnZXRHcmFwaGljc1Jlc2V0
U3RhdHVzQVJCKCkgT1ZFUlJJREUKKyAgICB7CisgICAgICAgIHJldHVybiBtX2NvbnRleHRMb3N0
ID8gMSA6IDA7CisgICAgfQorCitwcml2YXRlOgorICAgIGJvb2wgbV9jb250ZXh0TG9zdDsKK307
CisKK1RFU1QoQ0NSZW5kZXJlckdMVGVzdDIsIGluaXRpYWxpemF0aW9uV2l0aFF1aWNrbHlMb3N0
Q29udGV4dERvZXNOb3RBc3NlcnQpCit7CisgICAgQ0NTY29wZWRTZXR0aW5ncyBzY29wZWRTZXR0
aW5nczsKKyAgICBGYWtlQ0NSZW5kZXJlckNsaWVudCBtb2NrQ2xpZW50OworICAgIE93blB0cjxD
Q0dyYXBoaWNzQ29udGV4dD4gY29udGV4dChGYWtlV2ViQ29tcG9zaXRvck91dHB1dFN1cmZhY2U6
OmNyZWF0ZShhZG9wdFB0cihuZXcgTG9zZUNvbnRleHRPbkZpcnN0R2V0Q29udGV4dCkpKTsKKyAg
ICBPd25QdHI8Q0NSZXNvdXJjZVByb3ZpZGVyPiByZXNvdXJjZVByb3ZpZGVyKENDUmVzb3VyY2VQ
cm92aWRlcjo6Y3JlYXRlKGNvbnRleHQuZ2V0KCkpKTsKKyAgICBGYWtlQ0NSZW5kZXJlckdMIHJl
bmRlcmVyKCZtb2NrQ2xpZW50LCByZXNvdXJjZVByb3ZpZGVyLmdldCgpKTsKKworICAgIHJlbmRl
cmVyLmluaXRpYWxpemUoKTsKK30KKworY2xhc3MgQ29udGV4dFRoYXREb2VzTm90U3VwcG9ydE1l
bW9yeU1hbmFnbWVudEV4dGVuc2lvbnMgOiBwdWJsaWMgRmFrZVdlYkdyYXBoaWNzQ29udGV4dDNE
IHsKK3B1YmxpYzoKKyAgICBDb250ZXh0VGhhdERvZXNOb3RTdXBwb3J0TWVtb3J5TWFuYWdtZW50
RXh0ZW5zaW9ucygpIHsgfQorCisgICAgLy8gV2ViR3JhcGhpY3NDb250ZXh0M0QgbWV0aG9kcy4K
KworICAgIC8vIFRoaXMgbWV0aG9kIHdvdWxkIG5vcm1hbGx5IGRvIGEgZ2xTd2FwQnVmZmVycyB1
bmRlciB0aGUgaG9vZC4KKyAgICB2aXJ0dWFsIHZvaWQgcHJlcGFyZVRleHR1cmUoKSB7IH0KKyAg
ICB2aXJ0dWFsIHZvaWQgc2V0TWVtb3J5QWxsb2NhdGlvbkNoYW5nZWRDYWxsYmFja0NIUk9NSVVN
KFdlYkdyYXBoaWNzTWVtb3J5QWxsb2NhdGlvbkNoYW5nZWRDYWxsYmFja0NIUk9NSVVNKiBjYWxs
YmFjaykgeyB9CisgICAgdmlydHVhbCBXZWJTdHJpbmcgZ2V0U3RyaW5nKFdlYktpdDo6V0dDM0Rl
bnVtIG5hbWUpIHsgcmV0dXJuIFdlYlN0cmluZygpOyB9Cit9OworCitURVNUKENDUmVuZGVyZXJH
TFRlc3QyLCBpbml0aWFsaXphdGlvbldpdGhvdXRHcHVNZW1vcnlNYW5hZ2VyRXh0ZW5zaW9uU3Vw
cG9ydFNob3VsZERlZmF1bHRUb05vblplcm9BbGxvY2F0aW9uKQoreworICAgIEZha2VDQ1JlbmRl
cmVyQ2xpZW50IG1vY2tDbGllbnQ7CisgICAgT3duUHRyPENDR3JhcGhpY3NDb250ZXh0PiBjb250
ZXh0KEZha2VXZWJDb21wb3NpdG9yT3V0cHV0U3VyZmFjZTo6Y3JlYXRlKGFkb3B0UHRyKG5ldyBD
b250ZXh0VGhhdERvZXNOb3RTdXBwb3J0TWVtb3J5TWFuYWdtZW50RXh0ZW5zaW9ucykpKTsKKyAg
ICBPd25QdHI8Q0NSZXNvdXJjZVByb3ZpZGVyPiByZXNvdXJjZVByb3ZpZGVyKENDUmVzb3VyY2VQ
cm92aWRlcjo6Y3JlYXRlKGNvbnRleHQuZ2V0KCkpKTsKKyAgICBGYWtlQ0NSZW5kZXJlckdMIHJl
bmRlcmVyKCZtb2NrQ2xpZW50LCByZXNvdXJjZVByb3ZpZGVyLmdldCgpKTsKKworICAgIHJlbmRl
cmVyLmluaXRpYWxpemUoKTsKKworICAgIEVYUEVDVF9HVChtb2NrQ2xpZW50Lm1lbW9yeUFsbG9j
YXRpb25MaW1pdEJ5dGVzKCksIDB1bCk7Cit9CisKK2NsYXNzIENsZWFyQ291bnRpbmdDb250ZXh0
IDogcHVibGljIEZha2VXZWJHcmFwaGljc0NvbnRleHQzRCB7CitwdWJsaWM6CisgICAgQ2xlYXJD
b3VudGluZ0NvbnRleHQoKSA6IG1fY2xlYXIoMCkgeyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgY2xl
YXIoV0dDM0RiaXRmaWVsZCkKKyAgICB7CisgICAgICAgIG1fY2xlYXIrKzsKKyAgICB9CisKKyAg
ICBpbnQgY2xlYXJDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fY2xlYXI7IH0KKworcHJpdmF0ZToK
KyAgICBpbnQgbV9jbGVhcjsKK307CisKK1RFU1QoQ0NSZW5kZXJlckdMVGVzdDIsIG9wYXF1ZUJh
Y2tncm91bmQpCit7CisgICAgRmFrZUNDUmVuZGVyZXJDbGllbnQgbW9ja0NsaWVudDsKKyAgICBP
d25QdHI8Q0NHcmFwaGljc0NvbnRleHQ+IGNjQ29udGV4dChGYWtlV2ViQ29tcG9zaXRvck91dHB1
dFN1cmZhY2U6OmNyZWF0ZShhZG9wdFB0cihuZXcgQ2xlYXJDb3VudGluZ0NvbnRleHQpKSk7Cisg
ICAgQ2xlYXJDb3VudGluZ0NvbnRleHQqIGNvbnRleHQgPSBzdGF0aWNfY2FzdDxDbGVhckNvdW50
aW5nQ29udGV4dCo+KGNjQ29udGV4dC0+Y29udGV4dDNEKCkpOworICAgIE93blB0cjxDQ1Jlc291
cmNlUHJvdmlkZXI+IHJlc291cmNlUHJvdmlkZXIoQ0NSZXNvdXJjZVByb3ZpZGVyOjpjcmVhdGUo
Y2NDb250ZXh0LmdldCgpKSk7CisgICAgRmFrZUNDUmVuZGVyZXJHTCByZW5kZXJlcigmbW9ja0Ns
aWVudCwgcmVzb3VyY2VQcm92aWRlci5nZXQoKSk7CisKKyAgICBtb2NrQ2xpZW50LnJvb3RSZW5k
ZXJQYXNzKCktPnNldEhhc1RyYW5zcGFyZW50QmFja2dyb3VuZChmYWxzZSk7CisKKyAgICBFWFBF
Q1RfVFJVRShyZW5kZXJlci5pbml0aWFsaXplKCkpOworCisgICAgcmVuZGVyZXIuZHJhd0ZyYW1l
KG1vY2tDbGllbnQucmVuZGVyUGFzc2VzSW5EcmF3T3JkZXIoKSwgbW9ja0NsaWVudC5yZW5kZXJQ
YXNzZXMoKSk7CisKKyAgICAvLyBPbiBERUJVRyBidWlsZHMsIHJlbmRlciBwYXNzZXMgd2l0aCBv
cGFxdWUgYmFja2dyb3VuZCBjbGVhciB0byBibHVlIHRvCisgICAgLy8gZWFzaWx5IHNlZSByZWdp
b25zIHRoYXQgd2VyZSBub3QgZHJhd24gb24gdGhlIHNjcmVlbi4KKyNpZiBkZWZpbmVkKE5ERUJV
RykKKyAgICBFWFBFQ1RfRVEoMCwgY29udGV4dC0+Y2xlYXJDb3VudCgpKTsKKyNlbHNlCisgICAg
RVhQRUNUX0VRKDEsIGNvbnRleHQtPmNsZWFyQ291bnQoKSk7CisjZW5kaWYKK30KKworVEVTVChD
Q1JlbmRlcmVyR0xUZXN0MiwgdHJhbnNwYXJlbnRCYWNrZ3JvdW5kKQoreworICAgIEZha2VDQ1Jl
bmRlcmVyQ2xpZW50IG1vY2tDbGllbnQ7CisgICAgT3duUHRyPENDR3JhcGhpY3NDb250ZXh0PiBj
Y0NvbnRleHQoRmFrZVdlYkNvbXBvc2l0b3JPdXRwdXRTdXJmYWNlOjpjcmVhdGUoYWRvcHRQdHIo
bmV3IENsZWFyQ291bnRpbmdDb250ZXh0KSkpOworICAgIENsZWFyQ291bnRpbmdDb250ZXh0KiBj
b250ZXh0ID0gc3RhdGljX2Nhc3Q8Q2xlYXJDb3VudGluZ0NvbnRleHQqPihjY0NvbnRleHQtPmNv
bnRleHQzRCgpKTsKKyAgICBPd25QdHI8Q0NSZXNvdXJjZVByb3ZpZGVyPiByZXNvdXJjZVByb3Zp
ZGVyKENDUmVzb3VyY2VQcm92aWRlcjo6Y3JlYXRlKGNjQ29udGV4dC5nZXQoKSkpOworICAgIEZh
a2VDQ1JlbmRlcmVyR0wgcmVuZGVyZXIoJm1vY2tDbGllbnQsIHJlc291cmNlUHJvdmlkZXIuZ2V0
KCkpOworCisgICAgbW9ja0NsaWVudC5yb290UmVuZGVyUGFzcygpLT5zZXRIYXNUcmFuc3BhcmVu
dEJhY2tncm91bmQodHJ1ZSk7CisKKyAgICBFWFBFQ1RfVFJVRShyZW5kZXJlci5pbml0aWFsaXpl
KCkpOworCisgICAgcmVuZGVyZXIuZHJhd0ZyYW1lKG1vY2tDbGllbnQucmVuZGVyUGFzc2VzSW5E
cmF3T3JkZXIoKSwgbW9ja0NsaWVudC5yZW5kZXJQYXNzZXMoKSk7CisKKyAgICBFWFBFQ1RfRVEo
MSwgY29udGV4dC0+Y2xlYXJDb3VudCgpKTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vdGVzdHMvTGF5ZXJSZW5kZXJlckNocm9taXVtVGVzdC5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3Rlc3RzL0xheWVyUmVuZGVyZXJDaHJvbWl1bVRlc3QuY3BwCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNmVkZGM1MzQ2ZDhlY2M3ZGU0OGFiM2I5YjNhYmRkNjEw
MmJhMTRmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvTGF5ZXJSZW5kZXJlckNocm9taXVtVGVzdC5jcHAK
KysrIC9kZXYvbnVsbApAQCAtMSw0NDkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KLSAqIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwotICogU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUg
ImNvbmZpZy5oIgotI2luY2x1ZGUgIkxheWVyUmVuZGVyZXJDaHJvbWl1bS5oIgotCi0jaW5jbHVk
ZSAiQ0NEcmF3UXVhZC5oIgotI2luY2x1ZGUgIkNDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlci5o
IgotI2luY2x1ZGUgIkNDU2V0dGluZ3MuaCIKLSNpbmNsdWRlICJDQ1NpbmdsZVRocmVhZFByb3h5
LmgiCi0jaW5jbHVkZSAiQ0NUZXN0Q29tbW9uLmgiCi0jaW5jbHVkZSAiRmFrZVdlYkNvbXBvc2l0
b3JPdXRwdXRTdXJmYWNlLmgiCi0jaW5jbHVkZSAiRmFrZVdlYkdyYXBoaWNzQ29udGV4dDNELmgi
Ci0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKLSNpbmNsdWRlIDxnbW9jay9nbW9jay5o
PgotI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+Ci0jaW5jbHVkZSA8cHVibGljL1dlYkNvbXBvc2l0
b3IuaD4KLQotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci11c2luZyBuYW1lc3BhY2UgV2ViS2l0
OwotdXNpbmcgbmFtZXNwYWNlIFdlYktpdFRlc3RzOwotCi1jbGFzcyBGcmFtZUNvdW50aW5nTWVt
b3J5QWxsb2NhdGlvblNldHRpbmdDb250ZXh0IDogcHVibGljIEZha2VXZWJHcmFwaGljc0NvbnRl
eHQzRCB7Ci1wdWJsaWM6Ci0gICAgRnJhbWVDb3VudGluZ01lbW9yeUFsbG9jYXRpb25TZXR0aW5n
Q29udGV4dCgpIDogbV9mcmFtZSgwKSB7IH0KLQotICAgIC8vIFdlYkdyYXBoaWNzQ29udGV4dDNE
IG1ldGhvZHMuCi0KLSAgICAvLyBUaGlzIG1ldGhvZCB3b3VsZCBub3JtYWxseSBkbyBhIGdsU3dh
cEJ1ZmZlcnMgdW5kZXIgdGhlIGhvb2QuCi0gICAgdmlydHVhbCB2b2lkIHByZXBhcmVUZXh0dXJl
KCkgeyBtX2ZyYW1lKys7IH0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0TWVtb3J5QWxsb2NhdGlvbkNo
YW5nZWRDYWxsYmFja0NIUk9NSVVNKFdlYkdyYXBoaWNzTWVtb3J5QWxsb2NhdGlvbkNoYW5nZWRD
YWxsYmFja0NIUk9NSVVNKiBjYWxsYmFjaykgeyBtX21lbW9yeUFsbG9jYXRpb25DaGFuZ2VkQ2Fs
bGJhY2sgPSBjYWxsYmFjazsgfQotICAgIHZpcnR1YWwgV2ViU3RyaW5nIGdldFN0cmluZyhXZWJL
aXQ6OldHQzNEZW51bSBuYW1lKQotICAgIHsKLSAgICAgICAgaWYgKG5hbWUgPT0gR3JhcGhpY3ND
b250ZXh0M0Q6OkVYVEVOU0lPTlMpCi0gICAgICAgICAgICByZXR1cm4gV2ViU3RyaW5nKCJHTF9D
SFJPTUlVTV9zZXRfdmlzaWJpbGl0eSBHTF9DSFJPTUlVTV9ncHVfbWVtb3J5X21hbmFnZXIgR0xf
Q0hST01JVU1fZGlzY2FyZF9mcmFtZWJ1ZmZlciIpOwotICAgICAgICByZXR1cm4gV2ViU3RyaW5n
KCk7Ci0gICAgfQotCi0gICAgLy8gTWV0aG9kcyBhZGRlZCBmb3IgdGVzdC4KLSAgICBpbnQgZnJh
bWVDb3VudCgpIHsgcmV0dXJuIG1fZnJhbWU7IH0KLSAgICB2b2lkIHNldE1lbW9yeUFsbG9jYXRp
b24oV2ViR3JhcGhpY3NNZW1vcnlBbGxvY2F0aW9uIGFsbG9jYXRpb24pCi0gICAgewotICAgICAg
ICBBU1NFUlQoQ0NQcm94eTo6aXNJbXBsVGhyZWFkKCkpOwotICAgICAgICAvLyBJbiBzaW5nbGUg
dGhyZWFkZWQgbW9kZSB3ZSBleHBlY3QgdGhpcyBjYWxsYmFjayBvbiBtYWluIHRocmVhZC4KLSAg
ICAgICAgRGVidWdTY29wZWRTZXRNYWluVGhyZWFkIG1haW47Ci0gICAgICAgIG1fbWVtb3J5QWxs
b2NhdGlvbkNoYW5nZWRDYWxsYmFjay0+b25NZW1vcnlBbGxvY2F0aW9uQ2hhbmdlZChhbGxvY2F0
aW9uKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgaW50IG1fZnJhbWU7Ci0gICAgV2ViR3JhcGhp
Y3NNZW1vcnlBbGxvY2F0aW9uQ2hhbmdlZENhbGxiYWNrQ0hST01JVU0qIG1fbWVtb3J5QWxsb2Nh
dGlvbkNoYW5nZWRDYWxsYmFjazsKLX07Ci0KLWNsYXNzIEZha2VDQ1JlbmRlcmVyQ2xpZW50IDog
cHVibGljIENDUmVuZGVyZXJDbGllbnQgewotcHVibGljOgotICAgIEZha2VDQ1JlbmRlcmVyQ2xp
ZW50KCkKLSAgICAgICAgOiBtX3NldEZ1bGxSb290TGF5ZXJEYW1hZ2VDb3VudCgwKQotICAgICAg
ICAsIG1fcm9vdExheWVyKENDTGF5ZXJJbXBsOjpjcmVhdGUoMSkpCi0gICAgICAgICwgbV9tZW1v
cnlBbGxvY2F0aW9uTGltaXRCeXRlcyhDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OmRlZmF1
bHRNZW1vcnlBbGxvY2F0aW9uTGltaXQoKSkKLSAgICB7Ci0gICAgICAgIG1fcm9vdExheWVyLT5j
cmVhdGVSZW5kZXJTdXJmYWNlKCk7Ci0gICAgICAgIE93blB0cjxDQ1JlbmRlclBhc3M+IHJvb3RS
ZW5kZXJQYXNzID0gQ0NSZW5kZXJQYXNzOjpjcmVhdGUobV9yb290TGF5ZXItPnJlbmRlclN1cmZh
Y2UoKSwgbV9yb290TGF5ZXItPmlkKCkpOwotICAgICAgICBtX3JlbmRlclBhc3Nlc0luRHJhd09y
ZGVyLmFwcGVuZChyb290UmVuZGVyUGFzcy5nZXQoKSk7Ci0gICAgICAgIG1fcmVuZGVyUGFzc2Vz
LnNldChtX3Jvb3RMYXllci0+aWQoKSwgcm9vdFJlbmRlclBhc3MucmVsZWFzZSgpKTsKLSAgICB9
Ci0KLSAgICAvLyBDQ1JlbmRlcmVyQ2xpZW50IG1ldGhvZHMuCi0gICAgdmlydHVhbCBjb25zdCBJ
bnRTaXplJiBkZXZpY2VWaWV3cG9ydFNpemUoKSBjb25zdCBPVkVSUklERSB7IHN0YXRpYyBJbnRT
aXplIGZha2VTaXplKDEsIDEpOyByZXR1cm4gZmFrZVNpemU7IH0KLSAgICB2aXJ0dWFsIGNvbnN0
IENDTGF5ZXJUcmVlU2V0dGluZ3MmIHNldHRpbmdzKCkgY29uc3QgT1ZFUlJJREUgeyBzdGF0aWMg
Q0NMYXllclRyZWVTZXR0aW5ncyBmYWtlU2V0dGluZ3M7IHJldHVybiBmYWtlU2V0dGluZ3M7IH0K
LSAgICB2aXJ0dWFsIHZvaWQgZGlkTG9zZUNvbnRleHQoKSBPVkVSUklERSB7IH0KLSAgICB2aXJ0
dWFsIHZvaWQgb25Td2FwQnVmZmVyc0NvbXBsZXRlKCkgT1ZFUlJJREUgeyB9Ci0gICAgdmlydHVh
bCB2b2lkIHNldEZ1bGxSb290TGF5ZXJEYW1hZ2UoKSBPVkVSUklERSB7IG1fc2V0RnVsbFJvb3RM
YXllckRhbWFnZUNvdW50Kys7IH0KLSAgICB2aXJ0dWFsIHZvaWQgcmVsZWFzZUNvbnRlbnRzVGV4
dHVyZXMoKSBPVkVSUklERSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0TWVtb3J5QWxsb2NhdGlv
bkxpbWl0Qnl0ZXMoc2l6ZV90IGJ5dGVzKSBPVkVSUklERSB7IG1fbWVtb3J5QWxsb2NhdGlvbkxp
bWl0Qnl0ZXMgPSBieXRlczsgfQotCi0gICAgLy8gTWV0aG9kcyBhZGRlZCBmb3IgdGVzdC4KLSAg
ICBpbnQgc2V0RnVsbFJvb3RMYXllckRhbWFnZUNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9zZXRG
dWxsUm9vdExheWVyRGFtYWdlQ291bnQ7IH0KLQotICAgIENDUmVuZGVyUGFzcyogcm9vdFJlbmRl
clBhc3MoKSB7IHJldHVybiBtX3JlbmRlclBhc3Nlc0luRHJhd09yZGVyLmxhc3QoKTsgfQotICAg
IGNvbnN0IENDUmVuZGVyUGFzc0xpc3QmIHJlbmRlclBhc3Nlc0luRHJhd09yZGVyKCkgY29uc3Qg
eyByZXR1cm4gbV9yZW5kZXJQYXNzZXNJbkRyYXdPcmRlcjsgfQotICAgIGNvbnN0IENDUmVuZGVy
UGFzc0lkSGFzaE1hcCYgcmVuZGVyUGFzc2VzKCkgY29uc3QgeyByZXR1cm4gbV9yZW5kZXJQYXNz
ZXM7IH0KLQotICAgIHNpemVfdCBtZW1vcnlBbGxvY2F0aW9uTGltaXRCeXRlcygpIGNvbnN0IHsg
cmV0dXJuIG1fbWVtb3J5QWxsb2NhdGlvbkxpbWl0Qnl0ZXM7IH0KLQotcHJpdmF0ZToKLSAgICBp
bnQgbV9zZXRGdWxsUm9vdExheWVyRGFtYWdlQ291bnQ7Ci0gICAgRGVidWdTY29wZWRTZXRJbXBs
VGhyZWFkIG1faW1wbFRocmVhZDsKLSAgICBPd25QdHI8Q0NMYXllckltcGw+IG1fcm9vdExheWVy
OwotICAgIENDUmVuZGVyUGFzc0xpc3QgbV9yZW5kZXJQYXNzZXNJbkRyYXdPcmRlcjsKLSAgICBD
Q1JlbmRlclBhc3NJZEhhc2hNYXAgbV9yZW5kZXJQYXNzZXM7Ci0gICAgc2l6ZV90IG1fbWVtb3J5
QWxsb2NhdGlvbkxpbWl0Qnl0ZXM7Ci19OwotCi1jbGFzcyBGYWtlTGF5ZXJSZW5kZXJlckNocm9t
aXVtIDogcHVibGljIExheWVyUmVuZGVyZXJDaHJvbWl1bSB7Ci1wdWJsaWM6Ci0gICAgRmFrZUxh
eWVyUmVuZGVyZXJDaHJvbWl1bShDQ1JlbmRlcmVyQ2xpZW50KiBjbGllbnQsIENDUmVzb3VyY2VQ
cm92aWRlciogcmVzb3VyY2VQcm92aWRlcikgOiBMYXllclJlbmRlcmVyQ2hyb21pdW0oY2xpZW50
LCByZXNvdXJjZVByb3ZpZGVyLCBVbnRocm90dGxlZFVwbG9hZGVyKSB7IH0KLQotICAgIC8vIExh
eWVyUmVuZGVyZXJDaHJvbWl1bSBtZXRob2RzLgotCi0gICAgLy8gQ2hhbmdpbmcgdmlzaWJpbGl0
eSB0byBwdWJsaWMuCi0gICAgdXNpbmcgTGF5ZXJSZW5kZXJlckNocm9taXVtOjppbml0aWFsaXpl
OwotICAgIHVzaW5nIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6aXNGcmFtZWJ1ZmZlckRpc2NhcmRl
ZDsKLX07Ci0KLWNsYXNzIExheWVyUmVuZGVyZXJDaHJvbWl1bVRlc3QgOiBwdWJsaWMgdGVzdGlu
Zzo6VGVzdCB7Ci1wcm90ZWN0ZWQ6Ci0gICAgTGF5ZXJSZW5kZXJlckNocm9taXVtVGVzdCgpCi0g
ICAgICAgIDogbV9zdWdnZXN0SGF2ZUJhY2tidWZmZXJZZXMoMSwgdHJ1ZSkKLSAgICAgICAgLCBt
X3N1Z2dlc3RIYXZlQmFja2J1ZmZlck5vKDEsIGZhbHNlKQotICAgICAgICAsIG1fY29udGV4dChG
YWtlV2ViQ29tcG9zaXRvck91dHB1dFN1cmZhY2U6OmNyZWF0ZShhZG9wdFB0cihuZXcgRnJhbWVD
b3VudGluZ01lbW9yeUFsbG9jYXRpb25TZXR0aW5nQ29udGV4dCgpKSkpCi0gICAgICAgICwgbV9y
ZXNvdXJjZVByb3ZpZGVyKENDUmVzb3VyY2VQcm92aWRlcjo6Y3JlYXRlKG1fY29udGV4dC5nZXQo
KSkpCi0gICAgICAgICwgbV9sYXllclJlbmRlcmVyQ2hyb21pdW0oJm1fbW9ja0NsaWVudCwgbV9y
ZXNvdXJjZVByb3ZpZGVyLmdldCgpKQotICAgIHsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQg
U2V0VXAoKQotICAgIHsKLSAgICAgICAgV2ViS2l0OjpXZWJDb21wb3NpdG9yOjppbml0aWFsaXpl
KDApOwotICAgICAgICBtX2xheWVyUmVuZGVyZXJDaHJvbWl1bS5pbml0aWFsaXplKCk7Ci0gICAg
fQotCi0gICAgdmlydHVhbCB2b2lkIFRlYXJEb3duKCkKLSAgICB7Ci0gICAgICAgIFdlYktpdDo6
V2ViQ29tcG9zaXRvcjo6c2h1dGRvd24oKTsKLSAgICB9Ci0KLSAgICB2b2lkIHN3YXBCdWZmZXJz
KCkKLSAgICB7Ci0gICAgICAgIG1fbGF5ZXJSZW5kZXJlckNocm9taXVtLnN3YXBCdWZmZXJzKCk7
Ci0gICAgfQotCi0gICAgRnJhbWVDb3VudGluZ01lbW9yeUFsbG9jYXRpb25TZXR0aW5nQ29udGV4
dCogY29udGV4dCgpIHsgcmV0dXJuIHN0YXRpY19jYXN0PEZyYW1lQ291bnRpbmdNZW1vcnlBbGxv
Y2F0aW9uU2V0dGluZ0NvbnRleHQqPihtX2NvbnRleHQtPmNvbnRleHQzRCgpKTsgfQotCi0gICAg
V2ViR3JhcGhpY3NNZW1vcnlBbGxvY2F0aW9uIG1fc3VnZ2VzdEhhdmVCYWNrYnVmZmVyWWVzOwot
ICAgIFdlYkdyYXBoaWNzTWVtb3J5QWxsb2NhdGlvbiBtX3N1Z2dlc3RIYXZlQmFja2J1ZmZlck5v
OwotCi0gICAgT3duUHRyPENDR3JhcGhpY3NDb250ZXh0PiBtX2NvbnRleHQ7Ci0gICAgRmFrZUND
UmVuZGVyZXJDbGllbnQgbV9tb2NrQ2xpZW50OwotICAgIE93blB0cjxDQ1Jlc291cmNlUHJvdmlk
ZXI+IG1fcmVzb3VyY2VQcm92aWRlcjsKLSAgICBGYWtlTGF5ZXJSZW5kZXJlckNocm9taXVtIG1f
bGF5ZXJSZW5kZXJlckNocm9taXVtOwotICAgIENDU2NvcGVkU2V0dGluZ3MgbV9zY29wZWRTZXR0
aW5nczsKLX07Ci0KLS8vIFRlc3QgTGF5ZXJSZW5kZXJlckNocm9taXVtIGRpc2NhcmRGcmFtZWJ1
ZmZlciBmdW5jdGlvbmFsaXR5OgotLy8gU3VnZ2VzdCByZWNyZWF0aW5nIGZyYW1lYnVmZmVyIHdo
ZW4gb25lIGFscmVhZHkgZXhpc3RzLgotLy8gRXhwZWN0ZWQ6IGl0IGRvZXMgbm90aGluZy4KLVRF
U1RfRihMYXllclJlbmRlcmVyQ2hyb21pdW1UZXN0LCBTdWdnZXN0QmFja2J1ZmZlclllc1doZW5J
dEFscmVhZHlFeGlzdHNTaG91bGREb05vdGhpbmcpCi17Ci0gICAgY29udGV4dCgpLT5zZXRNZW1v
cnlBbGxvY2F0aW9uKG1fc3VnZ2VzdEhhdmVCYWNrYnVmZmVyWWVzKTsKLSAgICBFWFBFQ1RfRVEo
MCwgbV9tb2NrQ2xpZW50LnNldEZ1bGxSb290TGF5ZXJEYW1hZ2VDb3VudCgpKTsKLSAgICBFWFBF
Q1RfRkFMU0UobV9sYXllclJlbmRlcmVyQ2hyb21pdW0uaXNGcmFtZWJ1ZmZlckRpc2NhcmRlZCgp
KTsKLQotICAgIHN3YXBCdWZmZXJzKCk7Ci0gICAgRVhQRUNUX0VRKDEsIGNvbnRleHQoKS0+ZnJh
bWVDb3VudCgpKTsKLX0KLQotLy8gVGVzdCBMYXllclJlbmRlcmVyQ2hyb21pdW0gZGlzY2FyZEZy
YW1lYnVmZmVyIGZ1bmN0aW9uYWxpdHk6Ci0vLyBTdWdnZXN0IGRpc2NhcmRpbmcgZnJhbWVidWZm
ZXIgd2hlbiBvbmUgZXhpc3RzIGFuZCB0aGUgcmVuZGVyZXIgaXMgbm90IHZpc2libGUuCi0vLyBF
eHBlY3RlZDogaXQgaXMgZGlzY2FyZGVkIGFuZCBkYW1hZ2UgdHJhY2tlciBpcyByZXNldC4KLVRF
U1RfRihMYXllclJlbmRlcmVyQ2hyb21pdW1UZXN0LCBTdWdnZXN0QmFja2J1ZmZlck5vU2hvdWxk
RGlzY2FyZEJhY2tidWZmZXJBbmREYW1hZ2VSb290TGF5ZXJXaGlsZU5vdFZpc2libGUpCi17Ci0g
ICAgbV9sYXllclJlbmRlcmVyQ2hyb21pdW0uc2V0VmlzaWJsZShmYWxzZSk7Ci0gICAgY29udGV4
dCgpLT5zZXRNZW1vcnlBbGxvY2F0aW9uKG1fc3VnZ2VzdEhhdmVCYWNrYnVmZmVyTm8pOwotICAg
IEVYUEVDVF9FUSgxLCBtX21vY2tDbGllbnQuc2V0RnVsbFJvb3RMYXllckRhbWFnZUNvdW50KCkp
OwotICAgIEVYUEVDVF9UUlVFKG1fbGF5ZXJSZW5kZXJlckNocm9taXVtLmlzRnJhbWVidWZmZXJE
aXNjYXJkZWQoKSk7Ci19Ci0KLS8vIFRlc3QgTGF5ZXJSZW5kZXJlckNocm9taXVtIGRpc2NhcmRG
cmFtZWJ1ZmZlciBmdW5jdGlvbmFsaXR5OgotLy8gU3VnZ2VzdCBkaXNjYXJkaW5nIGZyYW1lYnVm
ZmVyIHdoZW4gb25lIGV4aXN0cyBhbmQgdGhlIHJlbmRlcmVyIGlzIHZpc2libGUuCi0vLyBFeHBl
Y3RlZDogdGhlIGFsbG9jYXRpb24gaXMgaWdub3JlZC4KLVRFU1RfRihMYXllclJlbmRlcmVyQ2hy
b21pdW1UZXN0LCBTdWdnZXN0QmFja2J1ZmZlck5vRG9Ob3RoaW5nV2hlblZpc2libGUpCi17Ci0g
ICAgbV9sYXllclJlbmRlcmVyQ2hyb21pdW0uc2V0VmlzaWJsZSh0cnVlKTsKLSAgICBjb250ZXh0
KCktPnNldE1lbW9yeUFsbG9jYXRpb24obV9zdWdnZXN0SGF2ZUJhY2tidWZmZXJObyk7Ci0gICAg
RVhQRUNUX0VRKDAsIG1fbW9ja0NsaWVudC5zZXRGdWxsUm9vdExheWVyRGFtYWdlQ291bnQoKSk7
Ci0gICAgRVhQRUNUX0ZBTFNFKG1fbGF5ZXJSZW5kZXJlckNocm9taXVtLmlzRnJhbWVidWZmZXJE
aXNjYXJkZWQoKSk7Ci19Ci0KLQotLy8gVGVzdCBMYXllclJlbmRlcmVyQ2hyb21pdW0gZGlzY2Fy
ZEZyYW1lYnVmZmVyIGZ1bmN0aW9uYWxpdHk6Ci0vLyBTdWdnZXN0IGRpc2NhcmRpbmcgZnJhbWVi
dWZmZXIgd2hlbiBvbmUgZG9lcyBub3QgZXhpc3QuCi0vLyBFeHBlY3RlZDogaXQgZG9lcyBub3Ro
aW5nLgotVEVTVF9GKExheWVyUmVuZGVyZXJDaHJvbWl1bVRlc3QsIFN1Z2dlc3RCYWNrYnVmZmVy
Tm9XaGVuSXREb2VzbnRFeGlzdFNob3VsZERvTm90aGluZykKLXsKLSAgICBtX2xheWVyUmVuZGVy
ZXJDaHJvbWl1bS5zZXRWaXNpYmxlKGZhbHNlKTsKLSAgICBjb250ZXh0KCktPnNldE1lbW9yeUFs
bG9jYXRpb24obV9zdWdnZXN0SGF2ZUJhY2tidWZmZXJObyk7Ci0gICAgRVhQRUNUX0VRKDEsIG1f
bW9ja0NsaWVudC5zZXRGdWxsUm9vdExheWVyRGFtYWdlQ291bnQoKSk7Ci0gICAgRVhQRUNUX1RS
VUUobV9sYXllclJlbmRlcmVyQ2hyb21pdW0uaXNGcmFtZWJ1ZmZlckRpc2NhcmRlZCgpKTsKLQot
ICAgIGNvbnRleHQoKS0+c2V0TWVtb3J5QWxsb2NhdGlvbihtX3N1Z2dlc3RIYXZlQmFja2J1ZmZl
ck5vKTsKLSAgICBFWFBFQ1RfRVEoMSwgbV9tb2NrQ2xpZW50LnNldEZ1bGxSb290TGF5ZXJEYW1h
Z2VDb3VudCgpKTsKLSAgICBFWFBFQ1RfVFJVRShtX2xheWVyUmVuZGVyZXJDaHJvbWl1bS5pc0Zy
YW1lYnVmZmVyRGlzY2FyZGVkKCkpOwotfQotCi0vLyBUZXN0IExheWVyUmVuZGVyZXJDaHJvbWl1
bSBkaXNjYXJkRnJhbWVidWZmZXIgZnVuY3Rpb25hbGl0eToKLS8vIEJlZ2luIGRyYXdpbmcgYSBm
cmFtZSB3aGlsZSBhIGZyYW1lYnVmZmVyIGlzIGRpc2NhcmRlZC4KLS8vIEV4cGVjdGVkOiB3aWxs
IHJlY3JlYXRlIGZyYW1lYnVmZmVyLgotVEVTVF9GKExheWVyUmVuZGVyZXJDaHJvbWl1bVRlc3Qs
IERpc2NhcmRlZEJhY2tidWZmZXJJc1JlY3JlYXRlZEZvclNjb3BlRHVyYXRpb24pCi17Ci0gICAg
bV9sYXllclJlbmRlcmVyQ2hyb21pdW0uc2V0VmlzaWJsZShmYWxzZSk7Ci0gICAgY29udGV4dCgp
LT5zZXRNZW1vcnlBbGxvY2F0aW9uKG1fc3VnZ2VzdEhhdmVCYWNrYnVmZmVyTm8pOwotICAgIEVY
UEVDVF9UUlVFKG1fbGF5ZXJSZW5kZXJlckNocm9taXVtLmlzRnJhbWVidWZmZXJEaXNjYXJkZWQo
KSk7Ci0gICAgRVhQRUNUX0VRKDEsIG1fbW9ja0NsaWVudC5zZXRGdWxsUm9vdExheWVyRGFtYWdl
Q291bnQoKSk7Ci0KLSAgICBtX2xheWVyUmVuZGVyZXJDaHJvbWl1bS5zZXRWaXNpYmxlKHRydWUp
OwotICAgIG1fbGF5ZXJSZW5kZXJlckNocm9taXVtLmRyYXdGcmFtZShtX21vY2tDbGllbnQucmVu
ZGVyUGFzc2VzSW5EcmF3T3JkZXIoKSwgbV9tb2NrQ2xpZW50LnJlbmRlclBhc3NlcygpKTsKLSAg
ICBFWFBFQ1RfRkFMU0UobV9sYXllclJlbmRlcmVyQ2hyb21pdW0uaXNGcmFtZWJ1ZmZlckRpc2Nh
cmRlZCgpKTsKLQotICAgIHN3YXBCdWZmZXJzKCk7Ci0gICAgRVhQRUNUX0VRKDEsIGNvbnRleHQo
KS0+ZnJhbWVDb3VudCgpKTsKLX0KLQotVEVTVF9GKExheWVyUmVuZGVyZXJDaHJvbWl1bVRlc3Qs
IEZyYW1lYnVmZmVyRGlzY2FyZGVkQWZ0ZXJSZWFkYmFja1doZW5Ob3RWaXNpYmxlKQotewotICAg
IG1fbGF5ZXJSZW5kZXJlckNocm9taXVtLnNldFZpc2libGUoZmFsc2UpOwotICAgIGNvbnRleHQo
KS0+c2V0TWVtb3J5QWxsb2NhdGlvbihtX3N1Z2dlc3RIYXZlQmFja2J1ZmZlck5vKTsKLSAgICBF
WFBFQ1RfVFJVRShtX2xheWVyUmVuZGVyZXJDaHJvbWl1bS5pc0ZyYW1lYnVmZmVyRGlzY2FyZGVk
KCkpOwotICAgIEVYUEVDVF9FUSgxLCBtX21vY2tDbGllbnQuc2V0RnVsbFJvb3RMYXllckRhbWFn
ZUNvdW50KCkpOwotCi0gICAgY2hhciBwaXhlbHNbNF07Ci0gICAgbV9sYXllclJlbmRlcmVyQ2hy
b21pdW0uZHJhd0ZyYW1lKG1fbW9ja0NsaWVudC5yZW5kZXJQYXNzZXNJbkRyYXdPcmRlcigpLCBt
X21vY2tDbGllbnQucmVuZGVyUGFzc2VzKCkpOwotICAgIEVYUEVDVF9GQUxTRShtX2xheWVyUmVu
ZGVyZXJDaHJvbWl1bS5pc0ZyYW1lYnVmZmVyRGlzY2FyZGVkKCkpOwotCi0gICAgbV9sYXllclJl
bmRlcmVyQ2hyb21pdW0uZ2V0RnJhbWVidWZmZXJQaXhlbHMocGl4ZWxzLCBJbnRSZWN0KDAsIDAs
IDEsIDEpKTsKLSAgICBFWFBFQ1RfVFJVRShtX2xheWVyUmVuZGVyZXJDaHJvbWl1bS5pc0ZyYW1l
YnVmZmVyRGlzY2FyZGVkKCkpOwotICAgIEVYUEVDVF9FUSgyLCBtX21vY2tDbGllbnQuc2V0RnVs
bFJvb3RMYXllckRhbWFnZUNvdW50KCkpOwotfQotCi1jbGFzcyBGb3JiaWRTeW5jaHJvbm91c0Nh
bGxDb250ZXh0IDogcHVibGljIEZha2VXZWJHcmFwaGljc0NvbnRleHQzRCB7Ci1wdWJsaWM6Ci0g
ICAgRm9yYmlkU3luY2hyb25vdXNDYWxsQ29udGV4dCgpIHsgfQotCi0gICAgdmlydHVhbCBib29s
IGdldEFjdGl2ZUF0dHJpYihXZWJHTElkIHByb2dyYW0sIFdHQzNEdWludCBpbmRleCwgQWN0aXZl
SW5mbyYpIHsgQUREX0ZBSUxVUkUoKTsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCBib29s
IGdldEFjdGl2ZVVuaWZvcm0oV2ViR0xJZCBwcm9ncmFtLCBXR0MzRHVpbnQgaW5kZXgsIEFjdGl2
ZUluZm8mKSB7IEFERF9GQUlMVVJFKCk7IHJldHVybiBmYWxzZTsgfQotICAgIHZpcnR1YWwgdm9p
ZCBnZXRBdHRhY2hlZFNoYWRlcnMoV2ViR0xJZCBwcm9ncmFtLCBXR0MzRHNpemVpIG1heENvdW50
LCBXR0MzRHNpemVpKiBjb3VudCwgV2ViR0xJZCogc2hhZGVycykgeyBBRERfRkFJTFVSRSgpOyB9
Ci0gICAgdmlydHVhbCBXR0MzRGludCBnZXRBdHRyaWJMb2NhdGlvbihXZWJHTElkIHByb2dyYW0s
IGNvbnN0IFdHQzNEY2hhciogbmFtZSkgeyBBRERfRkFJTFVSRSgpOyByZXR1cm4gMDsgfQotICAg
IHZpcnR1YWwgdm9pZCBnZXRCb29sZWFudihXR0MzRGVudW0gcG5hbWUsIFdHQzNEYm9vbGVhbiog
dmFsdWUpIHsgQUREX0ZBSUxVUkUoKTsgfQotICAgIHZpcnR1YWwgdm9pZCBnZXRCdWZmZXJQYXJh
bWV0ZXJpdihXR0MzRGVudW0gdGFyZ2V0LCBXR0MzRGVudW0gcG5hbWUsIFdHQzNEaW50KiB2YWx1
ZSkgeyBBRERfRkFJTFVSRSgpOyB9Ci0gICAgdmlydHVhbCBBdHRyaWJ1dGVzIGdldENvbnRleHRB
dHRyaWJ1dGVzKCkgeyBBRERfRkFJTFVSRSgpOyByZXR1cm4gbV9hdHRyczsgfQotICAgIHZpcnR1
YWwgV0dDM0RlbnVtIGdldEVycm9yKCkgeyBBRERfRkFJTFVSRSgpOyByZXR1cm4gMDsgfQotICAg
IHZpcnR1YWwgdm9pZCBnZXRGbG9hdHYoV0dDM0RlbnVtIHBuYW1lLCBXR0MzRGZsb2F0KiB2YWx1
ZSkgeyBBRERfRkFJTFVSRSgpOyB9Ci0gICAgdmlydHVhbCB2b2lkIGdldEZyYW1lYnVmZmVyQXR0
YWNobWVudFBhcmFtZXRlcml2KFdHQzNEZW51bSB0YXJnZXQsIFdHQzNEZW51bSBhdHRhY2htZW50
LCBXR0MzRGVudW0gcG5hbWUsIFdHQzNEaW50KiB2YWx1ZSkgeyBBRERfRkFJTFVSRSgpOyB9Ci0g
ICAgdmlydHVhbCB2b2lkIGdldEludGVnZXJ2KFdHQzNEZW51bSBwbmFtZSwgV0dDM0RpbnQqIHZh
bHVlKQotICAgIHsKLSAgICAgICAgaWYgKHBuYW1lID09IFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDNEOjpNQVhfVEVYVFVSRV9TSVpFKQotICAgICAgICAgICAgKnZhbHVlID0gMTAyNDsgLy8gTUFY
X1RFWFRVUkVfU0laRSBpcyBjYWNoZWQgY2xpZW50IHNpZGUsIHNvIGl0J3MgT0sgdG8gcXVlcnku
Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIEFERF9GQUlMVVJFKCk7Ci0gICAgfQotCi0gICAg
Ly8gV2UgYWxsb3cgcXVlcnlpbmcgdGhlIHNoYWRlciBjb21waWxhdGlvbiBhbmQgcHJvZ3JhbSBs
aW5rIHN0YXR1cyBpbiBkZWJ1ZyBtb2RlLCBidXQgbm90IHJlbGVhc2UuCi0gICAgdmlydHVhbCB2
b2lkIGdldFByb2dyYW1pdihXZWJHTElkIHByb2dyYW0sIFdHQzNEZW51bSBwbmFtZSwgV0dDM0Rp
bnQqIHZhbHVlKQotICAgIHsKLSNpZm5kZWYgTkRFQlVHCi0gICAgICAgICp2YWx1ZSA9IDE7Ci0j
ZWxzZQotICAgICAgICBBRERfRkFJTFVSRSgpOwotI2VuZGlmCi0gICAgfQotCi0gICAgdmlydHVh
bCB2b2lkIGdldFNoYWRlcml2KFdlYkdMSWQgc2hhZGVyLCBXR0MzRGVudW0gcG5hbWUsIFdHQzNE
aW50KiB2YWx1ZSkKLSAgICB7Ci0jaWZuZGVmIE5ERUJVRwotICAgICAgICAqdmFsdWUgPSAxOwot
I2Vsc2UKLSAgICAgICAgQUREX0ZBSUxVUkUoKTsKLSNlbmRpZgotICAgIH0KLQotICAgIHZpcnR1
YWwgV2ViU3RyaW5nIGdldFN0cmluZyhXR0MzRGVudW0gbmFtZSkKLSAgICB7Ci0gICAgICAgIC8v
IFdlIGFsbG93IHF1ZXJ5aW5nIHRoZSBleHRlbnNpb24gc3RyaW5nLgotICAgICAgICAvLyBGSVhN
RTogSXQnZCBiZSBiZXR0ZXIgdG8gY2hlY2sgdGhhdCB3ZSBvbmx5IGRvIHRoaXMgYmVmb3JlIHN0
YXJ0aW5nIGFueSBvdGhlciBleHBlbnNpdmUgd29yayAobGlrZSBzdGFydGluZyBhIGNvbXBpbGF0
aW9uKQotICAgICAgICBpZiAobmFtZSAhPSBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6RVhU
RU5TSU9OUykKLSAgICAgICAgICAgIEFERF9GQUlMVVJFKCk7Ci0gICAgICAgIHJldHVybiBXZWJT
dHJpbmcoKTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIFdlYlN0cmluZyBnZXRQcm9ncmFtSW5mb0xv
ZyhXZWJHTElkIHByb2dyYW0pIHsgQUREX0ZBSUxVUkUoKTsgcmV0dXJuIFdlYlN0cmluZygpOyB9
Ci0gICAgdmlydHVhbCB2b2lkIGdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcml2KFdHQzNEZW51bSB0
YXJnZXQsIFdHQzNEZW51bSBwbmFtZSwgV0dDM0RpbnQqIHZhbHVlKSB7IEFERF9GQUlMVVJFKCk7
IH0KLQotICAgIHZpcnR1YWwgV2ViU3RyaW5nIGdldFNoYWRlckluZm9Mb2coV2ViR0xJZCBzaGFk
ZXIpIHsgQUREX0ZBSUxVUkUoKTsgcmV0dXJuIFdlYlN0cmluZygpOyB9Ci0gICAgdmlydHVhbCB2
b2lkIGdldFNoYWRlclByZWNpc2lvbkZvcm1hdChXR0MzRGVudW0gc2hhZGVydHlwZSwgV0dDM0Rl
bnVtIHByZWNpc2lvbnR5cGUsIFdHQzNEaW50KiByYW5nZSwgV0dDM0RpbnQqIHByZWNpc2lvbikg
eyBBRERfRkFJTFVSRSgpOyB9Ci0gICAgdmlydHVhbCBXZWJTdHJpbmcgZ2V0U2hhZGVyU291cmNl
KFdlYkdMSWQgc2hhZGVyKSB7IEFERF9GQUlMVVJFKCk7IHJldHVybiBXZWJTdHJpbmcoKTsgfQot
ICAgIHZpcnR1YWwgdm9pZCBnZXRUZXhQYXJhbWV0ZXJmdihXR0MzRGVudW0gdGFyZ2V0LCBXR0Mz
RGVudW0gcG5hbWUsIFdHQzNEZmxvYXQqIHZhbHVlKSB7IEFERF9GQUlMVVJFKCk7IH0KLSAgICB2
aXJ0dWFsIHZvaWQgZ2V0VGV4UGFyYW1ldGVyaXYoV0dDM0RlbnVtIHRhcmdldCwgV0dDM0RlbnVt
IHBuYW1lLCBXR0MzRGludCogdmFsdWUpIHsgQUREX0ZBSUxVUkUoKTsgfQotICAgIHZpcnR1YWwg
dm9pZCBnZXRVbmlmb3JtZnYoV2ViR0xJZCBwcm9ncmFtLCBXR0MzRGludCBsb2NhdGlvbiwgV0dD
M0RmbG9hdCogdmFsdWUpIHsgQUREX0ZBSUxVUkUoKTsgfQotICAgIHZpcnR1YWwgdm9pZCBnZXRV
bmlmb3JtaXYoV2ViR0xJZCBwcm9ncmFtLCBXR0MzRGludCBsb2NhdGlvbiwgV0dDM0RpbnQqIHZh
bHVlKSB7IEFERF9GQUlMVVJFKCk7IH0KLSAgICB2aXJ0dWFsIFdHQzNEaW50IGdldFVuaWZvcm1M
b2NhdGlvbihXZWJHTElkIHByb2dyYW0sIGNvbnN0IFdHQzNEY2hhciogbmFtZSkgeyBBRERfRkFJ
TFVSRSgpOyByZXR1cm4gMDsgfQotICAgIHZpcnR1YWwgdm9pZCBnZXRWZXJ0ZXhBdHRyaWJmdihX
R0MzRHVpbnQgaW5kZXgsIFdHQzNEZW51bSBwbmFtZSwgV0dDM0RmbG9hdCogdmFsdWUpIHsgQURE
X0ZBSUxVUkUoKTsgfQotICAgIHZpcnR1YWwgdm9pZCBnZXRWZXJ0ZXhBdHRyaWJpdihXR0MzRHVp
bnQgaW5kZXgsIFdHQzNEZW51bSBwbmFtZSwgV0dDM0RpbnQqIHZhbHVlKSB7IEFERF9GQUlMVVJF
KCk7IH0KLSAgICB2aXJ0dWFsIFdHQzNEc2l6ZWlwdHIgZ2V0VmVydGV4QXR0cmliT2Zmc2V0KFdH
QzNEdWludCBpbmRleCwgV0dDM0RlbnVtIHBuYW1lKSB7IEFERF9GQUlMVVJFKCk7IHJldHVybiAw
OyB9Ci19OwotCi0vLyBUaGlzIHRlc3QgaXNuJ3QgdXNpbmcgdGhlIHNhbWUgZml4dHVyZSBhcyBM
YXllclJlbmRlcmVyQ2hyb21pdW1UZXN0LCBhbmQgeW91IGNhbid0IG1peCBURVNUKCkgYW5kIFRF
U1RfRigpIHdpdGggdGhlIHNhbWUgbmFtZSwgaGVuY2UgTFJDMi4KLVRFU1QoTGF5ZXJSZW5kZXJl
ckNocm9taXVtVGVzdDIsIGluaXRpYWxpemF0aW9uRG9lc05vdE1ha2VTeW5jaHJvbm91c0NhbGxz
KQotewotICAgIENDU2NvcGVkU2V0dGluZ3Mgc2NvcGVkU2V0dGluZ3M7Ci0gICAgRmFrZUNDUmVu
ZGVyZXJDbGllbnQgbW9ja0NsaWVudDsKLSAgICBPd25QdHI8Q0NHcmFwaGljc0NvbnRleHQ+IGNv
bnRleHQoRmFrZVdlYkNvbXBvc2l0b3JPdXRwdXRTdXJmYWNlOjpjcmVhdGUoYWRvcHRQdHIobmV3
IEZvcmJpZFN5bmNocm9ub3VzQ2FsbENvbnRleHQpKSk7Ci0gICAgT3duUHRyPENDUmVzb3VyY2VQ
cm92aWRlcj4gcmVzb3VyY2VQcm92aWRlcihDQ1Jlc291cmNlUHJvdmlkZXI6OmNyZWF0ZShjb250
ZXh0LmdldCgpKSk7Ci0gICAgRmFrZUxheWVyUmVuZGVyZXJDaHJvbWl1bSBsYXllclJlbmRlcmVy
Q2hyb21pdW0oJm1vY2tDbGllbnQsIHJlc291cmNlUHJvdmlkZXIuZ2V0KCkpOwotCi0gICAgRVhQ
RUNUX1RSVUUobGF5ZXJSZW5kZXJlckNocm9taXVtLmluaXRpYWxpemUoKSk7Ci19Ci0KLWNsYXNz
IExvc2VDb250ZXh0T25GaXJzdEdldENvbnRleHQgOiBwdWJsaWMgRmFrZVdlYkdyYXBoaWNzQ29u
dGV4dDNEIHsKLXB1YmxpYzoKLSAgICBMb3NlQ29udGV4dE9uRmlyc3RHZXRDb250ZXh0KCkKLSAg
ICAgICAgOiBtX2NvbnRleHRMb3N0KGZhbHNlKQotICAgIHsKLSAgICB9Ci0KLSAgICB2aXJ0dWFs
IGJvb2wgbWFrZUNvbnRleHRDdXJyZW50KCkgT1ZFUlJJREUKLSAgICB7Ci0gICAgICAgIHJldHVy
biAhbV9jb250ZXh0TG9zdDsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZ2V0UHJvZ3JhbWl2
KFdlYkdMSWQgcHJvZ3JhbSwgV0dDM0RlbnVtIHBuYW1lLCBXR0MzRGludCogdmFsdWUpIE9WRVJS
SURFCi0gICAgewotICAgICAgICBtX2NvbnRleHRMb3N0ID0gdHJ1ZTsKLSAgICAgICAgKnZhbHVl
ID0gMDsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZ2V0U2hhZGVyaXYoV2ViR0xJZCBzaGFk
ZXIsIFdHQzNEZW51bSBwbmFtZSwgV0dDM0RpbnQqIHZhbHVlKSBPVkVSUklERQotICAgIHsKLSAg
ICAgICAgbV9jb250ZXh0TG9zdCA9IHRydWU7Ci0gICAgICAgICp2YWx1ZSA9IDA7Ci0gICAgfQot
Ci0gICAgdmlydHVhbCBXR0MzRGVudW0gZ2V0R3JhcGhpY3NSZXNldFN0YXR1c0FSQigpIE9WRVJS
SURFCi0gICAgewotICAgICAgICByZXR1cm4gbV9jb250ZXh0TG9zdCA/IDEgOiAwOwotICAgIH0K
LQotcHJpdmF0ZToKLSAgICBib29sIG1fY29udGV4dExvc3Q7Ci19OwotCi1URVNUKExheWVyUmVu
ZGVyZXJDaHJvbWl1bVRlc3QyLCBpbml0aWFsaXphdGlvbldpdGhRdWlja2x5TG9zdENvbnRleHRE
b2VzTm90QXNzZXJ0KQotewotICAgIENDU2NvcGVkU2V0dGluZ3Mgc2NvcGVkU2V0dGluZ3M7Ci0g
ICAgRmFrZUNDUmVuZGVyZXJDbGllbnQgbW9ja0NsaWVudDsKLSAgICBPd25QdHI8Q0NHcmFwaGlj
c0NvbnRleHQ+IGNvbnRleHQoRmFrZVdlYkNvbXBvc2l0b3JPdXRwdXRTdXJmYWNlOjpjcmVhdGUo
YWRvcHRQdHIobmV3IExvc2VDb250ZXh0T25GaXJzdEdldENvbnRleHQpKSk7Ci0gICAgT3duUHRy
PENDUmVzb3VyY2VQcm92aWRlcj4gcmVzb3VyY2VQcm92aWRlcihDQ1Jlc291cmNlUHJvdmlkZXI6
OmNyZWF0ZShjb250ZXh0LmdldCgpKSk7Ci0gICAgRmFrZUxheWVyUmVuZGVyZXJDaHJvbWl1bSBs
YXllclJlbmRlcmVyQ2hyb21pdW0oJm1vY2tDbGllbnQsIHJlc291cmNlUHJvdmlkZXIuZ2V0KCkp
OwotCi0gICAgbGF5ZXJSZW5kZXJlckNocm9taXVtLmluaXRpYWxpemUoKTsKLX0KLQotY2xhc3Mg
Q29udGV4dFRoYXREb2VzTm90U3VwcG9ydE1lbW9yeU1hbmFnbWVudEV4dGVuc2lvbnMgOiBwdWJs
aWMgRmFrZVdlYkdyYXBoaWNzQ29udGV4dDNEIHsKLXB1YmxpYzoKLSAgICBDb250ZXh0VGhhdERv
ZXNOb3RTdXBwb3J0TWVtb3J5TWFuYWdtZW50RXh0ZW5zaW9ucygpIHsgfQotCi0gICAgLy8gV2Vi
R3JhcGhpY3NDb250ZXh0M0QgbWV0aG9kcy4KLQotICAgIC8vIFRoaXMgbWV0aG9kIHdvdWxkIG5v
cm1hbGx5IGRvIGEgZ2xTd2FwQnVmZmVycyB1bmRlciB0aGUgaG9vZC4KLSAgICB2aXJ0dWFsIHZv
aWQgcHJlcGFyZVRleHR1cmUoKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0TWVtb3J5QWxsb2Nh
dGlvbkNoYW5nZWRDYWxsYmFja0NIUk9NSVVNKFdlYkdyYXBoaWNzTWVtb3J5QWxsb2NhdGlvbkNo
YW5nZWRDYWxsYmFja0NIUk9NSVVNKiBjYWxsYmFjaykgeyB9Ci0gICAgdmlydHVhbCBXZWJTdHJp
bmcgZ2V0U3RyaW5nKFdlYktpdDo6V0dDM0RlbnVtIG5hbWUpIHsgcmV0dXJuIFdlYlN0cmluZygp
OyB9Ci19OwotCi1URVNUKExheWVyUmVuZGVyZXJDaHJvbWl1bVRlc3QyLCBpbml0aWFsaXphdGlv
bldpdGhvdXRHcHVNZW1vcnlNYW5hZ2VyRXh0ZW5zaW9uU3VwcG9ydFNob3VsZERlZmF1bHRUb05v
blplcm9BbGxvY2F0aW9uKQotewotICAgIEZha2VDQ1JlbmRlcmVyQ2xpZW50IG1vY2tDbGllbnQ7
Ci0gICAgT3duUHRyPENDR3JhcGhpY3NDb250ZXh0PiBjb250ZXh0KEZha2VXZWJDb21wb3NpdG9y
T3V0cHV0U3VyZmFjZTo6Y3JlYXRlKGFkb3B0UHRyKG5ldyBDb250ZXh0VGhhdERvZXNOb3RTdXBw
b3J0TWVtb3J5TWFuYWdtZW50RXh0ZW5zaW9ucykpKTsKLSAgICBPd25QdHI8Q0NSZXNvdXJjZVBy
b3ZpZGVyPiByZXNvdXJjZVByb3ZpZGVyKENDUmVzb3VyY2VQcm92aWRlcjo6Y3JlYXRlKGNvbnRl
eHQuZ2V0KCkpKTsKLSAgICBGYWtlTGF5ZXJSZW5kZXJlckNocm9taXVtIGxheWVyUmVuZGVyZXJD
aHJvbWl1bSgmbW9ja0NsaWVudCwgcmVzb3VyY2VQcm92aWRlci5nZXQoKSk7Ci0KLSAgICBsYXll
clJlbmRlcmVyQ2hyb21pdW0uaW5pdGlhbGl6ZSgpOwotCi0gICAgRVhQRUNUX0dUKG1vY2tDbGll
bnQubWVtb3J5QWxsb2NhdGlvbkxpbWl0Qnl0ZXMoKSwgMHVsKTsKLX0KLQotY2xhc3MgQ2xlYXJD
b3VudGluZ0NvbnRleHQgOiBwdWJsaWMgRmFrZVdlYkdyYXBoaWNzQ29udGV4dDNEIHsKLXB1Ymxp
YzoKLSAgICBDbGVhckNvdW50aW5nQ29udGV4dCgpIDogbV9jbGVhcigwKSB7IH0KLQotICAgIHZp
cnR1YWwgdm9pZCBjbGVhcihXR0MzRGJpdGZpZWxkKQotICAgIHsKLSAgICAgICAgbV9jbGVhcisr
OwotICAgIH0KLQotICAgIGludCBjbGVhckNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9jbGVhcjsg
fQotCi1wcml2YXRlOgotICAgIGludCBtX2NsZWFyOwotfTsKLQotVEVTVChMYXllclJlbmRlcmVy
Q2hyb21pdW1UZXN0Miwgb3BhcXVlQmFja2dyb3VuZCkKLXsKLSAgICBGYWtlQ0NSZW5kZXJlckNs
aWVudCBtb2NrQ2xpZW50OwotICAgIE93blB0cjxDQ0dyYXBoaWNzQ29udGV4dD4gY2NDb250ZXh0
KEZha2VXZWJDb21wb3NpdG9yT3V0cHV0U3VyZmFjZTo6Y3JlYXRlKGFkb3B0UHRyKG5ldyBDbGVh
ckNvdW50aW5nQ29udGV4dCkpKTsKLSAgICBDbGVhckNvdW50aW5nQ29udGV4dCogY29udGV4dCA9
IHN0YXRpY19jYXN0PENsZWFyQ291bnRpbmdDb250ZXh0Kj4oY2NDb250ZXh0LT5jb250ZXh0M0Qo
KSk7Ci0gICAgT3duUHRyPENDUmVzb3VyY2VQcm92aWRlcj4gcmVzb3VyY2VQcm92aWRlcihDQ1Jl
c291cmNlUHJvdmlkZXI6OmNyZWF0ZShjY0NvbnRleHQuZ2V0KCkpKTsKLSAgICBGYWtlTGF5ZXJS
ZW5kZXJlckNocm9taXVtIGxheWVyUmVuZGVyZXJDaHJvbWl1bSgmbW9ja0NsaWVudCwgcmVzb3Vy
Y2VQcm92aWRlci5nZXQoKSk7Ci0KLSAgICBtb2NrQ2xpZW50LnJvb3RSZW5kZXJQYXNzKCktPnNl
dEhhc1RyYW5zcGFyZW50QmFja2dyb3VuZChmYWxzZSk7Ci0KLSAgICBFWFBFQ1RfVFJVRShsYXll
clJlbmRlcmVyQ2hyb21pdW0uaW5pdGlhbGl6ZSgpKTsKLQotICAgIGxheWVyUmVuZGVyZXJDaHJv
bWl1bS5kcmF3RnJhbWUobW9ja0NsaWVudC5yZW5kZXJQYXNzZXNJbkRyYXdPcmRlcigpLCBtb2Nr
Q2xpZW50LnJlbmRlclBhc3NlcygpKTsKLQotICAgIC8vIE9uIERFQlVHIGJ1aWxkcywgcmVuZGVy
IHBhc3NlcyB3aXRoIG9wYXF1ZSBiYWNrZ3JvdW5kIGNsZWFyIHRvIGJsdWUgdG8KLSAgICAvLyBl
YXNpbHkgc2VlIHJlZ2lvbnMgdGhhdCB3ZXJlIG5vdCBkcmF3biBvbiB0aGUgc2NyZWVuLgotI2lm
IGRlZmluZWQoTkRFQlVHKQotICAgIEVYUEVDVF9FUSgwLCBjb250ZXh0LT5jbGVhckNvdW50KCkp
OwotI2Vsc2UKLSAgICBFWFBFQ1RfRVEoMSwgY29udGV4dC0+Y2xlYXJDb3VudCgpKTsKLSNlbmRp
ZgotfQotCi1URVNUKExheWVyUmVuZGVyZXJDaHJvbWl1bVRlc3QyLCB0cmFuc3BhcmVudEJhY2tn
cm91bmQpCi17Ci0gICAgRmFrZUNDUmVuZGVyZXJDbGllbnQgbW9ja0NsaWVudDsKLSAgICBPd25Q
dHI8Q0NHcmFwaGljc0NvbnRleHQ+IGNjQ29udGV4dChGYWtlV2ViQ29tcG9zaXRvck91dHB1dFN1
cmZhY2U6OmNyZWF0ZShhZG9wdFB0cihuZXcgQ2xlYXJDb3VudGluZ0NvbnRleHQpKSk7Ci0gICAg
Q2xlYXJDb3VudGluZ0NvbnRleHQqIGNvbnRleHQgPSBzdGF0aWNfY2FzdDxDbGVhckNvdW50aW5n
Q29udGV4dCo+KGNjQ29udGV4dC0+Y29udGV4dDNEKCkpOwotICAgIE93blB0cjxDQ1Jlc291cmNl
UHJvdmlkZXI+IHJlc291cmNlUHJvdmlkZXIoQ0NSZXNvdXJjZVByb3ZpZGVyOjpjcmVhdGUoY2ND
b250ZXh0LmdldCgpKSk7Ci0gICAgRmFrZUxheWVyUmVuZGVyZXJDaHJvbWl1bSBsYXllclJlbmRl
cmVyQ2hyb21pdW0oJm1vY2tDbGllbnQsIHJlc291cmNlUHJvdmlkZXIuZ2V0KCkpOwotCi0gICAg
bW9ja0NsaWVudC5yb290UmVuZGVyUGFzcygpLT5zZXRIYXNUcmFuc3BhcmVudEJhY2tncm91bmQo
dHJ1ZSk7Ci0KLSAgICBFWFBFQ1RfVFJVRShsYXllclJlbmRlcmVyQ2hyb21pdW0uaW5pdGlhbGl6
ZSgpKTsKLQotICAgIGxheWVyUmVuZGVyZXJDaHJvbWl1bS5kcmF3RnJhbWUobW9ja0NsaWVudC5y
ZW5kZXJQYXNzZXNJbkRyYXdPcmRlcigpLCBtb2NrQ2xpZW50LnJlbmRlclBhc3NlcygpKTsKLQot
ICAgIEVYUEVDVF9FUSgxLCBjb250ZXh0LT5jbGVhckNvdW50KCkpOwotfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9UaWxlZExheWVyQ2hyb21pdW1UZXN0LmNwcCBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvVGlsZWRMYXllckNocm9taXVtVGVzdC5jcHAK
aW5kZXggMmVmYjhlNWRjYTFhOWIyN2RjOWJjMjkzYjcyODIxYjM1NDYyMWFkMS4uMDBlZTI4YTY4
OGVhNmQyODU1NjdhMzdhMDA3MGQzNWFhMTFiZjcwNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS90ZXN0cy9UaWxlZExheWVyQ2hyb21pdW1UZXN0LmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3Rlc3RzL1RpbGVkTGF5ZXJDaHJvbWl1bVRlc3QuY3BwCkBAIC03MDUs
NyArNzA1LDcgQEAgVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHNraXBzRHJhd0dldHNS
ZXNldCkKICAgICBXZWJLaXQ6OldlYkNvbXBvc2l0b3I6OmluaXRpYWxpemUoMCk7CiAgICAgRmFr
ZUNDTGF5ZXJUcmVlSG9zdENsaWVudCBmYWtlQ0NMYXllclRyZWVIb3N0Q2xpZW50OwogICAgIE93
blB0cjxDQ0xheWVyVHJlZUhvc3Q+IGNjTGF5ZXJUcmVlSG9zdCA9IENDTGF5ZXJUcmVlSG9zdDo6
Y3JlYXRlKCZmYWtlQ0NMYXllclRyZWVIb3N0Q2xpZW50LCBDQ0xheWVyVHJlZVNldHRpbmdzKCkp
OwotICAgIEFTU0VSVF9UUlVFKGNjTGF5ZXJUcmVlSG9zdC0+aW5pdGlhbGl6ZUxheWVyUmVuZGVy
ZXJJZk5lZWRlZCgpKTsKKyAgICBBU1NFUlRfVFJVRShjY0xheWVyVHJlZUhvc3QtPmluaXRpYWxp
emVSZW5kZXJlcklmTmVlZGVkKCkpOwogCiAgICAgLy8gQ3JlYXRlIHR3byAzMDAgeCAzMDAgdGls
ZWQgbGF5ZXJzLgogICAgIEludFNpemUgY29udGVudEJvdW5kcygzMDAsIDMwMCk7CkBAIC03OTEs
NyArNzkxLDcgQEAgVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHBhcnRpYWxVcGRhdGVz
KQogCiAgICAgRmFrZUNDTGF5ZXJUcmVlSG9zdENsaWVudCBmYWtlQ0NMYXllclRyZWVIb3N0Q2xp
ZW50OwogICAgIE93blB0cjxDQ0xheWVyVHJlZUhvc3Q+IGNjTGF5ZXJUcmVlSG9zdCA9IENDTGF5
ZXJUcmVlSG9zdDo6Y3JlYXRlKCZmYWtlQ0NMYXllclRyZWVIb3N0Q2xpZW50LCBzZXR0aW5ncyk7
Ci0gICAgQVNTRVJUX1RSVUUoY2NMYXllclRyZWVIb3N0LT5pbml0aWFsaXplTGF5ZXJSZW5kZXJl
cklmTmVlZGVkKCkpOworICAgIEFTU0VSVF9UUlVFKGNjTGF5ZXJUcmVlSG9zdC0+aW5pdGlhbGl6
ZVJlbmRlcmVySWZOZWVkZWQoKSk7CiAKICAgICAvLyBDcmVhdGUgb25lIDMwMCB4IDIwMCB0aWxl
ZCBsYXllciB3aXRoIDMgeCAyIHRpbGVzLgogICAgIEludFNpemUgY29udGVudEJvdW5kcygzMDAs
IDIwMCk7CkBAIC0xMzMzLDcgKzEzMzMsNyBAQCBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVz
dCwgZG9udEFsbG9jYXRlQ29udGVudHNXaGVuVGFyZ2V0U3VyZmFjZUNhbnRCZUFsbG9jYQogICAg
IENDTGF5ZXJUcmVlU2V0dGluZ3Mgc2V0dGluZ3M7CiAgICAgRmFrZUNDTGF5ZXJUcmVlSG9zdENs
aWVudCBmYWtlQ0NMYXllclRyZWVIb3N0Q2xpZW50OwogICAgIE93blB0cjxDQ0xheWVyVHJlZUhv
c3Q+IGNjTGF5ZXJUcmVlSG9zdCA9IENDTGF5ZXJUcmVlSG9zdDo6Y3JlYXRlKCZmYWtlQ0NMYXll
clRyZWVIb3N0Q2xpZW50LCBzZXR0aW5ncyk7Ci0gICAgQVNTRVJUX1RSVUUoY2NMYXllclRyZWVI
b3N0LT5pbml0aWFsaXplTGF5ZXJSZW5kZXJlcklmTmVlZGVkKCkpOworICAgIEFTU0VSVF9UUlVF
KGNjTGF5ZXJUcmVlSG9zdC0+aW5pdGlhbGl6ZVJlbmRlcmVySWZOZWVkZWQoKSk7CiAKICAgICBS
ZWZQdHI8RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bT4gcm9vdCA9IGFkb3B0UmVmKG5ldyBGYWtlVGls
ZWRMYXllckNocm9taXVtKGNjTGF5ZXJUcmVlSG9zdC0+Y29udGVudHNUZXh0dXJlTWFuYWdlcigp
KSk7CiAgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IHN1cmZhY2UgPSBMYXllckNocm9taXVtOjpj
cmVhdGUoKTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>