<?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>218685</bug_id>
          
          <creation_ts>2020-11-07 11:06:39 -0800</creation_ts>
          <short_desc>[LFC Display] Implement CSS border painting</short_desc>
          <delta_ts>2020-11-07 13:52:18 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Simon Fraser (smfr)">simon.fraser</reporter>
          <assigned_to name="Simon Fraser (smfr)">simon.fraser</assigned_to>
          <cc>bfulgham</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1705542</commentid>
    <comment_count>0</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2020-11-07 11:06:39 -0800</bug_when>
    <thetext>[LFC Display] Implement CSS border painting</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1705543</commentid>
    <comment_count>1</comment_count>
      <attachid>413528</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2020-11-07 11:08:24 -0800</bug_when>
    <thetext>Created attachment 413528
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1705560</commentid>
    <comment_count>2</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-11-07 13:51:08 -0800</bug_when>
    <thetext>Committed r269563: &lt;https://trac.webkit.org/changeset/269563&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 413528.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1705561</commentid>
    <comment_count>3</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-11-07 13:52:18 -0800</bug_when>
    <thetext>&lt;rdar://problem/71153469&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>413528</attachid>
            <date>2020-11-07 11:08:24 -0800</date>
            <delta_ts>2020-11-07 13:51:09 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-218685-20201107110823.patch</filename>
            <type>text/plain</type>
            <size>90221</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY5NTYxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTE0MjQzMTQ4YzVkMWIw
