<?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>38808</bug_id>
          
          <creation_ts>2010-05-08 15:51:50 -0700</creation_ts>
          <short_desc>Split JSVALUE32_64 code out of JITOpcodes.cpp and into JITOpcodes32_64.cpp</short_desc>
          <delta_ts>2010-05-08 15:59:23 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Oliver Hunt">oliver</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>222943</commentid>
    <comment_count>0</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2010-05-08 15:51:50 -0700</bug_when>
    <thetext>Split JSVALUE32_64 code out of JITOpcodes.cpp and into JITOpcodes32_64.cpp</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>222944</commentid>
    <comment_count>1</comment_count>
      <attachid>55486</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2010-05-08 15:53:43 -0700</bug_when>
    <thetext>Created attachment 55486
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>222945</commentid>
    <comment_count>2</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2010-05-08 15:59:23 -0700</bug_when>
    <thetext>Committed r59040: &lt;http://trac.webkit.org/changeset/59040&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>55486</attachid>
            <date>2010-05-08 15:53:43 -0700</date>
            <delta_ts>2010-05-08 15:55:35 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-38808-20100508155341.patch</filename>
            <type>text/plain</type>
            <size>125095</size>
            <attacher name="Oliver Hunt">oliver</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyBiL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZwppbmRleCBlOWUwNmMwMjc0ZTM0ZTA3MmRkZDhiZWQ5ZTlhMGM2ODRhZmRhMzcxLi43