MjUzMmYyZTg1ZTVmOWFlZDM4MGQzYWU5ZC4uMDQ2YzFlYmYyZjdlOGIyMzlmMDNmZTViN2JlOGVl
MjQ0ZTY5NzAzYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDkyIEBACisyMDIwLTExLTA3ICBTaW1v
biBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgorCisgICAgICAgIFtMRkMgRGlzcGxh
eV0gSW1wbGVtZW50IENTUyBib3JkZXIgcGFpbnRpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxODY4NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBEaXNwbGF5OjpCb3hEZWNvcmF0aW9uUGFpbnRl
cigpIHdoaWNoIHBhaW50cyBib3JkZXJzIGFuZCBiYWNrZ3JvdW5kcyBmb3IgdGhlIGdpdmVuIGJv
eCwKKyAgICAgICAgYW5kIGltcGxlbWVudCBib3JkZXIgZHJhd2luZy4KKworICAgICAgICBGdXR1
cmUgcGF0Y2hlcyB3aWxsIGFkZCBzdXBwb3J0IGZvciBCYWNrZ3JvdW5kQmxlZWRBdm9pZGFuY2Ug
YW5kIGJhY2tncm91bmQgY2xpcHBpbmcgZm9yCisgICAgICAgIGJvcmRlci1yYWRpdXMuCisKKyAg
ICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2o6CisgICAgICAgICogZGlzcGxheS9jc3MvRGlzcGxheUJveERlY29yYXRpb25EYXRh
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OkJvcmRlckVkZ2U6OkJvcmRlckVkZ2Up
OgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6Qm9yZGVyRWRnZTo6b2JzY3VyZXNCYWNrZ3Jv
dW5kIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OmNhbGN1bGF0ZUJvcmRlckVk
Z2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OmFkamFjZW50U2lkZXNGb3JTaWRlKToK
KyAgICAgICAgKiBkaXNwbGF5L2Nzcy9EaXNwbGF5Qm94RGVjb3JhdGlvbkRhdGEuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXk6OkJvcmRlckVkZ2U6OndpZHRoIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXk6OkJvcmRlckVkZ2U6OnN0eWxlIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXk6OkJvcmRlckVkZ2U6OmNvbG9yIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXk6OkJvcmRlckVkZ2U6OmlzVHJhbnNwYXJlbnQgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheTo6Qm9yZGVyRWRnZTo6aXNQcmVzZW50IGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXk6OkJvcmRlckVkZ2U6Omhhc1Zpc2libGVDb2xvckFuZFN0eWxlIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OkJvcmRlckVkZ2U6OnNob3VsZFJlbmRl
ciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpCb3JkZXJFZGdlOjpwcmVzZW50
QnV0SW52aXNpYmxlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OkJvcmRlckVk
Z2U6OndpZHRoRm9yUGFpbnRpbmcgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6
Qm9yZGVyRWRnZTo6aW5uZXJXaWR0aCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
OjpCb3JkZXJFZGdlOjpvdXRlcldpZHRoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXk6OkJveERlY29yYXRpb25EYXRhOjpzZXRCYWNrZ3JvdW5kSW1hZ2VHZW9tZXRyeSk6CisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5OjpCb3hEZWNvcmF0aW9uRGF0YTo6Ym9yZGVyRWRnZXMgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6Qm94RGVjb3JhdGlvbkRhdGE6OnNldEJv
cmRlckVkZ2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OkJveERlY29yYXRpb25EYXRh
Ojpib3JkZXJSYWRpaSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpCb3hEZWNv
cmF0aW9uRGF0YTo6c2V0Qm9yZGVyUmFkaWkpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6
Qm94RGVjb3JhdGlvbkRhdGE6Omhhc0JvcmRlckltYWdlIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXk6OkJveERlY29yYXRpb25EYXRhOjpyb3VuZGVkQm9yZGVyUmVjdCBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpCb3hEZWNvcmF0aW9uRGF0YTo6
c2V0Um91bmRlZEJvcmRlclJlY3QpOiBEZWxldGVkLgorICAgICAgICAqIGRpc3BsYXkvY3NzL0Rp
c3BsYXlCb3hEZWNvcmF0aW9uUGFpbnRlci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheTo6Qm9yZGVyUGFpbnRlcjo6Qm9yZGVyUGFpbnRlcik6CisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5OjpCb3JkZXJQYWludGVyOjplZGdlc1NoYXJlQ29sb3IpOgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheTo6Qm9yZGVyUGFpbnRlcjo6Ym9yZGVyU3R5bGVGaWxsc0JvcmRlckFyZWEp
OgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6Qm9yZGVyUGFpbnRlcjo6Ym9yZGVyU3R5bGVI
YXNJbm5lckRldGFpbCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpCb3JkZXJQYWludGVy
OjpzdHlsZVJlcXVpcmVzQ2xpcFBvbHlnb24pOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6
Qm9yZGVyUGFpbnRlcjo6Ym9yZGVyU3R5bGVJc0RvdHRlZE9yRGFzaGVkKToKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXk6OkJvcmRlclBhaW50ZXI6OmJvcmRlcldpbGxBcmNJbm5lckVkZ2UpOgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6Qm9yZGVyUGFpbnRlcjo6Ym9yZGVyU3R5bGVIYXNV
bm1hdGNoZWRDb2xvcnNBdENvcm5lcik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpCb3Jk
ZXJQYWludGVyOjpjb2xvcnNNYXRjaEF0Q29ybmVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXk6OkJvcmRlclBhaW50ZXI6OmNvbG9yTmVlZHNBbnRpQWxpYXNBdENvcm5lciBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpCb3JkZXJQYWludGVyOjpjYWxjdWxhdGVC
b3JkZXJTdHlsZUNvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OkJvcmRlclBhaW50
ZXI6OndpbGxCZU92ZXJkcmF3biBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpC
b3JkZXJQYWludGVyOjpib3JkZXJTdHlsZXNSZXF1aXJlTWl0cmUpOgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheTo6Qm9yZGVyUGFpbnRlcjo6Y2FsY3VsYXRlQWRqdXN0ZWRJbm5lckJvcmRlcik6
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpCb3JkZXJQYWludGVyOjpqb2luUmVxdWlyZXNN
aXRyZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5Ojpyb3VuZGVkUmVjdFdpdGhJ
bmNsdWRlZFJhZGlpKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OkJvcmRlclBhaW50ZXI6
OnJvdW5kZWRCb3JkZXJGb3JSZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6
OkJvcmRlclBhaW50ZXI6OnJvdW5kZWRJbnNldEJvcmRlckZvclJlY3QgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheTo6Qm9yZGVyUGFpbnRlcjo6ZHJhd0JveFNpZGVGcm9tUGF0aCBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpCb3JkZXJQYWludGVyOjpjbGlwQm9y
ZGVyU2lkZVBvbHlnb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6Qm9yZGVy
UGFpbnRlcjo6ZHJhd0xpbmVGb3JCb3hTaWRlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXk6OkJvcmRlclBhaW50ZXI6OnBhaW50T25lQm9yZGVyU2lkZSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5OjpCb3JkZXJQYWludGVyOjpwYWludEJvcmRlclNpZGVzIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OkJvcmRlclBhaW50ZXI6OnBhaW50VHJhbnNs
dWNlbnRCb3JkZXJTaWRlcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpCb3Jk
ZXJQYWludGVyOjpwYWludEJvcmRlcnMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eTo6Qm94RGVjb3JhdGlvblBhaW50ZXI6OnBhaW50Qm9yZGVycyk6CisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5OjpwYWludEZpbGxMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpC
b3hEZWNvcmF0aW9uUGFpbnRlcjo6cGFpbnRCYWNrZ3JvdW5kSW1hZ2VzKToKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXk6OkJveERlY29yYXRpb25QYWludGVyOjpwYWludEJhY2tncm91bmQpOgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6Qm94RGVjb3JhdGlvblBhaW50ZXI6OnBhaW50QmFj
a2dyb3VuZEFuZEJvcmRlcnMpOgorICAgICAgICAqIGRpc3BsYXkvY3NzL0Rpc3BsYXlCb3hEZWNv
cmF0aW9uUGFpbnRlci5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9kaXNwbGF5L2Nzcy9E
aXNwbGF5Qm94RGVjb3JhdGlvbkRhdGEuY3BwLgorICAgICAgICAqIGRpc3BsYXkvY3NzL0Rpc3Bs
YXlCb3hGYWN0b3J5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OkJveEZhY3Rvcnk6
OmNvbnN0cnVjdEJveERlY29yYXRpb25EYXRhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXk6OkJveEZhY3Rvcnk6OnNldHVwQm94TW9kZWxCb3ggY29uc3QpOgorICAgICAgICAqIGRp
c3BsYXkvY3NzL0Rpc3BsYXlCb3hQYWludGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXk6OkJveFBhaW50ZXI6OnBhaW50Qm94RGVjb3JhdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheTo6Qm94UGFpbnRlcjo6cGFpbnRGaWxsTGF5ZXIpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheTo6Qm94UGFpbnRlcjo6cGFpbnRCYWNrZ3JvdW5kSW1hZ2VzKTogRGVs
ZXRlZC4KKyAgICAgICAgKiBkaXNwbGF5L2Nzcy9EaXNwbGF5U3R5bGUuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheTo6U3R5bGU6OlN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXk6OlN0eWxlOjpoYXNWaXNpYmxlQm9yZGVyIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBk
aXNwbGF5L2Nzcy9EaXNwbGF5U3R5bGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OlN0
eWxlOjpib3JkZXJMZWZ0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXk6OlN0eWxlOjpib3JkZXJSaWdodCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5OjpTdHlsZTo6Ym9yZGVyVG9wIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXk6OlN0eWxlOjpib3JkZXJCb3R0b20gY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0Um91bmRlZFJlY3QuaDoKKwogMjAyMC0xMS0w
NyAgU2ltb24gRnJhc2VyICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KIAogICAgICAgICBSRUdS
RVNTSU9OIChyMjY4NDc2KTogU29tZXRpbWVzIHpvb21pbmcgZG9lcyBub3Qgd29yayBvbiBwdXJw
bGVhaXIuY29tL21hcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQgYi9T
b3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAppbmRleCBmNzQzZGRhNWI3OTBkZWVmNWZhNTRlYmE1
ZTUxOGMzMGRhY2Y3ZTg2Li42NjlhMTQxNDQ4NjRjZWE3NjA5YmExNTNiMzc1Mjk1NTg5MjRiN2E5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Tb3VyY2VzLnR4dApAQCAtODE4LDYgKzgxOCw3IEBAIGNzcy90eXBlZG9tL1R5cGVkT01D
U1NVbnBhcnNlZFZhbHVlLmNwcAogY3Nzaml0L1NlbGVjdG9yQ29tcGlsZXIuY3BwCiBkaXNwbGF5
L2Nzcy9EaXNwbGF5Qm94LmNwcAogZGlzcGxheS9jc3MvRGlzcGxheUJveERlY29yYXRpb25EYXRh
LmNwcAorZGlzcGxheS9jc3MvRGlzcGxheUJveERlY29yYXRpb25QYWludGVyLmNwcAogZGlzcGxh
eS9jc3MvRGlzcGxheUJveEZhY3RvcnkuY3BwCiBkaXNwbGF5L2Nzcy9EaXNwbGF5Qm94TW9kZWxC
b3guY3BwCiBkaXNwbGF5L2Nzcy9EaXNwbGF5Qm94UGFpbnRlci5jcHAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBkYzZlNDI1M2Y4
NDZkZWRlN2Y5MGJiNThjZDY1ZDYyOWQ3YmVjNzY1Li40MjM4NTRkODkyYWYyZjY2MDg3ZmNjOTgx
MDJjMGRkMmJkNDU3OWNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCkBAIC02MDAyLDYgKzYwMDIsOCBAQAogCQkwRjYwRjMyQTFERkJC
MTA0MDA0MTZENkMgLyogQ29tbW9uVk0uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gQ29tbW9uVk0uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY2MzgzREIxODYx
NUIyOTAwM0U1REI1IC8qIFRocmVhZGVkU2Nyb2xsaW5nVHJlZS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUaHJlYWRlZFNjcm9sbGluZ1RyZWUuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwRjYzODNEQzE4NjE1QjI5MDAzRTVEQjUgLyogVGhyZWFk
ZWRTY3JvbGxpbmdUcmVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRocmVh
ZGVkU2Nyb2xsaW5nVHJlZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjYzOEU0
NjI1NTcyMzc3MDA5NzQ2NjggLyogRGlzcGxheUJveERlY29yYXRpb25QYWludGVyLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IERpc3BsYXlCb3hEZWNvcmF0aW9uUGFpbnRlci5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNjM4RTQ3MjU1NzIzNzgwMDk3NDY2OCAvKiBEaXNwbGF5
Qm94RGVjb3JhdGlvblBhaW50ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGlzcGxheUJveERlY29yYXRp
b25QYWludGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNjU2RkI1MjU0NTJF
NTQwMDIxOUY0QyAvKiBEaXNwbGF5Qm94RmFjdG9yeS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEaXNwbGF5
Qm94RmFjdG9yeS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjY1NkZCNjI1NDUy
RTU0MDAyMTlGNEMgLyogRGlzcGxheUJveEZhY3RvcnkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
RGlzcGxheUJveEZhY3RvcnkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjY1
NkZCQzI1NDVGRDU2MDAyMTlGNEMgLyogRGlzcGxheUJveFBhaW50ZXIuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gRGlzcGxheUJveFBhaW50ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE3
NjcwLDYgKzE3NjcyLDggQEAKIAkJCQkwRkZGMUI3ODI1MUJDNjU3MDA5ODc5NUEgLyogRGlzcGxh
eUJveC5oICovLAogCQkJCTBGOTQ3MjJCMjUzNEIwNDUwMEYxNTNDOCAvKiBEaXNwbGF5Qm94RGVj
b3JhdGlvbkRhdGEuY3BwICovLAogCQkJCTBGOTQ3MjI5MjUzNEIwNDUwMEYxNTNDOCAvKiBEaXNw
bGF5Qm94RGVjb3JhdGlvbkRhdGEuaCAqLywKKwkJCQkwRjYzOEU0NjI1NTcyMzc3MDA5NzQ2Njgg
LyogRGlzcGxheUJveERlY29yYXRpb25QYWludGVyLmNwcCAqLywKKwkJCQkwRjYzOEU0NzI1NTcy
Mzc4MDA5NzQ2NjggLyogRGlzcGxheUJveERlY29yYXRpb25QYWludGVyLmggKi8sCiAJCQkJMEY2
NTZGQjYyNTQ1MkU1NDAwMjE5RjRDIC8qIERpc3BsYXlCb3hGYWN0b3J5LmNwcCAqLywKIAkJCQkw
RjY1NkZCNTI1NDUyRTU0MDAyMTlGNEMgLyogRGlzcGxheUJveEZhY3RvcnkuaCAqLywKIAkJCQkw
Rjk0NzIyMDI1MzQwMTA5MDBGMTUzQzggLyogRGlzcGxheUJveE1vZGVsQm94LmNwcCAqLywKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Rpc3BsYXkvY3NzL0Rpc3BsYXlCb3hEZWNvcmF0aW9u
RGF0YS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kaXNwbGF5L2Nzcy9EaXNwbGF5Qm94RGVjb3JhdGlv
bkRhdGEuY3BwCmluZGV4IGIzZDBlZGYxMWUyZmQ1MzdmZDM5ZDY1MmNkYThiYWYzZjk0ZDM2YTQu
LmM1YmZlY2E2NTVjNmM3ZjUwZTY1YTkwZDYxNzdkY2YzNmQwOWMwZTkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2Rpc3BsYXkvY3NzL0Rpc3BsYXlCb3hEZWNvcmF0aW9uRGF0YS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvZGlzcGxheS9jc3MvRGlzcGxheUJveERlY29yYXRpb25EYXRhLmNw
cApAQCAtMjgsMTIgKzI4LDczIEBACiAKICNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09O
VEVYVCkKIAotI2luY2x1ZGUgIkxheW91dEJveC5oIgotI2luY2x1ZGUgIkxheW91dEJveEdlb21l
dHJ5LmgiCisjaW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
bmFtZXNwYWNlIERpc3BsYXkgewogCitCb3JkZXJFZGdlOjpCb3JkZXJFZGdlKGZsb2F0IHdpZHRo
LCBmbG9hdCBpbm5lcldpZHRoLCBmbG9hdCBvdXRlcldpZHRoLCBDb2xvciBjb2xvciwgQm9yZGVy
U3R5bGUgc3R5bGUsIGJvb2wgaXNUcmFuc3BhcmVudCwgYm9vbCBpc1ByZXNlbnQpCisgICAgOiBt
X2NvbG9yKGNvbG9yKQorICAgICwgbV93aWR0aCh3aWR0aCkKKyAgICAsIG1faW5uZXJXaWR0aChp
bm5lcldpZHRoKQorICAgICwgbV9vdXRlcldpZHRoKG91dGVyV2lkdGgpCisgICAgLCBtX3N0eWxl
KHN0eWxlKQorICAgICwgbV9pc1RyYW5zcGFyZW50KGlzVHJhbnNwYXJlbnQpCisgICAgLCBtX2lz
UHJlc2VudChpc1ByZXNlbnQpCit7Cit9CisKK2Jvb2wgQm9yZGVyRWRnZTo6b2JzY3VyZXNCYWNr
Z3JvdW5kKCkgY29uc3QKK3sKKyAgICBpZiAoIW1faXNQcmVzZW50IHx8IG1faXNUcmFuc3BhcmVu
dCB8fCAhbV9jb2xvci5pc09wYXF1ZSgpIHx8IG1fc3R5bGUgPT0gQm9yZGVyU3R5bGU6OkhpZGRl
bikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKG1fc3R5bGUgPT0gQm9yZGVyU3R5
bGU6OkRvdHRlZCB8fCBtX3N0eWxlID09IEJvcmRlclN0eWxlOjpEYXNoZWQgfHwgbV9zdHlsZSA9
PSBCb3JkZXJTdHlsZTo6RG91YmxlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworUmVjdEVkZ2VzPEJvcmRlckVkZ2U+IGNhbGN1bGF0ZUJvcmRlckVkZ2Vz
KGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgZmxvYXQgcGl4ZWxTbmFwcGluZ0ZhY3RvciwgYm9v
bCBpbmNsdWRlTG9naWNhbExlZnRFZGdlLCBib29sIGluY2x1ZGVMb2dpY2FsUmlnaHRFZGdlKQor
eworICAgIGJvb2wgaG9yaXpvbnRhbCA9IHN0eWxlLmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCk7
CisKKyAgICBhdXRvIGNvbnN0cnVjdEJvcmRlckVkZ2UgPSBbJl0oZmxvYXQgd2lkdGgsIENTU1By
b3BlcnR5SUQgY29sb3JQcm9wZXJ0eSwgQm9yZGVyU3R5bGUgYm9yZGVyU3R5bGUsIGJvb2wgaXNU
cmFuc3BhcmVudCwgYm9vbCBpc1ByZXNlbnQpIC0+Qm9yZGVyRWRnZSB7CisgICAgICAgIGZsb2F0
IGlubmVyV2lkdGggPSAwLmY7CisgICAgICAgIGZsb2F0IG91dGVyV2lkdGggPSAwLmY7CisKKyAg
ICAgICAgaWYgKGJvcmRlclN0eWxlID09IEJvcmRlclN0eWxlOjpEb3VibGUpIHsKKyAgICAgICAg
ICAgIGlmIChib3JkZXJTdHlsZSA9PSBCb3JkZXJTdHlsZTo6RG91YmxlICYmIHdpZHRoIDwgZmxv
b3JUb0RldmljZVBpeGVsKDMsIHBpeGVsU25hcHBpbmdGYWN0b3IpKQorICAgICAgICAgICAgICAg
IGJvcmRlclN0eWxlID0gQm9yZGVyU3R5bGU6OlNvbGlkOworICAgICAgICAgICAgZWxzZSB7Cisg
ICAgICAgICAgICAgICAgaW5uZXJXaWR0aCA9IGNlaWxUb0RldmljZVBpeGVsKHdpZHRoICogMiAv
IDMsIHBpeGVsU25hcHBpbmdGYWN0b3IpOworICAgICAgICAgICAgICAgIG91dGVyV2lkdGggPSBm
bG9vclRvRGV2aWNlUGl4ZWwod2lkdGggLyAzLCBwaXhlbFNuYXBwaW5nRmFjdG9yKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGZsb2F0IHNuYXBwZWRXaWR0aCA9IGZsb29y
VG9EZXZpY2VQaXhlbCh3aWR0aCwgcGl4ZWxTbmFwcGluZ0ZhY3Rvcik7CisgICAgICAgIHJldHVy
biB7IHNuYXBwZWRXaWR0aCwgaW5uZXJXaWR0aCwgb3V0ZXJXaWR0aCwgc3R5bGUudmlzaXRlZERl
cGVuZGVudENvbG9yV2l0aENvbG9yRmlsdGVyKGNvbG9yUHJvcGVydHkpLCBib3JkZXJTdHlsZSwg
aXNUcmFuc3BhcmVudCwgaXNQcmVzZW50IH07CisgICAgfTsKKworICAgIHJldHVybiB7CisgICAg
ICAgIGNvbnN0cnVjdEJvcmRlckVkZ2Uoc3R5bGUuYm9yZGVyVG9wV2lkdGgoKSwgQ1NTUHJvcGVy
dHlCb3JkZXJUb3BDb2xvciwgc3R5bGUuYm9yZGVyVG9wU3R5bGUoKSwgc3R5bGUuYm9yZGVyVG9w
SXNUcmFuc3BhcmVudCgpLCAhaG9yaXpvbnRhbCB8fCBpbmNsdWRlTG9naWNhbFJpZ2h0RWRnZSks
CisgICAgICAgIGNvbnN0cnVjdEJvcmRlckVkZ2Uoc3R5bGUuYm9yZGVyUmlnaHRXaWR0aCgpLCBD
U1NQcm9wZXJ0eUJvcmRlclJpZ2h0Q29sb3IsIHN0eWxlLmJvcmRlclJpZ2h0U3R5bGUoKSwgc3R5
bGUuYm9yZGVyUmlnaHRJc1RyYW5zcGFyZW50KCksICFob3Jpem9udGFsIHx8IGluY2x1ZGVMb2dp
Y2FsUmlnaHRFZGdlKSwKKyAgICAgICAgY29uc3RydWN0Qm9yZGVyRWRnZShzdHlsZS5ib3JkZXJC
b3R0b21XaWR0aCgpLCBDU1NQcm9wZXJ0eUJvcmRlckJvdHRvbUNvbG9yLCBzdHlsZS5ib3JkZXJC
b3R0b21TdHlsZSgpLCBzdHlsZS5ib3JkZXJCb3R0b21Jc1RyYW5zcGFyZW50KCksIGhvcml6b250
YWwgfHwgaW5jbHVkZUxvZ2ljYWxSaWdodEVkZ2UpLAorICAgICAgICBjb25zdHJ1Y3RCb3JkZXJF
ZGdlKHN0eWxlLmJvcmRlckxlZnRXaWR0aCgpLCBDU1NQcm9wZXJ0eUJvcmRlckxlZnRDb2xvciwg
c3R5bGUuYm9yZGVyTGVmdFN0eWxlKCksIHN0eWxlLmJvcmRlckxlZnRJc1RyYW5zcGFyZW50KCks
ICFob3Jpem9udGFsIHx8IGluY2x1ZGVMb2dpY2FsTGVmdEVkZ2UpCisgICAgfTsKK30KKworc3Rk
OjpwYWlyPEJveFNpZGUsIEJveFNpZGU+IGFkamFjZW50U2lkZXNGb3JTaWRlKEJveFNpZGUgc2lk
ZSkKK3sKKyAgICBzd2l0Y2ggKHNpZGUpIHsKKyAgICBjYXNlIEJveFNpZGU6OlRvcDogcmV0dXJu
IHsgQm94U2lkZTo6TGVmdCwgQm94U2lkZTo6UmlnaHQgfTsKKyAgICBjYXNlIEJveFNpZGU6OkJv
dHRvbTogcmV0dXJuIHsgQm94U2lkZTo6TGVmdCwgQm94U2lkZTo6UmlnaHQgfTsKKyAgICBjYXNl
IEJveFNpZGU6OkxlZnQ6IHJldHVybiB7IEJveFNpZGU6OlRvcCwgQm94U2lkZTo6Qm90dG9tIH07
CisgICAgY2FzZSBCb3hTaWRlOjpSaWdodDogcmV0dXJuIHsgQm94U2lkZTo6VG9wLCBCb3hTaWRl
OjpCb3R0b20gfTsKKyAgICB9CisgICAgcmV0dXJuIHsgQm94U2lkZTo6TGVmdCwgQm94U2lkZTo6
UmlnaHQgfTsKK30KKwogQm94RGVjb3JhdGlvbkRhdGE6OkJveERlY29yYXRpb25EYXRhKCkgPSBk
ZWZhdWx0OwogCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Rpc3BsYXkvY3NzL0Rpc3Bs
YXlCb3hEZWNvcmF0aW9uRGF0YS5oIGIvU291cmNlL1dlYkNvcmUvZGlzcGxheS9jc3MvRGlzcGxh
eUJveERlY29yYXRpb25EYXRhLmgKaW5kZXggNjJhOWE5YmViZGZkOTUyMjU4MzdmMjJlOWE4MDI2
YzhhNTIyMzczMy4uODk2YjM4Nzg2MzgxMDEyN2Y3ODQxODc2YTNmMTljNWJkZmUyZDRmMCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZGlzcGxheS9jc3MvRGlzcGxheUJveERlY29yYXRpb25E
YXRhLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZGlzcGxheS9jc3MvRGlzcGxheUJveERlY29yYXRp
b25EYXRhLmgKQEAgLTI5LDEwICsyOSwxNCBAQAogCiAjaW5jbHVkZSAiRGlzcGxheUZpbGxMYXll
ckltYWdlR2VvbWV0cnkuaCIKICNpbmNsdWRlICJGbG9hdFJvdW5kZWRSZWN0LmgiCisjaW5jbHVk
ZSAiUmVjdEVkZ2VzLmgiCisjaW5jbHVkZSA8dXRpbGl0eT4KICNpbmNsdWRlIDx3dGYvSXNvTWFs
bG9jLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgUmVuZGVyU3R5bGU7CisKIG5h
bWVzcGFjZSBMYXlvdXQgewogY2xhc3MgQm94OwogY2xhc3MgQm94R2VvbWV0cnk7CkBAIC00MCw2
ICs0NCw0MiBAQCBjbGFzcyBCb3hHZW9tZXRyeTsKIAogbmFtZXNwYWNlIERpc3BsYXkgewogCisv
LyBQaXhlbC1zbmFwcGVkIGJvcmRlciBlZGdlLgorY2xhc3MgQm9yZGVyRWRnZSB7CitwdWJsaWM6
CisgICAgQm9yZGVyRWRnZSgpID0gZGVmYXVsdDsKKyAgICBCb3JkZXJFZGdlKGZsb2F0IHdpZHRo
LCBmbG9hdCBpbm5lcldpZHRoLCBmbG9hdCBvdXRlcldpZHRoLCBDb2xvciwgQm9yZGVyU3R5bGUs
IGJvb2wgaXNUcmFuc3BhcmVudCwgYm9vbCBpc1ByZXNlbnQpOworCisgICAgZmxvYXQgd2lkdGgo
KSBjb25zdCB7IHJldHVybiBtX3dpZHRoOyB9CisgICAgQm9yZGVyU3R5bGUgc3R5bGUoKSBjb25z
dCB7IHJldHVybiBtX3N0eWxlOyB9CisgICAgY29uc3QgQ29sb3ImIGNvbG9yKCkgY29uc3QgeyBy
ZXR1cm4gbV9jb2xvcjsgfQorICAgIGJvb2wgaXNUcmFuc3BhcmVudCgpIGNvbnN0IHsgcmV0dXJu
IG1faXNUcmFuc3BhcmVudDsgfQorICAgIGJvb2wgaXNQcmVzZW50KCkgY29uc3QgeyByZXR1cm4g
bV9pc1ByZXNlbnQ7IH0KKworICAgIGJvb2wgaGFzVmlzaWJsZUNvbG9yQW5kU3R5bGUoKSBjb25z
dCB7IHJldHVybiBtX3N0eWxlID4gQm9yZGVyU3R5bGU6OkhpZGRlbiAmJiAhbV9pc1RyYW5zcGFy
ZW50OyB9CisgICAgYm9vbCBzaG91bGRSZW5kZXIoKSBjb25zdCB7IHJldHVybiB3aWR0aEZvclBh
aW50aW5nKCkgJiYgaGFzVmlzaWJsZUNvbG9yQW5kU3R5bGUoKTsgfQorICAgIGJvb2wgcHJlc2Vu
dEJ1dEludmlzaWJsZSgpIGNvbnN0IHsgcmV0dXJuIHdpZHRoRm9yUGFpbnRpbmcoKSAmJiAhaGFz
VmlzaWJsZUNvbG9yQW5kU3R5bGUoKTsgfQorICAgIGZsb2F0IHdpZHRoRm9yUGFpbnRpbmcoKSBj
b25zdCB7IHJldHVybiBtX2lzUHJlc2VudCA/IG1fd2lkdGggOiAwOyB9CisKKyAgICBmbG9hdCBp
bm5lcldpZHRoKCkgY29uc3QgeyByZXR1cm4gbV9pbm5lcldpZHRoOyB9CisgICAgZmxvYXQgb3V0
ZXJXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fb3V0ZXJXaWR0aDsgfQorCisgICAgYm9vbCBvYnNj
dXJlc0JhY2tncm91bmQoKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBDb2xvciBtX2NvbG9yOwor
ICAgIGZsb2F0IG1fd2lkdGggeyAwIH07CisgICAgZmxvYXQgbV9pbm5lcldpZHRoIHsgMCB9OyAv
LyBPbmx5IHVzZWQgZm9yIGRvdWJsZSBib3JkZXJzLgorICAgIGZsb2F0IG1fb3V0ZXJXaWR0aCB7
IDAgfTsgLy8gT25seSB1c2VkIGZvciBkb3VibGUgYm9yZGVycy4KKyAgICBCb3JkZXJTdHlsZSBt
X3N0eWxlIHsgQm9yZGVyU3R5bGU6OkhpZGRlbiB9OworICAgIGJvb2wgbV9pc1RyYW5zcGFyZW50
IHsgZmFsc2UgfTsKKyAgICBib29sIG1faXNQcmVzZW50IHsgZmFsc2UgfTsKK307CisKK1JlY3RF
ZGdlczxCb3JkZXJFZGdlPiBjYWxjdWxhdGVCb3JkZXJFZGdlcyhjb25zdCBSZW5kZXJTdHlsZSYs
IGZsb2F0IHBpeGVsU25hcHBpbmdGYWN0b3IsIGJvb2wgaW5jbHVkZUxvZ2ljYWxMZWZ0RWRnZSA9
IHRydWUsIGJvb2wgaW5jbHVkZUxvZ2ljYWxSaWdodEVkZ2UgPSB0cnVlKTsKKworc3RkOjpwYWly
PEJveFNpZGUsIEJveFNpZGU+IGFkamFjZW50U2lkZXNGb3JTaWRlKEJveFNpZGUpOworCiAvLyBQ
ZXItYm94IGRhdGEgd2l0aCBwaXhlbC1zbmFwcGVkIGdlb21ldHJ5IGZvciBiYWNrZ3JvdW5kIGlt
YWdlcyBhbmQgYm9yZGVyLXJhZGl1cy4KIGNsYXNzIEJveERlY29yYXRpb25EYXRhIHsKICAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRF9XSVRIX0hFQVBfSURFTlRJRklFUihCb3hEZWNvcmF0aW9u
RGF0YSk7CkBAIC00NywxNCArODcsMjAgQEAgcHVibGljOgogICAgIEJveERlY29yYXRpb25EYXRh
KCk7CiAKICAgICBjb25zdCBWZWN0b3I8RmlsbExheWVySW1hZ2VHZW9tZXRyeSwgMT4gYmFja2dy
b3VuZEltYWdlR2VvbWV0cnkoKSBjb25zdCB7IHJldHVybiBtX2JhY2tncm91bmRJbWFnZUdlb21l
dHJ5OyB9Ci0gICAgdm9pZCBzZXRCYWNrZ3JvdW5kSW1hZ2VHZW9tZXRyeShjb25zdCBWZWN0b3I8
RmlsbExheWVySW1hZ2VHZW9tZXRyeSwgMT4mIGdlb21ldHJ5KSB7IG1fYmFja2dyb3VuZEltYWdl
R2VvbWV0cnkgPSBnZW9tZXRyeTsgfQorICAgIHZvaWQgc2V0QmFja2dyb3VuZEltYWdlR2VvbWV0
cnkoVmVjdG9yPEZpbGxMYXllckltYWdlR2VvbWV0cnksIDE+JiYgZ2VvbWV0cnkpIHsgbV9iYWNr
Z3JvdW5kSW1hZ2VHZW9tZXRyeSA9IFdURk1vdmUoZ2VvbWV0cnkpOyB9CisKKyAgICBjb25zdCBS
ZWN0RWRnZXM8Qm9yZGVyRWRnZT4mIGJvcmRlckVkZ2VzKCkgY29uc3QgeyByZXR1cm4gbV9ib3Jk
ZXJFZGdlczsgfQorICAgIHZvaWQgc2V0Qm9yZGVyRWRnZXMoUmVjdEVkZ2VzPEJvcmRlckVkZ2U+
JiYgZWRnZXMpIHsgbV9ib3JkZXJFZGdlcyA9IFdURk1vdmUoZWRnZXMpOyB9CisKKyAgICBjb25z
dCBGbG9hdFJvdW5kZWRSZWN0OjpSYWRpaSogYm9yZGVyUmFkaWkoKSBjb25zdCB7IHJldHVybiBt
X2JvcmRlclJhZGlpLmdldCgpOyB9CisgICAgdm9pZCBzZXRCb3JkZXJSYWRpaShzdGQ6OnVuaXF1
ZV9wdHI8RmxvYXRSb3VuZGVkUmVjdDo6UmFkaWk+JiYgcmFkaWkpIHsgbV9ib3JkZXJSYWRpaSA9
IFdURk1vdmUocmFkaWkpOyB9CiAKLSAgICBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByb3VuZGVk
Qm9yZGVyUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fcm91bmRlZEJvcmRlclJlY3Q7IH0KLSAgICB2
b2lkIHNldFJvdW5kZWRCb3JkZXJSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5kZWRS
ZWN0KSB7IG1fcm91bmRlZEJvcmRlclJlY3QgPSByb3VuZGVkUmVjdDsgfQorICAgIGJvb2wgaGFz
Qm9yZGVySW1hZ2UoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfSAvLyBGSVhNRTogSW1wbGVtZW50
IGJvcmRlci1pbWFnZS4KIAogcHJpdmF0ZToKICAgICBWZWN0b3I8RmlsbExheWVySW1hZ2VHZW9t
ZXRyeSwgMT4gbV9iYWNrZ3JvdW5kSW1hZ2VHZW9tZXRyeTsKLSAgICBGbG9hdFJvdW5kZWRSZWN0
IG1fcm91bmRlZEJvcmRlclJlY3Q7CisgICAgUmVjdEVkZ2VzPEJvcmRlckVkZ2U+IG1fYm9yZGVy
RWRnZXM7CisgICAgc3RkOjp1bmlxdWVfcHRyPEZsb2F0Um91bmRlZFJlY3Q6OlJhZGlpPiBtX2Jv
cmRlclJhZGlpOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgRGlzcGxheQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvZGlzcGxheS9jc3MvRGlzcGxheUJveERlY29yYXRpb25QYWludGVyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2Rpc3BsYXkvY3NzL0Rpc3BsYXlCb3hEZWNvcmF0aW9uUGFpbnRlci5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uODlkNzFlNjkyNDk2MDAzMzMyZTIwNzZmZGRhZWMyZmM1MTQwYjAyMgot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Rpc3BsYXkvY3NzL0Rpc3BsYXlCb3hE
ZWNvcmF0aW9uUGFpbnRlci5jcHAKQEAgLTAsMCArMSwxMzA0IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRpc3BsYXlCb3hEZWNvcmF0aW9uUGFpbnRlci5o
IgorCisjaWYgRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCisKKyNpbmNsdWRlICJC
b3JkZXJFZGdlLmgiIC8vIEZvciBCb3hTaWRlU2V0LgorI2luY2x1ZGUgIkNvbG9yLmgiCisjaW5j
bHVkZSAiRGlzcGxheUJveERlY29yYXRpb25EYXRhLmgiCisjaW5jbHVkZSAiRGlzcGxheUJveE1v
ZGVsQm94LmgiCisjaW5jbHVkZSAiRGlzcGxheVBhaW50aW5nQ29udGV4dC5oIgorI2luY2x1ZGUg
IkRpc3BsYXlTdHlsZS5oIgorI2luY2x1ZGUgIkRpc3BsYXlUcmVlLmgiCisjaW5jbHVkZSAiRmls
bExheWVyLmgiCisjaW5jbHVkZSAiR2VvbWV0cnlVdGlsaXRpZXMuaCIKKyNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSAiTGF5b3V0UG9p
bnQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworbmFtZXNwYWNlIERpc3BsYXkgeworCitjbGFz
cyBCb3JkZXJQYWludGVyIHsKK3B1YmxpYzoKKyAgICBCb3JkZXJQYWludGVyKGNvbnN0IFJlY3RF
ZGdlczxCb3JkZXJFZGdlPiYgZWRnZXMsIFBhaW50aW5nQ29udGV4dCYgY29udGV4dCwgY29uc3Qg
RmxvYXRSb3VuZGVkUmVjdCYgYm9yZGVyUmVjdCwgYm9vbCBpbmNsdWRlTGVmdEVkZ2UsIGJvb2wg
aW5jbHVkZVJpZ2h0RWRnZSkKKyAgICAgICAgOiBtX2VkZ2VzKGVkZ2VzKQorICAgICAgICAsIG1f
cGFpbnRpbmdDb250ZXh0KGNvbnRleHQpCisgICAgICAgICwgbV9ib3JkZXJSZWN0KGJvcmRlclJl
Y3QpCisgICAgICAgICwgbV9pbmNsdWRlTGVmdEVkZ2UoaW5jbHVkZUxlZnRFZGdlKQorICAgICAg
ICAsIG1faW5jbHVkZVJpZ2h0RWRnZShpbmNsdWRlUmlnaHRFZGdlKQorICAgIHsKKyAgICB9Cisg
ICAgCisgICAgdm9pZCBwYWludEJvcmRlcnMoKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBzdGF0
aWMgYm9vbCBlZGdlc1NoYXJlQ29sb3IoY29uc3QgQm9yZGVyRWRnZSYgZmlyc3RFZGdlLCBjb25z
dCBCb3JkZXJFZGdlJiBzZWNvbmRFZGdlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZpcnN0RWRn
ZS5jb2xvcigpID09IHNlY29uZEVkZ2UuY29sb3IoKTsKKyAgICB9CisKKyAgICBzdGF0aWMgYm9v
bCBib3JkZXJTdHlsZUZpbGxzQm9yZGVyQXJlYShCb3JkZXJTdHlsZSBzdHlsZSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiAhKHN0eWxlID09IEJvcmRlclN0eWxlOjpEb3R0ZWQgfHwgc3R5bGUgPT0g
Qm9yZGVyU3R5bGU6OkRhc2hlZCB8fCBzdHlsZSA9PSBCb3JkZXJTdHlsZTo6RG91YmxlKTsKKyAg
ICB9CisKKyAgICBzdGF0aWMgYm9vbCBib3JkZXJTdHlsZUhhc0lubmVyRGV0YWlsKEJvcmRlclN0
eWxlIHN0eWxlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0eWxlID09IEJvcmRlclN0eWxlOjpH
cm9vdmUgfHwgc3R5bGUgPT0gQm9yZGVyU3R5bGU6OlJpZGdlIHx8IHN0eWxlID09IEJvcmRlclN0
eWxlOjpEb3VibGU7CisgICAgfQorCisgICAgc3RhdGljIGJvb2wgc3R5bGVSZXF1aXJlc0NsaXBQ
b2x5Z29uKEJvcmRlclN0eWxlIHN0eWxlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0eWxlID09
IEJvcmRlclN0eWxlOjpEb3R0ZWQgfHwgc3R5bGUgPT0gQm9yZGVyU3R5bGU6OkRhc2hlZDsgLy8g
VGhlc2UgYXJlIGRyYXduIHdpdGggYSBzdHJva2UsIHNvIHdlIGhhdmUgdG8gY2xpcCB0byBnZXQg
Y29ybmVyIG1pdGVycy4KKyAgICB9CisKKyAgICBzdGF0aWMgYm9vbCBib3JkZXJTdHlsZUlzRG90
dGVkT3JEYXNoZWQoQm9yZGVyU3R5bGUgc3R5bGUpCisgICAgeworICAgICAgICByZXR1cm4gc3R5
bGUgPT0gQm9yZGVyU3R5bGU6OkRvdHRlZCB8fCBzdHlsZSA9PSBCb3JkZXJTdHlsZTo6RGFzaGVk
OworICAgIH0KKworICAgIHN0YXRpYyBib29sIGJvcmRlcldpbGxBcmNJbm5lckVkZ2UoY29uc3Qg
RmxvYXRTaXplJiBmaXJzdFJhZGl1cywgY29uc3QgRmxvYXRTaXplJiBzZWNvbmRSYWRpdXMpCisg
ICAgeworICAgICAgICByZXR1cm4gIWZpcnN0UmFkaXVzLmlzWmVybygpIHx8ICFzZWNvbmRSYWRp
dXMuaXNaZXJvKCk7CisgICAgfQorCisgICAgc3RhdGljIGJvb2wgYm9yZGVyU3R5bGVIYXNVbm1h
dGNoZWRDb2xvcnNBdENvcm5lcihCb3JkZXJTdHlsZSwgQm94U2lkZSwgQm94U2lkZSBhZGphY2Vu
dFNpZGUpOworICAgIHN0YXRpYyBib29sIGJvcmRlclN0eWxlc1JlcXVpcmVNaXRyZShCb3hTaWRl
LCBCb3hTaWRlIGFkamFjZW50U2lkZSwgQm9yZGVyU3R5bGUsIEJvcmRlclN0eWxlIGFkamFjZW50
U3R5bGUpOworICAgIHN0YXRpYyBGbG9hdFJvdW5kZWRSZWN0IGNhbGN1bGF0ZUFkanVzdGVkSW5u
ZXJCb3JkZXIoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgaW5uZXJCb3JkZXIsIEJveFNpZGUpOwor
ICAgIHN0YXRpYyB2b2lkIGNhbGN1bGF0ZUJvcmRlclN0eWxlQ29sb3IoQm9yZGVyU3R5bGUsIEJv
eFNpZGUsIENvbG9yJik7CisKKyAgICBib29sIGNvbG9yc01hdGNoQXRDb3JuZXIoQm94U2lkZSwg
Qm94U2lkZSBhZGphY2VudFNpZGUpIGNvbnN0OworICAgIGJvb2wgY29sb3JOZWVkc0FudGlBbGlh
c0F0Q29ybmVyKEJveFNpZGUsIEJveFNpZGUgYWRqYWNlbnRTaWRlKSBjb25zdDsKKyAgICBib29s
IHdpbGxCZU92ZXJkcmF3bihCb3hTaWRlLCBCb3hTaWRlIGFkamFjZW50U2lkZSkgY29uc3Q7Cisg
ICAgYm9vbCBqb2luUmVxdWlyZXNNaXRyZShCb3hTaWRlLCBCb3hTaWRlIGFkamFjZW50U2lkZSwg
Ym9vbCBhbGxvd092ZXJkcmF3KSBjb25zdDsKKworICAgIEZsb2F0Um91bmRlZFJlY3Qgcm91bmRl
ZEJvcmRlckZvclJlY3QoY29uc3QgRmxvYXRSZWN0JikgY29uc3Q7CisgICAgRmxvYXRSb3VuZGVk
UmVjdCByb3VuZGVkSW5zZXRCb3JkZXJGb3JSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IFJl
Y3RFZGdlczxmbG9hdD4mIGJvcmRlcldpZHRoKSBjb25zdDsKKworICAgIHZvaWQgY2xpcEJvcmRl
clNpZGVQb2x5Z29uKGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIG91dGVyQm9yZGVyLCBjb25zdCBG
bG9hdFJvdW5kZWRSZWN0JiBpbm5lckJvcmRlciwgQm94U2lkZSwgYm9vbCBmaXJzdEVkZ2VNYXRj
aGVzLCBib29sIHNlY29uZEVkZ2VNYXRjaGVzKSBjb25zdDsKKworICAgIHZvaWQgZHJhd0xpbmVG
b3JCb3hTaWRlKGNvbnN0IEZsb2F0UmVjdCYsIEJveFNpZGUsIENvbG9yLCBCb3JkZXJTdHlsZSwg
ZmxvYXQgYWRqYWNlbnRXaWR0aDEsIGZsb2F0IGFkamFjZW50V2lkdGgyLCBib29sIGFudGlhbGlh
cykgY29uc3Q7CisgICAgdm9pZCBkcmF3Qm94U2lkZUZyb21QYXRoKGNvbnN0IEZsb2F0UmVjdCYg
Ym9yZGVyUmVjdCwgY29uc3QgUGF0aCYgYm9yZGVyUGF0aCwgZmxvYXQgdGhpY2tuZXNzLCBmbG9h
dCBkcmF3VGhpY2tuZXNzLCBCb3hTaWRlLCBDb2xvciwgQm9yZGVyU3R5bGUpIGNvbnN0OworCisg
ICAgdm9pZCBwYWludE9uZUJvcmRlclNpZGUoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgb3V0ZXJC
b3JkZXIsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIGlubmVyQm9yZGVyLCBjb25zdCBGbG9hdFJl
Y3QmIHNpZGVSZWN0LCBCb3hTaWRlLCBjb25zdCBQYXRoKiwgYm9vbCBhbnRpYWxpYXMsIGNvbnN0
IENvbG9yKiBvdmVycmlkZUNvbG9yKSBjb25zdDsKKyAgICB2b2lkIHBhaW50Qm9yZGVyU2lkZXMo
Y29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgb3V0ZXJCb3JkZXIsIGNvbnN0IEZsb2F0Um91bmRlZFJl
Y3QmIGlubmVyQm9yZGVyLCBCb3hTaWRlU2V0LCBib29sIGFudGlhbGlhcywgY29uc3QgQ29sb3Iq
IG92ZXJyaWRlQ29sb3IgPSBudWxscHRyKSBjb25zdDsKKyAgICB2b2lkIHBhaW50VHJhbnNsdWNl
bnRCb3JkZXJTaWRlcyhjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiBvdXRlckJvcmRlciwgY29uc3Qg
RmxvYXRSb3VuZGVkUmVjdCYgaW5uZXJCb3JkZXIsIEJveFNpZGVTZXQsIGJvb2wgYW50aWFsaWFz
KSBjb25zdDsKKworICAgIGNvbnN0IFJlY3RFZGdlczxCb3JkZXJFZGdlPiYgbV9lZGdlczsKKyAg
ICBQYWludGluZ0NvbnRleHQmIG1fcGFpbnRpbmdDb250ZXh0OworICAgIAorICAgIEZsb2F0Um91
bmRlZFJlY3QgbV9ib3JkZXJSZWN0OworICAgIAorICAgIGJvb2wgbV9pbmNsdWRlTGVmdEVkZ2Ug
eyB0cnVlIH07CisgICAgYm9vbCBtX2luY2x1ZGVSaWdodEVkZ2UgeyB0cnVlIH07Cit9OworCisK
Ky8vIEJvcmRlclN0eWxlOjpPdXRzZXQgZGFya2VucyB0aGUgYm90dG9tIGFuZCByaWdodCAoYW5k
IG1heWJlIGxpZ2h0ZW5zIHRoZSB0b3AgYW5kIGxlZnQpCisvLyBCb3JkZXJTdHlsZTo6SW5zZXQg
ZGFya2VucyB0aGUgdG9wIGFuZCBsZWZ0IChhbmQgbWF5YmUgbGlnaHRlbnMgdGhlIGJvdHRvbSBh
bmQgcmlnaHQpCitib29sIEJvcmRlclBhaW50ZXI6OmJvcmRlclN0eWxlSGFzVW5tYXRjaGVkQ29s
b3JzQXRDb3JuZXIoQm9yZGVyU3R5bGUgc3R5bGUsIEJveFNpZGUgc2lkZSwgQm94U2lkZSBhZGph
Y2VudFNpZGUpCit7CisgICAgLy8gVGhlc2Ugc3R5bGVzIG1hdGNoIGF0IHRoZSB0b3AvbGVmdCBh
bmQgYm90dG9tL3JpZ2h0LgorICAgIGlmIChzdHlsZSA9PSBCb3JkZXJTdHlsZTo6SW5zZXQgfHwg
c3R5bGUgPT0gQm9yZGVyU3R5bGU6Okdyb292ZSB8fCBzdHlsZSA9PSBCb3JkZXJTdHlsZTo6Umlk
Z2UgfHwgc3R5bGUgPT0gQm9yZGVyU3R5bGU6Ok91dHNldCkgeworICAgICAgICBCb3hTaWRlU2V0
IHRvcFJpZ2h0U2lkZXMgPSB7IEJveFNpZGVGbGFnOjpUb3AsIEJveFNpZGVGbGFnOjpSaWdodCB9
OworICAgICAgICBCb3hTaWRlU2V0IGJvdHRvbUxlZnRTaWRlcyA9IHsgQm94U2lkZUZsYWc6OkJv
dHRvbSwgQm94U2lkZUZsYWc6OkxlZnQgfTsKKworICAgICAgICBCb3hTaWRlU2V0IHVzZWRTaWRl
cyB7IGVkZ2VGbGFnRm9yU2lkZShzaWRlKSwgZWRnZUZsYWdGb3JTaWRlKGFkamFjZW50U2lkZSkg
fTsKKyAgICAgICAgcmV0dXJuIHVzZWRTaWRlcyA9PSB0b3BSaWdodFNpZGVzIHx8IHVzZWRTaWRl
cyA9PSBib3R0b21MZWZ0U2lkZXM7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKworYm9v
bCBCb3JkZXJQYWludGVyOjpjb2xvcnNNYXRjaEF0Q29ybmVyKEJveFNpZGUgc2lkZSwgQm94U2lk
ZSBhZGphY2VudFNpZGUpIGNvbnN0Cit7CisgICAgYXV0byYgZWRnZSA9IG1fZWRnZXMuYXQoc2lk
ZSk7CisgICAgYXV0byYgYWRqYWNlbnRFZGdlID0gbV9lZGdlcy5hdChhZGphY2VudFNpZGUpOwor
CisgICAgaWYgKGVkZ2Uuc2hvdWxkUmVuZGVyKCkgIT0gYWRqYWNlbnRFZGdlLnNob3VsZFJlbmRl
cigpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIWVkZ2VzU2hhcmVDb2xvcihl
ZGdlLCBhZGphY2VudEVkZ2UpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4g
IWJvcmRlclN0eWxlSGFzVW5tYXRjaGVkQ29sb3JzQXRDb3JuZXIoZWRnZS5zdHlsZSgpLCBzaWRl
LCBhZGphY2VudFNpZGUpOworfQorCitib29sIEJvcmRlclBhaW50ZXI6OmNvbG9yTmVlZHNBbnRp
QWxpYXNBdENvcm5lcihCb3hTaWRlIHNpZGUsIEJveFNpZGUgYWRqYWNlbnRTaWRlKSBjb25zdAor
eworICAgIGF1dG8mIGVkZ2UgPSBtX2VkZ2VzLmF0KHNpZGUpOworICAgIGF1dG8mIGFkamFjZW50
RWRnZSA9IG1fZWRnZXMuYXQoYWRqYWNlbnRTaWRlKTsKKworICAgIGlmIChlZGdlLmNvbG9yKCku
aXNPcGFxdWUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKGVkZ2Uuc2hvdWxk
UmVuZGVyKCkgIT0gYWRqYWNlbnRFZGdlLnNob3VsZFJlbmRlcigpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICBpZiAoIWVkZ2VzU2hhcmVDb2xvcihlZGdlLCBhZGphY2VudEVkZ2UpKQor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHJldHVybiBib3JkZXJTdHlsZUhhc1VubWF0Y2hl
ZENvbG9yc0F0Q29ybmVyKGVkZ2Uuc3R5bGUoKSwgc2lkZSwgYWRqYWNlbnRTaWRlKTsKK30KKwor
dm9pZCBCb3JkZXJQYWludGVyOjpjYWxjdWxhdGVCb3JkZXJTdHlsZUNvbG9yKEJvcmRlclN0eWxl
IHN0eWxlLCBCb3hTaWRlIHNpZGUsIENvbG9yJiBjb2xvcikKK3sKKyAgICBBU1NFUlQoc3R5bGUg
PT0gQm9yZGVyU3R5bGU6Okluc2V0IHx8IHN0eWxlID09IEJvcmRlclN0eWxlOjpPdXRzZXQpOwor
CisgICAgLy8gVGhpcyB2YWx1ZXMgd2VyZSBkZXJpdmVkIGVtcGlyaWNhbGx5LgorICAgIGNvbnN0
ZXhwciBmbG9hdCBiYXNlRGFya0NvbG9yTHVtaW5hbmNlIHsgMC4wMTQ0NDM4NDRmIH07IC8vIEx1
bWluYW5jZSBvZiBTUkdCQTx1aW50OF90PiB7IDMyLCAzMiwgMzIgfQorICAgIGNvbnN0ZXhwciBm
bG9hdCBiYXNlTGlnaHRDb2xvckx1bWluYW5jZSB7IDAuODMwNzdmIH07IC8vIEx1bWluYW5jZSBv
ZiBTUkdCQTx1aW50OF90PiB7IDIzNSwgMjM1LCAyMzUgfQorCisgICAgZW51bSBPcGVyYXRpb24g
eyBEYXJrZW4sIExpZ2h0ZW4gfTsKKworICAgIE9wZXJhdGlvbiBvcGVyYXRpb24gPSAoc2lkZSA9
PSBCb3hTaWRlOjpUb3AgfHwgc2lkZSA9PSBCb3hTaWRlOjpMZWZ0KSA9PSAoc3R5bGUgPT0gQm9y
ZGVyU3R5bGU6Okluc2V0KSA/IERhcmtlbiA6IExpZ2h0ZW47CisKKyAgICAvLyBIZXJlIHdlIHdp
bGwgZGFya2VuIHRoZSBib3JkZXIgZGVjb3JhdGlvbiBjb2xvciB3aGVuIG5lZWRlZC4gVGhpcyB3
aWxsIHlpZWxkIGEgc2ltaWxhciBiZWhhdmlvciBhcyBpbiBGRi4KKyAgICBpZiAob3BlcmF0aW9u
ID09IERhcmtlbikgeworICAgICAgICBpZiAoY29sb3IubHVtaW5hbmNlKCkgPiBiYXNlRGFya0Nv
bG9yTHVtaW5hbmNlKQorICAgICAgICAgICAgY29sb3IgPSBjb2xvci5kYXJrZW5lZCgpOworICAg
IH0gZWxzZSB7CisgICAgICAgIGlmIChjb2xvci5sdW1pbmFuY2UoKSA8IGJhc2VMaWdodENvbG9y
THVtaW5hbmNlKQorICAgICAgICAgICAgY29sb3IgPSBjb2xvci5saWdodGVuZWQoKTsKKyAgICB9
Cit9CisKKy8vIFRoaXMgYXNzdW1lcyB0aGF0IHdlIGRyYXcgaW4gb3JkZXI6IHRvcCwgYm90dG9t
LCBsZWZ0LCByaWdodC4KK2Jvb2wgQm9yZGVyUGFpbnRlcjo6d2lsbEJlT3ZlcmRyYXduKEJveFNp
ZGUgc2lkZSwgQm94U2lkZSBhZGphY2VudFNpZGUpIGNvbnN0Cit7CisgICAgc3dpdGNoIChzaWRl
KSB7CisgICAgY2FzZSBCb3hTaWRlOjpUb3A6CisgICAgY2FzZSBCb3hTaWRlOjpCb3R0b206IHsK
KyAgICAgICAgYXV0byYgZWRnZSA9IG1fZWRnZXMuYXQoc2lkZSk7CisgICAgICAgIGF1dG8mIGFk
amFjZW50RWRnZSA9IG1fZWRnZXMuYXQoYWRqYWNlbnRTaWRlKTsKKworICAgICAgICBpZiAoYWRq
YWNlbnRFZGdlLnByZXNlbnRCdXRJbnZpc2libGUoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgICAgICBpZiAoIWVkZ2VzU2hhcmVDb2xvcihlZGdlLCBhZGphY2VudEVkZ2UpICYm
ICFhZGphY2VudEVkZ2UuY29sb3IoKS5pc09wYXF1ZSgpKQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICAKKyAgICAgICAgaWYgKCFib3JkZXJTdHlsZUZpbGxzQm9yZGVyQXJlYShh
ZGphY2VudEVkZ2Uuc3R5bGUoKSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIGNhc2UgQm94U2lkZTo6TGVmdDoKKyAgICBjYXNl
IEJveFNpZGU6OlJpZ2h0OgorICAgICAgICAvLyBUaGVzZSBkcmF3IGxhc3QsIHNvIGFyZSBuZXZl
ciBvdmVyZHJhd24uCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIGZh
bHNlOworfQorCitib29sIEJvcmRlclBhaW50ZXI6OmJvcmRlclN0eWxlc1JlcXVpcmVNaXRyZShC
b3hTaWRlIHNpZGUsIEJveFNpZGUgYWRqYWNlbnRTaWRlLCBCb3JkZXJTdHlsZSBzdHlsZSwgQm9y
ZGVyU3R5bGUgYWRqYWNlbnRTdHlsZSkKK3sKKyAgICBpZiAoc3R5bGUgPT0gQm9yZGVyU3R5bGU6
OkRvdWJsZSB8fCBhZGphY2VudFN0eWxlID09IEJvcmRlclN0eWxlOjpEb3VibGUgfHwgYWRqYWNl
bnRTdHlsZSA9PSBCb3JkZXJTdHlsZTo6R3Jvb3ZlIHx8IGFkamFjZW50U3R5bGUgPT0gQm9yZGVy
U3R5bGU6OlJpZGdlKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmIChib3JkZXJTdHls
ZUlzRG90dGVkT3JEYXNoZWQoc3R5bGUpICE9IGJvcmRlclN0eWxlSXNEb3R0ZWRPckRhc2hlZChh
ZGphY2VudFN0eWxlKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAoc3R5bGUgIT0g
YWRqYWNlbnRTdHlsZSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICByZXR1cm4gYm9yZGVy
U3R5bGVIYXNVbm1hdGNoZWRDb2xvcnNBdENvcm5lcihzdHlsZSwgc2lkZSwgYWRqYWNlbnRTaWRl
KTsKK30KKworRmxvYXRSb3VuZGVkUmVjdCBCb3JkZXJQYWludGVyOjpjYWxjdWxhdGVBZGp1c3Rl
ZElubmVyQm9yZGVyKGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIGlubmVyQm9yZGVyLCBCb3hTaWRl
IHNpZGUpCit7CisgICAgLy8gRXhwYW5kIHRoZSBpbm5lciBib3JkZXIgYXMgbmVjZXNzYXJ5IHRv
IG1ha2UgaXQgYSByb3VuZGVkIHJlY3QgKGkuZS4gcmFkaWkgY29udGFpbmVkIHdpdGhpbiBlYWNo
IGVkZ2UpLgorICAgIC8vIFRoaXMgZnVuY3Rpb24gcmVsaWVzIG9uIHRoZSBmYWN0IHdlIG9ubHkg
Z2V0IHJhZGlpIG5vdCBjb250YWluZWQgd2l0aGluIGVhY2ggZWRnZSBpZiBvbmUgb2YgdGhlIHJh
ZGlpCisgICAgLy8gZm9yIGFuIGVkZ2UgaXMgemVybywgc28gd2UgY2FuIHNoaWZ0IHRoZSBhcmMg
dG93YXJkcyB0aGUgemVybyByYWRpdXMgY29ybmVyLgorICAgIGF1dG8gbmV3UmFkaWkgPSBpbm5l
ckJvcmRlci5yYWRpaSgpOworICAgIGF1dG8gbmV3UmVjdCA9IGlubmVyQm9yZGVyLnJlY3QoKTsK
KworICAgIGZsb2F0IG92ZXJzaG9vdDsKKyAgICBmbG9hdCBtYXhSYWRpaTsKKworICAgIHN3aXRj
aCAoc2lkZSkgeworICAgIGNhc2UgQm94U2lkZTo6VG9wOgorICAgICAgICBvdmVyc2hvb3QgPSBu
ZXdSYWRpaS50b3BMZWZ0KCkud2lkdGgoKSArIG5ld1JhZGlpLnRvcFJpZ2h0KCkud2lkdGgoKSAt
IG5ld1JlY3Qud2lkdGgoKTsKKyAgICAgICAgaWYgKG92ZXJzaG9vdCA+IDApIHsKKyAgICAgICAg
ICAgIEFTU0VSVCghKG5ld1JhZGlpLnRvcExlZnQoKS53aWR0aCgpICYmIG5ld1JhZGlpLnRvcFJp
Z2h0KCkud2lkdGgoKSkpOworICAgICAgICAgICAgbmV3UmVjdC5zZXRXaWR0aChuZXdSZWN0Lndp
ZHRoKCkgKyBvdmVyc2hvb3QpOworICAgICAgICAgICAgaWYgKCFuZXdSYWRpaS50b3BMZWZ0KCku
d2lkdGgoKSkKKyAgICAgICAgICAgICAgICBuZXdSZWN0Lm1vdmUoLW92ZXJzaG9vdCwgMCk7Cisg
ICAgICAgIH0KKyAgICAgICAgbmV3UmFkaWkuc2V0Qm90dG9tTGVmdCh7IH0pOworICAgICAgICBu
ZXdSYWRpaS5zZXRCb3R0b21SaWdodCh7IH0pOworICAgICAgICBtYXhSYWRpaSA9IHN0ZDo6bWF4
KG5ld1JhZGlpLnRvcExlZnQoKS5oZWlnaHQoKSwgbmV3UmFkaWkudG9wUmlnaHQoKS5oZWlnaHQo
KSk7CisgICAgICAgIGlmIChtYXhSYWRpaSA+IG5ld1JlY3QuaGVpZ2h0KCkpCisgICAgICAgICAg
ICBuZXdSZWN0LnNldEhlaWdodChtYXhSYWRpaSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2Fz
ZSBCb3hTaWRlOjpCb3R0b206CisgICAgICAgIG92ZXJzaG9vdCA9IG5ld1JhZGlpLmJvdHRvbUxl
ZnQoKS53aWR0aCgpICsgbmV3UmFkaWkuYm90dG9tUmlnaHQoKS53aWR0aCgpIC0gbmV3UmVjdC53
aWR0aCgpOworICAgICAgICBpZiAob3ZlcnNob290ID4gMCkgeworICAgICAgICAgICAgQVNTRVJU
KCEobmV3UmFkaWkuYm90dG9tTGVmdCgpLndpZHRoKCkgJiYgbmV3UmFkaWkuYm90dG9tUmlnaHQo
KS53aWR0aCgpKSk7CisgICAgICAgICAgICBuZXdSZWN0LnNldFdpZHRoKG5ld1JlY3Qud2lkdGgo
KSArIG92ZXJzaG9vdCk7CisgICAgICAgICAgICBpZiAoIW5ld1JhZGlpLmJvdHRvbUxlZnQoKS53
aWR0aCgpKQorICAgICAgICAgICAgICAgIG5ld1JlY3QubW92ZSgtb3ZlcnNob290LCAwKTsKKyAg
ICAgICAgfQorICAgICAgICBuZXdSYWRpaS5zZXRUb3BMZWZ0KHsgfSk7CisgICAgICAgIG5ld1Jh
ZGlpLnNldFRvcFJpZ2h0KHsgfSk7CisgICAgICAgIG1heFJhZGlpID0gc3RkOjptYXgobmV3UmFk
aWkuYm90dG9tTGVmdCgpLmhlaWdodCgpLCBuZXdSYWRpaS5ib3R0b21SaWdodCgpLmhlaWdodCgp
KTsKKyAgICAgICAgaWYgKG1heFJhZGlpID4gbmV3UmVjdC5oZWlnaHQoKSkgeworICAgICAgICAg
ICAgbmV3UmVjdC5tb3ZlKDAsIG5ld1JlY3QuaGVpZ2h0KCkgLSBtYXhSYWRpaSk7CisgICAgICAg
ICAgICBuZXdSZWN0LnNldEhlaWdodChtYXhSYWRpaSk7CisgICAgICAgIH0KKyAgICAgICAgYnJl
YWs7CisKKyAgICBjYXNlIEJveFNpZGU6OkxlZnQ6CisgICAgICAgIG92ZXJzaG9vdCA9IG5ld1Jh
ZGlpLnRvcExlZnQoKS5oZWlnaHQoKSArIG5ld1JhZGlpLmJvdHRvbUxlZnQoKS5oZWlnaHQoKSAt
IG5ld1JlY3QuaGVpZ2h0KCk7CisgICAgICAgIGlmIChvdmVyc2hvb3QgPiAwKSB7CisgICAgICAg
ICAgICBBU1NFUlQoIShuZXdSYWRpaS50b3BMZWZ0KCkuaGVpZ2h0KCkgJiYgbmV3UmFkaWkuYm90
dG9tTGVmdCgpLmhlaWdodCgpKSk7CisgICAgICAgICAgICBuZXdSZWN0LnNldEhlaWdodChuZXdS
ZWN0LmhlaWdodCgpICsgb3ZlcnNob290KTsKKyAgICAgICAgICAgIGlmICghbmV3UmFkaWkudG9w
TGVmdCgpLmhlaWdodCgpKQorICAgICAgICAgICAgICAgIG5ld1JlY3QubW92ZSgwLCAtb3ZlcnNo
b290KTsKKyAgICAgICAgfQorICAgICAgICBuZXdSYWRpaS5zZXRUb3BSaWdodCh7IH0pOworICAg
ICAgICBuZXdSYWRpaS5zZXRCb3R0b21SaWdodCh7IH0pOworICAgICAgICBtYXhSYWRpaSA9IHN0
ZDo6bWF4KG5ld1JhZGlpLnRvcExlZnQoKS53aWR0aCgpLCBuZXdSYWRpaS5ib3R0b21MZWZ0KCku
d2lkdGgoKSk7CisgICAgICAgIGlmIChtYXhSYWRpaSA+IG5ld1JlY3Qud2lkdGgoKSkKKyAgICAg
ICAgICAgIG5ld1JlY3Quc2V0V2lkdGgobWF4UmFkaWkpOworICAgICAgICBicmVhazsKKworICAg
IGNhc2UgQm94U2lkZTo6UmlnaHQ6CisgICAgICAgIG92ZXJzaG9vdCA9IG5ld1JhZGlpLnRvcFJp
Z2h0KCkuaGVpZ2h0KCkgKyBuZXdSYWRpaS5ib3R0b21SaWdodCgpLmhlaWdodCgpIC0gbmV3UmVj
dC5oZWlnaHQoKTsKKyAgICAgICAgaWYgKG92ZXJzaG9vdCA+IDApIHsKKyAgICAgICAgICAgIEFT
U0VSVCghKG5ld1JhZGlpLnRvcFJpZ2h0KCkuaGVpZ2h0KCkgJiYgbmV3UmFkaWkuYm90dG9tUmln
aHQoKS5oZWlnaHQoKSkpOworICAgICAgICAgICAgbmV3UmVjdC5zZXRIZWlnaHQobmV3UmVjdC5o
ZWlnaHQoKSArIG92ZXJzaG9vdCk7CisgICAgICAgICAgICBpZiAoIW5ld1JhZGlpLnRvcFJpZ2h0
KCkuaGVpZ2h0KCkpCisgICAgICAgICAgICAgICAgbmV3UmVjdC5tb3ZlKDAsIC1vdmVyc2hvb3Qp
OworICAgICAgICB9CisgICAgICAgIG5ld1JhZGlpLnNldFRvcExlZnQoeyB9KTsKKyAgICAgICAg
bmV3UmFkaWkuc2V0Qm90dG9tTGVmdCh7IH0pOworICAgICAgICBtYXhSYWRpaSA9IHN0ZDo6bWF4
KG5ld1JhZGlpLnRvcFJpZ2h0KCkud2lkdGgoKSwgbmV3UmFkaWkuYm90dG9tUmlnaHQoKS53aWR0
aCgpKTsKKyAgICAgICAgaWYgKG1heFJhZGlpID4gbmV3UmVjdC53aWR0aCgpKSB7CisgICAgICAg
ICAgICBuZXdSZWN0Lm1vdmUobmV3UmVjdC53aWR0aCgpIC0gbWF4UmFkaWksIDApOworICAgICAg
ICAgICAgbmV3UmVjdC5zZXRXaWR0aChtYXhSYWRpaSk7CisgICAgICAgIH0KKyAgICAgICAgYnJl
YWs7CisgICAgfQorCisgICAgcmV0dXJuIEZsb2F0Um91bmRlZFJlY3QgeyBuZXdSZWN0LCBuZXdS
YWRpaSB9OworfQorCitib29sIEJvcmRlclBhaW50ZXI6OmpvaW5SZXF1aXJlc01pdHJlKEJveFNp
ZGUgc2lkZSwgQm94U2lkZSBhZGphY2VudFNpZGUsIGJvb2wgYWxsb3dPdmVyZHJhdykgY29uc3QK
K3sKKyAgICBhdXRvJiBlZGdlID0gbV9lZGdlcy5hdChzaWRlKTsKKyAgICBhdXRvJiBhZGphY2Vu
dEVkZ2UgPSBtX2VkZ2VzLmF0KGFkamFjZW50U2lkZSk7CisKKyAgICBpZiAoKGVkZ2UuaXNUcmFu
c3BhcmVudCgpICYmIGFkamFjZW50RWRnZS5pc1RyYW5zcGFyZW50KCkpIHx8ICFhZGphY2VudEVk
Z2UuaXNQcmVzZW50KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChhbGxvd092
ZXJkcmF3ICYmIHdpbGxCZU92ZXJkcmF3bihzaWRlLCBhZGphY2VudFNpZGUpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIWVkZ2VzU2hhcmVDb2xvcihlZGdlLCBhZGphY2VudEVk
Z2UpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmIChib3JkZXJTdHlsZXNSZXF1aXJl
TWl0cmUoc2lkZSwgYWRqYWNlbnRTaWRlLCBlZGdlLnN0eWxlKCksIGFkamFjZW50RWRnZS5zdHls
ZSgpKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgCisgICAgcmV0dXJuIGZhbHNlOworfQor
CitzdGF0aWMgRmxvYXRSb3VuZGVkUmVjdCByb3VuZGVkUmVjdFdpdGhJbmNsdWRlZFJhZGlpKGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdDo6UmFkaWkmIHJhZGlp
LCBib29sIGluY2x1ZGVMZWZ0RWRnZSwgYm9vbCBpbmNsdWRlUmlnaHRFZGdlKQoreworICAgIEZs
b2F0Um91bmRlZFJlY3Q6OlJhZGlpIHJlc3VsdFJhZGlpOworCisgICAgaWYgKGluY2x1ZGVMZWZ0
RWRnZSkgeworICAgICAgICByZXN1bHRSYWRpaS5zZXRUb3BMZWZ0KHJhZGlpLnRvcExlZnQoKSk7
CisgICAgICAgIHJlc3VsdFJhZGlpLnNldEJvdHRvbUxlZnQocmFkaWkuYm90dG9tTGVmdCgpKTsK
KyAgICB9CisKKyAgICBpZiAoaW5jbHVkZVJpZ2h0RWRnZSkgeworICAgICAgICByZXN1bHRSYWRp
aS5zZXRUb3BSaWdodChyYWRpaS50b3BSaWdodCgpKTsKKyAgICAgICAgcmVzdWx0UmFkaWkuc2V0
Qm90dG9tUmlnaHQocmFkaWkuYm90dG9tUmlnaHQoKSk7CisgICAgfQorCisgICAgcmVzdWx0UmFk
aWkuc2NhbGUoY2FsY0JvcmRlclJhZGlpQ29uc3RyYWludFNjYWxlRm9yKHJlY3QsIHJlc3VsdFJh
ZGlpKSk7CisgICAgcmV0dXJuIEZsb2F0Um91bmRlZFJlY3QgeyByZWN0LCByZXN1bHRSYWRpaSB9
OworfQorCitGbG9hdFJvdW5kZWRSZWN0IEJvcmRlclBhaW50ZXI6OnJvdW5kZWRCb3JkZXJGb3JS
ZWN0KGNvbnN0IEZsb2F0UmVjdCYgYm9yZGVyUmVjdCkgY29uc3QKK3sKKyAgICBpZiAobV9ib3Jk
ZXJSZWN0LmlzUm91bmRlZCgpKSB7CisgICAgICAgIGF1dG8gcmFkaWkgPSBtX2JvcmRlclJlY3Qu
cmFkaWkoKTsKKyAgICAgICAgcmV0dXJuIHJvdW5kZWRSZWN0V2l0aEluY2x1ZGVkUmFkaWkoYm9y
ZGVyUmVjdCwgcmFkaWksIG1faW5jbHVkZUxlZnRFZGdlLCBtX2luY2x1ZGVSaWdodEVkZ2UpOwor
ICAgIH0KKyAgICByZXR1cm4gRmxvYXRSb3VuZGVkUmVjdCB7IGJvcmRlclJlY3QgfTsKK30KKwor
RmxvYXRSb3VuZGVkUmVjdCBCb3JkZXJQYWludGVyOjpyb3VuZGVkSW5zZXRCb3JkZXJGb3JSZWN0
KGNvbnN0IEZsb2F0UmVjdCYgYm9yZGVyUmVjdCwgY29uc3QgUmVjdEVkZ2VzPGZsb2F0PiYgYm9y
ZGVyV2lkdGgpIGNvbnN0Cit7CisgICAgYXV0byBpbnNldFJlY3QgPSBGbG9hdFJlY3QgeyBib3Jk
ZXJSZWN0LngoKSArIGJvcmRlcldpZHRoLmxlZnQoKSwgYm9yZGVyUmVjdC55KCkgKyBib3JkZXJX
aWR0aC50b3AoKSwKKyAgICAgICAgYm9yZGVyUmVjdC53aWR0aCgpIC0gYm9yZGVyV2lkdGgubGVm
dCgpIC0gYm9yZGVyV2lkdGgucmlnaHQoKSwgYm9yZGVyUmVjdC5oZWlnaHQoKSAtIGJvcmRlcldp
ZHRoLnRvcCgpIC0gYm9yZGVyV2lkdGguYm90dG9tKCkgfTsKKworICAgIGlmIChtX2JvcmRlclJl
Y3QuaXNSb3VuZGVkKCkpIHsKKyAgICAgICAgYXV0byByYWRpaSA9IG1fYm9yZGVyUmVjdC5yYWRp
aSgpOworICAgICAgICByYWRpaS5zaHJpbmsoYm9yZGVyV2lkdGgudG9wKCksIGJvcmRlcldpZHRo
LmJvdHRvbSgpLCBib3JkZXJXaWR0aC5sZWZ0KCksIGJvcmRlcldpZHRoLnJpZ2h0KCkpOworICAg
ICAgICByZXR1cm4gcm91bmRlZFJlY3RXaXRoSW5jbHVkZWRSYWRpaShpbnNldFJlY3QsIHJhZGlp
LCBtX2luY2x1ZGVMZWZ0RWRnZSwgbV9pbmNsdWRlUmlnaHRFZGdlKTsKKyAgICB9CisKKyAgICBy
ZXR1cm4gRmxvYXRSb3VuZGVkUmVjdCB7IGluc2V0UmVjdCwgeyB9IH07Cit9CisKK3ZvaWQgQm9y
ZGVyUGFpbnRlcjo6ZHJhd0JveFNpZGVGcm9tUGF0aChjb25zdCBGbG9hdFJlY3QmIGJvcmRlclJl
Y3QsIGNvbnN0IFBhdGgmIGJvcmRlclBhdGgsIGZsb2F0IHRoaWNrbmVzcywgZmxvYXQgZHJhd1Ro
aWNrbmVzcywgQm94U2lkZSBzaWRlLCBDb2xvciBjb2xvciwgQm9yZGVyU3R5bGUgYm9yZGVyU3R5
bGUpIGNvbnN0Cit7CisgICAgaWYgKHRoaWNrbmVzcyA8PSAwKQorICAgICAgICByZXR1cm47CisK
KyAgICBpZiAoYm9yZGVyU3R5bGUgPT0gQm9yZGVyU3R5bGU6OkRvdWJsZSAmJiB0aGlja25lc3Mg
PCAzKQorICAgICAgICBib3JkZXJTdHlsZSA9IEJvcmRlclN0eWxlOjpTb2xpZDsKKworICAgIHN3
aXRjaCAoYm9yZGVyU3R5bGUpIHsKKyAgICBjYXNlIEJvcmRlclN0eWxlOjpOb25lOgorICAgIGNh
c2UgQm9yZGVyU3R5bGU6OkhpZGRlbjoKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQm9yZGVy
U3R5bGU6OkRvdHRlZDoKKyAgICBjYXNlIEJvcmRlclN0eWxlOjpEYXNoZWQ6IHsKKyAgICAgICAg
bV9wYWludGluZ0NvbnRleHQuY29udGV4dC5zZXRTdHJva2VDb2xvcihjb2xvcik7CisKKyAgICAg
ICAgLy8gVGhlIHN0cm9rZSBpcyBkb3VibGVkIGhlcmUgYmVjYXVzZSB0aGUgcHJvdmlkZWQgcGF0
aCBpcyB0aGUKKyAgICAgICAgLy8gb3V0c2lkZSBlZGdlIG9mIHRoZSBib3JkZXIgc28gaGFsZiB0
aGUgc3Ryb2tlIGlzIGNsaXBwZWQgb2ZmLgorICAgICAgICAvLyBUaGUgZXh0cmEgbXVsdGlwbGll
ciBpcyBzbyB0aGF0IHRoZSBjbGlwcGluZyBtYXNrIGNhbiBhbnRpYWxpYXMKKyAgICAgICAgLy8g
dGhlIGVkZ2VzIHRvIHByZXZlbnQgamFnZ2llcy4KKyAgICAgICAgbV9wYWludGluZ0NvbnRleHQu
Y29udGV4dC5zZXRTdHJva2VUaGlja25lc3MoZHJhd1RoaWNrbmVzcyAqIDIgKiAxLjFmKTsKKyAg
ICAgICAgbV9wYWludGluZ0NvbnRleHQuY29udGV4dC5zZXRTdHJva2VTdHlsZShib3JkZXJTdHls
ZSA9PSBCb3JkZXJTdHlsZTo6RGFzaGVkID8gRGFzaGVkU3Ryb2tlIDogRG90dGVkU3Ryb2tlKTsK
KworICAgICAgICAvLyBJZiB0aGUgbnVtYmVyIG9mIGRhc2hlcyB0aGF0IGZpdCBpbiB0aGUgcGF0
aCBpcyBvZGQgYW5kIG5vbi1pbnRlZ3JhbCB0aGVuIHdlCisgICAgICAgIC8vIHdpbGwgaGF2ZSBh
biBhd2t3YXJkbHktc2l6ZWQgZGFzaCBhdCB0aGUgZW5kIG9mIHRoZSBwYXRoLiBUbyB0cnkgdG8g
YXZvaWQgdGhhdAorICAgICAgICAvLyBoZXJlLCB3ZSBzaW1wbHkgbWFrZSB0aGUgd2hpdGVzcGFj
ZSBkYXNoZXMgZXZlciBzbyBzbGlnaHRseSBiaWdnZXIuCisgICAgICAgIC8vIEZJWE1FOiBUaGlz
IGNvdWxkIGJlIGV2ZW4gYmV0dGVyIGlmIHdlIHRyaWVkIHRvIG1hbmlwdWxhdGUgdGhlIGRhc2gg
b2Zmc2V0CisgICAgICAgIC8vIGFuZCBwb3NzaWJseSB0aGUgZ2FwTGVuZ3RoIHRvIGdldCB0aGUg
Y29ybmVycyBkYXNoLXN5bW1ldHJpY2FsLgorICAgICAgICBmbG9hdCBkYXNoTGVuZ3RoID0gdGhp
Y2tuZXNzICogKChib3JkZXJTdHlsZSA9PSBCb3JkZXJTdHlsZTo6RGFzaGVkKSA/IDMuMGYgOiAx
LjBmKTsKKyAgICAgICAgZmxvYXQgZ2FwTGVuZ3RoID0gZGFzaExlbmd0aDsKKyAgICAgICAgZmxv
YXQgbnVtYmVyT2ZEYXNoZXMgPSBib3JkZXJQYXRoLmxlbmd0aCgpIC8gZGFzaExlbmd0aDsKKyAg
ICAgICAgLy8gRG9uJ3QgdHJ5IHRvIHNob3cgZGFzaGVzIGlmIHdlIGhhdmUgbGVzcyB0aGFuIDIg
ZGFzaGVzICsgMiBnYXBzLgorICAgICAgICAvLyBGSVhNRTogc2hvdWxkIGRvIHRoaXMgdGVzdCBw
ZXIgc2lkZS4KKyAgICAgICAgaWYgKG51bWJlck9mRGFzaGVzID49IDQpIHsKKyAgICAgICAgICAg
IGJvb2wgZXZlbk51bWJlck9mRnVsbERhc2hlcyA9ICEoKGludCludW1iZXJPZkRhc2hlcyAlIDIp
OworICAgICAgICAgICAgYm9vbCBpbnRlZ3JhbE51bWJlck9mRGFzaGVzID0gIShudW1iZXJPZkRh
c2hlcyAtIChpbnQpbnVtYmVyT2ZEYXNoZXMpOworICAgICAgICAgICAgaWYgKCFldmVuTnVtYmVy
T2ZGdWxsRGFzaGVzICYmICFpbnRlZ3JhbE51bWJlck9mRGFzaGVzKSB7CisgICAgICAgICAgICAg
ICAgZmxvYXQgbnVtYmVyT2ZHYXBzID0gbnVtYmVyT2ZEYXNoZXMgLyAyOworICAgICAgICAgICAg
ICAgIGdhcExlbmd0aCArPSAoZGFzaExlbmd0aCAgLyBudW1iZXJPZkdhcHMpOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBEYXNoQXJyYXkgbGluZURhc2g7CisgICAgICAgICAgICBsaW5l
RGFzaC5hcHBlbmQoZGFzaExlbmd0aCk7CisgICAgICAgICAgICBsaW5lRGFzaC5hcHBlbmQoZ2Fw
TGVuZ3RoKTsKKyAgICAgICAgICAgIG1fcGFpbnRpbmdDb250ZXh0LmNvbnRleHQuc2V0TGluZURh
c2gobGluZURhc2gsIGRhc2hMZW5ndGgpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAv
LyBGSVhNRTogc3Ryb2tpbmcgdGhlIGJvcmRlciBwYXRoIGNhdXNlcyBpc3N1ZXMgd2l0aCB0aWdo
dCBjb3JuZXJzOgorICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NTg3MTEKKyAgICAgICAgLy8gQWxzbywgdG8gZ2V0IHRoZSBiZXN0IGFwcGVhcmFuY2Ug
d2Ugc2hvdWxkIHN0cm9rZSBhIHBhdGggYmV0d2VlbiB0aGUgdHdvIGJvcmRlcnMuCisgICAgICAg
IG1fcGFpbnRpbmdDb250ZXh0LmNvbnRleHQuc3Ryb2tlUGF0aChib3JkZXJQYXRoKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEJvcmRlclN0eWxlOjpEb3VibGU6IHsKKyAgICAg
ICAgLy8gR2V0IHRoZSBpbm5lciBib3JkZXIgcmVjdHMgZm9yIGJvdGggdGhlIG91dGVyIGJvcmRl
ciBsaW5lIGFuZCB0aGUgaW5uZXIgYm9yZGVyIGxpbmUKKyAgICAgICAgLy8gRklYTUU6IFJlY3Qg
ZWRnZXMuCisgICAgICAgIGZsb2F0IG91dGVyQm9yZGVyVG9wV2lkdGggPSBtX2VkZ2VzLnRvcCgp
Lm91dGVyV2lkdGgoKTsKKyAgICAgICAgZmxvYXQgaW5uZXJCb3JkZXJUb3BXaWR0aCA9IG1fZWRn
ZXMudG9wKCkuaW5uZXJXaWR0aCgpOworCisgICAgICAgIGZsb2F0IG91dGVyQm9yZGVyUmlnaHRX
aWR0aCA9IG1fZWRnZXMucmlnaHQoKS5vdXRlcldpZHRoKCk7CisgICAgICAgIGZsb2F0IGlubmVy
Qm9yZGVyUmlnaHRXaWR0aCA9IG1fZWRnZXMucmlnaHQoKS5pbm5lcldpZHRoKCk7CisKKyAgICAg
ICAgZmxvYXQgb3V0ZXJCb3JkZXJCb3R0b21XaWR0aCA9IG1fZWRnZXMuYm90dG9tKCkub3V0ZXJX
aWR0aCgpOworICAgICAgICBmbG9hdCBpbm5lckJvcmRlckJvdHRvbVdpZHRoID0gbV9lZGdlcy5i
b3R0b20oKS5pbm5lcldpZHRoKCk7CisKKyAgICAgICAgZmxvYXQgb3V0ZXJCb3JkZXJMZWZ0V2lk
dGggPSBtX2VkZ2VzLmxlZnQoKS5vdXRlcldpZHRoKCk7CisgICAgICAgIGZsb2F0IGlubmVyQm9y
ZGVyTGVmdFdpZHRoID0gbV9lZGdlcy5sZWZ0KCkuaW5uZXJXaWR0aCgpOworCisgICAgICAgIC8v
IERyYXcgaW5uZXIgYm9yZGVyIGxpbmUKKyAgICAgICAgeworICAgICAgICAgICAgR3JhcGhpY3ND
b250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKG1fcGFpbnRpbmdDb250ZXh0LmNvbnRleHQpOwor
ICAgICAgICAgICAgYXV0byBpbm5lckNsaXAgPSByb3VuZGVkSW5zZXRCb3JkZXJGb3JSZWN0KGJv
cmRlclJlY3QsIHsgaW5uZXJCb3JkZXJUb3BXaWR0aCwgaW5uZXJCb3JkZXJSaWdodFdpZHRoLCBp
bm5lckJvcmRlckJvdHRvbVdpZHRoLCBpbm5lckJvcmRlckxlZnRXaWR0aCB9KTsKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgbV9wYWludGluZ0NvbnRleHQuY29udGV4dC5jbGlwUm91bmRlZFJl
Y3QoaW5uZXJDbGlwKTsKKyAgICAgICAgICAgIGRyYXdCb3hTaWRlRnJvbVBhdGgoYm9yZGVyUmVj
dCwgYm9yZGVyUGF0aCwgdGhpY2tuZXNzLCBkcmF3VGhpY2tuZXNzLCBzaWRlLCBjb2xvciwgQm9y
ZGVyU3R5bGU6OlNvbGlkKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIERyYXcgb3V0ZXIgYm9y
ZGVyIGxpbmUKKyAgICAgICAgeworICAgICAgICAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZl
ciBzdGF0ZVNhdmVyKG1fcGFpbnRpbmdDb250ZXh0LmNvbnRleHQpOworICAgICAgICAgICAgYXV0
byBvdXRlckNsaXAgPSByb3VuZGVkSW5zZXRCb3JkZXJGb3JSZWN0KGJvcmRlclJlY3QsIHsgb3V0
ZXJCb3JkZXJUb3BXaWR0aCwgb3V0ZXJCb3JkZXJSaWdodFdpZHRoLCBvdXRlckJvcmRlckJvdHRv
bVdpZHRoLCBvdXRlckJvcmRlckxlZnRXaWR0aCB9KTsKKyAgICAgICAgICAgIG1fcGFpbnRpbmdD
b250ZXh0LmNvbnRleHQuY2xpcE91dFJvdW5kZWRSZWN0KG91dGVyQ2xpcCk7CisgICAgICAgICAg
ICBkcmF3Qm94U2lkZUZyb21QYXRoKGJvcmRlclJlY3QsIGJvcmRlclBhdGgsIHRoaWNrbmVzcywg
ZHJhd1RoaWNrbmVzcywgc2lkZSwgY29sb3IsIEJvcmRlclN0eWxlOjpTb2xpZCk7CisgICAgICAg
IH0KKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEJvcmRlclN0eWxlOjpSaWRnZToK
KyAgICBjYXNlIEJvcmRlclN0eWxlOjpHcm9vdmU6CisgICAgeworICAgICAgICBCb3JkZXJTdHls
ZSBzMTsKKyAgICAgICAgQm9yZGVyU3R5bGUgczI7CisgICAgICAgIGlmIChib3JkZXJTdHlsZSA9
PSBCb3JkZXJTdHlsZTo6R3Jvb3ZlKSB7CisgICAgICAgICAgICBzMSA9IEJvcmRlclN0eWxlOjpJ
bnNldDsKKyAgICAgICAgICAgIHMyID0gQm9yZGVyU3R5bGU6Ok91dHNldDsKKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIHMxID0gQm9yZGVyU3R5bGU6Ok91dHNldDsKKyAgICAgICAgICAg
IHMyID0gQm9yZGVyU3R5bGU6Okluc2V0OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAv
LyBQYWludCBmdWxsIGJvcmRlcgorICAgICAgICBkcmF3Qm94U2lkZUZyb21QYXRoKGJvcmRlclJl
Y3QsIGJvcmRlclBhdGgsIHRoaWNrbmVzcywgZHJhd1RoaWNrbmVzcywgc2lkZSwgY29sb3IsIHMx
KTsKKworICAgICAgICAvLyBQYWludCBpbm5lciBvbmx5CisgICAgICAgIEdyYXBoaWNzQ29udGV4
dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihtX3BhaW50aW5nQ29udGV4dC5jb250ZXh0KTsKKyAgICAg
ICAgLy8gRklYTUU6IFNob3VsZCBoYXZlIHBpeGVsIHNuYXBwZWQgdGhlc2UgYXQgZGlzcGxheSB0
cmVlIGdlbmVyYXRpb24gdGltZS4KKyAgICAgICAgLy8gRklYTUU6IFJlY3RFZGdlcworICAgICAg
ICBmbG9hdCB0b3BXaWR0aCB7IG1fZWRnZXMudG9wKCkud2lkdGhGb3JQYWludGluZygpIC8gMiB9
OworICAgICAgICBmbG9hdCBib3R0b21XaWR0aCB7IG1fZWRnZXMuYm90dG9tKCkud2lkdGhGb3JQ
YWludGluZygpIC8gMiB9OworICAgICAgICBmbG9hdCBsZWZ0V2lkdGggeyBtX2VkZ2VzLmxlZnQo
KS53aWR0aEZvclBhaW50aW5nKCkgLyAyIH07CisgICAgICAgIGZsb2F0IHJpZ2h0V2lkdGggeyBt
X2VkZ2VzLnJpZ2h0KCkud2lkdGhGb3JQYWludGluZygpIC8gMiB9OworCisgICAgICAgIGF1dG8g
Y2xpcFJlY3QgPSByb3VuZGVkSW5zZXRCb3JkZXJGb3JSZWN0KGJvcmRlclJlY3QsIHsgdG9wV2lk
dGgsIHJpZ2h0V2lkdGgsIGJvdHRvbVdpZHRoLCBsZWZ0V2lkdGggfSk7CisKKyAgICAgICAgbV9w
YWludGluZ0NvbnRleHQuY29udGV4dC5jbGlwUm91bmRlZFJlY3QoY2xpcFJlY3QpOworICAgICAg
ICBkcmF3Qm94U2lkZUZyb21QYXRoKGJvcmRlclJlY3QsIGJvcmRlclBhdGgsIHRoaWNrbmVzcywg
ZHJhd1RoaWNrbmVzcywgc2lkZSwgY29sb3IsIHMyKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICBjYXNlIEJvcmRlclN0eWxlOjpJbnNldDoKKyAgICBjYXNlIEJvcmRlclN0eWxlOjpPdXRz
ZXQ6CisgICAgICAgIGNhbGN1bGF0ZUJvcmRlclN0eWxlQ29sb3IoYm9yZGVyU3R5bGUsIHNpZGUs
IGNvbG9yKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorCisgICAgbV9wYWludGluZ0NvbnRleHQuY29udGV4dC5zZXRTdHJva2VTdHlsZShOb1N0
cm9rZSk7CisgICAgbV9wYWludGluZ0NvbnRleHQuY29udGV4dC5zZXRGaWxsQ29sb3IoY29sb3Ip
OworICAgIG1fcGFpbnRpbmdDb250ZXh0LmNvbnRleHQuZHJhd1JlY3QoYm9yZGVyUmVjdCk7Cit9
CisKK3ZvaWQgQm9yZGVyUGFpbnRlcjo6Y2xpcEJvcmRlclNpZGVQb2x5Z29uKGNvbnN0IEZsb2F0
Um91bmRlZFJlY3QmIG91dGVyQm9yZGVyLCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiBpbm5lckJv
cmRlciwgQm94U2lkZSBzaWRlLCBib29sIGZpcnN0RWRnZU1hdGNoZXMsIGJvb2wgc2Vjb25kRWRn
ZU1hdGNoZXMpIGNvbnN0Cit7CisgICAgY29uc3QgRmxvYXRSZWN0JiBvdXRlclJlY3QgPSBvdXRl
ckJvcmRlci5yZWN0KCk7CisgICAgY29uc3QgRmxvYXRSZWN0JiBpbm5lclJlY3QgPSBpbm5lckJv
cmRlci5yZWN0KCk7CisKKyAgICAvLyBGb3IgZWFjaCBzaWRlLCBjcmVhdGUgYSBxdWFkIHRoYXQg
ZW5jb21wYXNzZXMgYWxsIHBhcnRzIG9mIHRoYXQgc2lkZSB0aGF0IG1heSBkcmF3LAorICAgIC8v
IGluY2x1ZGluZyBhcmVhcyBpbnNpZGUgdGhlIGlubmVyQm9yZGVyLgorICAgIC8vCisgICAgLy8g
ICAgICAgICAwLS0tLS0tLS0tLS0tLS0tLTMKKyAgICAvLyAgICAgICAwICBcICAgICAgICAgICAg
ICAvICAwCisgICAgLy8gICAgICAgfFwgIDEtLS0tLS0tLS0tLSAyICAvfAorICAgIC8vICAgICAg
IHwgMSAgICAgICAgICAgICAgICAxIHwKKyAgICAvLyAgICAgICB8IHwgICAgICAgICAgICAgICAg
fCB8CisgICAgLy8gICAgICAgfCB8ICAgICAgICAgICAgICAgIHwgfAorICAgIC8vICAgICAgIHwg
MiAgICAgICAgICAgICAgICAyIHwKKyAgICAvLyAgICAgICB8LyAgMS0tLS0tLS0tLS0tLTIgIFx8
CisgICAgLy8gICAgICAgMyAgLyAgICAgICAgICAgICAgXCAgMworICAgIC8vICAgICAgICAgMC0t
LS0tLS0tLS0tLS0tLS0zCisgICAgLy8KKyAgICBWZWN0b3I8RmxvYXRQb2ludD4gcXVhZDsKKyAg
ICBxdWFkLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoNCk7CisgICAgc3dpdGNoIChzaWRlKSB7Cisg
ICAgY2FzZSBCb3hTaWRlOjpUb3A6CisgICAgICAgIHF1YWQudW5jaGVja2VkQXBwZW5kKG91dGVy
UmVjdC5taW5YTWluWUNvcm5lcigpKTsKKyAgICAgICAgcXVhZC51bmNoZWNrZWRBcHBlbmQoaW5u
ZXJSZWN0Lm1pblhNaW5ZQ29ybmVyKCkpOworICAgICAgICBxdWFkLnVuY2hlY2tlZEFwcGVuZChp
bm5lclJlY3QubWF4WE1pbllDb3JuZXIoKSk7CisgICAgICAgIHF1YWQudW5jaGVja2VkQXBwZW5k
KG91dGVyUmVjdC5tYXhYTWluWUNvcm5lcigpKTsKKworICAgICAgICBpZiAoIWlubmVyQm9yZGVy
LnJhZGlpKCkudG9wTGVmdCgpLmlzWmVybygpKQorICAgICAgICAgICAgZmluZEludGVyc2VjdGlv
bihvdXRlclJlY3QubWluWE1pbllDb3JuZXIoKSwgaW5uZXJSZWN0Lm1pblhNaW5ZQ29ybmVyKCks
IGlubmVyUmVjdC5taW5YTWF4WUNvcm5lcigpLCBpbm5lclJlY3QubWF4WE1pbllDb3JuZXIoKSwg
cXVhZFsxXSk7CisKKyAgICAgICAgaWYgKCFpbm5lckJvcmRlci5yYWRpaSgpLnRvcFJpZ2h0KCku
aXNaZXJvKCkpCisgICAgICAgICAgICBmaW5kSW50ZXJzZWN0aW9uKG91dGVyUmVjdC5tYXhYTWlu
WUNvcm5lcigpLCBpbm5lclJlY3QubWF4WE1pbllDb3JuZXIoKSwgaW5uZXJSZWN0Lm1pblhNaW5Z
Q29ybmVyKCksIGlubmVyUmVjdC5tYXhYTWF4WUNvcm5lcigpLCBxdWFkWzJdKTsKKyAgICAgICAg
YnJlYWs7CisKKyAgICBjYXNlIEJveFNpZGU6OkxlZnQ6CisgICAgICAgIHF1YWQudW5jaGVja2Vk
QXBwZW5kKG91dGVyUmVjdC5taW5YTWluWUNvcm5lcigpKTsKKyAgICAgICAgcXVhZC51bmNoZWNr
ZWRBcHBlbmQoaW5uZXJSZWN0Lm1pblhNaW5ZQ29ybmVyKCkpOworICAgICAgICBxdWFkLnVuY2hl
Y2tlZEFwcGVuZChpbm5lclJlY3QubWluWE1heFlDb3JuZXIoKSk7CisgICAgICAgIHF1YWQudW5j
aGVja2VkQXBwZW5kKG91dGVyUmVjdC5taW5YTWF4WUNvcm5lcigpKTsKKworICAgICAgICBpZiAo
IWlubmVyQm9yZGVyLnJhZGlpKCkudG9wTGVmdCgpLmlzWmVybygpKQorICAgICAgICAgICAgZmlu
ZEludGVyc2VjdGlvbihvdXRlclJlY3QubWluWE1pbllDb3JuZXIoKSwgaW5uZXJSZWN0Lm1pblhN
aW5ZQ29ybmVyKCksIGlubmVyUmVjdC5taW5YTWF4WUNvcm5lcigpLCBpbm5lclJlY3QubWF4WE1p
bllDb3JuZXIoKSwgcXVhZFsxXSk7CisKKyAgICAgICAgaWYgKCFpbm5lckJvcmRlci5yYWRpaSgp
LmJvdHRvbUxlZnQoKS5pc1plcm8oKSkKKyAgICAgICAgICAgIGZpbmRJbnRlcnNlY3Rpb24ob3V0
ZXJSZWN0Lm1pblhNYXhZQ29ybmVyKCksIGlubmVyUmVjdC5taW5YTWF4WUNvcm5lcigpLCBpbm5l
clJlY3QubWluWE1pbllDb3JuZXIoKSwgaW5uZXJSZWN0Lm1heFhNYXhZQ29ybmVyKCksIHF1YWRb
Ml0pOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgQm94U2lkZTo6Qm90dG9tOgorICAgICAg
ICBxdWFkLnVuY2hlY2tlZEFwcGVuZChvdXRlclJlY3QubWluWE1heFlDb3JuZXIoKSk7CisgICAg
ICAgIHF1YWQudW5jaGVja2VkQXBwZW5kKGlubmVyUmVjdC5taW5YTWF4WUNvcm5lcigpKTsKKyAg
ICAgICAgcXVhZC51bmNoZWNrZWRBcHBlbmQoaW5uZXJSZWN0Lm1heFhNYXhZQ29ybmVyKCkpOwor
ICAgICAgICBxdWFkLnVuY2hlY2tlZEFwcGVuZChvdXRlclJlY3QubWF4WE1heFlDb3JuZXIoKSk7
CisKKyAgICAgICAgaWYgKCFpbm5lckJvcmRlci5yYWRpaSgpLmJvdHRvbUxlZnQoKS5pc1plcm8o
KSkKKyAgICAgICAgICAgIGZpbmRJbnRlcnNlY3Rpb24ob3V0ZXJSZWN0Lm1pblhNYXhZQ29ybmVy
KCksIGlubmVyUmVjdC5taW5YTWF4WUNvcm5lcigpLCBpbm5lclJlY3QubWluWE1pbllDb3JuZXIo
KSwgaW5uZXJSZWN0Lm1heFhNYXhZQ29ybmVyKCksIHF1YWRbMV0pOworCisgICAgICAgIGlmICgh
aW5uZXJCb3JkZXIucmFkaWkoKS5ib3R0b21SaWdodCgpLmlzWmVybygpKQorICAgICAgICAgICAg
ZmluZEludGVyc2VjdGlvbihvdXRlclJlY3QubWF4WE1heFlDb3JuZXIoKSwgaW5uZXJSZWN0Lm1h
eFhNYXhZQ29ybmVyKCksIGlubmVyUmVjdC5tYXhYTWluWUNvcm5lcigpLCBpbm5lclJlY3QubWlu
WE1heFlDb3JuZXIoKSwgcXVhZFsyXSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBCb3hT
aWRlOjpSaWdodDoKKyAgICAgICAgcXVhZC51bmNoZWNrZWRBcHBlbmQob3V0ZXJSZWN0Lm1heFhN
aW5ZQ29ybmVyKCkpOworICAgICAgICBxdWFkLnVuY2hlY2tlZEFwcGVuZChpbm5lclJlY3QubWF4
WE1pbllDb3JuZXIoKSk7CisgICAgICAgIHF1YWQudW5jaGVja2VkQXBwZW5kKGlubmVyUmVjdC5t
YXhYTWF4WUNvcm5lcigpKTsKKyAgICAgICAgcXVhZC51bmNoZWNrZWRBcHBlbmQob3V0ZXJSZWN0
Lm1heFhNYXhZQ29ybmVyKCkpOworCisgICAgICAgIGlmICghaW5uZXJCb3JkZXIucmFkaWkoKS50
b3BSaWdodCgpLmlzWmVybygpKQorICAgICAgICAgICAgZmluZEludGVyc2VjdGlvbihvdXRlclJl
Y3QubWF4WE1pbllDb3JuZXIoKSwgaW5uZXJSZWN0Lm1heFhNaW5ZQ29ybmVyKCksIGlubmVyUmVj
dC5taW5YTWluWUNvcm5lcigpLCBpbm5lclJlY3QubWF4WE1heFlDb3JuZXIoKSwgcXVhZFsxXSk7
CisKKyAgICAgICAgaWYgKCFpbm5lckJvcmRlci5yYWRpaSgpLmJvdHRvbVJpZ2h0KCkuaXNaZXJv
KCkpCisgICAgICAgICAgICBmaW5kSW50ZXJzZWN0aW9uKG91dGVyUmVjdC5tYXhYTWF4WUNvcm5l
cigpLCBpbm5lclJlY3QubWF4WE1heFlDb3JuZXIoKSwgaW5uZXJSZWN0Lm1heFhNaW5ZQ29ybmVy
KCksIGlubmVyUmVjdC5taW5YTWF4WUNvcm5lcigpLCBxdWFkWzJdKTsKKyAgICAgICAgYnJlYWs7
CisgICAgfQorCisgICAgLy8gSWYgdGhlIGJvcmRlciBtYXRjaGVzIGJvdGggb2YgaXRzIGFkamFj
ZW50IHNpZGVzLCBkb24ndCBhbnRpLWFsaWFzIHRoZSBjbGlwLCBhbmQKKyAgICAvLyBpZiBuZWl0
aGVyIHNpZGUgbWF0Y2hlcywgYW50aS1hbGlhcyB0aGUgY2xpcC4KKyAgICBpZiAoZmlyc3RFZGdl
TWF0Y2hlcyA9PSBzZWNvbmRFZGdlTWF0Y2hlcykgeworICAgICAgICBib29sIHdhc0FudGlhbGlh
c2VkID0gbV9wYWludGluZ0NvbnRleHQuY29udGV4dC5zaG91bGRBbnRpYWxpYXMoKTsKKyAgICAg
ICAgbV9wYWludGluZ0NvbnRleHQuY29udGV4dC5zZXRTaG91bGRBbnRpYWxpYXMoIWZpcnN0RWRn
ZU1hdGNoZXMpOworICAgICAgICBtX3BhaW50aW5nQ29udGV4dC5jb250ZXh0LmNsaXBQYXRoKFBh
dGg6OnBvbHlnb25QYXRoRnJvbVBvaW50cyhxdWFkKSwgV2luZFJ1bGU6Ok5vblplcm8pOworICAg
ICAgICBtX3BhaW50aW5nQ29udGV4dC5jb250ZXh0LnNldFNob3VsZEFudGlhbGlhcyh3YXNBbnRp
YWxpYXNlZCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBTcXVhcmUgb2ZmIHRo
ZSBlbmQgd2hpY2ggc2hvdWxkbid0IGJlIGFmZmVjdGVkIGJ5IGFudGlhbGlhc2luZywgYW5kIGNs
aXAuCisgICAgVmVjdG9yPEZsb2F0UG9pbnQ+IGZpcnN0UXVhZCA9IHsKKyAgICAgICAgcXVhZFsw
XSwKKyAgICAgICAgcXVhZFsxXSwKKyAgICAgICAgcXVhZFsyXSwKKyAgICAgICAgc2lkZSA9PSBC
b3hTaWRlOjpUb3AgfHwgc2lkZSA9PSBCb3hTaWRlOjpCb3R0b20gPyBGbG9hdFBvaW50KHF1YWRb
M10ueCgpLCBxdWFkWzJdLnkoKSkgOiBGbG9hdFBvaW50KHF1YWRbMl0ueCgpLCBxdWFkWzNdLnko
KSksCisgICAgICAgIHF1YWRbM10KKyAgICB9OworICAgIGJvb2wgd2FzQW50aWFsaWFzZWQgPSBt
X3BhaW50aW5nQ29udGV4dC5jb250ZXh0LnNob3VsZEFudGlhbGlhcygpOworICAgIG1fcGFpbnRp
bmdDb250ZXh0LmNvbnRleHQuc2V0U2hvdWxkQW50aWFsaWFzKCFmaXJzdEVkZ2VNYXRjaGVzKTsK
KyAgICBtX3BhaW50aW5nQ29udGV4dC5jb250ZXh0LmNsaXBQYXRoKFBhdGg6OnBvbHlnb25QYXRo
RnJvbVBvaW50cyhmaXJzdFF1YWQpLCBXaW5kUnVsZTo6Tm9uWmVybyk7CisKKyAgICBWZWN0b3I8
RmxvYXRQb2ludD4gc2Vjb25kUXVhZCA9IHsKKyAgICAgICAgcXVhZFswXSwKKyAgICAgICAgc2lk
ZSA9PSBCb3hTaWRlOjpUb3AgfHwgc2lkZSA9PSBCb3hTaWRlOjpCb3R0b20gPyBGbG9hdFBvaW50
KHF1YWRbMF0ueCgpLCBxdWFkWzFdLnkoKSkgOiBGbG9hdFBvaW50KHF1YWRbMV0ueCgpLCBxdWFk
WzBdLnkoKSksCisgICAgICAgIHF1YWRbMV0sCisgICAgICAgIHF1YWRbMl0sCisgICAgICAgIHF1
YWRbM10KKyAgICB9OworICAgIC8vIEFudGlhbGlhc2luZyBhZmZlY3RzIHRoZSBzZWNvbmQgc2lk
ZS4KKyAgICBtX3BhaW50aW5nQ29udGV4dC5jb250ZXh0LnNldFNob3VsZEFudGlhbGlhcyghc2Vj
b25kRWRnZU1hdGNoZXMpOworICAgIG1fcGFpbnRpbmdDb250ZXh0LmNvbnRleHQuY2xpcFBhdGgo
UGF0aDo6cG9seWdvblBhdGhGcm9tUG9pbnRzKHNlY29uZFF1YWQpLCBXaW5kUnVsZTo6Tm9uWmVy
byk7CisKKyAgICBtX3BhaW50aW5nQ29udGV4dC5jb250ZXh0LnNldFNob3VsZEFudGlhbGlhcyh3
YXNBbnRpYWxpYXNlZCk7Cit9CisKK3ZvaWQgQm9yZGVyUGFpbnRlcjo6ZHJhd0xpbmVGb3JCb3hT
aWRlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgQm94U2lkZSBzaWRlLCBDb2xvciBjb2xvciwgQm9y
ZGVyU3R5bGUgYm9yZGVyU3R5bGUsIGZsb2F0IGFkamFjZW50V2lkdGgxLCBmbG9hdCBhZGphY2Vu
dFdpZHRoMiwgYm9vbCBhbnRpYWxpYXMpIGNvbnN0Cit7CisgICAgYXV0byBkcmF3Qm9yZGVyUmVj
dCA9IFsmXShjb25zdCBGbG9hdFJlY3QmIHJlY3QpIHsKKyAgICAgICAgaWYgKHJlY3QuaXNFbXB0
eSgpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBtX3BhaW50aW5nQ29udGV4dC5jb250
ZXh0LmRyYXdSZWN0KHJlY3QpOworICAgIH07CisKKyAgICBhdXRvIGRyYXdMaW5lRm9yID0gWyZd
KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgQm94U2lkZSBzaWRlLCBCb3JkZXJTdHlsZSBib3JkZXJT
dHlsZSwgY29uc3QgRmxvYXRTaXplJiBhZGphY2VudCkgeworICAgICAgICBpZiAocmVjdC5pc0Vt
cHR5KCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGRyYXdMaW5lRm9yQm94U2lkZShy
ZWN0LCBzaWRlLCBjb2xvciwgYm9yZGVyU3R5bGUsIGFkamFjZW50LndpZHRoKCksIGFkamFjZW50
LmhlaWdodCgpLCBhbnRpYWxpYXMpOworICAgIH07CisgICAgCisgICAgYXV0byYgZWRnZSA9IG1f
ZWRnZXMuYXQoc2lkZSk7CisKKyAgICBjb25zdCBmbG9hdCBkZXZpY2VTY2FsZUZhY3RvciA9IG1f
cGFpbnRpbmdDb250ZXh0LmRldmljZVNjYWxlRmFjdG9yOworICAgIGZsb2F0IHgxID0gcmVjdC54
KCk7CisgICAgZmxvYXQgeDIgPSByZWN0Lm1heFgoKTsKKyAgICBmbG9hdCB5MSA9IHJlY3QueSgp
OworICAgIGZsb2F0IHkyID0gcmVjdC5tYXhZKCk7CisgICAgZmxvYXQgdGhpY2tuZXNzOworICAg
IGZsb2F0IGxlbmd0aDsKKyAgICBpZiAoc2lkZSA9PSBCb3hTaWRlOjpUb3AgfHwgc2lkZSA9PSBC
b3hTaWRlOjpCb3R0b20pIHsKKyAgICAgICAgdGhpY2tuZXNzID0geTIgLSB5MTsKKyAgICAgICAg
bGVuZ3RoID0geDIgLSB4MTsKKyAgICB9IGVsc2UgeworICAgICAgICB0aGlja25lc3MgPSB4MiAt
IHgxOworICAgICAgICBsZW5ndGggPSB5MiAtIHkxOworICAgIH0KKyAgICAvLyBGSVhNRTogV2Ug
cmVhbGx5IHdvdWxkIGxpa2UgdGhpcyBjaGVjayB0byBiZSBhbiBBU1NFUlQgYXMgd2UgZG9uJ3Qg
d2FudCB0byBkcmF3IGVtcHR5IGJvcmRlcnMuIEhvd2V2ZXIKKyAgICAvLyBub3RoaW5nIGd1YXJh
bnRlZXMgdGhhdCB0aGUgZm9sbG93aW5nIHJlY3Vyc2l2ZSBjYWxscyB0byBkcmF3TGluZUZvckJv
eFNpZGUgd2lsbCBoYXZlIG5vbi1udWxsIGRpbWVuc2lvbnMuCisgICAgaWYgKCF0aGlja25lc3Mg
fHwgIWxlbmd0aCkKKyAgICAgICAgcmV0dXJuOworCisgICAgc3dpdGNoIChib3JkZXJTdHlsZSkg
eworICAgIGNhc2UgQm9yZGVyU3R5bGU6Ok5vbmU6CisgICAgY2FzZSBCb3JkZXJTdHlsZTo6SGlk
ZGVuOgorICAgICAgICByZXR1cm47CisgICAgY2FzZSBCb3JkZXJTdHlsZTo6RG90dGVkOgorICAg
IGNhc2UgQm9yZGVyU3R5bGU6OkRhc2hlZDogeworICAgICAgICBib29sIHdhc0FudGlhbGlhc2Vk
ID0gbV9wYWludGluZ0NvbnRleHQuY29udGV4dC5zaG91bGRBbnRpYWxpYXMoKTsKKyAgICAgICAg
U3Ryb2tlU3R5bGUgb2xkU3Ryb2tlU3R5bGUgPSBtX3BhaW50aW5nQ29udGV4dC5jb250ZXh0LnN0
cm9rZVN0eWxlKCk7CisgICAgICAgIG1fcGFpbnRpbmdDb250ZXh0LmNvbnRleHQuc2V0U2hvdWxk
QW50aWFsaWFzKGFudGlhbGlhcyk7CisgICAgICAgIG1fcGFpbnRpbmdDb250ZXh0LmNvbnRleHQu
c2V0U3Ryb2tlQ29sb3IoY29sb3IpOworICAgICAgICBtX3BhaW50aW5nQ29udGV4dC5jb250ZXh0
LnNldFN0cm9rZVRoaWNrbmVzcyh0aGlja25lc3MpOworICAgICAgICBtX3BhaW50aW5nQ29udGV4
dC5jb250ZXh0LnNldFN0cm9rZVN0eWxlKGJvcmRlclN0eWxlID09IEJvcmRlclN0eWxlOjpEYXNo
ZWQgPyBEYXNoZWRTdHJva2UgOiBEb3R0ZWRTdHJva2UpOworICAgICAgICBtX3BhaW50aW5nQ29u
dGV4dC5jb250ZXh0LmRyYXdMaW5lKHsgeDEsIHkxIH0sIHsgeDIsIHkyIH0pOworICAgICAgICBt
X3BhaW50aW5nQ29udGV4dC5jb250ZXh0LnNldFNob3VsZEFudGlhbGlhcyh3YXNBbnRpYWxpYXNl
ZCk7CisgICAgICAgIG1fcGFpbnRpbmdDb250ZXh0LmNvbnRleHQuc2V0U3Ryb2tlU3R5bGUob2xk
U3Ryb2tlU3R5bGUpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBCb3JkZXJTdHls
ZTo6RG91YmxlOiB7CisgICAgICAgIGZsb2F0IHRoaXJkT2ZUaGlja25lc3MgPSBjZWlsVG9EZXZp
Y2VQaXhlbCh0aGlja25lc3MgLyAzLCBkZXZpY2VTY2FsZUZhY3Rvcik7CisgICAgICAgIGlmICgh
YWRqYWNlbnRXaWR0aDEgJiYgIWFkamFjZW50V2lkdGgyKSB7CisgICAgICAgICAgICBTdHJva2VT
dHlsZSBvbGRTdHJva2VTdHlsZSA9IG1fcGFpbnRpbmdDb250ZXh0LmNvbnRleHQuc3Ryb2tlU3R5
bGUoKTsKKyAgICAgICAgICAgIG1fcGFpbnRpbmdDb250ZXh0LmNvbnRleHQuc2V0U3Ryb2tlU3R5
bGUoTm9TdHJva2UpOworICAgICAgICAgICAgbV9wYWludGluZ0NvbnRleHQuY29udGV4dC5zZXRG
aWxsQ29sb3IoY29sb3IpOworCisgICAgICAgICAgICBib29sIHdhc0FudGlhbGlhc2VkID0gbV9w
YWludGluZ0NvbnRleHQuY29udGV4dC5zaG91bGRBbnRpYWxpYXMoKTsKKyAgICAgICAgICAgIG1f
cGFpbnRpbmdDb250ZXh0LmNvbnRleHQuc2V0U2hvdWxkQW50aWFsaWFzKGFudGlhbGlhcyk7CisK
KyAgICAgICAgICAgIHN3aXRjaCAoc2lkZSkgeworICAgICAgICAgICAgY2FzZSBCb3hTaWRlOjpU
b3A6CisgICAgICAgICAgICAgICAgZHJhd0JvcmRlclJlY3QoeyB4MSwgeTEsIGxlbmd0aCwgZWRn
ZS5vdXRlcldpZHRoKCkgfSk7CisgICAgICAgICAgICAgICAgZHJhd0JvcmRlclJlY3QoeyB4MSwg
eTIgLSBlZGdlLmlubmVyV2lkdGgoKSwgbGVuZ3RoLCBlZGdlLmlubmVyV2lkdGgoKSB9KTsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQm94U2lkZTo6Qm90dG9tOgor
ICAgICAgICAgICAgICAgIGRyYXdCb3JkZXJSZWN0KHsgeDEsIHkyIC0gZWRnZS5vdXRlcldpZHRo
KCksIGxlbmd0aCwgZWRnZS5vdXRlcldpZHRoKCkgfSk7CisgICAgICAgICAgICAgICAgZHJhd0Jv
cmRlclJlY3QoeyB4MSwgeTEsIGxlbmd0aCwgZWRnZS5pbm5lcldpZHRoKCkgfSk7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEJveFNpZGU6OkxlZnQ6CisgICAgICAg
ICAgICAgICAgZHJhd0JvcmRlclJlY3QoeyB4MSwgeTEsIGVkZ2Uub3V0ZXJXaWR0aCgpLCBsZW5n
dGggfSk7CisgICAgICAgICAgICAgICAgZHJhd0JvcmRlclJlY3QoeyB4MiAtIGVkZ2UuaW5uZXJX
aWR0aCgpLCB5MSwgZWRnZS5pbm5lcldpZHRoKCksIGxlbmd0aCB9KTsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQm94U2lkZTo6UmlnaHQ6CisgICAgICAgICAgICAg
ICAgZHJhd0JvcmRlclJlY3QoeyB4MiAtIGVkZ2Uub3V0ZXJXaWR0aCgpLCB5MSwgZWRnZS5vdXRl
cldpZHRoKCksIGxlbmd0aCB9KTsKKyAgICAgICAgICAgICAgICBkcmF3Qm9yZGVyUmVjdCh7IHgx
LCB5MSwgZWRnZS5pbm5lcldpZHRoKCksIGxlbmd0aCB9KTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbV9wYWludGluZ0NvbnRleHQuY29udGV4
dC5zZXRTaG91bGRBbnRpYWxpYXMod2FzQW50aWFsaWFzZWQpOworICAgICAgICAgICAgbV9wYWlu
dGluZ0NvbnRleHQuY29udGV4dC5zZXRTdHJva2VTdHlsZShvbGRTdHJva2VTdHlsZSk7CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICBmbG9hdCBhZGphY2VudDFCaWdUaGlyZCA9IGNlaWxU
b0RldmljZVBpeGVsKGFkamFjZW50V2lkdGgxIC8gMywgZGV2aWNlU2NhbGVGYWN0b3IpOworICAg
ICAgICAgICAgZmxvYXQgYWRqYWNlbnQyQmlnVGhpcmQgPSBjZWlsVG9EZXZpY2VQaXhlbChhZGph
Y2VudFdpZHRoMiAvIDMsIGRldmljZVNjYWxlRmFjdG9yKTsKKworICAgICAgICAgICAgZmxvYXQg
b2Zmc2V0MSA9IGZsb29yVG9EZXZpY2VQaXhlbChmYWJzKGFkamFjZW50V2lkdGgxKSAqIDIgLyAz
LCBkZXZpY2VTY2FsZUZhY3Rvcik7CisgICAgICAgICAgICBmbG9hdCBvZmZzZXQyID0gZmxvb3JU
b0RldmljZVBpeGVsKGZhYnMoYWRqYWNlbnRXaWR0aDIpICogMiAvIDMsIGRldmljZVNjYWxlRmFj
dG9yKTsKKworICAgICAgICAgICAgZmxvYXQgbWl0cmVPZmZzZXQxID0gYWRqYWNlbnRXaWR0aDEg
PCAwID8gb2Zmc2V0MSA6IDA7CisgICAgICAgICAgICBmbG9hdCBtaXRyZU9mZnNldDIgPSBhZGph
Y2VudFdpZHRoMSA+IDAgPyBvZmZzZXQxIDogMDsKKyAgICAgICAgICAgIGZsb2F0IG1pdHJlT2Zm
c2V0MyA9IGFkamFjZW50V2lkdGgyIDwgMCA/IG9mZnNldDIgOiAwOworICAgICAgICAgICAgZmxv
YXQgbWl0cmVPZmZzZXQ0ID0gYWRqYWNlbnRXaWR0aDIgPiAwID8gb2Zmc2V0MiA6IDA7CisKKyAg
ICAgICAgICAgIEZsb2F0UmVjdCBwYWludEJvcmRlclJlY3Q7CisgICAgICAgICAgICBzd2l0Y2gg
KHNpZGUpIHsKKyAgICAgICAgICAgIGNhc2UgQm94U2lkZTo6VG9wOgorICAgICAgICAgICAgICAg
IHBhaW50Qm9yZGVyUmVjdCA9IHNuYXBSZWN0VG9EZXZpY2VQaXhlbHMoTGF5b3V0UmVjdCh4MSAr
IG1pdHJlT2Zmc2V0MSwgeTEsICh4MiAtIG1pdHJlT2Zmc2V0MykgLSAoeDEgKyBtaXRyZU9mZnNl
dDEpLCB0aGlyZE9mVGhpY2tuZXNzKSwgZGV2aWNlU2NhbGVGYWN0b3IpOworICAgICAgICAgICAg
ICAgIGRyYXdMaW5lRm9yKHBhaW50Qm9yZGVyUmVjdCwgc2lkZSwgQm9yZGVyU3R5bGU6OlNvbGlk
LCBGbG9hdFNpemUoYWRqYWNlbnQxQmlnVGhpcmQsIGFkamFjZW50MkJpZ1RoaXJkKSk7CisKKyAg
ICAgICAgICAgICAgICBwYWludEJvcmRlclJlY3QgPSBzbmFwUmVjdFRvRGV2aWNlUGl4ZWxzKExh
eW91dFJlY3QoeDEgKyBtaXRyZU9mZnNldDIsIHkyIC0gdGhpcmRPZlRoaWNrbmVzcywgKHgyIC0g
bWl0cmVPZmZzZXQ0KSAtICh4MSArIG1pdHJlT2Zmc2V0MiksIHRoaXJkT2ZUaGlja25lc3MpLCBk
ZXZpY2VTY2FsZUZhY3Rvcik7CisgICAgICAgICAgICAgICAgZHJhd0xpbmVGb3IocGFpbnRCb3Jk
ZXJSZWN0LCBzaWRlLCBCb3JkZXJTdHlsZTo6U29saWQsIEZsb2F0U2l6ZShhZGphY2VudDFCaWdU
aGlyZCwgYWRqYWNlbnQyQmlnVGhpcmQpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIGNhc2UgQm94U2lkZTo6TGVmdDoKKyAgICAgICAgICAgICAgICBwYWludEJvcmRlclJl
Y3QgPSBzbmFwUmVjdFRvRGV2aWNlUGl4ZWxzKExheW91dFJlY3QoeDEsIHkxICsgbWl0cmVPZmZz
ZXQxLCB0aGlyZE9mVGhpY2tuZXNzLCAoeTIgLSBtaXRyZU9mZnNldDMpIC0gKHkxICsgbWl0cmVP
ZmZzZXQxKSksIGRldmljZVNjYWxlRmFjdG9yKTsKKyAgICAgICAgICAgICAgICBkcmF3TGluZUZv
cihwYWludEJvcmRlclJlY3QsIHNpZGUsIEJvcmRlclN0eWxlOjpTb2xpZCwgRmxvYXRTaXplKGFk
amFjZW50MUJpZ1RoaXJkLCBhZGphY2VudDJCaWdUaGlyZCkpOworCisgICAgICAgICAgICAgICAg
cGFpbnRCb3JkZXJSZWN0ID0gc25hcFJlY3RUb0RldmljZVBpeGVscyhMYXlvdXRSZWN0KHgyIC0g
dGhpcmRPZlRoaWNrbmVzcywgeTEgKyBtaXRyZU9mZnNldDIsIHRoaXJkT2ZUaGlja25lc3MsICh5
MiAtIG1pdHJlT2Zmc2V0NCkgLSAoeTEgKyBtaXRyZU9mZnNldDIpKSwgZGV2aWNlU2NhbGVGYWN0
b3IpOworICAgICAgICAgICAgICAgIGRyYXdMaW5lRm9yKHBhaW50Qm9yZGVyUmVjdCwgc2lkZSwg
Qm9yZGVyU3R5bGU6OlNvbGlkLCBGbG9hdFNpemUoYWRqYWNlbnQxQmlnVGhpcmQsIGFkamFjZW50
MkJpZ1RoaXJkKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEJv
eFNpZGU6OkJvdHRvbToKKyAgICAgICAgICAgICAgICBwYWludEJvcmRlclJlY3QgPSBzbmFwUmVj
dFRvRGV2aWNlUGl4ZWxzKExheW91dFJlY3QoeDEgKyBtaXRyZU9mZnNldDIsIHkxLCAoeDIgLSBt
aXRyZU9mZnNldDQpIC0gKHgxICsgbWl0cmVPZmZzZXQyKSwgdGhpcmRPZlRoaWNrbmVzcyksIGRl
dmljZVNjYWxlRmFjdG9yKTsKKyAgICAgICAgICAgICAgICBkcmF3TGluZUZvcihwYWludEJvcmRl
clJlY3QsIHNpZGUsIEJvcmRlclN0eWxlOjpTb2xpZCwgRmxvYXRTaXplKGFkamFjZW50MUJpZ1Ro
aXJkLCBhZGphY2VudDJCaWdUaGlyZCkpOworCisgICAgICAgICAgICAgICAgcGFpbnRCb3JkZXJS
ZWN0ID0gc25hcFJlY3RUb0RldmljZVBpeGVscyhMYXlvdXRSZWN0KHgxICsgbWl0cmVPZmZzZXQx
LCB5MiAtIHRoaXJkT2ZUaGlja25lc3MsICh4MiAtIG1pdHJlT2Zmc2V0MykgLSAoeDEgKyBtaXRy
ZU9mZnNldDEpLCB0aGlyZE9mVGhpY2tuZXNzKSwgZGV2aWNlU2NhbGVGYWN0b3IpOworICAgICAg
ICAgICAgICAgIGRyYXdMaW5lRm9yKHBhaW50Qm9yZGVyUmVjdCwgc2lkZSwgQm9yZGVyU3R5bGU6
OlNvbGlkLCBGbG9hdFNpemUoYWRqYWNlbnQxQmlnVGhpcmQsIGFkamFjZW50MkJpZ1RoaXJkKSk7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEJveFNpZGU6OlJpZ2h0
OgorICAgICAgICAgICAgICAgIHBhaW50Qm9yZGVyUmVjdCA9IHNuYXBSZWN0VG9EZXZpY2VQaXhl
bHMoTGF5b3V0UmVjdCh4MSwgeTEgKyBtaXRyZU9mZnNldDIsIHRoaXJkT2ZUaGlja25lc3MsICh5
MiAtIG1pdHJlT2Zmc2V0NCkgLSAoeTEgKyBtaXRyZU9mZnNldDIpKSwgZGV2aWNlU2NhbGVGYWN0
b3IpOworICAgICAgICAgICAgICAgIGRyYXdMaW5lRm9yKHBhaW50Qm9yZGVyUmVjdCwgc2lkZSwg
Qm9yZGVyU3R5bGU6OlNvbGlkLCBGbG9hdFNpemUoYWRqYWNlbnQxQmlnVGhpcmQsIGFkamFjZW50
MkJpZ1RoaXJkKSk7CisKKyAgICAgICAgICAgICAgICBwYWludEJvcmRlclJlY3QgPSBzbmFwUmVj
dFRvRGV2aWNlUGl4ZWxzKExheW91dFJlY3QoeDIgLSB0aGlyZE9mVGhpY2tuZXNzLCB5MSArIG1p
dHJlT2Zmc2V0MSwgdGhpcmRPZlRoaWNrbmVzcywgKHkyIC0gbWl0cmVPZmZzZXQzKSAtICh5MSAr
IG1pdHJlT2Zmc2V0MSkpLCBkZXZpY2VTY2FsZUZhY3Rvcik7CisgICAgICAgICAgICAgICAgZHJh
d0xpbmVGb3IocGFpbnRCb3JkZXJSZWN0LCBzaWRlLCBCb3JkZXJTdHlsZTo6U29saWQsIEZsb2F0
U2l6ZShhZGphY2VudDFCaWdUaGlyZCwgYWRqYWNlbnQyQmlnVGhpcmQpKTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAg
ICB9CisgICAgY2FzZSBCb3JkZXJTdHlsZTo6UmlkZ2U6CisgICAgY2FzZSBCb3JkZXJTdHlsZTo6
R3Jvb3ZlOiB7CisgICAgICAgIEJvcmRlclN0eWxlIHMxOworICAgICAgICBCb3JkZXJTdHlsZSBz
MjsKKyAgICAgICAgaWYgKGJvcmRlclN0eWxlID09IEJvcmRlclN0eWxlOjpHcm9vdmUpIHsKKyAg
ICAgICAgICAgIHMxID0gQm9yZGVyU3R5bGU6Okluc2V0OworICAgICAgICAgICAgczIgPSBCb3Jk
ZXJTdHlsZTo6T3V0c2V0OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgczEgPSBCb3Jk
ZXJTdHlsZTo6T3V0c2V0OworICAgICAgICAgICAgczIgPSBCb3JkZXJTdHlsZTo6SW5zZXQ7Cisg
ICAgICAgIH0KKworICAgICAgICBmbG9hdCBhZGphY2VudDFCaWdIYWxmID0gY2VpbFRvRGV2aWNl
UGl4ZWwoYWRqYWNlbnRXaWR0aDEgLyAyLCBkZXZpY2VTY2FsZUZhY3Rvcik7CisgICAgICAgIGZs
b2F0IGFkamFjZW50MkJpZ0hhbGYgPSBjZWlsVG9EZXZpY2VQaXhlbChhZGphY2VudFdpZHRoMiAv
IDIsIGRldmljZVNjYWxlRmFjdG9yKTsKKworICAgICAgICBmbG9hdCBhZGphY2VudDFTbWFsbEhh
bGYgPSBmbG9vclRvRGV2aWNlUGl4ZWwoYWRqYWNlbnRXaWR0aDEgLyAyLCBkZXZpY2VTY2FsZUZh
Y3Rvcik7CisgICAgICAgIGZsb2F0IGFkamFjZW50MlNtYWxsSGFsZiA9IGZsb29yVG9EZXZpY2VQ
aXhlbChhZGphY2VudFdpZHRoMiAvIDIsIGRldmljZVNjYWxlRmFjdG9yKTsKKworICAgICAgICBm
bG9hdCBvZmZzZXQxID0gMDsKKyAgICAgICAgZmxvYXQgb2Zmc2V0MiA9IDA7CisgICAgICAgIGZs
b2F0IG9mZnNldDMgPSAwOworICAgICAgICBmbG9hdCBvZmZzZXQ0ID0gMDsKKworICAgICAgICBp
ZiAoKChzaWRlID09IEJveFNpZGU6OlRvcCB8fCBzaWRlID09IEJveFNpZGU6OkxlZnQpICYmIGFk
amFjZW50V2lkdGgxIDwgMCkgfHwgKChzaWRlID09IEJveFNpZGU6OkJvdHRvbSB8fCBzaWRlID09
IEJveFNpZGU6OlJpZ2h0KSAmJiBhZGphY2VudFdpZHRoMSA+IDApKQorICAgICAgICAgICAgb2Zm
c2V0MSA9IGZsb29yVG9EZXZpY2VQaXhlbChhZGphY2VudFdpZHRoMSAvIDIsIGRldmljZVNjYWxl
RmFjdG9yKTsKKworICAgICAgICBpZiAoKChzaWRlID09IEJveFNpZGU6OlRvcCB8fCBzaWRlID09
IEJveFNpZGU6OkxlZnQpICYmIGFkamFjZW50V2lkdGgyIDwgMCkgfHwgKChzaWRlID09IEJveFNp
ZGU6OkJvdHRvbSB8fCBzaWRlID09IEJveFNpZGU6OlJpZ2h0KSAmJiBhZGphY2VudFdpZHRoMiA+
IDApKQorICAgICAgICAgICAgb2Zmc2V0MiA9IGNlaWxUb0RldmljZVBpeGVsKGFkamFjZW50V2lk
dGgyIC8gMiwgZGV2aWNlU2NhbGVGYWN0b3IpOworCisgICAgICAgIGlmICgoKHNpZGUgPT0gQm94
U2lkZTo6VG9wIHx8IHNpZGUgPT0gQm94U2lkZTo6TGVmdCkgJiYgYWRqYWNlbnRXaWR0aDEgPiAw
KSB8fCAoKHNpZGUgPT0gQm94U2lkZTo6Qm90dG9tIHx8IHNpZGUgPT0gQm94U2lkZTo6UmlnaHQp
ICYmIGFkamFjZW50V2lkdGgxIDwgMCkpCisgICAgICAgICAgICBvZmZzZXQzID0gZmxvb3JUb0Rl
dmljZVBpeGVsKGZhYnMoYWRqYWNlbnRXaWR0aDEpIC8gMiwgZGV2aWNlU2NhbGVGYWN0b3IpOwor
CisgICAgICAgIGlmICgoKHNpZGUgPT0gQm94U2lkZTo6VG9wIHx8IHNpZGUgPT0gQm94U2lkZTo6
TGVmdCkgJiYgYWRqYWNlbnRXaWR0aDIgPiAwKSB8fCAoKHNpZGUgPT0gQm94U2lkZTo6Qm90dG9t
IHx8IHNpZGUgPT0gQm94U2lkZTo6UmlnaHQpICYmIGFkamFjZW50V2lkdGgyIDwgMCkpCisgICAg
ICAgICAgICBvZmZzZXQ0ID0gY2VpbFRvRGV2aWNlUGl4ZWwoYWRqYWNlbnRXaWR0aDIgLyAyLCBk
ZXZpY2VTY2FsZUZhY3Rvcik7CisKKyAgICAgICAgZmxvYXQgYWRqdXN0ZWRYID0gY2VpbFRvRGV2
aWNlUGl4ZWwoKHgxICsgeDIpIC8gMiwgZGV2aWNlU2NhbGVGYWN0b3IpOworICAgICAgICBmbG9h
dCBhZGp1c3RlZFkgPSBjZWlsVG9EZXZpY2VQaXhlbCgoeTEgKyB5MikgLyAyLCBkZXZpY2VTY2Fs
ZUZhY3Rvcik7CisgICAgICAgIC8vIFF1YWRzIGNhbid0IHVzZSB0aGUgZGVmYXVsdCBzbmFwcGlu
ZyByZWN0IGZ1bmN0aW9ucy4KKyAgICAgICAgeDEgPSByb3VuZFRvRGV2aWNlUGl4ZWwoeDEsIGRl
dmljZVNjYWxlRmFjdG9yKTsKKyAgICAgICAgeDIgPSByb3VuZFRvRGV2aWNlUGl4ZWwoeDIsIGRl
dmljZVNjYWxlRmFjdG9yKTsKKyAgICAgICAgeTEgPSByb3VuZFRvRGV2aWNlUGl4ZWwoeTEsIGRl
dmljZVNjYWxlRmFjdG9yKTsKKyAgICAgICAgeTIgPSByb3VuZFRvRGV2aWNlUGl4ZWwoeTIsIGRl
dmljZVNjYWxlRmFjdG9yKTsKKworICAgICAgICBzd2l0Y2ggKHNpZGUpIHsKKyAgICAgICAgY2Fz
ZSBCb3hTaWRlOjpUb3A6CisgICAgICAgICAgICBkcmF3TGluZUZvcihGbG9hdFJlY3QoRmxvYXRQ
b2ludCh4MSArIG9mZnNldDEsIHkxKSwgRmxvYXRQb2ludCh4MiAtIG9mZnNldDIsIGFkanVzdGVk
WSkpLCBzaWRlLCBzMSwgRmxvYXRTaXplKGFkamFjZW50MUJpZ0hhbGYsIGFkamFjZW50MkJpZ0hh
bGYpKTsKKyAgICAgICAgICAgIGRyYXdMaW5lRm9yKEZsb2F0UmVjdChGbG9hdFBvaW50KHgxICsg
b2Zmc2V0MywgYWRqdXN0ZWRZKSwgRmxvYXRQb2ludCh4MiAtIG9mZnNldDQsIHkyKSksIHNpZGUs
IHMyLCBGbG9hdFNpemUoYWRqYWNlbnQxU21hbGxIYWxmLCBhZGphY2VudDJTbWFsbEhhbGYpKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEJveFNpZGU6OkxlZnQ6CisgICAgICAg
ICAgICBkcmF3TGluZUZvcihGbG9hdFJlY3QoRmxvYXRQb2ludCh4MSwgeTEgKyBvZmZzZXQxKSwg
RmxvYXRQb2ludChhZGp1c3RlZFgsIHkyIC0gb2Zmc2V0MikpLCBzaWRlLCBzMSwgRmxvYXRTaXpl
KGFkamFjZW50MUJpZ0hhbGYsIGFkamFjZW50MkJpZ0hhbGYpKTsKKyAgICAgICAgICAgIGRyYXdM
aW5lRm9yKEZsb2F0UmVjdChGbG9hdFBvaW50KGFkanVzdGVkWCwgeTEgKyBvZmZzZXQzKSwgRmxv
YXRQb2ludCh4MiwgeTIgLSBvZmZzZXQ0KSksIHNpZGUsIHMyLCBGbG9hdFNpemUoYWRqYWNlbnQx
U21hbGxIYWxmLCBhZGphY2VudDJTbWFsbEhhbGYpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIEJveFNpZGU6OkJvdHRvbToKKyAgICAgICAgICAgIGRyYXdMaW5lRm9yKEZsb2F0
UmVjdChGbG9hdFBvaW50KHgxICsgb2Zmc2V0MSwgeTEpLCBGbG9hdFBvaW50KHgyIC0gb2Zmc2V0
MiwgYWRqdXN0ZWRZKSksIHNpZGUsIHMyLCBGbG9hdFNpemUoYWRqYWNlbnQxQmlnSGFsZiwgYWRq
YWNlbnQyQmlnSGFsZikpOworICAgICAgICAgICAgZHJhd0xpbmVGb3IoRmxvYXRSZWN0KEZsb2F0
UG9pbnQoeDEgKyBvZmZzZXQzLCBhZGp1c3RlZFkpLCBGbG9hdFBvaW50KHgyIC0gb2Zmc2V0NCwg
eTIpKSwgc2lkZSwgczEsIEZsb2F0U2l6ZShhZGphY2VudDFTbWFsbEhhbGYsIGFkamFjZW50MlNt
YWxsSGFsZikpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQm94U2lkZTo6Umln
aHQ6CisgICAgICAgICAgICBkcmF3TGluZUZvcihGbG9hdFJlY3QoRmxvYXRQb2ludCh4MSwgeTEg
KyBvZmZzZXQxKSwgRmxvYXRQb2ludChhZGp1c3RlZFgsIHkyIC0gb2Zmc2V0MikpLCBzaWRlLCBz
MiwgRmxvYXRTaXplKGFkamFjZW50MUJpZ0hhbGYsIGFkamFjZW50MkJpZ0hhbGYpKTsKKyAgICAg
ICAgICAgIGRyYXdMaW5lRm9yKEZsb2F0UmVjdChGbG9hdFBvaW50KGFkanVzdGVkWCwgeTEgKyBv
ZmZzZXQzKSwgRmxvYXRQb2ludCh4MiwgeTIgLSBvZmZzZXQ0KSksIHNpZGUsIHMxLCBGbG9hdFNp
emUoYWRqYWNlbnQxU21hbGxIYWxmLCBhZGphY2VudDJTbWFsbEhhbGYpKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEJvcmRl
clN0eWxlOjpJbnNldDoKKyAgICBjYXNlIEJvcmRlclN0eWxlOjpPdXRzZXQ6CisgICAgICAgIGNh
bGN1bGF0ZUJvcmRlclN0eWxlQ29sb3IoYm9yZGVyU3R5bGUsIHNpZGUsIGNvbG9yKTsKKyAgICAg
ICAgRkFMTFRIUk9VR0g7CisgICAgY2FzZSBCb3JkZXJTdHlsZTo6U29saWQ6IHsKKyAgICAgICAg
U3Ryb2tlU3R5bGUgb2xkU3Ryb2tlU3R5bGUgPSBtX3BhaW50aW5nQ29udGV4dC5jb250ZXh0LnN0
cm9rZVN0eWxlKCk7CisgICAgICAgIEFTU0VSVCh4MiA+PSB4MSk7CisgICAgICAgIEFTU0VSVCh5
MiA+PSB5MSk7CisgICAgICAgIGlmICghYWRqYWNlbnRXaWR0aDEgJiYgIWFkamFjZW50V2lkdGgy
KSB7CisgICAgICAgICAgICBtX3BhaW50aW5nQ29udGV4dC5jb250ZXh0LnNldFN0cm9rZVN0eWxl
KE5vU3Ryb2tlKTsKKyAgICAgICAgICAgIG1fcGFpbnRpbmdDb250ZXh0LmNvbnRleHQuc2V0Rmls
bENvbG9yKGNvbG9yKTsKKyAgICAgICAgICAgIGJvb2wgd2FzQW50aWFsaWFzZWQgPSBtX3BhaW50
aW5nQ29udGV4dC5jb250ZXh0LnNob3VsZEFudGlhbGlhcygpOworICAgICAgICAgICAgbV9wYWlu
dGluZ0NvbnRleHQuY29udGV4dC5zZXRTaG91bGRBbnRpYWxpYXMoYW50aWFsaWFzKTsKKyAgICAg
ICAgICAgIGRyYXdCb3JkZXJSZWN0KHNuYXBSZWN0VG9EZXZpY2VQaXhlbHMoTGF5b3V0UmVjdCh4
MSwgeTEsIHgyIC0geDEsIHkyIC0geTEpLCBkZXZpY2VTY2FsZUZhY3RvcikpOworICAgICAgICAg
ICAgbV9wYWludGluZ0NvbnRleHQuY29udGV4dC5zZXRTaG91bGRBbnRpYWxpYXMod2FzQW50aWFs
aWFzZWQpOworICAgICAgICAgICAgbV9wYWludGluZ0NvbnRleHQuY29udGV4dC5zZXRTdHJva2VT
dHlsZShvbGRTdHJva2VTdHlsZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKwor
ICAgICAgICAvLyBGSVhNRTogVGhlc2Ugcm91bmRpbmdzIHNob3VsZCBiZSByZXBsYWNlZCBieSBB
U1NFUlQoZGV2aWNlIHBpeGVsIHBvc2l0aW9uZWQpIHdoZW4gYWxsIHRoZSBjYWxsZXJzIGhhdmUg
dHJhbnNpdGlvbmVkIHRvIGRldmljZSBwaXhlbHMuCisgICAgICAgIHgxID0gcm91bmRUb0Rldmlj
ZVBpeGVsKHgxLCBkZXZpY2VTY2FsZUZhY3Rvcik7CisgICAgICAgIHkxID0gcm91bmRUb0Rldmlj
ZVBpeGVsKHkxLCBkZXZpY2VTY2FsZUZhY3Rvcik7CisgICAgICAgIHgyID0gcm91bmRUb0Rldmlj
ZVBpeGVsKHgyLCBkZXZpY2VTY2FsZUZhY3Rvcik7CisgICAgICAgIHkyID0gcm91bmRUb0Rldmlj
ZVBpeGVsKHkyLCBkZXZpY2VTY2FsZUZhY3Rvcik7CisKKyAgICAgICAgVmVjdG9yPEZsb2F0UG9p
bnQ+IHF1YWQ7CisgICAgICAgIHF1YWQucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSg0KTsKKyAgICAg
ICAgc3dpdGNoIChzaWRlKSB7CisgICAgICAgIGNhc2UgQm94U2lkZTo6VG9wOgorICAgICAgICAg
ICAgcXVhZC51bmNoZWNrZWRBcHBlbmQoeyB4MSArIHN0ZDo6bWF4PGZsb2F0PigtYWRqYWNlbnRX
aWR0aDEsIDApLCB5MSB9KTsKKyAgICAgICAgICAgIHF1YWQudW5jaGVja2VkQXBwZW5kKHsgeDEg
KyBzdGQ6Om1heDxmbG9hdD4oIGFkamFjZW50V2lkdGgxLCAwKSwgeTIgfSk7CisgICAgICAgICAg
ICBxdWFkLnVuY2hlY2tlZEFwcGVuZCh7IHgyIC0gc3RkOjptYXg8ZmxvYXQ+KCBhZGphY2VudFdp
ZHRoMiwgMCksIHkyIH0pOworICAgICAgICAgICAgcXVhZC51bmNoZWNrZWRBcHBlbmQoeyB4MiAt
IHN0ZDo6bWF4PGZsb2F0PigtYWRqYWNlbnRXaWR0aDIsIDApLCB5MSB9KTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIEJveFNpZGU6OkJvdHRvbToKKyAgICAgICAgICAgIHF1YWQu
dW5jaGVja2VkQXBwZW5kKHsgeDEgKyBzdGQ6Om1heDxmbG9hdD4oIGFkamFjZW50V2lkdGgxLCAw
KSwgeTEgfSk7CisgICAgICAgICAgICBxdWFkLnVuY2hlY2tlZEFwcGVuZCh7IHgxICsgc3RkOjpt
YXg8ZmxvYXQ+KC1hZGphY2VudFdpZHRoMSwgMCksIHkyIH0pOworICAgICAgICAgICAgcXVhZC51
bmNoZWNrZWRBcHBlbmQoeyB4MiAtIHN0ZDo6bWF4PGZsb2F0PigtYWRqYWNlbnRXaWR0aDIsIDAp
LCB5MiB9KTsKKyAgICAgICAgICAgIHF1YWQudW5jaGVja2VkQXBwZW5kKHsgeDIgLSBzdGQ6Om1h
eDxmbG9hdD4oIGFkamFjZW50V2lkdGgyLCAwKSwgeTEgfSk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBCb3hTaWRlOjpMZWZ0OgorICAgICAgICAgICAgcXVhZC51bmNoZWNrZWRB
cHBlbmQoeyB4MSwgeTEgKyBzdGQ6Om1heDxmbG9hdD4oLWFkamFjZW50V2lkdGgxLCAwKSB9KTsK
KyAgICAgICAgICAgIHF1YWQudW5jaGVja2VkQXBwZW5kKHsgeDEsIHkyIC0gc3RkOjptYXg8Zmxv
YXQ+KC1hZGphY2VudFdpZHRoMiwgMCkgfSk7CisgICAgICAgICAgICBxdWFkLnVuY2hlY2tlZEFw
cGVuZCh7IHgyLCB5MiAtIHN0ZDo6bWF4PGZsb2F0PiggYWRqYWNlbnRXaWR0aDIsIDApIH0pOwor
ICAgICAgICAgICAgcXVhZC51bmNoZWNrZWRBcHBlbmQoeyB4MiwgeTEgKyBzdGQ6Om1heDxmbG9h
dD4oIGFkamFjZW50V2lkdGgxLCAwKSB9KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIEJveFNpZGU6OlJpZ2h0OgorICAgICAgICAgICAgcXVhZC51bmNoZWNrZWRBcHBlbmQoeyB4
MSwgeTEgKyBzdGQ6Om1heDxmbG9hdD4oIGFkamFjZW50V2lkdGgxLCAwKSB9KTsKKyAgICAgICAg
ICAgIHF1YWQudW5jaGVja2VkQXBwZW5kKHsgeDEsIHkyIC0gc3RkOjptYXg8ZmxvYXQ+KCBhZGph
Y2VudFdpZHRoMiwgMCkgfSk7CisgICAgICAgICAgICBxdWFkLnVuY2hlY2tlZEFwcGVuZCh7IHgy
LCB5MiAtIHN0ZDo6bWF4PGZsb2F0PigtYWRqYWNlbnRXaWR0aDIsIDApIH0pOworICAgICAgICAg
ICAgcXVhZC51bmNoZWNrZWRBcHBlbmQoeyB4MiwgeTEgKyBzdGQ6Om1heDxmbG9hdD4oLWFkamFj
ZW50V2lkdGgxLCAwKSB9KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAg
ICAgbV9wYWludGluZ0NvbnRleHQuY29udGV4dC5zZXRTdHJva2VTdHlsZShOb1N0cm9rZSk7Cisg
ICAgICAgIG1fcGFpbnRpbmdDb250ZXh0LmNvbnRleHQuc2V0RmlsbENvbG9yKGNvbG9yKTsKKyAg
ICAgICAgYm9vbCB3YXNBbnRpYWxpYXNlZCA9IG1fcGFpbnRpbmdDb250ZXh0LmNvbnRleHQuc2hv
dWxkQW50aWFsaWFzKCk7CisgICAgICAgIG1fcGFpbnRpbmdDb250ZXh0LmNvbnRleHQuc2V0U2hv
dWxkQW50aWFsaWFzKGFudGlhbGlhcyk7CisgICAgICAgIG1fcGFpbnRpbmdDb250ZXh0LmNvbnRl
eHQuZmlsbFBhdGgoUGF0aDo6cG9seWdvblBhdGhGcm9tUG9pbnRzKHF1YWQpKTsKKyAgICAgICAg
bV9wYWludGluZ0NvbnRleHQuY29udGV4dC5zZXRTaG91bGRBbnRpYWxpYXMod2FzQW50aWFsaWFz
ZWQpOworCisgICAgICAgIG1fcGFpbnRpbmdDb250ZXh0LmNvbnRleHQuc2V0U3Ryb2tlU3R5bGUo
b2xkU3Ryb2tlU3R5bGUpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgfQorfQorCit2b2lk
IEJvcmRlclBhaW50ZXI6OnBhaW50T25lQm9yZGVyU2lkZShjb25zdCBGbG9hdFJvdW5kZWRSZWN0
JiBvdXRlckJvcmRlciwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgaW5uZXJCb3JkZXIsIGNvbnN0
IEZsb2F0UmVjdCYgc2lkZVJlY3QsIEJveFNpZGUgc2lkZSwgY29uc3QgUGF0aCogcGF0aCwgYm9v
bCBhbnRpYWxpYXMsIGNvbnN0IENvbG9yKiBvdmVycmlkZUNvbG9yKSBjb25zdAoreworICAgIGF1
dG8mIGVkZ2VUb1JlbmRlciA9IG1fZWRnZXMuYXQoc2lkZSk7CisgICAgQVNTRVJUKGVkZ2VUb1Jl
bmRlci53aWR0aEZvclBhaW50aW5nKCkpOworICAgIAorICAgIGF1dG8gYWRqYWNlbnRTaWRlcyA9
IGFkamFjZW50U2lkZXNGb3JTaWRlKHNpZGUpOworICAgIAorICAgIGF1dG8mIGFkamFjZW50RWRn
ZTEgPSBtX2VkZ2VzLmF0KGFkamFjZW50U2lkZXMuZmlyc3QpOworICAgIGF1dG8mIGFkamFjZW50
RWRnZTIgPSBtX2VkZ2VzLmF0KGFkamFjZW50U2lkZXMuc2Vjb25kKTsKKworICAgIGJvb2wgbWl0
cmVBZGphY2VudFNpZGUxID0gam9pblJlcXVpcmVzTWl0cmUoc2lkZSwgYWRqYWNlbnRTaWRlcy5m
aXJzdCwgIWFudGlhbGlhcyk7CisgICAgYm9vbCBtaXRyZUFkamFjZW50U2lkZTIgPSBqb2luUmVx
dWlyZXNNaXRyZShzaWRlLCBhZGphY2VudFNpZGVzLnNlY29uZCwgIWFudGlhbGlhcyk7CisgICAg
CisgICAgYm9vbCBhZGphY2VudFNpZGUxU3R5bGVzTWF0Y2ggPSBjb2xvcnNNYXRjaEF0Q29ybmVy
KHNpZGUsIGFkamFjZW50U2lkZXMuZmlyc3QpOworICAgIGJvb2wgYWRqYWNlbnRTaWRlMlN0eWxl
c01hdGNoID0gY29sb3JzTWF0Y2hBdENvcm5lcihzaWRlLCBhZGphY2VudFNpZGVzLnNlY29uZCk7
CisKKyAgICBjb25zdCBDb2xvciYgY29sb3JUb1BhaW50ID0gb3ZlcnJpZGVDb2xvciA/ICpvdmVy
cmlkZUNvbG9yIDogZWRnZVRvUmVuZGVyLmNvbG9yKCk7CisKKyAgICBpZiAocGF0aCkgeworICAg
ICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIobV9wYWludGluZ0NvbnRl
eHQuY29udGV4dCk7CisKKyAgICAgICAgY2xpcEJvcmRlclNpZGVQb2x5Z29uKG91dGVyQm9yZGVy
LCBpbm5lckJvcmRlciwgc2lkZSwgYWRqYWNlbnRTaWRlMVN0eWxlc01hdGNoLCBhZGphY2VudFNp
ZGUyU3R5bGVzTWF0Y2gpOworCisgICAgICAgIGlmICghaW5uZXJCb3JkZXIuaXNSZW5kZXJhYmxl
KCkpCisgICAgICAgICAgICBtX3BhaW50aW5nQ29udGV4dC5jb250ZXh0LmNsaXBPdXRSb3VuZGVk
UmVjdChGbG9hdFJvdW5kZWRSZWN0KGNhbGN1bGF0ZUFkanVzdGVkSW5uZXJCb3JkZXIoaW5uZXJC
b3JkZXIsIHNpZGUpKSk7CisKKyAgICAgICAgZmxvYXQgdGhpY2tuZXNzID0gc3RkOjptYXgoc3Rk
OjptYXgoZWRnZVRvUmVuZGVyLndpZHRoRm9yUGFpbnRpbmcoKSwgYWRqYWNlbnRFZGdlMS53aWR0
aEZvclBhaW50aW5nKCkpLCBhZGphY2VudEVkZ2UyLndpZHRoRm9yUGFpbnRpbmcoKSk7CisgICAg
ICAgIGRyYXdCb3hTaWRlRnJvbVBhdGgob3V0ZXJCb3JkZXIucmVjdCgpLCAqcGF0aCwgZWRnZVRv
UmVuZGVyLndpZHRoRm9yUGFpbnRpbmcoKSwgdGhpY2tuZXNzLCBzaWRlLCBjb2xvclRvUGFpbnQs
IGVkZ2VUb1JlbmRlci5zdHlsZSgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGJv
b2wgY2xpcEZvclN0eWxlID0gc3R5bGVSZXF1aXJlc0NsaXBQb2x5Z29uKGVkZ2VUb1JlbmRlci5z
dHlsZSgpKSAmJiAobWl0cmVBZGphY2VudFNpZGUxIHx8IG1pdHJlQWRqYWNlbnRTaWRlMik7Cisg
ICAgYm9vbCBjbGlwQWRqYWNlbnRTaWRlMSA9IGNvbG9yTmVlZHNBbnRpQWxpYXNBdENvcm5lcihz
aWRlLCBhZGphY2VudFNpZGVzLmZpcnN0KSAmJiBtaXRyZUFkamFjZW50U2lkZTE7CisgICAgYm9v
bCBjbGlwQWRqYWNlbnRTaWRlMiA9IGNvbG9yTmVlZHNBbnRpQWxpYXNBdENvcm5lcihzaWRlLCBh
ZGphY2VudFNpZGVzLnNlY29uZCkgJiYgbWl0cmVBZGphY2VudFNpZGUyOworICAgIGJvb2wgc2hv
dWxkQ2xpcCA9IGNsaXBGb3JTdHlsZSB8fCBjbGlwQWRqYWNlbnRTaWRlMSB8fCBjbGlwQWRqYWNl
bnRTaWRlMjsKKyAgICAKKyAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIGNsaXBTdGF0ZVNh
dmVyKG1fcGFpbnRpbmdDb250ZXh0LmNvbnRleHQsIHNob3VsZENsaXApOworICAgIGlmIChzaG91
bGRDbGlwKSB7CisgICAgICAgIGJvb2wgYWxpYXNBZGphY2VudFNpZGUxID0gY2xpcEFkamFjZW50
U2lkZTEgfHwgKGNsaXBGb3JTdHlsZSAmJiBtaXRyZUFkamFjZW50U2lkZTEpOworICAgICAgICBi
b29sIGFsaWFzQWRqYWNlbnRTaWRlMiA9IGNsaXBBZGphY2VudFNpZGUyIHx8IChjbGlwRm9yU3R5
bGUgJiYgbWl0cmVBZGphY2VudFNpZGUyKTsKKyAgICAgICAgY2xpcEJvcmRlclNpZGVQb2x5Z29u
KG91dGVyQm9yZGVyLCBpbm5lckJvcmRlciwgc2lkZSwgIWFsaWFzQWRqYWNlbnRTaWRlMSwgIWFs
aWFzQWRqYWNlbnRTaWRlMik7CisgICAgICAgIC8vIFNpbmNlIHdlIGNsaXBwZWQsIG5vIG5lZWQg
dG8gZHJhdyB3aXRoIGEgbWl0cmUuCisgICAgICAgIG1pdHJlQWRqYWNlbnRTaWRlMSA9IGZhbHNl
OworICAgICAgICBtaXRyZUFkamFjZW50U2lkZTIgPSBmYWxzZTsKKyAgICB9CisgICAgZHJhd0xp
bmVGb3JCb3hTaWRlKHNpZGVSZWN0LCBzaWRlLCBjb2xvclRvUGFpbnQsIGVkZ2VUb1JlbmRlci5z
dHlsZSgpLCBtaXRyZUFkamFjZW50U2lkZTEgPyBhZGphY2VudEVkZ2UxLndpZHRoRm9yUGFpbnRp
bmcoKSA6IDAsIG1pdHJlQWRqYWNlbnRTaWRlMiA/IGFkamFjZW50RWRnZTIud2lkdGhGb3JQYWlu
dGluZygpIDogMCwgYW50aWFsaWFzKTsKK30KKwordm9pZCBCb3JkZXJQYWludGVyOjpwYWludEJv
cmRlclNpZGVzKGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIG91dGVyQm9yZGVyLCBjb25zdCBGbG9h
dFJvdW5kZWRSZWN0JiBpbm5lckJvcmRlciwgQm94U2lkZVNldCBlZGdlU2V0LCBib29sIGFudGlh
bGlhcywgY29uc3QgQ29sb3IqIG92ZXJyaWRlQ29sb3IpIGNvbnN0Cit7CisgICAgYm9vbCByZW5k
ZXJSYWRpaSA9IG91dGVyQm9yZGVyLmlzUm91bmRlZCgpOworCisgICAgUGF0aCByb3VuZGVkUGF0
aDsKKyAgICBpZiAocmVuZGVyUmFkaWkpCisgICAgICAgIHJvdW5kZWRQYXRoLmFkZFJvdW5kZWRS
ZWN0KG91dGVyQm9yZGVyKTsKKworICAgIGF1dG8gcGFpbnRPbmVTaWRlID0gWyZdKEJveFNpZGUg
c2lkZSkgeworICAgICAgICBhdXRvJiBlZGdlID0gbV9lZGdlcy5hdChzaWRlKTsKKyAgICAgICAg
aWYgKCFlZGdlLnNob3VsZFJlbmRlcigpIHx8ICFlZGdlU2V0LmNvbnRhaW5zKGVkZ2VGbGFnRm9y
U2lkZShzaWRlKSkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgYXV0byBzaWRlUmVj
dCA9IG91dGVyQm9yZGVyLnJlY3QoKTsKKyAgICAgICAgRmxvYXRTaXplIGZpcnN0UmFkaXVzOwor
ICAgICAgICBGbG9hdFNpemUgc2Vjb25kUmFkaXVzOworCisgICAgICAgIHN3aXRjaCAoc2lkZSkg
eworICAgICAgICBjYXNlIEJveFNpZGU6OlRvcDoKKyAgICAgICAgICAgIHNpZGVSZWN0LnNldEhl
aWdodChlZGdlLndpZHRoRm9yUGFpbnRpbmcoKSk7CisgICAgICAgICAgICBmaXJzdFJhZGl1cyA9
IGlubmVyQm9yZGVyLnJhZGlpKCkudG9wTGVmdCgpOworICAgICAgICAgICAgc2Vjb25kUmFkaXVz
ID0gaW5uZXJCb3JkZXIucmFkaWkoKS50b3BSaWdodCgpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgQm94U2lkZTo6UmlnaHQ6CisgICAgICAgICAgICBzaWRlUmVjdC5zaGlmdFhF
ZGdlVG8oc2lkZVJlY3QubWF4WCgpIC0gZWRnZS53aWR0aEZvclBhaW50aW5nKCkpOworICAgICAg
ICAgICAgZmlyc3RSYWRpdXMgPSBpbm5lckJvcmRlci5yYWRpaSgpLmJvdHRvbVJpZ2h0KCk7Cisg
ICAgICAgICAgICBzZWNvbmRSYWRpdXMgPSBpbm5lckJvcmRlci5yYWRpaSgpLnRvcFJpZ2h0KCk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBCb3hTaWRlOjpCb3R0b206CisgICAg
ICAgICAgICBzaWRlUmVjdC5zaGlmdFlFZGdlVG8oc2lkZVJlY3QubWF4WSgpIC0gZWRnZS53aWR0
aEZvclBhaW50aW5nKCkpOworICAgICAgICAgICAgZmlyc3RSYWRpdXMgPSBpbm5lckJvcmRlci5y
YWRpaSgpLmJvdHRvbUxlZnQoKTsKKyAgICAgICAgICAgIHNlY29uZFJhZGl1cyA9IGlubmVyQm9y
ZGVyLnJhZGlpKCkuYm90dG9tUmlnaHQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIEJveFNpZGU6OkxlZnQ6CisgICAgICAgICAgICBzaWRlUmVjdC5zZXRXaWR0aChlZGdlLndp
ZHRoRm9yUGFpbnRpbmcoKSk7CisgICAgICAgICAgICBmaXJzdFJhZGl1cyA9IGlubmVyQm9yZGVy
LnJhZGlpKCkuYm90dG9tTGVmdCgpOworICAgICAgICAgICAgc2Vjb25kUmFkaXVzID0gaW5uZXJC
b3JkZXIucmFkaWkoKS50b3BMZWZ0KCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
CisgICAgICAgIGJvb2wgdXNlUGF0aCA9IHJlbmRlclJhZGlpICYmIChib3JkZXJTdHlsZUhhc0lu
bmVyRGV0YWlsKGVkZ2Uuc3R5bGUoKSkgfHwgYm9yZGVyV2lsbEFyY0lubmVyRWRnZShmaXJzdFJh
ZGl1cywgc2Vjb25kUmFkaXVzKSk7CisgICAgICAgIHBhaW50T25lQm9yZGVyU2lkZShvdXRlckJv
cmRlciwgaW5uZXJCb3JkZXIsIHNpZGVSZWN0LCBzaWRlLCB1c2VQYXRoID8gJnJvdW5kZWRQYXRo
IDogbnVsbHB0ciwgYW50aWFsaWFzLCBvdmVycmlkZUNvbG9yKTsKKyAgICB9OworCisgICAgcGFp
bnRPbmVTaWRlKEJveFNpZGU6OlRvcCk7CisgICAgcGFpbnRPbmVTaWRlKEJveFNpZGU6OkJvdHRv
bSk7CisgICAgcGFpbnRPbmVTaWRlKEJveFNpZGU6OkxlZnQpOworICAgIHBhaW50T25lU2lkZShC
b3hTaWRlOjpSaWdodCk7Cit9CisKK3ZvaWQgQm9yZGVyUGFpbnRlcjo6cGFpbnRUcmFuc2x1Y2Vu
dEJvcmRlclNpZGVzKGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIG91dGVyQm9yZGVyLCBjb25zdCBG
bG9hdFJvdW5kZWRSZWN0JiBpbm5lckJvcmRlciwgQm94U2lkZVNldCBlZGdlc1RvRHJhdywgYm9v
bCBhbnRpYWxpYXMpIGNvbnN0Cit7CisgICAgLy8gd2lsbEJlT3ZlcmRyYXduIGFzc3VtZXMgdGhh
dCB3ZSBkcmF3IGluIG9yZGVyOiB0b3AsIGJvdHRvbSwgbGVmdCwgcmlnaHQuCisgICAgLy8gVGhp
cyBpcyBkaWZmZXJlbnQgZnJvbSBCb3hTaWRlIGVudW0gb3JkZXIuCisgICAgc3RhdGljIGNvbnN0
ZXhwciBzdGQ6OmFycmF5PEJveFNpZGUsIDQ+IHBhaW50T3JkZXJTaWRlcyA9IHsgQm94U2lkZTo6
VG9wLCBCb3hTaWRlOjpCb3R0b20sIEJveFNpZGU6OkxlZnQsIEJveFNpZGU6OlJpZ2h0IH07CisK
KyAgICB3aGlsZSAoZWRnZXNUb0RyYXcpIHsKKyAgICAgICAgLy8gRmluZCB1bmRyYXduIGVkZ2Vz
IHNoYXJpbmcgYSBjb2xvci4KKyAgICAgICAgQ29sb3IgY29tbW9uQ29sb3I7CisgICAgICAgIAor
ICAgICAgICBCb3hTaWRlU2V0IGNvbW1vbkNvbG9yRWRnZVNldDsKKyAgICAgICAgZm9yIChhdXRv
IHNpZGUgOiBwYWludE9yZGVyU2lkZXMpIHsKKyAgICAgICAgICAgIGlmICghZWRnZXNUb0RyYXcu
Y29udGFpbnMoZWRnZUZsYWdGb3JTaWRlKHNpZGUpKSkKKyAgICAgICAgICAgICAgICBjb250aW51
ZTsKKworICAgICAgICAgICAgYXV0byYgZWRnZSA9IG1fZWRnZXMuYXQoc2lkZSk7CisgICAgICAg
ICAgICBib29sIGluY2x1ZGVFZGdlOworICAgICAgICAgICAgaWYgKGNvbW1vbkNvbG9yRWRnZVNl
dC5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICBjb21tb25Db2xvciA9IGVkZ2UuY29sb3Io
KTsKKyAgICAgICAgICAgICAgICBpbmNsdWRlRWRnZSA9IHRydWU7CisgICAgICAgICAgICB9IGVs
c2UKKyAgICAgICAgICAgICAgICBpbmNsdWRlRWRnZSA9IGVkZ2UuY29sb3IoKSA9PSBjb21tb25D
b2xvcjsKKworICAgICAgICAgICAgaWYgKGluY2x1ZGVFZGdlKQorICAgICAgICAgICAgICAgIGNv
bW1vbkNvbG9yRWRnZVNldC5hZGQoZWRnZUZsYWdGb3JTaWRlKHNpZGUpKTsKKyAgICAgICAgfQor
CisgICAgICAgIGJvb2wgdXNlVHJhbnNwYXJlbmN5TGF5ZXIgPSBpbmNsdWRlc0FkamFjZW50RWRn
ZXMoY29tbW9uQ29sb3JFZGdlU2V0KSAmJiAhY29tbW9uQ29sb3IuaXNPcGFxdWUoKTsKKyAgICAg
ICAgaWYgKHVzZVRyYW5zcGFyZW5jeUxheWVyKSB7CisgICAgICAgICAgICBtX3BhaW50aW5nQ29u
dGV4dC5jb250ZXh0LmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoY29tbW9uQ29sb3IuYWxwaGFBc0Zs
b2F0KCkpOworICAgICAgICAgICAgY29tbW9uQ29sb3IgPSBjb21tb25Db2xvci5vcGFxdWVDb2xv
cigpOworICAgICAgICB9CisKKyAgICAgICAgcGFpbnRCb3JkZXJTaWRlcyhvdXRlckJvcmRlciwg
aW5uZXJCb3JkZXIsIGNvbW1vbkNvbG9yRWRnZVNldCwgYW50aWFsaWFzLCAmY29tbW9uQ29sb3Ip
OworICAgICAgICAgICAgCisgICAgICAgIGlmICh1c2VUcmFuc3BhcmVuY3lMYXllcikKKyAgICAg
ICAgICAgIG1fcGFpbnRpbmdDb250ZXh0LmNvbnRleHQuZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKTsK
KyAgICAgICAgCisgICAgICAgIGVkZ2VzVG9EcmF3LnJlbW92ZShjb21tb25Db2xvckVkZ2VTZXQp
OworICAgIH0KK30KKwordm9pZCBCb3JkZXJQYWludGVyOjpwYWludEJvcmRlcnMoKSBjb25zdAor
eworICAgIGJvb2wgaGF2ZUFscGhhQ29sb3IgPSBmYWxzZTsKKyAgICBib29sIGhhdmVBbGxTb2xp
ZEVkZ2VzID0gdHJ1ZTsKKyAgICBib29sIGhhdmVBbGxEb3VibGVFZGdlcyA9IHRydWU7CisgICAg
aW50IG51bUVkZ2VzVmlzaWJsZSA9IDQ7CisgICAgYm9vbCBhbGxFZGdlc1NoYXJlQ29sb3IgPSB0
cnVlOworICAgIE9wdGlvbmFsPEJveFNpZGU+IGZpcnN0VmlzaWJsZVNpZGU7CisgICAgQm94U2lk
ZVNldCBlZGdlc1RvRHJhdzsKKworICAgIGZvciAoYXV0byBzaWRlIDogYWxsQm94U2lkZXMpIHsK
KyAgICAgICAgYXV0byYgY3VyckVkZ2UgPSBtX2VkZ2VzLmF0KHNpZGUpOworCisgICAgICAgIGlm
IChjdXJyRWRnZS5zaG91bGRSZW5kZXIoKSkKKyAgICAgICAgICAgIGVkZ2VzVG9EcmF3LmFkZChl
ZGdlRmxhZ0ZvclNpZGUoc2lkZSkpOworCisgICAgICAgIGlmIChjdXJyRWRnZS5wcmVzZW50QnV0
SW52aXNpYmxlKCkpIHsKKyAgICAgICAgICAgIC0tbnVtRWRnZXNWaXNpYmxlOworICAgICAgICAg
ICAgYWxsRWRnZXNTaGFyZUNvbG9yID0gZmFsc2U7CisgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKCFjdXJyRWRnZS53aWR0aEZvclBhaW50aW5n
KCkpIHsKKyAgICAgICAgICAgIC0tbnVtRWRnZXNWaXNpYmxlOworICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIWZpcnN0VmlzaWJsZVNpZGUpCisgICAgICAg
ICAgICBmaXJzdFZpc2libGVTaWRlID0gc2lkZTsKKyAgICAgICAgZWxzZSBpZiAoY3VyckVkZ2Uu
Y29sb3IoKSAhPSBtX2VkZ2VzLmF0KCpmaXJzdFZpc2libGVTaWRlKS5jb2xvcigpKQorICAgICAg
ICAgICAgYWxsRWRnZXNTaGFyZUNvbG9yID0gZmFsc2U7CisKKyAgICAgICAgaWYgKCFjdXJyRWRn
ZS5jb2xvcigpLmlzT3BhcXVlKCkpCisgICAgICAgICAgICBoYXZlQWxwaGFDb2xvciA9IHRydWU7
CisgICAgICAgIAorICAgICAgICBpZiAoY3VyckVkZ2Uuc3R5bGUoKSAhPSBCb3JkZXJTdHlsZTo6
U29saWQpCisgICAgICAgICAgICBoYXZlQWxsU29saWRFZGdlcyA9IGZhbHNlOworCisgICAgICAg
IGlmIChjdXJyRWRnZS5zdHlsZSgpICE9IEJvcmRlclN0eWxlOjpEb3VibGUpCisgICAgICAgICAg
ICBoYXZlQWxsRG91YmxlRWRnZXMgPSBmYWxzZTsKKyAgICB9CisKKyAgICBGbG9hdFJvdW5kZWRS
ZWN0IGlubmVyQm9yZGVyUmVjdCA9IHJvdW5kZWRJbnNldEJvcmRlckZvclJlY3QobV9ib3JkZXJS
ZWN0LnJlY3QoKSwgeyBtX2VkZ2VzLnRvcCgpLndpZHRoKCksIG1fZWRnZXMucmlnaHQoKS53aWR0
aCgpLCBtX2VkZ2VzLmJvdHRvbSgpLndpZHRoKCksIG1fZWRnZXMubGVmdCgpLndpZHRoKCkgfSk7
CisKKyAgICAvLyBGSVhNRTogSWYgbm8gY29ybmVyIGludGVyc2VjdHMgdGhlIGNsaXAgcmVnaW9u
LCB3ZSBjYW4gcHJldGVuZCBvdXRlckJvcmRlciBpcyByZWN0YW5ndWxhciB0byBpbXByb3ZlIHBl
cmZvcm1hbmNlLgorICAgIAorICAgIGlmICgoaGF2ZUFsbFNvbGlkRWRnZXMgfHwgaGF2ZUFsbERv
dWJsZUVkZ2VzKSAmJiBhbGxFZGdlc1NoYXJlQ29sb3IgJiYgaW5uZXJCb3JkZXJSZWN0LmlzUmVu
ZGVyYWJsZSgpKSB7CisgICAgICAgIC8vIEZhc3QgcGF0aCBmb3IgZHJhd2luZyBhbGwgc29saWQg
ZWRnZXMgYW5kIGFsbCB1bnJvdW5kZWQgZG91YmxlIGVkZ2VzCisgICAgICAgIGlmIChudW1FZGdl
c1Zpc2libGUgPT0gNCAmJiAobV9ib3JkZXJSZWN0LmlzUm91bmRlZCgpIHx8IGhhdmVBbHBoYUNv
bG9yKSAmJiAoaGF2ZUFsbFNvbGlkRWRnZXMgfHwgKCFtX2JvcmRlclJlY3QuaXNSb3VuZGVkKCkg
JiYgIWlubmVyQm9yZGVyUmVjdC5pc1JvdW5kZWQoKSkpKSB7CisgICAgICAgICAgICBQYXRoIHBh
dGg7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChtX2JvcmRlclJlY3QuaXNSb3VuZGVk
KCkpCisgICAgICAgICAgICAgICAgcGF0aC5hZGRSb3VuZGVkUmVjdChtX2JvcmRlclJlY3QpOwor
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHBhdGguYWRkUmVjdChtX2JvcmRlclJl
Y3QucmVjdCgpKTsKKworICAgICAgICAgICAgaWYgKGhhdmVBbGxEb3VibGVFZGdlcykgeworICAg
ICAgICAgICAgICAgIGF1dG8gaW5uZXJUaGlyZFJlY3QgPSBtX2JvcmRlclJlY3QucmVjdCgpOwor
ICAgICAgICAgICAgICAgIGF1dG8gb3V0ZXJUaGlyZFJlY3QgPSBtX2JvcmRlclJlY3QucmVjdCgp
OworCisgICAgICAgICAgICAgICAgZm9yIChhdXRvIHNpZGUgOiBhbGxCb3hTaWRlcykgeworICAg
ICAgICAgICAgICAgICAgICBhdXRvJiBlZGdlID0gbV9lZGdlcy5hdChzaWRlKTsKKyAgICAgICAg
ICAgICAgICAgICAgZmxvYXQgb3V0ZXJXaWR0aCA9IGVkZ2Uub3V0ZXJXaWR0aCgpOworICAgICAg
ICAgICAgICAgICAgICBmbG9hdCBpbm5lcldpZHRoID0gZWRnZS5pbm5lcldpZHRoKCk7CisgICAg
ICAgICAgICAgICAgICAgIHN3aXRjaCAoc2lkZSkgeworICAgICAgICAgICAgICAgICAgICBjYXNl
IEJveFNpZGU6OlRvcDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGlubmVyVGhpcmRSZWN0LnNo
aWZ0WUVkZ2VUbyhpbm5lclRoaXJkUmVjdC55KCkgKyBpbm5lcldpZHRoKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIG91dGVyVGhpcmRSZWN0LnNoaWZ0WUVkZ2VUbyhvdXRlclRoaXJkUmVjdC55
KCkgKyBvdXRlcldpZHRoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgICAgICBjYXNlIEJveFNpZGU6OlJpZ2h0OgorICAgICAgICAgICAgICAgICAgICAg
ICAgaW5uZXJUaGlyZFJlY3Quc2V0V2lkdGgoaW5uZXJUaGlyZFJlY3Qud2lkdGgoKSAtIGlubmVy
V2lkdGgpOworICAgICAgICAgICAgICAgICAgICAgICAgb3V0ZXJUaGlyZFJlY3Quc2V0V2lkdGgo
b3V0ZXJUaGlyZFJlY3Qud2lkdGgoKSAtIG91dGVyV2lkdGgpOworICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgQm94U2lkZTo6Qm90dG9tOgor
ICAgICAgICAgICAgICAgICAgICAgICAgaW5uZXJUaGlyZFJlY3Quc2V0SGVpZ2h0KGlubmVyVGhp
cmRSZWN0LmhlaWdodCgpIC0gaW5uZXJXaWR0aCk7CisgICAgICAgICAgICAgICAgICAgICAgICBv
dXRlclRoaXJkUmVjdC5zZXRIZWlnaHQob3V0ZXJUaGlyZFJlY3QuaGVpZ2h0KCkgLSBvdXRlcldp
ZHRoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAg
ICBjYXNlIEJveFNpZGU6OkxlZnQ6CisgICAgICAgICAgICAgICAgICAgICAgICBpbm5lclRoaXJk
UmVjdC5zaGlmdFhFZGdlVG8oaW5uZXJUaGlyZFJlY3QueCgpICsgaW5uZXJXaWR0aCk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBvdXRlclRoaXJkUmVjdC5zaGlmdFhFZGdlVG8ob3V0ZXJUaGly
ZFJlY3QueCgpICsgb3V0ZXJXaWR0aCk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
ICAgIGF1dG8gb3V0ZXJUaGlyZFJvdW5kZWRSZWN0ID0gbV9ib3JkZXJSZWN0OworICAgICAgICAg
ICAgICAgIG91dGVyVGhpcmRSb3VuZGVkUmVjdC5zZXRSZWN0KG91dGVyVGhpcmRSZWN0KTsKKwor
ICAgICAgICAgICAgICAgIGlmIChvdXRlclRoaXJkUm91bmRlZFJlY3QuaXNSb3VuZGVkKCkpCisg
ICAgICAgICAgICAgICAgICAgIHBhdGguYWRkUm91bmRlZFJlY3Qob3V0ZXJUaGlyZFJvdW5kZWRS
ZWN0KTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHBhdGguYWRk
UmVjdChvdXRlclRoaXJkUm91bmRlZFJlY3QucmVjdCgpKTsKKworICAgICAgICAgICAgICAgIGF1
dG8gaW5uZXJUaGlyZFJvdW5kZWRSZWN0ID0gaW5uZXJCb3JkZXJSZWN0OworICAgICAgICAgICAg
ICAgIGlubmVyVGhpcmRSb3VuZGVkUmVjdC5zZXRSZWN0KGlubmVyVGhpcmRSZWN0KTsKKyAgICAg
ICAgICAgICAgICBpZiAoaW5uZXJUaGlyZFJvdW5kZWRSZWN0LmlzUm91bmRlZCgpKQorICAgICAg
ICAgICAgICAgICAgICBwYXRoLmFkZFJvdW5kZWRSZWN0KGlubmVyVGhpcmRSb3VuZGVkUmVjdCk7
CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBwYXRoLmFkZFJlY3Qo
aW5uZXJUaGlyZFJvdW5kZWRSZWN0LnJlY3QoKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIGlmIChpbm5lckJvcmRlclJlY3QuaXNSb3VuZGVkKCkpCisgICAgICAgICAgICAgICAgcGF0
aC5hZGRSb3VuZGVkUmVjdChpbm5lckJvcmRlclJlY3QpOworICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgIHBhdGguYWRkUmVjdChpbm5lckJvcmRlclJlY3QucmVjdCgpKTsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgbV9wYWludGluZ0NvbnRleHQuY29udGV4dC5zZXRGaWxsUnVs
ZShXaW5kUnVsZTo6RXZlbk9kZCk7CisgICAgICAgICAgICBtX3BhaW50aW5nQ29udGV4dC5jb250
ZXh0LnNldEZpbGxDb2xvcihtX2VkZ2VzLnRvcCgpLmNvbG9yKCkpOworICAgICAgICAgICAgbV9w
YWludGluZ0NvbnRleHQuY29udGV4dC5maWxsUGF0aChwYXRoKTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEF2b2lkIGNyZWF0aW5nIHRyYW5zcGFyZW50IGxh
eWVycworICAgICAgICBpZiAoaGF2ZUFsbFNvbGlkRWRnZXMgJiYgbnVtRWRnZXNWaXNpYmxlICE9
IDQgJiYgIW1fYm9yZGVyUmVjdC5pc1JvdW5kZWQoKSAmJiBoYXZlQWxwaGFDb2xvcikgeworICAg
ICAgICAgICAgUGF0aCBwYXRoOworCisgICAgICAgICAgICBhdXRvIGNhbGN1bGF0ZVNpZGVSZWN0
ID0gWyZdKGNvbnN0IEJvcmRlckVkZ2UmIGVkZ2UsIEJveFNpZGUgc2lkZSkgeworICAgICAgICAg
ICAgICAgIGF1dG8gc2lkZVJlY3QgPSBtX2JvcmRlclJlY3QucmVjdCgpOworICAgICAgICAgICAg
ICAgIGF1dG8gd2lkdGggPSBlZGdlLndpZHRoRm9yUGFpbnRpbmcoKTsKKworICAgICAgICAgICAg
ICAgIHN3aXRjaCAoc2lkZSkgeworICAgICAgICAgICAgICAgIGNhc2UgQm94U2lkZTo6VG9wOgor
ICAgICAgICAgICAgICAgICAgICBzaWRlUmVjdC5zZXRIZWlnaHQod2lkdGgpOworICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIEJveFNpZGU6OlJpZ2h0Ogor
ICAgICAgICAgICAgICAgICAgICBzaWRlUmVjdC5zaGlmdFhFZGdlVG8oc2lkZVJlY3QubWF4WCgp
IC0gd2lkdGgpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBj
YXNlIEJveFNpZGU6OkJvdHRvbToKKyAgICAgICAgICAgICAgICAgICAgc2lkZVJlY3Quc2hpZnRZ
RWRnZVRvKHNpZGVSZWN0Lm1heFkoKSAtIHdpZHRoKTsKKyAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgY2FzZSBCb3hTaWRlOjpMZWZ0OgorICAgICAgICAgICAgICAg
ICAgICBzaWRlUmVjdC5zZXRXaWR0aCh3aWR0aCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHJldHVybiBzaWRlUmVjdDsK
KyAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgIGZvciAoYXV0byBzaWRlIDogYWxsQm94U2lk
ZXMpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBlZGdlID0gbV9lZGdlcy5hdChzaWRlKTsKKyAg
ICAgICAgICAgICAgICBpZiAoZWRnZS5zaG91bGRSZW5kZXIoKSkgeworICAgICAgICAgICAgICAg
ICAgICBhdXRvIHNpZGVSZWN0ID0gY2FsY3VsYXRlU2lkZVJlY3QoZWRnZSwgc2lkZSk7CisgICAg
ICAgICAgICAgICAgICAgIHBhdGguYWRkUmVjdChzaWRlUmVjdCk7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBtX3BhaW50aW5nQ29udGV4dC5jb250ZXh0
LnNldEZpbGxSdWxlKFdpbmRSdWxlOjpOb25aZXJvKTsKKyAgICAgICAgICAgIG1fcGFpbnRpbmdD
b250ZXh0LmNvbnRleHQuc2V0RmlsbENvbG9yKG1fZWRnZXMuYXQoKmZpcnN0VmlzaWJsZVNpZGUp
LmNvbG9yKCkpOworICAgICAgICAgICAgbV9wYWludGluZ0NvbnRleHQuY29udGV4dC5maWxsUGF0
aChwYXRoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKworICAgIGJv
b2wgY2xpcFRvT3V0ZXJCb3JkZXIgPSBtX2JvcmRlclJlY3QuaXNSb3VuZGVkKCk7CisgICAgR3Jh
cGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKG1fcGFpbnRpbmdDb250ZXh0LmNvbnRl
eHQsIGNsaXBUb091dGVyQm9yZGVyKTsKKyAgICBpZiAoY2xpcFRvT3V0ZXJCb3JkZXIpIHsKKyAg
ICAgICAgLy8gQ2xpcCB0byB0aGUgaW5uZXIgYW5kIG91dGVyIHJhZGlpIHJlY3RzLgorICAgICAg
ICBtX3BhaW50aW5nQ29udGV4dC5jb250ZXh0LmNsaXBSb3VuZGVkUmVjdChtX2JvcmRlclJlY3Qp
OworICAgICAgICBpZiAoaW5uZXJCb3JkZXJSZWN0LmlzUmVuZGVyYWJsZSgpKQorICAgICAgICAg
ICAgbV9wYWludGluZ0NvbnRleHQuY29udGV4dC5jbGlwT3V0Um91bmRlZFJlY3QoaW5uZXJCb3Jk
ZXJSZWN0KTsKKyAgICB9CisKKyAgICBib29sIHNob3VsZEFudGlhbGlhc0xpbmVzID0gIW1fcGFp
bnRpbmdDb250ZXh0LmNvbnRleHQuZ2V0Q1RNKCkuaXNJZGVudGl0eU9yVHJhbnNsYXRpb25PckZs
aXBwZWQoKTsKKworICAgIC8vIElmIG9ubHkgb25lIGVkZ2UgdmlzaWJsZSBhbnRpYWxpYXNpbmcg
ZG9lc24ndCBjcmVhdGUgc2VhbXMKKyAgICBib29sIGFudGlhbGlhcyA9IHNob3VsZEFudGlhbGlh
c0xpbmVzIHx8IG51bUVkZ2VzVmlzaWJsZSA9PSAxOworICAgIGlmIChoYXZlQWxwaGFDb2xvcikK
KyAgICAgICAgcGFpbnRUcmFuc2x1Y2VudEJvcmRlclNpZGVzKG1fYm9yZGVyUmVjdCwgaW5uZXJC
b3JkZXJSZWN0LCBlZGdlc1RvRHJhdywgYW50aWFsaWFzKTsgLy8gRklYTUUuCisgICAgZWxzZQor
ICAgICAgICBwYWludEJvcmRlclNpZGVzKG1fYm9yZGVyUmVjdCwgaW5uZXJCb3JkZXJSZWN0LCBl
ZGdlc1RvRHJhdywgYW50aWFsaWFzKTsKK30KKwordm9pZCBCb3hEZWNvcmF0aW9uUGFpbnRlcjo6
cGFpbnRCb3JkZXJzKGNvbnN0IEJveE1vZGVsQm94JiBib3gsIFBhaW50aW5nQ29udGV4dCYgcGFp
bnRpbmdDb250ZXh0LCBib29sIGluY2x1ZGVMZWZ0RWRnZSwgYm9vbCBpbmNsdWRlUmlnaHRFZGdl
KQoreworICAgIGF1dG8qIGJveERlY29yYXRpb25EYXRhID0gYm94LmJveERlY29yYXRpb25EYXRh
KCk7CisgICAgaWYgKCFib3hEZWNvcmF0aW9uRGF0YSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
aWYgKGJveERlY29yYXRpb25EYXRhLT5oYXNCb3JkZXJJbWFnZSgpKSB7CisgICAgICAgIC8vIGJv
cmRlci1pbWFnZSBpcyBub3QgYWZmZWN0ZWQgYnkgYm9yZGVyLXJhZGl1cy4KKyAgICAgICAgLy8g
RklYTUU6IEltcGxlbWVudCBib3JkZXItaW1hZ2UgcGFpbnRpbmcuCisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBhdXRvIG91dGVyQm9yZGVyID0gRmxvYXRSb3VuZGVkUmVjdCB7IGJveC5h
YnNvbHV0ZUJvcmRlckJveFJlY3QoKSwgeyB9IH07CisgICAgaWYgKGF1dG8gYm9yZGVyUmFkaWkg
PSBib3hEZWNvcmF0aW9uRGF0YS0+Ym9yZGVyUmFkaWkoKSkKKyAgICAgICAgb3V0ZXJCb3JkZXIu
c2V0UmFkaWkoKmJvcmRlclJhZGlpKTsKKworICAgIEJvcmRlclBhaW50ZXIgcGFpbnRlcihib3hE
ZWNvcmF0aW9uRGF0YS0+Ym9yZGVyRWRnZXMoKSwgcGFpbnRpbmdDb250ZXh0LCBvdXRlckJvcmRl
ciwgaW5jbHVkZUxlZnRFZGdlLCBpbmNsdWRlUmlnaHRFZGdlKTsKKyAgICBwYWludGVyLnBhaW50
Qm9yZGVycygpOworfQorCitzdGF0aWMgdm9pZCBwYWludEZpbGxMYXllcihjb25zdCBCb3hNb2Rl
bEJveCYgYm94LCBjb25zdCBGaWxsTGF5ZXImIGxheWVyLCBjb25zdCBGaWxsTGF5ZXJJbWFnZUdl
b21ldHJ5JiBnZW9tZXRyeSwgUGFpbnRpbmdDb250ZXh0JiBwYWludGluZ0NvbnRleHQpCit7Cisg
ICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKHBhaW50aW5nQ29udGV4dC5j
b250ZXh0LCBmYWxzZSk7CisKKyAgICBhdXRvIGNsaXBSZWN0Rm9yTGF5ZXIgPSBbXShjb25zdCBC
b3hNb2RlbEJveCYgYm94LCBjb25zdCBGaWxsTGF5ZXImIGxheWVyKSB7CisgICAgICAgIHN3aXRj
aCAobGF5ZXIuY2xpcCgpKSB7CisgICAgICAgIGNhc2UgRmlsbEJveDo6Qm9yZGVyOgorICAgICAg
ICAgICAgcmV0dXJuIGJveC5hYnNvbHV0ZUJvcmRlckJveFJlY3QoKTsKKyAgICAgICAgY2FzZSBG
aWxsQm94OjpQYWRkaW5nOgorICAgICAgICAgICAgcmV0dXJuIGJveC5hYnNvbHV0ZVBhZGRpbmdC
b3hSZWN0KCk7CisgICAgICAgIGNhc2UgRmlsbEJveDo6Q29udGVudDoKKyAgICAgICAgICAgIHJl
dHVybiBib3guYWJzb2x1dGVDb250ZW50Qm94UmVjdCgpOworICAgICAgICBjYXNlIEZpbGxCb3g6
OlRleHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gQWJz
b2x1dGVGbG9hdFJlY3QoKTsKKyAgICB9OworCisgICAgc3dpdGNoIChsYXllci5jbGlwKCkpIHsK
KyAgICBjYXNlIEZpbGxCb3g6OkJvcmRlcjoKKyAgICBjYXNlIEZpbGxCb3g6OlBhZGRpbmc6Cisg
ICAgY2FzZSBGaWxsQm94OjpDb250ZW50OiB7CisgICAgICAgIHN0YXRlU2F2ZXIuc2F2ZSgpOwor
ICAgICAgICBwYWludGluZ0NvbnRleHQuY29udGV4dC5jbGlwKGNsaXBSZWN0Rm9yTGF5ZXIoYm94
LCBsYXllcikpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBGaWxsQm94OjpUZXh0
OgorICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICAvLyBGSVhNRTogSGFuZGxlIGJhY2tncm91
bmQgY29tcG9zaXRpbmcgbW9kZXMuCisKKyAgICBhdXRvKiBiYWNrZ3JvdW5kSW1hZ2UgPSBsYXll
ci5pbWFnZSgpOworICAgIENvbXBvc2l0ZU9wZXJhdG9yIG9wID0gQ29tcG9zaXRlT3BlcmF0b3I6
OlNvdXJjZU92ZXI7CisKKyAgICBpZiAoZ2VvbWV0cnkuZGVzdFJlY3QoKS5pc0VtcHR5KCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIGF1dG8gaW1hZ2UgPSBiYWNrZ3JvdW5kSW1hZ2UtPmltYWdl
KG51bGxwdHIsIGdlb21ldHJ5LnRpbGVTaXplKCkpOworICAgIGlmICghaW1hZ2UpCisgICAgICAg
IHJldHVybjsKKworICAgIC8vIEZJWE1FOiBjYWxsIGltYWdlLT51cGRhdGVGcm9tU2V0dGluZ3Mo
KS4KKworICAgIEltYWdlUGFpbnRpbmdPcHRpb25zIG9wdGlvbnMgPSB7CisgICAgICAgIG9wID09
IENvbXBvc2l0ZU9wZXJhdG9yOjpTb3VyY2VPdmVyID8gbGF5ZXIuY29tcG9zaXRlKCkgOiBvcCwK
KyAgICAgICAgbGF5ZXIuYmxlbmRNb2RlKCksCisgICAgICAgIERlY29kaW5nTW9kZTo6U3luY2hy
b25vdXMsCisgICAgICAgIEltYWdlT3JpZW50YXRpb246OkZyb21JbWFnZSwKKyAgICAgICAgSW50
ZXJwb2xhdGlvblF1YWxpdHk6OkRlZmF1bHQKKyAgICB9OworCisgICAgcGFpbnRpbmdDb250ZXh0
LmNvbnRleHQuZHJhd1RpbGVkSW1hZ2UoKmltYWdlLCBnZW9tZXRyeS5kZXN0UmVjdCgpLCB0b0Zs
b2F0UG9pbnQoZ2VvbWV0cnkucmVsYXRpdmVQaGFzZSgpKSwgZ2VvbWV0cnkudGlsZVNpemUoKSwg
Z2VvbWV0cnkuc3BhY2VTaXplKCksIG9wdGlvbnMpOworfQorCit2b2lkIEJveERlY29yYXRpb25Q
YWludGVyOjpwYWludEJhY2tncm91bmRJbWFnZXMoY29uc3QgQm94TW9kZWxCb3gmIGJveCwgUGFp
bnRpbmdDb250ZXh0JiBwYWludGluZ0NvbnRleHQpCit7CisgICAgY29uc3QgYXV0byYgc3R5bGUg
PSBib3guc3R5bGUoKTsKKworICAgIFZlY3Rvcjxjb25zdCBGaWxsTGF5ZXIqLCA4PiBsYXllcnM7
CisKKyAgICBmb3IgKGF1dG8qIGxheWVyID0gc3R5bGUuYmFja2dyb3VuZExheWVycygpOyBsYXll
cjsgbGF5ZXIgPSBsYXllci0+bmV4dCgpKQorICAgICAgICBsYXllcnMuYXBwZW5kKGxheWVyKTsK
KworICAgIGF1dG8qIGJveERlY29yYXRpb25EYXRhID0gYm94LmJveERlY29yYXRpb25EYXRhKCk7
CisgICAgQVNTRVJUKGJveERlY29yYXRpb25EYXRhKTsKKworICAgIGF1dG8mIGxheWVyR2VvbWV0
cnlMaXN0ID0gYm94RGVjb3JhdGlvbkRhdGEtPmJhY2tncm91bmRJbWFnZUdlb21ldHJ5KCk7CisK
KyAgICBmb3IgKGludCBpID0gbGF5ZXJzLnNpemUoKSAtIDE7IGkgPj0wOyAtLWkpIHsKKyAgICAg
ICAgY29uc3QgYXV0byogbGF5ZXIgPSBsYXllcnNbaV07CisgICAgICAgIGNvbnN0IGF1dG8mIGdl
b21ldHJ5ID0gbGF5ZXJHZW9tZXRyeUxpc3RbaV07CisgICAgICAgIHBhaW50RmlsbExheWVyKGJv
eCwgKmxheWVyLCBnZW9tZXRyeSwgcGFpbnRpbmdDb250ZXh0KTsKKyAgICB9Cit9CisKK3ZvaWQg
Qm94RGVjb3JhdGlvblBhaW50ZXI6OnBhaW50QmFja2dyb3VuZChjb25zdCBCb3hNb2RlbEJveCYg
Ym94LCBQYWludGluZ0NvbnRleHQmIHBhaW50aW5nQ29udGV4dCkKK3sKKyAgICBhdXRvIGJvcmRl
ckJveFJlY3QgPSBib3guYWJzb2x1dGVCb3JkZXJCb3hSZWN0KCk7CisgICAgY29uc3QgYXV0byYg
c3R5bGUgPSBib3guc3R5bGUoKTsKKworICAgIGlmIChzdHlsZS5oYXNCYWNrZ3JvdW5kKCkpIHsK
KyAgICAgICAgcGFpbnRpbmdDb250ZXh0LmNvbnRleHQuZmlsbFJlY3QoYm9yZGVyQm94UmVjdCwg
c3R5bGUuYmFja2dyb3VuZENvbG9yKCkpOworICAgICAgICBpZiAoc3R5bGUuaGFzQmFja2dyb3Vu
ZEltYWdlKCkpCisgICAgICAgICAgICBwYWludEJhY2tncm91bmRJbWFnZXMoYm94LCBwYWludGlu
Z0NvbnRleHQpOworICAgIH0KK30KKwordm9pZCBCb3hEZWNvcmF0aW9uUGFpbnRlcjo6cGFpbnRC
YWNrZ3JvdW5kQW5kQm9yZGVycyhjb25zdCBCb3hNb2RlbEJveCYgYm94LCBQYWludGluZ0NvbnRl
eHQmIHBhaW50aW5nQ29udGV4dCkKK3sKKyAgICAvLyBGSVhNRTogVGFibGUgZGVjb3JhdGlvbiBw
YWludGluZyBpcyBzcGVjaWFsLgorICAgIEJveERlY29yYXRpb25QYWludGVyOjpwYWludEJhY2tn
cm91bmQoYm94LCBwYWludGluZ0NvbnRleHQpOworICAgIEJveERlY29yYXRpb25QYWludGVyOjpw
YWludEJvcmRlcnMoYm94LCBwYWludGluZ0NvbnRleHQpOworCit9CisKK30gLy8gbmFtZXNwYWNl
IERpc3BsYXkKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShMQVlP
VVRfRk9STUFUVElOR19DT05URVhUKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZGlzcGxh
eS9jc3MvRGlzcGxheUJveERlY29yYXRpb25QYWludGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9kaXNw
bGF5L2Nzcy9EaXNwbGF5Qm94RGVjb3JhdGlvblBhaW50ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iNTdmNjQ3
ZWMwMjFiM2RhZWNmMjg3YzMxN2MyOGY4MTIwNmY5NjRhCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvZGlzcGxheS9jc3MvRGlzcGxheUJveERlY29yYXRpb25QYWludGVyLmgKQEAg
LTAsMCArMSw1MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKExB
WU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3Mg
R3JhcGhpY3NDb250ZXh0OworCituYW1lc3BhY2UgRGlzcGxheSB7CisKK2NsYXNzIEJveE1vZGVs
Qm94Oworc3RydWN0IFBhaW50aW5nQ29udGV4dDsKKworY2xhc3MgQm94RGVjb3JhdGlvblBhaW50
ZXIgeworcHVibGljOgorICAgIHN0YXRpYyB2b2lkIHBhaW50QmFja2dyb3VuZEFuZEJvcmRlcnMo
Y29uc3QgQm94TW9kZWxCb3gmLCBQYWludGluZ0NvbnRleHQmKTsKKworcHJpdmF0ZToKKyAgICBz
dGF0aWMgdm9pZCBwYWludEJvcmRlcnMoY29uc3QgQm94TW9kZWxCb3gmLCBQYWludGluZ0NvbnRl
eHQmLCBib29sIGluY2x1ZGVMZWZ0RWRnZSA9IHRydWUsIGJvb2wgaW5jbHVkZVJpZ2h0RWRnZSA9
IHRydWUpOworICAgIHN0YXRpYyB2b2lkIHBhaW50QmFja2dyb3VuZChjb25zdCBCb3hNb2RlbEJv
eCYsIFBhaW50aW5nQ29udGV4dCYpOworICAgIHN0YXRpYyB2b2lkIHBhaW50QmFja2dyb3VuZElt
YWdlcyhjb25zdCBCb3hNb2RlbEJveCYsIFBhaW50aW5nQ29udGV4dCYpOworfTsKKworfSAvLyBu
YW1lc3BhY2UgRGlzcGxheQorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5B
QkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9kaXNwbGF5L2Nzcy9EaXNwbGF5Qm94RmFjdG9yeS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kaXNw
bGF5L2Nzcy9EaXNwbGF5Qm94RmFjdG9yeS5jcHAKaW5kZXggMzRkODYwZjg1OTMxNDBhNzAwOWUw
MWFkM2Y3YjJhMTE2ZTM0YmNmMy4uZmRmNTcwNDVjMjAxOWExYmMyOWFmYjlkYTRjZjE4YTVmM2Zi
NDlmNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZGlzcGxheS9jc3MvRGlzcGxheUJveEZh
Y3RvcnkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Rpc3BsYXkvY3NzL0Rpc3BsYXlCb3hGYWN0
b3J5LmNwcApAQCAtMTMwLDEyICsxMzAsMjYgQEAgdm9pZCBCb3hGYWN0b3J5OjpzZXR1cEJveEdl
b21ldHJ5KEJveE1vZGVsQm94JiBib3gsIGNvbnN0IExheW91dDo6Qm94JiwgY29uc3QgTGEKIAog
c3RkOjp1bmlxdWVfcHRyPEJveERlY29yYXRpb25EYXRhPiBCb3hGYWN0b3J5Ojpjb25zdHJ1Y3RC
b3hEZWNvcmF0aW9uRGF0YShjb25zdCBMYXlvdXQ6OkJveCYgbGF5b3V0Qm94LCBjb25zdCBMYXlv
dXQ6OkJveEdlb21ldHJ5JiBsYXlvdXRHZW9tZXRyeSwgTGF5b3V0U2l6ZSBvZmZzZXRGcm9tUm9v
dCkgY29uc3QKIHsKKyAgICBhdXRvIGJveERlY29yYXRpb25EYXRhID0gbWFrZVVuaXF1ZTxCb3hE
ZWNvcmF0aW9uRGF0YT4oKTsKKwogICAgIGF1dG8gYmFja2dyb3VuZEltYWdlR2VvbWV0cnkgPSBj
YWxjdWxhdGVGaWxsTGF5ZXJJbWFnZUdlb21ldHJ5KGxheW91dEJveCwgbGF5b3V0R2VvbWV0cnks
IG9mZnNldEZyb21Sb290LCBtX3BpeGVsU25hcHBpbmdGYWN0b3IpOworICAgIGJveERlY29yYXRp
b25EYXRhLT5zZXRCYWNrZ3JvdW5kSW1hZ2VHZW9tZXRyeShXVEZNb3ZlKGJhY2tncm91bmRJbWFn
ZUdlb21ldHJ5KSk7CiAKLSAgICBhdXRvIGJveERlY29yYXRpb25EYXRhID0gbWFrZVVuaXF1ZTxC
b3hEZWNvcmF0aW9uRGF0YT4oKTsKLSAgICBib3hEZWNvcmF0aW9uRGF0YS0+c2V0QmFja2dyb3Vu
ZEltYWdlR2VvbWV0cnkoYmFja2dyb3VuZEltYWdlR2VvbWV0cnkpOworICAgIGJvb2wgaW5jbHVk
ZUxvZ2ljYWxMZWZ0RWRnZSA9IHRydWU7IC8vIEZJWE1FLgorICAgIGJvb2wgaW5jbHVkZUxvZ2lj
YWxSaWdodEVkZ2UgPSB0cnVlOyAvLyBGSVhNRS4KKyAgICBhdXRvIGJvcmRlckVkZ2VzID0gY2Fs
Y3VsYXRlQm9yZGVyRWRnZXMobGF5b3V0Qm94LnN0eWxlKCksIG1fcGl4ZWxTbmFwcGluZ0ZhY3Rv
ciwgaW5jbHVkZUxvZ2ljYWxMZWZ0RWRnZSwgaW5jbHVkZUxvZ2ljYWxSaWdodEVkZ2UpOworICAg
IGJveERlY29yYXRpb25EYXRhLT5zZXRCb3JkZXJFZGdlcyhXVEZNb3ZlKGJvcmRlckVkZ2VzKSk7
CisKKyAgICBhdXRvJiByZW5kZXJTdHlsZSA9IGxheW91dEJveC5zdHlsZSgpOwogCi0gICAgLy8g
RklYTUU6IENvbXB1dGUgcm91bmRlZCBib3JkZXIgcmVjdC4KKyAgICBpZiAocmVuZGVyU3R5bGUu
aGFzQm9yZGVyUmFkaXVzKCkpIHsKKyAgICAgICAgYXV0byBib3JkZXJCb3hSZWN0ID0gTGF5b3V0
UmVjdCB7IExheW91dDo6Qm94R2VvbWV0cnk6OmJvcmRlckJveFJlY3QobGF5b3V0R2VvbWV0cnkp
IH07CisgICAgICAgIGF1dG8gYm9yZGVyUm91bmRlZFJlY3QgPSByZW5kZXJTdHlsZS5nZXRSb3Vu
ZGVkQm9yZGVyRm9yKGJvcmRlckJveFJlY3QsIGluY2x1ZGVMb2dpY2FsTGVmdEVkZ2UsIGluY2x1
ZGVMb2dpY2FsUmlnaHRFZGdlKTsKKyAgICAgICAgYXV0byBzbmFwcGVkUm91bmRlZFJlY3QgPSBi
b3JkZXJSb3VuZGVkUmVjdC5waXhlbFNuYXBwZWRSb3VuZGVkUmVjdEZvclBhaW50aW5nKG1fcGl4
ZWxTbmFwcGluZ0ZhY3Rvcik7CisKKyAgICAgICAgYXV0byBib3JkZXJSYWRpaSA9IG1ha2VVbmlx
dWU8RmxvYXRSb3VuZGVkUmVjdDo6UmFkaWk+KHNuYXBwZWRSb3VuZGVkUmVjdC5yYWRpaSgpKTsK
KyAgICAgICAgYm94RGVjb3JhdGlvbkRhdGEtPnNldEJvcmRlclJhZGlpKFdURk1vdmUoYm9yZGVy
UmFkaWkpKTsKKyAgICB9CiAKICAgICByZXR1cm4gYm94RGVjb3JhdGlvbkRhdGE7CiB9CkBAIC0x
NDQsOCArMTU4LDggQEAgdm9pZCBCb3hGYWN0b3J5OjpzZXR1cEJveE1vZGVsQm94KEJveE1vZGVs
Qm94JiBib3gsIGNvbnN0IExheW91dDo6Qm94JiBsYXlvdXRCb3gKIHsKICAgICBzZXR1cEJveEdl
b21ldHJ5KGJveCwgbGF5b3V0Qm94LCBsYXlvdXRHZW9tZXRyeSwgb2Zmc2V0RnJvbVJvb3QpOwog
Ci0gICAgLy8gRklYTUU6IENoZWNrIGZvciByb3VuZGVkIGJvcmRlcnMgd2hlbiBzdXBwb3J0ZWQu
Ci0gICAgaWYgKCFib3guc3R5bGUoKS5oYXNCYWNrZ3JvdW5kKCkpCisgICAgYXV0byYgcmVuZGVy
U3R5bGUgPSBsYXlvdXRCb3guc3R5bGUoKTsKKyAgICBpZiAoIXJlbmRlclN0eWxlLmhhc0JhY2tn
cm91bmQoKSAmJiAhcmVuZGVyU3R5bGUuaGFzQm9yZGVyKCkpCiAgICAgICAgIHJldHVybjsKIAog
ICAgIGF1dG8gYm94RGVjb3JhdGlvbkRhdGEgPSBjb25zdHJ1Y3RCb3hEZWNvcmF0aW9uRGF0YShs
YXlvdXRCb3gsIGxheW91dEdlb21ldHJ5LCBvZmZzZXRGcm9tUm9vdCk7CkBAIC0xNTMsNyArMTY3
LDYgQEAgdm9pZCBCb3hGYWN0b3J5OjpzZXR1cEJveE1vZGVsQm94KEJveE1vZGVsQm94JiBib3gs
IGNvbnN0IExheW91dDo6Qm94JiBsYXlvdXRCb3gKIH0KIAogCi0KIH0gLy8gbmFtZXNwYWNlIERp
c3BsYXkKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZGlzcGxheS9jc3MvRGlzcGxheUJveFBhaW50ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvZGlz
cGxheS9jc3MvRGlzcGxheUJveFBhaW50ZXIuY3BwCmluZGV4IDhkYjFiNDI2NDZlMjVmNGM5YjQ5
Y2FmYWUyNjU0NzUxYTlkYzk5NjkuLjFhZmRjM2M0ODY3YzU3N2MwYmM2YzU3NGMxN2QyY2NkMGQ3
ZjI5ODEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Rpc3BsYXkvY3NzL0Rpc3BsYXlCb3hQ
YWludGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kaXNwbGF5L2Nzcy9EaXNwbGF5Qm94UGFp
bnRlci5jcHAKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJDYWNoZWRJbWFnZS5oIgogI2lu
Y2x1ZGUgIkNvbG9yLmgiCiAjaW5jbHVkZSAiRGlzcGxheUJveERlY29yYXRpb25EYXRhLmgiCisj
aW5jbHVkZSAiRGlzcGxheUJveERlY29yYXRpb25QYWludGVyLmgiCiAjaW5jbHVkZSAiRGlzcGxh
eUNvbnRhaW5lckJveC5oIgogI2luY2x1ZGUgIkRpc3BsYXlGaWxsTGF5ZXJJbWFnZUdlb21ldHJ5
LmgiCiAjaW5jbHVkZSAiRGlzcGxheUltYWdlQm94LmgiCkBAIC0zOCw3ICszOSw2IEBACiAjaW5j
bHVkZSAiRGlzcGxheVN0eWxlLmgiCiAjaW5jbHVkZSAiRGlzcGxheVRleHRCb3guaCIKICNpbmNs
dWRlICJEaXNwbGF5VHJlZS5oIgotI2luY2x1ZGUgIkZpbGxMYXllci5oIgogI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJMYXlvdXRQ
b2ludC5oIgpAQCAtNDcsMTQzICs0Nyw5IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBuYW1lc3Bh
Y2UgRGlzcGxheSB7CiAKLXZvaWQgQm94UGFpbnRlcjo6cGFpbnRGaWxsTGF5ZXIoY29uc3QgQm94
TW9kZWxCb3gmIGJveCwgY29uc3QgRmlsbExheWVyJiBsYXllciwgY29uc3QgRmlsbExheWVySW1h
Z2VHZW9tZXRyeSYgZ2VvbWV0cnksIFBhaW50aW5nQ29udGV4dCYgcGFpbnRpbmdDb250ZXh0KQot
ewotICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihwYWludGluZ0NvbnRl
eHQuY29udGV4dCwgZmFsc2UpOwotCi0gICAgYXV0byBjbGlwUmVjdEZvckxheWVyID0gW10oY29u
c3QgQm94TW9kZWxCb3gmIGJveCwgY29uc3QgRmlsbExheWVyJiBsYXllcikgewotICAgICAgICBz
d2l0Y2ggKGxheWVyLmNsaXAoKSkgewotICAgICAgICBjYXNlIEZpbGxCb3g6OkJvcmRlcjoKLSAg
ICAgICAgICAgIHJldHVybiBib3guYWJzb2x1dGVCb3JkZXJCb3hSZWN0KCk7Ci0gICAgICAgIGNh
c2UgRmlsbEJveDo6UGFkZGluZzoKLSAgICAgICAgICAgIHJldHVybiBib3guYWJzb2x1dGVQYWRk
aW5nQm94UmVjdCgpOwotICAgICAgICBjYXNlIEZpbGxCb3g6OkNvbnRlbnQ6Ci0gICAgICAgICAg
ICByZXR1cm4gYm94LmFic29sdXRlQ29udGVudEJveFJlY3QoKTsKLSAgICAgICAgY2FzZSBGaWxs
Qm94OjpUZXh0OgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJu
IEFic29sdXRlRmxvYXRSZWN0KCk7Ci0gICAgfTsKLQotICAgIHN3aXRjaCAobGF5ZXIuY2xpcCgp
KSB7Ci0gICAgY2FzZSBGaWxsQm94OjpCb3JkZXI6Ci0gICAgY2FzZSBGaWxsQm94OjpQYWRkaW5n
OgotICAgIGNhc2UgRmlsbEJveDo6Q29udGVudDogewotICAgICAgICBzdGF0ZVNhdmVyLnNhdmUo
KTsKLSAgICAgICAgcGFpbnRpbmdDb250ZXh0LmNvbnRleHQuY2xpcChjbGlwUmVjdEZvckxheWVy
KGJveCwgbGF5ZXIpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgRmlsbEJveDo6
VGV4dDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgLy8gRklYTUU6IEhhbmRsZSBiYWNr
Z3JvdW5kIGNvbXBvc2l0aW5nIG1vZGVzLgotCi0gICAgYXV0byogYmFja2dyb3VuZEltYWdlID0g
bGF5ZXIuaW1hZ2UoKTsKLSAgICBDb21wb3NpdGVPcGVyYXRvciBvcCA9IENvbXBvc2l0ZU9wZXJh
dG9yOjpTb3VyY2VPdmVyOwotCi0gICAgaWYgKGdlb21ldHJ5LmRlc3RSZWN0KCkuaXNFbXB0eSgp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvIGltYWdlID0gYmFja2dyb3VuZEltYWdlLT5p
bWFnZShudWxscHRyLCBnZW9tZXRyeS50aWxlU2l6ZSgpKTsKLSAgICBpZiAoIWltYWdlKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICAvLyBGSVhNRTogY2FsbCBpbWFnZS0+dXBkYXRlRnJvbVNldHRp
bmdzKCkuCi0KLSAgICBJbWFnZVBhaW50aW5nT3B0aW9ucyBvcHRpb25zID0gewotICAgICAgICBv
cCA9PSBDb21wb3NpdGVPcGVyYXRvcjo6U291cmNlT3ZlciA/IGxheWVyLmNvbXBvc2l0ZSgpIDog
b3AsCi0gICAgICAgIGxheWVyLmJsZW5kTW9kZSgpLAotICAgICAgICBEZWNvZGluZ01vZGU6OlN5
bmNocm9ub3VzLAotICAgICAgICBJbWFnZU9yaWVudGF0aW9uOjpGcm9tSW1hZ2UsCi0gICAgICAg
IEludGVycG9sYXRpb25RdWFsaXR5OjpEZWZhdWx0Ci0gICAgfTsKLQotICAgIHBhaW50aW5nQ29u
dGV4dC5jb250ZXh0LmRyYXdUaWxlZEltYWdlKCppbWFnZSwgZ2VvbWV0cnkuZGVzdFJlY3QoKSwg
dG9GbG9hdFBvaW50KGdlb21ldHJ5LnJlbGF0aXZlUGhhc2UoKSksIGdlb21ldHJ5LnRpbGVTaXpl
KCksIGdlb21ldHJ5LnNwYWNlU2l6ZSgpLCBvcHRpb25zKTsKLX0KLQotdm9pZCBCb3hQYWludGVy
OjpwYWludEJhY2tncm91bmRJbWFnZXMoY29uc3QgQm94TW9kZWxCb3gmIGJveCwgUGFpbnRpbmdD
b250ZXh0JiBwYWludGluZ0NvbnRleHQpCi17Ci0gICAgY29uc3QgYXV0byYgc3R5bGUgPSBib3gu
c3R5bGUoKTsKLQotICAgIFZlY3Rvcjxjb25zdCBGaWxsTGF5ZXIqLCA4PiBsYXllcnM7Ci0KLSAg
ICBmb3IgKGF1dG8qIGxheWVyID0gc3R5bGUuYmFja2dyb3VuZExheWVycygpOyBsYXllcjsgbGF5
ZXIgPSBsYXllci0+bmV4dCgpKQotICAgICAgICBsYXllcnMuYXBwZW5kKGxheWVyKTsKLQotICAg
IGF1dG8qIGJveERlY29yYXRpb25EYXRhID0gYm94LmJveERlY29yYXRpb25EYXRhKCk7Ci0gICAg
QVNTRVJUKGJveERlY29yYXRpb25EYXRhKTsKLQotICAgIGF1dG8mIGxheWVyR2VvbWV0cnlMaXN0
ID0gYm94RGVjb3JhdGlvbkRhdGEtPmJhY2tncm91bmRJbWFnZUdlb21ldHJ5KCk7Ci0KLSAgICBm
b3IgKGludCBpID0gbGF5ZXJzLnNpemUoKSAtIDE7IGkgPj0wOyAtLWkpIHsKLSAgICAgICAgY29u
c3QgYXV0byogbGF5ZXIgPSBsYXllcnNbaV07Ci0gICAgICAgIGNvbnN0IGF1dG8mIGdlb21ldHJ5
ID0gbGF5ZXJHZW9tZXRyeUxpc3RbaV07Ci0gICAgICAgIHBhaW50RmlsbExheWVyKGJveCwgKmxh
eWVyLCBnZW9tZXRyeSwgcGFpbnRpbmdDb250ZXh0KTsKLSAgICB9Ci19Ci0KIHZvaWQgQm94UGFp
bnRlcjo6cGFpbnRCb3hEZWNvcmF0aW9ucyhjb25zdCBCb3hNb2RlbEJveCYgYm94LCBQYWludGlu
Z0NvbnRleHQmIHBhaW50aW5nQ29udGV4dCkKIHsKLSAgICAvLyBGSVhNRTogVGFibGUgZGVjb3Jh
dGlvbiBwYWludGluZyBpcyBzcGVjaWFsLgotCi0gICAgYXV0byBib3JkZXJCb3hSZWN0ID0gYm94
LmFic29sdXRlQm9yZGVyQm94UmVjdCgpOwotCi0gICAgY29uc3QgYXV0byYgc3R5bGUgPSBib3gu
c3R5bGUoKTsKLQotICAgIC8vIEJhY2tncm91bmQgY29sb3IKLSAgICBpZiAoc3R5bGUuaGFzQmFj
a2dyb3VuZCgpKSB7Ci0gICAgICAgIHBhaW50aW5nQ29udGV4dC5jb250ZXh0LmZpbGxSZWN0KGJv
cmRlckJveFJlY3QsIHN0eWxlLmJhY2tncm91bmRDb2xvcigpKTsKLSAgICAgICAgaWYgKHN0eWxl
Lmhhc0JhY2tncm91bmRJbWFnZSgpKQotICAgICAgICAgICAgcGFpbnRCYWNrZ3JvdW5kSW1hZ2Vz
KGJveCwgcGFpbnRpbmdDb250ZXh0KTsKLSAgICB9Ci0KLSAgICAvLyBCb3JkZXIKLSAgICBpZiAo
c3R5bGUuaGFzVmlzaWJsZUJvcmRlcigpKSB7Ci0gICAgICAgIGF1dG8gZHJhd0JvcmRlclNpZGUg
PSBbJl0oYXV0byBzdGFydCwgYXV0byBlbmQsIGNvbnN0IGF1dG8mIGJvcmRlclN0eWxlKSB7Ci0g
ICAgICAgICAgICBpZiAoIWJvcmRlclN0eWxlLndpZHRoKCkpCi0gICAgICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICAgICAgaWYgKGJvcmRlclN0eWxlLnN0eWxlKCkgPT0gQm9yZGVyU3R5bGU6
Ok5vbmUgfHwgYm9yZGVyU3R5bGUuc3R5bGUoKSA9PSBCb3JkZXJTdHlsZTo6SGlkZGVuKQotICAg
ICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIHBhaW50aW5nQ29udGV4dC5jb250ZXh0
LnNldFN0cm9rZUNvbG9yKGJvcmRlclN0eWxlLmNvbG9yKCkpOwotICAgICAgICAgICAgcGFpbnRp
bmdDb250ZXh0LmNvbnRleHQuc2V0U3Ryb2tlVGhpY2tuZXNzKGJvcmRlclN0eWxlLndpZHRoKCkp
OwotICAgICAgICAgICAgcGFpbnRpbmdDb250ZXh0LmNvbnRleHQuZHJhd0xpbmUoc3RhcnQsIGVu
ZCk7Ci0gICAgICAgIH07Ci0KLSAgICAgICAgcGFpbnRpbmdDb250ZXh0LmNvbnRleHQuc2V0Rmls
bENvbG9yKENvbG9yOjp0cmFuc3BhcmVudEJsYWNrKTsKLQotICAgICAgICAvLyBUb3AKLSAgICAg
ICAgewotICAgICAgICAgICAgYXV0byBib3JkZXJXaWR0aCA9IHN0eWxlLmJvcmRlclRvcCgpLndp
ZHRoKCk7Ci0gICAgICAgICAgICBhdXRvIHN0YXJ0ID0gYm9yZGVyQm94UmVjdC5taW5YTWluWUNv
cm5lcigpOwotICAgICAgICAgICAgYXV0byBlbmQgPSBGbG9hdFBvaW50IHsgYm9yZGVyQm94UmVj
dC5tYXhYKCksIHN0YXJ0LnkoKSArIGJvcmRlcldpZHRoIH07Ci0gICAgICAgICAgICBkcmF3Qm9y
ZGVyU2lkZShzdGFydCwgZW5kLCBzdHlsZS5ib3JkZXJUb3AoKSk7Ci0gICAgICAgIH0KLQotICAg
ICAgICAvLyBSaWdodAotICAgICAgICB7Ci0gICAgICAgICAgICBhdXRvIGJvcmRlcldpZHRoID0g
c3R5bGUuYm9yZGVyUmlnaHQoKS53aWR0aCgpOwotICAgICAgICAgICAgYXV0byBzdGFydCA9IEZs
b2F0UG9pbnQgeyBib3JkZXJCb3hSZWN0Lm1heFgoKSAtIGJvcmRlcldpZHRoLCBib3JkZXJCb3hS
ZWN0LnkoKSB9OwotICAgICAgICAgICAgYXV0byBlbmQgPSBGbG9hdFBvaW50IHsgc3RhcnQueCgp
ICsgYm9yZGVyV2lkdGgsIGJvcmRlckJveFJlY3QubWF4WSgpIH07Ci0gICAgICAgICAgICBkcmF3
Qm9yZGVyU2lkZShzdGFydCwgZW5kLCBzdHlsZS5ib3JkZXJSaWdodCgpKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIC8vIEJvdHRvbQotICAgICAgICB7Ci0gICAgICAgICAgICBhdXRvIGJvcmRlcldp
ZHRoID0gc3R5bGUuYm9yZGVyQm90dG9tKCkud2lkdGgoKTsKLSAgICAgICAgICAgIGF1dG8gc3Rh
cnQgPSBGbG9hdFBvaW50IHsgYm9yZGVyQm94UmVjdC54KCksIGJvcmRlckJveFJlY3QubWF4WSgp
IC0gYm9yZGVyV2lkdGggfTsKLSAgICAgICAgICAgIGF1dG8gZW5kID0gRmxvYXRQb2ludCB7IGJv
cmRlckJveFJlY3QubWF4WCgpLCBzdGFydC55KCkgKyBib3JkZXJXaWR0aCB9OwotICAgICAgICAg
ICAgZHJhd0JvcmRlclNpZGUoc3RhcnQsIGVuZCwgc3R5bGUuYm9yZGVyQm90dG9tKCkpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgLy8gTGVmdAotICAgICAgICB7Ci0gICAgICAgICAgICBhdXRvIGJv
cmRlcldpZHRoID0gc3R5bGUuYm9yZGVyTGVmdCgpLndpZHRoKCk7Ci0gICAgICAgICAgICBhdXRv
IHN0YXJ0ID0gYm9yZGVyQm94UmVjdC5taW5YTWluWUNvcm5lcigpOwotICAgICAgICAgICAgYXV0
byBlbmQgPSBGbG9hdFBvaW50IHsgc3RhcnQueCgpICsgYm9yZGVyV2lkdGgsIGJvcmRlckJveFJl
Y3QubWF4WSgpIH07Ci0gICAgICAgICAgICBkcmF3Qm9yZGVyU2lkZShzdGFydCwgZW5kLCBzdHls
ZS5ib3JkZXJMZWZ0KCkpOwotICAgICAgICB9Ci0gICAgfQorICAgIEJveERlY29yYXRpb25QYWlu
dGVyOjpwYWludEJhY2tncm91bmRBbmRCb3JkZXJzKGJveCwgcGFpbnRpbmdDb250ZXh0KTsKIH0K
IAogdm9pZCBCb3hQYWludGVyOjpwYWludEJveENvbnRlbnQoY29uc3QgQm94JiBib3gsIFBhaW50
aW5nQ29udGV4dCYgcGFpbnRpbmdDb250ZXh0KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
ZGlzcGxheS9jc3MvRGlzcGxheVN0eWxlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Rpc3BsYXkvY3Nz
L0Rpc3BsYXlTdHlsZS5jcHAKaW5kZXggNzA0ZjQxY2I0ZmZhYjE4YzhiMGFlM2QyYTk5ZGMwNjQ2
ODU5OTA0ZC4uNDY2YzNkMzVlN2EzNzdjMzA0YmUxMzNjNTI2NDYyMDQ5YmIxYjAxMyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvZGlzcGxheS9jc3MvRGlzcGxheVN0eWxlLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9kaXNwbGF5L2Nzcy9EaXNwbGF5U3R5bGUuY3BwCkBAIC02NywyMSArNjcs
NiBAQCBTdHlsZTo6U3R5bGUoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlKQogICAgIG1fYmFja2dy
b3VuZENvbG9yID0gc3R5bGUudmlzaXRlZERlcGVuZGVudENvbG9yV2l0aENvbG9yRmlsdGVyKENT
U1Byb3BlcnR5QmFja2dyb3VuZENvbG9yKTsKICAgICBtX2JhY2tncm91bmRMYXllcnMgPSBkZWVw
Q29weShzdHlsZS5iYWNrZ3JvdW5kTGF5ZXJzKCkpOwogCi0gICAgY29uc3QgYXV0byYgYm9yZGVy
RGF0YSA9IHN0eWxlLmJvcmRlcigpOwotICAgIAotICAgIGF1dG8gYm9yZGVyVmFsdWVXaXRoUmVz
b2x2ZWRDb2xvciA9IFsmc3R5bGVdKGNvbnN0IEJvcmRlclZhbHVlJiB2YWx1ZSwgQ1NTUHJvcGVy
dHlJRCBjb2xvclByb3BlcnR5SUQpIHsKLSAgICAgICAgYXV0byByZXNvbHZlZFZhbHVlID0gdmFs
dWU7Ci0gICAgICAgIHJlc29sdmVkVmFsdWUuc2V0Q29sb3Ioc3R5bGUudmlzaXRlZERlcGVuZGVu
dENvbG9yV2l0aENvbG9yRmlsdGVyKGNvbG9yUHJvcGVydHlJRCkpOwotICAgICAgICByZXR1cm4g
cmVzb2x2ZWRWYWx1ZTsKLSAgICB9OwotICAgIAotICAgIG1fYm9yZGVyLmxlZnQgPSBib3JkZXJW
YWx1ZVdpdGhSZXNvbHZlZENvbG9yKGJvcmRlckRhdGEubGVmdCgpLCBDU1NQcm9wZXJ0eUJvcmRl
ckxlZnRDb2xvcik7Ci0gICAgbV9ib3JkZXIucmlnaHQgPSBib3JkZXJWYWx1ZVdpdGhSZXNvbHZl
ZENvbG9yKGJvcmRlckRhdGEucmlnaHQoKSwgQ1NTUHJvcGVydHlCb3JkZXJSaWdodENvbG9yKTsK
LSAgICBtX2JvcmRlci50b3AgPSBib3JkZXJWYWx1ZVdpdGhSZXNvbHZlZENvbG9yKGJvcmRlckRh
dGEudG9wKCksIENTU1Byb3BlcnR5Qm9yZGVyVG9wQ29sb3IpOwotICAgIG1fYm9yZGVyLmJvdHRv
bSA9IGJvcmRlclZhbHVlV2l0aFJlc29sdmVkQ29sb3IoYm9yZGVyRGF0YS5ib3R0b20oKSwgQ1NT
UHJvcGVydHlCb3JkZXJCb3R0b21Db2xvcik7Ci0KLSAgICBtX2JvcmRlci5pbWFnZSA9IGJvcmRl
ckRhdGEuaW1hZ2UoKTsKLQogICAgIGlmICghc3R5bGUuaGFzQXV0b1VzZWRaSW5kZXgoKSkKICAg
ICAgICAgbV96SW5kZXggPSBzdHlsZS51c2VkWkluZGV4KCk7CiAKQEAgLTk5LDEyICs4NCw2IEBA
IGJvb2wgU3R5bGU6Omhhc0JhY2tncm91bmRJbWFnZSgpIGNvbnN0CiAgICAgcmV0dXJuIG1fYmFj
a2dyb3VuZExheWVycyAmJiBtX2JhY2tncm91bmRMYXllcnMtPmhhc0ltYWdlKCk7CiB9CiAKLWJv
b2wgU3R5bGU6Omhhc1Zpc2libGVCb3JkZXIoKSBjb25zdAotewotICAgIGJvb2wgaGF2ZUltYWdl
ID0gbV9ib3JkZXIuaW1hZ2UuaGFzSW1hZ2UoKTsKLSAgICByZXR1cm4gbV9ib3JkZXIubGVmdC5p
c1Zpc2libGUoIWhhdmVJbWFnZSkgfHwgbV9ib3JkZXIucmlnaHQuaXNWaXNpYmxlKCFoYXZlSW1h
Z2UpIHx8IG1fYm9yZGVyLnRvcC5pc1Zpc2libGUoIWhhdmVJbWFnZSkgfHwgbV9ib3JkZXIuYm90
dG9tLmlzVmlzaWJsZSghaGF2ZUltYWdlKTsKLX0KLQogYm9vbCBTdHlsZTo6YXV0b1dyYXAoKSBj
b25zdAogewogICAgIHJldHVybiBSZW5kZXJTdHlsZTo6YXV0b1dyYXAod2hpdGVTcGFjZSgpKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Rpc3BsYXkvY3NzL0Rpc3BsYXlTdHlsZS5oIGIv
U291cmNlL1dlYkNvcmUvZGlzcGxheS9jc3MvRGlzcGxheVN0eWxlLmgKaW5kZXggMjcwMmYxNWQ1
Zjg0MWVmNDc5MzkwYWJjZTdkMzAwZDI2NjlhMjA0Mi4uOTczMDgyYTA0NDg1MDhkYmRiNDc0ZDZm
MmJkMTU0NDRkNzE3N2RmZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZGlzcGxheS9jc3Mv
RGlzcGxheVN0eWxlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZGlzcGxheS9jc3MvRGlzcGxheVN0
eWxlLmgKQEAgLTY3LDEyICs2Nyw2IEBAIHB1YmxpYzoKIAogICAgIGNvbnN0IEZpbGxMYXllciog
YmFja2dyb3VuZExheWVycygpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2dyb3VuZExheWVycy5nZXQo
KTsgfQogCi0gICAgYm9vbCBoYXNWaXNpYmxlQm9yZGVyKCkgY29uc3Q7Ci0gICAgY29uc3QgQm9y
ZGVyVmFsdWUmIGJvcmRlckxlZnQoKSBjb25zdCB7IHJldHVybiBtX2JvcmRlci5sZWZ0OyB9Ci0g
ICAgY29uc3QgQm9yZGVyVmFsdWUmIGJvcmRlclJpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9ib3Jk
ZXIucmlnaHQ7IH0KLSAgICBjb25zdCBCb3JkZXJWYWx1ZSYgYm9yZGVyVG9wKCkgY29uc3QgeyBy
ZXR1cm4gbV9ib3JkZXIudG9wOyB9Ci0gICAgY29uc3QgQm9yZGVyVmFsdWUmIGJvcmRlckJvdHRv
bSgpIGNvbnN0IHsgcmV0dXJuIG1fYm9yZGVyLmJvdHRvbTsgfQotCiAgICAgT3B0aW9uYWw8aW50
PiB6SW5kZXgoKSBjb25zdCB7IHJldHVybiBtX3pJbmRleDsgfQogICAgIGJvb2wgaXNTdGFja2lu
Z0NvbnRleHQoKSBjb25zdCB7IHJldHVybiBtX3pJbmRleC5oYXNWYWx1ZSgpOyB9CiAgICAgCkBA
IC0xMDAsMTUgKzk0LDYgQEAgcHJpdmF0ZToKIAogICAgIFJlZlB0cjxGaWxsTGF5ZXI+IG1fYmFj
a2dyb3VuZExheWVyczsKIAotICAgIHN0cnVjdCB7Ci0gICAgICAgIEJvcmRlclZhbHVlIGxlZnQ7
Ci0gICAgICAgIEJvcmRlclZhbHVlIHJpZ2h0OwotICAgICAgICBCb3JkZXJWYWx1ZSB0b3A7Ci0g
ICAgICAgIEJvcmRlclZhbHVlIGJvdHRvbTsKLQotICAgICAgICBOaW5lUGllY2VJbWFnZSBpbWFn
ZTsKLSAgICB9IG1fYm9yZGVyOwotCiAgICAgRm9udENhc2NhZGUgbV9mb250Q2FzY2FkZTsKICAg
ICBXaGl0ZVNwYWNlIG1fd2hpdGVTcGFjZTsKICAgICBUYWJTaXplIG1fdGFiU2l6ZTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0Um91bmRlZFJlY3Qu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0Um91bmRlZFJlY3QuaApp
bmRleCA4ZWZlZTU3YTllNDdjYzkwNzZhOGE1ZTc3YmVmMjIyMTQwZWI4ZGI3Li4yOGU0OTYyNWRl
YjlkZTc3NzI5Y2Q1NWUwOTMyNDRjZGViZTAyNTNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJvdW5kZWRSZWN0LmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSb3VuZGVkUmVjdC5oCkBAIC00MCw2ICs0MCw3IEBA
IGNsYXNzIEZsb2F0Um91bmRlZFJlY3QgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwog
cHVibGljOgogICAgIGNsYXNzIFJhZGlpIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsK
ICAgICBwdWJsaWM6CiAgICAgICAgIFJhZGlpKCkgeyB9CiAgICAgICAgIFJhZGlpKGNvbnN0IEZs
b2F0U2l6ZSYgdG9wTGVmdCwgY29uc3QgRmxvYXRTaXplJiB0b3BSaWdodCwgY29uc3QgRmxvYXRT
aXplJiBib3R0b21MZWZ0LCBjb25zdCBGbG9hdFNpemUmIGJvdHRvbVJpZ2h0KQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>