MjUxOGFmYmEyNTIwYjU0OWEzZjVjYjg3MWQ2OTdkNmZmNzM1ZTQ5IDEwMDY0NAotLS0gYS9KYXZh
U2NyaXB0Q29yZS9DaGFuZ2VMb2cKKysrIGIvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsOTAgQEAKKzIwMTAtMDUtMDggIE9saXZlciBIdW50ICA8b2xpdmVyQGFwcGxlLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTcGxpdCBK
U1ZBTFVFMzJfNjQgY29kZSBvdXQgb2YgSklUT3Bjb2Rlcy5jcHAgYW5kIGludG8gSklUT3Bjb2Rl
czMyXzY0LmNwcAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9Mzg4MDgKKworICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOgorICAgICAgICAqIEphdmFTY3Jp
cHRDb3JlLmd5cGk6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUucHJvOgorICAgICAgICAqIEph
dmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2o6
CisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAg
ICAgICAgKiBqaXQvSklUT3Bjb2Rlcy5jcHA6CisgICAgICAgICogaml0L0pJVE9wY29kZXMzMl82
NC5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlQ1RJTWFjaGlu
ZVRyYW1wb2xpbmVzKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX21vdik6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdF9vcF9lbmQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfam1w
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2xvb3BfaWZfbGVzc2VxKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0U2xvd19vcF9sb29wX2lmX2xlc3NlcSk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9uZXdfb2JqZWN0KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2luc3Rh
bmNlb2YpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2YpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbmV3X2Z1bmMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRfb3BfZ2V0X2dsb2JhbF92YXIpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X2ds
b2JhbF92YXIpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X3Njb3BlZF92YXIpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X3Njb3BlZF92YXIpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRfb3BfdGVhcl9vZmZfYWN0aXZhdGlvbik6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF90ZWFyX29mZl9hcmd1bWVudHMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bf
bmV3X2FycmF5KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3Jlc29sdmUpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3BfdG9fcHJpbWl0aXZlKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0U2xvd19vcF90b19wcmltaXRpdmUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfc3Ry
Y2F0KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3Jlc29sdmVfYmFzZSk6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdF9vcF9yZXNvbHZlX3NraXApOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRfb3BfcmVzb2x2ZV9nbG9iYWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX3Jl
c29sdmVfZ2xvYmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX25vdCk6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdFNsb3dfb3Bfbm90KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29w
X2pmYWxzZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfamZhbHNlKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX2p0cnVlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xv
d19vcF9qdHJ1ZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qZXFfbnVsbCk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qbmVxX251bGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRfb3Bfam5lcV9wdHIpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfanNyKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX3NyZXQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bf
ZXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2VxKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0X29wX25lcSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfbmVxKToK
KyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlT3BTdHJpY3RFcSk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9zdHJpY3RlcSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3Bfc3Ry
aWN0ZXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbnN0cmljdGVxKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0U2xvd19vcF9uc3RyaWN0ZXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRfb3BfZXFfbnVsbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9uZXFfbnVsbCk6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9yZXNvbHZlX3dpdGhfYmFzZSk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdF9vcF9uZXdfZnVuY19leHApOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRf
b3BfdGhyb3cpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X3BuYW1lcyk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9uZXh0X3BuYW1lKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0X29wX3B1c2hfc2NvcGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcG9wX3Njb3Bl
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3RvX2pzbnVtYmVyKToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0U2xvd19vcF90b19qc251bWJlcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF9wdXNoX25ld19zY29wZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9jYXRjaCk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qbXBfc2NvcGVzKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0X29wX3N3aXRjaF9pbW0pOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfc3dp
dGNoX2NoYXIpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfc3dpdGNoX3N0cmluZyk6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9uZXdfZXJyb3IpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRfb3BfZGVidWcpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZW50ZXIpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZW50ZXJfd2l0aF9hY3RpdmF0aW9uKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX2NyZWF0ZV9hcmd1bWVudHMpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRfb3BfaW5pdF9hcmd1bWVudHMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfY29u
dmVydF90aGlzKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9jb252ZXJ0X3RoaXMp
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHJvZmlsZV93aWxsX2NhbGwpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHJvZmlsZV9kaWRfY2FsbCk6CisKIDIwMTAtMDUtMDggIEdh
Ym9yIExva2kgIDxsb2tpQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgR2F2aW4g
QmFycmFjbG91Z2guCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5hbSBi
L0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmFtCmluZGV4IGQzY2E3NmNmMjk2NzRkYTc2MDEw
MTFjMDk4OGFjNzU1ZmFiNjlkYjAuLjIwMTYyZjEzMmRmOWVlMTlkNDg4NDA4OWJkZDNhMTE5MWM0
ZDZlNWYgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmFtCisrKyBiL0ph
dmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmFtCkBAIC04NCw2ICs4NCw3IEBAIGphdmFzY3JpcHRj
b3JlX3NvdXJjZXMgKz0gXAogCUphdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9y
LmggXAogCUphdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwIFwKIAlKYXZhU2NyaXB0Q29yZS9qaXQv
SklUT3Bjb2Rlcy5jcHAgXAorCUphdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3Bw
IFwKIAlKYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAgXAogCUphdmFTY3JpcHRDb3JlL2pp
dC9KSVRDb2RlLmggXAogCUphdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAg
XApkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZ3lwaSBiL0phdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmd5cGkKaW5kZXggMGU5Nzc0YmQ3OTQ0YWQ2ZWJhZWZh
YjliNjk5ZTFhOWExZTg2ZWY5MC4uOWY5ZWVlNTA3NDY1MDQ4OWE2M2ZhZTU4Yzk5ZjcwOTA5ZTEy
M2NhMSAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZ3lwaQorKysg
Yi9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5neXBpCkBAIC0xMjAsNiArMTIwLDcgQEAK
ICAgICAgICAgICAgICdqaXQvSklUQ29kZS5oJywKICAgICAgICAgICAgICdqaXQvSklUSW5saW5l
TWV0aG9kcy5oJywKICAgICAgICAgICAgICdqaXQvSklUT3Bjb2Rlcy5jcHAnLAorICAgICAgICAg
ICAgJ2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwJywKICAgICAgICAgICAgICdqaXQvSklUUHJvcGVy
dHlBY2Nlc3MuY3BwJywKICAgICAgICAgICAgICdqaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5j
cHAnLAogICAgICAgICAgICAgJ2ppdC9KSVRTdHViQ2FsbC5oJywKZGlmZiAtLWdpdCBhL0phdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnBybyBiL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnBybwppbmRleCBmYzI0MmNmNmY4MWYwMWNhZTc2MTk1YTk0MmYzOTBmYTA4Zjg5ZTExLi5l
YTY1YmQ0OGU3NGE5YWYyMjM5NWE1ZjdiZjFjZDllNTA1MzYyYTk5IDEwMDY0NAotLS0gYS9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5wcm8KKysrIGIvSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUucHJvCkBAIC0xMDMsNiArMTAzLDcgQEAgU09VUkNFUyArPSBcCiAgICAgaml0L0pJ
VENhbGwuY3BwIFwKICAgICBqaXQvSklULmNwcCBcCiAgICAgaml0L0pJVE9wY29kZXMuY3BwIFwK
KyAgICBqaXQvSklUT3Bjb2RlczMyXzY0LmNwcCBcCiAgICAgaml0L0pJVFByb3BlcnR5QWNjZXNz
LmNwcCBcCiAgICAgaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwIFwKICAgICBqaXQvSklU
U3R1YnMuY3BwIFwKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZj
cHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ogYi9KYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNw
cm9qCmluZGV4IGRkZGYxOTRiOWRiMzdjZDgzMThiOWJiNjYzNjEyNDMxZGZhYTgwMmQuLmE4MTFl
NThhNjA4MjEyMTQ0OWYzNmIyNDE5MzFlMGI4N2MzZGIyNzEgMTAwNjQ0Ci0tLSBhL0phdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS52Y3Byb2oKKysrIGIvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvagpAQCAtMTY4OSw2ICsxNjg5LDEwIEBACiAJ
CQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXGpp
dFxKSVRPcGNvZGVzMzJfNjQuY3BwIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQog
CQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5caml0XEpJVFByb3BlcnR5QWNjZXNzLmNwcCINCiAJCQkJ
Pg0KIAkJCTwvRmlsZT4NCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCAyYzk5NjEyNjI3N2I2M2JiZjRkNjRm
ZTFmZDVhMGQ5OTFmZWVkOGU3Li5mMDMyZWYyNjVhNzg1NWNmYjFjZDk3ZjZlZGNlYmQzMDkwN2Jm
N2E1IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCisrKyBiL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTI4Nyw2ICsyODcsNyBAQAogCQk5NjlBMDc5QjBFRDFE
M0FFMDBGMUY2ODEgLyogT3Bjb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA5NjlBMDc5NTBFRDFEM0FFMDBGMUY2ODEgLyogT3Bjb2RlLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJOTZERDczNzkwRjlE
QTMxMDAwMjdGQkNDIC8qIFZNVGFncy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gOTZERDczNzgwRjlEQTMxMDAwMjdGQkNDIC8qIFZNVGFncy5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTk3MUVERUE2MTE2
OUUwRDMwMDVFNDI2MiAvKiBUZXJtaW5hdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA5N0Y2OTAzQTExNjlERjdGMDBBNkJCNDYgLyogVGVybWluYXRv
ci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUE3
MTIzNkU1MTE5NUYzM0MwMEJEMjE3NCAvKiBKSVRPcGNvZGVzMzJfNjQuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTcxMjM2RTQxMTk1RjMzQzAwQkQy
MTc0IC8qIEpJVE9wY29kZXMzMl82NC5jcHAgKi87IH07CiAJCUE3MjcwMDkwMERBQzZCQkMwMEU1
NDhENyAvKiBKU05vdEFuT2JqZWN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEE3MjcwMDc4MERBQzYwNTYwMEU1NDhENyAvKiBKU05vdEFuT2JqZWN0
LmNwcCAqLzsgfTsKIAkJQTcyNzAxQjkwREFERTk0OTAwRTU0OEQ3IC8qIEV4Y2VwdGlvbkhlbHBl
cnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3Mjcw
MUIzMERBREU5NDkwMEU1NDhENyAvKiBFeGNlcHRpb25IZWxwZXJzLmggKi87IH07CiAJCUE3MjdG
RjZCMERBMzA5MjIwMEU1NDhENyAvKiBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3MjdGRjY2MERBMzA1M0Iw
MEU1NDhENyAvKiBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yLmNwcCAqLzsgfTsKQEAgLTg2OSw2ICs4
NzAsNyBAQAogCQk5NjlBMDkyMjBFRDFFMDlDMDBGMUY2ODEgLyogQ29tcGxldGlvbi5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDb21wbGV0aW9uLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTZERDczNzgwRjlEQTMxMDAwMjdGQkNDIC8qIFZNVGFn
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBWTVRhZ3MuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTdGNjkwM0ExMTY5REY3RjAwQTZCQjQ2IC8qIFRlcm1pbmF0
b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGVybWluYXRvci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBNzEyMzZFNDExOTVGMzNDMDBCRDIxNzQgLyogSklU
T3Bjb2RlczMyXzY0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpJ
VE9wY29kZXMzMl82NC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3MThGNjFB
MTE3NTRBMjEwMDI0NjVBNyAvKiBSZWdFeHBKaXRUYWJsZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gUmVnRXhwSml0VGFibGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUE3MThGODIxMTE3OEVCNEIwMDI0NjVBNyAvKiBjcmVhdGVfcmVnZXhfdGFibGVzICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSB0ZXh0LnNjcmlw
dC5weXRob247IGZpbGVFbmNvZGluZyA9IDQ7IHBhdGggPSBjcmVhdGVfcmVnZXhfdGFibGVzOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNzI3MDA3NzBEQUM2MDU2MDBFNTQ4RDcgLyog
SlNOb3RBbk9iamVjdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU05vdEFu
T2JqZWN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMjMwLDYgKzEyMzIsNyBA
QAogCQkJCTg2Q0NFRkREMEY0MTNGODkwMEZEN0Y5RSAvKiBKSVRDb2RlLmggKi8sCiAJCQkJODZD
Qzg1QTAwRUU3OUE0NzAwMjg4NjgyIC8qIEpJVElubGluZU1ldGhvZHMuaCAqLywKIAkJCQlCQ0RE
NTFFOTBGQjhERjc0MDA0QThCREMgLyogSklUT3Bjb2Rlcy5jcHAgKi8sCisJCQkJQTcxMjM2RTQx
MTk1RjMzQzAwQkQyMTc0IC8qIEpJVE9wY29kZXMzMl82NC5jcHAgKi8sCiAJCQkJODZDQzg1QzMw
RUU3QTg5NDAwMjg4NjgyIC8qIEpJVFByb3BlcnR5QWNjZXNzLmNwcCAqLywKIAkJCQlBN0MxRThD
ODExMkU3MDFDMDBBMzdGOTggLyogSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAgKi8sCiAJCQkJ
OTYwNjI2OTUwRkI4RUMwMjAwOTc5OEFCIC8qIEpJVFN0dWJDYWxsLmggKi8sCkBAIC0yNTgwLDYg
KzI1ODMsNyBAQAogCQkJCTUxMUZDNEM5MTE3RUUyODcwMDQyNTI3MiAvKiBNRDUuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQTczODY1NTUxMTg2OTdCNDAwNTQwMjc5IC8qIFRodW5rR2VuZXJhdG9y
cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzU3MDZERTExOEEyQkNGMDA1N0Y4OEYgLyogSklU
QXJpdGhtZXRpYzMyXzY0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUE3MTIzNkU1MTE5NUYzM0Mw
MEJEMjE3NCAvKiBKSVRPcGNvZGVzMzJfNjQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJ
cnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CmRpZmYgLS1naXQg
YS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAgYi9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUT3Bjb2Rlcy5jcHAKaW5kZXggYTgyNDgwMGE4MWI4Y2E4MjY2ZTk2MTg0ZDAzYWFjMDU4YzQ3
YTFjNy4uODUxNTIzM2JiZjE3ZDk4NWJhYmQ5YzViYjUwMjM3NzAyMTQxOGJhNyAxMDA2NDQKLS0t
IGEvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCisrKyBiL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRPcGNvZGVzLmNwcApAQCAtMzksMTQ5MyArMzksNyBAQAogCiBuYW1lc3BhY2UgSlND
IHsKIAotI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0KLXZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUNU
SU1hY2hpbmVUcmFtcG9saW5lcyhSZWZQdHI8RXhlY3V0YWJsZVBvb2w+KiBleGVjdXRhYmxlUG9v
bCwgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBUcmFtcG9saW5lU3RydWN0dXJlICp0cmFtcG9s
aW5lcykKLXsKLSNpZiBFTkFCTEUoSklUX09QVElNSVpFX01PRCkKLSAgICBMYWJlbCBzb2Z0TW9k
QmVnaW4gPSBhbGlnbigpOwotICAgIHNvZnRNb2R1bG8oKTsKLSNlbmRpZgotI2lmIEVOQUJMRShK
SVRfT1BUSU1JWkVfUFJPUEVSVFlfQUNDRVNTKQotICAgIC8vICgxKSBUaGlzIGZ1bmN0aW9uIHBy
b3ZpZGVzIGZhc3QgcHJvcGVydHkgYWNjZXNzIGZvciBzdHJpbmcgbGVuZ3RoCi0gICAgTGFiZWwg
c3RyaW5nTGVuZ3RoQmVnaW4gPSBhbGlnbigpOwotICAgIAotICAgIC8vIHJlZ1QwIGhvbGRzIHBh
eWxvYWQsIHJlZ1QxIGhvbGRzIHRhZwotICAgIAotICAgIEp1bXAgc3RyaW5nX2ZhaWx1cmVDYXNl
czEgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDEsIEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpKTsK
LSAgICBKdW1wIHN0cmluZ19mYWlsdXJlQ2FzZXMyID0gYnJhbmNoUHRyKE5vdEVxdWFsLCBBZGRy
ZXNzKHJlZ1QwKSwgSW1tUHRyKG1fZ2xvYmFsRGF0YS0+anNTdHJpbmdWUHRyKSk7Ci0KLSAgICAv
LyBDaGVja3Mgb3V0IG9rYXkhIC0gZ2V0IHRoZSBsZW5ndGggZnJvbSB0aGUgVXN0cmluZy4KLSAg
ICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwgT0JKRUNUX09GRlNFVE9GKEpTU3RyaW5nLCBtX2xlbmd0
aCkpLCByZWdUMik7Ci0KLSAgICBKdW1wIHN0cmluZ19mYWlsdXJlQ2FzZXMzID0gYnJhbmNoMzIo
QWJvdmUsIHJlZ1QyLCBJbW0zMihJTlRfTUFYKSk7Ci0gICAgbW92ZShyZWdUMiwgcmVnVDApOwot
ICAgIG1vdmUoSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpLCByZWdUMSk7Ci0KLSAgICByZXQoKTsK
LSNlbmRpZgotCi0gICAgLy8gKDIpIFRyYW1wb2xpbmVzIGZvciB0aGUgc2xvdyBjYXNlcyBvZiBv
cF9jYWxsIC8gb3BfY2FsbF9ldmFsIC8gb3BfY29uc3RydWN0LgotCi0jaWYgRU5BQkxFKEpJVF9P
UFRJTUlaRV9DQUxMKQotICAgIC8vIFZpcnR1YWxDYWxsTGluayBUcmFtcG9saW5lCi0gICAgLy8g
cmVnVDAgaG9sZHMgY2FsbGVlLCByZWdUMSBob2xkcyBhcmdDb3VudC4gIHJlZ1QyIHdpbGwgaG9s
ZCB0aGUgRnVuY3Rpb25FeGVjdXRhYmxlLgotICAgIExhYmVsIHZpcnR1YWxDYWxsTGlua0JlZ2lu
ID0gYWxpZ24oKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIE9CSkVDVF9PRkZTRVRPRihK
U0Z1bmN0aW9uLCBtX2V4ZWN1dGFibGUpKSwgcmVnVDIpOwotCi0gICAgSnVtcCBpc05hdGl2ZUZ1
bmMyID0gYnJhbmNoMzIoRXF1YWwsIEFkZHJlc3MocmVnVDIsIE9CSkVDVF9PRkZTRVRPRihGdW5j
dGlvbkV4ZWN1dGFibGUsIG1fbnVtUGFyYW1ldGVycykpLCBJbW0zMigwKSk7Ci0KLSAgICBKdW1w
IGhhc0NvZGVCbG9jazIgPSBicmFuY2gzMihHcmVhdGVyVGhhbiwgQWRkcmVzcyhyZWdUMiwgT0JK
RUNUX09GRlNFVE9GKEZ1bmN0aW9uRXhlY3V0YWJsZSwgbV9udW1QYXJhbWV0ZXJzKSksIEltbTMy
KDApKTsKLSAgICBwcmVzZXJ2ZVJldHVybkFkZHJlc3NBZnRlckNhbGwocmVnVDMpOwotICAgIHJl
c3RvcmVBcmd1bWVudFJlZmVyZW5jZSgpOwotICAgIENhbGwgY2FsbEpTRnVuY3Rpb24yID0gY2Fs
bCgpOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgT0JKRUNUX09GRlNFVE9GKEpTRnVuY3Rp
b24sIG1fZXhlY3V0YWJsZSkpLCByZWdUMik7Ci0gICAgZW1pdEdldEpJVFN0dWJBcmcoMiwgcmVn
VDEpOyAvLyBhcmdDb3VudAotICAgIHJlc3RvcmVSZXR1cm5BZGRyZXNzQmVmb3JlUmV0dXJuKHJl
Z1QzKTsKLSAgICBoYXNDb2RlQmxvY2syLmxpbmsodGhpcyk7Ci0KLSAgICAvLyBDaGVjayBhcmdD
b3VudCBtYXRjaGVzIGNhbGxlZSBhcml0eS4KLSAgICBKdW1wIGFyaXR5Q2hlY2tPa2F5MiA9IGJy
YW5jaDMyKEVxdWFsLCBBZGRyZXNzKHJlZ1QyLCBPQkpFQ1RfT0ZGU0VUT0YoRnVuY3Rpb25FeGVj
dXRhYmxlLCBtX251bVBhcmFtZXRlcnMpKSwgcmVnVDEpOwotICAgIHByZXNlcnZlUmV0dXJuQWRk
cmVzc0FmdGVyQ2FsbChyZWdUMyk7Ci0gICAgZW1pdFB1dEpJVFN0dWJBcmcocmVnVDMsIDEpOyAv
LyByZXR1cm4gYWRkcmVzcwotICAgIHJlc3RvcmVBcmd1bWVudFJlZmVyZW5jZSgpOwotICAgIENh
bGwgY2FsbEFyaXR5Q2hlY2syID0gY2FsbCgpOwotICAgIG1vdmUocmVnVDEsIGNhbGxGcmFtZVJl
Z2lzdGVyKTsKLSAgICBlbWl0R2V0SklUU3R1YkFyZygyLCByZWdUMSk7IC8vIGFyZ0NvdW50Ci0g
ICAgcmVzdG9yZVJldHVybkFkZHJlc3NCZWZvcmVSZXR1cm4ocmVnVDMpOwotICAgIGFyaXR5Q2hl
Y2tPa2F5Mi5saW5rKHRoaXMpOwotCi0gICAgaXNOYXRpdmVGdW5jMi5saW5rKHRoaXMpOwotCi0g
ICAgY29tcGlsZU9wQ2FsbEluaXRpYWxpemVDYWxsRnJhbWUoKTsKLQotICAgIHByZXNlcnZlUmV0
dXJuQWRkcmVzc0FmdGVyQ2FsbChyZWdUMyk7Ci0gICAgZW1pdFB1dEpJVFN0dWJBcmcocmVnVDMs
IDEpOyAvLyByZXR1cm4gYWRkcmVzcwotICAgIHJlc3RvcmVBcmd1bWVudFJlZmVyZW5jZSgpOwot
ICAgIENhbGwgY2FsbExhenlMaW5rQ2FsbCA9IGNhbGwoKTsKLSAgICByZXN0b3JlUmV0dXJuQWRk
cmVzc0JlZm9yZVJldHVybihyZWdUMyk7Ci0gICAganVtcChyZWdUMCk7Ci0jZW5kaWYgLy8gRU5B
QkxFKEpJVF9PUFRJTUlaRV9DQUxMKQotCi0gICAgLy8gVmlydHVhbENhbGwgVHJhbXBvbGluZQot
ICAgIC8vIHJlZ1QwIGhvbGRzIGNhbGxlZSwgcmVnVDEgaG9sZHMgYXJnQ291bnQuICByZWdUMiB3
aWxsIGhvbGQgdGhlIEZ1bmN0aW9uRXhlY3V0YWJsZS4KLSAgICBMYWJlbCB2aXJ0dWFsQ2FsbEJl
Z2luID0gYWxpZ24oKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIE9CSkVDVF9PRkZTRVRP
RihKU0Z1bmN0aW9uLCBtX2V4ZWN1dGFibGUpKSwgcmVnVDIpOwotCi0gICAgSnVtcCBpc05hdGl2
ZUZ1bmMzID0gYnJhbmNoMzIoRXF1YWwsIEFkZHJlc3MocmVnVDIsIE9CSkVDVF9PRkZTRVRPRihG
dW5jdGlvbkV4ZWN1dGFibGUsIG1fbnVtUGFyYW1ldGVycykpLCBJbW0zMigwKSk7Ci0KLSAgICBK
dW1wIGhhc0NvZGVCbG9jazMgPSBicmFuY2gzMihHcmVhdGVyVGhhbiwgQWRkcmVzcyhyZWdUMiwg
T0JKRUNUX09GRlNFVE9GKEZ1bmN0aW9uRXhlY3V0YWJsZSwgbV9udW1QYXJhbWV0ZXJzKSksIElt
bTMyKDApKTsKLSAgICBwcmVzZXJ2ZVJldHVybkFkZHJlc3NBZnRlckNhbGwocmVnVDMpOwotICAg
IHJlc3RvcmVBcmd1bWVudFJlZmVyZW5jZSgpOwotICAgIENhbGwgY2FsbEpTRnVuY3Rpb24xID0g
Y2FsbCgpOwotICAgIGVtaXRHZXRKSVRTdHViQXJnKDIsIHJlZ1QxKTsgLy8gYXJnQ291bnQKLSAg
ICByZXN0b3JlUmV0dXJuQWRkcmVzc0JlZm9yZVJldHVybihyZWdUMyk7Ci0gICAgbG9hZFB0cihB
ZGRyZXNzKHJlZ1QwLCBPQkpFQ1RfT0ZGU0VUT0YoSlNGdW5jdGlvbiwgbV9leGVjdXRhYmxlKSks
IHJlZ1QyKTsKLSAgICBoYXNDb2RlQmxvY2szLmxpbmsodGhpcyk7Ci0gICAgCi0gICAgLy8gQ2hl
Y2sgYXJnQ291bnQgbWF0Y2hlcyBjYWxsZWUgYXJpdHkuCi0gICAgSnVtcCBhcml0eUNoZWNrT2th
eTMgPSBicmFuY2gzMihFcXVhbCwgQWRkcmVzcyhyZWdUMiwgT0JKRUNUX09GRlNFVE9GKEZ1bmN0
aW9uRXhlY3V0YWJsZSwgbV9udW1QYXJhbWV0ZXJzKSksIHJlZ1QxKTsKLSAgICBwcmVzZXJ2ZVJl
dHVybkFkZHJlc3NBZnRlckNhbGwocmVnVDMpOwotICAgIGVtaXRQdXRKSVRTdHViQXJnKHJlZ1Qz
LCAxKTsgLy8gcmV0dXJuIGFkZHJlc3MKLSAgICByZXN0b3JlQXJndW1lbnRSZWZlcmVuY2UoKTsK
LSAgICBDYWxsIGNhbGxBcml0eUNoZWNrMSA9IGNhbGwoKTsKLSAgICBtb3ZlKHJlZ1QxLCBjYWxs
RnJhbWVSZWdpc3Rlcik7Ci0gICAgZW1pdEdldEpJVFN0dWJBcmcoMiwgcmVnVDEpOyAvLyBhcmdD
b3VudAotICAgIHJlc3RvcmVSZXR1cm5BZGRyZXNzQmVmb3JlUmV0dXJuKHJlZ1QzKTsKLSAgICBs
b2FkUHRyKEFkZHJlc3MocmVnVDAsIE9CSkVDVF9PRkZTRVRPRihKU0Z1bmN0aW9uLCBtX2V4ZWN1
dGFibGUpKSwgcmVnVDIpOwotICAgIGFyaXR5Q2hlY2tPa2F5My5saW5rKHRoaXMpOwotCi0gICAg
aXNOYXRpdmVGdW5jMy5saW5rKHRoaXMpOwotCi0gICAgY29tcGlsZU9wQ2FsbEluaXRpYWxpemVD
YWxsRnJhbWUoKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDIsIE9CSkVDVF9PRkZTRVRPRihG
dW5jdGlvbkV4ZWN1dGFibGUsIG1faml0Q29kZSkpLCByZWdUMCk7Ci0gICAganVtcChyZWdUMCk7
Ci0KLSNpZiBDUFUoWDg2KSB8fCBDUFUoQVJNX1RSQURJVElPTkFMKQotICAgIExhYmVsIG5hdGl2
ZUNhbGxUaHVuayA9IGFsaWduKCk7Ci0gICAgcHJlc2VydmVSZXR1cm5BZGRyZXNzQWZ0ZXJDYWxs
KHJlZ1QwKTsKLSAgICBlbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIocmVnVDAsIFJlZ2lzdGVyRmls
ZTo6UmV0dXJuUEMpOyAvLyBQdXNoIHJldHVybiBhZGRyZXNzCi0KLSAgICAvLyBMb2FkIGNhbGxl
ciBmcmFtZSdzIHNjb3BlIGNoYWluIGludG8gdGhpcyBjYWxsZnJhbWUgc28gdGhhdCB3aGF0ZXZl
ciB3ZSBjYWxsIGNhbgotICAgIC8vIGdldCB0byBpdHMgZ2xvYmFsIGRhdGEuCi0gICAgZW1pdEdl
dEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoUmVnaXN0ZXJGaWxlOjpDYWxsZXJGcmFtZSwgcmVnVDEp
OwotICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKFJlZ2lzdGVyRmlsZTo6U2NvcGVD
aGFpbiwgcmVnVDEsIHJlZ1QxKTsKLSAgICBlbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIocmVnVDEs
IFJlZ2lzdGVyRmlsZTo6U2NvcGVDaGFpbik7Ci0gICAgCi0jaWYgQ1BVKFg4NikKLSAgICBlbWl0
R2V0RnJvbUNhbGxGcmFtZUhlYWRlcjMyKFJlZ2lzdGVyRmlsZTo6QXJndW1lbnRDb3VudCwgcmVn
VDApOwotCi0gICAgLyogV2UgaGF2ZSB0d28gc3RydWN0cyB0aGF0IHdlIHVzZSB0byBkZXNjcmli
ZSB0aGUgc3RhY2tmcmFtZSB3ZSBzZXQgdXAgZm9yIG91cgotICAgICAqIGNhbGwgdG8gbmF0aXZl
IGNvZGUuICBOYXRpdmVDYWxsRnJhbWVTdHJ1Y3R1cmUgZGVzY3JpYmVzIHRoZSBob3cgd2Ugc2V0
IHVwIHRoZSBzdGFjawotICAgICAqIGluIGFkdmFuY2Ugb2YgdGhlIGNhbGwuICBOYXRpdmVGdW5j
dGlvbkNhbGxlZVNpZ25hdHVyZSBkZXNjcmliZXMgdGhlIGNhbGxmcmFtZQotICAgICAqIGFzIHRo
ZSBuYXRpdmUgY29kZSBleHBlY3RzIGl0LiAgV2UgZG8gdGhpcyBhcyB3ZSBhcmUgdXNpbmcgdGhl
IGZhc3RjYWxsIGNhbGxpbmcKLSAgICAgKiBjb252ZW50aW9uIHdoaWNoIHJlc3VsdHMgaW4gdGhl
IGNhbGxlZSBwb3BwaW5nIGl0cyBhcmd1bWVudHMgb2ZmIHRoZSBzdGFjaywgYnV0Ci0gICAgICog
bm90IHRoZSByZXN0IG9mIHRoZSBjYWxsZnJhbWUgc28gd2UgbmVlZCBhIG5pY2Ugd2F5IHRvIGVu
c3VyZSB3ZSBpbmNyZW1lbnQgdGhlCi0gICAgICogc3RhY2sgcG9pbnRlciBieSB0aGUgcmlnaHQg
YW1vdW50IGFmdGVyIHRoZSBjYWxsLgotICAgICAqLwotCi0jaWYgQ09NUElMRVIoTVNWQykgfHwg
T1MoTElOVVgpCi0jaWYgQ09NUElMRVIoTVNWQykKLSNwcmFnbWEgcGFjayhwdXNoKQotI3ByYWdt
YSBwYWNrKDQpCi0jZW5kaWYgLy8gQ09NUElMRVIoTVNWQykKLSAgICBzdHJ1Y3QgTmF0aXZlQ2Fs
bEZyYW1lU3RydWN0dXJlIHsKLSAgICAgIC8vICBDYWxsRnJhbWUqIGNhbGxGcmFtZTsgLy8gcGFz
c2VkIGluIEVEWAotICAgICAgICBKU09iamVjdCogY2FsbGVlOwotICAgICAgICBKU1ZhbHVlIHRo
aXNWYWx1ZTsKLSAgICAgICAgQXJnTGlzdCogYXJnUG9pbnRlcjsKLSAgICAgICAgQXJnTGlzdCBh
cmdzOwotICAgICAgICBKU1ZhbHVlIHJlc3VsdDsKLSAgICB9OwotICAgIHN0cnVjdCBOYXRpdmVG
dW5jdGlvbkNhbGxlZVNpZ25hdHVyZSB7Ci0gICAgICAgIEpTT2JqZWN0KiBjYWxsZWU7Ci0gICAg
ICAgIEpTVmFsdWUgdGhpc1ZhbHVlOwotICAgICAgICBBcmdMaXN0KiBhcmdQb2ludGVyOwotICAg
IH07Ci0jaWYgQ09NUElMRVIoTVNWQykKLSNwcmFnbWEgcGFjayhwb3ApCi0jZW5kaWYgLy8gQ09N
UElMRVIoTVNWQykKLSNlbHNlCi0gICAgc3RydWN0IE5hdGl2ZUNhbGxGcmFtZVN0cnVjdHVyZSB7
Ci0gICAgICAvLyAgQ2FsbEZyYW1lKiBjYWxsRnJhbWU7IC8vIHBhc3NlZCBpbiBFQ1gKLSAgICAg
IC8vICBKU09iamVjdCogY2FsbGVlOyAvLyBwYXNzZWQgaW4gRURYCi0gICAgICAgIEpTVmFsdWUg
dGhpc1ZhbHVlOwotICAgICAgICBBcmdMaXN0KiBhcmdQb2ludGVyOwotICAgICAgICBBcmdMaXN0
IGFyZ3M7Ci0gICAgfTsKLSAgICBzdHJ1Y3QgTmF0aXZlRnVuY3Rpb25DYWxsZWVTaWduYXR1cmUg
ewotICAgICAgICBKU1ZhbHVlIHRoaXNWYWx1ZTsKLSAgICAgICAgQXJnTGlzdCogYXJnUG9pbnRl
cjsKLSAgICB9OwotI2VuZGlmCi0gICAgCi0gICAgY29uc3QgaW50IE5hdGl2ZUNhbGxGcmFtZVNp
emUgPSAoc2l6ZW9mKE5hdGl2ZUNhbGxGcmFtZVN0cnVjdHVyZSkgKyAxNSkgJiB+MTU7Ci0gICAg
Ly8gQWxsb2NhdGUgc3lzdGVtIHN0YWNrIGZyYW1lCi0gICAgc3ViUHRyKEltbTMyKE5hdGl2ZUNh
bGxGcmFtZVNpemUpLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7Ci0KLSAgICAvLyBTZXQgdXAgYXJn
dW1lbnRzCi0gICAgc3ViUHRyKEltbTMyKDEpLCByZWdUMCk7IC8vIERvbid0IGluY2x1ZGUgJ3Ro
aXMnIGluIGFyZ2NvdW50Ci0KLSAgICAvLyBwdXNoIGFyZ2NvdW50Ci0gICAgc3RvcmVQdHIocmVn
VDAsIEFkZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIsIE9CSkVDVF9PRkZTRVRPRihOYXRpdmVD
YWxsRnJhbWVTdHJ1Y3R1cmUsIGFyZ3MpICsgT0JKRUNUX09GRlNFVE9GKEFyZ0xpc3QsIG1fYXJn
Q291bnQpKSk7Ci0gICAgCi0gICAgLy8gQ2FsY3VsYXRlIHRoZSBzdGFydCBvZiB0aGUgY2FsbGZy
YW1lIGhlYWRlciwgYW5kIHN0b3JlIGluIHJlZ1QxCi0gICAgYWRkUHRyKEltbTMyKC1SZWdpc3Rl
ckZpbGU6OkNhbGxGcmFtZUhlYWRlclNpemUgKiAoaW50KXNpemVvZihSZWdpc3RlcikpLCBjYWxs
RnJhbWVSZWdpc3RlciwgcmVnVDEpOwotICAgIAotICAgIC8vIENhbGN1bGF0ZSBzdGFydCBvZiBh
cmd1bWVudHMgYXMgY2FsbGZyYW1lIGhlYWRlciAtIHNpemVvZihSZWdpc3RlcikgKiBhcmdjb3Vu
dCAocmVnVDApCi0gICAgbXVsMzIoSW1tMzIoc2l6ZW9mKFJlZ2lzdGVyKSksIHJlZ1QwLCByZWdU
MCk7Ci0gICAgc3ViUHRyKHJlZ1QwLCByZWdUMSk7Ci0gICAgc3RvcmVQdHIocmVnVDEsIEFkZHJl
c3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIsIE9CSkVDVF9PRkZTRVRPRihOYXRpdmVDYWxsRnJhbWVT
dHJ1Y3R1cmUsIGFyZ3MpICsgT0JKRUNUX09GRlNFVE9GKEFyZ0xpc3QsIG1fYXJncykpKTsKLQot
ICAgIC8vIEFyZ0xpc3QgaXMgcGFzc2VkIGJ5IHJlZmVyZW5jZSBzbyBpcyBzdGFja1BvaW50ZXJS
ZWdpc3RlciArIDQgKiBzaXplb2YoUmVnaXN0ZXIpCi0gICAgYWRkUHRyKEltbTMyKE9CSkVDVF9P
RkZTRVRPRihOYXRpdmVDYWxsRnJhbWVTdHJ1Y3R1cmUsIGFyZ3MpKSwgc3RhY2tQb2ludGVyUmVn
aXN0ZXIsIHJlZ1QwKTsKLSAgICBzdG9yZVB0cihyZWdUMCwgQWRkcmVzcyhzdGFja1BvaW50ZXJS
ZWdpc3RlciwgT0JKRUNUX09GRlNFVE9GKE5hdGl2ZUNhbGxGcmFtZVN0cnVjdHVyZSwgYXJnUG9p
bnRlcikpKTsKLQotICAgIC8vIHJlZ1QxIGN1cnJlbnRseSBwb2ludHMgdG8gdGhlIGZpcnN0IGFy
Z3VtZW50LCByZWdUMSAtIHNpemVvZihSZWdpc3RlcikgcG9pbnRzIHRvICd0aGlzJwotICAgIGxv
YWRQdHIoQWRkcmVzcyhyZWdUMSwgLShpbnQpc2l6ZW9mKFJlZ2lzdGVyKSArIE9CSkVDVF9PRkZT
RVRPRihKU1ZhbHVlLCB1LmFzQml0cy5wYXlsb2FkKSksIHJlZ1QyKTsKLSAgICBsb2FkUHRyKEFk
ZHJlc3MocmVnVDEsIC0oaW50KXNpemVvZihSZWdpc3RlcikgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNW
YWx1ZSwgdS5hc0JpdHMudGFnKSksIHJlZ1QzKTsKLSAgICBzdG9yZVB0cihyZWdUMiwgQWRkcmVz
cyhzdGFja1BvaW50ZXJSZWdpc3RlciwgT0JKRUNUX09GRlNFVE9GKE5hdGl2ZUNhbGxGcmFtZVN0
cnVjdHVyZSwgdGhpc1ZhbHVlKSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5w
YXlsb2FkKSkpOwotICAgIHN0b3JlUHRyKHJlZ1QzLCBBZGRyZXNzKHN0YWNrUG9pbnRlclJlZ2lz
dGVyLCBPQkpFQ1RfT0ZGU0VUT0YoTmF0aXZlQ2FsbEZyYW1lU3RydWN0dXJlLCB0aGlzVmFsdWUp
ICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpKTsKLQotI2lmIENPTVBJ
TEVSKE1TVkMpIHx8IE9TKExJTlVYKQotICAgIC8vIEFyZ0xpc3QgaXMgcGFzc2VkIGJ5IHJlZmVy
ZW5jZSBzbyBpcyBzdGFja1BvaW50ZXJSZWdpc3RlciArIDQgKiBzaXplb2YoUmVnaXN0ZXIpCi0g
ICAgYWRkUHRyKEltbTMyKE9CSkVDVF9PRkZTRVRPRihOYXRpdmVDYWxsRnJhbWVTdHJ1Y3R1cmUs
IHJlc3VsdCkpLCBzdGFja1BvaW50ZXJSZWdpc3RlciwgWDg2UmVnaXN0ZXJzOjplY3gpOwotCi0g
ICAgLy8gUGxhbnQgY2FsbGVlCi0gICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoUmVn
aXN0ZXJGaWxlOjpDYWxsZWUsIFg4NlJlZ2lzdGVyczo6ZWF4KTsKLSAgICBzdG9yZVB0cihYODZS
ZWdpc3RlcnM6OmVheCwgQWRkcmVzcyhzdGFja1BvaW50ZXJSZWdpc3RlciwgT0JKRUNUX09GRlNF
VE9GKE5hdGl2ZUNhbGxGcmFtZVN0cnVjdHVyZSwgY2FsbGVlKSkpOwotCi0gICAgLy8gUGxhbnQg
Y2FsbGZyYW1lCi0gICAgbW92ZShjYWxsRnJhbWVSZWdpc3RlciwgWDg2UmVnaXN0ZXJzOjplZHgp
OwotCi0gICAgY2FsbChBZGRyZXNzKFg4NlJlZ2lzdGVyczo6ZWF4LCBPQkpFQ1RfT0ZGU0VUT0Yo
SlNGdW5jdGlvbiwgbV9kYXRhKSkpOwotCi0gICAgLy8gSlNWYWx1ZSBpcyBhIG5vbi1QT0QgdHlw
ZSwgc28gZWF4IHBvaW50cyB0byBpdAotICAgIGVtaXRMb2FkKDAsIHJlZ1QxLCByZWdUMCwgWDg2
UmVnaXN0ZXJzOjplYXgpOwotI2Vsc2UKLSAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0
cihSZWdpc3RlckZpbGU6OkNhbGxlZSwgWDg2UmVnaXN0ZXJzOjplZHgpOyAvLyBjYWxsZWUKLSAg
ICBtb3ZlKGNhbGxGcmFtZVJlZ2lzdGVyLCBYODZSZWdpc3RlcnM6OmVjeCk7IC8vIGNhbGxGcmFt
ZQotICAgIGNhbGwoQWRkcmVzcyhYODZSZWdpc3RlcnM6OmVkeCwgT0JKRUNUX09GRlNFVE9GKEpT
RnVuY3Rpb24sIG1fZGF0YSkpKTsKLSNlbmRpZgotCi0gICAgLy8gV2UndmUgcHV0IGEgZmV3IHRl
bXBvcmFyaWVzIG9uIHRoZSBzdGFjayBpbiBhZGRpdGlvbiB0byB0aGUgYWN0dWFsIGFyZ3VtZW50
cwotICAgIC8vIHNvIHB1bGwgdGhlbSBvZmYgbm93Ci0gICAgYWRkUHRyKEltbTMyKE5hdGl2ZUNh
bGxGcmFtZVNpemUgLSBzaXplb2YoTmF0aXZlRnVuY3Rpb25DYWxsZWVTaWduYXR1cmUpKSwgc3Rh
Y2tQb2ludGVyUmVnaXN0ZXIpOwotCi0jZWxpZiBDUFUoQVJNX1RSQURJVElPTkFMKQotICAgIGVt
aXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyMzIoUmVnaXN0ZXJGaWxlOjpBcmd1bWVudENvdW50LCBy
ZWdUMCk7Ci0KLSAgICAvLyBBbGxvY2F0ZSBzdGFjayBzcGFjZSBmb3Igb3VyIGFyZ2xpc3QKLSAg
ICBDT01QSUxFX0FTU0VSVCgoc2l6ZW9mKEFyZ0xpc3QpICYgMHg3KSA9PSAwICYmIHNpemVvZihK
U1ZhbHVlKSA9PSA4ICYmIHNpemVvZihSZWdpc3RlcikgPT0gOCwgQXJnTGlzdF9zaG91bGRfYnlf
OGJ5dGVfYWxpZ25lZCk7Ci0gICAgc3ViUHRyKEltbTMyKHNpemVvZihBcmdMaXN0KSksIHN0YWNr
UG9pbnRlclJlZ2lzdGVyKTsKLQotICAgIC8vIFNldCB1cCBhcmd1bWVudHMKLSAgICBzdWJQdHIo
SW1tMzIoMSksIHJlZ1QwKTsgLy8gRG9uJ3QgaW5jbHVkZSAndGhpcycgaW4gYXJnY291bnQKLQot
ICAgIC8vIFB1c2ggYXJnY291bnQKLSAgICBzdG9yZVB0cihyZWdUMCwgQWRkcmVzcyhzdGFja1Bv
aW50ZXJSZWdpc3RlciwgT0JKRUNUX09GRlNFVE9GKEFyZ0xpc3QsIG1fYXJnQ291bnQpKSk7Ci0K
LSAgICAvLyBDYWxjdWxhdGUgdGhlIHN0YXJ0IG9mIHRoZSBjYWxsZnJhbWUgaGVhZGVyLCBhbmQg
c3RvcmUgaW4gcmVnVDEKLSAgICBtb3ZlKGNhbGxGcmFtZVJlZ2lzdGVyLCByZWdUMSk7Ci0gICAg
c3ViMzIoSW1tMzIoUmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJTaXplICogKGludDMyX3Qp
c2l6ZW9mKFJlZ2lzdGVyKSksIHJlZ1QxKTsKLQotICAgIC8vIENhbGN1bGF0ZSBzdGFydCBvZiBh
cmd1bWVudHMgYXMgY2FsbGZyYW1lIGhlYWRlciAtIHNpemVvZihSZWdpc3RlcikgKiBhcmdjb3Vu
dCAocmVnVDEpCi0gICAgbXVsMzIoSW1tMzIoc2l6ZW9mKFJlZ2lzdGVyKSksIHJlZ1QwLCByZWdU
MCk7Ci0gICAgc3ViUHRyKHJlZ1QwLCByZWdUMSk7Ci0KLSAgICAvLyBwdXNoIHBvaW50ZXIgdG8g
YXJndW1lbnRzCi0gICAgc3RvcmVQdHIocmVnVDEsIEFkZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0
ZXIsIE9CSkVDVF9PRkZTRVRPRihBcmdMaXN0LCBtX2FyZ3MpKSk7Ci0KLSAgICAvLyBBcmd1bWVu
dCBwYXNzaW5nIG1ldGhvZDoKLSAgICAvLyByMCAtIHBvaW50cyB0byByZXR1cm4gdmFsdWUKLSAg
ICAvLyByMSAtIGNhbGxGcmFtZQotICAgIC8vIHIyIC0gY2FsbGVlCi0gICAgLy8gc3RhY2s6IHRo
aXMoSlNWYWx1ZSkgYW5kIGEgcG9pbnRlciB0byBBcmdMaXN0Ci0KLSNpZiBPUyhXSU5DRSkKLSAg
ICAvLyBTZXR1cCBhcmc0OgotICAgIHB1c2goc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwotCi0gICAg
Ly8gU2V0dXAgYXJnMzoKLSAgICAvLyByZWdUMSBjdXJyZW50bHkgcG9pbnRzIHRvIHRoZSBmaXJz
dCBhcmd1bWVudCwgcmVnVDEtc2l6ZW9mKFJlZ2lzdGVyKSBwb2ludHMgdG8gJ3RoaXMnCi0gICAg
bG9hZDMyKEFkZHJlc3MocmVnVDEsIC0oaW50MzJfdClzaXplb2Yodm9pZCopICogMiksIEFSTVJl
Z2lzdGVyczo6cjMpOwotICAgIHB1c2goQVJNUmVnaXN0ZXJzOjpyMyk7Ci0gICAgbG9hZDMyKEFk
ZHJlc3MocmVnVDEsIC0oaW50MzJfdClzaXplb2Yodm9pZCopKSwgcmVnVDMpOwotICAgIHN0b3Jl
UHRyKHJlZ1QzLCBBZGRyZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVyKSk7Ci0KLSAgICAvLyBTZXR1
cCBhcmcyOgotICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKFJlZ2lzdGVyRmlsZTo6
Q2FsbGVlLCByZWdUMik7Ci0KLSAgICAvLyBTZXR1cCBhcmcxOgotICAgIG1vdmUoY2FsbEZyYW1l
UmVnaXN0ZXIsIHJlZ1QxKTsKLQotICAgIC8vIFNldHVwIGFyZzA6Ci0gICAgbW92ZShzdGFja1Bv
aW50ZXJSZWdpc3RlciwgcmVnVDApOwotCi0gICAgY2FsbChBZGRyZXNzKHJlZ1QyLCBPQkpFQ1Rf
T0ZGU0VUT0YoSlNGdW5jdGlvbiwgbV9kYXRhKSkpOwotCi0gICAgbG9hZDMyKEFkZHJlc3Moc3Rh
Y2tQb2ludGVyUmVnaXN0ZXIsIDApLCByZWdUMCk7Ci0gICAgbG9hZDMyKEFkZHJlc3Moc3RhY2tQ
b2ludGVyUmVnaXN0ZXIsIDQpLCByZWdUMSk7Ci0KLSAgICBhZGRQdHIoSW1tMzIoc2l6ZW9mKEFy
Z0xpc3QpICsgOCksIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKLSNlbHNlIC8vIE9TKFdJTkNFKQot
ICAgIG1vdmUoc3RhY2tQb2ludGVyUmVnaXN0ZXIsIHJlZ1QzKTsKLSAgICBzdWJQdHIoSW1tMzIo
OCksIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKLSAgICBtb3ZlKHN0YWNrUG9pbnRlclJlZ2lzdGVy
LCByZWdUMCk7Ci0gICAgc3ViUHRyKEltbTMyKDggKyA0ICsgNCAvKiBwYWRkaW5nICovKSwgc3Rh
Y2tQb2ludGVyUmVnaXN0ZXIpOwotCi0gICAgLy8gU2V0dXAgYXJnNDoKLSAgICBzdG9yZVB0cihy
ZWdUMywgQWRkcmVzcyhzdGFja1BvaW50ZXJSZWdpc3RlciwgOCkpOwotCi0gICAgLy8gU2V0dXAg
YXJnMzoKLSAgICAvLyByZWdUMSBjdXJyZW50bHkgcG9pbnRzIHRvIHRoZSBmaXJzdCBhcmd1bWVu
dCwgcmVnVDEtc2l6ZW9mKFJlZ2lzdGVyKSBwb2ludHMgdG8gJ3RoaXMnCi0gICAgbG9hZDMyKEFk
ZHJlc3MocmVnVDEsIC0oaW50MzJfdClzaXplb2Yodm9pZCopICogMiksIHJlZ1QzKTsKLSAgICBz
dG9yZVB0cihyZWdUMywgQWRkcmVzcyhzdGFja1BvaW50ZXJSZWdpc3RlciwgMCkpOwotICAgIGxv
YWQzMihBZGRyZXNzKHJlZ1QxLCAtKGludDMyX3Qpc2l6ZW9mKHZvaWQqKSksIHJlZ1QzKTsKLSAg
ICBzdG9yZVB0cihyZWdUMywgQWRkcmVzcyhzdGFja1BvaW50ZXJSZWdpc3RlciwgNCkpOwotCi0g
ICAgLy8gU2V0dXAgYXJnMjoKLSAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihSZWdp
c3RlckZpbGU6OkNhbGxlZSwgcmVnVDIpOwotCi0gICAgLy8gU2V0dXAgYXJnMToKLSAgICBtb3Zl
KGNhbGxGcmFtZVJlZ2lzdGVyLCByZWdUMSk7Ci0KLSAgICBjYWxsKEFkZHJlc3MocmVnVDIsIE9C
SkVDVF9PRkZTRVRPRihKU0Z1bmN0aW9uLCBtX2RhdGEpKSk7Ci0KLSAgICAvLyBMb2FkIHJldHVy
biB2YWx1ZQotICAgIGxvYWQzMihBZGRyZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCAxNiksIHJl
Z1QwKTsKLSAgICBsb2FkMzIoQWRkcmVzcyhzdGFja1BvaW50ZXJSZWdpc3RlciwgMjApLCByZWdU
MSk7Ci0KLSAgICBhZGRQdHIoSW1tMzIoc2l6ZW9mKEFyZ0xpc3QpICsgMTYgKyA4KSwgc3RhY2tQ
b2ludGVyUmVnaXN0ZXIpOwotI2VuZGlmIC8vIE9TKFdJTkNFKQotCi0jZW5kaWYKLQotICAgIC8v
IENoZWNrIGZvciBhbiBleGNlcHRpb24KLSAgICBtb3ZlKEltbVB0cigmZ2xvYmFsRGF0YS0+ZXhj
ZXB0aW9uKSwgcmVnVDIpOwotICAgIEp1bXAgc2F3RXhjZXB0aW9uID0gYnJhbmNoMzIoTm90RXF1
YWwsIHRhZ0ZvcigwLCByZWdUMiksIEltbTMyKEpTVmFsdWU6OkVtcHR5VmFsdWVUYWcpKTsKLQot
ICAgIC8vIEdyYWIgdGhlIHJldHVybiBhZGRyZXNzLgotICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1l
SGVhZGVyUHRyKFJlZ2lzdGVyRmlsZTo6UmV0dXJuUEMsIHJlZ1QzKTsKLSAgICAKLSAgICAvLyBS
ZXN0b3JlIG91ciBjYWxsZXIncyAiciIuCi0gICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQ
dHIoUmVnaXN0ZXJGaWxlOjpDYWxsZXJGcmFtZSwgY2FsbEZyYW1lUmVnaXN0ZXIpOwotICAgIAot
ICAgIC8vIFJldHVybi4KLSAgICByZXN0b3JlUmV0dXJuQWRkcmVzc0JlZm9yZVJldHVybihyZWdU
Myk7Ci0gICAgcmV0KCk7Ci0KLSAgICAvLyBIYW5kbGUgYW4gZXhjZXB0aW9uCi0gICAgc2F3RXhj
ZXB0aW9uLmxpbmsodGhpcyk7Ci0gICAgLy8gR3JhYiB0aGUgcmV0dXJuIGFkZHJlc3MuCi0gICAg
ZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoUmVnaXN0ZXJGaWxlOjpSZXR1cm5QQywgcmVn
VDEpOwotICAgIG1vdmUoSW1tUHRyKCZnbG9iYWxEYXRhLT5leGNlcHRpb25Mb2NhdGlvbiksIHJl
Z1QyKTsKLSAgICBzdG9yZVB0cihyZWdUMSwgcmVnVDIpOwotICAgIG1vdmUoSW1tUHRyKEZ1bmN0
aW9uUHRyKGN0aVZNVGhyb3dUcmFtcG9saW5lKS52YWx1ZSgpKSwgcmVnVDIpOwotICAgIGVtaXRH
ZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKFJlZ2lzdGVyRmlsZTo6Q2FsbGVyRnJhbWUsIGNhbGxG
cmFtZVJlZ2lzdGVyKTsKLSAgICBwb2tlKGNhbGxGcmFtZVJlZ2lzdGVyLCBPQkpFQ1RfT0ZGU0VU
T0Yoc3RydWN0IEpJVFN0YWNrRnJhbWUsIGNhbGxGcmFtZSkgLyBzaXplb2YgKHZvaWQqKSk7Ci0g
ICAgcmVzdG9yZVJldHVybkFkZHJlc3NCZWZvcmVSZXR1cm4ocmVnVDIpOwotICAgIHJldCgpOwot
Ci0jZWxpZiBFTkFCTEUoSklUX09QVElNSVpFX05BVElWRV9DQUxMKQotI2Vycm9yICJKSVRfT1BU
SU1JWkVfTkFUSVZFX0NBTEwgbm90IHlldCBzdXBwb3J0ZWQgb24gdGhpcyBwbGF0Zm9ybS4iCi0j
ZWxzZQotICAgIGJyZWFrcG9pbnQoKTsKLSNlbmRpZgotICAgIAotI2lmIEVOQUJMRShKSVRfT1BU
SU1JWkVfUFJPUEVSVFlfQUNDRVNTKQotICAgIENhbGwgc3RyaW5nX2ZhaWx1cmVDYXNlczFDYWxs
ID0gbWFrZVRhaWxSZWN1cnNpdmVDYWxsKHN0cmluZ19mYWlsdXJlQ2FzZXMxKTsKLSAgICBDYWxs
IHN0cmluZ19mYWlsdXJlQ2FzZXMyQ2FsbCA9IG1ha2VUYWlsUmVjdXJzaXZlQ2FsbChzdHJpbmdf
ZmFpbHVyZUNhc2VzMik7Ci0gICAgQ2FsbCBzdHJpbmdfZmFpbHVyZUNhc2VzM0NhbGwgPSBtYWtl
VGFpbFJlY3Vyc2l2ZUNhbGwoc3RyaW5nX2ZhaWx1cmVDYXNlczMpOwotI2VuZGlmCi0KLSAgICAv
LyBBbGwgdHJhbXBvbGluZXMgY29uc3RydWN0ZWQhIGNvcHkgdGhlIGNvZGUsIGxpbmsgdXAgY2Fs
bHMsIGFuZCBzZXQgdGhlIHBvaW50ZXJzIG9uIHRoZSBNYWNoaW5lIG9iamVjdC4KLSAgICBMaW5r
QnVmZmVyIHBhdGNoQnVmZmVyKHRoaXMsIG1fZ2xvYmFsRGF0YS0+ZXhlY3V0YWJsZUFsbG9jYXRv
ci5wb29sRm9yU2l6ZShtX2Fzc2VtYmxlci5zaXplKCkpKTsKLQotI2lmIEVOQUJMRShKSVRfT1BU
SU1JWkVfUFJPUEVSVFlfQUNDRVNTKQotICAgIHBhdGNoQnVmZmVyLmxpbmsoc3RyaW5nX2ZhaWx1
cmVDYXNlczFDYWxsLCBGdW5jdGlvblB0cihjdGlfb3BfZ2V0X2J5X2lkX3N0cmluZ19mYWlsKSk7
Ci0gICAgcGF0Y2hCdWZmZXIubGluayhzdHJpbmdfZmFpbHVyZUNhc2VzMkNhbGwsIEZ1bmN0aW9u
UHRyKGN0aV9vcF9nZXRfYnlfaWRfc3RyaW5nX2ZhaWwpKTsKLSAgICBwYXRjaEJ1ZmZlci5saW5r
KHN0cmluZ19mYWlsdXJlQ2FzZXMzQ2FsbCwgRnVuY3Rpb25QdHIoY3RpX29wX2dldF9ieV9pZF9z
dHJpbmdfZmFpbCkpOwotI2VuZGlmCi0gICAgcGF0Y2hCdWZmZXIubGluayhjYWxsQXJpdHlDaGVj
azEsIEZ1bmN0aW9uUHRyKGN0aV9vcF9jYWxsX2FyaXR5Q2hlY2spKTsKLSAgICBwYXRjaEJ1ZmZl
ci5saW5rKGNhbGxKU0Z1bmN0aW9uMSwgRnVuY3Rpb25QdHIoY3RpX29wX2NhbGxfSlNGdW5jdGlv
bikpOwotI2lmIEVOQUJMRShKSVRfT1BUSU1JWkVfQ0FMTCkKLSAgICBwYXRjaEJ1ZmZlci5saW5r
KGNhbGxBcml0eUNoZWNrMiwgRnVuY3Rpb25QdHIoY3RpX29wX2NhbGxfYXJpdHlDaGVjaykpOwot
ICAgIHBhdGNoQnVmZmVyLmxpbmsoY2FsbEpTRnVuY3Rpb24yLCBGdW5jdGlvblB0cihjdGlfb3Bf
Y2FsbF9KU0Z1bmN0aW9uKSk7Ci0gICAgcGF0Y2hCdWZmZXIubGluayhjYWxsTGF6eUxpbmtDYWxs
LCBGdW5jdGlvblB0cihjdGlfdm1fbGF6eUxpbmtDYWxsKSk7Ci0jZW5kaWYKLQotICAgIENvZGVS
ZWYgZmluYWxDb2RlID0gcGF0Y2hCdWZmZXIuZmluYWxpemVDb2RlKCk7Ci0gICAgKmV4ZWN1dGFi
bGVQb29sID0gZmluYWxDb2RlLm1fZXhlY3V0YWJsZVBvb2w7Ci0KLSAgICB0cmFtcG9saW5lcy0+
Y3RpVmlydHVhbENhbGwgPSB0cmFtcG9saW5lQXQoZmluYWxDb2RlLCB2aXJ0dWFsQ2FsbEJlZ2lu
KTsKLSAgICB0cmFtcG9saW5lcy0+Y3RpTmF0aXZlQ2FsbFRodW5rID0gYWRvcHRSZWYobmV3IE5h
dGl2ZUV4ZWN1dGFibGUoSklUQ29kZShKSVRDb2RlOjpIb3N0RnVuY3Rpb24odHJhbXBvbGluZUF0
KGZpbmFsQ29kZSwgbmF0aXZlQ2FsbFRodW5rKSkpKSk7Ci0jaWYgRU5BQkxFKEpJVF9PUFRJTUla
RV9QUk9QRVJUWV9BQ0NFU1MpCi0gICAgdHJhbXBvbGluZXMtPmN0aVN0cmluZ0xlbmd0aFRyYW1w
b2xpbmUgPSB0cmFtcG9saW5lQXQoZmluYWxDb2RlLCBzdHJpbmdMZW5ndGhCZWdpbik7Ci0jZWxz
ZQotICAgIFVOVVNFRF9QQVJBTShjdGlTdHJpbmdMZW5ndGhUcmFtcG9saW5lKTsKLSNlbmRpZgot
I2lmIEVOQUJMRShKSVRfT1BUSU1JWkVfQ0FMTCkKLSAgICB0cmFtcG9saW5lcy0+Y3RpVmlydHVh
bENhbGxMaW5rID0gdHJhbXBvbGluZUF0KGZpbmFsQ29kZSwgdmlydHVhbENhbGxMaW5rQmVnaW4p
OwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oY3RpVmlydHVhbENhbGxMaW5rKTsKLSNlbmRpZgot
I2lmIEVOQUJMRShKSVRfT1BUSU1JWkVfTU9EKQotICAgIHRyYW1wb2xpbmVzLT5jdGlTb2Z0TW9k
dWxvID0gdHJhbXBvbGluZUF0KGZpbmFsQ29kZSwgc29mdE1vZEJlZ2luKTsKLSNlbmRpZgotfQot
Ci12b2lkIEpJVDo6ZW1pdF9vcF9tb3YoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
LXsKLSAgICB1bnNpZ25lZCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwot
ICAgIHVuc2lnbmVkIHNyYyA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7Ci0KLSAg
ICBpZiAobV9jb2RlQmxvY2stPmlzQ29uc3RhbnRSZWdpc3RlckluZGV4KHNyYykpCi0gICAgICAg
IGVtaXRTdG9yZShkc3QsIGdldENvbnN0YW50T3BlcmFuZChzcmMpKTsKLSAgICBlbHNlIHsKLSAg
ICAgICAgZW1pdExvYWQoc3JjLCByZWdUMSwgcmVnVDApOwotICAgICAgICBlbWl0U3RvcmUoZHN0
LCByZWdUMSwgcmVnVDApOwotICAgICAgICBtYXAobV9ieXRlY29kZUluZGV4ICsgT1BDT0RFX0xF
TkdUSChvcF9tb3YpLCBkc3QsIHJlZ1QxLCByZWdUMCk7Ci0gICAgfQotfQotCi12b2lkIEpJVDo6
ZW1pdF9vcF9lbmQoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBpZiAo
bV9jb2RlQmxvY2stPm5lZWRzRnVsbFNjb3BlQ2hhaW4oKSkKLSAgICAgICAgSklUU3R1YkNhbGwo
dGhpcywgY3RpX29wX2VuZCkuY2FsbCgpOwotICAgIEFTU0VSVChyZXR1cm5WYWx1ZVJlZ2lzdGVy
ICE9IGNhbGxGcmFtZVJlZ2lzdGVyKTsKLSAgICBlbWl0TG9hZChjdXJyZW50SW5zdHJ1Y3Rpb25b
MV0udS5vcGVyYW5kLCByZWdUMSwgcmVnVDApOwotICAgIHJlc3RvcmVSZXR1cm5BZGRyZXNzQmVm
b3JlUmV0dXJuKEFkZHJlc3MoY2FsbEZyYW1lUmVnaXN0ZXIsIFJlZ2lzdGVyRmlsZTo6UmV0dXJu
UEMgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpKSk7Ci0gICAgcmV0KCk7Ci19
Ci0KLXZvaWQgSklUOjplbWl0X29wX2ptcChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQotewotICAgIHVuc2lnbmVkIHRhcmdldCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJh
bmQ7Ci0gICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29w
X2xvb3BfaWZfbGVzc2VxKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAg
dW5zaWduZWQgb3AxID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKLSAgICB1bnNp
Z25lZCBvcDIgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwotICAgIHVuc2lnbmVk
IHRhcmdldCA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7Ci0KLSAgICBlbWl0VGlt
ZW91dENoZWNrKCk7Ci0KLSAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbW1lZGlhdGVJbnQob3Ax
KSkgewotICAgICAgICBlbWl0TG9hZChvcDIsIHJlZ1QxLCByZWdUMCk7Ci0gICAgICAgIGFkZFNs
b3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMSwgSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcp
KSk7Ci0gICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoR3JlYXRlclRoYW5PckVxdWFsLCByZWdUMCwg
SW1tMzIoZ2V0Q29uc3RhbnRPcGVyYW5kKG9wMSkuYXNJbnQzMigpKSksIHRhcmdldCk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbW1lZGlhdGVJ
bnQob3AyKSkgewotICAgICAgICBlbWl0TG9hZChvcDEsIHJlZ1QxLCByZWdUMCk7Ci0gICAgICAg
IGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMSwgSW1tMzIoSlNWYWx1ZTo6SW50
MzJUYWcpKSk7Ci0gICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoTGVzc1RoYW5PckVxdWFsLCByZWdU
MCwgSW1tMzIoZ2V0Q29uc3RhbnRPcGVyYW5kKG9wMikuYXNJbnQzMigpKSksIHRhcmdldCk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBlbWl0TG9hZDIob3AxLCByZWdUMSwgcmVnVDAs
IG9wMiwgcmVnVDMsIHJlZ1QyKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwg
cmVnVDEsIEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSkpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5j
aDMyKE5vdEVxdWFsLCByZWdUMywgSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpKSk7Ci0gICAgYWRk
SnVtcChicmFuY2gzMihMZXNzVGhhbk9yRXF1YWwsIHJlZ1QwLCByZWdUMiksIHRhcmdldCk7Ci19
Ci0KLXZvaWQgSklUOjplbWl0U2xvd19vcF9sb29wX2lmX2xlc3NlcShJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQot
ewotICAgIHVuc2lnbmVkIG9wMSA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7Ci0g
ICAgdW5zaWduZWQgb3AyID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKLSAgICB1
bnNpZ25lZCB0YXJnZXQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwotCi0gICAg
aWYgKCFpc09wZXJhbmRDb25zdGFudEltbWVkaWF0ZUludChvcDEpICYmICFpc09wZXJhbmRDb25z
dGFudEltbWVkaWF0ZUludChvcDIpKQotICAgICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIGlu
dDMyIGNoZWNrCi0gICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyBpbnQzMiBjaGVjawotCi0gICAg
SklUU3R1YkNhbGwgc3R1YkNhbGwodGhpcywgY3RpX29wX2xvb3BfaWZfbGVzc2VxKTsKLSAgICBz
dHViQ2FsbC5hZGRBcmd1bWVudChvcDEpOwotICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KG9wMik7
Ci0gICAgc3R1YkNhbGwuY2FsbCgpOwotICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3Qz
MihOb25aZXJvLCByZWdUMCksIHRhcmdldCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX25ld19v
YmplY3QoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBKSVRTdHViQ2Fs
bCh0aGlzLCBjdGlfb3BfbmV3X29iamVjdCkuY2FsbChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5v
cGVyYW5kKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfaW5zdGFuY2VvZihJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQotewotICAgIHVuc2lnbmVkIGRzdCA9IGN1cnJlbnRJbnN0cnVj
dGlvblsxXS51Lm9wZXJhbmQ7Ci0gICAgdW5zaWduZWQgdmFsdWUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b25bMl0udS5vcGVyYW5kOwotICAgIHVuc2lnbmVkIGJhc2VWYWwgPSBjdXJyZW50SW5zdHJ1Y3Rp
b25bM10udS5vcGVyYW5kOwotICAgIHVuc2lnbmVkIHByb3RvID0gY3VycmVudEluc3RydWN0aW9u
WzRdLnUub3BlcmFuZDsKLQotICAgIC8vIExvYWQgdGhlIG9wZXJhbmRzIGludG8gcmVnaXN0ZXJz
LgotICAgIC8vIFdlIHVzZSByZWdUMCBmb3IgYmFzZVZhbCBzaW5jZSB3ZSB3aWxsIGJlIGRvbmUg
d2l0aCB0aGlzIGZpcnN0LCBhbmQgd2UgY2FuIHRoZW4gdXNlIGl0IGZvciB0aGUgcmVzdWx0Lgot
ICAgIGVtaXRMb2FkUGF5bG9hZCh2YWx1ZSwgcmVnVDIpOwotICAgIGVtaXRMb2FkUGF5bG9hZChi
YXNlVmFsLCByZWdUMCk7Ci0gICAgZW1pdExvYWRQYXlsb2FkKHByb3RvLCByZWdUMSk7Ci0KLSAg
ICAvLyBDaGVjayB0aGF0IHZhbHVlLCBiYXNlVmFsLCBhbmQgcHJvdG8gYXJlIGNlbGxzLgotICAg
IGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbCh2YWx1ZSk7Ci0gICAgZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SlNDZWxsKGJhc2VWYWwpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChw
cm90byk7Ci0KLSAgICAvLyBDaGVjayB0aGF0IGJhc2VWYWwgJ0ltcGxlbWVudHNEZWZhdWx0SGFz
SW5zdGFuY2UnLgotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgT0JKRUNUX09GRlNFVE9GKEpT
Q2VsbCwgbV9zdHJ1Y3R1cmUpKSwgcmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3Q4
KFplcm8sIEFkZHJlc3MocmVnVDAsIE9CSkVDVF9PRkZTRVRPRihTdHJ1Y3R1cmUsIG1fdHlwZUlu
Zm8ubV9mbGFncykpLCBJbW0zMihJbXBsZW1lbnRzRGVmYXVsdEhhc0luc3RhbmNlKSkpOwotCi0g
ICAgLy8gT3B0aW1pc3RpY2FsbHkgbG9hZCB0aGUgcmVzdWx0IHRydWUsIGFuZCBzdGFydCBsb29w
aW5nLgotICAgIC8vIEluaXRpYWxseSwgcmVnVDEgc3RpbGwgY29udGFpbnMgcHJvdG8gYW5kIHJl
Z1QyIHN0aWxsIGNvbnRhaW5zIHZhbHVlLgotICAgIC8vIEFzIHdlIGxvb3AgcmVnVDIgd2lsbCBi
ZSB1cGRhdGVkIHdpdGggaXRzIHByb3RvdHlwZSwgcmVjdXJzaXZlbHkgd2Fsa2luZyB0aGUgcHJv
dG90eXBlIGNoYWluLgotICAgIG1vdmUoSW1tMzIoSlNWYWx1ZTo6VHJ1ZVRhZyksIHJlZ1QwKTsK
LSAgICBMYWJlbCBsb29wKHRoaXMpOwotCi0gICAgLy8gTG9hZCB0aGUgcHJvdG90eXBlIG9mIHRo
ZSBjZWxsIGluIHJlZ1QyLiAgSWYgdGhpcyBpcyBlcXVhbCB0byByZWdUMSAtIFdJTiEKLSAgICAv
LyBPdGhlcndpc2UsIGNoZWNrIGlmIHdlJ3ZlIGhpdCBudWxsIC0gaWYgd2UgaGF2ZSB0aGVuIGRy
b3Agb3V0IG9mIHRoZSBsb29wLCBpZiBub3QgZ28gYWdhaW4uCi0gICAgbG9hZFB0cihBZGRyZXNz
KHJlZ1QyLCBPQkpFQ1RfT0ZGU0VUT0YoSlNDZWxsLCBtX3N0cnVjdHVyZSkpLCByZWdUMik7Ci0g
ICAgbG9hZDMyKEFkZHJlc3MocmVnVDIsIE9CSkVDVF9PRkZTRVRPRihTdHJ1Y3R1cmUsIG1fcHJv
dG90eXBlKSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5wYXlsb2FkKSksIHJl
Z1QyKTsKLSAgICBKdW1wIGlzSW5zdGFuY2UgPSBicmFuY2hQdHIoRXF1YWwsIHJlZ1QyLCByZWdU
MSk7Ci0gICAgYnJhbmNoVGVzdDMyKE5vblplcm8sIHJlZ1QyKS5saW5rVG8obG9vcCwgdGhpcyk7
Ci0KLSAgICAvLyBXZSBnZXQgaGVyZSBlaXRoZXIgYnkgZHJvcHBpbmcgb3V0IG9mIHRoZSBsb29w
LCBvciBpZiB2YWx1ZSB3YXMgbm90IGFuIE9iamVjdC4gIFJlc3VsdCBpcyBmYWxzZS4KLSAgICBt
b3ZlKEltbTMyKEpTVmFsdWU6OkZhbHNlVGFnKSwgcmVnVDApOwotCi0gICAgLy8gaXNJbnN0YW5j
ZSBqdW1wcyByaWdodCBkb3duIHRvIGhlcmUsIHRvIHNraXAgc2V0dGluZyB0aGUgcmVzdWx0IHRv
IGZhbHNlIChpdCBoYXMgYWxyZWFkeSBzZXQgdHJ1ZSkuCi0gICAgaXNJbnN0YW5jZS5saW5rKHRo
aXMpOwotICAgIGVtaXRTdG9yZUJvb2woZHN0LCByZWdUMCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0
U2xvd19vcF9pbnN0YW5jZW9mKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0gICAgdW5zaWduZWQgZHN0ID0g
Y3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKLSAgICB1bnNpZ25lZCB2YWx1ZSA9IGN1
cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7Ci0gICAgdW5zaWduZWQgYmFzZVZhbCA9IGN1
cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7Ci0gICAgdW5zaWduZWQgcHJvdG8gPSBjdXJy
ZW50SW5zdHJ1Y3Rpb25bNF0udS5vcGVyYW5kOwotCi0gICAgbGlua1Nsb3dDYXNlSWZOb3RKU0Nl
bGwoaXRlciwgdmFsdWUpOwotICAgIGxpbmtTbG93Q2FzZUlmTm90SlNDZWxsKGl0ZXIsIGJhc2VW
YWwpOwotICAgIGxpbmtTbG93Q2FzZUlmTm90SlNDZWxsKGl0ZXIsIHByb3RvKTsKLSAgICBsaW5r
U2xvd0Nhc2UoaXRlcik7Ci0KLSAgICBKSVRTdHViQ2FsbCBzdHViQ2FsbCh0aGlzLCBjdGlfb3Bf
aW5zdGFuY2VvZik7Ci0gICAgc3R1YkNhbGwuYWRkQXJndW1lbnQodmFsdWUpOwotICAgIHN0dWJD
YWxsLmFkZEFyZ3VtZW50KGJhc2VWYWwpOwotICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KHByb3Rv
KTsKLSAgICBzdHViQ2FsbC5jYWxsKGRzdCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX25ld19m
dW5jKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgSklUU3R1YkNhbGwg
c3R1YkNhbGwodGhpcywgY3RpX29wX25ld19mdW5jKTsKLSAgICBzdHViQ2FsbC5hZGRBcmd1bWVu
dChJbW1QdHIobV9jb2RlQmxvY2stPmZ1bmN0aW9uRGVjbChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0u
dS5vcGVyYW5kKSkpOwotICAgIHN0dWJDYWxsLmNhbGwoY3VycmVudEluc3RydWN0aW9uWzFdLnUu
b3BlcmFuZCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX2dldF9nbG9iYWxfdmFyKEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgaW50IGRzdCA9IGN1cnJlbnRJbnN0cnVj
dGlvblsxXS51Lm9wZXJhbmQ7Ci0gICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHN0
YXRpY19jYXN0PEpTR2xvYmFsT2JqZWN0Kj4oY3VycmVudEluc3RydWN0aW9uWzJdLnUuanNDZWxs
KTsKLSAgICBBU1NFUlQoZ2xvYmFsT2JqZWN0LT5pc0dsb2JhbE9iamVjdCgpKTsKLSAgICBpbnQg
aW5kZXggPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwotCi0gICAgbG9hZFB0cigm
Z2xvYmFsT2JqZWN0LT5kKCktPnJlZ2lzdGVycywgcmVnVDIpOwotCi0gICAgZW1pdExvYWQoaW5k
ZXgsIHJlZ1QxLCByZWdUMCwgcmVnVDIpOwotICAgIGVtaXRTdG9yZShkc3QsIHJlZ1QxLCByZWdU
MCk7Ci0gICAgbWFwKG1fYnl0ZWNvZGVJbmRleCArIE9QQ09ERV9MRU5HVEgob3BfZ2V0X2dsb2Jh
bF92YXIpLCBkc3QsIHJlZ1QxLCByZWdUMCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX3B1dF9n
bG9iYWxfdmFyKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHN0YXRpY19jYXN0PEpTR2xvYmFsT2JqZWN0Kj4oY3Vy
cmVudEluc3RydWN0aW9uWzFdLnUuanNDZWxsKTsKLSAgICBBU1NFUlQoZ2xvYmFsT2JqZWN0LT5p
c0dsb2JhbE9iamVjdCgpKTsKLSAgICBpbnQgaW5kZXggPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0u
dS5vcGVyYW5kOwotICAgIGludCB2YWx1ZSA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJh
bmQ7Ci0KLSAgICBlbWl0TG9hZCh2YWx1ZSwgcmVnVDEsIHJlZ1QwKTsKLQotICAgIGxvYWRQdHIo
Jmdsb2JhbE9iamVjdC0+ZCgpLT5yZWdpc3RlcnMsIHJlZ1QyKTsKLSAgICBlbWl0U3RvcmUoaW5k
ZXgsIHJlZ1QxLCByZWdUMCwgcmVnVDIpOwotICAgIG1hcChtX2J5dGVjb2RlSW5kZXggKyBPUENP
REVfTEVOR1RIKG9wX3B1dF9nbG9iYWxfdmFyKSwgdmFsdWUsIHJlZ1QxLCByZWdUMCk7Ci19Ci0K
LXZvaWQgSklUOjplbWl0X29wX2dldF9zY29wZWRfdmFyKEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCi17Ci0gICAgaW50IGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJh
bmQ7Ci0gICAgaW50IGluZGV4ID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKLSAg
ICBpbnQgc2tpcCA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQgKyBtX2NvZGVCbG9j
ay0+bmVlZHNGdWxsU2NvcGVDaGFpbigpOwotCi0gICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFk
ZXJQdHIoUmVnaXN0ZXJGaWxlOjpTY29wZUNoYWluLCByZWdUMik7Ci0gICAgd2hpbGUgKHNraXAt
LSkKLSAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBPQkpFQ1RfT0ZGU0VUT0YoU2NvcGVD
aGFpbk5vZGUsIG5leHQpKSwgcmVnVDIpOwotCi0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBP
QkpFQ1RfT0ZGU0VUT0YoU2NvcGVDaGFpbk5vZGUsIG9iamVjdCkpLCByZWdUMik7Ci0gICAgbG9h
ZFB0cihBZGRyZXNzKHJlZ1QyLCBPQkpFQ1RfT0ZGU0VUT0YoSlNWYXJpYWJsZU9iamVjdCwgZCkp
LCByZWdUMik7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBPQkpFQ1RfT0ZGU0VUT0YoSlNW
YXJpYWJsZU9iamVjdDo6SlNWYXJpYWJsZU9iamVjdERhdGEsIHJlZ2lzdGVycykpLCByZWdUMik7
Ci0KLSAgICBlbWl0TG9hZChpbmRleCwgcmVnVDEsIHJlZ1QwLCByZWdUMik7Ci0gICAgZW1pdFN0
b3JlKGRzdCwgcmVnVDEsIHJlZ1QwKTsKLSAgICBtYXAobV9ieXRlY29kZUluZGV4ICsgT1BDT0RF
X0xFTkdUSChvcF9nZXRfc2NvcGVkX3ZhciksIGRzdCwgcmVnVDEsIHJlZ1QwKTsKLX0KLQotdm9p
ZCBKSVQ6OmVtaXRfb3BfcHV0X3Njb3BlZF92YXIoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKLXsKLSAgICBpbnQgaW5kZXggPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5k
OwotICAgIGludCBza2lwID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCArIG1fY29k
ZUJsb2NrLT5uZWVkc0Z1bGxTY29wZUNoYWluKCk7Ci0gICAgaW50IHZhbHVlID0gY3VycmVudElu
c3RydWN0aW9uWzNdLnUub3BlcmFuZDsKLQotICAgIGVtaXRMb2FkKHZhbHVlLCByZWdUMSwgcmVn
VDApOwotCi0gICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoUmVnaXN0ZXJGaWxlOjpT
Y29wZUNoYWluLCByZWdUMik7Ci0gICAgd2hpbGUgKHNraXAtLSkKLSAgICAgICAgbG9hZFB0cihB
ZGRyZXNzKHJlZ1QyLCBPQkpFQ1RfT0ZGU0VUT0YoU2NvcGVDaGFpbk5vZGUsIG5leHQpKSwgcmVn
VDIpOwotCi0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBPQkpFQ1RfT0ZGU0VUT0YoU2NvcGVD
aGFpbk5vZGUsIG9iamVjdCkpLCByZWdUMik7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBP
QkpFQ1RfT0ZGU0VUT0YoSlNWYXJpYWJsZU9iamVjdCwgZCkpLCByZWdUMik7Ci0gICAgbG9hZFB0
cihBZGRyZXNzKHJlZ1QyLCBPQkpFQ1RfT0ZGU0VUT0YoSlNWYXJpYWJsZU9iamVjdDo6SlNWYXJp
YWJsZU9iamVjdERhdGEsIHJlZ2lzdGVycykpLCByZWdUMik7Ci0KLSAgICBlbWl0U3RvcmUoaW5k
ZXgsIHJlZ1QxLCByZWdUMCwgcmVnVDIpOwotICAgIG1hcChtX2J5dGVjb2RlSW5kZXggKyBPUENP
REVfTEVOR1RIKG9wX3B1dF9zY29wZWRfdmFyKSwgdmFsdWUsIHJlZ1QxLCByZWdUMCk7Ci19Ci0K
LXZvaWQgSklUOjplbWl0X29wX3RlYXJfb2ZmX2FjdGl2YXRpb24oSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKLXsKLSAgICBKSVRTdHViQ2FsbCBzdHViQ2FsbCh0aGlzLCBjdGlfb3Bf
dGVhcl9vZmZfYWN0aXZhdGlvbik7Ci0gICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoY3VycmVudElu
c3RydWN0aW9uWzFdLnUub3BlcmFuZCk7Ci0gICAgc3R1YkNhbGwuY2FsbCgpOwotfQotCi12b2lk
IEpJVDo6ZW1pdF9vcF90ZWFyX29mZl9hcmd1bWVudHMoSW5zdHJ1Y3Rpb24qKQotewotICAgIEpJ
VFN0dWJDYWxsKHRoaXMsIGN0aV9vcF90ZWFyX29mZl9hcmd1bWVudHMpLmNhbGwoKTsKLX0KLQot
dm9pZCBKSVQ6OmVtaXRfb3BfbmV3X2FycmF5KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCi17Ci0gICAgSklUU3R1YkNhbGwgc3R1YkNhbGwodGhpcywgY3RpX29wX25ld19hcnJheSk7
Ci0gICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoSW1tMzIoY3VycmVudEluc3RydWN0aW9uWzJdLnUu
b3BlcmFuZCkpOwotICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KEltbTMyKGN1cnJlbnRJbnN0cnVj
dGlvblszXS51Lm9wZXJhbmQpKTsKLSAgICBzdHViQ2FsbC5jYWxsKGN1cnJlbnRJbnN0cnVjdGlv
blsxXS51Lm9wZXJhbmQpOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlKEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgSklUU3R1YkNhbGwgc3R1YkNhbGwodGhp
cywgY3RpX29wX3Jlc29sdmUpOwotICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KEltbVB0cigmbV9j
b2RlQmxvY2stPmlkZW50aWZpZXIoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCkpKTsK
LSAgICBzdHViQ2FsbC5jYWxsKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpOwotfQot
Ci12b2lkIEpJVDo6ZW1pdF9vcF90b19wcmltaXRpdmUoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKLXsKLSAgICBpbnQgZHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFu
ZDsKLSAgICBpbnQgc3JjID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKLQotICAg
IGVtaXRMb2FkKHNyYywgcmVnVDEsIHJlZ1QwKTsKLQotICAgIEp1bXAgaXNJbW0gPSBicmFuY2gz
MihOb3RFcXVhbCwgcmVnVDEsIEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpKTsKLSAgICBhZGRTbG93
Q2FzZShicmFuY2hQdHIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDApLCBJbW1QdHIobV9nbG9iYWxE
YXRhLT5qc1N0cmluZ1ZQdHIpKSk7Ci0gICAgaXNJbW0ubGluayh0aGlzKTsKLQotICAgIGlmIChk
c3QgIT0gc3JjKQotICAgICAgICBlbWl0U3RvcmUoZHN0LCByZWdUMSwgcmVnVDApOwotICAgIG1h
cChtX2J5dGVjb2RlSW5kZXggKyBPUENPREVfTEVOR1RIKG9wX3RvX3ByaW1pdGl2ZSksIGRzdCwg
cmVnVDEsIHJlZ1QwKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRTbG93X29wX3RvX3ByaW1pdGl2ZShJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJiBpdGVyKQotewotICAgIGludCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5v
cGVyYW5kOwotCi0gICAgbGlua1Nsb3dDYXNlKGl0ZXIpOwotCi0gICAgSklUU3R1YkNhbGwgc3R1
YkNhbGwodGhpcywgY3RpX29wX3RvX3ByaW1pdGl2ZSk7Ci0gICAgc3R1YkNhbGwuYWRkQXJndW1l
bnQocmVnVDEsIHJlZ1QwKTsKLSAgICBzdHViQ2FsbC5jYWxsKGRzdCk7Ci19Ci0KLXZvaWQgSklU
OjplbWl0X29wX3N0cmNhdChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAg
IEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGN0aV9vcF9zdHJjYXQpOwotICAgIHN0dWJDYWxs
LmFkZEFyZ3VtZW50KEltbTMyKGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpKTsKLSAg
ICBzdHViQ2FsbC5hZGRBcmd1bWVudChJbW0zMihjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVy
YW5kKSk7Ci0gICAgc3R1YkNhbGwuY2FsbChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5k
KTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9iYXNlKEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgSklUU3R1YkNhbGwgc3R1YkNhbGwodGhpcywgY3RpX29w
X3Jlc29sdmVfYmFzZSk7Ci0gICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoSW1tUHRyKCZtX2NvZGVC
bG9jay0+aWRlbnRpZmllcihjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKSkpOwotICAg
IHN0dWJDYWxsLmNhbGwoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCk7Ci19Ci0KLXZv
aWQgSklUOjplbWl0X29wX3Jlc29sdmVfc2tpcChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQotewotICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGN0aV9vcF9yZXNvbHZlX3Nr
aXApOwotICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KEltbVB0cigmbV9jb2RlQmxvY2stPmlkZW50
aWZpZXIoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCkpKTsKLSAgICBzdHViQ2FsbC5h
ZGRBcmd1bWVudChJbW0zMihjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kICsgbV9jb2Rl
QmxvY2stPm5lZWRzRnVsbFNjb3BlQ2hhaW4oKSkpOwotICAgIHN0dWJDYWxsLmNhbGwoY3VycmVu
dEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX3Jlc29s
dmVfZ2xvYmFsKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIGJvb2wgZHluYW1pYykK
LXsKLSAgICAvLyBGSVhNRTogT3B0aW1pemUgdG8gdXNlIHBhdGNoaW5nIGluc3RlYWQgb2Ygc28g
bWFueSBtZW1vcnkgYWNjZXNzZXMuCi0KLSAgICB1bnNpZ25lZCBkc3QgPSBjdXJyZW50SW5zdHJ1
Y3Rpb25bMV0udS5vcGVyYW5kOwotICAgIHZvaWQqIGdsb2JhbE9iamVjdCA9IGN1cnJlbnRJbnN0
cnVjdGlvblsyXS51LmpzQ2VsbDsKLSAgICAKLSAgICB1bnNpZ25lZCBjdXJyZW50SW5kZXggPSBt
X2dsb2JhbFJlc29sdmVJbmZvSW5kZXgrKzsKLSAgICB2b2lkKiBzdHJ1Y3R1cmVBZGRyZXNzID0g
JihtX2NvZGVCbG9jay0+Z2xvYmFsUmVzb2x2ZUluZm8oY3VycmVudEluZGV4KS5zdHJ1Y3R1cmUp
OwotICAgIHZvaWQqIG9mZnNldEFkZHIgPSAmKG1fY29kZUJsb2NrLT5nbG9iYWxSZXNvbHZlSW5m
byhjdXJyZW50SW5kZXgpLm9mZnNldCk7Ci0KLSAgICAvLyBWZXJpZnkgc3RydWN0dXJlLgotICAg
IG1vdmUoSW1tUHRyKGdsb2JhbE9iamVjdCksIHJlZ1QwKTsKLSAgICBsb2FkUHRyKHN0cnVjdHVy
ZUFkZHJlc3MsIHJlZ1QxKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hQdHIoTm90RXF1YWwsIHJl
Z1QxLCBBZGRyZXNzKHJlZ1QwLCBPQkpFQ1RfT0ZGU0VUT0YoSlNDZWxsLCBtX3N0cnVjdHVyZSkp
KSk7Ci0KLSAgICAvLyBMb2FkIHByb3BlcnR5LgotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwg
T0JKRUNUX09GRlNFVE9GKEpTR2xvYmFsT2JqZWN0LCBtX2V4dGVybmFsU3RvcmFnZSkpLCByZWdU
Mik7Ci0gICAgbG9hZDMyKG9mZnNldEFkZHIsIHJlZ1QzKTsKLSAgICBsb2FkMzIoQmFzZUluZGV4
KHJlZ1QyLCByZWdUMywgVGltZXNFaWdodCksIHJlZ1QwKTsgLy8gcGF5bG9hZAotICAgIGxvYWQz
MihCYXNlSW5kZXgocmVnVDIsIHJlZ1QzLCBUaW1lc0VpZ2h0LCA0KSwgcmVnVDEpOyAvLyB0YWcK
LSAgICBlbWl0U3RvcmUoZHN0LCByZWdUMSwgcmVnVDApOwotICAgIG1hcChtX2J5dGVjb2RlSW5k
ZXggKyBkeW5hbWljID8gT1BDT0RFX0xFTkdUSChvcF9yZXNvbHZlX2dsb2JhbF9keW5hbWljKSA6
IE9QQ09ERV9MRU5HVEgob3BfcmVzb2x2ZV9nbG9iYWwpLCBkc3QsIHJlZ1QxLCByZWdUMCk7Ci19
Ci0KLXZvaWQgSklUOjplbWl0U2xvd19vcF9yZXNvbHZlX2dsb2JhbChJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQot
ewotICAgIHVuc2lnbmVkIGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7Ci0g
ICAgdm9pZCogZ2xvYmFsT2JqZWN0ID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUuanNDZWxsOwot
ICAgIElkZW50aWZpZXIqIGlkZW50ID0gJm1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGN1cnJlbnRJ
bnN0cnVjdGlvblszXS51Lm9wZXJhbmQpOwotCi0gICAgdW5zaWduZWQgY3VycmVudEluZGV4ID0g
bV9nbG9iYWxSZXNvbHZlSW5mb0luZGV4Kys7Ci0KLSAgICBsaW5rU2xvd0Nhc2UoaXRlcik7Ci0g
ICAgSklUU3R1YkNhbGwgc3R1YkNhbGwodGhpcywgY3RpX29wX3Jlc29sdmVfZ2xvYmFsKTsKLSAg
ICBzdHViQ2FsbC5hZGRBcmd1bWVudChJbW1QdHIoZ2xvYmFsT2JqZWN0KSk7Ci0gICAgc3R1YkNh
bGwuYWRkQXJndW1lbnQoSW1tUHRyKGlkZW50KSk7Ci0gICAgc3R1YkNhbGwuYWRkQXJndW1lbnQo
SW1tMzIoY3VycmVudEluZGV4KSk7Ci0gICAgc3R1YkNhbGwuY2FsbChkc3QpOwotfQotCi12b2lk
IEpJVDo6ZW1pdF9vcF9ub3QoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAg
ICB1bnNpZ25lZCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotICAgIHVu
c2lnbmVkIHNyYyA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7Ci0KLSAgICBlbWl0
TG9hZFRhZyhzcmMsIHJlZ1QwKTsKLQotICAgIHhvcjMyKEltbTMyKEpTVmFsdWU6OkZhbHNlVGFn
KSwgcmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3QzMihOb25aZXJvLCByZWdUMCwg
SW1tMzIofjEpKSk7Ci0gICAgeG9yMzIoSW1tMzIoSlNWYWx1ZTo6VHJ1ZVRhZyksIHJlZ1QwKTsK
LQotICAgIGVtaXRTdG9yZUJvb2woZHN0LCByZWdUMCwgKGRzdCA9PSBzcmMpKTsKLX0KLQotdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX25vdChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotewotICAgIHVuc2lnbmVkIGRz
dCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7Ci0gICAgdW5zaWduZWQgc3JjID0g
Y3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKLQotICAgIGxpbmtTbG93Q2FzZShpdGVy
KTsKLQotICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGN0aV9vcF9ub3QpOwotICAgIHN0
dWJDYWxsLmFkZEFyZ3VtZW50KHNyYyk7Ci0gICAgc3R1YkNhbGwuY2FsbChkc3QpOwotfQotCi12
b2lkIEpJVDo6ZW1pdF9vcF9qZmFsc2UoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
LXsKLSAgICB1bnNpZ25lZCBjb25kID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsK
LSAgICB1bnNpZ25lZCB0YXJnZXQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwot
Ci0gICAgZW1pdExvYWQoY29uZCwgcmVnVDEsIHJlZ1QwKTsKLQotICAgIEp1bXAgaXNUcnVlID0g
YnJhbmNoMzIoRXF1YWwsIHJlZ1QxLCBJbW0zMihKU1ZhbHVlOjpUcnVlVGFnKSk7Ci0gICAgYWRk
SnVtcChicmFuY2gzMihFcXVhbCwgcmVnVDEsIEltbTMyKEpTVmFsdWU6OkZhbHNlVGFnKSksIHRh
cmdldCk7Ci0KLSAgICBKdW1wIGlzTm90SW50ZWdlciA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdU
MSwgSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpKTsKLSAgICBKdW1wIGlzVHJ1ZTIgPSBicmFuY2gz
MihOb3RFcXVhbCwgcmVnVDAsIEltbTMyKDApKTsKLSAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0
KTsKLQotICAgIGlmIChzdXBwb3J0c0Zsb2F0aW5nUG9pbnQoKSkgewotICAgICAgICBpc05vdElu
dGVnZXIubGluayh0aGlzKTsKLQotICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihBYm92ZSwg
cmVnVDEsIEltbTMyKEpTVmFsdWU6Okxvd2VzdFRhZykpKTsKLQotICAgICAgICB6ZXJvRG91Ymxl
KGZwUmVnVDApOwotICAgICAgICBlbWl0TG9hZERvdWJsZShjb25kLCBmcFJlZ1QxKTsKLSAgICAg
ICAgYWRkSnVtcChicmFuY2hEb3VibGUoRG91YmxlRXF1YWxPclVub3JkZXJlZCwgZnBSZWdUMCwg
ZnBSZWdUMSksIHRhcmdldCk7Ci0gICAgfSBlbHNlCi0gICAgICAgIGFkZFNsb3dDYXNlKGlzTm90
SW50ZWdlcik7Ci0KLSAgICBpc1RydWUubGluayh0aGlzKTsKLSAgICBpc1RydWUyLmxpbmsodGhp
cyk7Ci19Ci0KLXZvaWQgSklUOjplbWl0U2xvd19vcF9qZmFsc2UoSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLXsK
LSAgICB1bnNpZ25lZCBjb25kID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKLSAg
ICB1bnNpZ25lZCB0YXJnZXQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwotCi0g
ICAgbGlua1Nsb3dDYXNlKGl0ZXIpOwotICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGN0
aV9vcF9qdHJ1ZSk7Ci0gICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoY29uZCk7Ci0gICAgc3R1YkNh
bGwuY2FsbCgpOwotICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihaZXJvLCByZWdU
MCksIHRhcmdldCk7IC8vIEludmVydGVkLgotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9qdHJ1ZShJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIHVuc2lnbmVkIGNvbmQgPSBj
dXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotICAgIHVuc2lnbmVkIHRhcmdldCA9IGN1
cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7Ci0KLSAgICBlbWl0TG9hZChjb25kLCByZWdU
MSwgcmVnVDApOwotCi0gICAgSnVtcCBpc0ZhbHNlID0gYnJhbmNoMzIoRXF1YWwsIHJlZ1QxLCBJ
bW0zMihKU1ZhbHVlOjpGYWxzZVRhZykpOwotICAgIGFkZEp1bXAoYnJhbmNoMzIoRXF1YWwsIHJl
Z1QxLCBJbW0zMihKU1ZhbHVlOjpUcnVlVGFnKSksIHRhcmdldCk7Ci0KLSAgICBKdW1wIGlzTm90
SW50ZWdlciA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMSwgSW1tMzIoSlNWYWx1ZTo6SW50MzJU
YWcpKTsKLSAgICBKdW1wIGlzRmFsc2UyID0gYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCBJbW0zMigw
KSk7Ci0gICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7Ci0KLSAgICBpZiAoc3VwcG9ydHNGbG9h
dGluZ1BvaW50KCkpIHsKLSAgICAgICAgaXNOb3RJbnRlZ2VyLmxpbmsodGhpcyk7Ci0KLSAgICAg
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoQWJvdmUsIHJlZ1QxLCBJbW0zMihKU1ZhbHVlOjpMb3dl
c3RUYWcpKSk7Ci0KLSAgICAgICAgemVyb0RvdWJsZShmcFJlZ1QwKTsKLSAgICAgICAgZW1pdExv
YWREb3VibGUoY29uZCwgZnBSZWdUMSk7Ci0gICAgICAgIGFkZEp1bXAoYnJhbmNoRG91YmxlKERv
dWJsZU5vdEVxdWFsLCBmcFJlZ1QwLCBmcFJlZ1QxKSwgdGFyZ2V0KTsKLSAgICB9IGVsc2UKLSAg
ICAgICAgYWRkU2xvd0Nhc2UoaXNOb3RJbnRlZ2VyKTsKLQotICAgIGlzRmFsc2UubGluayh0aGlz
KTsKLSAgICBpc0ZhbHNlMi5saW5rKHRoaXMpOwotfQotCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
anRydWUoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYgaXRlcikKLXsKLSAgICB1bnNpZ25lZCBjb25kID0gY3VycmVudEluc3Ry
dWN0aW9uWzFdLnUub3BlcmFuZDsKLSAgICB1bnNpZ25lZCB0YXJnZXQgPSBjdXJyZW50SW5zdHJ1
Y3Rpb25bMl0udS5vcGVyYW5kOwotCi0gICAgbGlua1Nsb3dDYXNlKGl0ZXIpOwotICAgIEpJVFN0
dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGN0aV9vcF9qdHJ1ZSk7Ci0gICAgc3R1YkNhbGwuYWRkQXJn
dW1lbnQoY29uZCk7Ci0gICAgc3R1YkNhbGwuY2FsbCgpOwotICAgIGVtaXRKdW1wU2xvd1RvSG90
KGJyYW5jaFRlc3QzMihOb25aZXJvLCByZWdUMCksIHRhcmdldCk7Ci19Ci0KLXZvaWQgSklUOjpl
bWl0X29wX2plcV9udWxsKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAg
dW5zaWduZWQgc3JjID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKLSAgICB1bnNp
Z25lZCB0YXJnZXQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwotCi0gICAgZW1p
dExvYWQoc3JjLCByZWdUMSwgcmVnVDApOwotCi0gICAgSnVtcCBpc0ltbWVkaWF0ZSA9IGJyYW5j
aDMyKE5vdEVxdWFsLCByZWdUMSwgSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZykpOwotCi0gICAgLy8g
Rmlyc3QsIGhhbmRsZSBKU0NlbGwgY2FzZXMgLSBjaGVjayBNYXNxdWVyYWRlc0FzVW5kZWZpbmVk
IGJpdCBvbiB0aGUgc3RydWN0dXJlLgotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgT0JKRUNU
X09GRlNFVE9GKEpTQ2VsbCwgbV9zdHJ1Y3R1cmUpKSwgcmVnVDIpOwotICAgIGFkZEp1bXAoYnJh
bmNoVGVzdDgoTm9uWmVybywgQWRkcmVzcyhyZWdUMiwgT0JKRUNUX09GRlNFVE9GKFN0cnVjdHVy
ZSwgbV90eXBlSW5mby5tX2ZsYWdzKSksIEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKSwg
dGFyZ2V0KTsKLQotICAgIEp1bXAgd2FzTm90SW1tZWRpYXRlID0ganVtcCgpOwotCi0gICAgLy8g
Tm93IGhhbmRsZSB0aGUgaW1tZWRpYXRlIGNhc2VzIC0gdW5kZWZpbmVkICYgbnVsbAotICAgIGlz
SW1tZWRpYXRlLmxpbmsodGhpcyk7Ci0KLSAgICBzZXQzMihFcXVhbCwgcmVnVDEsIEltbTMyKEpT
VmFsdWU6Ok51bGxUYWcpLCByZWdUMik7Ci0gICAgc2V0MzIoRXF1YWwsIHJlZ1QxLCBJbW0zMihK
U1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMSk7Ci0gICAgb3IzMihyZWdUMiwgcmVnVDEpOwot
Ci0gICAgYWRkSnVtcChicmFuY2hUZXN0MzIoTm9uWmVybywgcmVnVDEpLCB0YXJnZXQpOwotCi0g
ICAgd2FzTm90SW1tZWRpYXRlLmxpbmsodGhpcyk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX2pu
ZXFfbnVsbChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIHVuc2lnbmVk
IHNyYyA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7Ci0gICAgdW5zaWduZWQgdGFy
Z2V0ID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKLQotICAgIGVtaXRMb2FkKHNy
YywgcmVnVDEsIHJlZ1QwKTsKLQotICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBicmFuY2gzMihOb3RF
cXVhbCwgcmVnVDEsIEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpKTsKLQotICAgIC8vIEZpcnN0LCBo
YW5kbGUgSlNDZWxsIGNhc2VzIC0gY2hlY2sgTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCBiaXQgb24g
dGhlIHN0cnVjdHVyZS4KLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIE9CSkVDVF9PRkZTRVRP
RihKU0NlbGwsIG1fc3RydWN0dXJlKSksIHJlZ1QyKTsKLSAgICBhZGRKdW1wKGJyYW5jaFRlc3Q4
KFplcm8sIEFkZHJlc3MocmVnVDIsIE9CSkVDVF9PRkZTRVRPRihTdHJ1Y3R1cmUsIG1fdHlwZUlu
Zm8ubV9mbGFncykpLCBJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSksIHRhcmdldCk7Ci0K
LSAgICBKdW1wIHdhc05vdEltbWVkaWF0ZSA9IGp1bXAoKTsKLQotICAgIC8vIE5vdyBoYW5kbGUg
dGhlIGltbWVkaWF0ZSBjYXNlcyAtIHVuZGVmaW5lZCAmIG51bGwKLSAgICBpc0ltbWVkaWF0ZS5s
aW5rKHRoaXMpOwotCi0gICAgc2V0MzIoRXF1YWwsIHJlZ1QxLCBJbW0zMihKU1ZhbHVlOjpOdWxs
VGFnKSwgcmVnVDIpOwotICAgIHNldDMyKEVxdWFsLCByZWdUMSwgSW1tMzIoSlNWYWx1ZTo6VW5k
ZWZpbmVkVGFnKSwgcmVnVDEpOwotICAgIG9yMzIocmVnVDIsIHJlZ1QxKTsKLQotICAgIGFkZEp1
bXAoYnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QxKSwgdGFyZ2V0KTsKLQotICAgIHdhc05vdEltbWVk
aWF0ZS5saW5rKHRoaXMpOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9qbmVxX3B0cihJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIHVuc2lnbmVkIHNyYyA9IGN1cnJlbnRJ
bnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7Ci0gICAgSlNDZWxsKiBwdHIgPSBjdXJyZW50SW5zdHJ1
Y3Rpb25bMl0udS5qc0NlbGw7Ci0gICAgdW5zaWduZWQgdGFyZ2V0ID0gY3VycmVudEluc3RydWN0
aW9uWzNdLnUub3BlcmFuZDsKLQotICAgIGVtaXRMb2FkKHNyYywgcmVnVDEsIHJlZ1QwKTsKLSAg
ICBhZGRKdW1wKGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMSwgSW1tMzIoSlNWYWx1ZTo6Q2VsbFRh
ZykpLCB0YXJnZXQpOwotICAgIGFkZEp1bXAoYnJhbmNoUHRyKE5vdEVxdWFsLCByZWdUMCwgSW1t
UHRyKHB0cikpLCB0YXJnZXQpOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9qc3IoSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBpbnQgcmV0QWRkckRzdCA9IGN1cnJlbnRJ
bnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7Ci0gICAgaW50IHRhcmdldCA9IGN1cnJlbnRJbnN0cnVj
dGlvblsyXS51Lm9wZXJhbmQ7Ci0gICAgRGF0YUxhYmVsUHRyIHN0b3JlTG9jYXRpb24gPSBzdG9y
ZVB0cldpdGhQYXRjaChJbW1QdHIoMCksIEFkZHJlc3MoY2FsbEZyYW1lUmVnaXN0ZXIsIHNpemVv
ZihSZWdpc3RlcikgKiByZXRBZGRyRHN0KSk7Ci0gICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7
Ci0gICAgbV9qc3JTaXRlcy5hcHBlbmQoSlNSSW5mbyhzdG9yZUxvY2F0aW9uLCBsYWJlbCgpKSk7
Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX3NyZXQoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKLXsKLSAgICBqdW1wKEFkZHJlc3MoY2FsbEZyYW1lUmVnaXN0ZXIsIHNpemVvZihSZWdp
c3RlcikgKiBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSk7Ci19Ci0KLXZvaWQgSklU
OjplbWl0X29wX2VxKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgdW5z
aWduZWQgZHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKLSAgICB1bnNpZ25l
ZCBzcmMxID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKLSAgICB1bnNpZ25lZCBz
cmMyID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKLSAgICAKLSAgICBlbWl0TG9h
ZDIoc3JjMSwgcmVnVDEsIHJlZ1QwLCBzcmMyLCByZWdUMywgcmVnVDIpOwotICAgIGFkZFNsb3dD
YXNlKGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMSwgcmVnVDMpKTsKLSAgICBhZGRTbG93Q2FzZShi
cmFuY2gzMihFcXVhbCwgcmVnVDEsIEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpKSk7Ci0gICAgYWRk
U2xvd0Nhc2UoYnJhbmNoMzIoQmVsb3csIHJlZ1QxLCBJbW0zMihKU1ZhbHVlOjpMb3dlc3RUYWcp
KSk7Ci0KLSAgICBzZXQ4KEVxdWFsLCByZWdUMCwgcmVnVDIsIHJlZ1QwKTsKLSAgICBvcjMyKElt
bTMyKEpTVmFsdWU6OkZhbHNlVGFnKSwgcmVnVDApOwotCi0gICAgZW1pdFN0b3JlQm9vbChkc3Qs
IHJlZ1QwKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2VxKEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi17
Ci0gICAgdW5zaWduZWQgZHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKLSAg
ICB1bnNpZ25lZCBvcDEgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwotICAgIHVu
c2lnbmVkIG9wMiA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7Ci0gICAgCi0gICAg
SnVtcExpc3Qgc3RvcmVSZXN1bHQ7Ci0gICAgSnVtcExpc3QgZ2VuZXJpY0Nhc2U7Ci0gICAgCi0g
ICAgZ2VuZXJpY0Nhc2UuYXBwZW5kKGdldFNsb3dDYXNlKGl0ZXIpKTsgLy8gdGFncyBub3QgZXF1
YWwKLQotICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8gdGFncyBlcXVhbCBhbmQgSlNDZWxsCi0g
ICAgZ2VuZXJpY0Nhc2UuYXBwZW5kKGJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMCks
IEltbVB0cihtX2dsb2JhbERhdGEtPmpzU3RyaW5nVlB0cikpKTsKLSAgICBnZW5lcmljQ2FzZS5h
cHBlbmQoYnJhbmNoUHRyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QyKSwgSW1tUHRyKG1fZ2xvYmFs
RGF0YS0+anNTdHJpbmdWUHRyKSkpOwotCi0gICAgLy8gU3RyaW5nIGNhc2UuCi0gICAgSklUU3R1
YkNhbGwgc3R1YkNhbGxFcVN0cmluZ3ModGhpcywgY3RpX29wX2VxX3N0cmluZ3MpOwotICAgIHN0
dWJDYWxsRXFTdHJpbmdzLmFkZEFyZ3VtZW50KHJlZ1QwKTsKLSAgICBzdHViQ2FsbEVxU3RyaW5n
cy5hZGRBcmd1bWVudChyZWdUMik7Ci0gICAgc3R1YkNhbGxFcVN0cmluZ3MuY2FsbCgpOwotICAg
IHN0b3JlUmVzdWx0LmFwcGVuZChqdW1wKCkpOwotCi0gICAgLy8gR2VuZXJpYyBjYXNlLgotICAg
IGdlbmVyaWNDYXNlLmFwcGVuZChnZXRTbG93Q2FzZShpdGVyKSk7IC8vIGRvdWJsZXMKLSAgICBn
ZW5lcmljQ2FzZS5saW5rKHRoaXMpOwotICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxsRXEodGhpcywg
Y3RpX29wX2VxKTsKLSAgICBzdHViQ2FsbEVxLmFkZEFyZ3VtZW50KG9wMSk7Ci0gICAgc3R1YkNh
bGxFcS5hZGRBcmd1bWVudChvcDIpOwotICAgIHN0dWJDYWxsRXEuY2FsbChyZWdUMCk7Ci0KLSAg
ICBzdG9yZVJlc3VsdC5saW5rKHRoaXMpOwotICAgIG9yMzIoSW1tMzIoSlNWYWx1ZTo6RmFsc2VU
YWcpLCByZWdUMCk7Ci0gICAgZW1pdFN0b3JlQm9vbChkc3QsIHJlZ1QwKTsKLX0KLQotdm9pZCBK
SVQ6OmVtaXRfb3BfbmVxKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAg
dW5zaWduZWQgZHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKLSAgICB1bnNp
Z25lZCBzcmMxID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKLSAgICB1bnNpZ25l
ZCBzcmMyID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKLSAgICAKLSAgICBlbWl0
TG9hZDIoc3JjMSwgcmVnVDEsIHJlZ1QwLCBzcmMyLCByZWdUMywgcmVnVDIpOwotICAgIGFkZFNs
b3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMSwgcmVnVDMpKTsKLSAgICBhZGRTbG93Q2Fz
ZShicmFuY2gzMihFcXVhbCwgcmVnVDEsIEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpKSk7Ci0gICAg
YWRkU2xvd0Nhc2UoYnJhbmNoMzIoQmVsb3csIHJlZ1QxLCBJbW0zMihKU1ZhbHVlOjpMb3dlc3RU
YWcpKSk7Ci0KLSAgICBzZXQ4KE5vdEVxdWFsLCByZWdUMCwgcmVnVDIsIHJlZ1QwKTsKLSAgICBv
cjMyKEltbTMyKEpTVmFsdWU6OkZhbHNlVGFnKSwgcmVnVDApOwotCi0gICAgZW1pdFN0b3JlQm9v
bChkc3QsIHJlZ1QwKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRTbG93X29wX25lcShJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBp
dGVyKQotewotICAgIHVuc2lnbmVkIGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJh
bmQ7Ci0gICAgCi0gICAgSnVtcExpc3Qgc3RvcmVSZXN1bHQ7Ci0gICAgSnVtcExpc3QgZ2VuZXJp
Y0Nhc2U7Ci0gICAgCi0gICAgZ2VuZXJpY0Nhc2UuYXBwZW5kKGdldFNsb3dDYXNlKGl0ZXIpKTsg
Ly8gdGFncyBub3QgZXF1YWwKLQotICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8gdGFncyBlcXVh
bCBhbmQgSlNDZWxsCi0gICAgZ2VuZXJpY0Nhc2UuYXBwZW5kKGJyYW5jaFB0cihOb3RFcXVhbCwg
QWRkcmVzcyhyZWdUMCksIEltbVB0cihtX2dsb2JhbERhdGEtPmpzU3RyaW5nVlB0cikpKTsKLSAg
ICBnZW5lcmljQ2FzZS5hcHBlbmQoYnJhbmNoUHRyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QyKSwg
SW1tUHRyKG1fZ2xvYmFsRGF0YS0+anNTdHJpbmdWUHRyKSkpOwotCi0gICAgLy8gU3RyaW5nIGNh
c2UuCi0gICAgSklUU3R1YkNhbGwgc3R1YkNhbGxFcVN0cmluZ3ModGhpcywgY3RpX29wX2VxX3N0
cmluZ3MpOwotICAgIHN0dWJDYWxsRXFTdHJpbmdzLmFkZEFyZ3VtZW50KHJlZ1QwKTsKLSAgICBz
dHViQ2FsbEVxU3RyaW5ncy5hZGRBcmd1bWVudChyZWdUMik7Ci0gICAgc3R1YkNhbGxFcVN0cmlu
Z3MuY2FsbChyZWdUMCk7Ci0gICAgc3RvcmVSZXN1bHQuYXBwZW5kKGp1bXAoKSk7Ci0KLSAgICAv
LyBHZW5lcmljIGNhc2UuCi0gICAgZ2VuZXJpY0Nhc2UuYXBwZW5kKGdldFNsb3dDYXNlKGl0ZXIp
KTsgLy8gZG91YmxlcwotICAgIGdlbmVyaWNDYXNlLmxpbmsodGhpcyk7Ci0gICAgSklUU3R1YkNh
bGwgc3R1YkNhbGxFcSh0aGlzLCBjdGlfb3BfZXEpOwotICAgIHN0dWJDYWxsRXEuYWRkQXJndW1l
bnQocmVnVDEsIHJlZ1QwKTsKLSAgICBzdHViQ2FsbEVxLmFkZEFyZ3VtZW50KHJlZ1QzLCByZWdU
Mik7Ci0gICAgc3R1YkNhbGxFcS5jYWxsKHJlZ1QwKTsKLQotICAgIHN0b3JlUmVzdWx0Lmxpbmso
dGhpcyk7Ci0gICAgeG9yMzIoSW1tMzIoMHgxKSwgcmVnVDApOwotICAgIG9yMzIoSW1tMzIoSlNW
YWx1ZTo6RmFsc2VUYWcpLCByZWdUMCk7Ci0gICAgZW1pdFN0b3JlQm9vbChkc3QsIHJlZ1QwKTsK
LX0KLQotdm9pZCBKSVQ6OmNvbXBpbGVPcFN0cmljdEVxKEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIENvbXBpbGVPcFN0cmljdEVxVHlwZSB0eXBlKQotewotICAgIHVuc2lnbmVkIGRz
dCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7Ci0gICAgdW5zaWduZWQgc3JjMSA9
IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7Ci0gICAgdW5zaWduZWQgc3JjMiA9IGN1
cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7Ci0KLSAgICBlbWl0TG9hZFRhZyhzcmMxLCBy
ZWdUMCk7Ci0gICAgZW1pdExvYWRUYWcoc3JjMiwgcmVnVDEpOwotCi0gICAgLy8gSnVtcCB0byBh
IHNsb3cgY2FzZSBpZiBlaXRoZXIgb3BlcmFuZCBpcyBkb3VibGUsIG9yIGlmIGJvdGggb3BlcmFu
ZHMgYXJlCi0gICAgLy8gY2VsbHMgYW5kL29yIEludDMycy4KLSAgICBtb3ZlKHJlZ1QwLCByZWdU
Mik7Ci0gICAgYW5kMzIocmVnVDEsIHJlZ1QyKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2gzMihC
ZWxvdywgcmVnVDIsIEltbTMyKEpTVmFsdWU6Okxvd2VzdFRhZykpKTsKLSAgICBhZGRTbG93Q2Fz
ZShicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QyLCBJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSkp
OwotCi0gICAgaWYgKHR5cGUgPT0gT3BTdHJpY3RFcSkKLSAgICAgICAgc2V0OChFcXVhbCwgcmVn
VDAsIHJlZ1QxLCByZWdUMCk7Ci0gICAgZWxzZQotICAgICAgICBzZXQ4KE5vdEVxdWFsLCByZWdU
MCwgcmVnVDEsIHJlZ1QwKTsKLQotICAgIG9yMzIoSW1tMzIoSlNWYWx1ZTo6RmFsc2VUYWcpLCBy
ZWdUMCk7Ci0KLSAgICBlbWl0U3RvcmVCb29sKGRzdCwgcmVnVDApOwotfQotCi12b2lkIEpJVDo6
ZW1pdF9vcF9zdHJpY3RlcShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAg
IGNvbXBpbGVPcFN0cmljdEVxKGN1cnJlbnRJbnN0cnVjdGlvbiwgT3BTdHJpY3RFcSk7Ci19Ci0K
LXZvaWQgSklUOjplbWl0U2xvd19vcF9zdHJpY3RlcShJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotewotICAgIHVu
c2lnbmVkIGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7Ci0gICAgdW5zaWdu
ZWQgc3JjMSA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7Ci0gICAgdW5zaWduZWQg
c3JjMiA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7Ci0KLSAgICBsaW5rU2xvd0Nh
c2UoaXRlcik7Ci0gICAgbGlua1Nsb3dDYXNlKGl0ZXIpOwotCi0gICAgSklUU3R1YkNhbGwgc3R1
YkNhbGwodGhpcywgY3RpX29wX3N0cmljdGVxKTsKLSAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChz
cmMxKTsKLSAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChzcmMyKTsKLSAgICBzdHViQ2FsbC5jYWxs
KGRzdCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX25zdHJpY3RlcShJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQotewotICAgIGNvbXBpbGVPcFN0cmljdEVxKGN1cnJlbnRJbnN0cnVj
dGlvbiwgT3BOU3RyaWN0RXEpOwotfQotCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbnN0cmljdGVx
KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImIGl0ZXIpCi17Ci0gICAgdW5zaWduZWQgZHN0ID0gY3VycmVudEluc3RydWN0aW9u
WzFdLnUub3BlcmFuZDsKLSAgICB1bnNpZ25lZCBzcmMxID0gY3VycmVudEluc3RydWN0aW9uWzJd
LnUub3BlcmFuZDsKLSAgICB1bnNpZ25lZCBzcmMyID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUu
b3BlcmFuZDsKLQotICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKLSAgICBsaW5rU2xvd0Nhc2UoaXRl
cik7Ci0KLSAgICBKSVRTdHViQ2FsbCBzdHViQ2FsbCh0aGlzLCBjdGlfb3BfbnN0cmljdGVxKTsK
LSAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChzcmMxKTsKLSAgICBzdHViQ2FsbC5hZGRBcmd1bWVu
dChzcmMyKTsKLSAgICBzdHViQ2FsbC5jYWxsKGRzdCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29w
X2VxX251bGwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICB1bnNpZ25l
ZCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotICAgIHVuc2lnbmVkIHNy
YyA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7Ci0KLSAgICBlbWl0TG9hZChzcmMs
IHJlZ1QxLCByZWdUMCk7Ci0gICAgSnVtcCBpc0ltbWVkaWF0ZSA9IGJyYW5jaDMyKE5vdEVxdWFs
LCByZWdUMSwgSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZykpOwotCi0gICAgbG9hZFB0cihBZGRyZXNz
KHJlZ1QwLCBPQkpFQ1RfT0ZGU0VUT0YoSlNDZWxsLCBtX3N0cnVjdHVyZSkpLCByZWdUMSk7Ci0g
ICAgc2V0VGVzdDgoTm9uWmVybywgQWRkcmVzcyhyZWdUMSwgT0JKRUNUX09GRlNFVE9GKFN0cnVj
dHVyZSwgbV90eXBlSW5mby5tX2ZsYWdzKSksIEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQp
LCByZWdUMSk7Ci0KLSAgICBKdW1wIHdhc05vdEltbWVkaWF0ZSA9IGp1bXAoKTsKLQotICAgIGlz
SW1tZWRpYXRlLmxpbmsodGhpcyk7Ci0KLSAgICBzZXQ4KEVxdWFsLCByZWdUMSwgSW1tMzIoSlNW
YWx1ZTo6TnVsbFRhZyksIHJlZ1QyKTsKLSAgICBzZXQ4KEVxdWFsLCByZWdUMSwgSW1tMzIoSlNW
YWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDEpOwotICAgIG9yMzIocmVnVDIsIHJlZ1QxKTsKLQot
ICAgIHdhc05vdEltbWVkaWF0ZS5saW5rKHRoaXMpOwotCi0gICAgb3IzMihJbW0zMihKU1ZhbHVl
OjpGYWxzZVRhZyksIHJlZ1QxKTsKLQotICAgIGVtaXRTdG9yZUJvb2woZHN0LCByZWdUMSk7Ci19
Ci0KLXZvaWQgSklUOjplbWl0X29wX25lcV9udWxsKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCi17Ci0gICAgdW5zaWduZWQgZHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3Bl
cmFuZDsKLSAgICB1bnNpZ25lZCBzcmMgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5k
OwotCi0gICAgZW1pdExvYWQoc3JjLCByZWdUMSwgcmVnVDApOwotICAgIEp1bXAgaXNJbW1lZGlh
dGUgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDEsIEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpKTsK
LQotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgT0JKRUNUX09GRlNFVE9GKEpTQ2VsbCwgbV9z
dHJ1Y3R1cmUpKSwgcmVnVDEpOwotICAgIHNldFRlc3Q4KFplcm8sIEFkZHJlc3MocmVnVDEsIE9C
SkVDVF9PRkZTRVRPRihTdHJ1Y3R1cmUsIG1fdHlwZUluZm8ubV9mbGFncykpLCBJbW0zMihNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkKSwgcmVnVDEpOwotCi0gICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUg
PSBqdW1wKCk7Ci0KLSAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOwotCi0gICAgc2V0OChOb3RF
cXVhbCwgcmVnVDEsIEltbTMyKEpTVmFsdWU6Ok51bGxUYWcpLCByZWdUMik7Ci0gICAgc2V0OChO
b3RFcXVhbCwgcmVnVDEsIEltbTMyKEpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QxKTsKLSAg
ICBhbmQzMihyZWdUMiwgcmVnVDEpOwotCi0gICAgd2FzTm90SW1tZWRpYXRlLmxpbmsodGhpcyk7
Ci0KLSAgICBvcjMyKEltbTMyKEpTVmFsdWU6OkZhbHNlVGFnKSwgcmVnVDEpOwotCi0gICAgZW1p
dFN0b3JlQm9vbChkc3QsIHJlZ1QxKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV93
aXRoX2Jhc2UoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBKSVRTdHVi
Q2FsbCBzdHViQ2FsbCh0aGlzLCBjdGlfb3BfcmVzb2x2ZV93aXRoX2Jhc2UpOwotICAgIHN0dWJD
YWxsLmFkZEFyZ3VtZW50KEltbVB0cigmbV9jb2RlQmxvY2stPmlkZW50aWZpZXIoY3VycmVudElu
c3RydWN0aW9uWzNdLnUub3BlcmFuZCkpKTsKLSAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChJbW0z
MihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSk7Ci0gICAgc3R1YkNhbGwuY2FsbChj
dXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3Bf
bmV3X2Z1bmNfZXhwKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgSklU
U3R1YkNhbGwgc3R1YkNhbGwodGhpcywgY3RpX29wX25ld19mdW5jX2V4cCk7Ci0gICAgc3R1YkNh
bGwuYWRkQXJndW1lbnQoSW1tUHRyKG1fY29kZUJsb2NrLT5mdW5jdGlvbkV4cHIoY3VycmVudElu
c3RydWN0aW9uWzJdLnUub3BlcmFuZCkpKTsKLSAgICBzdHViQ2FsbC5jYWxsKGN1cnJlbnRJbnN0
cnVjdGlvblsxXS51Lm9wZXJhbmQpOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF90aHJvdyhJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIHVuc2lnbmVkIGV4Y2VwdGlvbiA9
IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7Ci0gICAgSklUU3R1YkNhbGwgc3R1YkNh
bGwodGhpcywgY3RpX29wX3Rocm93KTsKLSAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChleGNlcHRp
b24pOwotICAgIHN0dWJDYWxsLmNhbGwoKTsKLQotI2lmbmRlZiBOREVCVUcKLSAgICAvLyBjdGlf
b3BfdGhyb3cgYWx3YXlzIGNoYW5nZXMgaXQncyByZXR1cm4gYWRkcmVzcywKLSAgICAvLyB0aGlz
IHBvaW50IGluIHRoZSBjb2RlIHNob3VsZCBuZXZlciBiZSByZWFjaGVkLgotICAgIGJyZWFrcG9p
bnQoKTsKLSNlbmRpZgotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcG5hbWVzKEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgaW50IGRzdCA9IGN1cnJlbnRJbnN0cnVj
dGlvblsxXS51Lm9wZXJhbmQ7Ci0gICAgaW50IGJhc2UgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0u
dS5vcGVyYW5kOwotICAgIGludCBpID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsK
LSAgICBpbnQgc2l6ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbls0XS51Lm9wZXJhbmQ7Ci0gICAgaW50
IGJyZWFrVGFyZ2V0ID0gY3VycmVudEluc3RydWN0aW9uWzVdLnUub3BlcmFuZDsKLQotICAgIEp1
bXBMaXN0IGlzTm90T2JqZWN0OwotCi0gICAgZW1pdExvYWQoYmFzZSwgcmVnVDEsIHJlZ1QwKTsK
LSAgICBpZiAoIW1fY29kZUJsb2NrLT5pc0tub3duTm90SW1tZWRpYXRlKGJhc2UpKQotICAgICAg
ICBpc05vdE9iamVjdC5hcHBlbmQoYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QxLCBJbW0zMihKU1Zh
bHVlOjpDZWxsVGFnKSkpOwotICAgIGlmIChiYXNlICE9IG1fY29kZUJsb2NrLT50aGlzUmVnaXN0
ZXIoKSkgewotICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIE9CSkVDVF9PRkZTRVRPRihK
U0NlbGwsIG1fc3RydWN0dXJlKSksIHJlZ1QyKTsKLSAgICAgICAgaXNOb3RPYmplY3QuYXBwZW5k
KGJyYW5jaDgoTm90RXF1YWwsIEFkZHJlc3MocmVnVDIsIE9CSkVDVF9PRkZTRVRPRihTdHJ1Y3R1
cmUsIG1fdHlwZUluZm8ubV90eXBlKSksIEltbTMyKE9iamVjdFR5cGUpKSk7Ci0gICAgfQotCi0g
ICAgLy8gV2UgY291bGQgaW5saW5lIHRoZSBjYXNlIHdoZXJlIHlvdSBoYXZlIGEgdmFsaWQgY2Fj
aGUsIGJ1dAotICAgIC8vIHRoaXMgY2FsbCBkb2Vzbid0IHNlZW0gdG8gYmUgaG90LgotICAgIExh
YmVsIGlzT2JqZWN0KHRoaXMpOwotICAgIEpJVFN0dWJDYWxsIGdldFBuYW1lc1N0dWJDYWxsKHRo
aXMsIGN0aV9vcF9nZXRfcG5hbWVzKTsKLSAgICBnZXRQbmFtZXNTdHViQ2FsbC5hZGRBcmd1bWVu
dChyZWdUMCk7Ci0gICAgZ2V0UG5hbWVzU3R1YkNhbGwuY2FsbChkc3QpOwotICAgIGxvYWQzMihB
ZGRyZXNzKHJlZ1QwLCBPQkpFQ1RfT0ZGU0VUT0YoSlNQcm9wZXJ0eU5hbWVJdGVyYXRvciwgbV9q
c1N0cmluZ3NTaXplKSksIHJlZ1QzKTsKLSAgICBzdG9yZTMyKEltbTMyKDApLCBhZGRyZXNzRm9y
KGkpKTsKLSAgICBzdG9yZTMyKHJlZ1QzLCBhZGRyZXNzRm9yKHNpemUpKTsKLSAgICBKdW1wIGVu
ZCA9IGp1bXAoKTsKLQotICAgIGlzTm90T2JqZWN0LmxpbmsodGhpcyk7Ci0gICAgYWRkSnVtcChi
cmFuY2gzMihFcXVhbCwgcmVnVDEsIEltbTMyKEpTVmFsdWU6Ok51bGxUYWcpKSwgYnJlYWtUYXJn
ZXQpOwotICAgIGFkZEp1bXAoYnJhbmNoMzIoRXF1YWwsIHJlZ1QxLCBJbW0zMihKU1ZhbHVlOjpV
bmRlZmluZWRUYWcpKSwgYnJlYWtUYXJnZXQpOwotICAgIEpJVFN0dWJDYWxsIHRvT2JqZWN0U3R1
YkNhbGwodGhpcywgY3RpX3RvX29iamVjdCk7Ci0gICAgdG9PYmplY3RTdHViQ2FsbC5hZGRBcmd1
bWVudChyZWdUMSwgcmVnVDApOwotICAgIHRvT2JqZWN0U3R1YkNhbGwuY2FsbChiYXNlKTsKLSAg
ICBqdW1wKCkubGlua1RvKGlzT2JqZWN0LCB0aGlzKTsKLSAgICAKLSAgICBlbmQubGluayh0aGlz
KTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfbmV4dF9wbmFtZShJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQotewotICAgIGludCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5v
cGVyYW5kOwotICAgIGludCBiYXNlID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsK
LSAgICBpbnQgaSA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7Ci0gICAgaW50IHNp
emUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5vcGVyYW5kOwotICAgIGludCBpdCA9IGN1cnJl
bnRJbnN0cnVjdGlvbls1XS51Lm9wZXJhbmQ7Ci0gICAgaW50IHRhcmdldCA9IGN1cnJlbnRJbnN0
cnVjdGlvbls2XS51Lm9wZXJhbmQ7Ci0gICAgCi0gICAgSnVtcExpc3QgY2FsbEhhc1Byb3BlcnR5
OwotCi0gICAgTGFiZWwgYmVnaW4odGhpcyk7Ci0gICAgbG9hZDMyKGFkZHJlc3NGb3IoaSksIHJl
Z1QwKTsKLSAgICBKdW1wIGVuZCA9IGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgYWRkcmVzc0Zvcihz
aXplKSk7Ci0KLSAgICAvLyBHcmFiIGtleSBAIGkKLSAgICBsb2FkUHRyKGFkZHJlc3NGb3IoaXQp
LCByZWdUMSk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QxLCBPQkpFQ1RfT0ZGU0VUT0YoSlNQ
cm9wZXJ0eU5hbWVJdGVyYXRvciwgbV9qc1N0cmluZ3MpKSwgcmVnVDIpOwotICAgIGxvYWQzMihC
YXNlSW5kZXgocmVnVDIsIHJlZ1QwLCBUaW1lc0VpZ2h0KSwgcmVnVDIpOwotICAgIHN0b3JlMzIo
SW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksIHRhZ0Zvcihkc3QpKTsKLSAgICBzdG9yZTMyKHJlZ1Qy
LCBwYXlsb2FkRm9yKGRzdCkpOwotCi0gICAgLy8gSW5jcmVtZW50IGkKLSAgICBhZGQzMihJbW0z
MigxKSwgcmVnVDApOwotICAgIHN0b3JlMzIocmVnVDAsIGFkZHJlc3NGb3IoaSkpOwotCi0gICAg
Ly8gVmVyaWZ5IHRoYXQgaSBpcyB2YWxpZDoKLSAgICBsb2FkUHRyKGFkZHJlc3NGb3IoYmFzZSks
IHJlZ1QwKTsKLQotICAgIC8vIFRlc3QgYmFzZSdzIHN0cnVjdHVyZQotICAgIGxvYWRQdHIoQWRk
cmVzcyhyZWdUMCwgT0JKRUNUX09GRlNFVE9GKEpTQ2VsbCwgbV9zdHJ1Y3R1cmUpKSwgcmVnVDIp
OwotICAgIGNhbGxIYXNQcm9wZXJ0eS5hcHBlbmQoYnJhbmNoUHRyKE5vdEVxdWFsLCByZWdUMiwg
QWRkcmVzcyhBZGRyZXNzKHJlZ1QxLCBPQkpFQ1RfT0ZGU0VUT0YoSlNQcm9wZXJ0eU5hbWVJdGVy
YXRvciwgbV9jYWNoZWRTdHJ1Y3R1cmUpKSkpKTsKLQotICAgIC8vIFRlc3QgYmFzZSdzIHByb3Rv
dHlwZSBjaGFpbgotICAgIGxvYWRQdHIoQWRkcmVzcyhBZGRyZXNzKHJlZ1QxLCBPQkpFQ1RfT0ZG
U0VUT0YoSlNQcm9wZXJ0eU5hbWVJdGVyYXRvciwgbV9jYWNoZWRQcm90b3R5cGVDaGFpbikpKSwg
cmVnVDMpOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMywgT0JKRUNUX09GRlNFVE9GKFN0cnVj
dHVyZUNoYWluLCBtX3ZlY3RvcikpLCByZWdUMyk7Ci0gICAgYWRkSnVtcChicmFuY2hUZXN0UHRy
KFplcm8sIEFkZHJlc3MocmVnVDMpKSwgdGFyZ2V0KTsKLQotICAgIExhYmVsIGNoZWNrUHJvdG90
eXBlKHRoaXMpOwotICAgIGNhbGxIYXNQcm9wZXJ0eS5hcHBlbmQoYnJhbmNoMzIoRXF1YWwsIEFk
ZHJlc3MocmVnVDIsIE9CSkVDVF9PRkZTRVRPRihTdHJ1Y3R1cmUsIG1fcHJvdG90eXBlKSArIE9C
SkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSwgSW1tMzIoSlNWYWx1ZTo6TnVs
bFRhZykpKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDIsIE9CSkVDVF9PRkZTRVRPRihTdHJ1
Y3R1cmUsIG1fcHJvdG90eXBlKSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5w
YXlsb2FkKSksIHJlZ1QyKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDIsIE9CSkVDVF9PRkZT
RVRPRihKU0NlbGwsIG1fc3RydWN0dXJlKSksIHJlZ1QyKTsKLSAgICBjYWxsSGFzUHJvcGVydHku
YXBwZW5kKGJyYW5jaFB0cihOb3RFcXVhbCwgcmVnVDIsIEFkZHJlc3MocmVnVDMpKSk7Ci0gICAg
YWRkUHRyKEltbTMyKHNpemVvZihTdHJ1Y3R1cmUqKSksIHJlZ1QzKTsKLSAgICBicmFuY2hUZXN0
UHRyKE5vblplcm8sIEFkZHJlc3MocmVnVDMpKS5saW5rVG8oY2hlY2tQcm90b3R5cGUsIHRoaXMp
OwotCi0gICAgLy8gQ29udGludWUgbG9vcC4KLSAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsK
LQotICAgIC8vIFNsb3cgY2FzZTogQXNrIHRoZSBvYmplY3QgaWYgaSBpcyB2YWxpZC4KLSAgICBj
YWxsSGFzUHJvcGVydHkubGluayh0aGlzKTsKLSAgICBsb2FkUHRyKGFkZHJlc3NGb3IoZHN0KSwg
cmVnVDEpOwotICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGN0aV9oYXNfcHJvcGVydHkp
OwotICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KHJlZ1QwKTsKLSAgICBzdHViQ2FsbC5hZGRBcmd1
bWVudChyZWdUMSk7Ci0gICAgc3R1YkNhbGwuY2FsbCgpOwotCi0gICAgLy8gVGVzdCBmb3IgdmFs
aWQga2V5LgotICAgIGFkZEp1bXAoYnJhbmNoVGVzdDMyKE5vblplcm8sIHJlZ1QwKSwgdGFyZ2V0
KTsKLSAgICBqdW1wKCkubGlua1RvKGJlZ2luLCB0aGlzKTsKLQotICAgIC8vIEVuZCBvZiBsb29w
LgotICAgIGVuZC5saW5rKHRoaXMpOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9wdXNoX3Njb3Bl
KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgSklUU3R1YkNhbGwgc3R1
YkNhbGwodGhpcywgY3RpX29wX3B1c2hfc2NvcGUpOwotICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50
KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpOwotICAgIHN0dWJDYWxsLmNhbGwoY3Vy
cmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX3Bv
cF9zY29wZShJbnN0cnVjdGlvbiopCi17Ci0gICAgSklUU3R1YkNhbGwodGhpcywgY3RpX29wX3Bv
cF9zY29wZSkuY2FsbCgpOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF90b19qc251bWJlcihJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGludCBkc3QgPSBjdXJyZW50SW5z
dHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotICAgIGludCBzcmMgPSBjdXJyZW50SW5zdHJ1Y3Rpb25b
Ml0udS5vcGVyYW5kOwotCi0gICAgZW1pdExvYWQoc3JjLCByZWdUMSwgcmVnVDApOwotCi0gICAg
SnVtcCBpc0ludDMyID0gYnJhbmNoMzIoRXF1YWwsIHJlZ1QxLCBJbW0zMihKU1ZhbHVlOjpJbnQz
MlRhZykpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDEsIElt
bTMyKEpTVmFsdWU6OkVtcHR5VmFsdWVUYWcpKSk7Ci0gICAgaXNJbnQzMi5saW5rKHRoaXMpOwot
Ci0gICAgaWYgKHNyYyAhPSBkc3QpCi0gICAgICAgIGVtaXRTdG9yZShkc3QsIHJlZ1QxLCByZWdU
MCk7Ci0gICAgbWFwKG1fYnl0ZWNvZGVJbmRleCArIE9QQ09ERV9MRU5HVEgob3BfdG9fanNudW1i
ZXIpLCBkc3QsIHJlZ1QxLCByZWdUMCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0U2xvd19vcF90b19q
c251bWJlcihJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotewotICAgIGludCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rp
b25bMV0udS5vcGVyYW5kOwotCi0gICAgbGlua1Nsb3dDYXNlKGl0ZXIpOwotCi0gICAgSklUU3R1
YkNhbGwgc3R1YkNhbGwodGhpcywgY3RpX29wX3RvX2pzbnVtYmVyKTsKLSAgICBzdHViQ2FsbC5h
ZGRBcmd1bWVudChyZWdUMSwgcmVnVDApOwotICAgIHN0dWJDYWxsLmNhbGwoZHN0KTsKLX0KLQot
dm9pZCBKSVQ6OmVtaXRfb3BfcHVzaF9uZXdfc2NvcGUoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKLXsKLSAgICBKSVRTdHViQ2FsbCBzdHViQ2FsbCh0aGlzLCBjdGlfb3BfcHVzaF9u
ZXdfc2NvcGUpOwotICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KEltbVB0cigmbV9jb2RlQmxvY2st
PmlkZW50aWZpZXIoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCkpKTsKLSAgICBzdHVi
Q2FsbC5hZGRBcmd1bWVudChjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKTsKLSAgICBz
dHViQ2FsbC5jYWxsKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpOwotfQotCi12b2lk
IEpJVDo6ZW1pdF9vcF9jYXRjaChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewot
ICAgIHVuc2lnbmVkIGV4Y2VwdGlvbiA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7
Ci0KLSAgICAvLyBUaGlzIG9wY29kZSBvbmx5IGV4ZWN1dGVzIGFmdGVyIGEgcmV0dXJuIGZyb20g
Y3RpX29wX3Rocm93LgotCi0gICAgLy8gY3RpX29wX3Rocm93IG1heSBoYXZlIHRha2VuIHVzIHRv
IGEgY2FsbCBmcmFtZSBmdXJ0aGVyIHVwIHRoZSBzdGFjazsgcmVsb2FkCi0gICAgLy8gdGhlIGNh
bGwgZnJhbWUgcG9pbnRlciB0byBhZGp1c3QuCi0gICAgcGVlayhjYWxsRnJhbWVSZWdpc3Rlciwg
T0JKRUNUX09GRlNFVE9GKHN0cnVjdCBKSVRTdGFja0ZyYW1lLCBjYWxsRnJhbWUpIC8gc2l6ZW9m
ICh2b2lkKikpOwotCi0gICAgLy8gTm93IHN0b3JlIHRoZSBleGNlcHRpb24gcmV0dXJuZWQgYnkg
Y3RpX29wX3Rocm93LgotICAgIGVtaXRTdG9yZShleGNlcHRpb24sIHJlZ1QxLCByZWdUMCk7Ci0g
ICAgbWFwKG1fYnl0ZWNvZGVJbmRleCArIE9QQ09ERV9MRU5HVEgob3BfY2F0Y2gpLCBleGNlcHRp
b24sIHJlZ1QxLCByZWdUMCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX2ptcF9zY29wZXMoSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBKSVRTdHViQ2FsbCBzdHViQ2Fs
bCh0aGlzLCBjdGlfb3Bfam1wX3Njb3Blcyk7Ci0gICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoSW1t
MzIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCkpOwotICAgIHN0dWJDYWxsLmNhbGwo
KTsKLSAgICBhZGRKdW1wKGp1bXAoKSwgY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7
Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9pbW0oSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKLXsKLSAgICB1bnNpZ25lZCB0YWJsZUluZGV4ID0gY3VycmVudEluc3RydWN0
aW9uWzFdLnUub3BlcmFuZDsKLSAgICB1bnNpZ25lZCBkZWZhdWx0T2Zmc2V0ID0gY3VycmVudElu
c3RydWN0aW9uWzJdLnUub3BlcmFuZDsKLSAgICB1bnNpZ25lZCBzY3J1dGluZWUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwotCi0gICAgLy8gY3JlYXRlIGp1bXAgdGFibGUgZm9y
IHN3aXRjaCBkZXN0aW5hdGlvbnMsIHRyYWNrIHRoaXMgc3dpdGNoIHN0YXRlbWVudC4KLSAgICBT
aW1wbGVKdW1wVGFibGUqIGp1bXBUYWJsZSA9ICZtX2NvZGVCbG9jay0+aW1tZWRpYXRlU3dpdGNo
SnVtcFRhYmxlKHRhYmxlSW5kZXgpOwotICAgIG1fc3dpdGNoZXMuYXBwZW5kKFN3aXRjaFJlY29y
ZChqdW1wVGFibGUsIG1fYnl0ZWNvZGVJbmRleCwgZGVmYXVsdE9mZnNldCwgU3dpdGNoUmVjb3Jk
OjpJbW1lZGlhdGUpKTsKLSAgICBqdW1wVGFibGUtPmN0aU9mZnNldHMuZ3JvdyhqdW1wVGFibGUt
PmJyYW5jaE9mZnNldHMuc2l6ZSgpKTsKLQotICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMs
IGN0aV9vcF9zd2l0Y2hfaW1tKTsKLSAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChzY3J1dGluZWUp
OwotICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KEltbTMyKHRhYmxlSW5kZXgpKTsKLSAgICBzdHVi
Q2FsbC5jYWxsKCk7Ci0gICAganVtcChyZWdUMCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX3N3
aXRjaF9jaGFyKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgdW5zaWdu
ZWQgdGFibGVJbmRleCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7Ci0gICAgdW5z
aWduZWQgZGVmYXVsdE9mZnNldCA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7Ci0g
ICAgdW5zaWduZWQgc2NydXRpbmVlID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsK
LQotICAgIC8vIGNyZWF0ZSBqdW1wIHRhYmxlIGZvciBzd2l0Y2ggZGVzdGluYXRpb25zLCB0cmFj
ayB0aGlzIHN3aXRjaCBzdGF0ZW1lbnQuCi0gICAgU2ltcGxlSnVtcFRhYmxlKiBqdW1wVGFibGUg
PSAmbV9jb2RlQmxvY2stPmNoYXJhY3RlclN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKLSAg
ICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQoanVtcFRhYmxlLCBtX2J5dGVjb2RlSW5k
ZXgsIGRlZmF1bHRPZmZzZXQsIFN3aXRjaFJlY29yZDo6Q2hhcmFjdGVyKSk7Ci0gICAganVtcFRh
YmxlLT5jdGlPZmZzZXRzLmdyb3coanVtcFRhYmxlLT5icmFuY2hPZmZzZXRzLnNpemUoKSk7Ci0K
LSAgICBKSVRTdHViQ2FsbCBzdHViQ2FsbCh0aGlzLCBjdGlfb3Bfc3dpdGNoX2NoYXIpOwotICAg
IHN0dWJDYWxsLmFkZEFyZ3VtZW50KHNjcnV0aW5lZSk7Ci0gICAgc3R1YkNhbGwuYWRkQXJndW1l
bnQoSW1tMzIodGFibGVJbmRleCkpOwotICAgIHN0dWJDYWxsLmNhbGwoKTsKLSAgICBqdW1wKHJl
Z1QwKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX3N0cmluZyhJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQotewotICAgIHVuc2lnbmVkIHRhYmxlSW5kZXggPSBjdXJyZW50
SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotICAgIHVuc2lnbmVkIGRlZmF1bHRPZmZzZXQgPSBj
dXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwotICAgIHVuc2lnbmVkIHNjcnV0aW5lZSA9
IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7Ci0KLSAgICAvLyBjcmVhdGUganVtcCB0
YWJsZSBmb3Igc3dpdGNoIGRlc3RpbmF0aW9ucywgdHJhY2sgdGhpcyBzd2l0Y2ggc3RhdGVtZW50
LgotICAgIFN0cmluZ0p1bXBUYWJsZSoganVtcFRhYmxlID0gJm1fY29kZUJsb2NrLT5zdHJpbmdT
d2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7Ci0gICAgbV9zd2l0Y2hlcy5hcHBlbmQoU3dpdGNo
UmVjb3JkKGp1bXBUYWJsZSwgbV9ieXRlY29kZUluZGV4LCBkZWZhdWx0T2Zmc2V0KSk7Ci0KLSAg
ICBKSVRTdHViQ2FsbCBzdHViQ2FsbCh0aGlzLCBjdGlfb3Bfc3dpdGNoX3N0cmluZyk7Ci0gICAg
c3R1YkNhbGwuYWRkQXJndW1lbnQoc2NydXRpbmVlKTsKLSAgICBzdHViQ2FsbC5hZGRBcmd1bWVu
dChJbW0zMih0YWJsZUluZGV4KSk7Ci0gICAgc3R1YkNhbGwuY2FsbCgpOwotICAgIGp1bXAocmVn
VDApOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9uZXdfZXJyb3IoSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKLXsKLSAgICB1bnNpZ25lZCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25b
MV0udS5vcGVyYW5kOwotICAgIHVuc2lnbmVkIHR5cGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0u
dS5vcGVyYW5kOwotICAgIHVuc2lnbmVkIG1lc3NhZ2UgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10u
dS5vcGVyYW5kOwotCi0gICAgSklUU3R1YkNhbGwgc3R1YkNhbGwodGhpcywgY3RpX29wX25ld19l
cnJvcik7Ci0gICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoSW1tMzIodHlwZSkpOwotICAgIHN0dWJD
YWxsLmFkZEFyZ3VtZW50KG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChtZXNzYWdlKSk7Ci0gICAg
c3R1YkNhbGwuYWRkQXJndW1lbnQoSW1tMzIobV9ieXRlY29kZUluZGV4KSk7Ci0gICAgc3R1YkNh
bGwuY2FsbChkc3QpOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9kZWJ1ZyhJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQotewotI2lmIEVOQUJMRShERUJVR19XSVRIX0JSRUFLUE9JTlQp
Ci0gICAgVU5VU0VEX1BBUkFNKGN1cnJlbnRJbnN0cnVjdGlvbik7Ci0gICAgYnJlYWtwb2ludCgp
OwotI2Vsc2UKLSAgICBKSVRTdHViQ2FsbCBzdHViQ2FsbCh0aGlzLCBjdGlfb3BfZGVidWcpOwot
ICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KEltbTMyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9w
ZXJhbmQpKTsKLSAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChJbW0zMihjdXJyZW50SW5zdHJ1Y3Rp
b25bMl0udS5vcGVyYW5kKSk7Ci0gICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoSW1tMzIoY3VycmVu
dEluc3RydWN0aW9uWzNdLnUub3BlcmFuZCkpOwotICAgIHN0dWJDYWxsLmNhbGwoKTsKLSNlbmRp
ZgotfQotCi0KLXZvaWQgSklUOjplbWl0X29wX2VudGVyKEluc3RydWN0aW9uKikKLXsKLSAgICAv
LyBFdmVuIHRob3VnaCBKSVQgY29kZSBkb2Vzbid0IHVzZSB0aGVtLCB3ZSBpbml0aWFsaXplIG91
ciBjb25zdGFudAotICAgIC8vIHJlZ2lzdGVycyB0byB6YXAgc3RhbGUgcG9pbnRlcnMsIHRvIGF2
b2lkIHVubmVjZXNzYXJpbHkgcHJvbG9uZ2luZwotICAgIC8vIG9iamVjdCBsaWZldGltZSBhbmQg
aW5jcmVhc2luZyBHQyBwcmVzc3VyZS4KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IG1fY29kZUJs
b2NrLT5tX251bVZhcnM7ICsraSkKLSAgICAgICAgZW1pdFN0b3JlKGksIGpzVW5kZWZpbmVkKCkp
OwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9lbnRlcl93aXRoX2FjdGl2YXRpb24oSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBlbWl0X29wX2VudGVyKGN1cnJlbnRJbnN0
cnVjdGlvbik7Ci0KLSAgICBKSVRTdHViQ2FsbCh0aGlzLCBjdGlfb3BfcHVzaF9hY3RpdmF0aW9u
KS5jYWxsKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpOwotfQotCi12b2lkIEpJVDo6
ZW1pdF9vcF9jcmVhdGVfYXJndW1lbnRzKEluc3RydWN0aW9uKikKLXsKLSAgICBKdW1wIGFyZ3ND
cmVhdGVkID0gYnJhbmNoMzIoTm90RXF1YWwsIHRhZ0ZvcihSZWdpc3RlckZpbGU6OkFyZ3VtZW50
c1JlZ2lzdGVyLCBjYWxsRnJhbWVSZWdpc3RlciksIEltbTMyKEpTVmFsdWU6OkVtcHR5VmFsdWVU
YWcpKTsKLQotICAgIC8vIElmIHdlIGdldCBoZXJlIHRoZSBhcmd1bWVudHMgcG9pbnRlciBpcyBh
IG51bGwgY2VsbCAtIGkuZS4gYXJndW1lbnRzIG5lZWQgbGF6eSBjcmVhdGlvbi4KLSAgICBpZiAo
bV9jb2RlQmxvY2stPm1fbnVtUGFyYW1ldGVycyA9PSAxKQotICAgICAgICBKSVRTdHViQ2FsbCh0
aGlzLCBjdGlfb3BfY3JlYXRlX2FyZ3VtZW50c19ub19wYXJhbXMpLmNhbGwoKTsKLSAgICBlbHNl
Ci0gICAgICAgIEpJVFN0dWJDYWxsKHRoaXMsIGN0aV9vcF9jcmVhdGVfYXJndW1lbnRzKS5jYWxs
KCk7Ci0KLSAgICBhcmdzQ3JlYXRlZC5saW5rKHRoaXMpOwotfQotICAgIAotdm9pZCBKSVQ6OmVt
aXRfb3BfaW5pdF9hcmd1bWVudHMoSW5zdHJ1Y3Rpb24qKQotewotICAgIGVtaXRTdG9yZShSZWdp
c3RlckZpbGU6OkFyZ3VtZW50c1JlZ2lzdGVyLCBKU1ZhbHVlKCksIGNhbGxGcmFtZVJlZ2lzdGVy
KTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfY29udmVydF90aGlzKEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgdW5zaWduZWQgdGhpc1JlZ2lzdGVyID0gY3VycmVudElu
c3RydWN0aW9uWzFdLnUub3BlcmFuZDsKLSAgICAKLSAgICBlbWl0TG9hZCh0aGlzUmVnaXN0ZXIs
IHJlZ1QxLCByZWdUMCk7Ci0KLSAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgcmVn
VDEsIEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpKSk7Ci0KLSAgICBsb2FkUHRyKEFkZHJlc3MocmVn
VDAsIE9CSkVDVF9PRkZTRVRPRihKU0NlbGwsIG1fc3RydWN0dXJlKSksIHJlZ1QyKTsKLSAgICBh
ZGRTbG93Q2FzZShicmFuY2hUZXN0OChOb25aZXJvLCBBZGRyZXNzKHJlZ1QyLCBPQkpFQ1RfT0ZG
U0VUT0YoU3RydWN0dXJlLCBtX3R5cGVJbmZvLm1fZmxhZ3MpKSwgSW1tMzIoTmVlZHNUaGlzQ29u
dmVyc2lvbikpKTsKLQotICAgIG1hcChtX2J5dGVjb2RlSW5kZXggKyBPUENPREVfTEVOR1RIKG9w
X2NvbnZlcnRfdGhpcyksIHRoaXNSZWdpc3RlciwgcmVnVDEsIHJlZ1QwKTsKLX0KLQotdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2NvbnZlcnRfdGhpcyhJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotewotICAgIHVuc2ln
bmVkIHRoaXNSZWdpc3RlciA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7Ci0KLSAg
ICBsaW5rU2xvd0Nhc2UoaXRlcik7Ci0gICAgbGlua1Nsb3dDYXNlKGl0ZXIpOwotCi0gICAgSklU
U3R1YkNhbGwgc3R1YkNhbGwodGhpcywgY3RpX29wX2NvbnZlcnRfdGhpcyk7Ci0gICAgc3R1YkNh
bGwuYWRkQXJndW1lbnQocmVnVDEsIHJlZ1QwKTsKLSAgICBzdHViQ2FsbC5jYWxsKHRoaXNSZWdp
c3Rlcik7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX3Byb2ZpbGVfd2lsbF9jYWxsKEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgcGVlayhyZWdUMiwgT0JKRUNUX09GRlNF
VE9GKEpJVFN0YWNrRnJhbWUsIGVuYWJsZWRQcm9maWxlclJlZmVyZW5jZSkgLyBzaXplb2YgKHZv
aWQqKSk7Ci0gICAgSnVtcCBub1Byb2ZpbGVyID0gYnJhbmNoVGVzdFB0cihaZXJvLCBBZGRyZXNz
KHJlZ1QyKSk7Ci0KLSAgICBKSVRTdHViQ2FsbCBzdHViQ2FsbCh0aGlzLCBjdGlfb3BfcHJvZmls
ZV93aWxsX2NhbGwpOwotICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KGN1cnJlbnRJbnN0cnVjdGlv
blsxXS51Lm9wZXJhbmQpOwotICAgIHN0dWJDYWxsLmNhbGwoKTsKLSAgICBub1Byb2ZpbGVyLmxp
bmsodGhpcyk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX3Byb2ZpbGVfZGlkX2NhbGwoSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBwZWVrKHJlZ1QyLCBPQkpFQ1RfT0ZG
U0VUT0YoSklUU3RhY2tGcmFtZSwgZW5hYmxlZFByb2ZpbGVyUmVmZXJlbmNlKSAvIHNpemVvZiAo
dm9pZCopKTsKLSAgICBKdW1wIG5vUHJvZmlsZXIgPSBicmFuY2hUZXN0UHRyKFplcm8sIEFkZHJl
c3MocmVnVDIpKTsKLQotICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGN0aV9vcF9wcm9m
aWxlX2RpZF9jYWxsKTsKLSAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChjdXJyZW50SW5zdHJ1Y3Rp
b25bMV0udS5vcGVyYW5kKTsKLSAgICBzdHViQ2FsbC5jYWxsKCk7Ci0gICAgbm9Qcm9maWxlci5s
aW5rKHRoaXMpOwotfQotCi0jZWxzZSAvLyBVU0UoSlNWQUxVRTMyXzY0KQorI2lmICFVU0UoSlNW
QUxVRTMyXzY0KQogCiAjZGVmaW5lIFJFQ09SRF9KVU1QX1RBUkdFVCh0YXJnZXRPZmZzZXQpIFwK
ICAgIGRvIHsgbV9sYWJlbHNbbV9ieXRlY29kZUluZGV4ICsgKHRhcmdldE9mZnNldCldLnVzZWQo
KTsgfSB3aGlsZSAoZmFsc2UpCkBAIC0zMDk1LDcgKzE2MDksNyBAQCB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfdG9fanNudW1iZXIoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9y
PFNsb3dDYQogICAgIHN0dWJDYWxsLmNhbGwoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFu
ZCk7CiB9CiAKLSNlbmRpZiAvLyBVU0UoSlNWQUxVRTMyXzY0KQorI2VuZGlmIC8vICFVU0UoSlNW
QUxVRTMyXzY0KQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX2dsb2JhbF9keW5hbWljKElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcCBiL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNv
ZGVzMzJfNjQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjM0M2ExYzRlNWRjMGJkZjkyZTllNWE2MThjZjM0ODU1
NGJlNzYxNGUKLS0tIC9kZXYvbnVsbAorKysgYi9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rl
czMyXzY0LmNwcApAQCAtMCwwICsxLDE1MjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEwIFBh
dHJpY2sgR2Fuc3RlcmVyIDxwYXJvZ2FAcGFyb2dhLmNvbT4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpJ
VC5oIgorCisjaWYgRU5BQkxFKEpJVCkgJiYgVVNFKEpTVkFMVUUzMl82NCkKKworI2luY2x1ZGUg
IkpJVElubGluZU1ldGhvZHMuaCIKKyNpbmNsdWRlICJKSVRTdHViQ2FsbC5oIgorI2luY2x1ZGUg
IkpTQXJyYXkuaCIKKyNpbmNsdWRlICJKU0NlbGwuaCIKKyNpbmNsdWRlICJKU0Z1bmN0aW9uLmgi
CisjaW5jbHVkZSAiSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5oIgorI2luY2x1ZGUgIkxpbmtCdWZm
ZXIuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3ZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUNUSU1h
Y2hpbmVUcmFtcG9saW5lcyhSZWZQdHI8RXhlY3V0YWJsZVBvb2w+KiBleGVjdXRhYmxlUG9vbCwg
SlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBUcmFtcG9saW5lU3RydWN0dXJlICp0cmFtcG9saW5l
cykKK3sKKyNpZiBFTkFCTEUoSklUX09QVElNSVpFX01PRCkKKyAgICBMYWJlbCBzb2Z0TW9kQmVn
aW4gPSBhbGlnbigpOworICAgIHNvZnRNb2R1bG8oKTsKKyNlbmRpZgorI2lmIEVOQUJMRShKSVRf
T1BUSU1JWkVfUFJPUEVSVFlfQUNDRVNTKQorICAgIC8vICgxKSBUaGlzIGZ1bmN0aW9uIHByb3Zp
ZGVzIGZhc3QgcHJvcGVydHkgYWNjZXNzIGZvciBzdHJpbmcgbGVuZ3RoCisgICAgTGFiZWwgc3Ry
aW5nTGVuZ3RoQmVnaW4gPSBhbGlnbigpOworCisgICAgLy8gcmVnVDAgaG9sZHMgcGF5bG9hZCwg
cmVnVDEgaG9sZHMgdGFnCisKKyAgICBKdW1wIHN0cmluZ19mYWlsdXJlQ2FzZXMxID0gYnJhbmNo
MzIoTm90RXF1YWwsIHJlZ1QxLCBJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSk7CisgICAgSnVtcCBz
dHJpbmdfZmFpbHVyZUNhc2VzMiA9IGJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMCks
IEltbVB0cihtX2dsb2JhbERhdGEtPmpzU3RyaW5nVlB0cikpOworCisgICAgLy8gQ2hlY2tzIG91
dCBva2F5ISAtIGdldCB0aGUgbGVuZ3RoIGZyb20gdGhlIFVzdHJpbmcuCisgICAgbG9hZDMyKEFk
ZHJlc3MocmVnVDAsIE9CSkVDVF9PRkZTRVRPRihKU1N0cmluZywgbV9sZW5ndGgpKSwgcmVnVDIp
OworCisgICAgSnVtcCBzdHJpbmdfZmFpbHVyZUNhc2VzMyA9IGJyYW5jaDMyKEFib3ZlLCByZWdU
MiwgSW1tMzIoSU5UX01BWCkpOworICAgIG1vdmUocmVnVDIsIHJlZ1QwKTsKKyAgICBtb3ZlKElt
bTMyKEpTVmFsdWU6OkludDMyVGFnKSwgcmVnVDEpOworCisgICAgcmV0KCk7CisjZW5kaWYKKwor
ICAgIC8vICgyKSBUcmFtcG9saW5lcyBmb3IgdGhlIHNsb3cgY2FzZXMgb2Ygb3BfY2FsbCAvIG9w
X2NhbGxfZXZhbCAvIG9wX2NvbnN0cnVjdC4KKworI2lmIEVOQUJMRShKSVRfT1BUSU1JWkVfQ0FM
TCkKKyAgICAvLyBWaXJ0dWFsQ2FsbExpbmsgVHJhbXBvbGluZQorICAgIC8vIHJlZ1QwIGhvbGRz
IGNhbGxlZSwgcmVnVDEgaG9sZHMgYXJnQ291bnQuICByZWdUMiB3aWxsIGhvbGQgdGhlIEZ1bmN0
aW9uRXhlY3V0YWJsZS4KKyAgICBMYWJlbCB2aXJ0dWFsQ2FsbExpbmtCZWdpbiA9IGFsaWduKCk7
CisgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBPQkpFQ1RfT0ZGU0VUT0YoSlNGdW5jdGlvbiwg
bV9leGVjdXRhYmxlKSksIHJlZ1QyKTsKKworICAgIEp1bXAgaXNOYXRpdmVGdW5jMiA9IGJyYW5j
aDMyKEVxdWFsLCBBZGRyZXNzKHJlZ1QyLCBPQkpFQ1RfT0ZGU0VUT0YoRnVuY3Rpb25FeGVjdXRh
YmxlLCBtX251bVBhcmFtZXRlcnMpKSwgSW1tMzIoMCkpOworCisgICAgSnVtcCBoYXNDb2RlQmxv
Y2syID0gYnJhbmNoMzIoR3JlYXRlclRoYW4sIEFkZHJlc3MocmVnVDIsIE9CSkVDVF9PRkZTRVRP
RihGdW5jdGlvbkV4ZWN1dGFibGUsIG1fbnVtUGFyYW1ldGVycykpLCBJbW0zMigwKSk7CisgICAg
cHJlc2VydmVSZXR1cm5BZGRyZXNzQWZ0ZXJDYWxsKHJlZ1QzKTsKKyAgICByZXN0b3JlQXJndW1l
bnRSZWZlcmVuY2UoKTsKKyAgICBDYWxsIGNhbGxKU0Z1bmN0aW9uMiA9IGNhbGwoKTsKKyAgICBs
b2FkUHRyKEFkZHJlc3MocmVnVDAsIE9CSkVDVF9PRkZTRVRPRihKU0Z1bmN0aW9uLCBtX2V4ZWN1
dGFibGUpKSwgcmVnVDIpOworICAgIGVtaXRHZXRKSVRTdHViQXJnKDIsIHJlZ1QxKTsgLy8gYXJn
Q291bnQKKyAgICByZXN0b3JlUmV0dXJuQWRkcmVzc0JlZm9yZVJldHVybihyZWdUMyk7CisgICAg
aGFzQ29kZUJsb2NrMi5saW5rKHRoaXMpOworCisgICAgLy8gQ2hlY2sgYXJnQ291bnQgbWF0Y2hl
cyBjYWxsZWUgYXJpdHkuCisgICAgSnVtcCBhcml0eUNoZWNrT2theTIgPSBicmFuY2gzMihFcXVh
bCwgQWRkcmVzcyhyZWdUMiwgT0JKRUNUX09GRlNFVE9GKEZ1bmN0aW9uRXhlY3V0YWJsZSwgbV9u
dW1QYXJhbWV0ZXJzKSksIHJlZ1QxKTsKKyAgICBwcmVzZXJ2ZVJldHVybkFkZHJlc3NBZnRlckNh
bGwocmVnVDMpOworICAgIGVtaXRQdXRKSVRTdHViQXJnKHJlZ1QzLCAxKTsgLy8gcmV0dXJuIGFk
ZHJlc3MKKyAgICByZXN0b3JlQXJndW1lbnRSZWZlcmVuY2UoKTsKKyAgICBDYWxsIGNhbGxBcml0
eUNoZWNrMiA9IGNhbGwoKTsKKyAgICBtb3ZlKHJlZ1QxLCBjYWxsRnJhbWVSZWdpc3Rlcik7Cisg
ICAgZW1pdEdldEpJVFN0dWJBcmcoMiwgcmVnVDEpOyAvLyBhcmdDb3VudAorICAgIHJlc3RvcmVS
ZXR1cm5BZGRyZXNzQmVmb3JlUmV0dXJuKHJlZ1QzKTsKKyAgICBhcml0eUNoZWNrT2theTIubGlu
ayh0aGlzKTsKKworICAgIGlzTmF0aXZlRnVuYzIubGluayh0aGlzKTsKKworICAgIGNvbXBpbGVP
cENhbGxJbml0aWFsaXplQ2FsbEZyYW1lKCk7CisKKyAgICBwcmVzZXJ2ZVJldHVybkFkZHJlc3NB
ZnRlckNhbGwocmVnVDMpOworICAgIGVtaXRQdXRKSVRTdHViQXJnKHJlZ1QzLCAxKTsgLy8gcmV0
dXJuIGFkZHJlc3MKKyAgICByZXN0b3JlQXJndW1lbnRSZWZlcmVuY2UoKTsKKyAgICBDYWxsIGNh
bGxMYXp5TGlua0NhbGwgPSBjYWxsKCk7CisgICAgcmVzdG9yZVJldHVybkFkZHJlc3NCZWZvcmVS
ZXR1cm4ocmVnVDMpOworICAgIGp1bXAocmVnVDApOworI2VuZGlmIC8vIEVOQUJMRShKSVRfT1BU
SU1JWkVfQ0FMTCkKKworICAgIC8vIFZpcnR1YWxDYWxsIFRyYW1wb2xpbmUKKyAgICAvLyByZWdU
MCBob2xkcyBjYWxsZWUsIHJlZ1QxIGhvbGRzIGFyZ0NvdW50LiAgcmVnVDIgd2lsbCBob2xkIHRo
ZSBGdW5jdGlvbkV4ZWN1dGFibGUuCisgICAgTGFiZWwgdmlydHVhbENhbGxCZWdpbiA9IGFsaWdu
KCk7CisgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBPQkpFQ1RfT0ZGU0VUT0YoSlNGdW5jdGlv
biwgbV9leGVjdXRhYmxlKSksIHJlZ1QyKTsKKworICAgIEp1bXAgaXNOYXRpdmVGdW5jMyA9IGJy
YW5jaDMyKEVxdWFsLCBBZGRyZXNzKHJlZ1QyLCBPQkpFQ1RfT0ZGU0VUT0YoRnVuY3Rpb25FeGVj
dXRhYmxlLCBtX251bVBhcmFtZXRlcnMpKSwgSW1tMzIoMCkpOworCisgICAgSnVtcCBoYXNDb2Rl
QmxvY2szID0gYnJhbmNoMzIoR3JlYXRlclRoYW4sIEFkZHJlc3MocmVnVDIsIE9CSkVDVF9PRkZT
RVRPRihGdW5jdGlvbkV4ZWN1dGFibGUsIG1fbnVtUGFyYW1ldGVycykpLCBJbW0zMigwKSk7Cisg
ICAgcHJlc2VydmVSZXR1cm5BZGRyZXNzQWZ0ZXJDYWxsKHJlZ1QzKTsKKyAgICByZXN0b3JlQXJn
dW1lbnRSZWZlcmVuY2UoKTsKKyAgICBDYWxsIGNhbGxKU0Z1bmN0aW9uMSA9IGNhbGwoKTsKKyAg
ICBlbWl0R2V0SklUU3R1YkFyZygyLCByZWdUMSk7IC8vIGFyZ0NvdW50CisgICAgcmVzdG9yZVJl
dHVybkFkZHJlc3NCZWZvcmVSZXR1cm4ocmVnVDMpOworICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdU
MCwgT0JKRUNUX09GRlNFVE9GKEpTRnVuY3Rpb24sIG1fZXhlY3V0YWJsZSkpLCByZWdUMik7Cisg
ICAgaGFzQ29kZUJsb2NrMy5saW5rKHRoaXMpOworCisgICAgLy8gQ2hlY2sgYXJnQ291bnQgbWF0
Y2hlcyBjYWxsZWUgYXJpdHkuCisgICAgSnVtcCBhcml0eUNoZWNrT2theTMgPSBicmFuY2gzMihF
cXVhbCwgQWRkcmVzcyhyZWdUMiwgT0JKRUNUX09GRlNFVE9GKEZ1bmN0aW9uRXhlY3V0YWJsZSwg
bV9udW1QYXJhbWV0ZXJzKSksIHJlZ1QxKTsKKyAgICBwcmVzZXJ2ZVJldHVybkFkZHJlc3NBZnRl
ckNhbGwocmVnVDMpOworICAgIGVtaXRQdXRKSVRTdHViQXJnKHJlZ1QzLCAxKTsgLy8gcmV0dXJu
IGFkZHJlc3MKKyAgICByZXN0b3JlQXJndW1lbnRSZWZlcmVuY2UoKTsKKyAgICBDYWxsIGNhbGxB
cml0eUNoZWNrMSA9IGNhbGwoKTsKKyAgICBtb3ZlKHJlZ1QxLCBjYWxsRnJhbWVSZWdpc3Rlcik7
CisgICAgZW1pdEdldEpJVFN0dWJBcmcoMiwgcmVnVDEpOyAvLyBhcmdDb3VudAorICAgIHJlc3Rv
cmVSZXR1cm5BZGRyZXNzQmVmb3JlUmV0dXJuKHJlZ1QzKTsKKyAgICBsb2FkUHRyKEFkZHJlc3Mo
cmVnVDAsIE9CSkVDVF9PRkZTRVRPRihKU0Z1bmN0aW9uLCBtX2V4ZWN1dGFibGUpKSwgcmVnVDIp
OworICAgIGFyaXR5Q2hlY2tPa2F5My5saW5rKHRoaXMpOworCisgICAgaXNOYXRpdmVGdW5jMy5s
aW5rKHRoaXMpOworCisgICAgY29tcGlsZU9wQ2FsbEluaXRpYWxpemVDYWxsRnJhbWUoKTsKKyAg
ICBsb2FkUHRyKEFkZHJlc3MocmVnVDIsIE9CSkVDVF9PRkZTRVRPRihGdW5jdGlvbkV4ZWN1dGFi
bGUsIG1faml0Q29kZSkpLCByZWdUMCk7CisgICAganVtcChyZWdUMCk7CisKKyNpZiBDUFUoWDg2
KSB8fCBDUFUoQVJNX1RSQURJVElPTkFMKQorICAgIExhYmVsIG5hdGl2ZUNhbGxUaHVuayA9IGFs
aWduKCk7CisgICAgcHJlc2VydmVSZXR1cm5BZGRyZXNzQWZ0ZXJDYWxsKHJlZ1QwKTsKKyAgICBl
bWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIocmVnVDAsIFJlZ2lzdGVyRmlsZTo6UmV0dXJuUEMpOyAv
LyBQdXNoIHJldHVybiBhZGRyZXNzCisKKyAgICAvLyBMb2FkIGNhbGxlciBmcmFtZSdzIHNjb3Bl
IGNoYWluIGludG8gdGhpcyBjYWxsZnJhbWUgc28gdGhhdCB3aGF0ZXZlciB3ZSBjYWxsIGNhbgor
ICAgIC8vIGdldCB0byBpdHMgZ2xvYmFsIGRhdGEuCisgICAgZW1pdEdldEZyb21DYWxsRnJhbWVI
ZWFkZXJQdHIoUmVnaXN0ZXJGaWxlOjpDYWxsZXJGcmFtZSwgcmVnVDEpOworICAgIGVtaXRHZXRG
cm9tQ2FsbEZyYW1lSGVhZGVyUHRyKFJlZ2lzdGVyRmlsZTo6U2NvcGVDaGFpbiwgcmVnVDEsIHJl
Z1QxKTsKKyAgICBlbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIocmVnVDEsIFJlZ2lzdGVyRmlsZTo6
U2NvcGVDaGFpbik7CisKKyNpZiBDUFUoWDg2KQorICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVh
ZGVyMzIoUmVnaXN0ZXJGaWxlOjpBcmd1bWVudENvdW50LCByZWdUMCk7CisKKyAgICAvKiBXZSBo
YXZlIHR3byBzdHJ1Y3RzIHRoYXQgd2UgdXNlIHRvIGRlc2NyaWJlIHRoZSBzdGFja2ZyYW1lIHdl
IHNldCB1cCBmb3Igb3VyCisgICAgICogY2FsbCB0byBuYXRpdmUgY29kZS4gIE5hdGl2ZUNhbGxG
cmFtZVN0cnVjdHVyZSBkZXNjcmliZXMgdGhlIGhvdyB3ZSBzZXQgdXAgdGhlIHN0YWNrCisgICAg
ICogaW4gYWR2YW5jZSBvZiB0aGUgY2FsbC4gIE5hdGl2ZUZ1bmN0aW9uQ2FsbGVlU2lnbmF0dXJl
IGRlc2NyaWJlcyB0aGUgY2FsbGZyYW1lCisgICAgICogYXMgdGhlIG5hdGl2ZSBjb2RlIGV4cGVj
dHMgaXQuICBXZSBkbyB0aGlzIGFzIHdlIGFyZSB1c2luZyB0aGUgZmFzdGNhbGwgY2FsbGluZwor
ICAgICAqIGNvbnZlbnRpb24gd2hpY2ggcmVzdWx0cyBpbiB0aGUgY2FsbGVlIHBvcHBpbmcgaXRz
IGFyZ3VtZW50cyBvZmYgdGhlIHN0YWNrLCBidXQKKyAgICAgKiBub3QgdGhlIHJlc3Qgb2YgdGhl
IGNhbGxmcmFtZSBzbyB3ZSBuZWVkIGEgbmljZSB3YXkgdG8gZW5zdXJlIHdlIGluY3JlbWVudCB0
aGUKKyAgICAgKiBzdGFjayBwb2ludGVyIGJ5IHRoZSByaWdodCBhbW91bnQgYWZ0ZXIgdGhlIGNh
bGwuCisgICAgICovCisKKyNpZiBDT01QSUxFUihNU1ZDKSB8fCBPUyhMSU5VWCkKKyNpZiBDT01Q
SUxFUihNU1ZDKQorI3ByYWdtYSBwYWNrKHB1c2gpCisjcHJhZ21hIHBhY2soNCkKKyNlbmRpZiAv
LyBDT01QSUxFUihNU1ZDKQorICAgIHN0cnVjdCBOYXRpdmVDYWxsRnJhbWVTdHJ1Y3R1cmUgewor
ICAgICAgICAvLyAgQ2FsbEZyYW1lKiBjYWxsRnJhbWU7IC8vIHBhc3NlZCBpbiBFRFgKKyAgICAg
ICAgSlNPYmplY3QqIGNhbGxlZTsKKyAgICAgICAgSlNWYWx1ZSB0aGlzVmFsdWU7CisgICAgICAg
IEFyZ0xpc3QqIGFyZ1BvaW50ZXI7CisgICAgICAgIEFyZ0xpc3QgYXJnczsKKyAgICAgICAgSlNW
YWx1ZSByZXN1bHQ7CisgICAgfTsKKyAgICBzdHJ1Y3QgTmF0aXZlRnVuY3Rpb25DYWxsZWVTaWdu
YXR1cmUgeworICAgICAgICBKU09iamVjdCogY2FsbGVlOworICAgICAgICBKU1ZhbHVlIHRoaXNW
YWx1ZTsKKyAgICAgICAgQXJnTGlzdCogYXJnUG9pbnRlcjsKKyAgICB9OworI2lmIENPTVBJTEVS
KE1TVkMpCisjcHJhZ21hIHBhY2socG9wKQorI2VuZGlmIC8vIENPTVBJTEVSKE1TVkMpCisjZWxz
ZQorICAgIHN0cnVjdCBOYXRpdmVDYWxsRnJhbWVTdHJ1Y3R1cmUgeworICAgICAgICAvLyAgQ2Fs
bEZyYW1lKiBjYWxsRnJhbWU7IC8vIHBhc3NlZCBpbiBFQ1gKKyAgICAgICAgLy8gIEpTT2JqZWN0
KiBjYWxsZWU7IC8vIHBhc3NlZCBpbiBFRFgKKyAgICAgICAgSlNWYWx1ZSB0aGlzVmFsdWU7Cisg
ICAgICAgIEFyZ0xpc3QqIGFyZ1BvaW50ZXI7CisgICAgICAgIEFyZ0xpc3QgYXJnczsKKyAgICB9
OworICAgIHN0cnVjdCBOYXRpdmVGdW5jdGlvbkNhbGxlZVNpZ25hdHVyZSB7CisgICAgICAgIEpT
VmFsdWUgdGhpc1ZhbHVlOworICAgICAgICBBcmdMaXN0KiBhcmdQb2ludGVyOworICAgIH07Cisj
ZW5kaWYKKworICAgIGNvbnN0IGludCBOYXRpdmVDYWxsRnJhbWVTaXplID0gKHNpemVvZihOYXRp
dmVDYWxsRnJhbWVTdHJ1Y3R1cmUpICsgMTUpICYgfjE1OworICAgIC8vIEFsbG9jYXRlIHN5c3Rl
bSBzdGFjayBmcmFtZQorICAgIHN1YlB0cihJbW0zMihOYXRpdmVDYWxsRnJhbWVTaXplKSwgc3Rh
Y2tQb2ludGVyUmVnaXN0ZXIpOworCisgICAgLy8gU2V0IHVwIGFyZ3VtZW50cworICAgIHN1YlB0
cihJbW0zMigxKSwgcmVnVDApOyAvLyBEb24ndCBpbmNsdWRlICd0aGlzJyBpbiBhcmdjb3VudAor
CisgICAgLy8gcHVzaCBhcmdjb3VudAorICAgIHN0b3JlUHRyKHJlZ1QwLCBBZGRyZXNzKHN0YWNr
UG9pbnRlclJlZ2lzdGVyLCBPQkpFQ1RfT0ZGU0VUT0YoTmF0aXZlQ2FsbEZyYW1lU3RydWN0dXJl
LCBhcmdzKSArIE9CSkVDVF9PRkZTRVRPRihBcmdMaXN0LCBtX2FyZ0NvdW50KSkpOworCisgICAg
Ly8gQ2FsY3VsYXRlIHRoZSBzdGFydCBvZiB0aGUgY2FsbGZyYW1lIGhlYWRlciwgYW5kIHN0b3Jl
IGluIHJlZ1QxCisgICAgYWRkUHRyKEltbTMyKC1SZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhlYWRl
clNpemUgKiAoaW50KXNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3RlciwgcmVnVDEp
OworCisgICAgLy8gQ2FsY3VsYXRlIHN0YXJ0IG9mIGFyZ3VtZW50cyBhcyBjYWxsZnJhbWUgaGVh
ZGVyIC0gc2l6ZW9mKFJlZ2lzdGVyKSAqIGFyZ2NvdW50IChyZWdUMCkKKyAgICBtdWwzMihJbW0z
MihzaXplb2YoUmVnaXN0ZXIpKSwgcmVnVDAsIHJlZ1QwKTsKKyAgICBzdWJQdHIocmVnVDAsIHJl
Z1QxKTsKKyAgICBzdG9yZVB0cihyZWdUMSwgQWRkcmVzcyhzdGFja1BvaW50ZXJSZWdpc3Rlciwg
T0JKRUNUX09GRlNFVE9GKE5hdGl2ZUNhbGxGcmFtZVN0cnVjdHVyZSwgYXJncykgKyBPQkpFQ1Rf
T0ZGU0VUT0YoQXJnTGlzdCwgbV9hcmdzKSkpOworCisgICAgLy8gQXJnTGlzdCBpcyBwYXNzZWQg
YnkgcmVmZXJlbmNlIHNvIGlzIHN0YWNrUG9pbnRlclJlZ2lzdGVyICsgNCAqIHNpemVvZihSZWdp
c3RlcikKKyAgICBhZGRQdHIoSW1tMzIoT0JKRUNUX09GRlNFVE9GKE5hdGl2ZUNhbGxGcmFtZVN0
cnVjdHVyZSwgYXJncykpLCBzdGFja1BvaW50ZXJSZWdpc3RlciwgcmVnVDApOworICAgIHN0b3Jl
UHRyKHJlZ1QwLCBBZGRyZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCBPQkpFQ1RfT0ZGU0VUT0Yo
TmF0aXZlQ2FsbEZyYW1lU3RydWN0dXJlLCBhcmdQb2ludGVyKSkpOworCisgICAgLy8gcmVnVDEg
Y3VycmVudGx5IHBvaW50cyB0byB0aGUgZmlyc3QgYXJndW1lbnQsIHJlZ1QxIC0gc2l6ZW9mKFJl
Z2lzdGVyKSBwb2ludHMgdG8gJ3RoaXMnCisgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QxLCAtKGlu
dClzaXplb2YoUmVnaXN0ZXIpICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBh
eWxvYWQpKSwgcmVnVDIpOworICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMSwgLShpbnQpc2l6ZW9m
KFJlZ2lzdGVyKSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSwgcmVn
VDMpOworICAgIHN0b3JlUHRyKHJlZ1QyLCBBZGRyZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCBP
QkpFQ1RfT0ZGU0VUT0YoTmF0aXZlQ2FsbEZyYW1lU3RydWN0dXJlLCB0aGlzVmFsdWUpICsgT0JK
RUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSk7CisgICAgc3RvcmVQdHIo
cmVnVDMsIEFkZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIsIE9CSkVDVF9PRkZTRVRPRihOYXRp
dmVDYWxsRnJhbWVTdHJ1Y3R1cmUsIHRoaXNWYWx1ZSkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1
ZSwgdS5hc0JpdHMudGFnKSkpOworCisjaWYgQ09NUElMRVIoTVNWQykgfHwgT1MoTElOVVgpCisg
ICAgLy8gQXJnTGlzdCBpcyBwYXNzZWQgYnkgcmVmZXJlbmNlIHNvIGlzIHN0YWNrUG9pbnRlclJl
Z2lzdGVyICsgNCAqIHNpemVvZihSZWdpc3RlcikKKyAgICBhZGRQdHIoSW1tMzIoT0JKRUNUX09G
RlNFVE9GKE5hdGl2ZUNhbGxGcmFtZVN0cnVjdHVyZSwgcmVzdWx0KSksIHN0YWNrUG9pbnRlclJl
Z2lzdGVyLCBYODZSZWdpc3RlcnM6OmVjeCk7CisKKyAgICAvLyBQbGFudCBjYWxsZWUKKyAgICBl
bWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihSZWdpc3RlckZpbGU6OkNhbGxlZSwgWDg2UmVn
aXN0ZXJzOjplYXgpOworICAgIHN0b3JlUHRyKFg4NlJlZ2lzdGVyczo6ZWF4LCBBZGRyZXNzKHN0
YWNrUG9pbnRlclJlZ2lzdGVyLCBPQkpFQ1RfT0ZGU0VUT0YoTmF0aXZlQ2FsbEZyYW1lU3RydWN0
dXJlLCBjYWxsZWUpKSk7CisKKyAgICAvLyBQbGFudCBjYWxsZnJhbWUKKyAgICBtb3ZlKGNhbGxG
cmFtZVJlZ2lzdGVyLCBYODZSZWdpc3RlcnM6OmVkeCk7CisKKyAgICBjYWxsKEFkZHJlc3MoWDg2
UmVnaXN0ZXJzOjplYXgsIE9CSkVDVF9PRkZTRVRPRihKU0Z1bmN0aW9uLCBtX2RhdGEpKSk7CisK
KyAgICAvLyBKU1ZhbHVlIGlzIGEgbm9uLVBPRCB0eXBlLCBzbyBlYXggcG9pbnRzIHRvIGl0Cisg
ICAgZW1pdExvYWQoMCwgcmVnVDEsIHJlZ1QwLCBYODZSZWdpc3RlcnM6OmVheCk7CisjZWxzZQor
ICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKFJlZ2lzdGVyRmlsZTo6Q2FsbGVlLCBY
ODZSZWdpc3RlcnM6OmVkeCk7IC8vIGNhbGxlZQorICAgIG1vdmUoY2FsbEZyYW1lUmVnaXN0ZXIs
IFg4NlJlZ2lzdGVyczo6ZWN4KTsgLy8gY2FsbEZyYW1lCisgICAgY2FsbChBZGRyZXNzKFg4NlJl
Z2lzdGVyczo6ZWR4LCBPQkpFQ1RfT0ZGU0VUT0YoSlNGdW5jdGlvbiwgbV9kYXRhKSkpOworI2Vu
ZGlmCisKKyAgICAvLyBXZSd2ZSBwdXQgYSBmZXcgdGVtcG9yYXJpZXMgb24gdGhlIHN0YWNrIGlu
IGFkZGl0aW9uIHRvIHRoZSBhY3R1YWwgYXJndW1lbnRzCisgICAgLy8gc28gcHVsbCB0aGVtIG9m
ZiBub3cKKyAgICBhZGRQdHIoSW1tMzIoTmF0aXZlQ2FsbEZyYW1lU2l6ZSAtIHNpemVvZihOYXRp
dmVGdW5jdGlvbkNhbGxlZVNpZ25hdHVyZSkpLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisKKyNl
bGlmIENQVShBUk1fVFJBRElUSU9OQUwpCisgICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXIz
MihSZWdpc3RlckZpbGU6OkFyZ3VtZW50Q291bnQsIHJlZ1QwKTsKKworICAgIC8vIEFsbG9jYXRl
IHN0YWNrIHNwYWNlIGZvciBvdXIgYXJnbGlzdAorICAgIENPTVBJTEVfQVNTRVJUKChzaXplb2Yo
QXJnTGlzdCkgJiAweDcpID09IDAgJiYgc2l6ZW9mKEpTVmFsdWUpID09IDggJiYgc2l6ZW9mKFJl
Z2lzdGVyKSA9PSA4LCBBcmdMaXN0X3Nob3VsZF9ieV84Ynl0ZV9hbGlnbmVkKTsKKyAgICBzdWJQ
dHIoSW1tMzIoc2l6ZW9mKEFyZ0xpc3QpKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworCisgICAg
Ly8gU2V0IHVwIGFyZ3VtZW50cworICAgIHN1YlB0cihJbW0zMigxKSwgcmVnVDApOyAvLyBEb24n
dCBpbmNsdWRlICd0aGlzJyBpbiBhcmdjb3VudAorCisgICAgLy8gUHVzaCBhcmdjb3VudAorICAg
IHN0b3JlUHRyKHJlZ1QwLCBBZGRyZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCBPQkpFQ1RfT0ZG
U0VUT0YoQXJnTGlzdCwgbV9hcmdDb3VudCkpKTsKKworICAgIC8vIENhbGN1bGF0ZSB0aGUgc3Rh
cnQgb2YgdGhlIGNhbGxmcmFtZSBoZWFkZXIsIGFuZCBzdG9yZSBpbiByZWdUMQorICAgIG1vdmUo
Y2FsbEZyYW1lUmVnaXN0ZXIsIHJlZ1QxKTsKKyAgICBzdWIzMihJbW0zMihSZWdpc3RlckZpbGU6
OkNhbGxGcmFtZUhlYWRlclNpemUgKiAoaW50MzJfdClzaXplb2YoUmVnaXN0ZXIpKSwgcmVnVDEp
OworCisgICAgLy8gQ2FsY3VsYXRlIHN0YXJ0IG9mIGFyZ3VtZW50cyBhcyBjYWxsZnJhbWUgaGVh
ZGVyIC0gc2l6ZW9mKFJlZ2lzdGVyKSAqIGFyZ2NvdW50IChyZWdUMSkKKyAgICBtdWwzMihJbW0z
MihzaXplb2YoUmVnaXN0ZXIpKSwgcmVnVDAsIHJlZ1QwKTsKKyAgICBzdWJQdHIocmVnVDAsIHJl
Z1QxKTsKKworICAgIC8vIHB1c2ggcG9pbnRlciB0byBhcmd1bWVudHMKKyAgICBzdG9yZVB0cihy
ZWdUMSwgQWRkcmVzcyhzdGFja1BvaW50ZXJSZWdpc3RlciwgT0JKRUNUX09GRlNFVE9GKEFyZ0xp
c3QsIG1fYXJncykpKTsKKworICAgIC8vIEFyZ3VtZW50IHBhc3NpbmcgbWV0aG9kOgorICAgIC8v
IHIwIC0gcG9pbnRzIHRvIHJldHVybiB2YWx1ZQorICAgIC8vIHIxIC0gY2FsbEZyYW1lCisgICAg
Ly8gcjIgLSBjYWxsZWUKKyAgICAvLyBzdGFjazogdGhpcyhKU1ZhbHVlKSBhbmQgYSBwb2ludGVy
IHRvIEFyZ0xpc3QKKworI2lmIE9TKFdJTkNFKQorICAgIC8vIFNldHVwIGFyZzQ6CisgICAgcHVz
aChzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisKKyAgICAvLyBTZXR1cCBhcmczOgorICAgIC8vIHJl
Z1QxIGN1cnJlbnRseSBwb2ludHMgdG8gdGhlIGZpcnN0IGFyZ3VtZW50LCByZWdUMS1zaXplb2Yo
UmVnaXN0ZXIpIHBvaW50cyB0byAndGhpcycKKyAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMSwgLShp
bnQzMl90KXNpemVvZih2b2lkKikgKiAyKSwgQVJNUmVnaXN0ZXJzOjpyMyk7CisgICAgcHVzaChB
Uk1SZWdpc3RlcnM6OnIzKTsKKyAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMSwgLShpbnQzMl90KXNp
emVvZih2b2lkKikpLCByZWdUMyk7CisgICAgc3RvcmVQdHIocmVnVDMsIEFkZHJlc3Moc3RhY2tQ
b2ludGVyUmVnaXN0ZXIpKTsKKworICAgIC8vIFNldHVwIGFyZzI6CisgICAgZW1pdEdldEZyb21D
YWxsRnJhbWVIZWFkZXJQdHIoUmVnaXN0ZXJGaWxlOjpDYWxsZWUsIHJlZ1QyKTsKKworICAgIC8v
IFNldHVwIGFyZzE6CisgICAgbW92ZShjYWxsRnJhbWVSZWdpc3RlciwgcmVnVDEpOworCisgICAg
Ly8gU2V0dXAgYXJnMDoKKyAgICBtb3ZlKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCByZWdUMCk7CisK
KyAgICBjYWxsKEFkZHJlc3MocmVnVDIsIE9CSkVDVF9PRkZTRVRPRihKU0Z1bmN0aW9uLCBtX2Rh
dGEpKSk7CisKKyAgICBsb2FkMzIoQWRkcmVzcyhzdGFja1BvaW50ZXJSZWdpc3RlciwgMCksIHJl
Z1QwKTsKKyAgICBsb2FkMzIoQWRkcmVzcyhzdGFja1BvaW50ZXJSZWdpc3RlciwgNCksIHJlZ1Qx
KTsKKworICAgIGFkZFB0cihJbW0zMihzaXplb2YoQXJnTGlzdCkgKyA4KSwgc3RhY2tQb2ludGVy
UmVnaXN0ZXIpOworI2Vsc2UgLy8gT1MoV0lOQ0UpCisgICAgbW92ZShzdGFja1BvaW50ZXJSZWdp
c3RlciwgcmVnVDMpOworICAgIHN1YlB0cihJbW0zMig4KSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIp
OworICAgIG1vdmUoc3RhY2tQb2ludGVyUmVnaXN0ZXIsIHJlZ1QwKTsKKyAgICBzdWJQdHIoSW1t
MzIoOCArIDQgKyA0IC8qIHBhZGRpbmcgKi8pLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisKKyAg
ICAvLyBTZXR1cCBhcmc0OgorICAgIHN0b3JlUHRyKHJlZ1QzLCBBZGRyZXNzKHN0YWNrUG9pbnRl
clJlZ2lzdGVyLCA4KSk7CisKKyAgICAvLyBTZXR1cCBhcmczOgorICAgIC8vIHJlZ1QxIGN1cnJl
bnRseSBwb2ludHMgdG8gdGhlIGZpcnN0IGFyZ3VtZW50LCByZWdUMS1zaXplb2YoUmVnaXN0ZXIp
IHBvaW50cyB0byAndGhpcycKKyAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMSwgLShpbnQzMl90KXNp
emVvZih2b2lkKikgKiAyKSwgcmVnVDMpOworICAgIHN0b3JlUHRyKHJlZ1QzLCBBZGRyZXNzKHN0
YWNrUG9pbnRlclJlZ2lzdGVyLCAwKSk7CisgICAgbG9hZDMyKEFkZHJlc3MocmVnVDEsIC0oaW50
MzJfdClzaXplb2Yodm9pZCopKSwgcmVnVDMpOworICAgIHN0b3JlUHRyKHJlZ1QzLCBBZGRyZXNz
KHN0YWNrUG9pbnRlclJlZ2lzdGVyLCA0KSk7CisKKyAgICAvLyBTZXR1cCBhcmcyOgorICAgIGVt
aXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKFJlZ2lzdGVyRmlsZTo6Q2FsbGVlLCByZWdUMik7
CisKKyAgICAvLyBTZXR1cCBhcmcxOgorICAgIG1vdmUoY2FsbEZyYW1lUmVnaXN0ZXIsIHJlZ1Qx
KTsKKworICAgIGNhbGwoQWRkcmVzcyhyZWdUMiwgT0JKRUNUX09GRlNFVE9GKEpTRnVuY3Rpb24s
IG1fZGF0YSkpKTsKKworICAgIC8vIExvYWQgcmV0dXJuIHZhbHVlCisgICAgbG9hZDMyKEFkZHJl
c3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIsIDE2KSwgcmVnVDApOworICAgIGxvYWQzMihBZGRyZXNz
KHN0YWNrUG9pbnRlclJlZ2lzdGVyLCAyMCksIHJlZ1QxKTsKKworICAgIGFkZFB0cihJbW0zMihz
aXplb2YoQXJnTGlzdCkgKyAxNiArIDgpLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisjZW5kaWYg
Ly8gT1MoV0lOQ0UpCisKKyNlbmRpZgorCisgICAgLy8gQ2hlY2sgZm9yIGFuIGV4Y2VwdGlvbgor
ICAgIG1vdmUoSW1tUHRyKCZnbG9iYWxEYXRhLT5leGNlcHRpb24pLCByZWdUMik7CisgICAgSnVt
cCBzYXdFeGNlcHRpb24gPSBicmFuY2gzMihOb3RFcXVhbCwgdGFnRm9yKDAsIHJlZ1QyKSwgSW1t
MzIoSlNWYWx1ZTo6RW1wdHlWYWx1ZVRhZykpOworCisgICAgLy8gR3JhYiB0aGUgcmV0dXJuIGFk
ZHJlc3MuCisgICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoUmVnaXN0ZXJGaWxlOjpS
ZXR1cm5QQywgcmVnVDMpOworCisgICAgLy8gUmVzdG9yZSBvdXIgY2FsbGVyJ3MgInIiLgorICAg
IGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKFJlZ2lzdGVyRmlsZTo6Q2FsbGVyRnJhbWUs
IGNhbGxGcmFtZVJlZ2lzdGVyKTsKKworICAgIC8vIFJldHVybi4KKyAgICByZXN0b3JlUmV0dXJu
QWRkcmVzc0JlZm9yZVJldHVybihyZWdUMyk7CisgICAgcmV0KCk7CisKKyAgICAvLyBIYW5kbGUg
YW4gZXhjZXB0aW9uCisgICAgc2F3RXhjZXB0aW9uLmxpbmsodGhpcyk7CisgICAgLy8gR3JhYiB0
aGUgcmV0dXJuIGFkZHJlc3MuCisgICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoUmVn
aXN0ZXJGaWxlOjpSZXR1cm5QQywgcmVnVDEpOworICAgIG1vdmUoSW1tUHRyKCZnbG9iYWxEYXRh
LT5leGNlcHRpb25Mb2NhdGlvbiksIHJlZ1QyKTsKKyAgICBzdG9yZVB0cihyZWdUMSwgcmVnVDIp
OworICAgIG1vdmUoSW1tUHRyKEZ1bmN0aW9uUHRyKGN0aVZNVGhyb3dUcmFtcG9saW5lKS52YWx1
ZSgpKSwgcmVnVDIpOworICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKFJlZ2lzdGVy
RmlsZTo6Q2FsbGVyRnJhbWUsIGNhbGxGcmFtZVJlZ2lzdGVyKTsKKyAgICBwb2tlKGNhbGxGcmFt
ZVJlZ2lzdGVyLCBPQkpFQ1RfT0ZGU0VUT0Yoc3RydWN0IEpJVFN0YWNrRnJhbWUsIGNhbGxGcmFt
ZSkgLyBzaXplb2Yodm9pZCopKTsKKyAgICByZXN0b3JlUmV0dXJuQWRkcmVzc0JlZm9yZVJldHVy
bihyZWdUMik7CisgICAgcmV0KCk7CisKKyNlbGlmIEVOQUJMRShKSVRfT1BUSU1JWkVfTkFUSVZF
X0NBTEwpCisjZXJyb3IgIkpJVF9PUFRJTUlaRV9OQVRJVkVfQ0FMTCBub3QgeWV0IHN1cHBvcnRl
ZCBvbiB0aGlzIHBsYXRmb3JtLiIKKyNlbHNlCisgICAgYnJlYWtwb2ludCgpOworI2VuZGlmCisK
KyNpZiBFTkFCTEUoSklUX09QVElNSVpFX1BST1BFUlRZX0FDQ0VTUykKKyAgICBDYWxsIHN0cmlu
Z19mYWlsdXJlQ2FzZXMxQ2FsbCA9IG1ha2VUYWlsUmVjdXJzaXZlQ2FsbChzdHJpbmdfZmFpbHVy
ZUNhc2VzMSk7CisgICAgQ2FsbCBzdHJpbmdfZmFpbHVyZUNhc2VzMkNhbGwgPSBtYWtlVGFpbFJl
Y3Vyc2l2ZUNhbGwoc3RyaW5nX2ZhaWx1cmVDYXNlczIpOworICAgIENhbGwgc3RyaW5nX2ZhaWx1
cmVDYXNlczNDYWxsID0gbWFrZVRhaWxSZWN1cnNpdmVDYWxsKHN0cmluZ19mYWlsdXJlQ2FzZXMz
KTsKKyNlbmRpZgorCisgICAgLy8gQWxsIHRyYW1wb2xpbmVzIGNvbnN0cnVjdGVkISBjb3B5IHRo
ZSBjb2RlLCBsaW5rIHVwIGNhbGxzLCBhbmQgc2V0IHRoZSBwb2ludGVycyBvbiB0aGUgTWFjaGlu
ZSBvYmplY3QuCisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcih0aGlzLCBtX2dsb2JhbERhdGEt
PmV4ZWN1dGFibGVBbGxvY2F0b3IucG9vbEZvclNpemUobV9hc3NlbWJsZXIuc2l6ZSgpKSk7CisK
KyNpZiBFTkFCTEUoSklUX09QVElNSVpFX1BST1BFUlRZX0FDQ0VTUykKKyAgICBwYXRjaEJ1ZmZl
ci5saW5rKHN0cmluZ19mYWlsdXJlQ2FzZXMxQ2FsbCwgRnVuY3Rpb25QdHIoY3RpX29wX2dldF9i
eV9pZF9zdHJpbmdfZmFpbCkpOworICAgIHBhdGNoQnVmZmVyLmxpbmsoc3RyaW5nX2ZhaWx1cmVD
YXNlczJDYWxsLCBGdW5jdGlvblB0cihjdGlfb3BfZ2V0X2J5X2lkX3N0cmluZ19mYWlsKSk7Cisg
ICAgcGF0Y2hCdWZmZXIubGluayhzdHJpbmdfZmFpbHVyZUNhc2VzM0NhbGwsIEZ1bmN0aW9uUHRy
KGN0aV9vcF9nZXRfYnlfaWRfc3RyaW5nX2ZhaWwpKTsKKyNlbmRpZgorICAgIHBhdGNoQnVmZmVy
LmxpbmsoY2FsbEFyaXR5Q2hlY2sxLCBGdW5jdGlvblB0cihjdGlfb3BfY2FsbF9hcml0eUNoZWNr
KSk7CisgICAgcGF0Y2hCdWZmZXIubGluayhjYWxsSlNGdW5jdGlvbjEsIEZ1bmN0aW9uUHRyKGN0
aV9vcF9jYWxsX0pTRnVuY3Rpb24pKTsKKyNpZiBFTkFCTEUoSklUX09QVElNSVpFX0NBTEwpCisg
ICAgcGF0Y2hCdWZmZXIubGluayhjYWxsQXJpdHlDaGVjazIsIEZ1bmN0aW9uUHRyKGN0aV9vcF9j
YWxsX2FyaXR5Q2hlY2spKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5rKGNhbGxKU0Z1bmN0aW9uMiwg
RnVuY3Rpb25QdHIoY3RpX29wX2NhbGxfSlNGdW5jdGlvbikpOworICAgIHBhdGNoQnVmZmVyLmxp
bmsoY2FsbExhenlMaW5rQ2FsbCwgRnVuY3Rpb25QdHIoY3RpX3ZtX2xhenlMaW5rQ2FsbCkpOwor
I2VuZGlmCisKKyAgICBDb2RlUmVmIGZpbmFsQ29kZSA9IHBhdGNoQnVmZmVyLmZpbmFsaXplQ29k
ZSgpOworICAgICpleGVjdXRhYmxlUG9vbCA9IGZpbmFsQ29kZS5tX2V4ZWN1dGFibGVQb29sOwor
CisgICAgdHJhbXBvbGluZXMtPmN0aVZpcnR1YWxDYWxsID0gdHJhbXBvbGluZUF0KGZpbmFsQ29k
ZSwgdmlydHVhbENhbGxCZWdpbik7CisgICAgdHJhbXBvbGluZXMtPmN0aU5hdGl2ZUNhbGxUaHVu
ayA9IGFkb3B0UmVmKG5ldyBOYXRpdmVFeGVjdXRhYmxlKEpJVENvZGUoSklUQ29kZTo6SG9zdEZ1
bmN0aW9uKHRyYW1wb2xpbmVBdChmaW5hbENvZGUsIG5hdGl2ZUNhbGxUaHVuaykpKSkpOworI2lm
IEVOQUJMRShKSVRfT1BUSU1JWkVfUFJPUEVSVFlfQUNDRVNTKQorICAgIHRyYW1wb2xpbmVzLT5j
dGlTdHJpbmdMZW5ndGhUcmFtcG9saW5lID0gdHJhbXBvbGluZUF0KGZpbmFsQ29kZSwgc3RyaW5n
TGVuZ3RoQmVnaW4pOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oY3RpU3RyaW5nTGVuZ3RoVHJh
bXBvbGluZSk7CisjZW5kaWYKKyNpZiBFTkFCTEUoSklUX09QVElNSVpFX0NBTEwpCisgICAgdHJh
bXBvbGluZXMtPmN0aVZpcnR1YWxDYWxsTGluayA9IHRyYW1wb2xpbmVBdChmaW5hbENvZGUsIHZp
cnR1YWxDYWxsTGlua0JlZ2luKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGN0aVZpcnR1YWxD
YWxsTGluayk7CisjZW5kaWYKKyNpZiBFTkFCTEUoSklUX09QVElNSVpFX01PRCkKKyAgICB0cmFt
cG9saW5lcy0+Y3RpU29mdE1vZHVsbyA9IHRyYW1wb2xpbmVBdChmaW5hbENvZGUsIHNvZnRNb2RC
ZWdpbik7CisjZW5kaWYKK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfbW92KEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgdW5zaWduZWQgZHN0ID0gY3VycmVudEluc3RydWN0
aW9uWzFdLnUub3BlcmFuZDsKKyAgICB1bnNpZ25lZCBzcmMgPSBjdXJyZW50SW5zdHJ1Y3Rpb25b
Ml0udS5vcGVyYW5kOworCisgICAgaWYgKG1fY29kZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJ
bmRleChzcmMpKQorICAgICAgICBlbWl0U3RvcmUoZHN0LCBnZXRDb25zdGFudE9wZXJhbmQoc3Jj
KSk7CisgICAgZWxzZSB7CisgICAgICAgIGVtaXRMb2FkKHNyYywgcmVnVDEsIHJlZ1QwKTsKKyAg
ICAgICAgZW1pdFN0b3JlKGRzdCwgcmVnVDEsIHJlZ1QwKTsKKyAgICAgICAgbWFwKG1fYnl0ZWNv
ZGVJbmRleCArIE9QQ09ERV9MRU5HVEgob3BfbW92KSwgZHN0LCByZWdUMSwgcmVnVDApOworICAg
IH0KK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfZW5kKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCit7CisgICAgaWYgKG1fY29kZUJsb2NrLT5uZWVkc0Z1bGxTY29wZUNoYWluKCkpCisg
ICAgICAgIEpJVFN0dWJDYWxsKHRoaXMsIGN0aV9vcF9lbmQpLmNhbGwoKTsKKyAgICBBU1NFUlQo
cmV0dXJuVmFsdWVSZWdpc3RlciAhPSBjYWxsRnJhbWVSZWdpc3Rlcik7CisgICAgZW1pdExvYWQo
Y3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgcmVnVDEsIHJlZ1QwKTsKKyAgICByZXN0
b3JlUmV0dXJuQWRkcmVzc0JlZm9yZVJldHVybihBZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVyLCBS
ZWdpc3RlckZpbGU6OlJldHVyblBDICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIp
KSkpOworICAgIHJldCgpOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9qbXAoSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICB1bnNpZ25lZCB0YXJnZXQgPSBjdXJyZW50SW5z
dHJ1Y3Rpb25bMV0udS5vcGVyYW5kOworICAgIGFkZEp1bXAoanVtcCgpLCB0YXJnZXQpOworfQor
Cit2b2lkIEpJVDo6ZW1pdF9vcF9sb29wX2lmX2xlc3NlcShJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQoreworICAgIHVuc2lnbmVkIG9wMSA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51
Lm9wZXJhbmQ7CisgICAgdW5zaWduZWQgb3AyID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3Bl
cmFuZDsKKyAgICB1bnNpZ25lZCB0YXJnZXQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVy
YW5kOworCisgICAgZW1pdFRpbWVvdXRDaGVjaygpOworCisgICAgaWYgKGlzT3BlcmFuZENvbnN0
YW50SW1tZWRpYXRlSW50KG9wMSkpIHsKKyAgICAgICAgZW1pdExvYWQob3AyLCByZWdUMSwgcmVn
VDApOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgcmVnVDEsIEltbTMy
KEpTVmFsdWU6OkludDMyVGFnKSkpOworICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKEdyZWF0ZXJU
aGFuT3JFcXVhbCwgcmVnVDAsIEltbTMyKGdldENvbnN0YW50T3BlcmFuZChvcDEpLmFzSW50MzIo
KSkpLCB0YXJnZXQpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGlzT3BlcmFu
ZENvbnN0YW50SW1tZWRpYXRlSW50KG9wMikpIHsKKyAgICAgICAgZW1pdExvYWQob3AxLCByZWdU
MSwgcmVnVDApOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgcmVnVDEs
IEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSkpOworICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKExl
c3NUaGFuT3JFcXVhbCwgcmVnVDAsIEltbTMyKGdldENvbnN0YW50T3BlcmFuZChvcDIpLmFzSW50
MzIoKSkpLCB0YXJnZXQpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgZW1pdExvYWQy
KG9wMSwgcmVnVDEsIHJlZ1QwLCBvcDIsIHJlZ1QzLCByZWdUMik7CisgICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QxLCBJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZykpKTsKKyAg
ICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgcmVnVDMsIEltbTMyKEpTVmFsdWU6Oklu
dDMyVGFnKSkpOworICAgIGFkZEp1bXAoYnJhbmNoMzIoTGVzc1RoYW5PckVxdWFsLCByZWdUMCwg
cmVnVDIpLCB0YXJnZXQpOworfQorCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbG9vcF9pZl9sZXNz
ZXEoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYgaXRlcikKK3sKKyAgICB1bnNpZ25lZCBvcDEgPSBjdXJyZW50SW5zdHJ1Y3Rp
b25bMV0udS5vcGVyYW5kOworICAgIHVuc2lnbmVkIG9wMiA9IGN1cnJlbnRJbnN0cnVjdGlvblsy
XS51Lm9wZXJhbmQ7CisgICAgdW5zaWduZWQgdGFyZ2V0ID0gY3VycmVudEluc3RydWN0aW9uWzNd
LnUub3BlcmFuZDsKKworICAgIGlmICghaXNPcGVyYW5kQ29uc3RhbnRJbW1lZGlhdGVJbnQob3Ax
KSAmJiAhaXNPcGVyYW5kQ29uc3RhbnRJbW1lZGlhdGVJbnQob3AyKSkKKyAgICAgICAgbGlua1Ns
b3dDYXNlKGl0ZXIpOyAvLyBpbnQzMiBjaGVjaworICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8g
aW50MzIgY2hlY2sKKworICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGN0aV9vcF9sb29w
X2lmX2xlc3NlcSk7CisgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQob3AxKTsKKyAgICBzdHViQ2Fs
bC5hZGRBcmd1bWVudChvcDIpOworICAgIHN0dWJDYWxsLmNhbGwoKTsKKyAgICBlbWl0SnVtcFNs
b3dUb0hvdChicmFuY2hUZXN0MzIoTm9uWmVybywgcmVnVDApLCB0YXJnZXQpOworfQorCit2b2lk
IEpJVDo6ZW1pdF9vcF9uZXdfb2JqZWN0KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
Cit7CisgICAgSklUU3R1YkNhbGwodGhpcywgY3RpX29wX25ld19vYmplY3QpLmNhbGwoY3VycmVu
dEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCk7Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX2luc3Rh
bmNlb2YoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICB1bnNpZ25lZCBk
c3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOworICAgIHVuc2lnbmVkIHZhbHVl
ID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKKyAgICB1bnNpZ25lZCBiYXNlVmFs
ID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKKyAgICB1bnNpZ25lZCBwcm90byA9
IGN1cnJlbnRJbnN0cnVjdGlvbls0XS51Lm9wZXJhbmQ7CisKKyAgICAvLyBMb2FkIHRoZSBvcGVy
YW5kcyBpbnRvIHJlZ2lzdGVycy4KKyAgICAvLyBXZSB1c2UgcmVnVDAgZm9yIGJhc2VWYWwgc2lu
Y2Ugd2Ugd2lsbCBiZSBkb25lIHdpdGggdGhpcyBmaXJzdCwgYW5kIHdlIGNhbiB0aGVuIHVzZSBp
dCBmb3IgdGhlIHJlc3VsdC4KKyAgICBlbWl0TG9hZFBheWxvYWQodmFsdWUsIHJlZ1QyKTsKKyAg
ICBlbWl0TG9hZFBheWxvYWQoYmFzZVZhbCwgcmVnVDApOworICAgIGVtaXRMb2FkUGF5bG9hZChw
cm90bywgcmVnVDEpOworCisgICAgLy8gQ2hlY2sgdGhhdCB2YWx1ZSwgYmFzZVZhbCwgYW5kIHBy
b3RvIGFyZSBjZWxscy4KKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwodmFsdWUpOwor
ICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlVmFsKTsKKyAgICBlbWl0SnVtcFNs
b3dDYXNlSWZOb3RKU0NlbGwocHJvdG8pOworCisgICAgLy8gQ2hlY2sgdGhhdCBiYXNlVmFsICdJ
bXBsZW1lbnRzRGVmYXVsdEhhc0luc3RhbmNlJy4KKyAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAs
IE9CSkVDVF9PRkZTRVRPRihKU0NlbGwsIG1fc3RydWN0dXJlKSksIHJlZ1QwKTsKKyAgICBhZGRT
bG93Q2FzZShicmFuY2hUZXN0OChaZXJvLCBBZGRyZXNzKHJlZ1QwLCBPQkpFQ1RfT0ZGU0VUT0Yo
U3RydWN0dXJlLCBtX3R5cGVJbmZvLm1fZmxhZ3MpKSwgSW1tMzIoSW1wbGVtZW50c0RlZmF1bHRI
YXNJbnN0YW5jZSkpKTsKKworICAgIC8vIE9wdGltaXN0aWNhbGx5IGxvYWQgdGhlIHJlc3VsdCB0
cnVlLCBhbmQgc3RhcnQgbG9vcGluZy4KKyAgICAvLyBJbml0aWFsbHksIHJlZ1QxIHN0aWxsIGNv
bnRhaW5zIHByb3RvIGFuZCByZWdUMiBzdGlsbCBjb250YWlucyB2YWx1ZS4KKyAgICAvLyBBcyB3
ZSBsb29wIHJlZ1QyIHdpbGwgYmUgdXBkYXRlZCB3aXRoIGl0cyBwcm90b3R5cGUsIHJlY3Vyc2l2
ZWx5IHdhbGtpbmcgdGhlIHByb3RvdHlwZSBjaGFpbi4KKyAgICBtb3ZlKEltbTMyKEpTVmFsdWU6
OlRydWVUYWcpLCByZWdUMCk7CisgICAgTGFiZWwgbG9vcCh0aGlzKTsKKworICAgIC8vIExvYWQg
dGhlIHByb3RvdHlwZSBvZiB0aGUgY2VsbCBpbiByZWdUMi4gIElmIHRoaXMgaXMgZXF1YWwgdG8g
cmVnVDEgLSBXSU4hCisgICAgLy8gT3RoZXJ3aXNlLCBjaGVjayBpZiB3ZSd2ZSBoaXQgbnVsbCAt
IGlmIHdlIGhhdmUgdGhlbiBkcm9wIG91dCBvZiB0aGUgbG9vcCwgaWYgbm90IGdvIGFnYWluLgor
ICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwgT0JKRUNUX09GRlNFVE9GKEpTQ2VsbCwgbV9zdHJ1
Y3R1cmUpKSwgcmVnVDIpOworICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QyLCBPQkpFQ1RfT0ZGU0VU
T0YoU3RydWN0dXJlLCBtX3Byb3RvdHlwZSkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5h
c0JpdHMucGF5bG9hZCkpLCByZWdUMik7CisgICAgSnVtcCBpc0luc3RhbmNlID0gYnJhbmNoUHRy
KEVxdWFsLCByZWdUMiwgcmVnVDEpOworICAgIGJyYW5jaFRlc3QzMihOb25aZXJvLCByZWdUMiku
bGlua1RvKGxvb3AsIHRoaXMpOworCisgICAgLy8gV2UgZ2V0IGhlcmUgZWl0aGVyIGJ5IGRyb3Bw
aW5nIG91dCBvZiB0aGUgbG9vcCwgb3IgaWYgdmFsdWUgd2FzIG5vdCBhbiBPYmplY3QuICBSZXN1
bHQgaXMgZmFsc2UuCisgICAgbW92ZShJbW0zMihKU1ZhbHVlOjpGYWxzZVRhZyksIHJlZ1QwKTsK
KworICAgIC8vIGlzSW5zdGFuY2UganVtcHMgcmlnaHQgZG93biB0byBoZXJlLCB0byBza2lwIHNl
dHRpbmcgdGhlIHJlc3VsdCB0byBmYWxzZSAoaXQgaGFzIGFscmVhZHkgc2V0IHRydWUpLgorICAg
IGlzSW5zdGFuY2UubGluayh0aGlzKTsKKyAgICBlbWl0U3RvcmVCb29sKGRzdCwgcmVnVDApOwor
fQorCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQorewor
ICAgIHVuc2lnbmVkIGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CisgICAg
dW5zaWduZWQgdmFsdWUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOworICAgIHVu
c2lnbmVkIGJhc2VWYWwgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOworICAgIHVu
c2lnbmVkIHByb3RvID0gY3VycmVudEluc3RydWN0aW9uWzRdLnUub3BlcmFuZDsKKworICAgIGxp
bmtTbG93Q2FzZUlmTm90SlNDZWxsKGl0ZXIsIHZhbHVlKTsKKyAgICBsaW5rU2xvd0Nhc2VJZk5v
dEpTQ2VsbChpdGVyLCBiYXNlVmFsKTsKKyAgICBsaW5rU2xvd0Nhc2VJZk5vdEpTQ2VsbChpdGVy
LCBwcm90byk7CisgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOworCisgICAgSklUU3R1YkNhbGwgc3R1
YkNhbGwodGhpcywgY3RpX29wX2luc3RhbmNlb2YpOworICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50
KHZhbHVlKTsKKyAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChiYXNlVmFsKTsKKyAgICBzdHViQ2Fs
bC5hZGRBcmd1bWVudChwcm90byk7CisgICAgc3R1YkNhbGwuY2FsbChkc3QpOworfQorCit2b2lk
IEpJVDo6ZW1pdF9vcF9uZXdfZnVuYyhJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQor
eworICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGN0aV9vcF9uZXdfZnVuYyk7CisgICAg
c3R1YkNhbGwuYWRkQXJndW1lbnQoSW1tUHRyKG1fY29kZUJsb2NrLT5mdW5jdGlvbkRlY2woY3Vy
cmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCkpKTsKKyAgICBzdHViQ2FsbC5jYWxsKGN1cnJl
bnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9nZXRf
Z2xvYmFsX3ZhcihJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIGludCBk
c3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOworICAgIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QgPSBzdGF0aWNfY2FzdDxKU0dsb2JhbE9iamVjdCo+KGN1cnJlbnRJbnN0
cnVjdGlvblsyXS51LmpzQ2VsbCk7CisgICAgQVNTRVJUKGdsb2JhbE9iamVjdC0+aXNHbG9iYWxP
YmplY3QoKSk7CisgICAgaW50IGluZGV4ID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFu
ZDsKKworICAgIGxvYWRQdHIoJmdsb2JhbE9iamVjdC0+ZCgpLT5yZWdpc3RlcnMsIHJlZ1QyKTsK
KworICAgIGVtaXRMb2FkKGluZGV4LCByZWdUMSwgcmVnVDAsIHJlZ1QyKTsKKyAgICBlbWl0U3Rv
cmUoZHN0LCByZWdUMSwgcmVnVDApOworICAgIG1hcChtX2J5dGVjb2RlSW5kZXggKyBPUENPREVf
TEVOR1RIKG9wX2dldF9nbG9iYWxfdmFyKSwgZHN0LCByZWdUMSwgcmVnVDApOworfQorCit2b2lk
IEpJVDo6ZW1pdF9vcF9wdXRfZ2xvYmFsX3ZhcihJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQoreworICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBzdGF0aWNfY2FzdDxK
U0dsb2JhbE9iamVjdCo+KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51LmpzQ2VsbCk7CisgICAgQVNT
RVJUKGdsb2JhbE9iamVjdC0+aXNHbG9iYWxPYmplY3QoKSk7CisgICAgaW50IGluZGV4ID0gY3Vy
cmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKKyAgICBpbnQgdmFsdWUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb25bM10udS5vcGVyYW5kOworCisgICAgZW1pdExvYWQodmFsdWUsIHJlZ1QxLCByZWdU
MCk7CisKKyAgICBsb2FkUHRyKCZnbG9iYWxPYmplY3QtPmQoKS0+cmVnaXN0ZXJzLCByZWdUMik7
CisgICAgZW1pdFN0b3JlKGluZGV4LCByZWdUMSwgcmVnVDAsIHJlZ1QyKTsKKyAgICBtYXAobV9i
eXRlY29kZUluZGV4ICsgT1BDT0RFX0xFTkdUSChvcF9wdXRfZ2xvYmFsX3ZhciksIHZhbHVlLCBy
ZWdUMSwgcmVnVDApOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfc2NvcGVkX3ZhcihJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIGludCBkc3QgPSBjdXJyZW50SW5z
dHJ1Y3Rpb25bMV0udS5vcGVyYW5kOworICAgIGludCBpbmRleCA9IGN1cnJlbnRJbnN0cnVjdGlv
blsyXS51Lm9wZXJhbmQ7CisgICAgaW50IHNraXAgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5v
cGVyYW5kICsgbV9jb2RlQmxvY2stPm5lZWRzRnVsbFNjb3BlQ2hhaW4oKTsKKworICAgIGVtaXRH
ZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKFJlZ2lzdGVyRmlsZTo6U2NvcGVDaGFpbiwgcmVnVDIp
OworICAgIHdoaWxlIChza2lwLS0pCisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwgT0JK
RUNUX09GRlNFVE9GKFNjb3BlQ2hhaW5Ob2RlLCBuZXh0KSksIHJlZ1QyKTsKKworICAgIGxvYWRQ
dHIoQWRkcmVzcyhyZWdUMiwgT0JKRUNUX09GRlNFVE9GKFNjb3BlQ2hhaW5Ob2RlLCBvYmplY3Qp
KSwgcmVnVDIpOworICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwgT0JKRUNUX09GRlNFVE9GKEpT
VmFyaWFibGVPYmplY3QsIGQpKSwgcmVnVDIpOworICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwg
T0JKRUNUX09GRlNFVE9GKEpTVmFyaWFibGVPYmplY3Q6OkpTVmFyaWFibGVPYmplY3REYXRhLCBy
ZWdpc3RlcnMpKSwgcmVnVDIpOworCisgICAgZW1pdExvYWQoaW5kZXgsIHJlZ1QxLCByZWdUMCwg
cmVnVDIpOworICAgIGVtaXRTdG9yZShkc3QsIHJlZ1QxLCByZWdUMCk7CisgICAgbWFwKG1fYnl0
ZWNvZGVJbmRleCArIE9QQ09ERV9MRU5HVEgob3BfZ2V0X3Njb3BlZF92YXIpLCBkc3QsIHJlZ1Qx
LCByZWdUMCk7Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX3B1dF9zY29wZWRfdmFyKEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgaW50IGluZGV4ID0gY3VycmVudEluc3Ry
dWN0aW9uWzFdLnUub3BlcmFuZDsKKyAgICBpbnQgc2tpcCA9IGN1cnJlbnRJbnN0cnVjdGlvblsy
XS51Lm9wZXJhbmQgKyBtX2NvZGVCbG9jay0+bmVlZHNGdWxsU2NvcGVDaGFpbigpOworICAgIGlu
dCB2YWx1ZSA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7CisKKyAgICBlbWl0TG9h
ZCh2YWx1ZSwgcmVnVDEsIHJlZ1QwKTsKKworICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVy
UHRyKFJlZ2lzdGVyRmlsZTo6U2NvcGVDaGFpbiwgcmVnVDIpOworICAgIHdoaWxlIChza2lwLS0p
CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwgT0JKRUNUX09GRlNFVE9GKFNjb3BlQ2hh
aW5Ob2RlLCBuZXh0KSksIHJlZ1QyKTsKKworICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwgT0JK
RUNUX09GRlNFVE9GKFNjb3BlQ2hhaW5Ob2RlLCBvYmplY3QpKSwgcmVnVDIpOworICAgIGxvYWRQ
dHIoQWRkcmVzcyhyZWdUMiwgT0JKRUNUX09GRlNFVE9GKEpTVmFyaWFibGVPYmplY3QsIGQpKSwg
cmVnVDIpOworICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwgT0JKRUNUX09GRlNFVE9GKEpTVmFy
aWFibGVPYmplY3Q6OkpTVmFyaWFibGVPYmplY3REYXRhLCByZWdpc3RlcnMpKSwgcmVnVDIpOwor
CisgICAgZW1pdFN0b3JlKGluZGV4LCByZWdUMSwgcmVnVDAsIHJlZ1QyKTsKKyAgICBtYXAobV9i
eXRlY29kZUluZGV4ICsgT1BDT0RFX0xFTkdUSChvcF9wdXRfc2NvcGVkX3ZhciksIHZhbHVlLCBy
ZWdUMSwgcmVnVDApOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF90ZWFyX29mZl9hY3RpdmF0aW9u
KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgSklUU3R1YkNhbGwgc3R1
YkNhbGwodGhpcywgY3RpX29wX3RlYXJfb2ZmX2FjdGl2YXRpb24pOworICAgIHN0dWJDYWxsLmFk
ZEFyZ3VtZW50KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpOworICAgIHN0dWJDYWxs
LmNhbGwoKTsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfdGVhcl9vZmZfYXJndW1lbnRzKEluc3Ry
dWN0aW9uKikKK3sKKyAgICBKSVRTdHViQ2FsbCh0aGlzLCBjdGlfb3BfdGVhcl9vZmZfYXJndW1l
bnRzKS5jYWxsKCk7Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX25ld19hcnJheShJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMs
IGN0aV9vcF9uZXdfYXJyYXkpOworICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KEltbTMyKGN1cnJl
bnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpKTsKKyAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChJ
bW0zMihjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKSk7CisgICAgc3R1YkNhbGwuY2Fs
bChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKK30KKwordm9pZCBKSVQ6OmVtaXRf
b3BfcmVzb2x2ZShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIEpJVFN0
dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGN0aV9vcF9yZXNvbHZlKTsKKyAgICBzdHViQ2FsbC5hZGRB
cmd1bWVudChJbW1QdHIoJm1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGN1cnJlbnRJbnN0cnVjdGlv
blsyXS51Lm9wZXJhbmQpKSk7CisgICAgc3R1YkNhbGwuY2FsbChjdXJyZW50SW5zdHJ1Y3Rpb25b
MV0udS5vcGVyYW5kKTsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfdG9fcHJpbWl0aXZlKEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgaW50IGRzdCA9IGN1cnJlbnRJbnN0
cnVjdGlvblsxXS51Lm9wZXJhbmQ7CisgICAgaW50IHNyYyA9IGN1cnJlbnRJbnN0cnVjdGlvblsy
XS51Lm9wZXJhbmQ7CisKKyAgICBlbWl0TG9hZChzcmMsIHJlZ1QxLCByZWdUMCk7CisKKyAgICBK
dW1wIGlzSW1tID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QxLCBJbW0zMihKU1ZhbHVlOjpDZWxs
VGFnKSk7CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoUHRyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1Qw
KSwgSW1tUHRyKG1fZ2xvYmFsRGF0YS0+anNTdHJpbmdWUHRyKSkpOworICAgIGlzSW1tLmxpbmso
dGhpcyk7CisKKyAgICBpZiAoZHN0ICE9IHNyYykKKyAgICAgICAgZW1pdFN0b3JlKGRzdCwgcmVn
VDEsIHJlZ1QwKTsKKyAgICBtYXAobV9ieXRlY29kZUluZGV4ICsgT1BDT0RFX0xFTkdUSChvcF90
b19wcmltaXRpdmUpLCBkc3QsIHJlZ1QxLCByZWdUMCk7Cit9CisKK3ZvaWQgSklUOjplbWl0U2xv
d19vcF90b19wcmltaXRpdmUoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3sKKyAgICBpbnQgZHN0ID0gY3VycmVu
dEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKKworICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKKwor
ICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGN0aV9vcF90b19wcmltaXRpdmUpOworICAg
IHN0dWJDYWxsLmFkZEFyZ3VtZW50KHJlZ1QxLCByZWdUMCk7CisgICAgc3R1YkNhbGwuY2FsbChk
c3QpOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9zdHJjYXQoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKK3sKKyAgICBKSVRTdHViQ2FsbCBzdHViQ2FsbCh0aGlzLCBjdGlfb3Bfc3Ry
Y2F0KTsKKyAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChJbW0zMihjdXJyZW50SW5zdHJ1Y3Rpb25b
Ml0udS5vcGVyYW5kKSk7CisgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoSW1tMzIoY3VycmVudElu
c3RydWN0aW9uWzNdLnUub3BlcmFuZCkpOworICAgIHN0dWJDYWxsLmNhbGwoY3VycmVudEluc3Ry
dWN0aW9uWzFdLnUub3BlcmFuZCk7Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVfYmFz
ZShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIEpJVFN0dWJDYWxsIHN0
dWJDYWxsKHRoaXMsIGN0aV9vcF9yZXNvbHZlX2Jhc2UpOworICAgIHN0dWJDYWxsLmFkZEFyZ3Vt
ZW50KEltbVB0cigmbV9jb2RlQmxvY2stPmlkZW50aWZpZXIoY3VycmVudEluc3RydWN0aW9uWzJd
LnUub3BlcmFuZCkpKTsKKyAgICBzdHViQ2FsbC5jYWxsKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51
Lm9wZXJhbmQpOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3NraXAoSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBKSVRTdHViQ2FsbCBzdHViQ2FsbCh0aGlz
LCBjdGlfb3BfcmVzb2x2ZV9za2lwKTsKKyAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChJbW1QdHIo
Jm1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQp
KSk7CisgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoSW1tMzIoY3VycmVudEluc3RydWN0aW9uWzNd
LnUub3BlcmFuZCArIG1fY29kZUJsb2NrLT5uZWVkc0Z1bGxTY29wZUNoYWluKCkpKTsKKyAgICBz
dHViQ2FsbC5jYWxsKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpOworfQorCit2b2lk
IEpJVDo6ZW1pdF9vcF9yZXNvbHZlX2dsb2JhbChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBib29sIGR5bmFtaWMpCit7CisgICAgLy8gRklYTUU6IE9wdGltaXplIHRvIHVzZSBwYXRj
aGluZyBpbnN0ZWFkIG9mIHNvIG1hbnkgbWVtb3J5IGFjY2Vzc2VzLgorCisgICAgdW5zaWduZWQg
ZHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKKyAgICB2b2lkKiBnbG9iYWxP
YmplY3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5qc0NlbGw7CisKKyAgICB1bnNpZ25lZCBj
dXJyZW50SW5kZXggPSBtX2dsb2JhbFJlc29sdmVJbmZvSW5kZXgrKzsKKyAgICB2b2lkKiBzdHJ1
Y3R1cmVBZGRyZXNzID0gJihtX2NvZGVCbG9jay0+Z2xvYmFsUmVzb2x2ZUluZm8oY3VycmVudElu
ZGV4KS5zdHJ1Y3R1cmUpOworICAgIHZvaWQqIG9mZnNldEFkZHIgPSAmKG1fY29kZUJsb2NrLT5n
bG9iYWxSZXNvbHZlSW5mbyhjdXJyZW50SW5kZXgpLm9mZnNldCk7CisKKyAgICAvLyBWZXJpZnkg
c3RydWN0dXJlLgorICAgIG1vdmUoSW1tUHRyKGdsb2JhbE9iamVjdCksIHJlZ1QwKTsKKyAgICBs
b2FkUHRyKHN0cnVjdHVyZUFkZHJlc3MsIHJlZ1QxKTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2hQ
dHIoTm90RXF1YWwsIHJlZ1QxLCBBZGRyZXNzKHJlZ1QwLCBPQkpFQ1RfT0ZGU0VUT0YoSlNDZWxs
LCBtX3N0cnVjdHVyZSkpKSk7CisKKyAgICAvLyBMb2FkIHByb3BlcnR5LgorICAgIGxvYWRQdHIo
QWRkcmVzcyhyZWdUMCwgT0JKRUNUX09GRlNFVE9GKEpTR2xvYmFsT2JqZWN0LCBtX2V4dGVybmFs
U3RvcmFnZSkpLCByZWdUMik7CisgICAgbG9hZDMyKG9mZnNldEFkZHIsIHJlZ1QzKTsKKyAgICBs
b2FkMzIoQmFzZUluZGV4KHJlZ1QyLCByZWdUMywgVGltZXNFaWdodCksIHJlZ1QwKTsgLy8gcGF5
bG9hZAorICAgIGxvYWQzMihCYXNlSW5kZXgocmVnVDIsIHJlZ1QzLCBUaW1lc0VpZ2h0LCA0KSwg
cmVnVDEpOyAvLyB0YWcKKyAgICBlbWl0U3RvcmUoZHN0LCByZWdUMSwgcmVnVDApOworICAgIG1h
cChtX2J5dGVjb2RlSW5kZXggKyBkeW5hbWljID8gT1BDT0RFX0xFTkdUSChvcF9yZXNvbHZlX2ds
b2JhbF9keW5hbWljKSA6IE9QQ09ERV9MRU5HVEgob3BfcmVzb2x2ZV9nbG9iYWwpLCBkc3QsIHJl
Z1QxLCByZWdUMCk7Cit9CisKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9yZXNvbHZlX2dsb2JhbChJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJiBpdGVyKQoreworICAgIHVuc2lnbmVkIGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsx
XS51Lm9wZXJhbmQ7CisgICAgdm9pZCogZ2xvYmFsT2JqZWN0ID0gY3VycmVudEluc3RydWN0aW9u
WzJdLnUuanNDZWxsOworICAgIElkZW50aWZpZXIqIGlkZW50ID0gJm1fY29kZUJsb2NrLT5pZGVu
dGlmaWVyKGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpOworCisgICAgdW5zaWduZWQg
Y3VycmVudEluZGV4ID0gbV9nbG9iYWxSZXNvbHZlSW5mb0luZGV4Kys7CisKKyAgICBsaW5rU2xv
d0Nhc2UoaXRlcik7CisgICAgSklUU3R1YkNhbGwgc3R1YkNhbGwodGhpcywgY3RpX29wX3Jlc29s
dmVfZ2xvYmFsKTsKKyAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChJbW1QdHIoZ2xvYmFsT2JqZWN0
KSk7CisgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoSW1tUHRyKGlkZW50KSk7CisgICAgc3R1YkNh
bGwuYWRkQXJndW1lbnQoSW1tMzIoY3VycmVudEluZGV4KSk7CisgICAgc3R1YkNhbGwuY2FsbChk
c3QpOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9ub3QoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKK3sKKyAgICB1bnNpZ25lZCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5v
cGVyYW5kOworICAgIHVuc2lnbmVkIHNyYyA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJh
bmQ7CisKKyAgICBlbWl0TG9hZFRhZyhzcmMsIHJlZ1QwKTsKKworICAgIHhvcjMyKEltbTMyKEpT
VmFsdWU6OkZhbHNlVGFnKSwgcmVnVDApOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3QzMihO
b25aZXJvLCByZWdUMCwgSW1tMzIofjEpKSk7CisgICAgeG9yMzIoSW1tMzIoSlNWYWx1ZTo6VHJ1
ZVRhZyksIHJlZ1QwKTsKKworICAgIGVtaXRTdG9yZUJvb2woZHN0LCByZWdUMCwgKGRzdCA9PSBz
cmMpKTsKK30KKwordm9pZCBKSVQ6OmVtaXRTbG93X29wX25vdChJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQorewor
ICAgIHVuc2lnbmVkIGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CisgICAg
dW5zaWduZWQgc3JjID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKKworICAgIGxp
bmtTbG93Q2FzZShpdGVyKTsKKworICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGN0aV9v
cF9ub3QpOworICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KHNyYyk7CisgICAgc3R1YkNhbGwuY2Fs
bChkc3QpOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9qZmFsc2UoSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKK3sKKyAgICB1bnNpZ25lZCBjb25kID0gY3VycmVudEluc3RydWN0aW9u
WzFdLnUub3BlcmFuZDsKKyAgICB1bnNpZ25lZCB0YXJnZXQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25b
Ml0udS5vcGVyYW5kOworCisgICAgZW1pdExvYWQoY29uZCwgcmVnVDEsIHJlZ1QwKTsKKworICAg
IEp1bXAgaXNUcnVlID0gYnJhbmNoMzIoRXF1YWwsIHJlZ1QxLCBJbW0zMihKU1ZhbHVlOjpUcnVl
VGFnKSk7CisgICAgYWRkSnVtcChicmFuY2gzMihFcXVhbCwgcmVnVDEsIEltbTMyKEpTVmFsdWU6
OkZhbHNlVGFnKSksIHRhcmdldCk7CisKKyAgICBKdW1wIGlzTm90SW50ZWdlciA9IGJyYW5jaDMy
KE5vdEVxdWFsLCByZWdUMSwgSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpKTsKKyAgICBKdW1wIGlz
VHJ1ZTIgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIEltbTMyKDApKTsKKyAgICBhZGRKdW1w
KGp1bXAoKSwgdGFyZ2V0KTsKKworICAgIGlmIChzdXBwb3J0c0Zsb2F0aW5nUG9pbnQoKSkgewor
ICAgICAgICBpc05vdEludGVnZXIubGluayh0aGlzKTsKKworICAgICAgICBhZGRTbG93Q2FzZShi
cmFuY2gzMihBYm92ZSwgcmVnVDEsIEltbTMyKEpTVmFsdWU6Okxvd2VzdFRhZykpKTsKKworICAg
ICAgICB6ZXJvRG91YmxlKGZwUmVnVDApOworICAgICAgICBlbWl0TG9hZERvdWJsZShjb25kLCBm
cFJlZ1QxKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2hEb3VibGUoRG91YmxlRXF1YWxPclVub3Jk
ZXJlZCwgZnBSZWdUMCwgZnBSZWdUMSksIHRhcmdldCk7CisgICAgfSBlbHNlCisgICAgICAgIGFk
ZFNsb3dDYXNlKGlzTm90SW50ZWdlcik7CisKKyAgICBpc1RydWUubGluayh0aGlzKTsKKyAgICBp
c1RydWUyLmxpbmsodGhpcyk7Cit9CisKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qZmFsc2UoSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYgaXRlcikKK3sKKyAgICB1bnNpZ25lZCBjb25kID0gY3VycmVudEluc3RydWN0aW9uWzFd
LnUub3BlcmFuZDsKKyAgICB1bnNpZ25lZCB0YXJnZXQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0u
dS5vcGVyYW5kOworCisgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOworICAgIEpJVFN0dWJDYWxsIHN0
dWJDYWxsKHRoaXMsIGN0aV9vcF9qdHJ1ZSk7CisgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoY29u
ZCk7CisgICAgc3R1YkNhbGwuY2FsbCgpOworICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRl
c3QzMihaZXJvLCByZWdUMCksIHRhcmdldCk7IC8vIEludmVydGVkLgorfQorCit2b2lkIEpJVDo6
ZW1pdF9vcF9qdHJ1ZShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIHVu
c2lnbmVkIGNvbmQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOworICAgIHVuc2ln
bmVkIHRhcmdldCA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CisKKyAgICBlbWl0
TG9hZChjb25kLCByZWdUMSwgcmVnVDApOworCisgICAgSnVtcCBpc0ZhbHNlID0gYnJhbmNoMzIo
RXF1YWwsIHJlZ1QxLCBJbW0zMihKU1ZhbHVlOjpGYWxzZVRhZykpOworICAgIGFkZEp1bXAoYnJh
bmNoMzIoRXF1YWwsIHJlZ1QxLCBJbW0zMihKU1ZhbHVlOjpUcnVlVGFnKSksIHRhcmdldCk7CisK
KyAgICBKdW1wIGlzTm90SW50ZWdlciA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMSwgSW1tMzIo
SlNWYWx1ZTo6SW50MzJUYWcpKTsKKyAgICBKdW1wIGlzRmFsc2UyID0gYnJhbmNoMzIoRXF1YWws
IHJlZ1QwLCBJbW0zMigwKSk7CisgICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7CisKKyAgICBp
ZiAoc3VwcG9ydHNGbG9hdGluZ1BvaW50KCkpIHsKKyAgICAgICAgaXNOb3RJbnRlZ2VyLmxpbmso
dGhpcyk7CisKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoQWJvdmUsIHJlZ1QxLCBJbW0z
MihKU1ZhbHVlOjpMb3dlc3RUYWcpKSk7CisKKyAgICAgICAgemVyb0RvdWJsZShmcFJlZ1QwKTsK
KyAgICAgICAgZW1pdExvYWREb3VibGUoY29uZCwgZnBSZWdUMSk7CisgICAgICAgIGFkZEp1bXAo
YnJhbmNoRG91YmxlKERvdWJsZU5vdEVxdWFsLCBmcFJlZ1QwLCBmcFJlZ1QxKSwgdGFyZ2V0KTsK
KyAgICB9IGVsc2UKKyAgICAgICAgYWRkU2xvd0Nhc2UoaXNOb3RJbnRlZ2VyKTsKKworICAgIGlz
RmFsc2UubGluayh0aGlzKTsKKyAgICBpc0ZhbHNlMi5saW5rKHRoaXMpOworfQorCit2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfanRydWUoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3sKKyAgICB1bnNpZ25lZCBjb25k
ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKKyAgICB1bnNpZ25lZCB0YXJnZXQg
PSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOworCisgICAgbGlua1Nsb3dDYXNlKGl0
ZXIpOworICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGN0aV9vcF9qdHJ1ZSk7CisgICAg
c3R1YkNhbGwuYWRkQXJndW1lbnQoY29uZCk7CisgICAgc3R1YkNhbGwuY2FsbCgpOworICAgIGVt
aXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihOb25aZXJvLCByZWdUMCksIHRhcmdldCk7Cit9
CisKK3ZvaWQgSklUOjplbWl0X29wX2plcV9udWxsKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCit7CisgICAgdW5zaWduZWQgc3JjID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3Bl
cmFuZDsKKyAgICB1bnNpZ25lZCB0YXJnZXQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVy
YW5kOworCisgICAgZW1pdExvYWQoc3JjLCByZWdUMSwgcmVnVDApOworCisgICAgSnVtcCBpc0lt
bWVkaWF0ZSA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMSwgSW1tMzIoSlNWYWx1ZTo6Q2VsbFRh
ZykpOworCisgICAgLy8gRmlyc3QsIGhhbmRsZSBKU0NlbGwgY2FzZXMgLSBjaGVjayBNYXNxdWVy
YWRlc0FzVW5kZWZpbmVkIGJpdCBvbiB0aGUgc3RydWN0dXJlLgorICAgIGxvYWRQdHIoQWRkcmVz
cyhyZWdUMCwgT0JKRUNUX09GRlNFVE9GKEpTQ2VsbCwgbV9zdHJ1Y3R1cmUpKSwgcmVnVDIpOwor
ICAgIGFkZEp1bXAoYnJhbmNoVGVzdDgoTm9uWmVybywgQWRkcmVzcyhyZWdUMiwgT0JKRUNUX09G
RlNFVE9GKFN0cnVjdHVyZSwgbV90eXBlSW5mby5tX2ZsYWdzKSksIEltbTMyKE1hc3F1ZXJhZGVz
QXNVbmRlZmluZWQpKSwgdGFyZ2V0KTsKKworICAgIEp1bXAgd2FzTm90SW1tZWRpYXRlID0ganVt
cCgpOworCisgICAgLy8gTm93IGhhbmRsZSB0aGUgaW1tZWRpYXRlIGNhc2VzIC0gdW5kZWZpbmVk
ICYgbnVsbAorICAgIGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7CisKKyAgICBzZXQzMihFcXVhbCwg
cmVnVDEsIEltbTMyKEpTVmFsdWU6Ok51bGxUYWcpLCByZWdUMik7CisgICAgc2V0MzIoRXF1YWws
IHJlZ1QxLCBJbW0zMihKU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMSk7CisgICAgb3IzMihy
ZWdUMiwgcmVnVDEpOworCisgICAgYWRkSnVtcChicmFuY2hUZXN0MzIoTm9uWmVybywgcmVnVDEp
LCB0YXJnZXQpOworCisgICAgd2FzTm90SW1tZWRpYXRlLmxpbmsodGhpcyk7Cit9CisKK3ZvaWQg
SklUOjplbWl0X29wX2puZXFfbnVsbChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQor
eworICAgIHVuc2lnbmVkIHNyYyA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7Cisg
ICAgdW5zaWduZWQgdGFyZ2V0ID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKKwor
ICAgIGVtaXRMb2FkKHNyYywgcmVnVDEsIHJlZ1QwKTsKKworICAgIEp1bXAgaXNJbW1lZGlhdGUg
PSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDEsIEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpKTsKKwor
ICAgIC8vIEZpcnN0LCBoYW5kbGUgSlNDZWxsIGNhc2VzIC0gY2hlY2sgTWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZCBiaXQgb24gdGhlIHN0cnVjdHVyZS4KKyAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAs
IE9CSkVDVF9PRkZTRVRPRihKU0NlbGwsIG1fc3RydWN0dXJlKSksIHJlZ1QyKTsKKyAgICBhZGRK
dW1wKGJyYW5jaFRlc3Q4KFplcm8sIEFkZHJlc3MocmVnVDIsIE9CSkVDVF9PRkZTRVRPRihTdHJ1
Y3R1cmUsIG1fdHlwZUluZm8ubV9mbGFncykpLCBJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVk
KSksIHRhcmdldCk7CisKKyAgICBKdW1wIHdhc05vdEltbWVkaWF0ZSA9IGp1bXAoKTsKKworICAg
IC8vIE5vdyBoYW5kbGUgdGhlIGltbWVkaWF0ZSBjYXNlcyAtIHVuZGVmaW5lZCAmIG51bGwKKyAg
ICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOworCisgICAgc2V0MzIoRXF1YWwsIHJlZ1QxLCBJbW0z
MihKU1ZhbHVlOjpOdWxsVGFnKSwgcmVnVDIpOworICAgIHNldDMyKEVxdWFsLCByZWdUMSwgSW1t
MzIoSlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDEpOworICAgIG9yMzIocmVnVDIsIHJlZ1Qx
KTsKKworICAgIGFkZEp1bXAoYnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QxKSwgdGFyZ2V0KTsKKwor
ICAgIHdhc05vdEltbWVkaWF0ZS5saW5rKHRoaXMpOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9q
bmVxX3B0cihJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIHVuc2lnbmVk
IHNyYyA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CisgICAgSlNDZWxsKiBwdHIg
PSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5qc0NlbGw7CisgICAgdW5zaWduZWQgdGFyZ2V0ID0g
Y3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKKworICAgIGVtaXRMb2FkKHNyYywgcmVn
VDEsIHJlZ1QwKTsKKyAgICBhZGRKdW1wKGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMSwgSW1tMzIo
SlNWYWx1ZTo6Q2VsbFRhZykpLCB0YXJnZXQpOworICAgIGFkZEp1bXAoYnJhbmNoUHRyKE5vdEVx
dWFsLCByZWdUMCwgSW1tUHRyKHB0cikpLCB0YXJnZXQpOworfQorCit2b2lkIEpJVDo6ZW1pdF9v
cF9qc3IoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBpbnQgcmV0QWRk
ckRzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CisgICAgaW50IHRhcmdldCA9
IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CisgICAgRGF0YUxhYmVsUHRyIHN0b3Jl
TG9jYXRpb24gPSBzdG9yZVB0cldpdGhQYXRjaChJbW1QdHIoMCksIEFkZHJlc3MoY2FsbEZyYW1l
UmVnaXN0ZXIsIHNpemVvZihSZWdpc3RlcikgKiByZXRBZGRyRHN0KSk7CisgICAgYWRkSnVtcChq
dW1wKCksIHRhcmdldCk7CisgICAgbV9qc3JTaXRlcy5hcHBlbmQoSlNSSW5mbyhzdG9yZUxvY2F0
aW9uLCBsYWJlbCgpKSk7Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX3NyZXQoSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBqdW1wKEFkZHJlc3MoY2FsbEZyYW1lUmVnaXN0
ZXIsIHNpemVvZihSZWdpc3RlcikgKiBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSk7
Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX2VxKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCit7CisgICAgdW5zaWduZWQgZHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFu
ZDsKKyAgICB1bnNpZ25lZCBzcmMxID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsK
KyAgICB1bnNpZ25lZCBzcmMyID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKKwor
ICAgIGVtaXRMb2FkMihzcmMxLCByZWdUMSwgcmVnVDAsIHNyYzIsIHJlZ1QzLCByZWdUMik7Cisg
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QxLCByZWdUMykpOworICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaDMyKEVxdWFsLCByZWdUMSwgSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZykp
KTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2gzMihCZWxvdywgcmVnVDEsIEltbTMyKEpTVmFsdWU6
Okxvd2VzdFRhZykpKTsKKworICAgIHNldDgoRXF1YWwsIHJlZ1QwLCByZWdUMiwgcmVnVDApOwor
ICAgIG9yMzIoSW1tMzIoSlNWYWx1ZTo6RmFsc2VUYWcpLCByZWdUMCk7CisKKyAgICBlbWl0U3Rv
cmVCb29sKGRzdCwgcmVnVDApOworfQorCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZXEoSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlcikKK3sKKyAgICB1bnNpZ25lZCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5v
cGVyYW5kOworICAgIHVuc2lnbmVkIG9wMSA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJh
bmQ7CisgICAgdW5zaWduZWQgb3AyID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsK
KworICAgIEp1bXBMaXN0IHN0b3JlUmVzdWx0OworICAgIEp1bXBMaXN0IGdlbmVyaWNDYXNlOwor
CisgICAgZ2VuZXJpY0Nhc2UuYXBwZW5kKGdldFNsb3dDYXNlKGl0ZXIpKTsgLy8gdGFncyBub3Qg
ZXF1YWwKKworICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8gdGFncyBlcXVhbCBhbmQgSlNDZWxs
CisgICAgZ2VuZXJpY0Nhc2UuYXBwZW5kKGJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVzcyhyZWdU
MCksIEltbVB0cihtX2dsb2JhbERhdGEtPmpzU3RyaW5nVlB0cikpKTsKKyAgICBnZW5lcmljQ2Fz
ZS5hcHBlbmQoYnJhbmNoUHRyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QyKSwgSW1tUHRyKG1fZ2xv
YmFsRGF0YS0+anNTdHJpbmdWUHRyKSkpOworCisgICAgLy8gU3RyaW5nIGNhc2UuCisgICAgSklU
U3R1YkNhbGwgc3R1YkNhbGxFcVN0cmluZ3ModGhpcywgY3RpX29wX2VxX3N0cmluZ3MpOworICAg
IHN0dWJDYWxsRXFTdHJpbmdzLmFkZEFyZ3VtZW50KHJlZ1QwKTsKKyAgICBzdHViQ2FsbEVxU3Ry
aW5ncy5hZGRBcmd1bWVudChyZWdUMik7CisgICAgc3R1YkNhbGxFcVN0cmluZ3MuY2FsbCgpOwor
ICAgIHN0b3JlUmVzdWx0LmFwcGVuZChqdW1wKCkpOworCisgICAgLy8gR2VuZXJpYyBjYXNlLgor
ICAgIGdlbmVyaWNDYXNlLmFwcGVuZChnZXRTbG93Q2FzZShpdGVyKSk7IC8vIGRvdWJsZXMKKyAg
ICBnZW5lcmljQ2FzZS5saW5rKHRoaXMpOworICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxsRXEodGhp
cywgY3RpX29wX2VxKTsKKyAgICBzdHViQ2FsbEVxLmFkZEFyZ3VtZW50KG9wMSk7CisgICAgc3R1
YkNhbGxFcS5hZGRBcmd1bWVudChvcDIpOworICAgIHN0dWJDYWxsRXEuY2FsbChyZWdUMCk7CisK
KyAgICBzdG9yZVJlc3VsdC5saW5rKHRoaXMpOworICAgIG9yMzIoSW1tMzIoSlNWYWx1ZTo6RmFs
c2VUYWcpLCByZWdUMCk7CisgICAgZW1pdFN0b3JlQm9vbChkc3QsIHJlZ1QwKTsKK30KKwordm9p
ZCBKSVQ6OmVtaXRfb3BfbmVxKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7Cisg
ICAgdW5zaWduZWQgZHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKKyAgICB1
bnNpZ25lZCBzcmMxID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKKyAgICB1bnNp
Z25lZCBzcmMyID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKKworICAgIGVtaXRM
b2FkMihzcmMxLCByZWdUMSwgcmVnVDAsIHNyYzIsIHJlZ1QzLCByZWdUMik7CisgICAgYWRkU2xv
d0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QxLCByZWdUMykpOworICAgIGFkZFNsb3dDYXNl
KGJyYW5jaDMyKEVxdWFsLCByZWdUMSwgSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZykpKTsKKyAgICBh
ZGRTbG93Q2FzZShicmFuY2gzMihCZWxvdywgcmVnVDEsIEltbTMyKEpTVmFsdWU6Okxvd2VzdFRh
ZykpKTsKKworICAgIHNldDgoTm90RXF1YWwsIHJlZ1QwLCByZWdUMiwgcmVnVDApOworICAgIG9y
MzIoSW1tMzIoSlNWYWx1ZTo6RmFsc2VUYWcpLCByZWdUMCk7CisKKyAgICBlbWl0U3RvcmVCb29s
KGRzdCwgcmVnVDApOworfQorCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmVxKEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0
ZXIpCit7CisgICAgdW5zaWduZWQgZHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFu
ZDsKKworICAgIEp1bXBMaXN0IHN0b3JlUmVzdWx0OworICAgIEp1bXBMaXN0IGdlbmVyaWNDYXNl
OworCisgICAgZ2VuZXJpY0Nhc2UuYXBwZW5kKGdldFNsb3dDYXNlKGl0ZXIpKTsgLy8gdGFncyBu
b3QgZXF1YWwKKworICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8gdGFncyBlcXVhbCBhbmQgSlND
ZWxsCisgICAgZ2VuZXJpY0Nhc2UuYXBwZW5kKGJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVzcyhy
ZWdUMCksIEltbVB0cihtX2dsb2JhbERhdGEtPmpzU3RyaW5nVlB0cikpKTsKKyAgICBnZW5lcmlj
Q2FzZS5hcHBlbmQoYnJhbmNoUHRyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QyKSwgSW1tUHRyKG1f
Z2xvYmFsRGF0YS0+anNTdHJpbmdWUHRyKSkpOworCisgICAgLy8gU3RyaW5nIGNhc2UuCisgICAg
SklUU3R1YkNhbGwgc3R1YkNhbGxFcVN0cmluZ3ModGhpcywgY3RpX29wX2VxX3N0cmluZ3MpOwor
ICAgIHN0dWJDYWxsRXFTdHJpbmdzLmFkZEFyZ3VtZW50KHJlZ1QwKTsKKyAgICBzdHViQ2FsbEVx
U3RyaW5ncy5hZGRBcmd1bWVudChyZWdUMik7CisgICAgc3R1YkNhbGxFcVN0cmluZ3MuY2FsbChy
ZWdUMCk7CisgICAgc3RvcmVSZXN1bHQuYXBwZW5kKGp1bXAoKSk7CisKKyAgICAvLyBHZW5lcmlj
IGNhc2UuCisgICAgZ2VuZXJpY0Nhc2UuYXBwZW5kKGdldFNsb3dDYXNlKGl0ZXIpKTsgLy8gZG91
YmxlcworICAgIGdlbmVyaWNDYXNlLmxpbmsodGhpcyk7CisgICAgSklUU3R1YkNhbGwgc3R1YkNh
bGxFcSh0aGlzLCBjdGlfb3BfZXEpOworICAgIHN0dWJDYWxsRXEuYWRkQXJndW1lbnQocmVnVDEs
IHJlZ1QwKTsKKyAgICBzdHViQ2FsbEVxLmFkZEFyZ3VtZW50KHJlZ1QzLCByZWdUMik7CisgICAg
c3R1YkNhbGxFcS5jYWxsKHJlZ1QwKTsKKworICAgIHN0b3JlUmVzdWx0LmxpbmsodGhpcyk7Cisg
ICAgeG9yMzIoSW1tMzIoMHgxKSwgcmVnVDApOworICAgIG9yMzIoSW1tMzIoSlNWYWx1ZTo6RmFs
c2VUYWcpLCByZWdUMCk7CisgICAgZW1pdFN0b3JlQm9vbChkc3QsIHJlZ1QwKTsKK30KKwordm9p
ZCBKSVQ6OmNvbXBpbGVPcFN0cmljdEVxKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IENvbXBpbGVPcFN0cmljdEVxVHlwZSB0eXBlKQoreworICAgIHVuc2lnbmVkIGRzdCA9IGN1cnJl
bnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CisgICAgdW5zaWduZWQgc3JjMSA9IGN1cnJlbnRJ
bnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CisgICAgdW5zaWduZWQgc3JjMiA9IGN1cnJlbnRJbnN0
cnVjdGlvblszXS51Lm9wZXJhbmQ7CisKKyAgICBlbWl0TG9hZFRhZyhzcmMxLCByZWdUMCk7Cisg
ICAgZW1pdExvYWRUYWcoc3JjMiwgcmVnVDEpOworCisgICAgLy8gSnVtcCB0byBhIHNsb3cgY2Fz
ZSBpZiBlaXRoZXIgb3BlcmFuZCBpcyBkb3VibGUsIG9yIGlmIGJvdGggb3BlcmFuZHMgYXJlCisg
ICAgLy8gY2VsbHMgYW5kL29yIEludDMycy4KKyAgICBtb3ZlKHJlZ1QwLCByZWdUMik7CisgICAg
YW5kMzIocmVnVDEsIHJlZ1QyKTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2gzMihCZWxvdywgcmVn
VDIsIEltbTMyKEpTVmFsdWU6Okxvd2VzdFRhZykpKTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2gz
MihBYm92ZU9yRXF1YWwsIHJlZ1QyLCBJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSkpOworCisgICAg
aWYgKHR5cGUgPT0gT3BTdHJpY3RFcSkKKyAgICAgICAgc2V0OChFcXVhbCwgcmVnVDAsIHJlZ1Qx
LCByZWdUMCk7CisgICAgZWxzZQorICAgICAgICBzZXQ4KE5vdEVxdWFsLCByZWdUMCwgcmVnVDEs
IHJlZ1QwKTsKKworICAgIG9yMzIoSW1tMzIoSlNWYWx1ZTo6RmFsc2VUYWcpLCByZWdUMCk7CisK
KyAgICBlbWl0U3RvcmVCb29sKGRzdCwgcmVnVDApOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9z
dHJpY3RlcShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIGNvbXBpbGVP
cFN0cmljdEVxKGN1cnJlbnRJbnN0cnVjdGlvbiwgT3BTdHJpY3RFcSk7Cit9CisKK3ZvaWQgSklU
OjplbWl0U2xvd19vcF9zdHJpY3RlcShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQoreworICAgIHVuc2lnbmVkIGRz
dCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CisgICAgdW5zaWduZWQgc3JjMSA9
IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CisgICAgdW5zaWduZWQgc3JjMiA9IGN1
cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7CisKKyAgICBsaW5rU2xvd0Nhc2UoaXRlcik7
CisgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOworCisgICAgSklUU3R1YkNhbGwgc3R1YkNhbGwodGhp
cywgY3RpX29wX3N0cmljdGVxKTsKKyAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChzcmMxKTsKKyAg
ICBzdHViQ2FsbC5hZGRBcmd1bWVudChzcmMyKTsKKyAgICBzdHViQ2FsbC5jYWxsKGRzdCk7Cit9
CisKK3ZvaWQgSklUOjplbWl0X29wX25zdHJpY3RlcShJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQoreworICAgIGNvbXBpbGVPcFN0cmljdEVxKGN1cnJlbnRJbnN0cnVjdGlvbiwgT3BO
U3RyaWN0RXEpOworfQorCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbnN0cmljdGVxKEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
IGl0ZXIpCit7CisgICAgdW5zaWduZWQgZHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3Bl
cmFuZDsKKyAgICB1bnNpZ25lZCBzcmMxID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFu
ZDsKKyAgICB1bnNpZ25lZCBzcmMyID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsK
KworICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKKyAgICBsaW5rU2xvd0Nhc2UoaXRlcik7CisKKyAg
ICBKSVRTdHViQ2FsbCBzdHViQ2FsbCh0aGlzLCBjdGlfb3BfbnN0cmljdGVxKTsKKyAgICBzdHVi
Q2FsbC5hZGRBcmd1bWVudChzcmMxKTsKKyAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChzcmMyKTsK
KyAgICBzdHViQ2FsbC5jYWxsKGRzdCk7Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX2VxX251bGwo
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICB1bnNpZ25lZCBkc3QgPSBj
dXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOworICAgIHVuc2lnbmVkIHNyYyA9IGN1cnJl
bnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CisKKyAgICBlbWl0TG9hZChzcmMsIHJlZ1QxLCBy
ZWdUMCk7CisgICAgSnVtcCBpc0ltbWVkaWF0ZSA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMSwg
SW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZykpOworCisgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBP
QkpFQ1RfT0ZGU0VUT0YoSlNDZWxsLCBtX3N0cnVjdHVyZSkpLCByZWdUMSk7CisgICAgc2V0VGVz
dDgoTm9uWmVybywgQWRkcmVzcyhyZWdUMSwgT0JKRUNUX09GRlNFVE9GKFN0cnVjdHVyZSwgbV90
eXBlSW5mby5tX2ZsYWdzKSksIEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpLCByZWdUMSk7
CisKKyAgICBKdW1wIHdhc05vdEltbWVkaWF0ZSA9IGp1bXAoKTsKKworICAgIGlzSW1tZWRpYXRl
LmxpbmsodGhpcyk7CisKKyAgICBzZXQ4KEVxdWFsLCByZWdUMSwgSW1tMzIoSlNWYWx1ZTo6TnVs
bFRhZyksIHJlZ1QyKTsKKyAgICBzZXQ4KEVxdWFsLCByZWdUMSwgSW1tMzIoSlNWYWx1ZTo6VW5k
ZWZpbmVkVGFnKSwgcmVnVDEpOworICAgIG9yMzIocmVnVDIsIHJlZ1QxKTsKKworICAgIHdhc05v
dEltbWVkaWF0ZS5saW5rKHRoaXMpOworCisgICAgb3IzMihJbW0zMihKU1ZhbHVlOjpGYWxzZVRh
ZyksIHJlZ1QxKTsKKworICAgIGVtaXRTdG9yZUJvb2woZHN0LCByZWdUMSk7Cit9CisKK3ZvaWQg
SklUOjplbWl0X29wX25lcV9udWxsKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7
CisgICAgdW5zaWduZWQgZHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKKyAg
ICB1bnNpZ25lZCBzcmMgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOworCisgICAg
ZW1pdExvYWQoc3JjLCByZWdUMSwgcmVnVDApOworICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBicmFu
Y2gzMihOb3RFcXVhbCwgcmVnVDEsIEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpKTsKKworICAgIGxv
YWRQdHIoQWRkcmVzcyhyZWdUMCwgT0JKRUNUX09GRlNFVE9GKEpTQ2VsbCwgbV9zdHJ1Y3R1cmUp
KSwgcmVnVDEpOworICAgIHNldFRlc3Q4KFplcm8sIEFkZHJlc3MocmVnVDEsIE9CSkVDVF9PRkZT
RVRPRihTdHJ1Y3R1cmUsIG1fdHlwZUluZm8ubV9mbGFncykpLCBJbW0zMihNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkKSwgcmVnVDEpOworCisgICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7
CisKKyAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOworCisgICAgc2V0OChOb3RFcXVhbCwgcmVn
VDEsIEltbTMyKEpTVmFsdWU6Ok51bGxUYWcpLCByZWdUMik7CisgICAgc2V0OChOb3RFcXVhbCwg
cmVnVDEsIEltbTMyKEpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QxKTsKKyAgICBhbmQzMihy
ZWdUMiwgcmVnVDEpOworCisgICAgd2FzTm90SW1tZWRpYXRlLmxpbmsodGhpcyk7CisKKyAgICBv
cjMyKEltbTMyKEpTVmFsdWU6OkZhbHNlVGFnKSwgcmVnVDEpOworCisgICAgZW1pdFN0b3JlQm9v
bChkc3QsIHJlZ1QxKTsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV93aXRoX2Jhc2Uo
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBKSVRTdHViQ2FsbCBzdHVi
Q2FsbCh0aGlzLCBjdGlfb3BfcmVzb2x2ZV93aXRoX2Jhc2UpOworICAgIHN0dWJDYWxsLmFkZEFy
Z3VtZW50KEltbVB0cigmbV9jb2RlQmxvY2stPmlkZW50aWZpZXIoY3VycmVudEluc3RydWN0aW9u
WzNdLnUub3BlcmFuZCkpKTsKKyAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChJbW0zMihjdXJyZW50
SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSk7CisgICAgc3R1YkNhbGwuY2FsbChjdXJyZW50SW5z
dHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfbmV3X2Z1bmNf
ZXhwKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgSklUU3R1YkNhbGwg
c3R1YkNhbGwodGhpcywgY3RpX29wX25ld19mdW5jX2V4cCk7CisgICAgc3R1YkNhbGwuYWRkQXJn
dW1lbnQoSW1tUHRyKG1fY29kZUJsb2NrLT5mdW5jdGlvbkV4cHIoY3VycmVudEluc3RydWN0aW9u
WzJdLnUub3BlcmFuZCkpKTsKKyAgICBzdHViQ2FsbC5jYWxsKGN1cnJlbnRJbnN0cnVjdGlvblsx
XS51Lm9wZXJhbmQpOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF90aHJvdyhJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQoreworICAgIHVuc2lnbmVkIGV4Y2VwdGlvbiA9IGN1cnJlbnRJ
bnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CisgICAgSklUU3R1YkNhbGwgc3R1YkNhbGwodGhpcywg
Y3RpX29wX3Rocm93KTsKKyAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChleGNlcHRpb24pOworICAg
IHN0dWJDYWxsLmNhbGwoKTsKKworI2lmbmRlZiBOREVCVUcKKyAgICAvLyBjdGlfb3BfdGhyb3cg
YWx3YXlzIGNoYW5nZXMgaXQncyByZXR1cm4gYWRkcmVzcywKKyAgICAvLyB0aGlzIHBvaW50IGlu
IHRoZSBjb2RlIHNob3VsZCBuZXZlciBiZSByZWFjaGVkLgorICAgIGJyZWFrcG9pbnQoKTsKKyNl
bmRpZgorfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcG5hbWVzKEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgaW50IGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51
Lm9wZXJhbmQ7CisgICAgaW50IGJhc2UgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5k
OworICAgIGludCBpID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKKyAgICBpbnQg
c2l6ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbls0XS51Lm9wZXJhbmQ7CisgICAgaW50IGJyZWFrVGFy
Z2V0ID0gY3VycmVudEluc3RydWN0aW9uWzVdLnUub3BlcmFuZDsKKworICAgIEp1bXBMaXN0IGlz
Tm90T2JqZWN0OworCisgICAgZW1pdExvYWQoYmFzZSwgcmVnVDEsIHJlZ1QwKTsKKyAgICBpZiAo
IW1fY29kZUJsb2NrLT5pc0tub3duTm90SW1tZWRpYXRlKGJhc2UpKQorICAgICAgICBpc05vdE9i
amVjdC5hcHBlbmQoYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QxLCBJbW0zMihKU1ZhbHVlOjpDZWxs
VGFnKSkpOworICAgIGlmIChiYXNlICE9IG1fY29kZUJsb2NrLT50aGlzUmVnaXN0ZXIoKSkgewor
ICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIE9CSkVDVF9PRkZTRVRPRihKU0NlbGwsIG1f
c3RydWN0dXJlKSksIHJlZ1QyKTsKKyAgICAgICAgaXNOb3RPYmplY3QuYXBwZW5kKGJyYW5jaDgo
Tm90RXF1YWwsIEFkZHJlc3MocmVnVDIsIE9CSkVDVF9PRkZTRVRPRihTdHJ1Y3R1cmUsIG1fdHlw
ZUluZm8ubV90eXBlKSksIEltbTMyKE9iamVjdFR5cGUpKSk7CisgICAgfQorCisgICAgLy8gV2Ug
Y291bGQgaW5saW5lIHRoZSBjYXNlIHdoZXJlIHlvdSBoYXZlIGEgdmFsaWQgY2FjaGUsIGJ1dAor
ICAgIC8vIHRoaXMgY2FsbCBkb2Vzbid0IHNlZW0gdG8gYmUgaG90LgorICAgIExhYmVsIGlzT2Jq
ZWN0KHRoaXMpOworICAgIEpJVFN0dWJDYWxsIGdldFBuYW1lc1N0dWJDYWxsKHRoaXMsIGN0aV9v
cF9nZXRfcG5hbWVzKTsKKyAgICBnZXRQbmFtZXNTdHViQ2FsbC5hZGRBcmd1bWVudChyZWdUMCk7
CisgICAgZ2V0UG5hbWVzU3R1YkNhbGwuY2FsbChkc3QpOworICAgIGxvYWQzMihBZGRyZXNzKHJl
Z1QwLCBPQkpFQ1RfT0ZGU0VUT0YoSlNQcm9wZXJ0eU5hbWVJdGVyYXRvciwgbV9qc1N0cmluZ3NT
aXplKSksIHJlZ1QzKTsKKyAgICBzdG9yZTMyKEltbTMyKDApLCBhZGRyZXNzRm9yKGkpKTsKKyAg
ICBzdG9yZTMyKHJlZ1QzLCBhZGRyZXNzRm9yKHNpemUpKTsKKyAgICBKdW1wIGVuZCA9IGp1bXAo
KTsKKworICAgIGlzTm90T2JqZWN0LmxpbmsodGhpcyk7CisgICAgYWRkSnVtcChicmFuY2gzMihF
cXVhbCwgcmVnVDEsIEltbTMyKEpTVmFsdWU6Ok51bGxUYWcpKSwgYnJlYWtUYXJnZXQpOworICAg
IGFkZEp1bXAoYnJhbmNoMzIoRXF1YWwsIHJlZ1QxLCBJbW0zMihKU1ZhbHVlOjpVbmRlZmluZWRU
YWcpKSwgYnJlYWtUYXJnZXQpOworICAgIEpJVFN0dWJDYWxsIHRvT2JqZWN0U3R1YkNhbGwodGhp
cywgY3RpX3RvX29iamVjdCk7CisgICAgdG9PYmplY3RTdHViQ2FsbC5hZGRBcmd1bWVudChyZWdU
MSwgcmVnVDApOworICAgIHRvT2JqZWN0U3R1YkNhbGwuY2FsbChiYXNlKTsKKyAgICBqdW1wKCku
bGlua1RvKGlzT2JqZWN0LCB0aGlzKTsKKworICAgIGVuZC5saW5rKHRoaXMpOworfQorCit2b2lk
IEpJVDo6ZW1pdF9vcF9uZXh0X3BuYW1lKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
Cit7CisgICAgaW50IGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CisgICAg
aW50IGJhc2UgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOworICAgIGludCBpID0g
Y3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKKyAgICBpbnQgc2l6ZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbls0XS51Lm9wZXJhbmQ7CisgICAgaW50IGl0ID0gY3VycmVudEluc3RydWN0aW9u
WzVdLnUub3BlcmFuZDsKKyAgICBpbnQgdGFyZ2V0ID0gY3VycmVudEluc3RydWN0aW9uWzZdLnUu
b3BlcmFuZDsKKworICAgIEp1bXBMaXN0IGNhbGxIYXNQcm9wZXJ0eTsKKworICAgIExhYmVsIGJl
Z2luKHRoaXMpOworICAgIGxvYWQzMihhZGRyZXNzRm9yKGkpLCByZWdUMCk7CisgICAgSnVtcCBl
bmQgPSBicmFuY2gzMihFcXVhbCwgcmVnVDAsIGFkZHJlc3NGb3Ioc2l6ZSkpOworCisgICAgLy8g
R3JhYiBrZXkgQCBpCisgICAgbG9hZFB0cihhZGRyZXNzRm9yKGl0KSwgcmVnVDEpOworICAgIGxv
YWRQdHIoQWRkcmVzcyhyZWdUMSwgT0JKRUNUX09GRlNFVE9GKEpTUHJvcGVydHlOYW1lSXRlcmF0
b3IsIG1fanNTdHJpbmdzKSksIHJlZ1QyKTsKKyAgICBsb2FkMzIoQmFzZUluZGV4KHJlZ1QyLCBy
ZWdUMCwgVGltZXNFaWdodCksIHJlZ1QyKTsKKyAgICBzdG9yZTMyKEltbTMyKEpTVmFsdWU6OkNl
bGxUYWcpLCB0YWdGb3IoZHN0KSk7CisgICAgc3RvcmUzMihyZWdUMiwgcGF5bG9hZEZvcihkc3Qp
KTsKKworICAgIC8vIEluY3JlbWVudCBpCisgICAgYWRkMzIoSW1tMzIoMSksIHJlZ1QwKTsKKyAg
ICBzdG9yZTMyKHJlZ1QwLCBhZGRyZXNzRm9yKGkpKTsKKworICAgIC8vIFZlcmlmeSB0aGF0IGkg
aXMgdmFsaWQ6CisgICAgbG9hZFB0cihhZGRyZXNzRm9yKGJhc2UpLCByZWdUMCk7CisKKyAgICAv
LyBUZXN0IGJhc2UncyBzdHJ1Y3R1cmUKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIE9CSkVD
VF9PRkZTRVRPRihKU0NlbGwsIG1fc3RydWN0dXJlKSksIHJlZ1QyKTsKKyAgICBjYWxsSGFzUHJv
cGVydHkuYXBwZW5kKGJyYW5jaFB0cihOb3RFcXVhbCwgcmVnVDIsIEFkZHJlc3MoQWRkcmVzcyhy
ZWdUMSwgT0JKRUNUX09GRlNFVE9GKEpTUHJvcGVydHlOYW1lSXRlcmF0b3IsIG1fY2FjaGVkU3Ry
dWN0dXJlKSkpKSk7CisKKyAgICAvLyBUZXN0IGJhc2UncyBwcm90b3R5cGUgY2hhaW4KKyAgICBs
b2FkUHRyKEFkZHJlc3MoQWRkcmVzcyhyZWdUMSwgT0JKRUNUX09GRlNFVE9GKEpTUHJvcGVydHlO
YW1lSXRlcmF0b3IsIG1fY2FjaGVkUHJvdG90eXBlQ2hhaW4pKSksIHJlZ1QzKTsKKyAgICBsb2Fk
UHRyKEFkZHJlc3MocmVnVDMsIE9CSkVDVF9PRkZTRVRPRihTdHJ1Y3R1cmVDaGFpbiwgbV92ZWN0
b3IpKSwgcmVnVDMpOworICAgIGFkZEp1bXAoYnJhbmNoVGVzdFB0cihaZXJvLCBBZGRyZXNzKHJl
Z1QzKSksIHRhcmdldCk7CisKKyAgICBMYWJlbCBjaGVja1Byb3RvdHlwZSh0aGlzKTsKKyAgICBj
YWxsSGFzUHJvcGVydHkuYXBwZW5kKGJyYW5jaDMyKEVxdWFsLCBBZGRyZXNzKHJlZ1QyLCBPQkpF
Q1RfT0ZGU0VUT0YoU3RydWN0dXJlLCBtX3Byb3RvdHlwZSkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNW
YWx1ZSwgdS5hc0JpdHMudGFnKSksIEltbTMyKEpTVmFsdWU6Ok51bGxUYWcpKSk7CisgICAgbG9h
ZFB0cihBZGRyZXNzKHJlZ1QyLCBPQkpFQ1RfT0ZGU0VUT0YoU3RydWN0dXJlLCBtX3Byb3RvdHlw
ZSkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkpLCByZWdUMik7
CisgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBPQkpFQ1RfT0ZGU0VUT0YoSlNDZWxsLCBtX3N0
cnVjdHVyZSkpLCByZWdUMik7CisgICAgY2FsbEhhc1Byb3BlcnR5LmFwcGVuZChicmFuY2hQdHIo
Tm90RXF1YWwsIHJlZ1QyLCBBZGRyZXNzKHJlZ1QzKSkpOworICAgIGFkZFB0cihJbW0zMihzaXpl
b2YoU3RydWN0dXJlKikpLCByZWdUMyk7CisgICAgYnJhbmNoVGVzdFB0cihOb25aZXJvLCBBZGRy
ZXNzKHJlZ1QzKSkubGlua1RvKGNoZWNrUHJvdG90eXBlLCB0aGlzKTsKKworICAgIC8vIENvbnRp
bnVlIGxvb3AuCisgICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7CisKKyAgICAvLyBTbG93IGNh
c2U6IEFzayB0aGUgb2JqZWN0IGlmIGkgaXMgdmFsaWQuCisgICAgY2FsbEhhc1Byb3BlcnR5Lmxp
bmsodGhpcyk7CisgICAgbG9hZFB0cihhZGRyZXNzRm9yKGRzdCksIHJlZ1QxKTsKKyAgICBKSVRT
dHViQ2FsbCBzdHViQ2FsbCh0aGlzLCBjdGlfaGFzX3Byb3BlcnR5KTsKKyAgICBzdHViQ2FsbC5h
ZGRBcmd1bWVudChyZWdUMCk7CisgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQocmVnVDEpOworICAg
IHN0dWJDYWxsLmNhbGwoKTsKKworICAgIC8vIFRlc3QgZm9yIHZhbGlkIGtleS4KKyAgICBhZGRK
dW1wKGJyYW5jaFRlc3QzMihOb25aZXJvLCByZWdUMCksIHRhcmdldCk7CisgICAganVtcCgpLmxp
bmtUbyhiZWdpbiwgdGhpcyk7CisKKyAgICAvLyBFbmQgb2YgbG9vcC4KKyAgICBlbmQubGluayh0
aGlzKTsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfcHVzaF9zY29wZShJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQoreworICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGN0aV9v
cF9wdXNoX3Njb3BlKTsKKyAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChjdXJyZW50SW5zdHJ1Y3Rp
b25bMV0udS5vcGVyYW5kKTsKKyAgICBzdHViQ2FsbC5jYWxsKGN1cnJlbnRJbnN0cnVjdGlvblsx
XS51Lm9wZXJhbmQpOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9wb3Bfc2NvcGUoSW5zdHJ1Y3Rp
b24qKQoreworICAgIEpJVFN0dWJDYWxsKHRoaXMsIGN0aV9vcF9wb3Bfc2NvcGUpLmNhbGwoKTsK
K30KKwordm9pZCBKSVQ6OmVtaXRfb3BfdG9fanNudW1iZXIoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKK3sKKyAgICBpbnQgZHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3Bl
cmFuZDsKKyAgICBpbnQgc3JjID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKKwor
ICAgIGVtaXRMb2FkKHNyYywgcmVnVDEsIHJlZ1QwKTsKKworICAgIEp1bXAgaXNJbnQzMiA9IGJy
YW5jaDMyKEVxdWFsLCByZWdUMSwgSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpKTsKKyAgICBhZGRT
bG93Q2FzZShicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBJbW0zMihKU1ZhbHVlOjpFbXB0
eVZhbHVlVGFnKSkpOworICAgIGlzSW50MzIubGluayh0aGlzKTsKKworICAgIGlmIChzcmMgIT0g
ZHN0KQorICAgICAgICBlbWl0U3RvcmUoZHN0LCByZWdUMSwgcmVnVDApOworICAgIG1hcChtX2J5
dGVjb2RlSW5kZXggKyBPUENPREVfTEVOR1RIKG9wX3RvX2pzbnVtYmVyKSwgZHN0LCByZWdUMSwg
cmVnVDApOworfQorCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdG9fanNudW1iZXIoSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYg
aXRlcikKK3sKKyAgICBpbnQgZHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsK
KworICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKKworICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRo
aXMsIGN0aV9vcF90b19qc251bWJlcik7CisgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQocmVnVDEs
IHJlZ1QwKTsKKyAgICBzdHViQ2FsbC5jYWxsKGRzdCk7Cit9CisKK3ZvaWQgSklUOjplbWl0X29w
X3B1c2hfbmV3X3Njb3BlKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAg
SklUU3R1YkNhbGwgc3R1YkNhbGwodGhpcywgY3RpX29wX3B1c2hfbmV3X3Njb3BlKTsKKyAgICBz
dHViQ2FsbC5hZGRBcmd1bWVudChJbW1QdHIoJm1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGN1cnJl
bnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpKSk7CisgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQo
Y3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZCk7CisgICAgc3R1YkNhbGwuY2FsbChjdXJy
ZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfY2F0
Y2goSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICB1bnNpZ25lZCBleGNl
cHRpb24gPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOworCisgICAgLy8gVGhpcyBv
cGNvZGUgb25seSBleGVjdXRlcyBhZnRlciBhIHJldHVybiBmcm9tIGN0aV9vcF90aHJvdy4KKwor
ICAgIC8vIGN0aV9vcF90aHJvdyBtYXkgaGF2ZSB0YWtlbiB1cyB0byBhIGNhbGwgZnJhbWUgZnVy
dGhlciB1cCB0aGUgc3RhY2s7IHJlbG9hZAorICAgIC8vIHRoZSBjYWxsIGZyYW1lIHBvaW50ZXIg
dG8gYWRqdXN0LgorICAgIHBlZWsoY2FsbEZyYW1lUmVnaXN0ZXIsIE9CSkVDVF9PRkZTRVRPRihz
dHJ1Y3QgSklUU3RhY2tGcmFtZSwgY2FsbEZyYW1lKSAvIHNpemVvZih2b2lkKikpOworCisgICAg
Ly8gTm93IHN0b3JlIHRoZSBleGNlcHRpb24gcmV0dXJuZWQgYnkgY3RpX29wX3Rocm93LgorICAg
IGVtaXRTdG9yZShleGNlcHRpb24sIHJlZ1QxLCByZWdUMCk7CisgICAgbWFwKG1fYnl0ZWNvZGVJ
bmRleCArIE9QQ09ERV9MRU5HVEgob3BfY2F0Y2gpLCBleGNlcHRpb24sIHJlZ1QxLCByZWdUMCk7
Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX2ptcF9zY29wZXMoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKK3sKKyAgICBKSVRTdHViQ2FsbCBzdHViQ2FsbCh0aGlzLCBjdGlfb3Bfam1w
X3Njb3Blcyk7CisgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoSW1tMzIoY3VycmVudEluc3RydWN0
aW9uWzFdLnUub3BlcmFuZCkpOworICAgIHN0dWJDYWxsLmNhbGwoKTsKKyAgICBhZGRKdW1wKGp1
bXAoKSwgY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7Cit9CisKK3ZvaWQgSklUOjpl
bWl0X29wX3N3aXRjaF9pbW0oSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAg
ICB1bnNpZ25lZCB0YWJsZUluZGV4ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsK
KyAgICB1bnNpZ25lZCBkZWZhdWx0T2Zmc2V0ID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3Bl
cmFuZDsKKyAgICB1bnNpZ25lZCBzY3J1dGluZWUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5v
cGVyYW5kOworCisgICAgLy8gY3JlYXRlIGp1bXAgdGFibGUgZm9yIHN3aXRjaCBkZXN0aW5hdGlv
bnMsIHRyYWNrIHRoaXMgc3dpdGNoIHN0YXRlbWVudC4KKyAgICBTaW1wbGVKdW1wVGFibGUqIGp1
bXBUYWJsZSA9ICZtX2NvZGVCbG9jay0+aW1tZWRpYXRlU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5k
ZXgpOworICAgIG1fc3dpdGNoZXMuYXBwZW5kKFN3aXRjaFJlY29yZChqdW1wVGFibGUsIG1fYnl0
ZWNvZGVJbmRleCwgZGVmYXVsdE9mZnNldCwgU3dpdGNoUmVjb3JkOjpJbW1lZGlhdGUpKTsKKyAg
ICBqdW1wVGFibGUtPmN0aU9mZnNldHMuZ3JvdyhqdW1wVGFibGUtPmJyYW5jaE9mZnNldHMuc2l6
ZSgpKTsKKworICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGN0aV9vcF9zd2l0Y2hfaW1t
KTsKKyAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChzY3J1dGluZWUpOworICAgIHN0dWJDYWxsLmFk
ZEFyZ3VtZW50KEltbTMyKHRhYmxlSW5kZXgpKTsKKyAgICBzdHViQ2FsbC5jYWxsKCk7CisgICAg
anVtcChyZWdUMCk7Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9jaGFyKEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgdW5zaWduZWQgdGFibGVJbmRleCA9IGN1
cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CisgICAgdW5zaWduZWQgZGVmYXVsdE9mZnNl
dCA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CisgICAgdW5zaWduZWQgc2NydXRp
bmVlID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKKworICAgIC8vIGNyZWF0ZSBq
dW1wIHRhYmxlIGZvciBzd2l0Y2ggZGVzdGluYXRpb25zLCB0cmFjayB0aGlzIHN3aXRjaCBzdGF0
ZW1lbnQuCisgICAgU2ltcGxlSnVtcFRhYmxlKiBqdW1wVGFibGUgPSAmbV9jb2RlQmxvY2stPmNo
YXJhY3RlclN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICBtX3N3aXRjaGVzLmFwcGVu
ZChTd2l0Y2hSZWNvcmQoanVtcFRhYmxlLCBtX2J5dGVjb2RlSW5kZXgsIGRlZmF1bHRPZmZzZXQs
IFN3aXRjaFJlY29yZDo6Q2hhcmFjdGVyKSk7CisgICAganVtcFRhYmxlLT5jdGlPZmZzZXRzLmdy
b3coanVtcFRhYmxlLT5icmFuY2hPZmZzZXRzLnNpemUoKSk7CisKKyAgICBKSVRTdHViQ2FsbCBz
dHViQ2FsbCh0aGlzLCBjdGlfb3Bfc3dpdGNoX2NoYXIpOworICAgIHN0dWJDYWxsLmFkZEFyZ3Vt
ZW50KHNjcnV0aW5lZSk7CisgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoSW1tMzIodGFibGVJbmRl
eCkpOworICAgIHN0dWJDYWxsLmNhbGwoKTsKKyAgICBqdW1wKHJlZ1QwKTsKK30KKwordm9pZCBK
SVQ6OmVtaXRfb3Bfc3dpdGNoX3N0cmluZyhJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQoreworICAgIHVuc2lnbmVkIHRhYmxlSW5kZXggPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5v
cGVyYW5kOworICAgIHVuc2lnbmVkIGRlZmF1bHRPZmZzZXQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25b
Ml0udS5vcGVyYW5kOworICAgIHVuc2lnbmVkIHNjcnV0aW5lZSA9IGN1cnJlbnRJbnN0cnVjdGlv
blszXS51Lm9wZXJhbmQ7CisKKyAgICAvLyBjcmVhdGUganVtcCB0YWJsZSBmb3Igc3dpdGNoIGRl
c3RpbmF0aW9ucywgdHJhY2sgdGhpcyBzd2l0Y2ggc3RhdGVtZW50LgorICAgIFN0cmluZ0p1bXBU
YWJsZSoganVtcFRhYmxlID0gJm1fY29kZUJsb2NrLT5zdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFi
bGVJbmRleCk7CisgICAgbV9zd2l0Y2hlcy5hcHBlbmQoU3dpdGNoUmVjb3JkKGp1bXBUYWJsZSwg
bV9ieXRlY29kZUluZGV4LCBkZWZhdWx0T2Zmc2V0KSk7CisKKyAgICBKSVRTdHViQ2FsbCBzdHVi
Q2FsbCh0aGlzLCBjdGlfb3Bfc3dpdGNoX3N0cmluZyk7CisgICAgc3R1YkNhbGwuYWRkQXJndW1l
bnQoc2NydXRpbmVlKTsKKyAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChJbW0zMih0YWJsZUluZGV4
KSk7CisgICAgc3R1YkNhbGwuY2FsbCgpOworICAgIGp1bXAocmVnVDApOworfQorCit2b2lkIEpJ
VDo6ZW1pdF9vcF9uZXdfZXJyb3IoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sK
KyAgICB1bnNpZ25lZCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOworICAg
IHVuc2lnbmVkIHR5cGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOworICAgIHVu
c2lnbmVkIG1lc3NhZ2UgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOworCisgICAg
SklUU3R1YkNhbGwgc3R1YkNhbGwodGhpcywgY3RpX29wX25ld19lcnJvcik7CisgICAgc3R1YkNh
bGwuYWRkQXJndW1lbnQoSW1tMzIodHlwZSkpOworICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KG1f
Y29kZUJsb2NrLT5nZXRDb25zdGFudChtZXNzYWdlKSk7CisgICAgc3R1YkNhbGwuYWRkQXJndW1l
bnQoSW1tMzIobV9ieXRlY29kZUluZGV4KSk7CisgICAgc3R1YkNhbGwuY2FsbChkc3QpOworfQor
Cit2b2lkIEpJVDo6ZW1pdF9vcF9kZWJ1ZyhJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQoreworI2lmIEVOQUJMRShERUJVR19XSVRIX0JSRUFLUE9JTlQpCisgICAgVU5VU0VEX1BBUkFN
KGN1cnJlbnRJbnN0cnVjdGlvbik7CisgICAgYnJlYWtwb2ludCgpOworI2Vsc2UKKyAgICBKSVRT
dHViQ2FsbCBzdHViQ2FsbCh0aGlzLCBjdGlfb3BfZGVidWcpOworICAgIHN0dWJDYWxsLmFkZEFy
Z3VtZW50KEltbTMyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpKTsKKyAgICBzdHVi
Q2FsbC5hZGRBcmd1bWVudChJbW0zMihjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKSk7
CisgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoSW1tMzIoY3VycmVudEluc3RydWN0aW9uWzNdLnUu
b3BlcmFuZCkpOworICAgIHN0dWJDYWxsLmNhbGwoKTsKKyNlbmRpZgorfQorCisKK3ZvaWQgSklU
OjplbWl0X29wX2VudGVyKEluc3RydWN0aW9uKikKK3sKKyAgICAvLyBFdmVuIHRob3VnaCBKSVQg
Y29kZSBkb2Vzbid0IHVzZSB0aGVtLCB3ZSBpbml0aWFsaXplIG91ciBjb25zdGFudAorICAgIC8v
IHJlZ2lzdGVycyB0byB6YXAgc3RhbGUgcG9pbnRlcnMsIHRvIGF2b2lkIHVubmVjZXNzYXJpbHkg
cHJvbG9uZ2luZworICAgIC8vIG9iamVjdCBsaWZldGltZSBhbmQgaW5jcmVhc2luZyBHQyBwcmVz
c3VyZS4KKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG1fY29kZUJsb2NrLT5tX251bVZhcnM7ICsr
aSkKKyAgICAgICAgZW1pdFN0b3JlKGksIGpzVW5kZWZpbmVkKCkpOworfQorCit2b2lkIEpJVDo6
ZW1pdF9vcF9lbnRlcl93aXRoX2FjdGl2YXRpb24oSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKK3sKKyAgICBlbWl0X29wX2VudGVyKGN1cnJlbnRJbnN0cnVjdGlvbik7CisKKyAgICBK
SVRTdHViQ2FsbCh0aGlzLCBjdGlfb3BfcHVzaF9hY3RpdmF0aW9uKS5jYWxsKGN1cnJlbnRJbnN0
cnVjdGlvblsxXS51Lm9wZXJhbmQpOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9jcmVhdGVfYXJn
dW1lbnRzKEluc3RydWN0aW9uKikKK3sKKyAgICBKdW1wIGFyZ3NDcmVhdGVkID0gYnJhbmNoMzIo
Tm90RXF1YWwsIHRhZ0ZvcihSZWdpc3RlckZpbGU6OkFyZ3VtZW50c1JlZ2lzdGVyLCBjYWxsRnJh
bWVSZWdpc3RlciksIEltbTMyKEpTVmFsdWU6OkVtcHR5VmFsdWVUYWcpKTsKKworICAgIC8vIElm
IHdlIGdldCBoZXJlIHRoZSBhcmd1bWVudHMgcG9pbnRlciBpcyBhIG51bGwgY2VsbCAtIGkuZS4g
YXJndW1lbnRzIG5lZWQgbGF6eSBjcmVhdGlvbi4KKyAgICBpZiAobV9jb2RlQmxvY2stPm1fbnVt
UGFyYW1ldGVycyA9PSAxKQorICAgICAgICBKSVRTdHViQ2FsbCh0aGlzLCBjdGlfb3BfY3JlYXRl
X2FyZ3VtZW50c19ub19wYXJhbXMpLmNhbGwoKTsKKyAgICBlbHNlCisgICAgICAgIEpJVFN0dWJD
YWxsKHRoaXMsIGN0aV9vcF9jcmVhdGVfYXJndW1lbnRzKS5jYWxsKCk7CisKKyAgICBhcmdzQ3Jl
YXRlZC5saW5rKHRoaXMpOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9pbml0X2FyZ3VtZW50cyhJ
bnN0cnVjdGlvbiopCit7CisgICAgZW1pdFN0b3JlKFJlZ2lzdGVyRmlsZTo6QXJndW1lbnRzUmVn
aXN0ZXIsIEpTVmFsdWUoKSwgY2FsbEZyYW1lUmVnaXN0ZXIpOworfQorCit2b2lkIEpJVDo6ZW1p
dF9vcF9jb252ZXJ0X3RoaXMoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAg
ICB1bnNpZ25lZCB0aGlzUmVnaXN0ZXIgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5k
OworCisgICAgZW1pdExvYWQodGhpc1JlZ2lzdGVyLCByZWdUMSwgcmVnVDApOworCisgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QxLCBJbW0zMihKU1ZhbHVlOjpDZWxsVGFn
KSkpOworCisgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBPQkpFQ1RfT0ZGU0VUT0YoSlNDZWxs
LCBtX3N0cnVjdHVyZSkpLCByZWdUMik7CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdDgoTm9u
WmVybywgQWRkcmVzcyhyZWdUMiwgT0JKRUNUX09GRlNFVE9GKFN0cnVjdHVyZSwgbV90eXBlSW5m
by5tX2ZsYWdzKSksIEltbTMyKE5lZWRzVGhpc0NvbnZlcnNpb24pKSk7CisKKyAgICBtYXAobV9i
eXRlY29kZUluZGV4ICsgT1BDT0RFX0xFTkdUSChvcF9jb252ZXJ0X3RoaXMpLCB0aGlzUmVnaXN0
ZXIsIHJlZ1QxLCByZWdUMCk7Cit9CisKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9jb252ZXJ0X3Ro
aXMoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYgaXRlcikKK3sKKyAgICB1bnNpZ25lZCB0aGlzUmVnaXN0ZXIgPSBjdXJyZW50
SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOworCisgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOworICAg
IGxpbmtTbG93Q2FzZShpdGVyKTsKKworICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGN0
aV9vcF9jb252ZXJ0X3RoaXMpOworICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KHJlZ1QxLCByZWdU
MCk7CisgICAgc3R1YkNhbGwuY2FsbCh0aGlzUmVnaXN0ZXIpOworfQorCit2b2lkIEpJVDo6ZW1p
dF9vcF9wcm9maWxlX3dpbGxfY2FsbChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQor
eworICAgIHBlZWsocmVnVDIsIE9CSkVDVF9PRkZTRVRPRihKSVRTdGFja0ZyYW1lLCBlbmFibGVk
UHJvZmlsZXJSZWZlcmVuY2UpIC8gc2l6ZW9mKHZvaWQqKSk7CisgICAgSnVtcCBub1Byb2ZpbGVy
ID0gYnJhbmNoVGVzdFB0cihaZXJvLCBBZGRyZXNzKHJlZ1QyKSk7CisKKyAgICBKSVRTdHViQ2Fs
bCBzdHViQ2FsbCh0aGlzLCBjdGlfb3BfcHJvZmlsZV93aWxsX2NhbGwpOworICAgIHN0dWJDYWxs
LmFkZEFyZ3VtZW50KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpOworICAgIHN0dWJD
YWxsLmNhbGwoKTsKKyAgICBub1Byb2ZpbGVyLmxpbmsodGhpcyk7Cit9CisKK3ZvaWQgSklUOjpl
bWl0X29wX3Byb2ZpbGVfZGlkX2NhbGwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
K3sKKyAgICBwZWVrKHJlZ1QyLCBPQkpFQ1RfT0ZGU0VUT0YoSklUU3RhY2tGcmFtZSwgZW5hYmxl
ZFByb2ZpbGVyUmVmZXJlbmNlKSAvIHNpemVvZih2b2lkKikpOworICAgIEp1bXAgbm9Qcm9maWxl
ciA9IGJyYW5jaFRlc3RQdHIoWmVybywgQWRkcmVzcyhyZWdUMikpOworCisgICAgSklUU3R1YkNh
bGwgc3R1YkNhbGwodGhpcywgY3RpX29wX3Byb2ZpbGVfZGlkX2NhbGwpOworICAgIHN0dWJDYWxs
LmFkZEFyZ3VtZW50KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpOworICAgIHN0dWJD
YWxsLmNhbGwoKTsKKyAgICBub1Byb2ZpbGVyLmxpbmsodGhpcyk7Cit9CisKK30KKworI2VuZGlm
IC8vIEVOQUJMRShKSVQpICYmIFVTRShKU1ZBTFVFMzJfNjQpCg==
</data>
<flag name="review"
          id="39686"
          type_id="1"
          status="+"
          setter="barraclough"
    />
          </attachment>
      

    </bug>

</bugzilla>